• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// 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"]));
20326