shithub: h264bsd

Download patch

ref: 634babeda4a9397bbb73c51b237e48a53ea00b03
parent: ccbde503b2ccffdcd94dbadd7d03d045abed3fe1
author: Sam Leitch <sam@luceva.net>
date: Wed Jan 30 16:53:54 EST 2019

Added test_node.js to js and wasm. Made h264bsd_decoder module aware (ES5 for now). Updated js to compile with emscripten 1.38. Removed flex version.

diff: cannot open a/flex/src/h264bsd//null: 'a/flex/src/h264bsd//null' does not exist diff: cannot open a/flex/src//null: 'a/flex/src//null' does not exist diff: cannot open a/flex/test//null: 'a/flex/test//null' does not exist diff: cannot open a/flex//null: 'a/flex//null' does not exist
--- a/.gitignore
+++ b/.gitignore
@@ -9,9 +9,6 @@
 node_modules
 js/h264bsd_asm.js.map
 *.suo
-flex/bin/
-*.swf
-*.swc
 .settings
 *.xcworkspacedata
 *.xcuserstate
@@ -28,3 +25,4 @@
 posix/obj/
 test/*.yuv
 test/raw/
+test/output/
--- a/README.md
+++ b/README.md
@@ -21,6 +21,5 @@
 * *js* JavaScript version of the library created using [emscripten](http://emscripten.org/).
 * *wasm* JavaScript version using WebAssembly created using [emscripten](http://emscripten.org/).
 * *ios* XCode project and objective-c wrapper classes.
-* *flex* ActionScript version of the library built using [CrossBridge](http://adobe-flash.github.io/crossbridge/).
 
 This project was heavily inspired by [Broadway.js](https://github.com/mbebenita/Broadway). Much love to them for pioneering the idea.
--- a/flex/.actionScriptProperties
+++ /dev/null
@@ -1,22 +1,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<actionScriptProperties analytics="false" mainApplicationPath="h264bsd.as" projectUUID="42d635ed-f4ca-4d17-a420-c8d171b0c706" version="10">
-  <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="false" fteInMXComponents="false" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
-    <compilerSourcePath/>
-    <libraryPath defaultLinkType="0">
-      <libraryPathEntry kind="4" path="">
-        <excludedEntries>
-          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flex.swc" useDefaultLinkType="false"/>
-          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/core.swc" useDefaultLinkType="false"/>
-        </excludedEntries>
-      </libraryPathEntry>
-      <libraryPathEntry kind="1" linkType="1" path="lib"/>
-    </libraryPath>
-    <sourceAttachmentPath/>
-  </compiler>
-  <applications>
-    <application path="h264bsd.as"/>
-  </applications>
-  <modules/>
-  <buildCSSFiles/>
-  <flashCatalyst validateFlashCatalystCompatibility="false"/>
-</actionScriptProperties>
--- a/flex/.flexLibProperties
+++ /dev/null
@@ -1,8 +1,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flexLibProperties includeAllClasses="true" useMultiPlatformConfig="false" version="3">
-  <includeClasses>
-    <classEntry path="h264bsd.Decoder"/>
-  </includeClasses>
-  <includeResources/>
-  <namespaceManifests/>
-</flexLibProperties>
--- a/flex/.project
+++ /dev/null
@@ -1,18 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>h264bsd</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>com.adobe.flexbuilder.project.flexbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>com.adobe.flexbuilder.project.flexlibnature</nature>
-		<nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
-	</natures>
-</projectDescription>
--- a/flex/Makefile
+++ /dev/null
@@ -1,36 +1,0 @@
-SOURCES = $(wildcard ../src/*.c) main.c
-AS_SOURCES = $(wildcard src/h264bsd/*.as)
-
-FLASCC:=X
-FLEX:=X
-BASE_CFLAGS:=-DFLASCC -O4 -I $(FLASCC)/usr/include
-
-swc: bin/h264bsd.swc
-
-test: test/h264test.swf
-
-lib/h264bsd_asm.swc: $(SOURCES)
-	@if [ -d $(FLASCC)/usr/bin ] ; then true ; \
-	else echo "Couldn't locate FLASCC sdk directory, please invoke make with \"make FLASCC=/path/to/FLASCC/sdk ...\"" ; exit 1 ; \
-	fi
-
-	mkdir -p lib
-	"$(FLASCC)/usr/bin/gcc" $(BASE_CFLAGS) $(SOURCES) -emit-swc=h264bsd_asm -o lib/h264bsd_asm.swc
-
-bin/h264bsd.swc: lib/h264bsd_asm.swc $(AS_SOURCES)
-	@if [ -d "$(FLEX)/bin" ] ; then true ; \
-	else echo "Couldn't locate Flex sdk directory, please invoke make with \"make FLEX=/path/to/flex  ...\"" ; exit 1 ; \
-	fi
-
-	mkdir -p bin
-	"$(FLEX)/bin/compc" -library-path=lib/h264bsd_asm.swc -source-path=src -include-sources=src -o bin/h264bsd.swc
-
-test/h264test.swf: test/h264test.mxml bin/h264bsd.swc
-	@if [ -d "$(FLEX)/bin" ] ; then true ; \
-	else echo "Couldn't locate Flex sdk directory, please invoke make with \"make FLEX=/path/to/flex  ...\"" ; exit 1 ; \
-	fi
-
-	"$(FLEX)/bin/mxmlc" -static-link-runtime-shared-libraries -compiler.omit-trace-statements=false -library-path+=bin/h264bsd.swc -library-path+=$(FLEX)/frameworks/libs/ -debug=true test/h264test.mxml -o test/h264test.swf
-
-clean:
-	rm -f *.swc *.swf bin/*.swc *.bc *.exe test/*.swf lib/*.swc
--- a/flex/Rakefile
+++ /dev/null
@@ -1,48 +1,0 @@
-SOURCES = FileList["../src/*.c", "main.c"]
-AS_SOURCES = FileList["src/h264bsd/*.as"]
-
-FLASCC = ENV["FLASCC"]
-FLEX = ENV["FLEX"]
-BASE_CFLAGS = ENV["BASE_CFLAGS"] || "-DFLASCC -O4 -I #{FLASCC}/usr/include"
-
-def check_flascc()
-    unless File.directory?("#{FLASCC}/usr/bin")
-        fail("Couldn't locate FLASCC sdk directory, please invoke make with \"rake FLASCC=/path/to/FLASCC/sdk ...\"")
-    end
-end
-
-def check_flex()
-    unless File.directory?("#{FLEX}/bin")
-        fail("Couldn't locate Flex sdk directory, please invoke make with \"rake FLEX=/path/to/flex ...\"")
-    end
-end
-
-task :default => :test
-
-task :swc => ["bin/h264bsd.swc"]
-
-task :test => ["test/h264test.swf"]
-
-directory "lib"
-
-directory "bin"
-
-file "lib/h264bsd_asm.swc" => ["lib"] + SOURCES do
-    check_flascc()
-    sh("\"#{FLASCC}/usr/bin/gcc\" #{BASE_CFLAGS} #{SOURCES} -emit-swc=h264bsd_asm -o lib/h264bsd_asm.swc");
-end
-
-file "bin/h264bsd.swc" => ["lib/h264bsd_asm.swc", "bin"] + AS_SOURCES do
-    check_flex()
-    sh("\"#{FLEX}/bin/compc\" -library-path=lib/h264bsd_asm.swc -source-path=src -include-sources=src -o bin/h264bsd.swc")
-end
-
-file "test/h264test.swf" => ["test/h264test.mxml", "bin/h264bsd.swc"] do
-    check_flex()
-    sh("\"#{FLEX}/bin/mxmlc\" -static-link-runtime-shared-libraries -compiler.omit-trace-statements=false -library-path+=bin/h264bsd.swc -library-path+=#{FLEX}/frameworks/libs/ -debug=true test/h264test.mxml -o test/h264test.swf")
-end
-
-task :clean do
-    FileUtils.rm_rf(["lib", "bin"])
-    FileUtils.rm_f(FileList["*.swc", "*.swf", "*.bc", "*.exe", "test/*.swf"])
-end
--- a/flex/main.c
+++ /dev/null
@@ -1,6 +1,0 @@
-#include "AS3/AS3.h"
-
-int main()
-{
-     AS3_GoAsync();
-}
\ No newline at end of file
--- a/flex/src/h264bsd/CroppingInfo.as
+++ /dev/null
@@ -1,52 +1,0 @@
-package h264bsd
-{
-    public class CroppingInfo 
-    {
-        private var _width:int = 0;
-        private var _height:int = 0;
-        private var _top:int = 0;
-        private var _left:int = 0;
-        private var _widthUncropped:int = 0;
-        private var _heightUncropped:int = 0;
-        
-        public function CroppingInfo(widthUncropped:int, heightUncropped:int, widthCrop:int, heightCrop:int, top:int, left:int) {
-            _widthUncropped = widthUncropped;
-            _heightUncropped = heightUncropped;
-            _width = widthCrop;
-            _height = heightCrop;
-            
-            if (_width == 0)
-                _width = _widthUncropped;
-            
-            if (_height == 0)
-                _height = _heightUncropped;
-            
-            _top = top;
-            _left = left;
-        }
-        
-        public function get uncroppedWidth():int {
-            return _widthUncropped;
-        }
-        
-        public function get uncroppedHeight():int {
-            return _heightUncropped;
-        }
-        
-        public function get width():int {
-            return _width;    
-        }
-        
-        public function get height():int {
-            return _height;    
-        }
-        
-        public function get top():int {
-            return _top;    
-        }
-        
-        public function get left():int {
-            return _left;    
-        }
-    }
-}
--- a/flex/src/h264bsd/Decoder.as
+++ /dev/null
@@ -1,303 +1,0 @@
-package h264bsd
-{
-    import flash.display.BitmapData;
-    import flash.events.EventDispatcher;
-    import flash.filters.ColorMatrixFilter;
-    import flash.geom.ColorTransform;
-    import flash.geom.Matrix;
-    import flash.geom.Point;
-    import flash.geom.Rectangle;
-    import flash.utils.ByteArray;
-    import flash.utils.Endian;
-    import flash.utils.getQualifiedClassName;
-    
-    import h264bsd_asm.CModule;
-    
-    [Event(name = "pictureReady", type = "pureweb.client.ui.H264DecoderEvent")]
-    [Event(name = "headersReady", type = "pureweb.client.ui.H264DecoderEvent")]
-    public class Decoder extends EventDispatcher
-    {
-        public static const RDY:int = 0;
-        public static const PIC_RDY:int = 1;
-        public static const HDRS_RDY:int = 2;
-        public static const ERROR:int = 3;
-        public static const PARAM_SET_ERROR:int = 4;
-        public static const MEMALLOC_ERROR:int = 5;
-        public static const NO_INPUT:int = 1024;
-        
-        private var _storagePtr:int = 0;
-        private var _released:Boolean = false;
-        private var _ready:Boolean = false;
-        
-        private var _h264bsdAlloc:int = 0;
-        private var _h264bsdInit:int = 0;
-        private var _h264bsdPicWidth:int = 0;
-        private var _h264bsdPicHeight:int = 0;
-        private var _h264bsdNextOutputPicture:int = 0;
-        private var _h264bsdNextOutputPictureBGRA:int = 0;
-        private var _h264bsdNextOutputPictureYCbCrA:int = 0;
-        private var _h264bsdDecode:int = 0;
-        private var _h264bsdShutdown:int = 0;
-        private var _h264bsdFree:int = 0;
-        private var _h264bsdCroppingParams:int = 0;
-        
-        private var _inputPtr:int = 0;
-        private var _inputOffset:int = 0;
-        private var _inputLength:int = 0;
-        
-        public function Decoder() {
-            
-            buildFunctionTable();
-            initStorage();
-            clearInputQueue();
-            _ready = false;
-            
-        }
-        
-        public function release():void {
-            if (_released) return;
-            clearInputQueue();
-            freeStorage();
-            _released = true;
-        }
-        
-        public function queueInput(data:ByteArray):void {
-            if(data == null || data.bytesAvailable <= 0) return;
-            
-            if(_inputPtr != 0) {
-                var combinedData:ByteArray = new ByteArray();
-                CModule.readBytes(_inputPtr + _inputOffset, _inputLength - _inputOffset, combinedData);
-                
-                combinedData.writeBytes(data);
-                combinedData.position= 0;
-                data = combinedData;
-            }
-            
-            _inputLength = data.bytesAvailable;
-            _inputPtr = CModule.malloc(_inputLength);
-            _inputOffset = 0;
-            
-            CModule.writeBytes(_inputPtr, _inputLength, data);
-        }
-        
-        public function decode():int {
-            if (_inputPtr == 0) return NO_INPUT;
-            
-            var bytesReadPtr:int = CModule.malloc(4);
-            var dataPtr:int = _inputPtr + _inputOffset;
-            var length:int = _inputLength - _inputOffset;
-            
-            var args:Vector.<int> = new <int>[_storagePtr, dataPtr, length, 0, bytesReadPtr];
-            var result:int = CModule.callI(_h264bsdDecode, args);
-            
-            switch(result)
-            {
-                case Decoder.PIC_RDY:
-                    dispatchEvent(new DecoderEvent(DecoderEvent.PICTURE_READY));
-                    break;
-                case Decoder.HDRS_RDY:
-                    dispatchEvent(new DecoderEvent(DecoderEvent.HEADERS_READY));
-                    break;
-            }
-            
-            var bytesRead:int = CModule.read32(bytesReadPtr);
-            _inputOffset += bytesRead;
-            
-            if(_inputOffset >= _inputLength) clearInputQueue();
-            
-            if (bytesReadPtr != 0) CModule.free(bytesReadPtr);
-            
-            return result;
-        }
-        
-        public function getNextOutputPictureBytesBGRA():ByteArray {
-            var picIdPtr:int = CModule.malloc(4);
-            var isIdrPicPtr:int = CModule.malloc(4);
-            var numErrMbsPtr:int = CModule.malloc(4);
-            
-            var bytesPtr:int = 0;
-            var args:Vector.<int> = new <int>[_storagePtr, picIdPtr, isIdrPicPtr, numErrMbsPtr];
-            bytesPtr = CModule.callI(_h264bsdNextOutputPictureBGRA, args);
-            
-            var bytes:ByteArray = new ByteArray();
-            bytes.endian = Endian.LITTLE_ENDIAN;
-            CModule.readBytes(bytesPtr, outputByteLengthRGBA, bytes);
-            bytes.position = 0;
-            
-            if (picIdPtr != 0) CModule.free(picIdPtr);
-            if (isIdrPicPtr != 0) CModule.free(isIdrPicPtr);
-            if (numErrMbsPtr != 0) CModule.free(numErrMbsPtr);
-            
-            return bytes;
-        }
-        
-        public function getNextOutputPictureBytesYCbCrA():ByteArray {
-            var picIdPtr:int = CModule.malloc(4);
-            var isIdrPicPtr:int = CModule.malloc(4);
-            var numErrMbsPtr:int = CModule.malloc(4);
-            
-            var bytesPtr:int = 0;
-            var args:Vector.<int> = new <int>[_storagePtr, picIdPtr, isIdrPicPtr, numErrMbsPtr];
-            bytesPtr = CModule.callI(_h264bsdNextOutputPictureYCbCrA, args);
-            
-            var bytes:ByteArray = new ByteArray();
-            bytes.endian = Endian.LITTLE_ENDIAN;
-            CModule.readBytes(bytesPtr, outputByteLengthRGBA, bytes);
-            bytes.position = 0;
-            
-            if (picIdPtr != 0) CModule.free(picIdPtr);
-            if (isIdrPicPtr != 0) CModule.free(isIdrPicPtr);
-            if (numErrMbsPtr != 0) CModule.free(numErrMbsPtr);
-            
-            return bytes;
-        }
-        
-        public function getNextOutputPictureBytes():ByteArray {
-            var picIdPtr:int = CModule.malloc(4);
-            var isIdrPicPtr:int = CModule.malloc(4);
-            var numErrMbsPtr:int = CModule.malloc(4);
-            
-            var bytesPtr:int = 0;
-            var args:Vector.<int> = new <int>[_storagePtr, picIdPtr, isIdrPicPtr, numErrMbsPtr];
-            bytesPtr = CModule.callI(_h264bsdNextOutputPicture, args);
-            
-            var bytes:ByteArray = new ByteArray();
-            bytes.endian = Endian.LITTLE_ENDIAN;
-            CModule.readBytes(bytesPtr, outputByteLength, bytes);
-            bytes.position = 0;
-            
-            if (picIdPtr != 0) CModule.free(picIdPtr);
-            if (isIdrPicPtr != 0) CModule.free(isIdrPicPtr);
-            if (numErrMbsPtr != 0) CModule.free(numErrMbsPtr);
-            
-            return bytes;
-        }
-        
-        public function drawNextOutputPicture(target:BitmapData, transform:Matrix = null):void
-        {
-            if(target == null) return;
-            
-            var outputPictureBytes:ByteArray = getNextOutputPictureBytesYCbCrA();
-            var cinfo:CroppingInfo = getCroppingInfo();
-            
-            var width:int = cinfo.uncroppedWidth;
-            var height:int = cinfo.uncroppedHeight;
-            
-            var outputPicture:BitmapData = new BitmapData(width, height);
-            outputPicture.setPixels(new Rectangle(0,0, width, height), outputPictureBytes);
-            
-            var bt601Filter:ColorMatrixFilter = new ColorMatrixFilter([
-                1.596, 0, 1.164, 0, -222.912,
-                -.813, -.392, 1.164, 0, 135.616,
-                0, 2.017, 1.164, 0, -276.8,
-                0, 0, 0, 1, 0
-            ]);
-            
-            
-            var tempData:BitmapData = new BitmapData(cinfo.width, cinfo.height);
-            tempData.lock();
-            target.lock();
-            
-            // Cropped and color converted
-            tempData.applyFilter( outputPicture, new Rectangle(0, 0, cinfo.width, cinfo.height), new Point(0, 0), bt601Filter);
-            
-            // Translated and scaled
-            target.draw(tempData, transform, null, null, null, true);
-            
-            tempData.unlock();
-            target.unlock();   
-			
-			outputPicture.dispose();
-			tempData.dispose();
-        }
-
-        private function get outputByteLength():int { 
-            return outputWidth * outputHeight * 3 / 2;
-        }
-        
-        private function get outputByteLengthRGBA():int { 
-            return outputWidth * outputHeight * 4;
-        }
-        
-        private function get outputWidth():int {
-            var widthMB:int = CModule.callI(_h264bsdPicWidth, new <int>[_storagePtr]);
-            return widthMB * 16;
-        }
-        
-        private function get outputHeight():int {
-            var heightMB:int = CModule.callI(_h264bsdPicHeight, new <int>[_storagePtr]);
-            return heightMB * 16;
-        }
-        
-        public function getCroppingInfo():CroppingInfo {
-            var croppingFlagPtr:int = CModule.malloc(4);
-            var leftOffsetPtr:int = CModule.malloc(4);
-            var widthPtr:int = CModule.malloc(4);
-            var topOffsetPtr:int = CModule.malloc(4);
-            var heightPtr:int = CModule.malloc(4);
-            
-            var args:Vector.<int> = new <int>[_storagePtr, croppingFlagPtr, leftOffsetPtr, widthPtr, topOffsetPtr, heightPtr];
-            CModule.callI(_h264bsdCroppingParams, args);
-            
-            // XXX: Cropping info appears to be broken
-            var result:CroppingInfo = new CroppingInfo(outputWidth, outputHeight, CModule.read32(widthPtr), CModule.read32(heightPtr), CModule.read32(topOffsetPtr), CModule.read32(leftOffsetPtr));
-            
-            CModule.free(croppingFlagPtr);
-            CModule.free(leftOffsetPtr);
-            CModule.free(widthPtr);
-            CModule.free(topOffsetPtr);
-            CModule.free(heightPtr);
-            
-            return result;
-        }
-        
-        private function buildFunctionTable():void {
-            _h264bsdAlloc = CModule.getPublicSymbol("h264bsdAlloc");
-            _h264bsdInit = CModule.getPublicSymbol("h264bsdInit");
-            _h264bsdPicWidth = CModule.getPublicSymbol("h264bsdPicWidth");
-            _h264bsdPicHeight = CModule.getPublicSymbol("h264bsdPicHeight");
-            _h264bsdNextOutputPicture = CModule.getPublicSymbol("h264bsdNextOutputPicture");
-            _h264bsdNextOutputPictureBGRA = CModule.getPublicSymbol("h264bsdNextOutputPictureBGRA");
-            _h264bsdNextOutputPictureYCbCrA = CModule.getPublicSymbol("h264bsdNextOutputPictureYCbCrA");
-            _h264bsdDecode = CModule.getPublicSymbol("h264bsdDecode");
-            _h264bsdShutdown = CModule.getPublicSymbol("h264bsdShutdown");
-            _h264bsdFree = CModule.getPublicSymbol("h264bsdFree");
-            _h264bsdCroppingParams = CModule.getPublicSymbol("h264bsdCroppingParams");
-            
-            if (_h264bsdAlloc == 0 ||
-                _h264bsdInit == 0 ||
-                _h264bsdPicWidth == 0 ||
-                _h264bsdPicHeight == 0 ||
-                _h264bsdNextOutputPicture == 0 ||
-                _h264bsdDecode == 0 ||
-                _h264bsdShutdown == 0 ||
-                _h264bsdFree == 0 ||
-                _h264bsdCroppingParams == 0 || 
-                _h264bsdNextOutputPictureBGRA == 0 ||
-                _h264bsdNextOutputPictureYCbCrA == 0) {
-                throw new Error("One or more missing entries in h264bsd function table.");
-            }
-        }
-        
-        private function initStorage():void {
-            if(_storagePtr != 0) return;
-            _storagePtr = CModule.callI(_h264bsdAlloc, new <int>[]);
-            CModule.callI(_h264bsdInit, new <int>[_storagePtr, 0]);
-        }
-        
-        private function freeStorage():void {
-            if(_storagePtr == 0) return;
-            
-            CModule.callI(_h264bsdShutdown, new <int>[this._storagePtr]);
-            CModule.callI(_h264bsdFree, new <int>[this._storagePtr]);
-        }
-        
-        private function clearInputQueue():void {
-            if(_inputPtr == 0) return;
-            CModule.free(_inputPtr);
-            _inputPtr = 0;
-            _inputOffset = 0;
-            _inputLength = 0;
-        }
-    }    
-}
--- a/flex/src/h264bsd/DecoderEvent.as
+++ /dev/null
@@ -1,15 +1,0 @@
-package h264bsd
-{
-    import flash.events.Event;
-
-    public class DecoderEvent extends Event
-    {
-        public static const PICTURE_READY:String = "pictureReady";
-        public static const HEADERS_READY:String = "headersReady";
-        
-        public function DecoderEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
-        {
-            super(type, bubbles, cancelable);
-        }
-    }
-}
\ No newline at end of file
--- a/flex/test/.actionScriptProperties
+++ /dev/null
@@ -1,22 +1,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<actionScriptProperties analytics="false" mainApplicationPath="h264test.mxml" projectUUID="2eadc222-6e29-45d3-9261-1774c726c2a0" version="10">
-  <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="" removeUnusedRSL="true" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
-    <compilerSourcePath/>
-    <libraryPath defaultLinkType="0">
-      <libraryPathEntry kind="4" path="">
-        <excludedEntries>
-          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flex.swc" useDefaultLinkType="false"/>
-          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/core.swc" useDefaultLinkType="false"/>
-        </excludedEntries>
-      </libraryPathEntry>
-      <libraryPathEntry kind="3" linkType="1" path="/h264bsd/bin/h264bsd.swc" useDefaultLinkType="false"/>
-    </libraryPath>
-    <sourceAttachmentPath/>
-  </compiler>
-  <applications>
-    <application path="h264test.mxml"/>
-  </applications>
-  <modules/>
-  <buildCSSFiles/>
-  <flashCatalyst validateFlashCatalystCompatibility="false"/>
-</actionScriptProperties>
--- a/flex/test/.flexProperties
+++ /dev/null
@@ -1,2 +1,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flexProperties enableServiceManager="false" flexServerFeatures="0" flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="2"/>
--- a/flex/test/.project
+++ /dev/null
@@ -1,18 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>h264test</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>com.adobe.flexbuilder.project.flexbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>com.adobe.flexbuilder.project.flexnature</nature>
-		<nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
-	</natures>
-</projectDescription>
--- a/flex/test/h264test.mxml
+++ /dev/null
@@ -1,96 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
-               xmlns:s="library://ns.adobe.com/flex/spark" 
-               xmlns:mx="library://ns.adobe.com/flex/mx">
-    <fx:Script>
-        <![CDATA[
-            import h264bsd.CroppingInfo;
-            import h264bsd.Decoder;
-            
-            import mx.core.UIComponent;
-            
-            private function loadFile():void {
-                var fileRef:FileReference = new FileReference();
-                fileRef.addEventListener(Event.SELECT, onFileSelected);
-                fileRef.browse();
-                
-                function onFileSelected(e:Event):void {
-                    e.target.addEventListener(Event.COMPLETE, onFileComplete);
-                    e.target.load();
-                }
-                
-                function onFileComplete(e:Event):void {
-                    loopH264Data(e.target.data as ByteArray);
-                }
-            }
-            
-            private function loopH264Data(data:ByteArray):void {
-                if(data == null) return;
-                
-                var decoder:Decoder = new Decoder();
-                
-                var renderTarget:Bitmap = new Bitmap();
-                var renderComponent:UIComponent = new UIComponent();
-                renderComponent.addChild(renderTarget);
-                main.addElement(renderComponent);
-                
-                decoder.queueInput(data);
-                loopBody();
-                
-                function loopBody():void {
-                    var result:int = decoder.decode();
-                    
-                    switch(result)
-                    {
-                        case Decoder.NO_INPUT:
-                            data.position = 0;
-                            decoder.queueInput(data);
-                            setTimeout(loopBody, 0);
-                            break;
-                        case Decoder.HDRS_RDY:
-                            var cinfo:CroppingInfo = decoder.getCroppingInfo();
-                            renderTarget.bitmapData = new BitmapData(cinfo.width, cinfo.height);
-                            setTimeout(loopBody, 0);
-                            break;
-                        case Decoder.PIC_RDY:
-                            decoder.drawNextOutputPicture(renderTarget.bitmapData);
-                            ++frameCount;
-                            setTimeout(loopBody, 0);
-                            break;
-                        case Decoder.RDY:
-                            loopBody();
-                            break;
-                        default:
-                            throw new Error("An error has occured in the decoder");
-                            break;
-                    }
-                }
-
-                var lastUpdateTime:int = getTimer();
-                var lastFrameCount:int = 0;
-                var frameCount:int = 0;
-                setInterval(updateStatus, 1000);
-
-                function updateStatus():void {
-                    var updateTime:int = getTimer();
-                    var interval:int = updateTime - lastUpdateTime;
-                    lastUpdateTime = updateTime;
-
-                    var frameCountSinceLast:int = frameCount - lastFrameCount;
-                    lastFrameCount = frameCount;
-
-                    var frameRate:Number = frameCountSinceLast * 1000 / interval;
-
-                    statusLabel.text = "FPS: " + frameRate.toFixed(2);
-                }
-            }
-        ]]>
-    </fx:Script>
-    
-    <s:VGroup id="main">
-        <s:HGroup id="statusPanel" verticalAlign="middle">
-            <s:Button label="Load File" click="loadFile()"/>
-            <s:Label id="statusLabel"/>
-        </s:HGroup>
-    </s:VGroup>
-</s:Application>
--- a/js/README.md
+++ b/js/README.md
@@ -26,9 +26,12 @@
 decoder.queueInput(myUint8Array);
 
 // Pump the decode loop
+// Note the recursive call with a setTimeout that gives the browser a chance to refresh the page or process incoming messages.
 var status = H264bsdDecoder.RDY;
-while(status != H264bsdDecoder.NO_INPUT) {
+function decodeLoop() {
+    if (status == H264bsdDecoder.NO_INPUT) return;
     status = decoder.decode();
+    setTimeout(decodeLoop, 0);
 }
 ```
 
--- a/js/Rakefile
+++ b/js/Rakefile
@@ -1,6 +1,7 @@
-EMCC_FLAGS = ENV["EMCC_FLAGS"] || "-O3 -D_ERROR_PRINT"
+require 'json'
 
-EMCC_FLAGS = "-O0 -g4 -D_ASSERT_USED -D_ERROR_PRINT" if ENV["DEBUG"]
+EMCC_FLAGS = ENV["EMCC_FLAGS"] || "-O0 -g4 -D_ASSERT_USED -D_ERROR_PRINT --memory-init-file 0 -s TOTAL_MEMORY=67108864 -s WASM=0" if ENV["DEBUG"]
+EMCC_FLAGS = ENV["EMCC_FLAGS"] || "-O3 -D_ERROR_PRINT --memory-init-file 0 -s TOTAL_MEMORY=67108864 -s WASM=0" unless ENV["DEBUG"]
 
 rule '.o' => ['.c'] do |t|
   sh "emcc #{t.source} -c #{EMCC_FLAGS} -o #{t.name}"
@@ -8,7 +9,10 @@
 
 o_files = FileList["../src/*.c"].gsub(/c$/, 'o')
 
-export_functions = [
+exported_functions = [
+	"_malloc",
+	"_free",
+	"_memcpy",
 	"_h264bsdAlloc",
 	"_h264bsdFree",
 	"_h264bsdInit",
@@ -19,12 +23,17 @@
 	"_h264bsdPicWidth",
 	"_h264bsdPicHeight",
 	"_h264bsdCroppingParams",
-	"_h264bsdCheckValidParamSets",
-	"_h264bsdConvertToRGBA",
 ]
 
+exported_runtime_methods = [
+	'getValue',
+	'setValue'
+]
+
+EXPORT_FLAGS = "-s LINKABLE=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='#{JSON.generate(exported_runtime_methods)}' -s EXPORTED_FUNCTIONS='#{JSON.generate(exported_functions)}'"
+
 file "h264bsd_asm.js" => o_files do                                     
-	sh "emcc #{o_files.join(' ')} --memory-init-file 0 -s TOTAL_MEMORY=67108864 -s EXPORT_ALL=1 #{EMCC_FLAGS} -o h264bsd_asm.js"
+	sh "emcc #{o_files.join(' ')} #{EMCC_FLAGS} #{EXPORT_FLAGS} -o h264bsd_asm.js"
 end
 
 directory "min"
@@ -62,14 +71,19 @@
 task :clean do
 	o_files.each{|o| FileUtils.rm_f(o)}
 	FileUtils.rm_f("h264bsd_asm.js")
-	FileUtils.rm_f("min")
+	FileUtils.rm_rf("min")
 end
 
 desc "Check for prereq tools"
 task :setup do
 	sh("emcc --version") { |ok, res| fail("Can't find emscripten binaries.") unless ok }
-	sh("uglifyjs --version") { |ok, res| fail("Can't find UglifyJS2 tool for minification.") unless ok }
+	sh("uglifyjs --version") { |ok, res| fail("Can't find UglifyJS tool for minification.") unless ok }
 	puts("Ready to go")
+end
+
+task :server do
+	require 'webrick'
+	WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd).start
 end
 
 task :default => [:setup, :compress]
--- a/js/h264bsd_asm.js
+++ b/js/h264bsd_asm.js
@@ -1,17 +1,20 @@
-var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function";var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){return Module["read"](filename,true)};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}))}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeType
\ No newline at end of file
-var asm=(function(global,env,buffer) {
-"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=env._stderr|0;var o=0;var p=0;var q=0;var r=0;var s=global.NaN,t=global.Infinity;var u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0.0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=global.Math.floor;var O=global.Math.abs;var P=global.Math.sqrt;var Q=global.Math.pow;var R=global.Math.cos;var S=global.Math.sin;var T=global.Math.tan;var U=global.Math.acos;var V=global.Math.asin;var W=global.Math.atan;var X=global.Math.atan2;var Y=global.Math.exp;var Z=global.Math.log;var _=global.Math.ceil;var $=global.Math.imul;var aa=global.Math.min;var ba=global.Math.clz32;var ca=env.abort;var da=env.assert;var ea=env.invoke_iiii;var fa=env._fabs;var ga=env._sin;var ha=env._exp;var ia=env._cosf;var ja=env._send;var ka=env._sqrtf;var la=env._cosl;var ma=env._remquof;var na=env._emscripten_set_main_loop_timing;var oa=env._logf;var pa=env._fflush;var qa=env._pwrite;var ra=env._strerror_r;var sa=env._fprintf;var ta=env.__reallyNegative;var ua=env._sbrk;var va=env._nextafter;var wa=env._remquo;var xa=env._emscripten_memcpy_big;var ya=env._fileno;var za=env._sysconf;var Aa=env.___setErrNo;var Ba=env._sinf;var Ca=env._cos;var Da=env._llvm_fma_f64;var Ea=env._log;var Fa=env.___unlock;var Ga=env._write;var Ha=env._emscripten_set_main_loop;var Ia=env.___errno_location;var Ja=env._expf;var Ka=env._fesetround;var La=env._sinl;var Ma=env.___lock;var Na=env._abort;var Oa=env._fwrite;var Pa=env._time;var Qa=env._mkport;var Ra=env._strerror;var Sa=env.__formatString;var Ta=env._sqrt;var Ua=env._ilogb;var Va=0.0;
+var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",abort);Module["quit"]=(function(status){process["exit"](status)});Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=(function(title){document.title=title})}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverri
\ No newline at end of file
+var asm=(/** @suppress {uselessCode} */ function(global,env,buffer) {
+"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.bY|0;var j=env.bZ|0;var k=0;var l=0;var m=0;var n=0;var o=global.NaN,p=global.Infinity;var q=0,r=0,s=0,t=0,u=0.0;var v=global.Math.floor;var w=global.Math.abs;var x=global.Math.sqrt;var y=global.Math.pow;var z=global.Math.cos;var A=global.Math.sin;var B=global.Math.tan;var C=global.Math.acos;var D=global.Math.asin;var E=global.Math.atan;var F=global.Math.atan2;var G=global.Math.exp;var H=global.Math.log;var I=global.Math.ceil;var J=global.Math.imul;var K=global.Math.min;var L=global.Math.max;var M=global.Math.clz32;var N=env.a;var O=env.b;var P=env.c;var Q=env.d;var R=env.e;var S=env.f;var T=env.g;var U=env.h;var V=env.i;var W=env.j;var X=env.k;var Y=env.l;var Z=env.m;var _=env.n;var $=env.o;var aa=env.p;var ba=env.q;var ca=env.r;var da=env.s;var ea=env.t;var fa=env.u;var ga=env.v;var ha=env.w;var ia=env.x;var ja=env.y;var ka=env.z;var la=env.A;var ma=env.B;var na=env.C;var oa=env.D;var pa=env.E;var qa=env.F;var ra=env.G;var sa=env.H;var ta=env.I;var ua=env.J;var va=env.K;var wa=env.L;var xa=env.M;var ya=env.N;var za=env.O;var Aa=env.P;var Ba=env.Q;var Ca=env.R;var Da=env.S;var Ea=env.T;var Fa=env.U;var Ga=env.V;var Ha=env.W;var Ia=env.X;var Ja=env.Y;var Ka=env.Z;var La=env._;var Ma=env.$;var Na=env.aa;var Oa=env.ab;var Pa=env.ac;var Qa=env.ad;var Ra=env.ae;var Sa=env.af;var Ta=env.ag;var Ua=env.ah;var Va=env.ai;var Wa=env.aj;var Xa=env.ak;var Ya=env.al;var Za=env.am;var _a=env.an;var $a=env.ao;var ab=env.ap;var bb=env.aq;var cb=env.ar;var db=env.as;var eb=env.at;var fb=env.au;var gb=env.av;var hb=env.aw;var ib=env.ax;var jb=env.ay;var kb=env.az;var lb=env.aA;var mb=env.aB;var nb=env.aC;var ob=env.aD;var pb=env.aE;var qb=env.aF;var rb=env.aG;var sb=env.aH;var tb=env.aI;var ub=env.aJ;var vb=env.aK;var wb=env.aL;var xb=env.aM;var yb=env.aN;var zb=env.aO;var Ab=env.aP;var Bb=env.aQ;var Cb=env.aR;var Db=env.aS;var Eb=env.aT;var Fb=env.aU;var Gb=env.aV;var Hb=env.aW;var Ib=env.aX;var Jb=env.aY;var Kb=env.aZ;var Lb=env.a_;var Mb=env.a$;var Nb=env.ba;var Ob=env.bb;var Pb=env.bc;var Qb=env.bd;var Rb=env.be;var Sb=env.bf;var Tb=env.bg;var Ub=env.bh;var Vb=env.bi;var Wb=env.bj;var Xb=env.bk;var Yb=env.bl;var Zb=env.bm;var _b=env.bn;var $b=env.bo;var ac=env.bp;var bc=env.bq;var cc=env.br;var dc=env.bs;var ec=env.bt;var fc=env.bu;var gc=env.bv;var hc=env.bw;var ic=env.bx;var jc=env.by;var kc=env.bz;var lc=env.bA;var mc=env.bB;var nc=env.bC;var oc=env.bD;var pc=env.bE;var qc=env.bF;var rc=env.bG;var sc=env.bH;var tc=env.bI;var uc=env.bJ;var vc=env.bK;var wc=env.bL;var xc=env.bM;var yc=env.bN;var zc=env.bO;var Ac=env.bP;var Bc=env.bQ;var Cc=env.bR;var Dc=env.bS;var Ec=env.bT;var Fc=env.bU;var Gc=env.bV;var Hc=env.bW;var Ic=env.bX;var Jc=180896;var Kc=5423776;var Lc=0.0;
 g]){Runtime.funcWrappers[sig]={}}var sigCache=Runtime.funcWrappers[sig];if(!sigCache[func]){sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func,arguments)}}return sigCache[func]}),getCompilerSetting:(function(name){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"}),stackAlloc:(function(size){var ret=STACKTOP;STACKTOP=STACKTOP+size|0;STACKTOP=STACKTOP+15&-16;return ret}),staticAlloc:(function(size){var ret=STATICTOP;STATICTOP=STATICTOP+size|0;STATICTOP=STATICTOP+15&-16;return ret}),dynamicAlloc:(function(size){var ret=DYNAMICTOP;DYNAMICTOP=DYNAMICTOP+size|0;DYNAMICTOP=DYNAMICTOP+15&-16;if(DYNAMICTOP>=TOTAL_MEMORY){var success=enlargeMemory();if(!success)return 0}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=Runtime.stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType==="string")ret=Pointer_stringify(ret);if(stack!==0)Runtime.stackRestore(stack);return ret};var sourceRegex=/^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(jsfunc){var parsed=jsfunc.toString().match(sourceRegex).slice(1);return{arguments:parsed[0],body:parsed[1],returnValue:parsed[2]}}var JSsource={};for(var fun in JSfuncs){if(JSfuncs.hasOwnProperty(fun)){JSsource[fun]=parseJSFunc(JSfuncs[fun])}}cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident);var numericArgs=argTypes.every((function(type){return type==="number"}));var numericRet=returnType!=="string";if(numericRet&&numericArgs){return cfunc}var argNames=argTypes.map((function(x,i){return"$"+i}));var funcstr="(function("+argNames.join(",")+") {";var nargs=argTypes.length;if(!numericArgs){funcstr+="var stack = "+JSsource["stackSave"].body+";";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i];if(type==="number")continue;var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";";funcstr+=convertCode.body+";";funcstr+=arg+"="+convertCode.returnValue+";"}}var cfuncname=parseJSFunc((function(){return cfunc})).returnValue;funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");";if(!numericRet){var strgfy=parseJSFunc((function(){return Pointer_stringify})).returnValue;funcstr+="ret = "+strgfy+"(ret);"}if(!numericArgs){funcstr+=JSsource["stackRestore"].body.replace("()","(stack)")+";"}funcstr+="return ret})";return eval(funcstr)}}))();
\ No newline at end of file
-ig]={}}var sigCache=Runtime.funcWrappers[sig];if(!sigCache[func]){sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func,arguments)}}return sigCache[func]}),getCompilerSetting:(function(name){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"}),stackAlloc:(function(size){var ret=STACKTOP;STACKTOP=STACKTOP+size|0;STACKTOP=STACKTOP+15&-16;return ret}),staticAlloc:(function(size){var ret=STATICTOP;STATICTOP=STATICTOP+size|0;STATICTOP=STATICTOP+15&-16;return ret}),dynamicAlloc:(function(size){var ret=DYNAMICTOP;DYNAMICTOP=DYNAMICTOP+size|0;DYNAMICTOP=DYNAMICTOP+15&-16;if(DYNAMICTOP>=TOTAL_MEMORY){var success=enlargeMemory();if(!success)return 0}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=Runtime.stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType==="string")ret=Pointer_stringify(ret);if(stack!==0)Runtime.stackRestore(stack);return ret};var sourceRegex=/^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(jsfunc){var parsed=jsfunc.toString().match(sourceRegex).slice(1);return{arguments:parsed[0],body:parsed[1],returnValue:parsed[2]}}var JSsource={};for(var fun in JSfuncs){if(JSfuncs.hasOwnProperty(fun)){JSsource[fun]=parseJSFunc(JSfuncs[fun])}}cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident);var numericArgs=argTypes.every((function(type){return type==="number"}));var numericRet=returnType!=="string";if(numericRet&&numericArgs){return cfunc}var argNames=argTypes.map((function(x,i){return"$"+i}));var funcstr="(function("+argNames.join(",")+") {";var nargs=argTypes.length;if(!numericArgs){funcstr+="var stack = "+JSsource["stackSave"].body+";";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i];if(type==="number")continue;var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";";funcstr+=convertCode.body+";";funcstr+=arg+"="+convertCode.returnValue+";"}}var cfuncname=parseJSFunc((function(){return cfunc})).returnValue;funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");";if(!numericRet){var strgfy=parseJSFunc((function(){return Pointer_stringify})).returnValue;funcstr+="ret = "+strgfy+"(ret);"}if(!numericArgs){funcstr+=JSsource["stackRestore"].body.replace("()","(stack)")+";"}funcstr+="return ret})";return eval(funcstr)}}))();Module["cwrap"]=cwrap;Modu
\ No newline at end of file
-var asm=(function(global,env,buffer) {
-"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=env._stderr|0;var o=0;var p=0;var q=0;var r=0;var s=global.NaN,t=global.Infinity;var u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0.0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=global.Math.floor;var O=global.Math.abs;var P=global.Math.sqrt;var Q=global.Math.pow;var R=global.Math.cos;var S=global.Math.sin;var T=global.Math.tan;var U=global.Math.acos;var V=global.Math.asin;var W=global.Math.atan;var X=global.Math.atan2;var Y=global.Math.exp;var Z=global.Math.log;var _=global.Math.ceil;var $=global.Math.imul;var aa=global.Math.min;var ba=global.Math.clz32;var ca=env.abort;var da=env.assert;var ea=env.invoke_iiii;var fa=env._fabs;var ga=env._sin;var ha=env._exp;var ia=env._cosf;var ja=env._send;var ka=env._sqrtf;var la=env._cosl;var ma=env._remquof;var na=env._emscripten_set_main_loop_timing;var oa=env._logf;var pa=env._fflush;var qa=env._pwrite;var ra=env._strerror_r;var sa=env._fprintf;var ta=env.__reallyNegative;var ua=env._sbrk;var va=env._nextafter;var wa=env._remquo;var xa=env._emscripten_memcpy_big;var ya=env._fileno;var za=env._sysconf;var Aa=env.___setErrNo;var Ba=env._sinf;var Ca=env._cos;var Da=env._llvm_fma_f64;var Ea=env._log;var Fa=env.___unlock;var Ga=env._write;var Ha=env._emscripten_set_main_loop;var Ia=env.___errno_location;var Ja=env._expf;var Ka=env._fesetround;var La=env._sinl;var Ma=env.___lock;var Na=env._abort;var Oa=env._fwrite;var Pa=env._time;var Qa=env._mkport;var Ra=env._strerror;var Sa=env.__formatString;var Ta=env._sqrt;var Ua=env._ilogb;var Va=0.0;
+"*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}return null}var ALLOC_NONE=3;function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(1){var u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var PAGE_SIZE=16384;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE=8,STACK_BASE=180896,DYNAMIC_BASE=5423776,DYNAMICTOP_PTR=180640;function
\ No newline at end of file
+var asm=(/** @suppress {uselessCode} */ function(global,env,buffer) {
+"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.bY|0;var j=env.bZ|0;var k=0;var l=0;var m=0;var n=0;var o=global.NaN,p=global.Infinity;var q=0,r=0,s=0,t=0,u=0.0;var v=global.Math.floor;var w=global.Math.abs;var x=global.Math.sqrt;var y=global.Math.pow;var z=global.Math.cos;var A=global.Math.sin;var B=global.Math.tan;var C=global.Math.acos;var D=global.Math.asin;var E=global.Math.atan;var F=global.Math.atan2;var G=global.Math.exp;var H=global.Math.log;var I=global.Math.ceil;var J=global.Math.imul;var K=global.Math.min;var L=global.Math.max;var M=global.Math.clz32;var N=env.a;var O=env.b;var P=env.c;var Q=env.d;var R=env.e;var S=env.f;var T=env.g;var U=env.h;var V=env.i;var W=env.j;var X=env.k;var Y=env.l;var Z=env.m;var _=env.n;var $=env.o;var aa=env.p;var ba=env.q;var ca=env.r;var da=env.s;var ea=env.t;var fa=env.u;var ga=env.v;var ha=env.w;var ia=env.x;var ja=env.y;var ka=env.z;var la=env.A;var ma=env.B;var na=env.C;var oa=env.D;var pa=env.E;var qa=env.F;var ra=env.G;var sa=env.H;var ta=env.I;var ua=env.J;var va=env.K;var wa=env.L;var xa=env.M;var ya=env.N;var za=env.O;var Aa=env.P;var Ba=env.Q;var Ca=env.R;var Da=env.S;var Ea=env.T;var Fa=env.U;var Ga=env.V;var Ha=env.W;var Ia=env.X;var Ja=env.Y;var Ka=env.Z;var La=env._;var Ma=env.$;var Na=env.aa;var Oa=env.ab;var Pa=env.ac;var Qa=env.ad;var Ra=env.ae;var Sa=env.af;var Ta=env.ag;var Ua=env.ah;var Va=env.ai;var Wa=env.aj;var Xa=env.ak;var Ya=env.al;var Za=env.am;var _a=env.an;var $a=env.ao;var ab=env.ap;var bb=env.aq;var cb=env.ar;var db=env.as;var eb=env.at;var fb=env.au;var gb=env.av;var hb=env.aw;var ib=env.ax;var jb=env.ay;var kb=env.az;var lb=env.aA;var mb=env.aB;var nb=env.aC;var ob=env.aD;var pb=env.aE;var qb=env.aF;var rb=env.aG;var sb=env.aH;var tb=env.aI;var ub=env.aJ;var vb=env.aK;var wb=env.aL;var xb=env.aM;var yb=env.aN;var zb=env.aO;var Ab=env.aP;var Bb=env.aQ;var Cb=env.aR;var Db=env.aS;var Eb=env.aT;var Fb=env.aU;var Gb=env.aV;var Hb=env.aW;var Ib=env.aX;var Jb=env.aY;var Kb=env.aZ;var Lb=env.a_;var Mb=env.a$;var Nb=env.ba;var Ob=env.bb;var Pb=env.bc;var Qb=env.bd;var Rb=env.be;var Sb=env.bf;var Tb=env.bg;var Ub=env.bh;var Vb=env.bi;var Wb=env.bj;var Xb=env.bk;var Yb=env.bl;var Zb=env.bm;var _b=env.bn;var $b=env.bo;var ac=env.bp;var bc=env.bq;var cc=env.br;var dc=env.bs;var ec=env.bt;var fc=env.bu;var gc=env.bv;var hc=env.bw;var ic=env.bx;var jc=env.by;var kc=env.bz;var lc=env.bA;var mc=env.bB;var nc=env.bC;var oc=env.bD;var pc=env.bE;var qc=env.bF;var rc=env.bG;var sc=env.bH;var tc=env.bI;var uc=env.bJ;var vc=env.bK;var wc=env.bL;var xc=env.bM;var yc=env.bN;var zc=env.bO;var Ac=env.bP;var Bc=env.bQ;var Cc=env.bR;var Dc=env.bS;var Ec=env.bT;var Fc=env.bU;var Gc=env.bV;var Hc=env.bW;var Ic=env.bX;var Jc=180896;var Kc=5423776;var Lc=0.0;
+// EMSCRIPTEN_START_FUNCS
+function nl(a){a=a|0;var b=0,d=0,e=0;e=Jc;Jc=Jc+16|0;d=e+8|0;b=ol(a,589824,e)|0;do if((b|0)>=0){a=xf(1,2072)|0;if(!a){c[d>>2]=b;Kb(6,d|0)|0;a=0;break}else{c[a>>2]=b;break}}else a=0;while(0);Jc=e;return a|0}function ol(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=Jc;Jc=Jc+48|0;g=h+32|0;f=h+16|0;e=h;if(!(b&4194368))e=0;else{c[e>>2]=d;i=(c[e>>2]|0)+(4-1)&~(4-1);d=c[i>>2]|0;c[e>>2]=i+4;e=d}c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=e;e=Gb(5,f|0)|0;if(!((b&524288|0)==0|(e|0)<0)){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Ya(221,g|0)|0}i=Xf(e)|0;Jc=h;return i|0}function pl(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;j=Jc;Jc=Jc+16|0;f=j;h=a+8|0;d=c[h>>2]|0;g=a+12|0;a:do if((d|0)<(c[g>>2]|0)){b=a+24+d|0;i=7}else{b=a+24|0;c[f>>2]=c[a>>2];c[f+4>>2]=b;c[f+8>>2]=2048;d=Xa(220,f|0)|0;if((d|0)>=1){c[g>>2]=d;c[h>>2]=0;d=0;i=7;break}switch(d|0){case 0:case -2:{b=0;break a}default:{}}c[(Yf()|0)>>2]=0-d;b=0}while(0);if((i|0)==7){c[h>>2]=d+(e[b+8>>1]|0);c[a+4>>2]=c[b+4>>2]}Jc=j;return b|0}function ql(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0;g=c[(Yf()|0)>>2]|0;h=a+16|0;_(h|0);c[(Yf()|0)>>2]=0;f=pl(a)|0;a=c[(Yf()|0)>>2]|0;if(!a){c[(Yf()|0)>>2]=g;if(!f)a=0;else{YE(b|0,f|0,e[f+8>>1]|0|0)|0;a=b}Yb(h|0);c[d>>2]=a;a=0}else Yb(h|0);return a|0}function rl(a){a=a|0;var b=0;b=a+16|0;_(b|0);sl(c[a>>2]|0,0,0)|0;c[a+12>>2]=0;c[a+8>>2]=0;c[a+4>>2]=0;Yb(b|0);return}function sl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=Jc;Jc=Jc+32|0;g=f;e=f+20|0;c[g>>2]=a;c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;d=(Xf(ma(140,g|0)|0)|0)==0;Jc=f;return (d?c[e>>2]|0:-1)|0}function tl(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=nl(a)|0;q=c[(Yf()|0)>>2]|0;do if(!p)a=-1;else{c[(Yf()|0)>>2]=0;j=pl(p)|0;a:do if(!j){a=0;i=0;h=0;g=0}else{o=(d|0)==0;l=0;a=0;i=0;h=0;n=0;g=0;while(1){k=j;while(1){if(o)break;if(Mc[d&7](k)|0){j=k;break}c[(Yf()|0)>>2]=0;k=pl(p)|0;if(!k)break a}if(a>>>0<l>>>0)k=l;else{k=l<<1|1;if(k>>>0>1073741823)break a;l=yf(n,k<<2)|0;if(!l)break a;i=l;g=l;h=l;n=l}l=j+8|0;m=vf(e[l>>1]|0)|0;c[i+(a<<2)>>2]=m;if(!m)break a;a=a+1|0;YE(m|0,j|0,e[l>>1]|0|0)|0;c[(Yf()|0)>>2]=0;j=pl(p)|0;if(!j)break;else l=k}}while(0);gl(p)|0;if(!(c[(Yf()|0)>>2]|0)){c[(Yf()|0)>>2]=q;if(f|0)ul(g,a,4,f);c[b>>2]=g;break}if(!((i|0)==0|(a|0)==0))do{a=a+-1|0;wf(c[i+(a<<2)>>2]|0)}while((a|0)!=0);wf(h);a=-1}while(0);return a|0}function ul(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Jc;Jc=Jc+208|0;j=m;k=m+192|0;h=J(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0<h>>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)vl(a,d,e,f,j);else xl(a,d,e,k,f,0,j);if((f|0)==1){yl(k,1);f=0;break}else{yl(k,b);f=1;break}}else{vl(a,d,e,f,j);wl(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0<g>>>0)}else{f=1;b=1}xl(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1)if(!(c[g>>2]|0))break a;else l=19;else if((f|0)<2)l=19;else{yl(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;wl(k,1);xl(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);yl(k,1);b=c[k>>2]|1;c[k>>2]=b;a=a+i|0;xl(a,d,e,k,n,1,j);f=n}if((l|0)==19){l=0;b=zl(k)|0;wl(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}}while(0);Jc=m;return}function vl(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Jc;Jc=Jc+240|0;l=m;c[l>>2]=a;a:do if((e|0)>1){k=0-b|0;i=a;g=e;e=1;h=a;while(1){i=i+k|0;j=g+-2|0;a=i+(0-(c[f+(j<<2)>>2]|0))|0;if((Nc[d&7](h,a)|0)>-1?(Nc[d&7](h,i)|0)>-1:0)break a;h=l+(e<<2)|0;if((Nc[d&7](a,i)|0)>-1){c[h>>2]=a;g=g+-1|0}else{c[h>>2]=i;a=i;g=j}e=e+1|0;if((g|0)<=1)break a;i=a;h=c[l>>2]|0}}else e=1;while(0);Bl(b,l,e);Jc=m;return}function wl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function xl(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Jc;Jc=Jc+240|0;m=o+232|0;n=o;p=c[e>>2]|0;c[m>>2]=p;j=c[e+4>>2]|0;k=m+4|0;c[k>>2]=j;c[n>>2]=a;a:do if((
\ No newline at end of file
+function vf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Jc;Jc=Jc+16|0;n=w;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=c[44779]|0;d=m>>>a;if(d&3|0){b=(d&1^1)+a|0;a=179156+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[44779]=m&~(1<<b);else{c[g+12>>2]=a;c[d>>2]=g}v=b<<3;c[e+4>>2]=v|3;v=e+v+4|0;c[v>>2]=c[v>>2]|1;v=f;Jc=w;return v|0}l=c[44781]|0;if(k>>>0>l>>>0){if(d|0){b=2<<a;b=d<<a&(b|0-b);b=(b&0-b)+-1|0;i=b>>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=179156+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=m&~(1<<e);c[44779]=a}else{c[d+12>>2]=b;c[a>>2]=d;a=m}v=e<<3;h=v-k|0;c[g+4>>2]=k|3;f=g+k|0;c[f+4>>2]=h|1;c[g+v>>2]=h;if(l|0){e=c[44784]|0;b=l>>>3;d=179156+(b<<1<<2)|0;b=1<<b;if(!(a&b)){c[44779]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[44781]=h;c[44784]=f;v=i;Jc=w;return v|0}g=c[44780]|0;if(g){d=(g&0-g)+-1|0;f=d>>>12&16;d=d>>>f;e=d>>>5&8;d=d>>>e;h=d>>>2&4;d=d>>>h;i=d>>>1&2;d=d>>>i;j=d>>>1&1;j=c[179420+((e|f|h|i|j)+(d>>>j)<<2)>>2]|0;d=j;i=j;j=(c[j+4>>2]&-8)-k|0;while(1){a=c[d+16>>2]|0;if(!a){a=c[d+20>>2]|0;if(!a)break}h=(c[a+4>>2]&-8)-k|0;f=h>>>0<j>>>0;d=a;i=f?a:i;j=f?h:j}h=i+k|0;if(h>>>0>i>>>0){f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[i+28>>2]|0;a=179420+(b<<2)|0;if((i|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[44780]=g&~(1<<b);break}}else{v=f+16|0;c[((c[v>>2]|0)==(i|0)?v:f+20|0)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[i+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[i+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(j>>>0<16){v=j+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[h+4>>2]=j|1;c[h+j>>2]=j;if(l|0){e=c[44784]|0;b=l>>>3;d=179156+(b<<1<<2)|0;b=1<<b;if(!(b&m)){c[44779]=b|m;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[44781]=j;c[44784]=h}v=i+8|0;Jc=w;return v|0}else m=k}else m=k}else m=k}else if(a>>>0<=4294967231){a=a+11|0;k=a&-8;e=c[44780]|0;if(e){f=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)j=31;else{m=(a+1048320|0)>>>16&8;q=a<<m;i=(q+520192|0)>>>16&4;q=q<<i;j=(q+245760|0)>>>16&2;j=14-(i|m|j)+(q<<j>>>15)|0;j=k>>>(j+7|0)&1|j<<1}else j=0;d=c[179420+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;q=61}else{a=0;i=k<<((j|0)==31?0:25-(j>>>1)|0);g=0;while(1){h=(c[d+4>>2]&-8)-k|0;if(h>>>0<f>>>0)if(!h){a=d;f=0;q=65;break a}else{a=d;f=h}q=c[d+20>>2]|0;d=c[d+16+(i>>>31<<2)>>2]|0;g=(q|0)==0|(q|0)==(d|0)?g:q;if(!d){d=g;q=61;break}else i=i<<1}}while(0);if((q|0)==61){if((d|0)==0&(a|0)==0){a=2<<j;a=(a|0-a)&e;if(!a){m=k;break}m=(a&0-a)+-1|0;h=m>>>12&16;m=m>>>h;g=m>>>5&8;m=m>>>g;i=m>>>2&4;m=m>>>i;j=m>>>1&2;m=m>>>j;d=m>>>1&1;a=0;d=c[179420+((g|h|i|j|d)+(m>>>d)<<2)>>2]|0}if(!d){i=a;h=f}else q=65}if((q|0)==65){g=d;while(1){m=(c[g+4>>2]&-8)-k|0;d=m>>>0<f>>>0;f=d?m:f;a=d?g:a;d=c[g+16>>2]|0;if(!d)d=c[g+20>>2]|0;if(!d){i=a;h=f;break}else g=d}}if(((i|0)!=0?h>>>0<((c[44781]|0)-k|0)>>>0:0)?(l=i+k|0,l>>>0>i>>>0):0){g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){f=b+20|0;d=c[f>>2]|0;if(!d){f=b+16|0;d=c[f>>2]|0;if(!d)break;else{b=d;a=f}}else{b=d;a=f}}c[a>>2]=0}else{v=c[i+8>>2]|0;c[v+12>>2]=b;c[b+8>>2]=v}while(0);do if(g){a=c[i+28>>2]|0;d=179420+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=e&~(1<<a);c[44780]=e;break}}else{v=g+16|0;c[((c[v>>2]|0)==(i|0)?v:g+20|0)>>2]=b;if(!b)break}c[b+24>>2]=g;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b}}while(0);b:do if(h>>>0<16){v=h+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[l+4>>2]=h|1;c[l+h>>2]=h;b=h>>>3;if(h>>>0<256){d=179156+(b<<1<<2)|0;a=c[44779]|0;b=1<<b;if(!(a&b)){c[44779]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=l;c[b+12>>2]=l;c[l+8>>2
\ No newline at end of file
 t","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a<i;a++)pre+=" ";Module.print(pre+"^")}function parseNested(){i++;if(func[i]==="K")i++;var parts=[];while(func[i]!=="E"){if(func[i]==="S"){i++;var next=func.indexOf("_",i);var num=func.substring(i,next)||0;parts.push(subs[num]||"?");i=next+1;continue}if(func[i]==="C"){parts.push(parts[parts.length-1]);i+=2;continue}var size=parseInt(func.substr(i));var pre=size.toString().length;if(!size||!pre){i--;break}var curr=func.substr(i+pre,size);parts.push(curr);subs.push(curr);i+=pre+size}i++;return parts}function parse(rawList,limit,allowVoid){limit=limit||Infinity;var ret="",list=[];function flushList(){return"("+list.join(", ")+")"}var name;if(func[i]==="N"){name=parseNested().join("::");limit--;if(limit===0)return rawList?[name]:name}else{if(func[i]==="K"||first&&func[i]==="L")i++;var size=parseInt(func.substr(i));if(size){var pre=size.toString().length;name=func.substr(i+pre,size);i+=pre+size}}first=false;if(func[i]==="I"){i++;var iList=parse(true);var iRet=parse(true,1,true);ret+=iRet[0]+" "+name+"<"+iList.join(", ")+">"}else{ret=name}paramLoop:while(i<func.length&&limit-->0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function enlargeMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.")}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;var totalMemory=64*1024;while(totalMemory<TOTAL_MEMORY||totalMemory<2*TOTAL_STACK){if(totalMemory<16*1024*1024){totalMemory*=2}else{totalMemory+=16*1024*1024}}if(totalMemory!==TOTAL_MEMORY){Module.printErr("increasing TOTAL_MEMORY to "+totalMemory+" to be compliant with the asm.js spec (and given that TOTAL_STACK="+TOTAL_STACK+")");TOTAL_MEMORY=totalMemory}assert(typeof Int32Array!=="undefined"&&typeof Float64Array!=="undefined"&&!!(new Int32Array(1))["subarray"]&&!!(new Int32Array(1))["set"],"JS engine does not provide full typed array support");var buffer=new Ar
\ No newline at end of file
 var asm=(function(global,env,buffer) {
-":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a<i;a++)pre+=" ";Module.print(pre+"^")}function parseNested(){i++;if(func[i]==="K")i++;var parts=[];while(func[i]!=="E"){if(func[i]==="S"){i++;var next=func.indexOf("_",i);var num=func.substring(i,next)||0;parts.push(subs[num]||"?");i=next+1;continue}if(func[i]==="C"){parts.push(parts[parts.length-1]);i+=2;continue}var size=parseInt(func.substr(i));var pre=size.toString().length;if(!size||!pre){i--;break}var curr=func.substr(i+pre,size);parts.push(curr);subs.push(curr);i+=pre+size}i++;return parts}function parse(rawList,limit,allowVoid){limit=limit||Infinity;var ret="",list=[];function flushList(){return"("+list.join(", ")+")"}var name;if(func[i]==="N"){name=parseNested().join("::");limit--;if(limit===0)return rawList?[name]:name}else{if(func[i]==="K"||first&&func[i]==="L")i++;var size=parseInt(func.substr(i));if(size){var pre=size.toString().length;name=func.substr(i+pre,size);i+=pre+size}}first=false;if(func[i]==="I"){i++;var iList=parse(true);var iRet=parse(true,1,true);ret+=iRet[0]+" "+name+"<"+iList.join(", ")+">"}else{ret=name}paramLoop:while(i<func.length&&limit-->0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function enlargeMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.")}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;var totalMemory=64*1024;while(totalMemory<TOTAL_MEMORY||totalMemory<2*TOTAL_STACK){if(totalMemory<16*1024*1024){totalMemory*=2}else{totalMemory+=16*1024*1024}}if(totalMemory!==TOTAL_MEMORY){Module.printErr("increasing TOTAL_MEMORY to "+totalMemory+" to be compliant with the asm.js spec (and given that TOTAL_STACK="+TOTAL_STACK+")");TOTAL_MEMORY=totalMemory}assert(typeof Int32Array!=="undefined"&&typeof Float64Array!=="undefined"&&!!(new Int32Array(1))["subarray"]&&!!(new Int32Array(1))["set"],"JS engine does not provide full typed array support");var buffer=new ArrayBuffer(TOTAL_MEMORY);H
\ No newline at end of file
+AgAAAgIAAgICAAAAAAICAAACAAIAAgICAAIAAAICAgACAgACAgICAgICAAAAAAQAAAAABAAABAQAAAAABAAEAAQAAAQEAAQEBAAAAAAEBAAABAAEAAQEBAAEAAAEBAQABAQABAQEBAQEBAAAAAAIAAAAAAgAAAgIAAAAAAgACAAIAAAICAAICAgAAAAACAgAAAgACAAICAgACAAACAgIAAgIAAgICAgICAgAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAABAAAAAQAAAQAAAAEAAAABAQAAAQEAAQAAAAEAAAABAAEAAQABAAEBAAABAQAAAQEBAAEBAQAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAAAAAAAAIAAAACAAACAAAAAgAAAAICAAACAgACAAAAAgAAAAIAAgACAAIAAgIAAAICAAACAgIAAgICAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAABAAAAAQAAAQAAAAEAAAABAQAAAQEAAQAAAAEAAAABAAEAAQABAAEBAAABAQAAAQEBAAEBAQAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAAAAAAAAIAAAACAAACAAAAAgAAAAICAAACAgACAAAAAgAAAAIAAgACAAIAAgIAAAICAAACAgIAAgICAAAAAAAAAAAAAAAAAAQAAAAEAAAEAAAABAAAAAQEAAAEBAAEAAAABAAAAAQABAAEAAQABAQAAAQEAAAEBAQABAQEAAAAAAAAAAAAAAAIAAAACAAACAAAAAgAAAAICAAACAgACAAAAAgAAAAIAAgACAAIAAgIAAAICAAACAgIAAgICAAAAAAAAAAAAAAAEAAAABAAABAAAAAQAAAAEBAAABAQABAAAAAQAAAAEAAQABAAEAAQEAAAEBAAABAQEAAQEBAAAAAAAAAAAAAAACAAAAAgAAAgAAAAIAAAACAgAAAgIAAgAAAAIAAAACAAIAAgACAAICAAACAgAAAgICAAICAgBAQICAgICAgECAgICAgIBAAAAAAAAAgABAAAAAQACAAAACAAAAAoAAQAIAAEACgAAAAAAABAAAAAAAAAAEAAAQAAAAEAQAABAAAAAQBAAAAAAAAAAAEAAIAAAACAAQAAAgAAAAIBAACCAAAAggEAAAAAAAAAAEAAACAAAAAgQAAAAAAAAABAAAAgAAAAIEAAAAAAAAAAgAAAAAgAAACIAAgAAAAIAIAACAAIAAgAiAAAAAAAAAAAAAAAQAAAAEAAEAAAABAAAAAQAEAAEABAAAAAAAABAAAAACAAAAEgAAAAAAAAAQAAAAAgAAABIAAAAAAAAAABAAACAAAAAgEAACAAAAAgAQAAIgAAACIBAAAAAAAAQAAAAAEAAABBAAAAAAAQAEAAEAABABAAQQAQAAAEAABABAAAAQQAAEEEAAAABBAAQAQQAAEEEABBBBAAAAAAAAACAAAIAAAACAIAAAAIAAAACgAACAgAAAgKAAAAAIAAAAKAAAgAgAAIAoAAAAiAAAAKgAAICIAACAqAAAAAAAAAgAAAEAAAABCAAAAAEAAAAJAAABAQAAAQkAAAAAAAAACAAAAQAAAAEIAAAAAQAAAAkAAAEBAAABCQAAAAAAAAAAAEACAAAAAgAAQCAAAAAgAABAIgAAACIAAEAAAAAAAAAAQAIAAAACAABAIAAAACAAAEAiAAAAIgAAQAAAAAAAAAAAIAAAACAAAAAACAAAAAgAACAIAAAgCAAAAEAAAABAAAAgQAAAIEAAAABIAAAASAAAIEgAACBIAAAAAAAABAAAAAAAIAAEACAAAAAAQAQAAEAAACBABAAgQAAAgAAEAIAAAACgAAQAoAAAAIBABACAQAAAoEAEAKBAAAAAAAABAAAABAAAAAUAAAAAAgAAAQIAAAQCAAAFAgAIAAAACAEAAAgEAAAIBQAACAACAAgBAgAIBAIACAUCAAAAAAAAAEAAAAABAAAAQQAAAAAAAABAAAAAAQAAAEEAEAAAABAAQAAQAAEAEABBABAAAAAQAEAAEAABABAAQQAWHkwMUAjAQKAf/8NCoEJICEAAAAAAAAAAAAAAAAAAAAkNiRyb3VuZHM9MTIzNCRhYmMwMTIzNDU2Nzg5JAAAACQ2JHJvdW5kcz0xMjM0JGFiYzAxMjM0NTY3ODkkQkNwdDh6THJjL1JjeXVYbUNET0UxQUxxTVhCMk1INm4xZzg5MUhoRmo4Lnc3THhHdi5GVGtxcTZWeGMva20zWTBqRTBqMjRqWTVQSXYvb091NnJlZzEAAAAAAAAAAAAAAAAAABUqFisBLAIXAxgtGS4ELwUaBhswHDEHMggdCR4zHzQKNQsgDCE2IjcNOA4jDyQ5JToQOxEmEic8KD0TPhQpACKuKNeYL4pCzWXvI5FEN3EvO03sz/vAtbzbiYGl27XpOLVI81vCVjkZ0AW28RHxWZtPGa+kgj+SGIFt2tVeHKtCAgOjmKoH2L5vcEUBW4MSjLLkTr6FMSTitP/Vw30MVW+Je/J0Xb5ysZYWO/6x3oA1Esclpwbcm5Qmac908ZvB0krxnsFpm+TjJU84hke+77XVjIvGncEPZZysd8yhDCR1AitZbyzpLYPkpm6qhHRK1PtBvdypsFy1UxGD2oj5dqvfZu5SUT6YEDK0LW3GMag/IfuYyCcDsOQO777Hf1m/wo+oPfML4MYlpwqTR5Gn1W+CA+BRY8oGcG4OCmcpKRT8L9JGhQq3JybJJlw4IRsu7SrEWvxtLE3fs5WdEw04U95jr4tUcwplqLJ3PLsKanbmru1HLsnCgTs1ghSFLHKSZAPxTKHov6IBMEK8S2YaqJGX+NBwi0vCML5UBqNRbMcYUu/WGeiS0RCpZVUkBpnWKiBxV4U1DvS40bsycKBqEMjQ0rgWwaQZU6tBUQhsNx6Z647fTHdIJ6hIm+G1vLA0Y1rJxbMMHDnLikHjSqrYTnPjY3dPypxbo7iy1vNvLmj8su9d7oKPdGAvF0NvY6V4cqvwoRR4yITsOWQaCALHjCgeYyP6/76Q6b2C3utsUKQVecay96P5vitTcuPyeHHGnGEm6s4+J8oHwsAhx7iG0R7r4M3WfdrqeNFu7n9PffW6bxdyqmfwBqaYyKLFfWMKrg35vgSYPxEbRxwTNQtxG4R9BCP1d9sokyTHQHuryjK8vskVCr6ePEwNEJzEZx1DtkI+y77UxUwqfmX8nCl/Wez61jqrb8tfF1hHSowZRGwRAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABEADwoREREDCgcAARMJCwsAAAkGCwAACwAGEQAAABEREQAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAARAAoKERERAAoAAAIACQsAAAAJAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA0AAAAEDQAAAAAJDgAAAAAADgAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAPAAAAAA8AAAAACRAAAAAAABAAABAAABIAAAASEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAABISEgAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAoAAAAACgAAAAAJCwAAAAAACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQw
\ No newline at end of file
 EAP8=new Int8Array(buffer);HEAP16=new Int16Array(buffer);HEAP32=new Int32Array(buffer);HEAPU8=new Uint8Array(buffer);HEAPU16=new Uint16Array(buffer);HEAPU32=new Uint32Array(buffer);HEAPF32=new Float32Array(buffer);HEAPF64=new Float64Array(buffer);HEAP32[0]=255;assert(HEAPU8[0]===255&&HEAPU8[3]===0,"Typed arrays 2 must be run on a little-endian system");Module["HEAP"]=HEAP;Module["buffer"]=buffer;Module["HEAP8"]=HEAP8;Module["HEAP16"]=HEAP16;Module["HEAP32"]=HEAP32;Module["HEAPU8"]=HEAPU8;Module["HEAPU16"]=HEAPU16;Module["HEAPU32"]=HEAPU32;Module["HEAPF32"]=HEAPF32;Module["HEAPF64"]=HEAPF64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=Module.addOnPreRun=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=Module.addOnInit=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=Module.addOnPreMain=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=Module.addOnExit=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=Module.addOnPostRun=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i<array.length){var chr=array[i];HEAP8[buffer+i>>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i<array.length;i++){HEAP8[buffer++>>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<<bits-1)+value:Math.pow(2,bits)+value}function reSign(value,bits,ignore){if(value<=0){return value}var half=bits<=32?Math.abs(1<<bits-1):Math.pow(2,bits-1);if(value>=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Ma
\ No newline at end of file
 var asm=(function(global,env,buffer) {
 "use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=env._stderr|0;var o=0;var p=0;var q=0;var r=0;var s=global.NaN,t=global.Infinity;var u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0.0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=global.Math.floor;var O=global.Math.abs;var P=global.Math.sqrt;var Q=global.Math.pow;var R=global.Math.cos;var S=global.Math.sin;var T=global.Math.tan;var U=global.Math.acos;var V=global.Math.asin;var W=global.Math.atan;var X=global.Math.atan2;var Y=global.Math.exp;var Z=global.Math.log;var _=global.Math.ceil;var $=global.Math.imul;var aa=global.Math.min;var ba=global.Math.clz32;var ca=env.abort;var da=env.assert;var ea=env.invoke_iiii;var fa=env._fabs;var ga=env._sin;var ha=env._exp;var ia=env._cosf;var ja=env._send;var ka=env._sqrtf;var la=env._cosl;var ma=env._remquof;var na=env._emscripten_set_main_loop_timing;var oa=env._logf;var pa=env._fflush;var qa=env._pwrite;var ra=env._strerror_r;var sa=env._fprintf;var ta=env.__reallyNegative;var ua=env._sbrk;var va=env._nextafter;var wa=env._remquo;var xa=env._emscripten_memcpy_big;var ya=env._fileno;var za=env._sysconf;var Aa=env.___setErrNo;var Ba=env._sinf;var Ca=env._cos;var Da=env._llvm_fma_f64;var Ea=env._log;var Fa=env.___unlock;var Ga=env._write;var Ha=env._emscripten_set_main_loop;var Ia=env.___errno_location;var Ja=env._expf;var Ka=env._fesetround;var La=env._sinl;var Ma=env.___lock;var Na=env._abort;var Oa=env._fwrite;var Pa=env._time;var Qa=env._mkport;var Ra=env._strerror;var Sa=env.__formatString;var Ta=env._sqrt;var Ua=env._ilogb;var Va=0.0;
-r);HEAP16=new Int16Array(buffer);HEAP32=new Int32Array(buffer);HEAPU8=new Uint8Array(buffer);HEAPU16=new Uint16Array(buffer);HEAPU32=new Uint32Array(buffer);HEAPF32=new Float32Array(buffer);HEAPF64=new Float64Array(buffer);HEAP32[0]=255;assert(HEAPU8[0]===255&&HEAPU8[3]===0,"Typed arrays 2 must be run on a little-endian system");Module["HEAP"]=HEAP;Module["buffer"]=buffer;Module["HEAP8"]=HEAP8;Module["HEAP16"]=HEAP16;Module["HEAP32"]=HEAP32;Module["HEAPU8"]=HEAPU8;Module["HEAPU16"]=HEAPU16;Module["HEAPU32"]=HEAPU32;Module["HEAPF32"]=HEAPF32;Module["HEAPF64"]=HEAPF64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=Module.addOnPreRun=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=Module.addOnInit=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=Module.addOnPreMain=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=Module.addOnExit=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=Module.addOnPostRun=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i<array.length){var chr=array[i];HEAP8[buffer+i>>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i<array.length;i++){HEAP8[buffer++>>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<<bits-1)+value:Math.pow(2,bits)+value}function reSign(value,bits,ignore){if(value<=0){return value}var half=bits<=32?Math.abs(1<<bits-1):Math.pow(2,bits-1);if(value>=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math
\ No newline at end of file
+CAAAAAgAAAAICAAACAgACAAAAAgAAAAIAAgACAAIAAgIAAAICAAACAgIAAgICAAAAAAAAAAAAAAAEAAAABAAABAAAAAQAAAAEBAAABAQABAAAAAQAAAAEAAQABAAEAAQEAAAEBAAABAQEAAQEBAAAAAAAAAAAAAAACAAAAAgAAAgAAAAIAAAACAgAAAgIAAgAAAAIAAAACAAIAAgACAAICAAACAgAAAgICAAICAgBAQICAgICAgECAgICAgIBAAAAAAAAAgABAAAAAQACAAAACAAAAAoAAQAIAAEACgAAAAAAABAAAAAAAAAAEAAAQAAAAEAQAABAAAAAQBAAAAAAAAAAAEAAIAAAACAAQAAAgAAAAIBAACCAAAAggEAAAAAAAAAAEAAACAAAAAgQAAAAAAAAABAAAAgAAAAIEAAAAAAAAAAgAAAAAgAAACIAAgAAAAIAIAACAAIAAgAiAAAAAAAAAAAAAAAQAAAAEAAEAAAABAAAAAQAEAAEABAAAAAAAABAAAAACAAAAEgAAAAAAAAAQAAAAAgAAABIAAAAAAAAAABAAACAAAAAgEAACAAAAAgAQAAIgAAACIBAAAAAAAAQAAAAAEAAABBAAAAAAAQAEAAEAABABAAQQAQAAAEAABABAAAAQQAAEEEAAAABBAAQAQQAAEEEABBBBAAAAAAAAACAAAIAAAACAIAAAAIAAAACgAACAgAAAgKAAAAAIAAAAKAAAgAgAAIAoAAAAiAAAAKgAAICIAACAqAAAAAAAAAgAAAEAAAABCAAAAAEAAAAJAAABAQAAAQkAAAAAAAAACAAAAQAAAAEIAAAAAQAAAAkAAAEBAAABCQAAAAAAAAAAAEACAAAAAgAAQCAAAAAgAABAIgAAACIAAEAAAAAAAAAAQAIAAAACAABAIAAAACAAAEAiAAAAIgAAQAAAAAAAAAAAIAAAACAAAAAACAAAAAgAACAIAAAgCAAAAEAAAABAAAAgQAAAIEAAAABIAAAASAAAIEgAACBIAAAAAAAABAAAAAAAIAAEACAAAAAAQAQAAEAAACBABAAgQAAAgAAEAIAAAACgAAQAoAAAAIBABACAQAAAoEAEAKBAAAAAAAABAAAABAAAAAUAAAAAAgAAAQIAAAQCAAAFAgAIAAAACAEAAAgEAAAIBQAACAACAAgBAgAIBAIACAUCAAAAAAAAAEAAAAABAAAAQQAAAAAAAABAAAAAAQAAAEEAEAAAABAAQAAQAAEAEABBABAAAAAQAEAAEAABABAAQQAWHkwMUAjAQKAf/8NCoEJICEAAAAAAAAAAAAAAAAAAAAkNiRyb3VuZHM9MTIzNCRhYmMwMTIzNDU2Nzg5JAAAACQ2JHJvdW5kcz0xMjM0JGFiYzAxMjM0NTY3ODkkQkNwdDh6THJjL1JjeXVYbUNET0UxQUxxTVhCMk1INm4xZzg5MUhoRmo4Lnc3THhHdi5GVGtxcTZWeGMva20zWTBqRTBqMjRqWTVQSXYvb091NnJlZzEAAAAAAAAAAAAAAAAAABUqFisBLAIXAxgtGS4ELwUaBhswHDEHMggdCR4zHzQKNQsgDCE2IjcNOA4jDyQ5JToQOxEmEic8KD0TPhQpACKuKNeYL4pCzWXvI5FEN3EvO03sz/vAtbzbiYGl27XpOLVI81vCVjkZ0AW28RHxWZtPGa+kgj+SGIFt2tVeHKtCAgOjmKoH2L5vcEUBW4MSjLLkTr6FMSTitP/Vw30MVW+Je/J0Xb5ysZYWO/6x3oA1Esclpwbcm5Qmac908ZvB0krxnsFpm+TjJU84hke+77XVjIvGncEPZZysd8yhDCR1AitZbyzpLYPkpm6qhHRK1PtBvdypsFy1UxGD2oj5dqvfZu5SUT6YEDK0LW3GMag/IfuYyCcDsOQO777Hf1m/wo+oPfML4MYlpwqTR5Gn1W+CA+BRY8oGcG4OCmcpKRT8L9JGhQq3JybJJlw4IRsu7SrEWvxtLE3fs5WdEw04U95jr4tUcwplqLJ3PLsKanbmru1HLsnCgTs1ghSFLHKSZAPxTKHov6IBMEK8S2YaqJGX+NBwi0vCML5UBqNRbMcYUu/WGeiS0RCpZVUkBpnWKiBxV4U1DvS40bsycKBqEMjQ0rgWwaQZU6tBUQhsNx6Z647fTHdIJ6hIm+G1vLA0Y1rJxbMMHDnLikHjSqrYTnPjY3dPypxbo7iy1vNvLmj8su9d7oKPdGAvF0NvY6V4cqvwoRR4yITsOWQaCALHjCgeYyP6/76Q6b2C3utsUKQVecay96P5vitTcuPyeHHGnGEm6s4+J8oHwsAhx7iG0R7r4M3WfdrqeNFu7n9PffW6bxdyqmfwBqaYyKLFfWMKrg35vgSYPxEbRxwTNQtxG4R9BCP1d9sokyTHQHuryjK8vskVCr6ePEwNEJzEZx1DtkI+y77UxUwqfmX8nCl/Wez61jqrb8tfF1hHSowZRGwRAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABEADwoREREDCgcAARMJCwsAAAkGCwAACwAGEQAAABEREQAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAARAAoKERERAAoAAAIACQsAAAAJAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA0AAAAEDQAAAAAJDgAAAAAADgAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAPAAAAAA8AAAAACRAAAAAAABAAABAAABIAAAASEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAABISEgAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAoAAAAACgAAAAAJCwAAAAAACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAADAxMjM0NTY3ODlBQkNERUZUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wAAAAAAAAAAABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbn
\ No newline at end of file
 .sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;STATIC_BASE=8;STATICTOP=STATIC_BASE+14736;__ATINIT__.push();allocate([17,1,0,0,0,0,0,0,34,18,1,1,0,0,0,0,50,34,18,2,0,0,0,0,67,51,34,34,18,18,2,2,83,67,51,35,18,18,2,2,19,35,67,51,99,83,2,2,0,0,101,85,68,68,52,52,35,35,35,35,19,19,19,19,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,249,233,217,200,200,184,184,167,167,167,167,151,151,151,151,134,134,134,134,134,134,134,134,118,118,118,118,118,118,118,118,230,214,198,182,165,165,149,149,132,132,132,132,116,116,116,116,100,100,100,100,84,84,84,84,67,67,67,67,67,67,67,67,51,51,51,51,51,51,51,51,35,35,35,35,35,35,35,35,19,19,19,19,19,19,19,19,3,3,3,3,3,3,3,3,214,182,197,197,165,165,149,149,132,132,132,132,84,84,84,84,68,68,68,68,4,4,4,4,115,115,115,115,115,115,115,115,99,99,99,99,99,99,99,99,51,51,51,51,51,51,51,51,35,35,35,35,35,35,35,35,19,19,19,19,19,19,19,19,197,181,165,5,148,148,116,116,52,52,36,36,131,131,131,131,99,99,99,99,83,83,83,83,67,67,67,67,19,19,19,19,181,149,164,164,132,132,36,36,20,20,4,4,115,115,115,115,99,99,99,99,83,83,83,83,67,67,67,67,51,51,51,51,166,6,21,21,132,132,132,132,147,147,147,147,147,147,147,147,115,115,115,115,115,115,115,115,99,99,99,99,99,99,99,99,83,83,83,83,83,83,83,83,67,67,67,67,67,67,67,67,51,51,51,51,51,51,51,51,35,35,35,35,35,35,35,35,150,6,21,21,116,116,116,116,131,131,131,131,131,131,131,131,99,99,99,99,99,99,99,99,67,67,67,67,67,67,67,67,51,51,51,51,51,51,51,51,35,35,35,35,35,35,35,35,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,134,6,37,37,20,20,20,20,115,115,115,115,115,115,115,115,99,99,99,99,99,99,99,99,51,51,51,51,51,51,51,51,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,22,6,117,117,36,36,36,36,83,83,83,83,83,83,83,83,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,21,5,100,100,35,35,35,35,82,82,82,82,82,82,82,82,66,66,66,66,66,66,66,66,50,50,50,50,50,50,50,50,4,20,35,35,51,51,83,83,65,65,65,65,65,65,65,65,4,20,67,67,34,34,34,34,49,49,49,49,49,49,49,49,3,19,50,50,33,33,33,33,2,18,33,33,0,0,0,0,0,0,0,0,0,0,102,32,38,16,6,8,101,24,101,24,67,16,67,16,67,16,67,16,67,16,67,16,67,16,67,16,34,8,34,8,34,8,34,8,34,8,34,8,34,8,34,8,34,8,34,8,34,8,34,8,34,8,34,8,34,8,34,8,0,0,0,0,0,0,0,0,106,64,74,48,42,40,10,32,105,56,105,56,73,40,73,40,41,32,41,32,9,24,9,24,104,48,104,48,104,48,104,48,72,32,72,32,72,32,72,32,40,24,40,24,40,24,40,24,8,16,8,16,8,16,8,16,103,40,103,40,103,40,103,40,103,40,103,40,103,40,103,40,71,24,71,24,71,24,71,24,71,24,71,24,71,24,71,24,110,96,78,88,46,80,14,80,110,88,78,80,46,72,14,72,13,64,13,64,77,72,77,72,45,64,45,64,13,56,13,56,109,80,109,80,77,64,77,64,45,56,45,56,13,48,13,48,107,72,107,72,107,72,107,72,107,72,107,72,107,72,107,72,75,56,75,56,75,56,75,56,75,56,75,56,75,56,75,56,43,48,43,48,43,48,43,48,43,48,43,48,43,48,43,48,11,40,11,40,11,40,11,40,11,40,11,40,11,40,11,40,0,0,0,0,47,104,47,104,16,128,80,128,48,128,16,120,112,128,80,120,48,120,16,112,112,120,80,112,48,112,16,104,1
\ No newline at end of file
 var asm=(function(global,env,buffer) {
 "use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=env._stderr|0;var o=0;var p=0;var q=0;var r=0;var s=global.NaN,t=global.Infinity;var u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0.0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=global.Math.floor;var O=global.Math.abs;var P=global.Math.sqrt;var Q=global.Math.pow;var R=global.Math.cos;var S=global.Math.sin;var T=global.Math.tan;var U=global.Math.acos;var V=global.Math.asin;var W=global.Math.atan;var X=global.Math.atan2;var Y=global.Math.exp;var Z=global.Math.log;var _=global.Math.ceil;var $=global.Math.imul;var aa=global.Math.min;var ba=global.Math.clz32;var ca=env.abort;var da=env.assert;var ea=env.invoke_iiii;var fa=env._fabs;var ga=env._sin;var ha=env._exp;var ia=env._cosf;var ja=env._send;var ka=env._sqrtf;var la=env._cosl;var ma=env._remquof;var na=env._emscripten_set_main_loop_timing;var oa=env._logf;var pa=env._fflush;var qa=env._pwrite;var ra=env._strerror_r;var sa=env._fprintf;var ta=env.__reallyNegative;var ua=env._sbrk;var va=env._nextafter;var wa=env._remquo;var xa=env._emscripten_memcpy_big;var ya=env._fileno;var za=env._sysconf;var Aa=env.___setErrNo;var Ba=env._sinf;var Ca=env._cos;var Da=env._llvm_fma_f64;var Ea=env._log;var Fa=env.___unlock;var Ga=env._write;var Ha=env._emscripten_set_main_loop;var Ia=env.___errno_location;var Ja=env._expf;var Ka=env._fesetround;var La=env._sinl;var Ma=env.___lock;var Na=env._abort;var Oa=env._fwrite;var Pa=env._time;var Qa=env._mkport;var Ra=env._strerror;var Sa=env.__formatString;var Ta=env._sqrt;var Ua=env._ilogb;var Va=0.0;
--- a/js/h264bsd_decoder.js
+++ b/js/h264bsd_decoder.js
@@ -33,8 +33,6 @@
  * When you're done decoding, make sure to call release() to clean up internal buffers.
  */
 
-window = this;
-
 function H264bsdDecoder(module) {
     this.module = module;
     this.released = false;
@@ -312,3 +310,7 @@
         'left': leftOffset
     };
 };
+
+if (typeof module !== "undefined") {
+    module.exports = H264bsdDecoder;
+}
--- a/js/min/h264bsd_canvas.min.js
+++ b/js/min/h264bsd_canvas.min.js
@@ -1,1 +1,1 @@
-function H264bsdCanvas(t,e){this.canvasElement=t,e||this.initContextGL(),this.contextGL&&(this.initProgram(),this.initBuffers(),this.initTextures())}H264bsdCanvas.prototype.isWebGL=function(){return this.contextGL},H264bsdCanvas.prototype.initContextGL=function(){for(var t=this.canvasElement,e=null,r=["webgl","experimental-webgl","moz-webgl","webkit-3d"],a=0;!e&&a<r.length;){var i=r[a];try{e=t.getContext(i)}catch(o){e=null}e&&"function"==typeof e.getParameter||(e=null),++a}this.contextGL=e},H264bsdCanvas.prototype.initProgram=function(){var t=this.contextGL,e=["attribute vec4 vertexPos;","attribute vec4 texturePos;","varying vec2 textureCoord;","void main()","{","gl_Position = vertexPos;","textureCoord = texturePos.xy;","}"].join("\n"),r=["precision highp float;","varying highp vec2 textureCoord;","uniform sampler2D ySampler;","uniform sampler2D uSampler;","uniform sampler2D vSampler;","const mat4 YUV2RGB = mat4","(","1.1643828125, 0, 1.59602734375, -.87078515625,","1.1643828125, -.39176171875, -.81296875, .52959375,","1.1643828125, 2.017234375, 0, -1.081390625,","0, 0, 0, 1",");","void main(void) {","highp float y = texture2D(ySampler,  textureCoord).r;","highp float u = texture2D(uSampler,  textureCoord).r;","highp float v = texture2D(vSampler,  textureCoord).r;","gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;","}"].join("\n"),a=t.createShader(t.VERTEX_SHADER);t.shaderSource(a,e),t.compileShader(a),t.getShaderParameter(a,t.COMPILE_STATUS)||console.log("Vertex shader failed to compile: "+t.getShaderInfoLog(a));var i=t.createShader(t.FRAGMENT_SHADER);t.shaderSource(i,r),t.compileShader(i),t.getShaderParameter(i,t.COMPILE_STATUS)||console.log("Fragment shader failed to compile: "+t.getShaderInfoLog(i));var o=t.createProgram();t.attachShader(o,a),t.attachShader(o,i),t.linkProgram(o),t.getProgramParameter(o,t.LINK_STATUS)||console.log("Program failed to compile: "+t.getProgramInfoLog(o)),t.useProgram(o),this.shaderProgram=o},H264bsdCanvas.prototype.initBuffers=function(){var t=this.contextGL,e=this.shaderProgram,r=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,r),t.bufferData(t.ARRAY_BUFFER,new Float32Array([1,1,-1,1,1,-1,-1,-1]),t.STATIC_DRAW);var a=t.getAttribLocation(e,"vertexPos");t.enableVertexAttribArray(a),t.vertexAttribPointer(a,2,t.FLOAT,!1,0,0);var i=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,i),t.bufferData(t.ARRAY_BUFFER,new Float32Array([1,0,0,0,1,1,0,1]),t.STATIC_DRAW);var o=t.getAttribLocation(e,"texturePos");t.enableVertexAttribArray(o),t.vertexAttribPointer(o,2,t.FLOAT,!1,0,0),this.texturePosBuffer=i},H264bsdCanvas.prototype.initTextures=function(){var t=this.contextGL,e=this.shaderProgram,r=this.initTexture(),a=t.getUniformLocation(e,"ySampler");t.uniform1i(a,0),this.yTextureRef=r;var i=this.initTexture(),o=t.getUniformLocation(e,"uSampler");t.uniform1i(o,1),this.uTextureRef=i;var n=this.initTexture(),u=t.getUniformLocation(e,"vSampler");t.uniform1i(u,2),this.vTextureRef=n},H264bsdCanvas.prototype.initTexture=function(){var t=this.contextGL,e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.bindTexture(t.TEXTURE_2D,null),e},H264bsdCanvas.prototype.drawNextOutputPicture=function(t,e,r,a){var i=this.contextGL;i?this.drawNextOuptutPictureGL(t,e,r,a):this.drawNextOuptutPictureRGBA(t,e,r,a)},H264bsdCanvas.prototype.drawNextOuptutPictureGL=function(t,e,r,a){var i=this.contextGL,o=this.texturePosBuffer,n=this.yTextureRef,u=this.uTextureRef,s=this.vTextureRef;if(null===r)i.viewport(0,0,t,e);else{i.viewport(0,0,r.width,r.height);var T=r.top/e,E=r.left/t,h=r.height/e,x=r.width/t,f=new Float32Array([x,T,E,T,x,h,E,h]);i.bindBuffer(i.ARRAY_BUFFER,o),i.bufferData(i.ARRAY_BUFFER,f,i.DYNAMIC_DRAW)}var l=a,c=t*e,R=l.subarray(0,c);i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,n),i.texImage2D(i.TEXTURE_2D,0,i.LUMINANCE,t,e,0,i.LUMINANCE,i.UNSIGNED_BYTE,R);var m=t/2*e/2,
\ No newline at end of file
+function H264bsdCanvas(t,e){this.canvasElement=t,e||this.initContextGL(),this.contextGL&&(this.initProgram(),this.initBuffers(),this.initTextures())}H264bsdCanvas.prototype.isWebGL=function(){return this.contextGL},H264bsdCanvas.prototype.initContextGL=function(){for(var t=this.canvasElement,e=null,r=["webgl","experimental-webgl","moz-webgl","webkit-3d"],a=0;!e&&a<r.length;){var i=r[a];try{e=t.getContext(i)}catch(t){e=null}e&&"function"==typeof e.getParameter||(e=null),++a}this.contextGL=e},H264bsdCanvas.prototype.initProgram=function(){var t=this.contextGL,e=["attribute vec4 vertexPos;","attribute vec4 texturePos;","varying vec2 textureCoord;","void main()","{","gl_Position = vertexPos;","textureCoord = texturePos.xy;","}"].join("\n"),r=["precision highp float;","varying highp vec2 textureCoord;","uniform sampler2D ySampler;","uniform sampler2D uSampler;","uniform sampler2D vSampler;","const mat4 YUV2RGB = mat4","(","1.1643828125, 0, 1.59602734375, -.87078515625,","1.1643828125, -.39176171875, -.81296875, .52959375,","1.1643828125, 2.017234375, 0, -1.081390625,","0, 0, 0, 1",");","void main(void) {","highp float y = texture2D(ySampler,  textureCoord).r;","highp float u = texture2D(uSampler,  textureCoord).r;","highp float v = texture2D(vSampler,  textureCoord).r;","gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;","}"].join("\n"),a=t.createShader(t.VERTEX_SHADER);t.shaderSource(a,e),t.compileShader(a),t.getShaderParameter(a,t.COMPILE_STATUS)||console.log("Vertex shader failed to compile: "+t.getShaderInfoLog(a));var i=t.createShader(t.FRAGMENT_SHADER);t.shaderSource(i,r),t.compileShader(i),t.getShaderParameter(i,t.COMPILE_STATUS)||console.log("Fragment shader failed to compile: "+t.getShaderInfoLog(i));var o=t.createProgram();t.attachShader(o,a),t.attachShader(o,i),t.linkProgram(o),t.getProgramParameter(o,t.LINK_STATUS)||console.log("Program failed to compile: "+t.getProgramInfoLog(o)),t.useProgram(o),this.shaderProgram=o},H264bsdCanvas.prototype.initBuffers=function(){var t=this.contextGL,e=this.shaderProgram,r=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,r),t.bufferData(t.ARRAY_BUFFER,new Float32Array([1,1,-1,1,1,-1,-1,-1]),t.STATIC_DRAW);var a=t.getAttribLocation(e,"vertexPos");t.enableVertexAttribArray(a),t.vertexAttribPointer(a,2,t.FLOAT,!1,0,0);var i=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,i),t.bufferData(t.ARRAY_BUFFER,new Float32Array([1,0,0,0,1,1,0,1]),t.STATIC_DRAW);var o=t.getAttribLocation(e,"texturePos");t.enableVertexAttribArray(o),t.vertexAttribPointer(o,2,t.FLOAT,!1,0,0),this.texturePosBuffer=i},H264bsdCanvas.prototype.initTextures=function(){var t=this.contextGL,e=this.shaderProgram,r=this.initTexture(),a=t.getUniformLocation(e,"ySampler");t.uniform1i(a,0),this.yTextureRef=r;var i=this.initTexture(),o=t.getUniformLocation(e,"uSampler");t.uniform1i(o,1),this.uTextureRef=i;var n=this.initTexture(),u=t.getUniformLocation(e,"vSampler");t.uniform1i(u,2),this.vTextureRef=n},H264bsdCanvas.prototype.initTexture=function(){var t=this.contextGL,e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.bindTexture(t.TEXTURE_2D,null),e},H264bsdCanvas.prototype.drawNextOutputPicture=function(t,e,r,a){this.contextGL?this.drawNextOuptutPictureGL(t,e,r,a):this.drawNextOuptutPictureRGBA(t,e,r,a)},H264bsdCanvas.prototype.drawNextOuptutPictureGL=function(t,e,r,a){var i=this.contextGL,o=this.texturePosBuffer,n=this.yTextureRef,u=this.uTextureRef,s=this.vTextureRef;if(null===r)i.viewport(0,0,t,e);else{i.viewport(0,0,r.width,r.height);var T=r.top/e,E=r.left/t,x=r.height/e,h=r.width/t,f=new Float32Array([h,T,E,T,h,x,E,x]);i.bindBuffer(i.ARRAY_BUFFER,o),i.bufferData(i.ARRAY_BUFFER,f,i.DYNAMIC_DRAW)}var c=a,R=t*e,m=c.subarray(0,R);i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,n),i.texImage2D(i.TEXTURE_2D,0,i.LUMINANCE,t,e,0,i.LUMINANCE,i.UNSIGNED_BYTE,m);var l=t/2*e/2,v=c.suba
\ No newline at end of file
--- a/js/min/h264bsd_full.min.js
+++ b/js/min/h264bsd_full.min.js
@@ -1,15 +1,1 @@
-function globalEval(e){eval.call(null,e)}function assert(e,r){e||abort("Assertion failed: "+r)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(e){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(e,r,t,o){switch(t=t||"i8","*"===t.charAt(t.length-1)&&(t="i32"),t){case"i1":HEAP8[e>>0]=r;break;case"i8":HEAP8[e>>0]=r;break;case"i16":HEAP16[e>>1]=r;break;case"i32":HEAP32[e>>2]=r;break;case"i64":tempI64=[r>>>0,(tempDouble=r,+Math_abs(tempDouble)>=1?tempDouble>0?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=r;break;case"double":HEAPF64[e>>3]=r;break;default:abort("invalid type for setValue: "+t)}}function getValue(e,r,t){switch(r=r||"i8","*"===r.charAt(r.length-1)&&(r="i32"),r){case"i1":return HEAP8[e>>0];case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":return HEAP32[e>>2];case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];default:abort("invalid type for setValue: "+r)}return null}function allocate(e,r,t,o){var n,i;"number"==typeof e?(n=!0,i=e):(n=!1,i=e.length);var a,s="string"==typeof r?r:null;if(a=t==ALLOC_NONE?o:[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][void 0===t?ALLOC_STATIC:t](Math.max(i,s?1:r.length)),n){var u,o=a;for(assert(0==(3&a)),u=a+(-4&i);u>o;o+=4)HEAP32[o>>2]=0;for(u=a+i;u>o;)HEAP8[o++>>0]=0;return a}if("i8"===s)return e.subarray||e.slice?HEAPU8.set(e,a):HEAPU8.set(new Uint8Array(e),a),a;for(var f,l,d,c=0;i>c;){var _=e[c];"function"==typeof _&&(_=Runtime.getFunctionIndex(_)),f=s||r[c],0!==f?("i64"==f&&(f="i32"),setValue(a+c,_,f),d!==f&&(l=Runtime.getNativeTypeSize(f),d=f),c+=l):c++}return a}function Pointer_stringify(e,r){if(0===r||!e)return"";for(var t,o=0,n=0;;){if(t=HEAPU8[e+n>>0],o|=t,0==t&&!r)break;if(n++,r&&n==r)break}r||(r=n);var i="";if(128>o){for(var a,s=1024;r>0;)a=String.fromCharCode.apply(String,HEAPU8.subarray(e,e+Math.min(r,s))),i=i?i+a:a,e+=s,r-=s;return i}return Module.UTF8ToString(e)}function AsciiToString(e){for(var r="";;){var t=HEAP8[e++>>0];if(!t)return r;r+=String.fromCharCode(t)}}function stringToAscii(e,r){return writeAsciiToMemory(e,r,!1)}function UTF8ArrayToString(e,r){for(var t,o,n,i,a,s,u="";;){if(t=e[r++],!t)return u;if(128&t)if(o=63&e[r++],192!=(224&t))if(n=63&e[r++],224==(240&t)?t=(15&t)<<12|o<<6|n:(i=63&e[r++],240==(248&t)?t=(7&t)<<18|o<<12|n<<6|i:(a=63&e[r++],248==(252&t)?t=(3&t)<<24|o<<18|n<<12|i<<6|a:(s=63&e[r++],t=(1&t)<<30|o<<24|n<<18|i<<12|a<<6|s))),65536>t)u+=String.fromCharCode(t);else{var f=t-65536;u+=String.fromCharCode(55296|f>>10,56320|1023&f)}else u+=String.fromCharCode((31&t)<<6|o);else u+=String.fromCharCode(t)}}function UTF8ToString(e){return UTF8ArrayToString(HEAPU8,e)}function stringToUTF8Array(e,r,t,o){if(!(o>0))return 0;for(var n=t,i=t+o-1,a=0;a<e.length;++a){var s=e.charCodeAt(a);if(s>=55296&&57343>=s&&(s=65536+((1023&s)<<10)|1023&e.charCodeAt(++a)),127>=s){if(t>=i)break;r[t++]=s}else if(2047>=s){if(t+1>=i)break;r[t++]=192|s>>6,r[t++]=128|63&s}else if(65535>=s){if(t+2>=i)break;r[t++]=224|s>>12,r[t++]=128|s>>6&63,r[t++]=128|63&s}else if(2097151>=s){if(t+3>=i)break;r[t++]=240|s>>18,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}else if(67108863>=s){if(t+4>=i)break;r[t++]=248|s>>24,r[t++]=128|s>>18&63,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}else{if(t+5>=i)break;r[t++]=252|s>>30,r[t++]=128|s>>24&63,r[t++]=128|s>>18&63,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}}return r[t]=0,t-n}function stringToUTF8(e,r,t){return stringToUTF8Array(e,HEAPU8,r,t)}function lengthBytesUTF8(e){for(var r=0,t=0;t<e.length;++t){var o=e.charCodeAt(t);o>=55296&&57343>=o&&(o=65536+((1023&o)<<10)|1023&e.charCodeAt(++t)),127>=o?++r:r+=2047>=o?2:65535>=o?3:2097151>=o?4:67108863>=o?5:6}return r}function UTF16ToString(e){for(var r=0,t="";;){var o=HEAP16[e+2*r>>1];if(0==o)return
\ No newline at end of file
-Module.stringToUTF32=stringToUTF32,Module.lengthBytesUTF32=lengthBytesUTF32,Module.stackTrace=stackTrace;for(var PAGE_SIZE=4096,HEAP,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,STATIC_BASE=0,STATICTOP=0,staticSealed=!1,STACK_BASE=0,STACKTOP=0,STACK_MAX=0,DYNAMIC_BASE=0,DYNAMICTOP=0,TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||67108864,totalMemory=65536;TOTAL_MEMORY>totalMemory||2*TOTAL_STACK>totalMemory;)16777216>totalMemory?totalMemory*=2:totalMemory+=16777216;totalMemory!==TOTAL_MEMORY&&(Module.printErr("increasing TOTAL_MEMORY to "+totalMemory+" to be compliant with the asm.js spec (and given that TOTAL_STACK="+TOTAL_STACK+")"),TOTAL_MEMORY=totalMemory),assert("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&!!new Int32Array(1).subarray&&!!new Int32Array(1).set,"JS engine does not provide full typed array support");var buffer=new ArrayBuffer(TOTAL_MEMORY);HEAP8=new Int8Array(buffer),HEAP16=new Int16Array(buffer),HEAP32=new Int32Array(buffer),HEAPU8=new Uint8Array(buffer),HEAPU16=new Uint16Array(buffer),HEAPU32=new Uint32Array(buffer),HEAPF32=new Float32Array(buffer),HEAPF64=new Float64Array(buffer),HEAP32[0]=255,assert(255===HEAPU8[0]&&0===HEAPU8[3],"Typed arrays 2 must be run on a little-endian system"),Module.HEAP=HEAP,Module.buffer=buffer,Module.HEAP8=HEAP8,Module.HEAP16=HEAP16,Module.HEAP32=HEAP32,Module.HEAPU8=HEAPU8,Module.HEAPU16=HEAPU16,Module.HEAPU32=HEAPU32,Module.HEAPF32=HEAPF32,Module.HEAPF64=HEAPF64;var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;Module.addOnPreRun=Module.addOnPreRun=addOnPreRun,Module.addOnInit=Module.addOnInit=addOnInit,Module.addOnPreMain=Module.addOnPreMain=addOnPreMain,Module.addOnExit=Module.addOnExit=addOnExit,Module.addOnPostRun=Module.addOnPostRun=addOnPostRun,Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(e,r){var t=e>>>16,o=65535&e,n=r>>>16,i=65535&r;return o*i+(t*i+o*n<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(e){e>>>=0;for(var r=0;32>r;r++)if(e&1<<31-r)return r;return 32}),Math.clz32=Math.clz32;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_min=Math.min,Math_clz32=Math.clz32,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var memoryInitializer=null;STATIC_BASE=8,STATICTOP=STATIC_BASE+14736,__ATINIT__.push(),allocate([17,1,0,0,0,0,0,0,34,18,1,1,0,0,0,0,50,34,18,2,0,0,0,0,67,51,34,34,18,18,2,2,83,67,51,35,18,18,2,2,19,35,67,51,99,83,2,2,0,0,101,85,68,68,52,52,35,35,35,35,19,19,19,19,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,249,233,217,200,200,184,184,167,167,167,167,151,151,151,151,134,134,134,134,134,134,134,134,118,118,118,118,118,118,118,118,230,214,198,182,165,165,149,149,132,132,132,132,116,116,116,116,100,100,100,100,84,84,84,84,67,67,67,67,67,67,67,67,51,51,51,51,51,51,51,51,35,35,35,35,35,35,35,35,19,19,19,19,19,19,19,19,3,3,3,3,3,3,3,3,214,182,197,197,165,165,149,149,132,132,132,132,84,84,84,84,68,68,68,68,4,4,4,4,115,115,115,115,115,115,115,115,99,99,99,99,99,99,99,99,51,51,51,51,51,51,51,51,35,35,35,35,35,35,35,35,19,19,19,19,19,19,19,19,197,181,165,5,148,148,116,116,52,52,36,36,131,131,131,131,99,99,99,99,83,83,83,83,67,67,67,67,19,19,19,19,181,149,164,164,132,132,36,36,20,20,4,4,115,115,115,115,99,99,99,99,83,83,83,83,67,67,67,67,51,51,51,51,166,6,21,21,132,132,132,132,147,147,147,147,147,147,147,147,115,115,115,115,115,115,115,115,99,99,99,99,99,99,99,99,83,8
\ No newline at end of file
-var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);var _cosf=Math_cos;Module._cosf=_cosf,Module._i64Subtract=_i64Subtract;var _DtoILow=!0;Module._DtoILow=_DtoILow;var ___errno_state=0;Module.___errno_state=___errno_state,Module.___setErrNo=___setErrNo;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};Module.ERRNO_CODES=ERRNO_CODES,Module._sysconf=_sysconf,Module._remquof=_remquof,Module._memset=_memset;var _BDtoILow=!0;Module._BDtoILow=_BDtoILow;var _FtoIHigh=!0;Module._FtoIHigh=_FtoIHigh;var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte
\ No newline at end of file
-}catch(f){console.log("FS.trackingDelegate['willMovePath']('"+e+"', '"+r+"') threw an exception: "+f.message)}FS.hashRemoveNode(l);try{o.node_ops.rename(l,n,u)}catch(f){throw f}finally{FS.hashAddNode(l)}try{FS.trackingDelegate.onMovePath&&FS.trackingDelegate.onMovePath(e,r)}catch(f){console.log("FS.trackingDelegate['onMovePath']('"+e+"', '"+r+"') threw an exception: "+f.message)}}},rmdir:function(e){var r=FS.lookupPath(e,{parent:!0}),t=r.node,o=PATH.basename(e),n=FS.lookupNode(t,o),i=FS.mayDelete(t,o,!0);if(i)throw new FS.ErrnoError(i);if(!t.node_ops.rmdir)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(n))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);try{FS.trackingDelegate.willDeletePath&&FS.trackingDelegate.willDeletePath(e)}catch(a){console.log("FS.trackingDelegate['willDeletePath']('"+e+"') threw an exception: "+a.message)}t.node_ops.rmdir(t,o),FS.destroyNode(n);try{FS.trackingDelegate.onDeletePath&&FS.trackingDelegate.onDeletePath(e)}catch(a){console.log("FS.trackingDelegate['onDeletePath']('"+e+"') threw an exception: "+a.message)}},readdir:function(e){var r=FS.lookupPath(e,{follow:!0}),t=r.node;if(!t.node_ops.readdir)throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);return t.node_ops.readdir(t)},unlink:function(e){var r=FS.lookupPath(e,{parent:!0}),t=r.node,o=PATH.basename(e),n=FS.lookupNode(t,o),i=FS.mayDelete(t,o,!1);if(i)throw i===ERRNO_CODES.EISDIR&&(i=ERRNO_CODES.EPERM),new FS.ErrnoError(i);if(!t.node_ops.unlink)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(n))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);try{FS.trackingDelegate.willDeletePath&&FS.trackingDelegate.willDeletePath(e)}catch(a){console.log("FS.trackingDelegate['willDeletePath']('"+e+"') threw an exception: "+a.message)}t.node_ops.unlink(t,o),FS.destroyNode(n);try{FS.trackingDelegate.onDeletePath&&FS.trackingDelegate.onDeletePath(e)}catch(a){console.log("FS.trackingDelegate['onDeletePath']('"+e+"') threw an exception: "+a.message)}},readlink:function(e){var r=FS.lookupPath(e),t=r.node;if(!t)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!t.node_ops.readlink)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return PATH.resolve(FS.getPath(r.node.parent),t.node_ops.readlink(t))},stat:function(e,r){var t=FS.lookupPath(e,{follow:!r}),o=t.node;if(!o)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!o.node_ops.getattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);return o.node_ops.getattr(o)},lstat:function(e){return FS.stat(e,!0)},chmod:function(e,r,t){var o;if("string"==typeof e){var n=FS.lookupPath(e,{follow:!t});o=n.node}else o=e;if(!o.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);o.node_ops.setattr(o,{mode:4095&r|-4096&o.mode,timestamp:Date.now()})},lchmod:function(e,r){FS.chmod(e,r,!0)},fchmod:function(e,r){var t=FS.getStream(e);if(!t)throw new FS.ErrnoError(ERRNO_CODES.EBADF);FS.chmod(t.node,r)},chown:function(e,r,t,o){var n;if("string"==typeof e){var i=FS.lookupPath(e,{follow:!o});n=i.node}else n=e;if(!n.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);n.node_ops.setattr(n,{timestamp:Date.now()})},lchown:function(e,r,t){FS.chown(e,r,t,!0)},fchown:function(e,r,t){var o=FS.getStream(e);if(!o)throw new FS.ErrnoError(ERRNO_CODES.EBADF);FS.chown(o.node,r,t)},truncate:function(e,r){if(0>r)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var t;if("string"==typeof e){var o=FS.lookupPath(e,{follow:!0});t=o.node}else t=e;if(!t.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isDir(t.mode))throw new FS.ErrnoError(ERRNO_CODES.EISDIR);if(!FS.isFile(t.mode))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var n=FS.nodePermissions(t,"w");if(n)throw new FS.ErrnoError(n);t.node_ops.setattr(t,{size:r,timestamp:Date.now()})},ftruncate:function(e,r){var t=FS.getStream(e);if(!t)throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(0===(2097155&t.flags))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);FS.truncate(t.node,r)},utime:function(e,r,t){var o=FS.lookupPath(e,{follow:!0}),n=o.node;n.node_ops.setattr(n,{timestamp:Math.max(r,t)})},open:function(e,r,t,o,n){if(""===e)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);r="string"==typeof r?FS.m
\ No newline at end of file
-n.exitPointerLock=n.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",e,!1),document.addEventListener("mozpointerlockchange",e,!1),document.addEventListener("webkitpointerlockchange",e,!1),document.addEventListener("mspointerlockchange",e,!1),Module.elementPointerLock&&n.addEventListener("click",function(e){!Browser.pointerLock&&n.requestPointerLock&&(n.requestPointerLock(),e.preventDefault())},!1))}},createContext:function(e,r,t,o){if(r&&Module.ctx&&e==Module.canvas)return Module.ctx;var n,i;if(r){var a={antialias:!1,alpha:!1};if(o)for(var s in o)a[s]=o[s];i=GL.createContext(e,a),i&&(n=GL.getContext(i).GLctx),e.style.backgroundColor="black"}else n=e.getContext("2d");return n?(t&&(r||assert("undefined"==typeof GLctx,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=n,r&&GL.makeContextCurrent(i),Module.useWebGL=r,Browser.moduleContextCreatedCallbacks.forEach(function(e){e()}),Browser.init()),n):null},destroyContext:function(e,r,t){},fullScreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullScreen:function(e,r,t){function o(){Browser.isFullScreen=!1;var e=n.parentNode;(document.webkitFullScreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.mozFullscreenElement||document.fullScreenElement||document.fullscreenElement||document.msFullScreenElement||document.msFullscreenElement||document.webkitCurrentFullScreenElement)===e?(n.cancelFullScreen=document.cancelFullScreen||document.mozCancelFullScreen||document.webkitCancelFullScreen||document.msExitFullscreen||document.exitFullscreen||function(){},n.cancelFullScreen=n.cancelFullScreen.bind(document),Browser.lockPointer&&n.requestPointerLock(),Browser.isFullScreen=!0,Browser.resizeCanvas&&Browser.setFullScreenCanvasSize()):(e.parentNode.insertBefore(n,e),e.parentNode.removeChild(e),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullScreen),Browser.updateCanvasDimensions(n)}Browser.lockPointer=e,Browser.resizeCanvas=r,Browser.vrDevice=t,"undefined"==typeof Browser.lockPointer&&(Browser.lockPointer=!0),"undefined"==typeof Browser.resizeCanvas&&(Browser.resizeCanvas=!1),"undefined"==typeof Browser.vrDevice&&(Browser.vrDevice=null);var n=Module.canvas;Browser.fullScreenHandlersInstalled||(Browser.fullScreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",o,!1),document.addEventListener("mozfullscreenchange",o,!1),document.addEventListener("webkitfullscreenchange",o,!1),document.addEventListener("MSFullscreenChange",o,!1));var i=document.createElement("div");n.parentNode.insertBefore(i,n),i.appendChild(n),i.requestFullScreen=i.requestFullScreen||i.mozRequestFullScreen||i.msRequestFullscreen||(i.webkitRequestFullScreen?function(){i.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),t?i.requestFullScreen({vrDisplay:t}):i.requestFullScreen()},nextRAF:0,fakeRequestAnimationFrame:function(e){var r=Date.now();if(0===Browser.nextRAF)Browser.nextRAF=r+1e3/60;else for(;r+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var t=Math.max(Browser.nextRAF-r,0);setTimeout(e,t)},requestAnimationFrame:function(e){"undefined"==typeof window?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(e){return function(){return ABORT?void 0:e.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var e=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],e.forEach(function(e){e()})}},safeRequestAnimationFrame:function(e){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?e():Browser
\ No newline at end of file
-F=xi[l>>0]|0,Li[e+9>>0]=(((ia(xi[A+b>>0]|0,a)|0)+(ia(R,g)|0)<<3)+32|0)>>>6,Li[e+1>>0]=(((ia(F,a)|0)+(ia(y,g)|0)<<3)+32|0)>>>6,d=d+-1|0,!d)break;e=e+2|0}s=s+k|0}if(c=c+-1|0,!c)break;e=u+w|0,s=s+p|0}if(_)return void(qi=v);for(u=r+64|0,i=f+((ia(i+o|0,n)|0)+t)|0,f=h;;){if(S)o=u;else{for(o=u+k|0,t=u,u=i,e=E;;){if(R=xi[u>>0]|0,F=xi[u+m>>0]|0,y=u,u=u+2|0,A=xi[y+1>>0]|0,Li[t+8>>0]=(((ia(F,a)|0)+(ia(xi[y+n>>0]|0,g)|0)<<3)+32|0)>>>6,Li[t>>0]=(((ia(A,a)|0)+(ia(R,g)|0)<<3)+32|0)>>>6,R=xi[u>>0]|0,Li[t+9>>0]=(((ia(xi[y+b>>0]|0,a)|0)+(ia(F,g)|0)<<3)+32|0)>>>6,Li[t+1>>0]=(((ia(R,a)|0)+(ia(A,g)|0)<<3)+32|0)>>>6,e=e+-1|0,!e)break;t=t+2|0}i=i+k|0}if(f=f+-1|0,!f)break;u=o+w|0,i=i+p|0}qi=v}function M(e,r,t,o,n,i,a,s,u){e|=0,r|=0,t|=0,o|=0,n|=0,i|=0,a|=0,s|=0,u|=0;var f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,v=0,M=0,y=0,F=0;if(w=s+o|0,d=(w|0)<0?0-s|0:o,l=(a+t|0)<0?0-a|0:t,d=(d|0)>(i|0)?i:d,l=(l|0)>(n|0)?n:l,f=l+a|0,t=d+s|0,o=(l|0)>0?e+l|0:e,(d|0)>0&&(o=o+(ia(d,n)|0)|0),E=(l|0)<0,M=E?0-l|0:0,v=(f|0)>(n|0),y=v?f-n|0:0,g=a-M|0,F=g-y|0,d=(d|0)<0?0-d|0:0,t=(t|0)>(i|0)?t-i|0:0,S=s-d|0,e=S-t|0,v=E|v,a=(d|0)==0,v){if(!a){for(p=(M|0)==0,b=(g|0)==(y|0),m=(y|0)==0,E=o+F|0,f=s+-1-((w|0)>0?w:0)|0,k=~i,k=(f|0)>(k|0)?f:k,f=~k,f=ia(k+((f|0)>0?f:0)+1|0,u)|0,k=r;;){if(p?a=k:(hn(k|0,Li[o>>0]|0,M|0)|0,a=k+M|0),b)l=o;else{for(h=F,_=o,c=a;;){if(Li[c>>0]=Li[_>>0]|0,h=h+-1|0,!h)break;_=_+1|0,c=c+1|0}l=E,a=a+F|0}if(m||hn(a|0,Li[l+-1>>0]|0,y|0)|0,d=d+-1|0,!d)break;k=k+u|0}r=r+f|0}if((S|0)!=(t|0)){for(b=(M|0)==0,p=(g|0)==(y|0),k=(y|0)==0,c=s+-1|0,h=c-((w|0)>0?w:0)|0,m=~i,m=(h|0)>(m|0)?h:m,c=c-m|0,h=~m,h=s+i+-1-((c|0)<(i|0)?i:c)-m-((h|0)>0?h:0)|0,m=ia(h,u)|0,h=ia(h,n)|0,c=r,_=o;;){if(b?d=c:(hn(c|0,Li[_>>0]|0,M|0)|0,d=c+M|0),p)a=_;else{for(a=F,l=_,f=d;;){if(Li[f>>0]=Li[l>>0]|0,a=a+-1|0,!a)break;l=l+1|0,f=f+1|0}a=_+F|0,d=d+F|0}if(k||hn(d|0,Li[a+-1>>0]|0,y|0)|0,e=e+-1|0,!e)break;c=c+u|0,_=_+n|0}o=o+h|0,r=r+m|0}}else{if(!a){for(l=s+-1-((w|0)>0?w:0)|0,a=~i,a=(l|0)>(a|0)?l:a,l=~a,l=ia(a+((l|0)>0?l:0)+1|0,u)|0,a=r;;){if(En(a|0,o|0,F|0)|0,d=d+-1|0,!d)break;a=a+u|0}r=r+l|0}if((S|0)!=(t|0)){for(l=s+-1|0,a=l-((w|0)>0?w:0)|0,d=~i,d=(a|0)>(d|0)?a:d,l=l-d|0,a=~d,a=s+i+-1-((l|0)<(i|0)?i:l)-d-((a|0)>0?a:0)|0,d=ia(a,u)|0,a=ia(a,n)|0,l=r,f=o;;){if(En(l|0,f|0,F|0)|0,e=e+-1|0,!e)break;l=l+u|0,f=f+n|0}o=o+a|0,r=r+d|0}}if(b=0-n|0,m=o+b|0,t)if(e=(M|0)==0,E=(g|0)==(y|0),p=(y|0)==0,k=F-n|0,v)if(e)for(;;){if(E)f=r,l=b;else{for(l=F,f=m,e=r;;){if(Li[e>>0]=Li[f>>0]|0,l=l+-1|0,!l)break;f=f+1|0,e=e+1|0}f=r+F|0,l=k}if(p||hn(f|0,Li[o+(l+-1)>>0]|0,y|0)|0,t=t+-1|0,!t)break;r=r+u|0}else for(;;){if(hn(r|0,Li[m>>0]|0,M|0)|0,l=r+M|0,E)e=b;else{for(e=F,f=m;;){if(Li[l>>0]=Li[f>>0]|0,e=e+-1|0,!e)break;f=f+1|0,l=l+1|0}l=r+(M+F)|0,e=k}if(p||hn(l|0,Li[o+(e+-1)>>0]|0,y|0)|0,t=t+-1|0,!t)break;r=r+u|0}else{if(e){for(;;){if(En(r|0,m|0,F|0)|0,t=t+-1|0,!t)break;r=r+u|0}return}for(;;){if(En(r|0,m|0,F|0)|0,t=t+-1|0,!t)break;r=r+u|0}}}function y(e,r,t,o,n,i,a,s,u){e|=0,r|=0,t|=0,o|=0,n|=0,i|=0,a|=0,s|=0,u|=0;var f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,v=0,y=0,F=0,R=0;if(y=qi,qi=qi+144|0,f=y,(((t|0)>=0?(s+t|0)>>>0>n>>>0|(o|0)<0:!0)?0:(o+1+u|0)>>>0<=i>>>0)?f=e:(v=u+1|0,M(e,f,t,o,n,i,s,v,s),M(e+(ia(i,n)|0)|0,f+(ia(v,s)|0)|0,t,o,n,i,s,v,s),t=0,o=0,n=s,i=v),v=8-a|0,h=u>>>1,_=(h|0)==0,E=s>>>1,S=(E|0)==0,w=16-s|0,g=n<<1,p=g-s|0,m=g|1,b=n+1|0,k=E<<1,_)return void(qi=y);for(e=r,s=f+((ia(o,n)|0)+t)|0,c=h;;){if(S)u=e;else{for(u=e+k|0,l=s,d=E;;){if(F=xi[l+n>>0]|0,R=xi[l>>0]|0,Li[e+8>>0]=(((ia(F,v)|0)+(ia(xi[l+g>>0]|0,a)|0)<<3)+32|0)>>>6,Li[e>>0]=(((ia(R,v)|0)+(ia(F,a)|0)<<3)+32|0)>>>6,F=xi[l+b>>0]|0,R=xi[l+1>>0]|0,Li[e+9>>0]=(((ia(F,v)|0)+(ia(xi[l+m>>0]|0,a)|0)<<3)+32|0)>>>6,Li[e+1>>0]=(((ia(R,v)|0)+(ia(F,a)|0)<<3)+32|0)>>>6,d=d+-1|0,!d)break;e=e+2|0,l=l+2|0}s=s+k|0}if(c=c+-1|0,!c)break;e=u+w|0,s=s+p|0}if(_)return void(qi=y);for(u=r+64|0,o=f+((ia(i+o|0,n)|0)+t)|0,f=h;;){if(S)i=u;else{for(i=u+k|0,t=o,e=E;;){if(R=xi[t+n>>0]|0,F=xi[t>>0]|0,Li[u+8>>0]=(((ia(R,v)|0)+(ia(xi[t+g>>0]|0,a)|0)<<3)+32|0)>>>6,Li[u>>0]=(((ia(F,v)|0)+(ia(R,a)|0)<<3)+32|0)>>>6,R=xi[t+b>>0]|0,F=xi[t+1>>0]|0,Li[u+9>>0]=(((ia(R,v)|0)+(ia
\ No newline at end of file
-qi=m,e|0;if(t=Bi[n>>2]|0,!(Bi[t+920>>2]|0))break;if(o=Bi[t+948>>2]|0,(Bi[t+944>>2]|0)>>>0>o>>>0)return e=1,qi=m,e|0;if(o>>>0<(Bi[l>>2]|0)>>>0)return e=1,qi=m,e|0;if(o>>>0>(Bi[i>>2]|0)>>>0)return e=1,qi=m,e|0;Bi[i>>2]=(o|0)==0?1:o;break}while(0);return be(e)|0,e=0,qi=m,e|0}return e=Bi[Wi>>2]|0,Bi[_>>2]=7432,la(e|0,7592,_|0)|0,e=1,qi=m,e|0}function H(e,r){e|=0,r|=0;var t=0,o=0,n=0,i=0,a=0;if((Bi[e>>2]|0)!=(Bi[r>>2]|0))return r=1,r|0;if((Bi[e+4>>2]|0)!=(Bi[r+4>>2]|0))return r=1,r|0;if((Bi[e+12>>2]|0)!=(Bi[r+12>>2]|0))return r=1,r|0;if(t=Bi[e+16>>2]|0,(t|0)!=(Bi[r+16>>2]|0))return r=1,r|0;if((Bi[e+44>>2]|0)!=(Bi[r+44>>2]|0))return r=1,r|0;if((Bi[e+48>>2]|0)!=(Bi[r+48>>2]|0))return r=1,r|0;if((Bi[e+52>>2]|0)!=(Bi[r+52>>2]|0))return r=1,r|0;if((Bi[e+56>>2]|0)!=(Bi[r+56>>2]|0))return r=1,r|0;if(a=Bi[e+60>>2]|0,(a|0)!=(Bi[r+60>>2]|0))return r=1,r|0;if((Bi[e+80>>2]|0)!=(Bi[r+80>>2]|0))return r=1,r|0;e:do if(t){if((t|0)==1){if((Bi[e+24>>2]|0)!=(Bi[r+24>>2]|0))return r=1,r|0;if((Bi[e+28>>2]|0)!=(Bi[r+28>>2]|0))return r=1,r|0;if((Bi[e+32>>2]|0)!=(Bi[r+32>>2]|0))return r=1,r|0;if(t=Bi[e+36>>2]|0,(t|0)!=(Bi[r+36>>2]|0))return r=1,r|0;if(t){for(o=Bi[e+40>>2]|0,n=Bi[r+40>>2]|0,i=0;;){if((Bi[o+(i<<2)>>2]|0)!=(Bi[n+(i<<2)>>2]|0)){t=1;break}if(i=i+1|0,i>>>0>=t>>>0)break e}return t|0}}}else if((Bi[e+20>>2]|0)!=(Bi[r+20>>2]|0))return r=1,r|0;while(0);if(a){if((Bi[e+64>>2]|0)!=(Bi[r+64>>2]|0))return r=1,r|0;if((Bi[e+68>>2]|0)!=(Bi[r+68>>2]|0))return r=1,r|0;if((Bi[e+72>>2]|0)!=(Bi[r+72>>2]|0))return r=1,r|0;if((Bi[e+76>>2]|0)!=(Bi[r+76>>2]|0))return r=1,r|0}return r=0,r|0}function U(e,r,t,o){e|=0,r|=0,t|=0,o|=0;var n=0,a=0,s=0,u=0,f=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,v=0,M=0,y=0,F=0,R=0,A=0,O=0,D=0,P=0,T=0;for(O=qi,qi=qi+448|0,A=O,E=O+12|0,F=O+8|0,y=O+4|0,E=E+(0-E&15)|0,S=Bi[r+3376>>2]|0,_=Bi[o>>2]|0,Bi[F>>2]=0,w=r+1192|0,Bi[w>>2]=(Bi[w>>2]|0)+1,h=r+1200|0,Bi[h>>2]=0,m=r+12|0,Bi[y>>2]=(Bi[o+48>>2]|0)+(Bi[(Bi[m>>2]|0)+52>>2]|0),b=o+36|0,p=r+1212|0,g=o+52|0,v=o+56|0,M=o+60|0,k=o+4|0,u=o+44|0,f=r+1220|0,d=r+1172|0,R=r+1176|0,c=S+12|0,s=0,n=0;;){if(o=Bi[p>>2]|0,(Bi[b>>2]|0)==0?(Bi[o+(_*216|0)+196>>2]|0)!=0:0){o=4;break}if(a=Bi[(Bi[m>>2]|0)+56>>2]|0,T=Bi[g>>2]|0,P=Bi[v>>2]|0,D=Bi[M>>2]|0,Bi[o+(_*216|0)+4>>2]=Bi[w>>2],Bi[o+(_*216|0)+8>>2]=T,Bi[o+(_*216|0)+12>>2]=P,Bi[o+(_*216|0)+16>>2]=D,Bi[o+(_*216|0)+24>>2]=a,a=Bi[k>>2]|0,(a|0)!=2?!((a|0)==7|(n|0)!=0):0){if(n=Se(e,F)|0){o=28;break}if(o=Bi[F>>2]|0,o>>>0>((Bi[R>>2]|0)-_|0)>>>0){o=9;break}o?(hn(c|0,0,164)|0,Bi[S>>2]=0,n=1):n=0}if(o=Bi[F>>2]|0)Bi[F>>2]=o+-1,a=n;else{if(n=i(e,S,(Bi[p>>2]|0)+(_*216|0)|0,Bi[k>>2]|0,Bi[u>>2]|0)|0){o=15;break}a=0}if(n=l((Bi[p>>2]|0)+(_*216|0)|0,S,t,f,y,_,Bi[(Bi[m>>2]|0)+64>>2]|0,E)|0){o=17;break}if(n=((Bi[(Bi[p>>2]|0)+(_*216|0)+196>>2]|0)==1&1)+s|0,o=pe(e)|0?1:(Bi[F>>2]|0)!=0,T=Bi[k>>2]|0,(T|0)==7|(T|0)==2&&(Bi[h>>2]=_),_=ke(Bi[d>>2]|0,Bi[R>>2]|0,_)|0,!((_|0)!=0|o^1)){o=23;break}if(!o){o=25;break}s=n,n=a}return(o|0)==4?(T=Bi[Wi>>2]|0,Bi[A>>2]=7472,la(T|0,7592,A|0)|0,T=1,qi=O,T|0):(o|0)==9?(T=Bi[Wi>>2]|0,Bi[A>>2]=7504,la(T|0,7592,A|0)|0,T=1,qi=O,T|0):(o|0)==15?(T=Bi[Wi>>2]|0,Bi[A>>2]=7520,la(T|0,7592,A|0)|0,T=n,qi=O,T|0):(o|0)==17?(T=Bi[Wi>>2]|0,Bi[A>>2]=7544,la(T|0,7592,A|0)|0,T=n,qi=O,T|0):(o|0)==23?(T=Bi[Wi>>2]|0,Bi[A>>2]=7560,la(T|0,7592,A|0)|0,T=1,qi=O,T|0):(o|0)==25?(o=r+1196|0,n=(Bi[o>>2]|0)+n|0,n>>>0>(Bi[R>>2]|0)>>>0?(T=Bi[Wi>>2]|0,Bi[A>>2]=7576,la(T|0,7592,A|0)|0,T=1,qi=O,T|0):(Bi[o>>2]=n,T=0,qi=O,T|0)):(o|0)==28?(qi=O,n|0):0}function V(e,r){e|=0,r|=0;var t=0,o=0,n=0,i=0,a=0,s=0;a=Bi[e+1192>>2]|0,t=Bi[e+1200>>2]|0,i=e+1212|0;e:do if(t){o=e+16|0,n=0;do{do if(t=t+-1|0,t>>>0<=r>>>0)break e;while((Bi[(Bi[i>>2]|0)+(t*216|0)+4>>2]|0)!=(a|0));n=n+1|0,s=Bi[(Bi[o>>2]|0)+52>>2]|0}while(n>>>0<(s>>>0>10?s:10)>>>0)}else t=r;while(0);for(n=e+1172|0,o=e+1176|0,r=t;;){if(t=Bi[i>>2]|0,(Bi[t+(r*216|0)+4>>2]|0)!=(a|0)){t=11;break}if(t=t+(r*216|0)+196|0,e=Bi[t>>2]|0,!e){t=11;break}if(Bi[t>>2]=e+-1,r=ke(Bi[n>>2]|0,Bi[o>>2]|0,r)|0,!r){t=11;break}}}function q(e,r,t,o,n){e|=0,r|=0,t|=0,o|=0,n|=0;var i=0,a=0,s=0,u=0,f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0;if(p=ia(n,o)|0,c=
\ No newline at end of file
-r|0;n=(t|0)==1,Bi[r>>2]=n&1;do if(n){if(o=ue(e,8)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+4>>2]=o,(o|0)==255){if(o=ue(e,16)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+8>>2]=o,t=ue(e,16)|0,(t|0)==-1)return r=1,r|0;Bi[r+12>>2]=t;break}}while(0);if(t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;n=(t|0)==1,Bi[r+16>>2]=n&1;do if(n){if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;Bi[r+20>>2]=(o|0)==1&1;break}while(0);if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;n=(o|0)==1,Bi[r+24>>2]=n&1;do{if(n){if(o=ue(e,3)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+28>>2]=o,o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+32>>2]=(o|0)==1&1,o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(n=(o|0)==1,Bi[r+36>>2]=n&1,!n){Bi[r+40>>2]=2,Bi[r+44>>2]=2,Bi[r+48>>2]=2;break}if(o=ue(e,8)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+40>>2]=o,o=ue(e,8)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+44>>2]=o,o=ue(e,8)|0,(o|0)==-1)return r=1,r|0;Bi[r+48>>2]=o;break}Bi[r+28>>2]=5,Bi[r+40>>2]=2,Bi[r+44>>2]=2,Bi[r+48>>2]=2}while(0);if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(n=(o|0)==1,Bi[r+52>>2]=n&1,n){if(o=r+56|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>5)return r=1,r|0;if(o=r+60|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>5)return r=1,r|0}if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;n=(o|0)==1,Bi[r+64>>2]=n&1;do if(n){if(o=fe(e)|0,(le(e,32)|0)==-1|(o|0)==0)return r=1,r|0;if(Bi[r+68>>2]=o,o=fe(e)|0,(le(e,32)|0)==-1|(o|0)==0)return r=1,r|0;if(Bi[r+72>>2]=o,o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;Bi[r+76>>2]=(o|0)==1&1;break}while(0);if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(o=(o|0)==1,n=r+80|0,Bi[n>>2]=o&1,o){if(o=ye(e,r+84|0)|0)return r=o,r|0}else Bi[r+84>>2]=1,Bi[r+96>>2]=288000001,Bi[r+224>>2]=288000001,Bi[r+480>>2]=24,Bi[r+484>>2]=24,Bi[r+488>>2]=24,Bi[r+492>>2]=24;if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(t=(o|0)==1,o=r+496|0,Bi[o>>2]=t&1,t){if(t=ye(e,r+500|0)|0)return r=t,r|0}else Bi[r+500>>2]=1,Bi[r+512>>2]=240000001,Bi[r+640>>2]=240000001,Bi[r+896>>2]=24,Bi[r+900>>2]=24,Bi[r+904>>2]=24,Bi[r+908>>2]=24;((Bi[n>>2]|0)==0?(Bi[o>>2]|0)==0:0)||(i=46);do if((i|0)==46){if(t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;Bi[r+912>>2]=(t|0)==1&1;break}while(0);if(t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;if(Bi[r+916>>2]=(t|0)==1&1,t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;i=(t|0)==1,Bi[r+920>>2]=i&1;do{if(i){if(t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;if(Bi[r+924>>2]=(t|0)==1&1,t=r+928|0,o=Se(e,t)|0)return r=o,r|0;if((Bi[t>>2]|0)>>>0>16)return r=1,r|0;if(o=r+932|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>16)return r=1,r|0;if(o=r+936|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>16)return r=1,r|0;if(o=r+940|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>16)return r=1,r|0;if(t=Se(e,r+944|0)|0)return r=t,r|0;if(t=Se(e,r+948|0)|0,!t)break;return t|0}Bi[r+924>>2]=1,Bi[r+928>>2]=2,Bi[r+932>>2]=1,Bi[r+936>>2]=16,Bi[r+940>>2]=16,Bi[r+944>>2]=16,Bi[r+948>>2]=16}while(0);return r=0,r|0}function ye(e,r){e|=0,r|=0;var t=0,o=0,n=0,i=0,a=0,s=0;if(t=Se(e,r)|0)return r=t,r|0;if(s=(Bi[r>>2]|0)+1|0,Bi[r>>2]=s,s>>>0>32)return r=1,r|0;if(t=ue(e,4)|0,(t|0)==-1)return r=1,r|0;if(s=r+4|0,Bi[s>>2]=t,o=ue(e,4)|0,(o|0)==-1)return r=1,r|0;a=r+8|0,Bi[a>>2]=o;e:do if(Bi[r>>2]|0){for(i=0;;){if(n=r+(i<<2)+12|0,t=Se(e,n)|0){o=17;break}if(o=Bi[n>>2]|0,(o|0)==-1){t=1,o=17;break}if(t=o+1|0,Bi[n>>2]=t,Bi[n>>2]=t<<(Bi[s>>2]|0)+6,n=r+(i<<2)+140|0,t=Se(e,n)|0){o=17;break}if(o=Bi[n>>2]|0,(o|0)==-1){t=1,o=17;break}if(o=o+1|0,Bi[n>>2]=o,Bi[n>>2]=o<<(Bi[a>>2]|0)+4,o=ue(e,1)|0,(o|0)==-1){t=1,o=17;break}if(Bi[r+(i<<2)+268>>2]=(o|0)==1&1,i=i+1|0,i>>>0>=(Bi[r>>2]|0)>>>0)break e}if((o|0)==17)return t|0}while(0);return t=ue(e,5)|0,(t|0)==-1?(r=1,r|0):(Bi[r+396>>2]=t+1,t=ue(e,5)|0,(t|0)==-1?(r=1,r|0):(Bi[r+400>>2]=t+1,t=ue(e,5)|0,(t|0)==-1?(r=1,r|0):(Bi[r+404>>2]=t+1,t=ue(e,5)|0,(t|0)==-1?(r=1,r|0):(Bi[r+408>>2]=t,r=0,r|0))))}function Fe(e){e|=0;var r=0,t=0,o=0,n=0,i=0,a=0,s=0,u=0,f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,v=0,M=0,y=0,F=0,R=0,A=0,O=0,D=0,P=0,T=0,N=0,C=0,L=0,I=0,B=0,x=0,H=0,U=0,V=0;do if(e>>>0<245){if(h=e>>>0<11?16:e+11&-8,e=h>>>3,l=Bi[2176]|0,s=l>>>e,s&3){o=(s&1^1)+e|0,n=o<<1,r=8744+(n<<2)|0,n=8744+(n+2<<2)|0,i=Bi[n>>2]|0,a=i+8|0,s=Bi[a>>2]|0;do if((r|0)!=(s|0)){i
\ No newline at end of file
-r>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=r+1,r=xi[r>>0]|0):r=ur(e)|0,(r+-48|0)>>>0<10|(r+-65|0)>>>0<26?0:!((r+-97|0)>>>0<26|(r|0)==95))break;n=n+1|0}if((r|0)==41)return b=Ki,qi=O,+b;if(r=(Bi[g>>2]|0)==0,r||(Bi[v>>2]=(Bi[v>>2]|0)+-1),!_)return Bi[(ka()|0)>>2]=22,sr(e,0),b=0,qi=O,+b;if((n|0)==0|r)return b=Ki,qi=O,+b;do n=n+-1|0,Bi[v>>2]=(Bi[v>>2]|0)+-1;while((n|0)!=0);return o=Ki,qi=O,+o}if(n)return Bi[g>>2]|0&&(Bi[v>>2]=(Bi[v>>2]|0)+-1),Bi[(ka()|0)>>2]=22,sr(e,0),i=0,qi=O,+i;do if((a|0)==48){if(a=Bi[v>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=a+1,a=xi[a>>0]|0):a=ur(e)|0,(a|32|0)!=120){if(!(Bi[g>>2]|0)){a=48;break}Bi[v>>2]=(Bi[v>>2]|0)+-1,a=48;break}for(a=Bi[v>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=a+1,c=xi[a>>0]|0,a=0):(c=ur(e)|0,a=0);;){if((c|0)==46){u=a,E=70;break}if((c|0)!=48){l=0,S=0,f=0,r=0,_=0,p=0,d=1,n=0,o=0;break}a=Bi[v>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=a+1,c=xi[a>>0]|0,a=1):(c=ur(e)|0,a=1)}if((E|0)==70)if(a=Bi[v>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=a+1,c=xi[a>>0]|0):c=ur(e)|0,(c|0)==48){f=0,r=0;do a=Bi[v>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=a+1,c=xi[a>>0]|0):c=ur(e)|0,f=pn(f|0,r|0,-1,-1)|0,r=Zi;while((c|0)==48);l=0,S=0,a=1,_=1,p=0,d=1,n=0,o=0}else l=0,S=0,f=0,r=0,a=u,_=1,p=0,d=1,n=0,o=0;e:for(;;){u=c+-48|0;do{if(u>>>0>=10){if(h=c|32,m=(c|0)==46,!((h+-97|0)>>>0<6|m)){u=S;break e}if(m){if(_){u=S,c=46;break e}f=S,r=l,u=S,_=1,m=p,b=d;break}c=(c|0)>57?h+-87|0:u,E=83;break}c=u,E=83}while(0);if((E|0)==83){E=0;do if((l|0)<0|(l|0)==0&S>>>0<8)m=p,b=d,n=c+(n<<4)|0;else{if((l|0)<0|(l|0)==0&S>>>0<14){d*=.0625,m=p,b=d,o+=d*+(c|0);break}(c|0)==0|(p|0)!=0?(m=p,b=d):(m=1,b=d,o+=d*.5)}while(0);u=pn(S|0,l|0,1,0)|0,l=Zi,a=1}c=Bi[v>>2]|0,c>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=c+1,S=u,c=xi[c>>0]|0,p=m,d=b):(S=u,c=ur(e)|0,p=m,d=b)}if(!a)return r=(Bi[g>>2]|0)==0,r||(Bi[v>>2]=(Bi[v>>2]|0)+-1),t?(r?0:(w=Bi[v>>2]|0,Bi[v>>2]=w+-1,(_|0)!=0))&&(Bi[v>>2]=w+-2):sr(e,0),b=+(R|0)*0,qi=O,+b;if(_=(_|0)==0,m=_?u:f,_=_?l:r,(l|0)<0|(l|0)==0&u>>>0<8){f=u;do n<<=4,f=pn(f|0,l|0,1,0)|0,l=Zi;while((l|0)<0|(l|0)==0&f>>>0<8)}do if((c|32|0)==112){if(r=fn(e,t)|0,a=Zi,(r|0)==0&(a|0)==-2147483648){if(t){if(!(Bi[g>>2]|0)){r=0,a=0;break}Bi[v>>2]=(Bi[v>>2]|0)+-1,r=0,a=0;break}return sr(e,0),b=0,qi=O,+b}}else Bi[g>>2]|0?(Bi[v>>2]=(Bi[v>>2]|0)+-1,r=0,a=0):(r=0,a=0);while(0);if(F=mn(m|0,_|0,2)|0,F=pn(F|0,Zi|0,-32,-1)|0,r=pn(F|0,Zi|0,r|0,a|0)|0,a=Zi,!n)return b=+(R|0)*0,qi=O,+b;if((a|0)>0|(a|0)==0&r>>>0>(0-A|0)>>>0)return Bi[(ka()|0)>>2]=34,b=+(R|0)*1.7976931348623157e308*1.7976931348623157e308,qi=O,+b;if(F=A+-106|0,e=((F|0)<0)<<31>>31,(a|0)<(e|0)|(a|0)==(e|0)&r>>>0<F>>>0)return Bi[(ka()|0)>>2]=34,b=+(R|0)*2.2250738585072014e-308*2.2250738585072014e-308,qi=O,+b;if((n|0)>-1){do n<<=1,o>=.5?(i=o+-1,n|=1):i=o,o+=i,r=pn(r|0,a|0,-1,-1)|0,a=Zi;while((n|0)>-1);_=r,d=o}else _=r,d=o;return r=_n(32,0,A|0,((A|0)<0)<<31>>31|0)|0,r=pn(_|0,a|0,r|0,Zi|0)|0,A=Zi,0>(A|0)|0==(A|0)&s>>>0>r>>>0?(r|0)<0?(r=0,E=126):E=124:(r=s,E=124),(E|0)==124&&((r|0)<53?E=126:(a=r,i=+(R|0),o=0)),(E|0)==126&&(o=+(R|0),a=r,i=o,o=+Or(+jt(1,84-r|0),o)),A=(a|0)<32&d!=0&(n&1|0)==0,o=i*(A?0:d)+(o+i*+(((A&1)+n|0)>>>0))-o,o==0&&(Bi[(ka()|0)>>2]=34),b=+Kt(o,_),qi=O,+b}while(0);for(M=A+s|0,y=0-M|0,c=0;;){if((a|0)==46){E=137;break}if((a|0)!=48){r=0,h=0,p=0;break}a=Bi[v>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=a+1,a=xi[a>>0]|0,c=1):(a=ur(e)|0,c=1)}if((E|0)==137)if(a=Bi[v>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=a+1,a=xi[a>>0]|0):a=ur(e)|0,(a|0)==48)for(r=0,a=0;;){if(r=pn(r|0,a|0,-1,-1)|0,c=Zi,a=Bi[v>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=a+1,a=xi[a>>0]|0):a=ur(e)|0,(a|0)!=48){h=c,c=1,p=1;break}a=c}else r=0,h=0,p=1;Bi[F>>2]=0,l=a+-48|0,_=(a|0)==46;e:do if(l>>>0<10|_){w=F+496|0,k=0,f=0,E=p,m=0,u=0,S=0;r:for(;;){do if(_){if(E){a=h,l=k,_=S;break r}r=k,h=f,E=1,p=S}else{if(n=pn(k|0,f|0,1,0)|0,f=Zi,p=(a|0)!=48,(u|0)>=125){if(!p){k=n,p=S;break}Bi[w>>2]=Bi[w>>2]|1,k=n,p=S;break}_=F+(u<<2)|0,m&&(l=a+-48+((Bi[_>>2]|0)*10|0)|0),Bi[_>>2]=l,m=m+1|0,_=(m|0)==9,k=n,c=1,m=_?0:m,u=(_&1)+u|0,p=p?n:S}while(0);if(_=Bi[v>>2]|0,_>>>0<(Bi[g>>2]|0)>>>0?(Bi[v>>2]=_+1,a=xi[_>>0]|0):a=ur(e)|0,l=a+-48|0,_=(a|0)==46,!(l>>>0<10|_)){l=E,w=u,_=p,E=160;break e}S
\ No newline at end of file
-+e}function gt(e){return e=+e,+ +St(e)}function vt(e){e=+e;var r=0;return r=er(32)|0,e=+Vt(e),~~e|0}function Mt(e){return e=+e,~~+qt(e)|0}function yt(e){return e=+e,vt(e)|0}function Ft(e){return e=+e,~~+Gt(e)|0}function Rt(e){return e=+e,~~+Wt(e)|0}function At(e){return e=+e,~~+Yt(e)|0}function Ot(e,r){e=+e,r|=0;var t=0,o=0,n=0,i=0,a=0;return Vi[zi>>3]=e,n=Bi[zi>>2]|0,i=Bi[zi+4>>2]|0,t=kn(n|0,i|0,52)|0,t=(t&2047)+-1023|0,(t|0)>51?(Vi[r>>3]=e,(t|0)!=1024|(n|0)==0&(i&1048575|0)==0?(Bi[zi>>2]=0,Bi[zi+4>>2]=i&-2147483648,e=+Vi[zi>>3],+e):+e):(t|0)<0?(Bi[zi>>2]=0,Bi[zi+4>>2]=i&-2147483648,Vi[r>>3]=+Vi[zi>>3],+e):(t=kn(-1,1048575,t|0)|0,o=Zi,(t&n|0)==0&(o&i|0)==0?(Vi[r>>3]=e,Bi[zi>>2]=0,Bi[zi+4>>2]=i&-2147483648,e=+Vi[zi>>3],+e):(Bi[zi>>2]=n&~t,Bi[zi+4>>2]=i&~o,a=+Vi[zi>>3],Vi[r>>3]=a,e-=a,+e))}function Dt(e,r){e=+e,r|=0;var t=0,o=0,n=0;return Ui[zi>>2]=e,o=Bi[zi>>2]|0,t=(o>>>23&255)+-127|0,(t|0)>22?(Ui[r>>2]=e,(t|0)!=128|(o&8388607|0)==0?(Bi[zi>>2]=o&-2147483648,e=+Ui[zi>>2],+e):+e):(t|0)<0?(Ui[r>>2]=(Bi[zi>>2]=o&-2147483648,+Ui[zi>>2]),+e):(t=8388607>>>t,t&o?(Bi[zi>>2]=o&~t,n=+Ui[zi>>2],Ui[r>>2]=n,e-=n,+e):(Ui[r>>2]=e,Bi[zi>>2]=o&-2147483648,e=+Ui[zi>>2],+e))}function Pt(e,r){e=+e,r|=0;var t=0,o=0;return t=qi,qi=qi+16|0,o=t,e=+Ot(e,o),Vi[r>>3]=+Vi[o>>3],qi=t,+e}function Tt(e){return e|=0,+Ki}function Nt(e){return e|=0,+Ki}function Ct(e){return e|=0,+Ki}function Lt(e){e=+e;var r=0;return r=er(32)|0,e=+Vt(e),r?+e:+e}function It(e){e=+e;var r=0;return r=er(32)|0,e=+qt(e),r?+e:+e}function Bt(e){return e=+e,+ +Lt(e)}function xt(e,r){e=+e,r=+r;var t=0;return t=qi,qi=qi+16|0,r=+_a(+e,+r,t|0),qi=t,+r}function Ht(e,r){e=+e,r=+r;var t=0;return t=qi,qi=qi+16|0,r=+fa(+e,+r,t|0),qi=t,+r}function Ut(e,r){return e=+e,r=+r,+ +xt(e,r)}function Vt(e){e=+e;var r=0,t=0;return Vi[zi>>3]=e,r=Bi[zi+4>>2]|0,t=r&2146435072,t>>>0>1126170624|(t|0)==1126170624&!1?+e:(r=(r|0)<0,e=r?e+-4503599627370496+4503599627370496:e+4503599627370496+-4503599627370496,e!=0?+e:(e=r?-0:0,+e))}function qt(e){e=+e;var r=0;return Ui[zi>>2]=e,r=Bi[zi>>2]|0,(r&2130706432)>>>0>1249902592?+e:(r=(r|0)<0,e=r?e+-8388608+8388608:e+8388608+-8388608,e!=0?+e:(e=r?-0:0,+e))}function zt(e){return e=+e,+ +Vt(e)}function Gt(e){e=+e;var r=0,t=0,o=0,n=0,i=0;return i=qi,qi=qi+16|0,Vi[zi>>3]=e,t=Bi[zi+4>>2]|0,n=kn(Bi[zi>>2]|0,t|0,52)|0,n&=2047,n>>>0>1074?(qi=i,+e):(t=(t|0)<0,r=t?-e:e,o=r+4503599627370496,n>>>0<1022?(Vi[i>>3]=o,e*=0,qi=i,+e):(o=o+-4503599627370496-r,o>.5?r=r+o+-1:(r+=o,o<=-.5&&(r+=1)),t?(e=-r,qi=i,+e):(e=r,qi=i,+e)))}function Wt(e){e=+e;var r=0,t=0,o=0,n=0,i=0,a=0;a=qi,qi=qi+16|0,i=a,Ui[zi>>2]=e,r=Bi[zi>>2]|0,n=r>>>23&255;do if(n>>>0<=149){if(r=(r|0)<0,o=r?-e:e,t=o+8388608,n>>>0<126){Ui[i>>2]=t,e*=0;break}t=t+-8388608-o,t>.5?e=o+t+-1:(e=o+t,t<=-.5&&(e+=1)),r&&(e=-e)}while(0);return qi=a,+e}function Yt(e){return e=+e,+ +Gt(e)}function jt(e,r){e=+e,r|=0;var t=0;return(r|0)>1023?(e*=8.98846567431158e307,t=r+-1023|0,(t|0)>1023&&(t=r+-2046|0,t=(t|0)>1023?1023:t,e*=8.98846567431158e307)):(r|0)<-1022?(e*=2.2250738585072014e-308,t=r+1022|0,(t|0)<-1022&&(t=r+2044|0,t=(t|0)<-1022?-1022:t,e*=2.2250738585072014e-308)):t=r,t=mn(t+1023|0,0,52)|0,r=Zi,Bi[zi>>2]=t,Bi[zi+4>>2]=r,+(e*+Vi[zi>>3])}function Kt(e,r){return e=+e,r|=0,+ +jt(e,r)}function Xt(e,r,t){e=+e,r|=0,t|=0,Vi[r>>3]=+ra(+e),Vi[t>>3]=+ea(+e)}function Zt(e,r,t){e=+e,r|=0,t|=0,Ui[r>>2]=+ra(+e),Ui[t>>2]=+ea(+e)}function Qt(e,r,t){e=+e,r|=0,t|=0,Vi[r>>3]=+ra(+e),Vi[t>>3]=+ea(+e)}function Jt(e){e=+e;var r=0,t=0,o=0;return Vi[zi>>3]=e,o=Bi[zi+4>>2]|0,t=(o|0)<0?-.5:.5,o&=2147483647,Bi[zi>>2]=Bi[zi>>2],Bi[zi+4>>2]=o,r=+Vi[zi>>3],o>>>0>=1082535490?(e=t*2*+fr(r),+e):(r=+Ir(r),o>>>0>=1072693248?(e=t*(r+r/(r+1)),+e):o>>>0<1045430272?+e:(e=t*(r*2-r*r/(r+1)),+e))}function $t(e){e=+e;var r=0,t=0,o=0;return Ui[zi>>2]=e,o=Bi[zi>>2]|0,t=(o|0)<0?-.5:.5,o&=2147483647,Bi[zi>>2]=o,r=+Ui[zi>>2],o>>>0>=1118925335?(e=t*2*+lr(r),+e):(r=+Br(r),o>>>0>=1065353216?(e=t*(r+r/(r+1)),+e):o>>>0<964689920?+e:(e=t*(r*2-r*r/(r+1)),+e))}function eo(e){return e=+e,+ +Jt(e)}function ro(e){e=+e;var r=0,t=0,o=0,n=0;n=qi,qi=qi+16|0,o=n,Vi[zi>>3]=e,t=Bi[zi+4>>2]|0,r=t&2
\ No newline at end of file
-se=w,ue=g,T=63;break r}while(0)}while(0);if((T|0)==62){if(T=0,!oe){g=ie,w=ae,h=W,r=D;continue}se=ae,ue=ie,T=63}(T|0)==63&&(T=0,ke=Li[f>>0]|0,Ee=ue,we=se),k=ke<<24>>24,k=(m|0)!=0&(k&15|0)==3?k&-33:k,p=c&-65537,O=(c&8192|0)==0?c:p;r:do switch(k|0){case 111:if(s=(Ee|0)==0&(we|0)==0)a=Se;else{a=Se,r=Ee,u=we;do a=a+-1|0,Li[a>>0]=r&7|48,r=kn(r|0,u|0,3)|0,u=Zi;while(!((r|0)==0&(u|0)==0))}I=(O&8|0)==0|s,B=Ee,x=we,N=O,C=y,L=I&1^1,I=I?14520:14525,T=90;break;case 105:case 100:if((we|0)<0){ve=_n(0,0,Ee|0,we|0)|0,ge=Zi,ze=1,Ge=14520,T=85;break r}O&2048?(ge=we,ve=Ee,ze=1,Ge=14521,T=85):(Ge=O&1,ge=we,ve=Ee,ze=Ge,Ge=(Ge|0)==0?14520:14522,T=85);break;case 115:Pe=(Ee|0)==0?14536:Ee,T=95;break;case 67:Bi[Ke>>2]=Ee,Bi[Fe>>2]=0,fe=Ke,le=Re,Ve=-1,T=100;break;case 83:r=Ee,y?(fe=r,le=Ee,Ve=y,T=100):(z=Ee,G=r,q=0,T=105);break;case 112:Ie=O|8,Ue=y>>>0>8?y:8,je=120,T=74;break;case 88:case 120:Ie=O,Ue=y,je=k,T=74;break;case 110:switch(m|0){case 7:g=Ee,Bi[g>>2]=W,Bi[g+4>>2]=((W|0)<0)<<31>>31,g=Ee,w=we,h=W,r=D;continue e;case 1:Bi[Ee>>2]=W,g=Ee,w=we,h=W,r=D;continue e;case 2:g=Ee,Bi[g>>2]=W,Bi[g+4>>2]=((W|0)<0)<<31>>31,g=Ee,w=we,h=W,r=D;continue e;case 3:Ii[Ee>>1]=W,g=Ee,w=we,h=W,r=D;continue e;case 4:Li[Ee>>0]=W,g=Ee,w=we,h=W,r=D;continue e;case 6:Bi[Ee>>2]=W,g=Ee,w=we,h=W,r=D;continue e;case 0:Bi[Ee>>2]=W,g=Ee,w=we,h=W,r=D;continue e;default:g=Ee,w=we,h=W,r=D;continue e}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:if(Bi[zi>>2]=Ee,Bi[zi+4>>2]=we,l=+Vi[zi>>3],Bi[Le>>2]=0,(we|0)>=0?O&2048?(F=1,R=14547):(R=O&1,F=R,R=(R|0)==0?14545:14550):(l=-l,F=1,R=14544),Vi[zi>>3]=l,M=Bi[zi+4>>2]&2146435072,!(M>>>0<2146435072|(M|0)==2146435072&!1)){if(f=(k&32|0)!=0,l!=l|!1?(c=0,d=f?14584:14592):(c=F,d=f?14568:14576),p=c+3|0,u=(P|0)>(p|0),(O&8192|0)==0&u){if(f=P-p|0,hn(qe|0,32,(f>>>0>256?256:f)|0)|0,f>>>0>255){r=f;do Po(qe,256,e)|0,r=r+-256|0;while(r>>>0>255);f&=255}Po(qe,f,e)|0}if(Po(R,c,e)|0,Po(d,3,e)|0,(O&73728|0)==8192&u){if(r=P-p|0,hn(qe|0,32,(r>>>0>256?256:r)|0)|0,r>>>0>255){f=r;do Po(qe,256,e)|0,f=f+-256|0;while(f>>>0>255);r&=255}Po(qe,r,e)|0}g=Ee,w=we,h=W,r=D,u=u?P:p;continue e}if(b=+nt(l,Le)*2,d=b!=0,d&&(Bi[Le>>2]=(Bi[Le>>2]|0)+-1),M=k|32,(M|0)==97){E=k&32,u=(E|0)==0?R:R+9|0,S=F|2,d=y>>>0>11?0:12-y|0;do{if(d){l=8;do d=d+-1|0,l*=16;while((d|0)!=0);if((Li[u>>0]|0)==45){l=-(l+(-b-l));break}l=b+l-l;break}l=b}while(0);if(d=Bi[Le>>2]|0,d=(d|0)<0?0-d|0:d,(d|0)<0)for(f=Ae,c=d,h=((d|0)<0)<<31>>31;;){if(d=yn(c|0,h|0,10,0)|0,f=f+-1|0,Li[f>>0]=d|48,d=Mn(c|0,h|0,10,0)|0,!(h>>>0>9|(h|0)==9&c>>>0>4294967295))break;c=d,h=Zi}else f=Ae;if(d)for(;;){if(f=f+-1|0,Li[f>>0]=(d>>>0)%10|0|48,d>>>0<10)break;d=(d>>>0)/10|0}if((f|0)==(Ae|0)&&(Li[Oe>>0]=48,f=Oe),Li[f+-1>>0]=(Bi[Le>>2]>>31&2)+43,c=f+-2|0,Li[c>>0]=k+15,(y|0)<1)if(O&8){f=Ne;do F=~~l,d=f+1|0,Li[f>>0]=xi[14600+F>>0]|E,l=(l-+(F|0))*16,(d-te|0)==1?(Li[d>>0]=46,f=f+2|0):f=d;while(l!=0)}else{f=Ne;do F=~~l,d=f+1|0,Li[f>>0]=xi[14600+F>>0]|E,l=(l-+(F|0))*16,(d-te|0)!=1|l==0?f=d:(Li[d>>0]=46,f=f+2|0);while(l!=0)}else{f=Ne;do F=~~l,d=f+1|0,Li[f>>0]=xi[14600+F>>0]|E,l=(l-+(F|0))*16,(d-te|0)==1?(Li[d>>0]=46,f=f+2|0):f=d;while(l!=0)}if(r=c,p=(y|0)!=0&(ce+f|0)<(y|0)?_e+y-r|0:ne-r+f|0,k=p+S|0,h=O&73728,E=(P|0)>(k|0),(h|0)==0&E){if(d=P-k|0,hn(qe|0,32,(d>>>0>256?256:d)|0)|0,d>>>0>255){r=d;do Po(qe,256,e)|0,r=r+-256|0;while(r>>>0>255);d&=255}Po(qe,d,e)|0}if(Po(u,S,e)|0,(h|0)==65536&E){if(r=P-k|0,hn(qe|0,48,(r>>>0>256?256:r)|0)|0,r>>>0>255){u=r;do Po(qe,256,e)|0,u=u+-256|0;while(u>>>0>255);r&=255}Po(qe,r,e)|0}if(f=f-te|0,Po(Ne,f,e)|0,d=De-c|0,f=p-d-f|0,(f|0)>0){if(hn(qe|0,48,(f>>>0>256?256:f)|0)|0,f>>>0>255){r=f;do Po(qe,256,e)|0,r=r+-256|0;while(r>>>0>255);f&=255}Po(qe,f,e)|0}if(Po(c,d,e)|0,(h|0)==8192&E){if(r=P-k|0,hn(qe|0,32,(r>>>0>256?256:r)|0)|0,r>>>0>255){f=r;do Po(qe,256,e)|0,f=f+-256|0;while(f>>>0>255);r&=255}Po(qe,r,e)|0}g=Ee,w=we,h=W,r=D,u=E?P:k;continue e}f=(y|0)<0?6:y,d?(d=(Bi[Le>>2]|0)+-28|0,Bi[Le>>2]=d,l=b*268435456):(l=b,d=Bi[Le>>2]|0),A=(d|0)<0?Te:he,y=A,c=A;do v=~~l>>>0,Bi[c>>2]=v,c=c+4|0,l=(l-+(v>>>0))*1e9;while(l!=0);if(d=Bi[Le>>2]|0,(d|0)>0){r=d,d=A;do{s=(r|0)>29?29:r,r=c+-4|0;do if(r>>>0>=d>>>0){for(
\ No newline at end of file
-te=We+120|0,oe=We+112|0,ne=We+104|0,ie=We+96|0,ae=We+88|0,se=We+80|0,ue=We+72|0,le=We+64|0,de=We+56|0,ce=We+48|0,_e=We+40|0,he=We+32|0,me=We+124|0,be=We+116|0,pe=We+108|0,ke=We+92|0,Ee=We+84|0,Se=We+76|0,we=We+60|0,ge=We+52|0,ve=We+44|0,Me=We+28|0,ye=We+20|0,Fe=We+12|0,Re=Ye+28|0,Ae=Ye+32|0,Oe=Ye+24|0,De=J<<4,Pe=0-De|0,Te=Pe<<1,Ne=ia(J,-48)|0,Ce=J<<5,Le=Pe<<2,Ie=J*48|0,Be=J<<6,xe=Ye+24|0,He=Ye+12|0,Ue=t<<8,G=t<<6,W=J<<3,z=De|4,Y=Ye+16|0,j=Ye+20|0,K=Ye+12|0,X=Ye+4|0,Z=Ye+8|0,V=0,Q=0,q=r;;){o=Bi[q+8>>2]|0;do if((o|0)!=1){U=q+200|0,u=Bi[U>>2]|0;do if(u){if((o|0)==2?(Bi[q+4>>2]|0)!=(Bi[u+4>>2]|0):0){r=1;break}r=5}else r=1;while(0);H=q+204|0,a=Bi[H>>2]|0;do if(a){if((o|0)==2?(Bi[q+4>>2]|0)!=(Bi[a+4>>2]|0):0)break;r|=2}while(0);B=(r&2|0)==0;do if(B)Bi[Ve>>2]=0,Bi[qe>>2]=0,Bi[ze>>2]=0,Bi[We>>2]=0,t=0;else{if((Bi[q>>2]|0)>>>0<=5?(Bi[a>>2]|0)>>>0<=5:0){((Ii[q+28>>1]|0)==0?(Ii[a+48>>1]|0)==0:0)?((Bi[q+116>>2]|0)==(Bi[a+124>>2]|0)?(x=(Ii[q+132>>1]|0)-(Ii[a+172>>1]|0)|0,((x|0)<0?0-x|0:x)>>>0<=3):0)?(t=(Ii[q+134>>1]|0)-(Ii[a+174>>1]|0)|0,t=((t|0)<0?0-t|0:t)>>>0>3&1):t=1:t=2,Bi[We>>2]=t,((Ii[q+30>>1]|0)==0?(Ii[a+50>>1]|0)==0:0)?((Bi[q+116>>2]|0)==(Bi[a+124>>2]|0)?(x=(Ii[q+136>>1]|0)-(Ii[a+176>>1]|0)|0,((x|0)<0?0-x|0:x)>>>0<=3):0)?(n=(Ii[q+138>>1]|0)-(Ii[a+178>>1]|0)|0,n=((n|0)<0?0-n|0:n)>>>0>3&1):n=1:n=2,Bi[ze>>2]=n,((Ii[q+36>>1]|0)==0?(Ii[a+56>>1]|0)==0:0)?((Bi[q+120>>2]|0)==(Bi[a+128>>2]|0)?(x=(Ii[q+148>>1]|0)-(Ii[a+188>>1]|0)|0,((x|0)<0?0-x|0:x)>>>0<=3):0)?(i=(Ii[q+150>>1]|0)-(Ii[a+190>>1]|0)|0,i=((i|0)<0?0-i|0:i)>>>0>3&1):i=1:i=2,Bi[qe>>2]=i,((Ii[q+38>>1]|0)==0?(Ii[a+58>>1]|0)==0:0)?((Bi[q+120>>2]|0)==(Bi[a+128>>2]|0)?(x=(Ii[q+152>>1]|0)-(Ii[a+192>>1]|0)|0,((x|0)<0?0-x|0:x)>>>0<=3):0)?(o=(Ii[q+154>>1]|0)-(Ii[a+194>>1]|0)|0,o=((o|0)<0?0-o|0:o)>>>0>3&1):o=1:o=2,Bi[Ve>>2]=o,t=(n|t|i|o|0)!=0&1;break}Bi[Ve>>2]=4,Bi[qe>>2]=4,Bi[ze>>2]=4,Bi[We>>2]=4,t=1}while(0);x=(r&4|0)==0;do if(x)Bi[Ge>>2]=0,Bi[$>>2]=0,Bi[ee>>2]=0,Bi[re>>2]=0,i=Bi[q>>2]|0;else{if(i=Bi[q>>2]|0,i>>>0<=5?(Bi[u>>2]|0)>>>0<=5:0){if(((Ii[q+28>>1]|0)==0?(Ii[u+38>>1]|0)==0:0)?((Bi[q+116>>2]|0)==(Bi[u+120>>2]|0)?(I=(Ii[q+132>>1]|0)-(Ii[u+152>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0<=3):0)?(a=(Ii[q+134>>1]|0)-(Ii[u+154>>1]|0)|0,a=((a|0)<0?0-a|0:a)>>>0>3&1):a=1:a=2,Bi[re>>2]=a,((Ii[q+32>>1]|0)==0?(Ii[u+42>>1]|0)==0:0)?((Bi[q+116>>2]|0)==(Bi[u+120>>2]|0)?(I=(Ii[q+140>>1]|0)-(Ii[u+160>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0<=3):0)?(o=(Ii[q+142>>1]|0)-(Ii[u+162>>1]|0)|0,o=((o|0)<0?0-o|0:o)>>>0>3&1):o=1:o=2,Bi[ee>>2]=o,((Ii[q+44>>1]|0)==0?(Ii[u+54>>1]|0)==0:0)?((Bi[q+124>>2]|0)==(Bi[u+128>>2]|0)?(I=(Ii[q+164>>1]|0)-(Ii[u+184>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0<=3):0)?(r=(Ii[q+166>>1]|0)-(Ii[u+186>>1]|0)|0,r=((r|0)<0?0-r|0:r)>>>0>3&1):r=1:r=2,Bi[$>>2]=r,((Ii[q+48>>1]|0)==0?(Ii[u+58>>1]|0)==0:0)?((Bi[q+124>>2]|0)==(Bi[u+128>>2]|0)?(I=(Ii[q+172>>1]|0)-(Ii[u+192>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0<=3):0)?(n=(Ii[q+174>>1]|0)-(Ii[u+194>>1]|0)|0,n=((n|0)<0?0-n|0:n)>>>0>3&1):n=1:n=2,Bi[Ge>>2]=n,t)break;t=(o|a|r|n|0)!=0&1;break}Bi[Ge>>2]=4,Bi[$>>2]=4,Bi[ee>>2]=4,Bi[re>>2]=4,t=1}while(0);if(i>>>0<=5){do{if((s(i)|0)!=1){if(o=Bi[q>>2]|0,(o|0)==2){c=q+28|0,g=Ii[q+32>>1]|0,o=g<<16>>16?2:(Ii[c>>1]|0)!=0?2:0,Bi[he>>2]=o,w=Ii[q+34>>1]|0,S=w<<16>>16==0,i=S?(Ii[q+30>>1]|0)!=0?2:0:2,Bi[_e>>2]=i,d=Ii[q+40>>1]|0,E=d<<16>>16==0,a=E?(Ii[q+36>>1]|0)!=0?2:0:2,Bi[ce>>2]=a,p=Ii[q+42>>1]|0,k=p<<16>>16==0,a=k?(Ii[q+38>>1]|0)!=0?2:0:2,Bi[de>>2]=a,i=Ii[q+48>>1]|0,a=i<<16>>16?2:(Ii[q+44>>1]|0)!=0?2:0,Bi[ie>>2]=a,o=Ii[q+50>>1]|0,v=o<<16>>16==0,a=v?(Ii[q+46>>1]|0)!=0?2:0:2,Bi[ne>>2]=a,M=Ii[q+56>>1]|0,n=M<<16>>16==0,u=n?(Ii[q+52>>1]|0)!=0?2:0:2,Bi[oe>>2]=u,r=(Ii[q+58>>1]|0)==0,u=r?(Ii[q+54>>1]|0)!=0?2:0:2,Bi[te>>2]=u,_=Ii[q+44>>1]|0,l=Ii[q+166>>1]|0,f=Ii[q+142>>1]|0;do if((_|g)<<16>>16)u=2;else{if(I=(Ii[q+164>>1]|0)-(Ii[q+140>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0>3){u=1;break}if(I=l-f|0,((I|0)<0?0-I|0:I)>>>0>3){u=1;break}u=(Bi[q+124>>2]|0)!=(Bi[q+116>>2]|0)&1}while(0);Bi[le>>2]=u,h=Ii[q+46>>1]|0,l=Ii[q+170>>1]|0,f=Ii[q+146>>1]|0;do if((h|w)<<16>>16)l=2;else{if(I=(Ii[q+168>>1]|0)-(Ii[q+144>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0>3){l=1;break}if(I=l-f|0,((I|0)<0?
\ No newline at end of file
-e=e+1|0,a=a+4|0}if(i=i+1|0,i&1&&(r=r+f|0,o=o+f|0),(i|0)==(d|0))break;u=u+(l<<2)|0}return n|0}function ii(e,r,t,o){e|=0,r|=0,t|=0,o|=0;var n=0,i=0,a=0,s=0,u=0;if(n=ia(r,e)|0,i=(e|0)/2|0,!((r|0)<=0))for(u=0-i|0,s=t+n|0,n=t+(((ia(i,r)|0)/2|0)+n)|0,a=0;;){i=s,s=0;do Bi[o>>2]=xi[t>>0]|0|((xi[n>>0]|0)<<8|(xi[i>>0]|0))<<8|-16777216,s=s+1|0,o=o+4|0,t=t+1|0,s&1||(i=i+1|0,n=n+1|0);while((s|0)<(e|0));if(a=a+1|0,a&1&&(i=i+u|0,n=n+u|0),!((a|0)<(r|0)))break;s=i}}function ai(e){e|=0,yi(e+1220|0)}function si(e){return e|=0,(se(e)|0)==0|0}function ui(e){e|=0;var r=0;return e=Bi[e+16>>2]|0,(((((e|0)!=0?(Bi[e+80>>2]|0)!=0:0)?(r=Bi[e+84>>2]|0,(r|0)!=0):0)?(Bi[r+24>>2]|0)!=0:0)?(Bi[r+32>>2]|0)!=0:0)?(r=1,r|0):(r=0,r|0)}function fi(e){e|=0;var r=0;return e=Bi[e+16>>2]|0,e=(((((e|0)!=0?(Bi[e+80>>2]|0)!=0:0)?(r=Bi[e+84>>2]|0,(r|0)!=0):0)?(Bi[r+24>>2]|0)!=0:0)?(Bi[r+36>>2]|0)!=0:0)?Bi[r+48>>2]|0:2,e|0}function li(e,r,t,o,n,i){return e|=0,r|=0,t|=0,o|=0,n|=0,i|=0,e=Bi[e+16>>2]|0,((e|0)!=0?(Bi[e+60>>2]|0)!=0:0)?(Bi[r>>2]=1,r=e+64|0,Bi[t>>2]=Bi[r>>2]<<1,Bi[o>>2]=(Bi[e+52>>2]<<4)-((Bi[e+68>>2]|0)+(Bi[r>>2]|0)<<1),o=e+72|0,Bi[n>>2]=Bi[o>>2]<<1,o=(Bi[e+56>>2]<<4)-((Bi[e+76>>2]|0)+(Bi[o>>2]|0)<<1)|0,void(Bi[i>>2]=o)):(Bi[r>>2]=0,Bi[t>>2]=0,Bi[o>>2]=0,Bi[n>>2]=0,o=0,void(Bi[i>>2]=o))}function di(e,r,t){e|=0,r|=0,t|=0;var o=0,n=0;e=Bi[e+16>>2]|0;e:do if((((e|0)!=0?(Bi[e+80>>2]|0)!=0:0)?(o=Bi[e+84>>2]|0,(o|0)!=0):0)?(Bi[o>>2]|0)!=0:0){e=Bi[o+4>>2]|0;do switch(e|0){case 4:o=11,e=16;break e;case 2:o=11,e=12;break e;case 12:o=33,e=64;break e;case 13:o=99,e=160;break e;case 3:o=11,e=10;break e;case 10:o=11,e=18;break e;case 7:o=11,e=20;break e;case 8:o=11,e=32;break e;case 5:o=33,e=40;break e;case 1:case 0:o=e;break e;case 6:o=11,e=24;break e;case 9:o=33,e=80;break e;case 11:o=11,e=15;break e;case 255:e=Bi[o+8>>2]|0,o=Bi[o+12>>2]|0,n=(e|0)==0|(o|0)==0,o=n?0:o,e=n?0:e;break e;default:o=0,e=0;break e}while(0)}else o=1,e=1;while(0);Bi[r>>2]=e,Bi[t>>2]=o}function ci(e){return e|=0,(e=Bi[e+16>>2]|0)?(e=Bi[e>>2]|0,e|0):(e=0,e|0)}function _i(){return Fe(3396)|0}function hi(e){e|=0,Re(e)}function mi(e,r,t,o){e|=0,r|=0,t|=0,o|=0;var n=0,i=0,a=0,s=0,u=0,f=0,l=0,d=0,c=0,_=0;if(n=Bi[e+40>>2]|0){a=Bi[e>>2]|0,s=e+32|0,u=0;do((Bi[a+(u*40|0)+20>>2]|0)+-1|0)>>>0<2&&(i=Bi[a+(u*40|0)+12>>2]|0,i>>>0>t>>>0&&(i=i-(Bi[s>>2]|0)|0),Bi[a+(u*40|0)+8>>2]=i),u=u+1|0;while((u|0)!=(n|0))}if(!(Bi[r>>2]|0))return r=0,r|0;if(i=Bi[r+4>>2]|0,i>>>0>=3)return r=0,r|0;d=e+32|0,c=e+24|0,_=e+4|0,n=t,l=0;e:for(;;){r:do if(i>>>0<2){if(u=Bi[r+(l*12|0)+8>>2]|0,i?(f=u+n|0,i=Bi[d>>2]|0,i=f-((f|0)<(i|0)?0:i)|0):(i=n-u|0,(i|0)<0&&(i=(Bi[d>>2]|0)+i|0)),n=i>>>0>t>>>0?i-(Bi[d>>2]|0)|0:i,s=Bi[c>>2]|0,!s){n=1,i=37;break e}for(u=Bi[e>>2]|0,f=0;;){if(a=Bi[u+(f*40|0)+20>>2]|0,(a+-1|0)>>>0<2?(Bi[u+(f*40|0)+8>>2]|0)==(n|0):0){n=i;break r}if(f=f+1|0,f>>>0>=s>>>0){n=1,i=37;break e}}}else{if(s=Bi[r+(l*12|0)+12>>2]|0,a=Bi[c>>2]|0,!a){n=1,i=37;break e}for(u=Bi[e>>2]|0,i=0;;){if((Bi[u+(i*40|0)+20>>2]|0)==3?(Bi[u+(i*40|0)+8>>2]|0)==(s|0):0){a=3,f=i;break r}if(i=i+1|0,i>>>0>=a>>>0){n=1,i=37;break e}}}while(0);if(!((f|0)>-1&a>>>0>1)){n=1,i=37;break}if(l>>>0<o>>>0){u=o;do s=u,u=u+-1|0,a=Bi[_>>2]|0,Bi[a+(s<<2)>>2]=Bi[a+(u<<2)>>2];while(u>>>0>l>>>0);u=Bi[e>>2]|0}if(Bi[(Bi[_>>2]|0)+(l<<2)>>2]=u+(f*40|0),l=l+1|0,l>>>0<=o>>>0){i=l,u=l;do s=Bi[_>>2]|0,a=Bi[s+(i<<2)>>2]|0,(a|0)!=((Bi[e>>2]|0)+(f*40|0)|0)&&(Bi[s+(u<<2)>>2]=a,u=u+1|0),i=i+1|0;while(i>>>0<=o>>>0)}if(i=Bi[r+(l*12|0)+4>>2]|0,i>>>0>=3){n=0,i=37;break}}return(i|0)==37?n|0:0}function bi(e,r,t,o,n,i,a,s){e|=0,r|=0,t|=0,o|=0,n|=0,i|=0,a|=0,s|=0;var u=0,f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,v=0,M=0,y=0,F=0,R=0,A=0,O=0,D=0,P=0,T=0,N=0,C=0,L=0;if(L=qi,qi=qi+16|0,c=L,N=Bi[t>>2]|0,C=Bi[e+8>>2]|0,(N|0)!=(Bi[C>>2]|0))return e=Bi[Wi>>2]|0,Bi[c>>2]=2504,la(e|0,7592,c|0)|0,e=1,qi=L,e|0;M=e+52|0,Bi[M>>2]=0,P=Bi[e+56>>2]|0,b=(P|0)==0,T=b&1;do if(r){if(i){l=e+20|0,Bi[l>>2]=0,f=e+16|0,Bi[f>>2]=0,d=Bi[e>>2]|0,u=e+44|0,m=0;do t=d+(m*40|0)+20|0,((Bi[t>>2]|0)!=0?(Bi[t>>2]=0,(Bi[d+(m*40|0)+24>>2]|0)==0):0)&&(Bi[u>>2]=(Bi[u>>2]|0)+-1),m=m+1|0;while((m|0)!=16);e:do if(b)for(o=Bi
\ No newline at end of file
-h=(k|0)<(h|0)?k:h),(b|0)>=(p|0)&&(b=(h|0)>(p|0)?h:p),k=E&65535,b&=65535}while(0);if(V=(k&65535)+(y&65535)|0,_=V&65535,b=(b&65535)+(M&65535)|0,h=b&65535,((V<<16>>16)+8192|0)>>>0>16383){a=1,V=212;break e}if(((b<<16>>16)+2048|0)>>>0>4095){a=1,V=212;break e}x?(x|0)==1?(V=(U<<1)+A|0,Ii[e+(V<<2)+132>>1]=_,Ii[e+(V<<2)+134>>1]=h,V|=1,Ii[e+(V<<2)+132>>1]=_,Ii[e+(V<<2)+134>>1]=h):(x|0)==2?(V=U+A|0,Ii[e+(V<<2)+132>>1]=_,Ii[e+(V<<2)+134>>1]=h,V=V+2|0,Ii[e+(V<<2)+132>>1]=_,Ii[e+(V<<2)+134>>1]=h):(x|0)==3&&(V=U+A|0,Ii[e+(V<<2)+132>>1]=_,Ii[e+(V<<2)+134>>1]=h):(Ii[O>>1]=_,Ii[D>>1]=h,Ii[P>>1]=_,Ii[T>>1]=h,Ii[N>>1]=_,Ii[C>>1]=h,Ii[I>>1]=_,Ii[B>>1]=h),U=U+1|0}while(U>>>0<F>>>0)}if(H=H+1|0,H>>>0>=4){V=201;break}}if((V|0)==201){l=0;do Bi[G>>2]=Bi[e+(l<<2)+116>>2],a=d(Bi[r+(l<<2)+176>>2]|0)|0,s=l<<3&8,f=l>>>0<2?0:8,a?(a|0)==1?(t=l<<2,L(i,e+(t<<2)+132|0,G,z,q,s,f,8,4),L(i,e+((t|2)<<2)+132|0,G,z,q,s,f|4,8,4)):(a|0)==2?(t=l<<2,L(i,e+(t<<2)+132|0,G,z,q,s,f,4,8),L(i,e+((t|1)<<2)+132|0,G,z,q,s|4,f,4,8)):(U=l<<2,L(i,e+(U<<2)+132|0,G,z,q,s,f,4,4),V=s|4,L(i,e+((U|1)<<2)+132|0,G,z,q,V,f,4,4),t=f|4,L(i,e+((U|2)<<2)+132|0,G,z,q,s,t,4,4),L(i,e+((U|3)<<2)+132|0,G,z,q,V,t,4,4)):L(i,e+(l<<2<<2)+132|0,G,z,q,s,f,8,8),l=l+1|0;while((l|0)!=4)}else if((V|0)==212)return qi=W,a|0}while(0);return(Bi[e+196>>2]|0)>>>0>1?(G=0,qi=W,G|0):Bi[e>>2]|0?(Ai(n,o,i,r+328|0),G=0,qi=W,G|0):(Ri(n,i),G=0,qi=W,G|0)}function Di(){return 4720}function Pi(e,r,t,n,i,s){e|=0,r|=0,t|=0,n|=0,i|=0,s|=0;var u=0,f=0,l=0;if(l=qi,qi=qi+80|0,u=l+32|0,f=l,Ti(t,u,f,n),(a(Bi[e>>2]|0)|0)==1){if(n=Ni(e,s,r+328|0,u,f,i)|0)return e=n,qi=l,e|0}else if(n=Ci(e,s,r,u,f,i)|0)return e=n,qi=l,e|0;return(n=o(e,s+256|0,r+1352|0,u+21|0,f+16|0,Bi[r+140>>2]|0,i)|0)?(e=n,qi=l,e|0):(Bi[e+196>>2]|0)>>>0>1?(e=0,qi=l,e|0):(Ri(t,s),e=0,qi=l,e|0)}function Ti(e,r,t,o){e|=0,r|=0,t|=0,o|=0;var n=0,i=0,a=0,s=0,u=0,f=0,l=0,d=0,c=0,_=0,h=0;o&&(_=Bi[e+4>>2]|0,h=ia(Bi[e+8>>2]|0,_)|0,l=(o>>>0)/(_>>>0)|0,n=ia(l,_)|0,d=o-n|0,s=_<<4,a=Bi[e>>2]|0,i=(d<<4)+(ia(_<<8,l)|0)|0,c=(l|0)!=0,c?(f=i-(s|1)|0,Li[r>>0]=Li[a+f>>0]|0,Li[r+1>>0]=Li[a+(f+1)>>0]|0,Li[r+2>>0]=Li[a+(f+2)>>0]|0,Li[r+3>>0]=Li[a+(f+3)>>0]|0,Li[r+4>>0]=Li[a+(f+4)>>0]|0,Li[r+5>>0]=Li[a+(f+5)>>0]|0,Li[r+6>>0]=Li[a+(f+6)>>0]|0,Li[r+7>>0]=Li[a+(f+7)>>0]|0,Li[r+8>>0]=Li[a+(f+8)>>0]|0,Li[r+9>>0]=Li[a+(f+9)>>0]|0,Li[r+10>>0]=Li[a+(f+10)>>0]|0,Li[r+11>>0]=Li[a+(f+11)>>0]|0,Li[r+12>>0]=Li[a+(f+12)>>0]|0,Li[r+13>>0]=Li[a+(f+13)>>0]|0,Li[r+14>>0]=Li[a+(f+14)>>0]|0,Li[r+15>>0]=Li[a+(f+15)>>0]|0,Li[r+16>>0]=Li[a+(f+16)>>0]|0,Li[r+17>>0]=Li[a+(f+17)>>0]|0,Li[r+18>>0]=Li[a+(f+18)>>0]|0,Li[r+19>>0]=Li[a+(f+19)>>0]|0,Li[r+20>>0]=Li[a+(f+20)>>0]|0,f=r+21|0):f=r,u=(n|0)!=(o|0),u&&(i=i+-1|0,Li[t>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+1>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+2>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+3>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+4>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+5>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+6>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+7>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+8>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+9>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+10>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+11>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+12>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+13>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+14>>0]=Li[a+i>>0]|0,Li[t+15>>0]=Li[a+(i+s)>>0]|0,t=t+16|0),r=_<<3&2147483640,n=Bi[e>>2]|0,o=(ia(l<<3,r)|0)+(h<<8)+(d<<3)|0,c&&(c=o-(r|1)|0,Li[f>>0]=Li[n+c>>0]|0,Li[f+1>>0]=Li[n+(c+1)>>0]|0,Li[f+2>>0]=Li[n+(c+2)>>0]|0,Li[f+3>>0]=Li[n+(c+3)>>0]|0,Li[f+4>>0]=Li[n+(c+4)>>0]|0,Li[f+5>>0]=Li[n+(c+5)>>0]|0,Li[f+6>>0]=Li[n+(c+6)>>0]|0,Li[f+7>>0]=Li[n+(c+7)>>0]|0,Li[f+8>>0]=Li[n+(c+8)>>0]|0,c=c+(h<<6)|0,Li[f+9>>0]=Li[n+c>>0]|0,Li[f+10>>0]=Li[n+(c+1)>>0]|0,Li[f+11>>0]=Li[n+(c+2)>>0]|0,Li[f+12>>0]=Li[n+(c+3)>>0]|0,Li[f+13>>0]=Li[n+(c+4)>>0]|0,Li[f+14>>0]=Li[n+(c+5)>>0]|0,Li[f+15>>0]=Li[n+(c+6)>>0]|0,Li[f+16>>0]=Li[n+(c+7)>>0]|0,Li[f+17>>0]=Li[n+(c+8)>>0]|0),u&&(c=o+-1|0,Li[t>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+1>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+2>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+3>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+4>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+5>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+6>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+7>>0]=Li[n+c>>0]|0,h=c+(r+(h-_<<6))|0,Li[t+8>>0]=Li[n+h>>0]|0,h=h+r|0,Li[t+9>>
\ No newline at end of file
-Runtime.stackAlloc=asm.stackAlloc,Runtime.stackSave=asm.stackSave,Runtime.stackRestore=asm.stackRestore,Runtime.setTempRet0=asm.setTempRet0,Runtime.getTempRet0=asm.getTempRet0;var i64Math=function(){function e(e,r,t){null!=e&&("number"==typeof e?this.fromNumber(e,r,t):null==r&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,r))}function r(){return new e(null)}function t(e,r,t,o,n,i){for(;--i>=0;){var a=r*this[e++]+t[o]+n;n=Math.floor(a/67108864),t[o++]=67108863&a}return n}function o(e,r,t,o,n,i){for(var a=32767&r,s=r>>15;--i>=0;){var u=32767&this[e],f=this[e++]>>15,l=s*u+f*a;u=a*u+((32767&l)<<15)+t[o]+(1073741823&n),n=(u>>>30)+(l>>>15)+s*f+(n>>>30),t[o++]=1073741823&u}return n}function n(e,r,t,o,n,i){for(var a=16383&r,s=r>>14;--i>=0;){var u=16383&this[e],f=this[e++]>>14,l=s*u+f*a;u=a*u+((16383&l)<<14)+t[o]+n,n=(u>>28)+(l>>14)+s*f,t[o++]=268435455&u}return n}function i(e){return ie.charAt(e)}function a(e,r){var t=ae[e.charCodeAt(r)];return null==t?-1:t}function s(e){for(var r=this.t-1;r>=0;--r)e[r]=this[r];e.t=this.t,e.s=this.s}function u(e){this.t=1,this.s=0>e?-1:0,e>0?this[0]=e:-1>e?this[0]=e+DV:this.t=0}function f(e){var t=r();return t.fromInt(e),t}function l(r,t){var o;if(16==t)o=4;else if(8==t)o=3;else if(256==t)o=8;else if(2==t)o=1;else if(32==t)o=5;else{if(4!=t)return void this.fromRadix(r,t);o=2}this.t=0,this.s=0;for(var n=r.length,i=!1,s=0;--n>=0;){var u=8==o?255&r[n]:a(r,n);0>u?"-"==r.charAt(n)&&(i=!0):(i=!1,0==s?this[this.t++]=u:s+o>this.DB?(this[this.t-1]|=(u&(1<<this.DB-s)-1)<<s,this[this.t++]=u>>this.DB-s):this[this.t-1]|=u<<s,s+=o,s>=this.DB&&(s-=this.DB))}8==o&&0!=(128&r[0])&&(this.s=-1,s>0&&(this[this.t-1]|=(1<<this.DB-s)-1<<s)),this.clamp(),i&&e.ZERO.subTo(this,this)}function d(){for(var e=this.s&this.DM;this.t>0&&this[this.t-1]==e;)--this.t}function c(e){if(this.s<0)return"-"+this.negate().toString(e);var r;if(16==e)r=4;else if(8==e)r=3;else if(2==e)r=1;else if(32==e)r=5;else{if(4!=e)return this.toRadix(e);r=2}var t,o=(1<<r)-1,n=!1,a="",s=this.t,u=this.DB-s*this.DB%r;if(s-->0)for(u<this.DB&&(t=this[s]>>u)>0&&(n=!0,a=i(t));s>=0;)r>u?(t=(this[s]&(1<<u)-1)<<r-u,t|=this[--s]>>(u+=this.DB-r)):(t=this[s]>>(u-=r)&o,0>=u&&(u+=this.DB,--s)),t>0&&(n=!0),n&&(a+=i(t));return n?a:"0"}function _(){var t=r();return e.ZERO.subTo(this,t),t}function h(){return this.s<0?this.negate():this}function m(e){var r=this.s-e.s;if(0!=r)return r;var t=this.t;if(r=t-e.t,0!=r)return this.s<0?-r:r;for(;--t>=0;)if(0!=(r=this[t]-e[t]))return r;return 0}function b(e){var r,t=1;return 0!=(r=e>>>16)&&(e=r,t+=16),0!=(r=e>>8)&&(e=r,t+=8),0!=(r=e>>4)&&(e=r,t+=4),0!=(r=e>>2)&&(e=r,t+=2),0!=(r=e>>1)&&(e=r,t+=1),t}function p(){return this.t<=0?0:this.DB*(this.t-1)+b(this[this.t-1]^this.s&this.DM)}function k(e,r){var t;for(t=this.t-1;t>=0;--t)r[t+e]=this[t];for(t=e-1;t>=0;--t)r[t]=0;r.t=this.t+e,r.s=this.s}function E(e,r){for(var t=e;t<this.t;++t)r[t-e]=this[t];r.t=Math.max(this.t-e,0),r.s=this.s}function S(e,r){var t,o=e%this.DB,n=this.DB-o,i=(1<<n)-1,a=Math.floor(e/this.DB),s=this.s<<o&this.DM;for(t=this.t-1;t>=0;--t)r[t+a+1]=this[t]>>n|s,s=(this[t]&i)<<o;for(t=a-1;t>=0;--t)r[t]=0;r[a]=s,r.t=this.t+a+1,r.s=this.s,r.clamp()}function w(e,r){r.s=this.s;var t=Math.floor(e/this.DB);if(t>=this.t)return void(r.t=0);var o=e%this.DB,n=this.DB-o,i=(1<<o)-1;r[0]=this[t]>>o;for(var a=t+1;a<this.t;++a)r[a-t-1]|=(this[a]&i)<<n,r[a-t]=this[a]>>o;o>0&&(r[this.t-t-1]|=(this.s&i)<<n),r.t=this.t-t,r.clamp()}function g(e,r){for(var t=0,o=0,n=Math.min(e.t,this.t);n>t;)o+=this[t]-e[t],r[t++]=o&this.DM,o>>=this.DB;if(e.t<this.t){for(o-=e.s;t<this.t;)o+=this[t],r[t++]=o&this.DM,o>>=this.DB;o+=this.s}else{for(o+=this.s;t<e.t;)o-=e[t],r[t++]=o&this.DM,o>>=this.DB;o-=e.s}r.s=0>o?-1:0,-1>o?r[t++]=this.DV+o:o>0&&(r[t++]=o),r.t=t,r.clamp()}function v(r,t){var o=this.abs(),n=r.abs(),i=o.t;for(t.t=i+n.t;--i>=0;)t[i]=0;for(i=0;i<n.t;++i)t[i+o.t]=o.am(0,n[i],t,i,0,o.t);t.s=0,t.clamp(),this.s!=r.s&&e.ZERO.subTo(t,t)}function M(e){for(var r=this.abs(),t=e.t=2*r.t;--t>=0;)e[t]=0;for(t=0;t<r.t-1;++t){var o=r.am(t,r[t],e,2*t,0,1);(e[t+r.t]+=r.am(t+1,2*r[t],e,2*t+1,o,r.t
\ No newline at end of file
+var key,Module=void 0!==Module?Module:{},moduleOverrides={};for(key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);Module.arguments=[],Module.thisProgram="./this.program",Module.quit=function(A,e){throw e},Module.preRun=[];var ENVIRONMENT_IS_WEB=!(Module.postRun=[]),ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&"function"==typeof require&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var nodeFS,nodePath,scriptDirectory="";function locateFile(A){return Module.locateFile?Module.locateFile(A,scriptDirectory):scriptDirectory+A}ENVIRONMENT_IS_NODE?(scriptDirectory=__dirname+"/",Module.read=function(A,e){var r;return(r=tryParseAsDataURI(A))||(nodeFS||(nodeFS=require("fs")),nodePath||(nodePath=require("path")),A=nodePath.normalize(A),r=nodeFS.readFileSync(A)),e?r:r.toString()},Module.readBinary=function(A){var e=Module.read(A,!0);return e.buffer||(e=new Uint8Array(e)),assert(e.buffer),e},1<process.argv.length&&(Module.thisProgram=process.argv[1].replace(/\\/g,"/")),Module.arguments=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",function(A){if(!(A instanceof ExitStatus))throw A}),process.on("unhandledRejection",abort),Module.quit=function(A){process.exit(A)},Module.inspect=function(){return"[Emscripten Module object]"}):ENVIRONMENT_IS_SHELL?("undefined"!=typeof read&&(Module.read=function(A){var e=tryParseAsDataURI(A);return e?intArrayToString(e):read(A)}),Module.readBinary=function(A){var e;return(e=tryParseAsDataURI(A))?e:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(assert("object"==typeof(e=read(A,"binary"))),e)},"undefined"!=typeof scriptArgs?Module.arguments=scriptArgs:"undefined"!=typeof arguments&&(Module.arguments=arguments),"function"==typeof quit&&(Module.quit=function(A){quit(A)})):(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&(ENVIRONMENT_IS_WORKER?scriptDirectory=self.location.href:document.currentScript&&(scriptDirectory=document.currentScript.src),scriptDirectory=0!==scriptDirectory.indexOf("blob:")?scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1):"",Module.read=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.send(null),A.responseText}catch(A){var r=tryParseAsDataURI(e);if(r)return intArrayToString(r);throw A}},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.responseType="arraybuffer",A.send(null),new Uint8Array(A.response)}catch(A){var r=tryParseAsDataURI(e);if(r)return r;throw A}}),Module.readAsync=function(e,r,i){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=function(){if(200==n.status||0==n.status&&n.response)r(n.response);else{var A=tryParseAsDataURI(e);A?r(A.buffer):i()}},n.onerror=i,n.send(null)},Module.setWindowTitle=function(A){document.title=A});var out=Module.print||("undefined"!=typeof console?console.log.bind(console):"undefined"!=typeof print?print:null),err=Module.printErr||("undefined"!=typeof printErr?printErr:"undefined"!=typeof console&&console.warn.bind(console)||out);for(key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var STACK_ALIGN=16;function dynamicAlloc(A){var e=HEAP32[DYNAMICTOP_PTR>>2],r=e+A+15&-16;return r<=_emscripten_get_heap_size()?(HEAP32[DYNAMICTOP_PTR>>2]=r,e):0}function getNativeTypeSize(A){switch(A){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===A[A.length-1])return 4;if("i"!==A[0])return 0;var e=parseInt(A.substr(1));return assert(e%8==0,"getNativeTypeSize invalid bits "+e+", type "+A),e/8}}function warnOnce(A){warnOnce.shown||(warnOnce.shown={}),warnOnce.shown[A]||(warnOnce.shown[A]=1,err(A))}var jsCallStartIndex=1,functionPointers=ne
\ No newline at end of file
--- a/js/min/h264bsd_worker.min.js
+++ b/js/min/h264bsd_worker.min.js
@@ -1,15 +1,1 @@
-function globalEval(e){eval.call(null,e)}function assert(e,r){e||abort("Assertion failed: "+r)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(e){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(e,r,t,o){switch(t=t||"i8","*"===t.charAt(t.length-1)&&(t="i32"),t){case"i1":HEAP8[e>>0]=r;break;case"i8":HEAP8[e>>0]=r;break;case"i16":HEAP16[e>>1]=r;break;case"i32":HEAP32[e>>2]=r;break;case"i64":tempI64=[r>>>0,(tempDouble=r,+Math_abs(tempDouble)>=1?tempDouble>0?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=r;break;case"double":HEAPF64[e>>3]=r;break;default:abort("invalid type for setValue: "+t)}}function getValue(e,r,t){switch(r=r||"i8","*"===r.charAt(r.length-1)&&(r="i32"),r){case"i1":return HEAP8[e>>0];case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":return HEAP32[e>>2];case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];default:abort("invalid type for setValue: "+r)}return null}function allocate(e,r,t,o){var n,i;"number"==typeof e?(n=!0,i=e):(n=!1,i=e.length);var a,s="string"==typeof r?r:null;if(a=t==ALLOC_NONE?o:[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][void 0===t?ALLOC_STATIC:t](Math.max(i,s?1:r.length)),n){var u,o=a;for(assert(0==(3&a)),u=a+(-4&i);u>o;o+=4)HEAP32[o>>2]=0;for(u=a+i;u>o;)HEAP8[o++>>0]=0;return a}if("i8"===s)return e.subarray||e.slice?HEAPU8.set(e,a):HEAPU8.set(new Uint8Array(e),a),a;for(var f,l,d,c=0;i>c;){var _=e[c];"function"==typeof _&&(_=Runtime.getFunctionIndex(_)),f=s||r[c],0!==f?("i64"==f&&(f="i32"),setValue(a+c,_,f),d!==f&&(l=Runtime.getNativeTypeSize(f),d=f),c+=l):c++}return a}function Pointer_stringify(e,r){if(0===r||!e)return"";for(var t,o=0,n=0;;){if(t=HEAPU8[e+n>>0],o|=t,0==t&&!r)break;if(n++,r&&n==r)break}r||(r=n);var i="";if(128>o){for(var a,s=1024;r>0;)a=String.fromCharCode.apply(String,HEAPU8.subarray(e,e+Math.min(r,s))),i=i?i+a:a,e+=s,r-=s;return i}return Module.UTF8ToString(e)}function AsciiToString(e){for(var r="";;){var t=HEAP8[e++>>0];if(!t)return r;r+=String.fromCharCode(t)}}function stringToAscii(e,r){return writeAsciiToMemory(e,r,!1)}function UTF8ArrayToString(e,r){for(var t,o,n,i,a,s,u="";;){if(t=e[r++],!t)return u;if(128&t)if(o=63&e[r++],192!=(224&t))if(n=63&e[r++],224==(240&t)?t=(15&t)<<12|o<<6|n:(i=63&e[r++],240==(248&t)?t=(7&t)<<18|o<<12|n<<6|i:(a=63&e[r++],248==(252&t)?t=(3&t)<<24|o<<18|n<<12|i<<6|a:(s=63&e[r++],t=(1&t)<<30|o<<24|n<<18|i<<12|a<<6|s))),65536>t)u+=String.fromCharCode(t);else{var f=t-65536;u+=String.fromCharCode(55296|f>>10,56320|1023&f)}else u+=String.fromCharCode((31&t)<<6|o);else u+=String.fromCharCode(t)}}function UTF8ToString(e){return UTF8ArrayToString(HEAPU8,e)}function stringToUTF8Array(e,r,t,o){if(!(o>0))return 0;for(var n=t,i=t+o-1,a=0;a<e.length;++a){var s=e.charCodeAt(a);if(s>=55296&&57343>=s&&(s=65536+((1023&s)<<10)|1023&e.charCodeAt(++a)),127>=s){if(t>=i)break;r[t++]=s}else if(2047>=s){if(t+1>=i)break;r[t++]=192|s>>6,r[t++]=128|63&s}else if(65535>=s){if(t+2>=i)break;r[t++]=224|s>>12,r[t++]=128|s>>6&63,r[t++]=128|63&s}else if(2097151>=s){if(t+3>=i)break;r[t++]=240|s>>18,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}else if(67108863>=s){if(t+4>=i)break;r[t++]=248|s>>24,r[t++]=128|s>>18&63,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}else{if(t+5>=i)break;r[t++]=252|s>>30,r[t++]=128|s>>24&63,r[t++]=128|s>>18&63,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}}return r[t]=0,t-n}function stringToUTF8(e,r,t){return stringToUTF8Array(e,HEAPU8,r,t)}function lengthBytesUTF8(e){for(var r=0,t=0;t<e.length;++t){var o=e.charCodeAt(t);o>=55296&&57343>=o&&(o=65536+((1023&o)<<10)|1023&e.charCodeAt(++t)),127>=o?++r:r+=2047>=o?2:65535>=o?3:2097151>=o?4:67108863>=o?5:6}return r}function UTF16ToString(e){for(var r=0,t="";;){var o=HEAP16[e+2*r>>1];if(0==o)return
\ No newline at end of file
-eval(funcstr)}}(),Module.cwrap=cwrap,Module.ccall=ccall,Module.setValue=setValue,Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE,Module.allocate=allocate,Module.Pointer_stringify=Pointer_stringify,Module.AsciiToString=AsciiToString,Module.stringToAscii=stringToAscii,Module.UTF8ArrayToString=UTF8ArrayToString,Module.UTF8ToString=UTF8ToString,Module.stringToUTF8Array=stringToUTF8Array,Module.stringToUTF8=stringToUTF8,Module.lengthBytesUTF8=lengthBytesUTF8,Module.UTF16ToString=UTF16ToString,Module.stringToUTF16=stringToUTF16,Module.lengthBytesUTF16=lengthBytesUTF16,Module.UTF32ToString=UTF32ToString,Module.stringToUTF32=stringToUTF32,Module.lengthBytesUTF32=lengthBytesUTF32,Module.stackTrace=stackTrace;for(var PAGE_SIZE=4096,HEAP,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,STATIC_BASE=0,STATICTOP=0,staticSealed=!1,STACK_BASE=0,STACKTOP=0,STACK_MAX=0,DYNAMIC_BASE=0,DYNAMICTOP=0,TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||67108864,totalMemory=65536;TOTAL_MEMORY>totalMemory||2*TOTAL_STACK>totalMemory;)16777216>totalMemory?totalMemory*=2:totalMemory+=16777216;totalMemory!==TOTAL_MEMORY&&(Module.printErr("increasing TOTAL_MEMORY to "+totalMemory+" to be compliant with the asm.js spec (and given that TOTAL_STACK="+TOTAL_STACK+")"),TOTAL_MEMORY=totalMemory),assert("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&!!new Int32Array(1).subarray&&!!new Int32Array(1).set,"JS engine does not provide full typed array support");var buffer=new ArrayBuffer(TOTAL_MEMORY);HEAP8=new Int8Array(buffer),HEAP16=new Int16Array(buffer),HEAP32=new Int32Array(buffer),HEAPU8=new Uint8Array(buffer),HEAPU16=new Uint16Array(buffer),HEAPU32=new Uint32Array(buffer),HEAPF32=new Float32Array(buffer),HEAPF64=new Float64Array(buffer),HEAP32[0]=255,assert(255===HEAPU8[0]&&0===HEAPU8[3],"Typed arrays 2 must be run on a little-endian system"),Module.HEAP=HEAP,Module.buffer=buffer,Module.HEAP8=HEAP8,Module.HEAP16=HEAP16,Module.HEAP32=HEAP32,Module.HEAPU8=HEAPU8,Module.HEAPU16=HEAPU16,Module.HEAPU32=HEAPU32,Module.HEAPF32=HEAPF32,Module.HEAPF64=HEAPF64;var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;Module.addOnPreRun=Module.addOnPreRun=addOnPreRun,Module.addOnInit=Module.addOnInit=addOnInit,Module.addOnPreMain=Module.addOnPreMain=addOnPreMain,Module.addOnExit=Module.addOnExit=addOnExit,Module.addOnPostRun=Module.addOnPostRun=addOnPostRun,Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(e,r){var t=e>>>16,o=65535&e,n=r>>>16,i=65535&r;return o*i+(t*i+o*n<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(e){e>>>=0;for(var r=0;32>r;r++)if(e&1<<31-r)return r;return 32}),Math.clz32=Math.clz32;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_min=Math.min,Math_clz32=Math.clz32,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var memoryInitializer=null;STATIC_BASE=8,STATICTOP=STATIC_BASE+14736,__ATINIT__.push(),allocate([17,1,0,0,0,0,0,0,34,18,1,1,0,0,0,0,50,34,18,2,0,0,0,0,67,51,34,34,18,18,2,2,83,67,51,35,18,18,2,2,19,35,67,51,99,83,2,2,0,0,101,85,68,68,52,52,35,35,35,35,19,19,19,19,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,249,233,217,200,200,184,184,167,167,167,167,151
\ No newline at end of file
-var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);var _cosf=Math_cos;Module._cosf=_cosf,Module._i64Subtract=_i64Subtract;var _DtoILow=!0;Module._DtoILow=_DtoILow;var ___errno_state=0;Module.___errno_state=___errno_state,Module.___setErrNo=___setErrNo;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};Module.ERRNO_CODES=ERRNO_CODES,Module._sysconf=_sysconf,Module._remquof=_remquof,Module._memset=_memset;var _BDtoILow=!0;Module._BDtoILow=_BDtoILow;var _FtoIHigh=!0;Module._FtoIHigh=_FtoIHigh;var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte
\ No newline at end of file
-}catch(f){console.log("FS.trackingDelegate['willMovePath']('"+e+"', '"+r+"') threw an exception: "+f.message)}FS.hashRemoveNode(l);try{o.node_ops.rename(l,n,u)}catch(f){throw f}finally{FS.hashAddNode(l)}try{FS.trackingDelegate.onMovePath&&FS.trackingDelegate.onMovePath(e,r)}catch(f){console.log("FS.trackingDelegate['onMovePath']('"+e+"', '"+r+"') threw an exception: "+f.message)}}},rmdir:function(e){var r=FS.lookupPath(e,{parent:!0}),t=r.node,o=PATH.basename(e),n=FS.lookupNode(t,o),i=FS.mayDelete(t,o,!0);if(i)throw new FS.ErrnoError(i);if(!t.node_ops.rmdir)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(n))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);try{FS.trackingDelegate.willDeletePath&&FS.trackingDelegate.willDeletePath(e)}catch(a){console.log("FS.trackingDelegate['willDeletePath']('"+e+"') threw an exception: "+a.message)}t.node_ops.rmdir(t,o),FS.destroyNode(n);try{FS.trackingDelegate.onDeletePath&&FS.trackingDelegate.onDeletePath(e)}catch(a){console.log("FS.trackingDelegate['onDeletePath']('"+e+"') threw an exception: "+a.message)}},readdir:function(e){var r=FS.lookupPath(e,{follow:!0}),t=r.node;if(!t.node_ops.readdir)throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);return t.node_ops.readdir(t)},unlink:function(e){var r=FS.lookupPath(e,{parent:!0}),t=r.node,o=PATH.basename(e),n=FS.lookupNode(t,o),i=FS.mayDelete(t,o,!1);if(i)throw i===ERRNO_CODES.EISDIR&&(i=ERRNO_CODES.EPERM),new FS.ErrnoError(i);if(!t.node_ops.unlink)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isMountpoint(n))throw new FS.ErrnoError(ERRNO_CODES.EBUSY);try{FS.trackingDelegate.willDeletePath&&FS.trackingDelegate.willDeletePath(e)}catch(a){console.log("FS.trackingDelegate['willDeletePath']('"+e+"') threw an exception: "+a.message)}t.node_ops.unlink(t,o),FS.destroyNode(n);try{FS.trackingDelegate.onDeletePath&&FS.trackingDelegate.onDeletePath(e)}catch(a){console.log("FS.trackingDelegate['onDeletePath']('"+e+"') threw an exception: "+a.message)}},readlink:function(e){var r=FS.lookupPath(e),t=r.node;if(!t)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!t.node_ops.readlink)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);return PATH.resolve(FS.getPath(r.node.parent),t.node_ops.readlink(t))},stat:function(e,r){var t=FS.lookupPath(e,{follow:!r}),o=t.node;if(!o)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(!o.node_ops.getattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);return o.node_ops.getattr(o)},lstat:function(e){return FS.stat(e,!0)},chmod:function(e,r,t){var o;if("string"==typeof e){var n=FS.lookupPath(e,{follow:!t});o=n.node}else o=e;if(!o.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);o.node_ops.setattr(o,{mode:4095&r|-4096&o.mode,timestamp:Date.now()})},lchmod:function(e,r){FS.chmod(e,r,!0)},fchmod:function(e,r){var t=FS.getStream(e);if(!t)throw new FS.ErrnoError(ERRNO_CODES.EBADF);FS.chmod(t.node,r)},chown:function(e,r,t,o){var n;if("string"==typeof e){var i=FS.lookupPath(e,{follow:!o});n=i.node}else n=e;if(!n.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);n.node_ops.setattr(n,{timestamp:Date.now()})},lchown:function(e,r,t){FS.chown(e,r,t,!0)},fchown:function(e,r,t){var o=FS.getStream(e);if(!o)throw new FS.ErrnoError(ERRNO_CODES.EBADF);FS.chown(o.node,r,t)},truncate:function(e,r){if(0>r)throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var t;if("string"==typeof e){var o=FS.lookupPath(e,{follow:!0});t=o.node}else t=e;if(!t.node_ops.setattr)throw new FS.ErrnoError(ERRNO_CODES.EPERM);if(FS.isDir(t.mode))throw new FS.ErrnoError(ERRNO_CODES.EISDIR);if(!FS.isFile(t.mode))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);var n=FS.nodePermissions(t,"w");if(n)throw new FS.ErrnoError(n);t.node_ops.setattr(t,{size:r,timestamp:Date.now()})},ftruncate:function(e,r){var t=FS.getStream(e);if(!t)throw new FS.ErrnoError(ERRNO_CODES.EBADF);if(0===(2097155&t.flags))throw new FS.ErrnoError(ERRNO_CODES.EINVAL);FS.truncate(t.node,r)},utime:function(e,r,t){var o=FS.lookupPath(e,{follow:!0}),n=o.node;n.node_ops.setattr(n,{timestamp:Math.max(r,t)})},open:function(e,r,t,o,n){if(""===e)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);r="string"==typeof r?FS.m
\ No newline at end of file
-n.exitPointerLock=n.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",e,!1),document.addEventListener("mozpointerlockchange",e,!1),document.addEventListener("webkitpointerlockchange",e,!1),document.addEventListener("mspointerlockchange",e,!1),Module.elementPointerLock&&n.addEventListener("click",function(e){!Browser.pointerLock&&n.requestPointerLock&&(n.requestPointerLock(),e.preventDefault())},!1))}},createContext:function(e,r,t,o){if(r&&Module.ctx&&e==Module.canvas)return Module.ctx;var n,i;if(r){var a={antialias:!1,alpha:!1};if(o)for(var s in o)a[s]=o[s];i=GL.createContext(e,a),i&&(n=GL.getContext(i).GLctx),e.style.backgroundColor="black"}else n=e.getContext("2d");return n?(t&&(r||assert("undefined"==typeof GLctx,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=n,r&&GL.makeContextCurrent(i),Module.useWebGL=r,Browser.moduleContextCreatedCallbacks.forEach(function(e){e()}),Browser.init()),n):null},destroyContext:function(e,r,t){},fullScreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullScreen:function(e,r,t){function o(){Browser.isFullScreen=!1;var e=n.parentNode;(document.webkitFullScreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.mozFullscreenElement||document.fullScreenElement||document.fullscreenElement||document.msFullScreenElement||document.msFullscreenElement||document.webkitCurrentFullScreenElement)===e?(n.cancelFullScreen=document.cancelFullScreen||document.mozCancelFullScreen||document.webkitCancelFullScreen||document.msExitFullscreen||document.exitFullscreen||function(){},n.cancelFullScreen=n.cancelFullScreen.bind(document),Browser.lockPointer&&n.requestPointerLock(),Browser.isFullScreen=!0,Browser.resizeCanvas&&Browser.setFullScreenCanvasSize()):(e.parentNode.insertBefore(n,e),e.parentNode.removeChild(e),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullScreen),Browser.updateCanvasDimensions(n)}Browser.lockPointer=e,Browser.resizeCanvas=r,Browser.vrDevice=t,"undefined"==typeof Browser.lockPointer&&(Browser.lockPointer=!0),"undefined"==typeof Browser.resizeCanvas&&(Browser.resizeCanvas=!1),"undefined"==typeof Browser.vrDevice&&(Browser.vrDevice=null);var n=Module.canvas;Browser.fullScreenHandlersInstalled||(Browser.fullScreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",o,!1),document.addEventListener("mozfullscreenchange",o,!1),document.addEventListener("webkitfullscreenchange",o,!1),document.addEventListener("MSFullscreenChange",o,!1));var i=document.createElement("div");n.parentNode.insertBefore(i,n),i.appendChild(n),i.requestFullScreen=i.requestFullScreen||i.mozRequestFullScreen||i.msRequestFullscreen||(i.webkitRequestFullScreen?function(){i.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),t?i.requestFullScreen({vrDisplay:t}):i.requestFullScreen()},nextRAF:0,fakeRequestAnimationFrame:function(e){var r=Date.now();if(0===Browser.nextRAF)Browser.nextRAF=r+1e3/60;else for(;r+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var t=Math.max(Browser.nextRAF-r,0);setTimeout(e,t)},requestAnimationFrame:function(e){"undefined"==typeof window?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(e){return function(){return ABORT?void 0:e.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var e=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],e.forEach(function(e){e()})}},safeRequestAnimationFrame:function(e){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?e():Browser
\ No newline at end of file
-F=xi[l>>0]|0,Li[e+9>>0]=(((ia(xi[R+b>>0]|0,a)|0)+(ia(O,g)|0)<<3)+32|0)>>>6,Li[e+1>>0]=(((ia(F,a)|0)+(ia(y,g)|0)<<3)+32|0)>>>6,d=d+-1|0,!d)break;e=e+2|0}s=s+k|0}if(c=c+-1|0,!c)break;e=u+w|0,s=s+p|0}if(_)return void(Vi=M);for(u=r+64|0,i=f+((ia(i+o|0,n)|0)+t)|0,f=h;;){if(S)o=u;else{for(o=u+k|0,t=u,u=i,e=E;;){if(O=xi[u>>0]|0,F=xi[u+m>>0]|0,y=u,u=u+2|0,R=xi[y+1>>0]|0,Li[t+8>>0]=(((ia(F,a)|0)+(ia(xi[y+n>>0]|0,g)|0)<<3)+32|0)>>>6,Li[t>>0]=(((ia(R,a)|0)+(ia(O,g)|0)<<3)+32|0)>>>6,O=xi[u>>0]|0,Li[t+9>>0]=(((ia(xi[y+b>>0]|0,a)|0)+(ia(F,g)|0)<<3)+32|0)>>>6,Li[t+1>>0]=(((ia(O,a)|0)+(ia(R,g)|0)<<3)+32|0)>>>6,e=e+-1|0,!e)break;t=t+2|0}i=i+k|0}if(f=f+-1|0,!f)break;u=o+w|0,i=i+p|0}Vi=M}function v(e,r,t,o,n,i,a,s,u){e|=0,r|=0,t|=0,o|=0,n|=0,i|=0,a|=0,s|=0,u|=0;var f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,M=0,v=0,y=0,F=0;if(w=s+o|0,d=(w|0)<0?0-s|0:o,l=(a+t|0)<0?0-a|0:t,d=(d|0)>(i|0)?i:d,l=(l|0)>(n|0)?n:l,f=l+a|0,t=d+s|0,o=(l|0)>0?e+l|0:e,(d|0)>0&&(o=o+(ia(d,n)|0)|0),E=(l|0)<0,v=E?0-l|0:0,M=(f|0)>(n|0),y=M?f-n|0:0,g=a-v|0,F=g-y|0,d=(d|0)<0?0-d|0:0,t=(t|0)>(i|0)?t-i|0:0,S=s-d|0,e=S-t|0,M=E|M,a=(d|0)==0,M){if(!a){for(p=(v|0)==0,b=(g|0)==(y|0),m=(y|0)==0,E=o+F|0,f=s+-1-((w|0)>0?w:0)|0,k=~i,k=(f|0)>(k|0)?f:k,f=~k,f=ia(k+((f|0)>0?f:0)+1|0,u)|0,k=r;;){if(p?a=k:(hn(k|0,Li[o>>0]|0,v|0)|0,a=k+v|0),b)l=o;else{for(h=F,_=o,c=a;;){if(Li[c>>0]=Li[_>>0]|0,h=h+-1|0,!h)break;_=_+1|0,c=c+1|0}l=E,a=a+F|0}if(m||hn(a|0,Li[l+-1>>0]|0,y|0)|0,d=d+-1|0,!d)break;k=k+u|0}r=r+f|0}if((S|0)!=(t|0)){for(b=(v|0)==0,p=(g|0)==(y|0),k=(y|0)==0,c=s+-1|0,h=c-((w|0)>0?w:0)|0,m=~i,m=(h|0)>(m|0)?h:m,c=c-m|0,h=~m,h=s+i+-1-((c|0)<(i|0)?i:c)-m-((h|0)>0?h:0)|0,m=ia(h,u)|0,h=ia(h,n)|0,c=r,_=o;;){if(b?d=c:(hn(c|0,Li[_>>0]|0,v|0)|0,d=c+v|0),p)a=_;else{for(a=F,l=_,f=d;;){if(Li[f>>0]=Li[l>>0]|0,a=a+-1|0,!a)break;l=l+1|0,f=f+1|0}a=_+F|0,d=d+F|0}if(k||hn(d|0,Li[a+-1>>0]|0,y|0)|0,e=e+-1|0,!e)break;c=c+u|0,_=_+n|0}o=o+h|0,r=r+m|0}}else{if(!a){for(l=s+-1-((w|0)>0?w:0)|0,a=~i,a=(l|0)>(a|0)?l:a,l=~a,l=ia(a+((l|0)>0?l:0)+1|0,u)|0,a=r;;){if(En(a|0,o|0,F|0)|0,d=d+-1|0,!d)break;a=a+u|0}r=r+l|0}if((S|0)!=(t|0)){for(l=s+-1|0,a=l-((w|0)>0?w:0)|0,d=~i,d=(a|0)>(d|0)?a:d,l=l-d|0,a=~d,a=s+i+-1-((l|0)<(i|0)?i:l)-d-((a|0)>0?a:0)|0,d=ia(a,u)|0,a=ia(a,n)|0,l=r,f=o;;){if(En(l|0,f|0,F|0)|0,e=e+-1|0,!e)break;l=l+u|0,f=f+n|0}o=o+a|0,r=r+d|0}}if(b=0-n|0,m=o+b|0,t)if(e=(v|0)==0,E=(g|0)==(y|0),p=(y|0)==0,k=F-n|0,M)if(e)for(;;){if(E)f=r,l=b;else{for(l=F,f=m,e=r;;){if(Li[e>>0]=Li[f>>0]|0,l=l+-1|0,!l)break;f=f+1|0,e=e+1|0}f=r+F|0,l=k}if(p||hn(f|0,Li[o+(l+-1)>>0]|0,y|0)|0,t=t+-1|0,!t)break;r=r+u|0}else for(;;){if(hn(r|0,Li[m>>0]|0,v|0)|0,l=r+v|0,E)e=b;else{for(e=F,f=m;;){if(Li[l>>0]=Li[f>>0]|0,e=e+-1|0,!e)break;f=f+1|0,l=l+1|0}l=r+(v+F)|0,e=k}if(p||hn(l|0,Li[o+(e+-1)>>0]|0,y|0)|0,t=t+-1|0,!t)break;r=r+u|0}else{if(e){for(;;){if(En(r|0,m|0,F|0)|0,t=t+-1|0,!t)break;r=r+u|0}return}for(;;){if(En(r|0,m|0,F|0)|0,t=t+-1|0,!t)break;r=r+u|0}}}function y(e,r,t,o,n,i,a,s,u){e|=0,r|=0,t|=0,o|=0,n|=0,i|=0,a|=0,s|=0,u|=0;var f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,M=0,y=0,F=0,O=0;if(y=Vi,Vi=Vi+144|0,f=y,(((t|0)>=0?(s+t|0)>>>0>n>>>0|(o|0)<0:!0)?0:(o+1+u|0)>>>0<=i>>>0)?f=e:(M=u+1|0,v(e,f,t,o,n,i,s,M,s),v(e+(ia(i,n)|0)|0,f+(ia(M,s)|0)|0,t,o,n,i,s,M,s),t=0,o=0,n=s,i=M),M=8-a|0,h=u>>>1,_=(h|0)==0,E=s>>>1,S=(E|0)==0,w=16-s|0,g=n<<1,p=g-s|0,m=g|1,b=n+1|0,k=E<<1,_)return void(Vi=y);for(e=r,s=f+((ia(o,n)|0)+t)|0,c=h;;){if(S)u=e;else{for(u=e+k|0,l=s,d=E;;){if(F=xi[l+n>>0]|0,O=xi[l>>0]|0,Li[e+8>>0]=(((ia(F,M)|0)+(ia(xi[l+g>>0]|0,a)|0)<<3)+32|0)>>>6,Li[e>>0]=(((ia(O,M)|0)+(ia(F,a)|0)<<3)+32|0)>>>6,F=xi[l+b>>0]|0,O=xi[l+1>>0]|0,Li[e+9>>0]=(((ia(F,M)|0)+(ia(xi[l+m>>0]|0,a)|0)<<3)+32|0)>>>6,Li[e+1>>0]=(((ia(O,M)|0)+(ia(F,a)|0)<<3)+32|0)>>>6,d=d+-1|0,!d)break;e=e+2|0,l=l+2|0}s=s+k|0}if(c=c+-1|0,!c)break;e=u+w|0,s=s+p|0}if(_)return void(Vi=y);for(u=r+64|0,o=f+((ia(i+o|0,n)|0)+t)|0,f=h;;){if(S)i=u;else{for(i=u+k|0,t=o,e=E;;){if(O=xi[t+n>>0]|0,F=xi[t>>0]|0,Li[u+8>>0]=(((ia(O,M)|0)+(ia(xi[t+g>>0]|0,a)|0)<<3)+32|0)>>>6,Li[u>>0]=(((ia(F,M)|0)+(ia(O,a)|0)<<3)+32|0)>>>6,O=xi[t+b>>0]|0,F=xi[t+1>>0]|0,Li[u+9>>0]=(((ia(O,M)|0)+(ia
\ No newline at end of file
-Vi=m,e|0;if(t=Bi[n>>2]|0,!(Bi[t+920>>2]|0))break;if(o=Bi[t+948>>2]|0,(Bi[t+944>>2]|0)>>>0>o>>>0)return e=1,Vi=m,e|0;if(o>>>0<(Bi[l>>2]|0)>>>0)return e=1,Vi=m,e|0;if(o>>>0>(Bi[i>>2]|0)>>>0)return e=1,Vi=m,e|0;Bi[i>>2]=(o|0)==0?1:o;break}while(0);return be(e)|0,e=0,Vi=m,e|0}return e=Bi[Wi>>2]|0,Bi[_>>2]=7432,la(e|0,7592,_|0)|0,e=1,Vi=m,e|0}function H(e,r){e|=0,r|=0;var t=0,o=0,n=0,i=0,a=0;if((Bi[e>>2]|0)!=(Bi[r>>2]|0))return r=1,r|0;if((Bi[e+4>>2]|0)!=(Bi[r+4>>2]|0))return r=1,r|0;if((Bi[e+12>>2]|0)!=(Bi[r+12>>2]|0))return r=1,r|0;if(t=Bi[e+16>>2]|0,(t|0)!=(Bi[r+16>>2]|0))return r=1,r|0;if((Bi[e+44>>2]|0)!=(Bi[r+44>>2]|0))return r=1,r|0;if((Bi[e+48>>2]|0)!=(Bi[r+48>>2]|0))return r=1,r|0;if((Bi[e+52>>2]|0)!=(Bi[r+52>>2]|0))return r=1,r|0;if((Bi[e+56>>2]|0)!=(Bi[r+56>>2]|0))return r=1,r|0;if(a=Bi[e+60>>2]|0,(a|0)!=(Bi[r+60>>2]|0))return r=1,r|0;if((Bi[e+80>>2]|0)!=(Bi[r+80>>2]|0))return r=1,r|0;e:do if(t){if((t|0)==1){if((Bi[e+24>>2]|0)!=(Bi[r+24>>2]|0))return r=1,r|0;if((Bi[e+28>>2]|0)!=(Bi[r+28>>2]|0))return r=1,r|0;if((Bi[e+32>>2]|0)!=(Bi[r+32>>2]|0))return r=1,r|0;if(t=Bi[e+36>>2]|0,(t|0)!=(Bi[r+36>>2]|0))return r=1,r|0;if(t){for(o=Bi[e+40>>2]|0,n=Bi[r+40>>2]|0,i=0;;){if((Bi[o+(i<<2)>>2]|0)!=(Bi[n+(i<<2)>>2]|0)){t=1;break}if(i=i+1|0,i>>>0>=t>>>0)break e}return t|0}}}else if((Bi[e+20>>2]|0)!=(Bi[r+20>>2]|0))return r=1,r|0;while(0);if(a){if((Bi[e+64>>2]|0)!=(Bi[r+64>>2]|0))return r=1,r|0;if((Bi[e+68>>2]|0)!=(Bi[r+68>>2]|0))return r=1,r|0;if((Bi[e+72>>2]|0)!=(Bi[r+72>>2]|0))return r=1,r|0;if((Bi[e+76>>2]|0)!=(Bi[r+76>>2]|0))return r=1,r|0}return r=0,r|0}function U(e,r,t,o){e|=0,r|=0,t|=0,o|=0;var n=0,a=0,s=0,u=0,f=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,M=0,v=0,y=0,F=0,O=0,R=0,A=0,D=0,P=0,N=0;for(A=Vi,Vi=Vi+448|0,R=A,E=A+12|0,F=A+8|0,y=A+4|0,E=E+(0-E&15)|0,S=Bi[r+3376>>2]|0,_=Bi[o>>2]|0,Bi[F>>2]=0,w=r+1192|0,Bi[w>>2]=(Bi[w>>2]|0)+1,h=r+1200|0,Bi[h>>2]=0,m=r+12|0,Bi[y>>2]=(Bi[o+48>>2]|0)+(Bi[(Bi[m>>2]|0)+52>>2]|0),b=o+36|0,p=r+1212|0,g=o+52|0,M=o+56|0,v=o+60|0,k=o+4|0,u=o+44|0,f=r+1220|0,d=r+1172|0,O=r+1176|0,c=S+12|0,s=0,n=0;;){if(o=Bi[p>>2]|0,(Bi[b>>2]|0)==0?(Bi[o+(_*216|0)+196>>2]|0)!=0:0){o=4;break}if(a=Bi[(Bi[m>>2]|0)+56>>2]|0,N=Bi[g>>2]|0,P=Bi[M>>2]|0,D=Bi[v>>2]|0,Bi[o+(_*216|0)+4>>2]=Bi[w>>2],Bi[o+(_*216|0)+8>>2]=N,Bi[o+(_*216|0)+12>>2]=P,Bi[o+(_*216|0)+16>>2]=D,Bi[o+(_*216|0)+24>>2]=a,a=Bi[k>>2]|0,(a|0)!=2?!((a|0)==7|(n|0)!=0):0){if(n=Se(e,F)|0){o=28;break}if(o=Bi[F>>2]|0,o>>>0>((Bi[O>>2]|0)-_|0)>>>0){o=9;break}o?(hn(c|0,0,164)|0,Bi[S>>2]=0,n=1):n=0}if(o=Bi[F>>2]|0)Bi[F>>2]=o+-1,a=n;else{if(n=i(e,S,(Bi[p>>2]|0)+(_*216|0)|0,Bi[k>>2]|0,Bi[u>>2]|0)|0){o=15;break}a=0}if(n=l((Bi[p>>2]|0)+(_*216|0)|0,S,t,f,y,_,Bi[(Bi[m>>2]|0)+64>>2]|0,E)|0){o=17;break}if(n=((Bi[(Bi[p>>2]|0)+(_*216|0)+196>>2]|0)==1&1)+s|0,o=pe(e)|0?1:(Bi[F>>2]|0)!=0,N=Bi[k>>2]|0,(N|0)==7|(N|0)==2&&(Bi[h>>2]=_),_=ke(Bi[d>>2]|0,Bi[O>>2]|0,_)|0,!((_|0)!=0|o^1)){o=23;break}if(!o){o=25;break}s=n,n=a}return(o|0)==4?(N=Bi[Wi>>2]|0,Bi[R>>2]=7472,la(N|0,7592,R|0)|0,N=1,Vi=A,N|0):(o|0)==9?(N=Bi[Wi>>2]|0,Bi[R>>2]=7504,la(N|0,7592,R|0)|0,N=1,Vi=A,N|0):(o|0)==15?(N=Bi[Wi>>2]|0,Bi[R>>2]=7520,la(N|0,7592,R|0)|0,N=n,Vi=A,N|0):(o|0)==17?(N=Bi[Wi>>2]|0,Bi[R>>2]=7544,la(N|0,7592,R|0)|0,N=n,Vi=A,N|0):(o|0)==23?(N=Bi[Wi>>2]|0,Bi[R>>2]=7560,la(N|0,7592,R|0)|0,N=1,Vi=A,N|0):(o|0)==25?(o=r+1196|0,n=(Bi[o>>2]|0)+n|0,n>>>0>(Bi[O>>2]|0)>>>0?(N=Bi[Wi>>2]|0,Bi[R>>2]=7576,la(N|0,7592,R|0)|0,N=1,Vi=A,N|0):(Bi[o>>2]=n,N=0,Vi=A,N|0)):(o|0)==28?(Vi=A,n|0):0}function q(e,r){e|=0,r|=0;var t=0,o=0,n=0,i=0,a=0,s=0;a=Bi[e+1192>>2]|0,t=Bi[e+1200>>2]|0,i=e+1212|0;e:do if(t){o=e+16|0,n=0;do{do if(t=t+-1|0,t>>>0<=r>>>0)break e;while((Bi[(Bi[i>>2]|0)+(t*216|0)+4>>2]|0)!=(a|0));n=n+1|0,s=Bi[(Bi[o>>2]|0)+52>>2]|0}while(n>>>0<(s>>>0>10?s:10)>>>0)}else t=r;while(0);for(n=e+1172|0,o=e+1176|0,r=t;;){if(t=Bi[i>>2]|0,(Bi[t+(r*216|0)+4>>2]|0)!=(a|0)){t=11;break}if(t=t+(r*216|0)+196|0,e=Bi[t>>2]|0,!e){t=11;break}if(Bi[t>>2]=e+-1,r=ke(Bi[n>>2]|0,Bi[o>>2]|0,r)|0,!r){t=11;break}}}function V(e,r,t,o,n){e|=0,r|=0,t|=0,o|=0,n|=0;var i=0,a=0,s=0,u=0,f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0;if(p=ia(n,o)|0,c=
\ No newline at end of file
-r|0;n=(t|0)==1,Bi[r>>2]=n&1;do if(n){if(o=ue(e,8)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+4>>2]=o,(o|0)==255){if(o=ue(e,16)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+8>>2]=o,t=ue(e,16)|0,(t|0)==-1)return r=1,r|0;Bi[r+12>>2]=t;break}}while(0);if(t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;n=(t|0)==1,Bi[r+16>>2]=n&1;do if(n){if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;Bi[r+20>>2]=(o|0)==1&1;break}while(0);if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;n=(o|0)==1,Bi[r+24>>2]=n&1;do{if(n){if(o=ue(e,3)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+28>>2]=o,o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+32>>2]=(o|0)==1&1,o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(n=(o|0)==1,Bi[r+36>>2]=n&1,!n){Bi[r+40>>2]=2,Bi[r+44>>2]=2,Bi[r+48>>2]=2;break}if(o=ue(e,8)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+40>>2]=o,o=ue(e,8)|0,(o|0)==-1)return r=1,r|0;if(Bi[r+44>>2]=o,o=ue(e,8)|0,(o|0)==-1)return r=1,r|0;Bi[r+48>>2]=o;break}Bi[r+28>>2]=5,Bi[r+40>>2]=2,Bi[r+44>>2]=2,Bi[r+48>>2]=2}while(0);if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(n=(o|0)==1,Bi[r+52>>2]=n&1,n){if(o=r+56|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>5)return r=1,r|0;if(o=r+60|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>5)return r=1,r|0}if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;n=(o|0)==1,Bi[r+64>>2]=n&1;do if(n){if(o=fe(e)|0,(le(e,32)|0)==-1|(o|0)==0)return r=1,r|0;if(Bi[r+68>>2]=o,o=fe(e)|0,(le(e,32)|0)==-1|(o|0)==0)return r=1,r|0;if(Bi[r+72>>2]=o,o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;Bi[r+76>>2]=(o|0)==1&1;break}while(0);if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(o=(o|0)==1,n=r+80|0,Bi[n>>2]=o&1,o){if(o=ye(e,r+84|0)|0)return r=o,r|0}else Bi[r+84>>2]=1,Bi[r+96>>2]=288000001,Bi[r+224>>2]=288000001,Bi[r+480>>2]=24,Bi[r+484>>2]=24,Bi[r+488>>2]=24,Bi[r+492>>2]=24;if(o=ue(e,1)|0,(o|0)==-1)return r=1,r|0;if(t=(o|0)==1,o=r+496|0,Bi[o>>2]=t&1,t){if(t=ye(e,r+500|0)|0)return r=t,r|0}else Bi[r+500>>2]=1,Bi[r+512>>2]=240000001,Bi[r+640>>2]=240000001,Bi[r+896>>2]=24,Bi[r+900>>2]=24,Bi[r+904>>2]=24,Bi[r+908>>2]=24;((Bi[n>>2]|0)==0?(Bi[o>>2]|0)==0:0)||(i=46);do if((i|0)==46){if(t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;Bi[r+912>>2]=(t|0)==1&1;break}while(0);if(t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;if(Bi[r+916>>2]=(t|0)==1&1,t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;i=(t|0)==1,Bi[r+920>>2]=i&1;do{if(i){if(t=ue(e,1)|0,(t|0)==-1)return r=1,r|0;if(Bi[r+924>>2]=(t|0)==1&1,t=r+928|0,o=Se(e,t)|0)return r=o,r|0;if((Bi[t>>2]|0)>>>0>16)return r=1,r|0;if(o=r+932|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>16)return r=1,r|0;if(o=r+936|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>16)return r=1,r|0;if(o=r+940|0,t=Se(e,o)|0)return r=t,r|0;if((Bi[o>>2]|0)>>>0>16)return r=1,r|0;if(t=Se(e,r+944|0)|0)return r=t,r|0;if(t=Se(e,r+948|0)|0,!t)break;return t|0}Bi[r+924>>2]=1,Bi[r+928>>2]=2,Bi[r+932>>2]=1,Bi[r+936>>2]=16,Bi[r+940>>2]=16,Bi[r+944>>2]=16,Bi[r+948>>2]=16}while(0);return r=0,r|0}function ye(e,r){e|=0,r|=0;var t=0,o=0,n=0,i=0,a=0,s=0;if(t=Se(e,r)|0)return r=t,r|0;if(s=(Bi[r>>2]|0)+1|0,Bi[r>>2]=s,s>>>0>32)return r=1,r|0;if(t=ue(e,4)|0,(t|0)==-1)return r=1,r|0;if(s=r+4|0,Bi[s>>2]=t,o=ue(e,4)|0,(o|0)==-1)return r=1,r|0;a=r+8|0,Bi[a>>2]=o;e:do if(Bi[r>>2]|0){for(i=0;;){if(n=r+(i<<2)+12|0,t=Se(e,n)|0){o=17;break}if(o=Bi[n>>2]|0,(o|0)==-1){t=1,o=17;break}if(t=o+1|0,Bi[n>>2]=t,Bi[n>>2]=t<<(Bi[s>>2]|0)+6,n=r+(i<<2)+140|0,t=Se(e,n)|0){o=17;break}if(o=Bi[n>>2]|0,(o|0)==-1){t=1,o=17;break}if(o=o+1|0,Bi[n>>2]=o,Bi[n>>2]=o<<(Bi[a>>2]|0)+4,o=ue(e,1)|0,(o|0)==-1){t=1,o=17;break}if(Bi[r+(i<<2)+268>>2]=(o|0)==1&1,i=i+1|0,i>>>0>=(Bi[r>>2]|0)>>>0)break e}if((o|0)==17)return t|0}while(0);return t=ue(e,5)|0,(t|0)==-1?(r=1,r|0):(Bi[r+396>>2]=t+1,t=ue(e,5)|0,(t|0)==-1?(r=1,r|0):(Bi[r+400>>2]=t+1,t=ue(e,5)|0,(t|0)==-1?(r=1,r|0):(Bi[r+404>>2]=t+1,t=ue(e,5)|0,(t|0)==-1?(r=1,r|0):(Bi[r+408>>2]=t,r=0,r|0))))}function Fe(e){e|=0;var r=0,t=0,o=0,n=0,i=0,a=0,s=0,u=0,f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,M=0,v=0,y=0,F=0,O=0,R=0,A=0,D=0,P=0,N=0,T=0,C=0,L=0,I=0,B=0,x=0,H=0,U=0,q=0;do if(e>>>0<245){if(h=e>>>0<11?16:e+11&-8,e=h>>>3,l=Bi[2176]|0,s=l>>>e,s&3){o=(s&1^1)+e|0,n=o<<1,r=8744+(n<<2)|0,n=8744+(n+2<<2)|0,i=Bi[n>>2]|0,a=i+8|0,s=Bi[a>>2]|0;do if((r|0)!=(s|0)){i
\ No newline at end of file
-r>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=r+1,r=xi[r>>0]|0):r=ur(e)|0,(r+-48|0)>>>0<10|(r+-65|0)>>>0<26?0:!((r+-97|0)>>>0<26|(r|0)==95))break;n=n+1|0}if((r|0)==41)return b=Ki,Vi=A,+b;if(r=(Bi[g>>2]|0)==0,r||(Bi[M>>2]=(Bi[M>>2]|0)+-1),!_)return Bi[(ka()|0)>>2]=22,sr(e,0),b=0,Vi=A,+b;if((n|0)==0|r)return b=Ki,Vi=A,+b;do n=n+-1|0,Bi[M>>2]=(Bi[M>>2]|0)+-1;while((n|0)!=0);return o=Ki,Vi=A,+o}if(n)return Bi[g>>2]|0&&(Bi[M>>2]=(Bi[M>>2]|0)+-1),Bi[(ka()|0)>>2]=22,sr(e,0),i=0,Vi=A,+i;do if((a|0)==48){if(a=Bi[M>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=a+1,a=xi[a>>0]|0):a=ur(e)|0,(a|32|0)!=120){if(!(Bi[g>>2]|0)){a=48;break}Bi[M>>2]=(Bi[M>>2]|0)+-1,a=48;break}for(a=Bi[M>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=a+1,c=xi[a>>0]|0,a=0):(c=ur(e)|0,a=0);;){if((c|0)==46){u=a,E=70;break}if((c|0)!=48){l=0,S=0,f=0,r=0,_=0,p=0,d=1,n=0,o=0;break}a=Bi[M>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=a+1,c=xi[a>>0]|0,a=1):(c=ur(e)|0,a=1)}if((E|0)==70)if(a=Bi[M>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=a+1,c=xi[a>>0]|0):c=ur(e)|0,(c|0)==48){f=0,r=0;do a=Bi[M>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=a+1,c=xi[a>>0]|0):c=ur(e)|0,f=pn(f|0,r|0,-1,-1)|0,r=Zi;while((c|0)==48);l=0,S=0,a=1,_=1,p=0,d=1,n=0,o=0}else l=0,S=0,f=0,r=0,a=u,_=1,p=0,d=1,n=0,o=0;e:for(;;){u=c+-48|0;do{if(u>>>0>=10){if(h=c|32,m=(c|0)==46,!((h+-97|0)>>>0<6|m)){u=S;break e}if(m){if(_){u=S,c=46;break e}f=S,r=l,u=S,_=1,m=p,b=d;break}c=(c|0)>57?h+-87|0:u,E=83;break}c=u,E=83}while(0);if((E|0)==83){E=0;do if((l|0)<0|(l|0)==0&S>>>0<8)m=p,b=d,n=c+(n<<4)|0;else{if((l|0)<0|(l|0)==0&S>>>0<14){d*=.0625,m=p,b=d,o+=d*+(c|0);break}(c|0)==0|(p|0)!=0?(m=p,b=d):(m=1,b=d,o+=d*.5)}while(0);u=pn(S|0,l|0,1,0)|0,l=Zi,a=1}c=Bi[M>>2]|0,c>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=c+1,S=u,c=xi[c>>0]|0,p=m,d=b):(S=u,c=ur(e)|0,p=m,d=b)}if(!a)return r=(Bi[g>>2]|0)==0,r||(Bi[M>>2]=(Bi[M>>2]|0)+-1),t?(r?0:(w=Bi[M>>2]|0,Bi[M>>2]=w+-1,(_|0)!=0))&&(Bi[M>>2]=w+-2):sr(e,0),b=+(O|0)*0,Vi=A,+b;if(_=(_|0)==0,m=_?u:f,_=_?l:r,(l|0)<0|(l|0)==0&u>>>0<8){f=u;do n<<=4,f=pn(f|0,l|0,1,0)|0,l=Zi;while((l|0)<0|(l|0)==0&f>>>0<8)}do if((c|32|0)==112){if(r=fn(e,t)|0,a=Zi,(r|0)==0&(a|0)==-2147483648){if(t){if(!(Bi[g>>2]|0)){r=0,a=0;break}Bi[M>>2]=(Bi[M>>2]|0)+-1,r=0,a=0;break}return sr(e,0),b=0,Vi=A,+b}}else Bi[g>>2]|0?(Bi[M>>2]=(Bi[M>>2]|0)+-1,r=0,a=0):(r=0,a=0);while(0);if(F=mn(m|0,_|0,2)|0,F=pn(F|0,Zi|0,-32,-1)|0,r=pn(F|0,Zi|0,r|0,a|0)|0,a=Zi,!n)return b=+(O|0)*0,Vi=A,+b;if((a|0)>0|(a|0)==0&r>>>0>(0-R|0)>>>0)return Bi[(ka()|0)>>2]=34,b=+(O|0)*1.7976931348623157e308*1.7976931348623157e308,Vi=A,+b;if(F=R+-106|0,e=((F|0)<0)<<31>>31,(a|0)<(e|0)|(a|0)==(e|0)&r>>>0<F>>>0)return Bi[(ka()|0)>>2]=34,b=+(O|0)*2.2250738585072014e-308*2.2250738585072014e-308,Vi=A,+b;if((n|0)>-1){do n<<=1,o>=.5?(i=o+-1,n|=1):i=o,o+=i,r=pn(r|0,a|0,-1,-1)|0,a=Zi;while((n|0)>-1);_=r,d=o}else _=r,d=o;return r=_n(32,0,R|0,((R|0)<0)<<31>>31|0)|0,r=pn(_|0,a|0,r|0,Zi|0)|0,R=Zi,0>(R|0)|0==(R|0)&s>>>0>r>>>0?(r|0)<0?(r=0,E=126):E=124:(r=s,E=124),(E|0)==124&&((r|0)<53?E=126:(a=r,i=+(O|0),o=0)),(E|0)==126&&(o=+(O|0),a=r,i=o,o=+Ar(+jt(1,84-r|0),o)),R=(a|0)<32&d!=0&(n&1|0)==0,o=i*(R?0:d)+(o+i*+(((R&1)+n|0)>>>0))-o,o==0&&(Bi[(ka()|0)>>2]=34),b=+Kt(o,_),Vi=A,+b}while(0);for(v=R+s|0,y=0-v|0,c=0;;){if((a|0)==46){E=137;break}if((a|0)!=48){r=0,h=0,p=0;break}a=Bi[M>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=a+1,a=xi[a>>0]|0,c=1):(a=ur(e)|0,c=1)}if((E|0)==137)if(a=Bi[M>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=a+1,a=xi[a>>0]|0):a=ur(e)|0,(a|0)==48)for(r=0,a=0;;){if(r=pn(r|0,a|0,-1,-1)|0,c=Zi,a=Bi[M>>2]|0,a>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=a+1,a=xi[a>>0]|0):a=ur(e)|0,(a|0)!=48){h=c,c=1,p=1;break}a=c}else r=0,h=0,p=1;Bi[F>>2]=0,l=a+-48|0,_=(a|0)==46;e:do if(l>>>0<10|_){w=F+496|0,k=0,f=0,E=p,m=0,u=0,S=0;r:for(;;){do if(_){if(E){a=h,l=k,_=S;break r}r=k,h=f,E=1,p=S}else{if(n=pn(k|0,f|0,1,0)|0,f=Zi,p=(a|0)!=48,(u|0)>=125){if(!p){k=n,p=S;break}Bi[w>>2]=Bi[w>>2]|1,k=n,p=S;break}_=F+(u<<2)|0,m&&(l=a+-48+((Bi[_>>2]|0)*10|0)|0),Bi[_>>2]=l,m=m+1|0,_=(m|0)==9,k=n,c=1,m=_?0:m,u=(_&1)+u|0,p=p?n:S}while(0);if(_=Bi[M>>2]|0,_>>>0<(Bi[g>>2]|0)>>>0?(Bi[M>>2]=_+1,a=xi[_>>0]|0):a=ur(e)|0,l=a+-48|0,_=(a|0)==46,!(l>>>0<10|_)){l=E,w=u,_=p,E=160;break e}S
\ No newline at end of file
-+e}function gt(e){return e=+e,+ +St(e)}function Mt(e){e=+e;var r=0;return r=er(32)|0,e=+qt(e),~~e|0}function vt(e){return e=+e,~~+Vt(e)|0}function yt(e){return e=+e,Mt(e)|0}function Ft(e){return e=+e,~~+Gt(e)|0}function Ot(e){return e=+e,~~+Wt(e)|0}function Rt(e){return e=+e,~~+Yt(e)|0}function At(e,r){e=+e,r|=0;var t=0,o=0,n=0,i=0,a=0;return qi[zi>>3]=e,n=Bi[zi>>2]|0,i=Bi[zi+4>>2]|0,t=kn(n|0,i|0,52)|0,t=(t&2047)+-1023|0,(t|0)>51?(qi[r>>3]=e,(t|0)!=1024|(n|0)==0&(i&1048575|0)==0?(Bi[zi>>2]=0,Bi[zi+4>>2]=i&-2147483648,e=+qi[zi>>3],+e):+e):(t|0)<0?(Bi[zi>>2]=0,Bi[zi+4>>2]=i&-2147483648,qi[r>>3]=+qi[zi>>3],+e):(t=kn(-1,1048575,t|0)|0,o=Zi,(t&n|0)==0&(o&i|0)==0?(qi[r>>3]=e,Bi[zi>>2]=0,Bi[zi+4>>2]=i&-2147483648,e=+qi[zi>>3],+e):(Bi[zi>>2]=n&~t,Bi[zi+4>>2]=i&~o,a=+qi[zi>>3],qi[r>>3]=a,e-=a,+e))}function Dt(e,r){e=+e,r|=0;var t=0,o=0,n=0;return Ui[zi>>2]=e,o=Bi[zi>>2]|0,t=(o>>>23&255)+-127|0,(t|0)>22?(Ui[r>>2]=e,(t|0)!=128|(o&8388607|0)==0?(Bi[zi>>2]=o&-2147483648,e=+Ui[zi>>2],+e):+e):(t|0)<0?(Ui[r>>2]=(Bi[zi>>2]=o&-2147483648,+Ui[zi>>2]),+e):(t=8388607>>>t,t&o?(Bi[zi>>2]=o&~t,n=+Ui[zi>>2],Ui[r>>2]=n,e-=n,+e):(Ui[r>>2]=e,Bi[zi>>2]=o&-2147483648,e=+Ui[zi>>2],+e))}function Pt(e,r){e=+e,r|=0;var t=0,o=0;return t=Vi,Vi=Vi+16|0,o=t,e=+At(e,o),qi[r>>3]=+qi[o>>3],Vi=t,+e}function Nt(e){return e|=0,+Ki}function Tt(e){return e|=0,+Ki}function Ct(e){return e|=0,+Ki}function Lt(e){e=+e;var r=0;return r=er(32)|0,e=+qt(e),r?+e:+e}function It(e){e=+e;var r=0;return r=er(32)|0,e=+Vt(e),r?+e:+e}function Bt(e){return e=+e,+ +Lt(e)}function xt(e,r){e=+e,r=+r;var t=0;return t=Vi,Vi=Vi+16|0,r=+_a(+e,+r,t|0),Vi=t,+r}function Ht(e,r){e=+e,r=+r;var t=0;return t=Vi,Vi=Vi+16|0,r=+fa(+e,+r,t|0),Vi=t,+r}function Ut(e,r){return e=+e,r=+r,+ +xt(e,r)}function qt(e){e=+e;var r=0,t=0;return qi[zi>>3]=e,r=Bi[zi+4>>2]|0,t=r&2146435072,t>>>0>1126170624|(t|0)==1126170624&!1?+e:(r=(r|0)<0,e=r?e+-4503599627370496+4503599627370496:e+4503599627370496+-4503599627370496,e!=0?+e:(e=r?-0:0,+e))}function Vt(e){e=+e;var r=0;return Ui[zi>>2]=e,r=Bi[zi>>2]|0,(r&2130706432)>>>0>1249902592?+e:(r=(r|0)<0,e=r?e+-8388608+8388608:e+8388608+-8388608,e!=0?+e:(e=r?-0:0,+e))}function zt(e){return e=+e,+ +qt(e)}function Gt(e){e=+e;var r=0,t=0,o=0,n=0,i=0;return i=Vi,Vi=Vi+16|0,qi[zi>>3]=e,t=Bi[zi+4>>2]|0,n=kn(Bi[zi>>2]|0,t|0,52)|0,n&=2047,n>>>0>1074?(Vi=i,+e):(t=(t|0)<0,r=t?-e:e,o=r+4503599627370496,n>>>0<1022?(qi[i>>3]=o,e*=0,Vi=i,+e):(o=o+-4503599627370496-r,o>.5?r=r+o+-1:(r+=o,o<=-.5&&(r+=1)),t?(e=-r,Vi=i,+e):(e=r,Vi=i,+e)))}function Wt(e){e=+e;var r=0,t=0,o=0,n=0,i=0,a=0;a=Vi,Vi=Vi+16|0,i=a,Ui[zi>>2]=e,r=Bi[zi>>2]|0,n=r>>>23&255;do if(n>>>0<=149){if(r=(r|0)<0,o=r?-e:e,t=o+8388608,n>>>0<126){Ui[i>>2]=t,e*=0;break}t=t+-8388608-o,t>.5?e=o+t+-1:(e=o+t,t<=-.5&&(e+=1)),r&&(e=-e)}while(0);return Vi=a,+e}function Yt(e){return e=+e,+ +Gt(e)}function jt(e,r){e=+e,r|=0;var t=0;return(r|0)>1023?(e*=8.98846567431158e307,t=r+-1023|0,(t|0)>1023&&(t=r+-2046|0,t=(t|0)>1023?1023:t,e*=8.98846567431158e307)):(r|0)<-1022?(e*=2.2250738585072014e-308,t=r+1022|0,(t|0)<-1022&&(t=r+2044|0,t=(t|0)<-1022?-1022:t,e*=2.2250738585072014e-308)):t=r,t=mn(t+1023|0,0,52)|0,r=Zi,Bi[zi>>2]=t,Bi[zi+4>>2]=r,+(e*+qi[zi>>3])}function Kt(e,r){return e=+e,r|=0,+ +jt(e,r)}function Xt(e,r,t){e=+e,r|=0,t|=0,qi[r>>3]=+ra(+e),qi[t>>3]=+ea(+e)}function Zt(e,r,t){e=+e,r|=0,t|=0,Ui[r>>2]=+ra(+e),Ui[t>>2]=+ea(+e)}function Qt(e,r,t){e=+e,r|=0,t|=0,qi[r>>3]=+ra(+e),qi[t>>3]=+ea(+e)}function Jt(e){e=+e;var r=0,t=0,o=0;return qi[zi>>3]=e,o=Bi[zi+4>>2]|0,t=(o|0)<0?-.5:.5,o&=2147483647,Bi[zi>>2]=Bi[zi>>2],Bi[zi+4>>2]=o,r=+qi[zi>>3],o>>>0>=1082535490?(e=t*2*+fr(r),+e):(r=+Ir(r),o>>>0>=1072693248?(e=t*(r+r/(r+1)),+e):o>>>0<1045430272?+e:(e=t*(r*2-r*r/(r+1)),+e))}function $t(e){e=+e;var r=0,t=0,o=0;return Ui[zi>>2]=e,o=Bi[zi>>2]|0,t=(o|0)<0?-.5:.5,o&=2147483647,Bi[zi>>2]=o,r=+Ui[zi>>2],o>>>0>=1118925335?(e=t*2*+lr(r),+e):(r=+Br(r),o>>>0>=1065353216?(e=t*(r+r/(r+1)),+e):o>>>0<964689920?+e:(e=t*(r*2-r*r/(r+1)),+e))}function eo(e){return e=+e,+ +Jt(e)}function ro(e){e=+e;var r=0,t=0,o=0,n=0;n=Vi,Vi=Vi+16|0,o=n,qi[zi>>3]=e,t=Bi[zi+4>>2]|0,r=t&2
\ No newline at end of file
-se=w,ue=g,N=63;break r}while(0)}while(0);if((N|0)==62){if(N=0,!oe){g=ie,w=ae,h=W,r=D;continue}se=ae,ue=ie,N=63}(N|0)==63&&(N=0,ke=Li[f>>0]|0,Ee=ue,we=se),k=ke<<24>>24,k=(m|0)!=0&(k&15|0)==3?k&-33:k,p=c&-65537,A=(c&8192|0)==0?c:p;r:do switch(k|0){case 111:if(s=(Ee|0)==0&(we|0)==0)a=Se;else{a=Se,r=Ee,u=we;do a=a+-1|0,Li[a>>0]=r&7|48,r=kn(r|0,u|0,3)|0,u=Zi;while(!((r|0)==0&(u|0)==0))}I=(A&8|0)==0|s,B=Ee,x=we,T=A,C=y,L=I&1^1,I=I?14520:14525,N=90;break;case 105:case 100:if((we|0)<0){Me=_n(0,0,Ee|0,we|0)|0,ge=Zi,ze=1,Ge=14520,N=85;break r}A&2048?(ge=we,Me=Ee,ze=1,Ge=14521,N=85):(Ge=A&1,ge=we,Me=Ee,ze=Ge,Ge=(Ge|0)==0?14520:14522,N=85);break;case 115:Pe=(Ee|0)==0?14536:Ee,N=95;break;case 67:Bi[Ke>>2]=Ee,Bi[Fe>>2]=0,fe=Ke,le=Oe,qe=-1,N=100;break;case 83:r=Ee,y?(fe=r,le=Ee,qe=y,N=100):(z=Ee,G=r,V=0,N=105);break;case 112:Ie=A|8,Ue=y>>>0>8?y:8,je=120,N=74;break;case 88:case 120:Ie=A,Ue=y,je=k,N=74;break;case 110:switch(m|0){case 7:g=Ee,Bi[g>>2]=W,Bi[g+4>>2]=((W|0)<0)<<31>>31,g=Ee,w=we,h=W,r=D;continue e;case 1:Bi[Ee>>2]=W,g=Ee,w=we,h=W,r=D;continue e;case 2:g=Ee,Bi[g>>2]=W,Bi[g+4>>2]=((W|0)<0)<<31>>31,g=Ee,w=we,h=W,r=D;continue e;case 3:Ii[Ee>>1]=W,g=Ee,w=we,h=W,r=D;continue e;case 4:Li[Ee>>0]=W,g=Ee,w=we,h=W,r=D;continue e;case 6:Bi[Ee>>2]=W,g=Ee,w=we,h=W,r=D;continue e;case 0:Bi[Ee>>2]=W,g=Ee,w=we,h=W,r=D;continue e;default:g=Ee,w=we,h=W,r=D;continue e}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:if(Bi[zi>>2]=Ee,Bi[zi+4>>2]=we,l=+qi[zi>>3],Bi[Le>>2]=0,(we|0)>=0?A&2048?(F=1,O=14547):(O=A&1,F=O,O=(O|0)==0?14545:14550):(l=-l,F=1,O=14544),qi[zi>>3]=l,v=Bi[zi+4>>2]&2146435072,!(v>>>0<2146435072|(v|0)==2146435072&!1)){if(f=(k&32|0)!=0,l!=l|!1?(c=0,d=f?14584:14592):(c=F,d=f?14568:14576),p=c+3|0,u=(P|0)>(p|0),(A&8192|0)==0&u){if(f=P-p|0,hn(Ve|0,32,(f>>>0>256?256:f)|0)|0,f>>>0>255){r=f;do Po(Ve,256,e)|0,r=r+-256|0;while(r>>>0>255);f&=255}Po(Ve,f,e)|0}if(Po(O,c,e)|0,Po(d,3,e)|0,(A&73728|0)==8192&u){if(r=P-p|0,hn(Ve|0,32,(r>>>0>256?256:r)|0)|0,r>>>0>255){f=r;do Po(Ve,256,e)|0,f=f+-256|0;while(f>>>0>255);r&=255}Po(Ve,r,e)|0}g=Ee,w=we,h=W,r=D,u=u?P:p;continue e}if(b=+nt(l,Le)*2,d=b!=0,d&&(Bi[Le>>2]=(Bi[Le>>2]|0)+-1),v=k|32,(v|0)==97){E=k&32,u=(E|0)==0?O:O+9|0,S=F|2,d=y>>>0>11?0:12-y|0;do{if(d){l=8;do d=d+-1|0,l*=16;while((d|0)!=0);if((Li[u>>0]|0)==45){l=-(l+(-b-l));break}l=b+l-l;break}l=b}while(0);if(d=Bi[Le>>2]|0,d=(d|0)<0?0-d|0:d,(d|0)<0)for(f=Re,c=d,h=((d|0)<0)<<31>>31;;){if(d=yn(c|0,h|0,10,0)|0,f=f+-1|0,Li[f>>0]=d|48,d=vn(c|0,h|0,10,0)|0,!(h>>>0>9|(h|0)==9&c>>>0>4294967295))break;c=d,h=Zi}else f=Re;if(d)for(;;){if(f=f+-1|0,Li[f>>0]=(d>>>0)%10|0|48,d>>>0<10)break;d=(d>>>0)/10|0}if((f|0)==(Re|0)&&(Li[Ae>>0]=48,f=Ae),Li[f+-1>>0]=(Bi[Le>>2]>>31&2)+43,c=f+-2|0,Li[c>>0]=k+15,(y|0)<1)if(A&8){f=Te;do F=~~l,d=f+1|0,Li[f>>0]=xi[14600+F>>0]|E,l=(l-+(F|0))*16,(d-te|0)==1?(Li[d>>0]=46,f=f+2|0):f=d;while(l!=0)}else{f=Te;do F=~~l,d=f+1|0,Li[f>>0]=xi[14600+F>>0]|E,l=(l-+(F|0))*16,(d-te|0)!=1|l==0?f=d:(Li[d>>0]=46,f=f+2|0);while(l!=0)}else{f=Te;do F=~~l,d=f+1|0,Li[f>>0]=xi[14600+F>>0]|E,l=(l-+(F|0))*16,(d-te|0)==1?(Li[d>>0]=46,f=f+2|0):f=d;while(l!=0)}if(r=c,p=(y|0)!=0&(ce+f|0)<(y|0)?_e+y-r|0:ne-r+f|0,k=p+S|0,h=A&73728,E=(P|0)>(k|0),(h|0)==0&E){if(d=P-k|0,hn(Ve|0,32,(d>>>0>256?256:d)|0)|0,d>>>0>255){r=d;do Po(Ve,256,e)|0,r=r+-256|0;while(r>>>0>255);d&=255}Po(Ve,d,e)|0}if(Po(u,S,e)|0,(h|0)==65536&E){if(r=P-k|0,hn(Ve|0,48,(r>>>0>256?256:r)|0)|0,r>>>0>255){u=r;do Po(Ve,256,e)|0,u=u+-256|0;while(u>>>0>255);r&=255}Po(Ve,r,e)|0}if(f=f-te|0,Po(Te,f,e)|0,d=De-c|0,f=p-d-f|0,(f|0)>0){if(hn(Ve|0,48,(f>>>0>256?256:f)|0)|0,f>>>0>255){r=f;do Po(Ve,256,e)|0,r=r+-256|0;while(r>>>0>255);f&=255}Po(Ve,f,e)|0}if(Po(c,d,e)|0,(h|0)==8192&E){if(r=P-k|0,hn(Ve|0,32,(r>>>0>256?256:r)|0)|0,r>>>0>255){f=r;do Po(Ve,256,e)|0,f=f+-256|0;while(f>>>0>255);r&=255}Po(Ve,r,e)|0}g=Ee,w=we,h=W,r=D,u=E?P:k;continue e}f=(y|0)<0?6:y,d?(d=(Bi[Le>>2]|0)+-28|0,Bi[Le>>2]=d,l=b*268435456):(l=b,d=Bi[Le>>2]|0),R=(d|0)<0?Ne:he,y=R,c=R;do M=~~l>>>0,Bi[c>>2]=M,c=c+4|0,l=(l-+(M>>>0))*1e9;while(l!=0);if(d=Bi[Le>>2]|0,(d|0)>0){r=d,d=R;do{s=(r|0)>29?29:r,r=c+-4|0;do if(r>>>0>=d>>>0){for(
\ No newline at end of file
-te=We+120|0,oe=We+112|0,ne=We+104|0,ie=We+96|0,ae=We+88|0,se=We+80|0,ue=We+72|0,le=We+64|0,de=We+56|0,ce=We+48|0,_e=We+40|0,he=We+32|0,me=We+124|0,be=We+116|0,pe=We+108|0,ke=We+92|0,Ee=We+84|0,Se=We+76|0,we=We+60|0,ge=We+52|0,Me=We+44|0,ve=We+28|0,ye=We+20|0,Fe=We+12|0,Oe=Ye+28|0,Re=Ye+32|0,Ae=Ye+24|0,De=J<<4,Pe=0-De|0,Ne=Pe<<1,Te=ia(J,-48)|0,Ce=J<<5,Le=Pe<<2,Ie=J*48|0,Be=J<<6,xe=Ye+24|0,He=Ye+12|0,Ue=t<<8,G=t<<6,W=J<<3,z=De|4,Y=Ye+16|0,j=Ye+20|0,K=Ye+12|0,X=Ye+4|0,Z=Ye+8|0,q=0,Q=0,V=r;;){o=Bi[V+8>>2]|0;do if((o|0)!=1){U=V+200|0,u=Bi[U>>2]|0;do if(u){if((o|0)==2?(Bi[V+4>>2]|0)!=(Bi[u+4>>2]|0):0){r=1;break}r=5}else r=1;while(0);H=V+204|0,a=Bi[H>>2]|0;do if(a){if((o|0)==2?(Bi[V+4>>2]|0)!=(Bi[a+4>>2]|0):0)break;r|=2}while(0);B=(r&2|0)==0;do if(B)Bi[qe>>2]=0,Bi[Ve>>2]=0,Bi[ze>>2]=0,Bi[We>>2]=0,t=0;else{if((Bi[V>>2]|0)>>>0<=5?(Bi[a>>2]|0)>>>0<=5:0){((Ii[V+28>>1]|0)==0?(Ii[a+48>>1]|0)==0:0)?((Bi[V+116>>2]|0)==(Bi[a+124>>2]|0)?(x=(Ii[V+132>>1]|0)-(Ii[a+172>>1]|0)|0,((x|0)<0?0-x|0:x)>>>0<=3):0)?(t=(Ii[V+134>>1]|0)-(Ii[a+174>>1]|0)|0,t=((t|0)<0?0-t|0:t)>>>0>3&1):t=1:t=2,Bi[We>>2]=t,((Ii[V+30>>1]|0)==0?(Ii[a+50>>1]|0)==0:0)?((Bi[V+116>>2]|0)==(Bi[a+124>>2]|0)?(x=(Ii[V+136>>1]|0)-(Ii[a+176>>1]|0)|0,((x|0)<0?0-x|0:x)>>>0<=3):0)?(n=(Ii[V+138>>1]|0)-(Ii[a+178>>1]|0)|0,n=((n|0)<0?0-n|0:n)>>>0>3&1):n=1:n=2,Bi[ze>>2]=n,((Ii[V+36>>1]|0)==0?(Ii[a+56>>1]|0)==0:0)?((Bi[V+120>>2]|0)==(Bi[a+128>>2]|0)?(x=(Ii[V+148>>1]|0)-(Ii[a+188>>1]|0)|0,((x|0)<0?0-x|0:x)>>>0<=3):0)?(i=(Ii[V+150>>1]|0)-(Ii[a+190>>1]|0)|0,i=((i|0)<0?0-i|0:i)>>>0>3&1):i=1:i=2,Bi[Ve>>2]=i,((Ii[V+38>>1]|0)==0?(Ii[a+58>>1]|0)==0:0)?((Bi[V+120>>2]|0)==(Bi[a+128>>2]|0)?(x=(Ii[V+152>>1]|0)-(Ii[a+192>>1]|0)|0,((x|0)<0?0-x|0:x)>>>0<=3):0)?(o=(Ii[V+154>>1]|0)-(Ii[a+194>>1]|0)|0,o=((o|0)<0?0-o|0:o)>>>0>3&1):o=1:o=2,Bi[qe>>2]=o,t=(n|t|i|o|0)!=0&1;break}Bi[qe>>2]=4,Bi[Ve>>2]=4,Bi[ze>>2]=4,Bi[We>>2]=4,t=1}while(0);x=(r&4|0)==0;do if(x)Bi[Ge>>2]=0,Bi[$>>2]=0,Bi[ee>>2]=0,Bi[re>>2]=0,i=Bi[V>>2]|0;else{if(i=Bi[V>>2]|0,i>>>0<=5?(Bi[u>>2]|0)>>>0<=5:0){if(((Ii[V+28>>1]|0)==0?(Ii[u+38>>1]|0)==0:0)?((Bi[V+116>>2]|0)==(Bi[u+120>>2]|0)?(I=(Ii[V+132>>1]|0)-(Ii[u+152>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0<=3):0)?(a=(Ii[V+134>>1]|0)-(Ii[u+154>>1]|0)|0,a=((a|0)<0?0-a|0:a)>>>0>3&1):a=1:a=2,Bi[re>>2]=a,((Ii[V+32>>1]|0)==0?(Ii[u+42>>1]|0)==0:0)?((Bi[V+116>>2]|0)==(Bi[u+120>>2]|0)?(I=(Ii[V+140>>1]|0)-(Ii[u+160>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0<=3):0)?(o=(Ii[V+142>>1]|0)-(Ii[u+162>>1]|0)|0,o=((o|0)<0?0-o|0:o)>>>0>3&1):o=1:o=2,Bi[ee>>2]=o,((Ii[V+44>>1]|0)==0?(Ii[u+54>>1]|0)==0:0)?((Bi[V+124>>2]|0)==(Bi[u+128>>2]|0)?(I=(Ii[V+164>>1]|0)-(Ii[u+184>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0<=3):0)?(r=(Ii[V+166>>1]|0)-(Ii[u+186>>1]|0)|0,r=((r|0)<0?0-r|0:r)>>>0>3&1):r=1:r=2,Bi[$>>2]=r,((Ii[V+48>>1]|0)==0?(Ii[u+58>>1]|0)==0:0)?((Bi[V+124>>2]|0)==(Bi[u+128>>2]|0)?(I=(Ii[V+172>>1]|0)-(Ii[u+192>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0<=3):0)?(n=(Ii[V+174>>1]|0)-(Ii[u+194>>1]|0)|0,n=((n|0)<0?0-n|0:n)>>>0>3&1):n=1:n=2,Bi[Ge>>2]=n,t)break;t=(o|a|r|n|0)!=0&1;break}Bi[Ge>>2]=4,Bi[$>>2]=4,Bi[ee>>2]=4,Bi[re>>2]=4,t=1}while(0);if(i>>>0<=5){do{if((s(i)|0)!=1){if(o=Bi[V>>2]|0,(o|0)==2){c=V+28|0,g=Ii[V+32>>1]|0,o=g<<16>>16?2:(Ii[c>>1]|0)!=0?2:0,Bi[he>>2]=o,w=Ii[V+34>>1]|0,S=w<<16>>16==0,i=S?(Ii[V+30>>1]|0)!=0?2:0:2,Bi[_e>>2]=i,d=Ii[V+40>>1]|0,E=d<<16>>16==0,a=E?(Ii[V+36>>1]|0)!=0?2:0:2,Bi[ce>>2]=a,p=Ii[V+42>>1]|0,k=p<<16>>16==0,a=k?(Ii[V+38>>1]|0)!=0?2:0:2,Bi[de>>2]=a,i=Ii[V+48>>1]|0,a=i<<16>>16?2:(Ii[V+44>>1]|0)!=0?2:0,Bi[ie>>2]=a,o=Ii[V+50>>1]|0,M=o<<16>>16==0,a=M?(Ii[V+46>>1]|0)!=0?2:0:2,Bi[ne>>2]=a,v=Ii[V+56>>1]|0,n=v<<16>>16==0,u=n?(Ii[V+52>>1]|0)!=0?2:0:2,Bi[oe>>2]=u,r=(Ii[V+58>>1]|0)==0,u=r?(Ii[V+54>>1]|0)!=0?2:0:2,Bi[te>>2]=u,_=Ii[V+44>>1]|0,l=Ii[V+166>>1]|0,f=Ii[V+142>>1]|0;do if((_|g)<<16>>16)u=2;else{if(I=(Ii[V+164>>1]|0)-(Ii[V+140>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0>3){u=1;break}if(I=l-f|0,((I|0)<0?0-I|0:I)>>>0>3){u=1;break}u=(Bi[V+124>>2]|0)!=(Bi[V+116>>2]|0)&1}while(0);Bi[le>>2]=u,h=Ii[V+46>>1]|0,l=Ii[V+170>>1]|0,f=Ii[V+146>>1]|0;do if((h|w)<<16>>16)l=2;else{if(I=(Ii[V+168>>1]|0)-(Ii[V+144>>1]|0)|0,((I|0)<0?0-I|0:I)>>>0>3){l=1;break}if(I=l-f|0,((I|0)<0?
\ No newline at end of file
-e=e+1|0,a=a+4|0}if(i=i+1|0,i&1&&(r=r+f|0,o=o+f|0),(i|0)==(d|0))break;u=u+(l<<2)|0}return n|0}function ii(e,r,t,o){e|=0,r|=0,t|=0,o|=0;var n=0,i=0,a=0,s=0,u=0;if(n=ia(r,e)|0,i=(e|0)/2|0,!((r|0)<=0))for(u=0-i|0,s=t+n|0,n=t+(((ia(i,r)|0)/2|0)+n)|0,a=0;;){i=s,s=0;do Bi[o>>2]=xi[t>>0]|0|((xi[n>>0]|0)<<8|(xi[i>>0]|0))<<8|-16777216,s=s+1|0,o=o+4|0,t=t+1|0,s&1||(i=i+1|0,n=n+1|0);while((s|0)<(e|0));if(a=a+1|0,a&1&&(i=i+u|0,n=n+u|0),!((a|0)<(r|0)))break;s=i}}function ai(e){e|=0,yi(e+1220|0)}function si(e){return e|=0,(se(e)|0)==0|0}function ui(e){e|=0;var r=0;return e=Bi[e+16>>2]|0,(((((e|0)!=0?(Bi[e+80>>2]|0)!=0:0)?(r=Bi[e+84>>2]|0,(r|0)!=0):0)?(Bi[r+24>>2]|0)!=0:0)?(Bi[r+32>>2]|0)!=0:0)?(r=1,r|0):(r=0,r|0)}function fi(e){e|=0;var r=0;return e=Bi[e+16>>2]|0,e=(((((e|0)!=0?(Bi[e+80>>2]|0)!=0:0)?(r=Bi[e+84>>2]|0,(r|0)!=0):0)?(Bi[r+24>>2]|0)!=0:0)?(Bi[r+36>>2]|0)!=0:0)?Bi[r+48>>2]|0:2,e|0}function li(e,r,t,o,n,i){return e|=0,r|=0,t|=0,o|=0,n|=0,i|=0,e=Bi[e+16>>2]|0,((e|0)!=0?(Bi[e+60>>2]|0)!=0:0)?(Bi[r>>2]=1,r=e+64|0,Bi[t>>2]=Bi[r>>2]<<1,Bi[o>>2]=(Bi[e+52>>2]<<4)-((Bi[e+68>>2]|0)+(Bi[r>>2]|0)<<1),o=e+72|0,Bi[n>>2]=Bi[o>>2]<<1,o=(Bi[e+56>>2]<<4)-((Bi[e+76>>2]|0)+(Bi[o>>2]|0)<<1)|0,void(Bi[i>>2]=o)):(Bi[r>>2]=0,Bi[t>>2]=0,Bi[o>>2]=0,Bi[n>>2]=0,o=0,void(Bi[i>>2]=o))}function di(e,r,t){e|=0,r|=0,t|=0;var o=0,n=0;e=Bi[e+16>>2]|0;e:do if((((e|0)!=0?(Bi[e+80>>2]|0)!=0:0)?(o=Bi[e+84>>2]|0,(o|0)!=0):0)?(Bi[o>>2]|0)!=0:0){e=Bi[o+4>>2]|0;do switch(e|0){case 4:o=11,e=16;break e;case 2:o=11,e=12;break e;case 12:o=33,e=64;break e;case 13:o=99,e=160;break e;case 3:o=11,e=10;break e;case 10:o=11,e=18;break e;case 7:o=11,e=20;break e;case 8:o=11,e=32;break e;case 5:o=33,e=40;break e;case 1:case 0:o=e;break e;case 6:o=11,e=24;break e;case 9:o=33,e=80;break e;case 11:o=11,e=15;break e;case 255:e=Bi[o+8>>2]|0,o=Bi[o+12>>2]|0,n=(e|0)==0|(o|0)==0,o=n?0:o,e=n?0:e;break e;default:o=0,e=0;break e}while(0)}else o=1,e=1;while(0);Bi[r>>2]=e,Bi[t>>2]=o}function ci(e){return e|=0,(e=Bi[e+16>>2]|0)?(e=Bi[e>>2]|0,e|0):(e=0,e|0)}function _i(){return Fe(3396)|0}function hi(e){e|=0,Oe(e)}function mi(e,r,t,o){e|=0,r|=0,t|=0,o|=0;var n=0,i=0,a=0,s=0,u=0,f=0,l=0,d=0,c=0,_=0;if(n=Bi[e+40>>2]|0){a=Bi[e>>2]|0,s=e+32|0,u=0;do((Bi[a+(u*40|0)+20>>2]|0)+-1|0)>>>0<2&&(i=Bi[a+(u*40|0)+12>>2]|0,i>>>0>t>>>0&&(i=i-(Bi[s>>2]|0)|0),Bi[a+(u*40|0)+8>>2]=i),u=u+1|0;while((u|0)!=(n|0))}if(!(Bi[r>>2]|0))return r=0,r|0;if(i=Bi[r+4>>2]|0,i>>>0>=3)return r=0,r|0;d=e+32|0,c=e+24|0,_=e+4|0,n=t,l=0;e:for(;;){r:do if(i>>>0<2){if(u=Bi[r+(l*12|0)+8>>2]|0,i?(f=u+n|0,i=Bi[d>>2]|0,i=f-((f|0)<(i|0)?0:i)|0):(i=n-u|0,(i|0)<0&&(i=(Bi[d>>2]|0)+i|0)),n=i>>>0>t>>>0?i-(Bi[d>>2]|0)|0:i,s=Bi[c>>2]|0,!s){n=1,i=37;break e}for(u=Bi[e>>2]|0,f=0;;){if(a=Bi[u+(f*40|0)+20>>2]|0,(a+-1|0)>>>0<2?(Bi[u+(f*40|0)+8>>2]|0)==(n|0):0){n=i;break r}if(f=f+1|0,f>>>0>=s>>>0){n=1,i=37;break e}}}else{if(s=Bi[r+(l*12|0)+12>>2]|0,a=Bi[c>>2]|0,!a){n=1,i=37;break e}for(u=Bi[e>>2]|0,i=0;;){if((Bi[u+(i*40|0)+20>>2]|0)==3?(Bi[u+(i*40|0)+8>>2]|0)==(s|0):0){a=3,f=i;break r}if(i=i+1|0,i>>>0>=a>>>0){n=1,i=37;break e}}}while(0);if(!((f|0)>-1&a>>>0>1)){n=1,i=37;break}if(l>>>0<o>>>0){u=o;do s=u,u=u+-1|0,a=Bi[_>>2]|0,Bi[a+(s<<2)>>2]=Bi[a+(u<<2)>>2];while(u>>>0>l>>>0);u=Bi[e>>2]|0}if(Bi[(Bi[_>>2]|0)+(l<<2)>>2]=u+(f*40|0),l=l+1|0,l>>>0<=o>>>0){i=l,u=l;do s=Bi[_>>2]|0,a=Bi[s+(i<<2)>>2]|0,(a|0)!=((Bi[e>>2]|0)+(f*40|0)|0)&&(Bi[s+(u<<2)>>2]=a,u=u+1|0),i=i+1|0;while(i>>>0<=o>>>0)}if(i=Bi[r+(l*12|0)+4>>2]|0,i>>>0>=3){n=0,i=37;break}}return(i|0)==37?n|0:0}function bi(e,r,t,o,n,i,a,s){e|=0,r|=0,t|=0,o|=0,n|=0,i|=0,a|=0,s|=0;var u=0,f=0,l=0,d=0,c=0,_=0,h=0,m=0,b=0,p=0,k=0,E=0,S=0,w=0,g=0,M=0,v=0,y=0,F=0,O=0,R=0,A=0,D=0,P=0,N=0,T=0,C=0,L=0;if(L=Vi,Vi=Vi+16|0,c=L,T=Bi[t>>2]|0,C=Bi[e+8>>2]|0,(T|0)!=(Bi[C>>2]|0))return e=Bi[Wi>>2]|0,Bi[c>>2]=2504,la(e|0,7592,c|0)|0,e=1,Vi=L,e|0;v=e+52|0,Bi[v>>2]=0,P=Bi[e+56>>2]|0,b=(P|0)==0,N=b&1;do if(r){if(i){l=e+20|0,Bi[l>>2]=0,f=e+16|0,Bi[f>>2]=0,d=Bi[e>>2]|0,u=e+44|0,m=0;do t=d+(m*40|0)+20|0,((Bi[t>>2]|0)!=0?(Bi[t>>2]=0,(Bi[d+(m*40|0)+24>>2]|0)==0):0)&&(Bi[u>>2]=(Bi[u>>2]|0)+-1),m=m+1|0;while((m|0)!=16);e:do if(b)for(o=Bi
\ No newline at end of file
-h=(k|0)<(h|0)?k:h),(b|0)>=(p|0)&&(b=(h|0)>(p|0)?h:p),k=E&65535,b&=65535}while(0);if(q=(k&65535)+(y&65535)|0,_=q&65535,b=(b&65535)+(v&65535)|0,h=b&65535,((q<<16>>16)+8192|0)>>>0>16383){a=1,q=212;break e}if(((b<<16>>16)+2048|0)>>>0>4095){a=1,q=212;break e}x?(x|0)==1?(q=(U<<1)+R|0,Ii[e+(q<<2)+132>>1]=_,Ii[e+(q<<2)+134>>1]=h,q|=1,Ii[e+(q<<2)+132>>1]=_,Ii[e+(q<<2)+134>>1]=h):(x|0)==2?(q=U+R|0,Ii[e+(q<<2)+132>>1]=_,Ii[e+(q<<2)+134>>1]=h,q=q+2|0,Ii[e+(q<<2)+132>>1]=_,Ii[e+(q<<2)+134>>1]=h):(x|0)==3&&(q=U+R|0,Ii[e+(q<<2)+132>>1]=_,Ii[e+(q<<2)+134>>1]=h):(Ii[A>>1]=_,Ii[D>>1]=h,Ii[P>>1]=_,Ii[N>>1]=h,Ii[T>>1]=_,Ii[C>>1]=h,Ii[I>>1]=_,Ii[B>>1]=h),U=U+1|0}while(U>>>0<F>>>0)}if(H=H+1|0,H>>>0>=4){q=201;break}}if((q|0)==201){l=0;do Bi[G>>2]=Bi[e+(l<<2)+116>>2],a=d(Bi[r+(l<<2)+176>>2]|0)|0,s=l<<3&8,f=l>>>0<2?0:8,a?(a|0)==1?(t=l<<2,L(i,e+(t<<2)+132|0,G,z,V,s,f,8,4),L(i,e+((t|2)<<2)+132|0,G,z,V,s,f|4,8,4)):(a|0)==2?(t=l<<2,L(i,e+(t<<2)+132|0,G,z,V,s,f,4,8),L(i,e+((t|1)<<2)+132|0,G,z,V,s|4,f,4,8)):(U=l<<2,L(i,e+(U<<2)+132|0,G,z,V,s,f,4,4),q=s|4,L(i,e+((U|1)<<2)+132|0,G,z,V,q,f,4,4),t=f|4,L(i,e+((U|2)<<2)+132|0,G,z,V,s,t,4,4),L(i,e+((U|3)<<2)+132|0,G,z,V,q,t,4,4)):L(i,e+(l<<2<<2)+132|0,G,z,V,s,f,8,8),l=l+1|0;while((l|0)!=4)}else if((q|0)==212)return Vi=W,a|0}while(0);return(Bi[e+196>>2]|0)>>>0>1?(G=0,Vi=W,G|0):Bi[e>>2]|0?(Ri(n,o,i,r+328|0),G=0,Vi=W,G|0):(Oi(n,i),G=0,Vi=W,G|0)}function Di(){return 4720}function Pi(e,r,t,n,i,s){e|=0,r|=0,t|=0,n|=0,i|=0,s|=0;var u=0,f=0,l=0;if(l=Vi,Vi=Vi+80|0,u=l+32|0,f=l,Ni(t,u,f,n),(a(Bi[e>>2]|0)|0)==1){if(n=Ti(e,s,r+328|0,u,f,i)|0)return e=n,Vi=l,e|0}else if(n=Ci(e,s,r,u,f,i)|0)return e=n,Vi=l,e|0;return(n=o(e,s+256|0,r+1352|0,u+21|0,f+16|0,Bi[r+140>>2]|0,i)|0)?(e=n,Vi=l,e|0):(Bi[e+196>>2]|0)>>>0>1?(e=0,Vi=l,e|0):(Oi(t,s),e=0,Vi=l,e|0)}function Ni(e,r,t,o){e|=0,r|=0,t|=0,o|=0;var n=0,i=0,a=0,s=0,u=0,f=0,l=0,d=0,c=0,_=0,h=0;o&&(_=Bi[e+4>>2]|0,h=ia(Bi[e+8>>2]|0,_)|0,l=(o>>>0)/(_>>>0)|0,n=ia(l,_)|0,d=o-n|0,s=_<<4,a=Bi[e>>2]|0,i=(d<<4)+(ia(_<<8,l)|0)|0,c=(l|0)!=0,c?(f=i-(s|1)|0,Li[r>>0]=Li[a+f>>0]|0,Li[r+1>>0]=Li[a+(f+1)>>0]|0,Li[r+2>>0]=Li[a+(f+2)>>0]|0,Li[r+3>>0]=Li[a+(f+3)>>0]|0,Li[r+4>>0]=Li[a+(f+4)>>0]|0,Li[r+5>>0]=Li[a+(f+5)>>0]|0,Li[r+6>>0]=Li[a+(f+6)>>0]|0,Li[r+7>>0]=Li[a+(f+7)>>0]|0,Li[r+8>>0]=Li[a+(f+8)>>0]|0,Li[r+9>>0]=Li[a+(f+9)>>0]|0,Li[r+10>>0]=Li[a+(f+10)>>0]|0,Li[r+11>>0]=Li[a+(f+11)>>0]|0,Li[r+12>>0]=Li[a+(f+12)>>0]|0,Li[r+13>>0]=Li[a+(f+13)>>0]|0,Li[r+14>>0]=Li[a+(f+14)>>0]|0,Li[r+15>>0]=Li[a+(f+15)>>0]|0,Li[r+16>>0]=Li[a+(f+16)>>0]|0,Li[r+17>>0]=Li[a+(f+17)>>0]|0,Li[r+18>>0]=Li[a+(f+18)>>0]|0,Li[r+19>>0]=Li[a+(f+19)>>0]|0,Li[r+20>>0]=Li[a+(f+20)>>0]|0,f=r+21|0):f=r,u=(n|0)!=(o|0),u&&(i=i+-1|0,Li[t>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+1>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+2>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+3>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+4>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+5>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+6>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+7>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+8>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+9>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+10>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+11>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+12>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+13>>0]=Li[a+i>>0]|0,i=i+s|0,Li[t+14>>0]=Li[a+i>>0]|0,Li[t+15>>0]=Li[a+(i+s)>>0]|0,t=t+16|0),r=_<<3&2147483640,n=Bi[e>>2]|0,o=(ia(l<<3,r)|0)+(h<<8)+(d<<3)|0,c&&(c=o-(r|1)|0,Li[f>>0]=Li[n+c>>0]|0,Li[f+1>>0]=Li[n+(c+1)>>0]|0,Li[f+2>>0]=Li[n+(c+2)>>0]|0,Li[f+3>>0]=Li[n+(c+3)>>0]|0,Li[f+4>>0]=Li[n+(c+4)>>0]|0,Li[f+5>>0]=Li[n+(c+5)>>0]|0,Li[f+6>>0]=Li[n+(c+6)>>0]|0,Li[f+7>>0]=Li[n+(c+7)>>0]|0,Li[f+8>>0]=Li[n+(c+8)>>0]|0,c=c+(h<<6)|0,Li[f+9>>0]=Li[n+c>>0]|0,Li[f+10>>0]=Li[n+(c+1)>>0]|0,Li[f+11>>0]=Li[n+(c+2)>>0]|0,Li[f+12>>0]=Li[n+(c+3)>>0]|0,Li[f+13>>0]=Li[n+(c+4)>>0]|0,Li[f+14>>0]=Li[n+(c+5)>>0]|0,Li[f+15>>0]=Li[n+(c+6)>>0]|0,Li[f+16>>0]=Li[n+(c+7)>>0]|0,Li[f+17>>0]=Li[n+(c+8)>>0]|0),u&&(c=o+-1|0,Li[t>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+1>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+2>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+3>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+4>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+5>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+6>>0]=Li[n+c>>0]|0,c=c+r|0,Li[t+7>>0]=Li[n+c>>0]|0,h=c+(r+(h-_<<6))|0,Li[t+8>>0]=Li[n+h>>0]|0,h=h+r|0,Li[t+9>>
\ No newline at end of file
-Runtime.stackAlloc=asm.stackAlloc,Runtime.stackSave=asm.stackSave,Runtime.stackRestore=asm.stackRestore,Runtime.setTempRet0=asm.setTempRet0,Runtime.getTempRet0=asm.getTempRet0;var i64Math=function(){function e(e,r,t){null!=e&&("number"==typeof e?this.fromNumber(e,r,t):null==r&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,r))}function r(){return new e(null)}function t(e,r,t,o,n,i){for(;--i>=0;){var a=r*this[e++]+t[o]+n;n=Math.floor(a/67108864),t[o++]=67108863&a}return n}function o(e,r,t,o,n,i){for(var a=32767&r,s=r>>15;--i>=0;){var u=32767&this[e],f=this[e++]>>15,l=s*u+f*a;u=a*u+((32767&l)<<15)+t[o]+(1073741823&n),n=(u>>>30)+(l>>>15)+s*f+(n>>>30),t[o++]=1073741823&u}return n}function n(e,r,t,o,n,i){for(var a=16383&r,s=r>>14;--i>=0;){var u=16383&this[e],f=this[e++]>>14,l=s*u+f*a;u=a*u+((16383&l)<<14)+t[o]+n,n=(u>>28)+(l>>14)+s*f,t[o++]=268435455&u}return n}function i(e){return ie.charAt(e)}function a(e,r){var t=ae[e.charCodeAt(r)];return null==t?-1:t}function s(e){for(var r=this.t-1;r>=0;--r)e[r]=this[r];e.t=this.t,e.s=this.s}function u(e){this.t=1,this.s=0>e?-1:0,e>0?this[0]=e:-1>e?this[0]=e+DV:this.t=0}function f(e){var t=r();return t.fromInt(e),t}function l(r,t){var o;if(16==t)o=4;else if(8==t)o=3;else if(256==t)o=8;else if(2==t)o=1;else if(32==t)o=5;else{if(4!=t)return void this.fromRadix(r,t);o=2}this.t=0,this.s=0;for(var n=r.length,i=!1,s=0;--n>=0;){var u=8==o?255&r[n]:a(r,n);0>u?"-"==r.charAt(n)&&(i=!0):(i=!1,0==s?this[this.t++]=u:s+o>this.DB?(this[this.t-1]|=(u&(1<<this.DB-s)-1)<<s,this[this.t++]=u>>this.DB-s):this[this.t-1]|=u<<s,s+=o,s>=this.DB&&(s-=this.DB))}8==o&&0!=(128&r[0])&&(this.s=-1,s>0&&(this[this.t-1]|=(1<<this.DB-s)-1<<s)),this.clamp(),i&&e.ZERO.subTo(this,this)}function d(){for(var e=this.s&this.DM;this.t>0&&this[this.t-1]==e;)--this.t}function c(e){if(this.s<0)return"-"+this.negate().toString(e);var r;if(16==e)r=4;else if(8==e)r=3;else if(2==e)r=1;else if(32==e)r=5;else{if(4!=e)return this.toRadix(e);r=2}var t,o=(1<<r)-1,n=!1,a="",s=this.t,u=this.DB-s*this.DB%r;if(s-->0)for(u<this.DB&&(t=this[s]>>u)>0&&(n=!0,a=i(t));s>=0;)r>u?(t=(this[s]&(1<<u)-1)<<r-u,t|=this[--s]>>(u+=this.DB-r)):(t=this[s]>>(u-=r)&o,0>=u&&(u+=this.DB,--s)),t>0&&(n=!0),n&&(a+=i(t));return n?a:"0"}function _(){var t=r();return e.ZERO.subTo(this,t),t}function h(){return this.s<0?this.negate():this}function m(e){var r=this.s-e.s;if(0!=r)return r;var t=this.t;if(r=t-e.t,0!=r)return this.s<0?-r:r;for(;--t>=0;)if(0!=(r=this[t]-e[t]))return r;return 0}function b(e){var r,t=1;return 0!=(r=e>>>16)&&(e=r,t+=16),0!=(r=e>>8)&&(e=r,t+=8),0!=(r=e>>4)&&(e=r,t+=4),0!=(r=e>>2)&&(e=r,t+=2),0!=(r=e>>1)&&(e=r,t+=1),t}function p(){return this.t<=0?0:this.DB*(this.t-1)+b(this[this.t-1]^this.s&this.DM)}function k(e,r){var t;for(t=this.t-1;t>=0;--t)r[t+e]=this[t];for(t=e-1;t>=0;--t)r[t]=0;r.t=this.t+e,r.s=this.s}function E(e,r){for(var t=e;t<this.t;++t)r[t-e]=this[t];r.t=Math.max(this.t-e,0),r.s=this.s}function S(e,r){var t,o=e%this.DB,n=this.DB-o,i=(1<<n)-1,a=Math.floor(e/this.DB),s=this.s<<o&this.DM;for(t=this.t-1;t>=0;--t)r[t+a+1]=this[t]>>n|s,s=(this[t]&i)<<o;for(t=a-1;t>=0;--t)r[t]=0;r[a]=s,r.t=this.t+a+1,r.s=this.s,r.clamp()}function w(e,r){r.s=this.s;var t=Math.floor(e/this.DB);if(t>=this.t)return void(r.t=0);var o=e%this.DB,n=this.DB-o,i=(1<<o)-1;r[0]=this[t]>>o;for(var a=t+1;a<this.t;++a)r[a-t-1]|=(this[a]&i)<<n,r[a-t]=this[a]>>o;o>0&&(r[this.t-t-1]|=(this.s&i)<<n),r.t=this.t-t,r.clamp()}function g(e,r){for(var t=0,o=0,n=Math.min(e.t,this.t);n>t;)o+=this[t]-e[t],r[t++]=o&this.DM,o>>=this.DB;if(e.t<this.t){for(o-=e.s;t<this.t;)o+=this[t],r[t++]=o&this.DM,o>>=this.DB;o+=this.s}else{for(o+=this.s;t<e.t;)o-=e[t],r[t++]=o&this.DM,o>>=this.DB;o-=e.s}r.s=0>o?-1:0,-1>o?r[t++]=this.DV+o:o>0&&(r[t++]=o),r.t=t,r.clamp()}function M(r,t){var o=this.abs(),n=r.abs(),i=o.t;for(t.t=i+n.t;--i>=0;)t[i]=0;for(i=0;i<n.t;++i)t[i+o.t]=o.am(0,n[i],t,i,0,o.t);t.s=0,t.clamp(),this.s!=r.s&&e.ZERO.subTo(t,t)}function v(e){for(var r=this.abs(),t=e.t=2*r.t;--t>=0;)e[t]=0;for(t=0;t<r.t-1;++t){var o=r.am(t,r[t],e,2*t,0,1);(e[t+r.t]+=r.am(t+1,2*r[t],e,2*t+1,o,r.t
\ No newline at end of file
+var key,Module=void 0!==Module?Module:{},moduleOverrides={};for(key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);Module.arguments=[],Module.thisProgram="./this.program",Module.quit=function(A,e){throw e},Module.preRun=[];var ENVIRONMENT_IS_WEB=!(Module.postRun=[]),ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&"function"==typeof require&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var nodeFS,nodePath,scriptDirectory="";function locateFile(A){return Module.locateFile?Module.locateFile(A,scriptDirectory):scriptDirectory+A}ENVIRONMENT_IS_NODE?(scriptDirectory=__dirname+"/",Module.read=function(A,e){var r;return(r=tryParseAsDataURI(A))||(nodeFS||(nodeFS=require("fs")),nodePath||(nodePath=require("path")),A=nodePath.normalize(A),r=nodeFS.readFileSync(A)),e?r:r.toString()},Module.readBinary=function(A){var e=Module.read(A,!0);return e.buffer||(e=new Uint8Array(e)),assert(e.buffer),e},1<process.argv.length&&(Module.thisProgram=process.argv[1].replace(/\\/g,"/")),Module.arguments=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",function(A){if(!(A instanceof ExitStatus))throw A}),process.on("unhandledRejection",abort),Module.quit=function(A){process.exit(A)},Module.inspect=function(){return"[Emscripten Module object]"}):ENVIRONMENT_IS_SHELL?("undefined"!=typeof read&&(Module.read=function(A){var e=tryParseAsDataURI(A);return e?intArrayToString(e):read(A)}),Module.readBinary=function(A){var e;return(e=tryParseAsDataURI(A))?e:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(assert("object"==typeof(e=read(A,"binary"))),e)},"undefined"!=typeof scriptArgs?Module.arguments=scriptArgs:"undefined"!=typeof arguments&&(Module.arguments=arguments),"function"==typeof quit&&(Module.quit=function(A){quit(A)})):(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&(ENVIRONMENT_IS_WORKER?scriptDirectory=self.location.href:document.currentScript&&(scriptDirectory=document.currentScript.src),scriptDirectory=0!==scriptDirectory.indexOf("blob:")?scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1):"",Module.read=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.send(null),A.responseText}catch(A){var r=tryParseAsDataURI(e);if(r)return intArrayToString(r);throw A}},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){try{var A=new XMLHttpRequest;return A.open("GET",e,!1),A.responseType="arraybuffer",A.send(null),new Uint8Array(A.response)}catch(A){var r=tryParseAsDataURI(e);if(r)return r;throw A}}),Module.readAsync=function(e,r,i){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=function(){if(200==n.status||0==n.status&&n.response)r(n.response);else{var A=tryParseAsDataURI(e);A?r(A.buffer):i()}},n.onerror=i,n.send(null)},Module.setWindowTitle=function(A){document.title=A});var out=Module.print||("undefined"!=typeof console?console.log.bind(console):"undefined"!=typeof print?print:null),err=Module.printErr||("undefined"!=typeof printErr?printErr:"undefined"!=typeof console&&console.warn.bind(console)||out);for(key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var STACK_ALIGN=16;function dynamicAlloc(A){var e=HEAP32[DYNAMICTOP_PTR>>2],r=e+A+15&-16;return r<=_emscripten_get_heap_size()?(HEAP32[DYNAMICTOP_PTR>>2]=r,e):0}function getNativeTypeSize(A){switch(A){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===A[A.length-1])return 4;if("i"!==A[0])return 0;var e=parseInt(A.substr(1));return assert(e%8==0,"getNativeTypeSize invalid bits "+e+", type "+A),e/8}}function warnOnce(A){warnOnce.shown||(warnOnce.shown={}),warnOnce.shown[A]||(warnOnce.shown[A]=1,err(A))}var jsCallStartIndex=1,functionPointers=ne
\ No newline at end of file
--- a/js/test.html
+++ b/js/test.html
@@ -95,7 +95,7 @@
                     [copy.buffer]);
                 setInterval(updateFpsCount, 1000);
 
-                console.log('Starting encode loop');                
+                console.log('Starting decode loop');
             };
 
             // Read in the image file as a data URL.
--- /dev/null
+++ b/js/test_node.js
@@ -1,0 +1,53 @@
+const H264bsdAsm = require('./h264bsd_asm');
+const H264bsdDecoder = require('./h264bsd_decoder');
+const fs = require('fs');
+
+fs.readFile('../test/test_1920x1080.h264', (err, data) => {
+    if (err) throw err;
+
+    var decoder = new H264bsdDecoder(H264bsdAsm);
+    decoder.onPictureReady = onPictureReady;
+    decoder.onHeadersReady = onHeadersReady;
+    decoder.queueInput(data);
+    
+    var pictureCount = 0;
+
+    function onPictureReady() {
+        var output = decoder.nextOutputPicture();
+    
+        ++pictureCount;
+    }
+    
+    function onHeadersReady() {
+        var width = decoder.outputPictureWidth();
+        var height = decoder.outputPictureHeight();
+        var croppingParams = decoder.croppingParams();
+    
+        console.log("Headers parsed", {
+          'width' : width,
+          'height' : height,
+          'croppingParams' : croppingParams,
+        });
+    }
+
+    var result = H264bsdDecoder.RDY;
+    var start = process.hrtime();
+
+    while(result != H264bsdDecoder.NO_INPUT) {
+        result = decoder.decode();
+
+        switch(result) {
+            case H264bsdDecoder.ERROR:
+                throw new Error('Decoder Error');
+            case H264bsdDecoder.PARAM_SET_ERROR:
+                throw new Error('Parameter Set Error');
+            case H264bsdDecoder.MEMALLOC_ERROR:
+                throw new Error('MemAlloc Error');
+        }
+    }
+
+    var end = process.hrtime();
+    var totalSeconds = (end[0] + end[1] / 1e9) - (start[0] + start[1] / 1e9);
+    var fps = pictureCount / totalSeconds
+    console.log("Decoded %d frames in %s seconds (%s fps)", pictureCount, totalSeconds.toFixed(2), fps.toFixed(2));
+});
--- a/test/Rakefile
+++ b/test/Rakefile
@@ -38,6 +38,7 @@
   sh "ffmpeg -y -start_number 5208 -i raw/1920x1080/big_buck_bunny_%05d.png -pix_fmt yuv420p -c:v libx264 -x264-params keyint=40 -profile:v baseline -f rawvideo test_1920x1080.h264"
 end
 
+desc "Generate encoded test h264 files."
 task :generate_test_data => ["test_640x360.h264", "test_1920x1080.h264"]
 
 
@@ -45,6 +46,7 @@
   sh "ffmpeg -y -i #{t.source} -c:v rawvideo -pix_fmt yuv420p #{t.name}"
 end
 
+desc "Generate decoded yuv test data using ffmpeg. This data is used when comparing decoded output with a known-good sample."
 task :generate_output_data => ["test_640x360.yuv", "test_1920x1080.yuv"]
 
 task :clean do
--- a/wasm/README.md
+++ b/wasm/README.md
@@ -4,7 +4,7 @@
 
 Here's an example of how to use it:
 ```
-var decoder = new H264bsdDecoder();
+var decoder = new H264bsdDecoder(Module);
 var display = new H264bsdCanvas(myCanvasElement);
 
 // Render output to the canvas when a new picture is ready
@@ -26,9 +26,12 @@
 decoder.queueInput(myUint8Array);
 
 // Pump the decode loop
+// Note the recursive call with a setTimeout that gives the browser a chance to refresh the page or process incoming messages.
 var status = H264bsdDecoder.RDY;
-while(status != H264bsdDecoder.NO_INPUT) {
+function decodeLoop() {
+    if (status == H264bsdDecoder.NO_INPUT) return;
     status = decoder.decode();
+    setTimeout(decodeLoop, 0);
 }
 ```
 
--- a/wasm/Rakefile
+++ b/wasm/Rakefile
@@ -29,13 +29,13 @@
 
 EXPORT_FLAGS = "-s EXTRA_EXPORTED_RUNTIME_METHODS='#{JSON.generate(exported_runtime_methods)}' -s EXPORTED_FUNCTIONS='#{JSON.generate(exported_functions)}'"
 
-file "h264bsd_asm.js" => c_files do
-	sh "emcc #{c_files.join(' ')} #{EMCC_FLAGS} #{EXPORT_FLAGS} -o h264bsd_asm.js"
+file "h264bsd_wasm.js" => c_files do
+	sh "emcc #{c_files.join(' ')} #{EMCC_FLAGS} #{EXPORT_FLAGS} -o h264bsd_wasm.js"
 end
 
 task :clean do
-	FileUtils.rm_f("h264bsd_asm.js")
-	FileUtils.rm_f("h264bsd_asm.wasm")
+	FileUtils.rm_f("h264bsd_wasm.js")
+	FileUtils.rm_f("h264bsd_wasm.wasm")
 end
 
 desc "Check for prereq tools"
@@ -49,4 +49,4 @@
 	WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd).start
 end
 
-task :default => [:setup, 'h264bsd_asm.js']
+task :default => [:setup, 'h264bsd_wasm.js']
--- a/wasm/h264bsd_asm.js
+++ /dev/null
@@ -1,4 +1,0 @@
-var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=console.log;if(!Module["printErr"])Module["printErr"]=console.warn;var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}else{Module["read"]=function shell_read(){throw"no read() available"}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function shell_print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function shell_printErr(x){console.warn(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw new Error("Unknown runtime environment. Where are we?")}if(!Module["print"]){Module["print"]=(function(){})}if(!Module[
\ No newline at end of file
-
-
-
binary files a/wasm/h264bsd_asm.wasm /dev/null differ
--- a/wasm/h264bsd_decoder.js
+++ b/wasm/h264bsd_decoder.js
@@ -33,8 +33,6 @@
  * When you're done decoding, make sure to call release() to clean up internal buffers.
  */
 
-window = this;
-
 function H264bsdDecoder(module) {
     this.module = module;
     this.released = false;
@@ -329,3 +327,7 @@
         'left': leftOffset
     };
 };
+
+if (typeof module !== "undefined") {
+    module.exports = H264bsdDecoder;
+}
--- /dev/null
+++ b/wasm/h264bsd_wasm.js
@@ -1,0 +1,4 @@
+var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",abort);Module["quit"]=(function(status){process["exit"](status)});Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=(function(title){document.title=title})}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var asm2wasmImports={"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})};var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"
\ No newline at end of file
+
+
+
binary files /dev/null b/wasm/h264bsd_wasm.wasm differ
--- a/wasm/h264bsd_worker.js
+++ b/wasm/h264bsd_worker.js
@@ -1,3 +1,6 @@
+var noInput = true;
+var decoder = null;
+
 var Module = {
   onRuntimeInitialized: function() {
     decoder = new H264bsdDecoder(Module);
@@ -7,11 +10,6 @@
   }
 };
 
-importScripts('h264bsd_decoder.js', 'h264bsd_asm.js')
-
-var noInput = true;
-var decoder = null;
-
 function onMessage(e) {
     var message = e.data;
     switch(message.type) {
@@ -76,3 +74,4 @@
 }
 
 addEventListener('message', onMessage);
+importScripts('h264bsd_decoder.js', 'h264bsd_wasm.js')
--- /dev/null
+++ b/wasm/test_node.js
@@ -1,0 +1,57 @@
+async function main() {
+    const H264bsdWasm = require('./h264bsd_wasm');
+    const H264bsdDecoder = require('./h264bsd_decoder');
+
+    // Load input data
+    const util = require('util');
+    const fs = require('fs');
+    const readFile = util.promisify(fs.readFile);
+    const data = await readFile('../test/test_1920x1080.h264');
+
+    // Create a decoder instance
+    var decoder = new H264bsdDecoder(H264bsdWasm);
+    decoder.onPictureReady = onPictureReady;
+    decoder.onHeadersReady = onHeadersReady;
+    decoder.queueInput(data);
+
+    var pictureCount = 0;
+
+    function onPictureReady() {
+        ++pictureCount;
+    }
+
+    function onHeadersReady() {
+        var width = decoder.outputPictureWidth();
+        var height = decoder.outputPictureHeight();
+        var croppingParams = decoder.croppingParams();
+    
+        console.log("Headers parsed", {
+            'width' : width,
+            'height' : height,
+            'croppingParams' : croppingParams,
+        });
+    }
+
+    var result = H264bsdDecoder.RDY;
+    var start = process.hrtime();
+
+    while(result != H264bsdDecoder.NO_INPUT) {
+        result = decoder.decode();
+
+        switch(result) {
+            case H264bsdDecoder.ERROR:
+                throw new Error('Decoder Error');
+            case H264bsdDecoder.PARAM_SET_ERROR:
+                throw new Error('Parameter Set Error');
+            case H264bsdDecoder.MEMALLOC_ERROR:
+                throw new Error('MemAlloc Error');
+        }
+    }
+
+    var end = process.hrtime();
+    var totalSeconds = (end[0] + end[1] / 1e9) - (start[0] + start[1] / 1e9);
+    var fps = pictureCount / totalSeconds
+    console.log("Decoded %d frames in %s seconds (%s fps)", pictureCount, totalSeconds.toFixed(2), fps.toFixed(2));
+}
+
+main();