bg2e-js 1.4.32 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +619 -21
- package/bower.json +1 -1
- package/js/bg2e-es2015.js +19 -2
- package/js/bg2e.js +20 -2
- package/js/bg2e.min.js +1 -1
- package/package.json +2 -2
package/js/bg2e.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var bg={version:"1.4.31 - build: 746cf50",utils:{}};try{module.exports=bg}catch(t){}Reflect.defineProperty=Reflect.defineProperty||Object.defineProperty,function(t){window.requestAnimFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t,e){window.setTimeout(t,1e3/60)},bg.utils.initWebGLContext=function(t){var e={gl:null,supported:!1,experimental:!1};try{e.gl=t.getContext("webgl",{preserveDrawingBuffer:!0}),e.supported=null!=e.gl}catch(t){e.supported=!1}if(!e.supported)try{e.gl=t.getContext("experimental-webgl",{preserveDrawingBuffer:!0}),e.supported=null!=e.gl,e.experimental=!0}catch(t){}return e&&(e.gl.uuid=Symbol(e.gl)),e},bg.utils.isBigEndian=function(){var t=new Uint32Array(1);new Uint8Array(t.buffer);return t[0]=255,255==t[3]},bg.utils.isLittleEndian=function(){var t=new Uint32Array(1);new Uint8Array(t.buffer);return t[0]=255,255==t[0]};var e=function(){return $traceurRuntime.createClass(function(t){this.system={},this.browser={},t||(t=navigator.userAgent),this.parseOperatingSystem(t),this.parseBrowser(t)},{parseOperatingSystem:function(t){this.system.OSX=/Macintosh/.test(t),this.system.Windows=/Windows/.test(t),this.system.iPhone=/iPhone/.test(t),this.system.iPodTouch=/iPod/.test(t),this.system.iPad=/iPad/.test(t),this.system.iOS=this.system.iPhone||this.system.iPad||this.system.iPodTouch,this.system.Android=/Android/.test(t),this.system.Linux=!this.system.Android&&/Linux/.test(t),this.system.OSX?(this.system.OSName="OS X",this.parseOSXVersion(t)):this.system.Windows?(this.system.OSName="Windows",this.parseWindowsVersion(t)):this.system.Linux?(this.system.OSName="Linux",this.parseLinuxVersion(t)):this.system.iOS?(this.system.OSName="iOS",this.parseIOSVersion(t)):this.system.Android&&(this.system.OSName="Android",this.parseAndroidVersion(t))},parseBrowser:function(t){if(this.browser.Version={},this.browser.Safari=/Version\/([\d\.]+) Safari\//.test(t),this.browser.Safari&&(this.browser.Name="Safari",this.browser.Vendor="Apple",this.browser.Version.versionString=RegExp.$1),this.browser.Chrome=/Chrome\/([\d\.]+) Safari\//.test(t),this.browser.Chrome&&(this.browser.Name="Chrome",this.browser.Vendor="Google",this.browser.Version.versionString=RegExp.$1),this.browser.Opera=/Opera\/[\d\.]+/.test(t),this.browser.Opera){this.browser.Name="Opera",this.browser.Vendor="Opera Software";/Version\/([\d\.]+)/.test(t);this.browser.Version.versionString=RegExp.$1}if(this.browser.Firefox=/Gecko\/[\d\.]+ Firefox\/([\d\.]+)/.test(t),this.browser.Firefox&&(this.browser.Name="Firefox",this.browser.Vendor="Mozilla Foundation",this.browser.Version.versionString=RegExp.$1),this.browser.Edge=/Edge\/(.*)/.test(t),this.browser.Edge){var e=/Edge\/(.*)/.exec(t);this.browser.Name="Edge",this.browser.Chrome=!1,this.browser.Vendor="Microsoft",this.browser.Version.versionString=e[1]}if(this.browser.Explorer=/MSIE ([\d\.]+)/.test(t),this.browser.Explorer)this.browser.Name="Internet Explorer",this.browser.Vendor="Microsoft",this.browser.Version.versionString=RegExp.$1;else{var n=/\Mozilla\/5.0 \(([^)]+)\) like Gecko/,i=n.exec(t);if(i){var r=(n=/rv:(.*)/).exec(i[1]);this.browser.Explorer=!0,this.browser.Name="Internet Explorer",this.browser.Vendor="Microsoft",this.browser.Version.versionString=r?r[1]:"unknown"}}this.system.iOS?(this.browser.IsMobileVersion=!0,this.browser.MobileSafari=/Version\/([\d\.]+) Mobile/.test(t),this.browser.MobileSafari&&(this.browser.Name="Mobile Safari",this.browser.Vendor="Apple",this.browser.Version.versionString=RegExp.$1),this.browser.Android=!1):this.system.Android?(this.browser.IsMobileVersion=!0,this.browser.Android=/Version\/([\d\.]+) Mobile/.test(t),this.browser.MobileSafari?(this.browser.Name="Android Browser",this.browser.Vendor="Google",this.browser.Version.versionString=RegExp.$1):(this.browser.Chrome=/Chrome\/([\d\.]+)/.test(t),this.browser.Name="Chrome",this.browser.Vendor="Google",this.browser.Version.versionString=RegExp.$1),this.browser.Safari=!1):this.browser.IsMobileVersion=!1,this.parseBrowserVersion(t)},parseBrowserVersion:function(t){/([\d]+)\.([\d]+)\.*([\d]*)/.test(this.browser.Version.versionString)&&(this.browser.Version.major=Number(RegExp.$1),this.browser.Version.minor=Number(RegExp.$2),this.browser.Version.revision=RegExp.$3?Number(RegExp.$3):0)},parseOSXVersion:function(t){var e=/Mac OS X (\d+_\d+_*\d*)/.test(t)?RegExp.$1:"";switch(this.system.Version={},""!=e?/(\d+)_(\d+)_*(\d*)/.test(e)&&(this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=RegExp.$3?Number(RegExp.$3):0):(e=/Mac OS X (\d+\.\d+\.*\d*)/.test(t)?RegExp.$1:"Unknown",/(\d+)\.(\d+)\.*(\d*)/.test(e)&&(this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=RegExp.$3?Number(RegExp.$3):0)),this.system.Version.major||(this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.revision=0),this.system.Version.stringValue=this.system.Version.major+"."+this.system.Version.minor+"."+this.system.Version.revision,this.system.Version.minor){case 0:this.system.Version.name="Cheetah";break;case 1:this.system.Version.name="Puma";break;case 2:this.system.Version.name="Jaguar";break;case 3:this.system.Version.name="Panther";break;case 4:this.system.Version.name="Tiger";break;case 5:this.system.Version.name="Leopard";break;case 6:this.system.Version.name="Snow Leopard";break;case 7:this.system.Version.name="Lion";break;case 8:this.system.Version.name="Mountain Lion"}},parseWindowsVersion:function(t){if(this.system.Version={},/NT (\d+)\.(\d*)/.test(t)){this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=0,this.system.Version.stringValue="NT "+this.system.Version.major+"."+this.system.Version.minor;var e=this.system.Version.major,n=this.system.Version.minor;5==e?this.system.Version.name=0==n?"2000":"XP":6==e&&(0==n?this.system.Version.name="Vista":1==n?this.system.Version.name="7":2==n&&(this.system.Version.name="8"))}else this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.name="Unknown",this.system.Version.stringValue="Unknown"},parseLinuxVersion:function(t){this.system.Version={},this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.revision=0,this.system.Version.name="",this.system.Version.stringValue="Unknown distribution"},parseIOSVersion:function(t){this.system.Version={},/iPhone OS (\d+)_(\d+)_*(\d*)/i.test(t)?(this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=RegExp.$3?Number(RegExp.$3):0,this.system.Version.stringValue=this.system.Version.major+"."+this.system.Version.minor+"."+this.system.Version.revision,this.system.Version.name="iOS"):(this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.name="Unknown",this.system.Version.stringValue="Unknown")},parseAndroidVersion:function(t){this.system.Version={},/Android (\d+)\.(\d+)\.*(\d*)/.test(t)?(this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=RegExp.$3?Number(RegExp.$3):0,this.system.Version.stringValue=this.system.Version.major+"."+this.system.Version.minor+"."+this.system.Version.revision):(this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.revision=0),/Build\/([a-zA-Z]+)/.test(t)?this.system.Version.name=RegExp.$1:this.system.Version.name="Unknown version",this.system.Version.stringValue=this.system.Version.major+"."+this.system.Version.minor+"."+this.system.Version.revision},getInfoString:function(){return navigator.userAgent}},{})}();bg.utils.UserAgent=e,bg.utils.userAgent=new e;var n=function(){return $traceurRuntime.createClass(function(){},{get sep(){return"/"},join:function(t,e){return t.lastIndexOf(this.sep)!=t.length-1?t+this.sep+e:t+e},extension:function(t){return t.split(".").pop()},fileName:function(t){return t.split(this.sep).pop()},removeFileName:function(t){var e=t.split(this.sep);return e.pop(),e.join(this.sep)}},{})}();bg.utils.Path=n,bg.utils.path=new n}(),function(){var t=[],e=[],n=function(){return $traceurRuntime.createClass(function(){this._disableCache=!1},{get disableCache(){return this._disableCache},set disableCache(t){this._disableCache=t},getRequest:function(t,e,n,i){},loadImage:function(t,e,n){},loadVideo:function(t,e,n){}},{})}(),i={mp4:function(t,n,i){var r=document.createElement("video");e.push(r),r.crossOrigin="",r.autoplay=!0,r.setAttribute("playsinline",null),r.addEventListener("canplay",function(t){var i=e.indexOf(t.target);-1!=i&&e.splice(i,1),n(event.target)}),r.addEventListener("error",function(e){i(new Error("Error loading video: "+t))}),r.addEventListener("abort",function(e){i(new Error("Error loading video: "+t))}),r.src=t}};i.m4v=i.mp4;var r=function(e){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this)},{getRequest:function(t,e,n,i){var r=new XMLHttpRequest;return i||(i=function(t){console.log("Loading "+t.file+": "+t.loaded/t.total*100+" %")}),r.open("GET",t,!0),r.addEventListener("load",function(){200===r.status?e(r):n(new Error("Error receiving data: "+r.status+", url: "+t))},!1),r.addEventListener("error",function(){n(new Error("Cannot make AJAX request. Url: "+t))},!1),r.addEventListener("progress",function(e){i({file:t,loaded:e.loaded,total:e.total})},!1),r},loadImage:function(e,n,i){var r=new Image;t.push(r),r.crossOrigin="",r.addEventListener("load",function(e){var i=t.indexOf(e.target);-1!=i&&t.splice(i,1),n(e.target)}),r.addEventListener("error",function(t){i(new Error("Error loading image: "+e))}),r.addEventListener("abort",function(t){i(new Error("Image load aborted: "+e))}),this.disableCache&&(e+="?"+bg.utils.generateUUID()),r.src=e},loadVideo:function(t,e,n){var i=s.GetExtension(t),r=bg.utils.HTTPResourceProvider.GetVideoLoaderForType(i);r?r.apply(this,[t,e,n]):n(new Error("Could not find video loader for resource: "+t))}},{AddVideoLoader:function(t,e){i[t]=e},GetVideoLoaderForType:function(t){return i[t]},GetCompatibleVideoFormats:function(){return Object.keys(i)},IsVideoCompatible:function(t){var e=s.GetExtension(t);return-1!=bg.utils.HTTPResourceProvider.GetCompatibleVideoFormats().indexOf(e)}},e)}(n);bg.utils.ResourceProvider=n,bg.utils.HTTPResourceProvider=r;var a=new r,s=function(){function t(){}return $traceurRuntime.createClass(t,{},{SetResourceProvider:function(t){a=t},GetResourceProvider:function(){return a},GetExtension:function(t){var e=/\.([a-z0-9-_]*)(\?.*)?(\#.*)?$/i.exec(t);return e&&e[1].toLowerCase()||""},JoinUrl:function(t,e){return 0==t.length?e:0==e.length?t:/\/$/.test(t)?t+e:t+"/"+e},IsFormat:function(e,n){return null!=n.find(function(t){return t==this},t.GetExtension(e))},IsImage:function(e){return t.IsFormat(e,["jpg","jpeg","gif","png"])},IsBinary:function(e){var n=void 0!==arguments[1]?arguments[1]:["vwglb","bg2"];return t.IsFormat(e,n)},IsVideo:function(e){var n=void 0!==arguments[1]?arguments[1]:["mp4","m4v","ogg","ogv","m3u8","webm"];return t.IsFormat(e,n)},LoadMultiple:function(e,n){var i={},r=function(t){i[t.file]=t;var r=0,a=0;for(var s in i){var o=i[s];r+=o.total,a+=o.loaded}n?n({fileList:e,total:r,loaded:a}):console.log("Loading "+Object.keys(i).length+" files: "+a/r*100+"% completed")},a=[];e.forEach(function(e){a.push(t.Load(e,r))});var s=a.map(function(t){return new Promise(function(e){var n=new Array(2);t.then(function(t){n[0]=t}).catch(function(t){n[1]=t}).then(function(){e(n)})})});return Promise.all(s).then(function(t){var n={};return e.forEach(function(e,i){var r=t[i];n[e]=r[1]?null:r[0]}),n})},Load:function(e,n){var i=null;switch(!0){case e.constructor===Array:i=t.LoadMultiple;break;case t.IsImage(e):i=t.LoadImage;break;case t.IsBinary(e):i=t.LoadBinary;break;case t.IsVideo(e):i=t.LoadVideo;break;case"json"==t.GetExtension(e):i=t.LoadJson;break;default:i=t.LoadText}return i(e,n)},LoadText:function(t,e){return new Promise(function(n,i){a.getRequest(t,function(t){n(t.responseText)},function(t){i(t)},e).send()})},LoadVideo:function(t,e){return new Promise(function(e,n){a.loadVideo(t,function(t){e(t),bg.emitImageLoadEvent(t)},function(t){n(t)})})},LoadBinary:function(t,e){return new Promise(function(n,i){var r=a.getRequest(t,function(t){n(t.response)},function(t){i(t)},e);r.responseType="arraybuffer",r.send()})},LoadImage:function(t){return new Promise(function(e,n){a.loadImage(t,function(t){e(t),bg.emitImageLoadEvent(t)},function(t){n(t)})})},LoadJson:function(t){return new Promise(function(e,n){a.getRequest(t,function(t){try{e(JSON.parse(t.responseText))}catch(t){n(new Error("Error parsing JSON data"))}},function(t){n(t)}).send()})}})}();bg.utils.Resource=s,bg.utils.requireGlobal=function(t){var e=document.createElement("script");e.src=t,e.type="text/javascript",e.async=!1,document.getElementsByTagName("head")[0].appendChild(e)}}(),bg.base64=bg.base64||{},bg.base64.toUint6=function(t){return t>64&&t<91?t-65:t>96&&t<123?t-71:t>47&&t<58?t+4:43===t?62:47===t?63:0},bg.base64.toArray=function(t,e){for(var n=t.replace(/[^A-Za-z0-9\+\/]/g,""),i=n.length,r=e?Math.ceil((3*i+1>>2)/e)*e:3*i+1>>2,a=new Uint8Array(r),s=void 0,o=void 0,u=0,h=0,l=0;l<i;l++)if(o=3&l,u|=b64ToUint6(n.charCodeAt(l))<<18-6*o,3===o||i-l==1){for(s=0;s<3&&h<r;s++,h++)a[h]=u>>>(16>>>s&24)&255;u=0}return a},bg.base64.withUint6ToB64=function(t){return t<26?t+65:t<52?t+71:t<62?t-4:62===t?43:63===t?47:65},bg.base64.encodeArray=function(t){for(var e=2,n="",i=t.length,r=0,a=0;a<i;a++)e=a%3,a>0&&4*a/3%76==0&&(n+="\r\n"),r|=t[a]<<(16>>>e&24),2!==e&&t.length-a!=1||(n+=String.fromCharCode(uint6ToB64(r>>>18&63),uint6ToB64(r>>>12&63),uint6ToB64(r>>>6&63),uint6ToB64(63&r)),r=0);return n.substr(0,n.length-2+e)+(2===e?"":1===e?"=":"==")},function(){var t=null,e=function(){return $traceurRuntime.createClass(function(){},{get id(){return this._engineId},get texture(){return this._texture},get pipeline(){return this._pipeline},get polyList(){return this._polyList},get shader(){return this._shader},get colorBuffer(){return this._colorBuffer},get textureBuffer(){return this._textureBuffer},get shaderSource(){return this._shaderSource},get cubemapCapture(){return this._cubemapCapture},get textureMerger(){return this._textureMerger}},{Set:function(e){t=e},Get:function(){return t}})}();bg.Engine=e}(),function(){var t=function(){return $traceurRuntime.createClass(function(){},{init:function(){},frame:function(t){},displayGizmo:function(t,e){},willDisplay:function(t,e){},display:function(t,e){void 0!==arguments[2]&&arguments[2]},didDisplay:function(t,e){},willUpdate:function(t,e,n){},draw:function(t,e,n,i){},didUpdate:function(t,e,n){},reshape:function(t,e,n,i){},keyDown:function(t){},keyUp:function(t){},mouseUp:function(t){},mouseDown:function(t){},mouseMove:function(t){},mouseOut:function(t){},mouseDrag:function(t){},mouseWheel:function(t){},touchStart:function(t){},touchMove:function(t){},touchEnd:function(t){},postRedisplay:function(){var t=void 0!==arguments[0]?arguments[0]:4;bg.app.MainLoop.singleton.postRedisplay(t)},postReshape:function(){bg.app.MainLoop.singleton.postReshape()}},{})}();bg.LifeCycle=t}(),function(t){function e(t){var e,i;if(g=!1,m=d=(t+="").length,d>63){for(n(t.substring(0,64)),r(h),g=!0,e=128;d>=e;e+=64)n(t.substring(e-64,e)),a(h);t=t.substring(e-64),d=t.length}for(u[0]=u[1]=u[2]=u[3]=u[4]=u[5]=u[6]=u[7]=u[8]=u[9]=u[10]=u[11]=u[12]=u[13]=u[14]=u[15]=0,e=0;d>e;e++)0==(i=3&e)?u[e>>2]=t.charCodeAt(e):u[e>>2]|=t.charCodeAt(e)<<f[i];return u[e>>2]|=l[3&e],e>55?(g?a(u):(r(u),g=!0),a([0,0,0,0,0,0,0,0,0,0,0,0,0,0,m<<3,0])):(u[14]=m<<3,void(g?a(u):r(u)))}function n(t){for(var e=16;e--;){var n=e<<2;h[e]=t.charCodeAt(n)+(t.charCodeAt(n+1)<<8)+(t.charCodeAt(n+2)<<16)+(t.charCodeAt(n+3)<<24)}}function i(t,e,n,i,r,a,s){return((e+=t+i+s)<<r|e>>>a)+n<<0}function r(t){s(0,0,0,0,t),v[0]=p[0]+1732584193<<0,v[1]=p[1]-271733879<<0,v[2]=p[2]-1732584194<<0,v[3]=p[3]+271733878<<0}function a(t){s(v[0],v[1],v[2],v[3],t),v[0]=p[0]+v[0]<<0,v[1]=p[1]+v[1]<<0,v[2]=p[2]+v[2]<<0,v[3]=p[3]+v[3]<<0}function s(t,e,n,r,a){var s,o;g?(t=i((n^r)&e^r,t,e,a[0],7,25,-680876936),r=i((e^n)&t^n,r,t,a[1],12,20,-389564586),n=i((t^e)&r^e,n,r,a[2],17,15,606105819),e=i((r^t)&n^t,e,n,a[3],22,10,-1044525330)):(t=((t=a[0]-680876937)<<7|t>>>25)-271733879<<0,r=((r=a[1]-117830708+(2004318071&t^-1732584194))<<12|r>>>20)+t<<0,n=((n=a[2]-1126478375+((-271733879^t)&r^-271733879))<<17|n>>>15)+r<<0,e=((e=a[3]-1316259209+((r^t)&n^t))<<22|e>>>10)+n<<0),t=i((n^r)&e^r,t,e,a[4],7,25,-176418897),r=i((e^n)&t^n,r,t,a[5],12,20,1200080426),n=i((t^e)&r^e,n,r,a[6],17,15,-1473231341),e=i((r^t)&n^t,e,n,a[7],22,10,-45705983),t=i((n^r)&e^r,t,e,a[8],7,25,1770035416),r=i((e^n)&t^n,r,t,a[9],12,20,-1958414417),n=i((t^e)&r^e,n,r,a[10],17,15,-42063),e=i((r^t)&n^t,e,n,a[11],22,10,-1990404162),t=i((n^r)&e^r,t,e,a[12],7,25,1804603682),r=i((e^n)&t^n,r,t,a[13],12,20,-40341101),n=i((t^e)&r^e,n,r,a[14],17,15,-1502002290),e=i((r^t)&n^t,e,n,a[15],22,10,1236535329),t=i((e^n)&r^n,t,e,a[1],5,27,-165796510),r=i((t^e)&n^e,r,t,a[6],9,23,-1069501632),n=i((r^t)&e^t,n,r,a[11],14,18,643717713),e=i((n^r)&t^r,e,n,a[0],20,12,-373897302),t=i((e^n)&r^n,t,e,a[5],5,27,-701558691),r=i((t^e)&n^e,r,t,a[10],9,23,38016083),n=i((r^t)&e^t,n,r,a[15],14,18,-660478335),e=i((n^r)&t^r,e,n,a[4],20,12,-405537848),t=i((e^n)&r^n,t,e,a[9],5,27,568446438),r=i((t^e)&n^e,r,t,a[14],9,23,-1019803690),n=i((r^t)&e^t,n,r,a[3],14,18,-187363961),e=i((n^r)&t^r,e,n,a[8],20,12,1163531501),t=i((e^n)&r^n,t,e,a[13],5,27,-1444681467),r=i((t^e)&n^e,r,t,a[2],9,23,-51403784),n=i((r^t)&e^t,n,r,a[7],14,18,1735328473),e=i((n^r)&t^r,e,n,a[12],20,12,-1926607734),t=i((s=e^n)^r,t,e,a[5],4,28,-378558),r=i(s^t,r,t,a[8],11,21,-2022574463),n=i((o=r^t)^e,n,r,a[11],16,16,1839030562),e=i(o^n,e,n,a[14],23,9,-35309556),t=i((s=e^n)^r,t,e,a[1],4,28,-1530992060),r=i(s^t,r,t,a[4],11,21,1272893353),n=i((o=r^t)^e,n,r,a[7],16,16,-155497632),e=i(o^n,e,n,a[10],23,9,-1094730640),t=i((s=e^n)^r,t,e,a[13],4,28,681279174),r=i(s^t,r,t,a[0],11,21,-358537222),n=i((o=r^t)^e,n,r,a[3],16,16,-722521979),e=i(o^n,e,n,a[6],23,9,76029189),t=i((s=e^n)^r,t,e,a[9],4,28,-640364487),r=i(s^t,r,t,a[12],11,21,-421815835),n=i((o=r^t)^e,n,r,a[15],16,16,530742520),e=i(o^n,e,n,a[2],23,9,-995338651),t=i(n^(e|~r),t,e,a[0],6,26,-198630844),r=i(e^(t|~n),r,t,a[7],10,22,1126891415),n=i(t^(r|~e),n,r,a[14],15,17,-1416354905),e=i(r^(n|~t),e,n,a[5],21,11,-57434055),t=i(n^(e|~r),t,e,a[12],6,26,1700485571),r=i(e^(t|~n),r,t,a[3],10,22,-1894986606),n=i(t^(r|~e),n,r,a[10],15,17,-1051523),e=i(r^(n|~t),e,n,a[1],21,11,-2054922799),t=i(n^(e|~r),t,e,a[8],6,26,1873313359),r=i(e^(t|~n),r,t,a[15],10,22,-30611744),n=i(t^(r|~e),n,r,a[6],15,17,-1560198380),e=i(r^(n|~t),e,n,a[13],21,11,1309151649),t=i(n^(e|~r),t,e,a[4],6,26,-145523070),r=i(e^(t|~n),r,t,a[11],10,22,-1120210379),n=i(t^(r|~e),n,r,a[2],15,17,718787259),e=i(r^(n|~t),e,n,a[9],21,11,-343485551),p[0]=t,p[1]=e,p[2]=n,p[3]=r}var o=[],u=[],h=[],l=[],c="0123456789abcdef".split(""),f=[],v=[],g=!1,m=0,d=0,p=[];if(t.Int32Array)u=new Int32Array(16),h=new Int32Array(16),l=new Int32Array(4),f=new Int32Array(4),v=new Int32Array(4),p=new Int32Array(4);else{var b;for(b=0;16>b;b++)u[b]=h[b]=0;for(b=0;4>b;b++)l[b]=f[b]=v[b]=p[b]=0}l[0]=128,l[1]=32768,l[2]=8388608,l[3]=-2147483648,f[0]=0,f[1]=8,f[2]=16,f[3]=24,t.md5=t.md5||function(t,n,i){e(n?t:function(t){for(var e="",n="",i=0,r=0,a=0,s=t.length;s>a;a++){var o=t.charCodeAt(a);128>o?r++:(n=2048>o?String.fromCharCode(o>>6|192,63&o|128):String.fromCharCode(o>>12|224,o>>6&63|128,63&o|128),r>i&&(e+=t.slice(i,r)),e+=n,i=r=a+1)}return r>i&&(e+=t.slice(i,s)),e}(t));var r=v[0];return o[1]=c[15&r],o[0]=c[15&(r>>=4)],o[3]=c[15&(r>>=4)],o[2]=c[15&(r>>=4)],o[5]=c[15&(r>>=4)],o[4]=c[15&(r>>=4)],o[7]=c[15&(r>>=4)],o[6]=c[15&(r>>=4)],r=v[1],o[9]=c[15&r],o[8]=c[15&(r>>=4)],o[11]=c[15&(r>>=4)],o[10]=c[15&(r>>=4)],o[13]=c[15&(r>>=4)],o[12]=c[15&(r>>=4)],o[15]=c[15&(r>>=4)],o[14]=c[15&(r>>=4)],r=v[2],o[17]=c[15&r],o[16]=c[15&(r>>=4)],o[19]=c[15&(r>>=4)],o[18]=c[15&(r>>=4)],o[21]=c[15&(r>>=4)],o[20]=c[15&(r>>=4)],o[23]=c[15&(r>>=4)],o[22]=c[15&(r>>=4)],r=v[3],o[25]=c[15&r],o[24]=c[15&(r>>=4)],o[27]=c[15&(r>>=4)],o[26]=c[15&(r>>=4)],o[29]=c[15&(r>>=4)],o[28]=c[15&(r>>=4)],o[31]=c[15&(r>>=4)],o[30]=c[15&(r>>=4)],i?o:o.join("")}}("undefined"==typeof global?window:global),bg.utils.md5=md5,function(){bg.utils.generateUUID=function(){var t=(new Date).getTime();return"undefined"!=typeof performance&&"function"==typeof performance.now&&(t+=performance.now()),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:3&n|8).toString(16)})}}(),bg.app={},function(){var t=function(){return $traceurRuntime.createClass(function(t){var e=this;if(this._domElem=t,this._domElem.style.MozUserSelect="none",this._domElem.style.WebkitUserSelect="none",this._domElem.setAttribute("onselectstart","return false"),this._multisample=1,e._context=bg.utils.initWebGLContext(t),!e._context.supported)throw new Error("Sorry, your browser does not support WebGL.")},{get multisample(){return this._multisample},set multisample(t){this._multisample=t},get context(){return this._context},get domElement(){return this._domElem},get width(){return this._domElem.clientWidth},get height(){return this._domElem.clientHeight},screenshot:function(t,e,n){var i="",r={};e&&(n=n||e,i=this.domElement.style.cssText,r.width=this.domElement.width,r.height=this.domElement.height,this.domElement.style.cssText="top:auto;left:auto;bottom:auto;right:auto;width:"+e+"px;height:"+n+"px;",this.domElement.width=e,this.domElement.height=n,bg.app.MainLoop.singleton.windowController.reshape(e,n),bg.app.MainLoop.singleton.windowController.postRedisplay(),bg.app.MainLoop.singleton.windowController.display());var a=this.domElement.toDataURL(t);return e&&(this.domElement.style.cssText=i,this.domElement.width=r.width,this.domElement.height=r.height,bg.app.MainLoop.singleton.windowController.reshape(r.width,r.height),bg.app.MainLoop.singleton.windowController.postRedisplay(),bg.app.MainLoop.singleton.windowController.display()),a}},{})}();bg.app.Canvas=t;var e=function(){return $traceurRuntime.createClass(function(t){this._context=t},{get context(){return this._context},set context(t){this._context=t}},{})}();bg.app.ContextObject=e}(),function(){bg.app.SpecialKey={BACKSPACE:"Backspace",TAB:"Tab",ENTER:"Enter",SHIFT:"Shift",SHIFT_LEFT:"ShiftLeft",SHIFT_RIGHT:"ShiftRight",CTRL:"Control",CTRL_LEFT:"ControlLeft",CTRL_LEFT:"ControlRight",ALT:"Alt",ALT_LEFT:"AltLeft",ALT_RIGHT:"AltRight",PAUSE:"Pause",CAPS_LOCK:"CapsLock",ESCAPE:"Escape",PAGE_UP:"PageUp",PAGEDOWN:"PageDown",END:"End",HOME:"Home",LEFT_ARROW:"ArrowLeft",UP_ARROW:"ArrowUp",RIGHT_ARROW:"ArrowRight",DOWN_ARROW:"ArrowDown",INSERT:"Insert",DELETE:"Delete"};var t=function(){return $traceurRuntime.createClass(function(){this._executeDefault=!1},{get executeDefault(){return this._executeDefault},set executeDefault(t){this._executeDefault=t}},{})}();bg.app.EventBase=t;var e=function(t){function e(t,n){$traceurRuntime.superConstructor(e).call(this),this.key=t,this.event=n}return $traceurRuntime.createClass(e,{isSpecialKey:function(){return e.IsSpecialKey(this.event)}},{IsSpecialKey:function(t){return null!=bg.app.SpecialKey[t.code]}},t)}(t);bg.app.KeyboardEvent=e,bg.app.MouseButton={LEFT:0,MIDDLE:1,RIGHT:2,NONE:-1};var n=function(t){return $traceurRuntime.createClass(function t(){var e=void 0!==arguments[0]?arguments[0]:bg.app.MouseButton.NONE,n=void 0!==arguments[1]?arguments[1]:-1,i=void 0!==arguments[2]?arguments[2]:-1,r=void 0!==arguments[3]?arguments[3]:0,a=void 0!==arguments[4]?arguments[4]:null;$traceurRuntime.superConstructor(t).call(this),this.button=e,this.x=n,this.y=i,this.delta=r,this.event=a},{},{},t)}(t);bg.app.MouseEvent=n;var i=function(t){return $traceurRuntime.createClass(function t(e,n){$traceurRuntime.superConstructor(t).call(this),this.touches=e,this.event=n},{},{},t)}(t);bg.app.TouchEvent=i}(),function(){var t=null,e={leftButton:!1,middleButton:!1,rightButton:!1,pos:{x:-1,y:-1}};Object.defineProperty(e,"anyButton",{get:function(){return this.leftButton||this.middleButton||this.rightButton}});var n=function(){return $traceurRuntime.createClass(function(){},{},{LeftButton:function(){return e.leftButton},MiddleButton:function(){return e.middleButton},RightButton:function(){return e.rightButton},Position:function(){return e.pos}})}();bg.app.Mouse=n,bg.app.FrameUpdate={AUTO:0,MANUAL:1};var i=function(){return $traceurRuntime.createClass(function(){var t=this;this._canvas=null,this._windowController=null,this._updateMode=bg.app.FrameUpdate.AUTO,this._redisplayFrames=1,bg.bindImageLoadEvent(function(){t.postRedisplay()})},{get canvas(){return this._canvas},set canvas(t){this._canvas=new bg.app.Canvas(t)},get windowController(){return this._windowController},get updateMode(){return this._updateMode},set updateMode(t){this._updateMode=t,this._updateMode==bg.app.FrameUpdate.AUTO&&(this._redisplayFrames=1)},get redisplay(){return this._redisplayFrames>0},get mouseButtonStatus(){return e},run:function(n){var i=void 0!==arguments[1]?arguments[1]:[];this._windowController=n,s=i,this.postRedisplay(),this.windowController.init(),function(){if(o(),window.addEventListener("resize",function(t){o()}),!t.canvas)throw new Error("Configuration error in MainLoop: no canvas defined");var n=t.canvas.domElement;if(-1==s.indexOf("mousedown")&&n.addEventListener("mousedown",function(n){if(!function(n){var i=t.canvas.domElement.getBoundingClientRect(),r=t.canvas.multisample;switch(e.pos.x=(n.clientX-i.left)*r,e.pos.y=(n.clientY-i.top)*r,n.button){case bg.app.MouseButton.LEFT:e.leftButton=!0;break;case bg.app.MouseButton.MIDDLE:e.middleButton=!0;break;case bg.app.MouseButton.RIGHT:e.rightButton=!0}var a=new bg.app.MouseEvent(n.button,e.pos.x,e.pos.y,0,n);return t.windowController.mouseDown(a),a}(n).executeDefault)return n.preventDefault(),!1}),-1==s.indexOf("mousemove")&&n.addEventListener("mousemove",function(t){if(!u(t).executeDefault)return t.preventDefault(),!1}),-1==s.indexOf("mouseout")&&n.addEventListener("mouseout",function(n){if(!function(){var n=new bg.app.MouseEvent(bg.app.MouseButton.NONE,e.pos.x,e.pos.y,0,{});t.windowController.mouseOut(n),e.leftButton&&(e.leftButton=!1,n=new bg.app.MouseEvent(bg.app.MouseButton.LEFT,e.pos.x,e.pos.y,0,{}),t.windowController.mouseUp(n));e.middleButton&&(e.middleButton=!1,n=new bg.app.MouseEvent(bg.app.MouseButton.MIDDLE,e.pos.x,e.pos.y,0,{}),t.windowController.mouseUp(n));e.rightButton&&(n=new bg.app.MouseEvent(bg.app.MouseButton.RIGHT,e.pos.x,e.pos.y,0,{}),t.windowController.mouseUp(n),e.rightButton=!1);return n}().executeDefault)return n.preventDefault(),!1}),-1==s.indexOf("mouseover")&&n.addEventListener("mouseover",function(t){if(!(e=t,u(e)).executeDefault)return t.preventDefault(),!1;var e}),-1==s.indexOf("mouseup")&&n.addEventListener("mouseup",function(n){if(!function(n){switch(n.button){case bg.app.MouseButton.LEFT:e.leftButton=!1;break;case bg.app.MouseButton.MIDDLE:e.middleButton=!1;break;case bg.app.MouseButton.RIGHT:e.rightButton=!1}var i=t.canvas.domElement.getBoundingClientRect(),r=t.canvas.multisample;e.pos.x=(n.clientX-i.left)*r,e.pos.y=(n.clientY-i.top)*r;var a=new bg.app.MouseEvent(n.button,e.pos.x,e.pos.y,0,n);return t.windowController.mouseUp(a),a}(n).executeDefault)return n.preventDefault(),!1}),-1==s.indexOf("touchstart")&&n.addEventListener("touchstart",function(e){if(!(n=e,i=h(n),t.windowController.touchStart(i),i).executeDefault)return e.preventDefault(),!1;var n,i}),-1==s.indexOf("touchmove")&&n.addEventListener("touchmove",function(e){if(!(n=e,i=h(n),t.windowController.touchMove(i),i).executeDefault)return e.preventDefault(),!1;var n,i}),-1==s.indexOf("touchend")&&n.addEventListener("touchend",function(e){if(!(n=e,i=h(n),t.windowController.touchEnd(i),i).executeDefault)return e.preventDefault(),!1;var n,i}),-1==s.indexOf("mousewheel")){var i=/Firefox/i.test(navigator.userAgent)?"DOMMouseScroll":"mousewheel";n.addEventListener(i,function(n){if(!function(n){var i=t.canvas.domElement.getBoundingClientRect(),r=t.canvas.multisample;e.pos.x=(n.clientX-i.left)*r,e.pos.y=(n.clientY-i.top)*r;var a=n.wheelDelta?-1*n.wheelDelta:10*n.detail,s=new bg.app.MouseEvent(bg.app.MouseButton.NONE,e.pos.x,e.pos.y,a,n);return t.windowController.mouseWheel(s),s}(n).executeDefault)return n.preventDefault(),!1})}-1==s.indexOf("keydown")&&window.addEventListener("keydown",function(e){var n,i;n=e,i=bg.app.KeyboardEvent.IsSpecialKey(n)?n.keyCode:n.code,t.windowController.keyDown(new bg.app.KeyboardEvent(i,n))}),-1==s.indexOf("keyup")&&window.addEventListener("keyup",function(e){var n,i;n=e,i=bg.app.KeyboardEvent.IsSpecialKey(n)?n.keyCode:n.code,t.windowController.keyUp(new bg.app.KeyboardEvent(i,n))}),n.oncontextmenu=function(t){return!1}}(),a()},postRedisplay:function(){var t=void 0!==arguments[0]?arguments[0]:4;this._redisplayFrames=t},postReshape:function(){o()}},{})}(),r=0;function a(e){e=e||0,requestAnimFrame(a);var n,i=e-r;r=e,n=i,t.redisplay&&(t.windowController.frame(n),t.updateMode==bg.app.FrameUpdate.AUTO?t._redisplayFrames=1:t._redisplayFrames--,t.windowController.display())}var s=[];function o(){if(t.canvas&&t.windowController){var e=t.canvas.multisample;t.canvas.domElement.width=t.canvas.width*e,t.canvas.domElement.height=t.canvas.height*e,t.windowController.reshape(t.canvas.width*e,t.canvas.height*e)}}function u(n){var i=t.canvas.domElement.getBoundingClientRect(),r=t.canvas.multisample;e.pos.x=(n.clientX-i.left)*r,e.pos.y=(n.clientY-i.top)*r;var a=new bg.app.MouseEvent(bg.app.MouseButton.NONE,e.pos.x,e.pos.y,0,n);return t.windowController.mouseMove(a),e.anyButton&&t.windowController.mouseDrag(a),a}function h(e){for(var n=t.canvas.domElement.getBoundingClientRect(),i=[],r=0;r<e.touches.length;++r){var a=e.touches[r];i.push({identifier:a.identifier,x:a.clientX-n.left,y:a.clientY-n.top,force:a.force,rotationAngle:a.rotationAngle,radiusX:a.radiusX,radiusY:a.radiusY})}return new bg.app.TouchEvent(i,e)}bg.app.MainLoop={},Object.defineProperty(bg.app.MainLoop,"singleton",{get:function(){return t||(t=new i),t}})}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{postRedisplay:function(){var t=void 0!==arguments[0]?arguments[0]:4;bg.app.MainLoop.singleton.postRedisplay(t)},postReshape:function(){bg.app.MainLoop.singleton.postReshape()},get canvas(){return bg.app.MainLoop.singleton.canvas},get context(){return bg.app.MainLoop.singleton.canvas.context},get gl(){return bg.app.MainLoop.singleton.canvas.context.gl}},{},t)}(bg.LifeCycle);bg.app.WindowController=t}(),bg.base={},bg.s_log=[],bg.log=function(t){console.log&&console.log(t),bg.s_log.push(t)},bg.flushLog=function(){console.log&&bg.s_log.forEach(function(t){console.log(t)}),bg.s_log=[]},bg.emitImageLoadEvent=function(t){var e=new CustomEvent("bg2e:image-load",{image:t});document.dispatchEvent(e)},bg.bindImageLoadEvent=function(t){document.addEventListener("bg2e:image-load",t)},bg.Axis={NONE:0,X:1,Y:2,Z:3},Object.defineProperty(bg,"isElectronApp",{get:function(){try{return process&&process.versions&&"undefined"!==process.versions.electron}catch(t){return!1}}}),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._shader=null,this._inputVars=[],this._shaders=[]},{get inputVars(){return this._inputVars},get numberOfShaders(){return this._shaders.length},setCurrentShader:function(t){this._shader=this._shaders[t]},get shader(){return this._shader},setupShaderSource:function(t){var e=void 0===arguments[1]||arguments[1],n=this,i=e?this._shaders.length:0,r=new bg.base.Shader(this.context);this._inputVars=[];var a=[],s=[];return t.forEach(function(t){t.params.forEach(function(t){t&&("buffer"==t.role?(n._inputVars[t.target]=t.name,a.push(t.name)):"value"==t.role&&s.push(t.name))}),r.addShaderSource(t.type,t.toString())}),r.link(),r.status?r.initVars(a,s):(bg.log(r.compileError),r.compileErrorSource&&(bg.log("Shader source:"),bg.log(r.compileErrorSource)),bg.log(r.linkError)),e?(this._shaders.push(r),this._shader||(this._shader=r)):(this._shaders=[r],this._shader=r),i},beginDraw:function(){},setupVars:function(){},setActive:function(){this.shader.setActive(),this.beginDraw()},clearActive:function(){this.shader.clearActive()},bindPolyList:function(t){var e=this.shader;this.inputVars.vertex&&e.setInputBuffer(this.inputVars.vertex,t.vertexBuffer,3),this.inputVars.normal&&e.setInputBuffer(this.inputVars.normal,t.normalBuffer,3),this.inputVars.tex0&&e.setInputBuffer(this.inputVars.tex0,t.texCoord0Buffer,2),this.inputVars.tex1&&e.setInputBuffer(this.inputVars.tex1,t.texCoord1Buffer,2),this.inputVars.tex2&&e.setInputBuffer(this.inputVars.tex2,t.texCoord2Buffer,2),this.inputVars.color&&e.setInputBuffer(this.inputVars.color,t.colorBuffer,4),this.inputVars.tangent&&e.setInputBuffer(this.inputVars.tangent,t.tangentBuffer,3),this.setupVars()},unbind:function(){var t=this.shader;this.inputVars.vertex&&t.disableInputBuffer(this.inputVars.vertex),this.inputVars.normal&&t.disableInputBuffer(this.inputVars.normal),this.inputVars.tex0&&t.disableInputBuffer(this.inputVars.tex0),this.inputVars.tex1&&t.disableInputBuffer(this.inputVars.tex1),this.inputVars.tex2&&t.disableInputBuffer(this.inputVars.tex2),this.inputVars.color&&t.disableInputBuffer(this.inputVars.color),this.inputVars.tangent&&t.disableInputBuffer(this.inputVars.tangent)}},{},t)}(bg.app.ContextObject);function e(){return bg.base.ShaderLibrary.Get()}bg.base.Effect=t;var n=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._frame=new bg.base.PolyList(e),this._frame.vertex=[1,1,0,-1,1,0,-1,-1,0,1,-1,0],this._frame.texCoord0=[1,1,0,1,0,0,1,0],this._frame.index=[0,1,2,2,3,0],this._frame.build(),this.rebuildShaders()},{rebuildShaders:function(){this.setupShaderSource([this.vertexShaderSource,this.fragmentShaderSource])},get vertexShaderSource(){return this._vertexShaderSource||(this._vertexShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX),this._vertexShaderSource.addParameter([e().inputs.buffers.vertex,e().inputs.buffers.tex0,{name:"fsTexCoord",dataType:"vec2",role:"out"}]),"webgl1"==bg.Engine.Get().id&&this._vertexShaderSource.setMainBody("\n\t\t\t\t\tgl_Position = vec4(inVertex,1.0);\n\t\t\t\t\tfsTexCoord = inTex0;")),this._vertexShaderSource},get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter({name:"fsTexCoord",dataType:"vec2",role:"in"}),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\tgl_FragColor = vec4(0.0,0.0,0.0,1.0);")),this._fragmentShaderSource},drawSurface:function(t){this.setActive(),this._surface=t,this.bindPolyList(this._frame),this._frame.draw(),this.unbind(),this.clearActive()}},{},t)}(t);bg.base.TextureEffect=n}(),function(){var t=function(){return $traceurRuntime.createClass(function(){},{acceptType:function(t,e){return!1},load:function(t,e,n){return new Promise(function(t,e){e(new Error("Not implemented"))})}},{})}();bg.base.LoaderPlugin=t;var e=[];function n(t,e){var n=void 0!==arguments[2]?arguments[2]:null,i=void 0!==arguments[3]?arguments[3]:null;return new Promise(function(a,s){bg.utils.Resource.Load(e,n).then(function(n){return r.LoadData(t,e,n,i)}).then(function(t,e){a(t,e)}).catch(function(t){s(t)})})}function i(t,n,i){var r=void 0!==arguments[3]?arguments[3]:null;return new Promise(function(a,s){var o=null;if(e.some(function(t){if(t.acceptType(n,i))return o=t,!0}),!o)return s(new Error("No suitable plugin found for load "+n));r||(r={}),a(o.load(t,n,i,r))})}var r=function(){return $traceurRuntime.createClass(function(){},{},{StandarizePath:function(t){return t.replace(/\\/g,"/")},RegisterPlugin:function(t){e.push(t)},Load:function(t,e){var r=void 0!==arguments[2]?arguments[2]:null,a=void 0!==arguments[3]?arguments[3]:null;return Array.isArray(e)?function(t,e){var n=void 0!==arguments[2]?arguments[2]:null,r=void 0!==arguments[3]?arguments[3]:null;return new Promise(function(a,s){bg.utils.Resource.LoadMultiple(e,n).then(function(e){var n=[];for(var a in e){var s=e[a];n.push(i(t,a,s,r))}return Promise.all(n)}).then(function(t){var n={};e.forEach(function(e,i){n[e]=t[i]}),a(n)}).catch(function(t){s(t)})})}(t,e,r,a):n(t,e,r,a)},LoadData:function(t,e,n){return i(t,e,n,void 0!==arguments[3]?arguments[3]:null)}})}();bg.base.Loader=r}(),function(){if(!bg.isElectronApp)return!1;var t=function(){return $traceurRuntime.createClass(function(){},{acceptType:function(t,e){return!1},write:function(t,e){}},{})}();bg.base.WriterPlugin=t;var e=[],n=function(){function t(){}return $traceurRuntime.createClass(t,{},{RegisterPlugin:function(t){e.push(t)},Write:function(t,n){return new Promise(function(i,r){var a=null;e.some(function(e){if(e.acceptType(t,n))return a=e,!0}),a?i(a.write(t,n)):r(new Error("No suitable plugin found for write "+t))})},PrepareDirectory:function(e){var n=t.ToSystemPath(e),i=require("fs"),r=require("path"),a=r.sep,s=r.isAbsolute(n)?a:"";n.split(a).reduce(function(t,e){var n=r.resolve(t,e);return i.existsSync(n)||i.mkdirSync(n),n},s)},StandarizePath:function(t){return t.replace(/\\/g,"/")},ToSystemPath:function(t){var e=require("path").sep;return t.replace(/\\/g,e).replace(/\//g,e)},CopyFile:function(e,n){return new Promise(function(i,r){var a=require("fs"),s=require("path"),o=!1;if(e=t.StandarizePath(s.resolve(e)),n=t.StandarizePath(s.resolve(n)),e==n)i();else{var u=function(t){o||(t?r(t):i(),o=!0)},h=a.createReadStream(e);h.on("error",function(t){u(t)});var l=a.createWriteStream(n);l.on("error",function(t){u(t)}),l.on("close",function(t){u()}),h.pipe(l)}})}})}();bg.base.Writer=n}(),function(){if(!bg.isElectronApp)return!1;var t=require("fs");require("path");function e(t,e){if(t){var n=bg.base.Writer.StandarizePath(e.path).split("/");n.pop();var i={src:bg.base.Writer.StandarizePath(t.fileName),dst:null},r=i.src.split("/").pop();return n.push(r),n=n.join("/"),i.dst=n,i.src!=i.dst&&e.copyFiles.push(i),r}return""}function n(t){var n=[];return t.node.drawable.forEach(function(i,r){var a=function(t,n,i){var r=null;if(n instanceof bg.base.Material)r={name:t.name,class:"GenericMaterial",diffuseR:n.diffuse.r,diffuseG:n.diffuse.g,diffuseB:n.diffuse.b,diffuseA:n.diffuse.a,specularR:n.specular.r,specularG:n.specular.g,specularB:n.specular.b,specularA:n.specular.a,shininess:n.shininess,refractionAmount:n.refractionAmount,reflectionAmount:n.reflectionAmount,lightEmission:n.lightEmission,textureOffsetX:n.textureOffset.x,textureOffsetY:n.textureOffset.y,textureScaleX:n.textureScale.x,textureScaleY:n.textureScale.y,lightmapOffsetX:n.lightmapOffset.x,lightmapOffsetY:n.lightmapOffset.y,lightmapScaleX:n.lightmapScale.x,lightmapScaleY:n.lightmapScale.y,normalMapOffsetX:n.normalMapOffset.x,normalMapOffsetY:n.normalMapOffset.y,normalMapScaleX:n.normalMapScale.x,normalMapScaleY:n.normalMapScale.y,castShadows:n.castShadows,receiveShadows:n.receiveShadows,alphaCutoff:n.alphaCutoff,shininessMaskChannel:n.shininessMaskChannel,invertShininessMask:n.shininessMaskInvert,lightEmissionMaskChannel:n.lightEmissionMaskChannel,invertLightEmissionMask:n.lightEmissionMaskInvert,displacementFactor:0,displacementUV:0,tessDistanceFarthest:40,tessDistanceFar:30,tessDistanceNear:15,tessDistanceNearest:8,tessFarthestLevel:1,tessFarLevel:1,tessNearLevel:1,tessNearestLevel:1,reflectionMaskChannel:n.reflectionMaskChannel,invertReflectionMask:n.reflectionMaskInvert,roughness:n.roughness,roughnessMaskChannel:n.roughnessMaskChannel,invertRoughnessMask:n.roughnessMaskInvert,cullFace:n.cullFace,unlit:n.unlit,texture:e(n.texture,i),lightmap:e(n.lightmap,i),normalMap:e(n.normalMap,i),shininessMask:e(n.shininessMask,i),lightEmissionMask:e(n.lightEmissionMask,i),displacementMap:"",reflectionMask:e(n.reflectionMask,i),roughnessMask:e(n.roughnessMask,i),visible:t.visible,visibleToShadows:t.visibleToShadows,groupName:t.groupName};else if(n instanceof bg.base.PBRMaterial){var a=function(t){var a=n[t];a instanceof bg.base.Texture?(r[t]=bg.utils.path.fileName(a.fileName),a.fileName,e(a,i)):a instanceof bg.Vector4||a instanceof bg.Vector3||a instanceof bg.Vector2?r[t]=a.toArray():"number"==typeof a&&(r[t]=a)};r={name:t.name,class:"PBRMaterial",metallicChannel:n.metallicChannel,roughnessChannel:n.roughnessChannel,lightEmissionChannel:n.lightEmissionChannel,heightChannel:n.heightChannel,alphaCutoff:n.alphaCutoff,isTransparent:n.isTransparent,diffuseScale:n.diffuseScale.toArray(),metallicScale:n.metallicScale.toArray(),roughnessScale:n.roughnessScale.toArray(),fresnelScale:n.fresnelScale.toArray(),lightEmissionScale:n.lightEmissionScale.toArray(),heightScale:n.heightScale.toArray(),normalScale:n.normalScale.toArray(),diffuseUV:n.diffuseUV,metallicUV:n.metallicUV,roughnessUV:n.roughnessUV,fresnelUV:n.fresnelUV,ambientOcclussionUV:n.ambientOcclussionUV,lightEmissionUV:n.lightEmissionUV,heightUV:n.heightUV,normalUV:n.normalUV,castShadows:n.castShadows,cullFace:n.cullFace,unlit:n.unlit,visible:t.visible,visibleToShadows:t.visibleToShadows,groupName:t.groupName},a("diffuse"),a("metallic"),a("roughness"),a("fresnel"),a("lightEmission"),a("height"),a("normal"),a("ambientOcclussion")}return r}(i,r,t);n.push(a)}),JSON.stringify(n)}var i=function(){return $traceurRuntime.createClass(function(e,n){this._path=e,this._node=n,this._copyFiles=[],this._stream=t.createWriteStream(e)},{get path(){return this._path},get node(){return this._node},get copyFiles(){return this._copyFiles},get stream(){return this._stream},writeUInt:function(t){var e=Buffer.alloc(4);e.writeUInt32BE(t,0),this.stream.write(e)},writeBlock:function(t){this.stream.write(Buffer.from(t,"utf-8"))},writeString:function(t){this.writeUInt(t.length),this.stream.write(Buffer.from(t,"utf-8"))},writeBuffer:function(t,e){this.writeBlock(t),this.writeUInt(e.length);var n=Buffer.alloc(4*e.length);"indx"==t?e.forEach(function(t,e){return n.writeUInt32BE(t,4*e)}):e.forEach(function(t,e){return n.writeFloatBE(t,4*e)}),this.stream.write(n)},writeTextures:function(){var e=[];return this.copyFiles.forEach(function(n){e.push(new Promise(function(e,i){var r=t.createReadStream(n.src);r.on("error",s);var a=t.createWriteStream(n.dst);function s(t){r.destroy(),a.end(),i(t)}a.on("error",s),a.on("finish",e),r.pipe(a)}))}),Promise.all(e)}},{})}();function r(t){var e=Buffer.alloc(4);[0,1,2,0].forEach(function(t,n){return e.writeInt8(t,n)}),t.stream.write(e),t.writeBlock("hedr"),function(t){var e=[],n=0;t.node.drawable.forEach(function(t,i){var r=t.name;if(!r||-1!=e.indexOf(r)){do{r="polyList_"+n,++n}while(-1!=e.indexOf(r));t.name=r}e.push(r)})}(t);var i=t.node.drawable,r=0;i.forEach(function(){return r++}),t.writeUInt(r),t.writeBlock("mtrl"),t.writeString(n(t)),t.writeBlock("join"),t.writeString(function(t){var e={},n=t.node.component("bg.scene.InputChainJoint"),i=t.node.component("bg.scene.OutputChainJoint");return n&&(e.input={type:"LinkJoint",offset:[n.joint.offset.x,n.joint.offset.y,n.joint.offset.z],pitch:n.joint.pitch,roll:n.joint.roll,yaw:n.joint.yaw}),i&&(e.output=[{type:"LinkJoint",offset:[i.joint.offset.x,i.joint.offset.y,i.joint.offset.z],pitch:i.joint.pitch,roll:i.joint.roll,yaw:i.joint.yaw}]),JSON.stringify(e)}(t))}function a(t){return r(t),t.node.drawable.forEach(function(e,n,i){!function(t,e,n,i){t.writeBlock("plst"),t.writeBlock("pnam"),t.writeString(e.name),t.writeBlock("mnam"),t.writeString(e.name),t.writeBuffer("varr",e.vertex),t.writeBuffer("narr",e.normal),t.writeBuffer("t0ar",e.texCoord0),t.writeBuffer("t1ar",e.texCoord1),t.writeBuffer("indx",e.index)}(t,e)}),t.writeBlock("endf"),new Promise(function(e){(function(t){var e=bg.utils.path.removeFileName(t.path);t.writeBlock("cmps");var n=[],i=[];return t.node._componentsArray.forEach(function(t){if(!(t instanceof bg.scene.Drawable||t instanceof bg.manipulation.Gizmo||t instanceof bg.manipulation.Selectable)){var r={};t.serialize(r,i,e),n.push(r)}}),t.writeString(JSON.stringify(n)),Promise.all(i)})(t).then(function(){t.stream.end(),e()}).catch(function(t){reject(t)})})}var s=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){var n=t.split(".").pop();return/bg2/i.test(n)||/vwglb/i.test(n)},write:function(t,e){return new Promise(function(n,r){(!e||!e instanceof bg.scene.Node||!e.drawable)&&r(new Error("Invalid data format. Expecting scene node."));var s=new i(t,e);try{a(s).then(function(){s.writeTextures().then(function(){return n()}).catch(function(t){return r(t)})})}catch(t){r(t)}})}},{},t)}(bg.base.WriterPlugin);bg.base.Bg2WriterPlugin=s}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return"bg2mat"==bg.utils.Resource.GetExtension(t)},load:function(t,e,n){return new Promise(function(i,r){if(n)try{"string"==typeof n&&(n=JSON.parse(n));var a=[],s=e.substring(0,e.lastIndexOf("/")+1);n.forEach(function(e){a.push(bg.base.Material.FromMaterialDefinition(t,e,s))}),Promise.all(a).then(function(t){i(t)})}catch(t){r(t)}else r(new Error("Error loading material. Data is null."))})}},{},t)}(bg.base.LoaderPlugin);bg.base.Bg2matLoaderPlugin=t}(),bg.base._brdfLUTData="data:image/png;base64,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",function(){var t=function(){return $traceurRuntime.createClass(function(){},{createCaptureBuffers:function(t,e){console.log("CubemapCaptureImpl.createCaptureBuffers() not implemented")},beginRender:function(t,e){console.log("CubemapCaptureImpl.beginRender() not implemented")},beginRenderFace:function(t,e,n,i){return console.log("CubemapCaptureImpl.renderFace() not implemented"),bg.Matrix4.Identity()},endRenderFace:function(t,e,n){console.log("CubemapCaptureImpl.endRenderFace() not implemented")},endRender:function(t,e){console.log("CubemapCaptureImpl.endRender() not implemented")},getTexture:function(t,e){console.log("CubemapCaptureImpl.getTexture() not implemented")},destroy:function(t,e){console.log("CubemapCaptureImpl.destroy() not implemented")}},{})}();bg.base.CubemapCaptureImpl=t;var e=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._captureBuffers=null,this._texture=null},{create:function(t){this._captureBuffers=bg.Engine.Get().cubemapCapture.createCaptureBuffers(this.context,t)},destroy:function(){this._captureBuffers&&bg.Engine.Get().cubemapCapture.destroy(this.context,this._captureBuffers)},get texture(){return this._texture},updateTexture:function(t,e){var n=bg.Engine.Get().cubemapCapture;n.beginRender(this.context,this._captureBuffers);for(var i=0;i<6;++i){var r=n.beginRenderFace(this.context,i,this._captureBuffers,e);t(r.projection,r.view),n.endRenderFace(this.context,i,this._captureBuffers)}n.endRender(this.context,this._captureBuffers),this._texture||(this._texture=n.getTexture(this.context,this._captureBuffers))}},{},t)}(bg.app.ContextObject);bg.base.CubemapCapture=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n);var i=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX),r=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);i.addParameter([t().inputs.buffers.vertex,t().inputs.buffers.tex0,{name:"fsTexCoord",dataType:"vec2",role:"out"}]),r.addParameter([t().inputs.material.texture,{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&(i.setMainBody("\n\t\t\t\tgl_Position = vec4(inVertex,1.0);\n\t\t\t\tfsTexCoord = inTex0;"),r.setMainBody("gl_FragColor = texture2D(inTexture,fsTexCoord);")),this.setupShaderSource([i,r],!1)},{setupVars:function(){var t=null;this._surface instanceof bg.base.Texture?t=this._surface:this._surface instanceof bg.base.RenderSurface&&(t=this._surface.getTexture(0)),t&&this.shader.setTexture("inTexture",t,bg.base.TextureUnit.TEXTURE_0)}},{},e)}(bg.base.TextureEffect);bg.base.DrawTextureEffect=e}(),function(){function t(t){this[t]&&(this[t].destroy(),this[t]=null)}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._irradianceIntensity=1,this._cubemapRenderer=null,this._irradianceRenderer=null,this._specularRenderer=null,this._cubemapCapture=null,this._irradianceCapture=null,this._specularCaptureL1=null,this._specularCaptureL2=null,this._blackTexture=bg.base.TextureCache.BlackTexture(e),this._texture=this._blackTexture,this._showSkybox=!0},{set equirectangularTexture(t){this._texture=t,this._cubemapRenderer&&(this._cubemapRenderer.texture=t)},set irradianceIntensity(t){this._irradianceIntensity=t},get equirectangularTexture(){return this._texture},get cubemapTexture(){return this._cubemapCapture?this._cubemapCapture.texture:this._blackTexture},get irradianceMapTexture(){return this._irradianceCapture?this._irradianceCapture.texture:this._blackTexture},get specularMapTextureL0(){return this._cubemapCapture?this._cubemapCapture.texture:this._blackTexture},get specularMapTextureL1(){return this._specularCaptureL1?this._specularCaptureL1.texture:this._blackTexture},get specularMapTextureL2(){return this._specularCaptureL2?this._specularCaptureL2.texture:this._blackTexture},get irradianceIntensity(){return this._irradianceIntensity},get showSkybox(){return this._showSkybox},set showSkybox(t){this._showSkybox=t},get cubemapSize(){return this._creationParams.cubemapSize},get irradianceMapSize(){return this._creationParams.irradianceMapSize},get specularMapSize(){return this._creationParams.specularMapSize},get specularMapL2Size(){return this._creationParams.specularMapL2Size},resize:function(e){e||(e={}),e.cubemapSize=e.cubemapSize||512,e.irradianceMapSize=e.irradianceMapSize||32,e.specularMapSize=e.specularMapSize||32,e.specularMapL2Size=e.specularMapL2Size||e.specularMapSize||32,(bg.utils.userAgent.system.iOS||bg.utils.userAgent.system.Android)&&(e.irradianceMapSize=16),this._creationParams=JSON.parse(JSON.stringify(e)),t.apply(this,["_cubemapCapture"]),t.apply(this,["_irradianceCapture"]),t.apply(this,["_specularCaptureL1"]),t.apply(this,["_specularCaptureL2"]),this._cubemapCapture=new bg.base.CubemapCapture(this.context),this._cubemapCapture.create(e.cubemapSize),this._irradianceCapture=new bg.base.CubemapCapture(this.context),this._irradianceCapture.create(e.irradianceMapSize),this._specularCaptureL1=new bg.base.CubemapCapture(this.context),this._specularCaptureL1.create(e.specularMapSize),this._specularCaptureL2=new bg.base.CubemapCapture(this.context),this._specularCaptureL2.create(e.specularMapL2Size),this._frame=0},create:function(t){t||(t={}),t.cubemapSize=t.cubemapSize||512,t.irradianceMapSize=t.irradianceMapSize||32,t.specularMapSize=t.specularMapSize||32,t.specularMapL2Size=t.specularMapL2Size||t.specularMapSize||32,(bg.utils.userAgent.system.iOS||bg.utils.userAgent.system.Android)&&(t.irradianceMapSize=16),this._creationParams=JSON.parse(JSON.stringify(t)),this.destroy(),this._cubemapRenderer=new bg.render.EquirectangularCubeRenderer(this.context,90),this._cubemapRenderer.create(),this._cubemapRenderer.texture=this.texture,this._irradianceRenderer=new bg.render.CubeMapRenderer(this.context,90),this._irradianceRenderer.create(bg.render.CubeMapShader.IRRADIANCE_MAP),this._specularRenderer=new bg.render.CubeMapRenderer(this.context,90),this._specularRenderer.create(bg.render.CubeMapShader.SPECULAR_MAP),this._cubemapCapture=new bg.base.CubemapCapture(this.context),this._cubemapCapture.create(t.cubemapSize),this._irradianceCapture=new bg.base.CubemapCapture(this.context),this._irradianceCapture.create(t.irradianceMapSize),this._specularCaptureL1=new bg.base.CubemapCapture(this.context),this._specularCaptureL1.create(t.specularMapSize),this._specularCaptureL2=new bg.base.CubemapCapture(this.context),this._specularCaptureL2.create(t.specularMapL2Size),this._frame=0,this._maxTextureUnits=this.context.getParameter(this.context.MAX_TEXTURE_IMAGE_UNITS)},update:function(t){var e=this,n=new bg.Matrix4(t.viewMatrix);n.setPosition(0,0,0),this._cubemapCapture.updateTexture(function(t,n,i){e._cubemapRenderer.viewMatrix=n,e._cubemapRenderer.projectionMatrix=t,e._cubemapRenderer.render(!i)},n),this._irradianceRenderer.texture=this._cubemapCapture.texture,this._specularRenderer.texture=this._cubemapCapture.texture,0==this._frame?(this._irradianceCapture.updateTexture(function(t,n){e._irradianceRenderer.viewMatrix=n,e._irradianceRenderer.projectionMatrix=t,e._irradianceRenderer.render(!0)},bg.Matrix4.Identity(),n),this._frame=1):1==this._frame?(this._specularCaptureL1.updateTexture(function(t,n){e._specularRenderer.viewMatrix=n,e._specularRenderer.projectionMatrix=t,e._specularRenderer.roughness=e._maxTextureUnits>8?.2:.3,e._specularRenderer.render(!0)},bg.Matrix4.Identity(),n),this._frame=this._maxTextureUnits>8?2:0):2==this._frame&&(this._specularCaptureL2.updateTexture(function(t,n){e._specularRenderer.viewMatrix=n,e._specularRenderer.projectionMatrix=t,e._specularRenderer.roughness=.8,e._specularRenderer.render(!0)},bg.Matrix4.Identity(),n),this._frame=0)},renderSkybox:function(t){var e=new bg.Matrix4(t.viewMatrix);e.setPosition(0,0,0);var n=t.projection,i=-n.m22,r=2*-n.m32/(2*i-2),a=bg.Math.sin(bg.Math.PI_4)*r-1;a/=60,e.scale(a,a,a),this._cubemapRenderer.pipeline.viewport=t.viewport,this._cubemapRenderer.viewMatrix=e,this._cubemapRenderer.projectionMatrix=t.projection,this._cubemapRenderer.render(!1)},destroy:function(){t.apply(this,["_cubemapRenderer"]),t.apply(this,["_irradianceRenderer"]),t.apply(this,["_specularRenderer"]),t.apply(this,["_cubemapCapture"]),t.apply(this,["_irradianceCapture"]),t.apply(this,["_specularCaptureL1"]),t.apply(this,["_specularCaptureL2"])},clone:function(){console.warn("bg.base.Environment.clone(): not implemented");var t=new bg.base.Environment(this.context);return this._creationParams&&(t.create(this._creationParams),t.equirectangularTexture=this.equirectangularTexture,t.irradianceIntensity=this.irradianceIntensity,t.showSkybox=this.showSkybox),t},serialize:function(t,e,n){if(!bg.isElectronApp)throw new Error("Could not serialize Environment outside of an electron app.");var i=require("path");if(t.equirectangularTexture="",t.irradianceIntensity=this.irradianceIntensity,t.showSkybox=this.showSkybox,this.equirectangularTexture instanceof bg.base.Texture){var r=i.basename(this.equirectangularTexture.fileName);t.equirectangularTexture=r;var a=i.join(n.path,r);e.push(bg.base.Writer.CopyFile(this.equirectangularTexture.fileName,a))}t.cubemapSize=this._creationParams.cubemapSize,t.irradianceMapSize=this._creationParams.irradianceMapSize,t.specularMapSize=this._creationParams.specularMapSize,t.specularMapL2Size=this._creationParams.specularMapL2Size},deserialize:function(t,e){var n=this;return new Promise(function(i,r){var a={};if(a.cubemapSize=t.cubemapSize||1024,a.irradianceMapSize=t.irradianceMapSize||32,a.specularMapSize=t.specularMapSize||32,a.specularMapL2Size=t.specularMapL2Size||a.specularMapSize,n.irradianceIntensity=t.irradianceIntensity,n.showSkybox=void 0===t.showSkybox||t.showSkybox,n.create(a),t.equirectangularTexture){var s=bg.utils.path.join(e,t.equirectangularTexture);bg.base.Loader.Load(n.context,bg.base.Loader.StandarizePath(s)).then(function(t){n.equirectangularTexture=t,i()}).catch(function(t){console.warn("Error loading environment image: "+t.message),i()})}else i()})}},{},e)}(bg.app.ContextObject);bg.base.Environment=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=null,n=null;var i=function(){return $traceurRuntime.createClass(function(){this._hue=1,this._saturation=1,this._lightness=1,this._brightness=.5,this._contrast=.5},{set hue(t){this._hue=t},get hue(){return this._hue},set saturation(t){this._saturation=t},get saturation(){return this._saturation},set lightness(t){this._lightness=t},get lightness(){return this._lightness},set brightness(t){this._brightness=t},get brightness(){return this._brightness},set contrast(t){this._contrast=t},get contrast(){return this._contrast},apply:function(t){var e=void 0!==arguments[1]?arguments[1]:{hue:"inHue",saturation:"inSaturation",lightness:"inLightness",brightness:"inBrightness",contrast:"inContrast"};t.setValueFloat(e.hue,this._hue),t.setValueFloat(e.saturation,this._saturation),t.setValueFloat(e.lightness,this._lightness),t.setValueFloat(e.brightness,this._brightness),t.setValueFloat(e.contrast,this._contrast)}},{})}();bg.base.ColorCorrectionSettings=i;var r=function(i){return $traceurRuntime.createClass(function i(r){$traceurRuntime.superConstructor(i).call(this,r),this._material=null,this._light=null,this._lightTransform=bg.Matrix4.Identity(),this._lightArray=new bg.base.LightArray,this._shadowMap=null;var a=[(e||((e=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([t().inputs.buffers.vertex,t().inputs.buffers.normal,t().inputs.buffers.tangent,t().inputs.buffers.tex0,t().inputs.buffers.tex1]),e.addParameter(t().inputs.matrix.all),e.addParameter([{name:"inLightProjectionMatrix",dataType:"mat4",role:"value"},{name:"inLightViewMatrix",dataType:"mat4",role:"value"}]),e.addParameter([{name:"fsPosition",dataType:"vec3",role:"out"},{name:"fsTex0Coord",dataType:"vec2",role:"out"},{name:"fsTex1Coord",dataType:"vec2",role:"out"},{name:"fsNormal",dataType:"vec3",role:"out"},{name:"fsTangent",dataType:"vec3",role:"out"},{name:"fsBitangent",dataType:"vec3",role:"out"},{name:"fsSurfaceToView",dataType:"vec3",role:"out"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"out"}]),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n\t\t\t\t\tmat4 ScaleMatrix = mat4(0.5, 0.0, 0.0, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.0, 0.5, 0.0, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.0, 0.0, 0.5, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.5, 0.5, 0.5, 1.0);\n\t\t\t\t\t\n\t\t\t\t\tvec4 viewPos = inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\tgl_Position = inProjectionMatrix * viewPos;\n\t\t\t\t\t\n\t\t\t\t\tfsNormal = normalize((inNormalMatrix * vec4(inNormal,1.0)).xyz);\n\t\t\t\t\tfsTangent = normalize((inNormalMatrix * vec4(inTangent,1.0)).xyz);\n\t\t\t\t\tfsBitangent = cross(fsNormal,fsTangent);\n\t\t\t\t\t\n\t\t\t\t\tfsVertexPosFromLight = ScaleMatrix * inLightProjectionMatrix * inLightViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\t\n\t\t\t\t\tfsTex0Coord = inTex0;\n\t\t\t\t\tfsTex1Coord = inTex1;\n\t\t\t\t\tfsPosition = viewPos.xyz;")),e),(n||((n=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).addParameter(t().inputs.material.all),n.addParameter(t().inputs.lightingForward.all),n.addParameter(t().inputs.shadows.all),n.addParameter(t().inputs.colorCorrection.all),n.addParameter([{name:"fsPosition",dataType:"vec3",role:"in"},{name:"fsTex0Coord",dataType:"vec2",role:"in"},{name:"fsTex1Coord",dataType:"vec2",role:"in"},{name:"fsNormal",dataType:"vec3",role:"in"},{name:"fsTangent",dataType:"vec3",role:"in"},{name:"fsBitangent",dataType:"vec3",role:"in"},{name:"fsSurfaceToView",dataType:"vec3",role:"in"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"in"},{name:"inCubeMap",dataType:"samplerCube",role:"value"},{name:"inLightEmissionFactor",dataType:"float",role:"value"}]),n.addFunction(t().functions.materials.all),n.addFunction(t().functions.colorCorrection.all),n.addFunction(t().functions.utils.unpack),n.addFunction(t().functions.utils.random),n.addFunction(t().functions.lighting.all),n.addFunction(t().functions.blur.blurCube),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n\t\t\t\t\tvec4 diffuseColor = samplerColor(inTexture,fsTex0Coord,inTextureOffset,inTextureScale);\n\t\t\t\t\tvec4 lightmapColor = samplerColor(inLightMap,fsTex1Coord,inLightMapOffset,inLightMapScale);\n\n\t\t\t\t\tif (inUnlit && diffuseColor.a>=inAlphaCutoff) {\n\t\t\t\t\t\tgl_FragColor = diffuseColor * lightmapColor;\n\t\t\t\t\t}\n\t\t\t\t\telse if (diffuseColor.a>=inAlphaCutoff) {\n\t\t\t\t\t\tvec3 normalMap = samplerNormal(inNormalMap,fsTex0Coord,inNormalMapOffset,inNormalMapScale);\n\t\t\t\t\t\t// This doesn't work on many Mac Intel GPUs\n\t\t\t\t\t\t// vec3 frontFacingNormal = fsNormal;\n\t\t\t\t\t\t// if (!gl_FrontFacing) {\n\t\t\t\t\t\t// \tfrontFacingNormal *= -1.0;\n\t\t\t\t\t\t// }\n\t\t\t\t\t\tnormalMap = combineNormalWithMap(fsNormal,fsTangent,fsBitangent,normalMap);\n\t\t\t\t\t\tvec4 shadowColor = vec4(1.0);\n\t\t\t\t\t\tif (inReceiveShadows) {\n\t\t\t\t\t\t\tshadowColor = getShadowColor(fsVertexPosFromLight,inShadowMap,inShadowMapSize,inShadowType,inShadowStrength,inShadowBias,inShadowColor);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvec4 specular = specularColor(inSpecularColor,inShininessMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinShininessMaskChannel,inShininessMaskInvert);\n\t\t\t\t\t\tfloat lightEmission = applyTextureMask(inLightEmission,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinLightEmissionMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinLightEmissionMaskChannel,inLightEmissionMaskInvert);\n\t\t\t\t\t\tdiffuseColor = diffuseColor * inDiffuseColor * lightmapColor;\n\t\t\t\t\t\t\n\t\t\t\t\t\tvec4 light = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\t\tvec4 specularColor = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\t\t// This doesn't work on A11 and A12 chips on Apple devices.\n\t\t\t\t\t\t// for (int i=0; i<"+bg.base.MAX_FORWARD_LIGHTS+"; ++i) {\n\t\t\t\t\t\t// \tif (i>=inNumLights) break;\n\t\t\t\t\t\t// \tlight.rgb += getLight(\n\t\t\t\t\t\t// \t\tinLightType[i],\n\t\t\t\t\t\t// \t\tinLightAmbient[i], inLightDiffuse[i], inLightSpecular[i],inShininess,\n\t\t\t\t\t\t// \t\tinLightPosition[i],inLightDirection[i],\n\t\t\t\t\t\t// \t\tinLightAttenuation[i].x,inLightAttenuation[i].y,inLightAttenuation[i].z,\n\t\t\t\t\t\t// \t\tinSpotCutoff[i],inSpotExponent[i],inLightCutoffDistance[i],\n\t\t\t\t\t\t// \t\tfsPosition,normalMap,\n\t\t\t\t\t\t// \t\tdiffuseColor,specular,shadowColor,\n\t\t\t\t\t\t// \t\tspecularColor\n\t\t\t\t\t\t// \t).rgb;\n\t\t\t\t\t\t// \tlight.rgb += specularColor.rgb;\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\t// Workaround for A11 and A12 chips\n\t\t\t\t\t\tif (inNumLights>0) {\n\t\t\t\t\t\t\tlight.rgb += getLight(\n\t\t\t\t\t\t\t\tinLightType[0],\n\t\t\t\t\t\t\t\tinLightAmbient[0], inLightDiffuse[0], inLightSpecular[0],inShininess,\n\t\t\t\t\t\t\t\tinLightPosition[0],inLightDirection[0],\n\t\t\t\t\t\t\t\tinLightAttenuation[0].x,inLightAttenuation[0].y,inLightAttenuation[0].z,\n\t\t\t\t\t\t\t\tinSpotCutoff[0],inSpotExponent[0],inLightCutoffDistance[0],\n\t\t\t\t\t\t\t\tfsPosition,normalMap,\n\t\t\t\t\t\t\t\tdiffuseColor,specular,shadowColor,\n\t\t\t\t\t\t\t\tspecularColor\n\t\t\t\t\t\t\t).rgb;\n\t\t\t\t\t\t\tlight.rgb += specularColor.rgb;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inNumLights>1) {\n\t\t\t\t\t\t\tlight.rgb += getLight(\n\t\t\t\t\t\t\t\tinLightType[1],\n\t\t\t\t\t\t\t\tinLightAmbient[1], inLightDiffuse[1], inLightSpecular[1],inShininess,\n\t\t\t\t\t\t\t\tinLightPosition[1],inLightDirection[1],\n\t\t\t\t\t\t\t\tinLightAttenuation[1].x,inLightAttenuation[1].y,inLightAttenuation[1].z,\n\t\t\t\t\t\t\t\tinSpotCutoff[0],inSpotExponent[1],inLightCutoffDistance[1],\n\t\t\t\t\t\t\t\tfsPosition,normalMap,\n\t\t\t\t\t\t\t\tdiffuseColor,specular,shadowColor,\n\t\t\t\t\t\t\t\tspecularColor\n\t\t\t\t\t\t\t).rgb;\n\t\t\t\t\t\t\tlight.rgb += specularColor.rgb;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvec3 cameraPos = vec3(0.0);\n\t\t\t\t\t\tvec3 cameraVector = fsPosition - cameraPos;\n\t\t\t\t\t\tvec3 lookup = reflect(cameraVector,normalMap);\n\n\t\t\t\t\t\t// Roughness using gaussian blur has been deactivated because it is very inefficient\n\t\t\t\t\t\t//float dist = distance(fsPosition,cameraPos);\n\t\t\t\t\t\t//float maxRough = 50.0;\n\t\t\t\t\t\t//float rough = max(inRoughness * 10.0,1.0);\n\t\t\t\t\t\t//rough = max(rough*dist,rough);\n\t\t\t\t\t\t//float blur = min(rough,maxRough);\n\t\t\t\t\t\t//vec3 cubemapColor = blurCube(inCubeMap,lookup,int(blur),vec2(10),dist).rgb;\n\n\t\t\t\t\t\tvec3 cubemapColor = textureCube(inCubeMap,lookup).rgb;\n\n\t\t\t\t\t\tfloat reflectionAmount = applyTextureMask(inReflection,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinReflectionMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinReflectionMaskChannel,inReflectionMaskInvert);\n\n\t\t\t\t\t\tlight.rgb = clamp(light.rgb + (lightEmission * diffuseColor.rgb * 10.0), vec3(0.0), vec3(1.0));\n\t\t\t\t\t\t\n\n\t\t\t\t\t\tgl_FragColor = vec4(light.rgb * (1.0 - reflectionAmount) + cubemapColor * reflectionAmount * diffuseColor.rgb, diffuseColor.a);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tdiscard;\n\t\t\t\t\t}")),n)];this.setupShaderSource(a),this._colorCorrection=new bg.base.ColorCorrectionSettings},{get material(){return this._material},set material(t){this._material=t},get light(){return this._light},set light(t){this._light=t,this._lightArray.reset()},get lightTransform(){return this._lightTransform},set lightTransform(t){this._lightTransform=t,this._lightArray.reset()},get lightArray(){return this._lightArray},set shadowMap(t){this._shadowMap=t},get shadowMap(){return this._shadowMap},get colorCorrection(){return this._colorCorrection},set colorCorrection(t){this._colorCorrection=t},beginDraw:function(){if(this._light&&(this.lightArray.reset(),this.lightArray.push(this.light,this.lightTransform)),this.lightArray.numLights){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.lightArray.updatePositionAndDirection(e);var n=this.shadowMap?this.shadowMap.viewMatrix:this.lightArray.shadowLightTransform;this.shader.setMatrix4("inLightProjectionMatrix",this.shadowMap?this.shadowMap.projection:this.lightArray.shadowLight.projection);var i=this.shadowMap?this.shadowMap.shadowColor:bg.Color.Transparent(),r=bg.base.TextureCache.BlackTexture(this.context);this.shader.setMatrix4("inLightViewMatrix",n),this.shader.setValueInt("inShadowType",this._shadowMap?this._shadowMap.shadowType:0),this.shader.setTexture("inShadowMap",this._shadowMap?this._shadowMap.texture:r,bg.base.TextureUnit.TEXTURE_5),this.shader.setVector2("inShadowMapSize",this._shadowMap?this._shadowMap.size:new bg.Vector2(32,32)),this.shader.setValueFloat("inShadowStrength",this.lightArray.shadowLight.shadowStrength),this.shader.setVector4("inShadowColor",i),this.shader.setValueFloat("inShadowBias",this.lightArray.shadowLight.shadowBias),this.shader.setValueInt("inCastShadows",this.lightArray.shadowLight.castShadows),this.shader.setVector4Ptr("inLightAmbient",this.lightArray.ambient),this.shader.setVector4Ptr("inLightDiffuse",this.lightArray.diffuse),this.shader.setVector4Ptr("inLightSpecular",this.lightArray.specular),this.shader.setValueIntPtr("inLightType",this.lightArray.type),this.shader.setVector3Ptr("inLightAttenuation",this.lightArray.attenuation),this.shader.setValueFloatPtr("inLightCutoffDistance",this.lightArray.cutoffDistance);this.shader.setValueFloat("inLightEmissionFactor",10),this.shader.setTexture("inCubeMap",bg.scene.Cubemap.Current(this.context),bg.base.TextureUnit.TEXTURE_6),this.shader.setVector3Ptr("inLightDirection",this.lightArray.direction),this.shader.setVector3Ptr("inLightPosition",this.lightArray.position),this.shader.setValueFloatPtr("inSpotCutoff",this.lightArray.spotCutoff),this.shader.setValueFloatPtr("inSpotExponent",this.lightArray.spotExponent),this.shader.setValueInt("inNumLights",this.lightArray.numLights)}else{var a=bg.Color.Black();this.shader.setVector4Ptr("inLightAmbient",a.toArray()),this.shader.setVector4Ptr("inLightDiffuse",a.toArray()),this.shader.setVector4Ptr("inLightSpecular",a.toArray()),this.shader.setVector3Ptr("inLightDirection",new bg.Vector3(0,0,0).toArray()),this.shader.setValueInt("inNumLights",0)}this.colorCorrection.apply(this.shader)},setupVars:function(){if(this.material){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst),this.shader.setMatrix4("inNormalMatrix",t.normalMatrix),this.shader.setMatrix4("inViewMatrixInv",t.viewMatrixInvert);var n=bg.base.TextureCache.WhiteTexture(this.context),i=(bg.base.TextureCache.BlackTexture(this.context),bg.base.TextureCache.NormalTexture(this.context)),r=this.material.texture||n,a=this.material.lightmap||n,s=this.material.normalMap||i,o=this.material.shininessMask||n,u=this.material.lightEmissionMask||n;this.shader.setVector4("inDiffuseColor",this.material.diffuse),this.shader.setVector4("inSpecularColor",this.material.specular),this.shader.setValueFloat("inShininess",this.material.shininess),this.shader.setTexture("inShininessMask",o,bg.base.TextureUnit.TEXTURE_3),this.shader.setVector4("inShininessMaskChannel",this.material.shininessMaskChannelVector),this.shader.setValueInt("inShininessMaskInvert",this.material.shininessMaskInvert),this.shader.setValueFloat("inLightEmission",this.material.lightEmission),this.shader.setTexture("inLightEmissionMask",u,bg.base.TextureUnit.TEXTURE_4),this.shader.setVector4("inLightEmissionMaskChannel",this.material.lightEmissionMaskChannelVector),this.shader.setValueInt("inLightEmissionMaskInvert",this.material.lightEmissionMaskInvert),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff),this.shader.setTexture("inTexture",r,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.textureScale),this.shader.setTexture("inLightMap",a,bg.base.TextureUnit.TEXTURE_1),this.shader.setVector2("inLightMapOffset",this.material.lightmapOffset),this.shader.setVector2("inLightMapScale",this.material.lightmapScale),this.shader.setTexture("inNormalMap",s,bg.base.TextureUnit.TEXTURE_2),this.shader.setVector2("inNormalMapScale",this.material.normalMapScale),this.shader.setVector2("inNormalMapOffset",this.material.normalMapOffset),this.shader.setValueInt("inReceiveShadows",this.material.receiveShadows);var h=this.material.reflectionMask||n;this.shader.setValueFloat("inReflection",this.material.reflectionAmount),this.shader.setTexture("inReflectionMask",h,bg.base.TextureUnit.TEXTURE_7),this.shader.setVector4("inReflectionMaskChannel",this.material.reflectionMaskChannelVector),this.shader.setValueInt("inReflectionMaskInvert",this.material.reflectionMaskInvert);var l=this.material.roughnessMask||n;this.shader.setValueFloat("inRoughness",this.material.roughness),this.context.getParameter(this.context.MAX_TEXTURE_IMAGE_UNITS)<9?this.shader.setTexture("inRoughnessMask",l,bg.base.TextureUnit.TEXTURE_7):this.shader.setTexture("inRoughnessMask",l,bg.base.TextureUnit.TEXTURE_8),this.shader.setVector4("inRoughnessMaskChannel",this.material.roughnessMaskChannelVector),this.shader.setValueInt("inRoughnessMaskInvert",this.material.roughnessMaskInvert),this.shader.setValueInt("inSelectMode",!1),this.shader.setValueInt("inUnlit",this.material.unlit)}}},{},i)}(bg.base.Effect);bg.base.ForwardEffect=r,bg.base.MAX_FORWARD_LIGHTS=4}(),function(){var t={BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,UNSIGNED_INT:5125,FLOAT:5126,INT:0,GetLength:function(t){switch(t.type){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT3":return 9;case"MAT4":return 16;default:return 0}}};function e(e,n){var i=e.bufferViews,r=e.accessors;return r&&i?new Promise(function(e,a){var s=[];r.every(function(e){var r=e.bufferView<i.length?i[e.bufferView]:null,o=r&&r.buffer<n.length?n[r.buffer]:null;if(r&&o){var u=function(e,n,i){var r=null;switch(e.componentType){case t.BYTE:r=Int8Array;break;case t.UNSIGNED_BYTE:r=Uint8Array;break;case t.SHORT:r=Int18Array;break;case t.UNSIGNED_SHORT:r=Uint16Array;break;case t.UNSIGNED_INT:r=UInt32Array;break;case t.FLOAT:r=Float32Array;break;default:r=Int32Array}var a=e.count*t.GetLength(e);return new r(n,i.byteOffset,a)}(e,o,r);return s.push({buffer:u,accessor:e,view:r}),!0}return a(new Error("Malformed glTF file.")),!1})&&e(s)}):Promise.reject(new Error("Malformed or incompatible glTF file."))}function n(t){return"string"==typeof t&&/base64/.test(t.substring(0,100))}function i(t,e){return n(e)||(e=bg.utils.path.join(t,e)),e}function r(t,e,n){return new Promise(function(t,n){if(e.materials){var i=[];e.materials.forEach(function(t){i.push(new Promise(function(t,e){t(new bg.base.PBRMaterial)}))}),Promise.all(i).then(function(e){t(e)})}else t([])})}function a(t,e){return new Promise(function(n,i){var r=t.scenes,a=t.nodes;if(a&&0!=a.length||(a=[],e.forEach(function(t,e){a.push({mesh:e,name:mesh.name})})),r&&0!=r.length){var s={name:"SceneRoot",nodes:[]};r.forEach(function(t){t.nodes.forEach(function(t){-1==s.nodes.indexOf(t)&&s.nodes.push(t)})}),r=[s]}else(r=[]).push({name:"SceneRoot",nodes:[]}),a.forEach(function(t,e){return r.nodes.push(e)});var o=r[0];n(function t(e,n,i){var r,a,s={};if(s.name=e.name,e.children&&(s.children=[],e.children.forEach(function(e){if(e<n.length){var r=t(n[e],n,i);s.children.push(r)}else console.warn("Node index out of bounds loading glTF file.")})),void 0!==e.mesh&&null!==e.mesh&&(e.mesh<i.length?s.mesh=i[e.mesh]:console.warn("Mesh index out of bounds loading glTF file.")),e.matrix)s.transform=new bg.Matrix4(e.matrix);else if(e.translation||e.rotation||e.scale){var o=bg.Matrix4.Identity();if(e.translation&&(r=o).translate.apply(r,$traceurRuntime.spread(e.translation)),e.rotation){var u=new(Function.prototype.bind.apply(bg.Quaternion,$traceurRuntime.spread([null],e.rotation)));o.mult(u.getMatrix4())}e.scale&&(a=o).scale.apply(a,$traceurRuntime.spread(e.scale)),s.transform=o}return s}({children:o.nodes,name:o.name},a,e))})}function s(t,s,o){var u={};return new Promise(function(h,l){var c=null;try{c=JSON.parse(s)}catch(t){l(t)}(function(t,e,r){var a=bg.utils.path.removeFileName(r);return new Promise(function(r,s){if(e.images){var o=[];e.images.forEach(function(e){o.push(new Promise(function(r,s){if(n(e.uri))bg.base.Texture.FromBase64Image(t,e.uri).promise.then(function(t){r(t)});else{var o=i(a,e.uri);bg.base.Loader.Load(t,o).then(function(t){r(t)}).catch(function(t){return s(t)})}}))}),Promise.all(o).then(function(t){r(t)}).catch(function(t){s(t)})}else r([])})})(t,c,o).then(function(t){return u.textures=t,r(0,c)}).then(function(t){return u.materials=t,function(t,e){var n=bg.utils.path.removeFileName(e);return new Promise(function(e,r){var a=[];t.buffers&&t.buffers.forEach&&t.buffers.forEach(function(t){var e=i(n,t.uri);a.push(new Promise(function(t,n){fetch(e).then(function(i){200==i.status?t(i.arrayBuffer()):i.status>=300&&i.status<400?n(new Error("The resource has changed location: "+e)):i.status>=400&&i.status<500?n(new Error("The resource does not exist or is inaccessible ")):n(new Error("Server error loading resource "+e))}).catch(function(t){n(t)})}))}),Promise.all(a).then(function(t){e(t)})})}(c,o)}).then(function(t){return u.buffers=t,e(c,t)}).then(function(t){return u.bufferViews=t,function(t,e,n){return new Promise(function(n,i){var r=[];t.meshes&&t.meshes.forEach(function(t){r.push(function(t,e,n){var i={name:t.name||"",primitives:[]};return(t.primitives||[]).forEach(function(t,n){var r=function(t,e,n){function i(t){return null!=t?e[t]:null}t.attributes=t.attributes||{};var r={};return r.vertex=i(t.attributes.POSITION),r.normal=i(t.attributes.NORMAL),r.texCoord0=i(t.attributes.TEXCOORD_0),r.texCoord1=i(t.attributes.TEXCOORD_1),r.tangent=i(t.attributes.TANGENT),r.index=i(t.indices),r.material=t.material,r}(t,e);r.name=i.name+"_"+n,i.primitives.push(r)}),i}(t,e))}),n(r)})}(c,t,u.buffers)}).then(function(t){return u.meshes=t,a(c,u.meshes)}).then(function(t){u.sceneRoot=t,h(u)}).catch(function(t){l(t)})})}function o(t,e,n){return new Promise(function(i,r){var a=[],s=function t(e,n,i,r){var a=new bg.scene.Node(e,n.name||"");if(n.children&&n.children.forEach(function(n){a.addChild(t(e,n,i,r))}),n.mesh){var s=new bg.scene.Drawable(n.mesh.name||"");n.mesh.primitives.forEach(function(t){var n=new bg.base.PolyList(e);n.name=name,n.vertex=t.vertex.buffer,n.normal=t.normal.buffer,n.texCoord0=t.texCoord0.buffer,n.texCoord1=t.texCoord1.buffer,t.tangent&&(n.tangent=t.tangent.buffer),n.index=t.index.buffer,n.build(),s.addPolyList(n)}),a.addComponent(s)}if(n.transform){var o=new bg.scene.Transform(n.transform);a.addComponent(o)}return a}(t,e,n,a);Promise.all(a).then(function(){return i(s)}).catch(function(t){return r(t)})})}var u=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return"gltf"==bg.utils.Resource.GetExtension(t)},load:function(t,e,n){return new Promise(function(i,r){s(t,n,e).then(function(n){return o(t,n.sceneRoot,e)}).then(function(t){i(t)}).catch(function(t){r(t)})})}},{},t)}(bg.base.LoaderPlugin);bg.base.GLTFLoaderPlugin=u}(),function(){bg.base.LightType={DIRECTIONAL:4,SPOT:1,POINT:5,DISABLED:10},bg.base.SpecularType={PHONG:0,BLINN:1};var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._enabled=!0,this._type=bg.base.LightType.DIRECTIONAL,this._direction=new bg.Vector3(0,0,-1),this._ambient=new bg.Color(.2,.2,.2,1),this._diffuse=new bg.Color(.9,.9,.9,1),this._specular=bg.Color.White(),this._attenuation=new bg.Vector3(1,.5,.1),this._spotCutoff=20,this._spotExponent=30,this._shadowStrength=.7,this._cutoffDistance=-1,this._castShadows=!0,this._shadowBias=2e-5,this._specularType=bg.base.SpecularType.PHONG,this._intensity=1,this._projection=bg.Matrix4.Ortho(-10,10,-10,10,.5,300)},{clone:function(t){var e=new bg.base.Light(t||this.context);return e.assign(this),e},assign:function(t){this.enabled=t.enabled,this.type=t.type,this.direction.assign(t.direction),this.ambient.assign(t.ambient),this.diffuse.assign(t.diffuse),this.specular.assign(t.specular),this._attenuation.assign(t._attenuation),this.spotCutoff=t.spotCutoff,this.spotExponent=t.spotExponent,this.shadowStrength=t.shadowStrength,this.cutoffDistance=t.cutoffDistance,this.castShadows=t.castShadows,this.shadowBias=t.shadowBias,this.specularType=t.specularType,this.intensity=t.intensity},get enabled(){return this._enabled},set enabled(t){this._enabled=t},get type(){return this._type},set type(t){this._type=t},get direction(){return this._direction},set direction(t){this._direction=t},get ambient(){return this._ambient},set ambient(t){this._ambient=t},get diffuse(){return this._diffuse},set diffuse(t){this._diffuse=t},get specular(){return this._specular},set specular(t){this._specular=t},get specularType(){return this._specularType},set specularType(t){this._specularType=t},get intensity(){return this._intensity},set intensity(t){this._intensity=t},get attenuationVector(){return this._attenuation},get constantAttenuation(){return this._attenuation.x},get linearAttenuation(){return this._attenuation.y},get quadraticAttenuation(){return this._attenuation.z},set attenuationVector(t){this._attenuation=t},set constantAttenuation(t){this._attenuation.x=t},set linearAttenuation(t){this._attenuation.y=t},set quadraticAttenuation(t){this._attenuation.z=t},get cutoffDistance(){return this._cutoffDistance},set cutoffDistance(t){this._cutoffDistance=t},get spotCutoff(){return this._spotCutoff},set spotCutoff(t){this._spotCutoff=t},get spotExponent(){return this._spotExponent},set spotExponent(t){this._spotExponent=t},get shadowStrength(){return this._shadowStrength},set shadowStrength(t){this._shadowStrength=t},get castShadows(){return this._castShadows},set castShadows(t){this._castShadows=t},get shadowBias(){return this._shadowBias},set shadowBias(t){this._shadowBias=t},get projection(){return this._projection},set projection(t){this._projection=t},deserialize:function(t){switch(t.lightType){case"kTypeDirectional":this._type=bg.base.LightType.DIRECTIONAL;break;case"kTypeSpot":this._type=bg.base.LightType.SPOT,this._shadowBias=t.shadowBias;break;case"kTypePoint":this._type=bg.base.LightType.POINT}this._ambient=new bg.Color(t.ambient),this._diffuse=new bg.Color(t.diffuse),this._specular=new bg.Color(t.specular),this._spotCutoff=t.spotCutoff||20,this._spotExponent=t.spotExponent||30,this._shadowStrength=t.shadowStrength,this._cutoffDistance=t.cutoffDistance,this._projection=new bg.Matrix4(t.projection),this._castShadows=t.castShadows,this._specularType="BLINN"==t.specularType?bg.base.SpecularType.BLINN:bg.base.SpecularType.PHONG,this._intensity=t.intensity||1,this._attenuation=new bg.Vector3(t.constantAtt,t.linearAtt,t.expAtt)},serialize:function(t){var e=[];e[bg.base.LightType.DIRECTIONAL]="kTypeDirectional",e[bg.base.LightType.SPOT]="kTypeSpot",e[bg.base.LightType.POINT]="kTypePoint",t.lightType=e[this._type],t.ambient=this._ambient.toArray(),t.diffuse=this._diffuse.toArray(),t.specular=this._specular.toArray(),t.intensity=1,t.spotCutoff=this._spotCutoff||20,t.spotExponent=this._spotExponent||30,t.shadowStrength=this._shadowStrength,t.cutoffDistance=this._cutoffDistance,t.projection=this._projection.toArray(),t.castShadows=this._castShadows,t.shadowBias=this._shadowBias||.0029,t.specularType=this.specularType==bg.base.SpecularType.BLINN?"BLINN":"PHONG",t.intensity=this.intensity||1,t.constantAtt=this._attenuation.x,t.linearAtt=this._attenuation.y,t.expAtt=this._attenuation.z}},{},t)}(bg.app.ContextObject);bg.base.Light=t;var e=function(){return $traceurRuntime.createClass(function(){this.reset()},{get type(){return this._type},get ambient(){return this._ambient},get diffuse(){return this._diffuse},get specular(){return this._specular},get position(){return this._position},get direction(){return this._direction},get rawDirection(){return this._rawDirection},get spotCutoff(){return this._spotCutoff},get cosSpotCutoff(){return this._cosSpotCutoff},get spotExponent(){return this._spotExponent},get cosSpotExponent(){return this._cosSpotExponent},get shadowStrength(){return this._shadowStrength},get cutoffDistance(){return this._cutoffDistance},get specularType(){return this._specularType},get intensity(){return this._intensity},get numLights(){return this._numLights},get attenuation(){return this._attenuation},get lightTransform(){return this._lightTransform},get shadowLight(){return this._shadowLight||{shadowStrength:0,shadowColor:bg.Color.Black(),shadowBias:0,castShadows:!1,projection:bg.Matrix4.Identity()}},get shadowLightTransform(){return this._shadowLightTransform||bg.Matrix4.Identity()},get shadowLightIndex(){return this._shadowLightIndex},get shadowLightDirection(){return this._shadowLightDirection},reset:function(){this._type=[],this._ambient=[],this._diffuse=[],this._specular=[],this._position=[],this._direction=[],this._rawDirection=[],this._attenuation=[],this._spotCutoff=[],this._cosSpotCutoff=[],this._spotExponent=[],this._cosSpotExponent=[],this._shadowStrength=[],this._cutoffDistance=[],this._numLights=0,this._lightTransform=[],this._specularType=[],this._intensity=[],this._shadowLightTransform=null,this._shadowLightIndex=-1,this._shadowLight=null,this._shadowLightDirection=new bg.Vector3(0,0,1)},push:function(t,e){var n,i,r;if(this._numLights==bg.base.MAX_FORWARD_LIGHTS)return!1;-1==this._shadowLightIndex&&t.type!=bg.base.LightType.POINT&&t.castShadows&&(this._shadowLightTransform=e,this._shadowLight=t,this._shadowLightIndex=this._numLights),this._type.push(t.type),(n=this._ambient).push.apply(n,$traceurRuntime.spread(t.ambient.toArray())),(i=this._diffuse).push.apply(i,$traceurRuntime.spread(t.diffuse.toArray())),(r=this._specular).push.apply(r,$traceurRuntime.spread(t.specular.toArray())),this._rawDirection.push(t.direction),this._attenuation.push(t.constantAttenuation),this._attenuation.push(t.linearAttenuation),this._attenuation.push(t.quadraticAttenuation),this._spotCutoff.push(t.spotCutoff),this._cosSpotCutoff.push(Math.cos(t.spotCutoff*Math.PI/180)),this._spotExponent.push(t.spotExponent);var a=t.spotCutoff>t.spotExponent?t.spotExponent:.98*t.spotCutoff;return this._cosSpotExponent.push(Math.cos(a*Math.PI/180)),this._shadowStrength.push(t.shadowStrength),this._cutoffDistance.push(t.cutoffDistance),this._specularType.push(t.specularType),this._intensity.push(t.intensity),this._numLights++,this._lightTransform.push(e),!0},updatePositionAndDirection:function(t){var e,n;this._direction=[],this._position=[];for(var i=0;i<this._numLights;++i){var r=new bg.Matrix4(t),a=r.mult(this._lightTransform[i]).rotation.multVector(this._rawDirection[i]).xyz,s=(r=new bg.Matrix4(t)).mult(this._lightTransform[i]).position;(e=this._direction).push.apply(e,$traceurRuntime.spread(a.toArray())),(n=this._position).push.apply(n,$traceurRuntime.spread(s.toArray())),this._shadowLightIndex==i&&(this._shadowLightDirection=a)}}},{})}();bg.base.LightArray=e}(),function(){function t(t,e,n){return bg.base.Texture.FromImage(t,e,n)}bg.base.MaterialFlag={DIFFUSE:1,SPECULAR:2,SHININESS:4,LIGHT_EMISSION:8,REFRACTION_AMOUNT:16,REFLECTION_AMOUNT:32,TEXTURE:64,LIGHT_MAP:128,NORMAL_MAP:256,TEXTURE_OFFSET:512,TEXTURE_SCALE:1024,LIGHT_MAP_OFFSET:2048,LIGHT_MAP_SCALE:4096,NORMAL_MAP_OFFSET:8192,NORMAL_MAP_SCALE:16384,CAST_SHADOWS:32768,RECEIVE_SHADOWS:65536,ALPHA_CUTOFF:1<<17,SHININESS_MASK:1<<18,SHININESS_MASK_CHANNEL:1<<19,SHININESS_MASK_INVERT:1<<20,LIGHT_EMISSION_MASK:1<<21,LIGHT_EMISSION_MASK_CHANNEL:1<<22,LIGHT_EMISSION_MASK_INVERT:1<<23,REFLECTION_MASK:1<<24,REFLECTION_MASK_CHANNEL:1<<25,REFLECTION_MASK_INVERT:1<<26,CULL_FACE:1<<27,ROUGHNESS:1<<28,UNLIT:1<<29};var e=function(){function t(t){this._modifierFlags=0,this._diffuse=bg.Color.White(),this._specular=bg.Color.White(),this._shininess=0,this._lightEmission=0,this._refractionAmount=0,this._reflectionAmount=0,this._texture=null,this._lightmap=null,this._normalMap=null,this._textureOffset=new bg.Vector2,this._textureScale=new bg.Vector2(1),this._lightmapOffset=new bg.Vector2,this._lightmapScale=new bg.Vector2(1),this._normalMapOffset=new bg.Vector2,this._normalMapScale=new bg.Vector2(1),this._castShadows=!0,this._receiveShadows=!0,this._alphaCutoff=.5,this._shininessMask=null,this._shininessMaskChannel=0,this._shininessMaskInvert=!1,this._lightEmissionMask=null,this._lightEmissionMaskChannel=0,this._lightEmissionMaskInvert=!1,this._reflectionMask=null,this._reflectionMaskChannel=0,this._reflectionMaskInvert=!1,this._cullFace=!0,this._roughness=!0,this._roughnessMask=null,this._roughnessMaskChannel=0,this._roughnessMaskInvert=!1,this._unlit=!1,t&&(void 0!==t.diffuseR&&void 0!==t.diffuseG&&void 0!==t.diffuseB&&(this.diffuse=new bg.Color(t.diffuseR,t.diffuseG,t.diffuseB,t.diffuseA?t.diffuseA:1)),void 0!==t.specularR&&void 0!==t.specularG&&void 0!==t.specularB&&(this.specular=new bg.Color(t.specularR,t.specularG,t.specularB,t.specularA?t.specularA:1)),void 0!==t.shininess&&(this.shininess=t.shininess),void 0!==t.lightEmission&&(this.lightEmission=t.lightEmission),void 0!==t.refractionAmount&&(this.refractionAmount=t.refractionAmount),void 0!==t.reflectionAmount&&(this.reflectionAmount=t.reflectionAmount),void 0!==t.texture&&(this.texture=t.texture),void 0!==t.lightmap&&(this.lightmap=t.lightmap),void 0!==t.normalMap&&(this.normalMap=t.normalMap),void 0!==t.textureOffsetX&&void 0!==t.textureOffsetY&&(this.textureOffset=new bg.Vector2(t.textureOffsetX,t.textureOffsetY)),void 0!==t.textureScaleX&&void 0!==t.textureScaleY&&(this.textureScale=new bg.Vector2(t.textureScaleX,t.textureScaleY)),void 0!==t.lightmapOffsetX&&void 0!==t.lightmapOffsetY&&(this.lightmapOffset=new bg.Vector2(t.lightmapOffsetX,t.lightmapOffsetY)),void 0!==t.lightmapScaleX&&void 0!==t.lightmapScaleY&&(this.lightmapScale=new bg.Vector2(t.lightmapScaleX,t.lightmapScaleY)),void 0!==t.normalMapScaleX&&void 0!==t.normalMapScaleY&&(this.normalMapScale=new bg.Vector2(t.normalMapScaleX,t.normalMapScaleY)),void 0!==t.normalMapOffsetX&&void 0!==t.normalMapOffsetY&&(this.normalMapOffset=new bg.Vector2(t.normalMapOffsetX,t.normalMapOffsetY)),void 0!==t.castShadows&&(this.castShadows=t.castShadows),void 0!==t.receiveShadows&&(this.receiveShadows=t.receiveShadows),void 0!==t.alphaCutoff&&(this.alphaCutoff=t.alphaCutoff),void 0!==t.shininessMask&&(this.shininessMask=t.shininessMask),void 0!==t.shininessMaskChannel&&(this.shininessMaskChannel=t.shininessMaskChannel),void 0!==t.invertShininessMask&&(this.shininessMaskInvert=t.invertShininessMask),void 0!==t.lightEmissionMask&&(this.lightEmissionMask=t.lightEmissionMask),void 0!==t.lightEmissionMaskChannel&&(this.lightEmissionMaskChannel=t.lightEmissionMaskChannel),void 0!==t.invertLightEmissionMask&&(this.lightEmissionMaskInvert=t.invertLightEmissionMask),void 0!==t.reflectionMask&&(this.reflectionMask=t.reflectionMask),void 0!==t.reflectionMaskChannel&&(this.reflectionMaskChannel=t.reflectionMaskChannel),void 0!==t.invertReflectionMask&&(this.reflectionMaskInvert=t.reflectionMaskInvert),void 0!==t.roughness&&(this.roughness=t.roughness),void 0!==t.roughnessMask&&(this.roughnessMask=t.roughnessMask),void 0!==t.roughnessMaskChannel&&(this.roughnessMaskChannel=t.roughnessMaskChannel),void 0!==t.invertRoughnessMask&&(this.roughnessMaskInvert=t.roughnessMaskInvert),void 0!==t.unlit&&(this.unlit=t.unlit))}return $traceurRuntime.createClass(t,{get modifierFlags(){return this._modifierFlags},set modifierFlags(t){this._modifierFlags=t},setEnabled:function(t){this._modifierFlags=this._modifierFlags|t},isEnabled:function(t){return 0!=(this._modifierFlags&t)},get diffuse(){return this._diffuse},get specular(){return this._specular},get shininess(){return this._shininess},get lightEmission(){return this._lightEmission},get refractionAmount(){return this._refractionAmount},get reflectionAmount(){return this._reflectionAmount},get texture(){return this._texture},get lightmap(){return this._lightmap},get normalMap(){return this._normalMap},get textureOffset(){return this._textureOffset},get textureScale(){return this._textureScale},get lightmapOffset(){return this._lightmapOffset},get lightmapScale(){return this._lightmapScale},get normalMapOffset(){return this._normalMapOffset},get normalMapScale(){return this._normalMapScale},get castShadows(){return this._castShadows},get receiveShadows(){return this._receiveShadows},get alphaCutoff(){return this._alphaCutoff},get shininessMask(){return this._shininessMask},get shininessMaskChannel(){return this._shininessMaskChannel},get shininessMaskInvert(){return this._shininessMaskInvert},get lightEmissionMask(){return this._lightEmissionMask},get lightEmissionMaskChannel(){return this._lightEmissionMaskChannel},get lightEmissionMaskInvert(){return this._lightEmissionMaskInvert},get reflectionMask(){return this._reflectionMask},get reflectionMaskChannel(){return this._reflectionMaskChannel},get reflectionMaskInvert(){return this._reflectionMaskInvert},get cullFace(){return this._cullFace},get roughness(){return this._roughness},get roughnessMask(){return this._roughnessMask},get roughnessMaskChannel(){return this._roughnessMaskChannel},get roughnessMaskInvert(){return this._roughnessMaskInvert},get unlit(){return this._unlit},set diffuse(t){this._diffuse=t,this.setEnabled(bg.base.MaterialFlag.DIFFUSE)},set specular(t){this._specular=t,this.setEnabled(bg.base.MaterialFlag.SPECULAR)},set shininess(t){isNaN(t)||(this._shininess=t,this.setEnabled(bg.base.MaterialFlag.SHININESS))},set lightEmission(t){isNaN(t)||(this._lightEmission=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_EMISSION))},set refractionAmount(t){isNaN(t)||(this._refractionAmount=t,this.setEnabled(bg.base.MaterialFlag.REFRACTION_AMOUNT))},set reflectionAmount(t){isNaN(t)||(this._reflectionAmount=t,this.setEnabled(bg.base.MaterialFlag.REFLECTION_AMOUNT))},set texture(t){this._texture=t,this.setEnabled(bg.base.MaterialFlag.TEXTURE)},set lightmap(t){this._lightmap=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_MAP)},set normalMap(t){this._normalMap=t,this.setEnabled(bg.base.MaterialFlag.NORMAL_MAP)},set textureOffset(t){this._textureOffset=t,this.setEnabled(bg.base.MaterialFlag.TEXTURE_OFFSET)},set textureScale(t){this._textureScale=t,this.setEnabled(bg.base.MaterialFlag.TEXTURE_SCALE)},set lightmapOffset(t){this._lightmapOffset=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_MAP_OFFSET)},set lightmapScale(t){this._lightmapScale=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_MAP_SCALE)},set normalMapOffset(t){this._normalMapOffset=t,this.setEnabled(bg.base.MaterialFlag.NORMAL_MAP_OFFSET)},set normalMapScale(t){this._normalMapScale=t,this.setEnabled(bg.base.MaterialFlag.NORMAL_MAP_SCALE)},set castShadows(t){this._castShadows=t,this.setEnabled(bg.base.MaterialFlag.CAST_SHADOWS)},set receiveShadows(t){this._receiveShadows=t,this.setEnabled(bg.base.MaterialFlag.RECEIVE_SHADOWS)},set alphaCutoff(t){isNaN(t)||(this._alphaCutoff=t,this.setEnabled(bg.base.MaterialFlag.ALPHA_CUTOFF))},set shininessMask(t){this._shininessMask=t,this.setEnabled(bg.base.MaterialFlag.SHININESS_MASK)},set shininessMaskChannel(t){this._shininessMaskChannel=t,this.setEnabled(bg.base.MaterialFlag.SHININESS_MASK_CHANNEL)},set shininessMaskInvert(t){this._shininessMaskInvert=t,this.setEnabled(bg.base.MaterialFlag.SHININESS_MASK_INVERT)},set lightEmissionMask(t){this._lightEmissionMask=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK)},set lightEmissionMaskChannel(t){this._lightEmissionMaskChannel=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL)},set lightEmissionMaskInvert(t){this._lightEmissionMaskInvert=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT)},set reflectionMask(t){this._reflectionMask=t,this.setEnabled(bg.base.MaterialFlag.REFLECTION_MASK)},set reflectionMaskChannel(t){this._reflectionMaskChannel=t,this.setEnabled(bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL)},set reflectionMaskInvert(t){this._reflectionMaskInvert=t,this.setEnabled(bg.base.MaterialFlag.REFLECTION_MASK_INVERT)},set cullFace(t){this._cullFace=t,this.setEnabled(bg.base.MaterialFlag.CULL_FACE)},set roughness(t){this._roughness=t,this.setEnabled(bg.base.MaterialFlag.ROUGHNESS)},set roughnessMask(t){this._roughnessMask=t,this.setEnabled(bg.base.MaterialFlag.ROUGHNESS)},set roughnessMaskChannel(t){this._roughnessMaskChannel=t,this.setEnabled(bg.base.MaterialFlag.ROUGHNESS)},set roughnessMaskInvert(t){this._roughnessMaskInvert=t,this.setEnabled(bg.base.MaterialFlag.ROUGHNESS)},set unlit(t){this._unlit=t,this.setEnabled(bg.base.MaterialFlag.UNLIT)},clone:function(){var e=new t;return e.assign(this),e},assign:function(t){this._modifierFlags=t._modifierFlags,this._diffuse=t._diffuse,this._specular=t._specular,this._shininess=t._shininess,this._lightEmission=t._lightEmission,this._refractionAmount=t._refractionAmount,this._reflectionAmount=t._reflectionAmount,this._texture=t._texture,this._lightmap=t._lightmap,this._normalMap=t._normalMap,this._textureOffset=t._textureOffset,this._textureScale=t._textureScale,this._lightmapOffset=t._lightmapOffset,this._lightmapScale=t._lightmapScale,this._normalMapOffset=t._normalMapOffset,this._normalMapScale=t._normalMapScale,this._castShadows=t._castShadows,this._receiveShadows=t._receiveShadows,this._alphaCutoff=t._alphaCutoff,this._shininessMask=t._shininessMask,this._shininessMaskChannel=t._shininessMaskChannel,this._shininessMaskInvert=t._shininessMaskInvert,this._lightEmissionMask=t._lightEmissionMask,this._lightEmissionMaskChannel=t._lightEmissionMaskChannel,this._lightEmissionMaskInvert=t._lightEmissionMaskInvert,this._reflectionMask=t._reflectionMask,this._reflectionMaskChannel=t._reflectionMaskChannel,this._reflectionMaskInvert=t._reflectionMaskInvert,this._cullFace=t._cullFace,this._roughness=t._roughness,this._roughnessMask=t._roughnessMask,this._roughnessMaskChannel=t._roughnessMaskChannel,this._roughnessMaskInvert=t._roughnessMaskInvert,this._unlit=t._unlit},serialize:function(){var t={},e=this._modifierFlags;return e&bg.base.MaterialFlag.DIFFUSE&&(t.diffuseR=this._diffuse.r,t.diffuseG=this._diffuse.g,t.diffuseB=this._diffuse.b,t.diffuseA=this._diffuse.a),e&bg.base.MaterialFlag.SPECULAR&&(t.specularR=this._specular.r,t.specularG=this._specular.g,t.specularB=this._specular.b,t.specularA=this._specular.a),e&bg.base.MaterialFlag.SHININESS&&(t.shininess=this._shininess),e&bg.base.MaterialFlag.SHININESS_MASK&&(t.shininessMask=this._shininessMask),e&bg.base.MaterialFlag.SHININESS_MASK_CHANNEL&&(t.shininessMaskChannel=this._shininessMaskChannel),e&bg.base.MaterialFlag.SHININESS_MASK_INVERT&&(t.invertShininessMask=this._shininessMaskInvert),e&bg.base.MaterialFlag.LIGHT_EMISSION&&(t.lightEmission=this._lightEmission),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK&&(t.lightEmissionMask=this._lightEmissionMask),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL&&(t.lightEmissionMaskChannel=this._lightEmissionMaskChannel),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT&&(t.invertLightEmissionMask=this._lightEmissionMaskInvert),e&bg.base.MaterialFlag.REFRACTION_AMOUNT&&(t.reflectionAmount=this._refractionAmount),e&bg.base.MaterialFlag.REFLECTION_AMOUNT&&(t.refractionAmount=this._reflectionAmount),e&bg.base.MaterialFlag.TEXTURE&&(t.texture=this._texture),e&bg.base.MaterialFlag.LIGHT_MAP&&(t.lightmap=this._lightmap),e&bg.base.MaterialFlag.NORMAL_MAP&&(t.normalMap=this._normalMap),e&bg.base.MaterialFlag.TEXTURE_OFFSET&&(t.textureScaleX=this._textureScale.x,t.textureScaleY=this._textureScale.y),e&bg.base.MaterialFlag.TEXTURE_SCALE&&(t.textureScaleX=this._textureScale.x,t.textureScaleY=this._textureScale.y),e&bg.base.MaterialFlag.LIGHT_MAP_OFFSET&&(t.lightmapOffsetX=this._lightmapOffset.x,t.lightmapOffsetY=this._lightmapOffset.y),e&bg.base.MaterialFlag.LIGHT_MAP_SCALE&&(t.lightmapScaleX=this._lightmapScale.x,t.lightmapScaleY=this._lightmapScale.y),e&bg.base.MaterialFlag.NORMAL_MAP_OFFSET&&(t.normalMapOffsetX=this._normalMapOffset.x,t.normalMapOffsetY=this._normalMapOffset.y),e&bg.base.MaterialFlag.NORMAL_MAP_SCALE&&(t.normalMapScaleX=this._normalMapScale.x,t.normalMapScaleY=this._normalMapScale.y),e&bg.base.MaterialFlag.CAST_SHADOWS&&(t.castShadows=this._castShadows),e&bg.base.MaterialFlag.RECEIVE_SHADOWS&&(t.receiveShadows=this._receiveShadows),e&bg.base.MaterialFlag.ALPHA_CUTOFF&&(t.alphaCutoff=this._alphaCutoff),e&bg.base.MaterialFlag.REFLECTION_MASK&&(t.reflectionMask=this._reflectionMask),e&bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL&&(t.reflectionMaskChannel=this._reflectionMaskChannel),e&bg.base.MaterialFlag.REFLECTION_MASK_INVERT&&(t.invertReflectionMask=this._reflectionMaskInvert),e&bg.base.MaterialFlag.CULL_FACE&&(t.cullFace=this._cullFace),e&bg.base.MaterialFlag.ROUGHNESS&&(t.roughness=this._roughness,t.roughnessMask=this._roughnessMask,t.roughnessMaskChannel=this._roughnessMaskChannel,t.invertRoughnessMask=this._roughnessMaskInvert),e&bg.base.MaterialFlag.UNLIT&&(t.unlit=this._unlit),t}},{})}();function n(t){return bg.isElectronApp?/^\//i.test(t):/^(f|ht)tps?:\/\//i.test(t)}function i(t,e,i){var r,a,s=null;return e&&(n(e)||("/"!=i.slice(-1)&&(i+="/"),e=""+i+e),(s=bg.base.TextureCache.Get(t).find(e))||((s=new bg.base.Texture(t)).create(),s.fileName=e,bg.base.TextureCache.Get(t).register(e,s),r=e,a=s,bg.utils.Resource.Load(r).then(function(t){a.bind(),s.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),s.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter(),a.fileName=r,a.setImage(t)}))),s}function r(t){return t?t.fileName:""}function a(t){return new bg.Vector4(0==t?1:0,1==t?1:0,2==t?1:0,3==t?1:0)}function s(t){if(!t)return null;switch(t.length){case 2:return new bg.Vector2(t[0],t[1]);case 3:return new bg.Vector3(t[0],t[1],t[2]);case 4:return new bg.Vector4(t[0],t[1],t[2],t[3])}return null}bg.base.MaterialModifier=e,bg.base.imageTools={},bg.base.imageTools.isAbsolutePath=n,bg.base.imageTools.mergePath=function(t,e){return"/"!=t.slice(-1)?t+"/"+e:t+e},bg.base.imageTools.getTexture=i,bg.base.imageTools.getPath=r;var o={};function u(t,e,n,i,r){return new Promise(function(a){if(n)if(/data\:image\/[a-z]+\;base64\,/.test(n)){var s=bg.utils.md5(n);o[s]?i[r]=o[s]:(i[r]=bg.base.Texture.FromBase64Image(t,n),o[s]=i[r]),a(i[r])}else{var u=e+n;bg.base.Loader.Load(t,u).then(function(t){i[r]=t,a(t)})}else a()})}bg.base.imageTools.readTexture=u;var h=function(){function n(){this._diffuse=bg.Color.White(),this._specular=bg.Color.White(),this._shininess=0,this._lightEmission=0,this._refractionAmount=0,this._reflectionAmount=0,this._texture=null,this._lightmap=null,this._normalMap=null,this._textureOffset=new bg.Vector2,this._textureScale=new bg.Vector2(1),this._lightmapOffset=new bg.Vector2,this._lightmapScale=new bg.Vector2(1),this._normalMapOffset=new bg.Vector2,this._normalMapScale=new bg.Vector2(1),this._castShadows=!0,this._receiveShadows=!0,this._alphaCutoff=.5,this._shininessMask=null,this._shininessMaskChannel=0,this._shininessMaskInvert=!1,this._lightEmissionMask=null,this._lightEmissionMaskChannel=0,this._lightEmissionMaskInvert=!1,this._reflectionMask=null,this._reflectionMaskChannel=0,this._reflectionMaskInvert=!1,this._cullFace=!0,this._roughness=0,this._roughnessMask=null,this._roughnessMaskChannel=0,this._roughnessMaskInvert=!1,this._unlit=!1,this._selectMode=!1}return $traceurRuntime.createClass(n,{clone:function(){var t=new n;return t.assign(this),t},assign:function(t){this._diffuse=new bg.Color(t.diffuse),this._specular=new bg.Color(t.specular),this._shininess=t.shininess,this._lightEmission=t.lightEmission,this._refractionAmount=t.refractionAmount,this._reflectionAmount=t.reflectionAmount,this._texture=t.texture,this._lightmap=t.lightmap,this._normalMap=t.normalMap,this._textureOffset=new bg.Vector2(t.textureOffset),this._textureScale=new bg.Vector2(t.textureScale),this._lightmapOffset=new bg.Vector2(t.ligthmapOffset),this._lightmapScale=new bg.Vector2(t.lightmapScale),this._normalMapOffset=new bg.Vector2(t.normalMapOffset),this._normalMapScale=new bg.Vector2(t.normalMapScale),this._castShadows=t.castShadows,this._receiveShadows=t.receiveShadows,this._alphaCutoff=t.alphaCutoff,this._shininessMask=t.shininessMask,this._shininessMaskChannel=t.shininessMaskChannel,this._shininessMaskInvert=t.shininessMaskInvert,this._lightEmissionMask=t.lightEmissionMask,this._lightEmissionMaskChannel=t.lightEmissionMaskChannel,this._lightEmissionMaskInvert=t.lightEmissionMaskInvert,this._reflectionMask=t.reflectionMask,this._reflectionMaskChannel=t.reflectionMaskChannel,this._reflectionMaskInvert=t.reflectionMaskInvert,this._cullFace=t.cullFace,this._roughness=t.roughness,this._roughnessMask=t.roughnessMask,this._roughnessMaskChannel=t.roughnessMaskChannel,this._roughnessMaskInvert=t.roughnessMaskInvert,this._unlit=t.unlit},get isTransparent(){return this._diffuse.a<1},get diffuse(){return this._diffuse},get specular(){return this._specular},get shininess(){return this._shininess},get lightEmission(){return this._lightEmission},get refractionAmount(){return this._refractionAmount},get reflectionAmount(){return this._reflectionAmount},get texture(){return this._texture},get lightmap(){return this._lightmap},get normalMap(){return this._normalMap},get textureOffset(){return this._textureOffset},get textureScale(){return this._textureScale},get lightmapOffset(){return this._lightmapOffset},get lightmapScale(){return this._lightmapScale},get normalMapOffset(){return this._normalMapOffset},get normalMapScale(){return this._normalMapScale},get castShadows(){return this._castShadows},get receiveShadows(){return this._receiveShadows},get alphaCutoff(){return this._alphaCutoff},get shininessMask(){return this._shininessMask},get shininessMaskChannel(){return this._shininessMaskChannel},get shininessMaskInvert(){return this._shininessMaskInvert},get lightEmissionMask(){return this._lightEmissionMask},get lightEmissionMaskChannel(){return this._lightEmissionMaskChannel},get lightEmissionMaskInvert(){return this._lightEmissionMaskInvert},get reflectionMask(){return this._reflectionMask},get reflectionMaskChannel(){return this._reflectionMaskChannel},get reflectionMaskInvert(){return this._reflectionMaskInvert},get cullFace(){return this._cullFace},get roughness(){return this._roughness},get roughnessMask(){return this._roughnessMask},get roughnessMaskChannel(){return this._roughnessMaskChannel},get roughnessMaskInvert(){return this._roughnessMaskInvert},get unlit(){return this._unlit},set diffuse(t){this._diffuse=t},set specular(t){this._specular=t},set shininess(t){isNaN(t)||(this._shininess=t)},set lightEmission(t){isNaN(t)||(this._lightEmission=t)},set refractionAmount(t){this._refractionAmount=t},set reflectionAmount(t){this._reflectionAmount=t},set texture(t){this._texture=t},set lightmap(t){this._lightmap=t},set normalMap(t){this._normalMap=t},set textureOffset(t){this._textureOffset=t},set textureScale(t){this._textureScale=t},set lightmapOffset(t){this._lightmapOffset=t},set lightmapScale(t){this._lightmapScale=t},set normalMapOffset(t){this._normalMapOffset=t},set normalMapScale(t){this._normalMapScale=t},set castShadows(t){this._castShadows=t},set receiveShadows(t){this._receiveShadows=t},set alphaCutoff(t){isNaN(t)||(this._alphaCutoff=t)},set shininessMask(t){this._shininessMask=t},set shininessMaskChannel(t){this._shininessMaskChannel=t},set shininessMaskInvert(t){this._shininessMaskInvert=t},set lightEmissionMask(t){this._lightEmissionMask=t},set lightEmissionMaskChannel(t){this._lightEmissionMaskChannel=t},set lightEmissionMaskInvert(t){this._lightEmissionMaskInvert=t},set reflectionMask(t){this._reflectionMask=t},set reflectionMaskChannel(t){this._reflectionMaskChannel=t},set reflectionMaskInvert(t){this._reflectionMaskInvert=t},set cullFace(t){this._cullFace=t},set roughness(t){this._roughness=t},set roughnessMask(t){this._roughnessMask=t},set roughnessMaskChannel(t){this._roughnessMaskChannel=t},set roughnessMaskInvert(t){this._roughnessMaskInvert=t},get unlit(){return this._unlit},set unlit(t){this._unlit=t},get selectMode(){return this._selectMode},set selectMode(t){this._selectMode=t},get lightEmissionMaskChannelVector(){return a(this.lightEmissionMaskChannel)},get shininessMaskChannelVector(){return a(this.shininessMaskChannel)},get reflectionMaskChannelVector(){return a(this.reflectionMaskChannel)},get roughnessMaskChannelVector(){return a(this.roughnessMaskChannel)},getExternalResources:function(){var t=void 0!==arguments[0]?arguments[0]:[];function e(e){e&&e.fileName&&""!=e.fileName&&-1==t.indexOf(e.fileName)&&t.push(e.fileName)}return e(this.texture),e(this.lightmap),e(this.normalMap),e(this.shininessMask),e(this.lightEmissionMask),e(this.reflectionMask),e(this.roughnessMask),t},copyMaterialSettings:function(t,e){e&bg.base.MaterialFlag.DIFFUSE&&(t.diffuse=this.diffuse),e&bg.base.MaterialFlag.SPECULAR&&(t.specular=this.specular),e&bg.base.MaterialFlag.SHININESS&&(t.shininess=this.shininess),e&bg.base.MaterialFlag.LIGHT_EMISSION&&(t.lightEmission=this.lightEmission),e&bg.base.MaterialFlag.REFRACTION_AMOUNT&&(t.refractionAmount=this.refractionAmount),e&bg.base.MaterialFlag.REFLECTION_AMOUNT&&(t.reflectionAmount=this.reflectionAmount),e&bg.base.MaterialFlag.TEXTURE&&(t.texture=this.texture),e&bg.base.MaterialFlag.LIGHT_MAP&&(t.lightmap=this.lightmap),e&bg.base.MaterialFlag.NORMAL_MAP&&(t.normalMap=this.normalMap),e&bg.base.MaterialFlag.TEXTURE_OFFSET&&(t.textureOffset=this.textureOffset),e&bg.base.MaterialFlag.TEXTURE_SCALE&&(t.textureScale=this.textureScale),e&bg.base.MaterialFlag.LIGHT_MAP_OFFSET&&(t.lightmapOffset=this.lightmapOffset),e&bg.base.MaterialFlag.LIGHT_MAP_SCALE&&(t.lightmapScale=this.lightmapScale),e&bg.base.MaterialFlag.NORMAL_MAP_OFFSET&&(t.normalMapOffset=this.normalMapOffset),e&bg.base.MaterialFlag.NORMAL_MAP_SCALE&&(t.normalMapScale=this.normalMapScale),e&bg.base.MaterialFlag.CAST_SHADOWS&&(t.castShadows=this.castShadows),e&bg.base.MaterialFlag.RECEIVE_SHADOWS&&(t.receiveShadows=this.receiveShadows),e&bg.base.MaterialFlag.ALPHA_CUTOFF&&(t.alphaCutoff=this.alphaCutoff),e&bg.base.MaterialFlag.SHININESS_MASK&&(t.shininessMask=this.shininessMask),e&bg.base.MaterialFlag.SHININESS_MASK_CHANNEL&&(t.shininessMaskChannel=this.shininessMaskChannel),e&bg.base.MaterialFlag.SHININESS_MASK_INVERT&&(t.shininessMaskInvert=this.shininessMaskInvert),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK&&(t.lightEmissionMask=this.lightEmissionMask),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL&&(t.lightEmissionMaskChannel=this.lightEmissionMaskChannel),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT&&(t.lightEmissionMaskInvert=this.lightEmissionMaskInvert),e&bg.base.MaterialFlag.REFLECTION_MASK&&(t.reflectionMask=this.reflectionMask),e&bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL&&(t.reflectionMaskChannel=this.reflectionMaskChannel),e&bg.base.MaterialFlag.REFLECTION_MASK_INVERT&&(t.reflectionMaskInvert=this.reflectionMaskInvert),e&bg.base.MaterialFlag.CULL_FACE&&(t.cullFace=this.cullFace),e&bg.base.MaterialFlag.ROUGHNESS&&(t.reflectionAmount=this.reflectionAmount,t.reflectionMask=this.reflectionMask,t.reflectionMaskChannel=this.reflectionMaskChannel,t.reflectionMaskInvert=this.reflectionMaskInvert),e&bg.base.MaterialFlag.UNLIT&&(t.unlit=this.unlit)},applyModifier:function(t,e,n){e.isEnabled(bg.base.MaterialFlag.DIFFUSE)&&(this.diffuse=e.diffuse),e.isEnabled(bg.base.MaterialFlag.SPECULAR)&&(this.specular=e.specular),e.isEnabled(bg.base.MaterialFlag.SHININESS)&&(this.shininess=e.shininess),e.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION)&&(this.lightEmission=e.lightEmission),e.isEnabled(bg.base.MaterialFlag.REFRACTION_AMOUNT)&&(this.refractionAmount=e.refractionAmount),e.isEnabled(bg.base.MaterialFlag.REFLECTION_AMOUNT)&&(this.reflectionAmount=e.reflectionAmount),e.isEnabled(bg.base.MaterialFlag.TEXTURE)&&(this.texture=i(t,e.texture,n)),e.isEnabled(bg.base.MaterialFlag.LIGHT_MAP)&&(this.lightmap=i(t,e.lightmap,n)),e.isEnabled(bg.base.MaterialFlag.NORMAL_MAP)&&(this.normalMap=i(t,e.normalMap,n)),e.isEnabled(bg.base.MaterialFlag.TEXTURE_OFFSET)&&(this.textureOffset=e.textureOffset),e.isEnabled(bg.base.MaterialFlag.TEXTURE_SCALE)&&(this.textureScale=e.textureScale),e.isEnabled(bg.base.MaterialFlag.LIGHT_MAP_OFFSET)&&(this.lightmapOffset=e.lightmapOffset),e.isEnabled(bg.base.MaterialFlag.LIGHT_MAP_SCALE)&&(this.lightmapScale=e.lightmapScale),e.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_OFFSET)&&(this.normalMapOffset=e.normalMapOffset),e.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_SCALE)&&(this.normalMapScale=e.normalMapScale),e.isEnabled(bg.base.MaterialFlag.CAST_SHADOWS)&&(this.castShadows=e.castShadows),e.isEnabled(bg.base.MaterialFlag.RECEIVE_SHADOWS)&&(this.receiveShadows=e.receiveShadows),e.isEnabled(bg.base.MaterialFlag.ALPHA_CUTOFF)&&(this.alphaCutoff=e.alphaCutoff),e.isEnabled(bg.base.MaterialFlag.SHININESS_MASK)&&(this.shininessMask=i(t,e.shininessMask,n)),e.isEnabled(bg.base.MaterialFlag.SHININESS_MASK_CHANNEL)&&(this.shininessMaskChannel=e.shininessMaskChannel),e.isEnabled(bg.base.MaterialFlag.SHININESS_MASK_INVERT)&&(this.shininessMaskInvert=e.shininessMaskInvert),e.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK)&&(this.lightEmissionMask=i(t,e.lightEmissionMask,n)),e.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL)&&(this.lightEmissionMaskChannel=e.lightEmissionMaskChannel),e.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT)&&(this.lightEmissionMaskInvert=e.lightEmissionMaskInvert),e.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK)&&(this.reflectionMask=i(t,e.reflectionMask,n)),e.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL)&&(this.reflectionMaskChannel=e.reflectionMaskChannel),e.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK_INVERT)&&(this.reflectionMaskInvert=e.reflectionMaskInvert),e.isEnabled(bg.base.MaterialFlag.CULL_FACE)&&(this.cullFace=e.cullFace),e.isEnabled(bg.base.MaterialFlag.ROUGHNESS)&&(this.roughness=e.roughness,this.roughnessMask=i(t,e.roughnessMask,n),this.roughnessMaskChannel=e.roughnessMaskChannel,this.roughnessMaskInvert=e.roughnessMaskInvert),e.isEnabled(bg.base.MaterialFlag.UNLIT)&&(this.unlit=e.unlit)},getModifierWithMask:function(t){var n=new e;return n.modifierFlags=t,n.isEnabled(bg.base.MaterialFlag.DIFFUSE)&&(n.diffuse=this.diffuse),n.isEnabled(bg.base.MaterialFlag.SPECULAR)&&(n.specular=this.specular),n.isEnabled(bg.base.MaterialFlag.SHININESS)&&(n.shininess=this.shininess),n.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION)&&(n.lightEmission=this.lightEmission),n.isEnabled(bg.base.MaterialFlag.REFRACTION_AMOUNT)&&(n.refractionAmount=this.refractionAmount),n.isEnabled(bg.base.MaterialFlag.REFLECTION_AMOUNT)&&(n.reflectionAmount=this.reflectionAmount),n.isEnabled(bg.base.MaterialFlag.TEXTURE)&&(n.texture=r(this.texture)),n.isEnabled(bg.base.MaterialFlag.LIGHT_MAP)&&(n.lightmap=r(this.lightmap)),n.isEnabled(bg.base.MaterialFlag.NORMAL_MAP)&&(n.normalMap=r(this.normalMap)),n.isEnabled(bg.base.MaterialFlag.TEXTURE_OFFSET)&&(n.textureOffset=this.textureOffset),n.isEnabled(bg.base.MaterialFlag.TEXTURE_SCALE)&&(n.textureScale=this.textureScale),n.isEnabled(bg.base.MaterialFlag.LIGHT_MAP_OFFSET)&&(n.lightmapOffset=this.lightmapOffset),n.isEnabled(bg.base.MaterialFlag.LIGHT_MAP_SCALE)&&(n.lightmapScale=this.lightmapScale),n.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_OFFSET)&&(n.normalMapOffset=this.normalMapOffset),n.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_SCALE)&&(n.normalMapScale=this.normalMapScale),n.isEnabled(bg.base.MaterialFlag.CAST_SHADOWS)&&(n.castShadows=this.castShadows),n.isEnabled(bg.base.MaterialFlag.RECEIVE_SHADOWS)&&(n.receiveShadows=this.receiveShadows),n.isEnabled(bg.base.MaterialFlag.ALPHA_CUTOFF)&&(n.alphaCutoff=this.alphaCutoff),n.isEnabled(bg.base.MaterialFlag.SHININESS_MASK)&&(n.shininessMask=r(this.shininessMask)),n.isEnabled(bg.base.MaterialFlag.SHININESS_MASK_CHANNEL)&&(n.shininessMaskChannel=this.shininessMaskChannel),n.isEnabled(bg.base.MaterialFlag.SHININESS_MASK_INVERT)&&(n.shininessMaskInvert=this.shininessMaskInvert),n.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK)&&(n.lightEmissionMask=r(this.lightEmissionMask)),n.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL)&&(n.lightEmissionMaskChannel=this.lightEmissionMaskChannel),n.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT)&&(n.lightEmissionMaskInver=this.lightEmissionMaskInver),n.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK)&&(n.reflectionMask=r(this.reflectionMask)),n.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL)&&(n.reflectionMaskChannel=this.reflectionMaskChannel),n.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK_INVERT)&&(n.reflectionMaskInvert=this.reflectionMaskInvert),n.isEnabled(bg.base.MaterialFlag.CULL_FACE)&&(n.cullFace=this.cullFace),n.isEnabled(bg.base.MaterialFlag.ROUGHNESS)&&(n.roughness=this.roughness,n.roughnessMask=r(this.roughnessMask),n.roughnessMaskChannel=this.roughnessMaskChannel,n.roughnessMaskInvert=this.roughnessMaskInvert),n.isEnabled(bg.base.MaterialFlag.UNLIT)&&(n.unlit=this.unlit),n}},{FromMaterialDefinition:function(t,e){var i=void 0!==arguments[2]?arguments[2]:"";return new Promise(function(r,a){var o=new n;o.diffuse=s(e.diffuse)||bg.Color.White(),o.specular=s(e.specular)||bg.Color.White(),o.shininess=e.shininess||0,o.shininessMaskChannel=e.shininessMaskChannel||0,o.shininessMaskInvert=e.shininessMaskInvert||!1,o.lightEmission=e.lightEmission||0,o.lightEmissionMaskChannel=e.lightEmissionMaskChannel||0,o.lightEmissionMaskInvert=e.lightEmissionMaskInvert||!1,o.refractionAmount=e.refractionAmount||0,o.reflectionAmount=e.reflectionAmount||0,o.reflectionMaskChannel=e.reflectionMaskChannel||0,o.reflectionMaskInvert=e.reflectionMaskInvert||!1,o.textureOffset=s(e.textureOffset)||new bg.Vector2(0,0),o.textureScale=s(e.textureScale)||new bg.Vector2(1,1),o.normalMapOffset=s(e.normalMapOffset)||new bg.Vector2(0,0),o.normalMapScale=s(e.normalMapScale)||new bg.Vector2(1,1),o.cullFace=void 0===e.cullFace||e.cullFace,o.castShadows=void 0===e.castShadows||e.castShadows,o.receiveShadows=void 0===e.receiveShadows||e.receiveShadows,o.alphaCutoff=void 0===e.alphaCutoff?.5:e.alphaCutoff,o.name=e.name,o.description=e.description,o.roughness=e.roughness||0,o.roughnessMaskChannel=e.roughnessMaskChannel||0,o.roughnessMaskInvert=e.roughnessMaskInvert||!1,o.unlit=e.unlit||!1;var h=[];h.push(u(t,i,e.shininessMask,o,"shininessMask")),h.push(u(t,i,e.lightEmissionMask,o,"lightEmissionMask")),h.push(u(t,i,e.reflectionMask,o,"reflectionMask")),h.push(u(t,i,e.texture,o,"texture")),h.push(u(t,i,e.normalMap,o,"normalMap")),h.push(u(t,i,e.roughnessMask,o,"roughnessMask")),Promise.all(h).then(function(){r(o)})})},GetMaterialWithJson:function(e,i,r){var a=new n;function s(t,e){return e?t?t+e:e:null}return void 0===i.cullFace&&(i.cullFace=!0),a.diffuse.set(i.diffuseR,i.diffuseG,i.diffuseB,i.diffuseA),a.specular.set(i.specularR,i.specularG,i.specularB,i.specularA),a.shininess=i.shininess,a.lightEmission=i.lightEmission,a.refractionAmount=i.refractionAmount,a.reflectionAmount=i.reflectionAmount,a.textureOffset.set(i.textureOffsetX,i.textureOffsetY),a.textureScale.set(i.textureScaleX,i.textureScaleY),a.lightmapOffset.set(i.lightmapOffsetX,i.lightmapOffsetY),a.lightmapScale.set(i.lightmapScaleX,i.lightmapScaleY),a.normalMapOffset.set(i.normalMapOffsetX,i.normalMapOffsetY),a.normalMapScale.set(i.normalMapScaleX,i.normalMapScaleY),a.alphaCutoff=i.alphaCutoff,a.castShadows=i.castShadows,a.receiveShadows=i.receiveShadows,a.shininessMaskChannel=i.shininessMaskChannel,a.shininessMaskInvert=i.invertShininessMask,a.lightEmissionMaskChannel=i.lightEmissionMaskChannel,a.lightEmissionMaskInvert=i.invertLightEmissionMask,a.reflectionMaskChannel=i.reflectionMaskChannel,a.reflectionMaskInvert=i.invertReflectionMask,a.roughness=i.roughness,a.roughnessMaskChannel=i.roughnessMaskChannel,a.roughnessMaskInvert=i.invertRoughnessMask,a.cullFace=i.cullFace,a.unlit=i.unlit,r&&"/"!=r[r.length-1]&&(r+="/"),i.texture=s(r,i.texture),i.lightmap=s(r,i.lightmap),i.normalMap=s(r,i.normalMap),i.shininessMask=s(r,i.shininessMask),i.lightEmissionMask=s(r,i.lightEmissionMask),i.reflectionMask=s(r,i.reflectionMask),i.roughnessMask=s(r,i.roughnessMask),new Promise(function(n,r){var s=[];i.texture&&s.push(i.texture),i.lightmap&&-1==s.indexOf(i.lightmap)&&s.push(i.lightmap),i.normalMap&&-1==s.indexOf(i.normalMap)&&s.push(i.normalMap),i.shininessMask&&-1==s.indexOf(i.shininessMask)&&s.push(i.shininessMask),i.lightEmissionMask&&-1==s.indexOf(i.lightEmissionMask)&&s.push(i.lightEmissionMask),i.reflectionMask&&-1==s.indexOf(i.reflectionMask)&&s.push(i.reflectionMask),i.roughnessMask&&-1==s.indexOf(i.roughnessMask)&&s.push(i.roughnessMask),bg.utils.Resource.Load(s).then(function(r){a.texture=t(e,r[i.texture],i.texture),a.lightmap=t(e,r[i.lightmap],i.lightmap),a.normalMap=t(e,r[i.normalMap],i.normalMap),a.shininessMask=t(e,r[i.shininessMask],i.shininessMask),a.lightEmissionMask=t(e,r[i.lightEmissionMask],i.lightEmissionMask),a.reflectionMask=t(e,r[i.reflectionMask],i.reflectionMask),a.roughnessMask=t(e,r[i.roughnessMask],i.roughnessMask),n(a)})})}})}();bg.base.Material=h}(),function(){var t=function(){return $traceurRuntime.createClass(function(){this._matrix=bg.Matrix4.Identity(),this._stack=[],this._changed=!0},{get changed(){return this._changed},set changed(t){this._changed=t},push:function(){this._stack.push(new bg.Matrix4(this._matrix))},set:function(t){return this._matrix.assign(t),this._changed=!0,this},mult:function(t){return this._matrix.mult(t),this._changed=!0,this},identity:function(){return this._matrix.identity(),this._changed=!0,this},translate:function(t,e,n){return this._matrix.translate(t,e,n),this._changed=!0,this},rotate:function(t,e,n,i){return this._matrix.rotate(t,e,n,i),this._changed=!0,this},scale:function(t,e,n){return this._matrix.scale(t,e,n),this._changed=!0,this},setScale:function(t,e,n){return this._matrix.setScale(t,e,n),this._changed=!0,this},perspective:function(t,e,n,i){return this._matrix.identity().perspective(t,e,n,i),this._changed=!0,this},frustum:function(t,e,n,i,r,a){return this._matrix.identity().frustum(t,e,n,i,r,a),this._changed=!0,this},ortho:function(t,e,n,i,r,a){return this._matrix.identity().ortho(t,e,n,i,r,a),this._changed=!0,this},invert:function(){return this._matrix.invert(),this._changed=!0,this},get matrix(){return this._changed=!0,this._matrix},get matrixConst(){return this._matrix},pop:function(){return this._stack.length&&(this._matrix.assign(this._stack.pop()),this._changed=!0),this._matrix}},{})}();bg.base.MatrixStack=t;var e=null,n=function(){function n(){this._modelMatrixStack=new t,this._viewMatrixStack=new t,this._projectionMatrixStack=new t,this._modelViewMatrix=bg.Matrix4.Identity(),this._normalMatrix=bg.Matrix4.Identity(),this._cameraDistanceScale=null}return $traceurRuntime.createClass(n,{get modelMatrixStack(){return this._modelMatrixStack},get viewMatrixStack(){return this._viewMatrixStack},get projectionMatrixStack(){return this._projectionMatrixStack},get modelViewMatrix(){return(!this._modelViewMatrix||this._modelMatrixStack.changed||this._viewMatrixStack.changed)&&(this._modelViewMatrix=new bg.Matrix4(this._viewMatrixStack._matrix),this._modelViewMatrix.mult(this._modelMatrixStack._matrix),this._modelMatrixStack.changed=!1,this._viewMatrixStack.changed=!1),this._modelViewMatrix},get normalMatrix(){return(!this._normalMatrix||this._modelMatrixStack.changed||this._viewMatrixStack.changed)&&(this._normalMatrix=new bg.Matrix4(this.modelViewMatrix),this._normalMatrix.invert(),this._normalMatrix.traspose(),this._modelMatrixStack.changed=!1),this._normalMatrix},get viewMatrixInvert(){return this._viewMatrixInvert&&!this._viewMatrixStack.changed||(this._viewMatrixInvert=new bg.Matrix4(this.viewMatrixStack.matrixConst),this._viewMatrixInvert.invert()),this._viewMatrixInvert},get cameraDistanceScale(){return this._cameraDistanceScale=this._viewMatrixStack.matrix.position.magnitude()}},{Current:function(){return e||(e=new n),e},SetCurrent:function(t){return e=t}})}();bg.base.MatrixState=n}(),function(){function t(t){var e=void 0!==arguments[1]?arguments[1]:bg.Color.Black();return Array.isArray(diffuse)&&3==diffuse.length?new bg.Color(t[0],t[1],t[2],1):Array.isArray(diffuse)&&diffuse.length>=4?new bg.Color(t[0],t[1],t[2],t[3]):"string"==typeof diffuse&&""!=diffuse?diffuse:e}function e(t){var e=void 0!==arguments[1]?arguments[1]:bg.Vector2();return Array.isArray(t)&&2==t.length?new bg.Vector2(t):Array.isArray(t)&&3==t.length?new bg.Vector3(t):Array.isArray(t)&&4==t.length?new bg.Vector4(t):e}function n(t){var e=void 0!==arguments[1]?arguments[1]:0;return void 0===t||isNaN(Number(t))||""===t?void 0!==t&&"string"==typeof t&&""!=t?t:e:Number(t)}function i(t){var e=void 0!==arguments[1]?arguments[1]:0;return void 0===t||isNaN(Number(t))||""===t?e:Number(t)}function r(t){var e=void 0===arguments[1]||arguments[1];return"string"==typeof t&&""!==t?/true/i.test(t)||/yes/i.test(t)||/1/.test(t):void 0!==t?t:e}function e(t){var e=void 0!==arguments[1]?arguments[1]:[0,0];return t instanceof bg.Vector2||t instanceof bg.Vector3||t instanceof bg.Vector4?t.toArray():Array.isArray(t)?t:e}function t(t){var e=void 0!==arguments[1]?arguments[1]:[0,0,0,1];return t instanceof bg.Color?t.toArray():Array.isArray(t)?t:"string"==typeof t&&""!=t?t:e}function n(t){return void 0===t||isNaN(Number(t))?"string"==typeof t&&""!=t?t:0:Number(t)}bg.base.PBRMaterialFlag={DIFFUSE:1,METALLIC:2,ROUGHNESS:4,FRESNEL:8,AMBIENT_OCCLUSSION:16,LIGHT_EMISSION:32,NORMAL:64,LIGHT_MAP:128,HEIGHT:256,SHADOWS:512,CULL_FACE:1024,UNLIT:2048};var a=function(){function a(a){if(this._modifierFlags=0,this._diffuse=bg.Color.White(),this._isTransparent=!1,this._alphaCutoff=.5,this._diffuseScale=new bg.Vector2(1),this._metallic=0,this._metallicChannel=0,this._metallicScale=new bg.Vector2(1),this._roughness=1,this._roughnessChannel=0,this._roughnessScale=new bg.Vector2(1),this._fresnel=bg.Color.White(),this._fresnelScale=new bg.Vector2(1),this._ambientOcclussion=1,this._ambientOcclussionChannel=0,this._lightEmission=0,this._lightEmissionChannel=0,this._lightEmissionScale=new bg.Vector2(1),this._height=0,this._heightChannel=0,this._heightIntensity=1,this._heightScale=new bg.Vector2(1),this._normal=new bg.Color(.5,.5,1,1),this._normalScale=new bg.Vector2(1),this._castShadows=!0,this._cullFace=!0,this._unlit=!1,a&&"pbr"!=a.type&&"PBRMaterial"!=a.class)console.warn("non-pbr data used in pbr material modifier."),a.texture?this._diffuse=t(a.texture,this._diffuse):this._diffuse=new bg.Color(void 0!==a.diffuseR?a.diffuseR:1,void 0!==a.diffuseG?a.diffuseG:1,void 0!==a.diffuseB?a.diffuseB:1,void 0!==a.diffuseA?a.diffuseA:1),this._diffuseScale=new bg.Vector2(void 0!==a.diffuseScaleX?a.diffuseScaleX:this._diffuseScale.x,void 0!==a.diffuseScaleY?a.diffuseScaleY:this._diffuseScale.y),this._diffuseOffset=new bg.Vector2(void 0!==a.diffuseOffsetX?a.diffuseOffsetX:this._diffuseOffset.x,void 0!==a.diffuseOffsetY?a.diffuseOffsetY:this._diffuseOffset.y),a.normalMap&&(this._normal=t(a.normalMap,this._normal)),this._normalScale=new bg.Vector2(void 0!==a.normalMapScaleX?a.normalMapScaleX:this._normalScale.x,void 0!==a.normalMapScaleY?a.normalMapScaleY:this._normalScale.y),this._normalOffset=new bg.Vector2(void 0!==a.normalMapOffsetX?a.normalMapOffsetX:this._normalOffset.x,void 0!==a.normalMapOffsetY?a.normalMapOffsetY:this._normalOffset.y),(a.diffuseR||a.diffuseG||a.diffuseB||a.diffuseA||a.texture)&&this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE),(a.diffuseScaleX||a.diffuseScaleY)&&this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE_SCALE),(a.diffuseOffsetX||a.diffuseOffsetY)&&this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE_OFFSET),a.normalMap&&this.setEnabled(bg.base.PBRMaterialFlag.NORMAL),(a.normalMapScaleX||a.normalMapScaleY)&&this.setEnabled(bg.base.PBRMaterialFlag.NORMAL_SCALE),(a.normalMapOffsetX||a.normalMapOffsetY)&&this.setEnabled(bg.base.PBRMaterialFlag.NORMAL_OFFSET);else if(a){var s=a.diffuseScale||this._diffuseScale;if(this._diffuse=t(a.diffuse,this._diffuse),this._isTransparent=r(a.isTransparent,this._isTransparent),this._alphaCutoff=i(a.alphaCutoff,this._alphaCutoff),this._diffuseScale=new bg.Vector2(e(a.diffuseScale,this._diffuseScale)),this._metallic=n(a.metallic,this._metallic),this._metallicChannel=i(a.metallicChannel,this._metallicChannel),this._metallicScale=new bg.Vector2(e(a.metallicScale||s,this._metallicScale)),this._roughness=n(a.roughness,this._roughness),this._roughnessChannel=i(a.roughnessChannel,this._roughnessChannel),this._roughnessScale=new bg.Vector2(e(a.roughnessScale||s,this._roughnessScale)),this._fresnel=t(a.fresnel,this._fresnel),this._fresnelScale=new bg.Vector2(e(a.fresnelScale||s,this._fresnelScale)),this._ambientOcclussion=n(a.ambientOcclussion,this._ambientOcclussion),this._ambientOcclussionChannel=i(a.ambientOcclussionChannel,this._ambientOcclussionChannel),this._lightEmission=n(a.lightEmission,this._lightEmission),this._lightEmissionChannel=i(a.lightEmissionChannel,this._lightEmissionChannel),this._lightEmissionScale=new bg.Vector2(e(a.lightEmissionScale||s,this._lightEmissionScale)),this._height=n(a.height,this._height),this._heightChannel=i(a.heightChannel,this._heightChannel),this._heightIntensity=i(a.heightIntensity,this._heightIntensity),this._heightScale=new bg.Vector2(e(a.heightScale||s,this._heightScale)),this._normal=t(a.normal,this._normal),this._normalScale=new bg.Vector2(e(a.normalScale,this._normalScale)),this._castShadows=r(a.castShadows,this._castShadows),this._cullFace=r(a.cullFace,this._cullFace),this._unlit=r(a.unlit,this._unlit),Array.isArray(this._diffuse)&&(this._diffuse=new bg.Color(this._diffuse)),Array.isArray(this._fresnel)&&(this._fresnel=new bg.Color(this._fresnel)),Array.isArray(this.normal)&&this.normal.length>=3){var o=this.normal;this._normal=new bg.Color(o[0],o[1],o[2],o.length>3?o[3]:1)}(a.diffuse||a.isTransparent||a.alphaCutoff||a.diffuseScale)&&this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE),void 0===a.metallic&&void 0===a.metallicScale||this.setEnabled(bg.base.PBRMaterialFlag.METALLIC),void 0===a.roughness&&void 0===a.roughnessScale||this.setEnabled(bg.base.PBRMaterialFlag.ROUGHNESS),void 0===a.fresnel&&void 0===a.fresnelScale||this.setEnabled(bg.base.PBRMaterialFlag.FRESNEL),void 0!==a.ambientOcclussion&&this.setEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION),void 0===a.lightEmission&&void 0===a.lightEmissionScale||this.setEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION),void 0===a.height&&void 0===a.heightIntensity&&void 0===a.heightScale||this.setEnabled(bg.base.PBRMaterialFlag.HEIGHT),(a.normal||a.normalScale)&&this.setEnabled(bg.base.PBRMaterialFlag.NORMAL),void 0!==a.castShadows&&this.setEnabled(bg.base.PBRMaterialFlag.SHADOWS),void 0!==a.cullFace&&this.setEnabled(bg.base.PBRMaterialFlag.CULL_FACE),void 0!==a.unlit&&this.setEnabled(bg.base.PBRMaterialFlag.UNLIT)}}return $traceurRuntime.createClass(a,{get modifierFlags(){return this._modifierFlags},set modifierFlags(t){this._modifierFlags=t},get modifierMask(){return this._modifierFlags},set modifierMask(t){this._modifierFlags=t},setEnabled:function(t){this._modifierFlags=this._modifierFlags|t},isEnabled:function(t){return 0!=(this._modifierFlags&t)},get diffuseOffset(){return console.warn("diffuseOffset is deprecated in PBR materials."),new bg.Vector2(0)},set diffuseOffset(t){console.warn("diffuseOffset is deprecated iin PBR materials.")},get normalOffset(){return console.warn("normalOffset is deprecated in PBR materials."),new bg.Vector2(0)},set normalOffset(t){console.warn("normalOffset is deprecated in PBR materials.")},get diffuse(){return this._diffuse},get isTransparent(){return this._isTransparent},get alphaCutoff(){return this._alphaCutoff},set diffuse(t){this._diffuse=t,this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE)},set isTransparent(t){this._isTransparent=t,this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE)},set alphaCutoff(t){this._alphaCutoff=t,this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE)},get diffuseScale(){return this._diffuseScale},set diffuseScale(t){this._diffuseScale=t,this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE)},get metallic(){return this._metallic},set metallic(t){this._metallic=t,this.setEnabled(bg.base.PBRMaterialFlag.METALLIC)},get metallicChannel(){return this._metallicChannel},set metallicChannel(t){this._metallicChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.METALLIC)},get metallicScale(){return this._metallicScale},set metallicScale(t){this._metallicScale=t,this.setEnabled(bg.base.PBRMaterialFlag.METALLIC)},get roughness(){return this._roughness},set roughness(t){this._roughness=t,this.setEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)},get roughnessChannel(){return this._roughnessChannel},set roughnessChannel(t){this._roughnessChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)},get roughnessScale(){return this._roughnessScale},set roughnessScale(t){this._roughnessScale=t,this.setEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)},get fresnel(){return this._fresnel},set fresnel(t){this._fresnel=t,this.setEnabled(bg.base.PBRMaterialFlag.FRESNEL)},get fresnelScale(){return this._fresnelScale},set fresnelScale(t){this._fresnelScale=t,this.setEnabled(bg.base.PBRMaterialFlag.FRESNEL)},get ambientOcclussion(){return this._ambientOcclussion},set ambientOcclussion(t){this._ambientOcclussion=t,this.setEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION)},get ambientOcclussionChannel(){return this._ambientOcclussionChannel},set ambientOcclussionChannel(t){this._ambientOcclussionChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION)},get lightEmission(){return this._lightEmission},set lightEmission(t){this._lightEmission=t,this.setEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)},get lightEmissionChannel(){return this._lightEmissionChannel},set lightEmissionChannel(t){this._lightEmissionChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)},get lightEmissionScale(){return this._lightEmissionScale},set lightEmissionScale(t){this._lightEmissionScale=t,this.setEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)},get height(){return this._height},set height(t){this._height=t,this.setEnabled(bg.base.PBRMaterialFlag.HEIGHT)},get heightChannel(){return this._heightChannel},set heightChannel(t){this._heightChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.HEIGHT)},get heightIntensity(){return this._heightIntensity},set heightIntensity(t){this._heightIntensity=t,this.setEnabled(bg.base.PBRMaterialFlag.HEIGHT)},get heightScale(){return this._heightScale},set heightScale(t){this._heightScale=t,this.setEnabled(bg.base.PBRMaterialFlag.HEIGH)},get normal(){return this._normal},set normal(t){this._normal=t,this.setEnabled(bg.base.PBRMaterialFlag.NORMAL)},get normalScale(){return this._normalScale},set normalScale(t){this._normalScale=t,this.setEnabled(bg.base.PBRMaterialFlag.NORMAL)},get castShadows(){return this._castShadows},set castShadows(t){this._castShadows=t,this.setEnabled(bg.base.PBRMaterialFlag.SHADOWS)},get cullFace(){return this._cullFace},set cullFace(t){this._cullFace=t,this.setEnabled(bg.base.PBRMaterialFlag.CULL_FACE)},get unlit(){return this._unlit},set unlit(t){this._unlit=t,this.setEnabled(bg.base.PBRMaterialFlag.UNLIT)},clone:function(){var t=new a;return t.assign(this),t},assign:function(t){this._modifierFlags=t._modifierFlags,this._diffuse=t._diffuse,this._isTransparent=t._isTransparent,this._alphaCutoff=t._alphaCutoff,this._diffuseScale=t._diffuseScale,this._metallic=t._metallic,this._metallicChannel=t._metallicChannel,this._metallicScale=t._metallicScale,this._roughness=t._roughness,this._roughnessChannel=t._roughnessChannel,this._roughnessScale=t._roughnessScale,this._fresnel=t._fresnel,this._fresnelScale=t._fresnelScale,this._ambientOcclussion=t._ambientOcclussion,this._ambientOcclussionChannel=t._ambientOcclussionChannel,this._lightEmission=t._lightEmission,this._lightEmissionChannel=t._lightEmissionChannel,this._lightEmissionScale=t._lightEmissionScale,this._height=t._height,this._heightChannel=t._heightChannel,this._heightIntensity=t._heightIntensity,this._heightScale=t._heightScale,this._normal=t._normal,this._normalScale=t._normalScale,this._castShadows=t._castShadows,this._cullFace=t._cullFace,this._unlit=t._unlit},serialize:function(){var a={class:"PBRMaterial"},s=this._modifierFlags;return s&bg.base.PBRMaterialFlag.DIFFUSE&&(a.diffuse=t(this.diffuse),a.isTransparent=r(this.isTransparent),a.alphaCutoff=r(this.alphaCutoff),a.diffuseScale=e(this.diffuseScale)),s&bg.base.PBRMaterialFlag.METALLIC&&(a.metallic=n(this.metallic),a.metallicChannel=i(this.metallicChannel),a.metallicScale=e(this.metallicScale)),s&bg.base.PBRMaterialFlag.ROUGHNESS&&(a.roughness=n(this.roughness),a.roughnessChannel=i(this.roughnessChannel),a.roughnessScale=e(this.roughnessScale)),s&bg.base.PBRMaterialFlag.FRESNEL&&(a.fresnel=t(this.fresnel),a.fresnelScale=e(this.fresnelScale)),s&bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION&&(a.ambientOcclussion=n(this.ambientOcclussion),a.ambientOcclussionChannel=i(this.ambientOcclussionChannel)),s&bg.base.PBRMaterialFlag.LIGHT_EMISSION&&(a.lightEmission=n(this.lightEmission),a.lightEmissionChannel=i(this.lightEmissionChannel),a.lightEmissionScale=e(this.lightEmissionScale)),s&bg.base.PBRMaterialFlag.NORMAL&&(a.normal=t(this.normal),a.normalScale=e(this.normalScale)),s&bg.base.PBRMaterialFlag.HEIGHT&&(a.height=n(this.height),a.heightChannel=i(this.heightChannel),a.heightScale=i(this.heightScale),a.heightIntensity=i(this.heightIntensity)),s&bg.base.PBRMaterialFlag.SHADOWS&&(a.castShadows=r(this.castShadows)),s&bg.base.PBRMaterialFlag.CULL_FACE&&(a.cullFace=r(this.cullFace)),s&bg.base.PBRMaterialFlag.UNLIT&&(a.unlit=r(this.unlit)),a}},{ConvertToPBR:function(t){var e=new bg.base.PBRMaterialModifier;return t.isEnabled(bg.base.MaterialFlag.DIFFUSE)&&!t.isEnabled(bg.base.MaterialFlag.TEXTURE)?e.diffuse=t.diffuse:t.isEnabled(bg.base.MaterialFlag.TEXTURE)&&""!=t.texture&&(e.diffuse=t.texture),t.isEnabled(bg.base.MaterialFlag.NORMAL_MAP)&&""!=t.normalMap&&(e.normal=t.normalMap),t.isEnabled(bg.base.MaterialFlag.SPECULAR)&&(e.fresnel=t.specular),t.isEnabled(bg.base.MaterialFlag.TEXTURE_OFFSET)&&(e.diffuseOffset=t.textureOffset),t.isEnabled(bg.base.MaterialFlag.TEXTURE_SCALE)&&(e.diffuseScale=t.textureScale),t.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_OFFSET)&&(e.normalOffset=t.normalMapOffset),t.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_SCALE)&&(e.normalScale=t.normalMapScale),e}})}();function s(t){var e=this._shaderParameters[t];e&&e.map&&e.release&&e.map.destroy()}function o(t,e,n,i){var r=this;return new Promise(function(a,s){if("string"==typeof n)bg.base.imageTools.isAbsolutePath(n)||(n=bg.base.imageTools.mergePath(i,n)),bg.base.Loader.Load(t,n).then(function(t){r[e]=t,a(t)}).catch(function(t){s(t)});else if(n instanceof bg.Color||"number"==typeof n)r[e]=n,a(n);else if(Array.isArray(n)){switch(n.length){case 2:r[e]=new bg.Vector2(n);break;case 3:r[e]=new bg.Vector3(n);break;case 4:r[e]=new bg.Vector4(n)}a(r[e])}else s(new Error("Invalid PBR color parameter"))})}bg.base.PBRMaterialModifier=a;var u=function(){function e(){this._diffuse=bg.Color.White(),this._alphaCutoff=.5,this._isTransparent=!1,this._metallic=0,this._metallicChannel=0,this._roughness=1,this._roughnessChannel=0,this._fresnel=bg.Color.White(),this._lightEmission=0,this._lightEmissionChannel=0,this._ambientOcclussion=1,this._ambientOcclussionChannel=0,this._normal=new bg.Color(.5,.5,1,1),this._normalChannel=0,this._height=bg.Color.Black(),this._heightChannel=0,this._heightIntensity=1,this._castShadows=!0,this._cullFace=!0,this._unlit=!1,this._texturesToMerge=0,this._shaderParameters={diffuse:{map:null,release:!1},metallic:{map:null,release:!1},roughness:{map:null,release:!1},fresnel:{map:null,release:!1},lightEmission:{map:null,release:!1},ambientOcclussion:{map:null,release:!1},normal:{map:null,release:!1},height:{map:null,release:!1},heightMetallicRoughnessAO:{map:null,release:!1},diffuseScale:new bg.Vector2(1,1),metallicScale:new bg.Vector2(1,1),roughnessScale:new bg.Vector2(1,1),fresnelScale:new bg.Vector2(1,1),lightEmissionScale:new bg.Vector2(1,1),heightScale:new bg.Vector2(1,1),normalScale:new bg.Vector2(1,1),alphaCutoff:.5,castShadows:!0,diffuseUV:0,metallicUV:0,roughnessUV:0,fresnelUV:0,lightEmissionUV:0,ambientOcclussionUV:1,normalUV:0,heightUV:0}}return $traceurRuntime.createClass(e,{updateFromLegacyMaterial:function(t,e){e.texture&&this.diffuse!=e.texture&&(this.diffuse=e.texture),this.diffuseScale=e.textureScale,this.normalScale=e.normalMapScale,e.normalMap!=this.normal&&(this.normal=e.normalMap),e.roughnessMask&&e.roughnessMask!=this.roughness&&(this.roughness=e.roughnessMask),e.roughnessMask||this.roughness==e.shininessMask||(this.roughness=e.shininessMask),e.reflectionMask!=this.metallic&&(this.metallic=e.reflectionMask)},clone:function(){var t=new e;return t.assign(this),t},assign:function(t){this.diffuse=t.diffuse,this.isTransparent=t.isTransparent,this.alphaCutoff=t.alphaCutoff,this.diffuseScale=t.diffuseScale,this.metallic=t.metallic,this.metallicChannel=t.metallicChannel,this.metallicScale=t.metallicScale,this.roughness=t.roughness,this.roughnessChannel=t.roughnessChannel,this.roughnessScale=t.roughnessScale,this.fresnel=t.fresnel,this.fresnelScale=t.fresnelScale,this.lightEmission=t.lightEmission,this.lightEmissionChannel=t.lightEmissionChannel,this.lightEmissionScale=t.lightEmissionScale,this.ambientOcclussion=t.ambientOcclussion,this.ambientOcclussionChannel=t.ambientOcclussionChannel,this.height=t.height,this.heightChannel=t.heightChannel,this.heightScale=t.heightScale,this.heightIntensity=t.heightIntensity,this.normal=t.normal,this.normalScale=t.normalScale,this.castShadows=t.castShadows,this.cullFace=t.cullFace,this.unlit=t.unlit,this.diffuseUV=t.diffuseUV,this.metallicUV=t.metallicUV,this.roughnessUV=t.roughnessUV,this.fresnelUV=t.fresnelUV,this.lightEmissionUV=t.lightEmissionUV,this.ambientOcclussionUV=t.ambientOcclussionUV,this.normalUV=t.normalUV,this.heightUV=t.heightUV},destroy:function(){s.apply(this,["diffuse"]),s.apply(this,["metallic"]),s.apply(this,["roughness"]),s.apply(this,["fresnel"]),s.apply(this,["ambientOcclussion"]),s.apply(this,["lightEmission"]),s.apply(this,["normal"]),s.apply(this,["height"])},getShaderParameters:function(t){var e=this,n=function(n){e._shaderParameters[n].map||(e._shaderParameters[n].release=!0,e._shaderParameters[n].map=function(t,e){var n=null,i=Number(e);if(isNaN(i)?e instanceof bg.Vector3?n=new bg.Vector4(e.x,e.y,e.z,0):e instanceof bg.Vector2?n=new bg.Vector4(e.x,e.y,0,0):e instanceof bg.Vector4?n=e:void 0===e&&(n=new bg.Vector4(0,0,0,0)):n=new bg.Vector4(i,i,i,i),n)return bg.base.Texture.ColorTexture(t,n,{width:1,height:1});throw new Error("PBRMaterial invalid material parameter specified.")}.apply(e,[t,e[n]]))};return n("diffuse"),n("metallic"),n("roughness"),n("fresnel"),n("ambientOcclussion"),n("lightEmission"),n("normal"),n("height"),(this._texturesToMerge>0||null==this._shaderParameters.heightMetallicRoughnessAO.map)&&function(t){var e={map:this._shaderParameters.height.map,channel:this._heightChannel},n={map:this._shaderParameters.metallic.map,channel:this._metallicChannel},i={map:this._shaderParameters.roughness.map,channel:this._roughnessChannel},r={map:this._shaderParameters.ambientOcclussion.map,channel:this._ambientOcclussionChannel};this._merger||(this._merger=new bg.tools.TextureMerger(t));var a=this._merger.mergeMaps(e,n,i,r);this._shaderParameters.heightMetallicRoughnessAO.map=a,this._texturesToMerge>0&&this._texturesToMerge--}.apply(this,[t]),this._shaderParameters},get diffuse(){return this._diffuse},get metallic(){return this._metallic},get metallicChannel(){return this._metallicChannel},get roughness(){return this._roughness},get roughnessChannel(){return this._roughnessChannel},get fresnel(){return this._fresnel},get ambientOcclussion(){return this._ambientOcclussion},get ambientOcclussionChannel(){return this._ambientOcclussionChannel},get lightEmission(){return this._lightEmission},get lightEmissionChannel(){return this._lightEmissionChannel},get normal(){return this._normal},get height(){return this._height},get heightChannel(){return this._heightChannel},set diffuse(t){s.apply(this,["diffuse"]),this._shaderParameters.diffuse.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.diffuse.release=null==this._shaderParameters.diffuse.map,this._diffuse=t},set metallic(t){this._metallic!=t&&(s.apply(this,["metallic"]),this._shaderParameters.metallic.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.metallic.release=null==this._shaderParameters.metallic.map,this._metallic=t,(0==this._texturesToMerge||t instanceof bg.base.Texture)&&this._texturesToMerge++)},set metallicChannel(t){this._metallicChannel=t},set roughness(t){this._roughness!=t&&(s.apply(this,["roughness"]),this._shaderParameters.roughness.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.roughness.release=null==this._shaderParameters.roughness.map,this._roughness=t,(0==this._texturesToMerge||t instanceof bg.base.Texture)&&this._texturesToMerge++)},set roughnessChannel(t){this._roughnessChannel=t},set fresnel(t){s.apply(this,["fresnel"]),this._shaderParameters.fresnel.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.fresnel.release=null==this._shaderParameters.fresnel.map,this._fresnel=t},set ambientOcclussion(t){this._ambientOcclussion!=t&&(s.apply(this,["ambientOcclussion"]),this._shaderParameters.ambientOcclussion.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.ambientOcclussion.release=null==this._shaderParameters.ambientOcclussion.map,this._ambientOcclussion=t,(0==this._texturesToMerge||t instanceof bg.base.Texture)&&this._texturesToMerge++)},set ambientOcclussionChannel(t){this._ambientOcclussionChannel=t},set height(t){this._height!=t&&(s.apply(this,["height"]),this._shaderParameters.height.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.height.release=null==this._shaderParameters.height.map,this._height=t,(0==this._texturesToMerge||t instanceof bg.base.Texture)&&this._texturesToMerge++)},set heightChannel(t){this._heightChannel=t},set lightEmission(t){s.apply(this,["lightEmission"]),this._shaderParameters.lightEmission.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.lightEmission.release=null==this._shaderParameters.lightEmission.map,this._lightEmission=t},set lightEmissionChannel(t){this._lightEmissionChannel=t},set normal(t){s.apply(this,["normal"]),this._shaderParameters.normal.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.normal.release=null==this._shaderParameters.normal.map,this._normal=t},get diffuseOffset(){return console.warn("diffuseOffset: deprecated parameter."),new bg.Vector2(0)},set diffuseOffset(t){console.warn("diffuseOffset: deprecated parameter.")},get normalOffset(){return console.warn("normalOffset: deprecated parameter."),new bg.Vector2(0)},set normalOffset(t){console.warn("normalOffset: deprecated parameter.")},get alphaCutoff(){return this._alphaCutoff},set alphaCutoff(t){this._alphaCutoff=t},get isTransparent(){return this._isTransparent},set isTransparent(t){this._isTransparent=t},get diffuseScale(){return this._shaderParameters.diffuseScale},set diffuseScale(t){this._shaderParameters.diffuseScale=t||new bg.Vector2(1,1)},get metallicScale(){return this._shaderParameters.metallicScale},set metallicScale(t){this._shaderParameters.metallicScale=t||new bg.Vector2(1,1)},get roughnessScale(){return this._shaderParameters.roughnessScale},set roughnessScale(t){this._shaderParameters.roughnessScale=t||new bg.Vector2(1,1)},get fresnelScale(){return this._shaderParameters.fresnelScale},set fresnelScale(t){this._shaderParameters.fresnelScale=t||new bg.Vector2(1,1)},get lightEmissionScale(){return this._shaderParameters.lightEmissionScale},set lightEmissionScale(t){this._shaderParameters.lightEmissionScale=t||new bg.Vector2(1,1)},get heightScale(){return this._shaderParameters.heightScale},set heightScale(t){this._shaderParameters.heightScale=t||new bg.Vector2(1,1)},get heightIntensity(){return this._heightIntensity},set heightIntensity(t){this._heightIntensity=t},get normalScale(){return this._shaderParameters.normalScale},set normalScale(t){this._shaderParameters.normalScale=t||new bg.Vector2(1,1)},get castShadows(){return this._castShadows},set castShadows(t){this._castShadows=t},get cullFace(){return this._cullFace},set cullFace(t){this._cullFace=t},get unlit(){return this._unlit},set unlit(t){this._unlit=t},get diffuseUV(){return this._shaderParameters.diffuseUV},set diffuseUV(t){this._shaderParameters.diffuseUV=t},get metallicUV(){return this._shaderParameters.metallicUV},set metallicUV(t){this._shaderParameters.metallicUV=t},get roughnessUV(){return this._shaderParameters.roughnessUV},set roughnessUV(t){this._shaderParameters.roughnessUV=t},get fresnelUV(){return this._shaderParameters.fresnelUV},set fresnelUV(t){this._shaderParameters.fresnelUV=t},get lightEmissionUV(){return this._shaderParameters.lightEmissionUV},set lightEmissionUV(t){this._shaderParameters.lightEmissionUV=t},get ambientOcclussionUV(){return this._shaderParameters.ambientOcclussionUV},set ambientOcclussionUV(t){this._shaderParameters.ambientOcclussionUV=t},get normalUV(){return this._shaderParameters.normalUV},set normalUV(t){this._shaderParameters.normalUV=t},get heightUV(){return this._shaderParameters.heightUV},set heightUV(t){this._shaderParameters.heightUV=t},getExternalResources:function(){var t=void 0!==arguments[0]?arguments[0]:[];function e(e){e instanceof bg.base.Texture&&e.fileName&&""!=e.fileName&&-1==t.indexOf(e.fileName)&&t.push(e.fileName)}return e(this.diffuse),e(this.metallic),e(this.roughness),e(this.fresnel),e(this.lightEmission),e(this.ambientOcclussion),e(this.height),e(this.normal),t},copyMaterialSettings:function(t,n){t instanceof e?(n&bg.base.PBRMaterialFlag.DIFFUSE&&(t.diffuse=this.diffuse,t.alphaCutoff=this.alphaCutoff,t.isTransparent=this.isTransparent,t.diffuseScale=this.diffuseScale),n&bg.base.PBRMaterialFlag.METALLIC&&(t.metallic=this.metallic,t.metallicChannel=this.metallicChannel,t.metallicScale=this.metallicScale),n&bg.base.PBRMaterialFlag.ROUGHNESS&&(t.roughness=this.roughness,t.roughnessChannel=this.roughnessChannel,t.roughnessScale=this.roughnessScale),n&bg.base.PBRMaterialFlag.FRESNEL&&(t.fresnel=this.fresnel,t.fresnelScale=this.fresnelScale),n&bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION&&(t.ambientOcclussion=this.ambientOcclussion,t.ambientOcclussionChannel=this.ambientOcclussionChannel),n&bg.base.PBRMaterialFlag.LIGHT_EMISSION&&(t.lightEmission=this.lightEmission,t.lightEmissionChannel=this.lightEmissionChannel,t.lightEmissionScale=this.lightEmissionScale),n&bg.base.PBRMaterialFlag.HEIGHT&&(t.height=this.height,t.heightChannel=this.heightChannel,t.heightScale=this.heightScale,t.heightIntensity=this.heightIntensity),n&bg.base.PBRMaterialFlag.NORMAL&&(t.normal=this.normal,t.normalScale=this.normalScale),bg.base.PBRMaterialFlag.LIGHT_MAP,n&bg.base.PBRMaterialFlag.SHADOWS&&(t.castShadows=this.castShadows),n&bg.base.PBRMaterialFlag.CULL_FACE&&(t.cullFace=this.cullFace),n&bg.base.PBRMaterialFlag.UNLIT&&(t.unlit=this.unlit)):console.warn("Could not copy material: the target is not a PBR material")},applyModifier:function(t,e,n){function i(e){bg.base.imageTools.isAbsolutePath(e)||(e=bg.base.imageTools.mergePath(n,e));var i,r,a=bg.base.TextureCache.Get(t).find(e);return a||((a=new bg.base.Texture(t)).create(),a.fileName=e,bg.base.TextureCache.Get(t).register(e,a),i=e,r=a,bg.utils.Resource.Load(i).then(function(t){r.bind(),r.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),r.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter(),r.fileName=i,r.setImage(t)})),a}function r(t){if("string"==typeof t&&""!==t)return i(t);if(isNaN(t))throw new Error("Invalid parameter: expecting texture path or scalar");return t}function a(t){if("string"==typeof t&&""!==t)return i(t);if(t instanceof bg.Color)return t;if(Array.isArray(t)&&4==t.length)return new bg.Color(t);throw new Error("Invalid parameter: expecting texture path or color")}e instanceof bg.base.MaterialModifier&&(console.warn("MaterialModifier applied to PBRMaterial. Performing automatic converstion to PBRMaterialModifier."),e=bg.base.PBRMaterialModifier.ConvertToPBR(e)),e.isEnabled(bg.base.PBRMaterialFlag.SHADOWS)&&(this.castShadows=e.castShadows),e.isEnabled(bg.base.PBRMaterialFlag.CULL_FACE)&&(this.cullFace=e.cullFace),e.isEnabled(bg.base.PBRMaterialFlag.UNLIT)&&(this.unlit=e.unlit),e.isEnabled(bg.base.PBRMaterialFlag.DIFFUSE)&&(this.diffuse=a(e.diffuse),this.isTransparent=e.isTransparent,this.alphaCutoff=e.alphaCutoff,this.diffuseScale=e.diffuseScale),e.isEnabled(bg.base.PBRMaterialFlag.METALLIC)&&(this.metallic=r(e.metallic),this.metallicChannel=e.metallicChannel,this.metallicScale=e.metallicScale),e.isEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)&&(this.roughness=r(e.roughness),this.roughnessChannel=e.roughnessChannel,this.roughnessScale=e.roughnessScale),e.isEnabled(bg.base.PBRMaterialFlag.FRESNEL)&&(this.fresnel=a(e.fresnel),this.fresnelScale=e.fresnelScale),e.isEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION)&&(this.ambientOcclussion=r(e.ambientOcclussion),this.ambientOcclussionChannel=e.ambientOcclussionChannel),e.isEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)&&(this.lightEmission=r(e.lightEmission),this.lightEmissionChannel=e.lightEmissionChannel,this.lightEmissionScale=e.lightEmissionScale),e.isEnabled(bg.base.PBRMaterialFlag.HEIGHT)&&(this.height=r(e.height),this.heightChannel=e.heightChannel,this.heightScale=e.heightScale,this.heightIntensity=e.heightIntensity),e.isEnabled(bg.base.PBRMaterialFlag.NORMAL)&&(this.normal=a(e.normal),this.normalScale=e.normalScale),e.isEnabled(bg.base.PBRMaterialFlag.LIGHT_MAP)},getModifierWithMask:function(t){var e=new a;function n(t){var e=this[t];return e instanceof bg.base.Texture?e.fileName:e}function i(t){var e=this[t];return e instanceof bg.base.Texture?e.fileName:e}return e.modifierMask=t,e.isEnabled(bg.base.PBRMaterialFlag.DIFFUSE)&&(e.diffuse=n.apply(this,["diffuse"]),e.isTransparent=this.isTransparent,e.alphaCutoff=this.alphaCutoff,e.diffuseScale=this.diffuseScale),e.isEnabled(bg.base.PBRMaterialFlag.METALLIC)&&(e.metallic=i.apply(this,["metallic"]),e.metallicChannel=this.metallicChannel,e.metallicScale=this.metallicScale),e.isEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)&&(e.roughness=i.apply(this,["roughness"]),e.roughnessChannel=this.roughnessChannel,e.roughnessScale=this.roughnessScale),e.isEnabled(bg.base.PBRMaterialFlag.FRESNEL)&&(e.fresnel=n.apply(this,["fresnel"]),e.fresnelScale=this.fresnelScale),e.isEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION)&&(e.ambientOcclussion=i.apply(this,["ambientOcclussion"]),e.ambientOcclussionChannel=this.ambientOcclussionChannel),e.isEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)&&(e.lightEmission=i.apply(this,["lightEmission"]),e.lightEmissionChannel=this.lightEmissionChannel,e.lightEmissionScale=this.lightEmissionScale),e.isEnabled(bg.base.PBRMaterialFlag.HEIGHT)&&(e.height=i.apply(this,["height"]),e.heightChannel=this.heightChannel,e.heightScale=this.heightScale,e.heightIntensity=this.heightIntensity),e.isEnabled(bg.base.PBRMaterialFlag.NORMAL)&&(e.normal=n.apply(this,["normal"]),e.normalScale=this.normalScale),e.isEnabled(bg.base.PBRMaterialFlag.LIGHT_MAP),e.isEnabled(bg.base.PBRMaterialFlag.SHADOWS)&&(e.castShadows=this.castShadows),e.isEnabled(bg.base.PBRMaterialFlag.CULL_FACE)&&(e.cullFace=this.cullFace),e.isEnabled(bg.base.PBRMaterialFlag.UNLIT)&&(e.unlit=this.unlit),e}},{ImportFromLegacyMaterial:function(t,e){var n=new bg.base.PBRMaterial;return n.diffuse=e.texture||e.diffuse,n.diffuseScale=e.textureScale,n.normalScale=e.normalMapScale,e.normalMap&&(n.normal=e.normalMap),e.roughnessMask&&(n.roughness=e.roughnessMask),!n.roughness&&e.shininessMask&&(n.roughness=e.shininessMask),e.reflectionMask&&(n.metallic=e.reflectionMask),n.castShadows=e.castShadows,n},FromMaterialDefinition:function(a,s){var u=void 0!==arguments[2]?arguments[2]:"",h=new e;h.diffuseScale=new bg.Vector2(Array.isArray(s.diffuseScale)?s.diffuseScale:[1,1]),h.metallicChannel=i(s.metallicChannel,0),h.metallicScale=new bg.Vector2(Array.isArray(s.metallicScale)?s.metallicScale:[1,1]),h.roughnessChannel=i(s.roughnessChannel,0),h.roughnessScale=new bg.Vector2(Array.isArray(s.roughnessScale)?s.roughnessScale:[1,1]),h.fresnelScale=new bg.Vector2(Array.isArray(s.fresnelScale)?s.fresnelScale:[1,1]),h.lightEmissionChannel=i(s.lightEmissionChannel,0),h.lightEmissionScale=new bg.Vector2(Array.isArray(s.lightEmissionScale)?s.lightEmissionScale:[1,1]),h.ambientOcclussionChannel=i(s.ambientOcclussionChannel,0),h.heightChannel=i(s.heightChannel,0),h.heightScale=new bg.Vector2(Array.isArray(s.heightScale)?s.heightScale:[1,1]),h.heightIntensity=i(s.heightIntensity,1),h.normalScale=new bg.Vector2(Array.isArray(s.normalScale)?s.normalScale:[1,1]),h.isTransparent=s.isTransparent,h.alphaCutoff=i(s.alphaCutoff,.5),h.castShadows=r(s.castShadows,!0),h.cullFace=r(s.cullFace,!0),h.diffuseUV=i(s.diffuseUV,0),h.metallicUV=i(s.metallicUV,0),h.roughnessUV=i(s.roughnessUV,0),h.fresnelUV=i(s.fresnelUV,0),h.lightEmissionUV=i(s.lightEmissionUV,0),h.ambientOcclussionUV=i(s.ambientOcclussionUV,1),h.normalUV=i(s.normalUV,0),h.heightUV=i(s.heightUV,0),h.unlit=void 0!==s.unlit&&s.unlit;var l=[o.apply(h,[a,"diffuse",t(s.diffuse,bg.Color.White()),u]),o.apply(h,[a,"metallic",n(s.metallic),u]),o.apply(h,[a,"roughness",n(s.roughness),u]),o.apply(h,[a,"fresnel",t(s.fresnel,bg.Color.White()),u]),o.apply(h,[a,"lightEmission",n(s.lightEmission),u]),o.apply(h,[a,"height",n(s.height),u]),o.apply(h,[a,"normal",t(s.normal,new bg.Color(.5,.5,1,1)),u]),o.apply(h,[a,"ambientOcclussion",n(s.ambientOcclussion),u])];return new Promise(function(t,e){Promise.all(l).then(function(e){h.getShaderParameters(a),t(h)}).catch(function(e){console.warn(e.message),h.getShaderParameters(a),t(h)})})},Defaults:function(t){var e=bg.base.TextureCache,n=e.WhiteTexture(t),i=e.BlackTexture(t);return{diffuse:{map:n},metallic:{map:i,channel:0},roughness:{map:n,channel:0},fresnel:{map:n},lightEmission:{map:i,channel:0},normal:{map:e.NormalTexture(t)},ambientOcclussion:{map:n,channel:0},height:{map:i,channel:0}}},GetMaterialWithJson:function(t,n,i){return e.FromMaterialDefinition(t,n,i)}})}();bg.base.PBRMaterial=u}(),function(){bg.base.ClearBuffers={COLOR:null,DEPTH:null,COLOR_DEPTH:null},bg.base.BlendMode={NORMAL:1,MULTIPLY:2,ADD:3,SUBTRACT:4,ALPHA_ADD:5,ALPHA_SUBTRACT:6},bg.base.OpacityLayer={TRANSPARENT:1,OPAQUE:2,GIZMOS:4,SELECTION:8,GIZMOS_SELECTION:16,ALL:15,NONE:0};var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t),bg.base.ClearBuffers.COLOR_DEPTH=bg.base.ClearBuffers.COLOR|bg.base.ClearBuffers.DEPTH},{initFlags:function(t){},setViewport:function(t,e){},clearBuffers:function(t,e,n){},setDepthTestEnabled:function(t,e){},setBlendEnabled:function(t,e){},setBlendMode:function(t,e){},setCullFace:function(t,e){}},{})}();bg.base.PipelineImpl=t;var e=null;var n=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._opacityLayer=bg.base.OpacityLayer.ALL,this._viewport=new bg.Viewport(0,0,200,200),this._clearColor=bg.Color.Black(),this._effect=null,this._textureEffect=null,this._depthTest=!0,this._cullFace=!0,this._renderSurface=null,this._blend=!1,this._blendMode=bg.base.BlendMode.NORMAL,this._buffersToClear=bg.base.ClearBuffers.COLOR_DEPTH},{get isCurrent(){return e==this},set opacityLayer(t){this._opacityLayer=t},get opacityLayer(){return this._opacityLayer},shouldDraw:function(t){return t&&(t.isTransparent&&0!=(this._opacityLayer&bg.base.OpacityLayer.TRANSPARENT)||!t.isTransparent&&0!=(this._opacityLayer&bg.base.OpacityLayer.OPAQUE))},get effect(){return this._effect},set effect(t){this._effect=t,this._effect&&this.isCurrent&&this._effect.setActive()},get textureEffect(){return this._textureEffect||(this._textureEffect=new bg.base.DrawTextureEffect(this.context)),this._textureEffect},set textureEffect(t){this._textureEffect=t},set buffersToClear(t){this._buffersToClear=t},get buffersToClear(){return this._buffersToClear},get renderSurface(){return this._renderSurface||(this._renderSurface=new bg.base.ColorSurface(this.context),this._renderSurface.setActive()),this._renderSurface},set renderSurface(t){this._renderSurface=t,this.isCurrent&&this._renderSurface.setActive()},draw:function(t){if(this._effect&&t&&this.isCurrent){var e=this.cullFace;this._effect.bindPolyList(t),this._effect.material&&(this.cullFace=this._effect.material.cullFace),t.draw(),this._effect.unbind(),this.cullFace=e}},drawTexture:function(t){var e=this.depthTest;this.depthTest=!1,this.textureEffect.drawSurface(t),this.depthTest=e},get blend(){return this._blend},set blend(t){this._blend=t,this.isCurrent&&bg.Engine.Get().pipeline.setBlendEnabled(this.context,this._blend)},get blendMode(){return this._blendMode},set blendMode(t){this._blendMode=t,this.isCurrent&&bg.Engine.Get().pipeline.setBlendMode(this.context,this._blendMode)},get viewport(){return this._viewport},set viewport(t){this._viewport=t,this.renderSurface.resizeOnViewportChanged&&(this.renderSurface.size=new bg.Vector2(t.width,t.height)),this.isCurrent&&bg.Engine.Get().pipeline.setViewport(this.context,this._viewport)},clearBuffers:function(t){this.isCurrent&&(t=void 0!==t?t:this._buffersToClear,bg.Engine.Get().pipeline.clearBuffers(this.context,this._clearColor,t))},get clearColor(){return this._clearColor},set clearColor(t){this._clearColor=t},get depthTest(){return this._depthTest},set depthTest(t){this._depthTest=t,this.isCurrent&&bg.Engine.Get().pipeline.setDepthTestEnabled(this.context,this._depthTest)},get cullFace(){return this._cullFace},set cullFace(t){this._cullFace=t,this.isCurrent&&bg.Engine.Get().pipeline.setCullFace(this.context,this._cullFace)}},{SetCurrent:function(t){var n;(e=t)&&((n=e)._effect&&n._effect.setActive(),n.renderSurface.setActive(),bg.Engine.Get().pipeline.setViewport(n.context,n._viewport),bg.Engine.Get().pipeline.setDepthTestEnabled(n.context,n._depthTest),bg.Engine.Get().pipeline.setCullFace(n.context,n._cullFace),bg.Engine.Get().pipeline.setBlendEnabled(n.context,n._blend),bg.Engine.Get().pipeline.setBlendMode(n.context,n._blendMode))},Current:function(){return e}},t)}(bg.app.ContextObject);bg.base.Pipeline=n}(),function(){bg.base.BufferType={VERTEX:1,NORMAL:2,TEX_COORD_0:4,TEX_COORD_1:8,TEX_COORD_2:16,COLOR:32,TANGENT:64,INDEX:128};var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t)},{initFlags:function(t){},create:function(t){},build:function(t,e,n,i,r,a,s,o,u,h){return!1},draw:function(t,e,n,i){},destroy:function(t,e){},update:function(t,e,n,i){}},{})}();bg.base.PolyListImpl=t,bg.base.DrawMode={TRIANGLES:null,TRIANGLE_FAN:null,TRIANGLE_STRIP:null,LINES:null,LINE_STRIP:null};var e=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._plist=null,this._drawMode=bg.base.DrawMode.TRIANGLES,this._name="",this._groupName="",this._visible=!0,this._visibleToShadows=!0,this._vertex=[],this._normal=[],this._texCoord0=[],this._texCoord1=[],this._texCoord2=[],this._color=[],this._tangent=[],this._index=[]}return $traceurRuntime.createClass(e,{clone:function(){var t=new e(this.context),n=function(t,e){t.forEach(function(t){e.push(t)})};return t.name=this.name+" clone",t.groupName=this.groupName,t.visible=this.visible,t.visibleToShadows=this.visibleToShadows,t.drawMode=this.drawMode,n(this.vertex,t.vertex),n(this.normal,t.normal),n(this.texCoord0,t.texCoord0),n(this.texCoord1,t.texCoord1),n(this.texCoord2,t.texCoord02),n(this.color,t.color),n(this.index,t.index),t.build(),t},get name(){return this._name},set name(t){this._name=t},get groupName(){return this._groupName},set groupName(t){this._groupName=t},get visible(){return this._visible},set visible(t){this._visible=t},get visibleToShadows(){return this._visibleToShadows},set visibleToShadows(t){this._visibleToShadows=t},get drawMode(){return this._drawMode},set drawMode(t){this._drawMode=t},set vertex(t){this._vertex=t},set normal(t){this._normal=t},set texCoord0(t){this._texCoord0=t},set texCoord1(t){this._texCoord1=t},set texCoord2(t){this._texCoord2=t},set color(t){this._color=t},set tangent(t){this._tangent=t},set index(t){this._index=t},get vertex(){return this._vertex},get normal(){return this._normal},get texCoord0(){return this._texCoord0},get texCoord1(){return this._texCoord1},get texCoord2(){return this._texCoord2},get color(){return this._color},get tangent(){return this._tangent},get index(){return this._index},get vertexBuffer(){return this._plist.vertexBuffer},get normalBuffer(){return this._plist.normalBuffer},get texCoord0Buffer(){return this._plist.tex0Buffer},get texCoord1Buffer(){return this._plist.tex1Buffer},get texCoord2Buffer(){return this._plist.tex2Buffer},get colorBuffer(){return this._plist.colorBuffer},get tangentBuffer(){return this._plist.tangentBuffer},get indexBuffer(){return this._plist.indexBuffer},updateBuffer:function(t,e){var n=!1;switch(t){case bg.base.BufferType.VERTEX:n=this.vertex.length==e.length;break;case bg.base.BufferType.NORMAL:n=this.normal.length==e.length;break;case bg.base.BufferType.TEX_COORD_0:n=this.texCoord0.length==e.length;break;case bg.base.BufferType.TEX_COORD_1:n=this.texCoord1.length==e.length;break;case bg.base.BufferType.TEX_COORD_2:n=this.texCoord2.length==e.length;break;case bg.base.BufferType.COLOR:n=this.color.length==e.length;break;case bg.base.BufferType.TANGENT:n=this.tangent.length==e.length;break;case bg.base.BufferType.INDEX:n=this.index.length==e.length}if(!n)throw new Error("Error updating buffer: The new buffer have different size as the old one.");bg.Engine.Get().polyList.update(this.context,this._plist,t,e)},build:function(){var t=void 0===arguments[0]||arguments[0];if(0==this.color.length)for(var e=0;e<this.vertex.length;e+=3)this.color.push(1),this.color.push(1),this.color.push(1),this.color.push(1);var n=bg.Engine.Get().polyList;return this._plist&&(n.destroy(this.context,this._plist),this._tangent=[]),!t&&this._tangent&&0!=this._tangent.length||(this._tangent=function(t){if(t.texCoord0&&t.vertex){t._tangent=[];var e=[],n={},i=!1;if(t.index.length%3==0)for(var r=0;r<t.index.length;r+=3){var a=3*t.index[r],s=3*t.index[r+1],o=3*t.index[r+2],u=2*t.index[r],h=2*t.index[r+1],l=2*t.index[r+2],c=new bg.Vector3(t.vertex[a],t.vertex[a+1],t.vertex[a+2]),f=new bg.Vector3(t.vertex[s],t.vertex[s+1],t.vertex[s+2]),v=new bg.Vector3(t.vertex[o],t.vertex[o+1],t.vertex[o+2]),g=new bg.Vector2(t.texCoord0[u],t.texCoord0[u+1]),m=new bg.Vector2(t.texCoord0[h],t.texCoord0[h+1]),d=new bg.Vector2(t.texCoord0[l],t.texCoord0[l+1]),p=new bg.Vector3(f).sub(c),b=new bg.Vector3(v).sub(c),x=m.x-g.x,_=m.y-g.y,M=d.x-g.x,T=d.y-g.y,w=x*T-M*_,S=null;if(0==w){var y=new bg.Vector3(t.normal[a],t.normal[a+1],t.normal[a+2]);i=!0,S=new bg.Vector3(y.y,y.z,y.x)}else{var E=1/w;(S=new bg.Vector3(E*(T*p.x-_*b.x),E*(T*p.y-_*b.y),E*(T*p.z-_*b.z))).normalize()}void 0===n[a]&&(e.push(S.x),e.push(S.y),e.push(S.z),n[a]=S),void 0===n[s]&&(e.push(S.x),e.push(S.y),e.push(S.z),n[s]=S),void 0===n[o]&&(e.push(S.x),e.push(S.y),e.push(S.z),n[o]=S)}else for(var P=0;P<t.vertex.length;P+=3)t._tangent.push(0,0,1);return i&&console.warn("Invalid UV texture coords found. Some objects may present artifacts in the lighting, and not display textures properly."),e}}(this)),this._plist=n.create(this.context),n.build(this.context,this._plist,this._vertex,this._normal,this._texCoord0,this._texCoord1,this._texCoord2,this._color,this._tangent,this._index)},draw:function(){bg.Engine.Get().polyList.draw(this.context,this._plist,this.drawMode,this.index.length)},destroy:function(){this._plist&&bg.Engine.Get().polyList.destroy(this.context,this._plist),this._plist=null,this._name="",this._vertex=[],this._normal=[],this._texCoord0=[],this._texCoord1=[],this._texCoord2=[],this._color=[],this._tangent=[],this._index=[]},applyTransform:function(t){var e=new bg.Matrix4(t),n=new bg.Matrix4(t.getMatrix3());if(this.normal.length>0&&this.normal.length!=this.vertex.length)throw new Error("Unexpected number of normal coordinates found in polyList");for(var i=0;i<this.vertex.length-2;i+=3){var r=new bg.Vector4(this.vertex[i],this.vertex[i+1],this.vertex[i+2],1);if(r=e.multVector(r),this.vertex[i]=r.x,this.vertex[i+1]=r.y,this.vertex[i+2]=r.z,this.normal.length){var a=new bg.Vector4(this.normal[i],this.normal[i+1],this.normal[i+2],1);a=n.multVector(a),this.normal[i]=a.x,this.normal[i+1]=a.y,this.normal[i+2]=a.z}}this.build()}},{},t)}(bg.app.ContextObject);bg.base.PolyList=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=null,n=null;var i=function(i){return $traceurRuntime.createClass(function i(r){$traceurRuntime.superConstructor(i).call(this,r);var a=[(e||((e=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([t().inputs.buffers.vertex]),e.addParameter(t().inputs.matrix.all),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n\t\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t")),e),(n||(n=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n\t\t\t\t\tgl_FragColor = vec4(1.0,0.0,0.0,1.0);\n\t\t\t\t")),n)];this.setupShaderSource(a)},{beginDraw:function(){},setupVars:function(){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst)}},{},i)}(bg.base.Effect);bg.base.RedEffect=i}(),function(){var t=function(){return $traceurRuntime.createClass(function(){this._opaqueQueue=[],this._transparentQueue=[],this._worldCameraPosition=new bg.Vector3(0)},{beginFrame:function(t){this._opaqueQueue=[],this._transparentQueue=[],this._worldCameraPosition.assign(t)},renderOpaque:function(t,e,n,i){this._opaqueQueue.push({plist:t,material:e,modelMatrix:new bg.Matrix4(n),viewMatrix:new bg.Matrix4(i)})},renderTransparent:function(t,e,n,i){var r=n.position;r.sub(this._worldCameraPosition),this._transparentQueue.push({plist:t,material:e,modelMatrix:new bg.Matrix4(n),viewMatrix:new bg.Matrix4(i),cameraDistance:r.magnitude()})},sortTransparentObjects:function(){this._transparentQueue.sort(function(t,e){return t.cameraDistance<e.cameraDistance})},get opaqueQueue(){return this._opaqueQueue},get transparentQueue(){return this._transparentQueue}},{})}();bg.base.RenderQueue=t}(),function(){var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t)},{initFlags:function(t){},create:function(t,e){},setActive:function(t,e){},readBuffer:function(t,e,n){},resize:function(t,e,n){},destroy:function(t,e){},supportType:function(t){},supportFormat:function(t){},maxColorAttachments:function(){}},{})}();bg.base.RenderSurfaceBufferImpl=t;var e=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._size=new bg.Vector2(256),this._renderSurface=null,this._resizeOnViewportChanged=!0}return $traceurRuntime.createClass(e,{get size(){return this._size},set size(t){this._size.x==t.x&&this._size.y==t.y||(this._size=t,this.surfaceImpl.resize(this.context,this._renderSurface,t))},get surfaceImpl(){return null},get resizeOnViewportChanged(){return this._resizeOnViewportChanged},set resizeOnViewportChanged(t){this._resizeOnViewportChanged=t},create:function(t){t||(t=e.DefaultAttachments()),this._renderSurface=this.surfaceImpl.create(this.context,t)},setActive:function(){this.surfaceImpl.setActive(this.context,this._renderSurface)},readBuffer:function(t){return this.surfaceImpl.readBuffer(this.context,this._renderSurface,t,this.size)},destroy:function(){this.surfaceImpl.destroy(this.context,this._renderSurface),this._renderSurface=null}},{DefaultAttachments:function(){return[{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]},SupportFormat:function(t){return bg.Engine.Get().colorBuffer.supportFormat(t)},SupportType:function(t){return bg.Engine.Get().colorBuffer.supportType(t)},MaxColorAttachments:function(){return bg.Engine.Get().textureBuffer.maxColorAttachments}},t)}(bg.app.ContextObject);bg.base.RenderSurface=e,bg.base.RenderSurfaceType={RGBA:null,DEPTH:null},bg.base.RenderSurfaceFormat={UNSIGNED_BYTE:null,UNSIGNED_SHORT:null,FLOAT:null,RENDERBUFFER:null};var n=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{get surfaceImpl(){return bg.Engine.Get().colorBuffer}},{MaxColorAttachments:function(){return bg.Engine.Get().colorBuffer.maxColorAttachments}},t)}(e);bg.base.ColorSurface=n;var i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{get surfaceImpl(){return bg.Engine.Get().textureBuffer},getTexture:function(){var t=void 0!==arguments[0]?arguments[0]:0;return this._renderSurface.attachments[t]&&this._renderSurface.attachments[t].texture}},{MaxColorAttachments:function(){return bg.Engine.Get().textureBuffer.maxColorAttachments}},t)}(e);bg.base.TextureSurface=i}(),function(){if(!bg.isElectronApp)return!1;var t=require("fs"),e=require("path"),n=function(){return $traceurRuntime.createClass(function(){},{save:function(n,i){var r=this;return n=bg.base.Writer.StandarizePath(n),new Promise(function(a,s){r._url={},r._url.path=n.split("/"),r._url.fileName=r._url.path.pop(),r._url.path=r._url.path.join("/"),r._sceneData={fileType:"vwgl::scene",version:{major:2,minor:0,rev:0},scene:[]},r._promises=[],bg.base.Writer.PrepareDirectory(r._url.path);var o={};r._sceneData.scene.push(o),r.buildSceneNode(i,o),t.writeFileSync(e.join(r._url.path,r._url.fileName),JSON.stringify(r._sceneData,"","\t"),"utf-8"),Promise.all(r._promises).then(function(){return a()}).catch(function(t){return s(t)})})},buildSceneNode:function(t,e){var n=this;e.type="Node",e.name=t.name,e.enabled=t.enabled,e.steady=t.steady,e.children=[],e.components=[],t.forEachComponent(function(t){if(t.shouldSerialize){var i={};t.serialize(i,n._promises,n._url),e.components.push(i)}}),t.children.forEach(function(t){var i={};n.buildSceneNode(t,i),e.children.push(i)})}},{})}(),i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){var n=t.split(".").pop(".");return/vitscnj/i.test(n)&&e instanceof bg.scene.Node},write:function(t,e){return(new n).save(t,e)}},{},t)}(bg.base.WriterPlugin);bg.base.SceneWriterPlugin=i}(),function(){var t=null;function e(t){Reflect.defineProperty(t,"all",{get:function(){if(!this._all)for(var e in this._all=[],t)"object"==$traceurRuntime.typeof(t[e])&&t[e].name&&this._all.push(t[e]);return this._all}})}var n=function(){function n(){var t=bg[bg.Engine.Get().id].shaderLibrary;for(var n in t)this[n]=t[n];for(var i in e(this.inputs.matrix),Object.defineProperty(this.inputs.matrix,"modelViewProjection",{get:function(){return[this.model,this.view,this.projection]}}),e(this.inputs.material),e(this.inputs.lighting),e(this.inputs.lightingForward),e(this.inputs.shadows),e(this.inputs.colorCorrection),e(this.functions.materials),e(this.functions.colorCorrection),e(this.functions.lighting),e(this.functions.utils),this.inputs.pbr)e(this.inputs.pbr[i]);for(var r in this.functions.pbr)e(this.functions.pbr[r])}return $traceurRuntime.createClass(n,{},{Get:function(){return t||(t=new n),t}})}();bg.base.ShaderLibrary=n;var i=function(){return $traceurRuntime.createClass(function(){},{header:function(t){return""},parameter:function(t,e){return e.name},func:function(t,e){return e.name}},{})}();bg.base.ShaderSourceImpl=i;var r=function(){return $traceurRuntime.createClass(function(t){this._type=t,this._params=[],this._functions=[],this._requiredExtensions=[],this._header="",this._preprocessor=""},{get type(){return this._type},get params(){return this._params},get header(){return this._header},get functions(){return this._functions},addParameter:function(t){t instanceof Array?this._params=$traceurRuntime.spread(this._params,t):this._params.push(t),this._params.push(null)},addFunction:function(t){t instanceof Array?this._functions=$traceurRuntime.spread(this._functions,t):this._functions.push(t)},setMainBody:function(t){this.addFunction({returnType:"void",name:"main",params:{},body:t})},appendHeader:function(t){this._header+=t+"\n"},appendPreprocessor:function(t){this._preprocessor+=t+"\n"},toString:function(){var t=this,e=bg.Engine.Get().shaderSource,n=this._preprocessor;return n+=e.header(this.type)+"\n"+this._header+"\n\n",this.params.forEach(function(i){n+=e.parameter(t.type,i)+"\n"}),this.functions.forEach(function(i){n+="\n"+e.func(t.type,i)+"\n"}),n}},{FormatSource:function(t){var e="",n=t.replace(/^\n*/,"").replace(/\n*$/,"").split("\n"),i=100;return n.forEach(function(t){var e=/(\t*)/.exec(t)[0].length;i>e&&(i=e)}),n.forEach(function(t){var n=/(\t*)/.exec(t)[0].length,r=n-i;e+=t.slice(n-r,t.length)+"\n"}),e.replace(/^\n*/,"").replace(/\n*$/,"")}})}();bg.base.ShaderSource=r}(),function(){var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t)},{initFlags:function(t){},setActive:function(t,e){},create:function(t){},addShaderSource:function(t,e,n,i){},link:function(t,e){},initVars:function(t,e,n,i){},setInputBuffer:function(t,e,n,i,r){},setValueInt:function(t,e,n,i){},setValueIntPtr:function(t,e,n,i){},setValueFloat:function(t,e,n,i){},setValueFloatPtr:function(t,e,n,i){},setValueVector2:function(t,e,n,i){},setValueVector3:function(t,e,n,i){},setValueVector4:function(t,e,n,i){},setValueVector2v:function(t,e,n,i){},setValueVector3v:function(t,e,n,i){},setValueVector4v:function(t,e,n,i){},setValueMatrix3:function(t,e,n,i,r){},setValueMatrix4:function(t,e,n,i,r){},setTexture:function(t,e,n,i,r){}},{})}();bg.base.ShaderImpl=t,bg.base.ShaderType={VERTEX:null,FRAGMENT:null};var e=null,n=function(t){function n(t){$traceurRuntime.superConstructor(n).call(this,t),this._shader=bg.Engine.Get().shader.create(t),this._linked=!1,this._compileError=null,this._linkError=null}return $traceurRuntime.createClass(n,{get shader(){return this._shader},get compileError(){return this._compileError},get compileErrorSource(){return this._compileErrorSource},get linkError(){return this._linkError},get status(){return null==this._compileError&&null==this._linkError},addShaderSource:function(t,e){var n;return this._linked?this._compileError="Tying to attach a shader to a linked program":this._compileError||(this._compileError=bg.Engine.Get().shader.addShaderSource(this.context,this._shader,t,e),this._compileError&&(this._compileErrorSource=(n="",e.split("\n").forEach(function(t,e){n+=(++e<10?"00":e<100?"0":"")+e+" | "+t+"\n"}),n))),null==this._compileError},link:function(){return this._linkError=null,this._linked?this._linkError="Shader already linked":(this._linkError=bg.Engine.Get().shader.link(this.context,this._shader),this._linked=null==this._linkError),this._linked},setActive:function(){bg.Engine.Get().shader.setActive(this.context,this._shader),e=this},clearActive:function(){n.ClearActive(this.context),e=null},initVars:function(t,e){bg.Engine.Get().shader.initVars(this.context,this._shader,t,e)},setInputBuffer:function(t,e,n){bg.Engine.Get().shader.setInputBuffer(this.context,this._shader,t,e,n)},disableInputBuffer:function(t){bg.Engine.Get().shader.disableInputBuffer(this.context,this._shader,t)},setValueInt:function(t,e){bg.Engine.Get().shader.setValueInt(this.context,this._shader,t,e)},setValueIntPtr:function(t,e){bg.Engine.Get().shader.setValueIntPtr(this.context,this._shader,t,e)},setValueFloat:function(t,e){bg.Engine.Get().shader.setValueFloat(this.context,this._shader,t,e)},setValueFloatPtr:function(t,e){bg.Engine.Get().shader.setValueFloatPtr(this.context,this._shader,t,e)},setVector2:function(t,e){bg.Engine.Get().shader.setValueVector2(this.context,this._shader,t,e)},setVector3:function(t,e){bg.Engine.Get().shader.setValueVector3(this.context,this._shader,t,e)},setVector4:function(t,e){bg.Engine.Get().shader.setValueVector4(this.context,this._shader,t,e)},setVector2Ptr:function(t,e){bg.Engine.Get().shader.setValueVector2v(this.context,this._shader,t,e)},setVector3Ptr:function(t,e){bg.Engine.Get().shader.setValueVector3v(this.context,this._shader,t,e)},setVector4Ptr:function(t,e){bg.Engine.Get().shader.setValueVector4v(this.context,this._shader,t,e)},setMatrix3:function(t,e){var n=void 0!==arguments[2]&&arguments[2];bg.Engine.Get().shader.setValueMatrix3(this.context,this._shader,t,n,e)},setMatrix4:function(t,e){var n=void 0!==arguments[2]&&arguments[2];bg.Engine.Get().shader.setValueMatrix4(this.context,this._shader,t,n,e)},setTexture:function(t,e,n){bg.Engine.Get().shader.setTexture(this.context,this._shader,t,e,n)},destroy:function(){console.warn("TODO: Shader.destroy(): not implemented.")}},{ClearActive:function(t){bg.Engine.Get().shader.setActive(t,null)},GetActiveShader:function(){return e}},t)}(bg.app.ContextObject);bg.base.Shader=n}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=null,n=null;var i=function(i){return $traceurRuntime.createClass(function i(r){$traceurRuntime.superConstructor(i).call(this,r),this._material=null,this._light=null,this._lightTransform=null,this.setupShaderSource([(e||((e=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([t().inputs.buffers.vertex,t().inputs.buffers.tex0,null,t().inputs.matrix.model,t().inputs.matrix.view,t().inputs.matrix.projection,null,{name:"fsTexCoord",dataType:"vec2",role:"out"}]),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\tfsTexCoord = inTex0;\n\t\t\t\t")),e),(n||((n=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).addParameter([t().inputs.material.castShadows,t().inputs.material.texture,t().inputs.material.textureOffset,t().inputs.material.textureScale,t().inputs.material.alphaCutoff,null,{name:"fsTexCoord",dataType:"vec2",role:"in"}]),n.addFunction(t().functions.utils.pack),n.addFunction(t().functions.materials.samplerColor),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n\t\t\t\t\n\t\t\t\tfloat alpha = samplerColor(inTexture,fsTexCoord,inTextureOffset,inTextureScale).a;\n\t\t\t\tif (inCastShadows && alpha>inAlphaCutoff) {\n\t\t\t\t\tgl_FragColor = pack(gl_FragCoord.z);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdiscard;\n\t\t\t\t}")),n)]),this._offset=new bg.Vector2(0)},{get material(){return this._material},set material(t){this._material=t},get light(){return this._light},set light(t){this._light=t},get lightTransform(){return this._lightTransform},set lightTransform(t){this._lightTransform=t},setupVars:function(){if(this.material&&this.light&&this.lightTransform){var t=bg.base.MatrixState.Current();if(this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",this.lightTransform),this.shader.setMatrix4("inProjectionMatrix",this.light.projection),this.material instanceof bg.base.Material){this.shader.setValueInt("inCastShadows",this.material.castShadows);var e=this.material.texture||bg.base.TextureCache.WhiteTexture(this.context);this.shader.setTexture("inTexture",e,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.diffuseOffset||this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.diffuseScale||this.material.textureScale),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff)}else this.material instanceof bg.base.PBRMaterial&&(this.shader.setValueInt("inCastShadows",this.material.castShadows),this.shader.setTexture("inTexture",this.material.getShaderParameters(this.context).diffuse.map,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this._offset),this.shader.setVector2("inTextureScale",this.material.diffuseScale||this.material.textureScale),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff))}}},{},i)}(bg.base.Effect);bg.base.ShadowMapEffect=i,bg.base.ShadowType={HARD:0,SOFT:1,STRATIFIED:2},bg.base.ShadowCascade={NEAR:0,FAR:1,MID:2};var r=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._pipeline=new bg.base.Pipeline(e),this._pipeline.renderSurface=new bg.base.TextureSurface(e),this._pipeline.renderSurface.create(),this._pipeline.effect=new bg.base.ShadowMapEffect(e),this._matrixState=new bg.base.MatrixState,this._drawVisitor=new bg.scene.DrawVisitor(this._pipeline,this._matrixState),this._shadowMapSize=new bg.Vector2(2048),this._pipeline.viewport=new bg.Viewport(0,0,this._shadowMapSize.width,this._shadowMapSize.height),this._shadowType=bg.base.ShadowType.SOFT,this._projection=bg.Matrix4.Ortho(-15,15,-15,15,1,50),this._viewMatrix=bg.Matrix4.Identity(),this._shadowColor=bg.Color.Black()},{get size(){return this._shadowMapSize},set size(t){this._shadowMapSize=t,this._pipeline.viewport=new bg.Viewport(0,0,t.width,t.height)},get shadowType(){return this._shadowType},set shadowType(t){this._shadowType=t},get shadowColor(){return this._shadowColor},set shadowColor(t){this._shadowColor=t},get viewMatrix(){return this._viewMatrix},get projection(){return this._projection},get texture(){return this._pipeline.renderSurface.getTexture(0)},update:function(t,e,n,i){var r=void 0!==arguments[4]?arguments[4]:bg.base.ShadowCascade.NEAR;n.type==bg.base.LightType.DIRECTIONAL?function(t,e,n,i,r){var a=bg.base.MatrixState.Current();bg.base.MatrixState.SetCurrent(this._matrixState),this._pipeline.effect.light=n,this._viewMatrix=new bg.Matrix4(i);var s=this._viewMatrix.rotation,o=e.transform?new bg.Matrix4(e.transform.matrix):bg.Matrix4.Identity(),u=o.position.add(o.forwardVector.scale(-e.focus));this._viewMatrix.identity().translate(u).mult(s).translate(0,0,10).invert(),this._pipeline.effect.lightTransform=this._viewMatrix,bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.clearBuffers(bg.base.ClearBuffers.COLOR_DEPTH);var h=1;r==bg.base.ShadowCascade.FAR?(h=20,n.shadowBias=1e-4):r==bg.base.ShadowCascade.NEAR?(h=2,n.shadowBias=2e-5):r==bg.base.ShadowCascade.MID&&(h=4,n.shadowBias=1e-4),n.projection=bg.Matrix4.Ortho(-e.focus*h,e.focus*h,-e.focus*h,e.focus*h,1,300*e.focus),this._projection=n.projection,t.accept(this._drawVisitor),bg.base.MatrixState.SetCurrent(a)}.apply(this,[t,e,n,i,r]):n.type==bg.base.LightType.SPOT&&function(t,e,n,i){var r=bg.base.MatrixState.Current();bg.base.MatrixState.SetCurrent(this._matrixState),this._pipeline.effect.light=n,this._viewMatrix=new bg.Matrix4(i);var a=n.spotCutoff;n.projection=bg.Matrix4.Perspective(2*a,1,.1,200),n.shadowBias=5e-4,this._viewMatrix.invert(),this._projection=n.projection,this._pipeline.effect.lightTransform=this._viewMatrix,bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.clearBuffers(bg.base.ClearBuffers.COLOR_DEPTH),t.accept(this._drawVisitor),bg.base.MatrixState.SetCurrent(r)}.apply(this,[t,e,n,i])}},{},t)}(bg.app.ContextObject);bg.base.ShadowMap=r}(),function(){var t=function(){function t(){this._font="Verdana",this._size=30,this._color="#FFFFFF",this._background="transparent",this._align="start",this._bold=!1,this._italic=!1,this._dirty=!0}return $traceurRuntime.createClass(t,{clone:function(){var e=new t;return e._font=this._font,e._size=this._size,e._color=this._color,e._background=this._background,e._align=this._align,e._bold=this._bold,e._italic=this._italic,e},get font(){return this._font},set font(t){this._dirty=!0,this._font=t},get size(){return this._size},set size(t){this._dirty=!0,this._size=t},get color(){return this._color},set color(t){this._dirty=!0,this._color=t},get background(){return this._background},set background(t){this._dirty=!0,this._background=t},get align(){return this._align},set align(t){this._dirty=!0,this._align=t},get bold(){return this._bold},set bold(t){this._dirty=!0,this._bold=t},get italic(){return this._italic},set italic(t){this._dirty=!0,this._italic=t},set dirty(t){this._dirty=t},get dirty(){return this._dirty},serialize:function(t){t.font=this.font,t.size=this.size,t.color=this.color,t.background=this.background,t.align=this.align,t.bold=this.bold,t.italic=this.italic},deserialize:function(t){this.font=t.font,this.size=t.size,this.color=t.color,this.background=t.background,this.align=t.align,this.bold=t.bold,this.italic=t.italic,this._dirty=!0}},{})}();bg.base.TextProperties=t}(),function(){var t={},e=8,n=function(){function n(t){this._context=t,this._textures={}}return $traceurRuntime.createClass(n,{find:function(t){return this._textures[t]},register:function(t,e){e instanceof bg.base.Texture&&(this._textures[t]=e)},unregister:function(t){this._textures[t]&&delete this._textures[t]},clear:function(){this._textures={}}},{SetColorTextureSize:function(t){e=t},GetColorTextureSize:function(){return e},WhiteCubemap:function(t){var e=n.Get(t),i=e.find("static-white-cubemap-texture");return i||(i=bg.base.Texture.WhiteCubemap(t),e.register("static-white-cubemap-texture",i)),i},BlackCubemap:function(t){var e=n.Get(t),i=e.find("static-white-cubemap-texture");return i||(i=bg.base.Texture.BlackCubemap(t),e.register("static-white-cubemap-texture",i)),i},WhiteTexture:function(t){var i=n.Get(t),r=i.find("static-white-color-texture");return r||(r=bg.base.Texture.WhiteTexture(t,new bg.Vector2(e)),i.register("static-white-color-texture",r)),r},BlackTexture:function(t){var i=n.Get(t),r=i.find("static-black-color-texture");return r||(r=bg.base.Texture.BlackTexture(t,new bg.Vector2(e)),i.register("static-black-color-texture",r)),r},NormalTexture:function(t){var i=n.Get(t),r=i.find("static-normal-color-texture");return r||(r=bg.base.Texture.NormalTexture(t,new bg.Vector2(e)),i.register("static-normal-color-texture",r)),r},RandomTexture:function(t){var e=n.Get(t),i=e.find("static-random-color-texture");return i||(i=bg.base.Texture.RandomTexture(t,new bg.Vector2(64)),e.register("static-random-color-texture",i)),i},Get:function(e){return t[e.uuid]||(t[e.uuid]=new n(e)),t[e.uuid]},PrecomputedBRDFLookupTexture:function(e){return t._bg_base_brdfLutData_||(t._bg_base_brdfLutData_=bg.base.Texture.PrecomputedBRDFLookupTexture(e)),t._bg_base_brdfLutData_}})}();bg.base.TextureCache=n;var i=null,r=null,a=null,s=null,o=function(t){function e(){$traceurRuntime.superConstructor(e).apply(this,arguments)}return $traceurRuntime.createClass(e,{acceptType:function(t,e){return bg.utils.Resource.IsImage(t)},load:function(t,n,i,r){return new Promise(function(a,s){if(i){var o=bg.base.TextureCache.Get(t).find(n);o||(bg.log("Texture "+n+" not found. Loading texture"),(o=new bg.base.Texture(t)).create(),o.bind(),o.wrapX=r.wrapX||e.GetWrapX(),o.wrapY=r.wrapY||e.GetWrapY(),o.minFilter=r.minFilter||e.GetMinFilter(),o.magFilter=r.magFilter||e.GetMagFilter(),o.setImage(i),o.fileName=n,bg.base.TextureCache.Get(t).register(n,o)),a(o)}else s(new Error("Error loading texture image data"))})}},{GetWrapX:function(){return i||bg.base.TextureWrap.REPEAT},GetWrapY:function(){return r||bg.base.TextureWrap.REPEAT},GetMinFilter:function(){return a||bg.base.TextureFilter.LINEAR_MIPMAP_NEAREST},GetMagFilter:function(){return s||bg.base.TextureFilter.LINEAR},SetMinFilter:function(t){a=t},SetMagFilter:function(t){s=t},SetWrapX:function(t){i=t},SetWrapY:function(t){r=t}},t)}(bg.base.LoaderPlugin);bg.base.TextureLoaderPlugin=o;var u=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return bg.utils.Resource.IsVideo(t)},load:function(t,e,n){return new Promise(function(i,r){if(n){var a=new bg.base.Texture(t);a.create(),a.bind(),a.setVideo(n),a.fileName=e,i(a)}else r(new Error("Error loading video texture data"))})}},{},t)}(bg.base.LoaderPlugin);bg.base.VideoTextureLoaderPlugin=u}(),function(){bg.base.TextureUnit={TEXTURE_0:0,TEXTURE_1:1,TEXTURE_2:2,TEXTURE_3:3,TEXTURE_4:4,TEXTURE_5:5,TEXTURE_6:6,TEXTURE_7:7,TEXTURE_8:8,TEXTURE_9:9,TEXTURE_10:10,TEXTURE_11:11,TEXTURE_12:12,TEXTURE_13:13,TEXTURE_14:14,TEXTURE_15:15,TEXTURE_16:16,TEXTURE_17:17,TEXTURE_18:18,TEXTURE_19:19,TEXTURE_20:20,TEXTURE_21:21,TEXTURE_22:22,TEXTURE_23:23,TEXTURE_24:24,TEXTURE_25:25,TEXTURE_26:26,TEXTURE_27:27,TEXTURE_28:28,TEXTURE_29:29,TEXTURE_30:30},bg.base.TextureWrap={REPEAT:null,CLAMP:null,MIRRORED_REPEAT:null},bg.base.TextureFilter={NEAREST_MIPMAP_NEAREST:null,LINEAR_MIPMAP_NEAREST:null,NEAREST_MIPMAP_LINEAR:null,LINEAR_MIPMAP_LINEAR:null,NEAREST:null,LINEAR:null},bg.base.TextureTarget={TEXTURE_2D:null,CUBE_MAP:null,POSITIVE_X_FACE:null,NEGATIVE_X_FACE:null,POSITIVE_Y_FACE:null,NEGATIVE_Y_FACE:null,POSITIVE_Z_FACE:null,NEGATIVE_Z_FACE:null};var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t)},{initFlags:function(t){console.log("TextureImpl: initFlags() method not implemented")},create:function(t){return console.log("TextureImpl: create() method not implemented"),null},setActive:function(t,e){console.log("TextureImpl: setActive() method not implemented")},bind:function(t,e,n){console.log("TextureImpl: bind() method not implemented")},unbind:function(t,e){console.log("TextureImpl: unbind() method not implemented")},setTextureWrapX:function(t,e,n,i){console.log("TextureImpl: setTextureWrapX() method not implemented")},setTextureWrapY:function(t,e,n,i){console.log("TextureImpl: setTextureWrapY() method not implemented")},setImage:function(t,e,n,i,r,a,s){console.log("TextureImpl: setImage() method not implemented")},setImageRaw:function(t,e,n,i,r,a,s,o){console.log("TextureImpl: setImageRaw() method not implemented")},setTextureFilter:function(t,e,n,i){console.log("TextureImpl: setTextureFilter() method not implemented")},setCubemapImage:function(t,e,n){console.log("TextureImpl: setCubemapImage() method not implemented")},setCubemapRaw:function(t,e,n,i,r){console.log("TextureImpl: setCubemapRaw() method not implemented")},setVideo:function(t,e,n,i,r){console.log("TextureImpl: setVideo() method not implemented")},updateVideoData:function(t,e,n,i){console.log("TextureImpl: updateVideoData() method not implemented")},destroy:function(t,e){console.log("TextureImpl: destroy() method not implemented")}},{})}();bg.base.TextureImpl=t,bg.base.TextureDataType={NONE:0,IMAGE:1,IMAGE_DATA:2,CUBEMAP:3,CUBEMAP_DATA:4,VIDEO:5};var e=[],n=function(t){function n(t){$traceurRuntime.superConstructor(n).call(this,t),this._texture=null,this._fileName="",this._size=new bg.Vector2(0),this._target=bg.base.TextureTarget.TEXTURE_2D,this._minFilter=bg.base.TextureFilter.LINEAR,this._magFilter=bg.base.TextureFilter.LINEAR,this._wrapX=bg.base.TextureWrap.REPEAT,this._wrapY=bg.base.TextureWrap.REPEAT,this._video=null}return $traceurRuntime.createClass(n,{get texture(){return this._texture},get target(){return this._target},set target(t){this._target=t},get fileName(){return this._fileName},set fileName(t){this._fileName=t},set minFilter(t){this._minFilter=t},set magFilter(t){this._magFilter=t},get minFilter(){return this._minFilter},get magFilter(){return this._magFilter},set wrapX(t){this._wrapX=t},set wrapY(t){this._wrapY=t},get wrapX(){return this._wrapX},get wrapY(){return this._wrapY},get size(){return this._size},get image(){return this._image},get imageData(){return this._imageData},get cubeMapImages(){return this._cubeMapImages},get cubeMapData(){return this._cubeMapData},get video(){return this._video},get dataType(){return this._image?bg.base.TextureDataType.IMAGE:this._imageData?bg.base.TextureDataType.IMAGE_DATA:this._cubeMapImages?bg.base.TextureDataType.CUBEMAP:this._cubeMapData?bg.base.TextureDataType.CUBEMAP_DATA:this._video?bg.base.TextureDataType.VIDEO:bg.base.TextureDataType.NONE},create:function(){null!==this._texture&&this.destroy(),this._texture=bg.Engine.Get().texture.create(this.context)},setActive:function(t){bg.Engine.Get().texture.setActive(this.context,t)},bind:function(){bg.Engine.Get().texture.bind(this.context,this._target,this._texture)},unbind:function(){n.Unbind(this.context,this._target)},setImage:function(t,e){void 0===e&&(e=!0),this._size.width=t.width,this._size.height=t.height,bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapY(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setImage(this.context,this._target,this._minFilter,this._magFilter,this._texture,t,e),this._image=t,this._imageData=null,this._cubeMapImages=null,this._cubeMapData=null,this._video=null},updateImage:function(t,e){void 0===e&&(e=!0),this._size.width=t.width,this._size.height=t.height,bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapY(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setImage(this.context,this._target,this._minFilter,this._magFilter,this._texture,t,e),this._image=t,this._imageData=null,this._cubeMapImages=null,this._cubeMapData=null,this._video=null},setImageRaw:function(t,e,n,i,r){i||(i=this.context.RGBA),r||(r=this.context.UNSIGNED_BYTE),this._size.width=t,this._size.height=e,bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapY(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setImageRaw(this.context,this._target,this._minFilter,this._magFilter,this._texture,t,e,n,i,r),this._image=null,this._imageData=n,this._cubeMapImages=null,this._cubeMapData=null,this._video=null},setCubemap:function(t,e,n,i,r,a){bg.Engine.Get().texture.bind(this.context,this._target,this._texture),bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setTextureFilter(this.context,this._target,this._minFilter,this._magFilter),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.POSITIVE_X_FACE,t),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.NEGATIVE_X_FACE,e),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.POSITIVE_Y_FACE,n),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.NEGATIVE_Y_FACE,i),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.POSITIVE_Z_FACE,r),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.NEGATIVE_Z_FACE,a),this._image=null,this._imageData=null,this._cubeMapImages={posX:t,negX:e,posY:n,negY:i,posZ:r,negZ:a},this._cubeMapData=null,this._video=null},setCubemapRaw:function(t,e,n,i,r,a,s,o){bg.Engine.Get().texture.bind(this.context,this._target,this._texture),bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setTextureFilter(this.context,this._target,this._minFilter,this._magFilter),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.POSITIVE_X_FACE,n,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.NEGATIVE_X_FACE,i,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.POSITIVE_Y_FACE,r,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.NEGATIVE_Y_FACE,a,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.POSITIVE_Z_FACE,s,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.NEGATIVE_Z_FACE,o,t,e),this._image=null,this._imageData=null,this._cubeMapImages=null,this._cubeMapData={width:t,height:e,posX:n,negX:i,posY:r,negY:a,posZ:s,negZ:o},this._video=null},setVideo:function(t,e){void 0===e&&(e=!0),this._size.width=t.videoWidth,this._size.height=t.videoHeight,bg.Engine.Get().texture.setVideo(this.context,this._target,this._texture,t,e),this._video=t,this._image=null,this._imageData=null,this._cubeMapImages=null,this._cubeMapData=null},destroy:function(){bg.Engine.Get().texture.destroy(this.context,this._texture),this._texture=null,this._minFilter=null,this._magFilter=null,this._fileName=""},valid:function(){return null!==this._texture},update:function(){bg.Engine.Get().texture.updateVideoData(this.context,this._target,this._texture,this._video)}},{IsPowerOfTwoImage:function(t){return bg.Math.checkPowerOfTwo(t.width)&&bg.Math.checkPowerOfTwo(t.height)},FromCanvas:function(t,e){return n.FromBase64Image(t,e.toDataURL("image/png"))},UpdateCanvasImage:function(t,i){if(!t.valid)return!1;var r=i.toDataURL("image/png");return t.img.width==r.width&&t.img.height==r.height||!0,t.img=new Image,e.push(t),setTimeout(function(){t.bind(),n.IsPowerOfTwoImage(t.img)?(t.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),t.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter()):(t.minFilter=bg.base.TextureFilter.NEAREST,t.magFilter=bg.base.TextureFilter.NEAREST,t.wrapX=bg.base.TextureWrap.CLAMP,t.wrapY=bg.base.TextureWrap.CLAMP),t.setImage(t.img,!0),t.unbind();var i=e.indexOf(t);-1!=i&&e.splice(i,1),bg.emitImageLoadEvent()},10),t.img.src=r,t},FromBase64Image:function(t,i){var r=new bg.base.Texture(t);return r.img=new Image,e.push(r),r.promise=new Promise(function(t,i){setTimeout(function(){r.create(),r.bind(),n.IsPowerOfTwoImage(r.img)?(r.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),r.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter()):(r.minFilter=bg.base.TextureFilter.NEAREST,r.magFilter=bg.base.TextureFilter.NEAREST,r.wrapX=bg.base.TextureWrap.CLAMP,r.wrapY=bg.base.TextureWrap.CLAMP),r.setImage(r.img,!1),r.unbind();var i=e.indexOf(r);-1!=i&&e.splice(i,1),bg.emitImageLoadEvent(),t(r)},10)}),r.img.src=i,r},ColorTexture:function(t,e,n){var i=new bg.base.Texture(t);i.create(),i.bind();for(var r=n.width*n.height*4,a=[],s=0;s<r;s+=4)a[s]=255*e.r,a[s+1]=255*e.g,a[s+2]=255*e.b,a[s+3]=255*e.a;return a=new Uint8Array(a),i.minFilter=bg.base.TextureFilter.NEAREST,i.magFilter=bg.base.TextureFilter.NEAREST,i.setImageRaw(n.width,n.height,a),i.unbind(),i},WhiteTexture:function(t,e){return n.ColorTexture(t,bg.Color.White(),e)},WhiteCubemap:function(t){return n.ColorCubemap(t,bg.Color.White())},BlackCubemap:function(t){return n.ColorCubemap(t,bg.Color.Black())},ColorCubemap:function(t,e){var n=new bg.base.Texture(t);n.target=bg.base.TextureTarget.CUBE_MAP,n.create(),n.bind();for(var i=[],r=0;r<4096;r+=4)i[r]=255*e.r,i[r+1]=255*e.g,i[r+2]=255*e.b,i[r+3]=255*e.a;return i=new Uint8Array(i),n.setCubemapRaw(32,32,i,i,i,i,i,i),n.unbind(),n},NormalTexture:function(t,e){return n.ColorTexture(t,new bg.Color(.5,.5,1,1),e)},BlackTexture:function(t,e){return n.ColorTexture(t,bg.Color.Black(),e)},RandomTexture:function(t,e){var n=new bg.base.Texture(t);n.create(),n.bind();for(var i=e.width*e.height*4,r=[],a=0;a<i;a+=4){var s=new bg.Vector3(2*bg.Math.random()-1,2*bg.Math.random()-1,0);s.normalize(),r[a]=255*s.x,r[a+1]=255*s.y,r[a+2]=255*s.z,r[a+3]=1}return r=new Uint8Array(r),n.minFilter=bg.base.TextureFilter.NEAREST,n.magFilter=bg.base.TextureFilter.NEAREST,n.setImageRaw(e.width,e.height,r),n.unbind(),n},PrecomputedBRDFLookupTexture:function(t){return n.FromBase64Image(t,bg.base._brdfLUTData)},FromImage:function(t,e,n){var i=null;return e&&((i=bg.base.TextureCache.Get(t).find(n))||(bg.log("Texture "+n+" not found. Loading texture"),(i=new bg.base.Texture(t)).create(),i.bind(),i.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),i.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter(),i.setImage(e),i.fileName=n,bg.base.TextureCache.Get(t).register(n,i))),i},SetActive:function(t,e){bg.Engine.Get().texture.setActive(t,e)},Unbind:function(t,e){e||(e=bg.base.TextureTarget.TEXTURE_2D),bg.Engine.Get().texture.unbind(t,e)}},t)}(bg.app.ContextObject);bg.base.Texture=n}(),function(){bg.Math={seed:1,PI:3.141592653589793,DEG_TO_RAD:.01745329251994,RAD_TO_DEG:57.29577951308233,PI_2:1.5707963267948966,PI_4:.785398163397448,PI_8:.392699081698724,TWO_PI:6.283185307179586,EPSILON:1e-7,Array:Float32Array,ArrayHighP:Array,FLOAT_MAX:3.402823e38,checkPowerOfTwo:function(t){return"number"==typeof t&&(t&&0==(t&t-1))},closestPow2:function(t){return Math.pow(2,Math.round(Math.log(t)/Math.log(2)))},checkZero:function(t){return t>-this.EPSILON&&t<this.EPSILON?0:t},equals:function(t,e){return Math.abs(t-e)<this.EPSILON},degreesToRadians:function(t){return Math.fround(this.checkZero(t*this.DEG_TO_RAD))},radiansToDegrees:function(t){return Math.fround(this.checkZero(t*this.RAD_TO_DEG))},sin:function(t){return Math.fround(this.checkZero(Math.sin(t)))},cos:function(t){return Math.fround(this.checkZero(Math.cos(t)))},tan:function(t){return Math.fround(this.checkZero(Math.tan(t)))},cotan:function(t){return Math.fround(this.checkZero(1/this.tan(t)))},atan:function(t){return Math.fround(this.checkZero(Math.atan(t)))},atan2:function(t,e){return Math.fround(this.checkZero(Math.atan2f(t,e)))},random:function(){return Math.random()},seededRandom:function(){return this.seed=(9301*this.seed+49297)%233280,0+1*(this.seed/233280)},max:function(t,e){return Math.fround(Math.max(t,e))},min:function(t,e){return Math.fround(Math.min(t,e))},abs:function(t){return Math.fround(Math.abs(t))},sqrt:function(t){return Math.fround(Math.sqrt(t))},lerp:function(t,e,n){return Math.fround((1-n)*t+n*e)},square:function(t){return Math.fround(t*t)}};var t=function(){return $traceurRuntime.createClass(function(t){this._target=t},{get target(){return this._target},set target(t){this._target=t},apply:function(){console.log("WARNING: MatrixStrategy::apply() not overloaded by the child class.")}},{})}();bg.MatrixStrategy=t}(),function(){function t(t){var e=Math.sqrt(t.m00*t.m00+t.m10*t.m10),n=0,i=0,r=0;return e<-1e-6?(n=Math.atan2(-t.m12,t.m11),i=Math.atan2(-t.m20,e),r=0):(n=Math.atan2(t.m21,t.m22),i=Math.atan2(-t.m20,e),r=Math.atan2(t.m10,t.m00)),n<0&&(n+=2*bg.Math.PI),i<0&&(i+=2*bg.Math.PI),r<0&&(r+=2*bg.Math.PI),new bg.Vector3(n,i,r)}var e=function(){return $traceurRuntime.createClass(function(){var t=void 0!==arguments[0]?arguments[0]:1,e=void 0!==arguments[1]?arguments[1]:0,n=void 0!==arguments[2]?arguments[2]:0,i=void 0!==arguments[3]?arguments[3]:0,r=void 0!==arguments[4]?arguments[4]:1,a=void 0!==arguments[5]?arguments[5]:0,s=void 0!==arguments[6]?arguments[6]:0,o=void 0!==arguments[7]?arguments[7]:0,u=void 0!==arguments[8]?arguments[8]:1;this._m=new bg.Math.Array(9),Array.isArray($traceurRuntime.typeof(t))?(this._m[0]=t[0],this._m[1]=t[1],this._m[2]=t[0],this._m[3]=t[3],this._m[4]=t[4],this._m[5]=t[5],this._m[6]=t[6],this._m[7]=t[7],this._m[8]=t[8]):"number"==typeof t?(this._m[0]=t,this._m[1]=e,this._m[2]=n,this._m[3]=i,this._m[4]=r,this._m[5]=a,this._m[6]=s,this._m[7]=o,this._m[8]=u):this.assign(t)},{get m(){return this._m},toArray:function(){return[this._m[0],this._m[1],this._m[2],this._m[3],this._m[4],this._m[5],this._m[6],this._m[7],this._m[8]]},get m00(){return this._m[0]},get m01(){return this._m[1]},get m02(){return this._m[2]},get m10(){return this._m[3]},get m11(){return this._m[4]},get m12(){return this._m[5]},get m20(){return this._m[6]},get m21(){return this._m[7]},get m22(){return this._m[8]},set m00(t){this._m[0]=t},set m01(t){this._m[1]=t},set m02(t){this._m[2]=t},set m10(t){this._m[3]=t},set m11(t){this._m[4]=t},set m12(t){this._m[5]=t},set m20(t){this._m[6]=t},set m21(t){this._m[7]=t},set m22(t){this._m[8]=t},zero:function(){return this._m[0]=this._m[1]=this._m[2]=this._m[3]=this._m[4]=this._m[5]=this._m[6]=this._m[7]=this._m[8]=0,this},identity:function(){return this._m[0]=1,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=1,this._m[5]=0,this._m[6]=0,this._m[7]=0,this._m[8]=1,this},isZero:function(){return 0==this._m[0]&&0==this._m[1]&&0==this._m[2]&&0==this._m[3]&&0==this._m[4]&&0==this._m[5]&&0==this._m[6]&&0==this._m[7]&&0==this._m[8]},isIdentity:function(){return 1==this._m[0]&&0==this._m[1]&&0==this._m[2]&&0==this._m[3]&&1==this._m[4]&&0==this._m[5]&&0==this._m[6]&&0==this._m[7]&&1==this._m[8]},row:function(t){return new bg.Vector3(this._m[3*t],this._m[3*t+1],this._m[3*t+2])},setRow:function(t,e){return this._m[3*t]=e._v[0],this._m[3*t+1]=e._v[1],this._m[3*t+2]=e._v[2],this},setScale:function(t,e,n){var i=new bg.Vector3(this._m[0],this._m[3],this._m[6]).normalize().scale(t),r=new bg.Vector3(this._m[1],this._m[4],this._m[7]).normalize().scale(e),a=new bg.Vector3(this._m[2],this._m[5],this._m[8]).normalize().scale(n);return this._m[0]=i.x,this._m[3]=i.y,this._m[6]=i.z,this._m[1]=r.x,this._m[4]=r.y,this._m[7]=r.z,this._m[2]=a.x,this._m[5]=a.y,this._m[8]=a.z,this},getScale:function(){return new bg.Vector3(new bg.Vector3(this._m[0],this._m[3],this._m[6]).module,new bg.Vector3(this._m[1],this._m[4],this._m[7]).module,new bg.Vector3(this._m[2],this._m[5],this._m[8]).module)},get eulerRotation(){return t(this)},get length(){return this._m.length},traspose:function(){var t=new bg.Vector3(this._m[0],this._m[3],this._m[6]),e=new bg.Vector3(this._m[1],this._m[4],this._m[7]),n=new bg.Vector3(this._m[2],this._m[5],this._m[8]);return this.setRow(0,t),this.setRow(1,e),this.setRow(2,n),this},elemAtIndex:function(t){return this._m[t]},assign:function(t){return 9==t.length?(this._m[0]=t._m[0],this._m[1]=t._m[1],this._m[2]=t._m[2],this._m[3]=t._m[3],this._m[4]=t._m[4],this._m[5]=t._m[5],this._m[6]=t._m[6],this._m[7]=t._m[7],this._m[8]=t._m[8]):16==t.length&&(this._m[0]=t._m[0],this._m[1]=t._m[1],this._m[2]=t._m[2],this._m[3]=t._m[4],this._m[4]=t._m[5],this._m[5]=t._m[6],this._m[6]=t._m[8],this._m[7]=t._m[9],this._m[8]=t._m[10]),this},equals:function(t){return this._m[0]==t._m[0]&&this._m[1]==t._m[1]&&this._m[2]==t._m[2]&&this._m[3]==t._m[3]&&this._m[4]==t._m[4]&&this._m[5]==t._m[5]&&this._m[6]==t._m[6]&&this._m[7]==t._m[7]&&this._m[8]==t._m[8]},notEquals:function(t){return this._m[0]!=t._m[0]||this._m[1]!=t._m[1]||this._m[2]!=t._m[2]&&this._m[3]!=t._m[3]||this._m[4]!=t._m[4]||this._m[5]!=t._m[5]&&this._m[6]!=t._m[6]||this._m[7]!=t._m[7]||this._m[8]!=t._m[8]},mult:function(t){if("number"==typeof t)this._m[0]*=t,this._m[1]*=t,this._m[2]*=t,this._m[3]*=t,this._m[4]*=t,this._m[5]*=t,this._m[6]*=t,this._m[7]*=t,this._m[8]*=t;else{var e=this._m,n=t._m,i=new bg.Math.Array(9);i[0]=n[0]*e[0]+n[1]*e[1]+n[2]*e[2],i[1]=n[0]*e[1]+n[1]*e[4]+n[2]*e[7],i[2]=n[0]*e[2]+n[1]*e[5]+n[2]*e[8],i[3]=n[3]*e[0]+n[4]*e[3]+n[5]*e[6],i[4]=n[3]*e[1]+n[4]*e[4]+n[5]*e[7],i[5]=n[3]*e[2]+n[4]*e[5]+n[5]*e[8],i[6]=n[6]*e[0]+n[7]*e[3]+n[8]*e[6],i[7]=n[6]*e[1]+n[7]*e[4]+n[8]*e[7],i[8]=n[6]*e[2]+n[7]*e[5]+n[8]*e[8],this._m=i}return this},multVector:function(t){"object"==$traceurRuntime.typeof(t)&&t._v&&t._v.length>=2&&(t=t._v);var e=t[0],n=t[1];return new bg.Vector3(this._m[0]*e+this._m[3]*n+1*this._m[6],this._m[1]*e+this._m[4]*n+1*this._m[7],this._m[2]*e+this._m[5]*n+1*this._m[8])},isNan:function(){return!(Math.isNaN(_m[0])||Math.isNaN(_m[1])||Math.isNaN(_m[2])||Math.isNaN(_m[3])||Math.isNaN(_m[4])||Math.isNaN(_m[5])||Math.isNaN(_m[6])||Math.isNaN(_m[7])||Math.isNaN(_m[8]))},toString:function(){return"["+this._m[0]+", "+this._m[1]+", "+this._m[2]+"]\n ["+this._m[3]+", "+this._m[4]+", "+this._m[5]+"]\n ["+this._m[6]+", "+this._m[7]+", "+this._m[8]+"]"}},{Identity:function(){return new bg.Matrix3(1,0,0,0,1,0,0,0,1)}})}();bg.Matrix3=e;var n=function(){return $traceurRuntime.createClass(function(){var t=void 0!==arguments[0]?arguments[0]:0,e=void 0!==arguments[1]?arguments[1]:0,n=void 0!==arguments[2]?arguments[2]:0,i=void 0!==arguments[3]?arguments[3]:0,r=void 0!==arguments[4]?arguments[4]:0,a=void 0!==arguments[5]?arguments[5]:0,s=void 0!==arguments[6]?arguments[6]:0,o=void 0!==arguments[7]?arguments[7]:0,u=void 0!==arguments[8]?arguments[8]:0,h=void 0!==arguments[9]?arguments[9]:0,l=void 0!==arguments[10]?arguments[10]:0,c=void 0!==arguments[11]?arguments[11]:0,f=void 0!==arguments[12]?arguments[12]:0,v=void 0!==arguments[13]?arguments[13]:0,g=void 0!==arguments[14]?arguments[14]:0,m=void 0!==arguments[15]?arguments[15]:0;this._m=new bg.Math.Array(16),Array.isArray(t)?(this._m[0]=t[0],this._m[1]=t[1],this._m[2]=t[2],this._m[3]=t[3],this._m[4]=t[4],this._m[5]=t[5],this._m[6]=t[6],this._m[7]=t[7],this._m[8]=t[8],this._m[9]=t[9],this._m[10]=t[10],this._m[11]=t[11],this._m[12]=t[12],this._m[13]=t[13],this._m[14]=t[14],this._m[15]=t[15]):"number"==typeof t?(this._m[0]=t,this._m[1]=e,this._m[2]=n,this._m[3]=i,this._m[4]=r,this._m[5]=a,this._m[6]=s,this._m[7]=o,this._m[8]=u,this._m[9]=h,this._m[10]=l,this._m[11]=c,this._m[12]=f,this._m[13]=v,this._m[14]=g,this._m[15]=m):this.assign(t)},{get m(){return this._m},toArray:function(){return[this._m[0],this._m[1],this._m[2],this._m[3],this._m[4],this._m[5],this._m[6],this._m[7],this._m[8],this._m[9],this._m[10],this._m[11],this._m[12],this._m[13],this._m[14],this._m[15]]},get m00(){return this._m[0]},get m01(){return this._m[1]},get m02(){return this._m[2]},get m03(){return this._m[3]},get m10(){return this._m[4]},get m11(){return this._m[5]},get m12(){return this._m[6]},get m13(){return this._m[7]},get m20(){return this._m[8]},get m21(){return this._m[9]},get m22(){return this._m[10]},get m23(){return this._m[11]},get m30(){return this._m[12]},get m31(){return this._m[13]},get m32(){return this._m[14]},get m33(){return this._m[15]},set m00(t){this._m[0]=t},set m01(t){this._m[1]=t},set m02(t){this._m[2]=t},set m03(t){this._m[3]=t},set m10(t){this._m[4]=t},set m11(t){this._m[5]=t},set m12(t){this._m[6]=t},set m13(t){this._m[7]=t},set m20(t){this._m[8]=t},set m21(t){this._m[9]=t},set m22(t){this._m[10]=t},set m23(t){this._m[11]=t},set m30(t){this._m[12]=t},set m31(t){this._m[13]=t},set m32(t){this._m[14]=t},set m33(t){this._m[15]=t},zero:function(){return this._m[0]=0,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=0,this._m[5]=0,this._m[6]=0,this._m[7]=0,this._m[8]=0,this._m[9]=0,this._m[10]=0,this._m[11]=0,this._m[12]=0,this._m[13]=0,this._m[14]=0,this._m[15]=0,this},identity:function(){return this._m[0]=1,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=0,this._m[5]=1,this._m[6]=0,this._m[7]=0,this._m[8]=0,this._m[9]=0,this._m[10]=1,this._m[11]=0,this._m[12]=0,this._m[13]=0,this._m[14]=0,this._m[15]=1,this},isZero:function(){return 0==this._m[0]&&0==this._m[1]&&0==this._m[2]&&0==this._m[3]&&0==this._m[4]&&0==this._m[5]&&0==this._m[6]&&0==this._m[7]&&0==this._m[8]&&0==this._m[9]&&0==this._m[10]&&0==this._m[11]&&0==this._m[12]&&0==this._m[13]&&0==this._m[14]&&0==this._m[15]},isIdentity:function(){return 1==this._m[0]&&0==this._m[1]&&0==this._m[2]&&0==this._m[3]&&0==this._m[4]&&1==this._m[5]&&0==this._m[6]&&0==this._m[7]&&0==this._m[8]&&0==this._m[9]&&1==this._m[10]&&0==this._m[11]&&0==this._m[12]&&0==this._m[13]&&0==this._m[14]&&1==this._m[15]},row:function(t){return new bg.Vector4(this._m[4*t],this._m[4*t+1],this._m[4*t+2],this._m[4*t+3])},setRow:function(t,e){return this._m[4*t]=e._v[0],this._m[4*t+1]=e._v[1],this._m[4*t+2]=e._v[2],this._m[4*t+3]=e._v[3],this},setScale:function(t,e,n){var i=new bg.Vector3(this._m[0],this._m[4],this._m[8]).normalize().scale(t),r=new bg.Vector3(this._m[1],this._m[5],this._m[9]).normalize().scale(e),a=new bg.Vector3(this._m[2],this._m[6],this._m[10]).normalize().scale(n);return this._m[0]=i.x,this._m[4]=i.y,this._m[8]=i.z,this._m[1]=r.x,this._m[5]=r.y,this._m[9]=r.z,this._m[2]=a.x,this._m[6]=a.y,this._m[10]=a.z,this},getScale:function(){return new bg.Vector3(new bg.Vector3(this._m[0],this._m[4],this._m[8]).module,new bg.Vector3(this._m[1],this._m[5],this._m[9]).module,new bg.Vector3(this._m[2],this._m[6],this._m[10]).module)},setPosition:function(t,e,n){return"number"==typeof t?(this._m[12]=t,this._m[13]=e,this._m[14]=n):(this._m[12]=t.x,this._m[13]=t.y,this._m[14]=t.z),this},get rotation(){var t=this.getScale();return new bg.Matrix4(this._m[0]/t.x,this._m[1]/t.y,this._m[2]/t.z,0,this._m[4]/t.x,this._m[5]/t.y,this._m[6]/t.z,0,this._m[8]/t.x,this._m[9]/t.y,this._m[10]/t.z,0,0,0,0,1)},get position(){return new bg.Vector3(this._m[12],this._m[13],this._m[14])},get length(){return this._m.length},get eulerRotation(){return t(this)},getMatrix3:function(){return new bg.Matrix3(this._m[0],this._m[1],this._m[2],this._m[4],this._m[5],this._m[6],this._m[8],this._m[9],this._m[10])},perspective:function(t,e,n,i){return this.assign(bg.Matrix4.Perspective(t,e,n,i)),this},frustum:function(t,e,n,i,r,a){return this.assign(bg.Matrix4.Frustum(t,e,n,i,r,a)),this},ortho:function(t,e,n,i,r,a){return this.assign(bg.Matrix4.Ortho(t,e,n,i,r,a)),this},lookAt:function(t,e,n){return this.assign(bg.Matrix4.LookAt(t,e,n)),this},translate:function(t,e,n){return this.mult(bg.Matrix4.Translation(t,e,n)),this},rotate:function(t,e,n,i){return this.mult(bg.Matrix4.Rotation(t,e,n,i)),this},scale:function(t,e,n){return this.mult(bg.Matrix4.Scale(t,e,n)),this},elemAtIndex:function(t){return this._m[t]},assign:function(t){return 9==t.length?(this._m[0]=t._m[0],this._m[1]=t._m[1],this._m[2]=t._m[2],this._m[3]=0,this._m[4]=t._m[3],this._m[5]=t._m[4],this._m[6]=t._m[5],this._m[7]=0,this._m[8]=t._m[6],this._m[9]=t._m[7],this._m[10]=t._m[8],this._m[11]=0,this._m[12]=0,this._m[13]=0,this._m[14]=0,this._m[15]=1):16==t.length&&(this._m[0]=t._m[0],this._m[1]=t._m[1],this._m[2]=t._m[2],this._m[3]=t._m[3],this._m[4]=t._m[4],this._m[5]=t._m[5],this._m[6]=t._m[6],this._m[7]=t._m[7],this._m[8]=t._m[8],this._m[9]=t._m[9],this._m[10]=t._m[10],this._m[11]=t._m[11],this._m[12]=t._m[12],this._m[13]=t._m[13],this._m[14]=t._m[14],this._m[15]=t._m[15]),this},equals:function(t){return this._m[0]==t._m[0]&&this._m[1]==t._m[1]&&this._m[2]==t._m[2]&&this._m[3]==t._m[3]&&this._m[4]==t._m[4]&&this._m[5]==t._m[5]&&this._m[6]==t._m[6]&&this._m[7]==t._m[7]&&this._m[8]==t._m[8]&&this._m[9]==t._m[9]&&this._m[10]==t._m[10]&&this._m[11]==t._m[11]&&this._m[12]==t._m[12]&&this._m[13]==t._m[13]&&this._m[14]==t._m[14]&&this._m[15]==t._m[15]},notEquals:function(t){return this._m[0]!=t._m[0]||this._m[1]!=t._m[1]||this._m[2]!=t._m[2]||this._m[3]!=t._m[3]||this._m[4]!=t._m[4]||this._m[5]!=t._m[5]||this._m[6]!=t._m[6]||this._m[7]!=t._m[7]||this._m[8]!=t._m[8]||this._m[9]!=t._m[9]||this._m[10]!=t._m[10]||this._m[11]!=t._m[11]||this._m[12]!=t._m[12]||this._m[13]!=t._m[13]||this._m[14]!=t._m[14]||this._m[15]!=t._m[15]},mult:function(t){if("number"==typeof t)return this._m[0]*=t,this._m[1]*=t,this._m[2]*=t,this._m[3]*=t,this._m[4]*=t,this._m[5]*=t,this._m[6]*=t,this._m[7]*=t,this._m[8]*=t,this._m[9]*=t,this._m[10]*=t,this._m[11]*=t,this._m[12]*=t,this._m[13]*=t,this._m[14]*=t,this._m[15]*=t,this;var e=this._m,n=t._m,i=new bg.Math.Array(16);return i[0]=n[0]*e[0]+n[1]*e[4]+n[2]*e[8]+n[3]*e[12],i[1]=n[0]*e[1]+n[1]*e[5]+n[2]*e[9]+n[3]*e[13],i[2]=n[0]*e[2]+n[1]*e[6]+n[2]*e[10]+n[3]*e[14],i[3]=n[0]*e[3]+n[1]*e[7]+n[2]*e[11]+n[3]*e[15],i[4]=n[4]*e[0]+n[5]*e[4]+n[6]*e[8]+n[7]*e[12],i[5]=n[4]*e[1]+n[5]*e[5]+n[6]*e[9]+n[7]*e[13],i[6]=n[4]*e[2]+n[5]*e[6]+n[6]*e[10]+n[7]*e[14],i[7]=n[4]*e[3]+n[5]*e[7]+n[6]*e[11]+n[7]*e[15],i[8]=n[8]*e[0]+n[9]*e[4]+n[10]*e[8]+n[11]*e[12],i[9]=n[8]*e[1]+n[9]*e[5]+n[10]*e[9]+n[11]*e[13],i[10]=n[8]*e[2]+n[9]*e[6]+n[10]*e[10]+n[11]*e[14],i[11]=n[8]*e[3]+n[9]*e[7]+n[10]*e[11]+n[11]*e[15],i[12]=n[12]*e[0]+n[13]*e[4]+n[14]*e[8]+n[15]*e[12],i[13]=n[12]*e[1]+n[13]*e[5]+n[14]*e[9]+n[15]*e[13],i[14]=n[12]*e[2]+n[13]*e[6]+n[14]*e[10]+n[15]*e[14],i[15]=n[12]*e[3]+n[13]*e[7]+n[14]*e[11]+n[15]*e[15],this._m=i,this},multVector:function(t){"object"==$traceurRuntime.typeof(t)&&t._v&&t._v.length>=3&&(t=t._v);var e=t[0],n=t[1],i=t[2];return new bg.Vector4(this._m[0]*e+this._m[4]*n+this._m[8]*i+1*this._m[12],this._m[1]*e+this._m[5]*n+this._m[9]*i+1*this._m[13],this._m[2]*e+this._m[6]*n+this._m[10]*i+1*this._m[14],this._m[3]*e+this._m[7]*n+this._m[11]*i+1*this._m[15])},invert:function(){var t=this._m[0],e=this._m[1],n=this._m[2],i=this._m[3],r=this._m[4],a=this._m[5],s=this._m[6],o=this._m[7],u=this._m[8],h=this._m[9],l=this._m[10],c=this._m[11],f=this._m[12],v=this._m[13],g=this._m[14],m=this._m[15],d=t*a-e*r,p=t*s-n*r,b=t*o-i*r,x=e*s-n*a,_=e*o-i*a,M=n*o-i*s,T=u*v-h*f,w=u*g-l*f,S=u*m-c*f,y=h*g-l*v,E=h*m-c*v,P=l*m-c*g,R=d*P-p*E+b*y+x*S-_*w+M*T;return R?(R=1/R,this._m[0]=(a*P-s*E+o*y)*R,this._m[1]=(n*E-e*P-i*y)*R,this._m[2]=(v*M-g*_+m*x)*R,this._m[3]=(l*_-h*M-c*x)*R,this._m[4]=(s*S-r*P-o*w)*R,this._m[5]=(t*P-n*S+i*w)*R,this._m[6]=(g*b-f*M-m*p)*R,this._m[7]=(u*M-l*b+c*p)*R,this._m[8]=(r*E-a*S+o*T)*R,this._m[9]=(e*S-t*E-i*T)*R,this._m[10]=(f*_-v*b+m*d)*R,this._m[11]=(h*b-u*_-c*d)*R,this._m[12]=(a*w-r*y-s*T)*R,this._m[13]=(t*y-e*w+n*T)*R,this._m[14]=(v*p-f*x-g*d)*R,this._m[15]=(u*x-h*p+l*d)*R,this):(this.zero(),this)},traspose:function(){var t=new bg.Vector4(this._m[0],this._m[4],this._m[8],this._m[12]),e=new bg.Vector4(this._m[1],this._m[5],this._m[9],this._m[13]),n=new bg.Vector4(this._m[2],this._m[6],this._m[10],this._m[14]),i=new bg.Vector4(this._m[3],this._m[7],this._m[11],this._m[15]);return this.setRow(0,t),this.setRow(1,e),this.setRow(2,n),this.setRow(3,i),this},transformDirection:function(t){var e=new bg.Vector3(t),n=new bg.Matrix4(this);return n.setRow(3,new bg.Vector4(0,0,0,1)),e.assign(n.multVector(e).xyz),e.normalize(),e},get forwardVector(){return this.transformDirection(new bg.Vector3(0,0,1))},get rightVector(){return this.transformDirection(new bg.Vector3(1,0,0))},get upVector(){return this.transformDirection(new bg.Vector3(0,1,0))},get backwardVector(){return this.transformDirection(new bg.Vector3(0,0,-1))},get leftVector(){return this.transformDirection(new bg.Vector3(-1,0,0))},get downVector(){return this.transformDirection(new bg.Vector3(0,-1,0))},isNan:function(){return Number.isNaN(this._m[0])||Number.isNaN(this._m[1])||Number.isNaN(this._m[2])||Number.isNaN(this._m[3])||Number.isNaN(this._m[4])||Number.isNaN(this._m[5])||Number.isNaN(this._m[6])||Number.isNaN(this._m[7])||Number.isNaN(this._m[8])||Number.isNaN(this._m[9])||Number.isNaN(this._m[10])||Number.isNaN(this._m[11])||Number.isNaN(this._m[12])||Number.isNaN(this._m[13])||Number.isNaN(this._m[14])||Number.isNaN(this._m[15])},getOrthoValues:function(){return[(1+get23())/get22(),-(1-get23())/get22(),(1-get13())/get11(),-(1+get13())/get11(),-(1+get03())/get00(),(1-get03())/get00()]},getPerspectiveValues:function(){return[get23()/(get22()-1),get23()/(get22()+1),near*(get12()-1)/get11(),near*(get12()+1)/get11(),near*(get02()-1)/get00(),near*(get02()+1)/get00()]},toString:function(){return"["+this._m[0]+", "+this._m[1]+", "+this._m[2]+", "+this._m[3]+"]\n ["+this._m[4]+", "+this._m[5]+", "+this._m[6]+", "+this._m[7]+"]\n ["+this._m[8]+", "+this._m[9]+", "+this._m[10]+", "+this._m[11]+"]\n ["+this._m[12]+", "+this._m[13]+", "+this._m[14]+", "+this._m[15]+"]"}},{Unproject:function(t,e,n,i,r,a){var s=new bg.Matrix4(r);s.mult(i),s.invert();var o=new bg.Vector4((t-a.y)/a.width*2-1,(e-a.x)/a.height*2-1,2*n-1,1),u=new bg.Vector4(s.multVector(o));return 0==u.z?u.set(0):u.set(u.x/u.w,u.y/u.w,u.z/u.w,u.w/u.w),u},Identity:function(){return new bg.Matrix4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)},Perspective:function(t,e,n,i){var r=bg.Math.tan(t*bg.Math.PI/360)*n,a=r*e;return bg.Matrix4.Frustum(-a,a,-r,r,n,i)},Frustum:function(t,e,n,i,r,a){var s=new bg.Matrix4,o=e-t,u=i-n,h=a-r;return s.setRow(0,new bg.Vector4(2*r/o,0,0,0)),s.setRow(1,new bg.Vector4(0,2*r/u,0,0)),s.setRow(2,new bg.Vector4((e+t)/o,(i+n)/u,-(a+r)/h,-1)),s.setRow(3,new bg.Vector4(0,0,-a*r*2/h,0)),s},Ortho:function(t,e,n,i,r,a){var s=new bg.Matrix4,o=e-t,u=i-n,h=a-r;return s._m[0]=2/o,s._m[1]=0,s._m[2]=0,s._m[3]=0,s._m[4]=0,s._m[5]=2/u,s._m[6]=0,s._m[7]=0,s._m[8]=0,s._m[9]=0,s._m[10]=-2/h,s._m[11]=0,s._m[12]=-(t+e)/o,s._m[13]=-(i+n)/u,s._m[14]=-(a+r)/h,s._m[15]=1,s},LookAt:function(t,e,n){var i=bg.Matrix4.Identity(),r=new bg.Vector3(n),a=bg.Vector3.Sub(t,e);a.normalize();var s=bg.Vector3.Cross(r,a);return s.normalize(),r.normalize(),i.m00=s.x,i.m10=s.y,i.m20=s.z,i.m30=-s.dot(t),i.m01=r.x,i.m11=r.y,i.m21=r.z,i.m31=-r.dot(t),i.m02=a.x,i.m12=a.y,i.m22=a.z,i.m32=-a.dot(t),i.m03=0,i.m13=0,i.m23=0,i.m33=1,i},Translation:function(t,e,n){return"object"==$traceurRuntime.typeof(t)&&t._v&&t._v.length>=3&&(e=t._v[1],n=t._v[2],t=t._v[0]),new bg.Matrix4(1,0,0,0,0,1,0,0,0,0,1,0,t,e,n,1)},Rotation:function(t,e,n,i){var r=new bg.Vector3(e,n,i);r.normalize();new bg.Matrix4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);var a=bg.Math.cos(t),s=1-a,o=bg.Math.sin(t);return new bg.Matrix4(r.x*r.x*s+a,r.x*r.y*s+r.z*o,r.x*r.z*s-r.y*o,0,r.y*r.x*s-r.z*o,r.y*r.y*s+a,r.y*r.z*s+r.x*o,0,r.z*r.x*s+r.y*o,r.z*r.y*s-r.x*o,r.z*r.z*s+a,0,0,0,0,1)},Scale:function(t,e,n){return"object"==$traceurRuntime.typeof(t)&&t._v&&t._v.length>=3&&(e=(t=t._v[0])._v[1],n=t._v[2]),new bg.Matrix4(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1)}})}();bg.Matrix4=n}(),function(){var t=function(){return $traceurRuntime.createClass(function(t){this._v=t},{get v(){return this._v},get length(){return this._v.length},get x(){return this._v[0]},set x(t){this._v[0]=t},get y(){return this._v[1]},set y(t){this._v[1]=t},get module(){return this.magnitude()},toArray:function(){for(var t=[],e=0;e<this.v.length;++e)t.push(this.v[e]);return t}},{MinComponents:function(t,e){var n=Math.min(t.length,e.length),i=null;switch(n){case 2:i=new bg.Vector2;break;case 3:i=new bg.Vector3;break;case 4:i=new bg.Vector4}for(var r=0;r<n;++r)i._v[r]=t._v[r]<e._v[r]?t._v[r]:e._v[r];return i},MaxComponents:function(t,e){var n=Math.min(t.length,e.length),i=null;switch(n){case 2:i=new bg.Vector2;break;case 3:i=new bg.Vector3;break;case 4:i=new bg.Vector4}for(var r=0;r<n;++r)i._v[r]=t._v[r]>e._v[r]?t._v[r]:e._v[r];return i}})}();bg.VectorBase=t,bg.Vector=t;var e=function(t){function e(){var t=void 0!==arguments[0]?arguments[0]:0,n=arguments[1];$traceurRuntime.superConstructor(e).call(this,new bg.Math.ArrayHighP(2)),t instanceof e?(this._v[0]=t._v[0],this._v[1]=t._v[1]):Array.isArray(t)&&t.length>=2?(this._v[0]=t[0],this._v[1]=t[1]):(void 0===n&&(n=t),this._v[0]=t,this._v[1]=n)}return $traceurRuntime.createClass(e,{distance:function(t){return new bg.Vector2(this._v[0]-t._v[0],this._v[1]-t._v[1]).magnitude()},normalize:function(){var t=this.magnitude();return this._v[0]=this._v[0]/t,this._v[1]=this._v[1]/t,this},add:function(t){return this._v[0]+=t._v[0],this._v[1]+=t._v[1],this},sub:function(t){return this._v[0]-=t._v[0],this._v[1]-=t._v[1],this},dot:function(t){return this._v[0]*t._v[0]+this._v[1]*t._v[1]},scale:function(t){return this._v[0]*=t,this._v[1]*=t,this},magnitude:function(){return Math.sqrt(this._v[0]*this._v[0]+this._v[1]*this._v[1])},elemAtIndex:function(t){return this._v[t]},equals:function(t){return this._v[0]==t._v[0]&&this._v[1]==t._v[1]},notEquals:function(t){return this._v[0]!=t._v[0]||this._v[1]!=t._v[1]},assign:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1]},set:function(t,e){void 0===e&&(e=t),this._v[0]=t,this._v[1]=e},get width(){return this._v[0]},get height(){return this._v[1]},set width(t){this._v[0]=t},set height(t){this._v[1]=t},get aspectRatio(){return this._v[0]/this._v[1]},isNan:function(){return isNaN(this._v[0])||isNaN(this._v[1])},toString:function(){return"["+this._v+"]"}},{Add:function(t,n){return new e(t.x+n.x,t.y+n.y)},Sub:function(t,n){return new e(t.x-n.x,t.y-n.y)},Distance:function(t,e){return new bg.Vector2(t._v[0]-e._v[0],t._v[1]-e._v[1]).magnitude()},Dot:function(t,e){return t._v[0]*e._v[0]+t._v[1]*e._v[1]},Cross:function(t,e){var n=t._v[1]*e._v[2]-t._v[2]*e._v[1],i=t._v[2]*e._v[0]-t._v[0]*e._v[2],r=t._v[0]*e._v[1]-t._v[1]*e._v[0];return new bg.Vector3(n,i,r)}},t)}(t);bg.Vector2=e;var n=function(t){function n(){var t=void 0!==arguments[0]?arguments[0]:0,i=void 0!==arguments[1]?arguments[1]:0,r=void 0!==arguments[2]?arguments[2]:0;$traceurRuntime.superConstructor(n).call(this,new bg.Math.ArrayHighP(3)),t instanceof e?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=i):t instanceof n?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2]):Array.isArray(t)&&t.length>=3?(this._v[0]=t[0],this._v[1]=t[1],this._v[2]=t[2]):(void 0===i&&(i=t),void 0===r&&(r=i),this._v[0]=t,this._v[1]=i,this._v[2]=r)}return $traceurRuntime.createClass(n,{get z(){return this._v[2]},set z(t){this._v[2]=t},magnitude:function(){return Math.sqrt(this._v[0]*this._v[0]+this._v[1]*this._v[1]+this._v[2]*this._v[2])},normalize:function(){var t=this.magnitude();return this._v[0]=this._v[0]/t,this._v[1]=this._v[1]/t,this._v[2]=this._v[2]/t,this},distance:function(t){return new bg.Vector3(this._v[0]-t._v[0],this._v[1]-t._v[1],this._v[2]-t._v[2]).magnitude()},add:function(t){return this._v[0]+=t._v[0],this._v[1]+=t._v[1],this._v[2]+=t._v[2],this},sub:function(t){return this._v[0]-=t._v[0],this._v[1]-=t._v[1],this._v[2]-=t._v[2],this},dot:function(t){return this._v[0]*t._v[0]+this._v[1]*t._v[1]+this._v[2]*t._v[2]},scale:function(t){return this._v[0]*=t,this._v[1]*=t,this._v[2]*=t,this},cross:function(t){var e=this._v[1]*t._v[2]-this._v[2]*t._v[1],n=this._v[2]*t._v[0]-this._v[0]*t._v[2],i=this._v[0]*t._v[1]-this._v[1]*t._v[0];return this._v[0]=e,this._v[1]=n,this._v[2]=i,this},elemAtIndex:function(t){return this._v[t]},equals:function(t){return this._v[0]==t._v[0]&&this._v[1]==t._v[1]&&this._v[2]==t._v[2]},notEquals:function(t){return this._v[0]!=t._v[0]||this._v[1]!=t._v[1]||this._v[2]!=t._v[2]},assign:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1],t._v.length>=3&&(this._v[2]=t._v[2])},set:function(t,e,n){this._v[0]=t,this._v[1]=void 0===e?t:e,this._v[2]=void 0===e?t:void 0===n?e:n},get width(){return this._v[0]},get height(){return this._v[1]},get depth(){return this._v[2]},set width(t){this._v[0]=t},set height(t){this._v[1]=t},set depth(t){this._v[2]=t},get xy(){return new bg.Vector2(this._v[0],this._v[1])},get yz(){return new bg.Vector2(this._v[1],this._v[2])},get xz(){return new bg.Vector2(this._v[0],this._v[2])},isNan:function(){return isNaN(this._v[0])||isNaN(this._v[1])||isNaN(this._v[2])},toString:function(){return"["+this._v+"]"}},{Add:function(t,e){return new n(t.x+e.x,t.y+e.y,t.z+e.z)},Sub:function(t,e){return new n(t.x-e.x,t.y-e.y,t.z-e.z)},Distance:function(t,e){return new bg.Vector3(t._v[0]-e._v[0],t._v[1]-e._v[1],t._v[2]-e._v[2]).magnitude()},Dot:function(t,e){return t._v[0]*e._v[0]+t._v[1]*e._v[1]+t._v[2]*e._v[2]},Cross:function(t,e){var n=t._v[1]*e._v[2]-t._v[2]*e._v[1],i=t._v[2]*e._v[0]-t._v[0]*e._v[2],r=t._v[0]*e._v[1]-t._v[1]*e._v[0];return new bg.Vector3(n,i,r)}},t)}(t);bg.Vector3=n;var i=function(t){function i(){var t=void 0!==arguments[0]?arguments[0]:0,r=void 0!==arguments[1]?arguments[1]:0,a=void 0!==arguments[2]?arguments[2]:0,s=void 0!==arguments[3]?arguments[3]:0;$traceurRuntime.superConstructor(i).call(this,new bg.Math.ArrayHighP(4)),t instanceof e?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=r,this._v[3]=a):t instanceof n?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2],this._v[3]=r):t instanceof i?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2],this._v[3]=t._v[3]):Array.isArray(t)&&t.length>=4?(this._v[0]=t[0],this._v[1]=t[1],this._v[2]=t[2],this._v[3]=t[3]):(void 0===r&&(r=t),void 0===a&&(a=r),void 0===s&&(s=a),this._v[0]=t,this._v[1]=r,this._v[2]=a,this._v[3]=s)}return $traceurRuntime.createClass(i,{get z(){return this._v[2]},set z(t){this._v[2]=t},get w(){return this._v[3]},set w(t){this._v[3]=t},magnitude:function(){return Math.sqrt(this._v[0]*this._v[0]+this._v[1]*this._v[1]+this._v[2]*this._v[2]+this._v[3]*this._v[3])},normalize:function(){var t=this.magnitude();return this._v[0]=this._v[0]/t,this._v[1]=this._v[1]/t,this._v[2]=this._v[2]/t,this._v[3]=this._v[3]/t,this},distance:function(t){return new bg.Vector4(this._v[0]-t._v[0],this._v[1]-t._v[1],this._v[2]-t._v[2],this._v[3]-t._v[3]).magnitude()},add:function(t){return this._v[0]+=t._v[0],this._v[1]+=t._v[1],this._v[2]+=t._v[2],this._v[3]+=t._v[3],this},sub:function(t){return this._v[0]-=t._v[0],this._v[1]-=t._v[1],this._v[2]-=t._v[2],this._v[3]-=t._v[3],this},dot:function(t){return this._v[0]*t._v[0]+this._v[1]*t._v[1]+this._v[2]*t._v[2]+this._v[3]*t._v[3]},scale:function(t){return this._v[0]*=t,this._v[1]*=t,this._v[2]*=t,this._v[3]*=t,this},elemAtIndex:function(t){return this._v[t]},equals:function(t){return this._v[0]==t._v[0]&&this._v[1]==t._v[1]&&this._v[2]==t._v[2]&&this._v[3]==t._v[3]},notEquals:function(t){return this._v[0]!=t._v[0]||this._v[1]!=t._v[1]||this._v[2]!=t._v[2]||this._v[3]!=t._v[3]},assign:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1],t._v.length>=3&&(this._v[2]=t._v[2]),4==t._v.length&&(this._v[3]=t._v[3])},set:function(t,e,n,i){this._v[0]=t,this._v[1]=void 0===e?t:e,this._v[2]=void 0===e?t:void 0===n?e:n,this._v[3]=void 0===e?t:void 0===n?e:void 0===i?n:i},get r(){return this._v[0]},get g(){return this._v[1]},get b(){return this._v[2]},get a(){return this._v[3]},set r(t){this._v[0]=t},set g(t){this._v[1]=t},set b(t){this._v[2]=t},set a(t){this._v[3]=t},get xy(){return new bg.Vector2(this._v[0],this._v[1])},get yz(){return new bg.Vector2(this._v[1],this._v[2])},get xz(){return new bg.Vector2(this._v[0],this._v[2])},get xyz(){return new bg.Vector3(this._v[0],this._v[1],this._v[2])},get width(){return this._v[2]},get height(){return this._v[3]},set width(t){this._v[2]=t},set height(t){this._v[3]=t},get aspectRatio(){return 0!=this._v[3]?this._v[2]/this._v[3]:1},isNan:function(){return isNaN(this._v[0])||isNaN(this._v[1])||isNaN(this._v[2])||isNaN(this._v[3])},toString:function(){return"["+this._v+"]"}},{Add:function(t,e){return new i(t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w)},Sub:function(t,e){return new i(t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w)},Yellow:function(){return new bg.Vector4(1,1,0,1)},Orange:function(){return new bg.Vector4(1,.5,0,1)},Red:function(){return new bg.Vector4(1,0,0,1)},Violet:function(){return new bg.Vector4(.5,0,1,1)},Blue:function(){return new bg.Vector4(0,0,1,1)},Green:function(){return new bg.Vector4(0,1,0,1)},White:function(){return new bg.Vector4(1,1,1,1)},LightGray:function(){return new bg.Vector4(.8,.8,.8,1)},Gray:function(){return new bg.Vector4(.5,.5,.5,1)},DarkGray:function(){return new bg.Vector4(.2,.2,.2,1)},Black:function(){return new bg.Vector4(0,0,0,1)},Brown:function(){return new bg.Vector4(.4,.2,0,1)},Transparent:function(){return new bg.Vector4(0,0,0,0)}},t)}(t);bg.Vector4=i,bg.Size2D=e,bg.Size3D=n,bg.Position2D=e,bg.Viewport=i,bg.Color=i;var r=function(t){return $traceurRuntime.createClass(function t(){var e=void 0!==arguments[0]?arguments[0]:0,n=void 0!==arguments[1]?arguments[1]:0,i=void 0!==arguments[2]?arguments[2]:0,r=void 0!==arguments[3]?arguments[3]:0,a=void 0!==arguments[4]?arguments[4]:0,s=void 0!==arguments[5]?arguments[5]:0;$traceurRuntime.superConstructor(t).call(this,new bg.Math.Array(6)),this._v[0]=e,this._v[1]=n,this._v[2]=i,this._v[3]=r,this._v[4]=a,this._v[5]=s},{elemAtIndex:function(t){return this._v[t]},equals:function(t){return this._v[0]==t._v[0]&&this._v[1]==t._v[1]&&this._v[2]==t._v[2]&&this._v[3]==t._v[3]&&this._v[4]==t._v[4]&&this._v[5]==t._v[5]},notEquals:function(t){return this._v[0]!=t._v[0]||this._v[1]!=t._v[1]||this._v[2]!=t._v[2]||this._v[3]!=t._v[3]||this._v[4]!=t._v[4]||this._v[5]!=t._v[5]},assign:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2],this._v[3]=t._v[3],this._v[4]=t._v[4],this._v[5]=t._v[5]},set:function(t,e,n,i,r,a){this._v[0]=t,this._v[1]=void 0===e?t:e,this._v[2]=void 0===e?t:n,this._v[3]=void 0===e?t:i,this._v[4]=void 0===e?t:r,this._v[5]=void 0===e?t:a},get left(){return this._v[0]},get right(){return this._v[1]},get bottom(){return this._v[2]},get top(){return this._v[3]},get back(){return this._v[4]},get front(){return this._v[5]},set left(t){this._v[0]=t},set right(t){this._v[1]=t},set bottom(t){this._v[2]=t},set top(t){this._v[3]=t},set back(t){this._v[4]=t},set front(t){this._v[5]=t},get width(){return Math.abs(this._v[1]-this._v[0])},get height(){return Math.abs(this._v[3]-this._v[2])},get depth(){return Math.abs(this._v[5]-this._v[4])},isNan:function(){return isNaN(this._v[0])||isNaN(this._v[1])||isNaN(this._v[2])||isNaN(this._v[3])||isNaN(this._v[4])||isNaN(this._v[5])},toString:function(){return"["+this._v+"]"},isInBounds:function(t){return t.x>=this._v[0]&&t.x<=this._v[1]&&t.y>=this._v[2]&&t.y<=this._v[3]&&t.z>=this._v[4]&&t.z<=this._v[5]}},{},t)}(t);bg.Bounds=r;var a=function(t){function e(t,n,i,r){$traceurRuntime.superConstructor(e).call(this),void 0===t?this.zero():void 0===n?t._v&&t._v.lenght>=4?this.clone(t):t._m&&9==t._m.length?this.initWithMatrix3(t):t._m&&16==t._m.length?this.initWithMatrix4(t):this.zero():void 0!==t&&void 0!==n&&void 0!==i&&void 0!==r?this.initWithValues(t,n,i,r):this.zero()}return $traceurRuntime.createClass(e,{initWithValues:function(t,e,n,i){return this._v[0]=e*bg.Math.sin(t/2),this._v[1]=n*bg.Math.sin(t/2),this._v[2]=i*bg.Math.sin(t/2),this._v[3]=bg.Math.cos(t/2),this},clone:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2],this._v[3]=t._v[3]},initWithMatrix3:function(t){var e=bg.Math.sqrt(1+t._m[0]+t._m[4]+t._m[8])/2,n=4*e;this._v[0]=(t._m[7]-t._m[5])/e,this._v[1]=(t._m[2]-t._m[6])/n,this._v[2]=(t._m[3]-t._m[1])/n,this._v[3]=e},initWithMatrix4:function(t){var e=bg.Math.sqrt(1+t._m[0]+t._m[5]+t._m[10])/2,n=4*e;this._v[0]=(t._m[9]-t._m[6])/e,this._v[1]=(t._m[2]-t._m[8])/n,this._v[2]=(t._m[4]-t._m[1])/n,this._v[3]=e},getMatrix4:function(){var t=bg.Matrix4.Identity(),e=this._v;return t.setRow(0,new bg.Vector4(1-2*e[1]*e[1]-2*e[2]*e[2],2*e[0]*e[1]-2*e[2]*e[3],2*e[0]*e[2]+2*e[1]*e[3],0)),t.setRow(1,new bg.Vector4(2*e[0]*e[1]+2*e[2]*e[3],1-2*e[0]*e[0]-2*e[2]*e[2],2*e[1]*e[2]-2*e[0]*e[3],0)),t.setRow(2,new bg.Vector4(2*e[0]*e[2]-2*e[1]*e[3],2*e[1]*e[2]+2*e[0]*e[3],1-2*e[0]*e[0]-2*e[1]*e[1],0)),t},getMatrix3:function(){var t=bg.Matrix3.Identity(),e=this._v;return t.setRow(0,new bg.Vector3(1-2*e[1]*e[1]-2*e[2]*e[2],2*e[0]*e[1]-2*e[2]*e[3],2*e[0]*e[2]+2*e[1]*e[3])),t.setRow(1,new bg.Vector3(2*e[0]*e[1]+2*e[2]*e[3],1-2*e[0]*e[0]-2*e[2]*e[2],2*e[1]*e[2]-2*e[0]*e[3])),t.setRow(2,new bg.Vector3(2*e[0]*e[2]-2*e[1]*e[3],2*e[1]*e[2]+2*e[0]*e[3],1-2*e[0]*e[0]-2*e[1]*e[1])),t}},{MakeWithMatrix:function(t){return new e(t)}},t)}(i);bg.Quaternion=a}(),bg.physics={},function(){bg.physics.IntersectionType={NONE:0,POINT:1,LLINE:2};var t=function(){return $traceurRuntime.createClass(function(){this._type=null,this._p0=null,this._p1=null},{get type(){return this._type},get point(){return this._p0},get endPoint(){return this._p1},intersects:function(){return!1}},{RayToPlane:function(t,e){return new bg.physics.RayToPlaneIntersection(t,e)}})}();bg.physics.Intersection=t;var e=function(t){return $traceurRuntime.createClass(function t(e,n){$traceurRuntime.superConstructor(t).call(this),this._ray=null,this._p0=null,this._type=bg.physics.IntersectionType.POINT;var i=new bg.Vector3(n.origin),r=new bg.Vector3(n.normal),a=new bg.Vector3(e.start),s=new bg.Vector3(e.vector),o=i.sub(a).dot(r),u=s.dot(r);if(0!=u){var h=o/u;h>e.magnitude||(this._ray=bg.physics.Ray.RayWithVector(e.vector,e.start,h),this._p0=this._ray.end)}},{get ray(){return this._ray},intersects:function(){return null!=this._ray&&null!=this._p0}},{},t)}(bg.physics.Intersection);bg.physics.RayToPlaneIntersection=e}(),function(){var t=function(){return $traceurRuntime.createClass(function(){this._transform=bg.Matrix4.Identity()},{get transform(){return this._transform},set transform(t){this._transform=t},applyTransform:function(t){},calculateTransform:function(){}},{Factory:function(t){switch(t.type){case"LinkJoint":return e.Factory(t)}return null}})}();bg.physics.Joint=t,bg.physics.LinkTransformOrder={TRANSLATE_ROTATE:1,ROTATE_TRANSLATE:0};var e=function(t){function e(){$traceurRuntime.superConstructor(e).call(this),this._offset=new bg.Vector3,this._eulerRotation=new bg.Vector3,this._transformOrder=bg.physics.LinkTransformOrder.TRANSLATE_ROTATE}return $traceurRuntime.createClass(e,{applyTransform:function(t){t.mult(this.transform)},assign:function(t){this.yaw=t.yaw,this.pitch=t.pitch,this.roll=t.roll,this.offset.assign(t.offset),this.transformOrder=t.transformOrder},get offset(){return this._offset},set offset(t){this._offset=t,this.calculateTransform()},get eulerRotation(){return this._eulerRotation},set eulerRotation(t){this._eulerRotation=t,this.calculateTransform()},get yaw(){return this._eulerRotation.x},get pitch(){return this._eulerRotation.y},get roll(){return this._eulerRotation.z},set yaw(t){this._eulerRotation.x=t,this.calculateTransform()},set pitch(t){this._eulerRotation.y=t,this.calculateTransform()},set roll(t){this._eulerRotation.z=t,this.calculateTransform()},get transformOrder(){return this._transformOrder},set transformOrder(t){this._transformOrder=t,this.calculateTransform()},multTransform:function(t){var e=this.offset;switch(this.transformOrder){case bg.physics.LinkTransformOrder.TRANSLATE_ROTATE:t.translate(e.x,e.y,e.z),this.multRotation(t);break;case bg.physics.LinkTransformOrder.ROTATE_TRANSLATE:this.multRotation(t),t.translate(e.x,e.y,e.z)}},multRotation:function(t){t.rotate(this.eulerRotation.z,0,0,1).rotate(this.eulerRotation.y,0,1,0).rotate(this.eulerRotation.x,1,0,0)},calculateTransform:function(){this.transform.identity(),this.multTransform(this.transform)},serialize:function(t){t.type="LinkJoint",t.offset=[this.offset.x,this.offset.y,this.offset.z],t.yaw=this.yaw,t.pitch=this.pitch,t.roll=this.roll,t.order=this.order}},{Factory:function(t){var n=new e;return n.offset=new bg.Vector3(t.offset[0]||0,t.offset[1]||0,t.offset[2]||0),n.yaw=t.yaw||0,n.pitch=t.pitch||0,n.roll=t.roll||0,n.order=t.order||1,n}},t)}(t);bg.physics.LinkJoint=e}(),function(){var t=function(){return $traceurRuntime.createClass(function(t,e,n){if(t=t instanceof bg.Vector3&&t,e=e instanceof bg.Vector3&&e,n=n instanceof bg.Vector3&&n,t&&!e)this._normal=new bg.Vector3(t),this._origin=new bg.Vector3(0);else if(t&&e&&!n)this._normal=new bg.Vector3(t),this._origin=new bg.Vector3(e);else if(t&&e&&n){var i=new bg.Vector3(t);i.sub(e);var r=new bg.Vector3(n);r.sub(t),this._origin=new bg.Vector3(p1),this._normal=new bg.Vector3(i),this._normal.cross(r).normalize()}else this._origin=new bg.Vector3(0),this._normal=new bg.Vector3(0,1,0)},{get normal(){return this._normal},set normal(t){this._normal.assign(t)},get origin(){return this._origin},set origin(t){this._origin.assign(t)},toString:function(){return"P0: "+this._origin.toString()+", normal:"+this._normal.toString()},valid:function(){return!this._origin.isNan()&&!this._normal.isNan()},assign:function(t){return this._origin.assign(t._origin),this._normal.assign(t._normal),this},equals:function(t){return this._origin.equals(t._origin)&&this._normal.equals(t._normal)}},{})}();bg.physics.Plane=t}(),function(){function t(t){t._vector=new bg.Vector3(t._end),t._vector.sub(t._start),t._magnitude=t._vector.magnitude(),t._vector.normalize()}var e=function(){function e(e,n){this._start=e||new bg.Vector3,this._end=n||new bg.Vector3(1),t(this)}return $traceurRuntime.createClass(e,{setWithPoints:function(e,n){return this._start.assign(e),this._end.assign(n),t(),this},setWithVector:function(e,n,i){this._start.assign(n),this._end.assign(n);var r=new bg.Vector3(e);return r.normalize().scale(i),this._end.add(r),t(this),this},setWithScreenPoint:function(e,n,i,r){var a=bg.Matrix4.Unproject(e.x,e.y,0,i,n,r),s=bg.Matrix4.Unproject(e.x,e.y,1,i,n,r);return this._start=a.xyz,this._end=s.xyz,t(this),this},assign:function(t){this._start.assign(t.start),this._end.assign(t.end),this._vector.assign(t.vector),this._magnitude.assign(t.magnitude)},get start(){return this._start},set start(e){this._start.assign(e),t(this)},get end(){return this._end},set end(t){this._end.assign(t)},get vector(){return this._vector},get magnitude(){return this._magnitude},toString:function(){return"start: "+this.start.toString()+", end: "+this.end.toString()}},{RayWithPoints:function(t,n){return new e(t,n)},RayWithVector:function(t,n,i){var r=new e;return r.setWithVector(t,n,i),r},RayWithScreenPoint:function(t,n,i,r){var a=new e;return a.setWithScreenPoint(t,n,i,r),a}})}();bg.physics.Ray=e}(),bg.scene={},function(){var t={},e=function(e){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._node=null,this._drawGizmo=!0},{clone:function(){return bg.log("WARNING: Component with typeid "+this.typeId+" does not implmement the clone() method."),null},destroy:function(){},get node(){return this._node},get typeId(){return this._typeId},get draw3DGizmo(){return this._drawGizmo},set draw3DGizmo(t){this._drawGizmo=t},removedFromNode:function(t){},addedToNode:function(t){},get shouldSerialize(){return!0},deserialize:function(t,e,n){return Promise.resolve(this)},serialize:function(t,e,n){t.type=this.typeId.split(".").pop()},component:function(t){return this._node&&this._node.component(t)},get camera(){return this.component("bg.scene.Camera")},get chain(){return this.component("bg.scene.Chain")},get drawable(){return this.component("bg.scene.Drawable")},get inputChainJoint(){return this.component("bg.scene.InputChainJoint")},get outputChainJoint(){return this.component("bg.scene.OutputChainJoint")},get light(){return this.component("bg.scene.Light")},get transform(){return this.component("bg.scene.Transform")},get anchorJoint(){return this.component("bg.scene.AnchorJoint")}},{Factory:function(e,n,i,r){var a=t[n.type];if(a){var s=new a;return i.addComponent(s),s.deserialize(e,n,r)}return Promise.resolve()}},e)}(bg.LifeCycle);bg.scene.Component=e,bg.scene.registerComponent=function(e,n,i){var r=/function (.+)\(/.exec(n.toString());r||(r=/class ([a-zA-Z0-9_]+) /.exec(n.toString()));var a=r&&r.length>1?r[1]:"";e[a]=n,n.prototype._typeId=i||a,bg.scene.Node.prototype,t[a]=n}}(),function(){function t(){for(var t in this._componentsArray=[],this._components)this._components[t]&&this._componentsArray.push(this._components[t])}var e=function(e){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:"";$traceurRuntime.superConstructor(t).call(this,e),this._name=n,this._enabled=!0,this._steady=!1,this._components={},this._componentsArray=[]},{toString:function(){return" scene object: "+this._name},cloneComponents:function(){var t=new bg.scene.Node(this.context,this.name?"copy of "+this.name:"");return t.enabled=this.enabled,this.forEachComponent(function(e){t.addComponent(e.clone())}),t},get name(){return this._name},set name(t){this._name=t},get enabled(){return this._enabled},set enabled(t){this._enabled=t},get steady(){return this._steady},set steady(t){this._steady=t},addComponent:function(e){e._node&&e._node.removeComponent(e),e._node=this,this._components[e.typeId]=e,e.addedToNode(this),t.apply(this)},removeComponent:function(e){var n="",i=null;"string"==typeof e?(n=e,i=this.component(e)):e instanceof bg.scene.Component&&(i=e,n=e.typeId);var r=!1;return this._components[n]==i&&null!=i&&(delete this._components[n],i.removedFromNode(this),r=!0),t.apply(this),r},component:function(t){return this._components[t]},get camera(){return this.component("bg.scene.Camera")},get chain(){return this.component("bg.scene.Chain")},get drawable(){return this.component("bg.scene.Drawable")},get inputJoint(){return this.component("bg.scene.InputJoint")},get outputJoint(){return this.component("bg.scene.OutputJoint")},get light(){return this.component("bg.scene.Light")},get transform(){return this.component("bg.scene.Transform")},get anchorJoint(){return this.component("bg.scene.AnchorJoint")},forEachComponent:function(t){this._componentsArray.forEach(t)},someComponent:function(t){return this._componentsArray.some(t)},everyComponent:function(t){return this._componentsArray.every(t)},destroy:function(){var t=this;this.forEachComponent(function(e){e.removedFromNode(t)}),this._components={},this._componentsArray=[]},init:function(){this._componentsArray.forEach(function(t){t.init()})},frame:function(t){this._componentsArray.forEach(function(e){e._initialized_||(e.init(),e._initialized_=!0),e.frame(t)})},displayGizmo:function(t,e){this._componentsArray.forEach(function(n){n.draw3DGizmo&&n.displayGizmo(t,e)})},willDisplay:function(t,e){this._componentsArray.forEach(function(n){n.willDisplay(t,e)})},display:function(t,e){var n=void 0!==arguments[2]&&arguments[2];this._componentsArray.forEach(function(i){i.display(t,e,n)})},didDisplay:function(t,e){this._componentsArray.forEach(function(n){n.didDisplay(t,e)})},willUpdate:function(t,e,n){this._componentsArray.forEach(function(i){i.willUpdate(t,e,n)})},draw:function(t,e,n,i){this._componentsArray.forEach(function(r){r.draw(t,e,n,i)})},didUpdate:function(t,e,n){this._componentsArray.forEach(function(i){i.didUpdate(t,e,n)})},reshape:function(t,e,n,i){this._componentsArray.forEach(function(t){t.reshape(n,i)})},keyDown:function(t){this._componentsArray.forEach(function(e){e.keyDown(t)})},keyUp:function(t){this._componentsArray.forEach(function(e){e.keyUp(t)})},mouseUp:function(t){this._componentsArray.forEach(function(e){e.mouseUp(t)})},mouseDown:function(t){this._componentsArray.forEach(function(e){e.mouseDown(t)})},mouseMove:function(t){this._componentsArray.forEach(function(e){e.mouseMove(t)})},mouseOut:function(t){this._componentsArray.forEach(function(e){e.mouseOut(t)})},mouseDrag:function(t){this._componentsArray.forEach(function(e){e.mouseDrag(t)})},mouseWheel:function(t){this._componentsArray.forEach(function(e){e.mouseWheel(t)})},touchStart:function(t){this._componentsArray.forEach(function(e){e.touchStart(t)})},touchMove:function(t){this._componentsArray.forEach(function(e){e.touchMove(t)})},touchEnd:function(t){this._componentsArray.forEach(function(e){e.touchEnd(t)})}},{},e)}(function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._context=e},{get context(){return this._context},set context(t){this._context=t}},{},t)}(bg.LifeCycle));bg.scene.SceneObject=e}(),function(){var t=function(t){function e(t){var n=void 0!==arguments[1]?arguments[1]:"";$traceurRuntime.superConstructor(e).call(this,t,n),this._children=[],this._parent=null}return $traceurRuntime.createClass(e,{toString:function(){return $traceurRuntime.superGet(this,e.prototype,"toString").call(this)+" ("+this._children.length+" children and "+Object.keys(this._components).length+" components)"},addChild:function(t){t&&!this.isAncientOf(t)&&t!=this&&(t.parent&&t.parent.removeChild(t),this._children.push(t),t._parent=this)},removeChild:function(t){var e=this._children.indexOf(t);e>=0&&this._children.splice(e,1)},get children(){return this._children},get parent(){return this._parent},get sceneRoot(){return this._parent?this._parent.sceneRoot:this},haveChild:function(t){return-1!=this._children.indexOf(t)},isAncientOf:function(t){!function t(e,n){return!(!e||!n)&&(e._parent==n||t(e._parent,n))}(this,t)},accept:function(t){t.ignoreDisabled&&!this.enabled||(t.visit(this),this._children.forEach(function(e){e.accept(t)}),t.didVisit(this))},acceptReverse:function(t){t.ignoreDisabled&&!this.enabled||(this._parent&&this._parent.acceptReverse(t),t.visit(this))},destroy:function(){$traceurRuntime.superGet(this,e.prototype,"destroy").call(this),this._children.forEach(function(t){t.destroy()}),this._children=[]}},{CleanupNode:function(t){!function t(e){var n=[],i=[];e.forEachComponent(function(t){return n.push(t)}),e.children.forEach(function(t){return i.push(t)}),n.forEach(function(t){return e.removeComponent(t)}),i.forEach(function(n){e.removeChild(n),t(n)})}(t)}},t)}(bg.scene.SceneObject);bg.scene.Node=t;var e=function(){return $traceurRuntime.createClass(function(){this._ignoreDisabled=!0},{get ignoreDisabled(){return this._ignoreDisabled},set ignoreDisabled(t){this._ignoreDisabled=t},visit:function(t){},didVisit:function(t){}},{})}();bg.scene.NodeVisitor=e}(),function(){function t(t){if(!this._gizmo){var e=.5,n=[e,0,0,-e,0,0,0,e,0,0,-e,0,0,0,e,0,0,-e];this._gizmo=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(t,n,[1,0,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1])}return this._gizmo}var e=function(){function e(t,e){t instanceof bg.Vector3?this._offset=new bg.Vector3(t):this._offset=new bg.Vector3(0,0,0),this._radius="number"==typeof e?e:.15}return $traceurRuntime.createClass(e,{clone:function(){return new e(this._offset,this._radius)},get offset(){return this._offset},set offset(t){this._offset=t},get radius(){return this._radius},set radius(t){this._radius=t},displayGizmo:function(e,n,i){var r=t.apply(this,[e]);if(r){i.modelMatrixStack.push();var a=bg.Matrix4.Translation(this.offset.x,this.offset.y,this.offset.z);i.modelMatrixStack.mult(a),n.draw(r),i.modelMatrixStack.pop()}},serialize:function(){return{offset:this._offset.toArray(),radius:this._radius}},deserialize:function(t){t.offset&&(this._offset=new bg.Vector3(t.offset)),"number"==typeof t.radius?this._radius=t.radius:"string"==typeof t.radius&&(this._radius=Number(t.radius))}},{})}();bg.scene.AnchorPoint=e;var n=function(t){function n(){$traceurRuntime.superConstructor(n).call(this),this._anchors=[]}return $traceurRuntime.createClass(n,{clone:function(){var t=new n;return this.anchors.forEach(function(e){t.anchors.push(e.clone())}),t},get anchors(){return this._anchors},addPoint:function(t,e,n){var i=void 0!==arguments[3]?arguments[3]:.15,r=new bg.scene.AnchorPoint(new bg.Vector3(t,e,n),i);return this.anchors.push(r),r},getWorldPositionAnchors:function(){var t=this,e=[],n=bg.scene.Transform.WorldMatrix(this);return this.anchors.forEach(function(i){var r=n.multVector(new bg.Vector3(i.offset.x,i.offset.y,i.offset.z));e.push({position:[r.x,r.y,r.z],radius:i.radius,component:t})}),e},displayGizmo:function(t,e){var n=this;this.anchors.forEach(function(i){return i.displayGizmo(n.node.context,t,e)})},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.anchors=[],this.anchors.forEach(function(e){t.anchors.push(e.serialize())})},deserialize:function(t,n,i){var r=this;this._anchors=[],n.anchors.forEach(function(t){var n=new e;n.deserialize(t),r._anchors.push(n)})}},{},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,n,"bg.scene.AnchorJoint")}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._near=.1,this._far=100,this._viewport=new bg.Viewport(0,0,512,512)},{clone:function(){console.log("WARNING: ProjectionStrategy::clone() method not implemented by child class.")},get near(){return this._near},set near(t){this._near=t},get far(){return this._far},set far(t){this._far=t},get viewport(){return this._viewport},set viewport(t){this._viewport=t},get fov(){return 0},serialize:function(t){t.near=this.near,t.far=this.far}},{Factory:function(t){var r=null;return t&&("PerspectiveProjectionMethod"==t.type?r=new e:"OpticalProjectionMethod"==t.type?r=new n:"OrthographicProjectionStrategy"==t.type&&(r=new i),r&&r.deserialize(t)),r}},t)}(bg.MatrixStrategy);bg.scene.ProjectionStrategy=t;var e=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._fov=60}return $traceurRuntime.createClass(e,{clone:function(){var t=new e;return t.near=this.near,t.far=this.far,t.viewport=this.viewport,t.fov=this.fov,t},get fov(){return this._fov},set fov(t){this._fov=t},apply:function(){this.target&&this.target.perspective(this.fov,this.viewport.aspectRatio,this.near,this.far)},deserialize:function(t){this.near=t.near,this.far=t.far,this.fov=t.fov},serialize:function(t){t.type="PerspectiveProjectionMethod",t.fov=this.fov,$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t)}},{},t)}(t);bg.scene.PerspectiveProjectionStrategy=e;var n=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._focalLength=50,this._frameSize=35}return $traceurRuntime.createClass(e,{clone:function(){var t=new e;return t.near=this.near,t.far=this.far,t.viewport=this.viewport,t.focalLength=this.focalLength,t.frameSize=this.frameSize,t},get focalLength(){return this._focalLength},set focalLength(t){this._focalLength=t},get frameSize(){return this._frameSize},set frameSize(t){this._frameSize=t},get fov(){return 2*bg.Math.atan(this.frameSize/(this.focalLength/2))},apply:function(){if(this.target){var t=this.fov;t=bg.Math.radiansToDegrees(t),this.target.perspective(t,this.viewport.aspectRatio,this.near,this.far)}},deserialize:function(t){this.frameSize=t.frameSize,this.focalLength=t.focalLength,this.near=t.near,this.far=t.far},serialize:function(t){t.type="OpticalProjectionMethod",t.frameSize=this.frameSize,t.focalLength=this.focalLength,$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t)}},{},t)}(t);bg.scene.OpticalProjectionStrategy=n;var i=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._viewWidth=100}return $traceurRuntime.createClass(e,{clone:function(){var t=new e;return t.near=this.near,t.far=this.far,t.viewWidth=this.viewWidth,t},get viewWidth(){return this._viewWidth},set viewWidth(t){this._viewWidth=t},apply:function(){if(this.target){var t=this.viewport.aspectRatio,e=this.viewWidth/t,n=this.viewWidth/2,i=e/2;this.target.ortho(-n,n,-i,i,-this._far,this._far)}},deserialize:function(t){this.viewWidth=t.viewWidth,this.near=t.near,this.far=t.far},serialize:function(t){t.type="OrthographicProjectionStrategy",t.viewWidth=this.viewWidth,t.near=this.near,t.far=this.far,$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t)}},{},t)}(t);function r(){if(!this._gizmo){var t=this.projectionStrategy?this.projectionStrategy.fov:bg.Math.PI_4;t*=.5;var e=this.focus,n=bg.app.MainLoop.singleton.canvas.width/bg.app.MainLoop.singleton.canvas.height,i=bg.Math.sin(t)*e,r=bg.Math.sin(t)*e/n,a=[0,0,0,i,r,-e,0,0,0,-i,r,-e,0,0,0,i,-r,-e,0,0,0,-i,-r,-e,i,r,-e,-i,r,-e,-i,r,-e,-i,-r,-e,-i,-r,-e,i,-r,-e,i,-r,-e,i,r,-e];this._gizmo=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(this.node.context,a,[1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1])}return this._gizmo}bg.scene.OrthographicProjectionStrategy=i;var a=function(e){function n(){$traceurRuntime.superConstructor(n).call(this),this._projection=bg.Matrix4.Perspective(60,1,.1,100),this._viewport=new bg.Viewport(0,0,512,512),this._visitor=new bg.scene.TransformVisitor,this._rebuildTransform=!0,this._position=new bg.Vector3(0),this._rebuildPosition=!0,this._clearBuffers=bg.base.ClearBuffers.COLOR_DEPTH,this._focus=5,this._projectionStrategy=null,this._isMain=!1}return $traceurRuntime.createClass(n,{clone:function(){var t=new bg.scene.Camera;return t._projection=new bg.Matrix4(this._projection),t._viewport=new bg.Matrix4(this._viewport),t._projectionStrategy=this._projectionStrategy?this._projectionStrategy.clone():null,t},get projection(){return this._projection},set projection(t){this._projectionStrategy||(this._projection=t)},get viewport(){return this._viewport},set viewport(t){this._viewport=t,this._projectionStrategy&&(this._projectionStrategy.viewport=t,this._projectionStrategy.apply())},get focus(){return this._focus},set focus(t){this._focus=t,this.recalculateGizmo()},get isMain(){return this._isMain},set isMain(t){this._isMain=t},get projectionStrategy(){return this._projectionStrategy},set projectionStrategy(t){this._projectionStrategy=t,this._projectionStrategy&&(this._projectionStrategy.target=this._projection),this.recalculateGizmo()},get clearBuffers(){return this._clearBuffers},set clearBuffers(t){this._clearBuffers=t},get modelMatrix(){return this._rebuildTransform&&this.node&&(this._visitor.matrix.identity(),this.node.acceptReverse(this._visitor),this._rebuildTransform=!1),this._visitor.matrix},get viewMatrix(){return this._viewMatrix&&!this._rebuildTransform||(this._viewMatrix=new bg.Matrix4(this.modelMatrix),this._viewMatrix.invert()),this._viewMatrix},get worldPosition(){return this._rebuildPosition&&(this._position=this.modelMatrix.multVector(new bg.Vector3(0)).xyz,this._rebuildPosition=!1,this._rebuildTransform=!0),this._position},recalculateGizmo:function(){this._gizmo&&(this._gizmo.destroy(),this._gizmo=null)},frame:function(t){this._rebuildPosition=!0,this._rebuildTransform=!0},displayGizmo:function(t,e){if(!this.isMain){var n=r.apply(this);n&&t.draw(n)}},serialize:function(t,e,i){if($traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.isMain=this.isMain,this.projectionStrategy){var r={};t.projectionMethod=r,this.projectionStrategy.serialize(r)}},deserialize:function(e,n,i){n.isMain=n.isMain||!1,this.projectionStrategy=t.Factory(n.projectionMethod||{})}},{SetAsMainCamera:function(t,e){if(function t(e){e.camera&&(e.camera.isMain=!1),e.children.forEach(function(e){return t(e)})}(e),t instanceof n)t.isMain=!0;else{if(!(t instanceof bg.scene.Node&&t.camera))throw new Error("Error setting main camera: invalid camera node.");t.camera.isMain=!0}}},e)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,a,"bg.scene.Camera")}(),function(){function t(t){if(!this._gizmo){var e=.5,n=[e,0,0,-e,0,0,0,e,0,0,-e,0,0,0,e,0,0,-e];this._gizmo=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(this.node.context,n,[1,0,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1])}return this._gizmo}function e(){if(this.node){var t=bg.Matrix4.Identity();this.node.children.forEach(function(e,n){var i=e.component("bg.scene.Transform"),r=e.component("bg.scene.InputChainJoint"),a=e.component("bg.scene.OutputChainJoint");n>0&&r?r.joint.applyTransform(t):t.identity(),i&&i.matrix.assign(t),a&&a.joint.applyTransform(t)})}}var n=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this)},{clone:function(){return new bg.scene.Chain},willDisplay:function(t,n,i){e.apply(this)},willUpdate:function(t,n,i){e.apply(this)}},{},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,n,"bg.scene.Chain");var i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._joint=new bg.physics.LinkJoint},{get joint(){return this._joint},set joint(t){this._joint=t},deserialize:function(t,e,n){e.joint&&(this.joint=bg.physics.Joint.Factory(e.joint))}},{},t)}(bg.scene.Component);bg.scene.ChainJoint=i;var r=function(e){function n(t){$traceurRuntime.superConstructor(n).call(this),t?this.joint=t:this.joint.transformOrder=bg.physics.LinkTransformOrder.ROTATE_TRANSLATE}return $traceurRuntime.createClass(n,{clone:function(){var t=new bg.scene.InputChainJoint;return t.joint.assign(this.joint),t},displayGizmo:function(e,n){var i=t.apply(this,[0]);if(i){n.modelMatrixStack.push();var r=new bg.Matrix4(this.joint.transform);r.invert(),n.modelMatrixStack.mult(r),e.draw(i),n.modelMatrixStack.pop()}},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.joint={},this.joint.serialize(t.joint)}},{},e)}(i);bg.scene.registerComponent(bg.scene,r,"bg.scene.InputChainJoint");var a=function(e){function n(t){$traceurRuntime.superConstructor(n).call(this),t?this.joint=t:this.joint.transformOrder=bg.physics.LinkTransformOrder.TRANSLATE_ROTATE}return $traceurRuntime.createClass(n,{clone:function(){var t=new bg.scene.OutputChainJoint;return t.joint.assign(this.joint),t},displayGizmo:function(e,n){var i=t.apply(this,[1]);if(i){n.modelMatrixStack.push();var r=new bg.Matrix4(this.joint.transform);n.modelMatrixStack.mult(r),e.draw(i),n.modelMatrixStack.pop()}},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.joint={},this.joint.serialize(t.joint)}},{},e)}(i);bg.scene.registerComponent(bg.scene,a,"bg.scene.OutputChainJoint")}(),function(){bg.scene.CubemapImage={POSITIVE_X:0,NEGATIVE_X:1,POSITIVE_Y:2,NEGATIVE_Y:3,POSITIVE_Z:4,NEGATIVE_Z:5};var t=null,e=null,n=[],i=1;function r(t,e,n){var i=require("path"),r=bg.base.Writer.StandarizePath(this.getImageUrl(e)),a=r.split("/").pop(),s=bg.base.Writer.StandarizePath(i.join(n,a));switch(e){case bg.scene.CubemapImage.POSITIVE_X:t.positiveX=a;break;case bg.scene.CubemapImage.NEGATIVE_X:t.negativeX=a;break;case bg.scene.CubemapImage.POSITIVE_Y:t.positiveY=a;break;case bg.scene.CubemapImage.NEGATIVE_Y:t.negativeY=a;break;case bg.scene.CubemapImage.POSITIVE_Z:t.positiveZ=a;break;case bg.scene.CubemapImage.NEGATIVE_Z:t.negativeZ=a}return bg.base.Writer.CopyFile(r,s)}var a=function(a){function s(){$traceurRuntime.superConstructor(s).call(this),this._images=[null,null,null,null,null,null],this._texture=null}return $traceurRuntime.createClass(s,{setImageUrl:function(t,e){this._images[t]=e},getImageUrl:function(t){return this._images[t]},get texture(){return this._texture},set texture(t){this._texture=t},loadCubemap:function(e){var n=this;return e=e||this.node&&this.node.context,new Promise(function(i,r){bg.utils.Resource.LoadMultiple(n._images).then(function(r){n._texture=new bg.base.Texture(e),n._texture.target=bg.base.TextureTarget.CUBE_MAP,n._texture.create(),n._texture.bind(),n._texture.setCubemap(r[n.getImageUrl(bg.scene.CubemapImage.POSITIVE_X)],r[n.getImageUrl(bg.scene.CubemapImage.NEGATIVE_X)],r[n.getImageUrl(bg.scene.CubemapImage.POSITIVE_Y)],r[n.getImageUrl(bg.scene.CubemapImage.NEGATIVE_Y)],r[n.getImageUrl(bg.scene.CubemapImage.POSITIVE_Z)],r[n.getImageUrl(bg.scene.CubemapImage.NEGATIVE_Z)]),t=n._texture,bg.emitImageLoadEvent(r[n.getImageUrl(bg.scene.CubemapImage.POSITIVE_X)]),i(n)}).catch(function(t){r(t)})})},clone:function(){var t=new s;for(var e in this._images)t._images[e]=this._images[e];return t._texture=this._texture,t},deserialize:function(t,e,n){return this.setImageUrl(bg.scene.CubemapImage.POSITIVE_X,bg.utils.Resource.JoinUrl(n,e.positiveX)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_X,bg.utils.Resource.JoinUrl(n,e.negativeX)),this.setImageUrl(bg.scene.CubemapImage.POSITIVE_Y,bg.utils.Resource.JoinUrl(n,e.positiveY)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_Y,bg.utils.Resource.JoinUrl(n,e.negativeY)),this.setImageUrl(bg.scene.CubemapImage.POSITIVE_Z,bg.utils.Resource.JoinUrl(n,e.positiveZ)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_Z,bg.utils.Resource.JoinUrl(n,e.negativeZ)),this.loadCubemap(t)},serialize:function(t,e,n){$traceurRuntime.superGet(this,s.prototype,"serialize").call(this,t,e,n),bg.isElectronApp&&(e.push(r.apply(this,[t,bg.scene.CubemapImage.POSITIVE_X,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.NEGATIVE_X,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.POSITIVE_Y,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.NEGATIVE_Y,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.POSITIVE_Z,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.NEGATIVE_Z,n.path])))}},{Current:function(e){return t||(t=bg.base.TextureCache.WhiteCubemap(e)),t},IrradianceMapIntensity:function(){return i},IrradianceMap:function(t){return e||(e=bg.base.TextureCache.BlackCubemap(t)),e},SpecularMap:function(t){var e=void 0!==arguments[1]?arguments[1]:0;return n[e]||(n[e]=bg.base.TextureCache.BlackCubemap(t)),n[e]},SetCurrent:function(e){t=e},SetIrradianceMapIntensity:function(t){i=t},SetIrradiance:function(t){e=t},SetSpecular:function(t){var e=void 0!==arguments[1]?arguments[1]:0;n[e]=t}},a)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,a,"bg.scene.Cubemap")}(),function(){var t=function(t){function e(){var t=void 0!==arguments[0]?arguments[0]:"";$traceurRuntime.superConstructor(e).call(this),this._name=t,this._items=[]}return $traceurRuntime.createClass(e,{get name(){return this._name},set name(t){this._name=t},get length(){return this._items.length},clone:function(t){var e=new bg.scene.Drawable;return e.name=t||"copy of "+this.name,this.forEach(function(t,n,i){e.addPolyList(t.clone(),n.clone(),i?new bg.Matrix4(i):null)}),e},destroy:function(){this.forEach(function(t,e){t.destroy(),e&&e.destroy&&e.destroy()}),this._name="",this._items=[]},instance:function(t){var e=new bg.scene.Drawable;return e.name=t||"copy of "+this.name,this.forEach(function(t,n,i){e.addPolyList(t,n.clone(),i?new bg.Matrix4(i):null)}),e},addPolyList:function(t,e){var n=void 0!==arguments[2]?arguments[2]:null;return!(!t||-1!=this.indexOf(t))&&(this._updated=!1,e=e||new bg.base.Material,this._items.push({polyList:t,material:e,transform:n}),!0)},getExternalResources:function(){var t=void 0!==arguments[0]?arguments[0]:[];return this.forEach(function(e,n){n.getExternalResources(t)}),t},applyMaterialDefinition:function(t,e){var n=[];return this.forEach(function(i,r){var a=t[i.name];a&&n.push(new Promise(function(t,n){var s=new bg.base.MaterialModifier(a);r.applyModifier(i.context,s,e),t()}))}),Promise.all(n)},removePolyList:function(t){var e=-1;this._items.some(function(n,i){t==n.polyList&&(e=i)}),e>=0&&this._items.splice(e,1),this._updated=!1},indexOf:function(t){var e=-1;return this._items.some(function(n,i){if(n.polyList==t)return e=i,!0}),e},replacePolyList:function(t,e){return t>=0&&t<this._items.length?(this._items[t].polyList=e,!0):(this._updated=!1,!1)},replaceMaterial:function(t,e){return t>=0&&t<this._items.length&&(this._items[t].material.destroy&&this._items[t].material.destroy(),this._items[t].material=e,!0)},replaceTransform:function(t,e){return t>=0&&t<this._items.length&&(this._items[t].transform=e,!0)},getPolyList:function(t){return t>=0&&t<this._items.length&&this._items[t].polyList},getMaterial:function(t){return t>=0&&t<this._items.length&&this._items[t].material},getTransform:function(t){return t>=0&&t<this._items.length&&this._items[t].transform},forEach:function(t){var e=!0,n=!1,i=void 0;try{for(var r=void 0,a=this._items[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var s=r.value;t(s.polyList,s.material,s.transform)}}catch(t){n=!0,i=t}finally{try{e||null==a.return||a.return()}finally{if(n)throw i}}},some:function(t){var e=!0,n=!1,i=void 0;try{for(var r=void 0,a=this._items[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var s=r.value;if(t(s.polyList,s.material,s.transform))return!0}}catch(t){n=!0,i=t}finally{try{e||null==a.return||a.return()}finally{if(n)throw i}}return!1},every:function(t){var e=!0,n=!1,i=void 0;try{for(var r=void 0,a=this._items[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var s=r.value;if(!t(s.polyList,s.material,s.transform))return!1}}catch(t){n=!0,i=t}finally{try{e||null==a.return||a.return()}finally{if(n)throw i}}return!0},display:function(t,e){var n=void 0!==arguments[2]&&arguments[2];if(!t.effect)throw new Error("Could not draw component: invalid effect found.");var i=t.effect instanceof bg.base.ShadowMapEffect;this.node.enabled&&this.forEach(function(r,a,s){if(!i&&r.visible||i&&r.visibleToShadows||n){var o=t.effect.material;s&&(e.modelMatrixStack.push(),e.modelMatrixStack.mult(s)),t.shouldDraw(a)&&(t.effect.material=a,t.draw(r)),s&&e.modelMatrixStack.pop(),t.effect.material=o}})},draw:function(t,e,n,i){this.node.enabled&&this.forEach(function(i,r,a){i.visible&&(a&&(e.push(),e.mult(a)),r.isTransparent?t.renderTransparent(i,r,e.matrix,n.matrix):t.renderOpaque(i,r,e.matrix,n.matrix),a&&e.pop(a))})},displayGizmo:function(t,e){this._updated||(this._updated=!0,this._gizmoPlist=function(){var t=[],e=[],n=[],i=[],r=[],a=!1,s=0;try{this.forEach(function(o){if(o.normal.length&&o.tangent.length&&o.index.length%3==0){a=!0;for(var u=0;u<o.index.length;++u){var h=o.index[u],l=new bg.Vector3(o.vertex[3*h],o.vertex[3*h+1],o.vertex[3*h+2]),c=new bg.Vector3(o.normal[3*h],o.normal[3*h+1],o.normal[3*h+2]),f=new bg.Vector3(o.tangent[3*h],o.tangent[3*h+1],o.tangent[3*h+2]),v=new bg.Vector3(c);v.cross(f),c.scale(.4),f.scale(.4),v.scale(.4),c.add(l),f.add(l),v.add(l),t.push(l.x,l.y,l.z),e.push(0,1,0),n.push(0,0),i.push(0,1,0,1),t.push(c.x,c.y,c.z),e.push(0,1,0),n.push(0,1),i.push(0,1,0,1),t.push(l.x,l.y,l.z),e.push(0,1,0),n.push(0,0),i.push(1,0,0,1),t.push(f.x,f.y,f.z),e.push(0,1,0),n.push(0,1),i.push(1,0,0,1),t.push(l.x,l.y,l.z),e.push(0,1,0),n.push(0,0),i.push(0,0,1,1),t.push(v.x,v.y,v.z),e.push(0,1,0),n.push(0,1),i.push(0,0,1,1),r.push(s++),r.push(s++),r.push(s++),r.push(s++),r.push(s++),r.push(s++)}}})}catch(t){console.warn("Error generating drawable gizmo: "+t.message)}var o=null;return a&&((o=new bg.base.PolyList(this.node.context)).vertex=t,o.normal=e,o.texCoord0=n,o.index=r,o.color=i,o.drawMode=bg.base.DrawMode.LINES,o.build()),o}.apply(this)),this._gizmoPlist&&t.draw(this._gizmoPlist)},setGroupVisible:function(t){var e=void 0===arguments[1]||arguments[1];this.forEach(function(n){n.groupName==t&&(n.visible=e)})},hideGroup:function(t){this.setGroupVisible(t,!1)},showGroup:function(t){this.setGroupVisible(t,!0)},setVisibleByName:function(t){var e=void 0===arguments[1]||arguments[1];this.some(function(n){if(n.name==t)return n.visible=e,!0})},showByName:function(t){this.setVisibleByName(t,!0)},hideByName:function(t){this.setVisibleByName(t,!1)},deserialize:function(t,e,n){var i=this;return new Promise(function(r,a){var s=bg.utils.Resource.JoinUrl(n,e.name+".vwglb");bg.base.Loader.Load(t,s).then(function(t){var n=t.component("bg.scene.Drawable");i._name=e.name,i._items=n._items,r(i)})})},serialize:function(t,n,i){var r=this;if(bg.isElectronApp){$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t,n,i),this.name=function(t){if(t){var e=/[\/\?<>\\:\*\|":\[\]\(\)\{\}]/g,n=/[\x00-\x1f\x80-\x9f]/g,i=/^\.+$/,r=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,a=/[\. ]+$/;return s="-",t.replace(e,s).replace(n,s).replace(i,s).replace(r,s).replace(a,s)}return bg.utils.generateUUID();var s}(this.name),t.name=this.name;var a=require("path").join(i.path,t.name+".vwglb");n.push(new Promise(function(t,e){bg.base.Writer.Write(a,r.node).then(function(){return t()}).catch(function(t){return e(t)})}))}}},{InstanceNode:function(t){var n=new bg.scene.Node(t.context,t.name?"copy of "+t.name:"");return n.enabled=t.enabled,t.forEachComponent(function(t){var i=null;i=t instanceof e?t.instance():t.clone(),n.addComponent(i)}),n}},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,t,"bg.scene.Drawable")}(),function(){var t=null,e=function(e){function n(){var t=void 0!==arguments[0]?arguments[0]:null;$traceurRuntime.superConstructor(n).call(this),this._environment=t}return $traceurRuntime.createClass(n,{initCubemap:function(t,e){this._environment&&this._environment.destroy(),this._environment=new bg.base.Environment(t.context),this._environment.create(e),this._environment.equirectangularTexture=t},init:function(){null==t&&(t=this)},removedFromNode:function(){t==this&&(t=null)},get environment(){return this._environment},set environment(t){this._environment&&this._environment.destroy(),this._environment=t},get equirectangularTexture(){return this._environment&&this._environment.equirectangularTexture},set equirectangularTexture(t){this._environment?this._environment.equirectangularTexture=t:this.initCubemap(t)},clone:function(){var t=new n;return t._environment=this._environment&&this._environment.clone(),t},deserialize:function(t,e,n){var i=this;return new Promise(function(r,a){i._environment&&i._environment.destroy(),i._environment=new bg.base.Environment(t),i._environment.deserialize(e,n).then(function(){r()}).catch(function(t){a(t)})})},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),bg.isElectronApp&&this._environment&&this._environment.serialize(t,e,i)}},{Get:function(){return t}},e)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,e,"bg.scene.Environment")}(),function(){var t=[];function e(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}function n(){switch(this._light&&this._light.type){case bg.base.LightType.DIRECTIONAL:return function(t){if(!this._directionalGizmo){var n=this.node.context;this._directionalGizmo=e(n,[0,0,0,0,0,-1,0,0,-1,0,.1,-.9,0,0,-1,0,-.1,-.9],[1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1])}return this._directionalGizmo}.apply(this);case bg.base.LightType.SPOT:return function(){var t=this.node.context,n=bg.Math.degreesToRadians(this.light.spotCutoff/2),i=5*bg.Math.sin(n),r=5*bg.Math.cos(n),a=bg.Math.cos(bg.Math.PI_8)*i,s=bg.Math.cos(bg.Math.PI_4)*i,o=bg.Math.cos(bg.Math.PI_4+bg.Math.PI_8)*i,u=bg.Math.sin(bg.Math.PI_8)*i,h=bg.Math.sin(bg.Math.PI_4)*i,l=bg.Math.sin(bg.Math.PI_4+bg.Math.PI_8)*i,c=[0,0,0,0,i,-r,0,0,0,0,-i,-r,0,0,0,i,0,-r,0,0,0,-i,0,-r,0,i,-r,o,l,-r,o,l,-r,s,h,-r,s,h,-r,a,u,-r,a,u,-r,i,0,-r,i,0,-r,a,-u,-r,a,-u,-r,s,-h,-r,s,-h,-r,o,-l,-r,o,-l,-r,0,-i,-r,0,-i,-r,-o,-l,-r,-o,-l,-r,-s,-h,-r,-s,-h,-r,-a,-u,-r,-a,-u,-r,-i,0,-r,-i,0,-r,-a,u,-r,-a,u,-r,-s,h,-r,-s,h,-r,-o,l,-r,-o,l,-r,0,i,-r],f=[1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1];return this._spotGizmo?(this._spotGizmo.updateBuffer(bg.base.BufferType.VERTEX,c),this._spotGizmo.updateBuffer(bg.base.BufferType.COLOR,f)):this._spotGizmo=e(t,c,f),this._spotGizmo}.apply(this);case bg.base.LightType.POINT:return function(){if(!this._pointGizmo){var t=this.node.context,n=.5,i=bg.Math.sin(bg.Math.PI_4)*n,r=[0,0,0,0,n,0,0,0,0,0,-n,0,0,0,0,-n,0,0,0,0,0,n,0,0,0,0,0,i,i,0,0,0,0,i,-i,0,0,0,0,-i,i,0,0,0,0,-i,-i,0,0,0,0,0,0,n,0,0,0,0,0,-n,0,0,0,0,i,i,0,0,0,0,-i,i,0,0,0,0,-i,-i,0,0,0,0,i,-i,0,0,0,i,0,i,0,0,0,-i,0,i,0,0,0,-i,0,-i,0,0,0,i,0,-i];this._pointGizmo=e(t,r,[1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1])}return this._pointGizmo}.apply(this)}return null}var i=function(e){function i(){var t=void 0!==arguments[0]?arguments[0]:null;$traceurRuntime.superConstructor(i).call(this),this._light=t,this._visitor=new bg.scene.TransformVisitor,this._rebuildTransform=!0}return $traceurRuntime.createClass(i,{clone:function(){var t=new bg.scene.Light;return t.light=this.light.clone(),t},get light(){return this._light},set light(t){this._light=t},get transform(){return this._rebuildTransform&&this.node&&(this._visitor.matrix.identity(),this.node.acceptReverse(this._visitor),this._rebuildTransform=!1),this._visitor.matrix},frame:function(t){this._rebuildTransform=!0,this.transform},displayGizmo:function(t,e){var i=n.apply(this);i&&t.draw(i)},removedFromNode:function(e){var n,i;n=this,-1!=(i=t.indexOf(n))&&t.splice(i,1)},addedToNode:function(e){var n;n=this,t.push(n)},deserialize:function(t,e,n){var i=this;return new Promise(function(n,r){i._light=new bg.base.Light(t),i._light.deserialize(e),n(i)})},serialize:function(t,e,n){$traceurRuntime.superGet(this,i.prototype,"serialize").call(this,t,e,n),this.light.serialize(t)}},{GetActiveLights:function(){return t}},e)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,i,"bg.scene.Light")}(),function(){function t(t){return[Number(t[1]),Number(t[2]),Number(t[3]),t[4]?Number(t[4]):1]}var e={diffuseR:1,diffuseG:1,diffuseB:1,diffuseA:1,specularR:1,specularG:1,specularB:1,specularA:1,shininess:0,lightEmission:0,refractionAmount:0,reflectionAmount:0,textureOffsetX:0,textureOffsetY:0,textureScaleX:1,textureScaleY:1,lightmapOffsetX:0,lightmapOffsetY:0,lightmapScaleX:1,lightmapScaleY:1,normalMapOffsetX:0,normalMapOffsetY:0,normalMapScaleX:1,normalMapScaleY:1,alphaCutoff:.5,castShadows:!0,receiveShadows:!0,shininessMaskChannel:0,shininessMaskInvert:!1,lightEmissionMaskChannel:0,lightEmissionMaskInvert:!1,reflectionMaskChannel:0,reflectionMaskInvert:!1,cullFace:!0,texture:"",lightmap:"",normalMap:"",shininessMask:"",lightEmissionMask:"",reflectionMask:""},n=function(){return $traceurRuntime.createClass(function(n){var i=this;this._jsonData={},this._currentMat=JSON.parse(JSON.stringify(e)),n.split("\n").forEach(function(n){if((n=n.trim()).length>1&&"#"!=n[0])switch(n[0]){case"n":(function(t){var n=/newmtl\s+(.*)/.exec(t);n&&(this._jsonData[n[1]]=JSON.parse(JSON.stringify(e)),this._currentMat=this._jsonData[n[1]])}).apply(i,[n]);break;case"N":(function(t){var e=/Ns\s+([\d\.]+)/.exec(t);e&&(this._currentMat.shininess=Number(e[1]))}).apply(i,[n]);break;case"m":(function(t){var e=/map_Kd\s+(.*)/.exec(t);if(e){var n=e[1],i=(n=n.replace(/\\/g,"/")).lastIndexOf("/");i>=0&&(n=n.substring(i+1)),this._currentMat.texture=n}}).apply(i,[n]);break;case"d":case"T":break;case"K":(function(e){var n=/Kd\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s*([\d\.]*)/.exec(e);if(n){var i=t(n);this._currentMat.diffuseR=i[0],this._currentMat.diffuseG=i[1],this._currentMat.diffuseB=i[2],this._currentMat.diffuseA=i[3]}else if(n=/Ks\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s*([\d\.]*)/.exec(e)){var r=t(n);this._currentMat.specularR=r[0],this._currentMat.specularG=r[1],this._currentMat.specularB=r[2],this._currentMat.specularA=r[3]}}).apply(i,[n])}})},{get jsonData(){return this._jsonData}},{})}();function i(t){var e=/mtllib\s+(.*)/.exec(t);e&&(this._mtlLib=e[1])}function r(t){var e=/g\s+(.*)/.exec(t);e&&(this._currentPlist.name=e[1])}function a(t){var e=/usemtl\s+(.*)/.exec(t);e&&(this._currentPlist._matName=e[1],""==this._currentPlist.name&&(this._currentPlist.name=e[1]))}function s(t){/s\s+(.*)/.exec(t)}function o(t){this._currentPlist.vertex.push(t.vertex[0],t.vertex[1],t.vertex[2]),t.normal&&this._currentPlist.normal.push(t.normal[0],t.normal[1],t.normal[2]),t.tex&&this._currentPlist.texCoord0.push(t.tex[0],t.tex[1]),this._currentPlist.index.push(this._currentPlist.index.length)}function u(t){return t&&t.vertex&&t.tex&&t.normal}function h(t){this._addPlist=!0;var e=/f\s+(.*)/.exec(t);if(e){var n=e[1],i=/([\d\-]+)\/([\d\-]*)\/([\d\-]*)/g;if(-1==n.indexOf("/"));for(var r=[];e=i.exec(n);){var a=Number(e[1]),s=e[3]?Number(e[3]):null,h=e[2]?Number(e[2]):null;a=a<0?this._vertexArray.length+a:a-1,s=s<0?this._normalArray.length+s:null===s?null:s-1,h=h<0?this._texCoordArray.length+h:null===h?null:h-1;var l=this._vertexArray[a],c=null!==s?this._normalArray[s]:null,f=null!==h?this._texCoordArray[h]:null;r.push({vertex:l,normal:c,tex:f})}(function(t){var e=0,n=t.length;if(!(n<3))for(;e<n;){var i=e+1,r=e+2;r==n?r=0:i==n&&(i=0,r=2);var a=t[e],s=t[i],h=t[r];u(a)&&u(s)&&u(h)?(o.apply(this,[a]),o.apply(this,[s]),o.apply(this,[h])):console.warn("Invalid point data found loading OBJ file"),e+=3}}).apply(this,[r])}}function l(t){var e=/s\s+(.*)/.exec(t);e&&""==this._currentPlist.name&&(this._currentPlist.name=e[1])}function c(){this._addPlist&&(this._currentPlist&&(this._currentPlist.build(),this._plistArray.push(this._currentPlist)),this._currentPlist=new bg.base.PolyList(this.context),this._addPlist=!1)}var f=function(){return $traceurRuntime.createClass(function(t,e){this.context=t,this.url=e,this._plistArray=[],this._vertexArray=[],this._normalArray=[],this._texCoordArray=[],this._mtlLib="",this._addPlist=!0},{loadDrawableSync:function(t){var e=void 0!==arguments[1]?arguments[1]:"Object",n=this,o=new bg.scene.Drawable(e),u=t.split("\n"),f="";return u.forEach(function(t){if(t=t.trim(),f&&(t=f+t),"\\"==t[t.length-1])return t=t.substring(0,t.length-1),void(f+=t);if(f="",t.length>1&&"#"!=t[0])switch(t[0]){case"v":var e=/v\s+([\d\.\-e]+)\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t);e?n._vertexArray.push([Number(e[1]),Number(e[2]),Number(e[3])]):(e=/vn\s+([\d\.\-e]+)\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t))?n._normalArray.push([Number(e[1]),Number(e[2]),Number(e[3])]):(e=/vt\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t))?n._texCoordArray.push([Number(e[1]),Number(e[2])]):console.warn("Error parsing line "+t);break;case"m":c.apply(n),i.apply(n,[t]);break;case"g":c.apply(n),r.apply(n,[t]);break;case"u":c.apply(n),a.apply(n,[t]);break;case"s":s.apply(n,[t]);break;case"f":h.apply(n,[t]);break;case"o":c.apply(n),l.apply(n,[t])}}),this._currentPlist&&this._addPlist&&(this._currentPlist.build(),this._plistArray.push(this._currentPlist)),function(t,e){var n=this;t.forEach(function(t){var i=new bg.base.Material,r=e[t._matName];if(r){var a=n.url.substring(0,n.url.lastIndexOf("/")+1);bg.base.Material.GetMaterialWithJson(n.context,r,a).then(function(e){o.addPolyList(t,e)})}else o.addPolyList(t,i)})}.apply(this,[this._plistArray,{}]),o},loadDrawable:function(t){var e=this;return new Promise(function(o,u){var f=e.url.replace(/[\\\/]/gi,"-"),v=new bg.scene.Drawable(f),g=t.split("\n"),m="";function d(t,e){var n=this;t.forEach(function(t){var i=new bg.base.Material,r=e[t._matName];if(r){var a=n.url.substring(0,n.url.lastIndexOf("/")+1);bg.base.Material.GetMaterialWithJson(n.context,r,a).then(function(e){v.addPolyList(t,e)})}else v.addPolyList(t,i)})}if(g.forEach(function(t){if(t=t.trim(),m&&(t=m+t),"\\"==t[t.length-1])return t=t.substring(0,t.length-1),void(m+=t);if(m="",t.length>1&&"#"!=t[0])switch(t[0]){case"v":var n=/v\s+([\d\.\-e]+)\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t);n?e._vertexArray.push([Number(n[1]),Number(n[2]),Number(n[3])]):(n=/vn\s+([\d\.\-e]+)\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t))?e._normalArray.push([Number(n[1]),Number(n[2]),Number(n[3])]):(n=/vt\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t))?e._texCoordArray.push([Number(n[1]),Number(n[2])]):console.warn("Error parsing line "+t);break;case"m":c.apply(e),i.apply(e,[t]);break;case"g":c.apply(e),r.apply(e,[t]);break;case"u":c.apply(e),a.apply(e,[t]);break;case"s":s.apply(e,[t]);break;case"f":h.apply(e,[t]);break;case"o":c.apply(e),l.apply(e,[t])}}),e._currentPlist&&e._addPlist&&(e._currentPlist.build(),e._plistArray.push(e._currentPlist)),e._mtlLib){var p=e.url.substring(0,e.url.lastIndexOf("/"));p.length>0&&"/"!=p&&(p+="/"),bg.utils.Resource.Load(p+e._mtlLib).then(function(t){var i;d.apply(e,[e._plistArray,(i=t,new n(i).jsonData)]),o(v)}).catch(function(){bg.log("Warning: no such material library file for obj model "+e.url),d.apply(e,[e._plistArray,{}]),o(v)})}else d.apply(e,[e._plistArray,{}]),o(v)})}},{})}();bg.scene.OBJParser=f;var v=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return"obj"==bg.utils.Resource.GetExtension(t)},loadDataSync:function(t,e){var n=void 0!==arguments[2]?arguments[2]:"Obj model";try{var i=new f(t,e),r=null,a=i.loadDrawableSync(e,n);return a&&(r=new bg.scene.Node(t,n)).addComponent(a),r}catch(t){console.error(t)}},load:function(t,e,n){return new Promise(function(i,r){if(n)try{var a=new f(t,e),s=null,o=e.split("/");o.pop(),o=o.join("/")+"/";var u=e.split(".");u.pop(),u.push("bg2mat"),u=u.join("."),a.loadDrawable(n).then(function(e){var n=new bg.scene.Node(t,e.name);return n.addComponent(e),s=n,bg.utils.Resource.LoadJson(u)}).then(function(e){var n=[];try{s.component("bg.scene.Drawable").forEach(function(i,r){var a=null;if(e.some(function(t){if(t.name==i.name)return a=t,!0}),a){var s=bg.base.Material.FromMaterialDefinition(t,a,o);n.push(s),s.then(function(t){r.assign(t)})}})}catch(t){}return Promise.all(n)}).then(function(){i(s)}).catch(function(){i(s)})}catch(t){r(t)}else r(new Error("Error loading drawable. Data is null."))})}},{},t)}(bg.base.LoaderPlugin);bg.base.OBJLoaderPlugin=v}(),bg.scene=bg.scene||{},bg.scene.primitiveData={},bg.scene.primitiveData.cube="\no Cube_Cube.001\nv -0.500000 -0.500000 0.500000\nv -0.500000 0.500000 0.500000\nv -0.500000 -0.500000 -0.500000\nv -0.500000 0.500000 -0.500000\nv 0.500000 -0.500000 0.500000\nv 0.500000 0.500000 0.500000\nv 0.500000 -0.500000 -0.500000\nv 0.500000 0.500000 -0.500000\nvt 0.997494 0.002609\nvt 0.997494 0.997494\nvt 0.002609 0.997494\nvt 0.002609 0.002609\nvt 0.002609 0.997494\nvt 0.002609 0.002609\nvt 0.997494 0.002609\nvt 0.997494 0.997494\nvt 0.002609 0.997494\nvt 0.002609 0.002609\nvt 0.997494 0.002609\nvt 0.997494 0.997494\nvt 0.002609 0.997494\nvt 0.002609 0.002609\nvt 0.997494 0.002609\nvt 0.002609 0.997494\nvt 0.997494 0.997494\nvt 0.997494 0.002609\nvn -1.0000 0.0000 0.0000\nvn 0.0000 0.0000 -1.0000\nvn 1.0000 0.0000 0.0000\nvn 0.0000 0.0000 1.0000\nvn 0.0000 -1.0000 0.0000\nvn 0.0000 1.0000 0.0000\ns off\nf 1/1/1 2/2/1 4/3/1 3/4/1\nf 3/5/2 4/6/2 8/7/2 7/8/2\nf 7/8/3 8/9/3 6/10/3 5/11/3\nf 5/12/4 6/13/4 2/14/4 1/1/4\nf 3/4/5 7/15/5 5/12/5 1/16/5\nf 8/17/6 4/3/6 2/14/6 6/18/6\n ",bg.scene.primitiveData.sphere="\no Sphere\nv 0.000000 -0.071157 -0.494911\nv 0.000000 -0.494911 -0.071158\nv 0.010127 0.494911 -0.070433\nv 0.020047 0.479746 -0.139432\nv 0.029560 0.454816 -0.205593\nv 0.038471 0.420627 -0.267569\nv 0.046598 0.377875 -0.324098\nv 0.053777 0.327430 -0.374029\nv 0.059861 0.270320 -0.416345\nv 0.064727 0.207707 -0.450187\nv 0.068275 0.140866 -0.474863\nv 0.070433 0.071157 -0.489873\nv 0.071157 0.000000 -0.494911\nv 0.070433 -0.071157 -0.489873\nv 0.068275 -0.140866 -0.474863\nv 0.064727 -0.207707 -0.450187\nv 0.059861 -0.270320 -0.416345\nv 0.053777 -0.327430 -0.374029\nv 0.046598 -0.377875 -0.324098\nv 0.038471 -0.420627 -0.267569\nv 0.029560 -0.454816 -0.205594\nv 0.020047 -0.479746 -0.139433\nv 0.010127 -0.494911 -0.070433\nv 0.020047 0.494911 -0.068275\nv 0.039687 0.479746 -0.135160\nv 0.058518 0.454816 -0.199294\nv 0.076158 0.420627 -0.259371\nv 0.092248 0.377875 -0.314167\nv 0.106460 0.327430 -0.362568\nv 0.118504 0.270320 -0.403588\nv 0.128136 0.207707 -0.436393\nv 0.135160 0.140866 -0.460313\nv 0.139432 0.071157 -0.474863\nv 0.140866 0.000000 -0.479746\nv 0.139432 -0.071157 -0.474863\nv 0.135160 -0.140866 -0.460313\nv 0.128136 -0.207707 -0.436393\nv 0.118504 -0.270320 -0.403589\nv 0.106460 -0.327430 -0.362568\nv 0.092248 -0.377875 -0.314167\nv 0.076158 -0.420627 -0.259371\nv 0.058518 -0.454816 -0.199294\nv 0.039687 -0.479746 -0.135160\nv 0.020047 -0.494911 -0.068275\nv 0.029560 0.494911 -0.064727\nv 0.058518 0.479746 -0.128137\nv 0.086285 0.454816 -0.188937\nv 0.112295 0.420627 -0.245892\nv 0.136019 0.377875 -0.297841\nv 0.156975 0.327430 -0.343727\nv 0.174735 0.270320 -0.382616\nv 0.188937 0.207707 -0.413715\nv 0.199294 0.140866 -0.436393\nv 0.205593 0.071157 -0.450187\nv 0.207707 0.000000 -0.454816\nv 0.205593 -0.071157 -0.450187\nv 0.199294 -0.140866 -0.436393\nv 0.188937 -0.207707 -0.413715\nv 0.174735 -0.270320 -0.382616\nv 0.156975 -0.327430 -0.343727\nv 0.136019 -0.377875 -0.297841\nv 0.112295 -0.420627 -0.245892\nv 0.086285 -0.454816 -0.188938\nv 0.058518 -0.479746 -0.128137\nv 0.029560 -0.494911 -0.064727\nv 0.038470 0.494911 -0.059861\nv 0.076158 0.479746 -0.118504\nv 0.112295 0.454816 -0.174735\nv 0.146146 0.420627 -0.227408\nv 0.177022 0.377875 -0.275452\nv 0.204294 0.327430 -0.317889\nv 0.227408 0.270320 -0.353854\nv 0.245892 0.207707 -0.382616\nv 0.259370 0.140866 -0.403588\nv 0.267569 0.071157 -0.416345\nv 0.270320 0.000000 -0.420627\nv 0.267569 -0.071157 -0.416345\nv 0.259370 -0.140866 -0.403588\nv 0.245892 -0.207707 -0.382616\nv 0.227408 -0.270320 -0.353854\nv 0.204294 -0.327430 -0.317889\nv 0.177022 -0.377875 -0.275452\nv 0.146146 -0.420627 -0.227408\nv 0.112295 -0.454816 -0.174735\nv 0.076158 -0.479746 -0.118505\nv 0.038471 -0.494911 -0.059862\nv 0.046598 0.494911 -0.053777\nv 0.092248 0.479746 -0.106460\nv 0.136019 0.454816 -0.156975\nv 0.177022 0.420627 -0.204295\nv 0.214421 0.377875 -0.247455\nv 0.247455 0.327430 -0.285579\nv 0.275452 0.270320 -0.317889\nv 0.297841 0.207707 -0.343727\nv 0.314167 0.140866 -0.362568\nv 0.324097 0.071157 -0.374029\nv 0.327430 0.000000 -0.377875\nv 0.324097 -0.071157 -0.374029\nv 0.314167 -0.140866 -0.362568\nv 0.297841 -0.207707 -0.343727\nv 0.275452 -0.270320 -0.317889\nv 0.247455 -0.327430 -0.285579\nv 0.214421 -0.377875 -0.247456\nv 0.177022 -0.420627 -0.204295\nv 0.136019 -0.454816 -0.156975\nv 0.092248 -0.479746 -0.106460\nv 0.046598 -0.494911 -0.053777\nv 0.053777 0.494911 -0.046598\nv 0.106459 0.479746 -0.092248\nv 0.156975 0.454816 -0.136020\nv 0.204294 0.420627 -0.177022\nv 0.247455 0.377875 -0.214421\nv 0.285578 0.327430 -0.247455\nv 0.317888 0.270320 -0.275452\nv 0.343727 0.207707 -0.297841\nv 0.362568 0.140866 -0.314167\nv 0.374028 0.071157 -0.324098\nv 0.377875 0.000000 -0.327430\nv 0.374028 -0.071157 -0.324098\nv 0.362568 -0.140866 -0.314167\nv 0.343727 -0.207707 -0.297841\nv 0.317888 -0.270320 -0.275452\nv 0.285579 -0.327430 -0.247456\nv 0.247455 -0.377875 -0.214421\nv 0.204294 -0.420627 -0.177022\nv 0.156975 -0.454816 -0.136020\nv 0.106460 -0.479746 -0.092248\nv 0.053777 -0.494911 -0.046598\nv 0.059861 0.494911 -0.038471\nv 0.118504 0.479746 -0.076158\nv 0.174734 0.454816 -0.112295\nv 0.227408 0.420627 -0.146146\nv 0.275452 0.377875 -0.177022\nv 0.317888 0.327430 -0.204295\nv 0.353853 0.270320 -0.227408\nv 0.382615 0.207707 -0.245892\nv 0.403588 0.140866 -0.259371\nv 0.416345 0.071157 -0.267569\nv 0.420626 0.000000 -0.270321\nv 0.416345 -0.071157 -0.267569\nv 0.403588 -0.140866 -0.259371\nv 0.382615 -0.207707 -0.245892\nv 0.353854 -0.270320 -0.227408\nv 0.317888 -0.327430 -0.204295\nv 0.275452 -0.377875 -0.177022\nv 0.227408 -0.420627 -0.146147\nv 0.174735 -0.454816 -0.112295\nv 0.118504 -0.479746 -0.076158\nv 0.059861 -0.494911 -0.038471\nv 0.064727 0.494911 -0.029560\nv 0.128136 0.479746 -0.058518\nv 0.188937 0.454816 -0.086285\nv 0.245892 0.420627 -0.112295\nv 0.297841 0.377875 -0.136020\nv 0.343727 0.327430 -0.156975\nv 0.382615 0.270320 -0.174735\nv 0.413715 0.207707 -0.188938\nv 0.436393 0.140866 -0.199294\nv 0.450186 0.071157 -0.205593\nv 0.454816 0.000000 -0.207708\nv 0.450186 -0.071157 -0.205593\nv 0.436393 -0.140866 -0.199294\nv 0.413715 -0.207707 -0.188938\nv 0.382615 -0.270320 -0.174735\nv 0.343727 -0.327430 -0.156975\nv 0.297841 -0.377875 -0.136020\nv 0.245892 -0.420627 -0.112295\nv 0.188937 -0.454816 -0.086285\nv 0.128136 -0.479746 -0.058518\nv 0.064727 -0.494911 -0.029560\nv 0.068275 0.494911 -0.020048\nv 0.135160 0.479746 -0.039687\nv 0.199294 0.454816 -0.058518\nv 0.259370 0.420627 -0.076158\nv 0.314167 0.377875 -0.092248\nv 0.362568 0.327430 -0.106460\nv 0.403588 0.270320 -0.118504\nv 0.436392 0.207707 -0.128137\nv 0.460313 0.140866 -0.135160\nv 0.474863 0.071157 -0.139433\nv 0.479746 0.000000 -0.140866\nv 0.474863 -0.071157 -0.139433\nv 0.460313 -0.140866 -0.135160\nv 0.436392 -0.207707 -0.128137\nv 0.403588 -0.270320 -0.118504\nv 0.362568 -0.327430 -0.106460\nv 0.314167 -0.377875 -0.092248\nv 0.259370 -0.420627 -0.076158\nv 0.199294 -0.454816 -0.058518\nv 0.135160 -0.479746 -0.039687\nv 0.068275 -0.494911 -0.020048\nv -0.000000 0.500000 -0.000000\nv 0.070433 0.494911 -0.010127\nv 0.139432 0.479746 -0.020048\nv 0.205593 0.454816 -0.029560\nv 0.267569 0.420627 -0.038471\nv 0.324097 0.377875 -0.046598\nv 0.374028 0.327430 -0.053777\nv 0.416345 0.270320 -0.059862\nv 0.450186 0.207707 -0.064727\nv 0.474863 0.140866 -0.068275\nv 0.489873 0.071157 -0.070433\nv 0.494910 0.000000 -0.071158\nv 0.489873 -0.071157 -0.070433\nv 0.474863 -0.140866 -0.068275\nv 0.450186 -0.207707 -0.064727\nv 0.416345 -0.270320 -0.059862\nv 0.374028 -0.327430 -0.053777\nv 0.324097 -0.377875 -0.046598\nv 0.267569 -0.420627 -0.038471\nv 0.205593 -0.454816 -0.029560\nv 0.139432 -0.479746 -0.020048\nv 0.070433 -0.494911 -0.010127\nv 0.071157 0.494911 -0.000000\nv 0.140866 0.479746 -0.000000\nv 0.207707 0.454816 -0.000000\nv 0.270320 0.420627 -0.000000\nv 0.327430 0.377875 -0.000000\nv 0.377875 0.327430 -0.000000\nv 0.420626 0.270320 -0.000000\nv 0.454816 0.207707 -0.000000\nv 0.479746 0.140866 -0.000000\nv 0.494910 0.071157 -0.000000\nv 0.500000 0.000000 -0.000000\nv 0.494910 -0.071157 -0.000000\nv 0.479746 -0.140866 -0.000000\nv 0.454816 -0.207707 -0.000000\nv 0.420627 -0.270320 -0.000000\nv 0.377875 -0.327430 -0.000000\nv 0.327430 -0.377875 -0.000000\nv 0.270320 -0.420627 -0.000000\nv 0.207707 -0.454816 -0.000000\nv 0.140866 -0.479746 -0.000000\nv 0.071157 -0.494911 -0.000000\nv 0.070433 0.494911 0.010126\nv 0.139432 0.479746 0.020047\nv 0.205593 0.454816 0.029560\nv 0.267569 0.420627 0.038470\nv 0.324097 0.377875 0.046598\nv 0.374028 0.327430 0.053777\nv 0.416345 0.270320 0.059861\nv 0.450186 0.207707 0.064727\nv 0.474863 0.140866 0.068275\nv 0.489873 0.071157 0.070433\nv 0.494910 0.000000 0.071157\nv 0.489873 -0.071157 0.070433\nv 0.474863 -0.140866 0.068275\nv 0.450186 -0.207707 0.064727\nv 0.416345 -0.270320 0.059861\nv 0.374028 -0.327430 0.053777\nv 0.324097 -0.377875 0.046598\nv 0.267569 -0.420627 0.038470\nv 0.205593 -0.454816 0.029560\nv 0.139432 -0.479746 0.020047\nv 0.070433 -0.494911 0.010126\nv 0.068275 0.494911 0.020047\nv 0.135160 0.479746 0.039686\nv 0.199294 0.454816 0.058518\nv 0.259370 0.420627 0.076158\nv 0.314167 0.377875 0.092247\nv 0.362568 0.327430 0.106459\nv 0.403588 0.270320 0.118504\nv 0.436392 0.207707 0.128136\nv 0.460313 0.140866 0.135160\nv 0.474863 0.071157 0.139432\nv 0.479746 0.000000 0.140866\nv 0.474863 -0.071157 0.139432\nv 0.460313 -0.140866 0.135160\nv 0.436392 -0.207707 0.128136\nv 0.403588 -0.270320 0.118504\nv 0.362568 -0.327430 0.106459\nv 0.314167 -0.377875 0.092247\nv 0.259370 -0.420627 0.076158\nv 0.199294 -0.454816 0.058518\nv 0.135160 -0.479746 0.039686\nv 0.068275 -0.494911 0.020047\nv 0.064727 0.494911 0.029559\nv 0.128136 0.479746 0.058518\nv 0.188937 0.454816 0.086284\nv 0.245892 0.420627 0.112295\nv 0.297841 0.377875 0.136019\nv 0.343727 0.327430 0.156974\nv 0.382615 0.270320 0.174734\nv 0.413715 0.207707 0.188937\nv 0.436392 0.140866 0.199294\nv 0.450186 0.071157 0.205593\nv 0.454816 0.000000 0.207707\nv 0.450186 -0.071157 0.205593\nv 0.436393 -0.140866 0.199294\nv 0.413715 -0.207707 0.188937\nv 0.382615 -0.270320 0.174734\nv 0.343727 -0.327430 0.156975\nv 0.297841 -0.377875 0.136019\nv 0.245892 -0.420627 0.112295\nv 0.188937 -0.454816 0.086284\nv 0.128136 -0.479746 0.058518\nv 0.064727 -0.494911 0.029560\nv 0.059861 0.494911 0.038470\nv 0.118504 0.479746 0.076158\nv 0.174734 0.454816 0.112295\nv 0.227408 0.420627 0.146146\nv 0.275452 0.377875 0.177022\nv 0.317888 0.327430 0.204294\nv 0.353854 0.270320 0.227408\nv 0.382615 0.207707 0.245892\nv 0.403588 0.140866 0.259370\nv 0.416345 0.071157 0.267569\nv 0.420627 0.000000 0.270320\nv 0.416345 -0.071157 0.267569\nv 0.403588 -0.140866 0.259370\nv 0.382615 -0.207707 0.245892\nv 0.353854 -0.270320 0.227408\nv 0.317888 -0.327430 0.204294\nv 0.275452 -0.377875 0.177022\nv 0.227408 -0.420627 0.146146\nv 0.174735 -0.454816 0.112295\nv 0.118504 -0.479746 0.076158\nv 0.059861 -0.494911 0.038470\nv 0.053777 0.494911 0.046598\nv 0.106459 0.479746 0.092247\nv 0.156975 0.454816 0.136019\nv 0.204294 0.420627 0.177022\nv 0.247455 0.377875 0.214421\nv 0.285579 0.327430 0.247455\nv 0.317888 0.270320 0.275451\nv 0.343727 0.207707 0.297841\nv 0.362568 0.140866 0.314167\nv 0.374028 0.071157 0.324097\nv 0.377875 0.000000 0.327430\nv 0.374028 -0.071157 0.324097\nv 0.362568 -0.140866 0.314167\nv 0.343727 -0.207707 0.297841\nv 0.317888 -0.270320 0.275452\nv 0.285579 -0.327430 0.247455\nv 0.247455 -0.377875 0.214421\nv 0.204294 -0.420627 0.177022\nv 0.156975 -0.454816 0.136019\nv 0.106460 -0.479746 0.092247\nv 0.053777 -0.494911 0.046598\nv 0.046598 0.494911 0.053777\nv 0.092248 0.479746 0.106459\nv 0.136019 0.454816 0.156974\nv 0.177022 0.420627 0.204294\nv 0.214421 0.377875 0.247455\nv 0.247455 0.327430 0.285578\nv 0.275452 0.270320 0.317888\nv 0.297841 0.207707 0.343726\nv 0.314167 0.140866 0.362568\nv 0.324097 0.071157 0.374028\nv 0.327430 0.000000 0.377874\nv 0.324097 -0.071157 0.374028\nv 0.314167 -0.140866 0.362568\nv 0.297841 -0.207707 0.343726\nv 0.275452 -0.270320 0.317888\nv 0.247455 -0.327430 0.285578\nv 0.214421 -0.377875 0.247455\nv 0.177022 -0.420627 0.204294\nv 0.136019 -0.454816 0.156974\nv 0.092248 -0.479746 0.106459\nv 0.046598 -0.494911 0.053777\nv 0.038470 0.494911 0.059861\nv 0.076158 0.479746 0.118504\nv 0.112295 0.454816 0.174734\nv 0.146146 0.420627 0.227408\nv 0.177022 0.377875 0.275452\nv 0.204294 0.327430 0.317888\nv 0.227408 0.270320 0.353853\nv 0.245892 0.207707 0.382615\nv 0.259370 0.140866 0.403588\nv 0.267569 0.071157 0.416345\nv 0.270320 0.000000 0.420626\nv 0.267569 -0.071157 0.416345\nv 0.259370 -0.140866 0.403588\nv 0.245892 -0.207707 0.382615\nv 0.227408 -0.270320 0.353853\nv 0.204294 -0.327430 0.317888\nv 0.177022 -0.377875 0.275452\nv 0.146146 -0.420627 0.227408\nv 0.112295 -0.454816 0.174734\nv 0.076158 -0.479746 0.118504\nv 0.038471 -0.494911 0.059861\nv 0.029560 0.494911 0.064726\nv 0.058518 0.479746 0.128136\nv 0.086285 0.454816 0.188937\nv 0.112295 0.420627 0.245892\nv 0.136019 0.377875 0.297841\nv 0.156975 0.327430 0.343726\nv 0.174735 0.270320 0.382615\nv 0.188937 0.207707 0.413715\nv 0.199294 0.140866 0.436392\nv 0.205593 0.071157 0.450186\nv 0.207707 0.000000 0.454815\nv 0.205593 -0.071157 0.450186\nv 0.199294 -0.140866 0.436392\nv 0.188937 -0.207707 0.413715\nv 0.174735 -0.270320 0.382615\nv 0.156975 -0.327430 0.343727\nv 0.136019 -0.377875 0.297841\nv 0.112295 -0.420627 0.245892\nv 0.086285 -0.454816 0.188937\nv 0.058518 -0.479746 0.128136\nv 0.029560 -0.494911 0.064727\nv 0.020047 0.494911 0.068274\nv 0.039687 0.479746 0.135160\nv 0.058518 0.454816 0.199293\nv 0.076158 0.420627 0.259370\nv 0.092248 0.377875 0.314167\nv 0.106460 0.327430 0.362568\nv 0.118504 0.270320 0.403588\nv 0.128136 0.207707 0.436392\nv 0.135160 0.140866 0.460313\nv 0.139432 0.071157 0.474863\nv 0.140866 0.000000 0.479746\nv 0.139432 -0.071157 0.474863\nv 0.135160 -0.140866 0.460313\nv 0.128136 -0.207707 0.436392\nv 0.118504 -0.270320 0.403588\nv 0.106460 -0.327430 0.362568\nv 0.092248 -0.377875 0.314167\nv 0.076158 -0.420627 0.259370\nv 0.058518 -0.454816 0.199293\nv 0.039687 -0.479746 0.135160\nv 0.020047 -0.494911 0.068275\nv 0.010127 0.494911 0.070432\nv 0.020047 0.479746 0.139432\nv 0.029560 0.454816 0.205593\nv 0.038471 0.420627 0.267568\nv 0.046598 0.377875 0.324097\nv 0.053777 0.327430 0.374028\nv 0.059861 0.270320 0.416345\nv 0.064727 0.207707 0.450186\nv 0.068275 0.140866 0.474863\nv 0.070433 0.071157 0.489873\nv 0.071157 0.000000 0.494910\nv 0.070433 -0.071157 0.489873\nv 0.068275 -0.140866 0.474863\nv 0.064727 -0.207707 0.450186\nv 0.059861 -0.270320 0.416345\nv 0.053777 -0.327430 0.374028\nv 0.046598 -0.377875 0.324097\nv 0.038471 -0.420627 0.267569\nv 0.029560 -0.454816 0.205593\nv 0.020047 -0.479746 0.139432\nv 0.010127 -0.494911 0.070433\nv -0.000000 0.494911 0.071157\nv -0.000000 0.479746 0.140866\nv -0.000000 0.454816 0.207707\nv -0.000000 0.420627 0.270320\nv 0.000000 0.377875 0.327430\nv 0.000000 0.327430 0.377874\nv -0.000000 0.270320 0.420626\nv -0.000000 0.207707 0.454815\nv 0.000000 0.140866 0.479746\nv 0.000000 0.071157 0.494910\nv 0.000000 0.000000 0.499999\nv 0.000000 -0.071157 0.494910\nv -0.000000 -0.140866 0.479746\nv 0.000000 -0.207707 0.454815\nv -0.000000 -0.270320 0.420626\nv -0.000000 -0.327430 0.377874\nv -0.000000 -0.377875 0.327430\nv -0.000000 -0.420627 0.270320\nv -0.000000 -0.454816 0.207707\nv -0.000000 -0.479746 0.140866\nv 0.000000 -0.494911 0.071157\nv -0.010127 0.494911 0.070433\nv -0.020047 0.479746 0.139432\nv -0.029560 0.454816 0.205593\nv -0.038471 0.420627 0.267568\nv -0.046598 0.377875 0.324097\nv -0.053777 0.327430 0.374028\nv -0.059861 0.270320 0.416345\nv -0.064727 0.207707 0.450186\nv -0.068275 0.140866 0.474863\nv -0.070433 0.071157 0.489873\nv -0.071157 0.000000 0.494910\nv -0.070433 -0.071157 0.489873\nv -0.068275 -0.140866 0.474863\nv -0.064727 -0.207707 0.450186\nv -0.059861 -0.270320 0.416345\nv -0.053777 -0.327430 0.374028\nv -0.046598 -0.377875 0.324097\nv -0.038471 -0.420627 0.267569\nv -0.029560 -0.454816 0.205593\nv -0.020047 -0.479746 0.139432\nv -0.010127 -0.494911 0.070433\nv -0.020047 0.494911 0.068274\nv -0.039687 0.479746 0.135160\nv -0.058518 0.454816 0.199293\nv -0.076158 0.420627 0.259370\nv -0.092248 0.377875 0.314167\nv -0.106460 0.327430 0.362568\nv -0.118504 0.270320 0.403588\nv -0.128136 0.207707 0.436392\nv -0.135160 0.140866 0.460313\nv -0.139432 0.071157 0.474863\nv -0.140866 0.000000 0.479746\nv -0.139432 -0.071157 0.474863\nv -0.135160 -0.140866 0.460313\nv -0.128136 -0.207707 0.436392\nv -0.118504 -0.270320 0.403588\nv -0.106460 -0.327430 0.362568\nv -0.092248 -0.377875 0.314167\nv -0.076158 -0.420627 0.259370\nv -0.058518 -0.454816 0.199293\nv -0.039687 -0.479746 0.135160\nv -0.020047 -0.494911 0.068275\nv -0.029560 0.494911 0.064726\nv -0.058518 0.479746 0.128136\nv -0.086285 0.454816 0.188937\nv -0.112295 0.420627 0.245892\nv -0.136019 0.377875 0.297841\nv -0.156975 0.327430 0.343726\nv -0.174735 0.270320 0.382615\nv -0.188937 0.207707 0.413715\nv -0.199294 0.140866 0.436392\nv -0.205593 0.071157 0.450186\nv -0.207707 0.000000 0.454815\nv -0.205593 -0.071157 0.450186\nv -0.199294 -0.140866 0.436392\nv -0.188937 -0.207707 0.413715\nv -0.174735 -0.270320 0.382615\nv -0.156975 -0.327430 0.343727\nv -0.136019 -0.377875 0.297841\nv -0.112295 -0.420627 0.245892\nv -0.086285 -0.454816 0.188937\nv -0.058518 -0.479746 0.128136\nv -0.029560 -0.494911 0.064727\nv 0.000000 -0.500000 -0.000000\nv -0.038470 0.494911 0.059861\nv -0.076158 0.479746 0.118504\nv -0.112295 0.454816 0.174734\nv -0.146146 0.420627 0.227408\nv -0.177022 0.377875 0.275452\nv -0.204294 0.327430 0.317888\nv -0.227408 0.270320 0.353853\nv -0.245892 0.207707 0.382615\nv -0.259370 0.140866 0.403588\nv -0.267569 0.071157 0.416345\nv -0.270320 0.000000 0.420626\nv -0.267569 -0.071157 0.416345\nv -0.259370 -0.140866 0.403588\nv -0.245892 -0.207707 0.382615\nv -0.227408 -0.270320 0.353853\nv -0.204295 -0.327430 0.317888\nv -0.177022 -0.377875 0.275452\nv -0.146146 -0.420627 0.227408\nv -0.112295 -0.454816 0.174734\nv -0.076158 -0.479746 0.118504\nv -0.038471 -0.494911 0.059861\nv -0.046598 0.494911 0.053777\nv -0.092248 0.479746 0.106459\nv -0.136019 0.454816 0.156974\nv -0.177022 0.420627 0.204294\nv -0.214421 0.377875 0.247455\nv -0.247455 0.327430 0.285578\nv -0.275452 0.270320 0.317888\nv -0.297841 0.207707 0.343726\nv -0.314167 0.140866 0.362568\nv -0.324097 0.071157 0.374028\nv -0.327430 0.000000 0.377874\nv -0.324097 -0.071157 0.374028\nv -0.314167 -0.140866 0.362568\nv -0.297841 -0.207707 0.343726\nv -0.275452 -0.270320 0.317888\nv -0.247455 -0.327430 0.285578\nv -0.214421 -0.377875 0.247455\nv -0.177022 -0.420627 0.204294\nv -0.136019 -0.454816 0.156974\nv -0.092248 -0.479746 0.106459\nv -0.046598 -0.494911 0.053777\nv -0.053777 0.494911 0.046598\nv -0.106459 0.479746 0.092247\nv -0.156975 0.454816 0.136019\nv -0.204294 0.420627 0.177022\nv -0.247455 0.377875 0.214421\nv -0.285578 0.327430 0.247455\nv -0.317888 0.270320 0.275451\nv -0.343727 0.207707 0.297841\nv -0.362568 0.140866 0.314167\nv -0.374028 0.071157 0.324097\nv -0.377875 0.000000 0.327430\nv -0.374028 -0.071157 0.324097\nv -0.362568 -0.140866 0.314167\nv -0.343727 -0.207707 0.297841\nv -0.317888 -0.270320 0.275452\nv -0.285579 -0.327430 0.247455\nv -0.247455 -0.377875 0.214421\nv -0.204295 -0.420627 0.177022\nv -0.156975 -0.454816 0.136019\nv -0.106460 -0.479746 0.092247\nv -0.053777 -0.494911 0.046598\nv -0.059861 0.494911 0.038470\nv -0.118504 0.479746 0.076158\nv -0.174734 0.454816 0.112295\nv -0.227408 0.420627 0.146146\nv -0.275452 0.377875 0.177022\nv -0.317888 0.327430 0.204294\nv -0.353853 0.270320 0.227408\nv -0.382615 0.207707 0.245892\nv -0.403588 0.140866 0.259370\nv -0.416345 0.071157 0.267568\nv -0.420626 0.000000 0.270320\nv -0.416345 -0.071157 0.267568\nv -0.403588 -0.140866 0.259370\nv -0.382615 -0.207707 0.245892\nv -0.353854 -0.270320 0.227408\nv -0.317888 -0.327430 0.204294\nv -0.275452 -0.377875 0.177022\nv -0.227408 -0.420627 0.146146\nv -0.174735 -0.454816 0.112295\nv -0.118504 -0.479746 0.076158\nv -0.059861 -0.494911 0.038470\nv -0.064727 0.494911 0.029559\nv -0.128136 0.479746 0.058518\nv -0.188937 0.454816 0.086284\nv -0.245892 0.420627 0.112295\nv -0.297841 0.377875 0.136019\nv -0.343727 0.327430 0.156975\nv -0.382615 0.270320 0.174734\nv -0.413715 0.207707 0.188937\nv -0.436392 0.140866 0.199294\nv -0.450186 0.071157 0.205593\nv -0.454816 0.000000 0.207707\nv -0.450186 -0.071157 0.205593\nv -0.436393 -0.140866 0.199293\nv -0.413715 -0.207707 0.188937\nv -0.382615 -0.270320 0.174734\nv -0.343727 -0.327430 0.156975\nv -0.297841 -0.377875 0.136019\nv -0.245892 -0.420627 0.112295\nv -0.188937 -0.454816 0.086284\nv -0.128136 -0.479746 0.058518\nv -0.064727 -0.494911 0.029560\nv -0.068275 0.494911 0.020047\nv -0.135160 0.479746 0.039686\nv -0.199294 0.454816 0.058518\nv -0.259370 0.420627 0.076158\nv -0.314167 0.377875 0.092248\nv -0.362568 0.327430 0.106459\nv -0.403588 0.270320 0.118504\nv -0.436392 0.207707 0.128136\nv -0.460313 0.140866 0.135160\nv -0.474863 0.071157 0.139432\nv -0.479746 0.000000 0.140866\nv -0.474863 -0.071157 0.139432\nv -0.460313 -0.140866 0.135160\nv -0.436392 -0.207707 0.128136\nv -0.403588 -0.270320 0.118504\nv -0.362568 -0.327430 0.106459\nv -0.314167 -0.377875 0.092247\nv -0.259371 -0.420627 0.076158\nv -0.199294 -0.454816 0.058518\nv -0.135160 -0.479746 0.039686\nv -0.068275 -0.494911 0.020047\nv -0.070433 0.494911 0.010126\nv -0.139432 0.479746 0.020047\nv -0.205593 0.454816 0.029559\nv -0.267569 0.420627 0.038470\nv -0.324097 0.377875 0.046598\nv -0.374028 0.327430 0.053777\nv -0.416345 0.270320 0.059861\nv -0.450186 0.207707 0.064727\nv -0.474863 0.140866 0.068275\nv -0.489873 0.071157 0.070433\nv -0.494910 0.000000 0.071157\nv -0.489873 -0.071157 0.070433\nv -0.474863 -0.140866 0.068275\nv -0.450186 -0.207707 0.064727\nv -0.416345 -0.270320 0.059861\nv -0.374028 -0.327430 0.053777\nv -0.324097 -0.377875 0.046598\nv -0.267569 -0.420627 0.038470\nv -0.205593 -0.454816 0.029560\nv -0.139432 -0.479746 0.020047\nv -0.070433 -0.494911 0.010126\nv -0.071157 0.494911 -0.000000\nv -0.140866 0.479746 -0.000000\nv -0.207707 0.454816 -0.000000\nv -0.270320 0.420627 -0.000000\nv -0.327430 0.377875 -0.000000\nv -0.377874 0.327430 -0.000000\nv -0.420626 0.270320 -0.000000\nv -0.454816 0.207707 -0.000000\nv -0.479746 0.140866 -0.000000\nv -0.494910 0.071157 -0.000000\nv -0.500000 0.000000 -0.000000\nv -0.494910 -0.071157 -0.000000\nv -0.479746 -0.140866 -0.000000\nv -0.454816 -0.207707 -0.000000\nv -0.420627 -0.270320 -0.000000\nv -0.377875 -0.327430 -0.000000\nv -0.327430 -0.377875 -0.000000\nv -0.270320 -0.420627 -0.000000\nv -0.207707 -0.454816 -0.000000\nv -0.140866 -0.479746 -0.000000\nv -0.071157 -0.494911 -0.000000\nv -0.070433 0.494911 -0.010127\nv -0.139432 0.479746 -0.020048\nv -0.205593 0.454816 -0.029560\nv -0.267569 0.420627 -0.038471\nv -0.324097 0.377875 -0.046598\nv -0.374028 0.327430 -0.053777\nv -0.416345 0.270320 -0.059862\nv -0.450186 0.207707 -0.064727\nv -0.474863 0.140866 -0.068275\nv -0.489873 0.071157 -0.070433\nv -0.494910 0.000000 -0.071158\nv -0.489873 -0.071157 -0.070433\nv -0.474863 -0.140866 -0.068275\nv -0.450186 -0.207707 -0.064727\nv -0.416345 -0.270320 -0.059862\nv -0.374028 -0.327430 -0.053777\nv -0.324097 -0.377875 -0.046598\nv -0.267569 -0.420627 -0.038471\nv -0.205593 -0.454816 -0.029560\nv -0.139432 -0.479746 -0.020048\nv -0.070433 -0.494911 -0.010127\nv -0.068275 0.494911 -0.020048\nv -0.135160 0.479746 -0.039687\nv -0.199294 0.454816 -0.058518\nv -0.259370 0.420627 -0.076158\nv -0.314167 0.377875 -0.092248\nv -0.362568 0.327430 -0.106460\nv -0.403588 0.270320 -0.118504\nv -0.436392 0.207707 -0.128137\nv -0.460313 0.140866 -0.135160\nv -0.474863 0.071157 -0.139433\nv -0.479746 0.000000 -0.140866\nv -0.474863 -0.071157 -0.139433\nv -0.460313 -0.140866 -0.135160\nv -0.436392 -0.207707 -0.128137\nv -0.403588 -0.270320 -0.118504\nv -0.362568 -0.327430 -0.106460\nv -0.314167 -0.377875 -0.092248\nv -0.259371 -0.420627 -0.076158\nv -0.199294 -0.454816 -0.058518\nv -0.135160 -0.479746 -0.039687\nv -0.068275 -0.494911 -0.020048\nv -0.064727 0.494911 -0.029560\nv -0.128136 0.479746 -0.058518\nv -0.188937 0.454816 -0.086285\nv -0.245892 0.420627 -0.112295\nv -0.297841 0.377875 -0.136020\nv -0.343727 0.327430 -0.156975\nv -0.382615 0.270320 -0.174735\nv -0.413715 0.207707 -0.188938\nv -0.436392 0.140866 -0.199294\nv -0.450186 0.071157 -0.205593\nv -0.454816 0.000000 -0.207708\nv -0.450186 -0.071157 -0.205593\nv -0.436392 -0.140866 -0.199294\nv -0.413715 -0.207707 -0.188937\nv -0.382615 -0.270320 -0.174735\nv -0.343727 -0.327430 -0.156975\nv -0.297841 -0.377875 -0.136020\nv -0.245892 -0.420627 -0.112295\nv -0.188937 -0.454816 -0.086285\nv -0.128136 -0.479746 -0.058518\nv -0.064727 -0.494911 -0.029560\nv -0.059861 0.494911 -0.038471\nv -0.118504 0.479746 -0.076158\nv -0.174734 0.454816 -0.112295\nv -0.227408 0.420627 -0.146146\nv -0.275452 0.377875 -0.177022\nv -0.317888 0.327430 -0.204295\nv -0.353853 0.270320 -0.227408\nv -0.382615 0.207707 -0.245892\nv -0.403588 0.140866 -0.259371\nv -0.416345 0.071157 -0.267569\nv -0.420626 0.000000 -0.270320\nv -0.416345 -0.071157 -0.267569\nv -0.403588 -0.140866 -0.259371\nv -0.382615 -0.207707 -0.245892\nv -0.353854 -0.270320 -0.227408\nv -0.317888 -0.327430 -0.204295\nv -0.275452 -0.377875 -0.177022\nv -0.227408 -0.420627 -0.146147\nv -0.174735 -0.454816 -0.112295\nv -0.118504 -0.479746 -0.076158\nv -0.059861 -0.494911 -0.038471\nv -0.053777 0.494911 -0.046598\nv -0.106459 0.479746 -0.092248\nv -0.156975 0.454816 -0.136020\nv -0.204294 0.420627 -0.177022\nv -0.247455 0.377875 -0.214421\nv -0.285578 0.327430 -0.247455\nv -0.317888 0.270320 -0.275452\nv -0.343727 0.207707 -0.297841\nv -0.362568 0.140866 -0.314167\nv -0.374028 0.071157 -0.324098\nv -0.377874 0.000000 -0.327430\nv -0.374028 -0.071157 -0.324098\nv -0.362568 -0.140866 -0.314167\nv -0.343727 -0.207707 -0.297841\nv -0.317888 -0.270320 -0.275452\nv -0.285579 -0.327430 -0.247456\nv -0.247455 -0.377875 -0.214421\nv -0.204295 -0.420627 -0.177022\nv -0.156975 -0.454816 -0.136020\nv -0.106460 -0.479746 -0.092248\nv -0.053777 -0.494911 -0.046598\nv -0.046598 0.494911 -0.053777\nv -0.092248 0.479746 -0.106460\nv -0.136019 0.454816 -0.156975\nv -0.177022 0.420627 -0.204295\nv -0.214421 0.377875 -0.247455\nv -0.247455 0.327430 -0.285579\nv -0.275452 0.270320 -0.317888\nv -0.297841 0.207707 -0.343727\nv -0.314167 0.140866 -0.362568\nv -0.324097 0.071157 -0.374029\nv -0.327430 0.000000 -0.377875\nv -0.324097 -0.071157 -0.374029\nv -0.314167 -0.140866 -0.362568\nv -0.297841 -0.207707 -0.343727\nv -0.275452 -0.270320 -0.317889\nv -0.247455 -0.327430 -0.285579\nv -0.214421 -0.377875 -0.247456\nv -0.177022 -0.420627 -0.204295\nv -0.136019 -0.454816 -0.156975\nv -0.092248 -0.479746 -0.106460\nv -0.046598 -0.494911 -0.053777\nv -0.038470 0.494911 -0.059861\nv -0.076158 0.479746 -0.118504\nv -0.112295 0.454816 -0.174735\nv -0.146146 0.420627 -0.227408\nv -0.177022 0.377875 -0.275452\nv -0.204294 0.327430 -0.317888\nv -0.227408 0.270320 -0.353854\nv -0.245892 0.207707 -0.382615\nv -0.259370 0.140866 -0.403588\nv -0.267569 0.071157 -0.416345\nv -0.270320 0.000000 -0.420627\nv -0.267569 -0.071157 -0.416345\nv -0.259370 -0.140866 -0.403588\nv -0.245892 -0.207707 -0.382615\nv -0.227408 -0.270320 -0.353854\nv -0.204294 -0.327430 -0.317889\nv -0.177022 -0.377875 -0.275452\nv -0.146146 -0.420627 -0.227408\nv -0.112295 -0.454816 -0.174735\nv -0.076158 -0.479746 -0.118505\nv -0.038471 -0.494911 -0.059862\nv -0.029560 0.494911 -0.064727\nv -0.058518 0.479746 -0.128137\nv -0.086285 0.454816 -0.188937\nv -0.112295 0.420627 -0.245892\nv -0.136019 0.377875 -0.297841\nv -0.156975 0.327430 -0.343727\nv -0.174734 0.270320 -0.382615\nv -0.188937 0.207707 -0.413715\nv -0.199294 0.140866 -0.436393\nv -0.205593 0.071157 -0.450187\nv -0.207707 0.000000 -0.454816\nv -0.205593 -0.071157 -0.450187\nv -0.199294 -0.140866 -0.436393\nv -0.188937 -0.207707 -0.413715\nv -0.174735 -0.270320 -0.382616\nv -0.156975 -0.327430 -0.343727\nv -0.136019 -0.377875 -0.297841\nv -0.112295 -0.420627 -0.245892\nv -0.086285 -0.454816 -0.188938\nv -0.058518 -0.479746 -0.128137\nv -0.029560 -0.494911 -0.064727\nv -0.020047 0.494911 -0.068275\nv -0.039687 0.479746 -0.135160\nv -0.058518 0.454816 -0.199294\nv -0.076158 0.420627 -0.259371\nv -0.092248 0.377875 -0.314167\nv -0.106460 0.327430 -0.362568\nv -0.118504 0.270320 -0.403588\nv -0.128136 0.207707 -0.436392\nv -0.135160 0.140866 -0.460313\nv -0.139432 0.071157 -0.474863\nv -0.140866 0.000000 -0.479746\nv -0.139432 -0.071157 -0.474863\nv -0.135160 -0.140866 -0.460313\nv -0.128136 -0.207707 -0.436392\nv -0.118504 -0.270320 -0.403588\nv -0.106460 -0.327430 -0.362568\nv -0.092248 -0.377875 -0.314167\nv -0.076158 -0.420627 -0.259371\nv -0.058518 -0.454816 -0.199294\nv -0.039687 -0.479746 -0.135160\nv -0.020047 -0.494911 -0.068275\nv -0.010127 0.494911 -0.070433\nv -0.020047 0.479746 -0.139432\nv -0.029560 0.454816 -0.205593\nv -0.038471 0.420627 -0.267569\nv -0.046598 0.377875 -0.324098\nv -0.053777 0.327430 -0.374029\nv -0.059861 0.270320 -0.416345\nv -0.064727 0.207707 -0.450186\nv -0.068275 0.140866 -0.474863\nv -0.070433 0.071157 -0.489873\nv -0.071157 0.000000 -0.494910\nv -0.070433 -0.071157 -0.489873\nv -0.068275 -0.140866 -0.474863\nv -0.064727 -0.207707 -0.450186\nv -0.059861 -0.270320 -0.416345\nv -0.053777 -0.327430 -0.374029\nv -0.046598 -0.377875 -0.324098\nv -0.038471 -0.420627 -0.267569\nv -0.029560 -0.454816 -0.205594\nv -0.020047 -0.479746 -0.139433\nv -0.010127 -0.494911 -0.070433\nv -0.000000 0.494911 -0.071157\nv -0.000000 0.479746 -0.140866\nv -0.000000 0.454816 -0.207707\nv -0.000000 0.420627 -0.270320\nv -0.000000 0.377875 -0.327430\nv -0.000000 0.327430 -0.377875\nv -0.000000 0.270320 -0.420626\nv 0.000000 0.207707 -0.454816\nv -0.000000 0.140866 -0.479746\nv 0.000000 0.071157 -0.494911\nv -0.000000 0.000000 -0.500000\nv 0.000000 -0.140866 -0.479746\nv -0.000000 -0.207707 -0.454816\nv -0.000000 -0.270320 -0.420627\nv 0.000000 -0.327430 -0.377875\nv 0.000000 -0.377875 -0.327430\nv -0.000000 -0.420627 -0.270321\nv -0.000000 -0.454816 -0.207708\nv -0.000000 -0.479746 -0.140867\nvt 0.750000 0.954546\nvt 0.738637 1.000000\nvt 0.727273 0.954545\nvt 0.750000 0.272727\nvt 0.750000 0.318182\nvt 0.727273 0.318182\nvt 0.727273 0.272727\nvt 0.750000 0.590909\nvt 0.750000 0.636364\nvt 0.727273 0.636364\nvt 0.727273 0.590909\nvt 0.750000 0.909091\nvt 0.727273 0.909091\nvt 0.750000 0.227273\nvt 0.727273 0.227273\nvt 0.750000 0.545455\nvt 0.727273 0.545455\nvt 0.750000 0.863636\nvt 0.727273 0.863636\nvt 0.750000 0.181818\nvt 0.727273 0.181818\nvt 0.750000 0.500000\nvt 0.727273 0.500000\nvt 0.750000 0.818182\nvt 0.727273 0.818182\nvt 0.750000 0.136364\nvt 0.727273 0.136364\nvt 0.750000 0.454545\nvt 0.727273 0.454545\nvt 0.750000 0.772727\nvt 0.727273 0.772727\nvt 0.750000 0.090909\nvt 0.727273 0.090909\nvt 0.750000 0.409091\nvt 0.727273 0.409091\nvt 0.750000 0.727273\nvt 0.727273 0.727273\nvt 0.750000 0.045455\nvt 0.727273 0.045455\nvt 0.750000 0.363636\nvt 0.727273 0.363636\nvt 0.750000 0.681818\nvt 0.727273 0.681818\nvt 0.738636 0.000000\nvt 0.704545 0.318182\nvt 0.704545 0.272727\nvt 0.704545 0.636364\nvt 0.704545 0.590909\nvt 0.704546 0.954546\nvt 0.704546 0.909091\nvt 0.704545 0.227273\nvt 0.704545 0.545455\nvt 0.704545 0.863636\nvt 0.704545 0.181818\nvt 0.704545 0.500000\nvt 0.704545 0.818182\nvt 0.704545 0.136364\nvt 0.704545 0.454545\nvt 0.704545 0.772727\nvt 0.704546 0.090909\nvt 0.704545 0.409091\nvt 0.704545 0.727273\nvt 0.704546 0.045455\nvt 0.704545 0.363636\nvt 0.704545 0.681818\nvt 0.715909 0.000000\nvt 0.715910 1.000000\nvt 0.681818 0.681818\nvt 0.681818 0.636364\nvt 0.693182 1.000000\nvt 0.681818 0.954546\nvt 0.681818 0.318182\nvt 0.681818 0.272727\nvt 0.681818 0.590909\nvt 0.681818 0.909091\nvt 0.681818 0.227273\nvt 0.681818 0.545455\nvt 0.681818 0.863636\nvt 0.681818 0.181818\nvt 0.681818 0.500000\nvt 0.681818 0.818182\nvt 0.681818 0.136364\nvt 0.681818 0.454545\nvt 0.681818 0.772727\nvt 0.681818 0.090909\nvt 0.681818 0.409091\nvt 0.681818 0.727273\nvt 0.681818 0.045455\nvt 0.681818 0.363636\nvt 0.693182 0.000000\nvt 0.659091 0.363636\nvt 0.659091 0.318182\nvt 0.659091 0.681818\nvt 0.659091 0.636364\nvt 0.670455 1.000000\nvt 0.659091 0.954546\nvt 0.659091 0.272727\nvt 0.659091 0.590909\nvt 0.659091 0.909091\nvt 0.659091 0.227273\nvt 0.659091 0.545455\nvt 0.659091 0.863636\nvt 0.659091 0.181818\nvt 0.659091 0.500000\nvt 0.659091 0.818182\nvt 0.659091 0.136364\nvt 0.659091 0.454545\nvt 0.659091 0.772727\nvt 0.659091 0.090909\nvt 0.659091 0.409091\nvt 0.659091 0.727273\nvt 0.659091 0.045455\nvt 0.670455 0.000000\nvt 0.636364 0.727273\nvt 0.636364 0.681818\nvt 0.647728 0.000000\nvt 0.636364 0.045455\nvt 0.636364 0.363636\nvt 0.636364 0.318182\nvt 0.636364 0.636364\nvt 0.647728 1.000000\nvt 0.636364 0.954546\nvt 0.636364 0.272727\nvt 0.636364 0.590909\nvt 0.636364 0.909091\nvt 0.636364 0.227273\nvt 0.636364 0.545455\nvt 0.636364 0.863636\nvt 0.636364 0.181818\nvt 0.636364 0.500000\nvt 0.636364 0.818182\nvt 0.636364 0.136364\nvt 0.636364 0.454545\nvt 0.636364 0.772727\nvt 0.636364 0.090909\nvt 0.636364 0.409091\nvt 0.613637 0.090909\nvt 0.613637 0.045455\nvt 0.613636 0.409091\nvt 0.613636 0.363636\nvt 0.613636 0.727273\nvt 0.613636 0.681818\nvt 0.625001 0.000000\nvt 0.613636 0.318182\nvt 0.613636 0.636364\nvt 0.625001 1.000000\nvt 0.613637 0.954546\nvt 0.613636 0.272727\nvt 0.613636 0.590909\nvt 0.613637 0.909091\nvt 0.613636 0.227273\nvt 0.613636 0.545455\nvt 0.613637 0.863636\nvt 0.613636 0.181818\nvt 0.613636 0.500000\nvt 0.613636 0.818182\nvt 0.613637 0.136364\nvt 0.613636 0.454545\nvt 0.613636 0.772727\nvt 0.590909 0.454545\nvt 0.590909 0.409091\nvt 0.590909 0.772727\nvt 0.590909 0.727273\nvt 0.590909 0.090909\nvt 0.590910 0.045455\nvt 0.590909 0.363636\nvt 0.590909 0.681818\nvt 0.602274 0.000000\nvt 0.590909 0.318182\nvt 0.590909 0.636364\nvt 0.602274 1.000000\nvt 0.590910 0.954546\nvt 0.590909 0.272727\nvt 0.590909 0.590909\nvt 0.590909 0.909091\nvt 0.590909 0.227273\nvt 0.590909 0.545455\nvt 0.590909 0.863636\nvt 0.590909 0.181818\nvt 0.590909 0.500000\nvt 0.590909 0.818182\nvt 0.590909 0.136364\nvt 0.568182 0.818182\nvt 0.568182 0.772727\nvt 0.568182 0.136364\nvt 0.568182 0.090909\nvt 0.568182 0.454545\nvt 0.568182 0.409091\nvt 0.568182 0.727273\nvt 0.568182 0.045455\nvt 0.568182 0.363636\nvt 0.568182 0.681818\nvt 0.579546 0.000000\nvt 0.568182 0.318182\nvt 0.568182 0.636364\nvt 0.579547 1.000000\nvt 0.568182 0.954546\nvt 0.568182 0.272727\nvt 0.568182 0.590909\nvt 0.568182 0.909091\nvt 0.568182 0.227273\nvt 0.568182 0.545455\nvt 0.568182 0.863636\nvt 0.568182 0.181818\nvt 0.568182 0.500000\nvt 0.545455 0.500000\nvt 0.545455 0.454545\nvt 0.545455 0.818182\nvt 0.545455 0.772727\nvt 0.545455 0.136364\nvt 0.545455 0.090909\nvt 0.545455 0.409091\nvt 0.545455 0.727273\nvt 0.545455 0.045455\nvt 0.545455 0.363636\nvt 0.545455 0.681818\nvt 0.556819 0.000000\nvt 0.545455 0.318182\nvt 0.545455 0.636364\nvt 0.556819 1.000000\nvt 0.545455 0.954546\nvt 0.545455 0.272727\nvt 0.545455 0.590909\nvt 0.545455 0.909091\nvt 0.545455 0.227273\nvt 0.545455 0.545455\nvt 0.545455 0.863636\nvt 0.545455 0.181818\nvt 0.522727 0.863637\nvt 0.522727 0.818182\nvt 0.522727 0.181818\nvt 0.522727 0.136364\nvt 0.522727 0.500000\nvt 0.522727 0.454545\nvt 0.522727 0.772727\nvt 0.522728 0.090909\nvt 0.522727 0.409091\nvt 0.522727 0.727273\nvt 0.522728 0.045454\nvt 0.522727 0.363636\nvt 0.522727 0.681818\nvt 0.534092 0.000000\nvt 0.522727 0.318182\nvt 0.522727 0.636364\nvt 0.534092 1.000000\nvt 0.522728 0.954546\nvt 0.522727 0.272727\nvt 0.522727 0.590909\nvt 0.522728 0.909091\nvt 0.522727 0.227273\nvt 0.522727 0.545455\nvt 0.500000 0.227273\nvt 0.500000 0.181818\nvt 0.500000 0.545455\nvt 0.500000 0.500000\nvt 0.500000 0.863637\nvt 0.500000 0.818182\nvt 0.500000 0.136364\nvt 0.500000 0.454545\nvt 0.500000 0.772727\nvt 0.500000 0.090909\nvt 0.500000 0.409091\nvt 0.500000 0.727273\nvt 0.500001 0.045454\nvt 0.500000 0.363636\nvt 0.500000 0.681818\nvt 0.511365 0.000000\nvt 0.500000 0.318182\nvt 0.500000 0.636364\nvt 0.511365 1.000000\nvt 0.500001 0.954546\nvt 0.500000 0.272727\nvt 0.500000 0.590909\nvt 0.500000 0.909091\nvt 0.477273 0.590909\nvt 0.477273 0.545455\nvt 0.477273 0.909091\nvt 0.477273 0.863637\nvt 0.477273 0.227273\nvt 0.477273 0.181818\nvt 0.477273 0.500000\nvt 0.477273 0.818182\nvt 0.477273 0.136364\nvt 0.477273 0.454545\nvt 0.477273 0.772727\nvt 0.477273 0.090909\nvt 0.477273 0.409091\nvt 0.477273 0.727273\nvt 0.477273 0.045454\nvt 0.477273 0.363636\nvt 0.477273 0.681818\nvt 0.488637 0.000000\nvt 0.477273 0.318182\nvt 0.477273 0.636364\nvt 0.488637 1.000000\nvt 0.477273 0.954546\nvt 0.477273 0.272727\nvt 0.454546 0.954546\nvt 0.454546 0.909091\nvt 0.454546 0.272727\nvt 0.454546 0.227273\nvt 0.454546 0.590909\nvt 0.454546 0.545455\nvt 0.454546 0.863637\nvt 0.454546 0.181818\nvt 0.454546 0.500000\nvt 0.454546 0.818182\nvt 0.454546 0.136364\nvt 0.454546 0.454545\nvt 0.454546 0.772727\nvt 0.454546 0.090909\nvt 0.454546 0.409091\nvt 0.454546 0.727273\nvt 0.454546 0.045454\nvt 0.454546 0.363636\nvt 0.454546 0.681818\nvt 0.465910 0.000000\nvt 0.454546 0.318182\nvt 0.454546 0.636364\nvt 0.465910 1.000000\nvt 0.431818 0.636364\nvt 0.431818 0.590909\nvt 0.431819 0.954546\nvt 0.431818 0.909091\nvt 0.431818 0.272727\nvt 0.431818 0.227273\nvt 0.431818 0.545455\nvt 0.431818 0.863637\nvt 0.431818 0.181818\nvt 0.431818 0.500000\nvt 0.431818 0.818182\nvt 0.431818 0.136364\nvt 0.431818 0.454545\nvt 0.431818 0.772727\nvt 0.431818 0.090909\nvt 0.431818 0.409091\nvt 0.431818 0.727273\nvt 0.431819 0.045454\nvt 0.431818 0.363636\nvt 0.431818 0.681818\nvt 0.443183 0.000000\nvt 0.431818 0.318182\nvt 0.443183 1.000000\nvt 0.420455 1.000000\nvt 0.409092 0.954546\nvt 0.409091 0.318182\nvt 0.409091 0.272727\nvt 0.409091 0.636364\nvt 0.409091 0.590909\nvt 0.409091 0.909091\nvt 0.409091 0.227273\nvt 0.409091 0.545455\nvt 0.409091 0.863637\nvt 0.409091 0.181818\nvt 0.409091 0.500000\nvt 0.409091 0.818182\nvt 0.409091 0.136364\nvt 0.409091 0.454545\nvt 0.409091 0.772727\nvt 0.409091 0.090909\nvt 0.409091 0.409091\nvt 0.409091 0.727273\nvt 0.409092 0.045454\nvt 0.409091 0.363636\nvt 0.409091 0.681818\nvt 0.420455 0.000000\nvt 0.386364 0.363636\nvt 0.386364 0.318182\nvt 0.386364 0.681818\nvt 0.386364 0.636364\nvt 0.397728 1.000000\nvt 0.386364 0.954546\nvt 0.386364 0.272727\nvt 0.386364 0.590909\nvt 0.386364 0.909091\nvt 0.386364 0.227273\nvt 0.386364 0.545455\nvt 0.386364 0.863637\nvt 0.386364 0.181818\nvt 0.386364 0.500000\nvt 0.386364 0.818182\nvt 0.386364 0.136364\nvt 0.386364 0.454545\nvt 0.386364 0.772727\nvt 0.386364 0.090909\nvt 0.386364 0.409091\nvt 0.386364 0.727273\nvt 0.386364 0.045454\nvt 0.397728 0.000000\nvt 0.363636 0.727273\nvt 0.363636 0.681818\nvt 0.375001 0.000000\nvt 0.363637 0.045454\nvt 0.363636 0.363636\nvt 0.363636 0.318182\nvt 0.363636 0.636364\nvt 0.375000 1.000000\nvt 0.363637 0.954546\nvt 0.363636 0.272727\nvt 0.363636 0.590909\nvt 0.363637 0.909091\nvt 0.363636 0.227273\nvt 0.363636 0.545455\nvt 0.363637 0.863637\nvt 0.363636 0.181818\nvt 0.363636 0.500000\nvt 0.363636 0.818182\nvt 0.363637 0.136364\nvt 0.363636 0.454545\nvt 0.363636 0.772727\nvt 0.363637 0.090909\nvt 0.363636 0.409091\nvt 0.340909 0.409091\nvt 0.340909 0.363636\nvt 0.340909 0.727273\nvt 0.340909 0.681818\nvt 0.352273 0.000000\nvt 0.340909 0.045454\nvt 0.340909 0.318182\nvt 0.340909 0.636364\nvt 0.352273 1.000000\nvt 0.340909 0.954546\nvt 0.340909 0.272727\nvt 0.340909 0.590909\nvt 0.340909 0.909091\nvt 0.340909 0.227273\nvt 0.340909 0.545455\nvt 0.340909 0.863637\nvt 0.340909 0.181818\nvt 0.340909 0.500000\nvt 0.340909 0.818182\nvt 0.340909 0.136363\nvt 0.340909 0.454545\nvt 0.340909 0.772727\nvt 0.340909 0.090909\nvt 0.318182 0.772727\nvt 0.318182 0.727273\nvt 0.318182 0.090909\nvt 0.318182 0.045454\nvt 0.318182 0.409091\nvt 0.318182 0.363636\nvt 0.318182 0.681818\nvt 0.329546 0.000000\nvt 0.318182 0.318182\nvt 0.318182 0.636364\nvt 0.329546 1.000000\nvt 0.318182 0.954546\nvt 0.318182 0.272727\nvt 0.318182 0.590909\nvt 0.318182 0.909091\nvt 0.318182 0.227273\nvt 0.318182 0.545455\nvt 0.318182 0.863637\nvt 0.318182 0.181818\nvt 0.318182 0.500000\nvt 0.318182 0.818182\nvt 0.318182 0.136363\nvt 0.318182 0.454545\nvt 0.295455 0.136363\nvt 0.295455 0.090909\nvt 0.295455 0.454545\nvt 0.295455 0.409091\nvt 0.295455 0.772727\nvt 0.295455 0.727273\nvt 0.295455 0.045454\nvt 0.295455 0.363636\nvt 0.295455 0.681818\nvt 0.306819 0.000000\nvt 0.295455 0.318182\nvt 0.295455 0.636364\nvt 0.306818 1.000000\nvt 0.295455 0.954546\nvt 0.295455 0.272727\nvt 0.295455 0.590909\nvt 0.295455 0.909091\nvt 0.295455 0.227273\nvt 0.295455 0.545455\nvt 0.295455 0.863637\nvt 0.295455 0.181818\nvt 0.295455 0.500000\nvt 0.295455 0.818182\nvt 0.272727 0.500000\nvt 0.272727 0.454545\nvt 0.272727 0.818182\nvt 0.272727 0.772727\nvt 0.272727 0.136363\nvt 0.272727 0.090909\nvt 0.272727 0.409091\nvt 0.272727 0.727273\nvt 0.272727 0.045454\nvt 0.272727 0.363636\nvt 0.272727 0.681818\nvt 0.284091 0.000000\nvt 0.272727 0.318182\nvt 0.272727 0.636364\nvt 0.284091 1.000000\nvt 0.272727 0.954546\nvt 0.272727 0.272727\nvt 0.272727 0.590909\nvt 0.272727 0.909091\nvt 0.272727 0.227273\nvt 0.272727 0.545455\nvt 0.272727 0.863637\nvt 0.272727 0.181818\nvt 0.250000 0.863637\nvt 0.250000 0.818182\nvt 0.250000 0.181818\nvt 0.250000 0.136363\nvt 0.250000 0.500000\nvt 0.250000 0.454545\nvt 0.250000 0.772727\nvt 0.250000 0.090909\nvt 0.250000 0.409091\nvt 0.250000 0.727273\nvt 0.250000 0.045454\nvt 0.250000 0.363636\nvt 0.250000 0.681818\nvt 0.261364 0.000000\nvt 0.250000 0.318182\nvt 0.250000 0.636364\nvt 0.261363 1.000000\nvt 0.250000 0.954546\nvt 0.250000 0.272727\nvt 0.250000 0.590909\nvt 0.250000 0.909091\nvt 0.250000 0.227273\nvt 0.250000 0.545455\nvt 0.227273 0.545455\nvt 0.227273 0.500000\nvt 0.227273 0.863637\nvt 0.227273 0.818182\nvt 0.227273 0.181818\nvt 0.227273 0.136363\nvt 0.227273 0.454545\nvt 0.227273 0.772727\nvt 0.227273 0.090909\nvt 0.227273 0.409091\nvt 0.227273 0.727273\nvt 0.227273 0.045454\nvt 0.227273 0.363636\nvt 0.227273 0.681818\nvt 0.238636 0.000000\nvt 0.227273 0.318182\nvt 0.227273 0.636364\nvt 0.238636 1.000000\nvt 0.227273 0.954546\nvt 0.227273 0.272727\nvt 0.227273 0.590909\nvt 0.227273 0.909091\nvt 0.227273 0.227273\nvt 0.204545 0.909091\nvt 0.204545 0.863637\nvt 0.204545 0.227273\nvt 0.204545 0.181818\nvt 0.204545 0.545455\nvt 0.204545 0.500000\nvt 0.204545 0.818182\nvt 0.204545 0.136363\nvt 0.204545 0.454545\nvt 0.204545 0.772727\nvt 0.204545 0.090909\nvt 0.204545 0.409091\nvt 0.204545 0.727273\nvt 0.204545 0.045454\nvt 0.204545 0.363636\nvt 0.204545 0.681818\nvt 0.215909 0.000000\nvt 0.204545 0.318182\nvt 0.204545 0.636364\nvt 0.215909 1.000000\nvt 0.204545 0.954546\nvt 0.204545 0.272727\nvt 0.204545 0.590909\nvt 0.181818 0.272727\nvt 0.181818 0.227273\nvt 0.181818 0.590909\nvt 0.181818 0.545455\nvt 0.181818 0.909091\nvt 0.181818 0.863637\nvt 0.181818 0.181818\nvt 0.181818 0.500000\nvt 0.181818 0.818182\nvt 0.181818 0.136363\nvt 0.181818 0.454545\nvt 0.181818 0.772727\nvt 0.181818 0.090909\nvt 0.181818 0.409091\nvt 0.181818 0.727273\nvt 0.181818 0.045454\nvt 0.181818 0.363636\nvt 0.181818 0.681818\nvt 0.193181 0.000000\nvt 0.181818 0.318182\nvt 0.181818 0.636364\nvt 0.193181 1.000000\nvt 0.181818 0.954546\nvt 0.159091 0.636364\nvt 0.159091 0.590909\nvt 0.159091 0.954546\nvt 0.159091 0.909091\nvt 0.159091 0.272727\nvt 0.159091 0.227273\nvt 0.159091 0.545455\nvt 0.159091 0.863637\nvt 0.159091 0.181818\nvt 0.159091 0.500000\nvt 0.159091 0.818182\nvt 0.159091 0.136363\nvt 0.159091 0.454545\nvt 0.159091 0.772727\nvt 0.159091 0.090909\nvt 0.159091 0.409091\nvt 0.159091 0.727273\nvt 0.159091 0.045454\nvt 0.159091 0.363636\nvt 0.159091 0.681818\nvt 0.170454 0.000000\nvt 0.159091 0.318182\nvt 0.170454 1.000000\nvt 0.147726 1.000000\nvt 0.136363 0.954546\nvt 0.136364 0.318182\nvt 0.136364 0.272727\nvt 0.136364 0.636364\nvt 0.136364 0.590909\nvt 0.136363 0.909091\nvt 0.136364 0.227273\nvt 0.136364 0.545455\nvt 0.136364 0.863637\nvt 0.136364 0.181818\nvt 0.136364 0.500000\nvt 0.136364 0.818182\nvt 0.136363 0.136364\nvt 0.136364 0.454545\nvt 0.136364 0.772727\nvt 0.136363 0.090909\nvt 0.136364 0.409091\nvt 0.136364 0.727273\nvt 0.136363 0.045454\nvt 0.136364 0.363636\nvt 0.136364 0.681818\nvt 0.147727 0.000000\nvt 0.113636 0.681818\nvt 0.113636 0.636364\nvt 0.124999 1.000000\nvt 0.113636 0.954546\nvt 0.113636 0.318182\nvt 0.113636 0.272727\nvt 0.113636 0.590909\nvt 0.113636 0.909091\nvt 0.113636 0.227273\nvt 0.113636 0.545455\nvt 0.113636 0.863637\nvt 0.113636 0.181818\nvt 0.113636 0.500000\nvt 0.113636 0.818182\nvt 0.113636 0.136364\nvt 0.113636 0.454545\nvt 0.113636 0.772727\nvt 0.113636 0.090909\nvt 0.113636 0.409091\nvt 0.113636 0.727273\nvt 0.113636 0.045454\nvt 0.113636 0.363636\nvt 0.124999 0.000000\nvt 0.102272 0.000000\nvt 0.090909 0.045454\nvt 0.090909 0.363636\nvt 0.090909 0.318182\nvt 0.090909 0.681818\nvt 0.090909 0.636364\nvt 0.102272 1.000000\nvt 0.090908 0.954546\nvt 0.090909 0.272727\nvt 0.090909 0.590909\nvt 0.090909 0.909091\nvt 0.090909 0.227273\nvt 0.090909 0.545455\nvt 0.090909 0.863637\nvt 0.090909 0.181818\nvt 0.090909 0.500000\nvt 0.090909 0.818182\nvt 0.090909 0.136364\nvt 0.090909 0.454545\nvt 0.090909 0.772727\nvt 0.090909 0.090909\nvt 0.090909 0.409091\nvt 0.090909 0.727273\nvt 0.068182 0.409091\nvt 0.068182 0.363636\nvt 0.068182 0.727273\nvt 0.068182 0.681818\nvt 0.079545 0.000000\nvt 0.068181 0.045454\nvt 0.068182 0.318182\nvt 0.068182 0.636364\nvt 0.079544 1.000000\nvt 0.068181 0.954546\nvt 0.068182 0.272727\nvt 0.068182 0.590909\nvt 0.068182 0.909091\nvt 0.068182 0.227273\nvt 0.068182 0.545455\nvt 0.068182 0.863637\nvt 0.068182 0.181818\nvt 0.068182 0.500000\nvt 0.068182 0.818182\nvt 0.068182 0.136364\nvt 0.068182 0.454545\nvt 0.068182 0.772727\nvt 0.068181 0.090909\nvt 0.045454 0.772727\nvt 0.045454 0.727273\nvt 0.045454 0.090909\nvt 0.045454 0.045454\nvt 0.045454 0.409091\nvt 0.045455 0.363636\nvt 0.045454 0.681818\nvt 0.056817 0.000000\nvt 0.045454 0.318182\nvt 0.045454 0.636364\nvt 0.056817 1.000000\nvt 0.045454 0.954546\nvt 0.045454 0.272727\nvt 0.045455 0.590909\nvt 0.045454 0.909091\nvt 0.045454 0.227273\nvt 0.045454 0.545455\nvt 0.045454 0.863637\nvt 0.045454 0.181818\nvt 0.045455 0.500000\nvt 0.045454 0.818182\nvt 0.045454 0.136364\nvt 0.045454 0.454545\nvt 0.022727 0.454545\nvt 0.022727 0.409091\nvt 0.022727 0.772727\nvt 0.022727 0.727273\nvt 0.022727 0.090909\nvt 0.022727 0.045454\nvt 0.022727 0.363636\nvt 0.022727 0.681818\nvt 0.034090 0.000000\nvt 0.022727 0.318182\nvt 0.022727 0.636364\nvt 0.034090 1.000000\nvt 0.022727 0.954546\nvt 0.022727 0.272727\nvt 0.022727 0.590909\nvt 0.022727 0.909091\nvt 0.022727 0.227273\nvt 0.022727 0.545455\nvt 0.022727 0.863637\nvt 0.022727 0.181818\nvt 0.022727 0.500000\nvt 0.022727 0.818182\nvt 0.022727 0.136364\nvt 0.000000 0.818182\nvt 0.000000 0.772727\nvt 0.000000 0.136364\nvt 0.000000 0.090909\nvt 0.000000 0.454545\nvt 0.000000 0.409091\nvt 0.000000 0.727273\nvt 0.000000 0.045454\nvt 0.000000 0.363636\nvt 0.000000 0.681818\nvt 0.011363 0.000000\nvt 0.000000 0.318182\nvt 0.000000 0.636364\nvt 0.011363 1.000000\nvt 0.000000 0.954546\nvt 0.000000 0.272727\nvt 0.000000 0.590909\nvt 0.000000 0.909091\nvt 0.000000 0.227273\nvt 0.000000 0.545455\nvt 0.000000 0.863637\nvt 0.000000 0.181818\nvt 0.000000 0.500000\nvt 1.000000 0.136364\nvt 1.000000 0.181818\nvt 0.977273 0.181818\nvt 0.977273 0.136364\nvt 1.000000 0.454545\nvt 1.000000 0.500000\nvt 0.977273 0.500000\nvt 0.977273 0.454545\nvt 1.000000 0.772727\nvt 1.000000 0.818182\nvt 0.977273 0.818182\nvt 0.977273 0.772727\nvt 1.000000 0.090909\nvt 0.977272 0.090909\nvt 1.000000 0.409091\nvt 0.977273 0.409091\nvt 1.000000 0.727273\nvt 0.977273 0.727273\nvt 1.000000 0.045454\nvt 0.977272 0.045455\nvt 1.000000 0.363636\nvt 0.977273 0.363636\nvt 1.000000 0.681818\nvt 0.977273 0.681818\nvt 0.988635 0.000000\nvt 1.000000 0.318182\nvt 0.977273 0.318182\nvt 1.000000 0.636364\nvt 0.977273 0.636364\nvt 1.000000 0.954546\nvt 0.988635 1.000000\nvt 0.977272 0.954546\nvt 1.000000 0.272727\nvt 0.977273 0.272727\nvt 1.000000 0.590909\nvt 0.977273 0.590909\nvt 1.000000 0.909091\nvt 0.977272 0.909091\nvt 1.000000 0.227273\nvt 0.977273 0.227273\nvt 1.000000 0.545455\nvt 0.977273 0.545455\nvt 1.000000 0.863637\nvt 0.977273 0.863637\nvt 0.954545 0.545455\nvt 0.954545 0.500000\nvt 0.954545 0.863637\nvt 0.954545 0.818182\nvt 0.954545 0.181818\nvt 0.954545 0.136364\nvt 0.954545 0.454545\nvt 0.954545 0.772727\nvt 0.954545 0.090909\nvt 0.954545 0.409091\nvt 0.954545 0.727273\nvt 0.954545 0.045455\nvt 0.954545 0.363636\nvt 0.954545 0.681818\nvt 0.965908 0.000000\nvt 0.954545 0.318182\nvt 0.954545 0.636364\nvt 0.965908 1.000000\nvt 0.954545 0.954546\nvt 0.954545 0.272727\nvt 0.954545 0.590909\nvt 0.954545 0.909091\nvt 0.954545 0.227273\nvt 0.931818 0.909091\nvt 0.931818 0.863636\nvt 0.931818 0.227273\nvt 0.931818 0.181818\nvt 0.931818 0.545455\nvt 0.931818 0.500000\nvt 0.931818 0.818182\nvt 0.931818 0.136364\nvt 0.931818 0.454545\nvt 0.931818 0.772727\nvt 0.931818 0.090909\nvt 0.931818 0.409091\nvt 0.931818 0.727273\nvt 0.931818 0.045455\nvt 0.931818 0.363636\nvt 0.931818 0.681818\nvt 0.943181 0.000000\nvt 0.931818 0.318182\nvt 0.931818 0.636364\nvt 0.943181 1.000000\nvt 0.931818 0.954546\nvt 0.931818 0.272727\nvt 0.931818 0.590909\nvt 0.909091 0.590909\nvt 0.909091 0.545455\nvt 0.909091 0.909091\nvt 0.909091 0.863636\nvt 0.909091 0.227273\nvt 0.909091 0.181818\nvt 0.909091 0.500000\nvt 0.909091 0.818182\nvt 0.909091 0.136364\nvt 0.909091 0.454545\nvt 0.909091 0.772727\nvt 0.909091 0.090909\nvt 0.909091 0.409091\nvt 0.909091 0.727273\nvt 0.909090 0.045455\nvt 0.909091 0.363636\nvt 0.909091 0.681818\nvt 0.920454 0.000000\nvt 0.909091 0.318182\nvt 0.909091 0.636364\nvt 0.920454 1.000000\nvt 0.909090 0.954546\nvt 0.909091 0.272727\nvt 0.886364 0.454545\nvt 0.886364 0.409091\nvt 0.886364 0.772727\nvt 0.886364 0.727273\nvt 0.886363 0.090909\nvt 0.886363 0.045455\nvt 0.886364 0.363636\nvt 0.886364 0.681818\nvt 0.897726 0.000000\nvt 0.886364 0.318182\nvt 0.886364 0.636364\nvt 0.897727 1.000000\nvt 0.886363 0.954546\nvt 0.886364 0.272727\nvt 0.886364 0.590909\nvt 0.886363 0.909091\nvt 0.886364 0.227273\nvt 0.886364 0.545455\nvt 0.886363 0.863636\nvt 0.886364 0.181818\nvt 0.886364 0.500000\nvt 0.886364 0.818182\nvt 0.886363 0.136364\nvt 0.863636 0.818182\nvt 0.863636 0.772727\nvt 0.863636 0.136364\nvt 0.863636 0.090909\nvt 0.863636 0.454545\nvt 0.863636 0.409091\nvt 0.863636 0.727273\nvt 0.863636 0.045455\nvt 0.863636 0.363636\nvt 0.863636 0.681818\nvt 0.874999 0.000000\nvt 0.863636 0.318182\nvt 0.863636 0.636364\nvt 0.875000 1.000000\nvt 0.863636 0.954546\nvt 0.863636 0.272727\nvt 0.863636 0.590909\nvt 0.863636 0.909091\nvt 0.863636 0.227273\nvt 0.863636 0.545455\nvt 0.863636 0.863636\nvt 0.863636 0.181818\nvt 0.863636 0.500000\nvt 0.840909 0.500000\nvt 0.840909 0.454545\nvt 0.840909 0.818182\nvt 0.840909 0.772727\nvt 0.840909 0.136364\nvt 0.840909 0.090909\nvt 0.840909 0.409091\nvt 0.840909 0.727273\nvt 0.840909 0.045455\nvt 0.840909 0.363636\nvt 0.840909 0.681818\nvt 0.852272 0.000000\nvt 0.840909 0.318182\nvt 0.840909 0.636364\nvt 0.852272 1.000000\nvt 0.840909 0.954546\nvt 0.840909 0.272727\nvt 0.840909 0.590909\nvt 0.840909 0.909091\nvt 0.840909 0.227273\nvt 0.840909 0.545455\nvt 0.840909 0.863636\nvt 0.840909 0.181818\nvt 0.818182 0.863636\nvt 0.818182 0.818182\nvt 0.818182 0.181818\nvt 0.818182 0.136364\nvt 0.818182 0.500000\nvt 0.818182 0.454545\nvt 0.818182 0.772727\nvt 0.818182 0.090909\nvt 0.818182 0.409091\nvt 0.818182 0.727273\nvt 0.818182 0.045455\nvt 0.818182 0.363636\nvt 0.818182 0.681818\nvt 0.829545 0.000000\nvt 0.818182 0.318182\nvt 0.818182 0.636364\nvt 0.829545 1.000000\nvt 0.818182 0.954546\nvt 0.818182 0.272727\nvt 0.818182 0.590909\nvt 0.818182 0.909091\nvt 0.818182 0.227273\nvt 0.818182 0.545455\nvt 0.795455 0.227273\nvt 0.795455 0.181818\nvt 0.795455 0.545455\nvt 0.795455 0.500000\nvt 0.795455 0.863636\nvt 0.795455 0.818182\nvt 0.795455 0.136364\nvt 0.795455 0.454545\nvt 0.795455 0.772727\nvt 0.795454 0.090909\nvt 0.795455 0.409091\nvt 0.795455 0.727273\nvt 0.795454 0.045455\nvt 0.795455 0.363636\nvt 0.795455 0.681818\nvt 0.806818 0.000000\nvt 0.795455 0.318182\nvt 0.795455 0.636364\nvt 0.806818 1.000000\nvt 0.795454 0.954546\nvt 0.795455 0.272727\nvt 0.795455 0.590909\nvt 0.795454 0.909091\nvt 0.772727 0.590909\nvt 0.772727 0.545455\nvt 0.772727 0.909091\nvt 0.772727 0.863636\nvt 0.772727 0.227273\nvt 0.772727 0.181818\nvt 0.772727 0.500000\nvt 0.772727 0.818182\nvt 0.772727 0.136364\nvt 0.772727 0.454545\nvt 0.772727 0.772727\nvt 0.772727 0.090909\nvt 0.772727 0.409091\nvt 0.772727 0.727273\nvt 0.772727 0.045455\nvt 0.772727 0.363636\nvt 0.772727 0.681818\nvt 0.784091 0.000000\nvt 0.772727 0.318182\nvt 0.772727 0.636364\nvt 0.784091 1.000000\nvt 0.772727 0.954546\nvt 0.772727 0.272727\nvt 0.761364 0.000000\nvt 0.761364 1.000000\nvn 0.0000 0.9893 -0.1455\nvn 0.0000 1.0000 0.0000\nvn 0.0207 0.9893 -0.1440\nvn 0.0000 -0.6532 -0.7571\nvn 0.0000 -0.5391 -0.8422\nvn 0.1198 -0.5392 -0.8336\nvn 0.1077 -0.6532 -0.7494\nvn 0.0000 0.2808 -0.9597\nvn 0.0000 0.4142 -0.9102\nvn 0.1295 0.4142 -0.9009\nvn 0.1366 0.2808 -0.9499\nvn 0.0000 0.9586 -0.2847\nvn 0.0405 0.9586 -0.2818\nvn 0.0000 -0.7541 -0.6567\nvn 0.0934 -0.7541 -0.6500\nvn 0.0000 0.1419 -0.9899\nvn 0.1409 0.1419 -0.9798\nvn 0.0000 0.9084 -0.4181\nvn 0.0595 0.9084 -0.4138\nvn 0.0000 -0.8398 -0.5429\nvn 0.0772 -0.8398 -0.5374\nvn 0.0000 0.0000 -1.0000\nvn 0.1423 0.0000 -0.9898\nvn 0.0000 0.8398 -0.5429\nvn 0.0772 0.8398 -0.5374\nvn 0.0000 -0.9084 -0.4181\nvn 0.0595 -0.9084 -0.4138\nvn 0.0000 -0.1419 -0.9899\nvn 0.1409 -0.1419 -0.9798\nvn 0.0000 0.7541 -0.6567\nvn 0.0934 0.7541 -0.6500\nvn 0.0000 -0.9586 -0.2847\nvn 0.0405 -0.9586 -0.2818\nvn 0.0000 -0.2809 -0.9597\nvn 0.1366 -0.2808 -0.9499\nvn 0.0000 0.6532 -0.7571\nvn 0.1077 0.6532 -0.7494\nvn 0.0000 -0.9893 -0.1455\nvn 0.0207 -0.9893 -0.1440\nvn 0.0000 -0.4142 -0.9102\nvn 0.1295 -0.4142 -0.9009\nvn 0.0000 0.5392 -0.8422\nvn 0.1198 0.5392 -0.8336\nvn 0.0000 -1.0000 0.0000\nvn 0.2373 -0.5392 -0.8081\nvn 0.2133 -0.6532 -0.7265\nvn 0.2564 0.4142 -0.8733\nvn 0.2704 0.2808 -0.9209\nvn 0.0410 0.9893 -0.1396\nvn 0.0802 0.9586 -0.2732\nvn 0.1850 -0.7541 -0.6301\nvn 0.2789 0.1419 -0.9498\nvn 0.1178 0.9084 -0.4011\nvn 0.1530 -0.8398 -0.5209\nvn 0.2817 0.0000 -0.9595\nvn 0.1530 0.8398 -0.5209\nvn 0.1178 -0.9084 -0.4011\nvn 0.2789 -0.1419 -0.9498\nvn 0.1850 0.7541 -0.6301\nvn 0.0802 -0.9586 -0.2732\nvn 0.2704 -0.2808 -0.9209\nvn 0.2133 0.6532 -0.7265\nvn 0.0410 -0.9893 -0.1396\nvn 0.2564 -0.4142 -0.8733\nvn 0.2373 0.5392 -0.8081\nvn 0.3498 0.5392 -0.7661\nvn 0.3781 0.4142 -0.8279\nvn 0.0604 0.9893 -0.1323\nvn 0.3498 -0.5392 -0.7661\nvn 0.3145 -0.6532 -0.6887\nvn 0.3987 0.2808 -0.8730\nvn 0.1183 0.9586 -0.2590\nvn 0.2728 -0.7541 -0.5973\nvn 0.4112 0.1419 -0.9004\nvn 0.1737 0.9084 -0.3803\nvn 0.2255 -0.8398 -0.4939\nvn 0.4154 0.0000 -0.9096\nvn 0.2255 0.8398 -0.4939\nvn 0.1737 -0.9084 -0.3803\nvn 0.4112 -0.1419 -0.9004\nvn 0.2728 0.7541 -0.5973\nvn 0.1183 -0.9586 -0.2590\nvn 0.3987 -0.2808 -0.8730\nvn 0.3145 0.6532 -0.6887\nvn 0.0604 -0.9893 -0.1323\nvn 0.3781 -0.4142 -0.8279\nvn 0.4921 -0.4142 -0.7657\nvn 0.4553 -0.5392 -0.7085\nvn 0.4553 0.5392 -0.7085\nvn 0.4921 0.4142 -0.7657\nvn 0.0786 0.9893 -0.1224\nvn 0.4093 -0.6532 -0.6369\nvn 0.5189 0.2808 -0.8074\nvn 0.1539 0.9586 -0.2395\nvn 0.3550 -0.7541 -0.5524\nvn 0.5352 0.1419 -0.8327\nvn 0.2260 0.9084 -0.3517\nvn 0.2935 -0.8398 -0.4567\nvn 0.5406 0.0000 -0.8412\nvn 0.2935 0.8398 -0.4567\nvn 0.2260 -0.9084 -0.3517\nvn 0.5352 -0.1419 -0.8327\nvn 0.3550 0.7541 -0.5524\nvn 0.1539 -0.9586 -0.2395\nvn 0.5189 -0.2808 -0.8074\nvn 0.4093 0.6532 -0.6369\nvn 0.0786 -0.9893 -0.1224\nvn 0.4958 0.6532 -0.5722\nvn 0.5515 0.5392 -0.6365\nvn 0.0952 -0.9893 -0.1099\nvn 0.5960 -0.4142 -0.6879\nvn 0.5515 -0.5392 -0.6365\nvn 0.5960 0.4142 -0.6879\nvn 0.0952 0.9893 -0.1099\nvn 0.4958 -0.6532 -0.5722\nvn 0.6285 0.2808 -0.7253\nvn 0.1864 0.9586 -0.2152\nvn 0.4300 -0.7541 -0.4963\nvn 0.6482 0.1419 -0.7481\nvn 0.2738 0.9084 -0.3160\nvn 0.3555 -0.8398 -0.4103\nvn 0.6548 0.0000 -0.7557\nvn 0.3555 0.8398 -0.4103\nvn 0.2738 -0.9084 -0.3160\nvn 0.6482 -0.1419 -0.7481\nvn 0.4300 0.7541 -0.4963\nvn 0.1864 -0.9586 -0.2152\nvn 0.6285 -0.2808 -0.7253\nvn 0.2152 -0.9586 -0.1864\nvn 0.1099 -0.9893 -0.0952\nvn 0.7253 -0.2808 -0.6285\nvn 0.6879 -0.4142 -0.5960\nvn 0.5722 0.6532 -0.4958\nvn 0.6365 0.5392 -0.5515\nvn 0.6365 -0.5392 -0.5515\nvn 0.6879 0.4142 -0.5960\nvn 0.1099 0.9893 -0.0952\nvn 0.5722 -0.6532 -0.4958\nvn 0.7253 0.2808 -0.6285\nvn 0.2152 0.9586 -0.1864\nvn 0.4963 -0.7541 -0.4300\nvn 0.7481 0.1419 -0.6482\nvn 0.3160 0.9084 -0.2738\nvn 0.4103 -0.8398 -0.3555\nvn 0.7557 0.0000 -0.6548\nvn 0.4103 0.8398 -0.3555\nvn 0.3160 -0.9084 -0.2738\nvn 0.7481 -0.1419 -0.6482\nvn 0.4963 0.7541 -0.4300\nvn 0.8327 -0.1419 -0.5352\nvn 0.8074 -0.2808 -0.5189\nvn 0.5524 0.7541 -0.3550\nvn 0.6369 0.6532 -0.4093\nvn 0.2395 -0.9586 -0.1539\nvn 0.1224 -0.9893 -0.0786\nvn 0.7657 -0.4142 -0.4921\nvn 0.7085 0.5392 -0.4553\nvn 0.7085 -0.5392 -0.4553\nvn 0.7657 0.4142 -0.4921\nvn 0.1224 0.9893 -0.0786\nvn 0.6369 -0.6532 -0.4093\nvn 0.8074 0.2808 -0.5189\nvn 0.2395 0.9586 -0.1539\nvn 0.5524 -0.7541 -0.3550\nvn 0.8327 0.1419 -0.5352\nvn 0.3517 0.9084 -0.2260\nvn 0.4567 -0.8398 -0.2935\nvn 0.8412 0.0000 -0.5406\nvn 0.4567 0.8398 -0.2935\nvn 0.3517 -0.9084 -0.2260\nvn 0.4939 0.8398 -0.2255\nvn 0.5973 0.7541 -0.2728\nvn 0.3803 -0.9084 -0.1737\nvn 0.2590 -0.9586 -0.1183\nvn 0.9004 -0.1419 -0.4112\nvn 0.8730 -0.2808 -0.3987\nvn 0.6887 0.6532 -0.3145\nvn 0.1323 -0.9893 -0.0604\nvn 0.8279 -0.4142 -0.3781\nvn 0.7661 0.5392 -0.3498\nvn 0.7661 -0.5392 -0.3498\nvn 0.8279 0.4142 -0.3781\nvn 0.1323 0.9893 -0.0604\nvn 0.6887 -0.6532 -0.3145\nvn 0.8730 0.2808 -0.3987\nvn 0.2590 0.9586 -0.1183\nvn 0.5973 -0.7541 -0.2728\nvn 0.9004 0.1419 -0.4112\nvn 0.3803 0.9084 -0.1737\nvn 0.4939 -0.8398 -0.2255\nvn 0.9096 0.0000 -0.4154\nvn 0.9595 0.0000 -0.2817\nvn 0.9498 -0.1419 -0.2789\nvn 0.5209 0.8398 -0.1530\nvn 0.6301 0.7541 -0.1850\nvn 0.4011 -0.9084 -0.1178\nvn 0.2732 -0.9586 -0.0802\nvn 0.9209 -0.2808 -0.2704\nvn 0.7265 0.6532 -0.2133\nvn 0.1396 -0.9893 -0.0410\nvn 0.8733 -0.4142 -0.2564\nvn 0.8081 0.5392 -0.2373\nvn 0.8081 -0.5392 -0.2373\nvn 0.8733 0.4142 -0.2564\nvn 0.1396 0.9893 -0.0410\nvn 0.7265 -0.6532 -0.2133\nvn 0.9209 0.2808 -0.2704\nvn 0.2732 0.9586 -0.0802\nvn 0.6301 -0.7541 -0.1850\nvn 0.9498 0.1419 -0.2789\nvn 0.4011 0.9084 -0.1178\nvn 0.5209 -0.8398 -0.1530\nvn 0.4138 0.9084 -0.0595\nvn 0.5374 0.8398 -0.0772\nvn 0.5374 -0.8398 -0.0772\nvn 0.4138 -0.9084 -0.0595\nvn 0.9898 0.0000 -0.1423\nvn 0.9798 -0.1419 -0.1409\nvn 0.6500 0.7541 -0.0934\nvn 0.2818 -0.9586 -0.0405\nvn 0.9499 -0.2808 -0.1366\nvn 0.7494 0.6532 -0.1077\nvn 0.1440 -0.9893 -0.0207\nvn 0.9009 -0.4142 -0.1295\nvn 0.8336 0.5392 -0.1198\nvn 0.8336 -0.5392 -0.1198\nvn 0.9009 0.4142 -0.1295\nvn 0.1440 0.9893 -0.0207\nvn 0.7494 -0.6532 -0.1077\nvn 0.9499 0.2808 -0.1366\nvn 0.2818 0.9586 -0.0405\nvn 0.6500 -0.7541 -0.0934\nvn 0.9798 0.1419 -0.1409\nvn 0.6567 -0.7541 0.0000\nvn 0.5429 -0.8398 0.0000\nvn 0.9899 0.1419 0.0000\nvn 1.0000 0.0000 0.0000\nvn 0.4181 0.9084 0.0000\nvn 0.5429 0.8398 0.0000\nvn 0.4181 -0.9084 0.0000\nvn 0.9899 -0.1419 0.0000\nvn 0.6567 0.7541 0.0000\nvn 0.2847 -0.9586 0.0000\nvn 0.9597 -0.2808 0.0000\nvn 0.7571 0.6532 0.0000\nvn 0.1455 -0.9893 0.0000\nvn 0.9102 -0.4142 0.0000\nvn 0.8422 0.5392 0.0000\nvn 0.8422 -0.5392 0.0000\nvn 0.9102 0.4142 0.0000\nvn 0.1455 0.9893 0.0000\nvn 0.7571 -0.6532 0.0000\nvn 0.9597 0.2808 0.0000\nvn 0.2847 0.9586 0.0000\nvn 0.9499 0.2808 0.1366\nvn 0.9798 0.1419 0.1409\nvn 0.2818 0.9586 0.0405\nvn 0.4138 0.9084 0.0595\nvn 0.6500 -0.7541 0.0934\nvn 0.5374 -0.8398 0.0772\nvn 0.9898 0.0000 0.1423\nvn 0.5374 0.8398 0.0772\nvn 0.4138 -0.9084 0.0595\nvn 0.9798 -0.1419 0.1409\nvn 0.6500 0.7541 0.0934\nvn 0.2818 -0.9586 0.0405\nvn 0.9499 -0.2808 0.1366\nvn 0.7494 0.6532 0.1077\nvn 0.1440 -0.9893 0.0207\nvn 0.9009 -0.4142 0.1295\nvn 0.8336 0.5392 0.1198\nvn 0.8336 -0.5392 0.1198\nvn 0.9009 0.4142 0.1295\nvn 0.1440 0.9893 0.0207\nvn 0.7494 -0.6532 0.1077\nvn 0.1396 0.9893 0.0410\nvn 0.2732 0.9586 0.0802\nvn 0.7265 -0.6532 0.2133\nvn 0.6301 -0.7541 0.1850\nvn 0.9209 0.2808 0.2704\nvn 0.9498 0.1419 0.2789\nvn 0.4011 0.9084 0.1178\nvn 0.5209 -0.8398 0.1530\nvn 0.9595 0.0000 0.2817\nvn 0.5209 0.8398 0.1530\nvn 0.4011 -0.9084 0.1178\nvn 0.9498 -0.1419 0.2789\nvn 0.6301 0.7541 0.1850\nvn 0.2732 -0.9586 0.0802\nvn 0.9209 -0.2808 0.2704\nvn 0.7265 0.6532 0.2133\nvn 0.1396 -0.9893 0.0410\nvn 0.8733 -0.4142 0.2564\nvn 0.8081 0.5392 0.2373\nvn 0.8081 -0.5392 0.2373\nvn 0.8733 0.4142 0.2564\nvn 0.8279 0.4142 0.3781\nvn 0.8730 0.2808 0.3987\nvn 0.1323 0.9893 0.0604\nvn 0.2590 0.9586 0.1183\nvn 0.6887 -0.6532 0.3145\nvn 0.5973 -0.7541 0.2728\nvn 0.9004 0.1419 0.4112\nvn 0.3803 0.9084 0.1737\nvn 0.4939 -0.8398 0.2255\nvn 0.9096 0.0000 0.4154\nvn 0.4939 0.8398 0.2255\nvn 0.3803 -0.9084 0.1737\nvn 0.9004 -0.1419 0.4112\nvn 0.5973 0.7541 0.2728\nvn 0.2590 -0.9586 0.1183\nvn 0.8730 -0.2808 0.3987\nvn 0.6887 0.6532 0.3145\nvn 0.1323 -0.9893 0.0604\nvn 0.8279 -0.4142 0.3781\nvn 0.7661 0.5392 0.3498\nvn 0.7661 -0.5392 0.3498\nvn 0.1224 0.9893 0.0786\nvn 0.7085 -0.5392 0.4553\nvn 0.6369 -0.6532 0.4093\nvn 0.7657 0.4142 0.4921\nvn 0.8074 0.2808 0.5189\nvn 0.2395 0.9586 0.1539\nvn 0.5524 -0.7541 0.3550\nvn 0.8327 0.1419 0.5352\nvn 0.3517 0.9084 0.2260\nvn 0.4567 -0.8398 0.2935\nvn 0.8412 0.0000 0.5406\nvn 0.4567 0.8398 0.2935\nvn 0.3517 -0.9084 0.2260\nvn 0.8327 -0.1419 0.5352\nvn 0.5524 0.7541 0.3550\nvn 0.2395 -0.9586 0.1539\nvn 0.8074 -0.2808 0.5189\nvn 0.6369 0.6532 0.4093\nvn 0.1224 -0.9893 0.0786\nvn 0.7657 -0.4142 0.4921\nvn 0.7085 0.5392 0.4553\nvn 0.6879 -0.4142 0.5960\nvn 0.6365 -0.5392 0.5515\nvn 0.6365 0.5392 0.5515\nvn 0.6879 0.4142 0.5960\nvn 0.1099 0.9893 0.0952\nvn 0.5722 -0.6532 0.4958\nvn 0.7253 0.2808 0.6285\nvn 0.2152 0.9586 0.1864\nvn 0.4963 -0.7541 0.4300\nvn 0.7481 0.1419 0.6482\nvn 0.3160 0.9084 0.2738\nvn 0.4103 -0.8398 0.3555\nvn 0.7557 0.0000 0.6548\nvn 0.4103 0.8398 0.3555\nvn 0.3160 -0.9084 0.2738\nvn 0.7481 -0.1419 0.6482\nvn 0.4963 0.7541 0.4300\nvn 0.2152 -0.9586 0.1864\nvn 0.7253 -0.2808 0.6285\nvn 0.5722 0.6532 0.4958\nvn 0.1099 -0.9893 0.0952\nvn 0.4958 0.6532 0.5722\nvn 0.5515 0.5392 0.6365\nvn 0.0952 -0.9893 0.1099\nvn 0.5960 -0.4142 0.6879\nvn 0.5515 -0.5392 0.6365\nvn 0.5960 0.4142 0.6879\nvn 0.0952 0.9893 0.1099\nvn 0.4958 -0.6532 0.5722\nvn 0.6285 0.2808 0.7253\nvn 0.1864 0.9586 0.2152\nvn 0.4300 -0.7541 0.4963\nvn 0.6482 0.1419 0.7481\nvn 0.2738 0.9084 0.3160\nvn 0.3555 -0.8398 0.4103\nvn 0.6548 0.0000 0.7557\nvn 0.3555 0.8398 0.4103\nvn 0.2738 -0.9084 0.3160\nvn 0.6482 -0.1419 0.7481\nvn 0.4300 0.7541 0.4963\nvn 0.1864 -0.9586 0.2152\nvn 0.6285 -0.2808 0.7253\nvn 0.5189 -0.2808 0.8074\nvn 0.4921 -0.4142 0.7657\nvn 0.4093 0.6532 0.6369\nvn 0.4553 0.5392 0.7085\nvn 0.0786 -0.9893 0.1224\nvn 0.4553 -0.5392 0.7085\nvn 0.4921 0.4142 0.7657\nvn 0.0786 0.9893 0.1224\nvn 0.4093 -0.6532 0.6369\nvn 0.5189 0.2808 0.8074\nvn 0.1539 0.9586 0.2395\nvn 0.3550 -0.7541 0.5524\nvn 0.5352 0.1419 0.8327\nvn 0.2260 0.9084 0.3517\nvn 0.2935 -0.8398 0.4567\nvn 0.5406 0.0000 0.8412\nvn 0.2935 0.8398 0.4567\nvn 0.2260 -0.9084 0.3517\nvn 0.5352 -0.1419 0.8327\nvn 0.3550 0.7541 0.5524\nvn 0.1539 -0.9586 0.2395\nvn 0.2728 0.7541 0.5973\nvn 0.3145 0.6532 0.6887\nvn 0.1183 -0.9586 0.2590\nvn 0.0604 -0.9893 0.1323\nvn 0.3987 -0.2808 0.8730\nvn 0.3781 -0.4142 0.8279\nvn 0.3498 0.5392 0.7661\nvn 0.3498 -0.5392 0.7661\nvn 0.3781 0.4142 0.8279\nvn 0.0604 0.9893 0.1323\nvn 0.3145 -0.6532 0.6887\nvn 0.3987 0.2808 0.8730\nvn 0.1183 0.9586 0.2590\nvn 0.2728 -0.7541 0.5973\nvn 0.4112 0.1419 0.9004\nvn 0.1737 0.9084 0.3803\nvn 0.2255 -0.8398 0.4939\nvn 0.4154 0.0000 0.9096\nvn 0.2255 0.8398 0.4939\nvn 0.1737 -0.9084 0.3803\nvn 0.4112 -0.1419 0.9004\nvn 0.1178 -0.9084 0.4011\nvn 0.0802 -0.9586 0.2732\nvn 0.2789 -0.1419 0.9498\nvn 0.2704 -0.2808 0.9209\nvn 0.1850 0.7541 0.6301\nvn 0.2133 0.6532 0.7265\nvn 0.0410 -0.9893 0.1396\nvn 0.2564 -0.4142 0.8733\nvn 0.2373 0.5392 0.8081\nvn 0.2373 -0.5392 0.8081\nvn 0.2564 0.4142 0.8733\nvn 0.0410 0.9893 0.1396\nvn 0.2133 -0.6532 0.7265\nvn 0.2704 0.2808 0.9209\nvn 0.0802 0.9586 0.2732\nvn 0.1850 -0.7541 0.6301\nvn 0.2789 0.1419 0.9498\nvn 0.1178 0.9084 0.4011\nvn 0.1530 -0.8398 0.5209\nvn 0.2817 0.0000 0.9595\nvn 0.1530 0.8398 0.5209\nvn 0.1423 0.0000 0.9898\nvn 0.1409 -0.1419 0.9798\nvn 0.0772 0.8398 0.5374\nvn 0.0934 0.7541 0.6500\nvn 0.0595 -0.9084 0.4138\nvn 0.0405 -0.9586 0.2818\nvn 0.1366 -0.2808 0.9499\nvn 0.1077 0.6532 0.7494\nvn 0.0207 -0.9893 0.1440\nvn 0.1295 -0.4142 0.9009\nvn 0.1198 0.5392 0.8336\nvn 0.1198 -0.5392 0.8336\nvn 0.1295 0.4142 0.9009\nvn 0.0207 0.9893 0.1440\nvn 0.1077 -0.6532 0.7494\nvn 0.1366 0.2808 0.9499\nvn 0.0405 0.9586 0.2818\nvn 0.0934 -0.7541 0.6500\nvn 0.1409 0.1419 0.9798\nvn 0.0595 0.9084 0.4138\nvn 0.0772 -0.8398 0.5374\nvn 0.0000 0.9084 0.4181\nvn 0.0000 0.8398 0.5429\nvn 0.0000 -0.8398 0.5429\nvn 0.0000 -0.9084 0.4181\nvn 0.0000 0.0000 1.0000\nvn 0.0000 -0.1419 0.9899\nvn 0.0000 0.7541 0.6567\nvn 0.0000 -0.9586 0.2847\nvn 0.0000 -0.2808 0.9597\nvn 0.0000 0.6532 0.7571\nvn 0.0000 -0.9893 0.1455\nvn 0.0000 -0.4142 0.9102\nvn 0.0000 0.5392 0.8422\nvn 0.0000 -0.5392 0.8422\nvn 0.0000 0.4142 0.9102\nvn 0.0000 0.9893 0.1455\nvn 0.0000 -0.6532 0.7571\nvn 0.0000 0.2808 0.9597\nvn 0.0000 0.9586 0.2847\nvn 0.0000 -0.7541 0.6567\nvn 0.0000 0.1419 0.9899\nvn -0.1409 0.1419 0.9798\nvn -0.1423 0.0000 0.9898\nvn -0.0595 0.9084 0.4138\nvn -0.0772 0.8398 0.5374\nvn -0.0772 -0.8398 0.5374\nvn -0.0595 -0.9084 0.4138\nvn -0.1409 -0.1419 0.9798\nvn -0.0934 0.7541 0.6500\nvn -0.0405 -0.9586 0.2818\nvn -0.1366 -0.2808 0.9499\nvn -0.1077 0.6532 0.7494\nvn -0.0207 -0.9893 0.1440\nvn -0.1295 -0.4142 0.9009\nvn -0.1198 0.5392 0.8336\nvn -0.1198 -0.5392 0.8336\nvn -0.1295 0.4142 0.9009\nvn -0.0207 0.9893 0.1440\nvn -0.1077 -0.6532 0.7494\nvn -0.1366 0.2808 0.9499\nvn -0.0405 0.9586 0.2818\nvn -0.0934 -0.7541 0.6500\nvn -0.0802 0.9586 0.2732\nvn -0.1178 0.9084 0.4011\nvn -0.1850 -0.7541 0.6301\nvn -0.1530 -0.8398 0.5209\nvn -0.2789 0.1419 0.9498\nvn -0.2817 0.0000 0.9595\nvn -0.1530 0.8398 0.5209\nvn -0.1178 -0.9084 0.4011\nvn -0.2789 -0.1419 0.9498\nvn -0.1850 0.7541 0.6301\nvn -0.0802 -0.9586 0.2732\nvn -0.2704 -0.2808 0.9209\nvn -0.2133 0.6532 0.7265\nvn -0.0410 -0.9893 0.1396\nvn -0.2564 -0.4142 0.8733\nvn -0.2373 0.5392 0.8081\nvn -0.2373 -0.5392 0.8081\nvn -0.2564 0.4142 0.8733\nvn -0.0410 0.9893 0.1396\nvn -0.2133 -0.6532 0.7265\nvn -0.2704 0.2808 0.9209\nvn -0.3145 -0.6532 0.6887\nvn -0.2728 -0.7541 0.5973\nvn -0.3987 0.2808 0.8730\nvn -0.4112 0.1419 0.9004\nvn -0.1183 0.9586 0.2590\nvn -0.1737 0.9084 0.3803\nvn -0.2255 -0.8398 0.4939\nvn -0.4154 0.0000 0.9096\nvn -0.2255 0.8398 0.4939\nvn -0.1737 -0.9084 0.3803\nvn -0.4112 -0.1419 0.9004\nvn -0.2728 0.7541 0.5973\nvn -0.1183 -0.9586 0.2590\nvn -0.3987 -0.2808 0.8730\nvn -0.3145 0.6532 0.6887\nvn -0.0604 -0.9893 0.1323\nvn -0.3781 -0.4142 0.8279\nvn -0.3498 0.5392 0.7661\nvn -0.3498 -0.5392 0.7661\nvn -0.3781 0.4142 0.8279\nvn -0.0604 0.9893 0.1323\nvn -0.4921 0.4142 0.7657\nvn -0.5189 0.2808 0.8074\nvn -0.0786 0.9893 0.1224\nvn -0.1539 0.9586 0.2395\nvn -0.4093 -0.6532 0.6369\nvn -0.3550 -0.7541 0.5524\nvn -0.5352 0.1419 0.8327\nvn -0.2260 0.9084 0.3517\nvn -0.2935 -0.8398 0.4567\nvn -0.5406 0.0000 0.8412\nvn -0.2935 0.8398 0.4567\nvn -0.2260 -0.9084 0.3517\nvn -0.5352 -0.1419 0.8327\nvn -0.3550 0.7541 0.5524\nvn -0.1539 -0.9586 0.2395\nvn -0.5189 -0.2808 0.8074\nvn -0.4093 0.6532 0.6369\nvn -0.0786 -0.9893 0.1224\nvn -0.4921 -0.4142 0.7657\nvn -0.4553 0.5392 0.7085\nvn -0.4553 -0.5392 0.7085\nvn -0.0952 0.9893 0.1099\nvn -0.5515 -0.5392 0.6365\nvn -0.4958 -0.6532 0.5722\nvn -0.5960 0.4142 0.6879\nvn -0.6285 0.2808 0.7253\nvn -0.1864 0.9586 0.2152\nvn -0.4300 -0.7541 0.4963\nvn -0.6482 0.1419 0.7481\nvn -0.2738 0.9084 0.3160\nvn -0.3555 -0.8398 0.4103\nvn -0.6548 0.0000 0.7557\nvn -0.3555 0.8398 0.4103\nvn -0.2738 -0.9084 0.3160\nvn -0.6482 -0.1419 0.7481\nvn -0.4300 0.7541 0.4963\nvn -0.1864 -0.9586 0.2152\nvn -0.6285 -0.2808 0.7253\nvn -0.4958 0.6532 0.5722\nvn -0.0952 -0.9893 0.1099\nvn -0.5960 -0.4142 0.6879\nvn -0.5515 0.5392 0.6365\nvn -0.6365 0.5392 0.5515\nvn -0.6879 0.4142 0.5960\nvn -0.1099 0.9893 0.0952\nvn -0.6365 -0.5392 0.5515\nvn -0.5722 -0.6532 0.4958\nvn -0.7253 0.2808 0.6285\nvn -0.2152 0.9586 0.1864\nvn -0.4963 -0.7541 0.4300\nvn -0.7481 0.1419 0.6482\nvn -0.3160 0.9084 0.2738\nvn -0.4103 -0.8398 0.3555\nvn -0.7557 0.0000 0.6548\nvn -0.4103 0.8398 0.3555\nvn -0.3160 -0.9084 0.2738\nvn -0.7481 -0.1419 0.6482\nvn -0.4963 0.7541 0.4300\nvn -0.2152 -0.9586 0.1864\nvn -0.7253 -0.2808 0.6285\nvn -0.5722 0.6532 0.4958\nvn -0.1099 -0.9893 0.0952\nvn -0.6879 -0.4142 0.5960\nvn -0.1224 -0.9893 0.0786\nvn -0.7657 -0.4142 0.4921\nvn -0.7085 -0.5392 0.4553\nvn -0.7085 0.5392 0.4553\nvn -0.7657 0.4142 0.4921\nvn -0.1224 0.9893 0.0786\nvn -0.6369 -0.6532 0.4093\nvn -0.8074 0.2808 0.5189\nvn -0.2395 0.9586 0.1539\nvn -0.5524 -0.7541 0.3550\nvn -0.8327 0.1419 0.5352\nvn -0.3517 0.9084 0.2260\nvn -0.4567 -0.8398 0.2935\nvn -0.8412 0.0000 0.5406\nvn -0.4567 0.8398 0.2935\nvn -0.3517 -0.9084 0.2260\nvn -0.8327 -0.1419 0.5352\nvn -0.5524 0.7541 0.3550\nvn -0.2395 -0.9586 0.1539\nvn -0.8074 -0.2808 0.5189\nvn -0.6369 0.6532 0.4093\nvn -0.8730 -0.2808 0.3987\nvn -0.8279 -0.4142 0.3781\nvn -0.6887 0.6532 0.3145\nvn -0.7661 0.5392 0.3498\nvn -0.1323 -0.9893 0.0604\nvn -0.7661 -0.5392 0.3498\nvn -0.8279 0.4142 0.3781\nvn -0.1323 0.9893 0.0604\nvn -0.6887 -0.6532 0.3145\nvn -0.8730 0.2808 0.3987\nvn -0.2590 0.9586 0.1183\nvn -0.5973 -0.7541 0.2728\nvn -0.9004 0.1419 0.4112\nvn -0.3803 0.9084 0.1737\nvn -0.4939 -0.8398 0.2255\nvn -0.9096 0.0000 0.4154\nvn -0.4939 0.8398 0.2255\nvn -0.3803 -0.9084 0.1737\nvn -0.9004 -0.1419 0.4112\nvn -0.5973 0.7541 0.2728\nvn -0.2590 -0.9586 0.1183\nvn -0.6301 0.7541 0.1850\nvn -0.7265 0.6532 0.2133\nvn -0.2732 -0.9586 0.0802\nvn -0.1396 -0.9893 0.0410\nvn -0.9209 -0.2808 0.2704\nvn -0.8733 -0.4142 0.2564\nvn -0.8081 0.5392 0.2373\nvn -0.8081 -0.5392 0.2373\nvn -0.8733 0.4142 0.2564\nvn -0.1396 0.9893 0.0410\nvn -0.7265 -0.6532 0.2133\nvn -0.9209 0.2808 0.2704\nvn -0.2732 0.9586 0.0802\nvn -0.6301 -0.7541 0.1850\nvn -0.9498 0.1419 0.2789\nvn -0.4011 0.9084 0.1178\nvn -0.5209 -0.8398 0.1530\nvn -0.9595 0.0000 0.2817\nvn -0.5209 0.8398 0.1530\nvn -0.4011 -0.9084 0.1178\nvn -0.9498 -0.1419 0.2789\nvn -0.9798 -0.1419 0.1409\nvn -0.9499 -0.2808 0.1366\nvn -0.6500 0.7541 0.0934\nvn -0.7494 0.6532 0.1077\nvn -0.2818 -0.9586 0.0405\nvn -0.1440 -0.9893 0.0207\nvn -0.9009 -0.4142 0.1295\nvn -0.8336 0.5392 0.1198\nvn -0.8336 -0.5391 0.1198\nvn -0.9009 0.4142 0.1295\nvn -0.1440 0.9893 0.0207\nvn -0.7494 -0.6532 0.1077\nvn -0.9499 0.2808 0.1366\nvn -0.2818 0.9586 0.0405\nvn -0.6500 -0.7541 0.0934\nvn -0.9798 0.1419 0.1409\nvn -0.4138 0.9084 0.0595\nvn -0.5374 -0.8398 0.0772\nvn -0.9898 0.0000 0.1423\nvn -0.5374 0.8398 0.0772\nvn -0.4138 -0.9084 0.0595\nvn -0.5429 0.8398 0.0000\nvn -0.6567 0.7541 0.0000\nvn -0.4181 -0.9084 0.0000\nvn -0.2847 -0.9586 0.0000\nvn -0.9899 -0.1419 0.0000\nvn -0.9597 -0.2808 0.0000\nvn -0.7571 0.6532 0.0000\nvn -0.1455 -0.9893 0.0000\nvn -0.9102 -0.4142 0.0000\nvn -0.8422 0.5392 0.0000\nvn -0.8422 -0.5391 0.0000\nvn -0.9102 0.4142 0.0000\nvn -0.1455 0.9893 0.0000\nvn -0.7571 -0.6532 0.0000\nvn -0.9597 0.2808 0.0000\nvn -0.2847 0.9586 0.0000\nvn -0.6567 -0.7541 0.0000\nvn -0.9899 0.1419 0.0000\nvn -0.4181 0.9084 0.0000\nvn -0.5429 -0.8398 0.0000\nvn -1.0000 0.0000 0.0000\nvn -0.5374 -0.8398 -0.0772\nvn -0.4138 -0.9084 -0.0595\nvn -0.9898 0.0000 -0.1423\nvn -0.9798 -0.1419 -0.1409\nvn -0.5374 0.8398 -0.0772\nvn -0.6500 0.7541 -0.0934\nvn -0.2818 -0.9586 -0.0405\nvn -0.9499 -0.2808 -0.1366\nvn -0.7494 0.6532 -0.1077\nvn -0.1440 -0.9893 -0.0207\nvn -0.9009 -0.4142 -0.1295\nvn -0.8336 0.5392 -0.1198\nvn -0.8336 -0.5391 -0.1198\nvn -0.9009 0.4142 -0.1295\nvn -0.1440 0.9893 -0.0207\nvn -0.7494 -0.6532 -0.1077\nvn -0.9499 0.2808 -0.1366\nvn -0.2818 0.9586 -0.0405\nvn -0.6500 -0.7541 -0.0934\nvn -0.9798 0.1419 -0.1409\nvn -0.4138 0.9084 -0.0595\nvn -0.9498 0.1419 -0.2789\nvn -0.9595 0.0000 -0.2817\nvn -0.4011 0.9084 -0.1178\nvn -0.5209 0.8398 -0.1530\nvn -0.5209 -0.8398 -0.1530\nvn -0.4011 -0.9084 -0.1178\nvn -0.9498 -0.1419 -0.2789\nvn -0.6301 0.7541 -0.1850\nvn -0.2732 -0.9586 -0.0802\nvn -0.9209 -0.2808 -0.2704\nvn -0.7265 0.6532 -0.2133\nvn -0.1396 -0.9893 -0.0410\nvn -0.8733 -0.4142 -0.2564\nvn -0.8081 0.5392 -0.2373\nvn -0.8081 -0.5391 -0.2373\nvn -0.8733 0.4142 -0.2564\nvn -0.1396 0.9893 -0.0410\nvn -0.7265 -0.6532 -0.2133\nvn -0.9209 0.2808 -0.2704\nvn -0.2732 0.9586 -0.0802\nvn -0.6301 -0.7541 -0.1850\nvn -0.2590 0.9586 -0.1183\nvn -0.3803 0.9084 -0.1737\nvn -0.5973 -0.7541 -0.2728\nvn -0.4939 -0.8398 -0.2255\nvn -0.9004 0.1419 -0.4112\nvn -0.9096 0.0000 -0.4154\nvn -0.4939 0.8398 -0.2255\nvn -0.3803 -0.9084 -0.1737\nvn -0.9004 -0.1419 -0.4112\nvn -0.5973 0.7541 -0.2728\nvn -0.2590 -0.9586 -0.1183\nvn -0.8730 -0.2808 -0.3987\nvn -0.6887 0.6532 -0.3145\nvn -0.1323 -0.9893 -0.0604\nvn -0.8279 -0.4142 -0.3781\nvn -0.7661 0.5392 -0.3498\nvn -0.7661 -0.5391 -0.3498\nvn -0.8279 0.4142 -0.3781\nvn -0.1323 0.9893 -0.0604\nvn -0.6887 -0.6532 -0.3145\nvn -0.8730 0.2808 -0.3987\nvn -0.8074 0.2808 -0.5189\nvn -0.8327 0.1419 -0.5352\nvn -0.2395 0.9586 -0.1539\nvn -0.3517 0.9084 -0.2260\nvn -0.5524 -0.7541 -0.3550\nvn -0.4567 -0.8398 -0.2935\nvn -0.8412 0.0000 -0.5406\nvn -0.4567 0.8398 -0.2935\nvn -0.3517 -0.9084 -0.2260\nvn -0.8327 -0.1419 -0.5352\nvn -0.5524 0.7541 -0.3550\nvn -0.2395 -0.9586 -0.1539\nvn -0.8074 -0.2808 -0.5189\nvn -0.6369 0.6532 -0.4093\nvn -0.1224 -0.9893 -0.0786\nvn -0.7657 -0.4142 -0.4921\nvn -0.7085 0.5392 -0.4553\nvn -0.7085 -0.5391 -0.4553\nvn -0.7657 0.4142 -0.4921\nvn -0.1224 0.9893 -0.0786\nvn -0.6369 -0.6532 -0.4093\nvn -0.7481 -0.1419 -0.6482\nvn -0.7253 -0.2809 -0.6285\nvn -0.4963 0.7541 -0.4300\nvn -0.5722 0.6532 -0.4958\nvn -0.2152 -0.9586 -0.1864\nvn -0.1099 -0.9893 -0.0952\nvn -0.6879 -0.4142 -0.5960\nvn -0.6365 0.5392 -0.5515\nvn -0.6365 -0.5391 -0.5515\nvn -0.6879 0.4142 -0.5960\nvn -0.1099 0.9893 -0.0952\nvn -0.5722 -0.6532 -0.4958\nvn -0.7253 0.2808 -0.6285\nvn -0.2152 0.9586 -0.1864\nvn -0.4963 -0.7541 -0.4300\nvn -0.7481 0.1419 -0.6482\nvn -0.3160 0.9084 -0.2738\nvn -0.4103 -0.8398 -0.3555\nvn -0.7557 0.0000 -0.6548\nvn -0.4103 0.8398 -0.3555\nvn -0.3160 -0.9084 -0.2738\nvn -0.3555 0.8398 -0.4103\nvn -0.4300 0.7541 -0.4963\nvn -0.2738 -0.9084 -0.3160\nvn -0.1864 -0.9586 -0.2152\nvn -0.6482 -0.1419 -0.7481\nvn -0.6285 -0.2808 -0.7253\nvn -0.4958 0.6532 -0.5722\nvn -0.0952 -0.9893 -0.1099\nvn -0.5960 -0.4142 -0.6879\nvn -0.5515 0.5392 -0.6365\nvn -0.5515 -0.5391 -0.6365\nvn -0.5960 0.4142 -0.6879\nvn -0.0952 0.9893 -0.1099\nvn -0.4958 -0.6532 -0.5722\nvn -0.6285 0.2808 -0.7253\nvn -0.1864 0.9586 -0.2152\nvn -0.4300 -0.7541 -0.4963\nvn -0.6482 0.1419 -0.7481\nvn -0.2738 0.9084 -0.3160\nvn -0.3555 -0.8398 -0.4103\nvn -0.6548 0.0000 -0.7557\nvn -0.5406 0.0000 -0.8412\nvn -0.5352 -0.1419 -0.8327\nvn -0.2935 0.8398 -0.4567\nvn -0.3550 0.7541 -0.5524\nvn -0.2260 -0.9084 -0.3517\nvn -0.1539 -0.9586 -0.2395\nvn -0.5189 -0.2808 -0.8074\nvn -0.4093 0.6532 -0.6369\nvn -0.0786 -0.9893 -0.1224\nvn -0.4921 -0.4142 -0.7657\nvn -0.4553 0.5392 -0.7085\nvn -0.4553 -0.5391 -0.7085\nvn -0.4921 0.4142 -0.7657\nvn -0.0786 0.9893 -0.1224\nvn -0.4093 -0.6532 -0.6369\nvn -0.5189 0.2808 -0.8074\nvn -0.1539 0.9586 -0.2395\nvn -0.3550 -0.7541 -0.5524\nvn -0.5352 0.1419 -0.8327\nvn -0.2260 0.9084 -0.3517\nvn -0.2935 -0.8398 -0.4567\nvn -0.1737 0.9084 -0.3803\nvn -0.2255 0.8398 -0.4939\nvn -0.2255 -0.8398 -0.4939\nvn -0.1737 -0.9084 -0.3803\nvn -0.4154 0.0000 -0.9096\nvn -0.4112 -0.1419 -0.9004\nvn -0.2728 0.7541 -0.5973\nvn -0.1183 -0.9586 -0.2590\nvn -0.3987 -0.2809 -0.8730\nvn -0.3145 0.6532 -0.6887\nvn -0.0604 -0.9893 -0.1323\nvn -0.3781 -0.4142 -0.8279\nvn -0.3498 0.5392 -0.7661\nvn -0.3498 -0.5391 -0.7661\nvn -0.3781 0.4142 -0.8279\nvn -0.0604 0.9893 -0.1323\nvn -0.3145 -0.6532 -0.6887\nvn -0.3987 0.2808 -0.8730\nvn -0.1183 0.9586 -0.2590\nvn -0.2728 -0.7541 -0.5973\nvn -0.4112 0.1419 -0.9004\nvn -0.1850 -0.7541 -0.6301\nvn -0.1530 -0.8398 -0.5209\nvn -0.2789 0.1419 -0.9498\nvn -0.2817 0.0000 -0.9595\nvn -0.1178 0.9084 -0.4011\nvn -0.1530 0.8398 -0.5209\nvn -0.1178 -0.9084 -0.4011\nvn -0.2789 -0.1419 -0.9498\nvn -0.1850 0.7541 -0.6301\nvn -0.0802 -0.9586 -0.2732\nvn -0.2704 -0.2809 -0.9209\nvn -0.2133 0.6532 -0.7265\nvn -0.0410 -0.9893 -0.1396\nvn -0.2564 -0.4142 -0.8733\nvn -0.2373 0.5392 -0.8081\nvn -0.2373 -0.5391 -0.8081\nvn -0.2564 0.4142 -0.8733\nvn -0.0410 0.9893 -0.1396\nvn -0.2133 -0.6532 -0.7265\nvn -0.2704 0.2808 -0.9209\nvn -0.0802 0.9586 -0.2732\nvn -0.1366 0.2808 -0.9499\nvn -0.1409 0.1419 -0.9798\nvn -0.0405 0.9586 -0.2818\nvn -0.0595 0.9084 -0.4138\nvn -0.0934 -0.7541 -0.6500\nvn -0.0772 -0.8398 -0.5374\nvn -0.1423 0.0000 -0.9898\nvn -0.0772 0.8398 -0.5374\nvn -0.0595 -0.9084 -0.4138\nvn -0.1409 -0.1419 -0.9798\nvn -0.0934 0.7541 -0.6500\nvn -0.0405 -0.9586 -0.2818\nvn -0.1366 -0.2809 -0.9499\nvn -0.1077 0.6532 -0.7494\nvn -0.0207 -0.9893 -0.1440\nvn -0.1295 -0.4142 -0.9009\nvn -0.1198 0.5392 -0.8336\nvn -0.1198 -0.5391 -0.8336\nvn -0.1295 0.4142 -0.9009\nvn -0.0207 0.9893 -0.1440\nvn -0.1077 -0.6532 -0.7494\nusemtl None\ns 1\nf 908/1/1 192/2/2 3/3/3\nf 922/4/4 921/5/5 17/6/6 18/7/7\nf 916/8/8 915/9/9 10/10/10 11/11/11\nf 909/12/12 908/1/1 3/3/3 4/13/13\nf 923/14/14 922/4/4 18/7/7 19/15/15\nf 917/16/16 916/8/8 11/11/11 12/17/17\nf 910/18/18 909/12/12 4/13/13 5/19/19\nf 924/20/20 923/14/14 19/15/15 20/21/21\nf 918/22/22 917/16/16 12/17/17 13/23/23\nf 911/24/24 910/18/18 5/19/19 6/25/25\nf 925/26/26 924/20/20 20/21/21 21/27/27\nf 1/28/28 918/22/22 13/23/23 14/29/29\nf 912/30/30 911/24/24 6/25/25 7/31/31\nf 926/32/32 925/26/26 21/27/27 22/33/33\nf 919/34/34 1/28/28 14/29/29 15/35/35\nf 913/36/36 912/30/30 7/31/31 8/37/37\nf 2/38/38 926/32/32 22/33/33 23/39/39\nf 920/40/40 919/34/34 15/35/35 16/41/41\nf 914/42/42 913/36/36 8/37/37 9/43/43\nf 529/44/44 2/38/38 23/39/39\nf 921/5/5 920/40/40 16/41/41 17/6/6\nf 915/9/9 914/42/42 9/43/43 10/10/10\nf 18/7/7 17/6/6 38/45/45 39/46/46\nf 11/11/11 10/10/10 31/47/47 32/48/48\nf 4/13/13 3/3/3 24/49/49 25/50/50\nf 19/15/15 18/7/7 39/46/46 40/51/51\nf 12/17/17 11/11/11 32/48/48 33/52/52\nf 5/19/19 4/13/13 25/50/50 26/53/53\nf 20/21/21 19/15/15 40/51/51 41/54/54\nf 13/23/23 12/17/17 33/52/52 34/55/55\nf 6/25/25 5/19/19 26/53/53 27/56/56\nf 21/27/27 20/21/21 41/54/54 42/57/57\nf 14/29/29 13/23/23 34/55/55 35/58/58\nf 7/31/31 6/25/25 27/56/56 28/59/59\nf 22/33/33 21/27/27 42/57/57 43/60/60\nf 15/35/35 14/29/29 35/58/58 36/61/61\nf 8/37/37 7/31/31 28/59/59 29/62/62\nf 23/39/39 22/33/33 43/60/60 44/63/63\nf 16/41/41 15/35/35 36/61/61 37/64/64\nf 9/43/43 8/37/37 29/62/62 30/65/65\nf 529/66/44 23/39/39 44/63/63\nf 17/6/6 16/41/41 37/64/64 38/45/45\nf 10/10/10 9/43/43 30/65/65 31/47/47\nf 3/3/3 192/67/2 24/49/49\nf 31/47/47 30/65/65 51/68/66 52/69/67\nf 24/49/49 192/70/2 45/71/68\nf 39/46/46 38/45/45 59/72/69 60/73/70\nf 32/48/48 31/47/47 52/69/67 53/74/71\nf 25/50/50 24/49/49 45/71/68 46/75/72\nf 40/51/51 39/46/46 60/73/70 61/76/73\nf 33/52/52 32/48/48 53/74/71 54/77/74\nf 26/53/53 25/50/50 46/75/72 47/78/75\nf 41/54/54 40/51/51 61/76/73 62/79/76\nf 34/55/55 33/52/52 54/77/74 55/80/77\nf 27/56/56 26/53/53 47/78/75 48/81/78\nf 42/57/57 41/54/54 62/79/76 63/82/79\nf 35/58/58 34/55/55 55/80/77 56/83/80\nf 28/59/59 27/56/56 48/81/78 49/84/81\nf 43/60/60 42/57/57 63/82/79 64/85/82\nf 36/61/61 35/58/58 56/83/80 57/86/83\nf 29/62/62 28/59/59 49/84/81 50/87/84\nf 44/63/63 43/60/60 64/85/82 65/88/85\nf 37/64/64 36/61/61 57/86/83 58/89/86\nf 30/65/65 29/62/62 50/87/84 51/68/66\nf 529/90/44 44/63/63 65/88/85\nf 38/45/45 37/64/64 58/89/86 59/72/69\nf 59/72/69 58/89/86 79/91/87 80/92/88\nf 52/69/67 51/68/66 72/93/89 73/94/90\nf 45/71/68 192/95/2 66/96/91\nf 60/73/70 59/72/69 80/92/88 81/97/92\nf 53/74/71 52/69/67 73/94/90 74/98/93\nf 46/75/72 45/71/68 66/96/91 67/99/94\nf 61/76/73 60/73/70 81/97/92 82/100/95\nf 54/77/74 53/74/71 74/98/93 75/101/96\nf 47/78/75 46/75/72 67/99/94 68/102/97\nf 62/79/76 61/76/73 82/100/95 83/103/98\nf 55/80/77 54/77/74 75/101/96 76/104/99\nf 48/81/78 47/78/75 68/102/97 69/105/100\nf 63/82/79 62/79/76 83/103/98 84/106/101\nf 56/83/80 55/80/77 76/104/99 77/107/102\nf 49/84/81 48/81/78 69/105/100 70/108/103\nf 64/85/82 63/82/79 84/106/101 85/109/104\nf 57/86/83 56/83/80 77/107/102 78/110/105\nf 50/87/84 49/84/81 70/108/103 71/111/106\nf 65/88/85 64/85/82 85/109/104 86/112/107\nf 58/89/86 57/86/83 78/110/105 79/91/87\nf 51/68/66 50/87/84 71/111/106 72/93/89\nf 529/113/44 65/88/85 86/112/107\nf 72/93/89 71/111/106 92/114/108 93/115/109\nf 529/116/44 86/112/107 107/117/110\nf 80/92/88 79/91/87 100/118/111 101/119/112\nf 73/94/90 72/93/89 93/115/109 94/120/113\nf 66/96/91 192/121/2 87/122/114\nf 81/97/92 80/92/88 101/119/112 102/123/115\nf 74/98/93 73/94/90 94/120/113 95/124/116\nf 67/99/94 66/96/91 87/122/114 88/125/117\nf 82/100/95 81/97/92 102/123/115 103/126/118\nf 75/101/96 74/98/93 95/124/116 96/127/119\nf 68/102/97 67/99/94 88/125/117 89/128/120\nf 83/103/98 82/100/95 103/126/118 104/129/121\nf 76/104/99 75/101/96 96/127/119 97/130/122\nf 69/105/100 68/102/97 89/128/120 90/131/123\nf 84/106/101 83/103/98 104/129/121 105/132/124\nf 77/107/102 76/104/99 97/130/122 98/133/125\nf 70/108/103 69/105/100 90/131/123 91/134/126\nf 85/109/104 84/106/101 105/132/124 106/135/127\nf 78/110/105 77/107/102 98/133/125 99/136/128\nf 71/111/106 70/108/103 91/134/126 92/114/108\nf 86/112/107 85/109/104 106/135/127 107/117/110\nf 79/91/87 78/110/105 99/136/128 100/118/111\nf 107/117/110 106/135/127 127/137/129 128/138/130\nf 100/118/111 99/136/128 120/139/131 121/140/132\nf 93/115/109 92/114/108 113/141/133 114/142/134\nf 529/143/44 107/117/110 128/138/130\nf 101/119/112 100/118/111 121/140/132 122/144/135\nf 94/120/113 93/115/109 114/142/134 115/145/136\nf 87/122/114 192/146/2 108/147/137\nf 102/123/115 101/119/112 122/144/135 123/148/138\nf 95/124/116 94/120/113 115/145/136 116/149/139\nf 88/125/117 87/122/114 108/147/137 109/150/140\nf 103/126/118 102/123/115 123/148/138 124/151/141\nf 96/127/119 95/124/116 116/149/139 117/152/142\nf 89/128/120 88/125/117 109/150/140 110/153/143\nf 104/129/121 103/126/118 124/151/141 125/154/144\nf 97/130/122 96/127/119 117/152/142 118/155/145\nf 90/131/123 89/128/120 110/153/143 111/156/146\nf 105/132/124 104/129/121 125/154/144 126/157/147\nf 98/133/125 97/130/122 118/155/145 119/158/148\nf 91/134/126 90/131/123 111/156/146 112/159/149\nf 106/135/127 105/132/124 126/157/147 127/137/129\nf 99/136/128 98/133/125 119/158/148 120/139/131\nf 92/114/108 91/134/126 112/159/149 113/141/133\nf 120/139/131 119/158/148 140/160/150 141/161/151\nf 113/141/133 112/159/149 133/162/152 134/163/153\nf 128/138/130 127/137/129 148/164/154 149/165/155\nf 121/140/132 120/139/131 141/161/151 142/166/156\nf 114/142/134 113/141/133 134/163/153 135/167/157\nf 529/168/44 128/138/130 149/165/155\nf 122/144/135 121/140/132 142/166/156 143/169/158\nf 115/145/136 114/142/134 135/167/157 136/170/159\nf 108/147/137 192/171/2 129/172/160\nf 123/148/138 122/144/135 143/169/158 144/173/161\nf 116/149/139 115/145/136 136/170/159 137/174/162\nf 109/150/140 108/147/137 129/172/160 130/175/163\nf 124/151/141 123/148/138 144/173/161 145/176/164\nf 117/152/142 116/149/139 137/174/162 138/177/165\nf 110/153/143 109/150/140 130/175/163 131/178/166\nf 125/154/144 124/151/141 145/176/164 146/179/167\nf 118/155/145 117/152/142 138/177/165 139/180/168\nf 111/156/146 110/153/143 131/178/166 132/181/169\nf 126/157/147 125/154/144 146/179/167 147/182/170\nf 119/158/148 118/155/145 139/180/168 140/160/150\nf 112/159/149 111/156/146 132/181/169 133/162/152\nf 127/137/129 126/157/147 147/182/170 148/164/154\nf 133/162/152 132/181/169 153/183/171 154/184/172\nf 148/164/154 147/182/170 168/185/173 169/186/174\nf 141/161/151 140/160/150 161/187/175 162/188/176\nf 134/163/153 133/162/152 154/184/172 155/189/177\nf 149/165/155 148/164/154 169/186/174 170/190/178\nf 142/166/156 141/161/151 162/188/176 163/191/179\nf 135/167/157 134/163/153 155/189/177 156/192/180\nf 529/193/44 149/165/155 170/190/178\nf 143/169/158 142/166/156 163/191/179 164/194/181\nf 136/170/159 135/167/157 156/192/180 157/195/182\nf 129/172/160 192/196/2 150/197/183\nf 144/173/161 143/169/158 164/194/181 165/198/184\nf 137/174/162 136/170/159 157/195/182 158/199/185\nf 130/175/163 129/172/160 150/197/183 151/200/186\nf 145/176/164 144/173/161 165/198/184 166/201/187\nf 138/177/165 137/174/162 158/199/185 159/202/188\nf 131/178/166 130/175/163 151/200/186 152/203/189\nf 146/179/167 145/176/164 166/201/187 167/204/190\nf 139/180/168 138/177/165 159/202/188 160/205/191\nf 132/181/169 131/178/166 152/203/189 153/183/171\nf 147/182/170 146/179/167 167/204/190 168/185/173\nf 140/160/150 139/180/168 160/205/191 161/187/175\nf 161/187/175 160/205/191 181/206/192 182/207/193\nf 154/184/172 153/183/171 174/208/194 175/209/195\nf 169/186/174 168/185/173 189/210/196 190/211/197\nf 162/188/176 161/187/175 182/207/193 183/212/198\nf 155/189/177 154/184/172 175/209/195 176/213/199\nf 170/190/178 169/186/174 190/211/197 191/214/200\nf 163/191/179 162/188/176 183/212/198 184/215/201\nf 156/192/180 155/189/177 176/213/199 177/216/202\nf 529/217/44 170/190/178 191/214/200\nf 164/194/181 163/191/179 184/215/201 185/218/203\nf 157/195/182 156/192/180 177/216/202 178/219/204\nf 150/197/183 192/220/2 171/221/205\nf 165/198/184 164/194/181 185/218/203 186/222/206\nf 158/199/185 157/195/182 178/219/204 179/223/207\nf 151/200/186 150/197/183 171/221/205 172/224/208\nf 166/201/187 165/198/184 186/222/206 187/225/209\nf 159/202/188 158/199/185 179/223/207 180/226/210\nf 152/203/189 151/200/186 172/224/208 173/227/211\nf 167/204/190 166/201/187 187/225/209 188/228/212\nf 160/205/191 159/202/188 180/226/210 181/206/192\nf 153/183/171 152/203/189 173/227/211 174/208/194\nf 168/185/173 167/204/190 188/228/212 189/210/196\nf 174/208/194 173/227/211 195/229/213 196/230/214\nf 189/210/196 188/228/212 210/231/215 211/232/216\nf 182/207/193 181/206/192 203/233/217 204/234/218\nf 175/209/195 174/208/194 196/230/214 197/235/219\nf 190/211/197 189/210/196 211/232/216 212/236/220\nf 183/212/198 182/207/193 204/234/218 205/237/221\nf 176/213/199 175/209/195 197/235/219 198/238/222\nf 191/214/200 190/211/197 212/236/220 213/239/223\nf 184/215/201 183/212/198 205/237/221 206/240/224\nf 177/216/202 176/213/199 198/238/222 199/241/225\nf 529/242/44 191/214/200 213/239/223\nf 185/218/203 184/215/201 206/240/224 207/243/226\nf 178/219/204 177/216/202 199/241/225 200/244/227\nf 171/221/205 192/245/2 193/246/228\nf 186/222/206 185/218/203 207/243/226 208/247/229\nf 179/223/207 178/219/204 200/244/227 201/248/230\nf 172/224/208 171/221/205 193/246/228 194/249/231\nf 187/225/209 186/222/206 208/247/229 209/250/232\nf 180/226/210 179/223/207 201/248/230 202/251/233\nf 173/227/211 172/224/208 194/249/231 195/229/213\nf 188/228/212 187/225/209 209/250/232 210/231/215\nf 181/206/192 180/226/210 202/251/233 203/233/217\nf 210/231/215 209/250/232 230/252/234 231/253/235\nf 203/233/217 202/251/233 223/254/236 224/255/237\nf 196/230/214 195/229/213 216/256/238 217/257/239\nf 211/232/216 210/231/215 231/253/235 232/258/240\nf 204/234/218 203/233/217 224/255/237 225/259/241\nf 197/235/219 196/230/214 217/257/239 218/260/242\nf 212/236/220 211/232/216 232/258/240 233/261/243\nf 205/237/221 204/234/218 225/259/241 226/262/244\nf 198/238/222 197/235/219 218/260/242 219/263/245\nf 213/239/223 212/236/220 233/261/243 234/264/246\nf 206/240/224 205/237/221 226/262/244 227/265/247\nf 199/241/225 198/238/222 219/263/245 220/266/248\nf 529/267/44 213/239/223 234/264/246\nf 207/243/226 206/240/224 227/265/247 228/268/249\nf 200/244/227 199/241/225 220/266/248 221/269/250\nf 193/246/228 192/270/2 214/271/251\nf 208/247/229 207/243/226 228/268/249 229/272/252\nf 201/248/230 200/244/227 221/269/250 222/273/253\nf 194/249/231 193/246/228 214/271/251 215/274/254\nf 209/250/232 208/247/229 229/272/252 230/252/234\nf 202/251/233 201/248/230 222/273/253 223/254/236\nf 195/229/213 194/249/231 215/274/254 216/256/238\nf 223/254/236 222/273/253 243/275/255 244/276/256\nf 216/256/238 215/274/254 236/277/257 237/278/258\nf 231/253/235 230/252/234 251/279/259 252/280/260\nf 224/255/237 223/254/236 244/276/256 245/281/261\nf 217/257/239 216/256/238 237/278/258 238/282/262\nf 232/258/240 231/253/235 252/280/260 253/283/263\nf 225/259/241 224/255/237 245/281/261 246/284/264\nf 218/260/242 217/257/239 238/282/262 239/285/265\nf 233/261/243 232/258/240 253/283/263 254/286/266\nf 226/262/244 225/259/241 246/284/264 247/287/267\nf 219/263/245 218/260/242 239/285/265 240/288/268\nf 234/264/246 233/261/243 254/286/266 255/289/269\nf 227/265/247 226/262/244 247/287/267 248/290/270\nf 220/266/248 219/263/245 240/288/268 241/291/271\nf 529/292/44 234/264/246 255/289/269\nf 228/268/249 227/265/247 248/290/270 249/293/272\nf 221/269/250 220/266/248 241/291/271 242/294/273\nf 214/271/251 192/295/2 235/296/274\nf 229/272/252 228/268/249 249/293/272 250/297/275\nf 222/273/253 221/269/250 242/294/273 243/275/255\nf 215/274/254 214/271/251 235/296/274 236/277/257\nf 230/252/234 229/272/252 250/297/275 251/279/259\nf 236/277/257 235/296/274 256/298/276 257/299/277\nf 251/279/259 250/297/275 271/300/278 272/301/279\nf 244/276/256 243/275/255 264/302/280 265/303/281\nf 237/278/258 236/277/257 257/299/277 258/304/282\nf 252/280/260 251/279/259 272/301/279 273/305/283\nf 245/281/261 244/276/256 265/303/281 266/306/284\nf 238/282/262 237/278/258 258/304/282 259/307/285\nf 253/283/263 252/280/260 273/305/283 274/308/286\nf 246/284/264 245/281/261 266/306/284 267/309/287\nf 239/285/265 238/282/262 259/307/285 260/310/288\nf 254/286/266 253/283/263 274/308/286 275/311/289\nf 247/287/267 246/284/264 267/309/287 268/312/290\nf 240/288/268 239/285/265 260/310/288 261/313/291\nf 255/289/269 254/286/266 275/311/289 276/314/292\nf 248/290/270 247/287/267 268/312/290 269/315/293\nf 241/291/271 240/288/268 261/313/291 262/316/294\nf 529/317/44 255/289/269 276/314/292\nf 249/293/272 248/290/270 269/315/293 270/318/295\nf 242/294/273 241/291/271 262/316/294 263/319/296\nf 235/296/274 192/320/2 256/298/276\nf 250/297/275 249/293/272 270/318/295 271/300/278\nf 243/275/255 242/294/273 263/319/296 264/302/280\nf 264/302/280 263/319/296 284/321/297 285/322/298\nf 257/299/277 256/298/276 277/323/299 278/324/300\nf 272/301/279 271/300/278 292/325/301 293/326/302\nf 265/303/281 264/302/280 285/322/298 286/327/303\nf 258/304/282 257/299/277 278/324/300 279/328/304\nf 273/305/283 272/301/279 293/326/302 294/329/305\nf 266/306/284 265/303/281 286/327/303 287/330/306\nf 259/307/285 258/304/282 279/328/304 280/331/307\nf 274/308/286 273/305/283 294/329/305 295/332/308\nf 267/309/287 266/306/284 287/330/306 288/333/309\nf 260/310/288 259/307/285 280/331/307 281/334/310\nf 275/311/289 274/308/286 295/332/308 296/335/311\nf 268/312/290 267/309/287 288/333/309 289/336/312\nf 261/313/291 260/310/288 281/334/310 282/337/313\nf 276/314/292 275/311/289 296/335/311 297/338/314\nf 269/315/293 268/312/290 289/336/312 290/339/315\nf 262/316/294 261/313/291 282/337/313 283/340/316\nf 529/341/44 276/314/292 297/338/314\nf 270/318/295 269/315/293 290/339/315 291/342/317\nf 263/319/296 262/316/294 283/340/316 284/321/297\nf 256/298/276 192/343/2 277/323/299\nf 271/300/278 270/318/295 291/342/317 292/325/301\nf 277/323/299 192/344/2 298/345/318\nf 292/325/301 291/342/317 312/346/319 313/347/320\nf 285/322/298 284/321/297 305/348/321 306/349/322\nf 278/324/300 277/323/299 298/345/318 299/350/323\nf 293/326/302 292/325/301 313/347/320 314/351/324\nf 286/327/303 285/322/298 306/349/322 307/352/325\nf 279/328/304 278/324/300 299/350/323 300/353/326\nf 294/329/305 293/326/302 314/351/324 315/354/327\nf 287/330/306 286/327/303 307/352/325 308/355/328\nf 280/331/307 279/328/304 300/353/326 301/356/329\nf 295/332/308 294/329/305 315/354/327 316/357/330\nf 288/333/309 287/330/306 308/355/328 309/358/331\nf 281/334/310 280/331/307 301/356/329 302/359/332\nf 296/335/311 295/332/308 316/357/330 317/360/333\nf 289/336/312 288/333/309 309/358/331 310/361/334\nf 282/337/313 281/334/310 302/359/332 303/362/335\nf 297/338/314 296/335/311 317/360/333 318/363/336\nf 290/339/315 289/336/312 310/361/334 311/364/337\nf 283/340/316 282/337/313 303/362/335 304/365/338\nf 529/366/44 297/338/314 318/363/336\nf 291/342/317 290/339/315 311/364/337 312/346/319\nf 284/321/297 283/340/316 304/365/338 305/348/321\nf 312/346/319 311/364/337 332/367/339 333/368/340\nf 305/348/321 304/365/338 325/369/341 326/370/342\nf 298/345/318 192/371/2 319/372/343\nf 313/347/320 312/346/319 333/368/340 334/373/344\nf 306/349/322 305/348/321 326/370/342 327/374/345\nf 299/350/323 298/345/318 319/372/343 320/375/346\nf 314/351/324 313/347/320 334/373/344 335/376/347\nf 307/352/325 306/349/322 327/374/345 328/377/348\nf 300/353/326 299/350/323 320/375/346 321/378/349\nf 315/354/327 314/351/324 335/376/347 336/379/350\nf 308/355/328 307/352/325 328/377/348 329/380/351\nf 301/356/329 300/353/326 321/378/349 322/381/352\nf 316/357/330 315/354/327 336/379/350 337/382/353\nf 309/358/331 308/355/328 329/380/351 330/383/354\nf 302/359/332 301/356/329 322/381/352 323/384/355\nf 317/360/333 316/357/330 337/382/353 338/385/356\nf 310/361/334 309/358/331 330/383/354 331/386/357\nf 303/362/335 302/359/332 323/384/355 324/387/358\nf 318/363/336 317/360/333 338/385/356 339/388/359\nf 311/364/337 310/361/334 331/386/357 332/367/339\nf 304/365/338 303/362/335 324/387/358 325/369/341\nf 529/389/44 318/363/336 339/388/359\nf 325/369/341 324/387/358 345/390/360 346/391/361\nf 529/392/44 339/388/359 360/393/362\nf 333/368/340 332/367/339 353/394/363 354/395/364\nf 326/370/342 325/369/341 346/391/361 347/396/365\nf 319/372/343 192/397/2 340/398/366\nf 334/373/344 333/368/340 354/395/364 355/399/367\nf 327/374/345 326/370/342 347/396/365 348/400/368\nf 320/375/346 319/372/343 340/398/366 341/401/369\nf 335/376/347 334/373/344 355/399/367 356/402/370\nf 328/377/348 327/374/345 348/400/368 349/403/371\nf 321/378/349 320/375/346 341/401/369 342/404/372\nf 336/379/350 335/376/347 356/402/370 357/405/373\nf 329/380/351 328/377/348 349/403/371 350/406/374\nf 322/381/352 321/378/349 342/404/372 343/407/375\nf 337/382/353 336/379/350 357/405/373 358/408/376\nf 330/383/354 329/380/351 350/406/374 351/409/377\nf 323/384/355 322/381/352 343/407/375 344/410/378\nf 338/385/356 337/382/353 358/408/376 359/411/379\nf 331/386/357 330/383/354 351/409/377 352/412/380\nf 324/387/358 323/384/355 344/410/378 345/390/360\nf 339/388/359 338/385/356 359/411/379 360/393/362\nf 332/367/339 331/386/357 352/412/380 353/394/363\nf 353/394/363 352/412/380 373/413/381 374/414/382\nf 346/391/361 345/390/360 366/415/383 367/416/384\nf 529/417/44 360/393/362 381/418/385\nf 354/395/364 353/394/363 374/414/382 375/419/386\nf 347/396/365 346/391/361 367/416/384 368/420/387\nf 340/398/366 192/421/2 361/422/388\nf 355/399/367 354/395/364 375/419/386 376/423/389\nf 348/400/368 347/396/365 368/420/387 369/424/390\nf 341/401/369 340/398/366 361/422/388 362/425/391\nf 356/402/370 355/399/367 376/423/389 377/426/392\nf 349/403/371 348/400/368 369/424/390 370/427/393\nf 342/404/372 341/401/369 362/425/391 363/428/394\nf 357/405/373 356/402/370 377/426/392 378/429/395\nf 350/406/374 349/403/371 370/427/393 371/430/396\nf 343/407/375 342/404/372 363/428/394 364/431/397\nf 358/408/376 357/405/373 378/429/395 379/432/398\nf 351/409/377 350/406/374 371/430/396 372/433/399\nf 344/410/378 343/407/375 364/431/397 365/434/400\nf 359/411/379 358/408/376 379/432/398 380/435/401\nf 352/412/380 351/409/377 372/433/399 373/413/381\nf 345/390/360 344/410/378 365/434/400 366/415/383\nf 360/393/362 359/411/379 380/435/401 381/418/385\nf 366/415/383 365/434/400 386/436/402 387/437/403\nf 381/418/385 380/435/401 401/438/404 402/439/405\nf 374/414/382 373/413/381 394/440/406 395/441/407\nf 367/416/384 366/415/383 387/437/403 388/442/408\nf 529/443/44 381/418/385 402/439/405\nf 375/419/386 374/414/382 395/441/407 396/444/409\nf 368/420/387 367/416/384 388/442/408 389/445/410\nf 361/422/388 192/446/2 382/447/411\nf 376/423/389 375/419/386 396/444/409 397/448/412\nf 369/424/390 368/420/387 389/445/410 390/449/413\nf 362/425/391 361/422/388 382/447/411 383/450/414\nf 377/426/392 376/423/389 397/448/412 398/451/415\nf 370/427/393 369/424/390 390/449/413 391/452/416\nf 363/428/394 362/425/391 383/450/414 384/453/417\nf 378/429/395 377/426/392 398/451/415 399/454/418\nf 371/430/396 370/427/393 391/452/416 392/455/419\nf 364/431/397 363/428/394 384/453/417 385/456/420\nf 379/432/398 378/429/395 399/454/418 400/457/421\nf 372/433/399 371/430/396 392/455/419 393/458/422\nf 365/434/400 364/431/397 385/456/420 386/436/402\nf 380/435/401 379/432/398 400/457/421 401/438/404\nf 373/413/381 372/433/399 393/458/422 394/440/406\nf 401/438/404 400/457/421 421/459/423 422/460/424\nf 394/440/406 393/458/422 414/461/425 415/462/426\nf 387/437/403 386/436/402 407/463/427 408/464/428\nf 402/439/405 401/438/404 422/460/424 423/465/429\nf 395/441/407 394/440/406 415/462/426 416/466/430\nf 388/442/408 387/437/403 408/464/428 409/467/431\nf 529/468/44 402/439/405 423/465/429\nf 396/444/409 395/441/407 416/466/430 417/469/432\nf 389/445/410 388/442/408 409/467/431 410/470/433\nf 382/447/411 192/471/2 403/472/434\nf 397/448/412 396/444/409 417/469/432 418/473/435\nf 390/449/413 389/445/410 410/470/433 411/474/436\nf 383/450/414 382/447/411 403/472/434 404/475/437\nf 398/451/415 397/448/412 418/473/435 419/476/438\nf 391/452/416 390/449/413 411/474/436 412/477/439\nf 384/453/417 383/450/414 404/475/437 405/478/440\nf 399/454/418 398/451/415 419/476/438 420/479/441\nf 392/455/419 391/452/416 412/477/439 413/480/442\nf 385/456/420 384/453/417 405/478/440 406/481/443\nf 400/457/421 399/454/418 420/479/441 421/459/423\nf 393/458/422 392/455/419 413/480/442 414/461/425\nf 386/436/402 385/456/420 406/481/443 407/463/427\nf 414/461/425 413/480/442 434/482/444 435/483/445\nf 407/463/427 406/481/443 427/484/446 428/485/447\nf 422/460/424 421/459/423 442/486/448 443/487/449\nf 415/462/426 414/461/425 435/483/445 436/488/450\nf 408/464/428 407/463/427 428/485/447 429/489/451\nf 423/465/429 422/460/424 443/487/449 444/490/452\nf 416/466/430 415/462/426 436/488/450 437/491/453\nf 409/467/431 408/464/428 429/489/451 430/492/454\nf 529/493/44 423/465/429 444/490/452\nf 417/469/432 416/466/430 437/491/453 438/494/455\nf 410/470/433 409/467/431 430/492/454 431/495/456\nf 403/472/434 192/496/2 424/497/457\nf 418/473/435 417/469/432 438/494/455 439/498/458\nf 411/474/436 410/470/433 431/495/456 432/499/459\nf 404/475/437 403/472/434 424/497/457 425/500/460\nf 419/476/438 418/473/435 439/498/458 440/501/461\nf 412/477/439 411/474/436 432/499/459 433/502/462\nf 405/478/440 404/475/437 425/500/460 426/503/463\nf 420/479/441 419/476/438 440/501/461 441/504/464\nf 413/480/442 412/477/439 433/502/462 434/482/444\nf 406/481/443 405/478/440 426/503/463 427/484/446\nf 421/459/423 420/479/441 441/504/464 442/486/448\nf 427/484/446 426/503/463 447/505/465 448/506/466\nf 442/486/448 441/504/464 462/507/467 463/508/468\nf 435/483/445 434/482/444 455/509/469 456/510/470\nf 428/485/447 427/484/446 448/506/466 449/511/471\nf 443/487/449 442/486/448 463/508/468 464/512/472\nf 436/488/450 435/483/445 456/510/470 457/513/473\nf 429/489/451 428/485/447 449/511/471 450/514/474\nf 444/490/452 443/487/449 464/512/472 465/515/475\nf 437/491/453 436/488/450 457/513/473 458/516/476\nf 430/492/454 429/489/451 450/514/474 451/517/477\nf 529/518/44 444/490/452 465/515/475\nf 438/494/455 437/491/453 458/516/476 459/519/478\nf 431/495/456 430/492/454 451/517/477 452/520/479\nf 424/497/457 192/521/2 445/522/480\nf 439/498/458 438/494/455 459/519/478 460/523/481\nf 432/499/459 431/495/456 452/520/479 453/524/482\nf 425/500/460 424/497/457 445/522/480 446/525/483\nf 440/501/461 439/498/458 460/523/481 461/526/484\nf 433/502/462 432/499/459 453/524/482 454/527/485\nf 426/503/463 425/500/460 446/525/483 447/505/465\nf 441/504/464 440/501/461 461/526/484 462/507/467\nf 434/482/444 433/502/462 454/527/485 455/509/469\nf 455/509/469 454/527/485 475/528/486 476/529/487\nf 448/506/466 447/505/465 468/530/488 469/531/489\nf 463/508/468 462/507/467 483/532/490 484/533/491\nf 456/510/470 455/509/469 476/529/487 477/534/492\nf 449/511/471 448/506/466 469/531/489 470/535/493\nf 464/512/472 463/508/468 484/533/491 485/536/494\nf 457/513/473 456/510/470 477/534/492 478/537/495\nf 450/514/474 449/511/471 470/535/493 471/538/496\nf 465/515/475 464/512/472 485/536/494 486/539/497\nf 458/516/476 457/513/473 478/537/495 479/540/498\nf 451/517/477 450/514/474 471/538/496 472/541/499\nf 529/542/44 465/515/475 486/539/497\nf 459/519/478 458/516/476 479/540/498 480/543/500\nf 452/520/479 451/517/477 472/541/499 473/544/501\nf 445/522/480 192/545/2 466/546/502\nf 460/523/481 459/519/478 480/543/500 481/547/503\nf 453/524/482 452/520/479 473/544/501 474/548/504\nf 446/525/483 445/522/480 466/546/502 467/549/505\nf 461/526/484 460/523/481 481/547/503 482/550/506\nf 454/527/485 453/524/482 474/548/504 475/528/486\nf 447/505/465 446/525/483 467/549/505 468/530/488\nf 462/507/467 461/526/484 482/550/506 483/532/490\nf 468/530/488 467/549/505 488/551/507 489/552/508\nf 483/532/490 482/550/506 503/553/509 504/554/510\nf 476/529/487 475/528/486 496/555/511 497/556/512\nf 469/531/489 468/530/488 489/552/508 490/557/513\nf 484/533/491 483/532/490 504/554/510 505/558/514\nf 477/534/492 476/529/487 497/556/512 498/559/515\nf 470/535/493 469/531/489 490/557/513 491/560/516\nf 485/536/494 484/533/491 505/558/514 506/561/517\nf 478/537/495 477/534/492 498/559/515 499/562/518\nf 471/538/496 470/535/493 491/560/516 492/563/519\nf 486/539/497 485/536/494 506/561/517 507/564/520\nf 479/540/498 478/537/495 499/562/518 500/565/521\nf 472/541/499 471/538/496 492/563/519 493/566/522\nf 529/567/44 486/539/497 507/564/520\nf 480/543/500 479/540/498 500/565/521 501/568/523\nf 473/544/501 472/541/499 493/566/522 494/569/524\nf 466/546/502 192/570/2 487/571/525\nf 481/547/503 480/543/500 501/568/523 502/572/526\nf 474/548/504 473/544/501 494/569/524 495/573/527\nf 467/549/505 466/546/502 487/571/525 488/551/507\nf 482/550/506 481/547/503 502/572/526 503/553/509\nf 475/528/486 474/548/504 495/573/527 496/555/511\nf 503/553/509 502/572/526 523/574/528 524/575/529\nf 496/555/511 495/573/527 516/576/530 517/577/531\nf 489/552/508 488/551/507 509/578/532 510/579/533\nf 504/554/510 503/553/509 524/575/529 525/580/534\nf 497/556/512 496/555/511 517/577/531 518/581/535\nf 490/557/513 489/552/508 510/579/533 511/582/536\nf 505/558/514 504/554/510 525/580/534 526/583/537\nf 498/559/515 497/556/512 518/581/535 519/584/538\nf 491/560/516 490/557/513 511/582/536 512/585/539\nf 506/561/517 505/558/514 526/583/537 527/586/540\nf 499/562/518 498/559/515 519/584/538 520/587/541\nf 492/563/519 491/560/516 512/585/539 513/588/542\nf 507/564/520 506/561/517 527/586/540 528/589/543\nf 500/565/521 499/562/518 520/587/541 521/590/544\nf 493/566/522 492/563/519 513/588/542 514/591/545\nf 529/592/44 507/564/520 528/589/543\nf 501/568/523 500/565/521 521/590/544 522/593/546\nf 494/569/524 493/566/522 514/591/545 515/594/547\nf 487/571/525 192/595/2 508/596/548\nf 502/572/526 501/568/523 522/593/546 523/574/528\nf 495/573/527 494/569/524 515/594/547 516/576/530\nf 488/551/507 487/571/525 508/596/548 509/578/532\nf 516/576/530 515/594/547 537/597/549 538/598/550\nf 509/578/532 508/596/548 530/599/551 531/600/552\nf 524/575/529 523/574/528 545/601/553 546/602/554\nf 517/577/531 516/576/530 538/598/550 539/603/555\nf 510/579/533 509/578/532 531/600/552 532/604/556\nf 525/580/534 524/575/529 546/602/554 547/605/557\nf 518/581/535 517/577/531 539/603/555 540/606/558\nf 511/582/536 510/579/533 532/604/556 533/607/559\nf 526/583/537 525/580/534 547/605/557 548/608/560\nf 519/584/538 518/581/535 540/606/558 541/609/561\nf 512/585/539 511/582/536 533/607/559 534/610/562\nf 527/586/540 526/583/537 548/608/560 549/611/563\nf 520/587/541 519/584/538 541/609/561 542/612/564\nf 513/588/542 512/585/539 534/610/562 535/613/565\nf 528/589/543 527/586/540 549/611/563 550/614/566\nf 521/590/544 520/587/541 542/612/564 543/615/567\nf 514/591/545 513/588/542 535/613/565 536/616/568\nf 529/617/44 528/589/543 550/614/566\nf 522/593/546 521/590/544 543/615/567 544/618/569\nf 515/594/547 514/591/545 536/616/568 537/597/549\nf 508/596/548 192/619/2 530/599/551\nf 523/574/528 522/593/546 544/618/569 545/601/553\nf 530/599/551 192/620/2 551/621/570\nf 545/601/553 544/618/569 565/622/571 566/623/572\nf 538/598/550 537/597/549 558/624/573 559/625/574\nf 531/600/552 530/599/551 551/621/570 552/626/575\nf 546/602/554 545/601/553 566/623/572 567/627/576\nf 539/603/555 538/598/550 559/625/574 560/628/577\nf 532/604/556 531/600/552 552/626/575 553/629/578\nf 547/605/557 546/602/554 567/627/576 568/630/579\nf 540/606/558 539/603/555 560/628/577 561/631/580\nf 533/607/559 532/604/556 553/629/578 554/632/581\nf 548/608/560 547/605/557 568/630/579 569/633/582\nf 541/609/561 540/606/558 561/631/580 562/634/583\nf 534/610/562 533/607/559 554/632/581 555/635/584\nf 549/611/563 548/608/560 569/633/582 570/636/585\nf 542/612/564 541/609/561 562/634/583 563/637/586\nf 535/613/565 534/610/562 555/635/584 556/638/587\nf 550/614/566 549/611/563 570/636/585 571/639/588\nf 543/615/567 542/612/564 563/637/586 564/640/589\nf 536/616/568 535/613/565 556/638/587 557/641/590\nf 529/642/44 550/614/566 571/639/588\nf 544/618/569 543/615/567 564/640/589 565/622/571\nf 537/597/549 536/616/568 557/641/590 558/624/573\nf 558/624/573 557/641/590 578/643/591 579/644/592\nf 551/621/570 192/645/2 572/646/593\nf 566/623/572 565/622/571 586/647/594 587/648/595\nf 559/625/574 558/624/573 579/644/592 580/649/596\nf 552/626/575 551/621/570 572/646/593 573/650/597\nf 567/627/576 566/623/572 587/648/595 588/651/598\nf 560/628/577 559/625/574 580/649/596 581/652/599\nf 553/629/578 552/626/575 573/650/597 574/653/600\nf 568/630/579 567/627/576 588/651/598 589/654/601\nf 561/631/580 560/628/577 581/652/599 582/655/602\nf 554/632/581 553/629/578 574/653/600 575/656/603\nf 569/633/582 568/630/579 589/654/601 590/657/604\nf 562/634/583 561/631/580 582/655/602 583/658/605\nf 555/635/584 554/632/581 575/656/603 576/659/606\nf 570/636/585 569/633/582 590/657/604 591/660/607\nf 563/637/586 562/634/583 583/658/605 584/661/608\nf 556/638/587 555/635/584 576/659/606 577/662/609\nf 571/639/588 570/636/585 591/660/607 592/663/610\nf 564/640/589 563/637/586 584/661/608 585/664/611\nf 557/641/590 556/638/587 577/662/609 578/643/591\nf 529/665/44 571/639/588 592/663/610\nf 565/622/571 564/640/589 585/664/611 586/647/594\nf 529/666/44 592/663/610 613/667/612\nf 586/647/594 585/664/611 606/668/613 607/669/614\nf 579/644/592 578/643/591 599/670/615 600/671/616\nf 572/646/593 192/672/2 593/673/617\nf 587/648/595 586/647/594 607/669/614 608/674/618\nf 580/649/596 579/644/592 600/671/616 601/675/619\nf 573/650/597 572/646/593 593/673/617 594/676/620\nf 588/651/598 587/648/595 608/674/618 609/677/621\nf 581/652/599 580/649/596 601/675/619 602/678/622\nf 574/653/600 573/650/597 594/676/620 595/679/623\nf 589/654/601 588/651/598 609/677/621 610/680/624\nf 582/655/602 581/652/599 602/678/622 603/681/625\nf 575/656/603 574/653/600 595/679/623 596/682/626\nf 590/657/604 589/654/601 610/680/624 611/683/627\nf 583/658/605 582/655/602 603/681/625 604/684/628\nf 576/659/606 575/656/603 596/682/626 597/685/629\nf 591/660/607 590/657/604 611/683/627 612/686/630\nf 584/661/608 583/658/605 604/684/628 605/687/631\nf 577/662/609 576/659/606 597/685/629 598/688/632\nf 592/663/610 591/660/607 612/686/630 613/667/612\nf 585/664/611 584/661/608 605/687/631 606/668/613\nf 578/643/591 577/662/609 598/688/632 599/670/615\nf 606/668/613 605/687/631 626/689/633 627/690/634\nf 599/670/615 598/688/632 619/691/635 620/692/636\nf 529/693/44 613/667/612 634/694/637\nf 607/669/614 606/668/613 627/690/634 628/695/638\nf 600/671/616 599/670/615 620/692/636 621/696/639\nf 593/673/617 192/697/2 614/698/640\nf 608/674/618 607/669/614 628/695/638 629/699/641\nf 601/675/619 600/671/616 621/696/639 622/700/642\nf 594/676/620 593/673/617 614/698/640 615/701/643\nf 609/677/621 608/674/618 629/699/641 630/702/644\nf 602/678/622 601/675/619 622/700/642 623/703/645\nf 595/679/623 594/676/620 615/701/643 616/704/646\nf 610/680/624 609/677/621 630/702/644 631/705/647\nf 603/681/625 602/678/622 623/703/645 624/706/648\nf 596/682/626 595/679/623 616/704/646 617/707/649\nf 611/683/627 610/680/624 631/705/647 632/708/650\nf 604/684/628 603/681/625 624/706/648 625/709/651\nf 597/685/629 596/682/626 617/707/649 618/710/652\nf 612/686/630 611/683/627 632/708/650 633/711/653\nf 605/687/631 604/684/628 625/709/651 626/689/633\nf 598/688/632 597/685/629 618/710/652 619/691/635\nf 613/667/612 612/686/630 633/711/653 634/694/637\nf 619/691/635 618/710/652 639/712/654 640/713/655\nf 634/694/637 633/711/653 654/714/656 655/715/657\nf 627/690/634 626/689/633 647/716/658 648/717/659\nf 620/692/636 619/691/635 640/713/655 641/718/660\nf 529/719/44 634/694/637 655/715/657\nf 628/695/638 627/690/634 648/717/659 649/720/661\nf 621/696/639 620/692/636 641/718/660 642/721/662\nf 614/698/640 192/722/2 635/723/663\nf 629/699/641 628/695/638 649/720/661 650/724/664\nf 622/700/642 621/696/639 642/721/662 643/725/665\nf 615/701/643 614/698/640 635/723/663 636/726/666\nf 630/702/644 629/699/641 650/724/664 651/727/667\nf 623/703/645 622/700/642 643/725/665 644/728/668\nf 616/704/646 615/701/643 636/726/666 637/729/669\nf 631/705/647 630/702/644 651/727/667 652/730/670\nf 624/706/648 623/703/645 644/728/668 645/731/671\nf 617/707/649 616/704/646 637/729/669 638/732/672\nf 632/708/650 631/705/647 652/730/670 653/733/673\nf 625/709/651 624/706/648 645/731/671 646/734/674\nf 618/710/652 617/707/649 638/732/672 639/712/654\nf 633/711/653 632/708/650 653/733/673 654/714/656\nf 626/689/633 625/709/651 646/734/674 647/716/658\nf 647/716/658 646/734/674 667/735/675 668/736/676\nf 640/713/655 639/712/654 660/737/677 661/738/678\nf 655/715/657 654/714/656 675/739/679 676/740/680\nf 648/717/659 647/716/658 668/736/676 669/741/681\nf 641/718/660 640/713/655 661/738/678 662/742/682\nf 529/743/44 655/715/657 676/740/680\nf 649/720/661 648/717/659 669/741/681 670/744/683\nf 642/721/662 641/718/660 662/742/682 663/745/684\nf 635/723/663 192/746/2 656/747/685\nf 650/724/664 649/720/661 670/744/683 671/748/686\nf 643/725/665 642/721/662 663/745/684 664/749/687\nf 636/726/666 635/723/663 656/747/685 657/750/688\nf 651/727/667 650/724/664 671/748/686 672/751/689\nf 644/728/668 643/725/665 664/749/687 665/752/690\nf 637/729/669 636/726/666 657/750/688 658/753/691\nf 652/730/670 651/727/667 672/751/689 673/754/692\nf 645/731/671 644/728/668 665/752/690 666/755/693\nf 638/732/672 637/729/669 658/753/691 659/756/694\nf 653/733/673 652/730/670 673/754/692 674/757/695\nf 646/734/674 645/731/671 666/755/693 667/735/675\nf 639/712/654 638/732/672 659/756/694 660/737/677\nf 654/714/656 653/733/673 674/757/695 675/739/679\nf 660/737/677 659/756/694 680/758/696 681/759/697\nf 675/739/679 674/757/695 695/760/698 696/761/699\nf 668/736/676 667/735/675 688/762/700 689/763/701\nf 661/738/678 660/737/677 681/759/697 682/764/702\nf 676/740/680 675/739/679 696/761/699 697/765/703\nf 669/741/681 668/736/676 689/763/701 690/766/704\nf 662/742/682 661/738/678 682/764/702 683/767/705\nf 529/768/44 676/740/680 697/765/703\nf 670/744/683 669/741/681 690/766/704 691/769/706\nf 663/745/684 662/742/682 683/767/705 684/770/707\nf 656/747/685 192/771/2 677/772/708\nf 671/748/686 670/744/683 691/769/706 692/773/709\nf 664/749/687 663/745/684 684/770/707 685/774/710\nf 657/750/688 656/747/685 677/772/708 678/775/711\nf 672/751/689 671/748/686 692/773/709 693/776/712\nf 665/752/690 664/749/687 685/774/710 686/777/713\nf 658/753/691 657/750/688 678/775/711 679/778/714\nf 673/754/692 672/751/689 693/776/712 694/779/715\nf 666/755/693 665/752/690 686/777/713 687/780/716\nf 659/756/694 658/753/691 679/778/714 680/758/696\nf 674/757/695 673/754/692 694/779/715 695/760/698\nf 667/735/675 666/755/693 687/780/716 688/762/700\nf 695/781/698 694/782/715 715/783/717 716/784/718\nf 688/785/700 687/786/716 708/787/719 709/788/720\nf 681/789/697 680/790/696 701/791/721 702/792/722\nf 696/793/699 695/781/698 716/784/718 717/794/723\nf 689/795/701 688/785/700 709/788/720 710/796/724\nf 682/797/702 681/789/697 702/792/722 703/798/725\nf 697/799/703 696/793/699 717/794/723 718/800/726\nf 690/801/704 689/795/701 710/796/724 711/802/727\nf 683/803/705 682/797/702 703/798/725 704/804/728\nf 529/805/44 697/799/703 718/800/726\nf 691/806/706 690/801/704 711/802/727 712/807/729\nf 684/808/707 683/803/705 704/804/728 705/809/730\nf 677/810/708 192/811/2 698/812/731\nf 692/813/709 691/806/706 712/807/729 713/814/732\nf 685/815/710 684/808/707 705/809/730 706/816/733\nf 678/817/711 677/810/708 698/812/731 699/818/734\nf 693/819/712 692/813/709 713/814/732 714/820/735\nf 686/821/713 685/815/710 706/816/733 707/822/736\nf 679/823/714 678/817/711 699/818/734 700/824/737\nf 694/782/715 693/819/712 714/820/735 715/783/717\nf 687/786/716 686/821/713 707/822/736 708/787/719\nf 680/790/696 679/823/714 700/824/737 701/791/721\nf 708/787/719 707/822/736 728/825/738 729/826/739\nf 701/791/721 700/824/737 721/827/740 722/828/741\nf 716/784/718 715/783/717 736/829/742 737/830/743\nf 709/788/720 708/787/719 729/826/739 730/831/744\nf 702/792/722 701/791/721 722/828/741 723/832/745\nf 717/794/723 716/784/718 737/830/743 738/833/746\nf 710/796/724 709/788/720 730/831/744 731/834/747\nf 703/798/725 702/792/722 723/832/745 724/835/748\nf 718/800/726 717/794/723 738/833/746 739/836/749\nf 711/802/727 710/796/724 731/834/747 732/837/750\nf 704/804/728 703/798/725 724/835/748 725/838/751\nf 529/839/44 718/800/726 739/836/749\nf 712/807/729 711/802/727 732/837/750 733/840/752\nf 705/809/730 704/804/728 725/838/751 726/841/753\nf 698/812/731 192/842/2 719/843/754\nf 713/814/732 712/807/729 733/840/752 734/844/755\nf 706/816/733 705/809/730 726/841/753 727/845/756\nf 699/818/734 698/812/731 719/843/754 720/846/757\nf 714/820/735 713/814/732 734/844/755 735/847/758\nf 707/822/736 706/816/733 727/845/756 728/825/738\nf 700/824/737 699/818/734 720/846/757 721/827/740\nf 715/783/717 714/820/735 735/847/758 736/829/742\nf 721/827/740 720/846/757 741/848/759 742/849/760\nf 736/829/742 735/847/758 756/850/761 757/851/762\nf 729/826/739 728/825/738 749/852/763 750/853/764\nf 722/828/741 721/827/740 742/849/760 743/854/765\nf 737/830/743 736/829/742 757/851/762 758/855/766\nf 730/831/744 729/826/739 750/853/764 751/856/767\nf 723/832/745 722/828/741 743/854/765 744/857/768\nf 738/833/746 737/830/743 758/855/766 759/858/769\nf 731/834/747 730/831/744 751/856/767 752/859/770\nf 724/835/748 723/832/745 744/857/768 745/860/771\nf 739/836/749 738/833/746 759/858/769 760/861/772\nf 732/837/750 731/834/747 752/859/770 753/862/773\nf 725/838/751 724/835/748 745/860/771 746/863/774\nf 529/864/44 739/836/749 760/861/772\nf 733/840/752 732/837/750 753/862/773 754/865/775\nf 726/841/753 725/838/751 746/863/774 747/866/776\nf 719/843/754 192/867/2 740/868/777\nf 734/844/755 733/840/752 754/865/775 755/869/778\nf 727/845/756 726/841/753 747/866/776 748/870/779\nf 720/846/757 719/843/754 740/868/777 741/848/759\nf 735/847/758 734/844/755 755/869/778 756/850/761\nf 728/825/738 727/845/756 748/870/779 749/852/763\nf 749/852/763 748/870/779 769/871/780 770/872/781\nf 742/849/760 741/848/759 762/873/782 763/874/783\nf 757/851/762 756/850/761 777/875/784 778/876/785\nf 750/853/764 749/852/763 770/872/781 771/877/786\nf 743/854/765 742/849/760 763/874/783 764/878/787\nf 758/855/766 757/851/762 778/876/785 779/879/788\nf 751/856/767 750/853/764 771/877/786 772/880/789\nf 744/857/768 743/854/765 764/878/787 765/881/790\nf 759/858/769 758/855/766 779/879/788 780/882/791\nf 752/859/770 751/856/767 772/880/789 773/883/792\nf 745/860/771 744/857/768 765/881/790 766/884/793\nf 760/861/772 759/858/769 780/882/791 781/885/794\nf 753/862/773 752/859/770 773/883/792 774/886/795\nf 746/863/774 745/860/771 766/884/793 767/887/796\nf 529/888/44 760/861/772 781/885/794\nf 754/865/775 753/862/773 774/886/795 775/889/797\nf 747/866/776 746/863/774 767/887/796 768/890/798\nf 740/868/777 192/891/2 761/892/799\nf 755/869/778 754/865/775 775/889/797 776/893/800\nf 748/870/779 747/866/776 768/890/798 769/871/780\nf 741/848/759 740/868/777 761/892/799 762/873/782\nf 756/850/761 755/869/778 776/893/800 777/875/784\nf 773/883/792 772/880/789 793/894/801 794/895/802\nf 766/884/793 765/881/790 786/896/803 787/897/804\nf 781/885/794 780/882/791 801/898/805 802/899/806\nf 774/886/795 773/883/792 794/895/802 795/900/807\nf 767/887/796 766/884/793 787/897/804 788/901/808\nf 529/902/44 781/885/794 802/899/806\nf 775/889/797 774/886/795 795/900/807 796/903/809\nf 768/890/798 767/887/796 788/901/808 789/904/810\nf 761/892/799 192/905/2 782/906/811\nf 776/893/800 775/889/797 796/903/809 797/907/812\nf 769/871/780 768/890/798 789/904/810 790/908/813\nf 762/873/782 761/892/799 782/906/811 783/909/814\nf 777/875/784 776/893/800 797/907/812 798/910/815\nf 770/872/781 769/871/780 790/908/813 791/911/816\nf 763/874/783 762/873/782 783/909/814 784/912/817\nf 778/876/785 777/875/784 798/910/815 799/913/818\nf 771/877/786 770/872/781 791/911/816 792/914/819\nf 764/878/787 763/874/783 784/912/817 785/915/820\nf 779/879/788 778/876/785 799/913/818 800/916/821\nf 772/880/789 771/877/786 792/914/819 793/894/801\nf 765/881/790 764/878/787 785/915/820 786/896/803\nf 780/882/791 779/879/788 800/916/821 801/898/805\nf 786/896/803 785/915/820 806/917/822 807/918/823\nf 801/898/805 800/916/821 821/919/824 822/920/825\nf 794/895/802 793/894/801 814/921/826 815/922/827\nf 787/897/804 786/896/803 807/918/823 808/923/828\nf 802/899/806 801/898/805 822/920/825 823/924/829\nf 795/900/807 794/895/802 815/922/827 816/925/830\nf 788/901/808 787/897/804 808/923/828 809/926/831\nf 529/927/44 802/899/806 823/924/829\nf 796/903/809 795/900/807 816/925/830 817/928/832\nf 789/904/810 788/901/808 809/926/831 810/929/833\nf 782/906/811 192/930/2 803/931/834\nf 797/907/812 796/903/809 817/928/832 818/932/835\nf 790/908/813 789/904/810 810/929/833 811/933/836\nf 783/909/814 782/906/811 803/931/834 804/934/837\nf 798/910/815 797/907/812 818/932/835 819/935/838\nf 791/911/816 790/908/813 811/933/836 812/936/839\nf 784/912/817 783/909/814 804/934/837 805/937/840\nf 799/913/818 798/910/815 819/935/838 820/938/841\nf 792/914/819 791/911/816 812/936/839 813/939/842\nf 785/915/820 784/912/817 805/937/840 806/917/822\nf 800/916/821 799/913/818 820/938/841 821/919/824\nf 793/894/801 792/914/819 813/939/842 814/921/826\nf 814/921/826 813/939/842 834/940/843 835/941/844\nf 807/918/823 806/917/822 827/942/845 828/943/846\nf 822/920/825 821/919/824 842/944/847 843/945/848\nf 815/922/827 814/921/826 835/941/844 836/946/849\nf 808/923/828 807/918/823 828/943/846 829/947/850\nf 823/924/829 822/920/825 843/945/848 844/948/851\nf 816/925/830 815/922/827 836/946/849 837/949/852\nf 809/926/831 808/923/828 829/947/850 830/950/853\nf 529/951/44 823/924/829 844/948/851\nf 817/928/832 816/925/830 837/949/852 838/952/854\nf 810/929/833 809/926/831 830/950/853 831/953/855\nf 803/931/834 192/954/2 824/955/856\nf 818/932/835 817/928/832 838/952/854 839/956/857\nf 811/933/836 810/929/833 831/953/855 832/957/858\nf 804/934/837 803/931/834 824/955/856 825/958/859\nf 819/935/838 818/932/835 839/956/857 840/959/860\nf 812/936/839 811/933/836 832/957/858 833/960/861\nf 805/937/840 804/934/837 825/958/859 826/961/862\nf 820/938/841 819/935/838 840/959/860 841/962/863\nf 813/939/842 812/936/839 833/960/861 834/940/843\nf 806/917/822 805/937/840 826/961/862 827/942/845\nf 821/919/824 820/938/841 841/962/863 842/944/847\nf 827/942/845 826/961/862 847/963/864 848/964/865\nf 842/944/847 841/962/863 862/965/866 863/966/867\nf 835/941/844 834/940/843 855/967/868 856/968/869\nf 828/943/846 827/942/845 848/964/865 849/969/870\nf 843/945/848 842/944/847 863/966/867 864/970/871\nf 836/946/849 835/941/844 856/968/869 857/971/872\nf 829/947/850 828/943/846 849/969/870 850/972/873\nf 844/948/851 843/945/848 864/970/871 865/973/874\nf 837/949/852 836/946/849 857/971/872 858/974/875\nf 830/950/853 829/947/850 850/972/873 851/975/876\nf 529/976/44 844/948/851 865/973/874\nf 838/952/854 837/949/852 858/974/875 859/977/877\nf 831/953/855 830/950/853 851/975/876 852/978/878\nf 824/955/856 192/979/2 845/980/879\nf 839/956/857 838/952/854 859/977/877 860/981/880\nf 832/957/858 831/953/855 852/978/878 853/982/881\nf 825/958/859 824/955/856 845/980/879 846/983/882\nf 840/959/860 839/956/857 860/981/880 861/984/883\nf 833/960/861 832/957/858 853/982/881 854/985/884\nf 826/961/862 825/958/859 846/983/882 847/963/864\nf 841/962/863 840/959/860 861/984/883 862/965/866\nf 834/940/843 833/960/861 854/985/884 855/967/868\nf 862/965/866 861/984/883 882/986/885 883/987/886\nf 855/967/868 854/985/884 875/988/887 876/989/888\nf 848/964/865 847/963/864 868/990/889 869/991/890\nf 863/966/867 862/965/866 883/987/886 884/992/891\nf 856/968/869 855/967/868 876/989/888 877/993/892\nf 849/969/870 848/964/865 869/991/890 870/994/893\nf 864/970/871 863/966/867 884/992/891 885/995/894\nf 857/971/872 856/968/869 877/993/892 878/996/895\nf 850/972/873 849/969/870 870/994/893 871/997/896\nf 865/973/874 864/970/871 885/995/894 886/998/897\nf 858/974/875 857/971/872 878/996/895 879/999/898\nf 851/975/876 850/972/873 871/997/896 872/1000/899\nf 529/1001/44 865/973/874 886/998/897\nf 859/977/877 858/974/875 879/999/898 880/1002/900\nf 852/978/878 851/975/876 872/1000/899 873/1003/901\nf 845/980/879 192/1004/2 866/1005/902\nf 860/981/880 859/977/877 880/1002/900 881/1006/903\nf 853/982/881 852/978/878 873/1003/901 874/1007/904\nf 846/983/882 845/980/879 866/1005/902 867/1008/905\nf 861/984/883 860/981/880 881/1006/903 882/986/885\nf 854/985/884 853/982/881 874/1007/904 875/988/887\nf 847/963/864 846/983/882 867/1008/905 868/990/889\nf 875/988/887 874/1007/904 895/1009/906 896/1010/907\nf 868/990/889 867/1008/905 888/1011/908 889/1012/909\nf 883/987/886 882/986/885 903/1013/910 904/1014/911\nf 876/989/888 875/988/887 896/1010/907 897/1015/912\nf 869/991/890 868/990/889 889/1012/909 890/1016/913\nf 884/992/891 883/987/886 904/1014/911 905/1017/914\nf 877/993/892 876/989/888 897/1015/912 898/1018/915\nf 870/994/893 869/991/890 890/1016/913 891/1019/916\nf 885/995/894 884/992/891 905/1017/914 906/1020/917\nf 878/996/895 877/993/892 898/1018/915 899/1021/918\nf 871/997/896 870/994/893 891/1019/916 892/1022/919\nf 886/998/897 885/995/894 906/1020/917 907/1023/920\nf 879/999/898 878/996/895 899/1021/918 900/1024/921\nf 872/1000/899 871/997/896 892/1022/919 893/1025/922\nf 529/1026/44 886/998/897 907/1023/920\nf 880/1002/900 879/999/898 900/1024/921 901/1027/923\nf 873/1003/901 872/1000/899 893/1025/922 894/1028/924\nf 866/1005/902 192/1029/2 887/1030/925\nf 881/1006/903 880/1002/900 901/1027/923 902/1031/926\nf 874/1007/904 873/1003/901 894/1028/924 895/1009/906\nf 867/1008/905 866/1005/902 887/1030/925 888/1011/908\nf 882/986/885 881/1006/903 902/1031/926 903/1013/910\nf 888/1011/908 887/1030/925 908/1/1 909/12/12\nf 903/1013/910 902/1031/926 922/4/4 923/14/14\nf 896/1010/907 895/1009/906 916/8/8 917/16/16\nf 889/1012/909 888/1011/908 909/12/12 910/18/18\nf 904/1014/911 903/1013/910 923/14/14 924/20/20\nf 897/1015/912 896/1010/907 917/16/16 918/22/22\nf 890/1016/913 889/1012/909 910/18/18 911/24/24\nf 905/1017/914 904/1014/911 924/20/20 925/26/26\nf 898/1018/915 897/1015/912 918/22/22 1/28/28\nf 891/1019/916 890/1016/913 911/24/24 912/30/30\nf 906/1020/917 905/1017/914 925/26/26 926/32/32\nf 899/1021/918 898/1018/915 1/28/28 919/34/34\nf 892/1022/919 891/1019/916 912/30/30 913/36/36\nf 907/1023/920 906/1020/917 926/32/32 2/38/38\nf 900/1024/921 899/1021/918 919/34/34 920/40/40\nf 893/1025/922 892/1022/919 913/36/36 914/42/42\nf 529/1032/44 907/1023/920 2/38/38\nf 901/1027/923 900/1024/921 920/40/40 921/5/5\nf 894/1028/924 893/1025/922 914/42/42 915/9/9\nf 887/1030/925 192/1033/2 908/1/1\nf 902/1031/926 901/1027/923 921/5/5 922/4/4\nf 895/1009/906 894/1028/924 915/9/9 916/8/8\n",bg.scene.primitiveData.plane="\no Plane\nv -0.500000 0.000000 0.500000\nv 0.500000 0.000000 0.500000\nv -0.500000 0.000000 -0.500000\nv 0.500000 0.000000 -0.500000\nvt 0.000000 0.000000\nvt 1.000000 0.000000\nvt 1.000000 1.000000\nvt 0.000000 1.000000\nvn 0.0000 1.0000 0.0000\nusemtl None\ns off\nf 1/1/1 2/2/1 4/3/1 3/4/1\n",function(){var t=!1;function e(t,e,n,i){var r=new bg.base.PolyList(t),a=e/2,s=n/2,o=i/2;return r.vertex=[a,-s,-o,-a,-s,-o,-a,s,-o,a,s,-o,a,-s,o,a,-s,-o,a,s,-o,a,s,o,-a,-s,o,a,-s,o,a,s,o,-a,s,o,-a,-s,-o,-a,-s,o,-a,s,o,-a,s,-o,-a,s,o,a,s,o,a,s,-o,-a,s,-o,a,-s,o,-a,-s,o,-a,-s,-o,a,-s,-o],r.normal=[0,0,-1,0,0,-1,0,0,-1,0,0,-1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0],r.texCoord0=[0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1],r.index=[0,1,2,2,3,0,4,5,6,6,7,4,8,9,10,10,11,8,12,13,14,14,15,12,16,17,18,18,19,16,20,21,22,22,23,20],r.texCoord1=bg.tools.UVMap.atlas(r.vertex,r.index,.03),r.build(),r}function n(t,e,n){var i=void 0!==arguments[3]?arguments[3]:"y",r=e/2,a=n/2,s=new bg.base.PolyList(t);switch(i.toLowerCase()){case"x":s.vertex=[0,-r,-a,0,r,-a,0,r,a,0,r,a,0,-r,a,0,-r,-a],s.normal=[1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0],s.texCoord0=[0,0,1,0,1,1,1,1,0,1,0,0],s.index=[2,1,0,5,4,3];break;case"y":s.vertex=[-r,0,-a,r,0,-a,r,0,a,r,0,a,-r,0,a,-r,0,-a],s.normal=[0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0],s.texCoord0=[0,0,1,0,1,1,1,1,0,1,0,0],s.index=[2,1,0,5,4,3];break;case"z":s.vertex=[-r,a,0,-r,-a,0,r,-a,0,r,-a,0,r,a,0,-r,a,0],s.normal=[0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1],s.texCoord0=[0,1,0,0,1,0,1,0,1,1,0,1],s.index=[0,1,2,3,4,5]}return s.texCoord1=[0,.95,0,0,.95,0,.95,0,.95,.95,0,.95],s.build(),s}function i(t,e,n,i){var r,a,s=new bg.base.PolyList(t),o=1/(i-1),u=1/(++n-1),h=[],l=[],c=[],f=[],v=[];for(r=0;r<i;r++)for(a=0;a<n;a++){var g=bg.Math.sin(-bg.Math.PI_2+bg.Math.PI*r*o),m=bg.Math.cos(2*bg.Math.PI*a*u)*bg.Math.sin(bg.Math.PI*r*o),d=bg.Math.sin(2*bg.Math.PI*a*u)*bg.Math.sin(bg.Math.PI*r*o),p=bg.Math.cos(2*bg.Math.PI*a*u)*bg.Math.sin(bg.Math.PI*r*o),b=bg.Math.sin(-bg.Math.PI_2+bg.Math.PI*r*o),x=bg.Math.sin(2*bg.Math.PI*a*u)*bg.Math.sin(bg.Math.PI*r*o);f.push(a*u),f.push(r*o),l.push(m,g,d),c.push(b,p,x),h.push(m*e,g*e,d*e)}for(r=0;r<i-1;r++)for(a=0;a<n-1;a++){var _=r*n+a,M=r*n+(a+1),T=(r+1)*n+(a+1),w=(r+1)*n+a;v.push(_),v.push(w),v.push(T),v.push(T),v.push(M),v.push(_)}return s.vertex=h,s.normal=l,s.texCoord0=f,s.tangent=c,s.texCoord1=bg.tools.UVMap.atlas(h,v,.03),s.index=v,s.build(!1),s}function r(e,n){var i=new bg.scene.Drawable(n),r=t?new bg.base.PBRMaterial:new bg.base.Material;return i.addPolyList(e,r),i}var a=null;function s(e,n,i,r){a||(a=new bg.base.OBJLoaderPlugin);var s=a.loadDataSync(e,n,i);if(s){var o=s.drawable;if(o.forEach(function(t){return function(t,e){for(var n=[],i=[],r=e.rotation,a=0;a<t.vertex.length;a+=3){var s=new bg.Vector3(t.vertex[a],t.vertex[a+1],t.vertex[a+2]);s=e.multVector(s),n.push(s.x,s.y,s.z);var o=new bg.Vector3(t.normal[a],t.normal[a+1],t.normal[a+2]);(o=r.multVector(o)).normalize(),i.push(o.x,o.y,o.z)}t.vertex=n,t.normal=i,t.build()}(t,r)}),t){var u=0;o.forEach(function(t,e){o.replaceMaterial(u++,new bg.base.PBRMaterial)})}return o}return null}var o=function(){function a(){}return $traceurRuntime.createClass(a,{},{SetPBRMaterials:function(e){t=e},ObjDataPolyList:function(t,e,n){var i=s(t,e,n,void 0!==arguments[3]?arguments[3]:null),r=null;return i.some(function(t){return r=t,!0}),r},CubePolyList:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=arguments[2],i=arguments[3];n=n||e,i=i||e;var r=bg.Matrix4.Scale(e,n,i);return a.ObjDataPolyList(t,bg.scene.primitiveData.cube,"Cube",r)},CubePolyList_procedural:function(t){var n=void 0!==arguments[1]?arguments[1]:1,i=arguments[2],r=arguments[3];return e(t,n,i=i||n,r=r||n)},PlanePolyList:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=arguments[2],i=void 0!==arguments[3]?arguments[3]:"y";n=n||e;var r=bg.Matrix4.Scale(e,1,n);return"x"==i?r.rotate(bg.Math.degreesToRadians(90),0,0,1):"z"==i&&r.rotate(bg.Math.degreesToRadians(90),-1,0,0),a.ObjDataPolyList(t,bg.scene.primitiveData.plane,"Plane",r)},PlanePolyList_procedural:function(t){var e=void 0!==arguments[1]?arguments[1]:1,i=arguments[2];return n(t,e,i=i||e,void 0!==arguments[3]?arguments[3]:"y")},SpherePolyList:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=bg.Matrix4.Scale(e,e,e);return a.ObjDataPolyList(t,bg.scene.primitiveData.sphere,"Sphere",n)},SpherePolyList_procedural:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=void 0!==arguments[2]?arguments[2]:20,r=arguments[3];return i(t,e,n,r=r||n)},Cube:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=arguments[2],i=arguments[3];n=n||e,i=i||e;var r=bg.Matrix4.Scale(e,n,i);return s(t,bg.scene.primitiveData.cube,"Cube",r)},Cube_procedural:function(t){var n=void 0!==arguments[1]?arguments[1]:1,i=arguments[2],a=arguments[3];return r(e(t,n,i=i||n,a=a||n),"Cube")},Plane_procedural:function(t){var e=void 0!==arguments[1]?arguments[1]:1,i=arguments[2];return r(n(t,e,i=i||e,void 0!==arguments[3]?arguments[3]:"y"),"Plane")},Plane:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=arguments[2],i=void 0!==arguments[3]?arguments[3]:"y";n=n||e;var r=bg.Matrix4.Scale(e,1,n);return"x"==i?r.rotate(bg.Math.degreesToRadians(90),0,0,1):"z"==i&&r.rotate(bg.Math.degreesToRadians(90),-1,0,0),s(t,bg.scene.primitiveData.plane,"Plane",r)},Sphere:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=bg.Matrix4.Scale(2*e,2*e,2*e);return s(t,bg.scene.primitiveData.sphere,"Sphere",n)},Sphere_procedural:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=void 0!==arguments[2]?arguments[2]:20,a=arguments[3];return r(i(t,e,n,a=a||n),"Sphere")}})}();bg.scene.PrimitiveFactory=o}(),function(){var t=function(){return $traceurRuntime.createClass(function(t,e){this.url=t.substring(0,t.lastIndexOf("/")),this.jsonData=e},{loadNode:function(t,e,n,i){var r=this,a=new bg.scene.Node(t,e.name);a.enabled=e.enabled,a.steady=e.steady||!1,n.addChild(a),e.components.forEach(function(e){i.push(bg.scene.Component.Factory(t,e,a,r.url))}),e.children.forEach(function(e){r.loadNode(t,e,a,i)})},loadScene:function(t){var e=this,n=[],i=new bg.scene.Node(t,"scene-root");return this.jsonData.scene.forEach(function(r){e.loadNode(t,r,i,n)}),new Promise(function(e,r){Promise.all(n).then(function(){var n=new bg.scene.FindComponentVisitor("bg.scene.Camera");i.accept(n);var r=null,a=null;if(n.result.some(function(t){if(a||(a=t),t.camera.isMain)return r=t,!0}),!(r=r||a)){(r=new bg.scene.Node(t,"Camera")).addComponent(new bg.scene.Camera);var s=bg.Matrix4.Rotation(.52,-1,0,0);s.translate(0,0,5),r.addComponent(new bg.scene.Transform(s)),i.addChild(r)}bg.scene.Camera.SetAsMainCamera(r,i),e({sceneRoot:i,cameraNode:r})})})}},{})}(),e=function(e){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return"vitscnj"==bg.utils.Resource.GetExtension(t)},load:function(e,n,i){return new Promise(function(r,a){if(i)try{"string"==typeof i&&(i=(i=i.replace(/,[\s\r\n]*\]/g,"]")).replace(/,[\s\r\n]*\}/g,"}"),i=JSON.parse(i)),new t(n,i).loadScene(e).then(function(t){r(t)})}catch(t){a(t)}else a(new Error("Error loading scene. Data is null"))})}},{},e)}(bg.base.LoaderPlugin);bg.base.SceneLoaderPlugin=e}(),function(){function t(t,e,n){var i=require("path"),r=bg.base.Writer.StandarizePath(this.getImageUrl(e)),a=r.split("/").pop(),s=bg.base.Writer.StandarizePath(i.join(n,a));switch(e){case bg.scene.CubemapImage.POSITIVE_X:t.positiveX=a;break;case bg.scene.CubemapImage.NEGATIVE_X:t.negativeX=a;break;case bg.scene.CubemapImage.POSITIVE_Y:t.positiveY=a;break;case bg.scene.CubemapImage.NEGATIVE_Y:t.negativeY=a;break;case bg.scene.CubemapImage.POSITIVE_Z:t.positiveZ=a;break;case bg.scene.CubemapImage.NEGATIVE_Z:t.negativeZ=a}return bg.base.Writer.CopyFile(r,s)}var e=[.5,-.5,-.5,-.5,-.5,-.5,-.5,.5,-.5,.5,.5,-.5],n=[.5,-.5,.5,.5,-.5,-.5,.5,.5,-.5,.5,.5,.5],i=[-.5,-.5,.5,.5,-.5,.5,.5,.5,.5,-.5,.5,.5],r=[-.5,-.5,-.5,-.5,-.5,.5,-.5,.5,.5,-.5,.5,-.5],a=[-.5,.5,.5,.5,.5,.5,.5,.5,-.5,-.5,.5,-.5],s=[.5,-.5,.5,-.5,-.5,.5,-.5,-.5,-.5,.5,-.5,-.5],o=[0,0,1,0,0,1,0,0,1,0,0,1],u=[-1,0,0,-1,0,0,-1,0,0,-1,0,0],h=[0,0,-1,0,0,-1,0,0,-1,0,0,-1],l=[1,0,0,1,0,0,1,0,0,1,0,0],c=[0,-1,0,0,-1,0,0,-1,0,0,-1,0],f=[0,1,0,0,1,0,0,1,0,0,1,0],v=[1,0,0,0,0,1,1,1],g=[1,0,0,0,0,1,1,1],m=[1,0,0,0,0,1,1,1],d=[1,0,0,0,0,1,1,1],p=[1,0,0,0,0,1,1,1],b=[1,0,0,0,0,1,1,1],x=[2,1,0,0,3,2],_=function(_){function M(){$traceurRuntime.superConstructor(M).call(this),this._images=[null,null,null,null,null,null],this._textures=[],this._plist=[],this._material=null}return $traceurRuntime.createClass(M,{clone:function(t){var e=new M;return e._images=[this._images[0],this._images[1],this._images[2],this._images[3],this._images[4],this._images[5]],(t=t||this.node&&this.node.context)&&e.loadSkybox(t),e},setImageUrl:function(t,e){this._images[t]=e},getImageUrl:function(t){return this._images[t]},getTexture:function(t){return this._textures[t]},loadSkybox:function(){var t=void 0!==arguments[0]?arguments[0]:null,_=void 0!==arguments[1]?arguments[1]:null,M=this;t=t||this.node&&this.node.context;var T=new bg.base.PolyList(t),w=new bg.base.PolyList(t),S=new bg.base.PolyList(t),y=new bg.base.PolyList(t),E=new bg.base.PolyList(t),P=new bg.base.PolyList(t);return T.vertex=e,T.normal=o,T.texCoord0=v,T.texCoord1=v,T.index=x,T.build(),w.vertex=n,w.normal=u,w.texCoord0=g,w.texCoord1=g,w.index=x,w.build(),S.vertex=i,S.normal=h,S.texCoord0=m,S.texCoord1=m,S.index=x,S.build(),y.vertex=r,y.normal=l,y.texCoord0=d,y.texCoord1=d,y.index=x,y.build(),E.vertex=a,E.normal=c,E.texCoord0=p,E.texCoord1=p,E.index=x,E.build(),P.vertex=s,P.normal=f,P.texCoord0=b,P.texCoord1=b,P.index=x,P.build(),this._plist=[y,w,E,P,S,T],this._material=new bg.base.Material,this._material.receiveShadows=!1,this._material.castShadows=!1,this._material.unlit=!0,new Promise(function(e,n){bg.base.Loader.Load(t,M._images,_,{wrapX:bg.base.TextureWrap.MIRRORED_REPEAT,wrapY:bg.base.TextureWrap.MIRRORED_REPEAT}).then(function(t){M._textures=[t[M.getImageUrl(bg.scene.CubemapImage.POSITIVE_X)],t[M.getImageUrl(bg.scene.CubemapImage.NEGATIVE_X)],t[M.getImageUrl(bg.scene.CubemapImage.POSITIVE_Y)],t[M.getImageUrl(bg.scene.CubemapImage.NEGATIVE_Y)],t[M.getImageUrl(bg.scene.CubemapImage.POSITIVE_Z)],t[M.getImageUrl(bg.scene.CubemapImage.NEGATIVE_Z)]],M._textures.forEach(function(t){t.wrapX=bg.base.TextureWrap.CLAMP,t.wrapY=bg.base.TextureWrap.CLAMP}),bg.emitImageLoadEvent(t[M.getImageUrl(bg.scene.CubemapImage.POSITIVE_X)]),e()}).catch(function(t){n(t)})})},display:function(t,e){var n=this;if(!t.effect)throw new Error("Could not draw skybox: invalid effect");if(this.node.enabled&&6==this._textures.length){var i=t.effect.material;t.effect.material=this._material,e.viewMatrixStack.push(),e.modelMatrixStack.push(),e.viewMatrixStack.matrix.setPosition(0,0,0);var r=e.projectionMatrixStack.matrix,a=-r.m22,s=2*-r.m32/(2*a-2),o=bg.Math.sin(bg.Math.PI_4)*s-1;e.modelMatrixStack.scale(o,o,o),t.shouldDraw(this._material)&&this._plist.forEach(function(e,i){n._material.texture=n._textures[i],t.draw(e)}),e.modelMatrixStack.pop(),e.viewMatrixStack.pop(),t.effect.material=i}},draw:function(t,e,n,i){var r=this;if(6==this._textures.length){n.push(),e.push(),n.matrix.setPosition(0,0,0);var a=i.matrix,s=-a.m22,o=2*-a.m32/(2*s-2),u=bg.Math.sin(bg.Math.PI_4)*o-1;e.scale(u,u,u),this._plist.forEach(function(i,a){r._material.texture=r._textures[a],t.renderOpaque(i,r._material.clone(),e.matrix,n.matrix)}),n.pop(),e.pop()}},removedFromNode:function(){this._plist.forEach(function(t){t.destroy()})},deserialize:function(t,e,n){return this.setImageUrl(bg.scene.CubemapImage.POSITIVE_X,bg.utils.Resource.JoinUrl(n,e.positiveX)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_X,bg.utils.Resource.JoinUrl(n,e.negativeX)),this.setImageUrl(bg.scene.CubemapImage.POSITIVE_Y,bg.utils.Resource.JoinUrl(n,e.positiveY)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_Y,bg.utils.Resource.JoinUrl(n,e.negativeY)),this.setImageUrl(bg.scene.CubemapImage.POSITIVE_Z,bg.utils.Resource.JoinUrl(n,e.positiveZ)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_Z,bg.utils.Resource.JoinUrl(n,e.negativeZ)),this.loadSkybox(t)},serialize:function(e,n,i){$traceurRuntime.superGet(this,M.prototype,"serialize").call(this,e,n,i),bg.isElectronApp&&(n.push(t.apply(this,[e,bg.scene.CubemapImage.POSITIVE_X,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.NEGATIVE_X,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.POSITIVE_Y,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.NEGATIVE_Y,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.POSITIVE_Z,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.NEGATIVE_Z,i.path])))}},{},_)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,_,"bg.scene.Skybox")}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){var e=void 0!==arguments[0]?arguments[0]:new bg.Vector2(1,1),n=void 0!==arguments[1]?arguments[1]:new bg.Vector2(1e3,1e3);$traceurRuntime.superConstructor(t).call(this),this._rectSize=e,this._textureSize=n,this._textProperties=new bg.base.TextProperties,this._doubleSided=!0,this._unlit=!1,this._text="Hello, World!",this._sprite=null,this._material=null,this._sizeMatrix=bg.Matrix4.Scale(this._rectSize.x,-1*this._rectSize.y,1),this._canvasTexture=null,this._dirty=!0},{clone:function(){var t=new bg.scene.TextRect;return t._text=this._text,t._sprite=this._sprite&&this._sprite.clone(),t._material=this._material&&this._material.clone(),t},get textProperties(){return this._textProperties},get text(){return this._text},set text(t){this._dirty=!0,this._text=t},get doubleSided(){return this._doubleSided},set doubleSided(t){this._dirty=!0,this._doubleSided=t},get unlit(){return this._unlit},set unlit(t){this._dirty=!0,this._unlit=t},get rectSize(){return this._rectSize},set rectSize(t){this._sizeMatrix.identity().scale(t.x,t.y,1),this._rectSize=t},get textureSize(){return this._textureSize},set textureSize(t){this._dirty=!0,this._canvasTexture.resize(t.x,t.y),this._textureSize=t},get material(){return this._material},init:function(){var t=this;!this._sprite&&this.node&&this.node.context&&(this._sprite=bg.scene.PrimitiveFactory.PlanePolyList(this.node.context,1,1,"z"),this._material=new bg.base.PBRMaterial,this._material.alphaCutoff=.9,this._dirty=!0),!this._canvasTexture&&this.node&&this.node.context&&(this._canvasTexture=new bg.tools.CanvasTexture(this.node.context,this._textureSize.x,this._textureSize.y,function(e,n,i){e.clearRect(0,0,n,i),"transparent"!=t._textProperties.background&&(e.fillStyle=t._textProperties.background,e.fillRect(0,0,n,i)),e.fillStyle=t._textProperties.color;var r=t._textProperties.size,a=t._textProperties.font,s=t._textProperties.italic?"italic":"",o=t._textProperties.bold?"bold":"";e.textAlign=t._textProperties.align,e.font=s+" "+o+" "+r+"px "+a;e.measureText(t._text);var u=0,h=0;switch(e.textAlign){case"center":u=n/2,h=r+0;break;case"right":u=n,h=r+0;break;default:u=0,h=r+0}t._text.split("\n").forEach(function(t){e.fillText(t,u,h),h+=r})}),this._dirty=!0)},frame:function(t){(this._dirty||this._textProperties.dirty)&&this._material&&this._canvasTexture&&(this._canvasTexture.update(),this._material instanceof bg.base.PBRMaterial?(this._material.diffuse=this._canvasTexture.texture,this._material.unlit=this._unlit,this._material.cullFace=!this._doubleSided):(this._material.texture=this._canvasTexture.texture,this._material.unlit=this._unlit,this._material.cullFace=!this._doubleSided),this._dirty=!1,this.textProperties.dirty=!1)},display:function(t,e){if(!t.effect)throw new Error("Could not draw TextRect: invalid effect");if(this.node.enabled&&this._sprite&&this._material&&this._sprite.visible){var n=t.effect.material;e.modelMatrixStack.push(),e.modelMatrixStack.mult(this._sizeMatrix),t.shouldDraw(this._material)&&(t.effect.material=this._material,t.draw(this._sprite)),e.modelMatrixStack.pop(),t.effect.material=n}},draw:function(t,e,n,i){this._sprite&&this._material&&(e.push(),e.mult(this._sizeMatrix),this._material.isTransparent?t.renderTransparent(this._sprite,this._material,e.matrix,n.matrix):t.renderOpaque(this._sprite,this._material,e.matrix,n.matrix),e.pop())},serialize:function(t,e,n){t.textProperties={},this.textProperties.serialize(t.textProperties),t.text=this.text,t.doubleSided=this.doubleSided,t.unlit=this.unlit,t.textureSize=this.textureSize.toArray(),t.rectSize=this.rectSize.toArray()},deserialize:function(t,e,n){this.textProperties.deserialize(e.textProperties),this.text=e.text,this.doubleSided=e.doubleSided,this.unlit=e.unlit,this.textureSize=new bg.Vector2(e.textureSize),this.rectSize=new bg.Vector2(e.rectSize)}},{},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,t,"bg.scene.TextRect")}(),function(){var t=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this),this._matrix=t||bg.Matrix4.Identity(),this._globalMatrixValid=!1,this._transformVisitor=new bg.scene.TransformVisitor}return $traceurRuntime.createClass(e,{clone:function(){var t=new bg.scene.Transform;return t.matrix=new bg.Matrix4(this.matrix),t},get matrix(){return this._matrix},set matrix(t){this._matrix=t},get globalMatrix(){return this._globalMatrixValid||(this._transformVisitor.clear(),this.node.acceptReverse(this._transformVisitor),this._globalMatrix=this._transformVisitor.matrix),this._globalMatrix},deserialize:function(t,e,n){var i=this;return new Promise(function(t,n){if(e.transformStrategy){var r=e.transformStrategy;if("TRSTransformStrategy"==r.type){switch(i._matrix.identity().translate(r.translate[0],r.translate[1],r.translate[2]),r.rotationOrder){case"kOrderXYZ":i._matrix.rotate(r.rotateX,1,0,0).rotate(r.rotateY,0,1,0).rotate(r.rotateZ,0,0,1);break;case"kOrderXZY":i._matrix.rotate(r.rotateX,1,0,0).rotate(r.rotateZ,0,0,1).rotate(r.rotateY,0,1,0);break;case"kOrderYXZ":i._matrix.rotate(r.rotateY,0,1,0).rotate(r.rotateX,1,0,0).rotate(r.rotateZ,0,0,1);break;case"kOrderYZX":i._matrix.rotate(r.rotateY,0,1,0).rotate(r.rotateZ,0,0,1).rotate(r.rotateX,1,0,0);break;case"kOrderZYX":i._matrix.rotate(r.rotateZ,0,0,1).rotate(r.rotateY,0,1,0).rotate(r.rotateX,1,0,0);break;case"kOrderZXY":i._matrix.rotate(r.rotateZ,0,0,1).rotate(r.rotateX,1,0,0).rotate(r.rotateY,0,1,0)}i._matrix.scale(r.scale[0],r.scale[1],r.scale[2])}}else e.transformMatrix&&(i._matrix=new bg.Matrix4(e.transformMatrix));t(i)})},serialize:function(t,n,i){$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t,n,i),t.transformMatrix=this._matrix.toArray()},willDisplay:function(t,e){this.node&&this.node.enabled&&(e.modelMatrixStack.push(),e.modelMatrixStack.mult(this.matrix))},didDisplay:function(t,e){this.node&&this.node.enabled&&e.modelMatrixStack.pop(),this._globalMatrixValid=!1},willUpdate:function(t,e,n){this.node&&this.node.enabled&&(t.push(),t.mult(this.matrix))},didUpdate:function(t,e,n){this.node&&this.node.enabled&&t.pop(),this._globalMatrixValid=!1}},{WorldMatrix:function(t){var e=t;if(t instanceof bg.scene.Component&&(e=t.node),!e)return bg.Matrix4.Identity();var n=new bg.scene.TransformVisitor;return e.acceptReverse(n),n.matrix}},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,t,"bg.scene.Transform")}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e,n){$traceurRuntime.superConstructor(t).call(this),this._pipeline=e||bg.base.Pipeline.Current(),this._matrixState=n||bg.base.MatrixState.Current(),this._forceDraw=!1},{get forceDraw(){return this._forceDraw},set forceDraw(t){this._forceDraw=t},get pipeline(){return this._pipeline},get matrixState(){return this._matrixState},visit:function(t){t.willDisplay(this.pipeline,this.matrixState),t.display(this.pipeline,this.matrixState,this.forceDraw)},didVisit:function(t){t.didDisplay(this.pipeline,this.matrixState)}},{},t)}(bg.scene.NodeVisitor);bg.scene.DrawVisitor=t;var e=function(t){return $traceurRuntime.createClass(function t(e,n,i){$traceurRuntime.superConstructor(t).call(this),this._modelMatrixStack=e||new bg.base.MatrixStack,this._viewMatrixStack=n||new bg.base.MatrixStack,this._projectionMatrixStack=i||new bg.base.MatrixStack,this._renderQueue=new bg.base.RenderQueue},{get modelMatrixStack(){return this._modelMatrixStack},set modelMatrixStack(t){this._modelMatrixStack=t},get viewMatrixStack(){return this._viewMatrixStack},set viewMatrixStack(t){this._viewMatrixStack=t},get projectionMatrixStack(){return this._projectionMatrixStack},set projectionMatrixStack(t){this._projectionMatrixStack=t},get renderQueue(){return this._renderQueue},visit:function(t){t.willUpdate(this._modelMatrixStack),t.draw(this._renderQueue,this._modelMatrixStack,this._viewMatrixStack,this._projectionMatrixStack)},didVisit:function(t){t.didUpdate(this._modelMatrixStack,this._viewMatrixStack,this._projectionMatrixStack)}},{},t)}(bg.scene.NodeVisitor);bg.scene.RenderQueueVisitor=e;var n=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._delta=0},{get delta(){return this._delta},set delta(t){this._delta=t},visit:function(t){t.frame(this.delta)}},{},t)}(bg.scene.NodeVisitor);bg.scene.FrameVisitor=n;var i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._matrix=bg.Matrix4.Identity()},{get matrix(){return this._matrix},clear:function(){this._matrix=bg.Matrix4.Identity()},visit:function(t){var e=t.component("bg.scene.Transform");e&&this._matrix.mult(e.matrix)}},{},t)}(bg.scene.NodeVisitor);bg.scene.TransformVisitor=i;var r=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{visit:function(t){this._operation&&t[this._operation](this._event)},keyDown:function(t,e){this._operation="keyDown",this._event=e,t.accept(this)},keyUp:function(t,e){this._operation="keyUp",this._event=e,t.accept(this)},mouseUp:function(t,e){this._operation="mouseUp",this._event=e,t.accept(this)},mouseDown:function(t,e){this._operation="mouseDown",this._event=e,t.accept(this)},mouseMove:function(t,e){this._operation="mouseMove",this._event=e,t.accept(this)},mouseOut:function(t,e){this._operation="mouseOut",this._event=e,t.accept(this)},mouseDrag:function(t,e){this._operation="mouseDrag",this._event=e,t.accept(this)},mouseWheel:function(t,e){this._operation="mouseWheel",this._event=e,t.accept(this)},touchStart:function(t,e){this._operation="touchStart",this._event=e,t.accept(this)},touchMove:function(t,e){this._operation="touchMove",this._event=e,t.accept(this)},touchEnd:function(t,e){this._operation="touchEnd",this._event=e,t.accept(this)}},{},t)}(bg.scene.NodeVisitor);bg.scene.InputVisitor=r;var a=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this.clear()},{get min(){return this._min},get max(){return this._max},get size(){return this._size},clear:function(){this._min=new bg.Vector3(bg.Math.FLOAT_MAX,bg.Math.FLOAT_MAX,bg.Math.FLOAT_MAX),this._max=new bg.Vector3(-bg.Math.FLOAT_MAX,-bg.Math.FLOAT_MAX,-bg.Math.FLOAT_MAX),this._size=new bg.Vector3(0,0,0)},visit:function(t){var e=bg.Matrix4.Identity();if(t.component("bg.scene.Transform")&&(e=t.component("bg.scene.Transform").globalMatrix),t.component("bg.scene.Drawable")){var n=new bg.tools.BoundingBox(t.component("bg.scene.Drawable"),new bg.Matrix4(e));this._min=bg.Vector.MinComponents(this._min,n.min),this._max=bg.Vector.MaxComponents(this._max,n.max),this._size=bg.Vector3.Sub(this._max,this._min)}}},{},t)}(bg.scene.NodeVisitor);bg.scene.BoundingBoxVisitor=a;var s=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this),this.componentId=e,this.clear()},{get result(){return this._result},clear:function(){this._result=[]},visit:function(t){t.component(this.componentId)&&this._result.push(t)}},{},t)}(bg.scene.NodeVisitor);bg.scene.FindComponentVisitor=s}(),function(){function t(t,e){var n=new Uint8Array(t,e,4);return n=String.fromCharCode(n[0])+String.fromCharCode(n[1])+String.fromCharCode(n[2])+String.fromCharCode(n[3])}function e(t,e){return new DataView(t,e,4).getInt32(0)}function n(t,e){for(var n={offset:0,data:[]},i=new DataView(t,e,64),r=0;r<16;++r)n.data[r]=i.getFloat32(4*r,!1);return n.offset+=64,n}function i(t,n){var i={offset:0,data:""},r=e(t,n);i.offset+=4;for(var a=new Uint8Array(t,n+4,r),s=0;s<r;++s)i.data+=String.fromCharCode(a[s]);return i.offset+=r,i}function r(t,n){var i={offset:0,data:[]},r=e(t,n);i.offset+=4;for(var a=new DataView(t,n+4,4*r),s=0;s<r;++s)i.data[s]=a.getFloat32(4*s,!1);return i.offset+=4*r,i}function a(t,n){var i={offset:0,data:[]},r=e(t,n);i.offset+=4;for(var a=new DataView(t,n+4,4*r),s=0;s<r;++s)i.data[s]=a.getInt32(4*s,!1);return i.offset+=4*r,i}function s(t,e,n){var i=new bg.physics[n.type];i.offset=new(Function.prototype.bind.apply(bg.Vector3,$traceurRuntime.spread([null],n.offset))),i.roll=n.roll,i.pitch=n.pitch,i.yaw=n.yaw;var r=new bg.scene[e](i);t.addComponent(r)}var o=function(){return $traceurRuntime.createClass(function(t,e){this._context=t},{loadDrawable:function(t,e){this._jointData=null;var n=this.parseData(t);return this.createDrawable(n,e)},parseData:function(s){var o=[],u=null,h=null,l=0,c=new Uint8Array(s,0,8);l=8;var f=String.fromCharCode(c[4])+String.fromCharCode(c[5])+String.fromCharCode(c[6])+String.fromCharCode(c[7]);if(1==c[0])throw"Could not open the model file. This file has been saved as computer (little endian) format, try again saving it in network (big endian) format";if("hedr"!=f)throw"File format error. Expecting header";var v={maj:c[1],min:c[2],rev:c[3]};bg.log("vwglb file version: "+v.maj+"."+v.min+"."+v.rev+", big endian");e(s,l);if("mtrl"!=t(s,l+=4))throw"File format error. Expecting materials definition";var g=i(s,l+=4);if(l+=g.offset,u=JSON.parse(g.data),"proj"==t(s,l)){l+=4;(function(t,e){new DataView(t,e,4).getFloat32(0)})(s,l+=i(s,l).offset);var m=n(s,l+=4);l+=m.offset;m.data;var d=n(s,l);l+=d.offset;d.data}if("join"==t(s,l)){var p=i(s,l+=4);l+=p.offset;var b=p.data;try{this._jointData=JSON.parse(b)}catch(t){throw new Error("VWGLB file format reader: Error parsing joint data")}}var x=t(s,l);if("plst"!=x)throw"File format error. Expecting poly list";var _,M,T,w,S,y,E,P,R=!1;for(l+=4;!R;){x=t(s,l),l+=4;var C=null,z=null;switch(x){case"pnam":l+=(C=i(s,l)).offset,_=C.data;break;case"mnam":l+=(C=i(s,l)).offset,M=C.data;break;case"varr":var O=r(s,l);l+=O.offset,T=O.data;break;case"narr":var A=r(s,l);l+=A.offset,w=A.data;break;case"t0ar":l+=(z=r(s,l)).offset,S=z.data;break;case"t1ar":l+=(z=r(s,l)).offset,y=z.data;break;case"t2ar":l+=(z=r(s,l)).offset,E=z.data;break;case"indx":var V=a(s,l);l+=V.offset,P=V.data;break;case"plst":case"endf":if("endf"==x&&l+4<s.byteLength){try{if(x=t(s,l),l+=4,"cmps"==x){var L=i(s,l);l+=L.offset,L.data=L.data.replace(/,[\s\r\n]*\]/g,"]"),L.data=L.data.replace(/,[\s\r\n]*\}/g,"}"),h=JSON.parse(L.data)}}catch(t){console.error(t.message)}R=!0}else l+4>=s.byteLength&&(R=!0);var N={name:_,matName:M,vertices:T,normal:w,texcoord0:S,texcoord1:y,texcoord2:E,indices:P};o.push(N),_="",M="",T=null,w=null,S=null,y=null,E=null,P=null;break;default:throw"File format exception. Unexpected poly list member found"}}var F={version:v,polyList:o,materials:{}};return this._componentData=h,u.forEach(function(t){F.materials[t.name]=t}),F},createDrawable:function(t,e){var n=this,i=new bg.scene.Drawable(this.context);i._version=t.version;var r=[];return t.polyList.forEach(function(a){var s=t.materials[a.matName],o=new bg.base.PolyList(n._context);o.name=a.name,o.vertex=a.vertices||o.vertex,o.normal=a.normal||o.normal,o.texCoord0=a.texcoord0||o.texCoord0,o.texCoord1=a.texcoord1||o.texCoord1,o.texCoord2=a.texcoord2||o.texCoord2,o.index=a.indices||o.index,o.groupName=s.groupName||"",o.visible=void 0===s.visible||s.visible,o.visibleToShadows=void 0===s.visibleToShadows||s.visibleToShadows,o.build(),"PBRMaterial"==s.class?r.push(bg.base.PBRMaterial.GetMaterialWithJson(n._context,s,e).then(function(t){i.addPolyList(o,t)})):r.push(bg.base.Material.GetMaterialWithJson(n._context,s,e).then(function(t){i.addPolyList(o,t)}))}),Promise.all(r).then(function(){return i})},addComponents:function(t,e){var n=this;if(this._jointData){var i=null,r=null;this._jointData.input&&(i=this._jointData.input),this._jointData.output&&this._jointData.output.length&&(r=this._jointData.output[0]),i&&s(t,"InputChainJoint",i),r&&s(t,"OutputChainJoint",r)}if(this._componentData){console.log("Component data found");var a=e;bg.isElectronApp&&(a=bg.base.Writer.StandarizePath(e)),(a=a.split("/")).pop(),a=a.join("/"),this._componentData.forEach(function(e){bg.scene.Component.Factory(n.context,e,t,a)})}}},{})}(),u=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){var n=bg.utils.Resource.GetExtension(t);return"vwglb"==n||"bg2"==n},load:function(t,e,n){return new Promise(function(i,r){if(n)try{var a=new o(t,n),s=e.substr(0,e.lastIndexOf("/"));a.loadDrawable(n,s).then(function(n){var r=new bg.scene.Node(t,n.name);r.addComponent(n),a.addComponents(r,e),i(r)})}catch(t){r(t)}else r(new Error("Error loading drawable. Data is null"))})}},{},t)}(bg.base.LoaderPlugin),h=function(t){function e(){$traceurRuntime.superConstructor(e).apply(this,arguments)}return $traceurRuntime.createClass(e,{load:function(t,n,i){var r=$traceurRuntime.superGet(this,e.prototype,"load").call(this,t,n,i);return new Promise(function(e,i){r.then(function(i){var r=n.split("/");r.pop(),r=r.join("/")+"/";var a=n.split(".");a.pop(),a.push("bg2mat"),a=a.join("."),bg.utils.Resource.LoadJson(a).then(function(e){var n=[];try{i.component("bg.scene.Drawable").forEach(function(i,a){var s=null;if(e.some(function(t){if(t.name==i.name)return s=t,!0}),s){var o="PBRMaterial"==s.class?bg.base.PBRMaterial.FromMaterialDefinition(t,s,r):bg.base.Material.FromMaterialDefinition(t,s,r);n.push(o),o.then(function(t){a.assign(t)})}})}catch(t){}return Promise.all(n)}).then(function(){e(i)}).catch(function(){e(i)})}).catch(function(t){i(t)})})}},{},t)}(u);bg.base.VWGLBLoaderPlugin=u,bg.base.Bg2LoaderPlugin=h}(),bg.manipulation={},function(){var t=function(t){function e(t,n){$traceurRuntime.superConstructor(e).call(this,t,n),this._sprite=bg.scene.PrimitiveFactory.PlanePolyList(t.context,1,1,"z"),this._gizmoScale=1,this._gizmoIcons=[],this._show3dGizmos=!0}return $traceurRuntime.createClass(e,{get gizmoScale(){return this._gizmoScale},set gizmoScale(t){this._gizmoScale=t},get show3dGizmos(){return this._show3dGizmos},set show3dGizmos(t){this._show3dGizmos=t},clearGizmoIcons:function(){this._gizmoIcons=[]},addGizmoIcon:function(t,e){var n=void 0===arguments[2]||arguments[2];this._gizmoIcons.push({type:t,icon:e,visible:n})},setGizmoIconVisibility:function(t,e){this._gizmoIcons.some(function(n){n.type==t&&(n.visible=e)})},get gizmoIcons(){return this._gizmoIcons},getGizmoIcon:function(t){var e=null;return this._gizmoIcons.some(function(n){if(t.component(n.type)&&n.visible)return e=n.icon,!0}),e},visit:function(t){$traceurRuntime.superGet(this,e.prototype,"visit").call(this,t);var n=this.getGizmoIcon(t),i=this.pipeline.effect.gizmoOpacity,r=this.pipeline.effect.color;this.pipeline.effect.color=bg.Color.White();var a=this.pipeline.depthTest;if(this.pipeline.depthTest=!1,n){this.pipeline.effect.texture=n,this.pipeline.effect.gizmoOpacity=1,this.matrixState.viewMatrixStack.push(),this.matrixState.modelMatrixStack.push(),this.matrixState.viewMatrixStack.mult(this.matrixState.modelMatrixStack.matrix),this.matrixState.modelMatrixStack.identity(),this.matrixState.viewMatrixStack.matrix.setRow(0,new bg.Vector4(1,0,0,0)),this.matrixState.viewMatrixStack.matrix.setRow(1,new bg.Vector4(0,1,0,0)),this.matrixState.viewMatrixStack.matrix.setRow(2,new bg.Vector4(0,0,1,0));var s=.05*this.matrixState.cameraDistanceScale*this._gizmoScale;this.matrixState.viewMatrixStack.scale(s,s,s),this.pipeline.draw(this._sprite),this.matrixState.viewMatrixStack.pop(),this.matrixState.modelMatrixStack.pop(),this.pipeline.effect.gizmoOpacity=i,this.pipeline.effect.texture=null}this._show3dGizmos&&t.displayGizmo(this.pipeline,this.matrixState),this.pipeline.effect.color=r,this.pipeline.depthTest=a}},{},t)}(bg.scene.DrawVisitor);bg.manipulation=bg.manipulation||{},bg.manipulation.DrawGizmoVisitor=t}(),function(){function t(){if(this.bounds.x!=this._gizmoSize.x||this.bounds.y!=this._gizmoSize.y||this.bounds.z!=this._gizmoSize.z){for(var t=-this.bounds.x/2,e=this.bounds.x/2,n=-this.bounds.y/2,i=this.bounds.y/2,r=-this.bounds.z/2,a=this.bounds.z/2,s=[t,n,r,e,n,r,e,n,r,e,i,r,e,i,r,t,i,r,t,i,r,t,n,r,t,n,a,e,n,a,e,n,a,e,i,a,e,i,a,t,i,a,t,i,a,t,n,a,t,n,r,t,n,a,e,n,r,e,n,a,e,i,r,e,i,a,t,i,r,t,i,a],o=[],u=0;u<s.length;u+=3)o.push(this._gizmoColor.r),o.push(this._gizmoColor.g),o.push(this._gizmoColor.b),o.push(this._gizmoColor.a);this._gizmo?(this._gizmo.updateBuffer(bg.base.BufferType.VERTEX,s),this._gizmo.updateBuffer(bg.base.BufferType.COLOR,o)):this._gizmo=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(this.node.context,s,o),this._gizmoScale=new bg.Vector3(this.bounds)}return this._gizmo}var e=function(e){function n(){$traceurRuntime.superConstructor(n).call(this),this._bounds=new bg.Vector3(1,1,1),this._gizmoSize=new bg.Vector3(0,0,0),this._gizmoColor=new bg.Color(.2,.4,.95,1)}return $traceurRuntime.createClass(n,{clone:function(){var t=new bg.manipulation.GizmoConstraints;return t.bounds.assign(this._bounds),t},get bounds(){return this._bounds},set bounds(t){this._bounds=t},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.bounds=this.bounds.toArray()},deserialize:function(t,e,n){Array.isArray(e.bounds)&&(this.bounds=new bg.Vector3(e.bounds))},displayGizmo:function(e,n){var i=t.apply(this);i&&e.draw(i)}},{},e)}(bg.scene.Component);bg.scene.registerComponent(bg.manipulation,e,"bg.manipulation.GizmoConstraints")}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._gizmoOpacity=.9},{get pipeline(){return this._pipeline||(this._pipeline=new bg.base.Pipeline(this.context),this._pipeline.blendMode=bg.base.BlendMode.NORMAL,this._pipeline.effect=new bg.manipulation.GizmoEffect(this.context)),this._pipeline},get matrixState(){return this._matrixState||(this._matrixState=new bg.base.MatrixState),this._matrixState},get drawVisitor(){return this._drawVisitor||(this._drawVisitor=new bg.manipulation.DrawGizmoVisitor(this.pipeline,this.matrixState)),this._drawVisitor},get gizmoOpacity(){return this._gizmoOpacity},set gizmoOpacity(t){this._gizmoOpacity=t},get show3dGizmos(){return this.drawVisitor.show3dGizmos},set show3dGizmos(t){this.drawVisitor.show3dGizmos=t},get working(){return this._working},addGizmoIcon:function(t,e){this.drawVisitor.addGizmoIcon(t,e)},get gizmoIconScale(){return this.drawVisitor.gizmoScale},set gizmoIconScale(t){this.drawVisitor.gizmoScale=t},setGizmoIconVisibility:function(t,e){this.drawVisitor.setGizmoIconVisibility(t,e)},hideGizmoIcon:function(t){this.drawVisitor.setGizmoIconVisibility(t,!1)},showGizmoIcon:function(t){this.drawVisitor.setGizmoIconVisibility(t,!0)},get gizmoIcons(){return this.drawVisitor.gizmoIcons},loadGizmoIcons:function(t){var e=void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=this;return new Promise(function(r,a){var s=[],o=[];t.forEach(function(t){var n={type:t.type,iconTexture:null};n.path=bg.utils.path.join(e,t.icon),s.push(n.path),o.push(n)}),bg.base.Loader.Load(i.context,s,n).then(function(t){o.forEach(function(e){e.iconTexture=t[e.path],i.addGizmoIcon(e.type,e.iconTexture)}),r(o)}).catch(function(t){a(t)})})},clearGizmoIcons:function(){this.drawVisitor.clearGizmoIcons()},startAction:function(t,e,n){var i=void 0!==arguments[3]?arguments[3]:null,r=this;if(!n)throw new Error("GizmoManager.startAction(): camera parameter is null.");if(i||(i=n.node&&n.node.sceneRoot),!i)throw new Error("GizmoManager.startAction(): The sceneRoot parameter can't be null because the camera is not attached to a scene.");var a=new bg.scene.FindComponentVisitor("bg.scene.AnchorJoint");if(i.accept(a),this._anchorPoints=[],this._anchorPoints.closestPoint=function(t,e){t instanceof bg.Vector3||(t=new bg.Vector3(t));var n=null,i=Number.MAX_VALUE;return this.forEach(function(r){var a=r.position.distance(t);r.component!=e&&a<i&&(n={anchor:r,distance:i=a})}),n},a.result.forEach(function(t){var e=t.anchorJoint;e.getWorldPositionAnchors().forEach(function(t){r._anchorPoints.push({position:new bg.Vector3(t.position),radius:t.radius,component:e})})}),this._working=!0,this._startPoint=new bg.Vector2(e.x,e.y),this._startPoint.y=n.viewport.height-e.y,this._currentGizmoData=t,this._currentGizmoData&&this._currentGizmoData.node){var s=this._currentGizmoData.node.component("bg.manipulation.Gizmo");s&&s.beginDrag(this._currentGizmoData.action,this._startPoint,this._anchorPoints)}},move:function(t,e){var n=this;if(this._currentGizmoData&&this._currentGizmoData.node){var i=this._currentGizmoData.node.parent,r=i&&i.component("bg.manipulation.GizmoConstraints"),a=this._currentGizmoData.node.transform,s=a&&new bg.Matrix4(a.matrix),o=this._currentGizmoData.node.component("bg.manipulation.Gizmo"),u=o&&this._currentGizmoData.node.anchorJoint;if(o){var h=null;if(u){var l=Number.MAX_VALUE;u.getWorldPositionAnchors().forEach(function(t){var e=new bg.Vector3(t.position),i=n._anchorPoints.closestPoint(e,u);i.distance<l&&(l=i.distance,t.position=new bg.Vector3(t.position),h={distance:l,nodeAnchor:t,closestAnchor:i.anchor,triggerAnchor:l<t.radius})})}if(t.y=e.viewport.height-t.y,o.drag(this._currentGizmoData.action,this._startPoint,t,e,this._anchorPoints,h),a&&r){var c=a.matrix.position,f=new bg.Vector3(r.bounds);f.scale(.5),(c.x<-f.x||c.x>f.x||c.y<-f.y||c.y>f.y||c.z<-f.z||c.z>f.z)&&(a.matrix=s)}}this._startPoint=t}},endAction:function(){if(this._currentGizmoData&&this._currentGizmoData.node){var t=this._currentGizmoData.node.component("bg.manipulation.Gizmo");t&&t.endDrag(this._currentGizmoData.action,this._anchorPoints)}this._working=!1,this._startPoint=null,this._currentGizmoData=null},drawGizmos:function(t,e){var n=void 0===arguments[2]||arguments[2],i=bg.base.Pipeline.Current(),r=bg.base.MatrixState.Current();bg.base.Pipeline.SetCurrent(this.pipeline),bg.base.MatrixState.SetCurrent(this.matrixState),this.pipeline.viewport=e.viewport,this.pipeline.effect.matrixState=this.matrixState,n&&this.pipeline.clearBuffers(bg.base.ClearBuffers.DEPTH),this.matrixState.projectionMatrixStack.set(e.projection),this.matrixState.viewMatrixStack.set(e.viewMatrix);var a=this.pipeline.opacityLayer;this.pipeline.opacityLayer=bg.base.OpacityLayer.NONE,this.pipeline.blend=!0,this.pipeline.effect.gizmoOpacity=this.gizmoOpacity,t.accept(this.drawVisitor),this.pipeline.blend=!1,this.pipeline.opacityLayer=a,i&&bg.base.Pipeline.SetCurrent(i),r&&bg.base.MatrixState.SetCurrent(r)}},{},t)}(bg.app.ContextObject);bg.manipulation.GizmoManager=t}(),function(){var t={};var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n),t[bg.webgl1.EngineId]={vertex:"\n\t\t\tattribute vec3 inVertex;\n\t\t\tattribute vec2 inTexCoord;\n\t\t\tattribute vec4 inVertexColor;\n\t\t\t\n\t\t\tuniform mat4 inModelMatrix;\n\t\t\tuniform mat4 inViewMatrix;\n\t\t\tuniform mat4 inProjectionMatrix;\n\t\t\t\n\t\t\tvarying vec2 fsTexCoord;\n\t\t\tvarying vec4 fsColor;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tfsTexCoord = inTexCoord;\n\t\t\t\tfsColor = inVertexColor;\n\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t}\n\t\t\t",fragment:"\n\t\t\tprecision highp float;\n\t\t\t\n\t\t\tuniform vec4 inColor;\n\t\t\tuniform sampler2D inTexture;\n\t\t\tuniform float inOpacity;\n\t\t\t\n\t\t\tvarying vec2 fsTexCoord;\n\t\t\tvarying vec4 fsColor;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec4 tex = texture2D(inTexture,fsTexCoord);\n\t\t\t\tgl_FragColor = vec4(fsColor.rgb * tex.rgb * inColor.rgb,inOpacity * tex.a);\n\t\t\t}\n\t\t\t"},this._gizmoOpacity=1,this._color=bg.Color.White()},{get inputVars(){return{vertex:"inVertex",color:"inVertexColor",tex0:"inTexCoord"}},set matrixState(t){this._matrixState=t},get matrixState(){return this._matrixState},set texture(t){this._texture=t},get texture(){return this._texture},set color(t){this._color=t},get color(){return this._color},set gizmoOpacity(t){this._gizmoOpacity=t},get gizmoOpacity(){return this._gizmoOpacity},get shader(){return this._shader||(this._shader=new bg.base.Shader(this.context),this._shader.addShaderSource(bg.base.ShaderType.VERTEX,t[bg.webgl1.EngineId].vertex),this._shader.addShaderSource(bg.base.ShaderType.FRAGMENT,t[bg.webgl1.EngineId].fragment),this._shader.link(),this._shader.status?this._shader.initVars(["inVertex","inVertexColor","inTexCoord"],["inModelMatrix","inViewMatrix","inProjectionMatrix","inColor","inTexture","inOpacity"]):(console.log(this._shader.compileError),console.log(this._shader.linkError))),this._shader},setupVars:function(){var t=bg.base.TextureCache.WhiteTexture(this.context);this.shader.setMatrix4("inModelMatrix",this.matrixState.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",new bg.Matrix4(this.matrixState.viewMatrixStack.matrixConst)),this.shader.setMatrix4("inProjectionMatrix",this.matrixState.projectionMatrixStack.matrixConst),this.shader.setVector4("inColor",this.color),this.shader.setTexture("inTexture",this.texture?this.texture:t,bg.base.TextureUnit.TEXTURE_0),this.shader.setValueFloat("inOpacity",this.gizmoOpacity)}},{},e)}(bg.base.Effect);function n(t){return/rotate.*fine/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE_FINE:/rotate.*x/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE_X:/rotate.*y/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE_Y:/rotate.*z/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE_Z:/rotate/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE:/translate.*x/i.test(t.name)?bg.manipulation.GizmoAction.TRANSLATE_X:/translate.*y/i.test(t.name)?bg.manipulation.GizmoAction.TRANSLATE_Y:/translate.*z/i.test(t.name)?bg.manipulation.GizmoAction.TRANSLATE_Z:/translate/i.test(t.name)?bg.manipulation.GizmoAction.TRANSLATE:/scale.*x/i.test(t.name)?bg.manipulation.GizmoAction.SCALE_X:/scale.*y/i.test(t.name)?bg.manipulation.GizmoAction.SCALE_Y:/scale.*z/i.test(t.name)?bg.manipulation.GizmoAction.SCALE_Z:/scale/i.test(t.name)?bg.manipulation.GizmoAction.SCALE:void 0}bg.manipulation.GizmoEffect=e,bg.manipulation.GizmoAction={TRANSLATE:1,ROTATE:2,ROTATE_FINE:3,SCALE:4,TRANSLATE_X:5,TRANSLATE_Y:6,TRANSLATE_Z:7,ROTATE_X:8,ROTATE_Y:9,ROTATE_Z:10,SCALE_X:11,SCALE_Y:12,SCALE_Z:13,NONE:99};var i={},r=function(){function t(t){this._context=t,this._gizmos={}}return $traceurRuntime.createClass(t,{find:function(t){return this._gizmos[t]},register:function(t,e){this._gizmos[t]=e},unregister:function(t){this._gizmos[t]&&delete this._gizmos[t]},clear:function(){this._gizmos={}}},{Get:function(e){return i[e.uuid]||(i[e.uuid]=new t(e)),i[e.uuid]}})}();function a(t,e,i){return new Promise(function(r,a){e?bg.base.Loader.Load(t,e).then(function(t){var e=t.component("bg.scene.Drawable"),a=[];e&&e.forEach(function(t,e){a.push({id:bg.manipulation.Selectable.GetIdentifier(),type:bg.manipulation.SelectableType.GIZMO,plist:t,material:e,action:n(t),node:i})}),r(a)}).catch(function(t){a(t)}):r([])})}function s(t,e,n,i,r){r||(r=0);var a=new bg.Vector3(n);a.sub(i).normalize();var s=new bg.Vector3(e);s.sub(i).normalize();var o=a.dot(s),u=Math.acos(o);if(u>=r||0==r){0!=r&&(u=u>=2*r?2*r:r),t.dot(a.cross(s))<0&&(u*=-1);var h=new bg.Quaternion(u,t.x,t.y,t.z);if(h.normalize(),!isNaN(h.x))return h}return new bg.Quaternion(0,0,1,0)}bg.manipulation.GizmoCache=r;var o=function(t){function e(t){var n=void 0===arguments[1]||arguments[1];$traceurRuntime.superConstructor(e).call(this),this._gizmoPath=t,this._offset=new bg.Vector3(0),this._visible=n,this._gizmoTransform=bg.Matrix4.Identity(),this._gizmoP=bg.Matrix4.Identity(),this._scale=5,this._minSize=.5}return $traceurRuntime.createClass(e,{clone:function(){var t=new e(this._gizmoPath);return t.offset.assign(this._offset),t.visible=this._visible,t},get offset(){return this._offset},set offset(t){this._offset=t},get visible(){return this._visible},set visible(t){this._visible=t},get gizmoTransform(){return this._gizmoTransform},beginDrag:function(t,e,n){},drag:function(t,e,n,i,r){},endDrag:function(t,e){},findId:function(t){var e=null;return this._gizmoItems&&this._gizmoItems.some(function(n){if(n.id.r==t.r&&n.id.g==t.g&&n.id.b==t.b&&n.id.a==t.a)return e=n,!0}),e},init:function(){var t=this;this._error||(this._gizmoItems=[],a(this.node.context,this._gizmoPath,this.node).then(function(e){t._gizmoItems=e}).catch(function(e){throw t._error=!0,e}))},frame:function(t){},display:function(t,e){if(this._gizmoItems&&this.visible){e.modelMatrixStack.push();var n=new bg.Matrix4(e.viewMatrixStack.matrix);n.mult(e.modelMatrixStack.matrix);var i=n.position.magnitude()/this._scale;if(e.modelMatrixStack.matrix.setScale(i,i,i),t.effect instanceof bg.manipulation.ColorPickEffect&&(t.opacityLayer&bg.base.OpacityLayer.GIZMOS||t.opacityLayer&bg.base.OpacityLayer.GIZMOS_SELECTION)){var r=t.depthTest;t.opacityLayer&bg.base.OpacityLayer.GIZMOS_SELECTION?t.depthTest=!0:t.depthTest=!1,this._gizmoItems.forEach(function(e){e.plist.visible&&(t.effect.pickId=new bg.Color(e.id.a/255,e.id.b/255,e.id.g/255,e.id.r/255),t.draw(e.plist))}),t.depthTest=r}else t.effect instanceof bg.manipulation.GizmoEffect&&this._gizmoItems.forEach(function(e){e.plist.visible&&(t.effect.texture=e.material.texture,t.effect.color=e.material.diffuse,t.draw(e.plist))});e.modelMatrixStack.pop()}}},{},t)}(bg.scene.Component);function u(t,e,n){var i=new bg.Matrix4(t.transform.matrix),r=i.rotation,a=i.position;if(t._lastPickPoint||(t._lastPickPoint=e.ray.end,t._translateOffset=new bg.Vector3(a),t._translateOffset.sub(e.ray.end)),n){var o=new bg.Matrix4(r);0==(r=s(t.planeAxis,t._lastPickPoint,e.point,a)).x&&0==r.y&&0==r.z&&1==r.w||(i=bg.Matrix4.Translation(a).mult(r.getMatrix4()).mult(o),t._lastPickPoint=e.point)}else{var u=new bg.Matrix4(r);0==(r=s(t.planeAxis,t._lastPickPoint,e.point,a,bg.Math.degreesToRadians(22.5))).x&&0==r.y&&0==r.z&&1==r.w||(i=bg.Matrix4.Translation(a).mult(r.getMatrix4()).mult(u),t._lastPickPoint=e.point)}return i}var h=function(t){function e(t){var n=void 0===arguments[1]||arguments[1];$traceurRuntime.superConstructor(e).call(this,t,n),this._plane=bg.Axis.Y,this._autoPlaneMode=!0}return $traceurRuntime.createClass(e,{get plane(){return this._plane},set plane(t){this._plane=t},get autoPlaneMode(){return this._autoPlaneMode},set autoPlaneMode(t){this._autoPlaneMode=t},get planeAxis(){switch(Math.abs(this.plane)){case bg.Axis.X:return new bg.Vector3(1,0,0);case bg.Axis.Y:return new bg.Vector3(0,1,0);case bg.Axis.Z:return new bg.Vector3(0,0,1)}},get gizmoTransform(){var t=bg.Matrix4.Identity();switch(this.plane){case bg.Axis.X:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(90),0,0,-1);case bg.Axis.Y:break;case bg.Axis.Z:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(90),1,0,0);case-bg.Axis.X:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(90),0,0,1);case-bg.Axis.Y:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(180),0,-1,0);case-bg.Axis.Z:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(90),-1,0,0)}return t},clone:function(){var t=new e(this._gizmoPath);return t.offset.assign(this._offset),t.visible=this._visible,t},init:function(){$traceurRuntime.superGet(this,e.prototype,"init").call(this),this._gizmoP=bg.Matrix4.Translation(this.transform.matrix.position)},display:function(t,e){if(this._gizmoItems&&this.visible&&(this.autoPlaneMode&&function(t,e){var n=e.viewMatrixStack.matrix.forwardVector,i=e.viewMatrixStack.matrix.upVector,r=new bg.Vector3(1,0,0),a=new bg.Vector3(0,1,0),s=new bg.Vector3(0,0,1),o=new bg.Vector3(-1,0,0),u=new bg.Vector3(0,-1,0),h=new bg.Vector3(0,0,-1);if(Math.acos(i.dot(a))>.9)t.plane=bg.Axis.Y;else{var l=[Math.acos(n.dot(r)),Math.acos(n.dot(a)),Math.acos(n.dot(s)),Math.acos(n.dot(o)),Math.acos(n.dot(u)),Math.acos(n.dot(h))],c=l[0],f=0;switch(l.reduce(function(t,e,n){e<c&&(f=n,c=e)}),f){case 0:t.plane=-bg.Axis.X;break;case 1:t.plane=bg.Axis.Y;break;case 2:t.plane=bg.Axis.Z;break;case 3:t.plane=bg.Axis.X;break;case 4:t.plane=-bg.Axis.Y;break;case 5:t.plane=-bg.Axis.Z}}}(this,e),this._gizmoItems&&this.visible)){var n=new bg.Matrix4(e.viewMatrixStack.matrix);n.mult(e.modelMatrixStack.matrix);var i=n.position.magnitude()/this._scale;i=i<this._minSize?this._minSize:i;var r=this.gizmoTransform;if(r.setScale(i,i,i),e.modelMatrixStack.push(),e.modelMatrixStack.mult(r),t.effect instanceof bg.manipulation.ColorPickEffect&&(t.opacityLayer&bg.base.OpacityLayer.GIZMOS||t.opacityLayer&bg.base.OpacityLayer.GIZMOS_SELECTION)){var a=t.depthTest;t.opacityLayer&bg.base.OpacityLayer.GIZMOS_SELECTION?t.depthTest=!0:t.depthTest=!1,this._gizmoItems.forEach(function(e){e.plist.visible&&(t.effect.pickId=new bg.Color(e.id.a/255,e.id.b/255,e.id.g/255,e.id.r/255),t.draw(e.plist))}),t.depthTest=a}else t.effect instanceof bg.manipulation.GizmoEffect&&this._gizmoItems.forEach(function(e){e.plist.visible&&(t.effect.texture=e.material.texture,t.effect.color=e.material.diffuse,t.draw(e.plist))});e.modelMatrixStack.pop()}},beginDrag:function(t,e){var n=this;this._lastPickPoint=null,this._stopDrag&&(this._disableAnchor=!0,this._stopDrag=!1,setTimeout(function(){n._disableAnchor=!1},500))},drag:function(t,e,n,i,r,a){if(this.transform&&!this._stopDrag){var s=new bg.physics.Plane(this.planeAxis),o=bg.physics.Ray.RayWithScreenPoint(n,i.projection,i.viewMatrix,i.viewport),h=bg.physics.Intersection.RayToPlane(o,s);if(h.intersects()){var l=new bg.Matrix4(this.transform.matrix);switch(this._gizmoP=bg.Matrix4.Translation(this.transform.matrix.position),t){case bg.manipulation.GizmoAction.TRANSLATE:if(l=function(t,e){var n=new bg.Matrix4(t.transform.matrix),i=n.rotation,r=n.position;switch(t._lastPickPoint||(t._lastPickPoint=e.ray.end,t._translateOffset=new bg.Vector3(r),t._translateOffset.sub(e.ray.end)),Math.abs(t.plane)){case bg.Axis.X:n=bg.Matrix4.Translation(r.x,e.point.y+t._translateOffset.y,e.point.z+t._translateOffset.z);break;case bg.Axis.Y:n=bg.Matrix4.Translation(e.point.x+t._translateOffset.x,r.y,e.point.z+t._translateOffset.z);break;case bg.Axis.Z:n=bg.Matrix4.Translation(e.point.x+t._translateOffset.x,e.point.y+t._translateOffset.y,r.z)}return n.mult(i),t._lastPickPoint=e.point,n}(this,h),a&&a.triggerAnchor&&!this._disableAnchor){var c=new bg.Vector3(a.closestAnchor.position);c.sub(a.nodeAnchor.position);var f=l.position;l.setPosition(new bg.Vector3(f.x+c.x,f.y+c.y,f.z+c.z)),this._stopDrag=!0}break;case bg.manipulation.GizmoAction.ROTATE:l=u(this,h,!1);break;case bg.manipulation.GizmoAction.ROTATE_FINE:l=u(this,h,!0)}this.transform.matrix=l}}},endDrag:function(t){this._lastPickPoint=null}},{},t)}(o),l=function(t){function e(t){var n=void 0===arguments[1]||arguments[1];$traceurRuntime.superConstructor(e).call(this,t,n),this._translateSpeed=.005,this._rotateSpeed=.005,this._scaleSpeed=.001,this._gizmoTransform=bg.Matrix4.Identity()}return $traceurRuntime.createClass(e,{get gizmoTransform(){return this._gizmoTransform},get translateSpeed(){return this._translateSpeed},set translateSpeed(t){this._translateSpeed=t},get rotateSpeed(){return this._rotateSpeed},set rotateSpeed(t){this._rotateSpeed=t},get scaleSpeed(){return this._scaleSpeed},set scaleSpeed(t){this._scaleSpeed=t},clone:function(){var t=new h(this._gizmoPath);return t.offset.assign(this._offset),t.visible=this._visible,t},init:function(){$traceurRuntime.superGet(this,e.prototype,"init").call(this),this._gizmoP=bg.Matrix4.Translation(this.transform.matrix.position),this._gizmoTransform=this.transform.matrix.rotation},display:function(t,n){this._gizmoItems&&this.visible&&$traceurRuntime.superGet(this,e.prototype,"display").call(this,t,n)},beginDrag:function(t,e){this._lastPickPoint=null},drag:function(t,e,n,i){if(this.transform){this._lastPickPoint||(this._lastPickPoint=n);var r=new bg.Matrix4(this.transform.matrix);this._gizmoP=bg.Matrix4.Translation(this.transform.matrix.position);var a=new bg.Vector2(this._lastPickPoint);a.sub(n);var s=bg.base.MatrixState.Current(),o=new bg.Matrix4(s.viewMatrixStack.matrix);o.mult(s.modelMatrixStack.matrix);var u=o.position.magnitude()/this._scale;u=u<this._minSize?this._minSize:u;var h=r.getScale(),l=1-(a.x+a.y)*this.scaleSpeed;switch(t){case bg.manipulation.GizmoAction.SCALE:r.scale(l,l,l);break;case bg.manipulation.GizmoAction.TRANSLATE_X:r.translate(-(a.x+a.y)*this.translateSpeed*u/h.x,0,0);break;case bg.manipulation.GizmoAction.TRANSLATE_Y:r.translate(0,-(a.x+a.y)*this.translateSpeed*u/h.y,0);break;case bg.manipulation.GizmoAction.TRANSLATE_Z:r.translate(0,0,-(a.x+a.y)*this.translateSpeed*u/h.z);break;case bg.manipulation.GizmoAction.ROTATE_X:r.rotate((a.x+a.y)*this.rotateSpeed,1,0,0),this._gizmoP.rotate((a.x+a.y)*this.rotateSpeed,1,0,0);break;case bg.manipulation.GizmoAction.ROTATE_Y:r.rotate((a.x+a.y)*this.rotateSpeed,0,1,0),this._gizmoP.rotate((a.x+a.y)*this.rotateSpeed,0,1,0);break;case bg.manipulation.GizmoAction.ROTATE_Z:r.rotate((a.x+a.y)*this.rotateSpeed,0,0,1),this._gizmoP.rotate((a.x+a.y)*this.rotateSpeed,0,0,1);break;case bg.manipulation.GizmoAction.SCALE_X:r.scale(l,1,1);break;case bg.manipulation.GizmoAction.SCALE_Y:r.scale(1,l,1);break;case bg.manipulation.GizmoAction.SCALE_Z:r.scale(1,1,l)}this.transform.matrix=r,this._lastPickPoint=n}},endDrag:function(t){this._lastPickPoint=null}},{},t)}(o);bg.manipulation.GizmoMode={SELECT:0,TRANSLATE:1,ROTATE:2,SCALE:3,TRANSFORM:4};var c=function(t){return $traceurRuntime.createClass(function t(e,n,i,r){$traceurRuntime.superConstructor(t).call(this,e),this.mode=bg.manipulation.GizmoMode.TRANSFORM,this._transformPath=e,this._translatePath=n,this._rotatePath=i,this._scalePath=r,this._gizmoPath=e},{get visible(){return this._mode!=bg.manipulation.GizmoMode.SELECT&&this._visible},set visible(t){this._visible=t},get mode(){return this._mode},set mode(t){var e=this;switch(this._mode=t,this._gizmoItems=[],t){case bg.manipulation.GizmoMode.SELECT:this._gizmoPath="";break;case bg.manipulation.GizmoMode.TRANSLATE:this._gizmoPath=this._translatePath;break;case bg.manipulation.GizmoMode.ROTATE:this._gizmoPath=this._rotatePath;break;case bg.manipulation.GizmoMode.SCALE:this._gizmoPath=this._scalePath;break;case bg.manipulation.GizmoMode.TRANSFORM:this._gizmoPath=this._transformPath}this._gizmoPath&&a(this.node.context,this._gizmoPath,this.node).then(function(t){e._gizmoItems=t,bg.emitImageLoadEvent()}).catch(function(t){throw e._error=!0,t})}},{},t)}(l);bg.scene.registerComponent(bg.manipulation,o,"bg.manipulation.Gizmo"),bg.scene.registerComponent(bg.manipulation,h,"bg.manipulation.Gizmo"),bg.scene.registerComponent(bg.manipulation,l,"bg.manipulation.Gizmo"),bg.scene.registerComponent(bg.manipulation,c,"bg.manipulation.Gizmo")}(),function(){var t={};var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n),t[bg.webgl1.EngineId]={vertex:"\n\t\t\tattribute vec3 inVertex;\n\t\t\t\n\t\t\tuniform mat4 inModelMatrix;\n\t\t\tuniform mat4 inViewMatrix;\n\t\t\tuniform mat4 inProjectionMatrix;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t}\n\t\t\t",fragment:"\n\t\t\tprecision highp float;\n\t\t\t\n\t\t\tuniform vec4 inColorId;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tgl_FragColor = inColorId;\n\t\t\t}\n\t\t\t"}},{get inputVars(){return{vertex:"inVertex"}},set matrixState(t){this._matrixState=t},get matrixState(){return this._matrixState},set pickId(t){this._pickId=t},get pickId(){return this._pickId||bg.Color.Transparent()},get shader(){return this._shader||(this._shader=new bg.base.Shader(this.context),this._shader.addShaderSource(bg.base.ShaderType.VERTEX,t[bg.webgl1.EngineId].vertex),this._shader.addShaderSource(bg.base.ShaderType.FRAGMENT,t[bg.webgl1.EngineId].fragment),this._shader.link(),this._shader.status?this._shader.initVars(["inVertex"],["inModelMatrix","inViewMatrix","inProjectionMatrix","inColorId"]):(console.log(this._shader.compileError),console.log(this._shader.linkError))),this._shader},setupVars:function(){this.shader.setMatrix4("inModelMatrix",this.matrixState.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",new bg.Matrix4(this.matrixState.viewMatrixStack.matrixConst)),this.shader.setMatrix4("inProjectionMatrix",this.matrixState.projectionMatrixStack.matrixConst),this.shader.setVector4("inColorId",this.pickId)}},{},e)}(bg.base.Effect);bg.manipulation.ColorPickEffect=e;var n=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this),this._target=e},{get target(){return this._target},set target(t){this._target=t,this._result=null},get result(){return this._result},visit:function(t){var e=t.component("bg.manipulation.Selectable"),n=t.component("bg.manipulation.Gizmo");n&&!n.visible&&(n=null),this._result=this._result||e&&e.findId(this.target)||n&&n.findId(this.target)}},{},t)}(bg.scene.NodeVisitor);bg.manipulation.FindPickIdVisitor=n;var i=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get pipeline(){return this._pipeline||(this._pipeline=new bg.base.Pipeline(this.context),this._pipeline.effect=new e(this.context),this._renderSurface=new bg.base.TextureSurface(this.context),this._renderSurface.create(),this._pipeline.renderSurface=this._renderSurface,this._pipeline.clearColor=new bg.Color(0,0,0,0)),this._pipeline},get matrixState(){return this._matrixState||(this._matrixState=new bg.base.MatrixState),this._matrixState},get drawVisitor(){return this._drawVisitor||(this._drawVisitor=new bg.scene.DrawVisitor(this.pipeline,this.matrixState)),this._drawVisitor},pick:function(t,e,i){var r=bg.base.Pipeline.Current(),a=bg.base.MatrixState.Current();bg.base.Pipeline.SetCurrent(this.pipeline),bg.base.MatrixState.SetCurrent(this.matrixState),this.pipeline.viewport=e.viewport,this.pipeline.effect.matrixState=this.matrixState,this.pipeline.clearBuffers(bg.base.ClearBuffers.COLOR|bg.base.ClearBuffers.DEPTH),this.matrixState.projectionMatrixStack.set(e.projection),this.matrixState.viewMatrixStack.set(e.viewMatrix);var s=this.pipeline.opacityLayer;this.pipeline.opacityLayer=bg.base.OpacityLayer.SELECTION,t.accept(this.drawVisitor),this.pipeline.opacityLayer=bg.base.OpacityLayer.GIZMOS_SELECTION,this.pipeline.clearBuffers(bg.base.ClearBuffers.DEPTH),t.accept(this.drawVisitor),this.pipeline.opacityLayer=s;var o=this.pipeline.renderSurface.readBuffer(new bg.Viewport(i.x,i.y,1,1)),u={r:o[3],g:o[2],b:o[1],a:o[0]},h=new n(u);return t.accept(h),r&&bg.base.Pipeline.SetCurrent(r),a&&bg.base.MatrixState.SetCurrent(a),h.result}},{},t)}(bg.app.ContextObject);bg.manipulation.MousePicker=i}(),function(){var t=0,e=0,n=0,i=0;function r(){255==t?(t=0,255==e?(e=0,255==n?(n=0,255==i?(i=0,bg.log("WARNING: Maximum number of picker identifier reached.")):++i):++n):++e):++t}function a(){return r(),{r:t,g:e,b:e,a:i}}bg.manipulation.SelectableType={PLIST:1,GIZMO:2,GIZMO_ICON:3};var s=null;var o=["bg.scene.Camera","bg.scene.Light","bg.scene.Transform","bg.scene.TextRect"],u=function(t){function e(){$traceurRuntime.superConstructor(e).call(this),this._initialized=!1,this._selectablePlist=[]}return $traceurRuntime.createClass(e,{clone:function(){return new e},buildIdentifier:function(){this._initialized=!1,this._selectablePlist=[]},findId:function(t){var e=null;return this._selectablePlist.some(function(n){if(n.id.r==t.r&&n.id.g==t.g&&n.id.b==t.b&&n.id.a==t.a)return e=n,!0}),e},frame:function(t){var e=this;if(!this._initialized&&this.drawable)this.drawable.forEach(function(t,n){var i=a();e._selectablePlist.push({id:i,type:bg.manipulation.SelectableType.PLIST,plist:t,material:n,drawable:e.drawable,node:e.node})}),this._initialized=!0;else if(!this._initialized){var n=a();this._selectablePlist.push({id:n,type:bg.manipulation.SelectableType.GIZMO_ICON,plist:null,material:null,drawable:null,node:this.node}),this._initialized=!0}},display:function(t,e){var n=this;if(t.effect instanceof bg.manipulation.ColorPickEffect&&t.opacityLayer&bg.base.OpacityLayer.SELECTION){var i=o.some(function(t){return null!=n.node.component(t)});this._selectablePlist.forEach(function(r){var a=new bg.Color(r.id.a/255,r.id.b/255,r.id.g/255,r.id.r/255);if(r.plist&&r.plist.visible)t.effect.pickId=a,t.draw(r.plist);else if(!r.plist&&i){var o=.1*e.cameraDistanceScale;t.effect.pickId=a,e.modelMatrixStack.push(),e.modelMatrixStack.scale(o,o,o),t.draw(function(){return s||(s=bg.scene.PrimitiveFactory.SpherePolyList(this.node.context,.5)),s}.apply(n)),e.modelMatrixStack.pop()}})}}},{SetSelectableIcons:function(t){o=t},AddSelectableIcon:function(t){-1==o.indexOf(t)&&o.push(t)},RemoveSelectableIcon:function(t){var e=o.indexOf(t);e>=0&&o.splice(e,1)},SetSelectMode:function(t){t},GetIdentifier:function(){return a()}},t)}(bg.scene.Component);bg.scene.registerComponent(bg.manipulation,u,"bg.manipulation.Selectable")}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n);var i=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX),r=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);i.addParameter([t().inputs.buffers.vertex,t().inputs.buffers.tex0,{name:"fsTexCoord",dataType:"vec2",role:"out"}]),r.addParameter([t().inputs.material.texture,{name:"inTexSize",dataType:"vec2",role:"value"},{name:"inConvMatrix",dataType:"float",role:"value",vec:9},{name:"inBorderColor",dataType:"vec4",role:"value"},{name:"inBorderWidth",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&(i.setMainBody("\n gl_Position = vec4(inVertex,1.0);\n fsTexCoord = inTex0;\n "),r.addFunction(t().functions.utils.applyConvolution),r.setMainBody("\n vec4 selectionColor = applyConvolution(inTexture,fsTexCoord,inTexSize,inConvMatrix,inBorderWidth);\n if (selectionColor.r!=0.0 && selectionColor.g!=0.0 && selectionColor.b!=0.0) {\n gl_FragColor = inBorderColor;\n }\n else {\n discard;\n }\n ")),this.setupShaderSource([i,r],!1),this._highlightColor=bg.Color.White(),this._borderWidth=2},{get highlightColor(){return this._highlightColor},set highlightColor(t){this._highlightColor=t},get borderWidth(){return this._borderWidth},set borderWidth(t){this._borderWidth=t},setupVars:function(){var t=null;this._surface instanceof bg.base.Texture?t=this._surface:this._surface instanceof bg.base.RenderSurface&&(t=this._surface.getTexture(0)),t&&(this.shader.setTexture("inTexture",t,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTexSize",t.size));this.shader.setValueFloatPtr("inConvMatrix",[0,1,0,1,-4,1,0,1,0]),this.shader.setVector4("inBorderColor",this._highlightColor),this.shader.setValueFloat("inBorderWidth",this._borderWidth)}},{},e)}(bg.base.TextureEffect);bg.manipulation.BorderDetectionEffect=e;var n=null,i=null;var r=function(e){return $traceurRuntime.createClass(function e(r){$traceurRuntime.superConstructor(e).call(this,r);var a=[(n||((n=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter(t().inputs.buffers.vertex),n.addParameter(t().inputs.matrix.all),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n gl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n ")),n),(i||((i=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).addParameter([{name:"inColor",dataType:"vec4",role:"value"},{name:"inSelectMode",dataType:"int",role:"value"}]),"webgl1"==bg.Engine.Get().id&&i.setMainBody("\n if (inSelectMode==0) {\n discard;\n }\n else {\n gl_FragColor = inColor;\n }\n ")),i)];this.setupShaderSource(a)},{beginDraw:function(){bg.Math.seed=1},setupVars:function(){this._baseColor=new bg.Color(bg.Math.seededRandom(),bg.Math.seededRandom(),bg.Math.seededRandom(),1);var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst),this.shader.setVector4("inColor",this._baseColor),this.shader.setValueInt("inSelectMode",this.material.selectMode)}},{},e)}(bg.base.Effect);bg.manipulation.PlainColorEffect=r;var a=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._offscreenPipeline=function(){var t=new bg.base.Pipeline(this.context),e=new bg.base.TextureSurface(this.context);t.effect=new bg.manipulation.PlainColorEffect(this.context);var n=[{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}];return e.create(n),t.renderSurface=e,t}.apply(this),this._pipeline=new bg.base.Pipeline(this.context),this._pipeline.textureEffect=new bg.manipulation.BorderDetectionEffect(this.context),this._matrixState=new bg.base.MatrixState,this._drawVisitor=new bg.scene.DrawVisitor(this._offscreenPipeline,this._matrixState),this._drawVisitor.forceDraw=!1},{get highlightColor(){return this._pipeline.textureEffect.highlightColor},set highlightColor(t){this._pipeline.textureEffect.highlightColor=t},get borderWidth(){return this._pipeline.textureEffect.borderWidth},set borderWidth(t){this._pipeline.textureEffect.borderWidth=t},get drawInvisiblePolyList(){return this._drawVisitor.forceDraw},set drawInvisiblePolyList(t){this._drawVisitor.forceDraw=t},drawSelection:function(t,e){var n=bg.base.Pipeline.Current(),i=bg.base.MatrixState.Current();this._offscreenPipeline.viewport=e.viewport,this._pipeline.viewport=e.viewport,bg.base.Pipeline.SetCurrent(this._offscreenPipeline),bg.base.MatrixState.SetCurrent(this._matrixState),this._offscreenPipeline.clearBuffers(bg.base.ClearBuffers.COLOR|bg.base.ClearBuffers.DEPTH),this._matrixState.projectionMatrixStack.set(e.projection),this._matrixState.viewMatrixStack.set(e.viewMatrix),this._matrixState.modelMatrixStack.identity(),t.accept(this._drawVisitor);var r=this._offscreenPipeline.renderSurface.getTexture(0);bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.blend=!0,this._pipeline.blendMode=bg.base.BlendMode.ADD,this._pipeline.drawTexture(r),n&&bg.base.Pipeline.SetCurrent(n),i&&bg.base.MatrixState.SetCurrent(i)}},{},t)}(bg.app.ContextObject);bg.manipulation.SelectionHighlight=a}(),function(){var t={ROTATE:0,PAN:1,ZOOM:2};function e(){for(var t=this.minX,e=this.maxX,n=this.minY,i=this.maxY,r=this.minZ,a=this.maxZ,s=[t,n,r,e,n,r,e,n,r,e,i,r,e,i,r,t,i,r,t,i,r,t,n,r,t,n,a,e,n,a,e,n,a,e,i,a,e,i,a,t,i,a,t,i,a,t,n,a,t,n,r,t,n,a,e,n,r,e,n,a,e,i,r,e,i,a,t,i,r,t,i,a],o=[],u=0;u<s.length;u+=3)o.push(this._limitGizmoColor.r),o.push(this._limitGizmoColor.g),o.push(this._limitGizmoColor.b),o.push(this._limitGizmoColor.a);return this._plist?(this._plist.updateBuffer(bg.base.BufferType.VERTEX,s),this._plist.updateBuffer(bg.base.BufferType.COLOR,o)):this._plist=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(this.node.context,s,o),this._plist}var n=function(n){function i(){$traceurRuntime.superConstructor(i).call(this),this._rotateButtons={left:!0,middle:!1,right:!1},this._panButtons={left:!1,middle:!1,right:!0},this._zoomButtons={left:!1,middle:!0,right:!1},this._rotation=new bg.Vector2,this._distance=5,this._center=new bg.Vector3,this._rotationSpeed=.2,this._forward=0,this._left=0,this._wheelSpeed=1,this._minFocus=2,this._minPitch=.1,this._maxPitch=85,this._minDistance=.4,this._maxDistance=24,this._maxX=15,this._minX=-15,this._minY=.1,this._maxY=2,this._maxZ=15,this._minZ=-15,this._displacementSpeed=.1,this._enabled=!0,this._keys={},this._showLimitGizmo=!0,this._limitGizmoColor=bg.Color.Green(),this._viewWidth=50,this._lastTouch=[]}return $traceurRuntime.createClass(i,{clone:function(){var t=new i,e={};return this.serialize(e,[],""),t.deserialize(null,e,""),t},setRotateButtons:function(t,e,n){this._rotateButtons={left:t,middle:e,right:n}},setPanButtons:function(t,e,n){this._panButtons={left:t,middle:e,right:n}},setZoomButtons:function(t,e,n){this._zoomButtons={left:t,middle:e,right:n}},get rotation(){return this._rotation},set rotation(t){this._rotation=t},get distance(){return this._distance},set distance(t){this._distance=t},get center(){return this._center},set center(t){this._center=t},get whellSpeed(){this._wheelSpeed},set wheelSpeed(t){this._wheelSpeed=t},get viewWidth(){return this._viewWidth},get minCameraFocus(){return this._minFocus},set minCameraFocus(t){this._minFocus=t},get minPitch(){return this._minPitch},set minPitch(t){this._minPitch=t},get maxPitch(){return this._maxPitch},set maxPitch(t){this._maxPitch=t},get minDistance(){return this._minDistance},set minDistance(t){this._minDistance=t},get maxDistance(){return this._maxDistance},set maxDistance(t){this._maxDistance=t},get minX(){return this._minX},get maxX(){return this._maxX},get minY(){return this._minY},get maxY(){return this._maxY},get minZ(){return this._minZ},get maxZ(){return this._maxZ},set minX(t){this._minX=t},set maxX(t){this._maxX=t},set minY(t){this._minY=t},set maxY(t){this._maxY=t},set minZ(t){this._minZ=t},set maxZ(t){this._maxZ=t},get displacementSpeed(){return this._displacementSpeed},set displacementSpeed(t){this._displacementSpeed=t},get enabled(){return this._enabled},set enabled(t){this._enabled=t},get showLimitGizmo(){return this._showLimitGizmo},set showLimitGizmo(t){this._showLimitGizmo=t},get limitGizmoColor(){return this._limitGizmoColor},set limitGizmoColor(t){this._limitGizmoColor=t},displayGizmo:function(t,n){if(this._showLimitGizmo){var i=e.apply(this);n.modelMatrixStack.push(),n.modelMatrixStack.identity(),i&&t.draw(i),n.modelMatrixStack.pop()}},serialize:function(t,e,n){$traceurRuntime.superGet(this,i.prototype,"serialize").call(this,t,e,n),t.rotateButtons=this._rotateButtons,t.panButtons=this._panButtons,t.zoomButtons=this._zoomButtons,t.rotation=this._rotation.toArray(),t.distance=this._distance,t.center=this._center.toArray(),t.rotationSpeed=this._rotationSpeed,t.forward=this._forward,t.left=this._left,t.wheelSpeed=this._wheelSpeed,t.minFocus=this._minFocus,t.minPitch=this._minPitch,t.maxPitch=this._maxPitch,t.minDistance=this._minDistance,t.maxDistance=this._maxDistance,t.maxX=this._maxX,t.minX=this._minX,t.minY=this._minY,t.maxY=this._maxY,t.maxZ=this._maxZ,t.minZ=this._minZ,t.displacementSpeed=this._displacementSpeed,t.enabled=this._enabled},deserialize:function(t,e,n){this._rotateButtons=e.rotateButtons||this._rotateButtons,this._panButtons=e.panButtons||this._panButtons,this._zoomButtons=e.zoomButtons||this._zoomButtons,this._rotation=new bg.Vector2(e.rotation)||this._rotation,this._distance=void 0!==e.distance?e.distance:this._distance,this._center=new bg.Vector3(e.center)||this._center,this._rotationSpeed=void 0!==e.rotationSpeed?e.rotationSpeed:this._rotationSpeed,this._forward=void 0!==e.forward?e.forward:this._forward,this._left=void 0!==e.left?e.left:this._left,this._wheelSpeed=void 0!==e.wheelSpeed?e.wheelSpeed:this._wheelSpeed,this._minFocus=void 0!==e.minFocus?e.minFocus:this._minFocus,this._minPitch=void 0!==e.minPitch?e.minPitch:this._minPitch,this._maxPitch=void 0!==e.maxPitch?e.maxPitch:this._maxPitch,this._minDistance=void 0!==e.minDistance?e.minDistance:this._minDistance,this._maxDistance=void 0!==e.maxDistance?e.maxDistance:this._maxDistance,this._maxX=void 0!==e.maxX?e.maxX:this._maxX,this._minX=void 0!==e.minX?e.minX:this._minX,this._minY=void 0!==e.minY?e.minY:this._minY,this._maxY=void 0!==e.maxY?e.maxY:this._maxY,this._maxZ=void 0!==e.maxZ?e.maxZ:this._maxZ,this._minZ=void 0!==e.minZ?e.minZ:this._minZ,this._displacementSpeed=void 0!==e.displacementSpeed?e.displacementSpeed:this._displacementSpeed,this._enabled=void 0!==e.enabled?e.enabled:this._enabled},frame:function(t){var e=this.camera&&"object"==$traceurRuntime.typeof(this.camera.projectionStrategy)&&this.camera.projectionStrategy instanceof bg.scene.OrthographicProjectionStrategy?this.camera.projectionStrategy:null;if(this.transform&&this.enabled){var n=this.transform.matrix.forwardVector,i=this.transform.matrix.leftVector;n.scale(this._forward),i.scale(this._left),this._center.add(n).add(i);var r=this._rotation.x>this._minPitch?this._rotation.x:this._minPitch;if(r=r<this._maxPitch?r:this._maxPitch,this._rotation.x=r,this._distance=this._distance>this._minDistance?this._distance:this._minDistance,this._distance=this._distance<this._maxDistance?this._distance:this._maxDistance,this._mouseButtonPressed){var a=new bg.Vector3;this._keys[bg.app.SpecialKey.UP_ARROW]&&(a.add(this.transform.matrix.backwardVector),bg.app.MainLoop.singleton.windowController.postRedisplay()),this._keys[bg.app.SpecialKey.DOWN_ARROW]&&(a.add(this.transform.matrix.forwardVector),bg.app.MainLoop.singleton.windowController.postRedisplay()),this._keys[bg.app.SpecialKey.LEFT_ARROW]&&(a.add(this.transform.matrix.leftVector),bg.app.MainLoop.singleton.windowController.postRedisplay()),this._keys[bg.app.SpecialKey.RIGHT_ARROW]&&(a.add(this.transform.matrix.rightVector),bg.app.MainLoop.singleton.windowController.postRedisplay()),a.scale(this._displacementSpeed),this._center.add(a)}this._center.x<this._minX?this._center.x=this._minX:this._center.x>this._maxX&&(this._center.x=this._maxX),this._center.y<this._minY?this._center.y=this._minY:this._center.y>this._maxY&&(this._center.y=this._maxY),this._center.z<this._minZ?this._center.z=this._minZ:this._center.z>this._maxZ&&(this._center.z=this._maxZ),this.transform.matrix.identity().translate(this._center).rotate(bg.Math.degreesToRadians(this._rotation.y),0,1,0).rotate(bg.Math.degreesToRadians(r),-1,0,0),e?e.viewWidth=this._viewWidth:this.transform.matrix.translate(0,0,this._distance)}this.camera&&(this.camera.focus=this._distance>this._minFocus?this._distance:this._minFocus)},mouseDown:function(t){this.enabled&&(this._mouseButtonPressed=!0,this._lastPos=new bg.Vector2(t.x,t.y))},mouseUp:function(t){this._mouseButtonPressed=!1},mouseDrag:function(e){if(this.transform&&this._lastPos&&this.enabled){var n=new bg.Vector2(this._lastPos.y-e.y,this._lastPos.x-e.x);this._lastPos.set(e.x,e.y);var i=!!(this.camera&&"object"==$traceurRuntime.typeof(this.camera.projectionStrategy)&&this.camera.projectionStrategy instanceof bg.scene.OrthographicProjectionStrategy);switch(function(e){var n=bg.app.Mouse.LeftButton(),i=bg.app.Mouse.MiddleButton(),r=bg.app.Mouse.RightButton();switch(!0){case n==e._rotateButtons.left&&i==e._rotateButtons.middle&&r==e._rotateButtons.right:return t.ROTATE;case n==e._panButtons.left&&i==e._panButtons.middle&&r==e._panButtons.right:return t.PAN;case n==e._zoomButtons.left&&i==e._zoomButtons.middle&&r==e._zoomButtons.right:return t.ZOOM}}(this)){case t.ROTATE:n.x=-1*n.x,this._rotation.add(n.scale(.5));break;case t.PAN:var r=this.transform.matrix.upVector,a=this.transform.matrix.leftVector;i?(r.scale(-5e-4*n.x*this._viewWidth),a.scale(-5e-4*n.y*this._viewWidth)):(r.scale(-.001*n.x*this._distance),a.scale(-.001*n.y*this._distance)),this._center.add(r).add(a);break;case t.ZOOM:this._distance+=.01*n.x*this._distance,this._viewWidth+=.01*n.x*this._viewWidth,this._viewWidth<.5&&(this._viewWidth=.5)}}},mouseWheel:function(t){if(this.enabled){var e=this._distance>.01?this._distance:.01,n=this._viewWidth>1?this._viewWidth:1;this._distance+=.001*t.delta*e*this._wheelSpeed,this._viewWidth+=1e-4*t.delta*n*this._wheelSpeed,this._viewWidth<.5&&(this._viewWidth=.5)}},touchStart:function(t){this.enabled&&(this._lastTouch=t.touches)},touchMove:function(t){if(this._lastTouch.length==t.touches.length&&this.transform&&this.enabled)if(1==this._lastTouch.length){var e=this._lastTouch[0],n=t.touches[0],i=new bg.Vector2(-1*(e.y-n.y),e.x-n.x);this._rotation.add(i.scale(.5))}else if(2==this._lastTouch.length){var r=this._lastTouch[0],a=this._lastTouch[1],s=null,o=null;t.touches.forEach(function(t){t.identifier==r.identifier?s=t:t.identifier==a.identifier&&(o=t)});var u=Math.round(new bg.Vector2(r.x,r.y).sub(new bg.Vector3(a.x,a.y)).magnitude()),h=Math.round(new bg.Vector2(s.x,s.y).sub(new bg.Vector3(o.x,o.y)).magnitude()),l=new bg.Vector2(r.y-s.y,a.x-o.x),c=this.transform.matrix.upVector,f=this.transform.matrix.leftVector;c.scale(-.001*l.x*this._distance),f.scale(-.001*l.y*this._distance),this._center.add(c).add(f),this._distance+=.005*(u-h)*this._distance}this._lastTouch=t.touches},keyDown:function(t){this.enabled&&(this._keys[t.key]=!0,bg.app.MainLoop.singleton.windowController.postRedisplay())},keyUp:function(t){this.enabled&&(this._keys[t.key]=!1)}},{DisableAll:function(t){var e=t.component("bg.manipulation.OrbitCameraController");e&&(e.enabled=!1),t.children.forEach(function(t){return i.DisableAll(t)})},SetUniqueEnabled:function(t,e){i.DisableAll(e),t.enabled=!0}},n)}(bg.scene.Component),i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{},{},t)}(bg.scene.Component),r=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{},{},t)}(bg.scene.Component);bg.scene.registerComponent(bg.manipulation,n,"bg.manipulation.OrbitCameraController"),bg.scene.registerComponent(bg.manipulation,i,"bg.manipulation.FPSCameraController"),bg.scene.registerComponent(bg.manipulation,r,"bg.manipulation.TargetCameraController")}(),bg.tools={},function(){var t=function(){return $traceurRuntime.createClass(function(t,e){this._min=new bg.Vector3(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._max=new bg.Vector3(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),this._center=null,this._size=null,this._halfSize=null,this._vertexArray=[],e=e||bg.Matrix4.Identity(),t instanceof bg.scene.Drawable?this.addDrawable(t,e):t instanceof bg.base.PolyList&&this.addPolyList(t,e)},{clear:function(){this._min=bg.Vector3(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._max=bg.Vector3(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),this._center=this._size=this._halfSize=null},get min(){return this._min},get max(){return this._max},get center(){if(!this._center){this.halfSize;this._center=bg.Vector3.Add(this.halfSize,this._min)}return this._center},get size(){return this._size||(this._size=bg.Vector3.Sub(this.max,this.min)),this._size},get halfSize(){return this._halfSize||(this._halfSize=new bg.Vector3(this.size),this._halfSize.scale(.5)),this._halfSize},addPolyList:function(t,e){this._center=this._size=this._halfSize=null;for(var n=0;n<t.vertex.length;n+=3){var i=e.multVector(new bg.Vector3(t.vertex[n],t.vertex[n+1],t.vertex[n+2]));i.x<this._min.x&&(this._min.x=i.x),i.y<this._min.y&&(this._min.y=i.y),i.z<this._min.z&&(this._min.z=i.z),i.x>this._max.x&&(this._max.x=i.x),i.z>this._max.z&&(this._max.z=i.z),i.y>this._max.y&&(this._max.y=i.y)}},addDrawable:function(t,e){var n=this;t.forEach(function(t,i,r){if(t.visible){var a=new bg.Matrix4(e);r&&a.mult(r),n.addPolyList(t,a)}})}},{})}();bg.tools.BoundingBox=t}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e,n,i,r){$traceurRuntime.superConstructor(t).call(this,e),this._canvas=function(t,e){var n=document.createElement("canvas");return n.width=t,n.height=e,n.style.width=t+"px",n.style.height=e+"px",n}(n,i),this._drawCallback=r,this._drawCallback(this._canvas.getContext("2d",{preserverDrawingBuffer:!0}),this._canvas.width,this._canvas.height),this._texture=bg.base.Texture.FromCanvas(e,this._canvas)},{get width(){return this._canvas.width},get height(){return this._canvas.height},get canvas(){return this._canvas},get texture(){return this._texture},resize:function(t,e){!function(t,e,n){t.width=e,t.height=n,t.style.width=e+"px",t.style.height=n+"px"}(this._canvas,t,e),this.update()},update:function(){this._drawCallback(this._canvas.getContext("2d",{preserverDrawingBuffer:!0}),this.width,this.height),bg.base.Texture.UpdateCanvasImage(this._texture,this._canvas)}},{},t)}(bg.app.ContextObject);bg.tools.CanvasTexture=t}(),function(){function t(t,e,n,i,r){var a=r/2;i[e.uv0.x]=t.left+r,i[e.uv0.y]=t.top+a,i[e.uv1.x]=t.right-a,i[e.uv1.y]=t.top+a,i[e.uv2.x]=t.right-a,i[e.uv2.y]=t.bottom-r,n&&(i[n.uv0.x]=t.right-r,i[n.uv0.y]=t.bottom-a,i[n.uv1.x]=t.left+a,i[n.uv1.y]=t.bottom-a,i[n.uv2.x]=t.left+a,i[n.uv2.y]=t.top+r)}function e(e,n){var i=function(t){var e=0;t.forEach(function(t){var n=t.index.length/3;n%2!=0&&n++,e+=n});for(var n=e/2,i=n,r=Math.round(Math.sqrt(n));i%r;)r--;return{rows:i=r,cols:r=n/r,triangleCount:e,quadSize:{width:1/r,height:1/i},currentRow:0,currentCol:0,nextRect:function(){var t={left:this.quadSize.width*this.currentCol,top:this.quadSize.height*this.currentRow,right:this.quadSize.width*this.currentCol+this.quadSize.width,bottom:this.quadSize.height*this.currentRow+this.quadSize.height};return this.currentCol<this.cols?this.currentCol++:(this.currentCol=0,this.currentRow++),this.currentRow>=this.rows&&(this.currentRow=0),t}}}(e);i.currentRow=0,i.currentCol=0,e.forEach(function(e){if(!(e.texCoord1.length>0)){for(var r=[],a=[],s=0;s<e.index.length;s+=3){var o=e.index[s],u=e.index[s+1],h=e.index[s+2];r.push({indices:[o,u,h],uv0:{x:2*o,y:2*o+1},uv1:{x:2*u,y:2*u+1},uv2:{x:2*h,y:2*h+1}})}for(var l=0;l<r.length;l+=2){var c=r[l],f=l+1<r.length?r[l+1]:null;t(i.nextRect(),c,f,a,n)}e.texCoord1=a,e.build()}})}bg.tools=bg.tools||{},bg.tools.UVMap={atlas:function(n){var i=void 0!==arguments[1]?arguments[1]:0,r=void 0!==arguments[2]?arguments[2]:0;return n instanceof bg.scene.Drawable?e(n,i):function(e,n){for(var i=void 0!==arguments[2]?arguments[2]:0,r=[],a=[],s=0;s<n.length;s+=3){var o=n[s],u=n[s+1],h=n[s+2];r.push({indices:[o,u,h],uv0:{x:2*o,y:2*o+1},uv1:{x:2*u,y:2*u+1},uv2:{x:2*h,y:2*h+1}})}for(var l=r.length/2+r.length%2,c=l,f=Math.round(Math.sqrt(l));c%f;)f--;c=f;for(var v=0,g=1/(f=l/f),m=1/c,d=0;d<c;++d)for(var p=0;p<f;++p)t({left:g*p,top:m*d,right:g*p+g,bottom:m*d+m},r[v],v+1<r.length?r[v+1]:null,a,i),v+=2;return a}(n,i,r)}}}(),function(){bg.tools=bg.tools||{};var t=function(){return $traceurRuntime.createClass(function(){},{mergeMaps:function(t,e,n,i,r){throw new Error("TextureMergerImpl.mergeMaps(): not implemented")},destroy:function(t){throw new Error("TextureMergerImpl.destroy(): not implemented")}},{})}();bg.tools.TextureMergerImpl=t;var e=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._mergerImpl=null},{mergeMaps:function(t,e,n,i){return this._mergerImpl=this._mergerImpl||bg.Engine.Get().createTextureMergerInstance(),t=t&&t.map?t:{map:bg.base.TextureCache.BlackTexture(this.context),channel:0},e=e&&e.map?e:{map:bg.base.TextureCache.BlackTexture(this.context),channel:0},n=n&&n.map?n:{map:bg.base.TextureCache.BlackTexture(this.context),channel:0},i=i&&i.map?i:{map:bg.base.TextureCache.BlackTexture(this.context),channel:0},this._mergerImpl.mergeMaps(this.context,t,e,n,i)},destroy:function(){this._mergerImpl.destroy(this.context)}},{},t)}(bg.app.ContextObject);bg.tools.TextureMerger=e}(),bg.render={},function(){var t=function(t){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:bg.base.OpacityLayer.ALL;$traceurRuntime.superConstructor(t).call(this,e),this._pipeline=new bg.base.Pipeline(e),this._pipeline.opacityLayer=n,this._matrixState=bg.base.MatrixState.Current(),this._drawVisitor=new bg.scene.DrawVisitor(this._pipeline,this._matrixState),this._settings={}},{get pipeline(){return this._pipeline},get opacityLayer(){return this._pipeline.opacityLayer},get drawVisitor(){return this._drawVisitor},get matrixState(){return this._matrixState},set settings(t){this._settings=t},get settings(){return this._settings},draw:function(t,e){}},{},t)}(bg.app.ContextObject);bg.render.RenderLayer=t}(),function(){bg.render.RenderPath={FORWARD:1,DEFERRED:2,PBR:3,PBR_DEFERRED:4},bg.render.RaytracerQuality={low:{maxSamples:20,rayIncrement:.05},mid:{maxSamples:50,rayIncrement:.025},high:{maxSamples:100,rayIncrement:.0125},extreme:{maxSamples:200,rayIncrement:.0062}},bg.render.ShadowType={HARD:bg.base.ShadowType.HARD,SOFT:bg.base.ShadowType.SOFT},bg.render.ShadowMapQuality={low:512,mid:1024,high:2048,extreme:4096};var t={debug:{enabled:!1},ambientOcclusion:{enabled:!0,sampleRadius:.4,kernelSize:16,blur:2,maxDistance:300,scale:1},raytracer:{enabled:!0,quality:bg.render.RaytracerQuality.mid,scale:.5},antialiasing:{enabled:!1},shadows:{quality:bg.render.ShadowMapQuality.mid,type:bg.render.ShadowType.SOFT},colorCorrection:{gamma:2,saturation:1,brightness:1,contrast:1}},e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n),this._frameVisitor=new bg.scene.FrameVisitor,this._settings=t,this._clearColor=bg.Color.Black()},{get isSupported(){return!1},create:function(){console.log("ERROR: Error creating renderer. The renderer class must implemente the create() method.")},get clearColor(){return this._clearColor},set clearColor(t){this._clearColor=t},frame:function(t,e){this._frameVisitor.delta=e,t.accept(this._frameVisitor)},display:function(t,e){this.draw(t,e)},get settings(){return this._settings}},{Create:function(t,e){var n=null;if(e==bg.render.RenderPath.DEFERRED&&(n=new bg.render.DeferredRenderer(t)),(e==bg.render.RenderPath.FORWARD||n&&!n.isSupported)&&(n=new bg.render.ForwardRenderer(t)),e==bg.render.RenderPath.PBR&&(n=new bg.render.PBRForwardRenderer(t)),e==bg.render.RenderPath.PBR_DEFERRED&&(bg.log("WARNING: PBR deferred renderer is not implemented. Using PBR forward renderer"),n=new bg.render.PBRForwardRenderer(t)),!n.isSupported)throw new Error("No suitable renderer found.");return n.create(),n}},e)}(bg.app.ContextObject);bg.render.Renderer=e}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:1;$traceurRuntime.superConstructor(t).call(this,e),this._size=n,this._shader=null,this._cube=null,this._pipeline=new bg.base.Pipeline(this.context)},{setShader:function(t,e){this._shader=t,this._setInputVarsCallback=e},get shader(){return this._shader||function(){var t=null;if((t=new bg.base.Shader(this.context)).addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n\n varying vec3 fsPosition;\n\n uniform mat4 inProjection;\n uniform mat4 inView;\n\n void main() {\n fsPosition = inPosition;\n gl_Position = inProjection * inView * vec4(inPosition,1.0);\n }\n "),t.addShaderSource(bg.base.ShaderType.FRAGMENT,"\n precision highp float;\n varying vec3 fsPosition;\n\n void main() {\n gl_FragColor = vec4(1.0,0.0,0.0,1.0);\n }\n "),status=t.link(),!t.status)throw new Error("Error generating default equirectangular cube shader");t.initVars(["inPosition"],["inProjection","inView"]),this.setShader(t,function(t,e,n){t.setMatrix4("inProjection",e),t.setMatrix4("inView",n)})}.apply(this),this._shader},get cube(){return this._cube||(this._cube=function(t){var e=new bg.base.PolyList(this.context),n=t/2;return e.vertex=[-n,-n,-n,-n,-n,n,-n,n,-n,-n,n,n,n,-n,-n,n,-n,n,n,n,-n,n,n,n],e.index=[1,5,7,7,3,1,0,2,6,6,4,0,0,1,3,3,2,0,5,4,6,6,7,5,3,7,6,6,2,3,5,1,0,0,4,5],e.build(),e}.apply(this,[this._size])),this._cube},get projectionMatrix(){return this._projection||(this._projection=bg.Matrix4.Perspective(60,1,.1,100)),this._projection},set projectionMatrix(t){this._projection=t},get viewMatrix(){return this._viewMatrix||(this._viewMatrix=bg.Matrix4.Identity()),this._viewMatrix},set viewMatrix(t){this._viewMatrix=t},get pipeline(){return this._pipeline},create:function(){},destroy:function(){this.shader.destroy(),this.cube.destroy(),this._shader=null,this._cube=null},render:function(){var t=void 0!==arguments[0]&&arguments[0],e=bg.base.Pipeline.Current();t||(bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.clearBuffers()),this.shader.setActive(),this.shader.setInputBuffer("position",this.cube.vertexBuffer,3),this._setInputVarsCallback(this.shader,this.projectionMatrix,this.viewMatrix),this.cube.draw(),this.shader.disableInputBuffer("position"),this.shader.clearActive(),t||bg.base.Pipeline.SetCurrent(e)}},{},t)}(bg.app.ContextObject);bg.render.CubeRenderer=t;var e=function(t){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:1;$traceurRuntime.superConstructor(t).call(this,e,n),this._texture=null},{get texture(){return this._texture},set texture(t){this._texture=t},create:function(){var t=this;this.pipeline.buffersToClear=0,this.pipeline.cullFace=!1;var e=this.context,n=new bg.base.Shader(e);if(n.addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n\n varying vec3 fsPosition;\n\n uniform mat4 inProjection;\n uniform mat4 inView;\n\n void main() {\n fsPosition = inPosition;\n gl_Position = inProjection * inView * vec4(inPosition,1.0);\n }\n "),n.addShaderSource(bg.base.ShaderType.FRAGMENT,"\n precision highp float;\n varying vec3 fsPosition;\n \n uniform sampler2D inEquirectangularMap;\n\n const vec2 invAtan = vec2(0.1591,0.3183);\n vec2 sampleSphericalMap(vec3 v) {\n vec2 uv = vec2(atan(v.z,v.x),asin(v.y));\n uv *= invAtan;\n uv += 0.5;\n return uv;\n }\n\n void main() {\n vec2 uv = sampleSphericalMap(normalize(fsPosition));\n vec3 color = texture2D(inEquirectangularMap,uv).rgb;\n gl_FragColor = vec4(color,1.0);\n }\n "),!n.link())throw new Error("Error generating equirectangular cube renderer: shader compile error");n.initVars(["inPosition"],["inProjection","inView","inEquirectangularMap"]),this.setShader(n,function(e,n,i){e.setMatrix4("inProjection",n),e.setMatrix4("inView",i),t.texture&&e.setTexture("inEquirectangularMap",t.texture,bg.base.TextureUnit.TEXTURE_0)})}},{},t)}(t);bg.render.EquirectangularCubeRenderer=e,bg.render.CubeMapShader={IRRADIANCE_MAP:0,SPECULAR_MAP:1};var n=function(t){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:1;$traceurRuntime.superConstructor(t).call(this,e,n),this._texture=null},{get texture(){return this._texture},set texture(t){this._texture=t},set roughness(t){this._roughness=t},get roughness(){return this._roughness||0},create:function(){var t=void 0!==arguments[0]?arguments[0]:bg.render.CubeMapShader.IRRADIANCE_MAP;switch(this.pipeline.buffersToClear=0,this.pipeline.cullFace=!1,t){case bg.render.CubeMapShader.IRRADIANCE_MAP:(function(){var t=this,e=this.context,n=new bg.base.Shader(e),i="\n precision highp float;\n varying vec3 fsPosition;\n \n uniform samplerCube inCubeMap;\n\n void main() {\n vec3 normal = normalize(fsPosition);\n vec3 irradiance = vec3(0.0);\n\n vec3 up = vec3(0.0, 1.0, 0.0);\n vec3 right = cross(up, normal);\n up = cross(normal, right);\n \n float nrSamples = 0.0; \n for(float phi = 0.0; phi < "+2*Math.PI+"; phi += 0.07)\n {\n for(float theta = 0.0; theta < "+.5*Math.PI+"; theta += 0.07)\n {\n // spherical to cartesian (in tangent space)\n vec3 tangentSample = vec3(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta));\n // tangent space to world\n vec3 sampleVec = tangentSample.x * right + tangentSample.y * up + tangentSample.z * normal; \n \n irradiance += textureCube(inCubeMap, sampleVec).rgb * cos(theta) * sin(theta);\n nrSamples++;\n }\n }\n irradiance = "+Math.PI+" * irradiance * (1.0 / float(nrSamples));\n\n gl_FragColor = vec4(irradiance,1.0);\n }\n ";if(n.addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n\n varying vec3 fsPosition;\n\n uniform mat4 inProjection;\n uniform mat4 inView;\n\n void main() {\n fsPosition = inPosition;\n gl_Position = inProjection * inView * vec4(inPosition,1.0);\n }\n "),n.addShaderSource(bg.base.ShaderType.FRAGMENT,i),!n.link())throw new Error("Error generating irradiance map cube renderer: shader compile error");n.initVars(["inPosition"],["inProjection","inView","inCubeMap"]),this.setShader(n,function(e,n,i){e.setMatrix4("inProjection",n),e.setMatrix4("inView",i),t.texture&&e.setTexture("inCubeMap",t.texture,bg.base.TextureUnit.TEXTURE_0)})}).apply(this);break;case bg.render.CubeMapShader.SPECULAR_MAP:(function(){var t=this,e=this.context,n=new bg.base.Shader(e),i="\n precision highp float;\n varying vec3 fsPosition;\n \n uniform samplerCube inCubeMap;\n uniform float inRoughness;\n\n float vanDerCorpus(int n, int base) {\n float invBase = 1.0 / float(base);\n float denom = 1.0;\n float result = 0.0;\n\n for(int i = 0; i < 16; ++i)\n {\n if(n > 0)\n {\n denom = mod(float(n), 2.0);\n result += denom * invBase;\n invBase = invBase / 2.0;\n n = int(float(n) / 2.0);\n }\n }\n\n return result;\n }\n\n vec2 hammersleyNoBitOps(int i, int N) {\n return vec2(float(i)/float(N), vanDerCorpus(i, 2));\n }\n\n vec3 importanceSampleGGX(vec2 Xi, vec3 N, float roughness) {\n float a = roughness*roughness;\n \n float phi = 2.0 * "+Math.PI+" * Xi.x;\n float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a*a - 1.0) * Xi.y));\n float sinTheta = sqrt(1.0 - cosTheta*cosTheta);\n \n // from spherical coordinates to cartesian coordinates\n vec3 H;\n H.x = sin(phi) * sinTheta;\n H.y = cos(phi) * sinTheta;\n H.z = cosTheta;\n \n // from tangent-space vector to world-space sample vector\n vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\n vec3 tangent = normalize(cross(up, N));\n vec3 bitangent = cross(N, tangent);\n \n vec3 sampleVec = tangent * H.x + bitangent * H.y + N * H.z;\n return normalize(sampleVec);\n } \n\n void main() {\n vec3 N = normalize(fsPosition); \n vec3 R = N;\n vec3 V = R;\n\n float totalWeight = 0.0; \n vec3 prefilteredColor = vec3(0.0); \n for(int i = 0; i < 128; ++i)\n {\n vec2 Xi = hammersleyNoBitOps(i, 128);\n vec3 H = importanceSampleGGX(Xi, N, inRoughness);\n vec3 L = normalize(2.0 * dot(V, H) * H - V);\n\n float NdotL = max(dot(N, L), 0.0);\n if(NdotL > 0.0)\n {\n prefilteredColor += textureCube(inCubeMap, L).rgb * NdotL;\n totalWeight += NdotL;\n }\n }\n prefilteredColor = prefilteredColor / totalWeight;\n\n gl_FragColor = vec4(prefilteredColor, 1.0);\n }\n ";if(n.addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n\n varying vec3 fsPosition;\n\n uniform mat4 inProjection;\n uniform mat4 inView;\n\n void main() {\n fsPosition = inPosition;\n gl_Position = inProjection * inView * vec4(inPosition,1.0);\n }\n "),n.addShaderSource(bg.base.ShaderType.FRAGMENT,i),!n.link())throw new Error("Error generating specular map cube renderer: shader compile error");n.initVars(["inPosition"],["inProjection","inView","inCubeMap","inRoughness"]),this.setShader(n,function(e,n,i){e.setMatrix4("inProjection",n),e.setMatrix4("inView",i),e.setValueFloat("inRoughness",t.roughness),t.texture&&e.setTexture("inCubeMap",t.texture,bg.base.TextureUnit.TEXTURE_0)})}).apply(this)}}},{},t)}(t);bg.render.CubeMapRenderer=n}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._ssrtScale=.5,this._frameScale=1},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter([{name:"inLighting",dataType:"sampler2D",role:"value"},{name:"inDiffuse",dataType:"sampler2D",role:"value"},{name:"inPositionMap",dataType:"sampler2D",role:"value"},{name:"inSSAO",dataType:"sampler2D",role:"value"},{name:"inReflection",dataType:"sampler2D",role:"value"},{name:"inSpecularMap",dataType:"sampler2D",role:"value"},{name:"inMaterial",dataType:"sampler2D",role:"value"},{name:"inOpaqueDepthMap",dataType:"sampler2D",role:"value"},{name:"inShininessColor",dataType:"sampler2D",role:"value"},{name:"inViewSize",dataType:"vec2",role:"value"},{name:"inSSAOBlur",dataType:"int",role:"value"},{name:"inSSRTScale",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&(this._fragmentShaderSource.addFunction(t().functions.blur.textureDownsample),this._fragmentShaderSource.addFunction(t().functions.blur.blur),this._fragmentShaderSource.addFunction(t().functions.blur.glowBlur),this._fragmentShaderSource.setMainBody("\n\t\t\t\t\tvec4 lighting = clamp(texture2D(inLighting,fsTexCoord),vec4(0.0),vec4(1.0));\n\t\t\t\t\tvec4 diffuse = texture2D(inDiffuse,fsTexCoord);\n\t\t\t\t\tvec4 pos = texture2D(inPositionMap,fsTexCoord);\n\t\t\t\t\tvec4 shin = texture2D(inShininessColor,fsTexCoord);\n\t\t\t\t\tvec4 ssao = blur(inSSAO,fsTexCoord,inSSAOBlur * 20,inViewSize);\n\t\t\t\t\tvec4 material = texture2D(inMaterial,fsTexCoord);\n\n\t\t\t\t\tvec4 specular = texture2D(inSpecularMap,fsTexCoord);\t// The roughness parameter is stored on A component, inside specular map\n\t\t\t\t\t\n\t\t\t\t\tvec4 opaqueDepth = texture2D(inOpaqueDepthMap,fsTexCoord);\n\t\t\t\t\tif (pos.z<opaqueDepth.z && opaqueDepth.w<1.0) {\n\t\t\t\t\t\tdiscard;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfloat roughness = specular.a;\n\t\t\t\t\t\tfloat ssrtScale = inSSRTScale;\n\t\t\t\t\t\troughness *= 250.0 * ssrtScale;\n\t\t\t\t\t\tvec4 reflect = blur(inReflection,fsTexCoord,int(roughness),inViewSize * ssrtScale);\n\n\t\t\t\t\t\tfloat reflectionAmount = material.b;\n\t\t\t\t\t\tvec3 finalColor = lighting.rgb * (1.0 - reflectionAmount);\n\t\t\t\t\t\tfinalColor += reflect.rgb * reflectionAmount * diffuse.rgb + shin.rgb;\n\t\t\t\t\t\tfinalColor *= ssao.rgb;\n\t\t\t\t\t\tgl_FragColor = vec4(finalColor,diffuse.a);\n\t\t\t\t\t}"))),this._fragmentShaderSource},setupVars:function(){this.shader.setVector2("inViewSize",new bg.Vector2(this.viewport.width,this.viewport.height)),this.shader.setTexture("inLighting",this._surface.lightingMap,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inDiffuse",this._surface.diffuseMap,bg.base.TextureUnit.TEXTURE_1),this.shader.setTexture("inPositionMap",this._surface.positionMap,bg.base.TextureUnit.TEXTURE_2),this.shader.setTexture("inSSAO",this._surface.ssaoMap,bg.base.TextureUnit.TEXTURE_3),this.shader.setTexture("inReflection",this._surface.reflectionMap,bg.base.TextureUnit.TEXTURE_4),this.shader.setTexture("inMaterial",this._surface.materialMap,bg.base.TextureUnit.TEXTURE_5),this.shader.setTexture("inSpecularMap",this._surface.specularMap,bg.base.TextureUnit.TEXTURE_6),this.shader.setTexture("inOpaqueDepthMap",this._surface.opaqueDepthMap,bg.base.TextureUnit.TEXTURE_7),this.shader.setTexture("inShininessColor",this._surface.shininess,bg.base.TextureUnit.TEXTURE_8),this.shader.setValueInt("inSSAOBlur",this.ssaoBlur),this.shader.setValueFloat("inSSRTScale",this.ssrtScale*this.frameScale)},set viewport(t){this._viewport=t},get viewport(){return this._viewport},set clearColor(t){this._clearColor=t},get clearColor(){return this._clearColor},set ssaoBlur(t){this._ssaoBlur=t},get ssaoBlur(){return this._ssaoBlur},set ssrtScale(t){this._ssrtScale=t},get ssrtScale(){return this._ssrtScale},set frameScale(t){this._frameScale=t},get frameScale(){return this._frameScale},get colorCorrection(){return this._colorCorrection||(this._colorCorrection={hue:1,saturation:1,lightness:1,brightness:.5,contrast:.5}),this._colorCorrection}},{},e)}(bg.base.TextureEffect);bg.render.DeferredMixEffect=e}(),function(){bg.render.SurfaceType={UNDEFINED:0,OPAQUE:1,TRANSPARENT:2};var t=.5,e=1,n=function(n){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._type=bg.render.SurfaceType.UNDEFINED,this._gbufferUByteSurface=null,this._gbufferFloatSurface=null,this._lightingSurface=null,this._shadowSurface=null,this._ssaoSurface=null,this._mixSurface=null,this._ssrtSurface=null,this._opaqueSurfaces=null},{createOpaqueSurfaces:function(){this._type=bg.render.SurfaceType.OPAQUE,this.createCommon()},createTransparentSurfaces:function(t){this._type=bg.render.SurfaceType.TRANSPARENT,this._opaqueSurfaces=t,this.createCommon()},resize:function(n){var i=new bg.Vector2(n.width,n.height);this._gbufferUByteSurface.size=i,this._gbufferFloatSurface.size=i,this._lightingSurface.size=i,this._shadowSurface.size=i,this._ssaoSurface.size=new bg.Vector2(i.x*e,i.y*e),this._ssrtSurface.size=new bg.Vector2(i.x*t,i.y*t),this._mixSurface.size=i},get type(){return this._type},get gbufferUByteSurface(){return this._gbufferUByteSurface},get gbufferFloatSurface(){return this._gbufferFloatSurface},get lightingSurface(){return this._lightingSurface},get shadowSurface(){return this._shadowSurface},get ssaoSurface(){return this._ssaoSurface},get ssrtSurface(){return this._ssrtSurface},get mixSurface(){return this._mixSurface},get diffuse(){return this._gbufferUByteSurface.getTexture(0)},get specular(){return this._gbufferUByteSurface.getTexture(1)},get normal(){return this._gbufferUByteSurface.getTexture(2)},get material(){return this._gbufferUByteSurface.getTexture(3)},get position(){return this._gbufferFloatSurface.getTexture(0)},get lighting(){return this._lightingSurface.getTexture()},get shadow(){return this._shadowSurface.getTexture()},get ambientOcclusion(){return this._ssaoSurface.getTexture()},get reflection(){return this._ssrtSurface.getTexture()},get mix(){return this._mixSurface.getTexture()},get reflectionColor(){return this._type==bg.render.SurfaceType.OPAQUE?this.lighting:this._opaqueSurfaces.lighting},get reflectionDepth(){return this._type==bg.render.SurfaceType.OPAQUE?this.position:this._opaqueSurfaces.position},get mixDepthMap(){return this._type==bg.render.SurfaceType.OPAQUE?this.position:this._opaqueSurfaces.position},get shininess(){return this._lightingSurface.getTexture(1)},get bloom(){return this._lightingSurface.getTexture(2)},createCommon:function(){var t=this.context;this._gbufferUByteSurface=new bg.base.TextureSurface(t),this._gbufferUByteSurface.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._gbufferUByteSurface.resizeOnViewportChanged=!1,this._gbufferFloatSurface=new bg.base.TextureSurface(t),this._gbufferFloatSurface.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._gbufferFloatSurface.resizeOnViewportChanged=!1,this._lightingSurface=new bg.base.TextureSurface(t),this._lightingSurface.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._lightingSurface.resizeOnViewportChanged=!1,this._shadowSurface=new bg.base.TextureSurface(t),this._shadowSurface.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._shadowSurface.resizeOnViewportChanged=!1,this._ssaoSurface=new bg.base.TextureSurface(t),this._ssaoSurface.create(),this._ssaoSurface.resizeOnViewportChanged=!1,this._ssrtSurface=new bg.base.TextureSurface(t),this._ssrtSurface.create(),this._ssrtSurface.resizeOnViewportChanged=!1,this._mixSurface=new bg.base.TextureSurface(t),this._mixSurface.create(),this._mixSurface.resizeOnViewportChanged=!1}},{},n)}(bg.app.ContextObject);function i(t,e,n,i){var r=new bg.base.Pipeline(t);return r.renderSurface=n,void 0!==i?(r.opacityLayer=i,r.effect=e):r.textureEffect=e,r}function r(t){var e=t.context,n=t._surfaces,r=t._opacityLayer;t._gbufferUbyte=i(e,new bg.render.GBufferEffect(e),n.gbufferUByteSurface,r),t._gbufferFloat=i(e,new bg.render.PositionGBufferEffect(e),n.gbufferFloatSurface,r),t._shadow=i(e,new bg.render.ShadowEffect(e),n.shadowSurface,bg.base.OpacityLayer.ALL),t._lighting=i(e,new bg.render.LightingEffect(e),n.lightingSurface),t._ssao=i(e,new bg.render.SSAOEffect(e),n.ssaoSurface),t._ssao.clearColor=bg.Color.White(),t._ssrt=i(e,new bg.render.SSRTEffect(e),n.ssrtSurface);var a=t.matrixState;t.ubyteVisitor=new bg.scene.DrawVisitor(t._gbufferUbyte,a),t.floatVisitor=new bg.scene.DrawVisitor(t._gbufferFloat,a),t.shadowVisitor=new bg.scene.DrawVisitor(t._shadow,a),t._mix=i(e,new bg.render.DeferredMixEffect(e),n.mixSurface)}bg.render.DeferredRenderSurfaces=n;var a=function(n){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{createOpaque:function(){this._opacityLayer=bg.base.OpacityLayer.OPAQUE,this._surfaces=new bg.render.DeferredRenderSurfaces(this.context),this._surfaces.createOpaqueSurfaces(),r(this)},createTransparent:function(t){this._opacityLayer=bg.base.OpacityLayer.TRANSPARENT,this._surfaces=new bg.render.DeferredRenderSurfaces(this.context),this._surfaces.createTransparentSurfaces(t),r(this),this._gbufferUbyte.blend=!0,this._gbufferUbyte.setBlendMode=bg.base.BlendMode.NORMAL,this._gbufferUbyte.clearColor=bg.Color.Transparent(),this._lighting.clearColor=bg.Color.Black(),this.pipeline.clearColor=bg.Color.Transparent()},set shadowMap(t){this._shadowMap=t},get shadowMap(){return this._shadowMap},get pipeline(){return this._mix},get texture(){return this.maps.mix},draw:function(n,i,r){e=this.settings.ambientOcclusion.scale||1,t=this.settings.raytracer.scale||.5,this.matrixState.projectionMatrixStack.set(r.projection),this.matrixState.viewMatrixStack.set(r.viewMatrix),this.matrixState.modelMatrixStack.identity(),this.performDraw(n,i,r)},get maps(){return this._surfaces},resize:function(n){e=this.settings.ambientOcclusion.scale||1,t=this.settings.raytracer.scale||.5;var i=n.viewport;this.maps.resize(new bg.Size2D(i.width,i.height))},performDraw:function(n,i,r){var a=this,s=this._opacityLayer==bg.base.OpacityLayer.OPAQUE?n.opaqueQueue:n.transparentQueue,o=function(t,e){a.matrixState.modelMatrixStack.push(),a.matrixState.viewMatrixStack.push(),t.forEach(function(t){a.matrixState.modelMatrixStack.set(t.modelMatrix),a.matrixState.viewMatrixStack.set(t.viewMatrix),e.effect.material=t.material,e.draw(t.plist)}),a.matrixState.modelMatrixStack.pop(),a.matrixState.viewMatrixStack.pop()};bg.base.Pipeline.SetCurrent(this._gbufferUbyte),this._gbufferUbyte.viewport=r.viewport,this._gbufferUbyte.clearBuffers(),o(s,this._gbufferUbyte),bg.base.Pipeline.SetCurrent(this._gbufferFloat),this._gbufferFloat.viewport=r.viewport,this._gbufferFloat.clearBuffers(),o(s,this._gbufferFloat),this._lighting.viewport=r.viewport,this._lighting.clearcolor=bg.Color.White(),bg.base.Pipeline.SetCurrent(this._lighting),this._lighting.clearBuffers(bg.base.ClearBuffers.COLOR_DEPTH),this._lighting.blendMode=bg.base.BlendMode.ADD,this._lighting.blend=!0,this._shadow.viewport=r.viewport;var u=0;bg.scene.Light.GetActiveLights().forEach(function(t){t.light&&t.light.enabled&&t.node&&t.node.enabled&&(t.light.type==bg.base.LightType.DIRECTIONAL?(a._shadowMap.update(i,r,t.light,t.transform,bg.base.ShadowCascade.NEAR),bg.base.Pipeline.SetCurrent(a._shadow),a._shadow.viewport=r.viewport,a._shadow.clearBuffers(),a._shadow.effect.light=t.light,a._shadow.effect.shadowMap=a._shadowMap,i.accept(a.shadowVisitor)):t.light.type==bg.base.LightType.SPOT&&(a._shadowMap.shadowType=a.settings.shadows.type,a._shadowMap.update(i,r,t.light,t.transform),bg.base.Pipeline.SetCurrent(a._shadow),a._shadow.viewport=r.viewport,a._shadow.clearBuffers(),a._shadow.effect.light=t.light,a._shadow.effect.shadowMap=a._shadowMap,i.accept(a.shadowVisitor)),bg.base.Pipeline.SetCurrent(a._lighting),a._lighting.textureEffect.lightEmissionFactor=0==u?10:0,a._lighting.textureEffect.light=t.light,a._lighting.textureEffect.lightTransform=t.transform,a._lighting.textureEffect.shadowMap=a.maps.shadow,a._lighting.drawTexture(a.maps),++u)});var h=this.settings.ambientOcclusion.enabled,l=this.settings.raytracer.enabled,c=new bg.Viewport(r.viewport);if(this._ssao.textureEffect.enabled=h,this._ssao.textureEffect.settings.kernelSize=this.settings.ambientOcclusion.kernelSize,this._ssao.textureEffect.settings.sampleRadius=this.settings.ambientOcclusion.sampleRadius,this._ssao.textureEffect.settings.maxDistance=this.settings.ambientOcclusion.maxDistance,h&&(bg.base.Pipeline.SetCurrent(this._ssao),this._ssao.viewport=new bg.Viewport(c.x,c.y,c.width*e,c.height*e),this._ssao.clearBuffers(),this._ssao.textureEffect.viewport=r.viewport,this._ssao.textureEffect.projectionMatrix=r.projection,this._ssao.drawTexture(this.maps)),bg.base.Pipeline.SetCurrent(this._ssrt),l){this._ssrt.viewport=new bg.Viewport(c.x,c.y,c.width*t,c.height*t),this._ssrt.clearBuffers(bg.base.ClearBuffers.DEPTH),this._ssrt.textureEffect.quality=this.settings.raytracer.quality;var f=r.node.component("bg.scene.Transform");if(f){var v=new bg.Matrix4(r.projection);v.mult(r.viewMatrix),this._ssrt.textureEffect.cameraPosition=v.multVector(f.matrix.position).xyz}this._ssrt.textureEffect.projectionMatrix=r.projection,this._ssrt.textureEffect.rayFailColor=this.settings.raytracer.clearColor||bg.Color.Black(),this._ssrt.textureEffect.basic=this.settings.raytracer.basicReflections||!1,this._ssrt.textureEffect.viewportSize=new bg.Vector2(this._ssrt.viewport.width,this._ssrt.viewport.height),this._ssrt.drawTexture(this.maps)}bg.base.Pipeline.SetCurrent(this.pipeline),this.pipeline.viewport=r.viewport,this.pipeline.clearBuffers(),this.pipeline.textureEffect.viewport=r.viewport,this.pipeline.textureEffect.ssaoBlur=h?this.settings.ambientOcclusion.blur:1,this.pipeline.textureEffect.ssrtScale=t*this.settings.renderScale,this.pipeline.drawTexture({lightingMap:this.maps.lighting,diffuseMap:this.maps.diffuse,positionMap:this.maps.position,ssaoMap:h?this.maps.ambientOcclusion:bg.base.TextureCache.WhiteTexture(this.context),reflectionMap:l?this.maps.reflection:this.maps.lighting,specularMap:this.maps.specular,materialMap:this.maps.material,opaqueDepthMap:this.maps.mixDepthMap,shininess:this.maps.shininess}),r.viewport=c}},{},n)}(bg.render.RenderLayer);bg.render.DeferredRenderLayer=a}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._size=new bg.Size2D(0)},{get isSupported(){return bg.base.RenderSurface.MaxColorAttachments()>5&&bg.base.RenderSurface.SupportFormat(bg.base.RenderSurfaceFormat.FLOAT)&&bg.base.RenderSurface.SupportType(bg.base.RenderSurfaceType.DEPTH)},get pipeline(){return this._pipeline},create:function(){var t=this.context;this._renderQueueVisitor=new bg.scene.RenderQueueVisitor,this._opaqueLayer=new bg.render.DeferredRenderLayer(t),this._opaqueLayer.settings=this.settings,this._opaqueLayer.createOpaque(),this._transparentLayer=new bg.render.DeferredRenderLayer(t),this._transparentLayer.settings=this.settings,this._transparentLayer.createTransparent(this._opaqueLayer.maps),this._shadowMap=new bg.base.ShadowMap(t),this._shadowMap.size=new bg.Vector2(2048),this._opaqueLayer.shadowMap=this._shadowMap,this._transparentLayer.shadowMap=this._shadowMap;var e=new bg.base.TextureSurface(t);e.create(),this._mixPipeline=new bg.base.Pipeline(t),this._mixPipeline.textureEffect=new bg.render.RendererMixEffect(t),this._mixPipeline.renderSurface=e,this._pipeline=new bg.base.Pipeline(t),this._pipeline.textureEffect=new bg.render.PostprocessEffect(t),this.settings.renderScale=this.settings.renderScale||1},draw:function(t,e){this._shadowMap.size.x!=this.settings.shadows.quality&&(this._shadowMap.size=new bg.Vector2(this.settings.shadows.quality));var n=e.viewport,i=this.settings.antialiasing||{},r=i.maxTextureSize||4096,a=n.aspectRatio,s=n.width,o=n.height;i.enabled?(s=2*n.width,o=2*n.height,a>1&&s>r?(s=r,o=r/a):o>r&&(o=r,s=r*a)):(s=n.width*this.settings.renderScale,o=n.height*this.settings.renderScale,a>1&&s>r?(s=r,o=r/a):o>r&&(o=r,s=r*a));var u=new bg.Viewport(0,0,s,o);e.viewport=u;this._opaqueLayer.clearColor=this.clearColor,this._size.width==e.viewport.width&&this._size.height==e.viewport.height||(this._opaqueLayer.resize(e),this._transparentLayer.resize(e)),this._renderQueueVisitor.modelMatrixStack.identity(),this._renderQueueVisitor.projectionMatrixStack.push(),this._renderQueueVisitor.projectionMatrixStack.set(e.projection),this._renderQueueVisitor.viewMatrixStack.set(e.viewMatrix),this._renderQueueVisitor.renderQueue.beginFrame(e.worldPosition),t.accept(this._renderQueueVisitor),this._renderQueueVisitor.renderQueue.sortTransparentObjects(),this._opaqueLayer.draw(this._renderQueueVisitor.renderQueue,t,e),this._transparentLayer.draw(this._renderQueueVisitor.renderQueue,t,e),this._renderQueueVisitor.projectionMatrixStack.pop(),bg.base.Pipeline.SetCurrent(this._mixPipeline),this._mixPipeline.viewport=e.viewport,this._mixPipeline.clearColor=bg.Color.Black(),this._mixPipeline.clearBuffers(),this._mixPipeline.drawTexture({opaque:this._opaqueLayer.texture,transparent:this._transparentLayer.texture,transparentNormal:this._transparentLayer.maps.normal,opaqueDepth:this._opaqueLayer.maps.position,transparentDepth:this._transparentLayer.maps.position}),bg.base.Pipeline.SetCurrent(this.pipeline),this.pipeline.viewport=n,this.pipeline.clearColor=this.clearColor,this.pipeline.clearBuffers(),this.pipeline.drawTexture({texture:this._mixPipeline.renderSurface.getTexture(0)}),e.viewport=n},getImage:function(t,e,n,i){var r=e.viewport;e.viewport=new bg.Viewport(0,0,n,i),this.draw(t,e);var a=document.createElement("canvas");a.width=n,a.height=i;for(var s=a.getContext("2d"),o=this.pipeline.renderSurface.readBuffer(new bg.Viewport(0,0,n,i)),u=s.createImageData(n,i),h=4*n,l=0;l<i;++l)for(var c=0;c<h;c+=4){var f=l*n*4,v=(i-l)*n*4;u.data[v+c+0]=o[f+c+0],u.data[v+c+1]=o[f+c+1],u.data[v+c+2]=o[f+c+2],u.data[v+c+3]=o[f+c+3]}s.putImageData(u,0,0);var g=a.toDataURL("image/jpeg");return e.viewport=r,this.viewport=r,this.draw(t,e),g}},{},t)}(bg.render.Renderer);bg.render.DeferredRenderer=t}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e,n){$traceurRuntime.superConstructor(t).call(this,e,n),this._pipeline.effect=new bg.base.ForwardEffect(e),this._pipeline.opacityLayer=n,this._lightComponent=null,this._lightComponents=[],n==bg.base.OpacityLayer.TRANSPARENT&&(this._pipeline.buffersToClear=bg.base.ClearBuffers.NONE,this._pipeline.blend=!0,this._pipeline.blendMode=bg.base.BlendMode.NORMAL)},{set lightComponent(t){this._lightComponent=t},get lightComponent(){return this._lightComponent},setLightSources:function(t){this._lightComponents=t},set shadowMap(t){this._shadowMap=t},get shadowMap(){return this._shadowMap},draw:function(t,e,n){var i=this,r=this._pipeline.opacityLayer==bg.base.OpacityLayer.OPAQUE?t.opaqueQueue:t.transparentQueue;this.matrixState.modelMatrixStack.push(),r.forEach(function(t){i.matrixState.modelMatrixStack.set(t.modelMatrix),i.matrixState.viewMatrixStack.set(t.viewMatrix)}),this.matrixState.modelMatrixStack.pop(),bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.viewport=n.viewport,0!=n.clearBuffers&&this._pipeline.clearBuffers(),this.matrixState.projectionMatrixStack.set(n.projection),this.willDraw(e,n),this.performDraw(t,e,n)},willDraw:function(t,e){var n=this;this._lightComponent?(this._pipeline.effect.light=this._lightComponent.light,this._pipeline.effect.lightTransform=this._lightComponent.transform,this._pipeline.effect.shadowMap=this._shadowMap):this._lightComponents&&(this._pipeline.effect.lightArray.reset(),this._lightComponents.forEach(function(t){n._pipeline.effect.lightArray.push(t.light,t.transform)}),this._pipeline.effect.shadowMap=this._shadowMap)},performDraw:function(t,e,n){var i=this;this._pipeline.viewport=n.viewport;var r=this._pipeline.opacityLayer==bg.base.OpacityLayer.OPAQUE?t.opaqueQueue:t.transparentQueue;this.matrixState.modelMatrixStack.push(),r.forEach(function(t){i.matrixState.modelMatrixStack.set(t.modelMatrix),i.matrixState.viewMatrixStack.set(t.viewMatrix),i._pipeline.effect.material=t.material,i._pipeline.draw(t.plist)}),this.matrixState.modelMatrixStack.pop()}},{},t)}(bg.render.RenderLayer);bg.render.ForwardRenderLayer=t}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get isSupported(){return!0},create:function(){var t=this.context;this._transparentLayer=new bg.render.ForwardRenderLayer(t,bg.base.OpacityLayer.TRANSPARENT),this._opaqueLayer=new bg.render.ForwardRenderLayer(t,bg.base.OpacityLayer.OPAQUE),this._shadowMap=new bg.base.ShadowMap(t),this._shadowMap.size=new bg.Vector2(2048),this.settings.shadows.cascade=bg.base.ShadowCascade.NEAR,this._renderQueueVisitor=new bg.scene.RenderQueueVisitor},draw:function(t,e){var n=null,i=[],r=0;bg.scene.Light.GetActiveLights().some(function(t,e){return e>=bg.base.MAX_FORWARD_LIGHTS||(t.light&&t.light.enabled&&t.node&&t.node.enabled&&(r++,i.push(t),!n&&t.light.type!=bg.base.LightType.POINT&&t.light.castShadows&&(n=t)),r>=bg.base.MAX_FORWARD_LIGHTS)}),n&&(this._shadowMap.size.x!=this.settings.shadows.quality&&(this._shadowMap.size=new bg.Vector2(this.settings.shadows.quality)),this._shadowMap.update(t,e,n.light,n.transform,this.settings.shadows.cascade)),i.length?(this._opaqueLayer.setLightSources(i),this._opaqueLayer.shadowMap=this._shadowMap,this._transparentLayer.setLightSources(i),this._transparentLayer.shadowMap=this._shadowMap):(this._opaqueLayer.setLightSources([]),this._opaqueLayer.shadowMap=null,this._transparentLayer.setLightSources([]),this._transparentLayer.shadowMap=null),this._renderQueueVisitor.projectionMatrixStack.set(e.projection),this._renderQueueVisitor.modelMatrixStack.identity(),this._renderQueueVisitor.viewMatrixStack.set(e.viewMatrix),this._renderQueueVisitor.renderQueue.beginFrame(e.worldPosition),t.accept(this._renderQueueVisitor),this._renderQueueVisitor.renderQueue.sortTransparentObjects(),this._opaqueLayer.pipeline.clearColor=this.clearColor,this._opaqueLayer.draw(this._renderQueueVisitor.renderQueue,t,e),this._transparentLayer.draw(this._renderQueueVisitor.renderQueue,t,e)},getImage:function(t,e,n,i){var r=e.viewport;e.viewport=new bg.Viewport(0,0,n,i),this.draw(t,e),this.draw(t,e);var a=document.createElement("canvas");a.width=n,a.height=i;for(var s=a.getContext("2d"),o=this._opaqueLayer.pipeline.renderSurface.readBuffer(new bg.Viewport(0,0,n,i)),u=s.createImageData(n,i),h=4*n,l=0;l<i;++l)for(var c=0;c<h;c+=4){var f=l*n*4,v=(i-l)*n*4;u.data[v+c+0]=o[f+c+0],u.data[v+c+1]=o[f+c+1],u.data[v+c+2]=o[f+c+2],u.data[v+c+3]=o[f+c+3]}s.putImageData(u,0,0);var g=a.toDataURL("image/jpeg");return e.viewport=r,this._opaqueLayer.viewport=r,this._transparentLayer.viewport=r,g}},{},t)}(bg.render.Renderer);bg.render.ForwardRenderer=t}(),function(){var t=null,e=null,n=null,i=null;function r(){return bg.base.ShaderLibrary.Get()}var a={gbuffer_ubyte_vertex:function(){return t||((t=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([r().inputs.buffers.vertex,r().inputs.buffers.normal,r().inputs.buffers.tangent,r().inputs.buffers.tex0,r().inputs.buffers.tex1]),t.addParameter(r().inputs.matrix.all),t.addParameter([{name:"fsPosition",dataType:"vec3",role:"out"},{name:"fsTex0Coord",dataType:"vec2",role:"out"},{name:"fsTex1Coord",dataType:"vec2",role:"out"},{name:"fsNormal",dataType:"vec3",role:"out"},{name:"fsTangent",dataType:"vec3",role:"out"},{name:"fsBitangent",dataType:"vec3",role:"out"}]),"webgl1"==bg.Engine.Get().id&&t.setMainBody("\n\t\t\t\t\tvec4 viewPos = inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\tgl_Position = inProjectionMatrix * viewPos;\n\t\t\t\t\t\n\t\t\t\t\tfsNormal = normalize((inNormalMatrix * vec4(inNormal,1.0)).xyz);\n\t\t\t\t\tfsTangent = normalize((inNormalMatrix * vec4(inTangent,1.0)).xyz);\n\t\t\t\t\tfsBitangent = cross(fsNormal,fsTangent);\n\t\t\t\t\t\n\t\t\t\t\tfsTex0Coord = inTex0;\n\t\t\t\t\tfsTex1Coord = inTex1;\n\t\t\t\t\tfsPosition = viewPos.xyz;")),t},gbuffer_ubyte_fragment:function(){return e||((e=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).appendHeader("#extension GL_EXT_draw_buffers : require"),e.addParameter([{name:"fsPosition",dataType:"vec3",role:"in"},{name:"fsTex0Coord",dataType:"vec2",role:"in"},{name:"fsTex1Coord",dataType:"vec2",role:"in"},{name:"fsNormal",dataType:"vec3",role:"in"},{name:"fsTangent",dataType:"vec3",role:"in"},{name:"fsBitangent",dataType:"vec3",role:"int"}]),e.addParameter(r().inputs.material.all),e.addFunction(r().functions.materials.all),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n\t\t\t\t\t\tvec4 lightMap = samplerColor(inLightMap,fsTex1Coord,inLightMapOffset,inLightMapScale);\n\t\t\t\t\t\tvec4 diffuse = samplerColor(inTexture,fsTex0Coord,inTextureOffset,inTextureScale) * inDiffuseColor * lightMap;\n\t\t\t\t\t\tif (diffuse.a>=inAlphaCutoff) {\n\t\t\t\t\t\t\tvec3 normal = samplerNormal(inNormalMap,fsTex0Coord,inNormalMapOffset,inNormalMapScale);\n\t\t\t\t\t\t\tnormal = combineNormalWithMap(fsNormal,fsTangent,fsBitangent,normal);\n\t\t\t\t\t\t\tvec4 specular = specularColor(inSpecularColor,inShininessMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinShininessMaskChannel,inShininessMaskInvert);\n\t\t\t\t\t\t\tfloat lightEmission = applyTextureMask(inLightEmission,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinLightEmissionMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinLightEmissionMaskChannel,inLightEmissionMaskInvert);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat reflectionMask = applyTextureMask(inReflection,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinReflectionMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinReflectionMaskChannel,inReflectionMaskInvert);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat roughnessMask = applyTextureMask(inRoughness,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinRoughnessMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinRoughnessMaskChannel,inRoughnessMaskInvert);\n\n\t\t\t\t\t\t\tgl_FragData[0] = diffuse;\n\t\t\t\t\t\t\tgl_FragData[1] = vec4(specular.rgb,roughnessMask); // Store roughness on A component of specular\n\t\t\t\t\t\t\tif (!gl_FrontFacing) {\t// Flip the normal if back face\n\t\t\t\t\t\t\t\tnormal *= -1.0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tgl_FragData[2] = vec4(normal * 0.5 + 0.5, inUnlit ? 0.0 : 1.0);\t// Store !unlit parameter on A component of normal\n\t\t\t\t\t\t\tgl_FragData[3] = vec4(lightEmission,inShininess/255.0,reflectionMask,float(inCastShadows));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tgl_FragData[0] = vec4(0.0);\n\t\t\t\t\t\t\tgl_FragData[1] = vec4(0.0);\n\t\t\t\t\t\t\tgl_FragData[2] = vec4(0.0);\n\t\t\t\t\t\t\tgl_FragData[3] = vec4(0.0);\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t}")),e},gbuffer_float_vertex:function(){return n||((n=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([r().inputs.buffers.vertex,r().inputs.buffers.tex0,null,r().inputs.matrix.model,r().inputs.matrix.view,r().inputs.matrix.projection,null,{name:"fsPosition",dataType:"vec4",role:"out"},{name:"fsTex0Coord",dataType:"vec2",role:"out"}]),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n\t\t\t\t\tfsPosition = inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\tfsTex0Coord = inTex0;\n\t\t\t\t\t\n\t\t\t\t\tgl_Position = inProjectionMatrix * fsPosition;")),n},gbuffer_float_fragment:function(){return i||((i=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).addParameter([r().inputs.material.texture,r().inputs.material.textureScale,r().inputs.material.textureOffset,r().inputs.material.alphaCutoff,null,{name:"fsPosition",dataType:"vec4",role:"in"},{name:"fsTex0Coord",dataType:"vec2",role:"in"}]),i.addFunction(r().functions.materials.samplerColor),"webgl1"==bg.Engine.Get().id&&i.setMainBody("\n\t\t\t\t\tfloat alpha = samplerColor(inTexture,fsTex0Coord,inTextureOffset,inTextureScale).a;\n\t\t\t\t\tif (alpha<inAlphaCutoff) {\n\t\t\t\t\t\tdiscard;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tgl_FragColor = vec4(fsPosition.xyz,gl_FragCoord.z);\n\t\t\t\t\t}\n\t\t\t\t\t")),i}},s=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e);var n=[a.gbuffer_ubyte_vertex(),a.gbuffer_ubyte_fragment()];this._material=null,this.setupShaderSource(n)},{get material(){return this._material},set material(t){this._material=t},setupVars:function(){if(this.material){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst),this.shader.setMatrix4("inNormalMatrix",t.normalMatrix),this.shader.setMatrix4("inViewMatrixInv",t.viewMatrixInvert);var n=this.material.texture||bg.base.TextureCache.WhiteTexture(this.context),i=this.material.lightmap||bg.base.TextureCache.WhiteTexture(this.context),r=this.material.normalMap||bg.base.TextureCache.NormalTexture(this.context);this.shader.setVector4("inDiffuseColor",this.material.diffuse),this.shader.setVector4("inSpecularColor",this.material.specular),this.shader.setValueFloat("inShininess",this.material.shininess),this.shader.setValueFloat("inLightEmission",this.material.lightEmission),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff),this.shader.setTexture("inTexture",n,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.textureScale),this.shader.setTexture("inLightMap",i,bg.base.TextureUnit.TEXTURE_1),this.shader.setVector2("inLightMapOffset",this.material.lightmapOffset),this.shader.setVector2("inLightMapScale",this.material.lightmapScale),this.shader.setTexture("inNormalMap",r,bg.base.TextureUnit.TEXTURE_2),this.shader.setVector2("inNormalMapScale",this.material.normalMapScale),this.shader.setVector2("inNormalMapOffset",this.material.normalMapOffset);var a=this.material.shininessMask||bg.base.TextureCache.WhiteTexture(this.context),s=this.material.lightEmissionMask||bg.base.TextureCache.WhiteTexture(this.context),o=this.material.reflectionMask||bg.base.TextureCache.WhiteTexture(this.context),u=this.material.roughnessMask||bg.base.TextureCache.WhiteTexture(this.context);this.shader.setTexture("inShininessMask",a,bg.base.TextureUnit.TEXTURE_3),this.shader.setVector4("inShininessMaskChannel",this.material.shininessMaskChannelVector),this.shader.setValueInt("inShininessMaskInvert",this.material.shininessMaskInvert),this.shader.setTexture("inLightEmissionMask",s,bg.base.TextureUnit.TEXTURE_4),this.shader.setVector4("inLightEmissionMaskChannel",this.material.lightEmissionMaskChannelVector),this.shader.setValueInt("inLightEmissionMaskInvert",this.material.lightEmissionMaskInvert),this.shader.setValueFloat("inReflection",this.material.reflectionAmount),this.shader.setTexture("inReflectionMask",o,bg.base.TextureUnit.TEXTURE_5),this.shader.setVector4("inReflectionMaskChannel",this.material.reflectionMaskChannelVector),this.shader.setValueInt("inReflectionMaskInvert",this.material.reflectionMaskInvert),this.shader.setValueFloat("inRoughness",this.material.roughness),this.shader.setTexture("inRoughnessMask",u,bg.base.TextureUnit.TEXTURE_6),this.shader.setVector4("inRoughnessMaskChannel",this.material.roughnessMaskChannelVector),this.shader.setValueInt("inRoughnessMaskInvert",this.material.roughnessMaskInvert),this.shader.setValueInt("inCastShadows",this.material.castShadows),this.shader.setValueInt("inUnlit",this.material.unlit)}}},{},t)}(bg.base.Effect),o=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e);var n=[a.gbuffer_float_vertex(),a.gbuffer_float_fragment()];this._material=null,this.setupShaderSource(n)},{get material(){return this._material},set material(t){this._material=t},setupVars:function(){if(this.material){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst);var n=this.material.texture||bg.base.TextureCache.WhiteTexture(this.context);this.shader.setTexture("inTexture",n,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.textureScale),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff)}}},{},t)}(bg.base.Effect);bg.render.PositionGBufferEffect=o,bg.render.GBufferEffect=s}(),function(){function t(t,e,n,i){bg.base.Pipeline.SetCurrent(t),t.viewport=i.viewport,t.clearBuffers(bg.base.ClearBuffers.COLOR|bg.base.ClearBuffers.DEPTH),n.accept(e)}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._pipelines={ubyte:new bg.base.Pipeline(e),float:new bg.base.Pipeline(e)};var n=new bg.base.TextureSurface(e);n.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._pipelines.ubyte.effect=new bg.render.GBufferEffect(e),this._pipelines.ubyte.renderSurface=n;var i=new bg.base.TextureSurface(e);i.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._pipelines.float.effect=new bg.render.PositionGBufferEffect(e),this._pipelines.float.renderSurface=i,this._ubyteDrawVisitor=new bg.scene.DrawVisitor(this._pipelines.ubyte,this._matrixState),this._floatDrawVisitor=new bg.scene.DrawVisitor(this._pipelines.float,this._matrixState)},{get diffuse(){return this._pipelines.ubyte.renderSurface.getTexture(0)},get specular(){return this._pipelines.ubyte.renderSurface.getTexture(1)},get normal(){return this._pipelines.ubyte.renderSurface.getTexture(2)},get material(){return this._pipelines.ubyte.renderSurface.getTexture(3)},get position(){return this._pipelines.float.renderSurface.getTexture(0)},get shadow(){return this._pipelines.ubyte.renderSurface.getTexture(4)},update:function(e,n){t(this._pipelines.ubyte,this._ubyteDrawVisitor,e,n),t(this._pipelines.float,this._floatDrawVisitor,e,n)}},{},e)}(bg.app.ContextObject);bg.render.GBufferSet=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.appendHeader("#extension GL_EXT_draw_buffers : require"),this._fragmentShaderSource.addParameter([{name:"inDiffuse",dataType:"sampler2D",role:"value"},{name:"inSpecular",dataType:"sampler2D",role:"value"},{name:"inNormal",dataType:"sampler2D",role:"value"},{name:"inMaterial",dataType:"sampler2D",role:"value"},{name:"inPosition",dataType:"sampler2D",role:"value"},{name:"inShadowMap",dataType:"sampler2D",role:"value"},{name:"inLightEmissionFactor",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),this._fragmentShaderSource.addParameter(t().inputs.lighting.all),this._fragmentShaderSource.addFunction(t().functions.utils.all),this._fragmentShaderSource.addFunction(t().functions.lighting.all),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\tvec4 diffuse = texture2D(inDiffuse,fsTexCoord);\n\t\t\t\t\tvec4 specular = vec4(texture2D(inSpecular,fsTexCoord).rgb,1.0);\n\t\t\t\t\tvec4 normalTex = texture2D(inNormal,fsTexCoord);\n\t\t\t\t\tvec3 normal = normalTex.xyz * 2.0 - 1.0;\n\t\t\t\t\tvec4 material = texture2D(inMaterial,fsTexCoord);\n\t\t\t\t\tvec4 position = texture2D(inPosition,fsTexCoord);\n\t\t\t\t\t\n\t\t\t\t\tvec4 shadowColor = texture2D(inShadowMap,fsTexCoord);\n\t\t\t\t\tfloat shininess = material.g * 255.0;\n\t\t\t\t\tfloat lightEmission = material.r;\n\t\t\t\t\tbool unlit = normalTex.a == 0.0;\n\t\t\t\t\tvec4 specularColor = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\tif (unlit) {\n\t\t\t\t\t\tgl_FragData[0] = vec4(diffuse.rgb * min(inLightEmissionFactor,1.0),1.0);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvec4 light = getLight(\n\t\t\t\t\t\t\tinLightType,\n\t\t\t\t\t\t\tinLightAmbient, inLightDiffuse, inLightSpecular,shininess,\n\t\t\t\t\t\t\tinLightPosition,inLightDirection,\n\t\t\t\t\t\t\tinLightAttenuation.x,inLightAttenuation.y,inLightAttenuation.z,\n\t\t\t\t\t\t\tinSpotCutoff,inSpotExponent,inLightCutoffDistance,\n\t\t\t\t\t\t\tposition.rgb,normal,\n\t\t\t\t\t\t\tdiffuse,specular,shadowColor,\n\t\t\t\t\t\t\tspecularColor\n\t\t\t\t\t\t);\n\t\t\t\t\t\tlight.rgb = light.rgb + (lightEmission * diffuse.rgb * inLightEmissionFactor);\n\t\t\t\t\t\tgl_FragData[0] = light;\n\t\t\t\t\t\tgl_FragData[1] = specularColor;\n\t\t\t\t\t\tgl_FragData[2] = vec4((light.rgb - vec3(1.0,1.0,1.0)) * 2.0,1.0);\n\t\t\t\t\t}\n\t\t\t\t\t")),this._fragmentShaderSource},setupVars:function(){if(this.shader.setTexture("inDiffuse",this._surface.diffuse,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inSpecular",this._surface.specular,bg.base.TextureUnit.TEXTURE_1),this.shader.setTexture("inNormal",this._surface.normal,bg.base.TextureUnit.TEXTURE_2),this.shader.setTexture("inMaterial",this._surface.material,bg.base.TextureUnit.TEXTURE_3),this.shader.setTexture("inPosition",this._surface.position,bg.base.TextureUnit.TEXTURE_4),this.shader.setTexture("inShadowMap",this._shadowMap,bg.base.TextureUnit.TEXTURE_5),this.light){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setVector4("inLightAmbient",this._light.ambient),this.shader.setVector4("inLightDiffuse",this._light.diffuse),this.shader.setVector4("inLightSpecular",this._light.specular),this.shader.setValueInt("inLightType",this._light.type),this.shader.setVector3("inLightAttenuation",this._light.attenuationVector),this.shader.setValueFloat("inLightEmissionFactor",this.lightEmissionFactor),this.shader.setValueFloat("inLightCutoffDistance",this._light.cutoffDistance);var n=e.mult(this._lightTransform).rotation.multVector(this._light.direction).xyz,i=e.position;this.shader.setVector3("inLightDirection",n),this.shader.setVector3("inLightPosition",i),this.shader.setValueFloat("inSpotCutoff",this._light.spotCutoff),this.shader.setValueFloat("inSpotExponent",this._light.spotExponent)}},get lightEmissionFactor(){return this._lightEmissionFactor},set lightEmissionFactor(t){this._lightEmissionFactor=t},get light(){return this._light},set light(t){this._light=t},get lightTransform(){return this._lightTransform},set lightTransform(t){this._lightTransform=t},get shadowMap(){return this._shadowMap},set shadowMap(t){this._shadowMap=t}},{},e)}(bg.base.TextureEffect);bg.render.LightingEffect=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=null,n=[],i=0;function r(e){if(!n[e-1]&&e>0){n[e-1]=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);var r=n[e-1];if(r.addParameter(t().inputs.pbr.material.all),r.addParameter(t().inputs.pbr.lightingForward.all),r.addParameter(t().inputs.pbr.shadows.all),r.addParameter(t().inputs.pbr.colorCorrection.all),r.addParameter([{name:"fsTex0Coord",dataType:"vec2",role:"in"},{name:"fsTex1Coord",dataType:"vec2",role:"in"},{name:"fsNormal",dataType:"vec3",role:"in"},{name:"fsTangent",dataType:"vec3",role:"in"},{name:"fsBitangent",dataType:"vec3",role:"in"},{name:"fsPosition",dataType:"vec3",role:"in"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"in"},{name:"fsTangentViewPos",dataType:"vec3",role:"in"},{name:"fsTangentFragPos",dataType:"vec3",role:"in"},{name:"inIrradianceMapIntensity",dataType:"float",role:"value"},{name:"inIrradianceMap",dataType:"samplerCube",role:"value"},{name:"inSpecularMap0",dataType:"samplerCube",role:"value"},{name:"inSpecularMap1",dataType:"samplerCube",role:"value"},{name:"inSpecularMap2",dataType:"samplerCube",role:"value"},{name:"inBRDF",dataType:"sampler2D",role:"value"},{name:"inViewMatrix",dataType:"mat4",role:"value"},{name:"inShadowLightDirection",dataType:"vec3",role:"value"},{name:"inShadowLightIndex",dataType:"int",role:"value"}]),r.addFunction(t().functions.pbr.material.all),r.addFunction(t().functions.pbr.utils.unpack),r.addFunction(t().functions.pbr.utils.pack),r.addFunction(t().functions.pbr.utils.random),r.addFunction(t().functions.pbr.utils.gammaCorrection),r.addFunction(t().functions.pbr.utils.inverseGammaCorrection),r.addFunction(t().functions.pbr.lighting.all),r.addFunction(t().functions.colorCorrection.all),"webgl1"==bg.Engine.Get().id){r.addFunction({returnType:"vec3",name:"fresnelSchlick",params:{cosTheta:"float",F0:"vec3"},body:"\n return max(F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0), 0.0);\n "}),r.addFunction({returnType:"vec3",name:"fresnelSchlickRoughness",params:{cosTheta:"float",F0:"vec3",roughness:"float"},body:"\n return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(1.0 - cosTheta, 5.0);\n "}),r.addFunction({returnType:"float",name:"distributionGGX",params:{N:"vec3",H:"vec3",roughness:"float"},body:"\n float a = roughness * roughness;\n float a2 = a * a;\n float NdotH = max(dot(N,H), 0.0);\n float NdotH2 = NdotH * NdotH;\n\n float num = a2;\n float denom = (NdotH2 * (a2 - 1.0) + 1.0);\n denom = "+Math.PI+" * denom * denom;\n\n return num / denom;\n "}),r.addFunction({returnType:"float",name:"geometrySchlickGGX",params:{NdotV:"float",roughness:"float"},body:"\n float r = (roughness + 1.0);\n float k = (r*r) / 8.0;\n return NdotV / NdotV * (1.0 - k) + k;\n "}),r.addFunction({returnType:"float",name:"geometrySmith",params:{N:"vec3",V:"vec3",L:"vec3",roughness:"float"},body:"\n float NdotV = dot(N, V);\n float NdotL = dot(N, L);\n float ggx2 = geometrySchlickGGX(NdotV, roughness);\n float ggx1 = geometrySchlickGGX(NdotL, roughness);\n\n return ggx1 * ggx2;\n "});var a="\n vec3 N = normalize(normal);\n vec3 V = normalize(camPos - worldPos);\n roughness = max(roughness,0.0001); // Prevent some artifacts\n\n vec3 F0 = vec3(0.04); \n F0 = mix(F0, albedo, metallic);\n\n // reflectance equation\n vec3 Lo = vec3(0.0);\n for(int i = 0; i < "+e+"; ++i) \n {\n // calculate per-light radiance\n vec3 L = vec3(0.0);\n vec3 H = vec3(0.0);\n\n float intensity = 1.0;\n if (inLightType[i]=="+bg.base.LightType.POINT+") {\n L = normalize(inLightPosition[i] - worldPos);\n H = normalize(V + L);\n }\n else if (inLightType[i]=="+bg.base.LightType.SPOT+") {\n float theta = dot(normalize(inLightPosition[i] - worldPos),normalize(-inLightDirection[i]));\n if (theta > inLightSpotCutoff[i]) {\n L = normalize(-inLightDirection[i]);\n H = normalize(V + L);\n float epsilon = inLightSpotCutoff[i] - inLightOuterSpotCutoff[i];\n intensity = 1.0 - clamp((theta - inLightOuterSpotCutoff[i]) / epsilon, 0.0, 1.0);\n }\n else {\n //Lo += inLightAmbient[i].rgb * albedo;\n if (i==inShadowLightIndex) {\n shadowColor = vec3(1.0);\n }\n else {\n shadowColor *= vec3(1.0/"+e+".0 );\n } \n \n continue;\n }\n }\n else if (inLightType[i]=="+bg.base.LightType.DIRECTIONAL+") {\n L = normalize(-inLightDirection[i]);\n H = normalize(V + L);\n }\n \n float distance = length(inLightPosition[i] - worldPos);\n float attenuation = 1.0 / distance * distance;\n vec3 radiance = inLightDiffuse[i].rgb * attenuation * inLightIntensity[i];\n \n // cook-torrance brdf\n float NDF = distributionGGX(N, H, roughness); \n float G = geometrySmith(N, V, L, roughness);\n\n vec3 F = fresnelSchlick(max(dot(H, V), 0.0), F0);\n \n vec3 kS = F;\n vec3 kD = vec3(1.0) - kS;\n kD *= 1.0 - metallic;\t \n \n vec3 numerator = NDF * G * F;\n float denominator = 4.0 * max(dot(N, V), 0.4) * max(dot(N, L), 0.4);\n vec3 specular = numerator / max(denominator, 0.0001) * pow(shadowColor,vec3(30.0)) * inLightIntensity[i];\n\n // add to outgoing radiance Lo\n float NdotL = max(dot(N, L), 0.0);\n vec3 color = (kD * albedo / "+Math.PI+" + specular) * radiance * NdotL * intensity;\n // vec3 ambient = inLightAmbient[i].rgb * albedo;\n // vec3 shadowAmbient = clamp(shadowColor,ambient,vec3(1.0));\n // color = min(color,shadowAmbient);\n Lo += clamp(color,0.0,1.0);\n } \n vec3 kS = fresnelSchlickRoughness(max(dot(N,V), 0.001), F0, roughness);\n\n vec3 kD = 1.0 - kS;\n kD *= 1.0 - metallic;\n\n vec3 R = reflect(worldPos - camPos, N);\n\n vec3 specMap0 = textureCube(inSpecularMap0,R).rgb;\n vec3 specMap1 = textureCube(inSpecularMap1,R).rgb;\n vec3 specMap2 = textureCube("+(i>8?"inSpecularMap2":"inSpecularMap1")+",R).rgb;\n\n vec3 prefilteredColor = vec3(0.0);\n if (roughness<"+(i>8?.333:.5)+") {\n prefilteredColor = mix(specMap0,specMap1,roughness/"+(i>8?.333:.5)+");\n }\n else {\n prefilteredColor = mix(specMap1,specMap2,(roughness - "+(i>8?.333:.5)+") / "+(i>8?.666:.5)+");\n }\n \n vec2 envBRDF = texture2D(inBRDF, vec2(min(max(dot(N,V), 0.0), 0.99), min(roughness,0.99))).rg;\n vec3 specular = prefilteredColor * (F0 * envBRDF.x + envBRDF.y) * shadowColor * fresnelColor;\n\n vec3 irradiance = textureCube(inIrradianceMap,N).rgb * inIrradianceMapIntensity;\n\t vec3 diffuse = (irradiance * 1.0/shadowColor) * (albedo * shadowColor) * shadowColor;\n\t vec3 irradianceAmbient = (kD * diffuse + specular); // TODO: * ao;\n \n return vec4(irradianceAmbient + Lo, 1.0);\n ";r.addFunction({returnType:"vec4",name:"irradiance",params:{normal:"vec3",fresnelColor:"vec3",camPos:"vec3",albedo:"vec3",worldPos:"vec3",metallic:"float",roughness:"float",shadowColor:"vec3",texCoord:"vec2"},body:a}),r.setMainBody("\n // Shader for "+e+" lights \n\n vec2 diffuseUV = inDiffuseUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 metallicUV = inMetallicUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 roughnessUV = inRoughnessUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 fresnelUV = inFresnelUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 heightUV = inHeightUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 aoUV = inAmbientOcclussionUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 lightEmissionUV = inLightEmissionUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 normalUV = inNormalUV==0 ? fsTex0Coord : fsTex1Coord;\n \n vec3 viewDir = -normalize(fsTangentFragPos - fsTangentViewPos);\n float height = samplerColor(inHeighMetallicRoughnessAO,heightUV,inHeightScale).x;\n vec2 texCoords = parallaxMapping(-height,diffuseUV, viewDir, inHeightIntensity, inHeightScale);\n\n metallicUV = parallaxMapping(-height,metallicUV,viewDir,inHeightIntensity,inHeightScale);\n roughnessUV = parallaxMapping(-height,roughnessUV,viewDir,inHeightIntensity,inHeightScale);\n normalUV = parallaxMapping(-height,normalUV,viewDir,inHeightIntensity,inHeightScale);\n\n vec4 hmrao = samplerColor(inHeighMetallicRoughnessAO,texCoords,inDiffuseScale);\n float metallic = samplerColor(inHeighMetallicRoughnessAO,metallicUV,inMetallicScale).y;\n float roughness = samplerColor(inHeighMetallicRoughnessAO,roughnessUV,inRoughnessScale).z;\n float ao = texture2D(inHeighMetallicRoughnessAO,aoUV).w;\n\n vec4 diffuseRaw = samplerColor(inDiffuse,texCoords,inDiffuseScale);\n vec4 diffuse = inverseGammaCorrection(diffuseRaw,inGammaCorrection);\n if (diffuse.a>inAlphaCutoff) {\n if (inUnlit==true) {\n gl_FragColor = diffuseRaw;\n }\n else {\n vec3 normalMap = samplerNormal(inNormalMap,normalUV,inNormalScale);\n vec3 frontFacingNormal = fsNormal;\n // There is a bug on Mac Intel GPUs that produces an invalid value of gl_FrontFacing\n //if (!gl_FrontFacing) {\n //frontFacingNormal *= -1.0;\n //}\n \n vec3 combinedNormal = combineNormalWithMap(frontFacingNormal,fsTangent,fsBitangent,normalMap); \n \n vec4 shadowColor = vec4(1.0);\n if (inReceiveShadows) {\n shadowColor = getShadowColor(fsVertexPosFromLight,inShadowMap,inShadowMapSize,inShadowType,inShadowStrength * (1.0 - metallic * 1.5),inShadowBias,inShadowColor);\n }\n \n vec4 lighting = irradiance(combinedNormal,inFresnel.rgb,vec3(0.0),diffuse.rgb,fsPosition,metallic,roughness,shadowColor.rgb,texCoords);\n \n vec4 result = vec4(lighting.rgb * ao, 1.0);\n \n result = gammaCorrection(result,inGammaCorrection);\n gl_FragColor = vec4((brightnessMatrix(inBrightness - 1.0) *\n contrastMatrix(inContrast) *\n saturationMatrix(inSaturation) *\n result).rgb, diffuse.a);\n }\n }\n else {\n discard;\n }\n ")}}return n[e-1]}var a=!1,s=null,o=function(o){function u(n){if($traceurRuntime.superConstructor(u).call(this,n),this._material=null,(i=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS))<8)throw new Error("Could not use PBR materials: not enought texture units available");this._light=null,this._lightTransform=bg.Matrix4.Identity(),this._lightArray=new bg.base.LightArray,this._shadowMap=null;for(var o=1;o<=bg.base.MAX_FORWARD_LIGHTS;++o)this.setupShaderSource([(e||((e=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([t().inputs.buffers.vertex,t().inputs.buffers.normal,t().inputs.buffers.tangent,t().inputs.buffers.tex0,t().inputs.buffers.tex1]),e.addParameter(t().inputs.matrix.all),e.addParameter([{name:"inLightProjectionMatrix",dataType:"mat4",role:"value"},{name:"inLightViewMatrix",dataType:"mat4",role:"value"}]),e.addParameter([{name:"fsTex0Coord",dataType:"vec2",role:"out"},{name:"fsTex1Coord",dataType:"vec2",role:"out"},{name:"fsNormal",dataType:"vec3",role:"out"},{name:"fsTangent",dataType:"vec3",role:"out"},{name:"fsBitangent",dataType:"vec3",role:"out"},{name:"fsPosition",dataType:"vec3",role:"out"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"out"},{name:"fsTangentViewPos",dataType:"vec3",role:"out"},{name:"fsTangentFragPos",dataType:"vec3",role:"out"}]),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n mat4 ScaleMatrix = mat4(0.5, 0.0, 0.0, 0.0,\n 0.0, 0.5, 0.0, 0.0,\n 0.0, 0.0, 0.5, 0.0,\n 0.5, 0.5, 0.5, 1.0);\n\n vec4 viewPos = inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n gl_Position = inProjectionMatrix * viewPos;\n\n fsNormal = normalize((inNormalMatrix * vec4(inNormal,1.0)).xyz);\n fsTangent = normalize((inNormalMatrix * vec4(inTangent,1.0)).xyz);\n fsBitangent = cross(fsNormal,fsTangent);\n\n fsVertexPosFromLight = ScaleMatrix * inLightProjectionMatrix * inLightViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\n fsTex0Coord = inTex0;\n fsTex1Coord = inTex1;\n fsPosition = viewPos.rgb;\n\n mat3 TBN = mat3(\n fsTangent.x, fsBitangent.x, fsNormal.x,\n fsTangent.y, fsBitangent.y, fsNormal.y,\n fsTangent.z, fsBitangent.z, fsNormal.z\n );\n fsTangentViewPos = TBN * vec3(0.0); // Using view space, the view position is at 0,0,0\n fsTangentFragPos = TBN * fsPosition;\n ")),e),r(o)]);a||(a=!0,s=bg.base.TextureCache.PrecomputedBRDFLookupTexture(n)),this._colorCorrection=this._colorCorrection||{gamma:2,saturation:1,brightness:1,contrast:1}}return $traceurRuntime.createClass(u,{get vertexSourceCode(){return e},get fragmentSourceCodes(){return n},get material(){return this._material},set material(t){this._material=t},get colorCorrection(){return this._colorCorrection},set colorCorrection(t){this._colorCorrection=t},get light(){return this._light},set light(t){this._light=t,this._lightArray.reset()},get lightTransform(){return this._lightTransform},set lightTransform(t){this._lightTransform=t,this._lightArray.reset()},get lightArray(){return this._lightArray},set shadowMap(t){this._shadowMap=t},get shadowMap(){return this._shadowMap},setActive:function(){var t;this._light&&(this.lightArray.reset(),this.lightArray.push(this.light,this.lightTransform)),(t=Math.min(this.lightArray.numLights,bg.base.MAX_FORWARD_LIGHTS))>0&&this.setCurrentShader(t-1),$traceurRuntime.superGet(this,u.prototype,"setActive").call(this)},beginDraw:function(){if(this.lightArray.numLights&&this.lightArray.numLights<bg.base.MAX_FORWARD_LIGHTS){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.lightArray.updatePositionAndDirection(e);var n=this.shadowMap?this.shadowMap.viewMatrix:this.lightArray.shadowLightTransform;this.shader.setMatrix4("inLightProjectionMatrix",this.shadowMap?this.shadowMap.projection:this.lightArray.shadowLight.projection);var i=this.shadowMap?this.shadowMap.shadowColor:bg.Color.Transparent(),r=bg.base.TextureCache.BlackTexture(this.context);this.shader.setMatrix4("inLightViewMatrix",n),this.shader.setValueInt("inShadowType",this._shadowMap?this._shadowMap.shadowType:0),this.shader.setTexture("inShadowMap",this._shadowMap?this._shadowMap.texture:r,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inShadowMapSize",this._shadowMap?this._shadowMap.size:new bg.Vector2(32,32)),this.shader.setValueFloat("inShadowStrength",this.lightArray.shadowLight.shadowStrength),this.shader.setVector4("inShadowColor",i),this.shader.setValueFloat("inShadowBias",this.lightArray.shadowLight.shadowBias),this.shader.setValueInt("inCastShadows",this.lightArray.shadowLight.castShadows),this.shader.setVector3("inShadowLightDirection",this.lightArray.shadowLightDirection),this.shader.setValueInt("inShadowLightIndex",this.lightArray.shadowLightIndex),this.shader.setValueIntPtr("inLightType",this.lightArray.type),this.shader.setVector4Ptr("inLightDiffuse",this.lightArray.diffuse),this.shader.setVector4Ptr("inLightSpecular",this.lightArray.specular),this.shader.setVector3Ptr("inLightPosition",this.lightArray.position),this.shader.setVector3Ptr("inLightDirection",this.lightArray.direction),this.shader.setValueFloatPtr("inLightIntensity",this.lightArray.intensity),this.shader.setValueFloatPtr("inLightSpotCutoff",this.lightArray.cosSpotCutoff),this.shader.setValueFloatPtr("inLightOuterSpotCutoff",this.lightArray.cosSpotExponent),this.shader.setValueFloat("inGammaCorrection",this.colorCorrection.gamma),this.shader.setValueFloat("inSaturation",this.colorCorrection.saturation),this.shader.setValueFloat("inBrightness",this.colorCorrection.brightness),this.shader.setValueFloat("inContrast",this.colorCorrection.contrast)}},setupVars:function(){var t=this.material;if(t instanceof bg.base.PBRMaterial||t.pbr?t.pbr&&(t.pbr.updateFromLegacyMaterial(this.context,t),t=t.pbr):(t.pbr=t.pbr||bg.base.PBRMaterial.ImportFromLegacyMaterial(this.context,t),t=t.pbr),t instanceof bg.base.PBRMaterial){var e=bg.base.MatrixState.Current(),n=new bg.Matrix4(e.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",e.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",n),this.shader.setMatrix4("inProjectionMatrix",e.projectionMatrixStack.matrixConst),this.shader.setMatrix4("inNormalMatrix",e.normalMatrix),this.shader.setMatrix4("inViewMatrixInv",e.viewMatrixInvert);var r=t.getShaderParameters(this.context);this.shader.setVector2("inDiffuseScale",r.diffuseScale),this.shader.setVector2("inMetallicScale",r.metallicScale),this.shader.setVector2("inRoughnessScale",r.roughnessScale),this.shader.setVector2("inFresnelScale",r.fresnelScale),this.shader.setVector2("inLightEmissionScale",r.lightEmissionScale),this.shader.setVector2("inHeightScale",r.heightScale),this.shader.setVector2("inNormalScale",r.normalScale),this.shader.setValueInt("inDiffuseUV",r.diffuseUV),this.shader.setValueInt("inMetallicUV",r.metallicUV),this.shader.setValueInt("inRoughnessUV",r.roughnessUV),this.shader.setValueInt("inFresnelUV",r.fresnelUV),this.shader.setValueInt("inLightEmissionUV",r.lightEmissionUV),this.shader.setValueInt("inAmbientOcclussionUV",r.ambientOcclussionUV),this.shader.setValueInt("inNormalUV",r.normalUV),this.shader.setValueInt("inHeightUV",r.heightUV),this.shader.setValueInt("inReceiveShadows",!0),this.shader.setValueInt("inUnlit",t.unlit),this.shader.setValueFloat("inHeightIntensity",t.heightIntensity),this.shader.setValueFloat("inAlphaCutoff",t.alphaCutoff);var a=bg.base.TextureUnit.TEXTURE_1;this.shader.setTexture("inDiffuse",r.diffuse.map,a++),this.shader.setTexture("inHeighMetallicRoughnessAO",r.heightMetallicRoughnessAO.map,a++),this.shader.setTexture("inNormalMap",r.normal.map,a++);var o=t.fresnel instanceof bg.Color?t.fresnel:bg.Color.White();this.shader.setVector4("inFresnel",o);var u=bg.base.TextureCache.BlackCubemap(this.context),h=u,l=u,c=u,f=u,v=bg.scene.Environment.Get(),g=1;v&&v.environment&&(h=v.environment.irradianceMapTexture||h,l=v.environment.specularMapTextureL0||l,c=v.environment.specularMapTextureL1||c,f=v.environment.specularMapTextureL2||f,g=v.environment.irradianceIntensity),this.shader.setValueFloat("inIrradianceMapIntensity",g),this.shader.setTexture("inIrradianceMap",h,a++),this.shader.setTexture("inSpecularMap0",l,a++),i>8?(this.shader.setTexture("inSpecularMap1",c,a++),this.shader.setTexture("inSpecularMap2",f,a++)):this.shader.setTexture("inSpecularMap1",c,a++),this.shader.setTexture("inBRDF",s,a++)}else console.warn("Using invalid material or no PBRMaterial on PBR renderer.")}},{},o)}(bg.base.Effect);bg.base.PBRForwardEffect=o}(),function(){var t=function(t){function e(t,n){$traceurRuntime.superConstructor(e).call(this,t,n),this._pipeline.effect=new bg.base.PBRForwardEffect(t)}return $traceurRuntime.createClass(e,{draw:function(t,n,i){$traceurRuntime.superGet(this,e.prototype,"draw").call(this,t,n,i)},willDraw:function(t,n){$traceurRuntime.superGet(this,e.prototype,"willDraw").call(this,t,n)},performDraw:function(t,n,i){$traceurRuntime.superGet(this,e.prototype,"performDraw").call(this,t,n,i)}},{},t)}(bg.render.ForwardRenderLayer);bg.render.PBRForwardRenderLayer=t}(),function(){var t=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t)}return $traceurRuntime.createClass(e,{create:function(){var t=this.context;this._transparentLayer=new bg.render.PBRForwardRenderLayer(this.context,bg.base.OpacityLayer.TRANSPARENT),this._opaqueLayer=new bg.render.PBRForwardRenderLayer(this.context,bg.base.OpacityLayer.OPAQUE),this._shadowMap=new bg.base.ShadowMap(t),this._shadowMap.size=new bg.Vector2(2048),this.settings.shadows.cascade=bg.base.ShadowCascade.NEAR,this._renderQueueVisitor=new bg.scene.RenderQueueVisitor},display:function(t,n){this._opaqueLayer.pipeline.effect.colorCorrection=this._settings.colorCorrection,this._transparentLayer.pipeline.effect.colorCorrection=this._settings.colorCorrection;var i=!1,r=bg.scene.Environment.Get();r&&r.environment&&r.environment.update(n),r&&r.environment&&r.environment.showSkybox&&(i=!0,r.environment.renderSkybox(n)),this._opaqueLayer.pipeline.buffersToClear=i?bg.base.ClearBuffers.DEPTH:bg.base.ClearBuffers.COLOR_DEPTH,$traceurRuntime.superGet(this,e.prototype,"draw").call(this,t,n)}},{},t)}(bg.render.ForwardRenderer);bg.render.PBRForwardRenderer=t}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter([{name:"inTexture",dataType:"sampler2D",role:"value"},{name:"inFrameSize",dataType:"vec2",role:"value"},{name:"inBorderAntiAlias",dataType:"int",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&(this._fragmentShaderSource.addFunction(t().functions.utils.texOffset),this._fragmentShaderSource.addFunction(t().functions.utils.luminance),this._fragmentShaderSource.addFunction(t().functions.utils.borderDetection),this._fragmentShaderSource.addFunction(t().functions.blur.textureDownsample),this._fragmentShaderSource.addFunction(t().functions.blur.gaussianBlur),this._fragmentShaderSource.addFunction(t().functions.blur.antiAlias),this._fragmentShaderSource.setMainBody("\n\t\t\t\t\t\tvec4 result = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\t\tif (inBorderAntiAlias==1) {\n\t\t\t\t\t\t\tresult = antiAlias(inTexture,fsTexCoord,inFrameSize,0.1,3);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresult = texture2D(inTexture,fsTexCoord);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgl_FragColor = result;\n\t\t\t\t\t\t"))),this._fragmentShaderSource},setupVars:function(){this.shader.setTexture("inTexture",this._surface.texture,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inFrameSize",this._surface.texture.size),this.shader.setValueInt("inBorderAntiAlias",0)},get settings(){return this._settings||(this._currentKernelSize=0,this._settings={refractionAmount:.01}),this._settings}},{},e)}(bg.base.TextureEffect);bg.render.PostprocessEffect=e}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter([{name:"inOpaque",dataType:"sampler2D",role:"value"},{name:"inTransparent",dataType:"sampler2D",role:"value"},{name:"inTransparentNormal",dataType:"sampler2D",role:"value"},{name:"inOpaqueDepth",dataType:"sampler2D",role:"value"},{name:"inTransparentDepth",dataType:"sampler2D",role:"value"},{name:"inRefractionAmount",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\t\tvec4 opaque = texture2D(inOpaque,fsTexCoord);\n\t\t\t\t\t\tvec4 transparent = texture2D(inTransparent,fsTexCoord);\n\t\t\t\t\t\tvec3 normal = texture2D(inTransparentNormal,fsTexCoord).rgb * 2.0 - 1.0;\n\t\t\t\t\t\tif (transparent.a>0.0) {\n\t\t\t\t\t\t\tfloat refractionFactor = inRefractionAmount / texture2D(inTransparentDepth,fsTexCoord).z;\n\t\t\t\t\t\t\tvec2 offset = fsTexCoord - normal.xy * refractionFactor;\n\t\t\t\t\t\t\tvec4 opaqueDepth = texture2D(inOpaqueDepth,offset);\n\t\t\t\t\t\t\tvec4 transparentDepth = texture2D(inTransparentDepth,offset);\n\t\t\t\t\t\t\t//if (opaqueDepth.w>transparentDepth.w) {\n\t\t\t\t\t\t\t\topaque = texture2D(inOpaque,offset);\n\t\t\t\t\t\t\t//}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvec3 color = opaque.rgb * (1.0 - transparent.a) + transparent.rgb * transparent.a;\n\t\t\t\t\t\tgl_FragColor = vec4(color, 1.0);\n\t\t\t\t\t\t")),this._fragmentShaderSource},setupVars:function(){this.shader.setTexture("inOpaque",this._surface.opaque,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inTransparent",this._surface.transparent,bg.base.TextureUnit.TEXTURE_1),this.shader.setTexture("inTransparentNormal",this._surface.transparentNormal,bg.base.TextureUnit.TEXTURE_2),this.shader.setTexture("inOpaqueDepth",this._surface.opaqueDepth,bg.base.TextureUnit.TEXTURE_3),this.shader.setTexture("inTransparentDepth",this._surface.transparentDepth,bg.base.TextureUnit.TEXTURE_4),this.shader.setValueFloat("inRefractionAmount",this.settings.refractionAmount)},get settings(){return this._settings||(this._currentKernelSize=0,this._settings={refractionAmount:-.05}),this._settings}},{},t)}(bg.base.TextureEffect);bg.render.RendererMixEffect=t}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n);var i=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX),r=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);i.addParameter([t().inputs.buffers.vertex,t().inputs.buffers.tex0,null,t().inputs.matrix.model,t().inputs.matrix.view,t().inputs.matrix.projection,{name:"inLightProjectionMatrix",dataType:"mat4",role:"value"},{name:"inLightViewMatrix",dataType:"mat4",role:"value"},null,{name:"fsTexCoord",dataType:"vec2",role:"out"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"out"}]),r.addParameter(t().inputs.shadows.all),r.addFunction(t().functions.utils.unpack),r.addFunction(t().functions.lighting.getShadowColor),r.addParameter([t().inputs.material.receiveShadows,t().inputs.material.texture,t().inputs.material.textureOffset,t().inputs.material.textureScale,t().inputs.material.alphaCutoff,null,{name:"fsTexCoord",dataType:"vec2",role:"in"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"in"}]),r.addFunction(t().functions.materials.samplerColor),"webgl1"==bg.Engine.Get().id&&(i.setMainBody("\n\t\t\t\t\tmat4 ScaleMatrix = mat4(0.5, 0.0, 0.0, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.0, 0.5, 0.0, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.0, 0.0, 0.5, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.5, 0.5, 0.5, 1.0);\n\t\t\t\t\t\n\t\t\t\t\tfsVertexPosFromLight = ScaleMatrix * inLightProjectionMatrix * inLightViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\tfsTexCoord = inTex0;\n\t\t\t\t\t\n\t\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);"),r.setMainBody("\n\t\t\t\t\tfloat alpha = samplerColor(inTexture,fsTexCoord,inTextureOffset,inTextureScale).a;\n\t\t\t\t\tif (alpha>inAlphaCutoff) {\n\t\t\t\t\t\tvec4 shadowColor = vec4(1.0, 1.0, 1.0, 1.0);\n\t\t\t\t\t\tif (inReceiveShadows) {\n\t\t\t\t\t\t\tshadowColor = getShadowColor(fsVertexPosFromLight,inShadowMap,inShadowMapSize,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t inShadowType,inShadowStrength,inShadowBias,inShadowColor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgl_FragColor = shadowColor;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tdiscard;\n\t\t\t\t\t}")),this.setupShaderSource([i,r])},{beginDraw:function(){if(this.light&&this.shadowMap){var t=bg.base.MatrixState.Current(),e=(new bg.Matrix4(t.viewMatrixStack.matrixConst),this.shadowMap.viewMatrix);this.shader.setMatrix4("inLightProjectionMatrix",this.shadowMap.projection),this.shader.setMatrix4("inLightViewMatrix",e),this.shader.setValueInt("inShadowType",this.shadowMap.shadowType),this.shader.setTexture("inShadowMap",this.shadowMap.texture,bg.base.TextureUnit.TEXTURE_1),this.shader.setVector2("inShadowMapSize",this.shadowMap.size),this.shader.setValueFloat("inShadowStrength",this.light.shadowStrength),this.shader.setVector4("inShadowColor",this.shadowMap.shadowColor),this.shader.setValueFloat("inShadowBias",this.light.shadowBias)}},setupVars:function(){if(this.material&&this.light){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst);var n=this.material.texture||bg.base.TextureCache.WhiteTexture(this.context);this.shader.setTexture("inTexture",n,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.textureScale),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff),this.shader.setValueInt("inReceiveShadows",this.material.receiveShadows)}},get material(){return this._material},set material(t){this._material=t},get light(){return this._light},set light(t){this._light=t},get shadowMap(){return this._shadowMap},set shadowMap(t){this._shadowMap=t}},{},e)}(bg.base.Effect);bg.render.ShadowEffect=e}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter([{name:"inViewportSize",dataType:"vec2",role:"value"},{name:"inPositionMap",dataType:"sampler2D",role:"value"},{name:"inNormalMap",dataType:"sampler2D",role:"value"},{name:"inProjectionMatrix",dataType:"mat4",role:"value"},{name:"inRandomMap",dataType:"sampler2D",role:"value"},{name:"inRandomMapSize",dataType:"vec2",role:"value"},{name:"inSampleRadius",dataType:"float",role:"value"},{name:"inKernelOffsets",dataType:"vec3",role:"value",vec:64},{name:"inKernelSize",dataType:"int",role:"value"},{name:"inSSAOColor",dataType:"vec4",role:"value"},{name:"inEnabled",dataType:"bool",role:"value"},{name:"inMaxDistance",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\tif (!inEnabled) discard;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvec4 normalTex = texture2D(inNormalMap,fsTexCoord);\n\t\t\t\t\t\tvec3 normal = normalTex.xyz * 2.0 - 1.0;\n\t\t\t\t\t\tvec4 vertexPos = texture2D(inPositionMap,fsTexCoord);\n\t\t\t\t\t\tif (distance(vertexPos.xyz,vec3(0))>inMaxDistance || vertexPos.w==1.0 || normalTex.a==0.0) {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvec2 noiseScale = vec2(inViewportSize.x/inRandomMapSize.x,inViewportSize.y/inRandomMapSize.y);\n\t\t\t\t\t\t\tvec3 randomVector = texture2D(inRandomMap, fsTexCoord * noiseScale).xyz * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec3 tangent = normalize(randomVector - normal * dot(randomVector, normal));\n\t\t\t\t\t\t\tvec3 bitangent = cross(normal,tangent);\n\t\t\t\t\t\t\tmat3 tbn = mat3(tangent, bitangent, normal);\n\n\t\t\t\t\t\t\tfloat occlusion = 0.0;\n\t\t\t\t\t\t\tfor (int i=0; i<64; ++i) {\n\t\t\t\t\t\t\t\tif (inKernelSize==i) break;\n\t\t\t\t\t\t\t\tvec3 samplePos = tbn * inKernelOffsets[i];\n\t\t\t\t\t\t\t\tsamplePos = samplePos * inSampleRadius + vertexPos.xyz;\n\n\t\t\t\t\t\t\t\tvec4 offset = inProjectionMatrix * vec4(samplePos, 1.0);\t// -w, w\n\t\t\t\t\t\t\t\toffset.xyz /= offset.w;\t// -1, 1\n\t\t\t\t\t\t\t\toffset.xyz = offset.xyz * 0.5 + 0.5;\t// 0, 1\n\n\t\t\t\t\t\t\t\tvec4 sampleRealPos = texture2D(inPositionMap, offset.xy);\n\t\t\t\t\t\t\t\tif (samplePos.z<sampleRealPos.z) {\n\t\t\t\t\t\t\t\t\tfloat dist = distance(vertexPos.xyz, sampleRealPos.xyz);\n\t\t\t\t\t\t\t\t\tocclusion += dist<inSampleRadius ? 1.0:0.0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tocclusion = 1.0 - (occlusion / float(inKernelSize));\n\t\t\t\t\t\t\tgl_FragColor = clamp(vec4(occlusion, occlusion, occlusion, 1.0) + inSSAOColor, 0.0, 1.0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}")),this._fragmentShaderSource},setupVars:function(){this.settings.kernelSize>64&&(this.settings.kernelSize=64),this.shader.setVector2("inViewportSize",new bg.Vector2(this.viewport.width,this.viewport.height)),this.shader.setTexture("inPositionMap",this._surface.position,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inNormalMap",this._surface.normal,bg.base.TextureUnit.TEXTURE_1),this.shader.setMatrix4("inProjectionMatrix",this.projectionMatrix),this.shader.setTexture("inRandomMap",this.randomMap,bg.base.TextureUnit.TEXTURE_2),this.shader.setVector2("inRandomMapSize",this.randomMap.size),this.shader.setValueFloat("inSampleRadius",this.settings.sampleRadius),this.shader.setVector3Ptr("inKernelOffsets",this.kernelOffsets),this.shader.setValueInt("inKernelSize",this.settings.kernelSize),this.shader.setVector4("inSSAOColor",this.settings.color),this.shader.setValueInt("inEnabled",this.settings.enabled),this.shader.setValueFloat("inMaxDistance",this.settings.maxDistance)},get viewport(){return this._viewport},set viewport(t){this._viewport=t},get projectionMatrix(){return this._projectionMatrix},set projectionMatrix(t){this._projectionMatrix=t},get randomMap(){return this._randomMap||(this._randomMap=bg.base.TextureCache.RandomTexture(this.context)),this._randomMap},set randomMap(t){this._randomMap=t},get settings(){return this._settings||(this._currentKernelSize=0,this._settings={kernelSize:32,sampleRadius:.3,color:bg.Color.Black(),blur:4,maxDistance:100,enabled:!0}),this._settings},get kernelOffsets(){if(this._currentKernelSize!=this.settings.kernelSize){this._kernelOffsets=[];for(var t=0;t<3*this.settings.kernelSize;t+=3){var e=new bg.Vector3(2*bg.Math.random()-1,2*bg.Math.random()-1,bg.Math.random());e.normalize();var n=t/3/this.settings.kernelSize;n=bg.Math.lerp(.1,1,n*n),e.scale(n),this._kernelOffsets.push(e.x),this._kernelOffsets.push(e.y),this._kernelOffsets.push(e.z)}this._currentKernelSize=this.settings.kernelSize}return this._kernelOffsets}},{},t)}(bg.base.TextureEffect);bg.render.SSAOEffect=t}(),function(){bg.render.RaytracerQuality={low:{maxSamples:50,rayIncrement:.025},mid:{maxSamples:100,rayIncrement:.0125},high:{maxSamples:200,rayIncrement:.0062},extreme:{maxSamples:300,rayIncrement:.0031}};var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._basic=!1,this._viewportSize=new bg.Vector2(1920,1080),this._frameIndex=0},{get fragmentShaderSource(){if(!this._fragmentShaderSource){this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);var t=this.quality;this._fragmentShaderSource.addParameter([{name:"inPositionMap",dataType:"sampler2D",role:"value"},{name:"inSpecularMap",dataType:"sampler2D",role:"value"},{name:"inNormalMap",dataType:"sampler2D",role:"value"},{name:"inLightingMap",dataType:"sampler2D",role:"value"},{name:"inMaterialMap",dataType:"sampler2D",role:"value"},{name:"inSamplePosMap",dataType:"sampler2D",role:"value"},{name:"inProjectionMatrix",dataType:"mat4",role:"value"},{name:"inCameraPos",dataType:"vec3",role:"value"},{name:"inRayFailColor",dataType:"vec4",role:"value"},{name:"inBasicMode",dataType:"bool",role:"value"},{name:"inFrameIndex",dataType:"float",role:"value"},{name:"inCubeMap",dataType:"samplerCube",role:"value"},{name:"inRandomTexture",dataType:"sampler2D",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),this._fragmentShaderSource.addFunction(bg.base.ShaderLibrary.Get().functions.utils.random),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\t\tvec2 p = vec2(floor(gl_FragCoord.x), floor(gl_FragCoord.y));\n\t\t\t\t\t\tbool renderFrame = false;\n\t\t\t\t\t\tif (inFrameIndex==0.0 && mod(p.x,2.0)==0.0 && mod(p.y,2.0)==0.0) {\n\t\t\t\t\t\t\trenderFrame = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (inFrameIndex==1.0 && mod(p.x,2.0)==0.0 && mod(p.y,2.0)!=0.0) {\n\t\t\t\t\t\t\trenderFrame = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (inFrameIndex==2.0 && mod(p.x,2.0)!=0.0 && mod(p.y,2.0)==0.0) {\n\t\t\t\t\t\t\trenderFrame = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (inFrameIndex==3.0 && mod(p.x,2.0)!=0.0 && mod(p.y,2.0)!=0.0) {\n\t\t\t\t\t\t\trenderFrame = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvec4 material = texture2D(inMaterialMap,fsTexCoord);\n\t\t\t\t\t\tif (renderFrame && material.b>0.0) {\t// material[2] is reflectionAmount\n\t\t\t\t\t\t\tvec3 normal = texture2D(inNormalMap,fsTexCoord).xyz * 2.0 - 1.0;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvec4 specular = texture2D(inSpecularMap,fsTexCoord);\n\t\t\t\t\t\t\tfloat roughness = specular.a * 0.3;\n\t\t\t\t\t\t\tvec3 r = texture2D(inRandomTexture,fsTexCoord*200.0).xyz * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec3 roughnessFactor = normalize(r) * roughness;\n\t\t\t\t\t\t\tnormal = normal + roughnessFactor;\n\t\t\t\t\t\t\tvec4 vertexPos = texture2D(inPositionMap,fsTexCoord);\n\t\t\t\t\t\t\tvec3 cameraVector = vertexPos.xyz - inCameraPos;\n\t\t\t\t\t\t\tvec3 rayDirection = reflect(cameraVector,normal);\n\t\t\t\t\t\t\tvec4 lighting = texture2D(inLightingMap,fsTexCoord);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvec4 rayFailColor = inRayFailColor;\n\t\n\t\t\t\t\t\t\tvec3 lookup = reflect(cameraVector,normal);\n\t\t\t\t\t\t\trayFailColor = textureCube(inCubeMap, lookup);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat increment = "+t.rayIncrement+";\n\t\t\t\t\t\t\tvec4 result = rayFailColor;\n\t\t\t\t\t\t\tif (!inBasicMode) {\n\t\t\t\t\t\t\t\tresult = rayFailColor;\n\t\t\t\t\t\t\t\tfor (float i=0.0; i<"+t.maxSamples+".0; ++i) {\n\t\t\t\t\t\t\t\t\tif (i=="+t.maxSamples+".0) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\t\tfloat radius = i * increment;\n\t\t\t\t\t\t\t\t\tincrement *= 1.01;\n\t\t\t\t\t\t\t\t\tvec3 ray = vertexPos.xyz + rayDirection * radius;\n\t\n\t\t\t\t\t\t\t\t\tvec4 offset = inProjectionMatrix * vec4(ray, 1.0);\t// -w, w\n\t\t\t\t\t\t\t\t\toffset.xyz /= offset.w;\t// -1, 1\n\t\t\t\t\t\t\t\t\toffset.xyz = offset.xyz * 0.5 + 0.5;\t// 0, 1\n\t\n\t\t\t\t\t\t\t\t\tvec4 rayActualPos = texture2D(inSamplePosMap, offset.xy);\n\t\t\t\t\t\t\t\t\tfloat hitDistance = rayActualPos.z - ray.z;\n\t\t\t\t\t\t\t\t\tif (offset.x>1.0 || offset.y>1.0 || offset.x<0.0 || offset.y<0.0) {\n\t\t\t\t\t\t\t\t\t\tresult = rayFailColor;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (hitDistance>0.02 && hitDistance<0.15) {\n\t\t\t\t\t\t\t\t\t\tresult = texture2D(inLightingMap,offset.xy);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (result.a==0.0) {\n\t\t\t\t\t\t\t\tgl_FragColor = rayFailColor;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tgl_FragColor = result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t}")}return this._fragmentShaderSource},setupVars:function(){this._frameIndex=(this._frameIndex+1)%4,this.shader.setTexture("inPositionMap",this._surface.position,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inNormalMap",this._surface.normal,bg.base.TextureUnit.TEXTURE_1),this.shader.setTexture("inLightingMap",this._surface.reflectionColor,bg.base.TextureUnit.TEXTURE_2),this.shader.setTexture("inMaterialMap",this._surface.material,bg.base.TextureUnit.TEXTURE_3),this.shader.setTexture("inSamplePosMap",this._surface.reflectionDepth,bg.base.TextureUnit.TEXTURE_4),this.shader.setMatrix4("inProjectionMatrix",this._projectionMatrix),this.shader.setVector3("inCameraPos",this._cameraPos),this.shader.setVector4("inRayFailColor",this.rayFailColor),this.shader.setValueInt("inBasicMode",this.basic),this.shader.setValueFloat("inFrameIndex",this._frameIndex),this.shader.setTexture("inCubeMap",bg.scene.Cubemap.Current(this.context),bg.base.TextureUnit.TEXTURE_5),this._randomTexture||(this._randomTexture=bg.base.TextureCache.RandomTexture(this.context,new bg.Vector2(1024))),this.shader.setTexture("inRandomTexture",this._randomTexture,bg.base.TextureUnit.TEXTURE_6),this.shader.setTexture("inSpecularMap",this._surface.specular,bg.base.TextureUnit.TEXTURE_7)},get projectionMatrix(){return this._projectionMatrix},set projectionMatrix(t){this._projectionMatrix=t},get cameraPosition(){return this._cameraPos},set cameraPosition(t){this._cameraPos=t},get rayFailColor(){return this._rayFailColor||bg.Color.Black()},set rayFailColor(t){this._rayFailColor=t},get viewportSize(){return this._viewportSize},set viewportSize(t){this._viewportSize=t},get quality(){return this._quality||bg.render.RaytracerQuality.low},set quality(t){this._quality&&this._quality.maxSamples==t.maxSamples&&this._quality.rayIncrement==t.rayIncrement||(this._quality=t,this._fragmentShaderSource=null,this.rebuildShaders())},get basic(){return this._basic},set basic(t){this._basic=t},get settings(){return this._settings,this._settings}},{},t)}(bg.base.TextureEffect);bg.render.SSRTEffect=t}(),bg.webgl1={},function(){var t="webgl1";bg.webgl1.EngineId=t;var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n),bg.webgl1.Extensions.Get(n),this._engineId=t,this._texture=new bg.webgl1.TextureImpl(n),this._pipeline=new bg.webgl1.PipelineImpl(n),this._polyList=new bg.webgl1.PolyListImpl(n),this._shader=new bg.webgl1.ShaderImpl(n),this._colorBuffer=new bg.webgl1.ColorRenderSurfaceImpl(n),this._textureBuffer=new bg.webgl1.TextureRenderSurfaceImpl(n),this._shaderSource=new bg.webgl1.ShaderSourceImpl,this._cubemapCapture=new bg.webgl1.CubemapCaptureImpl},{createTextureMergerInstance:function(){return new bg.webgl1.TextureMergerImpl}},{},e)}(bg.Engine);bg.webgl1.Engine=e}(),function(){bg.webgl1.shaderLibrary={inputs:{},functions:{}};var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{header:function(t){return"precision highp float;\nprecision highp int;"},parameter:function(t,e){if(!e)return"\n";var n="";switch(e.role){case"buffer":n="attribute";break;case"value":n="uniform";break;case"in":case"out":n="varying"}var i="";return e.vec&&(i="["+e.vec+"]"),n+" "+e.dataType+" "+e.name+i+";"},func:function(t,e){if(!e)return"\n";var n="";for(var i in e.params)n+=e.params[i]+" "+i+",";return(e.returnType+" "+e.name+"("+n+") {").replace(",)",")")+("\n"+bg.base.ShaderSource.FormatSource(e.body)).replace(/\n/g,"\n\t")+"\n}"}},{},t)}(bg.base.ShaderSourceImpl);bg.webgl1.ShaderSourceImpl=t}(),function(){var t=[bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(1,0,0),new bg.Vector3(0,-1,0)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(-1,0,0),new bg.Vector3(0,-1,0)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(0,1,0),new bg.Vector3(0,0,1)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(0,-1,0),new bg.Vector3(0,0,-1)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(0,0,1),new bg.Vector3(0,-1,0)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(0,0,-1),new bg.Vector3(0,-1,0))],e=bg.Matrix4.Perspective(90,1,.1,1e3),n=function(n){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{createCaptureBuffers:function(t,e){var n={fbo:t.createFramebuffer(),rbo:t.createRenderbuffer(),texture:null,size:e};t.bindFramebuffer(t.FRAMEBUFFER,n.fbo),t.bindRenderbuffer(t.RENDERBUFFER,n.rbo),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e,e),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,n.rbo),n.texture=new bg.base.Texture(t),n.texture.target=bg.base.TextureTarget.CUBE_MAP,n.texture.create(),n.texture.bind();for(var i=0;i<6;++i)t.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,t.RGB,e,e,0,t.RGB,t.UNSIGNED_BYTE,null);return t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,t.LINEAR),n.texture.unbind(),n.texture._size=new bg.Vector2(e),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindRenderbuffer(t.RENDERBUFFER,null),n},beginRender:function(t,e){e._currentViewport=bg.base.Pipeline.Current()?bg.base.Pipeline.Current().viewport:new bg.Viewport(0,0,512,512),t.bindFramebuffer(t.FRAMEBUFFER,e.fbo)},beginRenderFace:function(n,i,r,a){var s=r.texture.texture;n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_CUBE_MAP_POSITIVE_X+i,s,0),n.clearColor(0,0,0,1),n.viewport(0,0,r.size,r.size),n.clear(n.COLOR_BUFFER_BIT|n.DEPTH_BUFFER_BIT),n.disable(n.CULL_FACE);var o=new bg.Matrix4(t[i]);return o.mult(a),{view:o,projection:e}},endRenderFace:function(t,e,n){},endRender:function(t,e){t.viewport(e._currentViewport.x,e._currentViewport.y,e._currentViewport.width,e._currentViewport.height),t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.CULL_FACE)},getTexture:function(t,e){return e.texture},destroy:function(t,e){}},{},n)}(bg.base.CubemapCaptureImpl);bg.webgl1.CubemapCaptureImpl=n}(),function(){var t=null,e=function(e){function n(t){$traceurRuntime.superConstructor(n).call(this,t)}return $traceurRuntime.createClass(n,{getExtension:function(t){return this.context.getExtension(t)},get textureFloat(){return void 0===this._textureFloat&&(this._textureFloat=this.getExtension("OES_texture_float")),this._textureFloat},get depthTexture(){return void 0===this._depthTexture&&(this._depthTexture=this.getExtension("WEBGL_depth_texture")),this._depthTexture},get drawBuffers(){return void 0===this._drawBuffers&&(this._drawBuffers=this.getExtension("WEBGL_draw_buffers")),this._drawBuffers}},{Get:function(e){return t||(t=new n(e)),t}},e)}(bg.app.ContextObject);bg.webgl1.Extensions=e}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){bg.base.ClearBuffers.COLOR=t.COLOR_BUFFER_BIT,bg.base.ClearBuffers.DEPTH=t.DEPTH_BUFFER_BIT},setViewport:function(t,e){t.viewport(e.x,e.y,e.width,e.height)},clearBuffers:function(t,e,n){t.clearColor(e.r,e.g,e.b,e.a),n&&t.clear(n)},setDepthTestEnabled:function(t,e){e?t.enable(t.DEPTH_TEST):t.disable(t.DEPTH_TEST)},setCullFace:function(t,e){e?t.enable(t.CULL_FACE):t.disable(t.CULL_FACE)},setBlendEnabled:function(t,e){e?t.enable(t.BLEND):t.disable(t.BLEND)},setBlendMode:function(t,e){switch(e){case bg.base.BlendMode.NORMAL:t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA),t.blendEquation(t.FUNC_ADD);break;case bg.base.BlendMode.MULTIPLY:t.blendFunc(t.ZERO,t.SRC_COLOR),t.blendEquation(t.FUNC_ADD);break;case bg.base.BlendMode.ADD:t.blendFunc(t.ONE,t.ONE),t.blendEquation(t.FUNC_ADD);break;case bg.base.BlendMode.SUBTRACT:t.blendFunc(t.ONE,t.ONE),t.blendEquation(t.FUNC_SUBTRACT);break;case bg.base.BlendMode.ALPHA_ADD:t.blendFunc(t.SRC_ALPHA,t.SRC_ALPHA),t.blendEquation(t.FUNC_ADD);break;case bg.base.BlendMode.ALPHA_SUBTRACT:t.blendFunc(t.SRC_ALPHA,t.SRC_ALPHA),t.blendEquation(t.FUNC_SUBTRACT)}}},{},t)}(bg.base.PipelineImpl);bg.webgl1.PipelineImpl=t}(),function(){function t(t,e,n,i){var r=null;return e.length&&(r=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,r),t.bufferData(t.ARRAY_BUFFER,new Float32Array(e),i),r.itemSize=n,r.numItems=e.length/n),r}function e(t,e){return e&&t.deleteBuffer(e),null}var n=!1,i=function(i){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){bg.base.DrawMode.TRIANGLES=t.TRIANGLES,bg.base.DrawMode.TRIANGLE_FAN=t.TRIANGLE_FAN,bg.base.DrawMode.TRIANGLE_STRIP=t.TRIANGLE_STRIP,bg.base.DrawMode.LINES=t.LINES,bg.base.DrawMode.LINE_STRIP=t.LINE_STRIP,n=t.getExtension("OES_element_index_uint")},create:function(t){return{vertexBuffer:null,normalBuffer:null,tex0Buffer:null,tex1Buffer:null,tex2Buffer:null,colorBuffer:null,tangentBuffer:null,indexBuffer:null}},build:function(e,i,r,a,s,o,u,h,l,c){return i.vertexBuffer=t(e,r,3,e.STATIC_DRAW),i.normalBuffer=t(e,a,3,e.STATIC_DRAW),i.tex0Buffer=t(e,s,2,e.STATIC_DRAW),i.tex1Buffer=t(e,o,2,e.STATIC_DRAW),i.tex2Buffer=t(e,u,2,e.STATIC_DRAW),i.colorBuffer=t(e,h,4,e.STATIC_DRAW),i.tangentBuffer=t(e,l,3,e.STATIC_DRAW),c.length>0&&n?(i.indexBuffer=e.createBuffer(),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Uint32Array(c),e.STATIC_DRAW),i.indexBuffer.itemSize=3,i.indexBuffer.numItems=c.length):(i.indexBuffer=e.createBuffer(),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Uint16Array(c),e.STATIC_DRAW),i.indexBuffer.itemSize=3,i.indexBuffer.numItems=c.length),i.vertexBuffer&&i.indexBuffer},draw:function(t,e,i,r){t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),n?t.drawElements(i,r,t.UNSIGNED_INT,0):t.drawElements(i,r,t.UNSIGNED_SHORT,0)},destroy:function(t,n){t.bindBuffer(t.ARRAY_BUFFER,null),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null),n.vertexBuffer=e(t,n.vertexBuffer),n.normalBuffer=e(t,n.normalBuffer),n.tex0Buffer=e(t,n.tex0Buffer),n.tex1Buffer=e(t,n.tex1Buffer),n.tex2Buffer=e(t,n.tex2Buffer),n.colorBuffer=e(t,n.colorBuffer),n.tangentBuffer=e(t,n.tangentBuffer),n.indexBuffer=e(t,n.indexBuffer)},update:function(t,e,i,r){if(i==bg.base.BufferType.INDEX)n?(t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,new Uint32Array(index),t.STATIC_DRAW)):(t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,new Uint16Array(index),t.STATIC_DRAW)),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);else{switch(i){case bg.base.BufferType.VERTEX:t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer);break;case bg.base.BufferType.NORMAL:t.bindBuffer(t.ARRAY_BUFFER,e.normalBuffer);break;case bg.base.BufferType.TEX_COORD_0:t.bindBuffer(t.ARRAY_BUFFER,e.tex0Buffer);break;case bg.base.BufferType.TEX_COORD_1:t.bindBuffer(t.ARRAY_BUFFER,e.tex1Buffer);break;case bg.base.BufferType.TEX_COORD_2:t.bindBuffer(t.ARRAY_BUFFER,e.tex2Buffer);break;case bg.base.BufferType.COLOR:t.bindBuffer(t.ARRAY_BUFFER,e.colorBuffer);break;case bg.base.BufferType.TANGENT:t.bindBuffer(t.ARRAY_BUFFER,e.tangentBuffer)}t.bufferData(t.ARRAY_BUFFER,new Float32Array(r),t.STATIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null)}}},{},i)}(bg.base.PolyListImpl);bg.webgl1.PolyListImpl=i}(),function(){var t=null;function e(){return t.drawBuffers?t.drawBuffers.MAX_COLOR_ATTACHMENTS||t.drawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL:1}function n(n){var i=0,r=e(),a=null;return n.every(function(e,s){return function(t){switch(!0){case t.type==bg.base.RenderSurfaceType.RGBA&&t.format==bg.base.RenderSurfaceFormat.UNSIGNED_BYTE:case t.type==bg.base.RenderSurfaceType.RGBA&&t.format==bg.base.RenderSurfaceFormat.FLOAT:case t.type==bg.base.RenderSurfaceType.DEPTH&&t.format==bg.base.RenderSurfaceFormat.RENDERBUFFER:case t.type==bg.base.RenderSurfaceType.DEPTH&&t.format==bg.base.RenderSurfaceFormat.UNSIGNED_SHORT:return!0;default:return!1}}(e)?e.type==bg.base.RenderSurfaceType.DEPTH&&s!=n.length-1?(a="Error in attachment "+s+": Depth attachment must be specified as the last attachment. Specified at index "+s+" of "+(n.length-1),!1):(e.type==bg.base.RenderSurfaceType.RGBA&&++i,e.format!=bg.base.RenderSurfaceFormat.FLOAT||t.textureFloat?e.type!=bg.base.RenderSurfaceType.DEPTH||e.format==bg.base.RenderSurfaceFormat.RENDERBUFFER||t.depthTexture?!(i>r)||(a="Error in attachment "+s+": Maximum number of "+r+" color attachment exceeded.",!1):(a="Error in attachment "+s+": Depth texture attachment requested, but the requiered extension is not present: WEBGL_depth_texture.",!1):(a="Error in attachment "+s+": Floating point render surface requested, but the required extension is not present: OES_texture_float.",!1)):(a="Error in attachment "+s+": Invalid combination of type and format ("+function(t){switch(t){case bg.base.RenderSurfaceType.RGBA:return"RGBA";case bg.base.RenderSurfaceType.DEPTH:return"DEPTH";default:return"unknown"}}(e.type)+" is incompatible with "+function(t){switch(t){case bg.base.RenderSurfaceFormat.UNSIGNED_BYTE:return"UNSIGNED_BYTE";case bg.base.RenderSurfaceFormat.FLOAT:return"FLOAT";case bg.base.RenderSurfaceFormat.RENDERBUFFER:return"RENDERBUFFER";case bg.base.RenderSurfaceFormat.UNSIGNED_SHORT:return"UNSIGNED_SHORT";default:return"unknown"}}(e.format)+").",!1)}),a}var i=function(n){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(e){bg.base.RenderSurfaceType.RGBA=e.RGBA,bg.base.RenderSurfaceType.DEPTH=e.DEPTH_COMPONENT,bg.base.RenderSurfaceFormat.UNSIGNED_BYTE=e.UNSIGNED_BYTE,bg.base.RenderSurfaceFormat.UNSIGNED_SHORT=e.UNSIGNED_SHORT,bg.base.RenderSurfaceFormat.FLOAT=e.FLOAT,bg.base.RenderSurfaceFormat.RENDERBUFFER=e.RENDERBUFFER,t=bg.webgl1.Extensions.Get()},supportType:function(e){switch(e){case bg.base.RenderSurfaceType.RGBA:return!0;case bg.base.RenderSurfaceType.DEPTH:return null!=t.depthTexture;default:return!1}},supportFormat:function(e){switch(e){case bg.base.RenderSurfaceFormat.UNSIGNED_BYTE:case bg.base.RenderSurfaceFormat.UNSIGNED_SHORT:return!0;case bg.base.RenderSurfaceFormat.FLOAT:return null!=t.textureFloat;default:return!1}},get maxColorAttachments(){return e()}},{},n)}(bg.base.RenderSurfaceBufferImpl),r=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{create:function(t){return{}},setActive:function(t,e,n){t.bindFramebuffer(t.FRAMEBUFFER,null)},resize:function(t,e,n){},destroy:function(t,e){},readBuffer:function(t,e,n,i){var r=new Uint8Array(n.width*n.height*4);return t.readPixels(n.x,n.y,n.width,n.height,t.RGBA,t.UNSIGNED_BYTE,r),r}},{},t)}(i);bg.webgl1.ColorRenderSurfaceImpl=r;var a=function(e){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){},create:function(e,i){var r=n(i);if(r)throw new Error(r);var a=new bg.Vector2(256),s={fbo:e.createFramebuffer(),size:a,attachments:[]};e.bindFramebuffer(e.FRAMEBUFFER,s.fbo);var o=[];return i.forEach(function(n,i){var r=function(t,e,n,i){if(n.format==bg.base.RenderSurfaceFormat.RENDERBUFFER){var r=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,r),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.width,e.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,r),t.bindRenderbuffer(t.RENDERBUFFER,null),{_renderbuffer:r}}var a=new bg.base.Texture(t),s=n.format,o=n.type;return a.create(),a.bind(),a.minFilter=bg.base.TextureFilter.LINEAR,a.magFilter=bg.base.TextureFilter.LINEAR,a.wrapX=bg.base.TextureWrap.CLAMP,a.wrapY=bg.base.TextureWrap.CLAMP,a.setImageRaw(e.width,e.height,null,o,s),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0+i,t.TEXTURE_2D,a._texture,0),a.unbind(),a}(e,a,n,i);r instanceof bg.base.Texture&&o.push(t.drawBuffers?t.drawBuffers.COLOR_ATTACHMENT0_WEBGL+i:e.COLOR_ATTACHMENT0),s.attachments.push({texture:r instanceof bg.base.Texture?r:null,renderbuffer:r instanceof bg.base.Texture?null:r,format:n.format,type:n.type})}),o.length>1&&t.drawBuffers.drawBuffersWEBGL(o),e.bindFramebuffer(e.FRAMEBUFFER,null),s},setActive:function(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e.fbo)},readBuffer:function(t,e,n,i){var r=new Uint8Array(n.width*n.height*4);return t.readPixels(n.x,i.height-n.y,n.width,n.height,t.RGBA,t.UNSIGNED_BYTE,r),r},resize:function(t,e,n){e.size.width=n.width,e.size.height=n.height,e.attachments.forEach(function(e,i){!function(t,e,n,i){if(n.texture&&(n.texture.bind(),n.texture.setImageRaw(e.width,e.height,null,n.type,n.format),n.texture.unbind()),n.renderbuffer){var r=n.renderbuffer._renderbuffer;t.bindRenderbuffer(t.RENDERBUFFER,r),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.width,e.height),t.bindRenderbuffer(t.RENDERBUFFER,null)}}(t,n,e)})},destroy:function(t,e){t.bindFramebuffer(t.FRAMEBUFFER,null);var n=e&&e.attachments;e.fbo&&t.deleteFramebuffer(e.fbo),n&&n.forEach(function(e){e.texture?e.texture.destroy():e.renderbuffer&&t.deleteRenderbuffer(e.renderbuffer._renderbuffer)}),e.fbo=null,e.size=null,e.attachments=null}},{},e)}(i);bg.webgl1.TextureRenderSurfaceImpl=a}(),function(){var t={textureInput:"sampler2D",texCoord:"vec2",size:"int",samplerSize:"vec2"},e="\n\t\tint downsample = 15;\n\t\tvec2 texelSize = 1.0 / samplerSize;\n\t\tvec3 result = vec3(0.0);\n\t\tsize = int(max(float(size / downsample),1.0));\n\t\tvec2 hlim = vec2(float(-size) * 0.5 + 0.5);\n\t\tvec2 sign = vec2(1.0);\n\t\tfloat blurFactor = 10.0 - 0.2 * float(size) * log(float(size));\n\t\tfor (int x=0; x<40; ++x) {\n\t\t\tif (x==size) break;\n\t\t\tfor (int y=0; y<40; ++y) {\n\t\t\t\tif (y==size) break;\n\t\t\t\tvec2 offset = (hlim + vec2(float(x), float(y))) * texelSize * float(downsample) / blurFactor;\n\t\t\t\tresult += textureDownsample(textureInput, texCoord + offset,samplerSize,vec2(downsample)).rgb;\n\t\t\t}\n\t\t}\n\t\treturn vec4(result / float(size * size), 1.0);\n\t\t";bg.webgl1.shaderLibrary.functions.blur={textureDownsample:{returnType:"vec4",name:"textureDownsample",params:{textureInput:"sampler2D",texCoord:"vec2",size:"vec2",reduction:"vec2"},body:"\n\t\tfloat dx = reduction.x / size.x;\n\t\tfloat dy = reduction.y / size.y;\n\t\tvec2 coord = vec2(dx * texCoord.x / dx, dy * texCoord.y / dy);\n\t\treturn texture2D(textureInput,coord);\n\t"},gaussianBlur:{returnType:"vec4",name:"gaussianBlur",params:t,body:e},blur:{returnType:"vec4",name:"blur",params:t,body:e},glowBlur:{returnType:"vec4",name:"glowBlur",params:{textureInput:"sampler2D",texCoord:"vec2",size:"int",samplerSize:"vec2"},body:"\n\t\tint downsample = 15;\n\t\tvec2 texelSize = 1.0 / samplerSize;\n\t\tvec3 result = vec3(0.0);\n\t\tsize = int(max(float(size / downsample),1.0));\n\t\tvec2 hlim = vec2(float(-size) * 0.5 + 0.5);\n\t\tvec2 sign = vec2(1.0);\n\t\tfor (int x=0; x<40; ++x) {\n\t\t\tif (x==size) break;\n\t\t\tfor (int y=0; y<40; ++y) {\n\t\t\t\tif (y==size) break;\n\t\t\t\tvec2 offset = (hlim + vec2(float(x), float(y))) * texelSize;\n\t\t\t\tresult += textureDownsample(textureInput, texCoord + offset,samplerSize,vec2(downsample)).rgb;\n\t\t\t}\n\t\t}\n\t\treturn vec4(result / float(size * size), 1.0);\n\t"},blurCube:{returnType:"vec4",name:"blurCube",params:{textureInput:"samplerCube",texCoord:"vec3",size:"int",samplerSize:"vec2",dist:"float"},body:"\n\t\tint downsample = int(max(1.0,dist));\n\t\tvec2 texelSize = 1.0 / samplerSize;\n\t\tvec3 result = vec3(0.0);\n\t\tsize = int(max(float(size / downsample),1.0));\n\t\tvec2 hlim = vec2(float(-size) * 0.5 + 0.5);\n\t\tvec2 sign = vec2(1.0);\n\t\tfor (int x=0; x<40; ++x) {\n\t\t\tif (x==size) break;\n\t\t\tfor (int y=0; y<40; ++y) {\n\t\t\t\tif (y==size) break;\n\t\t\t\tvec3 offset = vec3((hlim + vec2(float(x*downsample), float(y*downsample))) * texelSize,0.0);\n\t\t\t\tresult += textureCube(textureInput, texCoord + offset,2.0).rgb;\n\t\t\t}\n\t\t}\n\t\treturn vec4(result / float(size * size), 1.0);\n\t\t"},antiAlias:{returnType:"vec4",name:"antiAlias",params:{sampler:"sampler2D",texCoord:"vec2",frameSize:"vec2",tresshold:"float",iterations:"int"},body:"\n\t\t\t\treturn (borderDetection(sampler,texCoord,frameSize)>tresshold) ?\n\t\t\t\t\tgaussianBlur(sampler,texCoord,iterations,frameSize) :\n\t\t\t\t\ttexture2D(sampler,texCoord);\n\t\t\t\t"}}}(),bg.webgl1.shaderLibrary.functions.colorCorrection={rgb2hsv:{returnType:"vec3",name:"rgb2hsv",params:{c:"vec3"},body:"\n\t\t\t\tvec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n\t\t\t\tvec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\n\t\t\t\tvec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\n\n\t\t\t\tfloat d = q.x - min(q.w, q.y);\n\t\t\t\tfloat e = 1.0e-10;\n\t\t\t\treturn vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);"},hsv2rgb:{returnType:"vec3",name:"hsv2rgb",params:{c:"vec3"},body:"\n\t\t\t\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\t\t\t\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\t\t\t\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);"},applyBrightness:{returnType:"vec4",name:"applyBrightness",params:{color:"vec4",brightness:"float"},body:"\n\t\t\t\t\treturn clamp(vec4(color.rgb + brightness - 0.5,1.0),0.0,1.0);\n\t\t\t\t"},applyContrast:{returnType:"vec4",name:"applyContrast",params:{color:"vec4",contrast:"float"},body:"\n\t\t\t\treturn clamp(vec4((color.rgb * max(contrast + 0.5,0.0)),1.0),0.0,1.0);"},applySaturation:{returnType:"vec4",name:"applySaturation",params:{color:"vec4",hue:"float",saturation:"float",lightness:"float"},body:"\n\t\t\t\tvec3 fragRGB = clamp(color.rgb + vec3(0.001),0.0,1.0);\n\t\t\t\tvec3 fragHSV = rgb2hsv(fragRGB);\n\t\t\t\tlightness -= 0.01;\n\t\t\t\tfloat h = hue;\n\t\t\t\tfragHSV.x *= h;\n\t\t\t\tfragHSV.yz *= vec2(saturation,lightness);\n\t\t\t\tfragHSV.x = mod(fragHSV.x, 1.0);\n\t\t\t\tfragHSV.y = mod(fragHSV.y, 1.0);\n\t\t\t\tfragHSV.z = mod(fragHSV.z, 1.0);\n\t\t\t\tfragRGB = hsv2rgb(fragHSV);\n\t\t\t\treturn clamp(vec4(hsv2rgb(fragHSV), color.w),0.0,1.0);"},colorCorrection:{returnType:"vec4",name:"colorCorrection",params:{fragColor:"vec4",hue:"float",saturation:"float",lightness:"float",brightness:"float",contrast:"float"},body:"\n\t\t\t\treturn applyContrast(applyBrightness(applySaturation(fragColor,hue,saturation,lightness),brightness),contrast);"},brightnessMatrix:{returnType:"mat4",name:"brightnessMatrix",params:{brightness:"float"},body:"\n\t\t\t\treturn mat4( 1, 0, 0, 0,\n\t\t\t\t\t0, 1, 0, 0,\n\t\t\t\t\t0, 0, 1, 0,\n\t\t\t\t\tbrightness, brightness, brightness, 1 );\n\t\t\t\t"},contrastMatrix:{returnType:"mat4",name:"contrastMatrix",params:{contrast:"float"},body:"\n\t\t\t\tfloat t = ( 1.0 - contrast ) / 2.0;\n\t\t\t\treturn mat4( contrast, 0, 0, 0,\n\t\t\t\t\t0, contrast, 0, 0,\n\t\t\t\t\t0, 0, contrast, 0,\n\t\t\t\t\tt, t, t, 1 );\n\t\t\t\t"},saturationMatrix:{returnType:"mat4",name:"saturationMatrix",params:{saturation:"float"},body:"\n\t\t\t\tvec3 luminance = vec3( 0.3086, 0.6094, 0.0820 );\n \n\t\t\t\tfloat oneMinusSat = 1.0 - saturation;\n\t\t\t\t\n\t\t\t\tvec3 red = vec3( luminance.x * oneMinusSat );\n\t\t\t\tred+= vec3( saturation, 0, 0 );\n\t\t\t\t\n\t\t\t\tvec3 green = vec3( luminance.y * oneMinusSat );\n\t\t\t\tgreen += vec3( 0, saturation, 0 );\n\t\t\t\t\n\t\t\t\tvec3 blue = vec3( luminance.z * oneMinusSat );\n\t\t\t\tblue += vec3( 0, 0, saturation );\n\t\t\t\t\n\t\t\t\treturn mat4( red, 0,\n\t\t\t\t\t\t\tgreen, 0,\n\t\t\t\t\t\t\tblue, 0,\n\t\t\t\t\t\t\t0, 0, 0, 1 );\n\t\t\t\t"}},bg.webgl1.shaderLibrary.inputs={buffers:{vertex:{name:"inVertex",dataType:"vec3",role:"buffer",target:"vertex"},normal:{name:"inNormal",dataType:"vec3",role:"buffer",target:"normal"},tangent:{name:"inTangent",dataType:"vec3",role:"buffer",target:"tangent"},tex0:{name:"inTex0",dataType:"vec2",role:"buffer",target:"tex0"},tex1:{name:"inTex1",dataType:"vec2",role:"buffer",target:"tex1"},tex2:{name:"inTex2",dataType:"vec2",role:"buffer",target:"tex2"},color:{name:"inColor",dataType:"vec4",role:"buffer",target:"color"}},matrix:{model:{name:"inModelMatrix",dataType:"mat4",role:"value"},view:{name:"inViewMatrix",dataType:"mat4",role:"value"},projection:{name:"inProjectionMatrix",dataType:"mat4",role:"value"},normal:{name:"inNormalMatrix",dataType:"mat4",role:"value"},viewInv:{name:"inViewMatrixInv",dataType:"mat4",role:"value"}},material:{diffuse:{name:"inDiffuseColor",dataType:"vec4",role:"value"},specular:{name:"inSpecularColor",dataType:"vec4",role:"value"},shininess:{name:"inShininess",dataType:"float",role:"value"},shininessMask:{name:"inShininessMask",dataType:"sampler2D",role:"value"},shininessMaskChannel:{name:"inShininessMaskChannel",dataType:"vec4",role:"value"},shininessMaskInvert:{name:"inShininessMaskInvert",dataType:"bool",role:"value"},lightEmission:{name:"inLightEmission",dataType:"float",role:"value"},lightEmissionMask:{name:"inLightEmissionMask",dataType:"sampler2D",role:"value"},lightEmissionMaskChannel:{name:"inLightEmissionMaskChannel",dataType:"vec4",role:"value"},lightEmissionMaskInvert:{name:"inLightEmissionMaskInvert",dataType:"bool",role:"value"},texture:{name:"inTexture",dataType:"sampler2D",role:"value"},textureOffset:{name:"inTextureOffset",dataType:"vec2",role:"value"},textureScale:{name:"inTextureScale",dataType:"vec2",role:"value"},alphaCutoff:{name:"inAlphaCutoff",dataType:"float",role:"value"},lightMap:{name:"inLightMap",dataType:"sampler2D",role:"value"},lightMapOffset:{name:"inLightMapOffset",dataType:"vec2",role:"value"},lightMapScale:{name:"inLightMapScale",dataType:"vec2",role:"value"},normalMap:{name:"inNormalMap",dataType:"sampler2D",role:"value"},normalMapOffset:{name:"inNormalMapOffset",dataType:"vec2",role:"value"},normalMapScale:{name:"inNormalMapScale",dataType:"vec2",role:"value"},reflection:{name:"inReflection",dataType:"float",role:"value"},reflectionMask:{name:"inReflectionMask",dataType:"sampler2D",role:"value"},reflectionMaskChannel:{name:"inReflectionMaskChannel",dataType:"vec4",role:"value"},reflectionMaskInvert:{name:"inReflectionMaskInvert",dataType:"bool",role:"value"},castShadows:{name:"inCastShadows",dataType:"bool",role:"value"},receiveShadows:{name:"inReceiveShadows",dataType:"bool",role:"value"},roughness:{name:"inRoughness",dataType:"float",role:"value"},roughnessMask:{name:"inRoughnessMask",dataType:"sampler2D",role:"value"},roughnessMaskChannel:{name:"inRoughnessMaskChannel",dataType:"vec4",role:"value"},roughnessMaskInvert:{name:"inRoughnessMaskInvert",dataType:"bool",role:"value"},unlit:{name:"inUnlit",dataType:"bool",role:"value"}},lighting:{type:{name:"inLightType",dataType:"int",role:"value"},position:{name:"inLightPosition",dataType:"vec3",role:"value"},direction:{name:"inLightDirection",dataType:"vec3",role:"value"},ambient:{name:"inLightAmbient",dataType:"vec4",role:"value"},diffuse:{name:"inLightDiffuse",dataType:"vec4",role:"value"},specular:{name:"inLightSpecular",dataType:"vec4",role:"value"},attenuation:{name:"inLightAttenuation",dataType:"vec3",role:"value"},spotExponent:{name:"inSpotExponent",dataType:"float",role:"value"},spotCutoff:{name:"inSpotCutoff",dataType:"float",role:"value"},cutoffDistance:{name:"inLightCutoffDistance",dataType:"float",role:"value"},exposure:{name:"inLightExposure",dataType:"float",role:"value"},castShadows:{name:"inLightCastShadows",dataType:"bool",role:"value"}},lightingForward:{type:{name:"inLightType",dataType:"int",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},position:{name:"inLightPosition",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},direction:{name:"inLightDirection",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},ambient:{name:"inLightAmbient",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},diffuse:{name:"inLightDiffuse",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},specular:{name:"inLightSpecular",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},attenuation:{name:"inLightAttenuation",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},spotExponent:{name:"inSpotExponent",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},spotCutoff:{name:"inSpotCutoff",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},cutoffDistance:{name:"inLightCutoffDistance",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},exposure:{name:"inLightExposure",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},castShadows:{name:"inLightCastShadows",dataType:"bool",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},numLights:{name:"inNumLights",dataType:"int",role:"value"}},shadows:{shadowMap:{name:"inShadowMap",dataType:"sampler2D",role:"value"},shadowMapSize:{name:"inShadowMapSize",dataType:"vec2",role:"value"},shadowStrength:{name:"inShadowStrength",dataType:"float",role:"value"},shadowColor:{name:"inShadowColor",dataType:"vec4",role:"value"},shadowBias:{name:"inShadowBias",dataType:"float",role:"value"},shadowType:{name:"inShadowType",dataType:"int",role:"value"}},colorCorrection:{hue:{name:"inHue",dataType:"float",role:"value"},saturation:{name:"inSaturation",dataType:"float",role:"value"},lightness:{name:"inLightness",dataType:"float",role:"value"},brightness:{name:"inBrightness",dataType:"float",role:"value"},contrast:{name:"inContrast",dataType:"float",role:"value"}}},bg.webgl1.shaderLibrary.functions.lighting={beckmannDistribution:{returnType:"float",name:"beckmannDistribution",params:{x:"float",roughness:"float"},body:"\n\t\t\t\t\tfloat NdotH = max(x,0.0001);\n\t\t\t\t\tfloat cos2Alpha = NdotH * NdotH;\n\t\t\t\t\tfloat tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n\t\t\t\t\tfloat roughness2 = roughness * roughness;\n\t\t\t\t\tfloat denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n\t\t\t\t\treturn exp(tan2Alpha / roughness2) / denom;\n\t\t\t\t"},beckmannSpecular:{returnType:"float",name:"beckmannSpecular",params:{lightDirection:"vec3",viewDirection:"vec3",surfaceNormal:"vec3",roughness:"float"},body:"\n\t\t\t\t\treturn beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\n\t\t\t\t"},getDirectionalLight:{returnType:"vec4",name:"getDirectionalLight",params:{ambient:"vec4",diffuse:"vec4",specular:"vec4",shininess:"float",direction:"vec3",vertexPos:"vec3",normal:"vec3",matDiffuse:"vec4",matSpecular:"vec4",shadowColor:"vec4",specularOut:"out vec4"},body:"\n\t\t\t\tvec3 color = ambient.rgb * matDiffuse.rgb;\n\t\t\t\tvec3 diffuseWeight = max(0.0, dot(normal,direction)) * diffuse.rgb;\n\t\t\t\tcolor += min(diffuseWeight,shadowColor.rgb) * matDiffuse.rgb;\n\t\t\t\tspecularOut = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\tif (shininess>0.0) {\n\t\t\t\t\tvec3 eyeDirection = normalize(-vertexPos);\n\t\t\t\t\tvec3 reflectionDirection = normalize(reflect(-direction,normal));\n\t\t\t\t\tfloat specularWeight = clamp(pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess), 0.0, 1.0);\n\t\t\t\t\t//sspecularWeight = beckmannSpecular(direction,eyeDirection,normal,0.01);\n\t\t\t\t\tvec3 specularColor = specularWeight * pow(shadowColor.rgb,vec3(10.0));\n\t\t\t\t\t//color += specularColor * specular.rgb * matSpecular.rgb;\n\t\t\t\t\tspecularOut = vec4(specularColor * specular.rgb * matSpecular.rgb,1.0);\n\t\t\t\t}\n\t\t\t\treturn vec4(color,1.0);"},getPointLight:{returnType:"vec4",name:"getPointLight",params:{ambient:"vec4",diffuse:"vec4",specular:"vec4",shininess:"float",position:"vec3",constAtt:"float",linearAtt:"float",expAtt:"float",vertexPos:"vec3",normal:"vec3",matDiffuse:"vec4",matSpecular:"vec4",specularOut:"out vec4"},body:"\n\t\t\t\tvec3 pointToLight = position - vertexPos;\n\t\t\t\tfloat distance = length(pointToLight);\n\t\t\t\tvec3 lightDir = normalize(pointToLight);\n\t\t\t\tfloat attenuation = 1.0 / (constAtt + linearAtt * distance + expAtt * distance * distance);\n\t\t\t\tvec3 color = ambient.rgb * matDiffuse.rgb;\n\t\t\t\tvec3 diffuseWeight = max(0.0,dot(normal,lightDir)) * diffuse.rgb * attenuation;\n\t\t\t\tcolor += diffuseWeight * matDiffuse.rgb;\n\t\t\t\tspecularOut = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\tif (shininess>0.0) {\n\t\t\t\t\tvec3 eyeDirection = normalize(-vertexPos);\n\t\t\t\t\tvec3 reflectionDirection = normalize(reflect(-lightDir, normal));\n\t\t\t\t\tfloat specularWeight = clamp(pow(max(dot(reflectionDirection,eyeDirection),0.0), shininess), 0.0, 1.0);\n\t\t\t\t\t//color += specularWeight * specular.rgb * matSpecular.rgb * attenuation;\n\t\t\t\t\tspecularOut = vec4(specularWeight * specular.rgb * matSpecular.rgb * attenuation,1.0);\n\t\t\t\t}\n\t\t\t\treturn vec4(color,1.0);"},getSpotLight:{returnType:"vec4",name:"getSpotLight",params:{ambient:"vec4",diffuse:"vec4",specular:"vec4",shininess:"float",position:"vec3",direction:"vec3",constAtt:"float",linearAtt:"float",expAtt:"float",spotCutoff:"float",spotExponent:"float",vertexPos:"vec3",normal:"vec3",matDiffuse:"vec4",matSpecular:"vec4",shadowColor:"vec4",specularOut:"out vec4"},body:"\n\t\t\t\tvec4 matAmbient = vec4(1.0);\n\t\t\t\tvec3 s = normalize(position - vertexPos);\n\t\t\t\tfloat angle = acos(dot(-s, direction));\n\t\t\t\tfloat cutoff = radians(clamp(spotCutoff / 2.0,0.0,90.0));\n\t\t\t\tfloat distance = length(position - vertexPos);\n\t\t\t\tfloat attenuation = 1.0 / (constAtt );//+ linearAtt * distance + expAtt * distance * distance);\n\t\t\t\tif (angle<cutoff) {\n\t\t\t\t\tfloat spotFactor = pow(dot(-s, direction), spotExponent);\n\t\t\t\t\tvec3 v = normalize(vec3(-vertexPos));\n\t\t\t\t\tvec3 h = normalize(v + s);\n\t\t\t\t\tvec3 diffuseAmount = matDiffuse.rgb * diffuse.rgb * max(dot(s, normal), 0.0);\n\t\t\t\t\tspecularOut = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\tif (shininess>0.0) {\n\t\t\t\t\t\tspecularOut.rgb = matSpecular.rgb * specular.rgb * pow(max(dot(h,normal), 0.0),shininess);\n\t\t\t\t\t\tspecularOut.rgb *= pow(shadowColor.rgb,vec3(10.0));\n\t\t\t\t\t\t//diffuseAmount += matSpecular.rgb * specular.rgb * pow(max(dot(h,normal), 0.0),shininess);\n\t\t\t\t\t\t//diffuseAmount *= pow(shadowColor.rgb,vec3(10.0));\n\t\t\t\t\t}\n\t\t\t\t\tdiffuseAmount.r = min(diffuseAmount.r, shadowColor.r);\n\t\t\t\t\tdiffuseAmount.g = min(diffuseAmount.g, shadowColor.g);\n\t\t\t\t\tdiffuseAmount.b = min(diffuseAmount.b, shadowColor.b);\n\t\t\t\t\treturn vec4(ambient.rgb * matDiffuse.rgb + attenuation * spotFactor * diffuseAmount,1.0);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn vec4(ambient.rgb * matDiffuse.rgb,1.0);\n\t\t\t\t}"},getLight:{returnType:"vec4",name:"getLight",params:{lightType:"int",ambient:"vec4",diffuse:"vec4",specular:"vec4",shininess:"float",lightPosition:"vec3",lightDirection:"vec3",constAtt:"float",linearAtt:"float",expAtt:"float",spotCutoff:"float",spotExponent:"float",cutoffDistance:"float",vertexPosition:"vec3",vertexNormal:"vec3",matDiffuse:"vec4",matSpecular:"vec4",shadowColor:"vec4",specularOut:"out vec4"},body:"\n\t\t\t\t\tvec4 light = vec4(0.0);\n\t\t\t\t\tif (lightType=="+bg.base.LightType.DIRECTIONAL+") {\n\t\t\t\t\t\tlight = getDirectionalLight(ambient,diffuse,specular,shininess,\n\t\t\t\t\t\t\t\t\t\t-lightDirection,vertexPosition,vertexNormal,matDiffuse,matSpecular,shadowColor,specularOut);\n\t\t\t\t\t}\n\t\t\t\t\telse if (lightType=="+bg.base.LightType.SPOT+") {\n\t\t\t\t\t\tfloat d = distance(vertexPosition,lightPosition);\n\t\t\t\t\t\tif (d<=cutoffDistance || cutoffDistance==-1.0) {\n\t\t\t\t\t\t\tlight = getSpotLight(ambient,diffuse,specular,shininess,\n\t\t\t\t\t\t\t\t\t\t\tlightPosition,lightDirection,\n\t\t\t\t\t\t\t\t\t\t\tconstAtt,linearAtt,expAtt,\n\t\t\t\t\t\t\t\t\t\t\tspotCutoff,spotExponent,\n\t\t\t\t\t\t\t\t\t\t\tvertexPosition,vertexNormal,matDiffuse,matSpecular,shadowColor,specularOut);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (lightType=="+bg.base.LightType.POINT+") {\n\t\t\t\t\t\tfloat d = distance(vertexPosition,lightPosition);\n\t\t\t\t\t\tif (d<=cutoffDistance || cutoffDistance==-1.0) {\n\t\t\t\t\t\t\tlight = getPointLight(ambient,diffuse,specular,shininess,\n\t\t\t\t\t\t\t\t\t\t\tlightPosition,\n\t\t\t\t\t\t\t\t\t\t\tconstAtt,linearAtt,expAtt,\n\t\t\t\t\t\t\t\t\t\t\tvertexPosition,vertexNormal,matDiffuse,matSpecular,specularOut);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn light;\n\t\t\t\t"},getShadowColor:{returnType:"vec4",name:"getShadowColor",params:{vertexPosFromLight:"vec4",shadowMap:"sampler2D",shadowMapSize:"vec2",shadowType:"int",shadowStrength:"float",shadowBias:"float",shadowColor:"vec4"},body:"\n\t\t\t\tfloat visibility = 1.0;\n\t\t\t\tvec3 depth = vertexPosFromLight.xyz / vertexPosFromLight.w;\n\t\t\t\tconst float kShadowBorderOffset = 3.0;\n\t\t\t\tfloat shadowBorderOffset = kShadowBorderOffset / shadowMapSize.x;\n\t\t\t\tfloat bias = shadowBias;\n\t\t\t\tvec4 shadow = vec4(1.0);\n\t\t\t\tif (shadowType=="+bg.base.ShadowType.HARD+") {\t// hard\n\t\t\t\t\tfloat shadowDepth = unpack(texture2D(shadowMap,depth.xy));\n\t\t\t\t\tif (shadowDepth<depth.z - bias &&\n\t\t\t\t\t\t(depth.x>0.0 && depth.x<1.0 && depth.y>0.0 && depth.y<1.0))\n\t\t\t\t\t{\n\t\t\t\t\t\tvisibility = 1.0 - shadowStrength;\n\t\t\t\t\t}\n\t\t\t\t\tshadow = clamp(shadowColor + visibility,0.0,1.0);\n\t\t\t\t}\n\t\t\t\telse if (shadowType>="+bg.base.ShadowType.SOFT+") {\t// soft / soft stratified (not supported on webgl, fallback to soft)\n\t\t\t\t\tvec2 poissonDisk[4];\n\t\t\t\t\tpoissonDisk[0] = vec2( -0.94201624, -0.39906216 );\n\t\t\t\t\tpoissonDisk[1] = vec2( 0.94558609, -0.76890725 );\n\t\t\t\t\tpoissonDisk[2] = vec2( -0.094184101, -0.92938870 );\n\t\t\t\t\tpoissonDisk[3] = vec2( 0.34495938, 0.29387760 );\n\t\t\t\t\t\n\t\t\t\t\tfor (int i=0; i<4; ++i) {\n\t\t\t\t\t\tfloat shadowDepth = unpack(texture2D(shadowMap, depth.xy + poissonDisk[i]/1000.0));\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (shadowDepth<depth.z - bias\n\t\t\t\t\t\t\t&& (depth.x>0.0 && depth.x<1.0 && depth.y>0.0 && depth.y<1.0)) {\n\t\t\t\t\t\t\tvisibility -= (shadowStrength) * 0.25;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tshadow = clamp(shadowColor + visibility,0.0,1.0);\n\t\t\t\t}\n\t\t\t\treturn shadow;"}},bg.webgl1.shaderLibrary.functions.materials={samplerColor:{returnType:"vec4",name:"samplerColor",params:{sampler:"sampler2D",uv:"vec2",offset:"vec2",scale:"vec2"},body:"\n\t\t\t\treturn texture2D(sampler,uv * scale + offset);"},samplerNormal:{returnType:"vec3",name:"samplerNormal",params:{sampler:"sampler2D",uv:"vec2",offset:"vec2",scale:"vec2"},body:"\n\t\t\t\treturn normalize(samplerColor(sampler,uv,offset,scale).xyz * 2.0 - 1.0);\n\t\t\t\t"},combineNormalWithMap:{returnType:"vec3",name:"combineNormalWithMap",params:{normalCoord:"vec3",tangent:"vec3",bitangent:"vec3",normalMapValue:"vec3"},body:"\n\t\t\t\tmat3 tbnMat = mat3( tangent.x, bitangent.x, normalCoord.x,\n\t\t\t\t\t\t\ttangent.y, bitangent.y, normalCoord.y,\n\t\t\t\t\t\t\ttangent.z, bitangent.z, normalCoord.z\n\t\t\t\t\t\t);\n\t\t\t\treturn normalize(normalMapValue * tbnMat);"},applyTextureMask:{returnType:"float",name:"applyTextureMask",params:{value:"float",textureMask:"sampler2D",uv:"vec2",offset:"vec2",scale:"vec2",channelMask:"vec4",invert:"bool"},body:"\n\t\t\t\tfloat mask;\n\t\t\t\tvec4 color = samplerColor(textureMask,uv,offset,scale);\n\t\t\t\tmask = color.r * channelMask.r +\n\t\t\t\t\t\t color.g * channelMask.g +\n\t\t\t\t\t\t color.b * channelMask.b +\n\t\t\t\t\t\t color.a * channelMask.a;\n\t\t\t\tif (invert) {\n\t\t\t\t\tmask = 1.0 - mask;\n\t\t\t\t}\n\t\t\t\treturn value * mask;"},specularColor:{returnType:"vec4",name:"specularColor",params:{specular:"vec4",shininessMask:"sampler2D",uv:"vec2",offset:"vec2",scale:"vec2",channelMask:"vec4",invert:"bool"},body:"\n\t\t\t\tfloat maskValue = applyTextureMask(1.0, shininessMask,uv,offset,scale,channelMask,invert);\n\t\t\t\treturn vec4(specular.rgb * maskValue, 1.0);"}},bg.webgl1.shaderLibrary.functions.pbr={},bg.webgl1.shaderLibrary.inputs.pbr={},bg.webgl1.shaderLibrary.functions.pbr={lighting:{processLight:{returnType:"vec4",name:"processLight",params:{inAmbient:"vec3",inDiffuse:"vec3",inSpecular:"vec3",type:"int",specularType:"int",direction:"vec3",position:"vec3",inAttenuation:"vec3",spotCutoff:"float",spotOuterCutoff:"float",surfaceNormal:"vec3",surfacePosition:"vec3",surfaceDiffuse:"vec3",shadowColor:"vec3"},body:"\n vec3 diffuse = vec3(0.0);\n vec3 specular = vec3(0.0);\n float attenuation = 1.0;\n float shininess = 64.0;\n if (type=="+bg.base.LightType.DIRECTIONAL+") {\n vec3 lightDir = normalize(-direction);\n diffuse = max(dot(normalize(surfaceNormal), lightDir), 0.0) * surfaceDiffuse;\n vec3 viewDir = normalize(vec3(0.0) - surfacePosition);\n vec3 reflectDir = reflect(-lightDir, surfaceNormal);\n float spec = 0.0;\n if (specularType=="+bg.base.SpecularType.PHONG+") {\n spec = pow(max(dot(viewDir, reflectDir), 0.0), shininess);\n }\n else {\n vec3 halfwayDir = normalize(lightDir + viewDir);\n spec = pow(max(dot(surfaceNormal, halfwayDir), 0.0), shininess);\n }\n specular = spec * inSpecular;\n specular *= pow(shadowColor,vec3(10.0));\n }\n else if (type=="+bg.base.LightType.POINT+") {\n vec3 lightDir = normalize(position - surfacePosition);\n float distance = length(position - surfacePosition);\n attenuation = 1.0 / (\n inAttenuation.x +\n inAttenuation.y * distance +\n inAttenuation.z * distance * distance\n );\n diffuse = max(dot(normalize(surfaceNormal), lightDir), 0.0) * inDiffuse;\n vec3 viewDir = normalize(vec3(0.0) - surfacePosition);\n vec3 reflectDir = reflect(-lightDir, surfaceNormal);\n\n float spec = 0.0;\n if (specularType=="+bg.base.SpecularType.PHONG+") {\n spec = pow(max(dot(viewDir, reflectDir), 0.0), shininess);\n }\n else {\n vec3 halfwayDir = normalize(lightDir + viewDir);\n spec = pow(max(dot(surfaceNormal, halfwayDir), 0.0), shininess);\n }\n\n specular = spec * inSpecular;\n }\n else if (type=="+bg.base.LightType.SPOT+") {\n vec3 lightDirToSurface = normalize(position - surfacePosition);\n float theta = dot(lightDirToSurface,normalize(-direction));\n if (theta > spotCutoff) {\n float epsilon = spotCutoff - spotOuterCutoff;\n float intensity = 1.0 - clamp((theta - spotOuterCutoff) / epsilon, 0.0, 1.0);\n float distance = length(position - surfacePosition);\n diffuse = max(dot(normalize(surfaceNormal), lightDirToSurface), 0.0) * inDiffuse * intensity;\n vec3 viewDir = normalize(vec3(0.0) - surfacePosition);\n vec3 reflectDir = reflect(-lightDirToSurface, surfaceNormal);\n float spec = 0.0;\n if (specularType=="+bg.base.SpecularType.PHONG+") {\n spec = pow(max(dot(viewDir, reflectDir), 0.0), shininess);\n }\n else {\n vec3 halfwayDir = normalize(lightDirToSurface + viewDir);\n spec = pow(max(dot(surfaceNormal, halfwayDir), 0.0), shininess);\n }\n specular = spec * inSpecular * intensity;\n specular *= pow(shadowColor,vec3(10.0));\n }\n }\n vec3 shadowAmbient = clamp(shadowColor,inAmbient,vec3(1.0));\n diffuse = min(diffuse,shadowAmbient);\n return vec4((inAmbient + diffuse + specular) * attenuation,1.0);\n "},getShadowColor:{returnType:"vec4",name:"getShadowColor",params:{vertexPosFromLight:"vec4",shadowMap:"sampler2D",shadowMapSize:"vec2",shadowType:"int",shadowStrength:"float",shadowBias:"float",shadowColor:"vec4"},body:"\n\t\t\t\tfloat visibility = 1.0;\n\t\t\t\tvec3 depth = vertexPosFromLight.xyz / vertexPosFromLight.w;\n\t\t\t\tconst float kShadowBorderOffset = 3.0;\n\t\t\t\tfloat shadowBorderOffset = kShadowBorderOffset / shadowMapSize.x;\n\t\t\t\tfloat bias = shadowBias;\n vec4 shadow = vec4(1.0);\n \n float shadowDepth = unpack(texture2D(shadowMap,depth.xy));\n\n\t\t\t\tif (shadowType=="+bg.base.ShadowType.HARD+") {\t// hard\n float shadowDepth = unpack(texture2D(shadowMap,depth.xy));\n\t\t\t\t\tif (shadowDepth<depth.z - bias &&\n\t\t\t\t\t\t(depth.x>0.0 && depth.x<1.0 && depth.y>0.0 && depth.y<1.0))\n\t\t\t\t\t{\n\t\t\t\t\t\tvisibility = 1.0 - shadowStrength;\n\t\t\t\t\t}\n\t\t\t\t\tshadow = clamp(shadowColor + visibility,0.0,1.0);\n\t\t\t\t}\n\t\t\t\telse if (shadowType>="+bg.base.ShadowType.SOFT+") {\t// soft / soft stratified (not supported on webgl, fallback to soft)\n\t\t\t\t\tvec2 poissonDisk[7];\n poissonDisk[0] = vec2( -0.54201624, -0.19906216 );\n poissonDisk[1] = vec2( 0.54558609, -0.46890725 );\n poissonDisk[2] = vec2( -0.054184101, -0.52938870 );\n poissonDisk[3] = vec2( 0.02495938, -0.14387760 );\n poissonDisk[4] = vec2( -0.24495938, 0.14387760 );\n poissonDisk[5] = vec2( 0.3495938, -0.74387760 );\n poissonDisk[6] = vec2( -0.07495938, 0.54387760 );\n \n for (int i=0; i<7; ++i) {\n float shadowDepth = unpack(texture2D(shadowMap, depth.xy + poissonDisk[i]/3000.0));\n \n if (shadowDepth<depth.z - bias\n && (depth.x>0.0 && depth.x<1.0 && depth.y>0.0 && depth.y<1.0)) {\n visibility -= (shadowStrength) * 0.14;\n }\n }\n shadow = clamp(shadowColor + visibility,0.0,1.0);\n\t\t\t\t}\n\t\t\t\treturn shadow;"}},material:{samplerColor:{returnType:"vec4",name:"samplerColor",params:{sampler:"sampler2D",uv:"vec2",scale:"vec2"},body:"\n return texture2D(sampler,uv*scale);"},samplerNormal:{returnType:"vec3",name:"samplerNormal",params:{sampler:"sampler2D",uv:"vec2",scale:"vec2"},body:"\n\t\t\t\treturn normalize(samplerColor(sampler,uv,scale).xyz * 2.0 - 1.0);"},combineNormalWithMap:{returnType:"vec3",name:"combineNormalWithMap",params:{normalCoord:"vec3",tangent:"vec3",bitangent:"vec3",normalMapValue:"vec3"},body:"\n\t\t\t\tmat3 tbnMat = mat3( tangent.x, bitangent.x, normalCoord.x,\n\t\t\t\t\t\t\ttangent.y, bitangent.y, normalCoord.y,\n\t\t\t\t\t\t\ttangent.z, bitangent.z, normalCoord.z\n\t\t\t\t\t\t);\n\t\t\t\treturn normalize(normalMapValue * tbnMat);"},parallaxMapping:{returnType:"vec2",name:"parallaxMapping",params:{height:"float",texCoords:"vec2",viewDir:"vec3",scale:"float",texScale:"vec2"},body:"\n float height_scale = (0.01 * scale) / ((texScale.x + texScale.y) / 2.0);\n vec2 p = viewDir.xy / viewDir.z;\n p.x *= -1.0;\n p.y *= -1.0;\n p *= (height * height_scale);\n return texCoords - p;\n "}},utils:{pack:{returnType:"vec4",name:"pack",params:{depth:"float"},body:"\n\t\t\t\tconst vec4 bitSh = vec4(256 * 256 * 256,\n\t\t\t\t\t\t\t\t\t\t256 * 256,\n\t\t\t\t\t\t\t\t\t\t256,\n\t\t\t\t\t\t\t\t\t\t1.0);\n\t\t\t\tconst vec4 bitMsk = vec4(0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0);\n\t\t\t\tvec4 comp = fract(depth * bitSh);\n\t\t\t\tcomp -= comp.xxyz * bitMsk;\n\t\t\t\treturn comp;"},unpack:{returnType:"float",name:"unpack",params:{color:"vec4"},body:"\n\t\t\t\tconst vec4 bitShifts = vec4(1.0 / (256.0 * 256.0 * 256.0),\n\t\t\t\t\t\t\t\t\t\t\t1.0 / (256.0 * 256.0),\n\t\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t\t1.0);\n\t\t\t\treturn dot(color, bitShifts);"},random:{returnType:"float",name:"random",params:{seed:"vec3",i:"int"},body:"\n\t\t\t\tvec4 seed4 = vec4(seed,i);\n\t\t\t\tfloat dot_product = dot(seed4, vec4(12.9898,78.233,45.164,94.673));\n\t\t\t\treturn fract(sin(dot_product) * 43758.5453);"},gammaCorrection:{returnType:"vec4",name:"gammaCorrection",params:{color:"vec4",gamma:"float"},body:"\n return pow(color,vec4(1.0/gamma));\n "},inverseGammaCorrection:{returnType:"vec4",name:"inverseGammaCorrection",params:{color:"vec4",gamma:"float"},body:"\n return pow(color,vec4(gamma));\n "}}},bg.webgl1.shaderLibrary.inputs.pbr.material={diffuse:{name:"inDiffuse",dataType:"sampler2D",role:"value"},alphaCutoff:{name:"inAlphaCutoff",dataType:"float",role:"value"},fresnel:{name:"inFresnel",dataType:"vec4",role:"value"},height:{name:"inHeight",dataType:"sampler2D",role:"value"},heighMetallicRoughnessAO:{name:"inHeighMetallicRoughnessAO",dataType:"sampler2D",role:"value"},normal:{name:"inNormalMap",dataType:"sampler2D",role:"value"},diffuseUV:{name:"inDiffuseUV",dataType:"int",role:"value"},metallicUV:{name:"inMetallicUV",dataType:"int",role:"value"},roughnessUV:{name:"inRoughnessUV",dataType:"int",role:"value"},fresnelUV:{name:"inFresnelUV",dataType:"int",role:"value"},heightUV:{name:"inHeightUV",dataType:"int",role:"value"},ambientOcclussionUV:{name:"inAmbientOcclussionUV",dataType:"int",role:"value"},lightEmissionUV:{name:"inLightEmissionUV",dataType:"int",role:"value"},normalUV:{name:"inNormalUV",dataType:"int",role:"value"},diffuseScale:{name:"inDiffuseScale",dataType:"vec2",role:"value"},metallicScale:{name:"inMetallicScale",dataType:"vec2",role:"value"},roughnessScale:{name:"inRoughnessScale",dataType:"vec2",role:"value"},fresnelScale:{name:"inFresnelScale",dataType:"vec2",role:"value"},lightEmissionScale:{name:"inLightEmissionScale",dataType:"vec2",role:"value"},heightScale:{name:"inHeightScale",dataType:"vec2",role:"value"},normalScale:{name:"inNormalScale",dataType:"vec2",role:"value"},receiveShadows:{name:"inReceiveShadows",dataType:"bool",role:"value"},heightIntensity:{name:"inHeightIntensity",dataType:"float",role:"value"},unlit:{name:"inUnlit",dataType:"bool",role:"value"}},bg.webgl1.shaderLibrary.inputs.pbr.lighting={ambient:{name:"inLightAmbient",dataType:"vec4",role:"value"}},bg.webgl1.shaderLibrary.inputs.pbr.lightingForward={lightType:{name:"inLightType",dataType:"int",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},diffuse:{name:"inLightDiffuse",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},specular:{name:"inLightSpecular",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},position:{name:"inLightPosition",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},direction:{name:"inLightDirection",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},intensity:{name:"inLightIntensity",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},spotCutoff:{name:"inLightSpotCutoff",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},outerSpotCutoff:{name:"inLightOuterSpotCutoff",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS}},bg.webgl1.shaderLibrary.inputs.pbr.shadows={shadowMap:{name:"inShadowMap",dataType:"sampler2D",role:"value"},shadowMapSize:{name:"inShadowMapSize",dataType:"vec2",role:"value"},shadowStrength:{name:"inShadowStrength",dataType:"float",role:"value"},shadowColor:{name:"inShadowColor",dataType:"vec4",role:"value"},shadowBias:{name:"inShadowBias",dataType:"float",role:"value"},shadowType:{name:"inShadowType",dataType:"int",role:"value"}},bg.webgl1.shaderLibrary.inputs.pbr.colorCorrection={gammaCorrection:{name:"inGammaCorrection",dataType:"float",role:"value"},saturation:{name:"inSaturation",dataType:"float",role:"value"},brightness:{name:"inBrightness",dataType:"float",role:"value"},contrast:{name:"inContrast",dataType:"float",role:"value"}},bg.webgl1.shaderLibrary.functions.utils={pack:{returnType:"vec4",name:"pack",params:{depth:"float"},body:"\n\t\t\t\tconst vec4 bitSh = vec4(256 * 256 * 256,\n\t\t\t\t\t\t\t\t\t\t256 * 256,\n\t\t\t\t\t\t\t\t\t\t256,\n\t\t\t\t\t\t\t\t\t\t1.0);\n\t\t\t\tconst vec4 bitMsk = vec4(0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0);\n\t\t\t\tvec4 comp = fract(depth * bitSh);\n\t\t\t\tcomp -= comp.xxyz * bitMsk;\n\t\t\t\treturn comp;"},unpack:{returnType:"float",name:"unpack",params:{color:"vec4"},body:"\n\t\t\t\tconst vec4 bitShifts = vec4(1.0 / (256.0 * 256.0 * 256.0),\n\t\t\t\t\t\t\t\t\t\t\t1.0 / (256.0 * 256.0),\n\t\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t\t1.0);\n\t\t\t\treturn dot(color, bitShifts);"},random:{returnType:"float",name:"random",params:{seed:"vec3",i:"int"},body:"\n\t\t\t\tvec4 seed4 = vec4(seed,i);\n\t\t\t\tfloat dot_product = dot(seed4, vec4(12.9898,78.233,45.164,94.673));\n\t\t\t\treturn fract(sin(dot_product) * 43758.5453);"},texOffset:{returnType:"vec4",name:"texOffset",params:{sampler:"sampler2D",texCoord:"vec2",offset:"vec2",frameSize:"vec2"},body:"\n\t\t\t\treturn texture2D(sampler,texCoord + vec2(offset.x * 1.0/frameSize.x,offset.y * 1.0 / frameSize.y));\n\t\t\t\t"},luminance:{returnType:"float",name:"luminance",params:{color:"vec3"},body:"\n\t\t\t\treturn dot(vec3(0.2126,0.7152,0.0722), color);\n\t\t\t\t"},borderDetection:{returnType:"float",name:"borderDetection",params:{sampler:"sampler2D",texCoord:"vec2",frameSize:"vec2"},body:"\n\t\t\t\tfloat s00 = luminance(texOffset(sampler,texCoord,vec2(-1.0, 1.0),frameSize).rgb);\n\t\t\t\tfloat s10 = luminance(texOffset(sampler,texCoord,vec2(-1.0, 0.0),frameSize).rgb);\n\t\t\t\tfloat s20 = luminance(texOffset(sampler,texCoord,vec2(-1.0,-1.0),frameSize).rgb);\n\t\t\t\tfloat s01 = luminance(texOffset(sampler,texCoord,vec2(-1.0, 1.0),frameSize).rgb);\n\t\t\t\tfloat s21 = luminance(texOffset(sampler,texCoord,vec2( 0.0,-1.0),frameSize).rgb);\n\t\t\t\tfloat s02 = luminance(texOffset(sampler,texCoord,vec2( 1.0, 1.0),frameSize).rgb);\n\t\t\t\tfloat s12 = luminance(texOffset(sampler,texCoord,vec2( 1.0, 0.0),frameSize).rgb);\n\t\t\t\tfloat s22 = luminance(texOffset(sampler,texCoord,vec2( 1.0,-1.0),frameSize).rgb);\n\n\t\t\t\tfloat sx = s00 + 2.0 * s10 + s20 - (s02 + 2.0 * s12 + s22);\n\t\t\t\tfloat sy = s00 + 2.0 * s01 + s02 - (s20 + 2.0 * s21 + s22);\n\n\t\t\t\treturn sx * sx + sy * sy;\n\t\t\t\t"},applyConvolution:{returnType:"vec4",name:"applyConvolution",params:{texture:"sampler2D",texCoord:"vec2",texSize:"vec2",convMatrix:"float[9]",radius:"float"},body:"\n\t\t\t\tvec2 onePixel = vec2(1.0,1.0) / texSize * radius;\n\t\t\t\tvec4 colorSum = \n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2(-1, -1)) * convMatrix[0] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 0, -1)) * convMatrix[1] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 1, -1)) * convMatrix[2] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2(-1, 0)) * convMatrix[3] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 0, 0)) * convMatrix[4] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 1, 0)) * convMatrix[5] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2(-1, 1)) * convMatrix[6] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 0, 1)) * convMatrix[7] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 1, 1)) * convMatrix[8];\n\t\t\t\tfloat kernelWeight =\n\t\t\t\t\tconvMatrix[0] +\n\t\t\t\t\tconvMatrix[1] +\n\t\t\t\t\tconvMatrix[2] +\n\t\t\t\t\tconvMatrix[3] +\n\t\t\t\t\tconvMatrix[4] +\n\t\t\t\t\tconvMatrix[5] +\n\t\t\t\t\tconvMatrix[6] +\n\t\t\t\t\tconvMatrix[7] +\n\t\t\t\t\tconvMatrix[8];\n\t\t\t\tif (kernelWeight <= 0.0) {\n\t\t\t\t\tkernelWeight = 1.0;\n\t\t\t\t}\n\t\t\t\treturn vec4((colorSum / kernelWeight).rgb, 1.0);\n\t\t\t\t"}},function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){bg.base.ShaderType.VERTEX=t.VERTEX_SHADER,bg.base.ShaderType.FRAGMENT=t.FRAGMENT_SHADER},setActive:function(t,e){t.useProgram(e&&e.program)},create:function(t){return{program:t.createProgram(),attribLocations:{},uniformLocations:{}}},addShaderSource:function(t,e,n,i){var r=null;if(e&&e.program){var a=t.createShader(n);t.shaderSource(a,i),t.compileShader(a),t.getShaderParameter(a,t.COMPILE_STATUS)?t.attachShader(e.program,a):r=t.getShaderInfoLog(a),t.deleteShader(a)}else r="Could not attach shader. Invalid shader program";return r},link:function(t,e){var n=null;return e&&e.program?(t.linkProgram(e.program),t.getProgramParameter(e.program,t.LINK_STATUS)||(n=t.getProgramInfoLog(e.program))):n="Could not link shader. Invalid shader program",n},initVars:function(t,e,n,i){n.forEach(function(n){e.attribLocations[n]=t.getAttribLocation(e.program,n)}),i.forEach(function(n){e.uniformLocations[n]=t.getUniformLocation(e.program,n)})},setInputBuffer:function(t,e,n,i,r){if(i&&e&&e.program){var a=e.attribLocations[n];-1!=a&&(t.bindBuffer(t.ARRAY_BUFFER,i),t.enableVertexAttribArray(a),t.vertexAttribPointer(a,r,t.FLOAT,!1,0,0))}},disableInputBuffer:function(t,e,n){t.disableVertexAttribArray(e.attribLocations[n])},setValueInt:function(t,e,n,i){t.uniform1i(e.uniformLocations[n],i)},setValueIntPtr:function(t,e,n,i){t.uniform1iv(e.uniformLocations[n],i)},setValueFloat:function(t,e,n,i){t.uniform1f(e.uniformLocations[n],i)},setValueFloatPtr:function(t,e,n,i){t.uniform1fv(e.uniformLocations[n],i)},setValueVector2:function(t,e,n,i){t.uniform2fv(e.uniformLocations[n],i.v)},setValueVector3:function(t,e,n,i){t.uniform3fv(e.uniformLocations[n],i.v)},setValueVector4:function(t,e,n,i){t.uniform4fv(e.uniformLocations[n],i.v)},setValueVector2v:function(t,e,n,i){t.uniform2fv(e.uniformLocations[n],i)},setValueVector3v:function(t,e,n,i){t.uniform3fv(e.uniformLocations[n],i)},setValueVector4v:function(t,e,n,i){t.uniform4fv(e.uniformLocations[n],i)},setValueMatrix3:function(t,e,n,i,r){t.uniformMatrix3fv(e.uniformLocations[n],i,r.m)},setValueMatrix4:function(t,e,n,i,r){t.uniformMatrix4fv(e.uniformLocations[n],i,r.m)},setTexture:function(t,e,n,i,r){i.setActive(r),i.bind(),t.uniform1i(e.uniformLocations[n],r)}},{},t)}(bg.base.ShaderImpl);bg.webgl1.ShaderImpl=t}(),function(){var t={},e=function(e){function n(t){$traceurRuntime.superConstructor(n).call(this,t)}return $traceurRuntime.createClass(n,{getFBO:function(t,e){var n=this.context,i={gl:n,fbo:n.createFramebuffer(),rbo:n.createRenderbuffer(),texture:new bg.base.Texture(n),width:t,height:e,bind:function(){this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,this.fbo)},unbind:function(){this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null)},resize:function(t,n){if(t!=this.width||n!=this.height){this.bind(),this.width=t,this.height=e;var i=this.gl;i.bindRenderbuffer(i.RENDERBUFFER,this.rbo),i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_COMPONENT16,this.width,this.height),i.bindRenderbuffer(i.RENDERBUFFER,null),this.texture.bind(),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,this.width,this.height,0,i.RGBA,i.UNSIGNED_BYTE,null),this.texture.unbind(),this.unbind()}},beginRender:function(){this._currentViewport=this.gl.getParameter(this.gl.VIEWPORT),this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,this.gl.COLOR_ATTACHMENT0,this.gl.TEXTURE_2D,this.texture.texture,0),this.gl.viewport(0,0,this.width,this.height)},endRender:function(){this.gl.viewport(this._currentViewport[0],this._currentViewport[1],this._currentViewport[2],this._currentViewport[3]),this.unbind()},destroy:function(){var t=void 0!==arguments[0]&&arguments[0];this.unbind(),t&&this.texture.destroy(),this.gl.deleteRenderbuffer(this.rbo),this.gl.deleteFramebuffer(this.fbo)}};return n.bindFramebuffer(n.FRAMEBUFFER,i.fbo),n.bindRenderbuffer(n.RENDERBUFFER,i.rbo),n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t,e),n.framebufferRenderbuffer(n.FRAMEBUFFER,n.DEPTH_ATTACHMENT,n.RENDERBUFFER,i.rbo),i.texture.target=bg.base.TextureTarget.TEXTURE_2D,i.texture.create(),i.texture.bind(),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,t,e,0,n.RGBA,n.UNSIGNED_BYTE,null),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.REPEAT),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.REPEAT),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),i.texture.unbind(),i.texture._size=new bg.Vector2(t,e),n.bindFramebuffer(n.FRAMEBUFFER,null),n.bindRenderbuffer(n.RENDERBUFFER,null),i}},{Get:function(e){return t[e]||(t=new n(e)),t}},e)}(bg.app.ContextObject);bg.webgl1.TextureTools=e;var n=null;var i=null;var r=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._fbo=null},{getMapSize:function(t,e,n,i){return{width:Math.max(t.map.size.width,e.map.size.width,n.map.size.width,i.map.size.width),height:Math.max(t.map.size.height,e.map.size.height,n.map.size.height,i.map.size.height)}},mergeMaps:function(t,r,a,s,o){var u=bg.base.Shader.GetActiveShader(),h=this.getMapSize(r,a,s,o),l=e.Get(t);this._fbo=l.getFBO(h.width,h.height);var c=this._fbo,f=function(t){if(!i){if((i=new bg.base.Shader(t)).addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n attribute vec2 inTexCoord;\n\n varying vec2 fsTexCoord;\n\n void main() {\n fsTexCoord = inTexCoord;\n gl_Position = vec4(inPosition,1.0);\n }\n "),i.addShaderSource(bg.base.ShaderType.FRAGMENT,"\n precision mediump float;\n varying vec2 fsTexCoord;\n\n uniform sampler2D inT0;\n uniform int inT0Channel;\n uniform sampler2D inT1;\n uniform int inT1Channel;\n uniform sampler2D inT2;\n uniform int inT2Channel;\n uniform sampler2D inT3;\n uniform int inT3Channel;\n\n float mapChannel(sampler2D tex, int channel) {\n vec4 color = texture2D(tex,fsTexCoord);\n if (channel==0) {\n return color.r;\n }\n else if (channel==1) {\n return color.g;\n }\n else if (channel==2) {\n return color.b;\n }\n else if (channel==3) {\n return color.a;\n }\n else {\n return 0.0;\n }\n }\n\n void main() {\n vec4 result;\n result.r = mapChannel(inT0,inT0Channel);\n result.g = mapChannel(inT1,inT1Channel);\n result.b = mapChannel(inT2,inT2Channel);\n result.a = mapChannel(inT3,inT3Channel);\n gl_FragColor = result;\n }\n "),!i.link())throw new Error("Error generating texture merger shader.");i.initVars(["inPosition","inTexCoord"],["inT0","inT1","inT2","inT3","inT0Channel","inT1Channel","inT2Channel","inT3Channel"])}return i}.apply(this,[t]),v=function(t){return n||((n=new bg.base.PolyList(t)).vertex=[1,1,0,-1,1,0,-1,-1,0,1,-1,0],n.texCoord0=[1,1,0,1,0,0,1,0],n.index=[0,1,2,2,3,0],n.build()),n}.apply(this,[t]);return c.beginRender(),t.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),t.disable(t.CULL_FACE),f.setActive(),f.setInputBuffer("inPosition",v.vertexBuffer,3),f.setInputBuffer("inTexCoord",v.texCoord0Buffer,2),f.setTexture("inT0",r.map,bg.base.TextureUnit.TEXTURE_0),f.setTexture("inT1",a.map,bg.base.TextureUnit.TEXTURE_1),f.setTexture("inT2",s.map,bg.base.TextureUnit.TEXTURE_2),f.setTexture("inT3",o.map,bg.base.TextureUnit.TEXTURE_3),f.setValueInt("inT0Channel",r.channel),f.setValueInt("inT1Channel",a.channel),f.setValueInt("inT2Channel",s.channel),f.setValueInt("inT3Channel",o.channel),v.draw(),f.disableInputBuffer("inPosition"),f.disableInputBuffer("inTexCoord"),f.clearActive(),c.endRender(),u&&u.setActive(),c.texture},destroy:function(t){this._fbo.destroy()}},{},t)}(bg.tools.TextureMergerImpl);bg.webgl1.TextureMergerImpl=r}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){bg.base.TextureWrap.REPEAT=t.REPEAT,bg.base.TextureWrap.CLAMP=t.CLAMP_TO_EDGE,bg.base.TextureWrap.MIRRORED_REPEAT=t.MIRRORED_REPEAT,bg.base.TextureFilter.NEAREST_MIPMAP_NEAREST=t.NEAREST_MIPMAP_NEAREST,bg.base.TextureFilter.LINEAR_MIPMAP_NEAREST=t.LINEAR_MIPMAP_NEAREST,bg.base.TextureFilter.NEAREST_MIPMAP_LINEAR=t.NEAREST_MIPMAP_LINEAR,bg.base.TextureFilter.LINEAR_MIPMAP_LINEAR=t.LINEAR_MIPMAP_LINEAR,bg.base.TextureFilter.NEAREST=t.NEAREST,bg.base.TextureFilter.LINEAR=t.LINEAR,bg.base.TextureTarget.TEXTURE_2D=t.TEXTURE_2D,bg.base.TextureTarget.CUBE_MAP=t.TEXTURE_CUBE_MAP,bg.base.TextureTarget.POSITIVE_X_FACE=t.TEXTURE_CUBE_MAP_POSITIVE_X,bg.base.TextureTarget.NEGATIVE_X_FACE=t.TEXTURE_CUBE_MAP_NEGATIVE_X,bg.base.TextureTarget.POSITIVE_Y_FACE=t.TEXTURE_CUBE_MAP_POSITIVE_Y,bg.base.TextureTarget.NEGATIVE_Y_FACE=t.TEXTURE_CUBE_MAP_NEGATIVE_Y,bg.base.TextureTarget.POSITIVE_Z_FACE=t.TEXTURE_CUBE_MAP_POSITIVE_Z,bg.base.TextureTarget.NEGATIVE_Z_FACE=t.TEXTURE_CUBE_MAP_NEGATIVE_Z},requireMipmaps:function(t,e){return t==bg.base.TextureFilter.NEAREST_MIPMAP_NEAREST||t==bg.base.TextureFilter.LINEAR_MIPMAP_NEAREST||t==bg.base.TextureFilter.NEAREST_MIPMAP_LINEAR||t==bg.base.TextureFilter.LINEAR_MIPMAP_LINEAR||e==bg.base.TextureFilter.NEAREST_MIPMAP_NEAREST||e==bg.base.TextureFilter.LINEAR_MIPMAP_NEAREST||e==bg.base.TextureFilter.NEAREST_MIPMAP_LINEAR||e==bg.base.TextureFilter.LINEAR_MIPMAP_LINEAR},create:function(t){return t.createTexture()},setActive:function(t,e){t.activeTexture(t.TEXTURE0+e)},bind:function(t,e,n){t.bindTexture(e,n)},unbind:function(t,e){this.bind(t,e,null)},setTextureWrapX:function(t,e,n,i){t.texParameteri(e,t.TEXTURE_WRAP_S,i)},setTextureWrapY:function(t,e,n,i){t.texParameteri(e,t.TEXTURE_WRAP_T,i)},setImage:function(t,e,n,i,r,a,s){s&&t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!0),t.texParameteri(e,t.TEXTURE_MIN_FILTER,n),t.texParameteri(e,t.TEXTURE_MAG_FILTER,i),t.texImage2D(e,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),this.requireMipmaps(n,i)&&t.generateMipmap(e)},setImageRaw:function(t,e,n,i,r,a,s,o,u,h){u||(u=t.RGBA),h||(h=t.UNSIGNED_BYTE),h==bg.base.RenderSurfaceFormat.FLOAT&&(n=bg.base.TextureFilter.NEAREST,i=bg.base.TextureFilter.NEAREST),t.texParameteri(e,t.TEXTURE_MIN_FILTER,n),t.texParameteri(e,t.TEXTURE_MAG_FILTER,i),t.texImage2D(e,0,u,a,s,0,u,h,o),this.requireMipmaps(n,i)&&t.generateMipmap(e)},setTextureFilter:function(t,e,n,i){t.texParameteri(e,t.TEXTURE_MIN_FILTER,n),t.texParameteri(e,t.TEXTURE_MAG_FILTER,i)},setCubemapImage:function(t,e,n){t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!1),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,bg.base.TextureFilter.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,bg.base.TextureFilter.LINEAR),t.texImage2D(e,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)},setCubemapRaw:function(t,e,n,i,r){var a=t.RGBA,s=t.UNSIGNED_BYTE;t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,bg.base.TextureFilter.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,bg.base.TextureFilter.LINEAR),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!1),t.texImage2D(e,0,a,i,r,0,a,s,n)},setVideo:function(t,e,n,i,r){t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,r),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(e,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(e,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texImage2D(e,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,i)},updateVideoData:function(t,e,n,i){t.bindTexture(e,n),t.texImage2D(e,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,i),t.bindTexture(e,null)},destroy:function(t,e){t.deleteTexture(this._texture)}},{},t)}(bg.base.TextureImpl);bg.webgl1.TextureImpl=t}();
|
|
1
|
+
"use strict";var bg={version:"1.4.33 - build: d0833b0",utils:{}};try{module.exports=bg}catch(t){}Reflect.defineProperty=Reflect.defineProperty||Object.defineProperty,function(t){window.requestAnimFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t,e){window.setTimeout(t,1e3/60)},bg.utils.initWebGLContext=function(t){var e={gl:null,supported:!1,experimental:!1};try{e.gl=t.getContext("webgl",{preserveDrawingBuffer:!0}),e.supported=null!=e.gl}catch(t){e.supported=!1}if(!e.supported)try{e.gl=t.getContext("experimental-webgl",{preserveDrawingBuffer:!0}),e.supported=null!=e.gl,e.experimental=!0}catch(t){}return e&&(e.gl.uuid=Symbol(e.gl)),e},bg.utils.isBigEndian=function(){var t=new Uint32Array(1);new Uint8Array(t.buffer);return t[0]=255,255==t[3]},bg.utils.isLittleEndian=function(){var t=new Uint32Array(1);new Uint8Array(t.buffer);return t[0]=255,255==t[0]};var e=function(){return $traceurRuntime.createClass(function(t){this.system={},this.browser={},t||(t=navigator.userAgent),this.parseOperatingSystem(t),this.parseBrowser(t)},{parseOperatingSystem:function(t){this.system.OSX=/Macintosh/.test(t),this.system.Windows=/Windows/.test(t),this.system.iPhone=/iPhone/.test(t),this.system.iPodTouch=/iPod/.test(t),this.system.iPad=/iPad/.test(t),this.system.iOS=this.system.iPhone||this.system.iPad||this.system.iPodTouch,this.system.Android=/Android/.test(t),this.system.Linux=!this.system.Android&&/Linux/.test(t),this.system.OSX?(this.system.OSName="OS X",this.parseOSXVersion(t)):this.system.Windows?(this.system.OSName="Windows",this.parseWindowsVersion(t)):this.system.Linux?(this.system.OSName="Linux",this.parseLinuxVersion(t)):this.system.iOS?(this.system.OSName="iOS",this.parseIOSVersion(t)):this.system.Android&&(this.system.OSName="Android",this.parseAndroidVersion(t))},parseBrowser:function(t){if(this.browser.Version={},this.browser.Safari=/Version\/([\d\.]+) Safari\//.test(t),this.browser.Safari&&(this.browser.Name="Safari",this.browser.Vendor="Apple",this.browser.Version.versionString=RegExp.$1),this.browser.Chrome=/Chrome\/([\d\.]+) Safari\//.test(t),this.browser.Chrome&&(this.browser.Name="Chrome",this.browser.Vendor="Google",this.browser.Version.versionString=RegExp.$1),this.browser.Opera=/Opera\/[\d\.]+/.test(t),this.browser.Opera){this.browser.Name="Opera",this.browser.Vendor="Opera Software";/Version\/([\d\.]+)/.test(t);this.browser.Version.versionString=RegExp.$1}if(this.browser.Firefox=/Gecko\/[\d\.]+ Firefox\/([\d\.]+)/.test(t),this.browser.Firefox&&(this.browser.Name="Firefox",this.browser.Vendor="Mozilla Foundation",this.browser.Version.versionString=RegExp.$1),this.browser.Edge=/Edge\/(.*)/.test(t),this.browser.Edge){var e=/Edge\/(.*)/.exec(t);this.browser.Name="Edge",this.browser.Chrome=!1,this.browser.Vendor="Microsoft",this.browser.Version.versionString=e[1]}if(this.browser.Explorer=/MSIE ([\d\.]+)/.test(t),this.browser.Explorer)this.browser.Name="Internet Explorer",this.browser.Vendor="Microsoft",this.browser.Version.versionString=RegExp.$1;else{var n=/\Mozilla\/5.0 \(([^)]+)\) like Gecko/,i=n.exec(t);if(i){var r=(n=/rv:(.*)/).exec(i[1]);this.browser.Explorer=!0,this.browser.Name="Internet Explorer",this.browser.Vendor="Microsoft",this.browser.Version.versionString=r?r[1]:"unknown"}}this.system.iOS?(this.browser.IsMobileVersion=!0,this.browser.MobileSafari=/Version\/([\d\.]+) Mobile/.test(t),this.browser.MobileSafari&&(this.browser.Name="Mobile Safari",this.browser.Vendor="Apple",this.browser.Version.versionString=RegExp.$1),this.browser.Android=!1):this.system.Android?(this.browser.IsMobileVersion=!0,this.browser.Android=/Version\/([\d\.]+) Mobile/.test(t),this.browser.MobileSafari?(this.browser.Name="Android Browser",this.browser.Vendor="Google",this.browser.Version.versionString=RegExp.$1):(this.browser.Chrome=/Chrome\/([\d\.]+)/.test(t),this.browser.Name="Chrome",this.browser.Vendor="Google",this.browser.Version.versionString=RegExp.$1),this.browser.Safari=!1):this.browser.IsMobileVersion=!1,this.parseBrowserVersion(t)},parseBrowserVersion:function(t){/([\d]+)\.([\d]+)\.*([\d]*)/.test(this.browser.Version.versionString)&&(this.browser.Version.major=Number(RegExp.$1),this.browser.Version.minor=Number(RegExp.$2),this.browser.Version.revision=RegExp.$3?Number(RegExp.$3):0)},parseOSXVersion:function(t){var e=/Mac OS X (\d+_\d+_*\d*)/.test(t)?RegExp.$1:"";switch(this.system.Version={},""!=e?/(\d+)_(\d+)_*(\d*)/.test(e)&&(this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=RegExp.$3?Number(RegExp.$3):0):(e=/Mac OS X (\d+\.\d+\.*\d*)/.test(t)?RegExp.$1:"Unknown",/(\d+)\.(\d+)\.*(\d*)/.test(e)&&(this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=RegExp.$3?Number(RegExp.$3):0)),this.system.Version.major||(this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.revision=0),this.system.Version.stringValue=this.system.Version.major+"."+this.system.Version.minor+"."+this.system.Version.revision,this.system.Version.minor){case 0:this.system.Version.name="Cheetah";break;case 1:this.system.Version.name="Puma";break;case 2:this.system.Version.name="Jaguar";break;case 3:this.system.Version.name="Panther";break;case 4:this.system.Version.name="Tiger";break;case 5:this.system.Version.name="Leopard";break;case 6:this.system.Version.name="Snow Leopard";break;case 7:this.system.Version.name="Lion";break;case 8:this.system.Version.name="Mountain Lion"}},parseWindowsVersion:function(t){if(this.system.Version={},/NT (\d+)\.(\d*)/.test(t)){this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=0,this.system.Version.stringValue="NT "+this.system.Version.major+"."+this.system.Version.minor;var e=this.system.Version.major,n=this.system.Version.minor;5==e?this.system.Version.name=0==n?"2000":"XP":6==e&&(0==n?this.system.Version.name="Vista":1==n?this.system.Version.name="7":2==n&&(this.system.Version.name="8"))}else this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.name="Unknown",this.system.Version.stringValue="Unknown"},parseLinuxVersion:function(t){this.system.Version={},this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.revision=0,this.system.Version.name="",this.system.Version.stringValue="Unknown distribution"},parseIOSVersion:function(t){this.system.Version={},/iPhone OS (\d+)_(\d+)_*(\d*)/i.test(t)?(this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=RegExp.$3?Number(RegExp.$3):0,this.system.Version.stringValue=this.system.Version.major+"."+this.system.Version.minor+"."+this.system.Version.revision,this.system.Version.name="iOS"):(this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.name="Unknown",this.system.Version.stringValue="Unknown")},parseAndroidVersion:function(t){this.system.Version={},/Android (\d+)\.(\d+)\.*(\d*)/.test(t)?(this.system.Version.major=Number(RegExp.$1),this.system.Version.minor=Number(RegExp.$2),this.system.Version.revision=RegExp.$3?Number(RegExp.$3):0,this.system.Version.stringValue=this.system.Version.major+"."+this.system.Version.minor+"."+this.system.Version.revision):(this.system.Version.major=0,this.system.Version.minor=0,this.system.Version.revision=0),/Build\/([a-zA-Z]+)/.test(t)?this.system.Version.name=RegExp.$1:this.system.Version.name="Unknown version",this.system.Version.stringValue=this.system.Version.major+"."+this.system.Version.minor+"."+this.system.Version.revision},getInfoString:function(){return navigator.userAgent}},{})}();bg.utils.UserAgent=e,bg.utils.userAgent=new e;var n=function(){return $traceurRuntime.createClass(function(){},{get sep(){return"/"},join:function(t,e){return t.lastIndexOf(this.sep)!=t.length-1?t+this.sep+e:t+e},extension:function(t){return t.split(".").pop()},fileName:function(t){return t.split(this.sep).pop()},removeFileName:function(t){var e=t.split(this.sep);return e.pop(),e.join(this.sep)}},{})}();bg.utils.Path=n,bg.utils.path=new n}(),function(){var t=[],e=[],n=function(){return $traceurRuntime.createClass(function(){this._disableCache=!1},{get disableCache(){return this._disableCache},set disableCache(t){this._disableCache=t},getRequest:function(t,e,n,i){},loadImage:function(t,e,n){},loadVideo:function(t,e,n){}},{})}(),i={mp4:function(t,n,i){var r=document.createElement("video");e.push(r),r.crossOrigin="",r.autoplay=!0,r.setAttribute("playsinline",null),r.addEventListener("canplay",function(t){var i=e.indexOf(t.target);-1!=i&&e.splice(i,1),n(event.target)}),r.addEventListener("error",function(e){i(new Error("Error loading video: "+t))}),r.addEventListener("abort",function(e){i(new Error("Error loading video: "+t))}),r.src=t}};i.m4v=i.mp4;var r=function(e){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this)},{getRequest:function(t,e,n,i){var r=new XMLHttpRequest;return i||(i=function(t){console.log("Loading "+t.file+": "+t.loaded/t.total*100+" %")}),r.open("GET",t,!0),r.addEventListener("load",function(){200===r.status?e(r):n(new Error("Error receiving data: "+r.status+", url: "+t))},!1),r.addEventListener("error",function(){n(new Error("Cannot make AJAX request. Url: "+t))},!1),r.addEventListener("progress",function(e){i({file:t,loaded:e.loaded,total:e.total})},!1),r},loadImage:function(e,n,i){var r=new Image;t.push(r),r.crossOrigin="",r.addEventListener("load",function(e){var i=t.indexOf(e.target);-1!=i&&t.splice(i,1),n(e.target)}),r.addEventListener("error",function(t){i(new Error("Error loading image: "+e))}),r.addEventListener("abort",function(t){i(new Error("Image load aborted: "+e))}),this.disableCache&&(e+="?"+bg.utils.generateUUID()),r.src=e},loadVideo:function(t,e,n){var i=s.GetExtension(t),r=bg.utils.HTTPResourceProvider.GetVideoLoaderForType(i);r?r.apply(this,[t,e,n]):n(new Error("Could not find video loader for resource: "+t))}},{AddVideoLoader:function(t,e){i[t]=e},GetVideoLoaderForType:function(t){return i[t]},GetCompatibleVideoFormats:function(){return Object.keys(i)},IsVideoCompatible:function(t){var e=s.GetExtension(t);return-1!=bg.utils.HTTPResourceProvider.GetCompatibleVideoFormats().indexOf(e)}},e)}(n);bg.utils.ResourceProvider=n,bg.utils.HTTPResourceProvider=r;var a=new r,s=function(){function t(){}return $traceurRuntime.createClass(t,{},{SetResourceProvider:function(t){a=t},GetResourceProvider:function(){return a},GetExtension:function(t){var e=/\.([a-z0-9-_]*)(\?.*)?(\#.*)?$/i.exec(t);return e&&e[1].toLowerCase()||""},JoinUrl:function(t,e){return 0==t.length?e:0==e.length?t:/\/$/.test(t)?t+e:t+"/"+e},IsFormat:function(e,n){return null!=n.find(function(t){return t==this},t.GetExtension(e))},IsImage:function(e){return t.IsFormat(e,["jpg","jpeg","gif","png"])},IsBinary:function(e){var n=void 0!==arguments[1]?arguments[1]:["vwglb","bg2"];return t.IsFormat(e,n)},IsVideo:function(e){var n=void 0!==arguments[1]?arguments[1]:["mp4","m4v","ogg","ogv","m3u8","webm"];return t.IsFormat(e,n)},LoadMultiple:function(e,n){var i={},r=function(t){i[t.file]=t;var r=0,a=0;for(var s in i){var o=i[s];r+=o.total,a+=o.loaded}n?n({fileList:e,total:r,loaded:a}):console.log("Loading "+Object.keys(i).length+" files: "+a/r*100+"% completed")},a=[];e.forEach(function(e){a.push(t.Load(e,r))});var s=a.map(function(t){return new Promise(function(e){var n=new Array(2);t.then(function(t){n[0]=t}).catch(function(t){n[1]=t}).then(function(){e(n)})})});return Promise.all(s).then(function(t){var n={};return e.forEach(function(e,i){var r=t[i];n[e]=r[1]?null:r[0]}),n})},Load:function(e,n){var i=null;switch(!0){case e.constructor===Array:i=t.LoadMultiple;break;case t.IsImage(e):i=t.LoadImage;break;case t.IsBinary(e):i=t.LoadBinary;break;case t.IsVideo(e):i=t.LoadVideo;break;case"json"==t.GetExtension(e):i=t.LoadJson;break;default:i=t.LoadText}return i(e,n)},LoadText:function(t,e){return new Promise(function(n,i){a.getRequest(t,function(t){n(t.responseText)},function(t){i(t)},e).send()})},LoadVideo:function(t,e){return new Promise(function(e,n){a.loadVideo(t,function(t){e(t),bg.emitImageLoadEvent(t)},function(t){n(t)})})},LoadBinary:function(t,e){return new Promise(function(n,i){var r=a.getRequest(t,function(t){n(t.response)},function(t){i(t)},e);r.responseType="arraybuffer",r.send()})},LoadImage:function(t){return new Promise(function(e,n){a.loadImage(t,function(t){e(t),bg.emitImageLoadEvent(t)},function(t){n(t)})})},LoadJson:function(t){return new Promise(function(e,n){a.getRequest(t,function(t){try{e(JSON.parse(t.responseText))}catch(t){n(new Error("Error parsing JSON data"))}},function(t){n(t)}).send()})}})}();bg.utils.Resource=s,bg.utils.requireGlobal=function(t){var e=document.createElement("script");e.src=t,e.type="text/javascript",e.async=!1,document.getElementsByTagName("head")[0].appendChild(e)}}(),bg.base64=bg.base64||{},bg.base64.toUint6=function(t){return t>64&&t<91?t-65:t>96&&t<123?t-71:t>47&&t<58?t+4:43===t?62:47===t?63:0},bg.base64.toArray=function(t,e){for(var n=t.replace(/[^A-Za-z0-9\+\/]/g,""),i=n.length,r=e?Math.ceil((3*i+1>>2)/e)*e:3*i+1>>2,a=new Uint8Array(r),s=void 0,o=void 0,u=0,h=0,l=0;l<i;l++)if(o=3&l,u|=b64ToUint6(n.charCodeAt(l))<<18-6*o,3===o||i-l==1){for(s=0;s<3&&h<r;s++,h++)a[h]=u>>>(16>>>s&24)&255;u=0}return a},bg.base64.withUint6ToB64=function(t){return t<26?t+65:t<52?t+71:t<62?t-4:62===t?43:63===t?47:65},bg.base64.encodeArray=function(t){for(var e=2,n="",i=t.length,r=0,a=0;a<i;a++)e=a%3,a>0&&4*a/3%76==0&&(n+="\r\n"),r|=t[a]<<(16>>>e&24),2!==e&&t.length-a!=1||(n+=String.fromCharCode(uint6ToB64(r>>>18&63),uint6ToB64(r>>>12&63),uint6ToB64(r>>>6&63),uint6ToB64(63&r)),r=0);return n.substr(0,n.length-2+e)+(2===e?"":1===e?"=":"==")},function(){var t=null,e=function(){return $traceurRuntime.createClass(function(){},{get id(){return this._engineId},get texture(){return this._texture},get pipeline(){return this._pipeline},get polyList(){return this._polyList},get shader(){return this._shader},get colorBuffer(){return this._colorBuffer},get textureBuffer(){return this._textureBuffer},get shaderSource(){return this._shaderSource},get cubemapCapture(){return this._cubemapCapture},get textureMerger(){return this._textureMerger}},{Set:function(e){t=e},Get:function(){return t}})}();bg.Engine=e}(),function(){var t=function(){return $traceurRuntime.createClass(function(){},{init:function(){},frame:function(t){},displayGizmo:function(t,e){},willDisplay:function(t,e){},display:function(t,e){void 0!==arguments[2]&&arguments[2]},didDisplay:function(t,e){},willUpdate:function(t,e,n){},draw:function(t,e,n,i){},didUpdate:function(t,e,n){},reshape:function(t,e,n,i){},keyDown:function(t){},keyUp:function(t){},mouseUp:function(t){},mouseDown:function(t){},mouseMove:function(t){},mouseOut:function(t){},mouseDrag:function(t){},mouseWheel:function(t){},touchStart:function(t){},touchMove:function(t){},touchEnd:function(t){},postRedisplay:function(){var t=void 0!==arguments[0]?arguments[0]:4;bg.app.MainLoop.singleton.postRedisplay(t)},postReshape:function(){bg.app.MainLoop.singleton.postReshape()}},{})}();bg.LifeCycle=t}(),function(t){function e(t){var e,i;if(g=!1,m=d=(t+="").length,d>63){for(n(t.substring(0,64)),r(h),g=!0,e=128;d>=e;e+=64)n(t.substring(e-64,e)),a(h);t=t.substring(e-64),d=t.length}for(u[0]=u[1]=u[2]=u[3]=u[4]=u[5]=u[6]=u[7]=u[8]=u[9]=u[10]=u[11]=u[12]=u[13]=u[14]=u[15]=0,e=0;d>e;e++)0==(i=3&e)?u[e>>2]=t.charCodeAt(e):u[e>>2]|=t.charCodeAt(e)<<f[i];return u[e>>2]|=l[3&e],e>55?(g?a(u):(r(u),g=!0),a([0,0,0,0,0,0,0,0,0,0,0,0,0,0,m<<3,0])):(u[14]=m<<3,void(g?a(u):r(u)))}function n(t){for(var e=16;e--;){var n=e<<2;h[e]=t.charCodeAt(n)+(t.charCodeAt(n+1)<<8)+(t.charCodeAt(n+2)<<16)+(t.charCodeAt(n+3)<<24)}}function i(t,e,n,i,r,a,s){return((e+=t+i+s)<<r|e>>>a)+n<<0}function r(t){s(0,0,0,0,t),v[0]=p[0]+1732584193<<0,v[1]=p[1]-271733879<<0,v[2]=p[2]-1732584194<<0,v[3]=p[3]+271733878<<0}function a(t){s(v[0],v[1],v[2],v[3],t),v[0]=p[0]+v[0]<<0,v[1]=p[1]+v[1]<<0,v[2]=p[2]+v[2]<<0,v[3]=p[3]+v[3]<<0}function s(t,e,n,r,a){var s,o;g?(t=i((n^r)&e^r,t,e,a[0],7,25,-680876936),r=i((e^n)&t^n,r,t,a[1],12,20,-389564586),n=i((t^e)&r^e,n,r,a[2],17,15,606105819),e=i((r^t)&n^t,e,n,a[3],22,10,-1044525330)):(t=((t=a[0]-680876937)<<7|t>>>25)-271733879<<0,r=((r=a[1]-117830708+(2004318071&t^-1732584194))<<12|r>>>20)+t<<0,n=((n=a[2]-1126478375+((-271733879^t)&r^-271733879))<<17|n>>>15)+r<<0,e=((e=a[3]-1316259209+((r^t)&n^t))<<22|e>>>10)+n<<0),t=i((n^r)&e^r,t,e,a[4],7,25,-176418897),r=i((e^n)&t^n,r,t,a[5],12,20,1200080426),n=i((t^e)&r^e,n,r,a[6],17,15,-1473231341),e=i((r^t)&n^t,e,n,a[7],22,10,-45705983),t=i((n^r)&e^r,t,e,a[8],7,25,1770035416),r=i((e^n)&t^n,r,t,a[9],12,20,-1958414417),n=i((t^e)&r^e,n,r,a[10],17,15,-42063),e=i((r^t)&n^t,e,n,a[11],22,10,-1990404162),t=i((n^r)&e^r,t,e,a[12],7,25,1804603682),r=i((e^n)&t^n,r,t,a[13],12,20,-40341101),n=i((t^e)&r^e,n,r,a[14],17,15,-1502002290),e=i((r^t)&n^t,e,n,a[15],22,10,1236535329),t=i((e^n)&r^n,t,e,a[1],5,27,-165796510),r=i((t^e)&n^e,r,t,a[6],9,23,-1069501632),n=i((r^t)&e^t,n,r,a[11],14,18,643717713),e=i((n^r)&t^r,e,n,a[0],20,12,-373897302),t=i((e^n)&r^n,t,e,a[5],5,27,-701558691),r=i((t^e)&n^e,r,t,a[10],9,23,38016083),n=i((r^t)&e^t,n,r,a[15],14,18,-660478335),e=i((n^r)&t^r,e,n,a[4],20,12,-405537848),t=i((e^n)&r^n,t,e,a[9],5,27,568446438),r=i((t^e)&n^e,r,t,a[14],9,23,-1019803690),n=i((r^t)&e^t,n,r,a[3],14,18,-187363961),e=i((n^r)&t^r,e,n,a[8],20,12,1163531501),t=i((e^n)&r^n,t,e,a[13],5,27,-1444681467),r=i((t^e)&n^e,r,t,a[2],9,23,-51403784),n=i((r^t)&e^t,n,r,a[7],14,18,1735328473),e=i((n^r)&t^r,e,n,a[12],20,12,-1926607734),t=i((s=e^n)^r,t,e,a[5],4,28,-378558),r=i(s^t,r,t,a[8],11,21,-2022574463),n=i((o=r^t)^e,n,r,a[11],16,16,1839030562),e=i(o^n,e,n,a[14],23,9,-35309556),t=i((s=e^n)^r,t,e,a[1],4,28,-1530992060),r=i(s^t,r,t,a[4],11,21,1272893353),n=i((o=r^t)^e,n,r,a[7],16,16,-155497632),e=i(o^n,e,n,a[10],23,9,-1094730640),t=i((s=e^n)^r,t,e,a[13],4,28,681279174),r=i(s^t,r,t,a[0],11,21,-358537222),n=i((o=r^t)^e,n,r,a[3],16,16,-722521979),e=i(o^n,e,n,a[6],23,9,76029189),t=i((s=e^n)^r,t,e,a[9],4,28,-640364487),r=i(s^t,r,t,a[12],11,21,-421815835),n=i((o=r^t)^e,n,r,a[15],16,16,530742520),e=i(o^n,e,n,a[2],23,9,-995338651),t=i(n^(e|~r),t,e,a[0],6,26,-198630844),r=i(e^(t|~n),r,t,a[7],10,22,1126891415),n=i(t^(r|~e),n,r,a[14],15,17,-1416354905),e=i(r^(n|~t),e,n,a[5],21,11,-57434055),t=i(n^(e|~r),t,e,a[12],6,26,1700485571),r=i(e^(t|~n),r,t,a[3],10,22,-1894986606),n=i(t^(r|~e),n,r,a[10],15,17,-1051523),e=i(r^(n|~t),e,n,a[1],21,11,-2054922799),t=i(n^(e|~r),t,e,a[8],6,26,1873313359),r=i(e^(t|~n),r,t,a[15],10,22,-30611744),n=i(t^(r|~e),n,r,a[6],15,17,-1560198380),e=i(r^(n|~t),e,n,a[13],21,11,1309151649),t=i(n^(e|~r),t,e,a[4],6,26,-145523070),r=i(e^(t|~n),r,t,a[11],10,22,-1120210379),n=i(t^(r|~e),n,r,a[2],15,17,718787259),e=i(r^(n|~t),e,n,a[9],21,11,-343485551),p[0]=t,p[1]=e,p[2]=n,p[3]=r}var o=[],u=[],h=[],l=[],c="0123456789abcdef".split(""),f=[],v=[],g=!1,m=0,d=0,p=[];if(t.Int32Array)u=new Int32Array(16),h=new Int32Array(16),l=new Int32Array(4),f=new Int32Array(4),v=new Int32Array(4),p=new Int32Array(4);else{var b;for(b=0;16>b;b++)u[b]=h[b]=0;for(b=0;4>b;b++)l[b]=f[b]=v[b]=p[b]=0}l[0]=128,l[1]=32768,l[2]=8388608,l[3]=-2147483648,f[0]=0,f[1]=8,f[2]=16,f[3]=24,t.md5=t.md5||function(t,n,i){e(n?t:function(t){for(var e="",n="",i=0,r=0,a=0,s=t.length;s>a;a++){var o=t.charCodeAt(a);128>o?r++:(n=2048>o?String.fromCharCode(o>>6|192,63&o|128):String.fromCharCode(o>>12|224,o>>6&63|128,63&o|128),r>i&&(e+=t.slice(i,r)),e+=n,i=r=a+1)}return r>i&&(e+=t.slice(i,s)),e}(t));var r=v[0];return o[1]=c[15&r],o[0]=c[15&(r>>=4)],o[3]=c[15&(r>>=4)],o[2]=c[15&(r>>=4)],o[5]=c[15&(r>>=4)],o[4]=c[15&(r>>=4)],o[7]=c[15&(r>>=4)],o[6]=c[15&(r>>=4)],r=v[1],o[9]=c[15&r],o[8]=c[15&(r>>=4)],o[11]=c[15&(r>>=4)],o[10]=c[15&(r>>=4)],o[13]=c[15&(r>>=4)],o[12]=c[15&(r>>=4)],o[15]=c[15&(r>>=4)],o[14]=c[15&(r>>=4)],r=v[2],o[17]=c[15&r],o[16]=c[15&(r>>=4)],o[19]=c[15&(r>>=4)],o[18]=c[15&(r>>=4)],o[21]=c[15&(r>>=4)],o[20]=c[15&(r>>=4)],o[23]=c[15&(r>>=4)],o[22]=c[15&(r>>=4)],r=v[3],o[25]=c[15&r],o[24]=c[15&(r>>=4)],o[27]=c[15&(r>>=4)],o[26]=c[15&(r>>=4)],o[29]=c[15&(r>>=4)],o[28]=c[15&(r>>=4)],o[31]=c[15&(r>>=4)],o[30]=c[15&(r>>=4)],i?o:o.join("")}}("undefined"==typeof global?window:global),bg.utils.md5=md5,function(){bg.utils.generateUUID=function(){var t=(new Date).getTime();return"undefined"!=typeof performance&&"function"==typeof performance.now&&(t+=performance.now()),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:3&n|8).toString(16)})}}(),bg.app={},function(){var t=function(){return $traceurRuntime.createClass(function(t){var e=this;if(this._domElem=t,this._domElem.style.MozUserSelect="none",this._domElem.style.WebkitUserSelect="none",this._domElem.setAttribute("onselectstart","return false"),this._multisample=1,e._context=bg.utils.initWebGLContext(t),!e._context.supported)throw new Error("Sorry, your browser does not support WebGL.")},{get multisample(){return this._multisample},set multisample(t){this._multisample=t},get context(){return this._context},get domElement(){return this._domElem},get width(){return this._domElem.clientWidth},get height(){return this._domElem.clientHeight},screenshot:function(t,e,n){var i="",r={};e&&(n=n||e,i=this.domElement.style.cssText,r.width=this.domElement.width,r.height=this.domElement.height,this.domElement.style.cssText="top:auto;left:auto;bottom:auto;right:auto;width:"+e+"px;height:"+n+"px;",this.domElement.width=e,this.domElement.height=n,bg.app.MainLoop.singleton.windowController.reshape(e,n),bg.app.MainLoop.singleton.windowController.postRedisplay(),bg.app.MainLoop.singleton.windowController.display());var a=this.domElement.toDataURL(t);return e&&(this.domElement.style.cssText=i,this.domElement.width=r.width,this.domElement.height=r.height,bg.app.MainLoop.singleton.windowController.reshape(r.width,r.height),bg.app.MainLoop.singleton.windowController.postRedisplay(),bg.app.MainLoop.singleton.windowController.display()),a}},{})}();bg.app.Canvas=t;var e=function(){return $traceurRuntime.createClass(function(t){this._context=t},{get context(){return this._context},set context(t){this._context=t}},{})}();bg.app.ContextObject=e}(),function(){bg.app.SpecialKey={BACKSPACE:"Backspace",TAB:"Tab",ENTER:"Enter",SHIFT:"Shift",SHIFT_LEFT:"ShiftLeft",SHIFT_RIGHT:"ShiftRight",CTRL:"Control",CTRL_LEFT:"ControlLeft",CTRL_LEFT:"ControlRight",ALT:"Alt",ALT_LEFT:"AltLeft",ALT_RIGHT:"AltRight",PAUSE:"Pause",CAPS_LOCK:"CapsLock",ESCAPE:"Escape",PAGE_UP:"PageUp",PAGEDOWN:"PageDown",END:"End",HOME:"Home",LEFT_ARROW:"ArrowLeft",UP_ARROW:"ArrowUp",RIGHT_ARROW:"ArrowRight",DOWN_ARROW:"ArrowDown",INSERT:"Insert",DELETE:"Delete"};var t=function(){return $traceurRuntime.createClass(function(){this._executeDefault=!1},{get executeDefault(){return this._executeDefault},set executeDefault(t){this._executeDefault=t}},{})}();bg.app.EventBase=t;var e=function(t){function e(t,n){$traceurRuntime.superConstructor(e).call(this),this.key=t,this.event=n}return $traceurRuntime.createClass(e,{isSpecialKey:function(){return e.IsSpecialKey(this.event)}},{IsSpecialKey:function(t){return null!=bg.app.SpecialKey[t.code]}},t)}(t);bg.app.KeyboardEvent=e,bg.app.MouseButton={LEFT:0,MIDDLE:1,RIGHT:2,NONE:-1};var n=function(t){return $traceurRuntime.createClass(function t(){var e=void 0!==arguments[0]?arguments[0]:bg.app.MouseButton.NONE,n=void 0!==arguments[1]?arguments[1]:-1,i=void 0!==arguments[2]?arguments[2]:-1,r=void 0!==arguments[3]?arguments[3]:0,a=void 0!==arguments[4]?arguments[4]:null;$traceurRuntime.superConstructor(t).call(this),this.button=e,this.x=n,this.y=i,this.delta=r,this.event=a},{},{},t)}(t);bg.app.MouseEvent=n;var i=function(t){return $traceurRuntime.createClass(function t(e,n){$traceurRuntime.superConstructor(t).call(this),this.touches=e,this.event=n},{},{},t)}(t);bg.app.TouchEvent=i}(),function(){var t=null,e={leftButton:!1,middleButton:!1,rightButton:!1,pos:{x:-1,y:-1}};Object.defineProperty(e,"anyButton",{get:function(){return this.leftButton||this.middleButton||this.rightButton}});var n=function(){return $traceurRuntime.createClass(function(){},{},{LeftButton:function(){return e.leftButton},MiddleButton:function(){return e.middleButton},RightButton:function(){return e.rightButton},Position:function(){return e.pos}})}();bg.app.Mouse=n,bg.app.FrameUpdate={AUTO:0,MANUAL:1};var i=function(){return $traceurRuntime.createClass(function(){var t=this;this._canvas=null,this._windowController=null,this._updateMode=bg.app.FrameUpdate.AUTO,this._redisplayFrames=1,bg.bindImageLoadEvent(function(){t.postRedisplay()})},{get canvas(){return this._canvas},set canvas(t){this._canvas=new bg.app.Canvas(t)},get windowController(){return this._windowController},get updateMode(){return this._updateMode},set updateMode(t){this._updateMode=t,this._updateMode==bg.app.FrameUpdate.AUTO&&(this._redisplayFrames=1)},get redisplay(){return this._redisplayFrames>0},get mouseButtonStatus(){return e},run:function(n){var i=void 0!==arguments[1]?arguments[1]:[];this._windowController=n,s=i,this.postRedisplay(),this.windowController.init(),function(){if(o(),window.addEventListener("resize",function(t){o()}),!t.canvas)throw new Error("Configuration error in MainLoop: no canvas defined");var n=t.canvas.domElement;if(-1==s.indexOf("mousedown")&&n.addEventListener("mousedown",function(n){if(!function(n){var i=t.canvas.domElement.getBoundingClientRect(),r=t.canvas.multisample;switch(e.pos.x=(n.clientX-i.left)*r,e.pos.y=(n.clientY-i.top)*r,n.button){case bg.app.MouseButton.LEFT:e.leftButton=!0;break;case bg.app.MouseButton.MIDDLE:e.middleButton=!0;break;case bg.app.MouseButton.RIGHT:e.rightButton=!0}var a=new bg.app.MouseEvent(n.button,e.pos.x,e.pos.y,0,n);return t.windowController.mouseDown(a),a}(n).executeDefault)return n.preventDefault(),!1}),-1==s.indexOf("mousemove")&&n.addEventListener("mousemove",function(t){if(!u(t).executeDefault)return t.preventDefault(),!1}),-1==s.indexOf("mouseout")&&n.addEventListener("mouseout",function(n){if(!function(){var n=new bg.app.MouseEvent(bg.app.MouseButton.NONE,e.pos.x,e.pos.y,0,{});t.windowController.mouseOut(n),e.leftButton&&(e.leftButton=!1,n=new bg.app.MouseEvent(bg.app.MouseButton.LEFT,e.pos.x,e.pos.y,0,{}),t.windowController.mouseUp(n));e.middleButton&&(e.middleButton=!1,n=new bg.app.MouseEvent(bg.app.MouseButton.MIDDLE,e.pos.x,e.pos.y,0,{}),t.windowController.mouseUp(n));e.rightButton&&(n=new bg.app.MouseEvent(bg.app.MouseButton.RIGHT,e.pos.x,e.pos.y,0,{}),t.windowController.mouseUp(n),e.rightButton=!1);return n}().executeDefault)return n.preventDefault(),!1}),-1==s.indexOf("mouseover")&&n.addEventListener("mouseover",function(t){if(!(e=t,u(e)).executeDefault)return t.preventDefault(),!1;var e}),-1==s.indexOf("mouseup")&&n.addEventListener("mouseup",function(n){if(!function(n){switch(n.button){case bg.app.MouseButton.LEFT:e.leftButton=!1;break;case bg.app.MouseButton.MIDDLE:e.middleButton=!1;break;case bg.app.MouseButton.RIGHT:e.rightButton=!1}var i=t.canvas.domElement.getBoundingClientRect(),r=t.canvas.multisample;e.pos.x=(n.clientX-i.left)*r,e.pos.y=(n.clientY-i.top)*r;var a=new bg.app.MouseEvent(n.button,e.pos.x,e.pos.y,0,n);return t.windowController.mouseUp(a),a}(n).executeDefault)return n.preventDefault(),!1}),-1==s.indexOf("touchstart")&&n.addEventListener("touchstart",function(e){if(!(n=e,i=h(n),t.windowController.touchStart(i),i).executeDefault)return e.preventDefault(),!1;var n,i}),-1==s.indexOf("touchmove")&&n.addEventListener("touchmove",function(e){if(!(n=e,i=h(n),t.windowController.touchMove(i),i).executeDefault)return e.preventDefault(),!1;var n,i}),-1==s.indexOf("touchend")&&n.addEventListener("touchend",function(e){if(!(n=e,i=h(n),t.windowController.touchEnd(i),i).executeDefault)return e.preventDefault(),!1;var n,i}),-1==s.indexOf("mousewheel")){var i=/Firefox/i.test(navigator.userAgent)?"DOMMouseScroll":"mousewheel";n.addEventListener(i,function(n){if(!function(n){var i=t.canvas.domElement.getBoundingClientRect(),r=t.canvas.multisample;e.pos.x=(n.clientX-i.left)*r,e.pos.y=(n.clientY-i.top)*r;var a=n.wheelDelta?-1*n.wheelDelta:10*n.detail,s=new bg.app.MouseEvent(bg.app.MouseButton.NONE,e.pos.x,e.pos.y,a,n);return t.windowController.mouseWheel(s),s}(n).executeDefault)return n.preventDefault(),!1})}-1==s.indexOf("keydown")&&window.addEventListener("keydown",function(e){var n,i;n=e,i=bg.app.KeyboardEvent.IsSpecialKey(n)?n.keyCode:n.code,t.windowController.keyDown(new bg.app.KeyboardEvent(i,n))}),-1==s.indexOf("keyup")&&window.addEventListener("keyup",function(e){var n,i;n=e,i=bg.app.KeyboardEvent.IsSpecialKey(n)?n.keyCode:n.code,t.windowController.keyUp(new bg.app.KeyboardEvent(i,n))}),n.oncontextmenu=function(t){return!1}}(),a()},postRedisplay:function(){var t=void 0!==arguments[0]?arguments[0]:4;this._redisplayFrames=t},postReshape:function(){o()}},{})}(),r=0;function a(e){e=e||0,requestAnimFrame(a);var n,i=e-r;r=e,n=i,t.redisplay&&(t.windowController.frame(n),t.updateMode==bg.app.FrameUpdate.AUTO?t._redisplayFrames=1:t._redisplayFrames--,t.windowController.display())}var s=[];function o(){if(t.canvas&&t.windowController){var e=t.canvas.multisample;t.canvas.domElement.width=t.canvas.width*e,t.canvas.domElement.height=t.canvas.height*e,t.windowController.reshape(t.canvas.width*e,t.canvas.height*e)}}function u(n){var i=t.canvas.domElement.getBoundingClientRect(),r=t.canvas.multisample;e.pos.x=(n.clientX-i.left)*r,e.pos.y=(n.clientY-i.top)*r;var a=new bg.app.MouseEvent(bg.app.MouseButton.NONE,e.pos.x,e.pos.y,0,n);return t.windowController.mouseMove(a),e.anyButton&&t.windowController.mouseDrag(a),a}function h(e){for(var n=t.canvas.domElement.getBoundingClientRect(),i=[],r=0;r<e.touches.length;++r){var a=e.touches[r];i.push({identifier:a.identifier,x:a.clientX-n.left,y:a.clientY-n.top,force:a.force,rotationAngle:a.rotationAngle,radiusX:a.radiusX,radiusY:a.radiusY})}return new bg.app.TouchEvent(i,e)}bg.app.MainLoop={},Object.defineProperty(bg.app.MainLoop,"singleton",{get:function(){return t||(t=new i),t}})}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{postRedisplay:function(){var t=void 0!==arguments[0]?arguments[0]:4;bg.app.MainLoop.singleton.postRedisplay(t)},postReshape:function(){bg.app.MainLoop.singleton.postReshape()},get canvas(){return bg.app.MainLoop.singleton.canvas},get context(){return bg.app.MainLoop.singleton.canvas.context},get gl(){return bg.app.MainLoop.singleton.canvas.context.gl}},{},t)}(bg.LifeCycle);bg.app.WindowController=t}(),bg.base={},bg.s_log=[],bg.log=function(t){console.log&&console.log(t),bg.s_log.push(t)},bg.flushLog=function(){console.log&&bg.s_log.forEach(function(t){console.log(t)}),bg.s_log=[]},bg.emitImageLoadEvent=function(t){var e=new CustomEvent("bg2e:image-load",{image:t});document.dispatchEvent(e)},bg.bindImageLoadEvent=function(t){document.addEventListener("bg2e:image-load",t)},bg.Axis={NONE:0,X:1,Y:2,Z:3},Object.defineProperty(bg,"isElectronApp",{get:function(){try{return process&&process.versions&&"undefined"!==process.versions.electron}catch(t){return!1}}}),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._shader=null,this._inputVars=[],this._shaders=[]},{get inputVars(){return this._inputVars},get numberOfShaders(){return this._shaders.length},setCurrentShader:function(t){this._shader=this._shaders[t]},get shader(){return this._shader},setupShaderSource:function(t){var e=void 0===arguments[1]||arguments[1],n=this,i=e?this._shaders.length:0,r=new bg.base.Shader(this.context);this._inputVars=[];var a=[],s=[];return t.forEach(function(t){t.params.forEach(function(t){t&&("buffer"==t.role?(n._inputVars[t.target]=t.name,a.push(t.name)):"value"==t.role&&s.push(t.name))}),r.addShaderSource(t.type,t.toString())}),r.link(),r.status?r.initVars(a,s):(bg.log(r.compileError),r.compileErrorSource&&(bg.log("Shader source:"),bg.log(r.compileErrorSource)),bg.log(r.linkError)),e?(this._shaders.push(r),this._shader||(this._shader=r)):(this._shaders=[r],this._shader=r),i},beginDraw:function(){},setupVars:function(){},setActive:function(){this.shader.setActive(),this.beginDraw()},clearActive:function(){this.shader.clearActive()},bindPolyList:function(t){var e=this.shader;this.inputVars.vertex&&e.setInputBuffer(this.inputVars.vertex,t.vertexBuffer,3),this.inputVars.normal&&e.setInputBuffer(this.inputVars.normal,t.normalBuffer,3),this.inputVars.tex0&&e.setInputBuffer(this.inputVars.tex0,t.texCoord0Buffer,2),this.inputVars.tex1&&e.setInputBuffer(this.inputVars.tex1,t.texCoord1Buffer,2),this.inputVars.tex2&&e.setInputBuffer(this.inputVars.tex2,t.texCoord2Buffer,2),this.inputVars.color&&e.setInputBuffer(this.inputVars.color,t.colorBuffer,4),this.inputVars.tangent&&e.setInputBuffer(this.inputVars.tangent,t.tangentBuffer,3),this.setupVars()},unbind:function(){var t=this.shader;this.inputVars.vertex&&t.disableInputBuffer(this.inputVars.vertex),this.inputVars.normal&&t.disableInputBuffer(this.inputVars.normal),this.inputVars.tex0&&t.disableInputBuffer(this.inputVars.tex0),this.inputVars.tex1&&t.disableInputBuffer(this.inputVars.tex1),this.inputVars.tex2&&t.disableInputBuffer(this.inputVars.tex2),this.inputVars.color&&t.disableInputBuffer(this.inputVars.color),this.inputVars.tangent&&t.disableInputBuffer(this.inputVars.tangent)}},{},t)}(bg.app.ContextObject);function e(){return bg.base.ShaderLibrary.Get()}bg.base.Effect=t;var n=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._frame=new bg.base.PolyList(e),this._frame.vertex=[1,1,0,-1,1,0,-1,-1,0,1,-1,0],this._frame.texCoord0=[1,1,0,1,0,0,1,0],this._frame.index=[0,1,2,2,3,0],this._frame.build(),this.rebuildShaders()},{rebuildShaders:function(){this.setupShaderSource([this.vertexShaderSource,this.fragmentShaderSource])},get vertexShaderSource(){return this._vertexShaderSource||(this._vertexShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX),this._vertexShaderSource.addParameter([e().inputs.buffers.vertex,e().inputs.buffers.tex0,{name:"fsTexCoord",dataType:"vec2",role:"out"}]),"webgl1"==bg.Engine.Get().id&&this._vertexShaderSource.setMainBody("\n\t\t\t\t\tgl_Position = vec4(inVertex,1.0);\n\t\t\t\t\tfsTexCoord = inTex0;")),this._vertexShaderSource},get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter({name:"fsTexCoord",dataType:"vec2",role:"in"}),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\tgl_FragColor = vec4(0.0,0.0,0.0,1.0);")),this._fragmentShaderSource},drawSurface:function(t){this.setActive(),this._surface=t,this.bindPolyList(this._frame),this._frame.draw(),this.unbind(),this.clearActive()}},{},t)}(t);bg.base.TextureEffect=n}(),function(){var t=function(){return $traceurRuntime.createClass(function(){},{acceptType:function(t,e){return!1},load:function(t,e,n){return new Promise(function(t,e){e(new Error("Not implemented"))})}},{})}();bg.base.LoaderPlugin=t;var e=[];function n(t,e){var n=void 0!==arguments[2]?arguments[2]:null,i=void 0!==arguments[3]?arguments[3]:null;return new Promise(function(a,s){bg.utils.Resource.Load(e,n).then(function(n){return r.LoadData(t,e,n,i)}).then(function(t,e){a(t,e)}).catch(function(t){s(t)})})}function i(t,n,i){var r=void 0!==arguments[3]?arguments[3]:null;return new Promise(function(a,s){var o=null;if(e.some(function(t){if(t.acceptType(n,i))return o=t,!0}),!o)return s(new Error("No suitable plugin found for load "+n));r||(r={}),a(o.load(t,n,i,r))})}var r=function(){return $traceurRuntime.createClass(function(){},{},{StandarizePath:function(t){return t.replace(/\\/g,"/")},RegisterPlugin:function(t){e.push(t)},Load:function(t,e){var r=void 0!==arguments[2]?arguments[2]:null,a=void 0!==arguments[3]?arguments[3]:null;return Array.isArray(e)?function(t,e){var n=void 0!==arguments[2]?arguments[2]:null,r=void 0!==arguments[3]?arguments[3]:null;return new Promise(function(a,s){bg.utils.Resource.LoadMultiple(e,n).then(function(e){var n=[];for(var a in e){var s=e[a];n.push(i(t,a,s,r))}return Promise.all(n)}).then(function(t){var n={};e.forEach(function(e,i){n[e]=t[i]}),a(n)}).catch(function(t){s(t)})})}(t,e,r,a):n(t,e,r,a)},LoadData:function(t,e,n){return i(t,e,n,void 0!==arguments[3]?arguments[3]:null)}})}();bg.base.Loader=r}(),function(){if(!bg.isElectronApp)return!1;var t=function(){return $traceurRuntime.createClass(function(){},{acceptType:function(t,e){return!1},write:function(t,e){}},{})}();bg.base.WriterPlugin=t;var e=[],n=function(){function t(){}return $traceurRuntime.createClass(t,{},{RegisterPlugin:function(t){e.push(t)},Write:function(t,n){return new Promise(function(i,r){var a=null;e.some(function(e){if(e.acceptType(t,n))return a=e,!0}),a?i(a.write(t,n)):r(new Error("No suitable plugin found for write "+t))})},PrepareDirectory:function(e){var n=t.ToSystemPath(e),i=require("fs"),r=require("path"),a=r.sep,s=r.isAbsolute(n)?a:"";n.split(a).reduce(function(t,e){var n=r.resolve(t,e);return i.existsSync(n)||i.mkdirSync(n),n},s)},StandarizePath:function(t){return t.replace(/\\/g,"/")},ToSystemPath:function(t){var e=require("path").sep;return t.replace(/\\/g,e).replace(/\//g,e)},CopyFile:function(e,n){return new Promise(function(i,r){var a=require("fs"),s=require("path"),o=!1;if(e=t.StandarizePath(s.resolve(e)),n=t.StandarizePath(s.resolve(n)),e==n)i();else{var u=function(t){o||(t?r(t):i(),o=!0)},h=a.createReadStream(e);h.on("error",function(t){u(t)});var l=a.createWriteStream(n);l.on("error",function(t){u(t)}),l.on("close",function(t){u()}),h.pipe(l)}})}})}();bg.base.Writer=n}(),function(){if(!bg.isElectronApp)return!1;var t=require("fs");require("path");function e(t,e){if(t){var n=bg.base.Writer.StandarizePath(e.path).split("/");n.pop();var i={src:bg.base.Writer.StandarizePath(t.fileName),dst:null},r=i.src.split("/").pop();return n.push(r),n=n.join("/"),i.dst=n,i.src!=i.dst&&e.copyFiles.push(i),r}return""}function n(t){var n=[];return t.node.drawable.forEach(function(i,r){var a=function(t,n,i){var r=null;if(n instanceof bg.base.Material)r={name:t.name,class:"GenericMaterial",diffuseR:n.diffuse.r,diffuseG:n.diffuse.g,diffuseB:n.diffuse.b,diffuseA:n.diffuse.a,specularR:n.specular.r,specularG:n.specular.g,specularB:n.specular.b,specularA:n.specular.a,shininess:n.shininess,refractionAmount:n.refractionAmount,reflectionAmount:n.reflectionAmount,lightEmission:n.lightEmission,textureOffsetX:n.textureOffset.x,textureOffsetY:n.textureOffset.y,textureScaleX:n.textureScale.x,textureScaleY:n.textureScale.y,lightmapOffsetX:n.lightmapOffset.x,lightmapOffsetY:n.lightmapOffset.y,lightmapScaleX:n.lightmapScale.x,lightmapScaleY:n.lightmapScale.y,normalMapOffsetX:n.normalMapOffset.x,normalMapOffsetY:n.normalMapOffset.y,normalMapScaleX:n.normalMapScale.x,normalMapScaleY:n.normalMapScale.y,castShadows:n.castShadows,receiveShadows:n.receiveShadows,alphaCutoff:n.alphaCutoff,shininessMaskChannel:n.shininessMaskChannel,invertShininessMask:n.shininessMaskInvert,lightEmissionMaskChannel:n.lightEmissionMaskChannel,invertLightEmissionMask:n.lightEmissionMaskInvert,displacementFactor:0,displacementUV:0,tessDistanceFarthest:40,tessDistanceFar:30,tessDistanceNear:15,tessDistanceNearest:8,tessFarthestLevel:1,tessFarLevel:1,tessNearLevel:1,tessNearestLevel:1,reflectionMaskChannel:n.reflectionMaskChannel,invertReflectionMask:n.reflectionMaskInvert,roughness:n.roughness,roughnessMaskChannel:n.roughnessMaskChannel,invertRoughnessMask:n.roughnessMaskInvert,cullFace:n.cullFace,unlit:n.unlit,texture:e(n.texture,i),lightmap:e(n.lightmap,i),normalMap:e(n.normalMap,i),shininessMask:e(n.shininessMask,i),lightEmissionMask:e(n.lightEmissionMask,i),displacementMap:"",reflectionMask:e(n.reflectionMask,i),roughnessMask:e(n.roughnessMask,i),visible:t.visible,visibleToShadows:t.visibleToShadows,groupName:t.groupName};else if(n instanceof bg.base.PBRMaterial){var a=function(t){var a=n[t];a instanceof bg.base.Texture?(r[t]=bg.utils.path.fileName(a.fileName),a.fileName,e(a,i)):a instanceof bg.Vector4||a instanceof bg.Vector3||a instanceof bg.Vector2?r[t]=a.toArray():"number"==typeof a&&(r[t]=a)};r={name:t.name,class:"PBRMaterial",metallicChannel:n.metallicChannel,roughnessChannel:n.roughnessChannel,lightEmissionChannel:n.lightEmissionChannel,heightChannel:n.heightChannel,alphaCutoff:n.alphaCutoff,isTransparent:n.isTransparent,diffuseScale:n.diffuseScale.toArray(),metallicScale:n.metallicScale.toArray(),roughnessScale:n.roughnessScale.toArray(),fresnelScale:n.fresnelScale.toArray(),lightEmissionScale:n.lightEmissionScale.toArray(),heightScale:n.heightScale.toArray(),normalScale:n.normalScale.toArray(),diffuseUV:n.diffuseUV,metallicUV:n.metallicUV,roughnessUV:n.roughnessUV,fresnelUV:n.fresnelUV,ambientOcclussionUV:n.ambientOcclussionUV,lightEmissionUV:n.lightEmissionUV,heightUV:n.heightUV,normalUV:n.normalUV,castShadows:n.castShadows,cullFace:n.cullFace,unlit:n.unlit,visible:t.visible,visibleToShadows:t.visibleToShadows,groupName:t.groupName},a("diffuse"),a("metallic"),a("roughness"),a("fresnel"),a("lightEmission"),a("height"),a("normal"),a("ambientOcclussion")}return r}(i,r,t);n.push(a)}),JSON.stringify(n)}var i=function(){return $traceurRuntime.createClass(function(e,n){this._path=e,this._node=n,this._copyFiles=[],this._stream=t.createWriteStream(e)},{get path(){return this._path},get node(){return this._node},get copyFiles(){return this._copyFiles},get stream(){return this._stream},writeUInt:function(t){var e=Buffer.alloc(4);e.writeUInt32BE(t,0),this.stream.write(e)},writeBlock:function(t){this.stream.write(Buffer.from(t,"utf-8"))},writeString:function(t){this.writeUInt(t.length),this.stream.write(Buffer.from(t,"utf-8"))},writeBuffer:function(t,e){this.writeBlock(t),this.writeUInt(e.length);var n=Buffer.alloc(4*e.length);"indx"==t?e.forEach(function(t,e){return n.writeUInt32BE(t,4*e)}):e.forEach(function(t,e){return n.writeFloatBE(t,4*e)}),this.stream.write(n)},writeTextures:function(){var e=[];return this.copyFiles.forEach(function(n){e.push(new Promise(function(e,i){var r=t.createReadStream(n.src);r.on("error",s);var a=t.createWriteStream(n.dst);function s(t){r.destroy(),a.end(),i(t)}a.on("error",s),a.on("finish",e),r.pipe(a)}))}),Promise.all(e)}},{})}();function r(t){var e=Buffer.alloc(4);[0,1,2,0].forEach(function(t,n){return e.writeInt8(t,n)}),t.stream.write(e),t.writeBlock("hedr"),function(t){var e=[],n=0;t.node.drawable.forEach(function(t,i){var r=t.name;if(!r||-1!=e.indexOf(r)){do{r="polyList_"+n,++n}while(-1!=e.indexOf(r));t.name=r}e.push(r)})}(t);var i=t.node.drawable,r=0;i.forEach(function(){return r++}),t.writeUInt(r),t.writeBlock("mtrl"),t.writeString(n(t)),t.writeBlock("join"),t.writeString(function(t){var e={},n=t.node.component("bg.scene.InputChainJoint"),i=t.node.component("bg.scene.OutputChainJoint");return n&&(e.input={type:"LinkJoint",offset:[n.joint.offset.x,n.joint.offset.y,n.joint.offset.z],pitch:n.joint.pitch,roll:n.joint.roll,yaw:n.joint.yaw}),i&&(e.output=[{type:"LinkJoint",offset:[i.joint.offset.x,i.joint.offset.y,i.joint.offset.z],pitch:i.joint.pitch,roll:i.joint.roll,yaw:i.joint.yaw}]),JSON.stringify(e)}(t))}function a(t){return r(t),t.node.drawable.forEach(function(e,n,i){!function(t,e,n,i){t.writeBlock("plst"),t.writeBlock("pnam"),t.writeString(e.name),t.writeBlock("mnam"),t.writeString(e.name),t.writeBuffer("varr",e.vertex),t.writeBuffer("narr",e.normal),t.writeBuffer("t0ar",e.texCoord0),t.writeBuffer("t1ar",e.texCoord1),t.writeBuffer("indx",e.index)}(t,e)}),t.writeBlock("endf"),new Promise(function(e){(function(t){var e=bg.utils.path.removeFileName(t.path);t.writeBlock("cmps");var n=[],i=[];return t.node._componentsArray.forEach(function(t){if(!(t instanceof bg.scene.Drawable||t instanceof bg.manipulation.Gizmo||t instanceof bg.manipulation.Selectable)){var r={};t.serialize(r,i,e),n.push(r)}}),t.writeString(JSON.stringify(n)),Promise.all(i)})(t).then(function(){t.stream.end(),e()}).catch(function(t){reject(t)})})}var s=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){var n=t.split(".").pop();return/bg2/i.test(n)||/vwglb/i.test(n)},write:function(t,e){return new Promise(function(n,r){(!e||!e instanceof bg.scene.Node||!e.drawable)&&r(new Error("Invalid data format. Expecting scene node."));var s=new i(t,e);try{a(s).then(function(){s.writeTextures().then(function(){return n()}).catch(function(t){return r(t)})})}catch(t){r(t)}})}},{},t)}(bg.base.WriterPlugin);bg.base.Bg2WriterPlugin=s}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return"bg2mat"==bg.utils.Resource.GetExtension(t)},load:function(t,e,n){return new Promise(function(i,r){if(n)try{"string"==typeof n&&(n=JSON.parse(n));var a=[],s=e.substring(0,e.lastIndexOf("/")+1);n.forEach(function(e){a.push(bg.base.Material.FromMaterialDefinition(t,e,s))}),Promise.all(a).then(function(t){i(t)})}catch(t){r(t)}else r(new Error("Error loading material. Data is null."))})}},{},t)}(bg.base.LoaderPlugin);bg.base.Bg2matLoaderPlugin=t}(),bg.base._brdfLUTData="data:image/png;base64,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",function(){var t=function(){return $traceurRuntime.createClass(function(){},{createCaptureBuffers:function(t,e){console.log("CubemapCaptureImpl.createCaptureBuffers() not implemented")},beginRender:function(t,e){console.log("CubemapCaptureImpl.beginRender() not implemented")},beginRenderFace:function(t,e,n,i){return console.log("CubemapCaptureImpl.renderFace() not implemented"),bg.Matrix4.Identity()},endRenderFace:function(t,e,n){console.log("CubemapCaptureImpl.endRenderFace() not implemented")},endRender:function(t,e){console.log("CubemapCaptureImpl.endRender() not implemented")},getTexture:function(t,e){console.log("CubemapCaptureImpl.getTexture() not implemented")},destroy:function(t,e){console.log("CubemapCaptureImpl.destroy() not implemented")}},{})}();bg.base.CubemapCaptureImpl=t;var e=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._captureBuffers=null,this._texture=null},{create:function(t){this._captureBuffers=bg.Engine.Get().cubemapCapture.createCaptureBuffers(this.context,t)},destroy:function(){this._captureBuffers&&bg.Engine.Get().cubemapCapture.destroy(this.context,this._captureBuffers)},get texture(){return this._texture},updateTexture:function(t,e){var n=bg.Engine.Get().cubemapCapture;n.beginRender(this.context,this._captureBuffers);for(var i=0;i<6;++i){var r=n.beginRenderFace(this.context,i,this._captureBuffers,e);t(r.projection,r.view),n.endRenderFace(this.context,i,this._captureBuffers)}n.endRender(this.context,this._captureBuffers),this._texture||(this._texture=n.getTexture(this.context,this._captureBuffers))}},{},t)}(bg.app.ContextObject);bg.base.CubemapCapture=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n);var i=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX),r=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);i.addParameter([t().inputs.buffers.vertex,t().inputs.buffers.tex0,{name:"fsTexCoord",dataType:"vec2",role:"out"}]),r.addParameter([t().inputs.material.texture,{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&(i.setMainBody("\n\t\t\t\tgl_Position = vec4(inVertex,1.0);\n\t\t\t\tfsTexCoord = inTex0;"),r.setMainBody("gl_FragColor = texture2D(inTexture,fsTexCoord);")),this.setupShaderSource([i,r],!1)},{setupVars:function(){var t=null;this._surface instanceof bg.base.Texture?t=this._surface:this._surface instanceof bg.base.RenderSurface&&(t=this._surface.getTexture(0)),t&&this.shader.setTexture("inTexture",t,bg.base.TextureUnit.TEXTURE_0)}},{},e)}(bg.base.TextureEffect);bg.base.DrawTextureEffect=e}(),function(){function t(t){this[t]&&(this[t].destroy(),this[t]=null)}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._irradianceIntensity=1,this._cubemapRenderer=null,this._irradianceRenderer=null,this._specularRenderer=null,this._cubemapCapture=null,this._irradianceCapture=null,this._specularCaptureL1=null,this._specularCaptureL2=null,this._blackTexture=bg.base.TextureCache.BlackTexture(e),this._texture=this._blackTexture,this._showSkybox=!0},{set equirectangularTexture(t){this._texture=t,this._cubemapRenderer&&(this._cubemapRenderer.texture=t)},set irradianceIntensity(t){this._irradianceIntensity=t},get equirectangularTexture(){return this._texture},get cubemapTexture(){return this._cubemapCapture?this._cubemapCapture.texture:this._blackTexture},get irradianceMapTexture(){return this._irradianceCapture?this._irradianceCapture.texture:this._blackTexture},get specularMapTextureL0(){return this._cubemapCapture?this._cubemapCapture.texture:this._blackTexture},get specularMapTextureL1(){return this._specularCaptureL1?this._specularCaptureL1.texture:this._blackTexture},get specularMapTextureL2(){return this._specularCaptureL2?this._specularCaptureL2.texture:this._blackTexture},get irradianceIntensity(){return this._irradianceIntensity},get showSkybox(){return this._showSkybox},set showSkybox(t){this._showSkybox=t},get cubemapSize(){return this._creationParams.cubemapSize},get irradianceMapSize(){return this._creationParams.irradianceMapSize},get specularMapSize(){return this._creationParams.specularMapSize},get specularMapL2Size(){return this._creationParams.specularMapL2Size},resize:function(e){e||(e={}),e.cubemapSize=e.cubemapSize||512,e.irradianceMapSize=e.irradianceMapSize||32,e.specularMapSize=e.specularMapSize||32,e.specularMapL2Size=e.specularMapL2Size||e.specularMapSize||32,(bg.utils.userAgent.system.iOS||bg.utils.userAgent.system.Android)&&(e.irradianceMapSize=16),this._creationParams=JSON.parse(JSON.stringify(e)),t.apply(this,["_cubemapCapture"]),t.apply(this,["_irradianceCapture"]),t.apply(this,["_specularCaptureL1"]),t.apply(this,["_specularCaptureL2"]),this._cubemapCapture=new bg.base.CubemapCapture(this.context),this._cubemapCapture.create(e.cubemapSize),this._irradianceCapture=new bg.base.CubemapCapture(this.context),this._irradianceCapture.create(e.irradianceMapSize),this._specularCaptureL1=new bg.base.CubemapCapture(this.context),this._specularCaptureL1.create(e.specularMapSize),this._specularCaptureL2=new bg.base.CubemapCapture(this.context),this._specularCaptureL2.create(e.specularMapL2Size),this._frame=0},create:function(t){t||(t={}),t.cubemapSize=t.cubemapSize||512,t.irradianceMapSize=t.irradianceMapSize||32,t.specularMapSize=t.specularMapSize||32,t.specularMapL2Size=t.specularMapL2Size||t.specularMapSize||32,(bg.utils.userAgent.system.iOS||bg.utils.userAgent.system.Android)&&(t.irradianceMapSize=16),this._creationParams=JSON.parse(JSON.stringify(t)),this.destroy(),this._cubemapRenderer=new bg.render.EquirectangularCubeRenderer(this.context,90),this._cubemapRenderer.create(),this._cubemapRenderer.texture=this.texture,this._irradianceRenderer=new bg.render.CubeMapRenderer(this.context,90),this._irradianceRenderer.create(bg.render.CubeMapShader.IRRADIANCE_MAP),this._specularRenderer=new bg.render.CubeMapRenderer(this.context,90),this._specularRenderer.create(bg.render.CubeMapShader.SPECULAR_MAP),this._cubemapCapture=new bg.base.CubemapCapture(this.context),this._cubemapCapture.create(t.cubemapSize),this._irradianceCapture=new bg.base.CubemapCapture(this.context),this._irradianceCapture.create(t.irradianceMapSize),this._specularCaptureL1=new bg.base.CubemapCapture(this.context),this._specularCaptureL1.create(t.specularMapSize),this._specularCaptureL2=new bg.base.CubemapCapture(this.context),this._specularCaptureL2.create(t.specularMapL2Size),this._frame=0,this._maxTextureUnits=this.context.getParameter(this.context.MAX_TEXTURE_IMAGE_UNITS)},update:function(t){var e=this,n=new bg.Matrix4(t.viewMatrix);n.setPosition(0,0,0),this._cubemapCapture.updateTexture(function(t,n,i){e._cubemapRenderer.viewMatrix=n,e._cubemapRenderer.projectionMatrix=t,e._cubemapRenderer.render(!i)},n),this._irradianceRenderer.texture=this._cubemapCapture.texture,this._specularRenderer.texture=this._cubemapCapture.texture,0==this._frame?(this._irradianceCapture.updateTexture(function(t,n){e._irradianceRenderer.viewMatrix=n,e._irradianceRenderer.projectionMatrix=t,e._irradianceRenderer.render(!0)},bg.Matrix4.Identity(),n),this._frame=1):1==this._frame?(this._specularCaptureL1.updateTexture(function(t,n){e._specularRenderer.viewMatrix=n,e._specularRenderer.projectionMatrix=t,e._specularRenderer.roughness=e._maxTextureUnits>8?.2:.3,e._specularRenderer.render(!0)},bg.Matrix4.Identity(),n),this._frame=this._maxTextureUnits>8?2:0):2==this._frame&&(this._specularCaptureL2.updateTexture(function(t,n){e._specularRenderer.viewMatrix=n,e._specularRenderer.projectionMatrix=t,e._specularRenderer.roughness=.8,e._specularRenderer.render(!0)},bg.Matrix4.Identity(),n),this._frame=0)},renderSkybox:function(t){var e=new bg.Matrix4(t.viewMatrix);e.setPosition(0,0,0);var n=t.projection,i=-n.m22,r=2*-n.m32/(2*i-2),a=bg.Math.sin(bg.Math.PI_4)*r-1;a/=60,e.scale(a,a,a),this._cubemapRenderer.pipeline.viewport=t.viewport,this._cubemapRenderer.viewMatrix=e,this._cubemapRenderer.projectionMatrix=t.projection,this._cubemapRenderer.render(!1)},destroy:function(){t.apply(this,["_cubemapRenderer"]),t.apply(this,["_irradianceRenderer"]),t.apply(this,["_specularRenderer"]),t.apply(this,["_cubemapCapture"]),t.apply(this,["_irradianceCapture"]),t.apply(this,["_specularCaptureL1"]),t.apply(this,["_specularCaptureL2"])},clone:function(){console.warn("bg.base.Environment.clone(): not implemented");var t=new bg.base.Environment(this.context);return this._creationParams&&(t.create(this._creationParams),t.equirectangularTexture=this.equirectangularTexture,t.irradianceIntensity=this.irradianceIntensity,t.showSkybox=this.showSkybox),t},serialize:function(t,e,n){if(!bg.isElectronApp)throw new Error("Could not serialize Environment outside of an electron app.");var i=require("path");if(t.equirectangularTexture="",t.irradianceIntensity=this.irradianceIntensity,t.showSkybox=this.showSkybox,this.equirectangularTexture instanceof bg.base.Texture){var r=i.basename(this.equirectangularTexture.fileName);t.equirectangularTexture=r;var a=i.join(n.path,r);e.push(bg.base.Writer.CopyFile(this.equirectangularTexture.fileName,a))}t.cubemapSize=this._creationParams.cubemapSize,t.irradianceMapSize=this._creationParams.irradianceMapSize,t.specularMapSize=this._creationParams.specularMapSize,t.specularMapL2Size=this._creationParams.specularMapL2Size},deserialize:function(t,e){var n=this;return new Promise(function(i,r){var a={};if(a.cubemapSize=t.cubemapSize||1024,a.irradianceMapSize=t.irradianceMapSize||32,a.specularMapSize=t.specularMapSize||32,a.specularMapL2Size=t.specularMapL2Size||a.specularMapSize,n.irradianceIntensity=t.irradianceIntensity,n.showSkybox=void 0===t.showSkybox||t.showSkybox,n.create(a),t.equirectangularTexture){var s=bg.utils.path.join(e,t.equirectangularTexture);bg.base.Loader.Load(n.context,bg.base.Loader.StandarizePath(s)).then(function(t){n.equirectangularTexture=t,i()}).catch(function(t){console.warn("Error loading environment image: "+t.message),i()})}else i()})}},{},e)}(bg.app.ContextObject);bg.base.Environment=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=null,n=null;var i=function(){return $traceurRuntime.createClass(function(){this._hue=1,this._saturation=1,this._lightness=1,this._brightness=.5,this._contrast=.5},{set hue(t){this._hue=t},get hue(){return this._hue},set saturation(t){this._saturation=t},get saturation(){return this._saturation},set lightness(t){this._lightness=t},get lightness(){return this._lightness},set brightness(t){this._brightness=t},get brightness(){return this._brightness},set contrast(t){this._contrast=t},get contrast(){return this._contrast},apply:function(t){var e=void 0!==arguments[1]?arguments[1]:{hue:"inHue",saturation:"inSaturation",lightness:"inLightness",brightness:"inBrightness",contrast:"inContrast"};t.setValueFloat(e.hue,this._hue),t.setValueFloat(e.saturation,this._saturation),t.setValueFloat(e.lightness,this._lightness),t.setValueFloat(e.brightness,this._brightness),t.setValueFloat(e.contrast,this._contrast)}},{})}();bg.base.ColorCorrectionSettings=i;var r=function(i){return $traceurRuntime.createClass(function i(r){$traceurRuntime.superConstructor(i).call(this,r),this._material=null,this._light=null,this._lightTransform=bg.Matrix4.Identity(),this._lightArray=new bg.base.LightArray,this._shadowMap=null;var a=[(e||((e=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([t().inputs.buffers.vertex,t().inputs.buffers.normal,t().inputs.buffers.tangent,t().inputs.buffers.tex0,t().inputs.buffers.tex1]),e.addParameter(t().inputs.matrix.all),e.addParameter([{name:"inLightProjectionMatrix",dataType:"mat4",role:"value"},{name:"inLightViewMatrix",dataType:"mat4",role:"value"}]),e.addParameter([{name:"fsPosition",dataType:"vec3",role:"out"},{name:"fsTex0Coord",dataType:"vec2",role:"out"},{name:"fsTex1Coord",dataType:"vec2",role:"out"},{name:"fsNormal",dataType:"vec3",role:"out"},{name:"fsTangent",dataType:"vec3",role:"out"},{name:"fsBitangent",dataType:"vec3",role:"out"},{name:"fsSurfaceToView",dataType:"vec3",role:"out"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"out"}]),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n\t\t\t\t\tmat4 ScaleMatrix = mat4(0.5, 0.0, 0.0, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.0, 0.5, 0.0, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.0, 0.0, 0.5, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.5, 0.5, 0.5, 1.0);\n\t\t\t\t\t\n\t\t\t\t\tvec4 viewPos = inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\tgl_Position = inProjectionMatrix * viewPos;\n\t\t\t\t\t\n\t\t\t\t\tfsNormal = normalize((inNormalMatrix * vec4(inNormal,1.0)).xyz);\n\t\t\t\t\tfsTangent = normalize((inNormalMatrix * vec4(inTangent,1.0)).xyz);\n\t\t\t\t\tfsBitangent = cross(fsNormal,fsTangent);\n\t\t\t\t\t\n\t\t\t\t\tfsVertexPosFromLight = ScaleMatrix * inLightProjectionMatrix * inLightViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\t\n\t\t\t\t\tfsTex0Coord = inTex0;\n\t\t\t\t\tfsTex1Coord = inTex1;\n\t\t\t\t\tfsPosition = viewPos.xyz;")),e),(n||((n=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).addParameter(t().inputs.material.all),n.addParameter(t().inputs.lightingForward.all),n.addParameter(t().inputs.shadows.all),n.addParameter(t().inputs.colorCorrection.all),n.addParameter([{name:"fsPosition",dataType:"vec3",role:"in"},{name:"fsTex0Coord",dataType:"vec2",role:"in"},{name:"fsTex1Coord",dataType:"vec2",role:"in"},{name:"fsNormal",dataType:"vec3",role:"in"},{name:"fsTangent",dataType:"vec3",role:"in"},{name:"fsBitangent",dataType:"vec3",role:"in"},{name:"fsSurfaceToView",dataType:"vec3",role:"in"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"in"},{name:"inCubeMap",dataType:"samplerCube",role:"value"},{name:"inLightEmissionFactor",dataType:"float",role:"value"}]),n.addFunction(t().functions.materials.all),n.addFunction(t().functions.colorCorrection.all),n.addFunction(t().functions.utils.unpack),n.addFunction(t().functions.utils.random),n.addFunction(t().functions.lighting.all),n.addFunction(t().functions.blur.blurCube),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n\t\t\t\t\tvec4 diffuseColor = samplerColor(inTexture,fsTex0Coord,inTextureOffset,inTextureScale);\n\t\t\t\t\tvec4 lightmapColor = samplerColor(inLightMap,fsTex1Coord,inLightMapOffset,inLightMapScale);\n\n\t\t\t\t\tif (inUnlit && diffuseColor.a>=inAlphaCutoff) {\n\t\t\t\t\t\tgl_FragColor = diffuseColor * lightmapColor;\n\t\t\t\t\t}\n\t\t\t\t\telse if (diffuseColor.a>=inAlphaCutoff) {\n\t\t\t\t\t\tvec3 normalMap = samplerNormal(inNormalMap,fsTex0Coord,inNormalMapOffset,inNormalMapScale);\n\t\t\t\t\t\t// This doesn't work on many Mac Intel GPUs\n\t\t\t\t\t\t// vec3 frontFacingNormal = fsNormal;\n\t\t\t\t\t\t// if (!gl_FrontFacing) {\n\t\t\t\t\t\t// \tfrontFacingNormal *= -1.0;\n\t\t\t\t\t\t// }\n\t\t\t\t\t\tnormalMap = combineNormalWithMap(fsNormal,fsTangent,fsBitangent,normalMap);\n\t\t\t\t\t\tvec4 shadowColor = vec4(1.0);\n\t\t\t\t\t\tif (inReceiveShadows) {\n\t\t\t\t\t\t\tshadowColor = getShadowColor(fsVertexPosFromLight,inShadowMap,inShadowMapSize,inShadowType,inShadowStrength,inShadowBias,inShadowColor);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvec4 specular = specularColor(inSpecularColor,inShininessMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinShininessMaskChannel,inShininessMaskInvert);\n\t\t\t\t\t\tfloat lightEmission = applyTextureMask(inLightEmission,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinLightEmissionMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinLightEmissionMaskChannel,inLightEmissionMaskInvert);\n\t\t\t\t\t\tdiffuseColor = diffuseColor * inDiffuseColor * lightmapColor;\n\t\t\t\t\t\t\n\t\t\t\t\t\tvec4 light = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\t\tvec4 specularColor = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\t\t// This doesn't work on A11 and A12 chips on Apple devices.\n\t\t\t\t\t\t// for (int i=0; i<"+bg.base.MAX_FORWARD_LIGHTS+"; ++i) {\n\t\t\t\t\t\t// \tif (i>=inNumLights) break;\n\t\t\t\t\t\t// \tlight.rgb += getLight(\n\t\t\t\t\t\t// \t\tinLightType[i],\n\t\t\t\t\t\t// \t\tinLightAmbient[i], inLightDiffuse[i], inLightSpecular[i],inShininess,\n\t\t\t\t\t\t// \t\tinLightPosition[i],inLightDirection[i],\n\t\t\t\t\t\t// \t\tinLightAttenuation[i].x,inLightAttenuation[i].y,inLightAttenuation[i].z,\n\t\t\t\t\t\t// \t\tinSpotCutoff[i],inSpotExponent[i],inLightCutoffDistance[i],\n\t\t\t\t\t\t// \t\tfsPosition,normalMap,\n\t\t\t\t\t\t// \t\tdiffuseColor,specular,shadowColor,\n\t\t\t\t\t\t// \t\tspecularColor\n\t\t\t\t\t\t// \t).rgb;\n\t\t\t\t\t\t// \tlight.rgb += specularColor.rgb;\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\t// Workaround for A11 and A12 chips\n\t\t\t\t\t\tif (inNumLights>0) {\n\t\t\t\t\t\t\tlight.rgb += getLight(\n\t\t\t\t\t\t\t\tinLightType[0],\n\t\t\t\t\t\t\t\tinLightAmbient[0], inLightDiffuse[0], inLightSpecular[0],inShininess,\n\t\t\t\t\t\t\t\tinLightPosition[0],inLightDirection[0],\n\t\t\t\t\t\t\t\tinLightAttenuation[0].x,inLightAttenuation[0].y,inLightAttenuation[0].z,\n\t\t\t\t\t\t\t\tinSpotCutoff[0],inSpotExponent[0],inLightCutoffDistance[0],\n\t\t\t\t\t\t\t\tfsPosition,normalMap,\n\t\t\t\t\t\t\t\tdiffuseColor,specular,shadowColor,\n\t\t\t\t\t\t\t\tspecularColor\n\t\t\t\t\t\t\t).rgb;\n\t\t\t\t\t\t\tlight.rgb += specularColor.rgb;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inNumLights>1) {\n\t\t\t\t\t\t\tlight.rgb += getLight(\n\t\t\t\t\t\t\t\tinLightType[1],\n\t\t\t\t\t\t\t\tinLightAmbient[1], inLightDiffuse[1], inLightSpecular[1],inShininess,\n\t\t\t\t\t\t\t\tinLightPosition[1],inLightDirection[1],\n\t\t\t\t\t\t\t\tinLightAttenuation[1].x,inLightAttenuation[1].y,inLightAttenuation[1].z,\n\t\t\t\t\t\t\t\tinSpotCutoff[0],inSpotExponent[1],inLightCutoffDistance[1],\n\t\t\t\t\t\t\t\tfsPosition,normalMap,\n\t\t\t\t\t\t\t\tdiffuseColor,specular,shadowColor,\n\t\t\t\t\t\t\t\tspecularColor\n\t\t\t\t\t\t\t).rgb;\n\t\t\t\t\t\t\tlight.rgb += specularColor.rgb;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvec3 cameraPos = vec3(0.0);\n\t\t\t\t\t\tvec3 cameraVector = fsPosition - cameraPos;\n\t\t\t\t\t\tvec3 lookup = reflect(cameraVector,normalMap);\n\n\t\t\t\t\t\t// Roughness using gaussian blur has been deactivated because it is very inefficient\n\t\t\t\t\t\t//float dist = distance(fsPosition,cameraPos);\n\t\t\t\t\t\t//float maxRough = 50.0;\n\t\t\t\t\t\t//float rough = max(inRoughness * 10.0,1.0);\n\t\t\t\t\t\t//rough = max(rough*dist,rough);\n\t\t\t\t\t\t//float blur = min(rough,maxRough);\n\t\t\t\t\t\t//vec3 cubemapColor = blurCube(inCubeMap,lookup,int(blur),vec2(10),dist).rgb;\n\n\t\t\t\t\t\tvec3 cubemapColor = textureCube(inCubeMap,lookup).rgb;\n\n\t\t\t\t\t\tfloat reflectionAmount = applyTextureMask(inReflection,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinReflectionMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinReflectionMaskChannel,inReflectionMaskInvert);\n\n\t\t\t\t\t\tlight.rgb = clamp(light.rgb + (lightEmission * diffuseColor.rgb * 10.0), vec3(0.0), vec3(1.0));\n\t\t\t\t\t\t\n\n\t\t\t\t\t\tgl_FragColor = vec4(light.rgb * (1.0 - reflectionAmount) + cubemapColor * reflectionAmount * diffuseColor.rgb, diffuseColor.a);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tdiscard;\n\t\t\t\t\t}")),n)];this.setupShaderSource(a),this._colorCorrection=new bg.base.ColorCorrectionSettings},{get material(){return this._material},set material(t){this._material=t},get light(){return this._light},set light(t){this._light=t,this._lightArray.reset()},get lightTransform(){return this._lightTransform},set lightTransform(t){this._lightTransform=t,this._lightArray.reset()},get lightArray(){return this._lightArray},set shadowMap(t){this._shadowMap=t},get shadowMap(){return this._shadowMap},get colorCorrection(){return this._colorCorrection},set colorCorrection(t){this._colorCorrection=t},beginDraw:function(){if(this._light&&(this.lightArray.reset(),this.lightArray.push(this.light,this.lightTransform)),this.lightArray.numLights){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.lightArray.updatePositionAndDirection(e);var n=this.shadowMap?this.shadowMap.viewMatrix:this.lightArray.shadowLightTransform;this.shader.setMatrix4("inLightProjectionMatrix",this.shadowMap?this.shadowMap.projection:this.lightArray.shadowLight.projection);var i=this.shadowMap?this.shadowMap.shadowColor:bg.Color.Transparent(),r=bg.base.TextureCache.BlackTexture(this.context);this.shader.setMatrix4("inLightViewMatrix",n),this.shader.setValueInt("inShadowType",this._shadowMap?this._shadowMap.shadowType:0),this.shader.setTexture("inShadowMap",this._shadowMap?this._shadowMap.texture:r,bg.base.TextureUnit.TEXTURE_5),this.shader.setVector2("inShadowMapSize",this._shadowMap?this._shadowMap.size:new bg.Vector2(32,32)),this.shader.setValueFloat("inShadowStrength",this.lightArray.shadowLight.shadowStrength),this.shader.setVector4("inShadowColor",i),this.shader.setValueFloat("inShadowBias",this.lightArray.shadowLight.shadowBias),this.shader.setValueInt("inCastShadows",this.lightArray.shadowLight.castShadows),this.shader.setVector4Ptr("inLightAmbient",this.lightArray.ambient),this.shader.setVector4Ptr("inLightDiffuse",this.lightArray.diffuse),this.shader.setVector4Ptr("inLightSpecular",this.lightArray.specular),this.shader.setValueIntPtr("inLightType",this.lightArray.type),this.shader.setVector3Ptr("inLightAttenuation",this.lightArray.attenuation),this.shader.setValueFloatPtr("inLightCutoffDistance",this.lightArray.cutoffDistance);this.shader.setValueFloat("inLightEmissionFactor",10),this.shader.setTexture("inCubeMap",bg.scene.Cubemap.Current(this.context),bg.base.TextureUnit.TEXTURE_6),this.shader.setVector3Ptr("inLightDirection",this.lightArray.direction),this.shader.setVector3Ptr("inLightPosition",this.lightArray.position),this.shader.setValueFloatPtr("inSpotCutoff",this.lightArray.spotCutoff),this.shader.setValueFloatPtr("inSpotExponent",this.lightArray.spotExponent),this.shader.setValueInt("inNumLights",this.lightArray.numLights)}else{var a=bg.Color.Black();this.shader.setVector4Ptr("inLightAmbient",a.toArray()),this.shader.setVector4Ptr("inLightDiffuse",a.toArray()),this.shader.setVector4Ptr("inLightSpecular",a.toArray()),this.shader.setVector3Ptr("inLightDirection",new bg.Vector3(0,0,0).toArray()),this.shader.setValueInt("inNumLights",0)}this.colorCorrection.apply(this.shader)},setupVars:function(){if(this.material){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst),this.shader.setMatrix4("inNormalMatrix",t.normalMatrix),this.shader.setMatrix4("inViewMatrixInv",t.viewMatrixInvert);var n=bg.base.TextureCache.WhiteTexture(this.context),i=(bg.base.TextureCache.BlackTexture(this.context),bg.base.TextureCache.NormalTexture(this.context)),r=this.material.texture||n,a=this.material.lightmap||n,s=this.material.normalMap||i,o=this.material.shininessMask||n,u=this.material.lightEmissionMask||n;this.shader.setVector4("inDiffuseColor",this.material.diffuse),this.shader.setVector4("inSpecularColor",this.material.specular),this.shader.setValueFloat("inShininess",this.material.shininess),this.shader.setTexture("inShininessMask",o,bg.base.TextureUnit.TEXTURE_3),this.shader.setVector4("inShininessMaskChannel",this.material.shininessMaskChannelVector),this.shader.setValueInt("inShininessMaskInvert",this.material.shininessMaskInvert),this.shader.setValueFloat("inLightEmission",this.material.lightEmission),this.shader.setTexture("inLightEmissionMask",u,bg.base.TextureUnit.TEXTURE_4),this.shader.setVector4("inLightEmissionMaskChannel",this.material.lightEmissionMaskChannelVector),this.shader.setValueInt("inLightEmissionMaskInvert",this.material.lightEmissionMaskInvert),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff),this.shader.setTexture("inTexture",r,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.textureScale),this.shader.setTexture("inLightMap",a,bg.base.TextureUnit.TEXTURE_1),this.shader.setVector2("inLightMapOffset",this.material.lightmapOffset),this.shader.setVector2("inLightMapScale",this.material.lightmapScale),this.shader.setTexture("inNormalMap",s,bg.base.TextureUnit.TEXTURE_2),this.shader.setVector2("inNormalMapScale",this.material.normalMapScale),this.shader.setVector2("inNormalMapOffset",this.material.normalMapOffset),this.shader.setValueInt("inReceiveShadows",this.material.receiveShadows);var h=this.material.reflectionMask||n;this.shader.setValueFloat("inReflection",this.material.reflectionAmount),this.shader.setTexture("inReflectionMask",h,bg.base.TextureUnit.TEXTURE_7),this.shader.setVector4("inReflectionMaskChannel",this.material.reflectionMaskChannelVector),this.shader.setValueInt("inReflectionMaskInvert",this.material.reflectionMaskInvert);var l=this.material.roughnessMask||n;this.shader.setValueFloat("inRoughness",this.material.roughness),this.context.getParameter(this.context.MAX_TEXTURE_IMAGE_UNITS)<9?this.shader.setTexture("inRoughnessMask",l,bg.base.TextureUnit.TEXTURE_7):this.shader.setTexture("inRoughnessMask",l,bg.base.TextureUnit.TEXTURE_8),this.shader.setVector4("inRoughnessMaskChannel",this.material.roughnessMaskChannelVector),this.shader.setValueInt("inRoughnessMaskInvert",this.material.roughnessMaskInvert),this.shader.setValueInt("inSelectMode",!1),this.shader.setValueInt("inUnlit",this.material.unlit)}}},{},i)}(bg.base.Effect);bg.base.ForwardEffect=r,bg.base.MAX_FORWARD_LIGHTS=4}(),function(){var t={BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,UNSIGNED_INT:5125,FLOAT:5126,INT:0,GetLength:function(t){switch(t.type){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT3":return 9;case"MAT4":return 16;default:return 0}}};function e(e,n){var i=e.bufferViews,r=e.accessors;return r&&i?new Promise(function(e,a){var s=[];r.every(function(e){var r=e.bufferView<i.length?i[e.bufferView]:null,o=r&&r.buffer<n.length?n[r.buffer]:null;if(r&&o){var u=function(e,n,i){var r=null;switch(e.componentType){case t.BYTE:r=Int8Array;break;case t.UNSIGNED_BYTE:r=Uint8Array;break;case t.SHORT:r=Int18Array;break;case t.UNSIGNED_SHORT:r=Uint16Array;break;case t.UNSIGNED_INT:r=UInt32Array;break;case t.FLOAT:r=Float32Array;break;default:r=Int32Array}var a=e.count*t.GetLength(e);return new r(n,i.byteOffset,a)}(e,o,r);return s.push({buffer:u,accessor:e,view:r}),!0}return a(new Error("Malformed glTF file.")),!1})&&e(s)}):Promise.reject(new Error("Malformed or incompatible glTF file."))}function n(t){return"string"==typeof t&&/base64/.test(t.substring(0,100))}function i(t,e){return n(e)||(e=bg.utils.path.join(t,e)),e}function r(t,e,n){return new Promise(function(t,n){if(e.materials){var i=[];e.materials.forEach(function(t){i.push(new Promise(function(t,e){t(new bg.base.PBRMaterial)}))}),Promise.all(i).then(function(e){t(e)})}else t([])})}function a(t,e){return new Promise(function(n,i){var r=t.scenes,a=t.nodes;if(a&&0!=a.length||(a=[],e.forEach(function(t,e){a.push({mesh:e,name:mesh.name})})),r&&0!=r.length){var s={name:"SceneRoot",nodes:[]};r.forEach(function(t){t.nodes.forEach(function(t){-1==s.nodes.indexOf(t)&&s.nodes.push(t)})}),r=[s]}else(r=[]).push({name:"SceneRoot",nodes:[]}),a.forEach(function(t,e){return r.nodes.push(e)});var o=r[0];n(function t(e,n,i){var r,a,s={};if(s.name=e.name,e.children&&(s.children=[],e.children.forEach(function(e){if(e<n.length){var r=t(n[e],n,i);s.children.push(r)}else console.warn("Node index out of bounds loading glTF file.")})),void 0!==e.mesh&&null!==e.mesh&&(e.mesh<i.length?s.mesh=i[e.mesh]:console.warn("Mesh index out of bounds loading glTF file.")),e.matrix)s.transform=new bg.Matrix4(e.matrix);else if(e.translation||e.rotation||e.scale){var o=bg.Matrix4.Identity();if(e.translation&&(r=o).translate.apply(r,$traceurRuntime.spread(e.translation)),e.rotation){var u=new(Function.prototype.bind.apply(bg.Quaternion,$traceurRuntime.spread([null],e.rotation)));o.mult(u.getMatrix4())}e.scale&&(a=o).scale.apply(a,$traceurRuntime.spread(e.scale)),s.transform=o}return s}({children:o.nodes,name:o.name},a,e))})}function s(t,s,o){var u={};return new Promise(function(h,l){var c=null;try{c=JSON.parse(s)}catch(t){l(t)}(function(t,e,r){var a=bg.utils.path.removeFileName(r);return new Promise(function(r,s){if(e.images){var o=[];e.images.forEach(function(e){o.push(new Promise(function(r,s){if(n(e.uri))bg.base.Texture.FromBase64Image(t,e.uri).promise.then(function(t){r(t)});else{var o=i(a,e.uri);bg.base.Loader.Load(t,o).then(function(t){r(t)}).catch(function(t){return s(t)})}}))}),Promise.all(o).then(function(t){r(t)}).catch(function(t){s(t)})}else r([])})})(t,c,o).then(function(t){return u.textures=t,r(0,c)}).then(function(t){return u.materials=t,function(t,e){var n=bg.utils.path.removeFileName(e);return new Promise(function(e,r){var a=[];t.buffers&&t.buffers.forEach&&t.buffers.forEach(function(t){var e=i(n,t.uri);a.push(new Promise(function(t,n){fetch(e).then(function(i){200==i.status?t(i.arrayBuffer()):i.status>=300&&i.status<400?n(new Error("The resource has changed location: "+e)):i.status>=400&&i.status<500?n(new Error("The resource does not exist or is inaccessible ")):n(new Error("Server error loading resource "+e))}).catch(function(t){n(t)})}))}),Promise.all(a).then(function(t){e(t)})})}(c,o)}).then(function(t){return u.buffers=t,e(c,t)}).then(function(t){return u.bufferViews=t,function(t,e,n){return new Promise(function(n,i){var r=[];t.meshes&&t.meshes.forEach(function(t){r.push(function(t,e,n){var i={name:t.name||"",primitives:[]};return(t.primitives||[]).forEach(function(t,n){var r=function(t,e,n){function i(t){return null!=t?e[t]:null}t.attributes=t.attributes||{};var r={};return r.vertex=i(t.attributes.POSITION),r.normal=i(t.attributes.NORMAL),r.texCoord0=i(t.attributes.TEXCOORD_0),r.texCoord1=i(t.attributes.TEXCOORD_1),r.tangent=i(t.attributes.TANGENT),r.index=i(t.indices),r.material=t.material,r}(t,e);r.name=i.name+"_"+n,i.primitives.push(r)}),i}(t,e))}),n(r)})}(c,t,u.buffers)}).then(function(t){return u.meshes=t,a(c,u.meshes)}).then(function(t){u.sceneRoot=t,h(u)}).catch(function(t){l(t)})})}function o(t,e,n){return new Promise(function(i,r){var a=[],s=function t(e,n,i,r){var a=new bg.scene.Node(e,n.name||"");if(n.children&&n.children.forEach(function(n){a.addChild(t(e,n,i,r))}),n.mesh){var s=new bg.scene.Drawable(n.mesh.name||"");n.mesh.primitives.forEach(function(t){var n=new bg.base.PolyList(e);n.name=name,n.vertex=t.vertex.buffer,n.normal=t.normal.buffer,n.texCoord0=t.texCoord0.buffer,n.texCoord1=t.texCoord1.buffer,t.tangent&&(n.tangent=t.tangent.buffer),n.index=t.index.buffer,n.build(),s.addPolyList(n)}),a.addComponent(s)}if(n.transform){var o=new bg.scene.Transform(n.transform);a.addComponent(o)}return a}(t,e,n,a);Promise.all(a).then(function(){return i(s)}).catch(function(t){return r(t)})})}var u=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return"gltf"==bg.utils.Resource.GetExtension(t)},load:function(t,e,n){return new Promise(function(i,r){s(t,n,e).then(function(n){return o(t,n.sceneRoot,e)}).then(function(t){i(t)}).catch(function(t){r(t)})})}},{},t)}(bg.base.LoaderPlugin);bg.base.GLTFLoaderPlugin=u}(),function(){bg.base.LightType={DIRECTIONAL:4,SPOT:1,POINT:5,DISABLED:10},bg.base.SpecularType={PHONG:0,BLINN:1};var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._enabled=!0,this._type=bg.base.LightType.DIRECTIONAL,this._direction=new bg.Vector3(0,0,-1),this._ambient=new bg.Color(.2,.2,.2,1),this._diffuse=new bg.Color(.9,.9,.9,1),this._specular=bg.Color.White(),this._attenuation=new bg.Vector3(1,.5,.1),this._spotCutoff=20,this._spotExponent=30,this._shadowStrength=.7,this._cutoffDistance=-1,this._castShadows=!0,this._shadowBias=2e-5,this._specularType=bg.base.SpecularType.PHONG,this._intensity=1,this._projection=bg.Matrix4.Ortho(-10,10,-10,10,.5,300)},{clone:function(t){var e=new bg.base.Light(t||this.context);return e.assign(this),e},assign:function(t){this.enabled=t.enabled,this.type=t.type,this.direction.assign(t.direction),this.ambient.assign(t.ambient),this.diffuse.assign(t.diffuse),this.specular.assign(t.specular),this._attenuation.assign(t._attenuation),this.spotCutoff=t.spotCutoff,this.spotExponent=t.spotExponent,this.shadowStrength=t.shadowStrength,this.cutoffDistance=t.cutoffDistance,this.castShadows=t.castShadows,this.shadowBias=t.shadowBias,this.specularType=t.specularType,this.intensity=t.intensity},get enabled(){return this._enabled},set enabled(t){this._enabled=t},get type(){return this._type},set type(t){this._type=t},get direction(){return this._direction},set direction(t){this._direction=t},get ambient(){return this._ambient},set ambient(t){this._ambient=t},get diffuse(){return this._diffuse},set diffuse(t){this._diffuse=t},get specular(){return this._specular},set specular(t){this._specular=t},get specularType(){return this._specularType},set specularType(t){this._specularType=t},get intensity(){return this._intensity},set intensity(t){this._intensity=t},get attenuationVector(){return this._attenuation},get constantAttenuation(){return this._attenuation.x},get linearAttenuation(){return this._attenuation.y},get quadraticAttenuation(){return this._attenuation.z},set attenuationVector(t){this._attenuation=t},set constantAttenuation(t){this._attenuation.x=t},set linearAttenuation(t){this._attenuation.y=t},set quadraticAttenuation(t){this._attenuation.z=t},get cutoffDistance(){return this._cutoffDistance},set cutoffDistance(t){this._cutoffDistance=t},get spotCutoff(){return this._spotCutoff},set spotCutoff(t){this._spotCutoff=t},get spotExponent(){return this._spotExponent},set spotExponent(t){this._spotExponent=t},get shadowStrength(){return this._shadowStrength},set shadowStrength(t){this._shadowStrength=t},get castShadows(){return this._castShadows},set castShadows(t){this._castShadows=t},get shadowBias(){return this._shadowBias},set shadowBias(t){this._shadowBias=t},get projection(){return this._projection},set projection(t){this._projection=t},deserialize:function(t){switch(t.lightType){case"kTypeDirectional":this._type=bg.base.LightType.DIRECTIONAL;break;case"kTypeSpot":this._type=bg.base.LightType.SPOT,this._shadowBias=t.shadowBias;break;case"kTypePoint":this._type=bg.base.LightType.POINT}this._ambient=new bg.Color(t.ambient),this._diffuse=new bg.Color(t.diffuse),this._specular=new bg.Color(t.specular),this._spotCutoff=t.spotCutoff||20,this._spotExponent=t.spotExponent||30,this._shadowStrength=t.shadowStrength,this._cutoffDistance=t.cutoffDistance,this._projection=new bg.Matrix4(t.projection),this._castShadows=t.castShadows,this._specularType="BLINN"==t.specularType?bg.base.SpecularType.BLINN:bg.base.SpecularType.PHONG,this._intensity=t.intensity||1,this._attenuation=new bg.Vector3(t.constantAtt,t.linearAtt,t.expAtt)},serialize:function(t){var e=[];e[bg.base.LightType.DIRECTIONAL]="kTypeDirectional",e[bg.base.LightType.SPOT]="kTypeSpot",e[bg.base.LightType.POINT]="kTypePoint",t.lightType=e[this._type],t.ambient=this._ambient.toArray(),t.diffuse=this._diffuse.toArray(),t.specular=this._specular.toArray(),t.intensity=1,t.spotCutoff=this._spotCutoff||20,t.spotExponent=this._spotExponent||30,t.shadowStrength=this._shadowStrength,t.cutoffDistance=this._cutoffDistance,t.projection=this._projection.toArray(),t.castShadows=this._castShadows,t.shadowBias=this._shadowBias||.0029,t.specularType=this.specularType==bg.base.SpecularType.BLINN?"BLINN":"PHONG",t.intensity=this.intensity||1,t.constantAtt=this._attenuation.x,t.linearAtt=this._attenuation.y,t.expAtt=this._attenuation.z}},{},t)}(bg.app.ContextObject);bg.base.Light=t;var e=function(){return $traceurRuntime.createClass(function(){this.reset()},{get type(){return this._type},get ambient(){return this._ambient},get diffuse(){return this._diffuse},get specular(){return this._specular},get position(){return this._position},get direction(){return this._direction},get rawDirection(){return this._rawDirection},get spotCutoff(){return this._spotCutoff},get cosSpotCutoff(){return this._cosSpotCutoff},get spotExponent(){return this._spotExponent},get cosSpotExponent(){return this._cosSpotExponent},get shadowStrength(){return this._shadowStrength},get cutoffDistance(){return this._cutoffDistance},get specularType(){return this._specularType},get intensity(){return this._intensity},get numLights(){return this._numLights},get attenuation(){return this._attenuation},get lightTransform(){return this._lightTransform},get shadowLight(){return this._shadowLight||{shadowStrength:0,shadowColor:bg.Color.Black(),shadowBias:0,castShadows:!1,projection:bg.Matrix4.Identity()}},get shadowLightTransform(){return this._shadowLightTransform||bg.Matrix4.Identity()},get shadowLightIndex(){return this._shadowLightIndex},get shadowLightDirection(){return this._shadowLightDirection},reset:function(){this._type=[],this._ambient=[],this._diffuse=[],this._specular=[],this._position=[],this._direction=[],this._rawDirection=[],this._attenuation=[],this._spotCutoff=[],this._cosSpotCutoff=[],this._spotExponent=[],this._cosSpotExponent=[],this._shadowStrength=[],this._cutoffDistance=[],this._numLights=0,this._lightTransform=[],this._specularType=[],this._intensity=[],this._shadowLightTransform=null,this._shadowLightIndex=-1,this._shadowLight=null,this._shadowLightDirection=new bg.Vector3(0,0,1)},push:function(t,e){var n,i,r;if(this._numLights==bg.base.MAX_FORWARD_LIGHTS)return!1;-1==this._shadowLightIndex&&t.type!=bg.base.LightType.POINT&&t.castShadows&&(this._shadowLightTransform=e,this._shadowLight=t,this._shadowLightIndex=this._numLights),this._type.push(t.type),(n=this._ambient).push.apply(n,$traceurRuntime.spread(t.ambient.toArray())),(i=this._diffuse).push.apply(i,$traceurRuntime.spread(t.diffuse.toArray())),(r=this._specular).push.apply(r,$traceurRuntime.spread(t.specular.toArray())),this._rawDirection.push(t.direction),this._attenuation.push(t.constantAttenuation),this._attenuation.push(t.linearAttenuation),this._attenuation.push(t.quadraticAttenuation),this._spotCutoff.push(t.spotCutoff),this._cosSpotCutoff.push(Math.cos(t.spotCutoff*Math.PI/180)),this._spotExponent.push(t.spotExponent);var a=t.spotCutoff>t.spotExponent?t.spotExponent:.98*t.spotCutoff;return this._cosSpotExponent.push(Math.cos(a*Math.PI/180)),this._shadowStrength.push(t.shadowStrength),this._cutoffDistance.push(t.cutoffDistance),this._specularType.push(t.specularType),this._intensity.push(t.intensity),this._numLights++,this._lightTransform.push(e),!0},updatePositionAndDirection:function(t){var e,n;this._direction=[],this._position=[];for(var i=0;i<this._numLights;++i){var r=new bg.Matrix4(t),a=r.mult(this._lightTransform[i]).rotation.multVector(this._rawDirection[i]).xyz,s=(r=new bg.Matrix4(t)).mult(this._lightTransform[i]).position;(e=this._direction).push.apply(e,$traceurRuntime.spread(a.toArray())),(n=this._position).push.apply(n,$traceurRuntime.spread(s.toArray())),this._shadowLightIndex==i&&(this._shadowLightDirection=a)}}},{})}();bg.base.LightArray=e}(),function(){function t(t,e,n){return bg.base.Texture.FromImage(t,e,n)}bg.base.MaterialFlag={DIFFUSE:1,SPECULAR:2,SHININESS:4,LIGHT_EMISSION:8,REFRACTION_AMOUNT:16,REFLECTION_AMOUNT:32,TEXTURE:64,LIGHT_MAP:128,NORMAL_MAP:256,TEXTURE_OFFSET:512,TEXTURE_SCALE:1024,LIGHT_MAP_OFFSET:2048,LIGHT_MAP_SCALE:4096,NORMAL_MAP_OFFSET:8192,NORMAL_MAP_SCALE:16384,CAST_SHADOWS:32768,RECEIVE_SHADOWS:65536,ALPHA_CUTOFF:1<<17,SHININESS_MASK:1<<18,SHININESS_MASK_CHANNEL:1<<19,SHININESS_MASK_INVERT:1<<20,LIGHT_EMISSION_MASK:1<<21,LIGHT_EMISSION_MASK_CHANNEL:1<<22,LIGHT_EMISSION_MASK_INVERT:1<<23,REFLECTION_MASK:1<<24,REFLECTION_MASK_CHANNEL:1<<25,REFLECTION_MASK_INVERT:1<<26,CULL_FACE:1<<27,ROUGHNESS:1<<28,UNLIT:1<<29};var e=function(){function t(t){this._modifierFlags=0,this._diffuse=bg.Color.White(),this._specular=bg.Color.White(),this._shininess=0,this._lightEmission=0,this._refractionAmount=0,this._reflectionAmount=0,this._texture=null,this._lightmap=null,this._normalMap=null,this._textureOffset=new bg.Vector2,this._textureScale=new bg.Vector2(1),this._lightmapOffset=new bg.Vector2,this._lightmapScale=new bg.Vector2(1),this._normalMapOffset=new bg.Vector2,this._normalMapScale=new bg.Vector2(1),this._castShadows=!0,this._receiveShadows=!0,this._alphaCutoff=.5,this._shininessMask=null,this._shininessMaskChannel=0,this._shininessMaskInvert=!1,this._lightEmissionMask=null,this._lightEmissionMaskChannel=0,this._lightEmissionMaskInvert=!1,this._reflectionMask=null,this._reflectionMaskChannel=0,this._reflectionMaskInvert=!1,this._cullFace=!0,this._roughness=!0,this._roughnessMask=null,this._roughnessMaskChannel=0,this._roughnessMaskInvert=!1,this._unlit=!1,t&&(void 0!==t.diffuseR&&void 0!==t.diffuseG&&void 0!==t.diffuseB&&(this.diffuse=new bg.Color(t.diffuseR,t.diffuseG,t.diffuseB,t.diffuseA?t.diffuseA:1)),void 0!==t.specularR&&void 0!==t.specularG&&void 0!==t.specularB&&(this.specular=new bg.Color(t.specularR,t.specularG,t.specularB,t.specularA?t.specularA:1)),void 0!==t.shininess&&(this.shininess=t.shininess),void 0!==t.lightEmission&&(this.lightEmission=t.lightEmission),void 0!==t.refractionAmount&&(this.refractionAmount=t.refractionAmount),void 0!==t.reflectionAmount&&(this.reflectionAmount=t.reflectionAmount),void 0!==t.texture&&(this.texture=t.texture),void 0!==t.lightmap&&(this.lightmap=t.lightmap),void 0!==t.normalMap&&(this.normalMap=t.normalMap),void 0!==t.textureOffsetX&&void 0!==t.textureOffsetY&&(this.textureOffset=new bg.Vector2(t.textureOffsetX,t.textureOffsetY)),void 0!==t.textureScaleX&&void 0!==t.textureScaleY&&(this.textureScale=new bg.Vector2(t.textureScaleX,t.textureScaleY)),void 0!==t.lightmapOffsetX&&void 0!==t.lightmapOffsetY&&(this.lightmapOffset=new bg.Vector2(t.lightmapOffsetX,t.lightmapOffsetY)),void 0!==t.lightmapScaleX&&void 0!==t.lightmapScaleY&&(this.lightmapScale=new bg.Vector2(t.lightmapScaleX,t.lightmapScaleY)),void 0!==t.normalMapScaleX&&void 0!==t.normalMapScaleY&&(this.normalMapScale=new bg.Vector2(t.normalMapScaleX,t.normalMapScaleY)),void 0!==t.normalMapOffsetX&&void 0!==t.normalMapOffsetY&&(this.normalMapOffset=new bg.Vector2(t.normalMapOffsetX,t.normalMapOffsetY)),void 0!==t.castShadows&&(this.castShadows=t.castShadows),void 0!==t.receiveShadows&&(this.receiveShadows=t.receiveShadows),void 0!==t.alphaCutoff&&(this.alphaCutoff=t.alphaCutoff),void 0!==t.shininessMask&&(this.shininessMask=t.shininessMask),void 0!==t.shininessMaskChannel&&(this.shininessMaskChannel=t.shininessMaskChannel),void 0!==t.invertShininessMask&&(this.shininessMaskInvert=t.invertShininessMask),void 0!==t.lightEmissionMask&&(this.lightEmissionMask=t.lightEmissionMask),void 0!==t.lightEmissionMaskChannel&&(this.lightEmissionMaskChannel=t.lightEmissionMaskChannel),void 0!==t.invertLightEmissionMask&&(this.lightEmissionMaskInvert=t.invertLightEmissionMask),void 0!==t.reflectionMask&&(this.reflectionMask=t.reflectionMask),void 0!==t.reflectionMaskChannel&&(this.reflectionMaskChannel=t.reflectionMaskChannel),void 0!==t.invertReflectionMask&&(this.reflectionMaskInvert=t.reflectionMaskInvert),void 0!==t.roughness&&(this.roughness=t.roughness),void 0!==t.roughnessMask&&(this.roughnessMask=t.roughnessMask),void 0!==t.roughnessMaskChannel&&(this.roughnessMaskChannel=t.roughnessMaskChannel),void 0!==t.invertRoughnessMask&&(this.roughnessMaskInvert=t.roughnessMaskInvert),void 0!==t.unlit&&(this.unlit=t.unlit))}return $traceurRuntime.createClass(t,{get modifierFlags(){return this._modifierFlags},set modifierFlags(t){this._modifierFlags=t},setEnabled:function(t){this._modifierFlags=this._modifierFlags|t},isEnabled:function(t){return 0!=(this._modifierFlags&t)},get diffuse(){return this._diffuse},get specular(){return this._specular},get shininess(){return this._shininess},get lightEmission(){return this._lightEmission},get refractionAmount(){return this._refractionAmount},get reflectionAmount(){return this._reflectionAmount},get texture(){return this._texture},get lightmap(){return this._lightmap},get normalMap(){return this._normalMap},get textureOffset(){return this._textureOffset},get textureScale(){return this._textureScale},get lightmapOffset(){return this._lightmapOffset},get lightmapScale(){return this._lightmapScale},get normalMapOffset(){return this._normalMapOffset},get normalMapScale(){return this._normalMapScale},get castShadows(){return this._castShadows},get receiveShadows(){return this._receiveShadows},get alphaCutoff(){return this._alphaCutoff},get shininessMask(){return this._shininessMask},get shininessMaskChannel(){return this._shininessMaskChannel},get shininessMaskInvert(){return this._shininessMaskInvert},get lightEmissionMask(){return this._lightEmissionMask},get lightEmissionMaskChannel(){return this._lightEmissionMaskChannel},get lightEmissionMaskInvert(){return this._lightEmissionMaskInvert},get reflectionMask(){return this._reflectionMask},get reflectionMaskChannel(){return this._reflectionMaskChannel},get reflectionMaskInvert(){return this._reflectionMaskInvert},get cullFace(){return this._cullFace},get roughness(){return this._roughness},get roughnessMask(){return this._roughnessMask},get roughnessMaskChannel(){return this._roughnessMaskChannel},get roughnessMaskInvert(){return this._roughnessMaskInvert},get unlit(){return this._unlit},set diffuse(t){this._diffuse=t,this.setEnabled(bg.base.MaterialFlag.DIFFUSE)},set specular(t){this._specular=t,this.setEnabled(bg.base.MaterialFlag.SPECULAR)},set shininess(t){isNaN(t)||(this._shininess=t,this.setEnabled(bg.base.MaterialFlag.SHININESS))},set lightEmission(t){isNaN(t)||(this._lightEmission=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_EMISSION))},set refractionAmount(t){isNaN(t)||(this._refractionAmount=t,this.setEnabled(bg.base.MaterialFlag.REFRACTION_AMOUNT))},set reflectionAmount(t){isNaN(t)||(this._reflectionAmount=t,this.setEnabled(bg.base.MaterialFlag.REFLECTION_AMOUNT))},set texture(t){this._texture=t,this.setEnabled(bg.base.MaterialFlag.TEXTURE)},set lightmap(t){this._lightmap=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_MAP)},set normalMap(t){this._normalMap=t,this.setEnabled(bg.base.MaterialFlag.NORMAL_MAP)},set textureOffset(t){this._textureOffset=t,this.setEnabled(bg.base.MaterialFlag.TEXTURE_OFFSET)},set textureScale(t){this._textureScale=t,this.setEnabled(bg.base.MaterialFlag.TEXTURE_SCALE)},set lightmapOffset(t){this._lightmapOffset=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_MAP_OFFSET)},set lightmapScale(t){this._lightmapScale=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_MAP_SCALE)},set normalMapOffset(t){this._normalMapOffset=t,this.setEnabled(bg.base.MaterialFlag.NORMAL_MAP_OFFSET)},set normalMapScale(t){this._normalMapScale=t,this.setEnabled(bg.base.MaterialFlag.NORMAL_MAP_SCALE)},set castShadows(t){this._castShadows=t,this.setEnabled(bg.base.MaterialFlag.CAST_SHADOWS)},set receiveShadows(t){this._receiveShadows=t,this.setEnabled(bg.base.MaterialFlag.RECEIVE_SHADOWS)},set alphaCutoff(t){isNaN(t)||(this._alphaCutoff=t,this.setEnabled(bg.base.MaterialFlag.ALPHA_CUTOFF))},set shininessMask(t){this._shininessMask=t,this.setEnabled(bg.base.MaterialFlag.SHININESS_MASK)},set shininessMaskChannel(t){this._shininessMaskChannel=t,this.setEnabled(bg.base.MaterialFlag.SHININESS_MASK_CHANNEL)},set shininessMaskInvert(t){this._shininessMaskInvert=t,this.setEnabled(bg.base.MaterialFlag.SHININESS_MASK_INVERT)},set lightEmissionMask(t){this._lightEmissionMask=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK)},set lightEmissionMaskChannel(t){this._lightEmissionMaskChannel=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL)},set lightEmissionMaskInvert(t){this._lightEmissionMaskInvert=t,this.setEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT)},set reflectionMask(t){this._reflectionMask=t,this.setEnabled(bg.base.MaterialFlag.REFLECTION_MASK)},set reflectionMaskChannel(t){this._reflectionMaskChannel=t,this.setEnabled(bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL)},set reflectionMaskInvert(t){this._reflectionMaskInvert=t,this.setEnabled(bg.base.MaterialFlag.REFLECTION_MASK_INVERT)},set cullFace(t){this._cullFace=t,this.setEnabled(bg.base.MaterialFlag.CULL_FACE)},set roughness(t){this._roughness=t,this.setEnabled(bg.base.MaterialFlag.ROUGHNESS)},set roughnessMask(t){this._roughnessMask=t,this.setEnabled(bg.base.MaterialFlag.ROUGHNESS)},set roughnessMaskChannel(t){this._roughnessMaskChannel=t,this.setEnabled(bg.base.MaterialFlag.ROUGHNESS)},set roughnessMaskInvert(t){this._roughnessMaskInvert=t,this.setEnabled(bg.base.MaterialFlag.ROUGHNESS)},set unlit(t){this._unlit=t,this.setEnabled(bg.base.MaterialFlag.UNLIT)},clone:function(){var e=new t;return e.assign(this),e},assign:function(t){this._modifierFlags=t._modifierFlags,this._diffuse=t._diffuse,this._specular=t._specular,this._shininess=t._shininess,this._lightEmission=t._lightEmission,this._refractionAmount=t._refractionAmount,this._reflectionAmount=t._reflectionAmount,this._texture=t._texture,this._lightmap=t._lightmap,this._normalMap=t._normalMap,this._textureOffset=t._textureOffset,this._textureScale=t._textureScale,this._lightmapOffset=t._lightmapOffset,this._lightmapScale=t._lightmapScale,this._normalMapOffset=t._normalMapOffset,this._normalMapScale=t._normalMapScale,this._castShadows=t._castShadows,this._receiveShadows=t._receiveShadows,this._alphaCutoff=t._alphaCutoff,this._shininessMask=t._shininessMask,this._shininessMaskChannel=t._shininessMaskChannel,this._shininessMaskInvert=t._shininessMaskInvert,this._lightEmissionMask=t._lightEmissionMask,this._lightEmissionMaskChannel=t._lightEmissionMaskChannel,this._lightEmissionMaskInvert=t._lightEmissionMaskInvert,this._reflectionMask=t._reflectionMask,this._reflectionMaskChannel=t._reflectionMaskChannel,this._reflectionMaskInvert=t._reflectionMaskInvert,this._cullFace=t._cullFace,this._roughness=t._roughness,this._roughnessMask=t._roughnessMask,this._roughnessMaskChannel=t._roughnessMaskChannel,this._roughnessMaskInvert=t._roughnessMaskInvert,this._unlit=t._unlit},serialize:function(){var t={},e=this._modifierFlags;return e&bg.base.MaterialFlag.DIFFUSE&&(t.diffuseR=this._diffuse.r,t.diffuseG=this._diffuse.g,t.diffuseB=this._diffuse.b,t.diffuseA=this._diffuse.a),e&bg.base.MaterialFlag.SPECULAR&&(t.specularR=this._specular.r,t.specularG=this._specular.g,t.specularB=this._specular.b,t.specularA=this._specular.a),e&bg.base.MaterialFlag.SHININESS&&(t.shininess=this._shininess),e&bg.base.MaterialFlag.SHININESS_MASK&&(t.shininessMask=this._shininessMask),e&bg.base.MaterialFlag.SHININESS_MASK_CHANNEL&&(t.shininessMaskChannel=this._shininessMaskChannel),e&bg.base.MaterialFlag.SHININESS_MASK_INVERT&&(t.invertShininessMask=this._shininessMaskInvert),e&bg.base.MaterialFlag.LIGHT_EMISSION&&(t.lightEmission=this._lightEmission),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK&&(t.lightEmissionMask=this._lightEmissionMask),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL&&(t.lightEmissionMaskChannel=this._lightEmissionMaskChannel),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT&&(t.invertLightEmissionMask=this._lightEmissionMaskInvert),e&bg.base.MaterialFlag.REFRACTION_AMOUNT&&(t.reflectionAmount=this._refractionAmount),e&bg.base.MaterialFlag.REFLECTION_AMOUNT&&(t.refractionAmount=this._reflectionAmount),e&bg.base.MaterialFlag.TEXTURE&&(t.texture=this._texture),e&bg.base.MaterialFlag.LIGHT_MAP&&(t.lightmap=this._lightmap),e&bg.base.MaterialFlag.NORMAL_MAP&&(t.normalMap=this._normalMap),e&bg.base.MaterialFlag.TEXTURE_OFFSET&&(t.textureScaleX=this._textureScale.x,t.textureScaleY=this._textureScale.y),e&bg.base.MaterialFlag.TEXTURE_SCALE&&(t.textureScaleX=this._textureScale.x,t.textureScaleY=this._textureScale.y),e&bg.base.MaterialFlag.LIGHT_MAP_OFFSET&&(t.lightmapOffsetX=this._lightmapOffset.x,t.lightmapOffsetY=this._lightmapOffset.y),e&bg.base.MaterialFlag.LIGHT_MAP_SCALE&&(t.lightmapScaleX=this._lightmapScale.x,t.lightmapScaleY=this._lightmapScale.y),e&bg.base.MaterialFlag.NORMAL_MAP_OFFSET&&(t.normalMapOffsetX=this._normalMapOffset.x,t.normalMapOffsetY=this._normalMapOffset.y),e&bg.base.MaterialFlag.NORMAL_MAP_SCALE&&(t.normalMapScaleX=this._normalMapScale.x,t.normalMapScaleY=this._normalMapScale.y),e&bg.base.MaterialFlag.CAST_SHADOWS&&(t.castShadows=this._castShadows),e&bg.base.MaterialFlag.RECEIVE_SHADOWS&&(t.receiveShadows=this._receiveShadows),e&bg.base.MaterialFlag.ALPHA_CUTOFF&&(t.alphaCutoff=this._alphaCutoff),e&bg.base.MaterialFlag.REFLECTION_MASK&&(t.reflectionMask=this._reflectionMask),e&bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL&&(t.reflectionMaskChannel=this._reflectionMaskChannel),e&bg.base.MaterialFlag.REFLECTION_MASK_INVERT&&(t.invertReflectionMask=this._reflectionMaskInvert),e&bg.base.MaterialFlag.CULL_FACE&&(t.cullFace=this._cullFace),e&bg.base.MaterialFlag.ROUGHNESS&&(t.roughness=this._roughness,t.roughnessMask=this._roughnessMask,t.roughnessMaskChannel=this._roughnessMaskChannel,t.invertRoughnessMask=this._roughnessMaskInvert),e&bg.base.MaterialFlag.UNLIT&&(t.unlit=this._unlit),t}},{})}();function n(t){return bg.isElectronApp?/^\//i.test(t):/^(f|ht)tps?:\/\//i.test(t)}function i(t,e,i){var r,a,s=null;return e&&(n(e)||("/"!=i.slice(-1)&&(i+="/"),e=""+i+e),(s=bg.base.TextureCache.Get(t).find(e))||((s=new bg.base.Texture(t)).create(),s.fileName=e,bg.base.TextureCache.Get(t).register(e,s),r=e,a=s,bg.utils.Resource.Load(r).then(function(t){a.bind(),s.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),s.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter(),a.fileName=r,a.setImage(t)}))),s}function r(t){return t?t.fileName:""}function a(t){return new bg.Vector4(0==t?1:0,1==t?1:0,2==t?1:0,3==t?1:0)}function s(t){if(!t)return null;switch(t.length){case 2:return new bg.Vector2(t[0],t[1]);case 3:return new bg.Vector3(t[0],t[1],t[2]);case 4:return new bg.Vector4(t[0],t[1],t[2],t[3])}return null}bg.base.MaterialModifier=e,bg.base.imageTools={},bg.base.imageTools.isAbsolutePath=n,bg.base.imageTools.mergePath=function(t,e){return"/"!=t.slice(-1)?t+"/"+e:t+e},bg.base.imageTools.getTexture=i,bg.base.imageTools.getPath=r;var o={};function u(t,e,n,i,r){return new Promise(function(a){if(n)if(/data\:image\/[a-z]+\;base64\,/.test(n)){var s=bg.utils.md5(n);o[s]?i[r]=o[s]:(i[r]=bg.base.Texture.FromBase64Image(t,n),o[s]=i[r]),a(i[r])}else{var u=e+n;bg.base.Loader.Load(t,u).then(function(t){i[r]=t,a(t)})}else a()})}bg.base.imageTools.readTexture=u;var h=function(){function n(){this._diffuse=bg.Color.White(),this._specular=bg.Color.White(),this._shininess=0,this._lightEmission=0,this._refractionAmount=0,this._reflectionAmount=0,this._texture=null,this._lightmap=null,this._normalMap=null,this._textureOffset=new bg.Vector2,this._textureScale=new bg.Vector2(1),this._lightmapOffset=new bg.Vector2,this._lightmapScale=new bg.Vector2(1),this._normalMapOffset=new bg.Vector2,this._normalMapScale=new bg.Vector2(1),this._castShadows=!0,this._receiveShadows=!0,this._alphaCutoff=.5,this._shininessMask=null,this._shininessMaskChannel=0,this._shininessMaskInvert=!1,this._lightEmissionMask=null,this._lightEmissionMaskChannel=0,this._lightEmissionMaskInvert=!1,this._reflectionMask=null,this._reflectionMaskChannel=0,this._reflectionMaskInvert=!1,this._cullFace=!0,this._roughness=0,this._roughnessMask=null,this._roughnessMaskChannel=0,this._roughnessMaskInvert=!1,this._unlit=!1,this._selectMode=!1}return $traceurRuntime.createClass(n,{clone:function(){var t=new n;return t.assign(this),t},assign:function(t){this._diffuse=new bg.Color(t.diffuse),this._specular=new bg.Color(t.specular),this._shininess=t.shininess,this._lightEmission=t.lightEmission,this._refractionAmount=t.refractionAmount,this._reflectionAmount=t.reflectionAmount,this._texture=t.texture,this._lightmap=t.lightmap,this._normalMap=t.normalMap,this._textureOffset=new bg.Vector2(t.textureOffset),this._textureScale=new bg.Vector2(t.textureScale),this._lightmapOffset=new bg.Vector2(t.ligthmapOffset),this._lightmapScale=new bg.Vector2(t.lightmapScale),this._normalMapOffset=new bg.Vector2(t.normalMapOffset),this._normalMapScale=new bg.Vector2(t.normalMapScale),this._castShadows=t.castShadows,this._receiveShadows=t.receiveShadows,this._alphaCutoff=t.alphaCutoff,this._shininessMask=t.shininessMask,this._shininessMaskChannel=t.shininessMaskChannel,this._shininessMaskInvert=t.shininessMaskInvert,this._lightEmissionMask=t.lightEmissionMask,this._lightEmissionMaskChannel=t.lightEmissionMaskChannel,this._lightEmissionMaskInvert=t.lightEmissionMaskInvert,this._reflectionMask=t.reflectionMask,this._reflectionMaskChannel=t.reflectionMaskChannel,this._reflectionMaskInvert=t.reflectionMaskInvert,this._cullFace=t.cullFace,this._roughness=t.roughness,this._roughnessMask=t.roughnessMask,this._roughnessMaskChannel=t.roughnessMaskChannel,this._roughnessMaskInvert=t.roughnessMaskInvert,this._unlit=t.unlit},get isTransparent(){return this._diffuse.a<1},get diffuse(){return this._diffuse},get specular(){return this._specular},get shininess(){return this._shininess},get lightEmission(){return this._lightEmission},get refractionAmount(){return this._refractionAmount},get reflectionAmount(){return this._reflectionAmount},get texture(){return this._texture},get lightmap(){return this._lightmap},get normalMap(){return this._normalMap},get textureOffset(){return this._textureOffset},get textureScale(){return this._textureScale},get lightmapOffset(){return this._lightmapOffset},get lightmapScale(){return this._lightmapScale},get normalMapOffset(){return this._normalMapOffset},get normalMapScale(){return this._normalMapScale},get castShadows(){return this._castShadows},get receiveShadows(){return this._receiveShadows},get alphaCutoff(){return this._alphaCutoff},get shininessMask(){return this._shininessMask},get shininessMaskChannel(){return this._shininessMaskChannel},get shininessMaskInvert(){return this._shininessMaskInvert},get lightEmissionMask(){return this._lightEmissionMask},get lightEmissionMaskChannel(){return this._lightEmissionMaskChannel},get lightEmissionMaskInvert(){return this._lightEmissionMaskInvert},get reflectionMask(){return this._reflectionMask},get reflectionMaskChannel(){return this._reflectionMaskChannel},get reflectionMaskInvert(){return this._reflectionMaskInvert},get cullFace(){return this._cullFace},get roughness(){return this._roughness},get roughnessMask(){return this._roughnessMask},get roughnessMaskChannel(){return this._roughnessMaskChannel},get roughnessMaskInvert(){return this._roughnessMaskInvert},get unlit(){return this._unlit},set diffuse(t){this._diffuse=t},set specular(t){this._specular=t},set shininess(t){isNaN(t)||(this._shininess=t)},set lightEmission(t){isNaN(t)||(this._lightEmission=t)},set refractionAmount(t){this._refractionAmount=t},set reflectionAmount(t){this._reflectionAmount=t},set texture(t){this._texture=t},set lightmap(t){this._lightmap=t},set normalMap(t){this._normalMap=t},set textureOffset(t){this._textureOffset=t},set textureScale(t){this._textureScale=t},set lightmapOffset(t){this._lightmapOffset=t},set lightmapScale(t){this._lightmapScale=t},set normalMapOffset(t){this._normalMapOffset=t},set normalMapScale(t){this._normalMapScale=t},set castShadows(t){this._castShadows=t},set receiveShadows(t){this._receiveShadows=t},set alphaCutoff(t){isNaN(t)||(this._alphaCutoff=t)},set shininessMask(t){this._shininessMask=t},set shininessMaskChannel(t){this._shininessMaskChannel=t},set shininessMaskInvert(t){this._shininessMaskInvert=t},set lightEmissionMask(t){this._lightEmissionMask=t},set lightEmissionMaskChannel(t){this._lightEmissionMaskChannel=t},set lightEmissionMaskInvert(t){this._lightEmissionMaskInvert=t},set reflectionMask(t){this._reflectionMask=t},set reflectionMaskChannel(t){this._reflectionMaskChannel=t},set reflectionMaskInvert(t){this._reflectionMaskInvert=t},set cullFace(t){this._cullFace=t},set roughness(t){this._roughness=t},set roughnessMask(t){this._roughnessMask=t},set roughnessMaskChannel(t){this._roughnessMaskChannel=t},set roughnessMaskInvert(t){this._roughnessMaskInvert=t},get unlit(){return this._unlit},set unlit(t){this._unlit=t},get selectMode(){return this._selectMode},set selectMode(t){this._selectMode=t},get lightEmissionMaskChannelVector(){return a(this.lightEmissionMaskChannel)},get shininessMaskChannelVector(){return a(this.shininessMaskChannel)},get reflectionMaskChannelVector(){return a(this.reflectionMaskChannel)},get roughnessMaskChannelVector(){return a(this.roughnessMaskChannel)},getExternalResources:function(){var t=void 0!==arguments[0]?arguments[0]:[];function e(e){e&&e.fileName&&""!=e.fileName&&-1==t.indexOf(e.fileName)&&t.push(e.fileName)}return e(this.texture),e(this.lightmap),e(this.normalMap),e(this.shininessMask),e(this.lightEmissionMask),e(this.reflectionMask),e(this.roughnessMask),t},copyMaterialSettings:function(t,e){e&bg.base.MaterialFlag.DIFFUSE&&(t.diffuse=this.diffuse),e&bg.base.MaterialFlag.SPECULAR&&(t.specular=this.specular),e&bg.base.MaterialFlag.SHININESS&&(t.shininess=this.shininess),e&bg.base.MaterialFlag.LIGHT_EMISSION&&(t.lightEmission=this.lightEmission),e&bg.base.MaterialFlag.REFRACTION_AMOUNT&&(t.refractionAmount=this.refractionAmount),e&bg.base.MaterialFlag.REFLECTION_AMOUNT&&(t.reflectionAmount=this.reflectionAmount),e&bg.base.MaterialFlag.TEXTURE&&(t.texture=this.texture),e&bg.base.MaterialFlag.LIGHT_MAP&&(t.lightmap=this.lightmap),e&bg.base.MaterialFlag.NORMAL_MAP&&(t.normalMap=this.normalMap),e&bg.base.MaterialFlag.TEXTURE_OFFSET&&(t.textureOffset=this.textureOffset),e&bg.base.MaterialFlag.TEXTURE_SCALE&&(t.textureScale=this.textureScale),e&bg.base.MaterialFlag.LIGHT_MAP_OFFSET&&(t.lightmapOffset=this.lightmapOffset),e&bg.base.MaterialFlag.LIGHT_MAP_SCALE&&(t.lightmapScale=this.lightmapScale),e&bg.base.MaterialFlag.NORMAL_MAP_OFFSET&&(t.normalMapOffset=this.normalMapOffset),e&bg.base.MaterialFlag.NORMAL_MAP_SCALE&&(t.normalMapScale=this.normalMapScale),e&bg.base.MaterialFlag.CAST_SHADOWS&&(t.castShadows=this.castShadows),e&bg.base.MaterialFlag.RECEIVE_SHADOWS&&(t.receiveShadows=this.receiveShadows),e&bg.base.MaterialFlag.ALPHA_CUTOFF&&(t.alphaCutoff=this.alphaCutoff),e&bg.base.MaterialFlag.SHININESS_MASK&&(t.shininessMask=this.shininessMask),e&bg.base.MaterialFlag.SHININESS_MASK_CHANNEL&&(t.shininessMaskChannel=this.shininessMaskChannel),e&bg.base.MaterialFlag.SHININESS_MASK_INVERT&&(t.shininessMaskInvert=this.shininessMaskInvert),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK&&(t.lightEmissionMask=this.lightEmissionMask),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL&&(t.lightEmissionMaskChannel=this.lightEmissionMaskChannel),e&bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT&&(t.lightEmissionMaskInvert=this.lightEmissionMaskInvert),e&bg.base.MaterialFlag.REFLECTION_MASK&&(t.reflectionMask=this.reflectionMask),e&bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL&&(t.reflectionMaskChannel=this.reflectionMaskChannel),e&bg.base.MaterialFlag.REFLECTION_MASK_INVERT&&(t.reflectionMaskInvert=this.reflectionMaskInvert),e&bg.base.MaterialFlag.CULL_FACE&&(t.cullFace=this.cullFace),e&bg.base.MaterialFlag.ROUGHNESS&&(t.reflectionAmount=this.reflectionAmount,t.reflectionMask=this.reflectionMask,t.reflectionMaskChannel=this.reflectionMaskChannel,t.reflectionMaskInvert=this.reflectionMaskInvert),e&bg.base.MaterialFlag.UNLIT&&(t.unlit=this.unlit)},applyModifier:function(t,e,n){e.isEnabled(bg.base.MaterialFlag.DIFFUSE)&&(this.diffuse=e.diffuse),e.isEnabled(bg.base.MaterialFlag.SPECULAR)&&(this.specular=e.specular),e.isEnabled(bg.base.MaterialFlag.SHININESS)&&(this.shininess=e.shininess),e.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION)&&(this.lightEmission=e.lightEmission),e.isEnabled(bg.base.MaterialFlag.REFRACTION_AMOUNT)&&(this.refractionAmount=e.refractionAmount),e.isEnabled(bg.base.MaterialFlag.REFLECTION_AMOUNT)&&(this.reflectionAmount=e.reflectionAmount),e.isEnabled(bg.base.MaterialFlag.TEXTURE)&&(this.texture=i(t,e.texture,n)),e.isEnabled(bg.base.MaterialFlag.LIGHT_MAP)&&(this.lightmap=i(t,e.lightmap,n)),e.isEnabled(bg.base.MaterialFlag.NORMAL_MAP)&&(this.normalMap=i(t,e.normalMap,n)),e.isEnabled(bg.base.MaterialFlag.TEXTURE_OFFSET)&&(this.textureOffset=e.textureOffset),e.isEnabled(bg.base.MaterialFlag.TEXTURE_SCALE)&&(this.textureScale=e.textureScale),e.isEnabled(bg.base.MaterialFlag.LIGHT_MAP_OFFSET)&&(this.lightmapOffset=e.lightmapOffset),e.isEnabled(bg.base.MaterialFlag.LIGHT_MAP_SCALE)&&(this.lightmapScale=e.lightmapScale),e.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_OFFSET)&&(this.normalMapOffset=e.normalMapOffset),e.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_SCALE)&&(this.normalMapScale=e.normalMapScale),e.isEnabled(bg.base.MaterialFlag.CAST_SHADOWS)&&(this.castShadows=e.castShadows),e.isEnabled(bg.base.MaterialFlag.RECEIVE_SHADOWS)&&(this.receiveShadows=e.receiveShadows),e.isEnabled(bg.base.MaterialFlag.ALPHA_CUTOFF)&&(this.alphaCutoff=e.alphaCutoff),e.isEnabled(bg.base.MaterialFlag.SHININESS_MASK)&&(this.shininessMask=i(t,e.shininessMask,n)),e.isEnabled(bg.base.MaterialFlag.SHININESS_MASK_CHANNEL)&&(this.shininessMaskChannel=e.shininessMaskChannel),e.isEnabled(bg.base.MaterialFlag.SHININESS_MASK_INVERT)&&(this.shininessMaskInvert=e.shininessMaskInvert),e.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK)&&(this.lightEmissionMask=i(t,e.lightEmissionMask,n)),e.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL)&&(this.lightEmissionMaskChannel=e.lightEmissionMaskChannel),e.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT)&&(this.lightEmissionMaskInvert=e.lightEmissionMaskInvert),e.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK)&&(this.reflectionMask=i(t,e.reflectionMask,n)),e.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL)&&(this.reflectionMaskChannel=e.reflectionMaskChannel),e.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK_INVERT)&&(this.reflectionMaskInvert=e.reflectionMaskInvert),e.isEnabled(bg.base.MaterialFlag.CULL_FACE)&&(this.cullFace=e.cullFace),e.isEnabled(bg.base.MaterialFlag.ROUGHNESS)&&(this.roughness=e.roughness,this.roughnessMask=i(t,e.roughnessMask,n),this.roughnessMaskChannel=e.roughnessMaskChannel,this.roughnessMaskInvert=e.roughnessMaskInvert),e.isEnabled(bg.base.MaterialFlag.UNLIT)&&(this.unlit=e.unlit)},getModifierWithMask:function(t){var n=new e;return n.modifierFlags=t,n.isEnabled(bg.base.MaterialFlag.DIFFUSE)&&(n.diffuse=this.diffuse),n.isEnabled(bg.base.MaterialFlag.SPECULAR)&&(n.specular=this.specular),n.isEnabled(bg.base.MaterialFlag.SHININESS)&&(n.shininess=this.shininess),n.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION)&&(n.lightEmission=this.lightEmission),n.isEnabled(bg.base.MaterialFlag.REFRACTION_AMOUNT)&&(n.refractionAmount=this.refractionAmount),n.isEnabled(bg.base.MaterialFlag.REFLECTION_AMOUNT)&&(n.reflectionAmount=this.reflectionAmount),n.isEnabled(bg.base.MaterialFlag.TEXTURE)&&(n.texture=r(this.texture)),n.isEnabled(bg.base.MaterialFlag.LIGHT_MAP)&&(n.lightmap=r(this.lightmap)),n.isEnabled(bg.base.MaterialFlag.NORMAL_MAP)&&(n.normalMap=r(this.normalMap)),n.isEnabled(bg.base.MaterialFlag.TEXTURE_OFFSET)&&(n.textureOffset=this.textureOffset),n.isEnabled(bg.base.MaterialFlag.TEXTURE_SCALE)&&(n.textureScale=this.textureScale),n.isEnabled(bg.base.MaterialFlag.LIGHT_MAP_OFFSET)&&(n.lightmapOffset=this.lightmapOffset),n.isEnabled(bg.base.MaterialFlag.LIGHT_MAP_SCALE)&&(n.lightmapScale=this.lightmapScale),n.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_OFFSET)&&(n.normalMapOffset=this.normalMapOffset),n.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_SCALE)&&(n.normalMapScale=this.normalMapScale),n.isEnabled(bg.base.MaterialFlag.CAST_SHADOWS)&&(n.castShadows=this.castShadows),n.isEnabled(bg.base.MaterialFlag.RECEIVE_SHADOWS)&&(n.receiveShadows=this.receiveShadows),n.isEnabled(bg.base.MaterialFlag.ALPHA_CUTOFF)&&(n.alphaCutoff=this.alphaCutoff),n.isEnabled(bg.base.MaterialFlag.SHININESS_MASK)&&(n.shininessMask=r(this.shininessMask)),n.isEnabled(bg.base.MaterialFlag.SHININESS_MASK_CHANNEL)&&(n.shininessMaskChannel=this.shininessMaskChannel),n.isEnabled(bg.base.MaterialFlag.SHININESS_MASK_INVERT)&&(n.shininessMaskInvert=this.shininessMaskInvert),n.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK)&&(n.lightEmissionMask=r(this.lightEmissionMask)),n.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_CHANNEL)&&(n.lightEmissionMaskChannel=this.lightEmissionMaskChannel),n.isEnabled(bg.base.MaterialFlag.LIGHT_EMISSION_MASK_INVERT)&&(n.lightEmissionMaskInver=this.lightEmissionMaskInver),n.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK)&&(n.reflectionMask=r(this.reflectionMask)),n.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK_CHANNEL)&&(n.reflectionMaskChannel=this.reflectionMaskChannel),n.isEnabled(bg.base.MaterialFlag.REFLECTION_MASK_INVERT)&&(n.reflectionMaskInvert=this.reflectionMaskInvert),n.isEnabled(bg.base.MaterialFlag.CULL_FACE)&&(n.cullFace=this.cullFace),n.isEnabled(bg.base.MaterialFlag.ROUGHNESS)&&(n.roughness=this.roughness,n.roughnessMask=r(this.roughnessMask),n.roughnessMaskChannel=this.roughnessMaskChannel,n.roughnessMaskInvert=this.roughnessMaskInvert),n.isEnabled(bg.base.MaterialFlag.UNLIT)&&(n.unlit=this.unlit),n}},{FromMaterialDefinition:function(t,e){var i=void 0!==arguments[2]?arguments[2]:"";return new Promise(function(r,a){var o=new n;o.diffuse=s(e.diffuse)||bg.Color.White(),o.specular=s(e.specular)||bg.Color.White(),o.shininess=e.shininess||0,o.shininessMaskChannel=e.shininessMaskChannel||0,o.shininessMaskInvert=e.shininessMaskInvert||!1,o.lightEmission=e.lightEmission||0,o.lightEmissionMaskChannel=e.lightEmissionMaskChannel||0,o.lightEmissionMaskInvert=e.lightEmissionMaskInvert||!1,o.refractionAmount=e.refractionAmount||0,o.reflectionAmount=e.reflectionAmount||0,o.reflectionMaskChannel=e.reflectionMaskChannel||0,o.reflectionMaskInvert=e.reflectionMaskInvert||!1,o.textureOffset=s(e.textureOffset)||new bg.Vector2(0,0),o.textureScale=s(e.textureScale)||new bg.Vector2(1,1),o.normalMapOffset=s(e.normalMapOffset)||new bg.Vector2(0,0),o.normalMapScale=s(e.normalMapScale)||new bg.Vector2(1,1),o.cullFace=void 0===e.cullFace||e.cullFace,o.castShadows=void 0===e.castShadows||e.castShadows,o.receiveShadows=void 0===e.receiveShadows||e.receiveShadows,o.alphaCutoff=void 0===e.alphaCutoff?.5:e.alphaCutoff,o.name=e.name,o.description=e.description,o.roughness=e.roughness||0,o.roughnessMaskChannel=e.roughnessMaskChannel||0,o.roughnessMaskInvert=e.roughnessMaskInvert||!1,o.unlit=e.unlit||!1;var h=[];h.push(u(t,i,e.shininessMask,o,"shininessMask")),h.push(u(t,i,e.lightEmissionMask,o,"lightEmissionMask")),h.push(u(t,i,e.reflectionMask,o,"reflectionMask")),h.push(u(t,i,e.texture,o,"texture")),h.push(u(t,i,e.normalMap,o,"normalMap")),h.push(u(t,i,e.roughnessMask,o,"roughnessMask")),Promise.all(h).then(function(){r(o)})})},GetMaterialWithJson:function(e,i,r){var a=new n;function s(t,e){return e?t?t+e:e:null}return void 0===i.cullFace&&(i.cullFace=!0),a.diffuse.set(i.diffuseR,i.diffuseG,i.diffuseB,i.diffuseA),a.specular.set(i.specularR,i.specularG,i.specularB,i.specularA),a.shininess=i.shininess,a.lightEmission=i.lightEmission,a.refractionAmount=i.refractionAmount,a.reflectionAmount=i.reflectionAmount,a.textureOffset.set(i.textureOffsetX,i.textureOffsetY),a.textureScale.set(i.textureScaleX,i.textureScaleY),a.lightmapOffset.set(i.lightmapOffsetX,i.lightmapOffsetY),a.lightmapScale.set(i.lightmapScaleX,i.lightmapScaleY),a.normalMapOffset.set(i.normalMapOffsetX,i.normalMapOffsetY),a.normalMapScale.set(i.normalMapScaleX,i.normalMapScaleY),a.alphaCutoff=i.alphaCutoff,a.castShadows=i.castShadows,a.receiveShadows=i.receiveShadows,a.shininessMaskChannel=i.shininessMaskChannel,a.shininessMaskInvert=i.invertShininessMask,a.lightEmissionMaskChannel=i.lightEmissionMaskChannel,a.lightEmissionMaskInvert=i.invertLightEmissionMask,a.reflectionMaskChannel=i.reflectionMaskChannel,a.reflectionMaskInvert=i.invertReflectionMask,a.roughness=i.roughness,a.roughnessMaskChannel=i.roughnessMaskChannel,a.roughnessMaskInvert=i.invertRoughnessMask,a.cullFace=i.cullFace,a.unlit=i.unlit,r&&"/"!=r[r.length-1]&&(r+="/"),i.texture=s(r,i.texture),i.lightmap=s(r,i.lightmap),i.normalMap=s(r,i.normalMap),i.shininessMask=s(r,i.shininessMask),i.lightEmissionMask=s(r,i.lightEmissionMask),i.reflectionMask=s(r,i.reflectionMask),i.roughnessMask=s(r,i.roughnessMask),new Promise(function(n,r){var s=[];i.texture&&s.push(i.texture),i.lightmap&&-1==s.indexOf(i.lightmap)&&s.push(i.lightmap),i.normalMap&&-1==s.indexOf(i.normalMap)&&s.push(i.normalMap),i.shininessMask&&-1==s.indexOf(i.shininessMask)&&s.push(i.shininessMask),i.lightEmissionMask&&-1==s.indexOf(i.lightEmissionMask)&&s.push(i.lightEmissionMask),i.reflectionMask&&-1==s.indexOf(i.reflectionMask)&&s.push(i.reflectionMask),i.roughnessMask&&-1==s.indexOf(i.roughnessMask)&&s.push(i.roughnessMask),bg.utils.Resource.Load(s).then(function(r){a.texture=t(e,r[i.texture],i.texture),a.lightmap=t(e,r[i.lightmap],i.lightmap),a.normalMap=t(e,r[i.normalMap],i.normalMap),a.shininessMask=t(e,r[i.shininessMask],i.shininessMask),a.lightEmissionMask=t(e,r[i.lightEmissionMask],i.lightEmissionMask),a.reflectionMask=t(e,r[i.reflectionMask],i.reflectionMask),a.roughnessMask=t(e,r[i.roughnessMask],i.roughnessMask),n(a)})})}})}();bg.base.Material=h}(),function(){var t=function(){return $traceurRuntime.createClass(function(){this._matrix=bg.Matrix4.Identity(),this._stack=[],this._changed=!0},{get changed(){return this._changed},set changed(t){this._changed=t},push:function(){this._stack.push(new bg.Matrix4(this._matrix))},set:function(t){return this._matrix.assign(t),this._changed=!0,this},mult:function(t){return this._matrix.mult(t),this._changed=!0,this},identity:function(){return this._matrix.identity(),this._changed=!0,this},translate:function(t,e,n){return this._matrix.translate(t,e,n),this._changed=!0,this},rotate:function(t,e,n,i){return this._matrix.rotate(t,e,n,i),this._changed=!0,this},scale:function(t,e,n){return this._matrix.scale(t,e,n),this._changed=!0,this},setScale:function(t,e,n){return this._matrix.setScale(t,e,n),this._changed=!0,this},perspective:function(t,e,n,i){return this._matrix.identity().perspective(t,e,n,i),this._changed=!0,this},frustum:function(t,e,n,i,r,a){return this._matrix.identity().frustum(t,e,n,i,r,a),this._changed=!0,this},ortho:function(t,e,n,i,r,a){return this._matrix.identity().ortho(t,e,n,i,r,a),this._changed=!0,this},invert:function(){return this._matrix.invert(),this._changed=!0,this},get matrix(){return this._changed=!0,this._matrix},get matrixConst(){return this._matrix},pop:function(){return this._stack.length&&(this._matrix.assign(this._stack.pop()),this._changed=!0),this._matrix}},{})}();bg.base.MatrixStack=t;var e=null,n=function(){function n(){this._modelMatrixStack=new t,this._viewMatrixStack=new t,this._projectionMatrixStack=new t,this._modelViewMatrix=bg.Matrix4.Identity(),this._normalMatrix=bg.Matrix4.Identity(),this._cameraDistanceScale=null}return $traceurRuntime.createClass(n,{get modelMatrixStack(){return this._modelMatrixStack},get viewMatrixStack(){return this._viewMatrixStack},get projectionMatrixStack(){return this._projectionMatrixStack},get modelViewMatrix(){return(!this._modelViewMatrix||this._modelMatrixStack.changed||this._viewMatrixStack.changed)&&(this._modelViewMatrix=new bg.Matrix4(this._viewMatrixStack._matrix),this._modelViewMatrix.mult(this._modelMatrixStack._matrix),this._modelMatrixStack.changed=!1,this._viewMatrixStack.changed=!1),this._modelViewMatrix},get normalMatrix(){return(!this._normalMatrix||this._modelMatrixStack.changed||this._viewMatrixStack.changed)&&(this._normalMatrix=new bg.Matrix4(this.modelViewMatrix),this._normalMatrix.invert(),this._normalMatrix.traspose(),this._modelMatrixStack.changed=!1),this._normalMatrix},get viewMatrixInvert(){return this._viewMatrixInvert&&!this._viewMatrixStack.changed||(this._viewMatrixInvert=new bg.Matrix4(this.viewMatrixStack.matrixConst),this._viewMatrixInvert.invert()),this._viewMatrixInvert},get cameraDistanceScale(){return this._cameraDistanceScale=this._viewMatrixStack.matrix.position.magnitude()}},{Current:function(){return e||(e=new n),e},SetCurrent:function(t){return e=t}})}();bg.base.MatrixState=n}(),function(){function t(t){var e=void 0!==arguments[1]?arguments[1]:bg.Color.Black();return Array.isArray(diffuse)&&3==diffuse.length?new bg.Color(t[0],t[1],t[2],1):Array.isArray(diffuse)&&diffuse.length>=4?new bg.Color(t[0],t[1],t[2],t[3]):"string"==typeof diffuse&&""!=diffuse?diffuse:e}function e(t){var e=void 0!==arguments[1]?arguments[1]:bg.Vector2();return Array.isArray(t)&&2==t.length?new bg.Vector2(t):Array.isArray(t)&&3==t.length?new bg.Vector3(t):Array.isArray(t)&&4==t.length?new bg.Vector4(t):e}function n(t){var e=void 0!==arguments[1]?arguments[1]:0;return void 0===t||isNaN(Number(t))||""===t?void 0!==t&&"string"==typeof t&&""!=t?t:e:Number(t)}function i(t){var e=void 0!==arguments[1]?arguments[1]:0;return void 0===t||isNaN(Number(t))||""===t?e:Number(t)}function r(t){var e=void 0===arguments[1]||arguments[1];return"string"==typeof t&&""!==t?/true/i.test(t)||/yes/i.test(t)||/1/.test(t):void 0!==t?t:e}function e(t){var e=void 0!==arguments[1]?arguments[1]:[0,0];return t instanceof bg.Vector2||t instanceof bg.Vector3||t instanceof bg.Vector4?t.toArray():Array.isArray(t)?t:e}function t(t){var e=void 0!==arguments[1]?arguments[1]:[0,0,0,1];return t instanceof bg.Color?t.toArray():Array.isArray(t)?t:"string"==typeof t&&""!=t?t:e}function n(t){return void 0===t||isNaN(Number(t))?"string"==typeof t&&""!=t?t:0:Number(t)}bg.base.PBRMaterialFlag={DIFFUSE:1,METALLIC:2,ROUGHNESS:4,FRESNEL:8,AMBIENT_OCCLUSSION:16,LIGHT_EMISSION:32,NORMAL:64,LIGHT_MAP:128,HEIGHT:256,SHADOWS:512,CULL_FACE:1024,UNLIT:2048};var a=function(){function a(a){if(this._modifierFlags=0,this._diffuse=bg.Color.White(),this._isTransparent=!1,this._alphaCutoff=.5,this._diffuseScale=new bg.Vector2(1),this._metallic=0,this._metallicChannel=0,this._metallicScale=new bg.Vector2(1),this._roughness=1,this._roughnessChannel=0,this._roughnessScale=new bg.Vector2(1),this._fresnel=bg.Color.White(),this._fresnelScale=new bg.Vector2(1),this._ambientOcclussion=1,this._ambientOcclussionChannel=0,this._lightEmission=0,this._lightEmissionChannel=0,this._lightEmissionScale=new bg.Vector2(1),this._height=0,this._heightChannel=0,this._heightIntensity=1,this._heightScale=new bg.Vector2(1),this._normal=new bg.Color(.5,.5,1,1),this._normalScale=new bg.Vector2(1),this._castShadows=!0,this._cullFace=!0,this._unlit=!1,a&&"pbr"!=a.type&&"PBRMaterial"!=a.class)console.warn("non-pbr data used in pbr material modifier."),a.texture?this._diffuse=t(a.texture,this._diffuse):this._diffuse=new bg.Color(void 0!==a.diffuseR?a.diffuseR:1,void 0!==a.diffuseG?a.diffuseG:1,void 0!==a.diffuseB?a.diffuseB:1,void 0!==a.diffuseA?a.diffuseA:1),this._diffuseScale=new bg.Vector2(void 0!==a.diffuseScaleX?a.diffuseScaleX:this._diffuseScale.x,void 0!==a.diffuseScaleY?a.diffuseScaleY:this._diffuseScale.y),this._diffuseOffset=new bg.Vector2(void 0!==a.diffuseOffsetX?a.diffuseOffsetX:this._diffuseOffset.x,void 0!==a.diffuseOffsetY?a.diffuseOffsetY:this._diffuseOffset.y),a.normalMap&&(this._normal=t(a.normalMap,this._normal)),this._normalScale=new bg.Vector2(void 0!==a.normalMapScaleX?a.normalMapScaleX:this._normalScale.x,void 0!==a.normalMapScaleY?a.normalMapScaleY:this._normalScale.y),this._normalOffset=new bg.Vector2(void 0!==a.normalMapOffsetX?a.normalMapOffsetX:this._normalOffset.x,void 0!==a.normalMapOffsetY?a.normalMapOffsetY:this._normalOffset.y),(a.diffuseR||a.diffuseG||a.diffuseB||a.diffuseA||a.texture)&&this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE),(a.diffuseScaleX||a.diffuseScaleY)&&this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE_SCALE),(a.diffuseOffsetX||a.diffuseOffsetY)&&this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE_OFFSET),a.normalMap&&this.setEnabled(bg.base.PBRMaterialFlag.NORMAL),(a.normalMapScaleX||a.normalMapScaleY)&&this.setEnabled(bg.base.PBRMaterialFlag.NORMAL_SCALE),(a.normalMapOffsetX||a.normalMapOffsetY)&&this.setEnabled(bg.base.PBRMaterialFlag.NORMAL_OFFSET);else if(a){var s=a.diffuseScale||this._diffuseScale;if(this._diffuse=t(a.diffuse,this._diffuse),this._isTransparent=r(a.isTransparent,this._isTransparent),this._alphaCutoff=i(a.alphaCutoff,this._alphaCutoff),this._diffuseScale=new bg.Vector2(e(a.diffuseScale,this._diffuseScale)),this._metallic=n(a.metallic,this._metallic),this._metallicChannel=i(a.metallicChannel,this._metallicChannel),this._metallicScale=new bg.Vector2(e(a.metallicScale||s,this._metallicScale)),this._roughness=n(a.roughness,this._roughness),this._roughnessChannel=i(a.roughnessChannel,this._roughnessChannel),this._roughnessScale=new bg.Vector2(e(a.roughnessScale||s,this._roughnessScale)),this._fresnel=t(a.fresnel,this._fresnel),this._fresnelScale=new bg.Vector2(e(a.fresnelScale||s,this._fresnelScale)),this._ambientOcclussion=n(a.ambientOcclussion,this._ambientOcclussion),this._ambientOcclussionChannel=i(a.ambientOcclussionChannel,this._ambientOcclussionChannel),this._lightEmission=n(a.lightEmission,this._lightEmission),this._lightEmissionChannel=i(a.lightEmissionChannel,this._lightEmissionChannel),this._lightEmissionScale=new bg.Vector2(e(a.lightEmissionScale||s,this._lightEmissionScale)),this._height=n(a.height,this._height),this._heightChannel=i(a.heightChannel,this._heightChannel),this._heightIntensity=i(a.heightIntensity,this._heightIntensity),this._heightScale=new bg.Vector2(e(a.heightScale||s,this._heightScale)),this._normal=t(a.normal,this._normal),this._normalScale=new bg.Vector2(e(a.normalScale,this._normalScale)),this._castShadows=r(a.castShadows,this._castShadows),this._cullFace=r(a.cullFace,this._cullFace),this._unlit=r(a.unlit,this._unlit),Array.isArray(this._diffuse)&&(this._diffuse=new bg.Color(this._diffuse)),Array.isArray(this._fresnel)&&(this._fresnel=new bg.Color(this._fresnel)),Array.isArray(this.normal)&&this.normal.length>=3){var o=this.normal;this._normal=new bg.Color(o[0],o[1],o[2],o.length>3?o[3]:1)}(a.diffuse||a.isTransparent||a.alphaCutoff||a.diffuseScale)&&this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE),void 0===a.metallic&&void 0===a.metallicScale||this.setEnabled(bg.base.PBRMaterialFlag.METALLIC),void 0===a.roughness&&void 0===a.roughnessScale||this.setEnabled(bg.base.PBRMaterialFlag.ROUGHNESS),void 0===a.fresnel&&void 0===a.fresnelScale||this.setEnabled(bg.base.PBRMaterialFlag.FRESNEL),void 0!==a.ambientOcclussion&&this.setEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION),void 0===a.lightEmission&&void 0===a.lightEmissionScale||this.setEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION),void 0===a.height&&void 0===a.heightIntensity&&void 0===a.heightScale||this.setEnabled(bg.base.PBRMaterialFlag.HEIGHT),(a.normal||a.normalScale)&&this.setEnabled(bg.base.PBRMaterialFlag.NORMAL),void 0!==a.castShadows&&this.setEnabled(bg.base.PBRMaterialFlag.SHADOWS),void 0!==a.cullFace&&this.setEnabled(bg.base.PBRMaterialFlag.CULL_FACE),void 0!==a.unlit&&this.setEnabled(bg.base.PBRMaterialFlag.UNLIT)}}return $traceurRuntime.createClass(a,{get modifierFlags(){return this._modifierFlags},set modifierFlags(t){this._modifierFlags=t},get modifierMask(){return this._modifierFlags},set modifierMask(t){this._modifierFlags=t},setEnabled:function(t){this._modifierFlags=this._modifierFlags|t},isEnabled:function(t){return 0!=(this._modifierFlags&t)},get diffuseOffset(){return console.warn("diffuseOffset is deprecated in PBR materials."),new bg.Vector2(0)},set diffuseOffset(t){console.warn("diffuseOffset is deprecated iin PBR materials.")},get normalOffset(){return console.warn("normalOffset is deprecated in PBR materials."),new bg.Vector2(0)},set normalOffset(t){console.warn("normalOffset is deprecated in PBR materials.")},get diffuse(){return this._diffuse},get isTransparent(){return this._isTransparent},get alphaCutoff(){return this._alphaCutoff},set diffuse(t){this._diffuse=t,this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE)},set isTransparent(t){this._isTransparent=t,this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE)},set alphaCutoff(t){this._alphaCutoff=t,this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE)},get diffuseScale(){return this._diffuseScale},set diffuseScale(t){this._diffuseScale=t,this.setEnabled(bg.base.PBRMaterialFlag.DIFFUSE)},get metallic(){return this._metallic},set metallic(t){this._metallic=t,this.setEnabled(bg.base.PBRMaterialFlag.METALLIC)},get metallicChannel(){return this._metallicChannel},set metallicChannel(t){this._metallicChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.METALLIC)},get metallicScale(){return this._metallicScale},set metallicScale(t){this._metallicScale=t,this.setEnabled(bg.base.PBRMaterialFlag.METALLIC)},get roughness(){return this._roughness},set roughness(t){this._roughness=t,this.setEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)},get roughnessChannel(){return this._roughnessChannel},set roughnessChannel(t){this._roughnessChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)},get roughnessScale(){return this._roughnessScale},set roughnessScale(t){this._roughnessScale=t,this.setEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)},get fresnel(){return this._fresnel},set fresnel(t){this._fresnel=t,this.setEnabled(bg.base.PBRMaterialFlag.FRESNEL)},get fresnelScale(){return this._fresnelScale},set fresnelScale(t){this._fresnelScale=t,this.setEnabled(bg.base.PBRMaterialFlag.FRESNEL)},get ambientOcclussion(){return this._ambientOcclussion},set ambientOcclussion(t){this._ambientOcclussion=t,this.setEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION)},get ambientOcclussionChannel(){return this._ambientOcclussionChannel},set ambientOcclussionChannel(t){this._ambientOcclussionChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION)},get lightEmission(){return this._lightEmission},set lightEmission(t){this._lightEmission=t,this.setEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)},get lightEmissionChannel(){return this._lightEmissionChannel},set lightEmissionChannel(t){this._lightEmissionChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)},get lightEmissionScale(){return this._lightEmissionScale},set lightEmissionScale(t){this._lightEmissionScale=t,this.setEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)},get height(){return this._height},set height(t){this._height=t,this.setEnabled(bg.base.PBRMaterialFlag.HEIGHT)},get heightChannel(){return this._heightChannel},set heightChannel(t){this._heightChannel=t,this.setEnabled(bg.base.PBRMaterialFlag.HEIGHT)},get heightIntensity(){return this._heightIntensity},set heightIntensity(t){this._heightIntensity=t,this.setEnabled(bg.base.PBRMaterialFlag.HEIGHT)},get heightScale(){return this._heightScale},set heightScale(t){this._heightScale=t,this.setEnabled(bg.base.PBRMaterialFlag.HEIGH)},get normal(){return this._normal},set normal(t){this._normal=t,this.setEnabled(bg.base.PBRMaterialFlag.NORMAL)},get normalScale(){return this._normalScale},set normalScale(t){this._normalScale=t,this.setEnabled(bg.base.PBRMaterialFlag.NORMAL)},get castShadows(){return this._castShadows},set castShadows(t){this._castShadows=t,this.setEnabled(bg.base.PBRMaterialFlag.SHADOWS)},get cullFace(){return this._cullFace},set cullFace(t){this._cullFace=t,this.setEnabled(bg.base.PBRMaterialFlag.CULL_FACE)},get unlit(){return this._unlit},set unlit(t){this._unlit=t,this.setEnabled(bg.base.PBRMaterialFlag.UNLIT)},clone:function(){var t=new a;return t.assign(this),t},assign:function(t){this._modifierFlags=t._modifierFlags,this._diffuse=t._diffuse,this._isTransparent=t._isTransparent,this._alphaCutoff=t._alphaCutoff,this._diffuseScale=t._diffuseScale,this._metallic=t._metallic,this._metallicChannel=t._metallicChannel,this._metallicScale=t._metallicScale,this._roughness=t._roughness,this._roughnessChannel=t._roughnessChannel,this._roughnessScale=t._roughnessScale,this._fresnel=t._fresnel,this._fresnelScale=t._fresnelScale,this._ambientOcclussion=t._ambientOcclussion,this._ambientOcclussionChannel=t._ambientOcclussionChannel,this._lightEmission=t._lightEmission,this._lightEmissionChannel=t._lightEmissionChannel,this._lightEmissionScale=t._lightEmissionScale,this._height=t._height,this._heightChannel=t._heightChannel,this._heightIntensity=t._heightIntensity,this._heightScale=t._heightScale,this._normal=t._normal,this._normalScale=t._normalScale,this._castShadows=t._castShadows,this._cullFace=t._cullFace,this._unlit=t._unlit},serialize:function(){var a={class:"PBRMaterial"},s=this._modifierFlags;return s&bg.base.PBRMaterialFlag.DIFFUSE&&(a.diffuse=t(this.diffuse),a.isTransparent=r(this.isTransparent),a.alphaCutoff=r(this.alphaCutoff),a.diffuseScale=e(this.diffuseScale)),s&bg.base.PBRMaterialFlag.METALLIC&&(a.metallic=n(this.metallic),a.metallicChannel=i(this.metallicChannel),a.metallicScale=e(this.metallicScale)),s&bg.base.PBRMaterialFlag.ROUGHNESS&&(a.roughness=n(this.roughness),a.roughnessChannel=i(this.roughnessChannel),a.roughnessScale=e(this.roughnessScale)),s&bg.base.PBRMaterialFlag.FRESNEL&&(a.fresnel=t(this.fresnel),a.fresnelScale=e(this.fresnelScale)),s&bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION&&(a.ambientOcclussion=n(this.ambientOcclussion),a.ambientOcclussionChannel=i(this.ambientOcclussionChannel)),s&bg.base.PBRMaterialFlag.LIGHT_EMISSION&&(a.lightEmission=n(this.lightEmission),a.lightEmissionChannel=i(this.lightEmissionChannel),a.lightEmissionScale=e(this.lightEmissionScale)),s&bg.base.PBRMaterialFlag.NORMAL&&(a.normal=t(this.normal),a.normalScale=e(this.normalScale)),s&bg.base.PBRMaterialFlag.HEIGHT&&(a.height=n(this.height),a.heightChannel=i(this.heightChannel),a.heightScale=i(this.heightScale),a.heightIntensity=i(this.heightIntensity)),s&bg.base.PBRMaterialFlag.SHADOWS&&(a.castShadows=r(this.castShadows)),s&bg.base.PBRMaterialFlag.CULL_FACE&&(a.cullFace=r(this.cullFace)),s&bg.base.PBRMaterialFlag.UNLIT&&(a.unlit=r(this.unlit)),a}},{ConvertToPBR:function(t){var e=new bg.base.PBRMaterialModifier;return t.isEnabled(bg.base.MaterialFlag.DIFFUSE)&&!t.isEnabled(bg.base.MaterialFlag.TEXTURE)?e.diffuse=t.diffuse:t.isEnabled(bg.base.MaterialFlag.TEXTURE)&&""!=t.texture&&(e.diffuse=t.texture),t.isEnabled(bg.base.MaterialFlag.NORMAL_MAP)&&""!=t.normalMap&&(e.normal=t.normalMap),t.isEnabled(bg.base.MaterialFlag.SPECULAR)&&(e.fresnel=t.specular),t.isEnabled(bg.base.MaterialFlag.TEXTURE_OFFSET)&&(e.diffuseOffset=t.textureOffset),t.isEnabled(bg.base.MaterialFlag.TEXTURE_SCALE)&&(e.diffuseScale=t.textureScale),t.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_OFFSET)&&(e.normalOffset=t.normalMapOffset),t.isEnabled(bg.base.MaterialFlag.NORMAL_MAP_SCALE)&&(e.normalScale=t.normalMapScale),e}})}();function s(t){var e=this._shaderParameters[t];e&&e.map&&e.release&&e.map.destroy()}function o(t,e,n,i){var r=this;return new Promise(function(a,s){if("string"==typeof n)bg.base.imageTools.isAbsolutePath(n)||(n=bg.base.imageTools.mergePath(i,n)),bg.base.Loader.Load(t,n).then(function(t){r[e]=t,a(t)}).catch(function(t){s(t)});else if(n instanceof bg.Color||"number"==typeof n)r[e]=n,a(n);else if(Array.isArray(n)){switch(n.length){case 2:r[e]=new bg.Vector2(n);break;case 3:r[e]=new bg.Vector3(n);break;case 4:r[e]=new bg.Vector4(n)}a(r[e])}else s(new Error("Invalid PBR color parameter"))})}bg.base.PBRMaterialModifier=a;var u=function(){function e(){this._diffuse=bg.Color.White(),this._alphaCutoff=.5,this._isTransparent=!1,this._metallic=0,this._metallicChannel=0,this._roughness=1,this._roughnessChannel=0,this._fresnel=bg.Color.White(),this._lightEmission=0,this._lightEmissionChannel=0,this._ambientOcclussion=1,this._ambientOcclussionChannel=0,this._normal=new bg.Color(.5,.5,1,1),this._normalChannel=0,this._height=bg.Color.Black(),this._heightChannel=0,this._heightIntensity=1,this._castShadows=!0,this._cullFace=!0,this._unlit=!1,this._texturesToMerge=0,this._shaderParameters={diffuse:{map:null,release:!1},metallic:{map:null,release:!1},roughness:{map:null,release:!1},fresnel:{map:null,release:!1},lightEmission:{map:null,release:!1},ambientOcclussion:{map:null,release:!1},normal:{map:null,release:!1},height:{map:null,release:!1},heightMetallicRoughnessAO:{map:null,release:!1},diffuseScale:new bg.Vector2(1,1),metallicScale:new bg.Vector2(1,1),roughnessScale:new bg.Vector2(1,1),fresnelScale:new bg.Vector2(1,1),lightEmissionScale:new bg.Vector2(1,1),heightScale:new bg.Vector2(1,1),normalScale:new bg.Vector2(1,1),alphaCutoff:.5,castShadows:!0,diffuseUV:0,metallicUV:0,roughnessUV:0,fresnelUV:0,lightEmissionUV:0,ambientOcclussionUV:1,normalUV:0,heightUV:0}}return $traceurRuntime.createClass(e,{updateFromLegacyMaterial:function(t,e){e.texture&&this.diffuse!=e.texture&&(this.diffuse=e.texture),this.diffuseScale=e.textureScale,this.normalScale=e.normalMapScale,e.normalMap!=this.normal&&(this.normal=e.normalMap),e.roughnessMask&&e.roughnessMask!=this.roughness&&(this.roughness=e.roughnessMask),e.roughnessMask||this.roughness==e.shininessMask||(this.roughness=e.shininessMask),e.reflectionMask!=this.metallic&&(this.metallic=e.reflectionMask)},clone:function(){var t=new e;return t.assign(this),t},assign:function(t){this.diffuse=t.diffuse,this.isTransparent=t.isTransparent,this.alphaCutoff=t.alphaCutoff,this.diffuseScale=t.diffuseScale,this.metallic=t.metallic,this.metallicChannel=t.metallicChannel,this.metallicScale=t.metallicScale,this.roughness=t.roughness,this.roughnessChannel=t.roughnessChannel,this.roughnessScale=t.roughnessScale,this.fresnel=t.fresnel,this.fresnelScale=t.fresnelScale,this.lightEmission=t.lightEmission,this.lightEmissionChannel=t.lightEmissionChannel,this.lightEmissionScale=t.lightEmissionScale,this.ambientOcclussion=t.ambientOcclussion,this.ambientOcclussionChannel=t.ambientOcclussionChannel,this.height=t.height,this.heightChannel=t.heightChannel,this.heightScale=t.heightScale,this.heightIntensity=t.heightIntensity,this.normal=t.normal,this.normalScale=t.normalScale,this.castShadows=t.castShadows,this.cullFace=t.cullFace,this.unlit=t.unlit,this.diffuseUV=t.diffuseUV,this.metallicUV=t.metallicUV,this.roughnessUV=t.roughnessUV,this.fresnelUV=t.fresnelUV,this.lightEmissionUV=t.lightEmissionUV,this.ambientOcclussionUV=t.ambientOcclussionUV,this.normalUV=t.normalUV,this.heightUV=t.heightUV},destroy:function(){s.apply(this,["diffuse"]),s.apply(this,["metallic"]),s.apply(this,["roughness"]),s.apply(this,["fresnel"]),s.apply(this,["ambientOcclussion"]),s.apply(this,["lightEmission"]),s.apply(this,["normal"]),s.apply(this,["height"])},getShaderParameters:function(t){var e=this,n=function(n){e._shaderParameters[n].map||(e._shaderParameters[n].release=!0,e._shaderParameters[n].map=function(t,e){var n=null,i=Number(e);if(isNaN(i)?e instanceof bg.Vector3?n=new bg.Vector4(e.x,e.y,e.z,0):e instanceof bg.Vector2?n=new bg.Vector4(e.x,e.y,0,0):e instanceof bg.Vector4?n=e:void 0===e&&(n=new bg.Vector4(0,0,0,0)):n=new bg.Vector4(i,i,i,i),n)return bg.base.Texture.ColorTexture(t,n,{width:1,height:1});throw new Error("PBRMaterial invalid material parameter specified.")}.apply(e,[t,e[n]]))};return n("diffuse"),n("metallic"),n("roughness"),n("fresnel"),n("ambientOcclussion"),n("lightEmission"),n("normal"),n("height"),(this._texturesToMerge>0||null==this._shaderParameters.heightMetallicRoughnessAO.map)&&function(t){var e={map:this._shaderParameters.height.map,channel:this._heightChannel},n={map:this._shaderParameters.metallic.map,channel:this._metallicChannel},i={map:this._shaderParameters.roughness.map,channel:this._roughnessChannel},r={map:this._shaderParameters.ambientOcclussion.map,channel:this._ambientOcclussionChannel};this._merger||(this._merger=new bg.tools.TextureMerger(t));var a=this._merger.mergeMaps(e,n,i,r);this._shaderParameters.heightMetallicRoughnessAO.map=a,this._texturesToMerge>0&&this._texturesToMerge--}.apply(this,[t]),this._shaderParameters},get diffuse(){return this._diffuse},get metallic(){return this._metallic},get metallicChannel(){return this._metallicChannel},get roughness(){return this._roughness},get roughnessChannel(){return this._roughnessChannel},get fresnel(){return this._fresnel},get ambientOcclussion(){return this._ambientOcclussion},get ambientOcclussionChannel(){return this._ambientOcclussionChannel},get lightEmission(){return this._lightEmission},get lightEmissionChannel(){return this._lightEmissionChannel},get normal(){return this._normal},get height(){return this._height},get heightChannel(){return this._heightChannel},set diffuse(t){s.apply(this,["diffuse"]),this._shaderParameters.diffuse.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.diffuse.release=null==this._shaderParameters.diffuse.map,this._diffuse=t},set metallic(t){this._metallic!=t&&(s.apply(this,["metallic"]),this._shaderParameters.metallic.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.metallic.release=null==this._shaderParameters.metallic.map,this._metallic=t,(0==this._texturesToMerge||t instanceof bg.base.Texture)&&this._texturesToMerge++)},set metallicChannel(t){this._metallicChannel=t},set roughness(t){this._roughness!=t&&(s.apply(this,["roughness"]),this._shaderParameters.roughness.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.roughness.release=null==this._shaderParameters.roughness.map,this._roughness=t,(0==this._texturesToMerge||t instanceof bg.base.Texture)&&this._texturesToMerge++)},set roughnessChannel(t){this._roughnessChannel=t},set fresnel(t){s.apply(this,["fresnel"]),this._shaderParameters.fresnel.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.fresnel.release=null==this._shaderParameters.fresnel.map,this._fresnel=t},set ambientOcclussion(t){this._ambientOcclussion!=t&&(s.apply(this,["ambientOcclussion"]),this._shaderParameters.ambientOcclussion.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.ambientOcclussion.release=null==this._shaderParameters.ambientOcclussion.map,this._ambientOcclussion=t,(0==this._texturesToMerge||t instanceof bg.base.Texture)&&this._texturesToMerge++)},set ambientOcclussionChannel(t){this._ambientOcclussionChannel=t},set height(t){this._height!=t&&(s.apply(this,["height"]),this._shaderParameters.height.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.height.release=null==this._shaderParameters.height.map,this._height=t,(0==this._texturesToMerge||t instanceof bg.base.Texture)&&this._texturesToMerge++)},set heightChannel(t){this._heightChannel=t},set lightEmission(t){s.apply(this,["lightEmission"]),this._shaderParameters.lightEmission.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.lightEmission.release=null==this._shaderParameters.lightEmission.map,this._lightEmission=t},set lightEmissionChannel(t){this._lightEmissionChannel=t},set normal(t){s.apply(this,["normal"]),this._shaderParameters.normal.map=t instanceof bg.base.Texture?t:null,this._shaderParameters.normal.release=null==this._shaderParameters.normal.map,this._normal=t},get diffuseOffset(){return console.warn("diffuseOffset: deprecated parameter."),new bg.Vector2(0)},set diffuseOffset(t){console.warn("diffuseOffset: deprecated parameter.")},get normalOffset(){return console.warn("normalOffset: deprecated parameter."),new bg.Vector2(0)},set normalOffset(t){console.warn("normalOffset: deprecated parameter.")},get alphaCutoff(){return this._alphaCutoff},set alphaCutoff(t){this._alphaCutoff=t},get isTransparent(){return this._isTransparent},set isTransparent(t){this._isTransparent=t},get diffuseScale(){return this._shaderParameters.diffuseScale},set diffuseScale(t){this._shaderParameters.diffuseScale=t||new bg.Vector2(1,1)},get metallicScale(){return this._shaderParameters.metallicScale},set metallicScale(t){this._shaderParameters.metallicScale=t||new bg.Vector2(1,1)},get roughnessScale(){return this._shaderParameters.roughnessScale},set roughnessScale(t){this._shaderParameters.roughnessScale=t||new bg.Vector2(1,1)},get fresnelScale(){return this._shaderParameters.fresnelScale},set fresnelScale(t){this._shaderParameters.fresnelScale=t||new bg.Vector2(1,1)},get lightEmissionScale(){return this._shaderParameters.lightEmissionScale},set lightEmissionScale(t){this._shaderParameters.lightEmissionScale=t||new bg.Vector2(1,1)},get heightScale(){return this._shaderParameters.heightScale},set heightScale(t){this._shaderParameters.heightScale=t||new bg.Vector2(1,1)},get heightIntensity(){return this._heightIntensity},set heightIntensity(t){this._heightIntensity=t},get normalScale(){return this._shaderParameters.normalScale},set normalScale(t){this._shaderParameters.normalScale=t||new bg.Vector2(1,1)},get castShadows(){return this._castShadows},set castShadows(t){this._castShadows=t},get cullFace(){return this._cullFace},set cullFace(t){this._cullFace=t},get unlit(){return this._unlit},set unlit(t){this._unlit=t},get diffuseUV(){return this._shaderParameters.diffuseUV},set diffuseUV(t){this._shaderParameters.diffuseUV=t},get metallicUV(){return this._shaderParameters.metallicUV},set metallicUV(t){this._shaderParameters.metallicUV=t},get roughnessUV(){return this._shaderParameters.roughnessUV},set roughnessUV(t){this._shaderParameters.roughnessUV=t},get fresnelUV(){return this._shaderParameters.fresnelUV},set fresnelUV(t){this._shaderParameters.fresnelUV=t},get lightEmissionUV(){return this._shaderParameters.lightEmissionUV},set lightEmissionUV(t){this._shaderParameters.lightEmissionUV=t},get ambientOcclussionUV(){return this._shaderParameters.ambientOcclussionUV},set ambientOcclussionUV(t){this._shaderParameters.ambientOcclussionUV=t},get normalUV(){return this._shaderParameters.normalUV},set normalUV(t){this._shaderParameters.normalUV=t},get heightUV(){return this._shaderParameters.heightUV},set heightUV(t){this._shaderParameters.heightUV=t},getExternalResources:function(){var t=void 0!==arguments[0]?arguments[0]:[];function e(e){e instanceof bg.base.Texture&&e.fileName&&""!=e.fileName&&-1==t.indexOf(e.fileName)&&t.push(e.fileName)}return e(this.diffuse),e(this.metallic),e(this.roughness),e(this.fresnel),e(this.lightEmission),e(this.ambientOcclussion),e(this.height),e(this.normal),t},copyMaterialSettings:function(t,n){t instanceof e?(n&bg.base.PBRMaterialFlag.DIFFUSE&&(t.diffuse=this.diffuse,t.alphaCutoff=this.alphaCutoff,t.isTransparent=this.isTransparent,t.diffuseScale=this.diffuseScale),n&bg.base.PBRMaterialFlag.METALLIC&&(t.metallic=this.metallic,t.metallicChannel=this.metallicChannel,t.metallicScale=this.metallicScale),n&bg.base.PBRMaterialFlag.ROUGHNESS&&(t.roughness=this.roughness,t.roughnessChannel=this.roughnessChannel,t.roughnessScale=this.roughnessScale),n&bg.base.PBRMaterialFlag.FRESNEL&&(t.fresnel=this.fresnel,t.fresnelScale=this.fresnelScale),n&bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION&&(t.ambientOcclussion=this.ambientOcclussion,t.ambientOcclussionChannel=this.ambientOcclussionChannel),n&bg.base.PBRMaterialFlag.LIGHT_EMISSION&&(t.lightEmission=this.lightEmission,t.lightEmissionChannel=this.lightEmissionChannel,t.lightEmissionScale=this.lightEmissionScale),n&bg.base.PBRMaterialFlag.HEIGHT&&(t.height=this.height,t.heightChannel=this.heightChannel,t.heightScale=this.heightScale,t.heightIntensity=this.heightIntensity),n&bg.base.PBRMaterialFlag.NORMAL&&(t.normal=this.normal,t.normalScale=this.normalScale),bg.base.PBRMaterialFlag.LIGHT_MAP,n&bg.base.PBRMaterialFlag.SHADOWS&&(t.castShadows=this.castShadows),n&bg.base.PBRMaterialFlag.CULL_FACE&&(t.cullFace=this.cullFace),n&bg.base.PBRMaterialFlag.UNLIT&&(t.unlit=this.unlit)):console.warn("Could not copy material: the target is not a PBR material")},applyModifier:function(t,e,n){function i(e){bg.base.imageTools.isAbsolutePath(e)||(e=bg.base.imageTools.mergePath(n,e));var i,r,a=bg.base.TextureCache.Get(t).find(e);return a||((a=new bg.base.Texture(t)).create(),a.fileName=e,bg.base.TextureCache.Get(t).register(e,a),i=e,r=a,bg.utils.Resource.Load(i).then(function(t){r.bind(),r.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),r.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter(),r.fileName=i,r.setImage(t)})),a}function r(t){if("string"==typeof t&&""!==t)return i(t);if(isNaN(t))throw new Error("Invalid parameter: expecting texture path or scalar");return t}function a(t){if("string"==typeof t&&""!==t)return i(t);if(t instanceof bg.Color)return t;if(Array.isArray(t)&&4==t.length)return new bg.Color(t);throw new Error("Invalid parameter: expecting texture path or color")}e instanceof bg.base.MaterialModifier&&(console.warn("MaterialModifier applied to PBRMaterial. Performing automatic converstion to PBRMaterialModifier."),e=bg.base.PBRMaterialModifier.ConvertToPBR(e)),e.isEnabled(bg.base.PBRMaterialFlag.SHADOWS)&&(this.castShadows=e.castShadows),e.isEnabled(bg.base.PBRMaterialFlag.CULL_FACE)&&(this.cullFace=e.cullFace),e.isEnabled(bg.base.PBRMaterialFlag.UNLIT)&&(this.unlit=e.unlit),e.isEnabled(bg.base.PBRMaterialFlag.DIFFUSE)&&(this.diffuse=a(e.diffuse),this.isTransparent=e.isTransparent,this.alphaCutoff=e.alphaCutoff,this.diffuseScale=e.diffuseScale),e.isEnabled(bg.base.PBRMaterialFlag.METALLIC)&&(this.metallic=r(e.metallic),this.metallicChannel=e.metallicChannel,this.metallicScale=e.metallicScale),e.isEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)&&(this.roughness=r(e.roughness),this.roughnessChannel=e.roughnessChannel,this.roughnessScale=e.roughnessScale),e.isEnabled(bg.base.PBRMaterialFlag.FRESNEL)&&(this.fresnel=a(e.fresnel),this.fresnelScale=e.fresnelScale),e.isEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION)&&(this.ambientOcclussion=r(e.ambientOcclussion),this.ambientOcclussionChannel=e.ambientOcclussionChannel),e.isEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)&&(this.lightEmission=r(e.lightEmission),this.lightEmissionChannel=e.lightEmissionChannel,this.lightEmissionScale=e.lightEmissionScale),e.isEnabled(bg.base.PBRMaterialFlag.HEIGHT)&&(this.height=r(e.height),this.heightChannel=e.heightChannel,this.heightScale=e.heightScale,this.heightIntensity=e.heightIntensity),e.isEnabled(bg.base.PBRMaterialFlag.NORMAL)&&(this.normal=a(e.normal),this.normalScale=e.normalScale),e.isEnabled(bg.base.PBRMaterialFlag.LIGHT_MAP)},getModifierWithMask:function(t){var e=new a;function n(t){var e=this[t];return e instanceof bg.base.Texture?e.fileName:e}function i(t){var e=this[t];return e instanceof bg.base.Texture?e.fileName:e}return e.modifierMask=t,e.isEnabled(bg.base.PBRMaterialFlag.DIFFUSE)&&(e.diffuse=n.apply(this,["diffuse"]),e.isTransparent=this.isTransparent,e.alphaCutoff=this.alphaCutoff,e.diffuseScale=this.diffuseScale),e.isEnabled(bg.base.PBRMaterialFlag.METALLIC)&&(e.metallic=i.apply(this,["metallic"]),e.metallicChannel=this.metallicChannel,e.metallicScale=this.metallicScale),e.isEnabled(bg.base.PBRMaterialFlag.ROUGHNESS)&&(e.roughness=i.apply(this,["roughness"]),e.roughnessChannel=this.roughnessChannel,e.roughnessScale=this.roughnessScale),e.isEnabled(bg.base.PBRMaterialFlag.FRESNEL)&&(e.fresnel=n.apply(this,["fresnel"]),e.fresnelScale=this.fresnelScale),e.isEnabled(bg.base.PBRMaterialFlag.AMBIENT_OCCLUSSION)&&(e.ambientOcclussion=i.apply(this,["ambientOcclussion"]),e.ambientOcclussionChannel=this.ambientOcclussionChannel),e.isEnabled(bg.base.PBRMaterialFlag.LIGHT_EMISSION)&&(e.lightEmission=i.apply(this,["lightEmission"]),e.lightEmissionChannel=this.lightEmissionChannel,e.lightEmissionScale=this.lightEmissionScale),e.isEnabled(bg.base.PBRMaterialFlag.HEIGHT)&&(e.height=i.apply(this,["height"]),e.heightChannel=this.heightChannel,e.heightScale=this.heightScale,e.heightIntensity=this.heightIntensity),e.isEnabled(bg.base.PBRMaterialFlag.NORMAL)&&(e.normal=n.apply(this,["normal"]),e.normalScale=this.normalScale),e.isEnabled(bg.base.PBRMaterialFlag.LIGHT_MAP),e.isEnabled(bg.base.PBRMaterialFlag.SHADOWS)&&(e.castShadows=this.castShadows),e.isEnabled(bg.base.PBRMaterialFlag.CULL_FACE)&&(e.cullFace=this.cullFace),e.isEnabled(bg.base.PBRMaterialFlag.UNLIT)&&(e.unlit=this.unlit),e}},{ImportFromLegacyMaterial:function(t,e){var n=new bg.base.PBRMaterial;return n.diffuse=e.texture||e.diffuse,n.diffuseScale=e.textureScale,n.normalScale=e.normalMapScale,e.normalMap&&(n.normal=e.normalMap),e.roughnessMask&&(n.roughness=e.roughnessMask),!n.roughness&&e.shininessMask&&(n.roughness=e.shininessMask),e.reflectionMask&&(n.metallic=e.reflectionMask),n.castShadows=e.castShadows,n},FromMaterialDefinition:function(a,s){var u=void 0!==arguments[2]?arguments[2]:"",h=new e;h.diffuseScale=new bg.Vector2(Array.isArray(s.diffuseScale)?s.diffuseScale:[1,1]),h.metallicChannel=i(s.metallicChannel,0),h.metallicScale=new bg.Vector2(Array.isArray(s.metallicScale)?s.metallicScale:[1,1]),h.roughnessChannel=i(s.roughnessChannel,0),h.roughnessScale=new bg.Vector2(Array.isArray(s.roughnessScale)?s.roughnessScale:[1,1]),h.fresnelScale=new bg.Vector2(Array.isArray(s.fresnelScale)?s.fresnelScale:[1,1]),h.lightEmissionChannel=i(s.lightEmissionChannel,0),h.lightEmissionScale=new bg.Vector2(Array.isArray(s.lightEmissionScale)?s.lightEmissionScale:[1,1]),h.ambientOcclussionChannel=i(s.ambientOcclussionChannel,0),h.heightChannel=i(s.heightChannel,0),h.heightScale=new bg.Vector2(Array.isArray(s.heightScale)?s.heightScale:[1,1]),h.heightIntensity=i(s.heightIntensity,1),h.normalScale=new bg.Vector2(Array.isArray(s.normalScale)?s.normalScale:[1,1]),h.isTransparent=s.isTransparent,h.alphaCutoff=i(s.alphaCutoff,.5),h.castShadows=r(s.castShadows,!0),h.cullFace=r(s.cullFace,!0),h.diffuseUV=i(s.diffuseUV,0),h.metallicUV=i(s.metallicUV,0),h.roughnessUV=i(s.roughnessUV,0),h.fresnelUV=i(s.fresnelUV,0),h.lightEmissionUV=i(s.lightEmissionUV,0),h.ambientOcclussionUV=i(s.ambientOcclussionUV,1),h.normalUV=i(s.normalUV,0),h.heightUV=i(s.heightUV,0),h.unlit=void 0!==s.unlit&&s.unlit;var l=[o.apply(h,[a,"diffuse",t(s.diffuse,bg.Color.White()),u]),o.apply(h,[a,"metallic",n(s.metallic),u]),o.apply(h,[a,"roughness",n(s.roughness),u]),o.apply(h,[a,"fresnel",t(s.fresnel,bg.Color.White()),u]),o.apply(h,[a,"lightEmission",n(s.lightEmission),u]),o.apply(h,[a,"height",n(s.height),u]),o.apply(h,[a,"normal",t(s.normal,new bg.Color(.5,.5,1,1)),u]),o.apply(h,[a,"ambientOcclussion",n(s.ambientOcclussion),u])];return new Promise(function(t,e){Promise.all(l).then(function(e){h.getShaderParameters(a),t(h)}).catch(function(e){console.warn(e.message),h.getShaderParameters(a),t(h)})})},Defaults:function(t){var e=bg.base.TextureCache,n=e.WhiteTexture(t),i=e.BlackTexture(t);return{diffuse:{map:n},metallic:{map:i,channel:0},roughness:{map:n,channel:0},fresnel:{map:n},lightEmission:{map:i,channel:0},normal:{map:e.NormalTexture(t)},ambientOcclussion:{map:n,channel:0},height:{map:i,channel:0}}},GetMaterialWithJson:function(t,n,i){return e.FromMaterialDefinition(t,n,i)}})}();bg.base.PBRMaterial=u}(),function(){bg.base.ClearBuffers={COLOR:null,DEPTH:null,COLOR_DEPTH:null},bg.base.BlendMode={NORMAL:1,MULTIPLY:2,ADD:3,SUBTRACT:4,ALPHA_ADD:5,ALPHA_SUBTRACT:6},bg.base.OpacityLayer={TRANSPARENT:1,OPAQUE:2,GIZMOS:4,SELECTION:8,GIZMOS_SELECTION:16,ALL:15,NONE:0};var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t),bg.base.ClearBuffers.COLOR_DEPTH=bg.base.ClearBuffers.COLOR|bg.base.ClearBuffers.DEPTH},{initFlags:function(t){},setViewport:function(t,e){},clearBuffers:function(t,e,n){},setDepthTestEnabled:function(t,e){},setBlendEnabled:function(t,e){},setBlendMode:function(t,e){},setCullFace:function(t,e){}},{})}();bg.base.PipelineImpl=t;var e=null;var n=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._opacityLayer=bg.base.OpacityLayer.ALL,this._viewport=new bg.Viewport(0,0,200,200),this._clearColor=bg.Color.Black(),this._effect=null,this._textureEffect=null,this._depthTest=!0,this._cullFace=!0,this._renderSurface=null,this._blend=!1,this._blendMode=bg.base.BlendMode.NORMAL,this._buffersToClear=bg.base.ClearBuffers.COLOR_DEPTH},{get isCurrent(){return e==this},set opacityLayer(t){this._opacityLayer=t},get opacityLayer(){return this._opacityLayer},shouldDraw:function(t){return t&&(t.isTransparent&&0!=(this._opacityLayer&bg.base.OpacityLayer.TRANSPARENT)||!t.isTransparent&&0!=(this._opacityLayer&bg.base.OpacityLayer.OPAQUE))},get effect(){return this._effect},set effect(t){this._effect=t,this._effect&&this.isCurrent&&this._effect.setActive()},get textureEffect(){return this._textureEffect||(this._textureEffect=new bg.base.DrawTextureEffect(this.context)),this._textureEffect},set textureEffect(t){this._textureEffect=t},set buffersToClear(t){this._buffersToClear=t},get buffersToClear(){return this._buffersToClear},get renderSurface(){return this._renderSurface||(this._renderSurface=new bg.base.ColorSurface(this.context),this._renderSurface.setActive()),this._renderSurface},set renderSurface(t){this._renderSurface=t,this.isCurrent&&this._renderSurface.setActive()},draw:function(t){if(this._effect&&t&&this.isCurrent){var e=this.cullFace;this._effect.bindPolyList(t),this._effect.material&&(this.cullFace=this._effect.material.cullFace),t.draw(),this._effect.unbind(),this.cullFace=e}},drawTexture:function(t){var e=this.depthTest;this.depthTest=!1,this.textureEffect.drawSurface(t),this.depthTest=e},get blend(){return this._blend},set blend(t){this._blend=t,this.isCurrent&&bg.Engine.Get().pipeline.setBlendEnabled(this.context,this._blend)},get blendMode(){return this._blendMode},set blendMode(t){this._blendMode=t,this.isCurrent&&bg.Engine.Get().pipeline.setBlendMode(this.context,this._blendMode)},get viewport(){return this._viewport},set viewport(t){this._viewport=t,this.renderSurface.resizeOnViewportChanged&&(this.renderSurface.size=new bg.Vector2(t.width,t.height)),this.isCurrent&&bg.Engine.Get().pipeline.setViewport(this.context,this._viewport)},clearBuffers:function(t){this.isCurrent&&(t=void 0!==t?t:this._buffersToClear,bg.Engine.Get().pipeline.clearBuffers(this.context,this._clearColor,t))},get clearColor(){return this._clearColor},set clearColor(t){this._clearColor=t},get depthTest(){return this._depthTest},set depthTest(t){this._depthTest=t,this.isCurrent&&bg.Engine.Get().pipeline.setDepthTestEnabled(this.context,this._depthTest)},get cullFace(){return this._cullFace},set cullFace(t){this._cullFace=t,this.isCurrent&&bg.Engine.Get().pipeline.setCullFace(this.context,this._cullFace)}},{SetCurrent:function(t){var n;(e=t)&&((n=e)._effect&&n._effect.setActive(),n.renderSurface.setActive(),bg.Engine.Get().pipeline.setViewport(n.context,n._viewport),bg.Engine.Get().pipeline.setDepthTestEnabled(n.context,n._depthTest),bg.Engine.Get().pipeline.setCullFace(n.context,n._cullFace),bg.Engine.Get().pipeline.setBlendEnabled(n.context,n._blend),bg.Engine.Get().pipeline.setBlendMode(n.context,n._blendMode))},Current:function(){return e}},t)}(bg.app.ContextObject);bg.base.Pipeline=n}(),function(){bg.base.BufferType={VERTEX:1,NORMAL:2,TEX_COORD_0:4,TEX_COORD_1:8,TEX_COORD_2:16,COLOR:32,TANGENT:64,INDEX:128};var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t)},{initFlags:function(t){},create:function(t){},build:function(t,e,n,i,r,a,s,o,u,h){return!1},draw:function(t,e,n,i){},destroy:function(t,e){},update:function(t,e,n,i){}},{})}();bg.base.PolyListImpl=t,bg.base.DrawMode={TRIANGLES:null,TRIANGLE_FAN:null,TRIANGLE_STRIP:null,LINES:null,LINE_STRIP:null};var e=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._plist=null,this._drawMode=bg.base.DrawMode.TRIANGLES,this._name="",this._groupName="",this._visible=!0,this._visibleToShadows=!0,this._vertex=[],this._normal=[],this._texCoord0=[],this._texCoord1=[],this._texCoord2=[],this._color=[],this._tangent=[],this._index=[]}return $traceurRuntime.createClass(e,{clone:function(){var t=new e(this.context),n=function(t,e){t.forEach(function(t){e.push(t)})};return t.name=this.name+" clone",t.groupName=this.groupName,t.visible=this.visible,t.visibleToShadows=this.visibleToShadows,t.drawMode=this.drawMode,n(this.vertex,t.vertex),n(this.normal,t.normal),n(this.texCoord0,t.texCoord0),n(this.texCoord1,t.texCoord1),n(this.texCoord2,t.texCoord02),n(this.color,t.color),n(this.index,t.index),t.build(),t},get name(){return this._name},set name(t){this._name=t},get groupName(){return this._groupName},set groupName(t){this._groupName=t},get visible(){return this._visible},set visible(t){this._visible=t},get visibleToShadows(){return this._visibleToShadows},set visibleToShadows(t){this._visibleToShadows=t},get drawMode(){return this._drawMode},set drawMode(t){this._drawMode=t},set vertex(t){this._vertex=t},set normal(t){this._normal=t},set texCoord0(t){this._texCoord0=t},set texCoord1(t){this._texCoord1=t},set texCoord2(t){this._texCoord2=t},set color(t){this._color=t},set tangent(t){this._tangent=t},set index(t){this._index=t},get vertex(){return this._vertex},get normal(){return this._normal},get texCoord0(){return this._texCoord0},get texCoord1(){return this._texCoord1},get texCoord2(){return this._texCoord2},get color(){return this._color},get tangent(){return this._tangent},get index(){return this._index},get vertexBuffer(){return this._plist.vertexBuffer},get normalBuffer(){return this._plist.normalBuffer},get texCoord0Buffer(){return this._plist.tex0Buffer},get texCoord1Buffer(){return this._plist.tex1Buffer},get texCoord2Buffer(){return this._plist.tex2Buffer},get colorBuffer(){return this._plist.colorBuffer},get tangentBuffer(){return this._plist.tangentBuffer},get indexBuffer(){return this._plist.indexBuffer},updateBuffer:function(t,e){var n=!1;switch(t){case bg.base.BufferType.VERTEX:n=this.vertex.length==e.length;break;case bg.base.BufferType.NORMAL:n=this.normal.length==e.length;break;case bg.base.BufferType.TEX_COORD_0:n=this.texCoord0.length==e.length;break;case bg.base.BufferType.TEX_COORD_1:n=this.texCoord1.length==e.length;break;case bg.base.BufferType.TEX_COORD_2:n=this.texCoord2.length==e.length;break;case bg.base.BufferType.COLOR:n=this.color.length==e.length;break;case bg.base.BufferType.TANGENT:n=this.tangent.length==e.length;break;case bg.base.BufferType.INDEX:n=this.index.length==e.length}if(!n)throw new Error("Error updating buffer: The new buffer have different size as the old one.");bg.Engine.Get().polyList.update(this.context,this._plist,t,e)},build:function(){var t=void 0===arguments[0]||arguments[0];if(0==this.color.length)for(var e=0;e<this.vertex.length;e+=3)this.color.push(1),this.color.push(1),this.color.push(1),this.color.push(1);var n=bg.Engine.Get().polyList;return this._plist&&(n.destroy(this.context,this._plist),this._tangent=[]),!t&&this._tangent&&0!=this._tangent.length||(this._tangent=function(t){if(t.texCoord0&&t.vertex){t._tangent=[];var e=[],n={},i=!1;if(t.index.length%3==0)for(var r=0;r<t.index.length;r+=3){var a=3*t.index[r],s=3*t.index[r+1],o=3*t.index[r+2],u=2*t.index[r],h=2*t.index[r+1],l=2*t.index[r+2],c=new bg.Vector3(t.vertex[a],t.vertex[a+1],t.vertex[a+2]),f=new bg.Vector3(t.vertex[s],t.vertex[s+1],t.vertex[s+2]),v=new bg.Vector3(t.vertex[o],t.vertex[o+1],t.vertex[o+2]),g=new bg.Vector2(t.texCoord0[u],t.texCoord0[u+1]),m=new bg.Vector2(t.texCoord0[h],t.texCoord0[h+1]),d=new bg.Vector2(t.texCoord0[l],t.texCoord0[l+1]),p=new bg.Vector3(f).sub(c),b=new bg.Vector3(v).sub(c),x=m.x-g.x,_=m.y-g.y,M=d.x-g.x,T=d.y-g.y,w=x*T-M*_,S=null;if(0==w){var y=new bg.Vector3(t.normal[a],t.normal[a+1],t.normal[a+2]);i=!0,S=new bg.Vector3(y.y,y.z,y.x)}else{var E=1/w;(S=new bg.Vector3(E*(T*p.x-_*b.x),E*(T*p.y-_*b.y),E*(T*p.z-_*b.z))).normalize()}void 0===n[a]&&(e.push(S.x),e.push(S.y),e.push(S.z),n[a]=S),void 0===n[s]&&(e.push(S.x),e.push(S.y),e.push(S.z),n[s]=S),void 0===n[o]&&(e.push(S.x),e.push(S.y),e.push(S.z),n[o]=S)}else for(var P=0;P<t.vertex.length;P+=3)t._tangent.push(0,0,1);return i&&console.warn("Invalid UV texture coords found. Some objects may present artifacts in the lighting, and not display textures properly."),e}}(this)),this._plist=n.create(this.context),n.build(this.context,this._plist,this._vertex,this._normal,this._texCoord0,this._texCoord1,this._texCoord2,this._color,this._tangent,this._index)},draw:function(){bg.Engine.Get().polyList.draw(this.context,this._plist,this.drawMode,this.index.length)},destroy:function(){this._plist&&bg.Engine.Get().polyList.destroy(this.context,this._plist),this._plist=null,this._name="",this._vertex=[],this._normal=[],this._texCoord0=[],this._texCoord1=[],this._texCoord2=[],this._color=[],this._tangent=[],this._index=[]},applyTransform:function(t){var e=new bg.Matrix4(t),n=new bg.Matrix4(t.getMatrix3());if(this.normal.length>0&&this.normal.length!=this.vertex.length)throw new Error("Unexpected number of normal coordinates found in polyList");for(var i=0;i<this.vertex.length-2;i+=3){var r=new bg.Vector4(this.vertex[i],this.vertex[i+1],this.vertex[i+2],1);if(r=e.multVector(r),this.vertex[i]=r.x,this.vertex[i+1]=r.y,this.vertex[i+2]=r.z,this.normal.length){var a=new bg.Vector4(this.normal[i],this.normal[i+1],this.normal[i+2],1);a=n.multVector(a),this.normal[i]=a.x,this.normal[i+1]=a.y,this.normal[i+2]=a.z}}this.build()}},{},t)}(bg.app.ContextObject);bg.base.PolyList=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=null,n=null;var i=function(i){return $traceurRuntime.createClass(function i(r){$traceurRuntime.superConstructor(i).call(this,r);var a=[(e||((e=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([t().inputs.buffers.vertex]),e.addParameter(t().inputs.matrix.all),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n\t\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t")),e),(n||(n=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n\t\t\t\t\tgl_FragColor = vec4(1.0,0.0,0.0,1.0);\n\t\t\t\t")),n)];this.setupShaderSource(a)},{beginDraw:function(){},setupVars:function(){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst)}},{},i)}(bg.base.Effect);bg.base.RedEffect=i}(),function(){var t=function(){return $traceurRuntime.createClass(function(){this._opaqueQueue=[],this._transparentQueue=[],this._worldCameraPosition=new bg.Vector3(0)},{beginFrame:function(t){this._opaqueQueue=[],this._transparentQueue=[],this._worldCameraPosition.assign(t)},renderOpaque:function(t,e,n,i){this._opaqueQueue.push({plist:t,material:e,modelMatrix:new bg.Matrix4(n),viewMatrix:new bg.Matrix4(i)})},renderTransparent:function(t,e,n,i){var r=n.position;r.sub(this._worldCameraPosition),this._transparentQueue.push({plist:t,material:e,modelMatrix:new bg.Matrix4(n),viewMatrix:new bg.Matrix4(i),cameraDistance:r.magnitude()})},sortTransparentObjects:function(){this._transparentQueue.sort(function(t,e){return t.cameraDistance<e.cameraDistance})},get opaqueQueue(){return this._opaqueQueue},get transparentQueue(){return this._transparentQueue}},{})}();bg.base.RenderQueue=t}(),function(){var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t)},{initFlags:function(t){},create:function(t,e){},setActive:function(t,e){},readBuffer:function(t,e,n){},resize:function(t,e,n){},destroy:function(t,e){},supportType:function(t){},supportFormat:function(t){},maxColorAttachments:function(){}},{})}();bg.base.RenderSurfaceBufferImpl=t;var e=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._size=new bg.Vector2(256),this._renderSurface=null,this._resizeOnViewportChanged=!0}return $traceurRuntime.createClass(e,{get size(){return this._size},set size(t){this._size.x==t.x&&this._size.y==t.y||(this._size=t,this.surfaceImpl.resize(this.context,this._renderSurface,t))},get surfaceImpl(){return null},get resizeOnViewportChanged(){return this._resizeOnViewportChanged},set resizeOnViewportChanged(t){this._resizeOnViewportChanged=t},create:function(t){t||(t=e.DefaultAttachments()),this._renderSurface=this.surfaceImpl.create(this.context,t)},setActive:function(){this.surfaceImpl.setActive(this.context,this._renderSurface)},readBuffer:function(t){return this.surfaceImpl.readBuffer(this.context,this._renderSurface,t,this.size)},destroy:function(){this.surfaceImpl.destroy(this.context,this._renderSurface),this._renderSurface=null}},{DefaultAttachments:function(){return[{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]},SupportFormat:function(t){return bg.Engine.Get().colorBuffer.supportFormat(t)},SupportType:function(t){return bg.Engine.Get().colorBuffer.supportType(t)},MaxColorAttachments:function(){return bg.Engine.Get().textureBuffer.maxColorAttachments}},t)}(bg.app.ContextObject);bg.base.RenderSurface=e,bg.base.RenderSurfaceType={RGBA:null,DEPTH:null},bg.base.RenderSurfaceFormat={UNSIGNED_BYTE:null,UNSIGNED_SHORT:null,FLOAT:null,RENDERBUFFER:null};var n=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{get surfaceImpl(){return bg.Engine.Get().colorBuffer}},{MaxColorAttachments:function(){return bg.Engine.Get().colorBuffer.maxColorAttachments}},t)}(e);bg.base.ColorSurface=n;var i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{get surfaceImpl(){return bg.Engine.Get().textureBuffer},getTexture:function(){var t=void 0!==arguments[0]?arguments[0]:0;return this._renderSurface.attachments[t]&&this._renderSurface.attachments[t].texture}},{MaxColorAttachments:function(){return bg.Engine.Get().textureBuffer.maxColorAttachments}},t)}(e);bg.base.TextureSurface=i}(),function(){if(!bg.isElectronApp)return!1;var t=require("fs"),e=require("path"),n=function(){return $traceurRuntime.createClass(function(){},{save:function(n,i){var r=this;return n=bg.base.Writer.StandarizePath(n),new Promise(function(a,s){r._url={},r._url.path=n.split("/"),r._url.fileName=r._url.path.pop(),r._url.path=r._url.path.join("/"),r._sceneData={fileType:"vwgl::scene",version:{major:2,minor:0,rev:0},scene:[]},r._promises=[],bg.base.Writer.PrepareDirectory(r._url.path);var o={};r._sceneData.scene.push(o),r.buildSceneNode(i,o),t.writeFileSync(e.join(r._url.path,r._url.fileName),JSON.stringify(r._sceneData,"","\t"),"utf-8"),Promise.all(r._promises).then(function(){return a()}).catch(function(t){return s(t)})})},buildSceneNode:function(t,e){var n=this;e.type="Node",e.name=t.name,e.enabled=t.enabled,e.steady=t.steady,e.children=[],e.components=[],t.forEachComponent(function(t){if(t.shouldSerialize){var i={};t.serialize(i,n._promises,n._url),e.components.push(i)}}),t.children.forEach(function(t){var i={};n.buildSceneNode(t,i),e.children.push(i)})}},{})}(),i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){var n=t.split(".").pop(".");return/vitscnj/i.test(n)&&e instanceof bg.scene.Node},write:function(t,e){return(new n).save(t,e)}},{},t)}(bg.base.WriterPlugin);bg.base.SceneWriterPlugin=i}(),function(){var t=null;function e(t){Reflect.defineProperty(t,"all",{get:function(){if(!this._all)for(var e in this._all=[],t)"object"==$traceurRuntime.typeof(t[e])&&t[e].name&&this._all.push(t[e]);return this._all}})}var n=function(){function n(){var t=bg[bg.Engine.Get().id].shaderLibrary;for(var n in t)this[n]=t[n];for(var i in e(this.inputs.matrix),Object.defineProperty(this.inputs.matrix,"modelViewProjection",{get:function(){return[this.model,this.view,this.projection]}}),e(this.inputs.material),e(this.inputs.lighting),e(this.inputs.lightingForward),e(this.inputs.shadows),e(this.inputs.colorCorrection),e(this.functions.materials),e(this.functions.colorCorrection),e(this.functions.lighting),e(this.functions.utils),this.inputs.pbr)e(this.inputs.pbr[i]);for(var r in this.functions.pbr)e(this.functions.pbr[r])}return $traceurRuntime.createClass(n,{},{Get:function(){return t||(t=new n),t}})}();bg.base.ShaderLibrary=n;var i=function(){return $traceurRuntime.createClass(function(){},{header:function(t){return""},parameter:function(t,e){return e.name},func:function(t,e){return e.name}},{})}();bg.base.ShaderSourceImpl=i;var r=function(){return $traceurRuntime.createClass(function(t){this._type=t,this._params=[],this._functions=[],this._requiredExtensions=[],this._header="",this._preprocessor=""},{get type(){return this._type},get params(){return this._params},get header(){return this._header},get functions(){return this._functions},addParameter:function(t){t instanceof Array?this._params=$traceurRuntime.spread(this._params,t):this._params.push(t),this._params.push(null)},addFunction:function(t){t instanceof Array?this._functions=$traceurRuntime.spread(this._functions,t):this._functions.push(t)},setMainBody:function(t){this.addFunction({returnType:"void",name:"main",params:{},body:t})},appendHeader:function(t){this._header+=t+"\n"},appendPreprocessor:function(t){this._preprocessor+=t+"\n"},toString:function(){var t=this,e=bg.Engine.Get().shaderSource,n=this._preprocessor;return n+=e.header(this.type)+"\n"+this._header+"\n\n",this.params.forEach(function(i){n+=e.parameter(t.type,i)+"\n"}),this.functions.forEach(function(i){n+="\n"+e.func(t.type,i)+"\n"}),n}},{FormatSource:function(t){var e="",n=t.replace(/^\n*/,"").replace(/\n*$/,"").split("\n"),i=100;return n.forEach(function(t){var e=/(\t*)/.exec(t)[0].length;i>e&&(i=e)}),n.forEach(function(t){var n=/(\t*)/.exec(t)[0].length,r=n-i;e+=t.slice(n-r,t.length)+"\n"}),e.replace(/^\n*/,"").replace(/\n*$/,"")}})}();bg.base.ShaderSource=r}(),function(){var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t)},{initFlags:function(t){},setActive:function(t,e){},create:function(t){},addShaderSource:function(t,e,n,i){},link:function(t,e){},initVars:function(t,e,n,i){},setInputBuffer:function(t,e,n,i,r){},setValueInt:function(t,e,n,i){},setValueIntPtr:function(t,e,n,i){},setValueFloat:function(t,e,n,i){},setValueFloatPtr:function(t,e,n,i){},setValueVector2:function(t,e,n,i){},setValueVector3:function(t,e,n,i){},setValueVector4:function(t,e,n,i){},setValueVector2v:function(t,e,n,i){},setValueVector3v:function(t,e,n,i){},setValueVector4v:function(t,e,n,i){},setValueMatrix3:function(t,e,n,i,r){},setValueMatrix4:function(t,e,n,i,r){},setTexture:function(t,e,n,i,r){}},{})}();bg.base.ShaderImpl=t,bg.base.ShaderType={VERTEX:null,FRAGMENT:null};var e=null,n=function(t){function n(t){$traceurRuntime.superConstructor(n).call(this,t),this._shader=bg.Engine.Get().shader.create(t),this._linked=!1,this._compileError=null,this._linkError=null}return $traceurRuntime.createClass(n,{get shader(){return this._shader},get compileError(){return this._compileError},get compileErrorSource(){return this._compileErrorSource},get linkError(){return this._linkError},get status(){return null==this._compileError&&null==this._linkError},addShaderSource:function(t,e){var n;return this._linked?this._compileError="Tying to attach a shader to a linked program":this._compileError||(this._compileError=bg.Engine.Get().shader.addShaderSource(this.context,this._shader,t,e),this._compileError&&(this._compileErrorSource=(n="",e.split("\n").forEach(function(t,e){n+=(++e<10?"00":e<100?"0":"")+e+" | "+t+"\n"}),n))),null==this._compileError},link:function(){return this._linkError=null,this._linked?this._linkError="Shader already linked":(this._linkError=bg.Engine.Get().shader.link(this.context,this._shader),this._linked=null==this._linkError),this._linked},setActive:function(){bg.Engine.Get().shader.setActive(this.context,this._shader),e=this},clearActive:function(){n.ClearActive(this.context),e=null},initVars:function(t,e){bg.Engine.Get().shader.initVars(this.context,this._shader,t,e)},setInputBuffer:function(t,e,n){bg.Engine.Get().shader.setInputBuffer(this.context,this._shader,t,e,n)},disableInputBuffer:function(t){bg.Engine.Get().shader.disableInputBuffer(this.context,this._shader,t)},setValueInt:function(t,e){bg.Engine.Get().shader.setValueInt(this.context,this._shader,t,e)},setValueIntPtr:function(t,e){bg.Engine.Get().shader.setValueIntPtr(this.context,this._shader,t,e)},setValueFloat:function(t,e){bg.Engine.Get().shader.setValueFloat(this.context,this._shader,t,e)},setValueFloatPtr:function(t,e){bg.Engine.Get().shader.setValueFloatPtr(this.context,this._shader,t,e)},setVector2:function(t,e){bg.Engine.Get().shader.setValueVector2(this.context,this._shader,t,e)},setVector3:function(t,e){bg.Engine.Get().shader.setValueVector3(this.context,this._shader,t,e)},setVector4:function(t,e){bg.Engine.Get().shader.setValueVector4(this.context,this._shader,t,e)},setVector2Ptr:function(t,e){bg.Engine.Get().shader.setValueVector2v(this.context,this._shader,t,e)},setVector3Ptr:function(t,e){bg.Engine.Get().shader.setValueVector3v(this.context,this._shader,t,e)},setVector4Ptr:function(t,e){bg.Engine.Get().shader.setValueVector4v(this.context,this._shader,t,e)},setMatrix3:function(t,e){var n=void 0!==arguments[2]&&arguments[2];bg.Engine.Get().shader.setValueMatrix3(this.context,this._shader,t,n,e)},setMatrix4:function(t,e){var n=void 0!==arguments[2]&&arguments[2];bg.Engine.Get().shader.setValueMatrix4(this.context,this._shader,t,n,e)},setTexture:function(t,e,n){bg.Engine.Get().shader.setTexture(this.context,this._shader,t,e,n)},destroy:function(){console.warn("TODO: Shader.destroy(): not implemented.")}},{ClearActive:function(t){bg.Engine.Get().shader.setActive(t,null)},GetActiveShader:function(){return e}},t)}(bg.app.ContextObject);bg.base.Shader=n}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=null,n=null;var i=function(i){return $traceurRuntime.createClass(function i(r){$traceurRuntime.superConstructor(i).call(this,r),this._material=null,this._light=null,this._lightTransform=null,this.setupShaderSource([(e||((e=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([t().inputs.buffers.vertex,t().inputs.buffers.tex0,null,t().inputs.matrix.model,t().inputs.matrix.view,t().inputs.matrix.projection,null,{name:"fsTexCoord",dataType:"vec2",role:"out"}]),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\tfsTexCoord = inTex0;\n\t\t\t\t")),e),(n||((n=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).addParameter([t().inputs.material.castShadows,t().inputs.material.texture,t().inputs.material.textureOffset,t().inputs.material.textureScale,t().inputs.material.alphaCutoff,null,{name:"fsTexCoord",dataType:"vec2",role:"in"}]),n.addFunction(t().functions.utils.pack),n.addFunction(t().functions.materials.samplerColor),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n\t\t\t\t\n\t\t\t\tfloat alpha = samplerColor(inTexture,fsTexCoord,inTextureOffset,inTextureScale).a;\n\t\t\t\tif (inCastShadows && alpha>inAlphaCutoff) {\n\t\t\t\t\tgl_FragColor = pack(gl_FragCoord.z);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdiscard;\n\t\t\t\t}")),n)]),this._offset=new bg.Vector2(0)},{get material(){return this._material},set material(t){this._material=t},get light(){return this._light},set light(t){this._light=t},get lightTransform(){return this._lightTransform},set lightTransform(t){this._lightTransform=t},setupVars:function(){if(this.material&&this.light&&this.lightTransform){var t=bg.base.MatrixState.Current();if(this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",this.lightTransform),this.shader.setMatrix4("inProjectionMatrix",this.light.projection),this.material instanceof bg.base.Material){this.shader.setValueInt("inCastShadows",this.material.castShadows);var e=this.material.texture||bg.base.TextureCache.WhiteTexture(this.context);this.shader.setTexture("inTexture",e,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.diffuseOffset||this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.diffuseScale||this.material.textureScale),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff)}else this.material instanceof bg.base.PBRMaterial&&(this.shader.setValueInt("inCastShadows",this.material.castShadows),this.shader.setTexture("inTexture",this.material.getShaderParameters(this.context).diffuse.map,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this._offset),this.shader.setVector2("inTextureScale",this.material.diffuseScale||this.material.textureScale),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff))}}},{},i)}(bg.base.Effect);bg.base.ShadowMapEffect=i,bg.base.ShadowType={HARD:0,SOFT:1,STRATIFIED:2},bg.base.ShadowCascade={NEAR:0,FAR:1,MID:2};var r=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._pipeline=new bg.base.Pipeline(e),this._pipeline.renderSurface=new bg.base.TextureSurface(e),this._pipeline.renderSurface.create(),this._pipeline.effect=new bg.base.ShadowMapEffect(e),this._matrixState=new bg.base.MatrixState,this._drawVisitor=new bg.scene.DrawVisitor(this._pipeline,this._matrixState),this._shadowMapSize=new bg.Vector2(2048),this._pipeline.viewport=new bg.Viewport(0,0,this._shadowMapSize.width,this._shadowMapSize.height),this._shadowType=bg.base.ShadowType.SOFT,this._projection=bg.Matrix4.Ortho(-15,15,-15,15,1,50),this._viewMatrix=bg.Matrix4.Identity(),this._shadowColor=bg.Color.Black()},{get size(){return this._shadowMapSize},set size(t){this._shadowMapSize=t,this._pipeline.viewport=new bg.Viewport(0,0,t.width,t.height)},get shadowType(){return this._shadowType},set shadowType(t){this._shadowType=t},get shadowColor(){return this._shadowColor},set shadowColor(t){this._shadowColor=t},get viewMatrix(){return this._viewMatrix},get projection(){return this._projection},get texture(){return this._pipeline.renderSurface.getTexture(0)},update:function(t,e,n,i){var r=void 0!==arguments[4]?arguments[4]:bg.base.ShadowCascade.NEAR;n.type==bg.base.LightType.DIRECTIONAL?function(t,e,n,i,r){var a=bg.base.MatrixState.Current();bg.base.MatrixState.SetCurrent(this._matrixState),this._pipeline.effect.light=n,this._viewMatrix=new bg.Matrix4(i);var s=this._viewMatrix.rotation,o=e.transform?new bg.Matrix4(e.transform.matrix):bg.Matrix4.Identity(),u=o.position.add(o.forwardVector.scale(-e.focus));this._viewMatrix.identity().translate(u).mult(s).translate(0,0,10).invert(),this._pipeline.effect.lightTransform=this._viewMatrix,bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.clearBuffers(bg.base.ClearBuffers.COLOR_DEPTH);var h=1;r==bg.base.ShadowCascade.FAR?(h=20,n.shadowBias=1e-4):r==bg.base.ShadowCascade.NEAR?(h=2,n.shadowBias=2e-5):r==bg.base.ShadowCascade.MID&&(h=4,n.shadowBias=1e-4),n.projection=bg.Matrix4.Ortho(-e.focus*h,e.focus*h,-e.focus*h,e.focus*h,1,300*e.focus),this._projection=n.projection,t.accept(this._drawVisitor),bg.base.MatrixState.SetCurrent(a)}.apply(this,[t,e,n,i,r]):n.type==bg.base.LightType.SPOT&&function(t,e,n,i){var r=bg.base.MatrixState.Current();bg.base.MatrixState.SetCurrent(this._matrixState),this._pipeline.effect.light=n,this._viewMatrix=new bg.Matrix4(i);var a=n.spotCutoff;n.projection=bg.Matrix4.Perspective(2*a,1,.1,200),n.shadowBias=5e-4,this._viewMatrix.invert(),this._projection=n.projection,this._pipeline.effect.lightTransform=this._viewMatrix,bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.clearBuffers(bg.base.ClearBuffers.COLOR_DEPTH),t.accept(this._drawVisitor),bg.base.MatrixState.SetCurrent(r)}.apply(this,[t,e,n,i])}},{},t)}(bg.app.ContextObject);bg.base.ShadowMap=r}(),function(){var t=function(){function t(){this._font="Verdana",this._size=30,this._color="#FFFFFF",this._background="transparent",this._align="start",this._bold=!1,this._italic=!1,this._dirty=!0}return $traceurRuntime.createClass(t,{clone:function(){var e=new t;return e._font=this._font,e._size=this._size,e._color=this._color,e._background=this._background,e._align=this._align,e._bold=this._bold,e._italic=this._italic,e},get font(){return this._font},set font(t){this._dirty=!0,this._font=t},get size(){return this._size},set size(t){this._dirty=!0,this._size=t},get color(){return this._color},set color(t){this._dirty=!0,this._color=t},get background(){return this._background},set background(t){this._dirty=!0,this._background=t},get align(){return this._align},set align(t){this._dirty=!0,this._align=t},get bold(){return this._bold},set bold(t){this._dirty=!0,this._bold=t},get italic(){return this._italic},set italic(t){this._dirty=!0,this._italic=t},set dirty(t){this._dirty=t},get dirty(){return this._dirty},serialize:function(t){t.font=this.font,t.size=this.size,t.color=this.color,t.background=this.background,t.align=this.align,t.bold=this.bold,t.italic=this.italic},deserialize:function(t){this.font=t.font,this.size=t.size,this.color=t.color,this.background=t.background,this.align=t.align,this.bold=t.bold,this.italic=t.italic,this._dirty=!0}},{})}();bg.base.TextProperties=t}(),function(){var t={},e=8,n=function(){function n(t){this._context=t,this._textures={}}return $traceurRuntime.createClass(n,{find:function(t){return this._textures[t]},register:function(t,e){e instanceof bg.base.Texture&&(this._textures[t]=e)},unregister:function(t){this._textures[t]&&delete this._textures[t]},clear:function(){this._textures={}}},{SetColorTextureSize:function(t){e=t},GetColorTextureSize:function(){return e},WhiteCubemap:function(t){var e=n.Get(t),i=e.find("static-white-cubemap-texture");return i||(i=bg.base.Texture.WhiteCubemap(t),e.register("static-white-cubemap-texture",i)),i},BlackCubemap:function(t){var e=n.Get(t),i=e.find("static-white-cubemap-texture");return i||(i=bg.base.Texture.BlackCubemap(t),e.register("static-white-cubemap-texture",i)),i},WhiteTexture:function(t){var i=n.Get(t),r=i.find("static-white-color-texture");return r||(r=bg.base.Texture.WhiteTexture(t,new bg.Vector2(e)),i.register("static-white-color-texture",r)),r},BlackTexture:function(t){var i=n.Get(t),r=i.find("static-black-color-texture");return r||(r=bg.base.Texture.BlackTexture(t,new bg.Vector2(e)),i.register("static-black-color-texture",r)),r},NormalTexture:function(t){var i=n.Get(t),r=i.find("static-normal-color-texture");return r||(r=bg.base.Texture.NormalTexture(t,new bg.Vector2(e)),i.register("static-normal-color-texture",r)),r},RandomTexture:function(t){var e=n.Get(t),i=e.find("static-random-color-texture");return i||(i=bg.base.Texture.RandomTexture(t,new bg.Vector2(64)),e.register("static-random-color-texture",i)),i},Get:function(e){return t[e.uuid]||(t[e.uuid]=new n(e)),t[e.uuid]},PrecomputedBRDFLookupTexture:function(e){return t._bg_base_brdfLutData_||(t._bg_base_brdfLutData_=bg.base.Texture.PrecomputedBRDFLookupTexture(e)),t._bg_base_brdfLutData_}})}();bg.base.TextureCache=n;var i=null,r=null,a=null,s=null,o=function(t){function e(){$traceurRuntime.superConstructor(e).apply(this,arguments)}return $traceurRuntime.createClass(e,{acceptType:function(t,e){return bg.utils.Resource.IsImage(t)},load:function(t,n,i,r){return new Promise(function(a,s){if(i){var o=bg.base.TextureCache.Get(t).find(n);o||(bg.log("Texture "+n+" not found. Loading texture"),(o=new bg.base.Texture(t)).create(),o.bind(),o.wrapX=r.wrapX||e.GetWrapX(),o.wrapY=r.wrapY||e.GetWrapY(),o.minFilter=r.minFilter||e.GetMinFilter(),o.magFilter=r.magFilter||e.GetMagFilter(),o.setImage(i),o.fileName=n,bg.base.TextureCache.Get(t).register(n,o)),a(o)}else s(new Error("Error loading texture image data"))})}},{GetWrapX:function(){return i||bg.base.TextureWrap.REPEAT},GetWrapY:function(){return r||bg.base.TextureWrap.REPEAT},GetMinFilter:function(){return a||bg.base.TextureFilter.LINEAR_MIPMAP_NEAREST},GetMagFilter:function(){return s||bg.base.TextureFilter.LINEAR},SetMinFilter:function(t){a=t},SetMagFilter:function(t){s=t},SetWrapX:function(t){i=t},SetWrapY:function(t){r=t}},t)}(bg.base.LoaderPlugin);bg.base.TextureLoaderPlugin=o;var u=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return bg.utils.Resource.IsVideo(t)},load:function(t,e,n){return new Promise(function(i,r){if(n){var a=new bg.base.Texture(t);a.create(),a.bind(),a.setVideo(n),a.fileName=e,i(a)}else r(new Error("Error loading video texture data"))})}},{},t)}(bg.base.LoaderPlugin);bg.base.VideoTextureLoaderPlugin=u}(),function(){bg.base.TextureUnit={TEXTURE_0:0,TEXTURE_1:1,TEXTURE_2:2,TEXTURE_3:3,TEXTURE_4:4,TEXTURE_5:5,TEXTURE_6:6,TEXTURE_7:7,TEXTURE_8:8,TEXTURE_9:9,TEXTURE_10:10,TEXTURE_11:11,TEXTURE_12:12,TEXTURE_13:13,TEXTURE_14:14,TEXTURE_15:15,TEXTURE_16:16,TEXTURE_17:17,TEXTURE_18:18,TEXTURE_19:19,TEXTURE_20:20,TEXTURE_21:21,TEXTURE_22:22,TEXTURE_23:23,TEXTURE_24:24,TEXTURE_25:25,TEXTURE_26:26,TEXTURE_27:27,TEXTURE_28:28,TEXTURE_29:29,TEXTURE_30:30},bg.base.TextureWrap={REPEAT:null,CLAMP:null,MIRRORED_REPEAT:null},bg.base.TextureFilter={NEAREST_MIPMAP_NEAREST:null,LINEAR_MIPMAP_NEAREST:null,NEAREST_MIPMAP_LINEAR:null,LINEAR_MIPMAP_LINEAR:null,NEAREST:null,LINEAR:null},bg.base.TextureTarget={TEXTURE_2D:null,CUBE_MAP:null,POSITIVE_X_FACE:null,NEGATIVE_X_FACE:null,POSITIVE_Y_FACE:null,NEGATIVE_Y_FACE:null,POSITIVE_Z_FACE:null,NEGATIVE_Z_FACE:null};var t=function(){return $traceurRuntime.createClass(function(t){this.initFlags(t)},{initFlags:function(t){console.log("TextureImpl: initFlags() method not implemented")},create:function(t){return console.log("TextureImpl: create() method not implemented"),null},setActive:function(t,e){console.log("TextureImpl: setActive() method not implemented")},bind:function(t,e,n){console.log("TextureImpl: bind() method not implemented")},unbind:function(t,e){console.log("TextureImpl: unbind() method not implemented")},setTextureWrapX:function(t,e,n,i){console.log("TextureImpl: setTextureWrapX() method not implemented")},setTextureWrapY:function(t,e,n,i){console.log("TextureImpl: setTextureWrapY() method not implemented")},setImage:function(t,e,n,i,r,a,s){console.log("TextureImpl: setImage() method not implemented")},setImageRaw:function(t,e,n,i,r,a,s,o){console.log("TextureImpl: setImageRaw() method not implemented")},setTextureFilter:function(t,e,n,i){console.log("TextureImpl: setTextureFilter() method not implemented")},setCubemapImage:function(t,e,n){console.log("TextureImpl: setCubemapImage() method not implemented")},setCubemapRaw:function(t,e,n,i,r){console.log("TextureImpl: setCubemapRaw() method not implemented")},setVideo:function(t,e,n,i,r){console.log("TextureImpl: setVideo() method not implemented")},updateVideoData:function(t,e,n,i){console.log("TextureImpl: updateVideoData() method not implemented")},destroy:function(t,e){console.log("TextureImpl: destroy() method not implemented")}},{})}();bg.base.TextureImpl=t,bg.base.TextureDataType={NONE:0,IMAGE:1,IMAGE_DATA:2,CUBEMAP:3,CUBEMAP_DATA:4,VIDEO:5};var e=[],n=function(t){function n(t){$traceurRuntime.superConstructor(n).call(this,t),this._texture=null,this._fileName="",this._size=new bg.Vector2(0),this._target=bg.base.TextureTarget.TEXTURE_2D,this._minFilter=bg.base.TextureFilter.LINEAR,this._magFilter=bg.base.TextureFilter.LINEAR,this._wrapX=bg.base.TextureWrap.REPEAT,this._wrapY=bg.base.TextureWrap.REPEAT,this._video=null}return $traceurRuntime.createClass(n,{get texture(){return this._texture},get target(){return this._target},set target(t){this._target=t},get fileName(){return this._fileName},set fileName(t){this._fileName=t},set minFilter(t){this._minFilter=t},set magFilter(t){this._magFilter=t},get minFilter(){return this._minFilter},get magFilter(){return this._magFilter},set wrapX(t){this._wrapX=t},set wrapY(t){this._wrapY=t},get wrapX(){return this._wrapX},get wrapY(){return this._wrapY},get size(){return this._size},get image(){return this._image},get imageData(){return this._imageData},get cubeMapImages(){return this._cubeMapImages},get cubeMapData(){return this._cubeMapData},get video(){return this._video},get dataType(){return this._image?bg.base.TextureDataType.IMAGE:this._imageData?bg.base.TextureDataType.IMAGE_DATA:this._cubeMapImages?bg.base.TextureDataType.CUBEMAP:this._cubeMapData?bg.base.TextureDataType.CUBEMAP_DATA:this._video?bg.base.TextureDataType.VIDEO:bg.base.TextureDataType.NONE},create:function(){null!==this._texture&&this.destroy(),this._texture=bg.Engine.Get().texture.create(this.context)},setActive:function(t){bg.Engine.Get().texture.setActive(this.context,t)},bind:function(){bg.Engine.Get().texture.bind(this.context,this._target,this._texture)},unbind:function(){n.Unbind(this.context,this._target)},setImage:function(t,e){void 0===e&&(e=!0),this._size.width=t.width,this._size.height=t.height,bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapY(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setImage(this.context,this._target,this._minFilter,this._magFilter,this._texture,t,e),this._image=t,this._imageData=null,this._cubeMapImages=null,this._cubeMapData=null,this._video=null},updateImage:function(t,e){void 0===e&&(e=!0),this._size.width=t.width,this._size.height=t.height,bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapY(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setImage(this.context,this._target,this._minFilter,this._magFilter,this._texture,t,e),this._image=t,this._imageData=null,this._cubeMapImages=null,this._cubeMapData=null,this._video=null},setImageRaw:function(t,e,n,i,r){i||(i=this.context.RGBA),r||(r=this.context.UNSIGNED_BYTE),this._size.width=t,this._size.height=e,bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapY(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setImageRaw(this.context,this._target,this._minFilter,this._magFilter,this._texture,t,e,n,i,r),this._image=null,this._imageData=n,this._cubeMapImages=null,this._cubeMapData=null,this._video=null},setCubemap:function(t,e,n,i,r,a){bg.Engine.Get().texture.bind(this.context,this._target,this._texture),bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setTextureFilter(this.context,this._target,this._minFilter,this._magFilter),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.POSITIVE_X_FACE,t),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.NEGATIVE_X_FACE,e),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.POSITIVE_Y_FACE,n),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.NEGATIVE_Y_FACE,i),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.POSITIVE_Z_FACE,r),bg.Engine.Get().texture.setCubemapImage(this.context,bg.base.TextureTarget.NEGATIVE_Z_FACE,a),this._image=null,this._imageData=null,this._cubeMapImages={posX:t,negX:e,posY:n,negY:i,posZ:r,negZ:a},this._cubeMapData=null,this._video=null},setCubemapRaw:function(t,e,n,i,r,a,s,o){bg.Engine.Get().texture.bind(this.context,this._target,this._texture),bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapX),bg.Engine.Get().texture.setTextureWrapX(this.context,this._target,this._texture,this._wrapY),bg.Engine.Get().texture.setTextureFilter(this.context,this._target,this._minFilter,this._magFilter),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.POSITIVE_X_FACE,n,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.NEGATIVE_X_FACE,i,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.POSITIVE_Y_FACE,r,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.NEGATIVE_Y_FACE,a,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.POSITIVE_Z_FACE,s,t,e),bg.Engine.Get().texture.setCubemapRaw(this.context,bg.base.TextureTarget.NEGATIVE_Z_FACE,o,t,e),this._image=null,this._imageData=null,this._cubeMapImages=null,this._cubeMapData={width:t,height:e,posX:n,negX:i,posY:r,negY:a,posZ:s,negZ:o},this._video=null},setVideo:function(t,e){void 0===e&&(e=!0),this._size.width=t.videoWidth,this._size.height=t.videoHeight,bg.Engine.Get().texture.setVideo(this.context,this._target,this._texture,t,e),this._video=t,this._image=null,this._imageData=null,this._cubeMapImages=null,this._cubeMapData=null},destroy:function(){bg.Engine.Get().texture.destroy(this.context,this._texture),this._texture=null,this._minFilter=null,this._magFilter=null,this._fileName=""},valid:function(){return null!==this._texture},update:function(){bg.Engine.Get().texture.updateVideoData(this.context,this._target,this._texture,this._video)}},{IsPowerOfTwoImage:function(t){return bg.Math.checkPowerOfTwo(t.width)&&bg.Math.checkPowerOfTwo(t.height)},FromCanvas:function(t,e){return n.FromBase64Image(t,e.toDataURL("image/png"))},UpdateCanvasImage:function(t,i){if(!t.valid)return!1;var r=i.toDataURL("image/png");return t.img.width==r.width&&t.img.height==r.height||!0,t.img=new Image,e.push(t),setTimeout(function(){t.bind(),n.IsPowerOfTwoImage(t.img)?(t.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),t.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter()):(t.minFilter=bg.base.TextureFilter.NEAREST,t.magFilter=bg.base.TextureFilter.NEAREST,t.wrapX=bg.base.TextureWrap.CLAMP,t.wrapY=bg.base.TextureWrap.CLAMP),t.setImage(t.img,!0),t.unbind();var i=e.indexOf(t);-1!=i&&e.splice(i,1),bg.emitImageLoadEvent()},100),t.img.src=r,t},FromBase64Image:function(t,i){var r=new bg.base.Texture(t);return r.img=new Image,e.push(r),r.promise=new Promise(function(t,i){setTimeout(function(){r.create(),r.bind(),n.IsPowerOfTwoImage(r.img)?(r.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),r.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter()):(r.minFilter=bg.base.TextureFilter.NEAREST,r.magFilter=bg.base.TextureFilter.NEAREST,r.wrapX=bg.base.TextureWrap.CLAMP,r.wrapY=bg.base.TextureWrap.CLAMP),r.setImage(r.img,!1),r.unbind();var i=e.indexOf(r);-1!=i&&e.splice(i,1),bg.emitImageLoadEvent(),t(r)},10)}),r.img.src=i,r},ColorTexture:function(t,e,n){var i=new bg.base.Texture(t);i.create(),i.bind();for(var r=n.width*n.height*4,a=[],s=0;s<r;s+=4)a[s]=255*e.r,a[s+1]=255*e.g,a[s+2]=255*e.b,a[s+3]=255*e.a;return a=new Uint8Array(a),i.minFilter=bg.base.TextureFilter.NEAREST,i.magFilter=bg.base.TextureFilter.NEAREST,i.setImageRaw(n.width,n.height,a),i.unbind(),i},WhiteTexture:function(t,e){return n.ColorTexture(t,bg.Color.White(),e)},WhiteCubemap:function(t){return n.ColorCubemap(t,bg.Color.White())},BlackCubemap:function(t){return n.ColorCubemap(t,bg.Color.Black())},ColorCubemap:function(t,e){var n=new bg.base.Texture(t);n.target=bg.base.TextureTarget.CUBE_MAP,n.create(),n.bind();for(var i=[],r=0;r<4096;r+=4)i[r]=255*e.r,i[r+1]=255*e.g,i[r+2]=255*e.b,i[r+3]=255*e.a;return i=new Uint8Array(i),n.setCubemapRaw(32,32,i,i,i,i,i,i),n.unbind(),n},NormalTexture:function(t,e){return n.ColorTexture(t,new bg.Color(.5,.5,1,1),e)},BlackTexture:function(t,e){return n.ColorTexture(t,bg.Color.Black(),e)},RandomTexture:function(t,e){var n=new bg.base.Texture(t);n.create(),n.bind();for(var i=e.width*e.height*4,r=[],a=0;a<i;a+=4){var s=new bg.Vector3(2*bg.Math.random()-1,2*bg.Math.random()-1,0);s.normalize(),r[a]=255*s.x,r[a+1]=255*s.y,r[a+2]=255*s.z,r[a+3]=1}return r=new Uint8Array(r),n.minFilter=bg.base.TextureFilter.NEAREST,n.magFilter=bg.base.TextureFilter.NEAREST,n.setImageRaw(e.width,e.height,r),n.unbind(),n},PrecomputedBRDFLookupTexture:function(t){return n.FromBase64Image(t,bg.base._brdfLUTData)},FromImage:function(t,e,n){var i=null;return e&&((i=bg.base.TextureCache.Get(t).find(n))||(bg.log("Texture "+n+" not found. Loading texture"),(i=new bg.base.Texture(t)).create(),i.bind(),i.minFilter=bg.base.TextureLoaderPlugin.GetMinFilter(),i.magFilter=bg.base.TextureLoaderPlugin.GetMagFilter(),i.setImage(e),i.fileName=n,bg.base.TextureCache.Get(t).register(n,i))),i},SetActive:function(t,e){bg.Engine.Get().texture.setActive(t,e)},Unbind:function(t,e){e||(e=bg.base.TextureTarget.TEXTURE_2D),bg.Engine.Get().texture.unbind(t,e)}},t)}(bg.app.ContextObject);bg.base.Texture=n}(),function(){bg.Math={seed:1,PI:3.141592653589793,DEG_TO_RAD:.01745329251994,RAD_TO_DEG:57.29577951308233,PI_2:1.5707963267948966,PI_4:.785398163397448,PI_8:.392699081698724,TWO_PI:6.283185307179586,EPSILON:1e-7,Array:Float32Array,ArrayHighP:Array,FLOAT_MAX:3.402823e38,checkPowerOfTwo:function(t){return"number"==typeof t&&(t&&0==(t&t-1))},closestPow2:function(t){return Math.pow(2,Math.round(Math.log(t)/Math.log(2)))},checkZero:function(t){return t>-this.EPSILON&&t<this.EPSILON?0:t},equals:function(t,e){return Math.abs(t-e)<this.EPSILON},degreesToRadians:function(t){return Math.fround(this.checkZero(t*this.DEG_TO_RAD))},radiansToDegrees:function(t){return Math.fround(this.checkZero(t*this.RAD_TO_DEG))},sin:function(t){return Math.fround(this.checkZero(Math.sin(t)))},cos:function(t){return Math.fround(this.checkZero(Math.cos(t)))},tan:function(t){return Math.fround(this.checkZero(Math.tan(t)))},cotan:function(t){return Math.fround(this.checkZero(1/this.tan(t)))},atan:function(t){return Math.fround(this.checkZero(Math.atan(t)))},atan2:function(t,e){return Math.fround(this.checkZero(Math.atan2f(t,e)))},random:function(){return Math.random()},seededRandom:function(){return this.seed=(9301*this.seed+49297)%233280,0+1*(this.seed/233280)},max:function(t,e){return Math.fround(Math.max(t,e))},min:function(t,e){return Math.fround(Math.min(t,e))},abs:function(t){return Math.fround(Math.abs(t))},sqrt:function(t){return Math.fround(Math.sqrt(t))},lerp:function(t,e,n){return Math.fround((1-n)*t+n*e)},square:function(t){return Math.fround(t*t)}};var t=function(){return $traceurRuntime.createClass(function(t){this._target=t},{get target(){return this._target},set target(t){this._target=t},apply:function(){console.log("WARNING: MatrixStrategy::apply() not overloaded by the child class.")}},{})}();bg.MatrixStrategy=t}(),function(){function t(t){var e=Math.sqrt(t.m00*t.m00+t.m10*t.m10),n=0,i=0,r=0;return e<-1e-6?(n=Math.atan2(-t.m12,t.m11),i=Math.atan2(-t.m20,e),r=0):(n=Math.atan2(t.m21,t.m22),i=Math.atan2(-t.m20,e),r=Math.atan2(t.m10,t.m00)),n<0&&(n+=2*bg.Math.PI),i<0&&(i+=2*bg.Math.PI),r<0&&(r+=2*bg.Math.PI),new bg.Vector3(n,i,r)}var e=function(){return $traceurRuntime.createClass(function(){var t=void 0!==arguments[0]?arguments[0]:1,e=void 0!==arguments[1]?arguments[1]:0,n=void 0!==arguments[2]?arguments[2]:0,i=void 0!==arguments[3]?arguments[3]:0,r=void 0!==arguments[4]?arguments[4]:1,a=void 0!==arguments[5]?arguments[5]:0,s=void 0!==arguments[6]?arguments[6]:0,o=void 0!==arguments[7]?arguments[7]:0,u=void 0!==arguments[8]?arguments[8]:1;this._m=new bg.Math.Array(9),Array.isArray($traceurRuntime.typeof(t))?(this._m[0]=t[0],this._m[1]=t[1],this._m[2]=t[0],this._m[3]=t[3],this._m[4]=t[4],this._m[5]=t[5],this._m[6]=t[6],this._m[7]=t[7],this._m[8]=t[8]):"number"==typeof t?(this._m[0]=t,this._m[1]=e,this._m[2]=n,this._m[3]=i,this._m[4]=r,this._m[5]=a,this._m[6]=s,this._m[7]=o,this._m[8]=u):this.assign(t)},{get m(){return this._m},toArray:function(){return[this._m[0],this._m[1],this._m[2],this._m[3],this._m[4],this._m[5],this._m[6],this._m[7],this._m[8]]},get m00(){return this._m[0]},get m01(){return this._m[1]},get m02(){return this._m[2]},get m10(){return this._m[3]},get m11(){return this._m[4]},get m12(){return this._m[5]},get m20(){return this._m[6]},get m21(){return this._m[7]},get m22(){return this._m[8]},set m00(t){this._m[0]=t},set m01(t){this._m[1]=t},set m02(t){this._m[2]=t},set m10(t){this._m[3]=t},set m11(t){this._m[4]=t},set m12(t){this._m[5]=t},set m20(t){this._m[6]=t},set m21(t){this._m[7]=t},set m22(t){this._m[8]=t},zero:function(){return this._m[0]=this._m[1]=this._m[2]=this._m[3]=this._m[4]=this._m[5]=this._m[6]=this._m[7]=this._m[8]=0,this},identity:function(){return this._m[0]=1,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=1,this._m[5]=0,this._m[6]=0,this._m[7]=0,this._m[8]=1,this},isZero:function(){return 0==this._m[0]&&0==this._m[1]&&0==this._m[2]&&0==this._m[3]&&0==this._m[4]&&0==this._m[5]&&0==this._m[6]&&0==this._m[7]&&0==this._m[8]},isIdentity:function(){return 1==this._m[0]&&0==this._m[1]&&0==this._m[2]&&0==this._m[3]&&1==this._m[4]&&0==this._m[5]&&0==this._m[6]&&0==this._m[7]&&1==this._m[8]},row:function(t){return new bg.Vector3(this._m[3*t],this._m[3*t+1],this._m[3*t+2])},setRow:function(t,e){return this._m[3*t]=e._v[0],this._m[3*t+1]=e._v[1],this._m[3*t+2]=e._v[2],this},setScale:function(t,e,n){var i=new bg.Vector3(this._m[0],this._m[3],this._m[6]).normalize().scale(t),r=new bg.Vector3(this._m[1],this._m[4],this._m[7]).normalize().scale(e),a=new bg.Vector3(this._m[2],this._m[5],this._m[8]).normalize().scale(n);return this._m[0]=i.x,this._m[3]=i.y,this._m[6]=i.z,this._m[1]=r.x,this._m[4]=r.y,this._m[7]=r.z,this._m[2]=a.x,this._m[5]=a.y,this._m[8]=a.z,this},getScale:function(){return new bg.Vector3(new bg.Vector3(this._m[0],this._m[3],this._m[6]).module,new bg.Vector3(this._m[1],this._m[4],this._m[7]).module,new bg.Vector3(this._m[2],this._m[5],this._m[8]).module)},get eulerRotation(){return t(this)},get length(){return this._m.length},traspose:function(){var t=new bg.Vector3(this._m[0],this._m[3],this._m[6]),e=new bg.Vector3(this._m[1],this._m[4],this._m[7]),n=new bg.Vector3(this._m[2],this._m[5],this._m[8]);return this.setRow(0,t),this.setRow(1,e),this.setRow(2,n),this},elemAtIndex:function(t){return this._m[t]},assign:function(t){return 9==t.length?(this._m[0]=t._m[0],this._m[1]=t._m[1],this._m[2]=t._m[2],this._m[3]=t._m[3],this._m[4]=t._m[4],this._m[5]=t._m[5],this._m[6]=t._m[6],this._m[7]=t._m[7],this._m[8]=t._m[8]):16==t.length&&(this._m[0]=t._m[0],this._m[1]=t._m[1],this._m[2]=t._m[2],this._m[3]=t._m[4],this._m[4]=t._m[5],this._m[5]=t._m[6],this._m[6]=t._m[8],this._m[7]=t._m[9],this._m[8]=t._m[10]),this},equals:function(t){return this._m[0]==t._m[0]&&this._m[1]==t._m[1]&&this._m[2]==t._m[2]&&this._m[3]==t._m[3]&&this._m[4]==t._m[4]&&this._m[5]==t._m[5]&&this._m[6]==t._m[6]&&this._m[7]==t._m[7]&&this._m[8]==t._m[8]},notEquals:function(t){return this._m[0]!=t._m[0]||this._m[1]!=t._m[1]||this._m[2]!=t._m[2]&&this._m[3]!=t._m[3]||this._m[4]!=t._m[4]||this._m[5]!=t._m[5]&&this._m[6]!=t._m[6]||this._m[7]!=t._m[7]||this._m[8]!=t._m[8]},mult:function(t){if("number"==typeof t)this._m[0]*=t,this._m[1]*=t,this._m[2]*=t,this._m[3]*=t,this._m[4]*=t,this._m[5]*=t,this._m[6]*=t,this._m[7]*=t,this._m[8]*=t;else{var e=this._m,n=t._m,i=new bg.Math.Array(9);i[0]=n[0]*e[0]+n[1]*e[1]+n[2]*e[2],i[1]=n[0]*e[1]+n[1]*e[4]+n[2]*e[7],i[2]=n[0]*e[2]+n[1]*e[5]+n[2]*e[8],i[3]=n[3]*e[0]+n[4]*e[3]+n[5]*e[6],i[4]=n[3]*e[1]+n[4]*e[4]+n[5]*e[7],i[5]=n[3]*e[2]+n[4]*e[5]+n[5]*e[8],i[6]=n[6]*e[0]+n[7]*e[3]+n[8]*e[6],i[7]=n[6]*e[1]+n[7]*e[4]+n[8]*e[7],i[8]=n[6]*e[2]+n[7]*e[5]+n[8]*e[8],this._m=i}return this},multVector:function(t){"object"==$traceurRuntime.typeof(t)&&t._v&&t._v.length>=2&&(t=t._v);var e=t[0],n=t[1];return new bg.Vector3(this._m[0]*e+this._m[3]*n+1*this._m[6],this._m[1]*e+this._m[4]*n+1*this._m[7],this._m[2]*e+this._m[5]*n+1*this._m[8])},isNan:function(){return!(Math.isNaN(_m[0])||Math.isNaN(_m[1])||Math.isNaN(_m[2])||Math.isNaN(_m[3])||Math.isNaN(_m[4])||Math.isNaN(_m[5])||Math.isNaN(_m[6])||Math.isNaN(_m[7])||Math.isNaN(_m[8]))},toString:function(){return"["+this._m[0]+", "+this._m[1]+", "+this._m[2]+"]\n ["+this._m[3]+", "+this._m[4]+", "+this._m[5]+"]\n ["+this._m[6]+", "+this._m[7]+", "+this._m[8]+"]"}},{Identity:function(){return new bg.Matrix3(1,0,0,0,1,0,0,0,1)}})}();bg.Matrix3=e;var n=function(){return $traceurRuntime.createClass(function(){var t=void 0!==arguments[0]?arguments[0]:0,e=void 0!==arguments[1]?arguments[1]:0,n=void 0!==arguments[2]?arguments[2]:0,i=void 0!==arguments[3]?arguments[3]:0,r=void 0!==arguments[4]?arguments[4]:0,a=void 0!==arguments[5]?arguments[5]:0,s=void 0!==arguments[6]?arguments[6]:0,o=void 0!==arguments[7]?arguments[7]:0,u=void 0!==arguments[8]?arguments[8]:0,h=void 0!==arguments[9]?arguments[9]:0,l=void 0!==arguments[10]?arguments[10]:0,c=void 0!==arguments[11]?arguments[11]:0,f=void 0!==arguments[12]?arguments[12]:0,v=void 0!==arguments[13]?arguments[13]:0,g=void 0!==arguments[14]?arguments[14]:0,m=void 0!==arguments[15]?arguments[15]:0;this._m=new bg.Math.Array(16),Array.isArray(t)?(this._m[0]=t[0],this._m[1]=t[1],this._m[2]=t[2],this._m[3]=t[3],this._m[4]=t[4],this._m[5]=t[5],this._m[6]=t[6],this._m[7]=t[7],this._m[8]=t[8],this._m[9]=t[9],this._m[10]=t[10],this._m[11]=t[11],this._m[12]=t[12],this._m[13]=t[13],this._m[14]=t[14],this._m[15]=t[15]):"number"==typeof t?(this._m[0]=t,this._m[1]=e,this._m[2]=n,this._m[3]=i,this._m[4]=r,this._m[5]=a,this._m[6]=s,this._m[7]=o,this._m[8]=u,this._m[9]=h,this._m[10]=l,this._m[11]=c,this._m[12]=f,this._m[13]=v,this._m[14]=g,this._m[15]=m):this.assign(t)},{get m(){return this._m},toArray:function(){return[this._m[0],this._m[1],this._m[2],this._m[3],this._m[4],this._m[5],this._m[6],this._m[7],this._m[8],this._m[9],this._m[10],this._m[11],this._m[12],this._m[13],this._m[14],this._m[15]]},get m00(){return this._m[0]},get m01(){return this._m[1]},get m02(){return this._m[2]},get m03(){return this._m[3]},get m10(){return this._m[4]},get m11(){return this._m[5]},get m12(){return this._m[6]},get m13(){return this._m[7]},get m20(){return this._m[8]},get m21(){return this._m[9]},get m22(){return this._m[10]},get m23(){return this._m[11]},get m30(){return this._m[12]},get m31(){return this._m[13]},get m32(){return this._m[14]},get m33(){return this._m[15]},set m00(t){this._m[0]=t},set m01(t){this._m[1]=t},set m02(t){this._m[2]=t},set m03(t){this._m[3]=t},set m10(t){this._m[4]=t},set m11(t){this._m[5]=t},set m12(t){this._m[6]=t},set m13(t){this._m[7]=t},set m20(t){this._m[8]=t},set m21(t){this._m[9]=t},set m22(t){this._m[10]=t},set m23(t){this._m[11]=t},set m30(t){this._m[12]=t},set m31(t){this._m[13]=t},set m32(t){this._m[14]=t},set m33(t){this._m[15]=t},zero:function(){return this._m[0]=0,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=0,this._m[5]=0,this._m[6]=0,this._m[7]=0,this._m[8]=0,this._m[9]=0,this._m[10]=0,this._m[11]=0,this._m[12]=0,this._m[13]=0,this._m[14]=0,this._m[15]=0,this},identity:function(){return this._m[0]=1,this._m[1]=0,this._m[2]=0,this._m[3]=0,this._m[4]=0,this._m[5]=1,this._m[6]=0,this._m[7]=0,this._m[8]=0,this._m[9]=0,this._m[10]=1,this._m[11]=0,this._m[12]=0,this._m[13]=0,this._m[14]=0,this._m[15]=1,this},isZero:function(){return 0==this._m[0]&&0==this._m[1]&&0==this._m[2]&&0==this._m[3]&&0==this._m[4]&&0==this._m[5]&&0==this._m[6]&&0==this._m[7]&&0==this._m[8]&&0==this._m[9]&&0==this._m[10]&&0==this._m[11]&&0==this._m[12]&&0==this._m[13]&&0==this._m[14]&&0==this._m[15]},isIdentity:function(){return 1==this._m[0]&&0==this._m[1]&&0==this._m[2]&&0==this._m[3]&&0==this._m[4]&&1==this._m[5]&&0==this._m[6]&&0==this._m[7]&&0==this._m[8]&&0==this._m[9]&&1==this._m[10]&&0==this._m[11]&&0==this._m[12]&&0==this._m[13]&&0==this._m[14]&&1==this._m[15]},row:function(t){return new bg.Vector4(this._m[4*t],this._m[4*t+1],this._m[4*t+2],this._m[4*t+3])},setRow:function(t,e){return this._m[4*t]=e._v[0],this._m[4*t+1]=e._v[1],this._m[4*t+2]=e._v[2],this._m[4*t+3]=e._v[3],this},setScale:function(t,e,n){var i=new bg.Vector3(this._m[0],this._m[4],this._m[8]).normalize().scale(t),r=new bg.Vector3(this._m[1],this._m[5],this._m[9]).normalize().scale(e),a=new bg.Vector3(this._m[2],this._m[6],this._m[10]).normalize().scale(n);return this._m[0]=i.x,this._m[4]=i.y,this._m[8]=i.z,this._m[1]=r.x,this._m[5]=r.y,this._m[9]=r.z,this._m[2]=a.x,this._m[6]=a.y,this._m[10]=a.z,this},getScale:function(){return new bg.Vector3(new bg.Vector3(this._m[0],this._m[4],this._m[8]).module,new bg.Vector3(this._m[1],this._m[5],this._m[9]).module,new bg.Vector3(this._m[2],this._m[6],this._m[10]).module)},setPosition:function(t,e,n){return"number"==typeof t?(this._m[12]=t,this._m[13]=e,this._m[14]=n):(this._m[12]=t.x,this._m[13]=t.y,this._m[14]=t.z),this},get rotation(){var t=this.getScale();return new bg.Matrix4(this._m[0]/t.x,this._m[1]/t.y,this._m[2]/t.z,0,this._m[4]/t.x,this._m[5]/t.y,this._m[6]/t.z,0,this._m[8]/t.x,this._m[9]/t.y,this._m[10]/t.z,0,0,0,0,1)},get position(){return new bg.Vector3(this._m[12],this._m[13],this._m[14])},get length(){return this._m.length},get eulerRotation(){return t(this)},getMatrix3:function(){return new bg.Matrix3(this._m[0],this._m[1],this._m[2],this._m[4],this._m[5],this._m[6],this._m[8],this._m[9],this._m[10])},perspective:function(t,e,n,i){return this.assign(bg.Matrix4.Perspective(t,e,n,i)),this},frustum:function(t,e,n,i,r,a){return this.assign(bg.Matrix4.Frustum(t,e,n,i,r,a)),this},ortho:function(t,e,n,i,r,a){return this.assign(bg.Matrix4.Ortho(t,e,n,i,r,a)),this},lookAt:function(t,e,n){return this.assign(bg.Matrix4.LookAt(t,e,n)),this},translate:function(t,e,n){return this.mult(bg.Matrix4.Translation(t,e,n)),this},rotate:function(t,e,n,i){return this.mult(bg.Matrix4.Rotation(t,e,n,i)),this},scale:function(t,e,n){return this.mult(bg.Matrix4.Scale(t,e,n)),this},elemAtIndex:function(t){return this._m[t]},assign:function(t){return 9==t.length?(this._m[0]=t._m[0],this._m[1]=t._m[1],this._m[2]=t._m[2],this._m[3]=0,this._m[4]=t._m[3],this._m[5]=t._m[4],this._m[6]=t._m[5],this._m[7]=0,this._m[8]=t._m[6],this._m[9]=t._m[7],this._m[10]=t._m[8],this._m[11]=0,this._m[12]=0,this._m[13]=0,this._m[14]=0,this._m[15]=1):16==t.length&&(this._m[0]=t._m[0],this._m[1]=t._m[1],this._m[2]=t._m[2],this._m[3]=t._m[3],this._m[4]=t._m[4],this._m[5]=t._m[5],this._m[6]=t._m[6],this._m[7]=t._m[7],this._m[8]=t._m[8],this._m[9]=t._m[9],this._m[10]=t._m[10],this._m[11]=t._m[11],this._m[12]=t._m[12],this._m[13]=t._m[13],this._m[14]=t._m[14],this._m[15]=t._m[15]),this},equals:function(t){return this._m[0]==t._m[0]&&this._m[1]==t._m[1]&&this._m[2]==t._m[2]&&this._m[3]==t._m[3]&&this._m[4]==t._m[4]&&this._m[5]==t._m[5]&&this._m[6]==t._m[6]&&this._m[7]==t._m[7]&&this._m[8]==t._m[8]&&this._m[9]==t._m[9]&&this._m[10]==t._m[10]&&this._m[11]==t._m[11]&&this._m[12]==t._m[12]&&this._m[13]==t._m[13]&&this._m[14]==t._m[14]&&this._m[15]==t._m[15]},notEquals:function(t){return this._m[0]!=t._m[0]||this._m[1]!=t._m[1]||this._m[2]!=t._m[2]||this._m[3]!=t._m[3]||this._m[4]!=t._m[4]||this._m[5]!=t._m[5]||this._m[6]!=t._m[6]||this._m[7]!=t._m[7]||this._m[8]!=t._m[8]||this._m[9]!=t._m[9]||this._m[10]!=t._m[10]||this._m[11]!=t._m[11]||this._m[12]!=t._m[12]||this._m[13]!=t._m[13]||this._m[14]!=t._m[14]||this._m[15]!=t._m[15]},mult:function(t){if("number"==typeof t)return this._m[0]*=t,this._m[1]*=t,this._m[2]*=t,this._m[3]*=t,this._m[4]*=t,this._m[5]*=t,this._m[6]*=t,this._m[7]*=t,this._m[8]*=t,this._m[9]*=t,this._m[10]*=t,this._m[11]*=t,this._m[12]*=t,this._m[13]*=t,this._m[14]*=t,this._m[15]*=t,this;var e=this._m,n=t._m,i=new bg.Math.Array(16);return i[0]=n[0]*e[0]+n[1]*e[4]+n[2]*e[8]+n[3]*e[12],i[1]=n[0]*e[1]+n[1]*e[5]+n[2]*e[9]+n[3]*e[13],i[2]=n[0]*e[2]+n[1]*e[6]+n[2]*e[10]+n[3]*e[14],i[3]=n[0]*e[3]+n[1]*e[7]+n[2]*e[11]+n[3]*e[15],i[4]=n[4]*e[0]+n[5]*e[4]+n[6]*e[8]+n[7]*e[12],i[5]=n[4]*e[1]+n[5]*e[5]+n[6]*e[9]+n[7]*e[13],i[6]=n[4]*e[2]+n[5]*e[6]+n[6]*e[10]+n[7]*e[14],i[7]=n[4]*e[3]+n[5]*e[7]+n[6]*e[11]+n[7]*e[15],i[8]=n[8]*e[0]+n[9]*e[4]+n[10]*e[8]+n[11]*e[12],i[9]=n[8]*e[1]+n[9]*e[5]+n[10]*e[9]+n[11]*e[13],i[10]=n[8]*e[2]+n[9]*e[6]+n[10]*e[10]+n[11]*e[14],i[11]=n[8]*e[3]+n[9]*e[7]+n[10]*e[11]+n[11]*e[15],i[12]=n[12]*e[0]+n[13]*e[4]+n[14]*e[8]+n[15]*e[12],i[13]=n[12]*e[1]+n[13]*e[5]+n[14]*e[9]+n[15]*e[13],i[14]=n[12]*e[2]+n[13]*e[6]+n[14]*e[10]+n[15]*e[14],i[15]=n[12]*e[3]+n[13]*e[7]+n[14]*e[11]+n[15]*e[15],this._m=i,this},multVector:function(t){"object"==$traceurRuntime.typeof(t)&&t._v&&t._v.length>=3&&(t=t._v);var e=t[0],n=t[1],i=t[2];return new bg.Vector4(this._m[0]*e+this._m[4]*n+this._m[8]*i+1*this._m[12],this._m[1]*e+this._m[5]*n+this._m[9]*i+1*this._m[13],this._m[2]*e+this._m[6]*n+this._m[10]*i+1*this._m[14],this._m[3]*e+this._m[7]*n+this._m[11]*i+1*this._m[15])},invert:function(){var t=this._m[0],e=this._m[1],n=this._m[2],i=this._m[3],r=this._m[4],a=this._m[5],s=this._m[6],o=this._m[7],u=this._m[8],h=this._m[9],l=this._m[10],c=this._m[11],f=this._m[12],v=this._m[13],g=this._m[14],m=this._m[15],d=t*a-e*r,p=t*s-n*r,b=t*o-i*r,x=e*s-n*a,_=e*o-i*a,M=n*o-i*s,T=u*v-h*f,w=u*g-l*f,S=u*m-c*f,y=h*g-l*v,E=h*m-c*v,P=l*m-c*g,R=d*P-p*E+b*y+x*S-_*w+M*T;return R?(R=1/R,this._m[0]=(a*P-s*E+o*y)*R,this._m[1]=(n*E-e*P-i*y)*R,this._m[2]=(v*M-g*_+m*x)*R,this._m[3]=(l*_-h*M-c*x)*R,this._m[4]=(s*S-r*P-o*w)*R,this._m[5]=(t*P-n*S+i*w)*R,this._m[6]=(g*b-f*M-m*p)*R,this._m[7]=(u*M-l*b+c*p)*R,this._m[8]=(r*E-a*S+o*T)*R,this._m[9]=(e*S-t*E-i*T)*R,this._m[10]=(f*_-v*b+m*d)*R,this._m[11]=(h*b-u*_-c*d)*R,this._m[12]=(a*w-r*y-s*T)*R,this._m[13]=(t*y-e*w+n*T)*R,this._m[14]=(v*p-f*x-g*d)*R,this._m[15]=(u*x-h*p+l*d)*R,this):(this.zero(),this)},traspose:function(){var t=new bg.Vector4(this._m[0],this._m[4],this._m[8],this._m[12]),e=new bg.Vector4(this._m[1],this._m[5],this._m[9],this._m[13]),n=new bg.Vector4(this._m[2],this._m[6],this._m[10],this._m[14]),i=new bg.Vector4(this._m[3],this._m[7],this._m[11],this._m[15]);return this.setRow(0,t),this.setRow(1,e),this.setRow(2,n),this.setRow(3,i),this},transformDirection:function(t){var e=new bg.Vector3(t),n=new bg.Matrix4(this);return n.setRow(3,new bg.Vector4(0,0,0,1)),e.assign(n.multVector(e).xyz),e.normalize(),e},get forwardVector(){return this.transformDirection(new bg.Vector3(0,0,1))},get rightVector(){return this.transformDirection(new bg.Vector3(1,0,0))},get upVector(){return this.transformDirection(new bg.Vector3(0,1,0))},get backwardVector(){return this.transformDirection(new bg.Vector3(0,0,-1))},get leftVector(){return this.transformDirection(new bg.Vector3(-1,0,0))},get downVector(){return this.transformDirection(new bg.Vector3(0,-1,0))},isNan:function(){return Number.isNaN(this._m[0])||Number.isNaN(this._m[1])||Number.isNaN(this._m[2])||Number.isNaN(this._m[3])||Number.isNaN(this._m[4])||Number.isNaN(this._m[5])||Number.isNaN(this._m[6])||Number.isNaN(this._m[7])||Number.isNaN(this._m[8])||Number.isNaN(this._m[9])||Number.isNaN(this._m[10])||Number.isNaN(this._m[11])||Number.isNaN(this._m[12])||Number.isNaN(this._m[13])||Number.isNaN(this._m[14])||Number.isNaN(this._m[15])},getOrthoValues:function(){return[(1+get23())/get22(),-(1-get23())/get22(),(1-get13())/get11(),-(1+get13())/get11(),-(1+get03())/get00(),(1-get03())/get00()]},getPerspectiveValues:function(){return[get23()/(get22()-1),get23()/(get22()+1),near*(get12()-1)/get11(),near*(get12()+1)/get11(),near*(get02()-1)/get00(),near*(get02()+1)/get00()]},toString:function(){return"["+this._m[0]+", "+this._m[1]+", "+this._m[2]+", "+this._m[3]+"]\n ["+this._m[4]+", "+this._m[5]+", "+this._m[6]+", "+this._m[7]+"]\n ["+this._m[8]+", "+this._m[9]+", "+this._m[10]+", "+this._m[11]+"]\n ["+this._m[12]+", "+this._m[13]+", "+this._m[14]+", "+this._m[15]+"]"}},{Unproject:function(t,e,n,i,r,a){var s=new bg.Matrix4(r);s.mult(i),s.invert();var o=new bg.Vector4((t-a.y)/a.width*2-1,(e-a.x)/a.height*2-1,2*n-1,1),u=new bg.Vector4(s.multVector(o));return 0==u.z?u.set(0):u.set(u.x/u.w,u.y/u.w,u.z/u.w,u.w/u.w),u},Identity:function(){return new bg.Matrix4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)},Perspective:function(t,e,n,i){var r=bg.Math.tan(t*bg.Math.PI/360)*n,a=r*e;return bg.Matrix4.Frustum(-a,a,-r,r,n,i)},Frustum:function(t,e,n,i,r,a){var s=new bg.Matrix4,o=e-t,u=i-n,h=a-r;return s.setRow(0,new bg.Vector4(2*r/o,0,0,0)),s.setRow(1,new bg.Vector4(0,2*r/u,0,0)),s.setRow(2,new bg.Vector4((e+t)/o,(i+n)/u,-(a+r)/h,-1)),s.setRow(3,new bg.Vector4(0,0,-a*r*2/h,0)),s},Ortho:function(t,e,n,i,r,a){var s=new bg.Matrix4,o=e-t,u=i-n,h=a-r;return s._m[0]=2/o,s._m[1]=0,s._m[2]=0,s._m[3]=0,s._m[4]=0,s._m[5]=2/u,s._m[6]=0,s._m[7]=0,s._m[8]=0,s._m[9]=0,s._m[10]=-2/h,s._m[11]=0,s._m[12]=-(t+e)/o,s._m[13]=-(i+n)/u,s._m[14]=-(a+r)/h,s._m[15]=1,s},LookAt:function(t,e,n){var i=bg.Matrix4.Identity(),r=new bg.Vector3(n),a=bg.Vector3.Sub(t,e);a.normalize();var s=bg.Vector3.Cross(r,a);return s.normalize(),r.normalize(),i.m00=s.x,i.m10=s.y,i.m20=s.z,i.m30=-s.dot(t),i.m01=r.x,i.m11=r.y,i.m21=r.z,i.m31=-r.dot(t),i.m02=a.x,i.m12=a.y,i.m22=a.z,i.m32=-a.dot(t),i.m03=0,i.m13=0,i.m23=0,i.m33=1,i},Translation:function(t,e,n){return"object"==$traceurRuntime.typeof(t)&&t._v&&t._v.length>=3&&(e=t._v[1],n=t._v[2],t=t._v[0]),new bg.Matrix4(1,0,0,0,0,1,0,0,0,0,1,0,t,e,n,1)},Rotation:function(t,e,n,i){var r=new bg.Vector3(e,n,i);r.normalize();new bg.Matrix4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);var a=bg.Math.cos(t),s=1-a,o=bg.Math.sin(t);return new bg.Matrix4(r.x*r.x*s+a,r.x*r.y*s+r.z*o,r.x*r.z*s-r.y*o,0,r.y*r.x*s-r.z*o,r.y*r.y*s+a,r.y*r.z*s+r.x*o,0,r.z*r.x*s+r.y*o,r.z*r.y*s-r.x*o,r.z*r.z*s+a,0,0,0,0,1)},Scale:function(t,e,n){return"object"==$traceurRuntime.typeof(t)&&t._v&&t._v.length>=3&&(e=(t=t._v[0])._v[1],n=t._v[2]),new bg.Matrix4(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1)}})}();bg.Matrix4=n}(),function(){var t=function(){return $traceurRuntime.createClass(function(t){this._v=t},{get v(){return this._v},get length(){return this._v.length},get x(){return this._v[0]},set x(t){this._v[0]=t},get y(){return this._v[1]},set y(t){this._v[1]=t},get module(){return this.magnitude()},toArray:function(){for(var t=[],e=0;e<this.v.length;++e)t.push(this.v[e]);return t}},{MinComponents:function(t,e){var n=Math.min(t.length,e.length),i=null;switch(n){case 2:i=new bg.Vector2;break;case 3:i=new bg.Vector3;break;case 4:i=new bg.Vector4}for(var r=0;r<n;++r)i._v[r]=t._v[r]<e._v[r]?t._v[r]:e._v[r];return i},MaxComponents:function(t,e){var n=Math.min(t.length,e.length),i=null;switch(n){case 2:i=new bg.Vector2;break;case 3:i=new bg.Vector3;break;case 4:i=new bg.Vector4}for(var r=0;r<n;++r)i._v[r]=t._v[r]>e._v[r]?t._v[r]:e._v[r];return i}})}();bg.VectorBase=t,bg.Vector=t;var e=function(t){function e(){var t=void 0!==arguments[0]?arguments[0]:0,n=arguments[1];$traceurRuntime.superConstructor(e).call(this,new bg.Math.ArrayHighP(2)),t instanceof e?(this._v[0]=t._v[0],this._v[1]=t._v[1]):Array.isArray(t)&&t.length>=2?(this._v[0]=t[0],this._v[1]=t[1]):(void 0===n&&(n=t),this._v[0]=t,this._v[1]=n)}return $traceurRuntime.createClass(e,{distance:function(t){return new bg.Vector2(this._v[0]-t._v[0],this._v[1]-t._v[1]).magnitude()},normalize:function(){var t=this.magnitude();return this._v[0]=this._v[0]/t,this._v[1]=this._v[1]/t,this},add:function(t){return this._v[0]+=t._v[0],this._v[1]+=t._v[1],this},sub:function(t){return this._v[0]-=t._v[0],this._v[1]-=t._v[1],this},dot:function(t){return this._v[0]*t._v[0]+this._v[1]*t._v[1]},scale:function(t){return this._v[0]*=t,this._v[1]*=t,this},magnitude:function(){return Math.sqrt(this._v[0]*this._v[0]+this._v[1]*this._v[1])},elemAtIndex:function(t){return this._v[t]},equals:function(t){return this._v[0]==t._v[0]&&this._v[1]==t._v[1]},notEquals:function(t){return this._v[0]!=t._v[0]||this._v[1]!=t._v[1]},assign:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1]},set:function(t,e){void 0===e&&(e=t),this._v[0]=t,this._v[1]=e},get width(){return this._v[0]},get height(){return this._v[1]},set width(t){this._v[0]=t},set height(t){this._v[1]=t},get aspectRatio(){return this._v[0]/this._v[1]},isNan:function(){return isNaN(this._v[0])||isNaN(this._v[1])},toString:function(){return"["+this._v+"]"}},{Add:function(t,n){return new e(t.x+n.x,t.y+n.y)},Sub:function(t,n){return new e(t.x-n.x,t.y-n.y)},Distance:function(t,e){return new bg.Vector2(t._v[0]-e._v[0],t._v[1]-e._v[1]).magnitude()},Dot:function(t,e){return t._v[0]*e._v[0]+t._v[1]*e._v[1]},Cross:function(t,e){var n=t._v[1]*e._v[2]-t._v[2]*e._v[1],i=t._v[2]*e._v[0]-t._v[0]*e._v[2],r=t._v[0]*e._v[1]-t._v[1]*e._v[0];return new bg.Vector3(n,i,r)}},t)}(t);bg.Vector2=e;var n=function(t){function n(){var t=void 0!==arguments[0]?arguments[0]:0,i=void 0!==arguments[1]?arguments[1]:0,r=void 0!==arguments[2]?arguments[2]:0;$traceurRuntime.superConstructor(n).call(this,new bg.Math.ArrayHighP(3)),t instanceof e?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=i):t instanceof n?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2]):Array.isArray(t)&&t.length>=3?(this._v[0]=t[0],this._v[1]=t[1],this._v[2]=t[2]):(void 0===i&&(i=t),void 0===r&&(r=i),this._v[0]=t,this._v[1]=i,this._v[2]=r)}return $traceurRuntime.createClass(n,{get z(){return this._v[2]},set z(t){this._v[2]=t},magnitude:function(){return Math.sqrt(this._v[0]*this._v[0]+this._v[1]*this._v[1]+this._v[2]*this._v[2])},normalize:function(){var t=this.magnitude();return this._v[0]=this._v[0]/t,this._v[1]=this._v[1]/t,this._v[2]=this._v[2]/t,this},distance:function(t){return new bg.Vector3(this._v[0]-t._v[0],this._v[1]-t._v[1],this._v[2]-t._v[2]).magnitude()},add:function(t){return this._v[0]+=t._v[0],this._v[1]+=t._v[1],this._v[2]+=t._v[2],this},sub:function(t){return this._v[0]-=t._v[0],this._v[1]-=t._v[1],this._v[2]-=t._v[2],this},dot:function(t){return this._v[0]*t._v[0]+this._v[1]*t._v[1]+this._v[2]*t._v[2]},scale:function(t){return this._v[0]*=t,this._v[1]*=t,this._v[2]*=t,this},cross:function(t){var e=this._v[1]*t._v[2]-this._v[2]*t._v[1],n=this._v[2]*t._v[0]-this._v[0]*t._v[2],i=this._v[0]*t._v[1]-this._v[1]*t._v[0];return this._v[0]=e,this._v[1]=n,this._v[2]=i,this},elemAtIndex:function(t){return this._v[t]},equals:function(t){return this._v[0]==t._v[0]&&this._v[1]==t._v[1]&&this._v[2]==t._v[2]},notEquals:function(t){return this._v[0]!=t._v[0]||this._v[1]!=t._v[1]||this._v[2]!=t._v[2]},assign:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1],t._v.length>=3&&(this._v[2]=t._v[2])},set:function(t,e,n){this._v[0]=t,this._v[1]=void 0===e?t:e,this._v[2]=void 0===e?t:void 0===n?e:n},get width(){return this._v[0]},get height(){return this._v[1]},get depth(){return this._v[2]},set width(t){this._v[0]=t},set height(t){this._v[1]=t},set depth(t){this._v[2]=t},get xy(){return new bg.Vector2(this._v[0],this._v[1])},get yz(){return new bg.Vector2(this._v[1],this._v[2])},get xz(){return new bg.Vector2(this._v[0],this._v[2])},isNan:function(){return isNaN(this._v[0])||isNaN(this._v[1])||isNaN(this._v[2])},toString:function(){return"["+this._v+"]"}},{Add:function(t,e){return new n(t.x+e.x,t.y+e.y,t.z+e.z)},Sub:function(t,e){return new n(t.x-e.x,t.y-e.y,t.z-e.z)},Distance:function(t,e){return new bg.Vector3(t._v[0]-e._v[0],t._v[1]-e._v[1],t._v[2]-e._v[2]).magnitude()},Dot:function(t,e){return t._v[0]*e._v[0]+t._v[1]*e._v[1]+t._v[2]*e._v[2]},Cross:function(t,e){var n=t._v[1]*e._v[2]-t._v[2]*e._v[1],i=t._v[2]*e._v[0]-t._v[0]*e._v[2],r=t._v[0]*e._v[1]-t._v[1]*e._v[0];return new bg.Vector3(n,i,r)}},t)}(t);bg.Vector3=n;var i=function(t){function i(){var t=void 0!==arguments[0]?arguments[0]:0,r=void 0!==arguments[1]?arguments[1]:0,a=void 0!==arguments[2]?arguments[2]:0,s=void 0!==arguments[3]?arguments[3]:0;$traceurRuntime.superConstructor(i).call(this,new bg.Math.ArrayHighP(4)),t instanceof e?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=r,this._v[3]=a):t instanceof n?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2],this._v[3]=r):t instanceof i?(this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2],this._v[3]=t._v[3]):Array.isArray(t)&&t.length>=4?(this._v[0]=t[0],this._v[1]=t[1],this._v[2]=t[2],this._v[3]=t[3]):(void 0===r&&(r=t),void 0===a&&(a=r),void 0===s&&(s=a),this._v[0]=t,this._v[1]=r,this._v[2]=a,this._v[3]=s)}return $traceurRuntime.createClass(i,{get z(){return this._v[2]},set z(t){this._v[2]=t},get w(){return this._v[3]},set w(t){this._v[3]=t},magnitude:function(){return Math.sqrt(this._v[0]*this._v[0]+this._v[1]*this._v[1]+this._v[2]*this._v[2]+this._v[3]*this._v[3])},normalize:function(){var t=this.magnitude();return this._v[0]=this._v[0]/t,this._v[1]=this._v[1]/t,this._v[2]=this._v[2]/t,this._v[3]=this._v[3]/t,this},distance:function(t){return new bg.Vector4(this._v[0]-t._v[0],this._v[1]-t._v[1],this._v[2]-t._v[2],this._v[3]-t._v[3]).magnitude()},add:function(t){return this._v[0]+=t._v[0],this._v[1]+=t._v[1],this._v[2]+=t._v[2],this._v[3]+=t._v[3],this},sub:function(t){return this._v[0]-=t._v[0],this._v[1]-=t._v[1],this._v[2]-=t._v[2],this._v[3]-=t._v[3],this},dot:function(t){return this._v[0]*t._v[0]+this._v[1]*t._v[1]+this._v[2]*t._v[2]+this._v[3]*t._v[3]},scale:function(t){return this._v[0]*=t,this._v[1]*=t,this._v[2]*=t,this._v[3]*=t,this},elemAtIndex:function(t){return this._v[t]},equals:function(t){return this._v[0]==t._v[0]&&this._v[1]==t._v[1]&&this._v[2]==t._v[2]&&this._v[3]==t._v[3]},notEquals:function(t){return this._v[0]!=t._v[0]||this._v[1]!=t._v[1]||this._v[2]!=t._v[2]||this._v[3]!=t._v[3]},assign:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1],t._v.length>=3&&(this._v[2]=t._v[2]),4==t._v.length&&(this._v[3]=t._v[3])},set:function(t,e,n,i){this._v[0]=t,this._v[1]=void 0===e?t:e,this._v[2]=void 0===e?t:void 0===n?e:n,this._v[3]=void 0===e?t:void 0===n?e:void 0===i?n:i},get r(){return this._v[0]},get g(){return this._v[1]},get b(){return this._v[2]},get a(){return this._v[3]},set r(t){this._v[0]=t},set g(t){this._v[1]=t},set b(t){this._v[2]=t},set a(t){this._v[3]=t},get xy(){return new bg.Vector2(this._v[0],this._v[1])},get yz(){return new bg.Vector2(this._v[1],this._v[2])},get xz(){return new bg.Vector2(this._v[0],this._v[2])},get xyz(){return new bg.Vector3(this._v[0],this._v[1],this._v[2])},get width(){return this._v[2]},get height(){return this._v[3]},set width(t){this._v[2]=t},set height(t){this._v[3]=t},get aspectRatio(){return 0!=this._v[3]?this._v[2]/this._v[3]:1},isNan:function(){return isNaN(this._v[0])||isNaN(this._v[1])||isNaN(this._v[2])||isNaN(this._v[3])},toString:function(){return"["+this._v+"]"}},{Add:function(t,e){return new i(t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w)},Sub:function(t,e){return new i(t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w)},Yellow:function(){return new bg.Vector4(1,1,0,1)},Orange:function(){return new bg.Vector4(1,.5,0,1)},Red:function(){return new bg.Vector4(1,0,0,1)},Violet:function(){return new bg.Vector4(.5,0,1,1)},Blue:function(){return new bg.Vector4(0,0,1,1)},Green:function(){return new bg.Vector4(0,1,0,1)},White:function(){return new bg.Vector4(1,1,1,1)},LightGray:function(){return new bg.Vector4(.8,.8,.8,1)},Gray:function(){return new bg.Vector4(.5,.5,.5,1)},DarkGray:function(){return new bg.Vector4(.2,.2,.2,1)},Black:function(){return new bg.Vector4(0,0,0,1)},Brown:function(){return new bg.Vector4(.4,.2,0,1)},Transparent:function(){return new bg.Vector4(0,0,0,0)}},t)}(t);bg.Vector4=i,bg.Size2D=e,bg.Size3D=n,bg.Position2D=e,bg.Viewport=i,bg.Color=i;var r=function(t){return $traceurRuntime.createClass(function t(){var e=void 0!==arguments[0]?arguments[0]:0,n=void 0!==arguments[1]?arguments[1]:0,i=void 0!==arguments[2]?arguments[2]:0,r=void 0!==arguments[3]?arguments[3]:0,a=void 0!==arguments[4]?arguments[4]:0,s=void 0!==arguments[5]?arguments[5]:0;$traceurRuntime.superConstructor(t).call(this,new bg.Math.Array(6)),this._v[0]=e,this._v[1]=n,this._v[2]=i,this._v[3]=r,this._v[4]=a,this._v[5]=s},{elemAtIndex:function(t){return this._v[t]},equals:function(t){return this._v[0]==t._v[0]&&this._v[1]==t._v[1]&&this._v[2]==t._v[2]&&this._v[3]==t._v[3]&&this._v[4]==t._v[4]&&this._v[5]==t._v[5]},notEquals:function(t){return this._v[0]!=t._v[0]||this._v[1]!=t._v[1]||this._v[2]!=t._v[2]||this._v[3]!=t._v[3]||this._v[4]!=t._v[4]||this._v[5]!=t._v[5]},assign:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2],this._v[3]=t._v[3],this._v[4]=t._v[4],this._v[5]=t._v[5]},set:function(t,e,n,i,r,a){this._v[0]=t,this._v[1]=void 0===e?t:e,this._v[2]=void 0===e?t:n,this._v[3]=void 0===e?t:i,this._v[4]=void 0===e?t:r,this._v[5]=void 0===e?t:a},get left(){return this._v[0]},get right(){return this._v[1]},get bottom(){return this._v[2]},get top(){return this._v[3]},get back(){return this._v[4]},get front(){return this._v[5]},set left(t){this._v[0]=t},set right(t){this._v[1]=t},set bottom(t){this._v[2]=t},set top(t){this._v[3]=t},set back(t){this._v[4]=t},set front(t){this._v[5]=t},get width(){return Math.abs(this._v[1]-this._v[0])},get height(){return Math.abs(this._v[3]-this._v[2])},get depth(){return Math.abs(this._v[5]-this._v[4])},isNan:function(){return isNaN(this._v[0])||isNaN(this._v[1])||isNaN(this._v[2])||isNaN(this._v[3])||isNaN(this._v[4])||isNaN(this._v[5])},toString:function(){return"["+this._v+"]"},isInBounds:function(t){return t.x>=this._v[0]&&t.x<=this._v[1]&&t.y>=this._v[2]&&t.y<=this._v[3]&&t.z>=this._v[4]&&t.z<=this._v[5]}},{},t)}(t);bg.Bounds=r;var a=function(t){function e(t,n,i,r){$traceurRuntime.superConstructor(e).call(this),void 0===t?this.zero():void 0===n?t._v&&t._v.lenght>=4?this.clone(t):t._m&&9==t._m.length?this.initWithMatrix3(t):t._m&&16==t._m.length?this.initWithMatrix4(t):this.zero():void 0!==t&&void 0!==n&&void 0!==i&&void 0!==r?this.initWithValues(t,n,i,r):this.zero()}return $traceurRuntime.createClass(e,{initWithValues:function(t,e,n,i){return this._v[0]=e*bg.Math.sin(t/2),this._v[1]=n*bg.Math.sin(t/2),this._v[2]=i*bg.Math.sin(t/2),this._v[3]=bg.Math.cos(t/2),this},clone:function(t){this._v[0]=t._v[0],this._v[1]=t._v[1],this._v[2]=t._v[2],this._v[3]=t._v[3]},initWithMatrix3:function(t){var e=bg.Math.sqrt(1+t._m[0]+t._m[4]+t._m[8])/2,n=4*e;this._v[0]=(t._m[7]-t._m[5])/e,this._v[1]=(t._m[2]-t._m[6])/n,this._v[2]=(t._m[3]-t._m[1])/n,this._v[3]=e},initWithMatrix4:function(t){var e=bg.Math.sqrt(1+t._m[0]+t._m[5]+t._m[10])/2,n=4*e;this._v[0]=(t._m[9]-t._m[6])/e,this._v[1]=(t._m[2]-t._m[8])/n,this._v[2]=(t._m[4]-t._m[1])/n,this._v[3]=e},getMatrix4:function(){var t=bg.Matrix4.Identity(),e=this._v;return t.setRow(0,new bg.Vector4(1-2*e[1]*e[1]-2*e[2]*e[2],2*e[0]*e[1]-2*e[2]*e[3],2*e[0]*e[2]+2*e[1]*e[3],0)),t.setRow(1,new bg.Vector4(2*e[0]*e[1]+2*e[2]*e[3],1-2*e[0]*e[0]-2*e[2]*e[2],2*e[1]*e[2]-2*e[0]*e[3],0)),t.setRow(2,new bg.Vector4(2*e[0]*e[2]-2*e[1]*e[3],2*e[1]*e[2]+2*e[0]*e[3],1-2*e[0]*e[0]-2*e[1]*e[1],0)),t},getMatrix3:function(){var t=bg.Matrix3.Identity(),e=this._v;return t.setRow(0,new bg.Vector3(1-2*e[1]*e[1]-2*e[2]*e[2],2*e[0]*e[1]-2*e[2]*e[3],2*e[0]*e[2]+2*e[1]*e[3])),t.setRow(1,new bg.Vector3(2*e[0]*e[1]+2*e[2]*e[3],1-2*e[0]*e[0]-2*e[2]*e[2],2*e[1]*e[2]-2*e[0]*e[3])),t.setRow(2,new bg.Vector3(2*e[0]*e[2]-2*e[1]*e[3],2*e[1]*e[2]+2*e[0]*e[3],1-2*e[0]*e[0]-2*e[1]*e[1])),t}},{MakeWithMatrix:function(t){return new e(t)}},t)}(i);bg.Quaternion=a}(),bg.physics={},function(){bg.physics.IntersectionType={NONE:0,POINT:1,LLINE:2};var t=function(){return $traceurRuntime.createClass(function(){this._type=null,this._p0=null,this._p1=null},{get type(){return this._type},get point(){return this._p0},get endPoint(){return this._p1},intersects:function(){return!1}},{RayToPlane:function(t,e){return new bg.physics.RayToPlaneIntersection(t,e)}})}();bg.physics.Intersection=t;var e=function(t){return $traceurRuntime.createClass(function t(e,n){$traceurRuntime.superConstructor(t).call(this),this._ray=null,this._p0=null,this._type=bg.physics.IntersectionType.POINT;var i=new bg.Vector3(n.origin),r=new bg.Vector3(n.normal),a=new bg.Vector3(e.start),s=new bg.Vector3(e.vector),o=i.sub(a).dot(r),u=s.dot(r);if(0!=u){var h=o/u;h>e.magnitude||(this._ray=bg.physics.Ray.RayWithVector(e.vector,e.start,h),this._p0=this._ray.end)}},{get ray(){return this._ray},intersects:function(){return null!=this._ray&&null!=this._p0}},{},t)}(bg.physics.Intersection);bg.physics.RayToPlaneIntersection=e}(),function(){var t=function(){return $traceurRuntime.createClass(function(){this._transform=bg.Matrix4.Identity()},{get transform(){return this._transform},set transform(t){this._transform=t},applyTransform:function(t){},calculateTransform:function(){}},{Factory:function(t){switch(t.type){case"LinkJoint":return e.Factory(t)}return null}})}();bg.physics.Joint=t,bg.physics.LinkTransformOrder={TRANSLATE_ROTATE:1,ROTATE_TRANSLATE:0};var e=function(t){function e(){$traceurRuntime.superConstructor(e).call(this),this._offset=new bg.Vector3,this._eulerRotation=new bg.Vector3,this._transformOrder=bg.physics.LinkTransformOrder.TRANSLATE_ROTATE}return $traceurRuntime.createClass(e,{applyTransform:function(t){t.mult(this.transform)},assign:function(t){this.yaw=t.yaw,this.pitch=t.pitch,this.roll=t.roll,this.offset.assign(t.offset),this.transformOrder=t.transformOrder},get offset(){return this._offset},set offset(t){this._offset=t,this.calculateTransform()},get eulerRotation(){return this._eulerRotation},set eulerRotation(t){this._eulerRotation=t,this.calculateTransform()},get yaw(){return this._eulerRotation.x},get pitch(){return this._eulerRotation.y},get roll(){return this._eulerRotation.z},set yaw(t){this._eulerRotation.x=t,this.calculateTransform()},set pitch(t){this._eulerRotation.y=t,this.calculateTransform()},set roll(t){this._eulerRotation.z=t,this.calculateTransform()},get transformOrder(){return this._transformOrder},set transformOrder(t){this._transformOrder=t,this.calculateTransform()},multTransform:function(t){var e=this.offset;switch(this.transformOrder){case bg.physics.LinkTransformOrder.TRANSLATE_ROTATE:t.translate(e.x,e.y,e.z),this.multRotation(t);break;case bg.physics.LinkTransformOrder.ROTATE_TRANSLATE:this.multRotation(t),t.translate(e.x,e.y,e.z)}},multRotation:function(t){t.rotate(this.eulerRotation.z,0,0,1).rotate(this.eulerRotation.y,0,1,0).rotate(this.eulerRotation.x,1,0,0)},calculateTransform:function(){this.transform.identity(),this.multTransform(this.transform)},serialize:function(t){t.type="LinkJoint",t.offset=[this.offset.x,this.offset.y,this.offset.z],t.yaw=this.yaw,t.pitch=this.pitch,t.roll=this.roll,t.order=this.order}},{Factory:function(t){var n=new e;return n.offset=new bg.Vector3(t.offset[0]||0,t.offset[1]||0,t.offset[2]||0),n.yaw=t.yaw||0,n.pitch=t.pitch||0,n.roll=t.roll||0,n.order=t.order||1,n}},t)}(t);bg.physics.LinkJoint=e}(),function(){var t=function(){return $traceurRuntime.createClass(function(t,e,n){if(t=t instanceof bg.Vector3&&t,e=e instanceof bg.Vector3&&e,n=n instanceof bg.Vector3&&n,t&&!e)this._normal=new bg.Vector3(t),this._origin=new bg.Vector3(0);else if(t&&e&&!n)this._normal=new bg.Vector3(t),this._origin=new bg.Vector3(e);else if(t&&e&&n){var i=new bg.Vector3(t);i.sub(e);var r=new bg.Vector3(n);r.sub(t),this._origin=new bg.Vector3(p1),this._normal=new bg.Vector3(i),this._normal.cross(r).normalize()}else this._origin=new bg.Vector3(0),this._normal=new bg.Vector3(0,1,0)},{get normal(){return this._normal},set normal(t){this._normal.assign(t)},get origin(){return this._origin},set origin(t){this._origin.assign(t)},toString:function(){return"P0: "+this._origin.toString()+", normal:"+this._normal.toString()},valid:function(){return!this._origin.isNan()&&!this._normal.isNan()},assign:function(t){return this._origin.assign(t._origin),this._normal.assign(t._normal),this},equals:function(t){return this._origin.equals(t._origin)&&this._normal.equals(t._normal)}},{})}();bg.physics.Plane=t}(),function(){function t(t){t._vector=new bg.Vector3(t._end),t._vector.sub(t._start),t._magnitude=t._vector.magnitude(),t._vector.normalize()}var e=function(){function e(e,n){this._start=e||new bg.Vector3,this._end=n||new bg.Vector3(1),t(this)}return $traceurRuntime.createClass(e,{setWithPoints:function(e,n){return this._start.assign(e),this._end.assign(n),t(),this},setWithVector:function(e,n,i){this._start.assign(n),this._end.assign(n);var r=new bg.Vector3(e);return r.normalize().scale(i),this._end.add(r),t(this),this},setWithScreenPoint:function(e,n,i,r){var a=bg.Matrix4.Unproject(e.x,e.y,0,i,n,r),s=bg.Matrix4.Unproject(e.x,e.y,1,i,n,r);return this._start=a.xyz,this._end=s.xyz,t(this),this},assign:function(t){this._start.assign(t.start),this._end.assign(t.end),this._vector.assign(t.vector),this._magnitude.assign(t.magnitude)},get start(){return this._start},set start(e){this._start.assign(e),t(this)},get end(){return this._end},set end(t){this._end.assign(t)},get vector(){return this._vector},get magnitude(){return this._magnitude},toString:function(){return"start: "+this.start.toString()+", end: "+this.end.toString()}},{RayWithPoints:function(t,n){return new e(t,n)},RayWithVector:function(t,n,i){var r=new e;return r.setWithVector(t,n,i),r},RayWithScreenPoint:function(t,n,i,r){var a=new e;return a.setWithScreenPoint(t,n,i,r),a}})}();bg.physics.Ray=e}(),bg.scene={},function(){var t={},e=function(e){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._node=null,this._drawGizmo=!0},{clone:function(){return bg.log("WARNING: Component with typeid "+this.typeId+" does not implmement the clone() method."),null},destroy:function(){},get node(){return this._node},get typeId(){return this._typeId},get draw3DGizmo(){return this._drawGizmo},set draw3DGizmo(t){this._drawGizmo=t},removedFromNode:function(t){},addedToNode:function(t){},get shouldSerialize(){return!0},deserialize:function(t,e,n){return Promise.resolve(this)},serialize:function(t,e,n){t.type=this.typeId.split(".").pop()},component:function(t){return this._node&&this._node.component(t)},get camera(){return this.component("bg.scene.Camera")},get chain(){return this.component("bg.scene.Chain")},get drawable(){return this.component("bg.scene.Drawable")},get inputChainJoint(){return this.component("bg.scene.InputChainJoint")},get outputChainJoint(){return this.component("bg.scene.OutputChainJoint")},get light(){return this.component("bg.scene.Light")},get transform(){return this.component("bg.scene.Transform")},get anchorJoint(){return this.component("bg.scene.AnchorJoint")}},{Factory:function(e,n,i,r){var a=t[n.type];if(a){var s=new a;return i.addComponent(s),s.deserialize(e,n,r)}return Promise.resolve()}},e)}(bg.LifeCycle);bg.scene.Component=e,bg.scene.registerComponent=function(e,n,i){var r=/function (.+)\(/.exec(n.toString());r||(r=/class ([a-zA-Z0-9_]+) /.exec(n.toString()));var a=r&&r.length>1?r[1]:"";e[a]=n,n.prototype._typeId=i||a,bg.scene.Node.prototype,t[a]=n}}(),function(){function t(){for(var t in this._componentsArray=[],this._components)this._components[t]&&this._componentsArray.push(this._components[t])}var e=function(e){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:"";$traceurRuntime.superConstructor(t).call(this,e),this._name=n,this._enabled=!0,this._steady=!1,this._components={},this._componentsArray=[]},{toString:function(){return" scene object: "+this._name},cloneComponents:function(){var t=new bg.scene.Node(this.context,this.name?"copy of "+this.name:"");return t.enabled=this.enabled,this.forEachComponent(function(e){t.addComponent(e.clone())}),t},get name(){return this._name},set name(t){this._name=t},get enabled(){return this._enabled},set enabled(t){this._enabled=t},get steady(){return this._steady},set steady(t){this._steady=t},addComponent:function(e){e._node&&e._node.removeComponent(e),e._node=this,this._components[e.typeId]=e,e.addedToNode(this),t.apply(this)},removeComponent:function(e){var n="",i=null;"string"==typeof e?(n=e,i=this.component(e)):e instanceof bg.scene.Component&&(i=e,n=e.typeId);var r=!1;return this._components[n]==i&&null!=i&&(delete this._components[n],i.removedFromNode(this),r=!0),t.apply(this),r},component:function(t){return this._components[t]},get camera(){return this.component("bg.scene.Camera")},get chain(){return this.component("bg.scene.Chain")},get drawable(){return this.component("bg.scene.Drawable")},get inputJoint(){return this.component("bg.scene.InputJoint")},get outputJoint(){return this.component("bg.scene.OutputJoint")},get light(){return this.component("bg.scene.Light")},get transform(){return this.component("bg.scene.Transform")},get anchorJoint(){return this.component("bg.scene.AnchorJoint")},forEachComponent:function(t){this._componentsArray.forEach(t)},someComponent:function(t){return this._componentsArray.some(t)},everyComponent:function(t){return this._componentsArray.every(t)},destroy:function(){var t=this;this.forEachComponent(function(e){e.removedFromNode(t)}),this._components={},this._componentsArray=[]},init:function(){this._componentsArray.forEach(function(t){t.init()})},frame:function(t){this._componentsArray.forEach(function(e){e._initialized_||(e.init(),e._initialized_=!0),e.frame(t)})},displayGizmo:function(t,e){this._componentsArray.forEach(function(n){n.draw3DGizmo&&n.displayGizmo(t,e)})},willDisplay:function(t,e){this._componentsArray.forEach(function(n){n.willDisplay(t,e)})},display:function(t,e){var n=void 0!==arguments[2]&&arguments[2];this._componentsArray.forEach(function(i){i.display(t,e,n)})},didDisplay:function(t,e){this._componentsArray.forEach(function(n){n.didDisplay(t,e)})},willUpdate:function(t,e,n){this._componentsArray.forEach(function(i){i.willUpdate(t,e,n)})},draw:function(t,e,n,i){this._componentsArray.forEach(function(r){r.draw(t,e,n,i)})},didUpdate:function(t,e,n){this._componentsArray.forEach(function(i){i.didUpdate(t,e,n)})},reshape:function(t,e,n,i){this._componentsArray.forEach(function(t){t.reshape(n,i)})},keyDown:function(t){this._componentsArray.forEach(function(e){e.keyDown(t)})},keyUp:function(t){this._componentsArray.forEach(function(e){e.keyUp(t)})},mouseUp:function(t){this._componentsArray.forEach(function(e){e.mouseUp(t)})},mouseDown:function(t){this._componentsArray.forEach(function(e){e.mouseDown(t)})},mouseMove:function(t){this._componentsArray.forEach(function(e){e.mouseMove(t)})},mouseOut:function(t){this._componentsArray.forEach(function(e){e.mouseOut(t)})},mouseDrag:function(t){this._componentsArray.forEach(function(e){e.mouseDrag(t)})},mouseWheel:function(t){this._componentsArray.forEach(function(e){e.mouseWheel(t)})},touchStart:function(t){this._componentsArray.forEach(function(e){e.touchStart(t)})},touchMove:function(t){this._componentsArray.forEach(function(e){e.touchMove(t)})},touchEnd:function(t){this._componentsArray.forEach(function(e){e.touchEnd(t)})}},{},e)}(function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._context=e},{get context(){return this._context},set context(t){this._context=t}},{},t)}(bg.LifeCycle));bg.scene.SceneObject=e}(),function(){var t=function(t){function e(t){var n=void 0!==arguments[1]?arguments[1]:"";$traceurRuntime.superConstructor(e).call(this,t,n),this._children=[],this._parent=null}return $traceurRuntime.createClass(e,{toString:function(){return $traceurRuntime.superGet(this,e.prototype,"toString").call(this)+" ("+this._children.length+" children and "+Object.keys(this._components).length+" components)"},addChild:function(t){t&&!this.isAncientOf(t)&&t!=this&&(t.parent&&t.parent.removeChild(t),this._children.push(t),t._parent=this)},removeChild:function(t){var e=this._children.indexOf(t);e>=0&&this._children.splice(e,1)},get children(){return this._children},get parent(){return this._parent},get sceneRoot(){return this._parent?this._parent.sceneRoot:this},haveChild:function(t){return-1!=this._children.indexOf(t)},isAncientOf:function(t){!function t(e,n){return!(!e||!n)&&(e._parent==n||t(e._parent,n))}(this,t)},accept:function(t){t.ignoreDisabled&&!this.enabled||(t.visit(this),this._children.forEach(function(e){e.accept(t)}),t.didVisit(this))},acceptReverse:function(t){t.ignoreDisabled&&!this.enabled||(this._parent&&this._parent.acceptReverse(t),t.visit(this))},destroy:function(){$traceurRuntime.superGet(this,e.prototype,"destroy").call(this),this._children.forEach(function(t){t.destroy()}),this._children=[]}},{CleanupNode:function(t){!function t(e){var n=[],i=[];e.forEachComponent(function(t){return n.push(t)}),e.children.forEach(function(t){return i.push(t)}),n.forEach(function(t){return e.removeComponent(t)}),i.forEach(function(n){e.removeChild(n),t(n)})}(t)}},t)}(bg.scene.SceneObject);bg.scene.Node=t;var e=function(){return $traceurRuntime.createClass(function(){this._ignoreDisabled=!0},{get ignoreDisabled(){return this._ignoreDisabled},set ignoreDisabled(t){this._ignoreDisabled=t},visit:function(t){},didVisit:function(t){}},{})}();bg.scene.NodeVisitor=e}(),function(){function t(t){if(!this._gizmo){var e=.5,n=[e,0,0,-e,0,0,0,e,0,0,-e,0,0,0,e,0,0,-e];this._gizmo=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(t,n,[1,0,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1])}return this._gizmo}var e=function(){function e(t,e){t instanceof bg.Vector3?this._offset=new bg.Vector3(t):this._offset=new bg.Vector3(0,0,0),this._radius="number"==typeof e?e:.15}return $traceurRuntime.createClass(e,{clone:function(){return new e(this._offset,this._radius)},get offset(){return this._offset},set offset(t){this._offset=t},get radius(){return this._radius},set radius(t){this._radius=t},displayGizmo:function(e,n,i){var r=t.apply(this,[e]);if(r){i.modelMatrixStack.push();var a=bg.Matrix4.Translation(this.offset.x,this.offset.y,this.offset.z);i.modelMatrixStack.mult(a),n.draw(r),i.modelMatrixStack.pop()}},serialize:function(){return{offset:this._offset.toArray(),radius:this._radius}},deserialize:function(t){t.offset&&(this._offset=new bg.Vector3(t.offset)),"number"==typeof t.radius?this._radius=t.radius:"string"==typeof t.radius&&(this._radius=Number(t.radius))}},{})}();bg.scene.AnchorPoint=e;var n=function(t){function n(){$traceurRuntime.superConstructor(n).call(this),this._anchors=[]}return $traceurRuntime.createClass(n,{clone:function(){var t=new n;return this.anchors.forEach(function(e){t.anchors.push(e.clone())}),t},get anchors(){return this._anchors},addPoint:function(t,e,n){var i=void 0!==arguments[3]?arguments[3]:.15,r=new bg.scene.AnchorPoint(new bg.Vector3(t,e,n),i);return this.anchors.push(r),r},getWorldPositionAnchors:function(){var t=this,e=[],n=bg.scene.Transform.WorldMatrix(this);return this.anchors.forEach(function(i){var r=n.multVector(new bg.Vector3(i.offset.x,i.offset.y,i.offset.z));e.push({position:[r.x,r.y,r.z],radius:i.radius,component:t})}),e},displayGizmo:function(t,e){var n=this;this.anchors.forEach(function(i){return i.displayGizmo(n.node.context,t,e)})},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.anchors=[],this.anchors.forEach(function(e){t.anchors.push(e.serialize())})},deserialize:function(t,n,i){var r=this;this._anchors=[],n.anchors.forEach(function(t){var n=new e;n.deserialize(t),r._anchors.push(n)})}},{},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,n,"bg.scene.AnchorJoint")}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._near=.1,this._far=100,this._viewport=new bg.Viewport(0,0,512,512)},{clone:function(){console.log("WARNING: ProjectionStrategy::clone() method not implemented by child class.")},get near(){return this._near},set near(t){this._near=t},get far(){return this._far},set far(t){this._far=t},get viewport(){return this._viewport},set viewport(t){this._viewport=t},get fov(){return 0},serialize:function(t){t.near=this.near,t.far=this.far}},{Factory:function(t){var r=null;return t&&("PerspectiveProjectionMethod"==t.type?r=new e:"OpticalProjectionMethod"==t.type?r=new n:"OrthographicProjectionStrategy"==t.type&&(r=new i),r&&r.deserialize(t)),r}},t)}(bg.MatrixStrategy);bg.scene.ProjectionStrategy=t;var e=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._fov=60}return $traceurRuntime.createClass(e,{clone:function(){var t=new e;return t.near=this.near,t.far=this.far,t.viewport=this.viewport,t.fov=this.fov,t},get fov(){return this._fov},set fov(t){this._fov=t},apply:function(){this.target&&this.target.perspective(this.fov,this.viewport.aspectRatio,this.near,this.far)},deserialize:function(t){this.near=t.near,this.far=t.far,this.fov=t.fov},serialize:function(t){t.type="PerspectiveProjectionMethod",t.fov=this.fov,$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t)}},{},t)}(t);bg.scene.PerspectiveProjectionStrategy=e;var n=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._focalLength=50,this._frameSize=35}return $traceurRuntime.createClass(e,{clone:function(){var t=new e;return t.near=this.near,t.far=this.far,t.viewport=this.viewport,t.focalLength=this.focalLength,t.frameSize=this.frameSize,t},get focalLength(){return this._focalLength},set focalLength(t){this._focalLength=t},get frameSize(){return this._frameSize},set frameSize(t){this._frameSize=t},get fov(){return 2*bg.Math.atan(this.frameSize/(this.focalLength/2))},apply:function(){if(this.target){var t=this.fov;t=bg.Math.radiansToDegrees(t),this.target.perspective(t,this.viewport.aspectRatio,this.near,this.far)}},deserialize:function(t){this.frameSize=t.frameSize,this.focalLength=t.focalLength,this.near=t.near,this.far=t.far},serialize:function(t){t.type="OpticalProjectionMethod",t.frameSize=this.frameSize,t.focalLength=this.focalLength,$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t)}},{},t)}(t);bg.scene.OpticalProjectionStrategy=n;var i=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t),this._viewWidth=100}return $traceurRuntime.createClass(e,{clone:function(){var t=new e;return t.near=this.near,t.far=this.far,t.viewWidth=this.viewWidth,t},get viewWidth(){return this._viewWidth},set viewWidth(t){this._viewWidth=t},apply:function(){if(this.target){var t=this.viewport.aspectRatio,e=this.viewWidth/t,n=this.viewWidth/2,i=e/2;this.target.ortho(-n,n,-i,i,-this._far,this._far)}},deserialize:function(t){this.viewWidth=t.viewWidth,this.near=t.near,this.far=t.far},serialize:function(t){t.type="OrthographicProjectionStrategy",t.viewWidth=this.viewWidth,t.near=this.near,t.far=this.far,$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t)}},{},t)}(t);function r(){if(!this._gizmo){var t=this.projectionStrategy?this.projectionStrategy.fov:bg.Math.PI_4;t*=.5;var e=this.focus,n=bg.app.MainLoop.singleton.canvas.width/bg.app.MainLoop.singleton.canvas.height,i=bg.Math.sin(t)*e,r=bg.Math.sin(t)*e/n,a=[0,0,0,i,r,-e,0,0,0,-i,r,-e,0,0,0,i,-r,-e,0,0,0,-i,-r,-e,i,r,-e,-i,r,-e,-i,r,-e,-i,-r,-e,-i,-r,-e,i,-r,-e,i,-r,-e,i,r,-e];this._gizmo=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(this.node.context,a,[1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1])}return this._gizmo}bg.scene.OrthographicProjectionStrategy=i;var a=function(e){function n(){$traceurRuntime.superConstructor(n).call(this),this._projection=bg.Matrix4.Perspective(60,1,.1,100),this._viewport=new bg.Viewport(0,0,512,512),this._visitor=new bg.scene.TransformVisitor,this._rebuildTransform=!0,this._position=new bg.Vector3(0),this._rebuildPosition=!0,this._clearBuffers=bg.base.ClearBuffers.COLOR_DEPTH,this._focus=5,this._projectionStrategy=null,this._isMain=!1}return $traceurRuntime.createClass(n,{clone:function(){var t=new bg.scene.Camera;return t._projection=new bg.Matrix4(this._projection),t._viewport=new bg.Matrix4(this._viewport),t._projectionStrategy=this._projectionStrategy?this._projectionStrategy.clone():null,t},get projection(){return this._projection},set projection(t){this._projectionStrategy||(this._projection=t)},get viewport(){return this._viewport},set viewport(t){this._viewport=t,this._projectionStrategy&&(this._projectionStrategy.viewport=t,this._projectionStrategy.apply())},get focus(){return this._focus},set focus(t){this._focus=t,this.recalculateGizmo()},get isMain(){return this._isMain},set isMain(t){this._isMain=t},get projectionStrategy(){return this._projectionStrategy},set projectionStrategy(t){this._projectionStrategy=t,this._projectionStrategy&&(this._projectionStrategy.target=this._projection),this.recalculateGizmo()},get clearBuffers(){return this._clearBuffers},set clearBuffers(t){this._clearBuffers=t},get modelMatrix(){return this._rebuildTransform&&this.node&&(this._visitor.matrix.identity(),this.node.acceptReverse(this._visitor),this._rebuildTransform=!1),this._visitor.matrix},get viewMatrix(){return this._viewMatrix&&!this._rebuildTransform||(this._viewMatrix=new bg.Matrix4(this.modelMatrix),this._viewMatrix.invert()),this._viewMatrix},get worldPosition(){return this._rebuildPosition&&(this._position=this.modelMatrix.multVector(new bg.Vector3(0)).xyz,this._rebuildPosition=!1,this._rebuildTransform=!0),this._position},recalculateGizmo:function(){this._gizmo&&(this._gizmo.destroy(),this._gizmo=null)},frame:function(t){this._rebuildPosition=!0,this._rebuildTransform=!0},displayGizmo:function(t,e){if(!this.isMain){var n=r.apply(this);n&&t.draw(n)}},serialize:function(t,e,i){if($traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.isMain=this.isMain,this.projectionStrategy){var r={};t.projectionMethod=r,this.projectionStrategy.serialize(r)}},deserialize:function(e,n,i){n.isMain=n.isMain||!1,this.projectionStrategy=t.Factory(n.projectionMethod||{})}},{SetAsMainCamera:function(t,e){if(function t(e){e.camera&&(e.camera.isMain=!1),e.children.forEach(function(e){return t(e)})}(e),t instanceof n)t.isMain=!0;else{if(!(t instanceof bg.scene.Node&&t.camera))throw new Error("Error setting main camera: invalid camera node.");t.camera.isMain=!0}}},e)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,a,"bg.scene.Camera")}(),function(){function t(t){if(!this._gizmo){var e=.5,n=[e,0,0,-e,0,0,0,e,0,0,-e,0,0,0,e,0,0,-e];this._gizmo=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(this.node.context,n,[1,0,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1])}return this._gizmo}function e(){if(this.node){var t=bg.Matrix4.Identity();this.node.children.forEach(function(e,n){var i=e.component("bg.scene.Transform"),r=e.component("bg.scene.InputChainJoint"),a=e.component("bg.scene.OutputChainJoint");n>0&&r?r.joint.applyTransform(t):t.identity(),i&&i.matrix.assign(t),a&&a.joint.applyTransform(t)})}}var n=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this)},{clone:function(){return new bg.scene.Chain},willDisplay:function(t,n,i){e.apply(this)},willUpdate:function(t,n,i){e.apply(this)}},{},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,n,"bg.scene.Chain");var i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._joint=new bg.physics.LinkJoint},{get joint(){return this._joint},set joint(t){this._joint=t},deserialize:function(t,e,n){e.joint&&(this.joint=bg.physics.Joint.Factory(e.joint))}},{},t)}(bg.scene.Component);bg.scene.ChainJoint=i;var r=function(e){function n(t){$traceurRuntime.superConstructor(n).call(this),t?this.joint=t:this.joint.transformOrder=bg.physics.LinkTransformOrder.ROTATE_TRANSLATE}return $traceurRuntime.createClass(n,{clone:function(){var t=new bg.scene.InputChainJoint;return t.joint.assign(this.joint),t},displayGizmo:function(e,n){var i=t.apply(this,[0]);if(i){n.modelMatrixStack.push();var r=new bg.Matrix4(this.joint.transform);r.invert(),n.modelMatrixStack.mult(r),e.draw(i),n.modelMatrixStack.pop()}},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.joint={},this.joint.serialize(t.joint)}},{},e)}(i);bg.scene.registerComponent(bg.scene,r,"bg.scene.InputChainJoint");var a=function(e){function n(t){$traceurRuntime.superConstructor(n).call(this),t?this.joint=t:this.joint.transformOrder=bg.physics.LinkTransformOrder.TRANSLATE_ROTATE}return $traceurRuntime.createClass(n,{clone:function(){var t=new bg.scene.OutputChainJoint;return t.joint.assign(this.joint),t},displayGizmo:function(e,n){var i=t.apply(this,[1]);if(i){n.modelMatrixStack.push();var r=new bg.Matrix4(this.joint.transform);n.modelMatrixStack.mult(r),e.draw(i),n.modelMatrixStack.pop()}},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.joint={},this.joint.serialize(t.joint)}},{},e)}(i);bg.scene.registerComponent(bg.scene,a,"bg.scene.OutputChainJoint")}(),function(){bg.scene.CubemapImage={POSITIVE_X:0,NEGATIVE_X:1,POSITIVE_Y:2,NEGATIVE_Y:3,POSITIVE_Z:4,NEGATIVE_Z:5};var t=null,e=null,n=[],i=1;function r(t,e,n){var i=require("path"),r=bg.base.Writer.StandarizePath(this.getImageUrl(e)),a=r.split("/").pop(),s=bg.base.Writer.StandarizePath(i.join(n,a));switch(e){case bg.scene.CubemapImage.POSITIVE_X:t.positiveX=a;break;case bg.scene.CubemapImage.NEGATIVE_X:t.negativeX=a;break;case bg.scene.CubemapImage.POSITIVE_Y:t.positiveY=a;break;case bg.scene.CubemapImage.NEGATIVE_Y:t.negativeY=a;break;case bg.scene.CubemapImage.POSITIVE_Z:t.positiveZ=a;break;case bg.scene.CubemapImage.NEGATIVE_Z:t.negativeZ=a}return bg.base.Writer.CopyFile(r,s)}var a=function(a){function s(){$traceurRuntime.superConstructor(s).call(this),this._images=[null,null,null,null,null,null],this._texture=null}return $traceurRuntime.createClass(s,{setImageUrl:function(t,e){this._images[t]=e},getImageUrl:function(t){return this._images[t]},get texture(){return this._texture},set texture(t){this._texture=t},loadCubemap:function(e){var n=this;return e=e||this.node&&this.node.context,new Promise(function(i,r){bg.utils.Resource.LoadMultiple(n._images).then(function(r){n._texture=new bg.base.Texture(e),n._texture.target=bg.base.TextureTarget.CUBE_MAP,n._texture.create(),n._texture.bind(),n._texture.setCubemap(r[n.getImageUrl(bg.scene.CubemapImage.POSITIVE_X)],r[n.getImageUrl(bg.scene.CubemapImage.NEGATIVE_X)],r[n.getImageUrl(bg.scene.CubemapImage.POSITIVE_Y)],r[n.getImageUrl(bg.scene.CubemapImage.NEGATIVE_Y)],r[n.getImageUrl(bg.scene.CubemapImage.POSITIVE_Z)],r[n.getImageUrl(bg.scene.CubemapImage.NEGATIVE_Z)]),t=n._texture,bg.emitImageLoadEvent(r[n.getImageUrl(bg.scene.CubemapImage.POSITIVE_X)]),i(n)}).catch(function(t){r(t)})})},clone:function(){var t=new s;for(var e in this._images)t._images[e]=this._images[e];return t._texture=this._texture,t},deserialize:function(t,e,n){return this.setImageUrl(bg.scene.CubemapImage.POSITIVE_X,bg.utils.Resource.JoinUrl(n,e.positiveX)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_X,bg.utils.Resource.JoinUrl(n,e.negativeX)),this.setImageUrl(bg.scene.CubemapImage.POSITIVE_Y,bg.utils.Resource.JoinUrl(n,e.positiveY)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_Y,bg.utils.Resource.JoinUrl(n,e.negativeY)),this.setImageUrl(bg.scene.CubemapImage.POSITIVE_Z,bg.utils.Resource.JoinUrl(n,e.positiveZ)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_Z,bg.utils.Resource.JoinUrl(n,e.negativeZ)),this.loadCubemap(t)},serialize:function(t,e,n){$traceurRuntime.superGet(this,s.prototype,"serialize").call(this,t,e,n),bg.isElectronApp&&(e.push(r.apply(this,[t,bg.scene.CubemapImage.POSITIVE_X,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.NEGATIVE_X,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.POSITIVE_Y,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.NEGATIVE_Y,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.POSITIVE_Z,n.path])),e.push(r.apply(this,[t,bg.scene.CubemapImage.NEGATIVE_Z,n.path])))}},{Current:function(e){return t||(t=bg.base.TextureCache.WhiteCubemap(e)),t},IrradianceMapIntensity:function(){return i},IrradianceMap:function(t){return e||(e=bg.base.TextureCache.BlackCubemap(t)),e},SpecularMap:function(t){var e=void 0!==arguments[1]?arguments[1]:0;return n[e]||(n[e]=bg.base.TextureCache.BlackCubemap(t)),n[e]},SetCurrent:function(e){t=e},SetIrradianceMapIntensity:function(t){i=t},SetIrradiance:function(t){e=t},SetSpecular:function(t){var e=void 0!==arguments[1]?arguments[1]:0;n[e]=t}},a)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,a,"bg.scene.Cubemap")}(),function(){var t=function(t){function e(){var t=void 0!==arguments[0]?arguments[0]:"";$traceurRuntime.superConstructor(e).call(this),this._name=t,this._items=[]}return $traceurRuntime.createClass(e,{get name(){return this._name},set name(t){this._name=t},get length(){return this._items.length},clone:function(t){var e=new bg.scene.Drawable;return e.name=t||"copy of "+this.name,this.forEach(function(t,n,i){e.addPolyList(t.clone(),n.clone(),i?new bg.Matrix4(i):null)}),e},destroy:function(){this.forEach(function(t,e){t.destroy(),e&&e.destroy&&e.destroy()}),this._name="",this._items=[]},instance:function(t){var e=new bg.scene.Drawable;return e.name=t||"copy of "+this.name,this.forEach(function(t,n,i){e.addPolyList(t,n.clone(),i?new bg.Matrix4(i):null)}),e},addPolyList:function(t,e){var n=void 0!==arguments[2]?arguments[2]:null;return!(!t||-1!=this.indexOf(t))&&(this._updated=!1,e=e||new bg.base.Material,this._items.push({polyList:t,material:e,transform:n}),!0)},getExternalResources:function(){var t=void 0!==arguments[0]?arguments[0]:[];return this.forEach(function(e,n){n.getExternalResources(t)}),t},applyMaterialDefinition:function(t,e){var n=[];return this.forEach(function(i,r){var a=t[i.name];a&&n.push(new Promise(function(t,n){var s=new bg.base.MaterialModifier(a);r.applyModifier(i.context,s,e),t()}))}),Promise.all(n)},removePolyList:function(t){var e=-1;this._items.some(function(n,i){t==n.polyList&&(e=i)}),e>=0&&this._items.splice(e,1),this._updated=!1},indexOf:function(t){var e=-1;return this._items.some(function(n,i){if(n.polyList==t)return e=i,!0}),e},replacePolyList:function(t,e){return t>=0&&t<this._items.length?(this._items[t].polyList=e,!0):(this._updated=!1,!1)},replaceMaterial:function(t,e){return t>=0&&t<this._items.length&&(this._items[t].material.destroy&&this._items[t].material.destroy(),this._items[t].material=e,!0)},replaceTransform:function(t,e){return t>=0&&t<this._items.length&&(this._items[t].transform=e,!0)},getPolyList:function(t){return t>=0&&t<this._items.length&&this._items[t].polyList},getMaterial:function(t){return t>=0&&t<this._items.length&&this._items[t].material},getTransform:function(t){return t>=0&&t<this._items.length&&this._items[t].transform},forEach:function(t){var e=!0,n=!1,i=void 0;try{for(var r=void 0,a=this._items[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var s=r.value;t(s.polyList,s.material,s.transform)}}catch(t){n=!0,i=t}finally{try{e||null==a.return||a.return()}finally{if(n)throw i}}},some:function(t){var e=!0,n=!1,i=void 0;try{for(var r=void 0,a=this._items[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var s=r.value;if(t(s.polyList,s.material,s.transform))return!0}}catch(t){n=!0,i=t}finally{try{e||null==a.return||a.return()}finally{if(n)throw i}}return!1},every:function(t){var e=!0,n=!1,i=void 0;try{for(var r=void 0,a=this._items[Symbol.iterator]();!(e=(r=a.next()).done);e=!0){var s=r.value;if(!t(s.polyList,s.material,s.transform))return!1}}catch(t){n=!0,i=t}finally{try{e||null==a.return||a.return()}finally{if(n)throw i}}return!0},display:function(t,e){var n=void 0!==arguments[2]&&arguments[2];if(!t.effect)throw new Error("Could not draw component: invalid effect found.");var i=t.effect instanceof bg.base.ShadowMapEffect;this.node.enabled&&this.forEach(function(r,a,s){if(!i&&r.visible||i&&r.visibleToShadows||n){var o=t.effect.material;s&&(e.modelMatrixStack.push(),e.modelMatrixStack.mult(s)),t.shouldDraw(a)&&(t.effect.material=a,t.draw(r)),s&&e.modelMatrixStack.pop(),t.effect.material=o}})},draw:function(t,e,n,i){this.node.enabled&&this.forEach(function(i,r,a){i.visible&&(a&&(e.push(),e.mult(a)),r.isTransparent?t.renderTransparent(i,r,e.matrix,n.matrix):t.renderOpaque(i,r,e.matrix,n.matrix),a&&e.pop(a))})},displayGizmo:function(t,e){this._updated||(this._updated=!0,this._gizmoPlist=function(){var t=[],e=[],n=[],i=[],r=[],a=!1,s=0;try{this.forEach(function(o){if(o.normal.length&&o.tangent.length&&o.index.length%3==0){a=!0;for(var u=0;u<o.index.length;++u){var h=o.index[u],l=new bg.Vector3(o.vertex[3*h],o.vertex[3*h+1],o.vertex[3*h+2]),c=new bg.Vector3(o.normal[3*h],o.normal[3*h+1],o.normal[3*h+2]),f=new bg.Vector3(o.tangent[3*h],o.tangent[3*h+1],o.tangent[3*h+2]),v=new bg.Vector3(c);v.cross(f),c.scale(.4),f.scale(.4),v.scale(.4),c.add(l),f.add(l),v.add(l),t.push(l.x,l.y,l.z),e.push(0,1,0),n.push(0,0),i.push(0,1,0,1),t.push(c.x,c.y,c.z),e.push(0,1,0),n.push(0,1),i.push(0,1,0,1),t.push(l.x,l.y,l.z),e.push(0,1,0),n.push(0,0),i.push(1,0,0,1),t.push(f.x,f.y,f.z),e.push(0,1,0),n.push(0,1),i.push(1,0,0,1),t.push(l.x,l.y,l.z),e.push(0,1,0),n.push(0,0),i.push(0,0,1,1),t.push(v.x,v.y,v.z),e.push(0,1,0),n.push(0,1),i.push(0,0,1,1),r.push(s++),r.push(s++),r.push(s++),r.push(s++),r.push(s++),r.push(s++)}}})}catch(t){console.warn("Error generating drawable gizmo: "+t.message)}var o=null;return a&&((o=new bg.base.PolyList(this.node.context)).vertex=t,o.normal=e,o.texCoord0=n,o.index=r,o.color=i,o.drawMode=bg.base.DrawMode.LINES,o.build()),o}.apply(this)),this._gizmoPlist&&t.draw(this._gizmoPlist)},setGroupVisible:function(t){var e=void 0===arguments[1]||arguments[1];this.forEach(function(n){n.groupName==t&&(n.visible=e)})},hideGroup:function(t){this.setGroupVisible(t,!1)},showGroup:function(t){this.setGroupVisible(t,!0)},setVisibleByName:function(t){var e=void 0===arguments[1]||arguments[1];this.some(function(n){if(n.name==t)return n.visible=e,!0})},showByName:function(t){this.setVisibleByName(t,!0)},hideByName:function(t){this.setVisibleByName(t,!1)},deserialize:function(t,e,n){var i=this;return new Promise(function(r,a){var s=bg.utils.Resource.JoinUrl(n,e.name+".vwglb");bg.base.Loader.Load(t,s).then(function(t){var n=t.component("bg.scene.Drawable");i._name=e.name,i._items=n._items,r(i)})})},serialize:function(t,n,i){var r=this;if(bg.isElectronApp){$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t,n,i),this.name=function(t){if(t){var e=/[\/\?<>\\:\*\|":\[\]\(\)\{\}]/g,n=/[\x00-\x1f\x80-\x9f]/g,i=/^\.+$/,r=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,a=/[\. ]+$/;return s="-",t.replace(e,s).replace(n,s).replace(i,s).replace(r,s).replace(a,s)}return bg.utils.generateUUID();var s}(this.name),t.name=this.name;var a=require("path").join(i.path,t.name+".vwglb");n.push(new Promise(function(t,e){bg.base.Writer.Write(a,r.node).then(function(){return t()}).catch(function(t){return e(t)})}))}}},{InstanceNode:function(t){var n=new bg.scene.Node(t.context,t.name?"copy of "+t.name:"");return n.enabled=t.enabled,t.forEachComponent(function(t){var i=null;i=t instanceof e?t.instance():t.clone(),n.addComponent(i)}),n}},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,t,"bg.scene.Drawable")}(),function(){var t=null,e=function(e){function n(){var t=void 0!==arguments[0]?arguments[0]:null;$traceurRuntime.superConstructor(n).call(this),this._environment=t}return $traceurRuntime.createClass(n,{initCubemap:function(t,e){this._environment&&this._environment.destroy(),this._environment=new bg.base.Environment(t.context),this._environment.create(e),this._environment.equirectangularTexture=t},init:function(){null==t&&(t=this)},removedFromNode:function(){t==this&&(t=null)},get environment(){return this._environment},set environment(t){this._environment&&this._environment.destroy(),this._environment=t},get equirectangularTexture(){return this._environment&&this._environment.equirectangularTexture},set equirectangularTexture(t){this._environment?this._environment.equirectangularTexture=t:this.initCubemap(t)},clone:function(){var t=new n;return t._environment=this._environment&&this._environment.clone(),t},deserialize:function(t,e,n){var i=this;return new Promise(function(r,a){i._environment&&i._environment.destroy(),i._environment=new bg.base.Environment(t),i._environment.deserialize(e,n).then(function(){r()}).catch(function(t){a(t)})})},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),bg.isElectronApp&&this._environment&&this._environment.serialize(t,e,i)}},{Get:function(){return t}},e)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,e,"bg.scene.Environment")}(),function(){var t=[];function e(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}function n(){switch(this._light&&this._light.type){case bg.base.LightType.DIRECTIONAL:return function(t){if(!this._directionalGizmo){var n=this.node.context;this._directionalGizmo=e(n,[0,0,0,0,0,-1,0,0,-1,0,.1,-.9,0,0,-1,0,-.1,-.9],[1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1])}return this._directionalGizmo}.apply(this);case bg.base.LightType.SPOT:return function(){var t=this.node.context,n=bg.Math.degreesToRadians(this.light.spotCutoff/2),i=5*bg.Math.sin(n),r=5*bg.Math.cos(n),a=bg.Math.cos(bg.Math.PI_8)*i,s=bg.Math.cos(bg.Math.PI_4)*i,o=bg.Math.cos(bg.Math.PI_4+bg.Math.PI_8)*i,u=bg.Math.sin(bg.Math.PI_8)*i,h=bg.Math.sin(bg.Math.PI_4)*i,l=bg.Math.sin(bg.Math.PI_4+bg.Math.PI_8)*i,c=[0,0,0,0,i,-r,0,0,0,0,-i,-r,0,0,0,i,0,-r,0,0,0,-i,0,-r,0,i,-r,o,l,-r,o,l,-r,s,h,-r,s,h,-r,a,u,-r,a,u,-r,i,0,-r,i,0,-r,a,-u,-r,a,-u,-r,s,-h,-r,s,-h,-r,o,-l,-r,o,-l,-r,0,-i,-r,0,-i,-r,-o,-l,-r,-o,-l,-r,-s,-h,-r,-s,-h,-r,-a,-u,-r,-a,-u,-r,-i,0,-r,-i,0,-r,-a,u,-r,-a,u,-r,-s,h,-r,-s,h,-r,-o,l,-r,-o,l,-r,0,i,-r],f=[1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1];return this._spotGizmo?(this._spotGizmo.updateBuffer(bg.base.BufferType.VERTEX,c),this._spotGizmo.updateBuffer(bg.base.BufferType.COLOR,f)):this._spotGizmo=e(t,c,f),this._spotGizmo}.apply(this);case bg.base.LightType.POINT:return function(){if(!this._pointGizmo){var t=this.node.context,n=.5,i=bg.Math.sin(bg.Math.PI_4)*n,r=[0,0,0,0,n,0,0,0,0,0,-n,0,0,0,0,-n,0,0,0,0,0,n,0,0,0,0,0,i,i,0,0,0,0,i,-i,0,0,0,0,-i,i,0,0,0,0,-i,-i,0,0,0,0,0,0,n,0,0,0,0,0,-n,0,0,0,0,i,i,0,0,0,0,-i,i,0,0,0,0,-i,-i,0,0,0,0,i,-i,0,0,0,i,0,i,0,0,0,-i,0,i,0,0,0,-i,0,-i,0,0,0,i,0,-i];this._pointGizmo=e(t,r,[1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1])}return this._pointGizmo}.apply(this)}return null}var i=function(e){function i(){var t=void 0!==arguments[0]?arguments[0]:null;$traceurRuntime.superConstructor(i).call(this),this._light=t,this._visitor=new bg.scene.TransformVisitor,this._rebuildTransform=!0}return $traceurRuntime.createClass(i,{clone:function(){var t=new bg.scene.Light;return t.light=this.light.clone(),t},get light(){return this._light},set light(t){this._light=t},get transform(){return this._rebuildTransform&&this.node&&(this._visitor.matrix.identity(),this.node.acceptReverse(this._visitor),this._rebuildTransform=!1),this._visitor.matrix},frame:function(t){this._rebuildTransform=!0,this.transform},displayGizmo:function(t,e){var i=n.apply(this);i&&t.draw(i)},removedFromNode:function(e){var n,i;n=this,-1!=(i=t.indexOf(n))&&t.splice(i,1)},addedToNode:function(e){var n;n=this,t.push(n)},deserialize:function(t,e,n){var i=this;return new Promise(function(n,r){i._light=new bg.base.Light(t),i._light.deserialize(e),n(i)})},serialize:function(t,e,n){$traceurRuntime.superGet(this,i.prototype,"serialize").call(this,t,e,n),this.light.serialize(t)}},{GetActiveLights:function(){return t}},e)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,i,"bg.scene.Light")}(),function(){function t(t){return[Number(t[1]),Number(t[2]),Number(t[3]),t[4]?Number(t[4]):1]}var e={diffuseR:1,diffuseG:1,diffuseB:1,diffuseA:1,specularR:1,specularG:1,specularB:1,specularA:1,shininess:0,lightEmission:0,refractionAmount:0,reflectionAmount:0,textureOffsetX:0,textureOffsetY:0,textureScaleX:1,textureScaleY:1,lightmapOffsetX:0,lightmapOffsetY:0,lightmapScaleX:1,lightmapScaleY:1,normalMapOffsetX:0,normalMapOffsetY:0,normalMapScaleX:1,normalMapScaleY:1,alphaCutoff:.5,castShadows:!0,receiveShadows:!0,shininessMaskChannel:0,shininessMaskInvert:!1,lightEmissionMaskChannel:0,lightEmissionMaskInvert:!1,reflectionMaskChannel:0,reflectionMaskInvert:!1,cullFace:!0,texture:"",lightmap:"",normalMap:"",shininessMask:"",lightEmissionMask:"",reflectionMask:""},n=function(){return $traceurRuntime.createClass(function(n){var i=this;this._jsonData={},this._currentMat=JSON.parse(JSON.stringify(e)),n.split("\n").forEach(function(n){if((n=n.trim()).length>1&&"#"!=n[0])switch(n[0]){case"n":(function(t){var n=/newmtl\s+(.*)/.exec(t);n&&(this._jsonData[n[1]]=JSON.parse(JSON.stringify(e)),this._currentMat=this._jsonData[n[1]])}).apply(i,[n]);break;case"N":(function(t){var e=/Ns\s+([\d\.]+)/.exec(t);e&&(this._currentMat.shininess=Number(e[1]))}).apply(i,[n]);break;case"m":(function(t){var e=/map_Kd\s+(.*)/.exec(t);if(e){var n=e[1],i=(n=n.replace(/\\/g,"/")).lastIndexOf("/");i>=0&&(n=n.substring(i+1)),this._currentMat.texture=n}}).apply(i,[n]);break;case"d":case"T":break;case"K":(function(e){var n=/Kd\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s*([\d\.]*)/.exec(e);if(n){var i=t(n);this._currentMat.diffuseR=i[0],this._currentMat.diffuseG=i[1],this._currentMat.diffuseB=i[2],this._currentMat.diffuseA=i[3]}else if(n=/Ks\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s*([\d\.]*)/.exec(e)){var r=t(n);this._currentMat.specularR=r[0],this._currentMat.specularG=r[1],this._currentMat.specularB=r[2],this._currentMat.specularA=r[3]}}).apply(i,[n])}})},{get jsonData(){return this._jsonData}},{})}();function i(t){var e=/mtllib\s+(.*)/.exec(t);e&&(this._mtlLib=e[1])}function r(t){var e=/g\s+(.*)/.exec(t);e&&(this._currentPlist.name=e[1])}function a(t){var e=/usemtl\s+(.*)/.exec(t);e&&(this._currentPlist._matName=e[1],""==this._currentPlist.name&&(this._currentPlist.name=e[1]))}function s(t){/s\s+(.*)/.exec(t)}function o(t){this._currentPlist.vertex.push(t.vertex[0],t.vertex[1],t.vertex[2]),t.normal&&this._currentPlist.normal.push(t.normal[0],t.normal[1],t.normal[2]),t.tex&&this._currentPlist.texCoord0.push(t.tex[0],t.tex[1]),this._currentPlist.index.push(this._currentPlist.index.length)}function u(t){return t&&t.vertex&&t.tex&&t.normal}function h(t){this._addPlist=!0;var e=/f\s+(.*)/.exec(t);if(e){var n=e[1],i=/([\d\-]+)\/([\d\-]*)\/([\d\-]*)/g;if(-1==n.indexOf("/"));for(var r=[];e=i.exec(n);){var a=Number(e[1]),s=e[3]?Number(e[3]):null,h=e[2]?Number(e[2]):null;a=a<0?this._vertexArray.length+a:a-1,s=s<0?this._normalArray.length+s:null===s?null:s-1,h=h<0?this._texCoordArray.length+h:null===h?null:h-1;var l=this._vertexArray[a],c=null!==s?this._normalArray[s]:null,f=null!==h?this._texCoordArray[h]:null;r.push({vertex:l,normal:c,tex:f})}(function(t){var e=0,n=t.length;if(!(n<3))for(;e<n;){var i=e+1,r=e+2;r==n?r=0:i==n&&(i=0,r=2);var a=t[e],s=t[i],h=t[r];u(a)&&u(s)&&u(h)?(o.apply(this,[a]),o.apply(this,[s]),o.apply(this,[h])):console.warn("Invalid point data found loading OBJ file"),e+=3}}).apply(this,[r])}}function l(t){var e=/s\s+(.*)/.exec(t);e&&""==this._currentPlist.name&&(this._currentPlist.name=e[1])}function c(){this._addPlist&&(this._currentPlist&&(this._currentPlist.build(),this._plistArray.push(this._currentPlist)),this._currentPlist=new bg.base.PolyList(this.context),this._addPlist=!1)}var f=function(){return $traceurRuntime.createClass(function(t,e){this.context=t,this.url=e,this._plistArray=[],this._vertexArray=[],this._normalArray=[],this._texCoordArray=[],this._mtlLib="",this._addPlist=!0},{loadDrawableSync:function(t){var e=void 0!==arguments[1]?arguments[1]:"Object",n=this,o=new bg.scene.Drawable(e),u=t.split("\n"),f="";return u.forEach(function(t){if(t=t.trim(),f&&(t=f+t),"\\"==t[t.length-1])return t=t.substring(0,t.length-1),void(f+=t);if(f="",t.length>1&&"#"!=t[0])switch(t[0]){case"v":var e=/v\s+([\d\.\-e]+)\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t);e?n._vertexArray.push([Number(e[1]),Number(e[2]),Number(e[3])]):(e=/vn\s+([\d\.\-e]+)\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t))?n._normalArray.push([Number(e[1]),Number(e[2]),Number(e[3])]):(e=/vt\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t))?n._texCoordArray.push([Number(e[1]),Number(e[2])]):console.warn("Error parsing line "+t);break;case"m":c.apply(n),i.apply(n,[t]);break;case"g":c.apply(n),r.apply(n,[t]);break;case"u":c.apply(n),a.apply(n,[t]);break;case"s":s.apply(n,[t]);break;case"f":h.apply(n,[t]);break;case"o":c.apply(n),l.apply(n,[t])}}),this._currentPlist&&this._addPlist&&(this._currentPlist.build(),this._plistArray.push(this._currentPlist)),function(t,e){var n=this;t.forEach(function(t){var i=new bg.base.Material,r=e[t._matName];if(r){var a=n.url.substring(0,n.url.lastIndexOf("/")+1);bg.base.Material.GetMaterialWithJson(n.context,r,a).then(function(e){o.addPolyList(t,e)})}else o.addPolyList(t,i)})}.apply(this,[this._plistArray,{}]),o},loadDrawable:function(t){var e=this;return new Promise(function(o,u){var f=e.url.replace(/[\\\/]/gi,"-"),v=new bg.scene.Drawable(f),g=t.split("\n"),m="";function d(t,e){var n=this;t.forEach(function(t){var i=new bg.base.Material,r=e[t._matName];if(r){var a=n.url.substring(0,n.url.lastIndexOf("/")+1);bg.base.Material.GetMaterialWithJson(n.context,r,a).then(function(e){v.addPolyList(t,e)})}else v.addPolyList(t,i)})}if(g.forEach(function(t){if(t=t.trim(),m&&(t=m+t),"\\"==t[t.length-1])return t=t.substring(0,t.length-1),void(m+=t);if(m="",t.length>1&&"#"!=t[0])switch(t[0]){case"v":var n=/v\s+([\d\.\-e]+)\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t);n?e._vertexArray.push([Number(n[1]),Number(n[2]),Number(n[3])]):(n=/vn\s+([\d\.\-e]+)\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t))?e._normalArray.push([Number(n[1]),Number(n[2]),Number(n[3])]):(n=/vt\s+([\d\.\-e]+)\s+([\d\.\-e]+)/.exec(t))?e._texCoordArray.push([Number(n[1]),Number(n[2])]):console.warn("Error parsing line "+t);break;case"m":c.apply(e),i.apply(e,[t]);break;case"g":c.apply(e),r.apply(e,[t]);break;case"u":c.apply(e),a.apply(e,[t]);break;case"s":s.apply(e,[t]);break;case"f":h.apply(e,[t]);break;case"o":c.apply(e),l.apply(e,[t])}}),e._currentPlist&&e._addPlist&&(e._currentPlist.build(),e._plistArray.push(e._currentPlist)),e._mtlLib){var p=e.url.substring(0,e.url.lastIndexOf("/"));p.length>0&&"/"!=p&&(p+="/"),bg.utils.Resource.Load(p+e._mtlLib).then(function(t){var i;d.apply(e,[e._plistArray,(i=t,new n(i).jsonData)]),o(v)}).catch(function(){bg.log("Warning: no such material library file for obj model "+e.url),d.apply(e,[e._plistArray,{}]),o(v)})}else d.apply(e,[e._plistArray,{}]),o(v)})}},{})}();bg.scene.OBJParser=f;var v=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return"obj"==bg.utils.Resource.GetExtension(t)},loadDataSync:function(t,e){var n=void 0!==arguments[2]?arguments[2]:"Obj model";try{var i=new f(t,e),r=null,a=i.loadDrawableSync(e,n);return a&&(r=new bg.scene.Node(t,n)).addComponent(a),r}catch(t){console.error(t)}},load:function(t,e,n){return new Promise(function(i,r){if(n)try{var a=new f(t,e),s=null,o=e.split("/");o.pop(),o=o.join("/")+"/";var u=e.split(".");u.pop(),u.push("bg2mat"),u=u.join("."),a.loadDrawable(n).then(function(e){var n=new bg.scene.Node(t,e.name);return n.addComponent(e),s=n,bg.utils.Resource.LoadJson(u)}).then(function(e){var n=[];try{s.component("bg.scene.Drawable").forEach(function(i,r){var a=null;if(e.some(function(t){if(t.name==i.name)return a=t,!0}),a){var s=bg.base.Material.FromMaterialDefinition(t,a,o);n.push(s),s.then(function(t){r.assign(t)})}})}catch(t){}return Promise.all(n)}).then(function(){i(s)}).catch(function(){i(s)})}catch(t){r(t)}else r(new Error("Error loading drawable. Data is null."))})}},{},t)}(bg.base.LoaderPlugin);bg.base.OBJLoaderPlugin=v}(),bg.scene=bg.scene||{},bg.scene.primitiveData={},bg.scene.primitiveData.cube="\no Cube_Cube.001\nv -0.500000 -0.500000 0.500000\nv -0.500000 0.500000 0.500000\nv -0.500000 -0.500000 -0.500000\nv -0.500000 0.500000 -0.500000\nv 0.500000 -0.500000 0.500000\nv 0.500000 0.500000 0.500000\nv 0.500000 -0.500000 -0.500000\nv 0.500000 0.500000 -0.500000\nvt 0.997494 0.002609\nvt 0.997494 0.997494\nvt 0.002609 0.997494\nvt 0.002609 0.002609\nvt 0.002609 0.997494\nvt 0.002609 0.002609\nvt 0.997494 0.002609\nvt 0.997494 0.997494\nvt 0.002609 0.997494\nvt 0.002609 0.002609\nvt 0.997494 0.002609\nvt 0.997494 0.997494\nvt 0.002609 0.997494\nvt 0.002609 0.002609\nvt 0.997494 0.002609\nvt 0.002609 0.997494\nvt 0.997494 0.997494\nvt 0.997494 0.002609\nvn -1.0000 0.0000 0.0000\nvn 0.0000 0.0000 -1.0000\nvn 1.0000 0.0000 0.0000\nvn 0.0000 0.0000 1.0000\nvn 0.0000 -1.0000 0.0000\nvn 0.0000 1.0000 0.0000\ns off\nf 1/1/1 2/2/1 4/3/1 3/4/1\nf 3/5/2 4/6/2 8/7/2 7/8/2\nf 7/8/3 8/9/3 6/10/3 5/11/3\nf 5/12/4 6/13/4 2/14/4 1/1/4\nf 3/4/5 7/15/5 5/12/5 1/16/5\nf 8/17/6 4/3/6 2/14/6 6/18/6\n ",bg.scene.primitiveData.sphere="\no Sphere\nv 0.000000 -0.071157 -0.494911\nv 0.000000 -0.494911 -0.071158\nv 0.010127 0.494911 -0.070433\nv 0.020047 0.479746 -0.139432\nv 0.029560 0.454816 -0.205593\nv 0.038471 0.420627 -0.267569\nv 0.046598 0.377875 -0.324098\nv 0.053777 0.327430 -0.374029\nv 0.059861 0.270320 -0.416345\nv 0.064727 0.207707 -0.450187\nv 0.068275 0.140866 -0.474863\nv 0.070433 0.071157 -0.489873\nv 0.071157 0.000000 -0.494911\nv 0.070433 -0.071157 -0.489873\nv 0.068275 -0.140866 -0.474863\nv 0.064727 -0.207707 -0.450187\nv 0.059861 -0.270320 -0.416345\nv 0.053777 -0.327430 -0.374029\nv 0.046598 -0.377875 -0.324098\nv 0.038471 -0.420627 -0.267569\nv 0.029560 -0.454816 -0.205594\nv 0.020047 -0.479746 -0.139433\nv 0.010127 -0.494911 -0.070433\nv 0.020047 0.494911 -0.068275\nv 0.039687 0.479746 -0.135160\nv 0.058518 0.454816 -0.199294\nv 0.076158 0.420627 -0.259371\nv 0.092248 0.377875 -0.314167\nv 0.106460 0.327430 -0.362568\nv 0.118504 0.270320 -0.403588\nv 0.128136 0.207707 -0.436393\nv 0.135160 0.140866 -0.460313\nv 0.139432 0.071157 -0.474863\nv 0.140866 0.000000 -0.479746\nv 0.139432 -0.071157 -0.474863\nv 0.135160 -0.140866 -0.460313\nv 0.128136 -0.207707 -0.436393\nv 0.118504 -0.270320 -0.403589\nv 0.106460 -0.327430 -0.362568\nv 0.092248 -0.377875 -0.314167\nv 0.076158 -0.420627 -0.259371\nv 0.058518 -0.454816 -0.199294\nv 0.039687 -0.479746 -0.135160\nv 0.020047 -0.494911 -0.068275\nv 0.029560 0.494911 -0.064727\nv 0.058518 0.479746 -0.128137\nv 0.086285 0.454816 -0.188937\nv 0.112295 0.420627 -0.245892\nv 0.136019 0.377875 -0.297841\nv 0.156975 0.327430 -0.343727\nv 0.174735 0.270320 -0.382616\nv 0.188937 0.207707 -0.413715\nv 0.199294 0.140866 -0.436393\nv 0.205593 0.071157 -0.450187\nv 0.207707 0.000000 -0.454816\nv 0.205593 -0.071157 -0.450187\nv 0.199294 -0.140866 -0.436393\nv 0.188937 -0.207707 -0.413715\nv 0.174735 -0.270320 -0.382616\nv 0.156975 -0.327430 -0.343727\nv 0.136019 -0.377875 -0.297841\nv 0.112295 -0.420627 -0.245892\nv 0.086285 -0.454816 -0.188938\nv 0.058518 -0.479746 -0.128137\nv 0.029560 -0.494911 -0.064727\nv 0.038470 0.494911 -0.059861\nv 0.076158 0.479746 -0.118504\nv 0.112295 0.454816 -0.174735\nv 0.146146 0.420627 -0.227408\nv 0.177022 0.377875 -0.275452\nv 0.204294 0.327430 -0.317889\nv 0.227408 0.270320 -0.353854\nv 0.245892 0.207707 -0.382616\nv 0.259370 0.140866 -0.403588\nv 0.267569 0.071157 -0.416345\nv 0.270320 0.000000 -0.420627\nv 0.267569 -0.071157 -0.416345\nv 0.259370 -0.140866 -0.403588\nv 0.245892 -0.207707 -0.382616\nv 0.227408 -0.270320 -0.353854\nv 0.204294 -0.327430 -0.317889\nv 0.177022 -0.377875 -0.275452\nv 0.146146 -0.420627 -0.227408\nv 0.112295 -0.454816 -0.174735\nv 0.076158 -0.479746 -0.118505\nv 0.038471 -0.494911 -0.059862\nv 0.046598 0.494911 -0.053777\nv 0.092248 0.479746 -0.106460\nv 0.136019 0.454816 -0.156975\nv 0.177022 0.420627 -0.204295\nv 0.214421 0.377875 -0.247455\nv 0.247455 0.327430 -0.285579\nv 0.275452 0.270320 -0.317889\nv 0.297841 0.207707 -0.343727\nv 0.314167 0.140866 -0.362568\nv 0.324097 0.071157 -0.374029\nv 0.327430 0.000000 -0.377875\nv 0.324097 -0.071157 -0.374029\nv 0.314167 -0.140866 -0.362568\nv 0.297841 -0.207707 -0.343727\nv 0.275452 -0.270320 -0.317889\nv 0.247455 -0.327430 -0.285579\nv 0.214421 -0.377875 -0.247456\nv 0.177022 -0.420627 -0.204295\nv 0.136019 -0.454816 -0.156975\nv 0.092248 -0.479746 -0.106460\nv 0.046598 -0.494911 -0.053777\nv 0.053777 0.494911 -0.046598\nv 0.106459 0.479746 -0.092248\nv 0.156975 0.454816 -0.136020\nv 0.204294 0.420627 -0.177022\nv 0.247455 0.377875 -0.214421\nv 0.285578 0.327430 -0.247455\nv 0.317888 0.270320 -0.275452\nv 0.343727 0.207707 -0.297841\nv 0.362568 0.140866 -0.314167\nv 0.374028 0.071157 -0.324098\nv 0.377875 0.000000 -0.327430\nv 0.374028 -0.071157 -0.324098\nv 0.362568 -0.140866 -0.314167\nv 0.343727 -0.207707 -0.297841\nv 0.317888 -0.270320 -0.275452\nv 0.285579 -0.327430 -0.247456\nv 0.247455 -0.377875 -0.214421\nv 0.204294 -0.420627 -0.177022\nv 0.156975 -0.454816 -0.136020\nv 0.106460 -0.479746 -0.092248\nv 0.053777 -0.494911 -0.046598\nv 0.059861 0.494911 -0.038471\nv 0.118504 0.479746 -0.076158\nv 0.174734 0.454816 -0.112295\nv 0.227408 0.420627 -0.146146\nv 0.275452 0.377875 -0.177022\nv 0.317888 0.327430 -0.204295\nv 0.353853 0.270320 -0.227408\nv 0.382615 0.207707 -0.245892\nv 0.403588 0.140866 -0.259371\nv 0.416345 0.071157 -0.267569\nv 0.420626 0.000000 -0.270321\nv 0.416345 -0.071157 -0.267569\nv 0.403588 -0.140866 -0.259371\nv 0.382615 -0.207707 -0.245892\nv 0.353854 -0.270320 -0.227408\nv 0.317888 -0.327430 -0.204295\nv 0.275452 -0.377875 -0.177022\nv 0.227408 -0.420627 -0.146147\nv 0.174735 -0.454816 -0.112295\nv 0.118504 -0.479746 -0.076158\nv 0.059861 -0.494911 -0.038471\nv 0.064727 0.494911 -0.029560\nv 0.128136 0.479746 -0.058518\nv 0.188937 0.454816 -0.086285\nv 0.245892 0.420627 -0.112295\nv 0.297841 0.377875 -0.136020\nv 0.343727 0.327430 -0.156975\nv 0.382615 0.270320 -0.174735\nv 0.413715 0.207707 -0.188938\nv 0.436393 0.140866 -0.199294\nv 0.450186 0.071157 -0.205593\nv 0.454816 0.000000 -0.207708\nv 0.450186 -0.071157 -0.205593\nv 0.436393 -0.140866 -0.199294\nv 0.413715 -0.207707 -0.188938\nv 0.382615 -0.270320 -0.174735\nv 0.343727 -0.327430 -0.156975\nv 0.297841 -0.377875 -0.136020\nv 0.245892 -0.420627 -0.112295\nv 0.188937 -0.454816 -0.086285\nv 0.128136 -0.479746 -0.058518\nv 0.064727 -0.494911 -0.029560\nv 0.068275 0.494911 -0.020048\nv 0.135160 0.479746 -0.039687\nv 0.199294 0.454816 -0.058518\nv 0.259370 0.420627 -0.076158\nv 0.314167 0.377875 -0.092248\nv 0.362568 0.327430 -0.106460\nv 0.403588 0.270320 -0.118504\nv 0.436392 0.207707 -0.128137\nv 0.460313 0.140866 -0.135160\nv 0.474863 0.071157 -0.139433\nv 0.479746 0.000000 -0.140866\nv 0.474863 -0.071157 -0.139433\nv 0.460313 -0.140866 -0.135160\nv 0.436392 -0.207707 -0.128137\nv 0.403588 -0.270320 -0.118504\nv 0.362568 -0.327430 -0.106460\nv 0.314167 -0.377875 -0.092248\nv 0.259370 -0.420627 -0.076158\nv 0.199294 -0.454816 -0.058518\nv 0.135160 -0.479746 -0.039687\nv 0.068275 -0.494911 -0.020048\nv -0.000000 0.500000 -0.000000\nv 0.070433 0.494911 -0.010127\nv 0.139432 0.479746 -0.020048\nv 0.205593 0.454816 -0.029560\nv 0.267569 0.420627 -0.038471\nv 0.324097 0.377875 -0.046598\nv 0.374028 0.327430 -0.053777\nv 0.416345 0.270320 -0.059862\nv 0.450186 0.207707 -0.064727\nv 0.474863 0.140866 -0.068275\nv 0.489873 0.071157 -0.070433\nv 0.494910 0.000000 -0.071158\nv 0.489873 -0.071157 -0.070433\nv 0.474863 -0.140866 -0.068275\nv 0.450186 -0.207707 -0.064727\nv 0.416345 -0.270320 -0.059862\nv 0.374028 -0.327430 -0.053777\nv 0.324097 -0.377875 -0.046598\nv 0.267569 -0.420627 -0.038471\nv 0.205593 -0.454816 -0.029560\nv 0.139432 -0.479746 -0.020048\nv 0.070433 -0.494911 -0.010127\nv 0.071157 0.494911 -0.000000\nv 0.140866 0.479746 -0.000000\nv 0.207707 0.454816 -0.000000\nv 0.270320 0.420627 -0.000000\nv 0.327430 0.377875 -0.000000\nv 0.377875 0.327430 -0.000000\nv 0.420626 0.270320 -0.000000\nv 0.454816 0.207707 -0.000000\nv 0.479746 0.140866 -0.000000\nv 0.494910 0.071157 -0.000000\nv 0.500000 0.000000 -0.000000\nv 0.494910 -0.071157 -0.000000\nv 0.479746 -0.140866 -0.000000\nv 0.454816 -0.207707 -0.000000\nv 0.420627 -0.270320 -0.000000\nv 0.377875 -0.327430 -0.000000\nv 0.327430 -0.377875 -0.000000\nv 0.270320 -0.420627 -0.000000\nv 0.207707 -0.454816 -0.000000\nv 0.140866 -0.479746 -0.000000\nv 0.071157 -0.494911 -0.000000\nv 0.070433 0.494911 0.010126\nv 0.139432 0.479746 0.020047\nv 0.205593 0.454816 0.029560\nv 0.267569 0.420627 0.038470\nv 0.324097 0.377875 0.046598\nv 0.374028 0.327430 0.053777\nv 0.416345 0.270320 0.059861\nv 0.450186 0.207707 0.064727\nv 0.474863 0.140866 0.068275\nv 0.489873 0.071157 0.070433\nv 0.494910 0.000000 0.071157\nv 0.489873 -0.071157 0.070433\nv 0.474863 -0.140866 0.068275\nv 0.450186 -0.207707 0.064727\nv 0.416345 -0.270320 0.059861\nv 0.374028 -0.327430 0.053777\nv 0.324097 -0.377875 0.046598\nv 0.267569 -0.420627 0.038470\nv 0.205593 -0.454816 0.029560\nv 0.139432 -0.479746 0.020047\nv 0.070433 -0.494911 0.010126\nv 0.068275 0.494911 0.020047\nv 0.135160 0.479746 0.039686\nv 0.199294 0.454816 0.058518\nv 0.259370 0.420627 0.076158\nv 0.314167 0.377875 0.092247\nv 0.362568 0.327430 0.106459\nv 0.403588 0.270320 0.118504\nv 0.436392 0.207707 0.128136\nv 0.460313 0.140866 0.135160\nv 0.474863 0.071157 0.139432\nv 0.479746 0.000000 0.140866\nv 0.474863 -0.071157 0.139432\nv 0.460313 -0.140866 0.135160\nv 0.436392 -0.207707 0.128136\nv 0.403588 -0.270320 0.118504\nv 0.362568 -0.327430 0.106459\nv 0.314167 -0.377875 0.092247\nv 0.259370 -0.420627 0.076158\nv 0.199294 -0.454816 0.058518\nv 0.135160 -0.479746 0.039686\nv 0.068275 -0.494911 0.020047\nv 0.064727 0.494911 0.029559\nv 0.128136 0.479746 0.058518\nv 0.188937 0.454816 0.086284\nv 0.245892 0.420627 0.112295\nv 0.297841 0.377875 0.136019\nv 0.343727 0.327430 0.156974\nv 0.382615 0.270320 0.174734\nv 0.413715 0.207707 0.188937\nv 0.436392 0.140866 0.199294\nv 0.450186 0.071157 0.205593\nv 0.454816 0.000000 0.207707\nv 0.450186 -0.071157 0.205593\nv 0.436393 -0.140866 0.199294\nv 0.413715 -0.207707 0.188937\nv 0.382615 -0.270320 0.174734\nv 0.343727 -0.327430 0.156975\nv 0.297841 -0.377875 0.136019\nv 0.245892 -0.420627 0.112295\nv 0.188937 -0.454816 0.086284\nv 0.128136 -0.479746 0.058518\nv 0.064727 -0.494911 0.029560\nv 0.059861 0.494911 0.038470\nv 0.118504 0.479746 0.076158\nv 0.174734 0.454816 0.112295\nv 0.227408 0.420627 0.146146\nv 0.275452 0.377875 0.177022\nv 0.317888 0.327430 0.204294\nv 0.353854 0.270320 0.227408\nv 0.382615 0.207707 0.245892\nv 0.403588 0.140866 0.259370\nv 0.416345 0.071157 0.267569\nv 0.420627 0.000000 0.270320\nv 0.416345 -0.071157 0.267569\nv 0.403588 -0.140866 0.259370\nv 0.382615 -0.207707 0.245892\nv 0.353854 -0.270320 0.227408\nv 0.317888 -0.327430 0.204294\nv 0.275452 -0.377875 0.177022\nv 0.227408 -0.420627 0.146146\nv 0.174735 -0.454816 0.112295\nv 0.118504 -0.479746 0.076158\nv 0.059861 -0.494911 0.038470\nv 0.053777 0.494911 0.046598\nv 0.106459 0.479746 0.092247\nv 0.156975 0.454816 0.136019\nv 0.204294 0.420627 0.177022\nv 0.247455 0.377875 0.214421\nv 0.285579 0.327430 0.247455\nv 0.317888 0.270320 0.275451\nv 0.343727 0.207707 0.297841\nv 0.362568 0.140866 0.314167\nv 0.374028 0.071157 0.324097\nv 0.377875 0.000000 0.327430\nv 0.374028 -0.071157 0.324097\nv 0.362568 -0.140866 0.314167\nv 0.343727 -0.207707 0.297841\nv 0.317888 -0.270320 0.275452\nv 0.285579 -0.327430 0.247455\nv 0.247455 -0.377875 0.214421\nv 0.204294 -0.420627 0.177022\nv 0.156975 -0.454816 0.136019\nv 0.106460 -0.479746 0.092247\nv 0.053777 -0.494911 0.046598\nv 0.046598 0.494911 0.053777\nv 0.092248 0.479746 0.106459\nv 0.136019 0.454816 0.156974\nv 0.177022 0.420627 0.204294\nv 0.214421 0.377875 0.247455\nv 0.247455 0.327430 0.285578\nv 0.275452 0.270320 0.317888\nv 0.297841 0.207707 0.343726\nv 0.314167 0.140866 0.362568\nv 0.324097 0.071157 0.374028\nv 0.327430 0.000000 0.377874\nv 0.324097 -0.071157 0.374028\nv 0.314167 -0.140866 0.362568\nv 0.297841 -0.207707 0.343726\nv 0.275452 -0.270320 0.317888\nv 0.247455 -0.327430 0.285578\nv 0.214421 -0.377875 0.247455\nv 0.177022 -0.420627 0.204294\nv 0.136019 -0.454816 0.156974\nv 0.092248 -0.479746 0.106459\nv 0.046598 -0.494911 0.053777\nv 0.038470 0.494911 0.059861\nv 0.076158 0.479746 0.118504\nv 0.112295 0.454816 0.174734\nv 0.146146 0.420627 0.227408\nv 0.177022 0.377875 0.275452\nv 0.204294 0.327430 0.317888\nv 0.227408 0.270320 0.353853\nv 0.245892 0.207707 0.382615\nv 0.259370 0.140866 0.403588\nv 0.267569 0.071157 0.416345\nv 0.270320 0.000000 0.420626\nv 0.267569 -0.071157 0.416345\nv 0.259370 -0.140866 0.403588\nv 0.245892 -0.207707 0.382615\nv 0.227408 -0.270320 0.353853\nv 0.204294 -0.327430 0.317888\nv 0.177022 -0.377875 0.275452\nv 0.146146 -0.420627 0.227408\nv 0.112295 -0.454816 0.174734\nv 0.076158 -0.479746 0.118504\nv 0.038471 -0.494911 0.059861\nv 0.029560 0.494911 0.064726\nv 0.058518 0.479746 0.128136\nv 0.086285 0.454816 0.188937\nv 0.112295 0.420627 0.245892\nv 0.136019 0.377875 0.297841\nv 0.156975 0.327430 0.343726\nv 0.174735 0.270320 0.382615\nv 0.188937 0.207707 0.413715\nv 0.199294 0.140866 0.436392\nv 0.205593 0.071157 0.450186\nv 0.207707 0.000000 0.454815\nv 0.205593 -0.071157 0.450186\nv 0.199294 -0.140866 0.436392\nv 0.188937 -0.207707 0.413715\nv 0.174735 -0.270320 0.382615\nv 0.156975 -0.327430 0.343727\nv 0.136019 -0.377875 0.297841\nv 0.112295 -0.420627 0.245892\nv 0.086285 -0.454816 0.188937\nv 0.058518 -0.479746 0.128136\nv 0.029560 -0.494911 0.064727\nv 0.020047 0.494911 0.068274\nv 0.039687 0.479746 0.135160\nv 0.058518 0.454816 0.199293\nv 0.076158 0.420627 0.259370\nv 0.092248 0.377875 0.314167\nv 0.106460 0.327430 0.362568\nv 0.118504 0.270320 0.403588\nv 0.128136 0.207707 0.436392\nv 0.135160 0.140866 0.460313\nv 0.139432 0.071157 0.474863\nv 0.140866 0.000000 0.479746\nv 0.139432 -0.071157 0.474863\nv 0.135160 -0.140866 0.460313\nv 0.128136 -0.207707 0.436392\nv 0.118504 -0.270320 0.403588\nv 0.106460 -0.327430 0.362568\nv 0.092248 -0.377875 0.314167\nv 0.076158 -0.420627 0.259370\nv 0.058518 -0.454816 0.199293\nv 0.039687 -0.479746 0.135160\nv 0.020047 -0.494911 0.068275\nv 0.010127 0.494911 0.070432\nv 0.020047 0.479746 0.139432\nv 0.029560 0.454816 0.205593\nv 0.038471 0.420627 0.267568\nv 0.046598 0.377875 0.324097\nv 0.053777 0.327430 0.374028\nv 0.059861 0.270320 0.416345\nv 0.064727 0.207707 0.450186\nv 0.068275 0.140866 0.474863\nv 0.070433 0.071157 0.489873\nv 0.071157 0.000000 0.494910\nv 0.070433 -0.071157 0.489873\nv 0.068275 -0.140866 0.474863\nv 0.064727 -0.207707 0.450186\nv 0.059861 -0.270320 0.416345\nv 0.053777 -0.327430 0.374028\nv 0.046598 -0.377875 0.324097\nv 0.038471 -0.420627 0.267569\nv 0.029560 -0.454816 0.205593\nv 0.020047 -0.479746 0.139432\nv 0.010127 -0.494911 0.070433\nv -0.000000 0.494911 0.071157\nv -0.000000 0.479746 0.140866\nv -0.000000 0.454816 0.207707\nv -0.000000 0.420627 0.270320\nv 0.000000 0.377875 0.327430\nv 0.000000 0.327430 0.377874\nv -0.000000 0.270320 0.420626\nv -0.000000 0.207707 0.454815\nv 0.000000 0.140866 0.479746\nv 0.000000 0.071157 0.494910\nv 0.000000 0.000000 0.499999\nv 0.000000 -0.071157 0.494910\nv -0.000000 -0.140866 0.479746\nv 0.000000 -0.207707 0.454815\nv -0.000000 -0.270320 0.420626\nv -0.000000 -0.327430 0.377874\nv -0.000000 -0.377875 0.327430\nv -0.000000 -0.420627 0.270320\nv -0.000000 -0.454816 0.207707\nv -0.000000 -0.479746 0.140866\nv 0.000000 -0.494911 0.071157\nv -0.010127 0.494911 0.070433\nv -0.020047 0.479746 0.139432\nv -0.029560 0.454816 0.205593\nv -0.038471 0.420627 0.267568\nv -0.046598 0.377875 0.324097\nv -0.053777 0.327430 0.374028\nv -0.059861 0.270320 0.416345\nv -0.064727 0.207707 0.450186\nv -0.068275 0.140866 0.474863\nv -0.070433 0.071157 0.489873\nv -0.071157 0.000000 0.494910\nv -0.070433 -0.071157 0.489873\nv -0.068275 -0.140866 0.474863\nv -0.064727 -0.207707 0.450186\nv -0.059861 -0.270320 0.416345\nv -0.053777 -0.327430 0.374028\nv -0.046598 -0.377875 0.324097\nv -0.038471 -0.420627 0.267569\nv -0.029560 -0.454816 0.205593\nv -0.020047 -0.479746 0.139432\nv -0.010127 -0.494911 0.070433\nv -0.020047 0.494911 0.068274\nv -0.039687 0.479746 0.135160\nv -0.058518 0.454816 0.199293\nv -0.076158 0.420627 0.259370\nv -0.092248 0.377875 0.314167\nv -0.106460 0.327430 0.362568\nv -0.118504 0.270320 0.403588\nv -0.128136 0.207707 0.436392\nv -0.135160 0.140866 0.460313\nv -0.139432 0.071157 0.474863\nv -0.140866 0.000000 0.479746\nv -0.139432 -0.071157 0.474863\nv -0.135160 -0.140866 0.460313\nv -0.128136 -0.207707 0.436392\nv -0.118504 -0.270320 0.403588\nv -0.106460 -0.327430 0.362568\nv -0.092248 -0.377875 0.314167\nv -0.076158 -0.420627 0.259370\nv -0.058518 -0.454816 0.199293\nv -0.039687 -0.479746 0.135160\nv -0.020047 -0.494911 0.068275\nv -0.029560 0.494911 0.064726\nv -0.058518 0.479746 0.128136\nv -0.086285 0.454816 0.188937\nv -0.112295 0.420627 0.245892\nv -0.136019 0.377875 0.297841\nv -0.156975 0.327430 0.343726\nv -0.174735 0.270320 0.382615\nv -0.188937 0.207707 0.413715\nv -0.199294 0.140866 0.436392\nv -0.205593 0.071157 0.450186\nv -0.207707 0.000000 0.454815\nv -0.205593 -0.071157 0.450186\nv -0.199294 -0.140866 0.436392\nv -0.188937 -0.207707 0.413715\nv -0.174735 -0.270320 0.382615\nv -0.156975 -0.327430 0.343727\nv -0.136019 -0.377875 0.297841\nv -0.112295 -0.420627 0.245892\nv -0.086285 -0.454816 0.188937\nv -0.058518 -0.479746 0.128136\nv -0.029560 -0.494911 0.064727\nv 0.000000 -0.500000 -0.000000\nv -0.038470 0.494911 0.059861\nv -0.076158 0.479746 0.118504\nv -0.112295 0.454816 0.174734\nv -0.146146 0.420627 0.227408\nv -0.177022 0.377875 0.275452\nv -0.204294 0.327430 0.317888\nv -0.227408 0.270320 0.353853\nv -0.245892 0.207707 0.382615\nv -0.259370 0.140866 0.403588\nv -0.267569 0.071157 0.416345\nv -0.270320 0.000000 0.420626\nv -0.267569 -0.071157 0.416345\nv -0.259370 -0.140866 0.403588\nv -0.245892 -0.207707 0.382615\nv -0.227408 -0.270320 0.353853\nv -0.204295 -0.327430 0.317888\nv -0.177022 -0.377875 0.275452\nv -0.146146 -0.420627 0.227408\nv -0.112295 -0.454816 0.174734\nv -0.076158 -0.479746 0.118504\nv -0.038471 -0.494911 0.059861\nv -0.046598 0.494911 0.053777\nv -0.092248 0.479746 0.106459\nv -0.136019 0.454816 0.156974\nv -0.177022 0.420627 0.204294\nv -0.214421 0.377875 0.247455\nv -0.247455 0.327430 0.285578\nv -0.275452 0.270320 0.317888\nv -0.297841 0.207707 0.343726\nv -0.314167 0.140866 0.362568\nv -0.324097 0.071157 0.374028\nv -0.327430 0.000000 0.377874\nv -0.324097 -0.071157 0.374028\nv -0.314167 -0.140866 0.362568\nv -0.297841 -0.207707 0.343726\nv -0.275452 -0.270320 0.317888\nv -0.247455 -0.327430 0.285578\nv -0.214421 -0.377875 0.247455\nv -0.177022 -0.420627 0.204294\nv -0.136019 -0.454816 0.156974\nv -0.092248 -0.479746 0.106459\nv -0.046598 -0.494911 0.053777\nv -0.053777 0.494911 0.046598\nv -0.106459 0.479746 0.092247\nv -0.156975 0.454816 0.136019\nv -0.204294 0.420627 0.177022\nv -0.247455 0.377875 0.214421\nv -0.285578 0.327430 0.247455\nv -0.317888 0.270320 0.275451\nv -0.343727 0.207707 0.297841\nv -0.362568 0.140866 0.314167\nv -0.374028 0.071157 0.324097\nv -0.377875 0.000000 0.327430\nv -0.374028 -0.071157 0.324097\nv -0.362568 -0.140866 0.314167\nv -0.343727 -0.207707 0.297841\nv -0.317888 -0.270320 0.275452\nv -0.285579 -0.327430 0.247455\nv -0.247455 -0.377875 0.214421\nv -0.204295 -0.420627 0.177022\nv -0.156975 -0.454816 0.136019\nv -0.106460 -0.479746 0.092247\nv -0.053777 -0.494911 0.046598\nv -0.059861 0.494911 0.038470\nv -0.118504 0.479746 0.076158\nv -0.174734 0.454816 0.112295\nv -0.227408 0.420627 0.146146\nv -0.275452 0.377875 0.177022\nv -0.317888 0.327430 0.204294\nv -0.353853 0.270320 0.227408\nv -0.382615 0.207707 0.245892\nv -0.403588 0.140866 0.259370\nv -0.416345 0.071157 0.267568\nv -0.420626 0.000000 0.270320\nv -0.416345 -0.071157 0.267568\nv -0.403588 -0.140866 0.259370\nv -0.382615 -0.207707 0.245892\nv -0.353854 -0.270320 0.227408\nv -0.317888 -0.327430 0.204294\nv -0.275452 -0.377875 0.177022\nv -0.227408 -0.420627 0.146146\nv -0.174735 -0.454816 0.112295\nv -0.118504 -0.479746 0.076158\nv -0.059861 -0.494911 0.038470\nv -0.064727 0.494911 0.029559\nv -0.128136 0.479746 0.058518\nv -0.188937 0.454816 0.086284\nv -0.245892 0.420627 0.112295\nv -0.297841 0.377875 0.136019\nv -0.343727 0.327430 0.156975\nv -0.382615 0.270320 0.174734\nv -0.413715 0.207707 0.188937\nv -0.436392 0.140866 0.199294\nv -0.450186 0.071157 0.205593\nv -0.454816 0.000000 0.207707\nv -0.450186 -0.071157 0.205593\nv -0.436393 -0.140866 0.199293\nv -0.413715 -0.207707 0.188937\nv -0.382615 -0.270320 0.174734\nv -0.343727 -0.327430 0.156975\nv -0.297841 -0.377875 0.136019\nv -0.245892 -0.420627 0.112295\nv -0.188937 -0.454816 0.086284\nv -0.128136 -0.479746 0.058518\nv -0.064727 -0.494911 0.029560\nv -0.068275 0.494911 0.020047\nv -0.135160 0.479746 0.039686\nv -0.199294 0.454816 0.058518\nv -0.259370 0.420627 0.076158\nv -0.314167 0.377875 0.092248\nv -0.362568 0.327430 0.106459\nv -0.403588 0.270320 0.118504\nv -0.436392 0.207707 0.128136\nv -0.460313 0.140866 0.135160\nv -0.474863 0.071157 0.139432\nv -0.479746 0.000000 0.140866\nv -0.474863 -0.071157 0.139432\nv -0.460313 -0.140866 0.135160\nv -0.436392 -0.207707 0.128136\nv -0.403588 -0.270320 0.118504\nv -0.362568 -0.327430 0.106459\nv -0.314167 -0.377875 0.092247\nv -0.259371 -0.420627 0.076158\nv -0.199294 -0.454816 0.058518\nv -0.135160 -0.479746 0.039686\nv -0.068275 -0.494911 0.020047\nv -0.070433 0.494911 0.010126\nv -0.139432 0.479746 0.020047\nv -0.205593 0.454816 0.029559\nv -0.267569 0.420627 0.038470\nv -0.324097 0.377875 0.046598\nv -0.374028 0.327430 0.053777\nv -0.416345 0.270320 0.059861\nv -0.450186 0.207707 0.064727\nv -0.474863 0.140866 0.068275\nv -0.489873 0.071157 0.070433\nv -0.494910 0.000000 0.071157\nv -0.489873 -0.071157 0.070433\nv -0.474863 -0.140866 0.068275\nv -0.450186 -0.207707 0.064727\nv -0.416345 -0.270320 0.059861\nv -0.374028 -0.327430 0.053777\nv -0.324097 -0.377875 0.046598\nv -0.267569 -0.420627 0.038470\nv -0.205593 -0.454816 0.029560\nv -0.139432 -0.479746 0.020047\nv -0.070433 -0.494911 0.010126\nv -0.071157 0.494911 -0.000000\nv -0.140866 0.479746 -0.000000\nv -0.207707 0.454816 -0.000000\nv -0.270320 0.420627 -0.000000\nv -0.327430 0.377875 -0.000000\nv -0.377874 0.327430 -0.000000\nv -0.420626 0.270320 -0.000000\nv -0.454816 0.207707 -0.000000\nv -0.479746 0.140866 -0.000000\nv -0.494910 0.071157 -0.000000\nv -0.500000 0.000000 -0.000000\nv -0.494910 -0.071157 -0.000000\nv -0.479746 -0.140866 -0.000000\nv -0.454816 -0.207707 -0.000000\nv -0.420627 -0.270320 -0.000000\nv -0.377875 -0.327430 -0.000000\nv -0.327430 -0.377875 -0.000000\nv -0.270320 -0.420627 -0.000000\nv -0.207707 -0.454816 -0.000000\nv -0.140866 -0.479746 -0.000000\nv -0.071157 -0.494911 -0.000000\nv -0.070433 0.494911 -0.010127\nv -0.139432 0.479746 -0.020048\nv -0.205593 0.454816 -0.029560\nv -0.267569 0.420627 -0.038471\nv -0.324097 0.377875 -0.046598\nv -0.374028 0.327430 -0.053777\nv -0.416345 0.270320 -0.059862\nv -0.450186 0.207707 -0.064727\nv -0.474863 0.140866 -0.068275\nv -0.489873 0.071157 -0.070433\nv -0.494910 0.000000 -0.071158\nv -0.489873 -0.071157 -0.070433\nv -0.474863 -0.140866 -0.068275\nv -0.450186 -0.207707 -0.064727\nv -0.416345 -0.270320 -0.059862\nv -0.374028 -0.327430 -0.053777\nv -0.324097 -0.377875 -0.046598\nv -0.267569 -0.420627 -0.038471\nv -0.205593 -0.454816 -0.029560\nv -0.139432 -0.479746 -0.020048\nv -0.070433 -0.494911 -0.010127\nv -0.068275 0.494911 -0.020048\nv -0.135160 0.479746 -0.039687\nv -0.199294 0.454816 -0.058518\nv -0.259370 0.420627 -0.076158\nv -0.314167 0.377875 -0.092248\nv -0.362568 0.327430 -0.106460\nv -0.403588 0.270320 -0.118504\nv -0.436392 0.207707 -0.128137\nv -0.460313 0.140866 -0.135160\nv -0.474863 0.071157 -0.139433\nv -0.479746 0.000000 -0.140866\nv -0.474863 -0.071157 -0.139433\nv -0.460313 -0.140866 -0.135160\nv -0.436392 -0.207707 -0.128137\nv -0.403588 -0.270320 -0.118504\nv -0.362568 -0.327430 -0.106460\nv -0.314167 -0.377875 -0.092248\nv -0.259371 -0.420627 -0.076158\nv -0.199294 -0.454816 -0.058518\nv -0.135160 -0.479746 -0.039687\nv -0.068275 -0.494911 -0.020048\nv -0.064727 0.494911 -0.029560\nv -0.128136 0.479746 -0.058518\nv -0.188937 0.454816 -0.086285\nv -0.245892 0.420627 -0.112295\nv -0.297841 0.377875 -0.136020\nv -0.343727 0.327430 -0.156975\nv -0.382615 0.270320 -0.174735\nv -0.413715 0.207707 -0.188938\nv -0.436392 0.140866 -0.199294\nv -0.450186 0.071157 -0.205593\nv -0.454816 0.000000 -0.207708\nv -0.450186 -0.071157 -0.205593\nv -0.436392 -0.140866 -0.199294\nv -0.413715 -0.207707 -0.188937\nv -0.382615 -0.270320 -0.174735\nv -0.343727 -0.327430 -0.156975\nv -0.297841 -0.377875 -0.136020\nv -0.245892 -0.420627 -0.112295\nv -0.188937 -0.454816 -0.086285\nv -0.128136 -0.479746 -0.058518\nv -0.064727 -0.494911 -0.029560\nv -0.059861 0.494911 -0.038471\nv -0.118504 0.479746 -0.076158\nv -0.174734 0.454816 -0.112295\nv -0.227408 0.420627 -0.146146\nv -0.275452 0.377875 -0.177022\nv -0.317888 0.327430 -0.204295\nv -0.353853 0.270320 -0.227408\nv -0.382615 0.207707 -0.245892\nv -0.403588 0.140866 -0.259371\nv -0.416345 0.071157 -0.267569\nv -0.420626 0.000000 -0.270320\nv -0.416345 -0.071157 -0.267569\nv -0.403588 -0.140866 -0.259371\nv -0.382615 -0.207707 -0.245892\nv -0.353854 -0.270320 -0.227408\nv -0.317888 -0.327430 -0.204295\nv -0.275452 -0.377875 -0.177022\nv -0.227408 -0.420627 -0.146147\nv -0.174735 -0.454816 -0.112295\nv -0.118504 -0.479746 -0.076158\nv -0.059861 -0.494911 -0.038471\nv -0.053777 0.494911 -0.046598\nv -0.106459 0.479746 -0.092248\nv -0.156975 0.454816 -0.136020\nv -0.204294 0.420627 -0.177022\nv -0.247455 0.377875 -0.214421\nv -0.285578 0.327430 -0.247455\nv -0.317888 0.270320 -0.275452\nv -0.343727 0.207707 -0.297841\nv -0.362568 0.140866 -0.314167\nv -0.374028 0.071157 -0.324098\nv -0.377874 0.000000 -0.327430\nv -0.374028 -0.071157 -0.324098\nv -0.362568 -0.140866 -0.314167\nv -0.343727 -0.207707 -0.297841\nv -0.317888 -0.270320 -0.275452\nv -0.285579 -0.327430 -0.247456\nv -0.247455 -0.377875 -0.214421\nv -0.204295 -0.420627 -0.177022\nv -0.156975 -0.454816 -0.136020\nv -0.106460 -0.479746 -0.092248\nv -0.053777 -0.494911 -0.046598\nv -0.046598 0.494911 -0.053777\nv -0.092248 0.479746 -0.106460\nv -0.136019 0.454816 -0.156975\nv -0.177022 0.420627 -0.204295\nv -0.214421 0.377875 -0.247455\nv -0.247455 0.327430 -0.285579\nv -0.275452 0.270320 -0.317888\nv -0.297841 0.207707 -0.343727\nv -0.314167 0.140866 -0.362568\nv -0.324097 0.071157 -0.374029\nv -0.327430 0.000000 -0.377875\nv -0.324097 -0.071157 -0.374029\nv -0.314167 -0.140866 -0.362568\nv -0.297841 -0.207707 -0.343727\nv -0.275452 -0.270320 -0.317889\nv -0.247455 -0.327430 -0.285579\nv -0.214421 -0.377875 -0.247456\nv -0.177022 -0.420627 -0.204295\nv -0.136019 -0.454816 -0.156975\nv -0.092248 -0.479746 -0.106460\nv -0.046598 -0.494911 -0.053777\nv -0.038470 0.494911 -0.059861\nv -0.076158 0.479746 -0.118504\nv -0.112295 0.454816 -0.174735\nv -0.146146 0.420627 -0.227408\nv -0.177022 0.377875 -0.275452\nv -0.204294 0.327430 -0.317888\nv -0.227408 0.270320 -0.353854\nv -0.245892 0.207707 -0.382615\nv -0.259370 0.140866 -0.403588\nv -0.267569 0.071157 -0.416345\nv -0.270320 0.000000 -0.420627\nv -0.267569 -0.071157 -0.416345\nv -0.259370 -0.140866 -0.403588\nv -0.245892 -0.207707 -0.382615\nv -0.227408 -0.270320 -0.353854\nv -0.204294 -0.327430 -0.317889\nv -0.177022 -0.377875 -0.275452\nv -0.146146 -0.420627 -0.227408\nv -0.112295 -0.454816 -0.174735\nv -0.076158 -0.479746 -0.118505\nv -0.038471 -0.494911 -0.059862\nv -0.029560 0.494911 -0.064727\nv -0.058518 0.479746 -0.128137\nv -0.086285 0.454816 -0.188937\nv -0.112295 0.420627 -0.245892\nv -0.136019 0.377875 -0.297841\nv -0.156975 0.327430 -0.343727\nv -0.174734 0.270320 -0.382615\nv -0.188937 0.207707 -0.413715\nv -0.199294 0.140866 -0.436393\nv -0.205593 0.071157 -0.450187\nv -0.207707 0.000000 -0.454816\nv -0.205593 -0.071157 -0.450187\nv -0.199294 -0.140866 -0.436393\nv -0.188937 -0.207707 -0.413715\nv -0.174735 -0.270320 -0.382616\nv -0.156975 -0.327430 -0.343727\nv -0.136019 -0.377875 -0.297841\nv -0.112295 -0.420627 -0.245892\nv -0.086285 -0.454816 -0.188938\nv -0.058518 -0.479746 -0.128137\nv -0.029560 -0.494911 -0.064727\nv -0.020047 0.494911 -0.068275\nv -0.039687 0.479746 -0.135160\nv -0.058518 0.454816 -0.199294\nv -0.076158 0.420627 -0.259371\nv -0.092248 0.377875 -0.314167\nv -0.106460 0.327430 -0.362568\nv -0.118504 0.270320 -0.403588\nv -0.128136 0.207707 -0.436392\nv -0.135160 0.140866 -0.460313\nv -0.139432 0.071157 -0.474863\nv -0.140866 0.000000 -0.479746\nv -0.139432 -0.071157 -0.474863\nv -0.135160 -0.140866 -0.460313\nv -0.128136 -0.207707 -0.436392\nv -0.118504 -0.270320 -0.403588\nv -0.106460 -0.327430 -0.362568\nv -0.092248 -0.377875 -0.314167\nv -0.076158 -0.420627 -0.259371\nv -0.058518 -0.454816 -0.199294\nv -0.039687 -0.479746 -0.135160\nv -0.020047 -0.494911 -0.068275\nv -0.010127 0.494911 -0.070433\nv -0.020047 0.479746 -0.139432\nv -0.029560 0.454816 -0.205593\nv -0.038471 0.420627 -0.267569\nv -0.046598 0.377875 -0.324098\nv -0.053777 0.327430 -0.374029\nv -0.059861 0.270320 -0.416345\nv -0.064727 0.207707 -0.450186\nv -0.068275 0.140866 -0.474863\nv -0.070433 0.071157 -0.489873\nv -0.071157 0.000000 -0.494910\nv -0.070433 -0.071157 -0.489873\nv -0.068275 -0.140866 -0.474863\nv -0.064727 -0.207707 -0.450186\nv -0.059861 -0.270320 -0.416345\nv -0.053777 -0.327430 -0.374029\nv -0.046598 -0.377875 -0.324098\nv -0.038471 -0.420627 -0.267569\nv -0.029560 -0.454816 -0.205594\nv -0.020047 -0.479746 -0.139433\nv -0.010127 -0.494911 -0.070433\nv -0.000000 0.494911 -0.071157\nv -0.000000 0.479746 -0.140866\nv -0.000000 0.454816 -0.207707\nv -0.000000 0.420627 -0.270320\nv -0.000000 0.377875 -0.327430\nv -0.000000 0.327430 -0.377875\nv -0.000000 0.270320 -0.420626\nv 0.000000 0.207707 -0.454816\nv -0.000000 0.140866 -0.479746\nv 0.000000 0.071157 -0.494911\nv -0.000000 0.000000 -0.500000\nv 0.000000 -0.140866 -0.479746\nv -0.000000 -0.207707 -0.454816\nv -0.000000 -0.270320 -0.420627\nv 0.000000 -0.327430 -0.377875\nv 0.000000 -0.377875 -0.327430\nv -0.000000 -0.420627 -0.270321\nv -0.000000 -0.454816 -0.207708\nv -0.000000 -0.479746 -0.140867\nvt 0.750000 0.954546\nvt 0.738637 1.000000\nvt 0.727273 0.954545\nvt 0.750000 0.272727\nvt 0.750000 0.318182\nvt 0.727273 0.318182\nvt 0.727273 0.272727\nvt 0.750000 0.590909\nvt 0.750000 0.636364\nvt 0.727273 0.636364\nvt 0.727273 0.590909\nvt 0.750000 0.909091\nvt 0.727273 0.909091\nvt 0.750000 0.227273\nvt 0.727273 0.227273\nvt 0.750000 0.545455\nvt 0.727273 0.545455\nvt 0.750000 0.863636\nvt 0.727273 0.863636\nvt 0.750000 0.181818\nvt 0.727273 0.181818\nvt 0.750000 0.500000\nvt 0.727273 0.500000\nvt 0.750000 0.818182\nvt 0.727273 0.818182\nvt 0.750000 0.136364\nvt 0.727273 0.136364\nvt 0.750000 0.454545\nvt 0.727273 0.454545\nvt 0.750000 0.772727\nvt 0.727273 0.772727\nvt 0.750000 0.090909\nvt 0.727273 0.090909\nvt 0.750000 0.409091\nvt 0.727273 0.409091\nvt 0.750000 0.727273\nvt 0.727273 0.727273\nvt 0.750000 0.045455\nvt 0.727273 0.045455\nvt 0.750000 0.363636\nvt 0.727273 0.363636\nvt 0.750000 0.681818\nvt 0.727273 0.681818\nvt 0.738636 0.000000\nvt 0.704545 0.318182\nvt 0.704545 0.272727\nvt 0.704545 0.636364\nvt 0.704545 0.590909\nvt 0.704546 0.954546\nvt 0.704546 0.909091\nvt 0.704545 0.227273\nvt 0.704545 0.545455\nvt 0.704545 0.863636\nvt 0.704545 0.181818\nvt 0.704545 0.500000\nvt 0.704545 0.818182\nvt 0.704545 0.136364\nvt 0.704545 0.454545\nvt 0.704545 0.772727\nvt 0.704546 0.090909\nvt 0.704545 0.409091\nvt 0.704545 0.727273\nvt 0.704546 0.045455\nvt 0.704545 0.363636\nvt 0.704545 0.681818\nvt 0.715909 0.000000\nvt 0.715910 1.000000\nvt 0.681818 0.681818\nvt 0.681818 0.636364\nvt 0.693182 1.000000\nvt 0.681818 0.954546\nvt 0.681818 0.318182\nvt 0.681818 0.272727\nvt 0.681818 0.590909\nvt 0.681818 0.909091\nvt 0.681818 0.227273\nvt 0.681818 0.545455\nvt 0.681818 0.863636\nvt 0.681818 0.181818\nvt 0.681818 0.500000\nvt 0.681818 0.818182\nvt 0.681818 0.136364\nvt 0.681818 0.454545\nvt 0.681818 0.772727\nvt 0.681818 0.090909\nvt 0.681818 0.409091\nvt 0.681818 0.727273\nvt 0.681818 0.045455\nvt 0.681818 0.363636\nvt 0.693182 0.000000\nvt 0.659091 0.363636\nvt 0.659091 0.318182\nvt 0.659091 0.681818\nvt 0.659091 0.636364\nvt 0.670455 1.000000\nvt 0.659091 0.954546\nvt 0.659091 0.272727\nvt 0.659091 0.590909\nvt 0.659091 0.909091\nvt 0.659091 0.227273\nvt 0.659091 0.545455\nvt 0.659091 0.863636\nvt 0.659091 0.181818\nvt 0.659091 0.500000\nvt 0.659091 0.818182\nvt 0.659091 0.136364\nvt 0.659091 0.454545\nvt 0.659091 0.772727\nvt 0.659091 0.090909\nvt 0.659091 0.409091\nvt 0.659091 0.727273\nvt 0.659091 0.045455\nvt 0.670455 0.000000\nvt 0.636364 0.727273\nvt 0.636364 0.681818\nvt 0.647728 0.000000\nvt 0.636364 0.045455\nvt 0.636364 0.363636\nvt 0.636364 0.318182\nvt 0.636364 0.636364\nvt 0.647728 1.000000\nvt 0.636364 0.954546\nvt 0.636364 0.272727\nvt 0.636364 0.590909\nvt 0.636364 0.909091\nvt 0.636364 0.227273\nvt 0.636364 0.545455\nvt 0.636364 0.863636\nvt 0.636364 0.181818\nvt 0.636364 0.500000\nvt 0.636364 0.818182\nvt 0.636364 0.136364\nvt 0.636364 0.454545\nvt 0.636364 0.772727\nvt 0.636364 0.090909\nvt 0.636364 0.409091\nvt 0.613637 0.090909\nvt 0.613637 0.045455\nvt 0.613636 0.409091\nvt 0.613636 0.363636\nvt 0.613636 0.727273\nvt 0.613636 0.681818\nvt 0.625001 0.000000\nvt 0.613636 0.318182\nvt 0.613636 0.636364\nvt 0.625001 1.000000\nvt 0.613637 0.954546\nvt 0.613636 0.272727\nvt 0.613636 0.590909\nvt 0.613637 0.909091\nvt 0.613636 0.227273\nvt 0.613636 0.545455\nvt 0.613637 0.863636\nvt 0.613636 0.181818\nvt 0.613636 0.500000\nvt 0.613636 0.818182\nvt 0.613637 0.136364\nvt 0.613636 0.454545\nvt 0.613636 0.772727\nvt 0.590909 0.454545\nvt 0.590909 0.409091\nvt 0.590909 0.772727\nvt 0.590909 0.727273\nvt 0.590909 0.090909\nvt 0.590910 0.045455\nvt 0.590909 0.363636\nvt 0.590909 0.681818\nvt 0.602274 0.000000\nvt 0.590909 0.318182\nvt 0.590909 0.636364\nvt 0.602274 1.000000\nvt 0.590910 0.954546\nvt 0.590909 0.272727\nvt 0.590909 0.590909\nvt 0.590909 0.909091\nvt 0.590909 0.227273\nvt 0.590909 0.545455\nvt 0.590909 0.863636\nvt 0.590909 0.181818\nvt 0.590909 0.500000\nvt 0.590909 0.818182\nvt 0.590909 0.136364\nvt 0.568182 0.818182\nvt 0.568182 0.772727\nvt 0.568182 0.136364\nvt 0.568182 0.090909\nvt 0.568182 0.454545\nvt 0.568182 0.409091\nvt 0.568182 0.727273\nvt 0.568182 0.045455\nvt 0.568182 0.363636\nvt 0.568182 0.681818\nvt 0.579546 0.000000\nvt 0.568182 0.318182\nvt 0.568182 0.636364\nvt 0.579547 1.000000\nvt 0.568182 0.954546\nvt 0.568182 0.272727\nvt 0.568182 0.590909\nvt 0.568182 0.909091\nvt 0.568182 0.227273\nvt 0.568182 0.545455\nvt 0.568182 0.863636\nvt 0.568182 0.181818\nvt 0.568182 0.500000\nvt 0.545455 0.500000\nvt 0.545455 0.454545\nvt 0.545455 0.818182\nvt 0.545455 0.772727\nvt 0.545455 0.136364\nvt 0.545455 0.090909\nvt 0.545455 0.409091\nvt 0.545455 0.727273\nvt 0.545455 0.045455\nvt 0.545455 0.363636\nvt 0.545455 0.681818\nvt 0.556819 0.000000\nvt 0.545455 0.318182\nvt 0.545455 0.636364\nvt 0.556819 1.000000\nvt 0.545455 0.954546\nvt 0.545455 0.272727\nvt 0.545455 0.590909\nvt 0.545455 0.909091\nvt 0.545455 0.227273\nvt 0.545455 0.545455\nvt 0.545455 0.863636\nvt 0.545455 0.181818\nvt 0.522727 0.863637\nvt 0.522727 0.818182\nvt 0.522727 0.181818\nvt 0.522727 0.136364\nvt 0.522727 0.500000\nvt 0.522727 0.454545\nvt 0.522727 0.772727\nvt 0.522728 0.090909\nvt 0.522727 0.409091\nvt 0.522727 0.727273\nvt 0.522728 0.045454\nvt 0.522727 0.363636\nvt 0.522727 0.681818\nvt 0.534092 0.000000\nvt 0.522727 0.318182\nvt 0.522727 0.636364\nvt 0.534092 1.000000\nvt 0.522728 0.954546\nvt 0.522727 0.272727\nvt 0.522727 0.590909\nvt 0.522728 0.909091\nvt 0.522727 0.227273\nvt 0.522727 0.545455\nvt 0.500000 0.227273\nvt 0.500000 0.181818\nvt 0.500000 0.545455\nvt 0.500000 0.500000\nvt 0.500000 0.863637\nvt 0.500000 0.818182\nvt 0.500000 0.136364\nvt 0.500000 0.454545\nvt 0.500000 0.772727\nvt 0.500000 0.090909\nvt 0.500000 0.409091\nvt 0.500000 0.727273\nvt 0.500001 0.045454\nvt 0.500000 0.363636\nvt 0.500000 0.681818\nvt 0.511365 0.000000\nvt 0.500000 0.318182\nvt 0.500000 0.636364\nvt 0.511365 1.000000\nvt 0.500001 0.954546\nvt 0.500000 0.272727\nvt 0.500000 0.590909\nvt 0.500000 0.909091\nvt 0.477273 0.590909\nvt 0.477273 0.545455\nvt 0.477273 0.909091\nvt 0.477273 0.863637\nvt 0.477273 0.227273\nvt 0.477273 0.181818\nvt 0.477273 0.500000\nvt 0.477273 0.818182\nvt 0.477273 0.136364\nvt 0.477273 0.454545\nvt 0.477273 0.772727\nvt 0.477273 0.090909\nvt 0.477273 0.409091\nvt 0.477273 0.727273\nvt 0.477273 0.045454\nvt 0.477273 0.363636\nvt 0.477273 0.681818\nvt 0.488637 0.000000\nvt 0.477273 0.318182\nvt 0.477273 0.636364\nvt 0.488637 1.000000\nvt 0.477273 0.954546\nvt 0.477273 0.272727\nvt 0.454546 0.954546\nvt 0.454546 0.909091\nvt 0.454546 0.272727\nvt 0.454546 0.227273\nvt 0.454546 0.590909\nvt 0.454546 0.545455\nvt 0.454546 0.863637\nvt 0.454546 0.181818\nvt 0.454546 0.500000\nvt 0.454546 0.818182\nvt 0.454546 0.136364\nvt 0.454546 0.454545\nvt 0.454546 0.772727\nvt 0.454546 0.090909\nvt 0.454546 0.409091\nvt 0.454546 0.727273\nvt 0.454546 0.045454\nvt 0.454546 0.363636\nvt 0.454546 0.681818\nvt 0.465910 0.000000\nvt 0.454546 0.318182\nvt 0.454546 0.636364\nvt 0.465910 1.000000\nvt 0.431818 0.636364\nvt 0.431818 0.590909\nvt 0.431819 0.954546\nvt 0.431818 0.909091\nvt 0.431818 0.272727\nvt 0.431818 0.227273\nvt 0.431818 0.545455\nvt 0.431818 0.863637\nvt 0.431818 0.181818\nvt 0.431818 0.500000\nvt 0.431818 0.818182\nvt 0.431818 0.136364\nvt 0.431818 0.454545\nvt 0.431818 0.772727\nvt 0.431818 0.090909\nvt 0.431818 0.409091\nvt 0.431818 0.727273\nvt 0.431819 0.045454\nvt 0.431818 0.363636\nvt 0.431818 0.681818\nvt 0.443183 0.000000\nvt 0.431818 0.318182\nvt 0.443183 1.000000\nvt 0.420455 1.000000\nvt 0.409092 0.954546\nvt 0.409091 0.318182\nvt 0.409091 0.272727\nvt 0.409091 0.636364\nvt 0.409091 0.590909\nvt 0.409091 0.909091\nvt 0.409091 0.227273\nvt 0.409091 0.545455\nvt 0.409091 0.863637\nvt 0.409091 0.181818\nvt 0.409091 0.500000\nvt 0.409091 0.818182\nvt 0.409091 0.136364\nvt 0.409091 0.454545\nvt 0.409091 0.772727\nvt 0.409091 0.090909\nvt 0.409091 0.409091\nvt 0.409091 0.727273\nvt 0.409092 0.045454\nvt 0.409091 0.363636\nvt 0.409091 0.681818\nvt 0.420455 0.000000\nvt 0.386364 0.363636\nvt 0.386364 0.318182\nvt 0.386364 0.681818\nvt 0.386364 0.636364\nvt 0.397728 1.000000\nvt 0.386364 0.954546\nvt 0.386364 0.272727\nvt 0.386364 0.590909\nvt 0.386364 0.909091\nvt 0.386364 0.227273\nvt 0.386364 0.545455\nvt 0.386364 0.863637\nvt 0.386364 0.181818\nvt 0.386364 0.500000\nvt 0.386364 0.818182\nvt 0.386364 0.136364\nvt 0.386364 0.454545\nvt 0.386364 0.772727\nvt 0.386364 0.090909\nvt 0.386364 0.409091\nvt 0.386364 0.727273\nvt 0.386364 0.045454\nvt 0.397728 0.000000\nvt 0.363636 0.727273\nvt 0.363636 0.681818\nvt 0.375001 0.000000\nvt 0.363637 0.045454\nvt 0.363636 0.363636\nvt 0.363636 0.318182\nvt 0.363636 0.636364\nvt 0.375000 1.000000\nvt 0.363637 0.954546\nvt 0.363636 0.272727\nvt 0.363636 0.590909\nvt 0.363637 0.909091\nvt 0.363636 0.227273\nvt 0.363636 0.545455\nvt 0.363637 0.863637\nvt 0.363636 0.181818\nvt 0.363636 0.500000\nvt 0.363636 0.818182\nvt 0.363637 0.136364\nvt 0.363636 0.454545\nvt 0.363636 0.772727\nvt 0.363637 0.090909\nvt 0.363636 0.409091\nvt 0.340909 0.409091\nvt 0.340909 0.363636\nvt 0.340909 0.727273\nvt 0.340909 0.681818\nvt 0.352273 0.000000\nvt 0.340909 0.045454\nvt 0.340909 0.318182\nvt 0.340909 0.636364\nvt 0.352273 1.000000\nvt 0.340909 0.954546\nvt 0.340909 0.272727\nvt 0.340909 0.590909\nvt 0.340909 0.909091\nvt 0.340909 0.227273\nvt 0.340909 0.545455\nvt 0.340909 0.863637\nvt 0.340909 0.181818\nvt 0.340909 0.500000\nvt 0.340909 0.818182\nvt 0.340909 0.136363\nvt 0.340909 0.454545\nvt 0.340909 0.772727\nvt 0.340909 0.090909\nvt 0.318182 0.772727\nvt 0.318182 0.727273\nvt 0.318182 0.090909\nvt 0.318182 0.045454\nvt 0.318182 0.409091\nvt 0.318182 0.363636\nvt 0.318182 0.681818\nvt 0.329546 0.000000\nvt 0.318182 0.318182\nvt 0.318182 0.636364\nvt 0.329546 1.000000\nvt 0.318182 0.954546\nvt 0.318182 0.272727\nvt 0.318182 0.590909\nvt 0.318182 0.909091\nvt 0.318182 0.227273\nvt 0.318182 0.545455\nvt 0.318182 0.863637\nvt 0.318182 0.181818\nvt 0.318182 0.500000\nvt 0.318182 0.818182\nvt 0.318182 0.136363\nvt 0.318182 0.454545\nvt 0.295455 0.136363\nvt 0.295455 0.090909\nvt 0.295455 0.454545\nvt 0.295455 0.409091\nvt 0.295455 0.772727\nvt 0.295455 0.727273\nvt 0.295455 0.045454\nvt 0.295455 0.363636\nvt 0.295455 0.681818\nvt 0.306819 0.000000\nvt 0.295455 0.318182\nvt 0.295455 0.636364\nvt 0.306818 1.000000\nvt 0.295455 0.954546\nvt 0.295455 0.272727\nvt 0.295455 0.590909\nvt 0.295455 0.909091\nvt 0.295455 0.227273\nvt 0.295455 0.545455\nvt 0.295455 0.863637\nvt 0.295455 0.181818\nvt 0.295455 0.500000\nvt 0.295455 0.818182\nvt 0.272727 0.500000\nvt 0.272727 0.454545\nvt 0.272727 0.818182\nvt 0.272727 0.772727\nvt 0.272727 0.136363\nvt 0.272727 0.090909\nvt 0.272727 0.409091\nvt 0.272727 0.727273\nvt 0.272727 0.045454\nvt 0.272727 0.363636\nvt 0.272727 0.681818\nvt 0.284091 0.000000\nvt 0.272727 0.318182\nvt 0.272727 0.636364\nvt 0.284091 1.000000\nvt 0.272727 0.954546\nvt 0.272727 0.272727\nvt 0.272727 0.590909\nvt 0.272727 0.909091\nvt 0.272727 0.227273\nvt 0.272727 0.545455\nvt 0.272727 0.863637\nvt 0.272727 0.181818\nvt 0.250000 0.863637\nvt 0.250000 0.818182\nvt 0.250000 0.181818\nvt 0.250000 0.136363\nvt 0.250000 0.500000\nvt 0.250000 0.454545\nvt 0.250000 0.772727\nvt 0.250000 0.090909\nvt 0.250000 0.409091\nvt 0.250000 0.727273\nvt 0.250000 0.045454\nvt 0.250000 0.363636\nvt 0.250000 0.681818\nvt 0.261364 0.000000\nvt 0.250000 0.318182\nvt 0.250000 0.636364\nvt 0.261363 1.000000\nvt 0.250000 0.954546\nvt 0.250000 0.272727\nvt 0.250000 0.590909\nvt 0.250000 0.909091\nvt 0.250000 0.227273\nvt 0.250000 0.545455\nvt 0.227273 0.545455\nvt 0.227273 0.500000\nvt 0.227273 0.863637\nvt 0.227273 0.818182\nvt 0.227273 0.181818\nvt 0.227273 0.136363\nvt 0.227273 0.454545\nvt 0.227273 0.772727\nvt 0.227273 0.090909\nvt 0.227273 0.409091\nvt 0.227273 0.727273\nvt 0.227273 0.045454\nvt 0.227273 0.363636\nvt 0.227273 0.681818\nvt 0.238636 0.000000\nvt 0.227273 0.318182\nvt 0.227273 0.636364\nvt 0.238636 1.000000\nvt 0.227273 0.954546\nvt 0.227273 0.272727\nvt 0.227273 0.590909\nvt 0.227273 0.909091\nvt 0.227273 0.227273\nvt 0.204545 0.909091\nvt 0.204545 0.863637\nvt 0.204545 0.227273\nvt 0.204545 0.181818\nvt 0.204545 0.545455\nvt 0.204545 0.500000\nvt 0.204545 0.818182\nvt 0.204545 0.136363\nvt 0.204545 0.454545\nvt 0.204545 0.772727\nvt 0.204545 0.090909\nvt 0.204545 0.409091\nvt 0.204545 0.727273\nvt 0.204545 0.045454\nvt 0.204545 0.363636\nvt 0.204545 0.681818\nvt 0.215909 0.000000\nvt 0.204545 0.318182\nvt 0.204545 0.636364\nvt 0.215909 1.000000\nvt 0.204545 0.954546\nvt 0.204545 0.272727\nvt 0.204545 0.590909\nvt 0.181818 0.272727\nvt 0.181818 0.227273\nvt 0.181818 0.590909\nvt 0.181818 0.545455\nvt 0.181818 0.909091\nvt 0.181818 0.863637\nvt 0.181818 0.181818\nvt 0.181818 0.500000\nvt 0.181818 0.818182\nvt 0.181818 0.136363\nvt 0.181818 0.454545\nvt 0.181818 0.772727\nvt 0.181818 0.090909\nvt 0.181818 0.409091\nvt 0.181818 0.727273\nvt 0.181818 0.045454\nvt 0.181818 0.363636\nvt 0.181818 0.681818\nvt 0.193181 0.000000\nvt 0.181818 0.318182\nvt 0.181818 0.636364\nvt 0.193181 1.000000\nvt 0.181818 0.954546\nvt 0.159091 0.636364\nvt 0.159091 0.590909\nvt 0.159091 0.954546\nvt 0.159091 0.909091\nvt 0.159091 0.272727\nvt 0.159091 0.227273\nvt 0.159091 0.545455\nvt 0.159091 0.863637\nvt 0.159091 0.181818\nvt 0.159091 0.500000\nvt 0.159091 0.818182\nvt 0.159091 0.136363\nvt 0.159091 0.454545\nvt 0.159091 0.772727\nvt 0.159091 0.090909\nvt 0.159091 0.409091\nvt 0.159091 0.727273\nvt 0.159091 0.045454\nvt 0.159091 0.363636\nvt 0.159091 0.681818\nvt 0.170454 0.000000\nvt 0.159091 0.318182\nvt 0.170454 1.000000\nvt 0.147726 1.000000\nvt 0.136363 0.954546\nvt 0.136364 0.318182\nvt 0.136364 0.272727\nvt 0.136364 0.636364\nvt 0.136364 0.590909\nvt 0.136363 0.909091\nvt 0.136364 0.227273\nvt 0.136364 0.545455\nvt 0.136364 0.863637\nvt 0.136364 0.181818\nvt 0.136364 0.500000\nvt 0.136364 0.818182\nvt 0.136363 0.136364\nvt 0.136364 0.454545\nvt 0.136364 0.772727\nvt 0.136363 0.090909\nvt 0.136364 0.409091\nvt 0.136364 0.727273\nvt 0.136363 0.045454\nvt 0.136364 0.363636\nvt 0.136364 0.681818\nvt 0.147727 0.000000\nvt 0.113636 0.681818\nvt 0.113636 0.636364\nvt 0.124999 1.000000\nvt 0.113636 0.954546\nvt 0.113636 0.318182\nvt 0.113636 0.272727\nvt 0.113636 0.590909\nvt 0.113636 0.909091\nvt 0.113636 0.227273\nvt 0.113636 0.545455\nvt 0.113636 0.863637\nvt 0.113636 0.181818\nvt 0.113636 0.500000\nvt 0.113636 0.818182\nvt 0.113636 0.136364\nvt 0.113636 0.454545\nvt 0.113636 0.772727\nvt 0.113636 0.090909\nvt 0.113636 0.409091\nvt 0.113636 0.727273\nvt 0.113636 0.045454\nvt 0.113636 0.363636\nvt 0.124999 0.000000\nvt 0.102272 0.000000\nvt 0.090909 0.045454\nvt 0.090909 0.363636\nvt 0.090909 0.318182\nvt 0.090909 0.681818\nvt 0.090909 0.636364\nvt 0.102272 1.000000\nvt 0.090908 0.954546\nvt 0.090909 0.272727\nvt 0.090909 0.590909\nvt 0.090909 0.909091\nvt 0.090909 0.227273\nvt 0.090909 0.545455\nvt 0.090909 0.863637\nvt 0.090909 0.181818\nvt 0.090909 0.500000\nvt 0.090909 0.818182\nvt 0.090909 0.136364\nvt 0.090909 0.454545\nvt 0.090909 0.772727\nvt 0.090909 0.090909\nvt 0.090909 0.409091\nvt 0.090909 0.727273\nvt 0.068182 0.409091\nvt 0.068182 0.363636\nvt 0.068182 0.727273\nvt 0.068182 0.681818\nvt 0.079545 0.000000\nvt 0.068181 0.045454\nvt 0.068182 0.318182\nvt 0.068182 0.636364\nvt 0.079544 1.000000\nvt 0.068181 0.954546\nvt 0.068182 0.272727\nvt 0.068182 0.590909\nvt 0.068182 0.909091\nvt 0.068182 0.227273\nvt 0.068182 0.545455\nvt 0.068182 0.863637\nvt 0.068182 0.181818\nvt 0.068182 0.500000\nvt 0.068182 0.818182\nvt 0.068182 0.136364\nvt 0.068182 0.454545\nvt 0.068182 0.772727\nvt 0.068181 0.090909\nvt 0.045454 0.772727\nvt 0.045454 0.727273\nvt 0.045454 0.090909\nvt 0.045454 0.045454\nvt 0.045454 0.409091\nvt 0.045455 0.363636\nvt 0.045454 0.681818\nvt 0.056817 0.000000\nvt 0.045454 0.318182\nvt 0.045454 0.636364\nvt 0.056817 1.000000\nvt 0.045454 0.954546\nvt 0.045454 0.272727\nvt 0.045455 0.590909\nvt 0.045454 0.909091\nvt 0.045454 0.227273\nvt 0.045454 0.545455\nvt 0.045454 0.863637\nvt 0.045454 0.181818\nvt 0.045455 0.500000\nvt 0.045454 0.818182\nvt 0.045454 0.136364\nvt 0.045454 0.454545\nvt 0.022727 0.454545\nvt 0.022727 0.409091\nvt 0.022727 0.772727\nvt 0.022727 0.727273\nvt 0.022727 0.090909\nvt 0.022727 0.045454\nvt 0.022727 0.363636\nvt 0.022727 0.681818\nvt 0.034090 0.000000\nvt 0.022727 0.318182\nvt 0.022727 0.636364\nvt 0.034090 1.000000\nvt 0.022727 0.954546\nvt 0.022727 0.272727\nvt 0.022727 0.590909\nvt 0.022727 0.909091\nvt 0.022727 0.227273\nvt 0.022727 0.545455\nvt 0.022727 0.863637\nvt 0.022727 0.181818\nvt 0.022727 0.500000\nvt 0.022727 0.818182\nvt 0.022727 0.136364\nvt 0.000000 0.818182\nvt 0.000000 0.772727\nvt 0.000000 0.136364\nvt 0.000000 0.090909\nvt 0.000000 0.454545\nvt 0.000000 0.409091\nvt 0.000000 0.727273\nvt 0.000000 0.045454\nvt 0.000000 0.363636\nvt 0.000000 0.681818\nvt 0.011363 0.000000\nvt 0.000000 0.318182\nvt 0.000000 0.636364\nvt 0.011363 1.000000\nvt 0.000000 0.954546\nvt 0.000000 0.272727\nvt 0.000000 0.590909\nvt 0.000000 0.909091\nvt 0.000000 0.227273\nvt 0.000000 0.545455\nvt 0.000000 0.863637\nvt 0.000000 0.181818\nvt 0.000000 0.500000\nvt 1.000000 0.136364\nvt 1.000000 0.181818\nvt 0.977273 0.181818\nvt 0.977273 0.136364\nvt 1.000000 0.454545\nvt 1.000000 0.500000\nvt 0.977273 0.500000\nvt 0.977273 0.454545\nvt 1.000000 0.772727\nvt 1.000000 0.818182\nvt 0.977273 0.818182\nvt 0.977273 0.772727\nvt 1.000000 0.090909\nvt 0.977272 0.090909\nvt 1.000000 0.409091\nvt 0.977273 0.409091\nvt 1.000000 0.727273\nvt 0.977273 0.727273\nvt 1.000000 0.045454\nvt 0.977272 0.045455\nvt 1.000000 0.363636\nvt 0.977273 0.363636\nvt 1.000000 0.681818\nvt 0.977273 0.681818\nvt 0.988635 0.000000\nvt 1.000000 0.318182\nvt 0.977273 0.318182\nvt 1.000000 0.636364\nvt 0.977273 0.636364\nvt 1.000000 0.954546\nvt 0.988635 1.000000\nvt 0.977272 0.954546\nvt 1.000000 0.272727\nvt 0.977273 0.272727\nvt 1.000000 0.590909\nvt 0.977273 0.590909\nvt 1.000000 0.909091\nvt 0.977272 0.909091\nvt 1.000000 0.227273\nvt 0.977273 0.227273\nvt 1.000000 0.545455\nvt 0.977273 0.545455\nvt 1.000000 0.863637\nvt 0.977273 0.863637\nvt 0.954545 0.545455\nvt 0.954545 0.500000\nvt 0.954545 0.863637\nvt 0.954545 0.818182\nvt 0.954545 0.181818\nvt 0.954545 0.136364\nvt 0.954545 0.454545\nvt 0.954545 0.772727\nvt 0.954545 0.090909\nvt 0.954545 0.409091\nvt 0.954545 0.727273\nvt 0.954545 0.045455\nvt 0.954545 0.363636\nvt 0.954545 0.681818\nvt 0.965908 0.000000\nvt 0.954545 0.318182\nvt 0.954545 0.636364\nvt 0.965908 1.000000\nvt 0.954545 0.954546\nvt 0.954545 0.272727\nvt 0.954545 0.590909\nvt 0.954545 0.909091\nvt 0.954545 0.227273\nvt 0.931818 0.909091\nvt 0.931818 0.863636\nvt 0.931818 0.227273\nvt 0.931818 0.181818\nvt 0.931818 0.545455\nvt 0.931818 0.500000\nvt 0.931818 0.818182\nvt 0.931818 0.136364\nvt 0.931818 0.454545\nvt 0.931818 0.772727\nvt 0.931818 0.090909\nvt 0.931818 0.409091\nvt 0.931818 0.727273\nvt 0.931818 0.045455\nvt 0.931818 0.363636\nvt 0.931818 0.681818\nvt 0.943181 0.000000\nvt 0.931818 0.318182\nvt 0.931818 0.636364\nvt 0.943181 1.000000\nvt 0.931818 0.954546\nvt 0.931818 0.272727\nvt 0.931818 0.590909\nvt 0.909091 0.590909\nvt 0.909091 0.545455\nvt 0.909091 0.909091\nvt 0.909091 0.863636\nvt 0.909091 0.227273\nvt 0.909091 0.181818\nvt 0.909091 0.500000\nvt 0.909091 0.818182\nvt 0.909091 0.136364\nvt 0.909091 0.454545\nvt 0.909091 0.772727\nvt 0.909091 0.090909\nvt 0.909091 0.409091\nvt 0.909091 0.727273\nvt 0.909090 0.045455\nvt 0.909091 0.363636\nvt 0.909091 0.681818\nvt 0.920454 0.000000\nvt 0.909091 0.318182\nvt 0.909091 0.636364\nvt 0.920454 1.000000\nvt 0.909090 0.954546\nvt 0.909091 0.272727\nvt 0.886364 0.454545\nvt 0.886364 0.409091\nvt 0.886364 0.772727\nvt 0.886364 0.727273\nvt 0.886363 0.090909\nvt 0.886363 0.045455\nvt 0.886364 0.363636\nvt 0.886364 0.681818\nvt 0.897726 0.000000\nvt 0.886364 0.318182\nvt 0.886364 0.636364\nvt 0.897727 1.000000\nvt 0.886363 0.954546\nvt 0.886364 0.272727\nvt 0.886364 0.590909\nvt 0.886363 0.909091\nvt 0.886364 0.227273\nvt 0.886364 0.545455\nvt 0.886363 0.863636\nvt 0.886364 0.181818\nvt 0.886364 0.500000\nvt 0.886364 0.818182\nvt 0.886363 0.136364\nvt 0.863636 0.818182\nvt 0.863636 0.772727\nvt 0.863636 0.136364\nvt 0.863636 0.090909\nvt 0.863636 0.454545\nvt 0.863636 0.409091\nvt 0.863636 0.727273\nvt 0.863636 0.045455\nvt 0.863636 0.363636\nvt 0.863636 0.681818\nvt 0.874999 0.000000\nvt 0.863636 0.318182\nvt 0.863636 0.636364\nvt 0.875000 1.000000\nvt 0.863636 0.954546\nvt 0.863636 0.272727\nvt 0.863636 0.590909\nvt 0.863636 0.909091\nvt 0.863636 0.227273\nvt 0.863636 0.545455\nvt 0.863636 0.863636\nvt 0.863636 0.181818\nvt 0.863636 0.500000\nvt 0.840909 0.500000\nvt 0.840909 0.454545\nvt 0.840909 0.818182\nvt 0.840909 0.772727\nvt 0.840909 0.136364\nvt 0.840909 0.090909\nvt 0.840909 0.409091\nvt 0.840909 0.727273\nvt 0.840909 0.045455\nvt 0.840909 0.363636\nvt 0.840909 0.681818\nvt 0.852272 0.000000\nvt 0.840909 0.318182\nvt 0.840909 0.636364\nvt 0.852272 1.000000\nvt 0.840909 0.954546\nvt 0.840909 0.272727\nvt 0.840909 0.590909\nvt 0.840909 0.909091\nvt 0.840909 0.227273\nvt 0.840909 0.545455\nvt 0.840909 0.863636\nvt 0.840909 0.181818\nvt 0.818182 0.863636\nvt 0.818182 0.818182\nvt 0.818182 0.181818\nvt 0.818182 0.136364\nvt 0.818182 0.500000\nvt 0.818182 0.454545\nvt 0.818182 0.772727\nvt 0.818182 0.090909\nvt 0.818182 0.409091\nvt 0.818182 0.727273\nvt 0.818182 0.045455\nvt 0.818182 0.363636\nvt 0.818182 0.681818\nvt 0.829545 0.000000\nvt 0.818182 0.318182\nvt 0.818182 0.636364\nvt 0.829545 1.000000\nvt 0.818182 0.954546\nvt 0.818182 0.272727\nvt 0.818182 0.590909\nvt 0.818182 0.909091\nvt 0.818182 0.227273\nvt 0.818182 0.545455\nvt 0.795455 0.227273\nvt 0.795455 0.181818\nvt 0.795455 0.545455\nvt 0.795455 0.500000\nvt 0.795455 0.863636\nvt 0.795455 0.818182\nvt 0.795455 0.136364\nvt 0.795455 0.454545\nvt 0.795455 0.772727\nvt 0.795454 0.090909\nvt 0.795455 0.409091\nvt 0.795455 0.727273\nvt 0.795454 0.045455\nvt 0.795455 0.363636\nvt 0.795455 0.681818\nvt 0.806818 0.000000\nvt 0.795455 0.318182\nvt 0.795455 0.636364\nvt 0.806818 1.000000\nvt 0.795454 0.954546\nvt 0.795455 0.272727\nvt 0.795455 0.590909\nvt 0.795454 0.909091\nvt 0.772727 0.590909\nvt 0.772727 0.545455\nvt 0.772727 0.909091\nvt 0.772727 0.863636\nvt 0.772727 0.227273\nvt 0.772727 0.181818\nvt 0.772727 0.500000\nvt 0.772727 0.818182\nvt 0.772727 0.136364\nvt 0.772727 0.454545\nvt 0.772727 0.772727\nvt 0.772727 0.090909\nvt 0.772727 0.409091\nvt 0.772727 0.727273\nvt 0.772727 0.045455\nvt 0.772727 0.363636\nvt 0.772727 0.681818\nvt 0.784091 0.000000\nvt 0.772727 0.318182\nvt 0.772727 0.636364\nvt 0.784091 1.000000\nvt 0.772727 0.954546\nvt 0.772727 0.272727\nvt 0.761364 0.000000\nvt 0.761364 1.000000\nvn 0.0000 0.9893 -0.1455\nvn 0.0000 1.0000 0.0000\nvn 0.0207 0.9893 -0.1440\nvn 0.0000 -0.6532 -0.7571\nvn 0.0000 -0.5391 -0.8422\nvn 0.1198 -0.5392 -0.8336\nvn 0.1077 -0.6532 -0.7494\nvn 0.0000 0.2808 -0.9597\nvn 0.0000 0.4142 -0.9102\nvn 0.1295 0.4142 -0.9009\nvn 0.1366 0.2808 -0.9499\nvn 0.0000 0.9586 -0.2847\nvn 0.0405 0.9586 -0.2818\nvn 0.0000 -0.7541 -0.6567\nvn 0.0934 -0.7541 -0.6500\nvn 0.0000 0.1419 -0.9899\nvn 0.1409 0.1419 -0.9798\nvn 0.0000 0.9084 -0.4181\nvn 0.0595 0.9084 -0.4138\nvn 0.0000 -0.8398 -0.5429\nvn 0.0772 -0.8398 -0.5374\nvn 0.0000 0.0000 -1.0000\nvn 0.1423 0.0000 -0.9898\nvn 0.0000 0.8398 -0.5429\nvn 0.0772 0.8398 -0.5374\nvn 0.0000 -0.9084 -0.4181\nvn 0.0595 -0.9084 -0.4138\nvn 0.0000 -0.1419 -0.9899\nvn 0.1409 -0.1419 -0.9798\nvn 0.0000 0.7541 -0.6567\nvn 0.0934 0.7541 -0.6500\nvn 0.0000 -0.9586 -0.2847\nvn 0.0405 -0.9586 -0.2818\nvn 0.0000 -0.2809 -0.9597\nvn 0.1366 -0.2808 -0.9499\nvn 0.0000 0.6532 -0.7571\nvn 0.1077 0.6532 -0.7494\nvn 0.0000 -0.9893 -0.1455\nvn 0.0207 -0.9893 -0.1440\nvn 0.0000 -0.4142 -0.9102\nvn 0.1295 -0.4142 -0.9009\nvn 0.0000 0.5392 -0.8422\nvn 0.1198 0.5392 -0.8336\nvn 0.0000 -1.0000 0.0000\nvn 0.2373 -0.5392 -0.8081\nvn 0.2133 -0.6532 -0.7265\nvn 0.2564 0.4142 -0.8733\nvn 0.2704 0.2808 -0.9209\nvn 0.0410 0.9893 -0.1396\nvn 0.0802 0.9586 -0.2732\nvn 0.1850 -0.7541 -0.6301\nvn 0.2789 0.1419 -0.9498\nvn 0.1178 0.9084 -0.4011\nvn 0.1530 -0.8398 -0.5209\nvn 0.2817 0.0000 -0.9595\nvn 0.1530 0.8398 -0.5209\nvn 0.1178 -0.9084 -0.4011\nvn 0.2789 -0.1419 -0.9498\nvn 0.1850 0.7541 -0.6301\nvn 0.0802 -0.9586 -0.2732\nvn 0.2704 -0.2808 -0.9209\nvn 0.2133 0.6532 -0.7265\nvn 0.0410 -0.9893 -0.1396\nvn 0.2564 -0.4142 -0.8733\nvn 0.2373 0.5392 -0.8081\nvn 0.3498 0.5392 -0.7661\nvn 0.3781 0.4142 -0.8279\nvn 0.0604 0.9893 -0.1323\nvn 0.3498 -0.5392 -0.7661\nvn 0.3145 -0.6532 -0.6887\nvn 0.3987 0.2808 -0.8730\nvn 0.1183 0.9586 -0.2590\nvn 0.2728 -0.7541 -0.5973\nvn 0.4112 0.1419 -0.9004\nvn 0.1737 0.9084 -0.3803\nvn 0.2255 -0.8398 -0.4939\nvn 0.4154 0.0000 -0.9096\nvn 0.2255 0.8398 -0.4939\nvn 0.1737 -0.9084 -0.3803\nvn 0.4112 -0.1419 -0.9004\nvn 0.2728 0.7541 -0.5973\nvn 0.1183 -0.9586 -0.2590\nvn 0.3987 -0.2808 -0.8730\nvn 0.3145 0.6532 -0.6887\nvn 0.0604 -0.9893 -0.1323\nvn 0.3781 -0.4142 -0.8279\nvn 0.4921 -0.4142 -0.7657\nvn 0.4553 -0.5392 -0.7085\nvn 0.4553 0.5392 -0.7085\nvn 0.4921 0.4142 -0.7657\nvn 0.0786 0.9893 -0.1224\nvn 0.4093 -0.6532 -0.6369\nvn 0.5189 0.2808 -0.8074\nvn 0.1539 0.9586 -0.2395\nvn 0.3550 -0.7541 -0.5524\nvn 0.5352 0.1419 -0.8327\nvn 0.2260 0.9084 -0.3517\nvn 0.2935 -0.8398 -0.4567\nvn 0.5406 0.0000 -0.8412\nvn 0.2935 0.8398 -0.4567\nvn 0.2260 -0.9084 -0.3517\nvn 0.5352 -0.1419 -0.8327\nvn 0.3550 0.7541 -0.5524\nvn 0.1539 -0.9586 -0.2395\nvn 0.5189 -0.2808 -0.8074\nvn 0.4093 0.6532 -0.6369\nvn 0.0786 -0.9893 -0.1224\nvn 0.4958 0.6532 -0.5722\nvn 0.5515 0.5392 -0.6365\nvn 0.0952 -0.9893 -0.1099\nvn 0.5960 -0.4142 -0.6879\nvn 0.5515 -0.5392 -0.6365\nvn 0.5960 0.4142 -0.6879\nvn 0.0952 0.9893 -0.1099\nvn 0.4958 -0.6532 -0.5722\nvn 0.6285 0.2808 -0.7253\nvn 0.1864 0.9586 -0.2152\nvn 0.4300 -0.7541 -0.4963\nvn 0.6482 0.1419 -0.7481\nvn 0.2738 0.9084 -0.3160\nvn 0.3555 -0.8398 -0.4103\nvn 0.6548 0.0000 -0.7557\nvn 0.3555 0.8398 -0.4103\nvn 0.2738 -0.9084 -0.3160\nvn 0.6482 -0.1419 -0.7481\nvn 0.4300 0.7541 -0.4963\nvn 0.1864 -0.9586 -0.2152\nvn 0.6285 -0.2808 -0.7253\nvn 0.2152 -0.9586 -0.1864\nvn 0.1099 -0.9893 -0.0952\nvn 0.7253 -0.2808 -0.6285\nvn 0.6879 -0.4142 -0.5960\nvn 0.5722 0.6532 -0.4958\nvn 0.6365 0.5392 -0.5515\nvn 0.6365 -0.5392 -0.5515\nvn 0.6879 0.4142 -0.5960\nvn 0.1099 0.9893 -0.0952\nvn 0.5722 -0.6532 -0.4958\nvn 0.7253 0.2808 -0.6285\nvn 0.2152 0.9586 -0.1864\nvn 0.4963 -0.7541 -0.4300\nvn 0.7481 0.1419 -0.6482\nvn 0.3160 0.9084 -0.2738\nvn 0.4103 -0.8398 -0.3555\nvn 0.7557 0.0000 -0.6548\nvn 0.4103 0.8398 -0.3555\nvn 0.3160 -0.9084 -0.2738\nvn 0.7481 -0.1419 -0.6482\nvn 0.4963 0.7541 -0.4300\nvn 0.8327 -0.1419 -0.5352\nvn 0.8074 -0.2808 -0.5189\nvn 0.5524 0.7541 -0.3550\nvn 0.6369 0.6532 -0.4093\nvn 0.2395 -0.9586 -0.1539\nvn 0.1224 -0.9893 -0.0786\nvn 0.7657 -0.4142 -0.4921\nvn 0.7085 0.5392 -0.4553\nvn 0.7085 -0.5392 -0.4553\nvn 0.7657 0.4142 -0.4921\nvn 0.1224 0.9893 -0.0786\nvn 0.6369 -0.6532 -0.4093\nvn 0.8074 0.2808 -0.5189\nvn 0.2395 0.9586 -0.1539\nvn 0.5524 -0.7541 -0.3550\nvn 0.8327 0.1419 -0.5352\nvn 0.3517 0.9084 -0.2260\nvn 0.4567 -0.8398 -0.2935\nvn 0.8412 0.0000 -0.5406\nvn 0.4567 0.8398 -0.2935\nvn 0.3517 -0.9084 -0.2260\nvn 0.4939 0.8398 -0.2255\nvn 0.5973 0.7541 -0.2728\nvn 0.3803 -0.9084 -0.1737\nvn 0.2590 -0.9586 -0.1183\nvn 0.9004 -0.1419 -0.4112\nvn 0.8730 -0.2808 -0.3987\nvn 0.6887 0.6532 -0.3145\nvn 0.1323 -0.9893 -0.0604\nvn 0.8279 -0.4142 -0.3781\nvn 0.7661 0.5392 -0.3498\nvn 0.7661 -0.5392 -0.3498\nvn 0.8279 0.4142 -0.3781\nvn 0.1323 0.9893 -0.0604\nvn 0.6887 -0.6532 -0.3145\nvn 0.8730 0.2808 -0.3987\nvn 0.2590 0.9586 -0.1183\nvn 0.5973 -0.7541 -0.2728\nvn 0.9004 0.1419 -0.4112\nvn 0.3803 0.9084 -0.1737\nvn 0.4939 -0.8398 -0.2255\nvn 0.9096 0.0000 -0.4154\nvn 0.9595 0.0000 -0.2817\nvn 0.9498 -0.1419 -0.2789\nvn 0.5209 0.8398 -0.1530\nvn 0.6301 0.7541 -0.1850\nvn 0.4011 -0.9084 -0.1178\nvn 0.2732 -0.9586 -0.0802\nvn 0.9209 -0.2808 -0.2704\nvn 0.7265 0.6532 -0.2133\nvn 0.1396 -0.9893 -0.0410\nvn 0.8733 -0.4142 -0.2564\nvn 0.8081 0.5392 -0.2373\nvn 0.8081 -0.5392 -0.2373\nvn 0.8733 0.4142 -0.2564\nvn 0.1396 0.9893 -0.0410\nvn 0.7265 -0.6532 -0.2133\nvn 0.9209 0.2808 -0.2704\nvn 0.2732 0.9586 -0.0802\nvn 0.6301 -0.7541 -0.1850\nvn 0.9498 0.1419 -0.2789\nvn 0.4011 0.9084 -0.1178\nvn 0.5209 -0.8398 -0.1530\nvn 0.4138 0.9084 -0.0595\nvn 0.5374 0.8398 -0.0772\nvn 0.5374 -0.8398 -0.0772\nvn 0.4138 -0.9084 -0.0595\nvn 0.9898 0.0000 -0.1423\nvn 0.9798 -0.1419 -0.1409\nvn 0.6500 0.7541 -0.0934\nvn 0.2818 -0.9586 -0.0405\nvn 0.9499 -0.2808 -0.1366\nvn 0.7494 0.6532 -0.1077\nvn 0.1440 -0.9893 -0.0207\nvn 0.9009 -0.4142 -0.1295\nvn 0.8336 0.5392 -0.1198\nvn 0.8336 -0.5392 -0.1198\nvn 0.9009 0.4142 -0.1295\nvn 0.1440 0.9893 -0.0207\nvn 0.7494 -0.6532 -0.1077\nvn 0.9499 0.2808 -0.1366\nvn 0.2818 0.9586 -0.0405\nvn 0.6500 -0.7541 -0.0934\nvn 0.9798 0.1419 -0.1409\nvn 0.6567 -0.7541 0.0000\nvn 0.5429 -0.8398 0.0000\nvn 0.9899 0.1419 0.0000\nvn 1.0000 0.0000 0.0000\nvn 0.4181 0.9084 0.0000\nvn 0.5429 0.8398 0.0000\nvn 0.4181 -0.9084 0.0000\nvn 0.9899 -0.1419 0.0000\nvn 0.6567 0.7541 0.0000\nvn 0.2847 -0.9586 0.0000\nvn 0.9597 -0.2808 0.0000\nvn 0.7571 0.6532 0.0000\nvn 0.1455 -0.9893 0.0000\nvn 0.9102 -0.4142 0.0000\nvn 0.8422 0.5392 0.0000\nvn 0.8422 -0.5392 0.0000\nvn 0.9102 0.4142 0.0000\nvn 0.1455 0.9893 0.0000\nvn 0.7571 -0.6532 0.0000\nvn 0.9597 0.2808 0.0000\nvn 0.2847 0.9586 0.0000\nvn 0.9499 0.2808 0.1366\nvn 0.9798 0.1419 0.1409\nvn 0.2818 0.9586 0.0405\nvn 0.4138 0.9084 0.0595\nvn 0.6500 -0.7541 0.0934\nvn 0.5374 -0.8398 0.0772\nvn 0.9898 0.0000 0.1423\nvn 0.5374 0.8398 0.0772\nvn 0.4138 -0.9084 0.0595\nvn 0.9798 -0.1419 0.1409\nvn 0.6500 0.7541 0.0934\nvn 0.2818 -0.9586 0.0405\nvn 0.9499 -0.2808 0.1366\nvn 0.7494 0.6532 0.1077\nvn 0.1440 -0.9893 0.0207\nvn 0.9009 -0.4142 0.1295\nvn 0.8336 0.5392 0.1198\nvn 0.8336 -0.5392 0.1198\nvn 0.9009 0.4142 0.1295\nvn 0.1440 0.9893 0.0207\nvn 0.7494 -0.6532 0.1077\nvn 0.1396 0.9893 0.0410\nvn 0.2732 0.9586 0.0802\nvn 0.7265 -0.6532 0.2133\nvn 0.6301 -0.7541 0.1850\nvn 0.9209 0.2808 0.2704\nvn 0.9498 0.1419 0.2789\nvn 0.4011 0.9084 0.1178\nvn 0.5209 -0.8398 0.1530\nvn 0.9595 0.0000 0.2817\nvn 0.5209 0.8398 0.1530\nvn 0.4011 -0.9084 0.1178\nvn 0.9498 -0.1419 0.2789\nvn 0.6301 0.7541 0.1850\nvn 0.2732 -0.9586 0.0802\nvn 0.9209 -0.2808 0.2704\nvn 0.7265 0.6532 0.2133\nvn 0.1396 -0.9893 0.0410\nvn 0.8733 -0.4142 0.2564\nvn 0.8081 0.5392 0.2373\nvn 0.8081 -0.5392 0.2373\nvn 0.8733 0.4142 0.2564\nvn 0.8279 0.4142 0.3781\nvn 0.8730 0.2808 0.3987\nvn 0.1323 0.9893 0.0604\nvn 0.2590 0.9586 0.1183\nvn 0.6887 -0.6532 0.3145\nvn 0.5973 -0.7541 0.2728\nvn 0.9004 0.1419 0.4112\nvn 0.3803 0.9084 0.1737\nvn 0.4939 -0.8398 0.2255\nvn 0.9096 0.0000 0.4154\nvn 0.4939 0.8398 0.2255\nvn 0.3803 -0.9084 0.1737\nvn 0.9004 -0.1419 0.4112\nvn 0.5973 0.7541 0.2728\nvn 0.2590 -0.9586 0.1183\nvn 0.8730 -0.2808 0.3987\nvn 0.6887 0.6532 0.3145\nvn 0.1323 -0.9893 0.0604\nvn 0.8279 -0.4142 0.3781\nvn 0.7661 0.5392 0.3498\nvn 0.7661 -0.5392 0.3498\nvn 0.1224 0.9893 0.0786\nvn 0.7085 -0.5392 0.4553\nvn 0.6369 -0.6532 0.4093\nvn 0.7657 0.4142 0.4921\nvn 0.8074 0.2808 0.5189\nvn 0.2395 0.9586 0.1539\nvn 0.5524 -0.7541 0.3550\nvn 0.8327 0.1419 0.5352\nvn 0.3517 0.9084 0.2260\nvn 0.4567 -0.8398 0.2935\nvn 0.8412 0.0000 0.5406\nvn 0.4567 0.8398 0.2935\nvn 0.3517 -0.9084 0.2260\nvn 0.8327 -0.1419 0.5352\nvn 0.5524 0.7541 0.3550\nvn 0.2395 -0.9586 0.1539\nvn 0.8074 -0.2808 0.5189\nvn 0.6369 0.6532 0.4093\nvn 0.1224 -0.9893 0.0786\nvn 0.7657 -0.4142 0.4921\nvn 0.7085 0.5392 0.4553\nvn 0.6879 -0.4142 0.5960\nvn 0.6365 -0.5392 0.5515\nvn 0.6365 0.5392 0.5515\nvn 0.6879 0.4142 0.5960\nvn 0.1099 0.9893 0.0952\nvn 0.5722 -0.6532 0.4958\nvn 0.7253 0.2808 0.6285\nvn 0.2152 0.9586 0.1864\nvn 0.4963 -0.7541 0.4300\nvn 0.7481 0.1419 0.6482\nvn 0.3160 0.9084 0.2738\nvn 0.4103 -0.8398 0.3555\nvn 0.7557 0.0000 0.6548\nvn 0.4103 0.8398 0.3555\nvn 0.3160 -0.9084 0.2738\nvn 0.7481 -0.1419 0.6482\nvn 0.4963 0.7541 0.4300\nvn 0.2152 -0.9586 0.1864\nvn 0.7253 -0.2808 0.6285\nvn 0.5722 0.6532 0.4958\nvn 0.1099 -0.9893 0.0952\nvn 0.4958 0.6532 0.5722\nvn 0.5515 0.5392 0.6365\nvn 0.0952 -0.9893 0.1099\nvn 0.5960 -0.4142 0.6879\nvn 0.5515 -0.5392 0.6365\nvn 0.5960 0.4142 0.6879\nvn 0.0952 0.9893 0.1099\nvn 0.4958 -0.6532 0.5722\nvn 0.6285 0.2808 0.7253\nvn 0.1864 0.9586 0.2152\nvn 0.4300 -0.7541 0.4963\nvn 0.6482 0.1419 0.7481\nvn 0.2738 0.9084 0.3160\nvn 0.3555 -0.8398 0.4103\nvn 0.6548 0.0000 0.7557\nvn 0.3555 0.8398 0.4103\nvn 0.2738 -0.9084 0.3160\nvn 0.6482 -0.1419 0.7481\nvn 0.4300 0.7541 0.4963\nvn 0.1864 -0.9586 0.2152\nvn 0.6285 -0.2808 0.7253\nvn 0.5189 -0.2808 0.8074\nvn 0.4921 -0.4142 0.7657\nvn 0.4093 0.6532 0.6369\nvn 0.4553 0.5392 0.7085\nvn 0.0786 -0.9893 0.1224\nvn 0.4553 -0.5392 0.7085\nvn 0.4921 0.4142 0.7657\nvn 0.0786 0.9893 0.1224\nvn 0.4093 -0.6532 0.6369\nvn 0.5189 0.2808 0.8074\nvn 0.1539 0.9586 0.2395\nvn 0.3550 -0.7541 0.5524\nvn 0.5352 0.1419 0.8327\nvn 0.2260 0.9084 0.3517\nvn 0.2935 -0.8398 0.4567\nvn 0.5406 0.0000 0.8412\nvn 0.2935 0.8398 0.4567\nvn 0.2260 -0.9084 0.3517\nvn 0.5352 -0.1419 0.8327\nvn 0.3550 0.7541 0.5524\nvn 0.1539 -0.9586 0.2395\nvn 0.2728 0.7541 0.5973\nvn 0.3145 0.6532 0.6887\nvn 0.1183 -0.9586 0.2590\nvn 0.0604 -0.9893 0.1323\nvn 0.3987 -0.2808 0.8730\nvn 0.3781 -0.4142 0.8279\nvn 0.3498 0.5392 0.7661\nvn 0.3498 -0.5392 0.7661\nvn 0.3781 0.4142 0.8279\nvn 0.0604 0.9893 0.1323\nvn 0.3145 -0.6532 0.6887\nvn 0.3987 0.2808 0.8730\nvn 0.1183 0.9586 0.2590\nvn 0.2728 -0.7541 0.5973\nvn 0.4112 0.1419 0.9004\nvn 0.1737 0.9084 0.3803\nvn 0.2255 -0.8398 0.4939\nvn 0.4154 0.0000 0.9096\nvn 0.2255 0.8398 0.4939\nvn 0.1737 -0.9084 0.3803\nvn 0.4112 -0.1419 0.9004\nvn 0.1178 -0.9084 0.4011\nvn 0.0802 -0.9586 0.2732\nvn 0.2789 -0.1419 0.9498\nvn 0.2704 -0.2808 0.9209\nvn 0.1850 0.7541 0.6301\nvn 0.2133 0.6532 0.7265\nvn 0.0410 -0.9893 0.1396\nvn 0.2564 -0.4142 0.8733\nvn 0.2373 0.5392 0.8081\nvn 0.2373 -0.5392 0.8081\nvn 0.2564 0.4142 0.8733\nvn 0.0410 0.9893 0.1396\nvn 0.2133 -0.6532 0.7265\nvn 0.2704 0.2808 0.9209\nvn 0.0802 0.9586 0.2732\nvn 0.1850 -0.7541 0.6301\nvn 0.2789 0.1419 0.9498\nvn 0.1178 0.9084 0.4011\nvn 0.1530 -0.8398 0.5209\nvn 0.2817 0.0000 0.9595\nvn 0.1530 0.8398 0.5209\nvn 0.1423 0.0000 0.9898\nvn 0.1409 -0.1419 0.9798\nvn 0.0772 0.8398 0.5374\nvn 0.0934 0.7541 0.6500\nvn 0.0595 -0.9084 0.4138\nvn 0.0405 -0.9586 0.2818\nvn 0.1366 -0.2808 0.9499\nvn 0.1077 0.6532 0.7494\nvn 0.0207 -0.9893 0.1440\nvn 0.1295 -0.4142 0.9009\nvn 0.1198 0.5392 0.8336\nvn 0.1198 -0.5392 0.8336\nvn 0.1295 0.4142 0.9009\nvn 0.0207 0.9893 0.1440\nvn 0.1077 -0.6532 0.7494\nvn 0.1366 0.2808 0.9499\nvn 0.0405 0.9586 0.2818\nvn 0.0934 -0.7541 0.6500\nvn 0.1409 0.1419 0.9798\nvn 0.0595 0.9084 0.4138\nvn 0.0772 -0.8398 0.5374\nvn 0.0000 0.9084 0.4181\nvn 0.0000 0.8398 0.5429\nvn 0.0000 -0.8398 0.5429\nvn 0.0000 -0.9084 0.4181\nvn 0.0000 0.0000 1.0000\nvn 0.0000 -0.1419 0.9899\nvn 0.0000 0.7541 0.6567\nvn 0.0000 -0.9586 0.2847\nvn 0.0000 -0.2808 0.9597\nvn 0.0000 0.6532 0.7571\nvn 0.0000 -0.9893 0.1455\nvn 0.0000 -0.4142 0.9102\nvn 0.0000 0.5392 0.8422\nvn 0.0000 -0.5392 0.8422\nvn 0.0000 0.4142 0.9102\nvn 0.0000 0.9893 0.1455\nvn 0.0000 -0.6532 0.7571\nvn 0.0000 0.2808 0.9597\nvn 0.0000 0.9586 0.2847\nvn 0.0000 -0.7541 0.6567\nvn 0.0000 0.1419 0.9899\nvn -0.1409 0.1419 0.9798\nvn -0.1423 0.0000 0.9898\nvn -0.0595 0.9084 0.4138\nvn -0.0772 0.8398 0.5374\nvn -0.0772 -0.8398 0.5374\nvn -0.0595 -0.9084 0.4138\nvn -0.1409 -0.1419 0.9798\nvn -0.0934 0.7541 0.6500\nvn -0.0405 -0.9586 0.2818\nvn -0.1366 -0.2808 0.9499\nvn -0.1077 0.6532 0.7494\nvn -0.0207 -0.9893 0.1440\nvn -0.1295 -0.4142 0.9009\nvn -0.1198 0.5392 0.8336\nvn -0.1198 -0.5392 0.8336\nvn -0.1295 0.4142 0.9009\nvn -0.0207 0.9893 0.1440\nvn -0.1077 -0.6532 0.7494\nvn -0.1366 0.2808 0.9499\nvn -0.0405 0.9586 0.2818\nvn -0.0934 -0.7541 0.6500\nvn -0.0802 0.9586 0.2732\nvn -0.1178 0.9084 0.4011\nvn -0.1850 -0.7541 0.6301\nvn -0.1530 -0.8398 0.5209\nvn -0.2789 0.1419 0.9498\nvn -0.2817 0.0000 0.9595\nvn -0.1530 0.8398 0.5209\nvn -0.1178 -0.9084 0.4011\nvn -0.2789 -0.1419 0.9498\nvn -0.1850 0.7541 0.6301\nvn -0.0802 -0.9586 0.2732\nvn -0.2704 -0.2808 0.9209\nvn -0.2133 0.6532 0.7265\nvn -0.0410 -0.9893 0.1396\nvn -0.2564 -0.4142 0.8733\nvn -0.2373 0.5392 0.8081\nvn -0.2373 -0.5392 0.8081\nvn -0.2564 0.4142 0.8733\nvn -0.0410 0.9893 0.1396\nvn -0.2133 -0.6532 0.7265\nvn -0.2704 0.2808 0.9209\nvn -0.3145 -0.6532 0.6887\nvn -0.2728 -0.7541 0.5973\nvn -0.3987 0.2808 0.8730\nvn -0.4112 0.1419 0.9004\nvn -0.1183 0.9586 0.2590\nvn -0.1737 0.9084 0.3803\nvn -0.2255 -0.8398 0.4939\nvn -0.4154 0.0000 0.9096\nvn -0.2255 0.8398 0.4939\nvn -0.1737 -0.9084 0.3803\nvn -0.4112 -0.1419 0.9004\nvn -0.2728 0.7541 0.5973\nvn -0.1183 -0.9586 0.2590\nvn -0.3987 -0.2808 0.8730\nvn -0.3145 0.6532 0.6887\nvn -0.0604 -0.9893 0.1323\nvn -0.3781 -0.4142 0.8279\nvn -0.3498 0.5392 0.7661\nvn -0.3498 -0.5392 0.7661\nvn -0.3781 0.4142 0.8279\nvn -0.0604 0.9893 0.1323\nvn -0.4921 0.4142 0.7657\nvn -0.5189 0.2808 0.8074\nvn -0.0786 0.9893 0.1224\nvn -0.1539 0.9586 0.2395\nvn -0.4093 -0.6532 0.6369\nvn -0.3550 -0.7541 0.5524\nvn -0.5352 0.1419 0.8327\nvn -0.2260 0.9084 0.3517\nvn -0.2935 -0.8398 0.4567\nvn -0.5406 0.0000 0.8412\nvn -0.2935 0.8398 0.4567\nvn -0.2260 -0.9084 0.3517\nvn -0.5352 -0.1419 0.8327\nvn -0.3550 0.7541 0.5524\nvn -0.1539 -0.9586 0.2395\nvn -0.5189 -0.2808 0.8074\nvn -0.4093 0.6532 0.6369\nvn -0.0786 -0.9893 0.1224\nvn -0.4921 -0.4142 0.7657\nvn -0.4553 0.5392 0.7085\nvn -0.4553 -0.5392 0.7085\nvn -0.0952 0.9893 0.1099\nvn -0.5515 -0.5392 0.6365\nvn -0.4958 -0.6532 0.5722\nvn -0.5960 0.4142 0.6879\nvn -0.6285 0.2808 0.7253\nvn -0.1864 0.9586 0.2152\nvn -0.4300 -0.7541 0.4963\nvn -0.6482 0.1419 0.7481\nvn -0.2738 0.9084 0.3160\nvn -0.3555 -0.8398 0.4103\nvn -0.6548 0.0000 0.7557\nvn -0.3555 0.8398 0.4103\nvn -0.2738 -0.9084 0.3160\nvn -0.6482 -0.1419 0.7481\nvn -0.4300 0.7541 0.4963\nvn -0.1864 -0.9586 0.2152\nvn -0.6285 -0.2808 0.7253\nvn -0.4958 0.6532 0.5722\nvn -0.0952 -0.9893 0.1099\nvn -0.5960 -0.4142 0.6879\nvn -0.5515 0.5392 0.6365\nvn -0.6365 0.5392 0.5515\nvn -0.6879 0.4142 0.5960\nvn -0.1099 0.9893 0.0952\nvn -0.6365 -0.5392 0.5515\nvn -0.5722 -0.6532 0.4958\nvn -0.7253 0.2808 0.6285\nvn -0.2152 0.9586 0.1864\nvn -0.4963 -0.7541 0.4300\nvn -0.7481 0.1419 0.6482\nvn -0.3160 0.9084 0.2738\nvn -0.4103 -0.8398 0.3555\nvn -0.7557 0.0000 0.6548\nvn -0.4103 0.8398 0.3555\nvn -0.3160 -0.9084 0.2738\nvn -0.7481 -0.1419 0.6482\nvn -0.4963 0.7541 0.4300\nvn -0.2152 -0.9586 0.1864\nvn -0.7253 -0.2808 0.6285\nvn -0.5722 0.6532 0.4958\nvn -0.1099 -0.9893 0.0952\nvn -0.6879 -0.4142 0.5960\nvn -0.1224 -0.9893 0.0786\nvn -0.7657 -0.4142 0.4921\nvn -0.7085 -0.5392 0.4553\nvn -0.7085 0.5392 0.4553\nvn -0.7657 0.4142 0.4921\nvn -0.1224 0.9893 0.0786\nvn -0.6369 -0.6532 0.4093\nvn -0.8074 0.2808 0.5189\nvn -0.2395 0.9586 0.1539\nvn -0.5524 -0.7541 0.3550\nvn -0.8327 0.1419 0.5352\nvn -0.3517 0.9084 0.2260\nvn -0.4567 -0.8398 0.2935\nvn -0.8412 0.0000 0.5406\nvn -0.4567 0.8398 0.2935\nvn -0.3517 -0.9084 0.2260\nvn -0.8327 -0.1419 0.5352\nvn -0.5524 0.7541 0.3550\nvn -0.2395 -0.9586 0.1539\nvn -0.8074 -0.2808 0.5189\nvn -0.6369 0.6532 0.4093\nvn -0.8730 -0.2808 0.3987\nvn -0.8279 -0.4142 0.3781\nvn -0.6887 0.6532 0.3145\nvn -0.7661 0.5392 0.3498\nvn -0.1323 -0.9893 0.0604\nvn -0.7661 -0.5392 0.3498\nvn -0.8279 0.4142 0.3781\nvn -0.1323 0.9893 0.0604\nvn -0.6887 -0.6532 0.3145\nvn -0.8730 0.2808 0.3987\nvn -0.2590 0.9586 0.1183\nvn -0.5973 -0.7541 0.2728\nvn -0.9004 0.1419 0.4112\nvn -0.3803 0.9084 0.1737\nvn -0.4939 -0.8398 0.2255\nvn -0.9096 0.0000 0.4154\nvn -0.4939 0.8398 0.2255\nvn -0.3803 -0.9084 0.1737\nvn -0.9004 -0.1419 0.4112\nvn -0.5973 0.7541 0.2728\nvn -0.2590 -0.9586 0.1183\nvn -0.6301 0.7541 0.1850\nvn -0.7265 0.6532 0.2133\nvn -0.2732 -0.9586 0.0802\nvn -0.1396 -0.9893 0.0410\nvn -0.9209 -0.2808 0.2704\nvn -0.8733 -0.4142 0.2564\nvn -0.8081 0.5392 0.2373\nvn -0.8081 -0.5392 0.2373\nvn -0.8733 0.4142 0.2564\nvn -0.1396 0.9893 0.0410\nvn -0.7265 -0.6532 0.2133\nvn -0.9209 0.2808 0.2704\nvn -0.2732 0.9586 0.0802\nvn -0.6301 -0.7541 0.1850\nvn -0.9498 0.1419 0.2789\nvn -0.4011 0.9084 0.1178\nvn -0.5209 -0.8398 0.1530\nvn -0.9595 0.0000 0.2817\nvn -0.5209 0.8398 0.1530\nvn -0.4011 -0.9084 0.1178\nvn -0.9498 -0.1419 0.2789\nvn -0.9798 -0.1419 0.1409\nvn -0.9499 -0.2808 0.1366\nvn -0.6500 0.7541 0.0934\nvn -0.7494 0.6532 0.1077\nvn -0.2818 -0.9586 0.0405\nvn -0.1440 -0.9893 0.0207\nvn -0.9009 -0.4142 0.1295\nvn -0.8336 0.5392 0.1198\nvn -0.8336 -0.5391 0.1198\nvn -0.9009 0.4142 0.1295\nvn -0.1440 0.9893 0.0207\nvn -0.7494 -0.6532 0.1077\nvn -0.9499 0.2808 0.1366\nvn -0.2818 0.9586 0.0405\nvn -0.6500 -0.7541 0.0934\nvn -0.9798 0.1419 0.1409\nvn -0.4138 0.9084 0.0595\nvn -0.5374 -0.8398 0.0772\nvn -0.9898 0.0000 0.1423\nvn -0.5374 0.8398 0.0772\nvn -0.4138 -0.9084 0.0595\nvn -0.5429 0.8398 0.0000\nvn -0.6567 0.7541 0.0000\nvn -0.4181 -0.9084 0.0000\nvn -0.2847 -0.9586 0.0000\nvn -0.9899 -0.1419 0.0000\nvn -0.9597 -0.2808 0.0000\nvn -0.7571 0.6532 0.0000\nvn -0.1455 -0.9893 0.0000\nvn -0.9102 -0.4142 0.0000\nvn -0.8422 0.5392 0.0000\nvn -0.8422 -0.5391 0.0000\nvn -0.9102 0.4142 0.0000\nvn -0.1455 0.9893 0.0000\nvn -0.7571 -0.6532 0.0000\nvn -0.9597 0.2808 0.0000\nvn -0.2847 0.9586 0.0000\nvn -0.6567 -0.7541 0.0000\nvn -0.9899 0.1419 0.0000\nvn -0.4181 0.9084 0.0000\nvn -0.5429 -0.8398 0.0000\nvn -1.0000 0.0000 0.0000\nvn -0.5374 -0.8398 -0.0772\nvn -0.4138 -0.9084 -0.0595\nvn -0.9898 0.0000 -0.1423\nvn -0.9798 -0.1419 -0.1409\nvn -0.5374 0.8398 -0.0772\nvn -0.6500 0.7541 -0.0934\nvn -0.2818 -0.9586 -0.0405\nvn -0.9499 -0.2808 -0.1366\nvn -0.7494 0.6532 -0.1077\nvn -0.1440 -0.9893 -0.0207\nvn -0.9009 -0.4142 -0.1295\nvn -0.8336 0.5392 -0.1198\nvn -0.8336 -0.5391 -0.1198\nvn -0.9009 0.4142 -0.1295\nvn -0.1440 0.9893 -0.0207\nvn -0.7494 -0.6532 -0.1077\nvn -0.9499 0.2808 -0.1366\nvn -0.2818 0.9586 -0.0405\nvn -0.6500 -0.7541 -0.0934\nvn -0.9798 0.1419 -0.1409\nvn -0.4138 0.9084 -0.0595\nvn -0.9498 0.1419 -0.2789\nvn -0.9595 0.0000 -0.2817\nvn -0.4011 0.9084 -0.1178\nvn -0.5209 0.8398 -0.1530\nvn -0.5209 -0.8398 -0.1530\nvn -0.4011 -0.9084 -0.1178\nvn -0.9498 -0.1419 -0.2789\nvn -0.6301 0.7541 -0.1850\nvn -0.2732 -0.9586 -0.0802\nvn -0.9209 -0.2808 -0.2704\nvn -0.7265 0.6532 -0.2133\nvn -0.1396 -0.9893 -0.0410\nvn -0.8733 -0.4142 -0.2564\nvn -0.8081 0.5392 -0.2373\nvn -0.8081 -0.5391 -0.2373\nvn -0.8733 0.4142 -0.2564\nvn -0.1396 0.9893 -0.0410\nvn -0.7265 -0.6532 -0.2133\nvn -0.9209 0.2808 -0.2704\nvn -0.2732 0.9586 -0.0802\nvn -0.6301 -0.7541 -0.1850\nvn -0.2590 0.9586 -0.1183\nvn -0.3803 0.9084 -0.1737\nvn -0.5973 -0.7541 -0.2728\nvn -0.4939 -0.8398 -0.2255\nvn -0.9004 0.1419 -0.4112\nvn -0.9096 0.0000 -0.4154\nvn -0.4939 0.8398 -0.2255\nvn -0.3803 -0.9084 -0.1737\nvn -0.9004 -0.1419 -0.4112\nvn -0.5973 0.7541 -0.2728\nvn -0.2590 -0.9586 -0.1183\nvn -0.8730 -0.2808 -0.3987\nvn -0.6887 0.6532 -0.3145\nvn -0.1323 -0.9893 -0.0604\nvn -0.8279 -0.4142 -0.3781\nvn -0.7661 0.5392 -0.3498\nvn -0.7661 -0.5391 -0.3498\nvn -0.8279 0.4142 -0.3781\nvn -0.1323 0.9893 -0.0604\nvn -0.6887 -0.6532 -0.3145\nvn -0.8730 0.2808 -0.3987\nvn -0.8074 0.2808 -0.5189\nvn -0.8327 0.1419 -0.5352\nvn -0.2395 0.9586 -0.1539\nvn -0.3517 0.9084 -0.2260\nvn -0.5524 -0.7541 -0.3550\nvn -0.4567 -0.8398 -0.2935\nvn -0.8412 0.0000 -0.5406\nvn -0.4567 0.8398 -0.2935\nvn -0.3517 -0.9084 -0.2260\nvn -0.8327 -0.1419 -0.5352\nvn -0.5524 0.7541 -0.3550\nvn -0.2395 -0.9586 -0.1539\nvn -0.8074 -0.2808 -0.5189\nvn -0.6369 0.6532 -0.4093\nvn -0.1224 -0.9893 -0.0786\nvn -0.7657 -0.4142 -0.4921\nvn -0.7085 0.5392 -0.4553\nvn -0.7085 -0.5391 -0.4553\nvn -0.7657 0.4142 -0.4921\nvn -0.1224 0.9893 -0.0786\nvn -0.6369 -0.6532 -0.4093\nvn -0.7481 -0.1419 -0.6482\nvn -0.7253 -0.2809 -0.6285\nvn -0.4963 0.7541 -0.4300\nvn -0.5722 0.6532 -0.4958\nvn -0.2152 -0.9586 -0.1864\nvn -0.1099 -0.9893 -0.0952\nvn -0.6879 -0.4142 -0.5960\nvn -0.6365 0.5392 -0.5515\nvn -0.6365 -0.5391 -0.5515\nvn -0.6879 0.4142 -0.5960\nvn -0.1099 0.9893 -0.0952\nvn -0.5722 -0.6532 -0.4958\nvn -0.7253 0.2808 -0.6285\nvn -0.2152 0.9586 -0.1864\nvn -0.4963 -0.7541 -0.4300\nvn -0.7481 0.1419 -0.6482\nvn -0.3160 0.9084 -0.2738\nvn -0.4103 -0.8398 -0.3555\nvn -0.7557 0.0000 -0.6548\nvn -0.4103 0.8398 -0.3555\nvn -0.3160 -0.9084 -0.2738\nvn -0.3555 0.8398 -0.4103\nvn -0.4300 0.7541 -0.4963\nvn -0.2738 -0.9084 -0.3160\nvn -0.1864 -0.9586 -0.2152\nvn -0.6482 -0.1419 -0.7481\nvn -0.6285 -0.2808 -0.7253\nvn -0.4958 0.6532 -0.5722\nvn -0.0952 -0.9893 -0.1099\nvn -0.5960 -0.4142 -0.6879\nvn -0.5515 0.5392 -0.6365\nvn -0.5515 -0.5391 -0.6365\nvn -0.5960 0.4142 -0.6879\nvn -0.0952 0.9893 -0.1099\nvn -0.4958 -0.6532 -0.5722\nvn -0.6285 0.2808 -0.7253\nvn -0.1864 0.9586 -0.2152\nvn -0.4300 -0.7541 -0.4963\nvn -0.6482 0.1419 -0.7481\nvn -0.2738 0.9084 -0.3160\nvn -0.3555 -0.8398 -0.4103\nvn -0.6548 0.0000 -0.7557\nvn -0.5406 0.0000 -0.8412\nvn -0.5352 -0.1419 -0.8327\nvn -0.2935 0.8398 -0.4567\nvn -0.3550 0.7541 -0.5524\nvn -0.2260 -0.9084 -0.3517\nvn -0.1539 -0.9586 -0.2395\nvn -0.5189 -0.2808 -0.8074\nvn -0.4093 0.6532 -0.6369\nvn -0.0786 -0.9893 -0.1224\nvn -0.4921 -0.4142 -0.7657\nvn -0.4553 0.5392 -0.7085\nvn -0.4553 -0.5391 -0.7085\nvn -0.4921 0.4142 -0.7657\nvn -0.0786 0.9893 -0.1224\nvn -0.4093 -0.6532 -0.6369\nvn -0.5189 0.2808 -0.8074\nvn -0.1539 0.9586 -0.2395\nvn -0.3550 -0.7541 -0.5524\nvn -0.5352 0.1419 -0.8327\nvn -0.2260 0.9084 -0.3517\nvn -0.2935 -0.8398 -0.4567\nvn -0.1737 0.9084 -0.3803\nvn -0.2255 0.8398 -0.4939\nvn -0.2255 -0.8398 -0.4939\nvn -0.1737 -0.9084 -0.3803\nvn -0.4154 0.0000 -0.9096\nvn -0.4112 -0.1419 -0.9004\nvn -0.2728 0.7541 -0.5973\nvn -0.1183 -0.9586 -0.2590\nvn -0.3987 -0.2809 -0.8730\nvn -0.3145 0.6532 -0.6887\nvn -0.0604 -0.9893 -0.1323\nvn -0.3781 -0.4142 -0.8279\nvn -0.3498 0.5392 -0.7661\nvn -0.3498 -0.5391 -0.7661\nvn -0.3781 0.4142 -0.8279\nvn -0.0604 0.9893 -0.1323\nvn -0.3145 -0.6532 -0.6887\nvn -0.3987 0.2808 -0.8730\nvn -0.1183 0.9586 -0.2590\nvn -0.2728 -0.7541 -0.5973\nvn -0.4112 0.1419 -0.9004\nvn -0.1850 -0.7541 -0.6301\nvn -0.1530 -0.8398 -0.5209\nvn -0.2789 0.1419 -0.9498\nvn -0.2817 0.0000 -0.9595\nvn -0.1178 0.9084 -0.4011\nvn -0.1530 0.8398 -0.5209\nvn -0.1178 -0.9084 -0.4011\nvn -0.2789 -0.1419 -0.9498\nvn -0.1850 0.7541 -0.6301\nvn -0.0802 -0.9586 -0.2732\nvn -0.2704 -0.2809 -0.9209\nvn -0.2133 0.6532 -0.7265\nvn -0.0410 -0.9893 -0.1396\nvn -0.2564 -0.4142 -0.8733\nvn -0.2373 0.5392 -0.8081\nvn -0.2373 -0.5391 -0.8081\nvn -0.2564 0.4142 -0.8733\nvn -0.0410 0.9893 -0.1396\nvn -0.2133 -0.6532 -0.7265\nvn -0.2704 0.2808 -0.9209\nvn -0.0802 0.9586 -0.2732\nvn -0.1366 0.2808 -0.9499\nvn -0.1409 0.1419 -0.9798\nvn -0.0405 0.9586 -0.2818\nvn -0.0595 0.9084 -0.4138\nvn -0.0934 -0.7541 -0.6500\nvn -0.0772 -0.8398 -0.5374\nvn -0.1423 0.0000 -0.9898\nvn -0.0772 0.8398 -0.5374\nvn -0.0595 -0.9084 -0.4138\nvn -0.1409 -0.1419 -0.9798\nvn -0.0934 0.7541 -0.6500\nvn -0.0405 -0.9586 -0.2818\nvn -0.1366 -0.2809 -0.9499\nvn -0.1077 0.6532 -0.7494\nvn -0.0207 -0.9893 -0.1440\nvn -0.1295 -0.4142 -0.9009\nvn -0.1198 0.5392 -0.8336\nvn -0.1198 -0.5391 -0.8336\nvn -0.1295 0.4142 -0.9009\nvn -0.0207 0.9893 -0.1440\nvn -0.1077 -0.6532 -0.7494\nusemtl None\ns 1\nf 908/1/1 192/2/2 3/3/3\nf 922/4/4 921/5/5 17/6/6 18/7/7\nf 916/8/8 915/9/9 10/10/10 11/11/11\nf 909/12/12 908/1/1 3/3/3 4/13/13\nf 923/14/14 922/4/4 18/7/7 19/15/15\nf 917/16/16 916/8/8 11/11/11 12/17/17\nf 910/18/18 909/12/12 4/13/13 5/19/19\nf 924/20/20 923/14/14 19/15/15 20/21/21\nf 918/22/22 917/16/16 12/17/17 13/23/23\nf 911/24/24 910/18/18 5/19/19 6/25/25\nf 925/26/26 924/20/20 20/21/21 21/27/27\nf 1/28/28 918/22/22 13/23/23 14/29/29\nf 912/30/30 911/24/24 6/25/25 7/31/31\nf 926/32/32 925/26/26 21/27/27 22/33/33\nf 919/34/34 1/28/28 14/29/29 15/35/35\nf 913/36/36 912/30/30 7/31/31 8/37/37\nf 2/38/38 926/32/32 22/33/33 23/39/39\nf 920/40/40 919/34/34 15/35/35 16/41/41\nf 914/42/42 913/36/36 8/37/37 9/43/43\nf 529/44/44 2/38/38 23/39/39\nf 921/5/5 920/40/40 16/41/41 17/6/6\nf 915/9/9 914/42/42 9/43/43 10/10/10\nf 18/7/7 17/6/6 38/45/45 39/46/46\nf 11/11/11 10/10/10 31/47/47 32/48/48\nf 4/13/13 3/3/3 24/49/49 25/50/50\nf 19/15/15 18/7/7 39/46/46 40/51/51\nf 12/17/17 11/11/11 32/48/48 33/52/52\nf 5/19/19 4/13/13 25/50/50 26/53/53\nf 20/21/21 19/15/15 40/51/51 41/54/54\nf 13/23/23 12/17/17 33/52/52 34/55/55\nf 6/25/25 5/19/19 26/53/53 27/56/56\nf 21/27/27 20/21/21 41/54/54 42/57/57\nf 14/29/29 13/23/23 34/55/55 35/58/58\nf 7/31/31 6/25/25 27/56/56 28/59/59\nf 22/33/33 21/27/27 42/57/57 43/60/60\nf 15/35/35 14/29/29 35/58/58 36/61/61\nf 8/37/37 7/31/31 28/59/59 29/62/62\nf 23/39/39 22/33/33 43/60/60 44/63/63\nf 16/41/41 15/35/35 36/61/61 37/64/64\nf 9/43/43 8/37/37 29/62/62 30/65/65\nf 529/66/44 23/39/39 44/63/63\nf 17/6/6 16/41/41 37/64/64 38/45/45\nf 10/10/10 9/43/43 30/65/65 31/47/47\nf 3/3/3 192/67/2 24/49/49\nf 31/47/47 30/65/65 51/68/66 52/69/67\nf 24/49/49 192/70/2 45/71/68\nf 39/46/46 38/45/45 59/72/69 60/73/70\nf 32/48/48 31/47/47 52/69/67 53/74/71\nf 25/50/50 24/49/49 45/71/68 46/75/72\nf 40/51/51 39/46/46 60/73/70 61/76/73\nf 33/52/52 32/48/48 53/74/71 54/77/74\nf 26/53/53 25/50/50 46/75/72 47/78/75\nf 41/54/54 40/51/51 61/76/73 62/79/76\nf 34/55/55 33/52/52 54/77/74 55/80/77\nf 27/56/56 26/53/53 47/78/75 48/81/78\nf 42/57/57 41/54/54 62/79/76 63/82/79\nf 35/58/58 34/55/55 55/80/77 56/83/80\nf 28/59/59 27/56/56 48/81/78 49/84/81\nf 43/60/60 42/57/57 63/82/79 64/85/82\nf 36/61/61 35/58/58 56/83/80 57/86/83\nf 29/62/62 28/59/59 49/84/81 50/87/84\nf 44/63/63 43/60/60 64/85/82 65/88/85\nf 37/64/64 36/61/61 57/86/83 58/89/86\nf 30/65/65 29/62/62 50/87/84 51/68/66\nf 529/90/44 44/63/63 65/88/85\nf 38/45/45 37/64/64 58/89/86 59/72/69\nf 59/72/69 58/89/86 79/91/87 80/92/88\nf 52/69/67 51/68/66 72/93/89 73/94/90\nf 45/71/68 192/95/2 66/96/91\nf 60/73/70 59/72/69 80/92/88 81/97/92\nf 53/74/71 52/69/67 73/94/90 74/98/93\nf 46/75/72 45/71/68 66/96/91 67/99/94\nf 61/76/73 60/73/70 81/97/92 82/100/95\nf 54/77/74 53/74/71 74/98/93 75/101/96\nf 47/78/75 46/75/72 67/99/94 68/102/97\nf 62/79/76 61/76/73 82/100/95 83/103/98\nf 55/80/77 54/77/74 75/101/96 76/104/99\nf 48/81/78 47/78/75 68/102/97 69/105/100\nf 63/82/79 62/79/76 83/103/98 84/106/101\nf 56/83/80 55/80/77 76/104/99 77/107/102\nf 49/84/81 48/81/78 69/105/100 70/108/103\nf 64/85/82 63/82/79 84/106/101 85/109/104\nf 57/86/83 56/83/80 77/107/102 78/110/105\nf 50/87/84 49/84/81 70/108/103 71/111/106\nf 65/88/85 64/85/82 85/109/104 86/112/107\nf 58/89/86 57/86/83 78/110/105 79/91/87\nf 51/68/66 50/87/84 71/111/106 72/93/89\nf 529/113/44 65/88/85 86/112/107\nf 72/93/89 71/111/106 92/114/108 93/115/109\nf 529/116/44 86/112/107 107/117/110\nf 80/92/88 79/91/87 100/118/111 101/119/112\nf 73/94/90 72/93/89 93/115/109 94/120/113\nf 66/96/91 192/121/2 87/122/114\nf 81/97/92 80/92/88 101/119/112 102/123/115\nf 74/98/93 73/94/90 94/120/113 95/124/116\nf 67/99/94 66/96/91 87/122/114 88/125/117\nf 82/100/95 81/97/92 102/123/115 103/126/118\nf 75/101/96 74/98/93 95/124/116 96/127/119\nf 68/102/97 67/99/94 88/125/117 89/128/120\nf 83/103/98 82/100/95 103/126/118 104/129/121\nf 76/104/99 75/101/96 96/127/119 97/130/122\nf 69/105/100 68/102/97 89/128/120 90/131/123\nf 84/106/101 83/103/98 104/129/121 105/132/124\nf 77/107/102 76/104/99 97/130/122 98/133/125\nf 70/108/103 69/105/100 90/131/123 91/134/126\nf 85/109/104 84/106/101 105/132/124 106/135/127\nf 78/110/105 77/107/102 98/133/125 99/136/128\nf 71/111/106 70/108/103 91/134/126 92/114/108\nf 86/112/107 85/109/104 106/135/127 107/117/110\nf 79/91/87 78/110/105 99/136/128 100/118/111\nf 107/117/110 106/135/127 127/137/129 128/138/130\nf 100/118/111 99/136/128 120/139/131 121/140/132\nf 93/115/109 92/114/108 113/141/133 114/142/134\nf 529/143/44 107/117/110 128/138/130\nf 101/119/112 100/118/111 121/140/132 122/144/135\nf 94/120/113 93/115/109 114/142/134 115/145/136\nf 87/122/114 192/146/2 108/147/137\nf 102/123/115 101/119/112 122/144/135 123/148/138\nf 95/124/116 94/120/113 115/145/136 116/149/139\nf 88/125/117 87/122/114 108/147/137 109/150/140\nf 103/126/118 102/123/115 123/148/138 124/151/141\nf 96/127/119 95/124/116 116/149/139 117/152/142\nf 89/128/120 88/125/117 109/150/140 110/153/143\nf 104/129/121 103/126/118 124/151/141 125/154/144\nf 97/130/122 96/127/119 117/152/142 118/155/145\nf 90/131/123 89/128/120 110/153/143 111/156/146\nf 105/132/124 104/129/121 125/154/144 126/157/147\nf 98/133/125 97/130/122 118/155/145 119/158/148\nf 91/134/126 90/131/123 111/156/146 112/159/149\nf 106/135/127 105/132/124 126/157/147 127/137/129\nf 99/136/128 98/133/125 119/158/148 120/139/131\nf 92/114/108 91/134/126 112/159/149 113/141/133\nf 120/139/131 119/158/148 140/160/150 141/161/151\nf 113/141/133 112/159/149 133/162/152 134/163/153\nf 128/138/130 127/137/129 148/164/154 149/165/155\nf 121/140/132 120/139/131 141/161/151 142/166/156\nf 114/142/134 113/141/133 134/163/153 135/167/157\nf 529/168/44 128/138/130 149/165/155\nf 122/144/135 121/140/132 142/166/156 143/169/158\nf 115/145/136 114/142/134 135/167/157 136/170/159\nf 108/147/137 192/171/2 129/172/160\nf 123/148/138 122/144/135 143/169/158 144/173/161\nf 116/149/139 115/145/136 136/170/159 137/174/162\nf 109/150/140 108/147/137 129/172/160 130/175/163\nf 124/151/141 123/148/138 144/173/161 145/176/164\nf 117/152/142 116/149/139 137/174/162 138/177/165\nf 110/153/143 109/150/140 130/175/163 131/178/166\nf 125/154/144 124/151/141 145/176/164 146/179/167\nf 118/155/145 117/152/142 138/177/165 139/180/168\nf 111/156/146 110/153/143 131/178/166 132/181/169\nf 126/157/147 125/154/144 146/179/167 147/182/170\nf 119/158/148 118/155/145 139/180/168 140/160/150\nf 112/159/149 111/156/146 132/181/169 133/162/152\nf 127/137/129 126/157/147 147/182/170 148/164/154\nf 133/162/152 132/181/169 153/183/171 154/184/172\nf 148/164/154 147/182/170 168/185/173 169/186/174\nf 141/161/151 140/160/150 161/187/175 162/188/176\nf 134/163/153 133/162/152 154/184/172 155/189/177\nf 149/165/155 148/164/154 169/186/174 170/190/178\nf 142/166/156 141/161/151 162/188/176 163/191/179\nf 135/167/157 134/163/153 155/189/177 156/192/180\nf 529/193/44 149/165/155 170/190/178\nf 143/169/158 142/166/156 163/191/179 164/194/181\nf 136/170/159 135/167/157 156/192/180 157/195/182\nf 129/172/160 192/196/2 150/197/183\nf 144/173/161 143/169/158 164/194/181 165/198/184\nf 137/174/162 136/170/159 157/195/182 158/199/185\nf 130/175/163 129/172/160 150/197/183 151/200/186\nf 145/176/164 144/173/161 165/198/184 166/201/187\nf 138/177/165 137/174/162 158/199/185 159/202/188\nf 131/178/166 130/175/163 151/200/186 152/203/189\nf 146/179/167 145/176/164 166/201/187 167/204/190\nf 139/180/168 138/177/165 159/202/188 160/205/191\nf 132/181/169 131/178/166 152/203/189 153/183/171\nf 147/182/170 146/179/167 167/204/190 168/185/173\nf 140/160/150 139/180/168 160/205/191 161/187/175\nf 161/187/175 160/205/191 181/206/192 182/207/193\nf 154/184/172 153/183/171 174/208/194 175/209/195\nf 169/186/174 168/185/173 189/210/196 190/211/197\nf 162/188/176 161/187/175 182/207/193 183/212/198\nf 155/189/177 154/184/172 175/209/195 176/213/199\nf 170/190/178 169/186/174 190/211/197 191/214/200\nf 163/191/179 162/188/176 183/212/198 184/215/201\nf 156/192/180 155/189/177 176/213/199 177/216/202\nf 529/217/44 170/190/178 191/214/200\nf 164/194/181 163/191/179 184/215/201 185/218/203\nf 157/195/182 156/192/180 177/216/202 178/219/204\nf 150/197/183 192/220/2 171/221/205\nf 165/198/184 164/194/181 185/218/203 186/222/206\nf 158/199/185 157/195/182 178/219/204 179/223/207\nf 151/200/186 150/197/183 171/221/205 172/224/208\nf 166/201/187 165/198/184 186/222/206 187/225/209\nf 159/202/188 158/199/185 179/223/207 180/226/210\nf 152/203/189 151/200/186 172/224/208 173/227/211\nf 167/204/190 166/201/187 187/225/209 188/228/212\nf 160/205/191 159/202/188 180/226/210 181/206/192\nf 153/183/171 152/203/189 173/227/211 174/208/194\nf 168/185/173 167/204/190 188/228/212 189/210/196\nf 174/208/194 173/227/211 195/229/213 196/230/214\nf 189/210/196 188/228/212 210/231/215 211/232/216\nf 182/207/193 181/206/192 203/233/217 204/234/218\nf 175/209/195 174/208/194 196/230/214 197/235/219\nf 190/211/197 189/210/196 211/232/216 212/236/220\nf 183/212/198 182/207/193 204/234/218 205/237/221\nf 176/213/199 175/209/195 197/235/219 198/238/222\nf 191/214/200 190/211/197 212/236/220 213/239/223\nf 184/215/201 183/212/198 205/237/221 206/240/224\nf 177/216/202 176/213/199 198/238/222 199/241/225\nf 529/242/44 191/214/200 213/239/223\nf 185/218/203 184/215/201 206/240/224 207/243/226\nf 178/219/204 177/216/202 199/241/225 200/244/227\nf 171/221/205 192/245/2 193/246/228\nf 186/222/206 185/218/203 207/243/226 208/247/229\nf 179/223/207 178/219/204 200/244/227 201/248/230\nf 172/224/208 171/221/205 193/246/228 194/249/231\nf 187/225/209 186/222/206 208/247/229 209/250/232\nf 180/226/210 179/223/207 201/248/230 202/251/233\nf 173/227/211 172/224/208 194/249/231 195/229/213\nf 188/228/212 187/225/209 209/250/232 210/231/215\nf 181/206/192 180/226/210 202/251/233 203/233/217\nf 210/231/215 209/250/232 230/252/234 231/253/235\nf 203/233/217 202/251/233 223/254/236 224/255/237\nf 196/230/214 195/229/213 216/256/238 217/257/239\nf 211/232/216 210/231/215 231/253/235 232/258/240\nf 204/234/218 203/233/217 224/255/237 225/259/241\nf 197/235/219 196/230/214 217/257/239 218/260/242\nf 212/236/220 211/232/216 232/258/240 233/261/243\nf 205/237/221 204/234/218 225/259/241 226/262/244\nf 198/238/222 197/235/219 218/260/242 219/263/245\nf 213/239/223 212/236/220 233/261/243 234/264/246\nf 206/240/224 205/237/221 226/262/244 227/265/247\nf 199/241/225 198/238/222 219/263/245 220/266/248\nf 529/267/44 213/239/223 234/264/246\nf 207/243/226 206/240/224 227/265/247 228/268/249\nf 200/244/227 199/241/225 220/266/248 221/269/250\nf 193/246/228 192/270/2 214/271/251\nf 208/247/229 207/243/226 228/268/249 229/272/252\nf 201/248/230 200/244/227 221/269/250 222/273/253\nf 194/249/231 193/246/228 214/271/251 215/274/254\nf 209/250/232 208/247/229 229/272/252 230/252/234\nf 202/251/233 201/248/230 222/273/253 223/254/236\nf 195/229/213 194/249/231 215/274/254 216/256/238\nf 223/254/236 222/273/253 243/275/255 244/276/256\nf 216/256/238 215/274/254 236/277/257 237/278/258\nf 231/253/235 230/252/234 251/279/259 252/280/260\nf 224/255/237 223/254/236 244/276/256 245/281/261\nf 217/257/239 216/256/238 237/278/258 238/282/262\nf 232/258/240 231/253/235 252/280/260 253/283/263\nf 225/259/241 224/255/237 245/281/261 246/284/264\nf 218/260/242 217/257/239 238/282/262 239/285/265\nf 233/261/243 232/258/240 253/283/263 254/286/266\nf 226/262/244 225/259/241 246/284/264 247/287/267\nf 219/263/245 218/260/242 239/285/265 240/288/268\nf 234/264/246 233/261/243 254/286/266 255/289/269\nf 227/265/247 226/262/244 247/287/267 248/290/270\nf 220/266/248 219/263/245 240/288/268 241/291/271\nf 529/292/44 234/264/246 255/289/269\nf 228/268/249 227/265/247 248/290/270 249/293/272\nf 221/269/250 220/266/248 241/291/271 242/294/273\nf 214/271/251 192/295/2 235/296/274\nf 229/272/252 228/268/249 249/293/272 250/297/275\nf 222/273/253 221/269/250 242/294/273 243/275/255\nf 215/274/254 214/271/251 235/296/274 236/277/257\nf 230/252/234 229/272/252 250/297/275 251/279/259\nf 236/277/257 235/296/274 256/298/276 257/299/277\nf 251/279/259 250/297/275 271/300/278 272/301/279\nf 244/276/256 243/275/255 264/302/280 265/303/281\nf 237/278/258 236/277/257 257/299/277 258/304/282\nf 252/280/260 251/279/259 272/301/279 273/305/283\nf 245/281/261 244/276/256 265/303/281 266/306/284\nf 238/282/262 237/278/258 258/304/282 259/307/285\nf 253/283/263 252/280/260 273/305/283 274/308/286\nf 246/284/264 245/281/261 266/306/284 267/309/287\nf 239/285/265 238/282/262 259/307/285 260/310/288\nf 254/286/266 253/283/263 274/308/286 275/311/289\nf 247/287/267 246/284/264 267/309/287 268/312/290\nf 240/288/268 239/285/265 260/310/288 261/313/291\nf 255/289/269 254/286/266 275/311/289 276/314/292\nf 248/290/270 247/287/267 268/312/290 269/315/293\nf 241/291/271 240/288/268 261/313/291 262/316/294\nf 529/317/44 255/289/269 276/314/292\nf 249/293/272 248/290/270 269/315/293 270/318/295\nf 242/294/273 241/291/271 262/316/294 263/319/296\nf 235/296/274 192/320/2 256/298/276\nf 250/297/275 249/293/272 270/318/295 271/300/278\nf 243/275/255 242/294/273 263/319/296 264/302/280\nf 264/302/280 263/319/296 284/321/297 285/322/298\nf 257/299/277 256/298/276 277/323/299 278/324/300\nf 272/301/279 271/300/278 292/325/301 293/326/302\nf 265/303/281 264/302/280 285/322/298 286/327/303\nf 258/304/282 257/299/277 278/324/300 279/328/304\nf 273/305/283 272/301/279 293/326/302 294/329/305\nf 266/306/284 265/303/281 286/327/303 287/330/306\nf 259/307/285 258/304/282 279/328/304 280/331/307\nf 274/308/286 273/305/283 294/329/305 295/332/308\nf 267/309/287 266/306/284 287/330/306 288/333/309\nf 260/310/288 259/307/285 280/331/307 281/334/310\nf 275/311/289 274/308/286 295/332/308 296/335/311\nf 268/312/290 267/309/287 288/333/309 289/336/312\nf 261/313/291 260/310/288 281/334/310 282/337/313\nf 276/314/292 275/311/289 296/335/311 297/338/314\nf 269/315/293 268/312/290 289/336/312 290/339/315\nf 262/316/294 261/313/291 282/337/313 283/340/316\nf 529/341/44 276/314/292 297/338/314\nf 270/318/295 269/315/293 290/339/315 291/342/317\nf 263/319/296 262/316/294 283/340/316 284/321/297\nf 256/298/276 192/343/2 277/323/299\nf 271/300/278 270/318/295 291/342/317 292/325/301\nf 277/323/299 192/344/2 298/345/318\nf 292/325/301 291/342/317 312/346/319 313/347/320\nf 285/322/298 284/321/297 305/348/321 306/349/322\nf 278/324/300 277/323/299 298/345/318 299/350/323\nf 293/326/302 292/325/301 313/347/320 314/351/324\nf 286/327/303 285/322/298 306/349/322 307/352/325\nf 279/328/304 278/324/300 299/350/323 300/353/326\nf 294/329/305 293/326/302 314/351/324 315/354/327\nf 287/330/306 286/327/303 307/352/325 308/355/328\nf 280/331/307 279/328/304 300/353/326 301/356/329\nf 295/332/308 294/329/305 315/354/327 316/357/330\nf 288/333/309 287/330/306 308/355/328 309/358/331\nf 281/334/310 280/331/307 301/356/329 302/359/332\nf 296/335/311 295/332/308 316/357/330 317/360/333\nf 289/336/312 288/333/309 309/358/331 310/361/334\nf 282/337/313 281/334/310 302/359/332 303/362/335\nf 297/338/314 296/335/311 317/360/333 318/363/336\nf 290/339/315 289/336/312 310/361/334 311/364/337\nf 283/340/316 282/337/313 303/362/335 304/365/338\nf 529/366/44 297/338/314 318/363/336\nf 291/342/317 290/339/315 311/364/337 312/346/319\nf 284/321/297 283/340/316 304/365/338 305/348/321\nf 312/346/319 311/364/337 332/367/339 333/368/340\nf 305/348/321 304/365/338 325/369/341 326/370/342\nf 298/345/318 192/371/2 319/372/343\nf 313/347/320 312/346/319 333/368/340 334/373/344\nf 306/349/322 305/348/321 326/370/342 327/374/345\nf 299/350/323 298/345/318 319/372/343 320/375/346\nf 314/351/324 313/347/320 334/373/344 335/376/347\nf 307/352/325 306/349/322 327/374/345 328/377/348\nf 300/353/326 299/350/323 320/375/346 321/378/349\nf 315/354/327 314/351/324 335/376/347 336/379/350\nf 308/355/328 307/352/325 328/377/348 329/380/351\nf 301/356/329 300/353/326 321/378/349 322/381/352\nf 316/357/330 315/354/327 336/379/350 337/382/353\nf 309/358/331 308/355/328 329/380/351 330/383/354\nf 302/359/332 301/356/329 322/381/352 323/384/355\nf 317/360/333 316/357/330 337/382/353 338/385/356\nf 310/361/334 309/358/331 330/383/354 331/386/357\nf 303/362/335 302/359/332 323/384/355 324/387/358\nf 318/363/336 317/360/333 338/385/356 339/388/359\nf 311/364/337 310/361/334 331/386/357 332/367/339\nf 304/365/338 303/362/335 324/387/358 325/369/341\nf 529/389/44 318/363/336 339/388/359\nf 325/369/341 324/387/358 345/390/360 346/391/361\nf 529/392/44 339/388/359 360/393/362\nf 333/368/340 332/367/339 353/394/363 354/395/364\nf 326/370/342 325/369/341 346/391/361 347/396/365\nf 319/372/343 192/397/2 340/398/366\nf 334/373/344 333/368/340 354/395/364 355/399/367\nf 327/374/345 326/370/342 347/396/365 348/400/368\nf 320/375/346 319/372/343 340/398/366 341/401/369\nf 335/376/347 334/373/344 355/399/367 356/402/370\nf 328/377/348 327/374/345 348/400/368 349/403/371\nf 321/378/349 320/375/346 341/401/369 342/404/372\nf 336/379/350 335/376/347 356/402/370 357/405/373\nf 329/380/351 328/377/348 349/403/371 350/406/374\nf 322/381/352 321/378/349 342/404/372 343/407/375\nf 337/382/353 336/379/350 357/405/373 358/408/376\nf 330/383/354 329/380/351 350/406/374 351/409/377\nf 323/384/355 322/381/352 343/407/375 344/410/378\nf 338/385/356 337/382/353 358/408/376 359/411/379\nf 331/386/357 330/383/354 351/409/377 352/412/380\nf 324/387/358 323/384/355 344/410/378 345/390/360\nf 339/388/359 338/385/356 359/411/379 360/393/362\nf 332/367/339 331/386/357 352/412/380 353/394/363\nf 353/394/363 352/412/380 373/413/381 374/414/382\nf 346/391/361 345/390/360 366/415/383 367/416/384\nf 529/417/44 360/393/362 381/418/385\nf 354/395/364 353/394/363 374/414/382 375/419/386\nf 347/396/365 346/391/361 367/416/384 368/420/387\nf 340/398/366 192/421/2 361/422/388\nf 355/399/367 354/395/364 375/419/386 376/423/389\nf 348/400/368 347/396/365 368/420/387 369/424/390\nf 341/401/369 340/398/366 361/422/388 362/425/391\nf 356/402/370 355/399/367 376/423/389 377/426/392\nf 349/403/371 348/400/368 369/424/390 370/427/393\nf 342/404/372 341/401/369 362/425/391 363/428/394\nf 357/405/373 356/402/370 377/426/392 378/429/395\nf 350/406/374 349/403/371 370/427/393 371/430/396\nf 343/407/375 342/404/372 363/428/394 364/431/397\nf 358/408/376 357/405/373 378/429/395 379/432/398\nf 351/409/377 350/406/374 371/430/396 372/433/399\nf 344/410/378 343/407/375 364/431/397 365/434/400\nf 359/411/379 358/408/376 379/432/398 380/435/401\nf 352/412/380 351/409/377 372/433/399 373/413/381\nf 345/390/360 344/410/378 365/434/400 366/415/383\nf 360/393/362 359/411/379 380/435/401 381/418/385\nf 366/415/383 365/434/400 386/436/402 387/437/403\nf 381/418/385 380/435/401 401/438/404 402/439/405\nf 374/414/382 373/413/381 394/440/406 395/441/407\nf 367/416/384 366/415/383 387/437/403 388/442/408\nf 529/443/44 381/418/385 402/439/405\nf 375/419/386 374/414/382 395/441/407 396/444/409\nf 368/420/387 367/416/384 388/442/408 389/445/410\nf 361/422/388 192/446/2 382/447/411\nf 376/423/389 375/419/386 396/444/409 397/448/412\nf 369/424/390 368/420/387 389/445/410 390/449/413\nf 362/425/391 361/422/388 382/447/411 383/450/414\nf 377/426/392 376/423/389 397/448/412 398/451/415\nf 370/427/393 369/424/390 390/449/413 391/452/416\nf 363/428/394 362/425/391 383/450/414 384/453/417\nf 378/429/395 377/426/392 398/451/415 399/454/418\nf 371/430/396 370/427/393 391/452/416 392/455/419\nf 364/431/397 363/428/394 384/453/417 385/456/420\nf 379/432/398 378/429/395 399/454/418 400/457/421\nf 372/433/399 371/430/396 392/455/419 393/458/422\nf 365/434/400 364/431/397 385/456/420 386/436/402\nf 380/435/401 379/432/398 400/457/421 401/438/404\nf 373/413/381 372/433/399 393/458/422 394/440/406\nf 401/438/404 400/457/421 421/459/423 422/460/424\nf 394/440/406 393/458/422 414/461/425 415/462/426\nf 387/437/403 386/436/402 407/463/427 408/464/428\nf 402/439/405 401/438/404 422/460/424 423/465/429\nf 395/441/407 394/440/406 415/462/426 416/466/430\nf 388/442/408 387/437/403 408/464/428 409/467/431\nf 529/468/44 402/439/405 423/465/429\nf 396/444/409 395/441/407 416/466/430 417/469/432\nf 389/445/410 388/442/408 409/467/431 410/470/433\nf 382/447/411 192/471/2 403/472/434\nf 397/448/412 396/444/409 417/469/432 418/473/435\nf 390/449/413 389/445/410 410/470/433 411/474/436\nf 383/450/414 382/447/411 403/472/434 404/475/437\nf 398/451/415 397/448/412 418/473/435 419/476/438\nf 391/452/416 390/449/413 411/474/436 412/477/439\nf 384/453/417 383/450/414 404/475/437 405/478/440\nf 399/454/418 398/451/415 419/476/438 420/479/441\nf 392/455/419 391/452/416 412/477/439 413/480/442\nf 385/456/420 384/453/417 405/478/440 406/481/443\nf 400/457/421 399/454/418 420/479/441 421/459/423\nf 393/458/422 392/455/419 413/480/442 414/461/425\nf 386/436/402 385/456/420 406/481/443 407/463/427\nf 414/461/425 413/480/442 434/482/444 435/483/445\nf 407/463/427 406/481/443 427/484/446 428/485/447\nf 422/460/424 421/459/423 442/486/448 443/487/449\nf 415/462/426 414/461/425 435/483/445 436/488/450\nf 408/464/428 407/463/427 428/485/447 429/489/451\nf 423/465/429 422/460/424 443/487/449 444/490/452\nf 416/466/430 415/462/426 436/488/450 437/491/453\nf 409/467/431 408/464/428 429/489/451 430/492/454\nf 529/493/44 423/465/429 444/490/452\nf 417/469/432 416/466/430 437/491/453 438/494/455\nf 410/470/433 409/467/431 430/492/454 431/495/456\nf 403/472/434 192/496/2 424/497/457\nf 418/473/435 417/469/432 438/494/455 439/498/458\nf 411/474/436 410/470/433 431/495/456 432/499/459\nf 404/475/437 403/472/434 424/497/457 425/500/460\nf 419/476/438 418/473/435 439/498/458 440/501/461\nf 412/477/439 411/474/436 432/499/459 433/502/462\nf 405/478/440 404/475/437 425/500/460 426/503/463\nf 420/479/441 419/476/438 440/501/461 441/504/464\nf 413/480/442 412/477/439 433/502/462 434/482/444\nf 406/481/443 405/478/440 426/503/463 427/484/446\nf 421/459/423 420/479/441 441/504/464 442/486/448\nf 427/484/446 426/503/463 447/505/465 448/506/466\nf 442/486/448 441/504/464 462/507/467 463/508/468\nf 435/483/445 434/482/444 455/509/469 456/510/470\nf 428/485/447 427/484/446 448/506/466 449/511/471\nf 443/487/449 442/486/448 463/508/468 464/512/472\nf 436/488/450 435/483/445 456/510/470 457/513/473\nf 429/489/451 428/485/447 449/511/471 450/514/474\nf 444/490/452 443/487/449 464/512/472 465/515/475\nf 437/491/453 436/488/450 457/513/473 458/516/476\nf 430/492/454 429/489/451 450/514/474 451/517/477\nf 529/518/44 444/490/452 465/515/475\nf 438/494/455 437/491/453 458/516/476 459/519/478\nf 431/495/456 430/492/454 451/517/477 452/520/479\nf 424/497/457 192/521/2 445/522/480\nf 439/498/458 438/494/455 459/519/478 460/523/481\nf 432/499/459 431/495/456 452/520/479 453/524/482\nf 425/500/460 424/497/457 445/522/480 446/525/483\nf 440/501/461 439/498/458 460/523/481 461/526/484\nf 433/502/462 432/499/459 453/524/482 454/527/485\nf 426/503/463 425/500/460 446/525/483 447/505/465\nf 441/504/464 440/501/461 461/526/484 462/507/467\nf 434/482/444 433/502/462 454/527/485 455/509/469\nf 455/509/469 454/527/485 475/528/486 476/529/487\nf 448/506/466 447/505/465 468/530/488 469/531/489\nf 463/508/468 462/507/467 483/532/490 484/533/491\nf 456/510/470 455/509/469 476/529/487 477/534/492\nf 449/511/471 448/506/466 469/531/489 470/535/493\nf 464/512/472 463/508/468 484/533/491 485/536/494\nf 457/513/473 456/510/470 477/534/492 478/537/495\nf 450/514/474 449/511/471 470/535/493 471/538/496\nf 465/515/475 464/512/472 485/536/494 486/539/497\nf 458/516/476 457/513/473 478/537/495 479/540/498\nf 451/517/477 450/514/474 471/538/496 472/541/499\nf 529/542/44 465/515/475 486/539/497\nf 459/519/478 458/516/476 479/540/498 480/543/500\nf 452/520/479 451/517/477 472/541/499 473/544/501\nf 445/522/480 192/545/2 466/546/502\nf 460/523/481 459/519/478 480/543/500 481/547/503\nf 453/524/482 452/520/479 473/544/501 474/548/504\nf 446/525/483 445/522/480 466/546/502 467/549/505\nf 461/526/484 460/523/481 481/547/503 482/550/506\nf 454/527/485 453/524/482 474/548/504 475/528/486\nf 447/505/465 446/525/483 467/549/505 468/530/488\nf 462/507/467 461/526/484 482/550/506 483/532/490\nf 468/530/488 467/549/505 488/551/507 489/552/508\nf 483/532/490 482/550/506 503/553/509 504/554/510\nf 476/529/487 475/528/486 496/555/511 497/556/512\nf 469/531/489 468/530/488 489/552/508 490/557/513\nf 484/533/491 483/532/490 504/554/510 505/558/514\nf 477/534/492 476/529/487 497/556/512 498/559/515\nf 470/535/493 469/531/489 490/557/513 491/560/516\nf 485/536/494 484/533/491 505/558/514 506/561/517\nf 478/537/495 477/534/492 498/559/515 499/562/518\nf 471/538/496 470/535/493 491/560/516 492/563/519\nf 486/539/497 485/536/494 506/561/517 507/564/520\nf 479/540/498 478/537/495 499/562/518 500/565/521\nf 472/541/499 471/538/496 492/563/519 493/566/522\nf 529/567/44 486/539/497 507/564/520\nf 480/543/500 479/540/498 500/565/521 501/568/523\nf 473/544/501 472/541/499 493/566/522 494/569/524\nf 466/546/502 192/570/2 487/571/525\nf 481/547/503 480/543/500 501/568/523 502/572/526\nf 474/548/504 473/544/501 494/569/524 495/573/527\nf 467/549/505 466/546/502 487/571/525 488/551/507\nf 482/550/506 481/547/503 502/572/526 503/553/509\nf 475/528/486 474/548/504 495/573/527 496/555/511\nf 503/553/509 502/572/526 523/574/528 524/575/529\nf 496/555/511 495/573/527 516/576/530 517/577/531\nf 489/552/508 488/551/507 509/578/532 510/579/533\nf 504/554/510 503/553/509 524/575/529 525/580/534\nf 497/556/512 496/555/511 517/577/531 518/581/535\nf 490/557/513 489/552/508 510/579/533 511/582/536\nf 505/558/514 504/554/510 525/580/534 526/583/537\nf 498/559/515 497/556/512 518/581/535 519/584/538\nf 491/560/516 490/557/513 511/582/536 512/585/539\nf 506/561/517 505/558/514 526/583/537 527/586/540\nf 499/562/518 498/559/515 519/584/538 520/587/541\nf 492/563/519 491/560/516 512/585/539 513/588/542\nf 507/564/520 506/561/517 527/586/540 528/589/543\nf 500/565/521 499/562/518 520/587/541 521/590/544\nf 493/566/522 492/563/519 513/588/542 514/591/545\nf 529/592/44 507/564/520 528/589/543\nf 501/568/523 500/565/521 521/590/544 522/593/546\nf 494/569/524 493/566/522 514/591/545 515/594/547\nf 487/571/525 192/595/2 508/596/548\nf 502/572/526 501/568/523 522/593/546 523/574/528\nf 495/573/527 494/569/524 515/594/547 516/576/530\nf 488/551/507 487/571/525 508/596/548 509/578/532\nf 516/576/530 515/594/547 537/597/549 538/598/550\nf 509/578/532 508/596/548 530/599/551 531/600/552\nf 524/575/529 523/574/528 545/601/553 546/602/554\nf 517/577/531 516/576/530 538/598/550 539/603/555\nf 510/579/533 509/578/532 531/600/552 532/604/556\nf 525/580/534 524/575/529 546/602/554 547/605/557\nf 518/581/535 517/577/531 539/603/555 540/606/558\nf 511/582/536 510/579/533 532/604/556 533/607/559\nf 526/583/537 525/580/534 547/605/557 548/608/560\nf 519/584/538 518/581/535 540/606/558 541/609/561\nf 512/585/539 511/582/536 533/607/559 534/610/562\nf 527/586/540 526/583/537 548/608/560 549/611/563\nf 520/587/541 519/584/538 541/609/561 542/612/564\nf 513/588/542 512/585/539 534/610/562 535/613/565\nf 528/589/543 527/586/540 549/611/563 550/614/566\nf 521/590/544 520/587/541 542/612/564 543/615/567\nf 514/591/545 513/588/542 535/613/565 536/616/568\nf 529/617/44 528/589/543 550/614/566\nf 522/593/546 521/590/544 543/615/567 544/618/569\nf 515/594/547 514/591/545 536/616/568 537/597/549\nf 508/596/548 192/619/2 530/599/551\nf 523/574/528 522/593/546 544/618/569 545/601/553\nf 530/599/551 192/620/2 551/621/570\nf 545/601/553 544/618/569 565/622/571 566/623/572\nf 538/598/550 537/597/549 558/624/573 559/625/574\nf 531/600/552 530/599/551 551/621/570 552/626/575\nf 546/602/554 545/601/553 566/623/572 567/627/576\nf 539/603/555 538/598/550 559/625/574 560/628/577\nf 532/604/556 531/600/552 552/626/575 553/629/578\nf 547/605/557 546/602/554 567/627/576 568/630/579\nf 540/606/558 539/603/555 560/628/577 561/631/580\nf 533/607/559 532/604/556 553/629/578 554/632/581\nf 548/608/560 547/605/557 568/630/579 569/633/582\nf 541/609/561 540/606/558 561/631/580 562/634/583\nf 534/610/562 533/607/559 554/632/581 555/635/584\nf 549/611/563 548/608/560 569/633/582 570/636/585\nf 542/612/564 541/609/561 562/634/583 563/637/586\nf 535/613/565 534/610/562 555/635/584 556/638/587\nf 550/614/566 549/611/563 570/636/585 571/639/588\nf 543/615/567 542/612/564 563/637/586 564/640/589\nf 536/616/568 535/613/565 556/638/587 557/641/590\nf 529/642/44 550/614/566 571/639/588\nf 544/618/569 543/615/567 564/640/589 565/622/571\nf 537/597/549 536/616/568 557/641/590 558/624/573\nf 558/624/573 557/641/590 578/643/591 579/644/592\nf 551/621/570 192/645/2 572/646/593\nf 566/623/572 565/622/571 586/647/594 587/648/595\nf 559/625/574 558/624/573 579/644/592 580/649/596\nf 552/626/575 551/621/570 572/646/593 573/650/597\nf 567/627/576 566/623/572 587/648/595 588/651/598\nf 560/628/577 559/625/574 580/649/596 581/652/599\nf 553/629/578 552/626/575 573/650/597 574/653/600\nf 568/630/579 567/627/576 588/651/598 589/654/601\nf 561/631/580 560/628/577 581/652/599 582/655/602\nf 554/632/581 553/629/578 574/653/600 575/656/603\nf 569/633/582 568/630/579 589/654/601 590/657/604\nf 562/634/583 561/631/580 582/655/602 583/658/605\nf 555/635/584 554/632/581 575/656/603 576/659/606\nf 570/636/585 569/633/582 590/657/604 591/660/607\nf 563/637/586 562/634/583 583/658/605 584/661/608\nf 556/638/587 555/635/584 576/659/606 577/662/609\nf 571/639/588 570/636/585 591/660/607 592/663/610\nf 564/640/589 563/637/586 584/661/608 585/664/611\nf 557/641/590 556/638/587 577/662/609 578/643/591\nf 529/665/44 571/639/588 592/663/610\nf 565/622/571 564/640/589 585/664/611 586/647/594\nf 529/666/44 592/663/610 613/667/612\nf 586/647/594 585/664/611 606/668/613 607/669/614\nf 579/644/592 578/643/591 599/670/615 600/671/616\nf 572/646/593 192/672/2 593/673/617\nf 587/648/595 586/647/594 607/669/614 608/674/618\nf 580/649/596 579/644/592 600/671/616 601/675/619\nf 573/650/597 572/646/593 593/673/617 594/676/620\nf 588/651/598 587/648/595 608/674/618 609/677/621\nf 581/652/599 580/649/596 601/675/619 602/678/622\nf 574/653/600 573/650/597 594/676/620 595/679/623\nf 589/654/601 588/651/598 609/677/621 610/680/624\nf 582/655/602 581/652/599 602/678/622 603/681/625\nf 575/656/603 574/653/600 595/679/623 596/682/626\nf 590/657/604 589/654/601 610/680/624 611/683/627\nf 583/658/605 582/655/602 603/681/625 604/684/628\nf 576/659/606 575/656/603 596/682/626 597/685/629\nf 591/660/607 590/657/604 611/683/627 612/686/630\nf 584/661/608 583/658/605 604/684/628 605/687/631\nf 577/662/609 576/659/606 597/685/629 598/688/632\nf 592/663/610 591/660/607 612/686/630 613/667/612\nf 585/664/611 584/661/608 605/687/631 606/668/613\nf 578/643/591 577/662/609 598/688/632 599/670/615\nf 606/668/613 605/687/631 626/689/633 627/690/634\nf 599/670/615 598/688/632 619/691/635 620/692/636\nf 529/693/44 613/667/612 634/694/637\nf 607/669/614 606/668/613 627/690/634 628/695/638\nf 600/671/616 599/670/615 620/692/636 621/696/639\nf 593/673/617 192/697/2 614/698/640\nf 608/674/618 607/669/614 628/695/638 629/699/641\nf 601/675/619 600/671/616 621/696/639 622/700/642\nf 594/676/620 593/673/617 614/698/640 615/701/643\nf 609/677/621 608/674/618 629/699/641 630/702/644\nf 602/678/622 601/675/619 622/700/642 623/703/645\nf 595/679/623 594/676/620 615/701/643 616/704/646\nf 610/680/624 609/677/621 630/702/644 631/705/647\nf 603/681/625 602/678/622 623/703/645 624/706/648\nf 596/682/626 595/679/623 616/704/646 617/707/649\nf 611/683/627 610/680/624 631/705/647 632/708/650\nf 604/684/628 603/681/625 624/706/648 625/709/651\nf 597/685/629 596/682/626 617/707/649 618/710/652\nf 612/686/630 611/683/627 632/708/650 633/711/653\nf 605/687/631 604/684/628 625/709/651 626/689/633\nf 598/688/632 597/685/629 618/710/652 619/691/635\nf 613/667/612 612/686/630 633/711/653 634/694/637\nf 619/691/635 618/710/652 639/712/654 640/713/655\nf 634/694/637 633/711/653 654/714/656 655/715/657\nf 627/690/634 626/689/633 647/716/658 648/717/659\nf 620/692/636 619/691/635 640/713/655 641/718/660\nf 529/719/44 634/694/637 655/715/657\nf 628/695/638 627/690/634 648/717/659 649/720/661\nf 621/696/639 620/692/636 641/718/660 642/721/662\nf 614/698/640 192/722/2 635/723/663\nf 629/699/641 628/695/638 649/720/661 650/724/664\nf 622/700/642 621/696/639 642/721/662 643/725/665\nf 615/701/643 614/698/640 635/723/663 636/726/666\nf 630/702/644 629/699/641 650/724/664 651/727/667\nf 623/703/645 622/700/642 643/725/665 644/728/668\nf 616/704/646 615/701/643 636/726/666 637/729/669\nf 631/705/647 630/702/644 651/727/667 652/730/670\nf 624/706/648 623/703/645 644/728/668 645/731/671\nf 617/707/649 616/704/646 637/729/669 638/732/672\nf 632/708/650 631/705/647 652/730/670 653/733/673\nf 625/709/651 624/706/648 645/731/671 646/734/674\nf 618/710/652 617/707/649 638/732/672 639/712/654\nf 633/711/653 632/708/650 653/733/673 654/714/656\nf 626/689/633 625/709/651 646/734/674 647/716/658\nf 647/716/658 646/734/674 667/735/675 668/736/676\nf 640/713/655 639/712/654 660/737/677 661/738/678\nf 655/715/657 654/714/656 675/739/679 676/740/680\nf 648/717/659 647/716/658 668/736/676 669/741/681\nf 641/718/660 640/713/655 661/738/678 662/742/682\nf 529/743/44 655/715/657 676/740/680\nf 649/720/661 648/717/659 669/741/681 670/744/683\nf 642/721/662 641/718/660 662/742/682 663/745/684\nf 635/723/663 192/746/2 656/747/685\nf 650/724/664 649/720/661 670/744/683 671/748/686\nf 643/725/665 642/721/662 663/745/684 664/749/687\nf 636/726/666 635/723/663 656/747/685 657/750/688\nf 651/727/667 650/724/664 671/748/686 672/751/689\nf 644/728/668 643/725/665 664/749/687 665/752/690\nf 637/729/669 636/726/666 657/750/688 658/753/691\nf 652/730/670 651/727/667 672/751/689 673/754/692\nf 645/731/671 644/728/668 665/752/690 666/755/693\nf 638/732/672 637/729/669 658/753/691 659/756/694\nf 653/733/673 652/730/670 673/754/692 674/757/695\nf 646/734/674 645/731/671 666/755/693 667/735/675\nf 639/712/654 638/732/672 659/756/694 660/737/677\nf 654/714/656 653/733/673 674/757/695 675/739/679\nf 660/737/677 659/756/694 680/758/696 681/759/697\nf 675/739/679 674/757/695 695/760/698 696/761/699\nf 668/736/676 667/735/675 688/762/700 689/763/701\nf 661/738/678 660/737/677 681/759/697 682/764/702\nf 676/740/680 675/739/679 696/761/699 697/765/703\nf 669/741/681 668/736/676 689/763/701 690/766/704\nf 662/742/682 661/738/678 682/764/702 683/767/705\nf 529/768/44 676/740/680 697/765/703\nf 670/744/683 669/741/681 690/766/704 691/769/706\nf 663/745/684 662/742/682 683/767/705 684/770/707\nf 656/747/685 192/771/2 677/772/708\nf 671/748/686 670/744/683 691/769/706 692/773/709\nf 664/749/687 663/745/684 684/770/707 685/774/710\nf 657/750/688 656/747/685 677/772/708 678/775/711\nf 672/751/689 671/748/686 692/773/709 693/776/712\nf 665/752/690 664/749/687 685/774/710 686/777/713\nf 658/753/691 657/750/688 678/775/711 679/778/714\nf 673/754/692 672/751/689 693/776/712 694/779/715\nf 666/755/693 665/752/690 686/777/713 687/780/716\nf 659/756/694 658/753/691 679/778/714 680/758/696\nf 674/757/695 673/754/692 694/779/715 695/760/698\nf 667/735/675 666/755/693 687/780/716 688/762/700\nf 695/781/698 694/782/715 715/783/717 716/784/718\nf 688/785/700 687/786/716 708/787/719 709/788/720\nf 681/789/697 680/790/696 701/791/721 702/792/722\nf 696/793/699 695/781/698 716/784/718 717/794/723\nf 689/795/701 688/785/700 709/788/720 710/796/724\nf 682/797/702 681/789/697 702/792/722 703/798/725\nf 697/799/703 696/793/699 717/794/723 718/800/726\nf 690/801/704 689/795/701 710/796/724 711/802/727\nf 683/803/705 682/797/702 703/798/725 704/804/728\nf 529/805/44 697/799/703 718/800/726\nf 691/806/706 690/801/704 711/802/727 712/807/729\nf 684/808/707 683/803/705 704/804/728 705/809/730\nf 677/810/708 192/811/2 698/812/731\nf 692/813/709 691/806/706 712/807/729 713/814/732\nf 685/815/710 684/808/707 705/809/730 706/816/733\nf 678/817/711 677/810/708 698/812/731 699/818/734\nf 693/819/712 692/813/709 713/814/732 714/820/735\nf 686/821/713 685/815/710 706/816/733 707/822/736\nf 679/823/714 678/817/711 699/818/734 700/824/737\nf 694/782/715 693/819/712 714/820/735 715/783/717\nf 687/786/716 686/821/713 707/822/736 708/787/719\nf 680/790/696 679/823/714 700/824/737 701/791/721\nf 708/787/719 707/822/736 728/825/738 729/826/739\nf 701/791/721 700/824/737 721/827/740 722/828/741\nf 716/784/718 715/783/717 736/829/742 737/830/743\nf 709/788/720 708/787/719 729/826/739 730/831/744\nf 702/792/722 701/791/721 722/828/741 723/832/745\nf 717/794/723 716/784/718 737/830/743 738/833/746\nf 710/796/724 709/788/720 730/831/744 731/834/747\nf 703/798/725 702/792/722 723/832/745 724/835/748\nf 718/800/726 717/794/723 738/833/746 739/836/749\nf 711/802/727 710/796/724 731/834/747 732/837/750\nf 704/804/728 703/798/725 724/835/748 725/838/751\nf 529/839/44 718/800/726 739/836/749\nf 712/807/729 711/802/727 732/837/750 733/840/752\nf 705/809/730 704/804/728 725/838/751 726/841/753\nf 698/812/731 192/842/2 719/843/754\nf 713/814/732 712/807/729 733/840/752 734/844/755\nf 706/816/733 705/809/730 726/841/753 727/845/756\nf 699/818/734 698/812/731 719/843/754 720/846/757\nf 714/820/735 713/814/732 734/844/755 735/847/758\nf 707/822/736 706/816/733 727/845/756 728/825/738\nf 700/824/737 699/818/734 720/846/757 721/827/740\nf 715/783/717 714/820/735 735/847/758 736/829/742\nf 721/827/740 720/846/757 741/848/759 742/849/760\nf 736/829/742 735/847/758 756/850/761 757/851/762\nf 729/826/739 728/825/738 749/852/763 750/853/764\nf 722/828/741 721/827/740 742/849/760 743/854/765\nf 737/830/743 736/829/742 757/851/762 758/855/766\nf 730/831/744 729/826/739 750/853/764 751/856/767\nf 723/832/745 722/828/741 743/854/765 744/857/768\nf 738/833/746 737/830/743 758/855/766 759/858/769\nf 731/834/747 730/831/744 751/856/767 752/859/770\nf 724/835/748 723/832/745 744/857/768 745/860/771\nf 739/836/749 738/833/746 759/858/769 760/861/772\nf 732/837/750 731/834/747 752/859/770 753/862/773\nf 725/838/751 724/835/748 745/860/771 746/863/774\nf 529/864/44 739/836/749 760/861/772\nf 733/840/752 732/837/750 753/862/773 754/865/775\nf 726/841/753 725/838/751 746/863/774 747/866/776\nf 719/843/754 192/867/2 740/868/777\nf 734/844/755 733/840/752 754/865/775 755/869/778\nf 727/845/756 726/841/753 747/866/776 748/870/779\nf 720/846/757 719/843/754 740/868/777 741/848/759\nf 735/847/758 734/844/755 755/869/778 756/850/761\nf 728/825/738 727/845/756 748/870/779 749/852/763\nf 749/852/763 748/870/779 769/871/780 770/872/781\nf 742/849/760 741/848/759 762/873/782 763/874/783\nf 757/851/762 756/850/761 777/875/784 778/876/785\nf 750/853/764 749/852/763 770/872/781 771/877/786\nf 743/854/765 742/849/760 763/874/783 764/878/787\nf 758/855/766 757/851/762 778/876/785 779/879/788\nf 751/856/767 750/853/764 771/877/786 772/880/789\nf 744/857/768 743/854/765 764/878/787 765/881/790\nf 759/858/769 758/855/766 779/879/788 780/882/791\nf 752/859/770 751/856/767 772/880/789 773/883/792\nf 745/860/771 744/857/768 765/881/790 766/884/793\nf 760/861/772 759/858/769 780/882/791 781/885/794\nf 753/862/773 752/859/770 773/883/792 774/886/795\nf 746/863/774 745/860/771 766/884/793 767/887/796\nf 529/888/44 760/861/772 781/885/794\nf 754/865/775 753/862/773 774/886/795 775/889/797\nf 747/866/776 746/863/774 767/887/796 768/890/798\nf 740/868/777 192/891/2 761/892/799\nf 755/869/778 754/865/775 775/889/797 776/893/800\nf 748/870/779 747/866/776 768/890/798 769/871/780\nf 741/848/759 740/868/777 761/892/799 762/873/782\nf 756/850/761 755/869/778 776/893/800 777/875/784\nf 773/883/792 772/880/789 793/894/801 794/895/802\nf 766/884/793 765/881/790 786/896/803 787/897/804\nf 781/885/794 780/882/791 801/898/805 802/899/806\nf 774/886/795 773/883/792 794/895/802 795/900/807\nf 767/887/796 766/884/793 787/897/804 788/901/808\nf 529/902/44 781/885/794 802/899/806\nf 775/889/797 774/886/795 795/900/807 796/903/809\nf 768/890/798 767/887/796 788/901/808 789/904/810\nf 761/892/799 192/905/2 782/906/811\nf 776/893/800 775/889/797 796/903/809 797/907/812\nf 769/871/780 768/890/798 789/904/810 790/908/813\nf 762/873/782 761/892/799 782/906/811 783/909/814\nf 777/875/784 776/893/800 797/907/812 798/910/815\nf 770/872/781 769/871/780 790/908/813 791/911/816\nf 763/874/783 762/873/782 783/909/814 784/912/817\nf 778/876/785 777/875/784 798/910/815 799/913/818\nf 771/877/786 770/872/781 791/911/816 792/914/819\nf 764/878/787 763/874/783 784/912/817 785/915/820\nf 779/879/788 778/876/785 799/913/818 800/916/821\nf 772/880/789 771/877/786 792/914/819 793/894/801\nf 765/881/790 764/878/787 785/915/820 786/896/803\nf 780/882/791 779/879/788 800/916/821 801/898/805\nf 786/896/803 785/915/820 806/917/822 807/918/823\nf 801/898/805 800/916/821 821/919/824 822/920/825\nf 794/895/802 793/894/801 814/921/826 815/922/827\nf 787/897/804 786/896/803 807/918/823 808/923/828\nf 802/899/806 801/898/805 822/920/825 823/924/829\nf 795/900/807 794/895/802 815/922/827 816/925/830\nf 788/901/808 787/897/804 808/923/828 809/926/831\nf 529/927/44 802/899/806 823/924/829\nf 796/903/809 795/900/807 816/925/830 817/928/832\nf 789/904/810 788/901/808 809/926/831 810/929/833\nf 782/906/811 192/930/2 803/931/834\nf 797/907/812 796/903/809 817/928/832 818/932/835\nf 790/908/813 789/904/810 810/929/833 811/933/836\nf 783/909/814 782/906/811 803/931/834 804/934/837\nf 798/910/815 797/907/812 818/932/835 819/935/838\nf 791/911/816 790/908/813 811/933/836 812/936/839\nf 784/912/817 783/909/814 804/934/837 805/937/840\nf 799/913/818 798/910/815 819/935/838 820/938/841\nf 792/914/819 791/911/816 812/936/839 813/939/842\nf 785/915/820 784/912/817 805/937/840 806/917/822\nf 800/916/821 799/913/818 820/938/841 821/919/824\nf 793/894/801 792/914/819 813/939/842 814/921/826\nf 814/921/826 813/939/842 834/940/843 835/941/844\nf 807/918/823 806/917/822 827/942/845 828/943/846\nf 822/920/825 821/919/824 842/944/847 843/945/848\nf 815/922/827 814/921/826 835/941/844 836/946/849\nf 808/923/828 807/918/823 828/943/846 829/947/850\nf 823/924/829 822/920/825 843/945/848 844/948/851\nf 816/925/830 815/922/827 836/946/849 837/949/852\nf 809/926/831 808/923/828 829/947/850 830/950/853\nf 529/951/44 823/924/829 844/948/851\nf 817/928/832 816/925/830 837/949/852 838/952/854\nf 810/929/833 809/926/831 830/950/853 831/953/855\nf 803/931/834 192/954/2 824/955/856\nf 818/932/835 817/928/832 838/952/854 839/956/857\nf 811/933/836 810/929/833 831/953/855 832/957/858\nf 804/934/837 803/931/834 824/955/856 825/958/859\nf 819/935/838 818/932/835 839/956/857 840/959/860\nf 812/936/839 811/933/836 832/957/858 833/960/861\nf 805/937/840 804/934/837 825/958/859 826/961/862\nf 820/938/841 819/935/838 840/959/860 841/962/863\nf 813/939/842 812/936/839 833/960/861 834/940/843\nf 806/917/822 805/937/840 826/961/862 827/942/845\nf 821/919/824 820/938/841 841/962/863 842/944/847\nf 827/942/845 826/961/862 847/963/864 848/964/865\nf 842/944/847 841/962/863 862/965/866 863/966/867\nf 835/941/844 834/940/843 855/967/868 856/968/869\nf 828/943/846 827/942/845 848/964/865 849/969/870\nf 843/945/848 842/944/847 863/966/867 864/970/871\nf 836/946/849 835/941/844 856/968/869 857/971/872\nf 829/947/850 828/943/846 849/969/870 850/972/873\nf 844/948/851 843/945/848 864/970/871 865/973/874\nf 837/949/852 836/946/849 857/971/872 858/974/875\nf 830/950/853 829/947/850 850/972/873 851/975/876\nf 529/976/44 844/948/851 865/973/874\nf 838/952/854 837/949/852 858/974/875 859/977/877\nf 831/953/855 830/950/853 851/975/876 852/978/878\nf 824/955/856 192/979/2 845/980/879\nf 839/956/857 838/952/854 859/977/877 860/981/880\nf 832/957/858 831/953/855 852/978/878 853/982/881\nf 825/958/859 824/955/856 845/980/879 846/983/882\nf 840/959/860 839/956/857 860/981/880 861/984/883\nf 833/960/861 832/957/858 853/982/881 854/985/884\nf 826/961/862 825/958/859 846/983/882 847/963/864\nf 841/962/863 840/959/860 861/984/883 862/965/866\nf 834/940/843 833/960/861 854/985/884 855/967/868\nf 862/965/866 861/984/883 882/986/885 883/987/886\nf 855/967/868 854/985/884 875/988/887 876/989/888\nf 848/964/865 847/963/864 868/990/889 869/991/890\nf 863/966/867 862/965/866 883/987/886 884/992/891\nf 856/968/869 855/967/868 876/989/888 877/993/892\nf 849/969/870 848/964/865 869/991/890 870/994/893\nf 864/970/871 863/966/867 884/992/891 885/995/894\nf 857/971/872 856/968/869 877/993/892 878/996/895\nf 850/972/873 849/969/870 870/994/893 871/997/896\nf 865/973/874 864/970/871 885/995/894 886/998/897\nf 858/974/875 857/971/872 878/996/895 879/999/898\nf 851/975/876 850/972/873 871/997/896 872/1000/899\nf 529/1001/44 865/973/874 886/998/897\nf 859/977/877 858/974/875 879/999/898 880/1002/900\nf 852/978/878 851/975/876 872/1000/899 873/1003/901\nf 845/980/879 192/1004/2 866/1005/902\nf 860/981/880 859/977/877 880/1002/900 881/1006/903\nf 853/982/881 852/978/878 873/1003/901 874/1007/904\nf 846/983/882 845/980/879 866/1005/902 867/1008/905\nf 861/984/883 860/981/880 881/1006/903 882/986/885\nf 854/985/884 853/982/881 874/1007/904 875/988/887\nf 847/963/864 846/983/882 867/1008/905 868/990/889\nf 875/988/887 874/1007/904 895/1009/906 896/1010/907\nf 868/990/889 867/1008/905 888/1011/908 889/1012/909\nf 883/987/886 882/986/885 903/1013/910 904/1014/911\nf 876/989/888 875/988/887 896/1010/907 897/1015/912\nf 869/991/890 868/990/889 889/1012/909 890/1016/913\nf 884/992/891 883/987/886 904/1014/911 905/1017/914\nf 877/993/892 876/989/888 897/1015/912 898/1018/915\nf 870/994/893 869/991/890 890/1016/913 891/1019/916\nf 885/995/894 884/992/891 905/1017/914 906/1020/917\nf 878/996/895 877/993/892 898/1018/915 899/1021/918\nf 871/997/896 870/994/893 891/1019/916 892/1022/919\nf 886/998/897 885/995/894 906/1020/917 907/1023/920\nf 879/999/898 878/996/895 899/1021/918 900/1024/921\nf 872/1000/899 871/997/896 892/1022/919 893/1025/922\nf 529/1026/44 886/998/897 907/1023/920\nf 880/1002/900 879/999/898 900/1024/921 901/1027/923\nf 873/1003/901 872/1000/899 893/1025/922 894/1028/924\nf 866/1005/902 192/1029/2 887/1030/925\nf 881/1006/903 880/1002/900 901/1027/923 902/1031/926\nf 874/1007/904 873/1003/901 894/1028/924 895/1009/906\nf 867/1008/905 866/1005/902 887/1030/925 888/1011/908\nf 882/986/885 881/1006/903 902/1031/926 903/1013/910\nf 888/1011/908 887/1030/925 908/1/1 909/12/12\nf 903/1013/910 902/1031/926 922/4/4 923/14/14\nf 896/1010/907 895/1009/906 916/8/8 917/16/16\nf 889/1012/909 888/1011/908 909/12/12 910/18/18\nf 904/1014/911 903/1013/910 923/14/14 924/20/20\nf 897/1015/912 896/1010/907 917/16/16 918/22/22\nf 890/1016/913 889/1012/909 910/18/18 911/24/24\nf 905/1017/914 904/1014/911 924/20/20 925/26/26\nf 898/1018/915 897/1015/912 918/22/22 1/28/28\nf 891/1019/916 890/1016/913 911/24/24 912/30/30\nf 906/1020/917 905/1017/914 925/26/26 926/32/32\nf 899/1021/918 898/1018/915 1/28/28 919/34/34\nf 892/1022/919 891/1019/916 912/30/30 913/36/36\nf 907/1023/920 906/1020/917 926/32/32 2/38/38\nf 900/1024/921 899/1021/918 919/34/34 920/40/40\nf 893/1025/922 892/1022/919 913/36/36 914/42/42\nf 529/1032/44 907/1023/920 2/38/38\nf 901/1027/923 900/1024/921 920/40/40 921/5/5\nf 894/1028/924 893/1025/922 914/42/42 915/9/9\nf 887/1030/925 192/1033/2 908/1/1\nf 902/1031/926 901/1027/923 921/5/5 922/4/4\nf 895/1009/906 894/1028/924 915/9/9 916/8/8\n",bg.scene.primitiveData.plane="\no Plane\nv -0.500000 0.000000 0.500000\nv 0.500000 0.000000 0.500000\nv -0.500000 0.000000 -0.500000\nv 0.500000 0.000000 -0.500000\nvt 0.000000 0.000000\nvt 1.000000 0.000000\nvt 1.000000 1.000000\nvt 0.000000 1.000000\nvn 0.0000 1.0000 0.0000\nusemtl None\ns off\nf 1/1/1 2/2/1 4/3/1 3/4/1\n",function(){var t=!1;function e(t,e,n,i){var r=new bg.base.PolyList(t),a=e/2,s=n/2,o=i/2;return r.vertex=[a,-s,-o,-a,-s,-o,-a,s,-o,a,s,-o,a,-s,o,a,-s,-o,a,s,-o,a,s,o,-a,-s,o,a,-s,o,a,s,o,-a,s,o,-a,-s,-o,-a,-s,o,-a,s,o,-a,s,-o,-a,s,o,a,s,o,a,s,-o,-a,s,-o,a,-s,o,-a,-s,o,-a,-s,-o,a,-s,-o],r.normal=[0,0,-1,0,0,-1,0,0,-1,0,0,-1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0],r.texCoord0=[0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1],r.index=[0,1,2,2,3,0,4,5,6,6,7,4,8,9,10,10,11,8,12,13,14,14,15,12,16,17,18,18,19,16,20,21,22,22,23,20],r.texCoord1=bg.tools.UVMap.atlas(r.vertex,r.index,.03),r.build(),r}function n(t,e,n){var i=void 0!==arguments[3]?arguments[3]:"y",r=e/2,a=n/2,s=new bg.base.PolyList(t);switch(i.toLowerCase()){case"x":s.vertex=[0,-r,-a,0,r,-a,0,r,a,0,r,a,0,-r,a,0,-r,-a],s.normal=[1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0],s.texCoord0=[0,0,1,0,1,1,1,1,0,1,0,0],s.index=[2,1,0,5,4,3];break;case"y":s.vertex=[-r,0,-a,r,0,-a,r,0,a,r,0,a,-r,0,a,-r,0,-a],s.normal=[0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0],s.texCoord0=[0,0,1,0,1,1,1,1,0,1,0,0],s.index=[2,1,0,5,4,3];break;case"z":s.vertex=[-r,a,0,-r,-a,0,r,-a,0,r,-a,0,r,a,0,-r,a,0],s.normal=[0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1],s.texCoord0=[0,1,0,0,1,0,1,0,1,1,0,1],s.index=[0,1,2,3,4,5]}return s.texCoord1=[0,.95,0,0,.95,0,.95,0,.95,.95,0,.95],s.build(),s}function i(t,e,n,i){var r,a,s=new bg.base.PolyList(t),o=1/(i-1),u=1/(++n-1),h=[],l=[],c=[],f=[],v=[];for(r=0;r<i;r++)for(a=0;a<n;a++){var g=bg.Math.sin(-bg.Math.PI_2+bg.Math.PI*r*o),m=bg.Math.cos(2*bg.Math.PI*a*u)*bg.Math.sin(bg.Math.PI*r*o),d=bg.Math.sin(2*bg.Math.PI*a*u)*bg.Math.sin(bg.Math.PI*r*o),p=bg.Math.cos(2*bg.Math.PI*a*u)*bg.Math.sin(bg.Math.PI*r*o),b=bg.Math.sin(-bg.Math.PI_2+bg.Math.PI*r*o),x=bg.Math.sin(2*bg.Math.PI*a*u)*bg.Math.sin(bg.Math.PI*r*o);f.push(a*u),f.push(r*o),l.push(m,g,d),c.push(b,p,x),h.push(m*e,g*e,d*e)}for(r=0;r<i-1;r++)for(a=0;a<n-1;a++){var _=r*n+a,M=r*n+(a+1),T=(r+1)*n+(a+1),w=(r+1)*n+a;v.push(_),v.push(w),v.push(T),v.push(T),v.push(M),v.push(_)}return s.vertex=h,s.normal=l,s.texCoord0=f,s.tangent=c,s.texCoord1=bg.tools.UVMap.atlas(h,v,.03),s.index=v,s.build(!1),s}function r(e,n){var i=new bg.scene.Drawable(n),r=t?new bg.base.PBRMaterial:new bg.base.Material;return i.addPolyList(e,r),i}var a=null;function s(e,n,i,r){a||(a=new bg.base.OBJLoaderPlugin);var s=a.loadDataSync(e,n,i);if(s){var o=s.drawable;if(o.forEach(function(t){return function(t,e){for(var n=[],i=[],r=e.rotation,a=0;a<t.vertex.length;a+=3){var s=new bg.Vector3(t.vertex[a],t.vertex[a+1],t.vertex[a+2]);s=e.multVector(s),n.push(s.x,s.y,s.z);var o=new bg.Vector3(t.normal[a],t.normal[a+1],t.normal[a+2]);(o=r.multVector(o)).normalize(),i.push(o.x,o.y,o.z)}t.vertex=n,t.normal=i,t.build()}(t,r)}),t){var u=0;o.forEach(function(t,e){o.replaceMaterial(u++,new bg.base.PBRMaterial)})}return o}return null}var o=function(){function a(){}return $traceurRuntime.createClass(a,{},{SetPBRMaterials:function(e){t=e},ObjDataPolyList:function(t,e,n){var i=s(t,e,n,void 0!==arguments[3]?arguments[3]:null),r=null;return i.some(function(t){return r=t,!0}),r},CubePolyList:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=arguments[2],i=arguments[3];n=n||e,i=i||e;var r=bg.Matrix4.Scale(e,n,i);return a.ObjDataPolyList(t,bg.scene.primitiveData.cube,"Cube",r)},CubePolyList_procedural:function(t){var n=void 0!==arguments[1]?arguments[1]:1,i=arguments[2],r=arguments[3];return e(t,n,i=i||n,r=r||n)},PlanePolyList:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=arguments[2],i=void 0!==arguments[3]?arguments[3]:"y";n=n||e;var r=bg.Matrix4.Scale(e,1,n);return"x"==i?r.rotate(bg.Math.degreesToRadians(90),0,0,1):"z"==i&&r.rotate(bg.Math.degreesToRadians(90),-1,0,0),a.ObjDataPolyList(t,bg.scene.primitiveData.plane,"Plane",r)},PlanePolyList_procedural:function(t){var e=void 0!==arguments[1]?arguments[1]:1,i=arguments[2];return n(t,e,i=i||e,void 0!==arguments[3]?arguments[3]:"y")},SpherePolyList:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=bg.Matrix4.Scale(e,e,e);return a.ObjDataPolyList(t,bg.scene.primitiveData.sphere,"Sphere",n)},SpherePolyList_procedural:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=void 0!==arguments[2]?arguments[2]:20,r=arguments[3];return i(t,e,n,r=r||n)},Cube:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=arguments[2],i=arguments[3];n=n||e,i=i||e;var r=bg.Matrix4.Scale(e,n,i);return s(t,bg.scene.primitiveData.cube,"Cube",r)},Cube_procedural:function(t){var n=void 0!==arguments[1]?arguments[1]:1,i=arguments[2],a=arguments[3];return r(e(t,n,i=i||n,a=a||n),"Cube")},Plane_procedural:function(t){var e=void 0!==arguments[1]?arguments[1]:1,i=arguments[2];return r(n(t,e,i=i||e,void 0!==arguments[3]?arguments[3]:"y"),"Plane")},Plane:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=arguments[2],i=void 0!==arguments[3]?arguments[3]:"y";n=n||e;var r=bg.Matrix4.Scale(e,1,n);return"x"==i?r.rotate(bg.Math.degreesToRadians(90),0,0,1):"z"==i&&r.rotate(bg.Math.degreesToRadians(90),-1,0,0),s(t,bg.scene.primitiveData.plane,"Plane",r)},Sphere:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=bg.Matrix4.Scale(2*e,2*e,2*e);return s(t,bg.scene.primitiveData.sphere,"Sphere",n)},Sphere_procedural:function(t){var e=void 0!==arguments[1]?arguments[1]:1,n=void 0!==arguments[2]?arguments[2]:20,a=arguments[3];return r(i(t,e,n,a=a||n),"Sphere")}})}();bg.scene.PrimitiveFactory=o}(),function(){var t=function(){return $traceurRuntime.createClass(function(t,e){this.url=t.substring(0,t.lastIndexOf("/")),this.jsonData=e},{loadNode:function(t,e,n,i){var r=this,a=new bg.scene.Node(t,e.name);a.enabled=e.enabled,a.steady=e.steady||!1,n.addChild(a),e.components.forEach(function(e){i.push(bg.scene.Component.Factory(t,e,a,r.url))}),e.children.forEach(function(e){r.loadNode(t,e,a,i)})},loadScene:function(t){var e=this,n=[],i=new bg.scene.Node(t,"scene-root");return this.jsonData.scene.forEach(function(r){e.loadNode(t,r,i,n)}),new Promise(function(e,r){Promise.all(n).then(function(){var n=new bg.scene.FindComponentVisitor("bg.scene.Camera");i.accept(n);var r=null,a=null;if(n.result.some(function(t){if(a||(a=t),t.camera.isMain)return r=t,!0}),!(r=r||a)){(r=new bg.scene.Node(t,"Camera")).addComponent(new bg.scene.Camera);var s=bg.Matrix4.Rotation(.52,-1,0,0);s.translate(0,0,5),r.addComponent(new bg.scene.Transform(s)),i.addChild(r)}bg.scene.Camera.SetAsMainCamera(r,i),e({sceneRoot:i,cameraNode:r})})})}},{})}(),e=function(e){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){return"vitscnj"==bg.utils.Resource.GetExtension(t)},load:function(e,n,i){return new Promise(function(r,a){if(i)try{"string"==typeof i&&(i=(i=i.replace(/,[\s\r\n]*\]/g,"]")).replace(/,[\s\r\n]*\}/g,"}"),i=JSON.parse(i)),new t(n,i).loadScene(e).then(function(t){r(t)})}catch(t){a(t)}else a(new Error("Error loading scene. Data is null"))})}},{},e)}(bg.base.LoaderPlugin);bg.base.SceneLoaderPlugin=e}(),function(){function t(t,e,n){var i=require("path"),r=bg.base.Writer.StandarizePath(this.getImageUrl(e)),a=r.split("/").pop(),s=bg.base.Writer.StandarizePath(i.join(n,a));switch(e){case bg.scene.CubemapImage.POSITIVE_X:t.positiveX=a;break;case bg.scene.CubemapImage.NEGATIVE_X:t.negativeX=a;break;case bg.scene.CubemapImage.POSITIVE_Y:t.positiveY=a;break;case bg.scene.CubemapImage.NEGATIVE_Y:t.negativeY=a;break;case bg.scene.CubemapImage.POSITIVE_Z:t.positiveZ=a;break;case bg.scene.CubemapImage.NEGATIVE_Z:t.negativeZ=a}return bg.base.Writer.CopyFile(r,s)}var e=[.5,-.5,-.5,-.5,-.5,-.5,-.5,.5,-.5,.5,.5,-.5],n=[.5,-.5,.5,.5,-.5,-.5,.5,.5,-.5,.5,.5,.5],i=[-.5,-.5,.5,.5,-.5,.5,.5,.5,.5,-.5,.5,.5],r=[-.5,-.5,-.5,-.5,-.5,.5,-.5,.5,.5,-.5,.5,-.5],a=[-.5,.5,.5,.5,.5,.5,.5,.5,-.5,-.5,.5,-.5],s=[.5,-.5,.5,-.5,-.5,.5,-.5,-.5,-.5,.5,-.5,-.5],o=[0,0,1,0,0,1,0,0,1,0,0,1],u=[-1,0,0,-1,0,0,-1,0,0,-1,0,0],h=[0,0,-1,0,0,-1,0,0,-1,0,0,-1],l=[1,0,0,1,0,0,1,0,0,1,0,0],c=[0,-1,0,0,-1,0,0,-1,0,0,-1,0],f=[0,1,0,0,1,0,0,1,0,0,1,0],v=[1,0,0,0,0,1,1,1],g=[1,0,0,0,0,1,1,1],m=[1,0,0,0,0,1,1,1],d=[1,0,0,0,0,1,1,1],p=[1,0,0,0,0,1,1,1],b=[1,0,0,0,0,1,1,1],x=[2,1,0,0,3,2],_=function(_){function M(){$traceurRuntime.superConstructor(M).call(this),this._images=[null,null,null,null,null,null],this._textures=[],this._plist=[],this._material=null}return $traceurRuntime.createClass(M,{clone:function(t){var e=new M;return e._images=[this._images[0],this._images[1],this._images[2],this._images[3],this._images[4],this._images[5]],(t=t||this.node&&this.node.context)&&e.loadSkybox(t),e},setImageUrl:function(t,e){this._images[t]=e},getImageUrl:function(t){return this._images[t]},getTexture:function(t){return this._textures[t]},loadSkybox:function(){var t=void 0!==arguments[0]?arguments[0]:null,_=void 0!==arguments[1]?arguments[1]:null,M=this;t=t||this.node&&this.node.context;var T=new bg.base.PolyList(t),w=new bg.base.PolyList(t),S=new bg.base.PolyList(t),y=new bg.base.PolyList(t),E=new bg.base.PolyList(t),P=new bg.base.PolyList(t);return T.vertex=e,T.normal=o,T.texCoord0=v,T.texCoord1=v,T.index=x,T.build(),w.vertex=n,w.normal=u,w.texCoord0=g,w.texCoord1=g,w.index=x,w.build(),S.vertex=i,S.normal=h,S.texCoord0=m,S.texCoord1=m,S.index=x,S.build(),y.vertex=r,y.normal=l,y.texCoord0=d,y.texCoord1=d,y.index=x,y.build(),E.vertex=a,E.normal=c,E.texCoord0=p,E.texCoord1=p,E.index=x,E.build(),P.vertex=s,P.normal=f,P.texCoord0=b,P.texCoord1=b,P.index=x,P.build(),this._plist=[y,w,E,P,S,T],this._material=new bg.base.Material,this._material.receiveShadows=!1,this._material.castShadows=!1,this._material.unlit=!0,new Promise(function(e,n){bg.base.Loader.Load(t,M._images,_,{wrapX:bg.base.TextureWrap.MIRRORED_REPEAT,wrapY:bg.base.TextureWrap.MIRRORED_REPEAT}).then(function(t){M._textures=[t[M.getImageUrl(bg.scene.CubemapImage.POSITIVE_X)],t[M.getImageUrl(bg.scene.CubemapImage.NEGATIVE_X)],t[M.getImageUrl(bg.scene.CubemapImage.POSITIVE_Y)],t[M.getImageUrl(bg.scene.CubemapImage.NEGATIVE_Y)],t[M.getImageUrl(bg.scene.CubemapImage.POSITIVE_Z)],t[M.getImageUrl(bg.scene.CubemapImage.NEGATIVE_Z)]],M._textures.forEach(function(t){t.wrapX=bg.base.TextureWrap.CLAMP,t.wrapY=bg.base.TextureWrap.CLAMP}),bg.emitImageLoadEvent(t[M.getImageUrl(bg.scene.CubemapImage.POSITIVE_X)]),e()}).catch(function(t){n(t)})})},display:function(t,e){var n=this;if(!t.effect)throw new Error("Could not draw skybox: invalid effect");if(this.node.enabled&&6==this._textures.length){var i=t.effect.material;t.effect.material=this._material,e.viewMatrixStack.push(),e.modelMatrixStack.push(),e.viewMatrixStack.matrix.setPosition(0,0,0);var r=e.projectionMatrixStack.matrix,a=-r.m22,s=2*-r.m32/(2*a-2),o=bg.Math.sin(bg.Math.PI_4)*s-1;e.modelMatrixStack.scale(o,o,o),t.shouldDraw(this._material)&&this._plist.forEach(function(e,i){n._material.texture=n._textures[i],t.draw(e)}),e.modelMatrixStack.pop(),e.viewMatrixStack.pop(),t.effect.material=i}},draw:function(t,e,n,i){var r=this;if(6==this._textures.length){n.push(),e.push(),n.matrix.setPosition(0,0,0);var a=i.matrix,s=-a.m22,o=2*-a.m32/(2*s-2),u=bg.Math.sin(bg.Math.PI_4)*o-1;e.scale(u,u,u),this._plist.forEach(function(i,a){r._material.texture=r._textures[a],t.renderOpaque(i,r._material.clone(),e.matrix,n.matrix)}),n.pop(),e.pop()}},removedFromNode:function(){this._plist.forEach(function(t){t.destroy()})},deserialize:function(t,e,n){return this.setImageUrl(bg.scene.CubemapImage.POSITIVE_X,bg.utils.Resource.JoinUrl(n,e.positiveX)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_X,bg.utils.Resource.JoinUrl(n,e.negativeX)),this.setImageUrl(bg.scene.CubemapImage.POSITIVE_Y,bg.utils.Resource.JoinUrl(n,e.positiveY)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_Y,bg.utils.Resource.JoinUrl(n,e.negativeY)),this.setImageUrl(bg.scene.CubemapImage.POSITIVE_Z,bg.utils.Resource.JoinUrl(n,e.positiveZ)),this.setImageUrl(bg.scene.CubemapImage.NEGATIVE_Z,bg.utils.Resource.JoinUrl(n,e.negativeZ)),this.loadSkybox(t)},serialize:function(e,n,i){$traceurRuntime.superGet(this,M.prototype,"serialize").call(this,e,n,i),bg.isElectronApp&&(n.push(t.apply(this,[e,bg.scene.CubemapImage.POSITIVE_X,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.NEGATIVE_X,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.POSITIVE_Y,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.NEGATIVE_Y,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.POSITIVE_Z,i.path])),n.push(t.apply(this,[e,bg.scene.CubemapImage.NEGATIVE_Z,i.path])))}},{},_)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,_,"bg.scene.Skybox")}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){var e=void 0!==arguments[0]?arguments[0]:new bg.Vector2(1,1),n=void 0!==arguments[1]?arguments[1]:new bg.Vector2(1e3,1e3);$traceurRuntime.superConstructor(t).call(this),this._rectSize=e,this._textureSize=n,this._textProperties=new bg.base.TextProperties,this._doubleSided=!0,this._unlit=!1,this._text="Hello, World!",this._sprite=null,this._material=null,this._sizeMatrix=bg.Matrix4.Scale(this._rectSize.x,-1*this._rectSize.y,1),this._canvasTexture=null,this._dirty=!0},{clone:function(){var t=new bg.scene.TextRect;return t._text=this._text,t._sprite=this._sprite&&this._sprite.clone(),t._material=this._material&&this._material.clone(),t},get textProperties(){return this._textProperties},get text(){return this._text},set text(t){this._dirty=!0,this._text=t},get doubleSided(){return this._doubleSided},set doubleSided(t){this._dirty=!0,this._doubleSided=t},get unlit(){return this._unlit},set unlit(t){this._dirty=!0,this._unlit=t},get rectSize(){return this._rectSize},set rectSize(t){this._sizeMatrix.identity().scale(t.x,t.y,1),this._rectSize=t},get textureSize(){return this._textureSize},set textureSize(t){this._dirty=!0,this._canvasTexture.resize(t.x,t.y),this._textureSize=t},get material(){return this._material},init:function(){var t=this;!this._sprite&&this.node&&this.node.context&&(this._sprite=bg.scene.PrimitiveFactory.PlanePolyList(this.node.context,1,1,"z"),this._material=new bg.base.PBRMaterial,this._material.alphaCutoff=.9,this._dirty=!0),!this._canvasTexture&&this.node&&this.node.context&&(this._canvasTexture=new bg.tools.CanvasTexture(this.node.context,this._textureSize.x,this._textureSize.y,function(e,n,i){e.clearRect(0,0,n,i),"transparent"!=t._textProperties.background&&(e.fillStyle=t._textProperties.background,e.fillRect(0,0,n,i)),e.fillStyle=t._textProperties.color;var r=t._textProperties.size,a=t._textProperties.font,s=t._textProperties.italic?"italic":"",o=t._textProperties.bold?"bold":"";e.textAlign=t._textProperties.align,e.font=s+" "+o+" "+r+"px "+a;e.measureText(t._text);var u=0,h=0;switch(e.textAlign){case"center":u=n/2,h=r+0;break;case"right":u=n,h=r+0;break;default:u=0,h=r+0}t._text.split("\n").forEach(function(t){e.fillText(t,u,h),h+=r})}),this._dirty=!0)},frame:function(t){(this._dirty||this._textProperties.dirty)&&this._material&&this._canvasTexture&&(this._canvasTexture.update(),this._material instanceof bg.base.PBRMaterial?(this._material.diffuse=this._canvasTexture.texture,this._material.unlit=this._unlit,this._material.cullFace=!this._doubleSided):(this._material.texture=this._canvasTexture.texture,this._material.unlit=this._unlit,this._material.cullFace=!this._doubleSided),this._dirty=!1,this.textProperties.dirty=!1)},display:function(t,e){if(!t.effect)throw new Error("Could not draw TextRect: invalid effect");if(this.node.enabled&&this._sprite&&this._material&&this._sprite.visible){var n=t.effect.material;e.modelMatrixStack.push(),e.modelMatrixStack.mult(this._sizeMatrix),t.shouldDraw(this._material)&&(t.effect.material=this._material,t.draw(this._sprite)),e.modelMatrixStack.pop(),t.effect.material=n}},draw:function(t,e,n,i){this._sprite&&this._material&&(e.push(),e.mult(this._sizeMatrix),this._material.isTransparent?t.renderTransparent(this._sprite,this._material,e.matrix,n.matrix):t.renderOpaque(this._sprite,this._material,e.matrix,n.matrix),e.pop())},serialize:function(t,e,n){t.textProperties={},this.textProperties.serialize(t.textProperties),t.text=this.text,t.doubleSided=this.doubleSided,t.unlit=this.unlit,t.textureSize=this.textureSize.toArray(),t.rectSize=this.rectSize.toArray()},deserialize:function(t,e,n){this.textProperties.deserialize(e.textProperties),this.text=e.text,this.doubleSided=e.doubleSided,this.unlit=e.unlit,this.textureSize=new bg.Vector2(e.textureSize),this.rectSize=new bg.Vector2(e.rectSize)}},{},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,t,"bg.scene.TextRect")}(),function(){var t=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this),this._matrix=t||bg.Matrix4.Identity(),this._globalMatrixValid=!1,this._transformVisitor=new bg.scene.TransformVisitor}return $traceurRuntime.createClass(e,{clone:function(){var t=new bg.scene.Transform;return t.matrix=new bg.Matrix4(this.matrix),t},get matrix(){return this._matrix},set matrix(t){this._matrix=t},get globalMatrix(){return this._globalMatrixValid||(this._transformVisitor.clear(),this.node.acceptReverse(this._transformVisitor),this._globalMatrix=this._transformVisitor.matrix),this._globalMatrix},deserialize:function(t,e,n){var i=this;return new Promise(function(t,n){if(e.transformStrategy){var r=e.transformStrategy;if("TRSTransformStrategy"==r.type){switch(i._matrix.identity().translate(r.translate[0],r.translate[1],r.translate[2]),r.rotationOrder){case"kOrderXYZ":i._matrix.rotate(r.rotateX,1,0,0).rotate(r.rotateY,0,1,0).rotate(r.rotateZ,0,0,1);break;case"kOrderXZY":i._matrix.rotate(r.rotateX,1,0,0).rotate(r.rotateZ,0,0,1).rotate(r.rotateY,0,1,0);break;case"kOrderYXZ":i._matrix.rotate(r.rotateY,0,1,0).rotate(r.rotateX,1,0,0).rotate(r.rotateZ,0,0,1);break;case"kOrderYZX":i._matrix.rotate(r.rotateY,0,1,0).rotate(r.rotateZ,0,0,1).rotate(r.rotateX,1,0,0);break;case"kOrderZYX":i._matrix.rotate(r.rotateZ,0,0,1).rotate(r.rotateY,0,1,0).rotate(r.rotateX,1,0,0);break;case"kOrderZXY":i._matrix.rotate(r.rotateZ,0,0,1).rotate(r.rotateX,1,0,0).rotate(r.rotateY,0,1,0)}i._matrix.scale(r.scale[0],r.scale[1],r.scale[2])}}else e.transformMatrix&&(i._matrix=new bg.Matrix4(e.transformMatrix));t(i)})},serialize:function(t,n,i){$traceurRuntime.superGet(this,e.prototype,"serialize").call(this,t,n,i),t.transformMatrix=this._matrix.toArray()},willDisplay:function(t,e){this.node&&this.node.enabled&&(e.modelMatrixStack.push(),e.modelMatrixStack.mult(this.matrix))},didDisplay:function(t,e){this.node&&this.node.enabled&&e.modelMatrixStack.pop(),this._globalMatrixValid=!1},willUpdate:function(t,e,n){this.node&&this.node.enabled&&(t.push(),t.mult(this.matrix))},didUpdate:function(t,e,n){this.node&&this.node.enabled&&t.pop(),this._globalMatrixValid=!1}},{WorldMatrix:function(t){var e=t;if(t instanceof bg.scene.Component&&(e=t.node),!e)return bg.Matrix4.Identity();var n=new bg.scene.TransformVisitor;return e.acceptReverse(n),n.matrix}},t)}(bg.scene.Component);bg.scene.registerComponent(bg.scene,t,"bg.scene.Transform")}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e,n){$traceurRuntime.superConstructor(t).call(this),this._pipeline=e||bg.base.Pipeline.Current(),this._matrixState=n||bg.base.MatrixState.Current(),this._forceDraw=!1},{get forceDraw(){return this._forceDraw},set forceDraw(t){this._forceDraw=t},get pipeline(){return this._pipeline},get matrixState(){return this._matrixState},visit:function(t){t.willDisplay(this.pipeline,this.matrixState),t.display(this.pipeline,this.matrixState,this.forceDraw)},didVisit:function(t){t.didDisplay(this.pipeline,this.matrixState)}},{},t)}(bg.scene.NodeVisitor);bg.scene.DrawVisitor=t;var e=function(t){return $traceurRuntime.createClass(function t(e,n,i){$traceurRuntime.superConstructor(t).call(this),this._modelMatrixStack=e||new bg.base.MatrixStack,this._viewMatrixStack=n||new bg.base.MatrixStack,this._projectionMatrixStack=i||new bg.base.MatrixStack,this._renderQueue=new bg.base.RenderQueue},{get modelMatrixStack(){return this._modelMatrixStack},set modelMatrixStack(t){this._modelMatrixStack=t},get viewMatrixStack(){return this._viewMatrixStack},set viewMatrixStack(t){this._viewMatrixStack=t},get projectionMatrixStack(){return this._projectionMatrixStack},set projectionMatrixStack(t){this._projectionMatrixStack=t},get renderQueue(){return this._renderQueue},visit:function(t){t.willUpdate(this._modelMatrixStack),t.draw(this._renderQueue,this._modelMatrixStack,this._viewMatrixStack,this._projectionMatrixStack)},didVisit:function(t){t.didUpdate(this._modelMatrixStack,this._viewMatrixStack,this._projectionMatrixStack)}},{},t)}(bg.scene.NodeVisitor);bg.scene.RenderQueueVisitor=e;var n=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._delta=0},{get delta(){return this._delta},set delta(t){this._delta=t},visit:function(t){t.frame(this.delta)}},{},t)}(bg.scene.NodeVisitor);bg.scene.FrameVisitor=n;var i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._matrix=bg.Matrix4.Identity()},{get matrix(){return this._matrix},clear:function(){this._matrix=bg.Matrix4.Identity()},visit:function(t){var e=t.component("bg.scene.Transform");e&&this._matrix.mult(e.matrix)}},{},t)}(bg.scene.NodeVisitor);bg.scene.TransformVisitor=i;var r=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{visit:function(t){this._operation&&t[this._operation](this._event)},keyDown:function(t,e){this._operation="keyDown",this._event=e,t.accept(this)},keyUp:function(t,e){this._operation="keyUp",this._event=e,t.accept(this)},mouseUp:function(t,e){this._operation="mouseUp",this._event=e,t.accept(this)},mouseDown:function(t,e){this._operation="mouseDown",this._event=e,t.accept(this)},mouseMove:function(t,e){this._operation="mouseMove",this._event=e,t.accept(this)},mouseOut:function(t,e){this._operation="mouseOut",this._event=e,t.accept(this)},mouseDrag:function(t,e){this._operation="mouseDrag",this._event=e,t.accept(this)},mouseWheel:function(t,e){this._operation="mouseWheel",this._event=e,t.accept(this)},touchStart:function(t,e){this._operation="touchStart",this._event=e,t.accept(this)},touchMove:function(t,e){this._operation="touchMove",this._event=e,t.accept(this)},touchEnd:function(t,e){this._operation="touchEnd",this._event=e,t.accept(this)}},{},t)}(bg.scene.NodeVisitor);bg.scene.InputVisitor=r;var a=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this.clear()},{get min(){return this._min},get max(){return this._max},get size(){return this._size},clear:function(){this._min=new bg.Vector3(bg.Math.FLOAT_MAX,bg.Math.FLOAT_MAX,bg.Math.FLOAT_MAX),this._max=new bg.Vector3(-bg.Math.FLOAT_MAX,-bg.Math.FLOAT_MAX,-bg.Math.FLOAT_MAX),this._size=new bg.Vector3(0,0,0)},visit:function(t){var e=bg.Matrix4.Identity();if(t.component("bg.scene.Transform")&&(e=t.component("bg.scene.Transform").globalMatrix),t.component("bg.scene.Drawable")){var n=new bg.tools.BoundingBox(t.component("bg.scene.Drawable"),new bg.Matrix4(e));this._min=bg.Vector.MinComponents(this._min,n.min),this._max=bg.Vector.MaxComponents(this._max,n.max),this._size=bg.Vector3.Sub(this._max,this._min)}}},{},t)}(bg.scene.NodeVisitor);bg.scene.BoundingBoxVisitor=a;var s=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this),this.componentId=e,this.clear()},{get result(){return this._result},clear:function(){this._result=[]},visit:function(t){t.component(this.componentId)&&this._result.push(t)}},{},t)}(bg.scene.NodeVisitor);bg.scene.FindComponentVisitor=s}(),function(){function t(t,e){var n=new Uint8Array(t,e,4);return n=String.fromCharCode(n[0])+String.fromCharCode(n[1])+String.fromCharCode(n[2])+String.fromCharCode(n[3])}function e(t,e){return new DataView(t,e,4).getInt32(0)}function n(t,e){for(var n={offset:0,data:[]},i=new DataView(t,e,64),r=0;r<16;++r)n.data[r]=i.getFloat32(4*r,!1);return n.offset+=64,n}function i(t,n){var i={offset:0,data:""},r=e(t,n);i.offset+=4;for(var a=new Uint8Array(t,n+4,r),s=0;s<r;++s)i.data+=String.fromCharCode(a[s]);return i.offset+=r,i}function r(t,n){var i={offset:0,data:[]},r=e(t,n);i.offset+=4;for(var a=new DataView(t,n+4,4*r),s=0;s<r;++s)i.data[s]=a.getFloat32(4*s,!1);return i.offset+=4*r,i}function a(t,n){var i={offset:0,data:[]},r=e(t,n);i.offset+=4;for(var a=new DataView(t,n+4,4*r),s=0;s<r;++s)i.data[s]=a.getInt32(4*s,!1);return i.offset+=4*r,i}function s(t,e,n){var i=new bg.physics[n.type];i.offset=new(Function.prototype.bind.apply(bg.Vector3,$traceurRuntime.spread([null],n.offset))),i.roll=n.roll,i.pitch=n.pitch,i.yaw=n.yaw;var r=new bg.scene[e](i);t.addComponent(r)}var o=function(){return $traceurRuntime.createClass(function(t,e){this._context=t},{loadDrawable:function(t,e){this._jointData=null;var n=this.parseData(t);return this.createDrawable(n,e)},parseData:function(s){var o=[],u=null,h=null,l=0,c=new Uint8Array(s,0,8);l=8;var f=String.fromCharCode(c[4])+String.fromCharCode(c[5])+String.fromCharCode(c[6])+String.fromCharCode(c[7]);if(1==c[0])throw"Could not open the model file. This file has been saved as computer (little endian) format, try again saving it in network (big endian) format";if("hedr"!=f)throw"File format error. Expecting header";var v={maj:c[1],min:c[2],rev:c[3]};bg.log("vwglb file version: "+v.maj+"."+v.min+"."+v.rev+", big endian");e(s,l);if("mtrl"!=t(s,l+=4))throw"File format error. Expecting materials definition";var g=i(s,l+=4);if(l+=g.offset,u=JSON.parse(g.data),"proj"==t(s,l)){l+=4;(function(t,e){new DataView(t,e,4).getFloat32(0)})(s,l+=i(s,l).offset);var m=n(s,l+=4);l+=m.offset;m.data;var d=n(s,l);l+=d.offset;d.data}if("join"==t(s,l)){var p=i(s,l+=4);l+=p.offset;var b=p.data;try{this._jointData=JSON.parse(b)}catch(t){throw new Error("VWGLB file format reader: Error parsing joint data")}}var x=t(s,l);if("plst"!=x)throw"File format error. Expecting poly list";var _,M,T,w,S,y,E,P,R=!1;for(l+=4;!R;){x=t(s,l),l+=4;var C=null,z=null;switch(x){case"pnam":l+=(C=i(s,l)).offset,_=C.data;break;case"mnam":l+=(C=i(s,l)).offset,M=C.data;break;case"varr":var O=r(s,l);l+=O.offset,T=O.data;break;case"narr":var A=r(s,l);l+=A.offset,w=A.data;break;case"t0ar":l+=(z=r(s,l)).offset,S=z.data;break;case"t1ar":l+=(z=r(s,l)).offset,y=z.data;break;case"t2ar":l+=(z=r(s,l)).offset,E=z.data;break;case"indx":var V=a(s,l);l+=V.offset,P=V.data;break;case"plst":case"endf":if("endf"==x&&l+4<s.byteLength){try{if(x=t(s,l),l+=4,"cmps"==x){var L=i(s,l);l+=L.offset,L.data=L.data.replace(/,[\s\r\n]*\]/g,"]"),L.data=L.data.replace(/,[\s\r\n]*\}/g,"}"),h=JSON.parse(L.data)}}catch(t){console.error(t.message)}R=!0}else l+4>=s.byteLength&&(R=!0);var N={name:_,matName:M,vertices:T,normal:w,texcoord0:S,texcoord1:y,texcoord2:E,indices:P};o.push(N),_="",M="",T=null,w=null,S=null,y=null,E=null,P=null;break;default:throw"File format exception. Unexpected poly list member found"}}var F={version:v,polyList:o,materials:{}};return this._componentData=h,u.forEach(function(t){F.materials[t.name]=t}),F},createDrawable:function(t,e){var n=this,i=new bg.scene.Drawable(this.context);i._version=t.version;var r=[];return t.polyList.forEach(function(a){var s=t.materials[a.matName],o=new bg.base.PolyList(n._context);o.name=a.name,o.vertex=a.vertices||o.vertex,o.normal=a.normal||o.normal,o.texCoord0=a.texcoord0||o.texCoord0,o.texCoord1=a.texcoord1||o.texCoord1,o.texCoord2=a.texcoord2||o.texCoord2,o.index=a.indices||o.index,o.groupName=s.groupName||"",o.visible=void 0===s.visible||s.visible,o.visibleToShadows=void 0===s.visibleToShadows||s.visibleToShadows,o.build(),"PBRMaterial"==s.class?r.push(bg.base.PBRMaterial.GetMaterialWithJson(n._context,s,e).then(function(t){i.addPolyList(o,t)})):r.push(bg.base.Material.GetMaterialWithJson(n._context,s,e).then(function(t){i.addPolyList(o,t)}))}),Promise.all(r).then(function(){return i})},addComponents:function(t,e){var n=this;if(this._jointData){var i=null,r=null;this._jointData.input&&(i=this._jointData.input),this._jointData.output&&this._jointData.output.length&&(r=this._jointData.output[0]),i&&s(t,"InputChainJoint",i),r&&s(t,"OutputChainJoint",r)}if(this._componentData){console.log("Component data found");var a=e;bg.isElectronApp&&(a=bg.base.Writer.StandarizePath(e)),(a=a.split("/")).pop(),a=a.join("/"),this._componentData.forEach(function(e){bg.scene.Component.Factory(n.context,e,t,a)})}}},{})}(),u=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{acceptType:function(t,e){var n=bg.utils.Resource.GetExtension(t);return"vwglb"==n||"bg2"==n},load:function(t,e,n){return new Promise(function(i,r){if(n)try{var a=new o(t,n),s=e.substr(0,e.lastIndexOf("/"));a.loadDrawable(n,s).then(function(n){var r=new bg.scene.Node(t,n.name);r.addComponent(n),a.addComponents(r,e),i(r)})}catch(t){r(t)}else r(new Error("Error loading drawable. Data is null"))})}},{},t)}(bg.base.LoaderPlugin),h=function(t){function e(){$traceurRuntime.superConstructor(e).apply(this,arguments)}return $traceurRuntime.createClass(e,{load:function(t,n,i){var r=$traceurRuntime.superGet(this,e.prototype,"load").call(this,t,n,i);return new Promise(function(e,i){r.then(function(i){var r=n.split("/");r.pop(),r=r.join("/")+"/";var a=n.split(".");a.pop(),a.push("bg2mat"),a=a.join("."),bg.utils.Resource.LoadJson(a).then(function(e){var n=[];try{i.component("bg.scene.Drawable").forEach(function(i,a){var s=null;if(e.some(function(t){if(t.name==i.name)return s=t,!0}),s){var o="PBRMaterial"==s.class?bg.base.PBRMaterial.FromMaterialDefinition(t,s,r):bg.base.Material.FromMaterialDefinition(t,s,r);n.push(o),o.then(function(t){a.assign(t)})}})}catch(t){}return Promise.all(n)}).then(function(){e(i)}).catch(function(){e(i)})}).catch(function(t){i(t)})})}},{},t)}(u);bg.base.VWGLBLoaderPlugin=u,bg.base.Bg2LoaderPlugin=h}(),bg.manipulation={},function(){var t=function(t){function e(t,n){$traceurRuntime.superConstructor(e).call(this,t,n),this._sprite=bg.scene.PrimitiveFactory.PlanePolyList(t.context,1,1,"z"),this._gizmoScale=1,this._gizmoIcons=[],this._show3dGizmos=!0}return $traceurRuntime.createClass(e,{get gizmoScale(){return this._gizmoScale},set gizmoScale(t){this._gizmoScale=t},get show3dGizmos(){return this._show3dGizmos},set show3dGizmos(t){this._show3dGizmos=t},clearGizmoIcons:function(){this._gizmoIcons=[]},addGizmoIcon:function(t,e){var n=void 0===arguments[2]||arguments[2];this._gizmoIcons.push({type:t,icon:e,visible:n})},setGizmoIconVisibility:function(t,e){this._gizmoIcons.some(function(n){n.type==t&&(n.visible=e)})},get gizmoIcons(){return this._gizmoIcons},getGizmoIcon:function(t){var e=null;return this._gizmoIcons.some(function(n){if(t.component(n.type)&&n.visible)return e=n.icon,!0}),e},visit:function(t){$traceurRuntime.superGet(this,e.prototype,"visit").call(this,t);var n=this.getGizmoIcon(t),i=this.pipeline.effect.gizmoOpacity,r=this.pipeline.effect.color;this.pipeline.effect.color=bg.Color.White();var a=this.pipeline.depthTest;if(this.pipeline.depthTest=!1,n){this.pipeline.effect.texture=n,this.pipeline.effect.gizmoOpacity=1,this.matrixState.viewMatrixStack.push(),this.matrixState.modelMatrixStack.push(),this.matrixState.viewMatrixStack.mult(this.matrixState.modelMatrixStack.matrix),this.matrixState.modelMatrixStack.identity(),this.matrixState.viewMatrixStack.matrix.setRow(0,new bg.Vector4(1,0,0,0)),this.matrixState.viewMatrixStack.matrix.setRow(1,new bg.Vector4(0,1,0,0)),this.matrixState.viewMatrixStack.matrix.setRow(2,new bg.Vector4(0,0,1,0));var s=.05*this.matrixState.cameraDistanceScale*this._gizmoScale;this.matrixState.viewMatrixStack.scale(s,s,s),this.pipeline.draw(this._sprite),this.matrixState.viewMatrixStack.pop(),this.matrixState.modelMatrixStack.pop(),this.pipeline.effect.gizmoOpacity=i,this.pipeline.effect.texture=null}this._show3dGizmos&&t.displayGizmo(this.pipeline,this.matrixState),this.pipeline.effect.color=r,this.pipeline.depthTest=a}},{},t)}(bg.scene.DrawVisitor);bg.manipulation=bg.manipulation||{},bg.manipulation.DrawGizmoVisitor=t}(),function(){function t(){if(this.bounds.x!=this._gizmoSize.x||this.bounds.y!=this._gizmoSize.y||this.bounds.z!=this._gizmoSize.z){for(var t=-this.bounds.x/2,e=this.bounds.x/2,n=-this.bounds.y/2,i=this.bounds.y/2,r=-this.bounds.z/2,a=this.bounds.z/2,s=[t,n,r,e,n,r,e,n,r,e,i,r,e,i,r,t,i,r,t,i,r,t,n,r,t,n,a,e,n,a,e,n,a,e,i,a,e,i,a,t,i,a,t,i,a,t,n,a,t,n,r,t,n,a,e,n,r,e,n,a,e,i,r,e,i,a,t,i,r,t,i,a],o=[],u=0;u<s.length;u+=3)o.push(this._gizmoColor.r),o.push(this._gizmoColor.g),o.push(this._gizmoColor.b),o.push(this._gizmoColor.a);this._gizmo?(this._gizmo.updateBuffer(bg.base.BufferType.VERTEX,s),this._gizmo.updateBuffer(bg.base.BufferType.COLOR,o)):this._gizmo=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(this.node.context,s,o),this._gizmoScale=new bg.Vector3(this.bounds)}return this._gizmo}var e=function(e){function n(){$traceurRuntime.superConstructor(n).call(this),this._bounds=new bg.Vector3(1,1,1),this._gizmoSize=new bg.Vector3(0,0,0),this._gizmoColor=new bg.Color(.2,.4,.95,1)}return $traceurRuntime.createClass(n,{clone:function(){var t=new bg.manipulation.GizmoConstraints;return t.bounds.assign(this._bounds),t},get bounds(){return this._bounds},set bounds(t){this._bounds=t},serialize:function(t,e,i){$traceurRuntime.superGet(this,n.prototype,"serialize").call(this,t,e,i),t.bounds=this.bounds.toArray()},deserialize:function(t,e,n){Array.isArray(e.bounds)&&(this.bounds=new bg.Vector3(e.bounds))},displayGizmo:function(e,n){var i=t.apply(this);i&&e.draw(i)}},{},e)}(bg.scene.Component);bg.scene.registerComponent(bg.manipulation,e,"bg.manipulation.GizmoConstraints")}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._gizmoOpacity=.9},{get pipeline(){return this._pipeline||(this._pipeline=new bg.base.Pipeline(this.context),this._pipeline.blendMode=bg.base.BlendMode.NORMAL,this._pipeline.effect=new bg.manipulation.GizmoEffect(this.context)),this._pipeline},get matrixState(){return this._matrixState||(this._matrixState=new bg.base.MatrixState),this._matrixState},get drawVisitor(){return this._drawVisitor||(this._drawVisitor=new bg.manipulation.DrawGizmoVisitor(this.pipeline,this.matrixState)),this._drawVisitor},get gizmoOpacity(){return this._gizmoOpacity},set gizmoOpacity(t){this._gizmoOpacity=t},get show3dGizmos(){return this.drawVisitor.show3dGizmos},set show3dGizmos(t){this.drawVisitor.show3dGizmos=t},get working(){return this._working},addGizmoIcon:function(t,e){this.drawVisitor.addGizmoIcon(t,e)},get gizmoIconScale(){return this.drawVisitor.gizmoScale},set gizmoIconScale(t){this.drawVisitor.gizmoScale=t},setGizmoIconVisibility:function(t,e){this.drawVisitor.setGizmoIconVisibility(t,e)},hideGizmoIcon:function(t){this.drawVisitor.setGizmoIconVisibility(t,!1)},showGizmoIcon:function(t){this.drawVisitor.setGizmoIconVisibility(t,!0)},get gizmoIcons(){return this.drawVisitor.gizmoIcons},loadGizmoIcons:function(t){var e=void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=this;return new Promise(function(r,a){var s=[],o=[];t.forEach(function(t){var n={type:t.type,iconTexture:null};n.path=bg.utils.path.join(e,t.icon),s.push(n.path),o.push(n)}),bg.base.Loader.Load(i.context,s,n).then(function(t){o.forEach(function(e){e.iconTexture=t[e.path],i.addGizmoIcon(e.type,e.iconTexture)}),r(o)}).catch(function(t){a(t)})})},clearGizmoIcons:function(){this.drawVisitor.clearGizmoIcons()},startAction:function(t,e,n){var i=void 0!==arguments[3]?arguments[3]:null,r=this;if(!n)throw new Error("GizmoManager.startAction(): camera parameter is null.");if(i||(i=n.node&&n.node.sceneRoot),!i)throw new Error("GizmoManager.startAction(): The sceneRoot parameter can't be null because the camera is not attached to a scene.");var a=new bg.scene.FindComponentVisitor("bg.scene.AnchorJoint");if(i.accept(a),this._anchorPoints=[],this._anchorPoints.closestPoint=function(t,e){t instanceof bg.Vector3||(t=new bg.Vector3(t));var n=null,i=Number.MAX_VALUE;return this.forEach(function(r){var a=r.position.distance(t);r.component!=e&&a<i&&(n={anchor:r,distance:i=a})}),n},a.result.forEach(function(t){var e=t.anchorJoint;e.getWorldPositionAnchors().forEach(function(t){r._anchorPoints.push({position:new bg.Vector3(t.position),radius:t.radius,component:e})})}),this._working=!0,this._startPoint=new bg.Vector2(e.x,e.y),this._startPoint.y=n.viewport.height-e.y,this._currentGizmoData=t,this._currentGizmoData&&this._currentGizmoData.node){var s=this._currentGizmoData.node.component("bg.manipulation.Gizmo");s&&s.beginDrag(this._currentGizmoData.action,this._startPoint,this._anchorPoints)}},move:function(t,e){var n=this;if(this._currentGizmoData&&this._currentGizmoData.node){var i=this._currentGizmoData.node.parent,r=i&&i.component("bg.manipulation.GizmoConstraints"),a=this._currentGizmoData.node.transform,s=a&&new bg.Matrix4(a.matrix),o=this._currentGizmoData.node.component("bg.manipulation.Gizmo"),u=o&&this._currentGizmoData.node.anchorJoint;if(o){var h=null;if(u){var l=Number.MAX_VALUE;u.getWorldPositionAnchors().forEach(function(t){var e=new bg.Vector3(t.position),i=n._anchorPoints.closestPoint(e,u);i.distance<l&&(l=i.distance,t.position=new bg.Vector3(t.position),h={distance:l,nodeAnchor:t,closestAnchor:i.anchor,triggerAnchor:l<t.radius})})}if(t.y=e.viewport.height-t.y,o.drag(this._currentGizmoData.action,this._startPoint,t,e,this._anchorPoints,h),a&&r){var c=a.matrix.position,f=new bg.Vector3(r.bounds);f.scale(.5),(c.x<-f.x||c.x>f.x||c.y<-f.y||c.y>f.y||c.z<-f.z||c.z>f.z)&&(a.matrix=s)}}this._startPoint=t}},endAction:function(){if(this._currentGizmoData&&this._currentGizmoData.node){var t=this._currentGizmoData.node.component("bg.manipulation.Gizmo");t&&t.endDrag(this._currentGizmoData.action,this._anchorPoints)}this._working=!1,this._startPoint=null,this._currentGizmoData=null},drawGizmos:function(t,e){var n=void 0===arguments[2]||arguments[2],i=bg.base.Pipeline.Current(),r=bg.base.MatrixState.Current();bg.base.Pipeline.SetCurrent(this.pipeline),bg.base.MatrixState.SetCurrent(this.matrixState),this.pipeline.viewport=e.viewport,this.pipeline.effect.matrixState=this.matrixState,n&&this.pipeline.clearBuffers(bg.base.ClearBuffers.DEPTH),this.matrixState.projectionMatrixStack.set(e.projection),this.matrixState.viewMatrixStack.set(e.viewMatrix);var a=this.pipeline.opacityLayer;this.pipeline.opacityLayer=bg.base.OpacityLayer.NONE,this.pipeline.blend=!0,this.pipeline.effect.gizmoOpacity=this.gizmoOpacity,t.accept(this.drawVisitor),this.pipeline.blend=!1,this.pipeline.opacityLayer=a,i&&bg.base.Pipeline.SetCurrent(i),r&&bg.base.MatrixState.SetCurrent(r)}},{},t)}(bg.app.ContextObject);bg.manipulation.GizmoManager=t}(),function(){var t={};var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n),t[bg.webgl1.EngineId]={vertex:"\n\t\t\tattribute vec3 inVertex;\n\t\t\tattribute vec2 inTexCoord;\n\t\t\tattribute vec4 inVertexColor;\n\t\t\t\n\t\t\tuniform mat4 inModelMatrix;\n\t\t\tuniform mat4 inViewMatrix;\n\t\t\tuniform mat4 inProjectionMatrix;\n\t\t\t\n\t\t\tvarying vec2 fsTexCoord;\n\t\t\tvarying vec4 fsColor;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tfsTexCoord = inTexCoord;\n\t\t\t\tfsColor = inVertexColor;\n\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t}\n\t\t\t",fragment:"\n\t\t\tprecision highp float;\n\t\t\t\n\t\t\tuniform vec4 inColor;\n\t\t\tuniform sampler2D inTexture;\n\t\t\tuniform float inOpacity;\n\t\t\t\n\t\t\tvarying vec2 fsTexCoord;\n\t\t\tvarying vec4 fsColor;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec4 tex = texture2D(inTexture,fsTexCoord);\n\t\t\t\tgl_FragColor = vec4(fsColor.rgb * tex.rgb * inColor.rgb,inOpacity * tex.a);\n\t\t\t}\n\t\t\t"},this._gizmoOpacity=1,this._color=bg.Color.White()},{get inputVars(){return{vertex:"inVertex",color:"inVertexColor",tex0:"inTexCoord"}},set matrixState(t){this._matrixState=t},get matrixState(){return this._matrixState},set texture(t){this._texture=t},get texture(){return this._texture},set color(t){this._color=t},get color(){return this._color},set gizmoOpacity(t){this._gizmoOpacity=t},get gizmoOpacity(){return this._gizmoOpacity},get shader(){return this._shader||(this._shader=new bg.base.Shader(this.context),this._shader.addShaderSource(bg.base.ShaderType.VERTEX,t[bg.webgl1.EngineId].vertex),this._shader.addShaderSource(bg.base.ShaderType.FRAGMENT,t[bg.webgl1.EngineId].fragment),this._shader.link(),this._shader.status?this._shader.initVars(["inVertex","inVertexColor","inTexCoord"],["inModelMatrix","inViewMatrix","inProjectionMatrix","inColor","inTexture","inOpacity"]):(console.log(this._shader.compileError),console.log(this._shader.linkError))),this._shader},setupVars:function(){var t=bg.base.TextureCache.WhiteTexture(this.context);this.shader.setMatrix4("inModelMatrix",this.matrixState.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",new bg.Matrix4(this.matrixState.viewMatrixStack.matrixConst)),this.shader.setMatrix4("inProjectionMatrix",this.matrixState.projectionMatrixStack.matrixConst),this.shader.setVector4("inColor",this.color),this.shader.setTexture("inTexture",this.texture?this.texture:t,bg.base.TextureUnit.TEXTURE_0),this.shader.setValueFloat("inOpacity",this.gizmoOpacity)}},{},e)}(bg.base.Effect);function n(t){return/rotate.*fine/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE_FINE:/rotate.*x/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE_X:/rotate.*y/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE_Y:/rotate.*z/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE_Z:/rotate/i.test(t.name)?bg.manipulation.GizmoAction.ROTATE:/translate.*x/i.test(t.name)?bg.manipulation.GizmoAction.TRANSLATE_X:/translate.*y/i.test(t.name)?bg.manipulation.GizmoAction.TRANSLATE_Y:/translate.*z/i.test(t.name)?bg.manipulation.GizmoAction.TRANSLATE_Z:/translate/i.test(t.name)?bg.manipulation.GizmoAction.TRANSLATE:/scale.*x/i.test(t.name)?bg.manipulation.GizmoAction.SCALE_X:/scale.*y/i.test(t.name)?bg.manipulation.GizmoAction.SCALE_Y:/scale.*z/i.test(t.name)?bg.manipulation.GizmoAction.SCALE_Z:/scale/i.test(t.name)?bg.manipulation.GizmoAction.SCALE:void 0}bg.manipulation.GizmoEffect=e,bg.manipulation.GizmoAction={TRANSLATE:1,ROTATE:2,ROTATE_FINE:3,SCALE:4,TRANSLATE_X:5,TRANSLATE_Y:6,TRANSLATE_Z:7,ROTATE_X:8,ROTATE_Y:9,ROTATE_Z:10,SCALE_X:11,SCALE_Y:12,SCALE_Z:13,NONE:99};var i={},r=function(){function t(t){this._context=t,this._gizmos={}}return $traceurRuntime.createClass(t,{find:function(t){return this._gizmos[t]},register:function(t,e){this._gizmos[t]=e},unregister:function(t){this._gizmos[t]&&delete this._gizmos[t]},clear:function(){this._gizmos={}}},{Get:function(e){return i[e.uuid]||(i[e.uuid]=new t(e)),i[e.uuid]}})}();function a(t,e,i){return new Promise(function(r,a){e?bg.base.Loader.Load(t,e).then(function(t){var e=t.component("bg.scene.Drawable"),a=[];e&&e.forEach(function(t,e){a.push({id:bg.manipulation.Selectable.GetIdentifier(),type:bg.manipulation.SelectableType.GIZMO,plist:t,material:e,action:n(t),node:i})}),r(a)}).catch(function(t){a(t)}):r([])})}function s(t,e,n,i,r){r||(r=0);var a=new bg.Vector3(n);a.sub(i).normalize();var s=new bg.Vector3(e);s.sub(i).normalize();var o=a.dot(s),u=Math.acos(o);if(u>=r||0==r){0!=r&&(u=u>=2*r?2*r:r),t.dot(a.cross(s))<0&&(u*=-1);var h=new bg.Quaternion(u,t.x,t.y,t.z);if(h.normalize(),!isNaN(h.x))return h}return new bg.Quaternion(0,0,1,0)}bg.manipulation.GizmoCache=r;var o=function(t){function e(t){var n=void 0===arguments[1]||arguments[1];$traceurRuntime.superConstructor(e).call(this),this._gizmoPath=t,this._offset=new bg.Vector3(0),this._visible=n,this._gizmoTransform=bg.Matrix4.Identity(),this._gizmoP=bg.Matrix4.Identity(),this._scale=5,this._minSize=.5}return $traceurRuntime.createClass(e,{clone:function(){var t=new e(this._gizmoPath);return t.offset.assign(this._offset),t.visible=this._visible,t},get offset(){return this._offset},set offset(t){this._offset=t},get visible(){return this._visible},set visible(t){this._visible=t},get gizmoTransform(){return this._gizmoTransform},beginDrag:function(t,e,n){},drag:function(t,e,n,i,r){},endDrag:function(t,e){},findId:function(t){var e=null;return this._gizmoItems&&this._gizmoItems.some(function(n){if(n.id.r==t.r&&n.id.g==t.g&&n.id.b==t.b&&n.id.a==t.a)return e=n,!0}),e},init:function(){var t=this;this._error||(this._gizmoItems=[],a(this.node.context,this._gizmoPath,this.node).then(function(e){t._gizmoItems=e}).catch(function(e){throw t._error=!0,e}))},frame:function(t){},display:function(t,e){if(this._gizmoItems&&this.visible){e.modelMatrixStack.push();var n=new bg.Matrix4(e.viewMatrixStack.matrix);n.mult(e.modelMatrixStack.matrix);var i=n.position.magnitude()/this._scale;if(e.modelMatrixStack.matrix.setScale(i,i,i),t.effect instanceof bg.manipulation.ColorPickEffect&&(t.opacityLayer&bg.base.OpacityLayer.GIZMOS||t.opacityLayer&bg.base.OpacityLayer.GIZMOS_SELECTION)){var r=t.depthTest;t.opacityLayer&bg.base.OpacityLayer.GIZMOS_SELECTION?t.depthTest=!0:t.depthTest=!1,this._gizmoItems.forEach(function(e){e.plist.visible&&(t.effect.pickId=new bg.Color(e.id.a/255,e.id.b/255,e.id.g/255,e.id.r/255),t.draw(e.plist))}),t.depthTest=r}else t.effect instanceof bg.manipulation.GizmoEffect&&this._gizmoItems.forEach(function(e){e.plist.visible&&(t.effect.texture=e.material.texture,t.effect.color=e.material.diffuse,t.draw(e.plist))});e.modelMatrixStack.pop()}}},{},t)}(bg.scene.Component);function u(t,e,n){var i=new bg.Matrix4(t.transform.matrix),r=i.rotation,a=i.position;if(t._lastPickPoint||(t._lastPickPoint=e.ray.end,t._translateOffset=new bg.Vector3(a),t._translateOffset.sub(e.ray.end)),n){var o=new bg.Matrix4(r);0==(r=s(t.planeAxis,t._lastPickPoint,e.point,a)).x&&0==r.y&&0==r.z&&1==r.w||(i=bg.Matrix4.Translation(a).mult(r.getMatrix4()).mult(o),t._lastPickPoint=e.point)}else{var u=new bg.Matrix4(r);0==(r=s(t.planeAxis,t._lastPickPoint,e.point,a,bg.Math.degreesToRadians(22.5))).x&&0==r.y&&0==r.z&&1==r.w||(i=bg.Matrix4.Translation(a).mult(r.getMatrix4()).mult(u),t._lastPickPoint=e.point)}return i}var h=function(t){function e(t){var n=void 0===arguments[1]||arguments[1];$traceurRuntime.superConstructor(e).call(this,t,n),this._plane=bg.Axis.Y,this._autoPlaneMode=!0}return $traceurRuntime.createClass(e,{get plane(){return this._plane},set plane(t){this._plane=t},get autoPlaneMode(){return this._autoPlaneMode},set autoPlaneMode(t){this._autoPlaneMode=t},get planeAxis(){switch(Math.abs(this.plane)){case bg.Axis.X:return new bg.Vector3(1,0,0);case bg.Axis.Y:return new bg.Vector3(0,1,0);case bg.Axis.Z:return new bg.Vector3(0,0,1)}},get gizmoTransform(){var t=bg.Matrix4.Identity();switch(this.plane){case bg.Axis.X:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(90),0,0,-1);case bg.Axis.Y:break;case bg.Axis.Z:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(90),1,0,0);case-bg.Axis.X:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(90),0,0,1);case-bg.Axis.Y:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(180),0,-1,0);case-bg.Axis.Z:return bg.Matrix4.Rotation(bg.Math.degreesToRadians(90),-1,0,0)}return t},clone:function(){var t=new e(this._gizmoPath);return t.offset.assign(this._offset),t.visible=this._visible,t},init:function(){$traceurRuntime.superGet(this,e.prototype,"init").call(this),this._gizmoP=bg.Matrix4.Translation(this.transform.matrix.position)},display:function(t,e){if(this._gizmoItems&&this.visible&&(this.autoPlaneMode&&function(t,e){var n=e.viewMatrixStack.matrix.forwardVector,i=e.viewMatrixStack.matrix.upVector,r=new bg.Vector3(1,0,0),a=new bg.Vector3(0,1,0),s=new bg.Vector3(0,0,1),o=new bg.Vector3(-1,0,0),u=new bg.Vector3(0,-1,0),h=new bg.Vector3(0,0,-1);if(Math.acos(i.dot(a))>.9)t.plane=bg.Axis.Y;else{var l=[Math.acos(n.dot(r)),Math.acos(n.dot(a)),Math.acos(n.dot(s)),Math.acos(n.dot(o)),Math.acos(n.dot(u)),Math.acos(n.dot(h))],c=l[0],f=0;switch(l.reduce(function(t,e,n){e<c&&(f=n,c=e)}),f){case 0:t.plane=-bg.Axis.X;break;case 1:t.plane=bg.Axis.Y;break;case 2:t.plane=bg.Axis.Z;break;case 3:t.plane=bg.Axis.X;break;case 4:t.plane=-bg.Axis.Y;break;case 5:t.plane=-bg.Axis.Z}}}(this,e),this._gizmoItems&&this.visible)){var n=new bg.Matrix4(e.viewMatrixStack.matrix);n.mult(e.modelMatrixStack.matrix);var i=n.position.magnitude()/this._scale;i=i<this._minSize?this._minSize:i;var r=this.gizmoTransform;if(r.setScale(i,i,i),e.modelMatrixStack.push(),e.modelMatrixStack.mult(r),t.effect instanceof bg.manipulation.ColorPickEffect&&(t.opacityLayer&bg.base.OpacityLayer.GIZMOS||t.opacityLayer&bg.base.OpacityLayer.GIZMOS_SELECTION)){var a=t.depthTest;t.opacityLayer&bg.base.OpacityLayer.GIZMOS_SELECTION?t.depthTest=!0:t.depthTest=!1,this._gizmoItems.forEach(function(e){e.plist.visible&&(t.effect.pickId=new bg.Color(e.id.a/255,e.id.b/255,e.id.g/255,e.id.r/255),t.draw(e.plist))}),t.depthTest=a}else t.effect instanceof bg.manipulation.GizmoEffect&&this._gizmoItems.forEach(function(e){e.plist.visible&&(t.effect.texture=e.material.texture,t.effect.color=e.material.diffuse,t.draw(e.plist))});e.modelMatrixStack.pop()}},beginDrag:function(t,e){var n=this;this._lastPickPoint=null,this._stopDrag&&(this._disableAnchor=!0,this._stopDrag=!1,setTimeout(function(){n._disableAnchor=!1},500))},drag:function(t,e,n,i,r,a){if(this.transform&&!this._stopDrag){var s=new bg.physics.Plane(this.planeAxis),o=bg.physics.Ray.RayWithScreenPoint(n,i.projection,i.viewMatrix,i.viewport),h=bg.physics.Intersection.RayToPlane(o,s);if(h.intersects()){var l=new bg.Matrix4(this.transform.matrix);switch(this._gizmoP=bg.Matrix4.Translation(this.transform.matrix.position),t){case bg.manipulation.GizmoAction.TRANSLATE:if(l=function(t,e){var n=new bg.Matrix4(t.transform.matrix),i=n.rotation,r=n.position;switch(t._lastPickPoint||(t._lastPickPoint=e.ray.end,t._translateOffset=new bg.Vector3(r),t._translateOffset.sub(e.ray.end)),Math.abs(t.plane)){case bg.Axis.X:n=bg.Matrix4.Translation(r.x,e.point.y+t._translateOffset.y,e.point.z+t._translateOffset.z);break;case bg.Axis.Y:n=bg.Matrix4.Translation(e.point.x+t._translateOffset.x,r.y,e.point.z+t._translateOffset.z);break;case bg.Axis.Z:n=bg.Matrix4.Translation(e.point.x+t._translateOffset.x,e.point.y+t._translateOffset.y,r.z)}return n.mult(i),t._lastPickPoint=e.point,n}(this,h),a&&a.triggerAnchor&&!this._disableAnchor){var c=new bg.Vector3(a.closestAnchor.position);c.sub(a.nodeAnchor.position);var f=l.position;l.setPosition(new bg.Vector3(f.x+c.x,f.y+c.y,f.z+c.z)),this._stopDrag=!0}break;case bg.manipulation.GizmoAction.ROTATE:l=u(this,h,!1);break;case bg.manipulation.GizmoAction.ROTATE_FINE:l=u(this,h,!0)}this.transform.matrix=l}}},endDrag:function(t){this._lastPickPoint=null}},{},t)}(o),l=function(t){function e(t){var n=void 0===arguments[1]||arguments[1];$traceurRuntime.superConstructor(e).call(this,t,n),this._translateSpeed=.005,this._rotateSpeed=.005,this._scaleSpeed=.001,this._gizmoTransform=bg.Matrix4.Identity()}return $traceurRuntime.createClass(e,{get gizmoTransform(){return this._gizmoTransform},get translateSpeed(){return this._translateSpeed},set translateSpeed(t){this._translateSpeed=t},get rotateSpeed(){return this._rotateSpeed},set rotateSpeed(t){this._rotateSpeed=t},get scaleSpeed(){return this._scaleSpeed},set scaleSpeed(t){this._scaleSpeed=t},clone:function(){var t=new h(this._gizmoPath);return t.offset.assign(this._offset),t.visible=this._visible,t},init:function(){$traceurRuntime.superGet(this,e.prototype,"init").call(this),this._gizmoP=bg.Matrix4.Translation(this.transform.matrix.position),this._gizmoTransform=this.transform.matrix.rotation},display:function(t,n){this._gizmoItems&&this.visible&&$traceurRuntime.superGet(this,e.prototype,"display").call(this,t,n)},beginDrag:function(t,e){this._lastPickPoint=null},drag:function(t,e,n,i){if(this.transform){this._lastPickPoint||(this._lastPickPoint=n);var r=new bg.Matrix4(this.transform.matrix);this._gizmoP=bg.Matrix4.Translation(this.transform.matrix.position);var a=new bg.Vector2(this._lastPickPoint);a.sub(n);var s=bg.base.MatrixState.Current(),o=new bg.Matrix4(s.viewMatrixStack.matrix);o.mult(s.modelMatrixStack.matrix);var u=o.position.magnitude()/this._scale;u=u<this._minSize?this._minSize:u;var h=r.getScale(),l=1-(a.x+a.y)*this.scaleSpeed;switch(t){case bg.manipulation.GizmoAction.SCALE:r.scale(l,l,l);break;case bg.manipulation.GizmoAction.TRANSLATE_X:r.translate(-(a.x+a.y)*this.translateSpeed*u/h.x,0,0);break;case bg.manipulation.GizmoAction.TRANSLATE_Y:r.translate(0,-(a.x+a.y)*this.translateSpeed*u/h.y,0);break;case bg.manipulation.GizmoAction.TRANSLATE_Z:r.translate(0,0,-(a.x+a.y)*this.translateSpeed*u/h.z);break;case bg.manipulation.GizmoAction.ROTATE_X:r.rotate((a.x+a.y)*this.rotateSpeed,1,0,0),this._gizmoP.rotate((a.x+a.y)*this.rotateSpeed,1,0,0);break;case bg.manipulation.GizmoAction.ROTATE_Y:r.rotate((a.x+a.y)*this.rotateSpeed,0,1,0),this._gizmoP.rotate((a.x+a.y)*this.rotateSpeed,0,1,0);break;case bg.manipulation.GizmoAction.ROTATE_Z:r.rotate((a.x+a.y)*this.rotateSpeed,0,0,1),this._gizmoP.rotate((a.x+a.y)*this.rotateSpeed,0,0,1);break;case bg.manipulation.GizmoAction.SCALE_X:r.scale(l,1,1);break;case bg.manipulation.GizmoAction.SCALE_Y:r.scale(1,l,1);break;case bg.manipulation.GizmoAction.SCALE_Z:r.scale(1,1,l)}this.transform.matrix=r,this._lastPickPoint=n}},endDrag:function(t){this._lastPickPoint=null}},{},t)}(o);bg.manipulation.GizmoMode={SELECT:0,TRANSLATE:1,ROTATE:2,SCALE:3,TRANSFORM:4};var c=function(t){return $traceurRuntime.createClass(function t(e,n,i,r){$traceurRuntime.superConstructor(t).call(this,e),this.mode=bg.manipulation.GizmoMode.TRANSFORM,this._transformPath=e,this._translatePath=n,this._rotatePath=i,this._scalePath=r,this._gizmoPath=e},{get visible(){return this._mode!=bg.manipulation.GizmoMode.SELECT&&this._visible},set visible(t){this._visible=t},get mode(){return this._mode},set mode(t){var e=this;switch(this._mode=t,this._gizmoItems=[],t){case bg.manipulation.GizmoMode.SELECT:this._gizmoPath="";break;case bg.manipulation.GizmoMode.TRANSLATE:this._gizmoPath=this._translatePath;break;case bg.manipulation.GizmoMode.ROTATE:this._gizmoPath=this._rotatePath;break;case bg.manipulation.GizmoMode.SCALE:this._gizmoPath=this._scalePath;break;case bg.manipulation.GizmoMode.TRANSFORM:this._gizmoPath=this._transformPath}this._gizmoPath&&a(this.node.context,this._gizmoPath,this.node).then(function(t){e._gizmoItems=t,bg.emitImageLoadEvent()}).catch(function(t){throw e._error=!0,t})}},{},t)}(l);bg.scene.registerComponent(bg.manipulation,o,"bg.manipulation.Gizmo"),bg.scene.registerComponent(bg.manipulation,h,"bg.manipulation.Gizmo"),bg.scene.registerComponent(bg.manipulation,l,"bg.manipulation.Gizmo"),bg.scene.registerComponent(bg.manipulation,c,"bg.manipulation.Gizmo")}(),function(){var t={};var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n),t[bg.webgl1.EngineId]={vertex:"\n\t\t\tattribute vec3 inVertex;\n\t\t\t\n\t\t\tuniform mat4 inModelMatrix;\n\t\t\tuniform mat4 inViewMatrix;\n\t\t\tuniform mat4 inProjectionMatrix;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t}\n\t\t\t",fragment:"\n\t\t\tprecision highp float;\n\t\t\t\n\t\t\tuniform vec4 inColorId;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tgl_FragColor = inColorId;\n\t\t\t}\n\t\t\t"}},{get inputVars(){return{vertex:"inVertex"}},set matrixState(t){this._matrixState=t},get matrixState(){return this._matrixState},set pickId(t){this._pickId=t},get pickId(){return this._pickId||bg.Color.Transparent()},get shader(){return this._shader||(this._shader=new bg.base.Shader(this.context),this._shader.addShaderSource(bg.base.ShaderType.VERTEX,t[bg.webgl1.EngineId].vertex),this._shader.addShaderSource(bg.base.ShaderType.FRAGMENT,t[bg.webgl1.EngineId].fragment),this._shader.link(),this._shader.status?this._shader.initVars(["inVertex"],["inModelMatrix","inViewMatrix","inProjectionMatrix","inColorId"]):(console.log(this._shader.compileError),console.log(this._shader.linkError))),this._shader},setupVars:function(){this.shader.setMatrix4("inModelMatrix",this.matrixState.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",new bg.Matrix4(this.matrixState.viewMatrixStack.matrixConst)),this.shader.setMatrix4("inProjectionMatrix",this.matrixState.projectionMatrixStack.matrixConst),this.shader.setVector4("inColorId",this.pickId)}},{},e)}(bg.base.Effect);bg.manipulation.ColorPickEffect=e;var n=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this),this._target=e},{get target(){return this._target},set target(t){this._target=t,this._result=null},get result(){return this._result},visit:function(t){var e=t.component("bg.manipulation.Selectable"),n=t.component("bg.manipulation.Gizmo");n&&!n.visible&&(n=null),this._result=this._result||e&&e.findId(this.target)||n&&n.findId(this.target)}},{},t)}(bg.scene.NodeVisitor);bg.manipulation.FindPickIdVisitor=n;var i=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get pipeline(){return this._pipeline||(this._pipeline=new bg.base.Pipeline(this.context),this._pipeline.effect=new e(this.context),this._renderSurface=new bg.base.TextureSurface(this.context),this._renderSurface.create(),this._pipeline.renderSurface=this._renderSurface,this._pipeline.clearColor=new bg.Color(0,0,0,0)),this._pipeline},get matrixState(){return this._matrixState||(this._matrixState=new bg.base.MatrixState),this._matrixState},get drawVisitor(){return this._drawVisitor||(this._drawVisitor=new bg.scene.DrawVisitor(this.pipeline,this.matrixState)),this._drawVisitor},pick:function(t,e,i){var r=bg.base.Pipeline.Current(),a=bg.base.MatrixState.Current();bg.base.Pipeline.SetCurrent(this.pipeline),bg.base.MatrixState.SetCurrent(this.matrixState),this.pipeline.viewport=e.viewport,this.pipeline.effect.matrixState=this.matrixState,this.pipeline.clearBuffers(bg.base.ClearBuffers.COLOR|bg.base.ClearBuffers.DEPTH),this.matrixState.projectionMatrixStack.set(e.projection),this.matrixState.viewMatrixStack.set(e.viewMatrix);var s=this.pipeline.opacityLayer;this.pipeline.opacityLayer=bg.base.OpacityLayer.SELECTION,t.accept(this.drawVisitor),this.pipeline.opacityLayer=bg.base.OpacityLayer.GIZMOS_SELECTION,this.pipeline.clearBuffers(bg.base.ClearBuffers.DEPTH),t.accept(this.drawVisitor),this.pipeline.opacityLayer=s;var o=this.pipeline.renderSurface.readBuffer(new bg.Viewport(i.x,i.y,1,1)),u={r:o[3],g:o[2],b:o[1],a:o[0]},h=new n(u);return t.accept(h),r&&bg.base.Pipeline.SetCurrent(r),a&&bg.base.MatrixState.SetCurrent(a),h.result}},{},t)}(bg.app.ContextObject);bg.manipulation.MousePicker=i}(),function(){var t=0,e=0,n=0,i=0;function r(){255==t?(t=0,255==e?(e=0,255==n?(n=0,255==i?(i=0,bg.log("WARNING: Maximum number of picker identifier reached.")):++i):++n):++e):++t}function a(){return r(),{r:t,g:e,b:e,a:i}}bg.manipulation.SelectableType={PLIST:1,GIZMO:2,GIZMO_ICON:3};var s=null;var o=["bg.scene.Camera","bg.scene.Light","bg.scene.Transform","bg.scene.TextRect"],u=function(t){function e(){$traceurRuntime.superConstructor(e).call(this),this._initialized=!1,this._selectablePlist=[]}return $traceurRuntime.createClass(e,{clone:function(){return new e},buildIdentifier:function(){this._initialized=!1,this._selectablePlist=[]},findId:function(t){var e=null;return this._selectablePlist.some(function(n){if(n.id.r==t.r&&n.id.g==t.g&&n.id.b==t.b&&n.id.a==t.a)return e=n,!0}),e},frame:function(t){var e=this;if(!this._initialized&&this.drawable)this.drawable.forEach(function(t,n){var i=a();e._selectablePlist.push({id:i,type:bg.manipulation.SelectableType.PLIST,plist:t,material:n,drawable:e.drawable,node:e.node})}),this._initialized=!0;else if(!this._initialized){var n=a();this._selectablePlist.push({id:n,type:bg.manipulation.SelectableType.GIZMO_ICON,plist:null,material:null,drawable:null,node:this.node}),this._initialized=!0}},display:function(t,e){var n=this;if(t.effect instanceof bg.manipulation.ColorPickEffect&&t.opacityLayer&bg.base.OpacityLayer.SELECTION){var i=o.some(function(t){return null!=n.node.component(t)});this._selectablePlist.forEach(function(r){var a=new bg.Color(r.id.a/255,r.id.b/255,r.id.g/255,r.id.r/255);if(r.plist&&r.plist.visible)t.effect.pickId=a,t.draw(r.plist);else if(!r.plist&&i){var o=.1*e.cameraDistanceScale;t.effect.pickId=a,e.modelMatrixStack.push(),e.modelMatrixStack.scale(o,o,o),t.draw(function(){return s||(s=bg.scene.PrimitiveFactory.SpherePolyList(this.node.context,.5)),s}.apply(n)),e.modelMatrixStack.pop()}})}}},{SetSelectableIcons:function(t){o=t},AddSelectableIcon:function(t){-1==o.indexOf(t)&&o.push(t)},RemoveSelectableIcon:function(t){var e=o.indexOf(t);e>=0&&o.splice(e,1)},SetSelectMode:function(t){t},GetIdentifier:function(){return a()}},t)}(bg.scene.Component);bg.scene.registerComponent(bg.manipulation,u,"bg.manipulation.Selectable")}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n);var i=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX),r=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);i.addParameter([t().inputs.buffers.vertex,t().inputs.buffers.tex0,{name:"fsTexCoord",dataType:"vec2",role:"out"}]),r.addParameter([t().inputs.material.texture,{name:"inTexSize",dataType:"vec2",role:"value"},{name:"inConvMatrix",dataType:"float",role:"value",vec:9},{name:"inBorderColor",dataType:"vec4",role:"value"},{name:"inBorderWidth",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&(i.setMainBody("\n gl_Position = vec4(inVertex,1.0);\n fsTexCoord = inTex0;\n "),r.addFunction(t().functions.utils.applyConvolution),r.setMainBody("\n vec4 selectionColor = applyConvolution(inTexture,fsTexCoord,inTexSize,inConvMatrix,inBorderWidth);\n if (selectionColor.r!=0.0 && selectionColor.g!=0.0 && selectionColor.b!=0.0) {\n gl_FragColor = inBorderColor;\n }\n else {\n discard;\n }\n ")),this.setupShaderSource([i,r],!1),this._highlightColor=bg.Color.White(),this._borderWidth=2},{get highlightColor(){return this._highlightColor},set highlightColor(t){this._highlightColor=t},get borderWidth(){return this._borderWidth},set borderWidth(t){this._borderWidth=t},setupVars:function(){var t=null;this._surface instanceof bg.base.Texture?t=this._surface:this._surface instanceof bg.base.RenderSurface&&(t=this._surface.getTexture(0)),t&&(this.shader.setTexture("inTexture",t,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTexSize",t.size));this.shader.setValueFloatPtr("inConvMatrix",[0,1,0,1,-4,1,0,1,0]),this.shader.setVector4("inBorderColor",this._highlightColor),this.shader.setValueFloat("inBorderWidth",this._borderWidth)}},{},e)}(bg.base.TextureEffect);bg.manipulation.BorderDetectionEffect=e;var n=null,i=null;var r=function(e){return $traceurRuntime.createClass(function e(r){$traceurRuntime.superConstructor(e).call(this,r);var a=[(n||((n=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter(t().inputs.buffers.vertex),n.addParameter(t().inputs.matrix.all),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n gl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n ")),n),(i||((i=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).addParameter([{name:"inColor",dataType:"vec4",role:"value"},{name:"inSelectMode",dataType:"int",role:"value"}]),"webgl1"==bg.Engine.Get().id&&i.setMainBody("\n if (inSelectMode==0) {\n discard;\n }\n else {\n gl_FragColor = inColor;\n }\n ")),i)];this.setupShaderSource(a)},{beginDraw:function(){bg.Math.seed=1},setupVars:function(){this._baseColor=new bg.Color(bg.Math.seededRandom(),bg.Math.seededRandom(),bg.Math.seededRandom(),1);var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst),this.shader.setVector4("inColor",this._baseColor),this.shader.setValueInt("inSelectMode",this.material.selectMode)}},{},e)}(bg.base.Effect);bg.manipulation.PlainColorEffect=r;var a=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._offscreenPipeline=function(){var t=new bg.base.Pipeline(this.context),e=new bg.base.TextureSurface(this.context);t.effect=new bg.manipulation.PlainColorEffect(this.context);var n=[{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}];return e.create(n),t.renderSurface=e,t}.apply(this),this._pipeline=new bg.base.Pipeline(this.context),this._pipeline.textureEffect=new bg.manipulation.BorderDetectionEffect(this.context),this._matrixState=new bg.base.MatrixState,this._drawVisitor=new bg.scene.DrawVisitor(this._offscreenPipeline,this._matrixState),this._drawVisitor.forceDraw=!1},{get highlightColor(){return this._pipeline.textureEffect.highlightColor},set highlightColor(t){this._pipeline.textureEffect.highlightColor=t},get borderWidth(){return this._pipeline.textureEffect.borderWidth},set borderWidth(t){this._pipeline.textureEffect.borderWidth=t},get drawInvisiblePolyList(){return this._drawVisitor.forceDraw},set drawInvisiblePolyList(t){this._drawVisitor.forceDraw=t},drawSelection:function(t,e){var n=bg.base.Pipeline.Current(),i=bg.base.MatrixState.Current();this._offscreenPipeline.viewport=e.viewport,this._pipeline.viewport=e.viewport,bg.base.Pipeline.SetCurrent(this._offscreenPipeline),bg.base.MatrixState.SetCurrent(this._matrixState),this._offscreenPipeline.clearBuffers(bg.base.ClearBuffers.COLOR|bg.base.ClearBuffers.DEPTH),this._matrixState.projectionMatrixStack.set(e.projection),this._matrixState.viewMatrixStack.set(e.viewMatrix),this._matrixState.modelMatrixStack.identity(),t.accept(this._drawVisitor);var r=this._offscreenPipeline.renderSurface.getTexture(0);bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.blend=!0,this._pipeline.blendMode=bg.base.BlendMode.ADD,this._pipeline.drawTexture(r),n&&bg.base.Pipeline.SetCurrent(n),i&&bg.base.MatrixState.SetCurrent(i)}},{},t)}(bg.app.ContextObject);bg.manipulation.SelectionHighlight=a}(),function(){var t={ROTATE:0,PAN:1,ZOOM:2};function e(){for(var t=this.minX,e=this.maxX,n=this.minY,i=this.maxY,r=this.minZ,a=this.maxZ,s=[t,n,r,e,n,r,e,n,r,e,i,r,e,i,r,t,i,r,t,i,r,t,n,r,t,n,a,e,n,a,e,n,a,e,i,a,e,i,a,t,i,a,t,i,a,t,n,a,t,n,r,t,n,a,e,n,r,e,n,a,e,i,r,e,i,a,t,i,r,t,i,a],o=[],u=0;u<s.length;u+=3)o.push(this._limitGizmoColor.r),o.push(this._limitGizmoColor.g),o.push(this._limitGizmoColor.b),o.push(this._limitGizmoColor.a);return this._plist?(this._plist.updateBuffer(bg.base.BufferType.VERTEX,s),this._plist.updateBuffer(bg.base.BufferType.COLOR,o)):this._plist=function(t,e,n){for(var i=new bg.base.PolyList(t),r=[],a=[],s=[],o=0,u=0;u<e.length;u+=3)r.push(0),r.push(0),r.push(1),a.push(0),a.push(0),s.push(o++);return i.vertex=e,i.normal=r,i.texCoord0=a,i.color=n,i.index=s,i.drawMode=bg.base.DrawMode.LINES,i.build(),i}(this.node.context,s,o),this._plist}var n=function(n){function i(){$traceurRuntime.superConstructor(i).call(this),this._rotateButtons={left:!0,middle:!1,right:!1},this._panButtons={left:!1,middle:!1,right:!0},this._zoomButtons={left:!1,middle:!0,right:!1},this._rotation=new bg.Vector2,this._distance=5,this._center=new bg.Vector3,this._rotationSpeed=.2,this._forward=0,this._left=0,this._wheelSpeed=1,this._minFocus=2,this._minPitch=.1,this._maxPitch=85,this._minDistance=.4,this._maxDistance=24,this._maxX=15,this._minX=-15,this._minY=.1,this._maxY=2,this._maxZ=15,this._minZ=-15,this._displacementSpeed=.1,this._enabled=!0,this._keys={},this._showLimitGizmo=!0,this._limitGizmoColor=bg.Color.Green(),this._viewWidth=50,this._lastTouch=[]}return $traceurRuntime.createClass(i,{clone:function(){var t=new i,e={};return this.serialize(e,[],""),t.deserialize(null,e,""),t},setRotateButtons:function(t,e,n){this._rotateButtons={left:t,middle:e,right:n}},setPanButtons:function(t,e,n){this._panButtons={left:t,middle:e,right:n}},setZoomButtons:function(t,e,n){this._zoomButtons={left:t,middle:e,right:n}},get rotation(){return this._rotation},set rotation(t){this._rotation=t},get distance(){return this._distance},set distance(t){this._distance=t},get center(){return this._center},set center(t){this._center=t},get whellSpeed(){this._wheelSpeed},set wheelSpeed(t){this._wheelSpeed=t},get viewWidth(){return this._viewWidth},get minCameraFocus(){return this._minFocus},set minCameraFocus(t){this._minFocus=t},get minPitch(){return this._minPitch},set minPitch(t){this._minPitch=t},get maxPitch(){return this._maxPitch},set maxPitch(t){this._maxPitch=t},get minDistance(){return this._minDistance},set minDistance(t){this._minDistance=t},get maxDistance(){return this._maxDistance},set maxDistance(t){this._maxDistance=t},get minX(){return this._minX},get maxX(){return this._maxX},get minY(){return this._minY},get maxY(){return this._maxY},get minZ(){return this._minZ},get maxZ(){return this._maxZ},set minX(t){this._minX=t},set maxX(t){this._maxX=t},set minY(t){this._minY=t},set maxY(t){this._maxY=t},set minZ(t){this._minZ=t},set maxZ(t){this._maxZ=t},get displacementSpeed(){return this._displacementSpeed},set displacementSpeed(t){this._displacementSpeed=t},get enabled(){return this._enabled},set enabled(t){this._enabled=t},get showLimitGizmo(){return this._showLimitGizmo},set showLimitGizmo(t){this._showLimitGizmo=t},get limitGizmoColor(){return this._limitGizmoColor},set limitGizmoColor(t){this._limitGizmoColor=t},displayGizmo:function(t,n){if(this._showLimitGizmo){var i=e.apply(this);n.modelMatrixStack.push(),n.modelMatrixStack.identity(),i&&t.draw(i),n.modelMatrixStack.pop()}},serialize:function(t,e,n){$traceurRuntime.superGet(this,i.prototype,"serialize").call(this,t,e,n),t.rotateButtons=this._rotateButtons,t.panButtons=this._panButtons,t.zoomButtons=this._zoomButtons,t.rotation=this._rotation.toArray(),t.distance=this._distance,t.center=this._center.toArray(),t.rotationSpeed=this._rotationSpeed,t.forward=this._forward,t.left=this._left,t.wheelSpeed=this._wheelSpeed,t.minFocus=this._minFocus,t.minPitch=this._minPitch,t.maxPitch=this._maxPitch,t.minDistance=this._minDistance,t.maxDistance=this._maxDistance,t.maxX=this._maxX,t.minX=this._minX,t.minY=this._minY,t.maxY=this._maxY,t.maxZ=this._maxZ,t.minZ=this._minZ,t.displacementSpeed=this._displacementSpeed,t.enabled=this._enabled},deserialize:function(t,e,n){this._rotateButtons=e.rotateButtons||this._rotateButtons,this._panButtons=e.panButtons||this._panButtons,this._zoomButtons=e.zoomButtons||this._zoomButtons,this._rotation=new bg.Vector2(e.rotation)||this._rotation,this._distance=void 0!==e.distance?e.distance:this._distance,this._center=new bg.Vector3(e.center)||this._center,this._rotationSpeed=void 0!==e.rotationSpeed?e.rotationSpeed:this._rotationSpeed,this._forward=void 0!==e.forward?e.forward:this._forward,this._left=void 0!==e.left?e.left:this._left,this._wheelSpeed=void 0!==e.wheelSpeed?e.wheelSpeed:this._wheelSpeed,this._minFocus=void 0!==e.minFocus?e.minFocus:this._minFocus,this._minPitch=void 0!==e.minPitch?e.minPitch:this._minPitch,this._maxPitch=void 0!==e.maxPitch?e.maxPitch:this._maxPitch,this._minDistance=void 0!==e.minDistance?e.minDistance:this._minDistance,this._maxDistance=void 0!==e.maxDistance?e.maxDistance:this._maxDistance,this._maxX=void 0!==e.maxX?e.maxX:this._maxX,this._minX=void 0!==e.minX?e.minX:this._minX,this._minY=void 0!==e.minY?e.minY:this._minY,this._maxY=void 0!==e.maxY?e.maxY:this._maxY,this._maxZ=void 0!==e.maxZ?e.maxZ:this._maxZ,this._minZ=void 0!==e.minZ?e.minZ:this._minZ,this._displacementSpeed=void 0!==e.displacementSpeed?e.displacementSpeed:this._displacementSpeed,this._enabled=void 0!==e.enabled?e.enabled:this._enabled},frame:function(t){var e=this.camera&&"object"==$traceurRuntime.typeof(this.camera.projectionStrategy)&&this.camera.projectionStrategy instanceof bg.scene.OrthographicProjectionStrategy?this.camera.projectionStrategy:null;if(this.transform&&this.enabled){var n=this.transform.matrix.forwardVector,i=this.transform.matrix.leftVector;n.scale(this._forward),i.scale(this._left),this._center.add(n).add(i);var r=this._rotation.x>this._minPitch?this._rotation.x:this._minPitch;if(r=r<this._maxPitch?r:this._maxPitch,this._rotation.x=r,this._distance=this._distance>this._minDistance?this._distance:this._minDistance,this._distance=this._distance<this._maxDistance?this._distance:this._maxDistance,this._mouseButtonPressed){var a=new bg.Vector3;this._keys[bg.app.SpecialKey.UP_ARROW]&&(a.add(this.transform.matrix.backwardVector),bg.app.MainLoop.singleton.windowController.postRedisplay()),this._keys[bg.app.SpecialKey.DOWN_ARROW]&&(a.add(this.transform.matrix.forwardVector),bg.app.MainLoop.singleton.windowController.postRedisplay()),this._keys[bg.app.SpecialKey.LEFT_ARROW]&&(a.add(this.transform.matrix.leftVector),bg.app.MainLoop.singleton.windowController.postRedisplay()),this._keys[bg.app.SpecialKey.RIGHT_ARROW]&&(a.add(this.transform.matrix.rightVector),bg.app.MainLoop.singleton.windowController.postRedisplay()),a.scale(this._displacementSpeed),this._center.add(a)}this._center.x<this._minX?this._center.x=this._minX:this._center.x>this._maxX&&(this._center.x=this._maxX),this._center.y<this._minY?this._center.y=this._minY:this._center.y>this._maxY&&(this._center.y=this._maxY),this._center.z<this._minZ?this._center.z=this._minZ:this._center.z>this._maxZ&&(this._center.z=this._maxZ),this.transform.matrix.identity().translate(this._center).rotate(bg.Math.degreesToRadians(this._rotation.y),0,1,0).rotate(bg.Math.degreesToRadians(r),-1,0,0),e?e.viewWidth=this._viewWidth:this.transform.matrix.translate(0,0,this._distance)}this.camera&&(this.camera.focus=this._distance>this._minFocus?this._distance:this._minFocus)},mouseDown:function(t){this.enabled&&(this._mouseButtonPressed=!0,this._lastPos=new bg.Vector2(t.x,t.y))},mouseUp:function(t){this._mouseButtonPressed=!1},mouseDrag:function(e){if(this.transform&&this._lastPos&&this.enabled){var n=new bg.Vector2(this._lastPos.y-e.y,this._lastPos.x-e.x);this._lastPos.set(e.x,e.y);var i=!!(this.camera&&"object"==$traceurRuntime.typeof(this.camera.projectionStrategy)&&this.camera.projectionStrategy instanceof bg.scene.OrthographicProjectionStrategy);switch(function(e){var n=bg.app.Mouse.LeftButton(),i=bg.app.Mouse.MiddleButton(),r=bg.app.Mouse.RightButton();switch(!0){case n==e._rotateButtons.left&&i==e._rotateButtons.middle&&r==e._rotateButtons.right:return t.ROTATE;case n==e._panButtons.left&&i==e._panButtons.middle&&r==e._panButtons.right:return t.PAN;case n==e._zoomButtons.left&&i==e._zoomButtons.middle&&r==e._zoomButtons.right:return t.ZOOM}}(this)){case t.ROTATE:n.x=-1*n.x,this._rotation.add(n.scale(.5));break;case t.PAN:var r=this.transform.matrix.upVector,a=this.transform.matrix.leftVector;i?(r.scale(-5e-4*n.x*this._viewWidth),a.scale(-5e-4*n.y*this._viewWidth)):(r.scale(-.001*n.x*this._distance),a.scale(-.001*n.y*this._distance)),this._center.add(r).add(a);break;case t.ZOOM:this._distance+=.01*n.x*this._distance,this._viewWidth+=.01*n.x*this._viewWidth,this._viewWidth<.5&&(this._viewWidth=.5)}}},mouseWheel:function(t){if(this.enabled){var e=this._distance>.01?this._distance:.01,n=this._viewWidth>1?this._viewWidth:1;this._distance+=.001*t.delta*e*this._wheelSpeed,this._viewWidth+=1e-4*t.delta*n*this._wheelSpeed,this._viewWidth<.5&&(this._viewWidth=.5)}},touchStart:function(t){this.enabled&&(this._lastTouch=t.touches)},touchMove:function(t){if(this._lastTouch.length==t.touches.length&&this.transform&&this.enabled)if(1==this._lastTouch.length){var e=this._lastTouch[0],n=t.touches[0],i=new bg.Vector2(-1*(e.y-n.y),e.x-n.x);this._rotation.add(i.scale(.5))}else if(2==this._lastTouch.length){var r=this._lastTouch[0],a=this._lastTouch[1],s=null,o=null;t.touches.forEach(function(t){t.identifier==r.identifier?s=t:t.identifier==a.identifier&&(o=t)});var u=Math.round(new bg.Vector2(r.x,r.y).sub(new bg.Vector3(a.x,a.y)).magnitude()),h=Math.round(new bg.Vector2(s.x,s.y).sub(new bg.Vector3(o.x,o.y)).magnitude()),l=new bg.Vector2(r.y-s.y,a.x-o.x),c=this.transform.matrix.upVector,f=this.transform.matrix.leftVector;c.scale(-.001*l.x*this._distance),f.scale(-.001*l.y*this._distance),this._center.add(c).add(f),this._distance+=.005*(u-h)*this._distance}this._lastTouch=t.touches},keyDown:function(t){this.enabled&&(this._keys[t.key]=!0,bg.app.MainLoop.singleton.windowController.postRedisplay())},keyUp:function(t){this.enabled&&(this._keys[t.key]=!1)}},{DisableAll:function(t){var e=t.component("bg.manipulation.OrbitCameraController");e&&(e.enabled=!1),t.children.forEach(function(t){return i.DisableAll(t)})},SetUniqueEnabled:function(t,e){i.DisableAll(e),t.enabled=!0}},n)}(bg.scene.Component),i=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{},{},t)}(bg.scene.Component),r=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{},{},t)}(bg.scene.Component);bg.scene.registerComponent(bg.manipulation,n,"bg.manipulation.OrbitCameraController"),bg.scene.registerComponent(bg.manipulation,i,"bg.manipulation.FPSCameraController"),bg.scene.registerComponent(bg.manipulation,r,"bg.manipulation.TargetCameraController")}(),bg.tools={},function(){var t=function(){return $traceurRuntime.createClass(function(t,e){this._min=new bg.Vector3(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._max=new bg.Vector3(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),this._center=null,this._size=null,this._halfSize=null,this._vertexArray=[],e=e||bg.Matrix4.Identity(),t instanceof bg.scene.Drawable?this.addDrawable(t,e):t instanceof bg.base.PolyList&&this.addPolyList(t,e)},{clear:function(){this._min=bg.Vector3(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),this._max=bg.Vector3(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),this._center=this._size=this._halfSize=null},get min(){return this._min},get max(){return this._max},get center(){if(!this._center){this.halfSize;this._center=bg.Vector3.Add(this.halfSize,this._min)}return this._center},get size(){return this._size||(this._size=bg.Vector3.Sub(this.max,this.min)),this._size},get halfSize(){return this._halfSize||(this._halfSize=new bg.Vector3(this.size),this._halfSize.scale(.5)),this._halfSize},addPolyList:function(t,e){this._center=this._size=this._halfSize=null;for(var n=0;n<t.vertex.length;n+=3){var i=e.multVector(new bg.Vector3(t.vertex[n],t.vertex[n+1],t.vertex[n+2]));i.x<this._min.x&&(this._min.x=i.x),i.y<this._min.y&&(this._min.y=i.y),i.z<this._min.z&&(this._min.z=i.z),i.x>this._max.x&&(this._max.x=i.x),i.z>this._max.z&&(this._max.z=i.z),i.y>this._max.y&&(this._max.y=i.y)}},addDrawable:function(t,e){var n=this;t.forEach(function(t,i,r){if(t.visible){var a=new bg.Matrix4(e);r&&a.mult(r),n.addPolyList(t,a)}})}},{})}();bg.tools.BoundingBox=t}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e,n,i,r){$traceurRuntime.superConstructor(t).call(this,e),this._canvas=function(t,e){var n=document.createElement("canvas");return n.width=t,n.height=e,n.style.width=t+"px",n.style.height=e+"px",n}(n,i),this._drawCallback=r,this._drawCallback(this._canvas.getContext("2d",{preserverDrawingBuffer:!0}),this._canvas.width,this._canvas.height),this._texture=bg.base.Texture.FromCanvas(e,this._canvas)},{get width(){return this._canvas.width},get height(){return this._canvas.height},get canvas(){return this._canvas},get texture(){return this._texture},resize:function(t,e){!function(t,e,n){t.width=e,t.height=n,t.style.width=e+"px",t.style.height=n+"px"}(this._canvas,t,e),this.update()},update:function(){this._drawCallback(this._canvas.getContext("2d",{preserverDrawingBuffer:!0}),this.width,this.height),bg.base.Texture.UpdateCanvasImage(this._texture,this._canvas)}},{},t)}(bg.app.ContextObject);bg.tools.CanvasTexture=t}(),function(){function t(t,e,n,i,r){var a=r/2;i[e.uv0.x]=t.left+r,i[e.uv0.y]=t.top+a,i[e.uv1.x]=t.right-a,i[e.uv1.y]=t.top+a,i[e.uv2.x]=t.right-a,i[e.uv2.y]=t.bottom-r,n&&(i[n.uv0.x]=t.right-r,i[n.uv0.y]=t.bottom-a,i[n.uv1.x]=t.left+a,i[n.uv1.y]=t.bottom-a,i[n.uv2.x]=t.left+a,i[n.uv2.y]=t.top+r)}function e(e,n){var i=function(t){var e=0;t.forEach(function(t){var n=t.index.length/3;n%2!=0&&n++,e+=n});for(var n=e/2,i=n,r=Math.round(Math.sqrt(n));i%r;)r--;return{rows:i=r,cols:r=n/r,triangleCount:e,quadSize:{width:1/r,height:1/i},currentRow:0,currentCol:0,nextRect:function(){var t={left:this.quadSize.width*this.currentCol,top:this.quadSize.height*this.currentRow,right:this.quadSize.width*this.currentCol+this.quadSize.width,bottom:this.quadSize.height*this.currentRow+this.quadSize.height};return this.currentCol<this.cols?this.currentCol++:(this.currentCol=0,this.currentRow++),this.currentRow>=this.rows&&(this.currentRow=0),t}}}(e);i.currentRow=0,i.currentCol=0,e.forEach(function(e){if(!(e.texCoord1.length>0)){for(var r=[],a=[],s=0;s<e.index.length;s+=3){var o=e.index[s],u=e.index[s+1],h=e.index[s+2];r.push({indices:[o,u,h],uv0:{x:2*o,y:2*o+1},uv1:{x:2*u,y:2*u+1},uv2:{x:2*h,y:2*h+1}})}for(var l=0;l<r.length;l+=2){var c=r[l],f=l+1<r.length?r[l+1]:null;t(i.nextRect(),c,f,a,n)}e.texCoord1=a,e.build()}})}bg.tools=bg.tools||{},bg.tools.UVMap={atlas:function(n){var i=void 0!==arguments[1]?arguments[1]:0,r=void 0!==arguments[2]?arguments[2]:0;return n instanceof bg.scene.Drawable?e(n,i):function(e,n){for(var i=void 0!==arguments[2]?arguments[2]:0,r=[],a=[],s=0;s<n.length;s+=3){var o=n[s],u=n[s+1],h=n[s+2];r.push({indices:[o,u,h],uv0:{x:2*o,y:2*o+1},uv1:{x:2*u,y:2*u+1},uv2:{x:2*h,y:2*h+1}})}for(var l=r.length/2+r.length%2,c=l,f=Math.round(Math.sqrt(l));c%f;)f--;c=f;for(var v=0,g=1/(f=l/f),m=1/c,d=0;d<c;++d)for(var p=0;p<f;++p)t({left:g*p,top:m*d,right:g*p+g,bottom:m*d+m},r[v],v+1<r.length?r[v+1]:null,a,i),v+=2;return a}(n,i,r)}}}(),function(){bg.tools=bg.tools||{};var t=function(){return $traceurRuntime.createClass(function(){},{mergeMaps:function(t,e,n,i,r){throw new Error("TextureMergerImpl.mergeMaps(): not implemented")},destroy:function(t){throw new Error("TextureMergerImpl.destroy(): not implemented")}},{})}();bg.tools.TextureMergerImpl=t;var e=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._mergerImpl=null},{mergeMaps:function(t,e,n,i){return this._mergerImpl=this._mergerImpl||bg.Engine.Get().createTextureMergerInstance(),t=t&&t.map?t:{map:bg.base.TextureCache.BlackTexture(this.context),channel:0},e=e&&e.map?e:{map:bg.base.TextureCache.BlackTexture(this.context),channel:0},n=n&&n.map?n:{map:bg.base.TextureCache.BlackTexture(this.context),channel:0},i=i&&i.map?i:{map:bg.base.TextureCache.BlackTexture(this.context),channel:0},this._mergerImpl.mergeMaps(this.context,t,e,n,i)},destroy:function(){this._mergerImpl.destroy(this.context)}},{},t)}(bg.app.ContextObject);bg.tools.TextureMerger=e}(),bg.render={},function(){var t=function(t){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:bg.base.OpacityLayer.ALL;$traceurRuntime.superConstructor(t).call(this,e),this._pipeline=new bg.base.Pipeline(e),this._pipeline.opacityLayer=n,this._matrixState=bg.base.MatrixState.Current(),this._drawVisitor=new bg.scene.DrawVisitor(this._pipeline,this._matrixState),this._settings={}},{get pipeline(){return this._pipeline},get opacityLayer(){return this._pipeline.opacityLayer},get drawVisitor(){return this._drawVisitor},get matrixState(){return this._matrixState},set settings(t){this._settings=t},get settings(){return this._settings},draw:function(t,e){}},{},t)}(bg.app.ContextObject);bg.render.RenderLayer=t}(),function(){bg.render.RenderPath={FORWARD:1,DEFERRED:2,PBR:3,PBR_DEFERRED:4},bg.render.RaytracerQuality={low:{maxSamples:20,rayIncrement:.05},mid:{maxSamples:50,rayIncrement:.025},high:{maxSamples:100,rayIncrement:.0125},extreme:{maxSamples:200,rayIncrement:.0062}},bg.render.ShadowType={HARD:bg.base.ShadowType.HARD,SOFT:bg.base.ShadowType.SOFT},bg.render.ShadowMapQuality={low:512,mid:1024,high:2048,extreme:4096};var t={debug:{enabled:!1},ambientOcclusion:{enabled:!0,sampleRadius:.4,kernelSize:16,blur:2,maxDistance:300,scale:1},raytracer:{enabled:!0,quality:bg.render.RaytracerQuality.mid,scale:.5},antialiasing:{enabled:!1},shadows:{quality:bg.render.ShadowMapQuality.mid,type:bg.render.ShadowType.SOFT},colorCorrection:{gamma:2,saturation:1,brightness:1,contrast:1}},e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n),this._frameVisitor=new bg.scene.FrameVisitor,this._settings=t,this._clearColor=bg.Color.Black()},{get isSupported(){return!1},create:function(){console.log("ERROR: Error creating renderer. The renderer class must implemente the create() method.")},get clearColor(){return this._clearColor},set clearColor(t){this._clearColor=t},frame:function(t,e){this._frameVisitor.delta=e,t.accept(this._frameVisitor)},display:function(t,e){this.draw(t,e)},get settings(){return this._settings}},{Create:function(t,e){var n=null;if(e==bg.render.RenderPath.DEFERRED&&(n=new bg.render.DeferredRenderer(t)),(e==bg.render.RenderPath.FORWARD||n&&!n.isSupported)&&(n=new bg.render.ForwardRenderer(t)),e==bg.render.RenderPath.PBR&&(n=new bg.render.PBRForwardRenderer(t)),e==bg.render.RenderPath.PBR_DEFERRED&&(bg.log("WARNING: PBR deferred renderer is not implemented. Using PBR forward renderer"),n=new bg.render.PBRForwardRenderer(t)),!n.isSupported)throw new Error("No suitable renderer found.");return n.create(),n}},e)}(bg.app.ContextObject);bg.render.Renderer=e}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:1;$traceurRuntime.superConstructor(t).call(this,e),this._size=n,this._shader=null,this._cube=null,this._pipeline=new bg.base.Pipeline(this.context)},{setShader:function(t,e){this._shader=t,this._setInputVarsCallback=e},get shader(){return this._shader||function(){var t=null;if((t=new bg.base.Shader(this.context)).addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n\n varying vec3 fsPosition;\n\n uniform mat4 inProjection;\n uniform mat4 inView;\n\n void main() {\n fsPosition = inPosition;\n gl_Position = inProjection * inView * vec4(inPosition,1.0);\n }\n "),t.addShaderSource(bg.base.ShaderType.FRAGMENT,"\n precision highp float;\n varying vec3 fsPosition;\n\n void main() {\n gl_FragColor = vec4(1.0,0.0,0.0,1.0);\n }\n "),status=t.link(),!t.status)throw new Error("Error generating default equirectangular cube shader");t.initVars(["inPosition"],["inProjection","inView"]),this.setShader(t,function(t,e,n){t.setMatrix4("inProjection",e),t.setMatrix4("inView",n)})}.apply(this),this._shader},get cube(){return this._cube||(this._cube=function(t){var e=new bg.base.PolyList(this.context),n=t/2;return e.vertex=[-n,-n,-n,-n,-n,n,-n,n,-n,-n,n,n,n,-n,-n,n,-n,n,n,n,-n,n,n,n],e.index=[1,5,7,7,3,1,0,2,6,6,4,0,0,1,3,3,2,0,5,4,6,6,7,5,3,7,6,6,2,3,5,1,0,0,4,5],e.build(),e}.apply(this,[this._size])),this._cube},get projectionMatrix(){return this._projection||(this._projection=bg.Matrix4.Perspective(60,1,.1,100)),this._projection},set projectionMatrix(t){this._projection=t},get viewMatrix(){return this._viewMatrix||(this._viewMatrix=bg.Matrix4.Identity()),this._viewMatrix},set viewMatrix(t){this._viewMatrix=t},get pipeline(){return this._pipeline},create:function(){},destroy:function(){this.shader.destroy(),this.cube.destroy(),this._shader=null,this._cube=null},render:function(){var t=void 0!==arguments[0]&&arguments[0],e=bg.base.Pipeline.Current();t||(bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.clearBuffers()),this.shader.setActive(),this.shader.setInputBuffer("position",this.cube.vertexBuffer,3),this._setInputVarsCallback(this.shader,this.projectionMatrix,this.viewMatrix),this.cube.draw(),this.shader.disableInputBuffer("position"),this.shader.clearActive(),t||bg.base.Pipeline.SetCurrent(e)}},{},t)}(bg.app.ContextObject);bg.render.CubeRenderer=t;var e=function(t){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:1;$traceurRuntime.superConstructor(t).call(this,e,n),this._texture=null},{get texture(){return this._texture},set texture(t){this._texture=t},create:function(){var t=this;this.pipeline.buffersToClear=0,this.pipeline.cullFace=!1;var e=this.context,n=new bg.base.Shader(e);if(n.addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n\n varying vec3 fsPosition;\n\n uniform mat4 inProjection;\n uniform mat4 inView;\n\n void main() {\n fsPosition = inPosition;\n gl_Position = inProjection * inView * vec4(inPosition,1.0);\n }\n "),n.addShaderSource(bg.base.ShaderType.FRAGMENT,"\n precision highp float;\n varying vec3 fsPosition;\n \n uniform sampler2D inEquirectangularMap;\n\n const vec2 invAtan = vec2(0.1591,0.3183);\n vec2 sampleSphericalMap(vec3 v) {\n vec2 uv = vec2(atan(v.z,v.x),asin(v.y));\n uv *= invAtan;\n uv += 0.5;\n return uv;\n }\n\n void main() {\n vec2 uv = sampleSphericalMap(normalize(fsPosition));\n vec3 color = texture2D(inEquirectangularMap,uv).rgb;\n gl_FragColor = vec4(color,1.0);\n }\n "),!n.link())throw new Error("Error generating equirectangular cube renderer: shader compile error");n.initVars(["inPosition"],["inProjection","inView","inEquirectangularMap"]),this.setShader(n,function(e,n,i){e.setMatrix4("inProjection",n),e.setMatrix4("inView",i),t.texture&&e.setTexture("inEquirectangularMap",t.texture,bg.base.TextureUnit.TEXTURE_0)})}},{},t)}(t);bg.render.EquirectangularCubeRenderer=e,bg.render.CubeMapShader={IRRADIANCE_MAP:0,SPECULAR_MAP:1};var n=function(t){return $traceurRuntime.createClass(function t(e){var n=void 0!==arguments[1]?arguments[1]:1;$traceurRuntime.superConstructor(t).call(this,e,n),this._texture=null},{get texture(){return this._texture},set texture(t){this._texture=t},set roughness(t){this._roughness=t},get roughness(){return this._roughness||0},create:function(){var t=void 0!==arguments[0]?arguments[0]:bg.render.CubeMapShader.IRRADIANCE_MAP;switch(this.pipeline.buffersToClear=0,this.pipeline.cullFace=!1,t){case bg.render.CubeMapShader.IRRADIANCE_MAP:(function(){var t=this,e=this.context,n=new bg.base.Shader(e),i="\n precision highp float;\n varying vec3 fsPosition;\n \n uniform samplerCube inCubeMap;\n\n void main() {\n vec3 normal = normalize(fsPosition);\n vec3 irradiance = vec3(0.0);\n\n vec3 up = vec3(0.0, 1.0, 0.0);\n vec3 right = cross(up, normal);\n up = cross(normal, right);\n \n float nrSamples = 0.0; \n for(float phi = 0.0; phi < "+2*Math.PI+"; phi += 0.07)\n {\n for(float theta = 0.0; theta < "+.5*Math.PI+"; theta += 0.07)\n {\n // spherical to cartesian (in tangent space)\n vec3 tangentSample = vec3(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta));\n // tangent space to world\n vec3 sampleVec = tangentSample.x * right + tangentSample.y * up + tangentSample.z * normal; \n \n irradiance += textureCube(inCubeMap, sampleVec).rgb * cos(theta) * sin(theta);\n nrSamples++;\n }\n }\n irradiance = "+Math.PI+" * irradiance * (1.0 / float(nrSamples));\n\n gl_FragColor = vec4(irradiance,1.0);\n }\n ";if(n.addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n\n varying vec3 fsPosition;\n\n uniform mat4 inProjection;\n uniform mat4 inView;\n\n void main() {\n fsPosition = inPosition;\n gl_Position = inProjection * inView * vec4(inPosition,1.0);\n }\n "),n.addShaderSource(bg.base.ShaderType.FRAGMENT,i),!n.link())throw new Error("Error generating irradiance map cube renderer: shader compile error");n.initVars(["inPosition"],["inProjection","inView","inCubeMap"]),this.setShader(n,function(e,n,i){e.setMatrix4("inProjection",n),e.setMatrix4("inView",i),t.texture&&e.setTexture("inCubeMap",t.texture,bg.base.TextureUnit.TEXTURE_0)})}).apply(this);break;case bg.render.CubeMapShader.SPECULAR_MAP:(function(){var t=this,e=this.context,n=new bg.base.Shader(e),i="\n precision highp float;\n varying vec3 fsPosition;\n \n uniform samplerCube inCubeMap;\n uniform float inRoughness;\n\n float vanDerCorpus(int n, int base) {\n float invBase = 1.0 / float(base);\n float denom = 1.0;\n float result = 0.0;\n\n for(int i = 0; i < 16; ++i)\n {\n if(n > 0)\n {\n denom = mod(float(n), 2.0);\n result += denom * invBase;\n invBase = invBase / 2.0;\n n = int(float(n) / 2.0);\n }\n }\n\n return result;\n }\n\n vec2 hammersleyNoBitOps(int i, int N) {\n return vec2(float(i)/float(N), vanDerCorpus(i, 2));\n }\n\n vec3 importanceSampleGGX(vec2 Xi, vec3 N, float roughness) {\n float a = roughness*roughness;\n \n float phi = 2.0 * "+Math.PI+" * Xi.x;\n float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a*a - 1.0) * Xi.y));\n float sinTheta = sqrt(1.0 - cosTheta*cosTheta);\n \n // from spherical coordinates to cartesian coordinates\n vec3 H;\n H.x = sin(phi) * sinTheta;\n H.y = cos(phi) * sinTheta;\n H.z = cosTheta;\n \n // from tangent-space vector to world-space sample vector\n vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\n vec3 tangent = normalize(cross(up, N));\n vec3 bitangent = cross(N, tangent);\n \n vec3 sampleVec = tangent * H.x + bitangent * H.y + N * H.z;\n return normalize(sampleVec);\n } \n\n void main() {\n vec3 N = normalize(fsPosition); \n vec3 R = N;\n vec3 V = R;\n\n float totalWeight = 0.0; \n vec3 prefilteredColor = vec3(0.0); \n for(int i = 0; i < 128; ++i)\n {\n vec2 Xi = hammersleyNoBitOps(i, 128);\n vec3 H = importanceSampleGGX(Xi, N, inRoughness);\n vec3 L = normalize(2.0 * dot(V, H) * H - V);\n\n float NdotL = max(dot(N, L), 0.0);\n if(NdotL > 0.0)\n {\n prefilteredColor += textureCube(inCubeMap, L).rgb * NdotL;\n totalWeight += NdotL;\n }\n }\n prefilteredColor = prefilteredColor / totalWeight;\n\n gl_FragColor = vec4(prefilteredColor, 1.0);\n }\n ";if(n.addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n\n varying vec3 fsPosition;\n\n uniform mat4 inProjection;\n uniform mat4 inView;\n\n void main() {\n fsPosition = inPosition;\n gl_Position = inProjection * inView * vec4(inPosition,1.0);\n }\n "),n.addShaderSource(bg.base.ShaderType.FRAGMENT,i),!n.link())throw new Error("Error generating specular map cube renderer: shader compile error");n.initVars(["inPosition"],["inProjection","inView","inCubeMap","inRoughness"]),this.setShader(n,function(e,n,i){e.setMatrix4("inProjection",n),e.setMatrix4("inView",i),e.setValueFloat("inRoughness",t.roughness),t.texture&&e.setTexture("inCubeMap",t.texture,bg.base.TextureUnit.TEXTURE_0)})}).apply(this)}}},{},t)}(t);bg.render.CubeMapRenderer=n}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._ssrtScale=.5,this._frameScale=1},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter([{name:"inLighting",dataType:"sampler2D",role:"value"},{name:"inDiffuse",dataType:"sampler2D",role:"value"},{name:"inPositionMap",dataType:"sampler2D",role:"value"},{name:"inSSAO",dataType:"sampler2D",role:"value"},{name:"inReflection",dataType:"sampler2D",role:"value"},{name:"inSpecularMap",dataType:"sampler2D",role:"value"},{name:"inMaterial",dataType:"sampler2D",role:"value"},{name:"inOpaqueDepthMap",dataType:"sampler2D",role:"value"},{name:"inShininessColor",dataType:"sampler2D",role:"value"},{name:"inViewSize",dataType:"vec2",role:"value"},{name:"inSSAOBlur",dataType:"int",role:"value"},{name:"inSSRTScale",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&(this._fragmentShaderSource.addFunction(t().functions.blur.textureDownsample),this._fragmentShaderSource.addFunction(t().functions.blur.blur),this._fragmentShaderSource.addFunction(t().functions.blur.glowBlur),this._fragmentShaderSource.setMainBody("\n\t\t\t\t\tvec4 lighting = clamp(texture2D(inLighting,fsTexCoord),vec4(0.0),vec4(1.0));\n\t\t\t\t\tvec4 diffuse = texture2D(inDiffuse,fsTexCoord);\n\t\t\t\t\tvec4 pos = texture2D(inPositionMap,fsTexCoord);\n\t\t\t\t\tvec4 shin = texture2D(inShininessColor,fsTexCoord);\n\t\t\t\t\tvec4 ssao = blur(inSSAO,fsTexCoord,inSSAOBlur * 20,inViewSize);\n\t\t\t\t\tvec4 material = texture2D(inMaterial,fsTexCoord);\n\n\t\t\t\t\tvec4 specular = texture2D(inSpecularMap,fsTexCoord);\t// The roughness parameter is stored on A component, inside specular map\n\t\t\t\t\t\n\t\t\t\t\tvec4 opaqueDepth = texture2D(inOpaqueDepthMap,fsTexCoord);\n\t\t\t\t\tif (pos.z<opaqueDepth.z && opaqueDepth.w<1.0) {\n\t\t\t\t\t\tdiscard;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfloat roughness = specular.a;\n\t\t\t\t\t\tfloat ssrtScale = inSSRTScale;\n\t\t\t\t\t\troughness *= 250.0 * ssrtScale;\n\t\t\t\t\t\tvec4 reflect = blur(inReflection,fsTexCoord,int(roughness),inViewSize * ssrtScale);\n\n\t\t\t\t\t\tfloat reflectionAmount = material.b;\n\t\t\t\t\t\tvec3 finalColor = lighting.rgb * (1.0 - reflectionAmount);\n\t\t\t\t\t\tfinalColor += reflect.rgb * reflectionAmount * diffuse.rgb + shin.rgb;\n\t\t\t\t\t\tfinalColor *= ssao.rgb;\n\t\t\t\t\t\tgl_FragColor = vec4(finalColor,diffuse.a);\n\t\t\t\t\t}"))),this._fragmentShaderSource},setupVars:function(){this.shader.setVector2("inViewSize",new bg.Vector2(this.viewport.width,this.viewport.height)),this.shader.setTexture("inLighting",this._surface.lightingMap,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inDiffuse",this._surface.diffuseMap,bg.base.TextureUnit.TEXTURE_1),this.shader.setTexture("inPositionMap",this._surface.positionMap,bg.base.TextureUnit.TEXTURE_2),this.shader.setTexture("inSSAO",this._surface.ssaoMap,bg.base.TextureUnit.TEXTURE_3),this.shader.setTexture("inReflection",this._surface.reflectionMap,bg.base.TextureUnit.TEXTURE_4),this.shader.setTexture("inMaterial",this._surface.materialMap,bg.base.TextureUnit.TEXTURE_5),this.shader.setTexture("inSpecularMap",this._surface.specularMap,bg.base.TextureUnit.TEXTURE_6),this.shader.setTexture("inOpaqueDepthMap",this._surface.opaqueDepthMap,bg.base.TextureUnit.TEXTURE_7),this.shader.setTexture("inShininessColor",this._surface.shininess,bg.base.TextureUnit.TEXTURE_8),this.shader.setValueInt("inSSAOBlur",this.ssaoBlur),this.shader.setValueFloat("inSSRTScale",this.ssrtScale*this.frameScale)},set viewport(t){this._viewport=t},get viewport(){return this._viewport},set clearColor(t){this._clearColor=t},get clearColor(){return this._clearColor},set ssaoBlur(t){this._ssaoBlur=t},get ssaoBlur(){return this._ssaoBlur},set ssrtScale(t){this._ssrtScale=t},get ssrtScale(){return this._ssrtScale},set frameScale(t){this._frameScale=t},get frameScale(){return this._frameScale},get colorCorrection(){return this._colorCorrection||(this._colorCorrection={hue:1,saturation:1,lightness:1,brightness:.5,contrast:.5}),this._colorCorrection}},{},e)}(bg.base.TextureEffect);bg.render.DeferredMixEffect=e}(),function(){bg.render.SurfaceType={UNDEFINED:0,OPAQUE:1,TRANSPARENT:2};var t=.5,e=1,n=function(n){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._type=bg.render.SurfaceType.UNDEFINED,this._gbufferUByteSurface=null,this._gbufferFloatSurface=null,this._lightingSurface=null,this._shadowSurface=null,this._ssaoSurface=null,this._mixSurface=null,this._ssrtSurface=null,this._opaqueSurfaces=null},{createOpaqueSurfaces:function(){this._type=bg.render.SurfaceType.OPAQUE,this.createCommon()},createTransparentSurfaces:function(t){this._type=bg.render.SurfaceType.TRANSPARENT,this._opaqueSurfaces=t,this.createCommon()},resize:function(n){var i=new bg.Vector2(n.width,n.height);this._gbufferUByteSurface.size=i,this._gbufferFloatSurface.size=i,this._lightingSurface.size=i,this._shadowSurface.size=i,this._ssaoSurface.size=new bg.Vector2(i.x*e,i.y*e),this._ssrtSurface.size=new bg.Vector2(i.x*t,i.y*t),this._mixSurface.size=i},get type(){return this._type},get gbufferUByteSurface(){return this._gbufferUByteSurface},get gbufferFloatSurface(){return this._gbufferFloatSurface},get lightingSurface(){return this._lightingSurface},get shadowSurface(){return this._shadowSurface},get ssaoSurface(){return this._ssaoSurface},get ssrtSurface(){return this._ssrtSurface},get mixSurface(){return this._mixSurface},get diffuse(){return this._gbufferUByteSurface.getTexture(0)},get specular(){return this._gbufferUByteSurface.getTexture(1)},get normal(){return this._gbufferUByteSurface.getTexture(2)},get material(){return this._gbufferUByteSurface.getTexture(3)},get position(){return this._gbufferFloatSurface.getTexture(0)},get lighting(){return this._lightingSurface.getTexture()},get shadow(){return this._shadowSurface.getTexture()},get ambientOcclusion(){return this._ssaoSurface.getTexture()},get reflection(){return this._ssrtSurface.getTexture()},get mix(){return this._mixSurface.getTexture()},get reflectionColor(){return this._type==bg.render.SurfaceType.OPAQUE?this.lighting:this._opaqueSurfaces.lighting},get reflectionDepth(){return this._type==bg.render.SurfaceType.OPAQUE?this.position:this._opaqueSurfaces.position},get mixDepthMap(){return this._type==bg.render.SurfaceType.OPAQUE?this.position:this._opaqueSurfaces.position},get shininess(){return this._lightingSurface.getTexture(1)},get bloom(){return this._lightingSurface.getTexture(2)},createCommon:function(){var t=this.context;this._gbufferUByteSurface=new bg.base.TextureSurface(t),this._gbufferUByteSurface.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._gbufferUByteSurface.resizeOnViewportChanged=!1,this._gbufferFloatSurface=new bg.base.TextureSurface(t),this._gbufferFloatSurface.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._gbufferFloatSurface.resizeOnViewportChanged=!1,this._lightingSurface=new bg.base.TextureSurface(t),this._lightingSurface.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._lightingSurface.resizeOnViewportChanged=!1,this._shadowSurface=new bg.base.TextureSurface(t),this._shadowSurface.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._shadowSurface.resizeOnViewportChanged=!1,this._ssaoSurface=new bg.base.TextureSurface(t),this._ssaoSurface.create(),this._ssaoSurface.resizeOnViewportChanged=!1,this._ssrtSurface=new bg.base.TextureSurface(t),this._ssrtSurface.create(),this._ssrtSurface.resizeOnViewportChanged=!1,this._mixSurface=new bg.base.TextureSurface(t),this._mixSurface.create(),this._mixSurface.resizeOnViewportChanged=!1}},{},n)}(bg.app.ContextObject);function i(t,e,n,i){var r=new bg.base.Pipeline(t);return r.renderSurface=n,void 0!==i?(r.opacityLayer=i,r.effect=e):r.textureEffect=e,r}function r(t){var e=t.context,n=t._surfaces,r=t._opacityLayer;t._gbufferUbyte=i(e,new bg.render.GBufferEffect(e),n.gbufferUByteSurface,r),t._gbufferFloat=i(e,new bg.render.PositionGBufferEffect(e),n.gbufferFloatSurface,r),t._shadow=i(e,new bg.render.ShadowEffect(e),n.shadowSurface,bg.base.OpacityLayer.ALL),t._lighting=i(e,new bg.render.LightingEffect(e),n.lightingSurface),t._ssao=i(e,new bg.render.SSAOEffect(e),n.ssaoSurface),t._ssao.clearColor=bg.Color.White(),t._ssrt=i(e,new bg.render.SSRTEffect(e),n.ssrtSurface);var a=t.matrixState;t.ubyteVisitor=new bg.scene.DrawVisitor(t._gbufferUbyte,a),t.floatVisitor=new bg.scene.DrawVisitor(t._gbufferFloat,a),t.shadowVisitor=new bg.scene.DrawVisitor(t._shadow,a),t._mix=i(e,new bg.render.DeferredMixEffect(e),n.mixSurface)}bg.render.DeferredRenderSurfaces=n;var a=function(n){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{createOpaque:function(){this._opacityLayer=bg.base.OpacityLayer.OPAQUE,this._surfaces=new bg.render.DeferredRenderSurfaces(this.context),this._surfaces.createOpaqueSurfaces(),r(this)},createTransparent:function(t){this._opacityLayer=bg.base.OpacityLayer.TRANSPARENT,this._surfaces=new bg.render.DeferredRenderSurfaces(this.context),this._surfaces.createTransparentSurfaces(t),r(this),this._gbufferUbyte.blend=!0,this._gbufferUbyte.setBlendMode=bg.base.BlendMode.NORMAL,this._gbufferUbyte.clearColor=bg.Color.Transparent(),this._lighting.clearColor=bg.Color.Black(),this.pipeline.clearColor=bg.Color.Transparent()},set shadowMap(t){this._shadowMap=t},get shadowMap(){return this._shadowMap},get pipeline(){return this._mix},get texture(){return this.maps.mix},draw:function(n,i,r){e=this.settings.ambientOcclusion.scale||1,t=this.settings.raytracer.scale||.5,this.matrixState.projectionMatrixStack.set(r.projection),this.matrixState.viewMatrixStack.set(r.viewMatrix),this.matrixState.modelMatrixStack.identity(),this.performDraw(n,i,r)},get maps(){return this._surfaces},resize:function(n){e=this.settings.ambientOcclusion.scale||1,t=this.settings.raytracer.scale||.5;var i=n.viewport;this.maps.resize(new bg.Size2D(i.width,i.height))},performDraw:function(n,i,r){var a=this,s=this._opacityLayer==bg.base.OpacityLayer.OPAQUE?n.opaqueQueue:n.transparentQueue,o=function(t,e){a.matrixState.modelMatrixStack.push(),a.matrixState.viewMatrixStack.push(),t.forEach(function(t){a.matrixState.modelMatrixStack.set(t.modelMatrix),a.matrixState.viewMatrixStack.set(t.viewMatrix),e.effect.material=t.material,e.draw(t.plist)}),a.matrixState.modelMatrixStack.pop(),a.matrixState.viewMatrixStack.pop()};bg.base.Pipeline.SetCurrent(this._gbufferUbyte),this._gbufferUbyte.viewport=r.viewport,this._gbufferUbyte.clearBuffers(),o(s,this._gbufferUbyte),bg.base.Pipeline.SetCurrent(this._gbufferFloat),this._gbufferFloat.viewport=r.viewport,this._gbufferFloat.clearBuffers(),o(s,this._gbufferFloat),this._lighting.viewport=r.viewport,this._lighting.clearcolor=bg.Color.White(),bg.base.Pipeline.SetCurrent(this._lighting),this._lighting.clearBuffers(bg.base.ClearBuffers.COLOR_DEPTH),this._lighting.blendMode=bg.base.BlendMode.ADD,this._lighting.blend=!0,this._shadow.viewport=r.viewport;var u=0;bg.scene.Light.GetActiveLights().forEach(function(t){t.light&&t.light.enabled&&t.node&&t.node.enabled&&(t.light.type==bg.base.LightType.DIRECTIONAL?(a._shadowMap.update(i,r,t.light,t.transform,bg.base.ShadowCascade.NEAR),bg.base.Pipeline.SetCurrent(a._shadow),a._shadow.viewport=r.viewport,a._shadow.clearBuffers(),a._shadow.effect.light=t.light,a._shadow.effect.shadowMap=a._shadowMap,i.accept(a.shadowVisitor)):t.light.type==bg.base.LightType.SPOT&&(a._shadowMap.shadowType=a.settings.shadows.type,a._shadowMap.update(i,r,t.light,t.transform),bg.base.Pipeline.SetCurrent(a._shadow),a._shadow.viewport=r.viewport,a._shadow.clearBuffers(),a._shadow.effect.light=t.light,a._shadow.effect.shadowMap=a._shadowMap,i.accept(a.shadowVisitor)),bg.base.Pipeline.SetCurrent(a._lighting),a._lighting.textureEffect.lightEmissionFactor=0==u?10:0,a._lighting.textureEffect.light=t.light,a._lighting.textureEffect.lightTransform=t.transform,a._lighting.textureEffect.shadowMap=a.maps.shadow,a._lighting.drawTexture(a.maps),++u)});var h=this.settings.ambientOcclusion.enabled,l=this.settings.raytracer.enabled,c=new bg.Viewport(r.viewport);if(this._ssao.textureEffect.enabled=h,this._ssao.textureEffect.settings.kernelSize=this.settings.ambientOcclusion.kernelSize,this._ssao.textureEffect.settings.sampleRadius=this.settings.ambientOcclusion.sampleRadius,this._ssao.textureEffect.settings.maxDistance=this.settings.ambientOcclusion.maxDistance,h&&(bg.base.Pipeline.SetCurrent(this._ssao),this._ssao.viewport=new bg.Viewport(c.x,c.y,c.width*e,c.height*e),this._ssao.clearBuffers(),this._ssao.textureEffect.viewport=r.viewport,this._ssao.textureEffect.projectionMatrix=r.projection,this._ssao.drawTexture(this.maps)),bg.base.Pipeline.SetCurrent(this._ssrt),l){this._ssrt.viewport=new bg.Viewport(c.x,c.y,c.width*t,c.height*t),this._ssrt.clearBuffers(bg.base.ClearBuffers.DEPTH),this._ssrt.textureEffect.quality=this.settings.raytracer.quality;var f=r.node.component("bg.scene.Transform");if(f){var v=new bg.Matrix4(r.projection);v.mult(r.viewMatrix),this._ssrt.textureEffect.cameraPosition=v.multVector(f.matrix.position).xyz}this._ssrt.textureEffect.projectionMatrix=r.projection,this._ssrt.textureEffect.rayFailColor=this.settings.raytracer.clearColor||bg.Color.Black(),this._ssrt.textureEffect.basic=this.settings.raytracer.basicReflections||!1,this._ssrt.textureEffect.viewportSize=new bg.Vector2(this._ssrt.viewport.width,this._ssrt.viewport.height),this._ssrt.drawTexture(this.maps)}bg.base.Pipeline.SetCurrent(this.pipeline),this.pipeline.viewport=r.viewport,this.pipeline.clearBuffers(),this.pipeline.textureEffect.viewport=r.viewport,this.pipeline.textureEffect.ssaoBlur=h?this.settings.ambientOcclusion.blur:1,this.pipeline.textureEffect.ssrtScale=t*this.settings.renderScale,this.pipeline.drawTexture({lightingMap:this.maps.lighting,diffuseMap:this.maps.diffuse,positionMap:this.maps.position,ssaoMap:h?this.maps.ambientOcclusion:bg.base.TextureCache.WhiteTexture(this.context),reflectionMap:l?this.maps.reflection:this.maps.lighting,specularMap:this.maps.specular,materialMap:this.maps.material,opaqueDepthMap:this.maps.mixDepthMap,shininess:this.maps.shininess}),r.viewport=c}},{},n)}(bg.render.RenderLayer);bg.render.DeferredRenderLayer=a}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._size=new bg.Size2D(0)},{get isSupported(){return bg.base.RenderSurface.MaxColorAttachments()>5&&bg.base.RenderSurface.SupportFormat(bg.base.RenderSurfaceFormat.FLOAT)&&bg.base.RenderSurface.SupportType(bg.base.RenderSurfaceType.DEPTH)},get pipeline(){return this._pipeline},create:function(){var t=this.context;this._renderQueueVisitor=new bg.scene.RenderQueueVisitor,this._opaqueLayer=new bg.render.DeferredRenderLayer(t),this._opaqueLayer.settings=this.settings,this._opaqueLayer.createOpaque(),this._transparentLayer=new bg.render.DeferredRenderLayer(t),this._transparentLayer.settings=this.settings,this._transparentLayer.createTransparent(this._opaqueLayer.maps),this._shadowMap=new bg.base.ShadowMap(t),this._shadowMap.size=new bg.Vector2(2048),this._opaqueLayer.shadowMap=this._shadowMap,this._transparentLayer.shadowMap=this._shadowMap;var e=new bg.base.TextureSurface(t);e.create(),this._mixPipeline=new bg.base.Pipeline(t),this._mixPipeline.textureEffect=new bg.render.RendererMixEffect(t),this._mixPipeline.renderSurface=e,this._pipeline=new bg.base.Pipeline(t),this._pipeline.textureEffect=new bg.render.PostprocessEffect(t),this.settings.renderScale=this.settings.renderScale||1},draw:function(t,e){this._shadowMap.size.x!=this.settings.shadows.quality&&(this._shadowMap.size=new bg.Vector2(this.settings.shadows.quality));var n=e.viewport,i=this.settings.antialiasing||{},r=i.maxTextureSize||4096,a=n.aspectRatio,s=n.width,o=n.height;i.enabled?(s=2*n.width,o=2*n.height,a>1&&s>r?(s=r,o=r/a):o>r&&(o=r,s=r*a)):(s=n.width*this.settings.renderScale,o=n.height*this.settings.renderScale,a>1&&s>r?(s=r,o=r/a):o>r&&(o=r,s=r*a));var u=new bg.Viewport(0,0,s,o);e.viewport=u;this._opaqueLayer.clearColor=this.clearColor,this._size.width==e.viewport.width&&this._size.height==e.viewport.height||(this._opaqueLayer.resize(e),this._transparentLayer.resize(e)),this._renderQueueVisitor.modelMatrixStack.identity(),this._renderQueueVisitor.projectionMatrixStack.push(),this._renderQueueVisitor.projectionMatrixStack.set(e.projection),this._renderQueueVisitor.viewMatrixStack.set(e.viewMatrix),this._renderQueueVisitor.renderQueue.beginFrame(e.worldPosition),t.accept(this._renderQueueVisitor),this._renderQueueVisitor.renderQueue.sortTransparentObjects(),this._opaqueLayer.draw(this._renderQueueVisitor.renderQueue,t,e),this._transparentLayer.draw(this._renderQueueVisitor.renderQueue,t,e),this._renderQueueVisitor.projectionMatrixStack.pop(),bg.base.Pipeline.SetCurrent(this._mixPipeline),this._mixPipeline.viewport=e.viewport,this._mixPipeline.clearColor=bg.Color.Black(),this._mixPipeline.clearBuffers(),this._mixPipeline.drawTexture({opaque:this._opaqueLayer.texture,transparent:this._transparentLayer.texture,transparentNormal:this._transparentLayer.maps.normal,opaqueDepth:this._opaqueLayer.maps.position,transparentDepth:this._transparentLayer.maps.position}),bg.base.Pipeline.SetCurrent(this.pipeline),this.pipeline.viewport=n,this.pipeline.clearColor=this.clearColor,this.pipeline.clearBuffers(),this.pipeline.drawTexture({texture:this._mixPipeline.renderSurface.getTexture(0)}),e.viewport=n},getImage:function(t,e,n,i){var r=e.viewport;e.viewport=new bg.Viewport(0,0,n,i),this.draw(t,e);var a=document.createElement("canvas");a.width=n,a.height=i;for(var s=a.getContext("2d"),o=this.pipeline.renderSurface.readBuffer(new bg.Viewport(0,0,n,i)),u=s.createImageData(n,i),h=4*n,l=0;l<i;++l)for(var c=0;c<h;c+=4){var f=l*n*4,v=(i-l)*n*4;u.data[v+c+0]=o[f+c+0],u.data[v+c+1]=o[f+c+1],u.data[v+c+2]=o[f+c+2],u.data[v+c+3]=o[f+c+3]}s.putImageData(u,0,0);var g=a.toDataURL("image/jpeg");return e.viewport=r,this.viewport=r,this.draw(t,e),g}},{},t)}(bg.render.Renderer);bg.render.DeferredRenderer=t}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e,n){$traceurRuntime.superConstructor(t).call(this,e,n),this._pipeline.effect=new bg.base.ForwardEffect(e),this._pipeline.opacityLayer=n,this._lightComponent=null,this._lightComponents=[],n==bg.base.OpacityLayer.TRANSPARENT&&(this._pipeline.buffersToClear=bg.base.ClearBuffers.NONE,this._pipeline.blend=!0,this._pipeline.blendMode=bg.base.BlendMode.NORMAL)},{set lightComponent(t){this._lightComponent=t},get lightComponent(){return this._lightComponent},setLightSources:function(t){this._lightComponents=t},set shadowMap(t){this._shadowMap=t},get shadowMap(){return this._shadowMap},draw:function(t,e,n){var i=this,r=this._pipeline.opacityLayer==bg.base.OpacityLayer.OPAQUE?t.opaqueQueue:t.transparentQueue;this.matrixState.modelMatrixStack.push(),r.forEach(function(t){i.matrixState.modelMatrixStack.set(t.modelMatrix),i.matrixState.viewMatrixStack.set(t.viewMatrix)}),this.matrixState.modelMatrixStack.pop(),bg.base.Pipeline.SetCurrent(this._pipeline),this._pipeline.viewport=n.viewport,0!=n.clearBuffers&&this._pipeline.clearBuffers(),this.matrixState.projectionMatrixStack.set(n.projection),this.willDraw(e,n),this.performDraw(t,e,n)},willDraw:function(t,e){var n=this;this._lightComponent?(this._pipeline.effect.light=this._lightComponent.light,this._pipeline.effect.lightTransform=this._lightComponent.transform,this._pipeline.effect.shadowMap=this._shadowMap):this._lightComponents&&(this._pipeline.effect.lightArray.reset(),this._lightComponents.forEach(function(t){n._pipeline.effect.lightArray.push(t.light,t.transform)}),this._pipeline.effect.shadowMap=this._shadowMap)},performDraw:function(t,e,n){var i=this;this._pipeline.viewport=n.viewport;var r=this._pipeline.opacityLayer==bg.base.OpacityLayer.OPAQUE?t.opaqueQueue:t.transparentQueue;this.matrixState.modelMatrixStack.push(),r.forEach(function(t){i.matrixState.modelMatrixStack.set(t.modelMatrix),i.matrixState.viewMatrixStack.set(t.viewMatrix),i._pipeline.effect.material=t.material,i._pipeline.draw(t.plist)}),this.matrixState.modelMatrixStack.pop()}},{},t)}(bg.render.RenderLayer);bg.render.ForwardRenderLayer=t}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get isSupported(){return!0},create:function(){var t=this.context;this._transparentLayer=new bg.render.ForwardRenderLayer(t,bg.base.OpacityLayer.TRANSPARENT),this._opaqueLayer=new bg.render.ForwardRenderLayer(t,bg.base.OpacityLayer.OPAQUE),this._shadowMap=new bg.base.ShadowMap(t),this._shadowMap.size=new bg.Vector2(2048),this.settings.shadows.cascade=bg.base.ShadowCascade.NEAR,this._renderQueueVisitor=new bg.scene.RenderQueueVisitor},draw:function(t,e){var n=null,i=[],r=0;bg.scene.Light.GetActiveLights().some(function(t,e){return e>=bg.base.MAX_FORWARD_LIGHTS||(t.light&&t.light.enabled&&t.node&&t.node.enabled&&(r++,i.push(t),!n&&t.light.type!=bg.base.LightType.POINT&&t.light.castShadows&&(n=t)),r>=bg.base.MAX_FORWARD_LIGHTS)}),n&&(this._shadowMap.size.x!=this.settings.shadows.quality&&(this._shadowMap.size=new bg.Vector2(this.settings.shadows.quality)),this._shadowMap.update(t,e,n.light,n.transform,this.settings.shadows.cascade)),i.length?(this._opaqueLayer.setLightSources(i),this._opaqueLayer.shadowMap=this._shadowMap,this._transparentLayer.setLightSources(i),this._transparentLayer.shadowMap=this._shadowMap):(this._opaqueLayer.setLightSources([]),this._opaqueLayer.shadowMap=null,this._transparentLayer.setLightSources([]),this._transparentLayer.shadowMap=null),this._renderQueueVisitor.projectionMatrixStack.set(e.projection),this._renderQueueVisitor.modelMatrixStack.identity(),this._renderQueueVisitor.viewMatrixStack.set(e.viewMatrix),this._renderQueueVisitor.renderQueue.beginFrame(e.worldPosition),t.accept(this._renderQueueVisitor),this._renderQueueVisitor.renderQueue.sortTransparentObjects(),this._opaqueLayer.pipeline.clearColor=this.clearColor,this._opaqueLayer.draw(this._renderQueueVisitor.renderQueue,t,e),this._transparentLayer.draw(this._renderQueueVisitor.renderQueue,t,e)},getImage:function(t,e,n,i){var r=e.viewport;e.viewport=new bg.Viewport(0,0,n,i),this.draw(t,e),this.draw(t,e);var a=document.createElement("canvas");a.width=n,a.height=i;for(var s=a.getContext("2d"),o=this._opaqueLayer.pipeline.renderSurface.readBuffer(new bg.Viewport(0,0,n,i)),u=s.createImageData(n,i),h=4*n,l=0;l<i;++l)for(var c=0;c<h;c+=4){var f=l*n*4,v=(i-l)*n*4;u.data[v+c+0]=o[f+c+0],u.data[v+c+1]=o[f+c+1],u.data[v+c+2]=o[f+c+2],u.data[v+c+3]=o[f+c+3]}s.putImageData(u,0,0);var g=a.toDataURL("image/jpeg");return e.viewport=r,this._opaqueLayer.viewport=r,this._transparentLayer.viewport=r,g}},{},t)}(bg.render.Renderer);bg.render.ForwardRenderer=t}(),function(){var t=null,e=null,n=null,i=null;function r(){return bg.base.ShaderLibrary.Get()}var a={gbuffer_ubyte_vertex:function(){return t||((t=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([r().inputs.buffers.vertex,r().inputs.buffers.normal,r().inputs.buffers.tangent,r().inputs.buffers.tex0,r().inputs.buffers.tex1]),t.addParameter(r().inputs.matrix.all),t.addParameter([{name:"fsPosition",dataType:"vec3",role:"out"},{name:"fsTex0Coord",dataType:"vec2",role:"out"},{name:"fsTex1Coord",dataType:"vec2",role:"out"},{name:"fsNormal",dataType:"vec3",role:"out"},{name:"fsTangent",dataType:"vec3",role:"out"},{name:"fsBitangent",dataType:"vec3",role:"out"}]),"webgl1"==bg.Engine.Get().id&&t.setMainBody("\n\t\t\t\t\tvec4 viewPos = inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\tgl_Position = inProjectionMatrix * viewPos;\n\t\t\t\t\t\n\t\t\t\t\tfsNormal = normalize((inNormalMatrix * vec4(inNormal,1.0)).xyz);\n\t\t\t\t\tfsTangent = normalize((inNormalMatrix * vec4(inTangent,1.0)).xyz);\n\t\t\t\t\tfsBitangent = cross(fsNormal,fsTangent);\n\t\t\t\t\t\n\t\t\t\t\tfsTex0Coord = inTex0;\n\t\t\t\t\tfsTex1Coord = inTex1;\n\t\t\t\t\tfsPosition = viewPos.xyz;")),t},gbuffer_ubyte_fragment:function(){return e||((e=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).appendHeader("#extension GL_EXT_draw_buffers : require"),e.addParameter([{name:"fsPosition",dataType:"vec3",role:"in"},{name:"fsTex0Coord",dataType:"vec2",role:"in"},{name:"fsTex1Coord",dataType:"vec2",role:"in"},{name:"fsNormal",dataType:"vec3",role:"in"},{name:"fsTangent",dataType:"vec3",role:"in"},{name:"fsBitangent",dataType:"vec3",role:"int"}]),e.addParameter(r().inputs.material.all),e.addFunction(r().functions.materials.all),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n\t\t\t\t\t\tvec4 lightMap = samplerColor(inLightMap,fsTex1Coord,inLightMapOffset,inLightMapScale);\n\t\t\t\t\t\tvec4 diffuse = samplerColor(inTexture,fsTex0Coord,inTextureOffset,inTextureScale) * inDiffuseColor * lightMap;\n\t\t\t\t\t\tif (diffuse.a>=inAlphaCutoff) {\n\t\t\t\t\t\t\tvec3 normal = samplerNormal(inNormalMap,fsTex0Coord,inNormalMapOffset,inNormalMapScale);\n\t\t\t\t\t\t\tnormal = combineNormalWithMap(fsNormal,fsTangent,fsBitangent,normal);\n\t\t\t\t\t\t\tvec4 specular = specularColor(inSpecularColor,inShininessMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinShininessMaskChannel,inShininessMaskInvert);\n\t\t\t\t\t\t\tfloat lightEmission = applyTextureMask(inLightEmission,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinLightEmissionMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinLightEmissionMaskChannel,inLightEmissionMaskInvert);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat reflectionMask = applyTextureMask(inReflection,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinReflectionMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinReflectionMaskChannel,inReflectionMaskInvert);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat roughnessMask = applyTextureMask(inRoughness,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinRoughnessMask,fsTex0Coord,inTextureOffset,inTextureScale,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinRoughnessMaskChannel,inRoughnessMaskInvert);\n\n\t\t\t\t\t\t\tgl_FragData[0] = diffuse;\n\t\t\t\t\t\t\tgl_FragData[1] = vec4(specular.rgb,roughnessMask); // Store roughness on A component of specular\n\t\t\t\t\t\t\tif (!gl_FrontFacing) {\t// Flip the normal if back face\n\t\t\t\t\t\t\t\tnormal *= -1.0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tgl_FragData[2] = vec4(normal * 0.5 + 0.5, inUnlit ? 0.0 : 1.0);\t// Store !unlit parameter on A component of normal\n\t\t\t\t\t\t\tgl_FragData[3] = vec4(lightEmission,inShininess/255.0,reflectionMask,float(inCastShadows));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tgl_FragData[0] = vec4(0.0);\n\t\t\t\t\t\t\tgl_FragData[1] = vec4(0.0);\n\t\t\t\t\t\t\tgl_FragData[2] = vec4(0.0);\n\t\t\t\t\t\t\tgl_FragData[3] = vec4(0.0);\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t}")),e},gbuffer_float_vertex:function(){return n||((n=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([r().inputs.buffers.vertex,r().inputs.buffers.tex0,null,r().inputs.matrix.model,r().inputs.matrix.view,r().inputs.matrix.projection,null,{name:"fsPosition",dataType:"vec4",role:"out"},{name:"fsTex0Coord",dataType:"vec2",role:"out"}]),"webgl1"==bg.Engine.Get().id&&n.setMainBody("\n\t\t\t\t\tfsPosition = inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\tfsTex0Coord = inTex0;\n\t\t\t\t\t\n\t\t\t\t\tgl_Position = inProjectionMatrix * fsPosition;")),n},gbuffer_float_fragment:function(){return i||((i=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT)).addParameter([r().inputs.material.texture,r().inputs.material.textureScale,r().inputs.material.textureOffset,r().inputs.material.alphaCutoff,null,{name:"fsPosition",dataType:"vec4",role:"in"},{name:"fsTex0Coord",dataType:"vec2",role:"in"}]),i.addFunction(r().functions.materials.samplerColor),"webgl1"==bg.Engine.Get().id&&i.setMainBody("\n\t\t\t\t\tfloat alpha = samplerColor(inTexture,fsTex0Coord,inTextureOffset,inTextureScale).a;\n\t\t\t\t\tif (alpha<inAlphaCutoff) {\n\t\t\t\t\t\tdiscard;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tgl_FragColor = vec4(fsPosition.xyz,gl_FragCoord.z);\n\t\t\t\t\t}\n\t\t\t\t\t")),i}},s=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e);var n=[a.gbuffer_ubyte_vertex(),a.gbuffer_ubyte_fragment()];this._material=null,this.setupShaderSource(n)},{get material(){return this._material},set material(t){this._material=t},setupVars:function(){if(this.material){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst),this.shader.setMatrix4("inNormalMatrix",t.normalMatrix),this.shader.setMatrix4("inViewMatrixInv",t.viewMatrixInvert);var n=this.material.texture||bg.base.TextureCache.WhiteTexture(this.context),i=this.material.lightmap||bg.base.TextureCache.WhiteTexture(this.context),r=this.material.normalMap||bg.base.TextureCache.NormalTexture(this.context);this.shader.setVector4("inDiffuseColor",this.material.diffuse),this.shader.setVector4("inSpecularColor",this.material.specular),this.shader.setValueFloat("inShininess",this.material.shininess),this.shader.setValueFloat("inLightEmission",this.material.lightEmission),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff),this.shader.setTexture("inTexture",n,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.textureScale),this.shader.setTexture("inLightMap",i,bg.base.TextureUnit.TEXTURE_1),this.shader.setVector2("inLightMapOffset",this.material.lightmapOffset),this.shader.setVector2("inLightMapScale",this.material.lightmapScale),this.shader.setTexture("inNormalMap",r,bg.base.TextureUnit.TEXTURE_2),this.shader.setVector2("inNormalMapScale",this.material.normalMapScale),this.shader.setVector2("inNormalMapOffset",this.material.normalMapOffset);var a=this.material.shininessMask||bg.base.TextureCache.WhiteTexture(this.context),s=this.material.lightEmissionMask||bg.base.TextureCache.WhiteTexture(this.context),o=this.material.reflectionMask||bg.base.TextureCache.WhiteTexture(this.context),u=this.material.roughnessMask||bg.base.TextureCache.WhiteTexture(this.context);this.shader.setTexture("inShininessMask",a,bg.base.TextureUnit.TEXTURE_3),this.shader.setVector4("inShininessMaskChannel",this.material.shininessMaskChannelVector),this.shader.setValueInt("inShininessMaskInvert",this.material.shininessMaskInvert),this.shader.setTexture("inLightEmissionMask",s,bg.base.TextureUnit.TEXTURE_4),this.shader.setVector4("inLightEmissionMaskChannel",this.material.lightEmissionMaskChannelVector),this.shader.setValueInt("inLightEmissionMaskInvert",this.material.lightEmissionMaskInvert),this.shader.setValueFloat("inReflection",this.material.reflectionAmount),this.shader.setTexture("inReflectionMask",o,bg.base.TextureUnit.TEXTURE_5),this.shader.setVector4("inReflectionMaskChannel",this.material.reflectionMaskChannelVector),this.shader.setValueInt("inReflectionMaskInvert",this.material.reflectionMaskInvert),this.shader.setValueFloat("inRoughness",this.material.roughness),this.shader.setTexture("inRoughnessMask",u,bg.base.TextureUnit.TEXTURE_6),this.shader.setVector4("inRoughnessMaskChannel",this.material.roughnessMaskChannelVector),this.shader.setValueInt("inRoughnessMaskInvert",this.material.roughnessMaskInvert),this.shader.setValueInt("inCastShadows",this.material.castShadows),this.shader.setValueInt("inUnlit",this.material.unlit)}}},{},t)}(bg.base.Effect),o=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e);var n=[a.gbuffer_float_vertex(),a.gbuffer_float_fragment()];this._material=null,this.setupShaderSource(n)},{get material(){return this._material},set material(t){this._material=t},setupVars:function(){if(this.material){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst);var n=this.material.texture||bg.base.TextureCache.WhiteTexture(this.context);this.shader.setTexture("inTexture",n,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.textureScale),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff)}}},{},t)}(bg.base.Effect);bg.render.PositionGBufferEffect=o,bg.render.GBufferEffect=s}(),function(){function t(t,e,n,i){bg.base.Pipeline.SetCurrent(t),t.viewport=i.viewport,t.clearBuffers(bg.base.ClearBuffers.COLOR|bg.base.ClearBuffers.DEPTH),n.accept(e)}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._pipelines={ubyte:new bg.base.Pipeline(e),float:new bg.base.Pipeline(e)};var n=new bg.base.TextureSurface(e);n.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.UNSIGNED_BYTE},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._pipelines.ubyte.effect=new bg.render.GBufferEffect(e),this._pipelines.ubyte.renderSurface=n;var i=new bg.base.TextureSurface(e);i.create([{type:bg.base.RenderSurfaceType.RGBA,format:bg.base.RenderSurfaceFormat.FLOAT},{type:bg.base.RenderSurfaceType.DEPTH,format:bg.base.RenderSurfaceFormat.RENDERBUFFER}]),this._pipelines.float.effect=new bg.render.PositionGBufferEffect(e),this._pipelines.float.renderSurface=i,this._ubyteDrawVisitor=new bg.scene.DrawVisitor(this._pipelines.ubyte,this._matrixState),this._floatDrawVisitor=new bg.scene.DrawVisitor(this._pipelines.float,this._matrixState)},{get diffuse(){return this._pipelines.ubyte.renderSurface.getTexture(0)},get specular(){return this._pipelines.ubyte.renderSurface.getTexture(1)},get normal(){return this._pipelines.ubyte.renderSurface.getTexture(2)},get material(){return this._pipelines.ubyte.renderSurface.getTexture(3)},get position(){return this._pipelines.float.renderSurface.getTexture(0)},get shadow(){return this._pipelines.ubyte.renderSurface.getTexture(4)},update:function(e,n){t(this._pipelines.ubyte,this._ubyteDrawVisitor,e,n),t(this._pipelines.float,this._floatDrawVisitor,e,n)}},{},e)}(bg.app.ContextObject);bg.render.GBufferSet=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.appendHeader("#extension GL_EXT_draw_buffers : require"),this._fragmentShaderSource.addParameter([{name:"inDiffuse",dataType:"sampler2D",role:"value"},{name:"inSpecular",dataType:"sampler2D",role:"value"},{name:"inNormal",dataType:"sampler2D",role:"value"},{name:"inMaterial",dataType:"sampler2D",role:"value"},{name:"inPosition",dataType:"sampler2D",role:"value"},{name:"inShadowMap",dataType:"sampler2D",role:"value"},{name:"inLightEmissionFactor",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),this._fragmentShaderSource.addParameter(t().inputs.lighting.all),this._fragmentShaderSource.addFunction(t().functions.utils.all),this._fragmentShaderSource.addFunction(t().functions.lighting.all),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\tvec4 diffuse = texture2D(inDiffuse,fsTexCoord);\n\t\t\t\t\tvec4 specular = vec4(texture2D(inSpecular,fsTexCoord).rgb,1.0);\n\t\t\t\t\tvec4 normalTex = texture2D(inNormal,fsTexCoord);\n\t\t\t\t\tvec3 normal = normalTex.xyz * 2.0 - 1.0;\n\t\t\t\t\tvec4 material = texture2D(inMaterial,fsTexCoord);\n\t\t\t\t\tvec4 position = texture2D(inPosition,fsTexCoord);\n\t\t\t\t\t\n\t\t\t\t\tvec4 shadowColor = texture2D(inShadowMap,fsTexCoord);\n\t\t\t\t\tfloat shininess = material.g * 255.0;\n\t\t\t\t\tfloat lightEmission = material.r;\n\t\t\t\t\tbool unlit = normalTex.a == 0.0;\n\t\t\t\t\tvec4 specularColor = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\tif (unlit) {\n\t\t\t\t\t\tgl_FragData[0] = vec4(diffuse.rgb * min(inLightEmissionFactor,1.0),1.0);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvec4 light = getLight(\n\t\t\t\t\t\t\tinLightType,\n\t\t\t\t\t\t\tinLightAmbient, inLightDiffuse, inLightSpecular,shininess,\n\t\t\t\t\t\t\tinLightPosition,inLightDirection,\n\t\t\t\t\t\t\tinLightAttenuation.x,inLightAttenuation.y,inLightAttenuation.z,\n\t\t\t\t\t\t\tinSpotCutoff,inSpotExponent,inLightCutoffDistance,\n\t\t\t\t\t\t\tposition.rgb,normal,\n\t\t\t\t\t\t\tdiffuse,specular,shadowColor,\n\t\t\t\t\t\t\tspecularColor\n\t\t\t\t\t\t);\n\t\t\t\t\t\tlight.rgb = light.rgb + (lightEmission * diffuse.rgb * inLightEmissionFactor);\n\t\t\t\t\t\tgl_FragData[0] = light;\n\t\t\t\t\t\tgl_FragData[1] = specularColor;\n\t\t\t\t\t\tgl_FragData[2] = vec4((light.rgb - vec3(1.0,1.0,1.0)) * 2.0,1.0);\n\t\t\t\t\t}\n\t\t\t\t\t")),this._fragmentShaderSource},setupVars:function(){if(this.shader.setTexture("inDiffuse",this._surface.diffuse,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inSpecular",this._surface.specular,bg.base.TextureUnit.TEXTURE_1),this.shader.setTexture("inNormal",this._surface.normal,bg.base.TextureUnit.TEXTURE_2),this.shader.setTexture("inMaterial",this._surface.material,bg.base.TextureUnit.TEXTURE_3),this.shader.setTexture("inPosition",this._surface.position,bg.base.TextureUnit.TEXTURE_4),this.shader.setTexture("inShadowMap",this._shadowMap,bg.base.TextureUnit.TEXTURE_5),this.light){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setVector4("inLightAmbient",this._light.ambient),this.shader.setVector4("inLightDiffuse",this._light.diffuse),this.shader.setVector4("inLightSpecular",this._light.specular),this.shader.setValueInt("inLightType",this._light.type),this.shader.setVector3("inLightAttenuation",this._light.attenuationVector),this.shader.setValueFloat("inLightEmissionFactor",this.lightEmissionFactor),this.shader.setValueFloat("inLightCutoffDistance",this._light.cutoffDistance);var n=e.mult(this._lightTransform).rotation.multVector(this._light.direction).xyz,i=e.position;this.shader.setVector3("inLightDirection",n),this.shader.setVector3("inLightPosition",i),this.shader.setValueFloat("inSpotCutoff",this._light.spotCutoff),this.shader.setValueFloat("inSpotExponent",this._light.spotExponent)}},get lightEmissionFactor(){return this._lightEmissionFactor},set lightEmissionFactor(t){this._lightEmissionFactor=t},get light(){return this._light},set light(t){this._light=t},get lightTransform(){return this._lightTransform},set lightTransform(t){this._lightTransform=t},get shadowMap(){return this._shadowMap},set shadowMap(t){this._shadowMap=t}},{},e)}(bg.base.TextureEffect);bg.render.LightingEffect=e}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=null,n=[],i=0;function r(e){if(!n[e-1]&&e>0){n[e-1]=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);var r=n[e-1];if(r.addParameter(t().inputs.pbr.material.all),r.addParameter(t().inputs.pbr.lightingForward.all),r.addParameter(t().inputs.pbr.shadows.all),r.addParameter(t().inputs.pbr.colorCorrection.all),r.addParameter([{name:"fsTex0Coord",dataType:"vec2",role:"in"},{name:"fsTex1Coord",dataType:"vec2",role:"in"},{name:"fsNormal",dataType:"vec3",role:"in"},{name:"fsTangent",dataType:"vec3",role:"in"},{name:"fsBitangent",dataType:"vec3",role:"in"},{name:"fsPosition",dataType:"vec3",role:"in"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"in"},{name:"fsTangentViewPos",dataType:"vec3",role:"in"},{name:"fsTangentFragPos",dataType:"vec3",role:"in"},{name:"inIrradianceMapIntensity",dataType:"float",role:"value"},{name:"inIrradianceMap",dataType:"samplerCube",role:"value"},{name:"inSpecularMap0",dataType:"samplerCube",role:"value"},{name:"inSpecularMap1",dataType:"samplerCube",role:"value"},{name:"inSpecularMap2",dataType:"samplerCube",role:"value"},{name:"inBRDF",dataType:"sampler2D",role:"value"},{name:"inViewMatrix",dataType:"mat4",role:"value"},{name:"inShadowLightDirection",dataType:"vec3",role:"value"},{name:"inShadowLightIndex",dataType:"int",role:"value"}]),r.addFunction(t().functions.pbr.material.all),r.addFunction(t().functions.pbr.utils.unpack),r.addFunction(t().functions.pbr.utils.pack),r.addFunction(t().functions.pbr.utils.random),r.addFunction(t().functions.pbr.utils.gammaCorrection),r.addFunction(t().functions.pbr.utils.inverseGammaCorrection),r.addFunction(t().functions.pbr.lighting.all),r.addFunction(t().functions.colorCorrection.all),"webgl1"==bg.Engine.Get().id){r.addFunction({returnType:"vec3",name:"fresnelSchlick",params:{cosTheta:"float",F0:"vec3"},body:"\n return max(F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0), 0.0);\n "}),r.addFunction({returnType:"vec3",name:"fresnelSchlickRoughness",params:{cosTheta:"float",F0:"vec3",roughness:"float"},body:"\n return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(1.0 - cosTheta, 5.0);\n "}),r.addFunction({returnType:"float",name:"distributionGGX",params:{N:"vec3",H:"vec3",roughness:"float"},body:"\n float a = roughness * roughness;\n float a2 = a * a;\n float NdotH = max(dot(N,H), 0.0);\n float NdotH2 = NdotH * NdotH;\n\n float num = a2;\n float denom = (NdotH2 * (a2 - 1.0) + 1.0);\n denom = "+Math.PI+" * denom * denom;\n\n return num / denom;\n "}),r.addFunction({returnType:"float",name:"geometrySchlickGGX",params:{NdotV:"float",roughness:"float"},body:"\n float r = (roughness + 1.0);\n float k = (r*r) / 8.0;\n return NdotV / NdotV * (1.0 - k) + k;\n "}),r.addFunction({returnType:"float",name:"geometrySmith",params:{N:"vec3",V:"vec3",L:"vec3",roughness:"float"},body:"\n float NdotV = dot(N, V);\n float NdotL = dot(N, L);\n float ggx2 = geometrySchlickGGX(NdotV, roughness);\n float ggx1 = geometrySchlickGGX(NdotL, roughness);\n\n return ggx1 * ggx2;\n "});var a="\n vec3 N = normalize(normal);\n vec3 V = normalize(camPos - worldPos);\n roughness = max(roughness,0.0001); // Prevent some artifacts\n\n vec3 F0 = vec3(0.04); \n F0 = mix(F0, albedo, metallic);\n\n // reflectance equation\n vec3 Lo = vec3(0.0);\n for(int i = 0; i < "+e+"; ++i) \n {\n // calculate per-light radiance\n vec3 L = vec3(0.0);\n vec3 H = vec3(0.0);\n\n float intensity = 1.0;\n if (inLightType[i]=="+bg.base.LightType.POINT+") {\n L = normalize(inLightPosition[i] - worldPos);\n H = normalize(V + L);\n }\n else if (inLightType[i]=="+bg.base.LightType.SPOT+") {\n float theta = dot(normalize(inLightPosition[i] - worldPos),normalize(-inLightDirection[i]));\n if (theta > inLightSpotCutoff[i]) {\n L = normalize(-inLightDirection[i]);\n H = normalize(V + L);\n float epsilon = inLightSpotCutoff[i] - inLightOuterSpotCutoff[i];\n intensity = 1.0 - clamp((theta - inLightOuterSpotCutoff[i]) / epsilon, 0.0, 1.0);\n }\n else {\n //Lo += inLightAmbient[i].rgb * albedo;\n if (i==inShadowLightIndex) {\n shadowColor = vec3(1.0);\n }\n else {\n shadowColor *= vec3(1.0/"+e+".0 );\n } \n \n continue;\n }\n }\n else if (inLightType[i]=="+bg.base.LightType.DIRECTIONAL+") {\n L = normalize(-inLightDirection[i]);\n H = normalize(V + L);\n }\n \n float distance = length(inLightPosition[i] - worldPos);\n float attenuation = 1.0 / distance * distance;\n vec3 radiance = inLightDiffuse[i].rgb * attenuation * inLightIntensity[i];\n \n // cook-torrance brdf\n float NDF = distributionGGX(N, H, roughness); \n float G = geometrySmith(N, V, L, roughness);\n\n vec3 F = fresnelSchlick(max(dot(H, V), 0.0), F0);\n \n vec3 kS = F;\n vec3 kD = vec3(1.0) - kS;\n kD *= 1.0 - metallic;\t \n \n vec3 numerator = NDF * G * F;\n float denominator = 4.0 * max(dot(N, V), 0.4) * max(dot(N, L), 0.4);\n vec3 specular = numerator / max(denominator, 0.0001) * pow(shadowColor,vec3(30.0)) * inLightIntensity[i];\n\n // add to outgoing radiance Lo\n float NdotL = max(dot(N, L), 0.0);\n vec3 color = (kD * albedo / "+Math.PI+" + specular) * radiance * NdotL * intensity;\n // vec3 ambient = inLightAmbient[i].rgb * albedo;\n // vec3 shadowAmbient = clamp(shadowColor,ambient,vec3(1.0));\n // color = min(color,shadowAmbient);\n Lo += clamp(color,0.0,1.0);\n } \n vec3 kS = fresnelSchlickRoughness(max(dot(N,V), 0.001), F0, roughness);\n\n vec3 kD = 1.0 - kS;\n kD *= 1.0 - metallic;\n\n vec3 R = reflect(worldPos - camPos, N);\n\n vec3 specMap0 = textureCube(inSpecularMap0,R).rgb;\n vec3 specMap1 = textureCube(inSpecularMap1,R).rgb;\n vec3 specMap2 = textureCube("+(i>8?"inSpecularMap2":"inSpecularMap1")+",R).rgb;\n\n vec3 prefilteredColor = vec3(0.0);\n if (roughness<"+(i>8?.333:.5)+") {\n prefilteredColor = mix(specMap0,specMap1,roughness/"+(i>8?.333:.5)+");\n }\n else {\n prefilteredColor = mix(specMap1,specMap2,(roughness - "+(i>8?.333:.5)+") / "+(i>8?.666:.5)+");\n }\n \n vec2 envBRDF = texture2D(inBRDF, vec2(min(max(dot(N,V), 0.0), 0.99), min(roughness,0.99))).rg;\n vec3 specular = prefilteredColor * (F0 * envBRDF.x + envBRDF.y) * shadowColor * fresnelColor;\n\n vec3 irradiance = textureCube(inIrradianceMap,N).rgb * inIrradianceMapIntensity;\n\t vec3 diffuse = (irradiance * 1.0/shadowColor) * (albedo * shadowColor) * shadowColor;\n\t vec3 irradianceAmbient = (kD * diffuse + specular); // TODO: * ao;\n \n return vec4(irradianceAmbient + Lo, 1.0);\n ";r.addFunction({returnType:"vec4",name:"irradiance",params:{normal:"vec3",fresnelColor:"vec3",camPos:"vec3",albedo:"vec3",worldPos:"vec3",metallic:"float",roughness:"float",shadowColor:"vec3",texCoord:"vec2"},body:a}),r.setMainBody("\n // Shader for "+e+" lights \n\n vec2 diffuseUV = inDiffuseUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 metallicUV = inMetallicUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 roughnessUV = inRoughnessUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 fresnelUV = inFresnelUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 heightUV = inHeightUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 aoUV = inAmbientOcclussionUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 lightEmissionUV = inLightEmissionUV==0 ? fsTex0Coord : fsTex1Coord;\n vec2 normalUV = inNormalUV==0 ? fsTex0Coord : fsTex1Coord;\n \n vec3 viewDir = -normalize(fsTangentFragPos - fsTangentViewPos);\n float height = samplerColor(inHeighMetallicRoughnessAO,heightUV,inHeightScale).x;\n vec2 texCoords = parallaxMapping(-height,diffuseUV, viewDir, inHeightIntensity, inHeightScale);\n\n metallicUV = parallaxMapping(-height,metallicUV,viewDir,inHeightIntensity,inHeightScale);\n roughnessUV = parallaxMapping(-height,roughnessUV,viewDir,inHeightIntensity,inHeightScale);\n normalUV = parallaxMapping(-height,normalUV,viewDir,inHeightIntensity,inHeightScale);\n\n vec4 hmrao = samplerColor(inHeighMetallicRoughnessAO,texCoords,inDiffuseScale);\n float metallic = samplerColor(inHeighMetallicRoughnessAO,metallicUV,inMetallicScale).y;\n float roughness = samplerColor(inHeighMetallicRoughnessAO,roughnessUV,inRoughnessScale).z;\n float ao = texture2D(inHeighMetallicRoughnessAO,aoUV).w;\n\n vec4 diffuseRaw = samplerColor(inDiffuse,texCoords,inDiffuseScale);\n vec4 diffuse = inverseGammaCorrection(diffuseRaw,inGammaCorrection);\n if (diffuse.a>inAlphaCutoff) {\n if (inUnlit==true) {\n gl_FragColor = diffuseRaw;\n }\n else {\n vec3 normalMap = samplerNormal(inNormalMap,normalUV,inNormalScale);\n vec3 frontFacingNormal = fsNormal;\n // There is a bug on Mac Intel GPUs that produces an invalid value of gl_FrontFacing\n //if (!gl_FrontFacing) {\n //frontFacingNormal *= -1.0;\n //}\n \n vec3 combinedNormal = combineNormalWithMap(frontFacingNormal,fsTangent,fsBitangent,normalMap); \n \n vec4 shadowColor = vec4(1.0);\n if (inReceiveShadows) {\n shadowColor = getShadowColor(fsVertexPosFromLight,inShadowMap,inShadowMapSize,inShadowType,inShadowStrength * (1.0 - metallic * 1.5),inShadowBias,inShadowColor);\n }\n \n vec4 lighting = irradiance(combinedNormal,inFresnel.rgb,vec3(0.0),diffuse.rgb,fsPosition,metallic,roughness,shadowColor.rgb,texCoords);\n \n vec4 result = vec4(lighting.rgb * ao, 1.0);\n \n result = gammaCorrection(result,inGammaCorrection);\n gl_FragColor = vec4((brightnessMatrix(inBrightness - 1.0) *\n contrastMatrix(inContrast) *\n saturationMatrix(inSaturation) *\n result).rgb, diffuse.a);\n }\n }\n else {\n discard;\n }\n ")}}return n[e-1]}var a=!1,s=null,o=function(o){function u(n){if($traceurRuntime.superConstructor(u).call(this,n),this._material=null,(i=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS))<8)throw new Error("Could not use PBR materials: not enought texture units available");this._light=null,this._lightTransform=bg.Matrix4.Identity(),this._lightArray=new bg.base.LightArray,this._shadowMap=null;for(var o=1;o<=bg.base.MAX_FORWARD_LIGHTS;++o)this.setupShaderSource([(e||((e=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX)).addParameter([t().inputs.buffers.vertex,t().inputs.buffers.normal,t().inputs.buffers.tangent,t().inputs.buffers.tex0,t().inputs.buffers.tex1]),e.addParameter(t().inputs.matrix.all),e.addParameter([{name:"inLightProjectionMatrix",dataType:"mat4",role:"value"},{name:"inLightViewMatrix",dataType:"mat4",role:"value"}]),e.addParameter([{name:"fsTex0Coord",dataType:"vec2",role:"out"},{name:"fsTex1Coord",dataType:"vec2",role:"out"},{name:"fsNormal",dataType:"vec3",role:"out"},{name:"fsTangent",dataType:"vec3",role:"out"},{name:"fsBitangent",dataType:"vec3",role:"out"},{name:"fsPosition",dataType:"vec3",role:"out"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"out"},{name:"fsTangentViewPos",dataType:"vec3",role:"out"},{name:"fsTangentFragPos",dataType:"vec3",role:"out"}]),"webgl1"==bg.Engine.Get().id&&e.setMainBody("\n mat4 ScaleMatrix = mat4(0.5, 0.0, 0.0, 0.0,\n 0.0, 0.5, 0.0, 0.0,\n 0.0, 0.0, 0.5, 0.0,\n 0.5, 0.5, 0.5, 1.0);\n\n vec4 viewPos = inViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n gl_Position = inProjectionMatrix * viewPos;\n\n fsNormal = normalize((inNormalMatrix * vec4(inNormal,1.0)).xyz);\n fsTangent = normalize((inNormalMatrix * vec4(inTangent,1.0)).xyz);\n fsBitangent = cross(fsNormal,fsTangent);\n\n fsVertexPosFromLight = ScaleMatrix * inLightProjectionMatrix * inLightViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\n fsTex0Coord = inTex0;\n fsTex1Coord = inTex1;\n fsPosition = viewPos.rgb;\n\n mat3 TBN = mat3(\n fsTangent.x, fsBitangent.x, fsNormal.x,\n fsTangent.y, fsBitangent.y, fsNormal.y,\n fsTangent.z, fsBitangent.z, fsNormal.z\n );\n fsTangentViewPos = TBN * vec3(0.0); // Using view space, the view position is at 0,0,0\n fsTangentFragPos = TBN * fsPosition;\n ")),e),r(o)]);a||(a=!0,s=bg.base.TextureCache.PrecomputedBRDFLookupTexture(n)),this._colorCorrection=this._colorCorrection||{gamma:2,saturation:1,brightness:1,contrast:1}}return $traceurRuntime.createClass(u,{get vertexSourceCode(){return e},get fragmentSourceCodes(){return n},get material(){return this._material},set material(t){this._material=t},get colorCorrection(){return this._colorCorrection},set colorCorrection(t){this._colorCorrection=t},get light(){return this._light},set light(t){this._light=t,this._lightArray.reset()},get lightTransform(){return this._lightTransform},set lightTransform(t){this._lightTransform=t,this._lightArray.reset()},get lightArray(){return this._lightArray},set shadowMap(t){this._shadowMap=t},get shadowMap(){return this._shadowMap},setActive:function(){var t;this._light&&(this.lightArray.reset(),this.lightArray.push(this.light,this.lightTransform)),(t=Math.min(this.lightArray.numLights,bg.base.MAX_FORWARD_LIGHTS))>0&&this.setCurrentShader(t-1),$traceurRuntime.superGet(this,u.prototype,"setActive").call(this)},beginDraw:function(){if(this.lightArray.numLights&&this.lightArray.numLights<bg.base.MAX_FORWARD_LIGHTS){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.lightArray.updatePositionAndDirection(e);var n=this.shadowMap?this.shadowMap.viewMatrix:this.lightArray.shadowLightTransform;this.shader.setMatrix4("inLightProjectionMatrix",this.shadowMap?this.shadowMap.projection:this.lightArray.shadowLight.projection);var i=this.shadowMap?this.shadowMap.shadowColor:bg.Color.Transparent(),r=bg.base.TextureCache.BlackTexture(this.context);this.shader.setMatrix4("inLightViewMatrix",n),this.shader.setValueInt("inShadowType",this._shadowMap?this._shadowMap.shadowType:0),this.shader.setTexture("inShadowMap",this._shadowMap?this._shadowMap.texture:r,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inShadowMapSize",this._shadowMap?this._shadowMap.size:new bg.Vector2(32,32)),this.shader.setValueFloat("inShadowStrength",this.lightArray.shadowLight.shadowStrength),this.shader.setVector4("inShadowColor",i),this.shader.setValueFloat("inShadowBias",this.lightArray.shadowLight.shadowBias),this.shader.setValueInt("inCastShadows",this.lightArray.shadowLight.castShadows),this.shader.setVector3("inShadowLightDirection",this.lightArray.shadowLightDirection),this.shader.setValueInt("inShadowLightIndex",this.lightArray.shadowLightIndex),this.shader.setValueIntPtr("inLightType",this.lightArray.type),this.shader.setVector4Ptr("inLightDiffuse",this.lightArray.diffuse),this.shader.setVector4Ptr("inLightSpecular",this.lightArray.specular),this.shader.setVector3Ptr("inLightPosition",this.lightArray.position),this.shader.setVector3Ptr("inLightDirection",this.lightArray.direction),this.shader.setValueFloatPtr("inLightIntensity",this.lightArray.intensity),this.shader.setValueFloatPtr("inLightSpotCutoff",this.lightArray.cosSpotCutoff),this.shader.setValueFloatPtr("inLightOuterSpotCutoff",this.lightArray.cosSpotExponent),this.shader.setValueFloat("inGammaCorrection",this.colorCorrection.gamma),this.shader.setValueFloat("inSaturation",this.colorCorrection.saturation),this.shader.setValueFloat("inBrightness",this.colorCorrection.brightness),this.shader.setValueFloat("inContrast",this.colorCorrection.contrast)}},setupVars:function(){var t=this.material;if(t instanceof bg.base.PBRMaterial||t.pbr?t.pbr&&(t.pbr.updateFromLegacyMaterial(this.context,t),t=t.pbr):(t.pbr=t.pbr||bg.base.PBRMaterial.ImportFromLegacyMaterial(this.context,t),t=t.pbr),t instanceof bg.base.PBRMaterial){var e=bg.base.MatrixState.Current(),n=new bg.Matrix4(e.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",e.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",n),this.shader.setMatrix4("inProjectionMatrix",e.projectionMatrixStack.matrixConst),this.shader.setMatrix4("inNormalMatrix",e.normalMatrix),this.shader.setMatrix4("inViewMatrixInv",e.viewMatrixInvert);var r=t.getShaderParameters(this.context);this.shader.setVector2("inDiffuseScale",r.diffuseScale),this.shader.setVector2("inMetallicScale",r.metallicScale),this.shader.setVector2("inRoughnessScale",r.roughnessScale),this.shader.setVector2("inFresnelScale",r.fresnelScale),this.shader.setVector2("inLightEmissionScale",r.lightEmissionScale),this.shader.setVector2("inHeightScale",r.heightScale),this.shader.setVector2("inNormalScale",r.normalScale),this.shader.setValueInt("inDiffuseUV",r.diffuseUV),this.shader.setValueInt("inMetallicUV",r.metallicUV),this.shader.setValueInt("inRoughnessUV",r.roughnessUV),this.shader.setValueInt("inFresnelUV",r.fresnelUV),this.shader.setValueInt("inLightEmissionUV",r.lightEmissionUV),this.shader.setValueInt("inAmbientOcclussionUV",r.ambientOcclussionUV),this.shader.setValueInt("inNormalUV",r.normalUV),this.shader.setValueInt("inHeightUV",r.heightUV),this.shader.setValueInt("inReceiveShadows",!0),this.shader.setValueInt("inUnlit",t.unlit),this.shader.setValueFloat("inHeightIntensity",t.heightIntensity),this.shader.setValueFloat("inAlphaCutoff",t.alphaCutoff);var a=bg.base.TextureUnit.TEXTURE_1;this.shader.setTexture("inDiffuse",r.diffuse.map,a++),this.shader.setTexture("inHeighMetallicRoughnessAO",r.heightMetallicRoughnessAO.map,a++),this.shader.setTexture("inNormalMap",r.normal.map,a++);var o=t.fresnel instanceof bg.Color?t.fresnel:bg.Color.White();this.shader.setVector4("inFresnel",o);var u=bg.base.TextureCache.BlackCubemap(this.context),h=u,l=u,c=u,f=u,v=bg.scene.Environment.Get(),g=1;v&&v.environment&&(h=v.environment.irradianceMapTexture||h,l=v.environment.specularMapTextureL0||l,c=v.environment.specularMapTextureL1||c,f=v.environment.specularMapTextureL2||f,g=v.environment.irradianceIntensity),this.shader.setValueFloat("inIrradianceMapIntensity",g),this.shader.setTexture("inIrradianceMap",h,a++),this.shader.setTexture("inSpecularMap0",l,a++),i>8?(this.shader.setTexture("inSpecularMap1",c,a++),this.shader.setTexture("inSpecularMap2",f,a++)):this.shader.setTexture("inSpecularMap1",c,a++),this.shader.setTexture("inBRDF",s,a++)}else console.warn("Using invalid material or no PBRMaterial on PBR renderer.")}},{},o)}(bg.base.Effect);bg.base.PBRForwardEffect=o}(),function(){var t=function(t){function e(t,n){$traceurRuntime.superConstructor(e).call(this,t,n),this._pipeline.effect=new bg.base.PBRForwardEffect(t)}return $traceurRuntime.createClass(e,{draw:function(t,n,i){$traceurRuntime.superGet(this,e.prototype,"draw").call(this,t,n,i)},willDraw:function(t,n){$traceurRuntime.superGet(this,e.prototype,"willDraw").call(this,t,n)},performDraw:function(t,n,i){$traceurRuntime.superGet(this,e.prototype,"performDraw").call(this,t,n,i)}},{},t)}(bg.render.ForwardRenderLayer);bg.render.PBRForwardRenderLayer=t}(),function(){var t=function(t){function e(t){$traceurRuntime.superConstructor(e).call(this,t)}return $traceurRuntime.createClass(e,{create:function(){var t=this.context;this._transparentLayer=new bg.render.PBRForwardRenderLayer(this.context,bg.base.OpacityLayer.TRANSPARENT),this._opaqueLayer=new bg.render.PBRForwardRenderLayer(this.context,bg.base.OpacityLayer.OPAQUE),this._shadowMap=new bg.base.ShadowMap(t),this._shadowMap.size=new bg.Vector2(2048),this.settings.shadows.cascade=bg.base.ShadowCascade.NEAR,this._renderQueueVisitor=new bg.scene.RenderQueueVisitor},display:function(t,n){this._opaqueLayer.pipeline.effect.colorCorrection=this._settings.colorCorrection,this._transparentLayer.pipeline.effect.colorCorrection=this._settings.colorCorrection;var i=!1,r=bg.scene.Environment.Get();r&&r.environment&&r.environment.update(n),r&&r.environment&&r.environment.showSkybox&&(i=!0,r.environment.renderSkybox(n)),this._opaqueLayer.pipeline.buffersToClear=i?bg.base.ClearBuffers.DEPTH:bg.base.ClearBuffers.COLOR_DEPTH,$traceurRuntime.superGet(this,e.prototype,"draw").call(this,t,n)}},{},t)}(bg.render.ForwardRenderer);bg.render.PBRForwardRenderer=t}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter([{name:"inTexture",dataType:"sampler2D",role:"value"},{name:"inFrameSize",dataType:"vec2",role:"value"},{name:"inBorderAntiAlias",dataType:"int",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&(this._fragmentShaderSource.addFunction(t().functions.utils.texOffset),this._fragmentShaderSource.addFunction(t().functions.utils.luminance),this._fragmentShaderSource.addFunction(t().functions.utils.borderDetection),this._fragmentShaderSource.addFunction(t().functions.blur.textureDownsample),this._fragmentShaderSource.addFunction(t().functions.blur.gaussianBlur),this._fragmentShaderSource.addFunction(t().functions.blur.antiAlias),this._fragmentShaderSource.setMainBody("\n\t\t\t\t\t\tvec4 result = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\t\tif (inBorderAntiAlias==1) {\n\t\t\t\t\t\t\tresult = antiAlias(inTexture,fsTexCoord,inFrameSize,0.1,3);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresult = texture2D(inTexture,fsTexCoord);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgl_FragColor = result;\n\t\t\t\t\t\t"))),this._fragmentShaderSource},setupVars:function(){this.shader.setTexture("inTexture",this._surface.texture,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inFrameSize",this._surface.texture.size),this.shader.setValueInt("inBorderAntiAlias",0)},get settings(){return this._settings||(this._currentKernelSize=0,this._settings={refractionAmount:.01}),this._settings}},{},e)}(bg.base.TextureEffect);bg.render.PostprocessEffect=e}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter([{name:"inOpaque",dataType:"sampler2D",role:"value"},{name:"inTransparent",dataType:"sampler2D",role:"value"},{name:"inTransparentNormal",dataType:"sampler2D",role:"value"},{name:"inOpaqueDepth",dataType:"sampler2D",role:"value"},{name:"inTransparentDepth",dataType:"sampler2D",role:"value"},{name:"inRefractionAmount",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\t\tvec4 opaque = texture2D(inOpaque,fsTexCoord);\n\t\t\t\t\t\tvec4 transparent = texture2D(inTransparent,fsTexCoord);\n\t\t\t\t\t\tvec3 normal = texture2D(inTransparentNormal,fsTexCoord).rgb * 2.0 - 1.0;\n\t\t\t\t\t\tif (transparent.a>0.0) {\n\t\t\t\t\t\t\tfloat refractionFactor = inRefractionAmount / texture2D(inTransparentDepth,fsTexCoord).z;\n\t\t\t\t\t\t\tvec2 offset = fsTexCoord - normal.xy * refractionFactor;\n\t\t\t\t\t\t\tvec4 opaqueDepth = texture2D(inOpaqueDepth,offset);\n\t\t\t\t\t\t\tvec4 transparentDepth = texture2D(inTransparentDepth,offset);\n\t\t\t\t\t\t\t//if (opaqueDepth.w>transparentDepth.w) {\n\t\t\t\t\t\t\t\topaque = texture2D(inOpaque,offset);\n\t\t\t\t\t\t\t//}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvec3 color = opaque.rgb * (1.0 - transparent.a) + transparent.rgb * transparent.a;\n\t\t\t\t\t\tgl_FragColor = vec4(color, 1.0);\n\t\t\t\t\t\t")),this._fragmentShaderSource},setupVars:function(){this.shader.setTexture("inOpaque",this._surface.opaque,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inTransparent",this._surface.transparent,bg.base.TextureUnit.TEXTURE_1),this.shader.setTexture("inTransparentNormal",this._surface.transparentNormal,bg.base.TextureUnit.TEXTURE_2),this.shader.setTexture("inOpaqueDepth",this._surface.opaqueDepth,bg.base.TextureUnit.TEXTURE_3),this.shader.setTexture("inTransparentDepth",this._surface.transparentDepth,bg.base.TextureUnit.TEXTURE_4),this.shader.setValueFloat("inRefractionAmount",this.settings.refractionAmount)},get settings(){return this._settings||(this._currentKernelSize=0,this._settings={refractionAmount:-.05}),this._settings}},{},t)}(bg.base.TextureEffect);bg.render.RendererMixEffect=t}(),function(){function t(){return bg.base.ShaderLibrary.Get()}var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n);var i=new bg.base.ShaderSource(bg.base.ShaderType.VERTEX),r=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);i.addParameter([t().inputs.buffers.vertex,t().inputs.buffers.tex0,null,t().inputs.matrix.model,t().inputs.matrix.view,t().inputs.matrix.projection,{name:"inLightProjectionMatrix",dataType:"mat4",role:"value"},{name:"inLightViewMatrix",dataType:"mat4",role:"value"},null,{name:"fsTexCoord",dataType:"vec2",role:"out"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"out"}]),r.addParameter(t().inputs.shadows.all),r.addFunction(t().functions.utils.unpack),r.addFunction(t().functions.lighting.getShadowColor),r.addParameter([t().inputs.material.receiveShadows,t().inputs.material.texture,t().inputs.material.textureOffset,t().inputs.material.textureScale,t().inputs.material.alphaCutoff,null,{name:"fsTexCoord",dataType:"vec2",role:"in"},{name:"fsVertexPosFromLight",dataType:"vec4",role:"in"}]),r.addFunction(t().functions.materials.samplerColor),"webgl1"==bg.Engine.Get().id&&(i.setMainBody("\n\t\t\t\t\tmat4 ScaleMatrix = mat4(0.5, 0.0, 0.0, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.0, 0.5, 0.0, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.0, 0.0, 0.5, 0.0,\n\t\t\t\t\t\t\t\t\t\t\t0.5, 0.5, 0.5, 1.0);\n\t\t\t\t\t\n\t\t\t\t\tfsVertexPosFromLight = ScaleMatrix * inLightProjectionMatrix * inLightViewMatrix * inModelMatrix * vec4(inVertex,1.0);\n\t\t\t\t\tfsTexCoord = inTex0;\n\t\t\t\t\t\n\t\t\t\t\tgl_Position = inProjectionMatrix * inViewMatrix * inModelMatrix * vec4(inVertex,1.0);"),r.setMainBody("\n\t\t\t\t\tfloat alpha = samplerColor(inTexture,fsTexCoord,inTextureOffset,inTextureScale).a;\n\t\t\t\t\tif (alpha>inAlphaCutoff) {\n\t\t\t\t\t\tvec4 shadowColor = vec4(1.0, 1.0, 1.0, 1.0);\n\t\t\t\t\t\tif (inReceiveShadows) {\n\t\t\t\t\t\t\tshadowColor = getShadowColor(fsVertexPosFromLight,inShadowMap,inShadowMapSize,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t inShadowType,inShadowStrength,inShadowBias,inShadowColor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgl_FragColor = shadowColor;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tdiscard;\n\t\t\t\t\t}")),this.setupShaderSource([i,r])},{beginDraw:function(){if(this.light&&this.shadowMap){var t=bg.base.MatrixState.Current(),e=(new bg.Matrix4(t.viewMatrixStack.matrixConst),this.shadowMap.viewMatrix);this.shader.setMatrix4("inLightProjectionMatrix",this.shadowMap.projection),this.shader.setMatrix4("inLightViewMatrix",e),this.shader.setValueInt("inShadowType",this.shadowMap.shadowType),this.shader.setTexture("inShadowMap",this.shadowMap.texture,bg.base.TextureUnit.TEXTURE_1),this.shader.setVector2("inShadowMapSize",this.shadowMap.size),this.shader.setValueFloat("inShadowStrength",this.light.shadowStrength),this.shader.setVector4("inShadowColor",this.shadowMap.shadowColor),this.shader.setValueFloat("inShadowBias",this.light.shadowBias)}},setupVars:function(){if(this.material&&this.light){var t=bg.base.MatrixState.Current(),e=new bg.Matrix4(t.viewMatrixStack.matrixConst);this.shader.setMatrix4("inModelMatrix",t.modelMatrixStack.matrixConst),this.shader.setMatrix4("inViewMatrix",e),this.shader.setMatrix4("inProjectionMatrix",t.projectionMatrixStack.matrixConst);var n=this.material.texture||bg.base.TextureCache.WhiteTexture(this.context);this.shader.setTexture("inTexture",n,bg.base.TextureUnit.TEXTURE_0),this.shader.setVector2("inTextureOffset",this.material.textureOffset),this.shader.setVector2("inTextureScale",this.material.textureScale),this.shader.setValueFloat("inAlphaCutoff",this.material.alphaCutoff),this.shader.setValueInt("inReceiveShadows",this.material.receiveShadows)}},get material(){return this._material},set material(t){this._material=t},get light(){return this._light},set light(t){this._light=t},get shadowMap(){return this._shadowMap},set shadowMap(t){this._shadowMap=t}},{},e)}(bg.base.Effect);bg.render.ShadowEffect=e}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e)},{get fragmentShaderSource(){return this._fragmentShaderSource||(this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT),this._fragmentShaderSource.addParameter([{name:"inViewportSize",dataType:"vec2",role:"value"},{name:"inPositionMap",dataType:"sampler2D",role:"value"},{name:"inNormalMap",dataType:"sampler2D",role:"value"},{name:"inProjectionMatrix",dataType:"mat4",role:"value"},{name:"inRandomMap",dataType:"sampler2D",role:"value"},{name:"inRandomMapSize",dataType:"vec2",role:"value"},{name:"inSampleRadius",dataType:"float",role:"value"},{name:"inKernelOffsets",dataType:"vec3",role:"value",vec:64},{name:"inKernelSize",dataType:"int",role:"value"},{name:"inSSAOColor",dataType:"vec4",role:"value"},{name:"inEnabled",dataType:"bool",role:"value"},{name:"inMaxDistance",dataType:"float",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\tif (!inEnabled) discard;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvec4 normalTex = texture2D(inNormalMap,fsTexCoord);\n\t\t\t\t\t\tvec3 normal = normalTex.xyz * 2.0 - 1.0;\n\t\t\t\t\t\tvec4 vertexPos = texture2D(inPositionMap,fsTexCoord);\n\t\t\t\t\t\tif (distance(vertexPos.xyz,vec3(0))>inMaxDistance || vertexPos.w==1.0 || normalTex.a==0.0) {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvec2 noiseScale = vec2(inViewportSize.x/inRandomMapSize.x,inViewportSize.y/inRandomMapSize.y);\n\t\t\t\t\t\t\tvec3 randomVector = texture2D(inRandomMap, fsTexCoord * noiseScale).xyz * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec3 tangent = normalize(randomVector - normal * dot(randomVector, normal));\n\t\t\t\t\t\t\tvec3 bitangent = cross(normal,tangent);\n\t\t\t\t\t\t\tmat3 tbn = mat3(tangent, bitangent, normal);\n\n\t\t\t\t\t\t\tfloat occlusion = 0.0;\n\t\t\t\t\t\t\tfor (int i=0; i<64; ++i) {\n\t\t\t\t\t\t\t\tif (inKernelSize==i) break;\n\t\t\t\t\t\t\t\tvec3 samplePos = tbn * inKernelOffsets[i];\n\t\t\t\t\t\t\t\tsamplePos = samplePos * inSampleRadius + vertexPos.xyz;\n\n\t\t\t\t\t\t\t\tvec4 offset = inProjectionMatrix * vec4(samplePos, 1.0);\t// -w, w\n\t\t\t\t\t\t\t\toffset.xyz /= offset.w;\t// -1, 1\n\t\t\t\t\t\t\t\toffset.xyz = offset.xyz * 0.5 + 0.5;\t// 0, 1\n\n\t\t\t\t\t\t\t\tvec4 sampleRealPos = texture2D(inPositionMap, offset.xy);\n\t\t\t\t\t\t\t\tif (samplePos.z<sampleRealPos.z) {\n\t\t\t\t\t\t\t\t\tfloat dist = distance(vertexPos.xyz, sampleRealPos.xyz);\n\t\t\t\t\t\t\t\t\tocclusion += dist<inSampleRadius ? 1.0:0.0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tocclusion = 1.0 - (occlusion / float(inKernelSize));\n\t\t\t\t\t\t\tgl_FragColor = clamp(vec4(occlusion, occlusion, occlusion, 1.0) + inSSAOColor, 0.0, 1.0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}")),this._fragmentShaderSource},setupVars:function(){this.settings.kernelSize>64&&(this.settings.kernelSize=64),this.shader.setVector2("inViewportSize",new bg.Vector2(this.viewport.width,this.viewport.height)),this.shader.setTexture("inPositionMap",this._surface.position,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inNormalMap",this._surface.normal,bg.base.TextureUnit.TEXTURE_1),this.shader.setMatrix4("inProjectionMatrix",this.projectionMatrix),this.shader.setTexture("inRandomMap",this.randomMap,bg.base.TextureUnit.TEXTURE_2),this.shader.setVector2("inRandomMapSize",this.randomMap.size),this.shader.setValueFloat("inSampleRadius",this.settings.sampleRadius),this.shader.setVector3Ptr("inKernelOffsets",this.kernelOffsets),this.shader.setValueInt("inKernelSize",this.settings.kernelSize),this.shader.setVector4("inSSAOColor",this.settings.color),this.shader.setValueInt("inEnabled",this.settings.enabled),this.shader.setValueFloat("inMaxDistance",this.settings.maxDistance)},get viewport(){return this._viewport},set viewport(t){this._viewport=t},get projectionMatrix(){return this._projectionMatrix},set projectionMatrix(t){this._projectionMatrix=t},get randomMap(){return this._randomMap||(this._randomMap=bg.base.TextureCache.RandomTexture(this.context)),this._randomMap},set randomMap(t){this._randomMap=t},get settings(){return this._settings||(this._currentKernelSize=0,this._settings={kernelSize:32,sampleRadius:.3,color:bg.Color.Black(),blur:4,maxDistance:100,enabled:!0}),this._settings},get kernelOffsets(){if(this._currentKernelSize!=this.settings.kernelSize){this._kernelOffsets=[];for(var t=0;t<3*this.settings.kernelSize;t+=3){var e=new bg.Vector3(2*bg.Math.random()-1,2*bg.Math.random()-1,bg.Math.random());e.normalize();var n=t/3/this.settings.kernelSize;n=bg.Math.lerp(.1,1,n*n),e.scale(n),this._kernelOffsets.push(e.x),this._kernelOffsets.push(e.y),this._kernelOffsets.push(e.z)}this._currentKernelSize=this.settings.kernelSize}return this._kernelOffsets}},{},t)}(bg.base.TextureEffect);bg.render.SSAOEffect=t}(),function(){bg.render.RaytracerQuality={low:{maxSamples:50,rayIncrement:.025},mid:{maxSamples:100,rayIncrement:.0125},high:{maxSamples:200,rayIncrement:.0062},extreme:{maxSamples:300,rayIncrement:.0031}};var t=function(t){return $traceurRuntime.createClass(function t(e){$traceurRuntime.superConstructor(t).call(this,e),this._basic=!1,this._viewportSize=new bg.Vector2(1920,1080),this._frameIndex=0},{get fragmentShaderSource(){if(!this._fragmentShaderSource){this._fragmentShaderSource=new bg.base.ShaderSource(bg.base.ShaderType.FRAGMENT);var t=this.quality;this._fragmentShaderSource.addParameter([{name:"inPositionMap",dataType:"sampler2D",role:"value"},{name:"inSpecularMap",dataType:"sampler2D",role:"value"},{name:"inNormalMap",dataType:"sampler2D",role:"value"},{name:"inLightingMap",dataType:"sampler2D",role:"value"},{name:"inMaterialMap",dataType:"sampler2D",role:"value"},{name:"inSamplePosMap",dataType:"sampler2D",role:"value"},{name:"inProjectionMatrix",dataType:"mat4",role:"value"},{name:"inCameraPos",dataType:"vec3",role:"value"},{name:"inRayFailColor",dataType:"vec4",role:"value"},{name:"inBasicMode",dataType:"bool",role:"value"},{name:"inFrameIndex",dataType:"float",role:"value"},{name:"inCubeMap",dataType:"samplerCube",role:"value"},{name:"inRandomTexture",dataType:"sampler2D",role:"value"},{name:"fsTexCoord",dataType:"vec2",role:"in"}]),this._fragmentShaderSource.addFunction(bg.base.ShaderLibrary.Get().functions.utils.random),"webgl1"==bg.Engine.Get().id&&this._fragmentShaderSource.setMainBody("\n\t\t\t\t\t\tvec2 p = vec2(floor(gl_FragCoord.x), floor(gl_FragCoord.y));\n\t\t\t\t\t\tbool renderFrame = false;\n\t\t\t\t\t\tif (inFrameIndex==0.0 && mod(p.x,2.0)==0.0 && mod(p.y,2.0)==0.0) {\n\t\t\t\t\t\t\trenderFrame = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (inFrameIndex==1.0 && mod(p.x,2.0)==0.0 && mod(p.y,2.0)!=0.0) {\n\t\t\t\t\t\t\trenderFrame = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (inFrameIndex==2.0 && mod(p.x,2.0)!=0.0 && mod(p.y,2.0)==0.0) {\n\t\t\t\t\t\t\trenderFrame = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (inFrameIndex==3.0 && mod(p.x,2.0)!=0.0 && mod(p.y,2.0)!=0.0) {\n\t\t\t\t\t\t\trenderFrame = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvec4 material = texture2D(inMaterialMap,fsTexCoord);\n\t\t\t\t\t\tif (renderFrame && material.b>0.0) {\t// material[2] is reflectionAmount\n\t\t\t\t\t\t\tvec3 normal = texture2D(inNormalMap,fsTexCoord).xyz * 2.0 - 1.0;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvec4 specular = texture2D(inSpecularMap,fsTexCoord);\n\t\t\t\t\t\t\tfloat roughness = specular.a * 0.3;\n\t\t\t\t\t\t\tvec3 r = texture2D(inRandomTexture,fsTexCoord*200.0).xyz * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec3 roughnessFactor = normalize(r) * roughness;\n\t\t\t\t\t\t\tnormal = normal + roughnessFactor;\n\t\t\t\t\t\t\tvec4 vertexPos = texture2D(inPositionMap,fsTexCoord);\n\t\t\t\t\t\t\tvec3 cameraVector = vertexPos.xyz - inCameraPos;\n\t\t\t\t\t\t\tvec3 rayDirection = reflect(cameraVector,normal);\n\t\t\t\t\t\t\tvec4 lighting = texture2D(inLightingMap,fsTexCoord);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvec4 rayFailColor = inRayFailColor;\n\t\n\t\t\t\t\t\t\tvec3 lookup = reflect(cameraVector,normal);\n\t\t\t\t\t\t\trayFailColor = textureCube(inCubeMap, lookup);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfloat increment = "+t.rayIncrement+";\n\t\t\t\t\t\t\tvec4 result = rayFailColor;\n\t\t\t\t\t\t\tif (!inBasicMode) {\n\t\t\t\t\t\t\t\tresult = rayFailColor;\n\t\t\t\t\t\t\t\tfor (float i=0.0; i<"+t.maxSamples+".0; ++i) {\n\t\t\t\t\t\t\t\t\tif (i=="+t.maxSamples+".0) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\t\tfloat radius = i * increment;\n\t\t\t\t\t\t\t\t\tincrement *= 1.01;\n\t\t\t\t\t\t\t\t\tvec3 ray = vertexPos.xyz + rayDirection * radius;\n\t\n\t\t\t\t\t\t\t\t\tvec4 offset = inProjectionMatrix * vec4(ray, 1.0);\t// -w, w\n\t\t\t\t\t\t\t\t\toffset.xyz /= offset.w;\t// -1, 1\n\t\t\t\t\t\t\t\t\toffset.xyz = offset.xyz * 0.5 + 0.5;\t// 0, 1\n\t\n\t\t\t\t\t\t\t\t\tvec4 rayActualPos = texture2D(inSamplePosMap, offset.xy);\n\t\t\t\t\t\t\t\t\tfloat hitDistance = rayActualPos.z - ray.z;\n\t\t\t\t\t\t\t\t\tif (offset.x>1.0 || offset.y>1.0 || offset.x<0.0 || offset.y<0.0) {\n\t\t\t\t\t\t\t\t\t\tresult = rayFailColor;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (hitDistance>0.02 && hitDistance<0.15) {\n\t\t\t\t\t\t\t\t\t\tresult = texture2D(inLightingMap,offset.xy);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (result.a==0.0) {\n\t\t\t\t\t\t\t\tgl_FragColor = rayFailColor;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tgl_FragColor = result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t}")}return this._fragmentShaderSource},setupVars:function(){this._frameIndex=(this._frameIndex+1)%4,this.shader.setTexture("inPositionMap",this._surface.position,bg.base.TextureUnit.TEXTURE_0),this.shader.setTexture("inNormalMap",this._surface.normal,bg.base.TextureUnit.TEXTURE_1),this.shader.setTexture("inLightingMap",this._surface.reflectionColor,bg.base.TextureUnit.TEXTURE_2),this.shader.setTexture("inMaterialMap",this._surface.material,bg.base.TextureUnit.TEXTURE_3),this.shader.setTexture("inSamplePosMap",this._surface.reflectionDepth,bg.base.TextureUnit.TEXTURE_4),this.shader.setMatrix4("inProjectionMatrix",this._projectionMatrix),this.shader.setVector3("inCameraPos",this._cameraPos),this.shader.setVector4("inRayFailColor",this.rayFailColor),this.shader.setValueInt("inBasicMode",this.basic),this.shader.setValueFloat("inFrameIndex",this._frameIndex),this.shader.setTexture("inCubeMap",bg.scene.Cubemap.Current(this.context),bg.base.TextureUnit.TEXTURE_5),this._randomTexture||(this._randomTexture=bg.base.TextureCache.RandomTexture(this.context,new bg.Vector2(1024))),this.shader.setTexture("inRandomTexture",this._randomTexture,bg.base.TextureUnit.TEXTURE_6),this.shader.setTexture("inSpecularMap",this._surface.specular,bg.base.TextureUnit.TEXTURE_7)},get projectionMatrix(){return this._projectionMatrix},set projectionMatrix(t){this._projectionMatrix=t},get cameraPosition(){return this._cameraPos},set cameraPosition(t){this._cameraPos=t},get rayFailColor(){return this._rayFailColor||bg.Color.Black()},set rayFailColor(t){this._rayFailColor=t},get viewportSize(){return this._viewportSize},set viewportSize(t){this._viewportSize=t},get quality(){return this._quality||bg.render.RaytracerQuality.low},set quality(t){this._quality&&this._quality.maxSamples==t.maxSamples&&this._quality.rayIncrement==t.rayIncrement||(this._quality=t,this._fragmentShaderSource=null,this.rebuildShaders())},get basic(){return this._basic},set basic(t){this._basic=t},get settings(){return this._settings,this._settings}},{},t)}(bg.base.TextureEffect);bg.render.SSRTEffect=t}(),bg.webgl1={},function(){var t="webgl1";bg.webgl1.EngineId=t;var e=function(e){return $traceurRuntime.createClass(function e(n){$traceurRuntime.superConstructor(e).call(this,n),bg.webgl1.Extensions.Get(n),this._engineId=t,this._texture=new bg.webgl1.TextureImpl(n),this._pipeline=new bg.webgl1.PipelineImpl(n),this._polyList=new bg.webgl1.PolyListImpl(n),this._shader=new bg.webgl1.ShaderImpl(n),this._colorBuffer=new bg.webgl1.ColorRenderSurfaceImpl(n),this._textureBuffer=new bg.webgl1.TextureRenderSurfaceImpl(n),this._shaderSource=new bg.webgl1.ShaderSourceImpl,this._cubemapCapture=new bg.webgl1.CubemapCaptureImpl},{createTextureMergerInstance:function(){return new bg.webgl1.TextureMergerImpl}},{},e)}(bg.Engine);bg.webgl1.Engine=e}(),function(){bg.webgl1.shaderLibrary={inputs:{},functions:{}};var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{header:function(t){return"precision highp float;\nprecision highp int;"},parameter:function(t,e){if(!e)return"\n";var n="";switch(e.role){case"buffer":n="attribute";break;case"value":n="uniform";break;case"in":case"out":n="varying"}var i="";return e.vec&&(i="["+e.vec+"]"),n+" "+e.dataType+" "+e.name+i+";"},func:function(t,e){if(!e)return"\n";var n="";for(var i in e.params)n+=e.params[i]+" "+i+",";return(e.returnType+" "+e.name+"("+n+") {").replace(",)",")")+("\n"+bg.base.ShaderSource.FormatSource(e.body)).replace(/\n/g,"\n\t")+"\n}"}},{},t)}(bg.base.ShaderSourceImpl);bg.webgl1.ShaderSourceImpl=t}(),function(){var t=[bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(1,0,0),new bg.Vector3(0,-1,0)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(-1,0,0),new bg.Vector3(0,-1,0)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(0,1,0),new bg.Vector3(0,0,1)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(0,-1,0),new bg.Vector3(0,0,-1)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(0,0,1),new bg.Vector3(0,-1,0)),bg.Matrix4.LookAt(new bg.Vector3(0,0,0),new bg.Vector3(0,0,-1),new bg.Vector3(0,-1,0))],e=bg.Matrix4.Perspective(90,1,.1,1e3),n=function(n){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{createCaptureBuffers:function(t,e){var n={fbo:t.createFramebuffer(),rbo:t.createRenderbuffer(),texture:null,size:e};t.bindFramebuffer(t.FRAMEBUFFER,n.fbo),t.bindRenderbuffer(t.RENDERBUFFER,n.rbo),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e,e),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,n.rbo),n.texture=new bg.base.Texture(t),n.texture.target=bg.base.TextureTarget.CUBE_MAP,n.texture.create(),n.texture.bind();for(var i=0;i<6;++i)t.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,t.RGB,e,e,0,t.RGB,t.UNSIGNED_BYTE,null);return t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,t.LINEAR),n.texture.unbind(),n.texture._size=new bg.Vector2(e),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindRenderbuffer(t.RENDERBUFFER,null),n},beginRender:function(t,e){e._currentViewport=bg.base.Pipeline.Current()?bg.base.Pipeline.Current().viewport:new bg.Viewport(0,0,512,512),t.bindFramebuffer(t.FRAMEBUFFER,e.fbo)},beginRenderFace:function(n,i,r,a){var s=r.texture.texture;n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_CUBE_MAP_POSITIVE_X+i,s,0),n.clearColor(0,0,0,1),n.viewport(0,0,r.size,r.size),n.clear(n.COLOR_BUFFER_BIT|n.DEPTH_BUFFER_BIT),n.disable(n.CULL_FACE);var o=new bg.Matrix4(t[i]);return o.mult(a),{view:o,projection:e}},endRenderFace:function(t,e,n){},endRender:function(t,e){t.viewport(e._currentViewport.x,e._currentViewport.y,e._currentViewport.width,e._currentViewport.height),t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.CULL_FACE)},getTexture:function(t,e){return e.texture},destroy:function(t,e){}},{},n)}(bg.base.CubemapCaptureImpl);bg.webgl1.CubemapCaptureImpl=n}(),function(){var t=null,e=function(e){function n(t){$traceurRuntime.superConstructor(n).call(this,t)}return $traceurRuntime.createClass(n,{getExtension:function(t){return this.context.getExtension(t)},get textureFloat(){return void 0===this._textureFloat&&(this._textureFloat=this.getExtension("OES_texture_float")),this._textureFloat},get depthTexture(){return void 0===this._depthTexture&&(this._depthTexture=this.getExtension("WEBGL_depth_texture")),this._depthTexture},get drawBuffers(){return void 0===this._drawBuffers&&(this._drawBuffers=this.getExtension("WEBGL_draw_buffers")),this._drawBuffers}},{Get:function(e){return t||(t=new n(e)),t}},e)}(bg.app.ContextObject);bg.webgl1.Extensions=e}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){bg.base.ClearBuffers.COLOR=t.COLOR_BUFFER_BIT,bg.base.ClearBuffers.DEPTH=t.DEPTH_BUFFER_BIT},setViewport:function(t,e){t.viewport(e.x,e.y,e.width,e.height)},clearBuffers:function(t,e,n){t.clearColor(e.r,e.g,e.b,e.a),n&&t.clear(n)},setDepthTestEnabled:function(t,e){e?t.enable(t.DEPTH_TEST):t.disable(t.DEPTH_TEST)},setCullFace:function(t,e){e?t.enable(t.CULL_FACE):t.disable(t.CULL_FACE)},setBlendEnabled:function(t,e){e?t.enable(t.BLEND):t.disable(t.BLEND)},setBlendMode:function(t,e){switch(e){case bg.base.BlendMode.NORMAL:t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA),t.blendEquation(t.FUNC_ADD);break;case bg.base.BlendMode.MULTIPLY:t.blendFunc(t.ZERO,t.SRC_COLOR),t.blendEquation(t.FUNC_ADD);break;case bg.base.BlendMode.ADD:t.blendFunc(t.ONE,t.ONE),t.blendEquation(t.FUNC_ADD);break;case bg.base.BlendMode.SUBTRACT:t.blendFunc(t.ONE,t.ONE),t.blendEquation(t.FUNC_SUBTRACT);break;case bg.base.BlendMode.ALPHA_ADD:t.blendFunc(t.SRC_ALPHA,t.SRC_ALPHA),t.blendEquation(t.FUNC_ADD);break;case bg.base.BlendMode.ALPHA_SUBTRACT:t.blendFunc(t.SRC_ALPHA,t.SRC_ALPHA),t.blendEquation(t.FUNC_SUBTRACT)}}},{},t)}(bg.base.PipelineImpl);bg.webgl1.PipelineImpl=t}(),function(){function t(t,e,n,i){var r=null;return e.length&&(r=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,r),t.bufferData(t.ARRAY_BUFFER,new Float32Array(e),i),r.itemSize=n,r.numItems=e.length/n),r}function e(t,e){return e&&t.deleteBuffer(e),null}var n=!1,i=function(i){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){bg.base.DrawMode.TRIANGLES=t.TRIANGLES,bg.base.DrawMode.TRIANGLE_FAN=t.TRIANGLE_FAN,bg.base.DrawMode.TRIANGLE_STRIP=t.TRIANGLE_STRIP,bg.base.DrawMode.LINES=t.LINES,bg.base.DrawMode.LINE_STRIP=t.LINE_STRIP,n=t.getExtension("OES_element_index_uint")},create:function(t){return{vertexBuffer:null,normalBuffer:null,tex0Buffer:null,tex1Buffer:null,tex2Buffer:null,colorBuffer:null,tangentBuffer:null,indexBuffer:null}},build:function(e,i,r,a,s,o,u,h,l,c){return i.vertexBuffer=t(e,r,3,e.STATIC_DRAW),i.normalBuffer=t(e,a,3,e.STATIC_DRAW),i.tex0Buffer=t(e,s,2,e.STATIC_DRAW),i.tex1Buffer=t(e,o,2,e.STATIC_DRAW),i.tex2Buffer=t(e,u,2,e.STATIC_DRAW),i.colorBuffer=t(e,h,4,e.STATIC_DRAW),i.tangentBuffer=t(e,l,3,e.STATIC_DRAW),c.length>0&&n?(i.indexBuffer=e.createBuffer(),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Uint32Array(c),e.STATIC_DRAW),i.indexBuffer.itemSize=3,i.indexBuffer.numItems=c.length):(i.indexBuffer=e.createBuffer(),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Uint16Array(c),e.STATIC_DRAW),i.indexBuffer.itemSize=3,i.indexBuffer.numItems=c.length),i.vertexBuffer&&i.indexBuffer},draw:function(t,e,i,r){t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),n?t.drawElements(i,r,t.UNSIGNED_INT,0):t.drawElements(i,r,t.UNSIGNED_SHORT,0)},destroy:function(t,n){t.bindBuffer(t.ARRAY_BUFFER,null),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null),n.vertexBuffer=e(t,n.vertexBuffer),n.normalBuffer=e(t,n.normalBuffer),n.tex0Buffer=e(t,n.tex0Buffer),n.tex1Buffer=e(t,n.tex1Buffer),n.tex2Buffer=e(t,n.tex2Buffer),n.colorBuffer=e(t,n.colorBuffer),n.tangentBuffer=e(t,n.tangentBuffer),n.indexBuffer=e(t,n.indexBuffer)},update:function(t,e,i,r){if(i==bg.base.BufferType.INDEX)n?(t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,new Uint32Array(index),t.STATIC_DRAW)):(t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,new Uint16Array(index),t.STATIC_DRAW)),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);else{switch(i){case bg.base.BufferType.VERTEX:t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer);break;case bg.base.BufferType.NORMAL:t.bindBuffer(t.ARRAY_BUFFER,e.normalBuffer);break;case bg.base.BufferType.TEX_COORD_0:t.bindBuffer(t.ARRAY_BUFFER,e.tex0Buffer);break;case bg.base.BufferType.TEX_COORD_1:t.bindBuffer(t.ARRAY_BUFFER,e.tex1Buffer);break;case bg.base.BufferType.TEX_COORD_2:t.bindBuffer(t.ARRAY_BUFFER,e.tex2Buffer);break;case bg.base.BufferType.COLOR:t.bindBuffer(t.ARRAY_BUFFER,e.colorBuffer);break;case bg.base.BufferType.TANGENT:t.bindBuffer(t.ARRAY_BUFFER,e.tangentBuffer)}t.bufferData(t.ARRAY_BUFFER,new Float32Array(r),t.STATIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null)}}},{},i)}(bg.base.PolyListImpl);bg.webgl1.PolyListImpl=i}(),function(){var t=null;function e(){return t.drawBuffers?t.drawBuffers.MAX_COLOR_ATTACHMENTS||t.drawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL:1}function n(n){var i=0,r=e(),a=null;return n.every(function(e,s){return function(t){switch(!0){case t.type==bg.base.RenderSurfaceType.RGBA&&t.format==bg.base.RenderSurfaceFormat.UNSIGNED_BYTE:case t.type==bg.base.RenderSurfaceType.RGBA&&t.format==bg.base.RenderSurfaceFormat.FLOAT:case t.type==bg.base.RenderSurfaceType.DEPTH&&t.format==bg.base.RenderSurfaceFormat.RENDERBUFFER:case t.type==bg.base.RenderSurfaceType.DEPTH&&t.format==bg.base.RenderSurfaceFormat.UNSIGNED_SHORT:return!0;default:return!1}}(e)?e.type==bg.base.RenderSurfaceType.DEPTH&&s!=n.length-1?(a="Error in attachment "+s+": Depth attachment must be specified as the last attachment. Specified at index "+s+" of "+(n.length-1),!1):(e.type==bg.base.RenderSurfaceType.RGBA&&++i,e.format!=bg.base.RenderSurfaceFormat.FLOAT||t.textureFloat?e.type!=bg.base.RenderSurfaceType.DEPTH||e.format==bg.base.RenderSurfaceFormat.RENDERBUFFER||t.depthTexture?!(i>r)||(a="Error in attachment "+s+": Maximum number of "+r+" color attachment exceeded.",!1):(a="Error in attachment "+s+": Depth texture attachment requested, but the requiered extension is not present: WEBGL_depth_texture.",!1):(a="Error in attachment "+s+": Floating point render surface requested, but the required extension is not present: OES_texture_float.",!1)):(a="Error in attachment "+s+": Invalid combination of type and format ("+function(t){switch(t){case bg.base.RenderSurfaceType.RGBA:return"RGBA";case bg.base.RenderSurfaceType.DEPTH:return"DEPTH";default:return"unknown"}}(e.type)+" is incompatible with "+function(t){switch(t){case bg.base.RenderSurfaceFormat.UNSIGNED_BYTE:return"UNSIGNED_BYTE";case bg.base.RenderSurfaceFormat.FLOAT:return"FLOAT";case bg.base.RenderSurfaceFormat.RENDERBUFFER:return"RENDERBUFFER";case bg.base.RenderSurfaceFormat.UNSIGNED_SHORT:return"UNSIGNED_SHORT";default:return"unknown"}}(e.format)+").",!1)}),a}var i=function(n){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(e){bg.base.RenderSurfaceType.RGBA=e.RGBA,bg.base.RenderSurfaceType.DEPTH=e.DEPTH_COMPONENT,bg.base.RenderSurfaceFormat.UNSIGNED_BYTE=e.UNSIGNED_BYTE,bg.base.RenderSurfaceFormat.UNSIGNED_SHORT=e.UNSIGNED_SHORT,bg.base.RenderSurfaceFormat.FLOAT=e.FLOAT,bg.base.RenderSurfaceFormat.RENDERBUFFER=e.RENDERBUFFER,t=bg.webgl1.Extensions.Get()},supportType:function(e){switch(e){case bg.base.RenderSurfaceType.RGBA:return!0;case bg.base.RenderSurfaceType.DEPTH:return null!=t.depthTexture;default:return!1}},supportFormat:function(e){switch(e){case bg.base.RenderSurfaceFormat.UNSIGNED_BYTE:case bg.base.RenderSurfaceFormat.UNSIGNED_SHORT:return!0;case bg.base.RenderSurfaceFormat.FLOAT:return null!=t.textureFloat;default:return!1}},get maxColorAttachments(){return e()}},{},n)}(bg.base.RenderSurfaceBufferImpl),r=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{create:function(t){return{}},setActive:function(t,e,n){t.bindFramebuffer(t.FRAMEBUFFER,null)},resize:function(t,e,n){},destroy:function(t,e){},readBuffer:function(t,e,n,i){var r=new Uint8Array(n.width*n.height*4);return t.readPixels(n.x,n.y,n.width,n.height,t.RGBA,t.UNSIGNED_BYTE,r),r}},{},t)}(i);bg.webgl1.ColorRenderSurfaceImpl=r;var a=function(e){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){},create:function(e,i){var r=n(i);if(r)throw new Error(r);var a=new bg.Vector2(256),s={fbo:e.createFramebuffer(),size:a,attachments:[]};e.bindFramebuffer(e.FRAMEBUFFER,s.fbo);var o=[];return i.forEach(function(n,i){var r=function(t,e,n,i){if(n.format==bg.base.RenderSurfaceFormat.RENDERBUFFER){var r=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,r),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.width,e.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,r),t.bindRenderbuffer(t.RENDERBUFFER,null),{_renderbuffer:r}}var a=new bg.base.Texture(t),s=n.format,o=n.type;return a.create(),a.bind(),a.minFilter=bg.base.TextureFilter.LINEAR,a.magFilter=bg.base.TextureFilter.LINEAR,a.wrapX=bg.base.TextureWrap.CLAMP,a.wrapY=bg.base.TextureWrap.CLAMP,a.setImageRaw(e.width,e.height,null,o,s),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0+i,t.TEXTURE_2D,a._texture,0),a.unbind(),a}(e,a,n,i);r instanceof bg.base.Texture&&o.push(t.drawBuffers?t.drawBuffers.COLOR_ATTACHMENT0_WEBGL+i:e.COLOR_ATTACHMENT0),s.attachments.push({texture:r instanceof bg.base.Texture?r:null,renderbuffer:r instanceof bg.base.Texture?null:r,format:n.format,type:n.type})}),o.length>1&&t.drawBuffers.drawBuffersWEBGL(o),e.bindFramebuffer(e.FRAMEBUFFER,null),s},setActive:function(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e.fbo)},readBuffer:function(t,e,n,i){var r=new Uint8Array(n.width*n.height*4);return t.readPixels(n.x,i.height-n.y,n.width,n.height,t.RGBA,t.UNSIGNED_BYTE,r),r},resize:function(t,e,n){e.size.width=n.width,e.size.height=n.height,e.attachments.forEach(function(e,i){!function(t,e,n,i){if(n.texture&&(n.texture.bind(),n.texture.setImageRaw(e.width,e.height,null,n.type,n.format),n.texture.unbind()),n.renderbuffer){var r=n.renderbuffer._renderbuffer;t.bindRenderbuffer(t.RENDERBUFFER,r),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.width,e.height),t.bindRenderbuffer(t.RENDERBUFFER,null)}}(t,n,e)})},destroy:function(t,e){t.bindFramebuffer(t.FRAMEBUFFER,null);var n=e&&e.attachments;e.fbo&&t.deleteFramebuffer(e.fbo),n&&n.forEach(function(e){e.texture?e.texture.destroy():e.renderbuffer&&t.deleteRenderbuffer(e.renderbuffer._renderbuffer)}),e.fbo=null,e.size=null,e.attachments=null}},{},e)}(i);bg.webgl1.TextureRenderSurfaceImpl=a}(),function(){var t={textureInput:"sampler2D",texCoord:"vec2",size:"int",samplerSize:"vec2"},e="\n\t\tint downsample = 15;\n\t\tvec2 texelSize = 1.0 / samplerSize;\n\t\tvec3 result = vec3(0.0);\n\t\tsize = int(max(float(size / downsample),1.0));\n\t\tvec2 hlim = vec2(float(-size) * 0.5 + 0.5);\n\t\tvec2 sign = vec2(1.0);\n\t\tfloat blurFactor = 10.0 - 0.2 * float(size) * log(float(size));\n\t\tfor (int x=0; x<40; ++x) {\n\t\t\tif (x==size) break;\n\t\t\tfor (int y=0; y<40; ++y) {\n\t\t\t\tif (y==size) break;\n\t\t\t\tvec2 offset = (hlim + vec2(float(x), float(y))) * texelSize * float(downsample) / blurFactor;\n\t\t\t\tresult += textureDownsample(textureInput, texCoord + offset,samplerSize,vec2(downsample)).rgb;\n\t\t\t}\n\t\t}\n\t\treturn vec4(result / float(size * size), 1.0);\n\t\t";bg.webgl1.shaderLibrary.functions.blur={textureDownsample:{returnType:"vec4",name:"textureDownsample",params:{textureInput:"sampler2D",texCoord:"vec2",size:"vec2",reduction:"vec2"},body:"\n\t\tfloat dx = reduction.x / size.x;\n\t\tfloat dy = reduction.y / size.y;\n\t\tvec2 coord = vec2(dx * texCoord.x / dx, dy * texCoord.y / dy);\n\t\treturn texture2D(textureInput,coord);\n\t"},gaussianBlur:{returnType:"vec4",name:"gaussianBlur",params:t,body:e},blur:{returnType:"vec4",name:"blur",params:t,body:e},glowBlur:{returnType:"vec4",name:"glowBlur",params:{textureInput:"sampler2D",texCoord:"vec2",size:"int",samplerSize:"vec2"},body:"\n\t\tint downsample = 15;\n\t\tvec2 texelSize = 1.0 / samplerSize;\n\t\tvec3 result = vec3(0.0);\n\t\tsize = int(max(float(size / downsample),1.0));\n\t\tvec2 hlim = vec2(float(-size) * 0.5 + 0.5);\n\t\tvec2 sign = vec2(1.0);\n\t\tfor (int x=0; x<40; ++x) {\n\t\t\tif (x==size) break;\n\t\t\tfor (int y=0; y<40; ++y) {\n\t\t\t\tif (y==size) break;\n\t\t\t\tvec2 offset = (hlim + vec2(float(x), float(y))) * texelSize;\n\t\t\t\tresult += textureDownsample(textureInput, texCoord + offset,samplerSize,vec2(downsample)).rgb;\n\t\t\t}\n\t\t}\n\t\treturn vec4(result / float(size * size), 1.0);\n\t"},blurCube:{returnType:"vec4",name:"blurCube",params:{textureInput:"samplerCube",texCoord:"vec3",size:"int",samplerSize:"vec2",dist:"float"},body:"\n\t\tint downsample = int(max(1.0,dist));\n\t\tvec2 texelSize = 1.0 / samplerSize;\n\t\tvec3 result = vec3(0.0);\n\t\tsize = int(max(float(size / downsample),1.0));\n\t\tvec2 hlim = vec2(float(-size) * 0.5 + 0.5);\n\t\tvec2 sign = vec2(1.0);\n\t\tfor (int x=0; x<40; ++x) {\n\t\t\tif (x==size) break;\n\t\t\tfor (int y=0; y<40; ++y) {\n\t\t\t\tif (y==size) break;\n\t\t\t\tvec3 offset = vec3((hlim + vec2(float(x*downsample), float(y*downsample))) * texelSize,0.0);\n\t\t\t\tresult += textureCube(textureInput, texCoord + offset,2.0).rgb;\n\t\t\t}\n\t\t}\n\t\treturn vec4(result / float(size * size), 1.0);\n\t\t"},antiAlias:{returnType:"vec4",name:"antiAlias",params:{sampler:"sampler2D",texCoord:"vec2",frameSize:"vec2",tresshold:"float",iterations:"int"},body:"\n\t\t\t\treturn (borderDetection(sampler,texCoord,frameSize)>tresshold) ?\n\t\t\t\t\tgaussianBlur(sampler,texCoord,iterations,frameSize) :\n\t\t\t\t\ttexture2D(sampler,texCoord);\n\t\t\t\t"}}}(),bg.webgl1.shaderLibrary.functions.colorCorrection={rgb2hsv:{returnType:"vec3",name:"rgb2hsv",params:{c:"vec3"},body:"\n\t\t\t\tvec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n\t\t\t\tvec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\n\t\t\t\tvec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\n\n\t\t\t\tfloat d = q.x - min(q.w, q.y);\n\t\t\t\tfloat e = 1.0e-10;\n\t\t\t\treturn vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);"},hsv2rgb:{returnType:"vec3",name:"hsv2rgb",params:{c:"vec3"},body:"\n\t\t\t\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\t\t\t\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\t\t\t\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);"},applyBrightness:{returnType:"vec4",name:"applyBrightness",params:{color:"vec4",brightness:"float"},body:"\n\t\t\t\t\treturn clamp(vec4(color.rgb + brightness - 0.5,1.0),0.0,1.0);\n\t\t\t\t"},applyContrast:{returnType:"vec4",name:"applyContrast",params:{color:"vec4",contrast:"float"},body:"\n\t\t\t\treturn clamp(vec4((color.rgb * max(contrast + 0.5,0.0)),1.0),0.0,1.0);"},applySaturation:{returnType:"vec4",name:"applySaturation",params:{color:"vec4",hue:"float",saturation:"float",lightness:"float"},body:"\n\t\t\t\tvec3 fragRGB = clamp(color.rgb + vec3(0.001),0.0,1.0);\n\t\t\t\tvec3 fragHSV = rgb2hsv(fragRGB);\n\t\t\t\tlightness -= 0.01;\n\t\t\t\tfloat h = hue;\n\t\t\t\tfragHSV.x *= h;\n\t\t\t\tfragHSV.yz *= vec2(saturation,lightness);\n\t\t\t\tfragHSV.x = mod(fragHSV.x, 1.0);\n\t\t\t\tfragHSV.y = mod(fragHSV.y, 1.0);\n\t\t\t\tfragHSV.z = mod(fragHSV.z, 1.0);\n\t\t\t\tfragRGB = hsv2rgb(fragHSV);\n\t\t\t\treturn clamp(vec4(hsv2rgb(fragHSV), color.w),0.0,1.0);"},colorCorrection:{returnType:"vec4",name:"colorCorrection",params:{fragColor:"vec4",hue:"float",saturation:"float",lightness:"float",brightness:"float",contrast:"float"},body:"\n\t\t\t\treturn applyContrast(applyBrightness(applySaturation(fragColor,hue,saturation,lightness),brightness),contrast);"},brightnessMatrix:{returnType:"mat4",name:"brightnessMatrix",params:{brightness:"float"},body:"\n\t\t\t\treturn mat4( 1, 0, 0, 0,\n\t\t\t\t\t0, 1, 0, 0,\n\t\t\t\t\t0, 0, 1, 0,\n\t\t\t\t\tbrightness, brightness, brightness, 1 );\n\t\t\t\t"},contrastMatrix:{returnType:"mat4",name:"contrastMatrix",params:{contrast:"float"},body:"\n\t\t\t\tfloat t = ( 1.0 - contrast ) / 2.0;\n\t\t\t\treturn mat4( contrast, 0, 0, 0,\n\t\t\t\t\t0, contrast, 0, 0,\n\t\t\t\t\t0, 0, contrast, 0,\n\t\t\t\t\tt, t, t, 1 );\n\t\t\t\t"},saturationMatrix:{returnType:"mat4",name:"saturationMatrix",params:{saturation:"float"},body:"\n\t\t\t\tvec3 luminance = vec3( 0.3086, 0.6094, 0.0820 );\n \n\t\t\t\tfloat oneMinusSat = 1.0 - saturation;\n\t\t\t\t\n\t\t\t\tvec3 red = vec3( luminance.x * oneMinusSat );\n\t\t\t\tred+= vec3( saturation, 0, 0 );\n\t\t\t\t\n\t\t\t\tvec3 green = vec3( luminance.y * oneMinusSat );\n\t\t\t\tgreen += vec3( 0, saturation, 0 );\n\t\t\t\t\n\t\t\t\tvec3 blue = vec3( luminance.z * oneMinusSat );\n\t\t\t\tblue += vec3( 0, 0, saturation );\n\t\t\t\t\n\t\t\t\treturn mat4( red, 0,\n\t\t\t\t\t\t\tgreen, 0,\n\t\t\t\t\t\t\tblue, 0,\n\t\t\t\t\t\t\t0, 0, 0, 1 );\n\t\t\t\t"}},bg.webgl1.shaderLibrary.inputs={buffers:{vertex:{name:"inVertex",dataType:"vec3",role:"buffer",target:"vertex"},normal:{name:"inNormal",dataType:"vec3",role:"buffer",target:"normal"},tangent:{name:"inTangent",dataType:"vec3",role:"buffer",target:"tangent"},tex0:{name:"inTex0",dataType:"vec2",role:"buffer",target:"tex0"},tex1:{name:"inTex1",dataType:"vec2",role:"buffer",target:"tex1"},tex2:{name:"inTex2",dataType:"vec2",role:"buffer",target:"tex2"},color:{name:"inColor",dataType:"vec4",role:"buffer",target:"color"}},matrix:{model:{name:"inModelMatrix",dataType:"mat4",role:"value"},view:{name:"inViewMatrix",dataType:"mat4",role:"value"},projection:{name:"inProjectionMatrix",dataType:"mat4",role:"value"},normal:{name:"inNormalMatrix",dataType:"mat4",role:"value"},viewInv:{name:"inViewMatrixInv",dataType:"mat4",role:"value"}},material:{diffuse:{name:"inDiffuseColor",dataType:"vec4",role:"value"},specular:{name:"inSpecularColor",dataType:"vec4",role:"value"},shininess:{name:"inShininess",dataType:"float",role:"value"},shininessMask:{name:"inShininessMask",dataType:"sampler2D",role:"value"},shininessMaskChannel:{name:"inShininessMaskChannel",dataType:"vec4",role:"value"},shininessMaskInvert:{name:"inShininessMaskInvert",dataType:"bool",role:"value"},lightEmission:{name:"inLightEmission",dataType:"float",role:"value"},lightEmissionMask:{name:"inLightEmissionMask",dataType:"sampler2D",role:"value"},lightEmissionMaskChannel:{name:"inLightEmissionMaskChannel",dataType:"vec4",role:"value"},lightEmissionMaskInvert:{name:"inLightEmissionMaskInvert",dataType:"bool",role:"value"},texture:{name:"inTexture",dataType:"sampler2D",role:"value"},textureOffset:{name:"inTextureOffset",dataType:"vec2",role:"value"},textureScale:{name:"inTextureScale",dataType:"vec2",role:"value"},alphaCutoff:{name:"inAlphaCutoff",dataType:"float",role:"value"},lightMap:{name:"inLightMap",dataType:"sampler2D",role:"value"},lightMapOffset:{name:"inLightMapOffset",dataType:"vec2",role:"value"},lightMapScale:{name:"inLightMapScale",dataType:"vec2",role:"value"},normalMap:{name:"inNormalMap",dataType:"sampler2D",role:"value"},normalMapOffset:{name:"inNormalMapOffset",dataType:"vec2",role:"value"},normalMapScale:{name:"inNormalMapScale",dataType:"vec2",role:"value"},reflection:{name:"inReflection",dataType:"float",role:"value"},reflectionMask:{name:"inReflectionMask",dataType:"sampler2D",role:"value"},reflectionMaskChannel:{name:"inReflectionMaskChannel",dataType:"vec4",role:"value"},reflectionMaskInvert:{name:"inReflectionMaskInvert",dataType:"bool",role:"value"},castShadows:{name:"inCastShadows",dataType:"bool",role:"value"},receiveShadows:{name:"inReceiveShadows",dataType:"bool",role:"value"},roughness:{name:"inRoughness",dataType:"float",role:"value"},roughnessMask:{name:"inRoughnessMask",dataType:"sampler2D",role:"value"},roughnessMaskChannel:{name:"inRoughnessMaskChannel",dataType:"vec4",role:"value"},roughnessMaskInvert:{name:"inRoughnessMaskInvert",dataType:"bool",role:"value"},unlit:{name:"inUnlit",dataType:"bool",role:"value"}},lighting:{type:{name:"inLightType",dataType:"int",role:"value"},position:{name:"inLightPosition",dataType:"vec3",role:"value"},direction:{name:"inLightDirection",dataType:"vec3",role:"value"},ambient:{name:"inLightAmbient",dataType:"vec4",role:"value"},diffuse:{name:"inLightDiffuse",dataType:"vec4",role:"value"},specular:{name:"inLightSpecular",dataType:"vec4",role:"value"},attenuation:{name:"inLightAttenuation",dataType:"vec3",role:"value"},spotExponent:{name:"inSpotExponent",dataType:"float",role:"value"},spotCutoff:{name:"inSpotCutoff",dataType:"float",role:"value"},cutoffDistance:{name:"inLightCutoffDistance",dataType:"float",role:"value"},exposure:{name:"inLightExposure",dataType:"float",role:"value"},castShadows:{name:"inLightCastShadows",dataType:"bool",role:"value"}},lightingForward:{type:{name:"inLightType",dataType:"int",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},position:{name:"inLightPosition",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},direction:{name:"inLightDirection",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},ambient:{name:"inLightAmbient",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},diffuse:{name:"inLightDiffuse",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},specular:{name:"inLightSpecular",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},attenuation:{name:"inLightAttenuation",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},spotExponent:{name:"inSpotExponent",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},spotCutoff:{name:"inSpotCutoff",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},cutoffDistance:{name:"inLightCutoffDistance",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},exposure:{name:"inLightExposure",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},castShadows:{name:"inLightCastShadows",dataType:"bool",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},numLights:{name:"inNumLights",dataType:"int",role:"value"}},shadows:{shadowMap:{name:"inShadowMap",dataType:"sampler2D",role:"value"},shadowMapSize:{name:"inShadowMapSize",dataType:"vec2",role:"value"},shadowStrength:{name:"inShadowStrength",dataType:"float",role:"value"},shadowColor:{name:"inShadowColor",dataType:"vec4",role:"value"},shadowBias:{name:"inShadowBias",dataType:"float",role:"value"},shadowType:{name:"inShadowType",dataType:"int",role:"value"}},colorCorrection:{hue:{name:"inHue",dataType:"float",role:"value"},saturation:{name:"inSaturation",dataType:"float",role:"value"},lightness:{name:"inLightness",dataType:"float",role:"value"},brightness:{name:"inBrightness",dataType:"float",role:"value"},contrast:{name:"inContrast",dataType:"float",role:"value"}}},bg.webgl1.shaderLibrary.functions.lighting={beckmannDistribution:{returnType:"float",name:"beckmannDistribution",params:{x:"float",roughness:"float"},body:"\n\t\t\t\t\tfloat NdotH = max(x,0.0001);\n\t\t\t\t\tfloat cos2Alpha = NdotH * NdotH;\n\t\t\t\t\tfloat tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n\t\t\t\t\tfloat roughness2 = roughness * roughness;\n\t\t\t\t\tfloat denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n\t\t\t\t\treturn exp(tan2Alpha / roughness2) / denom;\n\t\t\t\t"},beckmannSpecular:{returnType:"float",name:"beckmannSpecular",params:{lightDirection:"vec3",viewDirection:"vec3",surfaceNormal:"vec3",roughness:"float"},body:"\n\t\t\t\t\treturn beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\n\t\t\t\t"},getDirectionalLight:{returnType:"vec4",name:"getDirectionalLight",params:{ambient:"vec4",diffuse:"vec4",specular:"vec4",shininess:"float",direction:"vec3",vertexPos:"vec3",normal:"vec3",matDiffuse:"vec4",matSpecular:"vec4",shadowColor:"vec4",specularOut:"out vec4"},body:"\n\t\t\t\tvec3 color = ambient.rgb * matDiffuse.rgb;\n\t\t\t\tvec3 diffuseWeight = max(0.0, dot(normal,direction)) * diffuse.rgb;\n\t\t\t\tcolor += min(diffuseWeight,shadowColor.rgb) * matDiffuse.rgb;\n\t\t\t\tspecularOut = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\tif (shininess>0.0) {\n\t\t\t\t\tvec3 eyeDirection = normalize(-vertexPos);\n\t\t\t\t\tvec3 reflectionDirection = normalize(reflect(-direction,normal));\n\t\t\t\t\tfloat specularWeight = clamp(pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess), 0.0, 1.0);\n\t\t\t\t\t//sspecularWeight = beckmannSpecular(direction,eyeDirection,normal,0.01);\n\t\t\t\t\tvec3 specularColor = specularWeight * pow(shadowColor.rgb,vec3(10.0));\n\t\t\t\t\t//color += specularColor * specular.rgb * matSpecular.rgb;\n\t\t\t\t\tspecularOut = vec4(specularColor * specular.rgb * matSpecular.rgb,1.0);\n\t\t\t\t}\n\t\t\t\treturn vec4(color,1.0);"},getPointLight:{returnType:"vec4",name:"getPointLight",params:{ambient:"vec4",diffuse:"vec4",specular:"vec4",shininess:"float",position:"vec3",constAtt:"float",linearAtt:"float",expAtt:"float",vertexPos:"vec3",normal:"vec3",matDiffuse:"vec4",matSpecular:"vec4",specularOut:"out vec4"},body:"\n\t\t\t\tvec3 pointToLight = position - vertexPos;\n\t\t\t\tfloat distance = length(pointToLight);\n\t\t\t\tvec3 lightDir = normalize(pointToLight);\n\t\t\t\tfloat attenuation = 1.0 / (constAtt + linearAtt * distance + expAtt * distance * distance);\n\t\t\t\tvec3 color = ambient.rgb * matDiffuse.rgb;\n\t\t\t\tvec3 diffuseWeight = max(0.0,dot(normal,lightDir)) * diffuse.rgb * attenuation;\n\t\t\t\tcolor += diffuseWeight * matDiffuse.rgb;\n\t\t\t\tspecularOut = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\tif (shininess>0.0) {\n\t\t\t\t\tvec3 eyeDirection = normalize(-vertexPos);\n\t\t\t\t\tvec3 reflectionDirection = normalize(reflect(-lightDir, normal));\n\t\t\t\t\tfloat specularWeight = clamp(pow(max(dot(reflectionDirection,eyeDirection),0.0), shininess), 0.0, 1.0);\n\t\t\t\t\t//color += specularWeight * specular.rgb * matSpecular.rgb * attenuation;\n\t\t\t\t\tspecularOut = vec4(specularWeight * specular.rgb * matSpecular.rgb * attenuation,1.0);\n\t\t\t\t}\n\t\t\t\treturn vec4(color,1.0);"},getSpotLight:{returnType:"vec4",name:"getSpotLight",params:{ambient:"vec4",diffuse:"vec4",specular:"vec4",shininess:"float",position:"vec3",direction:"vec3",constAtt:"float",linearAtt:"float",expAtt:"float",spotCutoff:"float",spotExponent:"float",vertexPos:"vec3",normal:"vec3",matDiffuse:"vec4",matSpecular:"vec4",shadowColor:"vec4",specularOut:"out vec4"},body:"\n\t\t\t\tvec4 matAmbient = vec4(1.0);\n\t\t\t\tvec3 s = normalize(position - vertexPos);\n\t\t\t\tfloat angle = acos(dot(-s, direction));\n\t\t\t\tfloat cutoff = radians(clamp(spotCutoff / 2.0,0.0,90.0));\n\t\t\t\tfloat distance = length(position - vertexPos);\n\t\t\t\tfloat attenuation = 1.0 / (constAtt );//+ linearAtt * distance + expAtt * distance * distance);\n\t\t\t\tif (angle<cutoff) {\n\t\t\t\t\tfloat spotFactor = pow(dot(-s, direction), spotExponent);\n\t\t\t\t\tvec3 v = normalize(vec3(-vertexPos));\n\t\t\t\t\tvec3 h = normalize(v + s);\n\t\t\t\t\tvec3 diffuseAmount = matDiffuse.rgb * diffuse.rgb * max(dot(s, normal), 0.0);\n\t\t\t\t\tspecularOut = vec4(0.0,0.0,0.0,1.0);\n\t\t\t\t\tif (shininess>0.0) {\n\t\t\t\t\t\tspecularOut.rgb = matSpecular.rgb * specular.rgb * pow(max(dot(h,normal), 0.0),shininess);\n\t\t\t\t\t\tspecularOut.rgb *= pow(shadowColor.rgb,vec3(10.0));\n\t\t\t\t\t\t//diffuseAmount += matSpecular.rgb * specular.rgb * pow(max(dot(h,normal), 0.0),shininess);\n\t\t\t\t\t\t//diffuseAmount *= pow(shadowColor.rgb,vec3(10.0));\n\t\t\t\t\t}\n\t\t\t\t\tdiffuseAmount.r = min(diffuseAmount.r, shadowColor.r);\n\t\t\t\t\tdiffuseAmount.g = min(diffuseAmount.g, shadowColor.g);\n\t\t\t\t\tdiffuseAmount.b = min(diffuseAmount.b, shadowColor.b);\n\t\t\t\t\treturn vec4(ambient.rgb * matDiffuse.rgb + attenuation * spotFactor * diffuseAmount,1.0);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn vec4(ambient.rgb * matDiffuse.rgb,1.0);\n\t\t\t\t}"},getLight:{returnType:"vec4",name:"getLight",params:{lightType:"int",ambient:"vec4",diffuse:"vec4",specular:"vec4",shininess:"float",lightPosition:"vec3",lightDirection:"vec3",constAtt:"float",linearAtt:"float",expAtt:"float",spotCutoff:"float",spotExponent:"float",cutoffDistance:"float",vertexPosition:"vec3",vertexNormal:"vec3",matDiffuse:"vec4",matSpecular:"vec4",shadowColor:"vec4",specularOut:"out vec4"},body:"\n\t\t\t\t\tvec4 light = vec4(0.0);\n\t\t\t\t\tif (lightType=="+bg.base.LightType.DIRECTIONAL+") {\n\t\t\t\t\t\tlight = getDirectionalLight(ambient,diffuse,specular,shininess,\n\t\t\t\t\t\t\t\t\t\t-lightDirection,vertexPosition,vertexNormal,matDiffuse,matSpecular,shadowColor,specularOut);\n\t\t\t\t\t}\n\t\t\t\t\telse if (lightType=="+bg.base.LightType.SPOT+") {\n\t\t\t\t\t\tfloat d = distance(vertexPosition,lightPosition);\n\t\t\t\t\t\tif (d<=cutoffDistance || cutoffDistance==-1.0) {\n\t\t\t\t\t\t\tlight = getSpotLight(ambient,diffuse,specular,shininess,\n\t\t\t\t\t\t\t\t\t\t\tlightPosition,lightDirection,\n\t\t\t\t\t\t\t\t\t\t\tconstAtt,linearAtt,expAtt,\n\t\t\t\t\t\t\t\t\t\t\tspotCutoff,spotExponent,\n\t\t\t\t\t\t\t\t\t\t\tvertexPosition,vertexNormal,matDiffuse,matSpecular,shadowColor,specularOut);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (lightType=="+bg.base.LightType.POINT+") {\n\t\t\t\t\t\tfloat d = distance(vertexPosition,lightPosition);\n\t\t\t\t\t\tif (d<=cutoffDistance || cutoffDistance==-1.0) {\n\t\t\t\t\t\t\tlight = getPointLight(ambient,diffuse,specular,shininess,\n\t\t\t\t\t\t\t\t\t\t\tlightPosition,\n\t\t\t\t\t\t\t\t\t\t\tconstAtt,linearAtt,expAtt,\n\t\t\t\t\t\t\t\t\t\t\tvertexPosition,vertexNormal,matDiffuse,matSpecular,specularOut);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn light;\n\t\t\t\t"},getShadowColor:{returnType:"vec4",name:"getShadowColor",params:{vertexPosFromLight:"vec4",shadowMap:"sampler2D",shadowMapSize:"vec2",shadowType:"int",shadowStrength:"float",shadowBias:"float",shadowColor:"vec4"},body:"\n\t\t\t\tfloat visibility = 1.0;\n\t\t\t\tvec3 depth = vertexPosFromLight.xyz / vertexPosFromLight.w;\n\t\t\t\tconst float kShadowBorderOffset = 3.0;\n\t\t\t\tfloat shadowBorderOffset = kShadowBorderOffset / shadowMapSize.x;\n\t\t\t\tfloat bias = shadowBias;\n\t\t\t\tvec4 shadow = vec4(1.0);\n\t\t\t\tif (shadowType=="+bg.base.ShadowType.HARD+") {\t// hard\n\t\t\t\t\tfloat shadowDepth = unpack(texture2D(shadowMap,depth.xy));\n\t\t\t\t\tif (shadowDepth<depth.z - bias &&\n\t\t\t\t\t\t(depth.x>0.0 && depth.x<1.0 && depth.y>0.0 && depth.y<1.0))\n\t\t\t\t\t{\n\t\t\t\t\t\tvisibility = 1.0 - shadowStrength;\n\t\t\t\t\t}\n\t\t\t\t\tshadow = clamp(shadowColor + visibility,0.0,1.0);\n\t\t\t\t}\n\t\t\t\telse if (shadowType>="+bg.base.ShadowType.SOFT+") {\t// soft / soft stratified (not supported on webgl, fallback to soft)\n\t\t\t\t\tvec2 poissonDisk[4];\n\t\t\t\t\tpoissonDisk[0] = vec2( -0.94201624, -0.39906216 );\n\t\t\t\t\tpoissonDisk[1] = vec2( 0.94558609, -0.76890725 );\n\t\t\t\t\tpoissonDisk[2] = vec2( -0.094184101, -0.92938870 );\n\t\t\t\t\tpoissonDisk[3] = vec2( 0.34495938, 0.29387760 );\n\t\t\t\t\t\n\t\t\t\t\tfor (int i=0; i<4; ++i) {\n\t\t\t\t\t\tfloat shadowDepth = unpack(texture2D(shadowMap, depth.xy + poissonDisk[i]/1000.0));\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (shadowDepth<depth.z - bias\n\t\t\t\t\t\t\t&& (depth.x>0.0 && depth.x<1.0 && depth.y>0.0 && depth.y<1.0)) {\n\t\t\t\t\t\t\tvisibility -= (shadowStrength) * 0.25;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tshadow = clamp(shadowColor + visibility,0.0,1.0);\n\t\t\t\t}\n\t\t\t\treturn shadow;"}},bg.webgl1.shaderLibrary.functions.materials={samplerColor:{returnType:"vec4",name:"samplerColor",params:{sampler:"sampler2D",uv:"vec2",offset:"vec2",scale:"vec2"},body:"\n\t\t\t\treturn texture2D(sampler,uv * scale + offset);"},samplerNormal:{returnType:"vec3",name:"samplerNormal",params:{sampler:"sampler2D",uv:"vec2",offset:"vec2",scale:"vec2"},body:"\n\t\t\t\treturn normalize(samplerColor(sampler,uv,offset,scale).xyz * 2.0 - 1.0);\n\t\t\t\t"},combineNormalWithMap:{returnType:"vec3",name:"combineNormalWithMap",params:{normalCoord:"vec3",tangent:"vec3",bitangent:"vec3",normalMapValue:"vec3"},body:"\n\t\t\t\tmat3 tbnMat = mat3( tangent.x, bitangent.x, normalCoord.x,\n\t\t\t\t\t\t\ttangent.y, bitangent.y, normalCoord.y,\n\t\t\t\t\t\t\ttangent.z, bitangent.z, normalCoord.z\n\t\t\t\t\t\t);\n\t\t\t\treturn normalize(normalMapValue * tbnMat);"},applyTextureMask:{returnType:"float",name:"applyTextureMask",params:{value:"float",textureMask:"sampler2D",uv:"vec2",offset:"vec2",scale:"vec2",channelMask:"vec4",invert:"bool"},body:"\n\t\t\t\tfloat mask;\n\t\t\t\tvec4 color = samplerColor(textureMask,uv,offset,scale);\n\t\t\t\tmask = color.r * channelMask.r +\n\t\t\t\t\t\t color.g * channelMask.g +\n\t\t\t\t\t\t color.b * channelMask.b +\n\t\t\t\t\t\t color.a * channelMask.a;\n\t\t\t\tif (invert) {\n\t\t\t\t\tmask = 1.0 - mask;\n\t\t\t\t}\n\t\t\t\treturn value * mask;"},specularColor:{returnType:"vec4",name:"specularColor",params:{specular:"vec4",shininessMask:"sampler2D",uv:"vec2",offset:"vec2",scale:"vec2",channelMask:"vec4",invert:"bool"},body:"\n\t\t\t\tfloat maskValue = applyTextureMask(1.0, shininessMask,uv,offset,scale,channelMask,invert);\n\t\t\t\treturn vec4(specular.rgb * maskValue, 1.0);"}},bg.webgl1.shaderLibrary.functions.pbr={},bg.webgl1.shaderLibrary.inputs.pbr={},bg.webgl1.shaderLibrary.functions.pbr={lighting:{processLight:{returnType:"vec4",name:"processLight",params:{inAmbient:"vec3",inDiffuse:"vec3",inSpecular:"vec3",type:"int",specularType:"int",direction:"vec3",position:"vec3",inAttenuation:"vec3",spotCutoff:"float",spotOuterCutoff:"float",surfaceNormal:"vec3",surfacePosition:"vec3",surfaceDiffuse:"vec3",shadowColor:"vec3"},body:"\n vec3 diffuse = vec3(0.0);\n vec3 specular = vec3(0.0);\n float attenuation = 1.0;\n float shininess = 64.0;\n if (type=="+bg.base.LightType.DIRECTIONAL+") {\n vec3 lightDir = normalize(-direction);\n diffuse = max(dot(normalize(surfaceNormal), lightDir), 0.0) * surfaceDiffuse;\n vec3 viewDir = normalize(vec3(0.0) - surfacePosition);\n vec3 reflectDir = reflect(-lightDir, surfaceNormal);\n float spec = 0.0;\n if (specularType=="+bg.base.SpecularType.PHONG+") {\n spec = pow(max(dot(viewDir, reflectDir), 0.0), shininess);\n }\n else {\n vec3 halfwayDir = normalize(lightDir + viewDir);\n spec = pow(max(dot(surfaceNormal, halfwayDir), 0.0), shininess);\n }\n specular = spec * inSpecular;\n specular *= pow(shadowColor,vec3(10.0));\n }\n else if (type=="+bg.base.LightType.POINT+") {\n vec3 lightDir = normalize(position - surfacePosition);\n float distance = length(position - surfacePosition);\n attenuation = 1.0 / (\n inAttenuation.x +\n inAttenuation.y * distance +\n inAttenuation.z * distance * distance\n );\n diffuse = max(dot(normalize(surfaceNormal), lightDir), 0.0) * inDiffuse;\n vec3 viewDir = normalize(vec3(0.0) - surfacePosition);\n vec3 reflectDir = reflect(-lightDir, surfaceNormal);\n\n float spec = 0.0;\n if (specularType=="+bg.base.SpecularType.PHONG+") {\n spec = pow(max(dot(viewDir, reflectDir), 0.0), shininess);\n }\n else {\n vec3 halfwayDir = normalize(lightDir + viewDir);\n spec = pow(max(dot(surfaceNormal, halfwayDir), 0.0), shininess);\n }\n\n specular = spec * inSpecular;\n }\n else if (type=="+bg.base.LightType.SPOT+") {\n vec3 lightDirToSurface = normalize(position - surfacePosition);\n float theta = dot(lightDirToSurface,normalize(-direction));\n if (theta > spotCutoff) {\n float epsilon = spotCutoff - spotOuterCutoff;\n float intensity = 1.0 - clamp((theta - spotOuterCutoff) / epsilon, 0.0, 1.0);\n float distance = length(position - surfacePosition);\n diffuse = max(dot(normalize(surfaceNormal), lightDirToSurface), 0.0) * inDiffuse * intensity;\n vec3 viewDir = normalize(vec3(0.0) - surfacePosition);\n vec3 reflectDir = reflect(-lightDirToSurface, surfaceNormal);\n float spec = 0.0;\n if (specularType=="+bg.base.SpecularType.PHONG+") {\n spec = pow(max(dot(viewDir, reflectDir), 0.0), shininess);\n }\n else {\n vec3 halfwayDir = normalize(lightDirToSurface + viewDir);\n spec = pow(max(dot(surfaceNormal, halfwayDir), 0.0), shininess);\n }\n specular = spec * inSpecular * intensity;\n specular *= pow(shadowColor,vec3(10.0));\n }\n }\n vec3 shadowAmbient = clamp(shadowColor,inAmbient,vec3(1.0));\n diffuse = min(diffuse,shadowAmbient);\n return vec4((inAmbient + diffuse + specular) * attenuation,1.0);\n "},getShadowColor:{returnType:"vec4",name:"getShadowColor",params:{vertexPosFromLight:"vec4",shadowMap:"sampler2D",shadowMapSize:"vec2",shadowType:"int",shadowStrength:"float",shadowBias:"float",shadowColor:"vec4"},body:"\n\t\t\t\tfloat visibility = 1.0;\n\t\t\t\tvec3 depth = vertexPosFromLight.xyz / vertexPosFromLight.w;\n\t\t\t\tconst float kShadowBorderOffset = 3.0;\n\t\t\t\tfloat shadowBorderOffset = kShadowBorderOffset / shadowMapSize.x;\n\t\t\t\tfloat bias = shadowBias;\n vec4 shadow = vec4(1.0);\n \n float shadowDepth = unpack(texture2D(shadowMap,depth.xy));\n\n\t\t\t\tif (shadowType=="+bg.base.ShadowType.HARD+") {\t// hard\n float shadowDepth = unpack(texture2D(shadowMap,depth.xy));\n\t\t\t\t\tif (shadowDepth<depth.z - bias &&\n\t\t\t\t\t\t(depth.x>0.0 && depth.x<1.0 && depth.y>0.0 && depth.y<1.0))\n\t\t\t\t\t{\n\t\t\t\t\t\tvisibility = 1.0 - shadowStrength;\n\t\t\t\t\t}\n\t\t\t\t\tshadow = clamp(shadowColor + visibility,0.0,1.0);\n\t\t\t\t}\n\t\t\t\telse if (shadowType>="+bg.base.ShadowType.SOFT+") {\t// soft / soft stratified (not supported on webgl, fallback to soft)\n\t\t\t\t\tvec2 poissonDisk[7];\n poissonDisk[0] = vec2( -0.54201624, -0.19906216 );\n poissonDisk[1] = vec2( 0.54558609, -0.46890725 );\n poissonDisk[2] = vec2( -0.054184101, -0.52938870 );\n poissonDisk[3] = vec2( 0.02495938, -0.14387760 );\n poissonDisk[4] = vec2( -0.24495938, 0.14387760 );\n poissonDisk[5] = vec2( 0.3495938, -0.74387760 );\n poissonDisk[6] = vec2( -0.07495938, 0.54387760 );\n \n for (int i=0; i<7; ++i) {\n float shadowDepth = unpack(texture2D(shadowMap, depth.xy + poissonDisk[i]/3000.0));\n \n if (shadowDepth<depth.z - bias\n && (depth.x>0.0 && depth.x<1.0 && depth.y>0.0 && depth.y<1.0)) {\n visibility -= (shadowStrength) * 0.14;\n }\n }\n shadow = clamp(shadowColor + visibility,0.0,1.0);\n\t\t\t\t}\n\t\t\t\treturn shadow;"}},material:{samplerColor:{returnType:"vec4",name:"samplerColor",params:{sampler:"sampler2D",uv:"vec2",scale:"vec2"},body:"\n return texture2D(sampler,uv*scale);"},samplerNormal:{returnType:"vec3",name:"samplerNormal",params:{sampler:"sampler2D",uv:"vec2",scale:"vec2"},body:"\n\t\t\t\treturn normalize(samplerColor(sampler,uv,scale).xyz * 2.0 - 1.0);"},combineNormalWithMap:{returnType:"vec3",name:"combineNormalWithMap",params:{normalCoord:"vec3",tangent:"vec3",bitangent:"vec3",normalMapValue:"vec3"},body:"\n\t\t\t\tmat3 tbnMat = mat3( tangent.x, bitangent.x, normalCoord.x,\n\t\t\t\t\t\t\ttangent.y, bitangent.y, normalCoord.y,\n\t\t\t\t\t\t\ttangent.z, bitangent.z, normalCoord.z\n\t\t\t\t\t\t);\n\t\t\t\treturn normalize(normalMapValue * tbnMat);"},parallaxMapping:{returnType:"vec2",name:"parallaxMapping",params:{height:"float",texCoords:"vec2",viewDir:"vec3",scale:"float",texScale:"vec2"},body:"\n float height_scale = (0.01 * scale) / ((texScale.x + texScale.y) / 2.0);\n vec2 p = viewDir.xy / viewDir.z;\n p.x *= -1.0;\n p.y *= -1.0;\n p *= (height * height_scale);\n return texCoords - p;\n "}},utils:{pack:{returnType:"vec4",name:"pack",params:{depth:"float"},body:"\n\t\t\t\tconst vec4 bitSh = vec4(256 * 256 * 256,\n\t\t\t\t\t\t\t\t\t\t256 * 256,\n\t\t\t\t\t\t\t\t\t\t256,\n\t\t\t\t\t\t\t\t\t\t1.0);\n\t\t\t\tconst vec4 bitMsk = vec4(0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0);\n\t\t\t\tvec4 comp = fract(depth * bitSh);\n\t\t\t\tcomp -= comp.xxyz * bitMsk;\n\t\t\t\treturn comp;"},unpack:{returnType:"float",name:"unpack",params:{color:"vec4"},body:"\n\t\t\t\tconst vec4 bitShifts = vec4(1.0 / (256.0 * 256.0 * 256.0),\n\t\t\t\t\t\t\t\t\t\t\t1.0 / (256.0 * 256.0),\n\t\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t\t1.0);\n\t\t\t\treturn dot(color, bitShifts);"},random:{returnType:"float",name:"random",params:{seed:"vec3",i:"int"},body:"\n\t\t\t\tvec4 seed4 = vec4(seed,i);\n\t\t\t\tfloat dot_product = dot(seed4, vec4(12.9898,78.233,45.164,94.673));\n\t\t\t\treturn fract(sin(dot_product) * 43758.5453);"},gammaCorrection:{returnType:"vec4",name:"gammaCorrection",params:{color:"vec4",gamma:"float"},body:"\n return pow(color,vec4(1.0/gamma));\n "},inverseGammaCorrection:{returnType:"vec4",name:"inverseGammaCorrection",params:{color:"vec4",gamma:"float"},body:"\n return pow(color,vec4(gamma));\n "}}},bg.webgl1.shaderLibrary.inputs.pbr.material={diffuse:{name:"inDiffuse",dataType:"sampler2D",role:"value"},alphaCutoff:{name:"inAlphaCutoff",dataType:"float",role:"value"},fresnel:{name:"inFresnel",dataType:"vec4",role:"value"},height:{name:"inHeight",dataType:"sampler2D",role:"value"},heighMetallicRoughnessAO:{name:"inHeighMetallicRoughnessAO",dataType:"sampler2D",role:"value"},normal:{name:"inNormalMap",dataType:"sampler2D",role:"value"},diffuseUV:{name:"inDiffuseUV",dataType:"int",role:"value"},metallicUV:{name:"inMetallicUV",dataType:"int",role:"value"},roughnessUV:{name:"inRoughnessUV",dataType:"int",role:"value"},fresnelUV:{name:"inFresnelUV",dataType:"int",role:"value"},heightUV:{name:"inHeightUV",dataType:"int",role:"value"},ambientOcclussionUV:{name:"inAmbientOcclussionUV",dataType:"int",role:"value"},lightEmissionUV:{name:"inLightEmissionUV",dataType:"int",role:"value"},normalUV:{name:"inNormalUV",dataType:"int",role:"value"},diffuseScale:{name:"inDiffuseScale",dataType:"vec2",role:"value"},metallicScale:{name:"inMetallicScale",dataType:"vec2",role:"value"},roughnessScale:{name:"inRoughnessScale",dataType:"vec2",role:"value"},fresnelScale:{name:"inFresnelScale",dataType:"vec2",role:"value"},lightEmissionScale:{name:"inLightEmissionScale",dataType:"vec2",role:"value"},heightScale:{name:"inHeightScale",dataType:"vec2",role:"value"},normalScale:{name:"inNormalScale",dataType:"vec2",role:"value"},receiveShadows:{name:"inReceiveShadows",dataType:"bool",role:"value"},heightIntensity:{name:"inHeightIntensity",dataType:"float",role:"value"},unlit:{name:"inUnlit",dataType:"bool",role:"value"}},bg.webgl1.shaderLibrary.inputs.pbr.lighting={ambient:{name:"inLightAmbient",dataType:"vec4",role:"value"}},bg.webgl1.shaderLibrary.inputs.pbr.lightingForward={lightType:{name:"inLightType",dataType:"int",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},diffuse:{name:"inLightDiffuse",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},specular:{name:"inLightSpecular",dataType:"vec4",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},position:{name:"inLightPosition",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},direction:{name:"inLightDirection",dataType:"vec3",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},intensity:{name:"inLightIntensity",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},spotCutoff:{name:"inLightSpotCutoff",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS},outerSpotCutoff:{name:"inLightOuterSpotCutoff",dataType:"float",role:"value",vec:bg.base.MAX_FORWARD_LIGHTS}},bg.webgl1.shaderLibrary.inputs.pbr.shadows={shadowMap:{name:"inShadowMap",dataType:"sampler2D",role:"value"},shadowMapSize:{name:"inShadowMapSize",dataType:"vec2",role:"value"},shadowStrength:{name:"inShadowStrength",dataType:"float",role:"value"},shadowColor:{name:"inShadowColor",dataType:"vec4",role:"value"},shadowBias:{name:"inShadowBias",dataType:"float",role:"value"},shadowType:{name:"inShadowType",dataType:"int",role:"value"}},bg.webgl1.shaderLibrary.inputs.pbr.colorCorrection={gammaCorrection:{name:"inGammaCorrection",dataType:"float",role:"value"},saturation:{name:"inSaturation",dataType:"float",role:"value"},brightness:{name:"inBrightness",dataType:"float",role:"value"},contrast:{name:"inContrast",dataType:"float",role:"value"}},bg.webgl1.shaderLibrary.functions.utils={pack:{returnType:"vec4",name:"pack",params:{depth:"float"},body:"\n\t\t\t\tconst vec4 bitSh = vec4(256 * 256 * 256,\n\t\t\t\t\t\t\t\t\t\t256 * 256,\n\t\t\t\t\t\t\t\t\t\t256,\n\t\t\t\t\t\t\t\t\t\t1.0);\n\t\t\t\tconst vec4 bitMsk = vec4(0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t1.0 / 256.0);\n\t\t\t\tvec4 comp = fract(depth * bitSh);\n\t\t\t\tcomp -= comp.xxyz * bitMsk;\n\t\t\t\treturn comp;"},unpack:{returnType:"float",name:"unpack",params:{color:"vec4"},body:"\n\t\t\t\tconst vec4 bitShifts = vec4(1.0 / (256.0 * 256.0 * 256.0),\n\t\t\t\t\t\t\t\t\t\t\t1.0 / (256.0 * 256.0),\n\t\t\t\t\t\t\t\t\t\t\t1.0 / 256.0,\n\t\t\t\t\t\t\t\t\t\t\t1.0);\n\t\t\t\treturn dot(color, bitShifts);"},random:{returnType:"float",name:"random",params:{seed:"vec3",i:"int"},body:"\n\t\t\t\tvec4 seed4 = vec4(seed,i);\n\t\t\t\tfloat dot_product = dot(seed4, vec4(12.9898,78.233,45.164,94.673));\n\t\t\t\treturn fract(sin(dot_product) * 43758.5453);"},texOffset:{returnType:"vec4",name:"texOffset",params:{sampler:"sampler2D",texCoord:"vec2",offset:"vec2",frameSize:"vec2"},body:"\n\t\t\t\treturn texture2D(sampler,texCoord + vec2(offset.x * 1.0/frameSize.x,offset.y * 1.0 / frameSize.y));\n\t\t\t\t"},luminance:{returnType:"float",name:"luminance",params:{color:"vec3"},body:"\n\t\t\t\treturn dot(vec3(0.2126,0.7152,0.0722), color);\n\t\t\t\t"},borderDetection:{returnType:"float",name:"borderDetection",params:{sampler:"sampler2D",texCoord:"vec2",frameSize:"vec2"},body:"\n\t\t\t\tfloat s00 = luminance(texOffset(sampler,texCoord,vec2(-1.0, 1.0),frameSize).rgb);\n\t\t\t\tfloat s10 = luminance(texOffset(sampler,texCoord,vec2(-1.0, 0.0),frameSize).rgb);\n\t\t\t\tfloat s20 = luminance(texOffset(sampler,texCoord,vec2(-1.0,-1.0),frameSize).rgb);\n\t\t\t\tfloat s01 = luminance(texOffset(sampler,texCoord,vec2(-1.0, 1.0),frameSize).rgb);\n\t\t\t\tfloat s21 = luminance(texOffset(sampler,texCoord,vec2( 0.0,-1.0),frameSize).rgb);\n\t\t\t\tfloat s02 = luminance(texOffset(sampler,texCoord,vec2( 1.0, 1.0),frameSize).rgb);\n\t\t\t\tfloat s12 = luminance(texOffset(sampler,texCoord,vec2( 1.0, 0.0),frameSize).rgb);\n\t\t\t\tfloat s22 = luminance(texOffset(sampler,texCoord,vec2( 1.0,-1.0),frameSize).rgb);\n\n\t\t\t\tfloat sx = s00 + 2.0 * s10 + s20 - (s02 + 2.0 * s12 + s22);\n\t\t\t\tfloat sy = s00 + 2.0 * s01 + s02 - (s20 + 2.0 * s21 + s22);\n\n\t\t\t\treturn sx * sx + sy * sy;\n\t\t\t\t"},applyConvolution:{returnType:"vec4",name:"applyConvolution",params:{texture:"sampler2D",texCoord:"vec2",texSize:"vec2",convMatrix:"float[9]",radius:"float"},body:"\n\t\t\t\tvec2 onePixel = vec2(1.0,1.0) / texSize * radius;\n\t\t\t\tvec4 colorSum = \n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2(-1, -1)) * convMatrix[0] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 0, -1)) * convMatrix[1] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 1, -1)) * convMatrix[2] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2(-1, 0)) * convMatrix[3] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 0, 0)) * convMatrix[4] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 1, 0)) * convMatrix[5] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2(-1, 1)) * convMatrix[6] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 0, 1)) * convMatrix[7] +\n\t\t\t\t\ttexture2D(texture, texCoord + onePixel * vec2( 1, 1)) * convMatrix[8];\n\t\t\t\tfloat kernelWeight =\n\t\t\t\t\tconvMatrix[0] +\n\t\t\t\t\tconvMatrix[1] +\n\t\t\t\t\tconvMatrix[2] +\n\t\t\t\t\tconvMatrix[3] +\n\t\t\t\t\tconvMatrix[4] +\n\t\t\t\t\tconvMatrix[5] +\n\t\t\t\t\tconvMatrix[6] +\n\t\t\t\t\tconvMatrix[7] +\n\t\t\t\t\tconvMatrix[8];\n\t\t\t\tif (kernelWeight <= 0.0) {\n\t\t\t\t\tkernelWeight = 1.0;\n\t\t\t\t}\n\t\t\t\treturn vec4((colorSum / kernelWeight).rgb, 1.0);\n\t\t\t\t"}},function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){bg.base.ShaderType.VERTEX=t.VERTEX_SHADER,bg.base.ShaderType.FRAGMENT=t.FRAGMENT_SHADER},setActive:function(t,e){t.useProgram(e&&e.program)},create:function(t){return{program:t.createProgram(),attribLocations:{},uniformLocations:{}}},addShaderSource:function(t,e,n,i){var r=null;if(e&&e.program){var a=t.createShader(n);t.shaderSource(a,i),t.compileShader(a),t.getShaderParameter(a,t.COMPILE_STATUS)?t.attachShader(e.program,a):r=t.getShaderInfoLog(a),t.deleteShader(a)}else r="Could not attach shader. Invalid shader program";return r},link:function(t,e){var n=null;return e&&e.program?(t.linkProgram(e.program),t.getProgramParameter(e.program,t.LINK_STATUS)||(n=t.getProgramInfoLog(e.program))):n="Could not link shader. Invalid shader program",n},initVars:function(t,e,n,i){n.forEach(function(n){e.attribLocations[n]=t.getAttribLocation(e.program,n)}),i.forEach(function(n){e.uniformLocations[n]=t.getUniformLocation(e.program,n)})},setInputBuffer:function(t,e,n,i,r){if(i&&e&&e.program){var a=e.attribLocations[n];-1!=a&&(t.bindBuffer(t.ARRAY_BUFFER,i),t.enableVertexAttribArray(a),t.vertexAttribPointer(a,r,t.FLOAT,!1,0,0))}},disableInputBuffer:function(t,e,n){t.disableVertexAttribArray(e.attribLocations[n])},setValueInt:function(t,e,n,i){t.uniform1i(e.uniformLocations[n],i)},setValueIntPtr:function(t,e,n,i){t.uniform1iv(e.uniformLocations[n],i)},setValueFloat:function(t,e,n,i){t.uniform1f(e.uniformLocations[n],i)},setValueFloatPtr:function(t,e,n,i){t.uniform1fv(e.uniformLocations[n],i)},setValueVector2:function(t,e,n,i){t.uniform2fv(e.uniformLocations[n],i.v)},setValueVector3:function(t,e,n,i){t.uniform3fv(e.uniformLocations[n],i.v)},setValueVector4:function(t,e,n,i){t.uniform4fv(e.uniformLocations[n],i.v)},setValueVector2v:function(t,e,n,i){t.uniform2fv(e.uniformLocations[n],i)},setValueVector3v:function(t,e,n,i){t.uniform3fv(e.uniformLocations[n],i)},setValueVector4v:function(t,e,n,i){t.uniform4fv(e.uniformLocations[n],i)},setValueMatrix3:function(t,e,n,i,r){t.uniformMatrix3fv(e.uniformLocations[n],i,r.m)},setValueMatrix4:function(t,e,n,i,r){t.uniformMatrix4fv(e.uniformLocations[n],i,r.m)},setTexture:function(t,e,n,i,r){i.setActive(r),i.bind(),t.uniform1i(e.uniformLocations[n],r)}},{},t)}(bg.base.ShaderImpl);bg.webgl1.ShaderImpl=t}(),function(){var t={},e=function(e){function n(t){$traceurRuntime.superConstructor(n).call(this,t)}return $traceurRuntime.createClass(n,{getFBO:function(t,e){var n=this.context,i={gl:n,fbo:n.createFramebuffer(),rbo:n.createRenderbuffer(),texture:new bg.base.Texture(n),width:t,height:e,bind:function(){this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,this.fbo)},unbind:function(){this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null)},resize:function(t,n){if(t!=this.width||n!=this.height){this.bind(),this.width=t,this.height=e;var i=this.gl;i.bindRenderbuffer(i.RENDERBUFFER,this.rbo),i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_COMPONENT16,this.width,this.height),i.bindRenderbuffer(i.RENDERBUFFER,null),this.texture.bind(),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,this.width,this.height,0,i.RGBA,i.UNSIGNED_BYTE,null),this.texture.unbind(),this.unbind()}},beginRender:function(){this._currentViewport=this.gl.getParameter(this.gl.VIEWPORT),this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,this.gl.COLOR_ATTACHMENT0,this.gl.TEXTURE_2D,this.texture.texture,0),this.gl.viewport(0,0,this.width,this.height)},endRender:function(){this.gl.viewport(this._currentViewport[0],this._currentViewport[1],this._currentViewport[2],this._currentViewport[3]),this.unbind()},destroy:function(){var t=void 0!==arguments[0]&&arguments[0];this.unbind(),t&&this.texture.destroy(),this.gl.deleteRenderbuffer(this.rbo),this.gl.deleteFramebuffer(this.fbo)}};return n.bindFramebuffer(n.FRAMEBUFFER,i.fbo),n.bindRenderbuffer(n.RENDERBUFFER,i.rbo),n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t,e),n.framebufferRenderbuffer(n.FRAMEBUFFER,n.DEPTH_ATTACHMENT,n.RENDERBUFFER,i.rbo),i.texture.target=bg.base.TextureTarget.TEXTURE_2D,i.texture.create(),i.texture.bind(),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,t,e,0,n.RGBA,n.UNSIGNED_BYTE,null),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.REPEAT),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.REPEAT),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),i.texture.unbind(),i.texture._size=new bg.Vector2(t,e),n.bindFramebuffer(n.FRAMEBUFFER,null),n.bindRenderbuffer(n.RENDERBUFFER,null),i}},{Get:function(e){return t[e]||(t=new n(e)),t}},e)}(bg.app.ContextObject);bg.webgl1.TextureTools=e;var n=null;var i=null;var r=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).call(this),this._fbo=null},{getMapSize:function(t,e,n,i){return{width:Math.max(t.map.size.width,e.map.size.width,n.map.size.width,i.map.size.width),height:Math.max(t.map.size.height,e.map.size.height,n.map.size.height,i.map.size.height)}},mergeMaps:function(t,r,a,s,o){var u=bg.base.Shader.GetActiveShader(),h=this.getMapSize(r,a,s,o),l=e.Get(t);this._fbo=l.getFBO(h.width,h.height);var c=this._fbo,f=function(t){if(!i){if((i=new bg.base.Shader(t)).addShaderSource(bg.base.ShaderType.VERTEX,"\n attribute vec3 inPosition;\n attribute vec2 inTexCoord;\n\n varying vec2 fsTexCoord;\n\n void main() {\n fsTexCoord = inTexCoord;\n gl_Position = vec4(inPosition,1.0);\n }\n "),i.addShaderSource(bg.base.ShaderType.FRAGMENT,"\n precision mediump float;\n varying vec2 fsTexCoord;\n\n uniform sampler2D inT0;\n uniform int inT0Channel;\n uniform sampler2D inT1;\n uniform int inT1Channel;\n uniform sampler2D inT2;\n uniform int inT2Channel;\n uniform sampler2D inT3;\n uniform int inT3Channel;\n\n float mapChannel(sampler2D tex, int channel) {\n vec4 color = texture2D(tex,fsTexCoord);\n if (channel==0) {\n return color.r;\n }\n else if (channel==1) {\n return color.g;\n }\n else if (channel==2) {\n return color.b;\n }\n else if (channel==3) {\n return color.a;\n }\n else {\n return 0.0;\n }\n }\n\n void main() {\n vec4 result;\n result.r = mapChannel(inT0,inT0Channel);\n result.g = mapChannel(inT1,inT1Channel);\n result.b = mapChannel(inT2,inT2Channel);\n result.a = mapChannel(inT3,inT3Channel);\n gl_FragColor = result;\n }\n "),!i.link())throw new Error("Error generating texture merger shader.");i.initVars(["inPosition","inTexCoord"],["inT0","inT1","inT2","inT3","inT0Channel","inT1Channel","inT2Channel","inT3Channel"])}return i}.apply(this,[t]),v=function(t){return n||((n=new bg.base.PolyList(t)).vertex=[1,1,0,-1,1,0,-1,-1,0,1,-1,0],n.texCoord0=[1,1,0,1,0,0,1,0],n.index=[0,1,2,2,3,0],n.build()),n}.apply(this,[t]);return c.beginRender(),t.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),t.disable(t.CULL_FACE),f.setActive(),f.setInputBuffer("inPosition",v.vertexBuffer,3),f.setInputBuffer("inTexCoord",v.texCoord0Buffer,2),f.setTexture("inT0",r.map,bg.base.TextureUnit.TEXTURE_0),f.setTexture("inT1",a.map,bg.base.TextureUnit.TEXTURE_1),f.setTexture("inT2",s.map,bg.base.TextureUnit.TEXTURE_2),f.setTexture("inT3",o.map,bg.base.TextureUnit.TEXTURE_3),f.setValueInt("inT0Channel",r.channel),f.setValueInt("inT1Channel",a.channel),f.setValueInt("inT2Channel",s.channel),f.setValueInt("inT3Channel",o.channel),v.draw(),f.disableInputBuffer("inPosition"),f.disableInputBuffer("inTexCoord"),f.clearActive(),c.endRender(),u&&u.setActive(),c.texture},destroy:function(t){this._fbo.destroy()}},{},t)}(bg.tools.TextureMergerImpl);bg.webgl1.TextureMergerImpl=r}(),function(){var t=function(t){return $traceurRuntime.createClass(function t(){$traceurRuntime.superConstructor(t).apply(this,arguments)},{initFlags:function(t){bg.base.TextureWrap.REPEAT=t.REPEAT,bg.base.TextureWrap.CLAMP=t.CLAMP_TO_EDGE,bg.base.TextureWrap.MIRRORED_REPEAT=t.MIRRORED_REPEAT,bg.base.TextureFilter.NEAREST_MIPMAP_NEAREST=t.NEAREST_MIPMAP_NEAREST,bg.base.TextureFilter.LINEAR_MIPMAP_NEAREST=t.LINEAR_MIPMAP_NEAREST,bg.base.TextureFilter.NEAREST_MIPMAP_LINEAR=t.NEAREST_MIPMAP_LINEAR,bg.base.TextureFilter.LINEAR_MIPMAP_LINEAR=t.LINEAR_MIPMAP_LINEAR,bg.base.TextureFilter.NEAREST=t.NEAREST,bg.base.TextureFilter.LINEAR=t.LINEAR,bg.base.TextureTarget.TEXTURE_2D=t.TEXTURE_2D,bg.base.TextureTarget.CUBE_MAP=t.TEXTURE_CUBE_MAP,bg.base.TextureTarget.POSITIVE_X_FACE=t.TEXTURE_CUBE_MAP_POSITIVE_X,bg.base.TextureTarget.NEGATIVE_X_FACE=t.TEXTURE_CUBE_MAP_NEGATIVE_X,bg.base.TextureTarget.POSITIVE_Y_FACE=t.TEXTURE_CUBE_MAP_POSITIVE_Y,bg.base.TextureTarget.NEGATIVE_Y_FACE=t.TEXTURE_CUBE_MAP_NEGATIVE_Y,bg.base.TextureTarget.POSITIVE_Z_FACE=t.TEXTURE_CUBE_MAP_POSITIVE_Z,bg.base.TextureTarget.NEGATIVE_Z_FACE=t.TEXTURE_CUBE_MAP_NEGATIVE_Z},requireMipmaps:function(t,e){return t==bg.base.TextureFilter.NEAREST_MIPMAP_NEAREST||t==bg.base.TextureFilter.LINEAR_MIPMAP_NEAREST||t==bg.base.TextureFilter.NEAREST_MIPMAP_LINEAR||t==bg.base.TextureFilter.LINEAR_MIPMAP_LINEAR||e==bg.base.TextureFilter.NEAREST_MIPMAP_NEAREST||e==bg.base.TextureFilter.LINEAR_MIPMAP_NEAREST||e==bg.base.TextureFilter.NEAREST_MIPMAP_LINEAR||e==bg.base.TextureFilter.LINEAR_MIPMAP_LINEAR},create:function(t){return t.createTexture()},setActive:function(t,e){t.activeTexture(t.TEXTURE0+e)},bind:function(t,e,n){t.bindTexture(e,n)},unbind:function(t,e){this.bind(t,e,null)},setTextureWrapX:function(t,e,n,i){t.texParameteri(e,t.TEXTURE_WRAP_S,i)},setTextureWrapY:function(t,e,n,i){t.texParameteri(e,t.TEXTURE_WRAP_T,i)},setImage:function(t,e,n,i,r,a,s){s&&t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!0),t.texParameteri(e,t.TEXTURE_MIN_FILTER,n),t.texParameteri(e,t.TEXTURE_MAG_FILTER,i),t.texImage2D(e,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),this.requireMipmaps(n,i)&&t.generateMipmap(e)},setImageRaw:function(t,e,n,i,r,a,s,o,u,h){u||(u=t.RGBA),h||(h=t.UNSIGNED_BYTE),h==bg.base.RenderSurfaceFormat.FLOAT&&(n=bg.base.TextureFilter.NEAREST,i=bg.base.TextureFilter.NEAREST),t.texParameteri(e,t.TEXTURE_MIN_FILTER,n),t.texParameteri(e,t.TEXTURE_MAG_FILTER,i),t.texImage2D(e,0,u,a,s,0,u,h,o),this.requireMipmaps(n,i)&&t.generateMipmap(e)},setTextureFilter:function(t,e,n,i){t.texParameteri(e,t.TEXTURE_MIN_FILTER,n),t.texParameteri(e,t.TEXTURE_MAG_FILTER,i)},setCubemapImage:function(t,e,n){t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!1),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,bg.base.TextureFilter.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,bg.base.TextureFilter.LINEAR),t.texImage2D(e,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)},setCubemapRaw:function(t,e,n,i,r){var a=t.RGBA,s=t.UNSIGNED_BYTE;t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,bg.base.TextureFilter.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,bg.base.TextureFilter.LINEAR),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,!1),t.texImage2D(e,0,a,i,r,0,a,s,n)},setVideo:function(t,e,n,i,r){t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,r),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(e,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(e,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texImage2D(e,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,i)},updateVideoData:function(t,e,n,i){t.bindTexture(e,n),t.texImage2D(e,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,i),t.bindTexture(e,null)},destroy:function(t,e){t.deleteTexture(this._texture)}},{},t)}(bg.base.TextureImpl);bg.webgl1.TextureImpl=t}();
|