blob: d9c78124d9e783701679e7bc0efec11f0b9f3a91 [file] [log] [blame]
Ben Murdochda12d292016-06-02 14:46:10 +01001// Modified embenchen to direct to asm-wasm.
2// Flags: --expose-wasm
3
4var EXPECTED_OUTPUT =
5 /frame averages: .+ \+- .+, range: .+ to .+ \n/;
6var Module = {
7 arguments: [1],
8 print: function(x) {Module.printBuffer += x + '\n';},
9 preRun: [function() {Module.printBuffer = ''}],
10 postRun: [function() {
11 assertTrue(EXPECTED_OUTPUT.test(Module.printBuffer));
12 }],
13};
14// The Module object: Our interface to the outside world. We import
15// and export values on it, and do the work to get that through
16// closure compiler if necessary. There are various ways Module can be used:
17// 1. Not defined. We create it here
18// 2. A function parameter, function(Module) { ..generated code.. }
19// 3. pre-run appended it, var Module = {}; ..generated code..
20// 4. External script tag defines var Module.
21// We need to do an eval in order to handle the closure compiler
22// case, where this code here is minified but Module was defined
23// elsewhere (e.g. case 4 above). We also need to check if Module
24// already exists (e.g. case 3 above).
25// Note that if you want to run closure, and also to use Module
26// after the generated code, you will need to define var Module = {};
27// before the code. Then that object will be used in the code, and you
28// can continue to use Module afterwards as well.
29var Module;
30if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
31
32// Sometimes an existing Module object exists with properties
33// meant to overwrite the default module functionality. Here
34// we collect those properties and reapply _after_ we configure
35// the current environment's defaults to avoid having to be so
36// defensive during initialization.
37var moduleOverrides = {};
38for (var key in Module) {
39 if (Module.hasOwnProperty(key)) {
40 moduleOverrides[key] = Module[key];
41 }
42}
43
44// The environment setup code below is customized to use Module.
45// *** Environment setup code ***
46var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
47var ENVIRONMENT_IS_WEB = typeof window === 'object';
48var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
49var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
50
51if (ENVIRONMENT_IS_NODE) {
52 // Expose functionality in the same simple way that the shells work
53 // Note that we pollute the global namespace here, otherwise we break in node
54 if (!Module['print']) Module['print'] = function print(x) {
55 process['stdout'].write(x + '\n');
56 };
57 if (!Module['printErr']) Module['printErr'] = function printErr(x) {
58 process['stderr'].write(x + '\n');
59 };
60
61 var nodeFS = require('fs');
62 var nodePath = require('path');
63
64 Module['read'] = function read(filename, binary) {
65 filename = nodePath['normalize'](filename);
66 var ret = nodeFS['readFileSync'](filename);
67 // The path is absolute if the normalized version is the same as the resolved.
68 if (!ret && filename != nodePath['resolve'](filename)) {
69 filename = path.join(__dirname, '..', 'src', filename);
70 ret = nodeFS['readFileSync'](filename);
71 }
72 if (ret && !binary) ret = ret.toString();
73 return ret;
74 };
75
76 Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) };
77
78 Module['load'] = function load(f) {
79 globalEval(read(f));
80 };
81
82 Module['arguments'] = process['argv'].slice(2);
83
84 module['exports'] = Module;
85}
86else if (ENVIRONMENT_IS_SHELL) {
87 if (!Module['print']) Module['print'] = print;
88 if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
89
90 if (typeof read != 'undefined') {
91 Module['read'] = read;
92 } else {
93 Module['read'] = function read() { throw 'no read() available (jsc?)' };
94 }
95
96 Module['readBinary'] = function readBinary(f) {
97 return read(f, 'binary');
98 };
99
100 if (typeof scriptArgs != 'undefined') {
101 Module['arguments'] = scriptArgs;
102 } else if (typeof arguments != 'undefined') {
103 Module['arguments'] = arguments;
104 }
105
106 this['Module'] = Module;
107
108 eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined"); // wipe out the SpiderMonkey shell 'gc' function, which can confuse closure (uses it as a minified name, and it is then initted to a non-falsey value unexpectedly)
109}
110else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
111 Module['read'] = function read(url) {
112 var xhr = new XMLHttpRequest();
113 xhr.open('GET', url, false);
114 xhr.send(null);
115 return xhr.responseText;
116 };
117
118 if (typeof arguments != 'undefined') {
119 Module['arguments'] = arguments;
120 }
121
122 if (typeof console !== 'undefined') {
123 if (!Module['print']) Module['print'] = function print(x) {
124 console.log(x);
125 };
126 if (!Module['printErr']) Module['printErr'] = function printErr(x) {
127 console.log(x);
128 };
129 } else {
130 // Probably a worker, and without console.log. We can do very little here...
131 var TRY_USE_DUMP = false;
132 if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
133 dump(x);
134 }) : (function(x) {
135 // self.postMessage(x); // enable this if you want stdout to be sent as messages
136 }));
137 }
138
139 if (ENVIRONMENT_IS_WEB) {
140 window['Module'] = Module;
141 } else {
142 Module['load'] = importScripts;
143 }
144}
145else {
146 // Unreachable because SHELL is dependant on the others
147 throw 'Unknown runtime environment. Where are we?';
148}
149
150function globalEval(x) {
151 eval.call(null, x);
152}
153if (!Module['load'] == 'undefined' && Module['read']) {
154 Module['load'] = function load(f) {
155 globalEval(Module['read'](f));
156 };
157}
158if (!Module['print']) {
159 Module['print'] = function(){};
160}
161if (!Module['printErr']) {
162 Module['printErr'] = Module['print'];
163}
164if (!Module['arguments']) {
165 Module['arguments'] = [];
166}
167// *** Environment setup code ***
168
169// Closure helpers
170Module.print = Module['print'];
171Module.printErr = Module['printErr'];
172
173// Callbacks
174Module['preRun'] = [];
175Module['postRun'] = [];
176
177// Merge back in the overrides
178for (var key in moduleOverrides) {
179 if (moduleOverrides.hasOwnProperty(key)) {
180 Module[key] = moduleOverrides[key];
181 }
182}
183
184
185
186// === Auto-generated preamble library stuff ===
187
188//========================================
189// Runtime code shared with compiler
190//========================================
191
192var Runtime = {
193 stackSave: function () {
194 return STACKTOP;
195 },
196 stackRestore: function (stackTop) {
197 STACKTOP = stackTop;
198 },
199 forceAlign: function (target, quantum) {
200 quantum = quantum || 4;
201 if (quantum == 1) return target;
202 if (isNumber(target) && isNumber(quantum)) {
203 return Math.ceil(target/quantum)*quantum;
204 } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
205 return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')';
206 }
207 return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
208 },
209 isNumberType: function (type) {
210 return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
211 },
212 isPointerType: function isPointerType(type) {
213 return type[type.length-1] == '*';
214},
215 isStructType: function isStructType(type) {
216 if (isPointerType(type)) return false;
217 if (isArrayType(type)) return true;
218 if (/<?\{ ?[^}]* ?\}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types
219 // See comment in isStructPointerType()
220 return type[0] == '%';
221},
222 INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
223 FLOAT_TYPES: {"float":0,"double":0},
224 or64: function (x, y) {
225 var l = (x | 0) | (y | 0);
226 var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
227 return l + h;
228 },
229 and64: function (x, y) {
230 var l = (x | 0) & (y | 0);
231 var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
232 return l + h;
233 },
234 xor64: function (x, y) {
235 var l = (x | 0) ^ (y | 0);
236 var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
237 return l + h;
238 },
239 getNativeTypeSize: function (type) {
240 switch (type) {
241 case 'i1': case 'i8': return 1;
242 case 'i16': return 2;
243 case 'i32': return 4;
244 case 'i64': return 8;
245 case 'float': return 4;
246 case 'double': return 8;
247 default: {
248 if (type[type.length-1] === '*') {
249 return Runtime.QUANTUM_SIZE; // A pointer
250 } else if (type[0] === 'i') {
251 var bits = parseInt(type.substr(1));
252 assert(bits % 8 === 0);
253 return bits/8;
254 } else {
255 return 0;
256 }
257 }
258 }
259 },
260 getNativeFieldSize: function (type) {
261 return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
262 },
263 dedup: function dedup(items, ident) {
264 var seen = {};
265 if (ident) {
266 return items.filter(function(item) {
267 if (seen[item[ident]]) return false;
268 seen[item[ident]] = true;
269 return true;
270 });
271 } else {
272 return items.filter(function(item) {
273 if (seen[item]) return false;
274 seen[item] = true;
275 return true;
276 });
277 }
278},
279 set: function set() {
280 var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
281 var ret = {};
282 for (var i = 0; i < args.length; i++) {
283 ret[args[i]] = 0;
284 }
285 return ret;
286},
287 STACK_ALIGN: 8,
288 getAlignSize: function (type, size, vararg) {
289 // we align i64s and doubles on 64-bit boundaries, unlike x86
290 if (!vararg && (type == 'i64' || type == 'double')) return 8;
291 if (!type) return Math.min(size, 8); // align structures internally to 64 bits
292 return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
293 },
294 calculateStructAlignment: function calculateStructAlignment(type) {
295 type.flatSize = 0;
296 type.alignSize = 0;
297 var diffs = [];
298 var prev = -1;
299 var index = 0;
300 type.flatIndexes = type.fields.map(function(field) {
301 index++;
302 var size, alignSize;
303 if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
304 size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
305 alignSize = Runtime.getAlignSize(field, size);
306 } else if (Runtime.isStructType(field)) {
307 if (field[1] === '0') {
308 // this is [0 x something]. When inside another structure like here, it must be at the end,
309 // and it adds no size
310 // XXX this happens in java-nbody for example... assert(index === type.fields.length, 'zero-length in the middle!');
311 size = 0;
312 if (Types.types[field]) {
313 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
314 } else {
315 alignSize = type.alignSize || QUANTUM_SIZE;
316 }
317 } else {
318 size = Types.types[field].flatSize;
319 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
320 }
321 } else if (field[0] == 'b') {
322 // bN, large number field, like a [N x i8]
323 size = field.substr(1)|0;
324 alignSize = 1;
325 } else if (field[0] === '<') {
326 // vector type
327 size = alignSize = Types.types[field].flatSize; // fully aligned
328 } else if (field[0] === 'i') {
329 // illegal integer field, that could not be legalized because it is an internal structure field
330 // it is ok to have such fields, if we just use them as markers of field size and nothing more complex
331 size = alignSize = parseInt(field.substr(1))/8;
332 assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field);
333 } else {
334 assert(false, 'invalid type for calculateStructAlignment');
335 }
336 if (type.packed) alignSize = 1;
337 type.alignSize = Math.max(type.alignSize, alignSize);
338 var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
339 type.flatSize = curr + size;
340 if (prev >= 0) {
341 diffs.push(curr-prev);
342 }
343 prev = curr;
344 return curr;
345 });
346 if (type.name_ && type.name_[0] === '[') {
347 // arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid
348 // allocating a potentially huge array for [999999 x i8] etc.
349 type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2;
350 }
351 type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
352 if (diffs.length == 0) {
353 type.flatFactor = type.flatSize;
354 } else if (Runtime.dedup(diffs).length == 1) {
355 type.flatFactor = diffs[0];
356 }
357 type.needsFlattening = (type.flatFactor != 1);
358 return type.flatIndexes;
359 },
360 generateStructInfo: function (struct, typeName, offset) {
361 var type, alignment;
362 if (typeName) {
363 offset = offset || 0;
364 type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName];
365 if (!type) return null;
366 if (type.fields.length != struct.length) {
367 printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
368 return null;
369 }
370 alignment = type.flatIndexes;
371 } else {
372 var type = { fields: struct.map(function(item) { return item[0] }) };
373 alignment = Runtime.calculateStructAlignment(type);
374 }
375 var ret = {
376 __size__: type.flatSize
377 };
378 if (typeName) {
379 struct.forEach(function(item, i) {
380 if (typeof item === 'string') {
381 ret[item] = alignment[i] + offset;
382 } else {
383 // embedded struct
384 var key;
385 for (var k in item) key = k;
386 ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]);
387 }
388 });
389 } else {
390 struct.forEach(function(item, i) {
391 ret[item[1]] = alignment[i];
392 });
393 }
394 return ret;
395 },
396 dynCall: function (sig, ptr, args) {
397 if (args && args.length) {
398 if (!args.splice) args = Array.prototype.slice.call(args);
399 args.splice(0, 0, ptr);
400 return Module['dynCall_' + sig].apply(null, args);
401 } else {
402 return Module['dynCall_' + sig].call(null, ptr);
403 }
404 },
405 functionPointers: [],
406 addFunction: function (func) {
407 for (var i = 0; i < Runtime.functionPointers.length; i++) {
408 if (!Runtime.functionPointers[i]) {
409 Runtime.functionPointers[i] = func;
410 return 2*(1 + i);
411 }
412 }
413 throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
414 },
415 removeFunction: function (index) {
416 Runtime.functionPointers[(index-2)/2] = null;
417 },
418 getAsmConst: function (code, numArgs) {
419 // code is a constant string on the heap, so we can cache these
420 if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
421 var func = Runtime.asmConstCache[code];
422 if (func) return func;
423 var args = [];
424 for (var i = 0; i < numArgs; i++) {
425 args.push(String.fromCharCode(36) + i); // $0, $1 etc
426 }
427 var source = Pointer_stringify(code);
428 if (source[0] === '"') {
429 // tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct
430 if (source.indexOf('"', 1) === source.length-1) {
431 source = source.substr(1, source.length-2);
432 } else {
433 // something invalid happened, e.g. EM_ASM("..code($0)..", input)
434 abort('invalid EM_ASM input |' + source + '|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)');
435 }
436 }
437 try {
438 var evalled = eval('(function(' + args.join(',') + '){ ' + source + ' })'); // new Function does not allow upvars in node
439 } catch(e) {
440 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.)');
441 throw e;
442 }
443 return Runtime.asmConstCache[code] = evalled;
444 },
445 warnOnce: function (text) {
446 if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
447 if (!Runtime.warnOnce.shown[text]) {
448 Runtime.warnOnce.shown[text] = 1;
449 Module.printErr(text);
450 }
451 },
452 funcWrappers: {},
453 getFuncWrapper: function (func, sig) {
454 assert(sig);
455 if (!Runtime.funcWrappers[func]) {
456 Runtime.funcWrappers[func] = function dynCall_wrapper() {
457 return Runtime.dynCall(sig, func, arguments);
458 };
459 }
460 return Runtime.funcWrappers[func];
461 },
462 UTF8Processor: function () {
463 var buffer = [];
464 var needed = 0;
465 this.processCChar = function (code) {
466 code = code & 0xFF;
467
468 if (buffer.length == 0) {
469 if ((code & 0x80) == 0x00) { // 0xxxxxxx
470 return String.fromCharCode(code);
471 }
472 buffer.push(code);
473 if ((code & 0xE0) == 0xC0) { // 110xxxxx
474 needed = 1;
475 } else if ((code & 0xF0) == 0xE0) { // 1110xxxx
476 needed = 2;
477 } else { // 11110xxx
478 needed = 3;
479 }
480 return '';
481 }
482
483 if (needed) {
484 buffer.push(code);
485 needed--;
486 if (needed > 0) return '';
487 }
488
489 var c1 = buffer[0];
490 var c2 = buffer[1];
491 var c3 = buffer[2];
492 var c4 = buffer[3];
493 var ret;
494 if (buffer.length == 2) {
495 ret = String.fromCharCode(((c1 & 0x1F) << 6) | (c2 & 0x3F));
496 } else if (buffer.length == 3) {
497 ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F));
498 } else {
499 // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
500 var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) |
501 ((c3 & 0x3F) << 6) | (c4 & 0x3F);
502 ret = String.fromCharCode(
503 Math.floor((codePoint - 0x10000) / 0x400) + 0xD800,
504 (codePoint - 0x10000) % 0x400 + 0xDC00);
505 }
506 buffer.length = 0;
507 return ret;
508 }
509 this.processJSString = function processJSString(string) {
510 /* TODO: use TextEncoder when present,
511 var encoder = new TextEncoder();
512 encoder['encoding'] = "utf-8";
513 var utf8Array = encoder['encode'](aMsg.data);
514 */
515 string = unescape(encodeURIComponent(string));
516 var ret = [];
517 for (var i = 0; i < string.length; i++) {
518 ret.push(string.charCodeAt(i));
519 }
520 return ret;
521 }
522 },
523 getCompilerSetting: function (name) {
524 throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work';
525 },
526 stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+7)&-8); return ret; },
527 staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; },
528 dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; },
529 alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
530 makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+4294967296)))); return ret; },
531 GLOBAL_BASE: 8,
532 QUANTUM_SIZE: 4,
533 __dummy__: 0
534}
535
536
537Module['Runtime'] = Runtime;
538
539
540
541
542
543
544
545
546
547//========================================
548// Runtime essentials
549//========================================
550
551var __THREW__ = 0; // Used in checking for thrown exceptions.
552
553var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
554var EXITSTATUS = 0;
555
556var undef = 0;
557// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
558// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
559var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
560var tempI64, tempI64b;
561var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
562
563function assert(condition, text) {
564 if (!condition) {
565 abort('Assertion failed: ' + text);
566 }
567}
568
569var globalScope = this;
570
571// C calling interface. A convenient way to call C functions (in C files, or
572// defined with extern "C").
573//
574// Note: LLVM optimizations can inline and remove functions, after which you will not be
575// able to call them. Closure can also do so. To avoid that, add your function to
576// the exports using something like
577//
578// -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
579//
580// @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C")
581// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
582// 'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit).
583// @param argTypes An array of the types of arguments for the function (if there are no arguments, this can be ommitted). Types are as in returnType,
584// except that 'array' is not possible (there is no way for us to know the length of the array)
585// @param args An array of the arguments to the function, as native JS values (as in returnType)
586// Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
587// @return The return value, as a native JS value (as in returnType)
588function ccall(ident, returnType, argTypes, args) {
589 return ccallFunc(getCFunc(ident), returnType, argTypes, args);
590}
591Module["ccall"] = ccall;
592
593// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
594function getCFunc(ident) {
595 try {
596 var func = Module['_' + ident]; // closure exported function
597 if (!func) func = eval('_' + ident); // explicit lookup
598 } catch(e) {
599 }
600 assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
601 return func;
602}
603
604// Internal function that does a C call using a function, not an identifier
605function ccallFunc(func, returnType, argTypes, args) {
606 var stack = 0;
607 function toC(value, type) {
608 if (type == 'string') {
609 if (value === null || value === undefined || value === 0) return 0; // null string
610 value = intArrayFromString(value);
611 type = 'array';
612 }
613 if (type == 'array') {
614 if (!stack) stack = Runtime.stackSave();
615 var ret = Runtime.stackAlloc(value.length);
616 writeArrayToMemory(value, ret);
617 return ret;
618 }
619 return value;
620 }
621 function fromC(value, type) {
622 if (type == 'string') {
623 return Pointer_stringify(value);
624 }
625 assert(type != 'array');
626 return value;
627 }
628 var i = 0;
629 var cArgs = args ? args.map(function(arg) {
630 return toC(arg, argTypes[i++]);
631 }) : [];
632 var ret = fromC(func.apply(null, cArgs), returnType);
633 if (stack) Runtime.stackRestore(stack);
634 return ret;
635}
636
637// Returns a native JS wrapper for a C function. This is similar to ccall, but
638// returns a function you can call repeatedly in a normal way. For example:
639//
640// var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
641// alert(my_function(5, 22));
642// alert(my_function(99, 12));
643//
644function cwrap(ident, returnType, argTypes) {
645 var func = getCFunc(ident);
646 return function() {
647 return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments));
648 }
649}
650Module["cwrap"] = cwrap;
651
652// Sets a value in memory in a dynamic way at run-time. Uses the
653// type data. This is the same as makeSetValue, except that
654// makeSetValue is done at compile-time and generates the needed
655// code then, whereas this function picks the right code at
656// run-time.
657// Note that setValue and getValue only do *aligned* writes and reads!
658// Note that ccall uses JS types as for defining types, while setValue and
659// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
660function setValue(ptr, value, type, noSafe) {
661 type = type || 'i8';
662 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
663 switch(type) {
664 case 'i1': HEAP8[(ptr)]=value; break;
665 case 'i8': HEAP8[(ptr)]=value; break;
666 case 'i16': HEAP16[((ptr)>>1)]=value; break;
667 case 'i32': HEAP32[((ptr)>>2)]=value; break;
668 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;
669 case 'float': HEAPF32[((ptr)>>2)]=value; break;
670 case 'double': HEAPF64[((ptr)>>3)]=value; break;
671 default: abort('invalid type for setValue: ' + type);
672 }
673}
674Module['setValue'] = setValue;
675
676// Parallel to setValue.
677function getValue(ptr, type, noSafe) {
678 type = type || 'i8';
679 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
680 switch(type) {
681 case 'i1': return HEAP8[(ptr)];
682 case 'i8': return HEAP8[(ptr)];
683 case 'i16': return HEAP16[((ptr)>>1)];
684 case 'i32': return HEAP32[((ptr)>>2)];
685 case 'i64': return HEAP32[((ptr)>>2)];
686 case 'float': return HEAPF32[((ptr)>>2)];
687 case 'double': return HEAPF64[((ptr)>>3)];
688 default: abort('invalid type for setValue: ' + type);
689 }
690 return null;
691}
692Module['getValue'] = getValue;
693
694var ALLOC_NORMAL = 0; // Tries to use _malloc()
695var ALLOC_STACK = 1; // Lives for the duration of the current function call
696var ALLOC_STATIC = 2; // Cannot be freed
697var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
698var ALLOC_NONE = 4; // Do not allocate
699Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
700Module['ALLOC_STACK'] = ALLOC_STACK;
701Module['ALLOC_STATIC'] = ALLOC_STATIC;
702Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
703Module['ALLOC_NONE'] = ALLOC_NONE;
704
705// allocate(): This is for internal use. You can use it yourself as well, but the interface
706// is a little tricky (see docs right below). The reason is that it is optimized
707// for multiple syntaxes to save space in generated code. So you should
708// normally not use allocate(), and instead allocate memory using _malloc(),
709// initialize it with setValue(), and so forth.
710// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
711// in *bytes* (note that this is sometimes confusing: the next parameter does not
712// affect this!)
713// @types: Either an array of types, one for each byte (or 0 if no type at that position),
714// or a single type which is used for the entire block. This only matters if there
715// is initial data - if @slab is a number, then this does not matter at all and is
716// ignored.
717// @allocator: How to allocate memory, see ALLOC_*
718function allocate(slab, types, allocator, ptr) {
719 var zeroinit, size;
720 if (typeof slab === 'number') {
721 zeroinit = true;
722 size = slab;
723 } else {
724 zeroinit = false;
725 size = slab.length;
726 }
727
728 var singleType = typeof types === 'string' ? types : null;
729
730 var ret;
731 if (allocator == ALLOC_NONE) {
732 ret = ptr;
733 } else {
734 ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
735 }
736
737 if (zeroinit) {
738 var ptr = ret, stop;
739 assert((ret & 3) == 0);
740 stop = ret + (size & ~3);
741 for (; ptr < stop; ptr += 4) {
742 HEAP32[((ptr)>>2)]=0;
743 }
744 stop = ret + size;
745 while (ptr < stop) {
746 HEAP8[((ptr++)|0)]=0;
747 }
748 return ret;
749 }
750
751 if (singleType === 'i8') {
752 if (slab.subarray || slab.slice) {
753 HEAPU8.set(slab, ret);
754 } else {
755 HEAPU8.set(new Uint8Array(slab), ret);
756 }
757 return ret;
758 }
759
760 var i = 0, type, typeSize, previousType;
761 while (i < size) {
762 var curr = slab[i];
763
764 if (typeof curr === 'function') {
765 curr = Runtime.getFunctionIndex(curr);
766 }
767
768 type = singleType || types[i];
769 if (type === 0) {
770 i++;
771 continue;
772 }
773
774 if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
775
776 setValue(ret+i, curr, type);
777
778 // no need to look up size unless type changes, so cache it
779 if (previousType !== type) {
780 typeSize = Runtime.getNativeTypeSize(type);
781 previousType = type;
782 }
783 i += typeSize;
784 }
785
786 return ret;
787}
788Module['allocate'] = allocate;
789
790function Pointer_stringify(ptr, /* optional */ length) {
791 // TODO: use TextDecoder
792 // Find the length, and check for UTF while doing so
793 var hasUtf = false;
794 var t;
795 var i = 0;
796 while (1) {
797 t = HEAPU8[(((ptr)+(i))|0)];
798 if (t >= 128) hasUtf = true;
799 else if (t == 0 && !length) break;
800 i++;
801 if (length && i == length) break;
802 }
803 if (!length) length = i;
804
805 var ret = '';
806
807 if (!hasUtf) {
808 var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
809 var curr;
810 while (length > 0) {
811 curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
812 ret = ret ? ret + curr : curr;
813 ptr += MAX_CHUNK;
814 length -= MAX_CHUNK;
815 }
816 return ret;
817 }
818
819 var utf8 = new Runtime.UTF8Processor();
820 for (i = 0; i < length; i++) {
821 t = HEAPU8[(((ptr)+(i))|0)];
822 ret += utf8.processCChar(t);
823 }
824 return ret;
825}
826Module['Pointer_stringify'] = Pointer_stringify;
827
828// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
829// a copy of that string as a Javascript String object.
830function UTF16ToString(ptr) {
831 var i = 0;
832
833 var str = '';
834 while (1) {
835 var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
836 if (codeUnit == 0)
837 return str;
838 ++i;
839 // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
840 str += String.fromCharCode(codeUnit);
841 }
842}
843Module['UTF16ToString'] = UTF16ToString;
844
845// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
846// null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP.
847function stringToUTF16(str, outPtr) {
848 for(var i = 0; i < str.length; ++i) {
849 // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
850 var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
851 HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit;
852 }
853 // Null-terminate the pointer to the HEAP.
854 HEAP16[(((outPtr)+(str.length*2))>>1)]=0;
855}
856Module['stringToUTF16'] = stringToUTF16;
857
858// Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emscripten HEAP, returns
859// a copy of that string as a Javascript String object.
860function UTF32ToString(ptr) {
861 var i = 0;
862
863 var str = '';
864 while (1) {
865 var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
866 if (utf32 == 0)
867 return str;
868 ++i;
869 // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.
870 if (utf32 >= 0x10000) {
871 var ch = utf32 - 0x10000;
872 str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
873 } else {
874 str += String.fromCharCode(utf32);
875 }
876 }
877}
878Module['UTF32ToString'] = UTF32ToString;
879
880// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
881// null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP,
882// but can use less, since str.length does not return the number of characters in the string, but the number of UTF-16 code units in the string.
883function stringToUTF32(str, outPtr) {
884 var iChar = 0;
885 for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
886 // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
887 var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate
888 if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
889 var trailSurrogate = str.charCodeAt(++iCodeUnit);
890 codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
891 }
892 HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit;
893 ++iChar;
894 }
895 // Null-terminate the pointer to the HEAP.
896 HEAP32[(((outPtr)+(iChar*4))>>2)]=0;
897}
898Module['stringToUTF32'] = stringToUTF32;
899
900function demangle(func) {
901 var i = 3;
902 // params, etc.
903 var basicTypes = {
904 'v': 'void',
905 'b': 'bool',
906 'c': 'char',
907 's': 'short',
908 'i': 'int',
909 'l': 'long',
910 'f': 'float',
911 'd': 'double',
912 'w': 'wchar_t',
913 'a': 'signed char',
914 'h': 'unsigned char',
915 't': 'unsigned short',
916 'j': 'unsigned int',
917 'm': 'unsigned long',
918 'x': 'long long',
919 'y': 'unsigned long long',
920 'z': '...'
921 };
922 var subs = [];
923 var first = true;
924 function dump(x) {
925 //return;
926 if (x) Module.print(x);
927 Module.print(func);
928 var pre = '';
929 for (var a = 0; a < i; a++) pre += ' ';
930 Module.print (pre + '^');
931 }
932 function parseNested() {
933 i++;
934 if (func[i] === 'K') i++; // ignore const
935 var parts = [];
936 while (func[i] !== 'E') {
937 if (func[i] === 'S') { // substitution
938 i++;
939 var next = func.indexOf('_', i);
940 var num = func.substring(i, next) || 0;
941 parts.push(subs[num] || '?');
942 i = next+1;
943 continue;
944 }
945 if (func[i] === 'C') { // constructor
946 parts.push(parts[parts.length-1]);
947 i += 2;
948 continue;
949 }
950 var size = parseInt(func.substr(i));
951 var pre = size.toString().length;
952 if (!size || !pre) { i--; break; } // counter i++ below us
953 var curr = func.substr(i + pre, size);
954 parts.push(curr);
955 subs.push(curr);
956 i += pre + size;
957 }
958 i++; // skip E
959 return parts;
960 }
961 function parse(rawList, limit, allowVoid) { // main parser
962 limit = limit || Infinity;
963 var ret = '', list = [];
964 function flushList() {
965 return '(' + list.join(', ') + ')';
966 }
967 var name;
968 if (func[i] === 'N') {
969 // namespaced N-E
970 name = parseNested().join('::');
971 limit--;
972 if (limit === 0) return rawList ? [name] : name;
973 } else {
974 // not namespaced
975 if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L'
976 var size = parseInt(func.substr(i));
977 if (size) {
978 var pre = size.toString().length;
979 name = func.substr(i + pre, size);
980 i += pre + size;
981 }
982 }
983 first = false;
984 if (func[i] === 'I') {
985 i++;
986 var iList = parse(true);
987 var iRet = parse(true, 1, true);
988 ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>';
989 } else {
990 ret = name;
991 }
992 paramLoop: while (i < func.length && limit-- > 0) {
993 //dump('paramLoop');
994 var c = func[i++];
995 if (c in basicTypes) {
996 list.push(basicTypes[c]);
997 } else {
998 switch (c) {
999 case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer
1000 case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference
1001 case 'L': { // literal
1002 i++; // skip basic type
1003 var end = func.indexOf('E', i);
1004 var size = end - i;
1005 list.push(func.substr(i, size));
1006 i += size + 2; // size + 'EE'
1007 break;
1008 }
1009 case 'A': { // array
1010 var size = parseInt(func.substr(i));
1011 i += size.toString().length;
1012 if (func[i] !== '_') throw '?';
1013 i++; // skip _
1014 list.push(parse(true, 1, true)[0] + ' [' + size + ']');
1015 break;
1016 }
1017 case 'E': break paramLoop;
1018 default: ret += '?' + c; break paramLoop;
1019 }
1020 }
1021 }
1022 if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void)
1023 if (rawList) {
1024 if (ret) {
1025 list.push(ret + '?');
1026 }
1027 return list;
1028 } else {
1029 return ret + flushList();
1030 }
1031 }
1032 try {
1033 // Special-case the entry point, since its name differs from other name mangling.
1034 if (func == 'Object._main' || func == '_main') {
1035 return 'main()';
1036 }
1037 if (typeof func === 'number') func = Pointer_stringify(func);
1038 if (func[0] !== '_') return func;
1039 if (func[1] !== '_') return func; // C function
1040 if (func[2] !== 'Z') return func;
1041 switch (func[3]) {
1042 case 'n': return 'operator new()';
1043 case 'd': return 'operator delete()';
1044 }
1045 return parse();
1046 } catch(e) {
1047 return func;
1048 }
1049}
1050
1051function demangleAll(text) {
1052 return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') });
1053}
1054
1055function stackTrace() {
1056 var stack = new Error().stack;
1057 return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack trace is not available at least on IE10 and Safari 6.
1058}
1059
1060// Memory management
1061
1062var PAGE_SIZE = 4096;
1063function alignMemoryPage(x) {
1064 return (x+4095)&-4096;
1065}
1066
1067var HEAP;
1068var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
1069
1070var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
1071var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
1072var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
1073
1074function enlargeMemory() {
1075 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.');
1076}
1077
1078var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
1079var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;
1080var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
1081
1082var totalMemory = 4096;
1083while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) {
1084 if (totalMemory < 16*1024*1024) {
1085 totalMemory *= 2;
1086 } else {
1087 totalMemory += 16*1024*1024
1088 }
1089}
1090if (totalMemory !== TOTAL_MEMORY) {
1091 Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be more reasonable');
1092 TOTAL_MEMORY = totalMemory;
1093}
1094
1095// Initialize the runtime's memory
1096// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
1097assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
1098 'JS engine does not provide full typed array support');
1099
1100var buffer = new ArrayBuffer(TOTAL_MEMORY);
1101HEAP8 = new Int8Array(buffer);
1102HEAP16 = new Int16Array(buffer);
1103HEAP32 = new Int32Array(buffer);
1104HEAPU8 = new Uint8Array(buffer);
1105HEAPU16 = new Uint16Array(buffer);
1106HEAPU32 = new Uint32Array(buffer);
1107HEAPF32 = new Float32Array(buffer);
1108HEAPF64 = new Float64Array(buffer);
1109
1110// Endianness check (note: assumes compiler arch was little-endian)
1111HEAP32[0] = 255;
1112assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system');
1113
1114Module['HEAP'] = HEAP;
1115Module['HEAP8'] = HEAP8;
1116Module['HEAP16'] = HEAP16;
1117Module['HEAP32'] = HEAP32;
1118Module['HEAPU8'] = HEAPU8;
1119Module['HEAPU16'] = HEAPU16;
1120Module['HEAPU32'] = HEAPU32;
1121Module['HEAPF32'] = HEAPF32;
1122Module['HEAPF64'] = HEAPF64;
1123
1124function callRuntimeCallbacks(callbacks) {
1125 while(callbacks.length > 0) {
1126 var callback = callbacks.shift();
1127 if (typeof callback == 'function') {
1128 callback();
1129 continue;
1130 }
1131 var func = callback.func;
1132 if (typeof func === 'number') {
1133 if (callback.arg === undefined) {
1134 Runtime.dynCall('v', func);
1135 } else {
1136 Runtime.dynCall('vi', func, [callback.arg]);
1137 }
1138 } else {
1139 func(callback.arg === undefined ? null : callback.arg);
1140 }
1141 }
1142}
1143
1144var __ATPRERUN__ = []; // functions called before the runtime is initialized
1145var __ATINIT__ = []; // functions called during startup
1146var __ATMAIN__ = []; // functions called when main() is to be run
1147var __ATEXIT__ = []; // functions called during shutdown
1148var __ATPOSTRUN__ = []; // functions called after the runtime has exited
1149
1150var runtimeInitialized = false;
1151
1152function preRun() {
1153 // compatibility - merge in anything from Module['preRun'] at this time
1154 if (Module['preRun']) {
1155 if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
1156 while (Module['preRun'].length) {
1157 addOnPreRun(Module['preRun'].shift());
1158 }
1159 }
1160 callRuntimeCallbacks(__ATPRERUN__);
1161}
1162
1163function ensureInitRuntime() {
1164 if (runtimeInitialized) return;
1165 runtimeInitialized = true;
1166 callRuntimeCallbacks(__ATINIT__);
1167}
1168
1169function preMain() {
1170 callRuntimeCallbacks(__ATMAIN__);
1171}
1172
1173function exitRuntime() {
1174 callRuntimeCallbacks(__ATEXIT__);
1175}
1176
1177function postRun() {
1178 // compatibility - merge in anything from Module['postRun'] at this time
1179 if (Module['postRun']) {
1180 if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
1181 while (Module['postRun'].length) {
1182 addOnPostRun(Module['postRun'].shift());
1183 }
1184 }
1185 callRuntimeCallbacks(__ATPOSTRUN__);
1186}
1187
1188function addOnPreRun(cb) {
1189 __ATPRERUN__.unshift(cb);
1190}
1191Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun;
1192
1193function addOnInit(cb) {
1194 __ATINIT__.unshift(cb);
1195}
1196Module['addOnInit'] = Module.addOnInit = addOnInit;
1197
1198function addOnPreMain(cb) {
1199 __ATMAIN__.unshift(cb);
1200}
1201Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain;
1202
1203function addOnExit(cb) {
1204 __ATEXIT__.unshift(cb);
1205}
1206Module['addOnExit'] = Module.addOnExit = addOnExit;
1207
1208function addOnPostRun(cb) {
1209 __ATPOSTRUN__.unshift(cb);
1210}
1211Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun;
1212
1213// Tools
1214
1215// This processes a JS string into a C-line array of numbers, 0-terminated.
1216// For LLVM-originating strings, see parser.js:parseLLVMString function
1217function intArrayFromString(stringy, dontAddNull, length /* optional */) {
1218 var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
1219 if (length) {
1220 ret.length = length;
1221 }
1222 if (!dontAddNull) {
1223 ret.push(0);
1224 }
1225 return ret;
1226}
1227Module['intArrayFromString'] = intArrayFromString;
1228
1229function intArrayToString(array) {
1230 var ret = [];
1231 for (var i = 0; i < array.length; i++) {
1232 var chr = array[i];
1233 if (chr > 0xFF) {
1234 chr &= 0xFF;
1235 }
1236 ret.push(String.fromCharCode(chr));
1237 }
1238 return ret.join('');
1239}
1240Module['intArrayToString'] = intArrayToString;
1241
1242// Write a Javascript array to somewhere in the heap
1243function writeStringToMemory(string, buffer, dontAddNull) {
1244 var array = intArrayFromString(string, dontAddNull);
1245 var i = 0;
1246 while (i < array.length) {
1247 var chr = array[i];
1248 HEAP8[(((buffer)+(i))|0)]=chr;
1249 i = i + 1;
1250 }
1251}
1252Module['writeStringToMemory'] = writeStringToMemory;
1253
1254function writeArrayToMemory(array, buffer) {
1255 for (var i = 0; i < array.length; i++) {
1256 HEAP8[(((buffer)+(i))|0)]=array[i];
1257 }
1258}
1259Module['writeArrayToMemory'] = writeArrayToMemory;
1260
1261function writeAsciiToMemory(str, buffer, dontAddNull) {
1262 for (var i = 0; i < str.length; i++) {
1263 HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i);
1264 }
1265 if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0;
1266}
1267Module['writeAsciiToMemory'] = writeAsciiToMemory;
1268
1269function unSign(value, bits, ignore) {
1270 if (value >= 0) {
1271 return value;
1272 }
1273 return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts
1274 : Math.pow(2, bits) + value;
1275}
1276function reSign(value, bits, ignore) {
1277 if (value <= 0) {
1278 return value;
1279 }
1280 var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
1281 : Math.pow(2, bits-1);
1282 if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that
1283 // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
1284 // TODO: In i64 mode 1, resign the two parts separately and safely
1285 value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
1286 }
1287 return value;
1288}
1289
1290// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 )
1291if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
1292 var ah = a >>> 16;
1293 var al = a & 0xffff;
1294 var bh = b >>> 16;
1295 var bl = b & 0xffff;
1296 return (al*bl + ((ah*bl + al*bh) << 16))|0;
1297};
1298Math.imul = Math['imul'];
1299
1300
1301var Math_abs = Math.abs;
1302var Math_cos = Math.cos;
1303var Math_sin = Math.sin;
1304var Math_tan = Math.tan;
1305var Math_acos = Math.acos;
1306var Math_asin = Math.asin;
1307var Math_atan = Math.atan;
1308var Math_atan2 = Math.atan2;
1309var Math_exp = Math.exp;
1310var Math_log = Math.log;
1311var Math_sqrt = Math.sqrt;
1312var Math_ceil = Math.ceil;
1313var Math_floor = Math.floor;
1314var Math_pow = Math.pow;
1315var Math_imul = Math.imul;
1316var Math_fround = Math.fround;
1317var Math_min = Math.min;
1318
1319// A counter of dependencies for calling run(). If we need to
1320// do asynchronous work before running, increment this and
1321// decrement it. Incrementing must happen in a place like
1322// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
1323// Note that you can add dependencies in preRun, even though
1324// it happens right before run - run will be postponed until
1325// the dependencies are met.
1326var runDependencies = 0;
1327var runDependencyWatcher = null;
1328var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
1329
1330function addRunDependency(id) {
1331 runDependencies++;
1332 if (Module['monitorRunDependencies']) {
1333 Module['monitorRunDependencies'](runDependencies);
1334 }
1335}
1336Module['addRunDependency'] = addRunDependency;
1337function removeRunDependency(id) {
1338 runDependencies--;
1339 if (Module['monitorRunDependencies']) {
1340 Module['monitorRunDependencies'](runDependencies);
1341 }
1342 if (runDependencies == 0) {
1343 if (runDependencyWatcher !== null) {
1344 clearInterval(runDependencyWatcher);
1345 runDependencyWatcher = null;
1346 }
1347 if (dependenciesFulfilled) {
1348 var callback = dependenciesFulfilled;
1349 dependenciesFulfilled = null;
1350 callback(); // can add another dependenciesFulfilled
1351 }
1352 }
1353}
1354Module['removeRunDependency'] = removeRunDependency;
1355
1356Module["preloadedImages"] = {}; // maps url to image data
1357Module["preloadedAudios"] = {}; // maps url to audio data
1358
1359
1360var memoryInitializer = null;
1361
1362// === Body ===
1363var __ZTVN10__cxxabiv117__class_type_infoE = 7024;
1364var __ZTVN10__cxxabiv120__si_class_type_infoE = 7064;
1365
1366
1367
1368
1369STATIC_BASE = 8;
1370
1371STATICTOP = STATIC_BASE + Runtime.alignMemory(7731);
1372/* global initializers */ __ATINIT__.push();
1373
1374
1375/* memory initializer */ allocate([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,232,118,72,0,0,0,0,255,255,255,255,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,101,114,114,111,114,58,32,37,100,92,110,0,0,0,0,0,102,114,97,109,101,32,97,118,101,114,97,103,101,115,58,32,37,46,51,102,32,43,45,32,37,46,51,102,44,32,114,97,110,103,101,58,32,37,46,51,102,32,116,111,32,37,46,51,102,32,10,0,0,0,0,0,105,102,32,40,77,111,100,117,108,101,46,114,101,112,111,114,116,67,111,109,112,108,101,116,105,111,110,41,32,77,111,100,117,108,101,46,114,101,112,111,114,116,67,111,109,112,108,101,116,105,111,110,40,41,0,0,114,101,115,112,111,110,115,105,118,101,32,109,97,105,110,32,108,111,111,112,0,0,0,0,0,0,0,0,56,1,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,49,49,98,50,69,100,103,101,83,104,97,112,101,0,0,0,55,98,50,83,104,97,112,101,0,0,0,0,0,0,0,0,120,27,0,0,32,1,0,0,160,27,0,0,16,1,0,0,48,1,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,83,104,97,112,101,115,47,98,50,80,111,108,121,103,111,110,83,104,97,112,101,46,99,112,112,0,0,0,0,0,0,0,48,46,48,102,32,60,61,32,108,111,119,101,114,32,38,38,32,108,111,119,101,114,32,60,61,32,105,110,112,117,116,46,109,97,120,70,114,97,99,116,105,111,110,0,0,0,0,0,82,97,121,67,97,115,116,0,109,95,118,101,114,116,101,120,67,111,117,110,116,32,62,61,32,51,0,0,0,0,0,0,67,111,109,112,117,116,101,77,97,115,115,0,0,0,0,0,97,114,101,97,32,62,32,49,46,49,57,50,48,57,50,57,48,101,45,48,55,70,0,0,0,0,0,0,48,2,0,0,3,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,49,52,98,50,80,111,108,121,103,111,110,83,104,97,112,101,0,0,0,0,0,0,0,0,160,27,0,0,24,2,0,0,48,1,0,0,0,0,0,0,16,0,0,0,32,0,0,0,64,0,0,0,96,0,0,0,128,0,0,0,160,0,0,0,192,0,0,0,224,0,0,0,0,1,0,0,64,1,0,0,128,1,0,0,192,1,0,0,0,2,0,0,128,2,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,32,60,32,98,50,95,98,108,111,99,107,83,105,122,101,115,0,0,0,0,0,0,0,66,111,120,50,68,47,67,111,109,109,111,110,47,98,50,66,108,111,99,107,65,108,108,111,99,97,116,111,114,46,99,112,112,0,0,0,0,0,0,0,98,50,66,108,111,99,107,65,108,108,111,99,97,116,111,114,0,0,0,0,0,0,0,0,48,32,60,32,115,105,122,101,0,0,0,0,0,0,0,0,65,108,108,111,99,97,116,101,0,0,0,0,0,0,0,0,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,98,50,95,98,108,111,99,107,83,105,122,101,115,0,0,0,0,0,98,108,111,99,107,67,111,117,110,116,32,42,32,98,108,111,99,107,83,105,122,101,32,60,61,32,98,50,95,99,104,117,110,107,83,105,122,101,0,0,70,114,101,101,0,0,0,0,98,100,45,62,112,111,115,105,116,105,111,110,46,73,115,86,97,108,105,100,40,41,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,66,111,100,121,46,99,112,112,0,0,0,0,0,0,0,98,50,66,111,100,121,0,0,98,100,45,62,108,105,110,101,97,114,86,101,108,111,99,105,116,121,46,73,115,86,97,108,105,100,40,41,0,0,0,0,98,50,73,115,86,97,108,105,100,40,98,100,45,62,97,110,103,108,101,41,0,0,0,0,98,50,73,115,86,97,108,105,100,40,98,100,45,62,97,110,103,117,108,97,114,86,101,108,111,99,105,116,121,41,0,0,98,50,73,115,86,97,108,105,100,40,98,100,45,62,97,110,103,117,108,97,114,68,97,109,112,105,110,103,41,32,38,38,32,98,100,45,62,97,110,103,117,108,97,114,68,97,109,112,105,110,103,32,62,61,32,48,46,48,102,0,0,0,0,0,98,50,73,115,86,97,108,105,100,40,98,100,45,62,108,105,110,101,97,114,68,97,109,112,105,110,103,41,32,38,38,32,98,100,45,62,108,105,110,101,97,114,68,97,109,112,105,110,103,32,62,61,32,48,46,48,102,0,0,0,0,0,0,0,109,95,119,111,114,108,100,45,62,73,115,76,111,99,107,101,100,40,41,32,61,61,32,102,97,108,115,101,0,0,0,0,67,114,101,97,116,101,70,105,120,116,117,114,101,0,0,0,109,95,116,121,112,101,32,61,61,32,98,50,95,100,121,110,97,109,105,99,66,111,100,121,0,0,0,0,0,0,0,0,82,101,115,101,116,77,97,115,115,68,97,116,97,0,0,0,109,95,73,32,62,32,48,46,48,102,0,0,0,0,0,0,0,10,0,0,0,0,0,0,240,7,0,0,0,0,0,0,48,32,60,61,32,112,114,111,120,121,73,100,32,38,38,32,112,114,111,120,121,73,100,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,0,0,0,0,0,0,46,47,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,121,110,97,109,105,99,84,114,101,101,46,104,0,0,0,0,0,0,0,71,101,116,85,115,101,114,68,97,116,97,0,0,0,0,0,71,101,116,70,97,116,65,65,66,66,0,0,0,0,0,0,0,0,0,0,32,8,0,0,5,0,0,0,6,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,49,55,98,50,67,111,110,116,97,99,116,76,105,115,116,101,110,101,114,0,0,0,0,0,120,27,0,0,8,8,0,0,109,95,112,114,111,120,121,67,111,117,110,116,32,61,61,32,48,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,70,105,120,116,117,114,101,46,99,112,112,0,0,0,0,67,114,101,97,116,101,80,114,111,120,105,101,115,0,0,0,73,115,76,111,99,107,101,100,40,41,32,61,61,32,102,97,108,115,101,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,87,111,114,108,100,46,99,112,112,0,0,0,0,0,0,67,114,101,97,116,101,66,111,100,121,0,0,0,0,0,0,98,45,62,73,115,65,99,116,105,118,101,40,41,32,61,61,32,116,114,117,101,0,0,0,83,111,108,118,101,0,0,0,115,116,97,99,107,67,111,117,110,116,32,60,32,115,116,97,99,107,83,105,122,101,0,0,116,121,112,101,65,32,61,61,32,98,50,95,100,121,110,97,109,105,99,66,111,100,121,32,124,124,32,116,121,112,101,66,32,61,61,32,98,50,95,100,121,110,97,109,105,99,66,111,100,121,0,0,0,0,0,0,83,111,108,118,101,84,79,73,0,0,0,0,0,0,0,0,97,108,112,104,97,48,32,60,32,49,46,48,102,0,0,0,46,47,66,111,120,50,68,47,67,111,109,109,111,110,47,98,50,77,97,116,104,46,104,0,65,100,118,97,110,99,101,0,109,95,106,111,105,110,116,67,111,117,110,116,32,60,32,109,95,106,111,105,110,116,67,97,112,97,99,105,116,121,0,0,46,47,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,73,115,108,97,110,100,46,104,0,0,0,0,0,65,100,100,0,0,0,0,0,109,95,99,111,110,116,97,99,116,67,111,117,110,116,32,60,32,109,95,99,111,110,116,97,99,116,67,97,112,97,99,105,116,121,0,0,0,0,0,0,109,95,98,111,100,121,67,111,117,110,116,32,60,32,109,95,98,111,100,121,67,97,112,97,99,105,116,121,0,0,0,0,0,0,0,0,40,10,0,0,7,0,0,0,8,0,0,0,3,0,0,0,0,0,0,0,49,53,98,50,67,111,110,116,97,99,116,70,105,108,116,101,114,0,0,0,0,0,0,0,120,27,0,0,16,10,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,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,99,104,97,105,110,45,62,109,95,99,111,117,110,116,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,105,115,116,97,110,99,101,46,99,112,112,0,0,83,101,116,0,0,0,0,0,102,97,108,115,101,0,0,0,98,50,68,105,115,116,97,110,99,101,0,0,0,0,0,0,71,101,116,77,101,116,114,105,99,0,0,0,0,0,0,0,71,101,116,87,105,116,110,101,115,115,80,111,105,110,116,115,0,0,0,0,0,0,0,0,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,109,95,99,111,117,110,116,0,0,0,46,47,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,105,115,116,97,110,99,101,46,104,0,0,71,101,116,86,101,114,116,101,120,0,0,0,0,0,0,0,71,101,116,67,108,111,115,101,115,116,80,111,105,110,116,0,99,97,99,104,101,45,62,99,111,117,110,116,32,60,61,32,51,0,0,0,0,0,0,0,82,101,97,100,67,97,99,104,101,0,0,0,0,0,0,0,109,95,110,111,100,101,67,111,117,110,116,32,61,61,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,121,110,97,109,105,99,84,114,101,101,46,99,112,112,0,0,0,0,0,0,0,65,108,108,111,99,97,116,101,78,111,100,101,0,0,0,0,48,32,60,61,32,110,111,100,101,73,100,32,38,38,32,110,111,100,101,73,100,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,70,114,101,101,78,111,100,101,0,0,0,0,0,0,0,0,48,32,60,32,109,95,110,111,100,101,67,111,117,110,116,0,48,32,60,61,32,112,114,111,120,121,73,100,32,38,38,32,112,114,111,120,121,73,100,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,0,0,0,0,0,0,109,95,110,111,100,101,115,91,112,114,111,120,121,73,100,93,46,73,115,76,101,97,102,40,41,0,0,0,0,0,0,0,77,111,118,101,80,114,111,120,121,0,0,0,0,0,0,0,99,104,105,108,100,49,32,33,61,32,40,45,49,41,0,0,73,110,115,101,114,116,76,101,97,102,0,0,0,0,0,0,99,104,105,108,100,50,32,33,61,32,40,45,49,41,0,0,105,65,32,33,61,32,40,45,49,41,0,0,0,0,0,0,66,97,108,97,110,99,101,0,48,32,60,61,32,105,66,32,38,38,32,105,66,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,48,32,60,61,32,105,67,32,38,38,32,105,67,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,48,32,60,61,32,105,70,32,38,38,32,105,70,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,48,32,60,61,32,105,71,32,38,38,32,105,71,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,109,95,110,111,100,101,115,91,67,45,62,112,97,114,101,110,116,93,46,99,104,105,108,100,50,32,61,61,32,105,65,0,48,32,60,61,32,105,68,32,38,38,32,105,68,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,48,32,60,61,32,105,69,32,38,38,32,105,69,32,60,32,109,95,110,111,100,101,67,97,112,97,99,105,116,121,0,0,109,95,110,111,100,101,115,91,66,45,62,112,97,114,101,110,116,93,46,99,104,105,108,100,50,32,61,61,32,105,65,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,116,97,114,103,101,116,32,62,32,116,111,108,101,114,97,110,99,101,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,84,105,109,101,79,102,73,109,112,97,99,116,46,99,112,112,0,0,0,0,0,0,98,50,84,105,109,101,79,102,73,109,112,97,99,116,0,0,102,97,108,115,101,0,0,0,69,118,97,108,117,97,116,101,0,0,0,0,0,0,0,0,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,109,95,99,111,117,110,116,0,0,0,46,47,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,68,105,115,116,97,110,99,101,46,104,0,0,71,101,116,86,101,114,116,101,120,0,0,0,0,0,0,0,70,105,110,100,77,105,110,83,101,112,97,114,97,116,105,111,110,0,0,0,0,0,0,0,48,32,60,32,99,111,117,110,116,32,38,38,32,99,111,117,110,116,32,60,32,51,0,0,73,110,105,116,105,97,108,105,122,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,95,105,110,100,101,120,32,61,61,32,48,0,0,0,0,66,111,120,50,68,47,67,111,109,109,111,110,47,98,50,83,116,97,99,107,65,108,108,111,99,97,116,111,114,46,99,112,112,0,0,0,0,0,0,0,126,98,50,83,116,97,99,107,65,108,108,111,99,97,116,111,114,0,0,0,0,0,0,0,109,95,101,110,116,114,121,67,111,117,110,116,32,61,61,32,48,0,0,0,0,0,0,0,109,95,101,110,116,114,121,67,111,117,110,116,32,60,32,98,50,95,109,97,120,83,116,97,99,107,69,110,116,114,105,101,115,0,0,0,0,0,0,0,65,108,108,111,99,97,116,101,0,0,0,0,0,0,0,0,109,95,101,110,116,114,121,67,111,117,110,116,32,62,32,48,0,0,0,0,0,0,0,0,70,114,101,101,0,0,0,0,112,32,61,61,32,101,110,116,114,121,45,62,100,97,116,97,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,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,48,32,60,61,32,116,121,112,101,49,32,38,38,32,116,121,112,101,49,32,60,32,98,50,83,104,97,112,101,58,58,101,95,116,121,112,101,67,111,117,110,116,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,111,110,116,97,99,116,46,99,112,112,0,0,0,48,32,60,61,32,116,121,112,101,50,32,38,38,32,116,121,112,101,50,32,60,32,98,50,83,104,97,112,101,58,58,101,95,116,121,112,101,67,111,117,110,116,0,0,0,0,0,0,67,114,101,97,116,101,0,0,115,95,105,110,105,116,105,97,108,105,122,101,100,32,61,61,32,116,114,117,101,0,0,0,68,101,115,116,114,111,121,0,48,32,60,61,32,116,121,112,101,65,32,38,38,32,116,121,112,101,66,32,60,32,98,50,83,104,97,112,101,58,58,101,95,116,121,112,101,67,111,117,110,116,0,0,0,0,0,0,0,0,0,0,120,17,0,0,1,0,0,0,9,0,0,0,10,0,0,0,0,0,0,0,57,98,50,67,111,110,116,97,99,116,0,0,0,0,0,0,120,27,0,0,104,17,0,0,0,0,0,0,104,18,0,0,3,0,0,0,11,0,0,0,12,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,101,100,103,101,0,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,69,100,103,101,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,0,0,98,50,69,100,103,101,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,50,50,98,50,69,100,103,101,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,0,0,0,160,27,0,0,72,18,0,0,120,17,0,0,0,0,0,0,0,0,0,0,96,19,0,0,4,0,0,0,13,0,0,0,14,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,101,100,103,101,0,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,69,100,103,101,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,0,98,50,69,100,103,101,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,50,51,98,50,69,100,103,101,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,0,160,27,0,0,64,19,0,0,120,17,0,0,0,0,0,0,0,0,0,0,96,20,0,0,5,0,0,0,15,0,0,0,16,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,80,111,108,121,103,111,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,46,99,112,112,0,0,0,98,50,80,111,108,121,103,111,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,50,53,98,50,80,111,108,121,103,111,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,160,27,0,0,64,20,0,0,120,17,0,0,0,0,0,0,0,0,0,0,72,21,0,0,6,0,0,0,17,0,0,0,18,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,80,111,108,121,103,111,110,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,98,50,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,49,54,98,50,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,160,27,0,0,48,21,0,0,120,17,0,0,0,0,0,0,116,111,105,73,110,100,101,120,65,32,60,32,109,95,98,111,100,121,67,111,117,110,116,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,98,50,73,115,108,97,110,100,46,99,112,112,0,0,0,0,0,83,111,108,118,101,84,79,73,0,0,0,0,0,0,0,0,116,111,105,73,110,100,101,120,66,32,60,32,109,95,98,111,100,121,67,111,117,110,116,0,100,101,110,32,62,32,48,46,48,102,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,67,111,108,108,105,100,101,69,100,103,101,46,99,112,112,0,0,0,0,0,0,0,98,50,67,111,108,108,105,100,101,69,100,103,101,65,110,100,67,105,114,99,108,101,0,0,48,32,60,61,32,101,100,103,101,49,32,38,38,32,101,100,103,101,49,32,60,32,112,111,108,121,49,45,62,109,95,118,101,114,116,101,120,67,111,117,110,116,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,98,50,67,111,108,108,105,100,101,80,111,108,121,103,111,110,46,99,112,112,0,0,0,0,98,50,70,105,110,100,73,110,99,105,100,101,110,116,69,100,103,101,0,0,0,0,0,0,98,50,69,100,103,101,83,101,112,97,114,97,116,105,111,110,0,0,0,0,0,0,0,0,0,0,0,0,120,23,0,0,7,0,0,0,19,0,0,0,20,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,104,97,105,110,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,104,97,105,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,0,98,50,67,104,97,105,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,50,51,98,50,67,104,97,105,110,65,110,100,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,0,0,160,27,0,0,88,23,0,0,120,17,0,0,0,0,0,0,0,0,0,0,120,24,0,0,8,0,0,0,21,0,0,0,22,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,104,97,105,110,0,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,104,97,105,110,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,98,50,67,104,97,105,110,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,112,111,108,121,103,111,110,0,0,0,0,0,50,52,98,50,67,104,97,105,110,65,110,100,80,111,108,121,103,111,110,67,111,110,116,97,99,116,0,0,0,0,0,0,160,27,0,0,88,24,0,0,120,17,0,0,0,0,0,0,0,0,0,0,88,25,0,0,9,0,0,0,23,0,0,0,24,0,0,0,0,0,0,0,109,95,102,105,120,116,117,114,101,65,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,105,114,99,108,101,67,111,110,116,97,99,116,46,99,112,112,0,0,0,0,0,98,50,67,105,114,99,108,101,67,111,110,116,97,99,116,0,109,95,102,105,120,116,117,114,101,66,45,62,71,101,116,84,121,112,101,40,41,32,61,61,32,98,50,83,104,97,112,101,58,58,101,95,99,105,114,99,108,101,0,0,0,0,0,0,49,53,98,50,67,105,114,99,108,101,67,111,110,116,97,99,116,0,0,0,0,0,0,0,160,27,0,0,64,25,0,0,120,17,0,0,0,0,0,0,112,111,105,110,116,67,111,117,110,116,32,62,32,48,0,0,66,111,120,50,68,47,68,121,110,97,109,105,99,115,47,67,111,110,116,97,99,116,115,47,98,50,67,111,110,116,97,99,116,83,111,108,118,101,114,46,99,112,112,0,0,0,0,0,98,50,67,111,110,116,97,99,116,83,111,108,118,101,114,0,109,97,110,105,102,111,108,100,45,62,112,111,105,110,116,67,111,117,110,116,32,62,32,48,0,0,0,0,0,0,0,0,73,110,105,116,105,97,108,105,122,101,86,101,108,111,99,105,116,121,67,111,110,115,116,114,97,105,110,116,115,0,0,0,112,111,105,110,116,67,111,117,110,116,32,61,61,32,49,32,124,124,32,112,111,105,110,116,67,111,117,110,116,32,61,61,32,50,0,0,0,0,0,0,83,111,108,118,101,86,101,108,111,99,105,116,121,67,111,110,115,116,114,97,105,110,116,115,0,0,0,0,0,0,0,0,97,46,120,32,62,61,32,48,46,48,102,32,38,38,32,97,46,121,32,62,61,32,48,46,48,102,0,0,0,0,0,0,112,99,45,62,112,111,105,110,116,67,111,117,110,116,32,62,32,48,0,0,0,0,0,0,73,110,105,116,105,97,108,105,122,101,0,0,0,0,0,0,66,111,120,50,68,47,67,111,108,108,105,115,105,111,110,47,83,104,97,112,101,115,47,98,50,67,104,97,105,110,83,104,97,112,101,46,99,112,112,0,48,32,60,61,32,105,110,100,101,120,32,38,38,32,105,110,100,101,120,32,60,32,109,95,99,111,117,110,116,32,45,32,49,0,0,0,0,0,0,0,71,101,116,67,104,105,108,100,69,100,103,101,0,0,0,0,83,116,57,116,121,112,101,95,105,110,102,111,0,0,0,0,120,27,0,0,232,26,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,0,160,27,0,0,0,27,0,0,248,26,0,0,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,160,27,0,0,56,27,0,0,40,27,0,0,0,0,0,0,0,0,0,0,96,27,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,10,0,0,0,0,0,0,0,232,27,0,0,25,0,0,0,29,0,0,0,27,0,0,0,28,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,11,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,160,27,0,0,192,27,0,0,96,27,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,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,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,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,0,0,40,30,0,0,30,0,0,0,31,0,0,0,3,0,0,0,0,0,0,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,0,83,116,57,98,97,100,95,97,108,108,111,99,0,0,0,0,160,27,0,0,24,30,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE);
1376
1377
1378
1379
1380var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
1381
1382assert(tempDoublePtr % 8 == 0);
1383
1384function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
1385
1386 HEAP8[tempDoublePtr] = HEAP8[ptr];
1387
1388 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1389
1390 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1391
1392 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1393
1394}
1395
1396function copyTempDouble(ptr) {
1397
1398 HEAP8[tempDoublePtr] = HEAP8[ptr];
1399
1400 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1401
1402 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1403
1404 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1405
1406 HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
1407
1408 HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
1409
1410 HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
1411
1412 HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
1413
1414}
1415
1416
1417 function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg) {
1418 Module['noExitRuntime'] = true;
1419
1420 Browser.mainLoop.runner = function Browser_mainLoop_runner() {
1421 if (ABORT) return;
1422 if (Browser.mainLoop.queue.length > 0) {
1423 var start = Date.now();
1424 var blocker = Browser.mainLoop.queue.shift();
1425 blocker.func(blocker.arg);
1426 if (Browser.mainLoop.remainingBlockers) {
1427 var remaining = Browser.mainLoop.remainingBlockers;
1428 var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining);
1429 if (blocker.counted) {
1430 Browser.mainLoop.remainingBlockers = next;
1431 } else {
1432 // not counted, but move the progress along a tiny bit
1433 next = next + 0.5; // do not steal all the next one's progress
1434 Browser.mainLoop.remainingBlockers = (8*remaining + next)/9;
1435 }
1436 }
1437 console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers);
1438 Browser.mainLoop.updateStatus();
1439 setTimeout(Browser.mainLoop.runner, 0);
1440 return;
1441 }
1442 if (Browser.mainLoop.shouldPause) {
1443 // catch pauses from non-main loop sources
1444 Browser.mainLoop.paused = true;
1445 Browser.mainLoop.shouldPause = false;
1446 return;
1447 }
1448
1449 // Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize
1450 // VBO double-buffering and reduce GPU stalls.
1451
1452 if (Browser.mainLoop.method === 'timeout' && Module.ctx) {
1453 Module.printErr('Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!');
1454 Browser.mainLoop.method = ''; // just warn once per call to set main loop
1455 }
1456
1457 if (Module['preMainLoop']) {
1458 Module['preMainLoop']();
1459 }
1460
1461 try {
1462 if (typeof arg !== 'undefined') {
1463 Runtime.dynCall('vi', func, [arg]);
1464 } else {
1465 Runtime.dynCall('v', func);
1466 }
1467 } catch (e) {
1468 if (e instanceof ExitStatus) {
1469 return;
1470 } else {
1471 if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]);
1472 throw e;
1473 }
1474 }
1475
1476 if (Module['postMainLoop']) {
1477 Module['postMainLoop']();
1478 }
1479
1480 if (Browser.mainLoop.shouldPause) {
1481 // catch pauses from the main loop itself
1482 Browser.mainLoop.paused = true;
1483 Browser.mainLoop.shouldPause = false;
1484 return;
1485 }
1486 Browser.mainLoop.scheduler();
1487 }
1488 if (fps && fps > 0) {
1489 Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
1490 setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop
1491 };
1492 Browser.mainLoop.method = 'timeout';
1493 } else {
1494 Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
1495 Browser.requestAnimationFrame(Browser.mainLoop.runner);
1496 };
1497 Browser.mainLoop.method = 'rAF';
1498 }
1499 Browser.mainLoop.scheduler();
1500
1501 if (simulateInfiniteLoop) {
1502 throw 'SimulateInfiniteLoop';
1503 }
1504 }
1505
1506 var _cosf=Math_cos;
1507
1508 function ___cxa_pure_virtual() {
1509 ABORT = true;
1510 throw 'Pure virtual function called!';
1511 }
1512
1513 function _time(ptr) {
1514 var ret = Math.floor(Date.now()/1000);
1515 if (ptr) {
1516 HEAP32[((ptr)>>2)]=ret;
1517 }
1518 return ret;
1519 }
1520
1521 function ___assert_fail(condition, filename, line, func) {
1522 ABORT = true;
1523 throw 'Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function'] + ' at ' + stackTrace();
1524 }
1525
1526
1527 function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()
1528 return !!__ZSt18uncaught_exceptionv.uncaught_exception;
1529 }
1530
1531
1532
1533 function ___cxa_is_number_type(type) {
1534 var isNumber = false;
1535 try { if (type == __ZTIi) isNumber = true } catch(e){}
1536 try { if (type == __ZTIj) isNumber = true } catch(e){}
1537 try { if (type == __ZTIl) isNumber = true } catch(e){}
1538 try { if (type == __ZTIm) isNumber = true } catch(e){}
1539 try { if (type == __ZTIx) isNumber = true } catch(e){}
1540 try { if (type == __ZTIy) isNumber = true } catch(e){}
1541 try { if (type == __ZTIf) isNumber = true } catch(e){}
1542 try { if (type == __ZTId) isNumber = true } catch(e){}
1543 try { if (type == __ZTIe) isNumber = true } catch(e){}
1544 try { if (type == __ZTIc) isNumber = true } catch(e){}
1545 try { if (type == __ZTIa) isNumber = true } catch(e){}
1546 try { if (type == __ZTIh) isNumber = true } catch(e){}
1547 try { if (type == __ZTIs) isNumber = true } catch(e){}
1548 try { if (type == __ZTIt) isNumber = true } catch(e){}
1549 return isNumber;
1550 }function ___cxa_does_inherit(definiteType, possibilityType, possibility) {
1551 if (possibility == 0) return false;
1552 if (possibilityType == 0 || possibilityType == definiteType)
1553 return true;
1554 var possibility_type_info;
1555 if (___cxa_is_number_type(possibilityType)) {
1556 possibility_type_info = possibilityType;
1557 } else {
1558 var possibility_type_infoAddr = HEAP32[((possibilityType)>>2)] - 8;
1559 possibility_type_info = HEAP32[((possibility_type_infoAddr)>>2)];
1560 }
1561 switch (possibility_type_info) {
1562 case 0: // possibility is a pointer
1563 // See if definite type is a pointer
1564 var definite_type_infoAddr = HEAP32[((definiteType)>>2)] - 8;
1565 var definite_type_info = HEAP32[((definite_type_infoAddr)>>2)];
1566 if (definite_type_info == 0) {
1567 // Also a pointer; compare base types of pointers
1568 var defPointerBaseAddr = definiteType+8;
1569 var defPointerBaseType = HEAP32[((defPointerBaseAddr)>>2)];
1570 var possPointerBaseAddr = possibilityType+8;
1571 var possPointerBaseType = HEAP32[((possPointerBaseAddr)>>2)];
1572 return ___cxa_does_inherit(defPointerBaseType, possPointerBaseType, possibility);
1573 } else
1574 return false; // one pointer and one non-pointer
1575 case 1: // class with no base class
1576 return false;
1577 case 2: // class with base class
1578 var parentTypeAddr = possibilityType + 8;
1579 var parentType = HEAP32[((parentTypeAddr)>>2)];
1580 return ___cxa_does_inherit(definiteType, parentType, possibility);
1581 default:
1582 return false; // some unencountered type
1583 }
1584 }
1585
1586
1587
1588 var ___cxa_last_thrown_exception=0;function ___resumeException(ptr) {
1589 if (!___cxa_last_thrown_exception) { ___cxa_last_thrown_exception = ptr; }
1590 throw ptr + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";
1591 }
1592
1593 var ___cxa_exception_header_size=8;function ___cxa_find_matching_catch(thrown, throwntype) {
1594 if (thrown == -1) thrown = ___cxa_last_thrown_exception;
1595 header = thrown - ___cxa_exception_header_size;
1596 if (throwntype == -1) throwntype = HEAP32[((header)>>2)];
1597 var typeArray = Array.prototype.slice.call(arguments, 2);
1598
1599 // If throwntype is a pointer, this means a pointer has been
1600 // thrown. When a pointer is thrown, actually what's thrown
1601 // is a pointer to the pointer. We'll dereference it.
1602 if (throwntype != 0 && !___cxa_is_number_type(throwntype)) {
1603 var throwntypeInfoAddr= HEAP32[((throwntype)>>2)] - 8;
1604 var throwntypeInfo= HEAP32[((throwntypeInfoAddr)>>2)];
1605 if (throwntypeInfo == 0)
1606 thrown = HEAP32[((thrown)>>2)];
1607 }
1608 // The different catch blocks are denoted by different types.
1609 // Due to inheritance, those types may not precisely match the
1610 // type of the thrown object. Find one which matches, and
1611 // return the type of the catch block which should be called.
1612 for (var i = 0; i < typeArray.length; i++) {
1613 if (___cxa_does_inherit(typeArray[i], throwntype, thrown))
1614 return ((asm["setTempRet0"](typeArray[i]),thrown)|0);
1615 }
1616 // Shouldn't happen unless we have bogus data in typeArray
1617 // or encounter a type for which emscripten doesn't have suitable
1618 // typeinfo defined. Best-efforts match just in case.
1619 return ((asm["setTempRet0"](throwntype),thrown)|0);
1620 }function ___cxa_throw(ptr, type, destructor) {
1621 if (!___cxa_throw.initialized) {
1622 try {
1623 HEAP32[((__ZTVN10__cxxabiv119__pointer_type_infoE)>>2)]=0; // Workaround for libcxxabi integration bug
1624 } catch(e){}
1625 try {
1626 HEAP32[((__ZTVN10__cxxabiv117__class_type_infoE)>>2)]=1; // Workaround for libcxxabi integration bug
1627 } catch(e){}
1628 try {
1629 HEAP32[((__ZTVN10__cxxabiv120__si_class_type_infoE)>>2)]=2; // Workaround for libcxxabi integration bug
1630 } catch(e){}
1631 ___cxa_throw.initialized = true;
1632 }
1633 var header = ptr - ___cxa_exception_header_size;
1634 HEAP32[((header)>>2)]=type;
1635 HEAP32[(((header)+(4))>>2)]=destructor;
1636 ___cxa_last_thrown_exception = ptr;
1637 if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) {
1638 __ZSt18uncaught_exceptionv.uncaught_exception = 1;
1639 } else {
1640 __ZSt18uncaught_exceptionv.uncaught_exception++;
1641 }
1642 throw ptr + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";
1643 }
1644
1645
1646 Module["_memset"] = _memset;
1647
1648
1649
1650 function __exit(status) {
1651 // void _exit(int status);
1652 // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
1653 Module['exit'](status);
1654 }function _exit(status) {
1655 __exit(status);
1656 }function __ZSt9terminatev() {
1657 _exit(-1234);
1658 }
1659
1660 function _abort() {
1661 Module['abort']();
1662 }
1663
1664
1665
1666
1667
1668 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};
1669
1670 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"};
1671
1672
1673 var ___errno_state=0;function ___setErrNo(value) {
1674 // For convenient setting and returning of errno.
1675 HEAP32[((___errno_state)>>2)]=value;
1676 return value;
1677 }
1678
1679 var PATH={splitPath:function (filename) {
1680 var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
1681 return splitPathRe.exec(filename).slice(1);
1682 },normalizeArray:function (parts, allowAboveRoot) {
1683 // if the path tries to go above the root, `up` ends up > 0
1684 var up = 0;
1685 for (var i = parts.length - 1; i >= 0; i--) {
1686 var last = parts[i];
1687 if (last === '.') {
1688 parts.splice(i, 1);
1689 } else if (last === '..') {
1690 parts.splice(i, 1);
1691 up++;
1692 } else if (up) {
1693 parts.splice(i, 1);
1694 up--;
1695 }
1696 }
1697 // if the path is allowed to go above the root, restore leading ..s
1698 if (allowAboveRoot) {
1699 for (; up--; up) {
1700 parts.unshift('..');
1701 }
1702 }
1703 return parts;
1704 },normalize:function (path) {
1705 var isAbsolute = path.charAt(0) === '/',
1706 trailingSlash = path.substr(-1) === '/';
1707 // Normalize the path
1708 path = PATH.normalizeArray(path.split('/').filter(function(p) {
1709 return !!p;
1710 }), !isAbsolute).join('/');
1711 if (!path && !isAbsolute) {
1712 path = '.';
1713 }
1714 if (path && trailingSlash) {
1715 path += '/';
1716 }
1717 return (isAbsolute ? '/' : '') + path;
1718 },dirname:function (path) {
1719 var result = PATH.splitPath(path),
1720 root = result[0],
1721 dir = result[1];
1722 if (!root && !dir) {
1723 // No dirname whatsoever
1724 return '.';
1725 }
1726 if (dir) {
1727 // It has a dirname, strip trailing slash
1728 dir = dir.substr(0, dir.length - 1);
1729 }
1730 return root + dir;
1731 },basename:function (path) {
1732 // EMSCRIPTEN return '/'' for '/', not an empty string
1733 if (path === '/') return '/';
1734 var lastSlash = path.lastIndexOf('/');
1735 if (lastSlash === -1) return path;
1736 return path.substr(lastSlash+1);
1737 },extname:function (path) {
1738 return PATH.splitPath(path)[3];
1739 },join:function () {
1740 var paths = Array.prototype.slice.call(arguments, 0);
1741 return PATH.normalize(paths.join('/'));
1742 },join2:function (l, r) {
1743 return PATH.normalize(l + '/' + r);
1744 },resolve:function () {
1745 var resolvedPath = '',
1746 resolvedAbsolute = false;
1747 for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
1748 var path = (i >= 0) ? arguments[i] : FS.cwd();
1749 // Skip empty and invalid entries
1750 if (typeof path !== 'string') {
1751 throw new TypeError('Arguments to path.resolve must be strings');
1752 } else if (!path) {
1753 continue;
1754 }
1755 resolvedPath = path + '/' + resolvedPath;
1756 resolvedAbsolute = path.charAt(0) === '/';
1757 }
1758 // At this point the path should be resolved to a full absolute path, but
1759 // handle relative paths to be safe (might happen when process.cwd() fails)
1760 resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {
1761 return !!p;
1762 }), !resolvedAbsolute).join('/');
1763 return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
1764 },relative:function (from, to) {
1765 from = PATH.resolve(from).substr(1);
1766 to = PATH.resolve(to).substr(1);
1767 function trim(arr) {
1768 var start = 0;
1769 for (; start < arr.length; start++) {
1770 if (arr[start] !== '') break;
1771 }
1772 var end = arr.length - 1;
1773 for (; end >= 0; end--) {
1774 if (arr[end] !== '') break;
1775 }
1776 if (start > end) return [];
1777 return arr.slice(start, end - start + 1);
1778 }
1779 var fromParts = trim(from.split('/'));
1780 var toParts = trim(to.split('/'));
1781 var length = Math.min(fromParts.length, toParts.length);
1782 var samePartsLength = length;
1783 for (var i = 0; i < length; i++) {
1784 if (fromParts[i] !== toParts[i]) {
1785 samePartsLength = i;
1786 break;
1787 }
1788 }
1789 var outputParts = [];
1790 for (var i = samePartsLength; i < fromParts.length; i++) {
1791 outputParts.push('..');
1792 }
1793 outputParts = outputParts.concat(toParts.slice(samePartsLength));
1794 return outputParts.join('/');
1795 }};
1796
1797 var TTY={ttys:[],init:function () {
1798 // https://github.com/kripken/emscripten/pull/1555
1799 // if (ENVIRONMENT_IS_NODE) {
1800 // // currently, FS.init does not distinguish if process.stdin is a file or TTY
1801 // // device, it always assumes it's a TTY device. because of this, we're forcing
1802 // // process.stdin to UTF8 encoding to at least make stdin reading compatible
1803 // // with text files until FS.init can be refactored.
1804 // process['stdin']['setEncoding']('utf8');
1805 // }
1806 },shutdown:function () {
1807 // https://github.com/kripken/emscripten/pull/1555
1808 // if (ENVIRONMENT_IS_NODE) {
1809 // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
1810 // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation
1811 // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?
1812 // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
1813 // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call
1814 // process['stdin']['pause']();
1815 // }
1816 },register:function (dev, ops) {
1817 TTY.ttys[dev] = { input: [], output: [], ops: ops };
1818 FS.registerDevice(dev, TTY.stream_ops);
1819 },stream_ops:{open:function (stream) {
1820 var tty = TTY.ttys[stream.node.rdev];
1821 if (!tty) {
1822 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
1823 }
1824 stream.tty = tty;
1825 stream.seekable = false;
1826 },close:function (stream) {
1827 // flush any pending line data
1828 if (stream.tty.output.length) {
1829 stream.tty.ops.put_char(stream.tty, 10);
1830 }
1831 },read:function (stream, buffer, offset, length, pos /* ignored */) {
1832 if (!stream.tty || !stream.tty.ops.get_char) {
1833 throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1834 }
1835 var bytesRead = 0;
1836 for (var i = 0; i < length; i++) {
1837 var result;
1838 try {
1839 result = stream.tty.ops.get_char(stream.tty);
1840 } catch (e) {
1841 throw new FS.ErrnoError(ERRNO_CODES.EIO);
1842 }
1843 if (result === undefined && bytesRead === 0) {
1844 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
1845 }
1846 if (result === null || result === undefined) break;
1847 bytesRead++;
1848 buffer[offset+i] = result;
1849 }
1850 if (bytesRead) {
1851 stream.node.timestamp = Date.now();
1852 }
1853 return bytesRead;
1854 },write:function (stream, buffer, offset, length, pos) {
1855 if (!stream.tty || !stream.tty.ops.put_char) {
1856 throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
1857 }
1858 for (var i = 0; i < length; i++) {
1859 try {
1860 stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
1861 } catch (e) {
1862 throw new FS.ErrnoError(ERRNO_CODES.EIO);
1863 }
1864 }
1865 if (length) {
1866 stream.node.timestamp = Date.now();
1867 }
1868 return i;
1869 }},default_tty_ops:{get_char:function (tty) {
1870 if (!tty.input.length) {
1871 var result = null;
1872 if (ENVIRONMENT_IS_NODE) {
1873 result = process['stdin']['read']();
1874 if (!result) {
1875 if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) {
1876 return null; // EOF
1877 }
1878 return undefined; // no data available
1879 }
1880 } else if (typeof window != 'undefined' &&
1881 typeof window.prompt == 'function') {
1882 // Browser.
1883 result = window.prompt('Input: '); // returns null on cancel
1884 if (result !== null) {
1885 result += '\n';
1886 }
1887 } else if (typeof readline == 'function') {
1888 // Command line.
1889 result = readline();
1890 if (result !== null) {
1891 result += '\n';
1892 }
1893 }
1894 if (!result) {
1895 return null;
1896 }
1897 tty.input = intArrayFromString(result, true);
1898 }
1899 return tty.input.shift();
1900 },put_char:function (tty, val) {
1901 if (val === null || val === 10) {
1902 Module['print'](tty.output.join(''));
1903 tty.output = [];
1904 } else {
1905 tty.output.push(TTY.utf8.processCChar(val));
1906 }
1907 }},default_tty1_ops:{put_char:function (tty, val) {
1908 if (val === null || val === 10) {
1909 Module['printErr'](tty.output.join(''));
1910 tty.output = [];
1911 } else {
1912 tty.output.push(TTY.utf8.processCChar(val));
1913 }
1914 }}};
1915
1916 var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3,mount:function (mount) {
1917 return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
1918 },createNode:function (parent, name, mode, dev) {
1919 if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
1920 // no supported
1921 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
1922 }
1923 if (!MEMFS.ops_table) {
1924 MEMFS.ops_table = {
1925 dir: {
1926 node: {
1927 getattr: MEMFS.node_ops.getattr,
1928 setattr: MEMFS.node_ops.setattr,
1929 lookup: MEMFS.node_ops.lookup,
1930 mknod: MEMFS.node_ops.mknod,
1931 rename: MEMFS.node_ops.rename,
1932 unlink: MEMFS.node_ops.unlink,
1933 rmdir: MEMFS.node_ops.rmdir,
1934 readdir: MEMFS.node_ops.readdir,
1935 symlink: MEMFS.node_ops.symlink
1936 },
1937 stream: {
1938 llseek: MEMFS.stream_ops.llseek
1939 }
1940 },
1941 file: {
1942 node: {
1943 getattr: MEMFS.node_ops.getattr,
1944 setattr: MEMFS.node_ops.setattr
1945 },
1946 stream: {
1947 llseek: MEMFS.stream_ops.llseek,
1948 read: MEMFS.stream_ops.read,
1949 write: MEMFS.stream_ops.write,
1950 allocate: MEMFS.stream_ops.allocate,
1951 mmap: MEMFS.stream_ops.mmap
1952 }
1953 },
1954 link: {
1955 node: {
1956 getattr: MEMFS.node_ops.getattr,
1957 setattr: MEMFS.node_ops.setattr,
1958 readlink: MEMFS.node_ops.readlink
1959 },
1960 stream: {}
1961 },
1962 chrdev: {
1963 node: {
1964 getattr: MEMFS.node_ops.getattr,
1965 setattr: MEMFS.node_ops.setattr
1966 },
1967 stream: FS.chrdev_stream_ops
1968 },
1969 };
1970 }
1971 var node = FS.createNode(parent, name, mode, dev);
1972 if (FS.isDir(node.mode)) {
1973 node.node_ops = MEMFS.ops_table.dir.node;
1974 node.stream_ops = MEMFS.ops_table.dir.stream;
1975 node.contents = {};
1976 } else if (FS.isFile(node.mode)) {
1977 node.node_ops = MEMFS.ops_table.file.node;
1978 node.stream_ops = MEMFS.ops_table.file.stream;
1979 node.contents = [];
1980 node.contentMode = MEMFS.CONTENT_FLEXIBLE;
1981 } else if (FS.isLink(node.mode)) {
1982 node.node_ops = MEMFS.ops_table.link.node;
1983 node.stream_ops = MEMFS.ops_table.link.stream;
1984 } else if (FS.isChrdev(node.mode)) {
1985 node.node_ops = MEMFS.ops_table.chrdev.node;
1986 node.stream_ops = MEMFS.ops_table.chrdev.stream;
1987 }
1988 node.timestamp = Date.now();
1989 // add the new node to the parent
1990 if (parent) {
1991 parent.contents[name] = node;
1992 }
1993 return node;
1994 },ensureFlexible:function (node) {
1995 if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) {
1996 var contents = node.contents;
1997 node.contents = Array.prototype.slice.call(contents);
1998 node.contentMode = MEMFS.CONTENT_FLEXIBLE;
1999 }
2000 },node_ops:{getattr:function (node) {
2001 var attr = {};
2002 // device numbers reuse inode numbers.
2003 attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
2004 attr.ino = node.id;
2005 attr.mode = node.mode;
2006 attr.nlink = 1;
2007 attr.uid = 0;
2008 attr.gid = 0;
2009 attr.rdev = node.rdev;
2010 if (FS.isDir(node.mode)) {
2011 attr.size = 4096;
2012 } else if (FS.isFile(node.mode)) {
2013 attr.size = node.contents.length;
2014 } else if (FS.isLink(node.mode)) {
2015 attr.size = node.link.length;
2016 } else {
2017 attr.size = 0;
2018 }
2019 attr.atime = new Date(node.timestamp);
2020 attr.mtime = new Date(node.timestamp);
2021 attr.ctime = new Date(node.timestamp);
2022 // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
2023 // but this is not required by the standard.
2024 attr.blksize = 4096;
2025 attr.blocks = Math.ceil(attr.size / attr.blksize);
2026 return attr;
2027 },setattr:function (node, attr) {
2028 if (attr.mode !== undefined) {
2029 node.mode = attr.mode;
2030 }
2031 if (attr.timestamp !== undefined) {
2032 node.timestamp = attr.timestamp;
2033 }
2034 if (attr.size !== undefined) {
2035 MEMFS.ensureFlexible(node);
2036 var contents = node.contents;
2037 if (attr.size < contents.length) contents.length = attr.size;
2038 else while (attr.size > contents.length) contents.push(0);
2039 }
2040 },lookup:function (parent, name) {
2041 throw FS.genericErrors[ERRNO_CODES.ENOENT];
2042 },mknod:function (parent, name, mode, dev) {
2043 return MEMFS.createNode(parent, name, mode, dev);
2044 },rename:function (old_node, new_dir, new_name) {
2045 // if we're overwriting a directory at new_name, make sure it's empty.
2046 if (FS.isDir(old_node.mode)) {
2047 var new_node;
2048 try {
2049 new_node = FS.lookupNode(new_dir, new_name);
2050 } catch (e) {
2051 }
2052 if (new_node) {
2053 for (var i in new_node.contents) {
2054 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
2055 }
2056 }
2057 }
2058 // do the internal rewiring
2059 delete old_node.parent.contents[old_node.name];
2060 old_node.name = new_name;
2061 new_dir.contents[new_name] = old_node;
2062 old_node.parent = new_dir;
2063 },unlink:function (parent, name) {
2064 delete parent.contents[name];
2065 },rmdir:function (parent, name) {
2066 var node = FS.lookupNode(parent, name);
2067 for (var i in node.contents) {
2068 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
2069 }
2070 delete parent.contents[name];
2071 },readdir:function (node) {
2072 var entries = ['.', '..']
2073 for (var key in node.contents) {
2074 if (!node.contents.hasOwnProperty(key)) {
2075 continue;
2076 }
2077 entries.push(key);
2078 }
2079 return entries;
2080 },symlink:function (parent, newname, oldpath) {
2081 var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);
2082 node.link = oldpath;
2083 return node;
2084 },readlink:function (node) {
2085 if (!FS.isLink(node.mode)) {
2086 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2087 }
2088 return node.link;
2089 }},stream_ops:{read:function (stream, buffer, offset, length, position) {
2090 var contents = stream.node.contents;
2091 if (position >= contents.length)
2092 return 0;
2093 var size = Math.min(contents.length - position, length);
2094 assert(size >= 0);
2095 if (size > 8 && contents.subarray) { // non-trivial, and typed array
2096 buffer.set(contents.subarray(position, position + size), offset);
2097 } else
2098 {
2099 for (var i = 0; i < size; i++) {
2100 buffer[offset + i] = contents[position + i];
2101 }
2102 }
2103 return size;
2104 },write:function (stream, buffer, offset, length, position, canOwn) {
2105 var node = stream.node;
2106 node.timestamp = Date.now();
2107 var contents = node.contents;
2108 if (length && contents.length === 0 && position === 0 && buffer.subarray) {
2109 // just replace it with the new data
2110 if (canOwn && offset === 0) {
2111 node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source.
2112 node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTENT_OWNING : MEMFS.CONTENT_FIXED;
2113 } else {
2114 node.contents = new Uint8Array(buffer.subarray(offset, offset+length));
2115 node.contentMode = MEMFS.CONTENT_FIXED;
2116 }
2117 return length;
2118 }
2119 MEMFS.ensureFlexible(node);
2120 var contents = node.contents;
2121 while (contents.length < position) contents.push(0);
2122 for (var i = 0; i < length; i++) {
2123 contents[position + i] = buffer[offset + i];
2124 }
2125 return length;
2126 },llseek:function (stream, offset, whence) {
2127 var position = offset;
2128 if (whence === 1) { // SEEK_CUR.
2129 position += stream.position;
2130 } else if (whence === 2) { // SEEK_END.
2131 if (FS.isFile(stream.node.mode)) {
2132 position += stream.node.contents.length;
2133 }
2134 }
2135 if (position < 0) {
2136 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2137 }
2138 stream.ungotten = [];
2139 stream.position = position;
2140 return position;
2141 },allocate:function (stream, offset, length) {
2142 MEMFS.ensureFlexible(stream.node);
2143 var contents = stream.node.contents;
2144 var limit = offset + length;
2145 while (limit > contents.length) contents.push(0);
2146 },mmap:function (stream, buffer, offset, length, position, prot, flags) {
2147 if (!FS.isFile(stream.node.mode)) {
2148 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
2149 }
2150 var ptr;
2151 var allocated;
2152 var contents = stream.node.contents;
2153 // Only make a new copy when MAP_PRIVATE is specified.
2154 if ( !(flags & 2) &&
2155 (contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
2156 // We can't emulate MAP_SHARED when the file is not backed by the buffer
2157 // we're mapping to (e.g. the HEAP buffer).
2158 allocated = false;
2159 ptr = contents.byteOffset;
2160 } else {
2161 // Try to avoid unnecessary slices.
2162 if (position > 0 || position + length < contents.length) {
2163 if (contents.subarray) {
2164 contents = contents.subarray(position, position + length);
2165 } else {
2166 contents = Array.prototype.slice.call(contents, position, position + length);
2167 }
2168 }
2169 allocated = true;
2170 ptr = _malloc(length);
2171 if (!ptr) {
2172 throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
2173 }
2174 buffer.set(contents, ptr);
2175 }
2176 return { ptr: ptr, allocated: allocated };
2177 }}};
2178
2179 var IDBFS={dbs:{},indexedDB:function () {
2180 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
2181 },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
2182 // reuse all of the core MEMFS functionality
2183 return MEMFS.mount.apply(null, arguments);
2184 },syncfs:function (mount, populate, callback) {
2185 IDBFS.getLocalSet(mount, function(err, local) {
2186 if (err) return callback(err);
2187
2188 IDBFS.getRemoteSet(mount, function(err, remote) {
2189 if (err) return callback(err);
2190
2191 var src = populate ? remote : local;
2192 var dst = populate ? local : remote;
2193
2194 IDBFS.reconcile(src, dst, callback);
2195 });
2196 });
2197 },getDB:function (name, callback) {
2198 // check the cache first
2199 var db = IDBFS.dbs[name];
2200 if (db) {
2201 return callback(null, db);
2202 }
2203
2204 var req;
2205 try {
2206 req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
2207 } catch (e) {
2208 return callback(e);
2209 }
2210 req.onupgradeneeded = function(e) {
2211 var db = e.target.result;
2212 var transaction = e.target.transaction;
2213
2214 var fileStore;
2215
2216 if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
2217 fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
2218 } else {
2219 fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
2220 }
2221
2222 fileStore.createIndex('timestamp', 'timestamp', { unique: false });
2223 };
2224 req.onsuccess = function() {
2225 db = req.result;
2226
2227 // add to the cache
2228 IDBFS.dbs[name] = db;
2229 callback(null, db);
2230 };
2231 req.onerror = function() {
2232 callback(this.error);
2233 };
2234 },getLocalSet:function (mount, callback) {
2235 var entries = {};
2236
2237 function isRealDir(p) {
2238 return p !== '.' && p !== '..';
2239 };
2240 function toAbsolute(root) {
2241 return function(p) {
2242 return PATH.join2(root, p);
2243 }
2244 };
2245
2246 var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
2247
2248 while (check.length) {
2249 var path = check.pop();
2250 var stat;
2251
2252 try {
2253 stat = FS.stat(path);
2254 } catch (e) {
2255 return callback(e);
2256 }
2257
2258 if (FS.isDir(stat.mode)) {
2259 check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));
2260 }
2261
2262 entries[path] = { timestamp: stat.mtime };
2263 }
2264
2265 return callback(null, { type: 'local', entries: entries });
2266 },getRemoteSet:function (mount, callback) {
2267 var entries = {};
2268
2269 IDBFS.getDB(mount.mountpoint, function(err, db) {
2270 if (err) return callback(err);
2271
2272 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
2273 transaction.onerror = function() { callback(this.error); };
2274
2275 var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2276 var index = store.index('timestamp');
2277
2278 index.openKeyCursor().onsuccess = function(event) {
2279 var cursor = event.target.result;
2280
2281 if (!cursor) {
2282 return callback(null, { type: 'remote', db: db, entries: entries });
2283 }
2284
2285 entries[cursor.primaryKey] = { timestamp: cursor.key };
2286
2287 cursor.continue();
2288 };
2289 });
2290 },loadLocalEntry:function (path, callback) {
2291 var stat, node;
2292
2293 try {
2294 var lookup = FS.lookupPath(path);
2295 node = lookup.node;
2296 stat = FS.stat(path);
2297 } catch (e) {
2298 return callback(e);
2299 }
2300
2301 if (FS.isDir(stat.mode)) {
2302 return callback(null, { timestamp: stat.mtime, mode: stat.mode });
2303 } else if (FS.isFile(stat.mode)) {
2304 return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents });
2305 } else {
2306 return callback(new Error('node type not supported'));
2307 }
2308 },storeLocalEntry:function (path, entry, callback) {
2309 try {
2310 if (FS.isDir(entry.mode)) {
2311 FS.mkdir(path, entry.mode);
2312 } else if (FS.isFile(entry.mode)) {
2313 FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true });
2314 } else {
2315 return callback(new Error('node type not supported'));
2316 }
2317
2318 FS.utime(path, entry.timestamp, entry.timestamp);
2319 } catch (e) {
2320 return callback(e);
2321 }
2322
2323 callback(null);
2324 },removeLocalEntry:function (path, callback) {
2325 try {
2326 var lookup = FS.lookupPath(path);
2327 var stat = FS.stat(path);
2328
2329 if (FS.isDir(stat.mode)) {
2330 FS.rmdir(path);
2331 } else if (FS.isFile(stat.mode)) {
2332 FS.unlink(path);
2333 }
2334 } catch (e) {
2335 return callback(e);
2336 }
2337
2338 callback(null);
2339 },loadRemoteEntry:function (store, path, callback) {
2340 var req = store.get(path);
2341 req.onsuccess = function(event) { callback(null, event.target.result); };
2342 req.onerror = function() { callback(this.error); };
2343 },storeRemoteEntry:function (store, path, entry, callback) {
2344 var req = store.put(entry, path);
2345 req.onsuccess = function() { callback(null); };
2346 req.onerror = function() { callback(this.error); };
2347 },removeRemoteEntry:function (store, path, callback) {
2348 var req = store.delete(path);
2349 req.onsuccess = function() { callback(null); };
2350 req.onerror = function() { callback(this.error); };
2351 },reconcile:function (src, dst, callback) {
2352 var total = 0;
2353
2354 var create = [];
2355 Object.keys(src.entries).forEach(function (key) {
2356 var e = src.entries[key];
2357 var e2 = dst.entries[key];
2358 if (!e2 || e.timestamp > e2.timestamp) {
2359 create.push(key);
2360 total++;
2361 }
2362 });
2363
2364 var remove = [];
2365 Object.keys(dst.entries).forEach(function (key) {
2366 var e = dst.entries[key];
2367 var e2 = src.entries[key];
2368 if (!e2) {
2369 remove.push(key);
2370 total++;
2371 }
2372 });
2373
2374 if (!total) {
2375 return callback(null);
2376 }
2377
2378 var errored = false;
2379 var completed = 0;
2380 var db = src.type === 'remote' ? src.db : dst.db;
2381 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
2382 var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
2383
2384 function done(err) {
2385 if (err) {
2386 if (!done.errored) {
2387 done.errored = true;
2388 return callback(err);
2389 }
2390 return;
2391 }
2392 if (++completed >= total) {
2393 return callback(null);
2394 }
2395 };
2396
2397 transaction.onerror = function() { done(this.error); };
2398
2399 // sort paths in ascending order so directory entries are created
2400 // before the files inside them
2401 create.sort().forEach(function (path) {
2402 if (dst.type === 'local') {
2403 IDBFS.loadRemoteEntry(store, path, function (err, entry) {
2404 if (err) return done(err);
2405 IDBFS.storeLocalEntry(path, entry, done);
2406 });
2407 } else {
2408 IDBFS.loadLocalEntry(path, function (err, entry) {
2409 if (err) return done(err);
2410 IDBFS.storeRemoteEntry(store, path, entry, done);
2411 });
2412 }
2413 });
2414
2415 // sort paths in descending order so files are deleted before their
2416 // parent directories
2417 remove.sort().reverse().forEach(function(path) {
2418 if (dst.type === 'local') {
2419 IDBFS.removeLocalEntry(path, done);
2420 } else {
2421 IDBFS.removeRemoteEntry(store, path, done);
2422 }
2423 });
2424 }};
2425
2426 var NODEFS={isWindows:false,staticInit:function () {
2427 NODEFS.isWindows = !!process.platform.match(/^win/);
2428 },mount:function (mount) {
2429 assert(ENVIRONMENT_IS_NODE);
2430 return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
2431 },createNode:function (parent, name, mode, dev) {
2432 if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
2433 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2434 }
2435 var node = FS.createNode(parent, name, mode);
2436 node.node_ops = NODEFS.node_ops;
2437 node.stream_ops = NODEFS.stream_ops;
2438 return node;
2439 },getMode:function (path) {
2440 var stat;
2441 try {
2442 stat = fs.lstatSync(path);
2443 if (NODEFS.isWindows) {
2444 // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
2445 // propagate write bits to execute bits.
2446 stat.mode = stat.mode | ((stat.mode & 146) >> 1);
2447 }
2448 } catch (e) {
2449 if (!e.code) throw e;
2450 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2451 }
2452 return stat.mode;
2453 },realPath:function (node) {
2454 var parts = [];
2455 while (node.parent !== node) {
2456 parts.push(node.name);
2457 node = node.parent;
2458 }
2459 parts.push(node.mount.opts.root);
2460 parts.reverse();
2461 return PATH.join.apply(null, parts);
2462 },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) {
2463 if (flags in NODEFS.flagsToPermissionStringMap) {
2464 return NODEFS.flagsToPermissionStringMap[flags];
2465 } else {
2466 return flags;
2467 }
2468 },node_ops:{getattr:function (node) {
2469 var path = NODEFS.realPath(node);
2470 var stat;
2471 try {
2472 stat = fs.lstatSync(path);
2473 } catch (e) {
2474 if (!e.code) throw e;
2475 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2476 }
2477 // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
2478 // See http://support.microsoft.com/kb/140365
2479 if (NODEFS.isWindows && !stat.blksize) {
2480 stat.blksize = 4096;
2481 }
2482 if (NODEFS.isWindows && !stat.blocks) {
2483 stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
2484 }
2485 return {
2486 dev: stat.dev,
2487 ino: stat.ino,
2488 mode: stat.mode,
2489 nlink: stat.nlink,
2490 uid: stat.uid,
2491 gid: stat.gid,
2492 rdev: stat.rdev,
2493 size: stat.size,
2494 atime: stat.atime,
2495 mtime: stat.mtime,
2496 ctime: stat.ctime,
2497 blksize: stat.blksize,
2498 blocks: stat.blocks
2499 };
2500 },setattr:function (node, attr) {
2501 var path = NODEFS.realPath(node);
2502 try {
2503 if (attr.mode !== undefined) {
2504 fs.chmodSync(path, attr.mode);
2505 // update the common node structure mode as well
2506 node.mode = attr.mode;
2507 }
2508 if (attr.timestamp !== undefined) {
2509 var date = new Date(attr.timestamp);
2510 fs.utimesSync(path, date, date);
2511 }
2512 if (attr.size !== undefined) {
2513 fs.truncateSync(path, attr.size);
2514 }
2515 } catch (e) {
2516 if (!e.code) throw e;
2517 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2518 }
2519 },lookup:function (parent, name) {
2520 var path = PATH.join2(NODEFS.realPath(parent), name);
2521 var mode = NODEFS.getMode(path);
2522 return NODEFS.createNode(parent, name, mode);
2523 },mknod:function (parent, name, mode, dev) {
2524 var node = NODEFS.createNode(parent, name, mode, dev);
2525 // create the backing node for this in the fs root as well
2526 var path = NODEFS.realPath(node);
2527 try {
2528 if (FS.isDir(node.mode)) {
2529 fs.mkdirSync(path, node.mode);
2530 } else {
2531 fs.writeFileSync(path, '', { mode: node.mode });
2532 }
2533 } catch (e) {
2534 if (!e.code) throw e;
2535 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2536 }
2537 return node;
2538 },rename:function (oldNode, newDir, newName) {
2539 var oldPath = NODEFS.realPath(oldNode);
2540 var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
2541 try {
2542 fs.renameSync(oldPath, newPath);
2543 } catch (e) {
2544 if (!e.code) throw e;
2545 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2546 }
2547 },unlink:function (parent, name) {
2548 var path = PATH.join2(NODEFS.realPath(parent), name);
2549 try {
2550 fs.unlinkSync(path);
2551 } catch (e) {
2552 if (!e.code) throw e;
2553 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2554 }
2555 },rmdir:function (parent, name) {
2556 var path = PATH.join2(NODEFS.realPath(parent), name);
2557 try {
2558 fs.rmdirSync(path);
2559 } catch (e) {
2560 if (!e.code) throw e;
2561 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2562 }
2563 },readdir:function (node) {
2564 var path = NODEFS.realPath(node);
2565 try {
2566 return fs.readdirSync(path);
2567 } catch (e) {
2568 if (!e.code) throw e;
2569 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2570 }
2571 },symlink:function (parent, newName, oldPath) {
2572 var newPath = PATH.join2(NODEFS.realPath(parent), newName);
2573 try {
2574 fs.symlinkSync(oldPath, newPath);
2575 } catch (e) {
2576 if (!e.code) throw e;
2577 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2578 }
2579 },readlink:function (node) {
2580 var path = NODEFS.realPath(node);
2581 try {
2582 return fs.readlinkSync(path);
2583 } catch (e) {
2584 if (!e.code) throw e;
2585 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2586 }
2587 }},stream_ops:{open:function (stream) {
2588 var path = NODEFS.realPath(stream.node);
2589 try {
2590 if (FS.isFile(stream.node.mode)) {
2591 stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags));
2592 }
2593 } catch (e) {
2594 if (!e.code) throw e;
2595 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2596 }
2597 },close:function (stream) {
2598 try {
2599 if (FS.isFile(stream.node.mode) && stream.nfd) {
2600 fs.closeSync(stream.nfd);
2601 }
2602 } catch (e) {
2603 if (!e.code) throw e;
2604 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2605 }
2606 },read:function (stream, buffer, offset, length, position) {
2607 // FIXME this is terrible.
2608 var nbuffer = new Buffer(length);
2609 var res;
2610 try {
2611 res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
2612 } catch (e) {
2613 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2614 }
2615 if (res > 0) {
2616 for (var i = 0; i < res; i++) {
2617 buffer[offset + i] = nbuffer[i];
2618 }
2619 }
2620 return res;
2621 },write:function (stream, buffer, offset, length, position) {
2622 // FIXME this is terrible.
2623 var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
2624 var res;
2625 try {
2626 res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
2627 } catch (e) {
2628 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2629 }
2630 return res;
2631 },llseek:function (stream, offset, whence) {
2632 var position = offset;
2633 if (whence === 1) { // SEEK_CUR.
2634 position += stream.position;
2635 } else if (whence === 2) { // SEEK_END.
2636 if (FS.isFile(stream.node.mode)) {
2637 try {
2638 var stat = fs.fstatSync(stream.nfd);
2639 position += stat.size;
2640 } catch (e) {
2641 throw new FS.ErrnoError(ERRNO_CODES[e.code]);
2642 }
2643 }
2644 }
2645
2646 if (position < 0) {
2647 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
2648 }
2649
2650 stream.position = position;
2651 return position;
2652 }}};
2653
2654 var _stdin=allocate(1, "i32*", ALLOC_STATIC);
2655
2656 var _stdout=allocate(1, "i32*", ALLOC_STATIC);
2657
2658 var _stderr=allocate(1, "i32*", ALLOC_STATIC);
2659
2660 function _fflush(stream) {
2661 // int fflush(FILE *stream);
2662 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
2663 // we don't currently perform any user-space buffering of data
2664 }var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},handleFSError:function (e) {
2665 if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
2666 return ___setErrNo(e.errno);
2667 },lookupPath:function (path, opts) {
2668 path = PATH.resolve(FS.cwd(), path);
2669 opts = opts || {};
2670
2671 var defaults = {
2672 follow_mount: true,
2673 recurse_count: 0
2674 };
2675 for (var key in defaults) {
2676 if (opts[key] === undefined) {
2677 opts[key] = defaults[key];
2678 }
2679 }
2680
2681 if (opts.recurse_count > 8) { // max recursive lookup of 8
2682 throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2683 }
2684
2685 // split the path
2686 var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
2687 return !!p;
2688 }), false);
2689
2690 // start at the root
2691 var current = FS.root;
2692 var current_path = '/';
2693
2694 for (var i = 0; i < parts.length; i++) {
2695 var islast = (i === parts.length-1);
2696 if (islast && opts.parent) {
2697 // stop resolving
2698 break;
2699 }
2700
2701 current = FS.lookupNode(current, parts[i]);
2702 current_path = PATH.join2(current_path, parts[i]);
2703
2704 // jump to the mount's root node if this is a mountpoint
2705 if (FS.isMountpoint(current)) {
2706 if (!islast || (islast && opts.follow_mount)) {
2707 current = current.mounted.root;
2708 }
2709 }
2710
2711 // by default, lookupPath will not follow a symlink if it is the final path component.
2712 // setting opts.follow = true will override this behavior.
2713 if (!islast || opts.follow) {
2714 var count = 0;
2715 while (FS.isLink(current.mode)) {
2716 var link = FS.readlink(current_path);
2717 current_path = PATH.resolve(PATH.dirname(current_path), link);
2718
2719 var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });
2720 current = lookup.node;
2721
2722 if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
2723 throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
2724 }
2725 }
2726 }
2727 }
2728
2729 return { path: current_path, node: current };
2730 },getPath:function (node) {
2731 var path;
2732 while (true) {
2733 if (FS.isRoot(node)) {
2734 var mount = node.mount.mountpoint;
2735 if (!path) return mount;
2736 return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
2737 }
2738 path = path ? node.name + '/' + path : node.name;
2739 node = node.parent;
2740 }
2741 },hashName:function (parentid, name) {
2742 var hash = 0;
2743
2744
2745 for (var i = 0; i < name.length; i++) {
2746 hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
2747 }
2748 return ((parentid + hash) >>> 0) % FS.nameTable.length;
2749 },hashAddNode:function (node) {
2750 var hash = FS.hashName(node.parent.id, node.name);
2751 node.name_next = FS.nameTable[hash];
2752 FS.nameTable[hash] = node;
2753 },hashRemoveNode:function (node) {
2754 var hash = FS.hashName(node.parent.id, node.name);
2755 if (FS.nameTable[hash] === node) {
2756 FS.nameTable[hash] = node.name_next;
2757 } else {
2758 var current = FS.nameTable[hash];
2759 while (current) {
2760 if (current.name_next === node) {
2761 current.name_next = node.name_next;
2762 break;
2763 }
2764 current = current.name_next;
2765 }
2766 }
2767 },lookupNode:function (parent, name) {
2768 var err = FS.mayLookup(parent);
2769 if (err) {
2770 throw new FS.ErrnoError(err);
2771 }
2772 var hash = FS.hashName(parent.id, name);
2773 for (var node = FS.nameTable[hash]; node; node = node.name_next) {
2774 var nodeName = node.name;
2775 if (node.parent.id === parent.id && nodeName === name) {
2776 return node;
2777 }
2778 }
2779 // if we failed to find it in the cache, call into the VFS
2780 return FS.lookup(parent, name);
2781 },createNode:function (parent, name, mode, rdev) {
2782 if (!FS.FSNode) {
2783 FS.FSNode = function(parent, name, mode, rdev) {
2784 if (!parent) {
2785 parent = this; // root node sets parent to itself
2786 }
2787 this.parent = parent;
2788 this.mount = parent.mount;
2789 this.mounted = null;
2790 this.id = FS.nextInode++;
2791 this.name = name;
2792 this.mode = mode;
2793 this.node_ops = {};
2794 this.stream_ops = {};
2795 this.rdev = rdev;
2796 };
2797
2798 FS.FSNode.prototype = {};
2799
2800 // compatibility
2801 var readMode = 292 | 73;
2802 var writeMode = 146;
2803
2804 // NOTE we must use Object.defineProperties instead of individual calls to
2805 // Object.defineProperty in order to make closure compiler happy
2806 Object.defineProperties(FS.FSNode.prototype, {
2807 read: {
2808 get: function() { return (this.mode & readMode) === readMode; },
2809 set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
2810 },
2811 write: {
2812 get: function() { return (this.mode & writeMode) === writeMode; },
2813 set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
2814 },
2815 isFolder: {
2816 get: function() { return FS.isDir(this.mode); },
2817 },
2818 isDevice: {
2819 get: function() { return FS.isChrdev(this.mode); },
2820 },
2821 });
2822 }
2823
2824 var node = new FS.FSNode(parent, name, mode, rdev);
2825
2826 FS.hashAddNode(node);
2827
2828 return node;
2829 },destroyNode:function (node) {
2830 FS.hashRemoveNode(node);
2831 },isRoot:function (node) {
2832 return node === node.parent;
2833 },isMountpoint:function (node) {
2834 return !!node.mounted;
2835 },isFile:function (mode) {
2836 return (mode & 61440) === 32768;
2837 },isDir:function (mode) {
2838 return (mode & 61440) === 16384;
2839 },isLink:function (mode) {
2840 return (mode & 61440) === 40960;
2841 },isChrdev:function (mode) {
2842 return (mode & 61440) === 8192;
2843 },isBlkdev:function (mode) {
2844 return (mode & 61440) === 24576;
2845 },isFIFO:function (mode) {
2846 return (mode & 61440) === 4096;
2847 },isSocket:function (mode) {
2848 return (mode & 49152) === 49152;
2849 },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) {
2850 var flags = FS.flagModes[str];
2851 if (typeof flags === 'undefined') {
2852 throw new Error('Unknown file open mode: ' + str);
2853 }
2854 return flags;
2855 },flagsToPermissionString:function (flag) {
2856 var accmode = flag & 2097155;
2857 var perms = ['r', 'w', 'rw'][accmode];
2858 if ((flag & 512)) {
2859 perms += 'w';
2860 }
2861 return perms;
2862 },nodePermissions:function (node, perms) {
2863 if (FS.ignorePermissions) {
2864 return 0;
2865 }
2866 // return 0 if any user, group or owner bits are set.
2867 if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
2868 return ERRNO_CODES.EACCES;
2869 } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
2870 return ERRNO_CODES.EACCES;
2871 } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
2872 return ERRNO_CODES.EACCES;
2873 }
2874 return 0;
2875 },mayLookup:function (dir) {
2876 return FS.nodePermissions(dir, 'x');
2877 },mayCreate:function (dir, name) {
2878 try {
2879 var node = FS.lookupNode(dir, name);
2880 return ERRNO_CODES.EEXIST;
2881 } catch (e) {
2882 }
2883 return FS.nodePermissions(dir, 'wx');
2884 },mayDelete:function (dir, name, isdir) {
2885 var node;
2886 try {
2887 node = FS.lookupNode(dir, name);
2888 } catch (e) {
2889 return e.errno;
2890 }
2891 var err = FS.nodePermissions(dir, 'wx');
2892 if (err) {
2893 return err;
2894 }
2895 if (isdir) {
2896 if (!FS.isDir(node.mode)) {
2897 return ERRNO_CODES.ENOTDIR;
2898 }
2899 if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
2900 return ERRNO_CODES.EBUSY;
2901 }
2902 } else {
2903 if (FS.isDir(node.mode)) {
2904 return ERRNO_CODES.EISDIR;
2905 }
2906 }
2907 return 0;
2908 },mayOpen:function (node, flags) {
2909 if (!node) {
2910 return ERRNO_CODES.ENOENT;
2911 }
2912 if (FS.isLink(node.mode)) {
2913 return ERRNO_CODES.ELOOP;
2914 } else if (FS.isDir(node.mode)) {
2915 if ((flags & 2097155) !== 0 || // opening for write
2916 (flags & 512)) {
2917 return ERRNO_CODES.EISDIR;
2918 }
2919 }
2920 return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
2921 },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
2922 fd_start = fd_start || 0;
2923 fd_end = fd_end || FS.MAX_OPEN_FDS;
2924 for (var fd = fd_start; fd <= fd_end; fd++) {
2925 if (!FS.streams[fd]) {
2926 return fd;
2927 }
2928 }
2929 throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
2930 },getStream:function (fd) {
2931 return FS.streams[fd];
2932 },createStream:function (stream, fd_start, fd_end) {
2933 if (!FS.FSStream) {
2934 FS.FSStream = function(){};
2935 FS.FSStream.prototype = {};
2936 // compatibility
2937 Object.defineProperties(FS.FSStream.prototype, {
2938 object: {
2939 get: function() { return this.node; },
2940 set: function(val) { this.node = val; }
2941 },
2942 isRead: {
2943 get: function() { return (this.flags & 2097155) !== 1; }
2944 },
2945 isWrite: {
2946 get: function() { return (this.flags & 2097155) !== 0; }
2947 },
2948 isAppend: {
2949 get: function() { return (this.flags & 1024); }
2950 }
2951 });
2952 }
2953 if (0) {
2954 // reuse the object
2955 stream.__proto__ = FS.FSStream.prototype;
2956 } else {
2957 var newStream = new FS.FSStream();
2958 for (var p in stream) {
2959 newStream[p] = stream[p];
2960 }
2961 stream = newStream;
2962 }
2963 var fd = FS.nextfd(fd_start, fd_end);
2964 stream.fd = fd;
2965 FS.streams[fd] = stream;
2966 return stream;
2967 },closeStream:function (fd) {
2968 FS.streams[fd] = null;
2969 },getStreamFromPtr:function (ptr) {
2970 return FS.streams[ptr - 1];
2971 },getPtrForStream:function (stream) {
2972 return stream ? stream.fd + 1 : 0;
2973 },chrdev_stream_ops:{open:function (stream) {
2974 var device = FS.getDevice(stream.node.rdev);
2975 // override node's stream ops with the device's
2976 stream.stream_ops = device.stream_ops;
2977 // forward the open call
2978 if (stream.stream_ops.open) {
2979 stream.stream_ops.open(stream);
2980 }
2981 },llseek:function () {
2982 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
2983 }},major:function (dev) {
2984 return ((dev) >> 8);
2985 },minor:function (dev) {
2986 return ((dev) & 0xff);
2987 },makedev:function (ma, mi) {
2988 return ((ma) << 8 | (mi));
2989 },registerDevice:function (dev, ops) {
2990 FS.devices[dev] = { stream_ops: ops };
2991 },getDevice:function (dev) {
2992 return FS.devices[dev];
2993 },getMounts:function (mount) {
2994 var mounts = [];
2995 var check = [mount];
2996
2997 while (check.length) {
2998 var m = check.pop();
2999
3000 mounts.push(m);
3001
3002 check.push.apply(check, m.mounts);
3003 }
3004
3005 return mounts;
3006 },syncfs:function (populate, callback) {
3007 if (typeof(populate) === 'function') {
3008 callback = populate;
3009 populate = false;
3010 }
3011
3012 var mounts = FS.getMounts(FS.root.mount);
3013 var completed = 0;
3014
3015 function done(err) {
3016 if (err) {
3017 if (!done.errored) {
3018 done.errored = true;
3019 return callback(err);
3020 }
3021 return;
3022 }
3023 if (++completed >= mounts.length) {
3024 callback(null);
3025 }
3026 };
3027
3028 // sync all mounts
3029 mounts.forEach(function (mount) {
3030 if (!mount.type.syncfs) {
3031 return done(null);
3032 }
3033 mount.type.syncfs(mount, populate, done);
3034 });
3035 },mount:function (type, opts, mountpoint) {
3036 var root = mountpoint === '/';
3037 var pseudo = !mountpoint;
3038 var node;
3039
3040 if (root && FS.root) {
3041 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3042 } else if (!root && !pseudo) {
3043 var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
3044
3045 mountpoint = lookup.path; // use the absolute path
3046 node = lookup.node;
3047
3048 if (FS.isMountpoint(node)) {
3049 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3050 }
3051
3052 if (!FS.isDir(node.mode)) {
3053 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3054 }
3055 }
3056
3057 var mount = {
3058 type: type,
3059 opts: opts,
3060 mountpoint: mountpoint,
3061 mounts: []
3062 };
3063
3064 // create a root node for the fs
3065 var mountRoot = type.mount(mount);
3066 mountRoot.mount = mount;
3067 mount.root = mountRoot;
3068
3069 if (root) {
3070 FS.root = mountRoot;
3071 } else if (node) {
3072 // set as a mountpoint
3073 node.mounted = mount;
3074
3075 // add the new mount to the current mount's children
3076 if (node.mount) {
3077 node.mount.mounts.push(mount);
3078 }
3079 }
3080
3081 return mountRoot;
3082 },unmount:function (mountpoint) {
3083 var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
3084
3085 if (!FS.isMountpoint(lookup.node)) {
3086 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3087 }
3088
3089 // destroy the nodes for this mount, and all its child mounts
3090 var node = lookup.node;
3091 var mount = node.mounted;
3092 var mounts = FS.getMounts(mount);
3093
3094 Object.keys(FS.nameTable).forEach(function (hash) {
3095 var current = FS.nameTable[hash];
3096
3097 while (current) {
3098 var next = current.name_next;
3099
3100 if (mounts.indexOf(current.mount) !== -1) {
3101 FS.destroyNode(current);
3102 }
3103
3104 current = next;
3105 }
3106 });
3107
3108 // no longer a mountpoint
3109 node.mounted = null;
3110
3111 // remove this mount from the child mounts
3112 var idx = node.mount.mounts.indexOf(mount);
3113 assert(idx !== -1);
3114 node.mount.mounts.splice(idx, 1);
3115 },lookup:function (parent, name) {
3116 return parent.node_ops.lookup(parent, name);
3117 },mknod:function (path, mode, dev) {
3118 var lookup = FS.lookupPath(path, { parent: true });
3119 var parent = lookup.node;
3120 var name = PATH.basename(path);
3121 var err = FS.mayCreate(parent, name);
3122 if (err) {
3123 throw new FS.ErrnoError(err);
3124 }
3125 if (!parent.node_ops.mknod) {
3126 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3127 }
3128 return parent.node_ops.mknod(parent, name, mode, dev);
3129 },create:function (path, mode) {
3130 mode = mode !== undefined ? mode : 438 /* 0666 */;
3131 mode &= 4095;
3132 mode |= 32768;
3133 return FS.mknod(path, mode, 0);
3134 },mkdir:function (path, mode) {
3135 mode = mode !== undefined ? mode : 511 /* 0777 */;
3136 mode &= 511 | 512;
3137 mode |= 16384;
3138 return FS.mknod(path, mode, 0);
3139 },mkdev:function (path, mode, dev) {
3140 if (typeof(dev) === 'undefined') {
3141 dev = mode;
3142 mode = 438 /* 0666 */;
3143 }
3144 mode |= 8192;
3145 return FS.mknod(path, mode, dev);
3146 },symlink:function (oldpath, newpath) {
3147 var lookup = FS.lookupPath(newpath, { parent: true });
3148 var parent = lookup.node;
3149 var newname = PATH.basename(newpath);
3150 var err = FS.mayCreate(parent, newname);
3151 if (err) {
3152 throw new FS.ErrnoError(err);
3153 }
3154 if (!parent.node_ops.symlink) {
3155 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3156 }
3157 return parent.node_ops.symlink(parent, newname, oldpath);
3158 },rename:function (old_path, new_path) {
3159 var old_dirname = PATH.dirname(old_path);
3160 var new_dirname = PATH.dirname(new_path);
3161 var old_name = PATH.basename(old_path);
3162 var new_name = PATH.basename(new_path);
3163 // parents must exist
3164 var lookup, old_dir, new_dir;
3165 try {
3166 lookup = FS.lookupPath(old_path, { parent: true });
3167 old_dir = lookup.node;
3168 lookup = FS.lookupPath(new_path, { parent: true });
3169 new_dir = lookup.node;
3170 } catch (e) {
3171 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3172 }
3173 // need to be part of the same mount
3174 if (old_dir.mount !== new_dir.mount) {
3175 throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
3176 }
3177 // source must exist
3178 var old_node = FS.lookupNode(old_dir, old_name);
3179 // old path should not be an ancestor of the new path
3180 var relative = PATH.relative(old_path, new_dirname);
3181 if (relative.charAt(0) !== '.') {
3182 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3183 }
3184 // new path should not be an ancestor of the old path
3185 relative = PATH.relative(new_path, old_dirname);
3186 if (relative.charAt(0) !== '.') {
3187 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
3188 }
3189 // see if the new path already exists
3190 var new_node;
3191 try {
3192 new_node = FS.lookupNode(new_dir, new_name);
3193 } catch (e) {
3194 // not fatal
3195 }
3196 // early out if nothing needs to change
3197 if (old_node === new_node) {
3198 return;
3199 }
3200 // we'll need to delete the old entry
3201 var isdir = FS.isDir(old_node.mode);
3202 var err = FS.mayDelete(old_dir, old_name, isdir);
3203 if (err) {
3204 throw new FS.ErrnoError(err);
3205 }
3206 // need delete permissions if we'll be overwriting.
3207 // need create permissions if new doesn't already exist.
3208 err = new_node ?
3209 FS.mayDelete(new_dir, new_name, isdir) :
3210 FS.mayCreate(new_dir, new_name);
3211 if (err) {
3212 throw new FS.ErrnoError(err);
3213 }
3214 if (!old_dir.node_ops.rename) {
3215 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3216 }
3217 if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
3218 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3219 }
3220 // if we are going to change the parent, check write permissions
3221 if (new_dir !== old_dir) {
3222 err = FS.nodePermissions(old_dir, 'w');
3223 if (err) {
3224 throw new FS.ErrnoError(err);
3225 }
3226 }
3227 // remove the node from the lookup hash
3228 FS.hashRemoveNode(old_node);
3229 // do the underlying fs rename
3230 try {
3231 old_dir.node_ops.rename(old_node, new_dir, new_name);
3232 } catch (e) {
3233 throw e;
3234 } finally {
3235 // add the node back to the hash (in case node_ops.rename
3236 // changed its name)
3237 FS.hashAddNode(old_node);
3238 }
3239 },rmdir:function (path) {
3240 var lookup = FS.lookupPath(path, { parent: true });
3241 var parent = lookup.node;
3242 var name = PATH.basename(path);
3243 var node = FS.lookupNode(parent, name);
3244 var err = FS.mayDelete(parent, name, true);
3245 if (err) {
3246 throw new FS.ErrnoError(err);
3247 }
3248 if (!parent.node_ops.rmdir) {
3249 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3250 }
3251 if (FS.isMountpoint(node)) {
3252 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3253 }
3254 parent.node_ops.rmdir(parent, name);
3255 FS.destroyNode(node);
3256 },readdir:function (path) {
3257 var lookup = FS.lookupPath(path, { follow: true });
3258 var node = lookup.node;
3259 if (!node.node_ops.readdir) {
3260 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3261 }
3262 return node.node_ops.readdir(node);
3263 },unlink:function (path) {
3264 var lookup = FS.lookupPath(path, { parent: true });
3265 var parent = lookup.node;
3266 var name = PATH.basename(path);
3267 var node = FS.lookupNode(parent, name);
3268 var err = FS.mayDelete(parent, name, false);
3269 if (err) {
3270 // POSIX says unlink should set EPERM, not EISDIR
3271 if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM;
3272 throw new FS.ErrnoError(err);
3273 }
3274 if (!parent.node_ops.unlink) {
3275 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3276 }
3277 if (FS.isMountpoint(node)) {
3278 throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
3279 }
3280 parent.node_ops.unlink(parent, name);
3281 FS.destroyNode(node);
3282 },readlink:function (path) {
3283 var lookup = FS.lookupPath(path);
3284 var link = lookup.node;
3285 if (!link.node_ops.readlink) {
3286 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3287 }
3288 return link.node_ops.readlink(link);
3289 },stat:function (path, dontFollow) {
3290 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3291 var node = lookup.node;
3292 if (!node.node_ops.getattr) {
3293 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3294 }
3295 return node.node_ops.getattr(node);
3296 },lstat:function (path) {
3297 return FS.stat(path, true);
3298 },chmod:function (path, mode, dontFollow) {
3299 var node;
3300 if (typeof path === 'string') {
3301 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3302 node = lookup.node;
3303 } else {
3304 node = path;
3305 }
3306 if (!node.node_ops.setattr) {
3307 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3308 }
3309 node.node_ops.setattr(node, {
3310 mode: (mode & 4095) | (node.mode & ~4095),
3311 timestamp: Date.now()
3312 });
3313 },lchmod:function (path, mode) {
3314 FS.chmod(path, mode, true);
3315 },fchmod:function (fd, mode) {
3316 var stream = FS.getStream(fd);
3317 if (!stream) {
3318 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3319 }
3320 FS.chmod(stream.node, mode);
3321 },chown:function (path, uid, gid, dontFollow) {
3322 var node;
3323 if (typeof path === 'string') {
3324 var lookup = FS.lookupPath(path, { follow: !dontFollow });
3325 node = lookup.node;
3326 } else {
3327 node = path;
3328 }
3329 if (!node.node_ops.setattr) {
3330 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3331 }
3332 node.node_ops.setattr(node, {
3333 timestamp: Date.now()
3334 // we ignore the uid / gid for now
3335 });
3336 },lchown:function (path, uid, gid) {
3337 FS.chown(path, uid, gid, true);
3338 },fchown:function (fd, uid, gid) {
3339 var stream = FS.getStream(fd);
3340 if (!stream) {
3341 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3342 }
3343 FS.chown(stream.node, uid, gid);
3344 },truncate:function (path, len) {
3345 if (len < 0) {
3346 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3347 }
3348 var node;
3349 if (typeof path === 'string') {
3350 var lookup = FS.lookupPath(path, { follow: true });
3351 node = lookup.node;
3352 } else {
3353 node = path;
3354 }
3355 if (!node.node_ops.setattr) {
3356 throw new FS.ErrnoError(ERRNO_CODES.EPERM);
3357 }
3358 if (FS.isDir(node.mode)) {
3359 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3360 }
3361 if (!FS.isFile(node.mode)) {
3362 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3363 }
3364 var err = FS.nodePermissions(node, 'w');
3365 if (err) {
3366 throw new FS.ErrnoError(err);
3367 }
3368 node.node_ops.setattr(node, {
3369 size: len,
3370 timestamp: Date.now()
3371 });
3372 },ftruncate:function (fd, len) {
3373 var stream = FS.getStream(fd);
3374 if (!stream) {
3375 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3376 }
3377 if ((stream.flags & 2097155) === 0) {
3378 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3379 }
3380 FS.truncate(stream.node, len);
3381 },utime:function (path, atime, mtime) {
3382 var lookup = FS.lookupPath(path, { follow: true });
3383 var node = lookup.node;
3384 node.node_ops.setattr(node, {
3385 timestamp: Math.max(atime, mtime)
3386 });
3387 },open:function (path, flags, mode, fd_start, fd_end) {
3388 flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
3389 mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode;
3390 if ((flags & 64)) {
3391 mode = (mode & 4095) | 32768;
3392 } else {
3393 mode = 0;
3394 }
3395 var node;
3396 if (typeof path === 'object') {
3397 node = path;
3398 } else {
3399 path = PATH.normalize(path);
3400 try {
3401 var lookup = FS.lookupPath(path, {
3402 follow: !(flags & 131072)
3403 });
3404 node = lookup.node;
3405 } catch (e) {
3406 // ignore
3407 }
3408 }
3409 // perhaps we need to create the node
3410 if ((flags & 64)) {
3411 if (node) {
3412 // if O_CREAT and O_EXCL are set, error out if the node already exists
3413 if ((flags & 128)) {
3414 throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
3415 }
3416 } else {
3417 // node doesn't exist, try to create it
3418 node = FS.mknod(path, mode, 0);
3419 }
3420 }
3421 if (!node) {
3422 throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
3423 }
3424 // can't truncate a device
3425 if (FS.isChrdev(node.mode)) {
3426 flags &= ~512;
3427 }
3428 // check permissions
3429 var err = FS.mayOpen(node, flags);
3430 if (err) {
3431 throw new FS.ErrnoError(err);
3432 }
3433 // do truncation if necessary
3434 if ((flags & 512)) {
3435 FS.truncate(node, 0);
3436 }
3437 // we've already handled these, don't pass down to the underlying vfs
3438 flags &= ~(128 | 512);
3439
3440 // register the stream with the filesystem
3441 var stream = FS.createStream({
3442 node: node,
3443 path: FS.getPath(node), // we want the absolute path to the node
3444 flags: flags,
3445 seekable: true,
3446 position: 0,
3447 stream_ops: node.stream_ops,
3448 // used by the file family libc calls (fopen, fwrite, ferror, etc.)
3449 ungotten: [],
3450 error: false
3451 }, fd_start, fd_end);
3452 // call the new stream's open function
3453 if (stream.stream_ops.open) {
3454 stream.stream_ops.open(stream);
3455 }
3456 if (Module['logReadFiles'] && !(flags & 1)) {
3457 if (!FS.readFiles) FS.readFiles = {};
3458 if (!(path in FS.readFiles)) {
3459 FS.readFiles[path] = 1;
3460 Module['printErr']('read file: ' + path);
3461 }
3462 }
3463 return stream;
3464 },close:function (stream) {
3465 try {
3466 if (stream.stream_ops.close) {
3467 stream.stream_ops.close(stream);
3468 }
3469 } catch (e) {
3470 throw e;
3471 } finally {
3472 FS.closeStream(stream.fd);
3473 }
3474 },llseek:function (stream, offset, whence) {
3475 if (!stream.seekable || !stream.stream_ops.llseek) {
3476 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3477 }
3478 return stream.stream_ops.llseek(stream, offset, whence);
3479 },read:function (stream, buffer, offset, length, position) {
3480 if (length < 0 || position < 0) {
3481 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3482 }
3483 if ((stream.flags & 2097155) === 1) {
3484 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3485 }
3486 if (FS.isDir(stream.node.mode)) {
3487 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3488 }
3489 if (!stream.stream_ops.read) {
3490 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3491 }
3492 var seeking = true;
3493 if (typeof position === 'undefined') {
3494 position = stream.position;
3495 seeking = false;
3496 } else if (!stream.seekable) {
3497 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3498 }
3499 var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
3500 if (!seeking) stream.position += bytesRead;
3501 return bytesRead;
3502 },write:function (stream, buffer, offset, length, position, canOwn) {
3503 if (length < 0 || position < 0) {
3504 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3505 }
3506 if ((stream.flags & 2097155) === 0) {
3507 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3508 }
3509 if (FS.isDir(stream.node.mode)) {
3510 throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
3511 }
3512 if (!stream.stream_ops.write) {
3513 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3514 }
3515 var seeking = true;
3516 if (typeof position === 'undefined') {
3517 position = stream.position;
3518 seeking = false;
3519 } else if (!stream.seekable) {
3520 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
3521 }
3522 if (stream.flags & 1024) {
3523 // seek to the end before writing in append mode
3524 FS.llseek(stream, 0, 2);
3525 }
3526 var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
3527 if (!seeking) stream.position += bytesWritten;
3528 return bytesWritten;
3529 },allocate:function (stream, offset, length) {
3530 if (offset < 0 || length <= 0) {
3531 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
3532 }
3533 if ((stream.flags & 2097155) === 0) {
3534 throw new FS.ErrnoError(ERRNO_CODES.EBADF);
3535 }
3536 if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
3537 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3538 }
3539 if (!stream.stream_ops.allocate) {
3540 throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
3541 }
3542 stream.stream_ops.allocate(stream, offset, length);
3543 },mmap:function (stream, buffer, offset, length, position, prot, flags) {
3544 // TODO if PROT is PROT_WRITE, make sure we have write access
3545 if ((stream.flags & 2097155) === 1) {
3546 throw new FS.ErrnoError(ERRNO_CODES.EACCES);
3547 }
3548 if (!stream.stream_ops.mmap) {
3549 throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
3550 }
3551 return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
3552 },ioctl:function (stream, cmd, arg) {
3553 if (!stream.stream_ops.ioctl) {
3554 throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
3555 }
3556 return stream.stream_ops.ioctl(stream, cmd, arg);
3557 },readFile:function (path, opts) {
3558 opts = opts || {};
3559 opts.flags = opts.flags || 'r';
3560 opts.encoding = opts.encoding || 'binary';
3561 if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
3562 throw new Error('Invalid encoding type "' + opts.encoding + '"');
3563 }
3564 var ret;
3565 var stream = FS.open(path, opts.flags);
3566 var stat = FS.stat(path);
3567 var length = stat.size;
3568 var buf = new Uint8Array(length);
3569 FS.read(stream, buf, 0, length, 0);
3570 if (opts.encoding === 'utf8') {
3571 ret = '';
3572 var utf8 = new Runtime.UTF8Processor();
3573 for (var i = 0; i < length; i++) {
3574 ret += utf8.processCChar(buf[i]);
3575 }
3576 } else if (opts.encoding === 'binary') {
3577 ret = buf;
3578 }
3579 FS.close(stream);
3580 return ret;
3581 },writeFile:function (path, data, opts) {
3582 opts = opts || {};
3583 opts.flags = opts.flags || 'w';
3584 opts.encoding = opts.encoding || 'utf8';
3585 if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
3586 throw new Error('Invalid encoding type "' + opts.encoding + '"');
3587 }
3588 var stream = FS.open(path, opts.flags, opts.mode);
3589 if (opts.encoding === 'utf8') {
3590 var utf8 = new Runtime.UTF8Processor();
3591 var buf = new Uint8Array(utf8.processJSString(data));
3592 FS.write(stream, buf, 0, buf.length, 0, opts.canOwn);
3593 } else if (opts.encoding === 'binary') {
3594 FS.write(stream, data, 0, data.length, 0, opts.canOwn);
3595 }
3596 FS.close(stream);
3597 },cwd:function () {
3598 return FS.currentPath;
3599 },chdir:function (path) {
3600 var lookup = FS.lookupPath(path, { follow: true });
3601 if (!FS.isDir(lookup.node.mode)) {
3602 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
3603 }
3604 var err = FS.nodePermissions(lookup.node, 'x');
3605 if (err) {
3606 throw new FS.ErrnoError(err);
3607 }
3608 FS.currentPath = lookup.path;
3609 },createDefaultDirectories:function () {
3610 FS.mkdir('/tmp');
3611 },createDefaultDevices:function () {
3612 // create /dev
3613 FS.mkdir('/dev');
3614 // setup /dev/null
3615 FS.registerDevice(FS.makedev(1, 3), {
3616 read: function() { return 0; },
3617 write: function() { return 0; }
3618 });
3619 FS.mkdev('/dev/null', FS.makedev(1, 3));
3620 // setup /dev/tty and /dev/tty1
3621 // stderr needs to print output using Module['printErr']
3622 // so we register a second tty just for it.
3623 TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
3624 TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
3625 FS.mkdev('/dev/tty', FS.makedev(5, 0));
3626 FS.mkdev('/dev/tty1', FS.makedev(6, 0));
3627 // we're not going to emulate the actual shm device,
3628 // just create the tmp dirs that reside in it commonly
3629 FS.mkdir('/dev/shm');
3630 FS.mkdir('/dev/shm/tmp');
3631 },createStandardStreams:function () {
3632 // TODO deprecate the old functionality of a single
3633 // input / output callback and that utilizes FS.createDevice
3634 // and instead require a unique set of stream ops
3635
3636 // by default, we symlink the standard streams to the
3637 // default tty devices. however, if the standard streams
3638 // have been overwritten we create a unique device for
3639 // them instead.
3640 if (Module['stdin']) {
3641 FS.createDevice('/dev', 'stdin', Module['stdin']);
3642 } else {
3643 FS.symlink('/dev/tty', '/dev/stdin');
3644 }
3645 if (Module['stdout']) {
3646 FS.createDevice('/dev', 'stdout', null, Module['stdout']);
3647 } else {
3648 FS.symlink('/dev/tty', '/dev/stdout');
3649 }
3650 if (Module['stderr']) {
3651 FS.createDevice('/dev', 'stderr', null, Module['stderr']);
3652 } else {
3653 FS.symlink('/dev/tty1', '/dev/stderr');
3654 }
3655
3656 // open default streams for the stdin, stdout and stderr devices
3657 var stdin = FS.open('/dev/stdin', 'r');
3658 HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin);
3659 assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
3660
3661 var stdout = FS.open('/dev/stdout', 'w');
3662 HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout);
3663 assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');
3664
3665 var stderr = FS.open('/dev/stderr', 'w');
3666 HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr);
3667 assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');
3668 },ensureErrnoError:function () {
3669 if (FS.ErrnoError) return;
3670 FS.ErrnoError = function ErrnoError(errno) {
3671 this.errno = errno;
3672 for (var key in ERRNO_CODES) {
3673 if (ERRNO_CODES[key] === errno) {
3674 this.code = key;
3675 break;
3676 }
3677 }
3678 this.message = ERRNO_MESSAGES[errno];
3679 };
3680 FS.ErrnoError.prototype = new Error();
3681 FS.ErrnoError.prototype.constructor = FS.ErrnoError;
3682 // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
3683 [ERRNO_CODES.ENOENT].forEach(function(code) {
3684 FS.genericErrors[code] = new FS.ErrnoError(code);
3685 FS.genericErrors[code].stack = '<generic error, no stack>';
3686 });
3687 },staticInit:function () {
3688 FS.ensureErrnoError();
3689
3690 FS.nameTable = new Array(4096);
3691
3692 FS.mount(MEMFS, {}, '/');
3693
3694 FS.createDefaultDirectories();
3695 FS.createDefaultDevices();
3696 },init:function (input, output, error) {
3697 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)');
3698 FS.init.initialized = true;
3699
3700 FS.ensureErrnoError();
3701
3702 // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
3703 Module['stdin'] = input || Module['stdin'];
3704 Module['stdout'] = output || Module['stdout'];
3705 Module['stderr'] = error || Module['stderr'];
3706
3707 FS.createStandardStreams();
3708 },quit:function () {
3709 FS.init.initialized = false;
3710 for (var i = 0; i < FS.streams.length; i++) {
3711 var stream = FS.streams[i];
3712 if (!stream) {
3713 continue;
3714 }
3715 FS.close(stream);
3716 }
3717 },getMode:function (canRead, canWrite) {
3718 var mode = 0;
3719 if (canRead) mode |= 292 | 73;
3720 if (canWrite) mode |= 146;
3721 return mode;
3722 },joinPath:function (parts, forceRelative) {
3723 var path = PATH.join.apply(null, parts);
3724 if (forceRelative && path[0] == '/') path = path.substr(1);
3725 return path;
3726 },absolutePath:function (relative, base) {
3727 return PATH.resolve(base, relative);
3728 },standardizePath:function (path) {
3729 return PATH.normalize(path);
3730 },findObject:function (path, dontResolveLastLink) {
3731 var ret = FS.analyzePath(path, dontResolveLastLink);
3732 if (ret.exists) {
3733 return ret.object;
3734 } else {
3735 ___setErrNo(ret.error);
3736 return null;
3737 }
3738 },analyzePath:function (path, dontResolveLastLink) {
3739 // operate from within the context of the symlink's target
3740 try {
3741 var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3742 path = lookup.path;
3743 } catch (e) {
3744 }
3745 var ret = {
3746 isRoot: false, exists: false, error: 0, name: null, path: null, object: null,
3747 parentExists: false, parentPath: null, parentObject: null
3748 };
3749 try {
3750 var lookup = FS.lookupPath(path, { parent: true });
3751 ret.parentExists = true;
3752 ret.parentPath = lookup.path;
3753 ret.parentObject = lookup.node;
3754 ret.name = PATH.basename(path);
3755 lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
3756 ret.exists = true;
3757 ret.path = lookup.path;
3758 ret.object = lookup.node;
3759 ret.name = lookup.node.name;
3760 ret.isRoot = lookup.path === '/';
3761 } catch (e) {
3762 ret.error = e.errno;
3763 };
3764 return ret;
3765 },createFolder:function (parent, name, canRead, canWrite) {
3766 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3767 var mode = FS.getMode(canRead, canWrite);
3768 return FS.mkdir(path, mode);
3769 },createPath:function (parent, path, canRead, canWrite) {
3770 parent = typeof parent === 'string' ? parent : FS.getPath(parent);
3771 var parts = path.split('/').reverse();
3772 while (parts.length) {
3773 var part = parts.pop();
3774 if (!part) continue;
3775 var current = PATH.join2(parent, part);
3776 try {
3777 FS.mkdir(current);
3778 } catch (e) {
3779 // ignore EEXIST
3780 }
3781 parent = current;
3782 }
3783 return current;
3784 },createFile:function (parent, name, properties, canRead, canWrite) {
3785 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3786 var mode = FS.getMode(canRead, canWrite);
3787 return FS.create(path, mode);
3788 },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
3789 var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
3790 var mode = FS.getMode(canRead, canWrite);
3791 var node = FS.create(path, mode);
3792 if (data) {
3793 if (typeof data === 'string') {
3794 var arr = new Array(data.length);
3795 for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
3796 data = arr;
3797 }
3798 // make sure we can write to the file
3799 FS.chmod(node, mode | 146);
3800 var stream = FS.open(node, 'w');
3801 FS.write(stream, data, 0, data.length, 0, canOwn);
3802 FS.close(stream);
3803 FS.chmod(node, mode);
3804 }
3805 return node;
3806 },createDevice:function (parent, name, input, output) {
3807 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3808 var mode = FS.getMode(!!input, !!output);
3809 if (!FS.createDevice.major) FS.createDevice.major = 64;
3810 var dev = FS.makedev(FS.createDevice.major++, 0);
3811 // Create a fake device that a set of stream ops to emulate
3812 // the old behavior.
3813 FS.registerDevice(dev, {
3814 open: function(stream) {
3815 stream.seekable = false;
3816 },
3817 close: function(stream) {
3818 // flush any pending line data
3819 if (output && output.buffer && output.buffer.length) {
3820 output(10);
3821 }
3822 },
3823 read: function(stream, buffer, offset, length, pos /* ignored */) {
3824 var bytesRead = 0;
3825 for (var i = 0; i < length; i++) {
3826 var result;
3827 try {
3828 result = input();
3829 } catch (e) {
3830 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3831 }
3832 if (result === undefined && bytesRead === 0) {
3833 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
3834 }
3835 if (result === null || result === undefined) break;
3836 bytesRead++;
3837 buffer[offset+i] = result;
3838 }
3839 if (bytesRead) {
3840 stream.node.timestamp = Date.now();
3841 }
3842 return bytesRead;
3843 },
3844 write: function(stream, buffer, offset, length, pos) {
3845 for (var i = 0; i < length; i++) {
3846 try {
3847 output(buffer[offset+i]);
3848 } catch (e) {
3849 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3850 }
3851 }
3852 if (length) {
3853 stream.node.timestamp = Date.now();
3854 }
3855 return i;
3856 }
3857 });
3858 return FS.mkdev(path, mode, dev);
3859 },createLink:function (parent, name, target, canRead, canWrite) {
3860 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
3861 return FS.symlink(target, path);
3862 },forceLoadFile:function (obj) {
3863 if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
3864 var success = true;
3865 if (typeof XMLHttpRequest !== 'undefined') {
3866 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.");
3867 } else if (Module['read']) {
3868 // Command-line.
3869 try {
3870 // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
3871 // read() will try to parse UTF8.
3872 obj.contents = intArrayFromString(Module['read'](obj.url), true);
3873 } catch (e) {
3874 success = false;
3875 }
3876 } else {
3877 throw new Error('Cannot load without read() or XMLHttpRequest.');
3878 }
3879 if (!success) ___setErrNo(ERRNO_CODES.EIO);
3880 return success;
3881 },createLazyFile:function (parent, name, url, canRead, canWrite) {
3882 // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
3883 function LazyUint8Array() {
3884 this.lengthKnown = false;
3885 this.chunks = []; // Loaded chunks. Index is the chunk number
3886 }
3887 LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
3888 if (idx > this.length-1 || idx < 0) {
3889 return undefined;
3890 }
3891 var chunkOffset = idx % this.chunkSize;
3892 var chunkNum = Math.floor(idx / this.chunkSize);
3893 return this.getter(chunkNum)[chunkOffset];
3894 }
3895 LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
3896 this.getter = getter;
3897 }
3898 LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
3899 // Find length
3900 var xhr = new XMLHttpRequest();
3901 xhr.open('HEAD', url, false);
3902 xhr.send(null);
3903 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3904 var datalength = Number(xhr.getResponseHeader("Content-length"));
3905 var header;
3906 var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
3907 var chunkSize = 1024*1024; // Chunk size in bytes
3908
3909 if (!hasByteServing) chunkSize = datalength;
3910
3911 // Function to get a range from the remote URL.
3912 var doXHR = (function(from, to) {
3913 if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
3914 if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
3915
3916 // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
3917 var xhr = new XMLHttpRequest();
3918 xhr.open('GET', url, false);
3919 if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
3920
3921 // Some hints to the browser that we want binary data.
3922 if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
3923 if (xhr.overrideMimeType) {
3924 xhr.overrideMimeType('text/plain; charset=x-user-defined');
3925 }
3926
3927 xhr.send(null);
3928 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
3929 if (xhr.response !== undefined) {
3930 return new Uint8Array(xhr.response || []);
3931 } else {
3932 return intArrayFromString(xhr.responseText || '', true);
3933 }
3934 });
3935 var lazyArray = this;
3936 lazyArray.setDataGetter(function(chunkNum) {
3937 var start = chunkNum * chunkSize;
3938 var end = (chunkNum+1) * chunkSize - 1; // including this byte
3939 end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
3940 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
3941 lazyArray.chunks[chunkNum] = doXHR(start, end);
3942 }
3943 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
3944 return lazyArray.chunks[chunkNum];
3945 });
3946
3947 this._length = datalength;
3948 this._chunkSize = chunkSize;
3949 this.lengthKnown = true;
3950 }
3951 if (typeof XMLHttpRequest !== 'undefined') {
3952 if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
3953 var lazyArray = new LazyUint8Array();
3954 Object.defineProperty(lazyArray, "length", {
3955 get: function() {
3956 if(!this.lengthKnown) {
3957 this.cacheLength();
3958 }
3959 return this._length;
3960 }
3961 });
3962 Object.defineProperty(lazyArray, "chunkSize", {
3963 get: function() {
3964 if(!this.lengthKnown) {
3965 this.cacheLength();
3966 }
3967 return this._chunkSize;
3968 }
3969 });
3970
3971 var properties = { isDevice: false, contents: lazyArray };
3972 } else {
3973 var properties = { isDevice: false, url: url };
3974 }
3975
3976 var node = FS.createFile(parent, name, properties, canRead, canWrite);
3977 // This is a total hack, but I want to get this lazy file code out of the
3978 // core of MEMFS. If we want to keep this lazy file concept I feel it should
3979 // be its own thin LAZYFS proxying calls to MEMFS.
3980 if (properties.contents) {
3981 node.contents = properties.contents;
3982 } else if (properties.url) {
3983 node.contents = null;
3984 node.url = properties.url;
3985 }
3986 // override each stream op with one that tries to force load the lazy file first
3987 var stream_ops = {};
3988 var keys = Object.keys(node.stream_ops);
3989 keys.forEach(function(key) {
3990 var fn = node.stream_ops[key];
3991 stream_ops[key] = function forceLoadLazyFile() {
3992 if (!FS.forceLoadFile(node)) {
3993 throw new FS.ErrnoError(ERRNO_CODES.EIO);
3994 }
3995 return fn.apply(null, arguments);
3996 };
3997 });
3998 // use a custom read function
3999 stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
4000 if (!FS.forceLoadFile(node)) {
4001 throw new FS.ErrnoError(ERRNO_CODES.EIO);
4002 }
4003 var contents = stream.node.contents;
4004 if (position >= contents.length)
4005 return 0;
4006 var size = Math.min(contents.length - position, length);
4007 assert(size >= 0);
4008 if (contents.slice) { // normal array
4009 for (var i = 0; i < size; i++) {
4010 buffer[offset + i] = contents[position + i];
4011 }
4012 } else {
4013 for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
4014 buffer[offset + i] = contents.get(position + i);
4015 }
4016 }
4017 return size;
4018 };
4019 node.stream_ops = stream_ops;
4020 return node;
4021 },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) {
4022 Browser.init();
4023 // TODO we should allow people to just pass in a complete filename instead
4024 // of parent and name being that we just join them anyways
4025 var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
4026 function processData(byteArray) {
4027 function finish(byteArray) {
4028 if (!dontCreateFile) {
4029 FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
4030 }
4031 if (onload) onload();
4032 removeRunDependency('cp ' + fullname);
4033 }
4034 var handled = false;
4035 Module['preloadPlugins'].forEach(function(plugin) {
4036 if (handled) return;
4037 if (plugin['canHandle'](fullname)) {
4038 plugin['handle'](byteArray, fullname, finish, function() {
4039 if (onerror) onerror();
4040 removeRunDependency('cp ' + fullname);
4041 });
4042 handled = true;
4043 }
4044 });
4045 if (!handled) finish(byteArray);
4046 }
4047 addRunDependency('cp ' + fullname);
4048 if (typeof url == 'string') {
4049 Browser.asyncLoad(url, function(byteArray) {
4050 processData(byteArray);
4051 }, onerror);
4052 } else {
4053 processData(url);
4054 }
4055 },indexedDB:function () {
4056 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
4057 },DB_NAME:function () {
4058 return 'EM_FS_' + window.location.pathname;
4059 },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) {
4060 onload = onload || function(){};
4061 onerror = onerror || function(){};
4062 var indexedDB = FS.indexedDB();
4063 try {
4064 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
4065 } catch (e) {
4066 return onerror(e);
4067 }
4068 openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
4069 console.log('creating db');
4070 var db = openRequest.result;
4071 db.createObjectStore(FS.DB_STORE_NAME);
4072 };
4073 openRequest.onsuccess = function openRequest_onsuccess() {
4074 var db = openRequest.result;
4075 var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
4076 var files = transaction.objectStore(FS.DB_STORE_NAME);
4077 var ok = 0, fail = 0, total = paths.length;
4078 function finish() {
4079 if (fail == 0) onload(); else onerror();
4080 }
4081 paths.forEach(function(path) {
4082 var putRequest = files.put(FS.analyzePath(path).object.contents, path);
4083 putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() };
4084 putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
4085 });
4086 transaction.onerror = onerror;
4087 };
4088 openRequest.onerror = onerror;
4089 },loadFilesFromDB:function (paths, onload, onerror) {
4090 onload = onload || function(){};
4091 onerror = onerror || function(){};
4092 var indexedDB = FS.indexedDB();
4093 try {
4094 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
4095 } catch (e) {
4096 return onerror(e);
4097 }
4098 openRequest.onupgradeneeded = onerror; // no database to load from
4099 openRequest.onsuccess = function openRequest_onsuccess() {
4100 var db = openRequest.result;
4101 try {
4102 var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
4103 } catch(e) {
4104 onerror(e);
4105 return;
4106 }
4107 var files = transaction.objectStore(FS.DB_STORE_NAME);
4108 var ok = 0, fail = 0, total = paths.length;
4109 function finish() {
4110 if (fail == 0) onload(); else onerror();
4111 }
4112 paths.forEach(function(path) {
4113 var getRequest = files.get(path);
4114 getRequest.onsuccess = function getRequest_onsuccess() {
4115 if (FS.analyzePath(path).exists) {
4116 FS.unlink(path);
4117 }
4118 FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
4119 ok++;
4120 if (ok + fail == total) finish();
4121 };
4122 getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
4123 });
4124 transaction.onerror = onerror;
4125 };
4126 openRequest.onerror = onerror;
4127 }};
4128
4129
4130
4131
4132 function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) {
4133 return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
4134 },createSocket:function (family, type, protocol) {
4135 var streaming = type == 1;
4136 if (protocol) {
4137 assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp
4138 }
4139
4140 // create our internal socket structure
4141 var sock = {
4142 family: family,
4143 type: type,
4144 protocol: protocol,
4145 server: null,
4146 peers: {},
4147 pending: [],
4148 recv_queue: [],
4149 sock_ops: SOCKFS.websocket_sock_ops
4150 };
4151
4152 // create the filesystem node to store the socket structure
4153 var name = SOCKFS.nextname();
4154 var node = FS.createNode(SOCKFS.root, name, 49152, 0);
4155 node.sock = sock;
4156
4157 // and the wrapping stream that enables library functions such
4158 // as read and write to indirectly interact with the socket
4159 var stream = FS.createStream({
4160 path: name,
4161 node: node,
4162 flags: FS.modeStringToFlags('r+'),
4163 seekable: false,
4164 stream_ops: SOCKFS.stream_ops
4165 });
4166
4167 // map the new stream to the socket structure (sockets have a 1:1
4168 // relationship with a stream)
4169 sock.stream = stream;
4170
4171 return sock;
4172 },getSocket:function (fd) {
4173 var stream = FS.getStream(fd);
4174 if (!stream || !FS.isSocket(stream.node.mode)) {
4175 return null;
4176 }
4177 return stream.node.sock;
4178 },stream_ops:{poll:function (stream) {
4179 var sock = stream.node.sock;
4180 return sock.sock_ops.poll(sock);
4181 },ioctl:function (stream, request, varargs) {
4182 var sock = stream.node.sock;
4183 return sock.sock_ops.ioctl(sock, request, varargs);
4184 },read:function (stream, buffer, offset, length, position /* ignored */) {
4185 var sock = stream.node.sock;
4186 var msg = sock.sock_ops.recvmsg(sock, length);
4187 if (!msg) {
4188 // socket is closed
4189 return 0;
4190 }
4191 buffer.set(msg.buffer, offset);
4192 return msg.buffer.length;
4193 },write:function (stream, buffer, offset, length, position /* ignored */) {
4194 var sock = stream.node.sock;
4195 return sock.sock_ops.sendmsg(sock, buffer, offset, length);
4196 },close:function (stream) {
4197 var sock = stream.node.sock;
4198 sock.sock_ops.close(sock);
4199 }},nextname:function () {
4200 if (!SOCKFS.nextname.current) {
4201 SOCKFS.nextname.current = 0;
4202 }
4203 return 'socket[' + (SOCKFS.nextname.current++) + ']';
4204 },websocket_sock_ops:{createPeer:function (sock, addr, port) {
4205 var ws;
4206
4207 if (typeof addr === 'object') {
4208 ws = addr;
4209 addr = null;
4210 port = null;
4211 }
4212
4213 if (ws) {
4214 // for sockets that've already connected (e.g. we're the server)
4215 // we can inspect the _socket property for the address
4216 if (ws._socket) {
4217 addr = ws._socket.remoteAddress;
4218 port = ws._socket.remotePort;
4219 }
4220 // if we're just now initializing a connection to the remote,
4221 // inspect the url property
4222 else {
4223 var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);
4224 if (!result) {
4225 throw new Error('WebSocket URL must be in the format ws(s)://address:port');
4226 }
4227 addr = result[1];
4228 port = parseInt(result[2], 10);
4229 }
4230 } else {
4231 // create the actual websocket object and connect
4232 try {
4233 // runtimeConfig gets set to true if WebSocket runtime configuration is available.
4234 var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket']));
4235
4236 // The default value is 'ws://' the replace is needed because the compiler replaces "//" comments with '#'
4237 // comments without checking context, so we'd end up with ws:#, the replace swaps the "#" for "//" again.
4238 var url = 'ws:#'.replace('#', '//');
4239
4240 if (runtimeConfig) {
4241 if ('string' === typeof Module['websocket']['url']) {
4242 url = Module['websocket']['url']; // Fetch runtime WebSocket URL config.
4243 }
4244 }
4245
4246 if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it.
4247 url = url + addr + ':' + port;
4248 }
4249
4250 // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set.
4251 var subProtocols = 'binary'; // The default value is 'binary'
4252
4253 if (runtimeConfig) {
4254 if ('string' === typeof Module['websocket']['subprotocol']) {
4255 subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config.
4256 }
4257 }
4258
4259 // The regex trims the string (removes spaces at the beginning and end, then splits the string by
4260 // <any space>,<any space> into an Array. Whitespace removal is important for Websockify and ws.
4261 subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */);
4262
4263 // The node ws library API for specifying optional subprotocol is slightly different than the browser's.
4264 var opts = ENVIRONMENT_IS_NODE ? {'protocol': subProtocols.toString()} : subProtocols;
4265
4266 // If node we use the ws library.
4267 var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket'];
4268 ws = new WebSocket(url, opts);
4269 ws.binaryType = 'arraybuffer';
4270 } catch (e) {
4271 throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH);
4272 }
4273 }
4274
4275
4276 var peer = {
4277 addr: addr,
4278 port: port,
4279 socket: ws,
4280 dgram_send_queue: []
4281 };
4282
4283 SOCKFS.websocket_sock_ops.addPeer(sock, peer);
4284 SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer);
4285
4286 // if this is a bound dgram socket, send the port number first to allow
4287 // us to override the ephemeral port reported to us by remotePort on the
4288 // remote end.
4289 if (sock.type === 2 && typeof sock.sport !== 'undefined') {
4290 peer.dgram_send_queue.push(new Uint8Array([
4291 255, 255, 255, 255,
4292 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0),
4293 ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff)
4294 ]));
4295 }
4296
4297 return peer;
4298 },getPeer:function (sock, addr, port) {
4299 return sock.peers[addr + ':' + port];
4300 },addPeer:function (sock, peer) {
4301 sock.peers[peer.addr + ':' + peer.port] = peer;
4302 },removePeer:function (sock, peer) {
4303 delete sock.peers[peer.addr + ':' + peer.port];
4304 },handlePeerEvents:function (sock, peer) {
4305 var first = true;
4306
4307 var handleOpen = function () {
4308 try {
4309 var queued = peer.dgram_send_queue.shift();
4310 while (queued) {
4311 peer.socket.send(queued);
4312 queued = peer.dgram_send_queue.shift();
4313 }
4314 } catch (e) {
4315 // not much we can do here in the way of proper error handling as we've already
4316 // lied and said this data was sent. shut it down.
4317 peer.socket.close();
4318 }
4319 };
4320
4321 function handleMessage(data) {
4322 assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer
4323 data = new Uint8Array(data); // make a typed array view on the array buffer
4324
4325
4326 // if this is the port message, override the peer's port with it
4327 var wasfirst = first;
4328 first = false;
4329 if (wasfirst &&
4330 data.length === 10 &&
4331 data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 &&
4332 data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) {
4333 // update the peer's port and it's key in the peer map
4334 var newport = ((data[8] << 8) | data[9]);
4335 SOCKFS.websocket_sock_ops.removePeer(sock, peer);
4336 peer.port = newport;
4337 SOCKFS.websocket_sock_ops.addPeer(sock, peer);
4338 return;
4339 }
4340
4341 sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data });
4342 };
4343
4344 if (ENVIRONMENT_IS_NODE) {
4345 peer.socket.on('open', handleOpen);
4346 peer.socket.on('message', function(data, flags) {
4347 if (!flags.binary) {
4348 return;
4349 }
4350 handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer
4351 });
4352 peer.socket.on('error', function() {
4353 // don't throw
4354 });
4355 } else {
4356 peer.socket.onopen = handleOpen;
4357 peer.socket.onmessage = function peer_socket_onmessage(event) {
4358 handleMessage(event.data);
4359 };
4360 }
4361 },poll:function (sock) {
4362 if (sock.type === 1 && sock.server) {
4363 // listen sockets should only say they're available for reading
4364 // if there are pending clients.
4365 return sock.pending.length ? (64 | 1) : 0;
4366 }
4367
4368 var mask = 0;
4369 var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets
4370 SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) :
4371 null;
4372
4373 if (sock.recv_queue.length ||
4374 !dest || // connection-less sockets are always ready to read
4375 (dest && dest.socket.readyState === dest.socket.CLOSING) ||
4376 (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed
4377 mask |= (64 | 1);
4378 }
4379
4380 if (!dest || // connection-less sockets are always ready to write
4381 (dest && dest.socket.readyState === dest.socket.OPEN)) {
4382 mask |= 4;
4383 }
4384
4385 if ((dest && dest.socket.readyState === dest.socket.CLOSING) ||
4386 (dest && dest.socket.readyState === dest.socket.CLOSED)) {
4387 mask |= 16;
4388 }
4389
4390 return mask;
4391 },ioctl:function (sock, request, arg) {
4392 switch (request) {
4393 case 21531:
4394 var bytes = 0;
4395 if (sock.recv_queue.length) {
4396 bytes = sock.recv_queue[0].data.length;
4397 }
4398 HEAP32[((arg)>>2)]=bytes;
4399 return 0;
4400 default:
4401 return ERRNO_CODES.EINVAL;
4402 }
4403 },close:function (sock) {
4404 // if we've spawned a listen server, close it
4405 if (sock.server) {
4406 try {
4407 sock.server.close();
4408 } catch (e) {
4409 }
4410 sock.server = null;
4411 }
4412 // close any peer connections
4413 var peers = Object.keys(sock.peers);
4414 for (var i = 0; i < peers.length; i++) {
4415 var peer = sock.peers[peers[i]];
4416 try {
4417 peer.socket.close();
4418 } catch (e) {
4419 }
4420 SOCKFS.websocket_sock_ops.removePeer(sock, peer);
4421 }
4422 return 0;
4423 },bind:function (sock, addr, port) {
4424 if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') {
4425 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound
4426 }
4427 sock.saddr = addr;
4428 sock.sport = port || _mkport();
4429 // in order to emulate dgram sockets, we need to launch a listen server when
4430 // binding on a connection-less socket
4431 // note: this is only required on the server side
4432 if (sock.type === 2) {
4433 // close the existing server if it exists
4434 if (sock.server) {
4435 sock.server.close();
4436 sock.server = null;
4437 }
4438 // swallow error operation not supported error that occurs when binding in the
4439 // browser where this isn't supported
4440 try {
4441 sock.sock_ops.listen(sock, 0);
4442 } catch (e) {
4443 if (!(e instanceof FS.ErrnoError)) throw e;
4444 if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e;
4445 }
4446 }
4447 },connect:function (sock, addr, port) {
4448 if (sock.server) {
4449 throw new FS.ErrnoError(ERRNO_CODS.EOPNOTSUPP);
4450 }
4451
4452 // TODO autobind
4453 // if (!sock.addr && sock.type == 2) {
4454 // }
4455
4456 // early out if we're already connected / in the middle of connecting
4457 if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') {
4458 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
4459 if (dest) {
4460 if (dest.socket.readyState === dest.socket.CONNECTING) {
4461 throw new FS.ErrnoError(ERRNO_CODES.EALREADY);
4462 } else {
4463 throw new FS.ErrnoError(ERRNO_CODES.EISCONN);
4464 }
4465 }
4466 }
4467
4468 // add the socket to our peer list and set our
4469 // destination address / port to match
4470 var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
4471 sock.daddr = peer.addr;
4472 sock.dport = peer.port;
4473
4474 // always "fail" in non-blocking mode
4475 throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS);
4476 },listen:function (sock, backlog) {
4477 if (!ENVIRONMENT_IS_NODE) {
4478 throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
4479 }
4480 if (sock.server) {
4481 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening
4482 }
4483 var WebSocketServer = require('ws').Server;
4484 var host = sock.saddr;
4485 sock.server = new WebSocketServer({
4486 host: host,
4487 port: sock.sport
4488 // TODO support backlog
4489 });
4490
4491 sock.server.on('connection', function(ws) {
4492 if (sock.type === 1) {
4493 var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol);
4494
4495 // create a peer on the new socket
4496 var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws);
4497 newsock.daddr = peer.addr;
4498 newsock.dport = peer.port;
4499
4500 // push to queue for accept to pick up
4501 sock.pending.push(newsock);
4502 } else {
4503 // create a peer on the listen socket so calling sendto
4504 // with the listen socket and an address will resolve
4505 // to the correct client
4506 SOCKFS.websocket_sock_ops.createPeer(sock, ws);
4507 }
4508 });
4509 sock.server.on('closed', function() {
4510 sock.server = null;
4511 });
4512 sock.server.on('error', function() {
4513 // don't throw
4514 });
4515 },accept:function (listensock) {
4516 if (!listensock.server) {
4517 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
4518 }
4519 var newsock = listensock.pending.shift();
4520 newsock.stream.flags = listensock.stream.flags;
4521 return newsock;
4522 },getname:function (sock, peer) {
4523 var addr, port;
4524 if (peer) {
4525 if (sock.daddr === undefined || sock.dport === undefined) {
4526 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4527 }
4528 addr = sock.daddr;
4529 port = sock.dport;
4530 } else {
4531 // TODO saddr and sport will be set for bind()'d UDP sockets, but what
4532 // should we be returning for TCP sockets that've been connect()'d?
4533 addr = sock.saddr || 0;
4534 port = sock.sport || 0;
4535 }
4536 return { addr: addr, port: port };
4537 },sendmsg:function (sock, buffer, offset, length, addr, port) {
4538 if (sock.type === 2) {
4539 // connection-less sockets will honor the message address,
4540 // and otherwise fall back to the bound destination address
4541 if (addr === undefined || port === undefined) {
4542 addr = sock.daddr;
4543 port = sock.dport;
4544 }
4545 // if there was no address to fall back to, error out
4546 if (addr === undefined || port === undefined) {
4547 throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ);
4548 }
4549 } else {
4550 // connection-based sockets will only use the bound
4551 addr = sock.daddr;
4552 port = sock.dport;
4553 }
4554
4555 // find the peer for the destination address
4556 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port);
4557
4558 // early out if not connected with a connection-based socket
4559 if (sock.type === 1) {
4560 if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
4561 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4562 } else if (dest.socket.readyState === dest.socket.CONNECTING) {
4563 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4564 }
4565 }
4566
4567 // create a copy of the incoming data to send, as the WebSocket API
4568 // doesn't work entirely with an ArrayBufferView, it'll just send
4569 // the entire underlying buffer
4570 var data;
4571 if (buffer instanceof Array || buffer instanceof ArrayBuffer) {
4572 data = buffer.slice(offset, offset + length);
4573 } else { // ArrayBufferView
4574 data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length);
4575 }
4576
4577 // if we're emulating a connection-less dgram socket and don't have
4578 // a cached connection, queue the buffer to send upon connect and
4579 // lie, saying the data was sent now.
4580 if (sock.type === 2) {
4581 if (!dest || dest.socket.readyState !== dest.socket.OPEN) {
4582 // if we're not connected, open a new connection
4583 if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
4584 dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
4585 }
4586 dest.dgram_send_queue.push(data);
4587 return length;
4588 }
4589 }
4590
4591 try {
4592 // send the actual data
4593 dest.socket.send(data);
4594 return length;
4595 } catch (e) {
4596 throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
4597 }
4598 },recvmsg:function (sock, length) {
4599 // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html
4600 if (sock.type === 1 && sock.server) {
4601 // tcp servers should not be recv()'ing on the listen socket
4602 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4603 }
4604
4605 var queued = sock.recv_queue.shift();
4606 if (!queued) {
4607 if (sock.type === 1) {
4608 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
4609
4610 if (!dest) {
4611 // if we have a destination address but are not connected, error out
4612 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
4613 }
4614 else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
4615 // return null if the socket has closed
4616 return null;
4617 }
4618 else {
4619 // else, our socket is in a valid state but truly has nothing available
4620 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4621 }
4622 } else {
4623 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
4624 }
4625 }
4626
4627 // queued.data will be an ArrayBuffer if it's unadulterated, but if it's
4628 // requeued TCP data it'll be an ArrayBufferView
4629 var queuedLength = queued.data.byteLength || queued.data.length;
4630 var queuedOffset = queued.data.byteOffset || 0;
4631 var queuedBuffer = queued.data.buffer || queued.data;
4632 var bytesRead = Math.min(length, queuedLength);
4633 var res = {
4634 buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead),
4635 addr: queued.addr,
4636 port: queued.port
4637 };
4638
4639
4640 // push back any unread data for TCP connections
4641 if (sock.type === 1 && bytesRead < queuedLength) {
4642 var bytesRemaining = queuedLength - bytesRead;
4643 queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining);
4644 sock.recv_queue.unshift(queued);
4645 }
4646
4647 return res;
4648 }}};function _send(fd, buf, len, flags) {
4649 var sock = SOCKFS.getSocket(fd);
4650 if (!sock) {
4651 ___setErrNo(ERRNO_CODES.EBADF);
4652 return -1;
4653 }
4654 // TODO honor flags
4655 return _write(fd, buf, len);
4656 }
4657
4658 function _pwrite(fildes, buf, nbyte, offset) {
4659 // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
4660 // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
4661 var stream = FS.getStream(fildes);
4662 if (!stream) {
4663 ___setErrNo(ERRNO_CODES.EBADF);
4664 return -1;
4665 }
4666 try {
4667 var slab = HEAP8;
4668 return FS.write(stream, slab, buf, nbyte, offset);
4669 } catch (e) {
4670 FS.handleFSError(e);
4671 return -1;
4672 }
4673 }function _write(fildes, buf, nbyte) {
4674 // ssize_t write(int fildes, const void *buf, size_t nbyte);
4675 // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
4676 var stream = FS.getStream(fildes);
4677 if (!stream) {
4678 ___setErrNo(ERRNO_CODES.EBADF);
4679 return -1;
4680 }
4681
4682
4683 try {
4684 var slab = HEAP8;
4685 return FS.write(stream, slab, buf, nbyte);
4686 } catch (e) {
4687 FS.handleFSError(e);
4688 return -1;
4689 }
4690 }
4691
4692 function _fileno(stream) {
4693 // int fileno(FILE *stream);
4694 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html
4695 stream = FS.getStreamFromPtr(stream);
4696 if (!stream) return -1;
4697 return stream.fd;
4698 }function _fwrite(ptr, size, nitems, stream) {
4699 // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
4700 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
4701 var bytesToWrite = nitems * size;
4702 if (bytesToWrite == 0) return 0;
4703 var fd = _fileno(stream);
4704 var bytesWritten = _write(fd, ptr, bytesToWrite);
4705 if (bytesWritten == -1) {
4706 var streamObj = FS.getStreamFromPtr(stream);
4707 if (streamObj) streamObj.error = true;
4708 return 0;
4709 } else {
4710 return Math.floor(bytesWritten / size);
4711 }
4712 }
4713
4714
4715
4716 Module["_strlen"] = _strlen;
4717
4718 function __reallyNegative(x) {
4719 return x < 0 || (x === 0 && (1/x) === -Infinity);
4720 }function __formatString(format, varargs) {
4721 var textIndex = format;
4722 var argIndex = 0;
4723 function getNextArg(type) {
4724 // NOTE: Explicitly ignoring type safety. Otherwise this fails:
4725 // int x = 4; printf("%c\n", (char)x);
4726 var ret;
4727 if (type === 'double') {
4728 ret = HEAPF64[(((varargs)+(argIndex))>>3)];
4729 } else if (type == 'i64') {
4730 ret = [HEAP32[(((varargs)+(argIndex))>>2)],
4731 HEAP32[(((varargs)+(argIndex+4))>>2)]];
4732
4733 } else {
4734 type = 'i32'; // varargs are always i32, i64, or double
4735 ret = HEAP32[(((varargs)+(argIndex))>>2)];
4736 }
4737 argIndex += Runtime.getNativeFieldSize(type);
4738 return ret;
4739 }
4740
4741 var ret = [];
4742 var curr, next, currArg;
4743 while(1) {
4744 var startTextIndex = textIndex;
4745 curr = HEAP8[(textIndex)];
4746 if (curr === 0) break;
4747 next = HEAP8[((textIndex+1)|0)];
4748 if (curr == 37) {
4749 // Handle flags.
4750 var flagAlwaysSigned = false;
4751 var flagLeftAlign = false;
4752 var flagAlternative = false;
4753 var flagZeroPad = false;
4754 var flagPadSign = false;
4755 flagsLoop: while (1) {
4756 switch (next) {
4757 case 43:
4758 flagAlwaysSigned = true;
4759 break;
4760 case 45:
4761 flagLeftAlign = true;
4762 break;
4763 case 35:
4764 flagAlternative = true;
4765 break;
4766 case 48:
4767 if (flagZeroPad) {
4768 break flagsLoop;
4769 } else {
4770 flagZeroPad = true;
4771 break;
4772 }
4773 case 32:
4774 flagPadSign = true;
4775 break;
4776 default:
4777 break flagsLoop;
4778 }
4779 textIndex++;
4780 next = HEAP8[((textIndex+1)|0)];
4781 }
4782
4783 // Handle width.
4784 var width = 0;
4785 if (next == 42) {
4786 width = getNextArg('i32');
4787 textIndex++;
4788 next = HEAP8[((textIndex+1)|0)];
4789 } else {
4790 while (next >= 48 && next <= 57) {
4791 width = width * 10 + (next - 48);
4792 textIndex++;
4793 next = HEAP8[((textIndex+1)|0)];
4794 }
4795 }
4796
4797 // Handle precision.
4798 var precisionSet = false, precision = -1;
4799 if (next == 46) {
4800 precision = 0;
4801 precisionSet = true;
4802 textIndex++;
4803 next = HEAP8[((textIndex+1)|0)];
4804 if (next == 42) {
4805 precision = getNextArg('i32');
4806 textIndex++;
4807 } else {
4808 while(1) {
4809 var precisionChr = HEAP8[((textIndex+1)|0)];
4810 if (precisionChr < 48 ||
4811 precisionChr > 57) break;
4812 precision = precision * 10 + (precisionChr - 48);
4813 textIndex++;
4814 }
4815 }
4816 next = HEAP8[((textIndex+1)|0)];
4817 }
4818 if (precision < 0) {
4819 precision = 6; // Standard default.
4820 precisionSet = false;
4821 }
4822
4823 // Handle integer sizes. WARNING: These assume a 32-bit architecture!
4824 var argSize;
4825 switch (String.fromCharCode(next)) {
4826 case 'h':
4827 var nextNext = HEAP8[((textIndex+2)|0)];
4828 if (nextNext == 104) {
4829 textIndex++;
4830 argSize = 1; // char (actually i32 in varargs)
4831 } else {
4832 argSize = 2; // short (actually i32 in varargs)
4833 }
4834 break;
4835 case 'l':
4836 var nextNext = HEAP8[((textIndex+2)|0)];
4837 if (nextNext == 108) {
4838 textIndex++;
4839 argSize = 8; // long long
4840 } else {
4841 argSize = 4; // long
4842 }
4843 break;
4844 case 'L': // long long
4845 case 'q': // int64_t
4846 case 'j': // intmax_t
4847 argSize = 8;
4848 break;
4849 case 'z': // size_t
4850 case 't': // ptrdiff_t
4851 case 'I': // signed ptrdiff_t or unsigned size_t
4852 argSize = 4;
4853 break;
4854 default:
4855 argSize = null;
4856 }
4857 if (argSize) textIndex++;
4858 next = HEAP8[((textIndex+1)|0)];
4859
4860 // Handle type specifier.
4861 switch (String.fromCharCode(next)) {
4862 case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': {
4863 // Integer.
4864 var signed = next == 100 || next == 105;
4865 argSize = argSize || 4;
4866 var currArg = getNextArg('i' + (argSize * 8));
4867 var argText;
4868 // Flatten i64-1 [low, high] into a (slightly rounded) double
4869 if (argSize == 8) {
4870 currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117);
4871 }
4872 // Truncate to requested size.
4873 if (argSize <= 4) {
4874 var limit = Math.pow(256, argSize) - 1;
4875 currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
4876 }
4877 // Format the number.
4878 var currAbsArg = Math.abs(currArg);
4879 var prefix = '';
4880 if (next == 100 || next == 105) {
4881 argText = reSign(currArg, 8 * argSize, 1).toString(10);
4882 } else if (next == 117) {
4883 argText = unSign(currArg, 8 * argSize, 1).toString(10);
4884 currArg = Math.abs(currArg);
4885 } else if (next == 111) {
4886 argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
4887 } else if (next == 120 || next == 88) {
4888 prefix = (flagAlternative && currArg != 0) ? '0x' : '';
4889 if (currArg < 0) {
4890 // Represent negative numbers in hex as 2's complement.
4891 currArg = -currArg;
4892 argText = (currAbsArg - 1).toString(16);
4893 var buffer = [];
4894 for (var i = 0; i < argText.length; i++) {
4895 buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
4896 }
4897 argText = buffer.join('');
4898 while (argText.length < argSize * 2) argText = 'f' + argText;
4899 } else {
4900 argText = currAbsArg.toString(16);
4901 }
4902 if (next == 88) {
4903 prefix = prefix.toUpperCase();
4904 argText = argText.toUpperCase();
4905 }
4906 } else if (next == 112) {
4907 if (currAbsArg === 0) {
4908 argText = '(nil)';
4909 } else {
4910 prefix = '0x';
4911 argText = currAbsArg.toString(16);
4912 }
4913 }
4914 if (precisionSet) {
4915 while (argText.length < precision) {
4916 argText = '0' + argText;
4917 }
4918 }
4919
4920 // Add sign if needed
4921 if (currArg >= 0) {
4922 if (flagAlwaysSigned) {
4923 prefix = '+' + prefix;
4924 } else if (flagPadSign) {
4925 prefix = ' ' + prefix;
4926 }
4927 }
4928
4929 // Move sign to prefix so we zero-pad after the sign
4930 if (argText.charAt(0) == '-') {
4931 prefix = '-' + prefix;
4932 argText = argText.substr(1);
4933 }
4934
4935 // Add padding.
4936 while (prefix.length + argText.length < width) {
4937 if (flagLeftAlign) {
4938 argText += ' ';
4939 } else {
4940 if (flagZeroPad) {
4941 argText = '0' + argText;
4942 } else {
4943 prefix = ' ' + prefix;
4944 }
4945 }
4946 }
4947
4948 // Insert the result into the buffer.
4949 argText = prefix + argText;
4950 argText.split('').forEach(function(chr) {
4951 ret.push(chr.charCodeAt(0));
4952 });
4953 break;
4954 }
4955 case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
4956 // Float.
4957 var currArg = getNextArg('double');
4958 var argText;
4959 if (isNaN(currArg)) {
4960 argText = 'nan';
4961 flagZeroPad = false;
4962 } else if (!isFinite(currArg)) {
4963 argText = (currArg < 0 ? '-' : '') + 'inf';
4964 flagZeroPad = false;
4965 } else {
4966 var isGeneral = false;
4967 var effectivePrecision = Math.min(precision, 20);
4968
4969 // Convert g/G to f/F or e/E, as per:
4970 // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
4971 if (next == 103 || next == 71) {
4972 isGeneral = true;
4973 precision = precision || 1;
4974 var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10);
4975 if (precision > exponent && exponent >= -4) {
4976 next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
4977 precision -= exponent + 1;
4978 } else {
4979 next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
4980 precision--;
4981 }
4982 effectivePrecision = Math.min(precision, 20);
4983 }
4984
4985 if (next == 101 || next == 69) {
4986 argText = currArg.toExponential(effectivePrecision);
4987 // Make sure the exponent has at least 2 digits.
4988 if (/[eE][-+]\d$/.test(argText)) {
4989 argText = argText.slice(0, -1) + '0' + argText.slice(-1);
4990 }
4991 } else if (next == 102 || next == 70) {
4992 argText = currArg.toFixed(effectivePrecision);
4993 if (currArg === 0 && __reallyNegative(currArg)) {
4994 argText = '-' + argText;
4995 }
4996 }
4997
4998 var parts = argText.split('e');
4999 if (isGeneral && !flagAlternative) {
5000 // Discard trailing zeros and periods.
5001 while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
5002 (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) {
5003 parts[0] = parts[0].slice(0, -1);
5004 }
5005 } else {
5006 // Make sure we have a period in alternative mode.
5007 if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
5008 // Zero pad until required precision.
5009 while (precision > effectivePrecision++) parts[0] += '0';
5010 }
5011 argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
5012
5013 // Capitalize 'E' if needed.
5014 if (next == 69) argText = argText.toUpperCase();
5015
5016 // Add sign.
5017 if (currArg >= 0) {
5018 if (flagAlwaysSigned) {
5019 argText = '+' + argText;
5020 } else if (flagPadSign) {
5021 argText = ' ' + argText;
5022 }
5023 }
5024 }
5025
5026 // Add padding.
5027 while (argText.length < width) {
5028 if (flagLeftAlign) {
5029 argText += ' ';
5030 } else {
5031 if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
5032 argText = argText[0] + '0' + argText.slice(1);
5033 } else {
5034 argText = (flagZeroPad ? '0' : ' ') + argText;
5035 }
5036 }
5037 }
5038
5039 // Adjust case.
5040 if (next < 97) argText = argText.toUpperCase();
5041
5042 // Insert the result into the buffer.
5043 argText.split('').forEach(function(chr) {
5044 ret.push(chr.charCodeAt(0));
5045 });
5046 break;
5047 }
5048 case 's': {
5049 // String.
5050 var arg = getNextArg('i8*');
5051 var argLength = arg ? _strlen(arg) : '(null)'.length;
5052 if (precisionSet) argLength = Math.min(argLength, precision);
5053 if (!flagLeftAlign) {
5054 while (argLength < width--) {
5055 ret.push(32);
5056 }
5057 }
5058 if (arg) {
5059 for (var i = 0; i < argLength; i++) {
5060 ret.push(HEAPU8[((arg++)|0)]);
5061 }
5062 } else {
5063 ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true));
5064 }
5065 if (flagLeftAlign) {
5066 while (argLength < width--) {
5067 ret.push(32);
5068 }
5069 }
5070 break;
5071 }
5072 case 'c': {
5073 // Character.
5074 if (flagLeftAlign) ret.push(getNextArg('i8'));
5075 while (--width > 0) {
5076 ret.push(32);
5077 }
5078 if (!flagLeftAlign) ret.push(getNextArg('i8'));
5079 break;
5080 }
5081 case 'n': {
5082 // Write the length written so far to the next parameter.
5083 var ptr = getNextArg('i32*');
5084 HEAP32[((ptr)>>2)]=ret.length;
5085 break;
5086 }
5087 case '%': {
5088 // Literal percent sign.
5089 ret.push(curr);
5090 break;
5091 }
5092 default: {
5093 // Unknown specifiers remain untouched.
5094 for (var i = startTextIndex; i < textIndex + 2; i++) {
5095 ret.push(HEAP8[(i)]);
5096 }
5097 }
5098 }
5099 textIndex += 2;
5100 // TODO: Support a/A (hex float) and m (last error) specifiers.
5101 // TODO: Support %1${specifier} for arg selection.
5102 } else {
5103 ret.push(curr);
5104 textIndex += 1;
5105 }
5106 }
5107 return ret;
5108 }function _fprintf(stream, format, varargs) {
5109 // int fprintf(FILE *restrict stream, const char *restrict format, ...);
5110 // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
5111 var result = __formatString(format, varargs);
5112 var stack = Runtime.stackSave();
5113 var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream);
5114 Runtime.stackRestore(stack);
5115 return ret;
5116 }function _printf(format, varargs) {
5117 // int printf(const char *restrict format, ...);
5118 // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
5119 var stdout = HEAP32[((_stdout)>>2)];
5120 return _fprintf(stdout, format, varargs);
5121 }
5122
5123 var _sinf=Math_sin;
5124
5125
5126 var _sqrtf=Math_sqrt;
5127
5128 var _floorf=Math_floor;
5129
5130
5131 function _fputs(s, stream) {
5132 // int fputs(const char *restrict s, FILE *restrict stream);
5133 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
5134 var fd = _fileno(stream);
5135 return _write(fd, s, _strlen(s));
5136 }
5137
5138 function _fputc(c, stream) {
5139 // int fputc(int c, FILE *stream);
5140 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
5141 var chr = unSign(c & 0xFF);
5142 HEAP8[((_fputc.ret)|0)]=chr;
5143 var fd = _fileno(stream);
5144 var ret = _write(fd, _fputc.ret, 1);
5145 if (ret == -1) {
5146 var streamObj = FS.getStreamFromPtr(stream);
5147 if (streamObj) streamObj.error = true;
5148 return -1;
5149 } else {
5150 return chr;
5151 }
5152 }function _puts(s) {
5153 // int puts(const char *s);
5154 // http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html
5155 // NOTE: puts() always writes an extra newline.
5156 var stdout = HEAP32[((_stdout)>>2)];
5157 var ret = _fputs(s, stdout);
5158 if (ret < 0) {
5159 return ret;
5160 } else {
5161 var newlineRet = _fputc(10, stdout);
5162 return (newlineRet < 0) ? -1 : ret + 1;
5163 }
5164 }
5165
5166 function _clock() {
5167 if (_clock.start === undefined) _clock.start = Date.now();
5168 return Math.floor((Date.now() - _clock.start) * (1000000/1000));
5169 }
5170
5171
5172 var ___cxa_caught_exceptions=[];function ___cxa_begin_catch(ptr) {
5173 __ZSt18uncaught_exceptionv.uncaught_exception--;
5174 ___cxa_caught_exceptions.push(___cxa_last_thrown_exception);
5175 return ptr;
5176 }
5177
5178 function ___errno_location() {
5179 return ___errno_state;
5180 }
5181
5182
5183 function _emscripten_memcpy_big(dest, src, num) {
5184 HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
5185 return dest;
5186 }
5187 Module["_memcpy"] = _memcpy;
5188
5189 function __ZNSt9exceptionD2Ev() {}
5190
5191 var Browser={mainLoop:{scheduler:null,method:"",shouldPause:false,paused:false,queue:[],pause:function () {
5192 Browser.mainLoop.shouldPause = true;
5193 },resume:function () {
5194 if (Browser.mainLoop.paused) {
5195 Browser.mainLoop.paused = false;
5196 Browser.mainLoop.scheduler();
5197 }
5198 Browser.mainLoop.shouldPause = false;
5199 },updateStatus:function () {
5200 if (Module['setStatus']) {
5201 var message = Module['statusMessage'] || 'Please wait...';
5202 var remaining = Browser.mainLoop.remainingBlockers;
5203 var expected = Browser.mainLoop.expectedBlockers;
5204 if (remaining) {
5205 if (remaining < expected) {
5206 Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
5207 } else {
5208 Module['setStatus'](message);
5209 }
5210 } else {
5211 Module['setStatus']('');
5212 }
5213 }
5214 }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
5215 if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers
5216
5217 if (Browser.initted || ENVIRONMENT_IS_WORKER) return;
5218 Browser.initted = true;
5219
5220 try {
5221 new Blob();
5222 Browser.hasBlobConstructor = true;
5223 } catch(e) {
5224 Browser.hasBlobConstructor = false;
5225 console.log("warning: no blob constructor, cannot create blobs with mimetypes");
5226 }
5227 Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
5228 Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined;
5229 if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
5230 console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
5231 Module.noImageDecoding = true;
5232 }
5233
5234 // Support for plugins that can process preloaded files. You can add more of these to
5235 // your app by creating and appending to Module.preloadPlugins.
5236 //
5237 // Each plugin is asked if it can handle a file based on the file's name. If it can,
5238 // it is given the file's raw data. When it is done, it calls a callback with the file's
5239 // (possibly modified) data. For example, a plugin might decompress a file, or it
5240 // might create some side data structure for use later (like an Image element, etc.).
5241
5242 var imagePlugin = {};
5243 imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
5244 return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
5245 };
5246 imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {
5247 var b = null;
5248 if (Browser.hasBlobConstructor) {
5249 try {
5250 b = new Blob([byteArray], { type: Browser.getMimetype(name) });
5251 if (b.size !== byteArray.length) { // Safari bug #118630
5252 // Safari's Blob can only take an ArrayBuffer
5253 b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });
5254 }
5255 } catch(e) {
5256 Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
5257 }
5258 }
5259 if (!b) {
5260 var bb = new Browser.BlobBuilder();
5261 bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
5262 b = bb.getBlob();
5263 }
5264 var url = Browser.URLObject.createObjectURL(b);
5265 var img = new Image();
5266 img.onload = function img_onload() {
5267 assert(img.complete, 'Image ' + name + ' could not be decoded');
5268 var canvas = document.createElement('canvas');
5269 canvas.width = img.width;
5270 canvas.height = img.height;
5271 var ctx = canvas.getContext('2d');
5272 ctx.drawImage(img, 0, 0);
5273 Module["preloadedImages"][name] = canvas;
5274 Browser.URLObject.revokeObjectURL(url);
5275 if (onload) onload(byteArray);
5276 };
5277 img.onerror = function img_onerror(event) {
5278 console.log('Image ' + url + ' could not be decoded');
5279 if (onerror) onerror();
5280 };
5281 img.src = url;
5282 };
5283 Module['preloadPlugins'].push(imagePlugin);
5284
5285 var audioPlugin = {};
5286 audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
5287 return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
5288 };
5289 audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {
5290 var done = false;
5291 function finish(audio) {
5292 if (done) return;
5293 done = true;
5294 Module["preloadedAudios"][name] = audio;
5295 if (onload) onload(byteArray);
5296 }
5297 function fail() {
5298 if (done) return;
5299 done = true;
5300 Module["preloadedAudios"][name] = new Audio(); // empty shim
5301 if (onerror) onerror();
5302 }
5303 if (Browser.hasBlobConstructor) {
5304 try {
5305 var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
5306 } catch(e) {
5307 return fail();
5308 }
5309 var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
5310 var audio = new Audio();
5311 audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
5312 audio.onerror = function audio_onerror(event) {
5313 if (done) return;
5314 console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
5315 function encode64(data) {
5316 var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
5317 var PAD = '=';
5318 var ret = '';
5319 var leftchar = 0;
5320 var leftbits = 0;
5321 for (var i = 0; i < data.length; i++) {
5322 leftchar = (leftchar << 8) | data[i];
5323 leftbits += 8;
5324 while (leftbits >= 6) {
5325 var curr = (leftchar >> (leftbits-6)) & 0x3f;
5326 leftbits -= 6;
5327 ret += BASE[curr];
5328 }
5329 }
5330 if (leftbits == 2) {
5331 ret += BASE[(leftchar&3) << 4];
5332 ret += PAD + PAD;
5333 } else if (leftbits == 4) {
5334 ret += BASE[(leftchar&0xf) << 2];
5335 ret += PAD;
5336 }
5337 return ret;
5338 }
5339 audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
5340 finish(audio); // we don't wait for confirmation this worked - but it's worth trying
5341 };
5342 audio.src = url;
5343 // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
5344 Browser.safeSetTimeout(function() {
5345 finish(audio); // try to use it even though it is not necessarily ready to play
5346 }, 10000);
5347 } else {
5348 return fail();
5349 }
5350 };
5351 Module['preloadPlugins'].push(audioPlugin);
5352
5353 // Canvas event setup
5354
5355 var canvas = Module['canvas'];
5356
5357 // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module
5358 // Module['forcedAspectRatio'] = 4 / 3;
5359
5360 canvas.requestPointerLock = canvas['requestPointerLock'] ||
5361 canvas['mozRequestPointerLock'] ||
5362 canvas['webkitRequestPointerLock'] ||
5363 canvas['msRequestPointerLock'] ||
5364 function(){};
5365 canvas.exitPointerLock = document['exitPointerLock'] ||
5366 document['mozExitPointerLock'] ||
5367 document['webkitExitPointerLock'] ||
5368 document['msExitPointerLock'] ||
5369 function(){}; // no-op if function does not exist
5370 canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
5371
5372 function pointerLockChange() {
5373 Browser.pointerLock = document['pointerLockElement'] === canvas ||
5374 document['mozPointerLockElement'] === canvas ||
5375 document['webkitPointerLockElement'] === canvas ||
5376 document['msPointerLockElement'] === canvas;
5377 }
5378
5379 document.addEventListener('pointerlockchange', pointerLockChange, false);
5380 document.addEventListener('mozpointerlockchange', pointerLockChange, false);
5381 document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
5382 document.addEventListener('mspointerlockchange', pointerLockChange, false);
5383
5384 if (Module['elementPointerLock']) {
5385 canvas.addEventListener("click", function(ev) {
5386 if (!Browser.pointerLock && canvas.requestPointerLock) {
5387 canvas.requestPointerLock();
5388 ev.preventDefault();
5389 }
5390 }, false);
5391 }
5392 },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) {
5393 var ctx;
5394 var errorInfo = '?';
5395 function onContextCreationError(event) {
5396 errorInfo = event.statusMessage || errorInfo;
5397 }
5398 try {
5399 if (useWebGL) {
5400 var contextAttributes = {
5401 antialias: false,
5402 alpha: false
5403 };
5404
5405 if (webGLContextAttributes) {
5406 for (var attribute in webGLContextAttributes) {
5407 contextAttributes[attribute] = webGLContextAttributes[attribute];
5408 }
5409 }
5410
5411
5412 canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false);
5413 try {
5414 ['experimental-webgl', 'webgl'].some(function(webglId) {
5415 return ctx = canvas.getContext(webglId, contextAttributes);
5416 });
5417 } finally {
5418 canvas.removeEventListener('webglcontextcreationerror', onContextCreationError, false);
5419 }
5420 } else {
5421 ctx = canvas.getContext('2d');
5422 }
5423 if (!ctx) throw ':(';
5424 } catch (e) {
5425 Module.print('Could not create canvas: ' + [errorInfo, e]);
5426 return null;
5427 }
5428 if (useWebGL) {
5429 // Set the background of the WebGL canvas to black
5430 canvas.style.backgroundColor = "black";
5431
5432 // Warn on context loss
5433 canvas.addEventListener('webglcontextlost', function(event) {
5434 alert('WebGL context lost. You will need to reload the page.');
5435 }, false);
5436 }
5437 if (setInModule) {
5438 GLctx = Module.ctx = ctx;
5439 Module.useWebGL = useWebGL;
5440 Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
5441 Browser.init();
5442 }
5443 return ctx;
5444 },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) {
5445 Browser.lockPointer = lockPointer;
5446 Browser.resizeCanvas = resizeCanvas;
5447 if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
5448 if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
5449
5450 var canvas = Module['canvas'];
5451 function fullScreenChange() {
5452 Browser.isFullScreen = false;
5453 var canvasContainer = canvas.parentNode;
5454 if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
5455 document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
5456 document['fullScreenElement'] || document['fullscreenElement'] ||
5457 document['msFullScreenElement'] || document['msFullscreenElement'] ||
5458 document['webkitCurrentFullScreenElement']) === canvasContainer) {
5459 canvas.cancelFullScreen = document['cancelFullScreen'] ||
5460 document['mozCancelFullScreen'] ||
5461 document['webkitCancelFullScreen'] ||
5462 document['msExitFullscreen'] ||
5463 document['exitFullscreen'] ||
5464 function() {};
5465 canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
5466 if (Browser.lockPointer) canvas.requestPointerLock();
5467 Browser.isFullScreen = true;
5468 if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
5469 } else {
5470
5471 // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen
5472 canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
5473 canvasContainer.parentNode.removeChild(canvasContainer);
5474
5475 if (Browser.resizeCanvas) Browser.setWindowedCanvasSize();
5476 }
5477 if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen);
5478 Browser.updateCanvasDimensions(canvas);
5479 }
5480
5481 if (!Browser.fullScreenHandlersInstalled) {
5482 Browser.fullScreenHandlersInstalled = true;
5483 document.addEventListener('fullscreenchange', fullScreenChange, false);
5484 document.addEventListener('mozfullscreenchange', fullScreenChange, false);
5485 document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
5486 document.addEventListener('MSFullscreenChange', fullScreenChange, false);
5487 }
5488
5489 // create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root
5490 var canvasContainer = document.createElement("div");
5491 canvas.parentNode.insertBefore(canvasContainer, canvas);
5492 canvasContainer.appendChild(canvas);
5493
5494 // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size)
5495 canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] ||
5496 canvasContainer['mozRequestFullScreen'] ||
5497 canvasContainer['msRequestFullscreen'] ||
5498 (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
5499 canvasContainer.requestFullScreen();
5500 },requestAnimationFrame:function requestAnimationFrame(func) {
5501 if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js)
5502 setTimeout(func, 1000/60);
5503 } else {
5504 if (!window.requestAnimationFrame) {
5505 window.requestAnimationFrame = window['requestAnimationFrame'] ||
5506 window['mozRequestAnimationFrame'] ||
5507 window['webkitRequestAnimationFrame'] ||
5508 window['msRequestAnimationFrame'] ||
5509 window['oRequestAnimationFrame'] ||
5510 window['setTimeout'];
5511 }
5512 window.requestAnimationFrame(func);
5513 }
5514 },safeCallback:function (func) {
5515 return function() {
5516 if (!ABORT) return func.apply(null, arguments);
5517 };
5518 },safeRequestAnimationFrame:function (func) {
5519 return Browser.requestAnimationFrame(function() {
5520 if (!ABORT) func();
5521 });
5522 },safeSetTimeout:function (func, timeout) {
5523 return setTimeout(function() {
5524 if (!ABORT) func();
5525 }, timeout);
5526 },safeSetInterval:function (func, timeout) {
5527 return setInterval(function() {
5528 if (!ABORT) func();
5529 }, timeout);
5530 },getMimetype:function (name) {
5531 return {
5532 'jpg': 'image/jpeg',
5533 'jpeg': 'image/jpeg',
5534 'png': 'image/png',
5535 'bmp': 'image/bmp',
5536 'ogg': 'audio/ogg',
5537 'wav': 'audio/wav',
5538 'mp3': 'audio/mpeg'
5539 }[name.substr(name.lastIndexOf('.')+1)];
5540 },getUserMedia:function (func) {
5541 if(!window.getUserMedia) {
5542 window.getUserMedia = navigator['getUserMedia'] ||
5543 navigator['mozGetUserMedia'];
5544 }
5545 window.getUserMedia(func);
5546 },getMovementX:function (event) {
5547 return event['movementX'] ||
5548 event['mozMovementX'] ||
5549 event['webkitMovementX'] ||
5550 0;
5551 },getMovementY:function (event) {
5552 return event['movementY'] ||
5553 event['mozMovementY'] ||
5554 event['webkitMovementY'] ||
5555 0;
5556 },getMouseWheelDelta:function (event) {
5557 return Math.max(-1, Math.min(1, event.type === 'DOMMouseScroll' ? event.detail : -event.wheelDelta));
5558 },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
5559 if (Browser.pointerLock) {
5560 // When the pointer is locked, calculate the coordinates
5561 // based on the movement of the mouse.
5562 // Workaround for Firefox bug 764498
5563 if (event.type != 'mousemove' &&
5564 ('mozMovementX' in event)) {
5565 Browser.mouseMovementX = Browser.mouseMovementY = 0;
5566 } else {
5567 Browser.mouseMovementX = Browser.getMovementX(event);
5568 Browser.mouseMovementY = Browser.getMovementY(event);
5569 }
5570
5571 // check if SDL is available
5572 if (typeof SDL != "undefined") {
5573 Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
5574 Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
5575 } else {
5576 // just add the mouse delta to the current absolut mouse position
5577 // FIXME: ideally this should be clamped against the canvas size and zero
5578 Browser.mouseX += Browser.mouseMovementX;
5579 Browser.mouseY += Browser.mouseMovementY;
5580 }
5581 } else {
5582 // Otherwise, calculate the movement based on the changes
5583 // in the coordinates.
5584 var rect = Module["canvas"].getBoundingClientRect();
5585 var x, y;
5586
5587 // Neither .scrollX or .pageXOffset are defined in a spec, but
5588 // we prefer .scrollX because it is currently in a spec draft.
5589 // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
5590 var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset);
5591 var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset);
5592 if (event.type == 'touchstart' ||
5593 event.type == 'touchend' ||
5594 event.type == 'touchmove') {
5595 var t = event.touches.item(0);
5596 if (t) {
5597 x = t.pageX - (scrollX + rect.left);
5598 y = t.pageY - (scrollY + rect.top);
5599 } else {
5600 return;
5601 }
5602 } else {
5603 x = event.pageX - (scrollX + rect.left);
5604 y = event.pageY - (scrollY + rect.top);
5605 }
5606
5607 // the canvas might be CSS-scaled compared to its backbuffer;
5608 // SDL-using content will want mouse coordinates in terms
5609 // of backbuffer units.
5610 var cw = Module["canvas"].width;
5611 var ch = Module["canvas"].height;
5612 x = x * (cw / rect.width);
5613 y = y * (ch / rect.height);
5614
5615 Browser.mouseMovementX = x - Browser.mouseX;
5616 Browser.mouseMovementY = y - Browser.mouseY;
5617 Browser.mouseX = x;
5618 Browser.mouseY = y;
5619 }
5620 },xhrLoad:function (url, onload, onerror) {
5621 var xhr = new XMLHttpRequest();
5622 xhr.open('GET', url, true);
5623 xhr.responseType = 'arraybuffer';
5624 xhr.onload = function xhr_onload() {
5625 if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
5626 onload(xhr.response);
5627 } else {
5628 onerror();
5629 }
5630 };
5631 xhr.onerror = onerror;
5632 xhr.send(null);
5633 },asyncLoad:function (url, onload, onerror, noRunDep) {
5634 Browser.xhrLoad(url, function(arrayBuffer) {
5635 assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
5636 onload(new Uint8Array(arrayBuffer));
5637 if (!noRunDep) removeRunDependency('al ' + url);
5638 }, function(event) {
5639 if (onerror) {
5640 onerror();
5641 } else {
5642 throw 'Loading data file "' + url + '" failed.';
5643 }
5644 });
5645 if (!noRunDep) addRunDependency('al ' + url);
5646 },resizeListeners:[],updateResizeListeners:function () {
5647 var canvas = Module['canvas'];
5648 Browser.resizeListeners.forEach(function(listener) {
5649 listener(canvas.width, canvas.height);
5650 });
5651 },setCanvasSize:function (width, height, noUpdates) {
5652 var canvas = Module['canvas'];
5653 Browser.updateCanvasDimensions(canvas, width, height);
5654 if (!noUpdates) Browser.updateResizeListeners();
5655 },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
5656 // check if SDL is available
5657 if (typeof SDL != "undefined") {
5658 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
5659 flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
5660 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
5661 }
5662 Browser.updateResizeListeners();
5663 },setWindowedCanvasSize:function () {
5664 // check if SDL is available
5665 if (typeof SDL != "undefined") {
5666 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
5667 flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
5668 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
5669 }
5670 Browser.updateResizeListeners();
5671 },updateCanvasDimensions:function (canvas, wNative, hNative) {
5672 if (wNative && hNative) {
5673 canvas.widthNative = wNative;
5674 canvas.heightNative = hNative;
5675 } else {
5676 wNative = canvas.widthNative;
5677 hNative = canvas.heightNative;
5678 }
5679 var w = wNative;
5680 var h = hNative;
5681 if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) {
5682 if (w/h < Module['forcedAspectRatio']) {
5683 w = Math.round(h * Module['forcedAspectRatio']);
5684 } else {
5685 h = Math.round(w / Module['forcedAspectRatio']);
5686 }
5687 }
5688 if (((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
5689 document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
5690 document['fullScreenElement'] || document['fullscreenElement'] ||
5691 document['msFullScreenElement'] || document['msFullscreenElement'] ||
5692 document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) {
5693 var factor = Math.min(screen.width / w, screen.height / h);
5694 w = Math.round(w * factor);
5695 h = Math.round(h * factor);
5696 }
5697 if (Browser.resizeCanvas) {
5698 if (canvas.width != w) canvas.width = w;
5699 if (canvas.height != h) canvas.height = h;
5700 if (typeof canvas.style != 'undefined') {
5701 canvas.style.removeProperty( "width");
5702 canvas.style.removeProperty("height");
5703 }
5704 } else {
5705 if (canvas.width != wNative) canvas.width = wNative;
5706 if (canvas.height != hNative) canvas.height = hNative;
5707 if (typeof canvas.style != 'undefined') {
5708 if (w != wNative || h != hNative) {
5709 canvas.style.setProperty( "width", w + "px", "important");
5710 canvas.style.setProperty("height", h + "px", "important");
5711 } else {
5712 canvas.style.removeProperty( "width");
5713 canvas.style.removeProperty("height");
5714 }
5715 }
5716 }
5717 }};
5718
5719 function _sbrk(bytes) {
5720 // Implement a Linux-like 'memory area' for our 'process'.
5721 // Changes the size of the memory area by |bytes|; returns the
5722 // address of the previous top ('break') of the memory area
5723 // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
5724 var self = _sbrk;
5725 if (!self.called) {
5726 DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned
5727 self.called = true;
5728 assert(Runtime.dynamicAlloc);
5729 self.alloc = Runtime.dynamicAlloc;
5730 Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
5731 }
5732 var ret = DYNAMICTOP;
5733 if (bytes != 0) self.alloc(bytes);
5734 return ret; // Previous break location.
5735 }
5736
5737 function _sysconf(name) {
5738 // long sysconf(int name);
5739 // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
5740 switch(name) {
5741 case 30: return PAGE_SIZE;
5742 case 132:
5743 case 133:
5744 case 12:
5745 case 137:
5746 case 138:
5747 case 15:
5748 case 235:
5749 case 16:
5750 case 17:
5751 case 18:
5752 case 19:
5753 case 20:
5754 case 149:
5755 case 13:
5756 case 10:
5757 case 236:
5758 case 153:
5759 case 9:
5760 case 21:
5761 case 22:
5762 case 159:
5763 case 154:
5764 case 14:
5765 case 77:
5766 case 78:
5767 case 139:
5768 case 80:
5769 case 81:
5770 case 79:
5771 case 82:
5772 case 68:
5773 case 67:
5774 case 164:
5775 case 11:
5776 case 29:
5777 case 47:
5778 case 48:
5779 case 95:
5780 case 52:
5781 case 51:
5782 case 46:
5783 return 200809;
5784 case 27:
5785 case 246:
5786 case 127:
5787 case 128:
5788 case 23:
5789 case 24:
5790 case 160:
5791 case 161:
5792 case 181:
5793 case 182:
5794 case 242:
5795 case 183:
5796 case 184:
5797 case 243:
5798 case 244:
5799 case 245:
5800 case 165:
5801 case 178:
5802 case 179:
5803 case 49:
5804 case 50:
5805 case 168:
5806 case 169:
5807 case 175:
5808 case 170:
5809 case 171:
5810 case 172:
5811 case 97:
5812 case 76:
5813 case 32:
5814 case 173:
5815 case 35:
5816 return -1;
5817 case 176:
5818 case 177:
5819 case 7:
5820 case 155:
5821 case 8:
5822 case 157:
5823 case 125:
5824 case 126:
5825 case 92:
5826 case 93:
5827 case 129:
5828 case 130:
5829 case 131:
5830 case 94:
5831 case 91:
5832 return 1;
5833 case 74:
5834 case 60:
5835 case 69:
5836 case 70:
5837 case 4:
5838 return 1024;
5839 case 31:
5840 case 42:
5841 case 72:
5842 return 32;
5843 case 87:
5844 case 26:
5845 case 33:
5846 return 2147483647;
5847 case 34:
5848 case 1:
5849 return 47839;
5850 case 38:
5851 case 36:
5852 return 99;
5853 case 43:
5854 case 37:
5855 return 2048;
5856 case 0: return 2097152;
5857 case 3: return 65536;
5858 case 28: return 32768;
5859 case 44: return 32767;
5860 case 75: return 16384;
5861 case 39: return 1000;
5862 case 89: return 700;
5863 case 71: return 256;
5864 case 40: return 255;
5865 case 2: return 100;
5866 case 180: return 64;
5867 case 25: return 20;
5868 case 5: return 16;
5869 case 6: return 6;
5870 case 73: return 4;
5871 case 84: return 1;
5872 }
5873 ___setErrNo(ERRNO_CODES.EINVAL);
5874 return -1;
5875 }
5876
5877 function _emscripten_run_script(ptr) {
5878 eval(Pointer_stringify(ptr));
5879 }
5880
5881
5882 function _malloc(bytes) {
5883 /* Over-allocate to make sure it is byte-aligned by 8.
5884 * This will leak memory, but this is only the dummy
5885 * implementation (replaced by dlmalloc normally) so
5886 * not an issue.
5887 */
5888 var ptr = Runtime.dynamicAlloc(bytes + 8);
5889 return (ptr+8) & 0xFFFFFFF8;
5890 }
5891 Module["_malloc"] = _malloc;function ___cxa_allocate_exception(size) {
5892 var ptr = _malloc(size + ___cxa_exception_header_size);
5893 return ptr + ___cxa_exception_header_size;
5894 }
5895
5896 function _emscripten_cancel_main_loop() {
5897 Browser.mainLoop.scheduler = null;
5898 Browser.mainLoop.shouldPause = true;
5899 }
5900
5901 var __ZTISt9exception=allocate([allocate([1,0,0,0,0,0,0], "i8", ALLOC_STATIC)+8, 0], "i32", ALLOC_STATIC);
5902FS.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;
5903___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
5904__ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor();
5905if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); }
5906__ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } });
5907_fputc.ret = allocate([0], "i8", ALLOC_STATIC);
5908Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
5909 Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };
5910 Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };
5911 Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() };
5912 Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() };
5913 Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() }
5914STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
5915
5916staticSealed = true; // seal the static portion of memory
5917
5918STACK_MAX = STACK_BASE + 5242880;
5919
5920DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
5921
5922assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
5923
5924
5925var Math_min = Math.min;
5926function invoke_iiii(index,a1,a2,a3) {
5927 try {
5928 return Module["dynCall_iiii"](index,a1,a2,a3);
5929 } catch(e) {
5930 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5931 asm["setThrew"](1, 0);
5932 }
5933}
5934
5935function invoke_viiiii(index,a1,a2,a3,a4,a5) {
5936 try {
5937 Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5);
5938 } catch(e) {
5939 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5940 asm["setThrew"](1, 0);
5941 }
5942}
5943
5944function invoke_vi(index,a1) {
5945 try {
5946 Module["dynCall_vi"](index,a1);
5947 } catch(e) {
5948 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5949 asm["setThrew"](1, 0);
5950 }
5951}
5952
5953function invoke_vii(index,a1,a2) {
5954 try {
5955 Module["dynCall_vii"](index,a1,a2);
5956 } catch(e) {
5957 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5958 asm["setThrew"](1, 0);
5959 }
5960}
5961
5962function invoke_ii(index,a1) {
5963 try {
5964 return Module["dynCall_ii"](index,a1);
5965 } catch(e) {
5966 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5967 asm["setThrew"](1, 0);
5968 }
5969}
5970
5971function invoke_viii(index,a1,a2,a3) {
5972 try {
5973 Module["dynCall_viii"](index,a1,a2,a3);
5974 } catch(e) {
5975 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5976 asm["setThrew"](1, 0);
5977 }
5978}
5979
5980function invoke_v(index) {
5981 try {
5982 Module["dynCall_v"](index);
5983 } catch(e) {
5984 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5985 asm["setThrew"](1, 0);
5986 }
5987}
5988
5989function invoke_viid(index,a1,a2,a3) {
5990 try {
5991 Module["dynCall_viid"](index,a1,a2,a3);
5992 } catch(e) {
5993 if (typeof e !== 'number' && e !== 'longjmp') throw e;
5994 asm["setThrew"](1, 0);
5995 }
5996}
5997
5998function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
5999 try {
6000 Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6);
6001 } catch(e) {
6002 if (typeof e !== 'number' && e !== 'longjmp') throw e;
6003 asm["setThrew"](1, 0);
6004 }
6005}
6006
6007function invoke_iii(index,a1,a2) {
6008 try {
6009 return Module["dynCall_iii"](index,a1,a2);
6010 } catch(e) {
6011 if (typeof e !== 'number' && e !== 'longjmp') throw e;
6012 asm["setThrew"](1, 0);
6013 }
6014}
6015
6016function invoke_iiiiii(index,a1,a2,a3,a4,a5) {
6017 try {
6018 return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5);
6019 } catch(e) {
6020 if (typeof e !== 'number' && e !== 'longjmp') throw e;
6021 asm["setThrew"](1, 0);
6022 }
6023}
6024
6025function invoke_viiii(index,a1,a2,a3,a4) {
6026 try {
6027 Module["dynCall_viiii"](index,a1,a2,a3,a4);
6028 } catch(e) {
6029 if (typeof e !== 'number' && e !== 'longjmp') throw e;
6030 asm["setThrew"](1, 0);
6031 }
6032}
6033
6034function asmPrintInt(x, y) {
6035 Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
6036}
6037function asmPrintFloat(x, y) {
6038 Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
6039}
6040// EMSCRIPTEN_START_ASM
6041var asm = Wasm.instantiateModuleFromAsm((function Module(global, env, buffer) {
6042 'use asm';
6043 var HEAP8 = new global.Int8Array(buffer);
6044 var HEAP16 = new global.Int16Array(buffer);
6045 var HEAP32 = new global.Int32Array(buffer);
6046 var HEAPU8 = new global.Uint8Array(buffer);
6047 var HEAPU16 = new global.Uint16Array(buffer);
6048 var HEAPU32 = new global.Uint32Array(buffer);
6049 var HEAPF32 = new global.Float32Array(buffer);
6050 var HEAPF64 = new global.Float64Array(buffer);
6051
6052 var STACKTOP=env.STACKTOP|0;
6053 var STACK_MAX=env.STACK_MAX|0;
6054 var tempDoublePtr=env.tempDoublePtr|0;
6055 var ABORT=env.ABORT|0;
6056 var __ZTISt9exception=env.__ZTISt9exception|0;
6057
6058 var __THREW__ = 0;
6059 var threwValue = 0;
6060 var setjmpId = 0;
6061 var undef = 0;
6062 var nan = +env.NaN, inf = +env.Infinity;
6063 var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0;
6064
6065 var tempRet0 = 0;
6066 var tempRet1 = 0;
6067 var tempRet2 = 0;
6068 var tempRet3 = 0;
6069 var tempRet4 = 0;
6070 var tempRet5 = 0;
6071 var tempRet6 = 0;
6072 var tempRet7 = 0;
6073 var tempRet8 = 0;
6074 var tempRet9 = 0;
6075 var Math_floor=global.Math.floor;
6076 var Math_abs=global.Math.abs;
6077 var Math_sqrt=global.Math.sqrt;
6078 var Math_pow=global.Math.pow;
6079 var Math_cos=global.Math.cos;
6080 var Math_sin=global.Math.sin;
6081 var Math_tan=global.Math.tan;
6082 var Math_acos=global.Math.acos;
6083 var Math_asin=global.Math.asin;
6084 var Math_atan=global.Math.atan;
6085 var Math_atan2=global.Math.atan2;
6086 var Math_exp=global.Math.exp;
6087 var Math_log=global.Math.log;
6088 var Math_ceil=global.Math.ceil;
6089 var Math_imul=global.Math.imul;
6090 var abort=env.abort;
6091 var assert=env.assert;
6092 var asmPrintInt=env.asmPrintInt;
6093 var asmPrintFloat=env.asmPrintFloat;
6094 var Math_min=env.min;
6095 var invoke_iiii=env.invoke_iiii;
6096 var invoke_viiiii=env.invoke_viiiii;
6097 var invoke_vi=env.invoke_vi;
6098 var invoke_vii=env.invoke_vii;
6099 var invoke_ii=env.invoke_ii;
6100 var invoke_viii=env.invoke_viii;
6101 var invoke_v=env.invoke_v;
6102 var invoke_viid=env.invoke_viid;
6103 var invoke_viiiiii=env.invoke_viiiiii;
6104 var invoke_iii=env.invoke_iii;
6105 var invoke_iiiiii=env.invoke_iiiiii;
6106 var invoke_viiii=env.invoke_viiii;
6107 var ___cxa_throw=env.___cxa_throw;
6108 var _emscripten_run_script=env._emscripten_run_script;
6109 var _cosf=env._cosf;
6110 var _send=env._send;
6111 var __ZSt9terminatev=env.__ZSt9terminatev;
6112 var __reallyNegative=env.__reallyNegative;
6113 var ___cxa_is_number_type=env.___cxa_is_number_type;
6114 var ___assert_fail=env.___assert_fail;
6115 var ___cxa_allocate_exception=env.___cxa_allocate_exception;
6116 var ___cxa_find_matching_catch=env.___cxa_find_matching_catch;
6117 var _fflush=env._fflush;
6118 var _pwrite=env._pwrite;
6119 var ___setErrNo=env.___setErrNo;
6120 var _sbrk=env._sbrk;
6121 var ___cxa_begin_catch=env.___cxa_begin_catch;
6122 var _sinf=env._sinf;
6123 var _fileno=env._fileno;
6124 var ___resumeException=env.___resumeException;
6125 var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv;
6126 var _sysconf=env._sysconf;
6127 var _clock=env._clock;
6128 var _emscripten_memcpy_big=env._emscripten_memcpy_big;
6129 var _puts=env._puts;
6130 var _mkport=env._mkport;
6131 var _floorf=env._floorf;
6132 var _sqrtf=env._sqrtf;
6133 var _write=env._write;
6134 var _emscripten_set_main_loop=env._emscripten_set_main_loop;
6135 var ___errno_location=env.___errno_location;
6136 var __ZNSt9exceptionD2Ev=env.__ZNSt9exceptionD2Ev;
6137 var _printf=env._printf;
6138 var ___cxa_does_inherit=env.___cxa_does_inherit;
6139 var __exit=env.__exit;
6140 var _fputc=env._fputc;
6141 var _abort=env._abort;
6142 var _fwrite=env._fwrite;
6143 var _time=env._time;
6144 var _fprintf=env._fprintf;
6145 var _emscripten_cancel_main_loop=env._emscripten_cancel_main_loop;
6146 var __formatString=env.__formatString;
6147 var _fputs=env._fputs;
6148 var _exit=env._exit;
6149 var ___cxa_pure_virtual=env.___cxa_pure_virtual;
6150 var tempFloat = 0.0;
6151
6152// EMSCRIPTEN_START_FUNCS
6153function _malloc(i12) {
6154 i12 = i12 | 0;
6155 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0;
6156 i1 = STACKTOP;
6157 do {
6158 if (i12 >>> 0 < 245) {
6159 if (i12 >>> 0 < 11) {
6160 i12 = 16;
6161 } else {
6162 i12 = i12 + 11 & -8;
6163 }
6164 i20 = i12 >>> 3;
6165 i18 = HEAP32[1790] | 0;
6166 i21 = i18 >>> i20;
6167 if ((i21 & 3 | 0) != 0) {
6168 i6 = (i21 & 1 ^ 1) + i20 | 0;
6169 i5 = i6 << 1;
6170 i3 = 7200 + (i5 << 2) | 0;
6171 i5 = 7200 + (i5 + 2 << 2) | 0;
6172 i7 = HEAP32[i5 >> 2] | 0;
6173 i2 = i7 + 8 | 0;
6174 i4 = HEAP32[i2 >> 2] | 0;
6175 do {
6176 if ((i3 | 0) != (i4 | 0)) {
6177 if (i4 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6178 _abort();
6179 }
6180 i8 = i4 + 12 | 0;
6181 if ((HEAP32[i8 >> 2] | 0) == (i7 | 0)) {
6182 HEAP32[i8 >> 2] = i3;
6183 HEAP32[i5 >> 2] = i4;
6184 break;
6185 } else {
6186 _abort();
6187 }
6188 } else {
6189 HEAP32[1790] = i18 & ~(1 << i6);
6190 }
6191 } while (0);
6192 i32 = i6 << 3;
6193 HEAP32[i7 + 4 >> 2] = i32 | 3;
6194 i32 = i7 + (i32 | 4) | 0;
6195 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
6196 i32 = i2;
6197 STACKTOP = i1;
6198 return i32 | 0;
6199 }
6200 if (i12 >>> 0 > (HEAP32[7168 >> 2] | 0) >>> 0) {
6201 if ((i21 | 0) != 0) {
6202 i7 = 2 << i20;
6203 i7 = i21 << i20 & (i7 | 0 - i7);
6204 i7 = (i7 & 0 - i7) + -1 | 0;
6205 i2 = i7 >>> 12 & 16;
6206 i7 = i7 >>> i2;
6207 i6 = i7 >>> 5 & 8;
6208 i7 = i7 >>> i6;
6209 i5 = i7 >>> 2 & 4;
6210 i7 = i7 >>> i5;
6211 i4 = i7 >>> 1 & 2;
6212 i7 = i7 >>> i4;
6213 i3 = i7 >>> 1 & 1;
6214 i3 = (i6 | i2 | i5 | i4 | i3) + (i7 >>> i3) | 0;
6215 i7 = i3 << 1;
6216 i4 = 7200 + (i7 << 2) | 0;
6217 i7 = 7200 + (i7 + 2 << 2) | 0;
6218 i5 = HEAP32[i7 >> 2] | 0;
6219 i2 = i5 + 8 | 0;
6220 i6 = HEAP32[i2 >> 2] | 0;
6221 do {
6222 if ((i4 | 0) != (i6 | 0)) {
6223 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6224 _abort();
6225 }
6226 i8 = i6 + 12 | 0;
6227 if ((HEAP32[i8 >> 2] | 0) == (i5 | 0)) {
6228 HEAP32[i8 >> 2] = i4;
6229 HEAP32[i7 >> 2] = i6;
6230 break;
6231 } else {
6232 _abort();
6233 }
6234 } else {
6235 HEAP32[1790] = i18 & ~(1 << i3);
6236 }
6237 } while (0);
6238 i6 = i3 << 3;
6239 i4 = i6 - i12 | 0;
6240 HEAP32[i5 + 4 >> 2] = i12 | 3;
6241 i3 = i5 + i12 | 0;
6242 HEAP32[i5 + (i12 | 4) >> 2] = i4 | 1;
6243 HEAP32[i5 + i6 >> 2] = i4;
6244 i6 = HEAP32[7168 >> 2] | 0;
6245 if ((i6 | 0) != 0) {
6246 i5 = HEAP32[7180 >> 2] | 0;
6247 i8 = i6 >>> 3;
6248 i9 = i8 << 1;
6249 i6 = 7200 + (i9 << 2) | 0;
6250 i7 = HEAP32[1790] | 0;
6251 i8 = 1 << i8;
6252 if ((i7 & i8 | 0) != 0) {
6253 i7 = 7200 + (i9 + 2 << 2) | 0;
6254 i8 = HEAP32[i7 >> 2] | 0;
6255 if (i8 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6256 _abort();
6257 } else {
6258 i28 = i7;
6259 i27 = i8;
6260 }
6261 } else {
6262 HEAP32[1790] = i7 | i8;
6263 i28 = 7200 + (i9 + 2 << 2) | 0;
6264 i27 = i6;
6265 }
6266 HEAP32[i28 >> 2] = i5;
6267 HEAP32[i27 + 12 >> 2] = i5;
6268 HEAP32[i5 + 8 >> 2] = i27;
6269 HEAP32[i5 + 12 >> 2] = i6;
6270 }
6271 HEAP32[7168 >> 2] = i4;
6272 HEAP32[7180 >> 2] = i3;
6273 i32 = i2;
6274 STACKTOP = i1;
6275 return i32 | 0;
6276 }
6277 i18 = HEAP32[7164 >> 2] | 0;
6278 if ((i18 | 0) != 0) {
6279 i2 = (i18 & 0 - i18) + -1 | 0;
6280 i31 = i2 >>> 12 & 16;
6281 i2 = i2 >>> i31;
6282 i30 = i2 >>> 5 & 8;
6283 i2 = i2 >>> i30;
6284 i32 = i2 >>> 2 & 4;
6285 i2 = i2 >>> i32;
6286 i6 = i2 >>> 1 & 2;
6287 i2 = i2 >>> i6;
6288 i3 = i2 >>> 1 & 1;
6289 i3 = HEAP32[7464 + ((i30 | i31 | i32 | i6 | i3) + (i2 >>> i3) << 2) >> 2] | 0;
6290 i2 = (HEAP32[i3 + 4 >> 2] & -8) - i12 | 0;
6291 i6 = i3;
6292 while (1) {
6293 i5 = HEAP32[i6 + 16 >> 2] | 0;
6294 if ((i5 | 0) == 0) {
6295 i5 = HEAP32[i6 + 20 >> 2] | 0;
6296 if ((i5 | 0) == 0) {
6297 break;
6298 }
6299 }
6300 i6 = (HEAP32[i5 + 4 >> 2] & -8) - i12 | 0;
6301 i4 = i6 >>> 0 < i2 >>> 0;
6302 i2 = i4 ? i6 : i2;
6303 i6 = i5;
6304 i3 = i4 ? i5 : i3;
6305 }
6306 i6 = HEAP32[7176 >> 2] | 0;
6307 if (i3 >>> 0 < i6 >>> 0) {
6308 _abort();
6309 }
6310 i4 = i3 + i12 | 0;
6311 if (!(i3 >>> 0 < i4 >>> 0)) {
6312 _abort();
6313 }
6314 i5 = HEAP32[i3 + 24 >> 2] | 0;
6315 i7 = HEAP32[i3 + 12 >> 2] | 0;
6316 do {
6317 if ((i7 | 0) == (i3 | 0)) {
6318 i8 = i3 + 20 | 0;
6319 i7 = HEAP32[i8 >> 2] | 0;
6320 if ((i7 | 0) == 0) {
6321 i8 = i3 + 16 | 0;
6322 i7 = HEAP32[i8 >> 2] | 0;
6323 if ((i7 | 0) == 0) {
6324 i26 = 0;
6325 break;
6326 }
6327 }
6328 while (1) {
6329 i10 = i7 + 20 | 0;
6330 i9 = HEAP32[i10 >> 2] | 0;
6331 if ((i9 | 0) != 0) {
6332 i7 = i9;
6333 i8 = i10;
6334 continue;
6335 }
6336 i10 = i7 + 16 | 0;
6337 i9 = HEAP32[i10 >> 2] | 0;
6338 if ((i9 | 0) == 0) {
6339 break;
6340 } else {
6341 i7 = i9;
6342 i8 = i10;
6343 }
6344 }
6345 if (i8 >>> 0 < i6 >>> 0) {
6346 _abort();
6347 } else {
6348 HEAP32[i8 >> 2] = 0;
6349 i26 = i7;
6350 break;
6351 }
6352 } else {
6353 i8 = HEAP32[i3 + 8 >> 2] | 0;
6354 if (i8 >>> 0 < i6 >>> 0) {
6355 _abort();
6356 }
6357 i6 = i8 + 12 | 0;
6358 if ((HEAP32[i6 >> 2] | 0) != (i3 | 0)) {
6359 _abort();
6360 }
6361 i9 = i7 + 8 | 0;
6362 if ((HEAP32[i9 >> 2] | 0) == (i3 | 0)) {
6363 HEAP32[i6 >> 2] = i7;
6364 HEAP32[i9 >> 2] = i8;
6365 i26 = i7;
6366 break;
6367 } else {
6368 _abort();
6369 }
6370 }
6371 } while (0);
6372 do {
6373 if ((i5 | 0) != 0) {
6374 i7 = HEAP32[i3 + 28 >> 2] | 0;
6375 i6 = 7464 + (i7 << 2) | 0;
6376 if ((i3 | 0) == (HEAP32[i6 >> 2] | 0)) {
6377 HEAP32[i6 >> 2] = i26;
6378 if ((i26 | 0) == 0) {
6379 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i7);
6380 break;
6381 }
6382 } else {
6383 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6384 _abort();
6385 }
6386 i6 = i5 + 16 | 0;
6387 if ((HEAP32[i6 >> 2] | 0) == (i3 | 0)) {
6388 HEAP32[i6 >> 2] = i26;
6389 } else {
6390 HEAP32[i5 + 20 >> 2] = i26;
6391 }
6392 if ((i26 | 0) == 0) {
6393 break;
6394 }
6395 }
6396 if (i26 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6397 _abort();
6398 }
6399 HEAP32[i26 + 24 >> 2] = i5;
6400 i5 = HEAP32[i3 + 16 >> 2] | 0;
6401 do {
6402 if ((i5 | 0) != 0) {
6403 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6404 _abort();
6405 } else {
6406 HEAP32[i26 + 16 >> 2] = i5;
6407 HEAP32[i5 + 24 >> 2] = i26;
6408 break;
6409 }
6410 }
6411 } while (0);
6412 i5 = HEAP32[i3 + 20 >> 2] | 0;
6413 if ((i5 | 0) != 0) {
6414 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6415 _abort();
6416 } else {
6417 HEAP32[i26 + 20 >> 2] = i5;
6418 HEAP32[i5 + 24 >> 2] = i26;
6419 break;
6420 }
6421 }
6422 }
6423 } while (0);
6424 if (i2 >>> 0 < 16) {
6425 i32 = i2 + i12 | 0;
6426 HEAP32[i3 + 4 >> 2] = i32 | 3;
6427 i32 = i3 + (i32 + 4) | 0;
6428 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
6429 } else {
6430 HEAP32[i3 + 4 >> 2] = i12 | 3;
6431 HEAP32[i3 + (i12 | 4) >> 2] = i2 | 1;
6432 HEAP32[i3 + (i2 + i12) >> 2] = i2;
6433 i6 = HEAP32[7168 >> 2] | 0;
6434 if ((i6 | 0) != 0) {
6435 i5 = HEAP32[7180 >> 2] | 0;
6436 i8 = i6 >>> 3;
6437 i9 = i8 << 1;
6438 i6 = 7200 + (i9 << 2) | 0;
6439 i7 = HEAP32[1790] | 0;
6440 i8 = 1 << i8;
6441 if ((i7 & i8 | 0) != 0) {
6442 i7 = 7200 + (i9 + 2 << 2) | 0;
6443 i8 = HEAP32[i7 >> 2] | 0;
6444 if (i8 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6445 _abort();
6446 } else {
6447 i25 = i7;
6448 i24 = i8;
6449 }
6450 } else {
6451 HEAP32[1790] = i7 | i8;
6452 i25 = 7200 + (i9 + 2 << 2) | 0;
6453 i24 = i6;
6454 }
6455 HEAP32[i25 >> 2] = i5;
6456 HEAP32[i24 + 12 >> 2] = i5;
6457 HEAP32[i5 + 8 >> 2] = i24;
6458 HEAP32[i5 + 12 >> 2] = i6;
6459 }
6460 HEAP32[7168 >> 2] = i2;
6461 HEAP32[7180 >> 2] = i4;
6462 }
6463 i32 = i3 + 8 | 0;
6464 STACKTOP = i1;
6465 return i32 | 0;
6466 }
6467 }
6468 } else {
6469 if (!(i12 >>> 0 > 4294967231)) {
6470 i24 = i12 + 11 | 0;
6471 i12 = i24 & -8;
6472 i26 = HEAP32[7164 >> 2] | 0;
6473 if ((i26 | 0) != 0) {
6474 i25 = 0 - i12 | 0;
6475 i24 = i24 >>> 8;
6476 if ((i24 | 0) != 0) {
6477 if (i12 >>> 0 > 16777215) {
6478 i27 = 31;
6479 } else {
6480 i31 = (i24 + 1048320 | 0) >>> 16 & 8;
6481 i32 = i24 << i31;
6482 i30 = (i32 + 520192 | 0) >>> 16 & 4;
6483 i32 = i32 << i30;
6484 i27 = (i32 + 245760 | 0) >>> 16 & 2;
6485 i27 = 14 - (i30 | i31 | i27) + (i32 << i27 >>> 15) | 0;
6486 i27 = i12 >>> (i27 + 7 | 0) & 1 | i27 << 1;
6487 }
6488 } else {
6489 i27 = 0;
6490 }
6491 i30 = HEAP32[7464 + (i27 << 2) >> 2] | 0;
6492 L126 : do {
6493 if ((i30 | 0) == 0) {
6494 i29 = 0;
6495 i24 = 0;
6496 } else {
6497 if ((i27 | 0) == 31) {
6498 i24 = 0;
6499 } else {
6500 i24 = 25 - (i27 >>> 1) | 0;
6501 }
6502 i29 = 0;
6503 i28 = i12 << i24;
6504 i24 = 0;
6505 while (1) {
6506 i32 = HEAP32[i30 + 4 >> 2] & -8;
6507 i31 = i32 - i12 | 0;
6508 if (i31 >>> 0 < i25 >>> 0) {
6509 if ((i32 | 0) == (i12 | 0)) {
6510 i25 = i31;
6511 i29 = i30;
6512 i24 = i30;
6513 break L126;
6514 } else {
6515 i25 = i31;
6516 i24 = i30;
6517 }
6518 }
6519 i31 = HEAP32[i30 + 20 >> 2] | 0;
6520 i30 = HEAP32[i30 + (i28 >>> 31 << 2) + 16 >> 2] | 0;
6521 i29 = (i31 | 0) == 0 | (i31 | 0) == (i30 | 0) ? i29 : i31;
6522 if ((i30 | 0) == 0) {
6523 break;
6524 } else {
6525 i28 = i28 << 1;
6526 }
6527 }
6528 }
6529 } while (0);
6530 if ((i29 | 0) == 0 & (i24 | 0) == 0) {
6531 i32 = 2 << i27;
6532 i26 = i26 & (i32 | 0 - i32);
6533 if ((i26 | 0) == 0) {
6534 break;
6535 }
6536 i32 = (i26 & 0 - i26) + -1 | 0;
6537 i28 = i32 >>> 12 & 16;
6538 i32 = i32 >>> i28;
6539 i27 = i32 >>> 5 & 8;
6540 i32 = i32 >>> i27;
6541 i30 = i32 >>> 2 & 4;
6542 i32 = i32 >>> i30;
6543 i31 = i32 >>> 1 & 2;
6544 i32 = i32 >>> i31;
6545 i29 = i32 >>> 1 & 1;
6546 i29 = HEAP32[7464 + ((i27 | i28 | i30 | i31 | i29) + (i32 >>> i29) << 2) >> 2] | 0;
6547 }
6548 if ((i29 | 0) != 0) {
6549 while (1) {
6550 i27 = (HEAP32[i29 + 4 >> 2] & -8) - i12 | 0;
6551 i26 = i27 >>> 0 < i25 >>> 0;
6552 i25 = i26 ? i27 : i25;
6553 i24 = i26 ? i29 : i24;
6554 i26 = HEAP32[i29 + 16 >> 2] | 0;
6555 if ((i26 | 0) != 0) {
6556 i29 = i26;
6557 continue;
6558 }
6559 i29 = HEAP32[i29 + 20 >> 2] | 0;
6560 if ((i29 | 0) == 0) {
6561 break;
6562 }
6563 }
6564 }
6565 if ((i24 | 0) != 0 ? i25 >>> 0 < ((HEAP32[7168 >> 2] | 0) - i12 | 0) >>> 0 : 0) {
6566 i4 = HEAP32[7176 >> 2] | 0;
6567 if (i24 >>> 0 < i4 >>> 0) {
6568 _abort();
6569 }
6570 i2 = i24 + i12 | 0;
6571 if (!(i24 >>> 0 < i2 >>> 0)) {
6572 _abort();
6573 }
6574 i3 = HEAP32[i24 + 24 >> 2] | 0;
6575 i6 = HEAP32[i24 + 12 >> 2] | 0;
6576 do {
6577 if ((i6 | 0) == (i24 | 0)) {
6578 i6 = i24 + 20 | 0;
6579 i5 = HEAP32[i6 >> 2] | 0;
6580 if ((i5 | 0) == 0) {
6581 i6 = i24 + 16 | 0;
6582 i5 = HEAP32[i6 >> 2] | 0;
6583 if ((i5 | 0) == 0) {
6584 i22 = 0;
6585 break;
6586 }
6587 }
6588 while (1) {
6589 i8 = i5 + 20 | 0;
6590 i7 = HEAP32[i8 >> 2] | 0;
6591 if ((i7 | 0) != 0) {
6592 i5 = i7;
6593 i6 = i8;
6594 continue;
6595 }
6596 i7 = i5 + 16 | 0;
6597 i8 = HEAP32[i7 >> 2] | 0;
6598 if ((i8 | 0) == 0) {
6599 break;
6600 } else {
6601 i5 = i8;
6602 i6 = i7;
6603 }
6604 }
6605 if (i6 >>> 0 < i4 >>> 0) {
6606 _abort();
6607 } else {
6608 HEAP32[i6 >> 2] = 0;
6609 i22 = i5;
6610 break;
6611 }
6612 } else {
6613 i5 = HEAP32[i24 + 8 >> 2] | 0;
6614 if (i5 >>> 0 < i4 >>> 0) {
6615 _abort();
6616 }
6617 i7 = i5 + 12 | 0;
6618 if ((HEAP32[i7 >> 2] | 0) != (i24 | 0)) {
6619 _abort();
6620 }
6621 i4 = i6 + 8 | 0;
6622 if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
6623 HEAP32[i7 >> 2] = i6;
6624 HEAP32[i4 >> 2] = i5;
6625 i22 = i6;
6626 break;
6627 } else {
6628 _abort();
6629 }
6630 }
6631 } while (0);
6632 do {
6633 if ((i3 | 0) != 0) {
6634 i4 = HEAP32[i24 + 28 >> 2] | 0;
6635 i5 = 7464 + (i4 << 2) | 0;
6636 if ((i24 | 0) == (HEAP32[i5 >> 2] | 0)) {
6637 HEAP32[i5 >> 2] = i22;
6638 if ((i22 | 0) == 0) {
6639 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i4);
6640 break;
6641 }
6642 } else {
6643 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6644 _abort();
6645 }
6646 i4 = i3 + 16 | 0;
6647 if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
6648 HEAP32[i4 >> 2] = i22;
6649 } else {
6650 HEAP32[i3 + 20 >> 2] = i22;
6651 }
6652 if ((i22 | 0) == 0) {
6653 break;
6654 }
6655 }
6656 if (i22 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6657 _abort();
6658 }
6659 HEAP32[i22 + 24 >> 2] = i3;
6660 i3 = HEAP32[i24 + 16 >> 2] | 0;
6661 do {
6662 if ((i3 | 0) != 0) {
6663 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6664 _abort();
6665 } else {
6666 HEAP32[i22 + 16 >> 2] = i3;
6667 HEAP32[i3 + 24 >> 2] = i22;
6668 break;
6669 }
6670 }
6671 } while (0);
6672 i3 = HEAP32[i24 + 20 >> 2] | 0;
6673 if ((i3 | 0) != 0) {
6674 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6675 _abort();
6676 } else {
6677 HEAP32[i22 + 20 >> 2] = i3;
6678 HEAP32[i3 + 24 >> 2] = i22;
6679 break;
6680 }
6681 }
6682 }
6683 } while (0);
6684 L204 : do {
6685 if (!(i25 >>> 0 < 16)) {
6686 HEAP32[i24 + 4 >> 2] = i12 | 3;
6687 HEAP32[i24 + (i12 | 4) >> 2] = i25 | 1;
6688 HEAP32[i24 + (i25 + i12) >> 2] = i25;
6689 i4 = i25 >>> 3;
6690 if (i25 >>> 0 < 256) {
6691 i6 = i4 << 1;
6692 i3 = 7200 + (i6 << 2) | 0;
6693 i5 = HEAP32[1790] | 0;
6694 i4 = 1 << i4;
6695 if ((i5 & i4 | 0) != 0) {
6696 i5 = 7200 + (i6 + 2 << 2) | 0;
6697 i4 = HEAP32[i5 >> 2] | 0;
6698 if (i4 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6699 _abort();
6700 } else {
6701 i21 = i5;
6702 i20 = i4;
6703 }
6704 } else {
6705 HEAP32[1790] = i5 | i4;
6706 i21 = 7200 + (i6 + 2 << 2) | 0;
6707 i20 = i3;
6708 }
6709 HEAP32[i21 >> 2] = i2;
6710 HEAP32[i20 + 12 >> 2] = i2;
6711 HEAP32[i24 + (i12 + 8) >> 2] = i20;
6712 HEAP32[i24 + (i12 + 12) >> 2] = i3;
6713 break;
6714 }
6715 i3 = i25 >>> 8;
6716 if ((i3 | 0) != 0) {
6717 if (i25 >>> 0 > 16777215) {
6718 i3 = 31;
6719 } else {
6720 i31 = (i3 + 1048320 | 0) >>> 16 & 8;
6721 i32 = i3 << i31;
6722 i30 = (i32 + 520192 | 0) >>> 16 & 4;
6723 i32 = i32 << i30;
6724 i3 = (i32 + 245760 | 0) >>> 16 & 2;
6725 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
6726 i3 = i25 >>> (i3 + 7 | 0) & 1 | i3 << 1;
6727 }
6728 } else {
6729 i3 = 0;
6730 }
6731 i6 = 7464 + (i3 << 2) | 0;
6732 HEAP32[i24 + (i12 + 28) >> 2] = i3;
6733 HEAP32[i24 + (i12 + 20) >> 2] = 0;
6734 HEAP32[i24 + (i12 + 16) >> 2] = 0;
6735 i4 = HEAP32[7164 >> 2] | 0;
6736 i5 = 1 << i3;
6737 if ((i4 & i5 | 0) == 0) {
6738 HEAP32[7164 >> 2] = i4 | i5;
6739 HEAP32[i6 >> 2] = i2;
6740 HEAP32[i24 + (i12 + 24) >> 2] = i6;
6741 HEAP32[i24 + (i12 + 12) >> 2] = i2;
6742 HEAP32[i24 + (i12 + 8) >> 2] = i2;
6743 break;
6744 }
6745 i4 = HEAP32[i6 >> 2] | 0;
6746 if ((i3 | 0) == 31) {
6747 i3 = 0;
6748 } else {
6749 i3 = 25 - (i3 >>> 1) | 0;
6750 }
6751 L225 : do {
6752 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i25 | 0)) {
6753 i3 = i25 << i3;
6754 while (1) {
6755 i6 = i4 + (i3 >>> 31 << 2) + 16 | 0;
6756 i5 = HEAP32[i6 >> 2] | 0;
6757 if ((i5 | 0) == 0) {
6758 break;
6759 }
6760 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i25 | 0)) {
6761 i18 = i5;
6762 break L225;
6763 } else {
6764 i3 = i3 << 1;
6765 i4 = i5;
6766 }
6767 }
6768 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
6769 _abort();
6770 } else {
6771 HEAP32[i6 >> 2] = i2;
6772 HEAP32[i24 + (i12 + 24) >> 2] = i4;
6773 HEAP32[i24 + (i12 + 12) >> 2] = i2;
6774 HEAP32[i24 + (i12 + 8) >> 2] = i2;
6775 break L204;
6776 }
6777 } else {
6778 i18 = i4;
6779 }
6780 } while (0);
6781 i4 = i18 + 8 | 0;
6782 i3 = HEAP32[i4 >> 2] | 0;
6783 i5 = HEAP32[7176 >> 2] | 0;
6784 if (i18 >>> 0 < i5 >>> 0) {
6785 _abort();
6786 }
6787 if (i3 >>> 0 < i5 >>> 0) {
6788 _abort();
6789 } else {
6790 HEAP32[i3 + 12 >> 2] = i2;
6791 HEAP32[i4 >> 2] = i2;
6792 HEAP32[i24 + (i12 + 8) >> 2] = i3;
6793 HEAP32[i24 + (i12 + 12) >> 2] = i18;
6794 HEAP32[i24 + (i12 + 24) >> 2] = 0;
6795 break;
6796 }
6797 } else {
6798 i32 = i25 + i12 | 0;
6799 HEAP32[i24 + 4 >> 2] = i32 | 3;
6800 i32 = i24 + (i32 + 4) | 0;
6801 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
6802 }
6803 } while (0);
6804 i32 = i24 + 8 | 0;
6805 STACKTOP = i1;
6806 return i32 | 0;
6807 }
6808 }
6809 } else {
6810 i12 = -1;
6811 }
6812 }
6813 } while (0);
6814 i18 = HEAP32[7168 >> 2] | 0;
6815 if (!(i12 >>> 0 > i18 >>> 0)) {
6816 i3 = i18 - i12 | 0;
6817 i2 = HEAP32[7180 >> 2] | 0;
6818 if (i3 >>> 0 > 15) {
6819 HEAP32[7180 >> 2] = i2 + i12;
6820 HEAP32[7168 >> 2] = i3;
6821 HEAP32[i2 + (i12 + 4) >> 2] = i3 | 1;
6822 HEAP32[i2 + i18 >> 2] = i3;
6823 HEAP32[i2 + 4 >> 2] = i12 | 3;
6824 } else {
6825 HEAP32[7168 >> 2] = 0;
6826 HEAP32[7180 >> 2] = 0;
6827 HEAP32[i2 + 4 >> 2] = i18 | 3;
6828 i32 = i2 + (i18 + 4) | 0;
6829 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
6830 }
6831 i32 = i2 + 8 | 0;
6832 STACKTOP = i1;
6833 return i32 | 0;
6834 }
6835 i18 = HEAP32[7172 >> 2] | 0;
6836 if (i12 >>> 0 < i18 >>> 0) {
6837 i31 = i18 - i12 | 0;
6838 HEAP32[7172 >> 2] = i31;
6839 i32 = HEAP32[7184 >> 2] | 0;
6840 HEAP32[7184 >> 2] = i32 + i12;
6841 HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
6842 HEAP32[i32 + 4 >> 2] = i12 | 3;
6843 i32 = i32 + 8 | 0;
6844 STACKTOP = i1;
6845 return i32 | 0;
6846 }
6847 do {
6848 if ((HEAP32[1908] | 0) == 0) {
6849 i18 = _sysconf(30) | 0;
6850 if ((i18 + -1 & i18 | 0) == 0) {
6851 HEAP32[7640 >> 2] = i18;
6852 HEAP32[7636 >> 2] = i18;
6853 HEAP32[7644 >> 2] = -1;
6854 HEAP32[7648 >> 2] = -1;
6855 HEAP32[7652 >> 2] = 0;
6856 HEAP32[7604 >> 2] = 0;
6857 HEAP32[1908] = (_time(0) | 0) & -16 ^ 1431655768;
6858 break;
6859 } else {
6860 _abort();
6861 }
6862 }
6863 } while (0);
6864 i20 = i12 + 48 | 0;
6865 i25 = HEAP32[7640 >> 2] | 0;
6866 i21 = i12 + 47 | 0;
6867 i22 = i25 + i21 | 0;
6868 i25 = 0 - i25 | 0;
6869 i18 = i22 & i25;
6870 if (!(i18 >>> 0 > i12 >>> 0)) {
6871 i32 = 0;
6872 STACKTOP = i1;
6873 return i32 | 0;
6874 }
6875 i24 = HEAP32[7600 >> 2] | 0;
6876 if ((i24 | 0) != 0 ? (i31 = HEAP32[7592 >> 2] | 0, i32 = i31 + i18 | 0, i32 >>> 0 <= i31 >>> 0 | i32 >>> 0 > i24 >>> 0) : 0) {
6877 i32 = 0;
6878 STACKTOP = i1;
6879 return i32 | 0;
6880 }
6881 L269 : do {
6882 if ((HEAP32[7604 >> 2] & 4 | 0) == 0) {
6883 i26 = HEAP32[7184 >> 2] | 0;
6884 L271 : do {
6885 if ((i26 | 0) != 0) {
6886 i24 = 7608 | 0;
6887 while (1) {
6888 i27 = HEAP32[i24 >> 2] | 0;
6889 if (!(i27 >>> 0 > i26 >>> 0) ? (i23 = i24 + 4 | 0, (i27 + (HEAP32[i23 >> 2] | 0) | 0) >>> 0 > i26 >>> 0) : 0) {
6890 break;
6891 }
6892 i24 = HEAP32[i24 + 8 >> 2] | 0;
6893 if ((i24 | 0) == 0) {
6894 i13 = 182;
6895 break L271;
6896 }
6897 }
6898 if ((i24 | 0) != 0) {
6899 i25 = i22 - (HEAP32[7172 >> 2] | 0) & i25;
6900 if (i25 >>> 0 < 2147483647) {
6901 i13 = _sbrk(i25 | 0) | 0;
6902 i26 = (i13 | 0) == ((HEAP32[i24 >> 2] | 0) + (HEAP32[i23 >> 2] | 0) | 0);
6903 i22 = i13;
6904 i24 = i25;
6905 i23 = i26 ? i13 : -1;
6906 i25 = i26 ? i25 : 0;
6907 i13 = 191;
6908 } else {
6909 i25 = 0;
6910 }
6911 } else {
6912 i13 = 182;
6913 }
6914 } else {
6915 i13 = 182;
6916 }
6917 } while (0);
6918 do {
6919 if ((i13 | 0) == 182) {
6920 i23 = _sbrk(0) | 0;
6921 if ((i23 | 0) != (-1 | 0)) {
6922 i24 = i23;
6923 i22 = HEAP32[7636 >> 2] | 0;
6924 i25 = i22 + -1 | 0;
6925 if ((i25 & i24 | 0) == 0) {
6926 i25 = i18;
6927 } else {
6928 i25 = i18 - i24 + (i25 + i24 & 0 - i22) | 0;
6929 }
6930 i24 = HEAP32[7592 >> 2] | 0;
6931 i26 = i24 + i25 | 0;
6932 if (i25 >>> 0 > i12 >>> 0 & i25 >>> 0 < 2147483647) {
6933 i22 = HEAP32[7600 >> 2] | 0;
6934 if ((i22 | 0) != 0 ? i26 >>> 0 <= i24 >>> 0 | i26 >>> 0 > i22 >>> 0 : 0) {
6935 i25 = 0;
6936 break;
6937 }
6938 i22 = _sbrk(i25 | 0) | 0;
6939 i13 = (i22 | 0) == (i23 | 0);
6940 i24 = i25;
6941 i23 = i13 ? i23 : -1;
6942 i25 = i13 ? i25 : 0;
6943 i13 = 191;
6944 } else {
6945 i25 = 0;
6946 }
6947 } else {
6948 i25 = 0;
6949 }
6950 }
6951 } while (0);
6952 L291 : do {
6953 if ((i13 | 0) == 191) {
6954 i13 = 0 - i24 | 0;
6955 if ((i23 | 0) != (-1 | 0)) {
6956 i17 = i23;
6957 i14 = i25;
6958 i13 = 202;
6959 break L269;
6960 }
6961 do {
6962 if ((i22 | 0) != (-1 | 0) & i24 >>> 0 < 2147483647 & i24 >>> 0 < i20 >>> 0 ? (i19 = HEAP32[7640 >> 2] | 0, i19 = i21 - i24 + i19 & 0 - i19, i19 >>> 0 < 2147483647) : 0) {
6963 if ((_sbrk(i19 | 0) | 0) == (-1 | 0)) {
6964 _sbrk(i13 | 0) | 0;
6965 break L291;
6966 } else {
6967 i24 = i19 + i24 | 0;
6968 break;
6969 }
6970 }
6971 } while (0);
6972 if ((i22 | 0) != (-1 | 0)) {
6973 i17 = i22;
6974 i14 = i24;
6975 i13 = 202;
6976 break L269;
6977 }
6978 }
6979 } while (0);
6980 HEAP32[7604 >> 2] = HEAP32[7604 >> 2] | 4;
6981 i13 = 199;
6982 } else {
6983 i25 = 0;
6984 i13 = 199;
6985 }
6986 } while (0);
6987 if ((((i13 | 0) == 199 ? i18 >>> 0 < 2147483647 : 0) ? (i17 = _sbrk(i18 | 0) | 0, i16 = _sbrk(0) | 0, (i16 | 0) != (-1 | 0) & (i17 | 0) != (-1 | 0) & i17 >>> 0 < i16 >>> 0) : 0) ? (i15 = i16 - i17 | 0, i14 = i15 >>> 0 > (i12 + 40 | 0) >>> 0, i14) : 0) {
6988 i14 = i14 ? i15 : i25;
6989 i13 = 202;
6990 }
6991 if ((i13 | 0) == 202) {
6992 i15 = (HEAP32[7592 >> 2] | 0) + i14 | 0;
6993 HEAP32[7592 >> 2] = i15;
6994 if (i15 >>> 0 > (HEAP32[7596 >> 2] | 0) >>> 0) {
6995 HEAP32[7596 >> 2] = i15;
6996 }
6997 i15 = HEAP32[7184 >> 2] | 0;
6998 L311 : do {
6999 if ((i15 | 0) != 0) {
7000 i21 = 7608 | 0;
7001 while (1) {
7002 i16 = HEAP32[i21 >> 2] | 0;
7003 i19 = i21 + 4 | 0;
7004 i20 = HEAP32[i19 >> 2] | 0;
7005 if ((i17 | 0) == (i16 + i20 | 0)) {
7006 i13 = 214;
7007 break;
7008 }
7009 i18 = HEAP32[i21 + 8 >> 2] | 0;
7010 if ((i18 | 0) == 0) {
7011 break;
7012 } else {
7013 i21 = i18;
7014 }
7015 }
7016 if (((i13 | 0) == 214 ? (HEAP32[i21 + 12 >> 2] & 8 | 0) == 0 : 0) ? i15 >>> 0 >= i16 >>> 0 & i15 >>> 0 < i17 >>> 0 : 0) {
7017 HEAP32[i19 >> 2] = i20 + i14;
7018 i2 = (HEAP32[7172 >> 2] | 0) + i14 | 0;
7019 i3 = i15 + 8 | 0;
7020 if ((i3 & 7 | 0) == 0) {
7021 i3 = 0;
7022 } else {
7023 i3 = 0 - i3 & 7;
7024 }
7025 i32 = i2 - i3 | 0;
7026 HEAP32[7184 >> 2] = i15 + i3;
7027 HEAP32[7172 >> 2] = i32;
7028 HEAP32[i15 + (i3 + 4) >> 2] = i32 | 1;
7029 HEAP32[i15 + (i2 + 4) >> 2] = 40;
7030 HEAP32[7188 >> 2] = HEAP32[7648 >> 2];
7031 break;
7032 }
7033 if (i17 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7034 HEAP32[7176 >> 2] = i17;
7035 }
7036 i19 = i17 + i14 | 0;
7037 i16 = 7608 | 0;
7038 while (1) {
7039 if ((HEAP32[i16 >> 2] | 0) == (i19 | 0)) {
7040 i13 = 224;
7041 break;
7042 }
7043 i18 = HEAP32[i16 + 8 >> 2] | 0;
7044 if ((i18 | 0) == 0) {
7045 break;
7046 } else {
7047 i16 = i18;
7048 }
7049 }
7050 if ((i13 | 0) == 224 ? (HEAP32[i16 + 12 >> 2] & 8 | 0) == 0 : 0) {
7051 HEAP32[i16 >> 2] = i17;
7052 i6 = i16 + 4 | 0;
7053 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i14;
7054 i6 = i17 + 8 | 0;
7055 if ((i6 & 7 | 0) == 0) {
7056 i6 = 0;
7057 } else {
7058 i6 = 0 - i6 & 7;
7059 }
7060 i7 = i17 + (i14 + 8) | 0;
7061 if ((i7 & 7 | 0) == 0) {
7062 i13 = 0;
7063 } else {
7064 i13 = 0 - i7 & 7;
7065 }
7066 i15 = i17 + (i13 + i14) | 0;
7067 i8 = i6 + i12 | 0;
7068 i7 = i17 + i8 | 0;
7069 i10 = i15 - (i17 + i6) - i12 | 0;
7070 HEAP32[i17 + (i6 + 4) >> 2] = i12 | 3;
7071 L348 : do {
7072 if ((i15 | 0) != (HEAP32[7184 >> 2] | 0)) {
7073 if ((i15 | 0) == (HEAP32[7180 >> 2] | 0)) {
7074 i32 = (HEAP32[7168 >> 2] | 0) + i10 | 0;
7075 HEAP32[7168 >> 2] = i32;
7076 HEAP32[7180 >> 2] = i7;
7077 HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
7078 HEAP32[i17 + (i32 + i8) >> 2] = i32;
7079 break;
7080 }
7081 i12 = i14 + 4 | 0;
7082 i18 = HEAP32[i17 + (i12 + i13) >> 2] | 0;
7083 if ((i18 & 3 | 0) == 1) {
7084 i11 = i18 & -8;
7085 i16 = i18 >>> 3;
7086 do {
7087 if (!(i18 >>> 0 < 256)) {
7088 i9 = HEAP32[i17 + ((i13 | 24) + i14) >> 2] | 0;
7089 i19 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
7090 do {
7091 if ((i19 | 0) == (i15 | 0)) {
7092 i19 = i13 | 16;
7093 i18 = i17 + (i12 + i19) | 0;
7094 i16 = HEAP32[i18 >> 2] | 0;
7095 if ((i16 | 0) == 0) {
7096 i18 = i17 + (i19 + i14) | 0;
7097 i16 = HEAP32[i18 >> 2] | 0;
7098 if ((i16 | 0) == 0) {
7099 i5 = 0;
7100 break;
7101 }
7102 }
7103 while (1) {
7104 i20 = i16 + 20 | 0;
7105 i19 = HEAP32[i20 >> 2] | 0;
7106 if ((i19 | 0) != 0) {
7107 i16 = i19;
7108 i18 = i20;
7109 continue;
7110 }
7111 i19 = i16 + 16 | 0;
7112 i20 = HEAP32[i19 >> 2] | 0;
7113 if ((i20 | 0) == 0) {
7114 break;
7115 } else {
7116 i16 = i20;
7117 i18 = i19;
7118 }
7119 }
7120 if (i18 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7121 _abort();
7122 } else {
7123 HEAP32[i18 >> 2] = 0;
7124 i5 = i16;
7125 break;
7126 }
7127 } else {
7128 i18 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
7129 if (i18 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7130 _abort();
7131 }
7132 i16 = i18 + 12 | 0;
7133 if ((HEAP32[i16 >> 2] | 0) != (i15 | 0)) {
7134 _abort();
7135 }
7136 i20 = i19 + 8 | 0;
7137 if ((HEAP32[i20 >> 2] | 0) == (i15 | 0)) {
7138 HEAP32[i16 >> 2] = i19;
7139 HEAP32[i20 >> 2] = i18;
7140 i5 = i19;
7141 break;
7142 } else {
7143 _abort();
7144 }
7145 }
7146 } while (0);
7147 if ((i9 | 0) != 0) {
7148 i16 = HEAP32[i17 + (i14 + 28 + i13) >> 2] | 0;
7149 i18 = 7464 + (i16 << 2) | 0;
7150 if ((i15 | 0) == (HEAP32[i18 >> 2] | 0)) {
7151 HEAP32[i18 >> 2] = i5;
7152 if ((i5 | 0) == 0) {
7153 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i16);
7154 break;
7155 }
7156 } else {
7157 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7158 _abort();
7159 }
7160 i16 = i9 + 16 | 0;
7161 if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
7162 HEAP32[i16 >> 2] = i5;
7163 } else {
7164 HEAP32[i9 + 20 >> 2] = i5;
7165 }
7166 if ((i5 | 0) == 0) {
7167 break;
7168 }
7169 }
7170 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7171 _abort();
7172 }
7173 HEAP32[i5 + 24 >> 2] = i9;
7174 i15 = i13 | 16;
7175 i9 = HEAP32[i17 + (i15 + i14) >> 2] | 0;
7176 do {
7177 if ((i9 | 0) != 0) {
7178 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7179 _abort();
7180 } else {
7181 HEAP32[i5 + 16 >> 2] = i9;
7182 HEAP32[i9 + 24 >> 2] = i5;
7183 break;
7184 }
7185 }
7186 } while (0);
7187 i9 = HEAP32[i17 + (i12 + i15) >> 2] | 0;
7188 if ((i9 | 0) != 0) {
7189 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7190 _abort();
7191 } else {
7192 HEAP32[i5 + 20 >> 2] = i9;
7193 HEAP32[i9 + 24 >> 2] = i5;
7194 break;
7195 }
7196 }
7197 }
7198 } else {
7199 i5 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
7200 i12 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
7201 i18 = 7200 + (i16 << 1 << 2) | 0;
7202 if ((i5 | 0) != (i18 | 0)) {
7203 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7204 _abort();
7205 }
7206 if ((HEAP32[i5 + 12 >> 2] | 0) != (i15 | 0)) {
7207 _abort();
7208 }
7209 }
7210 if ((i12 | 0) == (i5 | 0)) {
7211 HEAP32[1790] = HEAP32[1790] & ~(1 << i16);
7212 break;
7213 }
7214 if ((i12 | 0) != (i18 | 0)) {
7215 if (i12 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7216 _abort();
7217 }
7218 i16 = i12 + 8 | 0;
7219 if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
7220 i9 = i16;
7221 } else {
7222 _abort();
7223 }
7224 } else {
7225 i9 = i12 + 8 | 0;
7226 }
7227 HEAP32[i5 + 12 >> 2] = i12;
7228 HEAP32[i9 >> 2] = i5;
7229 }
7230 } while (0);
7231 i15 = i17 + ((i11 | i13) + i14) | 0;
7232 i10 = i11 + i10 | 0;
7233 }
7234 i5 = i15 + 4 | 0;
7235 HEAP32[i5 >> 2] = HEAP32[i5 >> 2] & -2;
7236 HEAP32[i17 + (i8 + 4) >> 2] = i10 | 1;
7237 HEAP32[i17 + (i10 + i8) >> 2] = i10;
7238 i5 = i10 >>> 3;
7239 if (i10 >>> 0 < 256) {
7240 i10 = i5 << 1;
7241 i2 = 7200 + (i10 << 2) | 0;
7242 i9 = HEAP32[1790] | 0;
7243 i5 = 1 << i5;
7244 if ((i9 & i5 | 0) != 0) {
7245 i9 = 7200 + (i10 + 2 << 2) | 0;
7246 i5 = HEAP32[i9 >> 2] | 0;
7247 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7248 _abort();
7249 } else {
7250 i3 = i9;
7251 i4 = i5;
7252 }
7253 } else {
7254 HEAP32[1790] = i9 | i5;
7255 i3 = 7200 + (i10 + 2 << 2) | 0;
7256 i4 = i2;
7257 }
7258 HEAP32[i3 >> 2] = i7;
7259 HEAP32[i4 + 12 >> 2] = i7;
7260 HEAP32[i17 + (i8 + 8) >> 2] = i4;
7261 HEAP32[i17 + (i8 + 12) >> 2] = i2;
7262 break;
7263 }
7264 i3 = i10 >>> 8;
7265 if ((i3 | 0) != 0) {
7266 if (i10 >>> 0 > 16777215) {
7267 i3 = 31;
7268 } else {
7269 i31 = (i3 + 1048320 | 0) >>> 16 & 8;
7270 i32 = i3 << i31;
7271 i30 = (i32 + 520192 | 0) >>> 16 & 4;
7272 i32 = i32 << i30;
7273 i3 = (i32 + 245760 | 0) >>> 16 & 2;
7274 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
7275 i3 = i10 >>> (i3 + 7 | 0) & 1 | i3 << 1;
7276 }
7277 } else {
7278 i3 = 0;
7279 }
7280 i4 = 7464 + (i3 << 2) | 0;
7281 HEAP32[i17 + (i8 + 28) >> 2] = i3;
7282 HEAP32[i17 + (i8 + 20) >> 2] = 0;
7283 HEAP32[i17 + (i8 + 16) >> 2] = 0;
7284 i9 = HEAP32[7164 >> 2] | 0;
7285 i5 = 1 << i3;
7286 if ((i9 & i5 | 0) == 0) {
7287 HEAP32[7164 >> 2] = i9 | i5;
7288 HEAP32[i4 >> 2] = i7;
7289 HEAP32[i17 + (i8 + 24) >> 2] = i4;
7290 HEAP32[i17 + (i8 + 12) >> 2] = i7;
7291 HEAP32[i17 + (i8 + 8) >> 2] = i7;
7292 break;
7293 }
7294 i4 = HEAP32[i4 >> 2] | 0;
7295 if ((i3 | 0) == 31) {
7296 i3 = 0;
7297 } else {
7298 i3 = 25 - (i3 >>> 1) | 0;
7299 }
7300 L444 : do {
7301 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i10 | 0)) {
7302 i3 = i10 << i3;
7303 while (1) {
7304 i5 = i4 + (i3 >>> 31 << 2) + 16 | 0;
7305 i9 = HEAP32[i5 >> 2] | 0;
7306 if ((i9 | 0) == 0) {
7307 break;
7308 }
7309 if ((HEAP32[i9 + 4 >> 2] & -8 | 0) == (i10 | 0)) {
7310 i2 = i9;
7311 break L444;
7312 } else {
7313 i3 = i3 << 1;
7314 i4 = i9;
7315 }
7316 }
7317 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7318 _abort();
7319 } else {
7320 HEAP32[i5 >> 2] = i7;
7321 HEAP32[i17 + (i8 + 24) >> 2] = i4;
7322 HEAP32[i17 + (i8 + 12) >> 2] = i7;
7323 HEAP32[i17 + (i8 + 8) >> 2] = i7;
7324 break L348;
7325 }
7326 } else {
7327 i2 = i4;
7328 }
7329 } while (0);
7330 i4 = i2 + 8 | 0;
7331 i3 = HEAP32[i4 >> 2] | 0;
7332 i5 = HEAP32[7176 >> 2] | 0;
7333 if (i2 >>> 0 < i5 >>> 0) {
7334 _abort();
7335 }
7336 if (i3 >>> 0 < i5 >>> 0) {
7337 _abort();
7338 } else {
7339 HEAP32[i3 + 12 >> 2] = i7;
7340 HEAP32[i4 >> 2] = i7;
7341 HEAP32[i17 + (i8 + 8) >> 2] = i3;
7342 HEAP32[i17 + (i8 + 12) >> 2] = i2;
7343 HEAP32[i17 + (i8 + 24) >> 2] = 0;
7344 break;
7345 }
7346 } else {
7347 i32 = (HEAP32[7172 >> 2] | 0) + i10 | 0;
7348 HEAP32[7172 >> 2] = i32;
7349 HEAP32[7184 >> 2] = i7;
7350 HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
7351 }
7352 } while (0);
7353 i32 = i17 + (i6 | 8) | 0;
7354 STACKTOP = i1;
7355 return i32 | 0;
7356 }
7357 i3 = 7608 | 0;
7358 while (1) {
7359 i2 = HEAP32[i3 >> 2] | 0;
7360 if (!(i2 >>> 0 > i15 >>> 0) ? (i11 = HEAP32[i3 + 4 >> 2] | 0, i10 = i2 + i11 | 0, i10 >>> 0 > i15 >>> 0) : 0) {
7361 break;
7362 }
7363 i3 = HEAP32[i3 + 8 >> 2] | 0;
7364 }
7365 i3 = i2 + (i11 + -39) | 0;
7366 if ((i3 & 7 | 0) == 0) {
7367 i3 = 0;
7368 } else {
7369 i3 = 0 - i3 & 7;
7370 }
7371 i2 = i2 + (i11 + -47 + i3) | 0;
7372 i2 = i2 >>> 0 < (i15 + 16 | 0) >>> 0 ? i15 : i2;
7373 i3 = i2 + 8 | 0;
7374 i4 = i17 + 8 | 0;
7375 if ((i4 & 7 | 0) == 0) {
7376 i4 = 0;
7377 } else {
7378 i4 = 0 - i4 & 7;
7379 }
7380 i32 = i14 + -40 - i4 | 0;
7381 HEAP32[7184 >> 2] = i17 + i4;
7382 HEAP32[7172 >> 2] = i32;
7383 HEAP32[i17 + (i4 + 4) >> 2] = i32 | 1;
7384 HEAP32[i17 + (i14 + -36) >> 2] = 40;
7385 HEAP32[7188 >> 2] = HEAP32[7648 >> 2];
7386 HEAP32[i2 + 4 >> 2] = 27;
7387 HEAP32[i3 + 0 >> 2] = HEAP32[7608 >> 2];
7388 HEAP32[i3 + 4 >> 2] = HEAP32[7612 >> 2];
7389 HEAP32[i3 + 8 >> 2] = HEAP32[7616 >> 2];
7390 HEAP32[i3 + 12 >> 2] = HEAP32[7620 >> 2];
7391 HEAP32[7608 >> 2] = i17;
7392 HEAP32[7612 >> 2] = i14;
7393 HEAP32[7620 >> 2] = 0;
7394 HEAP32[7616 >> 2] = i3;
7395 i4 = i2 + 28 | 0;
7396 HEAP32[i4 >> 2] = 7;
7397 if ((i2 + 32 | 0) >>> 0 < i10 >>> 0) {
7398 while (1) {
7399 i3 = i4 + 4 | 0;
7400 HEAP32[i3 >> 2] = 7;
7401 if ((i4 + 8 | 0) >>> 0 < i10 >>> 0) {
7402 i4 = i3;
7403 } else {
7404 break;
7405 }
7406 }
7407 }
7408 if ((i2 | 0) != (i15 | 0)) {
7409 i2 = i2 - i15 | 0;
7410 i3 = i15 + (i2 + 4) | 0;
7411 HEAP32[i3 >> 2] = HEAP32[i3 >> 2] & -2;
7412 HEAP32[i15 + 4 >> 2] = i2 | 1;
7413 HEAP32[i15 + i2 >> 2] = i2;
7414 i3 = i2 >>> 3;
7415 if (i2 >>> 0 < 256) {
7416 i4 = i3 << 1;
7417 i2 = 7200 + (i4 << 2) | 0;
7418 i5 = HEAP32[1790] | 0;
7419 i3 = 1 << i3;
7420 if ((i5 & i3 | 0) != 0) {
7421 i4 = 7200 + (i4 + 2 << 2) | 0;
7422 i3 = HEAP32[i4 >> 2] | 0;
7423 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7424 _abort();
7425 } else {
7426 i7 = i4;
7427 i8 = i3;
7428 }
7429 } else {
7430 HEAP32[1790] = i5 | i3;
7431 i7 = 7200 + (i4 + 2 << 2) | 0;
7432 i8 = i2;
7433 }
7434 HEAP32[i7 >> 2] = i15;
7435 HEAP32[i8 + 12 >> 2] = i15;
7436 HEAP32[i15 + 8 >> 2] = i8;
7437 HEAP32[i15 + 12 >> 2] = i2;
7438 break;
7439 }
7440 i3 = i2 >>> 8;
7441 if ((i3 | 0) != 0) {
7442 if (i2 >>> 0 > 16777215) {
7443 i3 = 31;
7444 } else {
7445 i31 = (i3 + 1048320 | 0) >>> 16 & 8;
7446 i32 = i3 << i31;
7447 i30 = (i32 + 520192 | 0) >>> 16 & 4;
7448 i32 = i32 << i30;
7449 i3 = (i32 + 245760 | 0) >>> 16 & 2;
7450 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
7451 i3 = i2 >>> (i3 + 7 | 0) & 1 | i3 << 1;
7452 }
7453 } else {
7454 i3 = 0;
7455 }
7456 i7 = 7464 + (i3 << 2) | 0;
7457 HEAP32[i15 + 28 >> 2] = i3;
7458 HEAP32[i15 + 20 >> 2] = 0;
7459 HEAP32[i15 + 16 >> 2] = 0;
7460 i4 = HEAP32[7164 >> 2] | 0;
7461 i5 = 1 << i3;
7462 if ((i4 & i5 | 0) == 0) {
7463 HEAP32[7164 >> 2] = i4 | i5;
7464 HEAP32[i7 >> 2] = i15;
7465 HEAP32[i15 + 24 >> 2] = i7;
7466 HEAP32[i15 + 12 >> 2] = i15;
7467 HEAP32[i15 + 8 >> 2] = i15;
7468 break;
7469 }
7470 i4 = HEAP32[i7 >> 2] | 0;
7471 if ((i3 | 0) == 31) {
7472 i3 = 0;
7473 } else {
7474 i3 = 25 - (i3 >>> 1) | 0;
7475 }
7476 L499 : do {
7477 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i2 | 0)) {
7478 i3 = i2 << i3;
7479 while (1) {
7480 i7 = i4 + (i3 >>> 31 << 2) + 16 | 0;
7481 i5 = HEAP32[i7 >> 2] | 0;
7482 if ((i5 | 0) == 0) {
7483 break;
7484 }
7485 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i2 | 0)) {
7486 i6 = i5;
7487 break L499;
7488 } else {
7489 i3 = i3 << 1;
7490 i4 = i5;
7491 }
7492 }
7493 if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
7494 _abort();
7495 } else {
7496 HEAP32[i7 >> 2] = i15;
7497 HEAP32[i15 + 24 >> 2] = i4;
7498 HEAP32[i15 + 12 >> 2] = i15;
7499 HEAP32[i15 + 8 >> 2] = i15;
7500 break L311;
7501 }
7502 } else {
7503 i6 = i4;
7504 }
7505 } while (0);
7506 i4 = i6 + 8 | 0;
7507 i3 = HEAP32[i4 >> 2] | 0;
7508 i2 = HEAP32[7176 >> 2] | 0;
7509 if (i6 >>> 0 < i2 >>> 0) {
7510 _abort();
7511 }
7512 if (i3 >>> 0 < i2 >>> 0) {
7513 _abort();
7514 } else {
7515 HEAP32[i3 + 12 >> 2] = i15;
7516 HEAP32[i4 >> 2] = i15;
7517 HEAP32[i15 + 8 >> 2] = i3;
7518 HEAP32[i15 + 12 >> 2] = i6;
7519 HEAP32[i15 + 24 >> 2] = 0;
7520 break;
7521 }
7522 }
7523 } else {
7524 i32 = HEAP32[7176 >> 2] | 0;
7525 if ((i32 | 0) == 0 | i17 >>> 0 < i32 >>> 0) {
7526 HEAP32[7176 >> 2] = i17;
7527 }
7528 HEAP32[7608 >> 2] = i17;
7529 HEAP32[7612 >> 2] = i14;
7530 HEAP32[7620 >> 2] = 0;
7531 HEAP32[7196 >> 2] = HEAP32[1908];
7532 HEAP32[7192 >> 2] = -1;
7533 i2 = 0;
7534 do {
7535 i32 = i2 << 1;
7536 i31 = 7200 + (i32 << 2) | 0;
7537 HEAP32[7200 + (i32 + 3 << 2) >> 2] = i31;
7538 HEAP32[7200 + (i32 + 2 << 2) >> 2] = i31;
7539 i2 = i2 + 1 | 0;
7540 } while ((i2 | 0) != 32);
7541 i2 = i17 + 8 | 0;
7542 if ((i2 & 7 | 0) == 0) {
7543 i2 = 0;
7544 } else {
7545 i2 = 0 - i2 & 7;
7546 }
7547 i32 = i14 + -40 - i2 | 0;
7548 HEAP32[7184 >> 2] = i17 + i2;
7549 HEAP32[7172 >> 2] = i32;
7550 HEAP32[i17 + (i2 + 4) >> 2] = i32 | 1;
7551 HEAP32[i17 + (i14 + -36) >> 2] = 40;
7552 HEAP32[7188 >> 2] = HEAP32[7648 >> 2];
7553 }
7554 } while (0);
7555 i2 = HEAP32[7172 >> 2] | 0;
7556 if (i2 >>> 0 > i12 >>> 0) {
7557 i31 = i2 - i12 | 0;
7558 HEAP32[7172 >> 2] = i31;
7559 i32 = HEAP32[7184 >> 2] | 0;
7560 HEAP32[7184 >> 2] = i32 + i12;
7561 HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
7562 HEAP32[i32 + 4 >> 2] = i12 | 3;
7563 i32 = i32 + 8 | 0;
7564 STACKTOP = i1;
7565 return i32 | 0;
7566 }
7567 }
7568 HEAP32[(___errno_location() | 0) >> 2] = 12;
7569 i32 = 0;
7570 STACKTOP = i1;
7571 return i32 | 0;
7572}
7573function __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS7_(i12, i2, i16, i5, i8, i6) {
7574 i12 = i12 | 0;
7575 i2 = i2 | 0;
7576 i16 = i16 | 0;
7577 i5 = i5 | 0;
7578 i8 = i8 | 0;
7579 i6 = i6 | 0;
7580 var i1 = 0, i3 = 0, i4 = 0, i7 = 0, i9 = 0, i10 = 0, i11 = 0, i13 = 0, i14 = 0, i15 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, i29 = 0, d30 = 0.0, d31 = 0.0, d32 = 0.0, d33 = 0.0, i34 = 0, i35 = 0, d36 = 0.0, d37 = 0.0, i38 = 0, d39 = 0.0, i40 = 0, i41 = 0;
7581 i1 = STACKTOP;
7582 STACKTOP = STACKTOP + 144 | 0;
7583 i18 = i1 + 128 | 0;
7584 i11 = i1 + 24 | 0;
7585 i9 = i1 + 72 | 0;
7586 i10 = i1 + 48 | 0;
7587 i3 = i1;
7588 i4 = i12 + 132 | 0;
7589 d28 = +HEAPF32[i5 + 12 >> 2];
7590 d37 = +HEAPF32[i6 + 8 >> 2];
7591 d23 = +HEAPF32[i5 + 8 >> 2];
7592 d27 = +HEAPF32[i6 + 12 >> 2];
7593 d22 = d28 * d37 - d23 * d27;
7594 d27 = d37 * d23 + d28 * d27;
7595 d37 = +d22;
7596 d26 = +d27;
7597 d25 = +HEAPF32[i6 >> 2] - +HEAPF32[i5 >> 2];
7598 d36 = +HEAPF32[i6 + 4 >> 2] - +HEAPF32[i5 + 4 >> 2];
7599 d24 = d28 * d25 + d23 * d36;
7600 d25 = d28 * d36 - d23 * d25;
7601 d23 = +d24;
7602 d36 = +d25;
7603 i5 = i4;
7604 HEAPF32[i5 >> 2] = d23;
7605 HEAPF32[i5 + 4 >> 2] = d36;
7606 i5 = i12 + 140 | 0;
7607 HEAPF32[i5 >> 2] = d37;
7608 HEAPF32[i5 + 4 >> 2] = d26;
7609 i5 = i12 + 144 | 0;
7610 d26 = +HEAPF32[i8 + 12 >> 2];
7611 i7 = i12 + 140 | 0;
7612 d37 = +HEAPF32[i8 + 16 >> 2];
7613 d24 = d24 + (d27 * d26 - d22 * d37);
7614 i6 = i12 + 136 | 0;
7615 d25 = d26 * d22 + d27 * d37 + d25;
7616 d37 = +d24;
7617 d27 = +d25;
7618 i34 = i12 + 148 | 0;
7619 HEAPF32[i34 >> 2] = d37;
7620 HEAPF32[i34 + 4 >> 2] = d27;
7621 i34 = i16 + 28 | 0;
7622 i29 = HEAP32[i34 >> 2] | 0;
7623 i34 = HEAP32[i34 + 4 >> 2] | 0;
7624 i14 = i12 + 156 | 0;
7625 HEAP32[i14 >> 2] = i29;
7626 HEAP32[i14 + 4 >> 2] = i34;
7627 i14 = i12 + 164 | 0;
7628 i17 = i16 + 12 | 0;
7629 i40 = HEAP32[i17 >> 2] | 0;
7630 i17 = HEAP32[i17 + 4 >> 2] | 0;
7631 i13 = i14;
7632 HEAP32[i13 >> 2] = i40;
7633 HEAP32[i13 + 4 >> 2] = i17;
7634 i13 = i12 + 172 | 0;
7635 i20 = i16 + 20 | 0;
7636 i41 = HEAP32[i20 >> 2] | 0;
7637 i20 = HEAP32[i20 + 4 >> 2] | 0;
7638 i38 = i13;
7639 HEAP32[i38 >> 2] = i41;
7640 HEAP32[i38 + 4 >> 2] = i20;
7641 i38 = i16 + 36 | 0;
7642 i35 = HEAP32[i38 >> 2] | 0;
7643 i38 = HEAP32[i38 + 4 >> 2] | 0;
7644 i19 = i12 + 180 | 0;
7645 HEAP32[i19 >> 2] = i35;
7646 HEAP32[i19 + 4 >> 2] = i38;
7647 i19 = (HEAP8[i16 + 44 | 0] | 0) != 0;
7648 i21 = (HEAP8[i16 + 45 | 0] | 0) != 0;
7649 d27 = (HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
7650 d37 = (HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]);
7651 d22 = d27 - d37;
7652 d26 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]);
7653 i20 = i12 + 168 | 0;
7654 d36 = (HEAP32[tempDoublePtr >> 2] = i17, +HEAPF32[tempDoublePtr >> 2]);
7655 d23 = d26 - d36;
7656 d28 = +Math_sqrt(+(d22 * d22 + d23 * d23));
7657 d33 = (HEAP32[tempDoublePtr >> 2] = i29, +HEAPF32[tempDoublePtr >> 2]);
7658 d32 = (HEAP32[tempDoublePtr >> 2] = i34, +HEAPF32[tempDoublePtr >> 2]);
7659 d31 = (HEAP32[tempDoublePtr >> 2] = i35, +HEAPF32[tempDoublePtr >> 2]);
7660 d30 = (HEAP32[tempDoublePtr >> 2] = i38, +HEAPF32[tempDoublePtr >> 2]);
7661 if (!(d28 < 1.1920928955078125e-7)) {
7662 d39 = 1.0 / d28;
7663 d22 = d22 * d39;
7664 d23 = d23 * d39;
7665 }
7666 i16 = i12 + 196 | 0;
7667 d28 = -d22;
7668 HEAPF32[i16 >> 2] = d23;
7669 i17 = i12 + 200 | 0;
7670 HEAPF32[i17 >> 2] = d28;
7671 d28 = (d24 - d37) * d23 + (d25 - d36) * d28;
7672 if (i19) {
7673 d37 = d37 - d33;
7674 d36 = d36 - d32;
7675 d39 = +Math_sqrt(+(d37 * d37 + d36 * d36));
7676 if (!(d39 < 1.1920928955078125e-7)) {
7677 d39 = 1.0 / d39;
7678 d37 = d37 * d39;
7679 d36 = d36 * d39;
7680 }
7681 d39 = -d37;
7682 HEAPF32[i12 + 188 >> 2] = d36;
7683 HEAPF32[i12 + 192 >> 2] = d39;
7684 i29 = d23 * d37 - d22 * d36 >= 0.0;
7685 d32 = (d24 - d33) * d36 + (d25 - d32) * d39;
7686 } else {
7687 i29 = 0;
7688 d32 = 0.0;
7689 }
7690 L10 : do {
7691 if (!i21) {
7692 if (!i19) {
7693 i41 = d28 >= 0.0;
7694 HEAP8[i12 + 248 | 0] = i41 & 1;
7695 i19 = i12 + 212 | 0;
7696 if (i41) {
7697 i15 = 64;
7698 break;
7699 } else {
7700 i15 = 65;
7701 break;
7702 }
7703 }
7704 i19 = d32 >= 0.0;
7705 if (i29) {
7706 if (!i19) {
7707 i41 = d28 >= 0.0;
7708 HEAP8[i12 + 248 | 0] = i41 & 1;
7709 i19 = i12 + 212 | 0;
7710 if (!i41) {
7711 d37 = +-d23;
7712 d39 = +d22;
7713 i38 = i19;
7714 HEAPF32[i38 >> 2] = d37;
7715 HEAPF32[i38 + 4 >> 2] = d39;
7716 i38 = i16;
7717 i40 = HEAP32[i38 >> 2] | 0;
7718 i38 = HEAP32[i38 + 4 >> 2] | 0;
7719 i41 = i12 + 228 | 0;
7720 HEAP32[i41 >> 2] = i40;
7721 HEAP32[i41 + 4 >> 2] = i38;
7722 i41 = i12 + 236 | 0;
7723 HEAPF32[i41 >> 2] = -(HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]);
7724 HEAPF32[i41 + 4 >> 2] = d39;
7725 break;
7726 }
7727 } else {
7728 HEAP8[i12 + 248 | 0] = 1;
7729 i19 = i12 + 212 | 0;
7730 }
7731 i41 = i16;
7732 i40 = HEAP32[i41 + 4 >> 2] | 0;
7733 i38 = i19;
7734 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
7735 HEAP32[i38 + 4 >> 2] = i40;
7736 i38 = i12 + 188 | 0;
7737 i40 = HEAP32[i38 + 4 >> 2] | 0;
7738 i41 = i12 + 228 | 0;
7739 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7740 HEAP32[i41 + 4 >> 2] = i40;
7741 d37 = +-+HEAPF32[i16 >> 2];
7742 d39 = +-+HEAPF32[i17 >> 2];
7743 i41 = i12 + 236 | 0;
7744 HEAPF32[i41 >> 2] = d37;
7745 HEAPF32[i41 + 4 >> 2] = d39;
7746 break;
7747 } else {
7748 if (i19) {
7749 i41 = d28 >= 0.0;
7750 HEAP8[i12 + 248 | 0] = i41 & 1;
7751 i19 = i12 + 212 | 0;
7752 if (i41) {
7753 i38 = i16;
7754 i41 = HEAP32[i38 >> 2] | 0;
7755 i38 = HEAP32[i38 + 4 >> 2] | 0;
7756 i40 = i19;
7757 HEAP32[i40 >> 2] = i41;
7758 HEAP32[i40 + 4 >> 2] = i38;
7759 i40 = i12 + 228 | 0;
7760 HEAP32[i40 >> 2] = i41;
7761 HEAP32[i40 + 4 >> 2] = i38;
7762 d37 = +-(HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
7763 d39 = +d22;
7764 i41 = i12 + 236 | 0;
7765 HEAPF32[i41 >> 2] = d37;
7766 HEAPF32[i41 + 4 >> 2] = d39;
7767 break;
7768 }
7769 } else {
7770 HEAP8[i12 + 248 | 0] = 0;
7771 i19 = i12 + 212 | 0;
7772 }
7773 d39 = +-d23;
7774 d37 = +d22;
7775 i38 = i19;
7776 HEAPF32[i38 >> 2] = d39;
7777 HEAPF32[i38 + 4 >> 2] = d37;
7778 i38 = i16;
7779 i40 = HEAP32[i38 + 4 >> 2] | 0;
7780 i41 = i12 + 228 | 0;
7781 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7782 HEAP32[i41 + 4 >> 2] = i40;
7783 d37 = +-+HEAPF32[i12 + 188 >> 2];
7784 d39 = +-+HEAPF32[i12 + 192 >> 2];
7785 i41 = i12 + 236 | 0;
7786 HEAPF32[i41 >> 2] = d37;
7787 HEAPF32[i41 + 4 >> 2] = d39;
7788 break;
7789 }
7790 } else {
7791 d33 = d31 - d27;
7792 d31 = d30 - d26;
7793 d30 = +Math_sqrt(+(d33 * d33 + d31 * d31));
7794 if (d30 < 1.1920928955078125e-7) {
7795 d30 = d33;
7796 } else {
7797 d39 = 1.0 / d30;
7798 d30 = d33 * d39;
7799 d31 = d31 * d39;
7800 }
7801 d39 = -d30;
7802 i34 = i12 + 204 | 0;
7803 HEAPF32[i34 >> 2] = d31;
7804 i35 = i12 + 208 | 0;
7805 HEAPF32[i35 >> 2] = d39;
7806 i38 = d22 * d31 - d23 * d30 > 0.0;
7807 d24 = (d24 - d27) * d31 + (d25 - d26) * d39;
7808 if (!i19) {
7809 i19 = d28 >= 0.0;
7810 if (!i21) {
7811 HEAP8[i12 + 248 | 0] = i19 & 1;
7812 i15 = i12 + 212 | 0;
7813 if (i19) {
7814 i19 = i15;
7815 i15 = 64;
7816 break;
7817 } else {
7818 i19 = i15;
7819 i15 = 65;
7820 break;
7821 }
7822 }
7823 if (i38) {
7824 if (!i19) {
7825 i41 = d24 >= 0.0;
7826 HEAP8[i12 + 248 | 0] = i41 & 1;
7827 i19 = i12 + 212 | 0;
7828 if (!i41) {
7829 d37 = +-d23;
7830 d39 = +d22;
7831 i38 = i19;
7832 HEAPF32[i38 >> 2] = d37;
7833 HEAPF32[i38 + 4 >> 2] = d39;
7834 i38 = i12 + 228 | 0;
7835 HEAPF32[i38 >> 2] = d37;
7836 HEAPF32[i38 + 4 >> 2] = d39;
7837 i38 = i16;
7838 i40 = HEAP32[i38 + 4 >> 2] | 0;
7839 i41 = i12 + 236 | 0;
7840 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7841 HEAP32[i41 + 4 >> 2] = i40;
7842 break;
7843 }
7844 } else {
7845 HEAP8[i12 + 248 | 0] = 1;
7846 i19 = i12 + 212 | 0;
7847 }
7848 i41 = i16;
7849 i40 = HEAP32[i41 + 4 >> 2] | 0;
7850 i38 = i19;
7851 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
7852 HEAP32[i38 + 4 >> 2] = i40;
7853 d37 = +-+HEAPF32[i16 >> 2];
7854 d39 = +-+HEAPF32[i17 >> 2];
7855 i38 = i12 + 228 | 0;
7856 HEAPF32[i38 >> 2] = d37;
7857 HEAPF32[i38 + 4 >> 2] = d39;
7858 i38 = i12 + 204 | 0;
7859 i40 = HEAP32[i38 + 4 >> 2] | 0;
7860 i41 = i12 + 236 | 0;
7861 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7862 HEAP32[i41 + 4 >> 2] = i40;
7863 break;
7864 } else {
7865 if (i19) {
7866 i41 = d24 >= 0.0;
7867 HEAP8[i12 + 248 | 0] = i41 & 1;
7868 i19 = i12 + 212 | 0;
7869 if (i41) {
7870 i40 = i16;
7871 i38 = HEAP32[i40 >> 2] | 0;
7872 i40 = HEAP32[i40 + 4 >> 2] | 0;
7873 i41 = i19;
7874 HEAP32[i41 >> 2] = i38;
7875 HEAP32[i41 + 4 >> 2] = i40;
7876 d37 = +-(HEAP32[tempDoublePtr >> 2] = i38, +HEAPF32[tempDoublePtr >> 2]);
7877 d39 = +d22;
7878 i41 = i12 + 228 | 0;
7879 HEAPF32[i41 >> 2] = d37;
7880 HEAPF32[i41 + 4 >> 2] = d39;
7881 i41 = i12 + 236 | 0;
7882 HEAP32[i41 >> 2] = i38;
7883 HEAP32[i41 + 4 >> 2] = i40;
7884 break;
7885 }
7886 } else {
7887 HEAP8[i12 + 248 | 0] = 0;
7888 i19 = i12 + 212 | 0;
7889 }
7890 d39 = +-d23;
7891 d37 = +d22;
7892 i38 = i19;
7893 HEAPF32[i38 >> 2] = d39;
7894 HEAPF32[i38 + 4 >> 2] = d37;
7895 d37 = +-+HEAPF32[i12 + 204 >> 2];
7896 d39 = +-+HEAPF32[i12 + 208 >> 2];
7897 i38 = i12 + 228 | 0;
7898 HEAPF32[i38 >> 2] = d37;
7899 HEAPF32[i38 + 4 >> 2] = d39;
7900 i38 = i16;
7901 i40 = HEAP32[i38 + 4 >> 2] | 0;
7902 i41 = i12 + 236 | 0;
7903 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7904 HEAP32[i41 + 4 >> 2] = i40;
7905 break;
7906 }
7907 }
7908 if (i29 & i38) {
7909 if (!(d32 >= 0.0) & !(d28 >= 0.0)) {
7910 i41 = d24 >= 0.0;
7911 HEAP8[i12 + 248 | 0] = i41 & 1;
7912 i19 = i12 + 212 | 0;
7913 if (!i41) {
7914 d37 = +-d23;
7915 d39 = +d22;
7916 i41 = i19;
7917 HEAPF32[i41 >> 2] = d37;
7918 HEAPF32[i41 + 4 >> 2] = d39;
7919 i41 = i12 + 228 | 0;
7920 HEAPF32[i41 >> 2] = d37;
7921 HEAPF32[i41 + 4 >> 2] = d39;
7922 i41 = i12 + 236 | 0;
7923 HEAPF32[i41 >> 2] = d37;
7924 HEAPF32[i41 + 4 >> 2] = d39;
7925 break;
7926 }
7927 } else {
7928 HEAP8[i12 + 248 | 0] = 1;
7929 i19 = i12 + 212 | 0;
7930 }
7931 i38 = i16;
7932 i40 = HEAP32[i38 + 4 >> 2] | 0;
7933 i41 = i19;
7934 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7935 HEAP32[i41 + 4 >> 2] = i40;
7936 i41 = i12 + 188 | 0;
7937 i40 = HEAP32[i41 + 4 >> 2] | 0;
7938 i38 = i12 + 228 | 0;
7939 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
7940 HEAP32[i38 + 4 >> 2] = i40;
7941 i38 = i12 + 204 | 0;
7942 i40 = HEAP32[i38 + 4 >> 2] | 0;
7943 i41 = i12 + 236 | 0;
7944 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7945 HEAP32[i41 + 4 >> 2] = i40;
7946 break;
7947 }
7948 if (i29) {
7949 do {
7950 if (!(d32 >= 0.0)) {
7951 if (d28 >= 0.0) {
7952 i41 = d24 >= 0.0;
7953 HEAP8[i12 + 248 | 0] = i41 & 1;
7954 i19 = i12 + 212 | 0;
7955 if (i41) {
7956 break;
7957 }
7958 } else {
7959 HEAP8[i12 + 248 | 0] = 0;
7960 i19 = i12 + 212 | 0;
7961 }
7962 d37 = +-d23;
7963 d39 = +d22;
7964 i41 = i19;
7965 HEAPF32[i41 >> 2] = d37;
7966 HEAPF32[i41 + 4 >> 2] = d39;
7967 d39 = +-+HEAPF32[i34 >> 2];
7968 d37 = +-+HEAPF32[i35 >> 2];
7969 i41 = i12 + 228 | 0;
7970 HEAPF32[i41 >> 2] = d39;
7971 HEAPF32[i41 + 4 >> 2] = d37;
7972 d37 = +-+HEAPF32[i16 >> 2];
7973 d39 = +-+HEAPF32[i17 >> 2];
7974 i41 = i12 + 236 | 0;
7975 HEAPF32[i41 >> 2] = d37;
7976 HEAPF32[i41 + 4 >> 2] = d39;
7977 break L10;
7978 } else {
7979 HEAP8[i12 + 248 | 0] = 1;
7980 i19 = i12 + 212 | 0;
7981 }
7982 } while (0);
7983 i38 = i16;
7984 i40 = HEAP32[i38 + 4 >> 2] | 0;
7985 i41 = i19;
7986 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7987 HEAP32[i41 + 4 >> 2] = i40;
7988 i41 = i12 + 188 | 0;
7989 i40 = HEAP32[i41 + 4 >> 2] | 0;
7990 i38 = i12 + 228 | 0;
7991 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
7992 HEAP32[i38 + 4 >> 2] = i40;
7993 i38 = i16;
7994 i40 = HEAP32[i38 + 4 >> 2] | 0;
7995 i41 = i12 + 236 | 0;
7996 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
7997 HEAP32[i41 + 4 >> 2] = i40;
7998 break;
7999 }
8000 if (!i38) {
8001 if (!(!(d32 >= 0.0) | !(d28 >= 0.0))) {
8002 i41 = d24 >= 0.0;
8003 HEAP8[i12 + 248 | 0] = i41 & 1;
8004 i19 = i12 + 212 | 0;
8005 if (i41) {
8006 i40 = i16;
8007 i38 = HEAP32[i40 >> 2] | 0;
8008 i40 = HEAP32[i40 + 4 >> 2] | 0;
8009 i41 = i19;
8010 HEAP32[i41 >> 2] = i38;
8011 HEAP32[i41 + 4 >> 2] = i40;
8012 i41 = i12 + 228 | 0;
8013 HEAP32[i41 >> 2] = i38;
8014 HEAP32[i41 + 4 >> 2] = i40;
8015 i41 = i12 + 236 | 0;
8016 HEAP32[i41 >> 2] = i38;
8017 HEAP32[i41 + 4 >> 2] = i40;
8018 break;
8019 }
8020 } else {
8021 HEAP8[i12 + 248 | 0] = 0;
8022 i19 = i12 + 212 | 0;
8023 }
8024 d37 = +-d23;
8025 d39 = +d22;
8026 i41 = i19;
8027 HEAPF32[i41 >> 2] = d37;
8028 HEAPF32[i41 + 4 >> 2] = d39;
8029 d39 = +-+HEAPF32[i34 >> 2];
8030 d37 = +-+HEAPF32[i35 >> 2];
8031 i41 = i12 + 228 | 0;
8032 HEAPF32[i41 >> 2] = d39;
8033 HEAPF32[i41 + 4 >> 2] = d37;
8034 d37 = +-+HEAPF32[i12 + 188 >> 2];
8035 d39 = +-+HEAPF32[i12 + 192 >> 2];
8036 i41 = i12 + 236 | 0;
8037 HEAPF32[i41 >> 2] = d37;
8038 HEAPF32[i41 + 4 >> 2] = d39;
8039 break;
8040 }
8041 do {
8042 if (!(d24 >= 0.0)) {
8043 if (d32 >= 0.0) {
8044 i41 = d28 >= 0.0;
8045 HEAP8[i12 + 248 | 0] = i41 & 1;
8046 i19 = i12 + 212 | 0;
8047 if (i41) {
8048 break;
8049 }
8050 } else {
8051 HEAP8[i12 + 248 | 0] = 0;
8052 i19 = i12 + 212 | 0;
8053 }
8054 d37 = +-d23;
8055 d39 = +d22;
8056 i41 = i19;
8057 HEAPF32[i41 >> 2] = d37;
8058 HEAPF32[i41 + 4 >> 2] = d39;
8059 d39 = +-+HEAPF32[i16 >> 2];
8060 d37 = +-+HEAPF32[i17 >> 2];
8061 i41 = i12 + 228 | 0;
8062 HEAPF32[i41 >> 2] = d39;
8063 HEAPF32[i41 + 4 >> 2] = d37;
8064 d37 = +-+HEAPF32[i12 + 188 >> 2];
8065 d39 = +-+HEAPF32[i12 + 192 >> 2];
8066 i41 = i12 + 236 | 0;
8067 HEAPF32[i41 >> 2] = d37;
8068 HEAPF32[i41 + 4 >> 2] = d39;
8069 break L10;
8070 } else {
8071 HEAP8[i12 + 248 | 0] = 1;
8072 i19 = i12 + 212 | 0;
8073 }
8074 } while (0);
8075 i38 = i16;
8076 i40 = HEAP32[i38 + 4 >> 2] | 0;
8077 i41 = i19;
8078 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
8079 HEAP32[i41 + 4 >> 2] = i40;
8080 i41 = i16;
8081 i40 = HEAP32[i41 + 4 >> 2] | 0;
8082 i38 = i12 + 228 | 0;
8083 HEAP32[i38 >> 2] = HEAP32[i41 >> 2];
8084 HEAP32[i38 + 4 >> 2] = i40;
8085 i38 = i12 + 204 | 0;
8086 i40 = HEAP32[i38 + 4 >> 2] | 0;
8087 i41 = i12 + 236 | 0;
8088 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
8089 HEAP32[i41 + 4 >> 2] = i40;
8090 }
8091 } while (0);
8092 if ((i15 | 0) == 64) {
8093 i38 = i16;
8094 i41 = HEAP32[i38 >> 2] | 0;
8095 i38 = HEAP32[i38 + 4 >> 2] | 0;
8096 i40 = i19;
8097 HEAP32[i40 >> 2] = i41;
8098 HEAP32[i40 + 4 >> 2] = i38;
8099 d37 = +-(HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
8100 d39 = +d22;
8101 i41 = i12 + 228 | 0;
8102 HEAPF32[i41 >> 2] = d37;
8103 HEAPF32[i41 + 4 >> 2] = d39;
8104 i41 = i12 + 236 | 0;
8105 HEAPF32[i41 >> 2] = d37;
8106 HEAPF32[i41 + 4 >> 2] = d39;
8107 } else if ((i15 | 0) == 65) {
8108 d37 = +-d23;
8109 d39 = +d22;
8110 i40 = i19;
8111 HEAPF32[i40 >> 2] = d37;
8112 HEAPF32[i40 + 4 >> 2] = d39;
8113 i40 = i16;
8114 i38 = HEAP32[i40 >> 2] | 0;
8115 i40 = HEAP32[i40 + 4 >> 2] | 0;
8116 i41 = i12 + 228 | 0;
8117 HEAP32[i41 >> 2] = i38;
8118 HEAP32[i41 + 4 >> 2] = i40;
8119 i41 = i12 + 236 | 0;
8120 HEAP32[i41 >> 2] = i38;
8121 HEAP32[i41 + 4 >> 2] = i40;
8122 }
8123 i21 = i8 + 148 | 0;
8124 i34 = i12 + 128 | 0;
8125 HEAP32[i34 >> 2] = HEAP32[i21 >> 2];
8126 if ((HEAP32[i21 >> 2] | 0) > 0) {
8127 i19 = 0;
8128 do {
8129 d33 = +HEAPF32[i5 >> 2];
8130 d37 = +HEAPF32[i8 + (i19 << 3) + 20 >> 2];
8131 d39 = +HEAPF32[i7 >> 2];
8132 d36 = +HEAPF32[i8 + (i19 << 3) + 24 >> 2];
8133 d32 = +(+HEAPF32[i4 >> 2] + (d33 * d37 - d39 * d36));
8134 d36 = +(d37 * d39 + d33 * d36 + +HEAPF32[i6 >> 2]);
8135 i41 = i12 + (i19 << 3) | 0;
8136 HEAPF32[i41 >> 2] = d32;
8137 HEAPF32[i41 + 4 >> 2] = d36;
8138 d36 = +HEAPF32[i5 >> 2];
8139 d32 = +HEAPF32[i8 + (i19 << 3) + 84 >> 2];
8140 d33 = +HEAPF32[i7 >> 2];
8141 d39 = +HEAPF32[i8 + (i19 << 3) + 88 >> 2];
8142 d37 = +(d36 * d32 - d33 * d39);
8143 d39 = +(d32 * d33 + d36 * d39);
8144 i41 = i12 + (i19 << 3) + 64 | 0;
8145 HEAPF32[i41 >> 2] = d37;
8146 HEAPF32[i41 + 4 >> 2] = d39;
8147 i19 = i19 + 1 | 0;
8148 } while ((i19 | 0) < (HEAP32[i21 >> 2] | 0));
8149 }
8150 i21 = i12 + 244 | 0;
8151 HEAPF32[i21 >> 2] = .019999999552965164;
8152 i19 = i2 + 60 | 0;
8153 HEAP32[i19 >> 2] = 0;
8154 i29 = i12 + 248 | 0;
8155 i35 = HEAP32[i34 >> 2] | 0;
8156 if ((i35 | 0) <= 0) {
8157 STACKTOP = i1;
8158 return;
8159 }
8160 d23 = +HEAPF32[i12 + 164 >> 2];
8161 d26 = +HEAPF32[i20 >> 2];
8162 d24 = +HEAPF32[i12 + 212 >> 2];
8163 d27 = +HEAPF32[i12 + 216 >> 2];
8164 d22 = 3.4028234663852886e+38;
8165 i20 = 0;
8166 do {
8167 d25 = d24 * (+HEAPF32[i12 + (i20 << 3) >> 2] - d23) + d27 * (+HEAPF32[i12 + (i20 << 3) + 4 >> 2] - d26);
8168 d22 = d25 < d22 ? d25 : d22;
8169 i20 = i20 + 1 | 0;
8170 } while ((i20 | 0) != (i35 | 0));
8171 if (d22 > .019999999552965164) {
8172 STACKTOP = i1;
8173 return;
8174 }
8175 __ZN12b2EPCollider24ComputePolygonSeparationEv(i18, i12);
8176 i20 = HEAP32[i18 >> 2] | 0;
8177 if ((i20 | 0) != 0) {
8178 d23 = +HEAPF32[i18 + 8 >> 2];
8179 if (d23 > +HEAPF32[i21 >> 2]) {
8180 STACKTOP = i1;
8181 return;
8182 }
8183 if (d23 > d22 * .9800000190734863 + .0010000000474974513) {
8184 i18 = HEAP32[i18 + 4 >> 2] | 0;
8185 i35 = i2 + 56 | 0;
8186 if ((i20 | 0) == 1) {
8187 i18 = i11;
8188 i15 = 77;
8189 } else {
8190 HEAP32[i35 >> 2] = 2;
8191 i40 = i14;
8192 i41 = HEAP32[i40 + 4 >> 2] | 0;
8193 i38 = i11;
8194 HEAP32[i38 >> 2] = HEAP32[i40 >> 2];
8195 HEAP32[i38 + 4 >> 2] = i41;
8196 i38 = i11 + 8 | 0;
8197 HEAP8[i38] = 0;
8198 i41 = i18 & 255;
8199 HEAP8[i38 + 1 | 0] = i41;
8200 HEAP8[i38 + 2 | 0] = 0;
8201 HEAP8[i38 + 3 | 0] = 1;
8202 i38 = i13;
8203 i40 = HEAP32[i38 + 4 >> 2] | 0;
8204 i13 = i11 + 12 | 0;
8205 HEAP32[i13 >> 2] = HEAP32[i38 >> 2];
8206 HEAP32[i13 + 4 >> 2] = i40;
8207 i13 = i11 + 20 | 0;
8208 HEAP8[i13] = 0;
8209 HEAP8[i13 + 1 | 0] = i41;
8210 HEAP8[i13 + 2 | 0] = 0;
8211 HEAP8[i13 + 3 | 0] = 1;
8212 HEAP32[i9 >> 2] = i18;
8213 i13 = i18 + 1 | 0;
8214 i16 = (i13 | 0) < (HEAP32[i34 >> 2] | 0) ? i13 : 0;
8215 HEAP32[i9 + 4 >> 2] = i16;
8216 i17 = i12 + (i18 << 3) | 0;
8217 i13 = HEAP32[i17 >> 2] | 0;
8218 i17 = HEAP32[i17 + 4 >> 2] | 0;
8219 i29 = i9 + 8 | 0;
8220 HEAP32[i29 >> 2] = i13;
8221 HEAP32[i29 + 4 >> 2] = i17;
8222 i16 = i12 + (i16 << 3) | 0;
8223 i29 = HEAP32[i16 >> 2] | 0;
8224 i16 = HEAP32[i16 + 4 >> 2] | 0;
8225 i20 = i9 + 16 | 0;
8226 HEAP32[i20 >> 2] = i29;
8227 HEAP32[i20 + 4 >> 2] = i16;
8228 i20 = i12 + (i18 << 3) + 64 | 0;
8229 i12 = HEAP32[i20 >> 2] | 0;
8230 i20 = HEAP32[i20 + 4 >> 2] | 0;
8231 i14 = i9 + 24 | 0;
8232 HEAP32[i14 >> 2] = i12;
8233 HEAP32[i14 + 4 >> 2] = i20;
8234 i14 = 0;
8235 }
8236 } else {
8237 i15 = 75;
8238 }
8239 } else {
8240 i15 = 75;
8241 }
8242 if ((i15 | 0) == 75) {
8243 i18 = i11;
8244 i35 = i2 + 56 | 0;
8245 i15 = 77;
8246 }
8247 do {
8248 if ((i15 | 0) == 77) {
8249 HEAP32[i35 >> 2] = 1;
8250 i15 = HEAP32[i34 >> 2] | 0;
8251 if ((i15 | 0) > 1) {
8252 d23 = +HEAPF32[i12 + 216 >> 2];
8253 d22 = +HEAPF32[i12 + 212 >> 2];
8254 i34 = 0;
8255 d24 = d22 * +HEAPF32[i12 + 64 >> 2] + d23 * +HEAPF32[i12 + 68 >> 2];
8256 i35 = 1;
8257 while (1) {
8258 d25 = d22 * +HEAPF32[i12 + (i35 << 3) + 64 >> 2] + d23 * +HEAPF32[i12 + (i35 << 3) + 68 >> 2];
8259 i20 = d25 < d24;
8260 i34 = i20 ? i35 : i34;
8261 i35 = i35 + 1 | 0;
8262 if ((i35 | 0) < (i15 | 0)) {
8263 d24 = i20 ? d25 : d24;
8264 } else {
8265 break;
8266 }
8267 }
8268 } else {
8269 i34 = 0;
8270 }
8271 i20 = i34 + 1 | 0;
8272 i40 = (i20 | 0) < (i15 | 0) ? i20 : 0;
8273 i41 = i12 + (i34 << 3) | 0;
8274 i38 = HEAP32[i41 + 4 >> 2] | 0;
8275 i35 = i11;
8276 HEAP32[i35 >> 2] = HEAP32[i41 >> 2];
8277 HEAP32[i35 + 4 >> 2] = i38;
8278 i35 = i11 + 8 | 0;
8279 HEAP8[i35] = 0;
8280 HEAP8[i35 + 1 | 0] = i34;
8281 HEAP8[i35 + 2 | 0] = 1;
8282 HEAP8[i35 + 3 | 0] = 0;
8283 i35 = i12 + (i40 << 3) | 0;
8284 i38 = HEAP32[i35 + 4 >> 2] | 0;
8285 i41 = i11 + 12 | 0;
8286 HEAP32[i41 >> 2] = HEAP32[i35 >> 2];
8287 HEAP32[i41 + 4 >> 2] = i38;
8288 i41 = i11 + 20 | 0;
8289 HEAP8[i41] = 0;
8290 HEAP8[i41 + 1 | 0] = i40;
8291 HEAP8[i41 + 2 | 0] = 1;
8292 HEAP8[i41 + 3 | 0] = 0;
8293 if ((HEAP8[i29] | 0) == 0) {
8294 HEAP32[i9 >> 2] = 1;
8295 HEAP32[i9 + 4 >> 2] = 0;
8296 i11 = i13;
8297 i13 = HEAP32[i11 >> 2] | 0;
8298 i11 = HEAP32[i11 + 4 >> 2] | 0;
8299 i29 = i9 + 8 | 0;
8300 HEAP32[i29 >> 2] = i13;
8301 HEAP32[i29 + 4 >> 2] = i11;
8302 i29 = HEAP32[i14 >> 2] | 0;
8303 i14 = HEAP32[i14 + 4 >> 2] | 0;
8304 i12 = i9 + 16 | 0;
8305 HEAP32[i12 >> 2] = i29;
8306 HEAP32[i12 + 4 >> 2] = i14;
8307 i12 = (HEAPF32[tempDoublePtr >> 2] = -+HEAPF32[i16 >> 2], HEAP32[tempDoublePtr >> 2] | 0);
8308 i20 = (HEAPF32[tempDoublePtr >> 2] = -+HEAPF32[i17 >> 2], HEAP32[tempDoublePtr >> 2] | 0);
8309 i16 = i9 + 24 | 0;
8310 HEAP32[i16 >> 2] = i12;
8311 HEAP32[i16 + 4 >> 2] = i20;
8312 i16 = i14;
8313 i17 = i11;
8314 i11 = i18;
8315 i18 = 1;
8316 i14 = 1;
8317 break;
8318 } else {
8319 HEAP32[i9 >> 2] = 0;
8320 HEAP32[i9 + 4 >> 2] = 1;
8321 i17 = i14;
8322 i11 = HEAP32[i17 >> 2] | 0;
8323 i17 = HEAP32[i17 + 4 >> 2] | 0;
8324 i29 = i9 + 8 | 0;
8325 HEAP32[i29 >> 2] = i11;
8326 HEAP32[i29 + 4 >> 2] = i17;
8327 i29 = HEAP32[i13 >> 2] | 0;
8328 i13 = HEAP32[i13 + 4 >> 2] | 0;
8329 i20 = i9 + 16 | 0;
8330 HEAP32[i20 >> 2] = i29;
8331 HEAP32[i20 + 4 >> 2] = i13;
8332 i20 = i16;
8333 i12 = HEAP32[i20 >> 2] | 0;
8334 i20 = HEAP32[i20 + 4 >> 2] | 0;
8335 i16 = i9 + 24 | 0;
8336 HEAP32[i16 >> 2] = i12;
8337 HEAP32[i16 + 4 >> 2] = i20;
8338 i16 = i13;
8339 i13 = i11;
8340 i11 = i18;
8341 i18 = 0;
8342 i14 = 1;
8343 break;
8344 }
8345 }
8346 } while (0);
8347 d30 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]);
8348 d39 = (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]);
8349 d31 = (HEAP32[tempDoublePtr >> 2] = i13, +HEAPF32[tempDoublePtr >> 2]);
8350 d32 = (HEAP32[tempDoublePtr >> 2] = i17, +HEAPF32[tempDoublePtr >> 2]);
8351 d33 = (HEAP32[tempDoublePtr >> 2] = i29, +HEAPF32[tempDoublePtr >> 2]);
8352 d37 = (HEAP32[tempDoublePtr >> 2] = i16, +HEAPF32[tempDoublePtr >> 2]);
8353 i41 = i9 + 32 | 0;
8354 i16 = i9 + 24 | 0;
8355 i13 = i9 + 28 | 0;
8356 d39 = -d39;
8357 HEAPF32[i41 >> 2] = d30;
8358 HEAPF32[i9 + 36 >> 2] = d39;
8359 i20 = i9 + 44 | 0;
8360 d36 = -d30;
8361 i17 = i20;
8362 HEAPF32[i17 >> 2] = d36;
8363 HEAP32[i17 + 4 >> 2] = i12;
8364 i17 = i9 + 8 | 0;
8365 i15 = i9 + 12 | 0;
8366 d39 = d30 * d31 + d32 * d39;
8367 HEAPF32[i9 + 40 >> 2] = d39;
8368 i29 = i9 + 52 | 0;
8369 HEAPF32[i29 >> 2] = d33 * d36 + (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]) * d37;
8370 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i10, i11, i41, d39, i18) | 0) < 2) {
8371 STACKTOP = i1;
8372 return;
8373 }
8374 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i3, i10, i20, +HEAPF32[i29 >> 2], HEAP32[i9 + 4 >> 2] | 0) | 0) < 2) {
8375 STACKTOP = i1;
8376 return;
8377 }
8378 i10 = i2 + 40 | 0;
8379 if (i14) {
8380 i40 = i16;
8381 i41 = HEAP32[i40 >> 2] | 0;
8382 i40 = HEAP32[i40 + 4 >> 2] | 0;
8383 i35 = i10;
8384 HEAP32[i35 >> 2] = i41;
8385 HEAP32[i35 + 4 >> 2] = i40;
8386 i35 = i17;
8387 i40 = HEAP32[i35 >> 2] | 0;
8388 i35 = HEAP32[i35 + 4 >> 2] | 0;
8389 i38 = i2 + 48 | 0;
8390 HEAP32[i38 >> 2] = i40;
8391 HEAP32[i38 + 4 >> 2] = i35;
8392 d23 = (HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]);
8393 d22 = (HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]);
8394 d24 = +HEAPF32[i15 >> 2];
8395 d25 = +HEAPF32[i13 >> 2];
8396 d28 = +HEAPF32[i3 >> 2];
8397 d27 = +HEAPF32[i3 + 4 >> 2];
8398 d26 = +HEAPF32[i21 >> 2];
8399 if (!((d28 - d23) * d22 + (d27 - d24) * d25 <= d26)) {
8400 d28 = d26;
8401 i8 = 0;
8402 } else {
8403 d37 = d28 - +HEAPF32[i4 >> 2];
8404 d36 = d27 - +HEAPF32[i6 >> 2];
8405 d33 = +HEAPF32[i5 >> 2];
8406 d28 = +HEAPF32[i7 >> 2];
8407 d39 = +(d37 * d33 + d36 * d28);
8408 d28 = +(d33 * d36 - d37 * d28);
8409 i8 = i2;
8410 HEAPF32[i8 >> 2] = d39;
8411 HEAPF32[i8 + 4 >> 2] = d28;
8412 HEAP32[i2 + 16 >> 2] = HEAP32[i3 + 8 >> 2];
8413 d28 = +HEAPF32[i21 >> 2];
8414 i8 = 1;
8415 }
8416 d26 = +HEAPF32[i3 + 12 >> 2];
8417 d27 = +HEAPF32[i3 + 16 >> 2];
8418 if ((d26 - d23) * d22 + (d27 - d24) * d25 <= d28) {
8419 d36 = d26 - +HEAPF32[i4 >> 2];
8420 d33 = d27 - +HEAPF32[i6 >> 2];
8421 d32 = +HEAPF32[i5 >> 2];
8422 d39 = +HEAPF32[i7 >> 2];
8423 d37 = +(d36 * d32 + d33 * d39);
8424 d39 = +(d32 * d33 - d36 * d39);
8425 i41 = i2 + (i8 * 20 | 0) | 0;
8426 HEAPF32[i41 >> 2] = d37;
8427 HEAPF32[i41 + 4 >> 2] = d39;
8428 HEAP32[i2 + (i8 * 20 | 0) + 16 >> 2] = HEAP32[i3 + 20 >> 2];
8429 i8 = i8 + 1 | 0;
8430 }
8431 } else {
8432 i38 = HEAP32[i9 >> 2] | 0;
8433 i35 = i8 + (i38 << 3) + 84 | 0;
8434 i41 = HEAP32[i35 + 4 >> 2] | 0;
8435 i40 = i10;
8436 HEAP32[i40 >> 2] = HEAP32[i35 >> 2];
8437 HEAP32[i40 + 4 >> 2] = i41;
8438 i38 = i8 + (i38 << 3) + 20 | 0;
8439 i40 = HEAP32[i38 + 4 >> 2] | 0;
8440 i41 = i2 + 48 | 0;
8441 HEAP32[i41 >> 2] = HEAP32[i38 >> 2];
8442 HEAP32[i41 + 4 >> 2] = i40;
8443 d22 = +HEAPF32[i17 >> 2];
8444 d23 = +HEAPF32[i16 >> 2];
8445 d24 = +HEAPF32[i15 >> 2];
8446 d25 = +HEAPF32[i13 >> 2];
8447 d26 = +HEAPF32[i21 >> 2];
8448 if (!((+HEAPF32[i3 >> 2] - d22) * d23 + (+HEAPF32[i3 + 4 >> 2] - d24) * d25 <= d26)) {
8449 i8 = 0;
8450 } else {
8451 i40 = i3;
8452 i8 = HEAP32[i40 + 4 >> 2] | 0;
8453 i41 = i2;
8454 HEAP32[i41 >> 2] = HEAP32[i40 >> 2];
8455 HEAP32[i41 + 4 >> 2] = i8;
8456 i41 = i3 + 8 | 0;
8457 i8 = i2 + 16 | 0;
8458 HEAP8[i8 + 2 | 0] = HEAP8[i41 + 3 | 0] | 0;
8459 HEAP8[i8 + 3 | 0] = HEAP8[i41 + 2 | 0] | 0;
8460 HEAP8[i8] = HEAP8[i41 + 1 | 0] | 0;
8461 HEAP8[i8 + 1 | 0] = HEAP8[i41] | 0;
8462 d26 = +HEAPF32[i21 >> 2];
8463 i8 = 1;
8464 }
8465 i4 = i3 + 12 | 0;
8466 if ((+HEAPF32[i4 >> 2] - d22) * d23 + (+HEAPF32[i3 + 16 >> 2] - d24) * d25 <= d26) {
8467 i38 = i4;
8468 i41 = HEAP32[i38 + 4 >> 2] | 0;
8469 i40 = i2 + (i8 * 20 | 0) | 0;
8470 HEAP32[i40 >> 2] = HEAP32[i38 >> 2];
8471 HEAP32[i40 + 4 >> 2] = i41;
8472 i40 = i3 + 20 | 0;
8473 i41 = i2 + (i8 * 20 | 0) + 16 | 0;
8474 HEAP8[i41 + 2 | 0] = HEAP8[i40 + 3 | 0] | 0;
8475 HEAP8[i41 + 3 | 0] = HEAP8[i40 + 2 | 0] | 0;
8476 HEAP8[i41] = HEAP8[i40 + 1 | 0] | 0;
8477 HEAP8[i41 + 1 | 0] = HEAP8[i40] | 0;
8478 i8 = i8 + 1 | 0;
8479 }
8480 }
8481 HEAP32[i19 >> 2] = i8;
8482 STACKTOP = i1;
8483 return;
8484}
8485function __ZN7b2World8SolveTOIERK10b2TimeStep(i30, i11) {
8486 i30 = i30 | 0;
8487 i11 = i11 | 0;
8488 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0, i39 = 0, i40 = 0, i41 = 0, d42 = 0.0, i43 = 0, i44 = 0, i45 = 0, i46 = 0, i47 = 0, i48 = 0, i49 = 0, i50 = 0, i51 = 0, i52 = 0, i53 = 0, i54 = 0, i55 = 0, i56 = 0, i57 = 0, i58 = 0, i59 = 0, i60 = 0, i61 = 0, i62 = 0, i63 = 0, i64 = 0, i65 = 0, i66 = 0, d67 = 0.0, d68 = 0.0, d69 = 0.0, d70 = 0.0, d71 = 0.0, d72 = 0.0;
8489 i1 = STACKTOP;
8490 STACKTOP = STACKTOP + 336 | 0;
8491 i3 = i1 + 284 | 0;
8492 i6 = i1 + 152 | 0;
8493 i5 = i1 + 144 | 0;
8494 i4 = i1 + 108 | 0;
8495 i8 = i1 + 72 | 0;
8496 i7 = i1 + 64 | 0;
8497 i14 = i1 + 24 | 0;
8498 i9 = i1;
8499 i10 = i30 + 102872 | 0;
8500 i13 = i30 + 102944 | 0;
8501 __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i3, 64, 32, 0, i30 + 68 | 0, HEAP32[i13 >> 2] | 0);
8502 i2 = i30 + 102995 | 0;
8503 if ((HEAP8[i2] | 0) != 0) {
8504 i15 = HEAP32[i30 + 102952 >> 2] | 0;
8505 if ((i15 | 0) != 0) {
8506 do {
8507 i66 = i15 + 4 | 0;
8508 HEAP16[i66 >> 1] = HEAP16[i66 >> 1] & 65534;
8509 HEAPF32[i15 + 60 >> 2] = 0.0;
8510 i15 = HEAP32[i15 + 96 >> 2] | 0;
8511 } while ((i15 | 0) != 0);
8512 }
8513 i15 = i30 + 102932 | 0;
8514 i16 = HEAP32[i15 >> 2] | 0;
8515 if ((i16 | 0) != 0) {
8516 do {
8517 i66 = i16 + 4 | 0;
8518 HEAP32[i66 >> 2] = HEAP32[i66 >> 2] & -34;
8519 HEAP32[i16 + 128 >> 2] = 0;
8520 HEAPF32[i16 + 132 >> 2] = 1.0;
8521 i16 = HEAP32[i16 + 12 >> 2] | 0;
8522 } while ((i16 | 0) != 0);
8523 }
8524 } else {
8525 i15 = i30 + 102932 | 0;
8526 }
8527 i25 = i3 + 28 | 0;
8528 i26 = i3 + 36 | 0;
8529 i27 = i3 + 32 | 0;
8530 i28 = i3 + 40 | 0;
8531 i29 = i3 + 8 | 0;
8532 i24 = i3 + 44 | 0;
8533 i23 = i3 + 12 | 0;
8534 i22 = i7 + 4 | 0;
8535 i21 = i9 + 4 | 0;
8536 i20 = i9 + 8 | 0;
8537 i19 = i9 + 16 | 0;
8538 i18 = i11 + 12 | 0;
8539 i17 = i9 + 12 | 0;
8540 i16 = i9 + 20 | 0;
8541 i39 = i30 + 102994 | 0;
8542 i37 = i6 + 16 | 0;
8543 i36 = i6 + 20 | 0;
8544 i35 = i6 + 24 | 0;
8545 i34 = i6 + 44 | 0;
8546 i33 = i6 + 48 | 0;
8547 i32 = i6 + 52 | 0;
8548 i41 = i6 + 28 | 0;
8549 i31 = i6 + 56 | 0;
8550 i40 = i6 + 92 | 0;
8551 i30 = i6 + 128 | 0;
8552 i38 = i5 + 4 | 0;
8553 L11 : while (1) {
8554 i47 = HEAP32[i15 >> 2] | 0;
8555 if ((i47 | 0) == 0) {
8556 i4 = 36;
8557 break;
8558 } else {
8559 d42 = 1.0;
8560 i44 = 0;
8561 }
8562 do {
8563 i48 = i47 + 4 | 0;
8564 i43 = HEAP32[i48 >> 2] | 0;
8565 do {
8566 if ((i43 & 4 | 0) != 0 ? (HEAP32[i47 + 128 >> 2] | 0) <= 8 : 0) {
8567 if ((i43 & 32 | 0) == 0) {
8568 i43 = HEAP32[i47 + 48 >> 2] | 0;
8569 i45 = HEAP32[i47 + 52 >> 2] | 0;
8570 if ((HEAP8[i43 + 38 | 0] | 0) != 0) {
8571 break;
8572 }
8573 if ((HEAP8[i45 + 38 | 0] | 0) != 0) {
8574 break;
8575 }
8576 i46 = HEAP32[i43 + 8 >> 2] | 0;
8577 i50 = HEAP32[i45 + 8 >> 2] | 0;
8578 i53 = HEAP32[i46 >> 2] | 0;
8579 i52 = HEAP32[i50 >> 2] | 0;
8580 if (!((i53 | 0) == 2 | (i52 | 0) == 2)) {
8581 i4 = 16;
8582 break L11;
8583 }
8584 i51 = HEAP16[i46 + 4 >> 1] | 0;
8585 i49 = HEAP16[i50 + 4 >> 1] | 0;
8586 if (!((i51 & 2) != 0 & (i53 | 0) != 0 | (i49 & 2) != 0 & (i52 | 0) != 0)) {
8587 break;
8588 }
8589 if (!((i51 & 8) != 0 | (i53 | 0) != 2 | ((i49 & 8) != 0 | (i52 | 0) != 2))) {
8590 break;
8591 }
8592 i51 = i46 + 28 | 0;
8593 i52 = i46 + 60 | 0;
8594 d68 = +HEAPF32[i52 >> 2];
8595 i49 = i50 + 28 | 0;
8596 i53 = i50 + 60 | 0;
8597 d67 = +HEAPF32[i53 >> 2];
8598 if (!(d68 < d67)) {
8599 if (d67 < d68) {
8600 if (!(d67 < 1.0)) {
8601 i4 = 25;
8602 break L11;
8603 }
8604 d67 = (d68 - d67) / (1.0 - d67);
8605 i66 = i50 + 36 | 0;
8606 d69 = 1.0 - d67;
8607 d71 = +(+HEAPF32[i66 >> 2] * d69 + d67 * +HEAPF32[i50 + 44 >> 2]);
8608 d70 = +(d69 * +HEAPF32[i50 + 40 >> 2] + d67 * +HEAPF32[i50 + 48 >> 2]);
8609 HEAPF32[i66 >> 2] = d71;
8610 HEAPF32[i66 + 4 >> 2] = d70;
8611 i66 = i50 + 52 | 0;
8612 HEAPF32[i66 >> 2] = d69 * +HEAPF32[i66 >> 2] + d67 * +HEAPF32[i50 + 56 >> 2];
8613 HEAPF32[i53 >> 2] = d68;
8614 d67 = d68;
8615 } else {
8616 d67 = d68;
8617 }
8618 } else {
8619 if (!(d68 < 1.0)) {
8620 i4 = 21;
8621 break L11;
8622 }
8623 d71 = (d67 - d68) / (1.0 - d68);
8624 i66 = i46 + 36 | 0;
8625 d70 = 1.0 - d71;
8626 d68 = +(+HEAPF32[i66 >> 2] * d70 + d71 * +HEAPF32[i46 + 44 >> 2]);
8627 d69 = +(d70 * +HEAPF32[i46 + 40 >> 2] + d71 * +HEAPF32[i46 + 48 >> 2]);
8628 HEAPF32[i66 >> 2] = d68;
8629 HEAPF32[i66 + 4 >> 2] = d69;
8630 i66 = i46 + 52 | 0;
8631 HEAPF32[i66 >> 2] = d70 * +HEAPF32[i66 >> 2] + d71 * +HEAPF32[i46 + 56 >> 2];
8632 HEAPF32[i52 >> 2] = d67;
8633 }
8634 if (!(d67 < 1.0)) {
8635 i4 = 28;
8636 break L11;
8637 }
8638 i66 = HEAP32[i47 + 56 >> 2] | 0;
8639 i46 = HEAP32[i47 + 60 >> 2] | 0;
8640 HEAP32[i37 >> 2] = 0;
8641 HEAP32[i36 >> 2] = 0;
8642 HEAPF32[i35 >> 2] = 0.0;
8643 HEAP32[i34 >> 2] = 0;
8644 HEAP32[i33 >> 2] = 0;
8645 HEAPF32[i32 >> 2] = 0.0;
8646 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i6, HEAP32[i43 + 12 >> 2] | 0, i66);
8647 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i41, HEAP32[i45 + 12 >> 2] | 0, i46);
8648 i43 = i31 + 0 | 0;
8649 i45 = i51 + 0 | 0;
8650 i46 = i43 + 36 | 0;
8651 do {
8652 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8653 i43 = i43 + 4 | 0;
8654 i45 = i45 + 4 | 0;
8655 } while ((i43 | 0) < (i46 | 0));
8656 i43 = i40 + 0 | 0;
8657 i45 = i49 + 0 | 0;
8658 i46 = i43 + 36 | 0;
8659 do {
8660 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8661 i43 = i43 + 4 | 0;
8662 i45 = i45 + 4 | 0;
8663 } while ((i43 | 0) < (i46 | 0));
8664 HEAPF32[i30 >> 2] = 1.0;
8665 __Z14b2TimeOfImpactP11b2TOIOutputPK10b2TOIInput(i5, i6);
8666 if ((HEAP32[i5 >> 2] | 0) == 3) {
8667 d67 = d67 + (1.0 - d67) * +HEAPF32[i38 >> 2];
8668 d67 = d67 < 1.0 ? d67 : 1.0;
8669 } else {
8670 d67 = 1.0;
8671 }
8672 HEAPF32[i47 + 132 >> 2] = d67;
8673 HEAP32[i48 >> 2] = HEAP32[i48 >> 2] | 32;
8674 } else {
8675 d67 = +HEAPF32[i47 + 132 >> 2];
8676 }
8677 if (d67 < d42) {
8678 d42 = d67;
8679 i44 = i47;
8680 }
8681 }
8682 } while (0);
8683 i47 = HEAP32[i47 + 12 >> 2] | 0;
8684 } while ((i47 | 0) != 0);
8685 if ((i44 | 0) == 0 | d42 > .9999988079071045) {
8686 i4 = 36;
8687 break;
8688 }
8689 i47 = HEAP32[(HEAP32[i44 + 48 >> 2] | 0) + 8 >> 2] | 0;
8690 i48 = HEAP32[(HEAP32[i44 + 52 >> 2] | 0) + 8 >> 2] | 0;
8691 i49 = i47 + 28 | 0;
8692 i43 = i4 + 0 | 0;
8693 i45 = i49 + 0 | 0;
8694 i46 = i43 + 36 | 0;
8695 do {
8696 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8697 i43 = i43 + 4 | 0;
8698 i45 = i45 + 4 | 0;
8699 } while ((i43 | 0) < (i46 | 0));
8700 i50 = i48 + 28 | 0;
8701 i43 = i8 + 0 | 0;
8702 i45 = i50 + 0 | 0;
8703 i46 = i43 + 36 | 0;
8704 do {
8705 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8706 i43 = i43 + 4 | 0;
8707 i45 = i45 + 4 | 0;
8708 } while ((i43 | 0) < (i46 | 0));
8709 i43 = i47 + 60 | 0;
8710 d67 = +HEAPF32[i43 >> 2];
8711 if (!(d67 < 1.0)) {
8712 i4 = 38;
8713 break;
8714 }
8715 d70 = (d42 - d67) / (1.0 - d67);
8716 i57 = i47 + 36 | 0;
8717 d67 = 1.0 - d70;
8718 i52 = i47 + 44 | 0;
8719 i53 = i47 + 48 | 0;
8720 d71 = +HEAPF32[i57 >> 2] * d67 + d70 * +HEAPF32[i52 >> 2];
8721 d72 = d67 * +HEAPF32[i47 + 40 >> 2] + d70 * +HEAPF32[i53 >> 2];
8722 d69 = +d71;
8723 d68 = +d72;
8724 HEAPF32[i57 >> 2] = d69;
8725 HEAPF32[i57 + 4 >> 2] = d68;
8726 i57 = i47 + 52 | 0;
8727 i51 = i47 + 56 | 0;
8728 d70 = d67 * +HEAPF32[i57 >> 2] + d70 * +HEAPF32[i51 >> 2];
8729 HEAPF32[i57 >> 2] = d70;
8730 HEAPF32[i43 >> 2] = d42;
8731 i57 = i47 + 44 | 0;
8732 HEAPF32[i57 >> 2] = d69;
8733 HEAPF32[i57 + 4 >> 2] = d68;
8734 HEAPF32[i51 >> 2] = d70;
8735 d68 = +Math_sin(+d70);
8736 i57 = i47 + 20 | 0;
8737 HEAPF32[i57 >> 2] = d68;
8738 d70 = +Math_cos(+d70);
8739 i56 = i47 + 24 | 0;
8740 HEAPF32[i56 >> 2] = d70;
8741 i58 = i47 + 12 | 0;
8742 i55 = i47 + 28 | 0;
8743 d69 = +HEAPF32[i55 >> 2];
8744 i54 = i47 + 32 | 0;
8745 d67 = +HEAPF32[i54 >> 2];
8746 d71 = +(d71 - (d70 * d69 - d68 * d67));
8747 d67 = +(d72 - (d68 * d69 + d70 * d67));
8748 i43 = i58;
8749 HEAPF32[i43 >> 2] = d71;
8750 HEAPF32[i43 + 4 >> 2] = d67;
8751 i43 = i48 + 60 | 0;
8752 d67 = +HEAPF32[i43 >> 2];
8753 if (!(d67 < 1.0)) {
8754 i4 = 40;
8755 break;
8756 }
8757 d70 = (d42 - d67) / (1.0 - d67);
8758 i64 = i48 + 36 | 0;
8759 d72 = 1.0 - d70;
8760 i61 = i48 + 44 | 0;
8761 i60 = i48 + 48 | 0;
8762 d71 = +HEAPF32[i64 >> 2] * d72 + d70 * +HEAPF32[i61 >> 2];
8763 d67 = d72 * +HEAPF32[i48 + 40 >> 2] + d70 * +HEAPF32[i60 >> 2];
8764 d69 = +d71;
8765 d68 = +d67;
8766 HEAPF32[i64 >> 2] = d69;
8767 HEAPF32[i64 + 4 >> 2] = d68;
8768 i64 = i48 + 52 | 0;
8769 i59 = i48 + 56 | 0;
8770 d70 = d72 * +HEAPF32[i64 >> 2] + d70 * +HEAPF32[i59 >> 2];
8771 HEAPF32[i64 >> 2] = d70;
8772 HEAPF32[i43 >> 2] = d42;
8773 i64 = i48 + 44 | 0;
8774 HEAPF32[i64 >> 2] = d69;
8775 HEAPF32[i64 + 4 >> 2] = d68;
8776 HEAPF32[i59 >> 2] = d70;
8777 d68 = +Math_sin(+d70);
8778 i64 = i48 + 20 | 0;
8779 HEAPF32[i64 >> 2] = d68;
8780 d70 = +Math_cos(+d70);
8781 i63 = i48 + 24 | 0;
8782 HEAPF32[i63 >> 2] = d70;
8783 i65 = i48 + 12 | 0;
8784 i62 = i48 + 28 | 0;
8785 d69 = +HEAPF32[i62 >> 2];
8786 i66 = i48 + 32 | 0;
8787 d72 = +HEAPF32[i66 >> 2];
8788 d71 = +(d71 - (d70 * d69 - d68 * d72));
8789 d72 = +(d67 - (d68 * d69 + d70 * d72));
8790 i43 = i65;
8791 HEAPF32[i43 >> 2] = d71;
8792 HEAPF32[i43 + 4 >> 2] = d72;
8793 __ZN9b2Contact6UpdateEP17b2ContactListener(i44, HEAP32[i13 >> 2] | 0);
8794 i43 = i44 + 4 | 0;
8795 i45 = HEAP32[i43 >> 2] | 0;
8796 HEAP32[i43 >> 2] = i45 & -33;
8797 i46 = i44 + 128 | 0;
8798 HEAP32[i46 >> 2] = (HEAP32[i46 >> 2] | 0) + 1;
8799 if ((i45 & 6 | 0) != 6) {
8800 HEAP32[i43 >> 2] = i45 & -37;
8801 i43 = i49 + 0 | 0;
8802 i45 = i4 + 0 | 0;
8803 i46 = i43 + 36 | 0;
8804 do {
8805 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8806 i43 = i43 + 4 | 0;
8807 i45 = i45 + 4 | 0;
8808 } while ((i43 | 0) < (i46 | 0));
8809 i43 = i50 + 0 | 0;
8810 i45 = i8 + 0 | 0;
8811 i46 = i43 + 36 | 0;
8812 do {
8813 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8814 i43 = i43 + 4 | 0;
8815 i45 = i45 + 4 | 0;
8816 } while ((i43 | 0) < (i46 | 0));
8817 d69 = +HEAPF32[i51 >> 2];
8818 d71 = +Math_sin(+d69);
8819 HEAPF32[i57 >> 2] = d71;
8820 d69 = +Math_cos(+d69);
8821 HEAPF32[i56 >> 2] = d69;
8822 d72 = +HEAPF32[i55 >> 2];
8823 d70 = +HEAPF32[i54 >> 2];
8824 d68 = +(+HEAPF32[i52 >> 2] - (d69 * d72 - d71 * d70));
8825 d70 = +(+HEAPF32[i53 >> 2] - (d71 * d72 + d69 * d70));
8826 HEAPF32[i58 >> 2] = d68;
8827 HEAPF32[i58 + 4 >> 2] = d70;
8828 d70 = +HEAPF32[i59 >> 2];
8829 d68 = +Math_sin(+d70);
8830 HEAPF32[i64 >> 2] = d68;
8831 d70 = +Math_cos(+d70);
8832 HEAPF32[i63 >> 2] = d70;
8833 d69 = +HEAPF32[i62 >> 2];
8834 d72 = +HEAPF32[i66 >> 2];
8835 d71 = +(+HEAPF32[i61 >> 2] - (d70 * d69 - d68 * d72));
8836 d72 = +(+HEAPF32[i60 >> 2] - (d68 * d69 + d70 * d72));
8837 i66 = i65;
8838 HEAPF32[i66 >> 2] = d71;
8839 HEAPF32[i66 + 4 >> 2] = d72;
8840 continue;
8841 }
8842 i45 = i47 + 4 | 0;
8843 i46 = HEAPU16[i45 >> 1] | 0;
8844 if ((i46 & 2 | 0) == 0) {
8845 HEAP16[i45 >> 1] = i46 | 2;
8846 HEAPF32[i47 + 144 >> 2] = 0.0;
8847 }
8848 i46 = i48 + 4 | 0;
8849 i49 = HEAPU16[i46 >> 1] | 0;
8850 if ((i49 & 2 | 0) == 0) {
8851 HEAP16[i46 >> 1] = i49 | 2;
8852 HEAPF32[i48 + 144 >> 2] = 0.0;
8853 }
8854 HEAP32[i25 >> 2] = 0;
8855 HEAP32[i26 >> 2] = 0;
8856 HEAP32[i27 >> 2] = 0;
8857 if ((HEAP32[i28 >> 2] | 0) <= 0) {
8858 i4 = 48;
8859 break;
8860 }
8861 i49 = i47 + 8 | 0;
8862 HEAP32[i49 >> 2] = 0;
8863 i51 = HEAP32[i25 >> 2] | 0;
8864 HEAP32[(HEAP32[i29 >> 2] | 0) + (i51 << 2) >> 2] = i47;
8865 i51 = i51 + 1 | 0;
8866 HEAP32[i25 >> 2] = i51;
8867 if ((i51 | 0) >= (HEAP32[i28 >> 2] | 0)) {
8868 i4 = 50;
8869 break;
8870 }
8871 i50 = i48 + 8 | 0;
8872 HEAP32[i50 >> 2] = i51;
8873 i51 = HEAP32[i25 >> 2] | 0;
8874 HEAP32[(HEAP32[i29 >> 2] | 0) + (i51 << 2) >> 2] = i48;
8875 HEAP32[i25 >> 2] = i51 + 1;
8876 i51 = HEAP32[i26 >> 2] | 0;
8877 if ((i51 | 0) >= (HEAP32[i24 >> 2] | 0)) {
8878 i4 = 52;
8879 break;
8880 }
8881 HEAP32[i26 >> 2] = i51 + 1;
8882 HEAP32[(HEAP32[i23 >> 2] | 0) + (i51 << 2) >> 2] = i44;
8883 HEAP16[i45 >> 1] = HEAPU16[i45 >> 1] | 1;
8884 HEAP16[i46 >> 1] = HEAPU16[i46 >> 1] | 1;
8885 HEAP32[i43 >> 2] = HEAP32[i43 >> 2] | 1;
8886 HEAP32[i7 >> 2] = i47;
8887 HEAP32[i22 >> 2] = i48;
8888 i44 = 1;
8889 while (1) {
8890 L58 : do {
8891 if ((HEAP32[i47 >> 2] | 0) == 2 ? (i12 = HEAP32[i47 + 112 >> 2] | 0, (i12 | 0) != 0) : 0) {
8892 i47 = i47 + 4 | 0;
8893 i51 = i12;
8894 do {
8895 if ((HEAP32[i25 >> 2] | 0) == (HEAP32[i28 >> 2] | 0)) {
8896 break L58;
8897 }
8898 if ((HEAP32[i26 >> 2] | 0) == (HEAP32[i24 >> 2] | 0)) {
8899 break L58;
8900 }
8901 i52 = HEAP32[i51 + 4 >> 2] | 0;
8902 i53 = i52 + 4 | 0;
8903 do {
8904 if ((HEAP32[i53 >> 2] & 1 | 0) == 0) {
8905 i48 = HEAP32[i51 >> 2] | 0;
8906 if (((HEAP32[i48 >> 2] | 0) == 2 ? (HEAP16[i47 >> 1] & 8) == 0 : 0) ? (HEAP16[i48 + 4 >> 1] & 8) == 0 : 0) {
8907 break;
8908 }
8909 if ((HEAP8[(HEAP32[i52 + 48 >> 2] | 0) + 38 | 0] | 0) == 0 ? (HEAP8[(HEAP32[i52 + 52 >> 2] | 0) + 38 | 0] | 0) == 0 : 0) {
8910 i54 = i48 + 28 | 0;
8911 i43 = i14 + 0 | 0;
8912 i45 = i54 + 0 | 0;
8913 i46 = i43 + 36 | 0;
8914 do {
8915 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8916 i43 = i43 + 4 | 0;
8917 i45 = i45 + 4 | 0;
8918 } while ((i43 | 0) < (i46 | 0));
8919 i43 = i48 + 4 | 0;
8920 if ((HEAP16[i43 >> 1] & 1) == 0) {
8921 i45 = i48 + 60 | 0;
8922 d67 = +HEAPF32[i45 >> 2];
8923 if (!(d67 < 1.0)) {
8924 i4 = 67;
8925 break L11;
8926 }
8927 d70 = (d42 - d67) / (1.0 - d67);
8928 i65 = i48 + 36 | 0;
8929 d72 = 1.0 - d70;
8930 d71 = +HEAPF32[i65 >> 2] * d72 + d70 * +HEAPF32[i48 + 44 >> 2];
8931 d67 = d72 * +HEAPF32[i48 + 40 >> 2] + d70 * +HEAPF32[i48 + 48 >> 2];
8932 d69 = +d71;
8933 d68 = +d67;
8934 HEAPF32[i65 >> 2] = d69;
8935 HEAPF32[i65 + 4 >> 2] = d68;
8936 i65 = i48 + 52 | 0;
8937 i66 = i48 + 56 | 0;
8938 d70 = d72 * +HEAPF32[i65 >> 2] + d70 * +HEAPF32[i66 >> 2];
8939 HEAPF32[i65 >> 2] = d70;
8940 HEAPF32[i45 >> 2] = d42;
8941 i65 = i48 + 44 | 0;
8942 HEAPF32[i65 >> 2] = d69;
8943 HEAPF32[i65 + 4 >> 2] = d68;
8944 HEAPF32[i66 >> 2] = d70;
8945 d68 = +Math_sin(+d70);
8946 HEAPF32[i48 + 20 >> 2] = d68;
8947 d70 = +Math_cos(+d70);
8948 HEAPF32[i48 + 24 >> 2] = d70;
8949 d69 = +HEAPF32[i48 + 28 >> 2];
8950 d72 = +HEAPF32[i48 + 32 >> 2];
8951 d71 = +(d71 - (d70 * d69 - d68 * d72));
8952 d72 = +(d67 - (d68 * d69 + d70 * d72));
8953 i66 = i48 + 12 | 0;
8954 HEAPF32[i66 >> 2] = d71;
8955 HEAPF32[i66 + 4 >> 2] = d72;
8956 }
8957 __ZN9b2Contact6UpdateEP17b2ContactListener(i52, HEAP32[i13 >> 2] | 0);
8958 i45 = HEAP32[i53 >> 2] | 0;
8959 if ((i45 & 4 | 0) == 0) {
8960 i43 = i54 + 0 | 0;
8961 i45 = i14 + 0 | 0;
8962 i46 = i43 + 36 | 0;
8963 do {
8964 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8965 i43 = i43 + 4 | 0;
8966 i45 = i45 + 4 | 0;
8967 } while ((i43 | 0) < (i46 | 0));
8968 d70 = +HEAPF32[i48 + 56 >> 2];
8969 d68 = +Math_sin(+d70);
8970 HEAPF32[i48 + 20 >> 2] = d68;
8971 d70 = +Math_cos(+d70);
8972 HEAPF32[i48 + 24 >> 2] = d70;
8973 d69 = +HEAPF32[i48 + 28 >> 2];
8974 d72 = +HEAPF32[i48 + 32 >> 2];
8975 d71 = +(+HEAPF32[i48 + 44 >> 2] - (d70 * d69 - d68 * d72));
8976 d72 = +(+HEAPF32[i48 + 48 >> 2] - (d68 * d69 + d70 * d72));
8977 i66 = i48 + 12 | 0;
8978 HEAPF32[i66 >> 2] = d71;
8979 HEAPF32[i66 + 4 >> 2] = d72;
8980 break;
8981 }
8982 if ((i45 & 2 | 0) == 0) {
8983 i43 = i54 + 0 | 0;
8984 i45 = i14 + 0 | 0;
8985 i46 = i43 + 36 | 0;
8986 do {
8987 HEAP32[i43 >> 2] = HEAP32[i45 >> 2];
8988 i43 = i43 + 4 | 0;
8989 i45 = i45 + 4 | 0;
8990 } while ((i43 | 0) < (i46 | 0));
8991 d70 = +HEAPF32[i48 + 56 >> 2];
8992 d68 = +Math_sin(+d70);
8993 HEAPF32[i48 + 20 >> 2] = d68;
8994 d70 = +Math_cos(+d70);
8995 HEAPF32[i48 + 24 >> 2] = d70;
8996 d69 = +HEAPF32[i48 + 28 >> 2];
8997 d72 = +HEAPF32[i48 + 32 >> 2];
8998 d71 = +(+HEAPF32[i48 + 44 >> 2] - (d70 * d69 - d68 * d72));
8999 d72 = +(+HEAPF32[i48 + 48 >> 2] - (d68 * d69 + d70 * d72));
9000 i66 = i48 + 12 | 0;
9001 HEAPF32[i66 >> 2] = d71;
9002 HEAPF32[i66 + 4 >> 2] = d72;
9003 break;
9004 }
9005 HEAP32[i53 >> 2] = i45 | 1;
9006 i45 = HEAP32[i26 >> 2] | 0;
9007 if ((i45 | 0) >= (HEAP32[i24 >> 2] | 0)) {
9008 i4 = 74;
9009 break L11;
9010 }
9011 HEAP32[i26 >> 2] = i45 + 1;
9012 HEAP32[(HEAP32[i23 >> 2] | 0) + (i45 << 2) >> 2] = i52;
9013 i45 = HEAPU16[i43 >> 1] | 0;
9014 if ((i45 & 1 | 0) == 0) {
9015 HEAP16[i43 >> 1] = i45 | 1;
9016 if ((HEAP32[i48 >> 2] | 0) != 0 ? (i45 & 2 | 0) == 0 : 0) {
9017 HEAP16[i43 >> 1] = i45 | 3;
9018 HEAPF32[i48 + 144 >> 2] = 0.0;
9019 }
9020 i43 = HEAP32[i25 >> 2] | 0;
9021 if ((i43 | 0) >= (HEAP32[i28 >> 2] | 0)) {
9022 i4 = 80;
9023 break L11;
9024 }
9025 HEAP32[i48 + 8 >> 2] = i43;
9026 i66 = HEAP32[i25 >> 2] | 0;
9027 HEAP32[(HEAP32[i29 >> 2] | 0) + (i66 << 2) >> 2] = i48;
9028 HEAP32[i25 >> 2] = i66 + 1;
9029 }
9030 }
9031 }
9032 } while (0);
9033 i51 = HEAP32[i51 + 12 >> 2] | 0;
9034 } while ((i51 | 0) != 0);
9035 }
9036 } while (0);
9037 if ((i44 | 0) >= 2) {
9038 break;
9039 }
9040 i47 = HEAP32[i7 + (i44 << 2) >> 2] | 0;
9041 i44 = i44 + 1 | 0;
9042 }
9043 d72 = (1.0 - d42) * +HEAPF32[i11 >> 2];
9044 HEAPF32[i9 >> 2] = d72;
9045 HEAPF32[i21 >> 2] = 1.0 / d72;
9046 HEAPF32[i20 >> 2] = 1.0;
9047 HEAP32[i19 >> 2] = 20;
9048 HEAP32[i17 >> 2] = HEAP32[i18 >> 2];
9049 HEAP8[i16] = 0;
9050 __ZN8b2Island8SolveTOIERK10b2TimeStepii(i3, i9, HEAP32[i49 >> 2] | 0, HEAP32[i50 >> 2] | 0);
9051 i44 = HEAP32[i25 >> 2] | 0;
9052 if ((i44 | 0) > 0) {
9053 i43 = 0;
9054 do {
9055 i45 = HEAP32[(HEAP32[i29 >> 2] | 0) + (i43 << 2) >> 2] | 0;
9056 i66 = i45 + 4 | 0;
9057 HEAP16[i66 >> 1] = HEAP16[i66 >> 1] & 65534;
9058 if ((HEAP32[i45 >> 2] | 0) == 2) {
9059 __ZN6b2Body19SynchronizeFixturesEv(i45);
9060 i44 = HEAP32[i45 + 112 >> 2] | 0;
9061 if ((i44 | 0) != 0) {
9062 do {
9063 i66 = (HEAP32[i44 + 4 >> 2] | 0) + 4 | 0;
9064 HEAP32[i66 >> 2] = HEAP32[i66 >> 2] & -34;
9065 i44 = HEAP32[i44 + 12 >> 2] | 0;
9066 } while ((i44 | 0) != 0);
9067 }
9068 i44 = HEAP32[i25 >> 2] | 0;
9069 }
9070 i43 = i43 + 1 | 0;
9071 } while ((i43 | 0) < (i44 | 0));
9072 }
9073 __ZN16b2ContactManager15FindNewContactsEv(i10);
9074 if ((HEAP8[i39] | 0) != 0) {
9075 i4 = 92;
9076 break;
9077 }
9078 }
9079 if ((i4 | 0) == 16) {
9080 ___assert_fail(2288, 2184, 641, 2344);
9081 } else if ((i4 | 0) == 21) {
9082 ___assert_fail(2360, 2376, 723, 2400);
9083 } else if ((i4 | 0) == 25) {
9084 ___assert_fail(2360, 2376, 723, 2400);
9085 } else if ((i4 | 0) == 28) {
9086 ___assert_fail(2360, 2184, 676, 2344);
9087 } else if ((i4 | 0) == 36) {
9088 HEAP8[i2] = 1;
9089 __ZN8b2IslandD2Ev(i3);
9090 STACKTOP = i1;
9091 return;
9092 } else if ((i4 | 0) == 38) {
9093 ___assert_fail(2360, 2376, 723, 2400);
9094 } else if ((i4 | 0) == 40) {
9095 ___assert_fail(2360, 2376, 723, 2400);
9096 } else if ((i4 | 0) == 48) {
9097 ___assert_fail(2520, 2440, 54, 2472);
9098 } else if ((i4 | 0) == 50) {
9099 ___assert_fail(2520, 2440, 54, 2472);
9100 } else if ((i4 | 0) == 52) {
9101 ___assert_fail(2480, 2440, 62, 2472);
9102 } else if ((i4 | 0) == 67) {
9103 ___assert_fail(2360, 2376, 723, 2400);
9104 } else if ((i4 | 0) == 74) {
9105 ___assert_fail(2480, 2440, 62, 2472);
9106 } else if ((i4 | 0) == 80) {
9107 ___assert_fail(2520, 2440, 54, 2472);
9108 } else if ((i4 | 0) == 92) {
9109 HEAP8[i2] = 0;
9110 __ZN8b2IslandD2Ev(i3);
9111 STACKTOP = i1;
9112 return;
9113 }
9114}
9115function __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i8, i1) {
9116 i5 = i5 | 0;
9117 i8 = i8 | 0;
9118 i1 = i1 | 0;
9119 var i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0;
9120 i3 = STACKTOP;
9121 STACKTOP = STACKTOP + 16 | 0;
9122 i2 = i3;
9123 L1 : while (1) {
9124 i7 = i8;
9125 i4 = i8 + -12 | 0;
9126 L3 : while (1) {
9127 i9 = i5;
9128 i11 = i7 - i9 | 0;
9129 switch ((i11 | 0) / 12 | 0 | 0) {
9130 case 4:
9131 {
9132 i6 = 14;
9133 break L1;
9134 }
9135 case 2:
9136 {
9137 i6 = 4;
9138 break L1;
9139 }
9140 case 3:
9141 {
9142 i6 = 6;
9143 break L1;
9144 }
9145 case 5:
9146 {
9147 i6 = 15;
9148 break L1;
9149 }
9150 case 1:
9151 case 0:
9152 {
9153 i6 = 67;
9154 break L1;
9155 }
9156 default:
9157 {}
9158 }
9159 if ((i11 | 0) < 372) {
9160 i6 = 21;
9161 break L1;
9162 }
9163 i12 = (i11 | 0) / 24 | 0;
9164 i10 = i5 + (i12 * 12 | 0) | 0;
9165 do {
9166 if ((i11 | 0) > 11988) {
9167 i14 = (i11 | 0) / 48 | 0;
9168 i11 = i5 + (i14 * 12 | 0) | 0;
9169 i14 = i5 + ((i14 + i12 | 0) * 12 | 0) | 0;
9170 i12 = __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i11, i10, i14, i1) | 0;
9171 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i14) | 0) {
9172 HEAP32[i2 + 0 >> 2] = HEAP32[i14 + 0 >> 2];
9173 HEAP32[i2 + 4 >> 2] = HEAP32[i14 + 4 >> 2];
9174 HEAP32[i2 + 8 >> 2] = HEAP32[i14 + 8 >> 2];
9175 HEAP32[i14 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9176 HEAP32[i14 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9177 HEAP32[i14 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9178 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9179 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9180 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9181 i13 = i12 + 1 | 0;
9182 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i14, i10) | 0) {
9183 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9184 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9185 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9186 HEAP32[i10 + 0 >> 2] = HEAP32[i14 + 0 >> 2];
9187 HEAP32[i10 + 4 >> 2] = HEAP32[i14 + 4 >> 2];
9188 HEAP32[i10 + 8 >> 2] = HEAP32[i14 + 8 >> 2];
9189 HEAP32[i14 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9190 HEAP32[i14 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9191 HEAP32[i14 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9192 i13 = i12 + 2 | 0;
9193 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i11) | 0) {
9194 HEAP32[i2 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
9195 HEAP32[i2 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
9196 HEAP32[i2 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
9197 HEAP32[i11 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9198 HEAP32[i11 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9199 HEAP32[i11 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9200 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9201 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9202 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9203 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i11, i5) | 0) {
9204 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9205 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9206 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9207 HEAP32[i5 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
9208 HEAP32[i5 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
9209 HEAP32[i5 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
9210 HEAP32[i11 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9211 HEAP32[i11 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9212 HEAP32[i11 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9213 i12 = i12 + 4 | 0;
9214 } else {
9215 i12 = i12 + 3 | 0;
9216 }
9217 } else {
9218 i12 = i13;
9219 }
9220 } else {
9221 i12 = i13;
9222 }
9223 }
9224 } else {
9225 i15 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i5) | 0;
9226 i11 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i10) | 0;
9227 if (!i15) {
9228 if (!i11) {
9229 i12 = 0;
9230 break;
9231 }
9232 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9233 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9234 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9235 HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9236 HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9237 HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9238 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9239 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9240 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9241 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i5) | 0)) {
9242 i12 = 1;
9243 break;
9244 }
9245 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9246 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9247 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9248 HEAP32[i5 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9249 HEAP32[i5 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9250 HEAP32[i5 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9251 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9252 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9253 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9254 i12 = 2;
9255 break;
9256 }
9257 if (i11) {
9258 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9259 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9260 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9261 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9262 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9263 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9264 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9265 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9266 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9267 i12 = 1;
9268 break;
9269 }
9270 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9271 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9272 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9273 HEAP32[i5 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9274 HEAP32[i5 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9275 HEAP32[i5 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9276 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9277 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9278 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9279 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i10) | 0) {
9280 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9281 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9282 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9283 HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9284 HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9285 HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9286 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9287 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9288 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9289 i12 = 2;
9290 } else {
9291 i12 = 1;
9292 }
9293 }
9294 } while (0);
9295 do {
9296 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) {
9297 i13 = i4;
9298 } else {
9299 i13 = i4;
9300 while (1) {
9301 i13 = i13 + -12 | 0;
9302 if ((i5 | 0) == (i13 | 0)) {
9303 break;
9304 }
9305 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i13, i10) | 0) {
9306 i6 = 50;
9307 break;
9308 }
9309 }
9310 if ((i6 | 0) == 50) {
9311 i6 = 0;
9312 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9313 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9314 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9315 HEAP32[i5 + 0 >> 2] = HEAP32[i13 + 0 >> 2];
9316 HEAP32[i5 + 4 >> 2] = HEAP32[i13 + 4 >> 2];
9317 HEAP32[i5 + 8 >> 2] = HEAP32[i13 + 8 >> 2];
9318 HEAP32[i13 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9319 HEAP32[i13 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9320 HEAP32[i13 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9321 i12 = i12 + 1 | 0;
9322 break;
9323 }
9324 i10 = i5 + 12 | 0;
9325 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i4) | 0)) {
9326 if ((i10 | 0) == (i4 | 0)) {
9327 i6 = 67;
9328 break L1;
9329 }
9330 while (1) {
9331 i9 = i10 + 12 | 0;
9332 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) {
9333 break;
9334 }
9335 if ((i9 | 0) == (i4 | 0)) {
9336 i6 = 67;
9337 break L1;
9338 } else {
9339 i10 = i9;
9340 }
9341 }
9342 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9343 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9344 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9345 HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9346 HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9347 HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9348 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9349 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9350 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9351 i10 = i9;
9352 }
9353 if ((i10 | 0) == (i4 | 0)) {
9354 i6 = 67;
9355 break L1;
9356 } else {
9357 i9 = i4;
9358 }
9359 while (1) {
9360 while (1) {
9361 i11 = i10 + 12 | 0;
9362 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) {
9363 break;
9364 } else {
9365 i10 = i11;
9366 }
9367 }
9368 do {
9369 i9 = i9 + -12 | 0;
9370 } while (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i9) | 0);
9371 if (!(i10 >>> 0 < i9 >>> 0)) {
9372 i5 = i10;
9373 continue L3;
9374 }
9375 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9376 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9377 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9378 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
9379 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
9380 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
9381 HEAP32[i9 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9382 HEAP32[i9 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9383 HEAP32[i9 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9384 i10 = i11;
9385 }
9386 }
9387 } while (0);
9388 i11 = i5 + 12 | 0;
9389 L47 : do {
9390 if (i11 >>> 0 < i13 >>> 0) {
9391 while (1) {
9392 i15 = i11;
9393 while (1) {
9394 i11 = i15 + 12 | 0;
9395 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i15, i10) | 0) {
9396 i15 = i11;
9397 } else {
9398 i14 = i13;
9399 break;
9400 }
9401 }
9402 do {
9403 i14 = i14 + -12 | 0;
9404 } while (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i14, i10) | 0));
9405 if (i15 >>> 0 > i14 >>> 0) {
9406 i11 = i15;
9407 break L47;
9408 }
9409 HEAP32[i2 + 0 >> 2] = HEAP32[i15 + 0 >> 2];
9410 HEAP32[i2 + 4 >> 2] = HEAP32[i15 + 4 >> 2];
9411 HEAP32[i2 + 8 >> 2] = HEAP32[i15 + 8 >> 2];
9412 HEAP32[i15 + 0 >> 2] = HEAP32[i14 + 0 >> 2];
9413 HEAP32[i15 + 4 >> 2] = HEAP32[i14 + 4 >> 2];
9414 HEAP32[i15 + 8 >> 2] = HEAP32[i14 + 8 >> 2];
9415 HEAP32[i14 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9416 HEAP32[i14 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9417 HEAP32[i14 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9418 i13 = i14;
9419 i10 = (i10 | 0) == (i15 | 0) ? i14 : i10;
9420 i12 = i12 + 1 | 0;
9421 }
9422 }
9423 } while (0);
9424 if ((i11 | 0) != (i10 | 0) ? FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i11) | 0 : 0) {
9425 HEAP32[i2 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
9426 HEAP32[i2 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
9427 HEAP32[i2 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
9428 HEAP32[i11 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
9429 HEAP32[i11 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
9430 HEAP32[i11 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
9431 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9432 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9433 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9434 i12 = i12 + 1 | 0;
9435 }
9436 if ((i12 | 0) == 0) {
9437 i12 = __ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_(i5, i11, i1) | 0;
9438 i10 = i11 + 12 | 0;
9439 if (__ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_(i10, i8, i1) | 0) {
9440 i6 = 62;
9441 break;
9442 }
9443 if (i12) {
9444 i5 = i10;
9445 continue;
9446 }
9447 }
9448 i15 = i11;
9449 if ((i15 - i9 | 0) >= (i7 - i15 | 0)) {
9450 i6 = 66;
9451 break;
9452 }
9453 __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i11, i1);
9454 i5 = i11 + 12 | 0;
9455 }
9456 if ((i6 | 0) == 62) {
9457 i6 = 0;
9458 if (i12) {
9459 i6 = 67;
9460 break;
9461 } else {
9462 i8 = i11;
9463 continue;
9464 }
9465 } else if ((i6 | 0) == 66) {
9466 i6 = 0;
9467 __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i11 + 12 | 0, i8, i1);
9468 i8 = i11;
9469 continue;
9470 }
9471 }
9472 if ((i6 | 0) == 4) {
9473 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i5) | 0)) {
9474 STACKTOP = i3;
9475 return;
9476 }
9477 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9478 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9479 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9480 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9481 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9482 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9483 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9484 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9485 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9486 STACKTOP = i3;
9487 return;
9488 } else if ((i6 | 0) == 6) {
9489 i6 = i5 + 12 | 0;
9490 i15 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0;
9491 i7 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i6) | 0;
9492 if (!i15) {
9493 if (!i7) {
9494 STACKTOP = i3;
9495 return;
9496 }
9497 HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9498 HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9499 HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9500 HEAP32[i6 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9501 HEAP32[i6 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9502 HEAP32[i6 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9503 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9504 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9505 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9506 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0)) {
9507 STACKTOP = i3;
9508 return;
9509 }
9510 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9511 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9512 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9513 HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9514 HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9515 HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9516 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9517 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9518 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9519 STACKTOP = i3;
9520 return;
9521 }
9522 if (i7) {
9523 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9524 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9525 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9526 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9527 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9528 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9529 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9530 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9531 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9532 STACKTOP = i3;
9533 return;
9534 }
9535 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9536 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9537 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9538 HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9539 HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9540 HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9541 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9542 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9543 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9544 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i6) | 0)) {
9545 STACKTOP = i3;
9546 return;
9547 }
9548 HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9549 HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9550 HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9551 HEAP32[i6 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9552 HEAP32[i6 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9553 HEAP32[i6 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9554 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9555 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9556 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9557 STACKTOP = i3;
9558 return;
9559 } else if ((i6 | 0) == 14) {
9560 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i5 + 12 | 0, i5 + 24 | 0, i4, i1) | 0;
9561 STACKTOP = i3;
9562 return;
9563 } else if ((i6 | 0) == 15) {
9564 i6 = i5 + 12 | 0;
9565 i7 = i5 + 24 | 0;
9566 i8 = i5 + 36 | 0;
9567 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i6, i7, i8, i1) | 0;
9568 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i8) | 0)) {
9569 STACKTOP = i3;
9570 return;
9571 }
9572 HEAP32[i2 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
9573 HEAP32[i2 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
9574 HEAP32[i2 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
9575 HEAP32[i8 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
9576 HEAP32[i8 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
9577 HEAP32[i8 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
9578 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9579 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9580 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9581 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i8, i7) | 0)) {
9582 STACKTOP = i3;
9583 return;
9584 }
9585 HEAP32[i2 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
9586 HEAP32[i2 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
9587 HEAP32[i2 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
9588 HEAP32[i7 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
9589 HEAP32[i7 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
9590 HEAP32[i7 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
9591 HEAP32[i8 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9592 HEAP32[i8 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9593 HEAP32[i8 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9594 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0)) {
9595 STACKTOP = i3;
9596 return;
9597 }
9598 HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9599 HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9600 HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9601 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
9602 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
9603 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
9604 HEAP32[i7 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9605 HEAP32[i7 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9606 HEAP32[i7 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9607 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0)) {
9608 STACKTOP = i3;
9609 return;
9610 }
9611 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
9612 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
9613 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
9614 HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
9615 HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
9616 HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
9617 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
9618 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
9619 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
9620 STACKTOP = i3;
9621 return;
9622 } else if ((i6 | 0) == 21) {
9623 __ZNSt3__118__insertion_sort_3IRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i8, i1);
9624 STACKTOP = i3;
9625 return;
9626 } else if ((i6 | 0) == 67) {
9627 STACKTOP = i3;
9628 return;
9629 }
9630}
9631function _free(i7) {
9632 i7 = i7 | 0;
9633 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0;
9634 i1 = STACKTOP;
9635 if ((i7 | 0) == 0) {
9636 STACKTOP = i1;
9637 return;
9638 }
9639 i15 = i7 + -8 | 0;
9640 i16 = HEAP32[7176 >> 2] | 0;
9641 if (i15 >>> 0 < i16 >>> 0) {
9642 _abort();
9643 }
9644 i13 = HEAP32[i7 + -4 >> 2] | 0;
9645 i12 = i13 & 3;
9646 if ((i12 | 0) == 1) {
9647 _abort();
9648 }
9649 i8 = i13 & -8;
9650 i6 = i7 + (i8 + -8) | 0;
9651 do {
9652 if ((i13 & 1 | 0) == 0) {
9653 i19 = HEAP32[i15 >> 2] | 0;
9654 if ((i12 | 0) == 0) {
9655 STACKTOP = i1;
9656 return;
9657 }
9658 i15 = -8 - i19 | 0;
9659 i13 = i7 + i15 | 0;
9660 i12 = i19 + i8 | 0;
9661 if (i13 >>> 0 < i16 >>> 0) {
9662 _abort();
9663 }
9664 if ((i13 | 0) == (HEAP32[7180 >> 2] | 0)) {
9665 i2 = i7 + (i8 + -4) | 0;
9666 if ((HEAP32[i2 >> 2] & 3 | 0) != 3) {
9667 i2 = i13;
9668 i11 = i12;
9669 break;
9670 }
9671 HEAP32[7168 >> 2] = i12;
9672 HEAP32[i2 >> 2] = HEAP32[i2 >> 2] & -2;
9673 HEAP32[i7 + (i15 + 4) >> 2] = i12 | 1;
9674 HEAP32[i6 >> 2] = i12;
9675 STACKTOP = i1;
9676 return;
9677 }
9678 i18 = i19 >>> 3;
9679 if (i19 >>> 0 < 256) {
9680 i2 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
9681 i11 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
9682 i14 = 7200 + (i18 << 1 << 2) | 0;
9683 if ((i2 | 0) != (i14 | 0)) {
9684 if (i2 >>> 0 < i16 >>> 0) {
9685 _abort();
9686 }
9687 if ((HEAP32[i2 + 12 >> 2] | 0) != (i13 | 0)) {
9688 _abort();
9689 }
9690 }
9691 if ((i11 | 0) == (i2 | 0)) {
9692 HEAP32[1790] = HEAP32[1790] & ~(1 << i18);
9693 i2 = i13;
9694 i11 = i12;
9695 break;
9696 }
9697 if ((i11 | 0) != (i14 | 0)) {
9698 if (i11 >>> 0 < i16 >>> 0) {
9699 _abort();
9700 }
9701 i14 = i11 + 8 | 0;
9702 if ((HEAP32[i14 >> 2] | 0) == (i13 | 0)) {
9703 i17 = i14;
9704 } else {
9705 _abort();
9706 }
9707 } else {
9708 i17 = i11 + 8 | 0;
9709 }
9710 HEAP32[i2 + 12 >> 2] = i11;
9711 HEAP32[i17 >> 2] = i2;
9712 i2 = i13;
9713 i11 = i12;
9714 break;
9715 }
9716 i17 = HEAP32[i7 + (i15 + 24) >> 2] | 0;
9717 i18 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
9718 do {
9719 if ((i18 | 0) == (i13 | 0)) {
9720 i19 = i7 + (i15 + 20) | 0;
9721 i18 = HEAP32[i19 >> 2] | 0;
9722 if ((i18 | 0) == 0) {
9723 i19 = i7 + (i15 + 16) | 0;
9724 i18 = HEAP32[i19 >> 2] | 0;
9725 if ((i18 | 0) == 0) {
9726 i14 = 0;
9727 break;
9728 }
9729 }
9730 while (1) {
9731 i21 = i18 + 20 | 0;
9732 i20 = HEAP32[i21 >> 2] | 0;
9733 if ((i20 | 0) != 0) {
9734 i18 = i20;
9735 i19 = i21;
9736 continue;
9737 }
9738 i20 = i18 + 16 | 0;
9739 i21 = HEAP32[i20 >> 2] | 0;
9740 if ((i21 | 0) == 0) {
9741 break;
9742 } else {
9743 i18 = i21;
9744 i19 = i20;
9745 }
9746 }
9747 if (i19 >>> 0 < i16 >>> 0) {
9748 _abort();
9749 } else {
9750 HEAP32[i19 >> 2] = 0;
9751 i14 = i18;
9752 break;
9753 }
9754 } else {
9755 i19 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
9756 if (i19 >>> 0 < i16 >>> 0) {
9757 _abort();
9758 }
9759 i16 = i19 + 12 | 0;
9760 if ((HEAP32[i16 >> 2] | 0) != (i13 | 0)) {
9761 _abort();
9762 }
9763 i20 = i18 + 8 | 0;
9764 if ((HEAP32[i20 >> 2] | 0) == (i13 | 0)) {
9765 HEAP32[i16 >> 2] = i18;
9766 HEAP32[i20 >> 2] = i19;
9767 i14 = i18;
9768 break;
9769 } else {
9770 _abort();
9771 }
9772 }
9773 } while (0);
9774 if ((i17 | 0) != 0) {
9775 i18 = HEAP32[i7 + (i15 + 28) >> 2] | 0;
9776 i16 = 7464 + (i18 << 2) | 0;
9777 if ((i13 | 0) == (HEAP32[i16 >> 2] | 0)) {
9778 HEAP32[i16 >> 2] = i14;
9779 if ((i14 | 0) == 0) {
9780 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i18);
9781 i2 = i13;
9782 i11 = i12;
9783 break;
9784 }
9785 } else {
9786 if (i17 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9787 _abort();
9788 }
9789 i16 = i17 + 16 | 0;
9790 if ((HEAP32[i16 >> 2] | 0) == (i13 | 0)) {
9791 HEAP32[i16 >> 2] = i14;
9792 } else {
9793 HEAP32[i17 + 20 >> 2] = i14;
9794 }
9795 if ((i14 | 0) == 0) {
9796 i2 = i13;
9797 i11 = i12;
9798 break;
9799 }
9800 }
9801 if (i14 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9802 _abort();
9803 }
9804 HEAP32[i14 + 24 >> 2] = i17;
9805 i16 = HEAP32[i7 + (i15 + 16) >> 2] | 0;
9806 do {
9807 if ((i16 | 0) != 0) {
9808 if (i16 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9809 _abort();
9810 } else {
9811 HEAP32[i14 + 16 >> 2] = i16;
9812 HEAP32[i16 + 24 >> 2] = i14;
9813 break;
9814 }
9815 }
9816 } while (0);
9817 i15 = HEAP32[i7 + (i15 + 20) >> 2] | 0;
9818 if ((i15 | 0) != 0) {
9819 if (i15 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9820 _abort();
9821 } else {
9822 HEAP32[i14 + 20 >> 2] = i15;
9823 HEAP32[i15 + 24 >> 2] = i14;
9824 i2 = i13;
9825 i11 = i12;
9826 break;
9827 }
9828 } else {
9829 i2 = i13;
9830 i11 = i12;
9831 }
9832 } else {
9833 i2 = i13;
9834 i11 = i12;
9835 }
9836 } else {
9837 i2 = i15;
9838 i11 = i8;
9839 }
9840 } while (0);
9841 if (!(i2 >>> 0 < i6 >>> 0)) {
9842 _abort();
9843 }
9844 i12 = i7 + (i8 + -4) | 0;
9845 i13 = HEAP32[i12 >> 2] | 0;
9846 if ((i13 & 1 | 0) == 0) {
9847 _abort();
9848 }
9849 if ((i13 & 2 | 0) == 0) {
9850 if ((i6 | 0) == (HEAP32[7184 >> 2] | 0)) {
9851 i21 = (HEAP32[7172 >> 2] | 0) + i11 | 0;
9852 HEAP32[7172 >> 2] = i21;
9853 HEAP32[7184 >> 2] = i2;
9854 HEAP32[i2 + 4 >> 2] = i21 | 1;
9855 if ((i2 | 0) != (HEAP32[7180 >> 2] | 0)) {
9856 STACKTOP = i1;
9857 return;
9858 }
9859 HEAP32[7180 >> 2] = 0;
9860 HEAP32[7168 >> 2] = 0;
9861 STACKTOP = i1;
9862 return;
9863 }
9864 if ((i6 | 0) == (HEAP32[7180 >> 2] | 0)) {
9865 i21 = (HEAP32[7168 >> 2] | 0) + i11 | 0;
9866 HEAP32[7168 >> 2] = i21;
9867 HEAP32[7180 >> 2] = i2;
9868 HEAP32[i2 + 4 >> 2] = i21 | 1;
9869 HEAP32[i2 + i21 >> 2] = i21;
9870 STACKTOP = i1;
9871 return;
9872 }
9873 i11 = (i13 & -8) + i11 | 0;
9874 i12 = i13 >>> 3;
9875 do {
9876 if (!(i13 >>> 0 < 256)) {
9877 i10 = HEAP32[i7 + (i8 + 16) >> 2] | 0;
9878 i15 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
9879 do {
9880 if ((i15 | 0) == (i6 | 0)) {
9881 i13 = i7 + (i8 + 12) | 0;
9882 i12 = HEAP32[i13 >> 2] | 0;
9883 if ((i12 | 0) == 0) {
9884 i13 = i7 + (i8 + 8) | 0;
9885 i12 = HEAP32[i13 >> 2] | 0;
9886 if ((i12 | 0) == 0) {
9887 i9 = 0;
9888 break;
9889 }
9890 }
9891 while (1) {
9892 i14 = i12 + 20 | 0;
9893 i15 = HEAP32[i14 >> 2] | 0;
9894 if ((i15 | 0) != 0) {
9895 i12 = i15;
9896 i13 = i14;
9897 continue;
9898 }
9899 i14 = i12 + 16 | 0;
9900 i15 = HEAP32[i14 >> 2] | 0;
9901 if ((i15 | 0) == 0) {
9902 break;
9903 } else {
9904 i12 = i15;
9905 i13 = i14;
9906 }
9907 }
9908 if (i13 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9909 _abort();
9910 } else {
9911 HEAP32[i13 >> 2] = 0;
9912 i9 = i12;
9913 break;
9914 }
9915 } else {
9916 i13 = HEAP32[i7 + i8 >> 2] | 0;
9917 if (i13 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9918 _abort();
9919 }
9920 i14 = i13 + 12 | 0;
9921 if ((HEAP32[i14 >> 2] | 0) != (i6 | 0)) {
9922 _abort();
9923 }
9924 i12 = i15 + 8 | 0;
9925 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
9926 HEAP32[i14 >> 2] = i15;
9927 HEAP32[i12 >> 2] = i13;
9928 i9 = i15;
9929 break;
9930 } else {
9931 _abort();
9932 }
9933 }
9934 } while (0);
9935 if ((i10 | 0) != 0) {
9936 i12 = HEAP32[i7 + (i8 + 20) >> 2] | 0;
9937 i13 = 7464 + (i12 << 2) | 0;
9938 if ((i6 | 0) == (HEAP32[i13 >> 2] | 0)) {
9939 HEAP32[i13 >> 2] = i9;
9940 if ((i9 | 0) == 0) {
9941 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i12);
9942 break;
9943 }
9944 } else {
9945 if (i10 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9946 _abort();
9947 }
9948 i12 = i10 + 16 | 0;
9949 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
9950 HEAP32[i12 >> 2] = i9;
9951 } else {
9952 HEAP32[i10 + 20 >> 2] = i9;
9953 }
9954 if ((i9 | 0) == 0) {
9955 break;
9956 }
9957 }
9958 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9959 _abort();
9960 }
9961 HEAP32[i9 + 24 >> 2] = i10;
9962 i6 = HEAP32[i7 + (i8 + 8) >> 2] | 0;
9963 do {
9964 if ((i6 | 0) != 0) {
9965 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9966 _abort();
9967 } else {
9968 HEAP32[i9 + 16 >> 2] = i6;
9969 HEAP32[i6 + 24 >> 2] = i9;
9970 break;
9971 }
9972 }
9973 } while (0);
9974 i6 = HEAP32[i7 + (i8 + 12) >> 2] | 0;
9975 if ((i6 | 0) != 0) {
9976 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9977 _abort();
9978 } else {
9979 HEAP32[i9 + 20 >> 2] = i6;
9980 HEAP32[i6 + 24 >> 2] = i9;
9981 break;
9982 }
9983 }
9984 }
9985 } else {
9986 i9 = HEAP32[i7 + i8 >> 2] | 0;
9987 i7 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
9988 i8 = 7200 + (i12 << 1 << 2) | 0;
9989 if ((i9 | 0) != (i8 | 0)) {
9990 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
9991 _abort();
9992 }
9993 if ((HEAP32[i9 + 12 >> 2] | 0) != (i6 | 0)) {
9994 _abort();
9995 }
9996 }
9997 if ((i7 | 0) == (i9 | 0)) {
9998 HEAP32[1790] = HEAP32[1790] & ~(1 << i12);
9999 break;
10000 }
10001 if ((i7 | 0) != (i8 | 0)) {
10002 if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
10003 _abort();
10004 }
10005 i8 = i7 + 8 | 0;
10006 if ((HEAP32[i8 >> 2] | 0) == (i6 | 0)) {
10007 i10 = i8;
10008 } else {
10009 _abort();
10010 }
10011 } else {
10012 i10 = i7 + 8 | 0;
10013 }
10014 HEAP32[i9 + 12 >> 2] = i7;
10015 HEAP32[i10 >> 2] = i9;
10016 }
10017 } while (0);
10018 HEAP32[i2 + 4 >> 2] = i11 | 1;
10019 HEAP32[i2 + i11 >> 2] = i11;
10020 if ((i2 | 0) == (HEAP32[7180 >> 2] | 0)) {
10021 HEAP32[7168 >> 2] = i11;
10022 STACKTOP = i1;
10023 return;
10024 }
10025 } else {
10026 HEAP32[i12 >> 2] = i13 & -2;
10027 HEAP32[i2 + 4 >> 2] = i11 | 1;
10028 HEAP32[i2 + i11 >> 2] = i11;
10029 }
10030 i6 = i11 >>> 3;
10031 if (i11 >>> 0 < 256) {
10032 i7 = i6 << 1;
10033 i3 = 7200 + (i7 << 2) | 0;
10034 i8 = HEAP32[1790] | 0;
10035 i6 = 1 << i6;
10036 if ((i8 & i6 | 0) != 0) {
10037 i6 = 7200 + (i7 + 2 << 2) | 0;
10038 i7 = HEAP32[i6 >> 2] | 0;
10039 if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
10040 _abort();
10041 } else {
10042 i4 = i6;
10043 i5 = i7;
10044 }
10045 } else {
10046 HEAP32[1790] = i8 | i6;
10047 i4 = 7200 + (i7 + 2 << 2) | 0;
10048 i5 = i3;
10049 }
10050 HEAP32[i4 >> 2] = i2;
10051 HEAP32[i5 + 12 >> 2] = i2;
10052 HEAP32[i2 + 8 >> 2] = i5;
10053 HEAP32[i2 + 12 >> 2] = i3;
10054 STACKTOP = i1;
10055 return;
10056 }
10057 i4 = i11 >>> 8;
10058 if ((i4 | 0) != 0) {
10059 if (i11 >>> 0 > 16777215) {
10060 i4 = 31;
10061 } else {
10062 i20 = (i4 + 1048320 | 0) >>> 16 & 8;
10063 i21 = i4 << i20;
10064 i19 = (i21 + 520192 | 0) >>> 16 & 4;
10065 i21 = i21 << i19;
10066 i4 = (i21 + 245760 | 0) >>> 16 & 2;
10067 i4 = 14 - (i19 | i20 | i4) + (i21 << i4 >>> 15) | 0;
10068 i4 = i11 >>> (i4 + 7 | 0) & 1 | i4 << 1;
10069 }
10070 } else {
10071 i4 = 0;
10072 }
10073 i5 = 7464 + (i4 << 2) | 0;
10074 HEAP32[i2 + 28 >> 2] = i4;
10075 HEAP32[i2 + 20 >> 2] = 0;
10076 HEAP32[i2 + 16 >> 2] = 0;
10077 i7 = HEAP32[7164 >> 2] | 0;
10078 i6 = 1 << i4;
10079 L199 : do {
10080 if ((i7 & i6 | 0) != 0) {
10081 i5 = HEAP32[i5 >> 2] | 0;
10082 if ((i4 | 0) == 31) {
10083 i4 = 0;
10084 } else {
10085 i4 = 25 - (i4 >>> 1) | 0;
10086 }
10087 L204 : do {
10088 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) != (i11 | 0)) {
10089 i4 = i11 << i4;
10090 i7 = i5;
10091 while (1) {
10092 i6 = i7 + (i4 >>> 31 << 2) + 16 | 0;
10093 i5 = HEAP32[i6 >> 2] | 0;
10094 if ((i5 | 0) == 0) {
10095 break;
10096 }
10097 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i11 | 0)) {
10098 i3 = i5;
10099 break L204;
10100 } else {
10101 i4 = i4 << 1;
10102 i7 = i5;
10103 }
10104 }
10105 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) {
10106 _abort();
10107 } else {
10108 HEAP32[i6 >> 2] = i2;
10109 HEAP32[i2 + 24 >> 2] = i7;
10110 HEAP32[i2 + 12 >> 2] = i2;
10111 HEAP32[i2 + 8 >> 2] = i2;
10112 break L199;
10113 }
10114 } else {
10115 i3 = i5;
10116 }
10117 } while (0);
10118 i5 = i3 + 8 | 0;
10119 i4 = HEAP32[i5 >> 2] | 0;
10120 i6 = HEAP32[7176 >> 2] | 0;
10121 if (i3 >>> 0 < i6 >>> 0) {
10122 _abort();
10123 }
10124 if (i4 >>> 0 < i6 >>> 0) {
10125 _abort();
10126 } else {
10127 HEAP32[i4 + 12 >> 2] = i2;
10128 HEAP32[i5 >> 2] = i2;
10129 HEAP32[i2 + 8 >> 2] = i4;
10130 HEAP32[i2 + 12 >> 2] = i3;
10131 HEAP32[i2 + 24 >> 2] = 0;
10132 break;
10133 }
10134 } else {
10135 HEAP32[7164 >> 2] = i7 | i6;
10136 HEAP32[i5 >> 2] = i2;
10137 HEAP32[i2 + 24 >> 2] = i5;
10138 HEAP32[i2 + 12 >> 2] = i2;
10139 HEAP32[i2 + 8 >> 2] = i2;
10140 }
10141 } while (0);
10142 i21 = (HEAP32[7192 >> 2] | 0) + -1 | 0;
10143 HEAP32[7192 >> 2] = i21;
10144 if ((i21 | 0) == 0) {
10145 i2 = 7616 | 0;
10146 } else {
10147 STACKTOP = i1;
10148 return;
10149 }
10150 while (1) {
10151 i2 = HEAP32[i2 >> 2] | 0;
10152 if ((i2 | 0) == 0) {
10153 break;
10154 } else {
10155 i2 = i2 + 8 | 0;
10156 }
10157 }
10158 HEAP32[7192 >> 2] = -1;
10159 STACKTOP = i1;
10160 return;
10161}
10162function __ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_(i3, i4, i2) {
10163 i3 = i3 | 0;
10164 i4 = i4 | 0;
10165 i2 = i2 | 0;
10166 var i1 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
10167 i1 = STACKTOP;
10168 STACKTOP = STACKTOP + 32 | 0;
10169 i7 = i1 + 12 | 0;
10170 i6 = i1;
10171 switch ((i4 - i3 | 0) / 12 | 0 | 0) {
10172 case 5:
10173 {
10174 i6 = i3 + 12 | 0;
10175 i8 = i3 + 24 | 0;
10176 i5 = i3 + 36 | 0;
10177 i4 = i4 + -12 | 0;
10178 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i3, i6, i8, i5, i2) | 0;
10179 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0)) {
10180 i10 = 1;
10181 STACKTOP = i1;
10182 return i10 | 0;
10183 }
10184 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10185 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10186 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10187 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10188 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10189 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10190 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10191 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10192 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10193 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i8) | 0)) {
10194 i10 = 1;
10195 STACKTOP = i1;
10196 return i10 | 0;
10197 }
10198 HEAP32[i7 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
10199 HEAP32[i7 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
10200 HEAP32[i7 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
10201 HEAP32[i8 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10202 HEAP32[i8 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10203 HEAP32[i8 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10204 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10205 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10206 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10207 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i6) | 0)) {
10208 i10 = 1;
10209 STACKTOP = i1;
10210 return i10 | 0;
10211 }
10212 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
10213 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
10214 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
10215 HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
10216 HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
10217 HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
10218 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10219 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10220 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10221 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i3) | 0)) {
10222 i10 = 1;
10223 STACKTOP = i1;
10224 return i10 | 0;
10225 }
10226 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10227 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10228 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10229 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
10230 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
10231 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
10232 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10233 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10234 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10235 i10 = 1;
10236 STACKTOP = i1;
10237 return i10 | 0;
10238 }
10239 case 4:
10240 {
10241 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i3, i3 + 12 | 0, i3 + 24 | 0, i4 + -12 | 0, i2) | 0;
10242 i10 = 1;
10243 STACKTOP = i1;
10244 return i10 | 0;
10245 }
10246 case 3:
10247 {
10248 i5 = i3 + 12 | 0;
10249 i4 = i4 + -12 | 0;
10250 i10 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i3) | 0;
10251 i6 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0;
10252 if (!i10) {
10253 if (!i6) {
10254 i10 = 1;
10255 STACKTOP = i1;
10256 return i10 | 0;
10257 }
10258 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10259 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10260 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10261 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10262 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10263 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10264 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10265 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10266 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10267 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i3) | 0)) {
10268 i10 = 1;
10269 STACKTOP = i1;
10270 return i10 | 0;
10271 }
10272 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10273 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10274 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10275 HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10276 HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10277 HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10278 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10279 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10280 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10281 i10 = 1;
10282 STACKTOP = i1;
10283 return i10 | 0;
10284 }
10285 if (i6) {
10286 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10287 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10288 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10289 HEAP32[i3 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10290 HEAP32[i3 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10291 HEAP32[i3 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10292 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10293 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10294 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10295 i10 = 1;
10296 STACKTOP = i1;
10297 return i10 | 0;
10298 }
10299 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10300 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10301 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10302 HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10303 HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10304 HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10305 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10306 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10307 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10308 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0)) {
10309 i10 = 1;
10310 STACKTOP = i1;
10311 return i10 | 0;
10312 }
10313 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
10314 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
10315 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
10316 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10317 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10318 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10319 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10320 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10321 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10322 i10 = 1;
10323 STACKTOP = i1;
10324 return i10 | 0;
10325 }
10326 case 2:
10327 {
10328 i4 = i4 + -12 | 0;
10329 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i3) | 0)) {
10330 i10 = 1;
10331 STACKTOP = i1;
10332 return i10 | 0;
10333 }
10334 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10335 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10336 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10337 HEAP32[i3 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
10338 HEAP32[i3 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
10339 HEAP32[i3 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
10340 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10341 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10342 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10343 i10 = 1;
10344 STACKTOP = i1;
10345 return i10 | 0;
10346 }
10347 case 1:
10348 case 0:
10349 {
10350 i10 = 1;
10351 STACKTOP = i1;
10352 return i10 | 0;
10353 }
10354 default:
10355 {
10356 i9 = i3 + 24 | 0;
10357 i10 = i3 + 12 | 0;
10358 i11 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i10, i3) | 0;
10359 i8 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i9, i10) | 0;
10360 do {
10361 if (i11) {
10362 if (i8) {
10363 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10364 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10365 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10366 HEAP32[i3 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
10367 HEAP32[i3 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
10368 HEAP32[i3 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
10369 HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10370 HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10371 HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10372 break;
10373 }
10374 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10375 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10376 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10377 HEAP32[i3 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
10378 HEAP32[i3 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
10379 HEAP32[i3 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
10380 HEAP32[i10 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10381 HEAP32[i10 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10382 HEAP32[i10 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10383 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i9, i10) | 0) {
10384 HEAP32[i7 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
10385 HEAP32[i7 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
10386 HEAP32[i7 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
10387 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
10388 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
10389 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
10390 HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10391 HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10392 HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10393 }
10394 } else {
10395 if (i8) {
10396 HEAP32[i7 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
10397 HEAP32[i7 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
10398 HEAP32[i7 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
10399 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
10400 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
10401 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
10402 HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10403 HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10404 HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10405 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i10, i3) | 0) {
10406 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
10407 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
10408 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
10409 HEAP32[i3 + 0 >> 2] = HEAP32[i10 + 0 >> 2];
10410 HEAP32[i3 + 4 >> 2] = HEAP32[i10 + 4 >> 2];
10411 HEAP32[i3 + 8 >> 2] = HEAP32[i10 + 8 >> 2];
10412 HEAP32[i10 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10413 HEAP32[i10 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10414 HEAP32[i10 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10415 }
10416 }
10417 }
10418 } while (0);
10419 i7 = i3 + 36 | 0;
10420 if ((i7 | 0) == (i4 | 0)) {
10421 i11 = 1;
10422 STACKTOP = i1;
10423 return i11 | 0;
10424 }
10425 i8 = 0;
10426 while (1) {
10427 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i9) | 0) {
10428 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
10429 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
10430 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
10431 i10 = i7;
10432 while (1) {
10433 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2];
10434 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2];
10435 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2];
10436 if ((i9 | 0) == (i3 | 0)) {
10437 break;
10438 }
10439 i10 = i9 + -12 | 0;
10440 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i10) | 0) {
10441 i11 = i9;
10442 i9 = i10;
10443 i10 = i11;
10444 } else {
10445 break;
10446 }
10447 }
10448 HEAP32[i9 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
10449 HEAP32[i9 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
10450 HEAP32[i9 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
10451 i8 = i8 + 1 | 0;
10452 if ((i8 | 0) == 8) {
10453 break;
10454 }
10455 }
10456 i9 = i7 + 12 | 0;
10457 if ((i9 | 0) == (i4 | 0)) {
10458 i2 = 1;
10459 i5 = 35;
10460 break;
10461 } else {
10462 i11 = i7;
10463 i7 = i9;
10464 i9 = i11;
10465 }
10466 }
10467 if ((i5 | 0) == 35) {
10468 STACKTOP = i1;
10469 return i2 | 0;
10470 }
10471 i11 = (i7 + 12 | 0) == (i4 | 0);
10472 STACKTOP = i1;
10473 return i11 | 0;
10474 }
10475 }
10476 return 0;
10477}
10478function __ZN13b2DynamicTree7BalanceEi(i11, i6) {
10479 i11 = i11 | 0;
10480 i6 = i6 | 0;
10481 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, d19 = 0.0, i20 = 0, i21 = 0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0;
10482 i1 = STACKTOP;
10483 if ((i6 | 0) == -1) {
10484 ___assert_fail(3216, 2944, 382, 3232);
10485 }
10486 i5 = HEAP32[i11 + 4 >> 2] | 0;
10487 i13 = i5 + (i6 * 36 | 0) | 0;
10488 i18 = i5 + (i6 * 36 | 0) + 24 | 0;
10489 i8 = HEAP32[i18 >> 2] | 0;
10490 if ((i8 | 0) == -1) {
10491 i21 = i6;
10492 STACKTOP = i1;
10493 return i21 | 0;
10494 }
10495 i2 = i5 + (i6 * 36 | 0) + 32 | 0;
10496 if ((HEAP32[i2 >> 2] | 0) < 2) {
10497 i21 = i6;
10498 STACKTOP = i1;
10499 return i21 | 0;
10500 }
10501 i20 = i5 + (i6 * 36 | 0) + 28 | 0;
10502 i7 = HEAP32[i20 >> 2] | 0;
10503 if (!((i8 | 0) > -1)) {
10504 ___assert_fail(3240, 2944, 392, 3232);
10505 }
10506 i12 = HEAP32[i11 + 12 >> 2] | 0;
10507 if ((i8 | 0) >= (i12 | 0)) {
10508 ___assert_fail(3240, 2944, 392, 3232);
10509 }
10510 if (!((i7 | 0) > -1 & (i7 | 0) < (i12 | 0))) {
10511 ___assert_fail(3272, 2944, 393, 3232);
10512 }
10513 i9 = i5 + (i8 * 36 | 0) | 0;
10514 i10 = i5 + (i7 * 36 | 0) | 0;
10515 i3 = i5 + (i7 * 36 | 0) + 32 | 0;
10516 i4 = i5 + (i8 * 36 | 0) + 32 | 0;
10517 i14 = (HEAP32[i3 >> 2] | 0) - (HEAP32[i4 >> 2] | 0) | 0;
10518 if ((i14 | 0) > 1) {
10519 i21 = i5 + (i7 * 36 | 0) + 24 | 0;
10520 i14 = HEAP32[i21 >> 2] | 0;
10521 i18 = i5 + (i7 * 36 | 0) + 28 | 0;
10522 i15 = HEAP32[i18 >> 2] | 0;
10523 i16 = i5 + (i14 * 36 | 0) | 0;
10524 i17 = i5 + (i15 * 36 | 0) | 0;
10525 if (!((i14 | 0) > -1 & (i14 | 0) < (i12 | 0))) {
10526 ___assert_fail(3304, 2944, 407, 3232);
10527 }
10528 if (!((i15 | 0) > -1 & (i15 | 0) < (i12 | 0))) {
10529 ___assert_fail(3336, 2944, 408, 3232);
10530 }
10531 HEAP32[i21 >> 2] = i6;
10532 i21 = i5 + (i6 * 36 | 0) + 20 | 0;
10533 i12 = i5 + (i7 * 36 | 0) + 20 | 0;
10534 HEAP32[i12 >> 2] = HEAP32[i21 >> 2];
10535 HEAP32[i21 >> 2] = i7;
10536 i12 = HEAP32[i12 >> 2] | 0;
10537 do {
10538 if (!((i12 | 0) == -1)) {
10539 i11 = i5 + (i12 * 36 | 0) + 24 | 0;
10540 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
10541 HEAP32[i11 >> 2] = i7;
10542 break;
10543 }
10544 i11 = i5 + (i12 * 36 | 0) + 28 | 0;
10545 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
10546 HEAP32[i11 >> 2] = i7;
10547 break;
10548 } else {
10549 ___assert_fail(3368, 2944, 424, 3232);
10550 }
10551 } else {
10552 HEAP32[i11 >> 2] = i7;
10553 }
10554 } while (0);
10555 i11 = i5 + (i14 * 36 | 0) + 32 | 0;
10556 i12 = i5 + (i15 * 36 | 0) + 32 | 0;
10557 if ((HEAP32[i11 >> 2] | 0) > (HEAP32[i12 >> 2] | 0)) {
10558 HEAP32[i18 >> 2] = i14;
10559 HEAP32[i20 >> 2] = i15;
10560 HEAP32[i5 + (i15 * 36 | 0) + 20 >> 2] = i6;
10561 d19 = +HEAPF32[i9 >> 2];
10562 d22 = +HEAPF32[i17 >> 2];
10563 d19 = d19 < d22 ? d19 : d22;
10564 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 4 >> 2];
10565 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
10566 d24 = +d19;
10567 d23 = +(d23 < d22 ? d23 : d22);
10568 i21 = i13;
10569 HEAPF32[i21 >> 2] = d24;
10570 HEAPF32[i21 + 4 >> 2] = d23;
10571 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 8 >> 2];
10572 d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
10573 d22 = +HEAPF32[i5 + (i8 * 36 | 0) + 12 >> 2];
10574 d25 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
10575 d23 = +(d23 > d24 ? d23 : d24);
10576 d24 = +(d22 > d25 ? d22 : d25);
10577 i21 = i5 + (i6 * 36 | 0) + 8 | 0;
10578 HEAPF32[i21 >> 2] = d23;
10579 HEAPF32[i21 + 4 >> 2] = d24;
10580 d24 = +HEAPF32[i16 >> 2];
10581 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
10582 d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
10583 d19 = +(d19 < d24 ? d19 : d24);
10584 d22 = +(d22 < d23 ? d22 : d23);
10585 i21 = i10;
10586 HEAPF32[i21 >> 2] = d19;
10587 HEAPF32[i21 + 4 >> 2] = d22;
10588 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
10589 d19 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
10590 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
10591 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
10592 d19 = +(d22 > d19 ? d22 : d19);
10593 d25 = +(d23 > d24 ? d23 : d24);
10594 i5 = i5 + (i7 * 36 | 0) + 8 | 0;
10595 HEAPF32[i5 >> 2] = d19;
10596 HEAPF32[i5 + 4 >> 2] = d25;
10597 i4 = HEAP32[i4 >> 2] | 0;
10598 i5 = HEAP32[i12 >> 2] | 0;
10599 i4 = ((i4 | 0) > (i5 | 0) ? i4 : i5) + 1 | 0;
10600 HEAP32[i2 >> 2] = i4;
10601 i2 = HEAP32[i11 >> 2] | 0;
10602 i2 = (i4 | 0) > (i2 | 0) ? i4 : i2;
10603 } else {
10604 HEAP32[i18 >> 2] = i15;
10605 HEAP32[i20 >> 2] = i14;
10606 HEAP32[i5 + (i14 * 36 | 0) + 20 >> 2] = i6;
10607 d19 = +HEAPF32[i9 >> 2];
10608 d22 = +HEAPF32[i16 >> 2];
10609 d19 = d19 < d22 ? d19 : d22;
10610 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 4 >> 2];
10611 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
10612 d22 = +d19;
10613 d23 = +(d23 < d24 ? d23 : d24);
10614 i21 = i13;
10615 HEAPF32[i21 >> 2] = d22;
10616 HEAPF32[i21 + 4 >> 2] = d23;
10617 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 8 >> 2];
10618 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
10619 d22 = +HEAPF32[i5 + (i8 * 36 | 0) + 12 >> 2];
10620 d25 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
10621 d23 = +(d23 > d24 ? d23 : d24);
10622 d24 = +(d22 > d25 ? d22 : d25);
10623 i21 = i5 + (i6 * 36 | 0) + 8 | 0;
10624 HEAPF32[i21 >> 2] = d23;
10625 HEAPF32[i21 + 4 >> 2] = d24;
10626 d24 = +HEAPF32[i17 >> 2];
10627 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
10628 d23 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
10629 d19 = +(d19 < d24 ? d19 : d24);
10630 d23 = +(d22 < d23 ? d22 : d23);
10631 i21 = i10;
10632 HEAPF32[i21 >> 2] = d19;
10633 HEAPF32[i21 + 4 >> 2] = d23;
10634 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
10635 d19 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
10636 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
10637 d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
10638 d19 = +(d23 > d19 ? d23 : d19);
10639 d25 = +(d22 > d24 ? d22 : d24);
10640 i5 = i5 + (i7 * 36 | 0) + 8 | 0;
10641 HEAPF32[i5 >> 2] = d19;
10642 HEAPF32[i5 + 4 >> 2] = d25;
10643 i4 = HEAP32[i4 >> 2] | 0;
10644 i5 = HEAP32[i11 >> 2] | 0;
10645 i4 = ((i4 | 0) > (i5 | 0) ? i4 : i5) + 1 | 0;
10646 HEAP32[i2 >> 2] = i4;
10647 i2 = HEAP32[i12 >> 2] | 0;
10648 i2 = (i4 | 0) > (i2 | 0) ? i4 : i2;
10649 }
10650 HEAP32[i3 >> 2] = i2 + 1;
10651 i21 = i7;
10652 STACKTOP = i1;
10653 return i21 | 0;
10654 }
10655 if (!((i14 | 0) < -1)) {
10656 i21 = i6;
10657 STACKTOP = i1;
10658 return i21 | 0;
10659 }
10660 i21 = i5 + (i8 * 36 | 0) + 24 | 0;
10661 i14 = HEAP32[i21 >> 2] | 0;
10662 i20 = i5 + (i8 * 36 | 0) + 28 | 0;
10663 i15 = HEAP32[i20 >> 2] | 0;
10664 i17 = i5 + (i14 * 36 | 0) | 0;
10665 i16 = i5 + (i15 * 36 | 0) | 0;
10666 if (!((i14 | 0) > -1 & (i14 | 0) < (i12 | 0))) {
10667 ___assert_fail(3400, 2944, 467, 3232);
10668 }
10669 if (!((i15 | 0) > -1 & (i15 | 0) < (i12 | 0))) {
10670 ___assert_fail(3432, 2944, 468, 3232);
10671 }
10672 HEAP32[i21 >> 2] = i6;
10673 i21 = i5 + (i6 * 36 | 0) + 20 | 0;
10674 i12 = i5 + (i8 * 36 | 0) + 20 | 0;
10675 HEAP32[i12 >> 2] = HEAP32[i21 >> 2];
10676 HEAP32[i21 >> 2] = i8;
10677 i12 = HEAP32[i12 >> 2] | 0;
10678 do {
10679 if (!((i12 | 0) == -1)) {
10680 i11 = i5 + (i12 * 36 | 0) + 24 | 0;
10681 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
10682 HEAP32[i11 >> 2] = i8;
10683 break;
10684 }
10685 i11 = i5 + (i12 * 36 | 0) + 28 | 0;
10686 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) {
10687 HEAP32[i11 >> 2] = i8;
10688 break;
10689 } else {
10690 ___assert_fail(3464, 2944, 484, 3232);
10691 }
10692 } else {
10693 HEAP32[i11 >> 2] = i8;
10694 }
10695 } while (0);
10696 i12 = i5 + (i14 * 36 | 0) + 32 | 0;
10697 i11 = i5 + (i15 * 36 | 0) + 32 | 0;
10698 if ((HEAP32[i12 >> 2] | 0) > (HEAP32[i11 >> 2] | 0)) {
10699 HEAP32[i20 >> 2] = i14;
10700 HEAP32[i18 >> 2] = i15;
10701 HEAP32[i5 + (i15 * 36 | 0) + 20 >> 2] = i6;
10702 d19 = +HEAPF32[i10 >> 2];
10703 d22 = +HEAPF32[i16 >> 2];
10704 d19 = d19 < d22 ? d19 : d22;
10705 d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 4 >> 2];
10706 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
10707 d24 = +d19;
10708 d23 = +(d23 < d22 ? d23 : d22);
10709 i21 = i13;
10710 HEAPF32[i21 >> 2] = d24;
10711 HEAPF32[i21 + 4 >> 2] = d23;
10712 d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 8 >> 2];
10713 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
10714 d24 = +HEAPF32[i5 + (i7 * 36 | 0) + 12 >> 2];
10715 d25 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
10716 d22 = +(d23 > d22 ? d23 : d22);
10717 d24 = +(d24 > d25 ? d24 : d25);
10718 i21 = i5 + (i6 * 36 | 0) + 8 | 0;
10719 HEAPF32[i21 >> 2] = d22;
10720 HEAPF32[i21 + 4 >> 2] = d24;
10721 d24 = +HEAPF32[i17 >> 2];
10722 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
10723 d22 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
10724 d19 = +(d19 < d24 ? d19 : d24);
10725 d22 = +(d23 < d22 ? d23 : d22);
10726 i21 = i9;
10727 HEAPF32[i21 >> 2] = d19;
10728 HEAPF32[i21 + 4 >> 2] = d22;
10729 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
10730 d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
10731 d19 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
10732 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
10733 d22 = +(d22 > d23 ? d22 : d23);
10734 d25 = +(d19 > d24 ? d19 : d24);
10735 i5 = i5 + (i8 * 36 | 0) + 8 | 0;
10736 HEAPF32[i5 >> 2] = d22;
10737 HEAPF32[i5 + 4 >> 2] = d25;
10738 i3 = HEAP32[i3 >> 2] | 0;
10739 i5 = HEAP32[i11 >> 2] | 0;
10740 i3 = ((i3 | 0) > (i5 | 0) ? i3 : i5) + 1 | 0;
10741 HEAP32[i2 >> 2] = i3;
10742 i2 = HEAP32[i12 >> 2] | 0;
10743 i2 = (i3 | 0) > (i2 | 0) ? i3 : i2;
10744 } else {
10745 HEAP32[i20 >> 2] = i15;
10746 HEAP32[i18 >> 2] = i14;
10747 HEAP32[i5 + (i14 * 36 | 0) + 20 >> 2] = i6;
10748 d19 = +HEAPF32[i10 >> 2];
10749 d22 = +HEAPF32[i17 >> 2];
10750 d19 = d19 < d22 ? d19 : d22;
10751 d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 4 >> 2];
10752 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2];
10753 d22 = +d19;
10754 d24 = +(d23 < d24 ? d23 : d24);
10755 i21 = i13;
10756 HEAPF32[i21 >> 2] = d22;
10757 HEAPF32[i21 + 4 >> 2] = d24;
10758 d24 = +HEAPF32[i5 + (i7 * 36 | 0) + 8 >> 2];
10759 d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2];
10760 d22 = +HEAPF32[i5 + (i7 * 36 | 0) + 12 >> 2];
10761 d25 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2];
10762 d23 = +(d24 > d23 ? d24 : d23);
10763 d24 = +(d22 > d25 ? d22 : d25);
10764 i21 = i5 + (i6 * 36 | 0) + 8 | 0;
10765 HEAPF32[i21 >> 2] = d23;
10766 HEAPF32[i21 + 4 >> 2] = d24;
10767 d24 = +HEAPF32[i16 >> 2];
10768 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2];
10769 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2];
10770 d19 = +(d19 < d24 ? d19 : d24);
10771 d22 = +(d23 < d22 ? d23 : d22);
10772 i21 = i9;
10773 HEAPF32[i21 >> 2] = d19;
10774 HEAPF32[i21 + 4 >> 2] = d22;
10775 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2];
10776 d23 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2];
10777 d19 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2];
10778 d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2];
10779 d22 = +(d22 > d23 ? d22 : d23);
10780 d25 = +(d19 > d24 ? d19 : d24);
10781 i5 = i5 + (i8 * 36 | 0) + 8 | 0;
10782 HEAPF32[i5 >> 2] = d22;
10783 HEAPF32[i5 + 4 >> 2] = d25;
10784 i3 = HEAP32[i3 >> 2] | 0;
10785 i5 = HEAP32[i12 >> 2] | 0;
10786 i3 = ((i3 | 0) > (i5 | 0) ? i3 : i5) + 1 | 0;
10787 HEAP32[i2 >> 2] = i3;
10788 i2 = HEAP32[i11 >> 2] | 0;
10789 i2 = (i3 | 0) > (i2 | 0) ? i3 : i2;
10790 }
10791 HEAP32[i4 >> 2] = i2 + 1;
10792 i21 = i8;
10793 STACKTOP = i1;
10794 return i21 | 0;
10795}
10796function __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i2, i5, i3) {
10797 i2 = i2 | 0;
10798 i5 = i5 | 0;
10799 i3 = i3 | 0;
10800 var i1 = 0, i4 = 0, i6 = 0, d7 = 0.0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0, d22 = 0.0, i23 = 0, d24 = 0.0, d25 = 0.0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, d36 = 0.0, d37 = 0.0, d38 = 0.0, i39 = 0, i40 = 0, i41 = 0, i42 = 0, d43 = 0.0, d44 = 0.0, d45 = 0.0, i46 = 0;
10801 i1 = STACKTOP;
10802 STACKTOP = STACKTOP + 176 | 0;
10803 i11 = i1 + 152 | 0;
10804 i10 = i1 + 136 | 0;
10805 i4 = i1 + 24 | 0;
10806 i14 = i1 + 12 | 0;
10807 i15 = i1;
10808 HEAP32[652] = (HEAP32[652] | 0) + 1;
10809 i9 = i3 + 28 | 0;
10810 i31 = i3 + 56 | 0;
10811 HEAP32[i11 + 0 >> 2] = HEAP32[i31 + 0 >> 2];
10812 HEAP32[i11 + 4 >> 2] = HEAP32[i31 + 4 >> 2];
10813 HEAP32[i11 + 8 >> 2] = HEAP32[i31 + 8 >> 2];
10814 HEAP32[i11 + 12 >> 2] = HEAP32[i31 + 12 >> 2];
10815 i31 = i3 + 72 | 0;
10816 HEAP32[i10 + 0 >> 2] = HEAP32[i31 + 0 >> 2];
10817 HEAP32[i10 + 4 >> 2] = HEAP32[i31 + 4 >> 2];
10818 HEAP32[i10 + 8 >> 2] = HEAP32[i31 + 8 >> 2];
10819 HEAP32[i10 + 12 >> 2] = HEAP32[i31 + 12 >> 2];
10820 __ZN9b2Simplex9ReadCacheEPK14b2SimplexCachePK15b2DistanceProxyRK11b2TransformS5_S8_(i4, i5, i3, i11, i9, i10);
10821 i9 = i4 + 108 | 0;
10822 i31 = HEAP32[i9 >> 2] | 0;
10823 if ((i31 | 0) == 3 | (i31 | 0) == 2 | (i31 | 0) == 1) {
10824 i8 = i4 + 16 | 0;
10825 i6 = i4 + 20 | 0;
10826 d17 = +HEAPF32[i11 + 12 >> 2];
10827 d18 = +HEAPF32[i11 + 8 >> 2];
10828 i13 = i3 + 16 | 0;
10829 i12 = i3 + 20 | 0;
10830 d16 = +HEAPF32[i11 >> 2];
10831 d21 = +HEAPF32[i11 + 4 >> 2];
10832 d19 = +HEAPF32[i10 + 12 >> 2];
10833 d22 = +HEAPF32[i10 + 8 >> 2];
10834 i23 = i3 + 44 | 0;
10835 i20 = i3 + 48 | 0;
10836 d24 = +HEAPF32[i10 >> 2];
10837 d25 = +HEAPF32[i10 + 4 >> 2];
10838 i11 = i4 + 52 | 0;
10839 i10 = i4 + 56 | 0;
10840 i30 = i4 + 16 | 0;
10841 i27 = i4 + 36 | 0;
10842 i26 = i4 + 52 | 0;
10843 i29 = i4 + 24 | 0;
10844 i28 = i4 + 60 | 0;
10845 i33 = 0;
10846 L3 : while (1) {
10847 i32 = (i31 | 0) > 0;
10848 if (i32) {
10849 i34 = 0;
10850 do {
10851 HEAP32[i14 + (i34 << 2) >> 2] = HEAP32[i4 + (i34 * 36 | 0) + 28 >> 2];
10852 HEAP32[i15 + (i34 << 2) >> 2] = HEAP32[i4 + (i34 * 36 | 0) + 32 >> 2];
10853 i34 = i34 + 1 | 0;
10854 } while ((i34 | 0) != (i31 | 0));
10855 }
10856 do {
10857 if ((i31 | 0) == 2) {
10858 i46 = i30;
10859 d45 = +HEAPF32[i46 >> 2];
10860 d36 = +HEAPF32[i46 + 4 >> 2];
10861 i46 = i26;
10862 d38 = +HEAPF32[i46 >> 2];
10863 d37 = +HEAPF32[i46 + 4 >> 2];
10864 d43 = d38 - d45;
10865 d44 = d37 - d36;
10866 d36 = d45 * d43 + d36 * d44;
10867 if (d36 >= -0.0) {
10868 HEAPF32[i29 >> 2] = 1.0;
10869 HEAP32[i9 >> 2] = 1;
10870 i35 = 17;
10871 break;
10872 }
10873 d37 = d38 * d43 + d37 * d44;
10874 if (!(d37 <= 0.0)) {
10875 d45 = 1.0 / (d37 - d36);
10876 HEAPF32[i29 >> 2] = d37 * d45;
10877 HEAPF32[i28 >> 2] = -(d36 * d45);
10878 HEAP32[i9 >> 2] = 2;
10879 i35 = 18;
10880 break;
10881 } else {
10882 HEAPF32[i28 >> 2] = 1.0;
10883 HEAP32[i9 >> 2] = 1;
10884 i34 = i4 + 0 | 0;
10885 i39 = i27 + 0 | 0;
10886 i35 = i34 + 36 | 0;
10887 do {
10888 HEAP32[i34 >> 2] = HEAP32[i39 >> 2];
10889 i34 = i34 + 4 | 0;
10890 i39 = i39 + 4 | 0;
10891 } while ((i34 | 0) < (i35 | 0));
10892 i35 = 17;
10893 break;
10894 }
10895 } else if ((i31 | 0) == 3) {
10896 __ZN9b2Simplex6Solve3Ev(i4);
10897 i34 = HEAP32[i9 >> 2] | 0;
10898 if ((i34 | 0) == 1) {
10899 i35 = 17;
10900 } else if ((i34 | 0) == 0) {
10901 i35 = 15;
10902 break L3;
10903 } else if ((i34 | 0) == 2) {
10904 i35 = 18;
10905 } else if ((i34 | 0) == 3) {
10906 i35 = 42;
10907 break L3;
10908 } else {
10909 i35 = 16;
10910 break L3;
10911 }
10912 } else if ((i31 | 0) == 1) {
10913 i35 = 17;
10914 } else {
10915 i35 = 13;
10916 break L3;
10917 }
10918 } while (0);
10919 do {
10920 if ((i35 | 0) == 17) {
10921 d36 = -+HEAPF32[i8 >> 2];
10922 d37 = -+HEAPF32[i6 >> 2];
10923 i34 = 1;
10924 } else if ((i35 | 0) == 18) {
10925 d44 = +HEAPF32[i8 >> 2];
10926 d37 = +HEAPF32[i11 >> 2] - d44;
10927 d45 = +HEAPF32[i6 >> 2];
10928 d36 = +HEAPF32[i10 >> 2] - d45;
10929 if (d44 * d36 - d37 * d45 > 0.0) {
10930 d36 = -d36;
10931 i34 = 2;
10932 break;
10933 } else {
10934 d37 = -d37;
10935 i34 = 2;
10936 break;
10937 }
10938 }
10939 } while (0);
10940 if (d37 * d37 + d36 * d36 < 1.4210854715202004e-14) {
10941 i35 = 42;
10942 break;
10943 }
10944 i39 = i4 + (i34 * 36 | 0) | 0;
10945 d44 = -d36;
10946 d45 = -d37;
10947 d43 = d17 * d44 + d18 * d45;
10948 d44 = d17 * d45 - d18 * d44;
10949 i40 = HEAP32[i13 >> 2] | 0;
10950 i41 = HEAP32[i12 >> 2] | 0;
10951 if ((i41 | 0) > 1) {
10952 i42 = 0;
10953 d45 = d44 * +HEAPF32[i40 + 4 >> 2] + d43 * +HEAPF32[i40 >> 2];
10954 i46 = 1;
10955 while (1) {
10956 d38 = d43 * +HEAPF32[i40 + (i46 << 3) >> 2] + d44 * +HEAPF32[i40 + (i46 << 3) + 4 >> 2];
10957 i35 = d38 > d45;
10958 i42 = i35 ? i46 : i42;
10959 i46 = i46 + 1 | 0;
10960 if ((i46 | 0) == (i41 | 0)) {
10961 break;
10962 } else {
10963 d45 = i35 ? d38 : d45;
10964 }
10965 }
10966 i35 = i4 + (i34 * 36 | 0) + 28 | 0;
10967 HEAP32[i35 >> 2] = i42;
10968 if (!((i42 | 0) > -1)) {
10969 i35 = 28;
10970 break;
10971 }
10972 } else {
10973 i35 = i4 + (i34 * 36 | 0) + 28 | 0;
10974 HEAP32[i35 >> 2] = 0;
10975 i42 = 0;
10976 }
10977 if ((i41 | 0) <= (i42 | 0)) {
10978 i35 = 28;
10979 break;
10980 }
10981 d45 = +HEAPF32[i40 + (i42 << 3) >> 2];
10982 d43 = +HEAPF32[i40 + (i42 << 3) + 4 >> 2];
10983 d38 = d16 + (d17 * d45 - d18 * d43);
10984 d44 = +d38;
10985 d43 = +(d45 * d18 + d17 * d43 + d21);
10986 i40 = i39;
10987 HEAPF32[i40 >> 2] = d44;
10988 HEAPF32[i40 + 4 >> 2] = d43;
10989 d43 = d36 * d19 + d37 * d22;
10990 d44 = d37 * d19 - d36 * d22;
10991 i40 = HEAP32[i23 >> 2] | 0;
10992 i39 = HEAP32[i20 >> 2] | 0;
10993 if ((i39 | 0) > 1) {
10994 i41 = 0;
10995 d37 = d44 * +HEAPF32[i40 + 4 >> 2] + d43 * +HEAPF32[i40 >> 2];
10996 i42 = 1;
10997 while (1) {
10998 d36 = d43 * +HEAPF32[i40 + (i42 << 3) >> 2] + d44 * +HEAPF32[i40 + (i42 << 3) + 4 >> 2];
10999 i46 = d36 > d37;
11000 i41 = i46 ? i42 : i41;
11001 i42 = i42 + 1 | 0;
11002 if ((i42 | 0) == (i39 | 0)) {
11003 break;
11004 } else {
11005 d37 = i46 ? d36 : d37;
11006 }
11007 }
11008 i42 = i4 + (i34 * 36 | 0) + 32 | 0;
11009 HEAP32[i42 >> 2] = i41;
11010 if (!((i41 | 0) > -1)) {
11011 i35 = 35;
11012 break;
11013 }
11014 } else {
11015 i42 = i4 + (i34 * 36 | 0) + 32 | 0;
11016 HEAP32[i42 >> 2] = 0;
11017 i41 = 0;
11018 }
11019 if ((i39 | 0) <= (i41 | 0)) {
11020 i35 = 35;
11021 break;
11022 }
11023 d37 = +HEAPF32[i40 + (i41 << 3) >> 2];
11024 d45 = +HEAPF32[i40 + (i41 << 3) + 4 >> 2];
11025 d44 = d24 + (d19 * d37 - d22 * d45);
11026 d43 = +d44;
11027 d45 = +(d37 * d22 + d19 * d45 + d25);
11028 i46 = i4 + (i34 * 36 | 0) + 8 | 0;
11029 HEAPF32[i46 >> 2] = d43;
11030 HEAPF32[i46 + 4 >> 2] = d45;
11031 d44 = +(d44 - d38);
11032 d45 = +(+HEAPF32[i4 + (i34 * 36 | 0) + 12 >> 2] - +HEAPF32[i4 + (i34 * 36 | 0) + 4 >> 2]);
11033 i46 = i4 + (i34 * 36 | 0) + 16 | 0;
11034 HEAPF32[i46 >> 2] = d44;
11035 HEAPF32[i46 + 4 >> 2] = d45;
11036 i33 = i33 + 1 | 0;
11037 HEAP32[654] = (HEAP32[654] | 0) + 1;
11038 if (i32) {
11039 i34 = HEAP32[i35 >> 2] | 0;
11040 i32 = 0;
11041 do {
11042 if ((i34 | 0) == (HEAP32[i14 + (i32 << 2) >> 2] | 0) ? (HEAP32[i42 >> 2] | 0) == (HEAP32[i15 + (i32 << 2) >> 2] | 0) : 0) {
11043 i35 = 42;
11044 break L3;
11045 }
11046 i32 = i32 + 1 | 0;
11047 } while ((i32 | 0) < (i31 | 0));
11048 }
11049 i31 = (HEAP32[i9 >> 2] | 0) + 1 | 0;
11050 HEAP32[i9 >> 2] = i31;
11051 if ((i33 | 0) >= 20) {
11052 i35 = 42;
11053 break;
11054 }
11055 }
11056 if ((i35 | 0) == 13) {
11057 ___assert_fail(2712, 2672, 498, 2720);
11058 } else if ((i35 | 0) == 15) {
11059 ___assert_fail(2712, 2672, 194, 2856);
11060 } else if ((i35 | 0) == 16) {
11061 ___assert_fail(2712, 2672, 207, 2856);
11062 } else if ((i35 | 0) == 28) {
11063 ___assert_fail(2776, 2808, 103, 2840);
11064 } else if ((i35 | 0) == 35) {
11065 ___assert_fail(2776, 2808, 103, 2840);
11066 } else if ((i35 | 0) == 42) {
11067 i12 = HEAP32[656] | 0;
11068 HEAP32[656] = (i12 | 0) > (i33 | 0) ? i12 : i33;
11069 i14 = i2 + 8 | 0;
11070 __ZNK9b2Simplex16GetWitnessPointsEP6b2Vec2S1_(i4, i2, i14);
11071 d44 = +HEAPF32[i2 >> 2] - +HEAPF32[i14 >> 2];
11072 i13 = i2 + 4 | 0;
11073 i12 = i2 + 12 | 0;
11074 d45 = +HEAPF32[i13 >> 2] - +HEAPF32[i12 >> 2];
11075 i15 = i2 + 16 | 0;
11076 HEAPF32[i15 >> 2] = +Math_sqrt(+(d44 * d44 + d45 * d45));
11077 HEAP32[i2 + 20 >> 2] = i33;
11078 i9 = HEAP32[i9 >> 2] | 0;
11079 if ((i9 | 0) == 2) {
11080 d45 = +HEAPF32[i8 >> 2] - +HEAPF32[i11 >> 2];
11081 d7 = +HEAPF32[i6 >> 2] - +HEAPF32[i10 >> 2];
11082 d7 = +Math_sqrt(+(d45 * d45 + d7 * d7));
11083 } else if ((i9 | 0) == 3) {
11084 d7 = +HEAPF32[i8 >> 2];
11085 d45 = +HEAPF32[i6 >> 2];
11086 d7 = (+HEAPF32[i11 >> 2] - d7) * (+HEAPF32[i4 + 92 >> 2] - d45) - (+HEAPF32[i10 >> 2] - d45) * (+HEAPF32[i4 + 88 >> 2] - d7);
11087 } else if ((i9 | 0) == 1) {
11088 d7 = 0.0;
11089 } else if ((i9 | 0) == 0) {
11090 ___assert_fail(2712, 2672, 246, 2736);
11091 } else {
11092 ___assert_fail(2712, 2672, 259, 2736);
11093 }
11094 HEAPF32[i5 >> 2] = d7;
11095 HEAP16[i5 + 4 >> 1] = i9;
11096 i6 = 0;
11097 do {
11098 HEAP8[i5 + i6 + 6 | 0] = HEAP32[i4 + (i6 * 36 | 0) + 28 >> 2];
11099 HEAP8[i5 + i6 + 9 | 0] = HEAP32[i4 + (i6 * 36 | 0) + 32 >> 2];
11100 i6 = i6 + 1 | 0;
11101 } while ((i6 | 0) < (i9 | 0));
11102 if ((HEAP8[i3 + 88 | 0] | 0) == 0) {
11103 STACKTOP = i1;
11104 return;
11105 }
11106 d7 = +HEAPF32[i3 + 24 >> 2];
11107 d16 = +HEAPF32[i3 + 52 >> 2];
11108 d18 = +HEAPF32[i15 >> 2];
11109 d17 = d7 + d16;
11110 if (!(d18 > d17 & d18 > 1.1920928955078125e-7)) {
11111 d44 = +((+HEAPF32[i2 >> 2] + +HEAPF32[i14 >> 2]) * .5);
11112 d45 = +((+HEAPF32[i13 >> 2] + +HEAPF32[i12 >> 2]) * .5);
11113 i46 = i2;
11114 HEAPF32[i46 >> 2] = d44;
11115 HEAPF32[i46 + 4 >> 2] = d45;
11116 i46 = i14;
11117 HEAPF32[i46 >> 2] = d44;
11118 HEAPF32[i46 + 4 >> 2] = d45;
11119 HEAPF32[i15 >> 2] = 0.0;
11120 STACKTOP = i1;
11121 return;
11122 }
11123 HEAPF32[i15 >> 2] = d18 - d17;
11124 d18 = +HEAPF32[i14 >> 2];
11125 d21 = +HEAPF32[i2 >> 2];
11126 d24 = d18 - d21;
11127 d17 = +HEAPF32[i12 >> 2];
11128 d19 = +HEAPF32[i13 >> 2];
11129 d22 = d17 - d19;
11130 d25 = +Math_sqrt(+(d24 * d24 + d22 * d22));
11131 if (!(d25 < 1.1920928955078125e-7)) {
11132 d45 = 1.0 / d25;
11133 d24 = d24 * d45;
11134 d22 = d22 * d45;
11135 }
11136 HEAPF32[i2 >> 2] = d7 * d24 + d21;
11137 HEAPF32[i13 >> 2] = d7 * d22 + d19;
11138 HEAPF32[i14 >> 2] = d18 - d16 * d24;
11139 HEAPF32[i12 >> 2] = d17 - d16 * d22;
11140 STACKTOP = i1;
11141 return;
11142 }
11143 } else if ((i31 | 0) == 0) {
11144 ___assert_fail(2712, 2672, 194, 2856);
11145 } else {
11146 ___assert_fail(2712, 2672, 207, 2856);
11147 }
11148}
11149function __ZN8b2Island5SolveEP9b2ProfileRK10b2TimeStepRK6b2Vec2b(i4, i8, i11, i17, i7) {
11150 i4 = i4 | 0;
11151 i8 = i8 | 0;
11152 i11 = i11 | 0;
11153 i17 = i17 | 0;
11154 i7 = i7 | 0;
11155 var i1 = 0, i2 = 0, i3 = 0, d5 = 0.0, i6 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i18 = 0, i19 = 0, i20 = 0, d21 = 0.0, i22 = 0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, d29 = 0.0, i30 = 0;
11156 i3 = STACKTOP;
11157 STACKTOP = STACKTOP + 160 | 0;
11158 i6 = i3 + 128 | 0;
11159 i9 = i3 + 148 | 0;
11160 i10 = i3 + 96 | 0;
11161 i16 = i3 + 52 | 0;
11162 i2 = i3;
11163 __ZN7b2TimerC2Ev(i9);
11164 d5 = +HEAPF32[i11 >> 2];
11165 i1 = i4 + 28 | 0;
11166 if ((HEAP32[i1 >> 2] | 0) > 0) {
11167 i13 = i4 + 8 | 0;
11168 i12 = i17 + 4 | 0;
11169 i15 = i4 + 20 | 0;
11170 i14 = i4 + 24 | 0;
11171 i19 = 0;
11172 do {
11173 i22 = HEAP32[(HEAP32[i13 >> 2] | 0) + (i19 << 2) >> 2] | 0;
11174 i18 = i22 + 44 | 0;
11175 i20 = HEAP32[i18 >> 2] | 0;
11176 i18 = HEAP32[i18 + 4 >> 2] | 0;
11177 d21 = +HEAPF32[i22 + 56 >> 2];
11178 i30 = i22 + 64 | 0;
11179 d27 = +HEAPF32[i30 >> 2];
11180 d24 = +HEAPF32[i30 + 4 >> 2];
11181 d23 = +HEAPF32[i22 + 72 >> 2];
11182 i30 = i22 + 36 | 0;
11183 HEAP32[i30 >> 2] = i20;
11184 HEAP32[i30 + 4 >> 2] = i18;
11185 HEAPF32[i22 + 52 >> 2] = d21;
11186 if ((HEAP32[i22 >> 2] | 0) == 2) {
11187 d25 = +HEAPF32[i22 + 140 >> 2];
11188 d26 = +HEAPF32[i22 + 120 >> 2];
11189 d28 = 1.0 - d5 * +HEAPF32[i22 + 132 >> 2];
11190 d28 = d28 < 1.0 ? d28 : 1.0;
11191 d28 = d28 < 0.0 ? 0.0 : d28;
11192 d29 = 1.0 - d5 * +HEAPF32[i22 + 136 >> 2];
11193 d29 = d29 < 1.0 ? d29 : 1.0;
11194 d27 = (d27 + d5 * (d25 * +HEAPF32[i17 >> 2] + d26 * +HEAPF32[i22 + 76 >> 2])) * d28;
11195 d24 = (d24 + d5 * (d25 * +HEAPF32[i12 >> 2] + d26 * +HEAPF32[i22 + 80 >> 2])) * d28;
11196 d23 = (d23 + d5 * +HEAPF32[i22 + 128 >> 2] * +HEAPF32[i22 + 84 >> 2]) * (d29 < 0.0 ? 0.0 : d29);
11197 }
11198 i30 = (HEAP32[i15 >> 2] | 0) + (i19 * 12 | 0) | 0;
11199 HEAP32[i30 >> 2] = i20;
11200 HEAP32[i30 + 4 >> 2] = i18;
11201 HEAPF32[(HEAP32[i15 >> 2] | 0) + (i19 * 12 | 0) + 8 >> 2] = d21;
11202 d28 = +d27;
11203 d29 = +d24;
11204 i30 = (HEAP32[i14 >> 2] | 0) + (i19 * 12 | 0) | 0;
11205 HEAPF32[i30 >> 2] = d28;
11206 HEAPF32[i30 + 4 >> 2] = d29;
11207 HEAPF32[(HEAP32[i14 >> 2] | 0) + (i19 * 12 | 0) + 8 >> 2] = d23;
11208 i19 = i19 + 1 | 0;
11209 } while ((i19 | 0) < (HEAP32[i1 >> 2] | 0));
11210 } else {
11211 i14 = i4 + 24 | 0;
11212 i15 = i4 + 20 | 0;
11213 }
11214 HEAP32[i10 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
11215 HEAP32[i10 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
11216 HEAP32[i10 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
11217 HEAP32[i10 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
11218 HEAP32[i10 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
11219 HEAP32[i10 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
11220 i22 = HEAP32[i15 >> 2] | 0;
11221 HEAP32[i10 + 24 >> 2] = i22;
11222 i30 = HEAP32[i14 >> 2] | 0;
11223 HEAP32[i10 + 28 >> 2] = i30;
11224 HEAP32[i16 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
11225 HEAP32[i16 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
11226 HEAP32[i16 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
11227 HEAP32[i16 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
11228 HEAP32[i16 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
11229 HEAP32[i16 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
11230 i13 = i4 + 12 | 0;
11231 HEAP32[i16 + 24 >> 2] = HEAP32[i13 >> 2];
11232 i12 = i4 + 36 | 0;
11233 HEAP32[i16 + 28 >> 2] = HEAP32[i12 >> 2];
11234 HEAP32[i16 + 32 >> 2] = i22;
11235 HEAP32[i16 + 36 >> 2] = i30;
11236 HEAP32[i16 + 40 >> 2] = HEAP32[i4 >> 2];
11237 __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i2, i16);
11238 __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i2);
11239 if ((HEAP8[i11 + 20 | 0] | 0) != 0) {
11240 __ZN15b2ContactSolver9WarmStartEv(i2);
11241 }
11242 i16 = i4 + 32 | 0;
11243 if ((HEAP32[i16 >> 2] | 0) > 0) {
11244 i18 = i4 + 16 | 0;
11245 i17 = 0;
11246 do {
11247 i30 = HEAP32[(HEAP32[i18 >> 2] | 0) + (i17 << 2) >> 2] | 0;
11248 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i30 >> 2] | 0) + 28 >> 2] & 15](i30, i10);
11249 i17 = i17 + 1 | 0;
11250 } while ((i17 | 0) < (HEAP32[i16 >> 2] | 0));
11251 }
11252 HEAPF32[i8 + 12 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9);
11253 i17 = i11 + 12 | 0;
11254 if ((HEAP32[i17 >> 2] | 0) > 0) {
11255 i20 = i4 + 16 | 0;
11256 i19 = 0;
11257 do {
11258 if ((HEAP32[i16 >> 2] | 0) > 0) {
11259 i18 = 0;
11260 do {
11261 i30 = HEAP32[(HEAP32[i20 >> 2] | 0) + (i18 << 2) >> 2] | 0;
11262 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i30 >> 2] | 0) + 32 >> 2] & 15](i30, i10);
11263 i18 = i18 + 1 | 0;
11264 } while ((i18 | 0) < (HEAP32[i16 >> 2] | 0));
11265 }
11266 __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i2);
11267 i19 = i19 + 1 | 0;
11268 } while ((i19 | 0) < (HEAP32[i17 >> 2] | 0));
11269 }
11270 __ZN15b2ContactSolver13StoreImpulsesEv(i2);
11271 HEAPF32[i8 + 16 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9);
11272 if ((HEAP32[i1 >> 2] | 0) > 0) {
11273 i19 = HEAP32[i14 >> 2] | 0;
11274 i18 = 0;
11275 do {
11276 i30 = HEAP32[i15 >> 2] | 0;
11277 i17 = i30 + (i18 * 12 | 0) | 0;
11278 i22 = i17;
11279 d23 = +HEAPF32[i22 >> 2];
11280 d21 = +HEAPF32[i22 + 4 >> 2];
11281 d24 = +HEAPF32[i30 + (i18 * 12 | 0) + 8 >> 2];
11282 i30 = i19 + (i18 * 12 | 0) | 0;
11283 d26 = +HEAPF32[i30 >> 2];
11284 d27 = +HEAPF32[i30 + 4 >> 2];
11285 d25 = +HEAPF32[i19 + (i18 * 12 | 0) + 8 >> 2];
11286 d29 = d5 * d26;
11287 d28 = d5 * d27;
11288 d28 = d29 * d29 + d28 * d28;
11289 if (d28 > 4.0) {
11290 d29 = 2.0 / +Math_sqrt(+d28);
11291 d26 = d26 * d29;
11292 d27 = d27 * d29;
11293 }
11294 d28 = d5 * d25;
11295 if (d28 * d28 > 2.4674012660980225) {
11296 if (!(d28 > 0.0)) {
11297 d28 = -d28;
11298 }
11299 d25 = d25 * (1.5707963705062866 / d28);
11300 }
11301 d29 = +(d23 + d5 * d26);
11302 d28 = +(d21 + d5 * d27);
11303 i19 = i17;
11304 HEAPF32[i19 >> 2] = d29;
11305 HEAPF32[i19 + 4 >> 2] = d28;
11306 HEAPF32[(HEAP32[i15 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2] = d24 + d5 * d25;
11307 d28 = +d26;
11308 d29 = +d27;
11309 i19 = (HEAP32[i14 >> 2] | 0) + (i18 * 12 | 0) | 0;
11310 HEAPF32[i19 >> 2] = d28;
11311 HEAPF32[i19 + 4 >> 2] = d29;
11312 i19 = HEAP32[i14 >> 2] | 0;
11313 HEAPF32[i19 + (i18 * 12 | 0) + 8 >> 2] = d25;
11314 i18 = i18 + 1 | 0;
11315 } while ((i18 | 0) < (HEAP32[i1 >> 2] | 0));
11316 }
11317 i11 = i11 + 16 | 0;
11318 L41 : do {
11319 if ((HEAP32[i11 >> 2] | 0) > 0) {
11320 i17 = i4 + 16 | 0;
11321 i19 = 0;
11322 while (1) {
11323 i18 = __ZN15b2ContactSolver24SolvePositionConstraintsEv(i2) | 0;
11324 if ((HEAP32[i16 >> 2] | 0) > 0) {
11325 i20 = 0;
11326 i22 = 1;
11327 do {
11328 i30 = HEAP32[(HEAP32[i17 >> 2] | 0) + (i20 << 2) >> 2] | 0;
11329 i22 = i22 & (FUNCTION_TABLE_iii[HEAP32[(HEAP32[i30 >> 2] | 0) + 36 >> 2] & 3](i30, i10) | 0);
11330 i20 = i20 + 1 | 0;
11331 } while ((i20 | 0) < (HEAP32[i16 >> 2] | 0));
11332 } else {
11333 i22 = 1;
11334 }
11335 i19 = i19 + 1 | 0;
11336 if (i18 & i22) {
11337 i10 = 0;
11338 break L41;
11339 }
11340 if ((i19 | 0) >= (HEAP32[i11 >> 2] | 0)) {
11341 i10 = 1;
11342 break;
11343 }
11344 }
11345 } else {
11346 i10 = 1;
11347 }
11348 } while (0);
11349 if ((HEAP32[i1 >> 2] | 0) > 0) {
11350 i11 = i4 + 8 | 0;
11351 i16 = 0;
11352 do {
11353 i30 = HEAP32[(HEAP32[i11 >> 2] | 0) + (i16 << 2) >> 2] | 0;
11354 i22 = (HEAP32[i15 >> 2] | 0) + (i16 * 12 | 0) | 0;
11355 i20 = HEAP32[i22 >> 2] | 0;
11356 i22 = HEAP32[i22 + 4 >> 2] | 0;
11357 i17 = i30 + 44 | 0;
11358 HEAP32[i17 >> 2] = i20;
11359 HEAP32[i17 + 4 >> 2] = i22;
11360 d27 = +HEAPF32[(HEAP32[i15 >> 2] | 0) + (i16 * 12 | 0) + 8 >> 2];
11361 HEAPF32[i30 + 56 >> 2] = d27;
11362 i17 = (HEAP32[i14 >> 2] | 0) + (i16 * 12 | 0) | 0;
11363 i18 = HEAP32[i17 + 4 >> 2] | 0;
11364 i19 = i30 + 64 | 0;
11365 HEAP32[i19 >> 2] = HEAP32[i17 >> 2];
11366 HEAP32[i19 + 4 >> 2] = i18;
11367 HEAPF32[i30 + 72 >> 2] = +HEAPF32[(HEAP32[i14 >> 2] | 0) + (i16 * 12 | 0) + 8 >> 2];
11368 d25 = +Math_sin(+d27);
11369 HEAPF32[i30 + 20 >> 2] = d25;
11370 d27 = +Math_cos(+d27);
11371 HEAPF32[i30 + 24 >> 2] = d27;
11372 d26 = +HEAPF32[i30 + 28 >> 2];
11373 d29 = +HEAPF32[i30 + 32 >> 2];
11374 d28 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]) - (d27 * d26 - d25 * d29);
11375 d29 = (HEAP32[tempDoublePtr >> 2] = i22, +HEAPF32[tempDoublePtr >> 2]) - (d25 * d26 + d27 * d29);
11376 d28 = +d28;
11377 d29 = +d29;
11378 i30 = i30 + 12 | 0;
11379 HEAPF32[i30 >> 2] = d28;
11380 HEAPF32[i30 + 4 >> 2] = d29;
11381 i16 = i16 + 1 | 0;
11382 } while ((i16 | 0) < (HEAP32[i1 >> 2] | 0));
11383 }
11384 HEAPF32[i8 + 20 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9);
11385 i9 = HEAP32[i2 + 40 >> 2] | 0;
11386 i8 = i4 + 4 | 0;
11387 if ((HEAP32[i8 >> 2] | 0) != 0 ? (HEAP32[i12 >> 2] | 0) > 0 : 0) {
11388 i11 = i6 + 16 | 0;
11389 i14 = 0;
11390 do {
11391 i15 = HEAP32[(HEAP32[i13 >> 2] | 0) + (i14 << 2) >> 2] | 0;
11392 i16 = HEAP32[i9 + (i14 * 152 | 0) + 144 >> 2] | 0;
11393 HEAP32[i11 >> 2] = i16;
11394 if ((i16 | 0) > 0) {
11395 i17 = 0;
11396 do {
11397 HEAPF32[i6 + (i17 << 2) >> 2] = +HEAPF32[i9 + (i14 * 152 | 0) + (i17 * 36 | 0) + 16 >> 2];
11398 HEAPF32[i6 + (i17 << 2) + 8 >> 2] = +HEAPF32[i9 + (i14 * 152 | 0) + (i17 * 36 | 0) + 20 >> 2];
11399 i17 = i17 + 1 | 0;
11400 } while ((i17 | 0) != (i16 | 0));
11401 }
11402 i30 = HEAP32[i8 >> 2] | 0;
11403 FUNCTION_TABLE_viii[HEAP32[(HEAP32[i30 >> 2] | 0) + 20 >> 2] & 3](i30, i15, i6);
11404 i14 = i14 + 1 | 0;
11405 } while ((i14 | 0) < (HEAP32[i12 >> 2] | 0));
11406 }
11407 if (!i7) {
11408 __ZN15b2ContactSolverD2Ev(i2);
11409 STACKTOP = i3;
11410 return;
11411 }
11412 i7 = HEAP32[i1 >> 2] | 0;
11413 i6 = (i7 | 0) > 0;
11414 if (i6) {
11415 i8 = HEAP32[i4 + 8 >> 2] | 0;
11416 i9 = 0;
11417 d21 = 3.4028234663852886e+38;
11418 do {
11419 i11 = HEAP32[i8 + (i9 << 2) >> 2] | 0;
11420 do {
11421 if ((HEAP32[i11 >> 2] | 0) != 0) {
11422 if ((!((HEAP16[i11 + 4 >> 1] & 4) == 0) ? (d29 = +HEAPF32[i11 + 72 >> 2], !(d29 * d29 > .001218469929881394)) : 0) ? (d28 = +HEAPF32[i11 + 64 >> 2], d29 = +HEAPF32[i11 + 68 >> 2], !(d28 * d28 + d29 * d29 > 9999999747378752.0e-20)) : 0) {
11423 i30 = i11 + 144 | 0;
11424 d23 = d5 + +HEAPF32[i30 >> 2];
11425 HEAPF32[i30 >> 2] = d23;
11426 d21 = d21 < d23 ? d21 : d23;
11427 break;
11428 }
11429 HEAPF32[i11 + 144 >> 2] = 0.0;
11430 d21 = 0.0;
11431 }
11432 } while (0);
11433 i9 = i9 + 1 | 0;
11434 } while ((i9 | 0) < (i7 | 0));
11435 } else {
11436 d21 = 3.4028234663852886e+38;
11437 }
11438 if (!(d21 >= .5) | i10 | i6 ^ 1) {
11439 __ZN15b2ContactSolverD2Ev(i2);
11440 STACKTOP = i3;
11441 return;
11442 }
11443 i4 = i4 + 8 | 0;
11444 i6 = 0;
11445 do {
11446 i30 = HEAP32[(HEAP32[i4 >> 2] | 0) + (i6 << 2) >> 2] | 0;
11447 i22 = i30 + 4 | 0;
11448 HEAP16[i22 >> 1] = HEAP16[i22 >> 1] & 65533;
11449 HEAPF32[i30 + 144 >> 2] = 0.0;
11450 i30 = i30 + 64 | 0;
11451 HEAP32[i30 + 0 >> 2] = 0;
11452 HEAP32[i30 + 4 >> 2] = 0;
11453 HEAP32[i30 + 8 >> 2] = 0;
11454 HEAP32[i30 + 12 >> 2] = 0;
11455 HEAP32[i30 + 16 >> 2] = 0;
11456 HEAP32[i30 + 20 >> 2] = 0;
11457 i6 = i6 + 1 | 0;
11458 } while ((i6 | 0) < (HEAP32[i1 >> 2] | 0));
11459 __ZN15b2ContactSolverD2Ev(i2);
11460 STACKTOP = i3;
11461 return;
11462}
11463function __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i4) {
11464 i4 = i4 | 0;
11465 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, i19 = 0, d20 = 0.0, d21 = 0.0, i22 = 0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, d31 = 0.0, i32 = 0, i33 = 0, d34 = 0.0, d35 = 0.0, d36 = 0.0, d37 = 0.0, d38 = 0.0, d39 = 0.0, d40 = 0.0, i41 = 0, i42 = 0, d43 = 0.0, d44 = 0.0;
11466 i1 = STACKTOP;
11467 i2 = i4 + 48 | 0;
11468 if ((HEAP32[i2 >> 2] | 0) <= 0) {
11469 STACKTOP = i1;
11470 return;
11471 }
11472 i3 = i4 + 40 | 0;
11473 i4 = i4 + 28 | 0;
11474 i42 = HEAP32[i4 >> 2] | 0;
11475 i5 = 0;
11476 L4 : while (1) {
11477 i19 = HEAP32[i3 >> 2] | 0;
11478 i22 = i19 + (i5 * 152 | 0) | 0;
11479 i8 = HEAP32[i19 + (i5 * 152 | 0) + 112 >> 2] | 0;
11480 i6 = HEAP32[i19 + (i5 * 152 | 0) + 116 >> 2] | 0;
11481 d12 = +HEAPF32[i19 + (i5 * 152 | 0) + 120 >> 2];
11482 d10 = +HEAPF32[i19 + (i5 * 152 | 0) + 128 >> 2];
11483 d11 = +HEAPF32[i19 + (i5 * 152 | 0) + 124 >> 2];
11484 d9 = +HEAPF32[i19 + (i5 * 152 | 0) + 132 >> 2];
11485 i32 = i19 + (i5 * 152 | 0) + 144 | 0;
11486 i33 = HEAP32[i32 >> 2] | 0;
11487 i7 = i42 + (i8 * 12 | 0) | 0;
11488 i41 = i7;
11489 d21 = +HEAPF32[i41 >> 2];
11490 d20 = +HEAPF32[i41 + 4 >> 2];
11491 i41 = i42 + (i6 * 12 | 0) | 0;
11492 d14 = +HEAPF32[i41 >> 2];
11493 d13 = +HEAPF32[i41 + 4 >> 2];
11494 i41 = i19 + (i5 * 152 | 0) + 72 | 0;
11495 d17 = +HEAPF32[i41 >> 2];
11496 d16 = +HEAPF32[i41 + 4 >> 2];
11497 d23 = -d17;
11498 d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 136 >> 2];
11499 if ((i33 + -1 | 0) >>> 0 < 2) {
11500 i41 = 0;
11501 d18 = +HEAPF32[i42 + (i8 * 12 | 0) + 8 >> 2];
11502 d15 = +HEAPF32[i42 + (i6 * 12 | 0) + 8 >> 2];
11503 } else {
11504 i2 = 4;
11505 break;
11506 }
11507 do {
11508 d30 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 12 >> 2];
11509 d25 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 8 >> 2];
11510 d26 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 4 >> 2];
11511 d27 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) >> 2];
11512 d34 = d24 * +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 16 >> 2];
11513 i42 = i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 20 | 0;
11514 d28 = +HEAPF32[i42 >> 2];
11515 d31 = d28 - +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 28 >> 2] * (d16 * (d14 - d15 * d30 - d21 + d18 * d26) + (d13 + d15 * d25 - d20 - d18 * d27) * d23);
11516 d29 = -d34;
11517 d31 = d31 < d34 ? d31 : d34;
11518 d40 = d31 < d29 ? d29 : d31;
11519 d39 = d40 - d28;
11520 HEAPF32[i42 >> 2] = d40;
11521 d40 = d16 * d39;
11522 d39 = d39 * d23;
11523 d21 = d21 - d12 * d40;
11524 d20 = d20 - d12 * d39;
11525 d18 = d18 - d10 * (d27 * d39 - d26 * d40);
11526 d14 = d14 + d11 * d40;
11527 d13 = d13 + d11 * d39;
11528 d15 = d15 + d9 * (d25 * d39 - d30 * d40);
11529 i41 = i41 + 1 | 0;
11530 } while ((i41 | 0) != (i33 | 0));
11531 do {
11532 if ((HEAP32[i32 >> 2] | 0) != 1) {
11533 i32 = i19 + (i5 * 152 | 0) + 16 | 0;
11534 d31 = +HEAPF32[i32 >> 2];
11535 i33 = i19 + (i5 * 152 | 0) + 52 | 0;
11536 d34 = +HEAPF32[i33 >> 2];
11537 if (!(d31 >= 0.0) | !(d34 >= 0.0)) {
11538 i2 = 9;
11539 break L4;
11540 }
11541 d23 = +HEAPF32[i19 + (i5 * 152 | 0) + 12 >> 2];
11542 d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 8 >> 2];
11543 d26 = +HEAPF32[i19 + (i5 * 152 | 0) + 4 >> 2];
11544 d30 = +HEAPF32[i22 >> 2];
11545 d27 = +HEAPF32[i19 + (i5 * 152 | 0) + 48 >> 2];
11546 d25 = +HEAPF32[i19 + (i5 * 152 | 0) + 44 >> 2];
11547 d28 = +HEAPF32[i19 + (i5 * 152 | 0) + 40 >> 2];
11548 d29 = +HEAPF32[i19 + (i5 * 152 | 0) + 36 >> 2];
11549 d37 = +HEAPF32[i19 + (i5 * 152 | 0) + 104 >> 2];
11550 d38 = +HEAPF32[i19 + (i5 * 152 | 0) + 100 >> 2];
11551 d35 = d17 * (d14 - d15 * d23 - d21 + d18 * d26) + d16 * (d13 + d15 * d24 - d20 - d18 * d30) - +HEAPF32[i19 + (i5 * 152 | 0) + 32 >> 2] - (d31 * +HEAPF32[i19 + (i5 * 152 | 0) + 96 >> 2] + d34 * d37);
11552 d36 = d17 * (d14 - d15 * d27 - d21 + d18 * d28) + d16 * (d13 + d15 * d25 - d20 - d18 * d29) - +HEAPF32[i19 + (i5 * 152 | 0) + 68 >> 2] - (d31 * d38 + d34 * +HEAPF32[i19 + (i5 * 152 | 0) + 108 >> 2]);
11553 d44 = +HEAPF32[i19 + (i5 * 152 | 0) + 80 >> 2] * d35 + +HEAPF32[i19 + (i5 * 152 | 0) + 88 >> 2] * d36;
11554 d43 = d35 * +HEAPF32[i19 + (i5 * 152 | 0) + 84 >> 2] + d36 * +HEAPF32[i19 + (i5 * 152 | 0) + 92 >> 2];
11555 d40 = -d44;
11556 d39 = -d43;
11557 if (!(!(d44 <= -0.0) | !(d43 <= -0.0))) {
11558 d37 = d40 - d31;
11559 d43 = d39 - d34;
11560 d38 = d17 * d37;
11561 d37 = d16 * d37;
11562 d44 = d17 * d43;
11563 d43 = d16 * d43;
11564 d35 = d38 + d44;
11565 d36 = d37 + d43;
11566 HEAPF32[i32 >> 2] = d40;
11567 HEAPF32[i33 >> 2] = d39;
11568 d21 = d21 - d12 * d35;
11569 d20 = d20 - d12 * d36;
11570 d14 = d14 + d11 * d35;
11571 d13 = d13 + d11 * d36;
11572 d18 = d18 - d10 * (d30 * d37 - d26 * d38 + (d29 * d43 - d28 * d44));
11573 d15 = d15 + d9 * (d24 * d37 - d23 * d38 + (d25 * d43 - d27 * d44));
11574 break;
11575 }
11576 d44 = d35 * +HEAPF32[i19 + (i5 * 152 | 0) + 24 >> 2];
11577 d39 = -d44;
11578 if (d44 <= -0.0 ? d36 + d38 * d39 >= 0.0 : 0) {
11579 d38 = d39 - d31;
11580 d43 = 0.0 - d34;
11581 d40 = d17 * d38;
11582 d38 = d16 * d38;
11583 d44 = d17 * d43;
11584 d43 = d16 * d43;
11585 d36 = d44 + d40;
11586 d37 = d43 + d38;
11587 HEAPF32[i32 >> 2] = d39;
11588 HEAPF32[i33 >> 2] = 0.0;
11589 d21 = d21 - d12 * d36;
11590 d20 = d20 - d12 * d37;
11591 d14 = d14 + d11 * d36;
11592 d13 = d13 + d11 * d37;
11593 d18 = d18 - d10 * (d38 * d30 - d40 * d26 + (d43 * d29 - d44 * d28));
11594 d15 = d15 + d9 * (d38 * d24 - d40 * d23 + (d43 * d25 - d44 * d27));
11595 break;
11596 }
11597 d44 = d36 * +HEAPF32[i19 + (i5 * 152 | 0) + 60 >> 2];
11598 d38 = -d44;
11599 if (d44 <= -0.0 ? d35 + d37 * d38 >= 0.0 : 0) {
11600 d39 = 0.0 - d31;
11601 d43 = d38 - d34;
11602 d40 = d17 * d39;
11603 d39 = d16 * d39;
11604 d44 = d17 * d43;
11605 d43 = d16 * d43;
11606 d36 = d40 + d44;
11607 d37 = d39 + d43;
11608 HEAPF32[i32 >> 2] = 0.0;
11609 HEAPF32[i33 >> 2] = d38;
11610 d21 = d21 - d12 * d36;
11611 d20 = d20 - d12 * d37;
11612 d14 = d14 + d11 * d36;
11613 d13 = d13 + d11 * d37;
11614 d18 = d18 - d10 * (d39 * d30 - d40 * d26 + (d43 * d29 - d44 * d28));
11615 d15 = d15 + d9 * (d39 * d24 - d40 * d23 + (d43 * d25 - d44 * d27));
11616 break;
11617 }
11618 if (!(!(d35 >= 0.0) | !(d36 >= 0.0))) {
11619 d39 = 0.0 - d31;
11620 d43 = 0.0 - d34;
11621 d40 = d17 * d39;
11622 d39 = d16 * d39;
11623 d44 = d17 * d43;
11624 d43 = d16 * d43;
11625 d37 = d40 + d44;
11626 d38 = d39 + d43;
11627 HEAPF32[i32 >> 2] = 0.0;
11628 HEAPF32[i33 >> 2] = 0.0;
11629 d21 = d21 - d12 * d37;
11630 d20 = d20 - d12 * d38;
11631 d14 = d14 + d11 * d37;
11632 d13 = d13 + d11 * d38;
11633 d18 = d18 - d10 * (d39 * d30 - d40 * d26 + (d43 * d29 - d44 * d28));
11634 d15 = d15 + d9 * (d39 * d24 - d40 * d23 + (d43 * d25 - d44 * d27));
11635 }
11636 } else {
11637 d23 = +HEAPF32[i19 + (i5 * 152 | 0) + 12 >> 2];
11638 d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 8 >> 2];
11639 d25 = +HEAPF32[i19 + (i5 * 152 | 0) + 4 >> 2];
11640 d26 = +HEAPF32[i22 >> 2];
11641 i22 = i19 + (i5 * 152 | 0) + 16 | 0;
11642 d27 = +HEAPF32[i22 >> 2];
11643 d28 = d27 - +HEAPF32[i19 + (i5 * 152 | 0) + 24 >> 2] * (d17 * (d14 - d15 * d23 - d21 + d18 * d25) + d16 * (d13 + d15 * d24 - d20 - d18 * d26) - +HEAPF32[i19 + (i5 * 152 | 0) + 32 >> 2]);
11644 d44 = d28 > 0.0 ? d28 : 0.0;
11645 d43 = d44 - d27;
11646 HEAPF32[i22 >> 2] = d44;
11647 d44 = d17 * d43;
11648 d43 = d16 * d43;
11649 d21 = d21 - d12 * d44;
11650 d20 = d20 - d12 * d43;
11651 d14 = d14 + d11 * d44;
11652 d13 = d13 + d11 * d43;
11653 d18 = d18 - d10 * (d26 * d43 - d25 * d44);
11654 d15 = d15 + d9 * (d24 * d43 - d23 * d44);
11655 }
11656 } while (0);
11657 d44 = +d21;
11658 d43 = +d20;
11659 i42 = i7;
11660 HEAPF32[i42 >> 2] = d44;
11661 HEAPF32[i42 + 4 >> 2] = d43;
11662 i42 = HEAP32[i4 >> 2] | 0;
11663 HEAPF32[i42 + (i8 * 12 | 0) + 8 >> 2] = d18;
11664 d43 = +d14;
11665 d44 = +d13;
11666 i42 = i42 + (i6 * 12 | 0) | 0;
11667 HEAPF32[i42 >> 2] = d43;
11668 HEAPF32[i42 + 4 >> 2] = d44;
11669 i42 = HEAP32[i4 >> 2] | 0;
11670 HEAPF32[i42 + (i6 * 12 | 0) + 8 >> 2] = d15;
11671 i5 = i5 + 1 | 0;
11672 if ((i5 | 0) >= (HEAP32[i2 >> 2] | 0)) {
11673 i2 = 21;
11674 break;
11675 }
11676 }
11677 if ((i2 | 0) == 4) {
11678 ___assert_fail(6648, 6520, 311, 6688);
11679 } else if ((i2 | 0) == 9) {
11680 ___assert_fail(6720, 6520, 406, 6688);
11681 } else if ((i2 | 0) == 21) {
11682 STACKTOP = i1;
11683 return;
11684 }
11685}
11686function __Z14b2TimeOfImpactP11b2TOIOutputPK10b2TOIInput(i3, i11) {
11687 i3 = i3 | 0;
11688 i11 = i11 | 0;
11689 var i1 = 0, i2 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0, d14 = 0.0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, d28 = 0.0, i29 = 0, d30 = 0.0, d31 = 0.0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0, i39 = 0, d40 = 0.0, i41 = 0, d42 = 0.0, d43 = 0.0, i44 = 0, i45 = 0, d46 = 0.0, i47 = 0, d48 = 0.0, d49 = 0.0, d50 = 0.0, d51 = 0.0, i52 = 0, d53 = 0.0, d54 = 0.0, d55 = 0.0, d56 = 0.0;
11690 i1 = STACKTOP;
11691 STACKTOP = STACKTOP + 320 | 0;
11692 i12 = i1 + 276 | 0;
11693 i10 = i1 + 240 | 0;
11694 i13 = i1 + 228 | 0;
11695 i5 = i1 + 136 | 0;
11696 i7 = i1 + 112 | 0;
11697 i8 = i1 + 8 | 0;
11698 i9 = i1 + 4 | 0;
11699 i4 = i1;
11700 HEAP32[874] = (HEAP32[874] | 0) + 1;
11701 HEAP32[i3 >> 2] = 0;
11702 i19 = i11 + 128 | 0;
11703 i2 = i3 + 4 | 0;
11704 HEAPF32[i2 >> 2] = +HEAPF32[i19 >> 2];
11705 i6 = i11 + 28 | 0;
11706 i16 = i12 + 0 | 0;
11707 i15 = i11 + 56 | 0;
11708 i17 = i16 + 36 | 0;
11709 do {
11710 HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
11711 i16 = i16 + 4 | 0;
11712 i15 = i15 + 4 | 0;
11713 } while ((i16 | 0) < (i17 | 0));
11714 i16 = i10 + 0 | 0;
11715 i15 = i11 + 92 | 0;
11716 i17 = i16 + 36 | 0;
11717 do {
11718 HEAP32[i16 >> 2] = HEAP32[i15 >> 2];
11719 i16 = i16 + 4 | 0;
11720 i15 = i15 + 4 | 0;
11721 } while ((i16 | 0) < (i17 | 0));
11722 i15 = i12 + 24 | 0;
11723 d42 = +HEAPF32[i15 >> 2];
11724 d43 = +Math_floor(+(d42 / 6.2831854820251465)) * 6.2831854820251465;
11725 d42 = d42 - d43;
11726 HEAPF32[i15 >> 2] = d42;
11727 i16 = i12 + 28 | 0;
11728 d43 = +HEAPF32[i16 >> 2] - d43;
11729 HEAPF32[i16 >> 2] = d43;
11730 i17 = i10 + 24 | 0;
11731 d46 = +HEAPF32[i17 >> 2];
11732 d40 = +Math_floor(+(d46 / 6.2831854820251465)) * 6.2831854820251465;
11733 d46 = d46 - d40;
11734 HEAPF32[i17 >> 2] = d46;
11735 i18 = i10 + 28 | 0;
11736 d40 = +HEAPF32[i18 >> 2] - d40;
11737 HEAPF32[i18 >> 2] = d40;
11738 d14 = +HEAPF32[i19 >> 2];
11739 d28 = +HEAPF32[i11 + 24 >> 2] + +HEAPF32[i11 + 52 >> 2] + -.014999999664723873;
11740 d28 = d28 < .004999999888241291 ? .004999999888241291 : d28;
11741 if (!(d28 > .0012499999720603228)) {
11742 ___assert_fail(3536, 3560, 280, 3600);
11743 }
11744 HEAP16[i13 + 4 >> 1] = 0;
11745 HEAP32[i5 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
11746 HEAP32[i5 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
11747 HEAP32[i5 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
11748 HEAP32[i5 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
11749 HEAP32[i5 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
11750 HEAP32[i5 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
11751 HEAP32[i5 + 24 >> 2] = HEAP32[i11 + 24 >> 2];
11752 i38 = i5 + 28 | 0;
11753 HEAP32[i38 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
11754 HEAP32[i38 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
11755 HEAP32[i38 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
11756 HEAP32[i38 + 12 >> 2] = HEAP32[i6 + 12 >> 2];
11757 HEAP32[i38 + 16 >> 2] = HEAP32[i6 + 16 >> 2];
11758 HEAP32[i38 + 20 >> 2] = HEAP32[i6 + 20 >> 2];
11759 HEAP32[i38 + 24 >> 2] = HEAP32[i6 + 24 >> 2];
11760 HEAP8[i5 + 88 | 0] = 0;
11761 i38 = i12 + 8 | 0;
11762 i27 = i12 + 12 | 0;
11763 i29 = i12 + 16 | 0;
11764 i22 = i12 + 20 | 0;
11765 i32 = i12 + 4 | 0;
11766 i34 = i10 + 8 | 0;
11767 i36 = i10 + 12 | 0;
11768 i35 = i10 + 16 | 0;
11769 i37 = i10 + 20 | 0;
11770 i33 = i10 + 4 | 0;
11771 i26 = i5 + 56 | 0;
11772 i25 = i5 + 64 | 0;
11773 i24 = i5 + 68 | 0;
11774 i23 = i5 + 72 | 0;
11775 i20 = i5 + 80 | 0;
11776 i19 = i5 + 84 | 0;
11777 i21 = i7 + 16 | 0;
11778 d30 = d28 + .0012499999720603228;
11779 d31 = d28 + -.0012499999720603228;
11780 d48 = d40;
11781 i39 = 0;
11782 d40 = 0.0;
11783 L4 : while (1) {
11784 d56 = 1.0 - d40;
11785 d49 = d56 * d42 + d40 * d43;
11786 d43 = +Math_sin(+d49);
11787 d49 = +Math_cos(+d49);
11788 d55 = +HEAPF32[i12 >> 2];
11789 d54 = +HEAPF32[i32 >> 2];
11790 d42 = d56 * d46 + d40 * d48;
11791 d53 = +Math_sin(+d42);
11792 d42 = +Math_cos(+d42);
11793 d46 = +HEAPF32[i10 >> 2];
11794 d51 = +HEAPF32[i33 >> 2];
11795 d50 = d56 * +HEAPF32[i34 >> 2] + d40 * +HEAPF32[i35 >> 2] - (d42 * d46 - d53 * d51);
11796 d51 = d56 * +HEAPF32[i36 >> 2] + d40 * +HEAPF32[i37 >> 2] - (d53 * d46 + d42 * d51);
11797 d46 = +(d56 * +HEAPF32[i38 >> 2] + d40 * +HEAPF32[i29 >> 2] - (d49 * d55 - d43 * d54));
11798 d48 = +(d56 * +HEAPF32[i27 >> 2] + d40 * +HEAPF32[i22 >> 2] - (d43 * d55 + d49 * d54));
11799 i52 = i26;
11800 HEAPF32[i52 >> 2] = d46;
11801 HEAPF32[i52 + 4 >> 2] = d48;
11802 HEAPF32[i25 >> 2] = d43;
11803 HEAPF32[i24 >> 2] = d49;
11804 d50 = +d50;
11805 d51 = +d51;
11806 i52 = i23;
11807 HEAPF32[i52 >> 2] = d50;
11808 HEAPF32[i52 + 4 >> 2] = d51;
11809 HEAPF32[i20 >> 2] = d53;
11810 HEAPF32[i19 >> 2] = d42;
11811 __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i7, i13, i5);
11812 d42 = +HEAPF32[i21 >> 2];
11813 if (d42 <= 0.0) {
11814 i4 = 5;
11815 break;
11816 }
11817 if (d42 < d30) {
11818 i4 = 7;
11819 break;
11820 }
11821 +__ZN20b2SeparationFunction10InitializeEPK14b2SimplexCachePK15b2DistanceProxyRK7b2SweepS5_S8_f(i8, i13, i11, i12, i6, i10, d40);
11822 i41 = 0;
11823 d42 = d14;
11824 do {
11825 d50 = +__ZNK20b2SeparationFunction17FindMinSeparationEPiS0_f(i8, i9, i4, d42);
11826 if (d50 > d30) {
11827 i4 = 10;
11828 break L4;
11829 }
11830 if (d50 > d31) {
11831 d40 = d42;
11832 break;
11833 }
11834 i45 = HEAP32[i9 >> 2] | 0;
11835 i44 = HEAP32[i4 >> 2] | 0;
11836 d48 = +__ZNK20b2SeparationFunction8EvaluateEiif(i8, i45, i44, d40);
11837 if (d48 < d31) {
11838 i4 = 13;
11839 break L4;
11840 }
11841 if (!(d48 <= d30)) {
11842 d43 = d40;
11843 d46 = d42;
11844 i47 = 0;
11845 } else {
11846 i4 = 15;
11847 break L4;
11848 }
11849 while (1) {
11850 if ((i47 & 1 | 0) == 0) {
11851 d49 = (d43 + d46) * .5;
11852 } else {
11853 d49 = d43 + (d28 - d48) * (d46 - d43) / (d50 - d48);
11854 }
11855 d51 = +__ZNK20b2SeparationFunction8EvaluateEiif(i8, i45, i44, d49);
11856 d53 = d51 - d28;
11857 if (!(d53 > 0.0)) {
11858 d53 = -d53;
11859 }
11860 if (d53 < .0012499999720603228) {
11861 d42 = d49;
11862 break;
11863 }
11864 i52 = d51 > d28;
11865 i47 = i47 + 1 | 0;
11866 HEAP32[880] = (HEAP32[880] | 0) + 1;
11867 if ((i47 | 0) == 50) {
11868 i47 = 50;
11869 break;
11870 } else {
11871 d43 = i52 ? d49 : d43;
11872 d46 = i52 ? d46 : d49;
11873 d48 = i52 ? d51 : d48;
11874 d50 = i52 ? d50 : d51;
11875 }
11876 }
11877 i44 = HEAP32[882] | 0;
11878 HEAP32[882] = (i44 | 0) > (i47 | 0) ? i44 : i47;
11879 i41 = i41 + 1 | 0;
11880 } while ((i41 | 0) != 8);
11881 i39 = i39 + 1 | 0;
11882 HEAP32[876] = (HEAP32[876] | 0) + 1;
11883 if ((i39 | 0) == 20) {
11884 i4 = 27;
11885 break;
11886 }
11887 d42 = +HEAPF32[i15 >> 2];
11888 d43 = +HEAPF32[i16 >> 2];
11889 d46 = +HEAPF32[i17 >> 2];
11890 d48 = +HEAPF32[i18 >> 2];
11891 }
11892 if ((i4 | 0) == 5) {
11893 HEAP32[i3 >> 2] = 2;
11894 HEAPF32[i2 >> 2] = 0.0;
11895 i2 = HEAP32[878] | 0;
11896 i52 = (i2 | 0) > (i39 | 0);
11897 i52 = i52 ? i2 : i39;
11898 HEAP32[878] = i52;
11899 STACKTOP = i1;
11900 return;
11901 } else if ((i4 | 0) == 7) {
11902 HEAP32[i3 >> 2] = 3;
11903 HEAPF32[i2 >> 2] = d40;
11904 i2 = HEAP32[878] | 0;
11905 i52 = (i2 | 0) > (i39 | 0);
11906 i52 = i52 ? i2 : i39;
11907 HEAP32[878] = i52;
11908 STACKTOP = i1;
11909 return;
11910 } else if ((i4 | 0) == 10) {
11911 HEAP32[i3 >> 2] = 4;
11912 HEAPF32[i2 >> 2] = d14;
11913 } else if ((i4 | 0) == 13) {
11914 HEAP32[i3 >> 2] = 1;
11915 HEAPF32[i2 >> 2] = d40;
11916 } else if ((i4 | 0) == 15) {
11917 HEAP32[i3 >> 2] = 3;
11918 HEAPF32[i2 >> 2] = d40;
11919 } else if ((i4 | 0) == 27) {
11920 HEAP32[i3 >> 2] = 1;
11921 HEAPF32[i2 >> 2] = d40;
11922 i39 = 20;
11923 i2 = HEAP32[878] | 0;
11924 i52 = (i2 | 0) > (i39 | 0);
11925 i52 = i52 ? i2 : i39;
11926 HEAP32[878] = i52;
11927 STACKTOP = i1;
11928 return;
11929 }
11930 HEAP32[876] = (HEAP32[876] | 0) + 1;
11931 i39 = i39 + 1 | 0;
11932 i2 = HEAP32[878] | 0;
11933 i52 = (i2 | 0) > (i39 | 0);
11934 i52 = i52 ? i2 : i39;
11935 HEAP32[878] = i52;
11936 STACKTOP = i1;
11937 return;
11938}
11939function __ZN7b2World5SolveERK10b2TimeStep(i5, i15) {
11940 i5 = i5 | 0;
11941 i15 = i15 | 0;
11942 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, i38 = 0, d39 = 0.0;
11943 i3 = STACKTOP;
11944 STACKTOP = STACKTOP + 96 | 0;
11945 i4 = i3 + 32 | 0;
11946 i9 = i3;
11947 i2 = i3 + 84 | 0;
11948 i11 = i5 + 103008 | 0;
11949 HEAPF32[i11 >> 2] = 0.0;
11950 i14 = i5 + 103012 | 0;
11951 HEAPF32[i14 >> 2] = 0.0;
11952 i8 = i5 + 103016 | 0;
11953 HEAPF32[i8 >> 2] = 0.0;
11954 i16 = i5 + 102960 | 0;
11955 i1 = i5 + 102872 | 0;
11956 i6 = i5 + 68 | 0;
11957 __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i4, HEAP32[i16 >> 2] | 0, HEAP32[i5 + 102936 >> 2] | 0, HEAP32[i5 + 102964 >> 2] | 0, i6, HEAP32[i5 + 102944 >> 2] | 0);
11958 i7 = i5 + 102952 | 0;
11959 i17 = HEAP32[i7 >> 2] | 0;
11960 if ((i17 | 0) != 0) {
11961 do {
11962 i38 = i17 + 4 | 0;
11963 HEAP16[i38 >> 1] = HEAP16[i38 >> 1] & 65534;
11964 i17 = HEAP32[i17 + 96 >> 2] | 0;
11965 } while ((i17 | 0) != 0);
11966 }
11967 i17 = HEAP32[i5 + 102932 >> 2] | 0;
11968 if ((i17 | 0) != 0) {
11969 do {
11970 i38 = i17 + 4 | 0;
11971 HEAP32[i38 >> 2] = HEAP32[i38 >> 2] & -2;
11972 i17 = HEAP32[i17 + 12 >> 2] | 0;
11973 } while ((i17 | 0) != 0);
11974 }
11975 i17 = HEAP32[i5 + 102956 >> 2] | 0;
11976 if ((i17 | 0) != 0) {
11977 do {
11978 HEAP8[i17 + 60 | 0] = 0;
11979 i17 = HEAP32[i17 + 12 >> 2] | 0;
11980 } while ((i17 | 0) != 0);
11981 }
11982 i24 = HEAP32[i16 >> 2] | 0;
11983 i16 = __ZN16b2StackAllocator8AllocateEi(i6, i24 << 2) | 0;
11984 i32 = HEAP32[i7 >> 2] | 0;
11985 L13 : do {
11986 if ((i32 | 0) != 0) {
11987 i18 = i4 + 28 | 0;
11988 i30 = i4 + 36 | 0;
11989 i27 = i4 + 32 | 0;
11990 i17 = i4 + 40 | 0;
11991 i23 = i4 + 8 | 0;
11992 i29 = i4 + 48 | 0;
11993 i28 = i4 + 16 | 0;
11994 i26 = i4 + 44 | 0;
11995 i31 = i4 + 12 | 0;
11996 i25 = i5 + 102968 | 0;
11997 i22 = i5 + 102976 | 0;
11998 i21 = i9 + 12 | 0;
11999 i20 = i9 + 16 | 0;
12000 i19 = i9 + 20 | 0;
12001 L15 : while (1) {
12002 i33 = i32 + 4 | 0;
12003 i34 = HEAP16[i33 >> 1] | 0;
12004 if ((i34 & 35) == 34 ? (HEAP32[i32 >> 2] | 0) != 0 : 0) {
12005 HEAP32[i18 >> 2] = 0;
12006 HEAP32[i30 >> 2] = 0;
12007 HEAP32[i27 >> 2] = 0;
12008 HEAP32[i16 >> 2] = i32;
12009 HEAP16[i33 >> 1] = i34 & 65535 | 1;
12010 i35 = 1;
12011 do {
12012 i35 = i35 + -1 | 0;
12013 i33 = HEAP32[i16 + (i35 << 2) >> 2] | 0;
12014 i34 = i33 + 4 | 0;
12015 i36 = HEAP16[i34 >> 1] | 0;
12016 if ((i36 & 32) == 0) {
12017 i8 = 13;
12018 break L15;
12019 }
12020 i37 = HEAP32[i18 >> 2] | 0;
12021 if ((i37 | 0) >= (HEAP32[i17 >> 2] | 0)) {
12022 i8 = 15;
12023 break L15;
12024 }
12025 HEAP32[i33 + 8 >> 2] = i37;
12026 i38 = HEAP32[i18 >> 2] | 0;
12027 HEAP32[(HEAP32[i23 >> 2] | 0) + (i38 << 2) >> 2] = i33;
12028 HEAP32[i18 >> 2] = i38 + 1;
12029 i36 = i36 & 65535;
12030 if ((i36 & 2 | 0) == 0) {
12031 HEAP16[i34 >> 1] = i36 | 2;
12032 HEAPF32[i33 + 144 >> 2] = 0.0;
12033 }
12034 if ((HEAP32[i33 >> 2] | 0) != 0) {
12035 i34 = HEAP32[i33 + 112 >> 2] | 0;
12036 if ((i34 | 0) != 0) {
12037 do {
12038 i38 = HEAP32[i34 + 4 >> 2] | 0;
12039 i36 = i38 + 4 | 0;
12040 if (((HEAP32[i36 >> 2] & 7 | 0) == 6 ? (HEAP8[(HEAP32[i38 + 48 >> 2] | 0) + 38 | 0] | 0) == 0 : 0) ? (HEAP8[(HEAP32[i38 + 52 >> 2] | 0) + 38 | 0] | 0) == 0 : 0) {
12041 i37 = HEAP32[i30 >> 2] | 0;
12042 if ((i37 | 0) >= (HEAP32[i26 >> 2] | 0)) {
12043 i8 = 25;
12044 break L15;
12045 }
12046 HEAP32[i30 >> 2] = i37 + 1;
12047 HEAP32[(HEAP32[i31 >> 2] | 0) + (i37 << 2) >> 2] = i38;
12048 HEAP32[i36 >> 2] = HEAP32[i36 >> 2] | 1;
12049 i38 = HEAP32[i34 >> 2] | 0;
12050 i36 = i38 + 4 | 0;
12051 i37 = HEAP16[i36 >> 1] | 0;
12052 if ((i37 & 1) == 0) {
12053 if ((i35 | 0) >= (i24 | 0)) {
12054 i8 = 28;
12055 break L15;
12056 }
12057 HEAP32[i16 + (i35 << 2) >> 2] = i38;
12058 HEAP16[i36 >> 1] = i37 & 65535 | 1;
12059 i35 = i35 + 1 | 0;
12060 }
12061 }
12062 i34 = HEAP32[i34 + 12 >> 2] | 0;
12063 } while ((i34 | 0) != 0);
12064 }
12065 i33 = HEAP32[i33 + 108 >> 2] | 0;
12066 if ((i33 | 0) != 0) {
12067 do {
12068 i37 = i33 + 4 | 0;
12069 i36 = HEAP32[i37 >> 2] | 0;
12070 if ((HEAP8[i36 + 60 | 0] | 0) == 0 ? (i10 = HEAP32[i33 >> 2] | 0, i13 = i10 + 4 | 0, i12 = HEAP16[i13 >> 1] | 0, !((i12 & 32) == 0)) : 0) {
12071 i34 = HEAP32[i27 >> 2] | 0;
12072 if ((i34 | 0) >= (HEAP32[i29 >> 2] | 0)) {
12073 i8 = 35;
12074 break L15;
12075 }
12076 HEAP32[i27 >> 2] = i34 + 1;
12077 HEAP32[(HEAP32[i28 >> 2] | 0) + (i34 << 2) >> 2] = i36;
12078 HEAP8[(HEAP32[i37 >> 2] | 0) + 60 | 0] = 1;
12079 if ((i12 & 1) == 0) {
12080 if ((i35 | 0) >= (i24 | 0)) {
12081 i8 = 38;
12082 break L15;
12083 }
12084 HEAP32[i16 + (i35 << 2) >> 2] = i10;
12085 HEAP16[i13 >> 1] = i12 & 65535 | 1;
12086 i35 = i35 + 1 | 0;
12087 }
12088 }
12089 i33 = HEAP32[i33 + 12 >> 2] | 0;
12090 } while ((i33 | 0) != 0);
12091 }
12092 }
12093 } while ((i35 | 0) > 0);
12094 __ZN8b2Island5SolveEP9b2ProfileRK10b2TimeStepRK6b2Vec2b(i4, i9, i15, i25, (HEAP8[i22] | 0) != 0);
12095 HEAPF32[i11 >> 2] = +HEAPF32[i21 >> 2] + +HEAPF32[i11 >> 2];
12096 HEAPF32[i14 >> 2] = +HEAPF32[i20 >> 2] + +HEAPF32[i14 >> 2];
12097 HEAPF32[i8 >> 2] = +HEAPF32[i19 >> 2] + +HEAPF32[i8 >> 2];
12098 i35 = HEAP32[i18 >> 2] | 0;
12099 if ((i35 | 0) > 0) {
12100 i33 = HEAP32[i23 >> 2] | 0;
12101 i36 = 0;
12102 do {
12103 i34 = HEAP32[i33 + (i36 << 2) >> 2] | 0;
12104 if ((HEAP32[i34 >> 2] | 0) == 0) {
12105 i38 = i34 + 4 | 0;
12106 HEAP16[i38 >> 1] = HEAP16[i38 >> 1] & 65534;
12107 }
12108 i36 = i36 + 1 | 0;
12109 } while ((i36 | 0) < (i35 | 0));
12110 }
12111 }
12112 i32 = HEAP32[i32 + 96 >> 2] | 0;
12113 if ((i32 | 0) == 0) {
12114 break L13;
12115 }
12116 }
12117 if ((i8 | 0) == 13) {
12118 ___assert_fail(2232, 2184, 445, 2256);
12119 } else if ((i8 | 0) == 15) {
12120 ___assert_fail(2520, 2440, 54, 2472);
12121 } else if ((i8 | 0) == 25) {
12122 ___assert_fail(2480, 2440, 62, 2472);
12123 } else if ((i8 | 0) == 28) {
12124 ___assert_fail(2264, 2184, 495, 2256);
12125 } else if ((i8 | 0) == 35) {
12126 ___assert_fail(2408, 2440, 68, 2472);
12127 } else if ((i8 | 0) == 38) {
12128 ___assert_fail(2264, 2184, 524, 2256);
12129 }
12130 }
12131 } while (0);
12132 __ZN16b2StackAllocator4FreeEPv(i6, i16);
12133 __ZN7b2TimerC2Ev(i2);
12134 i6 = HEAP32[i7 >> 2] | 0;
12135 if ((i6 | 0) == 0) {
12136 __ZN16b2ContactManager15FindNewContactsEv(i1);
12137 d39 = +__ZNK7b2Timer15GetMillisecondsEv(i2);
12138 i38 = i5 + 103020 | 0;
12139 HEAPF32[i38 >> 2] = d39;
12140 __ZN8b2IslandD2Ev(i4);
12141 STACKTOP = i3;
12142 return;
12143 }
12144 do {
12145 if (!((HEAP16[i6 + 4 >> 1] & 1) == 0) ? (HEAP32[i6 >> 2] | 0) != 0 : 0) {
12146 __ZN6b2Body19SynchronizeFixturesEv(i6);
12147 }
12148 i6 = HEAP32[i6 + 96 >> 2] | 0;
12149 } while ((i6 | 0) != 0);
12150 __ZN16b2ContactManager15FindNewContactsEv(i1);
12151 d39 = +__ZNK7b2Timer15GetMillisecondsEv(i2);
12152 i38 = i5 + 103020 | 0;
12153 HEAPF32[i38 >> 2] = d39;
12154 __ZN8b2IslandD2Ev(i4);
12155 STACKTOP = i3;
12156 return;
12157}
12158function __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i10) {
12159 i10 = i10 | 0;
12160 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, i31 = 0, d32 = 0.0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, i37 = 0, d38 = 0.0, d39 = 0.0, d40 = 0.0, d41 = 0.0, i42 = 0, d43 = 0.0, d44 = 0.0, d45 = 0.0, d46 = 0.0, d47 = 0.0, d48 = 0.0, i49 = 0, i50 = 0;
12161 i1 = STACKTOP;
12162 STACKTOP = STACKTOP + 64 | 0;
12163 i8 = i1 + 40 | 0;
12164 i3 = i1 + 24 | 0;
12165 i5 = i1;
12166 i4 = i10 + 48 | 0;
12167 if ((HEAP32[i4 >> 2] | 0) <= 0) {
12168 STACKTOP = i1;
12169 return;
12170 }
12171 i9 = i10 + 40 | 0;
12172 i2 = i10 + 36 | 0;
12173 i7 = i10 + 44 | 0;
12174 i6 = i10 + 24 | 0;
12175 i13 = i10 + 28 | 0;
12176 i14 = i8 + 8 | 0;
12177 i12 = i8 + 12 | 0;
12178 i11 = i3 + 8 | 0;
12179 i10 = i3 + 12 | 0;
12180 i16 = 0;
12181 while (1) {
12182 i15 = HEAP32[i9 >> 2] | 0;
12183 i33 = HEAP32[i2 >> 2] | 0;
12184 i31 = HEAP32[(HEAP32[i7 >> 2] | 0) + (HEAP32[i15 + (i16 * 152 | 0) + 148 >> 2] << 2) >> 2] | 0;
12185 i35 = HEAP32[i15 + (i16 * 152 | 0) + 112 >> 2] | 0;
12186 i42 = HEAP32[i15 + (i16 * 152 | 0) + 116 >> 2] | 0;
12187 d30 = +HEAPF32[i15 + (i16 * 152 | 0) + 120 >> 2];
12188 d24 = +HEAPF32[i15 + (i16 * 152 | 0) + 124 >> 2];
12189 d17 = +HEAPF32[i15 + (i16 * 152 | 0) + 128 >> 2];
12190 d18 = +HEAPF32[i15 + (i16 * 152 | 0) + 132 >> 2];
12191 i36 = i33 + (i16 * 88 | 0) + 48 | 0;
12192 d39 = +HEAPF32[i36 >> 2];
12193 d40 = +HEAPF32[i36 + 4 >> 2];
12194 i36 = i33 + (i16 * 88 | 0) + 56 | 0;
12195 d41 = +HEAPF32[i36 >> 2];
12196 d43 = +HEAPF32[i36 + 4 >> 2];
12197 i36 = HEAP32[i6 >> 2] | 0;
12198 i37 = i36 + (i35 * 12 | 0) | 0;
12199 d26 = +HEAPF32[i37 >> 2];
12200 d27 = +HEAPF32[i37 + 4 >> 2];
12201 d32 = +HEAPF32[i36 + (i35 * 12 | 0) + 8 >> 2];
12202 i37 = HEAP32[i13 >> 2] | 0;
12203 i34 = i37 + (i35 * 12 | 0) | 0;
12204 d22 = +HEAPF32[i34 >> 2];
12205 d25 = +HEAPF32[i34 + 4 >> 2];
12206 d23 = +HEAPF32[i37 + (i35 * 12 | 0) + 8 >> 2];
12207 i35 = i36 + (i42 * 12 | 0) | 0;
12208 d28 = +HEAPF32[i35 >> 2];
12209 d29 = +HEAPF32[i35 + 4 >> 2];
12210 d38 = +HEAPF32[i36 + (i42 * 12 | 0) + 8 >> 2];
12211 i36 = i37 + (i42 * 12 | 0) | 0;
12212 d20 = +HEAPF32[i36 >> 2];
12213 d19 = +HEAPF32[i36 + 4 >> 2];
12214 d21 = +HEAPF32[i37 + (i42 * 12 | 0) + 8 >> 2];
12215 if ((HEAP32[i31 + 124 >> 2] | 0) <= 0) {
12216 i2 = 4;
12217 break;
12218 }
12219 d44 = +HEAPF32[i33 + (i16 * 88 | 0) + 80 >> 2];
12220 d45 = +HEAPF32[i33 + (i16 * 88 | 0) + 76 >> 2];
12221 d47 = +Math_sin(+d32);
12222 HEAPF32[i14 >> 2] = d47;
12223 d48 = +Math_cos(+d32);
12224 HEAPF32[i12 >> 2] = d48;
12225 d32 = +Math_sin(+d38);
12226 HEAPF32[i11 >> 2] = d32;
12227 d38 = +Math_cos(+d38);
12228 HEAPF32[i10 >> 2] = d38;
12229 d46 = +(d26 - (d39 * d48 - d40 * d47));
12230 d40 = +(d27 - (d40 * d48 + d39 * d47));
12231 i37 = i8;
12232 HEAPF32[i37 >> 2] = d46;
12233 HEAPF32[i37 + 4 >> 2] = d40;
12234 d40 = +(d28 - (d41 * d38 - d43 * d32));
12235 d43 = +(d29 - (d43 * d38 + d41 * d32));
12236 i37 = i3;
12237 HEAPF32[i37 >> 2] = d40;
12238 HEAPF32[i37 + 4 >> 2] = d43;
12239 __ZN15b2WorldManifold10InitializeEPK10b2ManifoldRK11b2TransformfS5_f(i5, i31 + 64 | 0, i8, d45, i3, d44);
12240 i37 = i15 + (i16 * 152 | 0) + 72 | 0;
12241 i42 = i5;
12242 i33 = HEAP32[i42 + 4 >> 2] | 0;
12243 i31 = i37;
12244 HEAP32[i31 >> 2] = HEAP32[i42 >> 2];
12245 HEAP32[i31 + 4 >> 2] = i33;
12246 i31 = i15 + (i16 * 152 | 0) + 144 | 0;
12247 i33 = HEAP32[i31 >> 2] | 0;
12248 do {
12249 if ((i33 | 0) > 0) {
12250 i36 = i15 + (i16 * 152 | 0) + 76 | 0;
12251 d32 = d30 + d24;
12252 i35 = i15 + (i16 * 152 | 0) + 140 | 0;
12253 i34 = 0;
12254 do {
12255 i49 = i5 + (i34 << 3) + 8 | 0;
12256 d41 = +HEAPF32[i49 >> 2] - d26;
12257 i42 = i5 + (i34 << 3) + 12 | 0;
12258 d39 = +d41;
12259 d40 = +(+HEAPF32[i42 >> 2] - d27);
12260 i50 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) | 0;
12261 HEAPF32[i50 >> 2] = d39;
12262 HEAPF32[i50 + 4 >> 2] = d40;
12263 d40 = +HEAPF32[i49 >> 2] - d28;
12264 d39 = +d40;
12265 d47 = +(+HEAPF32[i42 >> 2] - d29);
12266 i42 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 8 | 0;
12267 HEAPF32[i42 >> 2] = d39;
12268 HEAPF32[i42 + 4 >> 2] = d47;
12269 d47 = +HEAPF32[i36 >> 2];
12270 d39 = +HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 4 >> 2];
12271 d43 = +HEAPF32[i37 >> 2];
12272 d48 = d41 * d47 - d39 * d43;
12273 d38 = +HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 12 >> 2];
12274 d43 = d47 * d40 - d43 * d38;
12275 d43 = d32 + d48 * d17 * d48 + d43 * d18 * d43;
12276 if (d43 > 0.0) {
12277 d43 = 1.0 / d43;
12278 } else {
12279 d43 = 0.0;
12280 }
12281 HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 24 >> 2] = d43;
12282 d43 = +HEAPF32[i36 >> 2];
12283 d47 = -+HEAPF32[i37 >> 2];
12284 d48 = d41 * d47 - d43 * d39;
12285 d43 = d40 * d47 - d43 * d38;
12286 d43 = d32 + d48 * d17 * d48 + d43 * d18 * d43;
12287 if (d43 > 0.0) {
12288 d43 = 1.0 / d43;
12289 } else {
12290 d43 = 0.0;
12291 }
12292 HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 28 >> 2] = d43;
12293 i42 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 32 | 0;
12294 HEAPF32[i42 >> 2] = 0.0;
12295 d38 = +HEAPF32[i37 >> 2] * (d20 - d21 * d38 - d22 + d23 * d39) + +HEAPF32[i36 >> 2] * (d19 + d21 * d40 - d25 - d23 * d41);
12296 if (d38 < -1.0) {
12297 HEAPF32[i42 >> 2] = -(d38 * +HEAPF32[i35 >> 2]);
12298 }
12299 i34 = i34 + 1 | 0;
12300 } while ((i34 | 0) != (i33 | 0));
12301 if ((HEAP32[i31 >> 2] | 0) == 2) {
12302 d45 = +HEAPF32[i15 + (i16 * 152 | 0) + 76 >> 2];
12303 d20 = +HEAPF32[i37 >> 2];
12304 d44 = +HEAPF32[i15 + (i16 * 152 | 0) >> 2] * d45 - +HEAPF32[i15 + (i16 * 152 | 0) + 4 >> 2] * d20;
12305 d19 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 8 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 12 >> 2];
12306 d47 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 36 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 40 >> 2];
12307 d20 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 44 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 48 >> 2];
12308 d45 = d30 + d24;
12309 d46 = d17 * d44;
12310 d48 = d18 * d19;
12311 d19 = d45 + d44 * d46 + d19 * d48;
12312 d18 = d45 + d47 * d17 * d47 + d20 * d18 * d20;
12313 d17 = d45 + d46 * d47 + d48 * d20;
12314 d20 = d19 * d18 - d17 * d17;
12315 if (!(d19 * d19 < d20 * 1.0e3)) {
12316 HEAP32[i31 >> 2] = 1;
12317 break;
12318 }
12319 HEAPF32[i15 + (i16 * 152 | 0) + 96 >> 2] = d19;
12320 HEAPF32[i15 + (i16 * 152 | 0) + 100 >> 2] = d17;
12321 HEAPF32[i15 + (i16 * 152 | 0) + 104 >> 2] = d17;
12322 HEAPF32[i15 + (i16 * 152 | 0) + 108 >> 2] = d18;
12323 if (d20 != 0.0) {
12324 d20 = 1.0 / d20;
12325 }
12326 d48 = -(d20 * d17);
12327 HEAPF32[i15 + (i16 * 152 | 0) + 80 >> 2] = d18 * d20;
12328 HEAPF32[i15 + (i16 * 152 | 0) + 84 >> 2] = d48;
12329 HEAPF32[i15 + (i16 * 152 | 0) + 88 >> 2] = d48;
12330 HEAPF32[i15 + (i16 * 152 | 0) + 92 >> 2] = d19 * d20;
12331 }
12332 }
12333 } while (0);
12334 i16 = i16 + 1 | 0;
12335 if ((i16 | 0) >= (HEAP32[i4 >> 2] | 0)) {
12336 i2 = 21;
12337 break;
12338 }
12339 }
12340 if ((i2 | 0) == 4) {
12341 ___assert_fail(6584, 6520, 168, 6616);
12342 } else if ((i2 | 0) == 21) {
12343 STACKTOP = i1;
12344 return;
12345 }
12346}
12347function __Z17b2CollidePolygonsP10b2ManifoldPK14b2PolygonShapeRK11b2TransformS3_S6_(i5, i27, i28, i24, i14) {
12348 i5 = i5 | 0;
12349 i27 = i27 | 0;
12350 i28 = i28 | 0;
12351 i24 = i24 | 0;
12352 i14 = i14 | 0;
12353 var i1 = 0, i2 = 0, d3 = 0.0, i4 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, d15 = 0.0, d16 = 0.0, i17 = 0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0, d22 = 0.0, d23 = 0.0, d25 = 0.0, d26 = 0.0, d29 = 0.0, d30 = 0.0, i31 = 0, d32 = 0.0, i33 = 0, i34 = 0, d35 = 0.0, d36 = 0.0, d37 = 0.0, d38 = 0.0;
12354 i1 = STACKTOP;
12355 STACKTOP = STACKTOP + 96 | 0;
12356 i17 = i1 + 92 | 0;
12357 i20 = i1 + 88 | 0;
12358 i13 = i1;
12359 i11 = i1 + 80 | 0;
12360 i12 = i1 + 56 | 0;
12361 i4 = i1 + 32 | 0;
12362 i10 = i1 + 24 | 0;
12363 i2 = i5 + 60 | 0;
12364 HEAP32[i2 >> 2] = 0;
12365 d3 = +HEAPF32[i27 + 8 >> 2] + +HEAPF32[i24 + 8 >> 2];
12366 HEAP32[i17 >> 2] = 0;
12367 d7 = +__ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i17, i27, i28, i24, i14);
12368 if (d7 > d3) {
12369 STACKTOP = i1;
12370 return;
12371 }
12372 HEAP32[i20 >> 2] = 0;
12373 d6 = +__ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i20, i24, i14, i27, i28);
12374 if (d6 > d3) {
12375 STACKTOP = i1;
12376 return;
12377 }
12378 if (d6 > d7 * .9800000190734863 + .0010000000474974513) {
12379 d18 = +HEAPF32[i14 >> 2];
12380 d19 = +HEAPF32[i14 + 4 >> 2];
12381 d15 = +HEAPF32[i14 + 8 >> 2];
12382 d16 = +HEAPF32[i14 + 12 >> 2];
12383 d9 = +HEAPF32[i28 >> 2];
12384 d6 = +HEAPF32[i28 + 4 >> 2];
12385 d7 = +HEAPF32[i28 + 8 >> 2];
12386 d8 = +HEAPF32[i28 + 12 >> 2];
12387 i17 = HEAP32[i20 >> 2] | 0;
12388 HEAP32[i5 + 56 >> 2] = 2;
12389 i14 = 1;
12390 i20 = i24;
12391 } else {
12392 d18 = +HEAPF32[i28 >> 2];
12393 d19 = +HEAPF32[i28 + 4 >> 2];
12394 d15 = +HEAPF32[i28 + 8 >> 2];
12395 d16 = +HEAPF32[i28 + 12 >> 2];
12396 d9 = +HEAPF32[i14 >> 2];
12397 d6 = +HEAPF32[i14 + 4 >> 2];
12398 d7 = +HEAPF32[i14 + 8 >> 2];
12399 d8 = +HEAPF32[i14 + 12 >> 2];
12400 i17 = HEAP32[i17 >> 2] | 0;
12401 HEAP32[i5 + 56 >> 2] = 1;
12402 i14 = 0;
12403 i20 = i27;
12404 i27 = i24;
12405 }
12406 i28 = HEAP32[i27 + 148 >> 2] | 0;
12407 if (!((i17 | 0) > -1)) {
12408 ___assert_fail(5640, 5688, 151, 5728);
12409 }
12410 i24 = HEAP32[i20 + 148 >> 2] | 0;
12411 if ((i24 | 0) <= (i17 | 0)) {
12412 ___assert_fail(5640, 5688, 151, 5728);
12413 }
12414 d21 = +HEAPF32[i20 + (i17 << 3) + 84 >> 2];
12415 d36 = +HEAPF32[i20 + (i17 << 3) + 88 >> 2];
12416 d22 = d16 * d21 - d15 * d36;
12417 d36 = d15 * d21 + d16 * d36;
12418 d21 = d8 * d22 + d7 * d36;
12419 d22 = d8 * d36 - d7 * d22;
12420 if ((i28 | 0) > 0) {
12421 i33 = 0;
12422 i34 = 0;
12423 d23 = 3.4028234663852886e+38;
12424 while (1) {
12425 d25 = d21 * +HEAPF32[i27 + (i33 << 3) + 84 >> 2] + d22 * +HEAPF32[i27 + (i33 << 3) + 88 >> 2];
12426 i31 = d25 < d23;
12427 i34 = i31 ? i33 : i34;
12428 i33 = i33 + 1 | 0;
12429 if ((i33 | 0) == (i28 | 0)) {
12430 break;
12431 } else {
12432 d23 = i31 ? d25 : d23;
12433 }
12434 }
12435 } else {
12436 i34 = 0;
12437 }
12438 i31 = i34 + 1 | 0;
12439 i33 = (i31 | 0) < (i28 | 0) ? i31 : 0;
12440 d35 = +HEAPF32[i27 + (i34 << 3) + 20 >> 2];
12441 d32 = +HEAPF32[i27 + (i34 << 3) + 24 >> 2];
12442 d36 = +(d9 + (d8 * d35 - d7 * d32));
12443 d32 = +(d6 + (d7 * d35 + d8 * d32));
12444 i31 = i13;
12445 HEAPF32[i31 >> 2] = d36;
12446 HEAPF32[i31 + 4 >> 2] = d32;
12447 i31 = i17 & 255;
12448 i28 = i13 + 8 | 0;
12449 HEAP8[i28] = i31;
12450 HEAP8[i28 + 1 | 0] = i34;
12451 HEAP8[i28 + 2 | 0] = 1;
12452 HEAP8[i28 + 3 | 0] = 0;
12453 d32 = +HEAPF32[i27 + (i33 << 3) + 20 >> 2];
12454 d36 = +HEAPF32[i27 + (i33 << 3) + 24 >> 2];
12455 d35 = +(d9 + (d8 * d32 - d7 * d36));
12456 d36 = +(d6 + (d7 * d32 + d8 * d36));
12457 i27 = i13 + 12 | 0;
12458 HEAPF32[i27 >> 2] = d35;
12459 HEAPF32[i27 + 4 >> 2] = d36;
12460 i27 = i13 + 20 | 0;
12461 HEAP8[i27] = i31;
12462 HEAP8[i27 + 1 | 0] = i33;
12463 HEAP8[i27 + 2 | 0] = 1;
12464 HEAP8[i27 + 3 | 0] = 0;
12465 i27 = i17 + 1 | 0;
12466 i24 = (i27 | 0) < (i24 | 0) ? i27 : 0;
12467 i34 = i20 + (i17 << 3) + 20 | 0;
12468 d26 = +HEAPF32[i34 >> 2];
12469 d25 = +HEAPF32[i34 + 4 >> 2];
12470 i34 = i20 + (i24 << 3) + 20 | 0;
12471 d30 = +HEAPF32[i34 >> 2];
12472 d29 = +HEAPF32[i34 + 4 >> 2];
12473 d32 = d30 - d26;
12474 d35 = d29 - d25;
12475 d21 = +Math_sqrt(+(d32 * d32 + d35 * d35));
12476 if (!(d21 < 1.1920928955078125e-7)) {
12477 d36 = 1.0 / d21;
12478 d32 = d32 * d36;
12479 d35 = d35 * d36;
12480 }
12481 d36 = d16 * d32 - d15 * d35;
12482 d21 = d16 * d35 + d15 * d32;
12483 HEAPF32[i11 >> 2] = d36;
12484 HEAPF32[i11 + 4 >> 2] = d21;
12485 d22 = -d36;
12486 d38 = d18 + (d16 * d26 - d15 * d25);
12487 d37 = d19 + (d15 * d26 + d16 * d25);
12488 d23 = d38 * d21 + d37 * d22;
12489 HEAPF32[i10 >> 2] = d22;
12490 HEAPF32[i10 + 4 >> 2] = -d21;
12491 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i12, i13, i10, d3 - (d38 * d36 + d37 * d21), i17) | 0) < 2) {
12492 STACKTOP = i1;
12493 return;
12494 }
12495 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i4, i12, i11, d3 + ((d18 + (d16 * d30 - d15 * d29)) * d36 + (d19 + (d15 * d30 + d16 * d29)) * d21), i24) | 0) < 2) {
12496 STACKTOP = i1;
12497 return;
12498 }
12499 d16 = +d35;
12500 d15 = +-d32;
12501 i10 = i5 + 40 | 0;
12502 HEAPF32[i10 >> 2] = d16;
12503 HEAPF32[i10 + 4 >> 2] = d15;
12504 d15 = +((d26 + d30) * .5);
12505 d16 = +((d25 + d29) * .5);
12506 i10 = i5 + 48 | 0;
12507 HEAPF32[i10 >> 2] = d15;
12508 HEAPF32[i10 + 4 >> 2] = d16;
12509 d16 = +HEAPF32[i4 >> 2];
12510 d15 = +HEAPF32[i4 + 4 >> 2];
12511 i10 = !(d21 * d16 + d15 * d22 - d23 <= d3);
12512 if (i14 << 24 >> 24 == 0) {
12513 if (i10) {
12514 i10 = 0;
12515 } else {
12516 d38 = d16 - d9;
12517 d36 = d15 - d6;
12518 d37 = +(d8 * d38 + d7 * d36);
12519 d38 = +(d8 * d36 - d7 * d38);
12520 i10 = i5;
12521 HEAPF32[i10 >> 2] = d37;
12522 HEAPF32[i10 + 4 >> 2] = d38;
12523 HEAP32[i5 + 16 >> 2] = HEAP32[i4 + 8 >> 2];
12524 i10 = 1;
12525 }
12526 d16 = +HEAPF32[i4 + 12 >> 2];
12527 d15 = +HEAPF32[i4 + 16 >> 2];
12528 if (d21 * d16 + d15 * d22 - d23 <= d3) {
12529 d38 = d16 - d9;
12530 d36 = d15 - d6;
12531 d37 = +(d8 * d38 + d7 * d36);
12532 d38 = +(d8 * d36 - d7 * d38);
12533 i34 = i5 + (i10 * 20 | 0) | 0;
12534 HEAPF32[i34 >> 2] = d37;
12535 HEAPF32[i34 + 4 >> 2] = d38;
12536 HEAP32[i5 + (i10 * 20 | 0) + 16 >> 2] = HEAP32[i4 + 20 >> 2];
12537 i10 = i10 + 1 | 0;
12538 }
12539 } else {
12540 if (i10) {
12541 i10 = 0;
12542 } else {
12543 d38 = d16 - d9;
12544 d36 = d15 - d6;
12545 d37 = +(d8 * d38 + d7 * d36);
12546 d38 = +(d8 * d36 - d7 * d38);
12547 i10 = i5;
12548 HEAPF32[i10 >> 2] = d37;
12549 HEAPF32[i10 + 4 >> 2] = d38;
12550 i10 = i5 + 16 | 0;
12551 i34 = HEAP32[i4 + 8 >> 2] | 0;
12552 HEAP32[i10 >> 2] = i34;
12553 HEAP8[i10] = i34 >>> 8;
12554 HEAP8[i10 + 1 | 0] = i34;
12555 HEAP8[i10 + 2 | 0] = i34 >>> 24;
12556 HEAP8[i10 + 3 | 0] = i34 >>> 16;
12557 i10 = 1;
12558 }
12559 d16 = +HEAPF32[i4 + 12 >> 2];
12560 d15 = +HEAPF32[i4 + 16 >> 2];
12561 if (d21 * d16 + d15 * d22 - d23 <= d3) {
12562 d38 = d16 - d9;
12563 d36 = d15 - d6;
12564 d37 = +(d8 * d38 + d7 * d36);
12565 d38 = +(d8 * d36 - d7 * d38);
12566 i34 = i5 + (i10 * 20 | 0) | 0;
12567 HEAPF32[i34 >> 2] = d37;
12568 HEAPF32[i34 + 4 >> 2] = d38;
12569 i34 = i5 + (i10 * 20 | 0) + 16 | 0;
12570 i33 = HEAP32[i4 + 20 >> 2] | 0;
12571 HEAP32[i34 >> 2] = i33;
12572 HEAP8[i34] = i33 >>> 8;
12573 HEAP8[i34 + 1 | 0] = i33;
12574 HEAP8[i34 + 2 | 0] = i33 >>> 24;
12575 HEAP8[i34 + 3 | 0] = i33 >>> 16;
12576 i10 = i10 + 1 | 0;
12577 }
12578 }
12579 HEAP32[i2 >> 2] = i10;
12580 STACKTOP = i1;
12581 return;
12582}
12583function __ZN8b2Island8SolveTOIERK10b2TimeStepii(i4, i11, i15, i18) {
12584 i4 = i4 | 0;
12585 i11 = i11 | 0;
12586 i15 = i15 | 0;
12587 i18 = i18 | 0;
12588 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d16 = 0.0, d17 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, d26 = 0.0;
12589 i1 = STACKTOP;
12590 STACKTOP = STACKTOP + 128 | 0;
12591 i2 = i1 + 96 | 0;
12592 i10 = i1 + 52 | 0;
12593 i3 = i1;
12594 i6 = i4 + 28 | 0;
12595 i5 = HEAP32[i6 >> 2] | 0;
12596 if ((i5 | 0) <= (i15 | 0)) {
12597 ___assert_fail(5464, 5488, 386, 5520);
12598 }
12599 if ((i5 | 0) <= (i18 | 0)) {
12600 ___assert_fail(5536, 5488, 387, 5520);
12601 }
12602 if ((i5 | 0) > 0) {
12603 i9 = i4 + 8 | 0;
12604 i8 = i4 + 20 | 0;
12605 i7 = i4 + 24 | 0;
12606 i22 = 0;
12607 while (1) {
12608 i23 = HEAP32[(HEAP32[i9 >> 2] | 0) + (i22 << 2) >> 2] | 0;
12609 i5 = i23 + 44 | 0;
12610 i24 = HEAP32[i5 + 4 >> 2] | 0;
12611 i25 = (HEAP32[i8 >> 2] | 0) + (i22 * 12 | 0) | 0;
12612 HEAP32[i25 >> 2] = HEAP32[i5 >> 2];
12613 HEAP32[i25 + 4 >> 2] = i24;
12614 HEAPF32[(HEAP32[i8 >> 2] | 0) + (i22 * 12 | 0) + 8 >> 2] = +HEAPF32[i23 + 56 >> 2];
12615 i25 = i23 + 64 | 0;
12616 i24 = HEAP32[i25 + 4 >> 2] | 0;
12617 i5 = (HEAP32[i7 >> 2] | 0) + (i22 * 12 | 0) | 0;
12618 HEAP32[i5 >> 2] = HEAP32[i25 >> 2];
12619 HEAP32[i5 + 4 >> 2] = i24;
12620 i5 = HEAP32[i7 >> 2] | 0;
12621 HEAPF32[i5 + (i22 * 12 | 0) + 8 >> 2] = +HEAPF32[i23 + 72 >> 2];
12622 i22 = i22 + 1 | 0;
12623 if ((i22 | 0) >= (HEAP32[i6 >> 2] | 0)) {
12624 i22 = i5;
12625 break;
12626 }
12627 }
12628 } else {
12629 i8 = i4 + 20 | 0;
12630 i22 = HEAP32[i4 + 24 >> 2] | 0;
12631 }
12632 i5 = i4 + 12 | 0;
12633 HEAP32[i10 + 24 >> 2] = HEAP32[i5 >> 2];
12634 i7 = i4 + 36 | 0;
12635 HEAP32[i10 + 28 >> 2] = HEAP32[i7 >> 2];
12636 HEAP32[i10 + 40 >> 2] = HEAP32[i4 >> 2];
12637 HEAP32[i10 + 0 >> 2] = HEAP32[i11 + 0 >> 2];
12638 HEAP32[i10 + 4 >> 2] = HEAP32[i11 + 4 >> 2];
12639 HEAP32[i10 + 8 >> 2] = HEAP32[i11 + 8 >> 2];
12640 HEAP32[i10 + 12 >> 2] = HEAP32[i11 + 12 >> 2];
12641 HEAP32[i10 + 16 >> 2] = HEAP32[i11 + 16 >> 2];
12642 HEAP32[i10 + 20 >> 2] = HEAP32[i11 + 20 >> 2];
12643 HEAP32[i10 + 32 >> 2] = HEAP32[i8 >> 2];
12644 i9 = i4 + 24 | 0;
12645 HEAP32[i10 + 36 >> 2] = i22;
12646 __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i3, i10);
12647 i10 = i11 + 16 | 0;
12648 L13 : do {
12649 if ((HEAP32[i10 >> 2] | 0) > 0) {
12650 i22 = 0;
12651 do {
12652 i22 = i22 + 1 | 0;
12653 if (__ZN15b2ContactSolver27SolveTOIPositionConstraintsEii(i3, i15, i18) | 0) {
12654 break L13;
12655 }
12656 } while ((i22 | 0) < (HEAP32[i10 >> 2] | 0));
12657 }
12658 } while (0);
12659 i10 = i4 + 8 | 0;
12660 i24 = (HEAP32[i8 >> 2] | 0) + (i15 * 12 | 0) | 0;
12661 i25 = HEAP32[i24 + 4 >> 2] | 0;
12662 i23 = (HEAP32[(HEAP32[i10 >> 2] | 0) + (i15 << 2) >> 2] | 0) + 36 | 0;
12663 HEAP32[i23 >> 2] = HEAP32[i24 >> 2];
12664 HEAP32[i23 + 4 >> 2] = i25;
12665 i23 = HEAP32[i8 >> 2] | 0;
12666 i25 = HEAP32[i10 >> 2] | 0;
12667 HEAPF32[(HEAP32[i25 + (i15 << 2) >> 2] | 0) + 52 >> 2] = +HEAPF32[i23 + (i15 * 12 | 0) + 8 >> 2];
12668 i23 = i23 + (i18 * 12 | 0) | 0;
12669 i24 = HEAP32[i23 + 4 >> 2] | 0;
12670 i25 = (HEAP32[i25 + (i18 << 2) >> 2] | 0) + 36 | 0;
12671 HEAP32[i25 >> 2] = HEAP32[i23 >> 2];
12672 HEAP32[i25 + 4 >> 2] = i24;
12673 HEAPF32[(HEAP32[(HEAP32[i10 >> 2] | 0) + (i18 << 2) >> 2] | 0) + 52 >> 2] = +HEAPF32[(HEAP32[i8 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2];
12674 __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i3);
12675 i18 = i11 + 12 | 0;
12676 if ((HEAP32[i18 >> 2] | 0) > 0) {
12677 i15 = 0;
12678 do {
12679 __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i3);
12680 i15 = i15 + 1 | 0;
12681 } while ((i15 | 0) < (HEAP32[i18 >> 2] | 0));
12682 }
12683 d16 = +HEAPF32[i11 >> 2];
12684 if ((HEAP32[i6 >> 2] | 0) > 0) {
12685 i15 = 0;
12686 do {
12687 i25 = HEAP32[i8 >> 2] | 0;
12688 i11 = i25 + (i15 * 12 | 0) | 0;
12689 i24 = i11;
12690 d12 = +HEAPF32[i24 >> 2];
12691 d14 = +HEAPF32[i24 + 4 >> 2];
12692 d13 = +HEAPF32[i25 + (i15 * 12 | 0) + 8 >> 2];
12693 i25 = HEAP32[i9 >> 2] | 0;
12694 i24 = i25 + (i15 * 12 | 0) | 0;
12695 d19 = +HEAPF32[i24 >> 2];
12696 d20 = +HEAPF32[i24 + 4 >> 2];
12697 d17 = +HEAPF32[i25 + (i15 * 12 | 0) + 8 >> 2];
12698 d26 = d16 * d19;
12699 d21 = d16 * d20;
12700 d21 = d26 * d26 + d21 * d21;
12701 if (d21 > 4.0) {
12702 d26 = 2.0 / +Math_sqrt(+d21);
12703 d19 = d19 * d26;
12704 d20 = d20 * d26;
12705 }
12706 d21 = d16 * d17;
12707 if (d21 * d21 > 2.4674012660980225) {
12708 if (!(d21 > 0.0)) {
12709 d21 = -d21;
12710 }
12711 d17 = d17 * (1.5707963705062866 / d21);
12712 }
12713 d21 = d12 + d16 * d19;
12714 d14 = d14 + d16 * d20;
12715 d26 = d13 + d16 * d17;
12716 d12 = +d21;
12717 d13 = +d14;
12718 i25 = i11;
12719 HEAPF32[i25 >> 2] = d12;
12720 HEAPF32[i25 + 4 >> 2] = d13;
12721 HEAPF32[(HEAP32[i8 >> 2] | 0) + (i15 * 12 | 0) + 8 >> 2] = d26;
12722 d19 = +d19;
12723 d20 = +d20;
12724 i25 = (HEAP32[i9 >> 2] | 0) + (i15 * 12 | 0) | 0;
12725 HEAPF32[i25 >> 2] = d19;
12726 HEAPF32[i25 + 4 >> 2] = d20;
12727 HEAPF32[(HEAP32[i9 >> 2] | 0) + (i15 * 12 | 0) + 8 >> 2] = d17;
12728 i25 = HEAP32[(HEAP32[i10 >> 2] | 0) + (i15 << 2) >> 2] | 0;
12729 i24 = i25 + 44 | 0;
12730 HEAPF32[i24 >> 2] = d12;
12731 HEAPF32[i24 + 4 >> 2] = d13;
12732 HEAPF32[i25 + 56 >> 2] = d26;
12733 i24 = i25 + 64 | 0;
12734 HEAPF32[i24 >> 2] = d19;
12735 HEAPF32[i24 + 4 >> 2] = d20;
12736 HEAPF32[i25 + 72 >> 2] = d17;
12737 d17 = +Math_sin(+d26);
12738 HEAPF32[i25 + 20 >> 2] = d17;
12739 d20 = +Math_cos(+d26);
12740 HEAPF32[i25 + 24 >> 2] = d20;
12741 d19 = +HEAPF32[i25 + 28 >> 2];
12742 d26 = +HEAPF32[i25 + 32 >> 2];
12743 d21 = +(d21 - (d20 * d19 - d17 * d26));
12744 d26 = +(d14 - (d17 * d19 + d20 * d26));
12745 i25 = i25 + 12 | 0;
12746 HEAPF32[i25 >> 2] = d21;
12747 HEAPF32[i25 + 4 >> 2] = d26;
12748 i15 = i15 + 1 | 0;
12749 } while ((i15 | 0) < (HEAP32[i6 >> 2] | 0));
12750 }
12751 i6 = HEAP32[i3 + 40 >> 2] | 0;
12752 i4 = i4 + 4 | 0;
12753 if ((HEAP32[i4 >> 2] | 0) == 0) {
12754 __ZN15b2ContactSolverD2Ev(i3);
12755 STACKTOP = i1;
12756 return;
12757 }
12758 if ((HEAP32[i7 >> 2] | 0) <= 0) {
12759 __ZN15b2ContactSolverD2Ev(i3);
12760 STACKTOP = i1;
12761 return;
12762 }
12763 i8 = i2 + 16 | 0;
12764 i9 = 0;
12765 do {
12766 i10 = HEAP32[(HEAP32[i5 >> 2] | 0) + (i9 << 2) >> 2] | 0;
12767 i11 = HEAP32[i6 + (i9 * 152 | 0) + 144 >> 2] | 0;
12768 HEAP32[i8 >> 2] = i11;
12769 if ((i11 | 0) > 0) {
12770 i15 = 0;
12771 do {
12772 HEAPF32[i2 + (i15 << 2) >> 2] = +HEAPF32[i6 + (i9 * 152 | 0) + (i15 * 36 | 0) + 16 >> 2];
12773 HEAPF32[i2 + (i15 << 2) + 8 >> 2] = +HEAPF32[i6 + (i9 * 152 | 0) + (i15 * 36 | 0) + 20 >> 2];
12774 i15 = i15 + 1 | 0;
12775 } while ((i15 | 0) != (i11 | 0));
12776 }
12777 i25 = HEAP32[i4 >> 2] | 0;
12778 FUNCTION_TABLE_viii[HEAP32[(HEAP32[i25 >> 2] | 0) + 20 >> 2] & 3](i25, i10, i2);
12779 i9 = i9 + 1 | 0;
12780 } while ((i9 | 0) < (HEAP32[i7 >> 2] | 0));
12781 __ZN15b2ContactSolverD2Ev(i3);
12782 STACKTOP = i1;
12783 return;
12784}
12785function __ZN20b2SeparationFunction10InitializeEPK14b2SimplexCachePK15b2DistanceProxyRK7b2SweepS5_S8_f(i2, i11, i13, i21, i12, i24, d9) {
12786 i2 = i2 | 0;
12787 i11 = i11 | 0;
12788 i13 = i13 | 0;
12789 i21 = i21 | 0;
12790 i12 = i12 | 0;
12791 i24 = i24 | 0;
12792 d9 = +d9;
12793 var i1 = 0, d3 = 0.0, d4 = 0.0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d10 = 0.0, i14 = 0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d22 = 0.0, i23 = 0, i25 = 0, i26 = 0, i27 = 0, d28 = 0.0, d29 = 0.0;
12794 i1 = STACKTOP;
12795 HEAP32[i2 >> 2] = i13;
12796 HEAP32[i2 + 4 >> 2] = i12;
12797 i14 = HEAP16[i11 + 4 >> 1] | 0;
12798 if (!(i14 << 16 >> 16 != 0 & (i14 & 65535) < 3)) {
12799 ___assert_fail(3744, 3560, 50, 3768);
12800 }
12801 i23 = i2 + 8 | 0;
12802 i25 = i23 + 0 | 0;
12803 i27 = i21 + 0 | 0;
12804 i26 = i25 + 36 | 0;
12805 do {
12806 HEAP32[i25 >> 2] = HEAP32[i27 >> 2];
12807 i25 = i25 + 4 | 0;
12808 i27 = i27 + 4 | 0;
12809 } while ((i25 | 0) < (i26 | 0));
12810 i21 = i2 + 44 | 0;
12811 i25 = i21 + 0 | 0;
12812 i27 = i24 + 0 | 0;
12813 i26 = i25 + 36 | 0;
12814 do {
12815 HEAP32[i25 >> 2] = HEAP32[i27 >> 2];
12816 i25 = i25 + 4 | 0;
12817 i27 = i27 + 4 | 0;
12818 } while ((i25 | 0) < (i26 | 0));
12819 d19 = 1.0 - d9;
12820 d4 = d19 * +HEAPF32[i2 + 32 >> 2] + +HEAPF32[i2 + 36 >> 2] * d9;
12821 d3 = +Math_sin(+d4);
12822 d4 = +Math_cos(+d4);
12823 d7 = +HEAPF32[i23 >> 2];
12824 d5 = +HEAPF32[i2 + 12 >> 2];
12825 d8 = d19 * +HEAPF32[i2 + 16 >> 2] + +HEAPF32[i2 + 24 >> 2] * d9 - (d4 * d7 - d3 * d5);
12826 d5 = d19 * +HEAPF32[i2 + 20 >> 2] + +HEAPF32[i2 + 28 >> 2] * d9 - (d3 * d7 + d4 * d5);
12827 d7 = d19 * +HEAPF32[i2 + 68 >> 2] + +HEAPF32[i2 + 72 >> 2] * d9;
12828 d6 = +Math_sin(+d7);
12829 d7 = +Math_cos(+d7);
12830 d20 = +HEAPF32[i21 >> 2];
12831 d22 = +HEAPF32[i2 + 48 >> 2];
12832 d10 = d19 * +HEAPF32[i2 + 52 >> 2] + +HEAPF32[i2 + 60 >> 2] * d9 - (d7 * d20 - d6 * d22);
12833 d9 = d19 * +HEAPF32[i2 + 56 >> 2] + +HEAPF32[i2 + 64 >> 2] * d9 - (d6 * d20 + d7 * d22);
12834 if (i14 << 16 >> 16 == 1) {
12835 HEAP32[i2 + 80 >> 2] = 0;
12836 i14 = HEAPU8[i11 + 6 | 0] | 0;
12837 if ((HEAP32[i13 + 20 >> 2] | 0) <= (i14 | 0)) {
12838 ___assert_fail(3640, 3672, 103, 3704);
12839 }
12840 i27 = (HEAP32[i13 + 16 >> 2] | 0) + (i14 << 3) | 0;
12841 d15 = +HEAPF32[i27 >> 2];
12842 d16 = +HEAPF32[i27 + 4 >> 2];
12843 i11 = HEAPU8[i11 + 9 | 0] | 0;
12844 if ((HEAP32[i12 + 20 >> 2] | 0) <= (i11 | 0)) {
12845 ___assert_fail(3640, 3672, 103, 3704);
12846 }
12847 i11 = (HEAP32[i12 + 16 >> 2] | 0) + (i11 << 3) | 0;
12848 d20 = +HEAPF32[i11 >> 2];
12849 d22 = +HEAPF32[i11 + 4 >> 2];
12850 i11 = i2 + 92 | 0;
12851 d8 = d10 + (d7 * d20 - d6 * d22) - (d8 + (d4 * d15 - d3 * d16));
12852 d4 = d9 + (d6 * d20 + d7 * d22) - (d5 + (d3 * d15 + d4 * d16));
12853 d22 = +d8;
12854 d3 = +d4;
12855 i27 = i11;
12856 HEAPF32[i27 >> 2] = d22;
12857 HEAPF32[i27 + 4 >> 2] = d3;
12858 d3 = +Math_sqrt(+(d8 * d8 + d4 * d4));
12859 if (d3 < 1.1920928955078125e-7) {
12860 d22 = 0.0;
12861 STACKTOP = i1;
12862 return +d22;
12863 }
12864 d22 = 1.0 / d3;
12865 HEAPF32[i11 >> 2] = d8 * d22;
12866 HEAPF32[i2 + 96 >> 2] = d4 * d22;
12867 d22 = d3;
12868 STACKTOP = i1;
12869 return +d22;
12870 }
12871 i14 = i11 + 6 | 0;
12872 i21 = i11 + 7 | 0;
12873 i23 = i2 + 80 | 0;
12874 if ((HEAP8[i14] | 0) == (HEAP8[i21] | 0)) {
12875 HEAP32[i23 >> 2] = 2;
12876 i23 = HEAPU8[i11 + 9 | 0] | 0;
12877 i21 = HEAP32[i12 + 20 >> 2] | 0;
12878 if ((i21 | 0) <= (i23 | 0)) {
12879 ___assert_fail(3640, 3672, 103, 3704);
12880 }
12881 i12 = HEAP32[i12 + 16 >> 2] | 0;
12882 i27 = i12 + (i23 << 3) | 0;
12883 d16 = +HEAPF32[i27 >> 2];
12884 d15 = +HEAPF32[i27 + 4 >> 2];
12885 i11 = HEAPU8[i11 + 10 | 0] | 0;
12886 if ((i21 | 0) <= (i11 | 0)) {
12887 ___assert_fail(3640, 3672, 103, 3704);
12888 }
12889 i11 = i12 + (i11 << 3) | 0;
12890 d20 = +HEAPF32[i11 >> 2];
12891 d18 = +HEAPF32[i11 + 4 >> 2];
12892 i11 = i2 + 92 | 0;
12893 d22 = d20 - d16;
12894 d19 = d18 - d15;
12895 d17 = -d22;
12896 d29 = +d19;
12897 d28 = +d17;
12898 i27 = i11;
12899 HEAPF32[i27 >> 2] = d29;
12900 HEAPF32[i27 + 4 >> 2] = d28;
12901 d22 = +Math_sqrt(+(d19 * d19 + d22 * d22));
12902 if (!(d22 < 1.1920928955078125e-7)) {
12903 d29 = 1.0 / d22;
12904 d19 = d19 * d29;
12905 HEAPF32[i11 >> 2] = d19;
12906 d17 = d29 * d17;
12907 HEAPF32[i2 + 96 >> 2] = d17;
12908 }
12909 d16 = (d16 + d20) * .5;
12910 d15 = (d15 + d18) * .5;
12911 d28 = +d16;
12912 d29 = +d15;
12913 i2 = i2 + 84 | 0;
12914 HEAPF32[i2 >> 2] = d28;
12915 HEAPF32[i2 + 4 >> 2] = d29;
12916 i2 = HEAPU8[i14] | 0;
12917 if ((HEAP32[i13 + 20 >> 2] | 0) <= (i2 | 0)) {
12918 ___assert_fail(3640, 3672, 103, 3704);
12919 }
12920 i27 = (HEAP32[i13 + 16 >> 2] | 0) + (i2 << 3) | 0;
12921 d28 = +HEAPF32[i27 >> 2];
12922 d29 = +HEAPF32[i27 + 4 >> 2];
12923 d3 = (d7 * d19 - d6 * d17) * (d8 + (d4 * d28 - d3 * d29) - (d10 + (d7 * d16 - d6 * d15))) + (d6 * d19 + d7 * d17) * (d5 + (d3 * d28 + d4 * d29) - (d9 + (d6 * d16 + d7 * d15)));
12924 if (!(d3 < 0.0)) {
12925 d29 = d3;
12926 STACKTOP = i1;
12927 return +d29;
12928 }
12929 d28 = +-d19;
12930 d29 = +-d17;
12931 i27 = i11;
12932 HEAPF32[i27 >> 2] = d28;
12933 HEAPF32[i27 + 4 >> 2] = d29;
12934 d29 = -d3;
12935 STACKTOP = i1;
12936 return +d29;
12937 } else {
12938 HEAP32[i23 >> 2] = 1;
12939 i23 = HEAPU8[i14] | 0;
12940 i14 = HEAP32[i13 + 20 >> 2] | 0;
12941 if ((i14 | 0) <= (i23 | 0)) {
12942 ___assert_fail(3640, 3672, 103, 3704);
12943 }
12944 i13 = HEAP32[i13 + 16 >> 2] | 0;
12945 i27 = i13 + (i23 << 3) | 0;
12946 d16 = +HEAPF32[i27 >> 2];
12947 d15 = +HEAPF32[i27 + 4 >> 2];
12948 i21 = HEAPU8[i21] | 0;
12949 if ((i14 | 0) <= (i21 | 0)) {
12950 ___assert_fail(3640, 3672, 103, 3704);
12951 }
12952 i13 = i13 + (i21 << 3) | 0;
12953 d20 = +HEAPF32[i13 >> 2];
12954 d18 = +HEAPF32[i13 + 4 >> 2];
12955 i13 = i2 + 92 | 0;
12956 d22 = d20 - d16;
12957 d19 = d18 - d15;
12958 d17 = -d22;
12959 d28 = +d19;
12960 d29 = +d17;
12961 i27 = i13;
12962 HEAPF32[i27 >> 2] = d28;
12963 HEAPF32[i27 + 4 >> 2] = d29;
12964 d22 = +Math_sqrt(+(d19 * d19 + d22 * d22));
12965 if (!(d22 < 1.1920928955078125e-7)) {
12966 d29 = 1.0 / d22;
12967 d19 = d19 * d29;
12968 HEAPF32[i13 >> 2] = d19;
12969 d17 = d29 * d17;
12970 HEAPF32[i2 + 96 >> 2] = d17;
12971 }
12972 d16 = (d16 + d20) * .5;
12973 d15 = (d15 + d18) * .5;
12974 d28 = +d16;
12975 d29 = +d15;
12976 i2 = i2 + 84 | 0;
12977 HEAPF32[i2 >> 2] = d28;
12978 HEAPF32[i2 + 4 >> 2] = d29;
12979 i2 = HEAPU8[i11 + 9 | 0] | 0;
12980 if ((HEAP32[i12 + 20 >> 2] | 0) <= (i2 | 0)) {
12981 ___assert_fail(3640, 3672, 103, 3704);
12982 }
12983 i27 = (HEAP32[i12 + 16 >> 2] | 0) + (i2 << 3) | 0;
12984 d28 = +HEAPF32[i27 >> 2];
12985 d29 = +HEAPF32[i27 + 4 >> 2];
12986 d3 = (d4 * d19 - d3 * d17) * (d10 + (d7 * d28 - d6 * d29) - (d8 + (d4 * d16 - d3 * d15))) + (d3 * d19 + d4 * d17) * (d9 + (d6 * d28 + d7 * d29) - (d5 + (d3 * d16 + d4 * d15)));
12987 if (!(d3 < 0.0)) {
12988 d29 = d3;
12989 STACKTOP = i1;
12990 return +d29;
12991 }
12992 d28 = +-d19;
12993 d29 = +-d17;
12994 i27 = i13;
12995 HEAPF32[i27 >> 2] = d28;
12996 HEAPF32[i27 + 4 >> 2] = d29;
12997 d29 = -d3;
12998 STACKTOP = i1;
12999 return +d29;
13000 }
13001 return 0.0;
13002}
13003function __ZNK20b2SeparationFunction17FindMinSeparationEPiS0_f(i12, i10, i9, d5) {
13004 i12 = i12 | 0;
13005 i10 = i10 | 0;
13006 i9 = i9 | 0;
13007 d5 = +d5;
13008 var i1 = 0, d2 = 0.0, d3 = 0.0, d4 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d11 = 0.0, d13 = 0.0, d14 = 0.0, i15 = 0, i16 = 0, d17 = 0.0, d18 = 0.0, i19 = 0, d20 = 0.0, d21 = 0.0, i22 = 0, d23 = 0.0, d24 = 0.0, i25 = 0, i26 = 0, i27 = 0;
13009 i1 = STACKTOP;
13010 d21 = 1.0 - d5;
13011 d6 = d21 * +HEAPF32[i12 + 32 >> 2] + +HEAPF32[i12 + 36 >> 2] * d5;
13012 d7 = +Math_sin(+d6);
13013 d6 = +Math_cos(+d6);
13014 d3 = +HEAPF32[i12 + 8 >> 2];
13015 d8 = +HEAPF32[i12 + 12 >> 2];
13016 d11 = d21 * +HEAPF32[i12 + 16 >> 2] + +HEAPF32[i12 + 24 >> 2] * d5 - (d6 * d3 - d7 * d8);
13017 d8 = d21 * +HEAPF32[i12 + 20 >> 2] + +HEAPF32[i12 + 28 >> 2] * d5 - (d7 * d3 + d6 * d8);
13018 d3 = d21 * +HEAPF32[i12 + 68 >> 2] + +HEAPF32[i12 + 72 >> 2] * d5;
13019 d2 = +Math_sin(+d3);
13020 d3 = +Math_cos(+d3);
13021 d23 = +HEAPF32[i12 + 44 >> 2];
13022 d24 = +HEAPF32[i12 + 48 >> 2];
13023 d4 = d21 * +HEAPF32[i12 + 52 >> 2] + +HEAPF32[i12 + 60 >> 2] * d5 - (d3 * d23 - d2 * d24);
13024 d5 = d21 * +HEAPF32[i12 + 56 >> 2] + +HEAPF32[i12 + 64 >> 2] * d5 - (d2 * d23 + d3 * d24);
13025 i19 = HEAP32[i12 + 80 >> 2] | 0;
13026 if ((i19 | 0) == 1) {
13027 d23 = +HEAPF32[i12 + 92 >> 2];
13028 d14 = +HEAPF32[i12 + 96 >> 2];
13029 d13 = d6 * d23 - d7 * d14;
13030 d14 = d7 * d23 + d6 * d14;
13031 d23 = +HEAPF32[i12 + 84 >> 2];
13032 d24 = +HEAPF32[i12 + 88 >> 2];
13033 d11 = d11 + (d6 * d23 - d7 * d24);
13034 d6 = d8 + (d7 * d23 + d6 * d24);
13035 d7 = -d13;
13036 d24 = -d14;
13037 d8 = d3 * d7 + d2 * d24;
13038 d7 = d3 * d24 - d2 * d7;
13039 HEAP32[i10 >> 2] = -1;
13040 i25 = i12 + 4 | 0;
13041 i22 = HEAP32[i25 >> 2] | 0;
13042 i19 = HEAP32[i22 + 16 >> 2] | 0;
13043 i22 = HEAP32[i22 + 20 >> 2] | 0;
13044 if ((i22 | 0) > 1) {
13045 i10 = 0;
13046 d18 = d7 * +HEAPF32[i19 + 4 >> 2] + d8 * +HEAPF32[i19 >> 2];
13047 i12 = 1;
13048 while (1) {
13049 d17 = d8 * +HEAPF32[i19 + (i12 << 3) >> 2] + d7 * +HEAPF32[i19 + (i12 << 3) + 4 >> 2];
13050 i16 = d17 > d18;
13051 i10 = i16 ? i12 : i10;
13052 i12 = i12 + 1 | 0;
13053 if ((i12 | 0) == (i22 | 0)) {
13054 break;
13055 } else {
13056 d18 = i16 ? d17 : d18;
13057 }
13058 }
13059 HEAP32[i9 >> 2] = i10;
13060 if ((i10 | 0) > -1) {
13061 i15 = i10;
13062 } else {
13063 ___assert_fail(3640, 3672, 103, 3704);
13064 }
13065 } else {
13066 HEAP32[i9 >> 2] = 0;
13067 i15 = 0;
13068 }
13069 i9 = HEAP32[i25 >> 2] | 0;
13070 if ((HEAP32[i9 + 20 >> 2] | 0) <= (i15 | 0)) {
13071 ___assert_fail(3640, 3672, 103, 3704);
13072 }
13073 i27 = (HEAP32[i9 + 16 >> 2] | 0) + (i15 << 3) | 0;
13074 d23 = +HEAPF32[i27 >> 2];
13075 d24 = +HEAPF32[i27 + 4 >> 2];
13076 d24 = d13 * (d4 + (d3 * d23 - d2 * d24) - d11) + d14 * (d5 + (d2 * d23 + d3 * d24) - d6);
13077 STACKTOP = i1;
13078 return +d24;
13079 } else if ((i19 | 0) == 0) {
13080 d13 = +HEAPF32[i12 + 92 >> 2];
13081 d14 = +HEAPF32[i12 + 96 >> 2];
13082 d21 = d6 * d13 + d7 * d14;
13083 d24 = d6 * d14 - d7 * d13;
13084 d17 = -d13;
13085 d23 = -d14;
13086 d18 = d3 * d17 + d2 * d23;
13087 d17 = d3 * d23 - d2 * d17;
13088 i15 = HEAP32[i12 >> 2] | 0;
13089 i16 = HEAP32[i15 + 16 >> 2] | 0;
13090 i15 = i15 + 20 | 0;
13091 i19 = HEAP32[i15 >> 2] | 0;
13092 if ((i19 | 0) > 1) {
13093 i25 = 0;
13094 d23 = d24 * +HEAPF32[i16 + 4 >> 2] + d21 * +HEAPF32[i16 >> 2];
13095 i26 = 1;
13096 while (1) {
13097 d20 = d21 * +HEAPF32[i16 + (i26 << 3) >> 2] + d24 * +HEAPF32[i16 + (i26 << 3) + 4 >> 2];
13098 i22 = d20 > d23;
13099 i25 = i22 ? i26 : i25;
13100 i26 = i26 + 1 | 0;
13101 if ((i26 | 0) == (i19 | 0)) {
13102 break;
13103 } else {
13104 d23 = i22 ? d20 : d23;
13105 }
13106 }
13107 } else {
13108 i25 = 0;
13109 }
13110 HEAP32[i10 >> 2] = i25;
13111 i19 = HEAP32[i12 + 4 >> 2] | 0;
13112 i12 = HEAP32[i19 + 16 >> 2] | 0;
13113 i19 = i19 + 20 | 0;
13114 i25 = HEAP32[i19 >> 2] | 0;
13115 if ((i25 | 0) > 1) {
13116 i27 = 0;
13117 d20 = d17 * +HEAPF32[i12 + 4 >> 2] + d18 * +HEAPF32[i12 >> 2];
13118 i26 = 1;
13119 while (1) {
13120 d21 = d18 * +HEAPF32[i12 + (i26 << 3) >> 2] + d17 * +HEAPF32[i12 + (i26 << 3) + 4 >> 2];
13121 i22 = d21 > d20;
13122 i27 = i22 ? i26 : i27;
13123 i26 = i26 + 1 | 0;
13124 if ((i26 | 0) == (i25 | 0)) {
13125 break;
13126 } else {
13127 d20 = i22 ? d21 : d20;
13128 }
13129 }
13130 } else {
13131 i27 = 0;
13132 }
13133 HEAP32[i9 >> 2] = i27;
13134 i9 = HEAP32[i10 >> 2] | 0;
13135 if (!((i9 | 0) > -1)) {
13136 ___assert_fail(3640, 3672, 103, 3704);
13137 }
13138 if ((HEAP32[i15 >> 2] | 0) <= (i9 | 0)) {
13139 ___assert_fail(3640, 3672, 103, 3704);
13140 }
13141 i26 = i16 + (i9 << 3) | 0;
13142 d18 = +HEAPF32[i26 >> 2];
13143 d17 = +HEAPF32[i26 + 4 >> 2];
13144 if (!((i27 | 0) > -1)) {
13145 ___assert_fail(3640, 3672, 103, 3704);
13146 }
13147 if ((HEAP32[i19 >> 2] | 0) <= (i27 | 0)) {
13148 ___assert_fail(3640, 3672, 103, 3704);
13149 }
13150 i27 = i12 + (i27 << 3) | 0;
13151 d23 = +HEAPF32[i27 >> 2];
13152 d24 = +HEAPF32[i27 + 4 >> 2];
13153 d24 = d13 * (d4 + (d3 * d23 - d2 * d24) - (d11 + (d6 * d18 - d7 * d17))) + d14 * (d5 + (d2 * d23 + d3 * d24) - (d8 + (d7 * d18 + d6 * d17)));
13154 STACKTOP = i1;
13155 return +d24;
13156 } else if ((i19 | 0) == 2) {
13157 d23 = +HEAPF32[i12 + 92 >> 2];
13158 d13 = +HEAPF32[i12 + 96 >> 2];
13159 d14 = d3 * d23 - d2 * d13;
13160 d13 = d2 * d23 + d3 * d13;
13161 d23 = +HEAPF32[i12 + 84 >> 2];
13162 d24 = +HEAPF32[i12 + 88 >> 2];
13163 d4 = d4 + (d3 * d23 - d2 * d24);
13164 d2 = d5 + (d2 * d23 + d3 * d24);
13165 d3 = -d14;
13166 d24 = -d13;
13167 d5 = d6 * d3 + d7 * d24;
13168 d3 = d6 * d24 - d7 * d3;
13169 HEAP32[i9 >> 2] = -1;
13170 i22 = HEAP32[i12 >> 2] | 0;
13171 i15 = HEAP32[i22 + 16 >> 2] | 0;
13172 i22 = HEAP32[i22 + 20 >> 2] | 0;
13173 if ((i22 | 0) > 1) {
13174 i9 = 0;
13175 d17 = d3 * +HEAPF32[i15 + 4 >> 2] + d5 * +HEAPF32[i15 >> 2];
13176 i19 = 1;
13177 while (1) {
13178 d18 = d5 * +HEAPF32[i15 + (i19 << 3) >> 2] + d3 * +HEAPF32[i15 + (i19 << 3) + 4 >> 2];
13179 i25 = d18 > d17;
13180 i9 = i25 ? i19 : i9;
13181 i19 = i19 + 1 | 0;
13182 if ((i19 | 0) == (i22 | 0)) {
13183 break;
13184 } else {
13185 d17 = i25 ? d18 : d17;
13186 }
13187 }
13188 HEAP32[i10 >> 2] = i9;
13189 if ((i9 | 0) > -1) {
13190 i16 = i9;
13191 } else {
13192 ___assert_fail(3640, 3672, 103, 3704);
13193 }
13194 } else {
13195 HEAP32[i10 >> 2] = 0;
13196 i16 = 0;
13197 }
13198 i9 = HEAP32[i12 >> 2] | 0;
13199 if ((HEAP32[i9 + 20 >> 2] | 0) <= (i16 | 0)) {
13200 ___assert_fail(3640, 3672, 103, 3704);
13201 }
13202 i27 = (HEAP32[i9 + 16 >> 2] | 0) + (i16 << 3) | 0;
13203 d23 = +HEAPF32[i27 >> 2];
13204 d24 = +HEAPF32[i27 + 4 >> 2];
13205 d24 = d14 * (d11 + (d6 * d23 - d7 * d24) - d4) + d13 * (d8 + (d7 * d23 + d6 * d24) - d2);
13206 STACKTOP = i1;
13207 return +d24;
13208 } else {
13209 ___assert_fail(3616, 3560, 183, 3720);
13210 }
13211 return 0.0;
13212}
13213function __ZN13b2DynamicTree10InsertLeafEi(i3, i4) {
13214 i3 = i3 | 0;
13215 i4 = i4 | 0;
13216 var i1 = 0, i2 = 0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, d22 = 0.0, d23 = 0.0, i24 = 0;
13217 i1 = STACKTOP;
13218 i11 = i3 + 24 | 0;
13219 HEAP32[i11 >> 2] = (HEAP32[i11 >> 2] | 0) + 1;
13220 i11 = HEAP32[i3 >> 2] | 0;
13221 if ((i11 | 0) == -1) {
13222 HEAP32[i3 >> 2] = i4;
13223 HEAP32[(HEAP32[i3 + 4 >> 2] | 0) + (i4 * 36 | 0) + 20 >> 2] = -1;
13224 STACKTOP = i1;
13225 return;
13226 }
13227 i2 = i3 + 4 | 0;
13228 i9 = HEAP32[i2 >> 2] | 0;
13229 d8 = +HEAPF32[i9 + (i4 * 36 | 0) >> 2];
13230 d7 = +HEAPF32[i9 + (i4 * 36 | 0) + 4 >> 2];
13231 d6 = +HEAPF32[i9 + (i4 * 36 | 0) + 8 >> 2];
13232 d5 = +HEAPF32[i9 + (i4 * 36 | 0) + 12 >> 2];
13233 i10 = HEAP32[i9 + (i11 * 36 | 0) + 24 >> 2] | 0;
13234 L5 : do {
13235 if (!((i10 | 0) == -1)) {
13236 do {
13237 i12 = HEAP32[i9 + (i11 * 36 | 0) + 28 >> 2] | 0;
13238 d14 = +HEAPF32[i9 + (i11 * 36 | 0) + 8 >> 2];
13239 d15 = +HEAPF32[i9 + (i11 * 36 | 0) >> 2];
13240 d17 = +HEAPF32[i9 + (i11 * 36 | 0) + 12 >> 2];
13241 d16 = +HEAPF32[i9 + (i11 * 36 | 0) + 4 >> 2];
13242 d21 = ((d14 > d6 ? d14 : d6) - (d15 < d8 ? d15 : d8) + ((d17 > d5 ? d17 : d5) - (d16 < d7 ? d16 : d7))) * 2.0;
13243 d13 = d21 * 2.0;
13244 d14 = (d21 - (d14 - d15 + (d17 - d16)) * 2.0) * 2.0;
13245 d21 = +HEAPF32[i9 + (i10 * 36 | 0) >> 2];
13246 d16 = d8 < d21 ? d8 : d21;
13247 d17 = +HEAPF32[i9 + (i10 * 36 | 0) + 4 >> 2];
13248 d18 = d7 < d17 ? d7 : d17;
13249 d19 = +HEAPF32[i9 + (i10 * 36 | 0) + 8 >> 2];
13250 d20 = d6 > d19 ? d6 : d19;
13251 d15 = +HEAPF32[i9 + (i10 * 36 | 0) + 12 >> 2];
13252 d22 = d5 > d15 ? d5 : d15;
13253 if ((HEAP32[i9 + (i10 * 36 | 0) + 24 >> 2] | 0) == -1) {
13254 d15 = (d20 - d16 + (d22 - d18)) * 2.0;
13255 } else {
13256 d15 = (d20 - d16 + (d22 - d18)) * 2.0 - (d19 - d21 + (d15 - d17)) * 2.0;
13257 }
13258 d15 = d14 + d15;
13259 d17 = +HEAPF32[i9 + (i12 * 36 | 0) >> 2];
13260 d18 = d8 < d17 ? d8 : d17;
13261 d23 = +HEAPF32[i9 + (i12 * 36 | 0) + 4 >> 2];
13262 d22 = d7 < d23 ? d7 : d23;
13263 d21 = +HEAPF32[i9 + (i12 * 36 | 0) + 8 >> 2];
13264 d20 = d6 > d21 ? d6 : d21;
13265 d19 = +HEAPF32[i9 + (i12 * 36 | 0) + 12 >> 2];
13266 d16 = d5 > d19 ? d5 : d19;
13267 if ((HEAP32[i9 + (i12 * 36 | 0) + 24 >> 2] | 0) == -1) {
13268 d16 = (d20 - d18 + (d16 - d22)) * 2.0;
13269 } else {
13270 d16 = (d20 - d18 + (d16 - d22)) * 2.0 - (d21 - d17 + (d19 - d23)) * 2.0;
13271 }
13272 d14 = d14 + d16;
13273 if (d13 < d15 & d13 < d14) {
13274 break L5;
13275 }
13276 i11 = d15 < d14 ? i10 : i12;
13277 i10 = HEAP32[i9 + (i11 * 36 | 0) + 24 >> 2] | 0;
13278 } while (!((i10 | 0) == -1));
13279 }
13280 } while (0);
13281 i9 = HEAP32[i9 + (i11 * 36 | 0) + 20 >> 2] | 0;
13282 i10 = __ZN13b2DynamicTree12AllocateNodeEv(i3) | 0;
13283 i12 = HEAP32[i2 >> 2] | 0;
13284 HEAP32[i12 + (i10 * 36 | 0) + 20 >> 2] = i9;
13285 HEAP32[i12 + (i10 * 36 | 0) + 16 >> 2] = 0;
13286 i12 = HEAP32[i2 >> 2] | 0;
13287 d14 = +HEAPF32[i12 + (i11 * 36 | 0) >> 2];
13288 d13 = +HEAPF32[i12 + (i11 * 36 | 0) + 4 >> 2];
13289 d8 = +(d8 < d14 ? d8 : d14);
13290 d7 = +(d7 < d13 ? d7 : d13);
13291 i24 = i12 + (i10 * 36 | 0) | 0;
13292 HEAPF32[i24 >> 2] = d8;
13293 HEAPF32[i24 + 4 >> 2] = d7;
13294 d8 = +HEAPF32[i12 + (i11 * 36 | 0) + 8 >> 2];
13295 d7 = +HEAPF32[i12 + (i11 * 36 | 0) + 12 >> 2];
13296 d6 = +(d6 > d8 ? d6 : d8);
13297 d23 = +(d5 > d7 ? d5 : d7);
13298 i12 = i12 + (i10 * 36 | 0) + 8 | 0;
13299 HEAPF32[i12 >> 2] = d6;
13300 HEAPF32[i12 + 4 >> 2] = d23;
13301 i12 = HEAP32[i2 >> 2] | 0;
13302 HEAP32[i12 + (i10 * 36 | 0) + 32 >> 2] = (HEAP32[i12 + (i11 * 36 | 0) + 32 >> 2] | 0) + 1;
13303 if ((i9 | 0) == -1) {
13304 HEAP32[i12 + (i10 * 36 | 0) + 24 >> 2] = i11;
13305 HEAP32[i12 + (i10 * 36 | 0) + 28 >> 2] = i4;
13306 HEAP32[i12 + (i11 * 36 | 0) + 20 >> 2] = i10;
13307 i24 = i12 + (i4 * 36 | 0) + 20 | 0;
13308 HEAP32[i24 >> 2] = i10;
13309 HEAP32[i3 >> 2] = i10;
13310 i10 = HEAP32[i24 >> 2] | 0;
13311 } else {
13312 i24 = i12 + (i9 * 36 | 0) + 24 | 0;
13313 if ((HEAP32[i24 >> 2] | 0) == (i11 | 0)) {
13314 HEAP32[i24 >> 2] = i10;
13315 } else {
13316 HEAP32[i12 + (i9 * 36 | 0) + 28 >> 2] = i10;
13317 }
13318 HEAP32[i12 + (i10 * 36 | 0) + 24 >> 2] = i11;
13319 HEAP32[i12 + (i10 * 36 | 0) + 28 >> 2] = i4;
13320 HEAP32[i12 + (i11 * 36 | 0) + 20 >> 2] = i10;
13321 HEAP32[i12 + (i4 * 36 | 0) + 20 >> 2] = i10;
13322 }
13323 if ((i10 | 0) == -1) {
13324 STACKTOP = i1;
13325 return;
13326 }
13327 while (1) {
13328 i9 = __ZN13b2DynamicTree7BalanceEi(i3, i10) | 0;
13329 i4 = HEAP32[i2 >> 2] | 0;
13330 i11 = HEAP32[i4 + (i9 * 36 | 0) + 24 >> 2] | 0;
13331 i10 = HEAP32[i4 + (i9 * 36 | 0) + 28 >> 2] | 0;
13332 if ((i11 | 0) == -1) {
13333 i2 = 20;
13334 break;
13335 }
13336 if ((i10 | 0) == -1) {
13337 i2 = 22;
13338 break;
13339 }
13340 i12 = HEAP32[i4 + (i11 * 36 | 0) + 32 >> 2] | 0;
13341 i24 = HEAP32[i4 + (i10 * 36 | 0) + 32 >> 2] | 0;
13342 HEAP32[i4 + (i9 * 36 | 0) + 32 >> 2] = ((i12 | 0) > (i24 | 0) ? i12 : i24) + 1;
13343 d7 = +HEAPF32[i4 + (i11 * 36 | 0) >> 2];
13344 d8 = +HEAPF32[i4 + (i10 * 36 | 0) >> 2];
13345 d5 = +HEAPF32[i4 + (i11 * 36 | 0) + 4 >> 2];
13346 d6 = +HEAPF32[i4 + (i10 * 36 | 0) + 4 >> 2];
13347 d7 = +(d7 < d8 ? d7 : d8);
13348 d5 = +(d5 < d6 ? d5 : d6);
13349 i24 = i4 + (i9 * 36 | 0) | 0;
13350 HEAPF32[i24 >> 2] = d7;
13351 HEAPF32[i24 + 4 >> 2] = d5;
13352 d5 = +HEAPF32[i4 + (i11 * 36 | 0) + 8 >> 2];
13353 d6 = +HEAPF32[i4 + (i10 * 36 | 0) + 8 >> 2];
13354 d7 = +HEAPF32[i4 + (i11 * 36 | 0) + 12 >> 2];
13355 d8 = +HEAPF32[i4 + (i10 * 36 | 0) + 12 >> 2];
13356 d5 = +(d5 > d6 ? d5 : d6);
13357 d23 = +(d7 > d8 ? d7 : d8);
13358 i10 = i4 + (i9 * 36 | 0) + 8 | 0;
13359 HEAPF32[i10 >> 2] = d5;
13360 HEAPF32[i10 + 4 >> 2] = d23;
13361 i10 = HEAP32[(HEAP32[i2 >> 2] | 0) + (i9 * 36 | 0) + 20 >> 2] | 0;
13362 if ((i10 | 0) == -1) {
13363 i2 = 24;
13364 break;
13365 }
13366 }
13367 if ((i2 | 0) == 20) {
13368 ___assert_fail(3168, 2944, 307, 3184);
13369 } else if ((i2 | 0) == 22) {
13370 ___assert_fail(3200, 2944, 308, 3184);
13371 } else if ((i2 | 0) == 24) {
13372 STACKTOP = i1;
13373 return;
13374 }
13375}
13376function __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i7, i5) {
13377 i7 = i7 | 0;
13378 i5 = i5 | 0;
13379 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, d15 = 0.0, d16 = 0.0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0;
13380 i1 = STACKTOP;
13381 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
13382 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
13383 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
13384 HEAP32[i7 + 12 >> 2] = HEAP32[i5 + 12 >> 2];
13385 HEAP32[i7 + 16 >> 2] = HEAP32[i5 + 16 >> 2];
13386 HEAP32[i7 + 20 >> 2] = HEAP32[i5 + 20 >> 2];
13387 i14 = HEAP32[i5 + 40 >> 2] | 0;
13388 i9 = i7 + 32 | 0;
13389 HEAP32[i9 >> 2] = i14;
13390 i2 = HEAP32[i5 + 28 >> 2] | 0;
13391 i4 = i7 + 48 | 0;
13392 HEAP32[i4 >> 2] = i2;
13393 i3 = i7 + 36 | 0;
13394 HEAP32[i3 >> 2] = __ZN16b2StackAllocator8AllocateEi(i14, i2 * 88 | 0) | 0;
13395 i2 = i7 + 40 | 0;
13396 HEAP32[i2 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i9 >> 2] | 0, (HEAP32[i4 >> 2] | 0) * 152 | 0) | 0;
13397 HEAP32[i7 + 24 >> 2] = HEAP32[i5 + 32 >> 2];
13398 HEAP32[i7 + 28 >> 2] = HEAP32[i5 + 36 >> 2];
13399 i9 = HEAP32[i5 + 24 >> 2] | 0;
13400 i5 = i7 + 44 | 0;
13401 HEAP32[i5 >> 2] = i9;
13402 if ((HEAP32[i4 >> 2] | 0) <= 0) {
13403 STACKTOP = i1;
13404 return;
13405 }
13406 i6 = i7 + 20 | 0;
13407 i7 = i7 + 8 | 0;
13408 i8 = 0;
13409 while (1) {
13410 i10 = HEAP32[i9 + (i8 << 2) >> 2] | 0;
13411 i11 = HEAP32[i10 + 48 >> 2] | 0;
13412 i12 = HEAP32[i10 + 52 >> 2] | 0;
13413 i14 = HEAP32[i11 + 8 >> 2] | 0;
13414 i13 = HEAP32[i12 + 8 >> 2] | 0;
13415 i9 = HEAP32[i10 + 124 >> 2] | 0;
13416 if ((i9 | 0) <= 0) {
13417 i2 = 4;
13418 break;
13419 }
13420 d15 = +HEAPF32[(HEAP32[i12 + 12 >> 2] | 0) + 8 >> 2];
13421 d16 = +HEAPF32[(HEAP32[i11 + 12 >> 2] | 0) + 8 >> 2];
13422 i12 = HEAP32[i2 >> 2] | 0;
13423 HEAPF32[i12 + (i8 * 152 | 0) + 136 >> 2] = +HEAPF32[i10 + 136 >> 2];
13424 HEAPF32[i12 + (i8 * 152 | 0) + 140 >> 2] = +HEAPF32[i10 + 140 >> 2];
13425 i22 = i14 + 8 | 0;
13426 HEAP32[i12 + (i8 * 152 | 0) + 112 >> 2] = HEAP32[i22 >> 2];
13427 i21 = i13 + 8 | 0;
13428 HEAP32[i12 + (i8 * 152 | 0) + 116 >> 2] = HEAP32[i21 >> 2];
13429 i19 = i14 + 120 | 0;
13430 HEAPF32[i12 + (i8 * 152 | 0) + 120 >> 2] = +HEAPF32[i19 >> 2];
13431 i20 = i13 + 120 | 0;
13432 HEAPF32[i12 + (i8 * 152 | 0) + 124 >> 2] = +HEAPF32[i20 >> 2];
13433 i18 = i14 + 128 | 0;
13434 HEAPF32[i12 + (i8 * 152 | 0) + 128 >> 2] = +HEAPF32[i18 >> 2];
13435 i17 = i13 + 128 | 0;
13436 HEAPF32[i12 + (i8 * 152 | 0) + 132 >> 2] = +HEAPF32[i17 >> 2];
13437 HEAP32[i12 + (i8 * 152 | 0) + 148 >> 2] = i8;
13438 HEAP32[i12 + (i8 * 152 | 0) + 144 >> 2] = i9;
13439 i11 = i12 + (i8 * 152 | 0) + 80 | 0;
13440 HEAP32[i11 + 0 >> 2] = 0;
13441 HEAP32[i11 + 4 >> 2] = 0;
13442 HEAP32[i11 + 8 >> 2] = 0;
13443 HEAP32[i11 + 12 >> 2] = 0;
13444 HEAP32[i11 + 16 >> 2] = 0;
13445 HEAP32[i11 + 20 >> 2] = 0;
13446 HEAP32[i11 + 24 >> 2] = 0;
13447 HEAP32[i11 + 28 >> 2] = 0;
13448 i11 = HEAP32[i3 >> 2] | 0;
13449 HEAP32[i11 + (i8 * 88 | 0) + 32 >> 2] = HEAP32[i22 >> 2];
13450 HEAP32[i11 + (i8 * 88 | 0) + 36 >> 2] = HEAP32[i21 >> 2];
13451 HEAPF32[i11 + (i8 * 88 | 0) + 40 >> 2] = +HEAPF32[i19 >> 2];
13452 HEAPF32[i11 + (i8 * 88 | 0) + 44 >> 2] = +HEAPF32[i20 >> 2];
13453 i20 = i14 + 28 | 0;
13454 i14 = HEAP32[i20 + 4 >> 2] | 0;
13455 i19 = i11 + (i8 * 88 | 0) + 48 | 0;
13456 HEAP32[i19 >> 2] = HEAP32[i20 >> 2];
13457 HEAP32[i19 + 4 >> 2] = i14;
13458 i19 = i13 + 28 | 0;
13459 i14 = HEAP32[i19 + 4 >> 2] | 0;
13460 i13 = i11 + (i8 * 88 | 0) + 56 | 0;
13461 HEAP32[i13 >> 2] = HEAP32[i19 >> 2];
13462 HEAP32[i13 + 4 >> 2] = i14;
13463 HEAPF32[i11 + (i8 * 88 | 0) + 64 >> 2] = +HEAPF32[i18 >> 2];
13464 HEAPF32[i11 + (i8 * 88 | 0) + 68 >> 2] = +HEAPF32[i17 >> 2];
13465 i13 = i10 + 104 | 0;
13466 i14 = HEAP32[i13 + 4 >> 2] | 0;
13467 i17 = i11 + (i8 * 88 | 0) + 16 | 0;
13468 HEAP32[i17 >> 2] = HEAP32[i13 >> 2];
13469 HEAP32[i17 + 4 >> 2] = i14;
13470 i17 = i10 + 112 | 0;
13471 i14 = HEAP32[i17 + 4 >> 2] | 0;
13472 i13 = i11 + (i8 * 88 | 0) + 24 | 0;
13473 HEAP32[i13 >> 2] = HEAP32[i17 >> 2];
13474 HEAP32[i13 + 4 >> 2] = i14;
13475 HEAP32[i11 + (i8 * 88 | 0) + 84 >> 2] = i9;
13476 HEAPF32[i11 + (i8 * 88 | 0) + 76 >> 2] = d16;
13477 HEAPF32[i11 + (i8 * 88 | 0) + 80 >> 2] = d15;
13478 HEAP32[i11 + (i8 * 88 | 0) + 72 >> 2] = HEAP32[i10 + 120 >> 2];
13479 i13 = 0;
13480 do {
13481 i14 = i10 + (i13 * 20 | 0) + 64 | 0;
13482 if ((HEAP8[i6] | 0) == 0) {
13483 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 16 >> 2] = 0.0;
13484 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 20 >> 2] = 0.0;
13485 } else {
13486 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 16 >> 2] = +HEAPF32[i7 >> 2] * +HEAPF32[i10 + (i13 * 20 | 0) + 72 >> 2];
13487 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 20 >> 2] = +HEAPF32[i7 >> 2] * +HEAPF32[i10 + (i13 * 20 | 0) + 76 >> 2];
13488 }
13489 i20 = i12 + (i8 * 152 | 0) + (i13 * 36 | 0) | 0;
13490 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 24 >> 2] = 0.0;
13491 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 28 >> 2] = 0.0;
13492 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 32 >> 2] = 0.0;
13493 i22 = i11 + (i8 * 88 | 0) + (i13 << 3) | 0;
13494 HEAP32[i20 + 0 >> 2] = 0;
13495 HEAP32[i20 + 4 >> 2] = 0;
13496 HEAP32[i20 + 8 >> 2] = 0;
13497 HEAP32[i20 + 12 >> 2] = 0;
13498 i20 = i14;
13499 i21 = HEAP32[i20 + 4 >> 2] | 0;
13500 HEAP32[i22 >> 2] = HEAP32[i20 >> 2];
13501 HEAP32[i22 + 4 >> 2] = i21;
13502 i13 = i13 + 1 | 0;
13503 } while ((i13 | 0) != (i9 | 0));
13504 i8 = i8 + 1 | 0;
13505 if ((i8 | 0) >= (HEAP32[i4 >> 2] | 0)) {
13506 i2 = 12;
13507 break;
13508 }
13509 i9 = HEAP32[i5 >> 2] | 0;
13510 }
13511 if ((i2 | 0) == 4) {
13512 ___assert_fail(6504, 6520, 71, 6568);
13513 } else if ((i2 | 0) == 12) {
13514 STACKTOP = i1;
13515 return;
13516 }
13517}
13518function __Z25b2CollidePolygonAndCircleP10b2ManifoldPK14b2PolygonShapeRK11b2TransformPK13b2CircleShapeS6_(i1, i4, i11, i9, i10) {
13519 i1 = i1 | 0;
13520 i4 = i4 | 0;
13521 i11 = i11 | 0;
13522 i9 = i9 | 0;
13523 i10 = i10 | 0;
13524 var i2 = 0, i3 = 0, i5 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i12 = 0, d13 = 0.0, d14 = 0.0, i15 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, i22 = 0;
13525 i3 = STACKTOP;
13526 i5 = i1 + 60 | 0;
13527 HEAP32[i5 >> 2] = 0;
13528 i2 = i9 + 12 | 0;
13529 d20 = +HEAPF32[i10 + 12 >> 2];
13530 d7 = +HEAPF32[i2 >> 2];
13531 d6 = +HEAPF32[i10 + 8 >> 2];
13532 d21 = +HEAPF32[i9 + 16 >> 2];
13533 d8 = +HEAPF32[i10 >> 2] + (d20 * d7 - d6 * d21) - +HEAPF32[i11 >> 2];
13534 d21 = d7 * d6 + d20 * d21 + +HEAPF32[i10 + 4 >> 2] - +HEAPF32[i11 + 4 >> 2];
13535 d20 = +HEAPF32[i11 + 12 >> 2];
13536 d6 = +HEAPF32[i11 + 8 >> 2];
13537 d7 = d8 * d20 + d21 * d6;
13538 d6 = d20 * d21 - d8 * d6;
13539 d8 = +HEAPF32[i4 + 8 >> 2] + +HEAPF32[i9 + 8 >> 2];
13540 i12 = HEAP32[i4 + 148 >> 2] | 0;
13541 do {
13542 if ((i12 | 0) > 0) {
13543 i10 = 0;
13544 i9 = 0;
13545 d13 = -3.4028234663852886e+38;
13546 while (1) {
13547 d14 = (d7 - +HEAPF32[i4 + (i10 << 3) + 20 >> 2]) * +HEAPF32[i4 + (i10 << 3) + 84 >> 2] + (d6 - +HEAPF32[i4 + (i10 << 3) + 24 >> 2]) * +HEAPF32[i4 + (i10 << 3) + 88 >> 2];
13548 if (d14 > d8) {
13549 i10 = 19;
13550 break;
13551 }
13552 i11 = d14 > d13;
13553 d13 = i11 ? d14 : d13;
13554 i9 = i11 ? i10 : i9;
13555 i10 = i10 + 1 | 0;
13556 if ((i10 | 0) >= (i12 | 0)) {
13557 i10 = 4;
13558 break;
13559 }
13560 }
13561 if ((i10 | 0) == 4) {
13562 i22 = d13 < 1.1920928955078125e-7;
13563 break;
13564 } else if ((i10 | 0) == 19) {
13565 STACKTOP = i3;
13566 return;
13567 }
13568 } else {
13569 i9 = 0;
13570 i22 = 1;
13571 }
13572 } while (0);
13573 i15 = i9 + 1 | 0;
13574 i11 = i4 + (i9 << 3) + 20 | 0;
13575 i10 = HEAP32[i11 >> 2] | 0;
13576 i11 = HEAP32[i11 + 4 >> 2] | 0;
13577 d14 = (HEAP32[tempDoublePtr >> 2] = i10, +HEAPF32[tempDoublePtr >> 2]);
13578 d13 = (HEAP32[tempDoublePtr >> 2] = i11, +HEAPF32[tempDoublePtr >> 2]);
13579 i12 = i4 + (((i15 | 0) < (i12 | 0) ? i15 : 0) << 3) + 20 | 0;
13580 i15 = HEAP32[i12 >> 2] | 0;
13581 i12 = HEAP32[i12 + 4 >> 2] | 0;
13582 d21 = (HEAP32[tempDoublePtr >> 2] = i15, +HEAPF32[tempDoublePtr >> 2]);
13583 d18 = (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]);
13584 if (i22) {
13585 HEAP32[i5 >> 2] = 1;
13586 HEAP32[i1 + 56 >> 2] = 1;
13587 i22 = i4 + (i9 << 3) + 84 | 0;
13588 i15 = HEAP32[i22 + 4 >> 2] | 0;
13589 i12 = i1 + 40 | 0;
13590 HEAP32[i12 >> 2] = HEAP32[i22 >> 2];
13591 HEAP32[i12 + 4 >> 2] = i15;
13592 d20 = +((d14 + d21) * .5);
13593 d21 = +((d13 + d18) * .5);
13594 i12 = i1 + 48 | 0;
13595 HEAPF32[i12 >> 2] = d20;
13596 HEAPF32[i12 + 4 >> 2] = d21;
13597 i12 = i2;
13598 i15 = HEAP32[i12 + 4 >> 2] | 0;
13599 i22 = i1;
13600 HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
13601 HEAP32[i22 + 4 >> 2] = i15;
13602 HEAP32[i1 + 16 >> 2] = 0;
13603 STACKTOP = i3;
13604 return;
13605 }
13606 d16 = d7 - d14;
13607 d20 = d6 - d13;
13608 d19 = d7 - d21;
13609 d17 = d6 - d18;
13610 if (d16 * (d21 - d14) + d20 * (d18 - d13) <= 0.0) {
13611 if (d16 * d16 + d20 * d20 > d8 * d8) {
13612 STACKTOP = i3;
13613 return;
13614 }
13615 HEAP32[i5 >> 2] = 1;
13616 HEAP32[i1 + 56 >> 2] = 1;
13617 i4 = i1 + 40 | 0;
13618 d21 = +d16;
13619 d6 = +d20;
13620 i22 = i4;
13621 HEAPF32[i22 >> 2] = d21;
13622 HEAPF32[i22 + 4 >> 2] = d6;
13623 d6 = +Math_sqrt(+(d16 * d16 + d20 * d20));
13624 if (!(d6 < 1.1920928955078125e-7)) {
13625 d21 = 1.0 / d6;
13626 HEAPF32[i4 >> 2] = d16 * d21;
13627 HEAPF32[i1 + 44 >> 2] = d20 * d21;
13628 }
13629 i12 = i1 + 48 | 0;
13630 HEAP32[i12 >> 2] = i10;
13631 HEAP32[i12 + 4 >> 2] = i11;
13632 i12 = i2;
13633 i15 = HEAP32[i12 + 4 >> 2] | 0;
13634 i22 = i1;
13635 HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
13636 HEAP32[i22 + 4 >> 2] = i15;
13637 HEAP32[i1 + 16 >> 2] = 0;
13638 STACKTOP = i3;
13639 return;
13640 }
13641 if (!(d19 * (d14 - d21) + d17 * (d13 - d18) <= 0.0)) {
13642 d14 = (d14 + d21) * .5;
13643 d13 = (d13 + d18) * .5;
13644 i10 = i4 + (i9 << 3) + 84 | 0;
13645 if ((d7 - d14) * +HEAPF32[i10 >> 2] + (d6 - d13) * +HEAPF32[i4 + (i9 << 3) + 88 >> 2] > d8) {
13646 STACKTOP = i3;
13647 return;
13648 }
13649 HEAP32[i5 >> 2] = 1;
13650 HEAP32[i1 + 56 >> 2] = 1;
13651 i22 = i10;
13652 i15 = HEAP32[i22 + 4 >> 2] | 0;
13653 i12 = i1 + 40 | 0;
13654 HEAP32[i12 >> 2] = HEAP32[i22 >> 2];
13655 HEAP32[i12 + 4 >> 2] = i15;
13656 d20 = +d14;
13657 d21 = +d13;
13658 i12 = i1 + 48 | 0;
13659 HEAPF32[i12 >> 2] = d20;
13660 HEAPF32[i12 + 4 >> 2] = d21;
13661 i12 = i2;
13662 i15 = HEAP32[i12 + 4 >> 2] | 0;
13663 i22 = i1;
13664 HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
13665 HEAP32[i22 + 4 >> 2] = i15;
13666 HEAP32[i1 + 16 >> 2] = 0;
13667 STACKTOP = i3;
13668 return;
13669 }
13670 if (d19 * d19 + d17 * d17 > d8 * d8) {
13671 STACKTOP = i3;
13672 return;
13673 }
13674 HEAP32[i5 >> 2] = 1;
13675 HEAP32[i1 + 56 >> 2] = 1;
13676 i4 = i1 + 40 | 0;
13677 d21 = +d19;
13678 d6 = +d17;
13679 i22 = i4;
13680 HEAPF32[i22 >> 2] = d21;
13681 HEAPF32[i22 + 4 >> 2] = d6;
13682 d6 = +Math_sqrt(+(d19 * d19 + d17 * d17));
13683 if (!(d6 < 1.1920928955078125e-7)) {
13684 d21 = 1.0 / d6;
13685 HEAPF32[i4 >> 2] = d19 * d21;
13686 HEAPF32[i1 + 44 >> 2] = d17 * d21;
13687 }
13688 i22 = i1 + 48 | 0;
13689 HEAP32[i22 >> 2] = i15;
13690 HEAP32[i22 + 4 >> 2] = i12;
13691 i12 = i2;
13692 i15 = HEAP32[i12 + 4 >> 2] | 0;
13693 i22 = i1;
13694 HEAP32[i22 >> 2] = HEAP32[i12 >> 2];
13695 HEAP32[i22 + 4 >> 2] = i15;
13696 HEAP32[i1 + 16 >> 2] = 0;
13697 STACKTOP = i3;
13698 return;
13699}
13700function __ZN15b2WorldManifold10InitializeEPK10b2ManifoldRK11b2TransformfS5_f(i1, i5, i7, d4, i8, d3) {
13701 i1 = i1 | 0;
13702 i5 = i5 | 0;
13703 i7 = i7 | 0;
13704 d4 = +d4;
13705 i8 = i8 | 0;
13706 d3 = +d3;
13707 var i2 = 0, i6 = 0, d9 = 0.0, d10 = 0.0, i11 = 0, i12 = 0, i13 = 0, d14 = 0.0, d15 = 0.0, i16 = 0, d17 = 0.0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0, d22 = 0.0;
13708 i2 = STACKTOP;
13709 i6 = i5 + 60 | 0;
13710 if ((HEAP32[i6 >> 2] | 0) == 0) {
13711 STACKTOP = i2;
13712 return;
13713 }
13714 i11 = HEAP32[i5 + 56 >> 2] | 0;
13715 if ((i11 | 0) == 2) {
13716 i13 = i8 + 12 | 0;
13717 d17 = +HEAPF32[i13 >> 2];
13718 d18 = +HEAPF32[i5 + 40 >> 2];
13719 i16 = i8 + 8 | 0;
13720 d19 = +HEAPF32[i16 >> 2];
13721 d15 = +HEAPF32[i5 + 44 >> 2];
13722 d14 = d17 * d18 - d19 * d15;
13723 d15 = d18 * d19 + d17 * d15;
13724 d17 = +d14;
13725 d19 = +d15;
13726 i12 = i1;
13727 HEAPF32[i12 >> 2] = d17;
13728 HEAPF32[i12 + 4 >> 2] = d19;
13729 d19 = +HEAPF32[i13 >> 2];
13730 d17 = +HEAPF32[i5 + 48 >> 2];
13731 d18 = +HEAPF32[i16 >> 2];
13732 d10 = +HEAPF32[i5 + 52 >> 2];
13733 d9 = +HEAPF32[i8 >> 2] + (d19 * d17 - d18 * d10);
13734 d10 = d17 * d18 + d19 * d10 + +HEAPF32[i8 + 4 >> 2];
13735 if ((HEAP32[i6 >> 2] | 0) > 0) {
13736 i8 = i7 + 12 | 0;
13737 i11 = i7 + 8 | 0;
13738 i12 = i7 + 4 | 0;
13739 i13 = i1 + 4 | 0;
13740 i16 = 0;
13741 do {
13742 d18 = +HEAPF32[i8 >> 2];
13743 d22 = +HEAPF32[i5 + (i16 * 20 | 0) >> 2];
13744 d21 = +HEAPF32[i11 >> 2];
13745 d17 = +HEAPF32[i5 + (i16 * 20 | 0) + 4 >> 2];
13746 d19 = +HEAPF32[i7 >> 2] + (d18 * d22 - d21 * d17);
13747 d17 = d22 * d21 + d18 * d17 + +HEAPF32[i12 >> 2];
13748 d18 = d3 - (d14 * (d19 - d9) + (d17 - d10) * d15);
13749 d19 = +((d19 - d14 * d4 + (d19 + d14 * d18)) * .5);
13750 d14 = +((d17 - d15 * d4 + (d17 + d15 * d18)) * .5);
13751 i20 = i1 + (i16 << 3) + 8 | 0;
13752 HEAPF32[i20 >> 2] = d19;
13753 HEAPF32[i20 + 4 >> 2] = d14;
13754 i16 = i16 + 1 | 0;
13755 d14 = +HEAPF32[i1 >> 2];
13756 d15 = +HEAPF32[i13 >> 2];
13757 } while ((i16 | 0) < (HEAP32[i6 >> 2] | 0));
13758 }
13759 d21 = +-d14;
13760 d22 = +-d15;
13761 i20 = i1;
13762 HEAPF32[i20 >> 2] = d21;
13763 HEAPF32[i20 + 4 >> 2] = d22;
13764 STACKTOP = i2;
13765 return;
13766 } else if ((i11 | 0) == 1) {
13767 i16 = i7 + 12 | 0;
13768 d19 = +HEAPF32[i16 >> 2];
13769 d21 = +HEAPF32[i5 + 40 >> 2];
13770 i20 = i7 + 8 | 0;
13771 d22 = +HEAPF32[i20 >> 2];
13772 d15 = +HEAPF32[i5 + 44 >> 2];
13773 d14 = d19 * d21 - d22 * d15;
13774 d15 = d21 * d22 + d19 * d15;
13775 d19 = +d14;
13776 d22 = +d15;
13777 i13 = i1;
13778 HEAPF32[i13 >> 2] = d19;
13779 HEAPF32[i13 + 4 >> 2] = d22;
13780 d22 = +HEAPF32[i16 >> 2];
13781 d19 = +HEAPF32[i5 + 48 >> 2];
13782 d21 = +HEAPF32[i20 >> 2];
13783 d10 = +HEAPF32[i5 + 52 >> 2];
13784 d9 = +HEAPF32[i7 >> 2] + (d22 * d19 - d21 * d10);
13785 d10 = d19 * d21 + d22 * d10 + +HEAPF32[i7 + 4 >> 2];
13786 if ((HEAP32[i6 >> 2] | 0) <= 0) {
13787 STACKTOP = i2;
13788 return;
13789 }
13790 i12 = i8 + 12 | 0;
13791 i11 = i8 + 8 | 0;
13792 i7 = i8 + 4 | 0;
13793 i13 = i1 + 4 | 0;
13794 i16 = 0;
13795 while (1) {
13796 d22 = +HEAPF32[i12 >> 2];
13797 d17 = +HEAPF32[i5 + (i16 * 20 | 0) >> 2];
13798 d18 = +HEAPF32[i11 >> 2];
13799 d19 = +HEAPF32[i5 + (i16 * 20 | 0) + 4 >> 2];
13800 d21 = +HEAPF32[i8 >> 2] + (d22 * d17 - d18 * d19);
13801 d19 = d17 * d18 + d22 * d19 + +HEAPF32[i7 >> 2];
13802 d22 = d4 - (d14 * (d21 - d9) + (d19 - d10) * d15);
13803 d21 = +((d21 - d14 * d3 + (d21 + d14 * d22)) * .5);
13804 d22 = +((d19 - d15 * d3 + (d19 + d15 * d22)) * .5);
13805 i20 = i1 + (i16 << 3) + 8 | 0;
13806 HEAPF32[i20 >> 2] = d21;
13807 HEAPF32[i20 + 4 >> 2] = d22;
13808 i16 = i16 + 1 | 0;
13809 if ((i16 | 0) >= (HEAP32[i6 >> 2] | 0)) {
13810 break;
13811 }
13812 d14 = +HEAPF32[i1 >> 2];
13813 d15 = +HEAPF32[i13 >> 2];
13814 }
13815 STACKTOP = i2;
13816 return;
13817 } else if ((i11 | 0) == 0) {
13818 HEAPF32[i1 >> 2] = 1.0;
13819 i6 = i1 + 4 | 0;
13820 HEAPF32[i6 >> 2] = 0.0;
13821 d21 = +HEAPF32[i7 + 12 >> 2];
13822 d22 = +HEAPF32[i5 + 48 >> 2];
13823 d19 = +HEAPF32[i7 + 8 >> 2];
13824 d10 = +HEAPF32[i5 + 52 >> 2];
13825 d9 = +HEAPF32[i7 >> 2] + (d21 * d22 - d19 * d10);
13826 d10 = d22 * d19 + d21 * d10 + +HEAPF32[i7 + 4 >> 2];
13827 d21 = +HEAPF32[i8 + 12 >> 2];
13828 d19 = +HEAPF32[i5 >> 2];
13829 d22 = +HEAPF32[i8 + 8 >> 2];
13830 d15 = +HEAPF32[i5 + 4 >> 2];
13831 d14 = +HEAPF32[i8 >> 2] + (d21 * d19 - d22 * d15);
13832 d15 = d19 * d22 + d21 * d15 + +HEAPF32[i8 + 4 >> 2];
13833 d21 = d9 - d14;
13834 d22 = d10 - d15;
13835 if (d21 * d21 + d22 * d22 > 1.4210854715202004e-14) {
13836 d19 = d14 - d9;
13837 d17 = d15 - d10;
13838 d22 = +d19;
13839 d18 = +d17;
13840 i20 = i1;
13841 HEAPF32[i20 >> 2] = d22;
13842 HEAPF32[i20 + 4 >> 2] = d18;
13843 d18 = +Math_sqrt(+(d19 * d19 + d17 * d17));
13844 if (!(d18 < 1.1920928955078125e-7)) {
13845 d22 = 1.0 / d18;
13846 d19 = d19 * d22;
13847 HEAPF32[i1 >> 2] = d19;
13848 d17 = d17 * d22;
13849 HEAPF32[i6 >> 2] = d17;
13850 }
13851 } else {
13852 d19 = 1.0;
13853 d17 = 0.0;
13854 }
13855 d21 = +((d9 + d19 * d4 + (d14 - d19 * d3)) * .5);
13856 d22 = +((d10 + d17 * d4 + (d15 - d17 * d3)) * .5);
13857 i20 = i1 + 8 | 0;
13858 HEAPF32[i20 >> 2] = d21;
13859 HEAPF32[i20 + 4 >> 2] = d22;
13860 STACKTOP = i2;
13861 return;
13862 } else {
13863 STACKTOP = i2;
13864 return;
13865 }
13866}
13867function _main(i3, i2) {
13868 i3 = i3 | 0;
13869 i2 = i2 | 0;
13870 var i1 = 0, i4 = 0, i5 = 0, d6 = 0.0, d7 = 0.0, i8 = 0, i9 = 0, d10 = 0.0, d11 = 0.0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, d22 = 0.0, d23 = 0.0;
13871 i1 = STACKTOP;
13872 STACKTOP = STACKTOP + 240 | 0;
13873 i5 = i1;
13874 i12 = i1 + 224 | 0;
13875 i4 = i1 + 168 | 0;
13876 i9 = i1 + 160 | 0;
13877 i8 = i1 + 152 | 0;
13878 L1 : do {
13879 if ((i3 | 0) > 1) {
13880 i14 = HEAP8[HEAP32[i2 + 4 >> 2] | 0] | 0;
13881 switch (i14 | 0) {
13882 case 49:
13883 {
13884 HEAP32[2] = 5;
13885 HEAP32[4] = 35;
13886 i15 = 35;
13887 i14 = 5;
13888 break L1;
13889 }
13890 case 50:
13891 {
13892 HEAP32[2] = 32;
13893 HEAP32[4] = 161;
13894 i15 = 161;
13895 i14 = 32;
13896 break L1;
13897 }
13898 case 51:
13899 {
13900 i13 = 5;
13901 break L1;
13902 }
13903 case 52:
13904 {
13905 HEAP32[2] = 320;
13906 HEAP32[4] = 2331;
13907 i15 = 2331;
13908 i14 = 320;
13909 break L1;
13910 }
13911 case 53:
13912 {
13913 HEAP32[2] = 640;
13914 HEAP32[4] = 5661;
13915 i15 = 5661;
13916 i14 = 640;
13917 break L1;
13918 }
13919 case 48:
13920 {
13921 i20 = 0;
13922 STACKTOP = i1;
13923 return i20 | 0;
13924 }
13925 default:
13926 {
13927 HEAP32[i5 >> 2] = i14 + -48;
13928 _printf(80, i5 | 0) | 0;
13929 i20 = -1;
13930 STACKTOP = i1;
13931 return i20 | 0;
13932 }
13933 }
13934 } else {
13935 i13 = 5;
13936 }
13937 } while (0);
13938 if ((i13 | 0) == 5) {
13939 HEAP32[2] = 64;
13940 HEAP32[4] = 333;
13941 i15 = 333;
13942 i14 = 64;
13943 }
13944 i13 = i15 + i14 | 0;
13945 HEAP32[4] = i13;
13946 HEAP32[2] = 0;
13947 HEAP32[8] = __Znaj(i13 >>> 0 > 1073741823 ? -1 : i13 << 2) | 0;
13948 HEAPF32[i12 >> 2] = 0.0;
13949 HEAPF32[i12 + 4 >> 2] = -10.0;
13950 i15 = __Znwj(103028) | 0;
13951 __ZN7b2WorldC2ERK6b2Vec2(i15, i12);
13952 HEAP32[6] = i15;
13953 __ZN7b2World16SetAllowSleepingEb(i15, 0);
13954 HEAP32[i5 + 44 >> 2] = 0;
13955 i15 = i5 + 4 | 0;
13956 i14 = i5 + 36 | 0;
13957 HEAP32[i15 + 0 >> 2] = 0;
13958 HEAP32[i15 + 4 >> 2] = 0;
13959 HEAP32[i15 + 8 >> 2] = 0;
13960 HEAP32[i15 + 12 >> 2] = 0;
13961 HEAP32[i15 + 16 >> 2] = 0;
13962 HEAP32[i15 + 20 >> 2] = 0;
13963 HEAP32[i15 + 24 >> 2] = 0;
13964 HEAP32[i15 + 28 >> 2] = 0;
13965 HEAP8[i14] = 1;
13966 HEAP8[i5 + 37 | 0] = 1;
13967 HEAP8[i5 + 38 | 0] = 0;
13968 HEAP8[i5 + 39 | 0] = 0;
13969 HEAP32[i5 >> 2] = 0;
13970 HEAP8[i5 + 40 | 0] = 1;
13971 HEAPF32[i5 + 48 >> 2] = 1.0;
13972 i14 = __ZN7b2World10CreateBodyEPK9b2BodyDef(HEAP32[6] | 0, i5) | 0;
13973 HEAP32[i4 >> 2] = 240;
13974 HEAP32[i4 + 4 >> 2] = 1;
13975 HEAPF32[i4 + 8 >> 2] = .009999999776482582;
13976 i15 = i4 + 28 | 0;
13977 HEAP32[i15 + 0 >> 2] = 0;
13978 HEAP32[i15 + 4 >> 2] = 0;
13979 HEAP32[i15 + 8 >> 2] = 0;
13980 HEAP32[i15 + 12 >> 2] = 0;
13981 HEAP16[i15 + 16 >> 1] = 0;
13982 HEAPF32[i9 >> 2] = -40.0;
13983 HEAPF32[i9 + 4 >> 2] = 0.0;
13984 HEAPF32[i8 >> 2] = 40.0;
13985 HEAPF32[i8 + 4 >> 2] = 0.0;
13986 __ZN11b2EdgeShape3SetERK6b2Vec2S2_(i4, i9, i8);
13987 __ZN6b2Body13CreateFixtureEPK7b2Shapef(i14, i4, 0.0) | 0;
13988 HEAP32[i5 >> 2] = 504;
13989 HEAP32[i5 + 4 >> 2] = 2;
13990 HEAPF32[i5 + 8 >> 2] = .009999999776482582;
13991 HEAP32[i5 + 148 >> 2] = 0;
13992 HEAPF32[i5 + 12 >> 2] = 0.0;
13993 HEAPF32[i5 + 16 >> 2] = 0.0;
13994 __ZN14b2PolygonShape8SetAsBoxEff(i5, .5, .5);
13995 i14 = i4 + 44 | 0;
13996 i15 = i4 + 4 | 0;
13997 i8 = i4 + 36 | 0;
13998 i17 = i4 + 37 | 0;
13999 i18 = i4 + 38 | 0;
14000 i19 = i4 + 39 | 0;
14001 i20 = i4 + 40 | 0;
14002 i13 = i4 + 48 | 0;
14003 i12 = i4 + 4 | 0;
14004 d11 = -7.0;
14005 d10 = .75;
14006 i9 = 0;
14007 while (1) {
14008 d7 = d11;
14009 d6 = d10;
14010 i16 = i9;
14011 while (1) {
14012 HEAP32[i14 >> 2] = 0;
14013 HEAP32[i15 + 0 >> 2] = 0;
14014 HEAP32[i15 + 4 >> 2] = 0;
14015 HEAP32[i15 + 8 >> 2] = 0;
14016 HEAP32[i15 + 12 >> 2] = 0;
14017 HEAP32[i15 + 16 >> 2] = 0;
14018 HEAP32[i15 + 20 >> 2] = 0;
14019 HEAP32[i15 + 24 >> 2] = 0;
14020 HEAP32[i15 + 28 >> 2] = 0;
14021 HEAP8[i8] = 1;
14022 HEAP8[i17] = 1;
14023 HEAP8[i18] = 0;
14024 HEAP8[i19] = 0;
14025 HEAP8[i20] = 1;
14026 HEAPF32[i13 >> 2] = 1.0;
14027 HEAP32[i4 >> 2] = 2;
14028 d23 = +d7;
14029 d22 = +d6;
14030 i21 = i12;
14031 HEAPF32[i21 >> 2] = d23;
14032 HEAPF32[i21 + 4 >> 2] = d22;
14033 i21 = __ZN7b2World10CreateBodyEPK9b2BodyDef(HEAP32[6] | 0, i4) | 0;
14034 __ZN6b2Body13CreateFixtureEPK7b2Shapef(i21, i5, 5.0) | 0;
14035 HEAP32[14] = i21;
14036 i16 = i16 + 1 | 0;
14037 if ((i16 | 0) >= 40) {
14038 break;
14039 } else {
14040 d7 = d7 + 1.125;
14041 d6 = d6 + 0.0;
14042 }
14043 }
14044 i9 = i9 + 1 | 0;
14045 if ((i9 | 0) >= 40) {
14046 break;
14047 } else {
14048 d11 = d11 + .5625;
14049 d10 = d10 + 1.0;
14050 }
14051 }
14052 if ((HEAP32[2] | 0) > 0) {
14053 i4 = 0;
14054 do {
14055 __ZN7b2World4StepEfii(HEAP32[6] | 0, .01666666753590107, 3, 3);
14056 i4 = i4 + 1 | 0;
14057 } while ((i4 | 0) < (HEAP32[2] | 0));
14058 }
14059 if ((i3 | 0) > 2) {
14060 i21 = (HEAP8[HEAP32[i2 + 8 >> 2] | 0] | 0) + -48 | 0;
14061 HEAP32[18] = i21;
14062 if ((i21 | 0) != 0) {
14063 _puts(208) | 0;
14064 _emscripten_set_main_loop(2, 60, 1);
14065 i21 = 0;
14066 STACKTOP = i1;
14067 return i21 | 0;
14068 }
14069 } else {
14070 HEAP32[18] = 0;
14071 }
14072 while (1) {
14073 __Z4iterv();
14074 if ((HEAP32[16] | 0) > (HEAP32[4] | 0)) {
14075 i2 = 0;
14076 break;
14077 }
14078 }
14079 STACKTOP = i1;
14080 return i2 | 0;
14081}
14082function __ZN9b2Simplex9ReadCacheEPK14b2SimplexCachePK15b2DistanceProxyRK11b2TransformS5_S8_(i2, i11, i10, i4, i3, i5) {
14083 i2 = i2 | 0;
14084 i11 = i11 | 0;
14085 i10 = i10 | 0;
14086 i4 = i4 | 0;
14087 i3 = i3 | 0;
14088 i5 = i5 | 0;
14089 var i1 = 0, i6 = 0, i7 = 0, d8 = 0.0, i9 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, d24 = 0.0, d25 = 0.0, i26 = 0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, d31 = 0.0, d32 = 0.0;
14090 i1 = STACKTOP;
14091 i13 = HEAP16[i11 + 4 >> 1] | 0;
14092 if (!((i13 & 65535) < 4)) {
14093 ___assert_fail(2872, 2672, 102, 2896);
14094 }
14095 i12 = i13 & 65535;
14096 i6 = i2 + 108 | 0;
14097 HEAP32[i6 >> 2] = i12;
14098 L4 : do {
14099 if (!(i13 << 16 >> 16 == 0)) {
14100 i17 = i10 + 20 | 0;
14101 i21 = i10 + 16 | 0;
14102 i13 = i3 + 20 | 0;
14103 i14 = i3 + 16 | 0;
14104 i15 = i4 + 12 | 0;
14105 i16 = i4 + 8 | 0;
14106 i12 = i4 + 4 | 0;
14107 i18 = i5 + 12 | 0;
14108 i19 = i5 + 8 | 0;
14109 i20 = i5 + 4 | 0;
14110 i22 = 0;
14111 while (1) {
14112 i26 = HEAPU8[i11 + i22 + 6 | 0] | 0;
14113 HEAP32[i2 + (i22 * 36 | 0) + 28 >> 2] = i26;
14114 i23 = HEAPU8[i11 + i22 + 9 | 0] | 0;
14115 HEAP32[i2 + (i22 * 36 | 0) + 32 >> 2] = i23;
14116 if ((HEAP32[i17 >> 2] | 0) <= (i26 | 0)) {
14117 i9 = 6;
14118 break;
14119 }
14120 i26 = (HEAP32[i21 >> 2] | 0) + (i26 << 3) | 0;
14121 d25 = +HEAPF32[i26 >> 2];
14122 d24 = +HEAPF32[i26 + 4 >> 2];
14123 if ((HEAP32[i13 >> 2] | 0) <= (i23 | 0)) {
14124 i9 = 8;
14125 break;
14126 }
14127 i23 = (HEAP32[i14 >> 2] | 0) + (i23 << 3) | 0;
14128 d29 = +HEAPF32[i23 >> 2];
14129 d31 = +HEAPF32[i23 + 4 >> 2];
14130 d32 = +HEAPF32[i15 >> 2];
14131 d30 = +HEAPF32[i16 >> 2];
14132 d27 = +HEAPF32[i4 >> 2] + (d25 * d32 - d24 * d30);
14133 d28 = +d27;
14134 d30 = +(d24 * d32 + d25 * d30 + +HEAPF32[i12 >> 2]);
14135 i23 = i2 + (i22 * 36 | 0) | 0;
14136 HEAPF32[i23 >> 2] = d28;
14137 HEAPF32[i23 + 4 >> 2] = d30;
14138 d30 = +HEAPF32[i18 >> 2];
14139 d25 = +HEAPF32[i19 >> 2];
14140 d24 = +HEAPF32[i5 >> 2] + (d29 * d30 - d31 * d25);
14141 d28 = +d24;
14142 d25 = +(d31 * d30 + d29 * d25 + +HEAPF32[i20 >> 2]);
14143 i23 = i2 + (i22 * 36 | 0) + 8 | 0;
14144 HEAPF32[i23 >> 2] = d28;
14145 HEAPF32[i23 + 4 >> 2] = d25;
14146 d24 = +(d24 - d27);
14147 d25 = +(+HEAPF32[i2 + (i22 * 36 | 0) + 12 >> 2] - +HEAPF32[i2 + (i22 * 36 | 0) + 4 >> 2]);
14148 i23 = i2 + (i22 * 36 | 0) + 16 | 0;
14149 HEAPF32[i23 >> 2] = d24;
14150 HEAPF32[i23 + 4 >> 2] = d25;
14151 HEAPF32[i2 + (i22 * 36 | 0) + 24 >> 2] = 0.0;
14152 i22 = i22 + 1 | 0;
14153 i23 = HEAP32[i6 >> 2] | 0;
14154 if ((i22 | 0) >= (i23 | 0)) {
14155 i7 = i23;
14156 break L4;
14157 }
14158 }
14159 if ((i9 | 0) == 6) {
14160 ___assert_fail(2776, 2808, 103, 2840);
14161 } else if ((i9 | 0) == 8) {
14162 ___assert_fail(2776, 2808, 103, 2840);
14163 }
14164 } else {
14165 i7 = i12;
14166 }
14167 } while (0);
14168 do {
14169 if ((i7 | 0) > 1) {
14170 d24 = +HEAPF32[i11 >> 2];
14171 if ((i7 | 0) == 2) {
14172 d32 = +HEAPF32[i2 + 16 >> 2] - +HEAPF32[i2 + 52 >> 2];
14173 d8 = +HEAPF32[i2 + 20 >> 2] - +HEAPF32[i2 + 56 >> 2];
14174 d8 = +Math_sqrt(+(d32 * d32 + d8 * d8));
14175 } else if ((i7 | 0) == 3) {
14176 d8 = +HEAPF32[i2 + 16 >> 2];
14177 d32 = +HEAPF32[i2 + 20 >> 2];
14178 d8 = (+HEAPF32[i2 + 52 >> 2] - d8) * (+HEAPF32[i2 + 92 >> 2] - d32) - (+HEAPF32[i2 + 56 >> 2] - d32) * (+HEAPF32[i2 + 88 >> 2] - d8);
14179 } else {
14180 ___assert_fail(2712, 2672, 259, 2736);
14181 }
14182 if (!(d8 < d24 * .5) ? !(d24 * 2.0 < d8 | d8 < 1.1920928955078125e-7) : 0) {
14183 i9 = 18;
14184 break;
14185 }
14186 HEAP32[i6 >> 2] = 0;
14187 } else {
14188 i9 = 18;
14189 }
14190 } while (0);
14191 if ((i9 | 0) == 18 ? (i7 | 0) != 0 : 0) {
14192 STACKTOP = i1;
14193 return;
14194 }
14195 HEAP32[i2 + 28 >> 2] = 0;
14196 HEAP32[i2 + 32 >> 2] = 0;
14197 if ((HEAP32[i10 + 20 >> 2] | 0) <= 0) {
14198 ___assert_fail(2776, 2808, 103, 2840);
14199 }
14200 i26 = HEAP32[i10 + 16 >> 2] | 0;
14201 d8 = +HEAPF32[i26 >> 2];
14202 d24 = +HEAPF32[i26 + 4 >> 2];
14203 if ((HEAP32[i3 + 20 >> 2] | 0) <= 0) {
14204 ___assert_fail(2776, 2808, 103, 2840);
14205 }
14206 i26 = HEAP32[i3 + 16 >> 2] | 0;
14207 d27 = +HEAPF32[i26 >> 2];
14208 d25 = +HEAPF32[i26 + 4 >> 2];
14209 d30 = +HEAPF32[i4 + 12 >> 2];
14210 d32 = +HEAPF32[i4 + 8 >> 2];
14211 d31 = +HEAPF32[i4 >> 2] + (d8 * d30 - d24 * d32);
14212 d32 = d24 * d30 + d8 * d32 + +HEAPF32[i4 + 4 >> 2];
14213 d30 = +d31;
14214 d28 = +d32;
14215 i26 = i2;
14216 HEAPF32[i26 >> 2] = d30;
14217 HEAPF32[i26 + 4 >> 2] = d28;
14218 d28 = +HEAPF32[i5 + 12 >> 2];
14219 d30 = +HEAPF32[i5 + 8 >> 2];
14220 d29 = +HEAPF32[i5 >> 2] + (d27 * d28 - d25 * d30);
14221 d30 = d25 * d28 + d27 * d30 + +HEAPF32[i5 + 4 >> 2];
14222 d27 = +d29;
14223 d28 = +d30;
14224 i26 = i2 + 8 | 0;
14225 HEAPF32[i26 >> 2] = d27;
14226 HEAPF32[i26 + 4 >> 2] = d28;
14227 d31 = +(d29 - d31);
14228 d32 = +(d30 - d32);
14229 i26 = i2 + 16 | 0;
14230 HEAPF32[i26 >> 2] = d31;
14231 HEAPF32[i26 + 4 >> 2] = d32;
14232 HEAP32[i6 >> 2] = 1;
14233 STACKTOP = i1;
14234 return;
14235}
14236function __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i6, i7, i5, i4, i1) {
14237 i6 = i6 | 0;
14238 i7 = i7 | 0;
14239 i5 = i5 | 0;
14240 i4 = i4 | 0;
14241 i1 = i1 | 0;
14242 var i2 = 0, i3 = 0, i8 = 0, i9 = 0;
14243 i2 = STACKTOP;
14244 STACKTOP = STACKTOP + 16 | 0;
14245 i3 = i2;
14246 i9 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0;
14247 i8 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0;
14248 do {
14249 if (i9) {
14250 if (i8) {
14251 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
14252 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
14253 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
14254 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14255 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14256 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14257 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14258 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14259 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14260 i8 = 1;
14261 break;
14262 }
14263 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
14264 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
14265 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
14266 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14267 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14268 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14269 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14270 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14271 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14272 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0) {
14273 HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14274 HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14275 HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14276 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14277 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14278 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14279 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14280 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14281 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14282 i8 = 2;
14283 } else {
14284 i8 = 1;
14285 }
14286 } else {
14287 if (i8) {
14288 HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14289 HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14290 HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14291 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14292 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14293 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14294 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14295 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14296 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14297 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0) {
14298 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
14299 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
14300 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
14301 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14302 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14303 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14304 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14305 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14306 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14307 i8 = 2;
14308 } else {
14309 i8 = 1;
14310 }
14311 } else {
14312 i8 = 0;
14313 }
14314 }
14315 } while (0);
14316 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i5) | 0)) {
14317 i9 = i8;
14318 STACKTOP = i2;
14319 return i9 | 0;
14320 }
14321 HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14322 HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14323 HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14324 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2];
14325 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2];
14326 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2];
14327 HEAP32[i4 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14328 HEAP32[i4 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14329 HEAP32[i4 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14330 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0)) {
14331 i9 = i8 + 1 | 0;
14332 STACKTOP = i2;
14333 return i9 | 0;
14334 }
14335 HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14336 HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14337 HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14338 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
14339 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
14340 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
14341 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14342 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14343 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14344 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0)) {
14345 i9 = i8 + 2 | 0;
14346 STACKTOP = i2;
14347 return i9 | 0;
14348 }
14349 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
14350 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
14351 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
14352 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
14353 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
14354 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
14355 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
14356 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
14357 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
14358 i9 = i8 + 3 | 0;
14359 STACKTOP = i2;
14360 return i9 | 0;
14361}
14362function __ZN15b2ContactSolver27SolveTOIPositionConstraintsEii(i9, i2, i5) {
14363 i9 = i9 | 0;
14364 i2 = i2 | 0;
14365 i5 = i5 | 0;
14366 var i1 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, d21 = 0.0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, d31 = 0.0, d32 = 0.0, d33 = 0.0, d34 = 0.0, d35 = 0.0, d36 = 0.0, i37 = 0, d38 = 0.0, d39 = 0.0, d40 = 0.0, d41 = 0.0, d42 = 0.0, d43 = 0.0, d44 = 0.0, d45 = 0.0, i46 = 0, d47 = 0.0;
14367 i1 = STACKTOP;
14368 STACKTOP = STACKTOP + 64 | 0;
14369 i8 = i1 + 40 | 0;
14370 i3 = i1 + 24 | 0;
14371 i4 = i1;
14372 i6 = i9 + 48 | 0;
14373 if ((HEAP32[i6 >> 2] | 0) <= 0) {
14374 d45 = 0.0;
14375 i37 = d45 >= -.007499999832361937;
14376 STACKTOP = i1;
14377 return i37 | 0;
14378 }
14379 i7 = i9 + 36 | 0;
14380 i14 = i9 + 24 | 0;
14381 i9 = i8 + 8 | 0;
14382 i15 = i8 + 12 | 0;
14383 i10 = i3 + 8 | 0;
14384 i11 = i3 + 12 | 0;
14385 i12 = i4 + 8 | 0;
14386 i13 = i4 + 16 | 0;
14387 i16 = 0;
14388 d34 = 0.0;
14389 do {
14390 i37 = HEAP32[i7 >> 2] | 0;
14391 i19 = i37 + (i16 * 88 | 0) | 0;
14392 i17 = HEAP32[i37 + (i16 * 88 | 0) + 32 >> 2] | 0;
14393 i18 = HEAP32[i37 + (i16 * 88 | 0) + 36 >> 2] | 0;
14394 i20 = i37 + (i16 * 88 | 0) + 48 | 0;
14395 d21 = +HEAPF32[i20 >> 2];
14396 d22 = +HEAPF32[i20 + 4 >> 2];
14397 i20 = i37 + (i16 * 88 | 0) + 56 | 0;
14398 d23 = +HEAPF32[i20 >> 2];
14399 d24 = +HEAPF32[i20 + 4 >> 2];
14400 i20 = HEAP32[i37 + (i16 * 88 | 0) + 84 >> 2] | 0;
14401 if ((i17 | 0) == (i2 | 0) | (i17 | 0) == (i5 | 0)) {
14402 d26 = +HEAPF32[i37 + (i16 * 88 | 0) + 64 >> 2];
14403 d27 = +HEAPF32[i37 + (i16 * 88 | 0) + 40 >> 2];
14404 } else {
14405 d26 = 0.0;
14406 d27 = 0.0;
14407 }
14408 d25 = +HEAPF32[i37 + (i16 * 88 | 0) + 44 >> 2];
14409 d28 = +HEAPF32[i37 + (i16 * 88 | 0) + 68 >> 2];
14410 i37 = HEAP32[i14 >> 2] | 0;
14411 i46 = i37 + (i17 * 12 | 0) | 0;
14412 d33 = +HEAPF32[i46 >> 2];
14413 d35 = +HEAPF32[i46 + 4 >> 2];
14414 d29 = +HEAPF32[i37 + (i17 * 12 | 0) + 8 >> 2];
14415 i46 = i37 + (i18 * 12 | 0) | 0;
14416 d32 = +HEAPF32[i46 >> 2];
14417 d36 = +HEAPF32[i46 + 4 >> 2];
14418 d31 = +HEAPF32[i37 + (i18 * 12 | 0) + 8 >> 2];
14419 if ((i20 | 0) > 0) {
14420 d30 = d27 + d25;
14421 i37 = 0;
14422 do {
14423 d38 = +Math_sin(+d29);
14424 HEAPF32[i9 >> 2] = d38;
14425 d44 = +Math_cos(+d29);
14426 HEAPF32[i15 >> 2] = d44;
14427 d43 = +Math_sin(+d31);
14428 HEAPF32[i10 >> 2] = d43;
14429 d41 = +Math_cos(+d31);
14430 HEAPF32[i11 >> 2] = d41;
14431 d40 = +(d33 - (d21 * d44 - d22 * d38));
14432 d38 = +(d35 - (d22 * d44 + d21 * d38));
14433 i46 = i8;
14434 HEAPF32[i46 >> 2] = d40;
14435 HEAPF32[i46 + 4 >> 2] = d38;
14436 d38 = +(d32 - (d23 * d41 - d24 * d43));
14437 d43 = +(d36 - (d24 * d41 + d23 * d43));
14438 i46 = i3;
14439 HEAPF32[i46 >> 2] = d38;
14440 HEAPF32[i46 + 4 >> 2] = d43;
14441 __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK11b2TransformS4_i(i4, i19, i8, i3, i37);
14442 i46 = i4;
14443 d43 = +HEAPF32[i46 >> 2];
14444 d38 = +HEAPF32[i46 + 4 >> 2];
14445 i46 = i12;
14446 d41 = +HEAPF32[i46 >> 2];
14447 d40 = +HEAPF32[i46 + 4 >> 2];
14448 d44 = +HEAPF32[i13 >> 2];
14449 d39 = d41 - d33;
14450 d42 = d40 - d35;
14451 d41 = d41 - d32;
14452 d40 = d40 - d36;
14453 d34 = d34 < d44 ? d34 : d44;
14454 d44 = (d44 + .004999999888241291) * .75;
14455 d44 = d44 < 0.0 ? d44 : 0.0;
14456 d45 = d38 * d39 - d43 * d42;
14457 d47 = d38 * d41 - d43 * d40;
14458 d45 = d47 * d28 * d47 + (d30 + d45 * d26 * d45);
14459 if (d45 > 0.0) {
14460 d44 = -(d44 < -.20000000298023224 ? -.20000000298023224 : d44) / d45;
14461 } else {
14462 d44 = 0.0;
14463 }
14464 d47 = d43 * d44;
14465 d45 = d38 * d44;
14466 d33 = d33 - d27 * d47;
14467 d35 = d35 - d27 * d45;
14468 d29 = d29 - d26 * (d39 * d45 - d42 * d47);
14469 d32 = d32 + d25 * d47;
14470 d36 = d36 + d25 * d45;
14471 d31 = d31 + d28 * (d41 * d45 - d40 * d47);
14472 i37 = i37 + 1 | 0;
14473 } while ((i37 | 0) != (i20 | 0));
14474 i37 = HEAP32[i14 >> 2] | 0;
14475 }
14476 d47 = +d33;
14477 d45 = +d35;
14478 i46 = i37 + (i17 * 12 | 0) | 0;
14479 HEAPF32[i46 >> 2] = d47;
14480 HEAPF32[i46 + 4 >> 2] = d45;
14481 i46 = HEAP32[i14 >> 2] | 0;
14482 HEAPF32[i46 + (i17 * 12 | 0) + 8 >> 2] = d29;
14483 d45 = +d32;
14484 d47 = +d36;
14485 i46 = i46 + (i18 * 12 | 0) | 0;
14486 HEAPF32[i46 >> 2] = d45;
14487 HEAPF32[i46 + 4 >> 2] = d47;
14488 HEAPF32[(HEAP32[i14 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2] = d31;
14489 i16 = i16 + 1 | 0;
14490 } while ((i16 | 0) < (HEAP32[i6 >> 2] | 0));
14491 i46 = d34 >= -.007499999832361937;
14492 STACKTOP = i1;
14493 return i46 | 0;
14494}
14495function __ZN15b2ContactSolver24SolvePositionConstraintsEv(i7) {
14496 i7 = i7 | 0;
14497 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, i21 = 0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, i26 = 0, d27 = 0.0, d28 = 0.0, d29 = 0.0, d30 = 0.0, d31 = 0.0, d32 = 0.0, d33 = 0.0, d34 = 0.0, i35 = 0, d36 = 0.0, d37 = 0.0, d38 = 0.0, d39 = 0.0, d40 = 0.0, d41 = 0.0, d42 = 0.0, d43 = 0.0, i44 = 0, d45 = 0.0;
14498 i1 = STACKTOP;
14499 STACKTOP = STACKTOP + 64 | 0;
14500 i4 = i1 + 40 | 0;
14501 i5 = i1 + 24 | 0;
14502 i3 = i1;
14503 i2 = i7 + 48 | 0;
14504 if ((HEAP32[i2 >> 2] | 0) <= 0) {
14505 d43 = 0.0;
14506 i35 = d43 >= -.014999999664723873;
14507 STACKTOP = i1;
14508 return i35 | 0;
14509 }
14510 i6 = i7 + 36 | 0;
14511 i9 = i7 + 24 | 0;
14512 i13 = i4 + 8 | 0;
14513 i7 = i4 + 12 | 0;
14514 i8 = i5 + 8 | 0;
14515 i12 = i5 + 12 | 0;
14516 i10 = i3 + 8 | 0;
14517 i11 = i3 + 16 | 0;
14518 i35 = HEAP32[i9 >> 2] | 0;
14519 i15 = 0;
14520 d32 = 0.0;
14521 do {
14522 i21 = HEAP32[i6 >> 2] | 0;
14523 i26 = i21 + (i15 * 88 | 0) | 0;
14524 i16 = HEAP32[i21 + (i15 * 88 | 0) + 32 >> 2] | 0;
14525 i14 = HEAP32[i21 + (i15 * 88 | 0) + 36 >> 2] | 0;
14526 i44 = i21 + (i15 * 88 | 0) + 48 | 0;
14527 d22 = +HEAPF32[i44 >> 2];
14528 d23 = +HEAPF32[i44 + 4 >> 2];
14529 d25 = +HEAPF32[i21 + (i15 * 88 | 0) + 40 >> 2];
14530 d18 = +HEAPF32[i21 + (i15 * 88 | 0) + 64 >> 2];
14531 i44 = i21 + (i15 * 88 | 0) + 56 | 0;
14532 d24 = +HEAPF32[i44 >> 2];
14533 d19 = +HEAPF32[i44 + 4 >> 2];
14534 d17 = +HEAPF32[i21 + (i15 * 88 | 0) + 44 >> 2];
14535 d20 = +HEAPF32[i21 + (i15 * 88 | 0) + 68 >> 2];
14536 i21 = HEAP32[i21 + (i15 * 88 | 0) + 84 >> 2] | 0;
14537 i44 = i35 + (i16 * 12 | 0) | 0;
14538 d28 = +HEAPF32[i44 >> 2];
14539 d33 = +HEAPF32[i44 + 4 >> 2];
14540 d29 = +HEAPF32[i35 + (i16 * 12 | 0) + 8 >> 2];
14541 i44 = i35 + (i14 * 12 | 0) | 0;
14542 d30 = +HEAPF32[i44 >> 2];
14543 d34 = +HEAPF32[i44 + 4 >> 2];
14544 d31 = +HEAPF32[i35 + (i14 * 12 | 0) + 8 >> 2];
14545 if ((i21 | 0) > 0) {
14546 d27 = d25 + d17;
14547 i35 = 0;
14548 do {
14549 d41 = +Math_sin(+d29);
14550 HEAPF32[i13 >> 2] = d41;
14551 d42 = +Math_cos(+d29);
14552 HEAPF32[i7 >> 2] = d42;
14553 d39 = +Math_sin(+d31);
14554 HEAPF32[i8 >> 2] = d39;
14555 d38 = +Math_cos(+d31);
14556 HEAPF32[i12 >> 2] = d38;
14557 d40 = +(d28 - (d22 * d42 - d23 * d41));
14558 d41 = +(d33 - (d23 * d42 + d22 * d41));
14559 i44 = i4;
14560 HEAPF32[i44 >> 2] = d40;
14561 HEAPF32[i44 + 4 >> 2] = d41;
14562 d41 = +(d30 - (d24 * d38 - d19 * d39));
14563 d39 = +(d34 - (d19 * d38 + d24 * d39));
14564 i44 = i5;
14565 HEAPF32[i44 >> 2] = d41;
14566 HEAPF32[i44 + 4 >> 2] = d39;
14567 __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK11b2TransformS4_i(i3, i26, i4, i5, i35);
14568 i44 = i3;
14569 d39 = +HEAPF32[i44 >> 2];
14570 d41 = +HEAPF32[i44 + 4 >> 2];
14571 i44 = i10;
14572 d38 = +HEAPF32[i44 >> 2];
14573 d40 = +HEAPF32[i44 + 4 >> 2];
14574 d42 = +HEAPF32[i11 >> 2];
14575 d36 = d38 - d28;
14576 d37 = d40 - d33;
14577 d38 = d38 - d30;
14578 d40 = d40 - d34;
14579 d32 = d32 < d42 ? d32 : d42;
14580 d42 = (d42 + .004999999888241291) * .20000000298023224;
14581 d43 = d42 < 0.0 ? d42 : 0.0;
14582 d42 = d41 * d36 - d39 * d37;
14583 d45 = d41 * d38 - d39 * d40;
14584 d42 = d45 * d20 * d45 + (d27 + d42 * d18 * d42);
14585 if (d42 > 0.0) {
14586 d42 = -(d43 < -.20000000298023224 ? -.20000000298023224 : d43) / d42;
14587 } else {
14588 d42 = 0.0;
14589 }
14590 d45 = d39 * d42;
14591 d43 = d41 * d42;
14592 d28 = d28 - d25 * d45;
14593 d33 = d33 - d25 * d43;
14594 d29 = d29 - d18 * (d36 * d43 - d37 * d45);
14595 d30 = d30 + d17 * d45;
14596 d34 = d34 + d17 * d43;
14597 d31 = d31 + d20 * (d38 * d43 - d40 * d45);
14598 i35 = i35 + 1 | 0;
14599 } while ((i35 | 0) != (i21 | 0));
14600 i35 = HEAP32[i9 >> 2] | 0;
14601 }
14602 d45 = +d28;
14603 d43 = +d33;
14604 i35 = i35 + (i16 * 12 | 0) | 0;
14605 HEAPF32[i35 >> 2] = d45;
14606 HEAPF32[i35 + 4 >> 2] = d43;
14607 i35 = HEAP32[i9 >> 2] | 0;
14608 HEAPF32[i35 + (i16 * 12 | 0) + 8 >> 2] = d29;
14609 d43 = +d30;
14610 d45 = +d34;
14611 i35 = i35 + (i14 * 12 | 0) | 0;
14612 HEAPF32[i35 >> 2] = d43;
14613 HEAPF32[i35 + 4 >> 2] = d45;
14614 i35 = HEAP32[i9 >> 2] | 0;
14615 HEAPF32[i35 + (i14 * 12 | 0) + 8 >> 2] = d31;
14616 i15 = i15 + 1 | 0;
14617 } while ((i15 | 0) < (HEAP32[i2 >> 2] | 0));
14618 i44 = d32 >= -.014999999664723873;
14619 STACKTOP = i1;
14620 return i44 | 0;
14621}
14622function __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2CircleShapeS6_(i1, i7, i6, i22, i5) {
14623 i1 = i1 | 0;
14624 i7 = i7 | 0;
14625 i6 = i6 | 0;
14626 i22 = i22 | 0;
14627 i5 = i5 | 0;
14628 var i2 = 0, i3 = 0, i4 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, i14 = 0, i15 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, d23 = 0.0, d24 = 0.0;
14629 i4 = STACKTOP;
14630 i2 = i1 + 60 | 0;
14631 HEAP32[i2 >> 2] = 0;
14632 i3 = i22 + 12 | 0;
14633 d9 = +HEAPF32[i5 + 12 >> 2];
14634 d23 = +HEAPF32[i3 >> 2];
14635 d17 = +HEAPF32[i5 + 8 >> 2];
14636 d18 = +HEAPF32[i22 + 16 >> 2];
14637 d21 = +HEAPF32[i5 >> 2] + (d9 * d23 - d17 * d18) - +HEAPF32[i6 >> 2];
14638 d18 = d23 * d17 + d9 * d18 + +HEAPF32[i5 + 4 >> 2] - +HEAPF32[i6 + 4 >> 2];
14639 d9 = +HEAPF32[i6 + 12 >> 2];
14640 d17 = +HEAPF32[i6 + 8 >> 2];
14641 d23 = d21 * d9 + d18 * d17;
14642 d17 = d9 * d18 - d21 * d17;
14643 i6 = i7 + 12 | 0;
14644 i5 = HEAP32[i6 >> 2] | 0;
14645 i6 = HEAP32[i6 + 4 >> 2] | 0;
14646 d21 = (HEAP32[tempDoublePtr >> 2] = i5, +HEAPF32[tempDoublePtr >> 2]);
14647 d18 = (HEAP32[tempDoublePtr >> 2] = i6, +HEAPF32[tempDoublePtr >> 2]);
14648 i15 = i7 + 20 | 0;
14649 i14 = HEAP32[i15 >> 2] | 0;
14650 i15 = HEAP32[i15 + 4 >> 2] | 0;
14651 d9 = (HEAP32[tempDoublePtr >> 2] = i14, +HEAPF32[tempDoublePtr >> 2]);
14652 d10 = (HEAP32[tempDoublePtr >> 2] = i15, +HEAPF32[tempDoublePtr >> 2]);
14653 d8 = d9 - d21;
14654 d16 = d10 - d18;
14655 d19 = d8 * (d9 - d23) + d16 * (d10 - d17);
14656 d13 = d23 - d21;
14657 d12 = d17 - d18;
14658 d20 = d13 * d8 + d12 * d16;
14659 d11 = +HEAPF32[i7 + 8 >> 2] + +HEAPF32[i22 + 8 >> 2];
14660 if (d20 <= 0.0) {
14661 if (d13 * d13 + d12 * d12 > d11 * d11) {
14662 STACKTOP = i4;
14663 return;
14664 }
14665 if ((HEAP8[i7 + 44 | 0] | 0) != 0 ? (i22 = i7 + 28 | 0, d24 = +HEAPF32[i22 >> 2], (d21 - d23) * (d21 - d24) + (d18 - d17) * (d18 - +HEAPF32[i22 + 4 >> 2]) > 0.0) : 0) {
14666 STACKTOP = i4;
14667 return;
14668 }
14669 HEAP32[i2 >> 2] = 1;
14670 HEAP32[i1 + 56 >> 2] = 0;
14671 HEAPF32[i1 + 40 >> 2] = 0.0;
14672 HEAPF32[i1 + 44 >> 2] = 0.0;
14673 i14 = i1 + 48 | 0;
14674 HEAP32[i14 >> 2] = i5;
14675 HEAP32[i14 + 4 >> 2] = i6;
14676 i14 = i1 + 16 | 0;
14677 HEAP32[i14 >> 2] = 0;
14678 HEAP8[i14] = 0;
14679 HEAP8[i14 + 1 | 0] = 0;
14680 HEAP8[i14 + 2 | 0] = 0;
14681 HEAP8[i14 + 3 | 0] = 0;
14682 i14 = i3;
14683 i15 = HEAP32[i14 + 4 >> 2] | 0;
14684 i22 = i1;
14685 HEAP32[i22 >> 2] = HEAP32[i14 >> 2];
14686 HEAP32[i22 + 4 >> 2] = i15;
14687 STACKTOP = i4;
14688 return;
14689 }
14690 if (d19 <= 0.0) {
14691 d8 = d23 - d9;
14692 d12 = d17 - d10;
14693 if (d8 * d8 + d12 * d12 > d11 * d11) {
14694 STACKTOP = i4;
14695 return;
14696 }
14697 if ((HEAP8[i7 + 45 | 0] | 0) != 0 ? (i22 = i7 + 36 | 0, d24 = +HEAPF32[i22 >> 2], d8 * (d24 - d9) + d12 * (+HEAPF32[i22 + 4 >> 2] - d10) > 0.0) : 0) {
14698 STACKTOP = i4;
14699 return;
14700 }
14701 HEAP32[i2 >> 2] = 1;
14702 HEAP32[i1 + 56 >> 2] = 0;
14703 HEAPF32[i1 + 40 >> 2] = 0.0;
14704 HEAPF32[i1 + 44 >> 2] = 0.0;
14705 i22 = i1 + 48 | 0;
14706 HEAP32[i22 >> 2] = i14;
14707 HEAP32[i22 + 4 >> 2] = i15;
14708 i14 = i1 + 16 | 0;
14709 HEAP32[i14 >> 2] = 0;
14710 HEAP8[i14] = 1;
14711 HEAP8[i14 + 1 | 0] = 0;
14712 HEAP8[i14 + 2 | 0] = 0;
14713 HEAP8[i14 + 3 | 0] = 0;
14714 i14 = i3;
14715 i15 = HEAP32[i14 + 4 >> 2] | 0;
14716 i22 = i1;
14717 HEAP32[i22 >> 2] = HEAP32[i14 >> 2];
14718 HEAP32[i22 + 4 >> 2] = i15;
14719 STACKTOP = i4;
14720 return;
14721 }
14722 d24 = d8 * d8 + d16 * d16;
14723 if (!(d24 > 0.0)) {
14724 ___assert_fail(5560, 5576, 127, 5616);
14725 }
14726 d24 = 1.0 / d24;
14727 d23 = d23 - (d21 * d19 + d9 * d20) * d24;
14728 d24 = d17 - (d18 * d19 + d10 * d20) * d24;
14729 if (d23 * d23 + d24 * d24 > d11 * d11) {
14730 STACKTOP = i4;
14731 return;
14732 }
14733 d9 = -d16;
14734 if (d8 * d12 + d13 * d9 < 0.0) {
14735 d8 = -d8;
14736 } else {
14737 d16 = d9;
14738 }
14739 d9 = +Math_sqrt(+(d8 * d8 + d16 * d16));
14740 if (!(d9 < 1.1920928955078125e-7)) {
14741 d24 = 1.0 / d9;
14742 d16 = d16 * d24;
14743 d8 = d8 * d24;
14744 }
14745 HEAP32[i2 >> 2] = 1;
14746 HEAP32[i1 + 56 >> 2] = 1;
14747 d23 = +d16;
14748 d24 = +d8;
14749 i14 = i1 + 40 | 0;
14750 HEAPF32[i14 >> 2] = d23;
14751 HEAPF32[i14 + 4 >> 2] = d24;
14752 i14 = i1 + 48 | 0;
14753 HEAP32[i14 >> 2] = i5;
14754 HEAP32[i14 + 4 >> 2] = i6;
14755 i14 = i1 + 16 | 0;
14756 HEAP32[i14 >> 2] = 0;
14757 HEAP8[i14] = 0;
14758 HEAP8[i14 + 1 | 0] = 0;
14759 HEAP8[i14 + 2 | 0] = 1;
14760 HEAP8[i14 + 3 | 0] = 0;
14761 i14 = i3;
14762 i15 = HEAP32[i14 + 4 >> 2] | 0;
14763 i22 = i1;
14764 HEAP32[i22 >> 2] = HEAP32[i14 >> 2];
14765 HEAP32[i22 + 4 >> 2] = i15;
14766 STACKTOP = i4;
14767 return;
14768}
14769function __ZN6b2BodyC2EPK9b2BodyDefP7b2World(i1, i2, i5) {
14770 i1 = i1 | 0;
14771 i2 = i2 | 0;
14772 i5 = i5 | 0;
14773 var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, d13 = 0.0;
14774 i3 = STACKTOP;
14775 i9 = i2 + 4 | 0;
14776 d13 = +HEAPF32[i9 >> 2];
14777 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14778 ___assert_fail(1496, 1520, 27, 1552);
14779 }
14780 d13 = +HEAPF32[i2 + 8 >> 2];
14781 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14782 ___assert_fail(1496, 1520, 27, 1552);
14783 }
14784 i6 = i2 + 16 | 0;
14785 d13 = +HEAPF32[i6 >> 2];
14786 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14787 ___assert_fail(1560, 1520, 28, 1552);
14788 }
14789 d13 = +HEAPF32[i2 + 20 >> 2];
14790 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14791 ___assert_fail(1560, 1520, 28, 1552);
14792 }
14793 i7 = i2 + 12 | 0;
14794 d13 = +HEAPF32[i7 >> 2];
14795 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14796 ___assert_fail(1592, 1520, 29, 1552);
14797 }
14798 i8 = i2 + 24 | 0;
14799 d13 = +HEAPF32[i8 >> 2];
14800 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) {
14801 ___assert_fail(1616, 1520, 30, 1552);
14802 }
14803 i4 = i2 + 32 | 0;
14804 d13 = +HEAPF32[i4 >> 2];
14805 if (!(d13 >= 0.0) | d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf ^ 1) {
14806 ___assert_fail(1648, 1520, 31, 1552);
14807 }
14808 i10 = i2 + 28 | 0;
14809 d13 = +HEAPF32[i10 >> 2];
14810 if (!(d13 >= 0.0) | d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf ^ 1) {
14811 ___assert_fail(1712, 1520, 32, 1552);
14812 }
14813 i11 = i1 + 4 | 0;
14814 i12 = (HEAP8[i2 + 39 | 0] | 0) == 0 ? 0 : 8;
14815 HEAP16[i11 >> 1] = i12;
14816 if ((HEAP8[i2 + 38 | 0] | 0) != 0) {
14817 i12 = (i12 & 65535 | 16) & 65535;
14818 HEAP16[i11 >> 1] = i12;
14819 }
14820 if ((HEAP8[i2 + 36 | 0] | 0) != 0) {
14821 i12 = (i12 & 65535 | 4) & 65535;
14822 HEAP16[i11 >> 1] = i12;
14823 }
14824 if ((HEAP8[i2 + 37 | 0] | 0) != 0) {
14825 i12 = (i12 & 65535 | 2) & 65535;
14826 HEAP16[i11 >> 1] = i12;
14827 }
14828 if ((HEAP8[i2 + 40 | 0] | 0) != 0) {
14829 HEAP16[i11 >> 1] = i12 & 65535 | 32;
14830 }
14831 HEAP32[i1 + 88 >> 2] = i5;
14832 i11 = i9;
14833 i12 = HEAP32[i11 >> 2] | 0;
14834 i11 = HEAP32[i11 + 4 >> 2] | 0;
14835 i9 = i1 + 12 | 0;
14836 HEAP32[i9 >> 2] = i12;
14837 HEAP32[i9 + 4 >> 2] = i11;
14838 d13 = +HEAPF32[i7 >> 2];
14839 HEAPF32[i1 + 20 >> 2] = +Math_sin(+d13);
14840 HEAPF32[i1 + 24 >> 2] = +Math_cos(+d13);
14841 HEAPF32[i1 + 28 >> 2] = 0.0;
14842 HEAPF32[i1 + 32 >> 2] = 0.0;
14843 i9 = i1 + 36 | 0;
14844 HEAP32[i9 >> 2] = i12;
14845 HEAP32[i9 + 4 >> 2] = i11;
14846 i9 = i1 + 44 | 0;
14847 HEAP32[i9 >> 2] = i12;
14848 HEAP32[i9 + 4 >> 2] = i11;
14849 HEAPF32[i1 + 52 >> 2] = +HEAPF32[i7 >> 2];
14850 HEAPF32[i1 + 56 >> 2] = +HEAPF32[i7 >> 2];
14851 HEAPF32[i1 + 60 >> 2] = 0.0;
14852 HEAP32[i1 + 108 >> 2] = 0;
14853 HEAP32[i1 + 112 >> 2] = 0;
14854 HEAP32[i1 + 92 >> 2] = 0;
14855 HEAP32[i1 + 96 >> 2] = 0;
14856 i9 = i6;
14857 i11 = HEAP32[i9 + 4 >> 2] | 0;
14858 i12 = i1 + 64 | 0;
14859 HEAP32[i12 >> 2] = HEAP32[i9 >> 2];
14860 HEAP32[i12 + 4 >> 2] = i11;
14861 HEAPF32[i1 + 72 >> 2] = +HEAPF32[i8 >> 2];
14862 HEAPF32[i1 + 132 >> 2] = +HEAPF32[i10 >> 2];
14863 HEAPF32[i1 + 136 >> 2] = +HEAPF32[i4 >> 2];
14864 HEAPF32[i1 + 140 >> 2] = +HEAPF32[i2 + 48 >> 2];
14865 HEAPF32[i1 + 76 >> 2] = 0.0;
14866 HEAPF32[i1 + 80 >> 2] = 0.0;
14867 HEAPF32[i1 + 84 >> 2] = 0.0;
14868 HEAPF32[i1 + 144 >> 2] = 0.0;
14869 i12 = HEAP32[i2 >> 2] | 0;
14870 HEAP32[i1 >> 2] = i12;
14871 i4 = i1 + 116 | 0;
14872 if ((i12 | 0) == 2) {
14873 HEAPF32[i4 >> 2] = 1.0;
14874 HEAPF32[i1 + 120 >> 2] = 1.0;
14875 i11 = i1 + 124 | 0;
14876 HEAPF32[i11 >> 2] = 0.0;
14877 i11 = i1 + 128 | 0;
14878 HEAPF32[i11 >> 2] = 0.0;
14879 i11 = i2 + 44 | 0;
14880 i11 = HEAP32[i11 >> 2] | 0;
14881 i12 = i1 + 148 | 0;
14882 HEAP32[i12 >> 2] = i11;
14883 i12 = i1 + 100 | 0;
14884 HEAP32[i12 >> 2] = 0;
14885 i12 = i1 + 104 | 0;
14886 HEAP32[i12 >> 2] = 0;
14887 STACKTOP = i3;
14888 return;
14889 } else {
14890 HEAPF32[i4 >> 2] = 0.0;
14891 HEAPF32[i1 + 120 >> 2] = 0.0;
14892 i11 = i1 + 124 | 0;
14893 HEAPF32[i11 >> 2] = 0.0;
14894 i11 = i1 + 128 | 0;
14895 HEAPF32[i11 >> 2] = 0.0;
14896 i11 = i2 + 44 | 0;
14897 i11 = HEAP32[i11 >> 2] | 0;
14898 i12 = i1 + 148 | 0;
14899 HEAP32[i12 >> 2] = i11;
14900 i12 = i1 + 100 | 0;
14901 HEAP32[i12 >> 2] = 0;
14902 i12 = i1 + 104 | 0;
14903 HEAP32[i12 >> 2] = 0;
14904 STACKTOP = i3;
14905 return;
14906 }
14907}
14908function __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK11b2TransformS4_i(i2, i1, i13, i12, i15) {
14909 i2 = i2 | 0;
14910 i1 = i1 | 0;
14911 i13 = i13 | 0;
14912 i12 = i12 | 0;
14913 i15 = i15 | 0;
14914 var i3 = 0, d4 = 0.0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i14 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, i19 = 0, i20 = 0;
14915 i3 = STACKTOP;
14916 if ((HEAP32[i1 + 84 >> 2] | 0) <= 0) {
14917 ___assert_fail(6752, 6520, 617, 6776);
14918 }
14919 i14 = HEAP32[i1 + 72 >> 2] | 0;
14920 if ((i14 | 0) == 1) {
14921 i19 = i13 + 12 | 0;
14922 d5 = +HEAPF32[i19 >> 2];
14923 d6 = +HEAPF32[i1 + 16 >> 2];
14924 i14 = i13 + 8 | 0;
14925 d7 = +HEAPF32[i14 >> 2];
14926 d9 = +HEAPF32[i1 + 20 >> 2];
14927 d4 = d5 * d6 - d7 * d9;
14928 d9 = d6 * d7 + d5 * d9;
14929 d5 = +d4;
14930 d7 = +d9;
14931 i20 = i2;
14932 HEAPF32[i20 >> 2] = d5;
14933 HEAPF32[i20 + 4 >> 2] = d7;
14934 d7 = +HEAPF32[i19 >> 2];
14935 d5 = +HEAPF32[i1 + 24 >> 2];
14936 d6 = +HEAPF32[i14 >> 2];
14937 d8 = +HEAPF32[i1 + 28 >> 2];
14938 d16 = +HEAPF32[i12 + 12 >> 2];
14939 d18 = +HEAPF32[i1 + (i15 << 3) >> 2];
14940 d17 = +HEAPF32[i12 + 8 >> 2];
14941 d11 = +HEAPF32[i1 + (i15 << 3) + 4 >> 2];
14942 d10 = +HEAPF32[i12 >> 2] + (d16 * d18 - d17 * d11);
14943 d11 = d18 * d17 + d16 * d11 + +HEAPF32[i12 + 4 >> 2];
14944 HEAPF32[i2 + 16 >> 2] = d4 * (d10 - (+HEAPF32[i13 >> 2] + (d7 * d5 - d6 * d8))) + (d11 - (d5 * d6 + d7 * d8 + +HEAPF32[i13 + 4 >> 2])) * d9 - +HEAPF32[i1 + 76 >> 2] - +HEAPF32[i1 + 80 >> 2];
14945 d10 = +d10;
14946 d11 = +d11;
14947 i15 = i2 + 8 | 0;
14948 HEAPF32[i15 >> 2] = d10;
14949 HEAPF32[i15 + 4 >> 2] = d11;
14950 STACKTOP = i3;
14951 return;
14952 } else if ((i14 | 0) == 2) {
14953 i19 = i12 + 12 | 0;
14954 d7 = +HEAPF32[i19 >> 2];
14955 d8 = +HEAPF32[i1 + 16 >> 2];
14956 i20 = i12 + 8 | 0;
14957 d9 = +HEAPF32[i20 >> 2];
14958 d18 = +HEAPF32[i1 + 20 >> 2];
14959 d17 = d7 * d8 - d9 * d18;
14960 d18 = d8 * d9 + d7 * d18;
14961 d7 = +d17;
14962 d9 = +d18;
14963 i14 = i2;
14964 HEAPF32[i14 >> 2] = d7;
14965 HEAPF32[i14 + 4 >> 2] = d9;
14966 d9 = +HEAPF32[i19 >> 2];
14967 d7 = +HEAPF32[i1 + 24 >> 2];
14968 d8 = +HEAPF32[i20 >> 2];
14969 d10 = +HEAPF32[i1 + 28 >> 2];
14970 d6 = +HEAPF32[i13 + 12 >> 2];
14971 d4 = +HEAPF32[i1 + (i15 << 3) >> 2];
14972 d5 = +HEAPF32[i13 + 8 >> 2];
14973 d16 = +HEAPF32[i1 + (i15 << 3) + 4 >> 2];
14974 d11 = +HEAPF32[i13 >> 2] + (d6 * d4 - d5 * d16);
14975 d16 = d4 * d5 + d6 * d16 + +HEAPF32[i13 + 4 >> 2];
14976 HEAPF32[i2 + 16 >> 2] = d17 * (d11 - (+HEAPF32[i12 >> 2] + (d9 * d7 - d8 * d10))) + (d16 - (d7 * d8 + d9 * d10 + +HEAPF32[i12 + 4 >> 2])) * d18 - +HEAPF32[i1 + 76 >> 2] - +HEAPF32[i1 + 80 >> 2];
14977 d11 = +d11;
14978 d16 = +d16;
14979 i20 = i2 + 8 | 0;
14980 HEAPF32[i20 >> 2] = d11;
14981 HEAPF32[i20 + 4 >> 2] = d16;
14982 d17 = +-d17;
14983 d18 = +-d18;
14984 i20 = i2;
14985 HEAPF32[i20 >> 2] = d17;
14986 HEAPF32[i20 + 4 >> 2] = d18;
14987 STACKTOP = i3;
14988 return;
14989 } else if ((i14 | 0) == 0) {
14990 d7 = +HEAPF32[i13 + 12 >> 2];
14991 d8 = +HEAPF32[i1 + 24 >> 2];
14992 d18 = +HEAPF32[i13 + 8 >> 2];
14993 d6 = +HEAPF32[i1 + 28 >> 2];
14994 d4 = +HEAPF32[i13 >> 2] + (d7 * d8 - d18 * d6);
14995 d6 = d8 * d18 + d7 * d6 + +HEAPF32[i13 + 4 >> 2];
14996 d7 = +HEAPF32[i12 + 12 >> 2];
14997 d18 = +HEAPF32[i1 >> 2];
14998 d8 = +HEAPF32[i12 + 8 >> 2];
14999 d9 = +HEAPF32[i1 + 4 >> 2];
15000 d5 = +HEAPF32[i12 >> 2] + (d7 * d18 - d8 * d9);
15001 d9 = d18 * d8 + d7 * d9 + +HEAPF32[i12 + 4 >> 2];
15002 d7 = d5 - d4;
15003 d8 = d9 - d6;
15004 d18 = +d7;
15005 d10 = +d8;
15006 i20 = i2;
15007 HEAPF32[i20 >> 2] = d18;
15008 HEAPF32[i20 + 4 >> 2] = d10;
15009 d10 = +Math_sqrt(+(d7 * d7 + d8 * d8));
15010 if (d10 < 1.1920928955078125e-7) {
15011 d10 = d7;
15012 d11 = d8;
15013 } else {
15014 d11 = 1.0 / d10;
15015 d10 = d7 * d11;
15016 HEAPF32[i2 >> 2] = d10;
15017 d11 = d8 * d11;
15018 HEAPF32[i2 + 4 >> 2] = d11;
15019 }
15020 d17 = +((d4 + d5) * .5);
15021 d18 = +((d6 + d9) * .5);
15022 i20 = i2 + 8 | 0;
15023 HEAPF32[i20 >> 2] = d17;
15024 HEAPF32[i20 + 4 >> 2] = d18;
15025 HEAPF32[i2 + 16 >> 2] = d7 * d10 + d8 * d11 - +HEAPF32[i1 + 76 >> 2] - +HEAPF32[i1 + 80 >> 2];
15026 STACKTOP = i3;
15027 return;
15028 } else {
15029 STACKTOP = i3;
15030 return;
15031 }
15032}
15033function __ZNSt3__118__insertion_sort_3IRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i1, i2) {
15034 i5 = i5 | 0;
15035 i1 = i1 | 0;
15036 i2 = i2 | 0;
15037 var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0;
15038 i4 = STACKTOP;
15039 STACKTOP = STACKTOP + 32 | 0;
15040 i6 = i4 + 12 | 0;
15041 i3 = i4;
15042 i7 = i5 + 24 | 0;
15043 i8 = i5 + 12 | 0;
15044 i10 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i5) | 0;
15045 i9 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i8) | 0;
15046 do {
15047 if (i10) {
15048 if (i9) {
15049 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
15050 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
15051 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
15052 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
15053 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
15054 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
15055 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15056 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15057 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15058 break;
15059 }
15060 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
15061 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
15062 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
15063 HEAP32[i5 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
15064 HEAP32[i5 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
15065 HEAP32[i5 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
15066 HEAP32[i8 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15067 HEAP32[i8 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15068 HEAP32[i8 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15069 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i8) | 0) {
15070 HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
15071 HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
15072 HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
15073 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
15074 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
15075 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
15076 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15077 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15078 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15079 }
15080 } else {
15081 if (i9) {
15082 HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
15083 HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
15084 HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
15085 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
15086 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
15087 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
15088 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15089 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15090 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15091 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i5) | 0) {
15092 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2];
15093 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2];
15094 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2];
15095 HEAP32[i5 + 0 >> 2] = HEAP32[i8 + 0 >> 2];
15096 HEAP32[i5 + 4 >> 2] = HEAP32[i8 + 4 >> 2];
15097 HEAP32[i5 + 8 >> 2] = HEAP32[i8 + 8 >> 2];
15098 HEAP32[i8 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15099 HEAP32[i8 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15100 HEAP32[i8 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15101 }
15102 }
15103 }
15104 } while (0);
15105 i6 = i5 + 36 | 0;
15106 if ((i6 | 0) == (i1 | 0)) {
15107 STACKTOP = i4;
15108 return;
15109 }
15110 while (1) {
15111 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i7) | 0) {
15112 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
15113 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
15114 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
15115 i8 = i6;
15116 while (1) {
15117 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2];
15118 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2];
15119 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2];
15120 if ((i7 | 0) == (i5 | 0)) {
15121 break;
15122 }
15123 i8 = i7 + -12 | 0;
15124 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i3, i8) | 0) {
15125 i10 = i7;
15126 i7 = i8;
15127 i8 = i10;
15128 } else {
15129 break;
15130 }
15131 }
15132 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2];
15133 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2];
15134 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2];
15135 }
15136 i7 = i6 + 12 | 0;
15137 if ((i7 | 0) == (i1 | 0)) {
15138 break;
15139 } else {
15140 i10 = i6;
15141 i6 = i7;
15142 i7 = i10;
15143 }
15144 }
15145 STACKTOP = i4;
15146 return;
15147}
15148function __ZNK20b2SeparationFunction8EvaluateEiif(i10, i12, i11, d9) {
15149 i10 = i10 | 0;
15150 i12 = i12 | 0;
15151 i11 = i11 | 0;
15152 d9 = +d9;
15153 var d1 = 0.0, d2 = 0.0, d3 = 0.0, d4 = 0.0, d5 = 0.0, d6 = 0.0, i7 = 0, d8 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, i17 = 0, d18 = 0.0, d19 = 0.0;
15154 i7 = STACKTOP;
15155 d14 = 1.0 - d9;
15156 d3 = d14 * +HEAPF32[i10 + 32 >> 2] + +HEAPF32[i10 + 36 >> 2] * d9;
15157 d4 = +Math_sin(+d3);
15158 d3 = +Math_cos(+d3);
15159 d5 = +HEAPF32[i10 + 8 >> 2];
15160 d6 = +HEAPF32[i10 + 12 >> 2];
15161 d2 = d14 * +HEAPF32[i10 + 16 >> 2] + +HEAPF32[i10 + 24 >> 2] * d9 - (d3 * d5 - d4 * d6);
15162 d6 = d14 * +HEAPF32[i10 + 20 >> 2] + +HEAPF32[i10 + 28 >> 2] * d9 - (d4 * d5 + d3 * d6);
15163 d5 = d14 * +HEAPF32[i10 + 68 >> 2] + +HEAPF32[i10 + 72 >> 2] * d9;
15164 d1 = +Math_sin(+d5);
15165 d5 = +Math_cos(+d5);
15166 d15 = +HEAPF32[i10 + 44 >> 2];
15167 d16 = +HEAPF32[i10 + 48 >> 2];
15168 d8 = d14 * +HEAPF32[i10 + 52 >> 2] + +HEAPF32[i10 + 60 >> 2] * d9 - (d5 * d15 - d1 * d16);
15169 d9 = d14 * +HEAPF32[i10 + 56 >> 2] + +HEAPF32[i10 + 64 >> 2] * d9 - (d1 * d15 + d5 * d16);
15170 i17 = HEAP32[i10 + 80 >> 2] | 0;
15171 if ((i17 | 0) == 0) {
15172 d14 = +HEAPF32[i10 + 92 >> 2];
15173 d13 = +HEAPF32[i10 + 96 >> 2];
15174 i17 = HEAP32[i10 >> 2] | 0;
15175 if (!((i12 | 0) > -1)) {
15176 ___assert_fail(3640, 3672, 103, 3704);
15177 }
15178 if ((HEAP32[i17 + 20 >> 2] | 0) <= (i12 | 0)) {
15179 ___assert_fail(3640, 3672, 103, 3704);
15180 }
15181 i17 = (HEAP32[i17 + 16 >> 2] | 0) + (i12 << 3) | 0;
15182 d15 = +HEAPF32[i17 >> 2];
15183 d16 = +HEAPF32[i17 + 4 >> 2];
15184 i10 = HEAP32[i10 + 4 >> 2] | 0;
15185 if (!((i11 | 0) > -1)) {
15186 ___assert_fail(3640, 3672, 103, 3704);
15187 }
15188 if ((HEAP32[i10 + 20 >> 2] | 0) <= (i11 | 0)) {
15189 ___assert_fail(3640, 3672, 103, 3704);
15190 }
15191 i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i11 << 3) | 0;
15192 d19 = +HEAPF32[i17 >> 2];
15193 d18 = +HEAPF32[i17 + 4 >> 2];
15194 d16 = d14 * (d8 + (d5 * d19 - d1 * d18) - (d2 + (d3 * d15 - d4 * d16))) + d13 * (d9 + (d1 * d19 + d5 * d18) - (d6 + (d4 * d15 + d3 * d16)));
15195 STACKTOP = i7;
15196 return +d16;
15197 } else if ((i17 | 0) == 1) {
15198 d14 = +HEAPF32[i10 + 92 >> 2];
15199 d13 = +HEAPF32[i10 + 96 >> 2];
15200 d16 = +HEAPF32[i10 + 84 >> 2];
15201 d15 = +HEAPF32[i10 + 88 >> 2];
15202 i10 = HEAP32[i10 + 4 >> 2] | 0;
15203 if (!((i11 | 0) > -1)) {
15204 ___assert_fail(3640, 3672, 103, 3704);
15205 }
15206 if ((HEAP32[i10 + 20 >> 2] | 0) <= (i11 | 0)) {
15207 ___assert_fail(3640, 3672, 103, 3704);
15208 }
15209 i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i11 << 3) | 0;
15210 d18 = +HEAPF32[i17 >> 2];
15211 d19 = +HEAPF32[i17 + 4 >> 2];
15212 d19 = (d3 * d14 - d4 * d13) * (d8 + (d5 * d18 - d1 * d19) - (d2 + (d3 * d16 - d4 * d15))) + (d4 * d14 + d3 * d13) * (d9 + (d1 * d18 + d5 * d19) - (d6 + (d4 * d16 + d3 * d15)));
15213 STACKTOP = i7;
15214 return +d19;
15215 } else if ((i17 | 0) == 2) {
15216 d16 = +HEAPF32[i10 + 92 >> 2];
15217 d15 = +HEAPF32[i10 + 96 >> 2];
15218 d14 = +HEAPF32[i10 + 84 >> 2];
15219 d13 = +HEAPF32[i10 + 88 >> 2];
15220 i10 = HEAP32[i10 >> 2] | 0;
15221 if (!((i12 | 0) > -1)) {
15222 ___assert_fail(3640, 3672, 103, 3704);
15223 }
15224 if ((HEAP32[i10 + 20 >> 2] | 0) <= (i12 | 0)) {
15225 ___assert_fail(3640, 3672, 103, 3704);
15226 }
15227 i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i12 << 3) | 0;
15228 d18 = +HEAPF32[i17 >> 2];
15229 d19 = +HEAPF32[i17 + 4 >> 2];
15230 d19 = (d5 * d16 - d1 * d15) * (d2 + (d3 * d18 - d4 * d19) - (d8 + (d5 * d14 - d1 * d13))) + (d1 * d16 + d5 * d15) * (d6 + (d4 * d18 + d3 * d19) - (d9 + (d1 * d14 + d5 * d13)));
15231 STACKTOP = i7;
15232 return +d19;
15233 } else {
15234 ___assert_fail(3616, 3560, 242, 3624);
15235 }
15236 return 0.0;
15237}
15238function __ZN6b2Body13ResetMassDataEv(i2) {
15239 i2 = i2 | 0;
15240 var d1 = 0.0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, d14 = 0.0, d15 = 0.0, d16 = 0.0, i17 = 0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0;
15241 i3 = STACKTOP;
15242 STACKTOP = STACKTOP + 16 | 0;
15243 i10 = i3;
15244 i8 = i2 + 116 | 0;
15245 i9 = i2 + 120 | 0;
15246 i4 = i2 + 124 | 0;
15247 i5 = i2 + 128 | 0;
15248 i6 = i2 + 28 | 0;
15249 HEAPF32[i6 >> 2] = 0.0;
15250 HEAPF32[i2 + 32 >> 2] = 0.0;
15251 HEAP32[i8 + 0 >> 2] = 0;
15252 HEAP32[i8 + 4 >> 2] = 0;
15253 HEAP32[i8 + 8 >> 2] = 0;
15254 HEAP32[i8 + 12 >> 2] = 0;
15255 i11 = HEAP32[i2 >> 2] | 0;
15256 if ((i11 | 0) == 2) {
15257 i17 = 3784;
15258 d16 = +HEAPF32[i17 >> 2];
15259 d18 = +HEAPF32[i17 + 4 >> 2];
15260 i17 = HEAP32[i2 + 100 >> 2] | 0;
15261 if ((i17 | 0) != 0) {
15262 i11 = i10 + 4 | 0;
15263 i12 = i10 + 8 | 0;
15264 i13 = i10 + 12 | 0;
15265 d14 = 0.0;
15266 d15 = 0.0;
15267 do {
15268 d19 = +HEAPF32[i17 >> 2];
15269 if (!(d19 == 0.0)) {
15270 i20 = HEAP32[i17 + 12 >> 2] | 0;
15271 FUNCTION_TABLE_viid[HEAP32[(HEAP32[i20 >> 2] | 0) + 28 >> 2] & 3](i20, i10, d19);
15272 d14 = +HEAPF32[i10 >> 2];
15273 d15 = d14 + +HEAPF32[i8 >> 2];
15274 HEAPF32[i8 >> 2] = d15;
15275 d16 = d16 + d14 * +HEAPF32[i11 >> 2];
15276 d18 = d18 + d14 * +HEAPF32[i12 >> 2];
15277 d14 = +HEAPF32[i13 >> 2] + +HEAPF32[i4 >> 2];
15278 HEAPF32[i4 >> 2] = d14;
15279 }
15280 i17 = HEAP32[i17 + 4 >> 2] | 0;
15281 } while ((i17 | 0) != 0);
15282 if (d15 > 0.0) {
15283 d19 = 1.0 / d15;
15284 HEAPF32[i9 >> 2] = d19;
15285 d16 = d16 * d19;
15286 d18 = d18 * d19;
15287 } else {
15288 i7 = 11;
15289 }
15290 } else {
15291 d14 = 0.0;
15292 i7 = 11;
15293 }
15294 if ((i7 | 0) == 11) {
15295 HEAPF32[i8 >> 2] = 1.0;
15296 HEAPF32[i9 >> 2] = 1.0;
15297 d15 = 1.0;
15298 }
15299 do {
15300 if (d14 > 0.0 ? (HEAP16[i2 + 4 >> 1] & 16) == 0 : 0) {
15301 d14 = d14 - (d18 * d18 + d16 * d16) * d15;
15302 HEAPF32[i4 >> 2] = d14;
15303 if (d14 > 0.0) {
15304 d1 = 1.0 / d14;
15305 break;
15306 } else {
15307 ___assert_fail(1872, 1520, 319, 1856);
15308 }
15309 } else {
15310 i7 = 17;
15311 }
15312 } while (0);
15313 if ((i7 | 0) == 17) {
15314 HEAPF32[i4 >> 2] = 0.0;
15315 d1 = 0.0;
15316 }
15317 HEAPF32[i5 >> 2] = d1;
15318 i20 = i2 + 44 | 0;
15319 i17 = i20;
15320 d19 = +HEAPF32[i17 >> 2];
15321 d14 = +HEAPF32[i17 + 4 >> 2];
15322 d21 = +d16;
15323 d1 = +d18;
15324 i17 = i6;
15325 HEAPF32[i17 >> 2] = d21;
15326 HEAPF32[i17 + 4 >> 2] = d1;
15327 d1 = +HEAPF32[i2 + 24 >> 2];
15328 d21 = +HEAPF32[i2 + 20 >> 2];
15329 d15 = +HEAPF32[i2 + 12 >> 2] + (d1 * d16 - d21 * d18);
15330 d16 = d16 * d21 + d1 * d18 + +HEAPF32[i2 + 16 >> 2];
15331 d1 = +d15;
15332 d18 = +d16;
15333 HEAPF32[i20 >> 2] = d1;
15334 HEAPF32[i20 + 4 >> 2] = d18;
15335 i20 = i2 + 36 | 0;
15336 HEAPF32[i20 >> 2] = d1;
15337 HEAPF32[i20 + 4 >> 2] = d18;
15338 d18 = +HEAPF32[i2 + 72 >> 2];
15339 i20 = i2 + 64 | 0;
15340 HEAPF32[i20 >> 2] = +HEAPF32[i20 >> 2] - d18 * (d16 - d14);
15341 i20 = i2 + 68 | 0;
15342 HEAPF32[i20 >> 2] = d18 * (d15 - d19) + +HEAPF32[i20 >> 2];
15343 STACKTOP = i3;
15344 return;
15345 } else if ((i11 | 0) == 1 | (i11 | 0) == 0) {
15346 i17 = i2 + 12 | 0;
15347 i13 = HEAP32[i17 >> 2] | 0;
15348 i17 = HEAP32[i17 + 4 >> 2] | 0;
15349 i20 = i2 + 36 | 0;
15350 HEAP32[i20 >> 2] = i13;
15351 HEAP32[i20 + 4 >> 2] = i17;
15352 i20 = i2 + 44 | 0;
15353 HEAP32[i20 >> 2] = i13;
15354 HEAP32[i20 + 4 >> 2] = i17;
15355 HEAPF32[i2 + 52 >> 2] = +HEAPF32[i2 + 56 >> 2];
15356 STACKTOP = i3;
15357 return;
15358 } else {
15359 ___assert_fail(1824, 1520, 284, 1856);
15360 }
15361}
15362function __ZN9b2Contact6UpdateEP17b2ContactListener(i1, i4) {
15363 i1 = i1 | 0;
15364 i4 = i4 | 0;
15365 var i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0;
15366 i3 = STACKTOP;
15367 STACKTOP = STACKTOP + 64 | 0;
15368 i2 = i3;
15369 i10 = i1 + 64 | 0;
15370 i6 = i2 + 0 | 0;
15371 i7 = i10 + 0 | 0;
15372 i5 = i6 + 64 | 0;
15373 do {
15374 HEAP32[i6 >> 2] = HEAP32[i7 >> 2];
15375 i6 = i6 + 4 | 0;
15376 i7 = i7 + 4 | 0;
15377 } while ((i6 | 0) < (i5 | 0));
15378 i6 = i1 + 4 | 0;
15379 i11 = HEAP32[i6 >> 2] | 0;
15380 HEAP32[i6 >> 2] = i11 | 4;
15381 i11 = i11 >>> 1;
15382 i14 = HEAP32[i1 + 48 >> 2] | 0;
15383 i15 = HEAP32[i1 + 52 >> 2] | 0;
15384 i5 = (HEAP8[i15 + 38 | 0] | HEAP8[i14 + 38 | 0]) << 24 >> 24 != 0;
15385 i8 = HEAP32[i14 + 8 >> 2] | 0;
15386 i7 = HEAP32[i15 + 8 >> 2] | 0;
15387 i12 = i8 + 12 | 0;
15388 i13 = i7 + 12 | 0;
15389 if (!i5) {
15390 FUNCTION_TABLE_viiii[HEAP32[HEAP32[i1 >> 2] >> 2] & 15](i1, i10, i12, i13);
15391 i12 = i1 + 124 | 0;
15392 i10 = (HEAP32[i12 >> 2] | 0) > 0;
15393 L4 : do {
15394 if (i10) {
15395 i19 = HEAP32[i2 + 60 >> 2] | 0;
15396 if ((i19 | 0) > 0) {
15397 i18 = 0;
15398 } else {
15399 i9 = 0;
15400 while (1) {
15401 HEAPF32[i1 + (i9 * 20 | 0) + 72 >> 2] = 0.0;
15402 HEAPF32[i1 + (i9 * 20 | 0) + 76 >> 2] = 0.0;
15403 i9 = i9 + 1 | 0;
15404 if ((i9 | 0) >= (HEAP32[i12 >> 2] | 0)) {
15405 break L4;
15406 }
15407 }
15408 }
15409 do {
15410 i16 = i1 + (i18 * 20 | 0) + 72 | 0;
15411 HEAPF32[i16 >> 2] = 0.0;
15412 i15 = i1 + (i18 * 20 | 0) + 76 | 0;
15413 HEAPF32[i15 >> 2] = 0.0;
15414 i14 = HEAP32[i1 + (i18 * 20 | 0) + 80 >> 2] | 0;
15415 i17 = 0;
15416 while (1) {
15417 i13 = i17 + 1 | 0;
15418 if ((HEAP32[i2 + (i17 * 20 | 0) + 16 >> 2] | 0) == (i14 | 0)) {
15419 i9 = 7;
15420 break;
15421 }
15422 if ((i13 | 0) < (i19 | 0)) {
15423 i17 = i13;
15424 } else {
15425 break;
15426 }
15427 }
15428 if ((i9 | 0) == 7) {
15429 i9 = 0;
15430 HEAPF32[i16 >> 2] = +HEAPF32[i2 + (i17 * 20 | 0) + 8 >> 2];
15431 HEAPF32[i15 >> 2] = +HEAPF32[i2 + (i17 * 20 | 0) + 12 >> 2];
15432 }
15433 i18 = i18 + 1 | 0;
15434 } while ((i18 | 0) < (HEAP32[i12 >> 2] | 0));
15435 }
15436 } while (0);
15437 i9 = i11 & 1;
15438 if (i10 ^ (i9 | 0) != 0) {
15439 i11 = i8 + 4 | 0;
15440 i12 = HEAPU16[i11 >> 1] | 0;
15441 if ((i12 & 2 | 0) == 0) {
15442 HEAP16[i11 >> 1] = i12 | 2;
15443 HEAPF32[i8 + 144 >> 2] = 0.0;
15444 }
15445 i8 = i7 + 4 | 0;
15446 i11 = HEAPU16[i8 >> 1] | 0;
15447 if ((i11 & 2 | 0) == 0) {
15448 HEAP16[i8 >> 1] = i11 | 2;
15449 HEAPF32[i7 + 144 >> 2] = 0.0;
15450 }
15451 }
15452 } else {
15453 i10 = __Z13b2TestOverlapPK7b2ShapeiS1_iRK11b2TransformS4_(HEAP32[i14 + 12 >> 2] | 0, HEAP32[i1 + 56 >> 2] | 0, HEAP32[i15 + 12 >> 2] | 0, HEAP32[i1 + 60 >> 2] | 0, i12, i13) | 0;
15454 HEAP32[i1 + 124 >> 2] = 0;
15455 i9 = i11 & 1;
15456 }
15457 i7 = HEAP32[i6 >> 2] | 0;
15458 HEAP32[i6 >> 2] = i10 ? i7 | 2 : i7 & -3;
15459 i8 = (i9 | 0) == 0;
15460 i6 = i10 ^ 1;
15461 i7 = (i4 | 0) == 0;
15462 if (!(i8 ^ 1 | i6 | i7)) {
15463 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i4 >> 2] | 0) + 8 >> 2] & 15](i4, i1);
15464 }
15465 if (!(i8 | i10 | i7)) {
15466 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i4 >> 2] | 0) + 12 >> 2] & 15](i4, i1);
15467 }
15468 if (i5 | i6 | i7) {
15469 STACKTOP = i3;
15470 return;
15471 }
15472 FUNCTION_TABLE_viii[HEAP32[(HEAP32[i4 >> 2] | 0) + 16 >> 2] & 3](i4, i1, i2);
15473 STACKTOP = i3;
15474 return;
15475}
15476function __ZN13b2DynamicTree10RemoveLeafEi(i1, i12) {
15477 i1 = i1 | 0;
15478 i12 = i12 | 0;
15479 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i13 = 0;
15480 i2 = STACKTOP;
15481 if ((HEAP32[i1 >> 2] | 0) == (i12 | 0)) {
15482 HEAP32[i1 >> 2] = -1;
15483 STACKTOP = i2;
15484 return;
15485 }
15486 i3 = i1 + 4 | 0;
15487 i5 = HEAP32[i3 >> 2] | 0;
15488 i6 = HEAP32[i5 + (i12 * 36 | 0) + 20 >> 2] | 0;
15489 i4 = i5 + (i6 * 36 | 0) + 20 | 0;
15490 i7 = HEAP32[i4 >> 2] | 0;
15491 i13 = HEAP32[i5 + (i6 * 36 | 0) + 24 >> 2] | 0;
15492 if ((i13 | 0) == (i12 | 0)) {
15493 i13 = HEAP32[i5 + (i6 * 36 | 0) + 28 >> 2] | 0;
15494 }
15495 if ((i7 | 0) == -1) {
15496 HEAP32[i1 >> 2] = i13;
15497 HEAP32[i5 + (i13 * 36 | 0) + 20 >> 2] = -1;
15498 if (!((i6 | 0) > -1)) {
15499 ___assert_fail(3e3, 2944, 97, 3040);
15500 }
15501 if ((HEAP32[i1 + 12 >> 2] | 0) <= (i6 | 0)) {
15502 ___assert_fail(3e3, 2944, 97, 3040);
15503 }
15504 i3 = i1 + 8 | 0;
15505 if ((HEAP32[i3 >> 2] | 0) <= 0) {
15506 ___assert_fail(3056, 2944, 98, 3040);
15507 }
15508 i13 = i1 + 16 | 0;
15509 HEAP32[i4 >> 2] = HEAP32[i13 >> 2];
15510 HEAP32[i5 + (i6 * 36 | 0) + 32 >> 2] = -1;
15511 HEAP32[i13 >> 2] = i6;
15512 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + -1;
15513 STACKTOP = i2;
15514 return;
15515 }
15516 i12 = i5 + (i7 * 36 | 0) + 24 | 0;
15517 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
15518 HEAP32[i12 >> 2] = i13;
15519 } else {
15520 HEAP32[i5 + (i7 * 36 | 0) + 28 >> 2] = i13;
15521 }
15522 HEAP32[i5 + (i13 * 36 | 0) + 20 >> 2] = i7;
15523 if (!((i6 | 0) > -1)) {
15524 ___assert_fail(3e3, 2944, 97, 3040);
15525 }
15526 if ((HEAP32[i1 + 12 >> 2] | 0) <= (i6 | 0)) {
15527 ___assert_fail(3e3, 2944, 97, 3040);
15528 }
15529 i12 = i1 + 8 | 0;
15530 if ((HEAP32[i12 >> 2] | 0) <= 0) {
15531 ___assert_fail(3056, 2944, 98, 3040);
15532 }
15533 i13 = i1 + 16 | 0;
15534 HEAP32[i4 >> 2] = HEAP32[i13 >> 2];
15535 HEAP32[i5 + (i6 * 36 | 0) + 32 >> 2] = -1;
15536 HEAP32[i13 >> 2] = i6;
15537 HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + -1;
15538 do {
15539 i4 = __ZN13b2DynamicTree7BalanceEi(i1, i7) | 0;
15540 i7 = HEAP32[i3 >> 2] | 0;
15541 i6 = HEAP32[i7 + (i4 * 36 | 0) + 24 >> 2] | 0;
15542 i5 = HEAP32[i7 + (i4 * 36 | 0) + 28 >> 2] | 0;
15543 d10 = +HEAPF32[i7 + (i6 * 36 | 0) >> 2];
15544 d11 = +HEAPF32[i7 + (i5 * 36 | 0) >> 2];
15545 d9 = +HEAPF32[i7 + (i6 * 36 | 0) + 4 >> 2];
15546 d8 = +HEAPF32[i7 + (i5 * 36 | 0) + 4 >> 2];
15547 d10 = +(d10 < d11 ? d10 : d11);
15548 d11 = +(d9 < d8 ? d9 : d8);
15549 i13 = i7 + (i4 * 36 | 0) | 0;
15550 HEAPF32[i13 >> 2] = d10;
15551 HEAPF32[i13 + 4 >> 2] = d11;
15552 d11 = +HEAPF32[i7 + (i6 * 36 | 0) + 8 >> 2];
15553 d10 = +HEAPF32[i7 + (i5 * 36 | 0) + 8 >> 2];
15554 d9 = +HEAPF32[i7 + (i6 * 36 | 0) + 12 >> 2];
15555 d8 = +HEAPF32[i7 + (i5 * 36 | 0) + 12 >> 2];
15556 d10 = +(d11 > d10 ? d11 : d10);
15557 d11 = +(d9 > d8 ? d9 : d8);
15558 i7 = i7 + (i4 * 36 | 0) + 8 | 0;
15559 HEAPF32[i7 >> 2] = d10;
15560 HEAPF32[i7 + 4 >> 2] = d11;
15561 i7 = HEAP32[i3 >> 2] | 0;
15562 i6 = HEAP32[i7 + (i6 * 36 | 0) + 32 >> 2] | 0;
15563 i5 = HEAP32[i7 + (i5 * 36 | 0) + 32 >> 2] | 0;
15564 HEAP32[i7 + (i4 * 36 | 0) + 32 >> 2] = ((i6 | 0) > (i5 | 0) ? i6 : i5) + 1;
15565 i7 = HEAP32[i7 + (i4 * 36 | 0) + 20 >> 2] | 0;
15566 } while (!((i7 | 0) == -1));
15567 STACKTOP = i2;
15568 return;
15569}
15570function __ZN9b2Simplex6Solve3Ev(i7) {
15571 i7 = i7 | 0;
15572 var i1 = 0, i2 = 0, i3 = 0, d4 = 0.0, d5 = 0.0, d6 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, i22 = 0;
15573 i1 = STACKTOP;
15574 i2 = i7 + 16 | 0;
15575 d17 = +HEAPF32[i2 >> 2];
15576 d15 = +HEAPF32[i2 + 4 >> 2];
15577 i2 = i7 + 36 | 0;
15578 i3 = i7 + 52 | 0;
15579 d14 = +HEAPF32[i3 >> 2];
15580 d16 = +HEAPF32[i3 + 4 >> 2];
15581 i3 = i7 + 72 | 0;
15582 i22 = i7 + 88 | 0;
15583 d18 = +HEAPF32[i22 >> 2];
15584 d11 = +HEAPF32[i22 + 4 >> 2];
15585 d20 = d14 - d17;
15586 d10 = d16 - d15;
15587 d9 = d17 * d20 + d15 * d10;
15588 d8 = d14 * d20 + d16 * d10;
15589 d4 = d18 - d17;
15590 d19 = d11 - d15;
15591 d6 = d17 * d4 + d15 * d19;
15592 d5 = d18 * d4 + d11 * d19;
15593 d21 = d18 - d14;
15594 d12 = d11 - d16;
15595 d13 = d14 * d21 + d16 * d12;
15596 d12 = d18 * d21 + d11 * d12;
15597 d4 = d20 * d19 - d10 * d4;
15598 d10 = (d14 * d11 - d16 * d18) * d4;
15599 d11 = (d15 * d18 - d17 * d11) * d4;
15600 d4 = (d17 * d16 - d15 * d14) * d4;
15601 if (!(!(d9 >= -0.0) | !(d6 >= -0.0))) {
15602 HEAPF32[i7 + 24 >> 2] = 1.0;
15603 HEAP32[i7 + 108 >> 2] = 1;
15604 STACKTOP = i1;
15605 return;
15606 }
15607 if (!(!(d9 < -0.0) | !(d8 > 0.0) | !(d4 <= 0.0))) {
15608 d21 = 1.0 / (d8 - d9);
15609 HEAPF32[i7 + 24 >> 2] = d8 * d21;
15610 HEAPF32[i7 + 60 >> 2] = -(d9 * d21);
15611 HEAP32[i7 + 108 >> 2] = 2;
15612 STACKTOP = i1;
15613 return;
15614 }
15615 if (!(!(d6 < -0.0) | !(d5 > 0.0) | !(d11 <= 0.0))) {
15616 d21 = 1.0 / (d5 - d6);
15617 HEAPF32[i7 + 24 >> 2] = d5 * d21;
15618 HEAPF32[i7 + 96 >> 2] = -(d6 * d21);
15619 HEAP32[i7 + 108 >> 2] = 2;
15620 i7 = i2 + 0 | 0;
15621 i3 = i3 + 0 | 0;
15622 i2 = i7 + 36 | 0;
15623 do {
15624 HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
15625 i7 = i7 + 4 | 0;
15626 i3 = i3 + 4 | 0;
15627 } while ((i7 | 0) < (i2 | 0));
15628 STACKTOP = i1;
15629 return;
15630 }
15631 if (!(!(d8 <= 0.0) | !(d13 >= -0.0))) {
15632 HEAPF32[i7 + 60 >> 2] = 1.0;
15633 HEAP32[i7 + 108 >> 2] = 1;
15634 i7 = i7 + 0 | 0;
15635 i3 = i2 + 0 | 0;
15636 i2 = i7 + 36 | 0;
15637 do {
15638 HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
15639 i7 = i7 + 4 | 0;
15640 i3 = i3 + 4 | 0;
15641 } while ((i7 | 0) < (i2 | 0));
15642 STACKTOP = i1;
15643 return;
15644 }
15645 if (!(!(d5 <= 0.0) | !(d12 <= 0.0))) {
15646 HEAPF32[i7 + 96 >> 2] = 1.0;
15647 HEAP32[i7 + 108 >> 2] = 1;
15648 i7 = i7 + 0 | 0;
15649 i3 = i3 + 0 | 0;
15650 i2 = i7 + 36 | 0;
15651 do {
15652 HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
15653 i7 = i7 + 4 | 0;
15654 i3 = i3 + 4 | 0;
15655 } while ((i7 | 0) < (i2 | 0));
15656 STACKTOP = i1;
15657 return;
15658 }
15659 if (!(d13 < -0.0) | !(d12 > 0.0) | !(d10 <= 0.0)) {
15660 d21 = 1.0 / (d4 + (d10 + d11));
15661 HEAPF32[i7 + 24 >> 2] = d10 * d21;
15662 HEAPF32[i7 + 60 >> 2] = d11 * d21;
15663 HEAPF32[i7 + 96 >> 2] = d4 * d21;
15664 HEAP32[i7 + 108 >> 2] = 3;
15665 STACKTOP = i1;
15666 return;
15667 } else {
15668 d21 = 1.0 / (d12 - d13);
15669 HEAPF32[i7 + 60 >> 2] = d12 * d21;
15670 HEAPF32[i7 + 96 >> 2] = -(d13 * d21);
15671 HEAP32[i7 + 108 >> 2] = 2;
15672 i7 = i7 + 0 | 0;
15673 i3 = i3 + 0 | 0;
15674 i2 = i7 + 36 | 0;
15675 do {
15676 HEAP32[i7 >> 2] = HEAP32[i3 >> 2];
15677 i7 = i7 + 4 | 0;
15678 i3 = i3 + 4 | 0;
15679 } while ((i7 | 0) < (i2 | 0));
15680 STACKTOP = i1;
15681 return;
15682 }
15683}
15684function __ZN16b2ContactManager7CollideEv(i3) {
15685 i3 = i3 | 0;
15686 var i1 = 0, i2 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0;
15687 i2 = STACKTOP;
15688 i8 = HEAP32[i3 + 60 >> 2] | 0;
15689 if ((i8 | 0) == 0) {
15690 STACKTOP = i2;
15691 return;
15692 }
15693 i7 = i3 + 12 | 0;
15694 i6 = i3 + 4 | 0;
15695 i5 = i3 + 72 | 0;
15696 i4 = i3 + 68 | 0;
15697 L4 : while (1) {
15698 i12 = HEAP32[i8 + 48 >> 2] | 0;
15699 i10 = HEAP32[i8 + 52 >> 2] | 0;
15700 i11 = HEAP32[i8 + 56 >> 2] | 0;
15701 i9 = HEAP32[i8 + 60 >> 2] | 0;
15702 i15 = HEAP32[i12 + 8 >> 2] | 0;
15703 i13 = HEAP32[i10 + 8 >> 2] | 0;
15704 i16 = i8 + 4 | 0;
15705 do {
15706 if ((HEAP32[i16 >> 2] & 8 | 0) == 0) {
15707 i1 = 11;
15708 } else {
15709 if (!(__ZNK6b2Body13ShouldCollideEPKS_(i13, i15) | 0)) {
15710 i16 = HEAP32[i8 + 12 >> 2] | 0;
15711 __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8);
15712 i8 = i16;
15713 break;
15714 }
15715 i14 = HEAP32[i4 >> 2] | 0;
15716 if ((i14 | 0) != 0 ? !(FUNCTION_TABLE_iiii[HEAP32[(HEAP32[i14 >> 2] | 0) + 8 >> 2] & 7](i14, i12, i10) | 0) : 0) {
15717 i16 = HEAP32[i8 + 12 >> 2] | 0;
15718 __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8);
15719 i8 = i16;
15720 break;
15721 }
15722 HEAP32[i16 >> 2] = HEAP32[i16 >> 2] & -9;
15723 i1 = 11;
15724 }
15725 } while (0);
15726 do {
15727 if ((i1 | 0) == 11) {
15728 i1 = 0;
15729 if ((HEAP16[i15 + 4 >> 1] & 2) == 0) {
15730 i14 = 0;
15731 } else {
15732 i14 = (HEAP32[i15 >> 2] | 0) != 0;
15733 }
15734 if ((HEAP16[i13 + 4 >> 1] & 2) == 0) {
15735 i13 = 0;
15736 } else {
15737 i13 = (HEAP32[i13 >> 2] | 0) != 0;
15738 }
15739 if (!(i14 | i13)) {
15740 i8 = HEAP32[i8 + 12 >> 2] | 0;
15741 break;
15742 }
15743 i11 = HEAP32[(HEAP32[i12 + 24 >> 2] | 0) + (i11 * 28 | 0) + 24 >> 2] | 0;
15744 i9 = HEAP32[(HEAP32[i10 + 24 >> 2] | 0) + (i9 * 28 | 0) + 24 >> 2] | 0;
15745 if (!((i11 | 0) > -1)) {
15746 i1 = 19;
15747 break L4;
15748 }
15749 i10 = HEAP32[i7 >> 2] | 0;
15750 if ((i10 | 0) <= (i11 | 0)) {
15751 i1 = 19;
15752 break L4;
15753 }
15754 i12 = HEAP32[i6 >> 2] | 0;
15755 if (!((i9 | 0) > -1 & (i10 | 0) > (i9 | 0))) {
15756 i1 = 21;
15757 break L4;
15758 }
15759 if (+HEAPF32[i12 + (i9 * 36 | 0) >> 2] - +HEAPF32[i12 + (i11 * 36 | 0) + 8 >> 2] > 0.0 | +HEAPF32[i12 + (i9 * 36 | 0) + 4 >> 2] - +HEAPF32[i12 + (i11 * 36 | 0) + 12 >> 2] > 0.0 | +HEAPF32[i12 + (i11 * 36 | 0) >> 2] - +HEAPF32[i12 + (i9 * 36 | 0) + 8 >> 2] > 0.0 | +HEAPF32[i12 + (i11 * 36 | 0) + 4 >> 2] - +HEAPF32[i12 + (i9 * 36 | 0) + 12 >> 2] > 0.0) {
15760 i16 = HEAP32[i8 + 12 >> 2] | 0;
15761 __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8);
15762 i8 = i16;
15763 break;
15764 } else {
15765 __ZN9b2Contact6UpdateEP17b2ContactListener(i8, HEAP32[i5 >> 2] | 0);
15766 i8 = HEAP32[i8 + 12 >> 2] | 0;
15767 break;
15768 }
15769 }
15770 } while (0);
15771 if ((i8 | 0) == 0) {
15772 i1 = 25;
15773 break;
15774 }
15775 }
15776 if ((i1 | 0) == 19) {
15777 ___assert_fail(1904, 1952, 159, 2008);
15778 } else if ((i1 | 0) == 21) {
15779 ___assert_fail(1904, 1952, 159, 2008);
15780 } else if ((i1 | 0) == 25) {
15781 STACKTOP = i2;
15782 return;
15783 }
15784}
15785function __ZN16b2ContactManager7AddPairEPvS0_(i1, i5, i6) {
15786 i1 = i1 | 0;
15787 i5 = i5 | 0;
15788 i6 = i6 | 0;
15789 var i2 = 0, i3 = 0, i4 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0;
15790 i2 = STACKTOP;
15791 i4 = HEAP32[i5 + 16 >> 2] | 0;
15792 i3 = HEAP32[i6 + 16 >> 2] | 0;
15793 i5 = HEAP32[i5 + 20 >> 2] | 0;
15794 i6 = HEAP32[i6 + 20 >> 2] | 0;
15795 i8 = HEAP32[i4 + 8 >> 2] | 0;
15796 i7 = HEAP32[i3 + 8 >> 2] | 0;
15797 if ((i8 | 0) == (i7 | 0)) {
15798 STACKTOP = i2;
15799 return;
15800 }
15801 i10 = HEAP32[i7 + 112 >> 2] | 0;
15802 L4 : do {
15803 if ((i10 | 0) != 0) {
15804 while (1) {
15805 if ((HEAP32[i10 >> 2] | 0) == (i8 | 0)) {
15806 i9 = HEAP32[i10 + 4 >> 2] | 0;
15807 i12 = HEAP32[i9 + 48 >> 2] | 0;
15808 i13 = HEAP32[i9 + 52 >> 2] | 0;
15809 i11 = HEAP32[i9 + 56 >> 2] | 0;
15810 i9 = HEAP32[i9 + 60 >> 2] | 0;
15811 if ((i12 | 0) == (i4 | 0) & (i13 | 0) == (i3 | 0) & (i11 | 0) == (i5 | 0) & (i9 | 0) == (i6 | 0)) {
15812 i9 = 22;
15813 break;
15814 }
15815 if ((i12 | 0) == (i3 | 0) & (i13 | 0) == (i4 | 0) & (i11 | 0) == (i6 | 0) & (i9 | 0) == (i5 | 0)) {
15816 i9 = 22;
15817 break;
15818 }
15819 }
15820 i10 = HEAP32[i10 + 12 >> 2] | 0;
15821 if ((i10 | 0) == 0) {
15822 break L4;
15823 }
15824 }
15825 if ((i9 | 0) == 22) {
15826 STACKTOP = i2;
15827 return;
15828 }
15829 }
15830 } while (0);
15831 if (!(__ZNK6b2Body13ShouldCollideEPKS_(i7, i8) | 0)) {
15832 STACKTOP = i2;
15833 return;
15834 }
15835 i7 = HEAP32[i1 + 68 >> 2] | 0;
15836 if ((i7 | 0) != 0 ? !(FUNCTION_TABLE_iiii[HEAP32[(HEAP32[i7 >> 2] | 0) + 8 >> 2] & 7](i7, i4, i3) | 0) : 0) {
15837 STACKTOP = i2;
15838 return;
15839 }
15840 i5 = __ZN9b2Contact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i4, i5, i3, i6, HEAP32[i1 + 76 >> 2] | 0) | 0;
15841 if ((i5 | 0) == 0) {
15842 STACKTOP = i2;
15843 return;
15844 }
15845 i4 = HEAP32[(HEAP32[i5 + 48 >> 2] | 0) + 8 >> 2] | 0;
15846 i3 = HEAP32[(HEAP32[i5 + 52 >> 2] | 0) + 8 >> 2] | 0;
15847 HEAP32[i5 + 8 >> 2] = 0;
15848 i7 = i1 + 60 | 0;
15849 HEAP32[i5 + 12 >> 2] = HEAP32[i7 >> 2];
15850 i6 = HEAP32[i7 >> 2] | 0;
15851 if ((i6 | 0) != 0) {
15852 HEAP32[i6 + 8 >> 2] = i5;
15853 }
15854 HEAP32[i7 >> 2] = i5;
15855 i8 = i5 + 16 | 0;
15856 HEAP32[i5 + 20 >> 2] = i5;
15857 HEAP32[i8 >> 2] = i3;
15858 HEAP32[i5 + 24 >> 2] = 0;
15859 i6 = i4 + 112 | 0;
15860 HEAP32[i5 + 28 >> 2] = HEAP32[i6 >> 2];
15861 i7 = HEAP32[i6 >> 2] | 0;
15862 if ((i7 | 0) != 0) {
15863 HEAP32[i7 + 8 >> 2] = i8;
15864 }
15865 HEAP32[i6 >> 2] = i8;
15866 i6 = i5 + 32 | 0;
15867 HEAP32[i5 + 36 >> 2] = i5;
15868 HEAP32[i6 >> 2] = i4;
15869 HEAP32[i5 + 40 >> 2] = 0;
15870 i7 = i3 + 112 | 0;
15871 HEAP32[i5 + 44 >> 2] = HEAP32[i7 >> 2];
15872 i5 = HEAP32[i7 >> 2] | 0;
15873 if ((i5 | 0) != 0) {
15874 HEAP32[i5 + 8 >> 2] = i6;
15875 }
15876 HEAP32[i7 >> 2] = i6;
15877 i5 = i4 + 4 | 0;
15878 i6 = HEAPU16[i5 >> 1] | 0;
15879 if ((i6 & 2 | 0) == 0) {
15880 HEAP16[i5 >> 1] = i6 | 2;
15881 HEAPF32[i4 + 144 >> 2] = 0.0;
15882 }
15883 i4 = i3 + 4 | 0;
15884 i5 = HEAPU16[i4 >> 1] | 0;
15885 if ((i5 & 2 | 0) == 0) {
15886 HEAP16[i4 >> 1] = i5 | 2;
15887 HEAPF32[i3 + 144 >> 2] = 0.0;
15888 }
15889 i13 = i1 + 64 | 0;
15890 HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + 1;
15891 STACKTOP = i2;
15892 return;
15893}
15894function __ZN12b2BroadPhase11UpdatePairsI16b2ContactManagerEEvPT_(i5, i2) {
15895 i5 = i5 | 0;
15896 i2 = i2 | 0;
15897 var i1 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0;
15898 i3 = STACKTOP;
15899 STACKTOP = STACKTOP + 16 | 0;
15900 i6 = i3;
15901 i1 = i5 + 52 | 0;
15902 HEAP32[i1 >> 2] = 0;
15903 i4 = i5 + 40 | 0;
15904 i12 = HEAP32[i4 >> 2] | 0;
15905 do {
15906 if ((i12 | 0) > 0) {
15907 i9 = i5 + 32 | 0;
15908 i11 = i5 + 56 | 0;
15909 i8 = i5 + 12 | 0;
15910 i10 = i5 + 4 | 0;
15911 i13 = 0;
15912 while (1) {
15913 i14 = HEAP32[(HEAP32[i9 >> 2] | 0) + (i13 << 2) >> 2] | 0;
15914 HEAP32[i11 >> 2] = i14;
15915 if (!((i14 | 0) == -1)) {
15916 if (!((i14 | 0) > -1)) {
15917 i8 = 6;
15918 break;
15919 }
15920 if ((HEAP32[i8 >> 2] | 0) <= (i14 | 0)) {
15921 i8 = 6;
15922 break;
15923 }
15924 __ZNK13b2DynamicTree5QueryI12b2BroadPhaseEEvPT_RK6b2AABB(i5, i5, (HEAP32[i10 >> 2] | 0) + (i14 * 36 | 0) | 0);
15925 i12 = HEAP32[i4 >> 2] | 0;
15926 }
15927 i13 = i13 + 1 | 0;
15928 if ((i13 | 0) >= (i12 | 0)) {
15929 i8 = 9;
15930 break;
15931 }
15932 }
15933 if ((i8 | 0) == 6) {
15934 ___assert_fail(1904, 1952, 159, 2008);
15935 } else if ((i8 | 0) == 9) {
15936 i7 = HEAP32[i1 >> 2] | 0;
15937 break;
15938 }
15939 } else {
15940 i7 = 0;
15941 }
15942 } while (0);
15943 HEAP32[i4 >> 2] = 0;
15944 i4 = i5 + 44 | 0;
15945 i14 = HEAP32[i4 >> 2] | 0;
15946 HEAP32[i6 >> 2] = 3;
15947 __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i14, i14 + (i7 * 12 | 0) | 0, i6);
15948 if ((HEAP32[i1 >> 2] | 0) <= 0) {
15949 STACKTOP = i3;
15950 return;
15951 }
15952 i6 = i5 + 12 | 0;
15953 i7 = i5 + 4 | 0;
15954 i9 = 0;
15955 L18 : while (1) {
15956 i8 = HEAP32[i4 >> 2] | 0;
15957 i5 = i8 + (i9 * 12 | 0) | 0;
15958 i10 = HEAP32[i5 >> 2] | 0;
15959 if (!((i10 | 0) > -1)) {
15960 i8 = 14;
15961 break;
15962 }
15963 i12 = HEAP32[i6 >> 2] | 0;
15964 if ((i12 | 0) <= (i10 | 0)) {
15965 i8 = 14;
15966 break;
15967 }
15968 i11 = HEAP32[i7 >> 2] | 0;
15969 i8 = i8 + (i9 * 12 | 0) + 4 | 0;
15970 i13 = HEAP32[i8 >> 2] | 0;
15971 if (!((i13 | 0) > -1 & (i12 | 0) > (i13 | 0))) {
15972 i8 = 16;
15973 break;
15974 }
15975 __ZN16b2ContactManager7AddPairEPvS0_(i2, HEAP32[i11 + (i10 * 36 | 0) + 16 >> 2] | 0, HEAP32[i11 + (i13 * 36 | 0) + 16 >> 2] | 0);
15976 i10 = HEAP32[i1 >> 2] | 0;
15977 while (1) {
15978 i9 = i9 + 1 | 0;
15979 if ((i9 | 0) >= (i10 | 0)) {
15980 i8 = 21;
15981 break L18;
15982 }
15983 i11 = HEAP32[i4 >> 2] | 0;
15984 if ((HEAP32[i11 + (i9 * 12 | 0) >> 2] | 0) != (HEAP32[i5 >> 2] | 0)) {
15985 continue L18;
15986 }
15987 if ((HEAP32[i11 + (i9 * 12 | 0) + 4 >> 2] | 0) != (HEAP32[i8 >> 2] | 0)) {
15988 continue L18;
15989 }
15990 }
15991 }
15992 if ((i8 | 0) == 14) {
15993 ___assert_fail(1904, 1952, 153, 1992);
15994 } else if ((i8 | 0) == 16) {
15995 ___assert_fail(1904, 1952, 153, 1992);
15996 } else if ((i8 | 0) == 21) {
15997 STACKTOP = i3;
15998 return;
15999 }
16000}
16001function __ZNK13b2DynamicTree5QueryI12b2BroadPhaseEEvPT_RK6b2AABB(i9, i4, i7) {
16002 i9 = i9 | 0;
16003 i4 = i4 | 0;
16004 i7 = i7 | 0;
16005 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i8 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0;
16006 i2 = STACKTOP;
16007 STACKTOP = STACKTOP + 1040 | 0;
16008 i3 = i2;
16009 i1 = i3 + 4 | 0;
16010 HEAP32[i3 >> 2] = i1;
16011 i5 = i3 + 1028 | 0;
16012 HEAP32[i5 >> 2] = 0;
16013 i6 = i3 + 1032 | 0;
16014 HEAP32[i6 >> 2] = 256;
16015 i14 = HEAP32[i3 >> 2] | 0;
16016 HEAP32[i14 + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i9 >> 2];
16017 i15 = HEAP32[i5 >> 2] | 0;
16018 i16 = i15 + 1 | 0;
16019 HEAP32[i5 >> 2] = i16;
16020 L1 : do {
16021 if ((i15 | 0) > -1) {
16022 i9 = i9 + 4 | 0;
16023 i11 = i7 + 4 | 0;
16024 i12 = i7 + 8 | 0;
16025 i10 = i7 + 12 | 0;
16026 while (1) {
16027 i16 = i16 + -1 | 0;
16028 HEAP32[i5 >> 2] = i16;
16029 i13 = HEAP32[i14 + (i16 << 2) >> 2] | 0;
16030 do {
16031 if (!((i13 | 0) == -1) ? (i8 = HEAP32[i9 >> 2] | 0, !(+HEAPF32[i7 >> 2] - +HEAPF32[i8 + (i13 * 36 | 0) + 8 >> 2] > 0.0 | +HEAPF32[i11 >> 2] - +HEAPF32[i8 + (i13 * 36 | 0) + 12 >> 2] > 0.0 | +HEAPF32[i8 + (i13 * 36 | 0) >> 2] - +HEAPF32[i12 >> 2] > 0.0 | +HEAPF32[i8 + (i13 * 36 | 0) + 4 >> 2] - +HEAPF32[i10 >> 2] > 0.0)) : 0) {
16032 i15 = i8 + (i13 * 36 | 0) + 24 | 0;
16033 if ((HEAP32[i15 >> 2] | 0) == -1) {
16034 if (!(__ZN12b2BroadPhase13QueryCallbackEi(i4, i13) | 0)) {
16035 break L1;
16036 }
16037 i16 = HEAP32[i5 >> 2] | 0;
16038 break;
16039 }
16040 if ((i16 | 0) == (HEAP32[i6 >> 2] | 0) ? (HEAP32[i6 >> 2] = i16 << 1, i16 = __Z7b2Alloci(i16 << 3) | 0, HEAP32[i3 >> 2] = i16, _memcpy(i16 | 0, i14 | 0, HEAP32[i5 >> 2] << 2 | 0) | 0, (i14 | 0) != (i1 | 0)) : 0) {
16041 __Z6b2FreePv(i14);
16042 }
16043 i14 = HEAP32[i3 >> 2] | 0;
16044 HEAP32[i14 + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i15 >> 2];
16045 i15 = (HEAP32[i5 >> 2] | 0) + 1 | 0;
16046 HEAP32[i5 >> 2] = i15;
16047 i13 = i8 + (i13 * 36 | 0) + 28 | 0;
16048 if ((i15 | 0) == (HEAP32[i6 >> 2] | 0) ? (HEAP32[i6 >> 2] = i15 << 1, i16 = __Z7b2Alloci(i15 << 3) | 0, HEAP32[i3 >> 2] = i16, _memcpy(i16 | 0, i14 | 0, HEAP32[i5 >> 2] << 2 | 0) | 0, (i14 | 0) != (i1 | 0)) : 0) {
16049 __Z6b2FreePv(i14);
16050 }
16051 HEAP32[(HEAP32[i3 >> 2] | 0) + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i13 >> 2];
16052 i16 = (HEAP32[i5 >> 2] | 0) + 1 | 0;
16053 HEAP32[i5 >> 2] = i16;
16054 }
16055 } while (0);
16056 if ((i16 | 0) <= 0) {
16057 break L1;
16058 }
16059 i14 = HEAP32[i3 >> 2] | 0;
16060 }
16061 }
16062 } while (0);
16063 i4 = HEAP32[i3 >> 2] | 0;
16064 if ((i4 | 0) == (i1 | 0)) {
16065 STACKTOP = i2;
16066 return;
16067 }
16068 __Z6b2FreePv(i4);
16069 HEAP32[i3 >> 2] = 0;
16070 STACKTOP = i2;
16071 return;
16072}
16073function __ZN15b2ContactSolver9WarmStartEv(i4) {
16074 i4 = i4 | 0;
16075 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, d10 = 0.0, d11 = 0.0, d12 = 0.0, i13 = 0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0, d21 = 0.0, i22 = 0, d23 = 0.0, i24 = 0, d25 = 0.0, d26 = 0.0, d27 = 0.0;
16076 i1 = STACKTOP;
16077 i2 = i4 + 48 | 0;
16078 if ((HEAP32[i2 >> 2] | 0) <= 0) {
16079 STACKTOP = i1;
16080 return;
16081 }
16082 i3 = i4 + 40 | 0;
16083 i5 = i4 + 28 | 0;
16084 i22 = HEAP32[i5 >> 2] | 0;
16085 i8 = 0;
16086 do {
16087 i9 = HEAP32[i3 >> 2] | 0;
16088 i7 = HEAP32[i9 + (i8 * 152 | 0) + 112 >> 2] | 0;
16089 i6 = HEAP32[i9 + (i8 * 152 | 0) + 116 >> 2] | 0;
16090 d10 = +HEAPF32[i9 + (i8 * 152 | 0) + 120 >> 2];
16091 d14 = +HEAPF32[i9 + (i8 * 152 | 0) + 128 >> 2];
16092 d12 = +HEAPF32[i9 + (i8 * 152 | 0) + 124 >> 2];
16093 d11 = +HEAPF32[i9 + (i8 * 152 | 0) + 132 >> 2];
16094 i13 = HEAP32[i9 + (i8 * 152 | 0) + 144 >> 2] | 0;
16095 i4 = i22 + (i7 * 12 | 0) | 0;
16096 i24 = i4;
16097 d17 = +HEAPF32[i24 >> 2];
16098 d19 = +HEAPF32[i24 + 4 >> 2];
16099 d20 = +HEAPF32[i22 + (i7 * 12 | 0) + 8 >> 2];
16100 i24 = i22 + (i6 * 12 | 0) | 0;
16101 d21 = +HEAPF32[i24 >> 2];
16102 d23 = +HEAPF32[i24 + 4 >> 2];
16103 d18 = +HEAPF32[i22 + (i6 * 12 | 0) + 8 >> 2];
16104 i22 = i9 + (i8 * 152 | 0) + 72 | 0;
16105 d15 = +HEAPF32[i22 >> 2];
16106 d16 = +HEAPF32[i22 + 4 >> 2];
16107 if ((i13 | 0) > 0) {
16108 i22 = 0;
16109 do {
16110 d27 = +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 16 >> 2];
16111 d25 = +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 20 >> 2];
16112 d26 = d15 * d27 + d16 * d25;
16113 d25 = d16 * d27 - d15 * d25;
16114 d20 = d20 - d14 * (+HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) >> 2] * d25 - +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 4 >> 2] * d26);
16115 d17 = d17 - d10 * d26;
16116 d19 = d19 - d10 * d25;
16117 d18 = d18 + d11 * (d25 * +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 8 >> 2] - d26 * +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 12 >> 2]);
16118 d21 = d21 + d12 * d26;
16119 d23 = d23 + d12 * d25;
16120 i22 = i22 + 1 | 0;
16121 } while ((i22 | 0) != (i13 | 0));
16122 }
16123 d27 = +d17;
16124 d26 = +d19;
16125 i22 = i4;
16126 HEAPF32[i22 >> 2] = d27;
16127 HEAPF32[i22 + 4 >> 2] = d26;
16128 i22 = HEAP32[i5 >> 2] | 0;
16129 HEAPF32[i22 + (i7 * 12 | 0) + 8 >> 2] = d20;
16130 d26 = +d21;
16131 d27 = +d23;
16132 i22 = i22 + (i6 * 12 | 0) | 0;
16133 HEAPF32[i22 >> 2] = d26;
16134 HEAPF32[i22 + 4 >> 2] = d27;
16135 i22 = HEAP32[i5 >> 2] | 0;
16136 HEAPF32[i22 + (i6 * 12 | 0) + 8 >> 2] = d18;
16137 i8 = i8 + 1 | 0;
16138 } while ((i8 | 0) < (HEAP32[i2 >> 2] | 0));
16139 STACKTOP = i1;
16140 return;
16141}
16142function __ZNK14b2PolygonShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi(i1, i5, i8, i7, i4) {
16143 i1 = i1 | 0;
16144 i5 = i5 | 0;
16145 i8 = i8 | 0;
16146 i7 = i7 | 0;
16147 i4 = i4 | 0;
16148 var i2 = 0, d3 = 0.0, i6 = 0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, i14 = 0, i15 = 0, i16 = 0, d17 = 0.0, d18 = 0.0, d19 = 0.0, d20 = 0.0;
16149 i4 = STACKTOP;
16150 d10 = +HEAPF32[i7 >> 2];
16151 d9 = +HEAPF32[i8 >> 2] - d10;
16152 d18 = +HEAPF32[i7 + 4 >> 2];
16153 d11 = +HEAPF32[i8 + 4 >> 2] - d18;
16154 i6 = i7 + 12 | 0;
16155 d17 = +HEAPF32[i6 >> 2];
16156 i7 = i7 + 8 | 0;
16157 d19 = +HEAPF32[i7 >> 2];
16158 d12 = d9 * d17 + d11 * d19;
16159 d9 = d17 * d11 - d9 * d19;
16160 d10 = +HEAPF32[i8 + 8 >> 2] - d10;
16161 d18 = +HEAPF32[i8 + 12 >> 2] - d18;
16162 d11 = d17 * d10 + d19 * d18 - d12;
16163 d10 = d17 * d18 - d19 * d10 - d9;
16164 i8 = i8 + 16 | 0;
16165 i14 = HEAP32[i1 + 148 >> 2] | 0;
16166 do {
16167 if ((i14 | 0) > 0) {
16168 i16 = 0;
16169 i15 = -1;
16170 d13 = 0.0;
16171 d17 = +HEAPF32[i8 >> 2];
16172 L3 : while (1) {
16173 d20 = +HEAPF32[i1 + (i16 << 3) + 84 >> 2];
16174 d19 = +HEAPF32[i1 + (i16 << 3) + 88 >> 2];
16175 d18 = (+HEAPF32[i1 + (i16 << 3) + 20 >> 2] - d12) * d20 + (+HEAPF32[i1 + (i16 << 3) + 24 >> 2] - d9) * d19;
16176 d19 = d11 * d20 + d10 * d19;
16177 do {
16178 if (d19 == 0.0) {
16179 if (d18 < 0.0) {
16180 i1 = 0;
16181 i14 = 18;
16182 break L3;
16183 }
16184 } else {
16185 if (d19 < 0.0 ? d18 < d13 * d19 : 0) {
16186 i15 = i16;
16187 d13 = d18 / d19;
16188 break;
16189 }
16190 if (d19 > 0.0 ? d18 < d17 * d19 : 0) {
16191 d17 = d18 / d19;
16192 }
16193 }
16194 } while (0);
16195 i16 = i16 + 1 | 0;
16196 if (d17 < d13) {
16197 i1 = 0;
16198 i14 = 18;
16199 break;
16200 }
16201 if ((i16 | 0) >= (i14 | 0)) {
16202 i14 = 13;
16203 break;
16204 }
16205 }
16206 if ((i14 | 0) == 13) {
16207 if (d13 >= 0.0) {
16208 i2 = i15;
16209 d3 = d13;
16210 break;
16211 }
16212 ___assert_fail(376, 328, 249, 424);
16213 } else if ((i14 | 0) == 18) {
16214 STACKTOP = i4;
16215 return i1 | 0;
16216 }
16217 } else {
16218 i2 = -1;
16219 d3 = 0.0;
16220 }
16221 } while (0);
16222 if (!(d3 <= +HEAPF32[i8 >> 2])) {
16223 ___assert_fail(376, 328, 249, 424);
16224 }
16225 if (!((i2 | 0) > -1)) {
16226 i16 = 0;
16227 STACKTOP = i4;
16228 return i16 | 0;
16229 }
16230 HEAPF32[i5 + 8 >> 2] = d3;
16231 d18 = +HEAPF32[i6 >> 2];
16232 d13 = +HEAPF32[i1 + (i2 << 3) + 84 >> 2];
16233 d17 = +HEAPF32[i7 >> 2];
16234 d20 = +HEAPF32[i1 + (i2 << 3) + 88 >> 2];
16235 d19 = +(d18 * d13 - d17 * d20);
16236 d20 = +(d13 * d17 + d18 * d20);
16237 i16 = i5;
16238 HEAPF32[i16 >> 2] = d19;
16239 HEAPF32[i16 + 4 >> 2] = d20;
16240 i16 = 1;
16241 STACKTOP = i4;
16242 return i16 | 0;
16243}
16244function __ZN7b2World4StepEfii(i1, d9, i11, i12) {
16245 i1 = i1 | 0;
16246 d9 = +d9;
16247 i11 = i11 | 0;
16248 i12 = i12 | 0;
16249 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i10 = 0, i13 = 0;
16250 i4 = STACKTOP;
16251 STACKTOP = STACKTOP + 32 | 0;
16252 i3 = i4 + 27 | 0;
16253 i5 = i4;
16254 i8 = i4 + 26 | 0;
16255 i10 = i4 + 25 | 0;
16256 i7 = i4 + 24 | 0;
16257 __ZN7b2TimerC2Ev(i3);
16258 i2 = i1 + 102868 | 0;
16259 i13 = HEAP32[i2 >> 2] | 0;
16260 if ((i13 & 1 | 0) != 0) {
16261 __ZN16b2ContactManager15FindNewContactsEv(i1 + 102872 | 0);
16262 i13 = HEAP32[i2 >> 2] & -2;
16263 HEAP32[i2 >> 2] = i13;
16264 }
16265 HEAP32[i2 >> 2] = i13 | 2;
16266 HEAPF32[i5 >> 2] = d9;
16267 HEAP32[i5 + 12 >> 2] = i11;
16268 HEAP32[i5 + 16 >> 2] = i12;
16269 if (d9 > 0.0) {
16270 HEAPF32[i5 + 4 >> 2] = 1.0 / d9;
16271 } else {
16272 HEAPF32[i5 + 4 >> 2] = 0.0;
16273 }
16274 i11 = i1 + 102988 | 0;
16275 HEAPF32[i5 + 8 >> 2] = +HEAPF32[i11 >> 2] * d9;
16276 HEAP8[i5 + 20 | 0] = HEAP8[i1 + 102992 | 0] | 0;
16277 __ZN7b2TimerC2Ev(i8);
16278 __ZN16b2ContactManager7CollideEv(i1 + 102872 | 0);
16279 HEAPF32[i1 + 103e3 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i8);
16280 if ((HEAP8[i1 + 102995 | 0] | 0) != 0 ? +HEAPF32[i5 >> 2] > 0.0 : 0) {
16281 __ZN7b2TimerC2Ev(i10);
16282 __ZN7b2World5SolveERK10b2TimeStep(i1, i5);
16283 HEAPF32[i1 + 103004 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i10);
16284 }
16285 if ((HEAP8[i1 + 102993 | 0] | 0) != 0) {
16286 d9 = +HEAPF32[i5 >> 2];
16287 if (d9 > 0.0) {
16288 __ZN7b2TimerC2Ev(i7);
16289 __ZN7b2World8SolveTOIERK10b2TimeStep(i1, i5);
16290 HEAPF32[i1 + 103024 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i7);
16291 i6 = 12;
16292 }
16293 } else {
16294 i6 = 12;
16295 }
16296 if ((i6 | 0) == 12) {
16297 d9 = +HEAPF32[i5 >> 2];
16298 }
16299 if (d9 > 0.0) {
16300 HEAPF32[i11 >> 2] = +HEAPF32[i5 + 4 >> 2];
16301 }
16302 i5 = HEAP32[i2 >> 2] | 0;
16303 if ((i5 & 4 | 0) == 0) {
16304 i13 = i5 & -3;
16305 HEAP32[i2 >> 2] = i13;
16306 d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3);
16307 i13 = i1 + 102996 | 0;
16308 HEAPF32[i13 >> 2] = d9;
16309 STACKTOP = i4;
16310 return;
16311 }
16312 i6 = HEAP32[i1 + 102952 >> 2] | 0;
16313 if ((i6 | 0) == 0) {
16314 i13 = i5 & -3;
16315 HEAP32[i2 >> 2] = i13;
16316 d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3);
16317 i13 = i1 + 102996 | 0;
16318 HEAPF32[i13 >> 2] = d9;
16319 STACKTOP = i4;
16320 return;
16321 }
16322 do {
16323 HEAPF32[i6 + 76 >> 2] = 0.0;
16324 HEAPF32[i6 + 80 >> 2] = 0.0;
16325 HEAPF32[i6 + 84 >> 2] = 0.0;
16326 i6 = HEAP32[i6 + 96 >> 2] | 0;
16327 } while ((i6 | 0) != 0);
16328 i13 = i5 & -3;
16329 HEAP32[i2 >> 2] = i13;
16330 d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3);
16331 i13 = i1 + 102996 | 0;
16332 HEAPF32[i13 >> 2] = d9;
16333 STACKTOP = i4;
16334 return;
16335}
16336function __ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i1, i5, i6, i3, i4) {
16337 i1 = i1 | 0;
16338 i5 = i5 | 0;
16339 i6 = i6 | 0;
16340 i3 = i3 | 0;
16341 i4 = i4 | 0;
16342 var i2 = 0, i7 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i12 = 0, i13 = 0, i14 = 0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0;
16343 i2 = STACKTOP;
16344 i7 = HEAP32[i5 + 148 >> 2] | 0;
16345 d17 = +HEAPF32[i4 + 12 >> 2];
16346 d19 = +HEAPF32[i3 + 12 >> 2];
16347 d18 = +HEAPF32[i4 + 8 >> 2];
16348 d16 = +HEAPF32[i3 + 16 >> 2];
16349 d15 = +HEAPF32[i6 + 12 >> 2];
16350 d10 = +HEAPF32[i5 + 12 >> 2];
16351 d8 = +HEAPF32[i6 + 8 >> 2];
16352 d9 = +HEAPF32[i5 + 16 >> 2];
16353 d11 = +HEAPF32[i4 >> 2] + (d17 * d19 - d18 * d16) - (+HEAPF32[i6 >> 2] + (d15 * d10 - d8 * d9));
16354 d9 = d19 * d18 + d17 * d16 + +HEAPF32[i4 + 4 >> 2] - (d10 * d8 + d15 * d9 + +HEAPF32[i6 + 4 >> 2]);
16355 d10 = d15 * d11 + d8 * d9;
16356 d8 = d15 * d9 - d11 * d8;
16357 if ((i7 | 0) > 0) {
16358 i14 = 0;
16359 i13 = 0;
16360 d9 = -3.4028234663852886e+38;
16361 while (1) {
16362 d11 = d10 * +HEAPF32[i5 + (i13 << 3) + 84 >> 2] + d8 * +HEAPF32[i5 + (i13 << 3) + 88 >> 2];
16363 i12 = d11 > d9;
16364 i14 = i12 ? i13 : i14;
16365 i13 = i13 + 1 | 0;
16366 if ((i13 | 0) == (i7 | 0)) {
16367 break;
16368 } else {
16369 d9 = i12 ? d11 : d9;
16370 }
16371 }
16372 } else {
16373 i14 = 0;
16374 }
16375 d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i14, i3, i4);
16376 i12 = ((i14 | 0) > 0 ? i14 : i7) + -1 | 0;
16377 d8 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i12, i3, i4);
16378 i13 = i14 + 1 | 0;
16379 i13 = (i13 | 0) < (i7 | 0) ? i13 : 0;
16380 d10 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4);
16381 if (d8 > d9 & d8 > d10) {
16382 while (1) {
16383 i13 = ((i12 | 0) > 0 ? i12 : i7) + -1 | 0;
16384 d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4);
16385 if (d9 > d8) {
16386 i12 = i13;
16387 d8 = d9;
16388 } else {
16389 break;
16390 }
16391 }
16392 HEAP32[i1 >> 2] = i12;
16393 STACKTOP = i2;
16394 return +d8;
16395 }
16396 if (d10 > d9) {
16397 i12 = i13;
16398 d8 = d10;
16399 } else {
16400 d19 = d9;
16401 HEAP32[i1 >> 2] = i14;
16402 STACKTOP = i2;
16403 return +d19;
16404 }
16405 while (1) {
16406 i13 = i12 + 1 | 0;
16407 i13 = (i13 | 0) < (i7 | 0) ? i13 : 0;
16408 d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4);
16409 if (d9 > d8) {
16410 i12 = i13;
16411 d8 = d9;
16412 } else {
16413 break;
16414 }
16415 }
16416 HEAP32[i1 >> 2] = i12;
16417 STACKTOP = i2;
16418 return +d8;
16419}
16420function __ZN9b2Fixture11SynchronizeEP12b2BroadPhaseRK11b2TransformS4_(i10, i8, i7, i2) {
16421 i10 = i10 | 0;
16422 i8 = i8 | 0;
16423 i7 = i7 | 0;
16424 i2 = i2 | 0;
16425 var i1 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i9 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0, i27 = 0;
16426 i9 = STACKTOP;
16427 STACKTOP = STACKTOP + 48 | 0;
16428 i5 = i9 + 24 | 0;
16429 i6 = i9 + 8 | 0;
16430 i3 = i9;
16431 i4 = i10 + 28 | 0;
16432 if ((HEAP32[i4 >> 2] | 0) <= 0) {
16433 STACKTOP = i9;
16434 return;
16435 }
16436 i1 = i10 + 24 | 0;
16437 i18 = i10 + 12 | 0;
16438 i19 = i5 + 4 | 0;
16439 i20 = i6 + 4 | 0;
16440 i13 = i5 + 8 | 0;
16441 i14 = i6 + 8 | 0;
16442 i15 = i5 + 12 | 0;
16443 i16 = i6 + 12 | 0;
16444 i11 = i2 + 4 | 0;
16445 i22 = i7 + 4 | 0;
16446 i12 = i3 + 4 | 0;
16447 i21 = 0;
16448 do {
16449 i10 = HEAP32[i1 >> 2] | 0;
16450 i27 = HEAP32[i18 >> 2] | 0;
16451 i17 = i10 + (i21 * 28 | 0) + 20 | 0;
16452 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i27 >> 2] | 0) + 24 >> 2] & 15](i27, i5, i7, HEAP32[i17 >> 2] | 0);
16453 i27 = HEAP32[i18 >> 2] | 0;
16454 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i27 >> 2] | 0) + 24 >> 2] & 15](i27, i6, i2, HEAP32[i17 >> 2] | 0);
16455 i17 = i10 + (i21 * 28 | 0) | 0;
16456 d25 = +HEAPF32[i5 >> 2];
16457 d26 = +HEAPF32[i6 >> 2];
16458 d24 = +HEAPF32[i19 >> 2];
16459 d23 = +HEAPF32[i20 >> 2];
16460 d25 = +(d25 < d26 ? d25 : d26);
16461 d26 = +(d24 < d23 ? d24 : d23);
16462 i27 = i17;
16463 HEAPF32[i27 >> 2] = d25;
16464 HEAPF32[i27 + 4 >> 2] = d26;
16465 d25 = +HEAPF32[i13 >> 2];
16466 d26 = +HEAPF32[i14 >> 2];
16467 d23 = +HEAPF32[i15 >> 2];
16468 d24 = +HEAPF32[i16 >> 2];
16469 d25 = +(d25 > d26 ? d25 : d26);
16470 d26 = +(d23 > d24 ? d23 : d24);
16471 i27 = i10 + (i21 * 28 | 0) + 8 | 0;
16472 HEAPF32[i27 >> 2] = d25;
16473 HEAPF32[i27 + 4 >> 2] = d26;
16474 d26 = +HEAPF32[i11 >> 2] - +HEAPF32[i22 >> 2];
16475 HEAPF32[i3 >> 2] = +HEAPF32[i2 >> 2] - +HEAPF32[i7 >> 2];
16476 HEAPF32[i12 >> 2] = d26;
16477 __ZN12b2BroadPhase9MoveProxyEiRK6b2AABBRK6b2Vec2(i8, HEAP32[i10 + (i21 * 28 | 0) + 24 >> 2] | 0, i17, i3);
16478 i21 = i21 + 1 | 0;
16479 } while ((i21 | 0) < (HEAP32[i4 >> 2] | 0));
16480 STACKTOP = i9;
16481 return;
16482}
16483function __ZN12b2EPCollider24ComputePolygonSeparationEv(i2, i9) {
16484 i2 = i2 | 0;
16485 i9 = i9 | 0;
16486 var i1 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = 0.0, d7 = 0.0, i8 = 0, d10 = 0.0, d11 = 0.0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, d16 = 0.0, d17 = 0.0, d18 = 0.0, d19 = 0.0, i20 = 0, d21 = 0.0, d22 = 0.0, d23 = 0.0, d24 = 0.0, d25 = 0.0, d26 = 0.0;
16487 i15 = STACKTOP;
16488 HEAP32[i2 >> 2] = 0;
16489 i3 = i2 + 4 | 0;
16490 HEAP32[i3 >> 2] = -1;
16491 i4 = i2 + 8 | 0;
16492 HEAPF32[i4 >> 2] = -3.4028234663852886e+38;
16493 d7 = +HEAPF32[i9 + 216 >> 2];
16494 d6 = +HEAPF32[i9 + 212 >> 2];
16495 i5 = HEAP32[i9 + 128 >> 2] | 0;
16496 if ((i5 | 0) <= 0) {
16497 STACKTOP = i15;
16498 return;
16499 }
16500 d17 = +HEAPF32[i9 + 164 >> 2];
16501 d18 = +HEAPF32[i9 + 168 >> 2];
16502 d11 = +HEAPF32[i9 + 172 >> 2];
16503 d10 = +HEAPF32[i9 + 176 >> 2];
16504 d16 = +HEAPF32[i9 + 244 >> 2];
16505 i12 = i9 + 228 | 0;
16506 i13 = i9 + 232 | 0;
16507 i14 = i9 + 236 | 0;
16508 i1 = i9 + 240 | 0;
16509 d19 = -3.4028234663852886e+38;
16510 i20 = 0;
16511 while (1) {
16512 d23 = +HEAPF32[i9 + (i20 << 3) + 64 >> 2];
16513 d21 = -d23;
16514 d22 = -+HEAPF32[i9 + (i20 << 3) + 68 >> 2];
16515 d26 = +HEAPF32[i9 + (i20 << 3) >> 2];
16516 d25 = +HEAPF32[i9 + (i20 << 3) + 4 >> 2];
16517 d24 = (d26 - d17) * d21 + (d25 - d18) * d22;
16518 d25 = (d26 - d11) * d21 + (d25 - d10) * d22;
16519 d24 = d24 < d25 ? d24 : d25;
16520 if (d24 > d16) {
16521 break;
16522 }
16523 if (!(d7 * d23 + d6 * d22 >= 0.0)) {
16524 if (!((d21 - +HEAPF32[i12 >> 2]) * d6 + (d22 - +HEAPF32[i13 >> 2]) * d7 < -.03490658849477768) & d24 > d19) {
16525 i8 = 8;
16526 }
16527 } else {
16528 if (!((d21 - +HEAPF32[i14 >> 2]) * d6 + (d22 - +HEAPF32[i1 >> 2]) * d7 < -.03490658849477768) & d24 > d19) {
16529 i8 = 8;
16530 }
16531 }
16532 if ((i8 | 0) == 8) {
16533 i8 = 0;
16534 HEAP32[i2 >> 2] = 2;
16535 HEAP32[i3 >> 2] = i20;
16536 HEAPF32[i4 >> 2] = d24;
16537 d19 = d24;
16538 }
16539 i20 = i20 + 1 | 0;
16540 if ((i20 | 0) >= (i5 | 0)) {
16541 i8 = 10;
16542 break;
16543 }
16544 }
16545 if ((i8 | 0) == 10) {
16546 STACKTOP = i15;
16547 return;
16548 }
16549 HEAP32[i2 >> 2] = 2;
16550 HEAP32[i3 >> 2] = i20;
16551 HEAPF32[i4 >> 2] = d24;
16552 STACKTOP = i15;
16553 return;
16554}
16555function __ZNK11b2EdgeShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi(i17, i1, i2, i18, i3) {
16556 i17 = i17 | 0;
16557 i1 = i1 | 0;
16558 i2 = i2 | 0;
16559 i18 = i18 | 0;
16560 i3 = i3 | 0;
16561 var d4 = 0.0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0;
16562 i3 = STACKTOP;
16563 d6 = +HEAPF32[i18 >> 2];
16564 d7 = +HEAPF32[i2 >> 2] - d6;
16565 d9 = +HEAPF32[i18 + 4 >> 2];
16566 d4 = +HEAPF32[i2 + 4 >> 2] - d9;
16567 d11 = +HEAPF32[i18 + 12 >> 2];
16568 d5 = +HEAPF32[i18 + 8 >> 2];
16569 d8 = d7 * d11 + d4 * d5;
16570 d7 = d11 * d4 - d7 * d5;
16571 d6 = +HEAPF32[i2 + 8 >> 2] - d6;
16572 d9 = +HEAPF32[i2 + 12 >> 2] - d9;
16573 d4 = d11 * d6 + d5 * d9 - d8;
16574 d6 = d11 * d9 - d5 * d6 - d7;
16575 i18 = i17 + 12 | 0;
16576 d5 = +HEAPF32[i18 >> 2];
16577 d9 = +HEAPF32[i18 + 4 >> 2];
16578 i18 = i17 + 20 | 0;
16579 d11 = +HEAPF32[i18 >> 2];
16580 d11 = d11 - d5;
16581 d12 = +HEAPF32[i18 + 4 >> 2] - d9;
16582 d15 = -d11;
16583 d10 = d11 * d11 + d12 * d12;
16584 d13 = +Math_sqrt(+d10);
16585 if (d13 < 1.1920928955078125e-7) {
16586 d13 = d12;
16587 } else {
16588 d16 = 1.0 / d13;
16589 d13 = d12 * d16;
16590 d15 = d16 * d15;
16591 }
16592 d14 = (d9 - d7) * d15 + (d5 - d8) * d13;
16593 d16 = d6 * d15 + d4 * d13;
16594 if (d16 == 0.0) {
16595 i18 = 0;
16596 STACKTOP = i3;
16597 return i18 | 0;
16598 }
16599 d16 = d14 / d16;
16600 if (d16 < 0.0) {
16601 i18 = 0;
16602 STACKTOP = i3;
16603 return i18 | 0;
16604 }
16605 if (+HEAPF32[i2 + 16 >> 2] < d16 | d10 == 0.0) {
16606 i18 = 0;
16607 STACKTOP = i3;
16608 return i18 | 0;
16609 }
16610 d12 = (d11 * (d8 + d4 * d16 - d5) + d12 * (d7 + d6 * d16 - d9)) / d10;
16611 if (d12 < 0.0 | d12 > 1.0) {
16612 i18 = 0;
16613 STACKTOP = i3;
16614 return i18 | 0;
16615 }
16616 HEAPF32[i1 + 8 >> 2] = d16;
16617 if (d14 > 0.0) {
16618 d14 = +-d13;
16619 d16 = +-d15;
16620 i18 = i1;
16621 HEAPF32[i18 >> 2] = d14;
16622 HEAPF32[i18 + 4 >> 2] = d16;
16623 i18 = 1;
16624 STACKTOP = i3;
16625 return i18 | 0;
16626 } else {
16627 d14 = +d13;
16628 d16 = +d15;
16629 i18 = i1;
16630 HEAPF32[i18 >> 2] = d14;
16631 HEAPF32[i18 + 4 >> 2] = d16;
16632 i18 = 1;
16633 STACKTOP = i3;
16634 return i18 | 0;
16635 }
16636 return 0;
16637}
16638function ___dynamic_cast(i7, i6, i11, i5) {
16639 i7 = i7 | 0;
16640 i6 = i6 | 0;
16641 i11 = i11 | 0;
16642 i5 = i5 | 0;
16643 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0;
16644 i1 = STACKTOP;
16645 STACKTOP = STACKTOP + 64 | 0;
16646 i2 = i1;
16647 i3 = HEAP32[i7 >> 2] | 0;
16648 i4 = i7 + (HEAP32[i3 + -8 >> 2] | 0) | 0;
16649 i3 = HEAP32[i3 + -4 >> 2] | 0;
16650 HEAP32[i2 >> 2] = i11;
16651 HEAP32[i2 + 4 >> 2] = i7;
16652 HEAP32[i2 + 8 >> 2] = i6;
16653 HEAP32[i2 + 12 >> 2] = i5;
16654 i9 = i2 + 16 | 0;
16655 i10 = i2 + 20 | 0;
16656 i6 = i2 + 24 | 0;
16657 i8 = i2 + 28 | 0;
16658 i5 = i2 + 32 | 0;
16659 i7 = i2 + 40 | 0;
16660 i12 = (i3 | 0) == (i11 | 0);
16661 i13 = i9 + 0 | 0;
16662 i11 = i13 + 36 | 0;
16663 do {
16664 HEAP32[i13 >> 2] = 0;
16665 i13 = i13 + 4 | 0;
16666 } while ((i13 | 0) < (i11 | 0));
16667 HEAP16[i9 + 36 >> 1] = 0;
16668 HEAP8[i9 + 38 | 0] = 0;
16669 if (i12) {
16670 HEAP32[i2 + 48 >> 2] = 1;
16671 FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i3 >> 2] | 0) + 20 >> 2] & 3](i3, i2, i4, i4, 1, 0);
16672 i13 = (HEAP32[i6 >> 2] | 0) == 1 ? i4 : 0;
16673 STACKTOP = i1;
16674 return i13 | 0;
16675 }
16676 FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[i3 >> 2] | 0) + 24 >> 2] & 3](i3, i2, i4, 1, 0);
16677 i2 = HEAP32[i2 + 36 >> 2] | 0;
16678 if ((i2 | 0) == 0) {
16679 if ((HEAP32[i7 >> 2] | 0) != 1) {
16680 i13 = 0;
16681 STACKTOP = i1;
16682 return i13 | 0;
16683 }
16684 if ((HEAP32[i8 >> 2] | 0) != 1) {
16685 i13 = 0;
16686 STACKTOP = i1;
16687 return i13 | 0;
16688 }
16689 i13 = (HEAP32[i5 >> 2] | 0) == 1 ? HEAP32[i10 >> 2] | 0 : 0;
16690 STACKTOP = i1;
16691 return i13 | 0;
16692 } else if ((i2 | 0) == 1) {
16693 if ((HEAP32[i6 >> 2] | 0) != 1) {
16694 if ((HEAP32[i7 >> 2] | 0) != 0) {
16695 i13 = 0;
16696 STACKTOP = i1;
16697 return i13 | 0;
16698 }
16699 if ((HEAP32[i8 >> 2] | 0) != 1) {
16700 i13 = 0;
16701 STACKTOP = i1;
16702 return i13 | 0;
16703 }
16704 if ((HEAP32[i5 >> 2] | 0) != 1) {
16705 i13 = 0;
16706 STACKTOP = i1;
16707 return i13 | 0;
16708 }
16709 }
16710 i13 = HEAP32[i9 >> 2] | 0;
16711 STACKTOP = i1;
16712 return i13 | 0;
16713 } else {
16714 i13 = 0;
16715 STACKTOP = i1;
16716 return i13 | 0;
16717 }
16718 return 0;
16719}
16720function __ZNK14b2PolygonShape11ComputeMassEP10b2MassDataf(i4, i1, d2) {
16721 i4 = i4 | 0;
16722 i1 = i1 | 0;
16723 d2 = +d2;
16724 var i3 = 0, i5 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i12 = 0, d13 = 0.0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, d18 = 0.0, i19 = 0, d20 = 0.0, d21 = 0.0, d22 = 0.0, d23 = 0.0;
16725 i3 = STACKTOP;
16726 i5 = HEAP32[i4 + 148 >> 2] | 0;
16727 if ((i5 | 0) > 2) {
16728 d7 = 0.0;
16729 d6 = 0.0;
16730 i12 = 0;
16731 } else {
16732 ___assert_fail(432, 328, 306, 456);
16733 }
16734 do {
16735 d6 = d6 + +HEAPF32[i4 + (i12 << 3) + 20 >> 2];
16736 d7 = d7 + +HEAPF32[i4 + (i12 << 3) + 24 >> 2];
16737 i12 = i12 + 1 | 0;
16738 } while ((i12 | 0) < (i5 | 0));
16739 d11 = 1.0 / +(i5 | 0);
16740 d6 = d6 * d11;
16741 d11 = d7 * d11;
16742 i16 = i4 + 20 | 0;
16743 i19 = i4 + 24 | 0;
16744 d9 = 0.0;
16745 d10 = 0.0;
16746 d7 = 0.0;
16747 d8 = 0.0;
16748 i17 = 0;
16749 do {
16750 d18 = +HEAPF32[i4 + (i17 << 3) + 20 >> 2] - d6;
16751 d13 = +HEAPF32[i4 + (i17 << 3) + 24 >> 2] - d11;
16752 i17 = i17 + 1 | 0;
16753 i12 = (i17 | 0) < (i5 | 0);
16754 if (i12) {
16755 i14 = i4 + (i17 << 3) + 20 | 0;
16756 i15 = i4 + (i17 << 3) + 24 | 0;
16757 } else {
16758 i14 = i16;
16759 i15 = i19;
16760 }
16761 d21 = +HEAPF32[i14 >> 2] - d6;
16762 d20 = +HEAPF32[i15 >> 2] - d11;
16763 d22 = d18 * d20 - d13 * d21;
16764 d23 = d22 * .5;
16765 d8 = d8 + d23;
16766 d23 = d23 * .3333333432674408;
16767 d9 = d9 + (d18 + d21) * d23;
16768 d10 = d10 + (d13 + d20) * d23;
16769 d7 = d7 + d22 * .0833333358168602 * (d21 * d21 + (d18 * d18 + d18 * d21) + (d20 * d20 + (d13 * d13 + d13 * d20)));
16770 } while (i12);
16771 d13 = d8 * d2;
16772 HEAPF32[i1 >> 2] = d13;
16773 if (d8 > 1.1920928955078125e-7) {
16774 d23 = 1.0 / d8;
16775 d22 = d9 * d23;
16776 d23 = d10 * d23;
16777 d20 = d6 + d22;
16778 d21 = d11 + d23;
16779 d11 = +d20;
16780 d18 = +d21;
16781 i19 = i1 + 4 | 0;
16782 HEAPF32[i19 >> 2] = d11;
16783 HEAPF32[i19 + 4 >> 2] = d18;
16784 HEAPF32[i1 + 12 >> 2] = d7 * d2 + d13 * (d20 * d20 + d21 * d21 - (d22 * d22 + d23 * d23));
16785 STACKTOP = i3;
16786 return;
16787 } else {
16788 ___assert_fail(472, 328, 352, 456);
16789 }
16790}
16791function __ZN16b2ContactManager7DestroyEP9b2Contact(i1, i2) {
16792 i1 = i1 | 0;
16793 i2 = i2 | 0;
16794 var i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0;
16795 i3 = STACKTOP;
16796 i5 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 8 >> 2] | 0;
16797 i4 = HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 8 >> 2] | 0;
16798 i6 = HEAP32[i1 + 72 >> 2] | 0;
16799 if ((i6 | 0) != 0 ? (HEAP32[i2 + 4 >> 2] & 2 | 0) != 0 : 0) {
16800 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i6 >> 2] | 0) + 12 >> 2] & 15](i6, i2);
16801 }
16802 i7 = i2 + 8 | 0;
16803 i8 = HEAP32[i7 >> 2] | 0;
16804 i6 = i2 + 12 | 0;
16805 if ((i8 | 0) != 0) {
16806 HEAP32[i8 + 12 >> 2] = HEAP32[i6 >> 2];
16807 }
16808 i8 = HEAP32[i6 >> 2] | 0;
16809 if ((i8 | 0) != 0) {
16810 HEAP32[i8 + 8 >> 2] = HEAP32[i7 >> 2];
16811 }
16812 i7 = i1 + 60 | 0;
16813 if ((HEAP32[i7 >> 2] | 0) == (i2 | 0)) {
16814 HEAP32[i7 >> 2] = HEAP32[i6 >> 2];
16815 }
16816 i7 = i2 + 24 | 0;
16817 i8 = HEAP32[i7 >> 2] | 0;
16818 i6 = i2 + 28 | 0;
16819 if ((i8 | 0) != 0) {
16820 HEAP32[i8 + 12 >> 2] = HEAP32[i6 >> 2];
16821 }
16822 i8 = HEAP32[i6 >> 2] | 0;
16823 if ((i8 | 0) != 0) {
16824 HEAP32[i8 + 8 >> 2] = HEAP32[i7 >> 2];
16825 }
16826 i5 = i5 + 112 | 0;
16827 if ((i2 + 16 | 0) == (HEAP32[i5 >> 2] | 0)) {
16828 HEAP32[i5 >> 2] = HEAP32[i6 >> 2];
16829 }
16830 i6 = i2 + 40 | 0;
16831 i7 = HEAP32[i6 >> 2] | 0;
16832 i5 = i2 + 44 | 0;
16833 if ((i7 | 0) != 0) {
16834 HEAP32[i7 + 12 >> 2] = HEAP32[i5 >> 2];
16835 }
16836 i7 = HEAP32[i5 >> 2] | 0;
16837 if ((i7 | 0) != 0) {
16838 HEAP32[i7 + 8 >> 2] = HEAP32[i6 >> 2];
16839 }
16840 i4 = i4 + 112 | 0;
16841 if ((i2 + 32 | 0) != (HEAP32[i4 >> 2] | 0)) {
16842 i8 = i1 + 76 | 0;
16843 i8 = HEAP32[i8 >> 2] | 0;
16844 __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i2, i8);
16845 i8 = i1 + 64 | 0;
16846 i7 = HEAP32[i8 >> 2] | 0;
16847 i7 = i7 + -1 | 0;
16848 HEAP32[i8 >> 2] = i7;
16849 STACKTOP = i3;
16850 return;
16851 }
16852 HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
16853 i8 = i1 + 76 | 0;
16854 i8 = HEAP32[i8 >> 2] | 0;
16855 __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i2, i8);
16856 i8 = i1 + 64 | 0;
16857 i7 = HEAP32[i8 >> 2] | 0;
16858 i7 = i7 + -1 | 0;
16859 HEAP32[i8 >> 2] = i7;
16860 STACKTOP = i3;
16861 return;
16862}
16863function __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib(i6, i3, i4, i8, i7) {
16864 i6 = i6 | 0;
16865 i3 = i3 | 0;
16866 i4 = i4 | 0;
16867 i8 = i8 | 0;
16868 i7 = i7 | 0;
16869 var i1 = 0, i2 = 0, i5 = 0, i9 = 0, i10 = 0;
16870 i1 = STACKTOP;
16871 if ((i6 | 0) == (HEAP32[i3 + 8 >> 2] | 0)) {
16872 if ((HEAP32[i3 + 4 >> 2] | 0) != (i4 | 0)) {
16873 STACKTOP = i1;
16874 return;
16875 }
16876 i2 = i3 + 28 | 0;
16877 if ((HEAP32[i2 >> 2] | 0) == 1) {
16878 STACKTOP = i1;
16879 return;
16880 }
16881 HEAP32[i2 >> 2] = i8;
16882 STACKTOP = i1;
16883 return;
16884 }
16885 if ((i6 | 0) != (HEAP32[i3 >> 2] | 0)) {
16886 i9 = HEAP32[i6 + 8 >> 2] | 0;
16887 FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[i9 >> 2] | 0) + 24 >> 2] & 3](i9, i3, i4, i8, i7);
16888 STACKTOP = i1;
16889 return;
16890 }
16891 if ((HEAP32[i3 + 16 >> 2] | 0) != (i4 | 0) ? (i5 = i3 + 20 | 0, (HEAP32[i5 >> 2] | 0) != (i4 | 0)) : 0) {
16892 HEAP32[i3 + 32 >> 2] = i8;
16893 i8 = i3 + 44 | 0;
16894 if ((HEAP32[i8 >> 2] | 0) == 4) {
16895 STACKTOP = i1;
16896 return;
16897 }
16898 i9 = i3 + 52 | 0;
16899 HEAP8[i9] = 0;
16900 i10 = i3 + 53 | 0;
16901 HEAP8[i10] = 0;
16902 i6 = HEAP32[i6 + 8 >> 2] | 0;
16903 FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i6 >> 2] | 0) + 20 >> 2] & 3](i6, i3, i4, i4, 1, i7);
16904 if ((HEAP8[i10] | 0) != 0) {
16905 if ((HEAP8[i9] | 0) == 0) {
16906 i6 = 1;
16907 i2 = 13;
16908 }
16909 } else {
16910 i6 = 0;
16911 i2 = 13;
16912 }
16913 do {
16914 if ((i2 | 0) == 13) {
16915 HEAP32[i5 >> 2] = i4;
16916 i10 = i3 + 40 | 0;
16917 HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + 1;
16918 if ((HEAP32[i3 + 36 >> 2] | 0) == 1 ? (HEAP32[i3 + 24 >> 2] | 0) == 2 : 0) {
16919 HEAP8[i3 + 54 | 0] = 1;
16920 if (i6) {
16921 break;
16922 }
16923 } else {
16924 i2 = 16;
16925 }
16926 if ((i2 | 0) == 16 ? i6 : 0) {
16927 break;
16928 }
16929 HEAP32[i8 >> 2] = 4;
16930 STACKTOP = i1;
16931 return;
16932 }
16933 } while (0);
16934 HEAP32[i8 >> 2] = 3;
16935 STACKTOP = i1;
16936 return;
16937 }
16938 if ((i8 | 0) != 1) {
16939 STACKTOP = i1;
16940 return;
16941 }
16942 HEAP32[i3 + 32 >> 2] = 1;
16943 STACKTOP = i1;
16944 return;
16945}
16946function __ZN16b2BlockAllocator8AllocateEi(i4, i2) {
16947 i4 = i4 | 0;
16948 i2 = i2 | 0;
16949 var i1 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0;
16950 i1 = STACKTOP;
16951 if ((i2 | 0) == 0) {
16952 i9 = 0;
16953 STACKTOP = i1;
16954 return i9 | 0;
16955 }
16956 if ((i2 | 0) <= 0) {
16957 ___assert_fail(1376, 1312, 104, 1392);
16958 }
16959 if ((i2 | 0) > 640) {
16960 i9 = __Z7b2Alloci(i2) | 0;
16961 STACKTOP = i1;
16962 return i9 | 0;
16963 }
16964 i9 = HEAP8[632 + i2 | 0] | 0;
16965 i5 = i9 & 255;
16966 if (!((i9 & 255) < 14)) {
16967 ___assert_fail(1408, 1312, 112, 1392);
16968 }
16969 i2 = i4 + (i5 << 2) + 12 | 0;
16970 i3 = HEAP32[i2 >> 2] | 0;
16971 if ((i3 | 0) != 0) {
16972 HEAP32[i2 >> 2] = HEAP32[i3 >> 2];
16973 i9 = i3;
16974 STACKTOP = i1;
16975 return i9 | 0;
16976 }
16977 i3 = i4 + 4 | 0;
16978 i6 = HEAP32[i3 >> 2] | 0;
16979 i7 = i4 + 8 | 0;
16980 if ((i6 | 0) == (HEAP32[i7 >> 2] | 0)) {
16981 i9 = HEAP32[i4 >> 2] | 0;
16982 i6 = i6 + 128 | 0;
16983 HEAP32[i7 >> 2] = i6;
16984 i6 = __Z7b2Alloci(i6 << 3) | 0;
16985 HEAP32[i4 >> 2] = i6;
16986 _memcpy(i6 | 0, i9 | 0, HEAP32[i3 >> 2] << 3 | 0) | 0;
16987 _memset((HEAP32[i4 >> 2] | 0) + (HEAP32[i3 >> 2] << 3) | 0, 0, 1024) | 0;
16988 __Z6b2FreePv(i9);
16989 i6 = HEAP32[i3 >> 2] | 0;
16990 }
16991 i9 = HEAP32[i4 >> 2] | 0;
16992 i7 = __Z7b2Alloci(16384) | 0;
16993 i4 = i9 + (i6 << 3) + 4 | 0;
16994 HEAP32[i4 >> 2] = i7;
16995 i5 = HEAP32[576 + (i5 << 2) >> 2] | 0;
16996 HEAP32[i9 + (i6 << 3) >> 2] = i5;
16997 i6 = 16384 / (i5 | 0) | 0;
16998 if ((Math_imul(i6, i5) | 0) >= 16385) {
16999 ___assert_fail(1448, 1312, 140, 1392);
17000 }
17001 i6 = i6 + -1 | 0;
17002 if ((i6 | 0) > 0) {
17003 i9 = 0;
17004 while (1) {
17005 i8 = i9 + 1 | 0;
17006 HEAP32[i7 + (Math_imul(i9, i5) | 0) >> 2] = i7 + (Math_imul(i8, i5) | 0);
17007 i7 = HEAP32[i4 >> 2] | 0;
17008 if ((i8 | 0) == (i6 | 0)) {
17009 break;
17010 } else {
17011 i9 = i8;
17012 }
17013 }
17014 }
17015 HEAP32[i7 + (Math_imul(i6, i5) | 0) >> 2] = 0;
17016 HEAP32[i2 >> 2] = HEAP32[HEAP32[i4 >> 2] >> 2];
17017 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1;
17018 i9 = HEAP32[i4 >> 2] | 0;
17019 STACKTOP = i1;
17020 return i9 | 0;
17021}
17022function __ZN9b2Contact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i4, i5, i1, i3, i6) {
17023 i4 = i4 | 0;
17024 i5 = i5 | 0;
17025 i1 = i1 | 0;
17026 i3 = i3 | 0;
17027 i6 = i6 | 0;
17028 var i2 = 0, i7 = 0, i8 = 0, i9 = 0;
17029 i2 = STACKTOP;
17030 if ((HEAP8[4200] | 0) == 0) {
17031 HEAP32[1002] = 3;
17032 HEAP32[4012 >> 2] = 3;
17033 HEAP8[4016 | 0] = 1;
17034 HEAP32[4104 >> 2] = 4;
17035 HEAP32[4108 >> 2] = 4;
17036 HEAP8[4112 | 0] = 1;
17037 HEAP32[4032 >> 2] = 4;
17038 HEAP32[4036 >> 2] = 4;
17039 HEAP8[4040 | 0] = 0;
17040 HEAP32[4128 >> 2] = 5;
17041 HEAP32[4132 >> 2] = 5;
17042 HEAP8[4136 | 0] = 1;
17043 HEAP32[4056 >> 2] = 6;
17044 HEAP32[4060 >> 2] = 6;
17045 HEAP8[4064 | 0] = 1;
17046 HEAP32[4020 >> 2] = 6;
17047 HEAP32[4024 >> 2] = 6;
17048 HEAP8[4028 | 0] = 0;
17049 HEAP32[4080 >> 2] = 7;
17050 HEAP32[4084 >> 2] = 7;
17051 HEAP8[4088 | 0] = 1;
17052 HEAP32[4116 >> 2] = 7;
17053 HEAP32[4120 >> 2] = 7;
17054 HEAP8[4124 | 0] = 0;
17055 HEAP32[4152 >> 2] = 8;
17056 HEAP32[4156 >> 2] = 8;
17057 HEAP8[4160 | 0] = 1;
17058 HEAP32[4044 >> 2] = 8;
17059 HEAP32[4048 >> 2] = 8;
17060 HEAP8[4052 | 0] = 0;
17061 HEAP32[4176 >> 2] = 9;
17062 HEAP32[4180 >> 2] = 9;
17063 HEAP8[4184 | 0] = 1;
17064 HEAP32[4140 >> 2] = 9;
17065 HEAP32[4144 >> 2] = 9;
17066 HEAP8[4148 | 0] = 0;
17067 HEAP8[4200] = 1;
17068 }
17069 i7 = HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 4 >> 2] | 0;
17070 i8 = HEAP32[(HEAP32[i1 + 12 >> 2] | 0) + 4 >> 2] | 0;
17071 if (!(i7 >>> 0 < 4)) {
17072 ___assert_fail(4208, 4256, 80, 4344);
17073 }
17074 if (!(i8 >>> 0 < 4)) {
17075 ___assert_fail(4296, 4256, 81, 4344);
17076 }
17077 i9 = HEAP32[4008 + (i7 * 48 | 0) + (i8 * 12 | 0) >> 2] | 0;
17078 if ((i9 | 0) == 0) {
17079 i9 = 0;
17080 STACKTOP = i2;
17081 return i9 | 0;
17082 }
17083 if ((HEAP8[4008 + (i7 * 48 | 0) + (i8 * 12 | 0) + 8 | 0] | 0) == 0) {
17084 i9 = FUNCTION_TABLE_iiiiii[i9 & 15](i1, i3, i4, i5, i6) | 0;
17085 STACKTOP = i2;
17086 return i9 | 0;
17087 } else {
17088 i9 = FUNCTION_TABLE_iiiiii[i9 & 15](i4, i5, i1, i3, i6) | 0;
17089 STACKTOP = i2;
17090 return i9 | 0;
17091 }
17092 return 0;
17093}
17094function __ZN13b2DynamicTree9MoveProxyEiRK6b2AABBRK6b2Vec2(i1, i2, i13, i9) {
17095 i1 = i1 | 0;
17096 i2 = i2 | 0;
17097 i13 = i13 | 0;
17098 i9 = i9 | 0;
17099 var i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d10 = 0.0, d11 = 0.0, i12 = 0;
17100 i4 = STACKTOP;
17101 if (!((i2 | 0) > -1)) {
17102 ___assert_fail(3072, 2944, 135, 3152);
17103 }
17104 if ((HEAP32[i1 + 12 >> 2] | 0) <= (i2 | 0)) {
17105 ___assert_fail(3072, 2944, 135, 3152);
17106 }
17107 i3 = i1 + 4 | 0;
17108 i12 = HEAP32[i3 >> 2] | 0;
17109 if (!((HEAP32[i12 + (i2 * 36 | 0) + 24 >> 2] | 0) == -1)) {
17110 ___assert_fail(3120, 2944, 137, 3152);
17111 }
17112 if (((+HEAPF32[i12 + (i2 * 36 | 0) >> 2] <= +HEAPF32[i13 >> 2] ? +HEAPF32[i12 + (i2 * 36 | 0) + 4 >> 2] <= +HEAPF32[i13 + 4 >> 2] : 0) ? +HEAPF32[i13 + 8 >> 2] <= +HEAPF32[i12 + (i2 * 36 | 0) + 8 >> 2] : 0) ? +HEAPF32[i13 + 12 >> 2] <= +HEAPF32[i12 + (i2 * 36 | 0) + 12 >> 2] : 0) {
17113 i13 = 0;
17114 STACKTOP = i4;
17115 return i13 | 0;
17116 }
17117 __ZN13b2DynamicTree10RemoveLeafEi(i1, i2);
17118 i12 = i13;
17119 d6 = +HEAPF32[i12 >> 2];
17120 d8 = +HEAPF32[i12 + 4 >> 2];
17121 i13 = i13 + 8 | 0;
17122 d10 = +HEAPF32[i13 >> 2];
17123 d6 = d6 + -.10000000149011612;
17124 d8 = d8 + -.10000000149011612;
17125 d10 = d10 + .10000000149011612;
17126 d5 = +HEAPF32[i13 + 4 >> 2] + .10000000149011612;
17127 d11 = +HEAPF32[i9 >> 2] * 2.0;
17128 d7 = +HEAPF32[i9 + 4 >> 2] * 2.0;
17129 if (d11 < 0.0) {
17130 d6 = d6 + d11;
17131 } else {
17132 d10 = d11 + d10;
17133 }
17134 if (d7 < 0.0) {
17135 d8 = d8 + d7;
17136 } else {
17137 d5 = d7 + d5;
17138 }
17139 i13 = HEAP32[i3 >> 2] | 0;
17140 d7 = +d6;
17141 d11 = +d8;
17142 i12 = i13 + (i2 * 36 | 0) | 0;
17143 HEAPF32[i12 >> 2] = d7;
17144 HEAPF32[i12 + 4 >> 2] = d11;
17145 d10 = +d10;
17146 d11 = +d5;
17147 i13 = i13 + (i2 * 36 | 0) + 8 | 0;
17148 HEAPF32[i13 >> 2] = d10;
17149 HEAPF32[i13 + 4 >> 2] = d11;
17150 __ZN13b2DynamicTree10InsertLeafEi(i1, i2);
17151 i13 = 1;
17152 STACKTOP = i4;
17153 return i13 | 0;
17154}
17155function __ZNK9b2Simplex16GetWitnessPointsEP6b2Vec2S1_(i1, i4, i5) {
17156 i1 = i1 | 0;
17157 i4 = i4 | 0;
17158 i5 = i5 | 0;
17159 var i2 = 0, i3 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i9 = 0, i10 = 0, d11 = 0.0;
17160 i2 = STACKTOP;
17161 i3 = HEAP32[i1 + 108 >> 2] | 0;
17162 if ((i3 | 0) == 2) {
17163 i9 = i1 + 24 | 0;
17164 d7 = +HEAPF32[i9 >> 2];
17165 i3 = i1 + 60 | 0;
17166 d8 = +HEAPF32[i3 >> 2];
17167 d6 = +(d7 * +HEAPF32[i1 >> 2] + d8 * +HEAPF32[i1 + 36 >> 2]);
17168 d8 = +(d7 * +HEAPF32[i1 + 4 >> 2] + d8 * +HEAPF32[i1 + 40 >> 2]);
17169 HEAPF32[i4 >> 2] = d6;
17170 HEAPF32[i4 + 4 >> 2] = d8;
17171 d8 = +HEAPF32[i9 >> 2];
17172 d6 = +HEAPF32[i3 >> 2];
17173 d7 = +(d8 * +HEAPF32[i1 + 8 >> 2] + d6 * +HEAPF32[i1 + 44 >> 2]);
17174 d6 = +(d8 * +HEAPF32[i1 + 12 >> 2] + d6 * +HEAPF32[i1 + 48 >> 2]);
17175 HEAPF32[i5 >> 2] = d7;
17176 HEAPF32[i5 + 4 >> 2] = d6;
17177 STACKTOP = i2;
17178 return;
17179 } else if ((i3 | 0) == 1) {
17180 i10 = i1;
17181 i9 = HEAP32[i10 + 4 >> 2] | 0;
17182 i3 = i4;
17183 HEAP32[i3 >> 2] = HEAP32[i10 >> 2];
17184 HEAP32[i3 + 4 >> 2] = i9;
17185 i3 = i1 + 8 | 0;
17186 i4 = HEAP32[i3 + 4 >> 2] | 0;
17187 i9 = i5;
17188 HEAP32[i9 >> 2] = HEAP32[i3 >> 2];
17189 HEAP32[i9 + 4 >> 2] = i4;
17190 STACKTOP = i2;
17191 return;
17192 } else if ((i3 | 0) == 0) {
17193 ___assert_fail(2712, 2672, 217, 2752);
17194 } else if ((i3 | 0) == 3) {
17195 d11 = +HEAPF32[i1 + 24 >> 2];
17196 d6 = +HEAPF32[i1 + 60 >> 2];
17197 d8 = +HEAPF32[i1 + 96 >> 2];
17198 d7 = +(d11 * +HEAPF32[i1 >> 2] + d6 * +HEAPF32[i1 + 36 >> 2] + d8 * +HEAPF32[i1 + 72 >> 2]);
17199 d8 = +(d11 * +HEAPF32[i1 + 4 >> 2] + d6 * +HEAPF32[i1 + 40 >> 2] + d8 * +HEAPF32[i1 + 76 >> 2]);
17200 i10 = i4;
17201 HEAPF32[i10 >> 2] = d7;
17202 HEAPF32[i10 + 4 >> 2] = d8;
17203 i10 = i5;
17204 HEAPF32[i10 >> 2] = d7;
17205 HEAPF32[i10 + 4 >> 2] = d8;
17206 STACKTOP = i2;
17207 return;
17208 } else {
17209 ___assert_fail(2712, 2672, 236, 2752);
17210 }
17211}
17212function __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i4, i3, i1) {
17213 i4 = i4 | 0;
17214 i3 = i3 | 0;
17215 i1 = i1 | 0;
17216 var i2 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0;
17217 i2 = STACKTOP;
17218 if (!((i1 | 0) > -1)) {
17219 ___assert_fail(6832, 6792, 89, 6872);
17220 }
17221 i5 = i4 + 16 | 0;
17222 if (((HEAP32[i5 >> 2] | 0) + -1 | 0) <= (i1 | 0)) {
17223 ___assert_fail(6832, 6792, 89, 6872);
17224 }
17225 HEAP32[i3 + 4 >> 2] = 1;
17226 HEAPF32[i3 + 8 >> 2] = +HEAPF32[i4 + 8 >> 2];
17227 i6 = i4 + 12 | 0;
17228 i7 = (HEAP32[i6 >> 2] | 0) + (i1 << 3) | 0;
17229 i8 = HEAP32[i7 + 4 >> 2] | 0;
17230 i9 = i3 + 12 | 0;
17231 HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
17232 HEAP32[i9 + 4 >> 2] = i8;
17233 i9 = (HEAP32[i6 >> 2] | 0) + (i1 + 1 << 3) | 0;
17234 i8 = HEAP32[i9 + 4 >> 2] | 0;
17235 i7 = i3 + 20 | 0;
17236 HEAP32[i7 >> 2] = HEAP32[i9 >> 2];
17237 HEAP32[i7 + 4 >> 2] = i8;
17238 i7 = i3 + 28 | 0;
17239 if ((i1 | 0) > 0) {
17240 i10 = (HEAP32[i6 >> 2] | 0) + (i1 + -1 << 3) | 0;
17241 i8 = HEAP32[i10 + 4 >> 2] | 0;
17242 i9 = i7;
17243 HEAP32[i9 >> 2] = HEAP32[i10 >> 2];
17244 HEAP32[i9 + 4 >> 2] = i8;
17245 HEAP8[i3 + 44 | 0] = 1;
17246 } else {
17247 i8 = i4 + 20 | 0;
17248 i9 = HEAP32[i8 + 4 >> 2] | 0;
17249 i10 = i7;
17250 HEAP32[i10 >> 2] = HEAP32[i8 >> 2];
17251 HEAP32[i10 + 4 >> 2] = i9;
17252 HEAP8[i3 + 44 | 0] = HEAP8[i4 + 36 | 0] | 0;
17253 }
17254 i7 = i3 + 36 | 0;
17255 if (((HEAP32[i5 >> 2] | 0) + -2 | 0) > (i1 | 0)) {
17256 i8 = (HEAP32[i6 >> 2] | 0) + (i1 + 2 << 3) | 0;
17257 i9 = HEAP32[i8 + 4 >> 2] | 0;
17258 i10 = i7;
17259 HEAP32[i10 >> 2] = HEAP32[i8 >> 2];
17260 HEAP32[i10 + 4 >> 2] = i9;
17261 HEAP8[i3 + 45 | 0] = 1;
17262 STACKTOP = i2;
17263 return;
17264 } else {
17265 i8 = i4 + 28 | 0;
17266 i9 = HEAP32[i8 + 4 >> 2] | 0;
17267 i10 = i7;
17268 HEAP32[i10 >> 2] = HEAP32[i8 >> 2];
17269 HEAP32[i10 + 4 >> 2] = i9;
17270 HEAP8[i3 + 45 | 0] = HEAP8[i4 + 37 | 0] | 0;
17271 STACKTOP = i2;
17272 return;
17273 }
17274}
17275function __ZN15b2DistanceProxy3SetEPK7b2Shapei(i3, i1, i5) {
17276 i3 = i3 | 0;
17277 i1 = i1 | 0;
17278 i5 = i5 | 0;
17279 var i2 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0;
17280 i2 = STACKTOP;
17281 i4 = HEAP32[i1 + 4 >> 2] | 0;
17282 if ((i4 | 0) == 1) {
17283 HEAP32[i3 + 16 >> 2] = i1 + 12;
17284 HEAP32[i3 + 20 >> 2] = 2;
17285 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
17286 STACKTOP = i2;
17287 return;
17288 } else if ((i4 | 0) == 3) {
17289 if (!((i5 | 0) > -1)) {
17290 ___assert_fail(2632, 2672, 53, 2704);
17291 }
17292 i4 = i1 + 16 | 0;
17293 if ((HEAP32[i4 >> 2] | 0) <= (i5 | 0)) {
17294 ___assert_fail(2632, 2672, 53, 2704);
17295 }
17296 i7 = i1 + 12 | 0;
17297 i9 = (HEAP32[i7 >> 2] | 0) + (i5 << 3) | 0;
17298 i8 = HEAP32[i9 + 4 >> 2] | 0;
17299 i6 = i3;
17300 HEAP32[i6 >> 2] = HEAP32[i9 >> 2];
17301 HEAP32[i6 + 4 >> 2] = i8;
17302 i6 = i5 + 1 | 0;
17303 i5 = i3 + 8 | 0;
17304 i7 = HEAP32[i7 >> 2] | 0;
17305 if ((i6 | 0) < (HEAP32[i4 >> 2] | 0)) {
17306 i7 = i7 + (i6 << 3) | 0;
17307 i8 = HEAP32[i7 + 4 >> 2] | 0;
17308 i9 = i5;
17309 HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
17310 HEAP32[i9 + 4 >> 2] = i8;
17311 } else {
17312 i8 = HEAP32[i7 + 4 >> 2] | 0;
17313 i9 = i5;
17314 HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
17315 HEAP32[i9 + 4 >> 2] = i8;
17316 }
17317 HEAP32[i3 + 16 >> 2] = i3;
17318 HEAP32[i3 + 20 >> 2] = 2;
17319 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
17320 STACKTOP = i2;
17321 return;
17322 } else if ((i4 | 0) == 2) {
17323 HEAP32[i3 + 16 >> 2] = i1 + 20;
17324 HEAP32[i3 + 20 >> 2] = HEAP32[i1 + 148 >> 2];
17325 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
17326 STACKTOP = i2;
17327 return;
17328 } else if ((i4 | 0) == 0) {
17329 HEAP32[i3 + 16 >> 2] = i1 + 12;
17330 HEAP32[i3 + 20 >> 2] = 1;
17331 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2];
17332 STACKTOP = i2;
17333 return;
17334 } else {
17335 ___assert_fail(2712, 2672, 81, 2704);
17336 }
17337}
17338function __ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i2, i7, i4, i5, i6) {
17339 i2 = i2 | 0;
17340 i7 = i7 | 0;
17341 i4 = i4 | 0;
17342 i5 = i5 | 0;
17343 i6 = i6 | 0;
17344 var d1 = 0.0, d3 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, i12 = 0, i13 = 0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, i18 = 0, i19 = 0, i20 = 0;
17345 i12 = STACKTOP;
17346 i13 = HEAP32[i5 + 148 >> 2] | 0;
17347 if (!((i4 | 0) > -1)) {
17348 ___assert_fail(5640, 5688, 32, 5752);
17349 }
17350 if ((HEAP32[i2 + 148 >> 2] | 0) <= (i4 | 0)) {
17351 ___assert_fail(5640, 5688, 32, 5752);
17352 }
17353 d11 = +HEAPF32[i7 + 12 >> 2];
17354 d9 = +HEAPF32[i2 + (i4 << 3) + 84 >> 2];
17355 d1 = +HEAPF32[i7 + 8 >> 2];
17356 d3 = +HEAPF32[i2 + (i4 << 3) + 88 >> 2];
17357 d8 = d11 * d9 - d1 * d3;
17358 d3 = d9 * d1 + d11 * d3;
17359 d9 = +HEAPF32[i6 + 12 >> 2];
17360 d10 = +HEAPF32[i6 + 8 >> 2];
17361 d16 = d9 * d8 + d10 * d3;
17362 d14 = d9 * d3 - d8 * d10;
17363 if ((i13 | 0) > 0) {
17364 i19 = 0;
17365 i20 = 0;
17366 d15 = 3.4028234663852886e+38;
17367 while (1) {
17368 d17 = d16 * +HEAPF32[i5 + (i19 << 3) + 20 >> 2] + d14 * +HEAPF32[i5 + (i19 << 3) + 24 >> 2];
17369 i18 = d17 < d15;
17370 i20 = i18 ? i19 : i20;
17371 i19 = i19 + 1 | 0;
17372 if ((i19 | 0) == (i13 | 0)) {
17373 break;
17374 } else {
17375 d15 = i18 ? d17 : d15;
17376 }
17377 }
17378 } else {
17379 i20 = 0;
17380 }
17381 d16 = +HEAPF32[i2 + (i4 << 3) + 20 >> 2];
17382 d17 = +HEAPF32[i2 + (i4 << 3) + 24 >> 2];
17383 d14 = +HEAPF32[i5 + (i20 << 3) + 20 >> 2];
17384 d15 = +HEAPF32[i5 + (i20 << 3) + 24 >> 2];
17385 STACKTOP = i12;
17386 return +(d8 * (+HEAPF32[i6 >> 2] + (d9 * d14 - d10 * d15) - (+HEAPF32[i7 >> 2] + (d11 * d16 - d1 * d17))) + d3 * (d14 * d10 + d9 * d15 + +HEAPF32[i6 + 4 >> 2] - (d16 * d1 + d11 * d17 + +HEAPF32[i7 + 4 >> 2])));
17387}
17388function __Z4iterv() {
17389 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, d7 = 0.0;
17390 i1 = STACKTOP;
17391 STACKTOP = STACKTOP + 48 | 0;
17392 i2 = i1;
17393 i3 = i1 + 32 | 0;
17394 i4 = HEAP32[16] | 0;
17395 if ((i4 | 0) >= (HEAP32[4] | 0)) {
17396 HEAP32[16] = i4 + 1;
17397 __Z7measurePl(i3, HEAP32[8] | 0);
17398 d7 = +HEAPF32[i3 + 4 >> 2];
17399 d6 = +(HEAP32[10] | 0) / 1.0e6 * 1.0e3;
17400 d5 = +(HEAP32[12] | 0) / 1.0e6 * 1.0e3;
17401 HEAPF64[tempDoublePtr >> 3] = +HEAPF32[i3 >> 2];
17402 HEAP32[i2 >> 2] = HEAP32[tempDoublePtr >> 2];
17403 HEAP32[i2 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
17404 i4 = i2 + 8 | 0;
17405 HEAPF64[tempDoublePtr >> 3] = d7;
17406 HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2];
17407 HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
17408 i4 = i2 + 16 | 0;
17409 HEAPF64[tempDoublePtr >> 3] = d6;
17410 HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2];
17411 HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
17412 i4 = i2 + 24 | 0;
17413 HEAPF64[tempDoublePtr >> 3] = d5;
17414 HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2];
17415 HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2];
17416 _printf(96, i2 | 0) | 0;
17417 _emscripten_run_script(152);
17418 if ((HEAP32[18] | 0) == 0) {
17419 STACKTOP = i1;
17420 return;
17421 }
17422 _emscripten_cancel_main_loop();
17423 STACKTOP = i1;
17424 return;
17425 }
17426 i3 = _clock() | 0;
17427 __ZN7b2World4StepEfii(HEAP32[6] | 0, .01666666753590107, 3, 3);
17428 i3 = (_clock() | 0) - i3 | 0;
17429 i2 = HEAP32[16] | 0;
17430 HEAP32[(HEAP32[8] | 0) + (i2 << 2) >> 2] = i3;
17431 if ((i3 | 0) < (HEAP32[10] | 0)) {
17432 HEAP32[10] = i3;
17433 }
17434 if ((i3 | 0) > (HEAP32[12] | 0)) {
17435 HEAP32[12] = i3;
17436 }
17437 HEAP32[16] = i2 + 1;
17438 STACKTOP = i1;
17439 return;
17440}
17441function __ZN13b2DynamicTree12AllocateNodeEv(i5) {
17442 i5 = i5 | 0;
17443 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0;
17444 i1 = STACKTOP;
17445 i2 = i5 + 16 | 0;
17446 i3 = HEAP32[i2 >> 2] | 0;
17447 if ((i3 | 0) == -1) {
17448 i4 = i5 + 8 | 0;
17449 i6 = HEAP32[i4 >> 2] | 0;
17450 i3 = i5 + 12 | 0;
17451 if ((i6 | 0) != (HEAP32[i3 >> 2] | 0)) {
17452 ___assert_fail(2912, 2944, 61, 2984);
17453 }
17454 i5 = i5 + 4 | 0;
17455 i7 = HEAP32[i5 >> 2] | 0;
17456 HEAP32[i3 >> 2] = i6 << 1;
17457 i6 = __Z7b2Alloci(i6 * 72 | 0) | 0;
17458 HEAP32[i5 >> 2] = i6;
17459 _memcpy(i6 | 0, i7 | 0, (HEAP32[i4 >> 2] | 0) * 36 | 0) | 0;
17460 __Z6b2FreePv(i7);
17461 i6 = HEAP32[i4 >> 2] | 0;
17462 i7 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
17463 i5 = HEAP32[i5 >> 2] | 0;
17464 if ((i6 | 0) < (i7 | 0)) {
17465 i7 = i6;
17466 while (1) {
17467 i6 = i7 + 1 | 0;
17468 HEAP32[i5 + (i7 * 36 | 0) + 20 >> 2] = i6;
17469 HEAP32[i5 + (i7 * 36 | 0) + 32 >> 2] = -1;
17470 i7 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
17471 if ((i6 | 0) < (i7 | 0)) {
17472 i7 = i6;
17473 } else {
17474 break;
17475 }
17476 }
17477 }
17478 HEAP32[i5 + (i7 * 36 | 0) + 20 >> 2] = -1;
17479 HEAP32[i5 + (((HEAP32[i3 >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1;
17480 i3 = HEAP32[i4 >> 2] | 0;
17481 HEAP32[i2 >> 2] = i3;
17482 } else {
17483 i4 = i5 + 8 | 0;
17484 i5 = HEAP32[i5 + 4 >> 2] | 0;
17485 }
17486 i7 = i5 + (i3 * 36 | 0) + 20 | 0;
17487 HEAP32[i2 >> 2] = HEAP32[i7 >> 2];
17488 HEAP32[i7 >> 2] = -1;
17489 HEAP32[i5 + (i3 * 36 | 0) + 24 >> 2] = -1;
17490 HEAP32[i5 + (i3 * 36 | 0) + 28 >> 2] = -1;
17491 HEAP32[i5 + (i3 * 36 | 0) + 32 >> 2] = 0;
17492 HEAP32[i5 + (i3 * 36 | 0) + 16 >> 2] = 0;
17493 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
17494 STACKTOP = i1;
17495 return i3 | 0;
17496}
17497function __ZN9b2Fixture6CreateEP16b2BlockAllocatorP6b2BodyPK12b2FixtureDef(i1, i5, i4, i3) {
17498 i1 = i1 | 0;
17499 i5 = i5 | 0;
17500 i4 = i4 | 0;
17501 i3 = i3 | 0;
17502 var i2 = 0, i6 = 0, i7 = 0, d8 = 0.0;
17503 i2 = STACKTOP;
17504 HEAP32[i1 + 40 >> 2] = HEAP32[i3 + 4 >> 2];
17505 HEAPF32[i1 + 16 >> 2] = +HEAPF32[i3 + 8 >> 2];
17506 HEAPF32[i1 + 20 >> 2] = +HEAPF32[i3 + 12 >> 2];
17507 HEAP32[i1 + 8 >> 2] = i4;
17508 HEAP32[i1 + 4 >> 2] = 0;
17509 i4 = i1 + 32 | 0;
17510 i6 = i3 + 22 | 0;
17511 HEAP16[i4 + 0 >> 1] = HEAP16[i6 + 0 >> 1] | 0;
17512 HEAP16[i4 + 2 >> 1] = HEAP16[i6 + 2 >> 1] | 0;
17513 HEAP16[i4 + 4 >> 1] = HEAP16[i6 + 4 >> 1] | 0;
17514 HEAP8[i1 + 38 | 0] = HEAP8[i3 + 20 | 0] | 0;
17515 i4 = HEAP32[i3 >> 2] | 0;
17516 i4 = FUNCTION_TABLE_iii[HEAP32[(HEAP32[i4 >> 2] | 0) + 8 >> 2] & 3](i4, i5) | 0;
17517 HEAP32[i1 + 12 >> 2] = i4;
17518 i4 = FUNCTION_TABLE_ii[HEAP32[(HEAP32[i4 >> 2] | 0) + 12 >> 2] & 3](i4) | 0;
17519 i6 = __ZN16b2BlockAllocator8AllocateEi(i5, i4 * 28 | 0) | 0;
17520 i5 = i1 + 24 | 0;
17521 HEAP32[i5 >> 2] = i6;
17522 if ((i4 | 0) > 0) {
17523 i7 = 0;
17524 } else {
17525 i7 = i1 + 28 | 0;
17526 HEAP32[i7 >> 2] = 0;
17527 i7 = i3 + 16 | 0;
17528 d8 = +HEAPF32[i7 >> 2];
17529 HEAPF32[i1 >> 2] = d8;
17530 STACKTOP = i2;
17531 return;
17532 }
17533 do {
17534 HEAP32[i6 + (i7 * 28 | 0) + 16 >> 2] = 0;
17535 i6 = HEAP32[i5 >> 2] | 0;
17536 HEAP32[i6 + (i7 * 28 | 0) + 24 >> 2] = -1;
17537 i7 = i7 + 1 | 0;
17538 } while ((i7 | 0) != (i4 | 0));
17539 i7 = i1 + 28 | 0;
17540 HEAP32[i7 >> 2] = 0;
17541 i7 = i3 + 16 | 0;
17542 d8 = +HEAPF32[i7 >> 2];
17543 HEAPF32[i1 >> 2] = d8;
17544 STACKTOP = i2;
17545 return;
17546}
17547function __Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i4, i1, i5, d9, i2) {
17548 i4 = i4 | 0;
17549 i1 = i1 | 0;
17550 i5 = i5 | 0;
17551 d9 = +d9;
17552 i2 = i2 | 0;
17553 var i3 = 0, i6 = 0, d7 = 0.0, i8 = 0, i10 = 0, d11 = 0.0, d12 = 0.0, i13 = 0;
17554 i3 = STACKTOP;
17555 d12 = +HEAPF32[i5 >> 2];
17556 d11 = +HEAPF32[i5 + 4 >> 2];
17557 i5 = i1 + 4 | 0;
17558 d7 = d12 * +HEAPF32[i1 >> 2] + d11 * +HEAPF32[i5 >> 2] - d9;
17559 i6 = i1 + 12 | 0;
17560 i8 = i1 + 16 | 0;
17561 d9 = d12 * +HEAPF32[i6 >> 2] + d11 * +HEAPF32[i8 >> 2] - d9;
17562 if (!(d7 <= 0.0)) {
17563 i10 = 0;
17564 } else {
17565 HEAP32[i4 + 0 >> 2] = HEAP32[i1 + 0 >> 2];
17566 HEAP32[i4 + 4 >> 2] = HEAP32[i1 + 4 >> 2];
17567 HEAP32[i4 + 8 >> 2] = HEAP32[i1 + 8 >> 2];
17568 i10 = 1;
17569 }
17570 if (d9 <= 0.0) {
17571 i13 = i10 + 1 | 0;
17572 i10 = i4 + (i10 * 12 | 0) | 0;
17573 HEAP32[i10 + 0 >> 2] = HEAP32[i6 + 0 >> 2];
17574 HEAP32[i10 + 4 >> 2] = HEAP32[i6 + 4 >> 2];
17575 HEAP32[i10 + 8 >> 2] = HEAP32[i6 + 8 >> 2];
17576 i10 = i13;
17577 }
17578 if (!(d7 * d9 < 0.0)) {
17579 i13 = i10;
17580 STACKTOP = i3;
17581 return i13 | 0;
17582 }
17583 d9 = d7 / (d7 - d9);
17584 d11 = +HEAPF32[i1 >> 2];
17585 d12 = +HEAPF32[i5 >> 2];
17586 d11 = +(d11 + d9 * (+HEAPF32[i6 >> 2] - d11));
17587 d12 = +(d12 + d9 * (+HEAPF32[i8 >> 2] - d12));
17588 i13 = i4 + (i10 * 12 | 0) | 0;
17589 HEAPF32[i13 >> 2] = d11;
17590 HEAPF32[i13 + 4 >> 2] = d12;
17591 i13 = i4 + (i10 * 12 | 0) + 8 | 0;
17592 HEAP8[i13] = i2;
17593 HEAP8[i13 + 1 | 0] = HEAP8[i1 + 9 | 0] | 0;
17594 HEAP8[i13 + 2 | 0] = 0;
17595 HEAP8[i13 + 3 | 0] = 1;
17596 i13 = i10 + 1 | 0;
17597 STACKTOP = i3;
17598 return i13 | 0;
17599}
17600function __Z16b2CollideCirclesP10b2ManifoldPK13b2CircleShapeRK11b2TransformS3_S6_(i1, i7, i8, i6, i9) {
17601 i1 = i1 | 0;
17602 i7 = i7 | 0;
17603 i8 = i8 | 0;
17604 i6 = i6 | 0;
17605 i9 = i9 | 0;
17606 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, d10 = 0.0, d11 = 0.0, d12 = 0.0, d13 = 0.0, d14 = 0.0, d15 = 0.0, d16 = 0.0, d17 = 0.0, d18 = 0.0;
17607 i2 = STACKTOP;
17608 i4 = i1 + 60 | 0;
17609 HEAP32[i4 >> 2] = 0;
17610 i3 = i7 + 12 | 0;
17611 d10 = +HEAPF32[i8 + 12 >> 2];
17612 d14 = +HEAPF32[i3 >> 2];
17613 d13 = +HEAPF32[i8 + 8 >> 2];
17614 d11 = +HEAPF32[i7 + 16 >> 2];
17615 i5 = i6 + 12 | 0;
17616 d16 = +HEAPF32[i9 + 12 >> 2];
17617 d18 = +HEAPF32[i5 >> 2];
17618 d17 = +HEAPF32[i9 + 8 >> 2];
17619 d15 = +HEAPF32[i6 + 16 >> 2];
17620 d12 = +HEAPF32[i9 >> 2] + (d16 * d18 - d17 * d15) - (+HEAPF32[i8 >> 2] + (d10 * d14 - d13 * d11));
17621 d11 = d18 * d17 + d16 * d15 + +HEAPF32[i9 + 4 >> 2] - (d14 * d13 + d10 * d11 + +HEAPF32[i8 + 4 >> 2]);
17622 d10 = +HEAPF32[i7 + 8 >> 2] + +HEAPF32[i6 + 8 >> 2];
17623 if (d12 * d12 + d11 * d11 > d10 * d10) {
17624 STACKTOP = i2;
17625 return;
17626 }
17627 HEAP32[i1 + 56 >> 2] = 0;
17628 i9 = i3;
17629 i8 = HEAP32[i9 + 4 >> 2] | 0;
17630 i7 = i1 + 48 | 0;
17631 HEAP32[i7 >> 2] = HEAP32[i9 >> 2];
17632 HEAP32[i7 + 4 >> 2] = i8;
17633 HEAPF32[i1 + 40 >> 2] = 0.0;
17634 HEAPF32[i1 + 44 >> 2] = 0.0;
17635 HEAP32[i4 >> 2] = 1;
17636 i7 = i5;
17637 i8 = HEAP32[i7 + 4 >> 2] | 0;
17638 i9 = i1;
17639 HEAP32[i9 >> 2] = HEAP32[i7 >> 2];
17640 HEAP32[i9 + 4 >> 2] = i8;
17641 HEAP32[i1 + 16 >> 2] = 0;
17642 STACKTOP = i2;
17643 return;
17644}
17645function __ZNK14b2PolygonShape11ComputeAABBEP6b2AABBRK11b2Transformi(i1, i2, i7, i3) {
17646 i1 = i1 | 0;
17647 i2 = i2 | 0;
17648 i7 = i7 | 0;
17649 i3 = i3 | 0;
17650 var d4 = 0.0, d5 = 0.0, d6 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0, d11 = 0.0, d12 = 0.0, i13 = 0, d14 = 0.0, d15 = 0.0, d16 = 0.0;
17651 i3 = STACKTOP;
17652 d4 = +HEAPF32[i7 + 12 >> 2];
17653 d15 = +HEAPF32[i1 + 20 >> 2];
17654 d5 = +HEAPF32[i7 + 8 >> 2];
17655 d12 = +HEAPF32[i1 + 24 >> 2];
17656 d6 = +HEAPF32[i7 >> 2];
17657 d9 = d6 + (d4 * d15 - d5 * d12);
17658 d8 = +HEAPF32[i7 + 4 >> 2];
17659 d12 = d15 * d5 + d4 * d12 + d8;
17660 i7 = HEAP32[i1 + 148 >> 2] | 0;
17661 if ((i7 | 0) > 1) {
17662 d10 = d9;
17663 d11 = d12;
17664 i13 = 1;
17665 do {
17666 d16 = +HEAPF32[i1 + (i13 << 3) + 20 >> 2];
17667 d14 = +HEAPF32[i1 + (i13 << 3) + 24 >> 2];
17668 d15 = d6 + (d4 * d16 - d5 * d14);
17669 d14 = d16 * d5 + d4 * d14 + d8;
17670 d10 = d10 < d15 ? d10 : d15;
17671 d11 = d11 < d14 ? d11 : d14;
17672 d9 = d9 > d15 ? d9 : d15;
17673 d12 = d12 > d14 ? d12 : d14;
17674 i13 = i13 + 1 | 0;
17675 } while ((i13 | 0) < (i7 | 0));
17676 } else {
17677 d11 = d12;
17678 d10 = d9;
17679 }
17680 d16 = +HEAPF32[i1 + 8 >> 2];
17681 d14 = +(d10 - d16);
17682 d15 = +(d11 - d16);
17683 i13 = i2;
17684 HEAPF32[i13 >> 2] = d14;
17685 HEAPF32[i13 + 4 >> 2] = d15;
17686 d15 = +(d9 + d16);
17687 d16 = +(d12 + d16);
17688 i13 = i2 + 8 | 0;
17689 HEAPF32[i13 >> 2] = d15;
17690 HEAPF32[i13 + 4 >> 2] = d16;
17691 STACKTOP = i3;
17692 return;
17693}
17694function __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib(i5, i1, i4, i6, i3, i7) {
17695 i5 = i5 | 0;
17696 i1 = i1 | 0;
17697 i4 = i4 | 0;
17698 i6 = i6 | 0;
17699 i3 = i3 | 0;
17700 i7 = i7 | 0;
17701 var i2 = 0;
17702 i2 = STACKTOP;
17703 if ((i5 | 0) != (HEAP32[i1 + 8 >> 2] | 0)) {
17704 i5 = HEAP32[i5 + 8 >> 2] | 0;
17705 FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i5 >> 2] | 0) + 20 >> 2] & 3](i5, i1, i4, i6, i3, i7);
17706 STACKTOP = i2;
17707 return;
17708 }
17709 HEAP8[i1 + 53 | 0] = 1;
17710 if ((HEAP32[i1 + 4 >> 2] | 0) != (i6 | 0)) {
17711 STACKTOP = i2;
17712 return;
17713 }
17714 HEAP8[i1 + 52 | 0] = 1;
17715 i5 = i1 + 16 | 0;
17716 i6 = HEAP32[i5 >> 2] | 0;
17717 if ((i6 | 0) == 0) {
17718 HEAP32[i5 >> 2] = i4;
17719 HEAP32[i1 + 24 >> 2] = i3;
17720 HEAP32[i1 + 36 >> 2] = 1;
17721 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i3 | 0) == 1)) {
17722 STACKTOP = i2;
17723 return;
17724 }
17725 HEAP8[i1 + 54 | 0] = 1;
17726 STACKTOP = i2;
17727 return;
17728 }
17729 if ((i6 | 0) != (i4 | 0)) {
17730 i7 = i1 + 36 | 0;
17731 HEAP32[i7 >> 2] = (HEAP32[i7 >> 2] | 0) + 1;
17732 HEAP8[i1 + 54 | 0] = 1;
17733 STACKTOP = i2;
17734 return;
17735 }
17736 i4 = i1 + 24 | 0;
17737 i5 = HEAP32[i4 >> 2] | 0;
17738 if ((i5 | 0) == 2) {
17739 HEAP32[i4 >> 2] = i3;
17740 } else {
17741 i3 = i5;
17742 }
17743 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i3 | 0) == 1)) {
17744 STACKTOP = i2;
17745 return;
17746 }
17747 HEAP8[i1 + 54 | 0] = 1;
17748 STACKTOP = i2;
17749 return;
17750}
17751function __ZN6b2Body13CreateFixtureEPK12b2FixtureDef(i1, i5) {
17752 i1 = i1 | 0;
17753 i5 = i5 | 0;
17754 var i2 = 0, i3 = 0, i4 = 0, i6 = 0;
17755 i3 = STACKTOP;
17756 i2 = i1 + 88 | 0;
17757 i4 = HEAP32[i2 >> 2] | 0;
17758 if ((HEAP32[i4 + 102868 >> 2] & 2 | 0) != 0) {
17759 ___assert_fail(1776, 1520, 153, 1808);
17760 }
17761 i6 = __ZN16b2BlockAllocator8AllocateEi(i4, 44) | 0;
17762 if ((i6 | 0) == 0) {
17763 i6 = 0;
17764 } else {
17765 __ZN9b2FixtureC2Ev(i6);
17766 }
17767 __ZN9b2Fixture6CreateEP16b2BlockAllocatorP6b2BodyPK12b2FixtureDef(i6, i4, i1, i5);
17768 if (!((HEAP16[i1 + 4 >> 1] & 32) == 0)) {
17769 __ZN9b2Fixture13CreateProxiesEP12b2BroadPhaseRK11b2Transform(i6, (HEAP32[i2 >> 2] | 0) + 102872 | 0, i1 + 12 | 0);
17770 }
17771 i5 = i1 + 100 | 0;
17772 HEAP32[i6 + 4 >> 2] = HEAP32[i5 >> 2];
17773 HEAP32[i5 >> 2] = i6;
17774 i5 = i1 + 104 | 0;
17775 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
17776 HEAP32[i6 + 8 >> 2] = i1;
17777 if (!(+HEAPF32[i6 >> 2] > 0.0)) {
17778 i5 = HEAP32[i2 >> 2] | 0;
17779 i5 = i5 + 102868 | 0;
17780 i4 = HEAP32[i5 >> 2] | 0;
17781 i4 = i4 | 1;
17782 HEAP32[i5 >> 2] = i4;
17783 STACKTOP = i3;
17784 return i6 | 0;
17785 }
17786 __ZN6b2Body13ResetMassDataEv(i1);
17787 i5 = HEAP32[i2 >> 2] | 0;
17788 i5 = i5 + 102868 | 0;
17789 i4 = HEAP32[i5 >> 2] | 0;
17790 i4 = i4 | 1;
17791 HEAP32[i5 >> 2] = i4;
17792 STACKTOP = i3;
17793 return i6 | 0;
17794}
17795function __Z13b2TestOverlapPK7b2ShapeiS1_iRK11b2TransformS4_(i6, i5, i4, i3, i2, i1) {
17796 i6 = i6 | 0;
17797 i5 = i5 | 0;
17798 i4 = i4 | 0;
17799 i3 = i3 | 0;
17800 i2 = i2 | 0;
17801 i1 = i1 | 0;
17802 var i7 = 0, i8 = 0, i9 = 0, i10 = 0;
17803 i8 = STACKTOP;
17804 STACKTOP = STACKTOP + 128 | 0;
17805 i9 = i8 + 36 | 0;
17806 i10 = i8 + 24 | 0;
17807 i7 = i8;
17808 HEAP32[i9 + 16 >> 2] = 0;
17809 HEAP32[i9 + 20 >> 2] = 0;
17810 HEAPF32[i9 + 24 >> 2] = 0.0;
17811 HEAP32[i9 + 44 >> 2] = 0;
17812 HEAP32[i9 + 48 >> 2] = 0;
17813 HEAPF32[i9 + 52 >> 2] = 0.0;
17814 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i9, i6, i5);
17815 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i9 + 28 | 0, i4, i3);
17816 i6 = i9 + 56 | 0;
17817 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2];
17818 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2];
17819 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2];
17820 HEAP32[i6 + 12 >> 2] = HEAP32[i2 + 12 >> 2];
17821 i6 = i9 + 72 | 0;
17822 HEAP32[i6 + 0 >> 2] = HEAP32[i1 + 0 >> 2];
17823 HEAP32[i6 + 4 >> 2] = HEAP32[i1 + 4 >> 2];
17824 HEAP32[i6 + 8 >> 2] = HEAP32[i1 + 8 >> 2];
17825 HEAP32[i6 + 12 >> 2] = HEAP32[i1 + 12 >> 2];
17826 HEAP8[i9 + 88 | 0] = 1;
17827 HEAP16[i10 + 4 >> 1] = 0;
17828 __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i7, i10, i9);
17829 STACKTOP = i8;
17830 return +HEAPF32[i7 + 16 >> 2] < 11920928955078125.0e-22 | 0;
17831}
17832function __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib(i6, i1, i4, i5, i2, i3) {
17833 i6 = i6 | 0;
17834 i1 = i1 | 0;
17835 i4 = i4 | 0;
17836 i5 = i5 | 0;
17837 i2 = i2 | 0;
17838 i3 = i3 | 0;
17839 i3 = STACKTOP;
17840 if ((HEAP32[i1 + 8 >> 2] | 0) != (i6 | 0)) {
17841 STACKTOP = i3;
17842 return;
17843 }
17844 HEAP8[i1 + 53 | 0] = 1;
17845 if ((HEAP32[i1 + 4 >> 2] | 0) != (i5 | 0)) {
17846 STACKTOP = i3;
17847 return;
17848 }
17849 HEAP8[i1 + 52 | 0] = 1;
17850 i5 = i1 + 16 | 0;
17851 i6 = HEAP32[i5 >> 2] | 0;
17852 if ((i6 | 0) == 0) {
17853 HEAP32[i5 >> 2] = i4;
17854 HEAP32[i1 + 24 >> 2] = i2;
17855 HEAP32[i1 + 36 >> 2] = 1;
17856 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i2 | 0) == 1)) {
17857 STACKTOP = i3;
17858 return;
17859 }
17860 HEAP8[i1 + 54 | 0] = 1;
17861 STACKTOP = i3;
17862 return;
17863 }
17864 if ((i6 | 0) != (i4 | 0)) {
17865 i6 = i1 + 36 | 0;
17866 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
17867 HEAP8[i1 + 54 | 0] = 1;
17868 STACKTOP = i3;
17869 return;
17870 }
17871 i4 = i1 + 24 | 0;
17872 i5 = HEAP32[i4 >> 2] | 0;
17873 if ((i5 | 0) == 2) {
17874 HEAP32[i4 >> 2] = i2;
17875 } else {
17876 i2 = i5;
17877 }
17878 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i2 | 0) == 1)) {
17879 STACKTOP = i3;
17880 return;
17881 }
17882 HEAP8[i1 + 54 | 0] = 1;
17883 STACKTOP = i3;
17884 return;
17885}
17886function __ZNK11b2EdgeShape5CloneEP16b2BlockAllocator(i1, i3) {
17887 i1 = i1 | 0;
17888 i3 = i3 | 0;
17889 var i2 = 0, i4 = 0, i5 = 0, i6 = 0;
17890 i2 = STACKTOP;
17891 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 48) | 0;
17892 if ((i3 | 0) == 0) {
17893 i3 = 0;
17894 } else {
17895 HEAP32[i3 >> 2] = 240;
17896 HEAP32[i3 + 4 >> 2] = 1;
17897 HEAPF32[i3 + 8 >> 2] = .009999999776482582;
17898 i4 = i3 + 28 | 0;
17899 HEAP32[i4 + 0 >> 2] = 0;
17900 HEAP32[i4 + 4 >> 2] = 0;
17901 HEAP32[i4 + 8 >> 2] = 0;
17902 HEAP32[i4 + 12 >> 2] = 0;
17903 HEAP16[i4 + 16 >> 1] = 0;
17904 }
17905 i6 = i1 + 4 | 0;
17906 i5 = HEAP32[i6 + 4 >> 2] | 0;
17907 i4 = i3 + 4 | 0;
17908 HEAP32[i4 >> 2] = HEAP32[i6 >> 2];
17909 HEAP32[i4 + 4 >> 2] = i5;
17910 i4 = i3 + 12 | 0;
17911 i1 = i1 + 12 | 0;
17912 HEAP32[i4 + 0 >> 2] = HEAP32[i1 + 0 >> 2];
17913 HEAP32[i4 + 4 >> 2] = HEAP32[i1 + 4 >> 2];
17914 HEAP32[i4 + 8 >> 2] = HEAP32[i1 + 8 >> 2];
17915 HEAP32[i4 + 12 >> 2] = HEAP32[i1 + 12 >> 2];
17916 HEAP32[i4 + 16 >> 2] = HEAP32[i1 + 16 >> 2];
17917 HEAP32[i4 + 20 >> 2] = HEAP32[i1 + 20 >> 2];
17918 HEAP32[i4 + 24 >> 2] = HEAP32[i1 + 24 >> 2];
17919 HEAP32[i4 + 28 >> 2] = HEAP32[i1 + 28 >> 2];
17920 HEAP16[i4 + 32 >> 1] = HEAP16[i1 + 32 >> 1] | 0;
17921 STACKTOP = i2;
17922 return i3 | 0;
17923}
17924function __ZN7b2WorldC2ERK6b2Vec2(i1, i2) {
17925 i1 = i1 | 0;
17926 i2 = i2 | 0;
17927 var i3 = 0, i4 = 0, i5 = 0, i6 = 0;
17928 i3 = STACKTOP;
17929 __ZN16b2BlockAllocatorC2Ev(i1);
17930 __ZN16b2StackAllocatorC2Ev(i1 + 68 | 0);
17931 __ZN16b2ContactManagerC2Ev(i1 + 102872 | 0);
17932 i6 = i1 + 102968 | 0;
17933 HEAP32[i1 + 102980 >> 2] = 0;
17934 HEAP32[i1 + 102984 >> 2] = 0;
17935 i4 = i1 + 102952 | 0;
17936 i5 = i1 + 102992 | 0;
17937 HEAP32[i4 + 0 >> 2] = 0;
17938 HEAP32[i4 + 4 >> 2] = 0;
17939 HEAP32[i4 + 8 >> 2] = 0;
17940 HEAP32[i4 + 12 >> 2] = 0;
17941 HEAP8[i5] = 1;
17942 HEAP8[i1 + 102993 | 0] = 1;
17943 HEAP8[i1 + 102994 | 0] = 0;
17944 HEAP8[i1 + 102995 | 0] = 1;
17945 HEAP8[i1 + 102976 | 0] = 1;
17946 i5 = i2;
17947 i4 = HEAP32[i5 + 4 >> 2] | 0;
17948 i2 = i6;
17949 HEAP32[i2 >> 2] = HEAP32[i5 >> 2];
17950 HEAP32[i2 + 4 >> 2] = i4;
17951 HEAP32[i1 + 102868 >> 2] = 4;
17952 HEAPF32[i1 + 102988 >> 2] = 0.0;
17953 HEAP32[i1 + 102948 >> 2] = i1;
17954 i2 = i1 + 102996 | 0;
17955 HEAP32[i2 + 0 >> 2] = 0;
17956 HEAP32[i2 + 4 >> 2] = 0;
17957 HEAP32[i2 + 8 >> 2] = 0;
17958 HEAP32[i2 + 12 >> 2] = 0;
17959 HEAP32[i2 + 16 >> 2] = 0;
17960 HEAP32[i2 + 20 >> 2] = 0;
17961 HEAP32[i2 + 24 >> 2] = 0;
17962 HEAP32[i2 + 28 >> 2] = 0;
17963 STACKTOP = i3;
17964 return;
17965}
17966function __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib(i6, i3, i4, i1, i2) {
17967 i6 = i6 | 0;
17968 i3 = i3 | 0;
17969 i4 = i4 | 0;
17970 i1 = i1 | 0;
17971 i2 = i2 | 0;
17972 var i5 = 0;
17973 i2 = STACKTOP;
17974 if ((HEAP32[i3 + 8 >> 2] | 0) == (i6 | 0)) {
17975 if ((HEAP32[i3 + 4 >> 2] | 0) != (i4 | 0)) {
17976 STACKTOP = i2;
17977 return;
17978 }
17979 i3 = i3 + 28 | 0;
17980 if ((HEAP32[i3 >> 2] | 0) == 1) {
17981 STACKTOP = i2;
17982 return;
17983 }
17984 HEAP32[i3 >> 2] = i1;
17985 STACKTOP = i2;
17986 return;
17987 }
17988 if ((HEAP32[i3 >> 2] | 0) != (i6 | 0)) {
17989 STACKTOP = i2;
17990 return;
17991 }
17992 if ((HEAP32[i3 + 16 >> 2] | 0) != (i4 | 0) ? (i5 = i3 + 20 | 0, (HEAP32[i5 >> 2] | 0) != (i4 | 0)) : 0) {
17993 HEAP32[i3 + 32 >> 2] = i1;
17994 HEAP32[i5 >> 2] = i4;
17995 i6 = i3 + 40 | 0;
17996 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
17997 if ((HEAP32[i3 + 36 >> 2] | 0) == 1 ? (HEAP32[i3 + 24 >> 2] | 0) == 2 : 0) {
17998 HEAP8[i3 + 54 | 0] = 1;
17999 }
18000 HEAP32[i3 + 44 >> 2] = 4;
18001 STACKTOP = i2;
18002 return;
18003 }
18004 if ((i1 | 0) != 1) {
18005 STACKTOP = i2;
18006 return;
18007 }
18008 HEAP32[i3 + 32 >> 2] = 1;
18009 STACKTOP = i2;
18010 return;
18011}
18012function __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i1, i2) {
18013 i1 = i1 | 0;
18014 i2 = i2 | 0;
18015 var i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0;
18016 i3 = STACKTOP;
18017 if ((HEAP8[4200] | 0) == 0) {
18018 ___assert_fail(4352, 4256, 103, 4376);
18019 }
18020 i4 = HEAP32[i1 + 48 >> 2] | 0;
18021 if ((HEAP32[i1 + 124 >> 2] | 0) > 0) {
18022 i7 = HEAP32[i4 + 8 >> 2] | 0;
18023 i6 = i7 + 4 | 0;
18024 i5 = HEAPU16[i6 >> 1] | 0;
18025 if ((i5 & 2 | 0) == 0) {
18026 HEAP16[i6 >> 1] = i5 | 2;
18027 HEAPF32[i7 + 144 >> 2] = 0.0;
18028 }
18029 i7 = HEAP32[i1 + 52 >> 2] | 0;
18030 i6 = HEAP32[i7 + 8 >> 2] | 0;
18031 i5 = i6 + 4 | 0;
18032 i8 = HEAPU16[i5 >> 1] | 0;
18033 if ((i8 & 2 | 0) == 0) {
18034 HEAP16[i5 >> 1] = i8 | 2;
18035 HEAPF32[i6 + 144 >> 2] = 0.0;
18036 }
18037 } else {
18038 i7 = HEAP32[i1 + 52 >> 2] | 0;
18039 }
18040 i4 = HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 4 >> 2] | 0;
18041 i5 = HEAP32[(HEAP32[i7 + 12 >> 2] | 0) + 4 >> 2] | 0;
18042 if ((i4 | 0) > -1 & (i5 | 0) < 4) {
18043 FUNCTION_TABLE_vii[HEAP32[4008 + (i4 * 48 | 0) + (i5 * 12 | 0) + 4 >> 2] & 15](i1, i2);
18044 STACKTOP = i3;
18045 return;
18046 } else {
18047 ___assert_fail(4384, 4256, 114, 4376);
18048 }
18049}
18050function __ZN9b2Fixture13CreateProxiesEP12b2BroadPhaseRK11b2Transform(i5, i4, i1) {
18051 i5 = i5 | 0;
18052 i4 = i4 | 0;
18053 i1 = i1 | 0;
18054 var i2 = 0, i3 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0;
18055 i2 = STACKTOP;
18056 i3 = i5 + 28 | 0;
18057 if ((HEAP32[i3 >> 2] | 0) != 0) {
18058 ___assert_fail(2088, 2112, 124, 2144);
18059 }
18060 i6 = i5 + 12 | 0;
18061 i8 = HEAP32[i6 >> 2] | 0;
18062 i8 = FUNCTION_TABLE_ii[HEAP32[(HEAP32[i8 >> 2] | 0) + 12 >> 2] & 3](i8) | 0;
18063 HEAP32[i3 >> 2] = i8;
18064 if ((i8 | 0) <= 0) {
18065 STACKTOP = i2;
18066 return;
18067 }
18068 i7 = i5 + 24 | 0;
18069 i8 = 0;
18070 do {
18071 i9 = HEAP32[i7 >> 2] | 0;
18072 i10 = i9 + (i8 * 28 | 0) | 0;
18073 i11 = HEAP32[i6 >> 2] | 0;
18074 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i11 >> 2] | 0) + 24 >> 2] & 15](i11, i10, i1, i8);
18075 HEAP32[i9 + (i8 * 28 | 0) + 24 >> 2] = __ZN12b2BroadPhase11CreateProxyERK6b2AABBPv(i4, i10, i10) | 0;
18076 HEAP32[i9 + (i8 * 28 | 0) + 16 >> 2] = i5;
18077 HEAP32[i9 + (i8 * 28 | 0) + 20 >> 2] = i8;
18078 i8 = i8 + 1 | 0;
18079 } while ((i8 | 0) < (HEAP32[i3 >> 2] | 0));
18080 STACKTOP = i2;
18081 return;
18082}
18083function __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv(i1, i5, i4) {
18084 i1 = i1 | 0;
18085 i5 = i5 | 0;
18086 i4 = i4 | 0;
18087 var i2 = 0, i3 = 0, i6 = 0, i7 = 0;
18088 i2 = STACKTOP;
18089 STACKTOP = STACKTOP + 64 | 0;
18090 i3 = i2;
18091 if ((i1 | 0) == (i5 | 0)) {
18092 i7 = 1;
18093 STACKTOP = i2;
18094 return i7 | 0;
18095 }
18096 if ((i5 | 0) == 0) {
18097 i7 = 0;
18098 STACKTOP = i2;
18099 return i7 | 0;
18100 }
18101 i5 = ___dynamic_cast(i5, 6952, 7008, 0) | 0;
18102 if ((i5 | 0) == 0) {
18103 i7 = 0;
18104 STACKTOP = i2;
18105 return i7 | 0;
18106 }
18107 i7 = i3 + 0 | 0;
18108 i6 = i7 + 56 | 0;
18109 do {
18110 HEAP32[i7 >> 2] = 0;
18111 i7 = i7 + 4 | 0;
18112 } while ((i7 | 0) < (i6 | 0));
18113 HEAP32[i3 >> 2] = i5;
18114 HEAP32[i3 + 8 >> 2] = i1;
18115 HEAP32[i3 + 12 >> 2] = -1;
18116 HEAP32[i3 + 48 >> 2] = 1;
18117 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i5 >> 2] | 0) + 28 >> 2] & 15](i5, i3, HEAP32[i4 >> 2] | 0, 1);
18118 if ((HEAP32[i3 + 24 >> 2] | 0) != 1) {
18119 i7 = 0;
18120 STACKTOP = i2;
18121 return i7 | 0;
18122 }
18123 HEAP32[i4 >> 2] = HEAP32[i3 + 16 >> 2];
18124 i7 = 1;
18125 STACKTOP = i2;
18126 return i7 | 0;
18127}
18128function __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i1, i4, i3, i2, i5, i6) {
18129 i1 = i1 | 0;
18130 i4 = i4 | 0;
18131 i3 = i3 | 0;
18132 i2 = i2 | 0;
18133 i5 = i5 | 0;
18134 i6 = i6 | 0;
18135 var i7 = 0, i8 = 0;
18136 i7 = STACKTOP;
18137 i8 = i1 + 40 | 0;
18138 HEAP32[i8 >> 2] = i4;
18139 HEAP32[i1 + 44 >> 2] = i3;
18140 HEAP32[i1 + 48 >> 2] = i2;
18141 HEAP32[i1 + 28 >> 2] = 0;
18142 HEAP32[i1 + 36 >> 2] = 0;
18143 HEAP32[i1 + 32 >> 2] = 0;
18144 HEAP32[i1 >> 2] = i5;
18145 HEAP32[i1 + 4 >> 2] = i6;
18146 HEAP32[i1 + 8 >> 2] = __ZN16b2StackAllocator8AllocateEi(i5, i4 << 2) | 0;
18147 HEAP32[i1 + 12 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, i3 << 2) | 0;
18148 HEAP32[i1 + 16 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, i2 << 2) | 0;
18149 HEAP32[i1 + 24 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, (HEAP32[i8 >> 2] | 0) * 12 | 0) | 0;
18150 HEAP32[i1 + 20 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, (HEAP32[i8 >> 2] | 0) * 12 | 0) | 0;
18151 STACKTOP = i7;
18152 return;
18153}
18154function __ZNK11b2EdgeShape11ComputeAABBEP6b2AABBRK11b2Transformi(i8, i1, i10, i2) {
18155 i8 = i8 | 0;
18156 i1 = i1 | 0;
18157 i10 = i10 | 0;
18158 i2 = i2 | 0;
18159 var d3 = 0.0, d4 = 0.0, d5 = 0.0, d6 = 0.0, d7 = 0.0, d9 = 0.0, d11 = 0.0, d12 = 0.0;
18160 i2 = STACKTOP;
18161 d7 = +HEAPF32[i10 + 12 >> 2];
18162 d9 = +HEAPF32[i8 + 12 >> 2];
18163 d11 = +HEAPF32[i10 + 8 >> 2];
18164 d3 = +HEAPF32[i8 + 16 >> 2];
18165 d6 = +HEAPF32[i10 >> 2];
18166 d5 = d6 + (d7 * d9 - d11 * d3);
18167 d12 = +HEAPF32[i10 + 4 >> 2];
18168 d3 = d9 * d11 + d7 * d3 + d12;
18169 d9 = +HEAPF32[i8 + 20 >> 2];
18170 d4 = +HEAPF32[i8 + 24 >> 2];
18171 d6 = d6 + (d7 * d9 - d11 * d4);
18172 d4 = d12 + (d11 * d9 + d7 * d4);
18173 d7 = +HEAPF32[i8 + 8 >> 2];
18174 d9 = +((d5 < d6 ? d5 : d6) - d7);
18175 d12 = +((d3 < d4 ? d3 : d4) - d7);
18176 i10 = i1;
18177 HEAPF32[i10 >> 2] = d9;
18178 HEAPF32[i10 + 4 >> 2] = d12;
18179 d5 = +(d7 + (d5 > d6 ? d5 : d6));
18180 d12 = +(d7 + (d3 > d4 ? d3 : d4));
18181 i10 = i1 + 8 | 0;
18182 HEAPF32[i10 >> 2] = d5;
18183 HEAPF32[i10 + 4 >> 2] = d12;
18184 STACKTOP = i2;
18185 return;
18186}
18187function __ZNK14b2PolygonShape9TestPointERK11b2TransformRK6b2Vec2(i2, i3, i6) {
18188 i2 = i2 | 0;
18189 i3 = i3 | 0;
18190 i6 = i6 | 0;
18191 var i1 = 0, d4 = 0.0, d5 = 0.0, i7 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0;
18192 i1 = STACKTOP;
18193 d8 = +HEAPF32[i6 >> 2] - +HEAPF32[i3 >> 2];
18194 d9 = +HEAPF32[i6 + 4 >> 2] - +HEAPF32[i3 + 4 >> 2];
18195 d10 = +HEAPF32[i3 + 12 >> 2];
18196 d5 = +HEAPF32[i3 + 8 >> 2];
18197 d4 = d8 * d10 + d9 * d5;
18198 d5 = d10 * d9 - d8 * d5;
18199 i3 = HEAP32[i2 + 148 >> 2] | 0;
18200 if ((i3 | 0) > 0) {
18201 i6 = 0;
18202 } else {
18203 i7 = 1;
18204 STACKTOP = i1;
18205 return i7 | 0;
18206 }
18207 while (1) {
18208 i7 = i6 + 1 | 0;
18209 if ((d4 - +HEAPF32[i2 + (i6 << 3) + 20 >> 2]) * +HEAPF32[i2 + (i6 << 3) + 84 >> 2] + (d5 - +HEAPF32[i2 + (i6 << 3) + 24 >> 2]) * +HEAPF32[i2 + (i6 << 3) + 88 >> 2] > 0.0) {
18210 i3 = 0;
18211 i2 = 4;
18212 break;
18213 }
18214 if ((i7 | 0) < (i3 | 0)) {
18215 i6 = i7;
18216 } else {
18217 i3 = 1;
18218 i2 = 4;
18219 break;
18220 }
18221 }
18222 if ((i2 | 0) == 4) {
18223 STACKTOP = i1;
18224 return i3 | 0;
18225 }
18226 return 0;
18227}
18228function __ZN16b2StackAllocator8AllocateEi(i4, i5) {
18229 i4 = i4 | 0;
18230 i5 = i5 | 0;
18231 var i1 = 0, i2 = 0, i3 = 0, i6 = 0, i7 = 0, i8 = 0;
18232 i2 = STACKTOP;
18233 i3 = i4 + 102796 | 0;
18234 i6 = HEAP32[i3 >> 2] | 0;
18235 if ((i6 | 0) >= 32) {
18236 ___assert_fail(3896, 3808, 38, 3936);
18237 }
18238 i1 = i4 + (i6 * 12 | 0) + 102412 | 0;
18239 HEAP32[i4 + (i6 * 12 | 0) + 102416 >> 2] = i5;
18240 i7 = i4 + 102400 | 0;
18241 i8 = HEAP32[i7 >> 2] | 0;
18242 if ((i8 + i5 | 0) > 102400) {
18243 HEAP32[i1 >> 2] = __Z7b2Alloci(i5) | 0;
18244 HEAP8[i4 + (i6 * 12 | 0) + 102420 | 0] = 1;
18245 } else {
18246 HEAP32[i1 >> 2] = i4 + i8;
18247 HEAP8[i4 + (i6 * 12 | 0) + 102420 | 0] = 0;
18248 HEAP32[i7 >> 2] = (HEAP32[i7 >> 2] | 0) + i5;
18249 }
18250 i6 = i4 + 102404 | 0;
18251 i5 = (HEAP32[i6 >> 2] | 0) + i5 | 0;
18252 HEAP32[i6 >> 2] = i5;
18253 i4 = i4 + 102408 | 0;
18254 i6 = HEAP32[i4 >> 2] | 0;
18255 HEAP32[i4 >> 2] = (i6 | 0) > (i5 | 0) ? i6 : i5;
18256 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1;
18257 STACKTOP = i2;
18258 return HEAP32[i1 >> 2] | 0;
18259}
18260function __ZN12b2BroadPhase13QueryCallbackEi(i5, i1) {
18261 i5 = i5 | 0;
18262 i1 = i1 | 0;
18263 var i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0;
18264 i2 = STACKTOP;
18265 i4 = i5 + 56 | 0;
18266 i7 = HEAP32[i4 >> 2] | 0;
18267 if ((i7 | 0) == (i1 | 0)) {
18268 STACKTOP = i2;
18269 return 1;
18270 }
18271 i3 = i5 + 52 | 0;
18272 i6 = HEAP32[i3 >> 2] | 0;
18273 i8 = i5 + 48 | 0;
18274 i5 = i5 + 44 | 0;
18275 if ((i6 | 0) == (HEAP32[i8 >> 2] | 0)) {
18276 i7 = HEAP32[i5 >> 2] | 0;
18277 HEAP32[i8 >> 2] = i6 << 1;
18278 i6 = __Z7b2Alloci(i6 * 24 | 0) | 0;
18279 HEAP32[i5 >> 2] = i6;
18280 _memcpy(i6 | 0, i7 | 0, (HEAP32[i3 >> 2] | 0) * 12 | 0) | 0;
18281 __Z6b2FreePv(i7);
18282 i7 = HEAP32[i4 >> 2] | 0;
18283 i6 = HEAP32[i3 >> 2] | 0;
18284 }
18285 i5 = HEAP32[i5 >> 2] | 0;
18286 HEAP32[i5 + (i6 * 12 | 0) >> 2] = (i7 | 0) > (i1 | 0) ? i1 : i7;
18287 i4 = HEAP32[i4 >> 2] | 0;
18288 HEAP32[i5 + ((HEAP32[i3 >> 2] | 0) * 12 | 0) + 4 >> 2] = (i4 | 0) < (i1 | 0) ? i1 : i4;
18289 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1;
18290 STACKTOP = i2;
18291 return 1;
18292}
18293function __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi(i5, i4, i3, i1) {
18294 i5 = i5 | 0;
18295 i4 = i4 | 0;
18296 i3 = i3 | 0;
18297 i1 = i1 | 0;
18298 var i2 = 0, i6 = 0;
18299 i2 = STACKTOP;
18300 if ((i5 | 0) != (HEAP32[i4 + 8 >> 2] | 0)) {
18301 i6 = HEAP32[i5 + 8 >> 2] | 0;
18302 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i6 >> 2] | 0) + 28 >> 2] & 15](i6, i4, i3, i1);
18303 STACKTOP = i2;
18304 return;
18305 }
18306 i5 = i4 + 16 | 0;
18307 i6 = HEAP32[i5 >> 2] | 0;
18308 if ((i6 | 0) == 0) {
18309 HEAP32[i5 >> 2] = i3;
18310 HEAP32[i4 + 24 >> 2] = i1;
18311 HEAP32[i4 + 36 >> 2] = 1;
18312 STACKTOP = i2;
18313 return;
18314 }
18315 if ((i6 | 0) != (i3 | 0)) {
18316 i6 = i4 + 36 | 0;
18317 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
18318 HEAP32[i4 + 24 >> 2] = 2;
18319 HEAP8[i4 + 54 | 0] = 1;
18320 STACKTOP = i2;
18321 return;
18322 }
18323 i3 = i4 + 24 | 0;
18324 if ((HEAP32[i3 >> 2] | 0) != 2) {
18325 STACKTOP = i2;
18326 return;
18327 }
18328 HEAP32[i3 >> 2] = i1;
18329 STACKTOP = i2;
18330 return;
18331}
18332function __ZN6b2Body19SynchronizeFixturesEv(i5) {
18333 i5 = i5 | 0;
18334 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0;
18335 i1 = STACKTOP;
18336 STACKTOP = STACKTOP + 16 | 0;
18337 i3 = i1;
18338 d8 = +HEAPF32[i5 + 52 >> 2];
18339 d9 = +Math_sin(+d8);
18340 HEAPF32[i3 + 8 >> 2] = d9;
18341 d8 = +Math_cos(+d8);
18342 HEAPF32[i3 + 12 >> 2] = d8;
18343 d10 = +HEAPF32[i5 + 28 >> 2];
18344 d6 = +HEAPF32[i5 + 32 >> 2];
18345 d7 = +(+HEAPF32[i5 + 36 >> 2] - (d8 * d10 - d9 * d6));
18346 d6 = +(+HEAPF32[i5 + 40 >> 2] - (d10 * d9 + d8 * d6));
18347 i2 = i3;
18348 HEAPF32[i2 >> 2] = d7;
18349 HEAPF32[i2 + 4 >> 2] = d6;
18350 i2 = (HEAP32[i5 + 88 >> 2] | 0) + 102872 | 0;
18351 i4 = HEAP32[i5 + 100 >> 2] | 0;
18352 if ((i4 | 0) == 0) {
18353 STACKTOP = i1;
18354 return;
18355 }
18356 i5 = i5 + 12 | 0;
18357 do {
18358 __ZN9b2Fixture11SynchronizeEP12b2BroadPhaseRK11b2TransformS4_(i4, i2, i3, i5);
18359 i4 = HEAP32[i4 + 4 >> 2] | 0;
18360 } while ((i4 | 0) != 0);
18361 STACKTOP = i1;
18362 return;
18363}
18364function __ZN13b2DynamicTreeC2Ev(i1) {
18365 i1 = i1 | 0;
18366 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0;
18367 i4 = STACKTOP;
18368 HEAP32[i1 >> 2] = -1;
18369 i3 = i1 + 12 | 0;
18370 HEAP32[i3 >> 2] = 16;
18371 HEAP32[i1 + 8 >> 2] = 0;
18372 i6 = __Z7b2Alloci(576) | 0;
18373 i2 = i1 + 4 | 0;
18374 HEAP32[i2 >> 2] = i6;
18375 _memset(i6 | 0, 0, (HEAP32[i3 >> 2] | 0) * 36 | 0) | 0;
18376 i6 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
18377 i2 = HEAP32[i2 >> 2] | 0;
18378 if ((i6 | 0) > 0) {
18379 i6 = 0;
18380 while (1) {
18381 i5 = i6 + 1 | 0;
18382 HEAP32[i2 + (i6 * 36 | 0) + 20 >> 2] = i5;
18383 HEAP32[i2 + (i6 * 36 | 0) + 32 >> 2] = -1;
18384 i6 = (HEAP32[i3 >> 2] | 0) + -1 | 0;
18385 if ((i5 | 0) < (i6 | 0)) {
18386 i6 = i5;
18387 } else {
18388 break;
18389 }
18390 }
18391 }
18392 HEAP32[i2 + (i6 * 36 | 0) + 20 >> 2] = -1;
18393 HEAP32[i2 + (((HEAP32[i3 >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1;
18394 HEAP32[i1 + 16 >> 2] = 0;
18395 HEAP32[i1 + 20 >> 2] = 0;
18396 HEAP32[i1 + 24 >> 2] = 0;
18397 STACKTOP = i4;
18398 return;
18399}
18400function __Z7measurePl(i1, i9) {
18401 i1 = i1 | 0;
18402 i9 = i9 | 0;
18403 var i2 = 0, i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, i7 = 0, d8 = 0.0, i10 = 0, d11 = 0.0;
18404 i2 = STACKTOP;
18405 i3 = HEAP32[4] | 0;
18406 i4 = STACKTOP;
18407 STACKTOP = STACKTOP + ((4 * i3 | 0) + 15 & -16) | 0;
18408 i7 = (i3 | 0) > 0;
18409 if (i7) {
18410 i10 = 0;
18411 d6 = 0.0;
18412 do {
18413 d8 = +(HEAP32[i9 + (i10 << 2) >> 2] | 0) / 1.0e6 * 1.0e3;
18414 HEAPF32[i4 + (i10 << 2) >> 2] = d8;
18415 d6 = d6 + d8;
18416 i10 = i10 + 1 | 0;
18417 } while ((i10 | 0) < (i3 | 0));
18418 d5 = +(i3 | 0);
18419 d6 = d6 / d5;
18420 HEAPF32[i1 >> 2] = d6;
18421 if (i7) {
18422 i7 = 0;
18423 d8 = 0.0;
18424 do {
18425 d11 = +HEAPF32[i4 + (i7 << 2) >> 2] - d6;
18426 d8 = d8 + d11 * d11;
18427 i7 = i7 + 1 | 0;
18428 } while ((i7 | 0) < (i3 | 0));
18429 } else {
18430 d8 = 0.0;
18431 }
18432 } else {
18433 d5 = +(i3 | 0);
18434 HEAPF32[i1 >> 2] = 0.0 / d5;
18435 d8 = 0.0;
18436 }
18437 HEAPF32[i1 + 4 >> 2] = +Math_sqrt(+(d8 / d5));
18438 STACKTOP = i2;
18439 return;
18440}
18441function __ZN13b2DynamicTree11CreateProxyERK6b2AABBPv(i1, i3, i2) {
18442 i1 = i1 | 0;
18443 i3 = i3 | 0;
18444 i2 = i2 | 0;
18445 var i4 = 0, i5 = 0, i6 = 0, d7 = 0.0, d8 = 0.0, i9 = 0;
18446 i5 = STACKTOP;
18447 i4 = __ZN13b2DynamicTree12AllocateNodeEv(i1) | 0;
18448 i6 = i1 + 4 | 0;
18449 d7 = +(+HEAPF32[i3 >> 2] + -.10000000149011612);
18450 d8 = +(+HEAPF32[i3 + 4 >> 2] + -.10000000149011612);
18451 i9 = (HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) | 0;
18452 HEAPF32[i9 >> 2] = d7;
18453 HEAPF32[i9 + 4 >> 2] = d8;
18454 d8 = +(+HEAPF32[i3 + 8 >> 2] + .10000000149011612);
18455 d7 = +(+HEAPF32[i3 + 12 >> 2] + .10000000149011612);
18456 i3 = (HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 8 | 0;
18457 HEAPF32[i3 >> 2] = d8;
18458 HEAPF32[i3 + 4 >> 2] = d7;
18459 HEAP32[(HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 16 >> 2] = i2;
18460 HEAP32[(HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 32 >> 2] = 0;
18461 __ZN13b2DynamicTree10InsertLeafEi(i1, i4);
18462 STACKTOP = i5;
18463 return i4 | 0;
18464}
18465function __ZN16b2BlockAllocatorC2Ev(i3) {
18466 i3 = i3 | 0;
18467 var i1 = 0, i2 = 0, i4 = 0, i5 = 0;
18468 i2 = STACKTOP;
18469 i4 = i3 + 8 | 0;
18470 HEAP32[i4 >> 2] = 128;
18471 HEAP32[i3 + 4 >> 2] = 0;
18472 i5 = __Z7b2Alloci(1024) | 0;
18473 HEAP32[i3 >> 2] = i5;
18474 _memset(i5 | 0, 0, HEAP32[i4 >> 2] << 3 | 0) | 0;
18475 i4 = i3 + 12 | 0;
18476 i3 = i4 + 56 | 0;
18477 do {
18478 HEAP32[i4 >> 2] = 0;
18479 i4 = i4 + 4 | 0;
18480 } while ((i4 | 0) < (i3 | 0));
18481 if ((HEAP8[1280] | 0) == 0) {
18482 i3 = 1;
18483 i4 = 0;
18484 } else {
18485 STACKTOP = i2;
18486 return;
18487 }
18488 do {
18489 if ((i4 | 0) >= 14) {
18490 i1 = 3;
18491 break;
18492 }
18493 if ((i3 | 0) > (HEAP32[576 + (i4 << 2) >> 2] | 0)) {
18494 i4 = i4 + 1 | 0;
18495 HEAP8[632 + i3 | 0] = i4;
18496 } else {
18497 HEAP8[632 + i3 | 0] = i4;
18498 }
18499 i3 = i3 + 1 | 0;
18500 } while ((i3 | 0) < 641);
18501 if ((i1 | 0) == 3) {
18502 ___assert_fail(1288, 1312, 73, 1352);
18503 }
18504 HEAP8[1280] = 1;
18505 STACKTOP = i2;
18506 return;
18507}
18508function __ZN24b2ChainAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
18509 i2 = i2 | 0;
18510 i4 = i4 | 0;
18511 i3 = i3 | 0;
18512 i1 = i1 | 0;
18513 var i5 = 0, i6 = 0, i7 = 0, i8 = 0;
18514 i5 = STACKTOP;
18515 STACKTOP = STACKTOP + 48 | 0;
18516 i6 = i5;
18517 i7 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0;
18518 HEAP32[i6 >> 2] = 240;
18519 HEAP32[i6 + 4 >> 2] = 1;
18520 HEAPF32[i6 + 8 >> 2] = .009999999776482582;
18521 i8 = i6 + 28 | 0;
18522 HEAP32[i8 + 0 >> 2] = 0;
18523 HEAP32[i8 + 4 >> 2] = 0;
18524 HEAP32[i8 + 8 >> 2] = 0;
18525 HEAP32[i8 + 12 >> 2] = 0;
18526 HEAP16[i8 + 16 >> 1] = 0;
18527 __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i7, i6, HEAP32[i2 + 56 >> 2] | 0);
18528 __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS6_(i4, i6, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
18529 STACKTOP = i5;
18530 return;
18531}
18532function __ZN23b2ChainAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
18533 i2 = i2 | 0;
18534 i4 = i4 | 0;
18535 i3 = i3 | 0;
18536 i1 = i1 | 0;
18537 var i5 = 0, i6 = 0, i7 = 0, i8 = 0;
18538 i5 = STACKTOP;
18539 STACKTOP = STACKTOP + 48 | 0;
18540 i6 = i5;
18541 i7 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0;
18542 HEAP32[i6 >> 2] = 240;
18543 HEAP32[i6 + 4 >> 2] = 1;
18544 HEAPF32[i6 + 8 >> 2] = .009999999776482582;
18545 i8 = i6 + 28 | 0;
18546 HEAP32[i8 + 0 >> 2] = 0;
18547 HEAP32[i8 + 4 >> 2] = 0;
18548 HEAP32[i8 + 8 >> 2] = 0;
18549 HEAP32[i8 + 12 >> 2] = 0;
18550 HEAP16[i8 + 16 >> 1] = 0;
18551 __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i7, i6, HEAP32[i2 + 56 >> 2] | 0);
18552 __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2CircleShapeS6_(i4, i6, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
18553 STACKTOP = i5;
18554 return;
18555}
18556function __ZN15b2ContactSolver13StoreImpulsesEv(i4) {
18557 i4 = i4 | 0;
18558 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0;
18559 i1 = STACKTOP;
18560 i2 = HEAP32[i4 + 48 >> 2] | 0;
18561 if ((i2 | 0) <= 0) {
18562 STACKTOP = i1;
18563 return;
18564 }
18565 i3 = HEAP32[i4 + 40 >> 2] | 0;
18566 i4 = HEAP32[i4 + 44 >> 2] | 0;
18567 i5 = 0;
18568 do {
18569 i6 = HEAP32[i4 + (HEAP32[i3 + (i5 * 152 | 0) + 148 >> 2] << 2) >> 2] | 0;
18570 i7 = HEAP32[i3 + (i5 * 152 | 0) + 144 >> 2] | 0;
18571 if ((i7 | 0) > 0) {
18572 i8 = 0;
18573 do {
18574 HEAPF32[i6 + (i8 * 20 | 0) + 72 >> 2] = +HEAPF32[i3 + (i5 * 152 | 0) + (i8 * 36 | 0) + 16 >> 2];
18575 HEAPF32[i6 + (i8 * 20 | 0) + 76 >> 2] = +HEAPF32[i3 + (i5 * 152 | 0) + (i8 * 36 | 0) + 20 >> 2];
18576 i8 = i8 + 1 | 0;
18577 } while ((i8 | 0) < (i7 | 0));
18578 }
18579 i5 = i5 + 1 | 0;
18580 } while ((i5 | 0) < (i2 | 0));
18581 STACKTOP = i1;
18582 return;
18583}
18584function __ZN16b2StackAllocator4FreeEPv(i1, i5) {
18585 i1 = i1 | 0;
18586 i5 = i5 | 0;
18587 var i2 = 0, i3 = 0, i4 = 0, i6 = 0;
18588 i3 = STACKTOP;
18589 i2 = i1 + 102796 | 0;
18590 i4 = HEAP32[i2 >> 2] | 0;
18591 if ((i4 | 0) <= 0) {
18592 ___assert_fail(3952, 3808, 63, 3976);
18593 }
18594 i6 = i4 + -1 | 0;
18595 if ((HEAP32[i1 + (i6 * 12 | 0) + 102412 >> 2] | 0) != (i5 | 0)) {
18596 ___assert_fail(3984, 3808, 65, 3976);
18597 }
18598 if ((HEAP8[i1 + (i6 * 12 | 0) + 102420 | 0] | 0) == 0) {
18599 i5 = i1 + (i6 * 12 | 0) + 102416 | 0;
18600 i6 = i1 + 102400 | 0;
18601 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) - (HEAP32[i5 >> 2] | 0);
18602 } else {
18603 __Z6b2FreePv(i5);
18604 i5 = i1 + (i6 * 12 | 0) + 102416 | 0;
18605 i4 = HEAP32[i2 >> 2] | 0;
18606 }
18607 i6 = i1 + 102404 | 0;
18608 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) - (HEAP32[i5 >> 2] | 0);
18609 HEAP32[i2 >> 2] = i4 + -1;
18610 STACKTOP = i3;
18611 return;
18612}
18613function __ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi(i5, i4, i3, i2) {
18614 i5 = i5 | 0;
18615 i4 = i4 | 0;
18616 i3 = i3 | 0;
18617 i2 = i2 | 0;
18618 var i1 = 0, i6 = 0;
18619 i1 = STACKTOP;
18620 if ((HEAP32[i4 + 8 >> 2] | 0) != (i5 | 0)) {
18621 STACKTOP = i1;
18622 return;
18623 }
18624 i5 = i4 + 16 | 0;
18625 i6 = HEAP32[i5 >> 2] | 0;
18626 if ((i6 | 0) == 0) {
18627 HEAP32[i5 >> 2] = i3;
18628 HEAP32[i4 + 24 >> 2] = i2;
18629 HEAP32[i4 + 36 >> 2] = 1;
18630 STACKTOP = i1;
18631 return;
18632 }
18633 if ((i6 | 0) != (i3 | 0)) {
18634 i6 = i4 + 36 | 0;
18635 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1;
18636 HEAP32[i4 + 24 >> 2] = 2;
18637 HEAP8[i4 + 54 | 0] = 1;
18638 STACKTOP = i1;
18639 return;
18640 }
18641 i3 = i4 + 24 | 0;
18642 if ((HEAP32[i3 >> 2] | 0) != 2) {
18643 STACKTOP = i1;
18644 return;
18645 }
18646 HEAP32[i3 >> 2] = i2;
18647 STACKTOP = i1;
18648 return;
18649}
18650function __ZN12b2BroadPhase11CreateProxyERK6b2AABBPv(i2, i4, i3) {
18651 i2 = i2 | 0;
18652 i4 = i4 | 0;
18653 i3 = i3 | 0;
18654 var i1 = 0, i5 = 0, i6 = 0, i7 = 0;
18655 i1 = STACKTOP;
18656 i3 = __ZN13b2DynamicTree11CreateProxyERK6b2AABBPv(i2, i4, i3) | 0;
18657 i4 = i2 + 28 | 0;
18658 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
18659 i4 = i2 + 40 | 0;
18660 i5 = HEAP32[i4 >> 2] | 0;
18661 i6 = i2 + 36 | 0;
18662 i2 = i2 + 32 | 0;
18663 if ((i5 | 0) == (HEAP32[i6 >> 2] | 0)) {
18664 i7 = HEAP32[i2 >> 2] | 0;
18665 HEAP32[i6 >> 2] = i5 << 1;
18666 i5 = __Z7b2Alloci(i5 << 3) | 0;
18667 HEAP32[i2 >> 2] = i5;
18668 _memcpy(i5 | 0, i7 | 0, HEAP32[i4 >> 2] << 2 | 0) | 0;
18669 __Z6b2FreePv(i7);
18670 i5 = HEAP32[i4 >> 2] | 0;
18671 }
18672 HEAP32[(HEAP32[i2 >> 2] | 0) + (i5 << 2) >> 2] = i3;
18673 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
18674 STACKTOP = i1;
18675 return i3 | 0;
18676}
18677function __ZN9b2ContactC2EP9b2FixtureiS1_i(i1, i4, i6, i3, i5) {
18678 i1 = i1 | 0;
18679 i4 = i4 | 0;
18680 i6 = i6 | 0;
18681 i3 = i3 | 0;
18682 i5 = i5 | 0;
18683 var i2 = 0, i7 = 0, d8 = 0.0, d9 = 0.0;
18684 i2 = STACKTOP;
18685 HEAP32[i1 >> 2] = 4440;
18686 HEAP32[i1 + 4 >> 2] = 4;
18687 HEAP32[i1 + 48 >> 2] = i4;
18688 HEAP32[i1 + 52 >> 2] = i3;
18689 HEAP32[i1 + 56 >> 2] = i6;
18690 HEAP32[i1 + 60 >> 2] = i5;
18691 HEAP32[i1 + 124 >> 2] = 0;
18692 HEAP32[i1 + 128 >> 2] = 0;
18693 i5 = i4 + 16 | 0;
18694 i6 = i1 + 8 | 0;
18695 i7 = i6 + 40 | 0;
18696 do {
18697 HEAP32[i6 >> 2] = 0;
18698 i6 = i6 + 4 | 0;
18699 } while ((i6 | 0) < (i7 | 0));
18700 HEAPF32[i1 + 136 >> 2] = +Math_sqrt(+(+HEAPF32[i5 >> 2] * +HEAPF32[i3 + 16 >> 2]));
18701 d8 = +HEAPF32[i4 + 20 >> 2];
18702 d9 = +HEAPF32[i3 + 20 >> 2];
18703 HEAPF32[i1 + 140 >> 2] = d8 > d9 ? d8 : d9;
18704 STACKTOP = i2;
18705 return;
18706}
18707function __ZN12b2BroadPhase9MoveProxyEiRK6b2AABBRK6b2Vec2(i3, i1, i5, i4) {
18708 i3 = i3 | 0;
18709 i1 = i1 | 0;
18710 i5 = i5 | 0;
18711 i4 = i4 | 0;
18712 var i2 = 0, i6 = 0, i7 = 0;
18713 i2 = STACKTOP;
18714 if (!(__ZN13b2DynamicTree9MoveProxyEiRK6b2AABBRK6b2Vec2(i3, i1, i5, i4) | 0)) {
18715 STACKTOP = i2;
18716 return;
18717 }
18718 i4 = i3 + 40 | 0;
18719 i5 = HEAP32[i4 >> 2] | 0;
18720 i6 = i3 + 36 | 0;
18721 i3 = i3 + 32 | 0;
18722 if ((i5 | 0) == (HEAP32[i6 >> 2] | 0)) {
18723 i7 = HEAP32[i3 >> 2] | 0;
18724 HEAP32[i6 >> 2] = i5 << 1;
18725 i5 = __Z7b2Alloci(i5 << 3) | 0;
18726 HEAP32[i3 >> 2] = i5;
18727 _memcpy(i5 | 0, i7 | 0, HEAP32[i4 >> 2] << 2 | 0) | 0;
18728 __Z6b2FreePv(i7);
18729 i5 = HEAP32[i4 >> 2] | 0;
18730 }
18731 HEAP32[(HEAP32[i3 >> 2] | 0) + (i5 << 2) >> 2] = i1;
18732 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1;
18733 STACKTOP = i2;
18734 return;
18735}
18736function __ZN24b2ChainAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i3, i4, i5, i6) {
18737 i1 = i1 | 0;
18738 i3 = i3 | 0;
18739 i4 = i4 | 0;
18740 i5 = i5 | 0;
18741 i6 = i6 | 0;
18742 var i2 = 0;
18743 i2 = STACKTOP;
18744 i6 = __ZN16b2BlockAllocator8AllocateEi(i6, 144) | 0;
18745 if ((i6 | 0) == 0) {
18746 i6 = 0;
18747 STACKTOP = i2;
18748 return i6 | 0;
18749 }
18750 __ZN9b2ContactC2EP9b2FixtureiS1_i(i6, i1, i3, i4, i5);
18751 HEAP32[i6 >> 2] = 6032;
18752 if ((HEAP32[(HEAP32[(HEAP32[i6 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 3) {
18753 ___assert_fail(6048, 6096, 43, 6152);
18754 }
18755 if ((HEAP32[(HEAP32[(HEAP32[i6 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 2) {
18756 STACKTOP = i2;
18757 return i6 | 0;
18758 } else {
18759 ___assert_fail(6184, 6096, 44, 6152);
18760 }
18761 return 0;
18762}
18763function __ZN23b2ChainAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i3, i4, i5, i6) {
18764 i1 = i1 | 0;
18765 i3 = i3 | 0;
18766 i4 = i4 | 0;
18767 i5 = i5 | 0;
18768 i6 = i6 | 0;
18769 var i2 = 0;
18770 i2 = STACKTOP;
18771 i6 = __ZN16b2BlockAllocator8AllocateEi(i6, 144) | 0;
18772 if ((i6 | 0) == 0) {
18773 i6 = 0;
18774 STACKTOP = i2;
18775 return i6 | 0;
18776 }
18777 __ZN9b2ContactC2EP9b2FixtureiS1_i(i6, i1, i3, i4, i5);
18778 HEAP32[i6 >> 2] = 5784;
18779 if ((HEAP32[(HEAP32[(HEAP32[i6 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 3) {
18780 ___assert_fail(5800, 5848, 43, 5904);
18781 }
18782 if ((HEAP32[(HEAP32[(HEAP32[i6 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) {
18783 STACKTOP = i2;
18784 return i6 | 0;
18785 } else {
18786 ___assert_fail(5928, 5848, 44, 5904);
18787 }
18788 return 0;
18789}
18790function __ZN25b2PolygonAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
18791 i1 = i1 | 0;
18792 i4 = i4 | 0;
18793 i2 = i2 | 0;
18794 i5 = i5 | 0;
18795 i3 = i3 | 0;
18796 i4 = STACKTOP;
18797 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18798 if ((i3 | 0) == 0) {
18799 i5 = 0;
18800 STACKTOP = i4;
18801 return i5 | 0;
18802 }
18803 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18804 HEAP32[i3 >> 2] = 4984;
18805 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 2) {
18806 ___assert_fail(5e3, 5048, 41, 5104);
18807 }
18808 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) {
18809 i5 = i3;
18810 STACKTOP = i4;
18811 return i5 | 0;
18812 } else {
18813 ___assert_fail(5136, 5048, 42, 5104);
18814 }
18815 return 0;
18816}
18817function __ZN23b2EdgeAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
18818 i1 = i1 | 0;
18819 i4 = i4 | 0;
18820 i2 = i2 | 0;
18821 i5 = i5 | 0;
18822 i3 = i3 | 0;
18823 i4 = STACKTOP;
18824 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18825 if ((i3 | 0) == 0) {
18826 i5 = 0;
18827 STACKTOP = i4;
18828 return i5 | 0;
18829 }
18830 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18831 HEAP32[i3 >> 2] = 4736;
18832 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 1) {
18833 ___assert_fail(4752, 4800, 41, 4856);
18834 }
18835 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 2) {
18836 i5 = i3;
18837 STACKTOP = i4;
18838 return i5 | 0;
18839 } else {
18840 ___assert_fail(4880, 4800, 42, 4856);
18841 }
18842 return 0;
18843}
18844function __ZN22b2EdgeAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
18845 i1 = i1 | 0;
18846 i4 = i4 | 0;
18847 i2 = i2 | 0;
18848 i5 = i5 | 0;
18849 i3 = i3 | 0;
18850 i4 = STACKTOP;
18851 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18852 if ((i3 | 0) == 0) {
18853 i5 = 0;
18854 STACKTOP = i4;
18855 return i5 | 0;
18856 }
18857 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18858 HEAP32[i3 >> 2] = 4488;
18859 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 1) {
18860 ___assert_fail(4504, 4552, 41, 4608);
18861 }
18862 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) {
18863 i5 = i3;
18864 STACKTOP = i4;
18865 return i5 | 0;
18866 } else {
18867 ___assert_fail(4632, 4552, 42, 4608);
18868 }
18869 return 0;
18870}
18871function __ZN14b2PolygonShape8SetAsBoxEff(i1, d3, d2) {
18872 i1 = i1 | 0;
18873 d3 = +d3;
18874 d2 = +d2;
18875 var d4 = 0.0, d5 = 0.0;
18876 HEAP32[i1 + 148 >> 2] = 4;
18877 d4 = -d3;
18878 d5 = -d2;
18879 HEAPF32[i1 + 20 >> 2] = d4;
18880 HEAPF32[i1 + 24 >> 2] = d5;
18881 HEAPF32[i1 + 28 >> 2] = d3;
18882 HEAPF32[i1 + 32 >> 2] = d5;
18883 HEAPF32[i1 + 36 >> 2] = d3;
18884 HEAPF32[i1 + 40 >> 2] = d2;
18885 HEAPF32[i1 + 44 >> 2] = d4;
18886 HEAPF32[i1 + 48 >> 2] = d2;
18887 HEAPF32[i1 + 84 >> 2] = 0.0;
18888 HEAPF32[i1 + 88 >> 2] = -1.0;
18889 HEAPF32[i1 + 92 >> 2] = 1.0;
18890 HEAPF32[i1 + 96 >> 2] = 0.0;
18891 HEAPF32[i1 + 100 >> 2] = 0.0;
18892 HEAPF32[i1 + 104 >> 2] = 1.0;
18893 HEAPF32[i1 + 108 >> 2] = -1.0;
18894 HEAPF32[i1 + 112 >> 2] = 0.0;
18895 HEAPF32[i1 + 12 >> 2] = 0.0;
18896 HEAPF32[i1 + 16 >> 2] = 0.0;
18897 return;
18898}
18899function __ZN16b2PolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
18900 i1 = i1 | 0;
18901 i4 = i4 | 0;
18902 i2 = i2 | 0;
18903 i5 = i5 | 0;
18904 i3 = i3 | 0;
18905 i4 = STACKTOP;
18906 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18907 if ((i3 | 0) == 0) {
18908 i5 = 0;
18909 STACKTOP = i4;
18910 return i5 | 0;
18911 }
18912 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18913 HEAP32[i3 >> 2] = 5240;
18914 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 2) {
18915 ___assert_fail(5256, 5304, 44, 5352);
18916 }
18917 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 2) {
18918 i5 = i3;
18919 STACKTOP = i4;
18920 return i5 | 0;
18921 } else {
18922 ___assert_fail(5376, 5304, 45, 5352);
18923 }
18924 return 0;
18925}
18926function __ZN15b2CircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) {
18927 i1 = i1 | 0;
18928 i4 = i4 | 0;
18929 i2 = i2 | 0;
18930 i5 = i5 | 0;
18931 i3 = i3 | 0;
18932 i4 = STACKTOP;
18933 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0;
18934 if ((i3 | 0) == 0) {
18935 i5 = 0;
18936 STACKTOP = i4;
18937 return i5 | 0;
18938 }
18939 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0);
18940 HEAP32[i3 >> 2] = 6288;
18941 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 0) {
18942 ___assert_fail(6304, 6352, 44, 6400);
18943 }
18944 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) {
18945 i5 = i3;
18946 STACKTOP = i4;
18947 return i5 | 0;
18948 } else {
18949 ___assert_fail(6416, 6352, 45, 6400);
18950 }
18951 return 0;
18952}
18953function __ZN7b2World10CreateBodyEPK9b2BodyDef(i1, i4) {
18954 i1 = i1 | 0;
18955 i4 = i4 | 0;
18956 var i2 = 0, i3 = 0, i5 = 0;
18957 i2 = STACKTOP;
18958 if ((HEAP32[i1 + 102868 >> 2] & 2 | 0) != 0) {
18959 ___assert_fail(2160, 2184, 109, 2216);
18960 }
18961 i3 = __ZN16b2BlockAllocator8AllocateEi(i1, 152) | 0;
18962 if ((i3 | 0) == 0) {
18963 i3 = 0;
18964 } else {
18965 __ZN6b2BodyC2EPK9b2BodyDefP7b2World(i3, i4, i1);
18966 }
18967 HEAP32[i3 + 92 >> 2] = 0;
18968 i4 = i1 + 102952 | 0;
18969 HEAP32[i3 + 96 >> 2] = HEAP32[i4 >> 2];
18970 i5 = HEAP32[i4 >> 2] | 0;
18971 if ((i5 | 0) != 0) {
18972 HEAP32[i5 + 92 >> 2] = i3;
18973 }
18974 HEAP32[i4 >> 2] = i3;
18975 i5 = i1 + 102960 | 0;
18976 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
18977 STACKTOP = i2;
18978 return i3 | 0;
18979}
18980function __ZNK6b2Body13ShouldCollideEPKS_(i4, i2) {
18981 i4 = i4 | 0;
18982 i2 = i2 | 0;
18983 var i1 = 0, i3 = 0;
18984 i1 = STACKTOP;
18985 if ((HEAP32[i4 >> 2] | 0) != 2 ? (HEAP32[i2 >> 2] | 0) != 2 : 0) {
18986 i2 = 0;
18987 } else {
18988 i3 = 3;
18989 }
18990 L3 : do {
18991 if ((i3 | 0) == 3) {
18992 i3 = HEAP32[i4 + 108 >> 2] | 0;
18993 if ((i3 | 0) == 0) {
18994 i2 = 1;
18995 } else {
18996 while (1) {
18997 if ((HEAP32[i3 >> 2] | 0) == (i2 | 0) ? (HEAP8[(HEAP32[i3 + 4 >> 2] | 0) + 61 | 0] | 0) == 0 : 0) {
18998 i2 = 0;
18999 break L3;
19000 }
19001 i3 = HEAP32[i3 + 12 >> 2] | 0;
19002 if ((i3 | 0) == 0) {
19003 i2 = 1;
19004 break;
19005 }
19006 }
19007 }
19008 }
19009 } while (0);
19010 STACKTOP = i1;
19011 return i2 | 0;
19012}
19013function __ZNK14b2PolygonShape5CloneEP16b2BlockAllocator(i1, i3) {
19014 i1 = i1 | 0;
19015 i3 = i3 | 0;
19016 var i2 = 0, i4 = 0, i5 = 0, i6 = 0;
19017 i2 = STACKTOP;
19018 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 152) | 0;
19019 if ((i3 | 0) == 0) {
19020 i3 = 0;
19021 } else {
19022 HEAP32[i3 >> 2] = 504;
19023 HEAP32[i3 + 4 >> 2] = 2;
19024 HEAPF32[i3 + 8 >> 2] = .009999999776482582;
19025 HEAP32[i3 + 148 >> 2] = 0;
19026 HEAPF32[i3 + 12 >> 2] = 0.0;
19027 HEAPF32[i3 + 16 >> 2] = 0.0;
19028 }
19029 i6 = i1 + 4 | 0;
19030 i5 = HEAP32[i6 + 4 >> 2] | 0;
19031 i4 = i3 + 4 | 0;
19032 HEAP32[i4 >> 2] = HEAP32[i6 >> 2];
19033 HEAP32[i4 + 4 >> 2] = i5;
19034 _memcpy(i3 + 12 | 0, i1 + 12 | 0, 140) | 0;
19035 STACKTOP = i2;
19036 return i3 | 0;
19037}
19038function _memcpy(i3, i2, i1) {
19039 i3 = i3 | 0;
19040 i2 = i2 | 0;
19041 i1 = i1 | 0;
19042 var i4 = 0;
19043 if ((i1 | 0) >= 4096) return _emscripten_memcpy_big(i3 | 0, i2 | 0, i1 | 0) | 0;
19044 i4 = i3 | 0;
19045 if ((i3 & 3) == (i2 & 3)) {
19046 while (i3 & 3) {
19047 if ((i1 | 0) == 0) return i4 | 0;
19048 HEAP8[i3] = HEAP8[i2] | 0;
19049 i3 = i3 + 1 | 0;
19050 i2 = i2 + 1 | 0;
19051 i1 = i1 - 1 | 0;
19052 }
19053 while ((i1 | 0) >= 4) {
19054 HEAP32[i3 >> 2] = HEAP32[i2 >> 2];
19055 i3 = i3 + 4 | 0;
19056 i2 = i2 + 4 | 0;
19057 i1 = i1 - 4 | 0;
19058 }
19059 }
19060 while ((i1 | 0) > 0) {
19061 HEAP8[i3] = HEAP8[i2] | 0;
19062 i3 = i3 + 1 | 0;
19063 i2 = i2 + 1 | 0;
19064 i1 = i1 - 1 | 0;
19065 }
19066 return i4 | 0;
19067}
19068function __ZN7b2World16SetAllowSleepingEb(i2, i4) {
19069 i2 = i2 | 0;
19070 i4 = i4 | 0;
19071 var i1 = 0, i3 = 0;
19072 i1 = STACKTOP;
19073 i3 = i2 + 102976 | 0;
19074 if ((i4 & 1 | 0) == (HEAPU8[i3] | 0 | 0)) {
19075 STACKTOP = i1;
19076 return;
19077 }
19078 HEAP8[i3] = i4 & 1;
19079 if (i4) {
19080 STACKTOP = i1;
19081 return;
19082 }
19083 i2 = HEAP32[i2 + 102952 >> 2] | 0;
19084 if ((i2 | 0) == 0) {
19085 STACKTOP = i1;
19086 return;
19087 }
19088 do {
19089 i3 = i2 + 4 | 0;
19090 i4 = HEAPU16[i3 >> 1] | 0;
19091 if ((i4 & 2 | 0) == 0) {
19092 HEAP16[i3 >> 1] = i4 | 2;
19093 HEAPF32[i2 + 144 >> 2] = 0.0;
19094 }
19095 i2 = HEAP32[i2 + 96 >> 2] | 0;
19096 } while ((i2 | 0) != 0);
19097 STACKTOP = i1;
19098 return;
19099}
19100function __ZN16b2BlockAllocator4FreeEPvi(i3, i1, i4) {
19101 i3 = i3 | 0;
19102 i1 = i1 | 0;
19103 i4 = i4 | 0;
19104 var i2 = 0;
19105 i2 = STACKTOP;
19106 if ((i4 | 0) == 0) {
19107 STACKTOP = i2;
19108 return;
19109 }
19110 if ((i4 | 0) <= 0) {
19111 ___assert_fail(1376, 1312, 164, 1488);
19112 }
19113 if ((i4 | 0) > 640) {
19114 __Z6b2FreePv(i1);
19115 STACKTOP = i2;
19116 return;
19117 }
19118 i4 = HEAP8[632 + i4 | 0] | 0;
19119 if (!((i4 & 255) < 14)) {
19120 ___assert_fail(1408, 1312, 173, 1488);
19121 }
19122 i4 = i3 + ((i4 & 255) << 2) + 12 | 0;
19123 HEAP32[i1 >> 2] = HEAP32[i4 >> 2];
19124 HEAP32[i4 >> 2] = i1;
19125 STACKTOP = i2;
19126 return;
19127}
19128function __ZN15b2ContactFilter13ShouldCollideEP9b2FixtureS1_(i3, i2, i1) {
19129 i3 = i3 | 0;
19130 i2 = i2 | 0;
19131 i1 = i1 | 0;
19132 var i4 = 0;
19133 i3 = STACKTOP;
19134 i4 = HEAP16[i2 + 36 >> 1] | 0;
19135 if (!(i4 << 16 >> 16 != (HEAP16[i1 + 36 >> 1] | 0) | i4 << 16 >> 16 == 0)) {
19136 i4 = i4 << 16 >> 16 > 0;
19137 STACKTOP = i3;
19138 return i4 | 0;
19139 }
19140 if ((HEAP16[i1 + 32 >> 1] & HEAP16[i2 + 34 >> 1]) << 16 >> 16 == 0) {
19141 i4 = 0;
19142 STACKTOP = i3;
19143 return i4 | 0;
19144 }
19145 i4 = (HEAP16[i1 + 34 >> 1] & HEAP16[i2 + 32 >> 1]) << 16 >> 16 != 0;
19146 STACKTOP = i3;
19147 return i4 | 0;
19148}
19149function _memset(i1, i4, i3) {
19150 i1 = i1 | 0;
19151 i4 = i4 | 0;
19152 i3 = i3 | 0;
19153 var i2 = 0, i5 = 0, i6 = 0, i7 = 0;
19154 i2 = i1 + i3 | 0;
19155 if ((i3 | 0) >= 20) {
19156 i4 = i4 & 255;
19157 i7 = i1 & 3;
19158 i6 = i4 | i4 << 8 | i4 << 16 | i4 << 24;
19159 i5 = i2 & ~3;
19160 if (i7) {
19161 i7 = i1 + 4 - i7 | 0;
19162 while ((i1 | 0) < (i7 | 0)) {
19163 HEAP8[i1] = i4;
19164 i1 = i1 + 1 | 0;
19165 }
19166 }
19167 while ((i1 | 0) < (i5 | 0)) {
19168 HEAP32[i1 >> 2] = i6;
19169 i1 = i1 + 4 | 0;
19170 }
19171 }
19172 while ((i1 | 0) < (i2 | 0)) {
19173 HEAP8[i1] = i4;
19174 i1 = i1 + 1 | 0;
19175 }
19176 return i1 - i3 | 0;
19177}
19178function __ZN6b2Body13CreateFixtureEPK7b2Shapef(i1, i3, d2) {
19179 i1 = i1 | 0;
19180 i3 = i3 | 0;
19181 d2 = +d2;
19182 var i4 = 0, i5 = 0;
19183 i4 = STACKTOP;
19184 STACKTOP = STACKTOP + 32 | 0;
19185 i5 = i4;
19186 HEAP16[i5 + 22 >> 1] = 1;
19187 HEAP16[i5 + 24 >> 1] = -1;
19188 HEAP16[i5 + 26 >> 1] = 0;
19189 HEAP32[i5 + 4 >> 2] = 0;
19190 HEAPF32[i5 + 8 >> 2] = .20000000298023224;
19191 HEAPF32[i5 + 12 >> 2] = 0.0;
19192 HEAP8[i5 + 20 | 0] = 0;
19193 HEAP32[i5 >> 2] = i3;
19194 HEAPF32[i5 + 16 >> 2] = d2;
19195 i3 = __ZN6b2Body13CreateFixtureEPK12b2FixtureDef(i1, i5) | 0;
19196 STACKTOP = i4;
19197 return i3 | 0;
19198}
19199function __Znwj(i2) {
19200 i2 = i2 | 0;
19201 var i1 = 0, i3 = 0;
19202 i1 = STACKTOP;
19203 i2 = (i2 | 0) == 0 ? 1 : i2;
19204 while (1) {
19205 i3 = _malloc(i2) | 0;
19206 if ((i3 | 0) != 0) {
19207 i2 = 6;
19208 break;
19209 }
19210 i3 = HEAP32[1914] | 0;
19211 HEAP32[1914] = i3 + 0;
19212 if ((i3 | 0) == 0) {
19213 i2 = 5;
19214 break;
19215 }
19216 FUNCTION_TABLE_v[i3 & 3]();
19217 }
19218 if ((i2 | 0) == 5) {
19219 i3 = ___cxa_allocate_exception(4) | 0;
19220 HEAP32[i3 >> 2] = 7672;
19221 ___cxa_throw(i3 | 0, 7720, 30);
19222 } else if ((i2 | 0) == 6) {
19223 STACKTOP = i1;
19224 return i3 | 0;
19225 }
19226 return 0;
19227}
19228function __ZN8b2IslandD2Ev(i1) {
19229 i1 = i1 | 0;
19230 var i2 = 0;
19231 i2 = STACKTOP;
19232 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 20 >> 2] | 0);
19233 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 24 >> 2] | 0);
19234 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 16 >> 2] | 0);
19235 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 12 >> 2] | 0);
19236 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 8 >> 2] | 0);
19237 STACKTOP = i2;
19238 return;
19239}
19240function __ZN16b2BlockAllocatorD2Ev(i2) {
19241 i2 = i2 | 0;
19242 var i1 = 0, i3 = 0, i4 = 0, i5 = 0;
19243 i1 = STACKTOP;
19244 i3 = i2 + 4 | 0;
19245 i4 = HEAP32[i2 >> 2] | 0;
19246 if ((HEAP32[i3 >> 2] | 0) > 0) {
19247 i5 = 0;
19248 } else {
19249 i5 = i4;
19250 __Z6b2FreePv(i5);
19251 STACKTOP = i1;
19252 return;
19253 }
19254 do {
19255 __Z6b2FreePv(HEAP32[i4 + (i5 << 3) + 4 >> 2] | 0);
19256 i5 = i5 + 1 | 0;
19257 i4 = HEAP32[i2 >> 2] | 0;
19258 } while ((i5 | 0) < (HEAP32[i3 >> 2] | 0));
19259 __Z6b2FreePv(i4);
19260 STACKTOP = i1;
19261 return;
19262}
19263function copyTempDouble(i1) {
19264 i1 = i1 | 0;
19265 HEAP8[tempDoublePtr] = HEAP8[i1];
19266 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
19267 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
19268 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
19269 HEAP8[tempDoublePtr + 4 | 0] = HEAP8[i1 + 4 | 0];
19270 HEAP8[tempDoublePtr + 5 | 0] = HEAP8[i1 + 5 | 0];
19271 HEAP8[tempDoublePtr + 6 | 0] = HEAP8[i1 + 6 | 0];
19272 HEAP8[tempDoublePtr + 7 | 0] = HEAP8[i1 + 7 | 0];
19273}
19274function __ZNK11b2EdgeShape11ComputeMassEP10b2MassDataf(i2, i1, d3) {
19275 i2 = i2 | 0;
19276 i1 = i1 | 0;
19277 d3 = +d3;
19278 var i4 = 0, d5 = 0.0;
19279 i4 = STACKTOP;
19280 HEAPF32[i1 >> 2] = 0.0;
19281 d5 = +((+HEAPF32[i2 + 12 >> 2] + +HEAPF32[i2 + 20 >> 2]) * .5);
19282 d3 = +((+HEAPF32[i2 + 16 >> 2] + +HEAPF32[i2 + 24 >> 2]) * .5);
19283 i2 = i1 + 4 | 0;
19284 HEAPF32[i2 >> 2] = d5;
19285 HEAPF32[i2 + 4 >> 2] = d3;
19286 HEAPF32[i1 + 12 >> 2] = 0.0;
19287 STACKTOP = i4;
19288 return;
19289}
19290function __ZN11b2EdgeShape3SetERK6b2Vec2S2_(i1, i3, i2) {
19291 i1 = i1 | 0;
19292 i3 = i3 | 0;
19293 i2 = i2 | 0;
19294 var i4 = 0, i5 = 0;
19295 i5 = i3;
19296 i3 = HEAP32[i5 + 4 >> 2] | 0;
19297 i4 = i1 + 12 | 0;
19298 HEAP32[i4 >> 2] = HEAP32[i5 >> 2];
19299 HEAP32[i4 + 4 >> 2] = i3;
19300 i4 = i2;
19301 i2 = HEAP32[i4 + 4 >> 2] | 0;
19302 i3 = i1 + 20 | 0;
19303 HEAP32[i3 >> 2] = HEAP32[i4 >> 2];
19304 HEAP32[i3 + 4 >> 2] = i2;
19305 HEAP8[i1 + 44 | 0] = 0;
19306 HEAP8[i1 + 45 | 0] = 0;
19307 return;
19308}
19309function __ZN25b2PolygonAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
19310 i2 = i2 | 0;
19311 i4 = i4 | 0;
19312 i3 = i3 | 0;
19313 i1 = i1 | 0;
19314 var i5 = 0;
19315 i5 = STACKTOP;
19316 __Z25b2CollidePolygonAndCircleP10b2ManifoldPK14b2PolygonShapeRK11b2TransformPK13b2CircleShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19317 STACKTOP = i5;
19318 return;
19319}
19320function __ZN23b2EdgeAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
19321 i2 = i2 | 0;
19322 i4 = i4 | 0;
19323 i3 = i3 | 0;
19324 i1 = i1 | 0;
19325 var i5 = 0;
19326 i5 = STACKTOP;
19327 __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19328 STACKTOP = i5;
19329 return;
19330}
19331function __ZN22b2EdgeAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
19332 i2 = i2 | 0;
19333 i4 = i4 | 0;
19334 i3 = i3 | 0;
19335 i1 = i1 | 0;
19336 var i5 = 0;
19337 i5 = STACKTOP;
19338 __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2CircleShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19339 STACKTOP = i5;
19340 return;
19341}
19342function __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS6_(i5, i4, i3, i2, i1) {
19343 i5 = i5 | 0;
19344 i4 = i4 | 0;
19345 i3 = i3 | 0;
19346 i2 = i2 | 0;
19347 i1 = i1 | 0;
19348 var i6 = 0;
19349 i6 = STACKTOP;
19350 STACKTOP = STACKTOP + 256 | 0;
19351 __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS7_(i6, i5, i4, i3, i2, i1);
19352 STACKTOP = i6;
19353 return;
19354}
19355function __ZN16b2PolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
19356 i2 = i2 | 0;
19357 i4 = i4 | 0;
19358 i3 = i3 | 0;
19359 i1 = i1 | 0;
19360 var i5 = 0;
19361 i5 = STACKTOP;
19362 __Z17b2CollidePolygonsP10b2ManifoldPK14b2PolygonShapeRK11b2TransformS3_S6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19363 STACKTOP = i5;
19364 return;
19365}
19366function __ZN15b2CircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) {
19367 i2 = i2 | 0;
19368 i4 = i4 | 0;
19369 i3 = i3 | 0;
19370 i1 = i1 | 0;
19371 var i5 = 0;
19372 i5 = STACKTOP;
19373 __Z16b2CollideCirclesP10b2ManifoldPK13b2CircleShapeRK11b2TransformS3_S6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1);
19374 STACKTOP = i5;
19375 return;
19376}
19377function __Z14b2PairLessThanRK6b2PairS1_(i2, i5) {
19378 i2 = i2 | 0;
19379 i5 = i5 | 0;
19380 var i1 = 0, i3 = 0, i4 = 0;
19381 i1 = STACKTOP;
19382 i4 = HEAP32[i2 >> 2] | 0;
19383 i3 = HEAP32[i5 >> 2] | 0;
19384 if ((i4 | 0) >= (i3 | 0)) {
19385 if ((i4 | 0) == (i3 | 0)) {
19386 i2 = (HEAP32[i2 + 4 >> 2] | 0) < (HEAP32[i5 + 4 >> 2] | 0);
19387 } else {
19388 i2 = 0;
19389 }
19390 } else {
19391 i2 = 1;
19392 }
19393 STACKTOP = i1;
19394 return i2 | 0;
19395}
19396function __ZN9b2FixtureC2Ev(i1) {
19397 i1 = i1 | 0;
19398 var i2 = 0;
19399 i2 = STACKTOP;
19400 HEAP16[i1 + 32 >> 1] = 1;
19401 HEAP16[i1 + 34 >> 1] = -1;
19402 HEAP16[i1 + 36 >> 1] = 0;
19403 HEAP32[i1 + 40 >> 2] = 0;
19404 HEAP32[i1 + 24 >> 2] = 0;
19405 HEAP32[i1 + 28 >> 2] = 0;
19406 HEAP32[i1 + 0 >> 2] = 0;
19407 HEAP32[i1 + 4 >> 2] = 0;
19408 HEAP32[i1 + 8 >> 2] = 0;
19409 HEAP32[i1 + 12 >> 2] = 0;
19410 STACKTOP = i2;
19411 return;
19412}
19413function __ZN12b2BroadPhaseC2Ev(i1) {
19414 i1 = i1 | 0;
19415 var i2 = 0;
19416 i2 = STACKTOP;
19417 __ZN13b2DynamicTreeC2Ev(i1);
19418 HEAP32[i1 + 28 >> 2] = 0;
19419 HEAP32[i1 + 48 >> 2] = 16;
19420 HEAP32[i1 + 52 >> 2] = 0;
19421 HEAP32[i1 + 44 >> 2] = __Z7b2Alloci(192) | 0;
19422 HEAP32[i1 + 36 >> 2] = 16;
19423 HEAP32[i1 + 40 >> 2] = 0;
19424 HEAP32[i1 + 32 >> 2] = __Z7b2Alloci(64) | 0;
19425 STACKTOP = i2;
19426 return;
19427}
19428function __ZN16b2StackAllocatorD2Ev(i1) {
19429 i1 = i1 | 0;
19430 var i2 = 0;
19431 i2 = STACKTOP;
19432 if ((HEAP32[i1 + 102400 >> 2] | 0) != 0) {
19433 ___assert_fail(3792, 3808, 32, 3848);
19434 }
19435 if ((HEAP32[i1 + 102796 >> 2] | 0) == 0) {
19436 STACKTOP = i2;
19437 return;
19438 } else {
19439 ___assert_fail(3872, 3808, 33, 3848);
19440 }
19441}
19442function __ZN15b2ContactSolverD2Ev(i1) {
19443 i1 = i1 | 0;
19444 var i2 = 0, i3 = 0;
19445 i2 = STACKTOP;
19446 i3 = i1 + 32 | 0;
19447 __ZN16b2StackAllocator4FreeEPv(HEAP32[i3 >> 2] | 0, HEAP32[i1 + 40 >> 2] | 0);
19448 __ZN16b2StackAllocator4FreeEPv(HEAP32[i3 >> 2] | 0, HEAP32[i1 + 36 >> 2] | 0);
19449 STACKTOP = i2;
19450 return;
19451}
19452function __ZN25b2PolygonAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19453 i1 = i1 | 0;
19454 i2 = i2 | 0;
19455 var i3 = 0;
19456 i3 = STACKTOP;
19457 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19458 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19459 STACKTOP = i3;
19460 return;
19461}
19462function __ZN24b2ChainAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19463 i1 = i1 | 0;
19464 i2 = i2 | 0;
19465 var i3 = 0;
19466 i3 = STACKTOP;
19467 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19468 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19469 STACKTOP = i3;
19470 return;
19471}
19472function __ZN23b2EdgeAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19473 i1 = i1 | 0;
19474 i2 = i2 | 0;
19475 var i3 = 0;
19476 i3 = STACKTOP;
19477 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19478 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19479 STACKTOP = i3;
19480 return;
19481}
19482function __ZN23b2ChainAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19483 i1 = i1 | 0;
19484 i2 = i2 | 0;
19485 var i3 = 0;
19486 i3 = STACKTOP;
19487 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19488 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19489 STACKTOP = i3;
19490 return;
19491}
19492function __ZN22b2EdgeAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19493 i1 = i1 | 0;
19494 i2 = i2 | 0;
19495 var i3 = 0;
19496 i3 = STACKTOP;
19497 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19498 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19499 STACKTOP = i3;
19500 return;
19501}
19502function __ZN16b2ContactManagerC2Ev(i1) {
19503 i1 = i1 | 0;
19504 var i2 = 0;
19505 i2 = STACKTOP;
19506 __ZN12b2BroadPhaseC2Ev(i1);
19507 HEAP32[i1 + 60 >> 2] = 0;
19508 HEAP32[i1 + 64 >> 2] = 0;
19509 HEAP32[i1 + 68 >> 2] = 1888;
19510 HEAP32[i1 + 72 >> 2] = 1896;
19511 HEAP32[i1 + 76 >> 2] = 0;
19512 STACKTOP = i2;
19513 return;
19514}
19515function __ZN16b2PolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19516 i1 = i1 | 0;
19517 i2 = i2 | 0;
19518 var i3 = 0;
19519 i3 = STACKTOP;
19520 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19521 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19522 STACKTOP = i3;
19523 return;
19524}
19525function __ZN15b2CircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) {
19526 i1 = i1 | 0;
19527 i2 = i2 | 0;
19528 var i3 = 0;
19529 i3 = STACKTOP;
19530 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1);
19531 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144);
19532 STACKTOP = i3;
19533 return;
19534}
19535function dynCall_viiiiii(i7, i6, i5, i4, i3, i2, i1) {
19536 i7 = i7 | 0;
19537 i6 = i6 | 0;
19538 i5 = i5 | 0;
19539 i4 = i4 | 0;
19540 i3 = i3 | 0;
19541 i2 = i2 | 0;
19542 i1 = i1 | 0;
19543 FUNCTION_TABLE_viiiiii[i7 & 3](i6 | 0, i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0);
19544}
19545function copyTempFloat(i1) {
19546 i1 = i1 | 0;
19547 HEAP8[tempDoublePtr] = HEAP8[i1];
19548 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0];
19549 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0];
19550 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0];
19551}
19552function dynCall_iiiiii(i6, i5, i4, i3, i2, i1) {
19553 i6 = i6 | 0;
19554 i5 = i5 | 0;
19555 i4 = i4 | 0;
19556 i3 = i3 | 0;
19557 i2 = i2 | 0;
19558 i1 = i1 | 0;
19559 return FUNCTION_TABLE_iiiiii[i6 & 15](i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0) | 0;
19560}
19561function dynCall_viiiii(i6, i5, i4, i3, i2, i1) {
19562 i6 = i6 | 0;
19563 i5 = i5 | 0;
19564 i4 = i4 | 0;
19565 i3 = i3 | 0;
19566 i2 = i2 | 0;
19567 i1 = i1 | 0;
19568 FUNCTION_TABLE_viiiii[i6 & 3](i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0);
19569}
19570function __ZN16b2ContactManager15FindNewContactsEv(i1) {
19571 i1 = i1 | 0;
19572 var i2 = 0;
19573 i2 = STACKTOP;
19574 __ZN12b2BroadPhase11UpdatePairsI16b2ContactManagerEEvPT_(i1, i1);
19575 STACKTOP = i2;
19576 return;
19577}
19578function __ZN16b2StackAllocatorC2Ev(i1) {
19579 i1 = i1 | 0;
19580 HEAP32[i1 + 102400 >> 2] = 0;
19581 HEAP32[i1 + 102404 >> 2] = 0;
19582 HEAP32[i1 + 102408 >> 2] = 0;
19583 HEAP32[i1 + 102796 >> 2] = 0;
19584 return;
19585}
19586function dynCall_viiii(i5, i4, i3, i2, i1) {
19587 i5 = i5 | 0;
19588 i4 = i4 | 0;
19589 i3 = i3 | 0;
19590 i2 = i2 | 0;
19591 i1 = i1 | 0;
19592 FUNCTION_TABLE_viiii[i5 & 15](i4 | 0, i3 | 0, i2 | 0, i1 | 0);
19593}
19594function dynCall_iiii(i4, i3, i2, i1) {
19595 i4 = i4 | 0;
19596 i3 = i3 | 0;
19597 i2 = i2 | 0;
19598 i1 = i1 | 0;
19599 return FUNCTION_TABLE_iiii[i4 & 7](i3 | 0, i2 | 0, i1 | 0) | 0;
19600}
19601function dynCall_viii(i4, i3, i2, i1) {
19602 i4 = i4 | 0;
19603 i3 = i3 | 0;
19604 i2 = i2 | 0;
19605 i1 = i1 | 0;
19606 FUNCTION_TABLE_viii[i4 & 3](i3 | 0, i2 | 0, i1 | 0);
19607}
19608function __ZNSt9bad_allocD0Ev(i1) {
19609 i1 = i1 | 0;
19610 var i2 = 0;
19611 i2 = STACKTOP;
19612 __ZNSt9exceptionD2Ev(i1 | 0);
19613 __ZdlPv(i1);
19614 STACKTOP = i2;
19615 return;
19616}
19617function stackAlloc(i1) {
19618 i1 = i1 | 0;
19619 var i2 = 0;
19620 i2 = STACKTOP;
19621 STACKTOP = STACKTOP + i1 | 0;
19622 STACKTOP = STACKTOP + 7 & -8;
19623 return i2 | 0;
19624}
19625function __ZN13b2DynamicTreeD2Ev(i1) {
19626 i1 = i1 | 0;
19627 var i2 = 0;
19628 i2 = STACKTOP;
19629 __Z6b2FreePv(HEAP32[i1 + 4 >> 2] | 0);
19630 STACKTOP = i2;
19631 return;
19632}
19633function dynCall_viid(i4, i3, i2, d1) {
19634 i4 = i4 | 0;
19635 i3 = i3 | 0;
19636 i2 = i2 | 0;
19637 d1 = +d1;
19638 FUNCTION_TABLE_viid[i4 & 3](i3 | 0, i2 | 0, +d1);
19639}
19640function __ZN17b2ContactListener9PostSolveEP9b2ContactPK16b2ContactImpulse(i1, i2, i3) {
19641 i1 = i1 | 0;
19642 i2 = i2 | 0;
19643 i3 = i3 | 0;
19644 return;
19645}
19646function __ZN10__cxxabiv120__si_class_type_infoD0Ev(i1) {
19647 i1 = i1 | 0;
19648 var i2 = 0;
19649 i2 = STACKTOP;
19650 __ZdlPv(i1);
19651 STACKTOP = i2;
19652 return;
19653}
19654function __ZN10__cxxabiv117__class_type_infoD0Ev(i1) {
19655 i1 = i1 | 0;
19656 var i2 = 0;
19657 i2 = STACKTOP;
19658 __ZdlPv(i1);
19659 STACKTOP = i2;
19660 return;
19661}
19662function __ZNSt9bad_allocD2Ev(i1) {
19663 i1 = i1 | 0;
19664 var i2 = 0;
19665 i2 = STACKTOP;
19666 __ZNSt9exceptionD2Ev(i1 | 0);
19667 STACKTOP = i2;
19668 return;
19669}
19670function dynCall_iii(i3, i2, i1) {
19671 i3 = i3 | 0;
19672 i2 = i2 | 0;
19673 i1 = i1 | 0;
19674 return FUNCTION_TABLE_iii[i3 & 3](i2 | 0, i1 | 0) | 0;
19675}
19676function b8(i1, i2, i3, i4, i5, i6) {
19677 i1 = i1 | 0;
19678 i2 = i2 | 0;
19679 i3 = i3 | 0;
19680 i4 = i4 | 0;
19681 i5 = i5 | 0;
19682 i6 = i6 | 0;
19683 abort(8);
19684}
19685function __ZN25b2PolygonAndCircleContactD0Ev(i1) {
19686 i1 = i1 | 0;
19687 var i2 = 0;
19688 i2 = STACKTOP;
19689 __ZdlPv(i1);
19690 STACKTOP = i2;
19691 return;
19692}
19693function __ZN17b2ContactListener8PreSolveEP9b2ContactPK10b2Manifold(i1, i2, i3) {
19694 i1 = i1 | 0;
19695 i2 = i2 | 0;
19696 i3 = i3 | 0;
19697 return;
19698}
19699function __ZN24b2ChainAndPolygonContactD0Ev(i1) {
19700 i1 = i1 | 0;
19701 var i2 = 0;
19702 i2 = STACKTOP;
19703 __ZdlPv(i1);
19704 STACKTOP = i2;
19705 return;
19706}
19707function __ZN23b2EdgeAndPolygonContactD0Ev(i1) {
19708 i1 = i1 | 0;
19709 var i2 = 0;
19710 i2 = STACKTOP;
19711 __ZdlPv(i1);
19712 STACKTOP = i2;
19713 return;
19714}
19715function __ZN23b2ChainAndCircleContactD0Ev(i1) {
19716 i1 = i1 | 0;
19717 var i2 = 0;
19718 i2 = STACKTOP;
19719 __ZdlPv(i1);
19720 STACKTOP = i2;
19721 return;
19722}
19723function __ZNK11b2EdgeShape9TestPointERK11b2TransformRK6b2Vec2(i1, i2, i3) {
19724 i1 = i1 | 0;
19725 i2 = i2 | 0;
19726 i3 = i3 | 0;
19727 return 0;
19728}
19729function __ZN22b2EdgeAndCircleContactD0Ev(i1) {
19730 i1 = i1 | 0;
19731 var i2 = 0;
19732 i2 = STACKTOP;
19733 __ZdlPv(i1);
19734 STACKTOP = i2;
19735 return;
19736}
19737function __ZdlPv(i1) {
19738 i1 = i1 | 0;
19739 var i2 = 0;
19740 i2 = STACKTOP;
19741 if ((i1 | 0) != 0) {
19742 _free(i1);
19743 }
19744 STACKTOP = i2;
19745 return;
19746}
19747function b10(i1, i2, i3, i4, i5) {
19748 i1 = i1 | 0;
19749 i2 = i2 | 0;
19750 i3 = i3 | 0;
19751 i4 = i4 | 0;
19752 i5 = i5 | 0;
19753 abort(10);
19754 return 0;
19755}
19756function _strlen(i1) {
19757 i1 = i1 | 0;
19758 var i2 = 0;
19759 i2 = i1;
19760 while (HEAP8[i2] | 0) {
19761 i2 = i2 + 1 | 0;
19762 }
19763 return i2 - i1 | 0;
19764}
19765function __Z7b2Alloci(i1) {
19766 i1 = i1 | 0;
19767 var i2 = 0;
19768 i2 = STACKTOP;
19769 i1 = _malloc(i1) | 0;
19770 STACKTOP = i2;
19771 return i1 | 0;
19772}
19773function setThrew(i1, i2) {
19774 i1 = i1 | 0;
19775 i2 = i2 | 0;
19776 if ((__THREW__ | 0) == 0) {
19777 __THREW__ = i1;
19778 threwValue = i2;
19779 }
19780}
19781function __ZN17b2ContactListenerD0Ev(i1) {
19782 i1 = i1 | 0;
19783 var i2 = 0;
19784 i2 = STACKTOP;
19785 __ZdlPv(i1);
19786 STACKTOP = i2;
19787 return;
19788}
19789function __ZN16b2PolygonContactD0Ev(i1) {
19790 i1 = i1 | 0;
19791 var i2 = 0;
19792 i2 = STACKTOP;
19793 __ZdlPv(i1);
19794 STACKTOP = i2;
19795 return;
19796}
19797function dynCall_vii(i3, i2, i1) {
19798 i3 = i3 | 0;
19799 i2 = i2 | 0;
19800 i1 = i1 | 0;
19801 FUNCTION_TABLE_vii[i3 & 15](i2 | 0, i1 | 0);
19802}
19803function __ZN15b2ContactFilterD0Ev(i1) {
19804 i1 = i1 | 0;
19805 var i2 = 0;
19806 i2 = STACKTOP;
19807 __ZdlPv(i1);
19808 STACKTOP = i2;
19809 return;
19810}
19811function __ZN15b2CircleContactD0Ev(i1) {
19812 i1 = i1 | 0;
19813 var i2 = 0;
19814 i2 = STACKTOP;
19815 __ZdlPv(i1);
19816 STACKTOP = i2;
19817 return;
19818}
19819function __ZN14b2PolygonShapeD0Ev(i1) {
19820 i1 = i1 | 0;
19821 var i2 = 0;
19822 i2 = STACKTOP;
19823 __ZdlPv(i1);
19824 STACKTOP = i2;
19825 return;
19826}
19827function __Znaj(i1) {
19828 i1 = i1 | 0;
19829 var i2 = 0;
19830 i2 = STACKTOP;
19831 i1 = __Znwj(i1) | 0;
19832 STACKTOP = i2;
19833 return i1 | 0;
19834}
19835function __ZN11b2EdgeShapeD0Ev(i1) {
19836 i1 = i1 | 0;
19837 var i2 = 0;
19838 i2 = STACKTOP;
19839 __ZdlPv(i1);
19840 STACKTOP = i2;
19841 return;
19842}
19843function __ZN9b2ContactD0Ev(i1) {
19844 i1 = i1 | 0;
19845 var i2 = 0;
19846 i2 = STACKTOP;
19847 __ZdlPv(i1);
19848 STACKTOP = i2;
19849 return;
19850}
19851function b1(i1, i2, i3, i4, i5) {
19852 i1 = i1 | 0;
19853 i2 = i2 | 0;
19854 i3 = i3 | 0;
19855 i4 = i4 | 0;
19856 i5 = i5 | 0;
19857 abort(1);
19858}
19859function __Z6b2FreePv(i1) {
19860 i1 = i1 | 0;
19861 var i2 = 0;
19862 i2 = STACKTOP;
19863 _free(i1);
19864 STACKTOP = i2;
19865 return;
19866}
19867function ___clang_call_terminate(i1) {
19868 i1 = i1 | 0;
19869 ___cxa_begin_catch(i1 | 0) | 0;
19870 __ZSt9terminatev();
19871}
19872function __ZN17b2ContactListener12BeginContactEP9b2Contact(i1, i2) {
19873 i1 = i1 | 0;
19874 i2 = i2 | 0;
19875 return;
19876}
19877function dynCall_ii(i2, i1) {
19878 i2 = i2 | 0;
19879 i1 = i1 | 0;
19880 return FUNCTION_TABLE_ii[i2 & 3](i1 | 0) | 0;
19881}
19882function __ZN17b2ContactListener10EndContactEP9b2Contact(i1, i2) {
19883 i1 = i1 | 0;
19884 i2 = i2 | 0;
19885 return;
19886}
19887function b11(i1, i2, i3, i4) {
19888 i1 = i1 | 0;
19889 i2 = i2 | 0;
19890 i3 = i3 | 0;
19891 i4 = i4 | 0;
19892 abort(11);
19893}
19894function dynCall_vi(i2, i1) {
19895 i2 = i2 | 0;
19896 i1 = i1 | 0;
19897 FUNCTION_TABLE_vi[i2 & 31](i1 | 0);
19898}
19899function b0(i1, i2, i3) {
19900 i1 = i1 | 0;
19901 i2 = i2 | 0;
19902 i3 = i3 | 0;
19903 abort(0);
19904 return 0;
19905}
19906function __ZNK10__cxxabiv116__shim_type_info5noop2Ev(i1) {
19907 i1 = i1 | 0;
19908 return;
19909}
19910function __ZNK10__cxxabiv116__shim_type_info5noop1Ev(i1) {
19911 i1 = i1 | 0;
19912 return;
19913}
19914function b5(i1, i2, i3) {
19915 i1 = i1 | 0;
19916 i2 = i2 | 0;
19917 i3 = i3 | 0;
19918 abort(5);
19919}
19920function __ZNK14b2PolygonShape13GetChildCountEv(i1) {
19921 i1 = i1 | 0;
19922 return 1;
19923}
19924function __ZN10__cxxabiv116__shim_type_infoD2Ev(i1) {
19925 i1 = i1 | 0;
19926 return;
19927}
19928function b7(i1, i2, d3) {
19929 i1 = i1 | 0;
19930 i2 = i2 | 0;
19931 d3 = +d3;
19932 abort(7);
19933}
19934function __ZNK11b2EdgeShape13GetChildCountEv(i1) {
19935 i1 = i1 | 0;
19936 return 1;
19937}
19938function __ZNK7b2Timer15GetMillisecondsEv(i1) {
19939 i1 = i1 | 0;
19940 return 0.0;
19941}
19942function __ZN25b2PolygonAndCircleContactD1Ev(i1) {
19943 i1 = i1 | 0;
19944 return;
19945}
19946function __ZN24b2ChainAndPolygonContactD1Ev(i1) {
19947 i1 = i1 | 0;
19948 return;
19949}
19950function b9(i1, i2) {
19951 i1 = i1 | 0;
19952 i2 = i2 | 0;
19953 abort(9);
19954 return 0;
19955}
19956function __ZN23b2EdgeAndPolygonContactD1Ev(i1) {
19957 i1 = i1 | 0;
19958 return;
19959}
19960function __ZN23b2ChainAndCircleContactD1Ev(i1) {
19961 i1 = i1 | 0;
19962 return;
19963}
19964function __ZN22b2EdgeAndCircleContactD1Ev(i1) {
19965 i1 = i1 | 0;
19966 return;
19967}
19968function dynCall_v(i1) {
19969 i1 = i1 | 0;
19970 FUNCTION_TABLE_v[i1 & 3]();
19971}
19972function __ZNKSt9bad_alloc4whatEv(i1) {
19973 i1 = i1 | 0;
19974 return 7688;
19975}
19976function ___cxa_pure_virtual__wrapper() {
19977 ___cxa_pure_virtual();
19978}
19979function __ZN17b2ContactListenerD1Ev(i1) {
19980 i1 = i1 | 0;
19981 return;
19982}
19983function __ZN16b2PolygonContactD1Ev(i1) {
19984 i1 = i1 | 0;
19985 return;
19986}
19987function __ZN15b2ContactFilterD1Ev(i1) {
19988 i1 = i1 | 0;
19989 return;
19990}
19991function __ZN15b2CircleContactD1Ev(i1) {
19992 i1 = i1 | 0;
19993 return;
19994}
19995function __ZN14b2PolygonShapeD1Ev(i1) {
19996 i1 = i1 | 0;
19997 return;
19998}
19999function b3(i1, i2) {
20000 i1 = i1 | 0;
20001 i2 = i2 | 0;
20002 abort(3);
20003}
20004function runPostSets() {
20005 HEAP32[1932] = __ZTISt9exception;
20006}
20007function __ZN11b2EdgeShapeD1Ev(i1) {
20008 i1 = i1 | 0;
20009 return;
20010}
20011function __ZNSt9type_infoD2Ev(i1) {
20012 i1 = i1 | 0;
20013 return;
20014}
20015function __ZN7b2Timer5ResetEv(i1) {
20016 i1 = i1 | 0;
20017 return;
20018}
20019function stackRestore(i1) {
20020 i1 = i1 | 0;
20021 STACKTOP = i1;
20022}
20023function setTempRet9(i1) {
20024 i1 = i1 | 0;
20025 tempRet9 = i1;
20026}
20027function setTempRet8(i1) {
20028 i1 = i1 | 0;
20029 tempRet8 = i1;
20030}
20031function setTempRet7(i1) {
20032 i1 = i1 | 0;
20033 tempRet7 = i1;
20034}
20035function setTempRet6(i1) {
20036 i1 = i1 | 0;
20037 tempRet6 = i1;
20038}
20039function setTempRet5(i1) {
20040 i1 = i1 | 0;
20041 tempRet5 = i1;
20042}
20043function setTempRet4(i1) {
20044 i1 = i1 | 0;
20045 tempRet4 = i1;
20046}
20047function setTempRet3(i1) {
20048 i1 = i1 | 0;
20049 tempRet3 = i1;
20050}
20051function setTempRet2(i1) {
20052 i1 = i1 | 0;
20053 tempRet2 = i1;
20054}
20055function setTempRet1(i1) {
20056 i1 = i1 | 0;
20057 tempRet1 = i1;
20058}
20059function setTempRet0(i1) {
20060 i1 = i1 | 0;
20061 tempRet0 = i1;
20062}
20063function __ZN9b2ContactD1Ev(i1) {
20064 i1 = i1 | 0;
20065 return;
20066}
20067function __ZN7b2TimerC2Ev(i1) {
20068 i1 = i1 | 0;
20069 return;
20070}
20071function b4(i1) {
20072 i1 = i1 | 0;
20073 abort(4);
20074 return 0;
20075}
20076function stackSave() {
20077 return STACKTOP | 0;
20078}
20079function b2(i1) {
20080 i1 = i1 | 0;
20081 abort(2);
20082}
20083function b6() {
20084 abort(6);
20085}
20086
20087// EMSCRIPTEN_END_FUNCS
20088 var FUNCTION_TABLE_iiii = [b0,__ZNK11b2EdgeShape9TestPointERK11b2TransformRK6b2Vec2,__ZNK14b2PolygonShape9TestPointERK11b2TransformRK6b2Vec2,__ZN15b2ContactFilter13ShouldCollideEP9b2FixtureS1_,__ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv,b0,b0,b0];
20089 var FUNCTION_TABLE_viiiii = [b1,__ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,__ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b1];
20090 var FUNCTION_TABLE_vi = [b2,__ZN11b2EdgeShapeD1Ev,__ZN11b2EdgeShapeD0Ev,__ZN14b2PolygonShapeD1Ev,__ZN14b2PolygonShapeD0Ev,__ZN17b2ContactListenerD1Ev,__ZN17b2ContactListenerD0Ev,__ZN15b2ContactFilterD1Ev,__ZN15b2ContactFilterD0Ev,__ZN9b2ContactD1Ev,__ZN9b2ContactD0Ev,__ZN22b2EdgeAndCircleContactD1Ev,__ZN22b2EdgeAndCircleContactD0Ev,__ZN23b2EdgeAndPolygonContactD1Ev,__ZN23b2EdgeAndPolygonContactD0Ev,__ZN25b2PolygonAndCircleContactD1Ev,__ZN25b2PolygonAndCircleContactD0Ev,__ZN16b2PolygonContactD1Ev,__ZN16b2PolygonContactD0Ev,__ZN23b2ChainAndCircleContactD1Ev,__ZN23b2ChainAndCircleContactD0Ev,__ZN24b2ChainAndPolygonContactD1Ev,__ZN24b2ChainAndPolygonContactD0Ev,__ZN15b2CircleContactD1Ev,__ZN15b2CircleContactD0Ev,__ZN10__cxxabiv116__shim_type_infoD2Ev,__ZN10__cxxabiv117__class_type_infoD0Ev,__ZNK10__cxxabiv116__shim_type_info5noop1Ev,__ZNK10__cxxabiv116__shim_type_info5noop2Ev
20091 ,__ZN10__cxxabiv120__si_class_type_infoD0Ev,__ZNSt9bad_allocD2Ev,__ZNSt9bad_allocD0Ev];
20092 var FUNCTION_TABLE_vii = [b3,__ZN17b2ContactListener12BeginContactEP9b2Contact,__ZN17b2ContactListener10EndContactEP9b2Contact,__ZN15b2CircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN25b2PolygonAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN16b2PolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN22b2EdgeAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN23b2EdgeAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN23b2ChainAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN24b2ChainAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,b3,b3,b3,b3,b3,b3];
20093 var FUNCTION_TABLE_ii = [b4,__ZNK11b2EdgeShape13GetChildCountEv,__ZNK14b2PolygonShape13GetChildCountEv,__ZNKSt9bad_alloc4whatEv];
20094 var FUNCTION_TABLE_viii = [b5,__ZN17b2ContactListener8PreSolveEP9b2ContactPK10b2Manifold,__ZN17b2ContactListener9PostSolveEP9b2ContactPK16b2ContactImpulse,b5];
20095 var FUNCTION_TABLE_v = [b6,___cxa_pure_virtual__wrapper,__Z4iterv,b6];
20096 var FUNCTION_TABLE_viid = [b7,__ZNK11b2EdgeShape11ComputeMassEP10b2MassDataf,__ZNK14b2PolygonShape11ComputeMassEP10b2MassDataf,b7];
20097 var FUNCTION_TABLE_viiiiii = [b8,__ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,__ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b8];
20098 var FUNCTION_TABLE_iii = [b9,__ZNK11b2EdgeShape5CloneEP16b2BlockAllocator,__ZNK14b2PolygonShape5CloneEP16b2BlockAllocator,__Z14b2PairLessThanRK6b2PairS1_];
20099 var FUNCTION_TABLE_iiiiii = [b10,__ZNK11b2EdgeShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi,__ZNK14b2PolygonShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi,__ZN15b2CircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN25b2PolygonAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN16b2PolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN22b2EdgeAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN23b2EdgeAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN23b2ChainAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,__ZN24b2ChainAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator,b10,b10,b10,b10,b10,b10];
20100 var FUNCTION_TABLE_viiii = [b11,__ZNK11b2EdgeShape11ComputeAABBEP6b2AABBRK11b2Transformi,__ZNK14b2PolygonShape11ComputeAABBEP6b2AABBRK11b2Transformi,__ZN22b2EdgeAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN23b2EdgeAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN25b2PolygonAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN16b2PolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN23b2ChainAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN24b2ChainAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZN15b2CircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_,__ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,__ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b11,b11,b11,b11];
20101
20102 return { _strlen: _strlen, _free: _free, _main: _main, _memset: _memset, _malloc: _malloc, _memcpy: _memcpy, runPostSets: runPostSets, stackAlloc: stackAlloc, stackSave: stackSave, stackRestore: stackRestore, setThrew: setThrew, setTempRet0: setTempRet0, setTempRet1: setTempRet1, setTempRet2: setTempRet2, setTempRet3: setTempRet3, setTempRet4: setTempRet4, setTempRet5: setTempRet5, setTempRet6: setTempRet6, setTempRet7: setTempRet7, setTempRet8: setTempRet8, setTempRet9: setTempRet9, dynCall_iiii: dynCall_iiii, dynCall_viiiii: dynCall_viiiii, dynCall_vi: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_ii: dynCall_ii, dynCall_viii: dynCall_viii, dynCall_v: dynCall_v, dynCall_viid: dynCall_viid, dynCall_viiiiii: dynCall_viiiiii, dynCall_iii: dynCall_iii, dynCall_iiiiii: dynCall_iiiiii, dynCall_viiii: dynCall_viiii };
20103}).toString(),
20104// EMSCRIPTEN_END_ASM
20105{ "abort": abort, "assert": assert, "asmPrintInt": asmPrintInt, "asmPrintFloat": asmPrintFloat, "min": Math_min, "invoke_iiii": invoke_iiii, "invoke_viiiii": invoke_viiiii, "invoke_vi": invoke_vi, "invoke_vii": invoke_vii, "invoke_ii": invoke_ii, "invoke_viii": invoke_viii, "invoke_v": invoke_v, "invoke_viid": invoke_viid, "invoke_viiiiii": invoke_viiiiii, "invoke_iii": invoke_iii, "invoke_iiiiii": invoke_iiiiii, "invoke_viiii": invoke_viiii, "___cxa_throw": ___cxa_throw, "_emscripten_run_script": _emscripten_run_script, "_cosf": _cosf, "_send": _send, "__ZSt9terminatev": __ZSt9terminatev, "__reallyNegative": __reallyNegative, "___cxa_is_number_type": ___cxa_is_number_type, "___assert_fail": ___assert_fail, "___cxa_allocate_exception": ___cxa_allocate_exception, "___cxa_find_matching_catch": ___cxa_find_matching_catch, "_fflush": _fflush, "_pwrite": _pwrite, "___setErrNo": ___setErrNo, "_sbrk": _sbrk, "___cxa_begin_catch": ___cxa_begin_catch, "_sinf": _sinf, "_fileno": _fileno, "___resumeException": ___resumeException, "__ZSt18uncaught_exceptionv": __ZSt18uncaught_exceptionv, "_sysconf": _sysconf, "_clock": _clock, "_emscripten_memcpy_big": _emscripten_memcpy_big, "_puts": _puts, "_mkport": _mkport, "_floorf": _floorf, "_sqrtf": _sqrtf, "_write": _write, "_emscripten_set_main_loop": _emscripten_set_main_loop, "___errno_location": ___errno_location, "__ZNSt9exceptionD2Ev": __ZNSt9exceptionD2Ev, "_printf": _printf, "___cxa_does_inherit": ___cxa_does_inherit, "__exit": __exit, "_fputc": _fputc, "_abort": _abort, "_fwrite": _fwrite, "_time": _time, "_fprintf": _fprintf, "_emscripten_cancel_main_loop": _emscripten_cancel_main_loop, "__formatString": __formatString, "_fputs": _fputs, "_exit": _exit, "___cxa_pure_virtual": ___cxa_pure_virtual, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "NaN": NaN, "Infinity": Infinity, "__ZTISt9exception": __ZTISt9exception }, buffer);
20106var _strlen = Module["_strlen"] = asm["_strlen"];
20107var _free = Module["_free"] = asm["_free"];
20108var _main = Module["_main"] = asm["_main"];
20109var _memset = Module["_memset"] = asm["_memset"];
20110var _malloc = Module["_malloc"] = asm["_malloc"];
20111var _memcpy = Module["_memcpy"] = asm["_memcpy"];
20112var runPostSets = Module["runPostSets"] = asm["runPostSets"];
20113var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"];
20114var dynCall_viiiii = Module["dynCall_viiiii"] = asm["dynCall_viiiii"];
20115var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"];
20116var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
20117var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"];
20118var dynCall_viii = Module["dynCall_viii"] = asm["dynCall_viii"];
20119var dynCall_v = Module["dynCall_v"] = asm["dynCall_v"];
20120var dynCall_viid = Module["dynCall_viid"] = asm["dynCall_viid"];
20121var dynCall_viiiiii = Module["dynCall_viiiiii"] = asm["dynCall_viiiiii"];
20122var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"];
20123var dynCall_iiiiii = Module["dynCall_iiiiii"] = asm["dynCall_iiiiii"];
20124var dynCall_viiii = Module["dynCall_viiii"] = asm["dynCall_viiii"];
20125
20126Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) };
20127Runtime.stackSave = function() { return asm['stackSave']() };
20128Runtime.stackRestore = function(top) { asm['stackRestore'](top) };
20129
20130
20131// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included
20132var i64Math = null;
20133
20134// === Auto-generated postamble setup entry stuff ===
20135
20136if (memoryInitializer) {
20137 if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
20138 var data = Module['readBinary'](memoryInitializer);
20139 HEAPU8.set(data, STATIC_BASE);
20140 } else {
20141 addRunDependency('memory initializer');
20142 Browser.asyncLoad(memoryInitializer, function(data) {
20143 HEAPU8.set(data, STATIC_BASE);
20144 removeRunDependency('memory initializer');
20145 }, function(data) {
20146 throw 'could not load memory initializer ' + memoryInitializer;
20147 });
20148 }
20149}
20150
20151function ExitStatus(status) {
20152 this.name = "ExitStatus";
20153 this.message = "Program terminated with exit(" + status + ")";
20154 this.status = status;
20155};
20156ExitStatus.prototype = new Error();
20157ExitStatus.prototype.constructor = ExitStatus;
20158
20159var initialStackTop;
20160var preloadStartTime = null;
20161var calledMain = false;
20162
20163dependenciesFulfilled = function runCaller() {
20164 // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
20165 if (!Module['calledRun'] && shouldRunNow) run([].concat(Module["arguments"]));
20166 if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
20167}
20168
20169Module['callMain'] = Module.callMain = function callMain(args) {
20170 assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
20171 assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called');
20172
20173 args = args || [];
20174
20175 ensureInitRuntime();
20176
20177 var argc = args.length+1;
20178 function pad() {
20179 for (var i = 0; i < 4-1; i++) {
20180 argv.push(0);
20181 }
20182 }
20183 var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL) ];
20184 pad();
20185 for (var i = 0; i < argc-1; i = i + 1) {
20186 argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
20187 pad();
20188 }
20189 argv.push(0);
20190 argv = allocate(argv, 'i32', ALLOC_NORMAL);
20191
20192 initialStackTop = STACKTOP;
20193
20194 try {
20195
20196 var ret = Module['_main'](argc, argv, 0);
20197
20198
20199 // if we're not running an evented main loop, it's time to exit
20200 if (!Module['noExitRuntime']) {
20201 exit(ret);
20202 }
20203 }
20204 catch(e) {
20205 if (e instanceof ExitStatus) {
20206 // exit() throws this once it's done to make sure execution
20207 // has been stopped completely
20208 return;
20209 } else if (e == 'SimulateInfiniteLoop') {
20210 // running an evented main loop, don't immediately exit
20211 Module['noExitRuntime'] = true;
20212 return;
20213 } else {
20214 if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]);
20215 throw e;
20216 }
20217 } finally {
20218 calledMain = true;
20219 }
20220}
20221
20222
20223
20224
20225function run(args) {
20226 args = args || Module['arguments'];
20227
20228 if (preloadStartTime === null) preloadStartTime = Date.now();
20229
20230 if (runDependencies > 0) {
20231 Module.printErr('run() called, but dependencies remain, so not running');
20232 return;
20233 }
20234
20235 preRun();
20236
20237 if (runDependencies > 0) return; // a preRun added a dependency, run will be called later
20238 if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame
20239
20240 function doRun() {
20241 if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening
20242 Module['calledRun'] = true;
20243
20244 ensureInitRuntime();
20245
20246 preMain();
20247
20248 if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
20249 Module.printErr('pre-main prep time: ' + (Date.now() - preloadStartTime) + ' ms');
20250 }
20251
20252 if (Module['_main'] && shouldRunNow) {
20253 Module['callMain'](args);
20254 }
20255
20256 postRun();
20257 }
20258
20259 if (Module['setStatus']) {
20260 Module['setStatus']('Running...');
20261 setTimeout(function() {
20262 setTimeout(function() {
20263 Module['setStatus']('');
20264 }, 1);
20265 if (!ABORT) doRun();
20266 }, 1);
20267 } else {
20268 doRun();
20269 }
20270}
20271Module['run'] = Module.run = run;
20272
20273function exit(status) {
20274 ABORT = true;
20275 EXITSTATUS = status;
20276 STACKTOP = initialStackTop;
20277
20278 // exit the runtime
20279 exitRuntime();
20280
20281 // TODO We should handle this differently based on environment.
20282 // In the browser, the best we can do is throw an exception
20283 // to halt execution, but in node we could process.exit and
20284 // I'd imagine SM shell would have something equivalent.
20285 // This would let us set a proper exit status (which
20286 // would be great for checking test exit statuses).
20287 // https://github.com/kripken/emscripten/issues/1371
20288
20289 // throw an exception to halt the current execution
20290 throw new ExitStatus(status);
20291}
20292Module['exit'] = Module.exit = exit;
20293
20294function abort(text) {
20295 if (text) {
20296 Module.print(text);
20297 Module.printErr(text);
20298 }
20299
20300 ABORT = true;
20301 EXITSTATUS = 1;
20302
20303 var extra = '\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.';
20304
20305 throw 'abort() at ' + stackTrace() + extra;
20306}
20307Module['abort'] = Module.abort = abort;
20308
20309// {{PRE_RUN_ADDITIONS}}
20310
20311if (Module['preInit']) {
20312 if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
20313 while (Module['preInit'].length > 0) {
20314 Module['preInit'].pop()();
20315 }
20316}
20317
20318// shouldRunNow refers to calling main(), not run().
20319var shouldRunNow = true;
20320if (Module['noInitialRun']) {
20321 shouldRunNow = false;
20322}
20323
20324
20325run([].concat(Module["arguments"]));