2026-03-16 14:01:27 +08:00
var Module = typeof Module != "undefined" ? Module : { } ; if ( typeof Object . assign == "undefined" ) Object . assign = function ( target , source ) { for ( var i = 1 ; i < arguments . length ; i ++ ) { var source = arguments [ i ] ; if ( ! source ) continue ; for ( var key in source ) if ( source . hasOwnProperty ( key ) ) target [ key ] = source [ key ] } return target } ; var moduleOverrides = Object . assign ( { } , Module ) ; var arguments _ = [ ] ; var thisProgram = "./this.program" ; var quit _ = function ( status , toThrow ) { throw toThrow ; } ; var ENVIRONMENT _IS _WEB = typeof window == "object" ;
var ENVIRONMENT _IS _WORKER = typeof importScripts == "function" ; var ENVIRONMENT _IS _NODE = typeof process == "object" && typeof process . versions == "object" && typeof process . versions . node == "string" ; var scriptDirectory = "" ; function locateFile ( path ) { if ( Module [ "locateFile" ] ) return Module [ "locateFile" ] ( path , scriptDirectory ) ; return scriptDirectory + path } var read _ , readAsync , readBinary , setWindowTitle ;
if ( ENVIRONMENT _IS _WEB || ENVIRONMENT _IS _WORKER ) { if ( ENVIRONMENT _IS _WORKER ) scriptDirectory = self . location . href ; else if ( typeof document != "undefined" && document . currentScript ) scriptDirectory = document . currentScript . src ; if ( scriptDirectory . indexOf ( "blob:" ) !== 0 ) scriptDirectory = scriptDirectory . substr ( 0 , scriptDirectory . replace ( /[?#].*/ , "" ) . lastIndexOf ( "/" ) + 1 ) ; else scriptDirectory = "" ; { read _ = function ( url ) { try { var xhr = new XMLHttpRequest ; xhr . open ( "GET" , url , false ) ; xhr . send ( null ) ; return xhr . responseText } catch ( err$0 ) { var data =
tryParseAsDataURI ( url ) ; if ( data ) return intArrayToString ( data ) ; throw err$0 ; } } ; if ( ENVIRONMENT _IS _WORKER ) readBinary = function ( url ) { try { var xhr = new XMLHttpRequest ; xhr . open ( "GET" , url , false ) ; xhr . responseType = "arraybuffer" ; xhr . send ( null ) ; return new Uint8Array ( xhr . response ) } catch ( err$1 ) { var data = tryParseAsDataURI ( url ) ; if ( data ) return data ; throw err$1 ; } } ; readAsync = function ( url , onload , onerror ) { var xhr = new XMLHttpRequest ; xhr . open ( "GET" , url , true ) ; xhr . responseType = "arraybuffer" ; xhr . onload = function ( ) { 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 ) } } setWindowTitle = function ( title ) { return document . title = title } } else ; var out = Module [ "print" ] || console . log . bind ( console ) ; var err = Module [ "printErr" ] || console . error . bind ( console ) ; Object . assign ( Module , moduleOverrides ) ; moduleOverrides = null ; if ( Module [ "arguments" ] ) arguments _ = Module [ "arguments" ] ; if ( Module [ "thisProgram" ] ) thisProgram = Module [ "thisProgram" ] ;
if ( Module [ "quit" ] ) quit _ = Module [ "quit" ] ; var wasmBinary ; if ( Module [ "wasmBinary" ] ) wasmBinary = Module [ "wasmBinary" ] ; var noExitRuntime = Module [ "noExitRuntime" ] || true ; if ( typeof WebAssembly != "object" ) abort ( "no native wasm support detected" ) ; var wasmMemory ; var ABORT = false ; var EXITSTATUS ; function assert ( condition , text ) { if ( ! condition ) abort ( text ) } var HEAP8 , HEAPU8 , HEAP16 , HEAPU16 , HEAP32 , HEAPU32 , HEAPF32 , HEAPF64 ;
function updateMemoryViews ( ) { var b = wasmMemory . buffer ; Module [ "HEAP8" ] = HEAP8 = new Int8Array ( b ) ; Module [ "HEAP16" ] = HEAP16 = new Int16Array ( b ) ; Module [ "HEAP32" ] = HEAP32 = new Int32Array ( b ) ; Module [ "HEAPU8" ] = HEAPU8 = new Uint8Array ( b ) ; Module [ "HEAPU16" ] = HEAPU16 = new Uint16Array ( b ) ; Module [ "HEAPU32" ] = HEAPU32 = new Uint32Array ( b ) ; Module [ "HEAPF32" ] = HEAPF32 = new Float32Array ( b ) ; Module [ "HEAPF64" ] = HEAPF64 = new Float64Array ( b ) } var wasmTable ; var _ _ATPRERUN _ _ = [ ] ; var _ _ATINIT _ _ = [ ] ; var _ _ATPOSTRUN _ _ = [ ] ; var runtimeInitialized = false ;
var runtimeKeepaliveCounter = 0 ; 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 initRuntime ( ) { runtimeInitialized = true ; if ( ! Module [ "noFSInit" ] && ! FS . init . initialized ) FS . init ( ) ; FS . ignorePermissions = false ; TTY . init ( ) ; callRuntimeCallbacks ( _ _ATINIT _ _ ) }
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 ) } function addOnInit ( cb ) { _ _ATINIT _ _ . unshift ( cb ) } function addOnPostRun ( cb ) { _ _ATPOSTRUN _ _ . unshift ( cb ) }
if ( ! Math . imul || Math . imul ( 4294967295 , 5 ) !== - 5 ) Math . imul = function ( 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 } ; if ( ! Math . fround ) { var froundBuffer = new Float32Array ( 1 ) ; Math . fround = function ( x ) { froundBuffer [ 0 ] = x ; return froundBuffer [ 0 ] } } if ( ! Math . trunc ) Math . trunc = function ( x ) { return x < 0 ? Math . ceil ( x ) : Math . floor ( x ) } ; var runDependencies = 0 ; var runDependencyWatcher = null ; var dependenciesFulfilled = null ; function getUniqueRunDependency ( id ) { return id }
function addRunDependency ( id ) { runDependencies ++ ; if ( Module [ "monitorRunDependencies" ] ) Module [ "monitorRunDependencies" ] ( runDependencies ) } 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 ( ) } } }
function abort ( what ) { if ( Module [ "onAbort" ] ) Module [ "onAbort" ] ( what ) ; what = "Aborted(" + what + ")" ; err ( what ) ; ABORT = true ; EXITSTATUS = 1 ; what += ". Build with -sASSERTIONS for more info." ; var e = new WebAssembly . RuntimeError ( what ) ; throw e ; } var dataURIPrefix = "data:application/octet-stream;base64," ; function isDataURI ( filename ) { return filename . startsWith ( dataURIPrefix ) } var wasmBinaryFile ; wasmBinaryFile = " data : application / octet - stream ; base64 , AGFzbQEAAAAB8wIpYAJ / fwF / YAF / AX9gA39 / fwF / YAV / f39 / fwBgBH9 / f38AYAJ / fwBgA39 / fwBgAX8AYAR / f39 / AX9gBn9 / f39 / fwBgCn9 / f39 / f39 / f38AYAd / f39 / f39 / AX9gCH9 / f39 / f39 / AGALf39 / f39 / f39 / f38AYAd / f39 / f39 / AGAFf39 / f38Bf2ANf39 / f39 / f39 / f39 / fwBgCX9 / f39 / f39 / fwBgBn9 / f39 / fwF / YAABf2AIf39 / f39 / f38Bf2ADf35 / AX5gDH9 / f39 / f39 / f39 / fwBgAABgA39 + fwF / YAt / f39 / f39 / f39 / fwF / YAl / f39 / f39 / f38Bf2AAAXxgBn98f39 / fwF / YAp / f39 / f39 / f39 / AX9gAnx / AXxgAn5 / AX9gAn9 / AXxgAX8BfmAEf39 + fwBgAX8BfGAAAX5gDH9 / f39 / f39 / f39 / fwF / YAF8AX9gDX9 / f39 / f39 / f39 / f38Bf2AOf39 / f39 / f39 / f39 / f38BfwK3BBYDZW52FWVtc2NyaXB0ZW5fbWVtY3B5X2JpZwAGA2VudhZlbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwAAEWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF93cml0ZQAIA2VudhJlbXNjcmlwdGVuX2dldF9ub3cAGwNlbnYFYWJvcnQAFwNlbnYQX19zeXNjYWxsX29wZW5hdAAIA2VudhFfX3N5c2NhbGxfZmNudGw2NAACA2Vudg9fX3N5c2NhbGxfaW9jdGwAAhZ3YXNpX3NuYXBzaG90X3ByZXZpZXcxB2ZkX3JlYWQACBZ3YXNpX3NuYXBzaG90X3ByZXZpZXcxCGZkX2Nsb3NlAAEDZW52C19fY3hhX3Rocm93AAYDZW52E2Vtc2NyaXB0ZW5fZGF0ZV9ub3cAGwNlbnYgX2Vtc2NyaXB0ZW5fZ2V0X25vd19pc19tb25vdG9uaWMAEwNlbnYJX3R6c2V0X2pzAAYDZW52DV9sb2NhbHRpbWVfanMABQNlbnYNX19hc3NlcnRfZmFpbAAEA2VudhhlbXNjcmlwdGVuX2FzbV9jb25zdF9pbnQAAgNlbnYQUnVuVGltZUluZm9DQkZ1bgAGA2VudhdQb3N0TXBTdHJlYW1PZmZzZXRDQkZ1bgAGA2Vudg9TdHJlYW1JbmZvQ0JGdW4ABgNlbnYRYWRkaXRpb25EYXRhQ0JGdW4ABhZ3YXNpX3NuYXBzaG90X3ByZXZpZXcxB2ZkX3NlZWsADwO4DLYMFwICAhMBAQcTBQYABwECARUHAQABAhcHAQABBwIGBQcGFwEHAgIBAgAGBAQEBgMDCQkBAQcIBQUFAQcBAB4GEgYBBh8DHAUBBwIBAAIBAAICAAAIAgICAggBAQcHAAAABQUBAAIPBQEHBwgAAAEHAAgAAAABCAAAAgEGAQcACAEAAAAAAQAFAg8AAAICAgESBQABAAgAAgAIAgAICAAIEgcHCAIACQEBAgIBAAAGBgcECCAEEgIBAAEHBwAIAQEBAgEAAggBAAEACAIAAQcHAAgBAQIAAgAAAAEACAECBQICAgABBwcACAEAAQABAAIAAAEACAIAFQIBARgCAiEBAQEAGBgAAQgBAgIGDw8ICAAICA8PIgAAAAAHAQcACAACAAEAAAABAgEHAAgBAAEAAAcBBwAIAAEAAQcGAgIAAQcACAAAAQABBwgBAAEAAiMAAQcIBgABABMBBwAIAAABAAcHAQEAAgAAAAgFBwAFAAABBQcFBQgIAgEAAAIAAQEGCAEBCAAAAQICAAICAAgAAQIICAEHBwAAAgcFBQEICBIFDgQCCgIKChERAgYSAAEBAAUBAQEGAAUAAQEBBAgCDgICBwgJAwkGAAIGCAEIAgIAAAACCBILAQsGCAEIAgIAAAACCBIBAAgBCBICAgAAAAIJAAoKCgoFBQkJCQkOAgkFAgQDAwYMBAQEAAUDCQkOAAYIBgQSAAsMAg8PERQMDAgJAgAEDg4ODgQEBAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw4OBAMDAwMDAwMDAwMDAwMDAwMDAw4OAwQEBBQGFBQUAwsLCwsLDQ0EBAQEBA0NBAQEDQ0EBAQEDQ0EBAQNDQQEBA0NDQ0NEAwQDBAMEAwQDBAJEBAQEAMDAwMDDg4ODg4JCQkJCRERERERCRISEhISEhISEhINDQQNDQQNDQQNDQ0EDRAMEAwQDBAQDA0NDQ0NEBAQEBADAwMDAw4ODg4OCQkJCQkREREREQkREQoKCgUFBQUEBAMEBAMMBgYDAxERCgwMBAMEAwQDDBERCgQDBAMMDAkJCQkJDgEHByQPAAIHBwEHAg8DAggAAAABAQEHAwcEBQAAAgEBAQABAAABAAABAwASDwgAAgAABgMJDgkRBQAGFAsEJRICCAAGBAMJBgMEAwkOBAYICQ0PCAgDDxIFEggCCw4GDhQPEgkCBAYCBwUPCAICAhEDAAIEDAwMDAoMDAwMDAwMDAwMEQMLERAQGQACBQ8PBRIRDwYBAgkPBAcACQMDAwMODg4OCQUMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEREREQUFBgYGBgYGCQkGBgYGBgYJBgYJBgYGBgYGBgkJCQkGBgYGBQUmBgYEBAwMDAwMFhYMDAwMDBYWBQELBwcBBwIPAwIIABQGBgYAAQEDAAESCQoEBAQDAwMOBAMDAwMEBwkEDgcDBAQJCQoEAwMHBA8CAQcPCA8CDwECBwgAAQ8PDw8PDwIAAQ8PDw8PAAASAgIACAEFAAEPAAAHBgkJCQIBBwIPCAEHAAICCAUFAQEHAQEABQAFBQEHBwcABQAGBQMPAQYGBwIFBw8HBwEHBgUIAgABAAIBCAEAAAAAAAICAQEAAQAAAAAIAAEAAAIABgEBBAQDAw8EBgQGAAQAAgAABAEAAQEBAQ8OBgYOBgkGAAYWBQMECxEEDCcZHQkHBQMPDwsBBwEGGigRAQsBBwACAQAAAAEAAAABAAIAAAAOAwEHAAIJAQcAAgUAAQUAAgQEBAEGBQYAAQcAAgYAAAUCBwgEBAYGDwUIBAUGAQcAAgEHAAIEAAEGBgYAAAAFBwcMBwcDCAUEBQAAAAAAAAAFAgwBBgABAgcCAhIBHQgABwAAAQcAAgAZBggAAAEHAAIBBwACAQcPCAABAQYAAQkBAAMDAQUPAQcIAAIBAAICAggBBwcAAAAFBQYGCAUBBQcGBgYJBAYEAgIGAAcBAQECAAEAAAcAAgABAQAAAAIACwgABQcFBQUFBwQEBAQEBwEHAAEIAQgIABMTEwECAAABARMAAQEAAgAACAIAFAEAExMBAQgaGgACAQIBAggAAggBAQAAExMTBwEPBAcBcAHxBvEGBQYBAYAQgCAGDQJ / AUHAqhoLfwFBAAsH7Ac5Bm1lbW9yeQIAEV9fd2FzbV9jYWxsX2N0b3JzABYMR2V0RnJhbWVJbmZvAJoMDkdldFJhd0RhdGFJbmZvAJsMB0dldFBvcnQAnAwIRnJlZVBvcnQAnQwNU2V0RGVtdXhNb2RlbACeDA1Ta2lwRXJyb3JEYXRhAJ8MDFNldERlY29kZUVSQwCgDARQbGF5AKEMCVBsYXlTb3VuZACiDAlTdG9wU291bmQAow
function getBinary ( file ) { try { if ( file == wasmBinaryFile && wasmBinary ) return new Uint8Array ( wasmBinary ) ; var binary = tryParseAsDataURI ( file ) ; if ( binary ) return binary ; if ( readBinary ) return readBinary ( file ) ; throw "both async and sync fetching of the wasm failed" ; } catch ( err$2 ) { abort ( err$2 ) } }
function getBinaryPromise ( binaryFile ) { if ( ! wasmBinary && ( ENVIRONMENT _IS _WEB || ENVIRONMENT _IS _WORKER ) ) if ( typeof fetch == "function" ) return fetch ( binaryFile , { credentials : "same-origin" } ) . then ( function ( response ) { if ( ! response [ "ok" ] ) throw "failed to load wasm binary file at '" + binaryFile + "'" ; return response [ "arrayBuffer" ] ( ) } ) . catch ( function ( ) { return getBinary ( binaryFile ) } ) ; return Promise . resolve ( ) . then ( function ( ) { return getBinary ( binaryFile ) } ) }
function instantiateArrayBuffer ( binaryFile , imports , receiver ) { return getBinaryPromise ( binaryFile ) . then ( function ( binary ) { return WebAssembly . instantiate ( binary , imports ) } ) . then ( function ( instance ) { return instance } ) . then ( receiver , function ( reason ) { err ( "failed to asynchronously prepare wasm: " + reason ) ; abort ( reason ) } ) }
function instantiateAsync ( binary , binaryFile , imports , callback ) { if ( ! binary && typeof WebAssembly . instantiateStreaming == "function" && ! isDataURI ( binaryFile ) && typeof fetch == "function" ) return fetch ( binaryFile , { credentials : "same-origin" } ) . then ( function ( response ) { var result = WebAssembly . instantiateStreaming ( response , imports ) ; return result . then ( callback , function ( reason ) { err ( "wasm streaming compile failed: " + reason ) ; err ( "falling back to ArrayBuffer instantiation" ) ; return instantiateArrayBuffer ( binaryFile , imports ,
callback ) } ) } ) ; else return instantiateArrayBuffer ( binaryFile , imports , callback ) }
function createWasm ( ) { var info = { "env" : wasmImports , "wasi_snapshot_preview1" : wasmImports } ; function receiveInstance ( instance , module ) { var exports = instance . exports ; Module [ "asm" ] = exports ; wasmMemory = Module [ "asm" ] [ "memory" ] ; updateMemoryViews ( ) ; wasmTable = Module [ "asm" ] [ "__indirect_function_table" ] ; addOnInit ( Module [ "asm" ] [ "__wasm_call_ctors" ] ) ; removeRunDependency ( "wasm-instantiate" ) ; return exports } addRunDependency ( "wasm-instantiate" ) ; function receiveInstantiationResult ( result ) { receiveInstance ( result [ "instance" ] ) }
if ( Module [ "instantiateWasm" ] ) try { return Module [ "instantiateWasm" ] ( info , receiveInstance ) } catch ( e ) { err ( "Module.instantiateWasm callback failed with error: " + e ) ; return false } instantiateAsync ( wasmBinary , wasmBinaryFile , info , receiveInstantiationResult ) ; return { } } var tempDouble ; var tempI64 ; var ASM _CONSTS = { 350658 : function ( ) { return HEAP8 . length } } ; function RunTimeInfoCBFun ( nPort , pstRunTimeInfo , pUser ) { JSPlayM4 _RunTimeInfoCallBack ( nPort , pstRunTimeInfo , pUser ) }
function StreamInfoCBFun ( nPort , pstStreamInfo , pUser ) { JSPlayM4 _StreamInfoCallBack ( nPort , pstStreamInfo , pUser ) } function additionDataCBFun ( nPort , pstAddDataInfo , pUser ) { JSPlayM4 _AdditionDataCBFun ( nPort , pstAddDataInfo , pUser ) } function PostMpStreamOffsetCBFun ( nPort , pstPostMpStreamOffsetInfo , pUser ) { JSPlayM4 _PostMpStreamOffsetCallBack ( nPort , pstPostMpStreamOffsetInfo , pUser ) } var callRuntimeCallbacks = function ( callbacks ) { while ( callbacks . length > 0 ) callbacks . shift ( ) ( Module ) } ;
function getValue ( ptr , type ) { type = type === void 0 ? "i8" : type ; if ( type . endsWith ( "*" ) ) type = "*" ; 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" : abort ( "to do getValue(i64) use WASM_BIGINT" ) ; case "float" : return HEAPF32 [ ptr >> 2 ] ; case "double" : return HEAPF64 [ ptr >> 3 ] ; case "*" : return HEAPU32 [ ptr >> 2 ] ; default : abort ( "invalid type for getValue: " + type ) } }
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 ( "" ) }
function setValue ( ptr , value , type ) { type = type === void 0 ? "i8" : type ; if ( type . endsWith ( "*" ) ) type = "*" ; switch ( type ) { case "i1" : HEAP8 [ ptr >> 0 ] = value ; break ; case "i8" : HEAP8 [ ptr >> 0 ] = value ; break ; case "i16" : HEAP16 [ ptr >> 1 ] = value ; break ; case "i32" : HEAP32 [ ptr >> 2 ] = value ; break ; case "i64" : abort ( "to do setValue(i64) use WASM_BIGINT" ) ; case "float" : HEAPF32 [ ptr >> 2 ] = value ; break ; case "double" : HEAPF64 [ ptr >> 3 ] = value ; break ; case "*" : HEAPU32 [ ptr >> 2 ] = value ; break ; default : abort ( "invalid type for setValue: " + type ) } }
var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder ( "utf8" ) : undefined ;
var UTF8ArrayToString = function ( heapOrArray , idx , maxBytesToRead ) { var endIdx = idx + maxBytesToRead ; var endPtr = idx ; while ( heapOrArray [ endPtr ] && ! ( endPtr >= endIdx ) ) ++ endPtr ; if ( endPtr - idx > 16 && heapOrArray . buffer && UTF8Decoder ) return UTF8Decoder . decode ( heapOrArray . subarray ( idx , endPtr ) ) ; var str = "" ; while ( idx < endPtr ) { var u0 = heapOrArray [ idx ++ ] ; if ( ! ( u0 & 128 ) ) { str += String . fromCharCode ( u0 ) ; continue } var u1 = heapOrArray [ idx ++ ] & 63 ; if ( ( u0 & 224 ) == 192 ) { str += String . fromCharCode ( ( u0 & 31 ) << 6 | u1 ) ; continue } var u2 = heapOrArray [ idx ++ ] &
63 ; if ( ( u0 & 240 ) == 224 ) u0 = ( u0 & 15 ) << 12 | u1 << 6 | u2 ; else u0 = ( u0 & 7 ) << 18 | u1 << 12 | u2 << 6 | heapOrArray [ idx ++ ] & 63 ; if ( u0 < 65536 ) str += String . fromCharCode ( u0 ) ; else { var ch = u0 - 65536 ; str += String . fromCharCode ( 55296 | ch >> 10 , 56320 | ch & 1023 ) } } return str } ; var UTF8ToString = function ( ptr , maxBytesToRead ) { return ptr ? UTF8ArrayToString ( HEAPU8 , ptr , maxBytesToRead ) : "" } ;
var _ _ _assert _fail = function ( condition , filename , line , func ) { abort ( "Assertion failed: " + UTF8ToString ( condition ) + ", at: " + [ filename ? UTF8ToString ( filename ) : "unknown filename" , line , func ? UTF8ToString ( func ) : "unknown function" ] ) } ;
function ExceptionInfo ( excPtr ) { this . excPtr = excPtr ; this . ptr = excPtr - 24 ; this . set _type = function ( type ) { HEAPU32 [ this . ptr + 4 >> 2 ] = type } ; this . get _type = function ( ) { return HEAPU32 [ this . ptr + 4 >> 2 ] } ; this . set _destructor = function ( destructor ) { HEAPU32 [ this . ptr + 8 >> 2 ] = destructor } ; this . get _destructor = function ( ) { return HEAPU32 [ this . ptr + 8 >> 2 ] } ; this . set _caught = function ( caught ) { caught = caught ? 1 : 0 ; HEAP8 [ this . ptr + 12 >> 0 ] = caught } ; this . get _caught = function ( ) { return HEAP8 [ this . ptr + 12 >> 0 ] != 0 } ; this . set _rethrown = function ( rethrown ) { rethrown =
rethrown ? 1 : 0 ; HEAP8 [ this . ptr + 13 >> 0 ] = rethrown } ; this . get _rethrown = function ( ) { return HEAP8 [ this . ptr + 13 >> 0 ] != 0 } ; this . init = function ( type , destructor ) { this . set _adjusted _ptr ( 0 ) ; this . set _type ( type ) ; this . set _destructor ( destructor ) } ; this . set _adjusted _ptr = function ( adjustedPtr ) { HEAPU32 [ this . ptr + 16 >> 2 ] = adjustedPtr } ; this . get _adjusted _ptr = function ( ) { return HEAPU32 [ this . ptr + 16 >> 2 ] } ; this . get _exception _ptr = function ( ) { var isPointer = _ _ _cxa _is _pointer _type ( this . get _type ( ) ) ; if ( isPointer ) return HEAPU32 [ this . excPtr >> 2 ] ; var adjusted =
this . get _adjusted _ptr ( ) ; if ( adjusted !== 0 ) return adjusted ; return this . excPtr } } var exceptionLast = 0 ; var uncaughtExceptionCount = 0 ; function _ _ _cxa _throw ( ptr , type , destructor ) { var info = new ExceptionInfo ( ptr ) ; info . init ( type , destructor ) ; exceptionLast = ptr ; uncaughtExceptionCount ++ ; throw exceptionLast ; } var setErrNo = function ( value ) { HEAP32 [ _ _ _errno _location ( ) >> 2 ] = value ; return value } ;
var PATH = { isAbs : function ( path ) { return path . charAt ( 0 ) === "/" } , splitPath : function ( filename ) { var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/ ; return splitPathRe . exec ( filename ) . slice ( 1 ) } , normalizeArray : function ( parts , allowAboveRoot ) { var up = 0 ; for ( var i = parts . length - 1 ; i >= 0 ; i -- ) { var last = parts [ i ] ; if ( last === "." ) parts . splice ( i , 1 ) ; else if ( last === ".." ) { parts . splice ( i , 1 ) ; up ++ } else if ( up ) { parts . splice ( i , 1 ) ; up -- } } if ( allowAboveRoot ) for ( ; up ; up -- ) parts . unshift ( ".." ) ; return parts } , normalize : function ( path ) { var isAbsolute =
PATH . isAbs ( path ) , trailingSlash = path . substr ( - 1 ) === "/" ; path = PATH . normalizeArray ( path . split ( "/" ) . filter ( function ( p ) { return ! ! p } ) , ! isAbsolute ) . join ( "/" ) ; if ( ! path && ! isAbsolute ) path = "." ; if ( path && trailingSlash ) path += "/" ; return ( isAbsolute ? "/" : "" ) + path } , dirname : function ( path ) { var result = PATH . splitPath ( path ) , root = result [ 0 ] , dir = result [ 1 ] ; if ( ! root && ! dir ) return "." ; if ( dir ) dir = dir . substr ( 0 , dir . length - 1 ) ; return root + dir } , basename : function ( path ) { if ( path === "/" ) return "/" ; path = PATH . normalize ( path ) ; path = path . replace ( /\/$/ ,
"" ) ; var lastSlash = path . lastIndexOf ( "/" ) ; if ( lastSlash === - 1 ) return path ; return path . substr ( lastSlash + 1 ) } , join : function ( ) { var paths = Array . prototype . slice . call ( arguments ) ; return PATH . normalize ( paths . join ( "/" ) ) } , join2 : function ( l , r ) { return PATH . normalize ( l + "/" + r ) } } ; var initRandomFill = function ( ) { if ( typeof crypto == "object" && typeof crypto [ "getRandomValues" ] == "function" ) return function ( view ) { return crypto . getRandomValues ( view ) } ; else abort ( "initRandomDevice" ) } ;
var randomFill = function ( view ) { return ( randomFill = initRandomFill ( ) ) ( view ) } ;
var PATH _FS = { resolve : function ( ) { var resolvedPath = "" , resolvedAbsolute = false ; for ( var i = arguments . length - 1 ; i >= - 1 && ! resolvedAbsolute ; i -- ) { var path = i >= 0 ? arguments [ i ] : FS . cwd ( ) ; if ( typeof path != "string" ) throw new TypeError ( "Arguments to path.resolve must be strings" ) ; else if ( ! path ) return "" ; resolvedPath = path + "/" + resolvedPath ; resolvedAbsolute = PATH . isAbs ( path ) } resolvedPath = PATH . normalizeArray ( resolvedPath . split ( "/" ) . filter ( function ( p ) { return ! ! p } ) , ! resolvedAbsolute ) . join ( "/" ) ; return ( resolvedAbsolute ? "/" : "" ) +
resolvedPath || "." } , relative : function ( from , to ) { from = PATH _FS . resolve ( from ) . substr ( 1 ) ; to = PATH _FS . resolve ( to ) . substr ( 1 ) ; function trim ( arr ) { var start = 0 ; for ( ; start < arr . length ; start ++ ) if ( arr [ start ] !== "" ) break ; var end = arr . length - 1 ; for ( ; end >= 0 ; end -- ) if ( arr [ end ] !== "" ) break ; if ( start > end ) return [ ] ; return arr . slice ( start , end - start + 1 ) } var fromParts = trim ( from . split ( "/" ) ) ; var toParts = trim ( to . split ( "/" ) ) ; var length = Math . min ( fromParts . length , toParts . length ) ; var samePartsLength = length ; for ( var i = 0 ; i < length ; i ++ ) if ( fromParts [ i ] !==
toParts [ i ] ) { samePartsLength = i ; break } var outputParts = [ ] ; for ( var i = samePartsLength ; i < fromParts . length ; i ++ ) outputParts . push ( ".." ) ; outputParts = outputParts . concat ( toParts . slice ( samePartsLength ) ) ; return outputParts . join ( "/" ) } } ; var lengthBytesUTF8 = function ( str ) { var len = 0 ; for ( var i = 0 ; i < str . length ; ++ i ) { var c = str . charCodeAt ( i ) ; if ( c <= 127 ) len ++ ; else if ( c <= 2047 ) len += 2 ; else if ( c >= 55296 && c <= 57343 ) { len += 4 ; ++ i } else len += 3 } return len } ;
var stringToUTF8Array = function ( str , heap , 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 ; heap [ outIdx ++ ] = u } else if ( u <= 2047 ) { if ( outIdx + 1 >= endIdx ) break ; heap [ outIdx ++ ] = 192 | u >> 6 ; heap [ outIdx ++ ] = 128 | u & 63 } else if ( u <= 65535 ) { if ( outIdx + 2 >= endIdx ) break ; heap [ outIdx ++ ] = 224 | u >> 12 ; heap [ outIdx ++ ] =
128 | u >> 6 & 63 ; heap [ outIdx ++ ] = 128 | u & 63 } else { if ( outIdx + 3 >= endIdx ) break ; heap [ outIdx ++ ] = 240 | u >> 18 ; heap [ outIdx ++ ] = 128 | u >> 12 & 63 ; heap [ outIdx ++ ] = 128 | u >> 6 & 63 ; heap [ outIdx ++ ] = 128 | u & 63 } } heap [ outIdx ] = 0 ; return outIdx - startIdx } ; 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 }
var TTY = { ttys : [ ] , init : function ( ) { } , shutdown : function ( ) { } , register : function ( dev , ops ) { TTY . ttys [ dev ] = { input : [ ] , output : [ ] , ops : ops } ; FS . registerDevice ( dev , TTY . stream _ops ) } , stream _ops : { open : function ( stream ) { var tty = TTY . ttys [ stream . node . rdev ] ; if ( ! tty ) throw new FS . ErrnoError ( 43 ) ; stream . tty = tty ; stream . seekable = false } , close : function ( stream ) { stream . tty . ops . fsync ( stream . tty ) } , fsync : function ( stream ) { stream . tty . ops . fsync ( stream . tty ) } , read : function ( stream , buffer , offset , length , pos ) { if ( ! stream . tty || ! stream . tty . ops . get _char ) throw new FS . ErrnoError ( 60 ) ;
var bytesRead = 0 ; for ( var i = 0 ; i < length ; i ++ ) { var result ; try { result = stream . tty . ops . get _char ( stream . tty ) } catch ( e ) { throw new FS . ErrnoError ( 29 ) ; } if ( result === undefined && bytesRead === 0 ) throw new FS . ErrnoError ( 6 ) ; if ( result === null || result === undefined ) break ; bytesRead ++ ; buffer [ offset + i ] = result } if ( bytesRead ) stream . node . timestamp = Date . now ( ) ; return bytesRead } , write : function ( stream , buffer , offset , length , pos ) { if ( ! stream . tty || ! stream . tty . ops . put _char ) throw new FS . ErrnoError ( 60 ) ; try { for ( var i = 0 ; i < length ; i ++ ) stream . tty . ops . put _char ( stream . tty ,
buffer [ offset + i ] ) } catch ( e ) { throw new FS . ErrnoError ( 29 ) ; } if ( length ) stream . node . timestamp = Date . now ( ) ; return i } } , default _tty _ops : { get _char : function ( tty ) { if ( ! tty . input . length ) { var result = null ; if ( typeof window != "undefined" && typeof window . prompt == "function" ) { result = window . prompt ( "Input: " ) ; if ( result !== null ) result += "\n" } else if ( typeof readline == "function" ) { result = readline ( ) ; if ( result !== null ) result += "\n" } if ( ! result ) return null ; tty . input = intArrayFromString ( result , true ) } return tty . input . shift ( ) } , put _char : function ( tty ,
val ) { if ( val === null || val === 10 ) { out ( UTF8ArrayToString ( tty . output , 0 ) ) ; tty . output = [ ] } else if ( val != 0 ) tty . output . push ( val ) } , fsync : function ( tty ) { if ( tty . output && tty . output . length > 0 ) { out ( UTF8ArrayToString ( tty . output , 0 ) ) ; tty . output = [ ] } } , ioctl _tcgets : function ( tty ) { return { c _iflag : 25856 , c _oflag : 5 , c _cflag : 191 , c _lflag : 35387 , c _cc : [ 3 , 28 , 127 , 21 , 4 , 0 , 1 , 0 , 17 , 19 , 26 , 0 , 18 , 15 , 23 , 22 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] } } , ioctl _tcsets : function ( tty , optional _actions , data ) { return 0 } , ioctl _tiocgwinsz : function ( tty ) { return [ 24 , 80 ] } } ,
default _tty1 _ops : { put _char : function ( tty , val ) { if ( val === null || val === 10 ) { err ( UTF8ArrayToString ( tty . output , 0 ) ) ; tty . output = [ ] } else if ( val != 0 ) tty . output . push ( val ) } , fsync : function ( tty ) { if ( tty . output && tty . output . length > 0 ) { err ( UTF8ArrayToString ( tty . output , 0 ) ) ; tty . output = [ ] } } } } ; var mmapAlloc = function ( size ) { abort ( ) } ;
var MEMFS = { ops _table : null , mount : function ( mount ) { return MEMFS . createNode ( null , "/" , 16384 | 511 , 0 ) } , createNode : function ( parent , name , mode , dev ) { if ( FS . isBlkdev ( mode ) || FS . isFIFO ( mode ) ) throw new FS . ErrnoError ( 63 ) ; if ( ! MEMFS . ops _table ) MEMFS . ops _table = { dir : { node : { getattr : MEMFS . node _ops . getattr , setattr : MEMFS . node _ops . setattr , lookup : MEMFS . node _ops . lookup , mknod : MEMFS . node _ops . mknod , rename : MEMFS . node _ops . rename , unlink : MEMFS . node _ops . unlink , rmdir : MEMFS . node _ops . rmdir , readdir : MEMFS . node _ops . readdir , symlink : MEMFS . node _ops . symlink } ,
stream : { llseek : MEMFS . stream _ops . llseek } } , file : { node : { getattr : MEMFS . node _ops . getattr , setattr : MEMFS . node _ops . setattr } , stream : { llseek : MEMFS . stream _ops . llseek , read : MEMFS . stream _ops . read , write : MEMFS . stream _ops . write , allocate : MEMFS . stream _ops . allocate , mmap : MEMFS . stream _ops . mmap , msync : MEMFS . stream _ops . msync } } , link : { node : { getattr : MEMFS . node _ops . getattr , setattr : MEMFS . node _ops . setattr , readlink : MEMFS . node _ops . readlink } , stream : { } } , chrdev : { node : { getattr : MEMFS . node _ops . getattr , setattr : MEMFS . node _ops . setattr } , stream : FS . chrdev _stream _ops } } ;
var node = FS . createNode ( parent , name , mode , dev ) ; if ( FS . isDir ( node . mode ) ) { node . node _ops = MEMFS . ops _table . dir . node ; node . stream _ops = MEMFS . ops _table . dir . stream ; node . contents = { } } else if ( FS . isFile ( node . mode ) ) { node . node _ops = MEMFS . ops _table . file . node ; node . stream _ops = MEMFS . ops _table . file . stream ; node . usedBytes = 0 ; node . contents = null } else if ( FS . isLink ( node . mode ) ) { node . node _ops = MEMFS . ops _table . link . node ; node . stream _ops = MEMFS . ops _table . link . stream } else if ( FS . isChrdev ( node . mode ) ) { node . node _ops = MEMFS . ops _table . chrdev . node ;
node . stream _ops = MEMFS . ops _table . chrdev . stream } node . timestamp = Date . now ( ) ; if ( parent ) { parent . contents [ name ] = node ; parent . timestamp = node . timestamp } return node } , getFileDataAsTypedArray : function ( node ) { if ( ! node . contents ) return new Uint8Array ( 0 ) ; if ( node . contents . subarray ) return node . contents . subarray ( 0 , node . usedBytes ) ; return new Uint8Array ( node . contents ) } , expandFileStorage : function ( node , newCapacity ) { var prevCapacity = node . contents ? node . contents . length : 0 ; if ( prevCapacity >= newCapacity ) return ; var CAPACITY _DOUBLING _MAX =
1024 * 1024 ; newCapacity = Math . max ( newCapacity , prevCapacity * ( prevCapacity < CAPACITY _DOUBLING _MAX ? 2 : 1.125 ) >>> 0 ) ; if ( prevCapacity != 0 ) newCapacity = Math . max ( newCapacity , 256 ) ; var oldContents = node . contents ; node . contents = new Uint8Array ( newCapacity ) ; if ( node . usedBytes > 0 ) node . contents . set ( oldContents . subarray ( 0 , node . usedBytes ) , 0 ) } , resizeFileStorage : function ( node , newSize ) { if ( node . usedBytes == newSize ) return ; if ( newSize == 0 ) { node . contents = null ; node . usedBytes = 0 } else { var oldContents = node . contents ; node . contents = new Uint8Array ( newSize ) ;
if ( oldContents ) node . contents . set ( oldContents . subarray ( 0 , Math . min ( newSize , node . usedBytes ) ) ) ; node . usedBytes = newSize } } , node _ops : { getattr : function ( node ) { var attr = { } ; attr . dev = FS . isChrdev ( node . mode ) ? node . id : 1 ; attr . ino = node . id ; attr . mode = node . mode ; attr . nlink = 1 ; attr . uid = 0 ; attr . gid = 0 ; attr . rdev = node . rdev ; if ( FS . isDir ( node . mode ) ) attr . size = 4096 ; else if ( FS . isFile ( node . mode ) ) attr . size = node . usedBytes ; else if ( FS . isLink ( node . mode ) ) attr . size = node . link . length ; else attr . size = 0 ; attr . atime = new Date ( node . timestamp ) ; attr . mtime =
new Date ( node . timestamp ) ; attr . ctime = new Date ( node . timestamp ) ; attr . blksize = 4096 ; attr . blocks = Math . ceil ( attr . size / attr . blksize ) ; return attr } , setattr : function ( node , attr ) { if ( attr . mode !== undefined ) node . mode = attr . mode ; if ( attr . timestamp !== undefined ) node . timestamp = attr . timestamp ; if ( attr . size !== undefined ) MEMFS . resizeFileStorage ( node , attr . size ) } , lookup : function ( parent , name ) { throw FS . genericErrors [ 44 ] ; } , mknod : function ( parent , name , mode , dev ) { return MEMFS . createNode ( parent , name , mode , dev ) } , rename : function ( old _node ,
new _dir , new _name ) { if ( FS . isDir ( old _node . mode ) ) { var new _node ; try { new _node = FS . lookupNode ( new _dir , new _name ) } catch ( e ) { } if ( new _node ) for ( var i in new _node . contents ) throw new FS . ErrnoError ( 55 ) ; } delete old _node . parent . contents [ old _node . name ] ; old _node . parent . timestamp = Date . now ( ) ; old _node . name = new _name ; new _dir . contents [ new _name ] = old _node ; new _dir . timestamp = old _node . parent . timestamp ; old _node . parent = new _dir } , unlink : function ( parent , name ) { delete parent . contents [ name ] ; parent . timestamp = Date . now ( ) } , rmdir : function ( parent ,
name ) { var node = FS . lookupNode ( parent , name ) ; for ( var i in node . contents ) throw new FS . ErrnoError ( 55 ) ; delete parent . contents [ name ] ; parent . timestamp = Date . now ( ) } , readdir : function ( node ) { var entries = [ "." , ".." ] ; for ( var key in node . contents ) { if ( ! node . contents . hasOwnProperty ( key ) ) continue ; entries . push ( key ) } return entries } , symlink : function ( parent , newname , oldpath ) { var node = MEMFS . createNode ( parent , newname , 511 | 40960 , 0 ) ; node . link = oldpath ; return node } , readlink : function ( node ) { if ( ! FS . isLink ( node . mode ) ) throw new FS . ErrnoError ( 28 ) ;
return node . link } } , stream _ops : { read : function ( stream , buffer , offset , length , position ) { var contents = stream . node . contents ; if ( position >= stream . node . usedBytes ) return 0 ; var size = Math . min ( stream . node . usedBytes - position , length ) ; if ( size > 8 && contents . subarray ) buffer . set ( contents . subarray ( position , position + size ) , offset ) ; else for ( var i = 0 ; i < size ; i ++ ) buffer [ offset + i ] = contents [ position + i ] ; return size } , write : function ( stream , buffer , offset , length , position , canOwn ) { if ( buffer . buffer === HEAP8 . buffer ) canOwn = false ; if ( ! length ) return 0 ;
var node = stream . node ; node . timestamp = Date . now ( ) ; if ( buffer . subarray && ( ! node . contents || node . contents . subarray ) ) if ( canOwn ) { node . contents = buffer . subarray ( offset , offset + length ) ; node . usedBytes = length ; return length } else if ( node . usedBytes === 0 && position === 0 ) { node . contents = buffer . slice ( offset , offset + length ) ; node . usedBytes = length ; return length } else if ( position + length <= node . usedBytes ) { node . contents . set ( buffer . subarray ( offset , offset + length ) , position ) ; return length } MEMFS . expandFileStorage ( node , position + length ) ;
if ( node . contents . subarray && buffer . subarray ) node . contents . set ( buffer . subarray ( offset , offset + length ) , position ) ; else for ( var i = 0 ; i < length ; i ++ ) node . contents [ position + i ] = buffer [ offset + i ] ; node . usedBytes = Math . max ( node . usedBytes , position + length ) ; return length } , llseek : function ( stream , offset , whence ) { var position = offset ; if ( whence === 1 ) position += stream . position ; else if ( whence === 2 ) if ( FS . isFile ( stream . node . mode ) ) position += stream . node . usedBytes ; if ( position < 0 ) throw new FS . ErrnoError ( 28 ) ; return position } , allocate : function ( stream ,
offset , length ) { MEMFS . expandFileStorage ( stream . node , offset + length ) ; stream . node . usedBytes = Math . max ( stream . node . usedBytes , offset + length ) } , mmap : function ( stream , length , position , prot , flags ) { if ( ! FS . isFile ( stream . node . mode ) ) throw new FS . ErrnoError ( 43 ) ; var ptr ; var allocated ; var contents = stream . node . contents ; if ( ! ( flags & 2 ) && contents . buffer === HEAP8 . buffer ) { allocated = false ; ptr = contents . byteOffset } else { if ( position > 0 || position + length < contents . length ) if ( contents . subarray ) contents = contents . subarray ( position , position +
length ) ; else contents = Array . prototype . slice . call ( contents , position , position + length ) ; allocated = true ; ptr = mmapAlloc ( length ) ; if ( ! ptr ) throw new FS . ErrnoError ( 48 ) ; HEAP8 . set ( contents , ptr ) } return { ptr : ptr , allocated : allocated } } , msync : function ( stream , buffer , offset , length , mmapFlags ) { MEMFS . stream _ops . write ( stream , buffer , 0 , length , offset , false ) ; return 0 } } } ;
var asyncLoad = function ( url , onload , onerror , noRunDep ) { var dep = ! noRunDep ? getUniqueRunDependency ( "al " + url ) : "" ; readAsync ( url , function ( arrayBuffer ) { assert ( arrayBuffer , 'Loading data file "' + url + '" failed (no arrayBuffer).' ) ; onload ( new Uint8Array ( arrayBuffer ) ) ; if ( dep ) removeRunDependency ( dep ) } , function ( event ) { if ( onerror ) onerror ( ) ; else throw 'Loading data file "' + url + '" failed.' ; } ) ; if ( dep ) addRunDependency ( dep ) } ; var preloadPlugins = Module [ "preloadPlugins" ] || [ ] ;
function FS _handledByPreloadPlugin ( byteArray , fullname , finish , onerror ) { if ( typeof Browser != "undefined" ) Browser . init ( ) ; var handled = false ; preloadPlugins . forEach ( function ( plugin ) { if ( handled ) return ; if ( plugin [ "canHandle" ] ( fullname ) ) { plugin [ "handle" ] ( byteArray , fullname , finish , onerror ) ; handled = true } } ) ; return handled }
function FS _createPreloadedFile ( parent , name , url , canRead , canWrite , onload , onerror , dontCreateFile , canOwn , preFinish ) { var fullname = name ? PATH _FS . resolve ( PATH . join2 ( parent , name ) ) : parent ; var dep = getUniqueRunDependency ( "cp " + fullname ) ; function processData ( byteArray ) { function finish ( byteArray ) { if ( preFinish ) preFinish ( ) ; if ( ! dontCreateFile ) FS . createDataFile ( parent , name , byteArray , canRead , canWrite , canOwn ) ; if ( onload ) onload ( ) ; removeRunDependency ( dep ) } if ( FS _handledByPreloadPlugin ( byteArray , fullname , finish , function ( ) { if ( onerror ) onerror ( ) ;
removeRunDependency ( dep ) } ) ) return ; finish ( byteArray ) } addRunDependency ( dep ) ; if ( typeof url == "string" ) asyncLoad ( url , function ( byteArray ) { return processData ( byteArray ) } , onerror ) ; else processData ( url ) } function FS _modeStringToFlags ( str ) { var flagModes = { "r" : 0 , "r+" : 2 , "w" : 512 | 64 | 1 , "w+" : 512 | 64 | 2 , "a" : 1024 | 64 | 1 , "a+" : 1024 | 64 | 2 } ; var flags = flagModes [ str ] ; if ( typeof flags == "undefined" ) throw new Error ( "Unknown file open mode: " + str ) ; return flags }
function FS _getMode ( canRead , canWrite ) { var mode = 0 ; if ( canRead ) mode |= 292 | 73 ; if ( canWrite ) mode |= 146 ; return mode }
var FS = { root : null , mounts : [ ] , devices : { } , streams : [ ] , nextInode : 1 , nameTable : null , currentPath : "/" , initialized : false , ignorePermissions : true , ErrnoError : null , genericErrors : { } , filesystems : null , syncFSRequests : 0 , lookupPath : function ( path , opts ) { opts = opts === void 0 ? { } : opts ; path = PATH _FS . resolve ( path ) ; if ( ! path ) return { path : "" , node : null } ; var defaults = { follow _mount : true , recurse _count : 0 } ; opts = Object . assign ( defaults , opts ) ; if ( opts . recurse _count > 8 ) throw new FS . ErrnoError ( 32 ) ; var parts = path . split ( "/" ) . filter ( function ( p ) { return ! ! p } ) ;
var current = FS . root ; var current _path = "/" ; for ( var i = 0 ; i < parts . length ; i ++ ) { var islast = i === parts . length - 1 ; if ( islast && opts . parent ) break ; current = FS . lookupNode ( current , parts [ i ] ) ; current _path = PATH . join2 ( current _path , parts [ i ] ) ; if ( FS . isMountpoint ( current ) ) if ( ! islast || islast && opts . follow _mount ) current = current . mounted . root ; if ( ! islast || opts . follow ) { var count = 0 ; while ( FS . isLink ( current . mode ) ) { var link = FS . readlink ( current _path ) ; current _path = PATH _FS . resolve ( PATH . dirname ( current _path ) , link ) ; var lookup = FS . lookupPath ( current _path ,
{ recurse _count : opts . recurse _count + 1 } ) ; current = lookup . node ; if ( count ++ > 40 ) throw new FS . ErrnoError ( 32 ) ; } } } return { path : current _path , node : current } } , getPath : function ( node ) { var path ; while ( true ) { if ( FS . isRoot ( node ) ) { var mount = node . mount . mountpoint ; if ( ! path ) return mount ; return mount [ mount . length - 1 ] !== "/" ? mount + "/" + path : mount + path } path = path ? node . name + "/" + path : node . name ; node = node . parent } } , hashName : function ( parentid , name ) { var hash = 0 ; for ( var i = 0 ; i < name . length ; i ++ ) hash = ( hash << 5 ) - hash + name . charCodeAt ( i ) | 0 ; return ( parentid +
hash >>> 0 ) % FS . nameTable . length } , hashAddNode : function ( node ) { var hash = FS . hashName ( node . parent . id , node . name ) ; node . name _next = FS . nameTable [ hash ] ; FS . nameTable [ hash ] = node } , hashRemoveNode : function ( node ) { var hash = FS . hashName ( node . parent . id , node . name ) ; if ( FS . nameTable [ hash ] === node ) FS . nameTable [ hash ] = node . name _next ; else { var current = FS . nameTable [ hash ] ; while ( current ) { if ( current . name _next === node ) { current . name _next = node . name _next ; break } current = current . name _next } } } , lookupNode : function ( parent , name ) { var errCode = FS . mayLookup ( parent ) ;
if ( errCode ) throw new FS . ErrnoError ( errCode , parent ) ; var hash = FS . hashName ( parent . id , name ) ; for ( var node = FS . nameTable [ hash ] ; node ; node = node . name _next ) { var nodeName = node . name ; if ( node . parent . id === parent . id && nodeName === name ) return node } return FS . lookup ( parent , name ) } , createNode : function ( parent , name , mode , rdev ) { var node = new FS . FSNode ( parent , name , mode , rdev ) ; FS . hashAddNode ( node ) ; return node } , destroyNode : function ( node ) { FS . hashRemoveNode ( node ) } , isRoot : function ( node ) { return node === node . parent } , isMountpoint : function ( node ) { return ! ! node . mounted } ,
isFile : function ( mode ) { return ( mode & 61440 ) === 32768 } , isDir : function ( mode ) { return ( mode & 61440 ) === 16384 } , isLink : function ( mode ) { return ( mode & 61440 ) === 40960 } , isChrdev : function ( mode ) { return ( mode & 61440 ) === 8192 } , isBlkdev : function ( mode ) { return ( mode & 61440 ) === 24576 } , isFIFO : function ( mode ) { return ( mode & 61440 ) === 4096 } , isSocket : function ( mode ) { return ( mode & 49152 ) === 49152 } , flagsToPermissionString : function ( flag ) { var perms = [ "r" , "w" , "rw" ] [ flag & 3 ] ; if ( flag & 512 ) perms += "w" ; return perms } , nodePermissions : function ( node , perms ) { if ( FS . ignorePermissions ) return 0 ;
if ( perms . includes ( "r" ) && ! ( node . mode & 292 ) ) return 2 ; else if ( perms . includes ( "w" ) && ! ( node . mode & 146 ) ) return 2 ; else if ( perms . includes ( "x" ) && ! ( node . mode & 73 ) ) return 2 ; return 0 } , mayLookup : function ( dir ) { var errCode = FS . nodePermissions ( dir , "x" ) ; if ( errCode ) return errCode ; if ( ! dir . node _ops . lookup ) return 2 ; return 0 } , mayCreate : function ( dir , name ) { try { var node = FS . lookupNode ( dir , name ) ; return 20 } catch ( e ) { } return FS . nodePermissions ( dir , "wx" ) } , mayDelete : function ( dir , name , isdir ) { var node ; try { node = FS . lookupNode ( dir , name ) } catch ( e ) { return e . errno } var errCode =
FS . nodePermissions ( dir , "wx" ) ; if ( errCode ) return errCode ; if ( isdir ) { if ( ! FS . isDir ( node . mode ) ) return 54 ; if ( FS . isRoot ( node ) || FS . getPath ( node ) === FS . cwd ( ) ) return 10 } else if ( FS . isDir ( node . mode ) ) return 31 ; return 0 } , mayOpen : function ( node , flags ) { if ( ! node ) return 44 ; if ( FS . isLink ( node . mode ) ) return 32 ; else if ( FS . isDir ( node . mode ) ) if ( FS . flagsToPermissionString ( flags ) !== "r" || flags & 512 ) return 31 ; return FS . nodePermissions ( node , FS . flagsToPermissionString ( flags ) ) } , MAX _OPEN _FDS : 4096 , nextfd : function ( ) { for ( var fd = 0 ; fd <= FS . MAX _OPEN _FDS ; fd ++ ) if ( ! FS . streams [ fd ] ) return fd ;
throw new FS . ErrnoError ( 33 ) ; } , getStreamChecked : function ( fd ) { var stream = FS . getStream ( fd ) ; if ( ! stream ) throw new FS . ErrnoError ( 8 ) ; return stream } , getStream : function ( fd ) { return FS . streams [ fd ] } , createStream : function ( stream , fd ) { fd = fd === void 0 ? - 1 : fd ; if ( ! FS . FSStream ) { FS . FSStream = function ( ) { this . shared = { } } ; FS . FSStream . prototype = { } ; Object . defineProperties ( FS . FSStream . prototype , { object : { get : function ( ) { return this . node } , set : function ( val ) { this . node = val } } , isRead : { get : function ( ) { return ( this . flags & 2097155 ) !== 1 } } , isWrite : { get : function ( ) { return ( this . flags &
2097155 ) !== 0 } } , isAppend : { get : function ( ) { return this . flags & 1024 } } , flags : { get : function ( ) { return this . shared . flags } , set : function ( val ) { this . shared . flags = val } } , position : { get : function ( ) { return this . shared . position } , set : function ( val ) { this . shared . position = val } } } ) } stream = Object . assign ( new FS . FSStream , stream ) ; if ( fd == - 1 ) fd = FS . nextfd ( ) ; stream . fd = fd ; FS . streams [ fd ] = stream ; return stream } , closeStream : function ( fd ) { FS . streams [ fd ] = null } , chrdev _stream _ops : { open : function ( stream ) { var device = FS . getDevice ( stream . node . rdev ) ;
stream . stream _ops = device . stream _ops ; if ( stream . stream _ops . open ) stream . stream _ops . open ( stream ) } , llseek : function ( ) { throw new FS . ErrnoError ( 70 ) ; } } , major : function ( dev ) { return dev >> 8 } , minor : function ( dev ) { return dev & 255 } , makedev : function ( ma , mi ) { return ma << 8 | mi } , registerDevice : function ( dev , ops ) { FS . devices [ dev ] = { stream _ops : ops } } , getDevice : function ( dev ) { return FS . devices [ dev ] } , getMounts : function ( mount ) { var mounts = [ ] ; var check = [ mount ] ; while ( check . length ) { var m = check . pop ( ) ; mounts . push ( m ) ; check . push . apply ( check ,
m . mounts ) } return mounts } , syncfs : function ( populate , callback ) { if ( typeof populate == "function" ) { callback = populate ; populate = false } FS . syncFSRequests ++ ; if ( FS . syncFSRequests > 1 ) err ( "warning: " + FS . syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work" ) ; var mounts = FS . getMounts ( FS . root . mount ) ; var completed = 0 ; function doCallback ( errCode ) { FS . syncFSRequests -- ; return callback ( errCode ) } function done ( errCode ) { if ( errCode ) { if ( ! done . errored ) { done . errored = true ; return doCallback ( errCode ) } return } if ( ++ completed >=
mounts . length ) doCallback ( null ) } mounts . forEach ( function ( mount ) { if ( ! mount . type . syncfs ) return done ( null ) ; mount . type . syncfs ( mount , populate , done ) } ) } , mount : function ( type , opts , mountpoint ) { var root = mountpoint === "/" ; var pseudo = ! mountpoint ; var node ; if ( root && FS . root ) throw new FS . ErrnoError ( 10 ) ; else if ( ! root && ! pseudo ) { var lookup = FS . lookupPath ( mountpoint , { follow _mount : false } ) ; mountpoint = lookup . path ; node = lookup . node ; if ( FS . isMountpoint ( node ) ) throw new FS . ErrnoError ( 10 ) ; if ( ! FS . isDir ( node . mode ) ) throw new FS . ErrnoError ( 54 ) ;
} var mount = { type : type , opts : opts , mountpoint : mountpoint , mounts : [ ] } ; var mountRoot = type . mount ( mount ) ; mountRoot . mount = mount ; mount . root = mountRoot ; if ( root ) FS . root = mountRoot ; else if ( node ) { node . mounted = mount ; if ( node . mount ) node . mount . mounts . push ( mount ) } return mountRoot } , unmount : function ( mountpoint ) { var lookup = FS . lookupPath ( mountpoint , { follow _mount : false } ) ; if ( ! FS . isMountpoint ( lookup . node ) ) throw new FS . ErrnoError ( 28 ) ; var node = lookup . node ; var mount = node . mounted ; var mounts = FS . getMounts ( mount ) ; Object . keys ( FS . nameTable ) . forEach ( function ( hash ) { var current =
FS . nameTable [ hash ] ; while ( current ) { var next = current . name _next ; if ( mounts . includes ( current . mount ) ) FS . destroyNode ( current ) ; current = next } } ) ; node . mounted = null ; var idx = node . mount . mounts . indexOf ( mount ) ; node . mount . mounts . splice ( idx , 1 ) } , lookup : function ( parent , name ) { return parent . node _ops . lookup ( parent , name ) } , mknod : function ( path , mode , dev ) { var lookup = FS . lookupPath ( path , { parent : true } ) ; var parent = lookup . node ; var name = PATH . basename ( path ) ; if ( ! name || name === "." || name === ".." ) throw new FS . ErrnoError ( 28 ) ; var errCode =
FS . mayCreate ( parent , name ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ; if ( ! parent . node _ops . mknod ) throw new FS . ErrnoError ( 63 ) ; return parent . node _ops . mknod ( parent , name , mode , dev ) } , create : function ( path , mode ) { mode = mode !== undefined ? mode : 438 ; mode &= 4095 ; mode |= 32768 ; return FS . mknod ( path , mode , 0 ) } , mkdir : function ( path , mode ) { mode = mode !== undefined ? mode : 511 ; mode &= 511 | 512 ; mode |= 16384 ; return FS . mknod ( path , mode , 0 ) } , mkdirTree : function ( path , mode ) { var dirs = path . split ( "/" ) ; var d = "" ; for ( var i = 0 ; i < dirs . length ; ++ i ) { if ( ! dirs [ i ] ) continue ;
d += "/" + dirs [ i ] ; try { FS . mkdir ( d , mode ) } catch ( e ) { if ( e . errno != 20 ) throw e ; } } } , mkdev : function ( path , mode , dev ) { if ( typeof dev == "undefined" ) { dev = mode ; mode = 438 } mode |= 8192 ; return FS . mknod ( path , mode , dev ) } , symlink : function ( oldpath , newpath ) { if ( ! PATH _FS . resolve ( oldpath ) ) throw new FS . ErrnoError ( 44 ) ; var lookup = FS . lookupPath ( newpath , { parent : true } ) ; var parent = lookup . node ; if ( ! parent ) throw new FS . ErrnoError ( 44 ) ; var newname = PATH . basename ( newpath ) ; var errCode = FS . mayCreate ( parent , newname ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ;
if ( ! parent . node _ops . symlink ) throw new FS . ErrnoError ( 63 ) ; return parent . node _ops . symlink ( parent , newname , oldpath ) } , rename : function ( old _path , new _path ) { var old _dirname = PATH . dirname ( old _path ) ; var new _dirname = PATH . dirname ( new _path ) ; var old _name = PATH . basename ( old _path ) ; var new _name = PATH . basename ( new _path ) ; var lookup , old _dir , new _dir ; lookup = FS . lookupPath ( old _path , { parent : true } ) ; old _dir = lookup . node ; lookup = FS . lookupPath ( new _path , { parent : true } ) ; new _dir = lookup . node ; if ( ! old _dir || ! new _dir ) throw new FS . ErrnoError ( 44 ) ;
if ( old _dir . mount !== new _dir . mount ) throw new FS . ErrnoError ( 75 ) ; var old _node = FS . lookupNode ( old _dir , old _name ) ; var relative = PATH _FS . relative ( old _path , new _dirname ) ; if ( relative . charAt ( 0 ) !== "." ) throw new FS . ErrnoError ( 28 ) ; relative = PATH _FS . relative ( new _path , old _dirname ) ; if ( relative . charAt ( 0 ) !== "." ) throw new FS . ErrnoError ( 55 ) ; var new _node ; try { new _node = FS . lookupNode ( new _dir , new _name ) } catch ( e ) { } if ( old _node === new _node ) return ; var isdir = FS . isDir ( old _node . mode ) ; var errCode = FS . mayDelete ( old _dir , old _name , isdir ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ;
errCode = new _node ? FS . mayDelete ( new _dir , new _name , isdir ) : FS . mayCreate ( new _dir , new _name ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ; if ( ! old _dir . node _ops . rename ) throw new FS . ErrnoError ( 63 ) ; if ( FS . isMountpoint ( old _node ) || new _node && FS . isMountpoint ( new _node ) ) throw new FS . ErrnoError ( 10 ) ; if ( new _dir !== old _dir ) { errCode = FS . nodePermissions ( old _dir , "w" ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ; } FS . hashRemoveNode ( old _node ) ; try { old _dir . node _ops . rename ( old _node , new _dir , new _name ) } catch ( e$3 ) { throw e$3 ; } finally { FS . hashAddNode ( old _node ) } } ,
rmdir : function ( path ) { var lookup = FS . lookupPath ( path , { parent : true } ) ; var parent = lookup . node ; var name = PATH . basename ( path ) ; var node = FS . lookupNode ( parent , name ) ; var errCode = FS . mayDelete ( parent , name , true ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ; if ( ! parent . node _ops . rmdir ) throw new FS . ErrnoError ( 63 ) ; if ( FS . isMountpoint ( node ) ) throw new FS . ErrnoError ( 10 ) ; parent . node _ops . rmdir ( parent , name ) ; FS . destroyNode ( node ) } , readdir : function ( path ) { var lookup = FS . lookupPath ( path , { follow : true } ) ; var node = lookup . node ; if ( ! node . node _ops . readdir ) throw new FS . ErrnoError ( 54 ) ;
return node . node _ops . readdir ( node ) } , unlink : function ( path ) { var lookup = FS . lookupPath ( path , { parent : true } ) ; var parent = lookup . node ; if ( ! parent ) throw new FS . ErrnoError ( 44 ) ; var name = PATH . basename ( path ) ; var node = FS . lookupNode ( parent , name ) ; var errCode = FS . mayDelete ( parent , name , false ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ; if ( ! parent . node _ops . unlink ) throw new FS . ErrnoError ( 63 ) ; if ( FS . isMountpoint ( node ) ) throw new FS . ErrnoError ( 10 ) ; parent . node _ops . unlink ( parent , name ) ; FS . destroyNode ( node ) } , readlink : function ( path ) { var lookup =
FS . lookupPath ( path ) ; var link = lookup . node ; if ( ! link ) throw new FS . ErrnoError ( 44 ) ; if ( ! link . node _ops . readlink ) throw new FS . ErrnoError ( 28 ) ; return PATH _FS . resolve ( FS . getPath ( link . parent ) , link . node _ops . readlink ( link ) ) } , stat : function ( path , dontFollow ) { var lookup = FS . lookupPath ( path , { follow : ! dontFollow } ) ; var node = lookup . node ; if ( ! node ) throw new FS . ErrnoError ( 44 ) ; if ( ! node . node _ops . getattr ) throw new FS . ErrnoError ( 63 ) ; return node . node _ops . getattr ( node ) } , lstat : function ( path ) { return FS . stat ( path , true ) } , chmod : function ( path ,
mode , dontFollow ) { var node ; if ( typeof path == "string" ) { var lookup = FS . lookupPath ( path , { follow : ! dontFollow } ) ; node = lookup . node } else node = path ; if ( ! node . node _ops . setattr ) throw new FS . ErrnoError ( 63 ) ; node . node _ops . setattr ( node , { mode : mode & 4095 | node . mode & ~ 4095 , timestamp : Date . now ( ) } ) } , lchmod : function ( path , mode ) { FS . chmod ( path , mode , true ) } , fchmod : function ( fd , mode ) { var stream = FS . getStreamChecked ( fd ) ; FS . chmod ( stream . node , mode ) } , chown : function ( path , uid , gid , dontFollow ) { var node ; if ( typeof path == "string" ) { var lookup = FS . lookupPath ( path ,
{ follow : ! dontFollow } ) ; node = lookup . node } else node = path ; if ( ! node . node _ops . setattr ) throw new FS . ErrnoError ( 63 ) ; node . node _ops . setattr ( node , { timestamp : Date . now ( ) } ) } , lchown : function ( path , uid , gid ) { FS . chown ( path , uid , gid , true ) } , fchown : function ( fd , uid , gid ) { var stream = FS . getStreamChecked ( fd ) ; FS . chown ( stream . node , uid , gid ) } , truncate : function ( path , len ) { if ( len < 0 ) throw new FS . ErrnoError ( 28 ) ; var node ; if ( typeof path == "string" ) { var lookup = FS . lookupPath ( path , { follow : true } ) ; node = lookup . node } else node = path ; if ( ! node . node _ops . setattr ) throw new FS . ErrnoError ( 63 ) ;
if ( FS . isDir ( node . mode ) ) throw new FS . ErrnoError ( 31 ) ; if ( ! FS . isFile ( node . mode ) ) throw new FS . ErrnoError ( 28 ) ; var errCode = FS . nodePermissions ( node , "w" ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ; node . node _ops . setattr ( node , { size : len , timestamp : Date . now ( ) } ) } , ftruncate : function ( fd , len ) { var stream = FS . getStreamChecked ( fd ) ; if ( ( stream . flags & 2097155 ) === 0 ) throw new FS . ErrnoError ( 28 ) ; FS . truncate ( stream . node , len ) } , utime : function ( path , atime , mtime ) { var lookup = FS . lookupPath ( path , { follow : true } ) ; var node = lookup . node ; node . node _ops . setattr ( node ,
{ timestamp : Math . max ( atime , mtime ) } ) } , open : function ( path , flags , mode ) { if ( path === "" ) throw new FS . ErrnoError ( 44 ) ; flags = typeof flags == "string" ? FS _modeStringToFlags ( flags ) : flags ; mode = typeof mode == "undefined" ? 438 : mode ; if ( flags & 64 ) mode = mode & 4095 | 32768 ; else mode = 0 ; var node ; if ( typeof path == "object" ) node = path ; else { path = PATH . normalize ( path ) ; try { var lookup = FS . lookupPath ( path , { follow : ! ( flags & 131072 ) } ) ; node = lookup . node } catch ( e ) { } } var created = false ; if ( flags & 64 ) if ( node ) { if ( flags & 128 ) throw new FS . ErrnoError ( 20 ) ; } else { node =
FS . mknod ( path , mode , 0 ) ; created = true } if ( ! node ) throw new FS . ErrnoError ( 44 ) ; if ( FS . isChrdev ( node . mode ) ) flags &= ~ 512 ; if ( flags & 65536 && ! FS . isDir ( node . mode ) ) throw new FS . ErrnoError ( 54 ) ; if ( ! created ) { var errCode = FS . mayOpen ( node , flags ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ; } if ( flags & 512 && ! created ) FS . truncate ( node , 0 ) ; flags &= ~ ( 128 | 512 | 131072 ) ; var stream = FS . createStream ( { node : node , path : FS . getPath ( node ) , flags : flags , seekable : true , position : 0 , stream _ops : node . stream _ops , ungotten : [ ] , error : false } ) ; if ( stream . stream _ops . open ) stream . stream _ops . open ( stream ) ;
if ( Module [ "logReadFiles" ] && ! ( flags & 1 ) ) { if ( ! FS . readFiles ) FS . readFiles = { } ; if ( ! ( path in FS . readFiles ) ) FS . readFiles [ path ] = 1 } return stream } , close : function ( stream ) { if ( FS . isClosed ( stream ) ) throw new FS . ErrnoError ( 8 ) ; if ( stream . getdents ) stream . getdents = null ; try { if ( stream . stream _ops . close ) stream . stream _ops . close ( stream ) } catch ( e ) { throw e ; } finally { FS . closeStream ( stream . fd ) } stream . fd = null } , isClosed : function ( stream ) { return stream . fd === null } , llseek : function ( stream , offset , whence ) { if ( FS . isClosed ( stream ) ) throw new FS . ErrnoError ( 8 ) ;
if ( ! stream . seekable || ! stream . stream _ops . llseek ) throw new FS . ErrnoError ( 70 ) ; if ( whence != 0 && whence != 1 && whence != 2 ) throw new FS . ErrnoError ( 28 ) ; stream . position = stream . stream _ops . llseek ( stream , offset , whence ) ; stream . ungotten = [ ] ; return stream . position } , read : function ( stream , buffer , offset , length , position ) { if ( length < 0 || position < 0 ) throw new FS . ErrnoError ( 28 ) ; if ( FS . isClosed ( stream ) ) throw new FS . ErrnoError ( 8 ) ; if ( ( stream . flags & 2097155 ) === 1 ) throw new FS . ErrnoError ( 8 ) ; if ( FS . isDir ( stream . node . mode ) ) throw new FS . ErrnoError ( 31 ) ;
if ( ! stream . stream _ops . read ) throw new FS . ErrnoError ( 28 ) ; var seeking = typeof position != "undefined" ; if ( ! seeking ) position = stream . position ; else if ( ! stream . seekable ) throw new FS . ErrnoError ( 70 ) ; var bytesRead = stream . stream _ops . read ( stream , buffer , offset , length , position ) ; if ( ! seeking ) stream . position += bytesRead ; return bytesRead } , write : function ( stream , buffer , offset , length , position , canOwn ) { if ( length < 0 || position < 0 ) throw new FS . ErrnoError ( 28 ) ; if ( FS . isClosed ( stream ) ) throw new FS . ErrnoError ( 8 ) ; if ( ( stream . flags & 2097155 ) ===
0 ) throw new FS . ErrnoError ( 8 ) ; if ( FS . isDir ( stream . node . mode ) ) throw new FS . ErrnoError ( 31 ) ; if ( ! stream . stream _ops . write ) throw new FS . ErrnoError ( 28 ) ; if ( stream . seekable && stream . flags & 1024 ) FS . llseek ( stream , 0 , 2 ) ; var seeking = typeof position != "undefined" ; if ( ! seeking ) position = stream . position ; else if ( ! stream . seekable ) throw new FS . ErrnoError ( 70 ) ; var bytesWritten = stream . stream _ops . write ( stream , buffer , offset , length , position , canOwn ) ; if ( ! seeking ) stream . position += bytesWritten ; return bytesWritten } , allocate : function ( stream ,
offset , length ) { if ( FS . isClosed ( stream ) ) throw new FS . ErrnoError ( 8 ) ; if ( offset < 0 || length <= 0 ) throw new FS . ErrnoError ( 28 ) ; if ( ( stream . flags & 2097155 ) === 0 ) throw new FS . ErrnoError ( 8 ) ; if ( ! FS . isFile ( stream . node . mode ) && ! FS . isDir ( stream . node . mode ) ) throw new FS . ErrnoError ( 43 ) ; if ( ! stream . stream _ops . allocate ) throw new FS . ErrnoError ( 138 ) ; stream . stream _ops . allocate ( stream , offset , length ) } , mmap : function ( stream , length , position , prot , flags ) { if ( ( prot & 2 ) !== 0 && ( flags & 2 ) === 0 && ( stream . flags & 2097155 ) !== 2 ) throw new FS . ErrnoError ( 2 ) ;
if ( ( stream . flags & 2097155 ) === 1 ) throw new FS . ErrnoError ( 2 ) ; if ( ! stream . stream _ops . mmap ) throw new FS . ErrnoError ( 43 ) ; return stream . stream _ops . mmap ( stream , length , position , prot , flags ) } , msync : function ( stream , buffer , offset , length , mmapFlags ) { if ( ! stream . stream _ops . msync ) return 0 ; return stream . stream _ops . msync ( stream , buffer , offset , length , mmapFlags ) } , munmap : function ( stream ) { return 0 } , ioctl : function ( stream , cmd , arg ) { if ( ! stream . stream _ops . ioctl ) throw new FS . ErrnoError ( 59 ) ; return stream . stream _ops . ioctl ( stream , cmd ,
arg ) } , readFile : function ( path , opts ) { opts = opts === void 0 ? { } : opts ; opts . flags = opts . flags || 0 ; opts . encoding = opts . encoding || "binary" ; if ( opts . encoding !== "utf8" && opts . encoding !== "binary" ) throw new Error ( 'Invalid encoding type "' + opts . encoding + '"' ) ; var ret ; var stream = FS . open ( path , opts . flags ) ; var stat = FS . stat ( path ) ; var length = stat . size ; var buf = new Uint8Array ( length ) ; FS . read ( stream , buf , 0 , length , 0 ) ; if ( opts . encoding === "utf8" ) ret = UTF8ArrayToString ( buf , 0 ) ; else if ( opts . encoding === "binary" ) ret = buf ; FS . close ( stream ) ;
return ret } , writeFile : function ( path , data , opts ) { opts = opts === void 0 ? { } : opts ; opts . flags = opts . flags || 577 ; var stream = FS . open ( path , opts . flags , opts . mode ) ; if ( typeof data == "string" ) { var buf = new Uint8Array ( lengthBytesUTF8 ( data ) + 1 ) ; var actualNumBytes = stringToUTF8Array ( data , buf , 0 , buf . length ) ; FS . write ( stream , buf , 0 , actualNumBytes , undefined , opts . canOwn ) } else if ( ArrayBuffer . isView ( data ) ) FS . write ( stream , data , 0 , data . byteLength , undefined , opts . canOwn ) ; else throw new Error ( "Unsupported data type" ) ; FS . close ( stream ) } , cwd : function ( ) { return FS . currentPath } ,
chdir : function ( path ) { var lookup = FS . lookupPath ( path , { follow : true } ) ; if ( lookup . node === null ) throw new FS . ErrnoError ( 44 ) ; if ( ! FS . isDir ( lookup . node . mode ) ) throw new FS . ErrnoError ( 54 ) ; var errCode = FS . nodePermissions ( lookup . node , "x" ) ; if ( errCode ) throw new FS . ErrnoError ( errCode ) ; FS . currentPath = lookup . path } , createDefaultDirectories : function ( ) { FS . mkdir ( "/tmp" ) ; FS . mkdir ( "/home" ) ; FS . mkdir ( "/home/web_user" ) } , createDefaultDevices : function ( ) { FS . mkdir ( "/dev" ) ; FS . registerDevice ( FS . makedev ( 1 , 3 ) , { read : function ( ) { return 0 } ,
write : function ( stream , buffer , offset , length , pos ) { return length } } ) ; FS . mkdev ( "/dev/null" , FS . makedev ( 1 , 3 ) ) ; TTY . register ( FS . makedev ( 5 , 0 ) , TTY . default _tty _ops ) ; TTY . register ( FS . makedev ( 6 , 0 ) , TTY . default _tty1 _ops ) ; FS . mkdev ( "/dev/tty" , FS . makedev ( 5 , 0 ) ) ; FS . mkdev ( "/dev/tty1" , FS . makedev ( 6 , 0 ) ) ; var randomBuffer = new Uint8Array ( 1024 ) , randomLeft = 0 ; var randomByte = function ( ) { if ( randomLeft === 0 ) randomLeft = randomFill ( randomBuffer ) . byteLength ; return randomBuffer [ -- randomLeft ] } ; FS . createDevice ( "/dev" , "random" , randomByte ) ; FS . createDevice ( "/dev" ,
"urandom" , randomByte ) ; FS . mkdir ( "/dev/shm" ) ; FS . mkdir ( "/dev/shm/tmp" ) } , createSpecialDirectories : function ( ) { FS . mkdir ( "/proc" ) ; var proc _self = FS . mkdir ( "/proc/self" ) ; FS . mkdir ( "/proc/self/fd" ) ; FS . mount ( { mount : function ( ) { var node = FS . createNode ( proc _self , "fd" , 16384 | 511 , 73 ) ; node . node _ops = { lookup : function ( parent , name ) { var fd = + name ; var stream = FS . getStreamChecked ( fd ) ; var ret = { parent : null , mount : { mountpoint : "fake" } , node _ops : { readlink : function ( ) { return stream . path } } } ; ret . parent = ret ; return ret } } ; return node } } , { } ,
"/proc/self/fd" ) } , createStandardStreams : function ( ) { if ( Module [ "stdin" ] ) FS . createDevice ( "/dev" , "stdin" , Module [ "stdin" ] ) ; else FS . symlink ( "/dev/tty" , "/dev/stdin" ) ; if ( Module [ "stdout" ] ) FS . createDevice ( "/dev" , "stdout" , null , Module [ "stdout" ] ) ; else FS . symlink ( "/dev/tty" , "/dev/stdout" ) ; if ( Module [ "stderr" ] ) FS . createDevice ( "/dev" , "stderr" , null , Module [ "stderr" ] ) ; else FS . symlink ( "/dev/tty1" , "/dev/stderr" ) ; var stdin = FS . open ( "/dev/stdin" , 0 ) ; var stdout = FS . open ( "/dev/stdout" , 1 ) ; var stderr = FS . open ( "/dev/stderr" , 1 ) } ,
ensureErrnoError : function ( ) { if ( FS . ErrnoError ) return ; FS . ErrnoError = function ErrnoError ( errno , node ) { this . name = "ErrnoError" ; this . node = node ; this . setErrno = function ( errno ) { this . errno = errno } ; this . setErrno ( errno ) ; this . message = "FS error" } ; FS . ErrnoError . prototype = new Error ; FS . ErrnoError . prototype . constructor = FS . ErrnoError ; [ 44 ] . forEach ( function ( code ) { FS . genericErrors [ code ] = new FS . ErrnoError ( code ) ; FS . genericErrors [ code ] . stack = "<generic error, no stack>" } ) } , staticInit : function ( ) { FS . ensureErrnoError ( ) ; FS . nameTable =
new Array ( 4096 ) ; FS . mount ( MEMFS , { } , "/" ) ; FS . createDefaultDirectories ( ) ; FS . createDefaultDevices ( ) ; FS . createSpecialDirectories ( ) ; FS . filesystems = { "MEMFS" : MEMFS } } , init : function ( input , output , error ) { FS . init . initialized = true ; FS . ensureErrnoError ( ) ; Module [ "stdin" ] = input || Module [ "stdin" ] ; Module [ "stdout" ] = output || Module [ "stdout" ] ; Module [ "stderr" ] = error || Module [ "stderr" ] ; FS . createStandardStreams ( ) } , quit : function ( ) { FS . init . initialized = false ; for ( var i = 0 ; i < FS . streams . length ; i ++ ) { var stream = FS . streams [ i ] ; if ( ! stream ) continue ;
FS . close ( stream ) } } , findObject : function ( path , dontResolveLastLink ) { var ret = FS . analyzePath ( path , dontResolveLastLink ) ; if ( ! ret . exists ) return null ; return ret . object } , analyzePath : function ( path , dontResolveLastLink ) { try { var lookup = FS . lookupPath ( path , { follow : ! dontResolveLastLink } ) ; path = lookup . path } catch ( e ) { } var ret = { isRoot : false , exists : false , error : 0 , name : null , path : null , object : null , parentExists : false , parentPath : null , parentObject : null } ; try { var lookup = FS . lookupPath ( path , { parent : true } ) ; ret . parentExists = true ; ret . parentPath =
lookup . path ; ret . parentObject = lookup . node ; ret . name = PATH . basename ( path ) ; lookup = FS . lookupPath ( path , { follow : ! dontResolveLastLink } ) ; ret . exists = true ; ret . path = lookup . path ; ret . object = lookup . node ; ret . name = lookup . node . name ; ret . isRoot = lookup . path === "/" } catch ( e$4 ) { ret . error = e$4 . errno } return ret } , createPath : function ( parent , path , canRead , canWrite ) { parent = typeof parent == "string" ? parent : FS . getPath ( parent ) ; var parts = path . split ( "/" ) . reverse ( ) ; while ( parts . length ) { var part = parts . pop ( ) ; if ( ! part ) continue ; var current = PATH . join2 ( parent ,
part ) ; try { FS . mkdir ( current ) } catch ( e ) { } parent = current } return current } , createFile : function ( parent , name , properties , canRead , canWrite ) { var path = PATH . join2 ( typeof parent == "string" ? parent : FS . getPath ( parent ) , name ) ; var mode = FS _getMode ( canRead , canWrite ) ; return FS . create ( path , mode ) } , createDataFile : function ( parent , name , data , canRead , canWrite , canOwn ) { var path = name ; if ( parent ) { parent = typeof parent == "string" ? parent : FS . getPath ( parent ) ; path = name ? PATH . join2 ( parent , name ) : parent } var mode = FS _getMode ( canRead , canWrite ) ; var node =
FS . create ( path , mode ) ; if ( data ) { if ( typeof data == "string" ) { var arr = new Array ( data . length ) ; for ( var i = 0 , len = data . length ; i < len ; ++ i ) arr [ i ] = data . charCodeAt ( i ) ; data = arr } FS . chmod ( node , mode | 146 ) ; var stream = FS . open ( node , 577 ) ; FS . write ( stream , data , 0 , data . length , 0 , canOwn ) ; FS . close ( stream ) ; FS . chmod ( node , mode ) } return node } , createDevice : function ( parent , name , input , output ) { var path = PATH . join2 ( typeof parent == "string" ? parent : FS . getPath ( parent ) , name ) ; var mode = FS _getMode ( ! ! input , ! ! output ) ; if ( ! FS . createDevice . major ) FS . createDevice . major =
64 ; var dev = FS . makedev ( FS . createDevice . major ++ , 0 ) ; FS . registerDevice ( dev , { open : function ( stream ) { stream . seekable = false } , close : function ( stream ) { if ( output && output . buffer && output . buffer . length ) output ( 10 ) } , read : function ( stream , buffer , offset , length , pos ) { var bytesRead = 0 ; for ( var i = 0 ; i < length ; i ++ ) { var result ; try { result = input ( ) } catch ( e ) { throw new FS . ErrnoError ( 29 ) ; } if ( result === undefined && bytesRead === 0 ) throw new FS . ErrnoError ( 6 ) ; if ( result === null || result === undefined ) break ; bytesRead ++ ; buffer [ offset + i ] = result } if ( bytesRead ) stream . node . timestamp =
Date . now ( ) ; return bytesRead } , write : function ( stream , buffer , offset , length , pos ) { for ( var i = 0 ; i < length ; i ++ ) try { output ( buffer [ offset + i ] ) } catch ( e ) { throw new FS . ErrnoError ( 29 ) ; } if ( length ) stream . node . timestamp = Date . now ( ) ; return i } } ) ; return FS . mkdev ( path , mode , dev ) } , forceLoadFile : function ( obj ) { if ( obj . isDevice || obj . isFolder || obj . link || obj . contents ) return true ; if ( typeof XMLHttpRequest != "undefined" ) throw new Error ( "Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread." ) ;
else if ( read _ ) try { obj . contents = intArrayFromString ( read _ ( obj . url ) , true ) ; obj . usedBytes = obj . contents . length } catch ( e ) { throw new FS . ErrnoError ( 29 ) ; } else throw new Error ( "Cannot load without read() or XMLHttpRequest." ) ; } , createLazyFile : function ( parent , name , url , canRead , canWrite ) { function LazyUint8Array ( ) { this . lengthKnown = false ; this . chunks = [ ] } LazyUint8Array . prototype . get = function LazyUint8Array _get ( idx ) { if ( idx > this . length - 1 || idx < 0 ) return undefined ; var chunkOffset = idx % this . chunkSize ; var chunkNum = idx / this . chunkSize |
0 ; return this . getter ( chunkNum ) [ chunkOffset ] } ; LazyUint8Array . prototype . setDataGetter = function LazyUint8Array _setDataGetter ( getter ) { this . getter = getter } ; LazyUint8Array . prototype . cacheLength = function LazyUint8Array _cacheLength ( ) { var xhr = new XMLHttpRequest ; xhr . open ( "HEAD" , url , false ) ; xhr . send ( null ) ; if ( ! ( xhr . status >= 200 && xhr . status < 300 || xhr . status === 304 ) ) throw new Error ( "Couldn't load " + url + ". Status: " + xhr . status ) ; var datalength = Number ( xhr . getResponseHeader ( "Content-length" ) ) ; var header ; var hasByteServing =
( header = xhr . getResponseHeader ( "Accept-Ranges" ) ) && header === "bytes" ; var usesGzip = ( header = xhr . getResponseHeader ( "Content-Encoding" ) ) && header === "gzip" ; var chunkSize = 1024 * 1024 ; if ( ! hasByteServing ) chunkSize = datalength ; var doXHR = function ( from , to ) { if ( from > to ) throw new Error ( "invalid range (" + from + ", " + to + ") or no bytes requested!" ) ; if ( to > datalength - 1 ) throw new Error ( "only " + datalength + " bytes available! programmer error!" ) ; var xhr = new XMLHttpRequest ; xhr . open ( "GET" , url , false ) ; if ( datalength !== chunkSize ) xhr . setRequestHeader ( "Range" ,
"bytes=" + from + "-" + to ) ; xhr . responseType = "arraybuffer" ; if ( xhr . overrideMimeType ) xhr . overrideMimeType ( "text/plain; charset=x-user-defined" ) ; xhr . send ( null ) ; if ( ! ( xhr . status >= 200 && xhr . status < 300 || xhr . status === 304 ) ) throw new Error ( "Couldn't load " + url + ". Status: " + xhr . status ) ; if ( xhr . response !== undefined ) return new Uint8Array ( xhr . response || [ ] ) ; return intArrayFromString ( xhr . responseText || "" , true ) } ; var lazyArray = this ; lazyArray . setDataGetter ( function ( chunkNum ) { var start = chunkNum * chunkSize ; var end = ( chunkNum + 1 ) *
chunkSize - 1 ; end = Math . min ( end , datalength - 1 ) ; if ( typeof lazyArray . chunks [ chunkNum ] == "undefined" ) lazyArray . chunks [ chunkNum ] = doXHR ( start , end ) ; if ( typeof lazyArray . chunks [ chunkNum ] == "undefined" ) throw new Error ( "doXHR failed!" ) ; return lazyArray . chunks [ chunkNum ] } ) ; if ( usesGzip || ! datalength ) { chunkSize = datalength = 1 ; datalength = this . getter ( 0 ) . length ; chunkSize = datalength ; out ( "LazyFiles on gzip forces download of the whole file when length is accessed" ) } this . _length = datalength ; this . _chunkSize = chunkSize ; this . lengthKnown =
true } ; if ( typeof XMLHttpRequest != "undefined" ) { if ( ! ENVIRONMENT _IS _WORKER ) throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc" ; var lazyArray = new LazyUint8Array ; Object . defineProperties ( lazyArray , { length : { get : function ( ) { if ( ! this . lengthKnown ) this . cacheLength ( ) ; return this . _length } } , chunkSize : { get : function ( ) { if ( ! this . lengthKnown ) this . cacheLength ( ) ; return this . _chunkSize } } } ) ; var properties = { isDevice : false , contents : lazyArray } } else var properties =
{ isDevice : false , url : url } ; var node = FS . createFile ( parent , name , properties , canRead , canWrite ) ; if ( properties . contents ) node . contents = properties . contents ; else if ( properties . url ) { node . contents = null ; node . url = properties . url } Object . defineProperties ( node , { usedBytes : { get : function ( ) { return this . contents . length } } } ) ; var stream _ops = { } ; var keys = Object . keys ( node . stream _ops ) ; keys . forEach ( function ( key ) { var fn = node . stream _ops [ key ] ; stream _ops [ key ] = function forceLoadLazyFile ( ) { FS . forceLoadFile ( node ) ; return fn . apply ( null ,
arguments ) } } ) ; function writeChunks ( stream , buffer , offset , length , position ) { var contents = stream . node . contents ; if ( position >= contents . length ) return 0 ; var size = Math . min ( contents . length - position , length ) ; if ( contents . slice ) for ( var i = 0 ; i < size ; i ++ ) buffer [ offset + i ] = contents [ position + i ] ; else for ( var i = 0 ; i < size ; i ++ ) buffer [ offset + i ] = contents . get ( position + i ) ; return size } stream _ops . read = function ( stream , buffer , offset , length , position ) { FS . forceLoadFile ( node ) ; return writeChunks ( stream , buffer , offset , length , position ) } ;
stream _ops . mmap = function ( stream , length , position , prot , flags ) { FS . forceLoadFile ( node ) ; var ptr = mmapAlloc ( length ) ; if ( ! ptr ) throw new FS . ErrnoError ( 48 ) ; writeChunks ( stream , HEAP8 , ptr , length , position ) ; return { ptr : ptr , allocated : true } } ; node . stream _ops = stream _ops ; return node } } ;
var SYSCALLS = { DEFAULT _POLLMASK : 5 , calculateAt : function ( dirfd , path , allowEmpty ) { if ( PATH . isAbs ( path ) ) return path ; var dir ; if ( dirfd === - 100 ) dir = FS . cwd ( ) ; else { var dirstream = SYSCALLS . getStreamFromFD ( dirfd ) ; dir = dirstream . path } if ( path . length == 0 ) { if ( ! allowEmpty ) throw new FS . ErrnoError ( 44 ) ; return dir } return PATH . join2 ( dir , path ) } , doStat : function ( func , path , buf ) { try { var stat = func ( path ) } catch ( e ) { if ( e && e . node && PATH . normalize ( path ) !== PATH . normalize ( FS . getPath ( e . node ) ) ) return - 54 ; throw e ; } HEAP32 [ buf >> 2 ] = stat . dev ; HEAP32 [ buf +
4 >> 2 ] = stat . mode ; HEAPU32 [ buf + 8 >> 2 ] = stat . nlink ; HEAP32 [ buf + 12 >> 2 ] = stat . uid ; HEAP32 [ buf + 16 >> 2 ] = stat . gid ; HEAP32 [ buf + 20 >> 2 ] = stat . rdev ; tempI64 = [ stat . size >>> 0 , ( tempDouble = stat . size , + Math . abs ( tempDouble ) >= 1 ? tempDouble > 0 ? + Math . floor ( tempDouble / 4294967296 ) >>> 0 : ~ ~ + Math . ceil ( ( tempDouble - + ( ~ ~ tempDouble >>> 0 ) ) / 4294967296 ) >>> 0 : 0 ) ] , HEAP32 [ buf + 24 >> 2 ] = tempI64 [ 0 ] , HEAP32 [ buf + 28 >> 2 ] = tempI64 [ 1 ] ; HEAP32 [ buf + 32 >> 2 ] = 4096 ; HEAP32 [ buf + 36 >> 2 ] = stat . blocks ; var atime = stat . atime . getTime ( ) ; var mtime = stat . mtime . getTime ( ) ; var ctime = stat . ctime . getTime ( ) ;
tempI64 = [ Math . floor ( atime / 1E3 ) >>> 0 , ( tempDouble = Math . floor ( atime / 1E3 ) , + Math . abs ( tempDouble ) >= 1 ? tempDouble > 0 ? + Math . floor ( tempDouble / 4294967296 ) >>> 0 : ~ ~ + Math . ceil ( ( tempDouble - + ( ~ ~ tempDouble >>> 0 ) ) / 4294967296 ) >>> 0 : 0 ) ] , HEAP32 [ buf + 40 >> 2 ] = tempI64 [ 0 ] , HEAP32 [ buf + 44 >> 2 ] = tempI64 [ 1 ] ; HEAPU32 [ buf + 48 >> 2 ] = atime % 1E3 * 1E3 ; tempI64 = [ Math . floor ( mtime / 1E3 ) >>> 0 , ( tempDouble = Math . floor ( mtime / 1E3 ) , + Math . abs ( tempDouble ) >= 1 ? tempDouble > 0 ? + Math . floor ( tempDouble / 4294967296 ) >>> 0 : ~ ~ + Math . ceil ( ( tempDouble - + ( ~ ~ tempDouble >>> 0 ) ) / 4294967296 ) >>>
0 : 0 ) ] , HEAP32 [ buf + 56 >> 2 ] = tempI64 [ 0 ] , HEAP32 [ buf + 60 >> 2 ] = tempI64 [ 1 ] ; HEAPU32 [ buf + 64 >> 2 ] = mtime % 1E3 * 1E3 ; tempI64 = [ Math . floor ( ctime / 1E3 ) >>> 0 , ( tempDouble = Math . floor ( ctime / 1E3 ) , + Math . abs ( tempDouble ) >= 1 ? tempDouble > 0 ? + Math . floor ( tempDouble / 4294967296 ) >>> 0 : ~ ~ + Math . ceil ( ( tempDouble - + ( ~ ~ tempDouble >>> 0 ) ) / 4294967296 ) >>> 0 : 0 ) ] , HEAP32 [ buf + 72 >> 2 ] = tempI64 [ 0 ] , HEAP32 [ buf + 76 >> 2 ] = tempI64 [ 1 ] ; HEAPU32 [ buf + 80 >> 2 ] = ctime % 1E3 * 1E3 ; tempI64 = [ stat . ino >>> 0 , ( tempDouble = stat . ino , + Math . abs ( tempDouble ) >= 1 ? tempDouble > 0 ? + Math . floor ( tempDouble /
4294967296 ) >>> 0 : ~ ~ + Math . ceil ( ( tempDouble - + ( ~ ~ tempDouble >>> 0 ) ) / 4294967296 ) >>> 0 : 0 ) ] , HEAP32 [ buf + 88 >> 2 ] = tempI64 [ 0 ] , HEAP32 [ buf + 92 >> 2 ] = tempI64 [ 1 ] ; return 0 } , doMsync : function ( addr , stream , len , flags , offset ) { if ( ! FS . isFile ( stream . node . mode ) ) throw new FS . ErrnoError ( 43 ) ; if ( flags & 2 ) return 0 ; var buffer = HEAPU8 . slice ( addr , addr + len ) ; FS . msync ( stream , buffer , offset , len , flags ) } , varargs : undefined , get : function ( ) { SYSCALLS . varargs += 4 ; var ret = HEAP32 [ SYSCALLS . varargs - 4 >> 2 ] ; return ret } , getStr : function ( ptr ) { var ret = UTF8ToString ( ptr ) ;
return ret } , getStreamFromFD : function ( fd ) { var stream = FS . getStreamChecked ( fd ) ; return stream } } ;
function _ _ _syscall _fcntl64 ( fd , cmd , varargs ) { SYSCALLS . varargs = varargs ; try { var stream = SYSCALLS . getStreamFromFD ( fd ) ; switch ( cmd ) { case 0 : { var arg = SYSCALLS . get ( ) ; if ( arg < 0 ) return - 28 ; var newStream ; newStream = FS . createStream ( stream , arg ) ; return newStream . fd } case 1 : case 2 : return 0 ; case 3 : return stream . flags ; case 4 : { var arg = SYSCALLS . get ( ) ; stream . flags |= arg ; return 0 } case 5 : { var arg = SYSCALLS . get ( ) ; var offset = 0 ; HEAP16 [ arg + offset >> 1 ] = 2 ; return 0 } case 6 : case 7 : return 0 ; case 16 : case 8 : return - 28 ; case 9 : setErrNo ( 28 ) ; return - 1 ;
default : { return - 28 } } } catch ( e ) { if ( typeof FS == "undefined" || ! ( e . name === "ErrnoError" ) ) throw e ; return - e . errno } }
function _ _ _syscall _ioctl ( fd , op , varargs ) { SYSCALLS . varargs = varargs ; try { var stream = SYSCALLS . getStreamFromFD ( fd ) ; switch ( op ) { case 21509 : { if ( ! stream . tty ) return - 59 ; return 0 } case 21505 : { if ( ! stream . tty ) return - 59 ; if ( stream . tty . ops . ioctl _tcgets ) { var termios = stream . tty . ops . ioctl _tcgets ( stream ) ; var argp = SYSCALLS . get ( ) ; HEAP32 [ argp >> 2 ] = termios . c _iflag || 0 ; HEAP32 [ argp + 4 >> 2 ] = termios . c _oflag || 0 ; HEAP32 [ argp + 8 >> 2 ] = termios . c _cflag || 0 ; HEAP32 [ argp + 12 >> 2 ] = termios . c _lflag || 0 ; for ( var i = 0 ; i < 32 ; i ++ ) HEAP8 [ argp + i + 17 >> 0 ] = termios . c _cc [ i ] ||
0 ; return 0 } return 0 } case 21510 : case 21511 : case 21512 : { if ( ! stream . tty ) return - 59 ; return 0 } case 21506 : case 21507 : case 21508 : { if ( ! stream . tty ) return - 59 ; if ( stream . tty . ops . ioctl _tcsets ) { var argp = SYSCALLS . get ( ) ; var c _iflag = HEAP32 [ argp >> 2 ] ; var c _oflag = HEAP32 [ argp + 4 >> 2 ] ; var c _cflag = HEAP32 [ argp + 8 >> 2 ] ; var c _lflag = HEAP32 [ argp + 12 >> 2 ] ; var c _cc = [ ] ; for ( var i = 0 ; i < 32 ; i ++ ) c _cc . push ( HEAP8 [ argp + i + 17 >> 0 ] ) ; return stream . tty . ops . ioctl _tcsets ( stream . tty , op , { c _iflag : c _iflag , c _oflag : c _oflag , c _cflag : c _cflag , c _lflag : c _lflag , c _cc : c _cc } ) } return 0 } case 21519 : { if ( ! stream . tty ) return - 59 ;
var argp = SYSCALLS . get ( ) ; HEAP32 [ argp >> 2 ] = 0 ; return 0 } case 21520 : { if ( ! stream . tty ) return - 59 ; return - 28 } case 21531 : { var argp = SYSCALLS . get ( ) ; return FS . ioctl ( stream , op , argp ) } case 21523 : { if ( ! stream . tty ) return - 59 ; if ( stream . tty . ops . ioctl _tiocgwinsz ) { var winsize = stream . tty . ops . ioctl _tiocgwinsz ( stream . tty ) ; var argp = SYSCALLS . get ( ) ; HEAP16 [ argp >> 1 ] = winsize [ 0 ] ; HEAP16 [ argp + 2 >> 1 ] = winsize [ 1 ] } return 0 } case 21524 : { if ( ! stream . tty ) return - 59 ; return 0 } case 21515 : { if ( ! stream . tty ) return - 59 ; return 0 } default : return - 28 } } catch ( e ) { if ( typeof FS ==
"undefined" || ! ( e . name === "ErrnoError" ) ) throw e ; return - e . errno } } function _ _ _syscall _openat ( dirfd , path , flags , varargs ) { SYSCALLS . varargs = varargs ; try { path = SYSCALLS . getStr ( path ) ; path = SYSCALLS . calculateAt ( dirfd , path ) ; var mode = varargs ? SYSCALLS . get ( ) : 0 ; return FS . open ( path , flags , mode ) . fd } catch ( e ) { if ( typeof FS == "undefined" || ! ( e . name === "ErrnoError" ) ) throw e ; return - e . errno } } var nowIsMonotonic = typeof performance == "object" && performance && typeof performance [ "now" ] == "function" ;
var _ _emscripten _get _now _is _monotonic = function ( ) { return nowIsMonotonic } ; function readI53FromI64 ( ptr ) { return HEAPU32 [ ptr >> 2 ] + HEAP32 [ ptr + 4 >> 2 ] * 4294967296 } var isLeapYear = function ( year ) { return year % 4 === 0 && ( year % 100 !== 0 || year % 400 === 0 ) } ; var MONTH _DAYS _LEAP _CUMULATIVE = [ 0 , 31 , 60 , 91 , 121 , 152 , 182 , 213 , 244 , 274 , 305 , 335 ] ; var MONTH _DAYS _REGULAR _CUMULATIVE = [ 0 , 31 , 59 , 90 , 120 , 151 , 181 , 212 , 243 , 273 , 304 , 334 ] ;
var ydayFromDate = function ( date ) { var leap = isLeapYear ( date . getFullYear ( ) ) ; var monthDaysCumulative = leap ? MONTH _DAYS _LEAP _CUMULATIVE : MONTH _DAYS _REGULAR _CUMULATIVE ; var yday = monthDaysCumulative [ date . getMonth ( ) ] + date . getDate ( ) - 1 ; return yday } ;
var _ _localtime _js = function ( time , tmPtr ) { var date = new Date ( readI53FromI64 ( time ) * 1E3 ) ; HEAP32 [ tmPtr >> 2 ] = date . getSeconds ( ) ; HEAP32 [ tmPtr + 4 >> 2 ] = date . getMinutes ( ) ; HEAP32 [ tmPtr + 8 >> 2 ] = date . getHours ( ) ; HEAP32 [ tmPtr + 12 >> 2 ] = date . getDate ( ) ; HEAP32 [ tmPtr + 16 >> 2 ] = date . getMonth ( ) ; HEAP32 [ tmPtr + 20 >> 2 ] = date . getFullYear ( ) - 1900 ; HEAP32 [ tmPtr + 24 >> 2 ] = date . getDay ( ) ; var yday = ydayFromDate ( date ) | 0 ; HEAP32 [ tmPtr + 28 >> 2 ] = yday ; HEAP32 [ tmPtr + 36 >> 2 ] = - ( date . getTimezoneOffset ( ) * 60 ) ; var start = new Date ( date . getFullYear ( ) , 0 , 1 ) ; var summerOffset =
( new Date ( date . getFullYear ( ) , 6 , 1 ) ) . getTimezoneOffset ( ) ; var winterOffset = start . getTimezoneOffset ( ) ; var dst = ( summerOffset != winterOffset && date . getTimezoneOffset ( ) == Math . min ( winterOffset , summerOffset ) ) | 0 ; HEAP32 [ tmPtr + 32 >> 2 ] = dst } ; var stringToUTF8 = function ( str , outPtr , maxBytesToWrite ) { return stringToUTF8Array ( str , HEAPU8 , outPtr , maxBytesToWrite ) } ; var stringToNewUTF8 = function ( str ) { var size = lengthBytesUTF8 ( str ) + 1 ; var ret = _malloc ( size ) ; if ( ret ) stringToUTF8 ( str , ret , size ) ; return ret } ;
var _ _tzset _js = function ( timezone , daylight , tzname ) { var currentYear = ( new Date ) . getFullYear ( ) ; var winter = new Date ( currentYear , 0 , 1 ) ; var summer = new Date ( currentYear , 6 , 1 ) ; var winterOffset = winter . getTimezoneOffset ( ) ; var summerOffset = summer . getTimezoneOffset ( ) ; var stdTimezoneOffset = Math . max ( winterOffset , summerOffset ) ; HEAPU32 [ timezone >> 2 ] = stdTimezoneOffset * 60 ; HEAP32 [ daylight >> 2 ] = Number ( winterOffset != summerOffset ) ; function extractZone ( date ) { var match = date . toTimeString ( ) . match ( /\(([A-Za-z ]+)\)$/ ) ; return match ?
match [ 1 ] : "GMT" } var winterName = extractZone ( winter ) ; var summerName = extractZone ( summer ) ; var winterNamePtr = stringToNewUTF8 ( winterName ) ; var summerNamePtr = stringToNewUTF8 ( summerName ) ; if ( summerOffset < winterOffset ) { HEAPU32 [ tzname >> 2 ] = winterNamePtr ; HEAPU32 [ tzname + 4 >> 2 ] = summerNamePtr } else { HEAPU32 [ tzname >> 2 ] = summerNamePtr ; HEAPU32 [ tzname + 4 >> 2 ] = winterNamePtr } } ; var _abort = function ( ) { abort ( "" ) } ; var readEmAsmArgsArray = [ ] ;
var readEmAsmArgs = function ( sigPtr , buf ) { readEmAsmArgsArray . length = 0 ; var ch ; buf >>= 2 ; while ( ch = HEAPU8 [ sigPtr ++ ] ) { buf += ch != 105 & buf ; readEmAsmArgsArray . push ( ch == 105 ? HEAP32 [ buf ] : HEAPF64 [ buf ++ >> 1 ] ) ; ++ buf } return readEmAsmArgsArray } ; var runEmAsmFunction = function ( code , sigPtr , argbuf ) { var args = readEmAsmArgs ( sigPtr , argbuf ) ; return ASM _CONSTS [ code ] . apply ( null , args ) } ; var _emscripten _asm _const _int = function ( code , sigPtr , argbuf ) { return runEmAsmFunction ( code , sigPtr , argbuf ) } ;
function _emscripten _date _now ( ) { return Date . now ( ) } var _emscripten _get _now ; if ( typeof performance != "undefined" && performance . now ) _emscripten _get _now = function ( ) { return performance . now ( ) } ; else _emscripten _get _now = Date . now ; var _emscripten _memcpy _big = Uint8Array . prototype . copyWithin ? function ( dest , src , num ) { return HEAPU8 . copyWithin ( dest , src , src + num ) } : function ( dest , src , num ) { return HEAPU8 . set ( HEAPU8 . subarray ( src , src + num ) , dest ) } ; var getHeapMax = function ( ) { return 268435456 } ;
var growMemory = function ( size ) { var b = wasmMemory . buffer ; var pages = size - b . byteLength + 65535 >>> 16 ; try { wasmMemory . grow ( pages ) ; updateMemoryViews ( ) ; return 1 } catch ( e ) { } } ;
var _emscripten _resize _heap = function ( requestedSize ) { var oldSize = HEAPU8 . length ; requestedSize = requestedSize >>> 0 ; var maxHeapSize = getHeapMax ( ) ; if ( requestedSize > maxHeapSize ) return false ; var alignUp = function ( x , multiple ) { return x + ( multiple - x % multiple ) % multiple } ; for ( var cutDown = 1 ; cutDown <= 4 ; cutDown *= 2 ) { var overGrownHeapSize = oldSize * ( 1 + . 2 / cutDown ) ; overGrownHeapSize = Math . min ( overGrownHeapSize , requestedSize + 100663296 ) ; var newSize = Math . min ( maxHeapSize , alignUp ( Math . max ( requestedSize , overGrownHeapSize ) , 65536 ) ) ;
var replacement = growMemory ( newSize ) ; if ( replacement ) return true } return false } ; function _fd _close ( fd ) { try { var stream = SYSCALLS . getStreamFromFD ( fd ) ; FS . close ( stream ) ; return 0 } catch ( e ) { if ( typeof FS == "undefined" || ! ( e . name === "ErrnoError" ) ) throw e ; return e . errno } }
var doReadv = function ( stream , iov , iovcnt , offset ) { var ret = 0 ; for ( var i = 0 ; i < iovcnt ; i ++ ) { var ptr = HEAPU32 [ iov >> 2 ] ; var len = HEAPU32 [ iov + 4 >> 2 ] ; iov += 8 ; var curr = FS . read ( stream , HEAP8 , ptr , len , offset ) ; if ( curr < 0 ) return - 1 ; ret += curr ; if ( curr < len ) break ; if ( typeof offset !== "undefined" ) offset += curr } return ret } ;
function _fd _read ( fd , iov , iovcnt , pnum ) { try { var stream = SYSCALLS . getStreamFromFD ( fd ) ; var num = doReadv ( stream , iov , iovcnt ) ; HEAPU32 [ pnum >> 2 ] = num ; return 0 } catch ( e ) { if ( typeof FS == "undefined" || ! ( e . name === "ErrnoError" ) ) throw e ; return e . errno } } function convertI32PairToI53Checked ( lo , hi ) { return hi + 2097152 >>> 0 < 4194305 - ! ! lo ? ( lo >>> 0 ) + hi * 4294967296 : NaN }
function _fd _seek ( fd , offset _low , offset _high , whence , newOffset ) { try { var offset = convertI32PairToI53Checked ( offset _low , offset _high ) ; if ( isNaN ( offset ) ) return 61 ; var stream = SYSCALLS . getStreamFromFD ( fd ) ; FS . llseek ( stream , offset , whence ) ; tempI64 = [ stream . position >>> 0 , ( tempDouble = stream . position , + Math . abs ( tempDouble ) >= 1 ? tempDouble > 0 ? + Math . floor ( tempDouble / 4294967296 ) >>> 0 : ~ ~ + Math . ceil ( ( tempDouble - + ( ~ ~ tempDouble >>> 0 ) ) / 4294967296 ) >>> 0 : 0 ) ] , HEAP32 [ newOffset >> 2 ] = tempI64 [ 0 ] , HEAP32 [ newOffset + 4 >> 2 ] = tempI64 [ 1 ] ; if ( stream . getdents &&
offset === 0 && whence === 0 ) stream . getdents = null ; return 0 } catch ( e ) { if ( typeof FS == "undefined" || ! ( e . name === "ErrnoError" ) ) throw e ; return e . errno } } var doWritev = function ( stream , iov , iovcnt , offset ) { var ret = 0 ; for ( var i = 0 ; i < iovcnt ; i ++ ) { var ptr = HEAPU32 [ iov >> 2 ] ; var len = HEAPU32 [ iov + 4 >> 2 ] ; iov += 8 ; var curr = FS . write ( stream , HEAP8 , ptr , len , offset ) ; if ( curr < 0 ) return - 1 ; ret += curr ; if ( typeof offset !== "undefined" ) offset += curr } return ret } ;
function _fd _write ( fd , iov , iovcnt , pnum ) { try { var stream = SYSCALLS . getStreamFromFD ( fd ) ; var num = doWritev ( stream , iov , iovcnt ) ; HEAPU32 [ pnum >> 2 ] = num ; return 0 } catch ( e ) { if ( typeof FS == "undefined" || ! ( e . name === "ErrnoError" ) ) throw e ; return e . errno } } var writeArrayToMemory = function ( array , buffer ) { HEAP8 . set ( array , buffer ) } ;
var FSNode = function ( parent , name , mode , rdev ) { if ( ! parent ) parent = this ; this . parent = parent ; this . mount = parent . mount ; this . mounted = null ; this . id = FS . nextInode ++ ; this . name = name ; this . mode = mode ; this . node _ops = { } ; this . stream _ops = { } ; this . rdev = rdev } ; var readMode = 292 | 73 ; var writeMode = 146 ;
Object . defineProperties ( FSNode . prototype , { read : { get : function ( ) { return ( this . mode & readMode ) === readMode } , set : function ( val ) { val ? this . mode |= readMode : this . mode &= ~ readMode } } , write : { get : function ( ) { return ( this . mode & writeMode ) === writeMode } , set : function ( val ) { val ? this . mode |= writeMode : this . mode &= ~ writeMode } } , isFolder : { get : function ( ) { return FS . isDir ( this . mode ) } } , isDevice : { get : function ( ) { return FS . isChrdev ( this . mode ) } } } ) ; FS . FSNode = FSNode ; FS . createPreloadedFile = FS _createPreloadedFile ; FS . staticInit ( ) ;
var wasmImports = { "PostMpStreamOffsetCBFun" : PostMpStreamOffsetCBFun , "RunTimeInfoCBFun" : RunTimeInfoCBFun , "StreamInfoCBFun" : StreamInfoCBFun , "__assert_fail" : _ _ _assert _fail , "__cxa_throw" : _ _ _cxa _throw , "__syscall_fcntl64" : _ _ _syscall _fcntl64 , "__syscall_ioctl" : _ _ _syscall _ioctl , "__syscall_openat" : _ _ _syscall _openat , "_emscripten_get_now_is_monotonic" : _ _emscripten _get _now _is _monotonic , "_localtime_js" : _ _localtime _js , "_tzset_js" : _ _tzset _js , "abort" : _abort , "additionDataCBFun" : additionDataCBFun , "emscripten_asm_const_int" : _emscripten _asm _const _int ,
"emscripten_date_now" : _emscripten _date _now , "emscripten_get_now" : _emscripten _get _now , "emscripten_memcpy_big" : _emscripten _memcpy _big , "emscripten_resize_heap" : _emscripten _resize _heap , "fd_close" : _fd _close , "fd_read" : _fd _read , "fd_seek" : _fd _seek , "fd_write" : _fd _write } ; var asm = createWasm ( ) ; var _ _ _wasm _call _ctors = function ( ) { return ( _ _ _wasm _call _ctors = Module [ "asm" ] [ "__wasm_call_ctors" ] ) . apply ( null , arguments ) } ;
var _GetFrameInfo = Module [ "_GetFrameInfo" ] = function ( ) { return ( _GetFrameInfo = Module [ "_GetFrameInfo" ] = Module [ "asm" ] [ "GetFrameInfo" ] ) . apply ( null , arguments ) } ; var _GetRawDataInfo = Module [ "_GetRawDataInfo" ] = function ( ) { return ( _GetRawDataInfo = Module [ "_GetRawDataInfo" ] = Module [ "asm" ] [ "GetRawDataInfo" ] ) . apply ( null , arguments ) } ; var _GetPort = Module [ "_GetPort" ] = function ( ) { return ( _GetPort = Module [ "_GetPort" ] = Module [ "asm" ] [ "GetPort" ] ) . apply ( null , arguments ) } ;
var _FreePort = Module [ "_FreePort" ] = function ( ) { return ( _FreePort = Module [ "_FreePort" ] = Module [ "asm" ] [ "FreePort" ] ) . apply ( null , arguments ) } ; var _SetDemuxModel = Module [ "_SetDemuxModel" ] = function ( ) { return ( _SetDemuxModel = Module [ "_SetDemuxModel" ] = Module [ "asm" ] [ "SetDemuxModel" ] ) . apply ( null , arguments ) } ; var _SkipErrorData = Module [ "_SkipErrorData" ] = function ( ) { return ( _SkipErrorData = Module [ "_SkipErrorData" ] = Module [ "asm" ] [ "SkipErrorData" ] ) . apply ( null , arguments ) } ;
var _SetDecodeERC = Module [ "_SetDecodeERC" ] = function ( ) { return ( _SetDecodeERC = Module [ "_SetDecodeERC" ] = Module [ "asm" ] [ "SetDecodeERC" ] ) . apply ( null , arguments ) } ; var _Play = Module [ "_Play" ] = function ( ) { return ( _Play = Module [ "_Play" ] = Module [ "asm" ] [ "Play" ] ) . apply ( null , arguments ) } ; var _PlaySound = Module [ "_PlaySound" ] = function ( ) { return ( _PlaySound = Module [ "_PlaySound" ] = Module [ "asm" ] [ "PlaySound" ] ) . apply ( null , arguments ) } ;
var _StopSound = Module [ "_StopSound" ] = function ( ) { return ( _StopSound = Module [ "_StopSound" ] = Module [ "asm" ] [ "StopSound" ] ) . apply ( null , arguments ) } ; var _SetVolume = Module [ "_SetVolume" ] = function ( ) { return ( _SetVolume = Module [ "_SetVolume" ] = Module [ "asm" ] [ "SetVolume" ] ) . apply ( null , arguments ) } ; var _GetVolume = Module [ "_GetVolume" ] = function ( ) { return ( _GetVolume = Module [ "_GetVolume" ] = Module [ "asm" ] [ "GetVolume" ] ) . apply ( null , arguments ) } ;
var _OnlyPlaySound = Module [ "_OnlyPlaySound" ] = function ( ) { return ( _OnlyPlaySound = Module [ "_OnlyPlaySound" ] = Module [ "asm" ] [ "OnlyPlaySound" ] ) . apply ( null , arguments ) } ; var _Pause = Module [ "_Pause" ] = function ( ) { return ( _Pause = Module [ "_Pause" ] = Module [ "asm" ] [ "Pause" ] ) . apply ( null , arguments ) } ; var _SetANRParam = Module [ "_SetANRParam" ] = function ( ) { return ( _SetANRParam = Module [ "_SetANRParam" ] = Module [ "asm" ] [ "SetANRParam" ] ) . apply ( null , arguments ) } ;
var _SetPrintLogFlag = Module [ "_SetPrintLogFlag" ] = function ( ) { return ( _SetPrintLogFlag = Module [ "_SetPrintLogFlag" ] = Module [ "asm" ] [ "SetPrintLogFlag" ] ) . apply ( null , arguments ) } ; var _SetStreamOpenMode = Module [ "_SetStreamOpenMode" ] = function ( ) { return ( _SetStreamOpenMode = Module [ "_SetStreamOpenMode" ] = Module [ "asm" ] [ "SetStreamOpenMode" ] ) . apply ( null , arguments ) } ; var _OpenStream = Module [ "_OpenStream" ] = function ( ) { return ( _OpenStream = Module [ "_OpenStream" ] = Module [ "asm" ] [ "OpenStream" ] ) . apply ( null , arguments ) } ;
var _InputData = Module [ "_InputData" ] = function ( ) { return ( _InputData = Module [ "_InputData" ] = Module [ "asm" ] [ "InputData" ] ) . apply ( null , arguments ) } ; var _SetDecodeFrameType = Module [ "_SetDecodeFrameType" ] = function ( ) { return ( _SetDecodeFrameType = Module [ "_SetDecodeFrameType" ] = Module [ "asm" ] [ "SetDecodeFrameType" ] ) . apply ( null , arguments ) } ; var _SetGlobalBaseTime = Module [ "_SetGlobalBaseTime" ] = function ( ) { return ( _SetGlobalBaseTime = Module [ "_SetGlobalBaseTime" ] = Module [ "asm" ] [ "SetGlobalBaseTime" ] ) . apply ( null , arguments ) } ;
var _GetFrameData = Module [ "_GetFrameData" ] = function ( ) { return ( _GetFrameData = Module [ "_GetFrameData" ] = Module [ "asm" ] [ "GetFrameData" ] ) . apply ( null , arguments ) } ; var _SetPlayRate = Module [ "_SetPlayRate" ] = function ( ) { return ( _SetPlayRate = Module [ "_SetPlayRate" ] = Module [ "asm" ] [ "SetPlayRate" ] ) . apply ( null , arguments ) } ; var _GetFrameBuffer = Module [ "_GetFrameBuffer" ] = function ( ) { return ( _GetFrameBuffer = Module [ "_GetFrameBuffer" ] = Module [ "asm" ] [ "GetFrameBuffer" ] ) . apply ( null , arguments ) } ;
var _GetRawDataBuffer = Module [ "_GetRawDataBuffer" ] = function ( ) { return ( _GetRawDataBuffer = Module [ "_GetRawDataBuffer" ] = Module [ "asm" ] [ "GetRawDataBuffer" ] ) . apply ( null , arguments ) } ; var _CloseStream = Module [ "_CloseStream" ] = function ( ) { return ( _CloseStream = Module [ "_CloseStream" ] = Module [ "asm" ] [ "CloseStream" ] ) . apply ( null , arguments ) } ; var _Stop = Module [ "_Stop" ] = function ( ) { return ( _Stop = Module [ "_Stop" ] = Module [ "asm" ] [ "Stop" ] ) . apply ( null , arguments ) } ;
var _SetSecretKey = Module [ "_SetSecretKey" ] = function ( ) { return ( _SetSecretKey = Module [ "_SetSecretKey" ] = Module [ "asm" ] [ "SetSecretKey" ] ) . apply ( null , arguments ) } ; var _GetJPEG = Module [ "_GetJPEG" ] = function ( ) { return ( _GetJPEG = Module [ "_GetJPEG" ] = Module [ "asm" ] [ "GetJPEG" ] ) . apply ( null , arguments ) } ; var _GetBMP = Module [ "_GetBMP" ] = function ( ) { return ( _GetBMP = Module [ "_GetBMP" ] = Module [ "asm" ] [ "GetBMP" ] ) . apply ( null , arguments ) } ;
var _SetIFrameDecInterval = Module [ "_SetIFrameDecInterval" ] = function ( ) { return ( _SetIFrameDecInterval = Module [ "_SetIFrameDecInterval" ] = Module [ "asm" ] [ "SetIFrameDecInterval" ] ) . apply ( null , arguments ) } ; var _SetLostFrameMode = Module [ "_SetLostFrameMode" ] = function ( ) { return ( _SetLostFrameMode = Module [ "_SetLostFrameMode" ] = Module [ "asm" ] [ "SetLostFrameMode" ] ) . apply ( null , arguments ) } ;
var _GetLastError = Module [ "_GetLastError" ] = function ( ) { return ( _GetLastError = Module [ "_GetLastError" ] = Module [ "asm" ] [ "GetLastError" ] ) . apply ( null , arguments ) } ; var _SetResampleValue = Module [ "_SetResampleValue" ] = function ( ) { return ( _SetResampleValue = Module [ "_SetResampleValue" ] = Module [ "asm" ] [ "SetResampleValue" ] ) . apply ( null , arguments ) } ;
var _GetSourceBufferRemain = Module [ "_GetSourceBufferRemain" ] = function ( ) { return ( _GetSourceBufferRemain = Module [ "_GetSourceBufferRemain" ] = Module [ "asm" ] [ "GetSourceBufferRemain" ] ) . apply ( null , arguments ) } ; var _SetRunTimeInfoCallBackEx = Module [ "_SetRunTimeInfoCallBackEx" ] = function ( ) { return ( _SetRunTimeInfoCallBackEx = Module [ "_SetRunTimeInfoCallBackEx" ] = Module [ "asm" ] [ "SetRunTimeInfoCallBackEx" ] ) . apply ( null , arguments ) } ;
var _SetRunTimeInfoCallbackType = Module [ "_SetRunTimeInfoCallbackType" ] = function ( ) { return ( _SetRunTimeInfoCallbackType = Module [ "_SetRunTimeInfoCallbackType" ] = Module [ "asm" ] [ "SetRunTimeInfoCallbackType" ] ) . apply ( null , arguments ) } ; var _SetPostMpStreamOffsetCallBack = Module [ "_SetPostMpStreamOffsetCallBack" ] = function ( ) { return ( _SetPostMpStreamOffsetCallBack = Module [ "_SetPostMpStreamOffsetCallBack" ] = Module [ "asm" ] [ "SetPostMpStreamOffsetCallBack" ] ) . apply ( null , arguments ) } ;
var _SetStreamInfoCallBack = Module [ "_SetStreamInfoCallBack" ] = function ( ) { return ( _SetStreamInfoCallBack = Module [ "_SetStreamInfoCallBack" ] = Module [ "asm" ] [ "SetStreamInfoCallBack" ] ) . apply ( null , arguments ) } ; var _SetAdditionDataCallBack = Module [ "_SetAdditionDataCallBack" ] = function ( ) { return ( _SetAdditionDataCallBack = Module [ "_SetAdditionDataCallBack" ] = Module [ "asm" ] [ "SetAdditionDataCallBack" ] ) . apply ( null , arguments ) } ;
var _JSPlayM4 _GetPlayedTimeEx = Module [ "_JSPlayM4_GetPlayedTimeEx" ] = function ( ) { return ( _JSPlayM4 _GetPlayedTimeEx = Module [ "_JSPlayM4_GetPlayedTimeEx" ] = Module [ "asm" ] [ "JSPlayM4_GetPlayedTimeEx" ] ) . apply ( null , arguments ) } ; var _JSPlayM4 _GetFileTime = Module [ "_JSPlayM4_GetFileTime" ] = function ( ) { return ( _JSPlayM4 _GetFileTime = Module [ "_JSPlayM4_GetFileTime" ] = Module [ "asm" ] [ "JSPlayM4_GetFileTime" ] ) . apply ( null , arguments ) } ;
var _JSPlayM4 _GetMpOffset = Module [ "_JSPlayM4_GetMpOffset" ] = function ( ) { return ( _JSPlayM4 _GetMpOffset = Module [ "_JSPlayM4_GetMpOffset" ] = Module [ "asm" ] [ "JSPlayM4_GetMpOffset" ] ) . apply ( null , arguments ) } ; var _JSPlayM4 _ResetBuffer = Module [ "_JSPlayM4_ResetBuffer" ] = function ( ) { return ( _JSPlayM4 _ResetBuffer = Module [ "_JSPlayM4_ResetBuffer" ] = Module [ "asm" ] [ "JSPlayM4_ResetBuffer" ] ) . apply ( null , arguments ) } ;
var _GetSDKVersion = Module [ "_GetSDKVersion" ] = function ( ) { return ( _GetSDKVersion = Module [ "_GetSDKVersion" ] = Module [ "asm" ] [ "GetSDKVersion" ] ) . apply ( null , arguments ) } ; var _GetBuildDate = Module [ "_GetBuildDate" ] = function ( ) { return ( _GetBuildDate = Module [ "_GetBuildDate" ] = Module [ "asm" ] [ "GetBuildDate" ] ) . apply ( null , arguments ) } ; var _ _ _errno _location = function ( ) { return ( _ _ _errno _location = Module [ "asm" ] [ "__errno_location" ] ) . apply ( null , arguments ) } ;
var _malloc = Module [ "_malloc" ] = function ( ) { return ( _malloc = Module [ "_malloc" ] = Module [ "asm" ] [ "malloc" ] ) . apply ( null , arguments ) } ; var _free = Module [ "_free" ] = function ( ) { return ( _free = Module [ "_free" ] = Module [ "asm" ] [ "free" ] ) . apply ( null , arguments ) } ; var stackSave = function ( ) { return ( stackSave = Module [ "asm" ] [ "stackSave" ] ) . apply ( null , arguments ) } ; var stackRestore = function ( ) { return ( stackRestore = Module [ "asm" ] [ "stackRestore" ] ) . apply ( null , arguments ) } ;
var stackAlloc = function ( ) { return ( stackAlloc = Module [ "asm" ] [ "stackAlloc" ] ) . apply ( null , arguments ) } ; var _ _ _cxa _is _pointer _type = function ( ) { return ( _ _ _cxa _is _pointer _type = Module [ "asm" ] [ "__cxa_is_pointer_type" ] ) . apply ( null , arguments ) } ; var dynCall _jiji = Module [ "dynCall_jiji" ] = function ( ) { return ( dynCall _jiji = Module [ "dynCall_jiji" ] = Module [ "asm" ] [ "dynCall_jiji" ] ) . apply ( null , arguments ) } ; var _ _ _start _em _js = Module [ "___start_em_js" ] = 350148 ; var _ _ _stop _em _js = Module [ "___stop_em_js" ] = 350658 ;
function intArrayFromBase64 ( s ) { try { var decoded = atob ( s ) ; var bytes = new Uint8Array ( decoded . length ) ; for ( var i = 0 ; i < decoded . length ; ++ i ) bytes [ i ] = decoded . charCodeAt ( i ) ; return bytes } catch ( _ ) { throw new Error ( "Converting base64 string to bytes failed." ) ; } } function tryParseAsDataURI ( filename ) { if ( ! isDataURI ( filename ) ) return ; return intArrayFromBase64 ( filename . slice ( dataURIPrefix . length ) ) } Module [ "addOnPostRun" ] = addOnPostRun ; Module [ "setValue" ] = setValue ; Module [ "getValue" ] = getValue ; Module [ "writeArrayToMemory" ] = writeArrayToMemory ;
var calledRun ; dependenciesFulfilled = function runCaller ( ) { if ( ! calledRun ) run ( ) ; if ( ! calledRun ) dependenciesFulfilled = runCaller } ;
function run ( ) { if ( runDependencies > 0 ) return ; preRun ( ) ; if ( runDependencies > 0 ) return ; function doRun ( ) { if ( calledRun ) return ; calledRun = true ; Module [ "calledRun" ] = true ; if ( ABORT ) return ; initRuntime ( ) ; if ( Module [ "onRuntimeInitialized" ] ) Module [ "onRuntimeInitialized" ] ( ) ; postRun ( ) } if ( Module [ "setStatus" ] ) { Module [ "setStatus" ] ( "Running..." ) ; setTimeout ( function ( ) { setTimeout ( function ( ) { Module [ "setStatus" ] ( "" ) } , 1 ) ; doRun ( ) } , 1 ) } else doRun ( ) }
if ( Module [ "preInit" ] ) { if ( typeof Module [ "preInit" ] == "function" ) Module [ "preInit" ] = [ Module [ "preInit" ] ] ; while ( Module [ "preInit" ] . length > 0 ) Module [ "preInit" ] . pop ( ) ( ) } run ( ) ;