Skip to content

Instantly share code, notes, and snippets.

@pellaeon
Created September 30, 2014 14:22
Show Gist options
  • Save pellaeon/7793625208f2de3b5329 to your computer and use it in GitHub Desktop.
Save pellaeon/7793625208f2de3b5329 to your computer and use it in GitHub Desktop.
(function e(t, n, r) {
function s(o, u) {
if (!n[o]) {
if (!t[o]) {
var a = typeof require == "function" && require;
if (!u && a) return a(o, !0);
if (i) return i(o, !0);
throw new Error("Cannot find module '" + o + "'")
}
var f = n[o] = {
exports: {}
};
t[o][0].call(f.exports, function(e) {
var n = t[o][1][e];
return s(n ? n : e)
}, f, f.exports, e, t, n, r)
}
return n[o].exports
}
var i = typeof require == "function" && require;
for (var o = 0; o < r.length; o++) s(r[o]);
return s
})({
1: [
function(require, module, exports) {
var Module;
if (!Module) Module = (typeof Module !== "undefined" ? Module : null) || {};
var moduleOverrides = {};
for (var key in Module) {
if (Module.hasOwnProperty(key)) {
moduleOverrides[key] = Module[key]
}
}
var ENVIRONMENT_IS_NODE = typeof process === "object" && typeof require === "function";
var ENVIRONMENT_IS_WEB = typeof window === "object";
var ENVIRONMENT_IS_WORKER = typeof importScripts === "function";
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
if (ENVIRONMENT_IS_NODE) {
if (!Module["print"]) Module["print"] = function print(x) {
process["stdout"].write(x + "\n")
};
if (!Module["printErr"]) Module["printErr"] = function printErr(x) {
process["stderr"].write(x + "\n")
};
var nodeFS = require("fs");
var nodePath = require("path");
Module["read"] = function read(filename, binary) {
filename = nodePath["normalize"](filename);
var ret = nodeFS["readFileSync"](filename);
if (!ret && filename != nodePath["resolve"](filename)) {
filename = path.join(__dirname, "..", "src", filename);
ret = nodeFS["readFileSync"](filename)
}
if (ret && !binary) ret = ret.toString();
return ret
};
Module["readBinary"] = function readBinary(filename) {
return Module["read"](filename, true)
};
Module["load"] = function load(f) {
globalEval(read(f))
};
Module["thisProgram"] = process["argv"][1].replace(/\\/g, "/");
Module["arguments"] = process["argv"].slice(2);
if (typeof module !== "undefined") {
module["exports"] = Module
}
} else if (ENVIRONMENT_IS_SHELL) {
if (!Module["print"]) Module["print"] = print;
if (typeof printErr != "undefined") Module["printErr"] = printErr;
if (typeof read != "undefined") {
Module["read"] = read
} else {
Module["read"] = function read() {
throw "no read() available (jsc?)"
}
}
Module["readBinary"] = function readBinary(f) {
return read(f, "binary")
};
if (typeof scriptArgs != "undefined") {
Module["arguments"] = scriptArgs
} else if (typeof arguments != "undefined") {
Module["arguments"] = arguments
}
this["Module"] = Module
} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
Module["read"] = function read(url) {
var xhr = new XMLHttpRequest;
xhr.open("GET", url, false);
xhr.send(null);
return xhr.responseText
};
if (typeof arguments != "undefined") {
Module["arguments"] = arguments
}
if (typeof console !== "undefined") {
if (!Module["print"]) Module["print"] = function print(x) {
console.log(x)
};
if (!Module["printErr"]) Module["printErr"] = function printErr(x) {
console.log(x)
}
} else {
var TRY_USE_DUMP = false;
if (!Module["print"]) Module["print"] = TRY_USE_DUMP && typeof dump !== "undefined" ? (function(x) {
dump(x)
}) : (function(x) {})
} if (ENVIRONMENT_IS_WEB) {
window["Module"] = Module
} else {
Module["load"] = importScripts
}
} else {
throw "Unknown runtime environment. Where are we?"
}
function globalEval(x) {
eval.call(null, x)
}
if (!Module["load"] == "undefined" && Module["read"]) {
Module["load"] = function load(f) {
globalEval(Module["read"](f))
}
}
if (!Module["print"]) {
Module["print"] = (function() {})
}
if (!Module["printErr"]) {
Module["printErr"] = Module["print"]
}
if (!Module["arguments"]) {
Module["arguments"] = []
}
if (!Module["thisProgram"]) {
Module["thisProgram"] = "./this.program"
}
Module.print = Module["print"];
Module.printErr = Module["printErr"];
Module["preRun"] = [];
Module["postRun"] = [];
for (var key in moduleOverrides) {
if (moduleOverrides.hasOwnProperty(key)) {
Module[key] = moduleOverrides[key]
}
}
var Runtime = {
setTempRet0: (function(value) {
tempRet0 = value
}),
getTempRet0: (function() {
return tempRet0
}),
stackSave: (function() {
return STACKTOP
}),
stackRestore: (function(stackTop) {
STACKTOP = stackTop
}),
forceAlign: (function(target, quantum) {
quantum = quantum || 4;
if (quantum == 1) return target;
if (isNumber(target) && isNumber(quantum)) {
return Math.ceil(target / quantum) * quantum
} else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
return "(((" + target + ")+" + (quantum - 1) + ")&" + -quantum + ")"
}
return "Math.ceil((" + target + ")/" + quantum + ")*" + quantum
}),
isNumberType: (function(type) {
return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES
}),
isPointerType: function isPointerType(type) {
return type[type.length - 1] == "*"
},
isStructType: function isStructType(type) {
if (isPointerType(type)) return false;
if (isArrayType(type)) return true;
if (/<?\{ ?[^}]* ?\}>?/.test(type)) return true;
return type[0] == "%"
},
INT_TYPES: {
"i1": 0,
"i8": 0,
"i16": 0,
"i32": 0,
"i64": 0
},
FLOAT_TYPES: {
"float": 0,
"double": 0
},
or64: (function(x, y) {
var l = x | 0 | (y | 0);
var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
return l + h
}),
and64: (function(x, y) {
var l = (x | 0) & (y | 0);
var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
return l + h
}),
xor64: (function(x, y) {
var l = (x | 0) ^ (y | 0);
var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
return l + h
}),
getNativeTypeSize: (function(type) {
switch (type) {
case "i1":
case "i8":
return 1;
case "i16":
return 2;
case "i32":
return 4;
case "i64":
return 8;
case "float":
return 4;
case "double":
return 8;
default:
{
if (type[type.length - 1] === "*") {
return Runtime.QUANTUM_SIZE
} else if (type[0] === "i") {
var bits = parseInt(type.substr(1));
assert(bits % 8 === 0);
return bits / 8
} else {
return 0
}
}
}
}),
getNativeFieldSize: (function(type) {
return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE)
}),
dedup: function dedup(items, ident) {
var seen = {};
if (ident) {
return items.filter((function(item) {
if (seen[item[ident]]) return false;
seen[item[ident]] = true;
return true
}))
} else {
return items.filter((function(item) {
if (seen[item]) return false;
seen[item] = true;
return true
}))
}
},
set: function set() {
var args = typeof arguments[0] === "object" ? arguments[0] : arguments;
var ret = {};
for (var i = 0; i < args.length; i++) {
ret[args[i]] = 0
}
return ret
},
STACK_ALIGN: 8,
getAlignSize: (function(type, size, vararg) {
if (!vararg && (type == "i64" || type == "double")) return 8;
if (!type) return Math.min(size, 8);
return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE)
}),
calculateStructAlignment: function calculateStructAlignment(type) {
type.flatSize = 0;
type.alignSize = 0;
var diffs = [];
var prev = -1;
var index = 0;
type.flatIndexes = type.fields.map((function(field) {
index++;
var size, alignSize;
if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
size = Runtime.getNativeTypeSize(field);
alignSize = Runtime.getAlignSize(field, size)
} else if (Runtime.isStructType(field)) {
if (field[1] === "0") {
size = 0;
if (Types.types[field]) {
alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize)
} else {
alignSize = type.alignSize || QUANTUM_SIZE
}
} else {
size = Types.types[field].flatSize;
alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize)
}
} else if (field[0] == "b") {
size = field.substr(1) | 0;
alignSize = 1
} else if (field[0] === "<") {
size = alignSize = Types.types[field].flatSize
} else if (field[0] === "i") {
size = alignSize = parseInt(field.substr(1)) / 8;
assert(size % 1 === 0, "cannot handle non-byte-size field " + field)
} else {
assert(false, "invalid type for calculateStructAlignment")
} if (type.packed) alignSize = 1;
type.alignSize = Math.max(type.alignSize, alignSize);
var curr = Runtime.alignMemory(type.flatSize, alignSize);
type.flatSize = curr + size;
if (prev >= 0) {
diffs.push(curr - prev)
}
prev = curr;
return curr
}));
if (type.name_ && type.name_[0] === "[") {
type.flatSize = parseInt(type.name_.substr(1)) * type.flatSize / 2
}
type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
if (diffs.length == 0) {
type.flatFactor = type.flatSize
} else if (Runtime.dedup(diffs).length == 1) {
type.flatFactor = diffs[0]
}
type.needsFlattening = type.flatFactor != 1;
return type.flatIndexes
},
generateStructInfo: (function(struct, typeName, offset) {
var type, alignment;
if (typeName) {
offset = offset || 0;
type = (typeof Types === "undefined" ? Runtime.typeInfo : Types.types)[typeName];
if (!type) return null;
if (type.fields.length != struct.length) {
printErr("Number of named fields must match the type for " + typeName + ": possibly duplicate struct names. Cannot return structInfo");
return null
}
alignment = type.flatIndexes
} else {
var type = {
fields: struct.map((function(item) {
return item[0]
}))
};
alignment = Runtime.calculateStructAlignment(type)
}
var ret = {
__size__: type.flatSize
};
if (typeName) {
struct.forEach((function(item, i) {
if (typeof item === "string") {
ret[item] = alignment[i] + offset
} else {
var key;
for (var k in item) key = k;
ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i])
}
}))
} else {
struct.forEach((function(item, i) {
ret[item[1]] = alignment[i]
}))
}
return ret
}),
dynCall: (function(sig, ptr, args) {
if (args && args.length) {
if (!args.splice) args = Array.prototype.slice.call(args);
args.splice(0, 0, ptr);
return Module["dynCall_" + sig].apply(null, args)
} else {
return Module["dynCall_" + sig].call(null, ptr)
}
}),
functionPointers: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
addFunction: (function(func) {
for (var i = 0; i < Runtime.functionPointers.length; i++) {
if (!Runtime.functionPointers[i]) {
Runtime.functionPointers[i] = func;
return 2 * (1 + i)
}
}
throw "Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."
}),
removeFunction: (function(index) {
Runtime.functionPointers[(index - 2) / 2] = null
}),
getAsmConst: (function(code, numArgs) {
if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
var func = Runtime.asmConstCache[code];
if (func) return func;
var args = [];
for (var i = 0; i < numArgs; i++) {
args.push(String.fromCharCode(36) + i)
}
var source = Pointer_stringify(code);
if (source[0] === '"') {
if (source.indexOf('"', 1) === source.length - 1) {
source = source.substr(1, source.length - 2)
} else {
abort("invalid EM_ASM input |" + source + "|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)")
}
}
try {
var evalled = eval("(function(" + args.join(",") + "){ " + source + " })")
} catch (e) {
Module.printErr("error in executing inline EM_ASM code: " + e + " on: \n\n" + source + "\n\nwith args |" + args + "| (make sure to use the right one out of EM_ASM, EM_ASM_ARGS, etc.)");
throw e
}
return Runtime.asmConstCache[code] = evalled
}),
warnOnce: (function(text) {
if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
if (!Runtime.warnOnce.shown[text]) {
Runtime.warnOnce.shown[text] = 1;
Module.printErr(text)
}
}),
funcWrappers: {},
getFuncWrapper: (function(func, sig) {
assert(sig);
if (!Runtime.funcWrappers[sig]) {
Runtime.funcWrappers[sig] = {}
}
var sigCache = Runtime.funcWrappers[sig];
if (!sigCache[func]) {
sigCache[func] = function dynCall_wrapper() {
return Runtime.dynCall(sig, func, arguments)
}
}
return sigCache[func]
}),
UTF8Processor: (function() {
var buffer = [];
var needed = 0;
this.processCChar = (function(code) {
code = code & 255;
if (buffer.length == 0) {
if ((code & 128) == 0) {
return String.fromCharCode(code)
}
buffer.push(code);
if ((code & 224) == 192) {
needed = 1
} else if ((code & 240) == 224) {
needed = 2
} else {
needed = 3
}
return ""
}
if (needed) {
buffer.push(code);
needed--;
if (needed > 0) return ""
}
var c1 = buffer[0];
var c2 = buffer[1];
var c3 = buffer[2];
var c4 = buffer[3];
var ret;
if (buffer.length == 2) {
ret = String.fromCharCode((c1 & 31) << 6 | c2 & 63)
} else if (buffer.length == 3) {
ret = String.fromCharCode((c1 & 15) << 12 | (c2 & 63) << 6 | c3 & 63)
} else {
var codePoint = (c1 & 7) << 18 | (c2 & 63) << 12 | (c3 & 63) << 6 | c4 & 63;
ret = String.fromCharCode(Math.floor((codePoint - 65536) / 1024) + 55296, (codePoint - 65536) % 1024 + 56320)
}
buffer.length = 0;
return ret
});
this.processJSString = function processJSString(string) {
string = unescape(encodeURIComponent(string));
var ret = [];
for (var i = 0; i < string.length; i++) {
ret.push(string.charCodeAt(i))
}
return ret
}
}),
getCompilerSetting: (function(name) {
throw "You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"
}),
stackAlloc: (function(size) {
var ret = STACKTOP;
STACKTOP = STACKTOP + size | 0;
STACKTOP = STACKTOP + 7 & -8;
return ret
}),
staticAlloc: (function(size) {
var ret = STATICTOP;
STATICTOP = STATICTOP + size | 0;
STATICTOP = STATICTOP + 7 & -8;
return ret
}),
dynamicAlloc: (function(size) {
var ret = DYNAMICTOP;
DYNAMICTOP = DYNAMICTOP + size | 0;
DYNAMICTOP = DYNAMICTOP + 7 & -8;
if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();
return ret
}),
alignMemory: (function(size, quantum) {
var ret = size = Math.ceil(size / (quantum ? quantum : 8)) * (quantum ? quantum : 8);
return ret
}),
makeBigInt: (function(low, high, unsigned) {
var ret = unsigned ? +(low >>> 0) + +(high >>> 0) * +4294967296 : +(low >>> 0) + +(high | 0) * +4294967296;
return ret
}),
GLOBAL_BASE: 8,
QUANTUM_SIZE: 4,
__dummy__: 0
};
Module["Runtime"] = Runtime;
function jsCall() {
var args = Array.prototype.slice.call(arguments);
return Runtime.functionPointers[args[0]].apply(null, args.slice(1))
}
var __THREW__ = 0;
var ABORT = false;
var EXITSTATUS = 0;
var undef = 0;
var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
var tempI64, tempI64b;
var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
function assert(condition, text) {
if (!condition) {
abort("Assertion failed: " + text)
}
}
var globalScope = this;
function getCFunc(ident) {
var func = Module["_" + ident];
if (!func) {
try {
func = eval("_" + ident)
} catch (e) {}
}
assert(func, "Cannot call unknown function " + ident + " (perhaps LLVM optimizations or closure removed it?)");
return func
}
var cwrap, ccall;
((function() {
var stack = 0;
var JSfuncs = {
"stackSave": (function() {
stack = Runtime.stackSave()
}),
"stackRestore": (function() {
Runtime.stackRestore(stack)
}),
"arrayToC": (function(arr) {
var ret = Runtime.stackAlloc(arr.length);
writeArrayToMemory(arr, ret);
return ret
}),
"stringToC": (function(str) {
var ret = 0;
if (str !== null && str !== undefined && str !== 0) {
ret = Runtime.stackAlloc(str.length + 1);
writeStringToMemory(str, ret)
}
return ret
})
};
var toC = {
"string": JSfuncs["stringToC"],
"array": JSfuncs["arrayToC"]
};
ccall = function ccallFunc(ident, returnType, argTypes, args) {
var func = getCFunc(ident);
var cArgs = [];
if (args) {
for (var i = 0; i < args.length; i++) {
var converter = toC[argTypes[i]];
if (converter) {
if (stack === 0) stack = Runtime.stackSave();
cArgs[i] = converter(args[i])
} else {
cArgs[i] = args[i]
}
}
}
var ret = func.apply(null, cArgs);
if (returnType === "string") ret = Pointer_stringify(ret);
if (stack !== 0) JSfuncs["stackRestore"]();
return ret
};
var sourceRegex = /^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;
function parseJSFunc(jsfunc) {
var parsed = jsfunc.toString().match(sourceRegex).slice(1);
return {
arguments: parsed[0],
body: parsed[1],
returnValue: parsed[2]
}
}
var JSsource = {};
for (var fun in JSfuncs) {
if (JSfuncs.hasOwnProperty(fun)) {
JSsource[fun] = parseJSFunc(JSfuncs[fun])
}
}
cwrap = function cwrap(ident, returnType, argTypes) {
argTypes = argTypes || [];
var cfunc = getCFunc(ident);
var numericArgs = argTypes.every((function(type) {
return type === "number"
}));
var numericRet = returnType !== "string";
if (numericRet && numericArgs) {
return cfunc
}
var argNames = argTypes.map((function(x, i) {
return "$" + i
}));
var funcstr = "(function(" + argNames.join(",") + ") {";
var nargs = argTypes.length;
if (!numericArgs) {
funcstr += JSsource["stackSave"].body + ";";
for (var i = 0; i < nargs; i++) {
var arg = argNames[i],
type = argTypes[i];
if (type === "number") continue;
var convertCode = JSsource[type + "ToC"];
funcstr += "var " + convertCode.arguments + " = " + arg + ";";
funcstr += convertCode.body + ";";
funcstr += arg + "=" + convertCode.returnValue + ";"
}
}
var cfuncname = parseJSFunc((function() {
return cfunc
})).returnValue;
funcstr += "var ret = " + cfuncname + "(" + argNames.join(",") + ");";
if (!numericRet) {
var strgfy = parseJSFunc((function() {
return Pointer_stringify
})).returnValue;
funcstr += "ret = " + strgfy + "(ret);"
}
if (!numericArgs) {
funcstr += JSsource["stackRestore"].body + ";"
}
funcstr += "return ret})";
return eval(funcstr)
}
}))();
Module["cwrap"] = cwrap;
Module["ccall"] = ccall;
function setValue(ptr, value, type, noSafe) {
type = type || "i8";
if (type.charAt(type.length - 1) === "*") type = "i32";
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":
tempI64 = [value >>> 0, (tempDouble = value, +Math_abs(tempDouble) >= +1 ? tempDouble > +0 ? (Math_min(+Math_floor(tempDouble / +4294967296), +4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / +4294967296) >>> 0 : 0)], HEAP32[ptr >> 2] = tempI64[0], HEAP32[ptr + 4 >> 2] = tempI64[1];
break;
case "float":
HEAPF32[ptr >> 2] = value;
break;
case "double":
HEAPF64[ptr >> 3] = value;
break;
default:
abort("invalid type for setValue: " + type)
}
}
Module["setValue"] = setValue;
function getValue(ptr, type, noSafe) {
type = type || "i8";
if (type.charAt(type.length - 1) === "*") type = "i32";
switch (type) {
case "i1":
return HEAP8[ptr >> 0];
case "i8":
return HEAP8[ptr >> 0];
case "i16":
return HEAP16[ptr >> 1];
case "i32":
return HEAP32[ptr >> 2];
case "i64":
return HEAP32[ptr >> 2];
case "float":
return HEAPF32[ptr >> 2];
case "double":
return HEAPF64[ptr >> 3];
default:
abort("invalid type for setValue: " + type)
}
return null
}
Module["getValue"] = getValue;
var ALLOC_NORMAL = 0;
var ALLOC_STACK = 1;
var ALLOC_STATIC = 2;
var ALLOC_DYNAMIC = 3;
var ALLOC_NONE = 4;
Module["ALLOC_NORMAL"] = ALLOC_NORMAL;
Module["ALLOC_STACK"] = ALLOC_STACK;
Module["ALLOC_STATIC"] = ALLOC_STATIC;
Module["ALLOC_DYNAMIC"] = ALLOC_DYNAMIC;
Module["ALLOC_NONE"] = ALLOC_NONE;
function allocate(slab, types, allocator, ptr) {
var zeroinit, size;
if (typeof slab === "number") {
zeroinit = true;
size = slab
} else {
zeroinit = false;
size = slab.length
}
var singleType = typeof types === "string" ? types : null;
var ret;
if (allocator == ALLOC_NONE) {
ret = ptr
} else {
ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length))
} if (zeroinit) {
var ptr = ret,
stop;
assert((ret & 3) == 0);
stop = ret + (size & ~3);
for (; ptr < stop; ptr += 4) {
HEAP32[ptr >> 2] = 0
}
stop = ret + size;
while (ptr < stop) {
HEAP8[ptr++ >> 0] = 0
}
return ret
}
if (singleType === "i8") {
if (slab.subarray || slab.slice) {
HEAPU8.set(slab, ret)
} else {
HEAPU8.set(new Uint8Array(slab), ret)
}
return ret
}
var i = 0,
type, typeSize, previousType;
while (i < size) {
var curr = slab[i];
if (typeof curr === "function") {
curr = Runtime.getFunctionIndex(curr)
}
type = singleType || types[i];
if (type === 0) {
i++;
continue
}
if (type == "i64") type = "i32";
setValue(ret + i, curr, type);
if (previousType !== type) {
typeSize = Runtime.getNativeTypeSize(type);
previousType = type
}
i += typeSize
}
return ret
}
Module["allocate"] = allocate;
function Pointer_stringify(ptr, length) {
var hasUtf = false;
var t;
var i = 0;
while (1) {
t = HEAPU8[ptr + i >> 0];
if (t >= 128) hasUtf = true;
else if (t == 0 && !length) break;
i++;
if (length && i == length) break
}
if (!length) length = i;
var ret = "";
if (!hasUtf) {
var MAX_CHUNK = 1024;
var curr;
while (length > 0) {
curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
ret = ret ? ret + curr : curr;
ptr += MAX_CHUNK;
length -= MAX_CHUNK
}
return ret
}
var utf8 = new Runtime.UTF8Processor;
for (i = 0; i < length; i++) {
t = HEAPU8[ptr + i >> 0];
ret += utf8.processCChar(t)
}
return ret
}
Module["Pointer_stringify"] = Pointer_stringify;
function UTF16ToString(ptr) {
var i = 0;
var str = "";
while (1) {
var codeUnit = HEAP16[ptr + i * 2 >> 1];
if (codeUnit == 0) return str;
++i;
str += String.fromCharCode(codeUnit)
}
}
Module["UTF16ToString"] = UTF16ToString;
function stringToUTF16(str, outPtr) {
for (var i = 0; i < str.length; ++i) {
var codeUnit = str.charCodeAt(i);
HEAP16[outPtr + i * 2 >> 1] = codeUnit
}
HEAP16[outPtr + str.length * 2 >> 1] = 0
}
Module["stringToUTF16"] = stringToUTF16;
function UTF32ToString(ptr) {
var i = 0;
var str = "";
while (1) {
var utf32 = HEAP32[ptr + i * 4 >> 2];
if (utf32 == 0) return str;
++i;
if (utf32 >= 65536) {
var ch = utf32 - 65536;
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023)
} else {
str += String.fromCharCode(utf32)
}
}
}
Module["UTF32ToString"] = UTF32ToString;
function stringToUTF32(str, outPtr) {
var iChar = 0;
for (var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
var codeUnit = str.charCodeAt(iCodeUnit);
if (codeUnit >= 55296 && codeUnit <= 57343) {
var trailSurrogate = str.charCodeAt(++iCodeUnit);
codeUnit = 65536 + ((codeUnit & 1023) << 10) | trailSurrogate & 1023
}
HEAP32[outPtr + iChar * 4 >> 2] = codeUnit;
++iChar
}
HEAP32[outPtr + iChar * 4 >> 2] = 0
}
Module["stringToUTF32"] = stringToUTF32;
function demangle(func) {
var hasLibcxxabi = !!Module["___cxa_demangle"];
if (hasLibcxxabi) {
try {
var buf = _malloc(func.length);
writeStringToMemory(func.substr(1), buf);
var status = _malloc(4);
var ret = Module["___cxa_demangle"](buf, 0, 0, status);
if (getValue(status, "i32") === 0 && ret) {
return Pointer_stringify(ret)
}
} catch (e) {} finally {
if (buf) _free(buf);
if (status) _free(status);
if (ret) _free(ret)
}
}
var i = 3;
var basicTypes = {
"v": "void",
"b": "bool",
"c": "char",
"s": "short",
"i": "int",
"l": "long",
"f": "float",
"d": "double",
"w": "wchar_t",
"a": "signed char",
"h": "unsigned char",
"t": "unsigned short",
"j": "unsigned int",
"m": "unsigned long",
"x": "long long",
"y": "unsigned long long",
"z": "..."
};
var subs = [];
var first = true;
function dump(x) {
if (x) Module.print(x);
Module.print(func);
var pre = "";
for (var a = 0; a < i; a++) pre += " ";
Module.print(pre + "^")
}
function parseNested() {
i++;
if (func[i] === "K") i++;
var parts = [];
while (func[i] !== "E") {
if (func[i] === "S") {
i++;
var next = func.indexOf("_", i);
var num = func.substring(i, next) || 0;
parts.push(subs[num] || "?");
i = next + 1;
continue
}
if (func[i] === "C") {
parts.push(parts[parts.length - 1]);
i += 2;
continue
}
var size = parseInt(func.substr(i));
var pre = size.toString().length;
if (!size || !pre) {
i--;
break
}
var curr = func.substr(i + pre, size);
parts.push(curr);
subs.push(curr);
i += pre + size
}
i++;
return parts
}
function parse(rawList, limit, allowVoid) {
limit = limit || Infinity;
var ret = "",
list = [];
function flushList() {
return "(" + list.join(", ") + ")"
}
var name;
if (func[i] === "N") {
name = parseNested().join("::");
limit--;
if (limit === 0) return rawList ? [name] : name
} else {
if (func[i] === "K" || first && func[i] === "L") i++;
var size = parseInt(func.substr(i));
if (size) {
var pre = size.toString().length;
name = func.substr(i + pre, size);
i += pre + size
}
}
first = false;
if (func[i] === "I") {
i++;
var iList = parse(true);
var iRet = parse(true, 1, true);
ret += iRet[0] + " " + name + "<" + iList.join(", ") + ">"
} else {
ret = name
}
paramLoop: while (i < func.length && limit-- > 0) {
var c = func[i++];
if (c in basicTypes) {
list.push(basicTypes[c])
} else {
switch (c) {
case "P":
list.push(parse(true, 1, true)[0] + "*");
break;
case "R":
list.push(parse(true, 1, true)[0] + "&");
break;
case "L":
{
i++;
var end = func.indexOf("E", i);
var size = end - i;
list.push(func.substr(i, size));
i += size + 2;
break
};
case "A":
{
var size = parseInt(func.substr(i));
i += size.toString().length;
if (func[i] !== "_") throw "?";
i++;
list.push(parse(true, 1, true)[0] + " [" + size + "]");
break
};
case "E":
break paramLoop;
default:
ret += "?" + c;
break paramLoop
}
}
}
if (!allowVoid && list.length === 1 && list[0] === "void") list = [];
if (rawList) {
if (ret) {
list.push(ret + "?")
}
return list
} else {
return ret + flushList()
}
}
var final = func;
try {
if (func == "Object._main" || func == "_main") {
return "main()"
}
if (typeof func === "number") func = Pointer_stringify(func);
if (func[0] !== "_") return func;
if (func[1] !== "_") return func;
if (func[2] !== "Z") return func;
switch (func[3]) {
case "n":
return "operator new()";
case "d":
return "operator delete()"
}
final = parse()
} catch (e) {
final += "?"
}
if (final.indexOf("?") >= 0 && !hasLibcxxabi) {
Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling")
}
return final
}
function demangleAll(text) {
return text.replace(/__Z[\w\d_]+/g, (function(x) {
var y = demangle(x);
return x === y ? x : x + " [" + y + "]"
}))
}
function jsStackTrace() {
var err = new Error;
if (!err.stack) {
try {
throw new Error(0)
} catch (e) {
err = e
}
if (!err.stack) {
return "(no stack trace available)"
}
}
return err.stack.toString()
}
function stackTrace() {
return demangleAll(jsStackTrace())
}
Module["stackTrace"] = stackTrace;
var PAGE_SIZE = 4096;
function alignMemoryPage(x) {
return x + 4095 & -4096
}
var HEAP;
var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
var STATIC_BASE = 0,
STATICTOP = 0,
staticSealed = false;
var STACK_BASE = 0,
STACKTOP = 0,
STACK_MAX = 0;
var DYNAMIC_BASE = 0,
DYNAMICTOP = 0;
function enlargeMemory() {
abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value " + TOTAL_MEMORY + ", (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.")
}
var TOTAL_STACK = Module["TOTAL_STACK"] || 5242880;
var TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 16777216;
var FAST_MEMORY = Module["FAST_MEMORY"] || 2097152;
var totalMemory = 4096;
while (totalMemory < TOTAL_MEMORY || totalMemory < 2 * TOTAL_STACK) {
if (totalMemory < 16 * 1024 * 1024) {
totalMemory *= 2
} else {
totalMemory += 16 * 1024 * 1024
}
}
if (totalMemory !== TOTAL_MEMORY) {
Module.printErr("increasing TOTAL_MEMORY to " + totalMemory + " to be more reasonable");
TOTAL_MEMORY = totalMemory
}
assert(typeof Int32Array !== "undefined" && typeof Float64Array !== "undefined" && !!(new Int32Array(1))["subarray"] && !!(new Int32Array(1))["set"], "JS engine does not provide full typed array support");
var buffer = new ArrayBuffer(TOTAL_MEMORY);
HEAP8 = new Int8Array(buffer);
HEAP16 = new Int16Array(buffer);
HEAP32 = new Int32Array(buffer);
HEAPU8 = new Uint8Array(buffer);
HEAPU16 = new Uint16Array(buffer);
HEAPU32 = new Uint32Array(buffer);
HEAPF32 = new Float32Array(buffer);
HEAPF64 = new Float64Array(buffer);
HEAP32[0] = 255;
assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, "Typed arrays 2 must be run on a little-endian system");
Module["HEAP"] = HEAP;
Module["HEAP8"] = HEAP8;
Module["HEAP16"] = HEAP16;
Module["HEAP32"] = HEAP32;
Module["HEAPU8"] = HEAPU8;
Module["HEAPU16"] = HEAPU16;
Module["HEAPU32"] = HEAPU32;
Module["HEAPF32"] = HEAPF32;
Module["HEAPF64"] = HEAPF64;
function callRuntimeCallbacks(callbacks) {
while (callbacks.length > 0) {
var callback = callbacks.shift();
if (typeof callback == "function") {
callback();
continue
}
var func = callback.func;
if (typeof func === "number") {
if (callback.arg === undefined) {
Runtime.dynCall("v", func)
} else {
Runtime.dynCall("vi", func, [callback.arg])
}
} else {
func(callback.arg === undefined ? null : callback.arg)
}
}
}
var __ATPRERUN__ = [];
var __ATINIT__ = [];
var __ATMAIN__ = [];
var __ATEXIT__ = [];
var __ATPOSTRUN__ = [];
var runtimeInitialized = false;
var runtimeExited = false;
function preRun() {
if (Module["preRun"]) {
if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]];
while (Module["preRun"].length) {
addOnPreRun(Module["preRun"].shift())
}
}
callRuntimeCallbacks(__ATPRERUN__)
}
function ensureInitRuntime() {
if (runtimeInitialized) return;
runtimeInitialized = true;
callRuntimeCallbacks(__ATINIT__)
}
function preMain() {
callRuntimeCallbacks(__ATMAIN__)
}
function exitRuntime() {
callRuntimeCallbacks(__ATEXIT__);
runtimeExited = true
}
function postRun() {
if (Module["postRun"]) {
if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]];
while (Module["postRun"].length) {
addOnPostRun(Module["postRun"].shift())
}
}
callRuntimeCallbacks(__ATPOSTRUN__)
}
function addOnPreRun(cb) {
__ATPRERUN__.unshift(cb)
}
Module["addOnPreRun"] = Module.addOnPreRun = addOnPreRun;
function addOnInit(cb) {
__ATINIT__.unshift(cb)
}
Module["addOnInit"] = Module.addOnInit = addOnInit;
function addOnPreMain(cb) {
__ATMAIN__.unshift(cb)
}
Module["addOnPreMain"] = Module.addOnPreMain = addOnPreMain;
function addOnExit(cb) {
__ATEXIT__.unshift(cb)
}
Module["addOnExit"] = Module.addOnExit = addOnExit;
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb)
}
Module["addOnPostRun"] = Module.addOnPostRun = addOnPostRun;
function intArrayFromString(stringy, dontAddNull, length) {
var ret = (new Runtime.UTF8Processor).processJSString(stringy);
if (length) {
ret.length = length
}
if (!dontAddNull) {
ret.push(0)
}
return ret
}
Module["intArrayFromString"] = intArrayFromString;
function intArrayToString(array) {
var ret = [];
for (var i = 0; i < array.length; i++) {
var chr = array[i];
if (chr > 255) {
chr &= 255
}
ret.push(String.fromCharCode(chr))
}
return ret.join("")
}
Module["intArrayToString"] = intArrayToString;
function writeStringToMemory(string, buffer, dontAddNull) {
var array = intArrayFromString(string, dontAddNull);
var i = 0;
while (i < array.length) {
var chr = array[i];
HEAP8[buffer + i >> 0] = chr;
i = i + 1
}
}
Module["writeStringToMemory"] = writeStringToMemory;
function writeArrayToMemory(array, buffer) {
for (var i = 0; i < array.length; i++) {
HEAP8[buffer + i >> 0] = array[i]
}
}
Module["writeArrayToMemory"] = writeArrayToMemory;
function writeAsciiToMemory(str, buffer, dontAddNull) {
for (var i = 0; i < str.length; i++) {
HEAP8[buffer + i >> 0] = str.charCodeAt(i)
}
if (!dontAddNull) HEAP8[buffer + str.length >> 0] = 0
}
Module["writeAsciiToMemory"] = writeAsciiToMemory;
function unSign(value, bits, ignore) {
if (value >= 0) {
return value
}
return bits <= 32 ? 2 * Math.abs(1 << bits - 1) + value : Math.pow(2, bits) + value
}
function reSign(value, bits, ignore) {
if (value <= 0) {
return value
}
var half = bits <= 32 ? Math.abs(1 << bits - 1) : Math.pow(2, bits - 1);
if (value >= half && (bits <= 32 || value > half)) {
value = -2 * half + value
}
return value
}
if (!Math["imul"] || Math["imul"](4294967295, 5) !== -5) Math["imul"] = function imul(a, b) {
var ah = a >>> 16;
var al = a & 65535;
var bh = b >>> 16;
var bl = b & 65535;
return al * bl + (ah * bl + al * bh << 16) | 0
};
Math.imul = Math["imul"];
var Math_abs = Math.abs;
var Math_cos = Math.cos;
var Math_sin = Math.sin;
var Math_tan = Math.tan;
var Math_acos = Math.acos;
var Math_asin = Math.asin;
var Math_atan = Math.atan;
var Math_atan2 = Math.atan2;
var Math_exp = Math.exp;
var Math_log = Math.log;
var Math_sqrt = Math.sqrt;
var Math_ceil = Math.ceil;
var Math_floor = Math.floor;
var Math_pow = Math.pow;
var Math_imul = Math.imul;
var Math_fround = Math.fround;
var Math_min = Math.min;
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null;
function addRunDependency(id) {
runDependencies++;
if (Module["monitorRunDependencies"]) {
Module["monitorRunDependencies"](runDependencies)
}
}
Module["addRunDependency"] = addRunDependency;
function removeRunDependency(id) {
runDependencies--;
if (Module["monitorRunDependencies"]) {
Module["monitorRunDependencies"](runDependencies)
}
if (runDependencies == 0) {
if (runDependencyWatcher !== null) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null
}
if (dependenciesFulfilled) {
var callback = dependenciesFulfilled;
dependenciesFulfilled = null;
callback()
}
}
}
Module["removeRunDependency"] = removeRunDependency;
Module["preloadedImages"] = {};
Module["preloadedAudios"] = {};
var memoryInitializer = null;
STATIC_BASE = 8;
STATICTOP = STATIC_BASE + Runtime.alignMemory(1739);
__ATINIT__.push();
var memoryInitializer = "libogg.js.mem";
var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
assert(tempDoublePtr % 8 == 0);
function copyTempFloat(ptr) {
HEAP8[tempDoublePtr] = HEAP8[ptr];
HEAP8[tempDoublePtr + 1] = HEAP8[ptr + 1];
HEAP8[tempDoublePtr + 2] = HEAP8[ptr + 2];
HEAP8[tempDoublePtr + 3] = HEAP8[ptr + 3]
}
function copyTempDouble(ptr) {
HEAP8[tempDoublePtr] = HEAP8[ptr];
HEAP8[tempDoublePtr + 1] = HEAP8[ptr + 1];
HEAP8[tempDoublePtr + 2] = HEAP8[ptr + 2];
HEAP8[tempDoublePtr + 3] = HEAP8[ptr + 3];
HEAP8[tempDoublePtr + 4] = HEAP8[ptr + 4];
HEAP8[tempDoublePtr + 5] = HEAP8[ptr + 5];
HEAP8[tempDoublePtr + 6] = HEAP8[ptr + 6];
HEAP8[tempDoublePtr + 7] = HEAP8[ptr + 7]
}
Module["_i64Add"] = _i64Add;
function _sbrk(bytes) {
var self = _sbrk;
if (!self.called) {
DYNAMICTOP = alignMemoryPage(DYNAMICTOP);
self.called = true;
assert(Runtime.dynamicAlloc);
self.alloc = Runtime.dynamicAlloc;
Runtime.dynamicAlloc = (function() {
abort("cannot dynamically allocate, sbrk now has control")
})
}
var ret = DYNAMICTOP;
if (bytes != 0) self.alloc(bytes);
return ret
}
var ___errno_state = 0;
function ___setErrNo(value) {
HEAP32[___errno_state >> 2] = value;
return value
}
var ERRNO_CODES = {
EPERM: 1,
ENOENT: 2,
ESRCH: 3,
EINTR: 4,
EIO: 5,
ENXIO: 6,
E2BIG: 7,
ENOEXEC: 8,
EBADF: 9,
ECHILD: 10,
EAGAIN: 11,
EWOULDBLOCK: 11,
ENOMEM: 12,
EACCES: 13,
EFAULT: 14,
ENOTBLK: 15,
EBUSY: 16,
EEXIST: 17,
EXDEV: 18,
ENODEV: 19,
ENOTDIR: 20,
EISDIR: 21,
EINVAL: 22,
ENFILE: 23,
EMFILE: 24,
ENOTTY: 25,
ETXTBSY: 26,
EFBIG: 27,
ENOSPC: 28,
ESPIPE: 29,
EROFS: 30,
EMLINK: 31,
EPIPE: 32,
EDOM: 33,
ERANGE: 34,
ENOMSG: 42,
EIDRM: 43,
ECHRNG: 44,
EL2NSYNC: 45,
EL3HLT: 46,
EL3RST: 47,
ELNRNG: 48,
EUNATCH: 49,
ENOCSI: 50,
EL2HLT: 51,
EDEADLK: 35,
ENOLCK: 37,
EBADE: 52,
EBADR: 53,
EXFULL: 54,
ENOANO: 55,
EBADRQC: 56,
EBADSLT: 57,
EDEADLOCK: 35,
EBFONT: 59,
ENOSTR: 60,
ENODATA: 61,
ETIME: 62,
ENOSR: 63,
ENONET: 64,
ENOPKG: 65,
EREMOTE: 66,
ENOLINK: 67,
EADV: 68,
ESRMNT: 69,
ECOMM: 70,
EPROTO: 71,
EMULTIHOP: 72,
EDOTDOT: 73,
EBADMSG: 74,
ENOTUNIQ: 76,
EBADFD: 77,
EREMCHG: 78,
ELIBACC: 79,
ELIBBAD: 80,
ELIBSCN: 81,
ELIBMAX: 82,
ELIBEXEC: 83,
ENOSYS: 38,
ENOTEMPTY: 39,
ENAMETOOLONG: 36,
ELOOP: 40,
EOPNOTSUPP: 95,
EPFNOSUPPORT: 96,
ECONNRESET: 104,
ENOBUFS: 105,
EAFNOSUPPORT: 97,
EPROTOTYPE: 91,
ENOTSOCK: 88,
ENOPROTOOPT: 92,
ESHUTDOWN: 108,
ECONNREFUSED: 111,
EADDRINUSE: 98,
ECONNABORTED: 103,
ENETUNREACH: 101,
ENETDOWN: 100,
ETIMEDOUT: 110,
EHOSTDOWN: 112,
EHOSTUNREACH: 113,
EINPROGRESS: 115,
EALREADY: 114,
EDESTADDRREQ: 89,
EMSGSIZE: 90,
EPROTONOSUPPORT: 93,
ESOCKTNOSUPPORT: 94,
EADDRNOTAVAIL: 99,
ENETRESET: 102,
EISCONN: 106,
ENOTCONN: 107,
ETOOMANYREFS: 109,
EUSERS: 87,
EDQUOT: 122,
ESTALE: 116,
ENOTSUP: 95,
ENOMEDIUM: 123,
EILSEQ: 84,
EOVERFLOW: 75,
ECANCELED: 125,
ENOTRECOVERABLE: 131,
EOWNERDEAD: 130,
ESTRPIPE: 86
};
function _sysconf(name) {
switch (name) {
case 30:
return PAGE_SIZE;
case 132:
case 133:
case 12:
case 137:
case 138:
case 15:
case 235:
case 16:
case 17:
case 18:
case 19:
case 20:
case 149:
case 13:
case 10:
case 236:
case 153:
case 9:
case 21:
case 22:
case 159:
case 154:
case 14:
case 77:
case 78:
case 139:
case 80:
case 81:
case 79:
case 82:
case 68:
case 67:
case 164:
case 11:
case 29:
case 47:
case 48:
case 95:
case 52:
case 51:
case 46:
return 200809;
case 27:
case 246:
case 127:
case 128:
case 23:
case 24:
case 160:
case 161:
case 181:
case 182:
case 242:
case 183:
case 184:
case 243:
case 244:
case 245:
case 165:
case 178:
case 179:
case 49:
case 50:
case 168:
case 169:
case 175:
case 170:
case 171:
case 172:
case 97:
case 76:
case 32:
case 173:
case 35:
return -1;
case 176:
case 177:
case 7:
case 155:
case 8:
case 157:
case 125:
case 126:
case 92:
case 93:
case 129:
case 130:
case 131:
case 94:
case 91:
return 1;
case 74:
case 60:
case 69:
case 70:
case 4:
return 1024;
case 31:
case 42:
case 72:
return 32;
case 87:
case 26:
case 33:
return 2147483647;
case 34:
case 1:
return 47839;
case 38:
case 36:
return 99;
case 43:
case 37:
return 2048;
case 0:
return 2097152;
case 3:
return 65536;
case 28:
return 32768;
case 44:
return 32767;
case 75:
return 16384;
case 39:
return 1e3;
case 89:
return 700;
case 71:
return 256;
case 40:
return 255;
case 2:
return 100;
case 180:
return 64;
case 25:
return 20;
case 5:
return 16;
case 6:
return 6;
case 73:
return 4;
case 84:
{
if (typeof navigator === "object") return navigator["hardwareConcurrency"] || 1;
return 1
}
}
___setErrNo(ERRNO_CODES.EINVAL);
return -1
}
function _emscripten_memcpy_big(dest, src, num) {
HEAPU8.set(HEAPU8.subarray(src, src + num), dest);
return dest
}
Module["_memcpy"] = _memcpy;
Module["_memmove"] = _memmove;
Module["_memset"] = _memset;
function ___errno_location() {
return ___errno_state
}
Module["_bitshift64Shl"] = _bitshift64Shl;
function _abort() {
Module["abort"]()
}
var ERRNO_MESSAGES = {
0: "Success",
1: "Not super-user",
2: "No such file or directory",
3: "No such process",
4: "Interrupted system call",
5: "I/O error",
6: "No such device or address",
7: "Arg list too long",
8: "Exec format error",
9: "Bad file number",
10: "No children",
11: "No more processes",
12: "Not enough core",
13: "Permission denied",
14: "Bad address",
15: "Block device required",
16: "Mount device busy",
17: "File exists",
18: "Cross-device link",
19: "No such device",
20: "Not a directory",
21: "Is a directory",
22: "Invalid argument",
23: "Too many open files in system",
24: "Too many open files",
25: "Not a typewriter",
26: "Text file busy",
27: "File too large",
28: "No space left on device",
29: "Illegal seek",
30: "Read only file system",
31: "Too many links",
32: "Broken pipe",
33: "Math arg out of domain of func",
34: "Math result not representable",
35: "File locking deadlock error",
36: "File or path name too long",
37: "No record locks available",
38: "Function not implemented",
39: "Directory not empty",
40: "Too many symbolic links",
42: "No message of desired type",
43: "Identifier removed",
44: "Channel number out of range",
45: "Level 2 not synchronized",
46: "Level 3 halted",
47: "Level 3 reset",
48: "Link number out of range",
49: "Protocol driver not attached",
50: "No CSI structure available",
51: "Level 2 halted",
52: "Invalid exchange",
53: "Invalid request descriptor",
54: "Exchange full",
55: "No anode",
56: "Invalid request code",
57: "Invalid slot",
59: "Bad font file fmt",
60: "Device not a stream",
61: "No data (for no delay io)",
62: "Timer expired",
63: "Out of streams resources",
64: "Machine is not on the network",
65: "Package not installed",
66: "The object is remote",
67: "The link has been severed",
68: "Advertise error",
69: "Srmount error",
70: "Communication error on send",
71: "Protocol error",
72: "Multihop attempted",
73: "Cross mount point (not really error)",
74: "Trying to read unreadable message",
75: "Value too large for defined data type",
76: "Given log. name not unique",
77: "f.d. invalid for this operation",
78: "Remote address changed",
79: "Can access a needed shared lib",
80: "Accessing a corrupted shared lib",
81: ".lib section in a.out corrupted",
82: "Attempting to link in too many libs",
83: "Attempting to exec a shared library",
84: "Illegal byte sequence",
86: "Streams pipe error",
87: "Too many users",
88: "Socket operation on non-socket",
89: "Destination address required",
90: "Message too long",
91: "Protocol wrong type for socket",
92: "Protocol not available",
93: "Unknown protocol",
94: "Socket type not supported",
95: "Not supported",
96: "Protocol family not supported",
97: "Address family not supported by protocol family",
98: "Address already in use",
99: "Address not available",
100: "Network interface is not configured",
101: "Network is unreachable",
102: "Connection reset by network",
103: "Connection aborted",
104: "Connection reset by peer",
105: "No buffer space available",
106: "Socket is already connected",
107: "Socket is not connected",
108: "Can't send after socket shutdown",
109: "Too many references",
110: "Connection timed out",
111: "Connection refused",
112: "Host is down",
113: "Host is unreachable",
114: "Socket already connected",
115: "Connection already in progress",
116: "Stale file handle",
122: "Quota exceeded",
123: "No medium (in tape drive)",
125: "Operation canceled",
130: "Previous owner died",
131: "State not recoverable"
};
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(ERRNO_CODES.ENODEV)
}
stream.tty = tty;
stream.seekable = false
}),
close: (function(stream) {
if (stream.tty.output.length) {
stream.tty.ops.put_char(stream.tty, 10)
}
}),
read: (function(stream, buffer, offset, length, pos) {
if (!stream.tty || !stream.tty.ops.get_char) {
throw new FS.ErrnoError(ERRNO_CODES.ENXIO)
}
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(ERRNO_CODES.EIO)
}
if (result === undefined && bytesRead === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN)
}
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(ERRNO_CODES.ENXIO)
}
for (var i = 0; i < length; i++) {
try {
stream.tty.ops.put_char(stream.tty, buffer[offset + i])
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES.EIO)
}
}
if (length) {
stream.node.timestamp = Date.now()
}
return i
})
},
default_tty_ops: {
get_char: (function(tty) {
if (!tty.input.length) {
var result = null;
if (ENVIRONMENT_IS_NODE) {
result = process["stdin"]["read"]();
if (!result) {
if (process["stdin"]["_readableState"] && process["stdin"]["_readableState"]["ended"]) {
return null
}
return undefined
}
} else 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) {
Module["print"](tty.output.join(""));
tty.output = []
} else {
tty.output.push(TTY.utf8.processCChar(val))
}
})
},
default_tty1_ops: {
put_char: (function(tty, val) {
if (val === null || val === 10) {
Module["printErr"](tty.output.join(""));
tty.output = []
} else {
tty.output.push(TTY.utf8.processCChar(val))
}
})
}
};
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(ERRNO_CODES.EPERM)
}
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
}
},
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
}
return node
}),
getFileDataAsRegularArray: (function(node) {
if (node.contents && node.contents.subarray) {
var arr = [];
for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]);
return arr
}
return node.contents
}),
getFileDataAsTypedArray: (function(node) {
if (node.contents && node.contents.subarray) return node.contents.subarray(0, node.usedBytes);
return new Uint8Array(node.contents)
}),
expandFileStorage: (function(node, newCapacity) {
if (node.contents && node.contents.subarray && newCapacity > node.contents.length) {
node.contents = MEMFS.getFileDataAsRegularArray(node);
node.usedBytes = node.contents.length
}
if (!node.contents || node.contents.subarray) {
var prevCapacity = node.contents ? node.contents.buffer.byteLength : 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);
return
}
if (!node.contents && newCapacity > 0) node.contents = [];
while (node.contents.length < newCapacity) node.contents.push(0)
}),
resizeFileStorage: (function(node, newSize) {
if (node.usedBytes == newSize) return;
if (newSize == 0) {
node.contents = null;
node.usedBytes = 0;
return
}
if (!node.contents || node.contents.subarray) {
var oldContents = node.contents;
node.contents = new Uint8Array(new ArrayBuffer(newSize));
if (oldContents) {
node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes)))
}
node.usedBytes = newSize;
return
}
if (!node.contents) node.contents = [];
if (node.contents.length > newSize) node.contents.length = newSize;
else
while (node.contents.length < newSize) node.contents.push(0);
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[ERRNO_CODES.ENOENT]
}),
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(ERRNO_CODES.ENOTEMPTY)
}
}
}
delete old_node.parent.contents[old_node.name];
old_node.name = new_name;
new_dir.contents[new_name] = old_node;
old_node.parent = new_dir
}),
unlink: (function(parent, name) {
delete parent.contents[name]
}),
rmdir: (function(parent, name) {
var node = FS.lookupNode(parent, name);
for (var i in node.contents) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)
}
delete parent.contents[name]
}),
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(ERRNO_CODES.EINVAL)
}
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);
assert(size >= 0);
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 (!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 = new Uint8Array(buffer.subarray(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(ERRNO_CODES.EINVAL)
}
stream.ungotten = [];
stream.position = position;
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, buffer, offset, length, position, prot, flags) {
if (!FS.isFile(stream.node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENODEV)
}
var ptr;
var allocated;
var contents = stream.node.contents;
if (!(flags & 2) && (contents.buffer === buffer || contents.buffer === buffer.buffer)) {
allocated = false;
ptr = contents.byteOffset
} else {
if (position > 0 || position + length < stream.node.usedBytes) {
if (contents.subarray) {
contents = contents.subarray(position, position + length)
} else {
contents = Array.prototype.slice.call(contents, position, position + length)
}
}
allocated = true;
ptr = _malloc(length);
if (!ptr) {
throw new FS.ErrnoError(ERRNO_CODES.ENOMEM)
}
buffer.set(contents, ptr)
}
return {
ptr: ptr,
allocated: allocated
}
})
}
};
var IDBFS = {
dbs: {},
indexedDB: (function() {
if (typeof indexedDB !== "undefined") return indexedDB;
var ret = null;
if (typeof window === "object") ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
assert(ret, "IDBFS used, but indexedDB not supported");
return ret
}),
DB_VERSION: 21,
DB_STORE_NAME: "FILE_DATA",
mount: (function(mount) {
return MEMFS.mount.apply(null, arguments)
}),
syncfs: (function(mount, populate, callback) {
IDBFS.getLocalSet(mount, (function(err, local) {
if (err) return callback(err);
IDBFS.getRemoteSet(mount, (function(err, remote) {
if (err) return callback(err);
var src = populate ? remote : local;
var dst = populate ? local : remote;
IDBFS.reconcile(src, dst, callback)
}))
}))
}),
getDB: (function(name, callback) {
var db = IDBFS.dbs[name];
if (db) {
return callback(null, db)
}
var req;
try {
req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION)
} catch (e) {
return callback(e)
}
req.onupgradeneeded = (function(e) {
var db = e.target.result;
var transaction = e.target.transaction;
var fileStore;
if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME)
} else {
fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME)
}
fileStore.createIndex("timestamp", "timestamp", {
unique: false
})
});
req.onsuccess = (function() {
db = req.result;
IDBFS.dbs[name] = db;
callback(null, db)
});
req.onerror = (function() {
callback(this.error)
})
}),
getLocalSet: (function(mount, callback) {
var entries = {};
function isRealDir(p) {
return p !== "." && p !== ".."
}
function toAbsolute(root) {
return (function(p) {
return PATH.join2(root, p)
})
}
var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
while (check.length) {
var path = check.pop();
var stat;
try {
stat = FS.stat(path)
} catch (e) {
return callback(e)
}
if (FS.isDir(stat.mode)) {
check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))
}
entries[path] = {
timestamp: stat.mtime
}
}
return callback(null, {
type: "local",
entries: entries
})
}),
getRemoteSet: (function(mount, callback) {
var entries = {};
IDBFS.getDB(mount.mountpoint, (function(err, db) {
if (err) return callback(err);
var transaction = db.transaction([IDBFS.DB_STORE_NAME], "readonly");
transaction.onerror = (function() {
callback(this.error)
});
var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
var index = store.index("timestamp");
index.openKeyCursor().onsuccess = (function(event) {
var cursor = event.target.result;
if (!cursor) {
return callback(null, {
type: "remote",
db: db,
entries: entries
})
}
entries[cursor.primaryKey] = {
timestamp: cursor.key
};
cursor.continue()
})
}))
}),
loadLocalEntry: (function(path, callback) {
var stat, node;
try {
var lookup = FS.lookupPath(path);
node = lookup.node;
stat = FS.stat(path)
} catch (e) {
return callback(e)
}
if (FS.isDir(stat.mode)) {
return callback(null, {
timestamp: stat.mtime,
mode: stat.mode
})
} else if (FS.isFile(stat.mode)) {
node.contents = MEMFS.getFileDataAsTypedArray(node);
return callback(null, {
timestamp: stat.mtime,
mode: stat.mode,
contents: node.contents
})
} else {
return callback(new Error("node type not supported"))
}
}),
storeLocalEntry: (function(path, entry, callback) {
try {
if (FS.isDir(entry.mode)) {
FS.mkdir(path, entry.mode)
} else if (FS.isFile(entry.mode)) {
FS.writeFile(path, entry.contents, {
encoding: "binary",
canOwn: true
})
} else {
return callback(new Error("node type not supported"))
}
FS.utime(path, entry.timestamp, entry.timestamp)
} catch (e) {
return callback(e)
}
callback(null)
}),
removeLocalEntry: (function(path, callback) {
try {
var lookup = FS.lookupPath(path);
var stat = FS.stat(path);
if (FS.isDir(stat.mode)) {
FS.rmdir(path)
} else if (FS.isFile(stat.mode)) {
FS.unlink(path)
}
} catch (e) {
return callback(e)
}
callback(null)
}),
loadRemoteEntry: (function(store, path, callback) {
var req = store.get(path);
req.onsuccess = (function(event) {
callback(null, event.target.result)
});
req.onerror = (function() {
callback(this.error)
})
}),
storeRemoteEntry: (function(store, path, entry, callback) {
var req = store.put(entry, path);
req.onsuccess = (function() {
callback(null)
});
req.onerror = (function() {
callback(this.error)
})
}),
removeRemoteEntry: (function(store, path, callback) {
var req = store.delete(path);
req.onsuccess = (function() {
callback(null)
});
req.onerror = (function() {
callback(this.error)
})
}),
reconcile: (function(src, dst, callback) {
var total = 0;
var create = [];
Object.keys(src.entries).forEach((function(key) {
var e = src.entries[key];
var e2 = dst.entries[key];
if (!e2 || e.timestamp > e2.timestamp) {
create.push(key);
total++
}
}));
var remove = [];
Object.keys(dst.entries).forEach((function(key) {
var e = dst.entries[key];
var e2 = src.entries[key];
if (!e2) {
remove.push(key);
total++
}
}));
if (!total) {
return callback(null)
}
var errored = false;
var completed = 0;
var db = src.type === "remote" ? src.db : dst.db;
var transaction = db.transaction([IDBFS.DB_STORE_NAME], "readwrite");
var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
function done(err) {
if (err) {
if (!done.errored) {
done.errored = true;
return callback(err)
}
return
}
if (++completed >= total) {
return callback(null)
}
}
transaction.onerror = (function() {
done(this.error)
});
create.sort().forEach((function(path) {
if (dst.type === "local") {
IDBFS.loadRemoteEntry(store, path, (function(err, entry) {
if (err) return done(err);
IDBFS.storeLocalEntry(path, entry, done)
}))
} else {
IDBFS.loadLocalEntry(path, (function(err, entry) {
if (err) return done(err);
IDBFS.storeRemoteEntry(store, path, entry, done)
}))
}
}));
remove.sort().reverse().forEach((function(path) {
if (dst.type === "local") {
IDBFS.removeLocalEntry(path, done)
} else {
IDBFS.removeRemoteEntry(store, path, done)
}
}))
})
};
var NODEFS = {
isWindows: false,
staticInit: (function() {
NODEFS.isWindows = !!process.platform.match(/^win/)
}),
mount: (function(mount) {
assert(ENVIRONMENT_IS_NODE);
return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0)
}),
createNode: (function(parent, name, mode, dev) {
if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
var node = FS.createNode(parent, name, mode);
node.node_ops = NODEFS.node_ops;
node.stream_ops = NODEFS.stream_ops;
return node
}),
getMode: (function(path) {
var stat;
try {
stat = fs.lstatSync(path);
if (NODEFS.isWindows) {
stat.mode = stat.mode | (stat.mode & 146) >> 1
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
return stat.mode
}),
realPath: (function(node) {
var parts = [];
while (node.parent !== node) {
parts.push(node.name);
node = node.parent
}
parts.push(node.mount.opts.root);
parts.reverse();
return PATH.join.apply(null, parts)
}),
flagsToPermissionStringMap: {
0: "r",
1: "r+",
2: "r+",
64: "r",
65: "r+",
66: "r+",
129: "rx+",
193: "rx+",
514: "w+",
577: "w",
578: "w+",
705: "wx",
706: "wx+",
1024: "a",
1025: "a",
1026: "a+",
1089: "a",
1090: "a+",
1153: "ax",
1154: "ax+",
1217: "ax",
1218: "ax+",
4096: "rs",
4098: "rs+"
},
flagsToPermissionString: (function(flags) {
if (flags in NODEFS.flagsToPermissionStringMap) {
return NODEFS.flagsToPermissionStringMap[flags]
} else {
return flags
}
}),
node_ops: {
getattr: (function(node) {
var path = NODEFS.realPath(node);
var stat;
try {
stat = fs.lstatSync(path)
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
if (NODEFS.isWindows && !stat.blksize) {
stat.blksize = 4096
}
if (NODEFS.isWindows && !stat.blocks) {
stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0
}
return {
dev: stat.dev,
ino: stat.ino,
mode: stat.mode,
nlink: stat.nlink,
uid: stat.uid,
gid: stat.gid,
rdev: stat.rdev,
size: stat.size,
atime: stat.atime,
mtime: stat.mtime,
ctime: stat.ctime,
blksize: stat.blksize,
blocks: stat.blocks
}
}),
setattr: (function(node, attr) {
var path = NODEFS.realPath(node);
try {
if (attr.mode !== undefined) {
fs.chmodSync(path, attr.mode);
node.mode = attr.mode
}
if (attr.timestamp !== undefined) {
var date = new Date(attr.timestamp);
fs.utimesSync(path, date, date)
}
if (attr.size !== undefined) {
fs.truncateSync(path, attr.size)
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
}),
lookup: (function(parent, name) {
var path = PATH.join2(NODEFS.realPath(parent), name);
var mode = NODEFS.getMode(path);
return NODEFS.createNode(parent, name, mode)
}),
mknod: (function(parent, name, mode, dev) {
var node = NODEFS.createNode(parent, name, mode, dev);
var path = NODEFS.realPath(node);
try {
if (FS.isDir(node.mode)) {
fs.mkdirSync(path, node.mode)
} else {
fs.writeFileSync(path, "", {
mode: node.mode
})
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
return node
}),
rename: (function(oldNode, newDir, newName) {
var oldPath = NODEFS.realPath(oldNode);
var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
try {
fs.renameSync(oldPath, newPath)
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
}),
unlink: (function(parent, name) {
var path = PATH.join2(NODEFS.realPath(parent), name);
try {
fs.unlinkSync(path)
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
}),
rmdir: (function(parent, name) {
var path = PATH.join2(NODEFS.realPath(parent), name);
try {
fs.rmdirSync(path)
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
}),
readdir: (function(node) {
var path = NODEFS.realPath(node);
try {
return fs.readdirSync(path)
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
}),
symlink: (function(parent, newName, oldPath) {
var newPath = PATH.join2(NODEFS.realPath(parent), newName);
try {
fs.symlinkSync(oldPath, newPath)
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
}),
readlink: (function(node) {
var path = NODEFS.realPath(node);
try {
return fs.readlinkSync(path)
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
})
},
stream_ops: {
open: (function(stream) {
var path = NODEFS.realPath(stream.node);
try {
if (FS.isFile(stream.node.mode)) {
stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags))
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
}),
close: (function(stream) {
try {
if (FS.isFile(stream.node.mode) && stream.nfd) {
fs.closeSync(stream.nfd)
}
} catch (e) {
if (!e.code) throw e;
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
}),
read: (function(stream, buffer, offset, length, position) {
var nbuffer = new Buffer(length);
var res;
try {
res = fs.readSync(stream.nfd, nbuffer, 0, length, position)
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
if (res > 0) {
for (var i = 0; i < res; i++) {
buffer[offset + i] = nbuffer[i]
}
}
return res
}),
write: (function(stream, buffer, offset, length, position) {
var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
var res;
try {
res = fs.writeSync(stream.nfd, nbuffer, 0, length, position)
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
return res
}),
llseek: (function(stream, offset, whence) {
var position = offset;
if (whence === 1) {
position += stream.position
} else if (whence === 2) {
if (FS.isFile(stream.node.mode)) {
try {
var stat = fs.fstatSync(stream.nfd);
position += stat.size
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES[e.code])
}
}
}
if (position < 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
stream.position = position;
return position
})
}
};
var _stdin = allocate(1, "i32*", ALLOC_STATIC);
var _stdout = allocate(1, "i32*", ALLOC_STATIC);
var _stderr = allocate(1, "i32*", ALLOC_STATIC);
function _fflush(stream) {}
var FS = {
root: null,
mounts: [],
devices: [null],
streams: [],
nextInode: 1,
nameTable: null,
currentPath: "/",
initialized: false,
ignorePermissions: true,
trackingDelegate: {},
tracking: {
openFlags: {
READ: 1,
WRITE: 2
}
},
ErrnoError: null,
genericErrors: {},
handleFSError: (function(e) {
if (!(e instanceof FS.ErrnoError)) throw e + " : " + stackTrace();
return ___setErrNo(e.errno)
}),
lookupPath: (function(path, opts) {
path = PATH.resolve(FS.cwd(), path);
opts = opts || {};
if (!path) return {
path: "",
node: null
};
var defaults = {
follow_mount: true,
recurse_count: 0
};
for (var key in defaults) {
if (opts[key] === undefined) {
opts[key] = defaults[key]
}
}
if (opts.recurse_count > 8) {
throw new FS.ErrnoError(ERRNO_CODES.ELOOP)
}
var parts = PATH.normalizeArray(path.split("/").filter((function(p) {
return !!p
})), false);
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.resolve(PATH.dirname(current_path), link);
var lookup = FS.lookupPath(current_path, {
recurse_count: opts.recurse_count
});
current = lookup.node;
if (count++ > 40) {
throw new FS.ErrnoError(ERRNO_CODES.ELOOP)
}
}
}
}
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 err = FS.mayLookup(parent);
if (err) {
throw new FS.ErrnoError(err)
}
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) {
if (!FS.FSNode) {
FS.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
});
FS.FSNode.prototype = {};
var readMode = 292 | 73;
var writeMode = 146;
Object.defineProperties(FS.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)
})
}
})
}
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
}),
flagModes: {
"r": 0,
"rs": 1052672,
"r+": 2,
"w": 577,
"wx": 705,
"xw": 705,
"w+": 578,
"wx+": 706,
"xw+": 706,
"a": 1089,
"ax": 1217,
"xa": 1217,
"a+": 1090,
"ax+": 1218,
"xa+": 1218
},
modeStringToFlags: (function(str) {
var flags = FS.flagModes[str];
if (typeof flags === "undefined") {
throw new Error("Unknown file open mode: " + str)
}
return flags
}),
flagsToPermissionString: (function(flag) {
var accmode = flag & 2097155;
var perms = ["r", "w", "rw"][accmode];
if (flag & 512) {
perms += "w"
}
return perms
}),
nodePermissions: (function(node, perms) {
if (FS.ignorePermissions) {
return 0
}
if (perms.indexOf("r") !== -1 && !(node.mode & 292)) {
return ERRNO_CODES.EACCES
} else if (perms.indexOf("w") !== -1 && !(node.mode & 146)) {
return ERRNO_CODES.EACCES
} else if (perms.indexOf("x") !== -1 && !(node.mode & 73)) {
return ERRNO_CODES.EACCES
}
return 0
}),
mayLookup: (function(dir) {
var err = FS.nodePermissions(dir, "x");
if (err) return err;
if (!dir.node_ops.lookup) return ERRNO_CODES.EACCES;
return 0
}),
mayCreate: (function(dir, name) {
try {
var node = FS.lookupNode(dir, name);
return ERRNO_CODES.EEXIST
} 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 err = FS.nodePermissions(dir, "wx");
if (err) {
return err
}
if (isdir) {
if (!FS.isDir(node.mode)) {
return ERRNO_CODES.ENOTDIR
}
if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
return ERRNO_CODES.EBUSY
}
} else {
if (FS.isDir(node.mode)) {
return ERRNO_CODES.EISDIR
}
}
return 0
}),
mayOpen: (function(node, flags) {
if (!node) {
return ERRNO_CODES.ENOENT
}
if (FS.isLink(node.mode)) {
return ERRNO_CODES.ELOOP
} else if (FS.isDir(node.mode)) {
if ((flags & 2097155) !== 0 || flags & 512) {
return ERRNO_CODES.EISDIR
}
}
return FS.nodePermissions(node, FS.flagsToPermissionString(flags))
}),
MAX_OPEN_FDS: 4096,
nextfd: (function(fd_start, fd_end) {
fd_start = fd_start || 0;
fd_end = fd_end || FS.MAX_OPEN_FDS;
for (var fd = fd_start; fd <= fd_end; fd++) {
if (!FS.streams[fd]) {
return fd
}
}
throw new FS.ErrnoError(ERRNO_CODES.EMFILE)
}),
getStream: (function(fd) {
return FS.streams[fd]
}),
createStream: (function(stream, fd_start, fd_end) {
if (!FS.FSStream) {
FS.FSStream = (function() {});
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
})
}
})
}
var newStream = new FS.FSStream;
for (var p in stream) {
newStream[p] = stream[p]
}
stream = newStream;
var fd = FS.nextfd(fd_start, fd_end);
stream.fd = fd;
FS.streams[fd] = stream;
return stream
}),
closeStream: (function(fd) {
FS.streams[fd] = null
}),
getStreamFromPtr: (function(ptr) {
return FS.streams[ptr - 1]
}),
getPtrForStream: (function(stream) {
return stream ? stream.fd + 1 : 0
}),
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(ERRNO_CODES.ESPIPE)
})
},
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
}
var mounts = FS.getMounts(FS.root.mount);
var completed = 0;
function done(err) {
if (err) {
if (!done.errored) {
done.errored = true;
return callback(err)
}
return
}
if (++completed >= mounts.length) {
callback(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(ERRNO_CODES.EBUSY)
} 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(ERRNO_CODES.EBUSY)
}
if (!FS.isDir(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)
}
}
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(ERRNO_CODES.EINVAL)
}
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.indexOf(current.mount) !== -1) {
FS.destroyNode(current)
}
current = next
}
}));
node.mounted = null;
var idx = node.mount.mounts.indexOf(mount);
assert(idx !== -1);
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(ERRNO_CODES.EINVAL)
}
var err = FS.mayCreate(parent, name);
if (err) {
throw new FS.ErrnoError(err)
}
if (!parent.node_ops.mknod) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM)
}
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)
}),
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.resolve(oldpath)) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT)
}
var lookup = FS.lookupPath(newpath, {
parent: true
});
var parent = lookup.node;
if (!parent) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT)
}
var newname = PATH.basename(newpath);
var err = FS.mayCreate(parent, newname);
if (err) {
throw new FS.ErrnoError(err)
}
if (!parent.node_ops.symlink) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM)
}
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;
try {
lookup = FS.lookupPath(old_path, {
parent: true
});
old_dir = lookup.node;
lookup = FS.lookupPath(new_path, {
parent: true
});
new_dir = lookup.node
} catch (e) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY)
}
if (!old_dir || !new_dir) throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
if (old_dir.mount !== new_dir.mount) {
throw new FS.ErrnoError(ERRNO_CODES.EXDEV)
}
var old_node = FS.lookupNode(old_dir, old_name);
var relative = PATH.relative(old_path, new_dirname);
if (relative.charAt(0) !== ".") {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
relative = PATH.relative(new_path, old_dirname);
if (relative.charAt(0) !== ".") {
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)
}
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 err = FS.mayDelete(old_dir, old_name, isdir);
if (err) {
throw new FS.ErrnoError(err)
}
err = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);
if (err) {
throw new FS.ErrnoError(err)
}
if (!old_dir.node_ops.rename) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM)
}
if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY)
}
if (new_dir !== old_dir) {
err = FS.nodePermissions(old_dir, "w");
if (err) {
throw new FS.ErrnoError(err)
}
}
try {
if (FS.trackingDelegate["willMovePath"]) {
FS.trackingDelegate["willMovePath"](old_path, new_path)
}
} catch (e) {
console.log("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message)
}
FS.hashRemoveNode(old_node);
try {
old_dir.node_ops.rename(old_node, new_dir, new_name)
} catch (e) {
throw e
} finally {
FS.hashAddNode(old_node)
}
try {
if (FS.trackingDelegate["onMovePath"]) FS.trackingDelegate["onMovePath"](old_path, new_path)
} catch (e) {
console.log("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message)
}
}),
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 err = FS.mayDelete(parent, name, true);
if (err) {
throw new FS.ErrnoError(err)
}
if (!parent.node_ops.rmdir) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM)
}
if (FS.isMountpoint(node)) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY)
}
try {
if (FS.trackingDelegate["willDeletePath"]) {
FS.trackingDelegate["willDeletePath"](path)
}
} catch (e) {
console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message)
}
parent.node_ops.rmdir(parent, name);
FS.destroyNode(node);
try {
if (FS.trackingDelegate["onDeletePath"]) FS.trackingDelegate["onDeletePath"](path)
} catch (e) {
console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message)
}
}),
readdir: (function(path) {
var lookup = FS.lookupPath(path, {
follow: true
});
var node = lookup.node;
if (!node.node_ops.readdir) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)
}
return node.node_ops.readdir(node)
}),
unlink: (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 err = FS.mayDelete(parent, name, false);
if (err) {
if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM;
throw new FS.ErrnoError(err)
}
if (!parent.node_ops.unlink) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM)
}
if (FS.isMountpoint(node)) {
throw new FS.ErrnoError(ERRNO_CODES.EBUSY)
}
try {
if (FS.trackingDelegate["willDeletePath"]) {
FS.trackingDelegate["willDeletePath"](path)
}
} catch (e) {
console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message)
}
parent.node_ops.unlink(parent, name);
FS.destroyNode(node);
try {
if (FS.trackingDelegate["onDeletePath"]) FS.trackingDelegate["onDeletePath"](path)
} catch (e) {
console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message)
}
}),
readlink: (function(path) {
var lookup = FS.lookupPath(path);
var link = lookup.node;
if (!link) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT)
}
if (!link.node_ops.readlink) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
return 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(ERRNO_CODES.ENOENT)
}
if (!node.node_ops.getattr) {
throw new FS.ErrnoError(ERRNO_CODES.EPERM)
}
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(ERRNO_CODES.EPERM)
}
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.getStream(fd);
if (!stream) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF)
}
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(ERRNO_CODES.EPERM)
}
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.getStream(fd);
if (!stream) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF)
}
FS.chown(stream.node, uid, gid)
}),
truncate: (function(path, len) {
if (len < 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
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(ERRNO_CODES.EPERM)
}
if (FS.isDir(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EISDIR)
}
if (!FS.isFile(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
var err = FS.nodePermissions(node, "w");
if (err) {
throw new FS.ErrnoError(err)
}
node.node_ops.setattr(node, {
size: len,
timestamp: Date.now()
})
}),
ftruncate: (function(fd, len) {
var stream = FS.getStream(fd);
if (!stream) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF)
}
if ((stream.flags & 2097155) === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
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, fd_start, fd_end) {
if (path === "") {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT)
}
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(ERRNO_CODES.EEXIST)
}
} else {
node = FS.mknod(path, mode, 0);
created = true
}
}
if (!node) {
throw new FS.ErrnoError(ERRNO_CODES.ENOENT)
}
if (FS.isChrdev(node.mode)) {
flags &= ~512
}
if (!created) {
var err = FS.mayOpen(node, flags);
if (err) {
throw new FS.ErrnoError(err)
}
}
if (flags & 512) {
FS.truncate(node, 0)
}
flags &= ~(128 | 512);
var stream = FS.createStream({
node: node,
path: FS.getPath(node),
flags: flags,
seekable: true,
position: 0,
stream_ops: node.stream_ops,
ungotten: [],
error: false
}, fd_start, fd_end);
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;
Module["printErr"]("read file: " + path)
}
}
try {
if (FS.trackingDelegate["onOpenFile"]) {
var trackingFlags = 0;
if ((flags & 2097155) !== 1) {
trackingFlags |= FS.tracking.openFlags.READ
}
if ((flags & 2097155) !== 0) {
trackingFlags |= FS.tracking.openFlags.WRITE
}
FS.trackingDelegate["onOpenFile"](path, trackingFlags)
}
} catch (e) {
console.log("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message)
}
return stream
}),
close: (function(stream) {
try {
if (stream.stream_ops.close) {
stream.stream_ops.close(stream)
}
} catch (e) {
throw e
} finally {
FS.closeStream(stream.fd)
}
}),
llseek: (function(stream, offset, whence) {
if (!stream.seekable || !stream.stream_ops.llseek) {
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)
}
return stream.stream_ops.llseek(stream, offset, whence)
}),
read: (function(stream, buffer, offset, length, position) {
if (length < 0 || position < 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
if ((stream.flags & 2097155) === 1) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF)
}
if (FS.isDir(stream.node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EISDIR)
}
if (!stream.stream_ops.read) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
var seeking = true;
if (typeof position === "undefined") {
position = stream.position;
seeking = false
} else if (!stream.seekable) {
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)
}
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(ERRNO_CODES.EINVAL)
}
if ((stream.flags & 2097155) === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF)
}
if (FS.isDir(stream.node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.EISDIR)
}
if (!stream.stream_ops.write) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
if (stream.flags & 1024) {
FS.llseek(stream, 0, 2)
}
var seeking = true;
if (typeof position === "undefined") {
position = stream.position;
seeking = false
} else if (!stream.seekable) {
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)
}
var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
if (!seeking) stream.position += bytesWritten;
try {
if (stream.path && FS.trackingDelegate["onWriteToFile"]) FS.trackingDelegate["onWriteToFile"](stream.path)
} catch (e) {
console.log("FS.trackingDelegate['onWriteToFile']('" + path + "') threw an exception: " + e.message)
}
return bytesWritten
}),
allocate: (function(stream, offset, length) {
if (offset < 0 || length <= 0) {
throw new FS.ErrnoError(ERRNO_CODES.EINVAL)
}
if ((stream.flags & 2097155) === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EBADF)
}
if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENODEV)
}
if (!stream.stream_ops.allocate) {
throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)
}
stream.stream_ops.allocate(stream, offset, length)
}),
mmap: (function(stream, buffer, offset, length, position, prot, flags) {
if ((stream.flags & 2097155) === 1) {
throw new FS.ErrnoError(ERRNO_CODES.EACCES)
}
if (!stream.stream_ops.mmap) {
throw new FS.ErrnoError(ERRNO_CODES.ENODEV)
}
return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags)
}),
ioctl: (function(stream, cmd, arg) {
if (!stream.stream_ops.ioctl) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)
}
return stream.stream_ops.ioctl(stream, cmd, arg)
}),
readFile: (function(path, opts) {
opts = opts || {};
opts.flags = opts.flags || "r";
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 = "";
var utf8 = new Runtime.UTF8Processor;
for (var i = 0; i < length; i++) {
ret += utf8.processCChar(buf[i])
}
} else if (opts.encoding === "binary") {
ret = buf
}
FS.close(stream);
return ret
}),
writeFile: (function(path, data, opts) {
opts = opts || {};
opts.flags = opts.flags || "w";
opts.encoding = opts.encoding || "utf8";
if (opts.encoding !== "utf8" && opts.encoding !== "binary") {
throw new Error('Invalid encoding type "' + opts.encoding + '"')
}
var stream = FS.open(path, opts.flags, opts.mode);
if (opts.encoding === "utf8") {
var utf8 = new Runtime.UTF8Processor;
var buf = new Uint8Array(utf8.processJSString(data));
FS.write(stream, buf, 0, buf.length, 0, opts.canOwn)
} else if (opts.encoding === "binary") {
FS.write(stream, data, 0, data.length, 0, opts.canOwn)
}
FS.close(stream)
}),
cwd: (function() {
return FS.currentPath
}),
chdir: (function(path) {
var lookup = FS.lookupPath(path, {
follow: true
});
if (!FS.isDir(lookup.node.mode)) {
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)
}
var err = FS.nodePermissions(lookup.node, "x");
if (err) {
throw new FS.ErrnoError(err)
}
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() {
return 0
})
});
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 random_device;
if (typeof crypto !== "undefined") {
var randomBuffer = new Uint8Array(1);
random_device = (function() {
crypto.getRandomValues(randomBuffer);
return randomBuffer[0]
})
} else if (ENVIRONMENT_IS_NODE) {
random_device = (function() {
return require("crypto").randomBytes(1)[0]
})
} else {
random_device = (function() {
return Math.floor(Math.random() * 256)
})
}
FS.createDevice("/dev", "random", random_device);
FS.createDevice("/dev", "urandom", random_device);
FS.mkdir("/dev/shm");
FS.mkdir("/dev/shm/tmp")
}),
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", "r");
HEAP32[_stdin >> 2] = FS.getPtrForStream(stdin);
assert(stdin.fd === 0, "invalid handle for stdin (" + stdin.fd + ")");
var stdout = FS.open("/dev/stdout", "w");
HEAP32[_stdout >> 2] = FS.getPtrForStream(stdout);
assert(stdout.fd === 1, "invalid handle for stdout (" + stdout.fd + ")");
var stderr = FS.open("/dev/stderr", "w");
HEAP32[_stderr >> 2] = FS.getPtrForStream(stderr);
assert(stderr.fd === 2, "invalid handle for stderr (" + stderr.fd + ")")
}),
ensureErrnoError: (function() {
if (FS.ErrnoError) return;
FS.ErrnoError = function ErrnoError(errno) {
this.errno = errno;
for (var key in ERRNO_CODES) {
if (ERRNO_CODES[key] === errno) {
this.code = key;
break
}
}
this.message = ERRNO_MESSAGES[errno]
};
FS.ErrnoError.prototype = new Error;
FS.ErrnoError.prototype.constructor = FS.ErrnoError;
[ERRNO_CODES.ENOENT].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()
}),
init: (function(input, output, error) {
assert(!FS.init.initialized, "FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");
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)
}
}),
getMode: (function(canRead, canWrite) {
var mode = 0;
if (canRead) mode |= 292 | 73;
if (canWrite) mode |= 146;
return mode
}),
joinPath: (function(parts, forceRelative) {
var path = PATH.join.apply(null, parts);
if (forceRelative && path[0] == "/") path = path.substr(1);
return path
}),
absolutePath: (function(relative, base) {
return PATH.resolve(base, relative)
}),
standardizePath: (function(path) {
return PATH.normalize(path)
}),
findObject: (function(path, dontResolveLastLink) {
var ret = FS.analyzePath(path, dontResolveLastLink);
if (ret.exists) {
return ret.object
} else {
___setErrNo(ret.error);
return null
}
}),
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) {
ret.error = e.errno
}
return ret
}),
createFolder: (function(parent, name, canRead, canWrite) {
var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name);
var mode = FS.getMode(canRead, canWrite);
return FS.mkdir(path, mode)
}),
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 ? PATH.join2(typeof parent === "string" ? parent : FS.getPath(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, "w");
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(ERRNO_CODES.EIO)
}
if (result === undefined && bytesRead === 0) {
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN)
}
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(ERRNO_CODES.EIO)
}
}
if (length) {
stream.node.timestamp = Date.now()
}
return i
})
});
return FS.mkdev(path, mode, dev)
}),
createLink: (function(parent, name, target, canRead, canWrite) {
var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name);
return FS.symlink(target, path)
}),
forceLoadFile: (function(obj) {
if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
var success = 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 (Module["read"]) {
try {
obj.contents = intArrayFromString(Module["read"](obj.url), true);
obj.usedBytes = obj.contents.length
} catch (e) {
success = false
}
} else {
throw new Error("Cannot load without read() or XMLHttpRequest.")
} if (!success) ___setErrNo(ERRNO_CODES.EIO);
return success
}),
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 = Math.floor(idx / this.chunkSize);
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 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);
if (typeof Uint8Array != "undefined") 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 || [])
} else {
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]
}));
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.defineProperty(lazyArray, "length", {
get: (function() {
if (!this.lengthKnown) {
this.cacheLength()
}
return this._length
})
});
Object.defineProperty(lazyArray, "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.defineProperty(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() {
if (!FS.forceLoadFile(node)) {
throw new FS.ErrnoError(ERRNO_CODES.EIO)
}
return fn.apply(null, arguments)
}
}));
stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
if (!FS.forceLoadFile(node)) {
throw new FS.ErrnoError(ERRNO_CODES.EIO)
}
var contents = stream.node.contents;
if (position >= contents.length) return 0;
var size = Math.min(contents.length - position, length);
assert(size >= 0);
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
};
node.stream_ops = stream_ops;
return node
}),
createPreloadedFile: (function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) {
Browser.init();
var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
function processData(byteArray) {
function finish(byteArray) {
if (!dontCreateFile) {
FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn)
}
if (onload) onload();
removeRunDependency("cp " + fullname)
}
var handled = false;
Module["preloadPlugins"].forEach((function(plugin) {
if (handled) return;
if (plugin["canHandle"](fullname)) {
plugin["handle"](byteArray, fullname, finish, (function() {
if (onerror) onerror();
removeRunDependency("cp " + fullname)
}));
handled = true
}
}));
if (!handled) finish(byteArray)
}
addRunDependency("cp " + fullname);
if (typeof url == "string") {
Browser.asyncLoad(url, (function(byteArray) {
processData(byteArray)
}), onerror)
} else {
processData(url)
}
}),
indexedDB: (function() {
return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB
}),
DB_NAME: (function() {
return "EM_FS_" + window.location.pathname
}),
DB_VERSION: 20,
DB_STORE_NAME: "FILE_DATA",
saveFilesToDB: (function(paths, onload, onerror) {
onload = onload || (function() {});
onerror = onerror || (function() {});
var indexedDB = FS.indexedDB();
try {
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION)
} catch (e) {
return onerror(e)
}
openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
console.log("creating db");
var db = openRequest.result;
db.createObjectStore(FS.DB_STORE_NAME)
};
openRequest.onsuccess = function openRequest_onsuccess() {
var db = openRequest.result;
var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite");
var files = transaction.objectStore(FS.DB_STORE_NAME);
var ok = 0,
fail = 0,
total = paths.length;
function finish() {
if (fail == 0) onload();
else onerror()
}
paths.forEach((function(path) {
var putRequest = files.put(FS.analyzePath(path).object.contents, path);
putRequest.onsuccess = function putRequest_onsuccess() {
ok++;
if (ok + fail == total) finish()
};
putRequest.onerror = function putRequest_onerror() {
fail++;
if (ok + fail == total) finish()
}
}));
transaction.onerror = onerror
};
openRequest.onerror = onerror
}),
loadFilesFromDB: (function(paths, onload, onerror) {
onload = onload || (function() {});
onerror = onerror || (function() {});
var indexedDB = FS.indexedDB();
try {
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION)
} catch (e) {
return onerror(e)
}
openRequest.onupgradeneeded = onerror;
openRequest.onsuccess = function openRequest_onsuccess() {
var db = openRequest.result;
try {
var transaction = db.transaction([FS.DB_STORE_NAME], "readonly")
} catch (e) {
onerror(e);
return
}
var files = transaction.objectStore(FS.DB_STORE_NAME);
var ok = 0,
fail = 0,
total = paths.length;
function finish() {
if (fail == 0) onload();
else onerror()
}
paths.forEach((function(path) {
var getRequest = files.get(path);
getRequest.onsuccess = function getRequest_onsuccess() {
if (FS.analyzePath(path).exists) {
FS.unlink(path)
}
FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
ok++;
if (ok + fail == total) finish()
};
getRequest.onerror = function getRequest_onerror() {
fail++;
if (ok + fail == total) finish()
}
}));
transaction.onerror = onerror
};
openRequest.onerror = onerror
})
};
var PATH = {
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.charAt(0) === "/",
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 "/";
var lastSlash = path.lastIndexOf("/");
if (lastSlash === -1) return path;
return path.substr(lastSlash + 1)
}),
extname: (function(path) {
return PATH.splitPath(path)[3]
}),
join: (function() {
var paths = Array.prototype.slice.call(arguments, 0);
return PATH.normalize(paths.join("/"))
}),
join2: (function(l, r) {
return PATH.normalize(l + "/" + r)
}),
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.charAt(0) === "/"
}
resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter((function(p) {
return !!p
})), !resolvedAbsolute).join("/");
return (resolvedAbsolute ? "/" : "") + resolvedPath || "."
}),
relative: (function(from, to) {
from = PATH.resolve(from).substr(1);
to = PATH.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 Browser = {
mainLoop: {
scheduler: null,
method: "",
shouldPause: false,
paused: false,
queue: [],
pause: (function() {
Browser.mainLoop.shouldPause = true
}),
resume: (function() {
if (Browser.mainLoop.paused) {
Browser.mainLoop.paused = false;
Browser.mainLoop.scheduler()
}
Browser.mainLoop.shouldPause = false
}),
updateStatus: (function() {
if (Module["setStatus"]) {
var message = Module["statusMessage"] || "Please wait...";
var remaining = Browser.mainLoop.remainingBlockers;
var expected = Browser.mainLoop.expectedBlockers;
if (remaining) {
if (remaining < expected) {
Module["setStatus"](message + " (" + (expected - remaining) + "/" + expected + ")")
} else {
Module["setStatus"](message)
}
} else {
Module["setStatus"]("")
}
}
}),
runIter: (function(func) {
if (ABORT) return;
if (Module["preMainLoop"]) {
var preRet = Module["preMainLoop"]();
if (preRet === false) {
return
}
}
try {
func()
} catch (e) {
if (e instanceof ExitStatus) {
return
} else {
if (e && typeof e === "object" && e.stack) Module.printErr("exception thrown: " + [e, e.stack]);
throw e
}
}
if (Module["postMainLoop"]) Module["postMainLoop"]()
})
},
isFullScreen: false,
pointerLock: false,
moduleContextCreatedCallbacks: [],
workers: [],
init: (function() {
if (!Module["preloadPlugins"]) Module["preloadPlugins"] = [];
if (Browser.initted) return;
Browser.initted = true;
try {
new Blob;
Browser.hasBlobConstructor = true
} catch (e) {
Browser.hasBlobConstructor = false;
console.log("warning: no blob constructor, cannot create blobs with mimetypes")
}
Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : !Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null;
Browser.URLObject = typeof window != "undefined" ? window.URL ? window.URL : window.webkitURL : undefined;
if (!Module.noImageDecoding && typeof Browser.URLObject === "undefined") {
console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
Module.noImageDecoding = true
}
var imagePlugin = {};
imagePlugin["canHandle"] = function imagePlugin_canHandle(name) {
return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name)
};
imagePlugin["handle"] = function imagePlugin_handle(byteArray, name, onload, onerror) {
var b = null;
if (Browser.hasBlobConstructor) {
try {
b = new Blob([byteArray], {
type: Browser.getMimetype(name)
});
if (b.size !== byteArray.length) {
b = new Blob([(new Uint8Array(byteArray)).buffer], {
type: Browser.getMimetype(name)
})
}
} catch (e) {
Runtime.warnOnce("Blob constructor present but fails: " + e + "; falling back to blob builder")
}
}
if (!b) {
var bb = new Browser.BlobBuilder;
bb.append((new Uint8Array(byteArray)).buffer);
b = bb.getBlob()
}
var url = Browser.URLObject.createObjectURL(b);
var img = new Image;
img.onload = function img_onload() {
assert(img.complete, "Image " + name + " could not be decoded");
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
Module["preloadedImages"][name] = canvas;
Browser.URLObject.revokeObjectURL(url);
if (onload) onload(byteArray)
};
img.onerror = function img_onerror(event) {
console.log("Image " + url + " could not be decoded");
if (onerror) onerror()
};
img.src = url
};
Module["preloadPlugins"].push(imagePlugin);
var audioPlugin = {};
audioPlugin["canHandle"] = function audioPlugin_canHandle(name) {
return !Module.noAudioDecoding && name.substr(-4) in {
".ogg": 1,
".wav": 1,
".mp3": 1
}
};
audioPlugin["handle"] = function audioPlugin_handle(byteArray, name, onload, onerror) {
var done = false;
function finish(audio) {
if (done) return;
done = true;
Module["preloadedAudios"][name] = audio;
if (onload) onload(byteArray)
}
function fail() {
if (done) return;
done = true;
Module["preloadedAudios"][name] = new Audio;
if (onerror) onerror()
}
if (Browser.hasBlobConstructor) {
try {
var b = new Blob([byteArray], {
type: Browser.getMimetype(name)
})
} catch (e) {
return fail()
}
var url = Browser.URLObject.createObjectURL(b);
var audio = new Audio;
audio.addEventListener("canplaythrough", (function() {
finish(audio)
}), false);
audio.onerror = function audio_onerror(event) {
if (done) return;
console.log("warning: browser could not fully decode audio " + name + ", trying slower base64 approach");
function encode64(data) {
var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var PAD = "=";
var ret = "";
var leftchar = 0;
var leftbits = 0;
for (var i = 0; i < data.length; i++) {
leftchar = leftchar << 8 | data[i];
leftbits += 8;
while (leftbits >= 6) {
var curr = leftchar >> leftbits - 6 & 63;
leftbits -= 6;
ret += BASE[curr]
}
}
if (leftbits == 2) {
ret += BASE[(leftchar & 3) << 4];
ret += PAD + PAD
} else if (leftbits == 4) {
ret += BASE[(leftchar & 15) << 2];
ret += PAD
}
return ret
}
audio.src = "data:audio/x-" + name.substr(-3) + ";base64," + encode64(byteArray);
finish(audio)
};
audio.src = url;
Browser.safeSetTimeout((function() {
finish(audio)
}), 1e4)
} else {
return fail()
}
};
Module["preloadPlugins"].push(audioPlugin);
var canvas = Module["canvas"];
function pointerLockChange() {
Browser.pointerLock = document["pointerLockElement"] === canvas || document["mozPointerLockElement"] === canvas || document["webkitPointerLockElement"] === canvas || document["msPointerLockElement"] === canvas
}
if (canvas) {
canvas.requestPointerLock = canvas["requestPointerLock"] || canvas["mozRequestPointerLock"] || canvas["webkitRequestPointerLock"] || canvas["msRequestPointerLock"] || (function() {});
canvas.exitPointerLock = document["exitPointerLock"] || document["mozExitPointerLock"] || document["webkitExitPointerLock"] || document["msExitPointerLock"] || (function() {});
canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
document.addEventListener("pointerlockchange", pointerLockChange, false);
document.addEventListener("mozpointerlockchange", pointerLockChange, false);
document.addEventListener("webkitpointerlockchange", pointerLockChange, false);
document.addEventListener("mspointerlockchange", pointerLockChange, false);
if (Module["elementPointerLock"]) {
canvas.addEventListener("click", (function(ev) {
if (!Browser.pointerLock && canvas.requestPointerLock) {
canvas.requestPointerLock();
ev.preventDefault()
}
}), false)
}
}
}),
createContext: (function(canvas, useWebGL, setInModule, webGLContextAttributes) {
if (useWebGL && Module.ctx && canvas == Module.canvas) return Module.ctx;
var ctx;
var contextHandle;
if (useWebGL) {
var contextAttributes = {
antialias: false,
alpha: false
};
if (webGLContextAttributes) {
for (var attribute in webGLContextAttributes) {
contextAttributes[attribute] = webGLContextAttributes[attribute]
}
}
contextHandle = GL.createContext(canvas, contextAttributes);
ctx = GL.getContext(contextHandle).GLctx;
canvas.style.backgroundColor = "black"
} else {
ctx = canvas.getContext("2d")
} if (!ctx) return null;
if (setInModule) {
if (!useWebGL) assert(typeof GLctx === "undefined", "cannot set in module if GLctx is used, but we are a non-GL context that would replace it");
Module.ctx = ctx;
if (useWebGL) GL.makeContextCurrent(contextHandle);
Module.useWebGL = useWebGL;
Browser.moduleContextCreatedCallbacks.forEach((function(callback) {
callback()
}));
Browser.init()
}
return ctx
}),
destroyContext: (function(canvas, useWebGL, setInModule) {}),
fullScreenHandlersInstalled: false,
lockPointer: undefined,
resizeCanvas: undefined,
requestFullScreen: (function(lockPointer, resizeCanvas) {
Browser.lockPointer = lockPointer;
Browser.resizeCanvas = resizeCanvas;
if (typeof Browser.lockPointer === "undefined") Browser.lockPointer = true;
if (typeof Browser.resizeCanvas === "undefined") Browser.resizeCanvas = false;
var canvas = Module["canvas"];
function fullScreenChange() {
Browser.isFullScreen = false;
var canvasContainer = canvas.parentNode;
if ((document["webkitFullScreenElement"] || document["webkitFullscreenElement"] || document["mozFullScreenElement"] || document["mozFullscreenElement"] || document["fullScreenElement"] || document["fullscreenElement"] || document["msFullScreenElement"] || document["msFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvasContainer) {
canvas.cancelFullScreen = document["cancelFullScreen"] || document["mozCancelFullScreen"] || document["webkitCancelFullScreen"] || document["msExitFullscreen"] || document["exitFullscreen"] || (function() {});
canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
if (Browser.lockPointer) canvas.requestPointerLock();
Browser.isFullScreen = true;
if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize()
} else {
canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
canvasContainer.parentNode.removeChild(canvasContainer);
if (Browser.resizeCanvas) Browser.setWindowedCanvasSize()
} if (Module["onFullScreen"]) Module["onFullScreen"](Browser.isFullScreen);
Browser.updateCanvasDimensions(canvas)
}
if (!Browser.fullScreenHandlersInstalled) {
Browser.fullScreenHandlersInstalled = true;
document.addEventListener("fullscreenchange", fullScreenChange, false);
document.addEventListener("mozfullscreenchange", fullScreenChange, false);
document.addEventListener("webkitfullscreenchange", fullScreenChange, false);
document.addEventListener("MSFullscreenChange", fullScreenChange, false)
}
var canvasContainer = document.createElement("div");
canvas.parentNode.insertBefore(canvasContainer, canvas);
canvasContainer.appendChild(canvas);
canvasContainer.requestFullScreen = canvasContainer["requestFullScreen"] || canvasContainer["mozRequestFullScreen"] || canvasContainer["msRequestFullscreen"] || (canvasContainer["webkitRequestFullScreen"] ? (function() {
canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])
}) : null);
canvasContainer.requestFullScreen()
}),
nextRAF: 0,
fakeRequestAnimationFrame: (function(func) {
var now = Date.now();
if (Browser.nextRAF === 0) {
Browser.nextRAF = now + 1e3 / 60
} else {
while (now + 2 >= Browser.nextRAF) {
Browser.nextRAF += 1e3 / 60
}
}
var delay = Math.max(Browser.nextRAF - now, 0);
setTimeout(func, delay)
}),
requestAnimationFrame: function requestAnimationFrame(func) {
if (typeof window === "undefined") {
Browser.fakeRequestAnimationFrame(func)
} else {
if (!window.requestAnimationFrame) {
window.requestAnimationFrame = window["requestAnimationFrame"] || window["mozRequestAnimationFrame"] || window["webkitRequestAnimationFrame"] || window["msRequestAnimationFrame"] || window["oRequestAnimationFrame"] || Browser.fakeRequestAnimationFrame
}
window.requestAnimationFrame(func)
}
},
safeCallback: (function(func) {
return (function() {
if (!ABORT) return func.apply(null, arguments)
})
}),
safeRequestAnimationFrame: (function(func) {
return Browser.requestAnimationFrame((function() {
if (!ABORT) func()
}))
}),
safeSetTimeout: (function(func, timeout) {
Module["noExitRuntime"] = true;
return setTimeout((function() {
if (!ABORT) func()
}), timeout)
}),
safeSetInterval: (function(func, timeout) {
Module["noExitRuntime"] = true;
return setInterval((function() {
if (!ABORT) func()
}), timeout)
}),
getMimetype: (function(name) {
return {
"jpg": "image/jpeg",
"jpeg": "image/jpeg",
"png": "image/png",
"bmp": "image/bmp",
"ogg": "audio/ogg",
"wav": "audio/wav",
"mp3": "audio/mpeg"
}[name.substr(name.lastIndexOf(".") + 1)]
}),
getUserMedia: (function(func) {
if (!window.getUserMedia) {
window.getUserMedia = navigator["getUserMedia"] || navigator["mozGetUserMedia"]
}
window.getUserMedia(func)
}),
getMovementX: (function(event) {
return event["movementX"] || event["mozMovementX"] || event["webkitMovementX"] || 0
}),
getMovementY: (function(event) {
return event["movementY"] || event["mozMovementY"] || event["webkitMovementY"] || 0
}),
getMouseWheelDelta: (function(event) {
var delta = 0;
switch (event.type) {
case "DOMMouseScroll":
delta = event.detail;
break;
case "mousewheel":
delta = -event.wheelDelta;
break;
case "wheel":
delta = event.deltaY;
break;
default:
throw "unrecognized mouse wheel event: " + event.type
}
return Math.max(-1, Math.min(1, delta))
}),
mouseX: 0,
mouseY: 0,
mouseMovementX: 0,
mouseMovementY: 0,
touches: {},
lastTouches: {},
calculateMouseEvent: (function(event) {
if (Browser.pointerLock) {
if (event.type != "mousemove" && "mozMovementX" in event) {
Browser.mouseMovementX = Browser.mouseMovementY = 0
} else {
Browser.mouseMovementX = Browser.getMovementX(event);
Browser.mouseMovementY = Browser.getMovementY(event)
} if (typeof SDL != "undefined") {
Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
Browser.mouseY = SDL.mouseY + Browser.mouseMovementY
} else {
Browser.mouseX += Browser.mouseMovementX;
Browser.mouseY += Browser.mouseMovementY
}
} else {
var rect = Module["canvas"].getBoundingClientRect();
var cw = Module["canvas"].width;
var ch = Module["canvas"].height;
var scrollX = typeof window.scrollX !== "undefined" ? window.scrollX : window.pageXOffset;
var scrollY = typeof window.scrollY !== "undefined" ? window.scrollY : window.pageYOffset;
if (event.type === "touchstart" || event.type === "touchend" || event.type === "touchmove") {
var touch = event.touch;
if (touch === undefined) {
return
}
var adjustedX = touch.pageX - (scrollX + rect.left);
var adjustedY = touch.pageY - (scrollY + rect.top);
adjustedX = adjustedX * (cw / rect.width);
adjustedY = adjustedY * (ch / rect.height);
var coords = {
x: adjustedX,
y: adjustedY
};
if (event.type === "touchstart") {
Browser.lastTouches[touch.identifier] = coords;
Browser.touches[touch.identifier] = coords
} else if (event.type === "touchend" || event.type === "touchmove") {
Browser.lastTouches[touch.identifier] = Browser.touches[touch.identifier];
Browser.touches[touch.identifier] = {
x: adjustedX,
y: adjustedY
}
}
return
}
var x = event.pageX - (scrollX + rect.left);
var y = event.pageY - (scrollY + rect.top);
x = x * (cw / rect.width);
y = y * (ch / rect.height);
Browser.mouseMovementX = x - Browser.mouseX;
Browser.mouseMovementY = y - Browser.mouseY;
Browser.mouseX = x;
Browser.mouseY = y
}
}),
xhrLoad: (function(url, onload, onerror) {
var xhr = new XMLHttpRequest;
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onload = function xhr_onload() {
if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
onload(xhr.response)
} else {
onerror()
}
};
xhr.onerror = onerror;
xhr.send(null)
}),
asyncLoad: (function(url, onload, onerror, noRunDep) {
Browser.xhrLoad(url, (function(arrayBuffer) {
assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
onload(new Uint8Array(arrayBuffer));
if (!noRunDep) removeRunDependency("al " + url)
}), (function(event) {
if (onerror) {
onerror()
} else {
throw 'Loading data file "' + url + '" failed.'
}
}));
if (!noRunDep) addRunDependency("al " + url)
}),
resizeListeners: [],
updateResizeListeners: (function() {
var canvas = Module["canvas"];
Browser.resizeListeners.forEach((function(listener) {
listener(canvas.width, canvas.height)
}))
}),
setCanvasSize: (function(width, height, noUpdates) {
var canvas = Module["canvas"];
Browser.updateCanvasDimensions(canvas, width, height);
if (!noUpdates) Browser.updateResizeListeners()
}),
windowedWidth: 0,
windowedHeight: 0,
setFullScreenCanvasSize: (function() {
if (typeof SDL != "undefined") {
var flags = HEAPU32[SDL.screen + Runtime.QUANTUM_SIZE * 0 >> 2];
flags = flags | 8388608;
HEAP32[SDL.screen + Runtime.QUANTUM_SIZE * 0 >> 2] = flags
}
Browser.updateResizeListeners()
}),
setWindowedCanvasSize: (function() {
if (typeof SDL != "undefined") {
var flags = HEAPU32[SDL.screen + Runtime.QUANTUM_SIZE * 0 >> 2];
flags = flags & ~8388608;
HEAP32[SDL.screen + Runtime.QUANTUM_SIZE * 0 >> 2] = flags
}
Browser.updateResizeListeners()
}),
updateCanvasDimensions: (function(canvas, wNative, hNative) {
if (wNative && hNative) {
canvas.widthNative = wNative;
canvas.heightNative = hNative
} else {
wNative = canvas.widthNative;
hNative = canvas.heightNative
}
var w = wNative;
var h = hNative;
if (Module["forcedAspectRatio"] && Module["forcedAspectRatio"] > 0) {
if (w / h < Module["forcedAspectRatio"]) {
w = Math.round(h * Module["forcedAspectRatio"])
} else {
h = Math.round(w / Module["forcedAspectRatio"])
}
}
if ((document["webkitFullScreenElement"] || document["webkitFullscreenElement"] || document["mozFullScreenElement"] || document["mozFullscreenElement"] || document["fullScreenElement"] || document["fullscreenElement"] || document["msFullScreenElement"] || document["msFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvas.parentNode && typeof screen != "undefined") {
var factor = Math.min(screen.width / w, screen.height / h);
w = Math.round(w * factor);
h = Math.round(h * factor)
}
if (Browser.resizeCanvas) {
if (canvas.width != w) canvas.width = w;
if (canvas.height != h) canvas.height = h;
if (typeof canvas.style != "undefined") {
canvas.style.removeProperty("width");
canvas.style.removeProperty("height")
}
} else {
if (canvas.width != wNative) canvas.width = wNative;
if (canvas.height != hNative) canvas.height = hNative;
if (typeof canvas.style != "undefined") {
if (w != wNative || h != hNative) {
canvas.style.setProperty("width", w + "px", "important");
canvas.style.setProperty("height", h + "px", "important")
} else {
canvas.style.removeProperty("width");
canvas.style.removeProperty("height")
}
}
}
})
};
function ___assert_fail(condition, filename, line, func) {
ABORT = true;
throw "Assertion failed: " + Pointer_stringify(condition) + ", at: " + [filename ? Pointer_stringify(filename) : "unknown filename", line, func ? Pointer_stringify(func) : "unknown function"] + " at " + stackTrace()
}
function _time(ptr) {
var ret = Math.floor(Date.now() / 1e3);
if (ptr) {
HEAP32[ptr >> 2] = ret
}
return ret
}
Module["_strlen"] = _strlen;
___errno_state = Runtime.staticAlloc(4);
HEAP32[___errno_state >> 2] = 0;
Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) {
Browser.requestFullScreen(lockPointer, resizeCanvas)
};
Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) {
Browser.requestAnimationFrame(func)
};
Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) {
Browser.setCanvasSize(width, height, noUpdates)
};
Module["pauseMainLoop"] = function Module_pauseMainLoop() {
Browser.mainLoop.pause()
};
Module["resumeMainLoop"] = function Module_resumeMainLoop() {
Browser.mainLoop.resume()
};
Module["getUserMedia"] = function Module_getUserMedia() {
Browser.getUserMedia()
};
FS.staticInit();
__ATINIT__.unshift({
func: (function() {
if (!Module["noFSInit"] && !FS.init.initialized) FS.init()
})
});
__ATMAIN__.push({
func: (function() {
FS.ignorePermissions = false
})
});
__ATEXIT__.push({
func: (function() {
FS.quit()
})
});
Module["FS_createFolder"] = FS.createFolder;
Module["FS_createPath"] = FS.createPath;
Module["FS_createDataFile"] = FS.createDataFile;
Module["FS_createPreloadedFile"] = FS.createPreloadedFile;
Module["FS_createLazyFile"] = FS.createLazyFile;
Module["FS_createLink"] = FS.createLink;
Module["FS_createDevice"] = FS.createDevice;
__ATINIT__.unshift({
func: (function() {
TTY.init()
})
});
__ATEXIT__.push({
func: (function() {
TTY.shutdown()
})
});
TTY.utf8 = new Runtime.UTF8Processor;
if (ENVIRONMENT_IS_NODE) {
var fs = require("fs");
NODEFS.staticInit()
}
STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
staticSealed = true;
STACK_MAX = STACK_BASE + 5242880;
DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
var ctlz_i8 = allocate([8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "i8", ALLOC_DYNAMIC);
var cttz_i8 = allocate([8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0], "i8", ALLOC_DYNAMIC);
var Math_min = Math.min;
function invoke_vii(index, a1, a2) {
try {
Module["dynCall_vii"](index, a1, a2)
} catch (e) {
if (typeof e !== "number" && e !== "longjmp") throw e;
asm["setThrew"](1, 0)
}
}
function asmPrintInt(x, y) {
Module.print("int " + x + "," + y)
}
function asmPrintFloat(x, y) {
Module.print("float " + x + "," + y)
}
var asm = (function(global, env, buffer) {
// EMSCRIPTEN_START_ASM
"use asm";
var a = new global.Int8Array(buffer);
var b = new global.Int16Array(buffer);
var c = new global.Int32Array(buffer);
var d = new global.Uint8Array(buffer);
var e = new global.Uint16Array(buffer);
var f = new global.Uint32Array(buffer);
var g = new global.Float32Array(buffer);
var h = new global.Float64Array(buffer);
var i = env.STACKTOP | 0;
var j = env.STACK_MAX | 0;
var k = env.tempDoublePtr | 0;
var l = env.ABORT | 0;
var m = env.cttz_i8 | 0;
var n = env.ctlz_i8 | 0;
var o = 0;
var p = 0;
var q = 0;
var r = 0;
var s = +env.NaN,
t = +env.Infinity;
var u = 0,
v = 0,
w = 0,
x = 0,
y = 0.0,
z = 0,
A = 0,
B = 0,
C = 0.0;
var D = 0;
var E = 0;
var F = 0;
var G = 0;
var H = 0;
var I = 0;
var J = 0;
var K = 0;
var L = 0;
var M = 0;
var N = global.Math.floor;
var O = global.Math.abs;
var P = global.Math.sqrt;
var Q = global.Math.pow;
var R = global.Math.cos;
var S = global.Math.sin;
var T = global.Math.tan;
var U = global.Math.acos;
var V = global.Math.asin;
var W = global.Math.atan;
var X = global.Math.atan2;
var Y = global.Math.exp;
var Z = global.Math.log;
var _ = global.Math.ceil;
var $ = global.Math.imul;
var aa = env.abort;
var ba = env.assert;
var ca = env.asmPrintInt;
var da = env.asmPrintFloat;
var ea = env.min;
var fa = env.jsCall;
var ga = env.invoke_vii;
var ha = env._fflush;
var ia = env._sysconf;
var ja = env._abort;
var ka = env.___setErrNo;
var la = env._sbrk;
var ma = env._time;
var na = env._emscripten_memcpy_big;
var oa = env.___assert_fail;
var pa = env.___errno_location;
var qa = 0.0;
// EMSCRIPTEN_START_FUNCS
function sa(a) {
a = a | 0;
var b = 0;
b = i;
i = i + a | 0;
i = i + 7 & -8;
return b | 0
}
function ta() {
return i | 0
}
function ua(a) {
a = a | 0;
i = a
}
function va(a, b) {
a = a | 0;
b = b | 0;
if ((o | 0) == 0) {
o = a;
p = b
}
}
function wa(b) {
b = b | 0;
a[k >> 0] = a[b >> 0];
a[k + 1 >> 0] = a[b + 1 >> 0];
a[k + 2 >> 0] = a[b + 2 >> 0];
a[k + 3 >> 0] = a[b + 3 >> 0]
}
function xa(b) {
b = b | 0;
a[k >> 0] = a[b >> 0];
a[k + 1 >> 0] = a[b + 1 >> 0];
a[k + 2 >> 0] = a[b + 2 >> 0];
a[k + 3 >> 0] = a[b + 3 >> 0];
a[k + 4 >> 0] = a[b + 4 >> 0];
a[k + 5 >> 0] = a[b + 5 >> 0];
a[k + 6 >> 0] = a[b + 6 >> 0];
a[k + 7 >> 0] = a[b + 7 >> 0]
}
function ya(a) {
a = a | 0;
D = a
}
function za() {
return D | 0
}
function Aa() {
var a = 0,
b = 0;
b = i;
a = Sa(1, 440) | 0;
if ((Ha(a) | 0) == 0) {
i = b;
return a | 0
} else {
oa(8, 40, 17, 56)
}
return 0
}
function Ba(a, b, d, e) {
a = a | 0;
b = b | 0;
d = d | 0;
e = e | 0;
var f = 0,
g = 0,
h = 0,
j = 0;
f = i;
_a(Ja(a, d) | 0, b | 0, d | 0) | 0;
if ((Ka(a, d) | 0) != 0) {
oa(72, 40, 25, 112)
}
g = a + 28 | 0;
if ((Ma(a, g) | 0) != 1) {
i = f;
return 0
}
d = a + 48 | 0;
h = a + 408 | 0;
j = a + 412 | 0;
while (1) {
b = Ea(g) | 0;
if ((Da(g) | 0) != 0 ? (Fa(d, b) | 0) != 0 : 0) {
e = 8;
break
}
if ((Na(d, g) | 0) != 0) {
e = 11;
break
}
if ((Oa(d, h) | 0) == 1) {
do {
ra[e & 127](c[h >> 2] | 0, c[j >> 2] | 0)
} while ((Oa(d, h) | 0) == 1)
}
if ((Ma(a, g) | 0) != 1) {
e = 13;
break
}
}
if ((e | 0) == 8) {
oa(128, 40, 32, 112)
} else if ((e | 0) == 11) {
oa(168, 40, 34, 112)
} else if ((e | 0) == 13) {
i = f;
return 0
}
return 0
}
function Ca(a) {
a = a | 0;
var b = 0;
b = i;
Ia(a) | 0;
Ra(a);
i = b;
return
}
function Da(b) {
b = b | 0;
return a[(c[b >> 2] | 0) + 5 >> 0] & 2 | 0
}
function Ea(a) {
a = a | 0;
a = c[a >> 2] | 0;
return (d[a + 15 >> 0] | 0) << 8 | (d[a + 14 >> 0] | 0) | (d[a + 16 >> 0] | 0) << 16 | (d[a + 17 >> 0] | 0) << 24 | 0
}
function Fa(a, b) {
a = a | 0;
b = b | 0;
var d = 0,
e = 0,
f = 0,
g = 0,
h = 0,
j = 0;
d = i;
if ((a | 0) == 0) {
j = -1;
i = d;
return j | 0
}
ab(a | 0, 0, 360) | 0;
c[a + 4 >> 2] = 16384;
c[a + 24 >> 2] = 1024;
h = Qa(16384) | 0;
c[a >> 2] = h;
f = Qa(4096) | 0;
g = a + 16 | 0;
c[g >> 2] = f;
j = Qa(8192) | 0;
e = a + 20 | 0;
c[e >> 2] = j;
do {
if ((h | 0) != 0) {
if ((f | 0) == 0 | (j | 0) == 0) {
Ra(h);
f = c[g >> 2] | 0;
break
}
c[a + 336 >> 2] = b;
j = 0;
i = d;
return j | 0
}
} while (0);
if ((f | 0) != 0) {
Ra(f)
}
e = c[e >> 2] | 0;
if ((e | 0) != 0) {
Ra(e)
}
ab(a | 0, 0, 360) | 0;
j = -1;
i = d;
return j | 0
}
function Ga(a, b) {
a = a | 0;
b = b | 0;
var d = 0,
e = 0,
f = 0,
g = 0,
h = 0;
d = i;
e = a + 24 | 0;
f = c[e >> 2] | 0;
if ((f - b | 0) > (c[a + 28 >> 2] | 0)) {
h = 0;
i = d;
return h | 0
}
if ((f | 0) > (2147483647 - b | 0)) {
if ((a | 0) == 0) {
h = -1;
i = d;
return h | 0
}
b = c[a >> 2] | 0;
if ((b | 0) != 0) {
Ra(b)
}
b = c[a + 16 >> 2] | 0;
if ((b | 0) != 0) {
Ra(b)
}
b = c[a + 20 >> 2] | 0;
if ((b | 0) != 0) {
Ra(b)
}
ab(a | 0, 0, 360) | 0;
h = -1;
i = d;
return h | 0
}
g = f + b | 0;
g = (g | 0) < 2147483615 ? g + 32 | 0 : g;
b = a + 16 | 0;
f = Ta(c[b >> 2] | 0, g << 2) | 0;
if ((f | 0) == 0) {
e = c[a >> 2] | 0;
if ((e | 0) != 0) {
Ra(e)
}
b = c[b >> 2] | 0;
if ((b | 0) != 0) {
Ra(b)
}
b = c[a + 20 >> 2] | 0;
if ((b | 0) != 0) {
Ra(b)
}
ab(a | 0, 0, 360) | 0;
h = -1;
i = d;
return h | 0
}
c[b >> 2] = f;
f = a + 20 | 0;
h = Ta(c[f >> 2] | 0, g << 3) | 0;
if ((h | 0) != 0) {
c[f >> 2] = h;
c[e >> 2] = g;
h = 0;
i = d;
return h | 0
}
e = c[a >> 2] | 0;
if ((e | 0) != 0) {
Ra(e)
}
b = c[b >> 2] | 0;
if ((b | 0) != 0) {
Ra(b)
}
b = c[f >> 2] | 0;
if ((b | 0) != 0) {
Ra(b)
}
ab(a | 0, 0, 360) | 0;
h = -1;
i = d;
return h | 0
}
function Ha(a) {
a = a | 0;
var b = 0;
b = i;
if ((a | 0) == 0) {
i = b;
return 0
}
c[a + 0 >> 2] = 0;
c[a + 4 >> 2] = 0;
c[a + 8 >> 2] = 0;
c[a + 12 >> 2] = 0;
c[a + 16 >> 2] = 0;
c[a + 20 >> 2] = 0;
c[a + 24 >> 2] = 0;
i = b;
return 0
}
function Ia(a) {
a = a | 0;
var b = 0,
d = 0;
b = i;
if ((a | 0) != 0) {
d = c[a >> 2] | 0;
if ((d | 0) != 0) {
Ra(d)
}
Ra(a)
}
i = b;
return 0
}
function Ja(a, b) {
a = a | 0;
b = b | 0;
var d = 0,
e = 0,
f = 0,
g = 0,
h = 0,
j = 0,
k = 0;
d = i;
f = a + 4 | 0;
h = c[f >> 2] | 0;
if (!((h | 0) > -1)) {
k = 0;
i = d;
return k | 0
}
g = a + 12 | 0;
j = c[g >> 2] | 0;
e = a + 8 | 0;
if ((j | 0) != 0) {
k = (c[e >> 2] | 0) - j | 0;
c[e >> 2] = k;
if ((k | 0) > 0) {
h = c[a >> 2] | 0;
$a(h | 0, h + j | 0, k | 0) | 0;
h = c[f >> 2] | 0
}
c[g >> 2] = 0
}
g = c[e >> 2] | 0;
do {
if ((h - g | 0) < (b | 0)) {
b = b + 4096 + g | 0;
g = c[a >> 2] | 0;
if ((g | 0) == 0) {
g = Qa(b) | 0
} else {
g = Ta(g, b) | 0
} if ((g | 0) != 0) {
c[a >> 2] = g;
c[f >> 2] = b;
a = g;
g = c[e >> 2] | 0;
break
}
if ((a | 0) == 0) {
k = 0;
i = d;
return k | 0
}
e = c[a >> 2] | 0;
if ((e | 0) != 0) {
Ra(e)
}
c[a + 0 >> 2] = 0;
c[a + 4 >> 2] = 0;
c[a + 8 >> 2] = 0;
c[a + 12 >> 2] = 0;
c[a + 16 >> 2] = 0;
c[a + 20 >> 2] = 0;
c[a + 24 >> 2] = 0;
k = 0;
i = d;
return k | 0
} else {
a = c[a >> 2] | 0
}
} while (0);
k = a + g | 0;
i = d;
return k | 0
}
function Ka(a, b) {
a = a | 0;
b = b | 0;
var d = 0,
e = 0,
f = 0,
g = 0;
d = i;
e = c[a + 4 >> 2] | 0;
if ((e | 0) > -1 ? (g = a + 8 | 0, f = (c[g >> 2] | 0) + b | 0, (f | 0) <= (e | 0)) : 0) {
c[g >> 2] = f;
a = 0
} else {
a = -1
}
i = d;
return a | 0
}
function La(b, e) {
b = b | 0;
e = e | 0;
var f = 0,
g = 0,
h = 0,
j = 0,
k = 0,
l = 0,
m = 0,
n = 0,
o = 0,
p = 0,
q = 0,
r = 0,
s = 0,
t = 0,
u = 0,
v = 0,
w = 0,
x = 0,
y = 0,
z = 0;
f = i;
i = i + 16 | 0;
o = f;
n = c[b >> 2] | 0;
g = b + 12 | 0;
l = c[g >> 2] | 0;
j = n + l | 0;
k = b + 8 | 0;
m = (c[k >> 2] | 0) - l | 0;
if (!((c[b + 4 >> 2] | 0) > -1)) {
z = 0;
i = f;
return z | 0
}
h = b + 20 | 0;
r = c[h >> 2] | 0;
do {
if ((r | 0) == 0) {
if ((m | 0) < 27) {
z = 0;
i = f;
return z | 0
}
if ((Xa(j, 1240, 4) | 0) != 0) {
p = b + 24 | 0;
break
}
q = n + (l + 26) | 0;
r = a[q >> 0] | 0;
p = (r & 255) + 27 | 0;
if ((m | 0) < (p | 0)) {
z = 0;
i = f;
return z | 0
}
if (!(r << 24 >> 24 == 0)) {
s = l + 27 | 0;
r = b + 24 | 0;
u = c[r >> 2] | 0;
t = 0;
do {
u = u + (d[n + (s + t) >> 0] | 0) | 0;
c[r >> 2] = u;
t = t + 1 | 0
} while ((t | 0) < (d[q >> 0] | 0 | 0))
}
c[h >> 2] = p;
r = p;
q = 11
} else {
q = 11
}
} while (0);
do {
if ((q | 0) == 11) {
p = b + 24 | 0;
if ((r + (c[p >> 2] | 0) | 0) > (m | 0)) {
z = 0;
i = f;
return z | 0
}
r = n + (l + 22) | 0;
s = d[r >> 0] | d[r + 1 >> 0] << 8 | d[r + 2 >> 0] << 16 | d[r + 3 >> 0] << 24;
c[o >> 2] = s;
a[r >> 0] = 0;
a[r + 1 >> 0] = 0;
a[r + 2 >> 0] = 0;
a[r + 3 >> 0] = 0;
x = c[h >> 2] | 0;
w = x + l | 0;
v = c[p >> 2] | 0;
a[r >> 0] = 0;
q = n + (l + 23) | 0;
a[q >> 0] = 0;
u = n + (l + 24) | 0;
a[u >> 0] = 0;
t = n + (l + 25) | 0;
a[t >> 0] = 0;
if ((x | 0) > 0) {
z = 0;
y = 0;
do {
z = c[216 + (((d[n + (y + l) >> 0] | 0) ^ z >>> 24) << 2) >> 2] ^ z << 8;
y = y + 1 | 0
} while ((y | 0) != (x | 0))
} else {
z = 0
} if ((v | 0) > 0) {
x = 0;
do {
z = c[216 + (((d[n + (w + x) >> 0] | 0) ^ z >>> 24) << 2) >> 2] ^ z << 8;
x = x + 1 | 0
} while ((x | 0) != (v | 0))
}
a[r >> 0] = z;
a[q >> 0] = z >>> 8;
a[u >> 0] = z >>> 16;
a[t >> 0] = z >>> 24;
if ((Xa(o, r, 4) | 0) != 0) {
a[r >> 0] = s;
a[r + 1 >> 0] = s >> 8;
a[r + 2 >> 0] = s >> 16;
a[r + 3 >> 0] = s >> 24;
break
}
k = c[b >> 2] | 0;
j = c[g >> 2] | 0;
if ((e | 0) == 0) {
e = c[p >> 2] | 0;
k = c[h >> 2] | 0
} else {
c[e >> 2] = k + j;
z = c[h >> 2] | 0;
c[e + 4 >> 2] = z;
c[e + 8 >> 2] = k + (z + j);
k = c[p >> 2] | 0;
c[e + 12 >> 2] = k;
e = k;
k = z
}
c[b + 16 >> 2] = 0;
z = e + k | 0;
c[g >> 2] = j + z;
c[h >> 2] = 0;
c[p >> 2] = 0;
i = f;
return z | 0
}
} while (0);
c[h >> 2] = 0;
c[p >> 2] = 0;
h = Wa(n + (l + 1) | 0, 79, m + -1 | 0) | 0;
b = c[b >> 2] | 0;
if ((h | 0) == 0) {
h = b + (c[k >> 2] | 0) | 0
}
z = h;
c[g >> 2] = z - b;
z = j - z | 0;
i = f;
return z | 0
}
function Ma(a, b) {
a = a | 0;
b = b | 0;
var d = 0,
e = 0,
f = 0;
d = i;
a: do {
if ((c[a + 4 >> 2] | 0) > -1) {
e = a + 16 | 0;
do {
f = La(a, b) | 0;
if ((f | 0) > 0) {
a = 1;
break a
}
if ((f | 0) == 0) {
a = 0;
break a
}
} while ((c[e >> 2] | 0) != 0);
c[e >> 2] = 1;
a = -1
} else {
a = 0
}
} while (0);
i = d;
return a | 0
}
function Na(b, e) {
b = b | 0;
e = e | 0;
var f = 0,
g = 0,
h = 0,
j = 0,
k = 0,
l = 0,
m = 0,
n = 0,
o = 0,
p = 0,
q = 0,
r = 0,
s = 0,
t = 0,
u = 0,
v = 0,
w = 0,
x = 0,
y = 0,
z = 0,
A = 0;
f = i;
j = c[e >> 2] | 0;
q = c[e + 8 >> 2] | 0;
p = c[e + 12 >> 2] | 0;
u = a[j + 4 >> 0] | 0;
l = d[j + 5 >> 0] | 0;
r = l & 1;
o = l & 2;
l = l & 4;
h = bb(d[j + 13 >> 0] | 0 | 0, 0, 8) | 0;
h = bb(h | (d[j + 12 >> 0] | 0) | 0, D | 0, 8) | 0;
h = bb(h | (d[j + 11 >> 0] | 0) | 0, D | 0, 8) | 0;
h = bb(h | (d[j + 10 >> 0] | 0) | 0, D | 0, 8) | 0;
h = bb(h | (d[j + 9 >> 0] | 0) | 0, D | 0, 8) | 0;
h = bb(h | (d[j + 8 >> 0] | 0) | 0, D | 0, 8) | 0;
h = bb(h | (d[j + 7 >> 0] | 0) | 0, D | 0, 8) | 0;
e = D;
h = h | (d[j + 6 >> 0] | 0);
t = (d[j + 15 >> 0] | 0) << 8 | (d[j + 14 >> 0] | 0) | (d[j + 16 >> 0] | 0) << 16 | (d[j + 17 >> 0] | 0) << 24;
k = (d[j + 19 >> 0] | 0) << 8 | (d[j + 18 >> 0] | 0) | (d[j + 20 >> 0] | 0) << 16 | (d[j + 21 >> 0] | 0) << 24;
m = d[j + 26 >> 0] | 0;
if ((b | 0) == 0) {
A = -1;
i = f;
return A | 0
}
w = c[b >> 2] | 0;
if ((w | 0) == 0) {
A = -1;
i = f;
return A | 0
}
s = b + 36 | 0;
n = c[s >> 2] | 0;
v = b + 12 | 0;
y = c[v >> 2] | 0;
if ((y | 0) != 0) {
z = b + 8 | 0;
A = c[z >> 2] | 0;
x = A - y | 0;
c[z >> 2] = x;
if ((A | 0) != (y | 0)) {
$a(w | 0, w + y | 0, x | 0) | 0
}
c[v >> 2] = 0
}
if ((n | 0) != 0) {
v = b + 28 | 0;
w = c[v >> 2] | 0;
if ((w | 0) == (n | 0)) {
w = n
} else {
A = c[b + 16 >> 2] | 0;
$a(A | 0, A + (n << 2) | 0, w - n << 2 | 0) | 0;
w = c[b + 20 >> 2] | 0;
$a(w | 0, w + (n << 3) | 0, (c[v >> 2] | 0) - n << 3 | 0) | 0;
w = c[v >> 2] | 0
}
c[v >> 2] = w - n;
A = b + 32 | 0;
c[A >> 2] = (c[A >> 2] | 0) - n;
c[s >> 2] = 0
}
if (u << 24 >> 24 != 0 ? 1 : (t | 0) != (c[b + 336 >> 2] | 0)) {
A = -1;
i = f;
return A | 0
}
if ((Ga(b, m + 1 | 0) | 0) != 0) {
A = -1;
i = f;
return A | 0
}
n = b + 340 | 0;
v = c[n >> 2] | 0;
if ((k | 0) != (v | 0)) {
y = b + 32 | 0;
A = c[y >> 2] | 0;
z = b + 28 | 0;
w = c[z >> 2] | 0;
if ((A | 0) < (w | 0)) {
x = c[b + 16 >> 2] | 0;
s = b + 8 | 0;
u = c[s >> 2] | 0;
t = A;
do {
u = u - (c[x + (t << 2) >> 2] & 255) | 0;
t = t + 1 | 0
} while ((t | 0) < (w | 0));
c[s >> 2] = u
}
c[z >> 2] = A;
if (!((v | 0) == -1)) {
x = A + 1 | 0;
c[z >> 2] = x;
c[(c[b + 16 >> 2] | 0) + (A << 2) >> 2] = 1024;
c[y >> 2] = x
}
}
a: do {
if ((r | 0) == 0) {
r = 0
} else {
A = c[b + 28 >> 2] | 0;
if ((A | 0) >= 1 ? (c[(c[b + 16 >> 2] | 0) + (A + -1 << 2) >> 2] | 0) != 1024 : 0) {
r = 0;
break
} else {
r = 0
}
while (1) {
if ((r | 0) >= (m | 0)) {
o = 0;
break a
}
A = a[j + (r + 27) >> 0] | 0;
z = A & 255;
q = q + z | 0;
p = p - z | 0;
r = r + 1 | 0;
if (!(A << 24 >> 24 == -1)) {
o = 0;
break
}
}
}
} while (0);
if ((p | 0) != 0) {
t = b + 4 | 0;
v = c[t >> 2] | 0;
s = b + 8 | 0;
u = c[s >> 2] | 0;
do {
if ((v - p | 0) > (u | 0)) {
t = c[b >> 2] | 0
} else {
if ((v | 0) > (2147483647 - p | 0)) {
g = c[b >> 2] | 0;
if ((g | 0) != 0) {
Ra(g)
}
g = c[b + 16 >> 2] | 0;
if ((g | 0) != 0) {
Ra(g)
}
g = c[b + 20 >> 2] | 0;
if ((g | 0) != 0) {
Ra(g)
}
ab(b | 0, 0, 360) | 0;
A = -1;
i = f;
return A | 0
}
u = v + p | 0;
u = (u | 0) < 2147482623 ? u + 1024 | 0 : u;
v = Ta(c[b >> 2] | 0, u) | 0;
if ((v | 0) != 0) {
c[t >> 2] = u;
c[b >> 2] = v;
t = v;
u = c[s >> 2] | 0;
break
}
g = c[b >> 2] | 0;
if ((g | 0) != 0) {
Ra(g)
}
g = c[b + 16 >> 2] | 0;
if ((g | 0) != 0) {
Ra(g)
}
g = c[b + 20 >> 2] | 0;
if ((g | 0) != 0) {
Ra(g)
}
ab(b | 0, 0, 360) | 0;
A = -1;
i = f;
return A | 0
}
} while (0);
_a(t + u | 0, q | 0, p | 0) | 0;
c[s >> 2] = (c[s >> 2] | 0) + p
}
if ((r | 0) < (m | 0)) {
q = b + 28 | 0;
p = b + 32 | 0;
s = c[b + 16 >> 2] | 0;
t = c[b + 20 >> 2] | 0;
w = c[q >> 2] | 0;
u = -1;
b: while (1) {
v = w;
while (1) {
w = a[j + (r + 27) >> 0] | 0;
x = w & 255;
y = s + (v << 2) | 0;
c[y >> 2] = x;
A = t + (v << 3) | 0;
c[A >> 2] = -1;
c[A + 4 >> 2] = -1;
if ((o | 0) != 0) {
c[y >> 2] = x | 256
}
o = v + 1 | 0;
c[q >> 2] = o;
r = r + 1 | 0;
if (!(w << 24 >> 24 == -1)) {
break
}
if ((r | 0) >= (m | 0)) {
break b
} else {
v = o;
o = 0
}
}
c[p >> 2] = o;
if ((r | 0) < (m | 0)) {
w = o;
o = 0;
u = v
} else {
u = v;
break
}
}
if (!((u | 0) == -1)) {
A = (c[b + 20 >> 2] | 0) + (u << 3) | 0;
c[A >> 2] = h;
c[A + 4 >> 2] = e
}
}
if ((l | 0) != 0 ? (c[b + 328 >> 2] = 1, g = c[b + 28 >> 2] | 0, (g | 0) > 0) : 0) {
A = (c[b + 16 >> 2] | 0) + (g + -1 << 2) | 0;
c[A >> 2] = c[A >> 2] | 512
}
c[n >> 2] = k + 1;
A = 0;
i = f;
return A | 0
}
function Oa(a, b) {
a = a | 0;
b = b | 0;
var d = 0;
d = i;
if ((a | 0) != 0 ? (c[a >> 2] | 0) != 0 : 0) {
a = Pa(a, b, 1) | 0
} else {
a = 0
}
i = d;
return a | 0
}
function Pa(a, b, d) {
a = a | 0;
b = b | 0;
d = d | 0;
var e = 0,
f = 0,
g = 0,
h = 0,
j = 0,
k = 0,
l = 0,
m = 0,
n = 0,
o = 0;
f = i;
e = a + 36 | 0;
k = c[e >> 2] | 0;
if ((c[a + 32 >> 2] | 0) <= (k | 0)) {
m = 0;
i = f;
return m | 0
}
j = c[a + 16 >> 2] | 0;
h = c[j + (k << 2) >> 2] | 0;
if ((h & 1024 | 0) != 0) {
c[e >> 2] = k + 1;
m = a + 344 | 0;
l = m;
l = Za(c[l >> 2] | 0, c[l + 4 >> 2] | 0, 1, 0) | 0;
c[m >> 2] = l;
c[m + 4 >> 2] = D;
m = -1;
i = f;
return m | 0
}
g = (b | 0) != 0;
d = (d | 0) == 0;
if (d & (g ^ 1)) {
m = 1;
i = f;
return m | 0
}
l = h & 255;
m = h & 512;
h = h & 256;
if ((l | 0) == 255) {
l = 255;
do {
k = k + 1 | 0;
o = c[j + (k << 2) >> 2] | 0;
n = o & 255;
m = (o & 512 | 0) == 0 ? m : 512;
l = n + l | 0
} while ((n | 0) == 255)
}
if (g) {
c[b + 12 >> 2] = m;
c[b + 8 >> 2] = h;
c[b >> 2] = (c[a >> 2] | 0) + (c[a + 12 >> 2] | 0);
o = a + 344 | 0;
n = c[o + 4 >> 2] | 0;
m = b + 24 | 0;
c[m >> 2] = c[o >> 2];
c[m + 4 >> 2] = n;
m = (c[a + 20 >> 2] | 0) + (k << 3) | 0;
n = c[m + 4 >> 2] | 0;
o = b + 16 | 0;
c[o >> 2] = c[m >> 2];
c[o + 4 >> 2] = n;
c[b + 4 >> 2] = l
}
if (d) {
o = 1;
i = f;
return o | 0
}
o = a + 12 | 0;
c[o >> 2] = (c[o >> 2] | 0) + l;
c[e >> 2] = k + 1;
o = a + 344 | 0;
n = o;
n = Za(c[n >> 2] | 0, c[n + 4 >> 2] | 0, 1, 0) | 0;
c[o >> 2] = n;
c[o + 4 >> 2] = D;
o = 1;
i = f;
return o | 0
}
function Qa(a) {
a = a | 0;
var b = 0,
d = 0,
e = 0,
f = 0,
g = 0,
h = 0,
j = 0,
k = 0,
l = 0,
m = 0,
n = 0,
o = 0,
p = 0,
q = 0,
r = 0,
s = 0,
t = 0,
u = 0,
v = 0,
w = 0,
x = 0,
y = 0,
z = 0,
A = 0,
B = 0,
C = 0,
D = 0,
E = 0,
F = 0,
G = 0,
H = 0;
b = i;
do {
if (a >>> 0 < 245) {
if (a >>> 0 < 11) {
a = 16
} else {
a = a + 11 & -8
}
v = a >>> 3;
p = c[312] | 0;
w = p >>> v;
if ((w & 3 | 0) != 0) {
h = (w & 1 ^ 1) + v | 0;
g = h << 1;
e = 1288 + (g << 2) | 0;
g = 1288 + (g + 2 << 2) | 0;
j = c[g >> 2] | 0;
d = j + 8 | 0;
f = c[d >> 2] | 0;
do {
if ((e | 0) != (f | 0)) {
if (f >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
k = f + 12 | 0;
if ((c[k >> 2] | 0) == (j | 0)) {
c[k >> 2] = e;
c[g >> 2] = f;
break
} else {
ja()
}
} else {
c[312] = p & ~(1 << h)
}
} while (0);
H = h << 3;
c[j + 4 >> 2] = H | 3;
H = j + (H | 4) | 0;
c[H >> 2] = c[H >> 2] | 1;
H = d;
i = b;
return H | 0
}
if (a >>> 0 > (c[1256 >> 2] | 0) >>> 0) {
if ((w | 0) != 0) {
h = 2 << v;
h = w << v & (h | 0 - h);
h = (h & 0 - h) + -1 | 0;
d = h >>> 12 & 16;
h = h >>> d;
f = h >>> 5 & 8;
h = h >>> f;
g = h >>> 2 & 4;
h = h >>> g;
e = h >>> 1 & 2;
h = h >>> e;
j = h >>> 1 & 1;
j = (f | d | g | e | j) + (h >>> j) | 0;
h = j << 1;
e = 1288 + (h << 2) | 0;
h = 1288 + (h + 2 << 2) | 0;
g = c[h >> 2] | 0;
d = g + 8 | 0;
f = c[d >> 2] | 0;
do {
if ((e | 0) != (f | 0)) {
if (f >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
k = f + 12 | 0;
if ((c[k >> 2] | 0) == (g | 0)) {
c[k >> 2] = e;
c[h >> 2] = f;
break
} else {
ja()
}
} else {
c[312] = p & ~(1 << j)
}
} while (0);
h = j << 3;
f = h - a | 0;
c[g + 4 >> 2] = a | 3;
e = g + a | 0;
c[g + (a | 4) >> 2] = f | 1;
c[g + h >> 2] = f;
h = c[1256 >> 2] | 0;
if ((h | 0) != 0) {
g = c[1268 >> 2] | 0;
k = h >>> 3;
j = k << 1;
h = 1288 + (j << 2) | 0;
l = c[312] | 0;
k = 1 << k;
if ((l & k | 0) != 0) {
j = 1288 + (j + 2 << 2) | 0;
k = c[j >> 2] | 0;
if (k >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
D = j;
C = k
}
} else {
c[312] = l | k;
D = 1288 + (j + 2 << 2) | 0;
C = h
}
c[D >> 2] = g;
c[C + 12 >> 2] = g;
c[g + 8 >> 2] = C;
c[g + 12 >> 2] = h
}
c[1256 >> 2] = f;
c[1268 >> 2] = e;
H = d;
i = b;
return H | 0
}
p = c[1252 >> 2] | 0;
if ((p | 0) != 0) {
e = (p & 0 - p) + -1 | 0;
G = e >>> 12 & 16;
e = e >>> G;
F = e >>> 5 & 8;
e = e >>> F;
H = e >>> 2 & 4;
e = e >>> H;
f = e >>> 1 & 2;
e = e >>> f;
d = e >>> 1 & 1;
d = c[1552 + ((F | G | H | f | d) + (e >>> d) << 2) >> 2] | 0;
e = (c[d + 4 >> 2] & -8) - a | 0;
f = d;
while (1) {
g = c[f + 16 >> 2] | 0;
if ((g | 0) == 0) {
g = c[f + 20 >> 2] | 0;
if ((g | 0) == 0) {
break
}
}
f = (c[g + 4 >> 2] & -8) - a | 0;
H = f >>> 0 < e >>> 0;
e = H ? f : e;
f = g;
d = H ? g : d
}
h = c[1264 >> 2] | 0;
if (d >>> 0 < h >>> 0) {
ja()
}
f = d + a | 0;
if (!(d >>> 0 < f >>> 0)) {
ja()
}
g = c[d + 24 >> 2] | 0;
k = c[d + 12 >> 2] | 0;
do {
if ((k | 0) == (d | 0)) {
k = d + 20 | 0;
j = c[k >> 2] | 0;
if ((j | 0) == 0) {
k = d + 16 | 0;
j = c[k >> 2] | 0;
if ((j | 0) == 0) {
B = 0;
break
}
}
while (1) {
l = j + 20 | 0;
m = c[l >> 2] | 0;
if ((m | 0) != 0) {
j = m;
k = l;
continue
}
m = j + 16 | 0;
l = c[m >> 2] | 0;
if ((l | 0) == 0) {
break
} else {
j = l;
k = m
}
}
if (k >>> 0 < h >>> 0) {
ja()
} else {
c[k >> 2] = 0;
B = j;
break
}
} else {
j = c[d + 8 >> 2] | 0;
if (j >>> 0 < h >>> 0) {
ja()
}
h = j + 12 | 0;
if ((c[h >> 2] | 0) != (d | 0)) {
ja()
}
l = k + 8 | 0;
if ((c[l >> 2] | 0) == (d | 0)) {
c[h >> 2] = k;
c[l >> 2] = j;
B = k;
break
} else {
ja()
}
}
} while (0);
do {
if ((g | 0) != 0) {
h = c[d + 28 >> 2] | 0;
j = 1552 + (h << 2) | 0;
if ((d | 0) == (c[j >> 2] | 0)) {
c[j >> 2] = B;
if ((B | 0) == 0) {
c[1252 >> 2] = c[1252 >> 2] & ~(1 << h);
break
}
} else {
if (g >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
h = g + 16 | 0;
if ((c[h >> 2] | 0) == (d | 0)) {
c[h >> 2] = B
} else {
c[g + 20 >> 2] = B
} if ((B | 0) == 0) {
break
}
} if (B >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
c[B + 24 >> 2] = g;
g = c[d + 16 >> 2] | 0;
do {
if ((g | 0) != 0) {
if (g >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[B + 16 >> 2] = g;
c[g + 24 >> 2] = B;
break
}
}
} while (0);
g = c[d + 20 >> 2] | 0;
if ((g | 0) != 0) {
if (g >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[B + 20 >> 2] = g;
c[g + 24 >> 2] = B;
break
}
}
}
} while (0);
if (e >>> 0 < 16) {
H = e + a | 0;
c[d + 4 >> 2] = H | 3;
H = d + (H + 4) | 0;
c[H >> 2] = c[H >> 2] | 1
} else {
c[d + 4 >> 2] = a | 3;
c[d + (a | 4) >> 2] = e | 1;
c[d + (e + a) >> 2] = e;
h = c[1256 >> 2] | 0;
if ((h | 0) != 0) {
g = c[1268 >> 2] | 0;
l = h >>> 3;
j = l << 1;
h = 1288 + (j << 2) | 0;
k = c[312] | 0;
l = 1 << l;
if ((k & l | 0) != 0) {
j = 1288 + (j + 2 << 2) | 0;
k = c[j >> 2] | 0;
if (k >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
A = j;
z = k
}
} else {
c[312] = k | l;
A = 1288 + (j + 2 << 2) | 0;
z = h
}
c[A >> 2] = g;
c[z + 12 >> 2] = g;
c[g + 8 >> 2] = z;
c[g + 12 >> 2] = h
}
c[1256 >> 2] = e;
c[1268 >> 2] = f
}
H = d + 8 | 0;
i = b;
return H | 0
}
}
} else {
if (!(a >>> 0 > 4294967231)) {
z = a + 11 | 0;
a = z & -8;
B = c[1252 >> 2] | 0;
if ((B | 0) != 0) {
A = 0 - a | 0;
z = z >>> 8;
if ((z | 0) != 0) {
if (a >>> 0 > 16777215) {
C = 31
} else {
G = (z + 1048320 | 0) >>> 16 & 8;
H = z << G;
F = (H + 520192 | 0) >>> 16 & 4;
H = H << F;
C = (H + 245760 | 0) >>> 16 & 2;
C = 14 - (F | G | C) + (H << C >>> 15) | 0;
C = a >>> (C + 7 | 0) & 1 | C << 1
}
} else {
C = 0
}
D = c[1552 + (C << 2) >> 2] | 0;
a: do {
if ((D | 0) == 0) {
F = 0;
z = 0
} else {
if ((C | 0) == 31) {
z = 0
} else {
z = 25 - (C >>> 1) | 0
}
F = 0;
E = a << z;
z = 0;
while (1) {
H = c[D + 4 >> 2] & -8;
G = H - a | 0;
if (G >>> 0 < A >>> 0) {
if ((H | 0) == (a | 0)) {
A = G;
F = D;
z = D;
break a
} else {
A = G;
z = D
}
}
H = c[D + 20 >> 2] | 0;
D = c[D + (E >>> 31 << 2) + 16 >> 2] | 0;
F = (H | 0) == 0 | (H | 0) == (D | 0) ? F : H;
if ((D | 0) == 0) {
break
} else {
E = E << 1
}
}
}
} while (0);
if ((F | 0) == 0 & (z | 0) == 0) {
H = 2 << C;
B = B & (H | 0 - H);
if ((B | 0) == 0) {
break
}
H = (B & 0 - B) + -1 | 0;
D = H >>> 12 & 16;
H = H >>> D;
C = H >>> 5 & 8;
H = H >>> C;
E = H >>> 2 & 4;
H = H >>> E;
G = H >>> 1 & 2;
H = H >>> G;
F = H >>> 1 & 1;
F = c[1552 + ((C | D | E | G | F) + (H >>> F) << 2) >> 2] | 0
}
if ((F | 0) != 0) {
while (1) {
H = (c[F + 4 >> 2] & -8) - a | 0;
B = H >>> 0 < A >>> 0;
A = B ? H : A;
z = B ? F : z;
B = c[F + 16 >> 2] | 0;
if ((B | 0) != 0) {
F = B;
continue
}
F = c[F + 20 >> 2] | 0;
if ((F | 0) == 0) {
break
}
}
}
if ((z | 0) != 0 ? A >>> 0 < ((c[1256 >> 2] | 0) - a | 0) >>> 0 : 0) {
f = c[1264 >> 2] | 0;
if (z >>> 0 < f >>> 0) {
ja()
}
d = z + a | 0;
if (!(z >>> 0 < d >>> 0)) {
ja()
}
e = c[z + 24 >> 2] | 0;
h = c[z + 12 >> 2] | 0;
do {
if ((h | 0) == (z | 0)) {
h = z + 20 | 0;
g = c[h >> 2] | 0;
if ((g | 0) == 0) {
h = z + 16 | 0;
g = c[h >> 2] | 0;
if ((g | 0) == 0) {
x = 0;
break
}
}
while (1) {
j = g + 20 | 0;
k = c[j >> 2] | 0;
if ((k | 0) != 0) {
g = k;
h = j;
continue
}
j = g + 16 | 0;
k = c[j >> 2] | 0;
if ((k | 0) == 0) {
break
} else {
g = k;
h = j
}
}
if (h >>> 0 < f >>> 0) {
ja()
} else {
c[h >> 2] = 0;
x = g;
break
}
} else {
g = c[z + 8 >> 2] | 0;
if (g >>> 0 < f >>> 0) {
ja()
}
f = g + 12 | 0;
if ((c[f >> 2] | 0) != (z | 0)) {
ja()
}
j = h + 8 | 0;
if ((c[j >> 2] | 0) == (z | 0)) {
c[f >> 2] = h;
c[j >> 2] = g;
x = h;
break
} else {
ja()
}
}
} while (0);
do {
if ((e | 0) != 0) {
g = c[z + 28 >> 2] | 0;
f = 1552 + (g << 2) | 0;
if ((z | 0) == (c[f >> 2] | 0)) {
c[f >> 2] = x;
if ((x | 0) == 0) {
c[1252 >> 2] = c[1252 >> 2] & ~(1 << g);
break
}
} else {
if (e >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
f = e + 16 | 0;
if ((c[f >> 2] | 0) == (z | 0)) {
c[f >> 2] = x
} else {
c[e + 20 >> 2] = x
} if ((x | 0) == 0) {
break
}
} if (x >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
c[x + 24 >> 2] = e;
e = c[z + 16 >> 2] | 0;
do {
if ((e | 0) != 0) {
if (e >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[x + 16 >> 2] = e;
c[e + 24 >> 2] = x;
break
}
}
} while (0);
e = c[z + 20 >> 2] | 0;
if ((e | 0) != 0) {
if (e >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[x + 20 >> 2] = e;
c[e + 24 >> 2] = x;
break
}
}
}
} while (0);
b: do {
if (!(A >>> 0 < 16)) {
c[z + 4 >> 2] = a | 3;
c[z + (a | 4) >> 2] = A | 1;
c[z + (A + a) >> 2] = A;
f = A >>> 3;
if (A >>> 0 < 256) {
h = f << 1;
e = 1288 + (h << 2) | 0;
g = c[312] | 0;
f = 1 << f;
do {
if ((g & f | 0) == 0) {
c[312] = g | f;
w = 1288 + (h + 2 << 2) | 0;
v = e
} else {
f = 1288 + (h + 2 << 2) | 0;
g = c[f >> 2] | 0;
if (!(g >>> 0 < (c[1264 >> 2] | 0) >>> 0)) {
w = f;
v = g;
break
}
ja()
}
} while (0);
c[w >> 2] = d;
c[v + 12 >> 2] = d;
c[z + (a + 8) >> 2] = v;
c[z + (a + 12) >> 2] = e;
break
}
e = A >>> 8;
if ((e | 0) != 0) {
if (A >>> 0 > 16777215) {
e = 31
} else {
G = (e + 1048320 | 0) >>> 16 & 8;
H = e << G;
F = (H + 520192 | 0) >>> 16 & 4;
H = H << F;
e = (H + 245760 | 0) >>> 16 & 2;
e = 14 - (F | G | e) + (H << e >>> 15) | 0;
e = A >>> (e + 7 | 0) & 1 | e << 1
}
} else {
e = 0
}
f = 1552 + (e << 2) | 0;
c[z + (a + 28) >> 2] = e;
c[z + (a + 20) >> 2] = 0;
c[z + (a + 16) >> 2] = 0;
h = c[1252 >> 2] | 0;
g = 1 << e;
if ((h & g | 0) == 0) {
c[1252 >> 2] = h | g;
c[f >> 2] = d;
c[z + (a + 24) >> 2] = f;
c[z + (a + 12) >> 2] = d;
c[z + (a + 8) >> 2] = d;
break
}
f = c[f >> 2] | 0;
if ((e | 0) == 31) {
e = 0
} else {
e = 25 - (e >>> 1) | 0
}
c: do {
if ((c[f + 4 >> 2] & -8 | 0) != (A | 0)) {
e = A << e;
while (1) {
g = f + (e >>> 31 << 2) + 16 | 0;
h = c[g >> 2] | 0;
if ((h | 0) == 0) {
break
}
if ((c[h + 4 >> 2] & -8 | 0) == (A | 0)) {
p = h;
break c
} else {
e = e << 1;
f = h
}
}
if (g >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[g >> 2] = d;
c[z + (a + 24) >> 2] = f;
c[z + (a + 12) >> 2] = d;
c[z + (a + 8) >> 2] = d;
break b
}
} else {
p = f
}
} while (0);
f = p + 8 | 0;
e = c[f >> 2] | 0;
g = c[1264 >> 2] | 0;
if (p >>> 0 < g >>> 0) {
ja()
}
if (e >>> 0 < g >>> 0) {
ja()
} else {
c[e + 12 >> 2] = d;
c[f >> 2] = d;
c[z + (a + 8) >> 2] = e;
c[z + (a + 12) >> 2] = p;
c[z + (a + 24) >> 2] = 0;
break
}
} else {
H = A + a | 0;
c[z + 4 >> 2] = H | 3;
H = z + (H + 4) | 0;
c[H >> 2] = c[H >> 2] | 1
}
} while (0);
H = z + 8 | 0;
i = b;
return H | 0
}
}
} else {
a = -1
}
}
} while (0);
p = c[1256 >> 2] | 0;
if (!(a >>> 0 > p >>> 0)) {
e = p - a | 0;
d = c[1268 >> 2] | 0;
if (e >>> 0 > 15) {
c[1268 >> 2] = d + a;
c[1256 >> 2] = e;
c[d + (a + 4) >> 2] = e | 1;
c[d + p >> 2] = e;
c[d + 4 >> 2] = a | 3
} else {
c[1256 >> 2] = 0;
c[1268 >> 2] = 0;
c[d + 4 >> 2] = p | 3;
H = d + (p + 4) | 0;
c[H >> 2] = c[H >> 2] | 1
}
H = d + 8 | 0;
i = b;
return H | 0
}
p = c[1260 >> 2] | 0;
if (a >>> 0 < p >>> 0) {
G = p - a | 0;
c[1260 >> 2] = G;
H = c[1272 >> 2] | 0;
c[1272 >> 2] = H + a;
c[H + (a + 4) >> 2] = G | 1;
c[H + 4 >> 2] = a | 3;
H = H + 8 | 0;
i = b;
return H | 0
}
do {
if ((c[430] | 0) == 0) {
p = ia(30) | 0;
if ((p + -1 & p | 0) == 0) {
c[1728 >> 2] = p;
c[1724 >> 2] = p;
c[1732 >> 2] = -1;
c[1736 >> 2] = -1;
c[1740 >> 2] = 0;
c[1692 >> 2] = 0;
c[430] = (ma(0) | 0) & -16 ^ 1431655768;
break
} else {
ja()
}
}
} while (0);
w = a + 48 | 0;
p = c[1728 >> 2] | 0;
x = a + 47 | 0;
z = p + x | 0;
p = 0 - p | 0;
v = z & p;
if (!(v >>> 0 > a >>> 0)) {
H = 0;
i = b;
return H | 0
}
A = c[1688 >> 2] | 0;
if ((A | 0) != 0 ? (G = c[1680 >> 2] | 0, H = G + v | 0, H >>> 0 <= G >>> 0 | H >>> 0 > A >>> 0) : 0) {
H = 0;
i = b;
return H | 0
}
d: do {
if ((c[1692 >> 2] & 4 | 0) == 0) {
B = c[1272 >> 2] | 0;
e: do {
if ((B | 0) != 0) {
A = 1696 | 0;
while (1) {
C = c[A >> 2] | 0;
if (!(C >>> 0 > B >>> 0) ? (y = A + 4 | 0, (C + (c[y >> 2] | 0) | 0) >>> 0 > B >>> 0) : 0) {
break
}
A = c[A + 8 >> 2] | 0;
if ((A | 0) == 0) {
o = 182;
break e
}
}
if ((A | 0) != 0) {
B = z - (c[1260 >> 2] | 0) & p;
if (B >>> 0 < 2147483647) {
p = la(B | 0) | 0;
A = (p | 0) == ((c[A >> 2] | 0) + (c[y >> 2] | 0) | 0);
y = p;
z = B;
p = A ? p : -1;
A = A ? B : 0;
o = 191
} else {
A = 0
}
} else {
o = 182
}
} else {
o = 182
}
} while (0);
do {
if ((o | 0) == 182) {
p = la(0) | 0;
if ((p | 0) != (-1 | 0)) {
z = p;
A = c[1724 >> 2] | 0;
y = A + -1 | 0;
if ((y & z | 0) == 0) {
A = v
} else {
A = v - z + (y + z & 0 - A) | 0
}
y = c[1680 >> 2] | 0;
z = y + A | 0;
if (A >>> 0 > a >>> 0 & A >>> 0 < 2147483647) {
H = c[1688 >> 2] | 0;
if ((H | 0) != 0 ? z >>> 0 <= y >>> 0 | z >>> 0 > H >>> 0 : 0) {
A = 0;
break
}
y = la(A | 0) | 0;
o = (y | 0) == (p | 0);
z = A;
p = o ? p : -1;
A = o ? A : 0;
o = 191
} else {
A = 0
}
} else {
A = 0
}
}
} while (0);
f: do {
if ((o | 0) == 191) {
o = 0 - z | 0;
if ((p | 0) != (-1 | 0)) {
q = A;
o = 202;
break d
}
do {
if ((y | 0) != (-1 | 0) & z >>> 0 < 2147483647 & z >>> 0 < w >>> 0 ? (u = c[1728 >> 2] | 0, u = x - z + u & 0 - u, u >>> 0 < 2147483647) : 0) {
if ((la(u | 0) | 0) == (-1 | 0)) {
la(o | 0) | 0;
break f
} else {
z = u + z | 0;
break
}
}
} while (0);
if ((y | 0) != (-1 | 0)) {
p = y;
q = z;
o = 202;
break d
}
}
} while (0);
c[1692 >> 2] = c[1692 >> 2] | 4;
o = 199
} else {
A = 0;
o = 199
}
} while (0);
if ((((o | 0) == 199 ? v >>> 0 < 2147483647 : 0) ? (t = la(v | 0) | 0, s = la(0) | 0, (s | 0) != (-1 | 0) & (t | 0) != (-1 | 0) & t >>> 0 < s >>> 0) : 0) ? (r = s - t | 0, q = r >>> 0 > (a + 40 | 0) >>> 0, q) : 0) {
p = t;
q = q ? r : A;
o = 202
}
if ((o | 0) == 202) {
r = (c[1680 >> 2] | 0) + q | 0;
c[1680 >> 2] = r;
if (r >>> 0 > (c[1684 >> 2] | 0) >>> 0) {
c[1684 >> 2] = r
}
r = c[1272 >> 2] | 0;
g: do {
if ((r | 0) != 0) {
v = 1696 | 0;
while (1) {
t = c[v >> 2] | 0;
u = v + 4 | 0;
s = c[u >> 2] | 0;
if ((p | 0) == (t + s | 0)) {
o = 214;
break
}
w = c[v + 8 >> 2] | 0;
if ((w | 0) == 0) {
break
} else {
v = w
}
}
if (((o | 0) == 214 ? (c[v + 12 >> 2] & 8 | 0) == 0 : 0) ? r >>> 0 >= t >>> 0 & r >>> 0 < p >>> 0 : 0) {
c[u >> 2] = s + q;
d = (c[1260 >> 2] | 0) + q | 0;
e = r + 8 | 0;
if ((e & 7 | 0) == 0) {
e = 0
} else {
e = 0 - e & 7
}
H = d - e | 0;
c[1272 >> 2] = r + e;
c[1260 >> 2] = H;
c[r + (e + 4) >> 2] = H | 1;
c[r + (d + 4) >> 2] = 40;
c[1276 >> 2] = c[1736 >> 2];
break
}
if (p >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
c[1264 >> 2] = p
}
t = p + q | 0;
s = 1696 | 0;
while (1) {
if ((c[s >> 2] | 0) == (t | 0)) {
o = 224;
break
}
u = c[s + 8 >> 2] | 0;
if ((u | 0) == 0) {
break
} else {
s = u
}
}
if ((o | 0) == 224 ? (c[s + 12 >> 2] & 8 | 0) == 0 : 0) {
c[s >> 2] = p;
h = s + 4 | 0;
c[h >> 2] = (c[h >> 2] | 0) + q;
h = p + 8 | 0;
if ((h & 7 | 0) == 0) {
h = 0
} else {
h = 0 - h & 7
}
j = p + (q + 8) | 0;
if ((j & 7 | 0) == 0) {
n = 0
} else {
n = 0 - j & 7
}
o = p + (n + q) | 0;
j = h + a | 0;
k = p + j | 0;
m = o - (p + h) - a | 0;
c[p + (h + 4) >> 2] = a | 3;
h: do {
if ((o | 0) != (c[1272 >> 2] | 0)) {
if ((o | 0) == (c[1268 >> 2] | 0)) {
H = (c[1256 >> 2] | 0) + m | 0;
c[1256 >> 2] = H;
c[1268 >> 2] = k;
c[p + (j + 4) >> 2] = H | 1;
c[p + (H + j) >> 2] = H;
break
}
r = q + 4 | 0;
t = c[p + (r + n) >> 2] | 0;
if ((t & 3 | 0) == 1) {
a = t & -8;
s = t >>> 3;
i: do {
if (!(t >>> 0 < 256)) {
l = c[p + ((n | 24) + q) >> 2] | 0;
u = c[p + (q + 12 + n) >> 2] | 0;
do {
if ((u | 0) == (o | 0)) {
u = n | 16;
t = p + (r + u) | 0;
s = c[t >> 2] | 0;
if ((s | 0) == 0) {
t = p + (u + q) | 0;
s = c[t >> 2] | 0;
if ((s | 0) == 0) {
g = 0;
break
}
}
while (1) {
u = s + 20 | 0;
v = c[u >> 2] | 0;
if ((v | 0) != 0) {
s = v;
t = u;
continue
}
u = s + 16 | 0;
v = c[u >> 2] | 0;
if ((v | 0) == 0) {
break
} else {
s = v;
t = u
}
}
if (t >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[t >> 2] = 0;
g = s;
break
}
} else {
t = c[p + ((n | 8) + q) >> 2] | 0;
if (t >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
v = t + 12 | 0;
if ((c[v >> 2] | 0) != (o | 0)) {
ja()
}
s = u + 8 | 0;
if ((c[s >> 2] | 0) == (o | 0)) {
c[v >> 2] = u;
c[s >> 2] = t;
g = u;
break
} else {
ja()
}
}
} while (0);
if ((l | 0) == 0) {
break
}
t = c[p + (q + 28 + n) >> 2] | 0;
s = 1552 + (t << 2) | 0;
do {
if ((o | 0) != (c[s >> 2] | 0)) {
if (l >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
s = l + 16 | 0;
if ((c[s >> 2] | 0) == (o | 0)) {
c[s >> 2] = g
} else {
c[l + 20 >> 2] = g
} if ((g | 0) == 0) {
break i
}
} else {
c[s >> 2] = g;
if ((g | 0) != 0) {
break
}
c[1252 >> 2] = c[1252 >> 2] & ~(1 << t);
break i
}
} while (0);
if (g >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
c[g + 24 >> 2] = l;
l = n | 16;
o = c[p + (l + q) >> 2] | 0;
do {
if ((o | 0) != 0) {
if (o >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[g + 16 >> 2] = o;
c[o + 24 >> 2] = g;
break
}
}
} while (0);
l = c[p + (r + l) >> 2] | 0;
if ((l | 0) == 0) {
break
}
if (l >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[g + 20 >> 2] = l;
c[l + 24 >> 2] = g;
break
}
} else {
r = c[p + ((n | 8) + q) >> 2] | 0;
g = c[p + (q + 12 + n) >> 2] | 0;
t = 1288 + (s << 1 << 2) | 0;
do {
if ((r | 0) != (t | 0)) {
if (r >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
if ((c[r + 12 >> 2] | 0) == (o | 0)) {
break
}
ja()
}
} while (0);
if ((g | 0) == (r | 0)) {
c[312] = c[312] & ~(1 << s);
break
}
do {
if ((g | 0) == (t | 0)) {
l = g + 8 | 0
} else {
if (g >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
s = g + 8 | 0;
if ((c[s >> 2] | 0) == (o | 0)) {
l = s;
break
}
ja()
}
} while (0);
c[r + 12 >> 2] = g;
c[l >> 2] = r
}
} while (0);
o = p + ((a | n) + q) | 0;
m = a + m | 0
}
g = o + 4 | 0;
c[g >> 2] = c[g >> 2] & -2;
c[p + (j + 4) >> 2] = m | 1;
c[p + (m + j) >> 2] = m;
g = m >>> 3;
if (m >>> 0 < 256) {
m = g << 1;
d = 1288 + (m << 2) | 0;
l = c[312] | 0;
g = 1 << g;
do {
if ((l & g | 0) == 0) {
c[312] = l | g;
f = 1288 + (m + 2 << 2) | 0;
e = d
} else {
l = 1288 + (m + 2 << 2) | 0;
g = c[l >> 2] | 0;
if (!(g >>> 0 < (c[1264 >> 2] | 0) >>> 0)) {
f = l;
e = g;
break
}
ja()
}
} while (0);
c[f >> 2] = k;
c[e + 12 >> 2] = k;
c[p + (j + 8) >> 2] = e;
c[p + (j + 12) >> 2] = d;
break
}
e = m >>> 8;
do {
if ((e | 0) == 0) {
e = 0
} else {
if (m >>> 0 > 16777215) {
e = 31;
break
}
G = (e + 1048320 | 0) >>> 16 & 8;
H = e << G;
F = (H + 520192 | 0) >>> 16 & 4;
H = H << F;
e = (H + 245760 | 0) >>> 16 & 2;
e = 14 - (F | G | e) + (H << e >>> 15) | 0;
e = m >>> (e + 7 | 0) & 1 | e << 1
}
} while (0);
l = 1552 + (e << 2) | 0;
c[p + (j + 28) >> 2] = e;
c[p + (j + 20) >> 2] = 0;
c[p + (j + 16) >> 2] = 0;
f = c[1252 >> 2] | 0;
g = 1 << e;
if ((f & g | 0) == 0) {
c[1252 >> 2] = f | g;
c[l >> 2] = k;
c[p + (j + 24) >> 2] = l;
c[p + (j + 12) >> 2] = k;
c[p + (j + 8) >> 2] = k;
break
}
l = c[l >> 2] | 0;
if ((e | 0) == 31) {
e = 0
} else {
e = 25 - (e >>> 1) | 0
}
j: do {
if ((c[l + 4 >> 2] & -8 | 0) != (m | 0)) {
e = m << e;
while (1) {
g = l + (e >>> 31 << 2) + 16 | 0;
f = c[g >> 2] | 0;
if ((f | 0) == 0) {
break
}
if ((c[f + 4 >> 2] & -8 | 0) == (m | 0)) {
d = f;
break j
} else {
e = e << 1;
l = f
}
}
if (g >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[g >> 2] = k;
c[p + (j + 24) >> 2] = l;
c[p + (j + 12) >> 2] = k;
c[p + (j + 8) >> 2] = k;
break h
}
} else {
d = l
}
} while (0);
f = d + 8 | 0;
e = c[f >> 2] | 0;
g = c[1264 >> 2] | 0;
if (d >>> 0 < g >>> 0) {
ja()
}
if (e >>> 0 < g >>> 0) {
ja()
} else {
c[e + 12 >> 2] = k;
c[f >> 2] = k;
c[p + (j + 8) >> 2] = e;
c[p + (j + 12) >> 2] = d;
c[p + (j + 24) >> 2] = 0;
break
}
} else {
H = (c[1260 >> 2] | 0) + m | 0;
c[1260 >> 2] = H;
c[1272 >> 2] = k;
c[p + (j + 4) >> 2] = H | 1
}
} while (0);
H = p + (h | 8) | 0;
i = b;
return H | 0
}
e = 1696 | 0;
while (1) {
d = c[e >> 2] | 0;
if (!(d >>> 0 > r >>> 0) ? (n = c[e + 4 >> 2] | 0, m = d + n | 0, m >>> 0 > r >>> 0) : 0) {
break
}
e = c[e + 8 >> 2] | 0
}
e = d + (n + -39) | 0;
if ((e & 7 | 0) == 0) {
e = 0
} else {
e = 0 - e & 7
}
d = d + (n + -47 + e) | 0;
d = d >>> 0 < (r + 16 | 0) >>> 0 ? r : d;
e = d + 8 | 0;
f = p + 8 | 0;
if ((f & 7 | 0) == 0) {
f = 0
} else {
f = 0 - f & 7
}
H = q + -40 - f | 0;
c[1272 >> 2] = p + f;
c[1260 >> 2] = H;
c[p + (f + 4) >> 2] = H | 1;
c[p + (q + -36) >> 2] = 40;
c[1276 >> 2] = c[1736 >> 2];
c[d + 4 >> 2] = 27;
c[e + 0 >> 2] = c[1696 >> 2];
c[e + 4 >> 2] = c[1700 >> 2];
c[e + 8 >> 2] = c[1704 >> 2];
c[e + 12 >> 2] = c[1708 >> 2];
c[1696 >> 2] = p;
c[1700 >> 2] = q;
c[1708 >> 2] = 0;
c[1704 >> 2] = e;
e = d + 28 | 0;
c[e >> 2] = 7;
if ((d + 32 | 0) >>> 0 < m >>> 0) {
do {
H = e;
e = e + 4 | 0;
c[e >> 2] = 7
} while ((H + 8 | 0) >>> 0 < m >>> 0)
}
if ((d | 0) != (r | 0)) {
d = d - r | 0;
e = r + (d + 4) | 0;
c[e >> 2] = c[e >> 2] & -2;
c[r + 4 >> 2] = d | 1;
c[r + d >> 2] = d;
e = d >>> 3;
if (d >>> 0 < 256) {
g = e << 1;
d = 1288 + (g << 2) | 0;
f = c[312] | 0;
e = 1 << e;
do {
if ((f & e | 0) == 0) {
c[312] = f | e;
k = 1288 + (g + 2 << 2) | 0;
j = d
} else {
f = 1288 + (g + 2 << 2) | 0;
e = c[f >> 2] | 0;
if (!(e >>> 0 < (c[1264 >> 2] | 0) >>> 0)) {
k = f;
j = e;
break
}
ja()
}
} while (0);
c[k >> 2] = r;
c[j + 12 >> 2] = r;
c[r + 8 >> 2] = j;
c[r + 12 >> 2] = d;
break
}
e = d >>> 8;
if ((e | 0) != 0) {
if (d >>> 0 > 16777215) {
e = 31
} else {
G = (e + 1048320 | 0) >>> 16 & 8;
H = e << G;
F = (H + 520192 | 0) >>> 16 & 4;
H = H << F;
e = (H + 245760 | 0) >>> 16 & 2;
e = 14 - (F | G | e) + (H << e >>> 15) | 0;
e = d >>> (e + 7 | 0) & 1 | e << 1
}
} else {
e = 0
}
j = 1552 + (e << 2) | 0;
c[r + 28 >> 2] = e;
c[r + 20 >> 2] = 0;
c[r + 16 >> 2] = 0;
f = c[1252 >> 2] | 0;
g = 1 << e;
if ((f & g | 0) == 0) {
c[1252 >> 2] = f | g;
c[j >> 2] = r;
c[r + 24 >> 2] = j;
c[r + 12 >> 2] = r;
c[r + 8 >> 2] = r;
break
}
f = c[j >> 2] | 0;
if ((e | 0) == 31) {
e = 0
} else {
e = 25 - (e >>> 1) | 0
}
k: do {
if ((c[f + 4 >> 2] & -8 | 0) != (d | 0)) {
e = d << e;
while (1) {
j = f + (e >>> 31 << 2) + 16 | 0;
g = c[j >> 2] | 0;
if ((g | 0) == 0) {
break
}
if ((c[g + 4 >> 2] & -8 | 0) == (d | 0)) {
h = g;
break k
} else {
e = e << 1;
f = g
}
}
if (j >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[j >> 2] = r;
c[r + 24 >> 2] = f;
c[r + 12 >> 2] = r;
c[r + 8 >> 2] = r;
break g
}
} else {
h = f
}
} while (0);
f = h + 8 | 0;
e = c[f >> 2] | 0;
d = c[1264 >> 2] | 0;
if (h >>> 0 < d >>> 0) {
ja()
}
if (e >>> 0 < d >>> 0) {
ja()
} else {
c[e + 12 >> 2] = r;
c[f >> 2] = r;
c[r + 8 >> 2] = e;
c[r + 12 >> 2] = h;
c[r + 24 >> 2] = 0;
break
}
}
} else {
H = c[1264 >> 2] | 0;
if ((H | 0) == 0 | p >>> 0 < H >>> 0) {
c[1264 >> 2] = p
}
c[1696 >> 2] = p;
c[1700 >> 2] = q;
c[1708 >> 2] = 0;
c[1284 >> 2] = c[430];
c[1280 >> 2] = -1;
d = 0;
do {
H = d << 1;
G = 1288 + (H << 2) | 0;
c[1288 + (H + 3 << 2) >> 2] = G;
c[1288 + (H + 2 << 2) >> 2] = G;
d = d + 1 | 0
} while ((d | 0) != 32);
d = p + 8 | 0;
if ((d & 7 | 0) == 0) {
d = 0
} else {
d = 0 - d & 7
}
H = q + -40 - d | 0;
c[1272 >> 2] = p + d;
c[1260 >> 2] = H;
c[p + (d + 4) >> 2] = H | 1;
c[p + (q + -36) >> 2] = 40;
c[1276 >> 2] = c[1736 >> 2]
}
} while (0);
d = c[1260 >> 2] | 0;
if (d >>> 0 > a >>> 0) {
G = d - a | 0;
c[1260 >> 2] = G;
H = c[1272 >> 2] | 0;
c[1272 >> 2] = H + a;
c[H + (a + 4) >> 2] = G | 1;
c[H + 4 >> 2] = a | 3;
H = H + 8 | 0;
i = b;
return H | 0
}
}
c[(pa() | 0) >> 2] = 12;
H = 0;
i = b;
return H | 0
}
function Ra(a) {
a = a | 0;
var b = 0,
d = 0,
e = 0,
f = 0,
g = 0,
h = 0,
j = 0,
k = 0,
l = 0,
m = 0,
n = 0,
o = 0,
p = 0,
q = 0,
r = 0,
s = 0,
t = 0,
u = 0,
v = 0,
w = 0;
b = i;
if ((a | 0) == 0) {
i = b;
return
}
q = a + -8 | 0;
r = c[1264 >> 2] | 0;
if (q >>> 0 < r >>> 0) {
ja()
}
o = c[a + -4 >> 2] | 0;
n = o & 3;
if ((n | 0) == 1) {
ja()
}
j = o & -8;
h = a + (j + -8) | 0;
do {
if ((o & 1 | 0) == 0) {
u = c[q >> 2] | 0;
if ((n | 0) == 0) {
i = b;
return
}
q = -8 - u | 0;
o = a + q | 0;
n = u + j | 0;
if (o >>> 0 < r >>> 0) {
ja()
}
if ((o | 0) == (c[1268 >> 2] | 0)) {
d = a + (j + -4) | 0;
if ((c[d >> 2] & 3 | 0) != 3) {
d = o;
m = n;
break
}
c[1256 >> 2] = n;
c[d >> 2] = c[d >> 2] & -2;
c[a + (q + 4) >> 2] = n | 1;
c[h >> 2] = n;
i = b;
return
}
t = u >>> 3;
if (u >>> 0 < 256) {
d = c[a + (q + 8) >> 2] | 0;
m = c[a + (q + 12) >> 2] | 0;
p = 1288 + (t << 1 << 2) | 0;
if ((d | 0) != (p | 0)) {
if (d >>> 0 < r >>> 0) {
ja()
}
if ((c[d + 12 >> 2] | 0) != (o | 0)) {
ja()
}
}
if ((m | 0) == (d | 0)) {
c[312] = c[312] & ~(1 << t);
d = o;
m = n;
break
}
if ((m | 0) != (p | 0)) {
if (m >>> 0 < r >>> 0) {
ja()
}
p = m + 8 | 0;
if ((c[p >> 2] | 0) == (o | 0)) {
s = p
} else {
ja()
}
} else {
s = m + 8 | 0
}
c[d + 12 >> 2] = m;
c[s >> 2] = d;
d = o;
m = n;
break
}
s = c[a + (q + 24) >> 2] | 0;
t = c[a + (q + 12) >> 2] | 0;
do {
if ((t | 0) == (o | 0)) {
u = a + (q + 20) | 0;
t = c[u >> 2] | 0;
if ((t | 0) == 0) {
u = a + (q + 16) | 0;
t = c[u >> 2] | 0;
if ((t | 0) == 0) {
p = 0;
break
}
}
while (1) {
w = t + 20 | 0;
v = c[w >> 2] | 0;
if ((v | 0) != 0) {
t = v;
u = w;
continue
}
v = t + 16 | 0;
w = c[v >> 2] | 0;
if ((w | 0) == 0) {
break
} else {
t = w;
u = v
}
}
if (u >>> 0 < r >>> 0) {
ja()
} else {
c[u >> 2] = 0;
p = t;
break
}
} else {
u = c[a + (q + 8) >> 2] | 0;
if (u >>> 0 < r >>> 0) {
ja()
}
r = u + 12 | 0;
if ((c[r >> 2] | 0) != (o | 0)) {
ja()
}
v = t + 8 | 0;
if ((c[v >> 2] | 0) == (o | 0)) {
c[r >> 2] = t;
c[v >> 2] = u;
p = t;
break
} else {
ja()
}
}
} while (0);
if ((s | 0) != 0) {
t = c[a + (q + 28) >> 2] | 0;
r = 1552 + (t << 2) | 0;
if ((o | 0) == (c[r >> 2] | 0)) {
c[r >> 2] = p;
if ((p | 0) == 0) {
c[1252 >> 2] = c[1252 >> 2] & ~(1 << t);
d = o;
m = n;
break
}
} else {
if (s >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
r = s + 16 | 0;
if ((c[r >> 2] | 0) == (o | 0)) {
c[r >> 2] = p
} else {
c[s + 20 >> 2] = p
} if ((p | 0) == 0) {
d = o;
m = n;
break
}
} if (p >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
c[p + 24 >> 2] = s;
r = c[a + (q + 16) >> 2] | 0;
do {
if ((r | 0) != 0) {
if (r >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[p + 16 >> 2] = r;
c[r + 24 >> 2] = p;
break
}
}
} while (0);
q = c[a + (q + 20) >> 2] | 0;
if ((q | 0) != 0) {
if (q >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[p + 20 >> 2] = q;
c[q + 24 >> 2] = p;
d = o;
m = n;
break
}
} else {
d = o;
m = n
}
} else {
d = o;
m = n
}
} else {
d = q;
m = j
}
} while (0);
if (!(d >>> 0 < h >>> 0)) {
ja()
}
n = a + (j + -4) | 0;
o = c[n >> 2] | 0;
if ((o & 1 | 0) == 0) {
ja()
}
if ((o & 2 | 0) == 0) {
if ((h | 0) == (c[1272 >> 2] | 0)) {
w = (c[1260 >> 2] | 0) + m | 0;
c[1260 >> 2] = w;
c[1272 >> 2] = d;
c[d + 4 >> 2] = w | 1;
if ((d | 0) != (c[1268 >> 2] | 0)) {
i = b;
return
}
c[1268 >> 2] = 0;
c[1256 >> 2] = 0;
i = b;
return
}
if ((h | 0) == (c[1268 >> 2] | 0)) {
w = (c[1256 >> 2] | 0) + m | 0;
c[1256 >> 2] = w;
c[1268 >> 2] = d;
c[d + 4 >> 2] = w | 1;
c[d + w >> 2] = w;
i = b;
return
}
m = (o & -8) + m | 0;
n = o >>> 3;
do {
if (!(o >>> 0 < 256)) {
l = c[a + (j + 16) >> 2] | 0;
q = c[a + (j | 4) >> 2] | 0;
do {
if ((q | 0) == (h | 0)) {
o = a + (j + 12) | 0;
n = c[o >> 2] | 0;
if ((n | 0) == 0) {
o = a + (j + 8) | 0;
n = c[o >> 2] | 0;
if ((n | 0) == 0) {
k = 0;
break
}
}
while (1) {
p = n + 20 | 0;
q = c[p >> 2] | 0;
if ((q | 0) != 0) {
n = q;
o = p;
continue
}
p = n + 16 | 0;
q = c[p >> 2] | 0;
if ((q | 0) == 0) {
break
} else {
n = q;
o = p
}
}
if (o >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[o >> 2] = 0;
k = n;
break
}
} else {
o = c[a + j >> 2] | 0;
if (o >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
p = o + 12 | 0;
if ((c[p >> 2] | 0) != (h | 0)) {
ja()
}
n = q + 8 | 0;
if ((c[n >> 2] | 0) == (h | 0)) {
c[p >> 2] = q;
c[n >> 2] = o;
k = q;
break
} else {
ja()
}
}
} while (0);
if ((l | 0) != 0) {
n = c[a + (j + 20) >> 2] | 0;
o = 1552 + (n << 2) | 0;
if ((h | 0) == (c[o >> 2] | 0)) {
c[o >> 2] = k;
if ((k | 0) == 0) {
c[1252 >> 2] = c[1252 >> 2] & ~(1 << n);
break
}
} else {
if (l >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
n = l + 16 | 0;
if ((c[n >> 2] | 0) == (h | 0)) {
c[n >> 2] = k
} else {
c[l + 20 >> 2] = k
} if ((k | 0) == 0) {
break
}
} if (k >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
c[k + 24 >> 2] = l;
h = c[a + (j + 8) >> 2] | 0;
do {
if ((h | 0) != 0) {
if (h >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[k + 16 >> 2] = h;
c[h + 24 >> 2] = k;
break
}
}
} while (0);
h = c[a + (j + 12) >> 2] | 0;
if ((h | 0) != 0) {
if (h >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[k + 20 >> 2] = h;
c[h + 24 >> 2] = k;
break
}
}
}
} else {
k = c[a + j >> 2] | 0;
a = c[a + (j | 4) >> 2] | 0;
j = 1288 + (n << 1 << 2) | 0;
if ((k | 0) != (j | 0)) {
if (k >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
if ((c[k + 12 >> 2] | 0) != (h | 0)) {
ja()
}
}
if ((a | 0) == (k | 0)) {
c[312] = c[312] & ~(1 << n);
break
}
if ((a | 0) != (j | 0)) {
if (a >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
j = a + 8 | 0;
if ((c[j >> 2] | 0) == (h | 0)) {
l = j
} else {
ja()
}
} else {
l = a + 8 | 0
}
c[k + 12 >> 2] = a;
c[l >> 2] = k
}
} while (0);
c[d + 4 >> 2] = m | 1;
c[d + m >> 2] = m;
if ((d | 0) == (c[1268 >> 2] | 0)) {
c[1256 >> 2] = m;
i = b;
return
}
} else {
c[n >> 2] = o & -2;
c[d + 4 >> 2] = m | 1;
c[d + m >> 2] = m
}
h = m >>> 3;
if (m >>> 0 < 256) {
a = h << 1;
e = 1288 + (a << 2) | 0;
j = c[312] | 0;
h = 1 << h;
if ((j & h | 0) != 0) {
h = 1288 + (a + 2 << 2) | 0;
a = c[h >> 2] | 0;
if (a >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
f = h;
g = a
}
} else {
c[312] = j | h;
f = 1288 + (a + 2 << 2) | 0;
g = e
}
c[f >> 2] = d;
c[g + 12 >> 2] = d;
c[d + 8 >> 2] = g;
c[d + 12 >> 2] = e;
i = b;
return
}
f = m >>> 8;
if ((f | 0) != 0) {
if (m >>> 0 > 16777215) {
f = 31
} else {
v = (f + 1048320 | 0) >>> 16 & 8;
w = f << v;
u = (w + 520192 | 0) >>> 16 & 4;
w = w << u;
f = (w + 245760 | 0) >>> 16 & 2;
f = 14 - (u | v | f) + (w << f >>> 15) | 0;
f = m >>> (f + 7 | 0) & 1 | f << 1
}
} else {
f = 0
}
g = 1552 + (f << 2) | 0;
c[d + 28 >> 2] = f;
c[d + 20 >> 2] = 0;
c[d + 16 >> 2] = 0;
a = c[1252 >> 2] | 0;
h = 1 << f;
a: do {
if ((a & h | 0) != 0) {
g = c[g >> 2] | 0;
if ((f | 0) == 31) {
f = 0
} else {
f = 25 - (f >>> 1) | 0
}
b: do {
if ((c[g + 4 >> 2] & -8 | 0) != (m | 0)) {
f = m << f;
a = g;
while (1) {
h = a + (f >>> 31 << 2) + 16 | 0;
g = c[h >> 2] | 0;
if ((g | 0) == 0) {
break
}
if ((c[g + 4 >> 2] & -8 | 0) == (m | 0)) {
e = g;
break b
} else {
f = f << 1;
a = g
}
}
if (h >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[h >> 2] = d;
c[d + 24 >> 2] = a;
c[d + 12 >> 2] = d;
c[d + 8 >> 2] = d;
break a
}
} else {
e = g
}
} while (0);
g = e + 8 | 0;
f = c[g >> 2] | 0;
h = c[1264 >> 2] | 0;
if (e >>> 0 < h >>> 0) {
ja()
}
if (f >>> 0 < h >>> 0) {
ja()
} else {
c[f + 12 >> 2] = d;
c[g >> 2] = d;
c[d + 8 >> 2] = f;
c[d + 12 >> 2] = e;
c[d + 24 >> 2] = 0;
break
}
} else {
c[1252 >> 2] = a | h;
c[g >> 2] = d;
c[d + 24 >> 2] = g;
c[d + 12 >> 2] = d;
c[d + 8 >> 2] = d
}
} while (0);
w = (c[1280 >> 2] | 0) + -1 | 0;
c[1280 >> 2] = w;
if ((w | 0) == 0) {
d = 1704 | 0
} else {
i = b;
return
}
while (1) {
d = c[d >> 2] | 0;
if ((d | 0) == 0) {
break
} else {
d = d + 8 | 0
}
}
c[1280 >> 2] = -1;
i = b;
return
}
function Sa(a, b) {
a = a | 0;
b = b | 0;
var d = 0,
e = 0;
d = i;
if ((a | 0) != 0) {
e = $(b, a) | 0;
if ((b | a) >>> 0 > 65535) {
e = ((e >>> 0) / (a >>> 0) | 0 | 0) == (b | 0) ? e : -1
}
} else {
e = 0
}
a = Qa(e) | 0;
if ((a | 0) == 0) {
i = d;
return a | 0
}
if ((c[a + -4 >> 2] & 3 | 0) == 0) {
i = d;
return a | 0
}
ab(a | 0, 0, e | 0) | 0;
i = d;
return a | 0
}
function Ta(a, b) {
a = a | 0;
b = b | 0;
var d = 0,
e = 0,
f = 0;
d = i;
do {
if ((a | 0) != 0) {
if (b >>> 0 > 4294967231) {
c[(pa() | 0) >> 2] = 12;
e = 0;
break
}
if (b >>> 0 < 11) {
e = 16
} else {
e = b + 11 & -8
}
e = Ua(a + -8 | 0, e) | 0;
if ((e | 0) != 0) {
e = e + 8 | 0;
break
}
e = Qa(b) | 0;
if ((e | 0) == 0) {
e = 0
} else {
f = c[a + -4 >> 2] | 0;
f = (f & -8) - ((f & 3 | 0) == 0 ? 8 : 4) | 0;
_a(e | 0, a | 0, (f >>> 0 < b >>> 0 ? f : b) | 0) | 0;
Ra(a)
}
} else {
e = Qa(b) | 0
}
} while (0);
i = d;
return e | 0
}
function Ua(a, b) {
a = a | 0;
b = b | 0;
var d = 0,
e = 0,
f = 0,
g = 0,
h = 0,
j = 0,
k = 0,
l = 0,
m = 0,
n = 0,
o = 0,
p = 0,
q = 0;
d = i;
e = a + 4 | 0;
g = c[e >> 2] | 0;
j = g & -8;
f = a + j | 0;
l = c[1264 >> 2] | 0;
if (a >>> 0 < l >>> 0) {
ja()
}
n = g & 3;
if (!((n | 0) != 1 & a >>> 0 < f >>> 0)) {
ja()
}
h = a + (j | 4) | 0;
o = c[h >> 2] | 0;
if ((o & 1 | 0) == 0) {
ja()
}
if ((n | 0) == 0) {
if (b >>> 0 < 256) {
q = 0;
i = d;
return q | 0
}
if (!(j >>> 0 < (b + 4 | 0) >>> 0) ? !((j - b | 0) >>> 0 > c[1728 >> 2] << 1 >>> 0) : 0) {
q = a;
i = d;
return q | 0
}
q = 0;
i = d;
return q | 0
}
if (!(j >>> 0 < b >>> 0)) {
f = j - b | 0;
if (!(f >>> 0 > 15)) {
q = a;
i = d;
return q | 0
}
c[e >> 2] = g & 1 | b | 2;
c[a + (b + 4) >> 2] = f | 3;
c[h >> 2] = c[h >> 2] | 1;
Va(a + b | 0, f);
q = a;
i = d;
return q | 0
}
if ((f | 0) == (c[1272 >> 2] | 0)) {
f = (c[1260 >> 2] | 0) + j | 0;
if (!(f >>> 0 > b >>> 0)) {
q = 0;
i = d;
return q | 0
}
q = f - b | 0;
c[e >> 2] = g & 1 | b | 2;
c[a + (b + 4) >> 2] = q | 1;
c[1272 >> 2] = a + b;
c[1260 >> 2] = q;
q = a;
i = d;
return q | 0
}
if ((f | 0) == (c[1268 >> 2] | 0)) {
h = (c[1256 >> 2] | 0) + j | 0;
if (h >>> 0 < b >>> 0) {
q = 0;
i = d;
return q | 0
}
f = h - b | 0;
if (f >>> 0 > 15) {
c[e >> 2] = g & 1 | b | 2;
c[a + (b + 4) >> 2] = f | 1;
c[a + h >> 2] = f;
q = a + (h + 4) | 0;
c[q >> 2] = c[q >> 2] & -2;
b = a + b | 0
} else {
c[e >> 2] = g & 1 | h | 2;
b = a + (h + 4) | 0;
c[b >> 2] = c[b >> 2] | 1;
b = 0;
f = 0
}
c[1256 >> 2] = f;
c[1268 >> 2] = b;
q = a;
i = d;
return q | 0
}
if ((o & 2 | 0) != 0) {
q = 0;
i = d;
return q | 0
}
h = (o & -8) + j | 0;
if (h >>> 0 < b >>> 0) {
q = 0;
i = d;
return q | 0
}
g = h - b | 0;
n = o >>> 3;
do {
if (!(o >>> 0 < 256)) {
m = c[a + (j + 24) >> 2] | 0;
o = c[a + (j + 12) >> 2] | 0;
do {
if ((o | 0) == (f | 0)) {
o = a + (j + 20) | 0;
n = c[o >> 2] | 0;
if ((n | 0) == 0) {
o = a + (j + 16) | 0;
n = c[o >> 2] | 0;
if ((n | 0) == 0) {
k = 0;
break
}
}
while (1) {
q = n + 20 | 0;
p = c[q >> 2] | 0;
if ((p | 0) != 0) {
n = p;
o = q;
continue
}
q = n + 16 | 0;
p = c[q >> 2] | 0;
if ((p | 0) == 0) {
break
} else {
n = p;
o = q
}
}
if (o >>> 0 < l >>> 0) {
ja()
} else {
c[o >> 2] = 0;
k = n;
break
}
} else {
n = c[a + (j + 8) >> 2] | 0;
if (n >>> 0 < l >>> 0) {
ja()
}
p = n + 12 | 0;
if ((c[p >> 2] | 0) != (f | 0)) {
ja()
}
l = o + 8 | 0;
if ((c[l >> 2] | 0) == (f | 0)) {
c[p >> 2] = o;
c[l >> 2] = n;
k = o;
break
} else {
ja()
}
}
} while (0);
if ((m | 0) != 0) {
l = c[a + (j + 28) >> 2] | 0;
n = 1552 + (l << 2) | 0;
if ((f | 0) == (c[n >> 2] | 0)) {
c[n >> 2] = k;
if ((k | 0) == 0) {
c[1252 >> 2] = c[1252 >> 2] & ~(1 << l);
break
}
} else {
if (m >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
l = m + 16 | 0;
if ((c[l >> 2] | 0) == (f | 0)) {
c[l >> 2] = k
} else {
c[m + 20 >> 2] = k
} if ((k | 0) == 0) {
break
}
} if (k >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
c[k + 24 >> 2] = m;
f = c[a + (j + 16) >> 2] | 0;
do {
if ((f | 0) != 0) {
if (f >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[k + 16 >> 2] = f;
c[f + 24 >> 2] = k;
break
}
}
} while (0);
f = c[a + (j + 20) >> 2] | 0;
if ((f | 0) != 0) {
if (f >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[k + 20 >> 2] = f;
c[f + 24 >> 2] = k;
break
}
}
}
} else {
k = c[a + (j + 8) >> 2] | 0;
j = c[a + (j + 12) >> 2] | 0;
o = 1288 + (n << 1 << 2) | 0;
if ((k | 0) != (o | 0)) {
if (k >>> 0 < l >>> 0) {
ja()
}
if ((c[k + 12 >> 2] | 0) != (f | 0)) {
ja()
}
}
if ((j | 0) == (k | 0)) {
c[312] = c[312] & ~(1 << n);
break
}
if ((j | 0) != (o | 0)) {
if (j >>> 0 < l >>> 0) {
ja()
}
l = j + 8 | 0;
if ((c[l >> 2] | 0) == (f | 0)) {
m = l
} else {
ja()
}
} else {
m = j + 8 | 0
}
c[k + 12 >> 2] = j;
c[m >> 2] = k
}
} while (0);
if (g >>> 0 < 16) {
c[e >> 2] = h | c[e >> 2] & 1 | 2;
q = a + (h | 4) | 0;
c[q >> 2] = c[q >> 2] | 1;
q = a;
i = d;
return q | 0
} else {
c[e >> 2] = c[e >> 2] & 1 | b | 2;
c[a + (b + 4) >> 2] = g | 3;
q = a + (h | 4) | 0;
c[q >> 2] = c[q >> 2] | 1;
Va(a + b | 0, g);
q = a;
i = d;
return q | 0
}
return 0
}
function Va(a, b) {
a = a | 0;
b = b | 0;
var d = 0,
e = 0,
f = 0,
g = 0,
h = 0,
j = 0,
k = 0,
l = 0,
m = 0,
n = 0,
o = 0,
p = 0,
q = 0,
r = 0,
s = 0,
t = 0,
u = 0,
v = 0;
d = i;
h = a + b | 0;
l = c[a + 4 >> 2] | 0;
do {
if ((l & 1 | 0) == 0) {
p = c[a >> 2] | 0;
if ((l & 3 | 0) == 0) {
i = d;
return
}
l = a + (0 - p) | 0;
m = p + b | 0;
q = c[1264 >> 2] | 0;
if (l >>> 0 < q >>> 0) {
ja()
}
if ((l | 0) == (c[1268 >> 2] | 0)) {
e = a + (b + 4) | 0;
if ((c[e >> 2] & 3 | 0) != 3) {
e = l;
n = m;
break
}
c[1256 >> 2] = m;
c[e >> 2] = c[e >> 2] & -2;
c[a + (4 - p) >> 2] = m | 1;
c[h >> 2] = m;
i = d;
return
}
s = p >>> 3;
if (p >>> 0 < 256) {
e = c[a + (8 - p) >> 2] | 0;
n = c[a + (12 - p) >> 2] | 0;
o = 1288 + (s << 1 << 2) | 0;
if ((e | 0) != (o | 0)) {
if (e >>> 0 < q >>> 0) {
ja()
}
if ((c[e + 12 >> 2] | 0) != (l | 0)) {
ja()
}
}
if ((n | 0) == (e | 0)) {
c[312] = c[312] & ~(1 << s);
e = l;
n = m;
break
}
if ((n | 0) != (o | 0)) {
if (n >>> 0 < q >>> 0) {
ja()
}
o = n + 8 | 0;
if ((c[o >> 2] | 0) == (l | 0)) {
r = o
} else {
ja()
}
} else {
r = n + 8 | 0
}
c[e + 12 >> 2] = n;
c[r >> 2] = e;
e = l;
n = m;
break
}
r = c[a + (24 - p) >> 2] | 0;
t = c[a + (12 - p) >> 2] | 0;
do {
if ((t | 0) == (l | 0)) {
u = 16 - p | 0;
t = a + (u + 4) | 0;
s = c[t >> 2] | 0;
if ((s | 0) == 0) {
t = a + u | 0;
s = c[t >> 2] | 0;
if ((s | 0) == 0) {
o = 0;
break
}
}
while (1) {
u = s + 20 | 0;
v = c[u >> 2] | 0;
if ((v | 0) != 0) {
s = v;
t = u;
continue
}
v = s + 16 | 0;
u = c[v >> 2] | 0;
if ((u | 0) == 0) {
break
} else {
s = u;
t = v
}
}
if (t >>> 0 < q >>> 0) {
ja()
} else {
c[t >> 2] = 0;
o = s;
break
}
} else {
s = c[a + (8 - p) >> 2] | 0;
if (s >>> 0 < q >>> 0) {
ja()
}
u = s + 12 | 0;
if ((c[u >> 2] | 0) != (l | 0)) {
ja()
}
q = t + 8 | 0;
if ((c[q >> 2] | 0) == (l | 0)) {
c[u >> 2] = t;
c[q >> 2] = s;
o = t;
break
} else {
ja()
}
}
} while (0);
if ((r | 0) != 0) {
q = c[a + (28 - p) >> 2] | 0;
s = 1552 + (q << 2) | 0;
if ((l | 0) == (c[s >> 2] | 0)) {
c[s >> 2] = o;
if ((o | 0) == 0) {
c[1252 >> 2] = c[1252 >> 2] & ~(1 << q);
e = l;
n = m;
break
}
} else {
if (r >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
q = r + 16 | 0;
if ((c[q >> 2] | 0) == (l | 0)) {
c[q >> 2] = o
} else {
c[r + 20 >> 2] = o
} if ((o | 0) == 0) {
e = l;
n = m;
break
}
} if (o >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
c[o + 24 >> 2] = r;
p = 16 - p | 0;
q = c[a + p >> 2] | 0;
do {
if ((q | 0) != 0) {
if (q >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[o + 16 >> 2] = q;
c[q + 24 >> 2] = o;
break
}
}
} while (0);
p = c[a + (p + 4) >> 2] | 0;
if ((p | 0) != 0) {
if (p >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[o + 20 >> 2] = p;
c[p + 24 >> 2] = o;
e = l;
n = m;
break
}
} else {
e = l;
n = m
}
} else {
e = l;
n = m
}
} else {
e = a;
n = b
}
} while (0);
l = c[1264 >> 2] | 0;
if (h >>> 0 < l >>> 0) {
ja()
}
m = a + (b + 4) | 0;
o = c[m >> 2] | 0;
if ((o & 2 | 0) == 0) {
if ((h | 0) == (c[1272 >> 2] | 0)) {
v = (c[1260 >> 2] | 0) + n | 0;
c[1260 >> 2] = v;
c[1272 >> 2] = e;
c[e + 4 >> 2] = v | 1;
if ((e | 0) != (c[1268 >> 2] | 0)) {
i = d;
return
}
c[1268 >> 2] = 0;
c[1256 >> 2] = 0;
i = d;
return
}
if ((h | 0) == (c[1268 >> 2] | 0)) {
v = (c[1256 >> 2] | 0) + n | 0;
c[1256 >> 2] = v;
c[1268 >> 2] = e;
c[e + 4 >> 2] = v | 1;
c[e + v >> 2] = v;
i = d;
return
}
n = (o & -8) + n | 0;
m = o >>> 3;
do {
if (!(o >>> 0 < 256)) {
k = c[a + (b + 24) >> 2] | 0;
m = c[a + (b + 12) >> 2] | 0;
do {
if ((m | 0) == (h | 0)) {
o = a + (b + 20) | 0;
m = c[o >> 2] | 0;
if ((m | 0) == 0) {
o = a + (b + 16) | 0;
m = c[o >> 2] | 0;
if ((m | 0) == 0) {
j = 0;
break
}
}
while (1) {
q = m + 20 | 0;
p = c[q >> 2] | 0;
if ((p | 0) != 0) {
m = p;
o = q;
continue
}
p = m + 16 | 0;
q = c[p >> 2] | 0;
if ((q | 0) == 0) {
break
} else {
m = q;
o = p
}
}
if (o >>> 0 < l >>> 0) {
ja()
} else {
c[o >> 2] = 0;
j = m;
break
}
} else {
o = c[a + (b + 8) >> 2] | 0;
if (o >>> 0 < l >>> 0) {
ja()
}
l = o + 12 | 0;
if ((c[l >> 2] | 0) != (h | 0)) {
ja()
}
p = m + 8 | 0;
if ((c[p >> 2] | 0) == (h | 0)) {
c[l >> 2] = m;
c[p >> 2] = o;
j = m;
break
} else {
ja()
}
}
} while (0);
if ((k | 0) != 0) {
l = c[a + (b + 28) >> 2] | 0;
m = 1552 + (l << 2) | 0;
if ((h | 0) == (c[m >> 2] | 0)) {
c[m >> 2] = j;
if ((j | 0) == 0) {
c[1252 >> 2] = c[1252 >> 2] & ~(1 << l);
break
}
} else {
if (k >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
l = k + 16 | 0;
if ((c[l >> 2] | 0) == (h | 0)) {
c[l >> 2] = j
} else {
c[k + 20 >> 2] = j
} if ((j | 0) == 0) {
break
}
} if (j >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
c[j + 24 >> 2] = k;
h = c[a + (b + 16) >> 2] | 0;
do {
if ((h | 0) != 0) {
if (h >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[j + 16 >> 2] = h;
c[h + 24 >> 2] = j;
break
}
}
} while (0);
h = c[a + (b + 20) >> 2] | 0;
if ((h | 0) != 0) {
if (h >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
c[j + 20 >> 2] = h;
c[h + 24 >> 2] = j;
break
}
}
}
} else {
j = c[a + (b + 8) >> 2] | 0;
a = c[a + (b + 12) >> 2] | 0;
b = 1288 + (m << 1 << 2) | 0;
if ((j | 0) != (b | 0)) {
if (j >>> 0 < l >>> 0) {
ja()
}
if ((c[j + 12 >> 2] | 0) != (h | 0)) {
ja()
}
}
if ((a | 0) == (j | 0)) {
c[312] = c[312] & ~(1 << m);
break
}
if ((a | 0) != (b | 0)) {
if (a >>> 0 < l >>> 0) {
ja()
}
b = a + 8 | 0;
if ((c[b >> 2] | 0) == (h | 0)) {
k = b
} else {
ja()
}
} else {
k = a + 8 | 0
}
c[j + 12 >> 2] = a;
c[k >> 2] = j
}
} while (0);
c[e + 4 >> 2] = n | 1;
c[e + n >> 2] = n;
if ((e | 0) == (c[1268 >> 2] | 0)) {
c[1256 >> 2] = n;
i = d;
return
}
} else {
c[m >> 2] = o & -2;
c[e + 4 >> 2] = n | 1;
c[e + n >> 2] = n
}
a = n >>> 3;
if (n >>> 0 < 256) {
b = a << 1;
h = 1288 + (b << 2) | 0;
j = c[312] | 0;
a = 1 << a;
if ((j & a | 0) != 0) {
b = 1288 + (b + 2 << 2) | 0;
a = c[b >> 2] | 0;
if (a >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
} else {
g = b;
f = a
}
} else {
c[312] = j | a;
g = 1288 + (b + 2 << 2) | 0;
f = h
}
c[g >> 2] = e;
c[f + 12 >> 2] = e;
c[e + 8 >> 2] = f;
c[e + 12 >> 2] = h;
i = d;
return
}
f = n >>> 8;
if ((f | 0) != 0) {
if (n >>> 0 > 16777215) {
f = 31
} else {
u = (f + 1048320 | 0) >>> 16 & 8;
v = f << u;
t = (v + 520192 | 0) >>> 16 & 4;
v = v << t;
f = (v + 245760 | 0) >>> 16 & 2;
f = 14 - (t | u | f) + (v << f >>> 15) | 0;
f = n >>> (f + 7 | 0) & 1 | f << 1
}
} else {
f = 0
}
a = 1552 + (f << 2) | 0;
c[e + 28 >> 2] = f;
c[e + 20 >> 2] = 0;
c[e + 16 >> 2] = 0;
h = c[1252 >> 2] | 0;
g = 1 << f;
if ((h & g | 0) == 0) {
c[1252 >> 2] = h | g;
c[a >> 2] = e;
c[e + 24 >> 2] = a;
c[e + 12 >> 2] = e;
c[e + 8 >> 2] = e;
i = d;
return
}
g = c[a >> 2] | 0;
if ((f | 0) == 31) {
f = 0
} else {
f = 25 - (f >>> 1) | 0
}
a: do {
if ((c[g + 4 >> 2] & -8 | 0) != (n | 0)) {
f = n << f;
a = g;
while (1) {
h = a + (f >>> 31 << 2) + 16 | 0;
g = c[h >> 2] | 0;
if ((g | 0) == 0) {
break
}
if ((c[g + 4 >> 2] & -8 | 0) == (n | 0)) {
break a
} else {
f = f << 1;
a = g
}
}
if (h >>> 0 < (c[1264 >> 2] | 0) >>> 0) {
ja()
}
c[h >> 2] = e;
c[e + 24 >> 2] = a;
c[e + 12 >> 2] = e;
c[e + 8 >> 2] = e;
i = d;
return
}
} while (0);
f = g + 8 | 0;
a = c[f >> 2] | 0;
h = c[1264 >> 2] | 0;
if (g >>> 0 < h >>> 0) {
ja()
}
if (a >>> 0 < h >>> 0) {
ja()
}
c[a + 12 >> 2] = e;
c[f >> 2] = e;
c[e + 8 >> 2] = a;
c[e + 12 >> 2] = g;
c[e + 24 >> 2] = 0;
i = d;
return
}
function Wa(b, d, e) {
b = b | 0;
d = d | 0;
e = e | 0;
var f = 0,
g = 0,
h = 0,
j = 0;
f = i;
g = d & 255;
j = (e | 0) == 0;
a: do {
if ((b & 3 | 0) == 0 | j) {
h = 5
} else {
h = d & 255;
while (1) {
if ((a[b >> 0] | 0) == h << 24 >> 24) {
h = 6;
break a
}
b = b + 1 | 0;
e = e + -1 | 0;
j = (e | 0) == 0;
if ((b & 3 | 0) == 0 | j) {
h = 5;
break
}
}
}
} while (0);
if ((h | 0) == 5) {
if (j) {
e = 0
} else {
h = 6
}
}
b: do {
if ((h | 0) == 6) {
d = d & 255;
if (!((a[b >> 0] | 0) == d << 24 >> 24)) {
g = $(g, 16843009) | 0;
c: do {
if (e >>> 0 > 3) {
do {
j = c[b >> 2] ^ g;
if (((j & -2139062144 ^ -2139062144) & j + -16843009 | 0) != 0) {
break c
}
b = b + 4 | 0;
e = e + -4 | 0
} while (e >>> 0 > 3)
}
} while (0);
if ((e | 0) == 0) {
e = 0
} else {
while (1) {
if ((a[b >> 0] | 0) == d << 24 >> 24) {
break b
}
b = b + 1 | 0;
e = e + -1 | 0;
if ((e | 0) == 0) {
e = 0;
break
}
}
}
}
}
} while (0);
i = f;
return ((e | 0) != 0 ? b : 0) | 0
}
function Xa(b, c, d) {
b = b | 0;
c = c | 0;
d = d | 0;
var e = 0,
f = 0,
g = 0;
e = i;
a: do {
if ((d | 0) == 0) {
d = 0
} else {
while (1) {
f = a[b >> 0] | 0;
g = a[c >> 0] | 0;
if (!(f << 24 >> 24 == g << 24 >> 24)) {
break
}
d = d + -1 | 0;
if ((d | 0) == 0) {
d = 0;
break a
} else {
b = b + 1 | 0;
c = c + 1 | 0
}
}
d = (f & 255) - (g & 255) | 0
}
} while (0);
i = e;
return d | 0
}
function Ya() {}
function Za(a, b, c, d) {
a = a | 0;
b = b | 0;
c = c | 0;
d = d | 0;
c = a + c >>> 0;
return (D = b + d + (c >>> 0 < a >>> 0 | 0) >>> 0, c | 0) | 0
}
function _a(b, d, e) {
b = b | 0;
d = d | 0;
e = e | 0;
var f = 0;
if ((e | 0) >= 4096) return na(b | 0, d | 0, e | 0) | 0;
f = b | 0;
if ((b & 3) == (d & 3)) {
while (b & 3) {
if ((e | 0) == 0) return f | 0;
a[b >> 0] = a[d >> 0] | 0;
b = b + 1 | 0;
d = d + 1 | 0;
e = e - 1 | 0
}
while ((e | 0) >= 4) {
c[b >> 2] = c[d >> 2];
b = b + 4 | 0;
d = d + 4 | 0;
e = e - 4 | 0
}
}
while ((e | 0) > 0) {
a[b >> 0] = a[d >> 0] | 0;
b = b + 1 | 0;
d = d + 1 | 0;
e = e - 1 | 0
}
return f | 0
}
function $a(b, c, d) {
b = b | 0;
c = c | 0;
d = d | 0;
var e = 0;
if ((c | 0) < (b | 0) & (b | 0) < (c + d | 0)) {
e = b;
c = c + d | 0;
b = b + d | 0;
while ((d | 0) > 0) {
b = b - 1 | 0;
c = c - 1 | 0;
d = d - 1 | 0;
a[b >> 0] = a[c >> 0] | 0
}
b = e
} else {
_a(b, c, d) | 0
}
return b | 0
}
function ab(b, d, e) {
b = b | 0;
d = d | 0;
e = e | 0;
var f = 0,
g = 0,
h = 0,
i = 0;
f = b + e | 0;
if ((e | 0) >= 20) {
d = d & 255;
i = b & 3;
h = d | d << 8 | d << 16 | d << 24;
g = f & ~3;
if (i) {
i = b + 4 - i | 0;
while ((b | 0) < (i | 0)) {
a[b >> 0] = d;
b = b + 1 | 0
}
}
while ((b | 0) < (g | 0)) {
c[b >> 2] = h;
b = b + 4 | 0
}
}
while ((b | 0) < (f | 0)) {
a[b >> 0] = d;
b = b + 1 | 0
}
return b - e | 0
}
function bb(a, b, c) {
a = a | 0;
b = b | 0;
c = c | 0;
if ((c | 0) < 32) {
D = b << c | (a & (1 << c) - 1 << 32 - c) >>> 32 - c;
return a << c
}
D = a << c - 32;
return 0
}
function cb(b) {
b = b | 0;
var c = 0;
c = b;
while (a[c >> 0] | 0) {
c = c + 1 | 0
}
return c - b | 0
}
function db(a, b, c, d) {
a = a | 0;
b = b | 0;
c = c | 0;
d = d | 0;
b = b - d - (c >>> 0 > a >>> 0 | 0) >>> 0;
return (D = b, a - c >>> 0 | 0) | 0
}
function eb(a, b, c) {
a = a | 0;
b = b | 0;
c = c | 0;
if ((c | 0) < 32) {
D = b >>> c;
return a >>> c | (b & (1 << c) - 1) << 32 - c
}
D = 0;
return b >>> c - 32 | 0
}
function fb(a, b, c) {
a = a | 0;
b = b | 0;
c = c | 0;
if ((c | 0) < 32) {
D = b >> c;
return a >>> c | (b & (1 << c) - 1) << 32 - c
}
D = (b | 0) < 0 ? -1 : 0;
return b >> c - 32 | 0
}
function gb(b) {
b = b | 0;
var c = 0;
c = a[n + (b >>> 24) >> 0] | 0;
if ((c | 0) < 8) return c | 0;
c = a[n + (b >> 16 & 255) >> 0] | 0;
if ((c | 0) < 8) return c + 8 | 0;
c = a[n + (b >> 8 & 255) >> 0] | 0;
if ((c | 0) < 8) return c + 16 | 0;
return (a[n + (b & 255) >> 0] | 0) + 24 | 0
}
function hb(b) {
b = b | 0;
var c = 0;
c = a[m + (b & 255) >> 0] | 0;
if ((c | 0) < 8) return c | 0;
c = a[m + (b >> 8 & 255) >> 0] | 0;
if ((c | 0) < 8) return c + 8 | 0;
c = a[m + (b >> 16 & 255) >> 0] | 0;
if ((c | 0) < 8) return c + 16 | 0;
return (a[m + (b >>> 24) >> 0] | 0) + 24 | 0
}
function ib(a, b) {
a = a | 0;
b = b | 0;
var c = 0,
d = 0,
e = 0,
f = 0;
f = a & 65535;
d = b & 65535;
c = $(d, f) | 0;
e = a >>> 16;
d = (c >>> 16) + ($(d, e) | 0) | 0;
b = b >>> 16;
a = $(b, f) | 0;
return (D = (d >>> 16) + ($(b, e) | 0) + (((d & 65535) + a | 0) >>> 16) | 0, d + a << 16 | c & 65535 | 0) | 0
}
function jb(a, b, c, d) {
a = a | 0;
b = b | 0;
c = c | 0;
d = d | 0;
var e = 0,
f = 0,
g = 0,
h = 0,
i = 0,
j = 0;
j = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
i = ((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
f = d >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;
e = ((d | 0) < 0 ? -1 : 0) >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;
h = db(j ^ a, i ^ b, j, i) | 0;
g = D;
b = f ^ j;
a = e ^ i;
a = db((ob(h, g, db(f ^ c, e ^ d, f, e) | 0, D, 0) | 0) ^ b, D ^ a, b, a) | 0;
return a | 0
}
function kb(a, b, d, e) {
a = a | 0;
b = b | 0;
d = d | 0;
e = e | 0;
var f = 0,
g = 0,
h = 0,
j = 0,
k = 0,
l = 0;
f = i;
i = i + 8 | 0;
j = f | 0;
h = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
g = ((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
l = e >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;
k = ((e | 0) < 0 ? -1 : 0) >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;
b = db(h ^ a, g ^ b, h, g) | 0;
a = D;
ob(b, a, db(l ^ d, k ^ e, l, k) | 0, D, j) | 0;
a = db(c[j >> 2] ^ h, c[j + 4 >> 2] ^ g, h, g) | 0;
b = D;
i = f;
return (D = b, a) | 0
}
function lb(a, b, c, d) {
a = a | 0;
b = b | 0;
c = c | 0;
d = d | 0;
var e = 0,
f = 0;
e = a;
f = c;
a = ib(e, f) | 0;
c = D;
return (D = ($(b, f) | 0) + ($(d, e) | 0) + c | c & 0, a | 0 | 0) | 0
}
function mb(a, b, c, d) {
a = a | 0;
b = b | 0;
c = c | 0;
d = d | 0;
a = ob(a, b, c, d, 0) | 0;
return a | 0
}
function nb(a, b, d, e) {
a = a | 0;
b = b | 0;
d = d | 0;
e = e | 0;
var f = 0,
g = 0;
g = i;
i = i + 8 | 0;
f = g | 0;
ob(a, b, d, e, f) | 0;
i = g;
return (D = c[f + 4 >> 2] | 0, c[f >> 2] | 0) | 0
}
function ob(a, b, d, e, f) {
a = a | 0;
b = b | 0;
d = d | 0;
e = e | 0;
f = f | 0;
var g = 0,
h = 0,
i = 0,
j = 0,
k = 0,
l = 0,
m = 0,
n = 0,
o = 0,
p = 0;
h = a;
j = b;
i = j;
l = d;
g = e;
k = g;
if ((i | 0) == 0) {
g = (f | 0) != 0;
if ((k | 0) == 0) {
if (g) {
c[f >> 2] = (h >>> 0) % (l >>> 0);
c[f + 4 >> 2] = 0
}
k = 0;
m = (h >>> 0) / (l >>> 0) >>> 0;
return (D = k, m) | 0
} else {
if (!g) {
l = 0;
m = 0;
return (D = l, m) | 0
}
c[f >> 2] = a | 0;
c[f + 4 >> 2] = b & 0;
l = 0;
m = 0;
return (D = l, m) | 0
}
}
m = (k | 0) == 0;
do {
if ((l | 0) != 0) {
if (!m) {
k = (gb(k | 0) | 0) - (gb(i | 0) | 0) | 0;
if (k >>> 0 <= 31) {
m = k + 1 | 0;
l = 31 - k | 0;
a = k - 31 >> 31;
j = m;
b = h >>> (m >>> 0) & a | i << l;
a = i >>> (m >>> 0) & a;
k = 0;
l = h << l;
break
}
if ((f | 0) == 0) {
l = 0;
m = 0;
return (D = l, m) | 0
}
c[f >> 2] = a | 0;
c[f + 4 >> 2] = j | b & 0;
l = 0;
m = 0;
return (D = l, m) | 0
}
k = l - 1 | 0;
if ((k & l | 0) != 0) {
l = (gb(l | 0) | 0) + 33 - (gb(i | 0) | 0) | 0;
p = 64 - l | 0;
m = 32 - l | 0;
n = m >> 31;
o = l - 32 | 0;
a = o >> 31;
j = l;
b = m - 1 >> 31 & i >>> (o >>> 0) | (i << m | h >>> (l >>> 0)) & a;
a = a & i >>> (l >>> 0);
k = h << p & n;
l = (i << p | h >>> (o >>> 0)) & n | h << m & l - 33 >> 31;
break
}
if ((f | 0) != 0) {
c[f >> 2] = k & h;
c[f + 4 >> 2] = 0
}
if ((l | 0) == 1) {
o = j | b & 0;
p = a | 0 | 0;
return (D = o, p) | 0
} else {
p = hb(l | 0) | 0;
o = i >>> (p >>> 0) | 0;
p = i << 32 - p | h >>> (p >>> 0) | 0;
return (D = o, p) | 0
}
} else {
if (m) {
if ((f | 0) != 0) {
c[f >> 2] = (i >>> 0) % (l >>> 0);
c[f + 4 >> 2] = 0
}
o = 0;
p = (i >>> 0) / (l >>> 0) >>> 0;
return (D = o, p) | 0
}
if ((h | 0) == 0) {
if ((f | 0) != 0) {
c[f >> 2] = 0;
c[f + 4 >> 2] = (i >>> 0) % (k >>> 0)
}
o = 0;
p = (i >>> 0) / (k >>> 0) >>> 0;
return (D = o, p) | 0
}
l = k - 1 | 0;
if ((l & k | 0) == 0) {
if ((f | 0) != 0) {
c[f >> 2] = a | 0;
c[f + 4 >> 2] = l & i | b & 0
}
o = 0;
p = i >>> ((hb(k | 0) | 0) >>> 0);
return (D = o, p) | 0
}
k = (gb(k | 0) | 0) - (gb(i | 0) | 0) | 0;
if (k >>> 0 <= 30) {
a = k + 1 | 0;
l = 31 - k | 0;
j = a;
b = i << l | h >>> (a >>> 0);
a = i >>> (a >>> 0);
k = 0;
l = h << l;
break
}
if ((f | 0) == 0) {
o = 0;
p = 0;
return (D = o, p) | 0
}
c[f >> 2] = a | 0;
c[f + 4 >> 2] = j | b & 0;
o = 0;
p = 0;
return (D = o, p) | 0
}
} while (0);
if ((j | 0) == 0) {
g = l;
e = 0;
i = 0
} else {
h = d | 0 | 0;
g = g | e & 0;
e = Za(h, g, -1, -1) | 0;
d = D;
i = 0;
do {
m = l;
l = k >>> 31 | l << 1;
k = i | k << 1;
m = b << 1 | m >>> 31 | 0;
n = b >>> 31 | a << 1 | 0;
db(e, d, m, n) | 0;
p = D;
o = p >> 31 | ((p | 0) < 0 ? -1 : 0) << 1;
i = o & 1;
b = db(m, n, o & h, (((p | 0) < 0 ? -1 : 0) >> 31 | ((p | 0) < 0 ? -1 : 0) << 1) & g) | 0;
a = D;
j = j - 1 | 0
} while ((j | 0) != 0);
g = l;
e = 0
}
h = 0;
if ((f | 0) != 0) {
c[f >> 2] = b;
c[f + 4 >> 2] = a
}
o = (k | 0) >>> 31 | (g | h) << 1 | (h << 1 | k >>> 31) & 0 | e;
p = (k << 1 | 0 >>> 31) & -2 | i;
return (D = o, p) | 0
}
function pb(a, b, c) {
a = a | 0;
b = b | 0;
c = c | 0;
ra[a & 127](b | 0, c | 0)
}
function qb(a, b) {
a = a | 0;
b = b | 0;
fa(0, a | 0, b | 0)
}
function rb(a, b) {
a = a | 0;
b = b | 0;
fa(1, a | 0, b | 0)
}
function sb(a, b) {
a = a | 0;
b = b | 0;
fa(2, a | 0, b | 0)
}
function tb(a, b) {
a = a | 0;
b = b | 0;
fa(3, a | 0, b | 0)
}
function ub(a, b) {
a = a | 0;
b = b | 0;
fa(4, a | 0, b | 0)
}
function vb(a, b) {
a = a | 0;
b = b | 0;
fa(5, a | 0, b | 0)
}
function wb(a, b) {
a = a | 0;
b = b | 0;
fa(6, a | 0, b | 0)
}
function xb(a, b) {
a = a | 0;
b = b | 0;
fa(7, a | 0, b | 0)
}
function yb(a, b) {
a = a | 0;
b = b | 0;
fa(8, a | 0, b | 0)
}
function zb(a, b) {
a = a | 0;
b = b | 0;
fa(9, a | 0, b | 0)
}
function Ab(a, b) {
a = a | 0;
b = b | 0;
fa(10, a | 0, b | 0)
}
function Bb(a, b) {
a = a | 0;
b = b | 0;
fa(11, a | 0, b | 0)
}
function Cb(a, b) {
a = a | 0;
b = b | 0;
fa(12, a | 0, b | 0)
}
function Db(a, b) {
a = a | 0;
b = b | 0;
fa(13, a | 0, b | 0)
}
function Eb(a, b) {
a = a | 0;
b = b | 0;
fa(14, a | 0, b | 0)
}
function Fb(a, b) {
a = a | 0;
b = b | 0;
fa(15, a | 0, b | 0)
}
function Gb(a, b) {
a = a | 0;
b = b | 0;
fa(16, a | 0, b | 0)
}
function Hb(a, b) {
a = a | 0;
b = b | 0;
fa(17, a | 0, b | 0)
}
function Ib(a, b) {
a = a | 0;
b = b | 0;
fa(18, a | 0, b | 0)
}
function Jb(a, b) {
a = a | 0;
b = b | 0;
fa(19, a | 0, b | 0)
}
function Kb(a, b) {
a = a | 0;
b = b | 0;
fa(20, a | 0, b | 0)
}
function Lb(a, b) {
a = a | 0;
b = b | 0;
fa(21, a | 0, b | 0)
}
function Mb(a, b) {
a = a | 0;
b = b | 0;
fa(22, a | 0, b | 0)
}
function Nb(a, b) {
a = a | 0;
b = b | 0;
fa(23, a | 0, b | 0)
}
function Ob(a, b) {
a = a | 0;
b = b | 0;
fa(24, a | 0, b | 0)
}
function Pb(a, b) {
a = a | 0;
b = b | 0;
fa(25, a | 0, b | 0)
}
function Qb(a, b) {
a = a | 0;
b = b | 0;
fa(26, a | 0, b | 0)
}
function Rb(a, b) {
a = a | 0;
b = b | 0;
fa(27, a | 0, b | 0)
}
function Sb(a, b) {
a = a | 0;
b = b | 0;
fa(28, a | 0, b | 0)
}
function Tb(a, b) {
a = a | 0;
b = b | 0;
fa(29, a | 0, b | 0)
}
function Ub(a, b) {
a = a | 0;
b = b | 0;
fa(30, a | 0, b | 0)
}
function Vb(a, b) {
a = a | 0;
b = b | 0;
fa(31, a | 0, b | 0)
}
function Wb(a, b) {
a = a | 0;
b = b | 0;
fa(32, a | 0, b | 0)
}
function Xb(a, b) {
a = a | 0;
b = b | 0;
fa(33, a | 0, b | 0)
}
function Yb(a, b) {
a = a | 0;
b = b | 0;
fa(34, a | 0, b | 0)
}
function Zb(a, b) {
a = a | 0;
b = b | 0;
fa(35, a | 0, b | 0)
}
function _b(a, b) {
a = a | 0;
b = b | 0;
fa(36, a | 0, b | 0)
}
function $b(a, b) {
a = a | 0;
b = b | 0;
fa(37, a | 0, b | 0)
}
function ac(a, b) {
a = a | 0;
b = b | 0;
fa(38, a | 0, b | 0)
}
function bc(a, b) {
a = a | 0;
b = b | 0;
fa(39, a | 0, b | 0)
}
function cc(a, b) {
a = a | 0;
b = b | 0;
fa(40, a | 0, b | 0)
}
function dc(a, b) {
a = a | 0;
b = b | 0;
fa(41, a | 0, b | 0)
}
function ec(a, b) {
a = a | 0;
b = b | 0;
fa(42, a | 0, b | 0)
}
function fc(a, b) {
a = a | 0;
b = b | 0;
fa(43, a | 0, b | 0)
}
function gc(a, b) {
a = a | 0;
b = b | 0;
fa(44, a | 0, b | 0)
}
function hc(a, b) {
a = a | 0;
b = b | 0;
fa(45, a | 0, b | 0)
}
function ic(a, b) {
a = a | 0;
b = b | 0;
fa(46, a | 0, b | 0)
}
function jc(a, b) {
a = a | 0;
b = b | 0;
fa(47, a | 0, b | 0)
}
function kc(a, b) {
a = a | 0;
b = b | 0;
fa(48, a | 0, b | 0)
}
function lc(a, b) {
a = a | 0;
b = b | 0;
fa(49, a | 0, b | 0)
}
function mc(a, b) {
a = a | 0;
b = b | 0;
aa(0)
}
// EMSCRIPTEN_END_FUNCS
var ra = [mc, mc, qb, mc, rb, mc, sb, mc, tb, mc, ub, mc, vb, mc, wb, mc, xb, mc, yb, mc, zb, mc, Ab, mc, Bb, mc, Cb, mc, Db, mc, Eb, mc, Fb, mc, Gb, mc, Hb, mc, Ib, mc, Jb, mc, Kb, mc, Lb, mc, Mb, mc, Nb, mc, Ob, mc, Pb, mc, Qb, mc, Rb, mc, Sb, mc, Tb, mc, Ub, mc, Vb, mc, Wb, mc, Xb, mc, Yb, mc, Zb, mc, _b, mc, $b, mc, ac, mc, bc, mc, cc, mc, dc, mc, ec, mc, fc, mc, gc, mc, hc, mc, ic, mc, jc, mc, kc, mc, lc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc];
return {
_strlen: cb,
_free: Ra,
_AVOggDestroy: Ca,
_AVOggInit: Aa,
_i64Add: Za,
_AVOggRead: Ba,
_realloc: Ta,
_memset: ab,
_malloc: Qa,
_memcpy: _a,
_memmove: $a,
_calloc: Sa,
_bitshift64Shl: bb,
runPostSets: Ya,
stackAlloc: sa,
stackSave: ta,
stackRestore: ua,
setThrew: va,
setTempRet0: ya,
getTempRet0: za,
dynCall_vii: pb
}
// EMSCRIPTEN_END_ASM
})({
"Math": Math,
"Int8Array": Int8Array,
"Int16Array": Int16Array,
"Int32Array": Int32Array,
"Uint8Array": Uint8Array,
"Uint16Array": Uint16Array,
"Uint32Array": Uint32Array,
"Float32Array": Float32Array,
"Float64Array": Float64Array
}, {
"abort": abort,
"assert": assert,
"asmPrintInt": asmPrintInt,
"asmPrintFloat": asmPrintFloat,
"min": Math_min,
"jsCall": jsCall,
"invoke_vii": invoke_vii,
"_fflush": _fflush,
"_sysconf": _sysconf,
"_abort": _abort,
"___setErrNo": ___setErrNo,
"_sbrk": _sbrk,
"_time": _time,
"_emscripten_memcpy_big": _emscripten_memcpy_big,
"___assert_fail": ___assert_fail,
"___errno_location": ___errno_location,
"STACKTOP": STACKTOP,
"STACK_MAX": STACK_MAX,
"tempDoublePtr": tempDoublePtr,
"ABORT": ABORT,
"cttz_i8": cttz_i8,
"ctlz_i8": ctlz_i8,
"NaN": NaN,
"Infinity": Infinity
}, buffer);
var _strlen = Module["_strlen"] = asm["_strlen"];
var _free = Module["_free"] = asm["_free"];
var _AVOggDestroy = Module["_AVOggDestroy"] = asm["_AVOggDestroy"];
var _AVOggInit = Module["_AVOggInit"] = asm["_AVOggInit"];
var _i64Add = Module["_i64Add"] = asm["_i64Add"];
var _AVOggRead = Module["_AVOggRead"] = asm["_AVOggRead"];
var _realloc = Module["_realloc"] = asm["_realloc"];
var _memset = Module["_memset"] = asm["_memset"];
var _malloc = Module["_malloc"] = asm["_malloc"];
var _memcpy = Module["_memcpy"] = asm["_memcpy"];
var _memmove = Module["_memmove"] = asm["_memmove"];
var _calloc = Module["_calloc"] = asm["_calloc"];
var _bitshift64Shl = Module["_bitshift64Shl"] = asm["_bitshift64Shl"];
var runPostSets = Module["runPostSets"] = asm["runPostSets"];
var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
Runtime.stackAlloc = asm["stackAlloc"];
Runtime.stackSave = asm["stackSave"];
Runtime.stackRestore = asm["stackRestore"];
Runtime.setTempRet0 = asm["setTempRet0"];
Runtime.getTempRet0 = asm["getTempRet0"];
var i64Math = (function() {
var goog = {
math: {}
};
goog.math.Long = (function(low, high) {
this.low_ = low | 0;
this.high_ = high | 0
});
goog.math.Long.IntCache_ = {};
goog.math.Long.fromInt = (function(value) {
if (-128 <= value && value < 128) {
var cachedObj = goog.math.Long.IntCache_[value];
if (cachedObj) {
return cachedObj
}
}
var obj = new goog.math.Long(value | 0, value < 0 ? -1 : 0);
if (-128 <= value && value < 128) {
goog.math.Long.IntCache_[value] = obj
}
return obj
});
goog.math.Long.fromNumber = (function(value) {
if (isNaN(value) || !isFinite(value)) {
return goog.math.Long.ZERO
} else if (value <= -goog.math.Long.TWO_PWR_63_DBL_) {
return goog.math.Long.MIN_VALUE
} else if (value + 1 >= goog.math.Long.TWO_PWR_63_DBL_) {
return goog.math.Long.MAX_VALUE
} else if (value < 0) {
return goog.math.Long.fromNumber(-value).negate()
} else {
return new goog.math.Long(value % goog.math.Long.TWO_PWR_32_DBL_ | 0, value / goog.math.Long.TWO_PWR_32_DBL_ | 0)
}
});
goog.math.Long.fromBits = (function(lowBits, highBits) {
return new goog.math.Long(lowBits, highBits)
});
goog.math.Long.fromString = (function(str, opt_radix) {
if (str.length == 0) {
throw Error("number format error: empty string")
}
var radix = opt_radix || 10;
if (radix < 2 || 36 < radix) {
throw Error("radix out of range: " + radix)
}
if (str.charAt(0) == "-") {
return goog.math.Long.fromString(str.substring(1), radix).negate()
} else if (str.indexOf("-") >= 0) {
throw Error('number format error: interior "-" character: ' + str)
}
var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 8));
var result = goog.math.Long.ZERO;
for (var i = 0; i < str.length; i += 8) {
var size = Math.min(8, str.length - i);
var value = parseInt(str.substring(i, i + size), radix);
if (size < 8) {
var power = goog.math.Long.fromNumber(Math.pow(radix, size));
result = result.multiply(power).add(goog.math.Long.fromNumber(value))
} else {
result = result.multiply(radixToPower);
result = result.add(goog.math.Long.fromNumber(value))
}
}
return result
});
goog.math.Long.TWO_PWR_16_DBL_ = 1 << 16;
goog.math.Long.TWO_PWR_24_DBL_ = 1 << 24;
goog.math.Long.TWO_PWR_32_DBL_ = goog.math.Long.TWO_PWR_16_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
goog.math.Long.TWO_PWR_31_DBL_ = goog.math.Long.TWO_PWR_32_DBL_ / 2;
goog.math.Long.TWO_PWR_48_DBL_ = goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
goog.math.Long.TWO_PWR_64_DBL_ = goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_32_DBL_;
goog.math.Long.TWO_PWR_63_DBL_ = goog.math.Long.TWO_PWR_64_DBL_ / 2;
goog.math.Long.ZERO = goog.math.Long.fromInt(0);
goog.math.Long.ONE = goog.math.Long.fromInt(1);
goog.math.Long.NEG_ONE = goog.math.Long.fromInt(-1);
goog.math.Long.MAX_VALUE = goog.math.Long.fromBits(4294967295 | 0, 2147483647 | 0);
goog.math.Long.MIN_VALUE = goog.math.Long.fromBits(0, 2147483648 | 0);
goog.math.Long.TWO_PWR_24_ = goog.math.Long.fromInt(1 << 24);
goog.math.Long.prototype.toInt = (function() {
return this.low_
});
goog.math.Long.prototype.toNumber = (function() {
return this.high_ * goog.math.Long.TWO_PWR_32_DBL_ + this.getLowBitsUnsigned()
});
goog.math.Long.prototype.toString = (function(opt_radix) {
var radix = opt_radix || 10;
if (radix < 2 || 36 < radix) {
throw Error("radix out of range: " + radix)
}
if (this.isZero()) {
return "0"
}
if (this.isNegative()) {
if (this.equals(goog.math.Long.MIN_VALUE)) {
var radixLong = goog.math.Long.fromNumber(radix);
var div = this.div(radixLong);
var rem = div.multiply(radixLong).subtract(this);
return div.toString(radix) + rem.toInt().toString(radix)
} else {
return "-" + this.negate().toString(radix)
}
}
var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 6));
var rem = this;
var result = "";
while (true) {
var remDiv = rem.div(radixToPower);
var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt();
var digits = intval.toString(radix);
rem = remDiv;
if (rem.isZero()) {
return digits + result
} else {
while (digits.length < 6) {
digits = "0" + digits
}
result = "" + digits + result
}
}
});
goog.math.Long.prototype.getHighBits = (function() {
return this.high_
});
goog.math.Long.prototype.getLowBits = (function() {
return this.low_
});
goog.math.Long.prototype.getLowBitsUnsigned = (function() {
return this.low_ >= 0 ? this.low_ : goog.math.Long.TWO_PWR_32_DBL_ + this.low_
});
goog.math.Long.prototype.getNumBitsAbs = (function() {
if (this.isNegative()) {
if (this.equals(goog.math.Long.MIN_VALUE)) {
return 64
} else {
return this.negate().getNumBitsAbs()
}
} else {
var val = this.high_ != 0 ? this.high_ : this.low_;
for (var bit = 31; bit > 0; bit--) {
if ((val & 1 << bit) != 0) {
break
}
}
return this.high_ != 0 ? bit + 33 : bit + 1
}
});
goog.math.Long.prototype.isZero = (function() {
return this.high_ == 0 && this.low_ == 0
});
goog.math.Long.prototype.isNegative = (function() {
return this.high_ < 0
});
goog.math.Long.prototype.isOdd = (function() {
return (this.low_ & 1) == 1
});
goog.math.Long.prototype.equals = (function(other) {
return this.high_ == other.high_ && this.low_ == other.low_
});
goog.math.Long.prototype.notEquals = (function(other) {
return this.high_ != other.high_ || this.low_ != other.low_
});
goog.math.Long.prototype.lessThan = (function(other) {
return this.compare(other) < 0
});
goog.math.Long.prototype.lessThanOrEqual = (function(other) {
return this.compare(other) <= 0
});
goog.math.Long.prototype.greaterThan = (function(other) {
return this.compare(other) > 0
});
goog.math.Long.prototype.greaterThanOrEqual = (function(other) {
return this.compare(other) >= 0
});
goog.math.Long.prototype.compare = (function(other) {
if (this.equals(other)) {
return 0
}
var thisNeg = this.isNegative();
var otherNeg = other.isNegative();
if (thisNeg && !otherNeg) {
return -1
}
if (!thisNeg && otherNeg) {
return 1
}
if (this.subtract(other).isNegative()) {
return -1
} else {
return 1
}
});
goog.math.Long.prototype.negate = (function() {
if (this.equals(goog.math.Long.MIN_VALUE)) {
return goog.math.Long.MIN_VALUE
} else {
return this.not().add(goog.math.Long.ONE)
}
});
goog.math.Long.prototype.add = (function(other) {
var a48 = this.high_ >>> 16;
var a32 = this.high_ & 65535;
var a16 = this.low_ >>> 16;
var a00 = this.low_ & 65535;
var b48 = other.high_ >>> 16;
var b32 = other.high_ & 65535;
var b16 = other.low_ >>> 16;
var b00 = other.low_ & 65535;
var c48 = 0,
c32 = 0,
c16 = 0,
c00 = 0;
c00 += a00 + b00;
c16 += c00 >>> 16;
c00 &= 65535;
c16 += a16 + b16;
c32 += c16 >>> 16;
c16 &= 65535;
c32 += a32 + b32;
c48 += c32 >>> 16;
c32 &= 65535;
c48 += a48 + b48;
c48 &= 65535;
return goog.math.Long.fromBits(c16 << 16 | c00, c48 << 16 | c32)
});
goog.math.Long.prototype.subtract = (function(other) {
return this.add(other.negate())
});
goog.math.Long.prototype.multiply = (function(other) {
if (this.isZero()) {
return goog.math.Long.ZERO
} else if (other.isZero()) {
return goog.math.Long.ZERO
}
if (this.equals(goog.math.Long.MIN_VALUE)) {
return other.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO
} else if (other.equals(goog.math.Long.MIN_VALUE)) {
return this.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO
}
if (this.isNegative()) {
if (other.isNegative()) {
return this.negate().multiply(other.negate())
} else {
return this.negate().multiply(other).negate()
}
} else if (other.isNegative()) {
return this.multiply(other.negate()).negate()
}
if (this.lessThan(goog.math.Long.TWO_PWR_24_) && other.lessThan(goog.math.Long.TWO_PWR_24_)) {
return goog.math.Long.fromNumber(this.toNumber() * other.toNumber())
}
var a48 = this.high_ >>> 16;
var a32 = this.high_ & 65535;
var a16 = this.low_ >>> 16;
var a00 = this.low_ & 65535;
var b48 = other.high_ >>> 16;
var b32 = other.high_ & 65535;
var b16 = other.low_ >>> 16;
var b00 = other.low_ & 65535;
var c48 = 0,
c32 = 0,
c16 = 0,
c00 = 0;
c00 += a00 * b00;
c16 += c00 >>> 16;
c00 &= 65535;
c16 += a16 * b00;
c32 += c16 >>> 16;
c16 &= 65535;
c16 += a00 * b16;
c32 += c16 >>> 16;
c16 &= 65535;
c32 += a32 * b00;
c48 += c32 >>> 16;
c32 &= 65535;
c32 += a16 * b16;
c48 += c32 >>> 16;
c32 &= 65535;
c32 += a00 * b32;
c48 += c32 >>> 16;
c32 &= 65535;
c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
c48 &= 65535;
return goog.math.Long.fromBits(c16 << 16 | c00, c48 << 16 | c32)
});
goog.math.Long.prototype.div = (function(other) {
if (other.isZero()) {
throw Error("division by zero")
} else if (this.isZero()) {
return goog.math.Long.ZERO
}
if (this.equals(goog.math.Long.MIN_VALUE)) {
if (other.equals(goog.math.Long.ONE) || other.equals(goog.math.Long.NEG_ONE)) {
return goog.math.Long.MIN_VALUE
} else if (other.equals(goog.math.Long.MIN_VALUE)) {
return goog.math.Long.ONE
} else {
var halfThis = this.shiftRight(1);
var approx = halfThis.div(other).shiftLeft(1);
if (approx.equals(goog.math.Long.ZERO)) {
return other.isNegative() ? goog.math.Long.ONE : goog.math.Long.NEG_ONE
} else {
var rem = this.subtract(other.multiply(approx));
var result = approx.add(rem.div(other));
return result
}
}
} else if (other.equals(goog.math.Long.MIN_VALUE)) {
return goog.math.Long.ZERO
}
if (this.isNegative()) {
if (other.isNegative()) {
return this.negate().div(other.negate())
} else {
return this.negate().div(other).negate()
}
} else if (other.isNegative()) {
return this.div(other.negate()).negate()
}
var res = goog.math.Long.ZERO;
var rem = this;
while (rem.greaterThanOrEqual(other)) {
var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber()));
var log2 = Math.ceil(Math.log(approx) / Math.LN2);
var delta = log2 <= 48 ? 1 : Math.pow(2, log2 - 48);
var approxRes = goog.math.Long.fromNumber(approx);
var approxRem = approxRes.multiply(other);
while (approxRem.isNegative() || approxRem.greaterThan(rem)) {
approx -= delta;
approxRes = goog.math.Long.fromNumber(approx);
approxRem = approxRes.multiply(other)
}
if (approxRes.isZero()) {
approxRes = goog.math.Long.ONE
}
res = res.add(approxRes);
rem = rem.subtract(approxRem)
}
return res
});
goog.math.Long.prototype.modulo = (function(other) {
return this.subtract(this.div(other).multiply(other))
});
goog.math.Long.prototype.not = (function() {
return goog.math.Long.fromBits(~this.low_, ~this.high_)
});
goog.math.Long.prototype.and = (function(other) {
return goog.math.Long.fromBits(this.low_ & other.low_, this.high_ & other.high_)
});
goog.math.Long.prototype.or = (function(other) {
return goog.math.Long.fromBits(this.low_ | other.low_, this.high_ | other.high_)
});
goog.math.Long.prototype.xor = (function(other) {
return goog.math.Long.fromBits(this.low_ ^ other.low_, this.high_ ^ other.high_)
});
goog.math.Long.prototype.shiftLeft = (function(numBits) {
numBits &= 63;
if (numBits == 0) {
return this
} else {
var low = this.low_;
if (numBits < 32) {
var high = this.high_;
return goog.math.Long.fromBits(low << numBits, high << numBits | low >>> 32 - numBits)
} else {
return goog.math.Long.fromBits(0, low << numBits - 32)
}
}
});
goog.math.Long.prototype.shiftRight = (function(numBits) {
numBits &= 63;
if (numBits == 0) {
return this
} else {
var high = this.high_;
if (numBits < 32) {
var low = this.low_;
return goog.math.Long.fromBits(low >>> numBits | high << 32 - numBits, high >> numBits)
} else {
return goog.math.Long.fromBits(high >> numBits - 32, high >= 0 ? 0 : -1)
}
}
});
goog.math.Long.prototype.shiftRightUnsigned = (function(numBits) {
numBits &= 63;
if (numBits == 0) {
return this
} else {
var high = this.high_;
if (numBits < 32) {
var low = this.low_;
return goog.math.Long.fromBits(low >>> numBits | high << 32 - numBits, high >>> numBits)
} else if (numBits == 32) {
return goog.math.Long.fromBits(high, 0)
} else {
return goog.math.Long.fromBits(high >>> numBits - 32, 0)
}
}
});
var navigator = {
appName: "Modern Browser"
};
var dbits;
var canary = 0xdeadbeefcafe;
var j_lm = (canary & 16777215) == 15715070;
function BigInteger(a, b, c) {
if (a != null)
if ("number" == typeof a) this.fromNumber(a, b, c);
else if (b == null && "string" != typeof a) this.fromString(a, 256);
else this.fromString(a, b)
}
function nbi() {
return new BigInteger(null)
}
function am1(i, x, w, j, c, n) {
while (--n >= 0) {
var v = x * this[i++] + w[j] + c;
c = Math.floor(v / 67108864);
w[j++] = v & 67108863
}
return c
}
function am2(i, x, w, j, c, n) {
var xl = x & 32767,
xh = x >> 15;
while (--n >= 0) {
var l = this[i] & 32767;
var h = this[i++] >> 15;
var m = xh * l + h * xl;
l = xl * l + ((m & 32767) << 15) + w[j] + (c & 1073741823);
c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);
w[j++] = l & 1073741823
}
return c
}
function am3(i, x, w, j, c, n) {
var xl = x & 16383,
xh = x >> 14;
while (--n >= 0) {
var l = this[i] & 16383;
var h = this[i++] >> 14;
var m = xh * l + h * xl;
l = xl * l + ((m & 16383) << 14) + w[j] + c;
c = (l >> 28) + (m >> 14) + xh * h;
w[j++] = l & 268435455
}
return c
}
if (j_lm && navigator.appName == "Microsoft Internet Explorer") {
BigInteger.prototype.am = am2;
dbits = 30
} else if (j_lm && navigator.appName != "Netscape") {
BigInteger.prototype.am = am1;
dbits = 26
} else {
BigInteger.prototype.am = am3;
dbits = 28
}
BigInteger.prototype.DB = dbits;
BigInteger.prototype.DM = (1 << dbits) - 1;
BigInteger.prototype.DV = 1 << dbits;
var BI_FP = 52;
BigInteger.prototype.FV = Math.pow(2, BI_FP);
BigInteger.prototype.F1 = BI_FP - dbits;
BigInteger.prototype.F2 = 2 * dbits - BI_FP;
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
var BI_RC = new Array;
var rr, vv;
rr = "0".charCodeAt(0);
for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
rr = "a".charCodeAt(0);
for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
rr = "A".charCodeAt(0);
for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
function int2char(n) {
return BI_RM.charAt(n)
}
function intAt(s, i) {
var c = BI_RC[s.charCodeAt(i)];
return c == null ? -1 : c
}
function bnpCopyTo(r) {
for (var i = this.t - 1; i >= 0; --i) r[i] = this[i];
r.t = this.t;
r.s = this.s
}
function bnpFromInt(x) {
this.t = 1;
this.s = x < 0 ? -1 : 0;
if (x > 0) this[0] = x;
else if (x < -1) this[0] = x + DV;
else this.t = 0
}
function nbv(i) {
var r = nbi();
r.fromInt(i);
return r
}
function bnpFromString(s, b) {
var k;
if (b == 16) k = 4;
else if (b == 8) k = 3;
else if (b == 256) k = 8;
else if (b == 2) k = 1;
else if (b == 32) k = 5;
else if (b == 4) k = 2;
else {
this.fromRadix(s, b);
return
}
this.t = 0;
this.s = 0;
var i = s.length,
mi = false,
sh = 0;
while (--i >= 0) {
var x = k == 8 ? s[i] & 255 : intAt(s, i);
if (x < 0) {
if (s.charAt(i) == "-") mi = true;
continue
}
mi = false;
if (sh == 0) this[this.t++] = x;
else if (sh + k > this.DB) {
this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh;
this[this.t++] = x >> this.DB - sh
} else this[this.t - 1] |= x << sh;
sh += k;
if (sh >= this.DB) sh -= this.DB
}
if (k == 8 && (s[0] & 128) != 0) {
this.s = -1;
if (sh > 0) this[this.t - 1] |= (1 << this.DB - sh) - 1 << sh
}
this.clamp();
if (mi) BigInteger.ZERO.subTo(this, this)
}
function bnpClamp() {
var c = this.s & this.DM;
while (this.t > 0 && this[this.t - 1] == c) --this.t
}
function bnToString(b) {
if (this.s < 0) return "-" + this.negate().toString(b);
var k;
if (b == 16) k = 4;
else if (b == 8) k = 3;
else if (b == 2) k = 1;
else if (b == 32) k = 5;
else if (b == 4) k = 2;
else return this.toRadix(b);
var km = (1 << k) - 1,
d, m = false,
r = "",
i = this.t;
var p = this.DB - i * this.DB % k;
if (i-- > 0) {
if (p < this.DB && (d = this[i] >> p) > 0) {
m = true;
r = int2char(d)
}
while (i >= 0) {
if (p < k) {
d = (this[i] & (1 << p) - 1) << k - p;
d |= this[--i] >> (p += this.DB - k)
} else {
d = this[i] >> (p -= k) & km;
if (p <= 0) {
p += this.DB;
--i
}
} if (d > 0) m = true;
if (m) r += int2char(d)
}
}
return m ? r : "0"
}
function bnNegate() {
var r = nbi();
BigInteger.ZERO.subTo(this, r);
return r
}
function bnAbs() {
return this.s < 0 ? this.negate() : this
}
function bnCompareTo(a) {
var r = this.s - a.s;
if (r != 0) return r;
var i = this.t;
r = i - a.t;
if (r != 0) return this.s < 0 ? -r : r;
while (--i >= 0)
if ((r = this[i] - a[i]) != 0) return r;
return 0
}
function nbits(x) {
var r = 1,
t;
if ((t = x >>> 16) != 0) {
x = t;
r += 16
}
if ((t = x >> 8) != 0) {
x = t;
r += 8
}
if ((t = x >> 4) != 0) {
x = t;
r += 4
}
if ((t = x >> 2) != 0) {
x = t;
r += 2
}
if ((t = x >> 1) != 0) {
x = t;
r += 1
}
return r
}
function bnBitLength() {
if (this.t <= 0) return 0;
return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM)
}
function bnpDLShiftTo(n, r) {
var i;
for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i];
for (i = n - 1; i >= 0; --i) r[i] = 0;
r.t = this.t + n;
r.s = this.s
}
function bnpDRShiftTo(n, r) {
for (var i = n; i < this.t; ++i) r[i - n] = this[i];
r.t = Math.max(this.t - n, 0);
r.s = this.s
}
function bnpLShiftTo(n, r) {
var bs = n % this.DB;
var cbs = this.DB - bs;
var bm = (1 << cbs) - 1;
var ds = Math.floor(n / this.DB),
c = this.s << bs & this.DM,
i;
for (i = this.t - 1; i >= 0; --i) {
r[i + ds + 1] = this[i] >> cbs | c;
c = (this[i] & bm) << bs
}
for (i = ds - 1; i >= 0; --i) r[i] = 0;
r[ds] = c;
r.t = this.t + ds + 1;
r.s = this.s;
r.clamp()
}
function bnpRShiftTo(n, r) {
r.s = this.s;
var ds = Math.floor(n / this.DB);
if (ds >= this.t) {
r.t = 0;
return
}
var bs = n % this.DB;
var cbs = this.DB - bs;
var bm = (1 << bs) - 1;
r[0] = this[ds] >> bs;
for (var i = ds + 1; i < this.t; ++i) {
r[i - ds - 1] |= (this[i] & bm) << cbs;
r[i - ds] = this[i] >> bs
}
if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;
r.t = this.t - ds;
r.clamp()
}
function bnpSubTo(a, r) {
var i = 0,
c = 0,
m = Math.min(a.t, this.t);
while (i < m) {
c += this[i] - a[i];
r[i++] = c & this.DM;
c >>= this.DB
}
if (a.t < this.t) {
c -= a.s;
while (i < this.t) {
c += this[i];
r[i++] = c & this.DM;
c >>= this.DB
}
c += this.s
} else {
c += this.s;
while (i < a.t) {
c -= a[i];
r[i++] = c & this.DM;
c >>= this.DB
}
c -= a.s
}
r.s = c < 0 ? -1 : 0;
if (c < -1) r[i++] = this.DV + c;
else if (c > 0) r[i++] = c;
r.t = i;
r.clamp()
}
function bnpMultiplyTo(a, r) {
var x = this.abs(),
y = a.abs();
var i = x.t;
r.t = i + y.t;
while (--i >= 0) r[i] = 0;
for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);
r.s = 0;
r.clamp();
if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
}
function bnpSquareTo(r) {
var x = this.abs();
var i = r.t = 2 * x.t;
while (--i >= 0) r[i] = 0;
for (i = 0; i < x.t - 1; ++i) {
var c = x.am(i, x[i], r, 2 * i, 0, 1);
if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
r[i + x.t] -= x.DV;
r[i + x.t + 1] = 1
}
}
if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);
r.s = 0;
r.clamp()
}
function bnpDivRemTo(m, q, r) {
var pm = m.abs();
if (pm.t <= 0) return;
var pt = this.abs();
if (pt.t < pm.t) {
if (q != null) q.fromInt(0);
if (r != null) this.copyTo(r);
return
}
if (r == null) r = nbi();
var y = nbi(),
ts = this.s,
ms = m.s;
var nsh = this.DB - nbits(pm[pm.t - 1]);
if (nsh > 0) {
pm.lShiftTo(nsh, y);
pt.lShiftTo(nsh, r)
} else {
pm.copyTo(y);
pt.copyTo(r)
}
var ys = y.t;
var y0 = y[ys - 1];
if (y0 == 0) return;
var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);
var d1 = this.FV / yt,
d2 = (1 << this.F1) / yt,
e = 1 << this.F2;
var i = r.t,
j = i - ys,
t = q == null ? nbi() : q;
y.dlShiftTo(j, t);
if (r.compareTo(t) >= 0) {
r[r.t++] = 1;
r.subTo(t, r)
}
BigInteger.ONE.dlShiftTo(ys, t);
t.subTo(y, y);
while (y.t < ys) y[y.t++] = 0;
while (--j >= 0) {
var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);
if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {
y.dlShiftTo(j, t);
r.subTo(t, r);
while (r[i] < --qd) r.subTo(t, r)
}
}
if (q != null) {
r.drShiftTo(ys, q);
if (ts != ms) BigInteger.ZERO.subTo(q, q)
}
r.t = ys;
r.clamp();
if (nsh > 0) r.rShiftTo(nsh, r);
if (ts < 0) BigInteger.ZERO.subTo(r, r)
}
function bnMod(a) {
var r = nbi();
this.abs().divRemTo(a, null, r);
if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);
return r
}
function Classic(m) {
this.m = m
}
function cConvert(x) {
if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
else return x
}
function cRevert(x) {
return x
}
function cReduce(x) {
x.divRemTo(this.m, null, x)
}
function cMulTo(x, y, r) {
x.multiplyTo(y, r);
this.reduce(r)
}
function cSqrTo(x, r) {
x.squareTo(r);
this.reduce(r)
}
Classic.prototype.convert = cConvert;
Classic.prototype.revert = cRevert;
Classic.prototype.reduce = cReduce;
Classic.prototype.mulTo = cMulTo;
Classic.prototype.sqrTo = cSqrTo;
function bnpInvDigit() {
if (this.t < 1) return 0;
var x = this[0];
if ((x & 1) == 0) return 0;
var y = x & 3;
y = y * (2 - (x & 15) * y) & 15;
y = y * (2 - (x & 255) * y) & 255;
y = y * (2 - ((x & 65535) * y & 65535)) & 65535;
y = y * (2 - x * y % this.DV) % this.DV;
return y > 0 ? this.DV - y : -y
}
function Montgomery(m) {
this.m = m;
this.mp = m.invDigit();
this.mpl = this.mp & 32767;
this.mph = this.mp >> 15;
this.um = (1 << m.DB - 15) - 1;
this.mt2 = 2 * m.t
}
function montConvert(x) {
var r = nbi();
x.abs().dlShiftTo(this.m.t, r);
r.divRemTo(this.m, null, r);
if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);
return r
}
function montRevert(x) {
var r = nbi();
x.copyTo(r);
this.reduce(r);
return r
}
function montReduce(x) {
while (x.t <= this.mt2) x[x.t++] = 0;
for (var i = 0; i < this.m.t; ++i) {
var j = x[i] & 32767;
var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM;
j = i + this.m.t;
x[j] += this.m.am(0, u0, x, i, 0, this.m.t);
while (x[j] >= x.DV) {
x[j] -= x.DV;
x[++j] ++
}
}
x.clamp();
x.drShiftTo(this.m.t, x);
if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
}
function montSqrTo(x, r) {
x.squareTo(r);
this.reduce(r)
}
function montMulTo(x, y, r) {
x.multiplyTo(y, r);
this.reduce(r)
}
Montgomery.prototype.convert = montConvert;
Montgomery.prototype.revert = montRevert;
Montgomery.prototype.reduce = montReduce;
Montgomery.prototype.mulTo = montMulTo;
Montgomery.prototype.sqrTo = montSqrTo;
function bnpIsEven() {
return (this.t > 0 ? this[0] & 1 : this.s) == 0
}
function bnpExp(e, z) {
if (e > 4294967295 || e < 1) return BigInteger.ONE;
var r = nbi(),
r2 = nbi(),
g = z.convert(this),
i = nbits(e) - 1;
g.copyTo(r);
while (--i >= 0) {
z.sqrTo(r, r2);
if ((e & 1 << i) > 0) z.mulTo(r2, g, r);
else {
var t = r;
r = r2;
r2 = t
}
}
return z.revert(r)
}
function bnModPowInt(e, m) {
var z;
if (e < 256 || m.isEven()) z = new Classic(m);
else z = new Montgomery(m);
return this.exp(e, z)
}
BigInteger.prototype.copyTo = bnpCopyTo;
BigInteger.prototype.fromInt = bnpFromInt;
BigInteger.prototype.fromString = bnpFromString;
BigInteger.prototype.clamp = bnpClamp;
BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
BigInteger.prototype.drShiftTo = bnpDRShiftTo;
BigInteger.prototype.lShiftTo = bnpLShiftTo;
BigInteger.prototype.rShiftTo = bnpRShiftTo;
BigInteger.prototype.subTo = bnpSubTo;
BigInteger.prototype.multiplyTo = bnpMultiplyTo;
BigInteger.prototype.squareTo = bnpSquareTo;
BigInteger.prototype.divRemTo = bnpDivRemTo;
BigInteger.prototype.invDigit = bnpInvDigit;
BigInteger.prototype.isEven = bnpIsEven;
BigInteger.prototype.exp = bnpExp;
BigInteger.prototype.toString = bnToString;
BigInteger.prototype.negate = bnNegate;
BigInteger.prototype.abs = bnAbs;
BigInteger.prototype.compareTo = bnCompareTo;
BigInteger.prototype.bitLength = bnBitLength;
BigInteger.prototype.mod = bnMod;
BigInteger.prototype.modPowInt = bnModPowInt;
BigInteger.ZERO = nbv(0);
BigInteger.ONE = nbv(1);
function bnpFromRadix(s, b) {
this.fromInt(0);
if (b == null) b = 10;
var cs = this.chunkSize(b);
var d = Math.pow(b, cs),
mi = false,
j = 0,
w = 0;
for (var i = 0; i < s.length; ++i) {
var x = intAt(s, i);
if (x < 0) {
if (s.charAt(i) == "-" && this.signum() == 0) mi = true;
continue
}
w = b * w + x;
if (++j >= cs) {
this.dMultiply(d);
this.dAddOffset(w, 0);
j = 0;
w = 0
}
}
if (j > 0) {
this.dMultiply(Math.pow(b, j));
this.dAddOffset(w, 0)
}
if (mi) BigInteger.ZERO.subTo(this, this)
}
function bnpChunkSize(r) {
return Math.floor(Math.LN2 * this.DB / Math.log(r))
}
function bnSigNum() {
if (this.s < 0) return -1;
else if (this.t <= 0 || this.t == 1 && this[0] <= 0) return 0;
else return 1
}
function bnpDMultiply(n) {
this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);
++this.t;
this.clamp()
}
function bnpDAddOffset(n, w) {
if (n == 0) return;
while (this.t <= w) this[this.t++] = 0;
this[w] += n;
while (this[w] >= this.DV) {
this[w] -= this.DV;
if (++w >= this.t) this[this.t++] = 0;
++this[w]
}
}
function bnpToRadix(b) {
if (b == null) b = 10;
if (this.signum() == 0 || b < 2 || b > 36) return "0";
var cs = this.chunkSize(b);
var a = Math.pow(b, cs);
var d = nbv(a),
y = nbi(),
z = nbi(),
r = "";
this.divRemTo(d, y, z);
while (y.signum() > 0) {
r = (a + z.intValue()).toString(b).substr(1) + r;
y.divRemTo(d, y, z)
}
return z.intValue().toString(b) + r
}
function bnIntValue() {
if (this.s < 0) {
if (this.t == 1) return this[0] - this.DV;
else if (this.t == 0) return -1
} else if (this.t == 1) return this[0];
else if (this.t == 0) return 0;
return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
}
function bnpAddTo(a, r) {
var i = 0,
c = 0,
m = Math.min(a.t, this.t);
while (i < m) {
c += this[i] + a[i];
r[i++] = c & this.DM;
c >>= this.DB
}
if (a.t < this.t) {
c += a.s;
while (i < this.t) {
c += this[i];
r[i++] = c & this.DM;
c >>= this.DB
}
c += this.s
} else {
c += this.s;
while (i < a.t) {
c += a[i];
r[i++] = c & this.DM;
c >>= this.DB
}
c += a.s
}
r.s = c < 0 ? -1 : 0;
if (c > 0) r[i++] = c;
else if (c < -1) r[i++] = this.DV + c;
r.t = i;
r.clamp()
}
BigInteger.prototype.fromRadix = bnpFromRadix;
BigInteger.prototype.chunkSize = bnpChunkSize;
BigInteger.prototype.signum = bnSigNum;
BigInteger.prototype.dMultiply = bnpDMultiply;
BigInteger.prototype.dAddOffset = bnpDAddOffset;
BigInteger.prototype.toRadix = bnpToRadix;
BigInteger.prototype.intValue = bnIntValue;
BigInteger.prototype.addTo = bnpAddTo;
var Wrapper = {
abs: (function(l, h) {
var x = new goog.math.Long(l, h);
var ret;
if (x.isNegative()) {
ret = x.negate()
} else {
ret = x
}
HEAP32[tempDoublePtr >> 2] = ret.low_;
HEAP32[tempDoublePtr + 4 >> 2] = ret.high_
}),
ensureTemps: (function() {
if (Wrapper.ensuredTemps) return;
Wrapper.ensuredTemps = true;
Wrapper.two32 = new BigInteger;
Wrapper.two32.fromString("4294967296", 10);
Wrapper.two64 = new BigInteger;
Wrapper.two64.fromString("18446744073709551616", 10);
Wrapper.temp1 = new BigInteger;
Wrapper.temp2 = new BigInteger
}),
lh2bignum: (function(l, h) {
var a = new BigInteger;
a.fromString(h.toString(), 10);
var b = new BigInteger;
a.multiplyTo(Wrapper.two32, b);
var c = new BigInteger;
c.fromString(l.toString(), 10);
var d = new BigInteger;
c.addTo(b, d);
return d
}),
stringify: (function(l, h, unsigned) {
var ret = (new goog.math.Long(l, h)).toString();
if (unsigned && ret[0] == "-") {
Wrapper.ensureTemps();
var bignum = new BigInteger;
bignum.fromString(ret, 10);
ret = new BigInteger;
Wrapper.two64.addTo(bignum, ret);
ret = ret.toString(10)
}
return ret
}),
fromString: (function(str, base, min, max, unsigned) {
Wrapper.ensureTemps();
var bignum = new BigInteger;
bignum.fromString(str, base);
var bigmin = new BigInteger;
bigmin.fromString(min, 10);
var bigmax = new BigInteger;
bigmax.fromString(max, 10);
if (unsigned && bignum.compareTo(BigInteger.ZERO) < 0) {
var temp = new BigInteger;
bignum.addTo(Wrapper.two64, temp);
bignum = temp
}
var error = false;
if (bignum.compareTo(bigmin) < 0) {
bignum = bigmin;
error = true
} else if (bignum.compareTo(bigmax) > 0) {
bignum = bigmax;
error = true
}
var ret = goog.math.Long.fromString(bignum.toString());
HEAP32[tempDoublePtr >> 2] = ret.low_;
HEAP32[tempDoublePtr + 4 >> 2] = ret.high_;
if (error) throw "range error"
})
};
return Wrapper
})();
if (memoryInitializer) {
if (Module["memoryInitializerPrefixURL"]) {
memoryInitializer = Module["memoryInitializerPrefixURL"] + memoryInitializer
}
if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
var data = Module["readBinary"](memoryInitializer);
HEAPU8.set(data, STATIC_BASE)
} else {
addRunDependency("memory initializer");
Browser.asyncLoad(memoryInitializer, (function(data) {
HEAPU8.set(data, STATIC_BASE);
removeRunDependency("memory initializer")
}), (function(data) {
throw "could not load memory initializer " + memoryInitializer
}))
}
}
function ExitStatus(status) {
this.name = "ExitStatus";
this.message = "Program terminated with exit(" + status + ")";
this.status = status
}
ExitStatus.prototype = new Error;
ExitStatus.prototype.constructor = ExitStatus;
var initialStackTop;
var preloadStartTime = null;
var calledMain = false;
dependenciesFulfilled = function runCaller() {
if (!Module["calledRun"] && shouldRunNow) run();
if (!Module["calledRun"]) dependenciesFulfilled = runCaller
};
Module["callMain"] = Module.callMain = function callMain(args) {
assert(runDependencies == 0, "cannot call main when async dependencies remain! (listen on __ATMAIN__)");
assert(__ATPRERUN__.length == 0, "cannot call main when preRun functions remain to be called");
args = args || [];
ensureInitRuntime();
var argc = args.length + 1;
function pad() {
for (var i = 0; i < 4 - 1; i++) {
argv.push(0)
}
}
var argv = [allocate(intArrayFromString(Module["thisProgram"]), "i8", ALLOC_NORMAL)];
pad();
for (var i = 0; i < argc - 1; i = i + 1) {
argv.push(allocate(intArrayFromString(args[i]), "i8", ALLOC_NORMAL));
pad()
}
argv.push(0);
argv = allocate(argv, "i32", ALLOC_NORMAL);
initialStackTop = STACKTOP;
try {
var ret = Module["_main"](argc, argv, 0);
exit(ret)
} catch (e) {
if (e instanceof ExitStatus) {
return
} else if (e == "SimulateInfiniteLoop") {
Module["noExitRuntime"] = true;
return
} else {
if (e && typeof e === "object" && e.stack) Module.printErr("exception thrown: " + [e, e.stack]);
throw e
}
} finally {
calledMain = true
}
};
function run(args) {
args = args || Module["arguments"];
if (preloadStartTime === null) preloadStartTime = Date.now();
if (runDependencies > 0) {
Module.printErr("run() called, but dependencies remain, so not running");
return
}
preRun();
if (runDependencies > 0) return;
if (Module["calledRun"]) return;
function doRun() {
if (Module["calledRun"]) return;
Module["calledRun"] = true;
if (ABORT) return;
ensureInitRuntime();
preMain();
if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
Module.printErr("pre-main prep time: " + (Date.now() - preloadStartTime) + " ms")
}
if (Module["_main"] && shouldRunNow) {
Module["callMain"](args)
}
postRun()
}
if (Module["setStatus"]) {
Module["setStatus"]("Running...");
setTimeout((function() {
setTimeout((function() {
Module["setStatus"]("")
}), 1);
doRun()
}), 1)
} else {
doRun()
}
}
Module["run"] = Module.run = run;
function exit(status) {
if (Module["noExitRuntime"]) {
return
}
ABORT = true;
EXITSTATUS = status;
STACKTOP = initialStackTop;
exitRuntime();
if (ENVIRONMENT_IS_NODE) {
process["stdout"]["once"]("drain", (function() {
process["exit"](status)
}));
console.log(" ");
setTimeout((function() {
process["exit"](status)
}), 500)
} else if (ENVIRONMENT_IS_SHELL && typeof quit === "function") {
quit(status)
}
throw new ExitStatus(status)
}
Module["exit"] = Module.exit = exit;
function abort(text) {
if (text) {
Module.print(text);
Module.printErr(text)
}
ABORT = true;
EXITSTATUS = 1;
var extra = "\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";
throw "abort() at " + stackTrace() + extra
}
Module["abort"] = Module.abort = abort;
if (Module["preInit"]) {
if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]];
while (Module["preInit"].length > 0) {
Module["preInit"].pop()()
}
}
var shouldRunNow = true;
if (Module["noInitialRun"]) {
shouldRunNow = false
}
run()
module.exports = Module
}, {}
],
2: [
function(require, module, exports) {
(function(global) {
var AV = (typeof window !== "undefined" ? window.AV : typeof global !== "undefined" ? global.AV : null);
var Ogg = require('../build/libogg');
var OggDemuxer = AV.Demuxer.extend(function() {
AV.Demuxer.register(this);
this.probe = function(buffer) {
return buffer.peekString(0, 4) === 'OggS';
};
this.plugins = [];
var BUFFER_SIZE = 8192;
this.prototype.init = function() {
this.ogg = Ogg._AVOggInit();
this.buf = Ogg._malloc(BUFFER_SIZE);
var self = this;
var plugin = null;
var doneHeaders = false;
// copy the stream in case we override it, e.g. flac
this._stream = this.stream;
this.callback = Ogg.Runtime.addFunction(function(packet, bytes) {
var data = new Uint8Array(Ogg.HEAPU8.subarray(packet, packet + bytes));
// find plugin for codec
if (!plugin) {
for (var i = 0; i < OggDemuxer.plugins.length; i++) {
var cur = OggDemuxer.plugins[i];
var magic = data.subarray(0, cur.magic.length);
if (String.fromCharCode.apply(String, magic) === cur.magic) {
plugin = cur;
break;
}
}
if (!plugin)
throw new Error("Unknown format in Ogg file.");
if (plugin.init)
plugin.init.call(self);
}
// send packet to plugin
if (!doneHeaders)
doneHeaders = plugin.readHeaders.call(self, data);
else
plugin.readPacket.call(self, data);
});
};
this.prototype.readChunk = function() {
while (this._stream.available(BUFFER_SIZE)) {
Ogg.HEAPU8.set(this._stream.readBuffer(BUFFER_SIZE).data, this.buf);
Ogg._AVOggRead(this.ogg, this.buf, BUFFER_SIZE, this.callback);
}
};
this.prototype.destroy = function() {
this._super();
Ogg.Runtime.removeFunction(this.callback);
Ogg._AVOggDestroy(this.ogg);
Ogg._free(this.buf);
this.ogg = null;
this.buf = null;
this.callback = null;
};
});
module.exports = OggDemuxer;
AV.OggDemuxer = OggDemuxer; // for browser
}).call(this, typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
}, {
"../build/libogg": 1
}
]
}, {}, [2])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment