1 var EXPECTED_OUTPUT = 2 /frame averages: .+ \+- .+, range: .+ to .+ \n/; 3 var Module = { 4 arguments: [1], 5 print: function(x) {Module.printBuffer += x + '\n';}, 6 preRun: [function() {Module.printBuffer = ''}], 7 postRun: [function() { 8 assertTrue(EXPECTED_OUTPUT.test(Module.printBuffer)); 9 }], 10 }; 11 // The Module object: Our interface to the outside world. We import 12 // and export values on it, and do the work to get that through 13 // closure compiler if necessary. There are various ways Module can be used: 14 // 1. Not defined. We create it here 15 // 2. A function parameter, function(Module) { ..generated code.. } 16 // 3. pre-run appended it, var Module = {}; ..generated code.. 17 // 4. External script tag defines var Module. 18 // We need to do an eval in order to handle the closure compiler 19 // case, where this code here is minified but Module was defined 20 // elsewhere (e.g. case 4 above). We also need to check if Module 21 // already exists (e.g. case 3 above). 22 // Note that if you want to run closure, and also to use Module 23 // after the generated code, you will need to define var Module = {}; 24 // before the code. Then that object will be used in the code, and you 25 // can continue to use Module afterwards as well. 26 var Module; 27 if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {}; 28 29 // Sometimes an existing Module object exists with properties 30 // meant to overwrite the default module functionality. Here 31 // we collect those properties and reapply _after_ we configure 32 // the current environment's defaults to avoid having to be so 33 // defensive during initialization. 34 var moduleOverrides = {}; 35 for (var key in Module) { 36 if (Module.hasOwnProperty(key)) { 37 moduleOverrides[key] = Module[key]; 38 } 39 } 40 41 // The environment setup code below is customized to use Module. 42 // *** Environment setup code *** 43 var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function'; 44 var ENVIRONMENT_IS_WEB = typeof window === 'object'; 45 var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; 46 var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; 47 48 if (ENVIRONMENT_IS_NODE) { 49 // Expose functionality in the same simple way that the shells work 50 // Note that we pollute the global namespace here, otherwise we break in node 51 if (!Module['print']) Module['print'] = function print(x) { 52 process['stdout'].write(x + '\n'); 53 }; 54 if (!Module['printErr']) Module['printErr'] = function printErr(x) { 55 process['stderr'].write(x + '\n'); 56 }; 57 58 var nodeFS = require('fs'); 59 var nodePath = require('path'); 60 61 Module['read'] = function read(filename, binary) { 62 filename = nodePath['normalize'](filename); 63 var ret = nodeFS['readFileSync'](filename); 64 // The path is absolute if the normalized version is the same as the resolved. 65 if (!ret && filename != nodePath['resolve'](filename)) { 66 filename = path.join(__dirname, '..', 'src', filename); 67 ret = nodeFS['readFileSync'](filename); 68 } 69 if (ret && !binary) ret = ret.toString(); 70 return ret; 71 }; 72 73 Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) }; 74 75 Module['load'] = function load(f) { 76 globalEval(read(f)); 77 }; 78 79 Module['arguments'] = process['argv'].slice(2); 80 81 module['exports'] = Module; 82 } 83 else if (ENVIRONMENT_IS_SHELL) { 84 if (!Module['print']) Module['print'] = print; 85 if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm 86 87 if (typeof read != 'undefined') { 88 Module['read'] = read; 89 } else { 90 Module['read'] = function read() { throw 'no read() available (jsc?)' }; 91 } 92 93 Module['readBinary'] = function readBinary(f) { 94 return read(f, 'binary'); 95 }; 96 97 if (typeof scriptArgs != 'undefined') { 98 Module['arguments'] = scriptArgs; 99 } else if (typeof arguments != 'undefined') { 100 Module['arguments'] = arguments; 101 } 102 103 this['Module'] = Module; 104 105 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) 106 } 107 else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { 108 Module['read'] = function read(url) { 109 var xhr = new XMLHttpRequest(); 110 xhr.open('GET', url, false); 111 xhr.send(null); 112 return xhr.responseText; 113 }; 114 115 if (typeof arguments != 'undefined') { 116 Module['arguments'] = arguments; 117 } 118 119 if (typeof console !== 'undefined') { 120 if (!Module['print']) Module['print'] = function print(x) { 121 console.log(x); 122 }; 123 if (!Module['printErr']) Module['printErr'] = function printErr(x) { 124 console.log(x); 125 }; 126 } else { 127 // Probably a worker, and without console.log. We can do very little here... 128 var TRY_USE_DUMP = false; 129 if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) { 130 dump(x); 131 }) : (function(x) { 132 // self.postMessage(x); // enable this if you want stdout to be sent as messages 133 })); 134 } 135 136 if (ENVIRONMENT_IS_WEB) { 137 window['Module'] = Module; 138 } else { 139 Module['load'] = importScripts; 140 } 141 } 142 else { 143 // Unreachable because SHELL is dependant on the others 144 throw 'Unknown runtime environment. Where are we?'; 145 } 146 147 function globalEval(x) { 148 eval.call(null, x); 149 } 150 if (!Module['load'] == 'undefined' && Module['read']) { 151 Module['load'] = function load(f) { 152 globalEval(Module['read'](f)); 153 }; 154 } 155 if (!Module['print']) { 156 Module['print'] = function(){}; 157 } 158 if (!Module['printErr']) { 159 Module['printErr'] = Module['print']; 160 } 161 if (!Module['arguments']) { 162 Module['arguments'] = []; 163 } 164 // *** Environment setup code *** 165 166 // Closure helpers 167 Module.print = Module['print']; 168 Module.printErr = Module['printErr']; 169 170 // Callbacks 171 Module['preRun'] = []; 172 Module['postRun'] = []; 173 174 // Merge back in the overrides 175 for (var key in moduleOverrides) { 176 if (moduleOverrides.hasOwnProperty(key)) { 177 Module[key] = moduleOverrides[key]; 178 } 179 } 180 181 182 183 // === Auto-generated preamble library stuff === 184 185 //======================================== 186 // Runtime code shared with compiler 187 //======================================== 188 189 var Runtime = { 190 stackSave: function () { 191 return STACKTOP; 192 }, 193 stackRestore: function (stackTop) { 194 STACKTOP = stackTop; 195 }, 196 forceAlign: function (target, quantum) { 197 quantum = quantum || 4; 198 if (quantum == 1) return target; 199 if (isNumber(target) && isNumber(quantum)) { 200 return Math.ceil(target/quantum)*quantum; 201 } else if (isNumber(quantum) && isPowerOfTwo(quantum)) { 202 return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')'; 203 } 204 return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum; 205 }, 206 isNumberType: function (type) { 207 return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES; 208 }, 209 isPointerType: function isPointerType(type) { 210 return type[type.length-1] == '*'; 211 }, 212 isStructType: function isStructType(type) { 213 if (isPointerType(type)) return false; 214 if (isArrayType(type)) return true; 215 if (/<?\{ ?[^}]* ?\}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types 216 // See comment in isStructPointerType() 217 return type[0] == '%'; 218 }, 219 INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0}, 220 FLOAT_TYPES: {"float":0,"double":0}, 221 or64: function (x, y) { 222 var l = (x | 0) | (y | 0); 223 var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296; 224 return l + h; 225 }, 226 and64: function (x, y) { 227 var l = (x | 0) & (y | 0); 228 var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296; 229 return l + h; 230 }, 231 xor64: function (x, y) { 232 var l = (x | 0) ^ (y | 0); 233 var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296; 234 return l + h; 235 }, 236 getNativeTypeSize: function (type) { 237 switch (type) { 238 case 'i1': case 'i8': return 1; 239 case 'i16': return 2; 240 case 'i32': return 4; 241 case 'i64': return 8; 242 case 'float': return 4; 243 case 'double': return 8; 244 default: { 245 if (type[type.length-1] === '*') { 246 return Runtime.QUANTUM_SIZE; // A pointer 247 } else if (type[0] === 'i') { 248 var bits = parseInt(type.substr(1)); 249 assert(bits % 8 === 0); 250 return bits/8; 251 } else { 252 return 0; 253 } 254 } 255 } 256 }, 257 getNativeFieldSize: function (type) { 258 return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE); 259 }, 260 dedup: function dedup(items, ident) { 261 var seen = {}; 262 if (ident) { 263 return items.filter(function(item) { 264 if (seen[item[ident]]) return false; 265 seen[item[ident]] = true; 266 return true; 267 }); 268 } else { 269 return items.filter(function(item) { 270 if (seen[item]) return false; 271 seen[item] = true; 272 return true; 273 }); 274 } 275 }, 276 set: function set() { 277 var args = typeof arguments[0] === 'object' ? arguments[0] : arguments; 278 var ret = {}; 279 for (var i = 0; i < args.length; i++) { 280 ret[args[i]] = 0; 281 } 282 return ret; 283 }, 284 STACK_ALIGN: 8, 285 getAlignSize: function (type, size, vararg) { 286 // we align i64s and doubles on 64-bit boundaries, unlike x86 287 if (!vararg && (type == 'i64' || type == 'double')) return 8; 288 if (!type) return Math.min(size, 8); // align structures internally to 64 bits 289 return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE); 290 }, 291 calculateStructAlignment: function calculateStructAlignment(type) { 292 type.flatSize = 0; 293 type.alignSize = 0; 294 var diffs = []; 295 var prev = -1; 296 var index = 0; 297 type.flatIndexes = type.fields.map(function(field) { 298 index++; 299 var size, alignSize; 300 if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) { 301 size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s. 302 alignSize = Runtime.getAlignSize(field, size); 303 } else if (Runtime.isStructType(field)) { 304 if (field[1] === '0') { 305 // this is [0 x something]. When inside another structure like here, it must be at the end, 306 // and it adds no size 307 // XXX this happens in java-nbody for example... assert(index === type.fields.length, 'zero-length in the middle!'); 308 size = 0; 309 if (Types.types[field]) { 310 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize); 311 } else { 312 alignSize = type.alignSize || QUANTUM_SIZE; 313 } 314 } else { 315 size = Types.types[field].flatSize; 316 alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize); 317 } 318 } else if (field[0] == 'b') { 319 // bN, large number field, like a [N x i8] 320 size = field.substr(1)|0; 321 alignSize = 1; 322 } else if (field[0] === '<') { 323 // vector type 324 size = alignSize = Types.types[field].flatSize; // fully aligned 325 } else if (field[0] === 'i') { 326 // illegal integer field, that could not be legalized because it is an internal structure field 327 // it is ok to have such fields, if we just use them as markers of field size and nothing more complex 328 size = alignSize = parseInt(field.substr(1))/8; 329 assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field); 330 } else { 331 assert(false, 'invalid type for calculateStructAlignment'); 332 } 333 if (type.packed) alignSize = 1; 334 type.alignSize = Math.max(type.alignSize, alignSize); 335 var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory 336 type.flatSize = curr + size; 337 if (prev >= 0) { 338 diffs.push(curr-prev); 339 } 340 prev = curr; 341 return curr; 342 }); 343 if (type.name_ && type.name_[0] === '[') { 344 // arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid 345 // allocating a potentially huge array for [999999 x i8] etc. 346 type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2; 347 } 348 type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize); 349 if (diffs.length == 0) { 350 type.flatFactor = type.flatSize; 351 } else if (Runtime.dedup(diffs).length == 1) { 352 type.flatFactor = diffs[0]; 353 } 354 type.needsFlattening = (type.flatFactor != 1); 355 return type.flatIndexes; 356 }, 357 generateStructInfo: function (struct, typeName, offset) { 358 var type, alignment; 359 if (typeName) { 360 offset = offset || 0; 361 type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName]; 362 if (!type) return null; 363 if (type.fields.length != struct.length) { 364 printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo'); 365 return null; 366 } 367 alignment = type.flatIndexes; 368 } else { 369 var type = { fields: struct.map(function(item) { return item[0] }) }; 370 alignment = Runtime.calculateStructAlignment(type); 371 } 372 var ret = { 373 __size__: type.flatSize 374 }; 375 if (typeName) { 376 struct.forEach(function(item, i) { 377 if (typeof item === 'string') { 378 ret[item] = alignment[i] + offset; 379 } else { 380 // embedded struct 381 var key; 382 for (var k in item) key = k; 383 ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]); 384 } 385 }); 386 } else { 387 struct.forEach(function(item, i) { 388 ret[item[1]] = alignment[i]; 389 }); 390 } 391 return ret; 392 }, 393 dynCall: function (sig, ptr, args) { 394 if (args && args.length) { 395 if (!args.splice) args = Array.prototype.slice.call(args); 396 args.splice(0, 0, ptr); 397 return Module['dynCall_' + sig].apply(null, args); 398 } else { 399 return Module['dynCall_' + sig].call(null, ptr); 400 } 401 }, 402 functionPointers: [], 403 addFunction: function (func) { 404 for (var i = 0; i < Runtime.functionPointers.length; i++) { 405 if (!Runtime.functionPointers[i]) { 406 Runtime.functionPointers[i] = func; 407 return 2*(1 + i); 408 } 409 } 410 throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.'; 411 }, 412 removeFunction: function (index) { 413 Runtime.functionPointers[(index-2)/2] = null; 414 }, 415 getAsmConst: function (code, numArgs) { 416 // code is a constant string on the heap, so we can cache these 417 if (!Runtime.asmConstCache) Runtime.asmConstCache = {}; 418 var func = Runtime.asmConstCache[code]; 419 if (func) return func; 420 var args = []; 421 for (var i = 0; i < numArgs; i++) { 422 args.push(String.fromCharCode(36) + i); // $0, $1 etc 423 } 424 var source = Pointer_stringify(code); 425 if (source[0] === '"') { 426 // tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct 427 if (source.indexOf('"', 1) === source.length-1) { 428 source = source.substr(1, source.length-2); 429 } else { 430 // something invalid happened, e.g. EM_ASM("..code($0)..", input) 431 abort('invalid EM_ASM input |' + source + '|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)'); 432 } 433 } 434 try { 435 var evalled = eval('(function(' + args.join(',') + '){ ' + source + ' })'); // new Function does not allow upvars in node 436 } catch(e) { 437 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.)'); 438 throw e; 439 } 440 return Runtime.asmConstCache[code] = evalled; 441 }, 442 warnOnce: function (text) { 443 if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {}; 444 if (!Runtime.warnOnce.shown[text]) { 445 Runtime.warnOnce.shown[text] = 1; 446 Module.printErr(text); 447 } 448 }, 449 funcWrappers: {}, 450 getFuncWrapper: function (func, sig) { 451 assert(sig); 452 if (!Runtime.funcWrappers[func]) { 453 Runtime.funcWrappers[func] = function dynCall_wrapper() { 454 return Runtime.dynCall(sig, func, arguments); 455 }; 456 } 457 return Runtime.funcWrappers[func]; 458 }, 459 UTF8Processor: function () { 460 var buffer = []; 461 var needed = 0; 462 this.processCChar = function (code) { 463 code = code & 0xFF; 464 465 if (buffer.length == 0) { 466 if ((code & 0x80) == 0x00) { // 0xxxxxxx 467 return String.fromCharCode(code); 468 } 469 buffer.push(code); 470 if ((code & 0xE0) == 0xC0) { // 110xxxxx 471 needed = 1; 472 } else if ((code & 0xF0) == 0xE0) { // 1110xxxx 473 needed = 2; 474 } else { // 11110xxx 475 needed = 3; 476 } 477 return ''; 478 } 479 480 if (needed) { 481 buffer.push(code); 482 needed--; 483 if (needed > 0) return ''; 484 } 485 486 var c1 = buffer[0]; 487 var c2 = buffer[1]; 488 var c3 = buffer[2]; 489 var c4 = buffer[3]; 490 var ret; 491 if (buffer.length == 2) { 492 ret = String.fromCharCode(((c1 & 0x1F) << 6) | (c2 & 0x3F)); 493 } else if (buffer.length == 3) { 494 ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F)); 495 } else { 496 // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae 497 var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) | 498 ((c3 & 0x3F) << 6) | (c4 & 0x3F); 499 ret = String.fromCharCode( 500 Math.floor((codePoint - 0x10000) / 0x400) + 0xD800, 501 (codePoint - 0x10000) % 0x400 + 0xDC00); 502 } 503 buffer.length = 0; 504 return ret; 505 } 506 this.processJSString = function processJSString(string) { 507 /* TODO: use TextEncoder when present, 508 var encoder = new TextEncoder(); 509 encoder['encoding'] = "utf-8"; 510 var utf8Array = encoder['encode'](aMsg.data); 511 */ 512 string = unescape(encodeURIComponent(string)); 513 var ret = []; 514 for (var i = 0; i < string.length; i++) { 515 ret.push(string.charCodeAt(i)); 516 } 517 return ret; 518 } 519 }, 520 getCompilerSetting: function (name) { 521 throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work'; 522 }, 523 stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+7)&-8); return ret; }, 524 staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; }, 525 dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; }, 526 alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; }, 527 makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+4294967296)))); return ret; }, 528 GLOBAL_BASE: 8, 529 QUANTUM_SIZE: 4, 530 __dummy__: 0 531 } 532 533 534 Module['Runtime'] = Runtime; 535 536 537 538 539 540 541 542 543 544 //======================================== 545 // Runtime essentials 546 //======================================== 547 548 var __THREW__ = 0; // Used in checking for thrown exceptions. 549 550 var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort() 551 var EXITSTATUS = 0; 552 553 var undef = 0; 554 // tempInt is used for 32-bit signed values or smaller. tempBigInt is used 555 // for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt 556 var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat; 557 var tempI64, tempI64b; 558 var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9; 559 560 function assert(condition, text) { 561 if (!condition) { 562 abort('Assertion failed: ' + text); 563 } 564 } 565 566 var globalScope = this; 567 568 // C calling interface. A convenient way to call C functions (in C files, or 569 // defined with extern "C"). 570 // 571 // Note: LLVM optimizations can inline and remove functions, after which you will not be 572 // able to call them. Closure can also do so. To avoid that, add your function to 573 // the exports using something like 574 // 575 // -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]' 576 // 577 // @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C") 578 // @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and 579 // 'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit). 580 // @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, 581 // except that 'array' is not possible (there is no way for us to know the length of the array) 582 // @param args An array of the arguments to the function, as native JS values (as in returnType) 583 // Note that string arguments will be stored on the stack (the JS string will become a C string on the stack). 584 // @return The return value, as a native JS value (as in returnType) 585 function ccall(ident, returnType, argTypes, args) { 586 return ccallFunc(getCFunc(ident), returnType, argTypes, args); 587 } 588 Module["ccall"] = ccall; 589 590 // Returns the C function with a specified identifier (for C++, you need to do manual name mangling) 591 function getCFunc(ident) { 592 try { 593 var func = Module['_' + ident]; // closure exported function 594 if (!func) func = eval('_' + ident); // explicit lookup 595 } catch(e) { 596 } 597 assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)'); 598 return func; 599 } 600 601 // Internal function that does a C call using a function, not an identifier 602 function ccallFunc(func, returnType, argTypes, args) { 603 var stack = 0; 604 function toC(value, type) { 605 if (type == 'string') { 606 if (value === null || value === undefined || value === 0) return 0; // null string 607 value = intArrayFromString(value); 608 type = 'array'; 609 } 610 if (type == 'array') { 611 if (!stack) stack = Runtime.stackSave(); 612 var ret = Runtime.stackAlloc(value.length); 613 writeArrayToMemory(value, ret); 614 return ret; 615 } 616 return value; 617 } 618 function fromC(value, type) { 619 if (type == 'string') { 620 return Pointer_stringify(value); 621 } 622 assert(type != 'array'); 623 return value; 624 } 625 var i = 0; 626 var cArgs = args ? args.map(function(arg) { 627 return toC(arg, argTypes[i++]); 628 }) : []; 629 var ret = fromC(func.apply(null, cArgs), returnType); 630 if (stack) Runtime.stackRestore(stack); 631 return ret; 632 } 633 634 // Returns a native JS wrapper for a C function. This is similar to ccall, but 635 // returns a function you can call repeatedly in a normal way. For example: 636 // 637 // var my_function = cwrap('my_c_function', 'number', ['number', 'number']); 638 // alert(my_function(5, 22)); 639 // alert(my_function(99, 12)); 640 // 641 function cwrap(ident, returnType, argTypes) { 642 var func = getCFunc(ident); 643 return function() { 644 return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments)); 645 } 646 } 647 Module["cwrap"] = cwrap; 648 649 // Sets a value in memory in a dynamic way at run-time. Uses the 650 // type data. This is the same as makeSetValue, except that 651 // makeSetValue is done at compile-time and generates the needed 652 // code then, whereas this function picks the right code at 653 // run-time. 654 // Note that setValue and getValue only do *aligned* writes and reads! 655 // Note that ccall uses JS types as for defining types, while setValue and 656 // getValue need LLVM types ('i8', 'i32') - this is a lower-level operation 657 function setValue(ptr, value, type, noSafe) { 658 type = type || 'i8'; 659 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit 660 switch(type) { 661 case 'i1': HEAP8[(ptr)]=value; break; 662 case 'i8': HEAP8[(ptr)]=value; break; 663 case 'i16': HEAP16[((ptr)>>1)]=value; break; 664 case 'i32': HEAP32[((ptr)>>2)]=value; break; 665 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; 666 case 'float': HEAPF32[((ptr)>>2)]=value; break; 667 case 'double': HEAPF64[((ptr)>>3)]=value; break; 668 default: abort('invalid type for setValue: ' + type); 669 } 670 } 671 Module['setValue'] = setValue; 672 673 // Parallel to setValue. 674 function getValue(ptr, type, noSafe) { 675 type = type || 'i8'; 676 if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit 677 switch(type) { 678 case 'i1': return HEAP8[(ptr)]; 679 case 'i8': return HEAP8[(ptr)]; 680 case 'i16': return HEAP16[((ptr)>>1)]; 681 case 'i32': return HEAP32[((ptr)>>2)]; 682 case 'i64': return HEAP32[((ptr)>>2)]; 683 case 'float': return HEAPF32[((ptr)>>2)]; 684 case 'double': return HEAPF64[((ptr)>>3)]; 685 default: abort('invalid type for setValue: ' + type); 686 } 687 return null; 688 } 689 Module['getValue'] = getValue; 690 691 var ALLOC_NORMAL = 0; // Tries to use _malloc() 692 var ALLOC_STACK = 1; // Lives for the duration of the current function call 693 var ALLOC_STATIC = 2; // Cannot be freed 694 var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk 695 var ALLOC_NONE = 4; // Do not allocate 696 Module['ALLOC_NORMAL'] = ALLOC_NORMAL; 697 Module['ALLOC_STACK'] = ALLOC_STACK; 698 Module['ALLOC_STATIC'] = ALLOC_STATIC; 699 Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC; 700 Module['ALLOC_NONE'] = ALLOC_NONE; 701 702 // allocate(): This is for internal use. You can use it yourself as well, but the interface 703 // is a little tricky (see docs right below). The reason is that it is optimized 704 // for multiple syntaxes to save space in generated code. So you should 705 // normally not use allocate(), and instead allocate memory using _malloc(), 706 // initialize it with setValue(), and so forth. 707 // @slab: An array of data, or a number. If a number, then the size of the block to allocate, 708 // in *bytes* (note that this is sometimes confusing: the next parameter does not 709 // affect this!) 710 // @types: Either an array of types, one for each byte (or 0 if no type at that position), 711 // or a single type which is used for the entire block. This only matters if there 712 // is initial data - if @slab is a number, then this does not matter at all and is 713 // ignored. 714 // @allocator: How to allocate memory, see ALLOC_* 715 function allocate(slab, types, allocator, ptr) { 716 var zeroinit, size; 717 if (typeof slab === 'number') { 718 zeroinit = true; 719 size = slab; 720 } else { 721 zeroinit = false; 722 size = slab.length; 723 } 724 725 var singleType = typeof types === 'string' ? types : null; 726 727 var ret; 728 if (allocator == ALLOC_NONE) { 729 ret = ptr; 730 } else { 731 ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length)); 732 } 733 734 if (zeroinit) { 735 var ptr = ret, stop; 736 assert((ret & 3) == 0); 737 stop = ret + (size & ~3); 738 for (; ptr < stop; ptr += 4) { 739 HEAP32[((ptr)>>2)]=0; 740 } 741 stop = ret + size; 742 while (ptr < stop) { 743 HEAP8[((ptr++)|0)]=0; 744 } 745 return ret; 746 } 747 748 if (singleType === 'i8') { 749 if (slab.subarray || slab.slice) { 750 HEAPU8.set(slab, ret); 751 } else { 752 HEAPU8.set(new Uint8Array(slab), ret); 753 } 754 return ret; 755 } 756 757 var i = 0, type, typeSize, previousType; 758 while (i < size) { 759 var curr = slab[i]; 760 761 if (typeof curr === 'function') { 762 curr = Runtime.getFunctionIndex(curr); 763 } 764 765 type = singleType || types[i]; 766 if (type === 0) { 767 i++; 768 continue; 769 } 770 771 if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later 772 773 setValue(ret+i, curr, type); 774 775 // no need to look up size unless type changes, so cache it 776 if (previousType !== type) { 777 typeSize = Runtime.getNativeTypeSize(type); 778 previousType = type; 779 } 780 i += typeSize; 781 } 782 783 return ret; 784 } 785 Module['allocate'] = allocate; 786 787 function Pointer_stringify(ptr, /* optional */ length) { 788 // TODO: use TextDecoder 789 // Find the length, and check for UTF while doing so 790 var hasUtf = false; 791 var t; 792 var i = 0; 793 while (1) { 794 t = HEAPU8[(((ptr)+(i))|0)]; 795 if (t >= 128) hasUtf = true; 796 else if (t == 0 && !length) break; 797 i++; 798 if (length && i == length) break; 799 } 800 if (!length) length = i; 801 802 var ret = ''; 803 804 if (!hasUtf) { 805 var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack 806 var curr; 807 while (length > 0) { 808 curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK))); 809 ret = ret ? ret + curr : curr; 810 ptr += MAX_CHUNK; 811 length -= MAX_CHUNK; 812 } 813 return ret; 814 } 815 816 var utf8 = new Runtime.UTF8Processor(); 817 for (i = 0; i < length; i++) { 818 t = HEAPU8[(((ptr)+(i))|0)]; 819 ret += utf8.processCChar(t); 820 } 821 return ret; 822 } 823 Module['Pointer_stringify'] = Pointer_stringify; 824 825 // Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns 826 // a copy of that string as a Javascript String object. 827 function UTF16ToString(ptr) { 828 var i = 0; 829 830 var str = ''; 831 while (1) { 832 var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; 833 if (codeUnit == 0) 834 return str; 835 ++i; 836 // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. 837 str += String.fromCharCode(codeUnit); 838 } 839 } 840 Module['UTF16ToString'] = UTF16ToString; 841 842 // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', 843 // null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP. 844 function stringToUTF16(str, outPtr) { 845 for(var i = 0; i < str.length; ++i) { 846 // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. 847 var codeUnit = str.charCodeAt(i); // possibly a lead surrogate 848 HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit; 849 } 850 // Null-terminate the pointer to the HEAP. 851 HEAP16[(((outPtr)+(str.length*2))>>1)]=0; 852 } 853 Module['stringToUTF16'] = stringToUTF16; 854 855 // Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emscripten HEAP, returns 856 // a copy of that string as a Javascript String object. 857 function UTF32ToString(ptr) { 858 var i = 0; 859 860 var str = ''; 861 while (1) { 862 var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; 863 if (utf32 == 0) 864 return str; 865 ++i; 866 // 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. 867 if (utf32 >= 0x10000) { 868 var ch = utf32 - 0x10000; 869 str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); 870 } else { 871 str += String.fromCharCode(utf32); 872 } 873 } 874 } 875 Module['UTF32ToString'] = UTF32ToString; 876 877 // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', 878 // null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP, 879 // 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. 880 function stringToUTF32(str, outPtr) { 881 var iChar = 0; 882 for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) { 883 // 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. 884 var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate 885 if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { 886 var trailSurrogate = str.charCodeAt(++iCodeUnit); 887 codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); 888 } 889 HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit; 890 ++iChar; 891 } 892 // Null-terminate the pointer to the HEAP. 893 HEAP32[(((outPtr)+(iChar*4))>>2)]=0; 894 } 895 Module['stringToUTF32'] = stringToUTF32; 896 897 function demangle(func) { 898 var i = 3; 899 // params, etc. 900 var basicTypes = { 901 'v': 'void', 902 'b': 'bool', 903 'c': 'char', 904 's': 'short', 905 'i': 'int', 906 'l': 'long', 907 'f': 'float', 908 'd': 'double', 909 'w': 'wchar_t', 910 'a': 'signed char', 911 'h': 'unsigned char', 912 't': 'unsigned short', 913 'j': 'unsigned int', 914 'm': 'unsigned long', 915 'x': 'long long', 916 'y': 'unsigned long long', 917 'z': '...' 918 }; 919 var subs = []; 920 var first = true; 921 function dump(x) { 922 //return; 923 if (x) Module.print(x); 924 Module.print(func); 925 var pre = ''; 926 for (var a = 0; a < i; a++) pre += ' '; 927 Module.print (pre + '^'); 928 } 929 function parseNested() { 930 i++; 931 if (func[i] === 'K') i++; // ignore const 932 var parts = []; 933 while (func[i] !== 'E') { 934 if (func[i] === 'S') { // substitution 935 i++; 936 var next = func.indexOf('_', i); 937 var num = func.substring(i, next) || 0; 938 parts.push(subs[num] || '?'); 939 i = next+1; 940 continue; 941 } 942 if (func[i] === 'C') { // constructor 943 parts.push(parts[parts.length-1]); 944 i += 2; 945 continue; 946 } 947 var size = parseInt(func.substr(i)); 948 var pre = size.toString().length; 949 if (!size || !pre) { i--; break; } // counter i++ below us 950 var curr = func.substr(i + pre, size); 951 parts.push(curr); 952 subs.push(curr); 953 i += pre + size; 954 } 955 i++; // skip E 956 return parts; 957 } 958 function parse(rawList, limit, allowVoid) { // main parser 959 limit = limit || Infinity; 960 var ret = '', list = []; 961 function flushList() { 962 return '(' + list.join(', ') + ')'; 963 } 964 var name; 965 if (func[i] === 'N') { 966 // namespaced N-E 967 name = parseNested().join('::'); 968 limit--; 969 if (limit === 0) return rawList ? [name] : name; 970 } else { 971 // not namespaced 972 if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L' 973 var size = parseInt(func.substr(i)); 974 if (size) { 975 var pre = size.toString().length; 976 name = func.substr(i + pre, size); 977 i += pre + size; 978 } 979 } 980 first = false; 981 if (func[i] === 'I') { 982 i++; 983 var iList = parse(true); 984 var iRet = parse(true, 1, true); 985 ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>'; 986 } else { 987 ret = name; 988 } 989 paramLoop: while (i < func.length && limit-- > 0) { 990 //dump('paramLoop'); 991 var c = func[i++]; 992 if (c in basicTypes) { 993 list.push(basicTypes[c]); 994 } else { 995 switch (c) { 996 case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer 997 case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference 998 case 'L': { // literal 999 i++; // skip basic type 1000 var end = func.indexOf('E', i); 1001 var size = end - i; 1002 list.push(func.substr(i, size)); 1003 i += size + 2; // size + 'EE' 1004 break; 1005 } 1006 case 'A': { // array 1007 var size = parseInt(func.substr(i)); 1008 i += size.toString().length; 1009 if (func[i] !== '_') throw '?'; 1010 i++; // skip _ 1011 list.push(parse(true, 1, true)[0] + ' [' + size + ']'); 1012 break; 1013 } 1014 case 'E': break paramLoop; 1015 default: ret += '?' + c; break paramLoop; 1016 } 1017 } 1018 } 1019 if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void) 1020 if (rawList) { 1021 if (ret) { 1022 list.push(ret + '?'); 1023 } 1024 return list; 1025 } else { 1026 return ret + flushList(); 1027 } 1028 } 1029 try { 1030 // Special-case the entry point, since its name differs from other name mangling. 1031 if (func == 'Object._main' || func == '_main') { 1032 return 'main()'; 1033 } 1034 if (typeof func === 'number') func = Pointer_stringify(func); 1035 if (func[0] !== '_') return func; 1036 if (func[1] !== '_') return func; // C function 1037 if (func[2] !== 'Z') return func; 1038 switch (func[3]) { 1039 case 'n': return 'operator new()'; 1040 case 'd': return 'operator delete()'; 1041 } 1042 return parse(); 1043 } catch(e) { 1044 return func; 1045 } 1046 } 1047 1048 function demangleAll(text) { 1049 return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') }); 1050 } 1051 1052 function stackTrace() { 1053 var stack = new Error().stack; 1054 return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack trace is not available at least on IE10 and Safari 6. 1055 } 1056 1057 // Memory management 1058 1059 var PAGE_SIZE = 4096; 1060 function alignMemoryPage(x) { 1061 return (x+4095)&-4096; 1062 } 1063 1064 var HEAP; 1065 var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; 1066 1067 var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area 1068 var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area 1069 var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk 1070 1071 function enlargeMemory() { 1072 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.'); 1073 } 1074 1075 var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880; 1076 var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728; 1077 var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152; 1078 1079 var totalMemory = 4096; 1080 while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) { 1081 if (totalMemory < 16*1024*1024) { 1082 totalMemory *= 2; 1083 } else { 1084 totalMemory += 16*1024*1024 1085 } 1086 } 1087 if (totalMemory !== TOTAL_MEMORY) { 1088 Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be more reasonable'); 1089 TOTAL_MEMORY = totalMemory; 1090 } 1091 1092 // Initialize the runtime's memory 1093 // check for full engine support (use string 'subarray' to avoid closure compiler confusion) 1094 assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']), 1095 'JS engine does not provide full typed array support'); 1096 1097 var buffer = new ArrayBuffer(TOTAL_MEMORY); 1098 HEAP8 = new Int8Array(buffer); 1099 HEAP16 = new Int16Array(buffer); 1100 HEAP32 = new Int32Array(buffer); 1101 HEAPU8 = new Uint8Array(buffer); 1102 HEAPU16 = new Uint16Array(buffer); 1103 HEAPU32 = new Uint32Array(buffer); 1104 HEAPF32 = new Float32Array(buffer); 1105 HEAPF64 = new Float64Array(buffer); 1106 1107 // Endianness check (note: assumes compiler arch was little-endian) 1108 HEAP32[0] = 255; 1109 assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system'); 1110 1111 Module['HEAP'] = HEAP; 1112 Module['HEAP8'] = HEAP8; 1113 Module['HEAP16'] = HEAP16; 1114 Module['HEAP32'] = HEAP32; 1115 Module['HEAPU8'] = HEAPU8; 1116 Module['HEAPU16'] = HEAPU16; 1117 Module['HEAPU32'] = HEAPU32; 1118 Module['HEAPF32'] = HEAPF32; 1119 Module['HEAPF64'] = HEAPF64; 1120 1121 function callRuntimeCallbacks(callbacks) { 1122 while(callbacks.length > 0) { 1123 var callback = callbacks.shift(); 1124 if (typeof callback == 'function') { 1125 callback(); 1126 continue; 1127 } 1128 var func = callback.func; 1129 if (typeof func === 'number') { 1130 if (callback.arg === undefined) { 1131 Runtime.dynCall('v', func); 1132 } else { 1133 Runtime.dynCall('vi', func, [callback.arg]); 1134 } 1135 } else { 1136 func(callback.arg === undefined ? null : callback.arg); 1137 } 1138 } 1139 } 1140 1141 var __ATPRERUN__ = []; // functions called before the runtime is initialized 1142 var __ATINIT__ = []; // functions called during startup 1143 var __ATMAIN__ = []; // functions called when main() is to be run 1144 var __ATEXIT__ = []; // functions called during shutdown 1145 var __ATPOSTRUN__ = []; // functions called after the runtime has exited 1146 1147 var runtimeInitialized = false; 1148 1149 function preRun() { 1150 // compatibility - merge in anything from Module['preRun'] at this time 1151 if (Module['preRun']) { 1152 if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; 1153 while (Module['preRun'].length) { 1154 addOnPreRun(Module['preRun'].shift()); 1155 } 1156 } 1157 callRuntimeCallbacks(__ATPRERUN__); 1158 } 1159 1160 function ensureInitRuntime() { 1161 if (runtimeInitialized) return; 1162 runtimeInitialized = true; 1163 callRuntimeCallbacks(__ATINIT__); 1164 } 1165 1166 function preMain() { 1167 callRuntimeCallbacks(__ATMAIN__); 1168 } 1169 1170 function exitRuntime() { 1171 callRuntimeCallbacks(__ATEXIT__); 1172 } 1173 1174 function postRun() { 1175 // compatibility - merge in anything from Module['postRun'] at this time 1176 if (Module['postRun']) { 1177 if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; 1178 while (Module['postRun'].length) { 1179 addOnPostRun(Module['postRun'].shift()); 1180 } 1181 } 1182 callRuntimeCallbacks(__ATPOSTRUN__); 1183 } 1184 1185 function addOnPreRun(cb) { 1186 __ATPRERUN__.unshift(cb); 1187 } 1188 Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun; 1189 1190 function addOnInit(cb) { 1191 __ATINIT__.unshift(cb); 1192 } 1193 Module['addOnInit'] = Module.addOnInit = addOnInit; 1194 1195 function addOnPreMain(cb) { 1196 __ATMAIN__.unshift(cb); 1197 } 1198 Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain; 1199 1200 function addOnExit(cb) { 1201 __ATEXIT__.unshift(cb); 1202 } 1203 Module['addOnExit'] = Module.addOnExit = addOnExit; 1204 1205 function addOnPostRun(cb) { 1206 __ATPOSTRUN__.unshift(cb); 1207 } 1208 Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun; 1209 1210 // Tools 1211 1212 // This processes a JS string into a C-line array of numbers, 0-terminated. 1213 // For LLVM-originating strings, see parser.js:parseLLVMString function 1214 function intArrayFromString(stringy, dontAddNull, length /* optional */) { 1215 var ret = (new Runtime.UTF8Processor()).processJSString(stringy); 1216 if (length) { 1217 ret.length = length; 1218 } 1219 if (!dontAddNull) { 1220 ret.push(0); 1221 } 1222 return ret; 1223 } 1224 Module['intArrayFromString'] = intArrayFromString; 1225 1226 function intArrayToString(array) { 1227 var ret = []; 1228 for (var i = 0; i < array.length; i++) { 1229 var chr = array[i]; 1230 if (chr > 0xFF) { 1231 chr &= 0xFF; 1232 } 1233 ret.push(String.fromCharCode(chr)); 1234 } 1235 return ret.join(''); 1236 } 1237 Module['intArrayToString'] = intArrayToString; 1238 1239 // Write a Javascript array to somewhere in the heap 1240 function writeStringToMemory(string, buffer, dontAddNull) { 1241 var array = intArrayFromString(string, dontAddNull); 1242 var i = 0; 1243 while (i < array.length) { 1244 var chr = array[i]; 1245 HEAP8[(((buffer)+(i))|0)]=chr; 1246 i = i + 1; 1247 } 1248 } 1249 Module['writeStringToMemory'] = writeStringToMemory; 1250 1251 function writeArrayToMemory(array, buffer) { 1252 for (var i = 0; i < array.length; i++) { 1253 HEAP8[(((buffer)+(i))|0)]=array[i]; 1254 } 1255 } 1256 Module['writeArrayToMemory'] = writeArrayToMemory; 1257 1258 function writeAsciiToMemory(str, buffer, dontAddNull) { 1259 for (var i = 0; i < str.length; i++) { 1260 HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i); 1261 } 1262 if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0; 1263 } 1264 Module['writeAsciiToMemory'] = writeAsciiToMemory; 1265 1266 function unSign(value, bits, ignore) { 1267 if (value >= 0) { 1268 return value; 1269 } 1270 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 1271 : Math.pow(2, bits) + value; 1272 } 1273 function reSign(value, bits, ignore) { 1274 if (value <= 0) { 1275 return value; 1276 } 1277 var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32 1278 : Math.pow(2, bits-1); 1279 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 1280 // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors 1281 // TODO: In i64 mode 1, resign the two parts separately and safely 1282 value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts 1283 } 1284 return value; 1285 } 1286 1287 // check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 ) 1288 if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) { 1289 var ah = a >>> 16; 1290 var al = a & 0xffff; 1291 var bh = b >>> 16; 1292 var bl = b & 0xffff; 1293 return (al*bl + ((ah*bl + al*bh) << 16))|0; 1294 }; 1295 Math.imul = Math['imul']; 1296 1297 1298 var Math_abs = Math.abs; 1299 var Math_cos = Math.cos; 1300 var Math_sin = Math.sin; 1301 var Math_tan = Math.tan; 1302 var Math_acos = Math.acos; 1303 var Math_asin = Math.asin; 1304 var Math_atan = Math.atan; 1305 var Math_atan2 = Math.atan2; 1306 var Math_exp = Math.exp; 1307 var Math_log = Math.log; 1308 var Math_sqrt = Math.sqrt; 1309 var Math_ceil = Math.ceil; 1310 var Math_floor = Math.floor; 1311 var Math_pow = Math.pow; 1312 var Math_imul = Math.imul; 1313 var Math_fround = Math.fround; 1314 var Math_min = Math.min; 1315 1316 // A counter of dependencies for calling run(). If we need to 1317 // do asynchronous work before running, increment this and 1318 // decrement it. Incrementing must happen in a place like 1319 // PRE_RUN_ADDITIONS (used by emcc to add file preloading). 1320 // Note that you can add dependencies in preRun, even though 1321 // it happens right before run - run will be postponed until 1322 // the dependencies are met. 1323 var runDependencies = 0; 1324 var runDependencyWatcher = null; 1325 var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled 1326 1327 function addRunDependency(id) { 1328 runDependencies++; 1329 if (Module['monitorRunDependencies']) { 1330 Module['monitorRunDependencies'](runDependencies); 1331 } 1332 } 1333 Module['addRunDependency'] = addRunDependency; 1334 function removeRunDependency(id) { 1335 runDependencies--; 1336 if (Module['monitorRunDependencies']) { 1337 Module['monitorRunDependencies'](runDependencies); 1338 } 1339 if (runDependencies == 0) { 1340 if (runDependencyWatcher !== null) { 1341 clearInterval(runDependencyWatcher); 1342 runDependencyWatcher = null; 1343 } 1344 if (dependenciesFulfilled) { 1345 var callback = dependenciesFulfilled; 1346 dependenciesFulfilled = null; 1347 callback(); // can add another dependenciesFulfilled 1348 } 1349 } 1350 } 1351 Module['removeRunDependency'] = removeRunDependency; 1352 1353 Module["preloadedImages"] = {}; // maps url to image data 1354 Module["preloadedAudios"] = {}; // maps url to audio data 1355 1356 1357 var memoryInitializer = null; 1358 1359 // === Body === 1360 var __ZTVN10__cxxabiv117__class_type_infoE = 7024; 1361 var __ZTVN10__cxxabiv120__si_class_type_infoE = 7064; 1362 1363 1364 1365 1366 STATIC_BASE = 8; 1367 1368 STATICTOP = STATIC_BASE + Runtime.alignMemory(7731); 1369 /* global initializers */ __ATINIT__.push(); 1370 1371 1372 /* 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); 1373 1374 1375 1376 1377 var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8); 1378 1379 assert(tempDoublePtr % 8 == 0); 1380 1381 function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much 1382 1383 HEAP8[tempDoublePtr] = HEAP8[ptr]; 1384 1385 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; 1386 1387 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; 1388 1389 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; 1390 1391 } 1392 1393 function copyTempDouble(ptr) { 1394 1395 HEAP8[tempDoublePtr] = HEAP8[ptr]; 1396 1397 HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; 1398 1399 HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; 1400 1401 HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; 1402 1403 HEAP8[tempDoublePtr+4] = HEAP8[ptr+4]; 1404 1405 HEAP8[tempDoublePtr+5] = HEAP8[ptr+5]; 1406 1407 HEAP8[tempDoublePtr+6] = HEAP8[ptr+6]; 1408 1409 HEAP8[tempDoublePtr+7] = HEAP8[ptr+7]; 1410 1411 } 1412 1413 1414 function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg) { 1415 Module['noExitRuntime'] = true; 1416 1417 Browser.mainLoop.runner = function Browser_mainLoop_runner() { 1418 if (ABORT) return; 1419 if (Browser.mainLoop.queue.length > 0) { 1420 var start = Date.now(); 1421 var blocker = Browser.mainLoop.queue.shift(); 1422 blocker.func(blocker.arg); 1423 if (Browser.mainLoop.remainingBlockers) { 1424 var remaining = Browser.mainLoop.remainingBlockers; 1425 var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining); 1426 if (blocker.counted) { 1427 Browser.mainLoop.remainingBlockers = next; 1428 } else { 1429 // not counted, but move the progress along a tiny bit 1430 next = next + 0.5; // do not steal all the next one's progress 1431 Browser.mainLoop.remainingBlockers = (8*remaining + next)/9; 1432 } 1433 } 1434 console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers); 1435 Browser.mainLoop.updateStatus(); 1436 setTimeout(Browser.mainLoop.runner, 0); 1437 return; 1438 } 1439 if (Browser.mainLoop.shouldPause) { 1440 // catch pauses from non-main loop sources 1441 Browser.mainLoop.paused = true; 1442 Browser.mainLoop.shouldPause = false; 1443 return; 1444 } 1445 1446 // Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize 1447 // VBO double-buffering and reduce GPU stalls. 1448 1449 if (Browser.mainLoop.method === 'timeout' && Module.ctx) { 1450 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!'); 1451 Browser.mainLoop.method = ''; // just warn once per call to set main loop 1452 } 1453 1454 if (Module['preMainLoop']) { 1455 Module['preMainLoop'](); 1456 } 1457 1458 try { 1459 if (typeof arg !== 'undefined') { 1460 Runtime.dynCall('vi', func, [arg]); 1461 } else { 1462 Runtime.dynCall('v', func); 1463 } 1464 } catch (e) { 1465 if (e instanceof ExitStatus) { 1466 return; 1467 } else { 1468 if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]); 1469 throw e; 1470 } 1471 } 1472 1473 if (Module['postMainLoop']) { 1474 Module['postMainLoop'](); 1475 } 1476 1477 if (Browser.mainLoop.shouldPause) { 1478 // catch pauses from the main loop itself 1479 Browser.mainLoop.paused = true; 1480 Browser.mainLoop.shouldPause = false; 1481 return; 1482 } 1483 Browser.mainLoop.scheduler(); 1484 } 1485 if (fps && fps > 0) { 1486 Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() { 1487 setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop 1488 }; 1489 Browser.mainLoop.method = 'timeout'; 1490 } else { 1491 Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() { 1492 Browser.requestAnimationFrame(Browser.mainLoop.runner); 1493 }; 1494 Browser.mainLoop.method = 'rAF'; 1495 } 1496 Browser.mainLoop.scheduler(); 1497 1498 if (simulateInfiniteLoop) { 1499 throw 'SimulateInfiniteLoop'; 1500 } 1501 } 1502 1503 var _cosf=Math_cos; 1504 1505 function ___cxa_pure_virtual() { 1506 ABORT = true; 1507 throw 'Pure virtual function called!'; 1508 } 1509 1510 function _time(ptr) { 1511 var ret = Math.floor(Date.now()/1000); 1512 if (ptr) { 1513 HEAP32[((ptr)>>2)]=ret; 1514 } 1515 return ret; 1516 } 1517 1518 function ___assert_fail(condition, filename, line, func) { 1519 ABORT = true; 1520 throw 'Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function'] + ' at ' + stackTrace(); 1521 } 1522 1523 1524 function __ZSt18uncaught_exceptionv() { // std::uncaught_exception() 1525 return !!__ZSt18uncaught_exceptionv.uncaught_exception; 1526 } 1527 1528 1529 1530 function ___cxa_is_number_type(type) { 1531 var isNumber = false; 1532 try { if (type == __ZTIi) isNumber = true } catch(e){} 1533 try { if (type == __ZTIj) isNumber = true } catch(e){} 1534 try { if (type == __ZTIl) isNumber = true } catch(e){} 1535 try { if (type == __ZTIm) isNumber = true } catch(e){} 1536 try { if (type == __ZTIx) isNumber = true } catch(e){} 1537 try { if (type == __ZTIy) isNumber = true } catch(e){} 1538 try { if (type == __ZTIf) isNumber = true } catch(e){} 1539 try { if (type == __ZTId) isNumber = true } catch(e){} 1540 try { if (type == __ZTIe) isNumber = true } catch(e){} 1541 try { if (type == __ZTIc) isNumber = true } catch(e){} 1542 try { if (type == __ZTIa) isNumber = true } catch(e){} 1543 try { if (type == __ZTIh) isNumber = true } catch(e){} 1544 try { if (type == __ZTIs) isNumber = true } catch(e){} 1545 try { if (type == __ZTIt) isNumber = true } catch(e){} 1546 return isNumber; 1547 }function ___cxa_does_inherit(definiteType, possibilityType, possibility) { 1548 if (possibility == 0) return false; 1549 if (possibilityType == 0 || possibilityType == definiteType) 1550 return true; 1551 var possibility_type_info; 1552 if (___cxa_is_number_type(possibilityType)) { 1553 possibility_type_info = possibilityType; 1554 } else { 1555 var possibility_type_infoAddr = HEAP32[((possibilityType)>>2)] - 8; 1556 possibility_type_info = HEAP32[((possibility_type_infoAddr)>>2)]; 1557 } 1558 switch (possibility_type_info) { 1559 case 0: // possibility is a pointer 1560 // See if definite type is a pointer 1561 var definite_type_infoAddr = HEAP32[((definiteType)>>2)] - 8; 1562 var definite_type_info = HEAP32[((definite_type_infoAddr)>>2)]; 1563 if (definite_type_info == 0) { 1564 // Also a pointer; compare base types of pointers 1565 var defPointerBaseAddr = definiteType+8; 1566 var defPointerBaseType = HEAP32[((defPointerBaseAddr)>>2)]; 1567 var possPointerBaseAddr = possibilityType+8; 1568 var possPointerBaseType = HEAP32[((possPointerBaseAddr)>>2)]; 1569 return ___cxa_does_inherit(defPointerBaseType, possPointerBaseType, possibility); 1570 } else 1571 return false; // one pointer and one non-pointer 1572 case 1: // class with no base class 1573 return false; 1574 case 2: // class with base class 1575 var parentTypeAddr = possibilityType + 8; 1576 var parentType = HEAP32[((parentTypeAddr)>>2)]; 1577 return ___cxa_does_inherit(definiteType, parentType, possibility); 1578 default: 1579 return false; // some unencountered type 1580 } 1581 } 1582 1583 1584 1585 var ___cxa_last_thrown_exception=0;function ___resumeException(ptr) { 1586 if (!___cxa_last_thrown_exception) { ___cxa_last_thrown_exception = ptr; } 1587 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."; 1588 } 1589 1590 var ___cxa_exception_header_size=8;function ___cxa_find_matching_catch(thrown, throwntype) { 1591 if (thrown == -1) thrown = ___cxa_last_thrown_exception; 1592 header = thrown - ___cxa_exception_header_size; 1593 if (throwntype == -1) throwntype = HEAP32[((header)>>2)]; 1594 var typeArray = Array.prototype.slice.call(arguments, 2); 1595 1596 // If throwntype is a pointer, this means a pointer has been 1597 // thrown. When a pointer is thrown, actually what's thrown 1598 // is a pointer to the pointer. We'll dereference it. 1599 if (throwntype != 0 && !___cxa_is_number_type(throwntype)) { 1600 var throwntypeInfoAddr= HEAP32[((throwntype)>>2)] - 8; 1601 var throwntypeInfo= HEAP32[((throwntypeInfoAddr)>>2)]; 1602 if (throwntypeInfo == 0) 1603 thrown = HEAP32[((thrown)>>2)]; 1604 } 1605 // The different catch blocks are denoted by different types. 1606 // Due to inheritance, those types may not precisely match the 1607 // type of the thrown object. Find one which matches, and 1608 // return the type of the catch block which should be called. 1609 for (var i = 0; i < typeArray.length; i++) { 1610 if (___cxa_does_inherit(typeArray[i], throwntype, thrown)) 1611 return ((asm["setTempRet0"](typeArray[i]),thrown)|0); 1612 } 1613 // Shouldn't happen unless we have bogus data in typeArray 1614 // or encounter a type for which emscripten doesn't have suitable 1615 // typeinfo defined. Best-efforts match just in case. 1616 return ((asm["setTempRet0"](throwntype),thrown)|0); 1617 }function ___cxa_throw(ptr, type, destructor) { 1618 if (!___cxa_throw.initialized) { 1619 try { 1620 HEAP32[((__ZTVN10__cxxabiv119__pointer_type_infoE)>>2)]=0; // Workaround for libcxxabi integration bug 1621 } catch(e){} 1622 try { 1623 HEAP32[((__ZTVN10__cxxabiv117__class_type_infoE)>>2)]=1; // Workaround for libcxxabi integration bug 1624 } catch(e){} 1625 try { 1626 HEAP32[((__ZTVN10__cxxabiv120__si_class_type_infoE)>>2)]=2; // Workaround for libcxxabi integration bug 1627 } catch(e){} 1628 ___cxa_throw.initialized = true; 1629 } 1630 var header = ptr - ___cxa_exception_header_size; 1631 HEAP32[((header)>>2)]=type; 1632 HEAP32[(((header)+(4))>>2)]=destructor; 1633 ___cxa_last_thrown_exception = ptr; 1634 if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) { 1635 __ZSt18uncaught_exceptionv.uncaught_exception = 1; 1636 } else { 1637 __ZSt18uncaught_exceptionv.uncaught_exception++; 1638 } 1639 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."; 1640 } 1641 1642 1643 Module["_memset"] = _memset; 1644 1645 1646 1647 function __exit(status) { 1648 // void _exit(int status); 1649 // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html 1650 Module['exit'](status); 1651 }function _exit(status) { 1652 __exit(status); 1653 }function __ZSt9terminatev() { 1654 _exit(-1234); 1655 } 1656 1657 function _abort() { 1658 Module['abort'](); 1659 } 1660 1661 1662 1663 1664 1665 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}; 1666 1667 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"}; 1668 1669 1670 var ___errno_state=0;function ___setErrNo(value) { 1671 // For convenient setting and returning of errno. 1672 HEAP32[((___errno_state)>>2)]=value; 1673 return value; 1674 } 1675 1676 var PATH={splitPath:function (filename) { 1677 var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; 1678 return splitPathRe.exec(filename).slice(1); 1679 },normalizeArray:function (parts, allowAboveRoot) { 1680 // if the path tries to go above the root, `up` ends up > 0 1681 var up = 0; 1682 for (var i = parts.length - 1; i >= 0; i--) { 1683 var last = parts[i]; 1684 if (last === '.') { 1685 parts.splice(i, 1); 1686 } else if (last === '..') { 1687 parts.splice(i, 1); 1688 up++; 1689 } else if (up) { 1690 parts.splice(i, 1); 1691 up--; 1692 } 1693 } 1694 // if the path is allowed to go above the root, restore leading ..s 1695 if (allowAboveRoot) { 1696 for (; up--; up) { 1697 parts.unshift('..'); 1698 } 1699 } 1700 return parts; 1701 },normalize:function (path) { 1702 var isAbsolute = path.charAt(0) === '/', 1703 trailingSlash = path.substr(-1) === '/'; 1704 // Normalize the path 1705 path = PATH.normalizeArray(path.split('/').filter(function(p) { 1706 return !!p; 1707 }), !isAbsolute).join('/'); 1708 if (!path && !isAbsolute) { 1709 path = '.'; 1710 } 1711 if (path && trailingSlash) { 1712 path += '/'; 1713 } 1714 return (isAbsolute ? '/' : '') + path; 1715 },dirname:function (path) { 1716 var result = PATH.splitPath(path), 1717 root = result[0], 1718 dir = result[1]; 1719 if (!root && !dir) { 1720 // No dirname whatsoever 1721 return '.'; 1722 } 1723 if (dir) { 1724 // It has a dirname, strip trailing slash 1725 dir = dir.substr(0, dir.length - 1); 1726 } 1727 return root + dir; 1728 },basename:function (path) { 1729 // EMSCRIPTEN return '/'' for '/', not an empty string 1730 if (path === '/') return '/'; 1731 var lastSlash = path.lastIndexOf('/'); 1732 if (lastSlash === -1) return path; 1733 return path.substr(lastSlash+1); 1734 },extname:function (path) { 1735 return PATH.splitPath(path)[3]; 1736 },join:function () { 1737 var paths = Array.prototype.slice.call(arguments, 0); 1738 return PATH.normalize(paths.join('/')); 1739 },join2:function (l, r) { 1740 return PATH.normalize(l + '/' + r); 1741 },resolve:function () { 1742 var resolvedPath = '', 1743 resolvedAbsolute = false; 1744 for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { 1745 var path = (i >= 0) ? arguments[i] : FS.cwd(); 1746 // Skip empty and invalid entries 1747 if (typeof path !== 'string') { 1748 throw new TypeError('Arguments to path.resolve must be strings'); 1749 } else if (!path) { 1750 continue; 1751 } 1752 resolvedPath = path + '/' + resolvedPath; 1753 resolvedAbsolute = path.charAt(0) === '/'; 1754 } 1755 // At this point the path should be resolved to a full absolute path, but 1756 // handle relative paths to be safe (might happen when process.cwd() fails) 1757 resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) { 1758 return !!p; 1759 }), !resolvedAbsolute).join('/'); 1760 return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; 1761 },relative:function (from, to) { 1762 from = PATH.resolve(from).substr(1); 1763 to = PATH.resolve(to).substr(1); 1764 function trim(arr) { 1765 var start = 0; 1766 for (; start < arr.length; start++) { 1767 if (arr[start] !== '') break; 1768 } 1769 var end = arr.length - 1; 1770 for (; end >= 0; end--) { 1771 if (arr[end] !== '') break; 1772 } 1773 if (start > end) return []; 1774 return arr.slice(start, end - start + 1); 1775 } 1776 var fromParts = trim(from.split('/')); 1777 var toParts = trim(to.split('/')); 1778 var length = Math.min(fromParts.length, toParts.length); 1779 var samePartsLength = length; 1780 for (var i = 0; i < length; i++) { 1781 if (fromParts[i] !== toParts[i]) { 1782 samePartsLength = i; 1783 break; 1784 } 1785 } 1786 var outputParts = []; 1787 for (var i = samePartsLength; i < fromParts.length; i++) { 1788 outputParts.push('..'); 1789 } 1790 outputParts = outputParts.concat(toParts.slice(samePartsLength)); 1791 return outputParts.join('/'); 1792 }}; 1793 1794 var TTY={ttys:[],init:function () { 1795 // https://github.com/kripken/emscripten/pull/1555 1796 // if (ENVIRONMENT_IS_NODE) { 1797 // // currently, FS.init does not distinguish if process.stdin is a file or TTY 1798 // // device, it always assumes it's a TTY device. because of this, we're forcing 1799 // // process.stdin to UTF8 encoding to at least make stdin reading compatible 1800 // // with text files until FS.init can be refactored. 1801 // process['stdin']['setEncoding']('utf8'); 1802 // } 1803 },shutdown:function () { 1804 // https://github.com/kripken/emscripten/pull/1555 1805 // if (ENVIRONMENT_IS_NODE) { 1806 // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? 1807 // // 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 1808 // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? 1809 // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle 1810 // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call 1811 // process['stdin']['pause'](); 1812 // } 1813 },register:function (dev, ops) { 1814 TTY.ttys[dev] = { input: [], output: [], ops: ops }; 1815 FS.registerDevice(dev, TTY.stream_ops); 1816 },stream_ops:{open:function (stream) { 1817 var tty = TTY.ttys[stream.node.rdev]; 1818 if (!tty) { 1819 throw new FS.ErrnoError(ERRNO_CODES.ENODEV); 1820 } 1821 stream.tty = tty; 1822 stream.seekable = false; 1823 },close:function (stream) { 1824 // flush any pending line data 1825 if (stream.tty.output.length) { 1826 stream.tty.ops.put_char(stream.tty, 10); 1827 } 1828 },read:function (stream, buffer, offset, length, pos /* ignored */) { 1829 if (!stream.tty || !stream.tty.ops.get_char) { 1830 throw new FS.ErrnoError(ERRNO_CODES.ENXIO); 1831 } 1832 var bytesRead = 0; 1833 for (var i = 0; i < length; i++) { 1834 var result; 1835 try { 1836 result = stream.tty.ops.get_char(stream.tty); 1837 } catch (e) { 1838 throw new FS.ErrnoError(ERRNO_CODES.EIO); 1839 } 1840 if (result === undefined && bytesRead === 0) { 1841 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); 1842 } 1843 if (result === null || result === undefined) break; 1844 bytesRead++; 1845 buffer[offset+i] = result; 1846 } 1847 if (bytesRead) { 1848 stream.node.timestamp = Date.now(); 1849 } 1850 return bytesRead; 1851 },write:function (stream, buffer, offset, length, pos) { 1852 if (!stream.tty || !stream.tty.ops.put_char) { 1853 throw new FS.ErrnoError(ERRNO_CODES.ENXIO); 1854 } 1855 for (var i = 0; i < length; i++) { 1856 try { 1857 stream.tty.ops.put_char(stream.tty, buffer[offset+i]); 1858 } catch (e) { 1859 throw new FS.ErrnoError(ERRNO_CODES.EIO); 1860 } 1861 } 1862 if (length) { 1863 stream.node.timestamp = Date.now(); 1864 } 1865 return i; 1866 }},default_tty_ops:{get_char:function (tty) { 1867 if (!tty.input.length) { 1868 var result = null; 1869 if (ENVIRONMENT_IS_NODE) { 1870 result = process['stdin']['read'](); 1871 if (!result) { 1872 if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) { 1873 return null; // EOF 1874 } 1875 return undefined; // no data available 1876 } 1877 } else if (typeof window != 'undefined' && 1878 typeof window.prompt == 'function') { 1879 // Browser. 1880 result = window.prompt('Input: '); // returns null on cancel 1881 if (result !== null) { 1882 result += '\n'; 1883 } 1884 } else if (typeof readline == 'function') { 1885 // Command line. 1886 result = readline(); 1887 if (result !== null) { 1888 result += '\n'; 1889 } 1890 } 1891 if (!result) { 1892 return null; 1893 } 1894 tty.input = intArrayFromString(result, true); 1895 } 1896 return tty.input.shift(); 1897 },put_char:function (tty, val) { 1898 if (val === null || val === 10) { 1899 Module['print'](tty.output.join('')); 1900 tty.output = []; 1901 } else { 1902 tty.output.push(TTY.utf8.processCChar(val)); 1903 } 1904 }},default_tty1_ops:{put_char:function (tty, val) { 1905 if (val === null || val === 10) { 1906 Module['printErr'](tty.output.join('')); 1907 tty.output = []; 1908 } else { 1909 tty.output.push(TTY.utf8.processCChar(val)); 1910 } 1911 }}}; 1912 1913 var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3,mount:function (mount) { 1914 return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0); 1915 },createNode:function (parent, name, mode, dev) { 1916 if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { 1917 // no supported 1918 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 1919 } 1920 if (!MEMFS.ops_table) { 1921 MEMFS.ops_table = { 1922 dir: { 1923 node: { 1924 getattr: MEMFS.node_ops.getattr, 1925 setattr: MEMFS.node_ops.setattr, 1926 lookup: MEMFS.node_ops.lookup, 1927 mknod: MEMFS.node_ops.mknod, 1928 rename: MEMFS.node_ops.rename, 1929 unlink: MEMFS.node_ops.unlink, 1930 rmdir: MEMFS.node_ops.rmdir, 1931 readdir: MEMFS.node_ops.readdir, 1932 symlink: MEMFS.node_ops.symlink 1933 }, 1934 stream: { 1935 llseek: MEMFS.stream_ops.llseek 1936 } 1937 }, 1938 file: { 1939 node: { 1940 getattr: MEMFS.node_ops.getattr, 1941 setattr: MEMFS.node_ops.setattr 1942 }, 1943 stream: { 1944 llseek: MEMFS.stream_ops.llseek, 1945 read: MEMFS.stream_ops.read, 1946 write: MEMFS.stream_ops.write, 1947 allocate: MEMFS.stream_ops.allocate, 1948 mmap: MEMFS.stream_ops.mmap 1949 } 1950 }, 1951 link: { 1952 node: { 1953 getattr: MEMFS.node_ops.getattr, 1954 setattr: MEMFS.node_ops.setattr, 1955 readlink: MEMFS.node_ops.readlink 1956 }, 1957 stream: {} 1958 }, 1959 chrdev: { 1960 node: { 1961 getattr: MEMFS.node_ops.getattr, 1962 setattr: MEMFS.node_ops.setattr 1963 }, 1964 stream: FS.chrdev_stream_ops 1965 }, 1966 }; 1967 } 1968 var node = FS.createNode(parent, name, mode, dev); 1969 if (FS.isDir(node.mode)) { 1970 node.node_ops = MEMFS.ops_table.dir.node; 1971 node.stream_ops = MEMFS.ops_table.dir.stream; 1972 node.contents = {}; 1973 } else if (FS.isFile(node.mode)) { 1974 node.node_ops = MEMFS.ops_table.file.node; 1975 node.stream_ops = MEMFS.ops_table.file.stream; 1976 node.contents = []; 1977 node.contentMode = MEMFS.CONTENT_FLEXIBLE; 1978 } else if (FS.isLink(node.mode)) { 1979 node.node_ops = MEMFS.ops_table.link.node; 1980 node.stream_ops = MEMFS.ops_table.link.stream; 1981 } else if (FS.isChrdev(node.mode)) { 1982 node.node_ops = MEMFS.ops_table.chrdev.node; 1983 node.stream_ops = MEMFS.ops_table.chrdev.stream; 1984 } 1985 node.timestamp = Date.now(); 1986 // add the new node to the parent 1987 if (parent) { 1988 parent.contents[name] = node; 1989 } 1990 return node; 1991 },ensureFlexible:function (node) { 1992 if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) { 1993 var contents = node.contents; 1994 node.contents = Array.prototype.slice.call(contents); 1995 node.contentMode = MEMFS.CONTENT_FLEXIBLE; 1996 } 1997 },node_ops:{getattr:function (node) { 1998 var attr = {}; 1999 // device numbers reuse inode numbers. 2000 attr.dev = FS.isChrdev(node.mode) ? node.id : 1; 2001 attr.ino = node.id; 2002 attr.mode = node.mode; 2003 attr.nlink = 1; 2004 attr.uid = 0; 2005 attr.gid = 0; 2006 attr.rdev = node.rdev; 2007 if (FS.isDir(node.mode)) { 2008 attr.size = 4096; 2009 } else if (FS.isFile(node.mode)) { 2010 attr.size = node.contents.length; 2011 } else if (FS.isLink(node.mode)) { 2012 attr.size = node.link.length; 2013 } else { 2014 attr.size = 0; 2015 } 2016 attr.atime = new Date(node.timestamp); 2017 attr.mtime = new Date(node.timestamp); 2018 attr.ctime = new Date(node.timestamp); 2019 // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), 2020 // but this is not required by the standard. 2021 attr.blksize = 4096; 2022 attr.blocks = Math.ceil(attr.size / attr.blksize); 2023 return attr; 2024 },setattr:function (node, attr) { 2025 if (attr.mode !== undefined) { 2026 node.mode = attr.mode; 2027 } 2028 if (attr.timestamp !== undefined) { 2029 node.timestamp = attr.timestamp; 2030 } 2031 if (attr.size !== undefined) { 2032 MEMFS.ensureFlexible(node); 2033 var contents = node.contents; 2034 if (attr.size < contents.length) contents.length = attr.size; 2035 else while (attr.size > contents.length) contents.push(0); 2036 } 2037 },lookup:function (parent, name) { 2038 throw FS.genericErrors[ERRNO_CODES.ENOENT]; 2039 },mknod:function (parent, name, mode, dev) { 2040 return MEMFS.createNode(parent, name, mode, dev); 2041 },rename:function (old_node, new_dir, new_name) { 2042 // if we're overwriting a directory at new_name, make sure it's empty. 2043 if (FS.isDir(old_node.mode)) { 2044 var new_node; 2045 try { 2046 new_node = FS.lookupNode(new_dir, new_name); 2047 } catch (e) { 2048 } 2049 if (new_node) { 2050 for (var i in new_node.contents) { 2051 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); 2052 } 2053 } 2054 } 2055 // do the internal rewiring 2056 delete old_node.parent.contents[old_node.name]; 2057 old_node.name = new_name; 2058 new_dir.contents[new_name] = old_node; 2059 old_node.parent = new_dir; 2060 },unlink:function (parent, name) { 2061 delete parent.contents[name]; 2062 },rmdir:function (parent, name) { 2063 var node = FS.lookupNode(parent, name); 2064 for (var i in node.contents) { 2065 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); 2066 } 2067 delete parent.contents[name]; 2068 },readdir:function (node) { 2069 var entries = ['.', '..'] 2070 for (var key in node.contents) { 2071 if (!node.contents.hasOwnProperty(key)) { 2072 continue; 2073 } 2074 entries.push(key); 2075 } 2076 return entries; 2077 },symlink:function (parent, newname, oldpath) { 2078 var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0); 2079 node.link = oldpath; 2080 return node; 2081 },readlink:function (node) { 2082 if (!FS.isLink(node.mode)) { 2083 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 2084 } 2085 return node.link; 2086 }},stream_ops:{read:function (stream, buffer, offset, length, position) { 2087 var contents = stream.node.contents; 2088 if (position >= contents.length) 2089 return 0; 2090 var size = Math.min(contents.length - position, length); 2091 assert(size >= 0); 2092 if (size > 8 && contents.subarray) { // non-trivial, and typed array 2093 buffer.set(contents.subarray(position, position + size), offset); 2094 } else 2095 { 2096 for (var i = 0; i < size; i++) { 2097 buffer[offset + i] = contents[position + i]; 2098 } 2099 } 2100 return size; 2101 },write:function (stream, buffer, offset, length, position, canOwn) { 2102 var node = stream.node; 2103 node.timestamp = Date.now(); 2104 var contents = node.contents; 2105 if (length && contents.length === 0 && position === 0 && buffer.subarray) { 2106 // just replace it with the new data 2107 if (canOwn && offset === 0) { 2108 node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source. 2109 node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTENT_OWNING : MEMFS.CONTENT_FIXED; 2110 } else { 2111 node.contents = new Uint8Array(buffer.subarray(offset, offset+length)); 2112 node.contentMode = MEMFS.CONTENT_FIXED; 2113 } 2114 return length; 2115 } 2116 MEMFS.ensureFlexible(node); 2117 var contents = node.contents; 2118 while (contents.length < position) contents.push(0); 2119 for (var i = 0; i < length; i++) { 2120 contents[position + i] = buffer[offset + i]; 2121 } 2122 return length; 2123 },llseek:function (stream, offset, whence) { 2124 var position = offset; 2125 if (whence === 1) { // SEEK_CUR. 2126 position += stream.position; 2127 } else if (whence === 2) { // SEEK_END. 2128 if (FS.isFile(stream.node.mode)) { 2129 position += stream.node.contents.length; 2130 } 2131 } 2132 if (position < 0) { 2133 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 2134 } 2135 stream.ungotten = []; 2136 stream.position = position; 2137 return position; 2138 },allocate:function (stream, offset, length) { 2139 MEMFS.ensureFlexible(stream.node); 2140 var contents = stream.node.contents; 2141 var limit = offset + length; 2142 while (limit > contents.length) contents.push(0); 2143 },mmap:function (stream, buffer, offset, length, position, prot, flags) { 2144 if (!FS.isFile(stream.node.mode)) { 2145 throw new FS.ErrnoError(ERRNO_CODES.ENODEV); 2146 } 2147 var ptr; 2148 var allocated; 2149 var contents = stream.node.contents; 2150 // Only make a new copy when MAP_PRIVATE is specified. 2151 if ( !(flags & 2) && 2152 (contents.buffer === buffer || contents.buffer === buffer.buffer) ) { 2153 // We can't emulate MAP_SHARED when the file is not backed by the buffer 2154 // we're mapping to (e.g. the HEAP buffer). 2155 allocated = false; 2156 ptr = contents.byteOffset; 2157 } else { 2158 // Try to avoid unnecessary slices. 2159 if (position > 0 || position + length < contents.length) { 2160 if (contents.subarray) { 2161 contents = contents.subarray(position, position + length); 2162 } else { 2163 contents = Array.prototype.slice.call(contents, position, position + length); 2164 } 2165 } 2166 allocated = true; 2167 ptr = _malloc(length); 2168 if (!ptr) { 2169 throw new FS.ErrnoError(ERRNO_CODES.ENOMEM); 2170 } 2171 buffer.set(contents, ptr); 2172 } 2173 return { ptr: ptr, allocated: allocated }; 2174 }}}; 2175 2176 var IDBFS={dbs:{},indexedDB:function () { 2177 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; 2178 },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) { 2179 // reuse all of the core MEMFS functionality 2180 return MEMFS.mount.apply(null, arguments); 2181 },syncfs:function (mount, populate, callback) { 2182 IDBFS.getLocalSet(mount, function(err, local) { 2183 if (err) return callback(err); 2184 2185 IDBFS.getRemoteSet(mount, function(err, remote) { 2186 if (err) return callback(err); 2187 2188 var src = populate ? remote : local; 2189 var dst = populate ? local : remote; 2190 2191 IDBFS.reconcile(src, dst, callback); 2192 }); 2193 }); 2194 },getDB:function (name, callback) { 2195 // check the cache first 2196 var db = IDBFS.dbs[name]; 2197 if (db) { 2198 return callback(null, db); 2199 } 2200 2201 var req; 2202 try { 2203 req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION); 2204 } catch (e) { 2205 return callback(e); 2206 } 2207 req.onupgradeneeded = function(e) { 2208 var db = e.target.result; 2209 var transaction = e.target.transaction; 2210 2211 var fileStore; 2212 2213 if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) { 2214 fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME); 2215 } else { 2216 fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME); 2217 } 2218 2219 fileStore.createIndex('timestamp', 'timestamp', { unique: false }); 2220 }; 2221 req.onsuccess = function() { 2222 db = req.result; 2223 2224 // add to the cache 2225 IDBFS.dbs[name] = db; 2226 callback(null, db); 2227 }; 2228 req.onerror = function() { 2229 callback(this.error); 2230 }; 2231 },getLocalSet:function (mount, callback) { 2232 var entries = {}; 2233 2234 function isRealDir(p) { 2235 return p !== '.' && p !== '..'; 2236 }; 2237 function toAbsolute(root) { 2238 return function(p) { 2239 return PATH.join2(root, p); 2240 } 2241 }; 2242 2243 var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint)); 2244 2245 while (check.length) { 2246 var path = check.pop(); 2247 var stat; 2248 2249 try { 2250 stat = FS.stat(path); 2251 } catch (e) { 2252 return callback(e); 2253 } 2254 2255 if (FS.isDir(stat.mode)) { 2256 check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path))); 2257 } 2258 2259 entries[path] = { timestamp: stat.mtime }; 2260 } 2261 2262 return callback(null, { type: 'local', entries: entries }); 2263 },getRemoteSet:function (mount, callback) { 2264 var entries = {}; 2265 2266 IDBFS.getDB(mount.mountpoint, function(err, db) { 2267 if (err) return callback(err); 2268 2269 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly'); 2270 transaction.onerror = function() { callback(this.error); }; 2271 2272 var store = transaction.objectStore(IDBFS.DB_STORE_NAME); 2273 var index = store.index('timestamp'); 2274 2275 index.openKeyCursor().onsuccess = function(event) { 2276 var cursor = event.target.result; 2277 2278 if (!cursor) { 2279 return callback(null, { type: 'remote', db: db, entries: entries }); 2280 } 2281 2282 entries[cursor.primaryKey] = { timestamp: cursor.key }; 2283 2284 cursor.continue(); 2285 }; 2286 }); 2287 },loadLocalEntry:function (path, callback) { 2288 var stat, node; 2289 2290 try { 2291 var lookup = FS.lookupPath(path); 2292 node = lookup.node; 2293 stat = FS.stat(path); 2294 } catch (e) { 2295 return callback(e); 2296 } 2297 2298 if (FS.isDir(stat.mode)) { 2299 return callback(null, { timestamp: stat.mtime, mode: stat.mode }); 2300 } else if (FS.isFile(stat.mode)) { 2301 return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents }); 2302 } else { 2303 return callback(new Error('node type not supported')); 2304 } 2305 },storeLocalEntry:function (path, entry, callback) { 2306 try { 2307 if (FS.isDir(entry.mode)) { 2308 FS.mkdir(path, entry.mode); 2309 } else if (FS.isFile(entry.mode)) { 2310 FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true }); 2311 } else { 2312 return callback(new Error('node type not supported')); 2313 } 2314 2315 FS.utime(path, entry.timestamp, entry.timestamp); 2316 } catch (e) { 2317 return callback(e); 2318 } 2319 2320 callback(null); 2321 },removeLocalEntry:function (path, callback) { 2322 try { 2323 var lookup = FS.lookupPath(path); 2324 var stat = FS.stat(path); 2325 2326 if (FS.isDir(stat.mode)) { 2327 FS.rmdir(path); 2328 } else if (FS.isFile(stat.mode)) { 2329 FS.unlink(path); 2330 } 2331 } catch (e) { 2332 return callback(e); 2333 } 2334 2335 callback(null); 2336 },loadRemoteEntry:function (store, path, callback) { 2337 var req = store.get(path); 2338 req.onsuccess = function(event) { callback(null, event.target.result); }; 2339 req.onerror = function() { callback(this.error); }; 2340 },storeRemoteEntry:function (store, path, entry, callback) { 2341 var req = store.put(entry, path); 2342 req.onsuccess = function() { callback(null); }; 2343 req.onerror = function() { callback(this.error); }; 2344 },removeRemoteEntry:function (store, path, callback) { 2345 var req = store.delete(path); 2346 req.onsuccess = function() { callback(null); }; 2347 req.onerror = function() { callback(this.error); }; 2348 },reconcile:function (src, dst, callback) { 2349 var total = 0; 2350 2351 var create = []; 2352 Object.keys(src.entries).forEach(function (key) { 2353 var e = src.entries[key]; 2354 var e2 = dst.entries[key]; 2355 if (!e2 || e.timestamp > e2.timestamp) { 2356 create.push(key); 2357 total++; 2358 } 2359 }); 2360 2361 var remove = []; 2362 Object.keys(dst.entries).forEach(function (key) { 2363 var e = dst.entries[key]; 2364 var e2 = src.entries[key]; 2365 if (!e2) { 2366 remove.push(key); 2367 total++; 2368 } 2369 }); 2370 2371 if (!total) { 2372 return callback(null); 2373 } 2374 2375 var errored = false; 2376 var completed = 0; 2377 var db = src.type === 'remote' ? src.db : dst.db; 2378 var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite'); 2379 var store = transaction.objectStore(IDBFS.DB_STORE_NAME); 2380 2381 function done(err) { 2382 if (err) { 2383 if (!done.errored) { 2384 done.errored = true; 2385 return callback(err); 2386 } 2387 return; 2388 } 2389 if (++completed >= total) { 2390 return callback(null); 2391 } 2392 }; 2393 2394 transaction.onerror = function() { done(this.error); }; 2395 2396 // sort paths in ascending order so directory entries are created 2397 // before the files inside them 2398 create.sort().forEach(function (path) { 2399 if (dst.type === 'local') { 2400 IDBFS.loadRemoteEntry(store, path, function (err, entry) { 2401 if (err) return done(err); 2402 IDBFS.storeLocalEntry(path, entry, done); 2403 }); 2404 } else { 2405 IDBFS.loadLocalEntry(path, function (err, entry) { 2406 if (err) return done(err); 2407 IDBFS.storeRemoteEntry(store, path, entry, done); 2408 }); 2409 } 2410 }); 2411 2412 // sort paths in descending order so files are deleted before their 2413 // parent directories 2414 remove.sort().reverse().forEach(function(path) { 2415 if (dst.type === 'local') { 2416 IDBFS.removeLocalEntry(path, done); 2417 } else { 2418 IDBFS.removeRemoteEntry(store, path, done); 2419 } 2420 }); 2421 }}; 2422 2423 var NODEFS={isWindows:false,staticInit:function () { 2424 NODEFS.isWindows = !!process.platform.match(/^win/); 2425 },mount:function (mount) { 2426 assert(ENVIRONMENT_IS_NODE); 2427 return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0); 2428 },createNode:function (parent, name, mode, dev) { 2429 if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { 2430 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 2431 } 2432 var node = FS.createNode(parent, name, mode); 2433 node.node_ops = NODEFS.node_ops; 2434 node.stream_ops = NODEFS.stream_ops; 2435 return node; 2436 },getMode:function (path) { 2437 var stat; 2438 try { 2439 stat = fs.lstatSync(path); 2440 if (NODEFS.isWindows) { 2441 // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so 2442 // propagate write bits to execute bits. 2443 stat.mode = stat.mode | ((stat.mode & 146) >> 1); 2444 } 2445 } catch (e) { 2446 if (!e.code) throw e; 2447 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2448 } 2449 return stat.mode; 2450 },realPath:function (node) { 2451 var parts = []; 2452 while (node.parent !== node) { 2453 parts.push(node.name); 2454 node = node.parent; 2455 } 2456 parts.push(node.mount.opts.root); 2457 parts.reverse(); 2458 return PATH.join.apply(null, parts); 2459 },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) { 2460 if (flags in NODEFS.flagsToPermissionStringMap) { 2461 return NODEFS.flagsToPermissionStringMap[flags]; 2462 } else { 2463 return flags; 2464 } 2465 },node_ops:{getattr:function (node) { 2466 var path = NODEFS.realPath(node); 2467 var stat; 2468 try { 2469 stat = fs.lstatSync(path); 2470 } catch (e) { 2471 if (!e.code) throw e; 2472 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2473 } 2474 // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096. 2475 // See http://support.microsoft.com/kb/140365 2476 if (NODEFS.isWindows && !stat.blksize) { 2477 stat.blksize = 4096; 2478 } 2479 if (NODEFS.isWindows && !stat.blocks) { 2480 stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0; 2481 } 2482 return { 2483 dev: stat.dev, 2484 ino: stat.ino, 2485 mode: stat.mode, 2486 nlink: stat.nlink, 2487 uid: stat.uid, 2488 gid: stat.gid, 2489 rdev: stat.rdev, 2490 size: stat.size, 2491 atime: stat.atime, 2492 mtime: stat.mtime, 2493 ctime: stat.ctime, 2494 blksize: stat.blksize, 2495 blocks: stat.blocks 2496 }; 2497 },setattr:function (node, attr) { 2498 var path = NODEFS.realPath(node); 2499 try { 2500 if (attr.mode !== undefined) { 2501 fs.chmodSync(path, attr.mode); 2502 // update the common node structure mode as well 2503 node.mode = attr.mode; 2504 } 2505 if (attr.timestamp !== undefined) { 2506 var date = new Date(attr.timestamp); 2507 fs.utimesSync(path, date, date); 2508 } 2509 if (attr.size !== undefined) { 2510 fs.truncateSync(path, attr.size); 2511 } 2512 } catch (e) { 2513 if (!e.code) throw e; 2514 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2515 } 2516 },lookup:function (parent, name) { 2517 var path = PATH.join2(NODEFS.realPath(parent), name); 2518 var mode = NODEFS.getMode(path); 2519 return NODEFS.createNode(parent, name, mode); 2520 },mknod:function (parent, name, mode, dev) { 2521 var node = NODEFS.createNode(parent, name, mode, dev); 2522 // create the backing node for this in the fs root as well 2523 var path = NODEFS.realPath(node); 2524 try { 2525 if (FS.isDir(node.mode)) { 2526 fs.mkdirSync(path, node.mode); 2527 } else { 2528 fs.writeFileSync(path, '', { mode: node.mode }); 2529 } 2530 } catch (e) { 2531 if (!e.code) throw e; 2532 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2533 } 2534 return node; 2535 },rename:function (oldNode, newDir, newName) { 2536 var oldPath = NODEFS.realPath(oldNode); 2537 var newPath = PATH.join2(NODEFS.realPath(newDir), newName); 2538 try { 2539 fs.renameSync(oldPath, newPath); 2540 } catch (e) { 2541 if (!e.code) throw e; 2542 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2543 } 2544 },unlink:function (parent, name) { 2545 var path = PATH.join2(NODEFS.realPath(parent), name); 2546 try { 2547 fs.unlinkSync(path); 2548 } catch (e) { 2549 if (!e.code) throw e; 2550 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2551 } 2552 },rmdir:function (parent, name) { 2553 var path = PATH.join2(NODEFS.realPath(parent), name); 2554 try { 2555 fs.rmdirSync(path); 2556 } catch (e) { 2557 if (!e.code) throw e; 2558 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2559 } 2560 },readdir:function (node) { 2561 var path = NODEFS.realPath(node); 2562 try { 2563 return fs.readdirSync(path); 2564 } catch (e) { 2565 if (!e.code) throw e; 2566 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2567 } 2568 },symlink:function (parent, newName, oldPath) { 2569 var newPath = PATH.join2(NODEFS.realPath(parent), newName); 2570 try { 2571 fs.symlinkSync(oldPath, newPath); 2572 } catch (e) { 2573 if (!e.code) throw e; 2574 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2575 } 2576 },readlink:function (node) { 2577 var path = NODEFS.realPath(node); 2578 try { 2579 return fs.readlinkSync(path); 2580 } catch (e) { 2581 if (!e.code) throw e; 2582 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2583 } 2584 }},stream_ops:{open:function (stream) { 2585 var path = NODEFS.realPath(stream.node); 2586 try { 2587 if (FS.isFile(stream.node.mode)) { 2588 stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags)); 2589 } 2590 } catch (e) { 2591 if (!e.code) throw e; 2592 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2593 } 2594 },close:function (stream) { 2595 try { 2596 if (FS.isFile(stream.node.mode) && stream.nfd) { 2597 fs.closeSync(stream.nfd); 2598 } 2599 } catch (e) { 2600 if (!e.code) throw e; 2601 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2602 } 2603 },read:function (stream, buffer, offset, length, position) { 2604 // FIXME this is terrible. 2605 var nbuffer = new Buffer(length); 2606 var res; 2607 try { 2608 res = fs.readSync(stream.nfd, nbuffer, 0, length, position); 2609 } catch (e) { 2610 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2611 } 2612 if (res > 0) { 2613 for (var i = 0; i < res; i++) { 2614 buffer[offset + i] = nbuffer[i]; 2615 } 2616 } 2617 return res; 2618 },write:function (stream, buffer, offset, length, position) { 2619 // FIXME this is terrible. 2620 var nbuffer = new Buffer(buffer.subarray(offset, offset + length)); 2621 var res; 2622 try { 2623 res = fs.writeSync(stream.nfd, nbuffer, 0, length, position); 2624 } catch (e) { 2625 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2626 } 2627 return res; 2628 },llseek:function (stream, offset, whence) { 2629 var position = offset; 2630 if (whence === 1) { // SEEK_CUR. 2631 position += stream.position; 2632 } else if (whence === 2) { // SEEK_END. 2633 if (FS.isFile(stream.node.mode)) { 2634 try { 2635 var stat = fs.fstatSync(stream.nfd); 2636 position += stat.size; 2637 } catch (e) { 2638 throw new FS.ErrnoError(ERRNO_CODES[e.code]); 2639 } 2640 } 2641 } 2642 2643 if (position < 0) { 2644 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 2645 } 2646 2647 stream.position = position; 2648 return position; 2649 }}}; 2650 2651 var _stdin=allocate(1, "i32*", ALLOC_STATIC); 2652 2653 var _stdout=allocate(1, "i32*", ALLOC_STATIC); 2654 2655 var _stderr=allocate(1, "i32*", ALLOC_STATIC); 2656 2657 function _fflush(stream) { 2658 // int fflush(FILE *stream); 2659 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html 2660 // we don't currently perform any user-space buffering of data 2661 }var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},handleFSError:function (e) { 2662 if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace(); 2663 return ___setErrNo(e.errno); 2664 },lookupPath:function (path, opts) { 2665 path = PATH.resolve(FS.cwd(), path); 2666 opts = opts || {}; 2667 2668 var defaults = { 2669 follow_mount: true, 2670 recurse_count: 0 2671 }; 2672 for (var key in defaults) { 2673 if (opts[key] === undefined) { 2674 opts[key] = defaults[key]; 2675 } 2676 } 2677 2678 if (opts.recurse_count > 8) { // max recursive lookup of 8 2679 throw new FS.ErrnoError(ERRNO_CODES.ELOOP); 2680 } 2681 2682 // split the path 2683 var parts = PATH.normalizeArray(path.split('/').filter(function(p) { 2684 return !!p; 2685 }), false); 2686 2687 // start at the root 2688 var current = FS.root; 2689 var current_path = '/'; 2690 2691 for (var i = 0; i < parts.length; i++) { 2692 var islast = (i === parts.length-1); 2693 if (islast && opts.parent) { 2694 // stop resolving 2695 break; 2696 } 2697 2698 current = FS.lookupNode(current, parts[i]); 2699 current_path = PATH.join2(current_path, parts[i]); 2700 2701 // jump to the mount's root node if this is a mountpoint 2702 if (FS.isMountpoint(current)) { 2703 if (!islast || (islast && opts.follow_mount)) { 2704 current = current.mounted.root; 2705 } 2706 } 2707 2708 // by default, lookupPath will not follow a symlink if it is the final path component. 2709 // setting opts.follow = true will override this behavior. 2710 if (!islast || opts.follow) { 2711 var count = 0; 2712 while (FS.isLink(current.mode)) { 2713 var link = FS.readlink(current_path); 2714 current_path = PATH.resolve(PATH.dirname(current_path), link); 2715 2716 var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count }); 2717 current = lookup.node; 2718 2719 if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX). 2720 throw new FS.ErrnoError(ERRNO_CODES.ELOOP); 2721 } 2722 } 2723 } 2724 } 2725 2726 return { path: current_path, node: current }; 2727 },getPath:function (node) { 2728 var path; 2729 while (true) { 2730 if (FS.isRoot(node)) { 2731 var mount = node.mount.mountpoint; 2732 if (!path) return mount; 2733 return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path; 2734 } 2735 path = path ? node.name + '/' + path : node.name; 2736 node = node.parent; 2737 } 2738 },hashName:function (parentid, name) { 2739 var hash = 0; 2740 2741 2742 for (var i = 0; i < name.length; i++) { 2743 hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; 2744 } 2745 return ((parentid + hash) >>> 0) % FS.nameTable.length; 2746 },hashAddNode:function (node) { 2747 var hash = FS.hashName(node.parent.id, node.name); 2748 node.name_next = FS.nameTable[hash]; 2749 FS.nameTable[hash] = node; 2750 },hashRemoveNode:function (node) { 2751 var hash = FS.hashName(node.parent.id, node.name); 2752 if (FS.nameTable[hash] === node) { 2753 FS.nameTable[hash] = node.name_next; 2754 } else { 2755 var current = FS.nameTable[hash]; 2756 while (current) { 2757 if (current.name_next === node) { 2758 current.name_next = node.name_next; 2759 break; 2760 } 2761 current = current.name_next; 2762 } 2763 } 2764 },lookupNode:function (parent, name) { 2765 var err = FS.mayLookup(parent); 2766 if (err) { 2767 throw new FS.ErrnoError(err); 2768 } 2769 var hash = FS.hashName(parent.id, name); 2770 for (var node = FS.nameTable[hash]; node; node = node.name_next) { 2771 var nodeName = node.name; 2772 if (node.parent.id === parent.id && nodeName === name) { 2773 return node; 2774 } 2775 } 2776 // if we failed to find it in the cache, call into the VFS 2777 return FS.lookup(parent, name); 2778 },createNode:function (parent, name, mode, rdev) { 2779 if (!FS.FSNode) { 2780 FS.FSNode = function(parent, name, mode, rdev) { 2781 if (!parent) { 2782 parent = this; // root node sets parent to itself 2783 } 2784 this.parent = parent; 2785 this.mount = parent.mount; 2786 this.mounted = null; 2787 this.id = FS.nextInode++; 2788 this.name = name; 2789 this.mode = mode; 2790 this.node_ops = {}; 2791 this.stream_ops = {}; 2792 this.rdev = rdev; 2793 }; 2794 2795 FS.FSNode.prototype = {}; 2796 2797 // compatibility 2798 var readMode = 292 | 73; 2799 var writeMode = 146; 2800 2801 // NOTE we must use Object.defineProperties instead of individual calls to 2802 // Object.defineProperty in order to make closure compiler happy 2803 Object.defineProperties(FS.FSNode.prototype, { 2804 read: { 2805 get: function() { return (this.mode & readMode) === readMode; }, 2806 set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; } 2807 }, 2808 write: { 2809 get: function() { return (this.mode & writeMode) === writeMode; }, 2810 set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; } 2811 }, 2812 isFolder: { 2813 get: function() { return FS.isDir(this.mode); }, 2814 }, 2815 isDevice: { 2816 get: function() { return FS.isChrdev(this.mode); }, 2817 }, 2818 }); 2819 } 2820 2821 var node = new FS.FSNode(parent, name, mode, rdev); 2822 2823 FS.hashAddNode(node); 2824 2825 return node; 2826 },destroyNode:function (node) { 2827 FS.hashRemoveNode(node); 2828 },isRoot:function (node) { 2829 return node === node.parent; 2830 },isMountpoint:function (node) { 2831 return !!node.mounted; 2832 },isFile:function (mode) { 2833 return (mode & 61440) === 32768; 2834 },isDir:function (mode) { 2835 return (mode & 61440) === 16384; 2836 },isLink:function (mode) { 2837 return (mode & 61440) === 40960; 2838 },isChrdev:function (mode) { 2839 return (mode & 61440) === 8192; 2840 },isBlkdev:function (mode) { 2841 return (mode & 61440) === 24576; 2842 },isFIFO:function (mode) { 2843 return (mode & 61440) === 4096; 2844 },isSocket:function (mode) { 2845 return (mode & 49152) === 49152; 2846 },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) { 2847 var flags = FS.flagModes[str]; 2848 if (typeof flags === 'undefined') { 2849 throw new Error('Unknown file open mode: ' + str); 2850 } 2851 return flags; 2852 },flagsToPermissionString:function (flag) { 2853 var accmode = flag & 2097155; 2854 var perms = ['r', 'w', 'rw'][accmode]; 2855 if ((flag & 512)) { 2856 perms += 'w'; 2857 } 2858 return perms; 2859 },nodePermissions:function (node, perms) { 2860 if (FS.ignorePermissions) { 2861 return 0; 2862 } 2863 // return 0 if any user, group or owner bits are set. 2864 if (perms.indexOf('r') !== -1 && !(node.mode & 292)) { 2865 return ERRNO_CODES.EACCES; 2866 } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) { 2867 return ERRNO_CODES.EACCES; 2868 } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) { 2869 return ERRNO_CODES.EACCES; 2870 } 2871 return 0; 2872 },mayLookup:function (dir) { 2873 return FS.nodePermissions(dir, 'x'); 2874 },mayCreate:function (dir, name) { 2875 try { 2876 var node = FS.lookupNode(dir, name); 2877 return ERRNO_CODES.EEXIST; 2878 } catch (e) { 2879 } 2880 return FS.nodePermissions(dir, 'wx'); 2881 },mayDelete:function (dir, name, isdir) { 2882 var node; 2883 try { 2884 node = FS.lookupNode(dir, name); 2885 } catch (e) { 2886 return e.errno; 2887 } 2888 var err = FS.nodePermissions(dir, 'wx'); 2889 if (err) { 2890 return err; 2891 } 2892 if (isdir) { 2893 if (!FS.isDir(node.mode)) { 2894 return ERRNO_CODES.ENOTDIR; 2895 } 2896 if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { 2897 return ERRNO_CODES.EBUSY; 2898 } 2899 } else { 2900 if (FS.isDir(node.mode)) { 2901 return ERRNO_CODES.EISDIR; 2902 } 2903 } 2904 return 0; 2905 },mayOpen:function (node, flags) { 2906 if (!node) { 2907 return ERRNO_CODES.ENOENT; 2908 } 2909 if (FS.isLink(node.mode)) { 2910 return ERRNO_CODES.ELOOP; 2911 } else if (FS.isDir(node.mode)) { 2912 if ((flags & 2097155) !== 0 || // opening for write 2913 (flags & 512)) { 2914 return ERRNO_CODES.EISDIR; 2915 } 2916 } 2917 return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); 2918 },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) { 2919 fd_start = fd_start || 0; 2920 fd_end = fd_end || FS.MAX_OPEN_FDS; 2921 for (var fd = fd_start; fd <= fd_end; fd++) { 2922 if (!FS.streams[fd]) { 2923 return fd; 2924 } 2925 } 2926 throw new FS.ErrnoError(ERRNO_CODES.EMFILE); 2927 },getStream:function (fd) { 2928 return FS.streams[fd]; 2929 },createStream:function (stream, fd_start, fd_end) { 2930 if (!FS.FSStream) { 2931 FS.FSStream = function(){}; 2932 FS.FSStream.prototype = {}; 2933 // compatibility 2934 Object.defineProperties(FS.FSStream.prototype, { 2935 object: { 2936 get: function() { return this.node; }, 2937 set: function(val) { this.node = val; } 2938 }, 2939 isRead: { 2940 get: function() { return (this.flags & 2097155) !== 1; } 2941 }, 2942 isWrite: { 2943 get: function() { return (this.flags & 2097155) !== 0; } 2944 }, 2945 isAppend: { 2946 get: function() { return (this.flags & 1024); } 2947 } 2948 }); 2949 } 2950 if (0) { 2951 // reuse the object 2952 stream.__proto__ = FS.FSStream.prototype; 2953 } else { 2954 var newStream = new FS.FSStream(); 2955 for (var p in stream) { 2956 newStream[p] = stream[p]; 2957 } 2958 stream = newStream; 2959 } 2960 var fd = FS.nextfd(fd_start, fd_end); 2961 stream.fd = fd; 2962 FS.streams[fd] = stream; 2963 return stream; 2964 },closeStream:function (fd) { 2965 FS.streams[fd] = null; 2966 },getStreamFromPtr:function (ptr) { 2967 return FS.streams[ptr - 1]; 2968 },getPtrForStream:function (stream) { 2969 return stream ? stream.fd + 1 : 0; 2970 },chrdev_stream_ops:{open:function (stream) { 2971 var device = FS.getDevice(stream.node.rdev); 2972 // override node's stream ops with the device's 2973 stream.stream_ops = device.stream_ops; 2974 // forward the open call 2975 if (stream.stream_ops.open) { 2976 stream.stream_ops.open(stream); 2977 } 2978 },llseek:function () { 2979 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); 2980 }},major:function (dev) { 2981 return ((dev) >> 8); 2982 },minor:function (dev) { 2983 return ((dev) & 0xff); 2984 },makedev:function (ma, mi) { 2985 return ((ma) << 8 | (mi)); 2986 },registerDevice:function (dev, ops) { 2987 FS.devices[dev] = { stream_ops: ops }; 2988 },getDevice:function (dev) { 2989 return FS.devices[dev]; 2990 },getMounts:function (mount) { 2991 var mounts = []; 2992 var check = [mount]; 2993 2994 while (check.length) { 2995 var m = check.pop(); 2996 2997 mounts.push(m); 2998 2999 check.push.apply(check, m.mounts); 3000 } 3001 3002 return mounts; 3003 },syncfs:function (populate, callback) { 3004 if (typeof(populate) === 'function') { 3005 callback = populate; 3006 populate = false; 3007 } 3008 3009 var mounts = FS.getMounts(FS.root.mount); 3010 var completed = 0; 3011 3012 function done(err) { 3013 if (err) { 3014 if (!done.errored) { 3015 done.errored = true; 3016 return callback(err); 3017 } 3018 return; 3019 } 3020 if (++completed >= mounts.length) { 3021 callback(null); 3022 } 3023 }; 3024 3025 // sync all mounts 3026 mounts.forEach(function (mount) { 3027 if (!mount.type.syncfs) { 3028 return done(null); 3029 } 3030 mount.type.syncfs(mount, populate, done); 3031 }); 3032 },mount:function (type, opts, mountpoint) { 3033 var root = mountpoint === '/'; 3034 var pseudo = !mountpoint; 3035 var node; 3036 3037 if (root && FS.root) { 3038 throw new FS.ErrnoError(ERRNO_CODES.EBUSY); 3039 } else if (!root && !pseudo) { 3040 var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); 3041 3042 mountpoint = lookup.path; // use the absolute path 3043 node = lookup.node; 3044 3045 if (FS.isMountpoint(node)) { 3046 throw new FS.ErrnoError(ERRNO_CODES.EBUSY); 3047 } 3048 3049 if (!FS.isDir(node.mode)) { 3050 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); 3051 } 3052 } 3053 3054 var mount = { 3055 type: type, 3056 opts: opts, 3057 mountpoint: mountpoint, 3058 mounts: [] 3059 }; 3060 3061 // create a root node for the fs 3062 var mountRoot = type.mount(mount); 3063 mountRoot.mount = mount; 3064 mount.root = mountRoot; 3065 3066 if (root) { 3067 FS.root = mountRoot; 3068 } else if (node) { 3069 // set as a mountpoint 3070 node.mounted = mount; 3071 3072 // add the new mount to the current mount's children 3073 if (node.mount) { 3074 node.mount.mounts.push(mount); 3075 } 3076 } 3077 3078 return mountRoot; 3079 },unmount:function (mountpoint) { 3080 var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); 3081 3082 if (!FS.isMountpoint(lookup.node)) { 3083 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3084 } 3085 3086 // destroy the nodes for this mount, and all its child mounts 3087 var node = lookup.node; 3088 var mount = node.mounted; 3089 var mounts = FS.getMounts(mount); 3090 3091 Object.keys(FS.nameTable).forEach(function (hash) { 3092 var current = FS.nameTable[hash]; 3093 3094 while (current) { 3095 var next = current.name_next; 3096 3097 if (mounts.indexOf(current.mount) !== -1) { 3098 FS.destroyNode(current); 3099 } 3100 3101 current = next; 3102 } 3103 }); 3104 3105 // no longer a mountpoint 3106 node.mounted = null; 3107 3108 // remove this mount from the child mounts 3109 var idx = node.mount.mounts.indexOf(mount); 3110 assert(idx !== -1); 3111 node.mount.mounts.splice(idx, 1); 3112 },lookup:function (parent, name) { 3113 return parent.node_ops.lookup(parent, name); 3114 },mknod:function (path, mode, dev) { 3115 var lookup = FS.lookupPath(path, { parent: true }); 3116 var parent = lookup.node; 3117 var name = PATH.basename(path); 3118 var err = FS.mayCreate(parent, name); 3119 if (err) { 3120 throw new FS.ErrnoError(err); 3121 } 3122 if (!parent.node_ops.mknod) { 3123 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 3124 } 3125 return parent.node_ops.mknod(parent, name, mode, dev); 3126 },create:function (path, mode) { 3127 mode = mode !== undefined ? mode : 438 /* 0666 */; 3128 mode &= 4095; 3129 mode |= 32768; 3130 return FS.mknod(path, mode, 0); 3131 },mkdir:function (path, mode) { 3132 mode = mode !== undefined ? mode : 511 /* 0777 */; 3133 mode &= 511 | 512; 3134 mode |= 16384; 3135 return FS.mknod(path, mode, 0); 3136 },mkdev:function (path, mode, dev) { 3137 if (typeof(dev) === 'undefined') { 3138 dev = mode; 3139 mode = 438 /* 0666 */; 3140 } 3141 mode |= 8192; 3142 return FS.mknod(path, mode, dev); 3143 },symlink:function (oldpath, newpath) { 3144 var lookup = FS.lookupPath(newpath, { parent: true }); 3145 var parent = lookup.node; 3146 var newname = PATH.basename(newpath); 3147 var err = FS.mayCreate(parent, newname); 3148 if (err) { 3149 throw new FS.ErrnoError(err); 3150 } 3151 if (!parent.node_ops.symlink) { 3152 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 3153 } 3154 return parent.node_ops.symlink(parent, newname, oldpath); 3155 },rename:function (old_path, new_path) { 3156 var old_dirname = PATH.dirname(old_path); 3157 var new_dirname = PATH.dirname(new_path); 3158 var old_name = PATH.basename(old_path); 3159 var new_name = PATH.basename(new_path); 3160 // parents must exist 3161 var lookup, old_dir, new_dir; 3162 try { 3163 lookup = FS.lookupPath(old_path, { parent: true }); 3164 old_dir = lookup.node; 3165 lookup = FS.lookupPath(new_path, { parent: true }); 3166 new_dir = lookup.node; 3167 } catch (e) { 3168 throw new FS.ErrnoError(ERRNO_CODES.EBUSY); 3169 } 3170 // need to be part of the same mount 3171 if (old_dir.mount !== new_dir.mount) { 3172 throw new FS.ErrnoError(ERRNO_CODES.EXDEV); 3173 } 3174 // source must exist 3175 var old_node = FS.lookupNode(old_dir, old_name); 3176 // old path should not be an ancestor of the new path 3177 var relative = PATH.relative(old_path, new_dirname); 3178 if (relative.charAt(0) !== '.') { 3179 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3180 } 3181 // new path should not be an ancestor of the old path 3182 relative = PATH.relative(new_path, old_dirname); 3183 if (relative.charAt(0) !== '.') { 3184 throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); 3185 } 3186 // see if the new path already exists 3187 var new_node; 3188 try { 3189 new_node = FS.lookupNode(new_dir, new_name); 3190 } catch (e) { 3191 // not fatal 3192 } 3193 // early out if nothing needs to change 3194 if (old_node === new_node) { 3195 return; 3196 } 3197 // we'll need to delete the old entry 3198 var isdir = FS.isDir(old_node.mode); 3199 var err = FS.mayDelete(old_dir, old_name, isdir); 3200 if (err) { 3201 throw new FS.ErrnoError(err); 3202 } 3203 // need delete permissions if we'll be overwriting. 3204 // need create permissions if new doesn't already exist. 3205 err = new_node ? 3206 FS.mayDelete(new_dir, new_name, isdir) : 3207 FS.mayCreate(new_dir, new_name); 3208 if (err) { 3209 throw new FS.ErrnoError(err); 3210 } 3211 if (!old_dir.node_ops.rename) { 3212 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 3213 } 3214 if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { 3215 throw new FS.ErrnoError(ERRNO_CODES.EBUSY); 3216 } 3217 // if we are going to change the parent, check write permissions 3218 if (new_dir !== old_dir) { 3219 err = FS.nodePermissions(old_dir, 'w'); 3220 if (err) { 3221 throw new FS.ErrnoError(err); 3222 } 3223 } 3224 // remove the node from the lookup hash 3225 FS.hashRemoveNode(old_node); 3226 // do the underlying fs rename 3227 try { 3228 old_dir.node_ops.rename(old_node, new_dir, new_name); 3229 } catch (e) { 3230 throw e; 3231 } finally { 3232 // add the node back to the hash (in case node_ops.rename 3233 // changed its name) 3234 FS.hashAddNode(old_node); 3235 } 3236 },rmdir:function (path) { 3237 var lookup = FS.lookupPath(path, { parent: true }); 3238 var parent = lookup.node; 3239 var name = PATH.basename(path); 3240 var node = FS.lookupNode(parent, name); 3241 var err = FS.mayDelete(parent, name, true); 3242 if (err) { 3243 throw new FS.ErrnoError(err); 3244 } 3245 if (!parent.node_ops.rmdir) { 3246 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 3247 } 3248 if (FS.isMountpoint(node)) { 3249 throw new FS.ErrnoError(ERRNO_CODES.EBUSY); 3250 } 3251 parent.node_ops.rmdir(parent, name); 3252 FS.destroyNode(node); 3253 },readdir:function (path) { 3254 var lookup = FS.lookupPath(path, { follow: true }); 3255 var node = lookup.node; 3256 if (!node.node_ops.readdir) { 3257 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); 3258 } 3259 return node.node_ops.readdir(node); 3260 },unlink:function (path) { 3261 var lookup = FS.lookupPath(path, { parent: true }); 3262 var parent = lookup.node; 3263 var name = PATH.basename(path); 3264 var node = FS.lookupNode(parent, name); 3265 var err = FS.mayDelete(parent, name, false); 3266 if (err) { 3267 // POSIX says unlink should set EPERM, not EISDIR 3268 if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM; 3269 throw new FS.ErrnoError(err); 3270 } 3271 if (!parent.node_ops.unlink) { 3272 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 3273 } 3274 if (FS.isMountpoint(node)) { 3275 throw new FS.ErrnoError(ERRNO_CODES.EBUSY); 3276 } 3277 parent.node_ops.unlink(parent, name); 3278 FS.destroyNode(node); 3279 },readlink:function (path) { 3280 var lookup = FS.lookupPath(path); 3281 var link = lookup.node; 3282 if (!link.node_ops.readlink) { 3283 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3284 } 3285 return link.node_ops.readlink(link); 3286 },stat:function (path, dontFollow) { 3287 var lookup = FS.lookupPath(path, { follow: !dontFollow }); 3288 var node = lookup.node; 3289 if (!node.node_ops.getattr) { 3290 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 3291 } 3292 return node.node_ops.getattr(node); 3293 },lstat:function (path) { 3294 return FS.stat(path, true); 3295 },chmod:function (path, mode, dontFollow) { 3296 var node; 3297 if (typeof path === 'string') { 3298 var lookup = FS.lookupPath(path, { follow: !dontFollow }); 3299 node = lookup.node; 3300 } else { 3301 node = path; 3302 } 3303 if (!node.node_ops.setattr) { 3304 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 3305 } 3306 node.node_ops.setattr(node, { 3307 mode: (mode & 4095) | (node.mode & ~4095), 3308 timestamp: Date.now() 3309 }); 3310 },lchmod:function (path, mode) { 3311 FS.chmod(path, mode, true); 3312 },fchmod:function (fd, mode) { 3313 var stream = FS.getStream(fd); 3314 if (!stream) { 3315 throw new FS.ErrnoError(ERRNO_CODES.EBADF); 3316 } 3317 FS.chmod(stream.node, mode); 3318 },chown:function (path, uid, gid, dontFollow) { 3319 var node; 3320 if (typeof path === 'string') { 3321 var lookup = FS.lookupPath(path, { follow: !dontFollow }); 3322 node = lookup.node; 3323 } else { 3324 node = path; 3325 } 3326 if (!node.node_ops.setattr) { 3327 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 3328 } 3329 node.node_ops.setattr(node, { 3330 timestamp: Date.now() 3331 // we ignore the uid / gid for now 3332 }); 3333 },lchown:function (path, uid, gid) { 3334 FS.chown(path, uid, gid, true); 3335 },fchown:function (fd, uid, gid) { 3336 var stream = FS.getStream(fd); 3337 if (!stream) { 3338 throw new FS.ErrnoError(ERRNO_CODES.EBADF); 3339 } 3340 FS.chown(stream.node, uid, gid); 3341 },truncate:function (path, len) { 3342 if (len < 0) { 3343 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3344 } 3345 var node; 3346 if (typeof path === 'string') { 3347 var lookup = FS.lookupPath(path, { follow: true }); 3348 node = lookup.node; 3349 } else { 3350 node = path; 3351 } 3352 if (!node.node_ops.setattr) { 3353 throw new FS.ErrnoError(ERRNO_CODES.EPERM); 3354 } 3355 if (FS.isDir(node.mode)) { 3356 throw new FS.ErrnoError(ERRNO_CODES.EISDIR); 3357 } 3358 if (!FS.isFile(node.mode)) { 3359 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3360 } 3361 var err = FS.nodePermissions(node, 'w'); 3362 if (err) { 3363 throw new FS.ErrnoError(err); 3364 } 3365 node.node_ops.setattr(node, { 3366 size: len, 3367 timestamp: Date.now() 3368 }); 3369 },ftruncate:function (fd, len) { 3370 var stream = FS.getStream(fd); 3371 if (!stream) { 3372 throw new FS.ErrnoError(ERRNO_CODES.EBADF); 3373 } 3374 if ((stream.flags & 2097155) === 0) { 3375 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3376 } 3377 FS.truncate(stream.node, len); 3378 },utime:function (path, atime, mtime) { 3379 var lookup = FS.lookupPath(path, { follow: true }); 3380 var node = lookup.node; 3381 node.node_ops.setattr(node, { 3382 timestamp: Math.max(atime, mtime) 3383 }); 3384 },open:function (path, flags, mode, fd_start, fd_end) { 3385 flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags; 3386 mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode; 3387 if ((flags & 64)) { 3388 mode = (mode & 4095) | 32768; 3389 } else { 3390 mode = 0; 3391 } 3392 var node; 3393 if (typeof path === 'object') { 3394 node = path; 3395 } else { 3396 path = PATH.normalize(path); 3397 try { 3398 var lookup = FS.lookupPath(path, { 3399 follow: !(flags & 131072) 3400 }); 3401 node = lookup.node; 3402 } catch (e) { 3403 // ignore 3404 } 3405 } 3406 // perhaps we need to create the node 3407 if ((flags & 64)) { 3408 if (node) { 3409 // if O_CREAT and O_EXCL are set, error out if the node already exists 3410 if ((flags & 128)) { 3411 throw new FS.ErrnoError(ERRNO_CODES.EEXIST); 3412 } 3413 } else { 3414 // node doesn't exist, try to create it 3415 node = FS.mknod(path, mode, 0); 3416 } 3417 } 3418 if (!node) { 3419 throw new FS.ErrnoError(ERRNO_CODES.ENOENT); 3420 } 3421 // can't truncate a device 3422 if (FS.isChrdev(node.mode)) { 3423 flags &= ~512; 3424 } 3425 // check permissions 3426 var err = FS.mayOpen(node, flags); 3427 if (err) { 3428 throw new FS.ErrnoError(err); 3429 } 3430 // do truncation if necessary 3431 if ((flags & 512)) { 3432 FS.truncate(node, 0); 3433 } 3434 // we've already handled these, don't pass down to the underlying vfs 3435 flags &= ~(128 | 512); 3436 3437 // register the stream with the filesystem 3438 var stream = FS.createStream({ 3439 node: node, 3440 path: FS.getPath(node), // we want the absolute path to the node 3441 flags: flags, 3442 seekable: true, 3443 position: 0, 3444 stream_ops: node.stream_ops, 3445 // used by the file family libc calls (fopen, fwrite, ferror, etc.) 3446 ungotten: [], 3447 error: false 3448 }, fd_start, fd_end); 3449 // call the new stream's open function 3450 if (stream.stream_ops.open) { 3451 stream.stream_ops.open(stream); 3452 } 3453 if (Module['logReadFiles'] && !(flags & 1)) { 3454 if (!FS.readFiles) FS.readFiles = {}; 3455 if (!(path in FS.readFiles)) { 3456 FS.readFiles[path] = 1; 3457 Module['printErr']('read file: ' + path); 3458 } 3459 } 3460 return stream; 3461 },close:function (stream) { 3462 try { 3463 if (stream.stream_ops.close) { 3464 stream.stream_ops.close(stream); 3465 } 3466 } catch (e) { 3467 throw e; 3468 } finally { 3469 FS.closeStream(stream.fd); 3470 } 3471 },llseek:function (stream, offset, whence) { 3472 if (!stream.seekable || !stream.stream_ops.llseek) { 3473 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); 3474 } 3475 return stream.stream_ops.llseek(stream, offset, whence); 3476 },read:function (stream, buffer, offset, length, position) { 3477 if (length < 0 || position < 0) { 3478 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3479 } 3480 if ((stream.flags & 2097155) === 1) { 3481 throw new FS.ErrnoError(ERRNO_CODES.EBADF); 3482 } 3483 if (FS.isDir(stream.node.mode)) { 3484 throw new FS.ErrnoError(ERRNO_CODES.EISDIR); 3485 } 3486 if (!stream.stream_ops.read) { 3487 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3488 } 3489 var seeking = true; 3490 if (typeof position === 'undefined') { 3491 position = stream.position; 3492 seeking = false; 3493 } else if (!stream.seekable) { 3494 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); 3495 } 3496 var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); 3497 if (!seeking) stream.position += bytesRead; 3498 return bytesRead; 3499 },write:function (stream, buffer, offset, length, position, canOwn) { 3500 if (length < 0 || position < 0) { 3501 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3502 } 3503 if ((stream.flags & 2097155) === 0) { 3504 throw new FS.ErrnoError(ERRNO_CODES.EBADF); 3505 } 3506 if (FS.isDir(stream.node.mode)) { 3507 throw new FS.ErrnoError(ERRNO_CODES.EISDIR); 3508 } 3509 if (!stream.stream_ops.write) { 3510 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3511 } 3512 var seeking = true; 3513 if (typeof position === 'undefined') { 3514 position = stream.position; 3515 seeking = false; 3516 } else if (!stream.seekable) { 3517 throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); 3518 } 3519 if (stream.flags & 1024) { 3520 // seek to the end before writing in append mode 3521 FS.llseek(stream, 0, 2); 3522 } 3523 var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); 3524 if (!seeking) stream.position += bytesWritten; 3525 return bytesWritten; 3526 },allocate:function (stream, offset, length) { 3527 if (offset < 0 || length <= 0) { 3528 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 3529 } 3530 if ((stream.flags & 2097155) === 0) { 3531 throw new FS.ErrnoError(ERRNO_CODES.EBADF); 3532 } 3533 if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) { 3534 throw new FS.ErrnoError(ERRNO_CODES.ENODEV); 3535 } 3536 if (!stream.stream_ops.allocate) { 3537 throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); 3538 } 3539 stream.stream_ops.allocate(stream, offset, length); 3540 },mmap:function (stream, buffer, offset, length, position, prot, flags) { 3541 // TODO if PROT is PROT_WRITE, make sure we have write access 3542 if ((stream.flags & 2097155) === 1) { 3543 throw new FS.ErrnoError(ERRNO_CODES.EACCES); 3544 } 3545 if (!stream.stream_ops.mmap) { 3546 throw new FS.ErrnoError(ERRNO_CODES.ENODEV); 3547 } 3548 return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags); 3549 },ioctl:function (stream, cmd, arg) { 3550 if (!stream.stream_ops.ioctl) { 3551 throw new FS.ErrnoError(ERRNO_CODES.ENOTTY); 3552 } 3553 return stream.stream_ops.ioctl(stream, cmd, arg); 3554 },readFile:function (path, opts) { 3555 opts = opts || {}; 3556 opts.flags = opts.flags || 'r'; 3557 opts.encoding = opts.encoding || 'binary'; 3558 if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { 3559 throw new Error('Invalid encoding type "' + opts.encoding + '"'); 3560 } 3561 var ret; 3562 var stream = FS.open(path, opts.flags); 3563 var stat = FS.stat(path); 3564 var length = stat.size; 3565 var buf = new Uint8Array(length); 3566 FS.read(stream, buf, 0, length, 0); 3567 if (opts.encoding === 'utf8') { 3568 ret = ''; 3569 var utf8 = new Runtime.UTF8Processor(); 3570 for (var i = 0; i < length; i++) { 3571 ret += utf8.processCChar(buf[i]); 3572 } 3573 } else if (opts.encoding === 'binary') { 3574 ret = buf; 3575 } 3576 FS.close(stream); 3577 return ret; 3578 },writeFile:function (path, data, opts) { 3579 opts = opts || {}; 3580 opts.flags = opts.flags || 'w'; 3581 opts.encoding = opts.encoding || 'utf8'; 3582 if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { 3583 throw new Error('Invalid encoding type "' + opts.encoding + '"'); 3584 } 3585 var stream = FS.open(path, opts.flags, opts.mode); 3586 if (opts.encoding === 'utf8') { 3587 var utf8 = new Runtime.UTF8Processor(); 3588 var buf = new Uint8Array(utf8.processJSString(data)); 3589 FS.write(stream, buf, 0, buf.length, 0, opts.canOwn); 3590 } else if (opts.encoding === 'binary') { 3591 FS.write(stream, data, 0, data.length, 0, opts.canOwn); 3592 } 3593 FS.close(stream); 3594 },cwd:function () { 3595 return FS.currentPath; 3596 },chdir:function (path) { 3597 var lookup = FS.lookupPath(path, { follow: true }); 3598 if (!FS.isDir(lookup.node.mode)) { 3599 throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); 3600 } 3601 var err = FS.nodePermissions(lookup.node, 'x'); 3602 if (err) { 3603 throw new FS.ErrnoError(err); 3604 } 3605 FS.currentPath = lookup.path; 3606 },createDefaultDirectories:function () { 3607 FS.mkdir('/tmp'); 3608 },createDefaultDevices:function () { 3609 // create /dev 3610 FS.mkdir('/dev'); 3611 // setup /dev/null 3612 FS.registerDevice(FS.makedev(1, 3), { 3613 read: function() { return 0; }, 3614 write: function() { return 0; } 3615 }); 3616 FS.mkdev('/dev/null', FS.makedev(1, 3)); 3617 // setup /dev/tty and /dev/tty1 3618 // stderr needs to print output using Module['printErr'] 3619 // so we register a second tty just for it. 3620 TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); 3621 TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); 3622 FS.mkdev('/dev/tty', FS.makedev(5, 0)); 3623 FS.mkdev('/dev/tty1', FS.makedev(6, 0)); 3624 // we're not going to emulate the actual shm device, 3625 // just create the tmp dirs that reside in it commonly 3626 FS.mkdir('/dev/shm'); 3627 FS.mkdir('/dev/shm/tmp'); 3628 },createStandardStreams:function () { 3629 // TODO deprecate the old functionality of a single 3630 // input / output callback and that utilizes FS.createDevice 3631 // and instead require a unique set of stream ops 3632 3633 // by default, we symlink the standard streams to the 3634 // default tty devices. however, if the standard streams 3635 // have been overwritten we create a unique device for 3636 // them instead. 3637 if (Module['stdin']) { 3638 FS.createDevice('/dev', 'stdin', Module['stdin']); 3639 } else { 3640 FS.symlink('/dev/tty', '/dev/stdin'); 3641 } 3642 if (Module['stdout']) { 3643 FS.createDevice('/dev', 'stdout', null, Module['stdout']); 3644 } else { 3645 FS.symlink('/dev/tty', '/dev/stdout'); 3646 } 3647 if (Module['stderr']) { 3648 FS.createDevice('/dev', 'stderr', null, Module['stderr']); 3649 } else { 3650 FS.symlink('/dev/tty1', '/dev/stderr'); 3651 } 3652 3653 // open default streams for the stdin, stdout and stderr devices 3654 var stdin = FS.open('/dev/stdin', 'r'); 3655 HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin); 3656 assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')'); 3657 3658 var stdout = FS.open('/dev/stdout', 'w'); 3659 HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout); 3660 assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')'); 3661 3662 var stderr = FS.open('/dev/stderr', 'w'); 3663 HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr); 3664 assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')'); 3665 },ensureErrnoError:function () { 3666 if (FS.ErrnoError) return; 3667 FS.ErrnoError = function ErrnoError(errno) { 3668 this.errno = errno; 3669 for (var key in ERRNO_CODES) { 3670 if (ERRNO_CODES[key] === errno) { 3671 this.code = key; 3672 break; 3673 } 3674 } 3675 this.message = ERRNO_MESSAGES[errno]; 3676 }; 3677 FS.ErrnoError.prototype = new Error(); 3678 FS.ErrnoError.prototype.constructor = FS.ErrnoError; 3679 // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info) 3680 [ERRNO_CODES.ENOENT].forEach(function(code) { 3681 FS.genericErrors[code] = new FS.ErrnoError(code); 3682 FS.genericErrors[code].stack = '<generic error, no stack>'; 3683 }); 3684 },staticInit:function () { 3685 FS.ensureErrnoError(); 3686 3687 FS.nameTable = new Array(4096); 3688 3689 FS.mount(MEMFS, {}, '/'); 3690 3691 FS.createDefaultDirectories(); 3692 FS.createDefaultDevices(); 3693 },init:function (input, output, error) { 3694 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)'); 3695 FS.init.initialized = true; 3696 3697 FS.ensureErrnoError(); 3698 3699 // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here 3700 Module['stdin'] = input || Module['stdin']; 3701 Module['stdout'] = output || Module['stdout']; 3702 Module['stderr'] = error || Module['stderr']; 3703 3704 FS.createStandardStreams(); 3705 },quit:function () { 3706 FS.init.initialized = false; 3707 for (var i = 0; i < FS.streams.length; i++) { 3708 var stream = FS.streams[i]; 3709 if (!stream) { 3710 continue; 3711 } 3712 FS.close(stream); 3713 } 3714 },getMode:function (canRead, canWrite) { 3715 var mode = 0; 3716 if (canRead) mode |= 292 | 73; 3717 if (canWrite) mode |= 146; 3718 return mode; 3719 },joinPath:function (parts, forceRelative) { 3720 var path = PATH.join.apply(null, parts); 3721 if (forceRelative && path[0] == '/') path = path.substr(1); 3722 return path; 3723 },absolutePath:function (relative, base) { 3724 return PATH.resolve(base, relative); 3725 },standardizePath:function (path) { 3726 return PATH.normalize(path); 3727 },findObject:function (path, dontResolveLastLink) { 3728 var ret = FS.analyzePath(path, dontResolveLastLink); 3729 if (ret.exists) { 3730 return ret.object; 3731 } else { 3732 ___setErrNo(ret.error); 3733 return null; 3734 } 3735 },analyzePath:function (path, dontResolveLastLink) { 3736 // operate from within the context of the symlink's target 3737 try { 3738 var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); 3739 path = lookup.path; 3740 } catch (e) { 3741 } 3742 var ret = { 3743 isRoot: false, exists: false, error: 0, name: null, path: null, object: null, 3744 parentExists: false, parentPath: null, parentObject: null 3745 }; 3746 try { 3747 var lookup = FS.lookupPath(path, { parent: true }); 3748 ret.parentExists = true; 3749 ret.parentPath = lookup.path; 3750 ret.parentObject = lookup.node; 3751 ret.name = PATH.basename(path); 3752 lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); 3753 ret.exists = true; 3754 ret.path = lookup.path; 3755 ret.object = lookup.node; 3756 ret.name = lookup.node.name; 3757 ret.isRoot = lookup.path === '/'; 3758 } catch (e) { 3759 ret.error = e.errno; 3760 }; 3761 return ret; 3762 },createFolder:function (parent, name, canRead, canWrite) { 3763 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); 3764 var mode = FS.getMode(canRead, canWrite); 3765 return FS.mkdir(path, mode); 3766 },createPath:function (parent, path, canRead, canWrite) { 3767 parent = typeof parent === 'string' ? parent : FS.getPath(parent); 3768 var parts = path.split('/').reverse(); 3769 while (parts.length) { 3770 var part = parts.pop(); 3771 if (!part) continue; 3772 var current = PATH.join2(parent, part); 3773 try { 3774 FS.mkdir(current); 3775 } catch (e) { 3776 // ignore EEXIST 3777 } 3778 parent = current; 3779 } 3780 return current; 3781 },createFile:function (parent, name, properties, canRead, canWrite) { 3782 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); 3783 var mode = FS.getMode(canRead, canWrite); 3784 return FS.create(path, mode); 3785 },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) { 3786 var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent; 3787 var mode = FS.getMode(canRead, canWrite); 3788 var node = FS.create(path, mode); 3789 if (data) { 3790 if (typeof data === 'string') { 3791 var arr = new Array(data.length); 3792 for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); 3793 data = arr; 3794 } 3795 // make sure we can write to the file 3796 FS.chmod(node, mode | 146); 3797 var stream = FS.open(node, 'w'); 3798 FS.write(stream, data, 0, data.length, 0, canOwn); 3799 FS.close(stream); 3800 FS.chmod(node, mode); 3801 } 3802 return node; 3803 },createDevice:function (parent, name, input, output) { 3804 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); 3805 var mode = FS.getMode(!!input, !!output); 3806 if (!FS.createDevice.major) FS.createDevice.major = 64; 3807 var dev = FS.makedev(FS.createDevice.major++, 0); 3808 // Create a fake device that a set of stream ops to emulate 3809 // the old behavior. 3810 FS.registerDevice(dev, { 3811 open: function(stream) { 3812 stream.seekable = false; 3813 }, 3814 close: function(stream) { 3815 // flush any pending line data 3816 if (output && output.buffer && output.buffer.length) { 3817 output(10); 3818 } 3819 }, 3820 read: function(stream, buffer, offset, length, pos /* ignored */) { 3821 var bytesRead = 0; 3822 for (var i = 0; i < length; i++) { 3823 var result; 3824 try { 3825 result = input(); 3826 } catch (e) { 3827 throw new FS.ErrnoError(ERRNO_CODES.EIO); 3828 } 3829 if (result === undefined && bytesRead === 0) { 3830 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); 3831 } 3832 if (result === null || result === undefined) break; 3833 bytesRead++; 3834 buffer[offset+i] = result; 3835 } 3836 if (bytesRead) { 3837 stream.node.timestamp = Date.now(); 3838 } 3839 return bytesRead; 3840 }, 3841 write: function(stream, buffer, offset, length, pos) { 3842 for (var i = 0; i < length; i++) { 3843 try { 3844 output(buffer[offset+i]); 3845 } catch (e) { 3846 throw new FS.ErrnoError(ERRNO_CODES.EIO); 3847 } 3848 } 3849 if (length) { 3850 stream.node.timestamp = Date.now(); 3851 } 3852 return i; 3853 } 3854 }); 3855 return FS.mkdev(path, mode, dev); 3856 },createLink:function (parent, name, target, canRead, canWrite) { 3857 var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); 3858 return FS.symlink(target, path); 3859 },forceLoadFile:function (obj) { 3860 if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; 3861 var success = true; 3862 if (typeof XMLHttpRequest !== 'undefined') { 3863 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."); 3864 } else if (Module['read']) { 3865 // Command-line. 3866 try { 3867 // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as 3868 // read() will try to parse UTF8. 3869 obj.contents = intArrayFromString(Module['read'](obj.url), true); 3870 } catch (e) { 3871 success = false; 3872 } 3873 } else { 3874 throw new Error('Cannot load without read() or XMLHttpRequest.'); 3875 } 3876 if (!success) ___setErrNo(ERRNO_CODES.EIO); 3877 return success; 3878 },createLazyFile:function (parent, name, url, canRead, canWrite) { 3879 // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse. 3880 function LazyUint8Array() { 3881 this.lengthKnown = false; 3882 this.chunks = []; // Loaded chunks. Index is the chunk number 3883 } 3884 LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { 3885 if (idx > this.length-1 || idx < 0) { 3886 return undefined; 3887 } 3888 var chunkOffset = idx % this.chunkSize; 3889 var chunkNum = Math.floor(idx / this.chunkSize); 3890 return this.getter(chunkNum)[chunkOffset]; 3891 } 3892 LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { 3893 this.getter = getter; 3894 } 3895 LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { 3896 // Find length 3897 var xhr = new XMLHttpRequest(); 3898 xhr.open('HEAD', url, false); 3899 xhr.send(null); 3900 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); 3901 var datalength = Number(xhr.getResponseHeader("Content-length")); 3902 var header; 3903 var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; 3904 var chunkSize = 1024*1024; // Chunk size in bytes 3905 3906 if (!hasByteServing) chunkSize = datalength; 3907 3908 // Function to get a range from the remote URL. 3909 var doXHR = (function(from, to) { 3910 if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); 3911 if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); 3912 3913 // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. 3914 var xhr = new XMLHttpRequest(); 3915 xhr.open('GET', url, false); 3916 if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); 3917 3918 // Some hints to the browser that we want binary data. 3919 if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer'; 3920 if (xhr.overrideMimeType) { 3921 xhr.overrideMimeType('text/plain; charset=x-user-defined'); 3922 } 3923 3924 xhr.send(null); 3925 if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); 3926 if (xhr.response !== undefined) { 3927 return new Uint8Array(xhr.response || []); 3928 } else { 3929 return intArrayFromString(xhr.responseText || '', true); 3930 } 3931 }); 3932 var lazyArray = this; 3933 lazyArray.setDataGetter(function(chunkNum) { 3934 var start = chunkNum * chunkSize; 3935 var end = (chunkNum+1) * chunkSize - 1; // including this byte 3936 end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block 3937 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") { 3938 lazyArray.chunks[chunkNum] = doXHR(start, end); 3939 } 3940 if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!"); 3941 return lazyArray.chunks[chunkNum]; 3942 }); 3943 3944 this._length = datalength; 3945 this._chunkSize = chunkSize; 3946 this.lengthKnown = true; 3947 } 3948 if (typeof XMLHttpRequest !== 'undefined') { 3949 if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; 3950 var lazyArray = new LazyUint8Array(); 3951 Object.defineProperty(lazyArray, "length", { 3952 get: function() { 3953 if(!this.lengthKnown) { 3954 this.cacheLength(); 3955 } 3956 return this._length; 3957 } 3958 }); 3959 Object.defineProperty(lazyArray, "chunkSize", { 3960 get: function() { 3961 if(!this.lengthKnown) { 3962 this.cacheLength(); 3963 } 3964 return this._chunkSize; 3965 } 3966 }); 3967 3968 var properties = { isDevice: false, contents: lazyArray }; 3969 } else { 3970 var properties = { isDevice: false, url: url }; 3971 } 3972 3973 var node = FS.createFile(parent, name, properties, canRead, canWrite); 3974 // This is a total hack, but I want to get this lazy file code out of the 3975 // core of MEMFS. If we want to keep this lazy file concept I feel it should 3976 // be its own thin LAZYFS proxying calls to MEMFS. 3977 if (properties.contents) { 3978 node.contents = properties.contents; 3979 } else if (properties.url) { 3980 node.contents = null; 3981 node.url = properties.url; 3982 } 3983 // override each stream op with one that tries to force load the lazy file first 3984 var stream_ops = {}; 3985 var keys = Object.keys(node.stream_ops); 3986 keys.forEach(function(key) { 3987 var fn = node.stream_ops[key]; 3988 stream_ops[key] = function forceLoadLazyFile() { 3989 if (!FS.forceLoadFile(node)) { 3990 throw new FS.ErrnoError(ERRNO_CODES.EIO); 3991 } 3992 return fn.apply(null, arguments); 3993 }; 3994 }); 3995 // use a custom read function 3996 stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { 3997 if (!FS.forceLoadFile(node)) { 3998 throw new FS.ErrnoError(ERRNO_CODES.EIO); 3999 } 4000 var contents = stream.node.contents; 4001 if (position >= contents.length) 4002 return 0; 4003 var size = Math.min(contents.length - position, length); 4004 assert(size >= 0); 4005 if (contents.slice) { // normal array 4006 for (var i = 0; i < size; i++) { 4007 buffer[offset + i] = contents[position + i]; 4008 } 4009 } else { 4010 for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR 4011 buffer[offset + i] = contents.get(position + i); 4012 } 4013 } 4014 return size; 4015 }; 4016 node.stream_ops = stream_ops; 4017 return node; 4018 },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) { 4019 Browser.init(); 4020 // TODO we should allow people to just pass in a complete filename instead 4021 // of parent and name being that we just join them anyways 4022 var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent; 4023 function processData(byteArray) { 4024 function finish(byteArray) { 4025 if (!dontCreateFile) { 4026 FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); 4027 } 4028 if (onload) onload(); 4029 removeRunDependency('cp ' + fullname); 4030 } 4031 var handled = false; 4032 Module['preloadPlugins'].forEach(function(plugin) { 4033 if (handled) return; 4034 if (plugin['canHandle'](fullname)) { 4035 plugin['handle'](byteArray, fullname, finish, function() { 4036 if (onerror) onerror(); 4037 removeRunDependency('cp ' + fullname); 4038 }); 4039 handled = true; 4040 } 4041 }); 4042 if (!handled) finish(byteArray); 4043 } 4044 addRunDependency('cp ' + fullname); 4045 if (typeof url == 'string') { 4046 Browser.asyncLoad(url, function(byteArray) { 4047 processData(byteArray); 4048 }, onerror); 4049 } else { 4050 processData(url); 4051 } 4052 },indexedDB:function () { 4053 return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; 4054 },DB_NAME:function () { 4055 return 'EM_FS_' + window.location.pathname; 4056 },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) { 4057 onload = onload || function(){}; 4058 onerror = onerror || function(){}; 4059 var indexedDB = FS.indexedDB(); 4060 try { 4061 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); 4062 } catch (e) { 4063 return onerror(e); 4064 } 4065 openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { 4066 console.log('creating db'); 4067 var db = openRequest.result; 4068 db.createObjectStore(FS.DB_STORE_NAME); 4069 }; 4070 openRequest.onsuccess = function openRequest_onsuccess() { 4071 var db = openRequest.result; 4072 var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite'); 4073 var files = transaction.objectStore(FS.DB_STORE_NAME); 4074 var ok = 0, fail = 0, total = paths.length; 4075 function finish() { 4076 if (fail == 0) onload(); else onerror(); 4077 } 4078 paths.forEach(function(path) { 4079 var putRequest = files.put(FS.analyzePath(path).object.contents, path); 4080 putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() }; 4081 putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() }; 4082 }); 4083 transaction.onerror = onerror; 4084 }; 4085 openRequest.onerror = onerror; 4086 },loadFilesFromDB:function (paths, onload, onerror) { 4087 onload = onload || function(){}; 4088 onerror = onerror || function(){}; 4089 var indexedDB = FS.indexedDB(); 4090 try { 4091 var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); 4092 } catch (e) { 4093 return onerror(e); 4094 } 4095 openRequest.onupgradeneeded = onerror; // no database to load from 4096 openRequest.onsuccess = function openRequest_onsuccess() { 4097 var db = openRequest.result; 4098 try { 4099 var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly'); 4100 } catch(e) { 4101 onerror(e); 4102 return; 4103 } 4104 var files = transaction.objectStore(FS.DB_STORE_NAME); 4105 var ok = 0, fail = 0, total = paths.length; 4106 function finish() { 4107 if (fail == 0) onload(); else onerror(); 4108 } 4109 paths.forEach(function(path) { 4110 var getRequest = files.get(path); 4111 getRequest.onsuccess = function getRequest_onsuccess() { 4112 if (FS.analyzePath(path).exists) { 4113 FS.unlink(path); 4114 } 4115 FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); 4116 ok++; 4117 if (ok + fail == total) finish(); 4118 }; 4119 getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() }; 4120 }); 4121 transaction.onerror = onerror; 4122 }; 4123 openRequest.onerror = onerror; 4124 }}; 4125 4126 4127 4128 4129 function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) { 4130 return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0); 4131 },createSocket:function (family, type, protocol) { 4132 var streaming = type == 1; 4133 if (protocol) { 4134 assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp 4135 } 4136 4137 // create our internal socket structure 4138 var sock = { 4139 family: family, 4140 type: type, 4141 protocol: protocol, 4142 server: null, 4143 peers: {}, 4144 pending: [], 4145 recv_queue: [], 4146 sock_ops: SOCKFS.websocket_sock_ops 4147 }; 4148 4149 // create the filesystem node to store the socket structure 4150 var name = SOCKFS.nextname(); 4151 var node = FS.createNode(SOCKFS.root, name, 49152, 0); 4152 node.sock = sock; 4153 4154 // and the wrapping stream that enables library functions such 4155 // as read and write to indirectly interact with the socket 4156 var stream = FS.createStream({ 4157 path: name, 4158 node: node, 4159 flags: FS.modeStringToFlags('r+'), 4160 seekable: false, 4161 stream_ops: SOCKFS.stream_ops 4162 }); 4163 4164 // map the new stream to the socket structure (sockets have a 1:1 4165 // relationship with a stream) 4166 sock.stream = stream; 4167 4168 return sock; 4169 },getSocket:function (fd) { 4170 var stream = FS.getStream(fd); 4171 if (!stream || !FS.isSocket(stream.node.mode)) { 4172 return null; 4173 } 4174 return stream.node.sock; 4175 },stream_ops:{poll:function (stream) { 4176 var sock = stream.node.sock; 4177 return sock.sock_ops.poll(sock); 4178 },ioctl:function (stream, request, varargs) { 4179 var sock = stream.node.sock; 4180 return sock.sock_ops.ioctl(sock, request, varargs); 4181 },read:function (stream, buffer, offset, length, position /* ignored */) { 4182 var sock = stream.node.sock; 4183 var msg = sock.sock_ops.recvmsg(sock, length); 4184 if (!msg) { 4185 // socket is closed 4186 return 0; 4187 } 4188 buffer.set(msg.buffer, offset); 4189 return msg.buffer.length; 4190 },write:function (stream, buffer, offset, length, position /* ignored */) { 4191 var sock = stream.node.sock; 4192 return sock.sock_ops.sendmsg(sock, buffer, offset, length); 4193 },close:function (stream) { 4194 var sock = stream.node.sock; 4195 sock.sock_ops.close(sock); 4196 }},nextname:function () { 4197 if (!SOCKFS.nextname.current) { 4198 SOCKFS.nextname.current = 0; 4199 } 4200 return 'socket[' + (SOCKFS.nextname.current++) + ']'; 4201 },websocket_sock_ops:{createPeer:function (sock, addr, port) { 4202 var ws; 4203 4204 if (typeof addr === 'object') { 4205 ws = addr; 4206 addr = null; 4207 port = null; 4208 } 4209 4210 if (ws) { 4211 // for sockets that've already connected (e.g. we're the server) 4212 // we can inspect the _socket property for the address 4213 if (ws._socket) { 4214 addr = ws._socket.remoteAddress; 4215 port = ws._socket.remotePort; 4216 } 4217 // if we're just now initializing a connection to the remote, 4218 // inspect the url property 4219 else { 4220 var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url); 4221 if (!result) { 4222 throw new Error('WebSocket URL must be in the format ws(s)://address:port'); 4223 } 4224 addr = result[1]; 4225 port = parseInt(result[2], 10); 4226 } 4227 } else { 4228 // create the actual websocket object and connect 4229 try { 4230 // runtimeConfig gets set to true if WebSocket runtime configuration is available. 4231 var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket'])); 4232 4233 // The default value is 'ws://' the replace is needed because the compiler replaces "//" comments with '#' 4234 // comments without checking context, so we'd end up with ws:#, the replace swaps the "#" for "//" again. 4235 var url = 'ws:#'.replace('#', '//'); 4236 4237 if (runtimeConfig) { 4238 if ('string' === typeof Module['websocket']['url']) { 4239 url = Module['websocket']['url']; // Fetch runtime WebSocket URL config. 4240 } 4241 } 4242 4243 if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it. 4244 url = url + addr + ':' + port; 4245 } 4246 4247 // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set. 4248 var subProtocols = 'binary'; // The default value is 'binary' 4249 4250 if (runtimeConfig) { 4251 if ('string' === typeof Module['websocket']['subprotocol']) { 4252 subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config. 4253 } 4254 } 4255 4256 // The regex trims the string (removes spaces at the beginning and end, then splits the string by 4257 // <any space>,<any space> into an Array. Whitespace removal is important for Websockify and ws. 4258 subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */); 4259 4260 // The node ws library API for specifying optional subprotocol is slightly different than the browser's. 4261 var opts = ENVIRONMENT_IS_NODE ? {'protocol': subProtocols.toString()} : subProtocols; 4262 4263 // If node we use the ws library. 4264 var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket']; 4265 ws = new WebSocket(url, opts); 4266 ws.binaryType = 'arraybuffer'; 4267 } catch (e) { 4268 throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH); 4269 } 4270 } 4271 4272 4273 var peer = { 4274 addr: addr, 4275 port: port, 4276 socket: ws, 4277 dgram_send_queue: [] 4278 }; 4279 4280 SOCKFS.websocket_sock_ops.addPeer(sock, peer); 4281 SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer); 4282 4283 // if this is a bound dgram socket, send the port number first to allow 4284 // us to override the ephemeral port reported to us by remotePort on the 4285 // remote end. 4286 if (sock.type === 2 && typeof sock.sport !== 'undefined') { 4287 peer.dgram_send_queue.push(new Uint8Array([ 4288 255, 255, 255, 255, 4289 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0), 4290 ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff) 4291 ])); 4292 } 4293 4294 return peer; 4295 },getPeer:function (sock, addr, port) { 4296 return sock.peers[addr + ':' + port]; 4297 },addPeer:function (sock, peer) { 4298 sock.peers[peer.addr + ':' + peer.port] = peer; 4299 },removePeer:function (sock, peer) { 4300 delete sock.peers[peer.addr + ':' + peer.port]; 4301 },handlePeerEvents:function (sock, peer) { 4302 var first = true; 4303 4304 var handleOpen = function () { 4305 try { 4306 var queued = peer.dgram_send_queue.shift(); 4307 while (queued) { 4308 peer.socket.send(queued); 4309 queued = peer.dgram_send_queue.shift(); 4310 } 4311 } catch (e) { 4312 // not much we can do here in the way of proper error handling as we've already 4313 // lied and said this data was sent. shut it down. 4314 peer.socket.close(); 4315 } 4316 }; 4317 4318 function handleMessage(data) { 4319 assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer 4320 data = new Uint8Array(data); // make a typed array view on the array buffer 4321 4322 4323 // if this is the port message, override the peer's port with it 4324 var wasfirst = first; 4325 first = false; 4326 if (wasfirst && 4327 data.length === 10 && 4328 data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 && 4329 data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) { 4330 // update the peer's port and it's key in the peer map 4331 var newport = ((data[8] << 8) | data[9]); 4332 SOCKFS.websocket_sock_ops.removePeer(sock, peer); 4333 peer.port = newport; 4334 SOCKFS.websocket_sock_ops.addPeer(sock, peer); 4335 return; 4336 } 4337 4338 sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data }); 4339 }; 4340 4341 if (ENVIRONMENT_IS_NODE) { 4342 peer.socket.on('open', handleOpen); 4343 peer.socket.on('message', function(data, flags) { 4344 if (!flags.binary) { 4345 return; 4346 } 4347 handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer 4348 }); 4349 peer.socket.on('error', function() { 4350 // don't throw 4351 }); 4352 } else { 4353 peer.socket.onopen = handleOpen; 4354 peer.socket.onmessage = function peer_socket_onmessage(event) { 4355 handleMessage(event.data); 4356 }; 4357 } 4358 },poll:function (sock) { 4359 if (sock.type === 1 && sock.server) { 4360 // listen sockets should only say they're available for reading 4361 // if there are pending clients. 4362 return sock.pending.length ? (64 | 1) : 0; 4363 } 4364 4365 var mask = 0; 4366 var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets 4367 SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) : 4368 null; 4369 4370 if (sock.recv_queue.length || 4371 !dest || // connection-less sockets are always ready to read 4372 (dest && dest.socket.readyState === dest.socket.CLOSING) || 4373 (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed 4374 mask |= (64 | 1); 4375 } 4376 4377 if (!dest || // connection-less sockets are always ready to write 4378 (dest && dest.socket.readyState === dest.socket.OPEN)) { 4379 mask |= 4; 4380 } 4381 4382 if ((dest && dest.socket.readyState === dest.socket.CLOSING) || 4383 (dest && dest.socket.readyState === dest.socket.CLOSED)) { 4384 mask |= 16; 4385 } 4386 4387 return mask; 4388 },ioctl:function (sock, request, arg) { 4389 switch (request) { 4390 case 21531: 4391 var bytes = 0; 4392 if (sock.recv_queue.length) { 4393 bytes = sock.recv_queue[0].data.length; 4394 } 4395 HEAP32[((arg)>>2)]=bytes; 4396 return 0; 4397 default: 4398 return ERRNO_CODES.EINVAL; 4399 } 4400 },close:function (sock) { 4401 // if we've spawned a listen server, close it 4402 if (sock.server) { 4403 try { 4404 sock.server.close(); 4405 } catch (e) { 4406 } 4407 sock.server = null; 4408 } 4409 // close any peer connections 4410 var peers = Object.keys(sock.peers); 4411 for (var i = 0; i < peers.length; i++) { 4412 var peer = sock.peers[peers[i]]; 4413 try { 4414 peer.socket.close(); 4415 } catch (e) { 4416 } 4417 SOCKFS.websocket_sock_ops.removePeer(sock, peer); 4418 } 4419 return 0; 4420 },bind:function (sock, addr, port) { 4421 if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') { 4422 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound 4423 } 4424 sock.saddr = addr; 4425 sock.sport = port || _mkport(); 4426 // in order to emulate dgram sockets, we need to launch a listen server when 4427 // binding on a connection-less socket 4428 // note: this is only required on the server side 4429 if (sock.type === 2) { 4430 // close the existing server if it exists 4431 if (sock.server) { 4432 sock.server.close(); 4433 sock.server = null; 4434 } 4435 // swallow error operation not supported error that occurs when binding in the 4436 // browser where this isn't supported 4437 try { 4438 sock.sock_ops.listen(sock, 0); 4439 } catch (e) { 4440 if (!(e instanceof FS.ErrnoError)) throw e; 4441 if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e; 4442 } 4443 } 4444 },connect:function (sock, addr, port) { 4445 if (sock.server) { 4446 throw new FS.ErrnoError(ERRNO_CODS.EOPNOTSUPP); 4447 } 4448 4449 // TODO autobind 4450 // if (!sock.addr && sock.type == 2) { 4451 // } 4452 4453 // early out if we're already connected / in the middle of connecting 4454 if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') { 4455 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); 4456 if (dest) { 4457 if (dest.socket.readyState === dest.socket.CONNECTING) { 4458 throw new FS.ErrnoError(ERRNO_CODES.EALREADY); 4459 } else { 4460 throw new FS.ErrnoError(ERRNO_CODES.EISCONN); 4461 } 4462 } 4463 } 4464 4465 // add the socket to our peer list and set our 4466 // destination address / port to match 4467 var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); 4468 sock.daddr = peer.addr; 4469 sock.dport = peer.port; 4470 4471 // always "fail" in non-blocking mode 4472 throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS); 4473 },listen:function (sock, backlog) { 4474 if (!ENVIRONMENT_IS_NODE) { 4475 throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); 4476 } 4477 if (sock.server) { 4478 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening 4479 } 4480 var WebSocketServer = require('ws').Server; 4481 var host = sock.saddr; 4482 sock.server = new WebSocketServer({ 4483 host: host, 4484 port: sock.sport 4485 // TODO support backlog 4486 }); 4487 4488 sock.server.on('connection', function(ws) { 4489 if (sock.type === 1) { 4490 var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol); 4491 4492 // create a peer on the new socket 4493 var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws); 4494 newsock.daddr = peer.addr; 4495 newsock.dport = peer.port; 4496 4497 // push to queue for accept to pick up 4498 sock.pending.push(newsock); 4499 } else { 4500 // create a peer on the listen socket so calling sendto 4501 // with the listen socket and an address will resolve 4502 // to the correct client 4503 SOCKFS.websocket_sock_ops.createPeer(sock, ws); 4504 } 4505 }); 4506 sock.server.on('closed', function() { 4507 sock.server = null; 4508 }); 4509 sock.server.on('error', function() { 4510 // don't throw 4511 }); 4512 },accept:function (listensock) { 4513 if (!listensock.server) { 4514 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 4515 } 4516 var newsock = listensock.pending.shift(); 4517 newsock.stream.flags = listensock.stream.flags; 4518 return newsock; 4519 },getname:function (sock, peer) { 4520 var addr, port; 4521 if (peer) { 4522 if (sock.daddr === undefined || sock.dport === undefined) { 4523 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); 4524 } 4525 addr = sock.daddr; 4526 port = sock.dport; 4527 } else { 4528 // TODO saddr and sport will be set for bind()'d UDP sockets, but what 4529 // should we be returning for TCP sockets that've been connect()'d? 4530 addr = sock.saddr || 0; 4531 port = sock.sport || 0; 4532 } 4533 return { addr: addr, port: port }; 4534 },sendmsg:function (sock, buffer, offset, length, addr, port) { 4535 if (sock.type === 2) { 4536 // connection-less sockets will honor the message address, 4537 // and otherwise fall back to the bound destination address 4538 if (addr === undefined || port === undefined) { 4539 addr = sock.daddr; 4540 port = sock.dport; 4541 } 4542 // if there was no address to fall back to, error out 4543 if (addr === undefined || port === undefined) { 4544 throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ); 4545 } 4546 } else { 4547 // connection-based sockets will only use the bound 4548 addr = sock.daddr; 4549 port = sock.dport; 4550 } 4551 4552 // find the peer for the destination address 4553 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port); 4554 4555 // early out if not connected with a connection-based socket 4556 if (sock.type === 1) { 4557 if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { 4558 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); 4559 } else if (dest.socket.readyState === dest.socket.CONNECTING) { 4560 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); 4561 } 4562 } 4563 4564 // create a copy of the incoming data to send, as the WebSocket API 4565 // doesn't work entirely with an ArrayBufferView, it'll just send 4566 // the entire underlying buffer 4567 var data; 4568 if (buffer instanceof Array || buffer instanceof ArrayBuffer) { 4569 data = buffer.slice(offset, offset + length); 4570 } else { // ArrayBufferView 4571 data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length); 4572 } 4573 4574 // if we're emulating a connection-less dgram socket and don't have 4575 // a cached connection, queue the buffer to send upon connect and 4576 // lie, saying the data was sent now. 4577 if (sock.type === 2) { 4578 if (!dest || dest.socket.readyState !== dest.socket.OPEN) { 4579 // if we're not connected, open a new connection 4580 if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { 4581 dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); 4582 } 4583 dest.dgram_send_queue.push(data); 4584 return length; 4585 } 4586 } 4587 4588 try { 4589 // send the actual data 4590 dest.socket.send(data); 4591 return length; 4592 } catch (e) { 4593 throw new FS.ErrnoError(ERRNO_CODES.EINVAL); 4594 } 4595 },recvmsg:function (sock, length) { 4596 // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html 4597 if (sock.type === 1 && sock.server) { 4598 // tcp servers should not be recv()'ing on the listen socket 4599 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); 4600 } 4601 4602 var queued = sock.recv_queue.shift(); 4603 if (!queued) { 4604 if (sock.type === 1) { 4605 var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); 4606 4607 if (!dest) { 4608 // if we have a destination address but are not connected, error out 4609 throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); 4610 } 4611 else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { 4612 // return null if the socket has closed 4613 return null; 4614 } 4615 else { 4616 // else, our socket is in a valid state but truly has nothing available 4617 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); 4618 } 4619 } else { 4620 throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); 4621 } 4622 } 4623 4624 // queued.data will be an ArrayBuffer if it's unadulterated, but if it's 4625 // requeued TCP data it'll be an ArrayBufferView 4626 var queuedLength = queued.data.byteLength || queued.data.length; 4627 var queuedOffset = queued.data.byteOffset || 0; 4628 var queuedBuffer = queued.data.buffer || queued.data; 4629 var bytesRead = Math.min(length, queuedLength); 4630 var res = { 4631 buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead), 4632 addr: queued.addr, 4633 port: queued.port 4634 }; 4635 4636 4637 // push back any unread data for TCP connections 4638 if (sock.type === 1 && bytesRead < queuedLength) { 4639 var bytesRemaining = queuedLength - bytesRead; 4640 queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining); 4641 sock.recv_queue.unshift(queued); 4642 } 4643 4644 return res; 4645 }}};function _send(fd, buf, len, flags) { 4646 var sock = SOCKFS.getSocket(fd); 4647 if (!sock) { 4648 ___setErrNo(ERRNO_CODES.EBADF); 4649 return -1; 4650 } 4651 // TODO honor flags 4652 return _write(fd, buf, len); 4653 } 4654 4655 function _pwrite(fildes, buf, nbyte, offset) { 4656 // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); 4657 // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html 4658 var stream = FS.getStream(fildes); 4659 if (!stream) { 4660 ___setErrNo(ERRNO_CODES.EBADF); 4661 return -1; 4662 } 4663 try { 4664 var slab = HEAP8; 4665 return FS.write(stream, slab, buf, nbyte, offset); 4666 } catch (e) { 4667 FS.handleFSError(e); 4668 return -1; 4669 } 4670 }function _write(fildes, buf, nbyte) { 4671 // ssize_t write(int fildes, const void *buf, size_t nbyte); 4672 // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html 4673 var stream = FS.getStream(fildes); 4674 if (!stream) { 4675 ___setErrNo(ERRNO_CODES.EBADF); 4676 return -1; 4677 } 4678 4679 4680 try { 4681 var slab = HEAP8; 4682 return FS.write(stream, slab, buf, nbyte); 4683 } catch (e) { 4684 FS.handleFSError(e); 4685 return -1; 4686 } 4687 } 4688 4689 function _fileno(stream) { 4690 // int fileno(FILE *stream); 4691 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html 4692 stream = FS.getStreamFromPtr(stream); 4693 if (!stream) return -1; 4694 return stream.fd; 4695 }function _fwrite(ptr, size, nitems, stream) { 4696 // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream); 4697 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html 4698 var bytesToWrite = nitems * size; 4699 if (bytesToWrite == 0) return 0; 4700 var fd = _fileno(stream); 4701 var bytesWritten = _write(fd, ptr, bytesToWrite); 4702 if (bytesWritten == -1) { 4703 var streamObj = FS.getStreamFromPtr(stream); 4704 if (streamObj) streamObj.error = true; 4705 return 0; 4706 } else { 4707 return Math.floor(bytesWritten / size); 4708 } 4709 } 4710 4711 4712 4713 Module["_strlen"] = _strlen; 4714 4715 function __reallyNegative(x) { 4716 return x < 0 || (x === 0 && (1/x) === -Infinity); 4717 }function __formatString(format, varargs) { 4718 var textIndex = format; 4719 var argIndex = 0; 4720 function getNextArg(type) { 4721 // NOTE: Explicitly ignoring type safety. Otherwise this fails: 4722 // int x = 4; printf("%c\n", (char)x); 4723 var ret; 4724 if (type === 'double') { 4725 ret = HEAPF64[(((varargs)+(argIndex))>>3)]; 4726 } else if (type == 'i64') { 4727 ret = [HEAP32[(((varargs)+(argIndex))>>2)], 4728 HEAP32[(((varargs)+(argIndex+4))>>2)]]; 4729 4730 } else { 4731 type = 'i32'; // varargs are always i32, i64, or double 4732 ret = HEAP32[(((varargs)+(argIndex))>>2)]; 4733 } 4734 argIndex += Runtime.getNativeFieldSize(type); 4735 return ret; 4736 } 4737 4738 var ret = []; 4739 var curr, next, currArg; 4740 while(1) { 4741 var startTextIndex = textIndex; 4742 curr = HEAP8[(textIndex)]; 4743 if (curr === 0) break; 4744 next = HEAP8[((textIndex+1)|0)]; 4745 if (curr == 37) { 4746 // Handle flags. 4747 var flagAlwaysSigned = false; 4748 var flagLeftAlign = false; 4749 var flagAlternative = false; 4750 var flagZeroPad = false; 4751 var flagPadSign = false; 4752 flagsLoop: while (1) { 4753 switch (next) { 4754 case 43: 4755 flagAlwaysSigned = true; 4756 break; 4757 case 45: 4758 flagLeftAlign = true; 4759 break; 4760 case 35: 4761 flagAlternative = true; 4762 break; 4763 case 48: 4764 if (flagZeroPad) { 4765 break flagsLoop; 4766 } else { 4767 flagZeroPad = true; 4768 break; 4769 } 4770 case 32: 4771 flagPadSign = true; 4772 break; 4773 default: 4774 break flagsLoop; 4775 } 4776 textIndex++; 4777 next = HEAP8[((textIndex+1)|0)]; 4778 } 4779 4780 // Handle width. 4781 var width = 0; 4782 if (next == 42) { 4783 width = getNextArg('i32'); 4784 textIndex++; 4785 next = HEAP8[((textIndex+1)|0)]; 4786 } else { 4787 while (next >= 48 && next <= 57) { 4788 width = width * 10 + (next - 48); 4789 textIndex++; 4790 next = HEAP8[((textIndex+1)|0)]; 4791 } 4792 } 4793 4794 // Handle precision. 4795 var precisionSet = false, precision = -1; 4796 if (next == 46) { 4797 precision = 0; 4798 precisionSet = true; 4799 textIndex++; 4800 next = HEAP8[((textIndex+1)|0)]; 4801 if (next == 42) { 4802 precision = getNextArg('i32'); 4803 textIndex++; 4804 } else { 4805 while(1) { 4806 var precisionChr = HEAP8[((textIndex+1)|0)]; 4807 if (precisionChr < 48 || 4808 precisionChr > 57) break; 4809 precision = precision * 10 + (precisionChr - 48); 4810 textIndex++; 4811 } 4812 } 4813 next = HEAP8[((textIndex+1)|0)]; 4814 } 4815 if (precision < 0) { 4816 precision = 6; // Standard default. 4817 precisionSet = false; 4818 } 4819 4820 // Handle integer sizes. WARNING: These assume a 32-bit architecture! 4821 var argSize; 4822 switch (String.fromCharCode(next)) { 4823 case 'h': 4824 var nextNext = HEAP8[((textIndex+2)|0)]; 4825 if (nextNext == 104) { 4826 textIndex++; 4827 argSize = 1; // char (actually i32 in varargs) 4828 } else { 4829 argSize = 2; // short (actually i32 in varargs) 4830 } 4831 break; 4832 case 'l': 4833 var nextNext = HEAP8[((textIndex+2)|0)]; 4834 if (nextNext == 108) { 4835 textIndex++; 4836 argSize = 8; // long long 4837 } else { 4838 argSize = 4; // long 4839 } 4840 break; 4841 case 'L': // long long 4842 case 'q': // int64_t 4843 case 'j': // intmax_t 4844 argSize = 8; 4845 break; 4846 case 'z': // size_t 4847 case 't': // ptrdiff_t 4848 case 'I': // signed ptrdiff_t or unsigned size_t 4849 argSize = 4; 4850 break; 4851 default: 4852 argSize = null; 4853 } 4854 if (argSize) textIndex++; 4855 next = HEAP8[((textIndex+1)|0)]; 4856 4857 // Handle type specifier. 4858 switch (String.fromCharCode(next)) { 4859 case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': { 4860 // Integer. 4861 var signed = next == 100 || next == 105; 4862 argSize = argSize || 4; 4863 var currArg = getNextArg('i' + (argSize * 8)); 4864 var argText; 4865 // Flatten i64-1 [low, high] into a (slightly rounded) double 4866 if (argSize == 8) { 4867 currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117); 4868 } 4869 // Truncate to requested size. 4870 if (argSize <= 4) { 4871 var limit = Math.pow(256, argSize) - 1; 4872 currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8); 4873 } 4874 // Format the number. 4875 var currAbsArg = Math.abs(currArg); 4876 var prefix = ''; 4877 if (next == 100 || next == 105) { 4878 argText = reSign(currArg, 8 * argSize, 1).toString(10); 4879 } else if (next == 117) { 4880 argText = unSign(currArg, 8 * argSize, 1).toString(10); 4881 currArg = Math.abs(currArg); 4882 } else if (next == 111) { 4883 argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8); 4884 } else if (next == 120 || next == 88) { 4885 prefix = (flagAlternative && currArg != 0) ? '0x' : ''; 4886 if (currArg < 0) { 4887 // Represent negative numbers in hex as 2's complement. 4888 currArg = -currArg; 4889 argText = (currAbsArg - 1).toString(16); 4890 var buffer = []; 4891 for (var i = 0; i < argText.length; i++) { 4892 buffer.push((0xF - parseInt(argText[i], 16)).toString(16)); 4893 } 4894 argText = buffer.join(''); 4895 while (argText.length < argSize * 2) argText = 'f' + argText; 4896 } else { 4897 argText = currAbsArg.toString(16); 4898 } 4899 if (next == 88) { 4900 prefix = prefix.toUpperCase(); 4901 argText = argText.toUpperCase(); 4902 } 4903 } else if (next == 112) { 4904 if (currAbsArg === 0) { 4905 argText = '(nil)'; 4906 } else { 4907 prefix = '0x'; 4908 argText = currAbsArg.toString(16); 4909 } 4910 } 4911 if (precisionSet) { 4912 while (argText.length < precision) { 4913 argText = '0' + argText; 4914 } 4915 } 4916 4917 // Add sign if needed 4918 if (currArg >= 0) { 4919 if (flagAlwaysSigned) { 4920 prefix = '+' + prefix; 4921 } else if (flagPadSign) { 4922 prefix = ' ' + prefix; 4923 } 4924 } 4925 4926 // Move sign to prefix so we zero-pad after the sign 4927 if (argText.charAt(0) == '-') { 4928 prefix = '-' + prefix; 4929 argText = argText.substr(1); 4930 } 4931 4932 // Add padding. 4933 while (prefix.length + argText.length < width) { 4934 if (flagLeftAlign) { 4935 argText += ' '; 4936 } else { 4937 if (flagZeroPad) { 4938 argText = '0' + argText; 4939 } else { 4940 prefix = ' ' + prefix; 4941 } 4942 } 4943 } 4944 4945 // Insert the result into the buffer. 4946 argText = prefix + argText; 4947 argText.split('').forEach(function(chr) { 4948 ret.push(chr.charCodeAt(0)); 4949 }); 4950 break; 4951 } 4952 case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': { 4953 // Float. 4954 var currArg = getNextArg('double'); 4955 var argText; 4956 if (isNaN(currArg)) { 4957 argText = 'nan'; 4958 flagZeroPad = false; 4959 } else if (!isFinite(currArg)) { 4960 argText = (currArg < 0 ? '-' : '') + 'inf'; 4961 flagZeroPad = false; 4962 } else { 4963 var isGeneral = false; 4964 var effectivePrecision = Math.min(precision, 20); 4965 4966 // Convert g/G to f/F or e/E, as per: 4967 // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html 4968 if (next == 103 || next == 71) { 4969 isGeneral = true; 4970 precision = precision || 1; 4971 var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10); 4972 if (precision > exponent && exponent >= -4) { 4973 next = ((next == 103) ? 'f' : 'F').charCodeAt(0); 4974 precision -= exponent + 1; 4975 } else { 4976 next = ((next == 103) ? 'e' : 'E').charCodeAt(0); 4977 precision--; 4978 } 4979 effectivePrecision = Math.min(precision, 20); 4980 } 4981 4982 if (next == 101 || next == 69) { 4983 argText = currArg.toExponential(effectivePrecision); 4984 // Make sure the exponent has at least 2 digits. 4985 if (/[eE][-+]\d$/.test(argText)) { 4986 argText = argText.slice(0, -1) + '0' + argText.slice(-1); 4987 } 4988 } else if (next == 102 || next == 70) { 4989 argText = currArg.toFixed(effectivePrecision); 4990 if (currArg === 0 && __reallyNegative(currArg)) { 4991 argText = '-' + argText; 4992 } 4993 } 4994 4995 var parts = argText.split('e'); 4996 if (isGeneral && !flagAlternative) { 4997 // Discard trailing zeros and periods. 4998 while (parts[0].length > 1 && parts[0].indexOf('.') != -1 && 4999 (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) { 5000 parts[0] = parts[0].slice(0, -1); 5001 } 5002 } else { 5003 // Make sure we have a period in alternative mode. 5004 if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.'; 5005 // Zero pad until required precision. 5006 while (precision > effectivePrecision++) parts[0] += '0'; 5007 } 5008 argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : ''); 5009 5010 // Capitalize 'E' if needed. 5011 if (next == 69) argText = argText.toUpperCase(); 5012 5013 // Add sign. 5014 if (currArg >= 0) { 5015 if (flagAlwaysSigned) { 5016 argText = '+' + argText; 5017 } else if (flagPadSign) { 5018 argText = ' ' + argText; 5019 } 5020 } 5021 } 5022 5023 // Add padding. 5024 while (argText.length < width) { 5025 if (flagLeftAlign) { 5026 argText += ' '; 5027 } else { 5028 if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) { 5029 argText = argText[0] + '0' + argText.slice(1); 5030 } else { 5031 argText = (flagZeroPad ? '0' : ' ') + argText; 5032 } 5033 } 5034 } 5035 5036 // Adjust case. 5037 if (next < 97) argText = argText.toUpperCase(); 5038 5039 // Insert the result into the buffer. 5040 argText.split('').forEach(function(chr) { 5041 ret.push(chr.charCodeAt(0)); 5042 }); 5043 break; 5044 } 5045 case 's': { 5046 // String. 5047 var arg = getNextArg('i8*'); 5048 var argLength = arg ? _strlen(arg) : '(null)'.length; 5049 if (precisionSet) argLength = Math.min(argLength, precision); 5050 if (!flagLeftAlign) { 5051 while (argLength < width--) { 5052 ret.push(32); 5053 } 5054 } 5055 if (arg) { 5056 for (var i = 0; i < argLength; i++) { 5057 ret.push(HEAPU8[((arg++)|0)]); 5058 } 5059 } else { 5060 ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true)); 5061 } 5062 if (flagLeftAlign) { 5063 while (argLength < width--) { 5064 ret.push(32); 5065 } 5066 } 5067 break; 5068 } 5069 case 'c': { 5070 // Character. 5071 if (flagLeftAlign) ret.push(getNextArg('i8')); 5072 while (--width > 0) { 5073 ret.push(32); 5074 } 5075 if (!flagLeftAlign) ret.push(getNextArg('i8')); 5076 break; 5077 } 5078 case 'n': { 5079 // Write the length written so far to the next parameter. 5080 var ptr = getNextArg('i32*'); 5081 HEAP32[((ptr)>>2)]=ret.length; 5082 break; 5083 } 5084 case '%': { 5085 // Literal percent sign. 5086 ret.push(curr); 5087 break; 5088 } 5089 default: { 5090 // Unknown specifiers remain untouched. 5091 for (var i = startTextIndex; i < textIndex + 2; i++) { 5092 ret.push(HEAP8[(i)]); 5093 } 5094 } 5095 } 5096 textIndex += 2; 5097 // TODO: Support a/A (hex float) and m (last error) specifiers. 5098 // TODO: Support %1${specifier} for arg selection. 5099 } else { 5100 ret.push(curr); 5101 textIndex += 1; 5102 } 5103 } 5104 return ret; 5105 }function _fprintf(stream, format, varargs) { 5106 // int fprintf(FILE *restrict stream, const char *restrict format, ...); 5107 // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html 5108 var result = __formatString(format, varargs); 5109 var stack = Runtime.stackSave(); 5110 var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream); 5111 Runtime.stackRestore(stack); 5112 return ret; 5113 }function _printf(format, varargs) { 5114 // int printf(const char *restrict format, ...); 5115 // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html 5116 var stdout = HEAP32[((_stdout)>>2)]; 5117 return _fprintf(stdout, format, varargs); 5118 } 5119 5120 var _sinf=Math_sin; 5121 5122 5123 var _sqrtf=Math_sqrt; 5124 5125 var _floorf=Math_floor; 5126 5127 5128 function _fputs(s, stream) { 5129 // int fputs(const char *restrict s, FILE *restrict stream); 5130 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html 5131 var fd = _fileno(stream); 5132 return _write(fd, s, _strlen(s)); 5133 } 5134 5135 function _fputc(c, stream) { 5136 // int fputc(int c, FILE *stream); 5137 // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html 5138 var chr = unSign(c & 0xFF); 5139 HEAP8[((_fputc.ret)|0)]=chr; 5140 var fd = _fileno(stream); 5141 var ret = _write(fd, _fputc.ret, 1); 5142 if (ret == -1) { 5143 var streamObj = FS.getStreamFromPtr(stream); 5144 if (streamObj) streamObj.error = true; 5145 return -1; 5146 } else { 5147 return chr; 5148 } 5149 }function _puts(s) { 5150 // int puts(const char *s); 5151 // http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html 5152 // NOTE: puts() always writes an extra newline. 5153 var stdout = HEAP32[((_stdout)>>2)]; 5154 var ret = _fputs(s, stdout); 5155 if (ret < 0) { 5156 return ret; 5157 } else { 5158 var newlineRet = _fputc(10, stdout); 5159 return (newlineRet < 0) ? -1 : ret + 1; 5160 } 5161 } 5162 5163 function _clock() { 5164 if (_clock.start === undefined) _clock.start = Date.now(); 5165 return Math.floor((Date.now() - _clock.start) * (1000000/1000)); 5166 } 5167 5168 5169 var ___cxa_caught_exceptions=[];function ___cxa_begin_catch(ptr) { 5170 __ZSt18uncaught_exceptionv.uncaught_exception--; 5171 ___cxa_caught_exceptions.push(___cxa_last_thrown_exception); 5172 return ptr; 5173 } 5174 5175 function ___errno_location() { 5176 return ___errno_state; 5177 } 5178 5179 5180 function _emscripten_memcpy_big(dest, src, num) { 5181 HEAPU8.set(HEAPU8.subarray(src, src+num), dest); 5182 return dest; 5183 } 5184 Module["_memcpy"] = _memcpy; 5185 5186 function __ZNSt9exceptionD2Ev() {} 5187 5188 var Browser={mainLoop:{scheduler:null,method:"",shouldPause:false,paused:false,queue:[],pause:function () { 5189 Browser.mainLoop.shouldPause = true; 5190 },resume:function () { 5191 if (Browser.mainLoop.paused) { 5192 Browser.mainLoop.paused = false; 5193 Browser.mainLoop.scheduler(); 5194 } 5195 Browser.mainLoop.shouldPause = false; 5196 },updateStatus:function () { 5197 if (Module['setStatus']) { 5198 var message = Module['statusMessage'] || 'Please wait...'; 5199 var remaining = Browser.mainLoop.remainingBlockers; 5200 var expected = Browser.mainLoop.expectedBlockers; 5201 if (remaining) { 5202 if (remaining < expected) { 5203 Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')'); 5204 } else { 5205 Module['setStatus'](message); 5206 } 5207 } else { 5208 Module['setStatus'](''); 5209 } 5210 } 5211 }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () { 5212 if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers 5213 5214 if (Browser.initted || ENVIRONMENT_IS_WORKER) return; 5215 Browser.initted = true; 5216 5217 try { 5218 new Blob(); 5219 Browser.hasBlobConstructor = true; 5220 } catch(e) { 5221 Browser.hasBlobConstructor = false; 5222 console.log("warning: no blob constructor, cannot create blobs with mimetypes"); 5223 } 5224 Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null)); 5225 Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined; 5226 if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') { 5227 console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."); 5228 Module.noImageDecoding = true; 5229 } 5230 5231 // Support for plugins that can process preloaded files. You can add more of these to 5232 // your app by creating and appending to Module.preloadPlugins. 5233 // 5234 // Each plugin is asked if it can handle a file based on the file's name. If it can, 5235 // it is given the file's raw data. When it is done, it calls a callback with the file's 5236 // (possibly modified) data. For example, a plugin might decompress a file, or it 5237 // might create some side data structure for use later (like an Image element, etc.). 5238 5239 var imagePlugin = {}; 5240 imagePlugin['canHandle'] = function imagePlugin_canHandle(name) { 5241 return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name); 5242 }; 5243 imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) { 5244 var b = null; 5245 if (Browser.hasBlobConstructor) { 5246 try { 5247 b = new Blob([byteArray], { type: Browser.getMimetype(name) }); 5248 if (b.size !== byteArray.length) { // Safari bug #118630 5249 // Safari's Blob can only take an ArrayBuffer 5250 b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) }); 5251 } 5252 } catch(e) { 5253 Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder'); 5254 } 5255 } 5256 if (!b) { 5257 var bb = new Browser.BlobBuilder(); 5258 bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range 5259 b = bb.getBlob(); 5260 } 5261 var url = Browser.URLObject.createObjectURL(b); 5262 var img = new Image(); 5263 img.onload = function img_onload() { 5264 assert(img.complete, 'Image ' + name + ' could not be decoded'); 5265 var canvas = document.createElement('canvas'); 5266 canvas.width = img.width; 5267 canvas.height = img.height; 5268 var ctx = canvas.getContext('2d'); 5269 ctx.drawImage(img, 0, 0); 5270 Module["preloadedImages"][name] = canvas; 5271 Browser.URLObject.revokeObjectURL(url); 5272 if (onload) onload(byteArray); 5273 }; 5274 img.onerror = function img_onerror(event) { 5275 console.log('Image ' + url + ' could not be decoded'); 5276 if (onerror) onerror(); 5277 }; 5278 img.src = url; 5279 }; 5280 Module['preloadPlugins'].push(imagePlugin); 5281 5282 var audioPlugin = {}; 5283 audioPlugin['canHandle'] = function audioPlugin_canHandle(name) { 5284 return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 }; 5285 }; 5286 audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) { 5287 var done = false; 5288 function finish(audio) { 5289 if (done) return; 5290 done = true; 5291 Module["preloadedAudios"][name] = audio; 5292 if (onload) onload(byteArray); 5293 } 5294 function fail() { 5295 if (done) return; 5296 done = true; 5297 Module["preloadedAudios"][name] = new Audio(); // empty shim 5298 if (onerror) onerror(); 5299 } 5300 if (Browser.hasBlobConstructor) { 5301 try { 5302 var b = new Blob([byteArray], { type: Browser.getMimetype(name) }); 5303 } catch(e) { 5304 return fail(); 5305 } 5306 var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this! 5307 var audio = new Audio(); 5308 audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926 5309 audio.onerror = function audio_onerror(event) { 5310 if (done) return; 5311 console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach'); 5312 function encode64(data) { 5313 var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; 5314 var PAD = '='; 5315 var ret = ''; 5316 var leftchar = 0; 5317 var leftbits = 0; 5318 for (var i = 0; i < data.length; i++) { 5319 leftchar = (leftchar << 8) | data[i]; 5320 leftbits += 8; 5321 while (leftbits >= 6) { 5322 var curr = (leftchar >> (leftbits-6)) & 0x3f; 5323 leftbits -= 6; 5324 ret += BASE[curr]; 5325 } 5326 } 5327 if (leftbits == 2) { 5328 ret += BASE[(leftchar&3) << 4]; 5329 ret += PAD + PAD; 5330 } else if (leftbits == 4) { 5331 ret += BASE[(leftchar&0xf) << 2]; 5332 ret += PAD; 5333 } 5334 return ret; 5335 } 5336 audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray); 5337 finish(audio); // we don't wait for confirmation this worked - but it's worth trying 5338 }; 5339 audio.src = url; 5340 // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror 5341 Browser.safeSetTimeout(function() { 5342 finish(audio); // try to use it even though it is not necessarily ready to play 5343 }, 10000); 5344 } else { 5345 return fail(); 5346 } 5347 }; 5348 Module['preloadPlugins'].push(audioPlugin); 5349 5350 // Canvas event setup 5351 5352 var canvas = Module['canvas']; 5353 5354 // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module 5355 // Module['forcedAspectRatio'] = 4 / 3; 5356 5357 canvas.requestPointerLock = canvas['requestPointerLock'] || 5358 canvas['mozRequestPointerLock'] || 5359 canvas['webkitRequestPointerLock'] || 5360 canvas['msRequestPointerLock'] || 5361 function(){}; 5362 canvas.exitPointerLock = document['exitPointerLock'] || 5363 document['mozExitPointerLock'] || 5364 document['webkitExitPointerLock'] || 5365 document['msExitPointerLock'] || 5366 function(){}; // no-op if function does not exist 5367 canvas.exitPointerLock = canvas.exitPointerLock.bind(document); 5368 5369 function pointerLockChange() { 5370 Browser.pointerLock = document['pointerLockElement'] === canvas || 5371 document['mozPointerLockElement'] === canvas || 5372 document['webkitPointerLockElement'] === canvas || 5373 document['msPointerLockElement'] === canvas; 5374 } 5375 5376 document.addEventListener('pointerlockchange', pointerLockChange, false); 5377 document.addEventListener('mozpointerlockchange', pointerLockChange, false); 5378 document.addEventListener('webkitpointerlockchange', pointerLockChange, false); 5379 document.addEventListener('mspointerlockchange', pointerLockChange, false); 5380 5381 if (Module['elementPointerLock']) { 5382 canvas.addEventListener("click", function(ev) { 5383 if (!Browser.pointerLock && canvas.requestPointerLock) { 5384 canvas.requestPointerLock(); 5385 ev.preventDefault(); 5386 } 5387 }, false); 5388 } 5389 },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) { 5390 var ctx; 5391 var errorInfo = '?'; 5392 function onContextCreationError(event) { 5393 errorInfo = event.statusMessage || errorInfo; 5394 } 5395 try { 5396 if (useWebGL) { 5397 var contextAttributes = { 5398 antialias: false, 5399 alpha: false 5400 }; 5401 5402 if (webGLContextAttributes) { 5403 for (var attribute in webGLContextAttributes) { 5404 contextAttributes[attribute] = webGLContextAttributes[attribute]; 5405 } 5406 } 5407 5408 5409 canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false); 5410 try { 5411 ['experimental-webgl', 'webgl'].some(function(webglId) { 5412 return ctx = canvas.getContext(webglId, contextAttributes); 5413 }); 5414 } finally { 5415 canvas.removeEventListener('webglcontextcreationerror', onContextCreationError, false); 5416 } 5417 } else { 5418 ctx = canvas.getContext('2d'); 5419 } 5420 if (!ctx) throw ':('; 5421 } catch (e) { 5422 Module.print('Could not create canvas: ' + [errorInfo, e]); 5423 return null; 5424 } 5425 if (useWebGL) { 5426 // Set the background of the WebGL canvas to black 5427 canvas.style.backgroundColor = "black"; 5428 5429 // Warn on context loss 5430 canvas.addEventListener('webglcontextlost', function(event) { 5431 alert('WebGL context lost. You will need to reload the page.'); 5432 }, false); 5433 } 5434 if (setInModule) { 5435 GLctx = Module.ctx = ctx; 5436 Module.useWebGL = useWebGL; 5437 Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() }); 5438 Browser.init(); 5439 } 5440 return ctx; 5441 },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) { 5442 Browser.lockPointer = lockPointer; 5443 Browser.resizeCanvas = resizeCanvas; 5444 if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true; 5445 if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false; 5446 5447 var canvas = Module['canvas']; 5448 function fullScreenChange() { 5449 Browser.isFullScreen = false; 5450 var canvasContainer = canvas.parentNode; 5451 if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || 5452 document['mozFullScreenElement'] || document['mozFullscreenElement'] || 5453 document['fullScreenElement'] || document['fullscreenElement'] || 5454 document['msFullScreenElement'] || document['msFullscreenElement'] || 5455 document['webkitCurrentFullScreenElement']) === canvasContainer) { 5456 canvas.cancelFullScreen = document['cancelFullScreen'] || 5457 document['mozCancelFullScreen'] || 5458 document['webkitCancelFullScreen'] || 5459 document['msExitFullscreen'] || 5460 document['exitFullscreen'] || 5461 function() {}; 5462 canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document); 5463 if (Browser.lockPointer) canvas.requestPointerLock(); 5464 Browser.isFullScreen = true; 5465 if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize(); 5466 } else { 5467 5468 // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen 5469 canvasContainer.parentNode.insertBefore(canvas, canvasContainer); 5470 canvasContainer.parentNode.removeChild(canvasContainer); 5471 5472 if (Browser.resizeCanvas) Browser.setWindowedCanvasSize(); 5473 } 5474 if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen); 5475 Browser.updateCanvasDimensions(canvas); 5476 } 5477 5478 if (!Browser.fullScreenHandlersInstalled) { 5479 Browser.fullScreenHandlersInstalled = true; 5480 document.addEventListener('fullscreenchange', fullScreenChange, false); 5481 document.addEventListener('mozfullscreenchange', fullScreenChange, false); 5482 document.addEventListener('webkitfullscreenchange', fullScreenChange, false); 5483 document.addEventListener('MSFullscreenChange', fullScreenChange, false); 5484 } 5485 5486 // 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 5487 var canvasContainer = document.createElement("div"); 5488 canvas.parentNode.insertBefore(canvasContainer, canvas); 5489 canvasContainer.appendChild(canvas); 5490 5491 // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size) 5492 canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] || 5493 canvasContainer['mozRequestFullScreen'] || 5494 canvasContainer['msRequestFullscreen'] || 5495 (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null); 5496 canvasContainer.requestFullScreen(); 5497 },requestAnimationFrame:function requestAnimationFrame(func) { 5498 if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js) 5499 setTimeout(func, 1000/60); 5500 } else { 5501 if (!window.requestAnimationFrame) { 5502 window.requestAnimationFrame = window['requestAnimationFrame'] || 5503 window['mozRequestAnimationFrame'] || 5504 window['webkitRequestAnimationFrame'] || 5505 window['msRequestAnimationFrame'] || 5506 window['oRequestAnimationFrame'] || 5507 window['setTimeout']; 5508 } 5509 window.requestAnimationFrame(func); 5510 } 5511 },safeCallback:function (func) { 5512 return function() { 5513 if (!ABORT) return func.apply(null, arguments); 5514 }; 5515 },safeRequestAnimationFrame:function (func) { 5516 return Browser.requestAnimationFrame(function() { 5517 if (!ABORT) func(); 5518 }); 5519 },safeSetTimeout:function (func, timeout) { 5520 return setTimeout(function() { 5521 if (!ABORT) func(); 5522 }, timeout); 5523 },safeSetInterval:function (func, timeout) { 5524 return setInterval(function() { 5525 if (!ABORT) func(); 5526 }, timeout); 5527 },getMimetype:function (name) { 5528 return { 5529 'jpg': 'image/jpeg', 5530 'jpeg': 'image/jpeg', 5531 'png': 'image/png', 5532 'bmp': 'image/bmp', 5533 'ogg': 'audio/ogg', 5534 'wav': 'audio/wav', 5535 'mp3': 'audio/mpeg' 5536 }[name.substr(name.lastIndexOf('.')+1)]; 5537 },getUserMedia:function (func) { 5538 if(!window.getUserMedia) { 5539 window.getUserMedia = navigator['getUserMedia'] || 5540 navigator['mozGetUserMedia']; 5541 } 5542 window.getUserMedia(func); 5543 },getMovementX:function (event) { 5544 return event['movementX'] || 5545 event['mozMovementX'] || 5546 event['webkitMovementX'] || 5547 0; 5548 },getMovementY:function (event) { 5549 return event['movementY'] || 5550 event['mozMovementY'] || 5551 event['webkitMovementY'] || 5552 0; 5553 },getMouseWheelDelta:function (event) { 5554 return Math.max(-1, Math.min(1, event.type === 'DOMMouseScroll' ? event.detail : -event.wheelDelta)); 5555 },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup 5556 if (Browser.pointerLock) { 5557 // When the pointer is locked, calculate the coordinates 5558 // based on the movement of the mouse. 5559 // Workaround for Firefox bug 764498 5560 if (event.type != 'mousemove' && 5561 ('mozMovementX' in event)) { 5562 Browser.mouseMovementX = Browser.mouseMovementY = 0; 5563 } else { 5564 Browser.mouseMovementX = Browser.getMovementX(event); 5565 Browser.mouseMovementY = Browser.getMovementY(event); 5566 } 5567 5568 // check if SDL is available 5569 if (typeof SDL != "undefined") { 5570 Browser.mouseX = SDL.mouseX + Browser.mouseMovementX; 5571 Browser.mouseY = SDL.mouseY + Browser.mouseMovementY; 5572 } else { 5573 // just add the mouse delta to the current absolut mouse position 5574 // FIXME: ideally this should be clamped against the canvas size and zero 5575 Browser.mouseX += Browser.mouseMovementX; 5576 Browser.mouseY += Browser.mouseMovementY; 5577 } 5578 } else { 5579 // Otherwise, calculate the movement based on the changes 5580 // in the coordinates. 5581 var rect = Module["canvas"].getBoundingClientRect(); 5582 var x, y; 5583 5584 // Neither .scrollX or .pageXOffset are defined in a spec, but 5585 // we prefer .scrollX because it is currently in a spec draft. 5586 // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/) 5587 var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset); 5588 var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset); 5589 if (event.type == 'touchstart' || 5590 event.type == 'touchend' || 5591 event.type == 'touchmove') { 5592 var t = event.touches.item(0); 5593 if (t) { 5594 x = t.pageX - (scrollX + rect.left); 5595 y = t.pageY - (scrollY + rect.top); 5596 } else { 5597 return; 5598 } 5599 } else { 5600 x = event.pageX - (scrollX + rect.left); 5601 y = event.pageY - (scrollY + rect.top); 5602 } 5603 5604 // the canvas might be CSS-scaled compared to its backbuffer; 5605 // SDL-using content will want mouse coordinates in terms 5606 // of backbuffer units. 5607 var cw = Module["canvas"].width; 5608 var ch = Module["canvas"].height; 5609 x = x * (cw / rect.width); 5610 y = y * (ch / rect.height); 5611 5612 Browser.mouseMovementX = x - Browser.mouseX; 5613 Browser.mouseMovementY = y - Browser.mouseY; 5614 Browser.mouseX = x; 5615 Browser.mouseY = y; 5616 } 5617 },xhrLoad:function (url, onload, onerror) { 5618 var xhr = new XMLHttpRequest(); 5619 xhr.open('GET', url, true); 5620 xhr.responseType = 'arraybuffer'; 5621 xhr.onload = function xhr_onload() { 5622 if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 5623 onload(xhr.response); 5624 } else { 5625 onerror(); 5626 } 5627 }; 5628 xhr.onerror = onerror; 5629 xhr.send(null); 5630 },asyncLoad:function (url, onload, onerror, noRunDep) { 5631 Browser.xhrLoad(url, function(arrayBuffer) { 5632 assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); 5633 onload(new Uint8Array(arrayBuffer)); 5634 if (!noRunDep) removeRunDependency('al ' + url); 5635 }, function(event) { 5636 if (onerror) { 5637 onerror(); 5638 } else { 5639 throw 'Loading data file "' + url + '" failed.'; 5640 } 5641 }); 5642 if (!noRunDep) addRunDependency('al ' + url); 5643 },resizeListeners:[],updateResizeListeners:function () { 5644 var canvas = Module['canvas']; 5645 Browser.resizeListeners.forEach(function(listener) { 5646 listener(canvas.width, canvas.height); 5647 }); 5648 },setCanvasSize:function (width, height, noUpdates) { 5649 var canvas = Module['canvas']; 5650 Browser.updateCanvasDimensions(canvas, width, height); 5651 if (!noUpdates) Browser.updateResizeListeners(); 5652 },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () { 5653 // check if SDL is available 5654 if (typeof SDL != "undefined") { 5655 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; 5656 flags = flags | 0x00800000; // set SDL_FULLSCREEN flag 5657 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags 5658 } 5659 Browser.updateResizeListeners(); 5660 },setWindowedCanvasSize:function () { 5661 // check if SDL is available 5662 if (typeof SDL != "undefined") { 5663 var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; 5664 flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag 5665 HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags 5666 } 5667 Browser.updateResizeListeners(); 5668 },updateCanvasDimensions:function (canvas, wNative, hNative) { 5669 if (wNative && hNative) { 5670 canvas.widthNative = wNative; 5671 canvas.heightNative = hNative; 5672 } else { 5673 wNative = canvas.widthNative; 5674 hNative = canvas.heightNative; 5675 } 5676 var w = wNative; 5677 var h = hNative; 5678 if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) { 5679 if (w/h < Module['forcedAspectRatio']) { 5680 w = Math.round(h * Module['forcedAspectRatio']); 5681 } else { 5682 h = Math.round(w / Module['forcedAspectRatio']); 5683 } 5684 } 5685 if (((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || 5686 document['mozFullScreenElement'] || document['mozFullscreenElement'] || 5687 document['fullScreenElement'] || document['fullscreenElement'] || 5688 document['msFullScreenElement'] || document['msFullscreenElement'] || 5689 document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) { 5690 var factor = Math.min(screen.width / w, screen.height / h); 5691 w = Math.round(w * factor); 5692 h = Math.round(h * factor); 5693 } 5694 if (Browser.resizeCanvas) { 5695 if (canvas.width != w) canvas.width = w; 5696 if (canvas.height != h) canvas.height = h; 5697 if (typeof canvas.style != 'undefined') { 5698 canvas.style.removeProperty( "width"); 5699 canvas.style.removeProperty("height"); 5700 } 5701 } else { 5702 if (canvas.width != wNative) canvas.width = wNative; 5703 if (canvas.height != hNative) canvas.height = hNative; 5704 if (typeof canvas.style != 'undefined') { 5705 if (w != wNative || h != hNative) { 5706 canvas.style.setProperty( "width", w + "px", "important"); 5707 canvas.style.setProperty("height", h + "px", "important"); 5708 } else { 5709 canvas.style.removeProperty( "width"); 5710 canvas.style.removeProperty("height"); 5711 } 5712 } 5713 } 5714 }}; 5715 5716 function _sbrk(bytes) { 5717 // Implement a Linux-like 'memory area' for our 'process'. 5718 // Changes the size of the memory area by |bytes|; returns the 5719 // address of the previous top ('break') of the memory area 5720 // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP 5721 var self = _sbrk; 5722 if (!self.called) { 5723 DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned 5724 self.called = true; 5725 assert(Runtime.dynamicAlloc); 5726 self.alloc = Runtime.dynamicAlloc; 5727 Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') }; 5728 } 5729 var ret = DYNAMICTOP; 5730 if (bytes != 0) self.alloc(bytes); 5731 return ret; // Previous break location. 5732 } 5733 5734 function _sysconf(name) { 5735 // long sysconf(int name); 5736 // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html 5737 switch(name) { 5738 case 30: return PAGE_SIZE; 5739 case 132: 5740 case 133: 5741 case 12: 5742 case 137: 5743 case 138: 5744 case 15: 5745 case 235: 5746 case 16: 5747 case 17: 5748 case 18: 5749 case 19: 5750 case 20: 5751 case 149: 5752 case 13: 5753 case 10: 5754 case 236: 5755 case 153: 5756 case 9: 5757 case 21: 5758 case 22: 5759 case 159: 5760 case 154: 5761 case 14: 5762 case 77: 5763 case 78: 5764 case 139: 5765 case 80: 5766 case 81: 5767 case 79: 5768 case 82: 5769 case 68: 5770 case 67: 5771 case 164: 5772 case 11: 5773 case 29: 5774 case 47: 5775 case 48: 5776 case 95: 5777 case 52: 5778 case 51: 5779 case 46: 5780 return 200809; 5781 case 27: 5782 case 246: 5783 case 127: 5784 case 128: 5785 case 23: 5786 case 24: 5787 case 160: 5788 case 161: 5789 case 181: 5790 case 182: 5791 case 242: 5792 case 183: 5793 case 184: 5794 case 243: 5795 case 244: 5796 case 245: 5797 case 165: 5798 case 178: 5799 case 179: 5800 case 49: 5801 case 50: 5802 case 168: 5803 case 169: 5804 case 175: 5805 case 170: 5806 case 171: 5807 case 172: 5808 case 97: 5809 case 76: 5810 case 32: 5811 case 173: 5812 case 35: 5813 return -1; 5814 case 176: 5815 case 177: 5816 case 7: 5817 case 155: 5818 case 8: 5819 case 157: 5820 case 125: 5821 case 126: 5822 case 92: 5823 case 93: 5824 case 129: 5825 case 130: 5826 case 131: 5827 case 94: 5828 case 91: 5829 return 1; 5830 case 74: 5831 case 60: 5832 case 69: 5833 case 70: 5834 case 4: 5835 return 1024; 5836 case 31: 5837 case 42: 5838 case 72: 5839 return 32; 5840 case 87: 5841 case 26: 5842 case 33: 5843 return 2147483647; 5844 case 34: 5845 case 1: 5846 return 47839; 5847 case 38: 5848 case 36: 5849 return 99; 5850 case 43: 5851 case 37: 5852 return 2048; 5853 case 0: return 2097152; 5854 case 3: return 65536; 5855 case 28: return 32768; 5856 case 44: return 32767; 5857 case 75: return 16384; 5858 case 39: return 1000; 5859 case 89: return 700; 5860 case 71: return 256; 5861 case 40: return 255; 5862 case 2: return 100; 5863 case 180: return 64; 5864 case 25: return 20; 5865 case 5: return 16; 5866 case 6: return 6; 5867 case 73: return 4; 5868 case 84: return 1; 5869 } 5870 ___setErrNo(ERRNO_CODES.EINVAL); 5871 return -1; 5872 } 5873 5874 function _emscripten_run_script(ptr) { 5875 eval(Pointer_stringify(ptr)); 5876 } 5877 5878 5879 function _malloc(bytes) { 5880 /* Over-allocate to make sure it is byte-aligned by 8. 5881 * This will leak memory, but this is only the dummy 5882 * implementation (replaced by dlmalloc normally) so 5883 * not an issue. 5884 */ 5885 var ptr = Runtime.dynamicAlloc(bytes + 8); 5886 return (ptr+8) & 0xFFFFFFF8; 5887 } 5888 Module["_malloc"] = _malloc;function ___cxa_allocate_exception(size) { 5889 var ptr = _malloc(size + ___cxa_exception_header_size); 5890 return ptr + ___cxa_exception_header_size; 5891 } 5892 5893 function _emscripten_cancel_main_loop() { 5894 Browser.mainLoop.scheduler = null; 5895 Browser.mainLoop.shouldPause = true; 5896 } 5897 5898 var __ZTISt9exception=allocate([allocate([1,0,0,0,0,0,0], "i8", ALLOC_STATIC)+8, 0], "i32", ALLOC_STATIC); 5899 FS.staticInit();__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });__ATEXIT__.push({ func: function() { FS.quit() } });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice; 5900 ___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0; 5901 __ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor(); 5902 if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); } 5903 __ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } }); 5904 _fputc.ret = allocate([0], "i8", ALLOC_STATIC); 5905 Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) }; 5906 Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) }; 5907 Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) }; 5908 Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() }; 5909 Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() }; 5910 Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() } 5911 STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP); 5912 5913 staticSealed = true; // seal the static portion of memory 5914 5915 STACK_MAX = STACK_BASE + 5242880; 5916 5917 DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX); 5918 5919 assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack"); 5920 5921 5922 var Math_min = Math.min; 5923 function invoke_iiii(index,a1,a2,a3) { 5924 try { 5925 return Module["dynCall_iiii"](index,a1,a2,a3); 5926 } catch(e) { 5927 if (typeof e !== 'number' && e !== 'longjmp') throw e; 5928 asm["setThrew"](1, 0); 5929 } 5930 } 5931 5932 function invoke_viiiii(index,a1,a2,a3,a4,a5) { 5933 try { 5934 Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5); 5935 } catch(e) { 5936 if (typeof e !== 'number' && e !== 'longjmp') throw e; 5937 asm["setThrew"](1, 0); 5938 } 5939 } 5940 5941 function invoke_vi(index,a1) { 5942 try { 5943 Module["dynCall_vi"](index,a1); 5944 } catch(e) { 5945 if (typeof e !== 'number' && e !== 'longjmp') throw e; 5946 asm["setThrew"](1, 0); 5947 } 5948 } 5949 5950 function invoke_vii(index,a1,a2) { 5951 try { 5952 Module["dynCall_vii"](index,a1,a2); 5953 } catch(e) { 5954 if (typeof e !== 'number' && e !== 'longjmp') throw e; 5955 asm["setThrew"](1, 0); 5956 } 5957 } 5958 5959 function invoke_ii(index,a1) { 5960 try { 5961 return Module["dynCall_ii"](index,a1); 5962 } catch(e) { 5963 if (typeof e !== 'number' && e !== 'longjmp') throw e; 5964 asm["setThrew"](1, 0); 5965 } 5966 } 5967 5968 function invoke_viii(index,a1,a2,a3) { 5969 try { 5970 Module["dynCall_viii"](index,a1,a2,a3); 5971 } catch(e) { 5972 if (typeof e !== 'number' && e !== 'longjmp') throw e; 5973 asm["setThrew"](1, 0); 5974 } 5975 } 5976 5977 function invoke_v(index) { 5978 try { 5979 Module["dynCall_v"](index); 5980 } catch(e) { 5981 if (typeof e !== 'number' && e !== 'longjmp') throw e; 5982 asm["setThrew"](1, 0); 5983 } 5984 } 5985 5986 function invoke_viid(index,a1,a2,a3) { 5987 try { 5988 Module["dynCall_viid"](index,a1,a2,a3); 5989 } catch(e) { 5990 if (typeof e !== 'number' && e !== 'longjmp') throw e; 5991 asm["setThrew"](1, 0); 5992 } 5993 } 5994 5995 function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) { 5996 try { 5997 Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6); 5998 } catch(e) { 5999 if (typeof e !== 'number' && e !== 'longjmp') throw e; 6000 asm["setThrew"](1, 0); 6001 } 6002 } 6003 6004 function invoke_iii(index,a1,a2) { 6005 try { 6006 return Module["dynCall_iii"](index,a1,a2); 6007 } catch(e) { 6008 if (typeof e !== 'number' && e !== 'longjmp') throw e; 6009 asm["setThrew"](1, 0); 6010 } 6011 } 6012 6013 function invoke_iiiiii(index,a1,a2,a3,a4,a5) { 6014 try { 6015 return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5); 6016 } catch(e) { 6017 if (typeof e !== 'number' && e !== 'longjmp') throw e; 6018 asm["setThrew"](1, 0); 6019 } 6020 } 6021 6022 function invoke_viiii(index,a1,a2,a3,a4) { 6023 try { 6024 Module["dynCall_viiii"](index,a1,a2,a3,a4); 6025 } catch(e) { 6026 if (typeof e !== 'number' && e !== 'longjmp') throw e; 6027 asm["setThrew"](1, 0); 6028 } 6029 } 6030 6031 function asmPrintInt(x, y) { 6032 Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack); 6033 } 6034 function asmPrintFloat(x, y) { 6035 Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack); 6036 } 6037 // EMSCRIPTEN_START_ASM 6038 var asm = (function(global, env, buffer) { 6039 'use asm'; 6040 var HEAP8 = new global.Int8Array(buffer); 6041 var HEAP16 = new global.Int16Array(buffer); 6042 var HEAP32 = new global.Int32Array(buffer); 6043 var HEAPU8 = new global.Uint8Array(buffer); 6044 var HEAPU16 = new global.Uint16Array(buffer); 6045 var HEAPU32 = new global.Uint32Array(buffer); 6046 var HEAPF32 = new global.Float32Array(buffer); 6047 var HEAPF64 = new global.Float64Array(buffer); 6048 6049 var STACKTOP=env.STACKTOP|0; 6050 var STACK_MAX=env.STACK_MAX|0; 6051 var tempDoublePtr=env.tempDoublePtr|0; 6052 var ABORT=env.ABORT|0; 6053 var __ZTISt9exception=env.__ZTISt9exception|0; 6054 6055 var __THREW__ = 0; 6056 var threwValue = 0; 6057 var setjmpId = 0; 6058 var undef = 0; 6059 var nan = +env.NaN, inf = +env.Infinity; 6060 var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0; 6061 6062 var tempRet0 = 0; 6063 var tempRet1 = 0; 6064 var tempRet2 = 0; 6065 var tempRet3 = 0; 6066 var tempRet4 = 0; 6067 var tempRet5 = 0; 6068 var tempRet6 = 0; 6069 var tempRet7 = 0; 6070 var tempRet8 = 0; 6071 var tempRet9 = 0; 6072 var Math_floor=global.Math.floor; 6073 var Math_abs=global.Math.abs; 6074 var Math_sqrt=global.Math.sqrt; 6075 var Math_pow=global.Math.pow; 6076 var Math_cos=global.Math.cos; 6077 var Math_sin=global.Math.sin; 6078 var Math_tan=global.Math.tan; 6079 var Math_acos=global.Math.acos; 6080 var Math_asin=global.Math.asin; 6081 var Math_atan=global.Math.atan; 6082 var Math_atan2=global.Math.atan2; 6083 var Math_exp=global.Math.exp; 6084 var Math_log=global.Math.log; 6085 var Math_ceil=global.Math.ceil; 6086 var Math_imul=global.Math.imul; 6087 var abort=env.abort; 6088 var assert=env.assert; 6089 var asmPrintInt=env.asmPrintInt; 6090 var asmPrintFloat=env.asmPrintFloat; 6091 var Math_min=env.min; 6092 var invoke_iiii=env.invoke_iiii; 6093 var invoke_viiiii=env.invoke_viiiii; 6094 var invoke_vi=env.invoke_vi; 6095 var invoke_vii=env.invoke_vii; 6096 var invoke_ii=env.invoke_ii; 6097 var invoke_viii=env.invoke_viii; 6098 var invoke_v=env.invoke_v; 6099 var invoke_viid=env.invoke_viid; 6100 var invoke_viiiiii=env.invoke_viiiiii; 6101 var invoke_iii=env.invoke_iii; 6102 var invoke_iiiiii=env.invoke_iiiiii; 6103 var invoke_viiii=env.invoke_viiii; 6104 var ___cxa_throw=env.___cxa_throw; 6105 var _emscripten_run_script=env._emscripten_run_script; 6106 var _cosf=env._cosf; 6107 var _send=env._send; 6108 var __ZSt9terminatev=env.__ZSt9terminatev; 6109 var __reallyNegative=env.__reallyNegative; 6110 var ___cxa_is_number_type=env.___cxa_is_number_type; 6111 var ___assert_fail=env.___assert_fail; 6112 var ___cxa_allocate_exception=env.___cxa_allocate_exception; 6113 var ___cxa_find_matching_catch=env.___cxa_find_matching_catch; 6114 var _fflush=env._fflush; 6115 var _pwrite=env._pwrite; 6116 var ___setErrNo=env.___setErrNo; 6117 var _sbrk=env._sbrk; 6118 var ___cxa_begin_catch=env.___cxa_begin_catch; 6119 var _sinf=env._sinf; 6120 var _fileno=env._fileno; 6121 var ___resumeException=env.___resumeException; 6122 var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv; 6123 var _sysconf=env._sysconf; 6124 var _clock=env._clock; 6125 var _emscripten_memcpy_big=env._emscripten_memcpy_big; 6126 var _puts=env._puts; 6127 var _mkport=env._mkport; 6128 var _floorf=env._floorf; 6129 var _sqrtf=env._sqrtf; 6130 var _write=env._write; 6131 var _emscripten_set_main_loop=env._emscripten_set_main_loop; 6132 var ___errno_location=env.___errno_location; 6133 var __ZNSt9exceptionD2Ev=env.__ZNSt9exceptionD2Ev; 6134 var _printf=env._printf; 6135 var ___cxa_does_inherit=env.___cxa_does_inherit; 6136 var __exit=env.__exit; 6137 var _fputc=env._fputc; 6138 var _abort=env._abort; 6139 var _fwrite=env._fwrite; 6140 var _time=env._time; 6141 var _fprintf=env._fprintf; 6142 var _emscripten_cancel_main_loop=env._emscripten_cancel_main_loop; 6143 var __formatString=env.__formatString; 6144 var _fputs=env._fputs; 6145 var _exit=env._exit; 6146 var ___cxa_pure_virtual=env.___cxa_pure_virtual; 6147 var tempFloat = 0.0; 6148 6149 // EMSCRIPTEN_START_FUNCS 6150 function _malloc(i12) { 6151 i12 = i12 | 0; 6152 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; 6153 i1 = STACKTOP; 6154 do { 6155 if (i12 >>> 0 < 245) { 6156 if (i12 >>> 0 < 11) { 6157 i12 = 16; 6158 } else { 6159 i12 = i12 + 11 & -8; 6160 } 6161 i20 = i12 >>> 3; 6162 i18 = HEAP32[1790] | 0; 6163 i21 = i18 >>> i20; 6164 if ((i21 & 3 | 0) != 0) { 6165 i6 = (i21 & 1 ^ 1) + i20 | 0; 6166 i5 = i6 << 1; 6167 i3 = 7200 + (i5 << 2) | 0; 6168 i5 = 7200 + (i5 + 2 << 2) | 0; 6169 i7 = HEAP32[i5 >> 2] | 0; 6170 i2 = i7 + 8 | 0; 6171 i4 = HEAP32[i2 >> 2] | 0; 6172 do { 6173 if ((i3 | 0) != (i4 | 0)) { 6174 if (i4 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6175 _abort(); 6176 } 6177 i8 = i4 + 12 | 0; 6178 if ((HEAP32[i8 >> 2] | 0) == (i7 | 0)) { 6179 HEAP32[i8 >> 2] = i3; 6180 HEAP32[i5 >> 2] = i4; 6181 break; 6182 } else { 6183 _abort(); 6184 } 6185 } else { 6186 HEAP32[1790] = i18 & ~(1 << i6); 6187 } 6188 } while (0); 6189 i32 = i6 << 3; 6190 HEAP32[i7 + 4 >> 2] = i32 | 3; 6191 i32 = i7 + (i32 | 4) | 0; 6192 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1; 6193 i32 = i2; 6194 STACKTOP = i1; 6195 return i32 | 0; 6196 } 6197 if (i12 >>> 0 > (HEAP32[7168 >> 2] | 0) >>> 0) { 6198 if ((i21 | 0) != 0) { 6199 i7 = 2 << i20; 6200 i7 = i21 << i20 & (i7 | 0 - i7); 6201 i7 = (i7 & 0 - i7) + -1 | 0; 6202 i2 = i7 >>> 12 & 16; 6203 i7 = i7 >>> i2; 6204 i6 = i7 >>> 5 & 8; 6205 i7 = i7 >>> i6; 6206 i5 = i7 >>> 2 & 4; 6207 i7 = i7 >>> i5; 6208 i4 = i7 >>> 1 & 2; 6209 i7 = i7 >>> i4; 6210 i3 = i7 >>> 1 & 1; 6211 i3 = (i6 | i2 | i5 | i4 | i3) + (i7 >>> i3) | 0; 6212 i7 = i3 << 1; 6213 i4 = 7200 + (i7 << 2) | 0; 6214 i7 = 7200 + (i7 + 2 << 2) | 0; 6215 i5 = HEAP32[i7 >> 2] | 0; 6216 i2 = i5 + 8 | 0; 6217 i6 = HEAP32[i2 >> 2] | 0; 6218 do { 6219 if ((i4 | 0) != (i6 | 0)) { 6220 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6221 _abort(); 6222 } 6223 i8 = i6 + 12 | 0; 6224 if ((HEAP32[i8 >> 2] | 0) == (i5 | 0)) { 6225 HEAP32[i8 >> 2] = i4; 6226 HEAP32[i7 >> 2] = i6; 6227 break; 6228 } else { 6229 _abort(); 6230 } 6231 } else { 6232 HEAP32[1790] = i18 & ~(1 << i3); 6233 } 6234 } while (0); 6235 i6 = i3 << 3; 6236 i4 = i6 - i12 | 0; 6237 HEAP32[i5 + 4 >> 2] = i12 | 3; 6238 i3 = i5 + i12 | 0; 6239 HEAP32[i5 + (i12 | 4) >> 2] = i4 | 1; 6240 HEAP32[i5 + i6 >> 2] = i4; 6241 i6 = HEAP32[7168 >> 2] | 0; 6242 if ((i6 | 0) != 0) { 6243 i5 = HEAP32[7180 >> 2] | 0; 6244 i8 = i6 >>> 3; 6245 i9 = i8 << 1; 6246 i6 = 7200 + (i9 << 2) | 0; 6247 i7 = HEAP32[1790] | 0; 6248 i8 = 1 << i8; 6249 if ((i7 & i8 | 0) != 0) { 6250 i7 = 7200 + (i9 + 2 << 2) | 0; 6251 i8 = HEAP32[i7 >> 2] | 0; 6252 if (i8 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6253 _abort(); 6254 } else { 6255 i28 = i7; 6256 i27 = i8; 6257 } 6258 } else { 6259 HEAP32[1790] = i7 | i8; 6260 i28 = 7200 + (i9 + 2 << 2) | 0; 6261 i27 = i6; 6262 } 6263 HEAP32[i28 >> 2] = i5; 6264 HEAP32[i27 + 12 >> 2] = i5; 6265 HEAP32[i5 + 8 >> 2] = i27; 6266 HEAP32[i5 + 12 >> 2] = i6; 6267 } 6268 HEAP32[7168 >> 2] = i4; 6269 HEAP32[7180 >> 2] = i3; 6270 i32 = i2; 6271 STACKTOP = i1; 6272 return i32 | 0; 6273 } 6274 i18 = HEAP32[7164 >> 2] | 0; 6275 if ((i18 | 0) != 0) { 6276 i2 = (i18 & 0 - i18) + -1 | 0; 6277 i31 = i2 >>> 12 & 16; 6278 i2 = i2 >>> i31; 6279 i30 = i2 >>> 5 & 8; 6280 i2 = i2 >>> i30; 6281 i32 = i2 >>> 2 & 4; 6282 i2 = i2 >>> i32; 6283 i6 = i2 >>> 1 & 2; 6284 i2 = i2 >>> i6; 6285 i3 = i2 >>> 1 & 1; 6286 i3 = HEAP32[7464 + ((i30 | i31 | i32 | i6 | i3) + (i2 >>> i3) << 2) >> 2] | 0; 6287 i2 = (HEAP32[i3 + 4 >> 2] & -8) - i12 | 0; 6288 i6 = i3; 6289 while (1) { 6290 i5 = HEAP32[i6 + 16 >> 2] | 0; 6291 if ((i5 | 0) == 0) { 6292 i5 = HEAP32[i6 + 20 >> 2] | 0; 6293 if ((i5 | 0) == 0) { 6294 break; 6295 } 6296 } 6297 i6 = (HEAP32[i5 + 4 >> 2] & -8) - i12 | 0; 6298 i4 = i6 >>> 0 < i2 >>> 0; 6299 i2 = i4 ? i6 : i2; 6300 i6 = i5; 6301 i3 = i4 ? i5 : i3; 6302 } 6303 i6 = HEAP32[7176 >> 2] | 0; 6304 if (i3 >>> 0 < i6 >>> 0) { 6305 _abort(); 6306 } 6307 i4 = i3 + i12 | 0; 6308 if (!(i3 >>> 0 < i4 >>> 0)) { 6309 _abort(); 6310 } 6311 i5 = HEAP32[i3 + 24 >> 2] | 0; 6312 i7 = HEAP32[i3 + 12 >> 2] | 0; 6313 do { 6314 if ((i7 | 0) == (i3 | 0)) { 6315 i8 = i3 + 20 | 0; 6316 i7 = HEAP32[i8 >> 2] | 0; 6317 if ((i7 | 0) == 0) { 6318 i8 = i3 + 16 | 0; 6319 i7 = HEAP32[i8 >> 2] | 0; 6320 if ((i7 | 0) == 0) { 6321 i26 = 0; 6322 break; 6323 } 6324 } 6325 while (1) { 6326 i10 = i7 + 20 | 0; 6327 i9 = HEAP32[i10 >> 2] | 0; 6328 if ((i9 | 0) != 0) { 6329 i7 = i9; 6330 i8 = i10; 6331 continue; 6332 } 6333 i10 = i7 + 16 | 0; 6334 i9 = HEAP32[i10 >> 2] | 0; 6335 if ((i9 | 0) == 0) { 6336 break; 6337 } else { 6338 i7 = i9; 6339 i8 = i10; 6340 } 6341 } 6342 if (i8 >>> 0 < i6 >>> 0) { 6343 _abort(); 6344 } else { 6345 HEAP32[i8 >> 2] = 0; 6346 i26 = i7; 6347 break; 6348 } 6349 } else { 6350 i8 = HEAP32[i3 + 8 >> 2] | 0; 6351 if (i8 >>> 0 < i6 >>> 0) { 6352 _abort(); 6353 } 6354 i6 = i8 + 12 | 0; 6355 if ((HEAP32[i6 >> 2] | 0) != (i3 | 0)) { 6356 _abort(); 6357 } 6358 i9 = i7 + 8 | 0; 6359 if ((HEAP32[i9 >> 2] | 0) == (i3 | 0)) { 6360 HEAP32[i6 >> 2] = i7; 6361 HEAP32[i9 >> 2] = i8; 6362 i26 = i7; 6363 break; 6364 } else { 6365 _abort(); 6366 } 6367 } 6368 } while (0); 6369 do { 6370 if ((i5 | 0) != 0) { 6371 i7 = HEAP32[i3 + 28 >> 2] | 0; 6372 i6 = 7464 + (i7 << 2) | 0; 6373 if ((i3 | 0) == (HEAP32[i6 >> 2] | 0)) { 6374 HEAP32[i6 >> 2] = i26; 6375 if ((i26 | 0) == 0) { 6376 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i7); 6377 break; 6378 } 6379 } else { 6380 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6381 _abort(); 6382 } 6383 i6 = i5 + 16 | 0; 6384 if ((HEAP32[i6 >> 2] | 0) == (i3 | 0)) { 6385 HEAP32[i6 >> 2] = i26; 6386 } else { 6387 HEAP32[i5 + 20 >> 2] = i26; 6388 } 6389 if ((i26 | 0) == 0) { 6390 break; 6391 } 6392 } 6393 if (i26 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6394 _abort(); 6395 } 6396 HEAP32[i26 + 24 >> 2] = i5; 6397 i5 = HEAP32[i3 + 16 >> 2] | 0; 6398 do { 6399 if ((i5 | 0) != 0) { 6400 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6401 _abort(); 6402 } else { 6403 HEAP32[i26 + 16 >> 2] = i5; 6404 HEAP32[i5 + 24 >> 2] = i26; 6405 break; 6406 } 6407 } 6408 } while (0); 6409 i5 = HEAP32[i3 + 20 >> 2] | 0; 6410 if ((i5 | 0) != 0) { 6411 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6412 _abort(); 6413 } else { 6414 HEAP32[i26 + 20 >> 2] = i5; 6415 HEAP32[i5 + 24 >> 2] = i26; 6416 break; 6417 } 6418 } 6419 } 6420 } while (0); 6421 if (i2 >>> 0 < 16) { 6422 i32 = i2 + i12 | 0; 6423 HEAP32[i3 + 4 >> 2] = i32 | 3; 6424 i32 = i3 + (i32 + 4) | 0; 6425 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1; 6426 } else { 6427 HEAP32[i3 + 4 >> 2] = i12 | 3; 6428 HEAP32[i3 + (i12 | 4) >> 2] = i2 | 1; 6429 HEAP32[i3 + (i2 + i12) >> 2] = i2; 6430 i6 = HEAP32[7168 >> 2] | 0; 6431 if ((i6 | 0) != 0) { 6432 i5 = HEAP32[7180 >> 2] | 0; 6433 i8 = i6 >>> 3; 6434 i9 = i8 << 1; 6435 i6 = 7200 + (i9 << 2) | 0; 6436 i7 = HEAP32[1790] | 0; 6437 i8 = 1 << i8; 6438 if ((i7 & i8 | 0) != 0) { 6439 i7 = 7200 + (i9 + 2 << 2) | 0; 6440 i8 = HEAP32[i7 >> 2] | 0; 6441 if (i8 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6442 _abort(); 6443 } else { 6444 i25 = i7; 6445 i24 = i8; 6446 } 6447 } else { 6448 HEAP32[1790] = i7 | i8; 6449 i25 = 7200 + (i9 + 2 << 2) | 0; 6450 i24 = i6; 6451 } 6452 HEAP32[i25 >> 2] = i5; 6453 HEAP32[i24 + 12 >> 2] = i5; 6454 HEAP32[i5 + 8 >> 2] = i24; 6455 HEAP32[i5 + 12 >> 2] = i6; 6456 } 6457 HEAP32[7168 >> 2] = i2; 6458 HEAP32[7180 >> 2] = i4; 6459 } 6460 i32 = i3 + 8 | 0; 6461 STACKTOP = i1; 6462 return i32 | 0; 6463 } 6464 } 6465 } else { 6466 if (!(i12 >>> 0 > 4294967231)) { 6467 i24 = i12 + 11 | 0; 6468 i12 = i24 & -8; 6469 i26 = HEAP32[7164 >> 2] | 0; 6470 if ((i26 | 0) != 0) { 6471 i25 = 0 - i12 | 0; 6472 i24 = i24 >>> 8; 6473 if ((i24 | 0) != 0) { 6474 if (i12 >>> 0 > 16777215) { 6475 i27 = 31; 6476 } else { 6477 i31 = (i24 + 1048320 | 0) >>> 16 & 8; 6478 i32 = i24 << i31; 6479 i30 = (i32 + 520192 | 0) >>> 16 & 4; 6480 i32 = i32 << i30; 6481 i27 = (i32 + 245760 | 0) >>> 16 & 2; 6482 i27 = 14 - (i30 | i31 | i27) + (i32 << i27 >>> 15) | 0; 6483 i27 = i12 >>> (i27 + 7 | 0) & 1 | i27 << 1; 6484 } 6485 } else { 6486 i27 = 0; 6487 } 6488 i30 = HEAP32[7464 + (i27 << 2) >> 2] | 0; 6489 L126 : do { 6490 if ((i30 | 0) == 0) { 6491 i29 = 0; 6492 i24 = 0; 6493 } else { 6494 if ((i27 | 0) == 31) { 6495 i24 = 0; 6496 } else { 6497 i24 = 25 - (i27 >>> 1) | 0; 6498 } 6499 i29 = 0; 6500 i28 = i12 << i24; 6501 i24 = 0; 6502 while (1) { 6503 i32 = HEAP32[i30 + 4 >> 2] & -8; 6504 i31 = i32 - i12 | 0; 6505 if (i31 >>> 0 < i25 >>> 0) { 6506 if ((i32 | 0) == (i12 | 0)) { 6507 i25 = i31; 6508 i29 = i30; 6509 i24 = i30; 6510 break L126; 6511 } else { 6512 i25 = i31; 6513 i24 = i30; 6514 } 6515 } 6516 i31 = HEAP32[i30 + 20 >> 2] | 0; 6517 i30 = HEAP32[i30 + (i28 >>> 31 << 2) + 16 >> 2] | 0; 6518 i29 = (i31 | 0) == 0 | (i31 | 0) == (i30 | 0) ? i29 : i31; 6519 if ((i30 | 0) == 0) { 6520 break; 6521 } else { 6522 i28 = i28 << 1; 6523 } 6524 } 6525 } 6526 } while (0); 6527 if ((i29 | 0) == 0 & (i24 | 0) == 0) { 6528 i32 = 2 << i27; 6529 i26 = i26 & (i32 | 0 - i32); 6530 if ((i26 | 0) == 0) { 6531 break; 6532 } 6533 i32 = (i26 & 0 - i26) + -1 | 0; 6534 i28 = i32 >>> 12 & 16; 6535 i32 = i32 >>> i28; 6536 i27 = i32 >>> 5 & 8; 6537 i32 = i32 >>> i27; 6538 i30 = i32 >>> 2 & 4; 6539 i32 = i32 >>> i30; 6540 i31 = i32 >>> 1 & 2; 6541 i32 = i32 >>> i31; 6542 i29 = i32 >>> 1 & 1; 6543 i29 = HEAP32[7464 + ((i27 | i28 | i30 | i31 | i29) + (i32 >>> i29) << 2) >> 2] | 0; 6544 } 6545 if ((i29 | 0) != 0) { 6546 while (1) { 6547 i27 = (HEAP32[i29 + 4 >> 2] & -8) - i12 | 0; 6548 i26 = i27 >>> 0 < i25 >>> 0; 6549 i25 = i26 ? i27 : i25; 6550 i24 = i26 ? i29 : i24; 6551 i26 = HEAP32[i29 + 16 >> 2] | 0; 6552 if ((i26 | 0) != 0) { 6553 i29 = i26; 6554 continue; 6555 } 6556 i29 = HEAP32[i29 + 20 >> 2] | 0; 6557 if ((i29 | 0) == 0) { 6558 break; 6559 } 6560 } 6561 } 6562 if ((i24 | 0) != 0 ? i25 >>> 0 < ((HEAP32[7168 >> 2] | 0) - i12 | 0) >>> 0 : 0) { 6563 i4 = HEAP32[7176 >> 2] | 0; 6564 if (i24 >>> 0 < i4 >>> 0) { 6565 _abort(); 6566 } 6567 i2 = i24 + i12 | 0; 6568 if (!(i24 >>> 0 < i2 >>> 0)) { 6569 _abort(); 6570 } 6571 i3 = HEAP32[i24 + 24 >> 2] | 0; 6572 i6 = HEAP32[i24 + 12 >> 2] | 0; 6573 do { 6574 if ((i6 | 0) == (i24 | 0)) { 6575 i6 = i24 + 20 | 0; 6576 i5 = HEAP32[i6 >> 2] | 0; 6577 if ((i5 | 0) == 0) { 6578 i6 = i24 + 16 | 0; 6579 i5 = HEAP32[i6 >> 2] | 0; 6580 if ((i5 | 0) == 0) { 6581 i22 = 0; 6582 break; 6583 } 6584 } 6585 while (1) { 6586 i8 = i5 + 20 | 0; 6587 i7 = HEAP32[i8 >> 2] | 0; 6588 if ((i7 | 0) != 0) { 6589 i5 = i7; 6590 i6 = i8; 6591 continue; 6592 } 6593 i7 = i5 + 16 | 0; 6594 i8 = HEAP32[i7 >> 2] | 0; 6595 if ((i8 | 0) == 0) { 6596 break; 6597 } else { 6598 i5 = i8; 6599 i6 = i7; 6600 } 6601 } 6602 if (i6 >>> 0 < i4 >>> 0) { 6603 _abort(); 6604 } else { 6605 HEAP32[i6 >> 2] = 0; 6606 i22 = i5; 6607 break; 6608 } 6609 } else { 6610 i5 = HEAP32[i24 + 8 >> 2] | 0; 6611 if (i5 >>> 0 < i4 >>> 0) { 6612 _abort(); 6613 } 6614 i7 = i5 + 12 | 0; 6615 if ((HEAP32[i7 >> 2] | 0) != (i24 | 0)) { 6616 _abort(); 6617 } 6618 i4 = i6 + 8 | 0; 6619 if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) { 6620 HEAP32[i7 >> 2] = i6; 6621 HEAP32[i4 >> 2] = i5; 6622 i22 = i6; 6623 break; 6624 } else { 6625 _abort(); 6626 } 6627 } 6628 } while (0); 6629 do { 6630 if ((i3 | 0) != 0) { 6631 i4 = HEAP32[i24 + 28 >> 2] | 0; 6632 i5 = 7464 + (i4 << 2) | 0; 6633 if ((i24 | 0) == (HEAP32[i5 >> 2] | 0)) { 6634 HEAP32[i5 >> 2] = i22; 6635 if ((i22 | 0) == 0) { 6636 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i4); 6637 break; 6638 } 6639 } else { 6640 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6641 _abort(); 6642 } 6643 i4 = i3 + 16 | 0; 6644 if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) { 6645 HEAP32[i4 >> 2] = i22; 6646 } else { 6647 HEAP32[i3 + 20 >> 2] = i22; 6648 } 6649 if ((i22 | 0) == 0) { 6650 break; 6651 } 6652 } 6653 if (i22 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6654 _abort(); 6655 } 6656 HEAP32[i22 + 24 >> 2] = i3; 6657 i3 = HEAP32[i24 + 16 >> 2] | 0; 6658 do { 6659 if ((i3 | 0) != 0) { 6660 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6661 _abort(); 6662 } else { 6663 HEAP32[i22 + 16 >> 2] = i3; 6664 HEAP32[i3 + 24 >> 2] = i22; 6665 break; 6666 } 6667 } 6668 } while (0); 6669 i3 = HEAP32[i24 + 20 >> 2] | 0; 6670 if ((i3 | 0) != 0) { 6671 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6672 _abort(); 6673 } else { 6674 HEAP32[i22 + 20 >> 2] = i3; 6675 HEAP32[i3 + 24 >> 2] = i22; 6676 break; 6677 } 6678 } 6679 } 6680 } while (0); 6681 L204 : do { 6682 if (!(i25 >>> 0 < 16)) { 6683 HEAP32[i24 + 4 >> 2] = i12 | 3; 6684 HEAP32[i24 + (i12 | 4) >> 2] = i25 | 1; 6685 HEAP32[i24 + (i25 + i12) >> 2] = i25; 6686 i4 = i25 >>> 3; 6687 if (i25 >>> 0 < 256) { 6688 i6 = i4 << 1; 6689 i3 = 7200 + (i6 << 2) | 0; 6690 i5 = HEAP32[1790] | 0; 6691 i4 = 1 << i4; 6692 if ((i5 & i4 | 0) != 0) { 6693 i5 = 7200 + (i6 + 2 << 2) | 0; 6694 i4 = HEAP32[i5 >> 2] | 0; 6695 if (i4 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6696 _abort(); 6697 } else { 6698 i21 = i5; 6699 i20 = i4; 6700 } 6701 } else { 6702 HEAP32[1790] = i5 | i4; 6703 i21 = 7200 + (i6 + 2 << 2) | 0; 6704 i20 = i3; 6705 } 6706 HEAP32[i21 >> 2] = i2; 6707 HEAP32[i20 + 12 >> 2] = i2; 6708 HEAP32[i24 + (i12 + 8) >> 2] = i20; 6709 HEAP32[i24 + (i12 + 12) >> 2] = i3; 6710 break; 6711 } 6712 i3 = i25 >>> 8; 6713 if ((i3 | 0) != 0) { 6714 if (i25 >>> 0 > 16777215) { 6715 i3 = 31; 6716 } else { 6717 i31 = (i3 + 1048320 | 0) >>> 16 & 8; 6718 i32 = i3 << i31; 6719 i30 = (i32 + 520192 | 0) >>> 16 & 4; 6720 i32 = i32 << i30; 6721 i3 = (i32 + 245760 | 0) >>> 16 & 2; 6722 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0; 6723 i3 = i25 >>> (i3 + 7 | 0) & 1 | i3 << 1; 6724 } 6725 } else { 6726 i3 = 0; 6727 } 6728 i6 = 7464 + (i3 << 2) | 0; 6729 HEAP32[i24 + (i12 + 28) >> 2] = i3; 6730 HEAP32[i24 + (i12 + 20) >> 2] = 0; 6731 HEAP32[i24 + (i12 + 16) >> 2] = 0; 6732 i4 = HEAP32[7164 >> 2] | 0; 6733 i5 = 1 << i3; 6734 if ((i4 & i5 | 0) == 0) { 6735 HEAP32[7164 >> 2] = i4 | i5; 6736 HEAP32[i6 >> 2] = i2; 6737 HEAP32[i24 + (i12 + 24) >> 2] = i6; 6738 HEAP32[i24 + (i12 + 12) >> 2] = i2; 6739 HEAP32[i24 + (i12 + 8) >> 2] = i2; 6740 break; 6741 } 6742 i4 = HEAP32[i6 >> 2] | 0; 6743 if ((i3 | 0) == 31) { 6744 i3 = 0; 6745 } else { 6746 i3 = 25 - (i3 >>> 1) | 0; 6747 } 6748 L225 : do { 6749 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i25 | 0)) { 6750 i3 = i25 << i3; 6751 while (1) { 6752 i6 = i4 + (i3 >>> 31 << 2) + 16 | 0; 6753 i5 = HEAP32[i6 >> 2] | 0; 6754 if ((i5 | 0) == 0) { 6755 break; 6756 } 6757 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i25 | 0)) { 6758 i18 = i5; 6759 break L225; 6760 } else { 6761 i3 = i3 << 1; 6762 i4 = i5; 6763 } 6764 } 6765 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 6766 _abort(); 6767 } else { 6768 HEAP32[i6 >> 2] = i2; 6769 HEAP32[i24 + (i12 + 24) >> 2] = i4; 6770 HEAP32[i24 + (i12 + 12) >> 2] = i2; 6771 HEAP32[i24 + (i12 + 8) >> 2] = i2; 6772 break L204; 6773 } 6774 } else { 6775 i18 = i4; 6776 } 6777 } while (0); 6778 i4 = i18 + 8 | 0; 6779 i3 = HEAP32[i4 >> 2] | 0; 6780 i5 = HEAP32[7176 >> 2] | 0; 6781 if (i18 >>> 0 < i5 >>> 0) { 6782 _abort(); 6783 } 6784 if (i3 >>> 0 < i5 >>> 0) { 6785 _abort(); 6786 } else { 6787 HEAP32[i3 + 12 >> 2] = i2; 6788 HEAP32[i4 >> 2] = i2; 6789 HEAP32[i24 + (i12 + 8) >> 2] = i3; 6790 HEAP32[i24 + (i12 + 12) >> 2] = i18; 6791 HEAP32[i24 + (i12 + 24) >> 2] = 0; 6792 break; 6793 } 6794 } else { 6795 i32 = i25 + i12 | 0; 6796 HEAP32[i24 + 4 >> 2] = i32 | 3; 6797 i32 = i24 + (i32 + 4) | 0; 6798 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1; 6799 } 6800 } while (0); 6801 i32 = i24 + 8 | 0; 6802 STACKTOP = i1; 6803 return i32 | 0; 6804 } 6805 } 6806 } else { 6807 i12 = -1; 6808 } 6809 } 6810 } while (0); 6811 i18 = HEAP32[7168 >> 2] | 0; 6812 if (!(i12 >>> 0 > i18 >>> 0)) { 6813 i3 = i18 - i12 | 0; 6814 i2 = HEAP32[7180 >> 2] | 0; 6815 if (i3 >>> 0 > 15) { 6816 HEAP32[7180 >> 2] = i2 + i12; 6817 HEAP32[7168 >> 2] = i3; 6818 HEAP32[i2 + (i12 + 4) >> 2] = i3 | 1; 6819 HEAP32[i2 + i18 >> 2] = i3; 6820 HEAP32[i2 + 4 >> 2] = i12 | 3; 6821 } else { 6822 HEAP32[7168 >> 2] = 0; 6823 HEAP32[7180 >> 2] = 0; 6824 HEAP32[i2 + 4 >> 2] = i18 | 3; 6825 i32 = i2 + (i18 + 4) | 0; 6826 HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1; 6827 } 6828 i32 = i2 + 8 | 0; 6829 STACKTOP = i1; 6830 return i32 | 0; 6831 } 6832 i18 = HEAP32[7172 >> 2] | 0; 6833 if (i12 >>> 0 < i18 >>> 0) { 6834 i31 = i18 - i12 | 0; 6835 HEAP32[7172 >> 2] = i31; 6836 i32 = HEAP32[7184 >> 2] | 0; 6837 HEAP32[7184 >> 2] = i32 + i12; 6838 HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1; 6839 HEAP32[i32 + 4 >> 2] = i12 | 3; 6840 i32 = i32 + 8 | 0; 6841 STACKTOP = i1; 6842 return i32 | 0; 6843 } 6844 do { 6845 if ((HEAP32[1908] | 0) == 0) { 6846 i18 = _sysconf(30) | 0; 6847 if ((i18 + -1 & i18 | 0) == 0) { 6848 HEAP32[7640 >> 2] = i18; 6849 HEAP32[7636 >> 2] = i18; 6850 HEAP32[7644 >> 2] = -1; 6851 HEAP32[7648 >> 2] = -1; 6852 HEAP32[7652 >> 2] = 0; 6853 HEAP32[7604 >> 2] = 0; 6854 HEAP32[1908] = (_time(0) | 0) & -16 ^ 1431655768; 6855 break; 6856 } else { 6857 _abort(); 6858 } 6859 } 6860 } while (0); 6861 i20 = i12 + 48 | 0; 6862 i25 = HEAP32[7640 >> 2] | 0; 6863 i21 = i12 + 47 | 0; 6864 i22 = i25 + i21 | 0; 6865 i25 = 0 - i25 | 0; 6866 i18 = i22 & i25; 6867 if (!(i18 >>> 0 > i12 >>> 0)) { 6868 i32 = 0; 6869 STACKTOP = i1; 6870 return i32 | 0; 6871 } 6872 i24 = HEAP32[7600 >> 2] | 0; 6873 if ((i24 | 0) != 0 ? (i31 = HEAP32[7592 >> 2] | 0, i32 = i31 + i18 | 0, i32 >>> 0 <= i31 >>> 0 | i32 >>> 0 > i24 >>> 0) : 0) { 6874 i32 = 0; 6875 STACKTOP = i1; 6876 return i32 | 0; 6877 } 6878 L269 : do { 6879 if ((HEAP32[7604 >> 2] & 4 | 0) == 0) { 6880 i26 = HEAP32[7184 >> 2] | 0; 6881 L271 : do { 6882 if ((i26 | 0) != 0) { 6883 i24 = 7608 | 0; 6884 while (1) { 6885 i27 = HEAP32[i24 >> 2] | 0; 6886 if (!(i27 >>> 0 > i26 >>> 0) ? (i23 = i24 + 4 | 0, (i27 + (HEAP32[i23 >> 2] | 0) | 0) >>> 0 > i26 >>> 0) : 0) { 6887 break; 6888 } 6889 i24 = HEAP32[i24 + 8 >> 2] | 0; 6890 if ((i24 | 0) == 0) { 6891 i13 = 182; 6892 break L271; 6893 } 6894 } 6895 if ((i24 | 0) != 0) { 6896 i25 = i22 - (HEAP32[7172 >> 2] | 0) & i25; 6897 if (i25 >>> 0 < 2147483647) { 6898 i13 = _sbrk(i25 | 0) | 0; 6899 i26 = (i13 | 0) == ((HEAP32[i24 >> 2] | 0) + (HEAP32[i23 >> 2] | 0) | 0); 6900 i22 = i13; 6901 i24 = i25; 6902 i23 = i26 ? i13 : -1; 6903 i25 = i26 ? i25 : 0; 6904 i13 = 191; 6905 } else { 6906 i25 = 0; 6907 } 6908 } else { 6909 i13 = 182; 6910 } 6911 } else { 6912 i13 = 182; 6913 } 6914 } while (0); 6915 do { 6916 if ((i13 | 0) == 182) { 6917 i23 = _sbrk(0) | 0; 6918 if ((i23 | 0) != (-1 | 0)) { 6919 i24 = i23; 6920 i22 = HEAP32[7636 >> 2] | 0; 6921 i25 = i22 + -1 | 0; 6922 if ((i25 & i24 | 0) == 0) { 6923 i25 = i18; 6924 } else { 6925 i25 = i18 - i24 + (i25 + i24 & 0 - i22) | 0; 6926 } 6927 i24 = HEAP32[7592 >> 2] | 0; 6928 i26 = i24 + i25 | 0; 6929 if (i25 >>> 0 > i12 >>> 0 & i25 >>> 0 < 2147483647) { 6930 i22 = HEAP32[7600 >> 2] | 0; 6931 if ((i22 | 0) != 0 ? i26 >>> 0 <= i24 >>> 0 | i26 >>> 0 > i22 >>> 0 : 0) { 6932 i25 = 0; 6933 break; 6934 } 6935 i22 = _sbrk(i25 | 0) | 0; 6936 i13 = (i22 | 0) == (i23 | 0); 6937 i24 = i25; 6938 i23 = i13 ? i23 : -1; 6939 i25 = i13 ? i25 : 0; 6940 i13 = 191; 6941 } else { 6942 i25 = 0; 6943 } 6944 } else { 6945 i25 = 0; 6946 } 6947 } 6948 } while (0); 6949 L291 : do { 6950 if ((i13 | 0) == 191) { 6951 i13 = 0 - i24 | 0; 6952 if ((i23 | 0) != (-1 | 0)) { 6953 i17 = i23; 6954 i14 = i25; 6955 i13 = 202; 6956 break L269; 6957 } 6958 do { 6959 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) { 6960 if ((_sbrk(i19 | 0) | 0) == (-1 | 0)) { 6961 _sbrk(i13 | 0) | 0; 6962 break L291; 6963 } else { 6964 i24 = i19 + i24 | 0; 6965 break; 6966 } 6967 } 6968 } while (0); 6969 if ((i22 | 0) != (-1 | 0)) { 6970 i17 = i22; 6971 i14 = i24; 6972 i13 = 202; 6973 break L269; 6974 } 6975 } 6976 } while (0); 6977 HEAP32[7604 >> 2] = HEAP32[7604 >> 2] | 4; 6978 i13 = 199; 6979 } else { 6980 i25 = 0; 6981 i13 = 199; 6982 } 6983 } while (0); 6984 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) { 6985 i14 = i14 ? i15 : i25; 6986 i13 = 202; 6987 } 6988 if ((i13 | 0) == 202) { 6989 i15 = (HEAP32[7592 >> 2] | 0) + i14 | 0; 6990 HEAP32[7592 >> 2] = i15; 6991 if (i15 >>> 0 > (HEAP32[7596 >> 2] | 0) >>> 0) { 6992 HEAP32[7596 >> 2] = i15; 6993 } 6994 i15 = HEAP32[7184 >> 2] | 0; 6995 L311 : do { 6996 if ((i15 | 0) != 0) { 6997 i21 = 7608 | 0; 6998 while (1) { 6999 i16 = HEAP32[i21 >> 2] | 0; 7000 i19 = i21 + 4 | 0; 7001 i20 = HEAP32[i19 >> 2] | 0; 7002 if ((i17 | 0) == (i16 + i20 | 0)) { 7003 i13 = 214; 7004 break; 7005 } 7006 i18 = HEAP32[i21 + 8 >> 2] | 0; 7007 if ((i18 | 0) == 0) { 7008 break; 7009 } else { 7010 i21 = i18; 7011 } 7012 } 7013 if (((i13 | 0) == 214 ? (HEAP32[i21 + 12 >> 2] & 8 | 0) == 0 : 0) ? i15 >>> 0 >= i16 >>> 0 & i15 >>> 0 < i17 >>> 0 : 0) { 7014 HEAP32[i19 >> 2] = i20 + i14; 7015 i2 = (HEAP32[7172 >> 2] | 0) + i14 | 0; 7016 i3 = i15 + 8 | 0; 7017 if ((i3 & 7 | 0) == 0) { 7018 i3 = 0; 7019 } else { 7020 i3 = 0 - i3 & 7; 7021 } 7022 i32 = i2 - i3 | 0; 7023 HEAP32[7184 >> 2] = i15 + i3; 7024 HEAP32[7172 >> 2] = i32; 7025 HEAP32[i15 + (i3 + 4) >> 2] = i32 | 1; 7026 HEAP32[i15 + (i2 + 4) >> 2] = 40; 7027 HEAP32[7188 >> 2] = HEAP32[7648 >> 2]; 7028 break; 7029 } 7030 if (i17 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7031 HEAP32[7176 >> 2] = i17; 7032 } 7033 i19 = i17 + i14 | 0; 7034 i16 = 7608 | 0; 7035 while (1) { 7036 if ((HEAP32[i16 >> 2] | 0) == (i19 | 0)) { 7037 i13 = 224; 7038 break; 7039 } 7040 i18 = HEAP32[i16 + 8 >> 2] | 0; 7041 if ((i18 | 0) == 0) { 7042 break; 7043 } else { 7044 i16 = i18; 7045 } 7046 } 7047 if ((i13 | 0) == 224 ? (HEAP32[i16 + 12 >> 2] & 8 | 0) == 0 : 0) { 7048 HEAP32[i16 >> 2] = i17; 7049 i6 = i16 + 4 | 0; 7050 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i14; 7051 i6 = i17 + 8 | 0; 7052 if ((i6 & 7 | 0) == 0) { 7053 i6 = 0; 7054 } else { 7055 i6 = 0 - i6 & 7; 7056 } 7057 i7 = i17 + (i14 + 8) | 0; 7058 if ((i7 & 7 | 0) == 0) { 7059 i13 = 0; 7060 } else { 7061 i13 = 0 - i7 & 7; 7062 } 7063 i15 = i17 + (i13 + i14) | 0; 7064 i8 = i6 + i12 | 0; 7065 i7 = i17 + i8 | 0; 7066 i10 = i15 - (i17 + i6) - i12 | 0; 7067 HEAP32[i17 + (i6 + 4) >> 2] = i12 | 3; 7068 L348 : do { 7069 if ((i15 | 0) != (HEAP32[7184 >> 2] | 0)) { 7070 if ((i15 | 0) == (HEAP32[7180 >> 2] | 0)) { 7071 i32 = (HEAP32[7168 >> 2] | 0) + i10 | 0; 7072 HEAP32[7168 >> 2] = i32; 7073 HEAP32[7180 >> 2] = i7; 7074 HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1; 7075 HEAP32[i17 + (i32 + i8) >> 2] = i32; 7076 break; 7077 } 7078 i12 = i14 + 4 | 0; 7079 i18 = HEAP32[i17 + (i12 + i13) >> 2] | 0; 7080 if ((i18 & 3 | 0) == 1) { 7081 i11 = i18 & -8; 7082 i16 = i18 >>> 3; 7083 do { 7084 if (!(i18 >>> 0 < 256)) { 7085 i9 = HEAP32[i17 + ((i13 | 24) + i14) >> 2] | 0; 7086 i19 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0; 7087 do { 7088 if ((i19 | 0) == (i15 | 0)) { 7089 i19 = i13 | 16; 7090 i18 = i17 + (i12 + i19) | 0; 7091 i16 = HEAP32[i18 >> 2] | 0; 7092 if ((i16 | 0) == 0) { 7093 i18 = i17 + (i19 + i14) | 0; 7094 i16 = HEAP32[i18 >> 2] | 0; 7095 if ((i16 | 0) == 0) { 7096 i5 = 0; 7097 break; 7098 } 7099 } 7100 while (1) { 7101 i20 = i16 + 20 | 0; 7102 i19 = HEAP32[i20 >> 2] | 0; 7103 if ((i19 | 0) != 0) { 7104 i16 = i19; 7105 i18 = i20; 7106 continue; 7107 } 7108 i19 = i16 + 16 | 0; 7109 i20 = HEAP32[i19 >> 2] | 0; 7110 if ((i20 | 0) == 0) { 7111 break; 7112 } else { 7113 i16 = i20; 7114 i18 = i19; 7115 } 7116 } 7117 if (i18 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7118 _abort(); 7119 } else { 7120 HEAP32[i18 >> 2] = 0; 7121 i5 = i16; 7122 break; 7123 } 7124 } else { 7125 i18 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0; 7126 if (i18 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7127 _abort(); 7128 } 7129 i16 = i18 + 12 | 0; 7130 if ((HEAP32[i16 >> 2] | 0) != (i15 | 0)) { 7131 _abort(); 7132 } 7133 i20 = i19 + 8 | 0; 7134 if ((HEAP32[i20 >> 2] | 0) == (i15 | 0)) { 7135 HEAP32[i16 >> 2] = i19; 7136 HEAP32[i20 >> 2] = i18; 7137 i5 = i19; 7138 break; 7139 } else { 7140 _abort(); 7141 } 7142 } 7143 } while (0); 7144 if ((i9 | 0) != 0) { 7145 i16 = HEAP32[i17 + (i14 + 28 + i13) >> 2] | 0; 7146 i18 = 7464 + (i16 << 2) | 0; 7147 if ((i15 | 0) == (HEAP32[i18 >> 2] | 0)) { 7148 HEAP32[i18 >> 2] = i5; 7149 if ((i5 | 0) == 0) { 7150 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i16); 7151 break; 7152 } 7153 } else { 7154 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7155 _abort(); 7156 } 7157 i16 = i9 + 16 | 0; 7158 if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) { 7159 HEAP32[i16 >> 2] = i5; 7160 } else { 7161 HEAP32[i9 + 20 >> 2] = i5; 7162 } 7163 if ((i5 | 0) == 0) { 7164 break; 7165 } 7166 } 7167 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7168 _abort(); 7169 } 7170 HEAP32[i5 + 24 >> 2] = i9; 7171 i15 = i13 | 16; 7172 i9 = HEAP32[i17 + (i15 + i14) >> 2] | 0; 7173 do { 7174 if ((i9 | 0) != 0) { 7175 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7176 _abort(); 7177 } else { 7178 HEAP32[i5 + 16 >> 2] = i9; 7179 HEAP32[i9 + 24 >> 2] = i5; 7180 break; 7181 } 7182 } 7183 } while (0); 7184 i9 = HEAP32[i17 + (i12 + i15) >> 2] | 0; 7185 if ((i9 | 0) != 0) { 7186 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7187 _abort(); 7188 } else { 7189 HEAP32[i5 + 20 >> 2] = i9; 7190 HEAP32[i9 + 24 >> 2] = i5; 7191 break; 7192 } 7193 } 7194 } 7195 } else { 7196 i5 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0; 7197 i12 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0; 7198 i18 = 7200 + (i16 << 1 << 2) | 0; 7199 if ((i5 | 0) != (i18 | 0)) { 7200 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7201 _abort(); 7202 } 7203 if ((HEAP32[i5 + 12 >> 2] | 0) != (i15 | 0)) { 7204 _abort(); 7205 } 7206 } 7207 if ((i12 | 0) == (i5 | 0)) { 7208 HEAP32[1790] = HEAP32[1790] & ~(1 << i16); 7209 break; 7210 } 7211 if ((i12 | 0) != (i18 | 0)) { 7212 if (i12 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7213 _abort(); 7214 } 7215 i16 = i12 + 8 | 0; 7216 if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) { 7217 i9 = i16; 7218 } else { 7219 _abort(); 7220 } 7221 } else { 7222 i9 = i12 + 8 | 0; 7223 } 7224 HEAP32[i5 + 12 >> 2] = i12; 7225 HEAP32[i9 >> 2] = i5; 7226 } 7227 } while (0); 7228 i15 = i17 + ((i11 | i13) + i14) | 0; 7229 i10 = i11 + i10 | 0; 7230 } 7231 i5 = i15 + 4 | 0; 7232 HEAP32[i5 >> 2] = HEAP32[i5 >> 2] & -2; 7233 HEAP32[i17 + (i8 + 4) >> 2] = i10 | 1; 7234 HEAP32[i17 + (i10 + i8) >> 2] = i10; 7235 i5 = i10 >>> 3; 7236 if (i10 >>> 0 < 256) { 7237 i10 = i5 << 1; 7238 i2 = 7200 + (i10 << 2) | 0; 7239 i9 = HEAP32[1790] | 0; 7240 i5 = 1 << i5; 7241 if ((i9 & i5 | 0) != 0) { 7242 i9 = 7200 + (i10 + 2 << 2) | 0; 7243 i5 = HEAP32[i9 >> 2] | 0; 7244 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7245 _abort(); 7246 } else { 7247 i3 = i9; 7248 i4 = i5; 7249 } 7250 } else { 7251 HEAP32[1790] = i9 | i5; 7252 i3 = 7200 + (i10 + 2 << 2) | 0; 7253 i4 = i2; 7254 } 7255 HEAP32[i3 >> 2] = i7; 7256 HEAP32[i4 + 12 >> 2] = i7; 7257 HEAP32[i17 + (i8 + 8) >> 2] = i4; 7258 HEAP32[i17 + (i8 + 12) >> 2] = i2; 7259 break; 7260 } 7261 i3 = i10 >>> 8; 7262 if ((i3 | 0) != 0) { 7263 if (i10 >>> 0 > 16777215) { 7264 i3 = 31; 7265 } else { 7266 i31 = (i3 + 1048320 | 0) >>> 16 & 8; 7267 i32 = i3 << i31; 7268 i30 = (i32 + 520192 | 0) >>> 16 & 4; 7269 i32 = i32 << i30; 7270 i3 = (i32 + 245760 | 0) >>> 16 & 2; 7271 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0; 7272 i3 = i10 >>> (i3 + 7 | 0) & 1 | i3 << 1; 7273 } 7274 } else { 7275 i3 = 0; 7276 } 7277 i4 = 7464 + (i3 << 2) | 0; 7278 HEAP32[i17 + (i8 + 28) >> 2] = i3; 7279 HEAP32[i17 + (i8 + 20) >> 2] = 0; 7280 HEAP32[i17 + (i8 + 16) >> 2] = 0; 7281 i9 = HEAP32[7164 >> 2] | 0; 7282 i5 = 1 << i3; 7283 if ((i9 & i5 | 0) == 0) { 7284 HEAP32[7164 >> 2] = i9 | i5; 7285 HEAP32[i4 >> 2] = i7; 7286 HEAP32[i17 + (i8 + 24) >> 2] = i4; 7287 HEAP32[i17 + (i8 + 12) >> 2] = i7; 7288 HEAP32[i17 + (i8 + 8) >> 2] = i7; 7289 break; 7290 } 7291 i4 = HEAP32[i4 >> 2] | 0; 7292 if ((i3 | 0) == 31) { 7293 i3 = 0; 7294 } else { 7295 i3 = 25 - (i3 >>> 1) | 0; 7296 } 7297 L444 : do { 7298 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i10 | 0)) { 7299 i3 = i10 << i3; 7300 while (1) { 7301 i5 = i4 + (i3 >>> 31 << 2) + 16 | 0; 7302 i9 = HEAP32[i5 >> 2] | 0; 7303 if ((i9 | 0) == 0) { 7304 break; 7305 } 7306 if ((HEAP32[i9 + 4 >> 2] & -8 | 0) == (i10 | 0)) { 7307 i2 = i9; 7308 break L444; 7309 } else { 7310 i3 = i3 << 1; 7311 i4 = i9; 7312 } 7313 } 7314 if (i5 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7315 _abort(); 7316 } else { 7317 HEAP32[i5 >> 2] = i7; 7318 HEAP32[i17 + (i8 + 24) >> 2] = i4; 7319 HEAP32[i17 + (i8 + 12) >> 2] = i7; 7320 HEAP32[i17 + (i8 + 8) >> 2] = i7; 7321 break L348; 7322 } 7323 } else { 7324 i2 = i4; 7325 } 7326 } while (0); 7327 i4 = i2 + 8 | 0; 7328 i3 = HEAP32[i4 >> 2] | 0; 7329 i5 = HEAP32[7176 >> 2] | 0; 7330 if (i2 >>> 0 < i5 >>> 0) { 7331 _abort(); 7332 } 7333 if (i3 >>> 0 < i5 >>> 0) { 7334 _abort(); 7335 } else { 7336 HEAP32[i3 + 12 >> 2] = i7; 7337 HEAP32[i4 >> 2] = i7; 7338 HEAP32[i17 + (i8 + 8) >> 2] = i3; 7339 HEAP32[i17 + (i8 + 12) >> 2] = i2; 7340 HEAP32[i17 + (i8 + 24) >> 2] = 0; 7341 break; 7342 } 7343 } else { 7344 i32 = (HEAP32[7172 >> 2] | 0) + i10 | 0; 7345 HEAP32[7172 >> 2] = i32; 7346 HEAP32[7184 >> 2] = i7; 7347 HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1; 7348 } 7349 } while (0); 7350 i32 = i17 + (i6 | 8) | 0; 7351 STACKTOP = i1; 7352 return i32 | 0; 7353 } 7354 i3 = 7608 | 0; 7355 while (1) { 7356 i2 = HEAP32[i3 >> 2] | 0; 7357 if (!(i2 >>> 0 > i15 >>> 0) ? (i11 = HEAP32[i3 + 4 >> 2] | 0, i10 = i2 + i11 | 0, i10 >>> 0 > i15 >>> 0) : 0) { 7358 break; 7359 } 7360 i3 = HEAP32[i3 + 8 >> 2] | 0; 7361 } 7362 i3 = i2 + (i11 + -39) | 0; 7363 if ((i3 & 7 | 0) == 0) { 7364 i3 = 0; 7365 } else { 7366 i3 = 0 - i3 & 7; 7367 } 7368 i2 = i2 + (i11 + -47 + i3) | 0; 7369 i2 = i2 >>> 0 < (i15 + 16 | 0) >>> 0 ? i15 : i2; 7370 i3 = i2 + 8 | 0; 7371 i4 = i17 + 8 | 0; 7372 if ((i4 & 7 | 0) == 0) { 7373 i4 = 0; 7374 } else { 7375 i4 = 0 - i4 & 7; 7376 } 7377 i32 = i14 + -40 - i4 | 0; 7378 HEAP32[7184 >> 2] = i17 + i4; 7379 HEAP32[7172 >> 2] = i32; 7380 HEAP32[i17 + (i4 + 4) >> 2] = i32 | 1; 7381 HEAP32[i17 + (i14 + -36) >> 2] = 40; 7382 HEAP32[7188 >> 2] = HEAP32[7648 >> 2]; 7383 HEAP32[i2 + 4 >> 2] = 27; 7384 HEAP32[i3 + 0 >> 2] = HEAP32[7608 >> 2]; 7385 HEAP32[i3 + 4 >> 2] = HEAP32[7612 >> 2]; 7386 HEAP32[i3 + 8 >> 2] = HEAP32[7616 >> 2]; 7387 HEAP32[i3 + 12 >> 2] = HEAP32[7620 >> 2]; 7388 HEAP32[7608 >> 2] = i17; 7389 HEAP32[7612 >> 2] = i14; 7390 HEAP32[7620 >> 2] = 0; 7391 HEAP32[7616 >> 2] = i3; 7392 i4 = i2 + 28 | 0; 7393 HEAP32[i4 >> 2] = 7; 7394 if ((i2 + 32 | 0) >>> 0 < i10 >>> 0) { 7395 while (1) { 7396 i3 = i4 + 4 | 0; 7397 HEAP32[i3 >> 2] = 7; 7398 if ((i4 + 8 | 0) >>> 0 < i10 >>> 0) { 7399 i4 = i3; 7400 } else { 7401 break; 7402 } 7403 } 7404 } 7405 if ((i2 | 0) != (i15 | 0)) { 7406 i2 = i2 - i15 | 0; 7407 i3 = i15 + (i2 + 4) | 0; 7408 HEAP32[i3 >> 2] = HEAP32[i3 >> 2] & -2; 7409 HEAP32[i15 + 4 >> 2] = i2 | 1; 7410 HEAP32[i15 + i2 >> 2] = i2; 7411 i3 = i2 >>> 3; 7412 if (i2 >>> 0 < 256) { 7413 i4 = i3 << 1; 7414 i2 = 7200 + (i4 << 2) | 0; 7415 i5 = HEAP32[1790] | 0; 7416 i3 = 1 << i3; 7417 if ((i5 & i3 | 0) != 0) { 7418 i4 = 7200 + (i4 + 2 << 2) | 0; 7419 i3 = HEAP32[i4 >> 2] | 0; 7420 if (i3 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7421 _abort(); 7422 } else { 7423 i7 = i4; 7424 i8 = i3; 7425 } 7426 } else { 7427 HEAP32[1790] = i5 | i3; 7428 i7 = 7200 + (i4 + 2 << 2) | 0; 7429 i8 = i2; 7430 } 7431 HEAP32[i7 >> 2] = i15; 7432 HEAP32[i8 + 12 >> 2] = i15; 7433 HEAP32[i15 + 8 >> 2] = i8; 7434 HEAP32[i15 + 12 >> 2] = i2; 7435 break; 7436 } 7437 i3 = i2 >>> 8; 7438 if ((i3 | 0) != 0) { 7439 if (i2 >>> 0 > 16777215) { 7440 i3 = 31; 7441 } else { 7442 i31 = (i3 + 1048320 | 0) >>> 16 & 8; 7443 i32 = i3 << i31; 7444 i30 = (i32 + 520192 | 0) >>> 16 & 4; 7445 i32 = i32 << i30; 7446 i3 = (i32 + 245760 | 0) >>> 16 & 2; 7447 i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0; 7448 i3 = i2 >>> (i3 + 7 | 0) & 1 | i3 << 1; 7449 } 7450 } else { 7451 i3 = 0; 7452 } 7453 i7 = 7464 + (i3 << 2) | 0; 7454 HEAP32[i15 + 28 >> 2] = i3; 7455 HEAP32[i15 + 20 >> 2] = 0; 7456 HEAP32[i15 + 16 >> 2] = 0; 7457 i4 = HEAP32[7164 >> 2] | 0; 7458 i5 = 1 << i3; 7459 if ((i4 & i5 | 0) == 0) { 7460 HEAP32[7164 >> 2] = i4 | i5; 7461 HEAP32[i7 >> 2] = i15; 7462 HEAP32[i15 + 24 >> 2] = i7; 7463 HEAP32[i15 + 12 >> 2] = i15; 7464 HEAP32[i15 + 8 >> 2] = i15; 7465 break; 7466 } 7467 i4 = HEAP32[i7 >> 2] | 0; 7468 if ((i3 | 0) == 31) { 7469 i3 = 0; 7470 } else { 7471 i3 = 25 - (i3 >>> 1) | 0; 7472 } 7473 L499 : do { 7474 if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i2 | 0)) { 7475 i3 = i2 << i3; 7476 while (1) { 7477 i7 = i4 + (i3 >>> 31 << 2) + 16 | 0; 7478 i5 = HEAP32[i7 >> 2] | 0; 7479 if ((i5 | 0) == 0) { 7480 break; 7481 } 7482 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i2 | 0)) { 7483 i6 = i5; 7484 break L499; 7485 } else { 7486 i3 = i3 << 1; 7487 i4 = i5; 7488 } 7489 } 7490 if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 7491 _abort(); 7492 } else { 7493 HEAP32[i7 >> 2] = i15; 7494 HEAP32[i15 + 24 >> 2] = i4; 7495 HEAP32[i15 + 12 >> 2] = i15; 7496 HEAP32[i15 + 8 >> 2] = i15; 7497 break L311; 7498 } 7499 } else { 7500 i6 = i4; 7501 } 7502 } while (0); 7503 i4 = i6 + 8 | 0; 7504 i3 = HEAP32[i4 >> 2] | 0; 7505 i2 = HEAP32[7176 >> 2] | 0; 7506 if (i6 >>> 0 < i2 >>> 0) { 7507 _abort(); 7508 } 7509 if (i3 >>> 0 < i2 >>> 0) { 7510 _abort(); 7511 } else { 7512 HEAP32[i3 + 12 >> 2] = i15; 7513 HEAP32[i4 >> 2] = i15; 7514 HEAP32[i15 + 8 >> 2] = i3; 7515 HEAP32[i15 + 12 >> 2] = i6; 7516 HEAP32[i15 + 24 >> 2] = 0; 7517 break; 7518 } 7519 } 7520 } else { 7521 i32 = HEAP32[7176 >> 2] | 0; 7522 if ((i32 | 0) == 0 | i17 >>> 0 < i32 >>> 0) { 7523 HEAP32[7176 >> 2] = i17; 7524 } 7525 HEAP32[7608 >> 2] = i17; 7526 HEAP32[7612 >> 2] = i14; 7527 HEAP32[7620 >> 2] = 0; 7528 HEAP32[7196 >> 2] = HEAP32[1908]; 7529 HEAP32[7192 >> 2] = -1; 7530 i2 = 0; 7531 do { 7532 i32 = i2 << 1; 7533 i31 = 7200 + (i32 << 2) | 0; 7534 HEAP32[7200 + (i32 + 3 << 2) >> 2] = i31; 7535 HEAP32[7200 + (i32 + 2 << 2) >> 2] = i31; 7536 i2 = i2 + 1 | 0; 7537 } while ((i2 | 0) != 32); 7538 i2 = i17 + 8 | 0; 7539 if ((i2 & 7 | 0) == 0) { 7540 i2 = 0; 7541 } else { 7542 i2 = 0 - i2 & 7; 7543 } 7544 i32 = i14 + -40 - i2 | 0; 7545 HEAP32[7184 >> 2] = i17 + i2; 7546 HEAP32[7172 >> 2] = i32; 7547 HEAP32[i17 + (i2 + 4) >> 2] = i32 | 1; 7548 HEAP32[i17 + (i14 + -36) >> 2] = 40; 7549 HEAP32[7188 >> 2] = HEAP32[7648 >> 2]; 7550 } 7551 } while (0); 7552 i2 = HEAP32[7172 >> 2] | 0; 7553 if (i2 >>> 0 > i12 >>> 0) { 7554 i31 = i2 - i12 | 0; 7555 HEAP32[7172 >> 2] = i31; 7556 i32 = HEAP32[7184 >> 2] | 0; 7557 HEAP32[7184 >> 2] = i32 + i12; 7558 HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1; 7559 HEAP32[i32 + 4 >> 2] = i12 | 3; 7560 i32 = i32 + 8 | 0; 7561 STACKTOP = i1; 7562 return i32 | 0; 7563 } 7564 } 7565 HEAP32[(___errno_location() | 0) >> 2] = 12; 7566 i32 = 0; 7567 STACKTOP = i1; 7568 return i32 | 0; 7569 } 7570 function __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS7_(i12, i2, i16, i5, i8, i6) { 7571 i12 = i12 | 0; 7572 i2 = i2 | 0; 7573 i16 = i16 | 0; 7574 i5 = i5 | 0; 7575 i8 = i8 | 0; 7576 i6 = i6 | 0; 7577 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; 7578 i1 = STACKTOP; 7579 STACKTOP = STACKTOP + 144 | 0; 7580 i18 = i1 + 128 | 0; 7581 i11 = i1 + 24 | 0; 7582 i9 = i1 + 72 | 0; 7583 i10 = i1 + 48 | 0; 7584 i3 = i1; 7585 i4 = i12 + 132 | 0; 7586 d28 = +HEAPF32[i5 + 12 >> 2]; 7587 d37 = +HEAPF32[i6 + 8 >> 2]; 7588 d23 = +HEAPF32[i5 + 8 >> 2]; 7589 d27 = +HEAPF32[i6 + 12 >> 2]; 7590 d22 = d28 * d37 - d23 * d27; 7591 d27 = d37 * d23 + d28 * d27; 7592 d37 = +d22; 7593 d26 = +d27; 7594 d25 = +HEAPF32[i6 >> 2] - +HEAPF32[i5 >> 2]; 7595 d36 = +HEAPF32[i6 + 4 >> 2] - +HEAPF32[i5 + 4 >> 2]; 7596 d24 = d28 * d25 + d23 * d36; 7597 d25 = d28 * d36 - d23 * d25; 7598 d23 = +d24; 7599 d36 = +d25; 7600 i5 = i4; 7601 HEAPF32[i5 >> 2] = d23; 7602 HEAPF32[i5 + 4 >> 2] = d36; 7603 i5 = i12 + 140 | 0; 7604 HEAPF32[i5 >> 2] = d37; 7605 HEAPF32[i5 + 4 >> 2] = d26; 7606 i5 = i12 + 144 | 0; 7607 d26 = +HEAPF32[i8 + 12 >> 2]; 7608 i7 = i12 + 140 | 0; 7609 d37 = +HEAPF32[i8 + 16 >> 2]; 7610 d24 = d24 + (d27 * d26 - d22 * d37); 7611 i6 = i12 + 136 | 0; 7612 d25 = d26 * d22 + d27 * d37 + d25; 7613 d37 = +d24; 7614 d27 = +d25; 7615 i34 = i12 + 148 | 0; 7616 HEAPF32[i34 >> 2] = d37; 7617 HEAPF32[i34 + 4 >> 2] = d27; 7618 i34 = i16 + 28 | 0; 7619 i29 = HEAP32[i34 >> 2] | 0; 7620 i34 = HEAP32[i34 + 4 >> 2] | 0; 7621 i14 = i12 + 156 | 0; 7622 HEAP32[i14 >> 2] = i29; 7623 HEAP32[i14 + 4 >> 2] = i34; 7624 i14 = i12 + 164 | 0; 7625 i17 = i16 + 12 | 0; 7626 i40 = HEAP32[i17 >> 2] | 0; 7627 i17 = HEAP32[i17 + 4 >> 2] | 0; 7628 i13 = i14; 7629 HEAP32[i13 >> 2] = i40; 7630 HEAP32[i13 + 4 >> 2] = i17; 7631 i13 = i12 + 172 | 0; 7632 i20 = i16 + 20 | 0; 7633 i41 = HEAP32[i20 >> 2] | 0; 7634 i20 = HEAP32[i20 + 4 >> 2] | 0; 7635 i38 = i13; 7636 HEAP32[i38 >> 2] = i41; 7637 HEAP32[i38 + 4 >> 2] = i20; 7638 i38 = i16 + 36 | 0; 7639 i35 = HEAP32[i38 >> 2] | 0; 7640 i38 = HEAP32[i38 + 4 >> 2] | 0; 7641 i19 = i12 + 180 | 0; 7642 HEAP32[i19 >> 2] = i35; 7643 HEAP32[i19 + 4 >> 2] = i38; 7644 i19 = (HEAP8[i16 + 44 | 0] | 0) != 0; 7645 i21 = (HEAP8[i16 + 45 | 0] | 0) != 0; 7646 d27 = (HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]); 7647 d37 = (HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]); 7648 d22 = d27 - d37; 7649 d26 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]); 7650 i20 = i12 + 168 | 0; 7651 d36 = (HEAP32[tempDoublePtr >> 2] = i17, +HEAPF32[tempDoublePtr >> 2]); 7652 d23 = d26 - d36; 7653 d28 = +Math_sqrt(+(d22 * d22 + d23 * d23)); 7654 d33 = (HEAP32[tempDoublePtr >> 2] = i29, +HEAPF32[tempDoublePtr >> 2]); 7655 d32 = (HEAP32[tempDoublePtr >> 2] = i34, +HEAPF32[tempDoublePtr >> 2]); 7656 d31 = (HEAP32[tempDoublePtr >> 2] = i35, +HEAPF32[tempDoublePtr >> 2]); 7657 d30 = (HEAP32[tempDoublePtr >> 2] = i38, +HEAPF32[tempDoublePtr >> 2]); 7658 if (!(d28 < 1.1920928955078125e-7)) { 7659 d39 = 1.0 / d28; 7660 d22 = d22 * d39; 7661 d23 = d23 * d39; 7662 } 7663 i16 = i12 + 196 | 0; 7664 d28 = -d22; 7665 HEAPF32[i16 >> 2] = d23; 7666 i17 = i12 + 200 | 0; 7667 HEAPF32[i17 >> 2] = d28; 7668 d28 = (d24 - d37) * d23 + (d25 - d36) * d28; 7669 if (i19) { 7670 d37 = d37 - d33; 7671 d36 = d36 - d32; 7672 d39 = +Math_sqrt(+(d37 * d37 + d36 * d36)); 7673 if (!(d39 < 1.1920928955078125e-7)) { 7674 d39 = 1.0 / d39; 7675 d37 = d37 * d39; 7676 d36 = d36 * d39; 7677 } 7678 d39 = -d37; 7679 HEAPF32[i12 + 188 >> 2] = d36; 7680 HEAPF32[i12 + 192 >> 2] = d39; 7681 i29 = d23 * d37 - d22 * d36 >= 0.0; 7682 d32 = (d24 - d33) * d36 + (d25 - d32) * d39; 7683 } else { 7684 i29 = 0; 7685 d32 = 0.0; 7686 } 7687 L10 : do { 7688 if (!i21) { 7689 if (!i19) { 7690 i41 = d28 >= 0.0; 7691 HEAP8[i12 + 248 | 0] = i41 & 1; 7692 i19 = i12 + 212 | 0; 7693 if (i41) { 7694 i15 = 64; 7695 break; 7696 } else { 7697 i15 = 65; 7698 break; 7699 } 7700 } 7701 i19 = d32 >= 0.0; 7702 if (i29) { 7703 if (!i19) { 7704 i41 = d28 >= 0.0; 7705 HEAP8[i12 + 248 | 0] = i41 & 1; 7706 i19 = i12 + 212 | 0; 7707 if (!i41) { 7708 d37 = +-d23; 7709 d39 = +d22; 7710 i38 = i19; 7711 HEAPF32[i38 >> 2] = d37; 7712 HEAPF32[i38 + 4 >> 2] = d39; 7713 i38 = i16; 7714 i40 = HEAP32[i38 >> 2] | 0; 7715 i38 = HEAP32[i38 + 4 >> 2] | 0; 7716 i41 = i12 + 228 | 0; 7717 HEAP32[i41 >> 2] = i40; 7718 HEAP32[i41 + 4 >> 2] = i38; 7719 i41 = i12 + 236 | 0; 7720 HEAPF32[i41 >> 2] = -(HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]); 7721 HEAPF32[i41 + 4 >> 2] = d39; 7722 break; 7723 } 7724 } else { 7725 HEAP8[i12 + 248 | 0] = 1; 7726 i19 = i12 + 212 | 0; 7727 } 7728 i41 = i16; 7729 i40 = HEAP32[i41 + 4 >> 2] | 0; 7730 i38 = i19; 7731 HEAP32[i38 >> 2] = HEAP32[i41 >> 2]; 7732 HEAP32[i38 + 4 >> 2] = i40; 7733 i38 = i12 + 188 | 0; 7734 i40 = HEAP32[i38 + 4 >> 2] | 0; 7735 i41 = i12 + 228 | 0; 7736 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 7737 HEAP32[i41 + 4 >> 2] = i40; 7738 d37 = +-+HEAPF32[i16 >> 2]; 7739 d39 = +-+HEAPF32[i17 >> 2]; 7740 i41 = i12 + 236 | 0; 7741 HEAPF32[i41 >> 2] = d37; 7742 HEAPF32[i41 + 4 >> 2] = d39; 7743 break; 7744 } else { 7745 if (i19) { 7746 i41 = d28 >= 0.0; 7747 HEAP8[i12 + 248 | 0] = i41 & 1; 7748 i19 = i12 + 212 | 0; 7749 if (i41) { 7750 i38 = i16; 7751 i41 = HEAP32[i38 >> 2] | 0; 7752 i38 = HEAP32[i38 + 4 >> 2] | 0; 7753 i40 = i19; 7754 HEAP32[i40 >> 2] = i41; 7755 HEAP32[i40 + 4 >> 2] = i38; 7756 i40 = i12 + 228 | 0; 7757 HEAP32[i40 >> 2] = i41; 7758 HEAP32[i40 + 4 >> 2] = i38; 7759 d37 = +-(HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]); 7760 d39 = +d22; 7761 i41 = i12 + 236 | 0; 7762 HEAPF32[i41 >> 2] = d37; 7763 HEAPF32[i41 + 4 >> 2] = d39; 7764 break; 7765 } 7766 } else { 7767 HEAP8[i12 + 248 | 0] = 0; 7768 i19 = i12 + 212 | 0; 7769 } 7770 d39 = +-d23; 7771 d37 = +d22; 7772 i38 = i19; 7773 HEAPF32[i38 >> 2] = d39; 7774 HEAPF32[i38 + 4 >> 2] = d37; 7775 i38 = i16; 7776 i40 = HEAP32[i38 + 4 >> 2] | 0; 7777 i41 = i12 + 228 | 0; 7778 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 7779 HEAP32[i41 + 4 >> 2] = i40; 7780 d37 = +-+HEAPF32[i12 + 188 >> 2]; 7781 d39 = +-+HEAPF32[i12 + 192 >> 2]; 7782 i41 = i12 + 236 | 0; 7783 HEAPF32[i41 >> 2] = d37; 7784 HEAPF32[i41 + 4 >> 2] = d39; 7785 break; 7786 } 7787 } else { 7788 d33 = d31 - d27; 7789 d31 = d30 - d26; 7790 d30 = +Math_sqrt(+(d33 * d33 + d31 * d31)); 7791 if (d30 < 1.1920928955078125e-7) { 7792 d30 = d33; 7793 } else { 7794 d39 = 1.0 / d30; 7795 d30 = d33 * d39; 7796 d31 = d31 * d39; 7797 } 7798 d39 = -d30; 7799 i34 = i12 + 204 | 0; 7800 HEAPF32[i34 >> 2] = d31; 7801 i35 = i12 + 208 | 0; 7802 HEAPF32[i35 >> 2] = d39; 7803 i38 = d22 * d31 - d23 * d30 > 0.0; 7804 d24 = (d24 - d27) * d31 + (d25 - d26) * d39; 7805 if (!i19) { 7806 i19 = d28 >= 0.0; 7807 if (!i21) { 7808 HEAP8[i12 + 248 | 0] = i19 & 1; 7809 i15 = i12 + 212 | 0; 7810 if (i19) { 7811 i19 = i15; 7812 i15 = 64; 7813 break; 7814 } else { 7815 i19 = i15; 7816 i15 = 65; 7817 break; 7818 } 7819 } 7820 if (i38) { 7821 if (!i19) { 7822 i41 = d24 >= 0.0; 7823 HEAP8[i12 + 248 | 0] = i41 & 1; 7824 i19 = i12 + 212 | 0; 7825 if (!i41) { 7826 d37 = +-d23; 7827 d39 = +d22; 7828 i38 = i19; 7829 HEAPF32[i38 >> 2] = d37; 7830 HEAPF32[i38 + 4 >> 2] = d39; 7831 i38 = i12 + 228 | 0; 7832 HEAPF32[i38 >> 2] = d37; 7833 HEAPF32[i38 + 4 >> 2] = d39; 7834 i38 = i16; 7835 i40 = HEAP32[i38 + 4 >> 2] | 0; 7836 i41 = i12 + 236 | 0; 7837 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 7838 HEAP32[i41 + 4 >> 2] = i40; 7839 break; 7840 } 7841 } else { 7842 HEAP8[i12 + 248 | 0] = 1; 7843 i19 = i12 + 212 | 0; 7844 } 7845 i41 = i16; 7846 i40 = HEAP32[i41 + 4 >> 2] | 0; 7847 i38 = i19; 7848 HEAP32[i38 >> 2] = HEAP32[i41 >> 2]; 7849 HEAP32[i38 + 4 >> 2] = i40; 7850 d37 = +-+HEAPF32[i16 >> 2]; 7851 d39 = +-+HEAPF32[i17 >> 2]; 7852 i38 = i12 + 228 | 0; 7853 HEAPF32[i38 >> 2] = d37; 7854 HEAPF32[i38 + 4 >> 2] = d39; 7855 i38 = i12 + 204 | 0; 7856 i40 = HEAP32[i38 + 4 >> 2] | 0; 7857 i41 = i12 + 236 | 0; 7858 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 7859 HEAP32[i41 + 4 >> 2] = i40; 7860 break; 7861 } else { 7862 if (i19) { 7863 i41 = d24 >= 0.0; 7864 HEAP8[i12 + 248 | 0] = i41 & 1; 7865 i19 = i12 + 212 | 0; 7866 if (i41) { 7867 i40 = i16; 7868 i38 = HEAP32[i40 >> 2] | 0; 7869 i40 = HEAP32[i40 + 4 >> 2] | 0; 7870 i41 = i19; 7871 HEAP32[i41 >> 2] = i38; 7872 HEAP32[i41 + 4 >> 2] = i40; 7873 d37 = +-(HEAP32[tempDoublePtr >> 2] = i38, +HEAPF32[tempDoublePtr >> 2]); 7874 d39 = +d22; 7875 i41 = i12 + 228 | 0; 7876 HEAPF32[i41 >> 2] = d37; 7877 HEAPF32[i41 + 4 >> 2] = d39; 7878 i41 = i12 + 236 | 0; 7879 HEAP32[i41 >> 2] = i38; 7880 HEAP32[i41 + 4 >> 2] = i40; 7881 break; 7882 } 7883 } else { 7884 HEAP8[i12 + 248 | 0] = 0; 7885 i19 = i12 + 212 | 0; 7886 } 7887 d39 = +-d23; 7888 d37 = +d22; 7889 i38 = i19; 7890 HEAPF32[i38 >> 2] = d39; 7891 HEAPF32[i38 + 4 >> 2] = d37; 7892 d37 = +-+HEAPF32[i12 + 204 >> 2]; 7893 d39 = +-+HEAPF32[i12 + 208 >> 2]; 7894 i38 = i12 + 228 | 0; 7895 HEAPF32[i38 >> 2] = d37; 7896 HEAPF32[i38 + 4 >> 2] = d39; 7897 i38 = i16; 7898 i40 = HEAP32[i38 + 4 >> 2] | 0; 7899 i41 = i12 + 236 | 0; 7900 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 7901 HEAP32[i41 + 4 >> 2] = i40; 7902 break; 7903 } 7904 } 7905 if (i29 & i38) { 7906 if (!(d32 >= 0.0) & !(d28 >= 0.0)) { 7907 i41 = d24 >= 0.0; 7908 HEAP8[i12 + 248 | 0] = i41 & 1; 7909 i19 = i12 + 212 | 0; 7910 if (!i41) { 7911 d37 = +-d23; 7912 d39 = +d22; 7913 i41 = i19; 7914 HEAPF32[i41 >> 2] = d37; 7915 HEAPF32[i41 + 4 >> 2] = d39; 7916 i41 = i12 + 228 | 0; 7917 HEAPF32[i41 >> 2] = d37; 7918 HEAPF32[i41 + 4 >> 2] = d39; 7919 i41 = i12 + 236 | 0; 7920 HEAPF32[i41 >> 2] = d37; 7921 HEAPF32[i41 + 4 >> 2] = d39; 7922 break; 7923 } 7924 } else { 7925 HEAP8[i12 + 248 | 0] = 1; 7926 i19 = i12 + 212 | 0; 7927 } 7928 i38 = i16; 7929 i40 = HEAP32[i38 + 4 >> 2] | 0; 7930 i41 = i19; 7931 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 7932 HEAP32[i41 + 4 >> 2] = i40; 7933 i41 = i12 + 188 | 0; 7934 i40 = HEAP32[i41 + 4 >> 2] | 0; 7935 i38 = i12 + 228 | 0; 7936 HEAP32[i38 >> 2] = HEAP32[i41 >> 2]; 7937 HEAP32[i38 + 4 >> 2] = i40; 7938 i38 = i12 + 204 | 0; 7939 i40 = HEAP32[i38 + 4 >> 2] | 0; 7940 i41 = i12 + 236 | 0; 7941 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 7942 HEAP32[i41 + 4 >> 2] = i40; 7943 break; 7944 } 7945 if (i29) { 7946 do { 7947 if (!(d32 >= 0.0)) { 7948 if (d28 >= 0.0) { 7949 i41 = d24 >= 0.0; 7950 HEAP8[i12 + 248 | 0] = i41 & 1; 7951 i19 = i12 + 212 | 0; 7952 if (i41) { 7953 break; 7954 } 7955 } else { 7956 HEAP8[i12 + 248 | 0] = 0; 7957 i19 = i12 + 212 | 0; 7958 } 7959 d37 = +-d23; 7960 d39 = +d22; 7961 i41 = i19; 7962 HEAPF32[i41 >> 2] = d37; 7963 HEAPF32[i41 + 4 >> 2] = d39; 7964 d39 = +-+HEAPF32[i34 >> 2]; 7965 d37 = +-+HEAPF32[i35 >> 2]; 7966 i41 = i12 + 228 | 0; 7967 HEAPF32[i41 >> 2] = d39; 7968 HEAPF32[i41 + 4 >> 2] = d37; 7969 d37 = +-+HEAPF32[i16 >> 2]; 7970 d39 = +-+HEAPF32[i17 >> 2]; 7971 i41 = i12 + 236 | 0; 7972 HEAPF32[i41 >> 2] = d37; 7973 HEAPF32[i41 + 4 >> 2] = d39; 7974 break L10; 7975 } else { 7976 HEAP8[i12 + 248 | 0] = 1; 7977 i19 = i12 + 212 | 0; 7978 } 7979 } while (0); 7980 i38 = i16; 7981 i40 = HEAP32[i38 + 4 >> 2] | 0; 7982 i41 = i19; 7983 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 7984 HEAP32[i41 + 4 >> 2] = i40; 7985 i41 = i12 + 188 | 0; 7986 i40 = HEAP32[i41 + 4 >> 2] | 0; 7987 i38 = i12 + 228 | 0; 7988 HEAP32[i38 >> 2] = HEAP32[i41 >> 2]; 7989 HEAP32[i38 + 4 >> 2] = i40; 7990 i38 = i16; 7991 i40 = HEAP32[i38 + 4 >> 2] | 0; 7992 i41 = i12 + 236 | 0; 7993 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 7994 HEAP32[i41 + 4 >> 2] = i40; 7995 break; 7996 } 7997 if (!i38) { 7998 if (!(!(d32 >= 0.0) | !(d28 >= 0.0))) { 7999 i41 = d24 >= 0.0; 8000 HEAP8[i12 + 248 | 0] = i41 & 1; 8001 i19 = i12 + 212 | 0; 8002 if (i41) { 8003 i40 = i16; 8004 i38 = HEAP32[i40 >> 2] | 0; 8005 i40 = HEAP32[i40 + 4 >> 2] | 0; 8006 i41 = i19; 8007 HEAP32[i41 >> 2] = i38; 8008 HEAP32[i41 + 4 >> 2] = i40; 8009 i41 = i12 + 228 | 0; 8010 HEAP32[i41 >> 2] = i38; 8011 HEAP32[i41 + 4 >> 2] = i40; 8012 i41 = i12 + 236 | 0; 8013 HEAP32[i41 >> 2] = i38; 8014 HEAP32[i41 + 4 >> 2] = i40; 8015 break; 8016 } 8017 } else { 8018 HEAP8[i12 + 248 | 0] = 0; 8019 i19 = i12 + 212 | 0; 8020 } 8021 d37 = +-d23; 8022 d39 = +d22; 8023 i41 = i19; 8024 HEAPF32[i41 >> 2] = d37; 8025 HEAPF32[i41 + 4 >> 2] = d39; 8026 d39 = +-+HEAPF32[i34 >> 2]; 8027 d37 = +-+HEAPF32[i35 >> 2]; 8028 i41 = i12 + 228 | 0; 8029 HEAPF32[i41 >> 2] = d39; 8030 HEAPF32[i41 + 4 >> 2] = d37; 8031 d37 = +-+HEAPF32[i12 + 188 >> 2]; 8032 d39 = +-+HEAPF32[i12 + 192 >> 2]; 8033 i41 = i12 + 236 | 0; 8034 HEAPF32[i41 >> 2] = d37; 8035 HEAPF32[i41 + 4 >> 2] = d39; 8036 break; 8037 } 8038 do { 8039 if (!(d24 >= 0.0)) { 8040 if (d32 >= 0.0) { 8041 i41 = d28 >= 0.0; 8042 HEAP8[i12 + 248 | 0] = i41 & 1; 8043 i19 = i12 + 212 | 0; 8044 if (i41) { 8045 break; 8046 } 8047 } else { 8048 HEAP8[i12 + 248 | 0] = 0; 8049 i19 = i12 + 212 | 0; 8050 } 8051 d37 = +-d23; 8052 d39 = +d22; 8053 i41 = i19; 8054 HEAPF32[i41 >> 2] = d37; 8055 HEAPF32[i41 + 4 >> 2] = d39; 8056 d39 = +-+HEAPF32[i16 >> 2]; 8057 d37 = +-+HEAPF32[i17 >> 2]; 8058 i41 = i12 + 228 | 0; 8059 HEAPF32[i41 >> 2] = d39; 8060 HEAPF32[i41 + 4 >> 2] = d37; 8061 d37 = +-+HEAPF32[i12 + 188 >> 2]; 8062 d39 = +-+HEAPF32[i12 + 192 >> 2]; 8063 i41 = i12 + 236 | 0; 8064 HEAPF32[i41 >> 2] = d37; 8065 HEAPF32[i41 + 4 >> 2] = d39; 8066 break L10; 8067 } else { 8068 HEAP8[i12 + 248 | 0] = 1; 8069 i19 = i12 + 212 | 0; 8070 } 8071 } while (0); 8072 i38 = i16; 8073 i40 = HEAP32[i38 + 4 >> 2] | 0; 8074 i41 = i19; 8075 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 8076 HEAP32[i41 + 4 >> 2] = i40; 8077 i41 = i16; 8078 i40 = HEAP32[i41 + 4 >> 2] | 0; 8079 i38 = i12 + 228 | 0; 8080 HEAP32[i38 >> 2] = HEAP32[i41 >> 2]; 8081 HEAP32[i38 + 4 >> 2] = i40; 8082 i38 = i12 + 204 | 0; 8083 i40 = HEAP32[i38 + 4 >> 2] | 0; 8084 i41 = i12 + 236 | 0; 8085 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 8086 HEAP32[i41 + 4 >> 2] = i40; 8087 } 8088 } while (0); 8089 if ((i15 | 0) == 64) { 8090 i38 = i16; 8091 i41 = HEAP32[i38 >> 2] | 0; 8092 i38 = HEAP32[i38 + 4 >> 2] | 0; 8093 i40 = i19; 8094 HEAP32[i40 >> 2] = i41; 8095 HEAP32[i40 + 4 >> 2] = i38; 8096 d37 = +-(HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]); 8097 d39 = +d22; 8098 i41 = i12 + 228 | 0; 8099 HEAPF32[i41 >> 2] = d37; 8100 HEAPF32[i41 + 4 >> 2] = d39; 8101 i41 = i12 + 236 | 0; 8102 HEAPF32[i41 >> 2] = d37; 8103 HEAPF32[i41 + 4 >> 2] = d39; 8104 } else if ((i15 | 0) == 65) { 8105 d37 = +-d23; 8106 d39 = +d22; 8107 i40 = i19; 8108 HEAPF32[i40 >> 2] = d37; 8109 HEAPF32[i40 + 4 >> 2] = d39; 8110 i40 = i16; 8111 i38 = HEAP32[i40 >> 2] | 0; 8112 i40 = HEAP32[i40 + 4 >> 2] | 0; 8113 i41 = i12 + 228 | 0; 8114 HEAP32[i41 >> 2] = i38; 8115 HEAP32[i41 + 4 >> 2] = i40; 8116 i41 = i12 + 236 | 0; 8117 HEAP32[i41 >> 2] = i38; 8118 HEAP32[i41 + 4 >> 2] = i40; 8119 } 8120 i21 = i8 + 148 | 0; 8121 i34 = i12 + 128 | 0; 8122 HEAP32[i34 >> 2] = HEAP32[i21 >> 2]; 8123 if ((HEAP32[i21 >> 2] | 0) > 0) { 8124 i19 = 0; 8125 do { 8126 d33 = +HEAPF32[i5 >> 2]; 8127 d37 = +HEAPF32[i8 + (i19 << 3) + 20 >> 2]; 8128 d39 = +HEAPF32[i7 >> 2]; 8129 d36 = +HEAPF32[i8 + (i19 << 3) + 24 >> 2]; 8130 d32 = +(+HEAPF32[i4 >> 2] + (d33 * d37 - d39 * d36)); 8131 d36 = +(d37 * d39 + d33 * d36 + +HEAPF32[i6 >> 2]); 8132 i41 = i12 + (i19 << 3) | 0; 8133 HEAPF32[i41 >> 2] = d32; 8134 HEAPF32[i41 + 4 >> 2] = d36; 8135 d36 = +HEAPF32[i5 >> 2]; 8136 d32 = +HEAPF32[i8 + (i19 << 3) + 84 >> 2]; 8137 d33 = +HEAPF32[i7 >> 2]; 8138 d39 = +HEAPF32[i8 + (i19 << 3) + 88 >> 2]; 8139 d37 = +(d36 * d32 - d33 * d39); 8140 d39 = +(d32 * d33 + d36 * d39); 8141 i41 = i12 + (i19 << 3) + 64 | 0; 8142 HEAPF32[i41 >> 2] = d37; 8143 HEAPF32[i41 + 4 >> 2] = d39; 8144 i19 = i19 + 1 | 0; 8145 } while ((i19 | 0) < (HEAP32[i21 >> 2] | 0)); 8146 } 8147 i21 = i12 + 244 | 0; 8148 HEAPF32[i21 >> 2] = .019999999552965164; 8149 i19 = i2 + 60 | 0; 8150 HEAP32[i19 >> 2] = 0; 8151 i29 = i12 + 248 | 0; 8152 i35 = HEAP32[i34 >> 2] | 0; 8153 if ((i35 | 0) <= 0) { 8154 STACKTOP = i1; 8155 return; 8156 } 8157 d23 = +HEAPF32[i12 + 164 >> 2]; 8158 d26 = +HEAPF32[i20 >> 2]; 8159 d24 = +HEAPF32[i12 + 212 >> 2]; 8160 d27 = +HEAPF32[i12 + 216 >> 2]; 8161 d22 = 3.4028234663852886e+38; 8162 i20 = 0; 8163 do { 8164 d25 = d24 * (+HEAPF32[i12 + (i20 << 3) >> 2] - d23) + d27 * (+HEAPF32[i12 + (i20 << 3) + 4 >> 2] - d26); 8165 d22 = d25 < d22 ? d25 : d22; 8166 i20 = i20 + 1 | 0; 8167 } while ((i20 | 0) != (i35 | 0)); 8168 if (d22 > .019999999552965164) { 8169 STACKTOP = i1; 8170 return; 8171 } 8172 __ZN12b2EPCollider24ComputePolygonSeparationEv(i18, i12); 8173 i20 = HEAP32[i18 >> 2] | 0; 8174 if ((i20 | 0) != 0) { 8175 d23 = +HEAPF32[i18 + 8 >> 2]; 8176 if (d23 > +HEAPF32[i21 >> 2]) { 8177 STACKTOP = i1; 8178 return; 8179 } 8180 if (d23 > d22 * .9800000190734863 + .0010000000474974513) { 8181 i18 = HEAP32[i18 + 4 >> 2] | 0; 8182 i35 = i2 + 56 | 0; 8183 if ((i20 | 0) == 1) { 8184 i18 = i11; 8185 i15 = 77; 8186 } else { 8187 HEAP32[i35 >> 2] = 2; 8188 i40 = i14; 8189 i41 = HEAP32[i40 + 4 >> 2] | 0; 8190 i38 = i11; 8191 HEAP32[i38 >> 2] = HEAP32[i40 >> 2]; 8192 HEAP32[i38 + 4 >> 2] = i41; 8193 i38 = i11 + 8 | 0; 8194 HEAP8[i38] = 0; 8195 i41 = i18 & 255; 8196 HEAP8[i38 + 1 | 0] = i41; 8197 HEAP8[i38 + 2 | 0] = 0; 8198 HEAP8[i38 + 3 | 0] = 1; 8199 i38 = i13; 8200 i40 = HEAP32[i38 + 4 >> 2] | 0; 8201 i13 = i11 + 12 | 0; 8202 HEAP32[i13 >> 2] = HEAP32[i38 >> 2]; 8203 HEAP32[i13 + 4 >> 2] = i40; 8204 i13 = i11 + 20 | 0; 8205 HEAP8[i13] = 0; 8206 HEAP8[i13 + 1 | 0] = i41; 8207 HEAP8[i13 + 2 | 0] = 0; 8208 HEAP8[i13 + 3 | 0] = 1; 8209 HEAP32[i9 >> 2] = i18; 8210 i13 = i18 + 1 | 0; 8211 i16 = (i13 | 0) < (HEAP32[i34 >> 2] | 0) ? i13 : 0; 8212 HEAP32[i9 + 4 >> 2] = i16; 8213 i17 = i12 + (i18 << 3) | 0; 8214 i13 = HEAP32[i17 >> 2] | 0; 8215 i17 = HEAP32[i17 + 4 >> 2] | 0; 8216 i29 = i9 + 8 | 0; 8217 HEAP32[i29 >> 2] = i13; 8218 HEAP32[i29 + 4 >> 2] = i17; 8219 i16 = i12 + (i16 << 3) | 0; 8220 i29 = HEAP32[i16 >> 2] | 0; 8221 i16 = HEAP32[i16 + 4 >> 2] | 0; 8222 i20 = i9 + 16 | 0; 8223 HEAP32[i20 >> 2] = i29; 8224 HEAP32[i20 + 4 >> 2] = i16; 8225 i20 = i12 + (i18 << 3) + 64 | 0; 8226 i12 = HEAP32[i20 >> 2] | 0; 8227 i20 = HEAP32[i20 + 4 >> 2] | 0; 8228 i14 = i9 + 24 | 0; 8229 HEAP32[i14 >> 2] = i12; 8230 HEAP32[i14 + 4 >> 2] = i20; 8231 i14 = 0; 8232 } 8233 } else { 8234 i15 = 75; 8235 } 8236 } else { 8237 i15 = 75; 8238 } 8239 if ((i15 | 0) == 75) { 8240 i18 = i11; 8241 i35 = i2 + 56 | 0; 8242 i15 = 77; 8243 } 8244 do { 8245 if ((i15 | 0) == 77) { 8246 HEAP32[i35 >> 2] = 1; 8247 i15 = HEAP32[i34 >> 2] | 0; 8248 if ((i15 | 0) > 1) { 8249 d23 = +HEAPF32[i12 + 216 >> 2]; 8250 d22 = +HEAPF32[i12 + 212 >> 2]; 8251 i34 = 0; 8252 d24 = d22 * +HEAPF32[i12 + 64 >> 2] + d23 * +HEAPF32[i12 + 68 >> 2]; 8253 i35 = 1; 8254 while (1) { 8255 d25 = d22 * +HEAPF32[i12 + (i35 << 3) + 64 >> 2] + d23 * +HEAPF32[i12 + (i35 << 3) + 68 >> 2]; 8256 i20 = d25 < d24; 8257 i34 = i20 ? i35 : i34; 8258 i35 = i35 + 1 | 0; 8259 if ((i35 | 0) < (i15 | 0)) { 8260 d24 = i20 ? d25 : d24; 8261 } else { 8262 break; 8263 } 8264 } 8265 } else { 8266 i34 = 0; 8267 } 8268 i20 = i34 + 1 | 0; 8269 i40 = (i20 | 0) < (i15 | 0) ? i20 : 0; 8270 i41 = i12 + (i34 << 3) | 0; 8271 i38 = HEAP32[i41 + 4 >> 2] | 0; 8272 i35 = i11; 8273 HEAP32[i35 >> 2] = HEAP32[i41 >> 2]; 8274 HEAP32[i35 + 4 >> 2] = i38; 8275 i35 = i11 + 8 | 0; 8276 HEAP8[i35] = 0; 8277 HEAP8[i35 + 1 | 0] = i34; 8278 HEAP8[i35 + 2 | 0] = 1; 8279 HEAP8[i35 + 3 | 0] = 0; 8280 i35 = i12 + (i40 << 3) | 0; 8281 i38 = HEAP32[i35 + 4 >> 2] | 0; 8282 i41 = i11 + 12 | 0; 8283 HEAP32[i41 >> 2] = HEAP32[i35 >> 2]; 8284 HEAP32[i41 + 4 >> 2] = i38; 8285 i41 = i11 + 20 | 0; 8286 HEAP8[i41] = 0; 8287 HEAP8[i41 + 1 | 0] = i40; 8288 HEAP8[i41 + 2 | 0] = 1; 8289 HEAP8[i41 + 3 | 0] = 0; 8290 if ((HEAP8[i29] | 0) == 0) { 8291 HEAP32[i9 >> 2] = 1; 8292 HEAP32[i9 + 4 >> 2] = 0; 8293 i11 = i13; 8294 i13 = HEAP32[i11 >> 2] | 0; 8295 i11 = HEAP32[i11 + 4 >> 2] | 0; 8296 i29 = i9 + 8 | 0; 8297 HEAP32[i29 >> 2] = i13; 8298 HEAP32[i29 + 4 >> 2] = i11; 8299 i29 = HEAP32[i14 >> 2] | 0; 8300 i14 = HEAP32[i14 + 4 >> 2] | 0; 8301 i12 = i9 + 16 | 0; 8302 HEAP32[i12 >> 2] = i29; 8303 HEAP32[i12 + 4 >> 2] = i14; 8304 i12 = (HEAPF32[tempDoublePtr >> 2] = -+HEAPF32[i16 >> 2], HEAP32[tempDoublePtr >> 2] | 0); 8305 i20 = (HEAPF32[tempDoublePtr >> 2] = -+HEAPF32[i17 >> 2], HEAP32[tempDoublePtr >> 2] | 0); 8306 i16 = i9 + 24 | 0; 8307 HEAP32[i16 >> 2] = i12; 8308 HEAP32[i16 + 4 >> 2] = i20; 8309 i16 = i14; 8310 i17 = i11; 8311 i11 = i18; 8312 i18 = 1; 8313 i14 = 1; 8314 break; 8315 } else { 8316 HEAP32[i9 >> 2] = 0; 8317 HEAP32[i9 + 4 >> 2] = 1; 8318 i17 = i14; 8319 i11 = HEAP32[i17 >> 2] | 0; 8320 i17 = HEAP32[i17 + 4 >> 2] | 0; 8321 i29 = i9 + 8 | 0; 8322 HEAP32[i29 >> 2] = i11; 8323 HEAP32[i29 + 4 >> 2] = i17; 8324 i29 = HEAP32[i13 >> 2] | 0; 8325 i13 = HEAP32[i13 + 4 >> 2] | 0; 8326 i20 = i9 + 16 | 0; 8327 HEAP32[i20 >> 2] = i29; 8328 HEAP32[i20 + 4 >> 2] = i13; 8329 i20 = i16; 8330 i12 = HEAP32[i20 >> 2] | 0; 8331 i20 = HEAP32[i20 + 4 >> 2] | 0; 8332 i16 = i9 + 24 | 0; 8333 HEAP32[i16 >> 2] = i12; 8334 HEAP32[i16 + 4 >> 2] = i20; 8335 i16 = i13; 8336 i13 = i11; 8337 i11 = i18; 8338 i18 = 0; 8339 i14 = 1; 8340 break; 8341 } 8342 } 8343 } while (0); 8344 d30 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]); 8345 d39 = (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]); 8346 d31 = (HEAP32[tempDoublePtr >> 2] = i13, +HEAPF32[tempDoublePtr >> 2]); 8347 d32 = (HEAP32[tempDoublePtr >> 2] = i17, +HEAPF32[tempDoublePtr >> 2]); 8348 d33 = (HEAP32[tempDoublePtr >> 2] = i29, +HEAPF32[tempDoublePtr >> 2]); 8349 d37 = (HEAP32[tempDoublePtr >> 2] = i16, +HEAPF32[tempDoublePtr >> 2]); 8350 i41 = i9 + 32 | 0; 8351 i16 = i9 + 24 | 0; 8352 i13 = i9 + 28 | 0; 8353 d39 = -d39; 8354 HEAPF32[i41 >> 2] = d30; 8355 HEAPF32[i9 + 36 >> 2] = d39; 8356 i20 = i9 + 44 | 0; 8357 d36 = -d30; 8358 i17 = i20; 8359 HEAPF32[i17 >> 2] = d36; 8360 HEAP32[i17 + 4 >> 2] = i12; 8361 i17 = i9 + 8 | 0; 8362 i15 = i9 + 12 | 0; 8363 d39 = d30 * d31 + d32 * d39; 8364 HEAPF32[i9 + 40 >> 2] = d39; 8365 i29 = i9 + 52 | 0; 8366 HEAPF32[i29 >> 2] = d33 * d36 + (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]) * d37; 8367 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i10, i11, i41, d39, i18) | 0) < 2) { 8368 STACKTOP = i1; 8369 return; 8370 } 8371 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i3, i10, i20, +HEAPF32[i29 >> 2], HEAP32[i9 + 4 >> 2] | 0) | 0) < 2) { 8372 STACKTOP = i1; 8373 return; 8374 } 8375 i10 = i2 + 40 | 0; 8376 if (i14) { 8377 i40 = i16; 8378 i41 = HEAP32[i40 >> 2] | 0; 8379 i40 = HEAP32[i40 + 4 >> 2] | 0; 8380 i35 = i10; 8381 HEAP32[i35 >> 2] = i41; 8382 HEAP32[i35 + 4 >> 2] = i40; 8383 i35 = i17; 8384 i40 = HEAP32[i35 >> 2] | 0; 8385 i35 = HEAP32[i35 + 4 >> 2] | 0; 8386 i38 = i2 + 48 | 0; 8387 HEAP32[i38 >> 2] = i40; 8388 HEAP32[i38 + 4 >> 2] = i35; 8389 d23 = (HEAP32[tempDoublePtr >> 2] = i40, +HEAPF32[tempDoublePtr >> 2]); 8390 d22 = (HEAP32[tempDoublePtr >> 2] = i41, +HEAPF32[tempDoublePtr >> 2]); 8391 d24 = +HEAPF32[i15 >> 2]; 8392 d25 = +HEAPF32[i13 >> 2]; 8393 d28 = +HEAPF32[i3 >> 2]; 8394 d27 = +HEAPF32[i3 + 4 >> 2]; 8395 d26 = +HEAPF32[i21 >> 2]; 8396 if (!((d28 - d23) * d22 + (d27 - d24) * d25 <= d26)) { 8397 d28 = d26; 8398 i8 = 0; 8399 } else { 8400 d37 = d28 - +HEAPF32[i4 >> 2]; 8401 d36 = d27 - +HEAPF32[i6 >> 2]; 8402 d33 = +HEAPF32[i5 >> 2]; 8403 d28 = +HEAPF32[i7 >> 2]; 8404 d39 = +(d37 * d33 + d36 * d28); 8405 d28 = +(d33 * d36 - d37 * d28); 8406 i8 = i2; 8407 HEAPF32[i8 >> 2] = d39; 8408 HEAPF32[i8 + 4 >> 2] = d28; 8409 HEAP32[i2 + 16 >> 2] = HEAP32[i3 + 8 >> 2]; 8410 d28 = +HEAPF32[i21 >> 2]; 8411 i8 = 1; 8412 } 8413 d26 = +HEAPF32[i3 + 12 >> 2]; 8414 d27 = +HEAPF32[i3 + 16 >> 2]; 8415 if ((d26 - d23) * d22 + (d27 - d24) * d25 <= d28) { 8416 d36 = d26 - +HEAPF32[i4 >> 2]; 8417 d33 = d27 - +HEAPF32[i6 >> 2]; 8418 d32 = +HEAPF32[i5 >> 2]; 8419 d39 = +HEAPF32[i7 >> 2]; 8420 d37 = +(d36 * d32 + d33 * d39); 8421 d39 = +(d32 * d33 - d36 * d39); 8422 i41 = i2 + (i8 * 20 | 0) | 0; 8423 HEAPF32[i41 >> 2] = d37; 8424 HEAPF32[i41 + 4 >> 2] = d39; 8425 HEAP32[i2 + (i8 * 20 | 0) + 16 >> 2] = HEAP32[i3 + 20 >> 2]; 8426 i8 = i8 + 1 | 0; 8427 } 8428 } else { 8429 i38 = HEAP32[i9 >> 2] | 0; 8430 i35 = i8 + (i38 << 3) + 84 | 0; 8431 i41 = HEAP32[i35 + 4 >> 2] | 0; 8432 i40 = i10; 8433 HEAP32[i40 >> 2] = HEAP32[i35 >> 2]; 8434 HEAP32[i40 + 4 >> 2] = i41; 8435 i38 = i8 + (i38 << 3) + 20 | 0; 8436 i40 = HEAP32[i38 + 4 >> 2] | 0; 8437 i41 = i2 + 48 | 0; 8438 HEAP32[i41 >> 2] = HEAP32[i38 >> 2]; 8439 HEAP32[i41 + 4 >> 2] = i40; 8440 d22 = +HEAPF32[i17 >> 2]; 8441 d23 = +HEAPF32[i16 >> 2]; 8442 d24 = +HEAPF32[i15 >> 2]; 8443 d25 = +HEAPF32[i13 >> 2]; 8444 d26 = +HEAPF32[i21 >> 2]; 8445 if (!((+HEAPF32[i3 >> 2] - d22) * d23 + (+HEAPF32[i3 + 4 >> 2] - d24) * d25 <= d26)) { 8446 i8 = 0; 8447 } else { 8448 i40 = i3; 8449 i8 = HEAP32[i40 + 4 >> 2] | 0; 8450 i41 = i2; 8451 HEAP32[i41 >> 2] = HEAP32[i40 >> 2]; 8452 HEAP32[i41 + 4 >> 2] = i8; 8453 i41 = i3 + 8 | 0; 8454 i8 = i2 + 16 | 0; 8455 HEAP8[i8 + 2 | 0] = HEAP8[i41 + 3 | 0] | 0; 8456 HEAP8[i8 + 3 | 0] = HEAP8[i41 + 2 | 0] | 0; 8457 HEAP8[i8] = HEAP8[i41 + 1 | 0] | 0; 8458 HEAP8[i8 + 1 | 0] = HEAP8[i41] | 0; 8459 d26 = +HEAPF32[i21 >> 2]; 8460 i8 = 1; 8461 } 8462 i4 = i3 + 12 | 0; 8463 if ((+HEAPF32[i4 >> 2] - d22) * d23 + (+HEAPF32[i3 + 16 >> 2] - d24) * d25 <= d26) { 8464 i38 = i4; 8465 i41 = HEAP32[i38 + 4 >> 2] | 0; 8466 i40 = i2 + (i8 * 20 | 0) | 0; 8467 HEAP32[i40 >> 2] = HEAP32[i38 >> 2]; 8468 HEAP32[i40 + 4 >> 2] = i41; 8469 i40 = i3 + 20 | 0; 8470 i41 = i2 + (i8 * 20 | 0) + 16 | 0; 8471 HEAP8[i41 + 2 | 0] = HEAP8[i40 + 3 | 0] | 0; 8472 HEAP8[i41 + 3 | 0] = HEAP8[i40 + 2 | 0] | 0; 8473 HEAP8[i41] = HEAP8[i40 + 1 | 0] | 0; 8474 HEAP8[i41 + 1 | 0] = HEAP8[i40] | 0; 8475 i8 = i8 + 1 | 0; 8476 } 8477 } 8478 HEAP32[i19 >> 2] = i8; 8479 STACKTOP = i1; 8480 return; 8481 } 8482 function __ZN7b2World8SolveTOIERK10b2TimeStep(i30, i11) { 8483 i30 = i30 | 0; 8484 i11 = i11 | 0; 8485 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; 8486 i1 = STACKTOP; 8487 STACKTOP = STACKTOP + 336 | 0; 8488 i3 = i1 + 284 | 0; 8489 i6 = i1 + 152 | 0; 8490 i5 = i1 + 144 | 0; 8491 i4 = i1 + 108 | 0; 8492 i8 = i1 + 72 | 0; 8493 i7 = i1 + 64 | 0; 8494 i14 = i1 + 24 | 0; 8495 i9 = i1; 8496 i10 = i30 + 102872 | 0; 8497 i13 = i30 + 102944 | 0; 8498 __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i3, 64, 32, 0, i30 + 68 | 0, HEAP32[i13 >> 2] | 0); 8499 i2 = i30 + 102995 | 0; 8500 if ((HEAP8[i2] | 0) != 0) { 8501 i15 = HEAP32[i30 + 102952 >> 2] | 0; 8502 if ((i15 | 0) != 0) { 8503 do { 8504 i66 = i15 + 4 | 0; 8505 HEAP16[i66 >> 1] = HEAP16[i66 >> 1] & 65534; 8506 HEAPF32[i15 + 60 >> 2] = 0.0; 8507 i15 = HEAP32[i15 + 96 >> 2] | 0; 8508 } while ((i15 | 0) != 0); 8509 } 8510 i15 = i30 + 102932 | 0; 8511 i16 = HEAP32[i15 >> 2] | 0; 8512 if ((i16 | 0) != 0) { 8513 do { 8514 i66 = i16 + 4 | 0; 8515 HEAP32[i66 >> 2] = HEAP32[i66 >> 2] & -34; 8516 HEAP32[i16 + 128 >> 2] = 0; 8517 HEAPF32[i16 + 132 >> 2] = 1.0; 8518 i16 = HEAP32[i16 + 12 >> 2] | 0; 8519 } while ((i16 | 0) != 0); 8520 } 8521 } else { 8522 i15 = i30 + 102932 | 0; 8523 } 8524 i25 = i3 + 28 | 0; 8525 i26 = i3 + 36 | 0; 8526 i27 = i3 + 32 | 0; 8527 i28 = i3 + 40 | 0; 8528 i29 = i3 + 8 | 0; 8529 i24 = i3 + 44 | 0; 8530 i23 = i3 + 12 | 0; 8531 i22 = i7 + 4 | 0; 8532 i21 = i9 + 4 | 0; 8533 i20 = i9 + 8 | 0; 8534 i19 = i9 + 16 | 0; 8535 i18 = i11 + 12 | 0; 8536 i17 = i9 + 12 | 0; 8537 i16 = i9 + 20 | 0; 8538 i39 = i30 + 102994 | 0; 8539 i37 = i6 + 16 | 0; 8540 i36 = i6 + 20 | 0; 8541 i35 = i6 + 24 | 0; 8542 i34 = i6 + 44 | 0; 8543 i33 = i6 + 48 | 0; 8544 i32 = i6 + 52 | 0; 8545 i41 = i6 + 28 | 0; 8546 i31 = i6 + 56 | 0; 8547 i40 = i6 + 92 | 0; 8548 i30 = i6 + 128 | 0; 8549 i38 = i5 + 4 | 0; 8550 L11 : while (1) { 8551 i47 = HEAP32[i15 >> 2] | 0; 8552 if ((i47 | 0) == 0) { 8553 i4 = 36; 8554 break; 8555 } else { 8556 d42 = 1.0; 8557 i44 = 0; 8558 } 8559 do { 8560 i48 = i47 + 4 | 0; 8561 i43 = HEAP32[i48 >> 2] | 0; 8562 do { 8563 if ((i43 & 4 | 0) != 0 ? (HEAP32[i47 + 128 >> 2] | 0) <= 8 : 0) { 8564 if ((i43 & 32 | 0) == 0) { 8565 i43 = HEAP32[i47 + 48 >> 2] | 0; 8566 i45 = HEAP32[i47 + 52 >> 2] | 0; 8567 if ((HEAP8[i43 + 38 | 0] | 0) != 0) { 8568 break; 8569 } 8570 if ((HEAP8[i45 + 38 | 0] | 0) != 0) { 8571 break; 8572 } 8573 i46 = HEAP32[i43 + 8 >> 2] | 0; 8574 i50 = HEAP32[i45 + 8 >> 2] | 0; 8575 i53 = HEAP32[i46 >> 2] | 0; 8576 i52 = HEAP32[i50 >> 2] | 0; 8577 if (!((i53 | 0) == 2 | (i52 | 0) == 2)) { 8578 i4 = 16; 8579 break L11; 8580 } 8581 i51 = HEAP16[i46 + 4 >> 1] | 0; 8582 i49 = HEAP16[i50 + 4 >> 1] | 0; 8583 if (!((i51 & 2) != 0 & (i53 | 0) != 0 | (i49 & 2) != 0 & (i52 | 0) != 0)) { 8584 break; 8585 } 8586 if (!((i51 & 8) != 0 | (i53 | 0) != 2 | ((i49 & 8) != 0 | (i52 | 0) != 2))) { 8587 break; 8588 } 8589 i51 = i46 + 28 | 0; 8590 i52 = i46 + 60 | 0; 8591 d68 = +HEAPF32[i52 >> 2]; 8592 i49 = i50 + 28 | 0; 8593 i53 = i50 + 60 | 0; 8594 d67 = +HEAPF32[i53 >> 2]; 8595 if (!(d68 < d67)) { 8596 if (d67 < d68) { 8597 if (!(d67 < 1.0)) { 8598 i4 = 25; 8599 break L11; 8600 } 8601 d67 = (d68 - d67) / (1.0 - d67); 8602 i66 = i50 + 36 | 0; 8603 d69 = 1.0 - d67; 8604 d71 = +(+HEAPF32[i66 >> 2] * d69 + d67 * +HEAPF32[i50 + 44 >> 2]); 8605 d70 = +(d69 * +HEAPF32[i50 + 40 >> 2] + d67 * +HEAPF32[i50 + 48 >> 2]); 8606 HEAPF32[i66 >> 2] = d71; 8607 HEAPF32[i66 + 4 >> 2] = d70; 8608 i66 = i50 + 52 | 0; 8609 HEAPF32[i66 >> 2] = d69 * +HEAPF32[i66 >> 2] + d67 * +HEAPF32[i50 + 56 >> 2]; 8610 HEAPF32[i53 >> 2] = d68; 8611 d67 = d68; 8612 } else { 8613 d67 = d68; 8614 } 8615 } else { 8616 if (!(d68 < 1.0)) { 8617 i4 = 21; 8618 break L11; 8619 } 8620 d71 = (d67 - d68) / (1.0 - d68); 8621 i66 = i46 + 36 | 0; 8622 d70 = 1.0 - d71; 8623 d68 = +(+HEAPF32[i66 >> 2] * d70 + d71 * +HEAPF32[i46 + 44 >> 2]); 8624 d69 = +(d70 * +HEAPF32[i46 + 40 >> 2] + d71 * +HEAPF32[i46 + 48 >> 2]); 8625 HEAPF32[i66 >> 2] = d68; 8626 HEAPF32[i66 + 4 >> 2] = d69; 8627 i66 = i46 + 52 | 0; 8628 HEAPF32[i66 >> 2] = d70 * +HEAPF32[i66 >> 2] + d71 * +HEAPF32[i46 + 56 >> 2]; 8629 HEAPF32[i52 >> 2] = d67; 8630 } 8631 if (!(d67 < 1.0)) { 8632 i4 = 28; 8633 break L11; 8634 } 8635 i66 = HEAP32[i47 + 56 >> 2] | 0; 8636 i46 = HEAP32[i47 + 60 >> 2] | 0; 8637 HEAP32[i37 >> 2] = 0; 8638 HEAP32[i36 >> 2] = 0; 8639 HEAPF32[i35 >> 2] = 0.0; 8640 HEAP32[i34 >> 2] = 0; 8641 HEAP32[i33 >> 2] = 0; 8642 HEAPF32[i32 >> 2] = 0.0; 8643 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i6, HEAP32[i43 + 12 >> 2] | 0, i66); 8644 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i41, HEAP32[i45 + 12 >> 2] | 0, i46); 8645 i43 = i31 + 0 | 0; 8646 i45 = i51 + 0 | 0; 8647 i46 = i43 + 36 | 0; 8648 do { 8649 HEAP32[i43 >> 2] = HEAP32[i45 >> 2]; 8650 i43 = i43 + 4 | 0; 8651 i45 = i45 + 4 | 0; 8652 } while ((i43 | 0) < (i46 | 0)); 8653 i43 = i40 + 0 | 0; 8654 i45 = i49 + 0 | 0; 8655 i46 = i43 + 36 | 0; 8656 do { 8657 HEAP32[i43 >> 2] = HEAP32[i45 >> 2]; 8658 i43 = i43 + 4 | 0; 8659 i45 = i45 + 4 | 0; 8660 } while ((i43 | 0) < (i46 | 0)); 8661 HEAPF32[i30 >> 2] = 1.0; 8662 __Z14b2TimeOfImpactP11b2TOIOutputPK10b2TOIInput(i5, i6); 8663 if ((HEAP32[i5 >> 2] | 0) == 3) { 8664 d67 = d67 + (1.0 - d67) * +HEAPF32[i38 >> 2]; 8665 d67 = d67 < 1.0 ? d67 : 1.0; 8666 } else { 8667 d67 = 1.0; 8668 } 8669 HEAPF32[i47 + 132 >> 2] = d67; 8670 HEAP32[i48 >> 2] = HEAP32[i48 >> 2] | 32; 8671 } else { 8672 d67 = +HEAPF32[i47 + 132 >> 2]; 8673 } 8674 if (d67 < d42) { 8675 d42 = d67; 8676 i44 = i47; 8677 } 8678 } 8679 } while (0); 8680 i47 = HEAP32[i47 + 12 >> 2] | 0; 8681 } while ((i47 | 0) != 0); 8682 if ((i44 | 0) == 0 | d42 > .9999988079071045) { 8683 i4 = 36; 8684 break; 8685 } 8686 i47 = HEAP32[(HEAP32[i44 + 48 >> 2] | 0) + 8 >> 2] | 0; 8687 i48 = HEAP32[(HEAP32[i44 + 52 >> 2] | 0) + 8 >> 2] | 0; 8688 i49 = i47 + 28 | 0; 8689 i43 = i4 + 0 | 0; 8690 i45 = i49 + 0 | 0; 8691 i46 = i43 + 36 | 0; 8692 do { 8693 HEAP32[i43 >> 2] = HEAP32[i45 >> 2]; 8694 i43 = i43 + 4 | 0; 8695 i45 = i45 + 4 | 0; 8696 } while ((i43 | 0) < (i46 | 0)); 8697 i50 = i48 + 28 | 0; 8698 i43 = i8 + 0 | 0; 8699 i45 = i50 + 0 | 0; 8700 i46 = i43 + 36 | 0; 8701 do { 8702 HEAP32[i43 >> 2] = HEAP32[i45 >> 2]; 8703 i43 = i43 + 4 | 0; 8704 i45 = i45 + 4 | 0; 8705 } while ((i43 | 0) < (i46 | 0)); 8706 i43 = i47 + 60 | 0; 8707 d67 = +HEAPF32[i43 >> 2]; 8708 if (!(d67 < 1.0)) { 8709 i4 = 38; 8710 break; 8711 } 8712 d70 = (d42 - d67) / (1.0 - d67); 8713 i57 = i47 + 36 | 0; 8714 d67 = 1.0 - d70; 8715 i52 = i47 + 44 | 0; 8716 i53 = i47 + 48 | 0; 8717 d71 = +HEAPF32[i57 >> 2] * d67 + d70 * +HEAPF32[i52 >> 2]; 8718 d72 = d67 * +HEAPF32[i47 + 40 >> 2] + d70 * +HEAPF32[i53 >> 2]; 8719 d69 = +d71; 8720 d68 = +d72; 8721 HEAPF32[i57 >> 2] = d69; 8722 HEAPF32[i57 + 4 >> 2] = d68; 8723 i57 = i47 + 52 | 0; 8724 i51 = i47 + 56 | 0; 8725 d70 = d67 * +HEAPF32[i57 >> 2] + d70 * +HEAPF32[i51 >> 2]; 8726 HEAPF32[i57 >> 2] = d70; 8727 HEAPF32[i43 >> 2] = d42; 8728 i57 = i47 + 44 | 0; 8729 HEAPF32[i57 >> 2] = d69; 8730 HEAPF32[i57 + 4 >> 2] = d68; 8731 HEAPF32[i51 >> 2] = d70; 8732 d68 = +Math_sin(+d70); 8733 i57 = i47 + 20 | 0; 8734 HEAPF32[i57 >> 2] = d68; 8735 d70 = +Math_cos(+d70); 8736 i56 = i47 + 24 | 0; 8737 HEAPF32[i56 >> 2] = d70; 8738 i58 = i47 + 12 | 0; 8739 i55 = i47 + 28 | 0; 8740 d69 = +HEAPF32[i55 >> 2]; 8741 i54 = i47 + 32 | 0; 8742 d67 = +HEAPF32[i54 >> 2]; 8743 d71 = +(d71 - (d70 * d69 - d68 * d67)); 8744 d67 = +(d72 - (d68 * d69 + d70 * d67)); 8745 i43 = i58; 8746 HEAPF32[i43 >> 2] = d71; 8747 HEAPF32[i43 + 4 >> 2] = d67; 8748 i43 = i48 + 60 | 0; 8749 d67 = +HEAPF32[i43 >> 2]; 8750 if (!(d67 < 1.0)) { 8751 i4 = 40; 8752 break; 8753 } 8754 d70 = (d42 - d67) / (1.0 - d67); 8755 i64 = i48 + 36 | 0; 8756 d72 = 1.0 - d70; 8757 i61 = i48 + 44 | 0; 8758 i60 = i48 + 48 | 0; 8759 d71 = +HEAPF32[i64 >> 2] * d72 + d70 * +HEAPF32[i61 >> 2]; 8760 d67 = d72 * +HEAPF32[i48 + 40 >> 2] + d70 * +HEAPF32[i60 >> 2]; 8761 d69 = +d71; 8762 d68 = +d67; 8763 HEAPF32[i64 >> 2] = d69; 8764 HEAPF32[i64 + 4 >> 2] = d68; 8765 i64 = i48 + 52 | 0; 8766 i59 = i48 + 56 | 0; 8767 d70 = d72 * +HEAPF32[i64 >> 2] + d70 * +HEAPF32[i59 >> 2]; 8768 HEAPF32[i64 >> 2] = d70; 8769 HEAPF32[i43 >> 2] = d42; 8770 i64 = i48 + 44 | 0; 8771 HEAPF32[i64 >> 2] = d69; 8772 HEAPF32[i64 + 4 >> 2] = d68; 8773 HEAPF32[i59 >> 2] = d70; 8774 d68 = +Math_sin(+d70); 8775 i64 = i48 + 20 | 0; 8776 HEAPF32[i64 >> 2] = d68; 8777 d70 = +Math_cos(+d70); 8778 i63 = i48 + 24 | 0; 8779 HEAPF32[i63 >> 2] = d70; 8780 i65 = i48 + 12 | 0; 8781 i62 = i48 + 28 | 0; 8782 d69 = +HEAPF32[i62 >> 2]; 8783 i66 = i48 + 32 | 0; 8784 d72 = +HEAPF32[i66 >> 2]; 8785 d71 = +(d71 - (d70 * d69 - d68 * d72)); 8786 d72 = +(d67 - (d68 * d69 + d70 * d72)); 8787 i43 = i65; 8788 HEAPF32[i43 >> 2] = d71; 8789 HEAPF32[i43 + 4 >> 2] = d72; 8790 __ZN9b2Contact6UpdateEP17b2ContactListener(i44, HEAP32[i13 >> 2] | 0); 8791 i43 = i44 + 4 | 0; 8792 i45 = HEAP32[i43 >> 2] | 0; 8793 HEAP32[i43 >> 2] = i45 & -33; 8794 i46 = i44 + 128 | 0; 8795 HEAP32[i46 >> 2] = (HEAP32[i46 >> 2] | 0) + 1; 8796 if ((i45 & 6 | 0) != 6) { 8797 HEAP32[i43 >> 2] = i45 & -37; 8798 i43 = i49 + 0 | 0; 8799 i45 = i4 + 0 | 0; 8800 i46 = i43 + 36 | 0; 8801 do { 8802 HEAP32[i43 >> 2] = HEAP32[i45 >> 2]; 8803 i43 = i43 + 4 | 0; 8804 i45 = i45 + 4 | 0; 8805 } while ((i43 | 0) < (i46 | 0)); 8806 i43 = i50 + 0 | 0; 8807 i45 = i8 + 0 | 0; 8808 i46 = i43 + 36 | 0; 8809 do { 8810 HEAP32[i43 >> 2] = HEAP32[i45 >> 2]; 8811 i43 = i43 + 4 | 0; 8812 i45 = i45 + 4 | 0; 8813 } while ((i43 | 0) < (i46 | 0)); 8814 d69 = +HEAPF32[i51 >> 2]; 8815 d71 = +Math_sin(+d69); 8816 HEAPF32[i57 >> 2] = d71; 8817 d69 = +Math_cos(+d69); 8818 HEAPF32[i56 >> 2] = d69; 8819 d72 = +HEAPF32[i55 >> 2]; 8820 d70 = +HEAPF32[i54 >> 2]; 8821 d68 = +(+HEAPF32[i52 >> 2] - (d69 * d72 - d71 * d70)); 8822 d70 = +(+HEAPF32[i53 >> 2] - (d71 * d72 + d69 * d70)); 8823 HEAPF32[i58 >> 2] = d68; 8824 HEAPF32[i58 + 4 >> 2] = d70; 8825 d70 = +HEAPF32[i59 >> 2]; 8826 d68 = +Math_sin(+d70); 8827 HEAPF32[i64 >> 2] = d68; 8828 d70 = +Math_cos(+d70); 8829 HEAPF32[i63 >> 2] = d70; 8830 d69 = +HEAPF32[i62 >> 2]; 8831 d72 = +HEAPF32[i66 >> 2]; 8832 d71 = +(+HEAPF32[i61 >> 2] - (d70 * d69 - d68 * d72)); 8833 d72 = +(+HEAPF32[i60 >> 2] - (d68 * d69 + d70 * d72)); 8834 i66 = i65; 8835 HEAPF32[i66 >> 2] = d71; 8836 HEAPF32[i66 + 4 >> 2] = d72; 8837 continue; 8838 } 8839 i45 = i47 + 4 | 0; 8840 i46 = HEAPU16[i45 >> 1] | 0; 8841 if ((i46 & 2 | 0) == 0) { 8842 HEAP16[i45 >> 1] = i46 | 2; 8843 HEAPF32[i47 + 144 >> 2] = 0.0; 8844 } 8845 i46 = i48 + 4 | 0; 8846 i49 = HEAPU16[i46 >> 1] | 0; 8847 if ((i49 & 2 | 0) == 0) { 8848 HEAP16[i46 >> 1] = i49 | 2; 8849 HEAPF32[i48 + 144 >> 2] = 0.0; 8850 } 8851 HEAP32[i25 >> 2] = 0; 8852 HEAP32[i26 >> 2] = 0; 8853 HEAP32[i27 >> 2] = 0; 8854 if ((HEAP32[i28 >> 2] | 0) <= 0) { 8855 i4 = 48; 8856 break; 8857 } 8858 i49 = i47 + 8 | 0; 8859 HEAP32[i49 >> 2] = 0; 8860 i51 = HEAP32[i25 >> 2] | 0; 8861 HEAP32[(HEAP32[i29 >> 2] | 0) + (i51 << 2) >> 2] = i47; 8862 i51 = i51 + 1 | 0; 8863 HEAP32[i25 >> 2] = i51; 8864 if ((i51 | 0) >= (HEAP32[i28 >> 2] | 0)) { 8865 i4 = 50; 8866 break; 8867 } 8868 i50 = i48 + 8 | 0; 8869 HEAP32[i50 >> 2] = i51; 8870 i51 = HEAP32[i25 >> 2] | 0; 8871 HEAP32[(HEAP32[i29 >> 2] | 0) + (i51 << 2) >> 2] = i48; 8872 HEAP32[i25 >> 2] = i51 + 1; 8873 i51 = HEAP32[i26 >> 2] | 0; 8874 if ((i51 | 0) >= (HEAP32[i24 >> 2] | 0)) { 8875 i4 = 52; 8876 break; 8877 } 8878 HEAP32[i26 >> 2] = i51 + 1; 8879 HEAP32[(HEAP32[i23 >> 2] | 0) + (i51 << 2) >> 2] = i44; 8880 HEAP16[i45 >> 1] = HEAPU16[i45 >> 1] | 1; 8881 HEAP16[i46 >> 1] = HEAPU16[i46 >> 1] | 1; 8882 HEAP32[i43 >> 2] = HEAP32[i43 >> 2] | 1; 8883 HEAP32[i7 >> 2] = i47; 8884 HEAP32[i22 >> 2] = i48; 8885 i44 = 1; 8886 while (1) { 8887 L58 : do { 8888 if ((HEAP32[i47 >> 2] | 0) == 2 ? (i12 = HEAP32[i47 + 112 >> 2] | 0, (i12 | 0) != 0) : 0) { 8889 i47 = i47 + 4 | 0; 8890 i51 = i12; 8891 do { 8892 if ((HEAP32[i25 >> 2] | 0) == (HEAP32[i28 >> 2] | 0)) { 8893 break L58; 8894 } 8895 if ((HEAP32[i26 >> 2] | 0) == (HEAP32[i24 >> 2] | 0)) { 8896 break L58; 8897 } 8898 i52 = HEAP32[i51 + 4 >> 2] | 0; 8899 i53 = i52 + 4 | 0; 8900 do { 8901 if ((HEAP32[i53 >> 2] & 1 | 0) == 0) { 8902 i48 = HEAP32[i51 >> 2] | 0; 8903 if (((HEAP32[i48 >> 2] | 0) == 2 ? (HEAP16[i47 >> 1] & 8) == 0 : 0) ? (HEAP16[i48 + 4 >> 1] & 8) == 0 : 0) { 8904 break; 8905 } 8906 if ((HEAP8[(HEAP32[i52 + 48 >> 2] | 0) + 38 | 0] | 0) == 0 ? (HEAP8[(HEAP32[i52 + 52 >> 2] | 0) + 38 | 0] | 0) == 0 : 0) { 8907 i54 = i48 + 28 | 0; 8908 i43 = i14 + 0 | 0; 8909 i45 = i54 + 0 | 0; 8910 i46 = i43 + 36 | 0; 8911 do { 8912 HEAP32[i43 >> 2] = HEAP32[i45 >> 2]; 8913 i43 = i43 + 4 | 0; 8914 i45 = i45 + 4 | 0; 8915 } while ((i43 | 0) < (i46 | 0)); 8916 i43 = i48 + 4 | 0; 8917 if ((HEAP16[i43 >> 1] & 1) == 0) { 8918 i45 = i48 + 60 | 0; 8919 d67 = +HEAPF32[i45 >> 2]; 8920 if (!(d67 < 1.0)) { 8921 i4 = 67; 8922 break L11; 8923 } 8924 d70 = (d42 - d67) / (1.0 - d67); 8925 i65 = i48 + 36 | 0; 8926 d72 = 1.0 - d70; 8927 d71 = +HEAPF32[i65 >> 2] * d72 + d70 * +HEAPF32[i48 + 44 >> 2]; 8928 d67 = d72 * +HEAPF32[i48 + 40 >> 2] + d70 * +HEAPF32[i48 + 48 >> 2]; 8929 d69 = +d71; 8930 d68 = +d67; 8931 HEAPF32[i65 >> 2] = d69; 8932 HEAPF32[i65 + 4 >> 2] = d68; 8933 i65 = i48 + 52 | 0; 8934 i66 = i48 + 56 | 0; 8935 d70 = d72 * +HEAPF32[i65 >> 2] + d70 * +HEAPF32[i66 >> 2]; 8936 HEAPF32[i65 >> 2] = d70; 8937 HEAPF32[i45 >> 2] = d42; 8938 i65 = i48 + 44 | 0; 8939 HEAPF32[i65 >> 2] = d69; 8940 HEAPF32[i65 + 4 >> 2] = d68; 8941 HEAPF32[i66 >> 2] = d70; 8942 d68 = +Math_sin(+d70); 8943 HEAPF32[i48 + 20 >> 2] = d68; 8944 d70 = +Math_cos(+d70); 8945 HEAPF32[i48 + 24 >> 2] = d70; 8946 d69 = +HEAPF32[i48 + 28 >> 2]; 8947 d72 = +HEAPF32[i48 + 32 >> 2]; 8948 d71 = +(d71 - (d70 * d69 - d68 * d72)); 8949 d72 = +(d67 - (d68 * d69 + d70 * d72)); 8950 i66 = i48 + 12 | 0; 8951 HEAPF32[i66 >> 2] = d71; 8952 HEAPF32[i66 + 4 >> 2] = d72; 8953 } 8954 __ZN9b2Contact6UpdateEP17b2ContactListener(i52, HEAP32[i13 >> 2] | 0); 8955 i45 = HEAP32[i53 >> 2] | 0; 8956 if ((i45 & 4 | 0) == 0) { 8957 i43 = i54 + 0 | 0; 8958 i45 = i14 + 0 | 0; 8959 i46 = i43 + 36 | 0; 8960 do { 8961 HEAP32[i43 >> 2] = HEAP32[i45 >> 2]; 8962 i43 = i43 + 4 | 0; 8963 i45 = i45 + 4 | 0; 8964 } while ((i43 | 0) < (i46 | 0)); 8965 d70 = +HEAPF32[i48 + 56 >> 2]; 8966 d68 = +Math_sin(+d70); 8967 HEAPF32[i48 + 20 >> 2] = d68; 8968 d70 = +Math_cos(+d70); 8969 HEAPF32[i48 + 24 >> 2] = d70; 8970 d69 = +HEAPF32[i48 + 28 >> 2]; 8971 d72 = +HEAPF32[i48 + 32 >> 2]; 8972 d71 = +(+HEAPF32[i48 + 44 >> 2] - (d70 * d69 - d68 * d72)); 8973 d72 = +(+HEAPF32[i48 + 48 >> 2] - (d68 * d69 + d70 * d72)); 8974 i66 = i48 + 12 | 0; 8975 HEAPF32[i66 >> 2] = d71; 8976 HEAPF32[i66 + 4 >> 2] = d72; 8977 break; 8978 } 8979 if ((i45 & 2 | 0) == 0) { 8980 i43 = i54 + 0 | 0; 8981 i45 = i14 + 0 | 0; 8982 i46 = i43 + 36 | 0; 8983 do { 8984 HEAP32[i43 >> 2] = HEAP32[i45 >> 2]; 8985 i43 = i43 + 4 | 0; 8986 i45 = i45 + 4 | 0; 8987 } while ((i43 | 0) < (i46 | 0)); 8988 d70 = +HEAPF32[i48 + 56 >> 2]; 8989 d68 = +Math_sin(+d70); 8990 HEAPF32[i48 + 20 >> 2] = d68; 8991 d70 = +Math_cos(+d70); 8992 HEAPF32[i48 + 24 >> 2] = d70; 8993 d69 = +HEAPF32[i48 + 28 >> 2]; 8994 d72 = +HEAPF32[i48 + 32 >> 2]; 8995 d71 = +(+HEAPF32[i48 + 44 >> 2] - (d70 * d69 - d68 * d72)); 8996 d72 = +(+HEAPF32[i48 + 48 >> 2] - (d68 * d69 + d70 * d72)); 8997 i66 = i48 + 12 | 0; 8998 HEAPF32[i66 >> 2] = d71; 8999 HEAPF32[i66 + 4 >> 2] = d72; 9000 break; 9001 } 9002 HEAP32[i53 >> 2] = i45 | 1; 9003 i45 = HEAP32[i26 >> 2] | 0; 9004 if ((i45 | 0) >= (HEAP32[i24 >> 2] | 0)) { 9005 i4 = 74; 9006 break L11; 9007 } 9008 HEAP32[i26 >> 2] = i45 + 1; 9009 HEAP32[(HEAP32[i23 >> 2] | 0) + (i45 << 2) >> 2] = i52; 9010 i45 = HEAPU16[i43 >> 1] | 0; 9011 if ((i45 & 1 | 0) == 0) { 9012 HEAP16[i43 >> 1] = i45 | 1; 9013 if ((HEAP32[i48 >> 2] | 0) != 0 ? (i45 & 2 | 0) == 0 : 0) { 9014 HEAP16[i43 >> 1] = i45 | 3; 9015 HEAPF32[i48 + 144 >> 2] = 0.0; 9016 } 9017 i43 = HEAP32[i25 >> 2] | 0; 9018 if ((i43 | 0) >= (HEAP32[i28 >> 2] | 0)) { 9019 i4 = 80; 9020 break L11; 9021 } 9022 HEAP32[i48 + 8 >> 2] = i43; 9023 i66 = HEAP32[i25 >> 2] | 0; 9024 HEAP32[(HEAP32[i29 >> 2] | 0) + (i66 << 2) >> 2] = i48; 9025 HEAP32[i25 >> 2] = i66 + 1; 9026 } 9027 } 9028 } 9029 } while (0); 9030 i51 = HEAP32[i51 + 12 >> 2] | 0; 9031 } while ((i51 | 0) != 0); 9032 } 9033 } while (0); 9034 if ((i44 | 0) >= 2) { 9035 break; 9036 } 9037 i47 = HEAP32[i7 + (i44 << 2) >> 2] | 0; 9038 i44 = i44 + 1 | 0; 9039 } 9040 d72 = (1.0 - d42) * +HEAPF32[i11 >> 2]; 9041 HEAPF32[i9 >> 2] = d72; 9042 HEAPF32[i21 >> 2] = 1.0 / d72; 9043 HEAPF32[i20 >> 2] = 1.0; 9044 HEAP32[i19 >> 2] = 20; 9045 HEAP32[i17 >> 2] = HEAP32[i18 >> 2]; 9046 HEAP8[i16] = 0; 9047 __ZN8b2Island8SolveTOIERK10b2TimeStepii(i3, i9, HEAP32[i49 >> 2] | 0, HEAP32[i50 >> 2] | 0); 9048 i44 = HEAP32[i25 >> 2] | 0; 9049 if ((i44 | 0) > 0) { 9050 i43 = 0; 9051 do { 9052 i45 = HEAP32[(HEAP32[i29 >> 2] | 0) + (i43 << 2) >> 2] | 0; 9053 i66 = i45 + 4 | 0; 9054 HEAP16[i66 >> 1] = HEAP16[i66 >> 1] & 65534; 9055 if ((HEAP32[i45 >> 2] | 0) == 2) { 9056 __ZN6b2Body19SynchronizeFixturesEv(i45); 9057 i44 = HEAP32[i45 + 112 >> 2] | 0; 9058 if ((i44 | 0) != 0) { 9059 do { 9060 i66 = (HEAP32[i44 + 4 >> 2] | 0) + 4 | 0; 9061 HEAP32[i66 >> 2] = HEAP32[i66 >> 2] & -34; 9062 i44 = HEAP32[i44 + 12 >> 2] | 0; 9063 } while ((i44 | 0) != 0); 9064 } 9065 i44 = HEAP32[i25 >> 2] | 0; 9066 } 9067 i43 = i43 + 1 | 0; 9068 } while ((i43 | 0) < (i44 | 0)); 9069 } 9070 __ZN16b2ContactManager15FindNewContactsEv(i10); 9071 if ((HEAP8[i39] | 0) != 0) { 9072 i4 = 92; 9073 break; 9074 } 9075 } 9076 if ((i4 | 0) == 16) { 9077 ___assert_fail(2288, 2184, 641, 2344); 9078 } else if ((i4 | 0) == 21) { 9079 ___assert_fail(2360, 2376, 723, 2400); 9080 } else if ((i4 | 0) == 25) { 9081 ___assert_fail(2360, 2376, 723, 2400); 9082 } else if ((i4 | 0) == 28) { 9083 ___assert_fail(2360, 2184, 676, 2344); 9084 } else if ((i4 | 0) == 36) { 9085 HEAP8[i2] = 1; 9086 __ZN8b2IslandD2Ev(i3); 9087 STACKTOP = i1; 9088 return; 9089 } else if ((i4 | 0) == 38) { 9090 ___assert_fail(2360, 2376, 723, 2400); 9091 } else if ((i4 | 0) == 40) { 9092 ___assert_fail(2360, 2376, 723, 2400); 9093 } else if ((i4 | 0) == 48) { 9094 ___assert_fail(2520, 2440, 54, 2472); 9095 } else if ((i4 | 0) == 50) { 9096 ___assert_fail(2520, 2440, 54, 2472); 9097 } else if ((i4 | 0) == 52) { 9098 ___assert_fail(2480, 2440, 62, 2472); 9099 } else if ((i4 | 0) == 67) { 9100 ___assert_fail(2360, 2376, 723, 2400); 9101 } else if ((i4 | 0) == 74) { 9102 ___assert_fail(2480, 2440, 62, 2472); 9103 } else if ((i4 | 0) == 80) { 9104 ___assert_fail(2520, 2440, 54, 2472); 9105 } else if ((i4 | 0) == 92) { 9106 HEAP8[i2] = 0; 9107 __ZN8b2IslandD2Ev(i3); 9108 STACKTOP = i1; 9109 return; 9110 } 9111 } 9112 function __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i8, i1) { 9113 i5 = i5 | 0; 9114 i8 = i8 | 0; 9115 i1 = i1 | 0; 9116 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; 9117 i3 = STACKTOP; 9118 STACKTOP = STACKTOP + 16 | 0; 9119 i2 = i3; 9120 L1 : while (1) { 9121 i7 = i8; 9122 i4 = i8 + -12 | 0; 9123 L3 : while (1) { 9124 i9 = i5; 9125 i11 = i7 - i9 | 0; 9126 switch ((i11 | 0) / 12 | 0 | 0) { 9127 case 4: 9128 { 9129 i6 = 14; 9130 break L1; 9131 } 9132 case 2: 9133 { 9134 i6 = 4; 9135 break L1; 9136 } 9137 case 3: 9138 { 9139 i6 = 6; 9140 break L1; 9141 } 9142 case 5: 9143 { 9144 i6 = 15; 9145 break L1; 9146 } 9147 case 1: 9148 case 0: 9149 { 9150 i6 = 67; 9151 break L1; 9152 } 9153 default: 9154 {} 9155 } 9156 if ((i11 | 0) < 372) { 9157 i6 = 21; 9158 break L1; 9159 } 9160 i12 = (i11 | 0) / 24 | 0; 9161 i10 = i5 + (i12 * 12 | 0) | 0; 9162 do { 9163 if ((i11 | 0) > 11988) { 9164 i14 = (i11 | 0) / 48 | 0; 9165 i11 = i5 + (i14 * 12 | 0) | 0; 9166 i14 = i5 + ((i14 + i12 | 0) * 12 | 0) | 0; 9167 i12 = __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i11, i10, i14, i1) | 0; 9168 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i14) | 0) { 9169 HEAP32[i2 + 0 >> 2] = HEAP32[i14 + 0 >> 2]; 9170 HEAP32[i2 + 4 >> 2] = HEAP32[i14 + 4 >> 2]; 9171 HEAP32[i2 + 8 >> 2] = HEAP32[i14 + 8 >> 2]; 9172 HEAP32[i14 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9173 HEAP32[i14 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9174 HEAP32[i14 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9175 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9176 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9177 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9178 i13 = i12 + 1 | 0; 9179 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i14, i10) | 0) { 9180 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 9181 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 9182 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 9183 HEAP32[i10 + 0 >> 2] = HEAP32[i14 + 0 >> 2]; 9184 HEAP32[i10 + 4 >> 2] = HEAP32[i14 + 4 >> 2]; 9185 HEAP32[i10 + 8 >> 2] = HEAP32[i14 + 8 >> 2]; 9186 HEAP32[i14 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9187 HEAP32[i14 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9188 HEAP32[i14 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9189 i13 = i12 + 2 | 0; 9190 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i11) | 0) { 9191 HEAP32[i2 + 0 >> 2] = HEAP32[i11 + 0 >> 2]; 9192 HEAP32[i2 + 4 >> 2] = HEAP32[i11 + 4 >> 2]; 9193 HEAP32[i2 + 8 >> 2] = HEAP32[i11 + 8 >> 2]; 9194 HEAP32[i11 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 9195 HEAP32[i11 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 9196 HEAP32[i11 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 9197 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9198 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9199 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9200 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i11, i5) | 0) { 9201 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9202 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9203 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9204 HEAP32[i5 + 0 >> 2] = HEAP32[i11 + 0 >> 2]; 9205 HEAP32[i5 + 4 >> 2] = HEAP32[i11 + 4 >> 2]; 9206 HEAP32[i5 + 8 >> 2] = HEAP32[i11 + 8 >> 2]; 9207 HEAP32[i11 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9208 HEAP32[i11 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9209 HEAP32[i11 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9210 i12 = i12 + 4 | 0; 9211 } else { 9212 i12 = i12 + 3 | 0; 9213 } 9214 } else { 9215 i12 = i13; 9216 } 9217 } else { 9218 i12 = i13; 9219 } 9220 } 9221 } else { 9222 i15 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i5) | 0; 9223 i11 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i10) | 0; 9224 if (!i15) { 9225 if (!i11) { 9226 i12 = 0; 9227 break; 9228 } 9229 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 9230 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 9231 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 9232 HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9233 HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9234 HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9235 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9236 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9237 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9238 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i5) | 0)) { 9239 i12 = 1; 9240 break; 9241 } 9242 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9243 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9244 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9245 HEAP32[i5 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 9246 HEAP32[i5 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 9247 HEAP32[i5 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 9248 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9249 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9250 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9251 i12 = 2; 9252 break; 9253 } 9254 if (i11) { 9255 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9256 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9257 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9258 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9259 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9260 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9261 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9262 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9263 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9264 i12 = 1; 9265 break; 9266 } 9267 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9268 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9269 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9270 HEAP32[i5 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 9271 HEAP32[i5 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 9272 HEAP32[i5 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 9273 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9274 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9275 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9276 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i10) | 0) { 9277 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 9278 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 9279 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 9280 HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9281 HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9282 HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9283 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9284 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9285 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9286 i12 = 2; 9287 } else { 9288 i12 = 1; 9289 } 9290 } 9291 } while (0); 9292 do { 9293 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) { 9294 i13 = i4; 9295 } else { 9296 i13 = i4; 9297 while (1) { 9298 i13 = i13 + -12 | 0; 9299 if ((i5 | 0) == (i13 | 0)) { 9300 break; 9301 } 9302 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i13, i10) | 0) { 9303 i6 = 50; 9304 break; 9305 } 9306 } 9307 if ((i6 | 0) == 50) { 9308 i6 = 0; 9309 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9310 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9311 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9312 HEAP32[i5 + 0 >> 2] = HEAP32[i13 + 0 >> 2]; 9313 HEAP32[i5 + 4 >> 2] = HEAP32[i13 + 4 >> 2]; 9314 HEAP32[i5 + 8 >> 2] = HEAP32[i13 + 8 >> 2]; 9315 HEAP32[i13 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9316 HEAP32[i13 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9317 HEAP32[i13 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9318 i12 = i12 + 1 | 0; 9319 break; 9320 } 9321 i10 = i5 + 12 | 0; 9322 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i4) | 0)) { 9323 if ((i10 | 0) == (i4 | 0)) { 9324 i6 = 67; 9325 break L1; 9326 } 9327 while (1) { 9328 i9 = i10 + 12 | 0; 9329 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) { 9330 break; 9331 } 9332 if ((i9 | 0) == (i4 | 0)) { 9333 i6 = 67; 9334 break L1; 9335 } else { 9336 i10 = i9; 9337 } 9338 } 9339 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 9340 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 9341 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 9342 HEAP32[i10 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9343 HEAP32[i10 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9344 HEAP32[i10 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9345 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9346 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9347 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9348 i10 = i9; 9349 } 9350 if ((i10 | 0) == (i4 | 0)) { 9351 i6 = 67; 9352 break L1; 9353 } else { 9354 i9 = i4; 9355 } 9356 while (1) { 9357 while (1) { 9358 i11 = i10 + 12 | 0; 9359 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i10) | 0) { 9360 break; 9361 } else { 9362 i10 = i11; 9363 } 9364 } 9365 do { 9366 i9 = i9 + -12 | 0; 9367 } while (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i9) | 0); 9368 if (!(i10 >>> 0 < i9 >>> 0)) { 9369 i5 = i10; 9370 continue L3; 9371 } 9372 HEAP32[i2 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 9373 HEAP32[i2 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 9374 HEAP32[i2 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 9375 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2]; 9376 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2]; 9377 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2]; 9378 HEAP32[i9 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9379 HEAP32[i9 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9380 HEAP32[i9 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9381 i10 = i11; 9382 } 9383 } 9384 } while (0); 9385 i11 = i5 + 12 | 0; 9386 L47 : do { 9387 if (i11 >>> 0 < i13 >>> 0) { 9388 while (1) { 9389 i15 = i11; 9390 while (1) { 9391 i11 = i15 + 12 | 0; 9392 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i15, i10) | 0) { 9393 i15 = i11; 9394 } else { 9395 i14 = i13; 9396 break; 9397 } 9398 } 9399 do { 9400 i14 = i14 + -12 | 0; 9401 } while (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i14, i10) | 0)); 9402 if (i15 >>> 0 > i14 >>> 0) { 9403 i11 = i15; 9404 break L47; 9405 } 9406 HEAP32[i2 + 0 >> 2] = HEAP32[i15 + 0 >> 2]; 9407 HEAP32[i2 + 4 >> 2] = HEAP32[i15 + 4 >> 2]; 9408 HEAP32[i2 + 8 >> 2] = HEAP32[i15 + 8 >> 2]; 9409 HEAP32[i15 + 0 >> 2] = HEAP32[i14 + 0 >> 2]; 9410 HEAP32[i15 + 4 >> 2] = HEAP32[i14 + 4 >> 2]; 9411 HEAP32[i15 + 8 >> 2] = HEAP32[i14 + 8 >> 2]; 9412 HEAP32[i14 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9413 HEAP32[i14 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9414 HEAP32[i14 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9415 i13 = i14; 9416 i10 = (i10 | 0) == (i15 | 0) ? i14 : i10; 9417 i12 = i12 + 1 | 0; 9418 } 9419 } 9420 } while (0); 9421 if ((i11 | 0) != (i10 | 0) ? FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i10, i11) | 0 : 0) { 9422 HEAP32[i2 + 0 >> 2] = HEAP32[i11 + 0 >> 2]; 9423 HEAP32[i2 + 4 >> 2] = HEAP32[i11 + 4 >> 2]; 9424 HEAP32[i2 + 8 >> 2] = HEAP32[i11 + 8 >> 2]; 9425 HEAP32[i11 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 9426 HEAP32[i11 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 9427 HEAP32[i11 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 9428 HEAP32[i10 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9429 HEAP32[i10 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9430 HEAP32[i10 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9431 i12 = i12 + 1 | 0; 9432 } 9433 if ((i12 | 0) == 0) { 9434 i12 = __ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_(i5, i11, i1) | 0; 9435 i10 = i11 + 12 | 0; 9436 if (__ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_(i10, i8, i1) | 0) { 9437 i6 = 62; 9438 break; 9439 } 9440 if (i12) { 9441 i5 = i10; 9442 continue; 9443 } 9444 } 9445 i15 = i11; 9446 if ((i15 - i9 | 0) >= (i7 - i15 | 0)) { 9447 i6 = 66; 9448 break; 9449 } 9450 __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i11, i1); 9451 i5 = i11 + 12 | 0; 9452 } 9453 if ((i6 | 0) == 62) { 9454 i6 = 0; 9455 if (i12) { 9456 i6 = 67; 9457 break; 9458 } else { 9459 i8 = i11; 9460 continue; 9461 } 9462 } else if ((i6 | 0) == 66) { 9463 i6 = 0; 9464 __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i11 + 12 | 0, i8, i1); 9465 i8 = i11; 9466 continue; 9467 } 9468 } 9469 if ((i6 | 0) == 4) { 9470 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i5) | 0)) { 9471 STACKTOP = i3; 9472 return; 9473 } 9474 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9475 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9476 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9477 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9478 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9479 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9480 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9481 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9482 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9483 STACKTOP = i3; 9484 return; 9485 } else if ((i6 | 0) == 6) { 9486 i6 = i5 + 12 | 0; 9487 i15 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0; 9488 i7 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i6) | 0; 9489 if (!i15) { 9490 if (!i7) { 9491 STACKTOP = i3; 9492 return; 9493 } 9494 HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 9495 HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 9496 HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 9497 HEAP32[i6 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9498 HEAP32[i6 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9499 HEAP32[i6 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9500 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9501 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9502 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9503 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0)) { 9504 STACKTOP = i3; 9505 return; 9506 } 9507 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9508 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9509 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9510 HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 9511 HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 9512 HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 9513 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9514 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9515 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9516 STACKTOP = i3; 9517 return; 9518 } 9519 if (i7) { 9520 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9521 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9522 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9523 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9524 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9525 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9526 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9527 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9528 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9529 STACKTOP = i3; 9530 return; 9531 } 9532 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9533 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9534 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9535 HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 9536 HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 9537 HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 9538 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9539 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9540 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9541 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i6) | 0)) { 9542 STACKTOP = i3; 9543 return; 9544 } 9545 HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 9546 HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 9547 HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 9548 HEAP32[i6 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9549 HEAP32[i6 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9550 HEAP32[i6 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9551 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9552 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9553 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9554 STACKTOP = i3; 9555 return; 9556 } else if ((i6 | 0) == 14) { 9557 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i5 + 12 | 0, i5 + 24 | 0, i4, i1) | 0; 9558 STACKTOP = i3; 9559 return; 9560 } else if ((i6 | 0) == 15) { 9561 i6 = i5 + 12 | 0; 9562 i7 = i5 + 24 | 0; 9563 i8 = i5 + 36 | 0; 9564 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i5, i6, i7, i8, i1) | 0; 9565 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i8) | 0)) { 9566 STACKTOP = i3; 9567 return; 9568 } 9569 HEAP32[i2 + 0 >> 2] = HEAP32[i8 + 0 >> 2]; 9570 HEAP32[i2 + 4 >> 2] = HEAP32[i8 + 4 >> 2]; 9571 HEAP32[i2 + 8 >> 2] = HEAP32[i8 + 8 >> 2]; 9572 HEAP32[i8 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 9573 HEAP32[i8 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 9574 HEAP32[i8 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 9575 HEAP32[i4 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9576 HEAP32[i4 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9577 HEAP32[i4 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9578 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i8, i7) | 0)) { 9579 STACKTOP = i3; 9580 return; 9581 } 9582 HEAP32[i2 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 9583 HEAP32[i2 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 9584 HEAP32[i2 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 9585 HEAP32[i7 + 0 >> 2] = HEAP32[i8 + 0 >> 2]; 9586 HEAP32[i7 + 4 >> 2] = HEAP32[i8 + 4 >> 2]; 9587 HEAP32[i7 + 8 >> 2] = HEAP32[i8 + 8 >> 2]; 9588 HEAP32[i8 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9589 HEAP32[i8 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9590 HEAP32[i8 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9591 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0)) { 9592 STACKTOP = i3; 9593 return; 9594 } 9595 HEAP32[i2 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 9596 HEAP32[i2 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 9597 HEAP32[i2 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 9598 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 9599 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 9600 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 9601 HEAP32[i7 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9602 HEAP32[i7 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9603 HEAP32[i7 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9604 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i6, i5) | 0)) { 9605 STACKTOP = i3; 9606 return; 9607 } 9608 HEAP32[i2 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 9609 HEAP32[i2 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 9610 HEAP32[i2 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 9611 HEAP32[i5 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 9612 HEAP32[i5 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 9613 HEAP32[i5 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 9614 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 9615 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 9616 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 9617 STACKTOP = i3; 9618 return; 9619 } else if ((i6 | 0) == 21) { 9620 __ZNSt3__118__insertion_sort_3IRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i8, i1); 9621 STACKTOP = i3; 9622 return; 9623 } else if ((i6 | 0) == 67) { 9624 STACKTOP = i3; 9625 return; 9626 } 9627 } 9628 function _free(i7) { 9629 i7 = i7 | 0; 9630 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; 9631 i1 = STACKTOP; 9632 if ((i7 | 0) == 0) { 9633 STACKTOP = i1; 9634 return; 9635 } 9636 i15 = i7 + -8 | 0; 9637 i16 = HEAP32[7176 >> 2] | 0; 9638 if (i15 >>> 0 < i16 >>> 0) { 9639 _abort(); 9640 } 9641 i13 = HEAP32[i7 + -4 >> 2] | 0; 9642 i12 = i13 & 3; 9643 if ((i12 | 0) == 1) { 9644 _abort(); 9645 } 9646 i8 = i13 & -8; 9647 i6 = i7 + (i8 + -8) | 0; 9648 do { 9649 if ((i13 & 1 | 0) == 0) { 9650 i19 = HEAP32[i15 >> 2] | 0; 9651 if ((i12 | 0) == 0) { 9652 STACKTOP = i1; 9653 return; 9654 } 9655 i15 = -8 - i19 | 0; 9656 i13 = i7 + i15 | 0; 9657 i12 = i19 + i8 | 0; 9658 if (i13 >>> 0 < i16 >>> 0) { 9659 _abort(); 9660 } 9661 if ((i13 | 0) == (HEAP32[7180 >> 2] | 0)) { 9662 i2 = i7 + (i8 + -4) | 0; 9663 if ((HEAP32[i2 >> 2] & 3 | 0) != 3) { 9664 i2 = i13; 9665 i11 = i12; 9666 break; 9667 } 9668 HEAP32[7168 >> 2] = i12; 9669 HEAP32[i2 >> 2] = HEAP32[i2 >> 2] & -2; 9670 HEAP32[i7 + (i15 + 4) >> 2] = i12 | 1; 9671 HEAP32[i6 >> 2] = i12; 9672 STACKTOP = i1; 9673 return; 9674 } 9675 i18 = i19 >>> 3; 9676 if (i19 >>> 0 < 256) { 9677 i2 = HEAP32[i7 + (i15 + 8) >> 2] | 0; 9678 i11 = HEAP32[i7 + (i15 + 12) >> 2] | 0; 9679 i14 = 7200 + (i18 << 1 << 2) | 0; 9680 if ((i2 | 0) != (i14 | 0)) { 9681 if (i2 >>> 0 < i16 >>> 0) { 9682 _abort(); 9683 } 9684 if ((HEAP32[i2 + 12 >> 2] | 0) != (i13 | 0)) { 9685 _abort(); 9686 } 9687 } 9688 if ((i11 | 0) == (i2 | 0)) { 9689 HEAP32[1790] = HEAP32[1790] & ~(1 << i18); 9690 i2 = i13; 9691 i11 = i12; 9692 break; 9693 } 9694 if ((i11 | 0) != (i14 | 0)) { 9695 if (i11 >>> 0 < i16 >>> 0) { 9696 _abort(); 9697 } 9698 i14 = i11 + 8 | 0; 9699 if ((HEAP32[i14 >> 2] | 0) == (i13 | 0)) { 9700 i17 = i14; 9701 } else { 9702 _abort(); 9703 } 9704 } else { 9705 i17 = i11 + 8 | 0; 9706 } 9707 HEAP32[i2 + 12 >> 2] = i11; 9708 HEAP32[i17 >> 2] = i2; 9709 i2 = i13; 9710 i11 = i12; 9711 break; 9712 } 9713 i17 = HEAP32[i7 + (i15 + 24) >> 2] | 0; 9714 i18 = HEAP32[i7 + (i15 + 12) >> 2] | 0; 9715 do { 9716 if ((i18 | 0) == (i13 | 0)) { 9717 i19 = i7 + (i15 + 20) | 0; 9718 i18 = HEAP32[i19 >> 2] | 0; 9719 if ((i18 | 0) == 0) { 9720 i19 = i7 + (i15 + 16) | 0; 9721 i18 = HEAP32[i19 >> 2] | 0; 9722 if ((i18 | 0) == 0) { 9723 i14 = 0; 9724 break; 9725 } 9726 } 9727 while (1) { 9728 i21 = i18 + 20 | 0; 9729 i20 = HEAP32[i21 >> 2] | 0; 9730 if ((i20 | 0) != 0) { 9731 i18 = i20; 9732 i19 = i21; 9733 continue; 9734 } 9735 i20 = i18 + 16 | 0; 9736 i21 = HEAP32[i20 >> 2] | 0; 9737 if ((i21 | 0) == 0) { 9738 break; 9739 } else { 9740 i18 = i21; 9741 i19 = i20; 9742 } 9743 } 9744 if (i19 >>> 0 < i16 >>> 0) { 9745 _abort(); 9746 } else { 9747 HEAP32[i19 >> 2] = 0; 9748 i14 = i18; 9749 break; 9750 } 9751 } else { 9752 i19 = HEAP32[i7 + (i15 + 8) >> 2] | 0; 9753 if (i19 >>> 0 < i16 >>> 0) { 9754 _abort(); 9755 } 9756 i16 = i19 + 12 | 0; 9757 if ((HEAP32[i16 >> 2] | 0) != (i13 | 0)) { 9758 _abort(); 9759 } 9760 i20 = i18 + 8 | 0; 9761 if ((HEAP32[i20 >> 2] | 0) == (i13 | 0)) { 9762 HEAP32[i16 >> 2] = i18; 9763 HEAP32[i20 >> 2] = i19; 9764 i14 = i18; 9765 break; 9766 } else { 9767 _abort(); 9768 } 9769 } 9770 } while (0); 9771 if ((i17 | 0) != 0) { 9772 i18 = HEAP32[i7 + (i15 + 28) >> 2] | 0; 9773 i16 = 7464 + (i18 << 2) | 0; 9774 if ((i13 | 0) == (HEAP32[i16 >> 2] | 0)) { 9775 HEAP32[i16 >> 2] = i14; 9776 if ((i14 | 0) == 0) { 9777 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i18); 9778 i2 = i13; 9779 i11 = i12; 9780 break; 9781 } 9782 } else { 9783 if (i17 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9784 _abort(); 9785 } 9786 i16 = i17 + 16 | 0; 9787 if ((HEAP32[i16 >> 2] | 0) == (i13 | 0)) { 9788 HEAP32[i16 >> 2] = i14; 9789 } else { 9790 HEAP32[i17 + 20 >> 2] = i14; 9791 } 9792 if ((i14 | 0) == 0) { 9793 i2 = i13; 9794 i11 = i12; 9795 break; 9796 } 9797 } 9798 if (i14 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9799 _abort(); 9800 } 9801 HEAP32[i14 + 24 >> 2] = i17; 9802 i16 = HEAP32[i7 + (i15 + 16) >> 2] | 0; 9803 do { 9804 if ((i16 | 0) != 0) { 9805 if (i16 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9806 _abort(); 9807 } else { 9808 HEAP32[i14 + 16 >> 2] = i16; 9809 HEAP32[i16 + 24 >> 2] = i14; 9810 break; 9811 } 9812 } 9813 } while (0); 9814 i15 = HEAP32[i7 + (i15 + 20) >> 2] | 0; 9815 if ((i15 | 0) != 0) { 9816 if (i15 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9817 _abort(); 9818 } else { 9819 HEAP32[i14 + 20 >> 2] = i15; 9820 HEAP32[i15 + 24 >> 2] = i14; 9821 i2 = i13; 9822 i11 = i12; 9823 break; 9824 } 9825 } else { 9826 i2 = i13; 9827 i11 = i12; 9828 } 9829 } else { 9830 i2 = i13; 9831 i11 = i12; 9832 } 9833 } else { 9834 i2 = i15; 9835 i11 = i8; 9836 } 9837 } while (0); 9838 if (!(i2 >>> 0 < i6 >>> 0)) { 9839 _abort(); 9840 } 9841 i12 = i7 + (i8 + -4) | 0; 9842 i13 = HEAP32[i12 >> 2] | 0; 9843 if ((i13 & 1 | 0) == 0) { 9844 _abort(); 9845 } 9846 if ((i13 & 2 | 0) == 0) { 9847 if ((i6 | 0) == (HEAP32[7184 >> 2] | 0)) { 9848 i21 = (HEAP32[7172 >> 2] | 0) + i11 | 0; 9849 HEAP32[7172 >> 2] = i21; 9850 HEAP32[7184 >> 2] = i2; 9851 HEAP32[i2 + 4 >> 2] = i21 | 1; 9852 if ((i2 | 0) != (HEAP32[7180 >> 2] | 0)) { 9853 STACKTOP = i1; 9854 return; 9855 } 9856 HEAP32[7180 >> 2] = 0; 9857 HEAP32[7168 >> 2] = 0; 9858 STACKTOP = i1; 9859 return; 9860 } 9861 if ((i6 | 0) == (HEAP32[7180 >> 2] | 0)) { 9862 i21 = (HEAP32[7168 >> 2] | 0) + i11 | 0; 9863 HEAP32[7168 >> 2] = i21; 9864 HEAP32[7180 >> 2] = i2; 9865 HEAP32[i2 + 4 >> 2] = i21 | 1; 9866 HEAP32[i2 + i21 >> 2] = i21; 9867 STACKTOP = i1; 9868 return; 9869 } 9870 i11 = (i13 & -8) + i11 | 0; 9871 i12 = i13 >>> 3; 9872 do { 9873 if (!(i13 >>> 0 < 256)) { 9874 i10 = HEAP32[i7 + (i8 + 16) >> 2] | 0; 9875 i15 = HEAP32[i7 + (i8 | 4) >> 2] | 0; 9876 do { 9877 if ((i15 | 0) == (i6 | 0)) { 9878 i13 = i7 + (i8 + 12) | 0; 9879 i12 = HEAP32[i13 >> 2] | 0; 9880 if ((i12 | 0) == 0) { 9881 i13 = i7 + (i8 + 8) | 0; 9882 i12 = HEAP32[i13 >> 2] | 0; 9883 if ((i12 | 0) == 0) { 9884 i9 = 0; 9885 break; 9886 } 9887 } 9888 while (1) { 9889 i14 = i12 + 20 | 0; 9890 i15 = HEAP32[i14 >> 2] | 0; 9891 if ((i15 | 0) != 0) { 9892 i12 = i15; 9893 i13 = i14; 9894 continue; 9895 } 9896 i14 = i12 + 16 | 0; 9897 i15 = HEAP32[i14 >> 2] | 0; 9898 if ((i15 | 0) == 0) { 9899 break; 9900 } else { 9901 i12 = i15; 9902 i13 = i14; 9903 } 9904 } 9905 if (i13 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9906 _abort(); 9907 } else { 9908 HEAP32[i13 >> 2] = 0; 9909 i9 = i12; 9910 break; 9911 } 9912 } else { 9913 i13 = HEAP32[i7 + i8 >> 2] | 0; 9914 if (i13 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9915 _abort(); 9916 } 9917 i14 = i13 + 12 | 0; 9918 if ((HEAP32[i14 >> 2] | 0) != (i6 | 0)) { 9919 _abort(); 9920 } 9921 i12 = i15 + 8 | 0; 9922 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) { 9923 HEAP32[i14 >> 2] = i15; 9924 HEAP32[i12 >> 2] = i13; 9925 i9 = i15; 9926 break; 9927 } else { 9928 _abort(); 9929 } 9930 } 9931 } while (0); 9932 if ((i10 | 0) != 0) { 9933 i12 = HEAP32[i7 + (i8 + 20) >> 2] | 0; 9934 i13 = 7464 + (i12 << 2) | 0; 9935 if ((i6 | 0) == (HEAP32[i13 >> 2] | 0)) { 9936 HEAP32[i13 >> 2] = i9; 9937 if ((i9 | 0) == 0) { 9938 HEAP32[7164 >> 2] = HEAP32[7164 >> 2] & ~(1 << i12); 9939 break; 9940 } 9941 } else { 9942 if (i10 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9943 _abort(); 9944 } 9945 i12 = i10 + 16 | 0; 9946 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) { 9947 HEAP32[i12 >> 2] = i9; 9948 } else { 9949 HEAP32[i10 + 20 >> 2] = i9; 9950 } 9951 if ((i9 | 0) == 0) { 9952 break; 9953 } 9954 } 9955 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9956 _abort(); 9957 } 9958 HEAP32[i9 + 24 >> 2] = i10; 9959 i6 = HEAP32[i7 + (i8 + 8) >> 2] | 0; 9960 do { 9961 if ((i6 | 0) != 0) { 9962 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9963 _abort(); 9964 } else { 9965 HEAP32[i9 + 16 >> 2] = i6; 9966 HEAP32[i6 + 24 >> 2] = i9; 9967 break; 9968 } 9969 } 9970 } while (0); 9971 i6 = HEAP32[i7 + (i8 + 12) >> 2] | 0; 9972 if ((i6 | 0) != 0) { 9973 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9974 _abort(); 9975 } else { 9976 HEAP32[i9 + 20 >> 2] = i6; 9977 HEAP32[i6 + 24 >> 2] = i9; 9978 break; 9979 } 9980 } 9981 } 9982 } else { 9983 i9 = HEAP32[i7 + i8 >> 2] | 0; 9984 i7 = HEAP32[i7 + (i8 | 4) >> 2] | 0; 9985 i8 = 7200 + (i12 << 1 << 2) | 0; 9986 if ((i9 | 0) != (i8 | 0)) { 9987 if (i9 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 9988 _abort(); 9989 } 9990 if ((HEAP32[i9 + 12 >> 2] | 0) != (i6 | 0)) { 9991 _abort(); 9992 } 9993 } 9994 if ((i7 | 0) == (i9 | 0)) { 9995 HEAP32[1790] = HEAP32[1790] & ~(1 << i12); 9996 break; 9997 } 9998 if ((i7 | 0) != (i8 | 0)) { 9999 if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 10000 _abort(); 10001 } 10002 i8 = i7 + 8 | 0; 10003 if ((HEAP32[i8 >> 2] | 0) == (i6 | 0)) { 10004 i10 = i8; 10005 } else { 10006 _abort(); 10007 } 10008 } else { 10009 i10 = i7 + 8 | 0; 10010 } 10011 HEAP32[i9 + 12 >> 2] = i7; 10012 HEAP32[i10 >> 2] = i9; 10013 } 10014 } while (0); 10015 HEAP32[i2 + 4 >> 2] = i11 | 1; 10016 HEAP32[i2 + i11 >> 2] = i11; 10017 if ((i2 | 0) == (HEAP32[7180 >> 2] | 0)) { 10018 HEAP32[7168 >> 2] = i11; 10019 STACKTOP = i1; 10020 return; 10021 } 10022 } else { 10023 HEAP32[i12 >> 2] = i13 & -2; 10024 HEAP32[i2 + 4 >> 2] = i11 | 1; 10025 HEAP32[i2 + i11 >> 2] = i11; 10026 } 10027 i6 = i11 >>> 3; 10028 if (i11 >>> 0 < 256) { 10029 i7 = i6 << 1; 10030 i3 = 7200 + (i7 << 2) | 0; 10031 i8 = HEAP32[1790] | 0; 10032 i6 = 1 << i6; 10033 if ((i8 & i6 | 0) != 0) { 10034 i6 = 7200 + (i7 + 2 << 2) | 0; 10035 i7 = HEAP32[i6 >> 2] | 0; 10036 if (i7 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 10037 _abort(); 10038 } else { 10039 i4 = i6; 10040 i5 = i7; 10041 } 10042 } else { 10043 HEAP32[1790] = i8 | i6; 10044 i4 = 7200 + (i7 + 2 << 2) | 0; 10045 i5 = i3; 10046 } 10047 HEAP32[i4 >> 2] = i2; 10048 HEAP32[i5 + 12 >> 2] = i2; 10049 HEAP32[i2 + 8 >> 2] = i5; 10050 HEAP32[i2 + 12 >> 2] = i3; 10051 STACKTOP = i1; 10052 return; 10053 } 10054 i4 = i11 >>> 8; 10055 if ((i4 | 0) != 0) { 10056 if (i11 >>> 0 > 16777215) { 10057 i4 = 31; 10058 } else { 10059 i20 = (i4 + 1048320 | 0) >>> 16 & 8; 10060 i21 = i4 << i20; 10061 i19 = (i21 + 520192 | 0) >>> 16 & 4; 10062 i21 = i21 << i19; 10063 i4 = (i21 + 245760 | 0) >>> 16 & 2; 10064 i4 = 14 - (i19 | i20 | i4) + (i21 << i4 >>> 15) | 0; 10065 i4 = i11 >>> (i4 + 7 | 0) & 1 | i4 << 1; 10066 } 10067 } else { 10068 i4 = 0; 10069 } 10070 i5 = 7464 + (i4 << 2) | 0; 10071 HEAP32[i2 + 28 >> 2] = i4; 10072 HEAP32[i2 + 20 >> 2] = 0; 10073 HEAP32[i2 + 16 >> 2] = 0; 10074 i7 = HEAP32[7164 >> 2] | 0; 10075 i6 = 1 << i4; 10076 L199 : do { 10077 if ((i7 & i6 | 0) != 0) { 10078 i5 = HEAP32[i5 >> 2] | 0; 10079 if ((i4 | 0) == 31) { 10080 i4 = 0; 10081 } else { 10082 i4 = 25 - (i4 >>> 1) | 0; 10083 } 10084 L204 : do { 10085 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) != (i11 | 0)) { 10086 i4 = i11 << i4; 10087 i7 = i5; 10088 while (1) { 10089 i6 = i7 + (i4 >>> 31 << 2) + 16 | 0; 10090 i5 = HEAP32[i6 >> 2] | 0; 10091 if ((i5 | 0) == 0) { 10092 break; 10093 } 10094 if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i11 | 0)) { 10095 i3 = i5; 10096 break L204; 10097 } else { 10098 i4 = i4 << 1; 10099 i7 = i5; 10100 } 10101 } 10102 if (i6 >>> 0 < (HEAP32[7176 >> 2] | 0) >>> 0) { 10103 _abort(); 10104 } else { 10105 HEAP32[i6 >> 2] = i2; 10106 HEAP32[i2 + 24 >> 2] = i7; 10107 HEAP32[i2 + 12 >> 2] = i2; 10108 HEAP32[i2 + 8 >> 2] = i2; 10109 break L199; 10110 } 10111 } else { 10112 i3 = i5; 10113 } 10114 } while (0); 10115 i5 = i3 + 8 | 0; 10116 i4 = HEAP32[i5 >> 2] | 0; 10117 i6 = HEAP32[7176 >> 2] | 0; 10118 if (i3 >>> 0 < i6 >>> 0) { 10119 _abort(); 10120 } 10121 if (i4 >>> 0 < i6 >>> 0) { 10122 _abort(); 10123 } else { 10124 HEAP32[i4 + 12 >> 2] = i2; 10125 HEAP32[i5 >> 2] = i2; 10126 HEAP32[i2 + 8 >> 2] = i4; 10127 HEAP32[i2 + 12 >> 2] = i3; 10128 HEAP32[i2 + 24 >> 2] = 0; 10129 break; 10130 } 10131 } else { 10132 HEAP32[7164 >> 2] = i7 | i6; 10133 HEAP32[i5 >> 2] = i2; 10134 HEAP32[i2 + 24 >> 2] = i5; 10135 HEAP32[i2 + 12 >> 2] = i2; 10136 HEAP32[i2 + 8 >> 2] = i2; 10137 } 10138 } while (0); 10139 i21 = (HEAP32[7192 >> 2] | 0) + -1 | 0; 10140 HEAP32[7192 >> 2] = i21; 10141 if ((i21 | 0) == 0) { 10142 i2 = 7616 | 0; 10143 } else { 10144 STACKTOP = i1; 10145 return; 10146 } 10147 while (1) { 10148 i2 = HEAP32[i2 >> 2] | 0; 10149 if ((i2 | 0) == 0) { 10150 break; 10151 } else { 10152 i2 = i2 + 8 | 0; 10153 } 10154 } 10155 HEAP32[7192 >> 2] = -1; 10156 STACKTOP = i1; 10157 return; 10158 } 10159 function __ZNSt3__127__insertion_sort_incompleteIRPFbRK6b2PairS3_EPS1_EEbT0_S8_T_(i3, i4, i2) { 10160 i3 = i3 | 0; 10161 i4 = i4 | 0; 10162 i2 = i2 | 0; 10163 var i1 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0; 10164 i1 = STACKTOP; 10165 STACKTOP = STACKTOP + 32 | 0; 10166 i7 = i1 + 12 | 0; 10167 i6 = i1; 10168 switch ((i4 - i3 | 0) / 12 | 0 | 0) { 10169 case 5: 10170 { 10171 i6 = i3 + 12 | 0; 10172 i8 = i3 + 24 | 0; 10173 i5 = i3 + 36 | 0; 10174 i4 = i4 + -12 | 0; 10175 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i3, i6, i8, i5, i2) | 0; 10176 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0)) { 10177 i10 = 1; 10178 STACKTOP = i1; 10179 return i10 | 0; 10180 } 10181 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 10182 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 10183 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 10184 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 10185 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 10186 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 10187 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10188 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10189 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10190 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i8) | 0)) { 10191 i10 = 1; 10192 STACKTOP = i1; 10193 return i10 | 0; 10194 } 10195 HEAP32[i7 + 0 >> 2] = HEAP32[i8 + 0 >> 2]; 10196 HEAP32[i7 + 4 >> 2] = HEAP32[i8 + 4 >> 2]; 10197 HEAP32[i7 + 8 >> 2] = HEAP32[i8 + 8 >> 2]; 10198 HEAP32[i8 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 10199 HEAP32[i8 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 10200 HEAP32[i8 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 10201 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10202 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10203 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10204 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i6) | 0)) { 10205 i10 = 1; 10206 STACKTOP = i1; 10207 return i10 | 0; 10208 } 10209 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 10210 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 10211 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 10212 HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2]; 10213 HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2]; 10214 HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2]; 10215 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10216 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10217 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10218 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i3) | 0)) { 10219 i10 = 1; 10220 STACKTOP = i1; 10221 return i10 | 0; 10222 } 10223 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 10224 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 10225 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 10226 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 10227 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 10228 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 10229 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10230 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10231 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10232 i10 = 1; 10233 STACKTOP = i1; 10234 return i10 | 0; 10235 } 10236 case 4: 10237 { 10238 __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i3, i3 + 12 | 0, i3 + 24 | 0, i4 + -12 | 0, i2) | 0; 10239 i10 = 1; 10240 STACKTOP = i1; 10241 return i10 | 0; 10242 } 10243 case 3: 10244 { 10245 i5 = i3 + 12 | 0; 10246 i4 = i4 + -12 | 0; 10247 i10 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i3) | 0; 10248 i6 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0; 10249 if (!i10) { 10250 if (!i6) { 10251 i10 = 1; 10252 STACKTOP = i1; 10253 return i10 | 0; 10254 } 10255 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 10256 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 10257 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 10258 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 10259 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 10260 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 10261 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10262 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10263 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10264 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i5, i3) | 0)) { 10265 i10 = 1; 10266 STACKTOP = i1; 10267 return i10 | 0; 10268 } 10269 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 10270 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 10271 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 10272 HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 10273 HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 10274 HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 10275 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10276 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10277 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10278 i10 = 1; 10279 STACKTOP = i1; 10280 return i10 | 0; 10281 } 10282 if (i6) { 10283 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 10284 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 10285 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 10286 HEAP32[i3 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 10287 HEAP32[i3 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 10288 HEAP32[i3 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 10289 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10290 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10291 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10292 i10 = 1; 10293 STACKTOP = i1; 10294 return i10 | 0; 10295 } 10296 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 10297 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 10298 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 10299 HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 10300 HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 10301 HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 10302 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10303 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10304 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10305 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i5) | 0)) { 10306 i10 = 1; 10307 STACKTOP = i1; 10308 return i10 | 0; 10309 } 10310 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 10311 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 10312 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 10313 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 10314 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 10315 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 10316 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10317 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10318 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10319 i10 = 1; 10320 STACKTOP = i1; 10321 return i10 | 0; 10322 } 10323 case 2: 10324 { 10325 i4 = i4 + -12 | 0; 10326 if (!(FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i4, i3) | 0)) { 10327 i10 = 1; 10328 STACKTOP = i1; 10329 return i10 | 0; 10330 } 10331 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 10332 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 10333 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 10334 HEAP32[i3 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 10335 HEAP32[i3 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 10336 HEAP32[i3 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 10337 HEAP32[i4 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10338 HEAP32[i4 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10339 HEAP32[i4 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10340 i10 = 1; 10341 STACKTOP = i1; 10342 return i10 | 0; 10343 } 10344 case 1: 10345 case 0: 10346 { 10347 i10 = 1; 10348 STACKTOP = i1; 10349 return i10 | 0; 10350 } 10351 default: 10352 { 10353 i9 = i3 + 24 | 0; 10354 i10 = i3 + 12 | 0; 10355 i11 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i10, i3) | 0; 10356 i8 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i9, i10) | 0; 10357 do { 10358 if (i11) { 10359 if (i8) { 10360 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 10361 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 10362 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 10363 HEAP32[i3 + 0 >> 2] = HEAP32[i9 + 0 >> 2]; 10364 HEAP32[i3 + 4 >> 2] = HEAP32[i9 + 4 >> 2]; 10365 HEAP32[i3 + 8 >> 2] = HEAP32[i9 + 8 >> 2]; 10366 HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10367 HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10368 HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10369 break; 10370 } 10371 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 10372 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 10373 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 10374 HEAP32[i3 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 10375 HEAP32[i3 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 10376 HEAP32[i3 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 10377 HEAP32[i10 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10378 HEAP32[i10 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10379 HEAP32[i10 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10380 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i9, i10) | 0) { 10381 HEAP32[i7 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 10382 HEAP32[i7 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 10383 HEAP32[i7 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 10384 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2]; 10385 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2]; 10386 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2]; 10387 HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10388 HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10389 HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10390 } 10391 } else { 10392 if (i8) { 10393 HEAP32[i7 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 10394 HEAP32[i7 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 10395 HEAP32[i7 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 10396 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2]; 10397 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2]; 10398 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2]; 10399 HEAP32[i9 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10400 HEAP32[i9 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10401 HEAP32[i9 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10402 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i10, i3) | 0) { 10403 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 10404 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 10405 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 10406 HEAP32[i3 + 0 >> 2] = HEAP32[i10 + 0 >> 2]; 10407 HEAP32[i3 + 4 >> 2] = HEAP32[i10 + 4 >> 2]; 10408 HEAP32[i3 + 8 >> 2] = HEAP32[i10 + 8 >> 2]; 10409 HEAP32[i10 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10410 HEAP32[i10 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10411 HEAP32[i10 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10412 } 10413 } 10414 } 10415 } while (0); 10416 i7 = i3 + 36 | 0; 10417 if ((i7 | 0) == (i4 | 0)) { 10418 i11 = 1; 10419 STACKTOP = i1; 10420 return i11 | 0; 10421 } 10422 i8 = 0; 10423 while (1) { 10424 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i9) | 0) { 10425 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 10426 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 10427 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 10428 i10 = i7; 10429 while (1) { 10430 HEAP32[i10 + 0 >> 2] = HEAP32[i9 + 0 >> 2]; 10431 HEAP32[i10 + 4 >> 2] = HEAP32[i9 + 4 >> 2]; 10432 HEAP32[i10 + 8 >> 2] = HEAP32[i9 + 8 >> 2]; 10433 if ((i9 | 0) == (i3 | 0)) { 10434 break; 10435 } 10436 i10 = i9 + -12 | 0; 10437 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i10) | 0) { 10438 i11 = i9; 10439 i9 = i10; 10440 i10 = i11; 10441 } else { 10442 break; 10443 } 10444 } 10445 HEAP32[i9 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 10446 HEAP32[i9 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 10447 HEAP32[i9 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 10448 i8 = i8 + 1 | 0; 10449 if ((i8 | 0) == 8) { 10450 break; 10451 } 10452 } 10453 i9 = i7 + 12 | 0; 10454 if ((i9 | 0) == (i4 | 0)) { 10455 i2 = 1; 10456 i5 = 35; 10457 break; 10458 } else { 10459 i11 = i7; 10460 i7 = i9; 10461 i9 = i11; 10462 } 10463 } 10464 if ((i5 | 0) == 35) { 10465 STACKTOP = i1; 10466 return i2 | 0; 10467 } 10468 i11 = (i7 + 12 | 0) == (i4 | 0); 10469 STACKTOP = i1; 10470 return i11 | 0; 10471 } 10472 } 10473 return 0; 10474 } 10475 function __ZN13b2DynamicTree7BalanceEi(i11, i6) { 10476 i11 = i11 | 0; 10477 i6 = i6 | 0; 10478 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; 10479 i1 = STACKTOP; 10480 if ((i6 | 0) == -1) { 10481 ___assert_fail(3216, 2944, 382, 3232); 10482 } 10483 i5 = HEAP32[i11 + 4 >> 2] | 0; 10484 i13 = i5 + (i6 * 36 | 0) | 0; 10485 i18 = i5 + (i6 * 36 | 0) + 24 | 0; 10486 i8 = HEAP32[i18 >> 2] | 0; 10487 if ((i8 | 0) == -1) { 10488 i21 = i6; 10489 STACKTOP = i1; 10490 return i21 | 0; 10491 } 10492 i2 = i5 + (i6 * 36 | 0) + 32 | 0; 10493 if ((HEAP32[i2 >> 2] | 0) < 2) { 10494 i21 = i6; 10495 STACKTOP = i1; 10496 return i21 | 0; 10497 } 10498 i20 = i5 + (i6 * 36 | 0) + 28 | 0; 10499 i7 = HEAP32[i20 >> 2] | 0; 10500 if (!((i8 | 0) > -1)) { 10501 ___assert_fail(3240, 2944, 392, 3232); 10502 } 10503 i12 = HEAP32[i11 + 12 >> 2] | 0; 10504 if ((i8 | 0) >= (i12 | 0)) { 10505 ___assert_fail(3240, 2944, 392, 3232); 10506 } 10507 if (!((i7 | 0) > -1 & (i7 | 0) < (i12 | 0))) { 10508 ___assert_fail(3272, 2944, 393, 3232); 10509 } 10510 i9 = i5 + (i8 * 36 | 0) | 0; 10511 i10 = i5 + (i7 * 36 | 0) | 0; 10512 i3 = i5 + (i7 * 36 | 0) + 32 | 0; 10513 i4 = i5 + (i8 * 36 | 0) + 32 | 0; 10514 i14 = (HEAP32[i3 >> 2] | 0) - (HEAP32[i4 >> 2] | 0) | 0; 10515 if ((i14 | 0) > 1) { 10516 i21 = i5 + (i7 * 36 | 0) + 24 | 0; 10517 i14 = HEAP32[i21 >> 2] | 0; 10518 i18 = i5 + (i7 * 36 | 0) + 28 | 0; 10519 i15 = HEAP32[i18 >> 2] | 0; 10520 i16 = i5 + (i14 * 36 | 0) | 0; 10521 i17 = i5 + (i15 * 36 | 0) | 0; 10522 if (!((i14 | 0) > -1 & (i14 | 0) < (i12 | 0))) { 10523 ___assert_fail(3304, 2944, 407, 3232); 10524 } 10525 if (!((i15 | 0) > -1 & (i15 | 0) < (i12 | 0))) { 10526 ___assert_fail(3336, 2944, 408, 3232); 10527 } 10528 HEAP32[i21 >> 2] = i6; 10529 i21 = i5 + (i6 * 36 | 0) + 20 | 0; 10530 i12 = i5 + (i7 * 36 | 0) + 20 | 0; 10531 HEAP32[i12 >> 2] = HEAP32[i21 >> 2]; 10532 HEAP32[i21 >> 2] = i7; 10533 i12 = HEAP32[i12 >> 2] | 0; 10534 do { 10535 if (!((i12 | 0) == -1)) { 10536 i11 = i5 + (i12 * 36 | 0) + 24 | 0; 10537 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) { 10538 HEAP32[i11 >> 2] = i7; 10539 break; 10540 } 10541 i11 = i5 + (i12 * 36 | 0) + 28 | 0; 10542 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) { 10543 HEAP32[i11 >> 2] = i7; 10544 break; 10545 } else { 10546 ___assert_fail(3368, 2944, 424, 3232); 10547 } 10548 } else { 10549 HEAP32[i11 >> 2] = i7; 10550 } 10551 } while (0); 10552 i11 = i5 + (i14 * 36 | 0) + 32 | 0; 10553 i12 = i5 + (i15 * 36 | 0) + 32 | 0; 10554 if ((HEAP32[i11 >> 2] | 0) > (HEAP32[i12 >> 2] | 0)) { 10555 HEAP32[i18 >> 2] = i14; 10556 HEAP32[i20 >> 2] = i15; 10557 HEAP32[i5 + (i15 * 36 | 0) + 20 >> 2] = i6; 10558 d19 = +HEAPF32[i9 >> 2]; 10559 d22 = +HEAPF32[i17 >> 2]; 10560 d19 = d19 < d22 ? d19 : d22; 10561 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 4 >> 2]; 10562 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2]; 10563 d24 = +d19; 10564 d23 = +(d23 < d22 ? d23 : d22); 10565 i21 = i13; 10566 HEAPF32[i21 >> 2] = d24; 10567 HEAPF32[i21 + 4 >> 2] = d23; 10568 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 8 >> 2]; 10569 d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2]; 10570 d22 = +HEAPF32[i5 + (i8 * 36 | 0) + 12 >> 2]; 10571 d25 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2]; 10572 d23 = +(d23 > d24 ? d23 : d24); 10573 d24 = +(d22 > d25 ? d22 : d25); 10574 i21 = i5 + (i6 * 36 | 0) + 8 | 0; 10575 HEAPF32[i21 >> 2] = d23; 10576 HEAPF32[i21 + 4 >> 2] = d24; 10577 d24 = +HEAPF32[i16 >> 2]; 10578 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2]; 10579 d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2]; 10580 d19 = +(d19 < d24 ? d19 : d24); 10581 d22 = +(d22 < d23 ? d22 : d23); 10582 i21 = i10; 10583 HEAPF32[i21 >> 2] = d19; 10584 HEAPF32[i21 + 4 >> 2] = d22; 10585 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2]; 10586 d19 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2]; 10587 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2]; 10588 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2]; 10589 d19 = +(d22 > d19 ? d22 : d19); 10590 d25 = +(d23 > d24 ? d23 : d24); 10591 i5 = i5 + (i7 * 36 | 0) + 8 | 0; 10592 HEAPF32[i5 >> 2] = d19; 10593 HEAPF32[i5 + 4 >> 2] = d25; 10594 i4 = HEAP32[i4 >> 2] | 0; 10595 i5 = HEAP32[i12 >> 2] | 0; 10596 i4 = ((i4 | 0) > (i5 | 0) ? i4 : i5) + 1 | 0; 10597 HEAP32[i2 >> 2] = i4; 10598 i2 = HEAP32[i11 >> 2] | 0; 10599 i2 = (i4 | 0) > (i2 | 0) ? i4 : i2; 10600 } else { 10601 HEAP32[i18 >> 2] = i15; 10602 HEAP32[i20 >> 2] = i14; 10603 HEAP32[i5 + (i14 * 36 | 0) + 20 >> 2] = i6; 10604 d19 = +HEAPF32[i9 >> 2]; 10605 d22 = +HEAPF32[i16 >> 2]; 10606 d19 = d19 < d22 ? d19 : d22; 10607 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 4 >> 2]; 10608 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2]; 10609 d22 = +d19; 10610 d23 = +(d23 < d24 ? d23 : d24); 10611 i21 = i13; 10612 HEAPF32[i21 >> 2] = d22; 10613 HEAPF32[i21 + 4 >> 2] = d23; 10614 d23 = +HEAPF32[i5 + (i8 * 36 | 0) + 8 >> 2]; 10615 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2]; 10616 d22 = +HEAPF32[i5 + (i8 * 36 | 0) + 12 >> 2]; 10617 d25 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2]; 10618 d23 = +(d23 > d24 ? d23 : d24); 10619 d24 = +(d22 > d25 ? d22 : d25); 10620 i21 = i5 + (i6 * 36 | 0) + 8 | 0; 10621 HEAPF32[i21 >> 2] = d23; 10622 HEAPF32[i21 + 4 >> 2] = d24; 10623 d24 = +HEAPF32[i17 >> 2]; 10624 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2]; 10625 d23 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2]; 10626 d19 = +(d19 < d24 ? d19 : d24); 10627 d23 = +(d22 < d23 ? d22 : d23); 10628 i21 = i10; 10629 HEAPF32[i21 >> 2] = d19; 10630 HEAPF32[i21 + 4 >> 2] = d23; 10631 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2]; 10632 d19 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2]; 10633 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2]; 10634 d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2]; 10635 d19 = +(d23 > d19 ? d23 : d19); 10636 d25 = +(d22 > d24 ? d22 : d24); 10637 i5 = i5 + (i7 * 36 | 0) + 8 | 0; 10638 HEAPF32[i5 >> 2] = d19; 10639 HEAPF32[i5 + 4 >> 2] = d25; 10640 i4 = HEAP32[i4 >> 2] | 0; 10641 i5 = HEAP32[i11 >> 2] | 0; 10642 i4 = ((i4 | 0) > (i5 | 0) ? i4 : i5) + 1 | 0; 10643 HEAP32[i2 >> 2] = i4; 10644 i2 = HEAP32[i12 >> 2] | 0; 10645 i2 = (i4 | 0) > (i2 | 0) ? i4 : i2; 10646 } 10647 HEAP32[i3 >> 2] = i2 + 1; 10648 i21 = i7; 10649 STACKTOP = i1; 10650 return i21 | 0; 10651 } 10652 if (!((i14 | 0) < -1)) { 10653 i21 = i6; 10654 STACKTOP = i1; 10655 return i21 | 0; 10656 } 10657 i21 = i5 + (i8 * 36 | 0) + 24 | 0; 10658 i14 = HEAP32[i21 >> 2] | 0; 10659 i20 = i5 + (i8 * 36 | 0) + 28 | 0; 10660 i15 = HEAP32[i20 >> 2] | 0; 10661 i17 = i5 + (i14 * 36 | 0) | 0; 10662 i16 = i5 + (i15 * 36 | 0) | 0; 10663 if (!((i14 | 0) > -1 & (i14 | 0) < (i12 | 0))) { 10664 ___assert_fail(3400, 2944, 467, 3232); 10665 } 10666 if (!((i15 | 0) > -1 & (i15 | 0) < (i12 | 0))) { 10667 ___assert_fail(3432, 2944, 468, 3232); 10668 } 10669 HEAP32[i21 >> 2] = i6; 10670 i21 = i5 + (i6 * 36 | 0) + 20 | 0; 10671 i12 = i5 + (i8 * 36 | 0) + 20 | 0; 10672 HEAP32[i12 >> 2] = HEAP32[i21 >> 2]; 10673 HEAP32[i21 >> 2] = i8; 10674 i12 = HEAP32[i12 >> 2] | 0; 10675 do { 10676 if (!((i12 | 0) == -1)) { 10677 i11 = i5 + (i12 * 36 | 0) + 24 | 0; 10678 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) { 10679 HEAP32[i11 >> 2] = i8; 10680 break; 10681 } 10682 i11 = i5 + (i12 * 36 | 0) + 28 | 0; 10683 if ((HEAP32[i11 >> 2] | 0) == (i6 | 0)) { 10684 HEAP32[i11 >> 2] = i8; 10685 break; 10686 } else { 10687 ___assert_fail(3464, 2944, 484, 3232); 10688 } 10689 } else { 10690 HEAP32[i11 >> 2] = i8; 10691 } 10692 } while (0); 10693 i12 = i5 + (i14 * 36 | 0) + 32 | 0; 10694 i11 = i5 + (i15 * 36 | 0) + 32 | 0; 10695 if ((HEAP32[i12 >> 2] | 0) > (HEAP32[i11 >> 2] | 0)) { 10696 HEAP32[i20 >> 2] = i14; 10697 HEAP32[i18 >> 2] = i15; 10698 HEAP32[i5 + (i15 * 36 | 0) + 20 >> 2] = i6; 10699 d19 = +HEAPF32[i10 >> 2]; 10700 d22 = +HEAPF32[i16 >> 2]; 10701 d19 = d19 < d22 ? d19 : d22; 10702 d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 4 >> 2]; 10703 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2]; 10704 d24 = +d19; 10705 d23 = +(d23 < d22 ? d23 : d22); 10706 i21 = i13; 10707 HEAPF32[i21 >> 2] = d24; 10708 HEAPF32[i21 + 4 >> 2] = d23; 10709 d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 8 >> 2]; 10710 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2]; 10711 d24 = +HEAPF32[i5 + (i7 * 36 | 0) + 12 >> 2]; 10712 d25 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2]; 10713 d22 = +(d23 > d22 ? d23 : d22); 10714 d24 = +(d24 > d25 ? d24 : d25); 10715 i21 = i5 + (i6 * 36 | 0) + 8 | 0; 10716 HEAPF32[i21 >> 2] = d22; 10717 HEAPF32[i21 + 4 >> 2] = d24; 10718 d24 = +HEAPF32[i17 >> 2]; 10719 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2]; 10720 d22 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2]; 10721 d19 = +(d19 < d24 ? d19 : d24); 10722 d22 = +(d23 < d22 ? d23 : d22); 10723 i21 = i9; 10724 HEAPF32[i21 >> 2] = d19; 10725 HEAPF32[i21 + 4 >> 2] = d22; 10726 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2]; 10727 d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2]; 10728 d19 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2]; 10729 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2]; 10730 d22 = +(d22 > d23 ? d22 : d23); 10731 d25 = +(d19 > d24 ? d19 : d24); 10732 i5 = i5 + (i8 * 36 | 0) + 8 | 0; 10733 HEAPF32[i5 >> 2] = d22; 10734 HEAPF32[i5 + 4 >> 2] = d25; 10735 i3 = HEAP32[i3 >> 2] | 0; 10736 i5 = HEAP32[i11 >> 2] | 0; 10737 i3 = ((i3 | 0) > (i5 | 0) ? i3 : i5) + 1 | 0; 10738 HEAP32[i2 >> 2] = i3; 10739 i2 = HEAP32[i12 >> 2] | 0; 10740 i2 = (i3 | 0) > (i2 | 0) ? i3 : i2; 10741 } else { 10742 HEAP32[i20 >> 2] = i15; 10743 HEAP32[i18 >> 2] = i14; 10744 HEAP32[i5 + (i14 * 36 | 0) + 20 >> 2] = i6; 10745 d19 = +HEAPF32[i10 >> 2]; 10746 d22 = +HEAPF32[i17 >> 2]; 10747 d19 = d19 < d22 ? d19 : d22; 10748 d23 = +HEAPF32[i5 + (i7 * 36 | 0) + 4 >> 2]; 10749 d24 = +HEAPF32[i5 + (i14 * 36 | 0) + 4 >> 2]; 10750 d22 = +d19; 10751 d24 = +(d23 < d24 ? d23 : d24); 10752 i21 = i13; 10753 HEAPF32[i21 >> 2] = d22; 10754 HEAPF32[i21 + 4 >> 2] = d24; 10755 d24 = +HEAPF32[i5 + (i7 * 36 | 0) + 8 >> 2]; 10756 d23 = +HEAPF32[i5 + (i14 * 36 | 0) + 8 >> 2]; 10757 d22 = +HEAPF32[i5 + (i7 * 36 | 0) + 12 >> 2]; 10758 d25 = +HEAPF32[i5 + (i14 * 36 | 0) + 12 >> 2]; 10759 d23 = +(d24 > d23 ? d24 : d23); 10760 d24 = +(d22 > d25 ? d22 : d25); 10761 i21 = i5 + (i6 * 36 | 0) + 8 | 0; 10762 HEAPF32[i21 >> 2] = d23; 10763 HEAPF32[i21 + 4 >> 2] = d24; 10764 d24 = +HEAPF32[i16 >> 2]; 10765 d23 = +HEAPF32[i5 + (i6 * 36 | 0) + 4 >> 2]; 10766 d22 = +HEAPF32[i5 + (i15 * 36 | 0) + 4 >> 2]; 10767 d19 = +(d19 < d24 ? d19 : d24); 10768 d22 = +(d23 < d22 ? d23 : d22); 10769 i21 = i9; 10770 HEAPF32[i21 >> 2] = d19; 10771 HEAPF32[i21 + 4 >> 2] = d22; 10772 d22 = +HEAPF32[i5 + (i6 * 36 | 0) + 8 >> 2]; 10773 d23 = +HEAPF32[i5 + (i15 * 36 | 0) + 8 >> 2]; 10774 d19 = +HEAPF32[i5 + (i6 * 36 | 0) + 12 >> 2]; 10775 d24 = +HEAPF32[i5 + (i15 * 36 | 0) + 12 >> 2]; 10776 d22 = +(d22 > d23 ? d22 : d23); 10777 d25 = +(d19 > d24 ? d19 : d24); 10778 i5 = i5 + (i8 * 36 | 0) + 8 | 0; 10779 HEAPF32[i5 >> 2] = d22; 10780 HEAPF32[i5 + 4 >> 2] = d25; 10781 i3 = HEAP32[i3 >> 2] | 0; 10782 i5 = HEAP32[i12 >> 2] | 0; 10783 i3 = ((i3 | 0) > (i5 | 0) ? i3 : i5) + 1 | 0; 10784 HEAP32[i2 >> 2] = i3; 10785 i2 = HEAP32[i11 >> 2] | 0; 10786 i2 = (i3 | 0) > (i2 | 0) ? i3 : i2; 10787 } 10788 HEAP32[i4 >> 2] = i2 + 1; 10789 i21 = i8; 10790 STACKTOP = i1; 10791 return i21 | 0; 10792 } 10793 function __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i2, i5, i3) { 10794 i2 = i2 | 0; 10795 i5 = i5 | 0; 10796 i3 = i3 | 0; 10797 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; 10798 i1 = STACKTOP; 10799 STACKTOP = STACKTOP + 176 | 0; 10800 i11 = i1 + 152 | 0; 10801 i10 = i1 + 136 | 0; 10802 i4 = i1 + 24 | 0; 10803 i14 = i1 + 12 | 0; 10804 i15 = i1; 10805 HEAP32[652] = (HEAP32[652] | 0) + 1; 10806 i9 = i3 + 28 | 0; 10807 i31 = i3 + 56 | 0; 10808 HEAP32[i11 + 0 >> 2] = HEAP32[i31 + 0 >> 2]; 10809 HEAP32[i11 + 4 >> 2] = HEAP32[i31 + 4 >> 2]; 10810 HEAP32[i11 + 8 >> 2] = HEAP32[i31 + 8 >> 2]; 10811 HEAP32[i11 + 12 >> 2] = HEAP32[i31 + 12 >> 2]; 10812 i31 = i3 + 72 | 0; 10813 HEAP32[i10 + 0 >> 2] = HEAP32[i31 + 0 >> 2]; 10814 HEAP32[i10 + 4 >> 2] = HEAP32[i31 + 4 >> 2]; 10815 HEAP32[i10 + 8 >> 2] = HEAP32[i31 + 8 >> 2]; 10816 HEAP32[i10 + 12 >> 2] = HEAP32[i31 + 12 >> 2]; 10817 __ZN9b2Simplex9ReadCacheEPK14b2SimplexCachePK15b2DistanceProxyRK11b2TransformS5_S8_(i4, i5, i3, i11, i9, i10); 10818 i9 = i4 + 108 | 0; 10819 i31 = HEAP32[i9 >> 2] | 0; 10820 if ((i31 | 0) == 3 | (i31 | 0) == 2 | (i31 | 0) == 1) { 10821 i8 = i4 + 16 | 0; 10822 i6 = i4 + 20 | 0; 10823 d17 = +HEAPF32[i11 + 12 >> 2]; 10824 d18 = +HEAPF32[i11 + 8 >> 2]; 10825 i13 = i3 + 16 | 0; 10826 i12 = i3 + 20 | 0; 10827 d16 = +HEAPF32[i11 >> 2]; 10828 d21 = +HEAPF32[i11 + 4 >> 2]; 10829 d19 = +HEAPF32[i10 + 12 >> 2]; 10830 d22 = +HEAPF32[i10 + 8 >> 2]; 10831 i23 = i3 + 44 | 0; 10832 i20 = i3 + 48 | 0; 10833 d24 = +HEAPF32[i10 >> 2]; 10834 d25 = +HEAPF32[i10 + 4 >> 2]; 10835 i11 = i4 + 52 | 0; 10836 i10 = i4 + 56 | 0; 10837 i30 = i4 + 16 | 0; 10838 i27 = i4 + 36 | 0; 10839 i26 = i4 + 52 | 0; 10840 i29 = i4 + 24 | 0; 10841 i28 = i4 + 60 | 0; 10842 i33 = 0; 10843 L3 : while (1) { 10844 i32 = (i31 | 0) > 0; 10845 if (i32) { 10846 i34 = 0; 10847 do { 10848 HEAP32[i14 + (i34 << 2) >> 2] = HEAP32[i4 + (i34 * 36 | 0) + 28 >> 2]; 10849 HEAP32[i15 + (i34 << 2) >> 2] = HEAP32[i4 + (i34 * 36 | 0) + 32 >> 2]; 10850 i34 = i34 + 1 | 0; 10851 } while ((i34 | 0) != (i31 | 0)); 10852 } 10853 do { 10854 if ((i31 | 0) == 2) { 10855 i46 = i30; 10856 d45 = +HEAPF32[i46 >> 2]; 10857 d36 = +HEAPF32[i46 + 4 >> 2]; 10858 i46 = i26; 10859 d38 = +HEAPF32[i46 >> 2]; 10860 d37 = +HEAPF32[i46 + 4 >> 2]; 10861 d43 = d38 - d45; 10862 d44 = d37 - d36; 10863 d36 = d45 * d43 + d36 * d44; 10864 if (d36 >= -0.0) { 10865 HEAPF32[i29 >> 2] = 1.0; 10866 HEAP32[i9 >> 2] = 1; 10867 i35 = 17; 10868 break; 10869 } 10870 d37 = d38 * d43 + d37 * d44; 10871 if (!(d37 <= 0.0)) { 10872 d45 = 1.0 / (d37 - d36); 10873 HEAPF32[i29 >> 2] = d37 * d45; 10874 HEAPF32[i28 >> 2] = -(d36 * d45); 10875 HEAP32[i9 >> 2] = 2; 10876 i35 = 18; 10877 break; 10878 } else { 10879 HEAPF32[i28 >> 2] = 1.0; 10880 HEAP32[i9 >> 2] = 1; 10881 i34 = i4 + 0 | 0; 10882 i39 = i27 + 0 | 0; 10883 i35 = i34 + 36 | 0; 10884 do { 10885 HEAP32[i34 >> 2] = HEAP32[i39 >> 2]; 10886 i34 = i34 + 4 | 0; 10887 i39 = i39 + 4 | 0; 10888 } while ((i34 | 0) < (i35 | 0)); 10889 i35 = 17; 10890 break; 10891 } 10892 } else if ((i31 | 0) == 3) { 10893 __ZN9b2Simplex6Solve3Ev(i4); 10894 i34 = HEAP32[i9 >> 2] | 0; 10895 if ((i34 | 0) == 1) { 10896 i35 = 17; 10897 } else if ((i34 | 0) == 0) { 10898 i35 = 15; 10899 break L3; 10900 } else if ((i34 | 0) == 2) { 10901 i35 = 18; 10902 } else if ((i34 | 0) == 3) { 10903 i35 = 42; 10904 break L3; 10905 } else { 10906 i35 = 16; 10907 break L3; 10908 } 10909 } else if ((i31 | 0) == 1) { 10910 i35 = 17; 10911 } else { 10912 i35 = 13; 10913 break L3; 10914 } 10915 } while (0); 10916 do { 10917 if ((i35 | 0) == 17) { 10918 d36 = -+HEAPF32[i8 >> 2]; 10919 d37 = -+HEAPF32[i6 >> 2]; 10920 i34 = 1; 10921 } else if ((i35 | 0) == 18) { 10922 d44 = +HEAPF32[i8 >> 2]; 10923 d37 = +HEAPF32[i11 >> 2] - d44; 10924 d45 = +HEAPF32[i6 >> 2]; 10925 d36 = +HEAPF32[i10 >> 2] - d45; 10926 if (d44 * d36 - d37 * d45 > 0.0) { 10927 d36 = -d36; 10928 i34 = 2; 10929 break; 10930 } else { 10931 d37 = -d37; 10932 i34 = 2; 10933 break; 10934 } 10935 } 10936 } while (0); 10937 if (d37 * d37 + d36 * d36 < 1.4210854715202004e-14) { 10938 i35 = 42; 10939 break; 10940 } 10941 i39 = i4 + (i34 * 36 | 0) | 0; 10942 d44 = -d36; 10943 d45 = -d37; 10944 d43 = d17 * d44 + d18 * d45; 10945 d44 = d17 * d45 - d18 * d44; 10946 i40 = HEAP32[i13 >> 2] | 0; 10947 i41 = HEAP32[i12 >> 2] | 0; 10948 if ((i41 | 0) > 1) { 10949 i42 = 0; 10950 d45 = d44 * +HEAPF32[i40 + 4 >> 2] + d43 * +HEAPF32[i40 >> 2]; 10951 i46 = 1; 10952 while (1) { 10953 d38 = d43 * +HEAPF32[i40 + (i46 << 3) >> 2] + d44 * +HEAPF32[i40 + (i46 << 3) + 4 >> 2]; 10954 i35 = d38 > d45; 10955 i42 = i35 ? i46 : i42; 10956 i46 = i46 + 1 | 0; 10957 if ((i46 | 0) == (i41 | 0)) { 10958 break; 10959 } else { 10960 d45 = i35 ? d38 : d45; 10961 } 10962 } 10963 i35 = i4 + (i34 * 36 | 0) + 28 | 0; 10964 HEAP32[i35 >> 2] = i42; 10965 if (!((i42 | 0) > -1)) { 10966 i35 = 28; 10967 break; 10968 } 10969 } else { 10970 i35 = i4 + (i34 * 36 | 0) + 28 | 0; 10971 HEAP32[i35 >> 2] = 0; 10972 i42 = 0; 10973 } 10974 if ((i41 | 0) <= (i42 | 0)) { 10975 i35 = 28; 10976 break; 10977 } 10978 d45 = +HEAPF32[i40 + (i42 << 3) >> 2]; 10979 d43 = +HEAPF32[i40 + (i42 << 3) + 4 >> 2]; 10980 d38 = d16 + (d17 * d45 - d18 * d43); 10981 d44 = +d38; 10982 d43 = +(d45 * d18 + d17 * d43 + d21); 10983 i40 = i39; 10984 HEAPF32[i40 >> 2] = d44; 10985 HEAPF32[i40 + 4 >> 2] = d43; 10986 d43 = d36 * d19 + d37 * d22; 10987 d44 = d37 * d19 - d36 * d22; 10988 i40 = HEAP32[i23 >> 2] | 0; 10989 i39 = HEAP32[i20 >> 2] | 0; 10990 if ((i39 | 0) > 1) { 10991 i41 = 0; 10992 d37 = d44 * +HEAPF32[i40 + 4 >> 2] + d43 * +HEAPF32[i40 >> 2]; 10993 i42 = 1; 10994 while (1) { 10995 d36 = d43 * +HEAPF32[i40 + (i42 << 3) >> 2] + d44 * +HEAPF32[i40 + (i42 << 3) + 4 >> 2]; 10996 i46 = d36 > d37; 10997 i41 = i46 ? i42 : i41; 10998 i42 = i42 + 1 | 0; 10999 if ((i42 | 0) == (i39 | 0)) { 11000 break; 11001 } else { 11002 d37 = i46 ? d36 : d37; 11003 } 11004 } 11005 i42 = i4 + (i34 * 36 | 0) + 32 | 0; 11006 HEAP32[i42 >> 2] = i41; 11007 if (!((i41 | 0) > -1)) { 11008 i35 = 35; 11009 break; 11010 } 11011 } else { 11012 i42 = i4 + (i34 * 36 | 0) + 32 | 0; 11013 HEAP32[i42 >> 2] = 0; 11014 i41 = 0; 11015 } 11016 if ((i39 | 0) <= (i41 | 0)) { 11017 i35 = 35; 11018 break; 11019 } 11020 d37 = +HEAPF32[i40 + (i41 << 3) >> 2]; 11021 d45 = +HEAPF32[i40 + (i41 << 3) + 4 >> 2]; 11022 d44 = d24 + (d19 * d37 - d22 * d45); 11023 d43 = +d44; 11024 d45 = +(d37 * d22 + d19 * d45 + d25); 11025 i46 = i4 + (i34 * 36 | 0) + 8 | 0; 11026 HEAPF32[i46 >> 2] = d43; 11027 HEAPF32[i46 + 4 >> 2] = d45; 11028 d44 = +(d44 - d38); 11029 d45 = +(+HEAPF32[i4 + (i34 * 36 | 0) + 12 >> 2] - +HEAPF32[i4 + (i34 * 36 | 0) + 4 >> 2]); 11030 i46 = i4 + (i34 * 36 | 0) + 16 | 0; 11031 HEAPF32[i46 >> 2] = d44; 11032 HEAPF32[i46 + 4 >> 2] = d45; 11033 i33 = i33 + 1 | 0; 11034 HEAP32[654] = (HEAP32[654] | 0) + 1; 11035 if (i32) { 11036 i34 = HEAP32[i35 >> 2] | 0; 11037 i32 = 0; 11038 do { 11039 if ((i34 | 0) == (HEAP32[i14 + (i32 << 2) >> 2] | 0) ? (HEAP32[i42 >> 2] | 0) == (HEAP32[i15 + (i32 << 2) >> 2] | 0) : 0) { 11040 i35 = 42; 11041 break L3; 11042 } 11043 i32 = i32 + 1 | 0; 11044 } while ((i32 | 0) < (i31 | 0)); 11045 } 11046 i31 = (HEAP32[i9 >> 2] | 0) + 1 | 0; 11047 HEAP32[i9 >> 2] = i31; 11048 if ((i33 | 0) >= 20) { 11049 i35 = 42; 11050 break; 11051 } 11052 } 11053 if ((i35 | 0) == 13) { 11054 ___assert_fail(2712, 2672, 498, 2720); 11055 } else if ((i35 | 0) == 15) { 11056 ___assert_fail(2712, 2672, 194, 2856); 11057 } else if ((i35 | 0) == 16) { 11058 ___assert_fail(2712, 2672, 207, 2856); 11059 } else if ((i35 | 0) == 28) { 11060 ___assert_fail(2776, 2808, 103, 2840); 11061 } else if ((i35 | 0) == 35) { 11062 ___assert_fail(2776, 2808, 103, 2840); 11063 } else if ((i35 | 0) == 42) { 11064 i12 = HEAP32[656] | 0; 11065 HEAP32[656] = (i12 | 0) > (i33 | 0) ? i12 : i33; 11066 i14 = i2 + 8 | 0; 11067 __ZNK9b2Simplex16GetWitnessPointsEP6b2Vec2S1_(i4, i2, i14); 11068 d44 = +HEAPF32[i2 >> 2] - +HEAPF32[i14 >> 2]; 11069 i13 = i2 + 4 | 0; 11070 i12 = i2 + 12 | 0; 11071 d45 = +HEAPF32[i13 >> 2] - +HEAPF32[i12 >> 2]; 11072 i15 = i2 + 16 | 0; 11073 HEAPF32[i15 >> 2] = +Math_sqrt(+(d44 * d44 + d45 * d45)); 11074 HEAP32[i2 + 20 >> 2] = i33; 11075 i9 = HEAP32[i9 >> 2] | 0; 11076 if ((i9 | 0) == 2) { 11077 d45 = +HEAPF32[i8 >> 2] - +HEAPF32[i11 >> 2]; 11078 d7 = +HEAPF32[i6 >> 2] - +HEAPF32[i10 >> 2]; 11079 d7 = +Math_sqrt(+(d45 * d45 + d7 * d7)); 11080 } else if ((i9 | 0) == 3) { 11081 d7 = +HEAPF32[i8 >> 2]; 11082 d45 = +HEAPF32[i6 >> 2]; 11083 d7 = (+HEAPF32[i11 >> 2] - d7) * (+HEAPF32[i4 + 92 >> 2] - d45) - (+HEAPF32[i10 >> 2] - d45) * (+HEAPF32[i4 + 88 >> 2] - d7); 11084 } else if ((i9 | 0) == 1) { 11085 d7 = 0.0; 11086 } else if ((i9 | 0) == 0) { 11087 ___assert_fail(2712, 2672, 246, 2736); 11088 } else { 11089 ___assert_fail(2712, 2672, 259, 2736); 11090 } 11091 HEAPF32[i5 >> 2] = d7; 11092 HEAP16[i5 + 4 >> 1] = i9; 11093 i6 = 0; 11094 do { 11095 HEAP8[i5 + i6 + 6 | 0] = HEAP32[i4 + (i6 * 36 | 0) + 28 >> 2]; 11096 HEAP8[i5 + i6 + 9 | 0] = HEAP32[i4 + (i6 * 36 | 0) + 32 >> 2]; 11097 i6 = i6 + 1 | 0; 11098 } while ((i6 | 0) < (i9 | 0)); 11099 if ((HEAP8[i3 + 88 | 0] | 0) == 0) { 11100 STACKTOP = i1; 11101 return; 11102 } 11103 d7 = +HEAPF32[i3 + 24 >> 2]; 11104 d16 = +HEAPF32[i3 + 52 >> 2]; 11105 d18 = +HEAPF32[i15 >> 2]; 11106 d17 = d7 + d16; 11107 if (!(d18 > d17 & d18 > 1.1920928955078125e-7)) { 11108 d44 = +((+HEAPF32[i2 >> 2] + +HEAPF32[i14 >> 2]) * .5); 11109 d45 = +((+HEAPF32[i13 >> 2] + +HEAPF32[i12 >> 2]) * .5); 11110 i46 = i2; 11111 HEAPF32[i46 >> 2] = d44; 11112 HEAPF32[i46 + 4 >> 2] = d45; 11113 i46 = i14; 11114 HEAPF32[i46 >> 2] = d44; 11115 HEAPF32[i46 + 4 >> 2] = d45; 11116 HEAPF32[i15 >> 2] = 0.0; 11117 STACKTOP = i1; 11118 return; 11119 } 11120 HEAPF32[i15 >> 2] = d18 - d17; 11121 d18 = +HEAPF32[i14 >> 2]; 11122 d21 = +HEAPF32[i2 >> 2]; 11123 d24 = d18 - d21; 11124 d17 = +HEAPF32[i12 >> 2]; 11125 d19 = +HEAPF32[i13 >> 2]; 11126 d22 = d17 - d19; 11127 d25 = +Math_sqrt(+(d24 * d24 + d22 * d22)); 11128 if (!(d25 < 1.1920928955078125e-7)) { 11129 d45 = 1.0 / d25; 11130 d24 = d24 * d45; 11131 d22 = d22 * d45; 11132 } 11133 HEAPF32[i2 >> 2] = d7 * d24 + d21; 11134 HEAPF32[i13 >> 2] = d7 * d22 + d19; 11135 HEAPF32[i14 >> 2] = d18 - d16 * d24; 11136 HEAPF32[i12 >> 2] = d17 - d16 * d22; 11137 STACKTOP = i1; 11138 return; 11139 } 11140 } else if ((i31 | 0) == 0) { 11141 ___assert_fail(2712, 2672, 194, 2856); 11142 } else { 11143 ___assert_fail(2712, 2672, 207, 2856); 11144 } 11145 } 11146 function __ZN8b2Island5SolveEP9b2ProfileRK10b2TimeStepRK6b2Vec2b(i4, i8, i11, i17, i7) { 11147 i4 = i4 | 0; 11148 i8 = i8 | 0; 11149 i11 = i11 | 0; 11150 i17 = i17 | 0; 11151 i7 = i7 | 0; 11152 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; 11153 i3 = STACKTOP; 11154 STACKTOP = STACKTOP + 160 | 0; 11155 i6 = i3 + 128 | 0; 11156 i9 = i3 + 148 | 0; 11157 i10 = i3 + 96 | 0; 11158 i16 = i3 + 52 | 0; 11159 i2 = i3; 11160 __ZN7b2TimerC2Ev(i9); 11161 d5 = +HEAPF32[i11 >> 2]; 11162 i1 = i4 + 28 | 0; 11163 if ((HEAP32[i1 >> 2] | 0) > 0) { 11164 i13 = i4 + 8 | 0; 11165 i12 = i17 + 4 | 0; 11166 i15 = i4 + 20 | 0; 11167 i14 = i4 + 24 | 0; 11168 i19 = 0; 11169 do { 11170 i22 = HEAP32[(HEAP32[i13 >> 2] | 0) + (i19 << 2) >> 2] | 0; 11171 i18 = i22 + 44 | 0; 11172 i20 = HEAP32[i18 >> 2] | 0; 11173 i18 = HEAP32[i18 + 4 >> 2] | 0; 11174 d21 = +HEAPF32[i22 + 56 >> 2]; 11175 i30 = i22 + 64 | 0; 11176 d27 = +HEAPF32[i30 >> 2]; 11177 d24 = +HEAPF32[i30 + 4 >> 2]; 11178 d23 = +HEAPF32[i22 + 72 >> 2]; 11179 i30 = i22 + 36 | 0; 11180 HEAP32[i30 >> 2] = i20; 11181 HEAP32[i30 + 4 >> 2] = i18; 11182 HEAPF32[i22 + 52 >> 2] = d21; 11183 if ((HEAP32[i22 >> 2] | 0) == 2) { 11184 d25 = +HEAPF32[i22 + 140 >> 2]; 11185 d26 = +HEAPF32[i22 + 120 >> 2]; 11186 d28 = 1.0 - d5 * +HEAPF32[i22 + 132 >> 2]; 11187 d28 = d28 < 1.0 ? d28 : 1.0; 11188 d28 = d28 < 0.0 ? 0.0 : d28; 11189 d29 = 1.0 - d5 * +HEAPF32[i22 + 136 >> 2]; 11190 d29 = d29 < 1.0 ? d29 : 1.0; 11191 d27 = (d27 + d5 * (d25 * +HEAPF32[i17 >> 2] + d26 * +HEAPF32[i22 + 76 >> 2])) * d28; 11192 d24 = (d24 + d5 * (d25 * +HEAPF32[i12 >> 2] + d26 * +HEAPF32[i22 + 80 >> 2])) * d28; 11193 d23 = (d23 + d5 * +HEAPF32[i22 + 128 >> 2] * +HEAPF32[i22 + 84 >> 2]) * (d29 < 0.0 ? 0.0 : d29); 11194 } 11195 i30 = (HEAP32[i15 >> 2] | 0) + (i19 * 12 | 0) | 0; 11196 HEAP32[i30 >> 2] = i20; 11197 HEAP32[i30 + 4 >> 2] = i18; 11198 HEAPF32[(HEAP32[i15 >> 2] | 0) + (i19 * 12 | 0) + 8 >> 2] = d21; 11199 d28 = +d27; 11200 d29 = +d24; 11201 i30 = (HEAP32[i14 >> 2] | 0) + (i19 * 12 | 0) | 0; 11202 HEAPF32[i30 >> 2] = d28; 11203 HEAPF32[i30 + 4 >> 2] = d29; 11204 HEAPF32[(HEAP32[i14 >> 2] | 0) + (i19 * 12 | 0) + 8 >> 2] = d23; 11205 i19 = i19 + 1 | 0; 11206 } while ((i19 | 0) < (HEAP32[i1 >> 2] | 0)); 11207 } else { 11208 i14 = i4 + 24 | 0; 11209 i15 = i4 + 20 | 0; 11210 } 11211 HEAP32[i10 + 0 >> 2] = HEAP32[i11 + 0 >> 2]; 11212 HEAP32[i10 + 4 >> 2] = HEAP32[i11 + 4 >> 2]; 11213 HEAP32[i10 + 8 >> 2] = HEAP32[i11 + 8 >> 2]; 11214 HEAP32[i10 + 12 >> 2] = HEAP32[i11 + 12 >> 2]; 11215 HEAP32[i10 + 16 >> 2] = HEAP32[i11 + 16 >> 2]; 11216 HEAP32[i10 + 20 >> 2] = HEAP32[i11 + 20 >> 2]; 11217 i22 = HEAP32[i15 >> 2] | 0; 11218 HEAP32[i10 + 24 >> 2] = i22; 11219 i30 = HEAP32[i14 >> 2] | 0; 11220 HEAP32[i10 + 28 >> 2] = i30; 11221 HEAP32[i16 + 0 >> 2] = HEAP32[i11 + 0 >> 2]; 11222 HEAP32[i16 + 4 >> 2] = HEAP32[i11 + 4 >> 2]; 11223 HEAP32[i16 + 8 >> 2] = HEAP32[i11 + 8 >> 2]; 11224 HEAP32[i16 + 12 >> 2] = HEAP32[i11 + 12 >> 2]; 11225 HEAP32[i16 + 16 >> 2] = HEAP32[i11 + 16 >> 2]; 11226 HEAP32[i16 + 20 >> 2] = HEAP32[i11 + 20 >> 2]; 11227 i13 = i4 + 12 | 0; 11228 HEAP32[i16 + 24 >> 2] = HEAP32[i13 >> 2]; 11229 i12 = i4 + 36 | 0; 11230 HEAP32[i16 + 28 >> 2] = HEAP32[i12 >> 2]; 11231 HEAP32[i16 + 32 >> 2] = i22; 11232 HEAP32[i16 + 36 >> 2] = i30; 11233 HEAP32[i16 + 40 >> 2] = HEAP32[i4 >> 2]; 11234 __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i2, i16); 11235 __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i2); 11236 if ((HEAP8[i11 + 20 | 0] | 0) != 0) { 11237 __ZN15b2ContactSolver9WarmStartEv(i2); 11238 } 11239 i16 = i4 + 32 | 0; 11240 if ((HEAP32[i16 >> 2] | 0) > 0) { 11241 i18 = i4 + 16 | 0; 11242 i17 = 0; 11243 do { 11244 i30 = HEAP32[(HEAP32[i18 >> 2] | 0) + (i17 << 2) >> 2] | 0; 11245 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i30 >> 2] | 0) + 28 >> 2] & 15](i30, i10); 11246 i17 = i17 + 1 | 0; 11247 } while ((i17 | 0) < (HEAP32[i16 >> 2] | 0)); 11248 } 11249 HEAPF32[i8 + 12 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9); 11250 i17 = i11 + 12 | 0; 11251 if ((HEAP32[i17 >> 2] | 0) > 0) { 11252 i20 = i4 + 16 | 0; 11253 i19 = 0; 11254 do { 11255 if ((HEAP32[i16 >> 2] | 0) > 0) { 11256 i18 = 0; 11257 do { 11258 i30 = HEAP32[(HEAP32[i20 >> 2] | 0) + (i18 << 2) >> 2] | 0; 11259 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i30 >> 2] | 0) + 32 >> 2] & 15](i30, i10); 11260 i18 = i18 + 1 | 0; 11261 } while ((i18 | 0) < (HEAP32[i16 >> 2] | 0)); 11262 } 11263 __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i2); 11264 i19 = i19 + 1 | 0; 11265 } while ((i19 | 0) < (HEAP32[i17 >> 2] | 0)); 11266 } 11267 __ZN15b2ContactSolver13StoreImpulsesEv(i2); 11268 HEAPF32[i8 + 16 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9); 11269 if ((HEAP32[i1 >> 2] | 0) > 0) { 11270 i19 = HEAP32[i14 >> 2] | 0; 11271 i18 = 0; 11272 do { 11273 i30 = HEAP32[i15 >> 2] | 0; 11274 i17 = i30 + (i18 * 12 | 0) | 0; 11275 i22 = i17; 11276 d23 = +HEAPF32[i22 >> 2]; 11277 d21 = +HEAPF32[i22 + 4 >> 2]; 11278 d24 = +HEAPF32[i30 + (i18 * 12 | 0) + 8 >> 2]; 11279 i30 = i19 + (i18 * 12 | 0) | 0; 11280 d26 = +HEAPF32[i30 >> 2]; 11281 d27 = +HEAPF32[i30 + 4 >> 2]; 11282 d25 = +HEAPF32[i19 + (i18 * 12 | 0) + 8 >> 2]; 11283 d29 = d5 * d26; 11284 d28 = d5 * d27; 11285 d28 = d29 * d29 + d28 * d28; 11286 if (d28 > 4.0) { 11287 d29 = 2.0 / +Math_sqrt(+d28); 11288 d26 = d26 * d29; 11289 d27 = d27 * d29; 11290 } 11291 d28 = d5 * d25; 11292 if (d28 * d28 > 2.4674012660980225) { 11293 if (!(d28 > 0.0)) { 11294 d28 = -d28; 11295 } 11296 d25 = d25 * (1.5707963705062866 / d28); 11297 } 11298 d29 = +(d23 + d5 * d26); 11299 d28 = +(d21 + d5 * d27); 11300 i19 = i17; 11301 HEAPF32[i19 >> 2] = d29; 11302 HEAPF32[i19 + 4 >> 2] = d28; 11303 HEAPF32[(HEAP32[i15 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2] = d24 + d5 * d25; 11304 d28 = +d26; 11305 d29 = +d27; 11306 i19 = (HEAP32[i14 >> 2] | 0) + (i18 * 12 | 0) | 0; 11307 HEAPF32[i19 >> 2] = d28; 11308 HEAPF32[i19 + 4 >> 2] = d29; 11309 i19 = HEAP32[i14 >> 2] | 0; 11310 HEAPF32[i19 + (i18 * 12 | 0) + 8 >> 2] = d25; 11311 i18 = i18 + 1 | 0; 11312 } while ((i18 | 0) < (HEAP32[i1 >> 2] | 0)); 11313 } 11314 i11 = i11 + 16 | 0; 11315 L41 : do { 11316 if ((HEAP32[i11 >> 2] | 0) > 0) { 11317 i17 = i4 + 16 | 0; 11318 i19 = 0; 11319 while (1) { 11320 i18 = __ZN15b2ContactSolver24SolvePositionConstraintsEv(i2) | 0; 11321 if ((HEAP32[i16 >> 2] | 0) > 0) { 11322 i20 = 0; 11323 i22 = 1; 11324 do { 11325 i30 = HEAP32[(HEAP32[i17 >> 2] | 0) + (i20 << 2) >> 2] | 0; 11326 i22 = i22 & (FUNCTION_TABLE_iii[HEAP32[(HEAP32[i30 >> 2] | 0) + 36 >> 2] & 3](i30, i10) | 0); 11327 i20 = i20 + 1 | 0; 11328 } while ((i20 | 0) < (HEAP32[i16 >> 2] | 0)); 11329 } else { 11330 i22 = 1; 11331 } 11332 i19 = i19 + 1 | 0; 11333 if (i18 & i22) { 11334 i10 = 0; 11335 break L41; 11336 } 11337 if ((i19 | 0) >= (HEAP32[i11 >> 2] | 0)) { 11338 i10 = 1; 11339 break; 11340 } 11341 } 11342 } else { 11343 i10 = 1; 11344 } 11345 } while (0); 11346 if ((HEAP32[i1 >> 2] | 0) > 0) { 11347 i11 = i4 + 8 | 0; 11348 i16 = 0; 11349 do { 11350 i30 = HEAP32[(HEAP32[i11 >> 2] | 0) + (i16 << 2) >> 2] | 0; 11351 i22 = (HEAP32[i15 >> 2] | 0) + (i16 * 12 | 0) | 0; 11352 i20 = HEAP32[i22 >> 2] | 0; 11353 i22 = HEAP32[i22 + 4 >> 2] | 0; 11354 i17 = i30 + 44 | 0; 11355 HEAP32[i17 >> 2] = i20; 11356 HEAP32[i17 + 4 >> 2] = i22; 11357 d27 = +HEAPF32[(HEAP32[i15 >> 2] | 0) + (i16 * 12 | 0) + 8 >> 2]; 11358 HEAPF32[i30 + 56 >> 2] = d27; 11359 i17 = (HEAP32[i14 >> 2] | 0) + (i16 * 12 | 0) | 0; 11360 i18 = HEAP32[i17 + 4 >> 2] | 0; 11361 i19 = i30 + 64 | 0; 11362 HEAP32[i19 >> 2] = HEAP32[i17 >> 2]; 11363 HEAP32[i19 + 4 >> 2] = i18; 11364 HEAPF32[i30 + 72 >> 2] = +HEAPF32[(HEAP32[i14 >> 2] | 0) + (i16 * 12 | 0) + 8 >> 2]; 11365 d25 = +Math_sin(+d27); 11366 HEAPF32[i30 + 20 >> 2] = d25; 11367 d27 = +Math_cos(+d27); 11368 HEAPF32[i30 + 24 >> 2] = d27; 11369 d26 = +HEAPF32[i30 + 28 >> 2]; 11370 d29 = +HEAPF32[i30 + 32 >> 2]; 11371 d28 = (HEAP32[tempDoublePtr >> 2] = i20, +HEAPF32[tempDoublePtr >> 2]) - (d27 * d26 - d25 * d29); 11372 d29 = (HEAP32[tempDoublePtr >> 2] = i22, +HEAPF32[tempDoublePtr >> 2]) - (d25 * d26 + d27 * d29); 11373 d28 = +d28; 11374 d29 = +d29; 11375 i30 = i30 + 12 | 0; 11376 HEAPF32[i30 >> 2] = d28; 11377 HEAPF32[i30 + 4 >> 2] = d29; 11378 i16 = i16 + 1 | 0; 11379 } while ((i16 | 0) < (HEAP32[i1 >> 2] | 0)); 11380 } 11381 HEAPF32[i8 + 20 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i9); 11382 i9 = HEAP32[i2 + 40 >> 2] | 0; 11383 i8 = i4 + 4 | 0; 11384 if ((HEAP32[i8 >> 2] | 0) != 0 ? (HEAP32[i12 >> 2] | 0) > 0 : 0) { 11385 i11 = i6 + 16 | 0; 11386 i14 = 0; 11387 do { 11388 i15 = HEAP32[(HEAP32[i13 >> 2] | 0) + (i14 << 2) >> 2] | 0; 11389 i16 = HEAP32[i9 + (i14 * 152 | 0) + 144 >> 2] | 0; 11390 HEAP32[i11 >> 2] = i16; 11391 if ((i16 | 0) > 0) { 11392 i17 = 0; 11393 do { 11394 HEAPF32[i6 + (i17 << 2) >> 2] = +HEAPF32[i9 + (i14 * 152 | 0) + (i17 * 36 | 0) + 16 >> 2]; 11395 HEAPF32[i6 + (i17 << 2) + 8 >> 2] = +HEAPF32[i9 + (i14 * 152 | 0) + (i17 * 36 | 0) + 20 >> 2]; 11396 i17 = i17 + 1 | 0; 11397 } while ((i17 | 0) != (i16 | 0)); 11398 } 11399 i30 = HEAP32[i8 >> 2] | 0; 11400 FUNCTION_TABLE_viii[HEAP32[(HEAP32[i30 >> 2] | 0) + 20 >> 2] & 3](i30, i15, i6); 11401 i14 = i14 + 1 | 0; 11402 } while ((i14 | 0) < (HEAP32[i12 >> 2] | 0)); 11403 } 11404 if (!i7) { 11405 __ZN15b2ContactSolverD2Ev(i2); 11406 STACKTOP = i3; 11407 return; 11408 } 11409 i7 = HEAP32[i1 >> 2] | 0; 11410 i6 = (i7 | 0) > 0; 11411 if (i6) { 11412 i8 = HEAP32[i4 + 8 >> 2] | 0; 11413 i9 = 0; 11414 d21 = 3.4028234663852886e+38; 11415 do { 11416 i11 = HEAP32[i8 + (i9 << 2) >> 2] | 0; 11417 do { 11418 if ((HEAP32[i11 >> 2] | 0) != 0) { 11419 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) { 11420 i30 = i11 + 144 | 0; 11421 d23 = d5 + +HEAPF32[i30 >> 2]; 11422 HEAPF32[i30 >> 2] = d23; 11423 d21 = d21 < d23 ? d21 : d23; 11424 break; 11425 } 11426 HEAPF32[i11 + 144 >> 2] = 0.0; 11427 d21 = 0.0; 11428 } 11429 } while (0); 11430 i9 = i9 + 1 | 0; 11431 } while ((i9 | 0) < (i7 | 0)); 11432 } else { 11433 d21 = 3.4028234663852886e+38; 11434 } 11435 if (!(d21 >= .5) | i10 | i6 ^ 1) { 11436 __ZN15b2ContactSolverD2Ev(i2); 11437 STACKTOP = i3; 11438 return; 11439 } 11440 i4 = i4 + 8 | 0; 11441 i6 = 0; 11442 do { 11443 i30 = HEAP32[(HEAP32[i4 >> 2] | 0) + (i6 << 2) >> 2] | 0; 11444 i22 = i30 + 4 | 0; 11445 HEAP16[i22 >> 1] = HEAP16[i22 >> 1] & 65533; 11446 HEAPF32[i30 + 144 >> 2] = 0.0; 11447 i30 = i30 + 64 | 0; 11448 HEAP32[i30 + 0 >> 2] = 0; 11449 HEAP32[i30 + 4 >> 2] = 0; 11450 HEAP32[i30 + 8 >> 2] = 0; 11451 HEAP32[i30 + 12 >> 2] = 0; 11452 HEAP32[i30 + 16 >> 2] = 0; 11453 HEAP32[i30 + 20 >> 2] = 0; 11454 i6 = i6 + 1 | 0; 11455 } while ((i6 | 0) < (HEAP32[i1 >> 2] | 0)); 11456 __ZN15b2ContactSolverD2Ev(i2); 11457 STACKTOP = i3; 11458 return; 11459 } 11460 function __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i4) { 11461 i4 = i4 | 0; 11462 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; 11463 i1 = STACKTOP; 11464 i2 = i4 + 48 | 0; 11465 if ((HEAP32[i2 >> 2] | 0) <= 0) { 11466 STACKTOP = i1; 11467 return; 11468 } 11469 i3 = i4 + 40 | 0; 11470 i4 = i4 + 28 | 0; 11471 i42 = HEAP32[i4 >> 2] | 0; 11472 i5 = 0; 11473 L4 : while (1) { 11474 i19 = HEAP32[i3 >> 2] | 0; 11475 i22 = i19 + (i5 * 152 | 0) | 0; 11476 i8 = HEAP32[i19 + (i5 * 152 | 0) + 112 >> 2] | 0; 11477 i6 = HEAP32[i19 + (i5 * 152 | 0) + 116 >> 2] | 0; 11478 d12 = +HEAPF32[i19 + (i5 * 152 | 0) + 120 >> 2]; 11479 d10 = +HEAPF32[i19 + (i5 * 152 | 0) + 128 >> 2]; 11480 d11 = +HEAPF32[i19 + (i5 * 152 | 0) + 124 >> 2]; 11481 d9 = +HEAPF32[i19 + (i5 * 152 | 0) + 132 >> 2]; 11482 i32 = i19 + (i5 * 152 | 0) + 144 | 0; 11483 i33 = HEAP32[i32 >> 2] | 0; 11484 i7 = i42 + (i8 * 12 | 0) | 0; 11485 i41 = i7; 11486 d21 = +HEAPF32[i41 >> 2]; 11487 d20 = +HEAPF32[i41 + 4 >> 2]; 11488 i41 = i42 + (i6 * 12 | 0) | 0; 11489 d14 = +HEAPF32[i41 >> 2]; 11490 d13 = +HEAPF32[i41 + 4 >> 2]; 11491 i41 = i19 + (i5 * 152 | 0) + 72 | 0; 11492 d17 = +HEAPF32[i41 >> 2]; 11493 d16 = +HEAPF32[i41 + 4 >> 2]; 11494 d23 = -d17; 11495 d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 136 >> 2]; 11496 if ((i33 + -1 | 0) >>> 0 < 2) { 11497 i41 = 0; 11498 d18 = +HEAPF32[i42 + (i8 * 12 | 0) + 8 >> 2]; 11499 d15 = +HEAPF32[i42 + (i6 * 12 | 0) + 8 >> 2]; 11500 } else { 11501 i2 = 4; 11502 break; 11503 } 11504 do { 11505 d30 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 12 >> 2]; 11506 d25 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 8 >> 2]; 11507 d26 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 4 >> 2]; 11508 d27 = +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) >> 2]; 11509 d34 = d24 * +HEAPF32[i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 16 >> 2]; 11510 i42 = i19 + (i5 * 152 | 0) + (i41 * 36 | 0) + 20 | 0; 11511 d28 = +HEAPF32[i42 >> 2]; 11512 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); 11513 d29 = -d34; 11514 d31 = d31 < d34 ? d31 : d34; 11515 d40 = d31 < d29 ? d29 : d31; 11516 d39 = d40 - d28; 11517 HEAPF32[i42 >> 2] = d40; 11518 d40 = d16 * d39; 11519 d39 = d39 * d23; 11520 d21 = d21 - d12 * d40; 11521 d20 = d20 - d12 * d39; 11522 d18 = d18 - d10 * (d27 * d39 - d26 * d40); 11523 d14 = d14 + d11 * d40; 11524 d13 = d13 + d11 * d39; 11525 d15 = d15 + d9 * (d25 * d39 - d30 * d40); 11526 i41 = i41 + 1 | 0; 11527 } while ((i41 | 0) != (i33 | 0)); 11528 do { 11529 if ((HEAP32[i32 >> 2] | 0) != 1) { 11530 i32 = i19 + (i5 * 152 | 0) + 16 | 0; 11531 d31 = +HEAPF32[i32 >> 2]; 11532 i33 = i19 + (i5 * 152 | 0) + 52 | 0; 11533 d34 = +HEAPF32[i33 >> 2]; 11534 if (!(d31 >= 0.0) | !(d34 >= 0.0)) { 11535 i2 = 9; 11536 break L4; 11537 } 11538 d23 = +HEAPF32[i19 + (i5 * 152 | 0) + 12 >> 2]; 11539 d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 8 >> 2]; 11540 d26 = +HEAPF32[i19 + (i5 * 152 | 0) + 4 >> 2]; 11541 d30 = +HEAPF32[i22 >> 2]; 11542 d27 = +HEAPF32[i19 + (i5 * 152 | 0) + 48 >> 2]; 11543 d25 = +HEAPF32[i19 + (i5 * 152 | 0) + 44 >> 2]; 11544 d28 = +HEAPF32[i19 + (i5 * 152 | 0) + 40 >> 2]; 11545 d29 = +HEAPF32[i19 + (i5 * 152 | 0) + 36 >> 2]; 11546 d37 = +HEAPF32[i19 + (i5 * 152 | 0) + 104 >> 2]; 11547 d38 = +HEAPF32[i19 + (i5 * 152 | 0) + 100 >> 2]; 11548 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); 11549 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]); 11550 d44 = +HEAPF32[i19 + (i5 * 152 | 0) + 80 >> 2] * d35 + +HEAPF32[i19 + (i5 * 152 | 0) + 88 >> 2] * d36; 11551 d43 = d35 * +HEAPF32[i19 + (i5 * 152 | 0) + 84 >> 2] + d36 * +HEAPF32[i19 + (i5 * 152 | 0) + 92 >> 2]; 11552 d40 = -d44; 11553 d39 = -d43; 11554 if (!(!(d44 <= -0.0) | !(d43 <= -0.0))) { 11555 d37 = d40 - d31; 11556 d43 = d39 - d34; 11557 d38 = d17 * d37; 11558 d37 = d16 * d37; 11559 d44 = d17 * d43; 11560 d43 = d16 * d43; 11561 d35 = d38 + d44; 11562 d36 = d37 + d43; 11563 HEAPF32[i32 >> 2] = d40; 11564 HEAPF32[i33 >> 2] = d39; 11565 d21 = d21 - d12 * d35; 11566 d20 = d20 - d12 * d36; 11567 d14 = d14 + d11 * d35; 11568 d13 = d13 + d11 * d36; 11569 d18 = d18 - d10 * (d30 * d37 - d26 * d38 + (d29 * d43 - d28 * d44)); 11570 d15 = d15 + d9 * (d24 * d37 - d23 * d38 + (d25 * d43 - d27 * d44)); 11571 break; 11572 } 11573 d44 = d35 * +HEAPF32[i19 + (i5 * 152 | 0) + 24 >> 2]; 11574 d39 = -d44; 11575 if (d44 <= -0.0 ? d36 + d38 * d39 >= 0.0 : 0) { 11576 d38 = d39 - d31; 11577 d43 = 0.0 - d34; 11578 d40 = d17 * d38; 11579 d38 = d16 * d38; 11580 d44 = d17 * d43; 11581 d43 = d16 * d43; 11582 d36 = d44 + d40; 11583 d37 = d43 + d38; 11584 HEAPF32[i32 >> 2] = d39; 11585 HEAPF32[i33 >> 2] = 0.0; 11586 d21 = d21 - d12 * d36; 11587 d20 = d20 - d12 * d37; 11588 d14 = d14 + d11 * d36; 11589 d13 = d13 + d11 * d37; 11590 d18 = d18 - d10 * (d38 * d30 - d40 * d26 + (d43 * d29 - d44 * d28)); 11591 d15 = d15 + d9 * (d38 * d24 - d40 * d23 + (d43 * d25 - d44 * d27)); 11592 break; 11593 } 11594 d44 = d36 * +HEAPF32[i19 + (i5 * 152 | 0) + 60 >> 2]; 11595 d38 = -d44; 11596 if (d44 <= -0.0 ? d35 + d37 * d38 >= 0.0 : 0) { 11597 d39 = 0.0 - d31; 11598 d43 = d38 - d34; 11599 d40 = d17 * d39; 11600 d39 = d16 * d39; 11601 d44 = d17 * d43; 11602 d43 = d16 * d43; 11603 d36 = d40 + d44; 11604 d37 = d39 + d43; 11605 HEAPF32[i32 >> 2] = 0.0; 11606 HEAPF32[i33 >> 2] = d38; 11607 d21 = d21 - d12 * d36; 11608 d20 = d20 - d12 * d37; 11609 d14 = d14 + d11 * d36; 11610 d13 = d13 + d11 * d37; 11611 d18 = d18 - d10 * (d39 * d30 - d40 * d26 + (d43 * d29 - d44 * d28)); 11612 d15 = d15 + d9 * (d39 * d24 - d40 * d23 + (d43 * d25 - d44 * d27)); 11613 break; 11614 } 11615 if (!(!(d35 >= 0.0) | !(d36 >= 0.0))) { 11616 d39 = 0.0 - d31; 11617 d43 = 0.0 - d34; 11618 d40 = d17 * d39; 11619 d39 = d16 * d39; 11620 d44 = d17 * d43; 11621 d43 = d16 * d43; 11622 d37 = d40 + d44; 11623 d38 = d39 + d43; 11624 HEAPF32[i32 >> 2] = 0.0; 11625 HEAPF32[i33 >> 2] = 0.0; 11626 d21 = d21 - d12 * d37; 11627 d20 = d20 - d12 * d38; 11628 d14 = d14 + d11 * d37; 11629 d13 = d13 + d11 * d38; 11630 d18 = d18 - d10 * (d39 * d30 - d40 * d26 + (d43 * d29 - d44 * d28)); 11631 d15 = d15 + d9 * (d39 * d24 - d40 * d23 + (d43 * d25 - d44 * d27)); 11632 } 11633 } else { 11634 d23 = +HEAPF32[i19 + (i5 * 152 | 0) + 12 >> 2]; 11635 d24 = +HEAPF32[i19 + (i5 * 152 | 0) + 8 >> 2]; 11636 d25 = +HEAPF32[i19 + (i5 * 152 | 0) + 4 >> 2]; 11637 d26 = +HEAPF32[i22 >> 2]; 11638 i22 = i19 + (i5 * 152 | 0) + 16 | 0; 11639 d27 = +HEAPF32[i22 >> 2]; 11640 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]); 11641 d44 = d28 > 0.0 ? d28 : 0.0; 11642 d43 = d44 - d27; 11643 HEAPF32[i22 >> 2] = d44; 11644 d44 = d17 * d43; 11645 d43 = d16 * d43; 11646 d21 = d21 - d12 * d44; 11647 d20 = d20 - d12 * d43; 11648 d14 = d14 + d11 * d44; 11649 d13 = d13 + d11 * d43; 11650 d18 = d18 - d10 * (d26 * d43 - d25 * d44); 11651 d15 = d15 + d9 * (d24 * d43 - d23 * d44); 11652 } 11653 } while (0); 11654 d44 = +d21; 11655 d43 = +d20; 11656 i42 = i7; 11657 HEAPF32[i42 >> 2] = d44; 11658 HEAPF32[i42 + 4 >> 2] = d43; 11659 i42 = HEAP32[i4 >> 2] | 0; 11660 HEAPF32[i42 + (i8 * 12 | 0) + 8 >> 2] = d18; 11661 d43 = +d14; 11662 d44 = +d13; 11663 i42 = i42 + (i6 * 12 | 0) | 0; 11664 HEAPF32[i42 >> 2] = d43; 11665 HEAPF32[i42 + 4 >> 2] = d44; 11666 i42 = HEAP32[i4 >> 2] | 0; 11667 HEAPF32[i42 + (i6 * 12 | 0) + 8 >> 2] = d15; 11668 i5 = i5 + 1 | 0; 11669 if ((i5 | 0) >= (HEAP32[i2 >> 2] | 0)) { 11670 i2 = 21; 11671 break; 11672 } 11673 } 11674 if ((i2 | 0) == 4) { 11675 ___assert_fail(6648, 6520, 311, 6688); 11676 } else if ((i2 | 0) == 9) { 11677 ___assert_fail(6720, 6520, 406, 6688); 11678 } else if ((i2 | 0) == 21) { 11679 STACKTOP = i1; 11680 return; 11681 } 11682 } 11683 function __Z14b2TimeOfImpactP11b2TOIOutputPK10b2TOIInput(i3, i11) { 11684 i3 = i3 | 0; 11685 i11 = i11 | 0; 11686 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; 11687 i1 = STACKTOP; 11688 STACKTOP = STACKTOP + 320 | 0; 11689 i12 = i1 + 276 | 0; 11690 i10 = i1 + 240 | 0; 11691 i13 = i1 + 228 | 0; 11692 i5 = i1 + 136 | 0; 11693 i7 = i1 + 112 | 0; 11694 i8 = i1 + 8 | 0; 11695 i9 = i1 + 4 | 0; 11696 i4 = i1; 11697 HEAP32[874] = (HEAP32[874] | 0) + 1; 11698 HEAP32[i3 >> 2] = 0; 11699 i19 = i11 + 128 | 0; 11700 i2 = i3 + 4 | 0; 11701 HEAPF32[i2 >> 2] = +HEAPF32[i19 >> 2]; 11702 i6 = i11 + 28 | 0; 11703 i16 = i12 + 0 | 0; 11704 i15 = i11 + 56 | 0; 11705 i17 = i16 + 36 | 0; 11706 do { 11707 HEAP32[i16 >> 2] = HEAP32[i15 >> 2]; 11708 i16 = i16 + 4 | 0; 11709 i15 = i15 + 4 | 0; 11710 } while ((i16 | 0) < (i17 | 0)); 11711 i16 = i10 + 0 | 0; 11712 i15 = i11 + 92 | 0; 11713 i17 = i16 + 36 | 0; 11714 do { 11715 HEAP32[i16 >> 2] = HEAP32[i15 >> 2]; 11716 i16 = i16 + 4 | 0; 11717 i15 = i15 + 4 | 0; 11718 } while ((i16 | 0) < (i17 | 0)); 11719 i15 = i12 + 24 | 0; 11720 d42 = +HEAPF32[i15 >> 2]; 11721 d43 = +Math_floor(+(d42 / 6.2831854820251465)) * 6.2831854820251465; 11722 d42 = d42 - d43; 11723 HEAPF32[i15 >> 2] = d42; 11724 i16 = i12 + 28 | 0; 11725 d43 = +HEAPF32[i16 >> 2] - d43; 11726 HEAPF32[i16 >> 2] = d43; 11727 i17 = i10 + 24 | 0; 11728 d46 = +HEAPF32[i17 >> 2]; 11729 d40 = +Math_floor(+(d46 / 6.2831854820251465)) * 6.2831854820251465; 11730 d46 = d46 - d40; 11731 HEAPF32[i17 >> 2] = d46; 11732 i18 = i10 + 28 | 0; 11733 d40 = +HEAPF32[i18 >> 2] - d40; 11734 HEAPF32[i18 >> 2] = d40; 11735 d14 = +HEAPF32[i19 >> 2]; 11736 d28 = +HEAPF32[i11 + 24 >> 2] + +HEAPF32[i11 + 52 >> 2] + -.014999999664723873; 11737 d28 = d28 < .004999999888241291 ? .004999999888241291 : d28; 11738 if (!(d28 > .0012499999720603228)) { 11739 ___assert_fail(3536, 3560, 280, 3600); 11740 } 11741 HEAP16[i13 + 4 >> 1] = 0; 11742 HEAP32[i5 + 0 >> 2] = HEAP32[i11 + 0 >> 2]; 11743 HEAP32[i5 + 4 >> 2] = HEAP32[i11 + 4 >> 2]; 11744 HEAP32[i5 + 8 >> 2] = HEAP32[i11 + 8 >> 2]; 11745 HEAP32[i5 + 12 >> 2] = HEAP32[i11 + 12 >> 2]; 11746 HEAP32[i5 + 16 >> 2] = HEAP32[i11 + 16 >> 2]; 11747 HEAP32[i5 + 20 >> 2] = HEAP32[i11 + 20 >> 2]; 11748 HEAP32[i5 + 24 >> 2] = HEAP32[i11 + 24 >> 2]; 11749 i38 = i5 + 28 | 0; 11750 HEAP32[i38 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 11751 HEAP32[i38 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 11752 HEAP32[i38 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 11753 HEAP32[i38 + 12 >> 2] = HEAP32[i6 + 12 >> 2]; 11754 HEAP32[i38 + 16 >> 2] = HEAP32[i6 + 16 >> 2]; 11755 HEAP32[i38 + 20 >> 2] = HEAP32[i6 + 20 >> 2]; 11756 HEAP32[i38 + 24 >> 2] = HEAP32[i6 + 24 >> 2]; 11757 HEAP8[i5 + 88 | 0] = 0; 11758 i38 = i12 + 8 | 0; 11759 i27 = i12 + 12 | 0; 11760 i29 = i12 + 16 | 0; 11761 i22 = i12 + 20 | 0; 11762 i32 = i12 + 4 | 0; 11763 i34 = i10 + 8 | 0; 11764 i36 = i10 + 12 | 0; 11765 i35 = i10 + 16 | 0; 11766 i37 = i10 + 20 | 0; 11767 i33 = i10 + 4 | 0; 11768 i26 = i5 + 56 | 0; 11769 i25 = i5 + 64 | 0; 11770 i24 = i5 + 68 | 0; 11771 i23 = i5 + 72 | 0; 11772 i20 = i5 + 80 | 0; 11773 i19 = i5 + 84 | 0; 11774 i21 = i7 + 16 | 0; 11775 d30 = d28 + .0012499999720603228; 11776 d31 = d28 + -.0012499999720603228; 11777 d48 = d40; 11778 i39 = 0; 11779 d40 = 0.0; 11780 L4 : while (1) { 11781 d56 = 1.0 - d40; 11782 d49 = d56 * d42 + d40 * d43; 11783 d43 = +Math_sin(+d49); 11784 d49 = +Math_cos(+d49); 11785 d55 = +HEAPF32[i12 >> 2]; 11786 d54 = +HEAPF32[i32 >> 2]; 11787 d42 = d56 * d46 + d40 * d48; 11788 d53 = +Math_sin(+d42); 11789 d42 = +Math_cos(+d42); 11790 d46 = +HEAPF32[i10 >> 2]; 11791 d51 = +HEAPF32[i33 >> 2]; 11792 d50 = d56 * +HEAPF32[i34 >> 2] + d40 * +HEAPF32[i35 >> 2] - (d42 * d46 - d53 * d51); 11793 d51 = d56 * +HEAPF32[i36 >> 2] + d40 * +HEAPF32[i37 >> 2] - (d53 * d46 + d42 * d51); 11794 d46 = +(d56 * +HEAPF32[i38 >> 2] + d40 * +HEAPF32[i29 >> 2] - (d49 * d55 - d43 * d54)); 11795 d48 = +(d56 * +HEAPF32[i27 >> 2] + d40 * +HEAPF32[i22 >> 2] - (d43 * d55 + d49 * d54)); 11796 i52 = i26; 11797 HEAPF32[i52 >> 2] = d46; 11798 HEAPF32[i52 + 4 >> 2] = d48; 11799 HEAPF32[i25 >> 2] = d43; 11800 HEAPF32[i24 >> 2] = d49; 11801 d50 = +d50; 11802 d51 = +d51; 11803 i52 = i23; 11804 HEAPF32[i52 >> 2] = d50; 11805 HEAPF32[i52 + 4 >> 2] = d51; 11806 HEAPF32[i20 >> 2] = d53; 11807 HEAPF32[i19 >> 2] = d42; 11808 __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i7, i13, i5); 11809 d42 = +HEAPF32[i21 >> 2]; 11810 if (d42 <= 0.0) { 11811 i4 = 5; 11812 break; 11813 } 11814 if (d42 < d30) { 11815 i4 = 7; 11816 break; 11817 } 11818 +__ZN20b2SeparationFunction10InitializeEPK14b2SimplexCachePK15b2DistanceProxyRK7b2SweepS5_S8_f(i8, i13, i11, i12, i6, i10, d40); 11819 i41 = 0; 11820 d42 = d14; 11821 do { 11822 d50 = +__ZNK20b2SeparationFunction17FindMinSeparationEPiS0_f(i8, i9, i4, d42); 11823 if (d50 > d30) { 11824 i4 = 10; 11825 break L4; 11826 } 11827 if (d50 > d31) { 11828 d40 = d42; 11829 break; 11830 } 11831 i45 = HEAP32[i9 >> 2] | 0; 11832 i44 = HEAP32[i4 >> 2] | 0; 11833 d48 = +__ZNK20b2SeparationFunction8EvaluateEiif(i8, i45, i44, d40); 11834 if (d48 < d31) { 11835 i4 = 13; 11836 break L4; 11837 } 11838 if (!(d48 <= d30)) { 11839 d43 = d40; 11840 d46 = d42; 11841 i47 = 0; 11842 } else { 11843 i4 = 15; 11844 break L4; 11845 } 11846 while (1) { 11847 if ((i47 & 1 | 0) == 0) { 11848 d49 = (d43 + d46) * .5; 11849 } else { 11850 d49 = d43 + (d28 - d48) * (d46 - d43) / (d50 - d48); 11851 } 11852 d51 = +__ZNK20b2SeparationFunction8EvaluateEiif(i8, i45, i44, d49); 11853 d53 = d51 - d28; 11854 if (!(d53 > 0.0)) { 11855 d53 = -d53; 11856 } 11857 if (d53 < .0012499999720603228) { 11858 d42 = d49; 11859 break; 11860 } 11861 i52 = d51 > d28; 11862 i47 = i47 + 1 | 0; 11863 HEAP32[880] = (HEAP32[880] | 0) + 1; 11864 if ((i47 | 0) == 50) { 11865 i47 = 50; 11866 break; 11867 } else { 11868 d43 = i52 ? d49 : d43; 11869 d46 = i52 ? d46 : d49; 11870 d48 = i52 ? d51 : d48; 11871 d50 = i52 ? d50 : d51; 11872 } 11873 } 11874 i44 = HEAP32[882] | 0; 11875 HEAP32[882] = (i44 | 0) > (i47 | 0) ? i44 : i47; 11876 i41 = i41 + 1 | 0; 11877 } while ((i41 | 0) != 8); 11878 i39 = i39 + 1 | 0; 11879 HEAP32[876] = (HEAP32[876] | 0) + 1; 11880 if ((i39 | 0) == 20) { 11881 i4 = 27; 11882 break; 11883 } 11884 d42 = +HEAPF32[i15 >> 2]; 11885 d43 = +HEAPF32[i16 >> 2]; 11886 d46 = +HEAPF32[i17 >> 2]; 11887 d48 = +HEAPF32[i18 >> 2]; 11888 } 11889 if ((i4 | 0) == 5) { 11890 HEAP32[i3 >> 2] = 2; 11891 HEAPF32[i2 >> 2] = 0.0; 11892 i2 = HEAP32[878] | 0; 11893 i52 = (i2 | 0) > (i39 | 0); 11894 i52 = i52 ? i2 : i39; 11895 HEAP32[878] = i52; 11896 STACKTOP = i1; 11897 return; 11898 } else if ((i4 | 0) == 7) { 11899 HEAP32[i3 >> 2] = 3; 11900 HEAPF32[i2 >> 2] = d40; 11901 i2 = HEAP32[878] | 0; 11902 i52 = (i2 | 0) > (i39 | 0); 11903 i52 = i52 ? i2 : i39; 11904 HEAP32[878] = i52; 11905 STACKTOP = i1; 11906 return; 11907 } else if ((i4 | 0) == 10) { 11908 HEAP32[i3 >> 2] = 4; 11909 HEAPF32[i2 >> 2] = d14; 11910 } else if ((i4 | 0) == 13) { 11911 HEAP32[i3 >> 2] = 1; 11912 HEAPF32[i2 >> 2] = d40; 11913 } else if ((i4 | 0) == 15) { 11914 HEAP32[i3 >> 2] = 3; 11915 HEAPF32[i2 >> 2] = d40; 11916 } else if ((i4 | 0) == 27) { 11917 HEAP32[i3 >> 2] = 1; 11918 HEAPF32[i2 >> 2] = d40; 11919 i39 = 20; 11920 i2 = HEAP32[878] | 0; 11921 i52 = (i2 | 0) > (i39 | 0); 11922 i52 = i52 ? i2 : i39; 11923 HEAP32[878] = i52; 11924 STACKTOP = i1; 11925 return; 11926 } 11927 HEAP32[876] = (HEAP32[876] | 0) + 1; 11928 i39 = i39 + 1 | 0; 11929 i2 = HEAP32[878] | 0; 11930 i52 = (i2 | 0) > (i39 | 0); 11931 i52 = i52 ? i2 : i39; 11932 HEAP32[878] = i52; 11933 STACKTOP = i1; 11934 return; 11935 } 11936 function __ZN7b2World5SolveERK10b2TimeStep(i5, i15) { 11937 i5 = i5 | 0; 11938 i15 = i15 | 0; 11939 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; 11940 i3 = STACKTOP; 11941 STACKTOP = STACKTOP + 96 | 0; 11942 i4 = i3 + 32 | 0; 11943 i9 = i3; 11944 i2 = i3 + 84 | 0; 11945 i11 = i5 + 103008 | 0; 11946 HEAPF32[i11 >> 2] = 0.0; 11947 i14 = i5 + 103012 | 0; 11948 HEAPF32[i14 >> 2] = 0.0; 11949 i8 = i5 + 103016 | 0; 11950 HEAPF32[i8 >> 2] = 0.0; 11951 i16 = i5 + 102960 | 0; 11952 i1 = i5 + 102872 | 0; 11953 i6 = i5 + 68 | 0; 11954 __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i4, HEAP32[i16 >> 2] | 0, HEAP32[i5 + 102936 >> 2] | 0, HEAP32[i5 + 102964 >> 2] | 0, i6, HEAP32[i5 + 102944 >> 2] | 0); 11955 i7 = i5 + 102952 | 0; 11956 i17 = HEAP32[i7 >> 2] | 0; 11957 if ((i17 | 0) != 0) { 11958 do { 11959 i38 = i17 + 4 | 0; 11960 HEAP16[i38 >> 1] = HEAP16[i38 >> 1] & 65534; 11961 i17 = HEAP32[i17 + 96 >> 2] | 0; 11962 } while ((i17 | 0) != 0); 11963 } 11964 i17 = HEAP32[i5 + 102932 >> 2] | 0; 11965 if ((i17 | 0) != 0) { 11966 do { 11967 i38 = i17 + 4 | 0; 11968 HEAP32[i38 >> 2] = HEAP32[i38 >> 2] & -2; 11969 i17 = HEAP32[i17 + 12 >> 2] | 0; 11970 } while ((i17 | 0) != 0); 11971 } 11972 i17 = HEAP32[i5 + 102956 >> 2] | 0; 11973 if ((i17 | 0) != 0) { 11974 do { 11975 HEAP8[i17 + 60 | 0] = 0; 11976 i17 = HEAP32[i17 + 12 >> 2] | 0; 11977 } while ((i17 | 0) != 0); 11978 } 11979 i24 = HEAP32[i16 >> 2] | 0; 11980 i16 = __ZN16b2StackAllocator8AllocateEi(i6, i24 << 2) | 0; 11981 i32 = HEAP32[i7 >> 2] | 0; 11982 L13 : do { 11983 if ((i32 | 0) != 0) { 11984 i18 = i4 + 28 | 0; 11985 i30 = i4 + 36 | 0; 11986 i27 = i4 + 32 | 0; 11987 i17 = i4 + 40 | 0; 11988 i23 = i4 + 8 | 0; 11989 i29 = i4 + 48 | 0; 11990 i28 = i4 + 16 | 0; 11991 i26 = i4 + 44 | 0; 11992 i31 = i4 + 12 | 0; 11993 i25 = i5 + 102968 | 0; 11994 i22 = i5 + 102976 | 0; 11995 i21 = i9 + 12 | 0; 11996 i20 = i9 + 16 | 0; 11997 i19 = i9 + 20 | 0; 11998 L15 : while (1) { 11999 i33 = i32 + 4 | 0; 12000 i34 = HEAP16[i33 >> 1] | 0; 12001 if ((i34 & 35) == 34 ? (HEAP32[i32 >> 2] | 0) != 0 : 0) { 12002 HEAP32[i18 >> 2] = 0; 12003 HEAP32[i30 >> 2] = 0; 12004 HEAP32[i27 >> 2] = 0; 12005 HEAP32[i16 >> 2] = i32; 12006 HEAP16[i33 >> 1] = i34 & 65535 | 1; 12007 i35 = 1; 12008 do { 12009 i35 = i35 + -1 | 0; 12010 i33 = HEAP32[i16 + (i35 << 2) >> 2] | 0; 12011 i34 = i33 + 4 | 0; 12012 i36 = HEAP16[i34 >> 1] | 0; 12013 if ((i36 & 32) == 0) { 12014 i8 = 13; 12015 break L15; 12016 } 12017 i37 = HEAP32[i18 >> 2] | 0; 12018 if ((i37 | 0) >= (HEAP32[i17 >> 2] | 0)) { 12019 i8 = 15; 12020 break L15; 12021 } 12022 HEAP32[i33 + 8 >> 2] = i37; 12023 i38 = HEAP32[i18 >> 2] | 0; 12024 HEAP32[(HEAP32[i23 >> 2] | 0) + (i38 << 2) >> 2] = i33; 12025 HEAP32[i18 >> 2] = i38 + 1; 12026 i36 = i36 & 65535; 12027 if ((i36 & 2 | 0) == 0) { 12028 HEAP16[i34 >> 1] = i36 | 2; 12029 HEAPF32[i33 + 144 >> 2] = 0.0; 12030 } 12031 if ((HEAP32[i33 >> 2] | 0) != 0) { 12032 i34 = HEAP32[i33 + 112 >> 2] | 0; 12033 if ((i34 | 0) != 0) { 12034 do { 12035 i38 = HEAP32[i34 + 4 >> 2] | 0; 12036 i36 = i38 + 4 | 0; 12037 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) { 12038 i37 = HEAP32[i30 >> 2] | 0; 12039 if ((i37 | 0) >= (HEAP32[i26 >> 2] | 0)) { 12040 i8 = 25; 12041 break L15; 12042 } 12043 HEAP32[i30 >> 2] = i37 + 1; 12044 HEAP32[(HEAP32[i31 >> 2] | 0) + (i37 << 2) >> 2] = i38; 12045 HEAP32[i36 >> 2] = HEAP32[i36 >> 2] | 1; 12046 i38 = HEAP32[i34 >> 2] | 0; 12047 i36 = i38 + 4 | 0; 12048 i37 = HEAP16[i36 >> 1] | 0; 12049 if ((i37 & 1) == 0) { 12050 if ((i35 | 0) >= (i24 | 0)) { 12051 i8 = 28; 12052 break L15; 12053 } 12054 HEAP32[i16 + (i35 << 2) >> 2] = i38; 12055 HEAP16[i36 >> 1] = i37 & 65535 | 1; 12056 i35 = i35 + 1 | 0; 12057 } 12058 } 12059 i34 = HEAP32[i34 + 12 >> 2] | 0; 12060 } while ((i34 | 0) != 0); 12061 } 12062 i33 = HEAP32[i33 + 108 >> 2] | 0; 12063 if ((i33 | 0) != 0) { 12064 do { 12065 i37 = i33 + 4 | 0; 12066 i36 = HEAP32[i37 >> 2] | 0; 12067 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) { 12068 i34 = HEAP32[i27 >> 2] | 0; 12069 if ((i34 | 0) >= (HEAP32[i29 >> 2] | 0)) { 12070 i8 = 35; 12071 break L15; 12072 } 12073 HEAP32[i27 >> 2] = i34 + 1; 12074 HEAP32[(HEAP32[i28 >> 2] | 0) + (i34 << 2) >> 2] = i36; 12075 HEAP8[(HEAP32[i37 >> 2] | 0) + 60 | 0] = 1; 12076 if ((i12 & 1) == 0) { 12077 if ((i35 | 0) >= (i24 | 0)) { 12078 i8 = 38; 12079 break L15; 12080 } 12081 HEAP32[i16 + (i35 << 2) >> 2] = i10; 12082 HEAP16[i13 >> 1] = i12 & 65535 | 1; 12083 i35 = i35 + 1 | 0; 12084 } 12085 } 12086 i33 = HEAP32[i33 + 12 >> 2] | 0; 12087 } while ((i33 | 0) != 0); 12088 } 12089 } 12090 } while ((i35 | 0) > 0); 12091 __ZN8b2Island5SolveEP9b2ProfileRK10b2TimeStepRK6b2Vec2b(i4, i9, i15, i25, (HEAP8[i22] | 0) != 0); 12092 HEAPF32[i11 >> 2] = +HEAPF32[i21 >> 2] + +HEAPF32[i11 >> 2]; 12093 HEAPF32[i14 >> 2] = +HEAPF32[i20 >> 2] + +HEAPF32[i14 >> 2]; 12094 HEAPF32[i8 >> 2] = +HEAPF32[i19 >> 2] + +HEAPF32[i8 >> 2]; 12095 i35 = HEAP32[i18 >> 2] | 0; 12096 if ((i35 | 0) > 0) { 12097 i33 = HEAP32[i23 >> 2] | 0; 12098 i36 = 0; 12099 do { 12100 i34 = HEAP32[i33 + (i36 << 2) >> 2] | 0; 12101 if ((HEAP32[i34 >> 2] | 0) == 0) { 12102 i38 = i34 + 4 | 0; 12103 HEAP16[i38 >> 1] = HEAP16[i38 >> 1] & 65534; 12104 } 12105 i36 = i36 + 1 | 0; 12106 } while ((i36 | 0) < (i35 | 0)); 12107 } 12108 } 12109 i32 = HEAP32[i32 + 96 >> 2] | 0; 12110 if ((i32 | 0) == 0) { 12111 break L13; 12112 } 12113 } 12114 if ((i8 | 0) == 13) { 12115 ___assert_fail(2232, 2184, 445, 2256); 12116 } else if ((i8 | 0) == 15) { 12117 ___assert_fail(2520, 2440, 54, 2472); 12118 } else if ((i8 | 0) == 25) { 12119 ___assert_fail(2480, 2440, 62, 2472); 12120 } else if ((i8 | 0) == 28) { 12121 ___assert_fail(2264, 2184, 495, 2256); 12122 } else if ((i8 | 0) == 35) { 12123 ___assert_fail(2408, 2440, 68, 2472); 12124 } else if ((i8 | 0) == 38) { 12125 ___assert_fail(2264, 2184, 524, 2256); 12126 } 12127 } 12128 } while (0); 12129 __ZN16b2StackAllocator4FreeEPv(i6, i16); 12130 __ZN7b2TimerC2Ev(i2); 12131 i6 = HEAP32[i7 >> 2] | 0; 12132 if ((i6 | 0) == 0) { 12133 __ZN16b2ContactManager15FindNewContactsEv(i1); 12134 d39 = +__ZNK7b2Timer15GetMillisecondsEv(i2); 12135 i38 = i5 + 103020 | 0; 12136 HEAPF32[i38 >> 2] = d39; 12137 __ZN8b2IslandD2Ev(i4); 12138 STACKTOP = i3; 12139 return; 12140 } 12141 do { 12142 if (!((HEAP16[i6 + 4 >> 1] & 1) == 0) ? (HEAP32[i6 >> 2] | 0) != 0 : 0) { 12143 __ZN6b2Body19SynchronizeFixturesEv(i6); 12144 } 12145 i6 = HEAP32[i6 + 96 >> 2] | 0; 12146 } while ((i6 | 0) != 0); 12147 __ZN16b2ContactManager15FindNewContactsEv(i1); 12148 d39 = +__ZNK7b2Timer15GetMillisecondsEv(i2); 12149 i38 = i5 + 103020 | 0; 12150 HEAPF32[i38 >> 2] = d39; 12151 __ZN8b2IslandD2Ev(i4); 12152 STACKTOP = i3; 12153 return; 12154 } 12155 function __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i10) { 12156 i10 = i10 | 0; 12157 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; 12158 i1 = STACKTOP; 12159 STACKTOP = STACKTOP + 64 | 0; 12160 i8 = i1 + 40 | 0; 12161 i3 = i1 + 24 | 0; 12162 i5 = i1; 12163 i4 = i10 + 48 | 0; 12164 if ((HEAP32[i4 >> 2] | 0) <= 0) { 12165 STACKTOP = i1; 12166 return; 12167 } 12168 i9 = i10 + 40 | 0; 12169 i2 = i10 + 36 | 0; 12170 i7 = i10 + 44 | 0; 12171 i6 = i10 + 24 | 0; 12172 i13 = i10 + 28 | 0; 12173 i14 = i8 + 8 | 0; 12174 i12 = i8 + 12 | 0; 12175 i11 = i3 + 8 | 0; 12176 i10 = i3 + 12 | 0; 12177 i16 = 0; 12178 while (1) { 12179 i15 = HEAP32[i9 >> 2] | 0; 12180 i33 = HEAP32[i2 >> 2] | 0; 12181 i31 = HEAP32[(HEAP32[i7 >> 2] | 0) + (HEAP32[i15 + (i16 * 152 | 0) + 148 >> 2] << 2) >> 2] | 0; 12182 i35 = HEAP32[i15 + (i16 * 152 | 0) + 112 >> 2] | 0; 12183 i42 = HEAP32[i15 + (i16 * 152 | 0) + 116 >> 2] | 0; 12184 d30 = +HEAPF32[i15 + (i16 * 152 | 0) + 120 >> 2]; 12185 d24 = +HEAPF32[i15 + (i16 * 152 | 0) + 124 >> 2]; 12186 d17 = +HEAPF32[i15 + (i16 * 152 | 0) + 128 >> 2]; 12187 d18 = +HEAPF32[i15 + (i16 * 152 | 0) + 132 >> 2]; 12188 i36 = i33 + (i16 * 88 | 0) + 48 | 0; 12189 d39 = +HEAPF32[i36 >> 2]; 12190 d40 = +HEAPF32[i36 + 4 >> 2]; 12191 i36 = i33 + (i16 * 88 | 0) + 56 | 0; 12192 d41 = +HEAPF32[i36 >> 2]; 12193 d43 = +HEAPF32[i36 + 4 >> 2]; 12194 i36 = HEAP32[i6 >> 2] | 0; 12195 i37 = i36 + (i35 * 12 | 0) | 0; 12196 d26 = +HEAPF32[i37 >> 2]; 12197 d27 = +HEAPF32[i37 + 4 >> 2]; 12198 d32 = +HEAPF32[i36 + (i35 * 12 | 0) + 8 >> 2]; 12199 i37 = HEAP32[i13 >> 2] | 0; 12200 i34 = i37 + (i35 * 12 | 0) | 0; 12201 d22 = +HEAPF32[i34 >> 2]; 12202 d25 = +HEAPF32[i34 + 4 >> 2]; 12203 d23 = +HEAPF32[i37 + (i35 * 12 | 0) + 8 >> 2]; 12204 i35 = i36 + (i42 * 12 | 0) | 0; 12205 d28 = +HEAPF32[i35 >> 2]; 12206 d29 = +HEAPF32[i35 + 4 >> 2]; 12207 d38 = +HEAPF32[i36 + (i42 * 12 | 0) + 8 >> 2]; 12208 i36 = i37 + (i42 * 12 | 0) | 0; 12209 d20 = +HEAPF32[i36 >> 2]; 12210 d19 = +HEAPF32[i36 + 4 >> 2]; 12211 d21 = +HEAPF32[i37 + (i42 * 12 | 0) + 8 >> 2]; 12212 if ((HEAP32[i31 + 124 >> 2] | 0) <= 0) { 12213 i2 = 4; 12214 break; 12215 } 12216 d44 = +HEAPF32[i33 + (i16 * 88 | 0) + 80 >> 2]; 12217 d45 = +HEAPF32[i33 + (i16 * 88 | 0) + 76 >> 2]; 12218 d47 = +Math_sin(+d32); 12219 HEAPF32[i14 >> 2] = d47; 12220 d48 = +Math_cos(+d32); 12221 HEAPF32[i12 >> 2] = d48; 12222 d32 = +Math_sin(+d38); 12223 HEAPF32[i11 >> 2] = d32; 12224 d38 = +Math_cos(+d38); 12225 HEAPF32[i10 >> 2] = d38; 12226 d46 = +(d26 - (d39 * d48 - d40 * d47)); 12227 d40 = +(d27 - (d40 * d48 + d39 * d47)); 12228 i37 = i8; 12229 HEAPF32[i37 >> 2] = d46; 12230 HEAPF32[i37 + 4 >> 2] = d40; 12231 d40 = +(d28 - (d41 * d38 - d43 * d32)); 12232 d43 = +(d29 - (d43 * d38 + d41 * d32)); 12233 i37 = i3; 12234 HEAPF32[i37 >> 2] = d40; 12235 HEAPF32[i37 + 4 >> 2] = d43; 12236 __ZN15b2WorldManifold10InitializeEPK10b2ManifoldRK11b2TransformfS5_f(i5, i31 + 64 | 0, i8, d45, i3, d44); 12237 i37 = i15 + (i16 * 152 | 0) + 72 | 0; 12238 i42 = i5; 12239 i33 = HEAP32[i42 + 4 >> 2] | 0; 12240 i31 = i37; 12241 HEAP32[i31 >> 2] = HEAP32[i42 >> 2]; 12242 HEAP32[i31 + 4 >> 2] = i33; 12243 i31 = i15 + (i16 * 152 | 0) + 144 | 0; 12244 i33 = HEAP32[i31 >> 2] | 0; 12245 do { 12246 if ((i33 | 0) > 0) { 12247 i36 = i15 + (i16 * 152 | 0) + 76 | 0; 12248 d32 = d30 + d24; 12249 i35 = i15 + (i16 * 152 | 0) + 140 | 0; 12250 i34 = 0; 12251 do { 12252 i49 = i5 + (i34 << 3) + 8 | 0; 12253 d41 = +HEAPF32[i49 >> 2] - d26; 12254 i42 = i5 + (i34 << 3) + 12 | 0; 12255 d39 = +d41; 12256 d40 = +(+HEAPF32[i42 >> 2] - d27); 12257 i50 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) | 0; 12258 HEAPF32[i50 >> 2] = d39; 12259 HEAPF32[i50 + 4 >> 2] = d40; 12260 d40 = +HEAPF32[i49 >> 2] - d28; 12261 d39 = +d40; 12262 d47 = +(+HEAPF32[i42 >> 2] - d29); 12263 i42 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 8 | 0; 12264 HEAPF32[i42 >> 2] = d39; 12265 HEAPF32[i42 + 4 >> 2] = d47; 12266 d47 = +HEAPF32[i36 >> 2]; 12267 d39 = +HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 4 >> 2]; 12268 d43 = +HEAPF32[i37 >> 2]; 12269 d48 = d41 * d47 - d39 * d43; 12270 d38 = +HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 12 >> 2]; 12271 d43 = d47 * d40 - d43 * d38; 12272 d43 = d32 + d48 * d17 * d48 + d43 * d18 * d43; 12273 if (d43 > 0.0) { 12274 d43 = 1.0 / d43; 12275 } else { 12276 d43 = 0.0; 12277 } 12278 HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 24 >> 2] = d43; 12279 d43 = +HEAPF32[i36 >> 2]; 12280 d47 = -+HEAPF32[i37 >> 2]; 12281 d48 = d41 * d47 - d43 * d39; 12282 d43 = d40 * d47 - d43 * d38; 12283 d43 = d32 + d48 * d17 * d48 + d43 * d18 * d43; 12284 if (d43 > 0.0) { 12285 d43 = 1.0 / d43; 12286 } else { 12287 d43 = 0.0; 12288 } 12289 HEAPF32[i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 28 >> 2] = d43; 12290 i42 = i15 + (i16 * 152 | 0) + (i34 * 36 | 0) + 32 | 0; 12291 HEAPF32[i42 >> 2] = 0.0; 12292 d38 = +HEAPF32[i37 >> 2] * (d20 - d21 * d38 - d22 + d23 * d39) + +HEAPF32[i36 >> 2] * (d19 + d21 * d40 - d25 - d23 * d41); 12293 if (d38 < -1.0) { 12294 HEAPF32[i42 >> 2] = -(d38 * +HEAPF32[i35 >> 2]); 12295 } 12296 i34 = i34 + 1 | 0; 12297 } while ((i34 | 0) != (i33 | 0)); 12298 if ((HEAP32[i31 >> 2] | 0) == 2) { 12299 d45 = +HEAPF32[i15 + (i16 * 152 | 0) + 76 >> 2]; 12300 d20 = +HEAPF32[i37 >> 2]; 12301 d44 = +HEAPF32[i15 + (i16 * 152 | 0) >> 2] * d45 - +HEAPF32[i15 + (i16 * 152 | 0) + 4 >> 2] * d20; 12302 d19 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 8 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 12 >> 2]; 12303 d47 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 36 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 40 >> 2]; 12304 d20 = d45 * +HEAPF32[i15 + (i16 * 152 | 0) + 44 >> 2] - d20 * +HEAPF32[i15 + (i16 * 152 | 0) + 48 >> 2]; 12305 d45 = d30 + d24; 12306 d46 = d17 * d44; 12307 d48 = d18 * d19; 12308 d19 = d45 + d44 * d46 + d19 * d48; 12309 d18 = d45 + d47 * d17 * d47 + d20 * d18 * d20; 12310 d17 = d45 + d46 * d47 + d48 * d20; 12311 d20 = d19 * d18 - d17 * d17; 12312 if (!(d19 * d19 < d20 * 1.0e3)) { 12313 HEAP32[i31 >> 2] = 1; 12314 break; 12315 } 12316 HEAPF32[i15 + (i16 * 152 | 0) + 96 >> 2] = d19; 12317 HEAPF32[i15 + (i16 * 152 | 0) + 100 >> 2] = d17; 12318 HEAPF32[i15 + (i16 * 152 | 0) + 104 >> 2] = d17; 12319 HEAPF32[i15 + (i16 * 152 | 0) + 108 >> 2] = d18; 12320 if (d20 != 0.0) { 12321 d20 = 1.0 / d20; 12322 } 12323 d48 = -(d20 * d17); 12324 HEAPF32[i15 + (i16 * 152 | 0) + 80 >> 2] = d18 * d20; 12325 HEAPF32[i15 + (i16 * 152 | 0) + 84 >> 2] = d48; 12326 HEAPF32[i15 + (i16 * 152 | 0) + 88 >> 2] = d48; 12327 HEAPF32[i15 + (i16 * 152 | 0) + 92 >> 2] = d19 * d20; 12328 } 12329 } 12330 } while (0); 12331 i16 = i16 + 1 | 0; 12332 if ((i16 | 0) >= (HEAP32[i4 >> 2] | 0)) { 12333 i2 = 21; 12334 break; 12335 } 12336 } 12337 if ((i2 | 0) == 4) { 12338 ___assert_fail(6584, 6520, 168, 6616); 12339 } else if ((i2 | 0) == 21) { 12340 STACKTOP = i1; 12341 return; 12342 } 12343 } 12344 function __Z17b2CollidePolygonsP10b2ManifoldPK14b2PolygonShapeRK11b2TransformS3_S6_(i5, i27, i28, i24, i14) { 12345 i5 = i5 | 0; 12346 i27 = i27 | 0; 12347 i28 = i28 | 0; 12348 i24 = i24 | 0; 12349 i14 = i14 | 0; 12350 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; 12351 i1 = STACKTOP; 12352 STACKTOP = STACKTOP + 96 | 0; 12353 i17 = i1 + 92 | 0; 12354 i20 = i1 + 88 | 0; 12355 i13 = i1; 12356 i11 = i1 + 80 | 0; 12357 i12 = i1 + 56 | 0; 12358 i4 = i1 + 32 | 0; 12359 i10 = i1 + 24 | 0; 12360 i2 = i5 + 60 | 0; 12361 HEAP32[i2 >> 2] = 0; 12362 d3 = +HEAPF32[i27 + 8 >> 2] + +HEAPF32[i24 + 8 >> 2]; 12363 HEAP32[i17 >> 2] = 0; 12364 d7 = +__ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i17, i27, i28, i24, i14); 12365 if (d7 > d3) { 12366 STACKTOP = i1; 12367 return; 12368 } 12369 HEAP32[i20 >> 2] = 0; 12370 d6 = +__ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i20, i24, i14, i27, i28); 12371 if (d6 > d3) { 12372 STACKTOP = i1; 12373 return; 12374 } 12375 if (d6 > d7 * .9800000190734863 + .0010000000474974513) { 12376 d18 = +HEAPF32[i14 >> 2]; 12377 d19 = +HEAPF32[i14 + 4 >> 2]; 12378 d15 = +HEAPF32[i14 + 8 >> 2]; 12379 d16 = +HEAPF32[i14 + 12 >> 2]; 12380 d9 = +HEAPF32[i28 >> 2]; 12381 d6 = +HEAPF32[i28 + 4 >> 2]; 12382 d7 = +HEAPF32[i28 + 8 >> 2]; 12383 d8 = +HEAPF32[i28 + 12 >> 2]; 12384 i17 = HEAP32[i20 >> 2] | 0; 12385 HEAP32[i5 + 56 >> 2] = 2; 12386 i14 = 1; 12387 i20 = i24; 12388 } else { 12389 d18 = +HEAPF32[i28 >> 2]; 12390 d19 = +HEAPF32[i28 + 4 >> 2]; 12391 d15 = +HEAPF32[i28 + 8 >> 2]; 12392 d16 = +HEAPF32[i28 + 12 >> 2]; 12393 d9 = +HEAPF32[i14 >> 2]; 12394 d6 = +HEAPF32[i14 + 4 >> 2]; 12395 d7 = +HEAPF32[i14 + 8 >> 2]; 12396 d8 = +HEAPF32[i14 + 12 >> 2]; 12397 i17 = HEAP32[i17 >> 2] | 0; 12398 HEAP32[i5 + 56 >> 2] = 1; 12399 i14 = 0; 12400 i20 = i27; 12401 i27 = i24; 12402 } 12403 i28 = HEAP32[i27 + 148 >> 2] | 0; 12404 if (!((i17 | 0) > -1)) { 12405 ___assert_fail(5640, 5688, 151, 5728); 12406 } 12407 i24 = HEAP32[i20 + 148 >> 2] | 0; 12408 if ((i24 | 0) <= (i17 | 0)) { 12409 ___assert_fail(5640, 5688, 151, 5728); 12410 } 12411 d21 = +HEAPF32[i20 + (i17 << 3) + 84 >> 2]; 12412 d36 = +HEAPF32[i20 + (i17 << 3) + 88 >> 2]; 12413 d22 = d16 * d21 - d15 * d36; 12414 d36 = d15 * d21 + d16 * d36; 12415 d21 = d8 * d22 + d7 * d36; 12416 d22 = d8 * d36 - d7 * d22; 12417 if ((i28 | 0) > 0) { 12418 i33 = 0; 12419 i34 = 0; 12420 d23 = 3.4028234663852886e+38; 12421 while (1) { 12422 d25 = d21 * +HEAPF32[i27 + (i33 << 3) + 84 >> 2] + d22 * +HEAPF32[i27 + (i33 << 3) + 88 >> 2]; 12423 i31 = d25 < d23; 12424 i34 = i31 ? i33 : i34; 12425 i33 = i33 + 1 | 0; 12426 if ((i33 | 0) == (i28 | 0)) { 12427 break; 12428 } else { 12429 d23 = i31 ? d25 : d23; 12430 } 12431 } 12432 } else { 12433 i34 = 0; 12434 } 12435 i31 = i34 + 1 | 0; 12436 i33 = (i31 | 0) < (i28 | 0) ? i31 : 0; 12437 d35 = +HEAPF32[i27 + (i34 << 3) + 20 >> 2]; 12438 d32 = +HEAPF32[i27 + (i34 << 3) + 24 >> 2]; 12439 d36 = +(d9 + (d8 * d35 - d7 * d32)); 12440 d32 = +(d6 + (d7 * d35 + d8 * d32)); 12441 i31 = i13; 12442 HEAPF32[i31 >> 2] = d36; 12443 HEAPF32[i31 + 4 >> 2] = d32; 12444 i31 = i17 & 255; 12445 i28 = i13 + 8 | 0; 12446 HEAP8[i28] = i31; 12447 HEAP8[i28 + 1 | 0] = i34; 12448 HEAP8[i28 + 2 | 0] = 1; 12449 HEAP8[i28 + 3 | 0] = 0; 12450 d32 = +HEAPF32[i27 + (i33 << 3) + 20 >> 2]; 12451 d36 = +HEAPF32[i27 + (i33 << 3) + 24 >> 2]; 12452 d35 = +(d9 + (d8 * d32 - d7 * d36)); 12453 d36 = +(d6 + (d7 * d32 + d8 * d36)); 12454 i27 = i13 + 12 | 0; 12455 HEAPF32[i27 >> 2] = d35; 12456 HEAPF32[i27 + 4 >> 2] = d36; 12457 i27 = i13 + 20 | 0; 12458 HEAP8[i27] = i31; 12459 HEAP8[i27 + 1 | 0] = i33; 12460 HEAP8[i27 + 2 | 0] = 1; 12461 HEAP8[i27 + 3 | 0] = 0; 12462 i27 = i17 + 1 | 0; 12463 i24 = (i27 | 0) < (i24 | 0) ? i27 : 0; 12464 i34 = i20 + (i17 << 3) + 20 | 0; 12465 d26 = +HEAPF32[i34 >> 2]; 12466 d25 = +HEAPF32[i34 + 4 >> 2]; 12467 i34 = i20 + (i24 << 3) + 20 | 0; 12468 d30 = +HEAPF32[i34 >> 2]; 12469 d29 = +HEAPF32[i34 + 4 >> 2]; 12470 d32 = d30 - d26; 12471 d35 = d29 - d25; 12472 d21 = +Math_sqrt(+(d32 * d32 + d35 * d35)); 12473 if (!(d21 < 1.1920928955078125e-7)) { 12474 d36 = 1.0 / d21; 12475 d32 = d32 * d36; 12476 d35 = d35 * d36; 12477 } 12478 d36 = d16 * d32 - d15 * d35; 12479 d21 = d16 * d35 + d15 * d32; 12480 HEAPF32[i11 >> 2] = d36; 12481 HEAPF32[i11 + 4 >> 2] = d21; 12482 d22 = -d36; 12483 d38 = d18 + (d16 * d26 - d15 * d25); 12484 d37 = d19 + (d15 * d26 + d16 * d25); 12485 d23 = d38 * d21 + d37 * d22; 12486 HEAPF32[i10 >> 2] = d22; 12487 HEAPF32[i10 + 4 >> 2] = -d21; 12488 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i12, i13, i10, d3 - (d38 * d36 + d37 * d21), i17) | 0) < 2) { 12489 STACKTOP = i1; 12490 return; 12491 } 12492 if ((__Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i4, i12, i11, d3 + ((d18 + (d16 * d30 - d15 * d29)) * d36 + (d19 + (d15 * d30 + d16 * d29)) * d21), i24) | 0) < 2) { 12493 STACKTOP = i1; 12494 return; 12495 } 12496 d16 = +d35; 12497 d15 = +-d32; 12498 i10 = i5 + 40 | 0; 12499 HEAPF32[i10 >> 2] = d16; 12500 HEAPF32[i10 + 4 >> 2] = d15; 12501 d15 = +((d26 + d30) * .5); 12502 d16 = +((d25 + d29) * .5); 12503 i10 = i5 + 48 | 0; 12504 HEAPF32[i10 >> 2] = d15; 12505 HEAPF32[i10 + 4 >> 2] = d16; 12506 d16 = +HEAPF32[i4 >> 2]; 12507 d15 = +HEAPF32[i4 + 4 >> 2]; 12508 i10 = !(d21 * d16 + d15 * d22 - d23 <= d3); 12509 if (i14 << 24 >> 24 == 0) { 12510 if (i10) { 12511 i10 = 0; 12512 } else { 12513 d38 = d16 - d9; 12514 d36 = d15 - d6; 12515 d37 = +(d8 * d38 + d7 * d36); 12516 d38 = +(d8 * d36 - d7 * d38); 12517 i10 = i5; 12518 HEAPF32[i10 >> 2] = d37; 12519 HEAPF32[i10 + 4 >> 2] = d38; 12520 HEAP32[i5 + 16 >> 2] = HEAP32[i4 + 8 >> 2]; 12521 i10 = 1; 12522 } 12523 d16 = +HEAPF32[i4 + 12 >> 2]; 12524 d15 = +HEAPF32[i4 + 16 >> 2]; 12525 if (d21 * d16 + d15 * d22 - d23 <= d3) { 12526 d38 = d16 - d9; 12527 d36 = d15 - d6; 12528 d37 = +(d8 * d38 + d7 * d36); 12529 d38 = +(d8 * d36 - d7 * d38); 12530 i34 = i5 + (i10 * 20 | 0) | 0; 12531 HEAPF32[i34 >> 2] = d37; 12532 HEAPF32[i34 + 4 >> 2] = d38; 12533 HEAP32[i5 + (i10 * 20 | 0) + 16 >> 2] = HEAP32[i4 + 20 >> 2]; 12534 i10 = i10 + 1 | 0; 12535 } 12536 } else { 12537 if (i10) { 12538 i10 = 0; 12539 } else { 12540 d38 = d16 - d9; 12541 d36 = d15 - d6; 12542 d37 = +(d8 * d38 + d7 * d36); 12543 d38 = +(d8 * d36 - d7 * d38); 12544 i10 = i5; 12545 HEAPF32[i10 >> 2] = d37; 12546 HEAPF32[i10 + 4 >> 2] = d38; 12547 i10 = i5 + 16 | 0; 12548 i34 = HEAP32[i4 + 8 >> 2] | 0; 12549 HEAP32[i10 >> 2] = i34; 12550 HEAP8[i10] = i34 >>> 8; 12551 HEAP8[i10 + 1 | 0] = i34; 12552 HEAP8[i10 + 2 | 0] = i34 >>> 24; 12553 HEAP8[i10 + 3 | 0] = i34 >>> 16; 12554 i10 = 1; 12555 } 12556 d16 = +HEAPF32[i4 + 12 >> 2]; 12557 d15 = +HEAPF32[i4 + 16 >> 2]; 12558 if (d21 * d16 + d15 * d22 - d23 <= d3) { 12559 d38 = d16 - d9; 12560 d36 = d15 - d6; 12561 d37 = +(d8 * d38 + d7 * d36); 12562 d38 = +(d8 * d36 - d7 * d38); 12563 i34 = i5 + (i10 * 20 | 0) | 0; 12564 HEAPF32[i34 >> 2] = d37; 12565 HEAPF32[i34 + 4 >> 2] = d38; 12566 i34 = i5 + (i10 * 20 | 0) + 16 | 0; 12567 i33 = HEAP32[i4 + 20 >> 2] | 0; 12568 HEAP32[i34 >> 2] = i33; 12569 HEAP8[i34] = i33 >>> 8; 12570 HEAP8[i34 + 1 | 0] = i33; 12571 HEAP8[i34 + 2 | 0] = i33 >>> 24; 12572 HEAP8[i34 + 3 | 0] = i33 >>> 16; 12573 i10 = i10 + 1 | 0; 12574 } 12575 } 12576 HEAP32[i2 >> 2] = i10; 12577 STACKTOP = i1; 12578 return; 12579 } 12580 function __ZN8b2Island8SolveTOIERK10b2TimeStepii(i4, i11, i15, i18) { 12581 i4 = i4 | 0; 12582 i11 = i11 | 0; 12583 i15 = i15 | 0; 12584 i18 = i18 | 0; 12585 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; 12586 i1 = STACKTOP; 12587 STACKTOP = STACKTOP + 128 | 0; 12588 i2 = i1 + 96 | 0; 12589 i10 = i1 + 52 | 0; 12590 i3 = i1; 12591 i6 = i4 + 28 | 0; 12592 i5 = HEAP32[i6 >> 2] | 0; 12593 if ((i5 | 0) <= (i15 | 0)) { 12594 ___assert_fail(5464, 5488, 386, 5520); 12595 } 12596 if ((i5 | 0) <= (i18 | 0)) { 12597 ___assert_fail(5536, 5488, 387, 5520); 12598 } 12599 if ((i5 | 0) > 0) { 12600 i9 = i4 + 8 | 0; 12601 i8 = i4 + 20 | 0; 12602 i7 = i4 + 24 | 0; 12603 i22 = 0; 12604 while (1) { 12605 i23 = HEAP32[(HEAP32[i9 >> 2] | 0) + (i22 << 2) >> 2] | 0; 12606 i5 = i23 + 44 | 0; 12607 i24 = HEAP32[i5 + 4 >> 2] | 0; 12608 i25 = (HEAP32[i8 >> 2] | 0) + (i22 * 12 | 0) | 0; 12609 HEAP32[i25 >> 2] = HEAP32[i5 >> 2]; 12610 HEAP32[i25 + 4 >> 2] = i24; 12611 HEAPF32[(HEAP32[i8 >> 2] | 0) + (i22 * 12 | 0) + 8 >> 2] = +HEAPF32[i23 + 56 >> 2]; 12612 i25 = i23 + 64 | 0; 12613 i24 = HEAP32[i25 + 4 >> 2] | 0; 12614 i5 = (HEAP32[i7 >> 2] | 0) + (i22 * 12 | 0) | 0; 12615 HEAP32[i5 >> 2] = HEAP32[i25 >> 2]; 12616 HEAP32[i5 + 4 >> 2] = i24; 12617 i5 = HEAP32[i7 >> 2] | 0; 12618 HEAPF32[i5 + (i22 * 12 | 0) + 8 >> 2] = +HEAPF32[i23 + 72 >> 2]; 12619 i22 = i22 + 1 | 0; 12620 if ((i22 | 0) >= (HEAP32[i6 >> 2] | 0)) { 12621 i22 = i5; 12622 break; 12623 } 12624 } 12625 } else { 12626 i8 = i4 + 20 | 0; 12627 i22 = HEAP32[i4 + 24 >> 2] | 0; 12628 } 12629 i5 = i4 + 12 | 0; 12630 HEAP32[i10 + 24 >> 2] = HEAP32[i5 >> 2]; 12631 i7 = i4 + 36 | 0; 12632 HEAP32[i10 + 28 >> 2] = HEAP32[i7 >> 2]; 12633 HEAP32[i10 + 40 >> 2] = HEAP32[i4 >> 2]; 12634 HEAP32[i10 + 0 >> 2] = HEAP32[i11 + 0 >> 2]; 12635 HEAP32[i10 + 4 >> 2] = HEAP32[i11 + 4 >> 2]; 12636 HEAP32[i10 + 8 >> 2] = HEAP32[i11 + 8 >> 2]; 12637 HEAP32[i10 + 12 >> 2] = HEAP32[i11 + 12 >> 2]; 12638 HEAP32[i10 + 16 >> 2] = HEAP32[i11 + 16 >> 2]; 12639 HEAP32[i10 + 20 >> 2] = HEAP32[i11 + 20 >> 2]; 12640 HEAP32[i10 + 32 >> 2] = HEAP32[i8 >> 2]; 12641 i9 = i4 + 24 | 0; 12642 HEAP32[i10 + 36 >> 2] = i22; 12643 __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i3, i10); 12644 i10 = i11 + 16 | 0; 12645 L13 : do { 12646 if ((HEAP32[i10 >> 2] | 0) > 0) { 12647 i22 = 0; 12648 do { 12649 i22 = i22 + 1 | 0; 12650 if (__ZN15b2ContactSolver27SolveTOIPositionConstraintsEii(i3, i15, i18) | 0) { 12651 break L13; 12652 } 12653 } while ((i22 | 0) < (HEAP32[i10 >> 2] | 0)); 12654 } 12655 } while (0); 12656 i10 = i4 + 8 | 0; 12657 i24 = (HEAP32[i8 >> 2] | 0) + (i15 * 12 | 0) | 0; 12658 i25 = HEAP32[i24 + 4 >> 2] | 0; 12659 i23 = (HEAP32[(HEAP32[i10 >> 2] | 0) + (i15 << 2) >> 2] | 0) + 36 | 0; 12660 HEAP32[i23 >> 2] = HEAP32[i24 >> 2]; 12661 HEAP32[i23 + 4 >> 2] = i25; 12662 i23 = HEAP32[i8 >> 2] | 0; 12663 i25 = HEAP32[i10 >> 2] | 0; 12664 HEAPF32[(HEAP32[i25 + (i15 << 2) >> 2] | 0) + 52 >> 2] = +HEAPF32[i23 + (i15 * 12 | 0) + 8 >> 2]; 12665 i23 = i23 + (i18 * 12 | 0) | 0; 12666 i24 = HEAP32[i23 + 4 >> 2] | 0; 12667 i25 = (HEAP32[i25 + (i18 << 2) >> 2] | 0) + 36 | 0; 12668 HEAP32[i25 >> 2] = HEAP32[i23 >> 2]; 12669 HEAP32[i25 + 4 >> 2] = i24; 12670 HEAPF32[(HEAP32[(HEAP32[i10 >> 2] | 0) + (i18 << 2) >> 2] | 0) + 52 >> 2] = +HEAPF32[(HEAP32[i8 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2]; 12671 __ZN15b2ContactSolver29InitializeVelocityConstraintsEv(i3); 12672 i18 = i11 + 12 | 0; 12673 if ((HEAP32[i18 >> 2] | 0) > 0) { 12674 i15 = 0; 12675 do { 12676 __ZN15b2ContactSolver24SolveVelocityConstraintsEv(i3); 12677 i15 = i15 + 1 | 0; 12678 } while ((i15 | 0) < (HEAP32[i18 >> 2] | 0)); 12679 } 12680 d16 = +HEAPF32[i11 >> 2]; 12681 if ((HEAP32[i6 >> 2] | 0) > 0) { 12682 i15 = 0; 12683 do { 12684 i25 = HEAP32[i8 >> 2] | 0; 12685 i11 = i25 + (i15 * 12 | 0) | 0; 12686 i24 = i11; 12687 d12 = +HEAPF32[i24 >> 2]; 12688 d14 = +HEAPF32[i24 + 4 >> 2]; 12689 d13 = +HEAPF32[i25 + (i15 * 12 | 0) + 8 >> 2]; 12690 i25 = HEAP32[i9 >> 2] | 0; 12691 i24 = i25 + (i15 * 12 | 0) | 0; 12692 d19 = +HEAPF32[i24 >> 2]; 12693 d20 = +HEAPF32[i24 + 4 >> 2]; 12694 d17 = +HEAPF32[i25 + (i15 * 12 | 0) + 8 >> 2]; 12695 d26 = d16 * d19; 12696 d21 = d16 * d20; 12697 d21 = d26 * d26 + d21 * d21; 12698 if (d21 > 4.0) { 12699 d26 = 2.0 / +Math_sqrt(+d21); 12700 d19 = d19 * d26; 12701 d20 = d20 * d26; 12702 } 12703 d21 = d16 * d17; 12704 if (d21 * d21 > 2.4674012660980225) { 12705 if (!(d21 > 0.0)) { 12706 d21 = -d21; 12707 } 12708 d17 = d17 * (1.5707963705062866 / d21); 12709 } 12710 d21 = d12 + d16 * d19; 12711 d14 = d14 + d16 * d20; 12712 d26 = d13 + d16 * d17; 12713 d12 = +d21; 12714 d13 = +d14; 12715 i25 = i11; 12716 HEAPF32[i25 >> 2] = d12; 12717 HEAPF32[i25 + 4 >> 2] = d13; 12718 HEAPF32[(HEAP32[i8 >> 2] | 0) + (i15 * 12 | 0) + 8 >> 2] = d26; 12719 d19 = +d19; 12720 d20 = +d20; 12721 i25 = (HEAP32[i9 >> 2] | 0) + (i15 * 12 | 0) | 0; 12722 HEAPF32[i25 >> 2] = d19; 12723 HEAPF32[i25 + 4 >> 2] = d20; 12724 HEAPF32[(HEAP32[i9 >> 2] | 0) + (i15 * 12 | 0) + 8 >> 2] = d17; 12725 i25 = HEAP32[(HEAP32[i10 >> 2] | 0) + (i15 << 2) >> 2] | 0; 12726 i24 = i25 + 44 | 0; 12727 HEAPF32[i24 >> 2] = d12; 12728 HEAPF32[i24 + 4 >> 2] = d13; 12729 HEAPF32[i25 + 56 >> 2] = d26; 12730 i24 = i25 + 64 | 0; 12731 HEAPF32[i24 >> 2] = d19; 12732 HEAPF32[i24 + 4 >> 2] = d20; 12733 HEAPF32[i25 + 72 >> 2] = d17; 12734 d17 = +Math_sin(+d26); 12735 HEAPF32[i25 + 20 >> 2] = d17; 12736 d20 = +Math_cos(+d26); 12737 HEAPF32[i25 + 24 >> 2] = d20; 12738 d19 = +HEAPF32[i25 + 28 >> 2]; 12739 d26 = +HEAPF32[i25 + 32 >> 2]; 12740 d21 = +(d21 - (d20 * d19 - d17 * d26)); 12741 d26 = +(d14 - (d17 * d19 + d20 * d26)); 12742 i25 = i25 + 12 | 0; 12743 HEAPF32[i25 >> 2] = d21; 12744 HEAPF32[i25 + 4 >> 2] = d26; 12745 i15 = i15 + 1 | 0; 12746 } while ((i15 | 0) < (HEAP32[i6 >> 2] | 0)); 12747 } 12748 i6 = HEAP32[i3 + 40 >> 2] | 0; 12749 i4 = i4 + 4 | 0; 12750 if ((HEAP32[i4 >> 2] | 0) == 0) { 12751 __ZN15b2ContactSolverD2Ev(i3); 12752 STACKTOP = i1; 12753 return; 12754 } 12755 if ((HEAP32[i7 >> 2] | 0) <= 0) { 12756 __ZN15b2ContactSolverD2Ev(i3); 12757 STACKTOP = i1; 12758 return; 12759 } 12760 i8 = i2 + 16 | 0; 12761 i9 = 0; 12762 do { 12763 i10 = HEAP32[(HEAP32[i5 >> 2] | 0) + (i9 << 2) >> 2] | 0; 12764 i11 = HEAP32[i6 + (i9 * 152 | 0) + 144 >> 2] | 0; 12765 HEAP32[i8 >> 2] = i11; 12766 if ((i11 | 0) > 0) { 12767 i15 = 0; 12768 do { 12769 HEAPF32[i2 + (i15 << 2) >> 2] = +HEAPF32[i6 + (i9 * 152 | 0) + (i15 * 36 | 0) + 16 >> 2]; 12770 HEAPF32[i2 + (i15 << 2) + 8 >> 2] = +HEAPF32[i6 + (i9 * 152 | 0) + (i15 * 36 | 0) + 20 >> 2]; 12771 i15 = i15 + 1 | 0; 12772 } while ((i15 | 0) != (i11 | 0)); 12773 } 12774 i25 = HEAP32[i4 >> 2] | 0; 12775 FUNCTION_TABLE_viii[HEAP32[(HEAP32[i25 >> 2] | 0) + 20 >> 2] & 3](i25, i10, i2); 12776 i9 = i9 + 1 | 0; 12777 } while ((i9 | 0) < (HEAP32[i7 >> 2] | 0)); 12778 __ZN15b2ContactSolverD2Ev(i3); 12779 STACKTOP = i1; 12780 return; 12781 } 12782 function __ZN20b2SeparationFunction10InitializeEPK14b2SimplexCachePK15b2DistanceProxyRK7b2SweepS5_S8_f(i2, i11, i13, i21, i12, i24, d9) { 12783 i2 = i2 | 0; 12784 i11 = i11 | 0; 12785 i13 = i13 | 0; 12786 i21 = i21 | 0; 12787 i12 = i12 | 0; 12788 i24 = i24 | 0; 12789 d9 = +d9; 12790 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; 12791 i1 = STACKTOP; 12792 HEAP32[i2 >> 2] = i13; 12793 HEAP32[i2 + 4 >> 2] = i12; 12794 i14 = HEAP16[i11 + 4 >> 1] | 0; 12795 if (!(i14 << 16 >> 16 != 0 & (i14 & 65535) < 3)) { 12796 ___assert_fail(3744, 3560, 50, 3768); 12797 } 12798 i23 = i2 + 8 | 0; 12799 i25 = i23 + 0 | 0; 12800 i27 = i21 + 0 | 0; 12801 i26 = i25 + 36 | 0; 12802 do { 12803 HEAP32[i25 >> 2] = HEAP32[i27 >> 2]; 12804 i25 = i25 + 4 | 0; 12805 i27 = i27 + 4 | 0; 12806 } while ((i25 | 0) < (i26 | 0)); 12807 i21 = i2 + 44 | 0; 12808 i25 = i21 + 0 | 0; 12809 i27 = i24 + 0 | 0; 12810 i26 = i25 + 36 | 0; 12811 do { 12812 HEAP32[i25 >> 2] = HEAP32[i27 >> 2]; 12813 i25 = i25 + 4 | 0; 12814 i27 = i27 + 4 | 0; 12815 } while ((i25 | 0) < (i26 | 0)); 12816 d19 = 1.0 - d9; 12817 d4 = d19 * +HEAPF32[i2 + 32 >> 2] + +HEAPF32[i2 + 36 >> 2] * d9; 12818 d3 = +Math_sin(+d4); 12819 d4 = +Math_cos(+d4); 12820 d7 = +HEAPF32[i23 >> 2]; 12821 d5 = +HEAPF32[i2 + 12 >> 2]; 12822 d8 = d19 * +HEAPF32[i2 + 16 >> 2] + +HEAPF32[i2 + 24 >> 2] * d9 - (d4 * d7 - d3 * d5); 12823 d5 = d19 * +HEAPF32[i2 + 20 >> 2] + +HEAPF32[i2 + 28 >> 2] * d9 - (d3 * d7 + d4 * d5); 12824 d7 = d19 * +HEAPF32[i2 + 68 >> 2] + +HEAPF32[i2 + 72 >> 2] * d9; 12825 d6 = +Math_sin(+d7); 12826 d7 = +Math_cos(+d7); 12827 d20 = +HEAPF32[i21 >> 2]; 12828 d22 = +HEAPF32[i2 + 48 >> 2]; 12829 d10 = d19 * +HEAPF32[i2 + 52 >> 2] + +HEAPF32[i2 + 60 >> 2] * d9 - (d7 * d20 - d6 * d22); 12830 d9 = d19 * +HEAPF32[i2 + 56 >> 2] + +HEAPF32[i2 + 64 >> 2] * d9 - (d6 * d20 + d7 * d22); 12831 if (i14 << 16 >> 16 == 1) { 12832 HEAP32[i2 + 80 >> 2] = 0; 12833 i14 = HEAPU8[i11 + 6 | 0] | 0; 12834 if ((HEAP32[i13 + 20 >> 2] | 0) <= (i14 | 0)) { 12835 ___assert_fail(3640, 3672, 103, 3704); 12836 } 12837 i27 = (HEAP32[i13 + 16 >> 2] | 0) + (i14 << 3) | 0; 12838 d15 = +HEAPF32[i27 >> 2]; 12839 d16 = +HEAPF32[i27 + 4 >> 2]; 12840 i11 = HEAPU8[i11 + 9 | 0] | 0; 12841 if ((HEAP32[i12 + 20 >> 2] | 0) <= (i11 | 0)) { 12842 ___assert_fail(3640, 3672, 103, 3704); 12843 } 12844 i11 = (HEAP32[i12 + 16 >> 2] | 0) + (i11 << 3) | 0; 12845 d20 = +HEAPF32[i11 >> 2]; 12846 d22 = +HEAPF32[i11 + 4 >> 2]; 12847 i11 = i2 + 92 | 0; 12848 d8 = d10 + (d7 * d20 - d6 * d22) - (d8 + (d4 * d15 - d3 * d16)); 12849 d4 = d9 + (d6 * d20 + d7 * d22) - (d5 + (d3 * d15 + d4 * d16)); 12850 d22 = +d8; 12851 d3 = +d4; 12852 i27 = i11; 12853 HEAPF32[i27 >> 2] = d22; 12854 HEAPF32[i27 + 4 >> 2] = d3; 12855 d3 = +Math_sqrt(+(d8 * d8 + d4 * d4)); 12856 if (d3 < 1.1920928955078125e-7) { 12857 d22 = 0.0; 12858 STACKTOP = i1; 12859 return +d22; 12860 } 12861 d22 = 1.0 / d3; 12862 HEAPF32[i11 >> 2] = d8 * d22; 12863 HEAPF32[i2 + 96 >> 2] = d4 * d22; 12864 d22 = d3; 12865 STACKTOP = i1; 12866 return +d22; 12867 } 12868 i14 = i11 + 6 | 0; 12869 i21 = i11 + 7 | 0; 12870 i23 = i2 + 80 | 0; 12871 if ((HEAP8[i14] | 0) == (HEAP8[i21] | 0)) { 12872 HEAP32[i23 >> 2] = 2; 12873 i23 = HEAPU8[i11 + 9 | 0] | 0; 12874 i21 = HEAP32[i12 + 20 >> 2] | 0; 12875 if ((i21 | 0) <= (i23 | 0)) { 12876 ___assert_fail(3640, 3672, 103, 3704); 12877 } 12878 i12 = HEAP32[i12 + 16 >> 2] | 0; 12879 i27 = i12 + (i23 << 3) | 0; 12880 d16 = +HEAPF32[i27 >> 2]; 12881 d15 = +HEAPF32[i27 + 4 >> 2]; 12882 i11 = HEAPU8[i11 + 10 | 0] | 0; 12883 if ((i21 | 0) <= (i11 | 0)) { 12884 ___assert_fail(3640, 3672, 103, 3704); 12885 } 12886 i11 = i12 + (i11 << 3) | 0; 12887 d20 = +HEAPF32[i11 >> 2]; 12888 d18 = +HEAPF32[i11 + 4 >> 2]; 12889 i11 = i2 + 92 | 0; 12890 d22 = d20 - d16; 12891 d19 = d18 - d15; 12892 d17 = -d22; 12893 d29 = +d19; 12894 d28 = +d17; 12895 i27 = i11; 12896 HEAPF32[i27 >> 2] = d29; 12897 HEAPF32[i27 + 4 >> 2] = d28; 12898 d22 = +Math_sqrt(+(d19 * d19 + d22 * d22)); 12899 if (!(d22 < 1.1920928955078125e-7)) { 12900 d29 = 1.0 / d22; 12901 d19 = d19 * d29; 12902 HEAPF32[i11 >> 2] = d19; 12903 d17 = d29 * d17; 12904 HEAPF32[i2 + 96 >> 2] = d17; 12905 } 12906 d16 = (d16 + d20) * .5; 12907 d15 = (d15 + d18) * .5; 12908 d28 = +d16; 12909 d29 = +d15; 12910 i2 = i2 + 84 | 0; 12911 HEAPF32[i2 >> 2] = d28; 12912 HEAPF32[i2 + 4 >> 2] = d29; 12913 i2 = HEAPU8[i14] | 0; 12914 if ((HEAP32[i13 + 20 >> 2] | 0) <= (i2 | 0)) { 12915 ___assert_fail(3640, 3672, 103, 3704); 12916 } 12917 i27 = (HEAP32[i13 + 16 >> 2] | 0) + (i2 << 3) | 0; 12918 d28 = +HEAPF32[i27 >> 2]; 12919 d29 = +HEAPF32[i27 + 4 >> 2]; 12920 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))); 12921 if (!(d3 < 0.0)) { 12922 d29 = d3; 12923 STACKTOP = i1; 12924 return +d29; 12925 } 12926 d28 = +-d19; 12927 d29 = +-d17; 12928 i27 = i11; 12929 HEAPF32[i27 >> 2] = d28; 12930 HEAPF32[i27 + 4 >> 2] = d29; 12931 d29 = -d3; 12932 STACKTOP = i1; 12933 return +d29; 12934 } else { 12935 HEAP32[i23 >> 2] = 1; 12936 i23 = HEAPU8[i14] | 0; 12937 i14 = HEAP32[i13 + 20 >> 2] | 0; 12938 if ((i14 | 0) <= (i23 | 0)) { 12939 ___assert_fail(3640, 3672, 103, 3704); 12940 } 12941 i13 = HEAP32[i13 + 16 >> 2] | 0; 12942 i27 = i13 + (i23 << 3) | 0; 12943 d16 = +HEAPF32[i27 >> 2]; 12944 d15 = +HEAPF32[i27 + 4 >> 2]; 12945 i21 = HEAPU8[i21] | 0; 12946 if ((i14 | 0) <= (i21 | 0)) { 12947 ___assert_fail(3640, 3672, 103, 3704); 12948 } 12949 i13 = i13 + (i21 << 3) | 0; 12950 d20 = +HEAPF32[i13 >> 2]; 12951 d18 = +HEAPF32[i13 + 4 >> 2]; 12952 i13 = i2 + 92 | 0; 12953 d22 = d20 - d16; 12954 d19 = d18 - d15; 12955 d17 = -d22; 12956 d28 = +d19; 12957 d29 = +d17; 12958 i27 = i13; 12959 HEAPF32[i27 >> 2] = d28; 12960 HEAPF32[i27 + 4 >> 2] = d29; 12961 d22 = +Math_sqrt(+(d19 * d19 + d22 * d22)); 12962 if (!(d22 < 1.1920928955078125e-7)) { 12963 d29 = 1.0 / d22; 12964 d19 = d19 * d29; 12965 HEAPF32[i13 >> 2] = d19; 12966 d17 = d29 * d17; 12967 HEAPF32[i2 + 96 >> 2] = d17; 12968 } 12969 d16 = (d16 + d20) * .5; 12970 d15 = (d15 + d18) * .5; 12971 d28 = +d16; 12972 d29 = +d15; 12973 i2 = i2 + 84 | 0; 12974 HEAPF32[i2 >> 2] = d28; 12975 HEAPF32[i2 + 4 >> 2] = d29; 12976 i2 = HEAPU8[i11 + 9 | 0] | 0; 12977 if ((HEAP32[i12 + 20 >> 2] | 0) <= (i2 | 0)) { 12978 ___assert_fail(3640, 3672, 103, 3704); 12979 } 12980 i27 = (HEAP32[i12 + 16 >> 2] | 0) + (i2 << 3) | 0; 12981 d28 = +HEAPF32[i27 >> 2]; 12982 d29 = +HEAPF32[i27 + 4 >> 2]; 12983 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))); 12984 if (!(d3 < 0.0)) { 12985 d29 = d3; 12986 STACKTOP = i1; 12987 return +d29; 12988 } 12989 d28 = +-d19; 12990 d29 = +-d17; 12991 i27 = i13; 12992 HEAPF32[i27 >> 2] = d28; 12993 HEAPF32[i27 + 4 >> 2] = d29; 12994 d29 = -d3; 12995 STACKTOP = i1; 12996 return +d29; 12997 } 12998 return 0.0; 12999 } 13000 function __ZNK20b2SeparationFunction17FindMinSeparationEPiS0_f(i12, i10, i9, d5) { 13001 i12 = i12 | 0; 13002 i10 = i10 | 0; 13003 i9 = i9 | 0; 13004 d5 = +d5; 13005 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; 13006 i1 = STACKTOP; 13007 d21 = 1.0 - d5; 13008 d6 = d21 * +HEAPF32[i12 + 32 >> 2] + +HEAPF32[i12 + 36 >> 2] * d5; 13009 d7 = +Math_sin(+d6); 13010 d6 = +Math_cos(+d6); 13011 d3 = +HEAPF32[i12 + 8 >> 2]; 13012 d8 = +HEAPF32[i12 + 12 >> 2]; 13013 d11 = d21 * +HEAPF32[i12 + 16 >> 2] + +HEAPF32[i12 + 24 >> 2] * d5 - (d6 * d3 - d7 * d8); 13014 d8 = d21 * +HEAPF32[i12 + 20 >> 2] + +HEAPF32[i12 + 28 >> 2] * d5 - (d7 * d3 + d6 * d8); 13015 d3 = d21 * +HEAPF32[i12 + 68 >> 2] + +HEAPF32[i12 + 72 >> 2] * d5; 13016 d2 = +Math_sin(+d3); 13017 d3 = +Math_cos(+d3); 13018 d23 = +HEAPF32[i12 + 44 >> 2]; 13019 d24 = +HEAPF32[i12 + 48 >> 2]; 13020 d4 = d21 * +HEAPF32[i12 + 52 >> 2] + +HEAPF32[i12 + 60 >> 2] * d5 - (d3 * d23 - d2 * d24); 13021 d5 = d21 * +HEAPF32[i12 + 56 >> 2] + +HEAPF32[i12 + 64 >> 2] * d5 - (d2 * d23 + d3 * d24); 13022 i19 = HEAP32[i12 + 80 >> 2] | 0; 13023 if ((i19 | 0) == 1) { 13024 d23 = +HEAPF32[i12 + 92 >> 2]; 13025 d14 = +HEAPF32[i12 + 96 >> 2]; 13026 d13 = d6 * d23 - d7 * d14; 13027 d14 = d7 * d23 + d6 * d14; 13028 d23 = +HEAPF32[i12 + 84 >> 2]; 13029 d24 = +HEAPF32[i12 + 88 >> 2]; 13030 d11 = d11 + (d6 * d23 - d7 * d24); 13031 d6 = d8 + (d7 * d23 + d6 * d24); 13032 d7 = -d13; 13033 d24 = -d14; 13034 d8 = d3 * d7 + d2 * d24; 13035 d7 = d3 * d24 - d2 * d7; 13036 HEAP32[i10 >> 2] = -1; 13037 i25 = i12 + 4 | 0; 13038 i22 = HEAP32[i25 >> 2] | 0; 13039 i19 = HEAP32[i22 + 16 >> 2] | 0; 13040 i22 = HEAP32[i22 + 20 >> 2] | 0; 13041 if ((i22 | 0) > 1) { 13042 i10 = 0; 13043 d18 = d7 * +HEAPF32[i19 + 4 >> 2] + d8 * +HEAPF32[i19 >> 2]; 13044 i12 = 1; 13045 while (1) { 13046 d17 = d8 * +HEAPF32[i19 + (i12 << 3) >> 2] + d7 * +HEAPF32[i19 + (i12 << 3) + 4 >> 2]; 13047 i16 = d17 > d18; 13048 i10 = i16 ? i12 : i10; 13049 i12 = i12 + 1 | 0; 13050 if ((i12 | 0) == (i22 | 0)) { 13051 break; 13052 } else { 13053 d18 = i16 ? d17 : d18; 13054 } 13055 } 13056 HEAP32[i9 >> 2] = i10; 13057 if ((i10 | 0) > -1) { 13058 i15 = i10; 13059 } else { 13060 ___assert_fail(3640, 3672, 103, 3704); 13061 } 13062 } else { 13063 HEAP32[i9 >> 2] = 0; 13064 i15 = 0; 13065 } 13066 i9 = HEAP32[i25 >> 2] | 0; 13067 if ((HEAP32[i9 + 20 >> 2] | 0) <= (i15 | 0)) { 13068 ___assert_fail(3640, 3672, 103, 3704); 13069 } 13070 i27 = (HEAP32[i9 + 16 >> 2] | 0) + (i15 << 3) | 0; 13071 d23 = +HEAPF32[i27 >> 2]; 13072 d24 = +HEAPF32[i27 + 4 >> 2]; 13073 d24 = d13 * (d4 + (d3 * d23 - d2 * d24) - d11) + d14 * (d5 + (d2 * d23 + d3 * d24) - d6); 13074 STACKTOP = i1; 13075 return +d24; 13076 } else if ((i19 | 0) == 0) { 13077 d13 = +HEAPF32[i12 + 92 >> 2]; 13078 d14 = +HEAPF32[i12 + 96 >> 2]; 13079 d21 = d6 * d13 + d7 * d14; 13080 d24 = d6 * d14 - d7 * d13; 13081 d17 = -d13; 13082 d23 = -d14; 13083 d18 = d3 * d17 + d2 * d23; 13084 d17 = d3 * d23 - d2 * d17; 13085 i15 = HEAP32[i12 >> 2] | 0; 13086 i16 = HEAP32[i15 + 16 >> 2] | 0; 13087 i15 = i15 + 20 | 0; 13088 i19 = HEAP32[i15 >> 2] | 0; 13089 if ((i19 | 0) > 1) { 13090 i25 = 0; 13091 d23 = d24 * +HEAPF32[i16 + 4 >> 2] + d21 * +HEAPF32[i16 >> 2]; 13092 i26 = 1; 13093 while (1) { 13094 d20 = d21 * +HEAPF32[i16 + (i26 << 3) >> 2] + d24 * +HEAPF32[i16 + (i26 << 3) + 4 >> 2]; 13095 i22 = d20 > d23; 13096 i25 = i22 ? i26 : i25; 13097 i26 = i26 + 1 | 0; 13098 if ((i26 | 0) == (i19 | 0)) { 13099 break; 13100 } else { 13101 d23 = i22 ? d20 : d23; 13102 } 13103 } 13104 } else { 13105 i25 = 0; 13106 } 13107 HEAP32[i10 >> 2] = i25; 13108 i19 = HEAP32[i12 + 4 >> 2] | 0; 13109 i12 = HEAP32[i19 + 16 >> 2] | 0; 13110 i19 = i19 + 20 | 0; 13111 i25 = HEAP32[i19 >> 2] | 0; 13112 if ((i25 | 0) > 1) { 13113 i27 = 0; 13114 d20 = d17 * +HEAPF32[i12 + 4 >> 2] + d18 * +HEAPF32[i12 >> 2]; 13115 i26 = 1; 13116 while (1) { 13117 d21 = d18 * +HEAPF32[i12 + (i26 << 3) >> 2] + d17 * +HEAPF32[i12 + (i26 << 3) + 4 >> 2]; 13118 i22 = d21 > d20; 13119 i27 = i22 ? i26 : i27; 13120 i26 = i26 + 1 | 0; 13121 if ((i26 | 0) == (i25 | 0)) { 13122 break; 13123 } else { 13124 d20 = i22 ? d21 : d20; 13125 } 13126 } 13127 } else { 13128 i27 = 0; 13129 } 13130 HEAP32[i9 >> 2] = i27; 13131 i9 = HEAP32[i10 >> 2] | 0; 13132 if (!((i9 | 0) > -1)) { 13133 ___assert_fail(3640, 3672, 103, 3704); 13134 } 13135 if ((HEAP32[i15 >> 2] | 0) <= (i9 | 0)) { 13136 ___assert_fail(3640, 3672, 103, 3704); 13137 } 13138 i26 = i16 + (i9 << 3) | 0; 13139 d18 = +HEAPF32[i26 >> 2]; 13140 d17 = +HEAPF32[i26 + 4 >> 2]; 13141 if (!((i27 | 0) > -1)) { 13142 ___assert_fail(3640, 3672, 103, 3704); 13143 } 13144 if ((HEAP32[i19 >> 2] | 0) <= (i27 | 0)) { 13145 ___assert_fail(3640, 3672, 103, 3704); 13146 } 13147 i27 = i12 + (i27 << 3) | 0; 13148 d23 = +HEAPF32[i27 >> 2]; 13149 d24 = +HEAPF32[i27 + 4 >> 2]; 13150 d24 = d13 * (d4 + (d3 * d23 - d2 * d24) - (d11 + (d6 * d18 - d7 * d17))) + d14 * (d5 + (d2 * d23 + d3 * d24) - (d8 + (d7 * d18 + d6 * d17))); 13151 STACKTOP = i1; 13152 return +d24; 13153 } else if ((i19 | 0) == 2) { 13154 d23 = +HEAPF32[i12 + 92 >> 2]; 13155 d13 = +HEAPF32[i12 + 96 >> 2]; 13156 d14 = d3 * d23 - d2 * d13; 13157 d13 = d2 * d23 + d3 * d13; 13158 d23 = +HEAPF32[i12 + 84 >> 2]; 13159 d24 = +HEAPF32[i12 + 88 >> 2]; 13160 d4 = d4 + (d3 * d23 - d2 * d24); 13161 d2 = d5 + (d2 * d23 + d3 * d24); 13162 d3 = -d14; 13163 d24 = -d13; 13164 d5 = d6 * d3 + d7 * d24; 13165 d3 = d6 * d24 - d7 * d3; 13166 HEAP32[i9 >> 2] = -1; 13167 i22 = HEAP32[i12 >> 2] | 0; 13168 i15 = HEAP32[i22 + 16 >> 2] | 0; 13169 i22 = HEAP32[i22 + 20 >> 2] | 0; 13170 if ((i22 | 0) > 1) { 13171 i9 = 0; 13172 d17 = d3 * +HEAPF32[i15 + 4 >> 2] + d5 * +HEAPF32[i15 >> 2]; 13173 i19 = 1; 13174 while (1) { 13175 d18 = d5 * +HEAPF32[i15 + (i19 << 3) >> 2] + d3 * +HEAPF32[i15 + (i19 << 3) + 4 >> 2]; 13176 i25 = d18 > d17; 13177 i9 = i25 ? i19 : i9; 13178 i19 = i19 + 1 | 0; 13179 if ((i19 | 0) == (i22 | 0)) { 13180 break; 13181 } else { 13182 d17 = i25 ? d18 : d17; 13183 } 13184 } 13185 HEAP32[i10 >> 2] = i9; 13186 if ((i9 | 0) > -1) { 13187 i16 = i9; 13188 } else { 13189 ___assert_fail(3640, 3672, 103, 3704); 13190 } 13191 } else { 13192 HEAP32[i10 >> 2] = 0; 13193 i16 = 0; 13194 } 13195 i9 = HEAP32[i12 >> 2] | 0; 13196 if ((HEAP32[i9 + 20 >> 2] | 0) <= (i16 | 0)) { 13197 ___assert_fail(3640, 3672, 103, 3704); 13198 } 13199 i27 = (HEAP32[i9 + 16 >> 2] | 0) + (i16 << 3) | 0; 13200 d23 = +HEAPF32[i27 >> 2]; 13201 d24 = +HEAPF32[i27 + 4 >> 2]; 13202 d24 = d14 * (d11 + (d6 * d23 - d7 * d24) - d4) + d13 * (d8 + (d7 * d23 + d6 * d24) - d2); 13203 STACKTOP = i1; 13204 return +d24; 13205 } else { 13206 ___assert_fail(3616, 3560, 183, 3720); 13207 } 13208 return 0.0; 13209 } 13210 function __ZN13b2DynamicTree10InsertLeafEi(i3, i4) { 13211 i3 = i3 | 0; 13212 i4 = i4 | 0; 13213 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; 13214 i1 = STACKTOP; 13215 i11 = i3 + 24 | 0; 13216 HEAP32[i11 >> 2] = (HEAP32[i11 >> 2] | 0) + 1; 13217 i11 = HEAP32[i3 >> 2] | 0; 13218 if ((i11 | 0) == -1) { 13219 HEAP32[i3 >> 2] = i4; 13220 HEAP32[(HEAP32[i3 + 4 >> 2] | 0) + (i4 * 36 | 0) + 20 >> 2] = -1; 13221 STACKTOP = i1; 13222 return; 13223 } 13224 i2 = i3 + 4 | 0; 13225 i9 = HEAP32[i2 >> 2] | 0; 13226 d8 = +HEAPF32[i9 + (i4 * 36 | 0) >> 2]; 13227 d7 = +HEAPF32[i9 + (i4 * 36 | 0) + 4 >> 2]; 13228 d6 = +HEAPF32[i9 + (i4 * 36 | 0) + 8 >> 2]; 13229 d5 = +HEAPF32[i9 + (i4 * 36 | 0) + 12 >> 2]; 13230 i10 = HEAP32[i9 + (i11 * 36 | 0) + 24 >> 2] | 0; 13231 L5 : do { 13232 if (!((i10 | 0) == -1)) { 13233 do { 13234 i12 = HEAP32[i9 + (i11 * 36 | 0) + 28 >> 2] | 0; 13235 d14 = +HEAPF32[i9 + (i11 * 36 | 0) + 8 >> 2]; 13236 d15 = +HEAPF32[i9 + (i11 * 36 | 0) >> 2]; 13237 d17 = +HEAPF32[i9 + (i11 * 36 | 0) + 12 >> 2]; 13238 d16 = +HEAPF32[i9 + (i11 * 36 | 0) + 4 >> 2]; 13239 d21 = ((d14 > d6 ? d14 : d6) - (d15 < d8 ? d15 : d8) + ((d17 > d5 ? d17 : d5) - (d16 < d7 ? d16 : d7))) * 2.0; 13240 d13 = d21 * 2.0; 13241 d14 = (d21 - (d14 - d15 + (d17 - d16)) * 2.0) * 2.0; 13242 d21 = +HEAPF32[i9 + (i10 * 36 | 0) >> 2]; 13243 d16 = d8 < d21 ? d8 : d21; 13244 d17 = +HEAPF32[i9 + (i10 * 36 | 0) + 4 >> 2]; 13245 d18 = d7 < d17 ? d7 : d17; 13246 d19 = +HEAPF32[i9 + (i10 * 36 | 0) + 8 >> 2]; 13247 d20 = d6 > d19 ? d6 : d19; 13248 d15 = +HEAPF32[i9 + (i10 * 36 | 0) + 12 >> 2]; 13249 d22 = d5 > d15 ? d5 : d15; 13250 if ((HEAP32[i9 + (i10 * 36 | 0) + 24 >> 2] | 0) == -1) { 13251 d15 = (d20 - d16 + (d22 - d18)) * 2.0; 13252 } else { 13253 d15 = (d20 - d16 + (d22 - d18)) * 2.0 - (d19 - d21 + (d15 - d17)) * 2.0; 13254 } 13255 d15 = d14 + d15; 13256 d17 = +HEAPF32[i9 + (i12 * 36 | 0) >> 2]; 13257 d18 = d8 < d17 ? d8 : d17; 13258 d23 = +HEAPF32[i9 + (i12 * 36 | 0) + 4 >> 2]; 13259 d22 = d7 < d23 ? d7 : d23; 13260 d21 = +HEAPF32[i9 + (i12 * 36 | 0) + 8 >> 2]; 13261 d20 = d6 > d21 ? d6 : d21; 13262 d19 = +HEAPF32[i9 + (i12 * 36 | 0) + 12 >> 2]; 13263 d16 = d5 > d19 ? d5 : d19; 13264 if ((HEAP32[i9 + (i12 * 36 | 0) + 24 >> 2] | 0) == -1) { 13265 d16 = (d20 - d18 + (d16 - d22)) * 2.0; 13266 } else { 13267 d16 = (d20 - d18 + (d16 - d22)) * 2.0 - (d21 - d17 + (d19 - d23)) * 2.0; 13268 } 13269 d14 = d14 + d16; 13270 if (d13 < d15 & d13 < d14) { 13271 break L5; 13272 } 13273 i11 = d15 < d14 ? i10 : i12; 13274 i10 = HEAP32[i9 + (i11 * 36 | 0) + 24 >> 2] | 0; 13275 } while (!((i10 | 0) == -1)); 13276 } 13277 } while (0); 13278 i9 = HEAP32[i9 + (i11 * 36 | 0) + 20 >> 2] | 0; 13279 i10 = __ZN13b2DynamicTree12AllocateNodeEv(i3) | 0; 13280 i12 = HEAP32[i2 >> 2] | 0; 13281 HEAP32[i12 + (i10 * 36 | 0) + 20 >> 2] = i9; 13282 HEAP32[i12 + (i10 * 36 | 0) + 16 >> 2] = 0; 13283 i12 = HEAP32[i2 >> 2] | 0; 13284 d14 = +HEAPF32[i12 + (i11 * 36 | 0) >> 2]; 13285 d13 = +HEAPF32[i12 + (i11 * 36 | 0) + 4 >> 2]; 13286 d8 = +(d8 < d14 ? d8 : d14); 13287 d7 = +(d7 < d13 ? d7 : d13); 13288 i24 = i12 + (i10 * 36 | 0) | 0; 13289 HEAPF32[i24 >> 2] = d8; 13290 HEAPF32[i24 + 4 >> 2] = d7; 13291 d8 = +HEAPF32[i12 + (i11 * 36 | 0) + 8 >> 2]; 13292 d7 = +HEAPF32[i12 + (i11 * 36 | 0) + 12 >> 2]; 13293 d6 = +(d6 > d8 ? d6 : d8); 13294 d23 = +(d5 > d7 ? d5 : d7); 13295 i12 = i12 + (i10 * 36 | 0) + 8 | 0; 13296 HEAPF32[i12 >> 2] = d6; 13297 HEAPF32[i12 + 4 >> 2] = d23; 13298 i12 = HEAP32[i2 >> 2] | 0; 13299 HEAP32[i12 + (i10 * 36 | 0) + 32 >> 2] = (HEAP32[i12 + (i11 * 36 | 0) + 32 >> 2] | 0) + 1; 13300 if ((i9 | 0) == -1) { 13301 HEAP32[i12 + (i10 * 36 | 0) + 24 >> 2] = i11; 13302 HEAP32[i12 + (i10 * 36 | 0) + 28 >> 2] = i4; 13303 HEAP32[i12 + (i11 * 36 | 0) + 20 >> 2] = i10; 13304 i24 = i12 + (i4 * 36 | 0) + 20 | 0; 13305 HEAP32[i24 >> 2] = i10; 13306 HEAP32[i3 >> 2] = i10; 13307 i10 = HEAP32[i24 >> 2] | 0; 13308 } else { 13309 i24 = i12 + (i9 * 36 | 0) + 24 | 0; 13310 if ((HEAP32[i24 >> 2] | 0) == (i11 | 0)) { 13311 HEAP32[i24 >> 2] = i10; 13312 } else { 13313 HEAP32[i12 + (i9 * 36 | 0) + 28 >> 2] = i10; 13314 } 13315 HEAP32[i12 + (i10 * 36 | 0) + 24 >> 2] = i11; 13316 HEAP32[i12 + (i10 * 36 | 0) + 28 >> 2] = i4; 13317 HEAP32[i12 + (i11 * 36 | 0) + 20 >> 2] = i10; 13318 HEAP32[i12 + (i4 * 36 | 0) + 20 >> 2] = i10; 13319 } 13320 if ((i10 | 0) == -1) { 13321 STACKTOP = i1; 13322 return; 13323 } 13324 while (1) { 13325 i9 = __ZN13b2DynamicTree7BalanceEi(i3, i10) | 0; 13326 i4 = HEAP32[i2 >> 2] | 0; 13327 i11 = HEAP32[i4 + (i9 * 36 | 0) + 24 >> 2] | 0; 13328 i10 = HEAP32[i4 + (i9 * 36 | 0) + 28 >> 2] | 0; 13329 if ((i11 | 0) == -1) { 13330 i2 = 20; 13331 break; 13332 } 13333 if ((i10 | 0) == -1) { 13334 i2 = 22; 13335 break; 13336 } 13337 i12 = HEAP32[i4 + (i11 * 36 | 0) + 32 >> 2] | 0; 13338 i24 = HEAP32[i4 + (i10 * 36 | 0) + 32 >> 2] | 0; 13339 HEAP32[i4 + (i9 * 36 | 0) + 32 >> 2] = ((i12 | 0) > (i24 | 0) ? i12 : i24) + 1; 13340 d7 = +HEAPF32[i4 + (i11 * 36 | 0) >> 2]; 13341 d8 = +HEAPF32[i4 + (i10 * 36 | 0) >> 2]; 13342 d5 = +HEAPF32[i4 + (i11 * 36 | 0) + 4 >> 2]; 13343 d6 = +HEAPF32[i4 + (i10 * 36 | 0) + 4 >> 2]; 13344 d7 = +(d7 < d8 ? d7 : d8); 13345 d5 = +(d5 < d6 ? d5 : d6); 13346 i24 = i4 + (i9 * 36 | 0) | 0; 13347 HEAPF32[i24 >> 2] = d7; 13348 HEAPF32[i24 + 4 >> 2] = d5; 13349 d5 = +HEAPF32[i4 + (i11 * 36 | 0) + 8 >> 2]; 13350 d6 = +HEAPF32[i4 + (i10 * 36 | 0) + 8 >> 2]; 13351 d7 = +HEAPF32[i4 + (i11 * 36 | 0) + 12 >> 2]; 13352 d8 = +HEAPF32[i4 + (i10 * 36 | 0) + 12 >> 2]; 13353 d5 = +(d5 > d6 ? d5 : d6); 13354 d23 = +(d7 > d8 ? d7 : d8); 13355 i10 = i4 + (i9 * 36 | 0) + 8 | 0; 13356 HEAPF32[i10 >> 2] = d5; 13357 HEAPF32[i10 + 4 >> 2] = d23; 13358 i10 = HEAP32[(HEAP32[i2 >> 2] | 0) + (i9 * 36 | 0) + 20 >> 2] | 0; 13359 if ((i10 | 0) == -1) { 13360 i2 = 24; 13361 break; 13362 } 13363 } 13364 if ((i2 | 0) == 20) { 13365 ___assert_fail(3168, 2944, 307, 3184); 13366 } else if ((i2 | 0) == 22) { 13367 ___assert_fail(3200, 2944, 308, 3184); 13368 } else if ((i2 | 0) == 24) { 13369 STACKTOP = i1; 13370 return; 13371 } 13372 } 13373 function __ZN15b2ContactSolverC2EP18b2ContactSolverDef(i7, i5) { 13374 i7 = i7 | 0; 13375 i5 = i5 | 0; 13376 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; 13377 i1 = STACKTOP; 13378 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 13379 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 13380 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 13381 HEAP32[i7 + 12 >> 2] = HEAP32[i5 + 12 >> 2]; 13382 HEAP32[i7 + 16 >> 2] = HEAP32[i5 + 16 >> 2]; 13383 HEAP32[i7 + 20 >> 2] = HEAP32[i5 + 20 >> 2]; 13384 i14 = HEAP32[i5 + 40 >> 2] | 0; 13385 i9 = i7 + 32 | 0; 13386 HEAP32[i9 >> 2] = i14; 13387 i2 = HEAP32[i5 + 28 >> 2] | 0; 13388 i4 = i7 + 48 | 0; 13389 HEAP32[i4 >> 2] = i2; 13390 i3 = i7 + 36 | 0; 13391 HEAP32[i3 >> 2] = __ZN16b2StackAllocator8AllocateEi(i14, i2 * 88 | 0) | 0; 13392 i2 = i7 + 40 | 0; 13393 HEAP32[i2 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i9 >> 2] | 0, (HEAP32[i4 >> 2] | 0) * 152 | 0) | 0; 13394 HEAP32[i7 + 24 >> 2] = HEAP32[i5 + 32 >> 2]; 13395 HEAP32[i7 + 28 >> 2] = HEAP32[i5 + 36 >> 2]; 13396 i9 = HEAP32[i5 + 24 >> 2] | 0; 13397 i5 = i7 + 44 | 0; 13398 HEAP32[i5 >> 2] = i9; 13399 if ((HEAP32[i4 >> 2] | 0) <= 0) { 13400 STACKTOP = i1; 13401 return; 13402 } 13403 i6 = i7 + 20 | 0; 13404 i7 = i7 + 8 | 0; 13405 i8 = 0; 13406 while (1) { 13407 i10 = HEAP32[i9 + (i8 << 2) >> 2] | 0; 13408 i11 = HEAP32[i10 + 48 >> 2] | 0; 13409 i12 = HEAP32[i10 + 52 >> 2] | 0; 13410 i14 = HEAP32[i11 + 8 >> 2] | 0; 13411 i13 = HEAP32[i12 + 8 >> 2] | 0; 13412 i9 = HEAP32[i10 + 124 >> 2] | 0; 13413 if ((i9 | 0) <= 0) { 13414 i2 = 4; 13415 break; 13416 } 13417 d15 = +HEAPF32[(HEAP32[i12 + 12 >> 2] | 0) + 8 >> 2]; 13418 d16 = +HEAPF32[(HEAP32[i11 + 12 >> 2] | 0) + 8 >> 2]; 13419 i12 = HEAP32[i2 >> 2] | 0; 13420 HEAPF32[i12 + (i8 * 152 | 0) + 136 >> 2] = +HEAPF32[i10 + 136 >> 2]; 13421 HEAPF32[i12 + (i8 * 152 | 0) + 140 >> 2] = +HEAPF32[i10 + 140 >> 2]; 13422 i22 = i14 + 8 | 0; 13423 HEAP32[i12 + (i8 * 152 | 0) + 112 >> 2] = HEAP32[i22 >> 2]; 13424 i21 = i13 + 8 | 0; 13425 HEAP32[i12 + (i8 * 152 | 0) + 116 >> 2] = HEAP32[i21 >> 2]; 13426 i19 = i14 + 120 | 0; 13427 HEAPF32[i12 + (i8 * 152 | 0) + 120 >> 2] = +HEAPF32[i19 >> 2]; 13428 i20 = i13 + 120 | 0; 13429 HEAPF32[i12 + (i8 * 152 | 0) + 124 >> 2] = +HEAPF32[i20 >> 2]; 13430 i18 = i14 + 128 | 0; 13431 HEAPF32[i12 + (i8 * 152 | 0) + 128 >> 2] = +HEAPF32[i18 >> 2]; 13432 i17 = i13 + 128 | 0; 13433 HEAPF32[i12 + (i8 * 152 | 0) + 132 >> 2] = +HEAPF32[i17 >> 2]; 13434 HEAP32[i12 + (i8 * 152 | 0) + 148 >> 2] = i8; 13435 HEAP32[i12 + (i8 * 152 | 0) + 144 >> 2] = i9; 13436 i11 = i12 + (i8 * 152 | 0) + 80 | 0; 13437 HEAP32[i11 + 0 >> 2] = 0; 13438 HEAP32[i11 + 4 >> 2] = 0; 13439 HEAP32[i11 + 8 >> 2] = 0; 13440 HEAP32[i11 + 12 >> 2] = 0; 13441 HEAP32[i11 + 16 >> 2] = 0; 13442 HEAP32[i11 + 20 >> 2] = 0; 13443 HEAP32[i11 + 24 >> 2] = 0; 13444 HEAP32[i11 + 28 >> 2] = 0; 13445 i11 = HEAP32[i3 >> 2] | 0; 13446 HEAP32[i11 + (i8 * 88 | 0) + 32 >> 2] = HEAP32[i22 >> 2]; 13447 HEAP32[i11 + (i8 * 88 | 0) + 36 >> 2] = HEAP32[i21 >> 2]; 13448 HEAPF32[i11 + (i8 * 88 | 0) + 40 >> 2] = +HEAPF32[i19 >> 2]; 13449 HEAPF32[i11 + (i8 * 88 | 0) + 44 >> 2] = +HEAPF32[i20 >> 2]; 13450 i20 = i14 + 28 | 0; 13451 i14 = HEAP32[i20 + 4 >> 2] | 0; 13452 i19 = i11 + (i8 * 88 | 0) + 48 | 0; 13453 HEAP32[i19 >> 2] = HEAP32[i20 >> 2]; 13454 HEAP32[i19 + 4 >> 2] = i14; 13455 i19 = i13 + 28 | 0; 13456 i14 = HEAP32[i19 + 4 >> 2] | 0; 13457 i13 = i11 + (i8 * 88 | 0) + 56 | 0; 13458 HEAP32[i13 >> 2] = HEAP32[i19 >> 2]; 13459 HEAP32[i13 + 4 >> 2] = i14; 13460 HEAPF32[i11 + (i8 * 88 | 0) + 64 >> 2] = +HEAPF32[i18 >> 2]; 13461 HEAPF32[i11 + (i8 * 88 | 0) + 68 >> 2] = +HEAPF32[i17 >> 2]; 13462 i13 = i10 + 104 | 0; 13463 i14 = HEAP32[i13 + 4 >> 2] | 0; 13464 i17 = i11 + (i8 * 88 | 0) + 16 | 0; 13465 HEAP32[i17 >> 2] = HEAP32[i13 >> 2]; 13466 HEAP32[i17 + 4 >> 2] = i14; 13467 i17 = i10 + 112 | 0; 13468 i14 = HEAP32[i17 + 4 >> 2] | 0; 13469 i13 = i11 + (i8 * 88 | 0) + 24 | 0; 13470 HEAP32[i13 >> 2] = HEAP32[i17 >> 2]; 13471 HEAP32[i13 + 4 >> 2] = i14; 13472 HEAP32[i11 + (i8 * 88 | 0) + 84 >> 2] = i9; 13473 HEAPF32[i11 + (i8 * 88 | 0) + 76 >> 2] = d16; 13474 HEAPF32[i11 + (i8 * 88 | 0) + 80 >> 2] = d15; 13475 HEAP32[i11 + (i8 * 88 | 0) + 72 >> 2] = HEAP32[i10 + 120 >> 2]; 13476 i13 = 0; 13477 do { 13478 i14 = i10 + (i13 * 20 | 0) + 64 | 0; 13479 if ((HEAP8[i6] | 0) == 0) { 13480 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 16 >> 2] = 0.0; 13481 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 20 >> 2] = 0.0; 13482 } else { 13483 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 16 >> 2] = +HEAPF32[i7 >> 2] * +HEAPF32[i10 + (i13 * 20 | 0) + 72 >> 2]; 13484 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 20 >> 2] = +HEAPF32[i7 >> 2] * +HEAPF32[i10 + (i13 * 20 | 0) + 76 >> 2]; 13485 } 13486 i20 = i12 + (i8 * 152 | 0) + (i13 * 36 | 0) | 0; 13487 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 24 >> 2] = 0.0; 13488 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 28 >> 2] = 0.0; 13489 HEAPF32[i12 + (i8 * 152 | 0) + (i13 * 36 | 0) + 32 >> 2] = 0.0; 13490 i22 = i11 + (i8 * 88 | 0) + (i13 << 3) | 0; 13491 HEAP32[i20 + 0 >> 2] = 0; 13492 HEAP32[i20 + 4 >> 2] = 0; 13493 HEAP32[i20 + 8 >> 2] = 0; 13494 HEAP32[i20 + 12 >> 2] = 0; 13495 i20 = i14; 13496 i21 = HEAP32[i20 + 4 >> 2] | 0; 13497 HEAP32[i22 >> 2] = HEAP32[i20 >> 2]; 13498 HEAP32[i22 + 4 >> 2] = i21; 13499 i13 = i13 + 1 | 0; 13500 } while ((i13 | 0) != (i9 | 0)); 13501 i8 = i8 + 1 | 0; 13502 if ((i8 | 0) >= (HEAP32[i4 >> 2] | 0)) { 13503 i2 = 12; 13504 break; 13505 } 13506 i9 = HEAP32[i5 >> 2] | 0; 13507 } 13508 if ((i2 | 0) == 4) { 13509 ___assert_fail(6504, 6520, 71, 6568); 13510 } else if ((i2 | 0) == 12) { 13511 STACKTOP = i1; 13512 return; 13513 } 13514 } 13515 function __Z25b2CollidePolygonAndCircleP10b2ManifoldPK14b2PolygonShapeRK11b2TransformPK13b2CircleShapeS6_(i1, i4, i11, i9, i10) { 13516 i1 = i1 | 0; 13517 i4 = i4 | 0; 13518 i11 = i11 | 0; 13519 i9 = i9 | 0; 13520 i10 = i10 | 0; 13521 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; 13522 i3 = STACKTOP; 13523 i5 = i1 + 60 | 0; 13524 HEAP32[i5 >> 2] = 0; 13525 i2 = i9 + 12 | 0; 13526 d20 = +HEAPF32[i10 + 12 >> 2]; 13527 d7 = +HEAPF32[i2 >> 2]; 13528 d6 = +HEAPF32[i10 + 8 >> 2]; 13529 d21 = +HEAPF32[i9 + 16 >> 2]; 13530 d8 = +HEAPF32[i10 >> 2] + (d20 * d7 - d6 * d21) - +HEAPF32[i11 >> 2]; 13531 d21 = d7 * d6 + d20 * d21 + +HEAPF32[i10 + 4 >> 2] - +HEAPF32[i11 + 4 >> 2]; 13532 d20 = +HEAPF32[i11 + 12 >> 2]; 13533 d6 = +HEAPF32[i11 + 8 >> 2]; 13534 d7 = d8 * d20 + d21 * d6; 13535 d6 = d20 * d21 - d8 * d6; 13536 d8 = +HEAPF32[i4 + 8 >> 2] + +HEAPF32[i9 + 8 >> 2]; 13537 i12 = HEAP32[i4 + 148 >> 2] | 0; 13538 do { 13539 if ((i12 | 0) > 0) { 13540 i10 = 0; 13541 i9 = 0; 13542 d13 = -3.4028234663852886e+38; 13543 while (1) { 13544 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]; 13545 if (d14 > d8) { 13546 i10 = 19; 13547 break; 13548 } 13549 i11 = d14 > d13; 13550 d13 = i11 ? d14 : d13; 13551 i9 = i11 ? i10 : i9; 13552 i10 = i10 + 1 | 0; 13553 if ((i10 | 0) >= (i12 | 0)) { 13554 i10 = 4; 13555 break; 13556 } 13557 } 13558 if ((i10 | 0) == 4) { 13559 i22 = d13 < 1.1920928955078125e-7; 13560 break; 13561 } else if ((i10 | 0) == 19) { 13562 STACKTOP = i3; 13563 return; 13564 } 13565 } else { 13566 i9 = 0; 13567 i22 = 1; 13568 } 13569 } while (0); 13570 i15 = i9 + 1 | 0; 13571 i11 = i4 + (i9 << 3) + 20 | 0; 13572 i10 = HEAP32[i11 >> 2] | 0; 13573 i11 = HEAP32[i11 + 4 >> 2] | 0; 13574 d14 = (HEAP32[tempDoublePtr >> 2] = i10, +HEAPF32[tempDoublePtr >> 2]); 13575 d13 = (HEAP32[tempDoublePtr >> 2] = i11, +HEAPF32[tempDoublePtr >> 2]); 13576 i12 = i4 + (((i15 | 0) < (i12 | 0) ? i15 : 0) << 3) + 20 | 0; 13577 i15 = HEAP32[i12 >> 2] | 0; 13578 i12 = HEAP32[i12 + 4 >> 2] | 0; 13579 d21 = (HEAP32[tempDoublePtr >> 2] = i15, +HEAPF32[tempDoublePtr >> 2]); 13580 d18 = (HEAP32[tempDoublePtr >> 2] = i12, +HEAPF32[tempDoublePtr >> 2]); 13581 if (i22) { 13582 HEAP32[i5 >> 2] = 1; 13583 HEAP32[i1 + 56 >> 2] = 1; 13584 i22 = i4 + (i9 << 3) + 84 | 0; 13585 i15 = HEAP32[i22 + 4 >> 2] | 0; 13586 i12 = i1 + 40 | 0; 13587 HEAP32[i12 >> 2] = HEAP32[i22 >> 2]; 13588 HEAP32[i12 + 4 >> 2] = i15; 13589 d20 = +((d14 + d21) * .5); 13590 d21 = +((d13 + d18) * .5); 13591 i12 = i1 + 48 | 0; 13592 HEAPF32[i12 >> 2] = d20; 13593 HEAPF32[i12 + 4 >> 2] = d21; 13594 i12 = i2; 13595 i15 = HEAP32[i12 + 4 >> 2] | 0; 13596 i22 = i1; 13597 HEAP32[i22 >> 2] = HEAP32[i12 >> 2]; 13598 HEAP32[i22 + 4 >> 2] = i15; 13599 HEAP32[i1 + 16 >> 2] = 0; 13600 STACKTOP = i3; 13601 return; 13602 } 13603 d16 = d7 - d14; 13604 d20 = d6 - d13; 13605 d19 = d7 - d21; 13606 d17 = d6 - d18; 13607 if (d16 * (d21 - d14) + d20 * (d18 - d13) <= 0.0) { 13608 if (d16 * d16 + d20 * d20 > d8 * d8) { 13609 STACKTOP = i3; 13610 return; 13611 } 13612 HEAP32[i5 >> 2] = 1; 13613 HEAP32[i1 + 56 >> 2] = 1; 13614 i4 = i1 + 40 | 0; 13615 d21 = +d16; 13616 d6 = +d20; 13617 i22 = i4; 13618 HEAPF32[i22 >> 2] = d21; 13619 HEAPF32[i22 + 4 >> 2] = d6; 13620 d6 = +Math_sqrt(+(d16 * d16 + d20 * d20)); 13621 if (!(d6 < 1.1920928955078125e-7)) { 13622 d21 = 1.0 / d6; 13623 HEAPF32[i4 >> 2] = d16 * d21; 13624 HEAPF32[i1 + 44 >> 2] = d20 * d21; 13625 } 13626 i12 = i1 + 48 | 0; 13627 HEAP32[i12 >> 2] = i10; 13628 HEAP32[i12 + 4 >> 2] = i11; 13629 i12 = i2; 13630 i15 = HEAP32[i12 + 4 >> 2] | 0; 13631 i22 = i1; 13632 HEAP32[i22 >> 2] = HEAP32[i12 >> 2]; 13633 HEAP32[i22 + 4 >> 2] = i15; 13634 HEAP32[i1 + 16 >> 2] = 0; 13635 STACKTOP = i3; 13636 return; 13637 } 13638 if (!(d19 * (d14 - d21) + d17 * (d13 - d18) <= 0.0)) { 13639 d14 = (d14 + d21) * .5; 13640 d13 = (d13 + d18) * .5; 13641 i10 = i4 + (i9 << 3) + 84 | 0; 13642 if ((d7 - d14) * +HEAPF32[i10 >> 2] + (d6 - d13) * +HEAPF32[i4 + (i9 << 3) + 88 >> 2] > d8) { 13643 STACKTOP = i3; 13644 return; 13645 } 13646 HEAP32[i5 >> 2] = 1; 13647 HEAP32[i1 + 56 >> 2] = 1; 13648 i22 = i10; 13649 i15 = HEAP32[i22 + 4 >> 2] | 0; 13650 i12 = i1 + 40 | 0; 13651 HEAP32[i12 >> 2] = HEAP32[i22 >> 2]; 13652 HEAP32[i12 + 4 >> 2] = i15; 13653 d20 = +d14; 13654 d21 = +d13; 13655 i12 = i1 + 48 | 0; 13656 HEAPF32[i12 >> 2] = d20; 13657 HEAPF32[i12 + 4 >> 2] = d21; 13658 i12 = i2; 13659 i15 = HEAP32[i12 + 4 >> 2] | 0; 13660 i22 = i1; 13661 HEAP32[i22 >> 2] = HEAP32[i12 >> 2]; 13662 HEAP32[i22 + 4 >> 2] = i15; 13663 HEAP32[i1 + 16 >> 2] = 0; 13664 STACKTOP = i3; 13665 return; 13666 } 13667 if (d19 * d19 + d17 * d17 > d8 * d8) { 13668 STACKTOP = i3; 13669 return; 13670 } 13671 HEAP32[i5 >> 2] = 1; 13672 HEAP32[i1 + 56 >> 2] = 1; 13673 i4 = i1 + 40 | 0; 13674 d21 = +d19; 13675 d6 = +d17; 13676 i22 = i4; 13677 HEAPF32[i22 >> 2] = d21; 13678 HEAPF32[i22 + 4 >> 2] = d6; 13679 d6 = +Math_sqrt(+(d19 * d19 + d17 * d17)); 13680 if (!(d6 < 1.1920928955078125e-7)) { 13681 d21 = 1.0 / d6; 13682 HEAPF32[i4 >> 2] = d19 * d21; 13683 HEAPF32[i1 + 44 >> 2] = d17 * d21; 13684 } 13685 i22 = i1 + 48 | 0; 13686 HEAP32[i22 >> 2] = i15; 13687 HEAP32[i22 + 4 >> 2] = i12; 13688 i12 = i2; 13689 i15 = HEAP32[i12 + 4 >> 2] | 0; 13690 i22 = i1; 13691 HEAP32[i22 >> 2] = HEAP32[i12 >> 2]; 13692 HEAP32[i22 + 4 >> 2] = i15; 13693 HEAP32[i1 + 16 >> 2] = 0; 13694 STACKTOP = i3; 13695 return; 13696 } 13697 function __ZN15b2WorldManifold10InitializeEPK10b2ManifoldRK11b2TransformfS5_f(i1, i5, i7, d4, i8, d3) { 13698 i1 = i1 | 0; 13699 i5 = i5 | 0; 13700 i7 = i7 | 0; 13701 d4 = +d4; 13702 i8 = i8 | 0; 13703 d3 = +d3; 13704 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; 13705 i2 = STACKTOP; 13706 i6 = i5 + 60 | 0; 13707 if ((HEAP32[i6 >> 2] | 0) == 0) { 13708 STACKTOP = i2; 13709 return; 13710 } 13711 i11 = HEAP32[i5 + 56 >> 2] | 0; 13712 if ((i11 | 0) == 2) { 13713 i13 = i8 + 12 | 0; 13714 d17 = +HEAPF32[i13 >> 2]; 13715 d18 = +HEAPF32[i5 + 40 >> 2]; 13716 i16 = i8 + 8 | 0; 13717 d19 = +HEAPF32[i16 >> 2]; 13718 d15 = +HEAPF32[i5 + 44 >> 2]; 13719 d14 = d17 * d18 - d19 * d15; 13720 d15 = d18 * d19 + d17 * d15; 13721 d17 = +d14; 13722 d19 = +d15; 13723 i12 = i1; 13724 HEAPF32[i12 >> 2] = d17; 13725 HEAPF32[i12 + 4 >> 2] = d19; 13726 d19 = +HEAPF32[i13 >> 2]; 13727 d17 = +HEAPF32[i5 + 48 >> 2]; 13728 d18 = +HEAPF32[i16 >> 2]; 13729 d10 = +HEAPF32[i5 + 52 >> 2]; 13730 d9 = +HEAPF32[i8 >> 2] + (d19 * d17 - d18 * d10); 13731 d10 = d17 * d18 + d19 * d10 + +HEAPF32[i8 + 4 >> 2]; 13732 if ((HEAP32[i6 >> 2] | 0) > 0) { 13733 i8 = i7 + 12 | 0; 13734 i11 = i7 + 8 | 0; 13735 i12 = i7 + 4 | 0; 13736 i13 = i1 + 4 | 0; 13737 i16 = 0; 13738 do { 13739 d18 = +HEAPF32[i8 >> 2]; 13740 d22 = +HEAPF32[i5 + (i16 * 20 | 0) >> 2]; 13741 d21 = +HEAPF32[i11 >> 2]; 13742 d17 = +HEAPF32[i5 + (i16 * 20 | 0) + 4 >> 2]; 13743 d19 = +HEAPF32[i7 >> 2] + (d18 * d22 - d21 * d17); 13744 d17 = d22 * d21 + d18 * d17 + +HEAPF32[i12 >> 2]; 13745 d18 = d3 - (d14 * (d19 - d9) + (d17 - d10) * d15); 13746 d19 = +((d19 - d14 * d4 + (d19 + d14 * d18)) * .5); 13747 d14 = +((d17 - d15 * d4 + (d17 + d15 * d18)) * .5); 13748 i20 = i1 + (i16 << 3) + 8 | 0; 13749 HEAPF32[i20 >> 2] = d19; 13750 HEAPF32[i20 + 4 >> 2] = d14; 13751 i16 = i16 + 1 | 0; 13752 d14 = +HEAPF32[i1 >> 2]; 13753 d15 = +HEAPF32[i13 >> 2]; 13754 } while ((i16 | 0) < (HEAP32[i6 >> 2] | 0)); 13755 } 13756 d21 = +-d14; 13757 d22 = +-d15; 13758 i20 = i1; 13759 HEAPF32[i20 >> 2] = d21; 13760 HEAPF32[i20 + 4 >> 2] = d22; 13761 STACKTOP = i2; 13762 return; 13763 } else if ((i11 | 0) == 1) { 13764 i16 = i7 + 12 | 0; 13765 d19 = +HEAPF32[i16 >> 2]; 13766 d21 = +HEAPF32[i5 + 40 >> 2]; 13767 i20 = i7 + 8 | 0; 13768 d22 = +HEAPF32[i20 >> 2]; 13769 d15 = +HEAPF32[i5 + 44 >> 2]; 13770 d14 = d19 * d21 - d22 * d15; 13771 d15 = d21 * d22 + d19 * d15; 13772 d19 = +d14; 13773 d22 = +d15; 13774 i13 = i1; 13775 HEAPF32[i13 >> 2] = d19; 13776 HEAPF32[i13 + 4 >> 2] = d22; 13777 d22 = +HEAPF32[i16 >> 2]; 13778 d19 = +HEAPF32[i5 + 48 >> 2]; 13779 d21 = +HEAPF32[i20 >> 2]; 13780 d10 = +HEAPF32[i5 + 52 >> 2]; 13781 d9 = +HEAPF32[i7 >> 2] + (d22 * d19 - d21 * d10); 13782 d10 = d19 * d21 + d22 * d10 + +HEAPF32[i7 + 4 >> 2]; 13783 if ((HEAP32[i6 >> 2] | 0) <= 0) { 13784 STACKTOP = i2; 13785 return; 13786 } 13787 i12 = i8 + 12 | 0; 13788 i11 = i8 + 8 | 0; 13789 i7 = i8 + 4 | 0; 13790 i13 = i1 + 4 | 0; 13791 i16 = 0; 13792 while (1) { 13793 d22 = +HEAPF32[i12 >> 2]; 13794 d17 = +HEAPF32[i5 + (i16 * 20 | 0) >> 2]; 13795 d18 = +HEAPF32[i11 >> 2]; 13796 d19 = +HEAPF32[i5 + (i16 * 20 | 0) + 4 >> 2]; 13797 d21 = +HEAPF32[i8 >> 2] + (d22 * d17 - d18 * d19); 13798 d19 = d17 * d18 + d22 * d19 + +HEAPF32[i7 >> 2]; 13799 d22 = d4 - (d14 * (d21 - d9) + (d19 - d10) * d15); 13800 d21 = +((d21 - d14 * d3 + (d21 + d14 * d22)) * .5); 13801 d22 = +((d19 - d15 * d3 + (d19 + d15 * d22)) * .5); 13802 i20 = i1 + (i16 << 3) + 8 | 0; 13803 HEAPF32[i20 >> 2] = d21; 13804 HEAPF32[i20 + 4 >> 2] = d22; 13805 i16 = i16 + 1 | 0; 13806 if ((i16 | 0) >= (HEAP32[i6 >> 2] | 0)) { 13807 break; 13808 } 13809 d14 = +HEAPF32[i1 >> 2]; 13810 d15 = +HEAPF32[i13 >> 2]; 13811 } 13812 STACKTOP = i2; 13813 return; 13814 } else if ((i11 | 0) == 0) { 13815 HEAPF32[i1 >> 2] = 1.0; 13816 i6 = i1 + 4 | 0; 13817 HEAPF32[i6 >> 2] = 0.0; 13818 d21 = +HEAPF32[i7 + 12 >> 2]; 13819 d22 = +HEAPF32[i5 + 48 >> 2]; 13820 d19 = +HEAPF32[i7 + 8 >> 2]; 13821 d10 = +HEAPF32[i5 + 52 >> 2]; 13822 d9 = +HEAPF32[i7 >> 2] + (d21 * d22 - d19 * d10); 13823 d10 = d22 * d19 + d21 * d10 + +HEAPF32[i7 + 4 >> 2]; 13824 d21 = +HEAPF32[i8 + 12 >> 2]; 13825 d19 = +HEAPF32[i5 >> 2]; 13826 d22 = +HEAPF32[i8 + 8 >> 2]; 13827 d15 = +HEAPF32[i5 + 4 >> 2]; 13828 d14 = +HEAPF32[i8 >> 2] + (d21 * d19 - d22 * d15); 13829 d15 = d19 * d22 + d21 * d15 + +HEAPF32[i8 + 4 >> 2]; 13830 d21 = d9 - d14; 13831 d22 = d10 - d15; 13832 if (d21 * d21 + d22 * d22 > 1.4210854715202004e-14) { 13833 d19 = d14 - d9; 13834 d17 = d15 - d10; 13835 d22 = +d19; 13836 d18 = +d17; 13837 i20 = i1; 13838 HEAPF32[i20 >> 2] = d22; 13839 HEAPF32[i20 + 4 >> 2] = d18; 13840 d18 = +Math_sqrt(+(d19 * d19 + d17 * d17)); 13841 if (!(d18 < 1.1920928955078125e-7)) { 13842 d22 = 1.0 / d18; 13843 d19 = d19 * d22; 13844 HEAPF32[i1 >> 2] = d19; 13845 d17 = d17 * d22; 13846 HEAPF32[i6 >> 2] = d17; 13847 } 13848 } else { 13849 d19 = 1.0; 13850 d17 = 0.0; 13851 } 13852 d21 = +((d9 + d19 * d4 + (d14 - d19 * d3)) * .5); 13853 d22 = +((d10 + d17 * d4 + (d15 - d17 * d3)) * .5); 13854 i20 = i1 + 8 | 0; 13855 HEAPF32[i20 >> 2] = d21; 13856 HEAPF32[i20 + 4 >> 2] = d22; 13857 STACKTOP = i2; 13858 return; 13859 } else { 13860 STACKTOP = i2; 13861 return; 13862 } 13863 } 13864 function _main(i3, i2) { 13865 i3 = i3 | 0; 13866 i2 = i2 | 0; 13867 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; 13868 i1 = STACKTOP; 13869 STACKTOP = STACKTOP + 240 | 0; 13870 i5 = i1; 13871 i12 = i1 + 224 | 0; 13872 i4 = i1 + 168 | 0; 13873 i9 = i1 + 160 | 0; 13874 i8 = i1 + 152 | 0; 13875 L1 : do { 13876 if ((i3 | 0) > 1) { 13877 i14 = HEAP8[HEAP32[i2 + 4 >> 2] | 0] | 0; 13878 switch (i14 | 0) { 13879 case 49: 13880 { 13881 HEAP32[2] = 5; 13882 HEAP32[4] = 35; 13883 i15 = 35; 13884 i14 = 5; 13885 break L1; 13886 } 13887 case 50: 13888 { 13889 HEAP32[2] = 32; 13890 HEAP32[4] = 161; 13891 i15 = 161; 13892 i14 = 32; 13893 break L1; 13894 } 13895 case 51: 13896 { 13897 i13 = 5; 13898 break L1; 13899 } 13900 case 52: 13901 { 13902 HEAP32[2] = 320; 13903 HEAP32[4] = 2331; 13904 i15 = 2331; 13905 i14 = 320; 13906 break L1; 13907 } 13908 case 53: 13909 { 13910 HEAP32[2] = 640; 13911 HEAP32[4] = 5661; 13912 i15 = 5661; 13913 i14 = 640; 13914 break L1; 13915 } 13916 case 48: 13917 { 13918 i20 = 0; 13919 STACKTOP = i1; 13920 return i20 | 0; 13921 } 13922 default: 13923 { 13924 HEAP32[i5 >> 2] = i14 + -48; 13925 _printf(80, i5 | 0) | 0; 13926 i20 = -1; 13927 STACKTOP = i1; 13928 return i20 | 0; 13929 } 13930 } 13931 } else { 13932 i13 = 5; 13933 } 13934 } while (0); 13935 if ((i13 | 0) == 5) { 13936 HEAP32[2] = 64; 13937 HEAP32[4] = 333; 13938 i15 = 333; 13939 i14 = 64; 13940 } 13941 i13 = i15 + i14 | 0; 13942 HEAP32[4] = i13; 13943 HEAP32[2] = 0; 13944 HEAP32[8] = __Znaj(i13 >>> 0 > 1073741823 ? -1 : i13 << 2) | 0; 13945 HEAPF32[i12 >> 2] = 0.0; 13946 HEAPF32[i12 + 4 >> 2] = -10.0; 13947 i15 = __Znwj(103028) | 0; 13948 __ZN7b2WorldC2ERK6b2Vec2(i15, i12); 13949 HEAP32[6] = i15; 13950 __ZN7b2World16SetAllowSleepingEb(i15, 0); 13951 HEAP32[i5 + 44 >> 2] = 0; 13952 i15 = i5 + 4 | 0; 13953 i14 = i5 + 36 | 0; 13954 HEAP32[i15 + 0 >> 2] = 0; 13955 HEAP32[i15 + 4 >> 2] = 0; 13956 HEAP32[i15 + 8 >> 2] = 0; 13957 HEAP32[i15 + 12 >> 2] = 0; 13958 HEAP32[i15 + 16 >> 2] = 0; 13959 HEAP32[i15 + 20 >> 2] = 0; 13960 HEAP32[i15 + 24 >> 2] = 0; 13961 HEAP32[i15 + 28 >> 2] = 0; 13962 HEAP8[i14] = 1; 13963 HEAP8[i5 + 37 | 0] = 1; 13964 HEAP8[i5 + 38 | 0] = 0; 13965 HEAP8[i5 + 39 | 0] = 0; 13966 HEAP32[i5 >> 2] = 0; 13967 HEAP8[i5 + 40 | 0] = 1; 13968 HEAPF32[i5 + 48 >> 2] = 1.0; 13969 i14 = __ZN7b2World10CreateBodyEPK9b2BodyDef(HEAP32[6] | 0, i5) | 0; 13970 HEAP32[i4 >> 2] = 240; 13971 HEAP32[i4 + 4 >> 2] = 1; 13972 HEAPF32[i4 + 8 >> 2] = .009999999776482582; 13973 i15 = i4 + 28 | 0; 13974 HEAP32[i15 + 0 >> 2] = 0; 13975 HEAP32[i15 + 4 >> 2] = 0; 13976 HEAP32[i15 + 8 >> 2] = 0; 13977 HEAP32[i15 + 12 >> 2] = 0; 13978 HEAP16[i15 + 16 >> 1] = 0; 13979 HEAPF32[i9 >> 2] = -40.0; 13980 HEAPF32[i9 + 4 >> 2] = 0.0; 13981 HEAPF32[i8 >> 2] = 40.0; 13982 HEAPF32[i8 + 4 >> 2] = 0.0; 13983 __ZN11b2EdgeShape3SetERK6b2Vec2S2_(i4, i9, i8); 13984 __ZN6b2Body13CreateFixtureEPK7b2Shapef(i14, i4, 0.0) | 0; 13985 HEAP32[i5 >> 2] = 504; 13986 HEAP32[i5 + 4 >> 2] = 2; 13987 HEAPF32[i5 + 8 >> 2] = .009999999776482582; 13988 HEAP32[i5 + 148 >> 2] = 0; 13989 HEAPF32[i5 + 12 >> 2] = 0.0; 13990 HEAPF32[i5 + 16 >> 2] = 0.0; 13991 __ZN14b2PolygonShape8SetAsBoxEff(i5, .5, .5); 13992 i14 = i4 + 44 | 0; 13993 i15 = i4 + 4 | 0; 13994 i8 = i4 + 36 | 0; 13995 i17 = i4 + 37 | 0; 13996 i18 = i4 + 38 | 0; 13997 i19 = i4 + 39 | 0; 13998 i20 = i4 + 40 | 0; 13999 i13 = i4 + 48 | 0; 14000 i12 = i4 + 4 | 0; 14001 d11 = -7.0; 14002 d10 = .75; 14003 i9 = 0; 14004 while (1) { 14005 d7 = d11; 14006 d6 = d10; 14007 i16 = i9; 14008 while (1) { 14009 HEAP32[i14 >> 2] = 0; 14010 HEAP32[i15 + 0 >> 2] = 0; 14011 HEAP32[i15 + 4 >> 2] = 0; 14012 HEAP32[i15 + 8 >> 2] = 0; 14013 HEAP32[i15 + 12 >> 2] = 0; 14014 HEAP32[i15 + 16 >> 2] = 0; 14015 HEAP32[i15 + 20 >> 2] = 0; 14016 HEAP32[i15 + 24 >> 2] = 0; 14017 HEAP32[i15 + 28 >> 2] = 0; 14018 HEAP8[i8] = 1; 14019 HEAP8[i17] = 1; 14020 HEAP8[i18] = 0; 14021 HEAP8[i19] = 0; 14022 HEAP8[i20] = 1; 14023 HEAPF32[i13 >> 2] = 1.0; 14024 HEAP32[i4 >> 2] = 2; 14025 d23 = +d7; 14026 d22 = +d6; 14027 i21 = i12; 14028 HEAPF32[i21 >> 2] = d23; 14029 HEAPF32[i21 + 4 >> 2] = d22; 14030 i21 = __ZN7b2World10CreateBodyEPK9b2BodyDef(HEAP32[6] | 0, i4) | 0; 14031 __ZN6b2Body13CreateFixtureEPK7b2Shapef(i21, i5, 5.0) | 0; 14032 HEAP32[14] = i21; 14033 i16 = i16 + 1 | 0; 14034 if ((i16 | 0) >= 40) { 14035 break; 14036 } else { 14037 d7 = d7 + 1.125; 14038 d6 = d6 + 0.0; 14039 } 14040 } 14041 i9 = i9 + 1 | 0; 14042 if ((i9 | 0) >= 40) { 14043 break; 14044 } else { 14045 d11 = d11 + .5625; 14046 d10 = d10 + 1.0; 14047 } 14048 } 14049 if ((HEAP32[2] | 0) > 0) { 14050 i4 = 0; 14051 do { 14052 __ZN7b2World4StepEfii(HEAP32[6] | 0, .01666666753590107, 3, 3); 14053 i4 = i4 + 1 | 0; 14054 } while ((i4 | 0) < (HEAP32[2] | 0)); 14055 } 14056 if ((i3 | 0) > 2) { 14057 i21 = (HEAP8[HEAP32[i2 + 8 >> 2] | 0] | 0) + -48 | 0; 14058 HEAP32[18] = i21; 14059 if ((i21 | 0) != 0) { 14060 _puts(208) | 0; 14061 _emscripten_set_main_loop(2, 60, 1); 14062 i21 = 0; 14063 STACKTOP = i1; 14064 return i21 | 0; 14065 } 14066 } else { 14067 HEAP32[18] = 0; 14068 } 14069 while (1) { 14070 __Z4iterv(); 14071 if ((HEAP32[16] | 0) > (HEAP32[4] | 0)) { 14072 i2 = 0; 14073 break; 14074 } 14075 } 14076 STACKTOP = i1; 14077 return i2 | 0; 14078 } 14079 function __ZN9b2Simplex9ReadCacheEPK14b2SimplexCachePK15b2DistanceProxyRK11b2TransformS5_S8_(i2, i11, i10, i4, i3, i5) { 14080 i2 = i2 | 0; 14081 i11 = i11 | 0; 14082 i10 = i10 | 0; 14083 i4 = i4 | 0; 14084 i3 = i3 | 0; 14085 i5 = i5 | 0; 14086 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; 14087 i1 = STACKTOP; 14088 i13 = HEAP16[i11 + 4 >> 1] | 0; 14089 if (!((i13 & 65535) < 4)) { 14090 ___assert_fail(2872, 2672, 102, 2896); 14091 } 14092 i12 = i13 & 65535; 14093 i6 = i2 + 108 | 0; 14094 HEAP32[i6 >> 2] = i12; 14095 L4 : do { 14096 if (!(i13 << 16 >> 16 == 0)) { 14097 i17 = i10 + 20 | 0; 14098 i21 = i10 + 16 | 0; 14099 i13 = i3 + 20 | 0; 14100 i14 = i3 + 16 | 0; 14101 i15 = i4 + 12 | 0; 14102 i16 = i4 + 8 | 0; 14103 i12 = i4 + 4 | 0; 14104 i18 = i5 + 12 | 0; 14105 i19 = i5 + 8 | 0; 14106 i20 = i5 + 4 | 0; 14107 i22 = 0; 14108 while (1) { 14109 i26 = HEAPU8[i11 + i22 + 6 | 0] | 0; 14110 HEAP32[i2 + (i22 * 36 | 0) + 28 >> 2] = i26; 14111 i23 = HEAPU8[i11 + i22 + 9 | 0] | 0; 14112 HEAP32[i2 + (i22 * 36 | 0) + 32 >> 2] = i23; 14113 if ((HEAP32[i17 >> 2] | 0) <= (i26 | 0)) { 14114 i9 = 6; 14115 break; 14116 } 14117 i26 = (HEAP32[i21 >> 2] | 0) + (i26 << 3) | 0; 14118 d25 = +HEAPF32[i26 >> 2]; 14119 d24 = +HEAPF32[i26 + 4 >> 2]; 14120 if ((HEAP32[i13 >> 2] | 0) <= (i23 | 0)) { 14121 i9 = 8; 14122 break; 14123 } 14124 i23 = (HEAP32[i14 >> 2] | 0) + (i23 << 3) | 0; 14125 d29 = +HEAPF32[i23 >> 2]; 14126 d31 = +HEAPF32[i23 + 4 >> 2]; 14127 d32 = +HEAPF32[i15 >> 2]; 14128 d30 = +HEAPF32[i16 >> 2]; 14129 d27 = +HEAPF32[i4 >> 2] + (d25 * d32 - d24 * d30); 14130 d28 = +d27; 14131 d30 = +(d24 * d32 + d25 * d30 + +HEAPF32[i12 >> 2]); 14132 i23 = i2 + (i22 * 36 | 0) | 0; 14133 HEAPF32[i23 >> 2] = d28; 14134 HEAPF32[i23 + 4 >> 2] = d30; 14135 d30 = +HEAPF32[i18 >> 2]; 14136 d25 = +HEAPF32[i19 >> 2]; 14137 d24 = +HEAPF32[i5 >> 2] + (d29 * d30 - d31 * d25); 14138 d28 = +d24; 14139 d25 = +(d31 * d30 + d29 * d25 + +HEAPF32[i20 >> 2]); 14140 i23 = i2 + (i22 * 36 | 0) + 8 | 0; 14141 HEAPF32[i23 >> 2] = d28; 14142 HEAPF32[i23 + 4 >> 2] = d25; 14143 d24 = +(d24 - d27); 14144 d25 = +(+HEAPF32[i2 + (i22 * 36 | 0) + 12 >> 2] - +HEAPF32[i2 + (i22 * 36 | 0) + 4 >> 2]); 14145 i23 = i2 + (i22 * 36 | 0) + 16 | 0; 14146 HEAPF32[i23 >> 2] = d24; 14147 HEAPF32[i23 + 4 >> 2] = d25; 14148 HEAPF32[i2 + (i22 * 36 | 0) + 24 >> 2] = 0.0; 14149 i22 = i22 + 1 | 0; 14150 i23 = HEAP32[i6 >> 2] | 0; 14151 if ((i22 | 0) >= (i23 | 0)) { 14152 i7 = i23; 14153 break L4; 14154 } 14155 } 14156 if ((i9 | 0) == 6) { 14157 ___assert_fail(2776, 2808, 103, 2840); 14158 } else if ((i9 | 0) == 8) { 14159 ___assert_fail(2776, 2808, 103, 2840); 14160 } 14161 } else { 14162 i7 = i12; 14163 } 14164 } while (0); 14165 do { 14166 if ((i7 | 0) > 1) { 14167 d24 = +HEAPF32[i11 >> 2]; 14168 if ((i7 | 0) == 2) { 14169 d32 = +HEAPF32[i2 + 16 >> 2] - +HEAPF32[i2 + 52 >> 2]; 14170 d8 = +HEAPF32[i2 + 20 >> 2] - +HEAPF32[i2 + 56 >> 2]; 14171 d8 = +Math_sqrt(+(d32 * d32 + d8 * d8)); 14172 } else if ((i7 | 0) == 3) { 14173 d8 = +HEAPF32[i2 + 16 >> 2]; 14174 d32 = +HEAPF32[i2 + 20 >> 2]; 14175 d8 = (+HEAPF32[i2 + 52 >> 2] - d8) * (+HEAPF32[i2 + 92 >> 2] - d32) - (+HEAPF32[i2 + 56 >> 2] - d32) * (+HEAPF32[i2 + 88 >> 2] - d8); 14176 } else { 14177 ___assert_fail(2712, 2672, 259, 2736); 14178 } 14179 if (!(d8 < d24 * .5) ? !(d24 * 2.0 < d8 | d8 < 1.1920928955078125e-7) : 0) { 14180 i9 = 18; 14181 break; 14182 } 14183 HEAP32[i6 >> 2] = 0; 14184 } else { 14185 i9 = 18; 14186 } 14187 } while (0); 14188 if ((i9 | 0) == 18 ? (i7 | 0) != 0 : 0) { 14189 STACKTOP = i1; 14190 return; 14191 } 14192 HEAP32[i2 + 28 >> 2] = 0; 14193 HEAP32[i2 + 32 >> 2] = 0; 14194 if ((HEAP32[i10 + 20 >> 2] | 0) <= 0) { 14195 ___assert_fail(2776, 2808, 103, 2840); 14196 } 14197 i26 = HEAP32[i10 + 16 >> 2] | 0; 14198 d8 = +HEAPF32[i26 >> 2]; 14199 d24 = +HEAPF32[i26 + 4 >> 2]; 14200 if ((HEAP32[i3 + 20 >> 2] | 0) <= 0) { 14201 ___assert_fail(2776, 2808, 103, 2840); 14202 } 14203 i26 = HEAP32[i3 + 16 >> 2] | 0; 14204 d27 = +HEAPF32[i26 >> 2]; 14205 d25 = +HEAPF32[i26 + 4 >> 2]; 14206 d30 = +HEAPF32[i4 + 12 >> 2]; 14207 d32 = +HEAPF32[i4 + 8 >> 2]; 14208 d31 = +HEAPF32[i4 >> 2] + (d8 * d30 - d24 * d32); 14209 d32 = d24 * d30 + d8 * d32 + +HEAPF32[i4 + 4 >> 2]; 14210 d30 = +d31; 14211 d28 = +d32; 14212 i26 = i2; 14213 HEAPF32[i26 >> 2] = d30; 14214 HEAPF32[i26 + 4 >> 2] = d28; 14215 d28 = +HEAPF32[i5 + 12 >> 2]; 14216 d30 = +HEAPF32[i5 + 8 >> 2]; 14217 d29 = +HEAPF32[i5 >> 2] + (d27 * d28 - d25 * d30); 14218 d30 = d25 * d28 + d27 * d30 + +HEAPF32[i5 + 4 >> 2]; 14219 d27 = +d29; 14220 d28 = +d30; 14221 i26 = i2 + 8 | 0; 14222 HEAPF32[i26 >> 2] = d27; 14223 HEAPF32[i26 + 4 >> 2] = d28; 14224 d31 = +(d29 - d31); 14225 d32 = +(d30 - d32); 14226 i26 = i2 + 16 | 0; 14227 HEAPF32[i26 >> 2] = d31; 14228 HEAPF32[i26 + 4 >> 2] = d32; 14229 HEAP32[i6 >> 2] = 1; 14230 STACKTOP = i1; 14231 return; 14232 } 14233 function __ZNSt3__17__sort4IRPFbRK6b2PairS3_EPS1_EEjT0_S8_S8_S8_T_(i6, i7, i5, i4, i1) { 14234 i6 = i6 | 0; 14235 i7 = i7 | 0; 14236 i5 = i5 | 0; 14237 i4 = i4 | 0; 14238 i1 = i1 | 0; 14239 var i2 = 0, i3 = 0, i8 = 0, i9 = 0; 14240 i2 = STACKTOP; 14241 STACKTOP = STACKTOP + 16 | 0; 14242 i3 = i2; 14243 i9 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0; 14244 i8 = FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0; 14245 do { 14246 if (i9) { 14247 if (i8) { 14248 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 14249 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 14250 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 14251 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 14252 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 14253 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 14254 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 14255 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 14256 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 14257 i8 = 1; 14258 break; 14259 } 14260 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 14261 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 14262 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 14263 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 14264 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 14265 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 14266 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 14267 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 14268 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 14269 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0) { 14270 HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 14271 HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 14272 HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 14273 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 14274 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 14275 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 14276 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 14277 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 14278 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 14279 i8 = 2; 14280 } else { 14281 i8 = 1; 14282 } 14283 } else { 14284 if (i8) { 14285 HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 14286 HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 14287 HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 14288 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 14289 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 14290 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 14291 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 14292 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 14293 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 14294 if (FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0) { 14295 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 14296 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 14297 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 14298 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 14299 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 14300 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 14301 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 14302 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 14303 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 14304 i8 = 2; 14305 } else { 14306 i8 = 1; 14307 } 14308 } else { 14309 i8 = 0; 14310 } 14311 } 14312 } while (0); 14313 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i4, i5) | 0)) { 14314 i9 = i8; 14315 STACKTOP = i2; 14316 return i9 | 0; 14317 } 14318 HEAP32[i3 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 14319 HEAP32[i3 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 14320 HEAP32[i3 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 14321 HEAP32[i5 + 0 >> 2] = HEAP32[i4 + 0 >> 2]; 14322 HEAP32[i5 + 4 >> 2] = HEAP32[i4 + 4 >> 2]; 14323 HEAP32[i5 + 8 >> 2] = HEAP32[i4 + 8 >> 2]; 14324 HEAP32[i4 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 14325 HEAP32[i4 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 14326 HEAP32[i4 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 14327 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i5, i7) | 0)) { 14328 i9 = i8 + 1 | 0; 14329 STACKTOP = i2; 14330 return i9 | 0; 14331 } 14332 HEAP32[i3 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 14333 HEAP32[i3 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 14334 HEAP32[i3 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 14335 HEAP32[i7 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 14336 HEAP32[i7 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 14337 HEAP32[i7 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 14338 HEAP32[i5 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 14339 HEAP32[i5 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 14340 HEAP32[i5 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 14341 if (!(FUNCTION_TABLE_iii[HEAP32[i1 >> 2] & 3](i7, i6) | 0)) { 14342 i9 = i8 + 2 | 0; 14343 STACKTOP = i2; 14344 return i9 | 0; 14345 } 14346 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 14347 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 14348 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 14349 HEAP32[i6 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 14350 HEAP32[i6 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 14351 HEAP32[i6 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 14352 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 14353 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 14354 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 14355 i9 = i8 + 3 | 0; 14356 STACKTOP = i2; 14357 return i9 | 0; 14358 } 14359 function __ZN15b2ContactSolver27SolveTOIPositionConstraintsEii(i9, i2, i5) { 14360 i9 = i9 | 0; 14361 i2 = i2 | 0; 14362 i5 = i5 | 0; 14363 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; 14364 i1 = STACKTOP; 14365 STACKTOP = STACKTOP + 64 | 0; 14366 i8 = i1 + 40 | 0; 14367 i3 = i1 + 24 | 0; 14368 i4 = i1; 14369 i6 = i9 + 48 | 0; 14370 if ((HEAP32[i6 >> 2] | 0) <= 0) { 14371 d45 = 0.0; 14372 i37 = d45 >= -.007499999832361937; 14373 STACKTOP = i1; 14374 return i37 | 0; 14375 } 14376 i7 = i9 + 36 | 0; 14377 i14 = i9 + 24 | 0; 14378 i9 = i8 + 8 | 0; 14379 i15 = i8 + 12 | 0; 14380 i10 = i3 + 8 | 0; 14381 i11 = i3 + 12 | 0; 14382 i12 = i4 + 8 | 0; 14383 i13 = i4 + 16 | 0; 14384 i16 = 0; 14385 d34 = 0.0; 14386 do { 14387 i37 = HEAP32[i7 >> 2] | 0; 14388 i19 = i37 + (i16 * 88 | 0) | 0; 14389 i17 = HEAP32[i37 + (i16 * 88 | 0) + 32 >> 2] | 0; 14390 i18 = HEAP32[i37 + (i16 * 88 | 0) + 36 >> 2] | 0; 14391 i20 = i37 + (i16 * 88 | 0) + 48 | 0; 14392 d21 = +HEAPF32[i20 >> 2]; 14393 d22 = +HEAPF32[i20 + 4 >> 2]; 14394 i20 = i37 + (i16 * 88 | 0) + 56 | 0; 14395 d23 = +HEAPF32[i20 >> 2]; 14396 d24 = +HEAPF32[i20 + 4 >> 2]; 14397 i20 = HEAP32[i37 + (i16 * 88 | 0) + 84 >> 2] | 0; 14398 if ((i17 | 0) == (i2 | 0) | (i17 | 0) == (i5 | 0)) { 14399 d26 = +HEAPF32[i37 + (i16 * 88 | 0) + 64 >> 2]; 14400 d27 = +HEAPF32[i37 + (i16 * 88 | 0) + 40 >> 2]; 14401 } else { 14402 d26 = 0.0; 14403 d27 = 0.0; 14404 } 14405 d25 = +HEAPF32[i37 + (i16 * 88 | 0) + 44 >> 2]; 14406 d28 = +HEAPF32[i37 + (i16 * 88 | 0) + 68 >> 2]; 14407 i37 = HEAP32[i14 >> 2] | 0; 14408 i46 = i37 + (i17 * 12 | 0) | 0; 14409 d33 = +HEAPF32[i46 >> 2]; 14410 d35 = +HEAPF32[i46 + 4 >> 2]; 14411 d29 = +HEAPF32[i37 + (i17 * 12 | 0) + 8 >> 2]; 14412 i46 = i37 + (i18 * 12 | 0) | 0; 14413 d32 = +HEAPF32[i46 >> 2]; 14414 d36 = +HEAPF32[i46 + 4 >> 2]; 14415 d31 = +HEAPF32[i37 + (i18 * 12 | 0) + 8 >> 2]; 14416 if ((i20 | 0) > 0) { 14417 d30 = d27 + d25; 14418 i37 = 0; 14419 do { 14420 d38 = +Math_sin(+d29); 14421 HEAPF32[i9 >> 2] = d38; 14422 d44 = +Math_cos(+d29); 14423 HEAPF32[i15 >> 2] = d44; 14424 d43 = +Math_sin(+d31); 14425 HEAPF32[i10 >> 2] = d43; 14426 d41 = +Math_cos(+d31); 14427 HEAPF32[i11 >> 2] = d41; 14428 d40 = +(d33 - (d21 * d44 - d22 * d38)); 14429 d38 = +(d35 - (d22 * d44 + d21 * d38)); 14430 i46 = i8; 14431 HEAPF32[i46 >> 2] = d40; 14432 HEAPF32[i46 + 4 >> 2] = d38; 14433 d38 = +(d32 - (d23 * d41 - d24 * d43)); 14434 d43 = +(d36 - (d24 * d41 + d23 * d43)); 14435 i46 = i3; 14436 HEAPF32[i46 >> 2] = d38; 14437 HEAPF32[i46 + 4 >> 2] = d43; 14438 __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK11b2TransformS4_i(i4, i19, i8, i3, i37); 14439 i46 = i4; 14440 d43 = +HEAPF32[i46 >> 2]; 14441 d38 = +HEAPF32[i46 + 4 >> 2]; 14442 i46 = i12; 14443 d41 = +HEAPF32[i46 >> 2]; 14444 d40 = +HEAPF32[i46 + 4 >> 2]; 14445 d44 = +HEAPF32[i13 >> 2]; 14446 d39 = d41 - d33; 14447 d42 = d40 - d35; 14448 d41 = d41 - d32; 14449 d40 = d40 - d36; 14450 d34 = d34 < d44 ? d34 : d44; 14451 d44 = (d44 + .004999999888241291) * .75; 14452 d44 = d44 < 0.0 ? d44 : 0.0; 14453 d45 = d38 * d39 - d43 * d42; 14454 d47 = d38 * d41 - d43 * d40; 14455 d45 = d47 * d28 * d47 + (d30 + d45 * d26 * d45); 14456 if (d45 > 0.0) { 14457 d44 = -(d44 < -.20000000298023224 ? -.20000000298023224 : d44) / d45; 14458 } else { 14459 d44 = 0.0; 14460 } 14461 d47 = d43 * d44; 14462 d45 = d38 * d44; 14463 d33 = d33 - d27 * d47; 14464 d35 = d35 - d27 * d45; 14465 d29 = d29 - d26 * (d39 * d45 - d42 * d47); 14466 d32 = d32 + d25 * d47; 14467 d36 = d36 + d25 * d45; 14468 d31 = d31 + d28 * (d41 * d45 - d40 * d47); 14469 i37 = i37 + 1 | 0; 14470 } while ((i37 | 0) != (i20 | 0)); 14471 i37 = HEAP32[i14 >> 2] | 0; 14472 } 14473 d47 = +d33; 14474 d45 = +d35; 14475 i46 = i37 + (i17 * 12 | 0) | 0; 14476 HEAPF32[i46 >> 2] = d47; 14477 HEAPF32[i46 + 4 >> 2] = d45; 14478 i46 = HEAP32[i14 >> 2] | 0; 14479 HEAPF32[i46 + (i17 * 12 | 0) + 8 >> 2] = d29; 14480 d45 = +d32; 14481 d47 = +d36; 14482 i46 = i46 + (i18 * 12 | 0) | 0; 14483 HEAPF32[i46 >> 2] = d45; 14484 HEAPF32[i46 + 4 >> 2] = d47; 14485 HEAPF32[(HEAP32[i14 >> 2] | 0) + (i18 * 12 | 0) + 8 >> 2] = d31; 14486 i16 = i16 + 1 | 0; 14487 } while ((i16 | 0) < (HEAP32[i6 >> 2] | 0)); 14488 i46 = d34 >= -.007499999832361937; 14489 STACKTOP = i1; 14490 return i46 | 0; 14491 } 14492 function __ZN15b2ContactSolver24SolvePositionConstraintsEv(i7) { 14493 i7 = i7 | 0; 14494 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; 14495 i1 = STACKTOP; 14496 STACKTOP = STACKTOP + 64 | 0; 14497 i4 = i1 + 40 | 0; 14498 i5 = i1 + 24 | 0; 14499 i3 = i1; 14500 i2 = i7 + 48 | 0; 14501 if ((HEAP32[i2 >> 2] | 0) <= 0) { 14502 d43 = 0.0; 14503 i35 = d43 >= -.014999999664723873; 14504 STACKTOP = i1; 14505 return i35 | 0; 14506 } 14507 i6 = i7 + 36 | 0; 14508 i9 = i7 + 24 | 0; 14509 i13 = i4 + 8 | 0; 14510 i7 = i4 + 12 | 0; 14511 i8 = i5 + 8 | 0; 14512 i12 = i5 + 12 | 0; 14513 i10 = i3 + 8 | 0; 14514 i11 = i3 + 16 | 0; 14515 i35 = HEAP32[i9 >> 2] | 0; 14516 i15 = 0; 14517 d32 = 0.0; 14518 do { 14519 i21 = HEAP32[i6 >> 2] | 0; 14520 i26 = i21 + (i15 * 88 | 0) | 0; 14521 i16 = HEAP32[i21 + (i15 * 88 | 0) + 32 >> 2] | 0; 14522 i14 = HEAP32[i21 + (i15 * 88 | 0) + 36 >> 2] | 0; 14523 i44 = i21 + (i15 * 88 | 0) + 48 | 0; 14524 d22 = +HEAPF32[i44 >> 2]; 14525 d23 = +HEAPF32[i44 + 4 >> 2]; 14526 d25 = +HEAPF32[i21 + (i15 * 88 | 0) + 40 >> 2]; 14527 d18 = +HEAPF32[i21 + (i15 * 88 | 0) + 64 >> 2]; 14528 i44 = i21 + (i15 * 88 | 0) + 56 | 0; 14529 d24 = +HEAPF32[i44 >> 2]; 14530 d19 = +HEAPF32[i44 + 4 >> 2]; 14531 d17 = +HEAPF32[i21 + (i15 * 88 | 0) + 44 >> 2]; 14532 d20 = +HEAPF32[i21 + (i15 * 88 | 0) + 68 >> 2]; 14533 i21 = HEAP32[i21 + (i15 * 88 | 0) + 84 >> 2] | 0; 14534 i44 = i35 + (i16 * 12 | 0) | 0; 14535 d28 = +HEAPF32[i44 >> 2]; 14536 d33 = +HEAPF32[i44 + 4 >> 2]; 14537 d29 = +HEAPF32[i35 + (i16 * 12 | 0) + 8 >> 2]; 14538 i44 = i35 + (i14 * 12 | 0) | 0; 14539 d30 = +HEAPF32[i44 >> 2]; 14540 d34 = +HEAPF32[i44 + 4 >> 2]; 14541 d31 = +HEAPF32[i35 + (i14 * 12 | 0) + 8 >> 2]; 14542 if ((i21 | 0) > 0) { 14543 d27 = d25 + d17; 14544 i35 = 0; 14545 do { 14546 d41 = +Math_sin(+d29); 14547 HEAPF32[i13 >> 2] = d41; 14548 d42 = +Math_cos(+d29); 14549 HEAPF32[i7 >> 2] = d42; 14550 d39 = +Math_sin(+d31); 14551 HEAPF32[i8 >> 2] = d39; 14552 d38 = +Math_cos(+d31); 14553 HEAPF32[i12 >> 2] = d38; 14554 d40 = +(d28 - (d22 * d42 - d23 * d41)); 14555 d41 = +(d33 - (d23 * d42 + d22 * d41)); 14556 i44 = i4; 14557 HEAPF32[i44 >> 2] = d40; 14558 HEAPF32[i44 + 4 >> 2] = d41; 14559 d41 = +(d30 - (d24 * d38 - d19 * d39)); 14560 d39 = +(d34 - (d19 * d38 + d24 * d39)); 14561 i44 = i5; 14562 HEAPF32[i44 >> 2] = d41; 14563 HEAPF32[i44 + 4 >> 2] = d39; 14564 __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK11b2TransformS4_i(i3, i26, i4, i5, i35); 14565 i44 = i3; 14566 d39 = +HEAPF32[i44 >> 2]; 14567 d41 = +HEAPF32[i44 + 4 >> 2]; 14568 i44 = i10; 14569 d38 = +HEAPF32[i44 >> 2]; 14570 d40 = +HEAPF32[i44 + 4 >> 2]; 14571 d42 = +HEAPF32[i11 >> 2]; 14572 d36 = d38 - d28; 14573 d37 = d40 - d33; 14574 d38 = d38 - d30; 14575 d40 = d40 - d34; 14576 d32 = d32 < d42 ? d32 : d42; 14577 d42 = (d42 + .004999999888241291) * .20000000298023224; 14578 d43 = d42 < 0.0 ? d42 : 0.0; 14579 d42 = d41 * d36 - d39 * d37; 14580 d45 = d41 * d38 - d39 * d40; 14581 d42 = d45 * d20 * d45 + (d27 + d42 * d18 * d42); 14582 if (d42 > 0.0) { 14583 d42 = -(d43 < -.20000000298023224 ? -.20000000298023224 : d43) / d42; 14584 } else { 14585 d42 = 0.0; 14586 } 14587 d45 = d39 * d42; 14588 d43 = d41 * d42; 14589 d28 = d28 - d25 * d45; 14590 d33 = d33 - d25 * d43; 14591 d29 = d29 - d18 * (d36 * d43 - d37 * d45); 14592 d30 = d30 + d17 * d45; 14593 d34 = d34 + d17 * d43; 14594 d31 = d31 + d20 * (d38 * d43 - d40 * d45); 14595 i35 = i35 + 1 | 0; 14596 } while ((i35 | 0) != (i21 | 0)); 14597 i35 = HEAP32[i9 >> 2] | 0; 14598 } 14599 d45 = +d28; 14600 d43 = +d33; 14601 i35 = i35 + (i16 * 12 | 0) | 0; 14602 HEAPF32[i35 >> 2] = d45; 14603 HEAPF32[i35 + 4 >> 2] = d43; 14604 i35 = HEAP32[i9 >> 2] | 0; 14605 HEAPF32[i35 + (i16 * 12 | 0) + 8 >> 2] = d29; 14606 d43 = +d30; 14607 d45 = +d34; 14608 i35 = i35 + (i14 * 12 | 0) | 0; 14609 HEAPF32[i35 >> 2] = d43; 14610 HEAPF32[i35 + 4 >> 2] = d45; 14611 i35 = HEAP32[i9 >> 2] | 0; 14612 HEAPF32[i35 + (i14 * 12 | 0) + 8 >> 2] = d31; 14613 i15 = i15 + 1 | 0; 14614 } while ((i15 | 0) < (HEAP32[i2 >> 2] | 0)); 14615 i44 = d32 >= -.014999999664723873; 14616 STACKTOP = i1; 14617 return i44 | 0; 14618 } 14619 function __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2CircleShapeS6_(i1, i7, i6, i22, i5) { 14620 i1 = i1 | 0; 14621 i7 = i7 | 0; 14622 i6 = i6 | 0; 14623 i22 = i22 | 0; 14624 i5 = i5 | 0; 14625 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; 14626 i4 = STACKTOP; 14627 i2 = i1 + 60 | 0; 14628 HEAP32[i2 >> 2] = 0; 14629 i3 = i22 + 12 | 0; 14630 d9 = +HEAPF32[i5 + 12 >> 2]; 14631 d23 = +HEAPF32[i3 >> 2]; 14632 d17 = +HEAPF32[i5 + 8 >> 2]; 14633 d18 = +HEAPF32[i22 + 16 >> 2]; 14634 d21 = +HEAPF32[i5 >> 2] + (d9 * d23 - d17 * d18) - +HEAPF32[i6 >> 2]; 14635 d18 = d23 * d17 + d9 * d18 + +HEAPF32[i5 + 4 >> 2] - +HEAPF32[i6 + 4 >> 2]; 14636 d9 = +HEAPF32[i6 + 12 >> 2]; 14637 d17 = +HEAPF32[i6 + 8 >> 2]; 14638 d23 = d21 * d9 + d18 * d17; 14639 d17 = d9 * d18 - d21 * d17; 14640 i6 = i7 + 12 | 0; 14641 i5 = HEAP32[i6 >> 2] | 0; 14642 i6 = HEAP32[i6 + 4 >> 2] | 0; 14643 d21 = (HEAP32[tempDoublePtr >> 2] = i5, +HEAPF32[tempDoublePtr >> 2]); 14644 d18 = (HEAP32[tempDoublePtr >> 2] = i6, +HEAPF32[tempDoublePtr >> 2]); 14645 i15 = i7 + 20 | 0; 14646 i14 = HEAP32[i15 >> 2] | 0; 14647 i15 = HEAP32[i15 + 4 >> 2] | 0; 14648 d9 = (HEAP32[tempDoublePtr >> 2] = i14, +HEAPF32[tempDoublePtr >> 2]); 14649 d10 = (HEAP32[tempDoublePtr >> 2] = i15, +HEAPF32[tempDoublePtr >> 2]); 14650 d8 = d9 - d21; 14651 d16 = d10 - d18; 14652 d19 = d8 * (d9 - d23) + d16 * (d10 - d17); 14653 d13 = d23 - d21; 14654 d12 = d17 - d18; 14655 d20 = d13 * d8 + d12 * d16; 14656 d11 = +HEAPF32[i7 + 8 >> 2] + +HEAPF32[i22 + 8 >> 2]; 14657 if (d20 <= 0.0) { 14658 if (d13 * d13 + d12 * d12 > d11 * d11) { 14659 STACKTOP = i4; 14660 return; 14661 } 14662 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) { 14663 STACKTOP = i4; 14664 return; 14665 } 14666 HEAP32[i2 >> 2] = 1; 14667 HEAP32[i1 + 56 >> 2] = 0; 14668 HEAPF32[i1 + 40 >> 2] = 0.0; 14669 HEAPF32[i1 + 44 >> 2] = 0.0; 14670 i14 = i1 + 48 | 0; 14671 HEAP32[i14 >> 2] = i5; 14672 HEAP32[i14 + 4 >> 2] = i6; 14673 i14 = i1 + 16 | 0; 14674 HEAP32[i14 >> 2] = 0; 14675 HEAP8[i14] = 0; 14676 HEAP8[i14 + 1 | 0] = 0; 14677 HEAP8[i14 + 2 | 0] = 0; 14678 HEAP8[i14 + 3 | 0] = 0; 14679 i14 = i3; 14680 i15 = HEAP32[i14 + 4 >> 2] | 0; 14681 i22 = i1; 14682 HEAP32[i22 >> 2] = HEAP32[i14 >> 2]; 14683 HEAP32[i22 + 4 >> 2] = i15; 14684 STACKTOP = i4; 14685 return; 14686 } 14687 if (d19 <= 0.0) { 14688 d8 = d23 - d9; 14689 d12 = d17 - d10; 14690 if (d8 * d8 + d12 * d12 > d11 * d11) { 14691 STACKTOP = i4; 14692 return; 14693 } 14694 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) { 14695 STACKTOP = i4; 14696 return; 14697 } 14698 HEAP32[i2 >> 2] = 1; 14699 HEAP32[i1 + 56 >> 2] = 0; 14700 HEAPF32[i1 + 40 >> 2] = 0.0; 14701 HEAPF32[i1 + 44 >> 2] = 0.0; 14702 i22 = i1 + 48 | 0; 14703 HEAP32[i22 >> 2] = i14; 14704 HEAP32[i22 + 4 >> 2] = i15; 14705 i14 = i1 + 16 | 0; 14706 HEAP32[i14 >> 2] = 0; 14707 HEAP8[i14] = 1; 14708 HEAP8[i14 + 1 | 0] = 0; 14709 HEAP8[i14 + 2 | 0] = 0; 14710 HEAP8[i14 + 3 | 0] = 0; 14711 i14 = i3; 14712 i15 = HEAP32[i14 + 4 >> 2] | 0; 14713 i22 = i1; 14714 HEAP32[i22 >> 2] = HEAP32[i14 >> 2]; 14715 HEAP32[i22 + 4 >> 2] = i15; 14716 STACKTOP = i4; 14717 return; 14718 } 14719 d24 = d8 * d8 + d16 * d16; 14720 if (!(d24 > 0.0)) { 14721 ___assert_fail(5560, 5576, 127, 5616); 14722 } 14723 d24 = 1.0 / d24; 14724 d23 = d23 - (d21 * d19 + d9 * d20) * d24; 14725 d24 = d17 - (d18 * d19 + d10 * d20) * d24; 14726 if (d23 * d23 + d24 * d24 > d11 * d11) { 14727 STACKTOP = i4; 14728 return; 14729 } 14730 d9 = -d16; 14731 if (d8 * d12 + d13 * d9 < 0.0) { 14732 d8 = -d8; 14733 } else { 14734 d16 = d9; 14735 } 14736 d9 = +Math_sqrt(+(d8 * d8 + d16 * d16)); 14737 if (!(d9 < 1.1920928955078125e-7)) { 14738 d24 = 1.0 / d9; 14739 d16 = d16 * d24; 14740 d8 = d8 * d24; 14741 } 14742 HEAP32[i2 >> 2] = 1; 14743 HEAP32[i1 + 56 >> 2] = 1; 14744 d23 = +d16; 14745 d24 = +d8; 14746 i14 = i1 + 40 | 0; 14747 HEAPF32[i14 >> 2] = d23; 14748 HEAPF32[i14 + 4 >> 2] = d24; 14749 i14 = i1 + 48 | 0; 14750 HEAP32[i14 >> 2] = i5; 14751 HEAP32[i14 + 4 >> 2] = i6; 14752 i14 = i1 + 16 | 0; 14753 HEAP32[i14 >> 2] = 0; 14754 HEAP8[i14] = 0; 14755 HEAP8[i14 + 1 | 0] = 0; 14756 HEAP8[i14 + 2 | 0] = 1; 14757 HEAP8[i14 + 3 | 0] = 0; 14758 i14 = i3; 14759 i15 = HEAP32[i14 + 4 >> 2] | 0; 14760 i22 = i1; 14761 HEAP32[i22 >> 2] = HEAP32[i14 >> 2]; 14762 HEAP32[i22 + 4 >> 2] = i15; 14763 STACKTOP = i4; 14764 return; 14765 } 14766 function __ZN6b2BodyC2EPK9b2BodyDefP7b2World(i1, i2, i5) { 14767 i1 = i1 | 0; 14768 i2 = i2 | 0; 14769 i5 = i5 | 0; 14770 var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, d13 = 0.0; 14771 i3 = STACKTOP; 14772 i9 = i2 + 4 | 0; 14773 d13 = +HEAPF32[i9 >> 2]; 14774 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) { 14775 ___assert_fail(1496, 1520, 27, 1552); 14776 } 14777 d13 = +HEAPF32[i2 + 8 >> 2]; 14778 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) { 14779 ___assert_fail(1496, 1520, 27, 1552); 14780 } 14781 i6 = i2 + 16 | 0; 14782 d13 = +HEAPF32[i6 >> 2]; 14783 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) { 14784 ___assert_fail(1560, 1520, 28, 1552); 14785 } 14786 d13 = +HEAPF32[i2 + 20 >> 2]; 14787 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) { 14788 ___assert_fail(1560, 1520, 28, 1552); 14789 } 14790 i7 = i2 + 12 | 0; 14791 d13 = +HEAPF32[i7 >> 2]; 14792 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) { 14793 ___assert_fail(1592, 1520, 29, 1552); 14794 } 14795 i8 = i2 + 24 | 0; 14796 d13 = +HEAPF32[i8 >> 2]; 14797 if (!(d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf)) { 14798 ___assert_fail(1616, 1520, 30, 1552); 14799 } 14800 i4 = i2 + 32 | 0; 14801 d13 = +HEAPF32[i4 >> 2]; 14802 if (!(d13 >= 0.0) | d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf ^ 1) { 14803 ___assert_fail(1648, 1520, 31, 1552); 14804 } 14805 i10 = i2 + 28 | 0; 14806 d13 = +HEAPF32[i10 >> 2]; 14807 if (!(d13 >= 0.0) | d13 == d13 & 0.0 == 0.0 & d13 > -inf & d13 < inf ^ 1) { 14808 ___assert_fail(1712, 1520, 32, 1552); 14809 } 14810 i11 = i1 + 4 | 0; 14811 i12 = (HEAP8[i2 + 39 | 0] | 0) == 0 ? 0 : 8; 14812 HEAP16[i11 >> 1] = i12; 14813 if ((HEAP8[i2 + 38 | 0] | 0) != 0) { 14814 i12 = (i12 & 65535 | 16) & 65535; 14815 HEAP16[i11 >> 1] = i12; 14816 } 14817 if ((HEAP8[i2 + 36 | 0] | 0) != 0) { 14818 i12 = (i12 & 65535 | 4) & 65535; 14819 HEAP16[i11 >> 1] = i12; 14820 } 14821 if ((HEAP8[i2 + 37 | 0] | 0) != 0) { 14822 i12 = (i12 & 65535 | 2) & 65535; 14823 HEAP16[i11 >> 1] = i12; 14824 } 14825 if ((HEAP8[i2 + 40 | 0] | 0) != 0) { 14826 HEAP16[i11 >> 1] = i12 & 65535 | 32; 14827 } 14828 HEAP32[i1 + 88 >> 2] = i5; 14829 i11 = i9; 14830 i12 = HEAP32[i11 >> 2] | 0; 14831 i11 = HEAP32[i11 + 4 >> 2] | 0; 14832 i9 = i1 + 12 | 0; 14833 HEAP32[i9 >> 2] = i12; 14834 HEAP32[i9 + 4 >> 2] = i11; 14835 d13 = +HEAPF32[i7 >> 2]; 14836 HEAPF32[i1 + 20 >> 2] = +Math_sin(+d13); 14837 HEAPF32[i1 + 24 >> 2] = +Math_cos(+d13); 14838 HEAPF32[i1 + 28 >> 2] = 0.0; 14839 HEAPF32[i1 + 32 >> 2] = 0.0; 14840 i9 = i1 + 36 | 0; 14841 HEAP32[i9 >> 2] = i12; 14842 HEAP32[i9 + 4 >> 2] = i11; 14843 i9 = i1 + 44 | 0; 14844 HEAP32[i9 >> 2] = i12; 14845 HEAP32[i9 + 4 >> 2] = i11; 14846 HEAPF32[i1 + 52 >> 2] = +HEAPF32[i7 >> 2]; 14847 HEAPF32[i1 + 56 >> 2] = +HEAPF32[i7 >> 2]; 14848 HEAPF32[i1 + 60 >> 2] = 0.0; 14849 HEAP32[i1 + 108 >> 2] = 0; 14850 HEAP32[i1 + 112 >> 2] = 0; 14851 HEAP32[i1 + 92 >> 2] = 0; 14852 HEAP32[i1 + 96 >> 2] = 0; 14853 i9 = i6; 14854 i11 = HEAP32[i9 + 4 >> 2] | 0; 14855 i12 = i1 + 64 | 0; 14856 HEAP32[i12 >> 2] = HEAP32[i9 >> 2]; 14857 HEAP32[i12 + 4 >> 2] = i11; 14858 HEAPF32[i1 + 72 >> 2] = +HEAPF32[i8 >> 2]; 14859 HEAPF32[i1 + 132 >> 2] = +HEAPF32[i10 >> 2]; 14860 HEAPF32[i1 + 136 >> 2] = +HEAPF32[i4 >> 2]; 14861 HEAPF32[i1 + 140 >> 2] = +HEAPF32[i2 + 48 >> 2]; 14862 HEAPF32[i1 + 76 >> 2] = 0.0; 14863 HEAPF32[i1 + 80 >> 2] = 0.0; 14864 HEAPF32[i1 + 84 >> 2] = 0.0; 14865 HEAPF32[i1 + 144 >> 2] = 0.0; 14866 i12 = HEAP32[i2 >> 2] | 0; 14867 HEAP32[i1 >> 2] = i12; 14868 i4 = i1 + 116 | 0; 14869 if ((i12 | 0) == 2) { 14870 HEAPF32[i4 >> 2] = 1.0; 14871 HEAPF32[i1 + 120 >> 2] = 1.0; 14872 i11 = i1 + 124 | 0; 14873 HEAPF32[i11 >> 2] = 0.0; 14874 i11 = i1 + 128 | 0; 14875 HEAPF32[i11 >> 2] = 0.0; 14876 i11 = i2 + 44 | 0; 14877 i11 = HEAP32[i11 >> 2] | 0; 14878 i12 = i1 + 148 | 0; 14879 HEAP32[i12 >> 2] = i11; 14880 i12 = i1 + 100 | 0; 14881 HEAP32[i12 >> 2] = 0; 14882 i12 = i1 + 104 | 0; 14883 HEAP32[i12 >> 2] = 0; 14884 STACKTOP = i3; 14885 return; 14886 } else { 14887 HEAPF32[i4 >> 2] = 0.0; 14888 HEAPF32[i1 + 120 >> 2] = 0.0; 14889 i11 = i1 + 124 | 0; 14890 HEAPF32[i11 >> 2] = 0.0; 14891 i11 = i1 + 128 | 0; 14892 HEAPF32[i11 >> 2] = 0.0; 14893 i11 = i2 + 44 | 0; 14894 i11 = HEAP32[i11 >> 2] | 0; 14895 i12 = i1 + 148 | 0; 14896 HEAP32[i12 >> 2] = i11; 14897 i12 = i1 + 100 | 0; 14898 HEAP32[i12 >> 2] = 0; 14899 i12 = i1 + 104 | 0; 14900 HEAP32[i12 >> 2] = 0; 14901 STACKTOP = i3; 14902 return; 14903 } 14904 } 14905 function __ZN24b2PositionSolverManifold10InitializeEP27b2ContactPositionConstraintRK11b2TransformS4_i(i2, i1, i13, i12, i15) { 14906 i2 = i2 | 0; 14907 i1 = i1 | 0; 14908 i13 = i13 | 0; 14909 i12 = i12 | 0; 14910 i15 = i15 | 0; 14911 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; 14912 i3 = STACKTOP; 14913 if ((HEAP32[i1 + 84 >> 2] | 0) <= 0) { 14914 ___assert_fail(6752, 6520, 617, 6776); 14915 } 14916 i14 = HEAP32[i1 + 72 >> 2] | 0; 14917 if ((i14 | 0) == 1) { 14918 i19 = i13 + 12 | 0; 14919 d5 = +HEAPF32[i19 >> 2]; 14920 d6 = +HEAPF32[i1 + 16 >> 2]; 14921 i14 = i13 + 8 | 0; 14922 d7 = +HEAPF32[i14 >> 2]; 14923 d9 = +HEAPF32[i1 + 20 >> 2]; 14924 d4 = d5 * d6 - d7 * d9; 14925 d9 = d6 * d7 + d5 * d9; 14926 d5 = +d4; 14927 d7 = +d9; 14928 i20 = i2; 14929 HEAPF32[i20 >> 2] = d5; 14930 HEAPF32[i20 + 4 >> 2] = d7; 14931 d7 = +HEAPF32[i19 >> 2]; 14932 d5 = +HEAPF32[i1 + 24 >> 2]; 14933 d6 = +HEAPF32[i14 >> 2]; 14934 d8 = +HEAPF32[i1 + 28 >> 2]; 14935 d16 = +HEAPF32[i12 + 12 >> 2]; 14936 d18 = +HEAPF32[i1 + (i15 << 3) >> 2]; 14937 d17 = +HEAPF32[i12 + 8 >> 2]; 14938 d11 = +HEAPF32[i1 + (i15 << 3) + 4 >> 2]; 14939 d10 = +HEAPF32[i12 >> 2] + (d16 * d18 - d17 * d11); 14940 d11 = d18 * d17 + d16 * d11 + +HEAPF32[i12 + 4 >> 2]; 14941 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]; 14942 d10 = +d10; 14943 d11 = +d11; 14944 i15 = i2 + 8 | 0; 14945 HEAPF32[i15 >> 2] = d10; 14946 HEAPF32[i15 + 4 >> 2] = d11; 14947 STACKTOP = i3; 14948 return; 14949 } else if ((i14 | 0) == 2) { 14950 i19 = i12 + 12 | 0; 14951 d7 = +HEAPF32[i19 >> 2]; 14952 d8 = +HEAPF32[i1 + 16 >> 2]; 14953 i20 = i12 + 8 | 0; 14954 d9 = +HEAPF32[i20 >> 2]; 14955 d18 = +HEAPF32[i1 + 20 >> 2]; 14956 d17 = d7 * d8 - d9 * d18; 14957 d18 = d8 * d9 + d7 * d18; 14958 d7 = +d17; 14959 d9 = +d18; 14960 i14 = i2; 14961 HEAPF32[i14 >> 2] = d7; 14962 HEAPF32[i14 + 4 >> 2] = d9; 14963 d9 = +HEAPF32[i19 >> 2]; 14964 d7 = +HEAPF32[i1 + 24 >> 2]; 14965 d8 = +HEAPF32[i20 >> 2]; 14966 d10 = +HEAPF32[i1 + 28 >> 2]; 14967 d6 = +HEAPF32[i13 + 12 >> 2]; 14968 d4 = +HEAPF32[i1 + (i15 << 3) >> 2]; 14969 d5 = +HEAPF32[i13 + 8 >> 2]; 14970 d16 = +HEAPF32[i1 + (i15 << 3) + 4 >> 2]; 14971 d11 = +HEAPF32[i13 >> 2] + (d6 * d4 - d5 * d16); 14972 d16 = d4 * d5 + d6 * d16 + +HEAPF32[i13 + 4 >> 2]; 14973 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]; 14974 d11 = +d11; 14975 d16 = +d16; 14976 i20 = i2 + 8 | 0; 14977 HEAPF32[i20 >> 2] = d11; 14978 HEAPF32[i20 + 4 >> 2] = d16; 14979 d17 = +-d17; 14980 d18 = +-d18; 14981 i20 = i2; 14982 HEAPF32[i20 >> 2] = d17; 14983 HEAPF32[i20 + 4 >> 2] = d18; 14984 STACKTOP = i3; 14985 return; 14986 } else if ((i14 | 0) == 0) { 14987 d7 = +HEAPF32[i13 + 12 >> 2]; 14988 d8 = +HEAPF32[i1 + 24 >> 2]; 14989 d18 = +HEAPF32[i13 + 8 >> 2]; 14990 d6 = +HEAPF32[i1 + 28 >> 2]; 14991 d4 = +HEAPF32[i13 >> 2] + (d7 * d8 - d18 * d6); 14992 d6 = d8 * d18 + d7 * d6 + +HEAPF32[i13 + 4 >> 2]; 14993 d7 = +HEAPF32[i12 + 12 >> 2]; 14994 d18 = +HEAPF32[i1 >> 2]; 14995 d8 = +HEAPF32[i12 + 8 >> 2]; 14996 d9 = +HEAPF32[i1 + 4 >> 2]; 14997 d5 = +HEAPF32[i12 >> 2] + (d7 * d18 - d8 * d9); 14998 d9 = d18 * d8 + d7 * d9 + +HEAPF32[i12 + 4 >> 2]; 14999 d7 = d5 - d4; 15000 d8 = d9 - d6; 15001 d18 = +d7; 15002 d10 = +d8; 15003 i20 = i2; 15004 HEAPF32[i20 >> 2] = d18; 15005 HEAPF32[i20 + 4 >> 2] = d10; 15006 d10 = +Math_sqrt(+(d7 * d7 + d8 * d8)); 15007 if (d10 < 1.1920928955078125e-7) { 15008 d10 = d7; 15009 d11 = d8; 15010 } else { 15011 d11 = 1.0 / d10; 15012 d10 = d7 * d11; 15013 HEAPF32[i2 >> 2] = d10; 15014 d11 = d8 * d11; 15015 HEAPF32[i2 + 4 >> 2] = d11; 15016 } 15017 d17 = +((d4 + d5) * .5); 15018 d18 = +((d6 + d9) * .5); 15019 i20 = i2 + 8 | 0; 15020 HEAPF32[i20 >> 2] = d17; 15021 HEAPF32[i20 + 4 >> 2] = d18; 15022 HEAPF32[i2 + 16 >> 2] = d7 * d10 + d8 * d11 - +HEAPF32[i1 + 76 >> 2] - +HEAPF32[i1 + 80 >> 2]; 15023 STACKTOP = i3; 15024 return; 15025 } else { 15026 STACKTOP = i3; 15027 return; 15028 } 15029 } 15030 function __ZNSt3__118__insertion_sort_3IRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i5, i1, i2) { 15031 i5 = i5 | 0; 15032 i1 = i1 | 0; 15033 i2 = i2 | 0; 15034 var i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0; 15035 i4 = STACKTOP; 15036 STACKTOP = STACKTOP + 32 | 0; 15037 i6 = i4 + 12 | 0; 15038 i3 = i4; 15039 i7 = i5 + 24 | 0; 15040 i8 = i5 + 12 | 0; 15041 i10 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i5) | 0; 15042 i9 = FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i8) | 0; 15043 do { 15044 if (i10) { 15045 if (i9) { 15046 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 15047 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 15048 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 15049 HEAP32[i5 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 15050 HEAP32[i5 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 15051 HEAP32[i5 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 15052 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 15053 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 15054 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 15055 break; 15056 } 15057 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 15058 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 15059 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 15060 HEAP32[i5 + 0 >> 2] = HEAP32[i8 + 0 >> 2]; 15061 HEAP32[i5 + 4 >> 2] = HEAP32[i8 + 4 >> 2]; 15062 HEAP32[i5 + 8 >> 2] = HEAP32[i8 + 8 >> 2]; 15063 HEAP32[i8 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 15064 HEAP32[i8 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 15065 HEAP32[i8 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 15066 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i7, i8) | 0) { 15067 HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2]; 15068 HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2]; 15069 HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2]; 15070 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 15071 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 15072 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 15073 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 15074 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 15075 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 15076 } 15077 } else { 15078 if (i9) { 15079 HEAP32[i6 + 0 >> 2] = HEAP32[i8 + 0 >> 2]; 15080 HEAP32[i6 + 4 >> 2] = HEAP32[i8 + 4 >> 2]; 15081 HEAP32[i6 + 8 >> 2] = HEAP32[i8 + 8 >> 2]; 15082 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 15083 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 15084 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 15085 HEAP32[i7 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 15086 HEAP32[i7 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 15087 HEAP32[i7 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 15088 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i8, i5) | 0) { 15089 HEAP32[i6 + 0 >> 2] = HEAP32[i5 + 0 >> 2]; 15090 HEAP32[i6 + 4 >> 2] = HEAP32[i5 + 4 >> 2]; 15091 HEAP32[i6 + 8 >> 2] = HEAP32[i5 + 8 >> 2]; 15092 HEAP32[i5 + 0 >> 2] = HEAP32[i8 + 0 >> 2]; 15093 HEAP32[i5 + 4 >> 2] = HEAP32[i8 + 4 >> 2]; 15094 HEAP32[i5 + 8 >> 2] = HEAP32[i8 + 8 >> 2]; 15095 HEAP32[i8 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 15096 HEAP32[i8 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 15097 HEAP32[i8 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 15098 } 15099 } 15100 } 15101 } while (0); 15102 i6 = i5 + 36 | 0; 15103 if ((i6 | 0) == (i1 | 0)) { 15104 STACKTOP = i4; 15105 return; 15106 } 15107 while (1) { 15108 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i6, i7) | 0) { 15109 HEAP32[i3 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 15110 HEAP32[i3 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 15111 HEAP32[i3 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 15112 i8 = i6; 15113 while (1) { 15114 HEAP32[i8 + 0 >> 2] = HEAP32[i7 + 0 >> 2]; 15115 HEAP32[i8 + 4 >> 2] = HEAP32[i7 + 4 >> 2]; 15116 HEAP32[i8 + 8 >> 2] = HEAP32[i7 + 8 >> 2]; 15117 if ((i7 | 0) == (i5 | 0)) { 15118 break; 15119 } 15120 i8 = i7 + -12 | 0; 15121 if (FUNCTION_TABLE_iii[HEAP32[i2 >> 2] & 3](i3, i8) | 0) { 15122 i10 = i7; 15123 i7 = i8; 15124 i8 = i10; 15125 } else { 15126 break; 15127 } 15128 } 15129 HEAP32[i7 + 0 >> 2] = HEAP32[i3 + 0 >> 2]; 15130 HEAP32[i7 + 4 >> 2] = HEAP32[i3 + 4 >> 2]; 15131 HEAP32[i7 + 8 >> 2] = HEAP32[i3 + 8 >> 2]; 15132 } 15133 i7 = i6 + 12 | 0; 15134 if ((i7 | 0) == (i1 | 0)) { 15135 break; 15136 } else { 15137 i10 = i6; 15138 i6 = i7; 15139 i7 = i10; 15140 } 15141 } 15142 STACKTOP = i4; 15143 return; 15144 } 15145 function __ZNK20b2SeparationFunction8EvaluateEiif(i10, i12, i11, d9) { 15146 i10 = i10 | 0; 15147 i12 = i12 | 0; 15148 i11 = i11 | 0; 15149 d9 = +d9; 15150 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; 15151 i7 = STACKTOP; 15152 d14 = 1.0 - d9; 15153 d3 = d14 * +HEAPF32[i10 + 32 >> 2] + +HEAPF32[i10 + 36 >> 2] * d9; 15154 d4 = +Math_sin(+d3); 15155 d3 = +Math_cos(+d3); 15156 d5 = +HEAPF32[i10 + 8 >> 2]; 15157 d6 = +HEAPF32[i10 + 12 >> 2]; 15158 d2 = d14 * +HEAPF32[i10 + 16 >> 2] + +HEAPF32[i10 + 24 >> 2] * d9 - (d3 * d5 - d4 * d6); 15159 d6 = d14 * +HEAPF32[i10 + 20 >> 2] + +HEAPF32[i10 + 28 >> 2] * d9 - (d4 * d5 + d3 * d6); 15160 d5 = d14 * +HEAPF32[i10 + 68 >> 2] + +HEAPF32[i10 + 72 >> 2] * d9; 15161 d1 = +Math_sin(+d5); 15162 d5 = +Math_cos(+d5); 15163 d15 = +HEAPF32[i10 + 44 >> 2]; 15164 d16 = +HEAPF32[i10 + 48 >> 2]; 15165 d8 = d14 * +HEAPF32[i10 + 52 >> 2] + +HEAPF32[i10 + 60 >> 2] * d9 - (d5 * d15 - d1 * d16); 15166 d9 = d14 * +HEAPF32[i10 + 56 >> 2] + +HEAPF32[i10 + 64 >> 2] * d9 - (d1 * d15 + d5 * d16); 15167 i17 = HEAP32[i10 + 80 >> 2] | 0; 15168 if ((i17 | 0) == 0) { 15169 d14 = +HEAPF32[i10 + 92 >> 2]; 15170 d13 = +HEAPF32[i10 + 96 >> 2]; 15171 i17 = HEAP32[i10 >> 2] | 0; 15172 if (!((i12 | 0) > -1)) { 15173 ___assert_fail(3640, 3672, 103, 3704); 15174 } 15175 if ((HEAP32[i17 + 20 >> 2] | 0) <= (i12 | 0)) { 15176 ___assert_fail(3640, 3672, 103, 3704); 15177 } 15178 i17 = (HEAP32[i17 + 16 >> 2] | 0) + (i12 << 3) | 0; 15179 d15 = +HEAPF32[i17 >> 2]; 15180 d16 = +HEAPF32[i17 + 4 >> 2]; 15181 i10 = HEAP32[i10 + 4 >> 2] | 0; 15182 if (!((i11 | 0) > -1)) { 15183 ___assert_fail(3640, 3672, 103, 3704); 15184 } 15185 if ((HEAP32[i10 + 20 >> 2] | 0) <= (i11 | 0)) { 15186 ___assert_fail(3640, 3672, 103, 3704); 15187 } 15188 i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i11 << 3) | 0; 15189 d19 = +HEAPF32[i17 >> 2]; 15190 d18 = +HEAPF32[i17 + 4 >> 2]; 15191 d16 = d14 * (d8 + (d5 * d19 - d1 * d18) - (d2 + (d3 * d15 - d4 * d16))) + d13 * (d9 + (d1 * d19 + d5 * d18) - (d6 + (d4 * d15 + d3 * d16))); 15192 STACKTOP = i7; 15193 return +d16; 15194 } else if ((i17 | 0) == 1) { 15195 d14 = +HEAPF32[i10 + 92 >> 2]; 15196 d13 = +HEAPF32[i10 + 96 >> 2]; 15197 d16 = +HEAPF32[i10 + 84 >> 2]; 15198 d15 = +HEAPF32[i10 + 88 >> 2]; 15199 i10 = HEAP32[i10 + 4 >> 2] | 0; 15200 if (!((i11 | 0) > -1)) { 15201 ___assert_fail(3640, 3672, 103, 3704); 15202 } 15203 if ((HEAP32[i10 + 20 >> 2] | 0) <= (i11 | 0)) { 15204 ___assert_fail(3640, 3672, 103, 3704); 15205 } 15206 i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i11 << 3) | 0; 15207 d18 = +HEAPF32[i17 >> 2]; 15208 d19 = +HEAPF32[i17 + 4 >> 2]; 15209 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))); 15210 STACKTOP = i7; 15211 return +d19; 15212 } else if ((i17 | 0) == 2) { 15213 d16 = +HEAPF32[i10 + 92 >> 2]; 15214 d15 = +HEAPF32[i10 + 96 >> 2]; 15215 d14 = +HEAPF32[i10 + 84 >> 2]; 15216 d13 = +HEAPF32[i10 + 88 >> 2]; 15217 i10 = HEAP32[i10 >> 2] | 0; 15218 if (!((i12 | 0) > -1)) { 15219 ___assert_fail(3640, 3672, 103, 3704); 15220 } 15221 if ((HEAP32[i10 + 20 >> 2] | 0) <= (i12 | 0)) { 15222 ___assert_fail(3640, 3672, 103, 3704); 15223 } 15224 i17 = (HEAP32[i10 + 16 >> 2] | 0) + (i12 << 3) | 0; 15225 d18 = +HEAPF32[i17 >> 2]; 15226 d19 = +HEAPF32[i17 + 4 >> 2]; 15227 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))); 15228 STACKTOP = i7; 15229 return +d19; 15230 } else { 15231 ___assert_fail(3616, 3560, 242, 3624); 15232 } 15233 return 0.0; 15234 } 15235 function __ZN6b2Body13ResetMassDataEv(i2) { 15236 i2 = i2 | 0; 15237 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; 15238 i3 = STACKTOP; 15239 STACKTOP = STACKTOP + 16 | 0; 15240 i10 = i3; 15241 i8 = i2 + 116 | 0; 15242 i9 = i2 + 120 | 0; 15243 i4 = i2 + 124 | 0; 15244 i5 = i2 + 128 | 0; 15245 i6 = i2 + 28 | 0; 15246 HEAPF32[i6 >> 2] = 0.0; 15247 HEAPF32[i2 + 32 >> 2] = 0.0; 15248 HEAP32[i8 + 0 >> 2] = 0; 15249 HEAP32[i8 + 4 >> 2] = 0; 15250 HEAP32[i8 + 8 >> 2] = 0; 15251 HEAP32[i8 + 12 >> 2] = 0; 15252 i11 = HEAP32[i2 >> 2] | 0; 15253 if ((i11 | 0) == 2) { 15254 i17 = 3784; 15255 d16 = +HEAPF32[i17 >> 2]; 15256 d18 = +HEAPF32[i17 + 4 >> 2]; 15257 i17 = HEAP32[i2 + 100 >> 2] | 0; 15258 if ((i17 | 0) != 0) { 15259 i11 = i10 + 4 | 0; 15260 i12 = i10 + 8 | 0; 15261 i13 = i10 + 12 | 0; 15262 d14 = 0.0; 15263 d15 = 0.0; 15264 do { 15265 d19 = +HEAPF32[i17 >> 2]; 15266 if (!(d19 == 0.0)) { 15267 i20 = HEAP32[i17 + 12 >> 2] | 0; 15268 FUNCTION_TABLE_viid[HEAP32[(HEAP32[i20 >> 2] | 0) + 28 >> 2] & 3](i20, i10, d19); 15269 d14 = +HEAPF32[i10 >> 2]; 15270 d15 = d14 + +HEAPF32[i8 >> 2]; 15271 HEAPF32[i8 >> 2] = d15; 15272 d16 = d16 + d14 * +HEAPF32[i11 >> 2]; 15273 d18 = d18 + d14 * +HEAPF32[i12 >> 2]; 15274 d14 = +HEAPF32[i13 >> 2] + +HEAPF32[i4 >> 2]; 15275 HEAPF32[i4 >> 2] = d14; 15276 } 15277 i17 = HEAP32[i17 + 4 >> 2] | 0; 15278 } while ((i17 | 0) != 0); 15279 if (d15 > 0.0) { 15280 d19 = 1.0 / d15; 15281 HEAPF32[i9 >> 2] = d19; 15282 d16 = d16 * d19; 15283 d18 = d18 * d19; 15284 } else { 15285 i7 = 11; 15286 } 15287 } else { 15288 d14 = 0.0; 15289 i7 = 11; 15290 } 15291 if ((i7 | 0) == 11) { 15292 HEAPF32[i8 >> 2] = 1.0; 15293 HEAPF32[i9 >> 2] = 1.0; 15294 d15 = 1.0; 15295 } 15296 do { 15297 if (d14 > 0.0 ? (HEAP16[i2 + 4 >> 1] & 16) == 0 : 0) { 15298 d14 = d14 - (d18 * d18 + d16 * d16) * d15; 15299 HEAPF32[i4 >> 2] = d14; 15300 if (d14 > 0.0) { 15301 d1 = 1.0 / d14; 15302 break; 15303 } else { 15304 ___assert_fail(1872, 1520, 319, 1856); 15305 } 15306 } else { 15307 i7 = 17; 15308 } 15309 } while (0); 15310 if ((i7 | 0) == 17) { 15311 HEAPF32[i4 >> 2] = 0.0; 15312 d1 = 0.0; 15313 } 15314 HEAPF32[i5 >> 2] = d1; 15315 i20 = i2 + 44 | 0; 15316 i17 = i20; 15317 d19 = +HEAPF32[i17 >> 2]; 15318 d14 = +HEAPF32[i17 + 4 >> 2]; 15319 d21 = +d16; 15320 d1 = +d18; 15321 i17 = i6; 15322 HEAPF32[i17 >> 2] = d21; 15323 HEAPF32[i17 + 4 >> 2] = d1; 15324 d1 = +HEAPF32[i2 + 24 >> 2]; 15325 d21 = +HEAPF32[i2 + 20 >> 2]; 15326 d15 = +HEAPF32[i2 + 12 >> 2] + (d1 * d16 - d21 * d18); 15327 d16 = d16 * d21 + d1 * d18 + +HEAPF32[i2 + 16 >> 2]; 15328 d1 = +d15; 15329 d18 = +d16; 15330 HEAPF32[i20 >> 2] = d1; 15331 HEAPF32[i20 + 4 >> 2] = d18; 15332 i20 = i2 + 36 | 0; 15333 HEAPF32[i20 >> 2] = d1; 15334 HEAPF32[i20 + 4 >> 2] = d18; 15335 d18 = +HEAPF32[i2 + 72 >> 2]; 15336 i20 = i2 + 64 | 0; 15337 HEAPF32[i20 >> 2] = +HEAPF32[i20 >> 2] - d18 * (d16 - d14); 15338 i20 = i2 + 68 | 0; 15339 HEAPF32[i20 >> 2] = d18 * (d15 - d19) + +HEAPF32[i20 >> 2]; 15340 STACKTOP = i3; 15341 return; 15342 } else if ((i11 | 0) == 1 | (i11 | 0) == 0) { 15343 i17 = i2 + 12 | 0; 15344 i13 = HEAP32[i17 >> 2] | 0; 15345 i17 = HEAP32[i17 + 4 >> 2] | 0; 15346 i20 = i2 + 36 | 0; 15347 HEAP32[i20 >> 2] = i13; 15348 HEAP32[i20 + 4 >> 2] = i17; 15349 i20 = i2 + 44 | 0; 15350 HEAP32[i20 >> 2] = i13; 15351 HEAP32[i20 + 4 >> 2] = i17; 15352 HEAPF32[i2 + 52 >> 2] = +HEAPF32[i2 + 56 >> 2]; 15353 STACKTOP = i3; 15354 return; 15355 } else { 15356 ___assert_fail(1824, 1520, 284, 1856); 15357 } 15358 } 15359 function __ZN9b2Contact6UpdateEP17b2ContactListener(i1, i4) { 15360 i1 = i1 | 0; 15361 i4 = i4 | 0; 15362 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; 15363 i3 = STACKTOP; 15364 STACKTOP = STACKTOP + 64 | 0; 15365 i2 = i3; 15366 i10 = i1 + 64 | 0; 15367 i6 = i2 + 0 | 0; 15368 i7 = i10 + 0 | 0; 15369 i5 = i6 + 64 | 0; 15370 do { 15371 HEAP32[i6 >> 2] = HEAP32[i7 >> 2]; 15372 i6 = i6 + 4 | 0; 15373 i7 = i7 + 4 | 0; 15374 } while ((i6 | 0) < (i5 | 0)); 15375 i6 = i1 + 4 | 0; 15376 i11 = HEAP32[i6 >> 2] | 0; 15377 HEAP32[i6 >> 2] = i11 | 4; 15378 i11 = i11 >>> 1; 15379 i14 = HEAP32[i1 + 48 >> 2] | 0; 15380 i15 = HEAP32[i1 + 52 >> 2] | 0; 15381 i5 = (HEAP8[i15 + 38 | 0] | HEAP8[i14 + 38 | 0]) << 24 >> 24 != 0; 15382 i8 = HEAP32[i14 + 8 >> 2] | 0; 15383 i7 = HEAP32[i15 + 8 >> 2] | 0; 15384 i12 = i8 + 12 | 0; 15385 i13 = i7 + 12 | 0; 15386 if (!i5) { 15387 FUNCTION_TABLE_viiii[HEAP32[HEAP32[i1 >> 2] >> 2] & 15](i1, i10, i12, i13); 15388 i12 = i1 + 124 | 0; 15389 i10 = (HEAP32[i12 >> 2] | 0) > 0; 15390 L4 : do { 15391 if (i10) { 15392 i19 = HEAP32[i2 + 60 >> 2] | 0; 15393 if ((i19 | 0) > 0) { 15394 i18 = 0; 15395 } else { 15396 i9 = 0; 15397 while (1) { 15398 HEAPF32[i1 + (i9 * 20 | 0) + 72 >> 2] = 0.0; 15399 HEAPF32[i1 + (i9 * 20 | 0) + 76 >> 2] = 0.0; 15400 i9 = i9 + 1 | 0; 15401 if ((i9 | 0) >= (HEAP32[i12 >> 2] | 0)) { 15402 break L4; 15403 } 15404 } 15405 } 15406 do { 15407 i16 = i1 + (i18 * 20 | 0) + 72 | 0; 15408 HEAPF32[i16 >> 2] = 0.0; 15409 i15 = i1 + (i18 * 20 | 0) + 76 | 0; 15410 HEAPF32[i15 >> 2] = 0.0; 15411 i14 = HEAP32[i1 + (i18 * 20 | 0) + 80 >> 2] | 0; 15412 i17 = 0; 15413 while (1) { 15414 i13 = i17 + 1 | 0; 15415 if ((HEAP32[i2 + (i17 * 20 | 0) + 16 >> 2] | 0) == (i14 | 0)) { 15416 i9 = 7; 15417 break; 15418 } 15419 if ((i13 | 0) < (i19 | 0)) { 15420 i17 = i13; 15421 } else { 15422 break; 15423 } 15424 } 15425 if ((i9 | 0) == 7) { 15426 i9 = 0; 15427 HEAPF32[i16 >> 2] = +HEAPF32[i2 + (i17 * 20 | 0) + 8 >> 2]; 15428 HEAPF32[i15 >> 2] = +HEAPF32[i2 + (i17 * 20 | 0) + 12 >> 2]; 15429 } 15430 i18 = i18 + 1 | 0; 15431 } while ((i18 | 0) < (HEAP32[i12 >> 2] | 0)); 15432 } 15433 } while (0); 15434 i9 = i11 & 1; 15435 if (i10 ^ (i9 | 0) != 0) { 15436 i11 = i8 + 4 | 0; 15437 i12 = HEAPU16[i11 >> 1] | 0; 15438 if ((i12 & 2 | 0) == 0) { 15439 HEAP16[i11 >> 1] = i12 | 2; 15440 HEAPF32[i8 + 144 >> 2] = 0.0; 15441 } 15442 i8 = i7 + 4 | 0; 15443 i11 = HEAPU16[i8 >> 1] | 0; 15444 if ((i11 & 2 | 0) == 0) { 15445 HEAP16[i8 >> 1] = i11 | 2; 15446 HEAPF32[i7 + 144 >> 2] = 0.0; 15447 } 15448 } 15449 } else { 15450 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; 15451 HEAP32[i1 + 124 >> 2] = 0; 15452 i9 = i11 & 1; 15453 } 15454 i7 = HEAP32[i6 >> 2] | 0; 15455 HEAP32[i6 >> 2] = i10 ? i7 | 2 : i7 & -3; 15456 i8 = (i9 | 0) == 0; 15457 i6 = i10 ^ 1; 15458 i7 = (i4 | 0) == 0; 15459 if (!(i8 ^ 1 | i6 | i7)) { 15460 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i4 >> 2] | 0) + 8 >> 2] & 15](i4, i1); 15461 } 15462 if (!(i8 | i10 | i7)) { 15463 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i4 >> 2] | 0) + 12 >> 2] & 15](i4, i1); 15464 } 15465 if (i5 | i6 | i7) { 15466 STACKTOP = i3; 15467 return; 15468 } 15469 FUNCTION_TABLE_viii[HEAP32[(HEAP32[i4 >> 2] | 0) + 16 >> 2] & 3](i4, i1, i2); 15470 STACKTOP = i3; 15471 return; 15472 } 15473 function __ZN13b2DynamicTree10RemoveLeafEi(i1, i12) { 15474 i1 = i1 | 0; 15475 i12 = i12 | 0; 15476 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; 15477 i2 = STACKTOP; 15478 if ((HEAP32[i1 >> 2] | 0) == (i12 | 0)) { 15479 HEAP32[i1 >> 2] = -1; 15480 STACKTOP = i2; 15481 return; 15482 } 15483 i3 = i1 + 4 | 0; 15484 i5 = HEAP32[i3 >> 2] | 0; 15485 i6 = HEAP32[i5 + (i12 * 36 | 0) + 20 >> 2] | 0; 15486 i4 = i5 + (i6 * 36 | 0) + 20 | 0; 15487 i7 = HEAP32[i4 >> 2] | 0; 15488 i13 = HEAP32[i5 + (i6 * 36 | 0) + 24 >> 2] | 0; 15489 if ((i13 | 0) == (i12 | 0)) { 15490 i13 = HEAP32[i5 + (i6 * 36 | 0) + 28 >> 2] | 0; 15491 } 15492 if ((i7 | 0) == -1) { 15493 HEAP32[i1 >> 2] = i13; 15494 HEAP32[i5 + (i13 * 36 | 0) + 20 >> 2] = -1; 15495 if (!((i6 | 0) > -1)) { 15496 ___assert_fail(3e3, 2944, 97, 3040); 15497 } 15498 if ((HEAP32[i1 + 12 >> 2] | 0) <= (i6 | 0)) { 15499 ___assert_fail(3e3, 2944, 97, 3040); 15500 } 15501 i3 = i1 + 8 | 0; 15502 if ((HEAP32[i3 >> 2] | 0) <= 0) { 15503 ___assert_fail(3056, 2944, 98, 3040); 15504 } 15505 i13 = i1 + 16 | 0; 15506 HEAP32[i4 >> 2] = HEAP32[i13 >> 2]; 15507 HEAP32[i5 + (i6 * 36 | 0) + 32 >> 2] = -1; 15508 HEAP32[i13 >> 2] = i6; 15509 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + -1; 15510 STACKTOP = i2; 15511 return; 15512 } 15513 i12 = i5 + (i7 * 36 | 0) + 24 | 0; 15514 if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) { 15515 HEAP32[i12 >> 2] = i13; 15516 } else { 15517 HEAP32[i5 + (i7 * 36 | 0) + 28 >> 2] = i13; 15518 } 15519 HEAP32[i5 + (i13 * 36 | 0) + 20 >> 2] = i7; 15520 if (!((i6 | 0) > -1)) { 15521 ___assert_fail(3e3, 2944, 97, 3040); 15522 } 15523 if ((HEAP32[i1 + 12 >> 2] | 0) <= (i6 | 0)) { 15524 ___assert_fail(3e3, 2944, 97, 3040); 15525 } 15526 i12 = i1 + 8 | 0; 15527 if ((HEAP32[i12 >> 2] | 0) <= 0) { 15528 ___assert_fail(3056, 2944, 98, 3040); 15529 } 15530 i13 = i1 + 16 | 0; 15531 HEAP32[i4 >> 2] = HEAP32[i13 >> 2]; 15532 HEAP32[i5 + (i6 * 36 | 0) + 32 >> 2] = -1; 15533 HEAP32[i13 >> 2] = i6; 15534 HEAP32[i12 >> 2] = (HEAP32[i12 >> 2] | 0) + -1; 15535 do { 15536 i4 = __ZN13b2DynamicTree7BalanceEi(i1, i7) | 0; 15537 i7 = HEAP32[i3 >> 2] | 0; 15538 i6 = HEAP32[i7 + (i4 * 36 | 0) + 24 >> 2] | 0; 15539 i5 = HEAP32[i7 + (i4 * 36 | 0) + 28 >> 2] | 0; 15540 d10 = +HEAPF32[i7 + (i6 * 36 | 0) >> 2]; 15541 d11 = +HEAPF32[i7 + (i5 * 36 | 0) >> 2]; 15542 d9 = +HEAPF32[i7 + (i6 * 36 | 0) + 4 >> 2]; 15543 d8 = +HEAPF32[i7 + (i5 * 36 | 0) + 4 >> 2]; 15544 d10 = +(d10 < d11 ? d10 : d11); 15545 d11 = +(d9 < d8 ? d9 : d8); 15546 i13 = i7 + (i4 * 36 | 0) | 0; 15547 HEAPF32[i13 >> 2] = d10; 15548 HEAPF32[i13 + 4 >> 2] = d11; 15549 d11 = +HEAPF32[i7 + (i6 * 36 | 0) + 8 >> 2]; 15550 d10 = +HEAPF32[i7 + (i5 * 36 | 0) + 8 >> 2]; 15551 d9 = +HEAPF32[i7 + (i6 * 36 | 0) + 12 >> 2]; 15552 d8 = +HEAPF32[i7 + (i5 * 36 | 0) + 12 >> 2]; 15553 d10 = +(d11 > d10 ? d11 : d10); 15554 d11 = +(d9 > d8 ? d9 : d8); 15555 i7 = i7 + (i4 * 36 | 0) + 8 | 0; 15556 HEAPF32[i7 >> 2] = d10; 15557 HEAPF32[i7 + 4 >> 2] = d11; 15558 i7 = HEAP32[i3 >> 2] | 0; 15559 i6 = HEAP32[i7 + (i6 * 36 | 0) + 32 >> 2] | 0; 15560 i5 = HEAP32[i7 + (i5 * 36 | 0) + 32 >> 2] | 0; 15561 HEAP32[i7 + (i4 * 36 | 0) + 32 >> 2] = ((i6 | 0) > (i5 | 0) ? i6 : i5) + 1; 15562 i7 = HEAP32[i7 + (i4 * 36 | 0) + 20 >> 2] | 0; 15563 } while (!((i7 | 0) == -1)); 15564 STACKTOP = i2; 15565 return; 15566 } 15567 function __ZN9b2Simplex6Solve3Ev(i7) { 15568 i7 = i7 | 0; 15569 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; 15570 i1 = STACKTOP; 15571 i2 = i7 + 16 | 0; 15572 d17 = +HEAPF32[i2 >> 2]; 15573 d15 = +HEAPF32[i2 + 4 >> 2]; 15574 i2 = i7 + 36 | 0; 15575 i3 = i7 + 52 | 0; 15576 d14 = +HEAPF32[i3 >> 2]; 15577 d16 = +HEAPF32[i3 + 4 >> 2]; 15578 i3 = i7 + 72 | 0; 15579 i22 = i7 + 88 | 0; 15580 d18 = +HEAPF32[i22 >> 2]; 15581 d11 = +HEAPF32[i22 + 4 >> 2]; 15582 d20 = d14 - d17; 15583 d10 = d16 - d15; 15584 d9 = d17 * d20 + d15 * d10; 15585 d8 = d14 * d20 + d16 * d10; 15586 d4 = d18 - d17; 15587 d19 = d11 - d15; 15588 d6 = d17 * d4 + d15 * d19; 15589 d5 = d18 * d4 + d11 * d19; 15590 d21 = d18 - d14; 15591 d12 = d11 - d16; 15592 d13 = d14 * d21 + d16 * d12; 15593 d12 = d18 * d21 + d11 * d12; 15594 d4 = d20 * d19 - d10 * d4; 15595 d10 = (d14 * d11 - d16 * d18) * d4; 15596 d11 = (d15 * d18 - d17 * d11) * d4; 15597 d4 = (d17 * d16 - d15 * d14) * d4; 15598 if (!(!(d9 >= -0.0) | !(d6 >= -0.0))) { 15599 HEAPF32[i7 + 24 >> 2] = 1.0; 15600 HEAP32[i7 + 108 >> 2] = 1; 15601 STACKTOP = i1; 15602 return; 15603 } 15604 if (!(!(d9 < -0.0) | !(d8 > 0.0) | !(d4 <= 0.0))) { 15605 d21 = 1.0 / (d8 - d9); 15606 HEAPF32[i7 + 24 >> 2] = d8 * d21; 15607 HEAPF32[i7 + 60 >> 2] = -(d9 * d21); 15608 HEAP32[i7 + 108 >> 2] = 2; 15609 STACKTOP = i1; 15610 return; 15611 } 15612 if (!(!(d6 < -0.0) | !(d5 > 0.0) | !(d11 <= 0.0))) { 15613 d21 = 1.0 / (d5 - d6); 15614 HEAPF32[i7 + 24 >> 2] = d5 * d21; 15615 HEAPF32[i7 + 96 >> 2] = -(d6 * d21); 15616 HEAP32[i7 + 108 >> 2] = 2; 15617 i7 = i2 + 0 | 0; 15618 i3 = i3 + 0 | 0; 15619 i2 = i7 + 36 | 0; 15620 do { 15621 HEAP32[i7 >> 2] = HEAP32[i3 >> 2]; 15622 i7 = i7 + 4 | 0; 15623 i3 = i3 + 4 | 0; 15624 } while ((i7 | 0) < (i2 | 0)); 15625 STACKTOP = i1; 15626 return; 15627 } 15628 if (!(!(d8 <= 0.0) | !(d13 >= -0.0))) { 15629 HEAPF32[i7 + 60 >> 2] = 1.0; 15630 HEAP32[i7 + 108 >> 2] = 1; 15631 i7 = i7 + 0 | 0; 15632 i3 = i2 + 0 | 0; 15633 i2 = i7 + 36 | 0; 15634 do { 15635 HEAP32[i7 >> 2] = HEAP32[i3 >> 2]; 15636 i7 = i7 + 4 | 0; 15637 i3 = i3 + 4 | 0; 15638 } while ((i7 | 0) < (i2 | 0)); 15639 STACKTOP = i1; 15640 return; 15641 } 15642 if (!(!(d5 <= 0.0) | !(d12 <= 0.0))) { 15643 HEAPF32[i7 + 96 >> 2] = 1.0; 15644 HEAP32[i7 + 108 >> 2] = 1; 15645 i7 = i7 + 0 | 0; 15646 i3 = i3 + 0 | 0; 15647 i2 = i7 + 36 | 0; 15648 do { 15649 HEAP32[i7 >> 2] = HEAP32[i3 >> 2]; 15650 i7 = i7 + 4 | 0; 15651 i3 = i3 + 4 | 0; 15652 } while ((i7 | 0) < (i2 | 0)); 15653 STACKTOP = i1; 15654 return; 15655 } 15656 if (!(d13 < -0.0) | !(d12 > 0.0) | !(d10 <= 0.0)) { 15657 d21 = 1.0 / (d4 + (d10 + d11)); 15658 HEAPF32[i7 + 24 >> 2] = d10 * d21; 15659 HEAPF32[i7 + 60 >> 2] = d11 * d21; 15660 HEAPF32[i7 + 96 >> 2] = d4 * d21; 15661 HEAP32[i7 + 108 >> 2] = 3; 15662 STACKTOP = i1; 15663 return; 15664 } else { 15665 d21 = 1.0 / (d12 - d13); 15666 HEAPF32[i7 + 60 >> 2] = d12 * d21; 15667 HEAPF32[i7 + 96 >> 2] = -(d13 * d21); 15668 HEAP32[i7 + 108 >> 2] = 2; 15669 i7 = i7 + 0 | 0; 15670 i3 = i3 + 0 | 0; 15671 i2 = i7 + 36 | 0; 15672 do { 15673 HEAP32[i7 >> 2] = HEAP32[i3 >> 2]; 15674 i7 = i7 + 4 | 0; 15675 i3 = i3 + 4 | 0; 15676 } while ((i7 | 0) < (i2 | 0)); 15677 STACKTOP = i1; 15678 return; 15679 } 15680 } 15681 function __ZN16b2ContactManager7CollideEv(i3) { 15682 i3 = i3 | 0; 15683 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; 15684 i2 = STACKTOP; 15685 i8 = HEAP32[i3 + 60 >> 2] | 0; 15686 if ((i8 | 0) == 0) { 15687 STACKTOP = i2; 15688 return; 15689 } 15690 i7 = i3 + 12 | 0; 15691 i6 = i3 + 4 | 0; 15692 i5 = i3 + 72 | 0; 15693 i4 = i3 + 68 | 0; 15694 L4 : while (1) { 15695 i12 = HEAP32[i8 + 48 >> 2] | 0; 15696 i10 = HEAP32[i8 + 52 >> 2] | 0; 15697 i11 = HEAP32[i8 + 56 >> 2] | 0; 15698 i9 = HEAP32[i8 + 60 >> 2] | 0; 15699 i15 = HEAP32[i12 + 8 >> 2] | 0; 15700 i13 = HEAP32[i10 + 8 >> 2] | 0; 15701 i16 = i8 + 4 | 0; 15702 do { 15703 if ((HEAP32[i16 >> 2] & 8 | 0) == 0) { 15704 i1 = 11; 15705 } else { 15706 if (!(__ZNK6b2Body13ShouldCollideEPKS_(i13, i15) | 0)) { 15707 i16 = HEAP32[i8 + 12 >> 2] | 0; 15708 __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8); 15709 i8 = i16; 15710 break; 15711 } 15712 i14 = HEAP32[i4 >> 2] | 0; 15713 if ((i14 | 0) != 0 ? !(FUNCTION_TABLE_iiii[HEAP32[(HEAP32[i14 >> 2] | 0) + 8 >> 2] & 7](i14, i12, i10) | 0) : 0) { 15714 i16 = HEAP32[i8 + 12 >> 2] | 0; 15715 __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8); 15716 i8 = i16; 15717 break; 15718 } 15719 HEAP32[i16 >> 2] = HEAP32[i16 >> 2] & -9; 15720 i1 = 11; 15721 } 15722 } while (0); 15723 do { 15724 if ((i1 | 0) == 11) { 15725 i1 = 0; 15726 if ((HEAP16[i15 + 4 >> 1] & 2) == 0) { 15727 i14 = 0; 15728 } else { 15729 i14 = (HEAP32[i15 >> 2] | 0) != 0; 15730 } 15731 if ((HEAP16[i13 + 4 >> 1] & 2) == 0) { 15732 i13 = 0; 15733 } else { 15734 i13 = (HEAP32[i13 >> 2] | 0) != 0; 15735 } 15736 if (!(i14 | i13)) { 15737 i8 = HEAP32[i8 + 12 >> 2] | 0; 15738 break; 15739 } 15740 i11 = HEAP32[(HEAP32[i12 + 24 >> 2] | 0) + (i11 * 28 | 0) + 24 >> 2] | 0; 15741 i9 = HEAP32[(HEAP32[i10 + 24 >> 2] | 0) + (i9 * 28 | 0) + 24 >> 2] | 0; 15742 if (!((i11 | 0) > -1)) { 15743 i1 = 19; 15744 break L4; 15745 } 15746 i10 = HEAP32[i7 >> 2] | 0; 15747 if ((i10 | 0) <= (i11 | 0)) { 15748 i1 = 19; 15749 break L4; 15750 } 15751 i12 = HEAP32[i6 >> 2] | 0; 15752 if (!((i9 | 0) > -1 & (i10 | 0) > (i9 | 0))) { 15753 i1 = 21; 15754 break L4; 15755 } 15756 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) { 15757 i16 = HEAP32[i8 + 12 >> 2] | 0; 15758 __ZN16b2ContactManager7DestroyEP9b2Contact(i3, i8); 15759 i8 = i16; 15760 break; 15761 } else { 15762 __ZN9b2Contact6UpdateEP17b2ContactListener(i8, HEAP32[i5 >> 2] | 0); 15763 i8 = HEAP32[i8 + 12 >> 2] | 0; 15764 break; 15765 } 15766 } 15767 } while (0); 15768 if ((i8 | 0) == 0) { 15769 i1 = 25; 15770 break; 15771 } 15772 } 15773 if ((i1 | 0) == 19) { 15774 ___assert_fail(1904, 1952, 159, 2008); 15775 } else if ((i1 | 0) == 21) { 15776 ___assert_fail(1904, 1952, 159, 2008); 15777 } else if ((i1 | 0) == 25) { 15778 STACKTOP = i2; 15779 return; 15780 } 15781 } 15782 function __ZN16b2ContactManager7AddPairEPvS0_(i1, i5, i6) { 15783 i1 = i1 | 0; 15784 i5 = i5 | 0; 15785 i6 = i6 | 0; 15786 var i2 = 0, i3 = 0, i4 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0; 15787 i2 = STACKTOP; 15788 i4 = HEAP32[i5 + 16 >> 2] | 0; 15789 i3 = HEAP32[i6 + 16 >> 2] | 0; 15790 i5 = HEAP32[i5 + 20 >> 2] | 0; 15791 i6 = HEAP32[i6 + 20 >> 2] | 0; 15792 i8 = HEAP32[i4 + 8 >> 2] | 0; 15793 i7 = HEAP32[i3 + 8 >> 2] | 0; 15794 if ((i8 | 0) == (i7 | 0)) { 15795 STACKTOP = i2; 15796 return; 15797 } 15798 i10 = HEAP32[i7 + 112 >> 2] | 0; 15799 L4 : do { 15800 if ((i10 | 0) != 0) { 15801 while (1) { 15802 if ((HEAP32[i10 >> 2] | 0) == (i8 | 0)) { 15803 i9 = HEAP32[i10 + 4 >> 2] | 0; 15804 i12 = HEAP32[i9 + 48 >> 2] | 0; 15805 i13 = HEAP32[i9 + 52 >> 2] | 0; 15806 i11 = HEAP32[i9 + 56 >> 2] | 0; 15807 i9 = HEAP32[i9 + 60 >> 2] | 0; 15808 if ((i12 | 0) == (i4 | 0) & (i13 | 0) == (i3 | 0) & (i11 | 0) == (i5 | 0) & (i9 | 0) == (i6 | 0)) { 15809 i9 = 22; 15810 break; 15811 } 15812 if ((i12 | 0) == (i3 | 0) & (i13 | 0) == (i4 | 0) & (i11 | 0) == (i6 | 0) & (i9 | 0) == (i5 | 0)) { 15813 i9 = 22; 15814 break; 15815 } 15816 } 15817 i10 = HEAP32[i10 + 12 >> 2] | 0; 15818 if ((i10 | 0) == 0) { 15819 break L4; 15820 } 15821 } 15822 if ((i9 | 0) == 22) { 15823 STACKTOP = i2; 15824 return; 15825 } 15826 } 15827 } while (0); 15828 if (!(__ZNK6b2Body13ShouldCollideEPKS_(i7, i8) | 0)) { 15829 STACKTOP = i2; 15830 return; 15831 } 15832 i7 = HEAP32[i1 + 68 >> 2] | 0; 15833 if ((i7 | 0) != 0 ? !(FUNCTION_TABLE_iiii[HEAP32[(HEAP32[i7 >> 2] | 0) + 8 >> 2] & 7](i7, i4, i3) | 0) : 0) { 15834 STACKTOP = i2; 15835 return; 15836 } 15837 i5 = __ZN9b2Contact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i4, i5, i3, i6, HEAP32[i1 + 76 >> 2] | 0) | 0; 15838 if ((i5 | 0) == 0) { 15839 STACKTOP = i2; 15840 return; 15841 } 15842 i4 = HEAP32[(HEAP32[i5 + 48 >> 2] | 0) + 8 >> 2] | 0; 15843 i3 = HEAP32[(HEAP32[i5 + 52 >> 2] | 0) + 8 >> 2] | 0; 15844 HEAP32[i5 + 8 >> 2] = 0; 15845 i7 = i1 + 60 | 0; 15846 HEAP32[i5 + 12 >> 2] = HEAP32[i7 >> 2]; 15847 i6 = HEAP32[i7 >> 2] | 0; 15848 if ((i6 | 0) != 0) { 15849 HEAP32[i6 + 8 >> 2] = i5; 15850 } 15851 HEAP32[i7 >> 2] = i5; 15852 i8 = i5 + 16 | 0; 15853 HEAP32[i5 + 20 >> 2] = i5; 15854 HEAP32[i8 >> 2] = i3; 15855 HEAP32[i5 + 24 >> 2] = 0; 15856 i6 = i4 + 112 | 0; 15857 HEAP32[i5 + 28 >> 2] = HEAP32[i6 >> 2]; 15858 i7 = HEAP32[i6 >> 2] | 0; 15859 if ((i7 | 0) != 0) { 15860 HEAP32[i7 + 8 >> 2] = i8; 15861 } 15862 HEAP32[i6 >> 2] = i8; 15863 i6 = i5 + 32 | 0; 15864 HEAP32[i5 + 36 >> 2] = i5; 15865 HEAP32[i6 >> 2] = i4; 15866 HEAP32[i5 + 40 >> 2] = 0; 15867 i7 = i3 + 112 | 0; 15868 HEAP32[i5 + 44 >> 2] = HEAP32[i7 >> 2]; 15869 i5 = HEAP32[i7 >> 2] | 0; 15870 if ((i5 | 0) != 0) { 15871 HEAP32[i5 + 8 >> 2] = i6; 15872 } 15873 HEAP32[i7 >> 2] = i6; 15874 i5 = i4 + 4 | 0; 15875 i6 = HEAPU16[i5 >> 1] | 0; 15876 if ((i6 & 2 | 0) == 0) { 15877 HEAP16[i5 >> 1] = i6 | 2; 15878 HEAPF32[i4 + 144 >> 2] = 0.0; 15879 } 15880 i4 = i3 + 4 | 0; 15881 i5 = HEAPU16[i4 >> 1] | 0; 15882 if ((i5 & 2 | 0) == 0) { 15883 HEAP16[i4 >> 1] = i5 | 2; 15884 HEAPF32[i3 + 144 >> 2] = 0.0; 15885 } 15886 i13 = i1 + 64 | 0; 15887 HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + 1; 15888 STACKTOP = i2; 15889 return; 15890 } 15891 function __ZN12b2BroadPhase11UpdatePairsI16b2ContactManagerEEvPT_(i5, i2) { 15892 i5 = i5 | 0; 15893 i2 = i2 | 0; 15894 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; 15895 i3 = STACKTOP; 15896 STACKTOP = STACKTOP + 16 | 0; 15897 i6 = i3; 15898 i1 = i5 + 52 | 0; 15899 HEAP32[i1 >> 2] = 0; 15900 i4 = i5 + 40 | 0; 15901 i12 = HEAP32[i4 >> 2] | 0; 15902 do { 15903 if ((i12 | 0) > 0) { 15904 i9 = i5 + 32 | 0; 15905 i11 = i5 + 56 | 0; 15906 i8 = i5 + 12 | 0; 15907 i10 = i5 + 4 | 0; 15908 i13 = 0; 15909 while (1) { 15910 i14 = HEAP32[(HEAP32[i9 >> 2] | 0) + (i13 << 2) >> 2] | 0; 15911 HEAP32[i11 >> 2] = i14; 15912 if (!((i14 | 0) == -1)) { 15913 if (!((i14 | 0) > -1)) { 15914 i8 = 6; 15915 break; 15916 } 15917 if ((HEAP32[i8 >> 2] | 0) <= (i14 | 0)) { 15918 i8 = 6; 15919 break; 15920 } 15921 __ZNK13b2DynamicTree5QueryI12b2BroadPhaseEEvPT_RK6b2AABB(i5, i5, (HEAP32[i10 >> 2] | 0) + (i14 * 36 | 0) | 0); 15922 i12 = HEAP32[i4 >> 2] | 0; 15923 } 15924 i13 = i13 + 1 | 0; 15925 if ((i13 | 0) >= (i12 | 0)) { 15926 i8 = 9; 15927 break; 15928 } 15929 } 15930 if ((i8 | 0) == 6) { 15931 ___assert_fail(1904, 1952, 159, 2008); 15932 } else if ((i8 | 0) == 9) { 15933 i7 = HEAP32[i1 >> 2] | 0; 15934 break; 15935 } 15936 } else { 15937 i7 = 0; 15938 } 15939 } while (0); 15940 HEAP32[i4 >> 2] = 0; 15941 i4 = i5 + 44 | 0; 15942 i14 = HEAP32[i4 >> 2] | 0; 15943 HEAP32[i6 >> 2] = 3; 15944 __ZNSt3__16__sortIRPFbRK6b2PairS3_EPS1_EEvT0_S8_T_(i14, i14 + (i7 * 12 | 0) | 0, i6); 15945 if ((HEAP32[i1 >> 2] | 0) <= 0) { 15946 STACKTOP = i3; 15947 return; 15948 } 15949 i6 = i5 + 12 | 0; 15950 i7 = i5 + 4 | 0; 15951 i9 = 0; 15952 L18 : while (1) { 15953 i8 = HEAP32[i4 >> 2] | 0; 15954 i5 = i8 + (i9 * 12 | 0) | 0; 15955 i10 = HEAP32[i5 >> 2] | 0; 15956 if (!((i10 | 0) > -1)) { 15957 i8 = 14; 15958 break; 15959 } 15960 i12 = HEAP32[i6 >> 2] | 0; 15961 if ((i12 | 0) <= (i10 | 0)) { 15962 i8 = 14; 15963 break; 15964 } 15965 i11 = HEAP32[i7 >> 2] | 0; 15966 i8 = i8 + (i9 * 12 | 0) + 4 | 0; 15967 i13 = HEAP32[i8 >> 2] | 0; 15968 if (!((i13 | 0) > -1 & (i12 | 0) > (i13 | 0))) { 15969 i8 = 16; 15970 break; 15971 } 15972 __ZN16b2ContactManager7AddPairEPvS0_(i2, HEAP32[i11 + (i10 * 36 | 0) + 16 >> 2] | 0, HEAP32[i11 + (i13 * 36 | 0) + 16 >> 2] | 0); 15973 i10 = HEAP32[i1 >> 2] | 0; 15974 while (1) { 15975 i9 = i9 + 1 | 0; 15976 if ((i9 | 0) >= (i10 | 0)) { 15977 i8 = 21; 15978 break L18; 15979 } 15980 i11 = HEAP32[i4 >> 2] | 0; 15981 if ((HEAP32[i11 + (i9 * 12 | 0) >> 2] | 0) != (HEAP32[i5 >> 2] | 0)) { 15982 continue L18; 15983 } 15984 if ((HEAP32[i11 + (i9 * 12 | 0) + 4 >> 2] | 0) != (HEAP32[i8 >> 2] | 0)) { 15985 continue L18; 15986 } 15987 } 15988 } 15989 if ((i8 | 0) == 14) { 15990 ___assert_fail(1904, 1952, 153, 1992); 15991 } else if ((i8 | 0) == 16) { 15992 ___assert_fail(1904, 1952, 153, 1992); 15993 } else if ((i8 | 0) == 21) { 15994 STACKTOP = i3; 15995 return; 15996 } 15997 } 15998 function __ZNK13b2DynamicTree5QueryI12b2BroadPhaseEEvPT_RK6b2AABB(i9, i4, i7) { 15999 i9 = i9 | 0; 16000 i4 = i4 | 0; 16001 i7 = i7 | 0; 16002 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; 16003 i2 = STACKTOP; 16004 STACKTOP = STACKTOP + 1040 | 0; 16005 i3 = i2; 16006 i1 = i3 + 4 | 0; 16007 HEAP32[i3 >> 2] = i1; 16008 i5 = i3 + 1028 | 0; 16009 HEAP32[i5 >> 2] = 0; 16010 i6 = i3 + 1032 | 0; 16011 HEAP32[i6 >> 2] = 256; 16012 i14 = HEAP32[i3 >> 2] | 0; 16013 HEAP32[i14 + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i9 >> 2]; 16014 i15 = HEAP32[i5 >> 2] | 0; 16015 i16 = i15 + 1 | 0; 16016 HEAP32[i5 >> 2] = i16; 16017 L1 : do { 16018 if ((i15 | 0) > -1) { 16019 i9 = i9 + 4 | 0; 16020 i11 = i7 + 4 | 0; 16021 i12 = i7 + 8 | 0; 16022 i10 = i7 + 12 | 0; 16023 while (1) { 16024 i16 = i16 + -1 | 0; 16025 HEAP32[i5 >> 2] = i16; 16026 i13 = HEAP32[i14 + (i16 << 2) >> 2] | 0; 16027 do { 16028 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) { 16029 i15 = i8 + (i13 * 36 | 0) + 24 | 0; 16030 if ((HEAP32[i15 >> 2] | 0) == -1) { 16031 if (!(__ZN12b2BroadPhase13QueryCallbackEi(i4, i13) | 0)) { 16032 break L1; 16033 } 16034 i16 = HEAP32[i5 >> 2] | 0; 16035 break; 16036 } 16037 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) { 16038 __Z6b2FreePv(i14); 16039 } 16040 i14 = HEAP32[i3 >> 2] | 0; 16041 HEAP32[i14 + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i15 >> 2]; 16042 i15 = (HEAP32[i5 >> 2] | 0) + 1 | 0; 16043 HEAP32[i5 >> 2] = i15; 16044 i13 = i8 + (i13 * 36 | 0) + 28 | 0; 16045 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) { 16046 __Z6b2FreePv(i14); 16047 } 16048 HEAP32[(HEAP32[i3 >> 2] | 0) + (HEAP32[i5 >> 2] << 2) >> 2] = HEAP32[i13 >> 2]; 16049 i16 = (HEAP32[i5 >> 2] | 0) + 1 | 0; 16050 HEAP32[i5 >> 2] = i16; 16051 } 16052 } while (0); 16053 if ((i16 | 0) <= 0) { 16054 break L1; 16055 } 16056 i14 = HEAP32[i3 >> 2] | 0; 16057 } 16058 } 16059 } while (0); 16060 i4 = HEAP32[i3 >> 2] | 0; 16061 if ((i4 | 0) == (i1 | 0)) { 16062 STACKTOP = i2; 16063 return; 16064 } 16065 __Z6b2FreePv(i4); 16066 HEAP32[i3 >> 2] = 0; 16067 STACKTOP = i2; 16068 return; 16069 } 16070 function __ZN15b2ContactSolver9WarmStartEv(i4) { 16071 i4 = i4 | 0; 16072 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; 16073 i1 = STACKTOP; 16074 i2 = i4 + 48 | 0; 16075 if ((HEAP32[i2 >> 2] | 0) <= 0) { 16076 STACKTOP = i1; 16077 return; 16078 } 16079 i3 = i4 + 40 | 0; 16080 i5 = i4 + 28 | 0; 16081 i22 = HEAP32[i5 >> 2] | 0; 16082 i8 = 0; 16083 do { 16084 i9 = HEAP32[i3 >> 2] | 0; 16085 i7 = HEAP32[i9 + (i8 * 152 | 0) + 112 >> 2] | 0; 16086 i6 = HEAP32[i9 + (i8 * 152 | 0) + 116 >> 2] | 0; 16087 d10 = +HEAPF32[i9 + (i8 * 152 | 0) + 120 >> 2]; 16088 d14 = +HEAPF32[i9 + (i8 * 152 | 0) + 128 >> 2]; 16089 d12 = +HEAPF32[i9 + (i8 * 152 | 0) + 124 >> 2]; 16090 d11 = +HEAPF32[i9 + (i8 * 152 | 0) + 132 >> 2]; 16091 i13 = HEAP32[i9 + (i8 * 152 | 0) + 144 >> 2] | 0; 16092 i4 = i22 + (i7 * 12 | 0) | 0; 16093 i24 = i4; 16094 d17 = +HEAPF32[i24 >> 2]; 16095 d19 = +HEAPF32[i24 + 4 >> 2]; 16096 d20 = +HEAPF32[i22 + (i7 * 12 | 0) + 8 >> 2]; 16097 i24 = i22 + (i6 * 12 | 0) | 0; 16098 d21 = +HEAPF32[i24 >> 2]; 16099 d23 = +HEAPF32[i24 + 4 >> 2]; 16100 d18 = +HEAPF32[i22 + (i6 * 12 | 0) + 8 >> 2]; 16101 i22 = i9 + (i8 * 152 | 0) + 72 | 0; 16102 d15 = +HEAPF32[i22 >> 2]; 16103 d16 = +HEAPF32[i22 + 4 >> 2]; 16104 if ((i13 | 0) > 0) { 16105 i22 = 0; 16106 do { 16107 d27 = +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 16 >> 2]; 16108 d25 = +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 20 >> 2]; 16109 d26 = d15 * d27 + d16 * d25; 16110 d25 = d16 * d27 - d15 * d25; 16111 d20 = d20 - d14 * (+HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) >> 2] * d25 - +HEAPF32[i9 + (i8 * 152 | 0) + (i22 * 36 | 0) + 4 >> 2] * d26); 16112 d17 = d17 - d10 * d26; 16113 d19 = d19 - d10 * d25; 16114 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]); 16115 d21 = d21 + d12 * d26; 16116 d23 = d23 + d12 * d25; 16117 i22 = i22 + 1 | 0; 16118 } while ((i22 | 0) != (i13 | 0)); 16119 } 16120 d27 = +d17; 16121 d26 = +d19; 16122 i22 = i4; 16123 HEAPF32[i22 >> 2] = d27; 16124 HEAPF32[i22 + 4 >> 2] = d26; 16125 i22 = HEAP32[i5 >> 2] | 0; 16126 HEAPF32[i22 + (i7 * 12 | 0) + 8 >> 2] = d20; 16127 d26 = +d21; 16128 d27 = +d23; 16129 i22 = i22 + (i6 * 12 | 0) | 0; 16130 HEAPF32[i22 >> 2] = d26; 16131 HEAPF32[i22 + 4 >> 2] = d27; 16132 i22 = HEAP32[i5 >> 2] | 0; 16133 HEAPF32[i22 + (i6 * 12 | 0) + 8 >> 2] = d18; 16134 i8 = i8 + 1 | 0; 16135 } while ((i8 | 0) < (HEAP32[i2 >> 2] | 0)); 16136 STACKTOP = i1; 16137 return; 16138 } 16139 function __ZNK14b2PolygonShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi(i1, i5, i8, i7, i4) { 16140 i1 = i1 | 0; 16141 i5 = i5 | 0; 16142 i8 = i8 | 0; 16143 i7 = i7 | 0; 16144 i4 = i4 | 0; 16145 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; 16146 i4 = STACKTOP; 16147 d10 = +HEAPF32[i7 >> 2]; 16148 d9 = +HEAPF32[i8 >> 2] - d10; 16149 d18 = +HEAPF32[i7 + 4 >> 2]; 16150 d11 = +HEAPF32[i8 + 4 >> 2] - d18; 16151 i6 = i7 + 12 | 0; 16152 d17 = +HEAPF32[i6 >> 2]; 16153 i7 = i7 + 8 | 0; 16154 d19 = +HEAPF32[i7 >> 2]; 16155 d12 = d9 * d17 + d11 * d19; 16156 d9 = d17 * d11 - d9 * d19; 16157 d10 = +HEAPF32[i8 + 8 >> 2] - d10; 16158 d18 = +HEAPF32[i8 + 12 >> 2] - d18; 16159 d11 = d17 * d10 + d19 * d18 - d12; 16160 d10 = d17 * d18 - d19 * d10 - d9; 16161 i8 = i8 + 16 | 0; 16162 i14 = HEAP32[i1 + 148 >> 2] | 0; 16163 do { 16164 if ((i14 | 0) > 0) { 16165 i16 = 0; 16166 i15 = -1; 16167 d13 = 0.0; 16168 d17 = +HEAPF32[i8 >> 2]; 16169 L3 : while (1) { 16170 d20 = +HEAPF32[i1 + (i16 << 3) + 84 >> 2]; 16171 d19 = +HEAPF32[i1 + (i16 << 3) + 88 >> 2]; 16172 d18 = (+HEAPF32[i1 + (i16 << 3) + 20 >> 2] - d12) * d20 + (+HEAPF32[i1 + (i16 << 3) + 24 >> 2] - d9) * d19; 16173 d19 = d11 * d20 + d10 * d19; 16174 do { 16175 if (d19 == 0.0) { 16176 if (d18 < 0.0) { 16177 i1 = 0; 16178 i14 = 18; 16179 break L3; 16180 } 16181 } else { 16182 if (d19 < 0.0 ? d18 < d13 * d19 : 0) { 16183 i15 = i16; 16184 d13 = d18 / d19; 16185 break; 16186 } 16187 if (d19 > 0.0 ? d18 < d17 * d19 : 0) { 16188 d17 = d18 / d19; 16189 } 16190 } 16191 } while (0); 16192 i16 = i16 + 1 | 0; 16193 if (d17 < d13) { 16194 i1 = 0; 16195 i14 = 18; 16196 break; 16197 } 16198 if ((i16 | 0) >= (i14 | 0)) { 16199 i14 = 13; 16200 break; 16201 } 16202 } 16203 if ((i14 | 0) == 13) { 16204 if (d13 >= 0.0) { 16205 i2 = i15; 16206 d3 = d13; 16207 break; 16208 } 16209 ___assert_fail(376, 328, 249, 424); 16210 } else if ((i14 | 0) == 18) { 16211 STACKTOP = i4; 16212 return i1 | 0; 16213 } 16214 } else { 16215 i2 = -1; 16216 d3 = 0.0; 16217 } 16218 } while (0); 16219 if (!(d3 <= +HEAPF32[i8 >> 2])) { 16220 ___assert_fail(376, 328, 249, 424); 16221 } 16222 if (!((i2 | 0) > -1)) { 16223 i16 = 0; 16224 STACKTOP = i4; 16225 return i16 | 0; 16226 } 16227 HEAPF32[i5 + 8 >> 2] = d3; 16228 d18 = +HEAPF32[i6 >> 2]; 16229 d13 = +HEAPF32[i1 + (i2 << 3) + 84 >> 2]; 16230 d17 = +HEAPF32[i7 >> 2]; 16231 d20 = +HEAPF32[i1 + (i2 << 3) + 88 >> 2]; 16232 d19 = +(d18 * d13 - d17 * d20); 16233 d20 = +(d13 * d17 + d18 * d20); 16234 i16 = i5; 16235 HEAPF32[i16 >> 2] = d19; 16236 HEAPF32[i16 + 4 >> 2] = d20; 16237 i16 = 1; 16238 STACKTOP = i4; 16239 return i16 | 0; 16240 } 16241 function __ZN7b2World4StepEfii(i1, d9, i11, i12) { 16242 i1 = i1 | 0; 16243 d9 = +d9; 16244 i11 = i11 | 0; 16245 i12 = i12 | 0; 16246 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i10 = 0, i13 = 0; 16247 i4 = STACKTOP; 16248 STACKTOP = STACKTOP + 32 | 0; 16249 i3 = i4 + 27 | 0; 16250 i5 = i4; 16251 i8 = i4 + 26 | 0; 16252 i10 = i4 + 25 | 0; 16253 i7 = i4 + 24 | 0; 16254 __ZN7b2TimerC2Ev(i3); 16255 i2 = i1 + 102868 | 0; 16256 i13 = HEAP32[i2 >> 2] | 0; 16257 if ((i13 & 1 | 0) != 0) { 16258 __ZN16b2ContactManager15FindNewContactsEv(i1 + 102872 | 0); 16259 i13 = HEAP32[i2 >> 2] & -2; 16260 HEAP32[i2 >> 2] = i13; 16261 } 16262 HEAP32[i2 >> 2] = i13 | 2; 16263 HEAPF32[i5 >> 2] = d9; 16264 HEAP32[i5 + 12 >> 2] = i11; 16265 HEAP32[i5 + 16 >> 2] = i12; 16266 if (d9 > 0.0) { 16267 HEAPF32[i5 + 4 >> 2] = 1.0 / d9; 16268 } else { 16269 HEAPF32[i5 + 4 >> 2] = 0.0; 16270 } 16271 i11 = i1 + 102988 | 0; 16272 HEAPF32[i5 + 8 >> 2] = +HEAPF32[i11 >> 2] * d9; 16273 HEAP8[i5 + 20 | 0] = HEAP8[i1 + 102992 | 0] | 0; 16274 __ZN7b2TimerC2Ev(i8); 16275 __ZN16b2ContactManager7CollideEv(i1 + 102872 | 0); 16276 HEAPF32[i1 + 103e3 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i8); 16277 if ((HEAP8[i1 + 102995 | 0] | 0) != 0 ? +HEAPF32[i5 >> 2] > 0.0 : 0) { 16278 __ZN7b2TimerC2Ev(i10); 16279 __ZN7b2World5SolveERK10b2TimeStep(i1, i5); 16280 HEAPF32[i1 + 103004 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i10); 16281 } 16282 if ((HEAP8[i1 + 102993 | 0] | 0) != 0) { 16283 d9 = +HEAPF32[i5 >> 2]; 16284 if (d9 > 0.0) { 16285 __ZN7b2TimerC2Ev(i7); 16286 __ZN7b2World8SolveTOIERK10b2TimeStep(i1, i5); 16287 HEAPF32[i1 + 103024 >> 2] = +__ZNK7b2Timer15GetMillisecondsEv(i7); 16288 i6 = 12; 16289 } 16290 } else { 16291 i6 = 12; 16292 } 16293 if ((i6 | 0) == 12) { 16294 d9 = +HEAPF32[i5 >> 2]; 16295 } 16296 if (d9 > 0.0) { 16297 HEAPF32[i11 >> 2] = +HEAPF32[i5 + 4 >> 2]; 16298 } 16299 i5 = HEAP32[i2 >> 2] | 0; 16300 if ((i5 & 4 | 0) == 0) { 16301 i13 = i5 & -3; 16302 HEAP32[i2 >> 2] = i13; 16303 d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3); 16304 i13 = i1 + 102996 | 0; 16305 HEAPF32[i13 >> 2] = d9; 16306 STACKTOP = i4; 16307 return; 16308 } 16309 i6 = HEAP32[i1 + 102952 >> 2] | 0; 16310 if ((i6 | 0) == 0) { 16311 i13 = i5 & -3; 16312 HEAP32[i2 >> 2] = i13; 16313 d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3); 16314 i13 = i1 + 102996 | 0; 16315 HEAPF32[i13 >> 2] = d9; 16316 STACKTOP = i4; 16317 return; 16318 } 16319 do { 16320 HEAPF32[i6 + 76 >> 2] = 0.0; 16321 HEAPF32[i6 + 80 >> 2] = 0.0; 16322 HEAPF32[i6 + 84 >> 2] = 0.0; 16323 i6 = HEAP32[i6 + 96 >> 2] | 0; 16324 } while ((i6 | 0) != 0); 16325 i13 = i5 & -3; 16326 HEAP32[i2 >> 2] = i13; 16327 d9 = +__ZNK7b2Timer15GetMillisecondsEv(i3); 16328 i13 = i1 + 102996 | 0; 16329 HEAPF32[i13 >> 2] = d9; 16330 STACKTOP = i4; 16331 return; 16332 } 16333 function __ZL19b2FindMaxSeparationPiPK14b2PolygonShapeRK11b2TransformS2_S5_(i1, i5, i6, i3, i4) { 16334 i1 = i1 | 0; 16335 i5 = i5 | 0; 16336 i6 = i6 | 0; 16337 i3 = i3 | 0; 16338 i4 = i4 | 0; 16339 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; 16340 i2 = STACKTOP; 16341 i7 = HEAP32[i5 + 148 >> 2] | 0; 16342 d17 = +HEAPF32[i4 + 12 >> 2]; 16343 d19 = +HEAPF32[i3 + 12 >> 2]; 16344 d18 = +HEAPF32[i4 + 8 >> 2]; 16345 d16 = +HEAPF32[i3 + 16 >> 2]; 16346 d15 = +HEAPF32[i6 + 12 >> 2]; 16347 d10 = +HEAPF32[i5 + 12 >> 2]; 16348 d8 = +HEAPF32[i6 + 8 >> 2]; 16349 d9 = +HEAPF32[i5 + 16 >> 2]; 16350 d11 = +HEAPF32[i4 >> 2] + (d17 * d19 - d18 * d16) - (+HEAPF32[i6 >> 2] + (d15 * d10 - d8 * d9)); 16351 d9 = d19 * d18 + d17 * d16 + +HEAPF32[i4 + 4 >> 2] - (d10 * d8 + d15 * d9 + +HEAPF32[i6 + 4 >> 2]); 16352 d10 = d15 * d11 + d8 * d9; 16353 d8 = d15 * d9 - d11 * d8; 16354 if ((i7 | 0) > 0) { 16355 i14 = 0; 16356 i13 = 0; 16357 d9 = -3.4028234663852886e+38; 16358 while (1) { 16359 d11 = d10 * +HEAPF32[i5 + (i13 << 3) + 84 >> 2] + d8 * +HEAPF32[i5 + (i13 << 3) + 88 >> 2]; 16360 i12 = d11 > d9; 16361 i14 = i12 ? i13 : i14; 16362 i13 = i13 + 1 | 0; 16363 if ((i13 | 0) == (i7 | 0)) { 16364 break; 16365 } else { 16366 d9 = i12 ? d11 : d9; 16367 } 16368 } 16369 } else { 16370 i14 = 0; 16371 } 16372 d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i14, i3, i4); 16373 i12 = ((i14 | 0) > 0 ? i14 : i7) + -1 | 0; 16374 d8 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i12, i3, i4); 16375 i13 = i14 + 1 | 0; 16376 i13 = (i13 | 0) < (i7 | 0) ? i13 : 0; 16377 d10 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4); 16378 if (d8 > d9 & d8 > d10) { 16379 while (1) { 16380 i13 = ((i12 | 0) > 0 ? i12 : i7) + -1 | 0; 16381 d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4); 16382 if (d9 > d8) { 16383 i12 = i13; 16384 d8 = d9; 16385 } else { 16386 break; 16387 } 16388 } 16389 HEAP32[i1 >> 2] = i12; 16390 STACKTOP = i2; 16391 return +d8; 16392 } 16393 if (d10 > d9) { 16394 i12 = i13; 16395 d8 = d10; 16396 } else { 16397 d19 = d9; 16398 HEAP32[i1 >> 2] = i14; 16399 STACKTOP = i2; 16400 return +d19; 16401 } 16402 while (1) { 16403 i13 = i12 + 1 | 0; 16404 i13 = (i13 | 0) < (i7 | 0) ? i13 : 0; 16405 d9 = +__ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i5, i6, i13, i3, i4); 16406 if (d9 > d8) { 16407 i12 = i13; 16408 d8 = d9; 16409 } else { 16410 break; 16411 } 16412 } 16413 HEAP32[i1 >> 2] = i12; 16414 STACKTOP = i2; 16415 return +d8; 16416 } 16417 function __ZN9b2Fixture11SynchronizeEP12b2BroadPhaseRK11b2TransformS4_(i10, i8, i7, i2) { 16418 i10 = i10 | 0; 16419 i8 = i8 | 0; 16420 i7 = i7 | 0; 16421 i2 = i2 | 0; 16422 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; 16423 i9 = STACKTOP; 16424 STACKTOP = STACKTOP + 48 | 0; 16425 i5 = i9 + 24 | 0; 16426 i6 = i9 + 8 | 0; 16427 i3 = i9; 16428 i4 = i10 + 28 | 0; 16429 if ((HEAP32[i4 >> 2] | 0) <= 0) { 16430 STACKTOP = i9; 16431 return; 16432 } 16433 i1 = i10 + 24 | 0; 16434 i18 = i10 + 12 | 0; 16435 i19 = i5 + 4 | 0; 16436 i20 = i6 + 4 | 0; 16437 i13 = i5 + 8 | 0; 16438 i14 = i6 + 8 | 0; 16439 i15 = i5 + 12 | 0; 16440 i16 = i6 + 12 | 0; 16441 i11 = i2 + 4 | 0; 16442 i22 = i7 + 4 | 0; 16443 i12 = i3 + 4 | 0; 16444 i21 = 0; 16445 do { 16446 i10 = HEAP32[i1 >> 2] | 0; 16447 i27 = HEAP32[i18 >> 2] | 0; 16448 i17 = i10 + (i21 * 28 | 0) + 20 | 0; 16449 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i27 >> 2] | 0) + 24 >> 2] & 15](i27, i5, i7, HEAP32[i17 >> 2] | 0); 16450 i27 = HEAP32[i18 >> 2] | 0; 16451 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i27 >> 2] | 0) + 24 >> 2] & 15](i27, i6, i2, HEAP32[i17 >> 2] | 0); 16452 i17 = i10 + (i21 * 28 | 0) | 0; 16453 d25 = +HEAPF32[i5 >> 2]; 16454 d26 = +HEAPF32[i6 >> 2]; 16455 d24 = +HEAPF32[i19 >> 2]; 16456 d23 = +HEAPF32[i20 >> 2]; 16457 d25 = +(d25 < d26 ? d25 : d26); 16458 d26 = +(d24 < d23 ? d24 : d23); 16459 i27 = i17; 16460 HEAPF32[i27 >> 2] = d25; 16461 HEAPF32[i27 + 4 >> 2] = d26; 16462 d25 = +HEAPF32[i13 >> 2]; 16463 d26 = +HEAPF32[i14 >> 2]; 16464 d23 = +HEAPF32[i15 >> 2]; 16465 d24 = +HEAPF32[i16 >> 2]; 16466 d25 = +(d25 > d26 ? d25 : d26); 16467 d26 = +(d23 > d24 ? d23 : d24); 16468 i27 = i10 + (i21 * 28 | 0) + 8 | 0; 16469 HEAPF32[i27 >> 2] = d25; 16470 HEAPF32[i27 + 4 >> 2] = d26; 16471 d26 = +HEAPF32[i11 >> 2] - +HEAPF32[i22 >> 2]; 16472 HEAPF32[i3 >> 2] = +HEAPF32[i2 >> 2] - +HEAPF32[i7 >> 2]; 16473 HEAPF32[i12 >> 2] = d26; 16474 __ZN12b2BroadPhase9MoveProxyEiRK6b2AABBRK6b2Vec2(i8, HEAP32[i10 + (i21 * 28 | 0) + 24 >> 2] | 0, i17, i3); 16475 i21 = i21 + 1 | 0; 16476 } while ((i21 | 0) < (HEAP32[i4 >> 2] | 0)); 16477 STACKTOP = i9; 16478 return; 16479 } 16480 function __ZN12b2EPCollider24ComputePolygonSeparationEv(i2, i9) { 16481 i2 = i2 | 0; 16482 i9 = i9 | 0; 16483 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; 16484 i15 = STACKTOP; 16485 HEAP32[i2 >> 2] = 0; 16486 i3 = i2 + 4 | 0; 16487 HEAP32[i3 >> 2] = -1; 16488 i4 = i2 + 8 | 0; 16489 HEAPF32[i4 >> 2] = -3.4028234663852886e+38; 16490 d7 = +HEAPF32[i9 + 216 >> 2]; 16491 d6 = +HEAPF32[i9 + 212 >> 2]; 16492 i5 = HEAP32[i9 + 128 >> 2] | 0; 16493 if ((i5 | 0) <= 0) { 16494 STACKTOP = i15; 16495 return; 16496 } 16497 d17 = +HEAPF32[i9 + 164 >> 2]; 16498 d18 = +HEAPF32[i9 + 168 >> 2]; 16499 d11 = +HEAPF32[i9 + 172 >> 2]; 16500 d10 = +HEAPF32[i9 + 176 >> 2]; 16501 d16 = +HEAPF32[i9 + 244 >> 2]; 16502 i12 = i9 + 228 | 0; 16503 i13 = i9 + 232 | 0; 16504 i14 = i9 + 236 | 0; 16505 i1 = i9 + 240 | 0; 16506 d19 = -3.4028234663852886e+38; 16507 i20 = 0; 16508 while (1) { 16509 d23 = +HEAPF32[i9 + (i20 << 3) + 64 >> 2]; 16510 d21 = -d23; 16511 d22 = -+HEAPF32[i9 + (i20 << 3) + 68 >> 2]; 16512 d26 = +HEAPF32[i9 + (i20 << 3) >> 2]; 16513 d25 = +HEAPF32[i9 + (i20 << 3) + 4 >> 2]; 16514 d24 = (d26 - d17) * d21 + (d25 - d18) * d22; 16515 d25 = (d26 - d11) * d21 + (d25 - d10) * d22; 16516 d24 = d24 < d25 ? d24 : d25; 16517 if (d24 > d16) { 16518 break; 16519 } 16520 if (!(d7 * d23 + d6 * d22 >= 0.0)) { 16521 if (!((d21 - +HEAPF32[i12 >> 2]) * d6 + (d22 - +HEAPF32[i13 >> 2]) * d7 < -.03490658849477768) & d24 > d19) { 16522 i8 = 8; 16523 } 16524 } else { 16525 if (!((d21 - +HEAPF32[i14 >> 2]) * d6 + (d22 - +HEAPF32[i1 >> 2]) * d7 < -.03490658849477768) & d24 > d19) { 16526 i8 = 8; 16527 } 16528 } 16529 if ((i8 | 0) == 8) { 16530 i8 = 0; 16531 HEAP32[i2 >> 2] = 2; 16532 HEAP32[i3 >> 2] = i20; 16533 HEAPF32[i4 >> 2] = d24; 16534 d19 = d24; 16535 } 16536 i20 = i20 + 1 | 0; 16537 if ((i20 | 0) >= (i5 | 0)) { 16538 i8 = 10; 16539 break; 16540 } 16541 } 16542 if ((i8 | 0) == 10) { 16543 STACKTOP = i15; 16544 return; 16545 } 16546 HEAP32[i2 >> 2] = 2; 16547 HEAP32[i3 >> 2] = i20; 16548 HEAPF32[i4 >> 2] = d24; 16549 STACKTOP = i15; 16550 return; 16551 } 16552 function __ZNK11b2EdgeShape7RayCastEP15b2RayCastOutputRK14b2RayCastInputRK11b2Transformi(i17, i1, i2, i18, i3) { 16553 i17 = i17 | 0; 16554 i1 = i1 | 0; 16555 i2 = i2 | 0; 16556 i18 = i18 | 0; 16557 i3 = i3 | 0; 16558 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; 16559 i3 = STACKTOP; 16560 d6 = +HEAPF32[i18 >> 2]; 16561 d7 = +HEAPF32[i2 >> 2] - d6; 16562 d9 = +HEAPF32[i18 + 4 >> 2]; 16563 d4 = +HEAPF32[i2 + 4 >> 2] - d9; 16564 d11 = +HEAPF32[i18 + 12 >> 2]; 16565 d5 = +HEAPF32[i18 + 8 >> 2]; 16566 d8 = d7 * d11 + d4 * d5; 16567 d7 = d11 * d4 - d7 * d5; 16568 d6 = +HEAPF32[i2 + 8 >> 2] - d6; 16569 d9 = +HEAPF32[i2 + 12 >> 2] - d9; 16570 d4 = d11 * d6 + d5 * d9 - d8; 16571 d6 = d11 * d9 - d5 * d6 - d7; 16572 i18 = i17 + 12 | 0; 16573 d5 = +HEAPF32[i18 >> 2]; 16574 d9 = +HEAPF32[i18 + 4 >> 2]; 16575 i18 = i17 + 20 | 0; 16576 d11 = +HEAPF32[i18 >> 2]; 16577 d11 = d11 - d5; 16578 d12 = +HEAPF32[i18 + 4 >> 2] - d9; 16579 d15 = -d11; 16580 d10 = d11 * d11 + d12 * d12; 16581 d13 = +Math_sqrt(+d10); 16582 if (d13 < 1.1920928955078125e-7) { 16583 d13 = d12; 16584 } else { 16585 d16 = 1.0 / d13; 16586 d13 = d12 * d16; 16587 d15 = d16 * d15; 16588 } 16589 d14 = (d9 - d7) * d15 + (d5 - d8) * d13; 16590 d16 = d6 * d15 + d4 * d13; 16591 if (d16 == 0.0) { 16592 i18 = 0; 16593 STACKTOP = i3; 16594 return i18 | 0; 16595 } 16596 d16 = d14 / d16; 16597 if (d16 < 0.0) { 16598 i18 = 0; 16599 STACKTOP = i3; 16600 return i18 | 0; 16601 } 16602 if (+HEAPF32[i2 + 16 >> 2] < d16 | d10 == 0.0) { 16603 i18 = 0; 16604 STACKTOP = i3; 16605 return i18 | 0; 16606 } 16607 d12 = (d11 * (d8 + d4 * d16 - d5) + d12 * (d7 + d6 * d16 - d9)) / d10; 16608 if (d12 < 0.0 | d12 > 1.0) { 16609 i18 = 0; 16610 STACKTOP = i3; 16611 return i18 | 0; 16612 } 16613 HEAPF32[i1 + 8 >> 2] = d16; 16614 if (d14 > 0.0) { 16615 d14 = +-d13; 16616 d16 = +-d15; 16617 i18 = i1; 16618 HEAPF32[i18 >> 2] = d14; 16619 HEAPF32[i18 + 4 >> 2] = d16; 16620 i18 = 1; 16621 STACKTOP = i3; 16622 return i18 | 0; 16623 } else { 16624 d14 = +d13; 16625 d16 = +d15; 16626 i18 = i1; 16627 HEAPF32[i18 >> 2] = d14; 16628 HEAPF32[i18 + 4 >> 2] = d16; 16629 i18 = 1; 16630 STACKTOP = i3; 16631 return i18 | 0; 16632 } 16633 return 0; 16634 } 16635 function ___dynamic_cast(i7, i6, i11, i5) { 16636 i7 = i7 | 0; 16637 i6 = i6 | 0; 16638 i11 = i11 | 0; 16639 i5 = i5 | 0; 16640 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i8 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0; 16641 i1 = STACKTOP; 16642 STACKTOP = STACKTOP + 64 | 0; 16643 i2 = i1; 16644 i3 = HEAP32[i7 >> 2] | 0; 16645 i4 = i7 + (HEAP32[i3 + -8 >> 2] | 0) | 0; 16646 i3 = HEAP32[i3 + -4 >> 2] | 0; 16647 HEAP32[i2 >> 2] = i11; 16648 HEAP32[i2 + 4 >> 2] = i7; 16649 HEAP32[i2 + 8 >> 2] = i6; 16650 HEAP32[i2 + 12 >> 2] = i5; 16651 i9 = i2 + 16 | 0; 16652 i10 = i2 + 20 | 0; 16653 i6 = i2 + 24 | 0; 16654 i8 = i2 + 28 | 0; 16655 i5 = i2 + 32 | 0; 16656 i7 = i2 + 40 | 0; 16657 i12 = (i3 | 0) == (i11 | 0); 16658 i13 = i9 + 0 | 0; 16659 i11 = i13 + 36 | 0; 16660 do { 16661 HEAP32[i13 >> 2] = 0; 16662 i13 = i13 + 4 | 0; 16663 } while ((i13 | 0) < (i11 | 0)); 16664 HEAP16[i9 + 36 >> 1] = 0; 16665 HEAP8[i9 + 38 | 0] = 0; 16666 if (i12) { 16667 HEAP32[i2 + 48 >> 2] = 1; 16668 FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i3 >> 2] | 0) + 20 >> 2] & 3](i3, i2, i4, i4, 1, 0); 16669 i13 = (HEAP32[i6 >> 2] | 0) == 1 ? i4 : 0; 16670 STACKTOP = i1; 16671 return i13 | 0; 16672 } 16673 FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[i3 >> 2] | 0) + 24 >> 2] & 3](i3, i2, i4, 1, 0); 16674 i2 = HEAP32[i2 + 36 >> 2] | 0; 16675 if ((i2 | 0) == 0) { 16676 if ((HEAP32[i7 >> 2] | 0) != 1) { 16677 i13 = 0; 16678 STACKTOP = i1; 16679 return i13 | 0; 16680 } 16681 if ((HEAP32[i8 >> 2] | 0) != 1) { 16682 i13 = 0; 16683 STACKTOP = i1; 16684 return i13 | 0; 16685 } 16686 i13 = (HEAP32[i5 >> 2] | 0) == 1 ? HEAP32[i10 >> 2] | 0 : 0; 16687 STACKTOP = i1; 16688 return i13 | 0; 16689 } else if ((i2 | 0) == 1) { 16690 if ((HEAP32[i6 >> 2] | 0) != 1) { 16691 if ((HEAP32[i7 >> 2] | 0) != 0) { 16692 i13 = 0; 16693 STACKTOP = i1; 16694 return i13 | 0; 16695 } 16696 if ((HEAP32[i8 >> 2] | 0) != 1) { 16697 i13 = 0; 16698 STACKTOP = i1; 16699 return i13 | 0; 16700 } 16701 if ((HEAP32[i5 >> 2] | 0) != 1) { 16702 i13 = 0; 16703 STACKTOP = i1; 16704 return i13 | 0; 16705 } 16706 } 16707 i13 = HEAP32[i9 >> 2] | 0; 16708 STACKTOP = i1; 16709 return i13 | 0; 16710 } else { 16711 i13 = 0; 16712 STACKTOP = i1; 16713 return i13 | 0; 16714 } 16715 return 0; 16716 } 16717 function __ZNK14b2PolygonShape11ComputeMassEP10b2MassDataf(i4, i1, d2) { 16718 i4 = i4 | 0; 16719 i1 = i1 | 0; 16720 d2 = +d2; 16721 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; 16722 i3 = STACKTOP; 16723 i5 = HEAP32[i4 + 148 >> 2] | 0; 16724 if ((i5 | 0) > 2) { 16725 d7 = 0.0; 16726 d6 = 0.0; 16727 i12 = 0; 16728 } else { 16729 ___assert_fail(432, 328, 306, 456); 16730 } 16731 do { 16732 d6 = d6 + +HEAPF32[i4 + (i12 << 3) + 20 >> 2]; 16733 d7 = d7 + +HEAPF32[i4 + (i12 << 3) + 24 >> 2]; 16734 i12 = i12 + 1 | 0; 16735 } while ((i12 | 0) < (i5 | 0)); 16736 d11 = 1.0 / +(i5 | 0); 16737 d6 = d6 * d11; 16738 d11 = d7 * d11; 16739 i16 = i4 + 20 | 0; 16740 i19 = i4 + 24 | 0; 16741 d9 = 0.0; 16742 d10 = 0.0; 16743 d7 = 0.0; 16744 d8 = 0.0; 16745 i17 = 0; 16746 do { 16747 d18 = +HEAPF32[i4 + (i17 << 3) + 20 >> 2] - d6; 16748 d13 = +HEAPF32[i4 + (i17 << 3) + 24 >> 2] - d11; 16749 i17 = i17 + 1 | 0; 16750 i12 = (i17 | 0) < (i5 | 0); 16751 if (i12) { 16752 i14 = i4 + (i17 << 3) + 20 | 0; 16753 i15 = i4 + (i17 << 3) + 24 | 0; 16754 } else { 16755 i14 = i16; 16756 i15 = i19; 16757 } 16758 d21 = +HEAPF32[i14 >> 2] - d6; 16759 d20 = +HEAPF32[i15 >> 2] - d11; 16760 d22 = d18 * d20 - d13 * d21; 16761 d23 = d22 * .5; 16762 d8 = d8 + d23; 16763 d23 = d23 * .3333333432674408; 16764 d9 = d9 + (d18 + d21) * d23; 16765 d10 = d10 + (d13 + d20) * d23; 16766 d7 = d7 + d22 * .0833333358168602 * (d21 * d21 + (d18 * d18 + d18 * d21) + (d20 * d20 + (d13 * d13 + d13 * d20))); 16767 } while (i12); 16768 d13 = d8 * d2; 16769 HEAPF32[i1 >> 2] = d13; 16770 if (d8 > 1.1920928955078125e-7) { 16771 d23 = 1.0 / d8; 16772 d22 = d9 * d23; 16773 d23 = d10 * d23; 16774 d20 = d6 + d22; 16775 d21 = d11 + d23; 16776 d11 = +d20; 16777 d18 = +d21; 16778 i19 = i1 + 4 | 0; 16779 HEAPF32[i19 >> 2] = d11; 16780 HEAPF32[i19 + 4 >> 2] = d18; 16781 HEAPF32[i1 + 12 >> 2] = d7 * d2 + d13 * (d20 * d20 + d21 * d21 - (d22 * d22 + d23 * d23)); 16782 STACKTOP = i3; 16783 return; 16784 } else { 16785 ___assert_fail(472, 328, 352, 456); 16786 } 16787 } 16788 function __ZN16b2ContactManager7DestroyEP9b2Contact(i1, i2) { 16789 i1 = i1 | 0; 16790 i2 = i2 | 0; 16791 var i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0; 16792 i3 = STACKTOP; 16793 i5 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 8 >> 2] | 0; 16794 i4 = HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 8 >> 2] | 0; 16795 i6 = HEAP32[i1 + 72 >> 2] | 0; 16796 if ((i6 | 0) != 0 ? (HEAP32[i2 + 4 >> 2] & 2 | 0) != 0 : 0) { 16797 FUNCTION_TABLE_vii[HEAP32[(HEAP32[i6 >> 2] | 0) + 12 >> 2] & 15](i6, i2); 16798 } 16799 i7 = i2 + 8 | 0; 16800 i8 = HEAP32[i7 >> 2] | 0; 16801 i6 = i2 + 12 | 0; 16802 if ((i8 | 0) != 0) { 16803 HEAP32[i8 + 12 >> 2] = HEAP32[i6 >> 2]; 16804 } 16805 i8 = HEAP32[i6 >> 2] | 0; 16806 if ((i8 | 0) != 0) { 16807 HEAP32[i8 + 8 >> 2] = HEAP32[i7 >> 2]; 16808 } 16809 i7 = i1 + 60 | 0; 16810 if ((HEAP32[i7 >> 2] | 0) == (i2 | 0)) { 16811 HEAP32[i7 >> 2] = HEAP32[i6 >> 2]; 16812 } 16813 i7 = i2 + 24 | 0; 16814 i8 = HEAP32[i7 >> 2] | 0; 16815 i6 = i2 + 28 | 0; 16816 if ((i8 | 0) != 0) { 16817 HEAP32[i8 + 12 >> 2] = HEAP32[i6 >> 2]; 16818 } 16819 i8 = HEAP32[i6 >> 2] | 0; 16820 if ((i8 | 0) != 0) { 16821 HEAP32[i8 + 8 >> 2] = HEAP32[i7 >> 2]; 16822 } 16823 i5 = i5 + 112 | 0; 16824 if ((i2 + 16 | 0) == (HEAP32[i5 >> 2] | 0)) { 16825 HEAP32[i5 >> 2] = HEAP32[i6 >> 2]; 16826 } 16827 i6 = i2 + 40 | 0; 16828 i7 = HEAP32[i6 >> 2] | 0; 16829 i5 = i2 + 44 | 0; 16830 if ((i7 | 0) != 0) { 16831 HEAP32[i7 + 12 >> 2] = HEAP32[i5 >> 2]; 16832 } 16833 i7 = HEAP32[i5 >> 2] | 0; 16834 if ((i7 | 0) != 0) { 16835 HEAP32[i7 + 8 >> 2] = HEAP32[i6 >> 2]; 16836 } 16837 i4 = i4 + 112 | 0; 16838 if ((i2 + 32 | 0) != (HEAP32[i4 >> 2] | 0)) { 16839 i8 = i1 + 76 | 0; 16840 i8 = HEAP32[i8 >> 2] | 0; 16841 __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i2, i8); 16842 i8 = i1 + 64 | 0; 16843 i7 = HEAP32[i8 >> 2] | 0; 16844 i7 = i7 + -1 | 0; 16845 HEAP32[i8 >> 2] = i7; 16846 STACKTOP = i3; 16847 return; 16848 } 16849 HEAP32[i4 >> 2] = HEAP32[i5 >> 2]; 16850 i8 = i1 + 76 | 0; 16851 i8 = HEAP32[i8 >> 2] | 0; 16852 __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i2, i8); 16853 i8 = i1 + 64 | 0; 16854 i7 = HEAP32[i8 >> 2] | 0; 16855 i7 = i7 + -1 | 0; 16856 HEAP32[i8 >> 2] = i7; 16857 STACKTOP = i3; 16858 return; 16859 } 16860 function __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib(i6, i3, i4, i8, i7) { 16861 i6 = i6 | 0; 16862 i3 = i3 | 0; 16863 i4 = i4 | 0; 16864 i8 = i8 | 0; 16865 i7 = i7 | 0; 16866 var i1 = 0, i2 = 0, i5 = 0, i9 = 0, i10 = 0; 16867 i1 = STACKTOP; 16868 if ((i6 | 0) == (HEAP32[i3 + 8 >> 2] | 0)) { 16869 if ((HEAP32[i3 + 4 >> 2] | 0) != (i4 | 0)) { 16870 STACKTOP = i1; 16871 return; 16872 } 16873 i2 = i3 + 28 | 0; 16874 if ((HEAP32[i2 >> 2] | 0) == 1) { 16875 STACKTOP = i1; 16876 return; 16877 } 16878 HEAP32[i2 >> 2] = i8; 16879 STACKTOP = i1; 16880 return; 16881 } 16882 if ((i6 | 0) != (HEAP32[i3 >> 2] | 0)) { 16883 i9 = HEAP32[i6 + 8 >> 2] | 0; 16884 FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[i9 >> 2] | 0) + 24 >> 2] & 3](i9, i3, i4, i8, i7); 16885 STACKTOP = i1; 16886 return; 16887 } 16888 if ((HEAP32[i3 + 16 >> 2] | 0) != (i4 | 0) ? (i5 = i3 + 20 | 0, (HEAP32[i5 >> 2] | 0) != (i4 | 0)) : 0) { 16889 HEAP32[i3 + 32 >> 2] = i8; 16890 i8 = i3 + 44 | 0; 16891 if ((HEAP32[i8 >> 2] | 0) == 4) { 16892 STACKTOP = i1; 16893 return; 16894 } 16895 i9 = i3 + 52 | 0; 16896 HEAP8[i9] = 0; 16897 i10 = i3 + 53 | 0; 16898 HEAP8[i10] = 0; 16899 i6 = HEAP32[i6 + 8 >> 2] | 0; 16900 FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i6 >> 2] | 0) + 20 >> 2] & 3](i6, i3, i4, i4, 1, i7); 16901 if ((HEAP8[i10] | 0) != 0) { 16902 if ((HEAP8[i9] | 0) == 0) { 16903 i6 = 1; 16904 i2 = 13; 16905 } 16906 } else { 16907 i6 = 0; 16908 i2 = 13; 16909 } 16910 do { 16911 if ((i2 | 0) == 13) { 16912 HEAP32[i5 >> 2] = i4; 16913 i10 = i3 + 40 | 0; 16914 HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + 1; 16915 if ((HEAP32[i3 + 36 >> 2] | 0) == 1 ? (HEAP32[i3 + 24 >> 2] | 0) == 2 : 0) { 16916 HEAP8[i3 + 54 | 0] = 1; 16917 if (i6) { 16918 break; 16919 } 16920 } else { 16921 i2 = 16; 16922 } 16923 if ((i2 | 0) == 16 ? i6 : 0) { 16924 break; 16925 } 16926 HEAP32[i8 >> 2] = 4; 16927 STACKTOP = i1; 16928 return; 16929 } 16930 } while (0); 16931 HEAP32[i8 >> 2] = 3; 16932 STACKTOP = i1; 16933 return; 16934 } 16935 if ((i8 | 0) != 1) { 16936 STACKTOP = i1; 16937 return; 16938 } 16939 HEAP32[i3 + 32 >> 2] = 1; 16940 STACKTOP = i1; 16941 return; 16942 } 16943 function __ZN16b2BlockAllocator8AllocateEi(i4, i2) { 16944 i4 = i4 | 0; 16945 i2 = i2 | 0; 16946 var i1 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0; 16947 i1 = STACKTOP; 16948 if ((i2 | 0) == 0) { 16949 i9 = 0; 16950 STACKTOP = i1; 16951 return i9 | 0; 16952 } 16953 if ((i2 | 0) <= 0) { 16954 ___assert_fail(1376, 1312, 104, 1392); 16955 } 16956 if ((i2 | 0) > 640) { 16957 i9 = __Z7b2Alloci(i2) | 0; 16958 STACKTOP = i1; 16959 return i9 | 0; 16960 } 16961 i9 = HEAP8[632 + i2 | 0] | 0; 16962 i5 = i9 & 255; 16963 if (!((i9 & 255) < 14)) { 16964 ___assert_fail(1408, 1312, 112, 1392); 16965 } 16966 i2 = i4 + (i5 << 2) + 12 | 0; 16967 i3 = HEAP32[i2 >> 2] | 0; 16968 if ((i3 | 0) != 0) { 16969 HEAP32[i2 >> 2] = HEAP32[i3 >> 2]; 16970 i9 = i3; 16971 STACKTOP = i1; 16972 return i9 | 0; 16973 } 16974 i3 = i4 + 4 | 0; 16975 i6 = HEAP32[i3 >> 2] | 0; 16976 i7 = i4 + 8 | 0; 16977 if ((i6 | 0) == (HEAP32[i7 >> 2] | 0)) { 16978 i9 = HEAP32[i4 >> 2] | 0; 16979 i6 = i6 + 128 | 0; 16980 HEAP32[i7 >> 2] = i6; 16981 i6 = __Z7b2Alloci(i6 << 3) | 0; 16982 HEAP32[i4 >> 2] = i6; 16983 _memcpy(i6 | 0, i9 | 0, HEAP32[i3 >> 2] << 3 | 0) | 0; 16984 _memset((HEAP32[i4 >> 2] | 0) + (HEAP32[i3 >> 2] << 3) | 0, 0, 1024) | 0; 16985 __Z6b2FreePv(i9); 16986 i6 = HEAP32[i3 >> 2] | 0; 16987 } 16988 i9 = HEAP32[i4 >> 2] | 0; 16989 i7 = __Z7b2Alloci(16384) | 0; 16990 i4 = i9 + (i6 << 3) + 4 | 0; 16991 HEAP32[i4 >> 2] = i7; 16992 i5 = HEAP32[576 + (i5 << 2) >> 2] | 0; 16993 HEAP32[i9 + (i6 << 3) >> 2] = i5; 16994 i6 = 16384 / (i5 | 0) | 0; 16995 if ((Math_imul(i6, i5) | 0) >= 16385) { 16996 ___assert_fail(1448, 1312, 140, 1392); 16997 } 16998 i6 = i6 + -1 | 0; 16999 if ((i6 | 0) > 0) { 17000 i9 = 0; 17001 while (1) { 17002 i8 = i9 + 1 | 0; 17003 HEAP32[i7 + (Math_imul(i9, i5) | 0) >> 2] = i7 + (Math_imul(i8, i5) | 0); 17004 i7 = HEAP32[i4 >> 2] | 0; 17005 if ((i8 | 0) == (i6 | 0)) { 17006 break; 17007 } else { 17008 i9 = i8; 17009 } 17010 } 17011 } 17012 HEAP32[i7 + (Math_imul(i6, i5) | 0) >> 2] = 0; 17013 HEAP32[i2 >> 2] = HEAP32[HEAP32[i4 >> 2] >> 2]; 17014 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1; 17015 i9 = HEAP32[i4 >> 2] | 0; 17016 STACKTOP = i1; 17017 return i9 | 0; 17018 } 17019 function __ZN9b2Contact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i4, i5, i1, i3, i6) { 17020 i4 = i4 | 0; 17021 i5 = i5 | 0; 17022 i1 = i1 | 0; 17023 i3 = i3 | 0; 17024 i6 = i6 | 0; 17025 var i2 = 0, i7 = 0, i8 = 0, i9 = 0; 17026 i2 = STACKTOP; 17027 if ((HEAP8[4200] | 0) == 0) { 17028 HEAP32[1002] = 3; 17029 HEAP32[4012 >> 2] = 3; 17030 HEAP8[4016 | 0] = 1; 17031 HEAP32[4104 >> 2] = 4; 17032 HEAP32[4108 >> 2] = 4; 17033 HEAP8[4112 | 0] = 1; 17034 HEAP32[4032 >> 2] = 4; 17035 HEAP32[4036 >> 2] = 4; 17036 HEAP8[4040 | 0] = 0; 17037 HEAP32[4128 >> 2] = 5; 17038 HEAP32[4132 >> 2] = 5; 17039 HEAP8[4136 | 0] = 1; 17040 HEAP32[4056 >> 2] = 6; 17041 HEAP32[4060 >> 2] = 6; 17042 HEAP8[4064 | 0] = 1; 17043 HEAP32[4020 >> 2] = 6; 17044 HEAP32[4024 >> 2] = 6; 17045 HEAP8[4028 | 0] = 0; 17046 HEAP32[4080 >> 2] = 7; 17047 HEAP32[4084 >> 2] = 7; 17048 HEAP8[4088 | 0] = 1; 17049 HEAP32[4116 >> 2] = 7; 17050 HEAP32[4120 >> 2] = 7; 17051 HEAP8[4124 | 0] = 0; 17052 HEAP32[4152 >> 2] = 8; 17053 HEAP32[4156 >> 2] = 8; 17054 HEAP8[4160 | 0] = 1; 17055 HEAP32[4044 >> 2] = 8; 17056 HEAP32[4048 >> 2] = 8; 17057 HEAP8[4052 | 0] = 0; 17058 HEAP32[4176 >> 2] = 9; 17059 HEAP32[4180 >> 2] = 9; 17060 HEAP8[4184 | 0] = 1; 17061 HEAP32[4140 >> 2] = 9; 17062 HEAP32[4144 >> 2] = 9; 17063 HEAP8[4148 | 0] = 0; 17064 HEAP8[4200] = 1; 17065 } 17066 i7 = HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 4 >> 2] | 0; 17067 i8 = HEAP32[(HEAP32[i1 + 12 >> 2] | 0) + 4 >> 2] | 0; 17068 if (!(i7 >>> 0 < 4)) { 17069 ___assert_fail(4208, 4256, 80, 4344); 17070 } 17071 if (!(i8 >>> 0 < 4)) { 17072 ___assert_fail(4296, 4256, 81, 4344); 17073 } 17074 i9 = HEAP32[4008 + (i7 * 48 | 0) + (i8 * 12 | 0) >> 2] | 0; 17075 if ((i9 | 0) == 0) { 17076 i9 = 0; 17077 STACKTOP = i2; 17078 return i9 | 0; 17079 } 17080 if ((HEAP8[4008 + (i7 * 48 | 0) + (i8 * 12 | 0) + 8 | 0] | 0) == 0) { 17081 i9 = FUNCTION_TABLE_iiiiii[i9 & 15](i1, i3, i4, i5, i6) | 0; 17082 STACKTOP = i2; 17083 return i9 | 0; 17084 } else { 17085 i9 = FUNCTION_TABLE_iiiiii[i9 & 15](i4, i5, i1, i3, i6) | 0; 17086 STACKTOP = i2; 17087 return i9 | 0; 17088 } 17089 return 0; 17090 } 17091 function __ZN13b2DynamicTree9MoveProxyEiRK6b2AABBRK6b2Vec2(i1, i2, i13, i9) { 17092 i1 = i1 | 0; 17093 i2 = i2 | 0; 17094 i13 = i13 | 0; 17095 i9 = i9 | 0; 17096 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; 17097 i4 = STACKTOP; 17098 if (!((i2 | 0) > -1)) { 17099 ___assert_fail(3072, 2944, 135, 3152); 17100 } 17101 if ((HEAP32[i1 + 12 >> 2] | 0) <= (i2 | 0)) { 17102 ___assert_fail(3072, 2944, 135, 3152); 17103 } 17104 i3 = i1 + 4 | 0; 17105 i12 = HEAP32[i3 >> 2] | 0; 17106 if (!((HEAP32[i12 + (i2 * 36 | 0) + 24 >> 2] | 0) == -1)) { 17107 ___assert_fail(3120, 2944, 137, 3152); 17108 } 17109 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) { 17110 i13 = 0; 17111 STACKTOP = i4; 17112 return i13 | 0; 17113 } 17114 __ZN13b2DynamicTree10RemoveLeafEi(i1, i2); 17115 i12 = i13; 17116 d6 = +HEAPF32[i12 >> 2]; 17117 d8 = +HEAPF32[i12 + 4 >> 2]; 17118 i13 = i13 + 8 | 0; 17119 d10 = +HEAPF32[i13 >> 2]; 17120 d6 = d6 + -.10000000149011612; 17121 d8 = d8 + -.10000000149011612; 17122 d10 = d10 + .10000000149011612; 17123 d5 = +HEAPF32[i13 + 4 >> 2] + .10000000149011612; 17124 d11 = +HEAPF32[i9 >> 2] * 2.0; 17125 d7 = +HEAPF32[i9 + 4 >> 2] * 2.0; 17126 if (d11 < 0.0) { 17127 d6 = d6 + d11; 17128 } else { 17129 d10 = d11 + d10; 17130 } 17131 if (d7 < 0.0) { 17132 d8 = d8 + d7; 17133 } else { 17134 d5 = d7 + d5; 17135 } 17136 i13 = HEAP32[i3 >> 2] | 0; 17137 d7 = +d6; 17138 d11 = +d8; 17139 i12 = i13 + (i2 * 36 | 0) | 0; 17140 HEAPF32[i12 >> 2] = d7; 17141 HEAPF32[i12 + 4 >> 2] = d11; 17142 d10 = +d10; 17143 d11 = +d5; 17144 i13 = i13 + (i2 * 36 | 0) + 8 | 0; 17145 HEAPF32[i13 >> 2] = d10; 17146 HEAPF32[i13 + 4 >> 2] = d11; 17147 __ZN13b2DynamicTree10InsertLeafEi(i1, i2); 17148 i13 = 1; 17149 STACKTOP = i4; 17150 return i13 | 0; 17151 } 17152 function __ZNK9b2Simplex16GetWitnessPointsEP6b2Vec2S1_(i1, i4, i5) { 17153 i1 = i1 | 0; 17154 i4 = i4 | 0; 17155 i5 = i5 | 0; 17156 var i2 = 0, i3 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, i9 = 0, i10 = 0, d11 = 0.0; 17157 i2 = STACKTOP; 17158 i3 = HEAP32[i1 + 108 >> 2] | 0; 17159 if ((i3 | 0) == 2) { 17160 i9 = i1 + 24 | 0; 17161 d7 = +HEAPF32[i9 >> 2]; 17162 i3 = i1 + 60 | 0; 17163 d8 = +HEAPF32[i3 >> 2]; 17164 d6 = +(d7 * +HEAPF32[i1 >> 2] + d8 * +HEAPF32[i1 + 36 >> 2]); 17165 d8 = +(d7 * +HEAPF32[i1 + 4 >> 2] + d8 * +HEAPF32[i1 + 40 >> 2]); 17166 HEAPF32[i4 >> 2] = d6; 17167 HEAPF32[i4 + 4 >> 2] = d8; 17168 d8 = +HEAPF32[i9 >> 2]; 17169 d6 = +HEAPF32[i3 >> 2]; 17170 d7 = +(d8 * +HEAPF32[i1 + 8 >> 2] + d6 * +HEAPF32[i1 + 44 >> 2]); 17171 d6 = +(d8 * +HEAPF32[i1 + 12 >> 2] + d6 * +HEAPF32[i1 + 48 >> 2]); 17172 HEAPF32[i5 >> 2] = d7; 17173 HEAPF32[i5 + 4 >> 2] = d6; 17174 STACKTOP = i2; 17175 return; 17176 } else if ((i3 | 0) == 1) { 17177 i10 = i1; 17178 i9 = HEAP32[i10 + 4 >> 2] | 0; 17179 i3 = i4; 17180 HEAP32[i3 >> 2] = HEAP32[i10 >> 2]; 17181 HEAP32[i3 + 4 >> 2] = i9; 17182 i3 = i1 + 8 | 0; 17183 i4 = HEAP32[i3 + 4 >> 2] | 0; 17184 i9 = i5; 17185 HEAP32[i9 >> 2] = HEAP32[i3 >> 2]; 17186 HEAP32[i9 + 4 >> 2] = i4; 17187 STACKTOP = i2; 17188 return; 17189 } else if ((i3 | 0) == 0) { 17190 ___assert_fail(2712, 2672, 217, 2752); 17191 } else if ((i3 | 0) == 3) { 17192 d11 = +HEAPF32[i1 + 24 >> 2]; 17193 d6 = +HEAPF32[i1 + 60 >> 2]; 17194 d8 = +HEAPF32[i1 + 96 >> 2]; 17195 d7 = +(d11 * +HEAPF32[i1 >> 2] + d6 * +HEAPF32[i1 + 36 >> 2] + d8 * +HEAPF32[i1 + 72 >> 2]); 17196 d8 = +(d11 * +HEAPF32[i1 + 4 >> 2] + d6 * +HEAPF32[i1 + 40 >> 2] + d8 * +HEAPF32[i1 + 76 >> 2]); 17197 i10 = i4; 17198 HEAPF32[i10 >> 2] = d7; 17199 HEAPF32[i10 + 4 >> 2] = d8; 17200 i10 = i5; 17201 HEAPF32[i10 >> 2] = d7; 17202 HEAPF32[i10 + 4 >> 2] = d8; 17203 STACKTOP = i2; 17204 return; 17205 } else { 17206 ___assert_fail(2712, 2672, 236, 2752); 17207 } 17208 } 17209 function __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i4, i3, i1) { 17210 i4 = i4 | 0; 17211 i3 = i3 | 0; 17212 i1 = i1 | 0; 17213 var i2 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0; 17214 i2 = STACKTOP; 17215 if (!((i1 | 0) > -1)) { 17216 ___assert_fail(6832, 6792, 89, 6872); 17217 } 17218 i5 = i4 + 16 | 0; 17219 if (((HEAP32[i5 >> 2] | 0) + -1 | 0) <= (i1 | 0)) { 17220 ___assert_fail(6832, 6792, 89, 6872); 17221 } 17222 HEAP32[i3 + 4 >> 2] = 1; 17223 HEAPF32[i3 + 8 >> 2] = +HEAPF32[i4 + 8 >> 2]; 17224 i6 = i4 + 12 | 0; 17225 i7 = (HEAP32[i6 >> 2] | 0) + (i1 << 3) | 0; 17226 i8 = HEAP32[i7 + 4 >> 2] | 0; 17227 i9 = i3 + 12 | 0; 17228 HEAP32[i9 >> 2] = HEAP32[i7 >> 2]; 17229 HEAP32[i9 + 4 >> 2] = i8; 17230 i9 = (HEAP32[i6 >> 2] | 0) + (i1 + 1 << 3) | 0; 17231 i8 = HEAP32[i9 + 4 >> 2] | 0; 17232 i7 = i3 + 20 | 0; 17233 HEAP32[i7 >> 2] = HEAP32[i9 >> 2]; 17234 HEAP32[i7 + 4 >> 2] = i8; 17235 i7 = i3 + 28 | 0; 17236 if ((i1 | 0) > 0) { 17237 i10 = (HEAP32[i6 >> 2] | 0) + (i1 + -1 << 3) | 0; 17238 i8 = HEAP32[i10 + 4 >> 2] | 0; 17239 i9 = i7; 17240 HEAP32[i9 >> 2] = HEAP32[i10 >> 2]; 17241 HEAP32[i9 + 4 >> 2] = i8; 17242 HEAP8[i3 + 44 | 0] = 1; 17243 } else { 17244 i8 = i4 + 20 | 0; 17245 i9 = HEAP32[i8 + 4 >> 2] | 0; 17246 i10 = i7; 17247 HEAP32[i10 >> 2] = HEAP32[i8 >> 2]; 17248 HEAP32[i10 + 4 >> 2] = i9; 17249 HEAP8[i3 + 44 | 0] = HEAP8[i4 + 36 | 0] | 0; 17250 } 17251 i7 = i3 + 36 | 0; 17252 if (((HEAP32[i5 >> 2] | 0) + -2 | 0) > (i1 | 0)) { 17253 i8 = (HEAP32[i6 >> 2] | 0) + (i1 + 2 << 3) | 0; 17254 i9 = HEAP32[i8 + 4 >> 2] | 0; 17255 i10 = i7; 17256 HEAP32[i10 >> 2] = HEAP32[i8 >> 2]; 17257 HEAP32[i10 + 4 >> 2] = i9; 17258 HEAP8[i3 + 45 | 0] = 1; 17259 STACKTOP = i2; 17260 return; 17261 } else { 17262 i8 = i4 + 28 | 0; 17263 i9 = HEAP32[i8 + 4 >> 2] | 0; 17264 i10 = i7; 17265 HEAP32[i10 >> 2] = HEAP32[i8 >> 2]; 17266 HEAP32[i10 + 4 >> 2] = i9; 17267 HEAP8[i3 + 45 | 0] = HEAP8[i4 + 37 | 0] | 0; 17268 STACKTOP = i2; 17269 return; 17270 } 17271 } 17272 function __ZN15b2DistanceProxy3SetEPK7b2Shapei(i3, i1, i5) { 17273 i3 = i3 | 0; 17274 i1 = i1 | 0; 17275 i5 = i5 | 0; 17276 var i2 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0; 17277 i2 = STACKTOP; 17278 i4 = HEAP32[i1 + 4 >> 2] | 0; 17279 if ((i4 | 0) == 1) { 17280 HEAP32[i3 + 16 >> 2] = i1 + 12; 17281 HEAP32[i3 + 20 >> 2] = 2; 17282 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2]; 17283 STACKTOP = i2; 17284 return; 17285 } else if ((i4 | 0) == 3) { 17286 if (!((i5 | 0) > -1)) { 17287 ___assert_fail(2632, 2672, 53, 2704); 17288 } 17289 i4 = i1 + 16 | 0; 17290 if ((HEAP32[i4 >> 2] | 0) <= (i5 | 0)) { 17291 ___assert_fail(2632, 2672, 53, 2704); 17292 } 17293 i7 = i1 + 12 | 0; 17294 i9 = (HEAP32[i7 >> 2] | 0) + (i5 << 3) | 0; 17295 i8 = HEAP32[i9 + 4 >> 2] | 0; 17296 i6 = i3; 17297 HEAP32[i6 >> 2] = HEAP32[i9 >> 2]; 17298 HEAP32[i6 + 4 >> 2] = i8; 17299 i6 = i5 + 1 | 0; 17300 i5 = i3 + 8 | 0; 17301 i7 = HEAP32[i7 >> 2] | 0; 17302 if ((i6 | 0) < (HEAP32[i4 >> 2] | 0)) { 17303 i7 = i7 + (i6 << 3) | 0; 17304 i8 = HEAP32[i7 + 4 >> 2] | 0; 17305 i9 = i5; 17306 HEAP32[i9 >> 2] = HEAP32[i7 >> 2]; 17307 HEAP32[i9 + 4 >> 2] = i8; 17308 } else { 17309 i8 = HEAP32[i7 + 4 >> 2] | 0; 17310 i9 = i5; 17311 HEAP32[i9 >> 2] = HEAP32[i7 >> 2]; 17312 HEAP32[i9 + 4 >> 2] = i8; 17313 } 17314 HEAP32[i3 + 16 >> 2] = i3; 17315 HEAP32[i3 + 20 >> 2] = 2; 17316 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2]; 17317 STACKTOP = i2; 17318 return; 17319 } else if ((i4 | 0) == 2) { 17320 HEAP32[i3 + 16 >> 2] = i1 + 20; 17321 HEAP32[i3 + 20 >> 2] = HEAP32[i1 + 148 >> 2]; 17322 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2]; 17323 STACKTOP = i2; 17324 return; 17325 } else if ((i4 | 0) == 0) { 17326 HEAP32[i3 + 16 >> 2] = i1 + 12; 17327 HEAP32[i3 + 20 >> 2] = 1; 17328 HEAPF32[i3 + 24 >> 2] = +HEAPF32[i1 + 8 >> 2]; 17329 STACKTOP = i2; 17330 return; 17331 } else { 17332 ___assert_fail(2712, 2672, 81, 2704); 17333 } 17334 } 17335 function __ZL16b2EdgeSeparationPK14b2PolygonShapeRK11b2TransformiS1_S4_(i2, i7, i4, i5, i6) { 17336 i2 = i2 | 0; 17337 i7 = i7 | 0; 17338 i4 = i4 | 0; 17339 i5 = i5 | 0; 17340 i6 = i6 | 0; 17341 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; 17342 i12 = STACKTOP; 17343 i13 = HEAP32[i5 + 148 >> 2] | 0; 17344 if (!((i4 | 0) > -1)) { 17345 ___assert_fail(5640, 5688, 32, 5752); 17346 } 17347 if ((HEAP32[i2 + 148 >> 2] | 0) <= (i4 | 0)) { 17348 ___assert_fail(5640, 5688, 32, 5752); 17349 } 17350 d11 = +HEAPF32[i7 + 12 >> 2]; 17351 d9 = +HEAPF32[i2 + (i4 << 3) + 84 >> 2]; 17352 d1 = +HEAPF32[i7 + 8 >> 2]; 17353 d3 = +HEAPF32[i2 + (i4 << 3) + 88 >> 2]; 17354 d8 = d11 * d9 - d1 * d3; 17355 d3 = d9 * d1 + d11 * d3; 17356 d9 = +HEAPF32[i6 + 12 >> 2]; 17357 d10 = +HEAPF32[i6 + 8 >> 2]; 17358 d16 = d9 * d8 + d10 * d3; 17359 d14 = d9 * d3 - d8 * d10; 17360 if ((i13 | 0) > 0) { 17361 i19 = 0; 17362 i20 = 0; 17363 d15 = 3.4028234663852886e+38; 17364 while (1) { 17365 d17 = d16 * +HEAPF32[i5 + (i19 << 3) + 20 >> 2] + d14 * +HEAPF32[i5 + (i19 << 3) + 24 >> 2]; 17366 i18 = d17 < d15; 17367 i20 = i18 ? i19 : i20; 17368 i19 = i19 + 1 | 0; 17369 if ((i19 | 0) == (i13 | 0)) { 17370 break; 17371 } else { 17372 d15 = i18 ? d17 : d15; 17373 } 17374 } 17375 } else { 17376 i20 = 0; 17377 } 17378 d16 = +HEAPF32[i2 + (i4 << 3) + 20 >> 2]; 17379 d17 = +HEAPF32[i2 + (i4 << 3) + 24 >> 2]; 17380 d14 = +HEAPF32[i5 + (i20 << 3) + 20 >> 2]; 17381 d15 = +HEAPF32[i5 + (i20 << 3) + 24 >> 2]; 17382 STACKTOP = i12; 17383 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]))); 17384 } 17385 function __Z4iterv() { 17386 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, d7 = 0.0; 17387 i1 = STACKTOP; 17388 STACKTOP = STACKTOP + 48 | 0; 17389 i2 = i1; 17390 i3 = i1 + 32 | 0; 17391 i4 = HEAP32[16] | 0; 17392 if ((i4 | 0) >= (HEAP32[4] | 0)) { 17393 HEAP32[16] = i4 + 1; 17394 __Z7measurePl(i3, HEAP32[8] | 0); 17395 d7 = +HEAPF32[i3 + 4 >> 2]; 17396 d6 = +(HEAP32[10] | 0) / 1.0e6 * 1.0e3; 17397 d5 = +(HEAP32[12] | 0) / 1.0e6 * 1.0e3; 17398 HEAPF64[tempDoublePtr >> 3] = +HEAPF32[i3 >> 2]; 17399 HEAP32[i2 >> 2] = HEAP32[tempDoublePtr >> 2]; 17400 HEAP32[i2 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2]; 17401 i4 = i2 + 8 | 0; 17402 HEAPF64[tempDoublePtr >> 3] = d7; 17403 HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2]; 17404 HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2]; 17405 i4 = i2 + 16 | 0; 17406 HEAPF64[tempDoublePtr >> 3] = d6; 17407 HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2]; 17408 HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2]; 17409 i4 = i2 + 24 | 0; 17410 HEAPF64[tempDoublePtr >> 3] = d5; 17411 HEAP32[i4 >> 2] = HEAP32[tempDoublePtr >> 2]; 17412 HEAP32[i4 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2]; 17413 _printf(96, i2 | 0) | 0; 17414 _emscripten_run_script(152); 17415 if ((HEAP32[18] | 0) == 0) { 17416 STACKTOP = i1; 17417 return; 17418 } 17419 _emscripten_cancel_main_loop(); 17420 STACKTOP = i1; 17421 return; 17422 } 17423 i3 = _clock() | 0; 17424 __ZN7b2World4StepEfii(HEAP32[6] | 0, .01666666753590107, 3, 3); 17425 i3 = (_clock() | 0) - i3 | 0; 17426 i2 = HEAP32[16] | 0; 17427 HEAP32[(HEAP32[8] | 0) + (i2 << 2) >> 2] = i3; 17428 if ((i3 | 0) < (HEAP32[10] | 0)) { 17429 HEAP32[10] = i3; 17430 } 17431 if ((i3 | 0) > (HEAP32[12] | 0)) { 17432 HEAP32[12] = i3; 17433 } 17434 HEAP32[16] = i2 + 1; 17435 STACKTOP = i1; 17436 return; 17437 } 17438 function __ZN13b2DynamicTree12AllocateNodeEv(i5) { 17439 i5 = i5 | 0; 17440 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0; 17441 i1 = STACKTOP; 17442 i2 = i5 + 16 | 0; 17443 i3 = HEAP32[i2 >> 2] | 0; 17444 if ((i3 | 0) == -1) { 17445 i4 = i5 + 8 | 0; 17446 i6 = HEAP32[i4 >> 2] | 0; 17447 i3 = i5 + 12 | 0; 17448 if ((i6 | 0) != (HEAP32[i3 >> 2] | 0)) { 17449 ___assert_fail(2912, 2944, 61, 2984); 17450 } 17451 i5 = i5 + 4 | 0; 17452 i7 = HEAP32[i5 >> 2] | 0; 17453 HEAP32[i3 >> 2] = i6 << 1; 17454 i6 = __Z7b2Alloci(i6 * 72 | 0) | 0; 17455 HEAP32[i5 >> 2] = i6; 17456 _memcpy(i6 | 0, i7 | 0, (HEAP32[i4 >> 2] | 0) * 36 | 0) | 0; 17457 __Z6b2FreePv(i7); 17458 i6 = HEAP32[i4 >> 2] | 0; 17459 i7 = (HEAP32[i3 >> 2] | 0) + -1 | 0; 17460 i5 = HEAP32[i5 >> 2] | 0; 17461 if ((i6 | 0) < (i7 | 0)) { 17462 i7 = i6; 17463 while (1) { 17464 i6 = i7 + 1 | 0; 17465 HEAP32[i5 + (i7 * 36 | 0) + 20 >> 2] = i6; 17466 HEAP32[i5 + (i7 * 36 | 0) + 32 >> 2] = -1; 17467 i7 = (HEAP32[i3 >> 2] | 0) + -1 | 0; 17468 if ((i6 | 0) < (i7 | 0)) { 17469 i7 = i6; 17470 } else { 17471 break; 17472 } 17473 } 17474 } 17475 HEAP32[i5 + (i7 * 36 | 0) + 20 >> 2] = -1; 17476 HEAP32[i5 + (((HEAP32[i3 >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1; 17477 i3 = HEAP32[i4 >> 2] | 0; 17478 HEAP32[i2 >> 2] = i3; 17479 } else { 17480 i4 = i5 + 8 | 0; 17481 i5 = HEAP32[i5 + 4 >> 2] | 0; 17482 } 17483 i7 = i5 + (i3 * 36 | 0) + 20 | 0; 17484 HEAP32[i2 >> 2] = HEAP32[i7 >> 2]; 17485 HEAP32[i7 >> 2] = -1; 17486 HEAP32[i5 + (i3 * 36 | 0) + 24 >> 2] = -1; 17487 HEAP32[i5 + (i3 * 36 | 0) + 28 >> 2] = -1; 17488 HEAP32[i5 + (i3 * 36 | 0) + 32 >> 2] = 0; 17489 HEAP32[i5 + (i3 * 36 | 0) + 16 >> 2] = 0; 17490 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1; 17491 STACKTOP = i1; 17492 return i3 | 0; 17493 } 17494 function __ZN9b2Fixture6CreateEP16b2BlockAllocatorP6b2BodyPK12b2FixtureDef(i1, i5, i4, i3) { 17495 i1 = i1 | 0; 17496 i5 = i5 | 0; 17497 i4 = i4 | 0; 17498 i3 = i3 | 0; 17499 var i2 = 0, i6 = 0, i7 = 0, d8 = 0.0; 17500 i2 = STACKTOP; 17501 HEAP32[i1 + 40 >> 2] = HEAP32[i3 + 4 >> 2]; 17502 HEAPF32[i1 + 16 >> 2] = +HEAPF32[i3 + 8 >> 2]; 17503 HEAPF32[i1 + 20 >> 2] = +HEAPF32[i3 + 12 >> 2]; 17504 HEAP32[i1 + 8 >> 2] = i4; 17505 HEAP32[i1 + 4 >> 2] = 0; 17506 i4 = i1 + 32 | 0; 17507 i6 = i3 + 22 | 0; 17508 HEAP16[i4 + 0 >> 1] = HEAP16[i6 + 0 >> 1] | 0; 17509 HEAP16[i4 + 2 >> 1] = HEAP16[i6 + 2 >> 1] | 0; 17510 HEAP16[i4 + 4 >> 1] = HEAP16[i6 + 4 >> 1] | 0; 17511 HEAP8[i1 + 38 | 0] = HEAP8[i3 + 20 | 0] | 0; 17512 i4 = HEAP32[i3 >> 2] | 0; 17513 i4 = FUNCTION_TABLE_iii[HEAP32[(HEAP32[i4 >> 2] | 0) + 8 >> 2] & 3](i4, i5) | 0; 17514 HEAP32[i1 + 12 >> 2] = i4; 17515 i4 = FUNCTION_TABLE_ii[HEAP32[(HEAP32[i4 >> 2] | 0) + 12 >> 2] & 3](i4) | 0; 17516 i6 = __ZN16b2BlockAllocator8AllocateEi(i5, i4 * 28 | 0) | 0; 17517 i5 = i1 + 24 | 0; 17518 HEAP32[i5 >> 2] = i6; 17519 if ((i4 | 0) > 0) { 17520 i7 = 0; 17521 } else { 17522 i7 = i1 + 28 | 0; 17523 HEAP32[i7 >> 2] = 0; 17524 i7 = i3 + 16 | 0; 17525 d8 = +HEAPF32[i7 >> 2]; 17526 HEAPF32[i1 >> 2] = d8; 17527 STACKTOP = i2; 17528 return; 17529 } 17530 do { 17531 HEAP32[i6 + (i7 * 28 | 0) + 16 >> 2] = 0; 17532 i6 = HEAP32[i5 >> 2] | 0; 17533 HEAP32[i6 + (i7 * 28 | 0) + 24 >> 2] = -1; 17534 i7 = i7 + 1 | 0; 17535 } while ((i7 | 0) != (i4 | 0)); 17536 i7 = i1 + 28 | 0; 17537 HEAP32[i7 >> 2] = 0; 17538 i7 = i3 + 16 | 0; 17539 d8 = +HEAPF32[i7 >> 2]; 17540 HEAPF32[i1 >> 2] = d8; 17541 STACKTOP = i2; 17542 return; 17543 } 17544 function __Z19b2ClipSegmentToLineP12b2ClipVertexPKS_RK6b2Vec2fi(i4, i1, i5, d9, i2) { 17545 i4 = i4 | 0; 17546 i1 = i1 | 0; 17547 i5 = i5 | 0; 17548 d9 = +d9; 17549 i2 = i2 | 0; 17550 var i3 = 0, i6 = 0, d7 = 0.0, i8 = 0, i10 = 0, d11 = 0.0, d12 = 0.0, i13 = 0; 17551 i3 = STACKTOP; 17552 d12 = +HEAPF32[i5 >> 2]; 17553 d11 = +HEAPF32[i5 + 4 >> 2]; 17554 i5 = i1 + 4 | 0; 17555 d7 = d12 * +HEAPF32[i1 >> 2] + d11 * +HEAPF32[i5 >> 2] - d9; 17556 i6 = i1 + 12 | 0; 17557 i8 = i1 + 16 | 0; 17558 d9 = d12 * +HEAPF32[i6 >> 2] + d11 * +HEAPF32[i8 >> 2] - d9; 17559 if (!(d7 <= 0.0)) { 17560 i10 = 0; 17561 } else { 17562 HEAP32[i4 + 0 >> 2] = HEAP32[i1 + 0 >> 2]; 17563 HEAP32[i4 + 4 >> 2] = HEAP32[i1 + 4 >> 2]; 17564 HEAP32[i4 + 8 >> 2] = HEAP32[i1 + 8 >> 2]; 17565 i10 = 1; 17566 } 17567 if (d9 <= 0.0) { 17568 i13 = i10 + 1 | 0; 17569 i10 = i4 + (i10 * 12 | 0) | 0; 17570 HEAP32[i10 + 0 >> 2] = HEAP32[i6 + 0 >> 2]; 17571 HEAP32[i10 + 4 >> 2] = HEAP32[i6 + 4 >> 2]; 17572 HEAP32[i10 + 8 >> 2] = HEAP32[i6 + 8 >> 2]; 17573 i10 = i13; 17574 } 17575 if (!(d7 * d9 < 0.0)) { 17576 i13 = i10; 17577 STACKTOP = i3; 17578 return i13 | 0; 17579 } 17580 d9 = d7 / (d7 - d9); 17581 d11 = +HEAPF32[i1 >> 2]; 17582 d12 = +HEAPF32[i5 >> 2]; 17583 d11 = +(d11 + d9 * (+HEAPF32[i6 >> 2] - d11)); 17584 d12 = +(d12 + d9 * (+HEAPF32[i8 >> 2] - d12)); 17585 i13 = i4 + (i10 * 12 | 0) | 0; 17586 HEAPF32[i13 >> 2] = d11; 17587 HEAPF32[i13 + 4 >> 2] = d12; 17588 i13 = i4 + (i10 * 12 | 0) + 8 | 0; 17589 HEAP8[i13] = i2; 17590 HEAP8[i13 + 1 | 0] = HEAP8[i1 + 9 | 0] | 0; 17591 HEAP8[i13 + 2 | 0] = 0; 17592 HEAP8[i13 + 3 | 0] = 1; 17593 i13 = i10 + 1 | 0; 17594 STACKTOP = i3; 17595 return i13 | 0; 17596 } 17597 function __Z16b2CollideCirclesP10b2ManifoldPK13b2CircleShapeRK11b2TransformS3_S6_(i1, i7, i8, i6, i9) { 17598 i1 = i1 | 0; 17599 i7 = i7 | 0; 17600 i8 = i8 | 0; 17601 i6 = i6 | 0; 17602 i9 = i9 | 0; 17603 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; 17604 i2 = STACKTOP; 17605 i4 = i1 + 60 | 0; 17606 HEAP32[i4 >> 2] = 0; 17607 i3 = i7 + 12 | 0; 17608 d10 = +HEAPF32[i8 + 12 >> 2]; 17609 d14 = +HEAPF32[i3 >> 2]; 17610 d13 = +HEAPF32[i8 + 8 >> 2]; 17611 d11 = +HEAPF32[i7 + 16 >> 2]; 17612 i5 = i6 + 12 | 0; 17613 d16 = +HEAPF32[i9 + 12 >> 2]; 17614 d18 = +HEAPF32[i5 >> 2]; 17615 d17 = +HEAPF32[i9 + 8 >> 2]; 17616 d15 = +HEAPF32[i6 + 16 >> 2]; 17617 d12 = +HEAPF32[i9 >> 2] + (d16 * d18 - d17 * d15) - (+HEAPF32[i8 >> 2] + (d10 * d14 - d13 * d11)); 17618 d11 = d18 * d17 + d16 * d15 + +HEAPF32[i9 + 4 >> 2] - (d14 * d13 + d10 * d11 + +HEAPF32[i8 + 4 >> 2]); 17619 d10 = +HEAPF32[i7 + 8 >> 2] + +HEAPF32[i6 + 8 >> 2]; 17620 if (d12 * d12 + d11 * d11 > d10 * d10) { 17621 STACKTOP = i2; 17622 return; 17623 } 17624 HEAP32[i1 + 56 >> 2] = 0; 17625 i9 = i3; 17626 i8 = HEAP32[i9 + 4 >> 2] | 0; 17627 i7 = i1 + 48 | 0; 17628 HEAP32[i7 >> 2] = HEAP32[i9 >> 2]; 17629 HEAP32[i7 + 4 >> 2] = i8; 17630 HEAPF32[i1 + 40 >> 2] = 0.0; 17631 HEAPF32[i1 + 44 >> 2] = 0.0; 17632 HEAP32[i4 >> 2] = 1; 17633 i7 = i5; 17634 i8 = HEAP32[i7 + 4 >> 2] | 0; 17635 i9 = i1; 17636 HEAP32[i9 >> 2] = HEAP32[i7 >> 2]; 17637 HEAP32[i9 + 4 >> 2] = i8; 17638 HEAP32[i1 + 16 >> 2] = 0; 17639 STACKTOP = i2; 17640 return; 17641 } 17642 function __ZNK14b2PolygonShape11ComputeAABBEP6b2AABBRK11b2Transformi(i1, i2, i7, i3) { 17643 i1 = i1 | 0; 17644 i2 = i2 | 0; 17645 i7 = i7 | 0; 17646 i3 = i3 | 0; 17647 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; 17648 i3 = STACKTOP; 17649 d4 = +HEAPF32[i7 + 12 >> 2]; 17650 d15 = +HEAPF32[i1 + 20 >> 2]; 17651 d5 = +HEAPF32[i7 + 8 >> 2]; 17652 d12 = +HEAPF32[i1 + 24 >> 2]; 17653 d6 = +HEAPF32[i7 >> 2]; 17654 d9 = d6 + (d4 * d15 - d5 * d12); 17655 d8 = +HEAPF32[i7 + 4 >> 2]; 17656 d12 = d15 * d5 + d4 * d12 + d8; 17657 i7 = HEAP32[i1 + 148 >> 2] | 0; 17658 if ((i7 | 0) > 1) { 17659 d10 = d9; 17660 d11 = d12; 17661 i13 = 1; 17662 do { 17663 d16 = +HEAPF32[i1 + (i13 << 3) + 20 >> 2]; 17664 d14 = +HEAPF32[i1 + (i13 << 3) + 24 >> 2]; 17665 d15 = d6 + (d4 * d16 - d5 * d14); 17666 d14 = d16 * d5 + d4 * d14 + d8; 17667 d10 = d10 < d15 ? d10 : d15; 17668 d11 = d11 < d14 ? d11 : d14; 17669 d9 = d9 > d15 ? d9 : d15; 17670 d12 = d12 > d14 ? d12 : d14; 17671 i13 = i13 + 1 | 0; 17672 } while ((i13 | 0) < (i7 | 0)); 17673 } else { 17674 d11 = d12; 17675 d10 = d9; 17676 } 17677 d16 = +HEAPF32[i1 + 8 >> 2]; 17678 d14 = +(d10 - d16); 17679 d15 = +(d11 - d16); 17680 i13 = i2; 17681 HEAPF32[i13 >> 2] = d14; 17682 HEAPF32[i13 + 4 >> 2] = d15; 17683 d15 = +(d9 + d16); 17684 d16 = +(d12 + d16); 17685 i13 = i2 + 8 | 0; 17686 HEAPF32[i13 >> 2] = d15; 17687 HEAPF32[i13 + 4 >> 2] = d16; 17688 STACKTOP = i3; 17689 return; 17690 } 17691 function __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib(i5, i1, i4, i6, i3, i7) { 17692 i5 = i5 | 0; 17693 i1 = i1 | 0; 17694 i4 = i4 | 0; 17695 i6 = i6 | 0; 17696 i3 = i3 | 0; 17697 i7 = i7 | 0; 17698 var i2 = 0; 17699 i2 = STACKTOP; 17700 if ((i5 | 0) != (HEAP32[i1 + 8 >> 2] | 0)) { 17701 i5 = HEAP32[i5 + 8 >> 2] | 0; 17702 FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[i5 >> 2] | 0) + 20 >> 2] & 3](i5, i1, i4, i6, i3, i7); 17703 STACKTOP = i2; 17704 return; 17705 } 17706 HEAP8[i1 + 53 | 0] = 1; 17707 if ((HEAP32[i1 + 4 >> 2] | 0) != (i6 | 0)) { 17708 STACKTOP = i2; 17709 return; 17710 } 17711 HEAP8[i1 + 52 | 0] = 1; 17712 i5 = i1 + 16 | 0; 17713 i6 = HEAP32[i5 >> 2] | 0; 17714 if ((i6 | 0) == 0) { 17715 HEAP32[i5 >> 2] = i4; 17716 HEAP32[i1 + 24 >> 2] = i3; 17717 HEAP32[i1 + 36 >> 2] = 1; 17718 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i3 | 0) == 1)) { 17719 STACKTOP = i2; 17720 return; 17721 } 17722 HEAP8[i1 + 54 | 0] = 1; 17723 STACKTOP = i2; 17724 return; 17725 } 17726 if ((i6 | 0) != (i4 | 0)) { 17727 i7 = i1 + 36 | 0; 17728 HEAP32[i7 >> 2] = (HEAP32[i7 >> 2] | 0) + 1; 17729 HEAP8[i1 + 54 | 0] = 1; 17730 STACKTOP = i2; 17731 return; 17732 } 17733 i4 = i1 + 24 | 0; 17734 i5 = HEAP32[i4 >> 2] | 0; 17735 if ((i5 | 0) == 2) { 17736 HEAP32[i4 >> 2] = i3; 17737 } else { 17738 i3 = i5; 17739 } 17740 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i3 | 0) == 1)) { 17741 STACKTOP = i2; 17742 return; 17743 } 17744 HEAP8[i1 + 54 | 0] = 1; 17745 STACKTOP = i2; 17746 return; 17747 } 17748 function __ZN6b2Body13CreateFixtureEPK12b2FixtureDef(i1, i5) { 17749 i1 = i1 | 0; 17750 i5 = i5 | 0; 17751 var i2 = 0, i3 = 0, i4 = 0, i6 = 0; 17752 i3 = STACKTOP; 17753 i2 = i1 + 88 | 0; 17754 i4 = HEAP32[i2 >> 2] | 0; 17755 if ((HEAP32[i4 + 102868 >> 2] & 2 | 0) != 0) { 17756 ___assert_fail(1776, 1520, 153, 1808); 17757 } 17758 i6 = __ZN16b2BlockAllocator8AllocateEi(i4, 44) | 0; 17759 if ((i6 | 0) == 0) { 17760 i6 = 0; 17761 } else { 17762 __ZN9b2FixtureC2Ev(i6); 17763 } 17764 __ZN9b2Fixture6CreateEP16b2BlockAllocatorP6b2BodyPK12b2FixtureDef(i6, i4, i1, i5); 17765 if (!((HEAP16[i1 + 4 >> 1] & 32) == 0)) { 17766 __ZN9b2Fixture13CreateProxiesEP12b2BroadPhaseRK11b2Transform(i6, (HEAP32[i2 >> 2] | 0) + 102872 | 0, i1 + 12 | 0); 17767 } 17768 i5 = i1 + 100 | 0; 17769 HEAP32[i6 + 4 >> 2] = HEAP32[i5 >> 2]; 17770 HEAP32[i5 >> 2] = i6; 17771 i5 = i1 + 104 | 0; 17772 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1; 17773 HEAP32[i6 + 8 >> 2] = i1; 17774 if (!(+HEAPF32[i6 >> 2] > 0.0)) { 17775 i5 = HEAP32[i2 >> 2] | 0; 17776 i5 = i5 + 102868 | 0; 17777 i4 = HEAP32[i5 >> 2] | 0; 17778 i4 = i4 | 1; 17779 HEAP32[i5 >> 2] = i4; 17780 STACKTOP = i3; 17781 return i6 | 0; 17782 } 17783 __ZN6b2Body13ResetMassDataEv(i1); 17784 i5 = HEAP32[i2 >> 2] | 0; 17785 i5 = i5 + 102868 | 0; 17786 i4 = HEAP32[i5 >> 2] | 0; 17787 i4 = i4 | 1; 17788 HEAP32[i5 >> 2] = i4; 17789 STACKTOP = i3; 17790 return i6 | 0; 17791 } 17792 function __Z13b2TestOverlapPK7b2ShapeiS1_iRK11b2TransformS4_(i6, i5, i4, i3, i2, i1) { 17793 i6 = i6 | 0; 17794 i5 = i5 | 0; 17795 i4 = i4 | 0; 17796 i3 = i3 | 0; 17797 i2 = i2 | 0; 17798 i1 = i1 | 0; 17799 var i7 = 0, i8 = 0, i9 = 0, i10 = 0; 17800 i8 = STACKTOP; 17801 STACKTOP = STACKTOP + 128 | 0; 17802 i9 = i8 + 36 | 0; 17803 i10 = i8 + 24 | 0; 17804 i7 = i8; 17805 HEAP32[i9 + 16 >> 2] = 0; 17806 HEAP32[i9 + 20 >> 2] = 0; 17807 HEAPF32[i9 + 24 >> 2] = 0.0; 17808 HEAP32[i9 + 44 >> 2] = 0; 17809 HEAP32[i9 + 48 >> 2] = 0; 17810 HEAPF32[i9 + 52 >> 2] = 0.0; 17811 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i9, i6, i5); 17812 __ZN15b2DistanceProxy3SetEPK7b2Shapei(i9 + 28 | 0, i4, i3); 17813 i6 = i9 + 56 | 0; 17814 HEAP32[i6 + 0 >> 2] = HEAP32[i2 + 0 >> 2]; 17815 HEAP32[i6 + 4 >> 2] = HEAP32[i2 + 4 >> 2]; 17816 HEAP32[i6 + 8 >> 2] = HEAP32[i2 + 8 >> 2]; 17817 HEAP32[i6 + 12 >> 2] = HEAP32[i2 + 12 >> 2]; 17818 i6 = i9 + 72 | 0; 17819 HEAP32[i6 + 0 >> 2] = HEAP32[i1 + 0 >> 2]; 17820 HEAP32[i6 + 4 >> 2] = HEAP32[i1 + 4 >> 2]; 17821 HEAP32[i6 + 8 >> 2] = HEAP32[i1 + 8 >> 2]; 17822 HEAP32[i6 + 12 >> 2] = HEAP32[i1 + 12 >> 2]; 17823 HEAP8[i9 + 88 | 0] = 1; 17824 HEAP16[i10 + 4 >> 1] = 0; 17825 __Z10b2DistanceP16b2DistanceOutputP14b2SimplexCachePK15b2DistanceInput(i7, i10, i9); 17826 STACKTOP = i8; 17827 return +HEAPF32[i7 + 16 >> 2] < 11920928955078125.0e-22 | 0; 17828 } 17829 function __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib(i6, i1, i4, i5, i2, i3) { 17830 i6 = i6 | 0; 17831 i1 = i1 | 0; 17832 i4 = i4 | 0; 17833 i5 = i5 | 0; 17834 i2 = i2 | 0; 17835 i3 = i3 | 0; 17836 i3 = STACKTOP; 17837 if ((HEAP32[i1 + 8 >> 2] | 0) != (i6 | 0)) { 17838 STACKTOP = i3; 17839 return; 17840 } 17841 HEAP8[i1 + 53 | 0] = 1; 17842 if ((HEAP32[i1 + 4 >> 2] | 0) != (i5 | 0)) { 17843 STACKTOP = i3; 17844 return; 17845 } 17846 HEAP8[i1 + 52 | 0] = 1; 17847 i5 = i1 + 16 | 0; 17848 i6 = HEAP32[i5 >> 2] | 0; 17849 if ((i6 | 0) == 0) { 17850 HEAP32[i5 >> 2] = i4; 17851 HEAP32[i1 + 24 >> 2] = i2; 17852 HEAP32[i1 + 36 >> 2] = 1; 17853 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i2 | 0) == 1)) { 17854 STACKTOP = i3; 17855 return; 17856 } 17857 HEAP8[i1 + 54 | 0] = 1; 17858 STACKTOP = i3; 17859 return; 17860 } 17861 if ((i6 | 0) != (i4 | 0)) { 17862 i6 = i1 + 36 | 0; 17863 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1; 17864 HEAP8[i1 + 54 | 0] = 1; 17865 STACKTOP = i3; 17866 return; 17867 } 17868 i4 = i1 + 24 | 0; 17869 i5 = HEAP32[i4 >> 2] | 0; 17870 if ((i5 | 0) == 2) { 17871 HEAP32[i4 >> 2] = i2; 17872 } else { 17873 i2 = i5; 17874 } 17875 if (!((HEAP32[i1 + 48 >> 2] | 0) == 1 & (i2 | 0) == 1)) { 17876 STACKTOP = i3; 17877 return; 17878 } 17879 HEAP8[i1 + 54 | 0] = 1; 17880 STACKTOP = i3; 17881 return; 17882 } 17883 function __ZNK11b2EdgeShape5CloneEP16b2BlockAllocator(i1, i3) { 17884 i1 = i1 | 0; 17885 i3 = i3 | 0; 17886 var i2 = 0, i4 = 0, i5 = 0, i6 = 0; 17887 i2 = STACKTOP; 17888 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 48) | 0; 17889 if ((i3 | 0) == 0) { 17890 i3 = 0; 17891 } else { 17892 HEAP32[i3 >> 2] = 240; 17893 HEAP32[i3 + 4 >> 2] = 1; 17894 HEAPF32[i3 + 8 >> 2] = .009999999776482582; 17895 i4 = i3 + 28 | 0; 17896 HEAP32[i4 + 0 >> 2] = 0; 17897 HEAP32[i4 + 4 >> 2] = 0; 17898 HEAP32[i4 + 8 >> 2] = 0; 17899 HEAP32[i4 + 12 >> 2] = 0; 17900 HEAP16[i4 + 16 >> 1] = 0; 17901 } 17902 i6 = i1 + 4 | 0; 17903 i5 = HEAP32[i6 + 4 >> 2] | 0; 17904 i4 = i3 + 4 | 0; 17905 HEAP32[i4 >> 2] = HEAP32[i6 >> 2]; 17906 HEAP32[i4 + 4 >> 2] = i5; 17907 i4 = i3 + 12 | 0; 17908 i1 = i1 + 12 | 0; 17909 HEAP32[i4 + 0 >> 2] = HEAP32[i1 + 0 >> 2]; 17910 HEAP32[i4 + 4 >> 2] = HEAP32[i1 + 4 >> 2]; 17911 HEAP32[i4 + 8 >> 2] = HEAP32[i1 + 8 >> 2]; 17912 HEAP32[i4 + 12 >> 2] = HEAP32[i1 + 12 >> 2]; 17913 HEAP32[i4 + 16 >> 2] = HEAP32[i1 + 16 >> 2]; 17914 HEAP32[i4 + 20 >> 2] = HEAP32[i1 + 20 >> 2]; 17915 HEAP32[i4 + 24 >> 2] = HEAP32[i1 + 24 >> 2]; 17916 HEAP32[i4 + 28 >> 2] = HEAP32[i1 + 28 >> 2]; 17917 HEAP16[i4 + 32 >> 1] = HEAP16[i1 + 32 >> 1] | 0; 17918 STACKTOP = i2; 17919 return i3 | 0; 17920 } 17921 function __ZN7b2WorldC2ERK6b2Vec2(i1, i2) { 17922 i1 = i1 | 0; 17923 i2 = i2 | 0; 17924 var i3 = 0, i4 = 0, i5 = 0, i6 = 0; 17925 i3 = STACKTOP; 17926 __ZN16b2BlockAllocatorC2Ev(i1); 17927 __ZN16b2StackAllocatorC2Ev(i1 + 68 | 0); 17928 __ZN16b2ContactManagerC2Ev(i1 + 102872 | 0); 17929 i6 = i1 + 102968 | 0; 17930 HEAP32[i1 + 102980 >> 2] = 0; 17931 HEAP32[i1 + 102984 >> 2] = 0; 17932 i4 = i1 + 102952 | 0; 17933 i5 = i1 + 102992 | 0; 17934 HEAP32[i4 + 0 >> 2] = 0; 17935 HEAP32[i4 + 4 >> 2] = 0; 17936 HEAP32[i4 + 8 >> 2] = 0; 17937 HEAP32[i4 + 12 >> 2] = 0; 17938 HEAP8[i5] = 1; 17939 HEAP8[i1 + 102993 | 0] = 1; 17940 HEAP8[i1 + 102994 | 0] = 0; 17941 HEAP8[i1 + 102995 | 0] = 1; 17942 HEAP8[i1 + 102976 | 0] = 1; 17943 i5 = i2; 17944 i4 = HEAP32[i5 + 4 >> 2] | 0; 17945 i2 = i6; 17946 HEAP32[i2 >> 2] = HEAP32[i5 >> 2]; 17947 HEAP32[i2 + 4 >> 2] = i4; 17948 HEAP32[i1 + 102868 >> 2] = 4; 17949 HEAPF32[i1 + 102988 >> 2] = 0.0; 17950 HEAP32[i1 + 102948 >> 2] = i1; 17951 i2 = i1 + 102996 | 0; 17952 HEAP32[i2 + 0 >> 2] = 0; 17953 HEAP32[i2 + 4 >> 2] = 0; 17954 HEAP32[i2 + 8 >> 2] = 0; 17955 HEAP32[i2 + 12 >> 2] = 0; 17956 HEAP32[i2 + 16 >> 2] = 0; 17957 HEAP32[i2 + 20 >> 2] = 0; 17958 HEAP32[i2 + 24 >> 2] = 0; 17959 HEAP32[i2 + 28 >> 2] = 0; 17960 STACKTOP = i3; 17961 return; 17962 } 17963 function __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib(i6, i3, i4, i1, i2) { 17964 i6 = i6 | 0; 17965 i3 = i3 | 0; 17966 i4 = i4 | 0; 17967 i1 = i1 | 0; 17968 i2 = i2 | 0; 17969 var i5 = 0; 17970 i2 = STACKTOP; 17971 if ((HEAP32[i3 + 8 >> 2] | 0) == (i6 | 0)) { 17972 if ((HEAP32[i3 + 4 >> 2] | 0) != (i4 | 0)) { 17973 STACKTOP = i2; 17974 return; 17975 } 17976 i3 = i3 + 28 | 0; 17977 if ((HEAP32[i3 >> 2] | 0) == 1) { 17978 STACKTOP = i2; 17979 return; 17980 } 17981 HEAP32[i3 >> 2] = i1; 17982 STACKTOP = i2; 17983 return; 17984 } 17985 if ((HEAP32[i3 >> 2] | 0) != (i6 | 0)) { 17986 STACKTOP = i2; 17987 return; 17988 } 17989 if ((HEAP32[i3 + 16 >> 2] | 0) != (i4 | 0) ? (i5 = i3 + 20 | 0, (HEAP32[i5 >> 2] | 0) != (i4 | 0)) : 0) { 17990 HEAP32[i3 + 32 >> 2] = i1; 17991 HEAP32[i5 >> 2] = i4; 17992 i6 = i3 + 40 | 0; 17993 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1; 17994 if ((HEAP32[i3 + 36 >> 2] | 0) == 1 ? (HEAP32[i3 + 24 >> 2] | 0) == 2 : 0) { 17995 HEAP8[i3 + 54 | 0] = 1; 17996 } 17997 HEAP32[i3 + 44 >> 2] = 4; 17998 STACKTOP = i2; 17999 return; 18000 } 18001 if ((i1 | 0) != 1) { 18002 STACKTOP = i2; 18003 return; 18004 } 18005 HEAP32[i3 + 32 >> 2] = 1; 18006 STACKTOP = i2; 18007 return; 18008 } 18009 function __ZN9b2Contact7DestroyEPS_P16b2BlockAllocator(i1, i2) { 18010 i1 = i1 | 0; 18011 i2 = i2 | 0; 18012 var i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0; 18013 i3 = STACKTOP; 18014 if ((HEAP8[4200] | 0) == 0) { 18015 ___assert_fail(4352, 4256, 103, 4376); 18016 } 18017 i4 = HEAP32[i1 + 48 >> 2] | 0; 18018 if ((HEAP32[i1 + 124 >> 2] | 0) > 0) { 18019 i7 = HEAP32[i4 + 8 >> 2] | 0; 18020 i6 = i7 + 4 | 0; 18021 i5 = HEAPU16[i6 >> 1] | 0; 18022 if ((i5 & 2 | 0) == 0) { 18023 HEAP16[i6 >> 1] = i5 | 2; 18024 HEAPF32[i7 + 144 >> 2] = 0.0; 18025 } 18026 i7 = HEAP32[i1 + 52 >> 2] | 0; 18027 i6 = HEAP32[i7 + 8 >> 2] | 0; 18028 i5 = i6 + 4 | 0; 18029 i8 = HEAPU16[i5 >> 1] | 0; 18030 if ((i8 & 2 | 0) == 0) { 18031 HEAP16[i5 >> 1] = i8 | 2; 18032 HEAPF32[i6 + 144 >> 2] = 0.0; 18033 } 18034 } else { 18035 i7 = HEAP32[i1 + 52 >> 2] | 0; 18036 } 18037 i4 = HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 4 >> 2] | 0; 18038 i5 = HEAP32[(HEAP32[i7 + 12 >> 2] | 0) + 4 >> 2] | 0; 18039 if ((i4 | 0) > -1 & (i5 | 0) < 4) { 18040 FUNCTION_TABLE_vii[HEAP32[4008 + (i4 * 48 | 0) + (i5 * 12 | 0) + 4 >> 2] & 15](i1, i2); 18041 STACKTOP = i3; 18042 return; 18043 } else { 18044 ___assert_fail(4384, 4256, 114, 4376); 18045 } 18046 } 18047 function __ZN9b2Fixture13CreateProxiesEP12b2BroadPhaseRK11b2Transform(i5, i4, i1) { 18048 i5 = i5 | 0; 18049 i4 = i4 | 0; 18050 i1 = i1 | 0; 18051 var i2 = 0, i3 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0; 18052 i2 = STACKTOP; 18053 i3 = i5 + 28 | 0; 18054 if ((HEAP32[i3 >> 2] | 0) != 0) { 18055 ___assert_fail(2088, 2112, 124, 2144); 18056 } 18057 i6 = i5 + 12 | 0; 18058 i8 = HEAP32[i6 >> 2] | 0; 18059 i8 = FUNCTION_TABLE_ii[HEAP32[(HEAP32[i8 >> 2] | 0) + 12 >> 2] & 3](i8) | 0; 18060 HEAP32[i3 >> 2] = i8; 18061 if ((i8 | 0) <= 0) { 18062 STACKTOP = i2; 18063 return; 18064 } 18065 i7 = i5 + 24 | 0; 18066 i8 = 0; 18067 do { 18068 i9 = HEAP32[i7 >> 2] | 0; 18069 i10 = i9 + (i8 * 28 | 0) | 0; 18070 i11 = HEAP32[i6 >> 2] | 0; 18071 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i11 >> 2] | 0) + 24 >> 2] & 15](i11, i10, i1, i8); 18072 HEAP32[i9 + (i8 * 28 | 0) + 24 >> 2] = __ZN12b2BroadPhase11CreateProxyERK6b2AABBPv(i4, i10, i10) | 0; 18073 HEAP32[i9 + (i8 * 28 | 0) + 16 >> 2] = i5; 18074 HEAP32[i9 + (i8 * 28 | 0) + 20 >> 2] = i8; 18075 i8 = i8 + 1 | 0; 18076 } while ((i8 | 0) < (HEAP32[i3 >> 2] | 0)); 18077 STACKTOP = i2; 18078 return; 18079 } 18080 function __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv(i1, i5, i4) { 18081 i1 = i1 | 0; 18082 i5 = i5 | 0; 18083 i4 = i4 | 0; 18084 var i2 = 0, i3 = 0, i6 = 0, i7 = 0; 18085 i2 = STACKTOP; 18086 STACKTOP = STACKTOP + 64 | 0; 18087 i3 = i2; 18088 if ((i1 | 0) == (i5 | 0)) { 18089 i7 = 1; 18090 STACKTOP = i2; 18091 return i7 | 0; 18092 } 18093 if ((i5 | 0) == 0) { 18094 i7 = 0; 18095 STACKTOP = i2; 18096 return i7 | 0; 18097 } 18098 i5 = ___dynamic_cast(i5, 6952, 7008, 0) | 0; 18099 if ((i5 | 0) == 0) { 18100 i7 = 0; 18101 STACKTOP = i2; 18102 return i7 | 0; 18103 } 18104 i7 = i3 + 0 | 0; 18105 i6 = i7 + 56 | 0; 18106 do { 18107 HEAP32[i7 >> 2] = 0; 18108 i7 = i7 + 4 | 0; 18109 } while ((i7 | 0) < (i6 | 0)); 18110 HEAP32[i3 >> 2] = i5; 18111 HEAP32[i3 + 8 >> 2] = i1; 18112 HEAP32[i3 + 12 >> 2] = -1; 18113 HEAP32[i3 + 48 >> 2] = 1; 18114 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i5 >> 2] | 0) + 28 >> 2] & 15](i5, i3, HEAP32[i4 >> 2] | 0, 1); 18115 if ((HEAP32[i3 + 24 >> 2] | 0) != 1) { 18116 i7 = 0; 18117 STACKTOP = i2; 18118 return i7 | 0; 18119 } 18120 HEAP32[i4 >> 2] = HEAP32[i3 + 16 >> 2]; 18121 i7 = 1; 18122 STACKTOP = i2; 18123 return i7 | 0; 18124 } 18125 function __ZN8b2IslandC2EiiiP16b2StackAllocatorP17b2ContactListener(i1, i4, i3, i2, i5, i6) { 18126 i1 = i1 | 0; 18127 i4 = i4 | 0; 18128 i3 = i3 | 0; 18129 i2 = i2 | 0; 18130 i5 = i5 | 0; 18131 i6 = i6 | 0; 18132 var i7 = 0, i8 = 0; 18133 i7 = STACKTOP; 18134 i8 = i1 + 40 | 0; 18135 HEAP32[i8 >> 2] = i4; 18136 HEAP32[i1 + 44 >> 2] = i3; 18137 HEAP32[i1 + 48 >> 2] = i2; 18138 HEAP32[i1 + 28 >> 2] = 0; 18139 HEAP32[i1 + 36 >> 2] = 0; 18140 HEAP32[i1 + 32 >> 2] = 0; 18141 HEAP32[i1 >> 2] = i5; 18142 HEAP32[i1 + 4 >> 2] = i6; 18143 HEAP32[i1 + 8 >> 2] = __ZN16b2StackAllocator8AllocateEi(i5, i4 << 2) | 0; 18144 HEAP32[i1 + 12 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, i3 << 2) | 0; 18145 HEAP32[i1 + 16 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, i2 << 2) | 0; 18146 HEAP32[i1 + 24 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, (HEAP32[i8 >> 2] | 0) * 12 | 0) | 0; 18147 HEAP32[i1 + 20 >> 2] = __ZN16b2StackAllocator8AllocateEi(HEAP32[i1 >> 2] | 0, (HEAP32[i8 >> 2] | 0) * 12 | 0) | 0; 18148 STACKTOP = i7; 18149 return; 18150 } 18151 function __ZNK11b2EdgeShape11ComputeAABBEP6b2AABBRK11b2Transformi(i8, i1, i10, i2) { 18152 i8 = i8 | 0; 18153 i1 = i1 | 0; 18154 i10 = i10 | 0; 18155 i2 = i2 | 0; 18156 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; 18157 i2 = STACKTOP; 18158 d7 = +HEAPF32[i10 + 12 >> 2]; 18159 d9 = +HEAPF32[i8 + 12 >> 2]; 18160 d11 = +HEAPF32[i10 + 8 >> 2]; 18161 d3 = +HEAPF32[i8 + 16 >> 2]; 18162 d6 = +HEAPF32[i10 >> 2]; 18163 d5 = d6 + (d7 * d9 - d11 * d3); 18164 d12 = +HEAPF32[i10 + 4 >> 2]; 18165 d3 = d9 * d11 + d7 * d3 + d12; 18166 d9 = +HEAPF32[i8 + 20 >> 2]; 18167 d4 = +HEAPF32[i8 + 24 >> 2]; 18168 d6 = d6 + (d7 * d9 - d11 * d4); 18169 d4 = d12 + (d11 * d9 + d7 * d4); 18170 d7 = +HEAPF32[i8 + 8 >> 2]; 18171 d9 = +((d5 < d6 ? d5 : d6) - d7); 18172 d12 = +((d3 < d4 ? d3 : d4) - d7); 18173 i10 = i1; 18174 HEAPF32[i10 >> 2] = d9; 18175 HEAPF32[i10 + 4 >> 2] = d12; 18176 d5 = +(d7 + (d5 > d6 ? d5 : d6)); 18177 d12 = +(d7 + (d3 > d4 ? d3 : d4)); 18178 i10 = i1 + 8 | 0; 18179 HEAPF32[i10 >> 2] = d5; 18180 HEAPF32[i10 + 4 >> 2] = d12; 18181 STACKTOP = i2; 18182 return; 18183 } 18184 function __ZNK14b2PolygonShape9TestPointERK11b2TransformRK6b2Vec2(i2, i3, i6) { 18185 i2 = i2 | 0; 18186 i3 = i3 | 0; 18187 i6 = i6 | 0; 18188 var i1 = 0, d4 = 0.0, d5 = 0.0, i7 = 0, d8 = 0.0, d9 = 0.0, d10 = 0.0; 18189 i1 = STACKTOP; 18190 d8 = +HEAPF32[i6 >> 2] - +HEAPF32[i3 >> 2]; 18191 d9 = +HEAPF32[i6 + 4 >> 2] - +HEAPF32[i3 + 4 >> 2]; 18192 d10 = +HEAPF32[i3 + 12 >> 2]; 18193 d5 = +HEAPF32[i3 + 8 >> 2]; 18194 d4 = d8 * d10 + d9 * d5; 18195 d5 = d10 * d9 - d8 * d5; 18196 i3 = HEAP32[i2 + 148 >> 2] | 0; 18197 if ((i3 | 0) > 0) { 18198 i6 = 0; 18199 } else { 18200 i7 = 1; 18201 STACKTOP = i1; 18202 return i7 | 0; 18203 } 18204 while (1) { 18205 i7 = i6 + 1 | 0; 18206 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) { 18207 i3 = 0; 18208 i2 = 4; 18209 break; 18210 } 18211 if ((i7 | 0) < (i3 | 0)) { 18212 i6 = i7; 18213 } else { 18214 i3 = 1; 18215 i2 = 4; 18216 break; 18217 } 18218 } 18219 if ((i2 | 0) == 4) { 18220 STACKTOP = i1; 18221 return i3 | 0; 18222 } 18223 return 0; 18224 } 18225 function __ZN16b2StackAllocator8AllocateEi(i4, i5) { 18226 i4 = i4 | 0; 18227 i5 = i5 | 0; 18228 var i1 = 0, i2 = 0, i3 = 0, i6 = 0, i7 = 0, i8 = 0; 18229 i2 = STACKTOP; 18230 i3 = i4 + 102796 | 0; 18231 i6 = HEAP32[i3 >> 2] | 0; 18232 if ((i6 | 0) >= 32) { 18233 ___assert_fail(3896, 3808, 38, 3936); 18234 } 18235 i1 = i4 + (i6 * 12 | 0) + 102412 | 0; 18236 HEAP32[i4 + (i6 * 12 | 0) + 102416 >> 2] = i5; 18237 i7 = i4 + 102400 | 0; 18238 i8 = HEAP32[i7 >> 2] | 0; 18239 if ((i8 + i5 | 0) > 102400) { 18240 HEAP32[i1 >> 2] = __Z7b2Alloci(i5) | 0; 18241 HEAP8[i4 + (i6 * 12 | 0) + 102420 | 0] = 1; 18242 } else { 18243 HEAP32[i1 >> 2] = i4 + i8; 18244 HEAP8[i4 + (i6 * 12 | 0) + 102420 | 0] = 0; 18245 HEAP32[i7 >> 2] = (HEAP32[i7 >> 2] | 0) + i5; 18246 } 18247 i6 = i4 + 102404 | 0; 18248 i5 = (HEAP32[i6 >> 2] | 0) + i5 | 0; 18249 HEAP32[i6 >> 2] = i5; 18250 i4 = i4 + 102408 | 0; 18251 i6 = HEAP32[i4 >> 2] | 0; 18252 HEAP32[i4 >> 2] = (i6 | 0) > (i5 | 0) ? i6 : i5; 18253 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1; 18254 STACKTOP = i2; 18255 return HEAP32[i1 >> 2] | 0; 18256 } 18257 function __ZN12b2BroadPhase13QueryCallbackEi(i5, i1) { 18258 i5 = i5 | 0; 18259 i1 = i1 | 0; 18260 var i2 = 0, i3 = 0, i4 = 0, i6 = 0, i7 = 0, i8 = 0; 18261 i2 = STACKTOP; 18262 i4 = i5 + 56 | 0; 18263 i7 = HEAP32[i4 >> 2] | 0; 18264 if ((i7 | 0) == (i1 | 0)) { 18265 STACKTOP = i2; 18266 return 1; 18267 } 18268 i3 = i5 + 52 | 0; 18269 i6 = HEAP32[i3 >> 2] | 0; 18270 i8 = i5 + 48 | 0; 18271 i5 = i5 + 44 | 0; 18272 if ((i6 | 0) == (HEAP32[i8 >> 2] | 0)) { 18273 i7 = HEAP32[i5 >> 2] | 0; 18274 HEAP32[i8 >> 2] = i6 << 1; 18275 i6 = __Z7b2Alloci(i6 * 24 | 0) | 0; 18276 HEAP32[i5 >> 2] = i6; 18277 _memcpy(i6 | 0, i7 | 0, (HEAP32[i3 >> 2] | 0) * 12 | 0) | 0; 18278 __Z6b2FreePv(i7); 18279 i7 = HEAP32[i4 >> 2] | 0; 18280 i6 = HEAP32[i3 >> 2] | 0; 18281 } 18282 i5 = HEAP32[i5 >> 2] | 0; 18283 HEAP32[i5 + (i6 * 12 | 0) >> 2] = (i7 | 0) > (i1 | 0) ? i1 : i7; 18284 i4 = HEAP32[i4 >> 2] | 0; 18285 HEAP32[i5 + ((HEAP32[i3 >> 2] | 0) * 12 | 0) + 4 >> 2] = (i4 | 0) < (i1 | 0) ? i1 : i4; 18286 HEAP32[i3 >> 2] = (HEAP32[i3 >> 2] | 0) + 1; 18287 STACKTOP = i2; 18288 return 1; 18289 } 18290 function __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi(i5, i4, i3, i1) { 18291 i5 = i5 | 0; 18292 i4 = i4 | 0; 18293 i3 = i3 | 0; 18294 i1 = i1 | 0; 18295 var i2 = 0, i6 = 0; 18296 i2 = STACKTOP; 18297 if ((i5 | 0) != (HEAP32[i4 + 8 >> 2] | 0)) { 18298 i6 = HEAP32[i5 + 8 >> 2] | 0; 18299 FUNCTION_TABLE_viiii[HEAP32[(HEAP32[i6 >> 2] | 0) + 28 >> 2] & 15](i6, i4, i3, i1); 18300 STACKTOP = i2; 18301 return; 18302 } 18303 i5 = i4 + 16 | 0; 18304 i6 = HEAP32[i5 >> 2] | 0; 18305 if ((i6 | 0) == 0) { 18306 HEAP32[i5 >> 2] = i3; 18307 HEAP32[i4 + 24 >> 2] = i1; 18308 HEAP32[i4 + 36 >> 2] = 1; 18309 STACKTOP = i2; 18310 return; 18311 } 18312 if ((i6 | 0) != (i3 | 0)) { 18313 i6 = i4 + 36 | 0; 18314 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1; 18315 HEAP32[i4 + 24 >> 2] = 2; 18316 HEAP8[i4 + 54 | 0] = 1; 18317 STACKTOP = i2; 18318 return; 18319 } 18320 i3 = i4 + 24 | 0; 18321 if ((HEAP32[i3 >> 2] | 0) != 2) { 18322 STACKTOP = i2; 18323 return; 18324 } 18325 HEAP32[i3 >> 2] = i1; 18326 STACKTOP = i2; 18327 return; 18328 } 18329 function __ZN6b2Body19SynchronizeFixturesEv(i5) { 18330 i5 = i5 | 0; 18331 var i1 = 0, i2 = 0, i3 = 0, i4 = 0, d6 = 0.0, d7 = 0.0, d8 = 0.0, d9 = 0.0, d10 = 0.0; 18332 i1 = STACKTOP; 18333 STACKTOP = STACKTOP + 16 | 0; 18334 i3 = i1; 18335 d8 = +HEAPF32[i5 + 52 >> 2]; 18336 d9 = +Math_sin(+d8); 18337 HEAPF32[i3 + 8 >> 2] = d9; 18338 d8 = +Math_cos(+d8); 18339 HEAPF32[i3 + 12 >> 2] = d8; 18340 d10 = +HEAPF32[i5 + 28 >> 2]; 18341 d6 = +HEAPF32[i5 + 32 >> 2]; 18342 d7 = +(+HEAPF32[i5 + 36 >> 2] - (d8 * d10 - d9 * d6)); 18343 d6 = +(+HEAPF32[i5 + 40 >> 2] - (d10 * d9 + d8 * d6)); 18344 i2 = i3; 18345 HEAPF32[i2 >> 2] = d7; 18346 HEAPF32[i2 + 4 >> 2] = d6; 18347 i2 = (HEAP32[i5 + 88 >> 2] | 0) + 102872 | 0; 18348 i4 = HEAP32[i5 + 100 >> 2] | 0; 18349 if ((i4 | 0) == 0) { 18350 STACKTOP = i1; 18351 return; 18352 } 18353 i5 = i5 + 12 | 0; 18354 do { 18355 __ZN9b2Fixture11SynchronizeEP12b2BroadPhaseRK11b2TransformS4_(i4, i2, i3, i5); 18356 i4 = HEAP32[i4 + 4 >> 2] | 0; 18357 } while ((i4 | 0) != 0); 18358 STACKTOP = i1; 18359 return; 18360 } 18361 function __ZN13b2DynamicTreeC2Ev(i1) { 18362 i1 = i1 | 0; 18363 var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0; 18364 i4 = STACKTOP; 18365 HEAP32[i1 >> 2] = -1; 18366 i3 = i1 + 12 | 0; 18367 HEAP32[i3 >> 2] = 16; 18368 HEAP32[i1 + 8 >> 2] = 0; 18369 i6 = __Z7b2Alloci(576) | 0; 18370 i2 = i1 + 4 | 0; 18371 HEAP32[i2 >> 2] = i6; 18372 _memset(i6 | 0, 0, (HEAP32[i3 >> 2] | 0) * 36 | 0) | 0; 18373 i6 = (HEAP32[i3 >> 2] | 0) + -1 | 0; 18374 i2 = HEAP32[i2 >> 2] | 0; 18375 if ((i6 | 0) > 0) { 18376 i6 = 0; 18377 while (1) { 18378 i5 = i6 + 1 | 0; 18379 HEAP32[i2 + (i6 * 36 | 0) + 20 >> 2] = i5; 18380 HEAP32[i2 + (i6 * 36 | 0) + 32 >> 2] = -1; 18381 i6 = (HEAP32[i3 >> 2] | 0) + -1 | 0; 18382 if ((i5 | 0) < (i6 | 0)) { 18383 i6 = i5; 18384 } else { 18385 break; 18386 } 18387 } 18388 } 18389 HEAP32[i2 + (i6 * 36 | 0) + 20 >> 2] = -1; 18390 HEAP32[i2 + (((HEAP32[i3 >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1; 18391 HEAP32[i1 + 16 >> 2] = 0; 18392 HEAP32[i1 + 20 >> 2] = 0; 18393 HEAP32[i1 + 24 >> 2] = 0; 18394 STACKTOP = i4; 18395 return; 18396 } 18397 function __Z7measurePl(i1, i9) { 18398 i1 = i1 | 0; 18399 i9 = i9 | 0; 18400 var i2 = 0, i3 = 0, i4 = 0, d5 = 0.0, d6 = 0.0, i7 = 0, d8 = 0.0, i10 = 0, d11 = 0.0; 18401 i2 = STACKTOP; 18402 i3 = HEAP32[4] | 0; 18403 i4 = STACKTOP; 18404 STACKTOP = STACKTOP + ((4 * i3 | 0) + 15 & -16) | 0; 18405 i7 = (i3 | 0) > 0; 18406 if (i7) { 18407 i10 = 0; 18408 d6 = 0.0; 18409 do { 18410 d8 = +(HEAP32[i9 + (i10 << 2) >> 2] | 0) / 1.0e6 * 1.0e3; 18411 HEAPF32[i4 + (i10 << 2) >> 2] = d8; 18412 d6 = d6 + d8; 18413 i10 = i10 + 1 | 0; 18414 } while ((i10 | 0) < (i3 | 0)); 18415 d5 = +(i3 | 0); 18416 d6 = d6 / d5; 18417 HEAPF32[i1 >> 2] = d6; 18418 if (i7) { 18419 i7 = 0; 18420 d8 = 0.0; 18421 do { 18422 d11 = +HEAPF32[i4 + (i7 << 2) >> 2] - d6; 18423 d8 = d8 + d11 * d11; 18424 i7 = i7 + 1 | 0; 18425 } while ((i7 | 0) < (i3 | 0)); 18426 } else { 18427 d8 = 0.0; 18428 } 18429 } else { 18430 d5 = +(i3 | 0); 18431 HEAPF32[i1 >> 2] = 0.0 / d5; 18432 d8 = 0.0; 18433 } 18434 HEAPF32[i1 + 4 >> 2] = +Math_sqrt(+(d8 / d5)); 18435 STACKTOP = i2; 18436 return; 18437 } 18438 function __ZN13b2DynamicTree11CreateProxyERK6b2AABBPv(i1, i3, i2) { 18439 i1 = i1 | 0; 18440 i3 = i3 | 0; 18441 i2 = i2 | 0; 18442 var i4 = 0, i5 = 0, i6 = 0, d7 = 0.0, d8 = 0.0, i9 = 0; 18443 i5 = STACKTOP; 18444 i4 = __ZN13b2DynamicTree12AllocateNodeEv(i1) | 0; 18445 i6 = i1 + 4 | 0; 18446 d7 = +(+HEAPF32[i3 >> 2] + -.10000000149011612); 18447 d8 = +(+HEAPF32[i3 + 4 >> 2] + -.10000000149011612); 18448 i9 = (HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) | 0; 18449 HEAPF32[i9 >> 2] = d7; 18450 HEAPF32[i9 + 4 >> 2] = d8; 18451 d8 = +(+HEAPF32[i3 + 8 >> 2] + .10000000149011612); 18452 d7 = +(+HEAPF32[i3 + 12 >> 2] + .10000000149011612); 18453 i3 = (HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 8 | 0; 18454 HEAPF32[i3 >> 2] = d8; 18455 HEAPF32[i3 + 4 >> 2] = d7; 18456 HEAP32[(HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 16 >> 2] = i2; 18457 HEAP32[(HEAP32[i6 >> 2] | 0) + (i4 * 36 | 0) + 32 >> 2] = 0; 18458 __ZN13b2DynamicTree10InsertLeafEi(i1, i4); 18459 STACKTOP = i5; 18460 return i4 | 0; 18461 } 18462 function __ZN16b2BlockAllocatorC2Ev(i3) { 18463 i3 = i3 | 0; 18464 var i1 = 0, i2 = 0, i4 = 0, i5 = 0; 18465 i2 = STACKTOP; 18466 i4 = i3 + 8 | 0; 18467 HEAP32[i4 >> 2] = 128; 18468 HEAP32[i3 + 4 >> 2] = 0; 18469 i5 = __Z7b2Alloci(1024) | 0; 18470 HEAP32[i3 >> 2] = i5; 18471 _memset(i5 | 0, 0, HEAP32[i4 >> 2] << 3 | 0) | 0; 18472 i4 = i3 + 12 | 0; 18473 i3 = i4 + 56 | 0; 18474 do { 18475 HEAP32[i4 >> 2] = 0; 18476 i4 = i4 + 4 | 0; 18477 } while ((i4 | 0) < (i3 | 0)); 18478 if ((HEAP8[1280] | 0) == 0) { 18479 i3 = 1; 18480 i4 = 0; 18481 } else { 18482 STACKTOP = i2; 18483 return; 18484 } 18485 do { 18486 if ((i4 | 0) >= 14) { 18487 i1 = 3; 18488 break; 18489 } 18490 if ((i3 | 0) > (HEAP32[576 + (i4 << 2) >> 2] | 0)) { 18491 i4 = i4 + 1 | 0; 18492 HEAP8[632 + i3 | 0] = i4; 18493 } else { 18494 HEAP8[632 + i3 | 0] = i4; 18495 } 18496 i3 = i3 + 1 | 0; 18497 } while ((i3 | 0) < 641); 18498 if ((i1 | 0) == 3) { 18499 ___assert_fail(1288, 1312, 73, 1352); 18500 } 18501 HEAP8[1280] = 1; 18502 STACKTOP = i2; 18503 return; 18504 } 18505 function __ZN24b2ChainAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) { 18506 i2 = i2 | 0; 18507 i4 = i4 | 0; 18508 i3 = i3 | 0; 18509 i1 = i1 | 0; 18510 var i5 = 0, i6 = 0, i7 = 0, i8 = 0; 18511 i5 = STACKTOP; 18512 STACKTOP = STACKTOP + 48 | 0; 18513 i6 = i5; 18514 i7 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0; 18515 HEAP32[i6 >> 2] = 240; 18516 HEAP32[i6 + 4 >> 2] = 1; 18517 HEAPF32[i6 + 8 >> 2] = .009999999776482582; 18518 i8 = i6 + 28 | 0; 18519 HEAP32[i8 + 0 >> 2] = 0; 18520 HEAP32[i8 + 4 >> 2] = 0; 18521 HEAP32[i8 + 8 >> 2] = 0; 18522 HEAP32[i8 + 12 >> 2] = 0; 18523 HEAP16[i8 + 16 >> 1] = 0; 18524 __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i7, i6, HEAP32[i2 + 56 >> 2] | 0); 18525 __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS6_(i4, i6, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1); 18526 STACKTOP = i5; 18527 return; 18528 } 18529 function __ZN23b2ChainAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) { 18530 i2 = i2 | 0; 18531 i4 = i4 | 0; 18532 i3 = i3 | 0; 18533 i1 = i1 | 0; 18534 var i5 = 0, i6 = 0, i7 = 0, i8 = 0; 18535 i5 = STACKTOP; 18536 STACKTOP = STACKTOP + 48 | 0; 18537 i6 = i5; 18538 i7 = HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0; 18539 HEAP32[i6 >> 2] = 240; 18540 HEAP32[i6 + 4 >> 2] = 1; 18541 HEAPF32[i6 + 8 >> 2] = .009999999776482582; 18542 i8 = i6 + 28 | 0; 18543 HEAP32[i8 + 0 >> 2] = 0; 18544 HEAP32[i8 + 4 >> 2] = 0; 18545 HEAP32[i8 + 8 >> 2] = 0; 18546 HEAP32[i8 + 12 >> 2] = 0; 18547 HEAP16[i8 + 16 >> 1] = 0; 18548 __ZNK12b2ChainShape12GetChildEdgeEP11b2EdgeShapei(i7, i6, HEAP32[i2 + 56 >> 2] | 0); 18549 __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2CircleShapeS6_(i4, i6, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1); 18550 STACKTOP = i5; 18551 return; 18552 } 18553 function __ZN15b2ContactSolver13StoreImpulsesEv(i4) { 18554 i4 = i4 | 0; 18555 var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0; 18556 i1 = STACKTOP; 18557 i2 = HEAP32[i4 + 48 >> 2] | 0; 18558 if ((i2 | 0) <= 0) { 18559 STACKTOP = i1; 18560 return; 18561 } 18562 i3 = HEAP32[i4 + 40 >> 2] | 0; 18563 i4 = HEAP32[i4 + 44 >> 2] | 0; 18564 i5 = 0; 18565 do { 18566 i6 = HEAP32[i4 + (HEAP32[i3 + (i5 * 152 | 0) + 148 >> 2] << 2) >> 2] | 0; 18567 i7 = HEAP32[i3 + (i5 * 152 | 0) + 144 >> 2] | 0; 18568 if ((i7 | 0) > 0) { 18569 i8 = 0; 18570 do { 18571 HEAPF32[i6 + (i8 * 20 | 0) + 72 >> 2] = +HEAPF32[i3 + (i5 * 152 | 0) + (i8 * 36 | 0) + 16 >> 2]; 18572 HEAPF32[i6 + (i8 * 20 | 0) + 76 >> 2] = +HEAPF32[i3 + (i5 * 152 | 0) + (i8 * 36 | 0) + 20 >> 2]; 18573 i8 = i8 + 1 | 0; 18574 } while ((i8 | 0) < (i7 | 0)); 18575 } 18576 i5 = i5 + 1 | 0; 18577 } while ((i5 | 0) < (i2 | 0)); 18578 STACKTOP = i1; 18579 return; 18580 } 18581 function __ZN16b2StackAllocator4FreeEPv(i1, i5) { 18582 i1 = i1 | 0; 18583 i5 = i5 | 0; 18584 var i2 = 0, i3 = 0, i4 = 0, i6 = 0; 18585 i3 = STACKTOP; 18586 i2 = i1 + 102796 | 0; 18587 i4 = HEAP32[i2 >> 2] | 0; 18588 if ((i4 | 0) <= 0) { 18589 ___assert_fail(3952, 3808, 63, 3976); 18590 } 18591 i6 = i4 + -1 | 0; 18592 if ((HEAP32[i1 + (i6 * 12 | 0) + 102412 >> 2] | 0) != (i5 | 0)) { 18593 ___assert_fail(3984, 3808, 65, 3976); 18594 } 18595 if ((HEAP8[i1 + (i6 * 12 | 0) + 102420 | 0] | 0) == 0) { 18596 i5 = i1 + (i6 * 12 | 0) + 102416 | 0; 18597 i6 = i1 + 102400 | 0; 18598 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) - (HEAP32[i5 >> 2] | 0); 18599 } else { 18600 __Z6b2FreePv(i5); 18601 i5 = i1 + (i6 * 12 | 0) + 102416 | 0; 18602 i4 = HEAP32[i2 >> 2] | 0; 18603 } 18604 i6 = i1 + 102404 | 0; 18605 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) - (HEAP32[i5 >> 2] | 0); 18606 HEAP32[i2 >> 2] = i4 + -1; 18607 STACKTOP = i3; 18608 return; 18609 } 18610 function __ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi(i5, i4, i3, i2) { 18611 i5 = i5 | 0; 18612 i4 = i4 | 0; 18613 i3 = i3 | 0; 18614 i2 = i2 | 0; 18615 var i1 = 0, i6 = 0; 18616 i1 = STACKTOP; 18617 if ((HEAP32[i4 + 8 >> 2] | 0) != (i5 | 0)) { 18618 STACKTOP = i1; 18619 return; 18620 } 18621 i5 = i4 + 16 | 0; 18622 i6 = HEAP32[i5 >> 2] | 0; 18623 if ((i6 | 0) == 0) { 18624 HEAP32[i5 >> 2] = i3; 18625 HEAP32[i4 + 24 >> 2] = i2; 18626 HEAP32[i4 + 36 >> 2] = 1; 18627 STACKTOP = i1; 18628 return; 18629 } 18630 if ((i6 | 0) != (i3 | 0)) { 18631 i6 = i4 + 36 | 0; 18632 HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + 1; 18633 HEAP32[i4 + 24 >> 2] = 2; 18634 HEAP8[i4 + 54 | 0] = 1; 18635 STACKTOP = i1; 18636 return; 18637 } 18638 i3 = i4 + 24 | 0; 18639 if ((HEAP32[i3 >> 2] | 0) != 2) { 18640 STACKTOP = i1; 18641 return; 18642 } 18643 HEAP32[i3 >> 2] = i2; 18644 STACKTOP = i1; 18645 return; 18646 } 18647 function __ZN12b2BroadPhase11CreateProxyERK6b2AABBPv(i2, i4, i3) { 18648 i2 = i2 | 0; 18649 i4 = i4 | 0; 18650 i3 = i3 | 0; 18651 var i1 = 0, i5 = 0, i6 = 0, i7 = 0; 18652 i1 = STACKTOP; 18653 i3 = __ZN13b2DynamicTree11CreateProxyERK6b2AABBPv(i2, i4, i3) | 0; 18654 i4 = i2 + 28 | 0; 18655 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1; 18656 i4 = i2 + 40 | 0; 18657 i5 = HEAP32[i4 >> 2] | 0; 18658 i6 = i2 + 36 | 0; 18659 i2 = i2 + 32 | 0; 18660 if ((i5 | 0) == (HEAP32[i6 >> 2] | 0)) { 18661 i7 = HEAP32[i2 >> 2] | 0; 18662 HEAP32[i6 >> 2] = i5 << 1; 18663 i5 = __Z7b2Alloci(i5 << 3) | 0; 18664 HEAP32[i2 >> 2] = i5; 18665 _memcpy(i5 | 0, i7 | 0, HEAP32[i4 >> 2] << 2 | 0) | 0; 18666 __Z6b2FreePv(i7); 18667 i5 = HEAP32[i4 >> 2] | 0; 18668 } 18669 HEAP32[(HEAP32[i2 >> 2] | 0) + (i5 << 2) >> 2] = i3; 18670 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1; 18671 STACKTOP = i1; 18672 return i3 | 0; 18673 } 18674 function __ZN9b2ContactC2EP9b2FixtureiS1_i(i1, i4, i6, i3, i5) { 18675 i1 = i1 | 0; 18676 i4 = i4 | 0; 18677 i6 = i6 | 0; 18678 i3 = i3 | 0; 18679 i5 = i5 | 0; 18680 var i2 = 0, i7 = 0, d8 = 0.0, d9 = 0.0; 18681 i2 = STACKTOP; 18682 HEAP32[i1 >> 2] = 4440; 18683 HEAP32[i1 + 4 >> 2] = 4; 18684 HEAP32[i1 + 48 >> 2] = i4; 18685 HEAP32[i1 + 52 >> 2] = i3; 18686 HEAP32[i1 + 56 >> 2] = i6; 18687 HEAP32[i1 + 60 >> 2] = i5; 18688 HEAP32[i1 + 124 >> 2] = 0; 18689 HEAP32[i1 + 128 >> 2] = 0; 18690 i5 = i4 + 16 | 0; 18691 i6 = i1 + 8 | 0; 18692 i7 = i6 + 40 | 0; 18693 do { 18694 HEAP32[i6 >> 2] = 0; 18695 i6 = i6 + 4 | 0; 18696 } while ((i6 | 0) < (i7 | 0)); 18697 HEAPF32[i1 + 136 >> 2] = +Math_sqrt(+(+HEAPF32[i5 >> 2] * +HEAPF32[i3 + 16 >> 2])); 18698 d8 = +HEAPF32[i4 + 20 >> 2]; 18699 d9 = +HEAPF32[i3 + 20 >> 2]; 18700 HEAPF32[i1 + 140 >> 2] = d8 > d9 ? d8 : d9; 18701 STACKTOP = i2; 18702 return; 18703 } 18704 function __ZN12b2BroadPhase9MoveProxyEiRK6b2AABBRK6b2Vec2(i3, i1, i5, i4) { 18705 i3 = i3 | 0; 18706 i1 = i1 | 0; 18707 i5 = i5 | 0; 18708 i4 = i4 | 0; 18709 var i2 = 0, i6 = 0, i7 = 0; 18710 i2 = STACKTOP; 18711 if (!(__ZN13b2DynamicTree9MoveProxyEiRK6b2AABBRK6b2Vec2(i3, i1, i5, i4) | 0)) { 18712 STACKTOP = i2; 18713 return; 18714 } 18715 i4 = i3 + 40 | 0; 18716 i5 = HEAP32[i4 >> 2] | 0; 18717 i6 = i3 + 36 | 0; 18718 i3 = i3 + 32 | 0; 18719 if ((i5 | 0) == (HEAP32[i6 >> 2] | 0)) { 18720 i7 = HEAP32[i3 >> 2] | 0; 18721 HEAP32[i6 >> 2] = i5 << 1; 18722 i5 = __Z7b2Alloci(i5 << 3) | 0; 18723 HEAP32[i3 >> 2] = i5; 18724 _memcpy(i5 | 0, i7 | 0, HEAP32[i4 >> 2] << 2 | 0) | 0; 18725 __Z6b2FreePv(i7); 18726 i5 = HEAP32[i4 >> 2] | 0; 18727 } 18728 HEAP32[(HEAP32[i3 >> 2] | 0) + (i5 << 2) >> 2] = i1; 18729 HEAP32[i4 >> 2] = (HEAP32[i4 >> 2] | 0) + 1; 18730 STACKTOP = i2; 18731 return; 18732 } 18733 function __ZN24b2ChainAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i3, i4, i5, i6) { 18734 i1 = i1 | 0; 18735 i3 = i3 | 0; 18736 i4 = i4 | 0; 18737 i5 = i5 | 0; 18738 i6 = i6 | 0; 18739 var i2 = 0; 18740 i2 = STACKTOP; 18741 i6 = __ZN16b2BlockAllocator8AllocateEi(i6, 144) | 0; 18742 if ((i6 | 0) == 0) { 18743 i6 = 0; 18744 STACKTOP = i2; 18745 return i6 | 0; 18746 } 18747 __ZN9b2ContactC2EP9b2FixtureiS1_i(i6, i1, i3, i4, i5); 18748 HEAP32[i6 >> 2] = 6032; 18749 if ((HEAP32[(HEAP32[(HEAP32[i6 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 3) { 18750 ___assert_fail(6048, 6096, 43, 6152); 18751 } 18752 if ((HEAP32[(HEAP32[(HEAP32[i6 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 2) { 18753 STACKTOP = i2; 18754 return i6 | 0; 18755 } else { 18756 ___assert_fail(6184, 6096, 44, 6152); 18757 } 18758 return 0; 18759 } 18760 function __ZN23b2ChainAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i3, i4, i5, i6) { 18761 i1 = i1 | 0; 18762 i3 = i3 | 0; 18763 i4 = i4 | 0; 18764 i5 = i5 | 0; 18765 i6 = i6 | 0; 18766 var i2 = 0; 18767 i2 = STACKTOP; 18768 i6 = __ZN16b2BlockAllocator8AllocateEi(i6, 144) | 0; 18769 if ((i6 | 0) == 0) { 18770 i6 = 0; 18771 STACKTOP = i2; 18772 return i6 | 0; 18773 } 18774 __ZN9b2ContactC2EP9b2FixtureiS1_i(i6, i1, i3, i4, i5); 18775 HEAP32[i6 >> 2] = 5784; 18776 if ((HEAP32[(HEAP32[(HEAP32[i6 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 3) { 18777 ___assert_fail(5800, 5848, 43, 5904); 18778 } 18779 if ((HEAP32[(HEAP32[(HEAP32[i6 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) { 18780 STACKTOP = i2; 18781 return i6 | 0; 18782 } else { 18783 ___assert_fail(5928, 5848, 44, 5904); 18784 } 18785 return 0; 18786 } 18787 function __ZN25b2PolygonAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) { 18788 i1 = i1 | 0; 18789 i4 = i4 | 0; 18790 i2 = i2 | 0; 18791 i5 = i5 | 0; 18792 i3 = i3 | 0; 18793 i4 = STACKTOP; 18794 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0; 18795 if ((i3 | 0) == 0) { 18796 i5 = 0; 18797 STACKTOP = i4; 18798 return i5 | 0; 18799 } 18800 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0); 18801 HEAP32[i3 >> 2] = 4984; 18802 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 2) { 18803 ___assert_fail(5e3, 5048, 41, 5104); 18804 } 18805 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) { 18806 i5 = i3; 18807 STACKTOP = i4; 18808 return i5 | 0; 18809 } else { 18810 ___assert_fail(5136, 5048, 42, 5104); 18811 } 18812 return 0; 18813 } 18814 function __ZN23b2EdgeAndPolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) { 18815 i1 = i1 | 0; 18816 i4 = i4 | 0; 18817 i2 = i2 | 0; 18818 i5 = i5 | 0; 18819 i3 = i3 | 0; 18820 i4 = STACKTOP; 18821 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0; 18822 if ((i3 | 0) == 0) { 18823 i5 = 0; 18824 STACKTOP = i4; 18825 return i5 | 0; 18826 } 18827 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0); 18828 HEAP32[i3 >> 2] = 4736; 18829 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 1) { 18830 ___assert_fail(4752, 4800, 41, 4856); 18831 } 18832 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 2) { 18833 i5 = i3; 18834 STACKTOP = i4; 18835 return i5 | 0; 18836 } else { 18837 ___assert_fail(4880, 4800, 42, 4856); 18838 } 18839 return 0; 18840 } 18841 function __ZN22b2EdgeAndCircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) { 18842 i1 = i1 | 0; 18843 i4 = i4 | 0; 18844 i2 = i2 | 0; 18845 i5 = i5 | 0; 18846 i3 = i3 | 0; 18847 i4 = STACKTOP; 18848 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0; 18849 if ((i3 | 0) == 0) { 18850 i5 = 0; 18851 STACKTOP = i4; 18852 return i5 | 0; 18853 } 18854 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0); 18855 HEAP32[i3 >> 2] = 4488; 18856 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 1) { 18857 ___assert_fail(4504, 4552, 41, 4608); 18858 } 18859 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) { 18860 i5 = i3; 18861 STACKTOP = i4; 18862 return i5 | 0; 18863 } else { 18864 ___assert_fail(4632, 4552, 42, 4608); 18865 } 18866 return 0; 18867 } 18868 function __ZN14b2PolygonShape8SetAsBoxEff(i1, d3, d2) { 18869 i1 = i1 | 0; 18870 d3 = +d3; 18871 d2 = +d2; 18872 var d4 = 0.0, d5 = 0.0; 18873 HEAP32[i1 + 148 >> 2] = 4; 18874 d4 = -d3; 18875 d5 = -d2; 18876 HEAPF32[i1 + 20 >> 2] = d4; 18877 HEAPF32[i1 + 24 >> 2] = d5; 18878 HEAPF32[i1 + 28 >> 2] = d3; 18879 HEAPF32[i1 + 32 >> 2] = d5; 18880 HEAPF32[i1 + 36 >> 2] = d3; 18881 HEAPF32[i1 + 40 >> 2] = d2; 18882 HEAPF32[i1 + 44 >> 2] = d4; 18883 HEAPF32[i1 + 48 >> 2] = d2; 18884 HEAPF32[i1 + 84 >> 2] = 0.0; 18885 HEAPF32[i1 + 88 >> 2] = -1.0; 18886 HEAPF32[i1 + 92 >> 2] = 1.0; 18887 HEAPF32[i1 + 96 >> 2] = 0.0; 18888 HEAPF32[i1 + 100 >> 2] = 0.0; 18889 HEAPF32[i1 + 104 >> 2] = 1.0; 18890 HEAPF32[i1 + 108 >> 2] = -1.0; 18891 HEAPF32[i1 + 112 >> 2] = 0.0; 18892 HEAPF32[i1 + 12 >> 2] = 0.0; 18893 HEAPF32[i1 + 16 >> 2] = 0.0; 18894 return; 18895 } 18896 function __ZN16b2PolygonContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) { 18897 i1 = i1 | 0; 18898 i4 = i4 | 0; 18899 i2 = i2 | 0; 18900 i5 = i5 | 0; 18901 i3 = i3 | 0; 18902 i4 = STACKTOP; 18903 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0; 18904 if ((i3 | 0) == 0) { 18905 i5 = 0; 18906 STACKTOP = i4; 18907 return i5 | 0; 18908 } 18909 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0); 18910 HEAP32[i3 >> 2] = 5240; 18911 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 2) { 18912 ___assert_fail(5256, 5304, 44, 5352); 18913 } 18914 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 2) { 18915 i5 = i3; 18916 STACKTOP = i4; 18917 return i5 | 0; 18918 } else { 18919 ___assert_fail(5376, 5304, 45, 5352); 18920 } 18921 return 0; 18922 } 18923 function __ZN15b2CircleContact6CreateEP9b2FixtureiS1_iP16b2BlockAllocator(i1, i4, i2, i5, i3) { 18924 i1 = i1 | 0; 18925 i4 = i4 | 0; 18926 i2 = i2 | 0; 18927 i5 = i5 | 0; 18928 i3 = i3 | 0; 18929 i4 = STACKTOP; 18930 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 144) | 0; 18931 if ((i3 | 0) == 0) { 18932 i5 = 0; 18933 STACKTOP = i4; 18934 return i5 | 0; 18935 } 18936 __ZN9b2ContactC2EP9b2FixtureiS1_i(i3, i1, 0, i2, 0); 18937 HEAP32[i3 >> 2] = 6288; 18938 if ((HEAP32[(HEAP32[(HEAP32[i3 + 48 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) != 0) { 18939 ___assert_fail(6304, 6352, 44, 6400); 18940 } 18941 if ((HEAP32[(HEAP32[(HEAP32[i3 + 52 >> 2] | 0) + 12 >> 2] | 0) + 4 >> 2] | 0) == 0) { 18942 i5 = i3; 18943 STACKTOP = i4; 18944 return i5 | 0; 18945 } else { 18946 ___assert_fail(6416, 6352, 45, 6400); 18947 } 18948 return 0; 18949 } 18950 function __ZN7b2World10CreateBodyEPK9b2BodyDef(i1, i4) { 18951 i1 = i1 | 0; 18952 i4 = i4 | 0; 18953 var i2 = 0, i3 = 0, i5 = 0; 18954 i2 = STACKTOP; 18955 if ((HEAP32[i1 + 102868 >> 2] & 2 | 0) != 0) { 18956 ___assert_fail(2160, 2184, 109, 2216); 18957 } 18958 i3 = __ZN16b2BlockAllocator8AllocateEi(i1, 152) | 0; 18959 if ((i3 | 0) == 0) { 18960 i3 = 0; 18961 } else { 18962 __ZN6b2BodyC2EPK9b2BodyDefP7b2World(i3, i4, i1); 18963 } 18964 HEAP32[i3 + 92 >> 2] = 0; 18965 i4 = i1 + 102952 | 0; 18966 HEAP32[i3 + 96 >> 2] = HEAP32[i4 >> 2]; 18967 i5 = HEAP32[i4 >> 2] | 0; 18968 if ((i5 | 0) != 0) { 18969 HEAP32[i5 + 92 >> 2] = i3; 18970 } 18971 HEAP32[i4 >> 2] = i3; 18972 i5 = i1 + 102960 | 0; 18973 HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1; 18974 STACKTOP = i2; 18975 return i3 | 0; 18976 } 18977 function __ZNK6b2Body13ShouldCollideEPKS_(i4, i2) { 18978 i4 = i4 | 0; 18979 i2 = i2 | 0; 18980 var i1 = 0, i3 = 0; 18981 i1 = STACKTOP; 18982 if ((HEAP32[i4 >> 2] | 0) != 2 ? (HEAP32[i2 >> 2] | 0) != 2 : 0) { 18983 i2 = 0; 18984 } else { 18985 i3 = 3; 18986 } 18987 L3 : do { 18988 if ((i3 | 0) == 3) { 18989 i3 = HEAP32[i4 + 108 >> 2] | 0; 18990 if ((i3 | 0) == 0) { 18991 i2 = 1; 18992 } else { 18993 while (1) { 18994 if ((HEAP32[i3 >> 2] | 0) == (i2 | 0) ? (HEAP8[(HEAP32[i3 + 4 >> 2] | 0) + 61 | 0] | 0) == 0 : 0) { 18995 i2 = 0; 18996 break L3; 18997 } 18998 i3 = HEAP32[i3 + 12 >> 2] | 0; 18999 if ((i3 | 0) == 0) { 19000 i2 = 1; 19001 break; 19002 } 19003 } 19004 } 19005 } 19006 } while (0); 19007 STACKTOP = i1; 19008 return i2 | 0; 19009 } 19010 function __ZNK14b2PolygonShape5CloneEP16b2BlockAllocator(i1, i3) { 19011 i1 = i1 | 0; 19012 i3 = i3 | 0; 19013 var i2 = 0, i4 = 0, i5 = 0, i6 = 0; 19014 i2 = STACKTOP; 19015 i3 = __ZN16b2BlockAllocator8AllocateEi(i3, 152) | 0; 19016 if ((i3 | 0) == 0) { 19017 i3 = 0; 19018 } else { 19019 HEAP32[i3 >> 2] = 504; 19020 HEAP32[i3 + 4 >> 2] = 2; 19021 HEAPF32[i3 + 8 >> 2] = .009999999776482582; 19022 HEAP32[i3 + 148 >> 2] = 0; 19023 HEAPF32[i3 + 12 >> 2] = 0.0; 19024 HEAPF32[i3 + 16 >> 2] = 0.0; 19025 } 19026 i6 = i1 + 4 | 0; 19027 i5 = HEAP32[i6 + 4 >> 2] | 0; 19028 i4 = i3 + 4 | 0; 19029 HEAP32[i4 >> 2] = HEAP32[i6 >> 2]; 19030 HEAP32[i4 + 4 >> 2] = i5; 19031 _memcpy(i3 + 12 | 0, i1 + 12 | 0, 140) | 0; 19032 STACKTOP = i2; 19033 return i3 | 0; 19034 } 19035 function _memcpy(i3, i2, i1) { 19036 i3 = i3 | 0; 19037 i2 = i2 | 0; 19038 i1 = i1 | 0; 19039 var i4 = 0; 19040 if ((i1 | 0) >= 4096) return _emscripten_memcpy_big(i3 | 0, i2 | 0, i1 | 0) | 0; 19041 i4 = i3 | 0; 19042 if ((i3 & 3) == (i2 & 3)) { 19043 while (i3 & 3) { 19044 if ((i1 | 0) == 0) return i4 | 0; 19045 HEAP8[i3] = HEAP8[i2] | 0; 19046 i3 = i3 + 1 | 0; 19047 i2 = i2 + 1 | 0; 19048 i1 = i1 - 1 | 0; 19049 } 19050 while ((i1 | 0) >= 4) { 19051 HEAP32[i3 >> 2] = HEAP32[i2 >> 2]; 19052 i3 = i3 + 4 | 0; 19053 i2 = i2 + 4 | 0; 19054 i1 = i1 - 4 | 0; 19055 } 19056 } 19057 while ((i1 | 0) > 0) { 19058 HEAP8[i3] = HEAP8[i2] | 0; 19059 i3 = i3 + 1 | 0; 19060 i2 = i2 + 1 | 0; 19061 i1 = i1 - 1 | 0; 19062 } 19063 return i4 | 0; 19064 } 19065 function __ZN7b2World16SetAllowSleepingEb(i2, i4) { 19066 i2 = i2 | 0; 19067 i4 = i4 | 0; 19068 var i1 = 0, i3 = 0; 19069 i1 = STACKTOP; 19070 i3 = i2 + 102976 | 0; 19071 if ((i4 & 1 | 0) == (HEAPU8[i3] | 0 | 0)) { 19072 STACKTOP = i1; 19073 return; 19074 } 19075 HEAP8[i3] = i4 & 1; 19076 if (i4) { 19077 STACKTOP = i1; 19078 return; 19079 } 19080 i2 = HEAP32[i2 + 102952 >> 2] | 0; 19081 if ((i2 | 0) == 0) { 19082 STACKTOP = i1; 19083 return; 19084 } 19085 do { 19086 i3 = i2 + 4 | 0; 19087 i4 = HEAPU16[i3 >> 1] | 0; 19088 if ((i4 & 2 | 0) == 0) { 19089 HEAP16[i3 >> 1] = i4 | 2; 19090 HEAPF32[i2 + 144 >> 2] = 0.0; 19091 } 19092 i2 = HEAP32[i2 + 96 >> 2] | 0; 19093 } while ((i2 | 0) != 0); 19094 STACKTOP = i1; 19095 return; 19096 } 19097 function __ZN16b2BlockAllocator4FreeEPvi(i3, i1, i4) { 19098 i3 = i3 | 0; 19099 i1 = i1 | 0; 19100 i4 = i4 | 0; 19101 var i2 = 0; 19102 i2 = STACKTOP; 19103 if ((i4 | 0) == 0) { 19104 STACKTOP = i2; 19105 return; 19106 } 19107 if ((i4 | 0) <= 0) { 19108 ___assert_fail(1376, 1312, 164, 1488); 19109 } 19110 if ((i4 | 0) > 640) { 19111 __Z6b2FreePv(i1); 19112 STACKTOP = i2; 19113 return; 19114 } 19115 i4 = HEAP8[632 + i4 | 0] | 0; 19116 if (!((i4 & 255) < 14)) { 19117 ___assert_fail(1408, 1312, 173, 1488); 19118 } 19119 i4 = i3 + ((i4 & 255) << 2) + 12 | 0; 19120 HEAP32[i1 >> 2] = HEAP32[i4 >> 2]; 19121 HEAP32[i4 >> 2] = i1; 19122 STACKTOP = i2; 19123 return; 19124 } 19125 function __ZN15b2ContactFilter13ShouldCollideEP9b2FixtureS1_(i3, i2, i1) { 19126 i3 = i3 | 0; 19127 i2 = i2 | 0; 19128 i1 = i1 | 0; 19129 var i4 = 0; 19130 i3 = STACKTOP; 19131 i4 = HEAP16[i2 + 36 >> 1] | 0; 19132 if (!(i4 << 16 >> 16 != (HEAP16[i1 + 36 >> 1] | 0) | i4 << 16 >> 16 == 0)) { 19133 i4 = i4 << 16 >> 16 > 0; 19134 STACKTOP = i3; 19135 return i4 | 0; 19136 } 19137 if ((HEAP16[i1 + 32 >> 1] & HEAP16[i2 + 34 >> 1]) << 16 >> 16 == 0) { 19138 i4 = 0; 19139 STACKTOP = i3; 19140 return i4 | 0; 19141 } 19142 i4 = (HEAP16[i1 + 34 >> 1] & HEAP16[i2 + 32 >> 1]) << 16 >> 16 != 0; 19143 STACKTOP = i3; 19144 return i4 | 0; 19145 } 19146 function _memset(i1, i4, i3) { 19147 i1 = i1 | 0; 19148 i4 = i4 | 0; 19149 i3 = i3 | 0; 19150 var i2 = 0, i5 = 0, i6 = 0, i7 = 0; 19151 i2 = i1 + i3 | 0; 19152 if ((i3 | 0) >= 20) { 19153 i4 = i4 & 255; 19154 i7 = i1 & 3; 19155 i6 = i4 | i4 << 8 | i4 << 16 | i4 << 24; 19156 i5 = i2 & ~3; 19157 if (i7) { 19158 i7 = i1 + 4 - i7 | 0; 19159 while ((i1 | 0) < (i7 | 0)) { 19160 HEAP8[i1] = i4; 19161 i1 = i1 + 1 | 0; 19162 } 19163 } 19164 while ((i1 | 0) < (i5 | 0)) { 19165 HEAP32[i1 >> 2] = i6; 19166 i1 = i1 + 4 | 0; 19167 } 19168 } 19169 while ((i1 | 0) < (i2 | 0)) { 19170 HEAP8[i1] = i4; 19171 i1 = i1 + 1 | 0; 19172 } 19173 return i1 - i3 | 0; 19174 } 19175 function __ZN6b2Body13CreateFixtureEPK7b2Shapef(i1, i3, d2) { 19176 i1 = i1 | 0; 19177 i3 = i3 | 0; 19178 d2 = +d2; 19179 var i4 = 0, i5 = 0; 19180 i4 = STACKTOP; 19181 STACKTOP = STACKTOP + 32 | 0; 19182 i5 = i4; 19183 HEAP16[i5 + 22 >> 1] = 1; 19184 HEAP16[i5 + 24 >> 1] = -1; 19185 HEAP16[i5 + 26 >> 1] = 0; 19186 HEAP32[i5 + 4 >> 2] = 0; 19187 HEAPF32[i5 + 8 >> 2] = .20000000298023224; 19188 HEAPF32[i5 + 12 >> 2] = 0.0; 19189 HEAP8[i5 + 20 | 0] = 0; 19190 HEAP32[i5 >> 2] = i3; 19191 HEAPF32[i5 + 16 >> 2] = d2; 19192 i3 = __ZN6b2Body13CreateFixtureEPK12b2FixtureDef(i1, i5) | 0; 19193 STACKTOP = i4; 19194 return i3 | 0; 19195 } 19196 function __Znwj(i2) { 19197 i2 = i2 | 0; 19198 var i1 = 0, i3 = 0; 19199 i1 = STACKTOP; 19200 i2 = (i2 | 0) == 0 ? 1 : i2; 19201 while (1) { 19202 i3 = _malloc(i2) | 0; 19203 if ((i3 | 0) != 0) { 19204 i2 = 6; 19205 break; 19206 } 19207 i3 = HEAP32[1914] | 0; 19208 HEAP32[1914] = i3 + 0; 19209 if ((i3 | 0) == 0) { 19210 i2 = 5; 19211 break; 19212 } 19213 FUNCTION_TABLE_v[i3 & 3](); 19214 } 19215 if ((i2 | 0) == 5) { 19216 i3 = ___cxa_allocate_exception(4) | 0; 19217 HEAP32[i3 >> 2] = 7672; 19218 ___cxa_throw(i3 | 0, 7720, 30); 19219 } else if ((i2 | 0) == 6) { 19220 STACKTOP = i1; 19221 return i3 | 0; 19222 } 19223 return 0; 19224 } 19225 function __ZN8b2IslandD2Ev(i1) { 19226 i1 = i1 | 0; 19227 var i2 = 0; 19228 i2 = STACKTOP; 19229 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 20 >> 2] | 0); 19230 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 24 >> 2] | 0); 19231 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 16 >> 2] | 0); 19232 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 12 >> 2] | 0); 19233 __ZN16b2StackAllocator4FreeEPv(HEAP32[i1 >> 2] | 0, HEAP32[i1 + 8 >> 2] | 0); 19234 STACKTOP = i2; 19235 return; 19236 } 19237 function __ZN16b2BlockAllocatorD2Ev(i2) { 19238 i2 = i2 | 0; 19239 var i1 = 0, i3 = 0, i4 = 0, i5 = 0; 19240 i1 = STACKTOP; 19241 i3 = i2 + 4 | 0; 19242 i4 = HEAP32[i2 >> 2] | 0; 19243 if ((HEAP32[i3 >> 2] | 0) > 0) { 19244 i5 = 0; 19245 } else { 19246 i5 = i4; 19247 __Z6b2FreePv(i5); 19248 STACKTOP = i1; 19249 return; 19250 } 19251 do { 19252 __Z6b2FreePv(HEAP32[i4 + (i5 << 3) + 4 >> 2] | 0); 19253 i5 = i5 + 1 | 0; 19254 i4 = HEAP32[i2 >> 2] | 0; 19255 } while ((i5 | 0) < (HEAP32[i3 >> 2] | 0)); 19256 __Z6b2FreePv(i4); 19257 STACKTOP = i1; 19258 return; 19259 } 19260 function copyTempDouble(i1) { 19261 i1 = i1 | 0; 19262 HEAP8[tempDoublePtr] = HEAP8[i1]; 19263 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0]; 19264 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0]; 19265 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0]; 19266 HEAP8[tempDoublePtr + 4 | 0] = HEAP8[i1 + 4 | 0]; 19267 HEAP8[tempDoublePtr + 5 | 0] = HEAP8[i1 + 5 | 0]; 19268 HEAP8[tempDoublePtr + 6 | 0] = HEAP8[i1 + 6 | 0]; 19269 HEAP8[tempDoublePtr + 7 | 0] = HEAP8[i1 + 7 | 0]; 19270 } 19271 function __ZNK11b2EdgeShape11ComputeMassEP10b2MassDataf(i2, i1, d3) { 19272 i2 = i2 | 0; 19273 i1 = i1 | 0; 19274 d3 = +d3; 19275 var i4 = 0, d5 = 0.0; 19276 i4 = STACKTOP; 19277 HEAPF32[i1 >> 2] = 0.0; 19278 d5 = +((+HEAPF32[i2 + 12 >> 2] + +HEAPF32[i2 + 20 >> 2]) * .5); 19279 d3 = +((+HEAPF32[i2 + 16 >> 2] + +HEAPF32[i2 + 24 >> 2]) * .5); 19280 i2 = i1 + 4 | 0; 19281 HEAPF32[i2 >> 2] = d5; 19282 HEAPF32[i2 + 4 >> 2] = d3; 19283 HEAPF32[i1 + 12 >> 2] = 0.0; 19284 STACKTOP = i4; 19285 return; 19286 } 19287 function __ZN11b2EdgeShape3SetERK6b2Vec2S2_(i1, i3, i2) { 19288 i1 = i1 | 0; 19289 i3 = i3 | 0; 19290 i2 = i2 | 0; 19291 var i4 = 0, i5 = 0; 19292 i5 = i3; 19293 i3 = HEAP32[i5 + 4 >> 2] | 0; 19294 i4 = i1 + 12 | 0; 19295 HEAP32[i4 >> 2] = HEAP32[i5 >> 2]; 19296 HEAP32[i4 + 4 >> 2] = i3; 19297 i4 = i2; 19298 i2 = HEAP32[i4 + 4 >> 2] | 0; 19299 i3 = i1 + 20 | 0; 19300 HEAP32[i3 >> 2] = HEAP32[i4 >> 2]; 19301 HEAP32[i3 + 4 >> 2] = i2; 19302 HEAP8[i1 + 44 | 0] = 0; 19303 HEAP8[i1 + 45 | 0] = 0; 19304 return; 19305 } 19306 function __ZN25b2PolygonAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) { 19307 i2 = i2 | 0; 19308 i4 = i4 | 0; 19309 i3 = i3 | 0; 19310 i1 = i1 | 0; 19311 var i5 = 0; 19312 i5 = STACKTOP; 19313 __Z25b2CollidePolygonAndCircleP10b2ManifoldPK14b2PolygonShapeRK11b2TransformPK13b2CircleShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1); 19314 STACKTOP = i5; 19315 return; 19316 } 19317 function __ZN23b2EdgeAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) { 19318 i2 = i2 | 0; 19319 i4 = i4 | 0; 19320 i3 = i3 | 0; 19321 i1 = i1 | 0; 19322 var i5 = 0; 19323 i5 = STACKTOP; 19324 __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1); 19325 STACKTOP = i5; 19326 return; 19327 } 19328 function __ZN22b2EdgeAndCircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) { 19329 i2 = i2 | 0; 19330 i4 = i4 | 0; 19331 i3 = i3 | 0; 19332 i1 = i1 | 0; 19333 var i5 = 0; 19334 i5 = STACKTOP; 19335 __Z22b2CollideEdgeAndCircleP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK13b2CircleShapeS6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1); 19336 STACKTOP = i5; 19337 return; 19338 } 19339 function __Z23b2CollideEdgeAndPolygonP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS6_(i5, i4, i3, i2, i1) { 19340 i5 = i5 | 0; 19341 i4 = i4 | 0; 19342 i3 = i3 | 0; 19343 i2 = i2 | 0; 19344 i1 = i1 | 0; 19345 var i6 = 0; 19346 i6 = STACKTOP; 19347 STACKTOP = STACKTOP + 256 | 0; 19348 __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS7_(i6, i5, i4, i3, i2, i1); 19349 STACKTOP = i6; 19350 return; 19351 } 19352 function __ZN16b2PolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) { 19353 i2 = i2 | 0; 19354 i4 = i4 | 0; 19355 i3 = i3 | 0; 19356 i1 = i1 | 0; 19357 var i5 = 0; 19358 i5 = STACKTOP; 19359 __Z17b2CollidePolygonsP10b2ManifoldPK14b2PolygonShapeRK11b2TransformS3_S6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1); 19360 STACKTOP = i5; 19361 return; 19362 } 19363 function __ZN15b2CircleContact8EvaluateEP10b2ManifoldRK11b2TransformS4_(i2, i4, i3, i1) { 19364 i2 = i2 | 0; 19365 i4 = i4 | 0; 19366 i3 = i3 | 0; 19367 i1 = i1 | 0; 19368 var i5 = 0; 19369 i5 = STACKTOP; 19370 __Z16b2CollideCirclesP10b2ManifoldPK13b2CircleShapeRK11b2TransformS3_S6_(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 12 >> 2] | 0, i3, HEAP32[(HEAP32[i2 + 52 >> 2] | 0) + 12 >> 2] | 0, i1); 19371 STACKTOP = i5; 19372 return; 19373 } 19374 function __Z14b2PairLessThanRK6b2PairS1_(i2, i5) { 19375 i2 = i2 | 0; 19376 i5 = i5 | 0; 19377 var i1 = 0, i3 = 0, i4 = 0; 19378 i1 = STACKTOP; 19379 i4 = HEAP32[i2 >> 2] | 0; 19380 i3 = HEAP32[i5 >> 2] | 0; 19381 if ((i4 | 0) >= (i3 | 0)) { 19382 if ((i4 | 0) == (i3 | 0)) { 19383 i2 = (HEAP32[i2 + 4 >> 2] | 0) < (HEAP32[i5 + 4 >> 2] | 0); 19384 } else { 19385 i2 = 0; 19386 } 19387 } else { 19388 i2 = 1; 19389 } 19390 STACKTOP = i1; 19391 return i2 | 0; 19392 } 19393 function __ZN9b2FixtureC2Ev(i1) { 19394 i1 = i1 | 0; 19395 var i2 = 0; 19396 i2 = STACKTOP; 19397 HEAP16[i1 + 32 >> 1] = 1; 19398 HEAP16[i1 + 34 >> 1] = -1; 19399 HEAP16[i1 + 36 >> 1] = 0; 19400 HEAP32[i1 + 40 >> 2] = 0; 19401 HEAP32[i1 + 24 >> 2] = 0; 19402 HEAP32[i1 + 28 >> 2] = 0; 19403 HEAP32[i1 + 0 >> 2] = 0; 19404 HEAP32[i1 + 4 >> 2] = 0; 19405 HEAP32[i1 + 8 >> 2] = 0; 19406 HEAP32[i1 + 12 >> 2] = 0; 19407 STACKTOP = i2; 19408 return; 19409 } 19410 function __ZN12b2BroadPhaseC2Ev(i1) { 19411 i1 = i1 | 0; 19412 var i2 = 0; 19413 i2 = STACKTOP; 19414 __ZN13b2DynamicTreeC2Ev(i1); 19415 HEAP32[i1 + 28 >> 2] = 0; 19416 HEAP32[i1 + 48 >> 2] = 16; 19417 HEAP32[i1 + 52 >> 2] = 0; 19418 HEAP32[i1 + 44 >> 2] = __Z7b2Alloci(192) | 0; 19419 HEAP32[i1 + 36 >> 2] = 16; 19420 HEAP32[i1 + 40 >> 2] = 0; 19421 HEAP32[i1 + 32 >> 2] = __Z7b2Alloci(64) | 0; 19422 STACKTOP = i2; 19423 return; 19424 } 19425 function __ZN16b2StackAllocatorD2Ev(i1) { 19426 i1 = i1 | 0; 19427 var i2 = 0; 19428 i2 = STACKTOP; 19429 if ((HEAP32[i1 + 102400 >> 2] | 0) != 0) { 19430 ___assert_fail(3792, 3808, 32, 3848); 19431 } 19432 if ((HEAP32[i1 + 102796 >> 2] | 0) == 0) { 19433 STACKTOP = i2; 19434 return; 19435 } else { 19436 ___assert_fail(3872, 3808, 33, 3848); 19437 } 19438 } 19439 function __ZN15b2ContactSolverD2Ev(i1) { 19440 i1 = i1 | 0; 19441 var i2 = 0, i3 = 0; 19442 i2 = STACKTOP; 19443 i3 = i1 + 32 | 0; 19444 __ZN16b2StackAllocator4FreeEPv(HEAP32[i3 >> 2] | 0, HEAP32[i1 + 40 >> 2] | 0); 19445 __ZN16b2StackAllocator4FreeEPv(HEAP32[i3 >> 2] | 0, HEAP32[i1 + 36 >> 2] | 0); 19446 STACKTOP = i2; 19447 return; 19448 } 19449 function __ZN25b2PolygonAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) { 19450 i1 = i1 | 0; 19451 i2 = i2 | 0; 19452 var i3 = 0; 19453 i3 = STACKTOP; 19454 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1); 19455 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144); 19456 STACKTOP = i3; 19457 return; 19458 } 19459 function __ZN24b2ChainAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) { 19460 i1 = i1 | 0; 19461 i2 = i2 | 0; 19462 var i3 = 0; 19463 i3 = STACKTOP; 19464 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1); 19465 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144); 19466 STACKTOP = i3; 19467 return; 19468 } 19469 function __ZN23b2EdgeAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) { 19470 i1 = i1 | 0; 19471 i2 = i2 | 0; 19472 var i3 = 0; 19473 i3 = STACKTOP; 19474 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1); 19475 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144); 19476 STACKTOP = i3; 19477 return; 19478 } 19479 function __ZN23b2ChainAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) { 19480 i1 = i1 | 0; 19481 i2 = i2 | 0; 19482 var i3 = 0; 19483 i3 = STACKTOP; 19484 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1); 19485 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144); 19486 STACKTOP = i3; 19487 return; 19488 } 19489 function __ZN22b2EdgeAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) { 19490 i1 = i1 | 0; 19491 i2 = i2 | 0; 19492 var i3 = 0; 19493 i3 = STACKTOP; 19494 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1); 19495 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144); 19496 STACKTOP = i3; 19497 return; 19498 } 19499 function __ZN16b2ContactManagerC2Ev(i1) { 19500 i1 = i1 | 0; 19501 var i2 = 0; 19502 i2 = STACKTOP; 19503 __ZN12b2BroadPhaseC2Ev(i1); 19504 HEAP32[i1 + 60 >> 2] = 0; 19505 HEAP32[i1 + 64 >> 2] = 0; 19506 HEAP32[i1 + 68 >> 2] = 1888; 19507 HEAP32[i1 + 72 >> 2] = 1896; 19508 HEAP32[i1 + 76 >> 2] = 0; 19509 STACKTOP = i2; 19510 return; 19511 } 19512 function __ZN16b2PolygonContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) { 19513 i1 = i1 | 0; 19514 i2 = i2 | 0; 19515 var i3 = 0; 19516 i3 = STACKTOP; 19517 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1); 19518 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144); 19519 STACKTOP = i3; 19520 return; 19521 } 19522 function __ZN15b2CircleContact7DestroyEP9b2ContactP16b2BlockAllocator(i1, i2) { 19523 i1 = i1 | 0; 19524 i2 = i2 | 0; 19525 var i3 = 0; 19526 i3 = STACKTOP; 19527 FUNCTION_TABLE_vi[HEAP32[(HEAP32[i1 >> 2] | 0) + 4 >> 2] & 31](i1); 19528 __ZN16b2BlockAllocator4FreeEPvi(i2, i1, 144); 19529 STACKTOP = i3; 19530 return; 19531 } 19532 function dynCall_viiiiii(i7, i6, i5, i4, i3, i2, i1) { 19533 i7 = i7 | 0; 19534 i6 = i6 | 0; 19535 i5 = i5 | 0; 19536 i4 = i4 | 0; 19537 i3 = i3 | 0; 19538 i2 = i2 | 0; 19539 i1 = i1 | 0; 19540 FUNCTION_TABLE_viiiiii[i7 & 3](i6 | 0, i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0); 19541 } 19542 function copyTempFloat(i1) { 19543 i1 = i1 | 0; 19544 HEAP8[tempDoublePtr] = HEAP8[i1]; 19545 HEAP8[tempDoublePtr + 1 | 0] = HEAP8[i1 + 1 | 0]; 19546 HEAP8[tempDoublePtr + 2 | 0] = HEAP8[i1 + 2 | 0]; 19547 HEAP8[tempDoublePtr + 3 | 0] = HEAP8[i1 + 3 | 0]; 19548 } 19549 function dynCall_iiiiii(i6, i5, i4, i3, i2, i1) { 19550 i6 = i6 | 0; 19551 i5 = i5 | 0; 19552 i4 = i4 | 0; 19553 i3 = i3 | 0; 19554 i2 = i2 | 0; 19555 i1 = i1 | 0; 19556 return FUNCTION_TABLE_iiiiii[i6 & 15](i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0) | 0; 19557 } 19558 function dynCall_viiiii(i6, i5, i4, i3, i2, i1) { 19559 i6 = i6 | 0; 19560 i5 = i5 | 0; 19561 i4 = i4 | 0; 19562 i3 = i3 | 0; 19563 i2 = i2 | 0; 19564 i1 = i1 | 0; 19565 FUNCTION_TABLE_viiiii[i6 & 3](i5 | 0, i4 | 0, i3 | 0, i2 | 0, i1 | 0); 19566 } 19567 function __ZN16b2ContactManager15FindNewContactsEv(i1) { 19568 i1 = i1 | 0; 19569 var i2 = 0; 19570 i2 = STACKTOP; 19571 __ZN12b2BroadPhase11UpdatePairsI16b2ContactManagerEEvPT_(i1, i1); 19572 STACKTOP = i2; 19573 return; 19574 } 19575 function __ZN16b2StackAllocatorC2Ev(i1) { 19576 i1 = i1 | 0; 19577 HEAP32[i1 + 102400 >> 2] = 0; 19578 HEAP32[i1 + 102404 >> 2] = 0; 19579 HEAP32[i1 + 102408 >> 2] = 0; 19580 HEAP32[i1 + 102796 >> 2] = 0; 19581 return; 19582 } 19583 function dynCall_viiii(i5, i4, i3, i2, i1) { 19584 i5 = i5 | 0; 19585 i4 = i4 | 0; 19586 i3 = i3 | 0; 19587 i2 = i2 | 0; 19588 i1 = i1 | 0; 19589 FUNCTION_TABLE_viiii[i5 & 15](i4 | 0, i3 | 0, i2 | 0, i1 | 0); 19590 } 19591 function dynCall_iiii(i4, i3, i2, i1) { 19592 i4 = i4 | 0; 19593 i3 = i3 | 0; 19594 i2 = i2 | 0; 19595 i1 = i1 | 0; 19596 return FUNCTION_TABLE_iiii[i4 & 7](i3 | 0, i2 | 0, i1 | 0) | 0; 19597 } 19598 function dynCall_viii(i4, i3, i2, i1) { 19599 i4 = i4 | 0; 19600 i3 = i3 | 0; 19601 i2 = i2 | 0; 19602 i1 = i1 | 0; 19603 FUNCTION_TABLE_viii[i4 & 3](i3 | 0, i2 | 0, i1 | 0); 19604 } 19605 function __ZNSt9bad_allocD0Ev(i1) { 19606 i1 = i1 | 0; 19607 var i2 = 0; 19608 i2 = STACKTOP; 19609 __ZNSt9exceptionD2Ev(i1 | 0); 19610 __ZdlPv(i1); 19611 STACKTOP = i2; 19612 return; 19613 } 19614 function stackAlloc(i1) { 19615 i1 = i1 | 0; 19616 var i2 = 0; 19617 i2 = STACKTOP; 19618 STACKTOP = STACKTOP + i1 | 0; 19619 STACKTOP = STACKTOP + 7 & -8; 19620 return i2 | 0; 19621 } 19622 function __ZN13b2DynamicTreeD2Ev(i1) { 19623 i1 = i1 | 0; 19624 var i2 = 0; 19625 i2 = STACKTOP; 19626 __Z6b2FreePv(HEAP32[i1 + 4 >> 2] | 0); 19627 STACKTOP = i2; 19628 return; 19629 } 19630 function dynCall_viid(i4, i3, i2, d1) { 19631 i4 = i4 | 0; 19632 i3 = i3 | 0; 19633 i2 = i2 | 0; 19634 d1 = +d1; 19635 FUNCTION_TABLE_viid[i4 & 3](i3 | 0, i2 | 0, +d1); 19636 } 19637 function __ZN17b2ContactListener9PostSolveEP9b2ContactPK16b2ContactImpulse(i1, i2, i3) { 19638 i1 = i1 | 0; 19639 i2 = i2 | 0; 19640 i3 = i3 | 0; 19641 return; 19642 } 19643 function __ZN10__cxxabiv120__si_class_type_infoD0Ev(i1) { 19644 i1 = i1 | 0; 19645 var i2 = 0; 19646 i2 = STACKTOP; 19647 __ZdlPv(i1); 19648 STACKTOP = i2; 19649 return; 19650 } 19651 function __ZN10__cxxabiv117__class_type_infoD0Ev(i1) { 19652 i1 = i1 | 0; 19653 var i2 = 0; 19654 i2 = STACKTOP; 19655 __ZdlPv(i1); 19656 STACKTOP = i2; 19657 return; 19658 } 19659 function __ZNSt9bad_allocD2Ev(i1) { 19660 i1 = i1 | 0; 19661 var i2 = 0; 19662 i2 = STACKTOP; 19663 __ZNSt9exceptionD2Ev(i1 | 0); 19664 STACKTOP = i2; 19665 return; 19666 } 19667 function dynCall_iii(i3, i2, i1) { 19668 i3 = i3 | 0; 19669 i2 = i2 | 0; 19670 i1 = i1 | 0; 19671 return FUNCTION_TABLE_iii[i3 & 3](i2 | 0, i1 | 0) | 0; 19672 } 19673 function b8(i1, i2, i3, i4, i5, i6) { 19674 i1 = i1 | 0; 19675 i2 = i2 | 0; 19676 i3 = i3 | 0; 19677 i4 = i4 | 0; 19678 i5 = i5 | 0; 19679 i6 = i6 | 0; 19680 abort(8); 19681 } 19682 function __ZN25b2PolygonAndCircleContactD0Ev(i1) { 19683 i1 = i1 | 0; 19684 var i2 = 0; 19685 i2 = STACKTOP; 19686 __ZdlPv(i1); 19687 STACKTOP = i2; 19688 return; 19689 } 19690 function __ZN17b2ContactListener8PreSolveEP9b2ContactPK10b2Manifold(i1, i2, i3) { 19691 i1 = i1 | 0; 19692 i2 = i2 | 0; 19693 i3 = i3 | 0; 19694 return; 19695 } 19696 function __ZN24b2ChainAndPolygonContactD0Ev(i1) { 19697 i1 = i1 | 0; 19698 var i2 = 0; 19699 i2 = STACKTOP; 19700 __ZdlPv(i1); 19701 STACKTOP = i2; 19702 return; 19703 } 19704 function __ZN23b2EdgeAndPolygonContactD0Ev(i1) { 19705 i1 = i1 | 0; 19706 var i2 = 0; 19707 i2 = STACKTOP; 19708 __ZdlPv(i1); 19709 STACKTOP = i2; 19710 return; 19711 } 19712 function __ZN23b2ChainAndCircleContactD0Ev(i1) { 19713 i1 = i1 | 0; 19714 var i2 = 0; 19715 i2 = STACKTOP; 19716 __ZdlPv(i1); 19717 STACKTOP = i2; 19718 return; 19719 } 19720 function __ZNK11b2EdgeShape9TestPointERK11b2TransformRK6b2Vec2(i1, i2, i3) { 19721 i1 = i1 | 0; 19722 i2 = i2 | 0; 19723 i3 = i3 | 0; 19724 return 0; 19725 } 19726 function __ZN22b2EdgeAndCircleContactD0Ev(i1) { 19727 i1 = i1 | 0; 19728 var i2 = 0; 19729 i2 = STACKTOP; 19730 __ZdlPv(i1); 19731 STACKTOP = i2; 19732 return; 19733 } 19734 function __ZdlPv(i1) { 19735 i1 = i1 | 0; 19736 var i2 = 0; 19737 i2 = STACKTOP; 19738 if ((i1 | 0) != 0) { 19739 _free(i1); 19740 } 19741 STACKTOP = i2; 19742 return; 19743 } 19744 function b10(i1, i2, i3, i4, i5) { 19745 i1 = i1 | 0; 19746 i2 = i2 | 0; 19747 i3 = i3 | 0; 19748 i4 = i4 | 0; 19749 i5 = i5 | 0; 19750 abort(10); 19751 return 0; 19752 } 19753 function _strlen(i1) { 19754 i1 = i1 | 0; 19755 var i2 = 0; 19756 i2 = i1; 19757 while (HEAP8[i2] | 0) { 19758 i2 = i2 + 1 | 0; 19759 } 19760 return i2 - i1 | 0; 19761 } 19762 function __Z7b2Alloci(i1) { 19763 i1 = i1 | 0; 19764 var i2 = 0; 19765 i2 = STACKTOP; 19766 i1 = _malloc(i1) | 0; 19767 STACKTOP = i2; 19768 return i1 | 0; 19769 } 19770 function setThrew(i1, i2) { 19771 i1 = i1 | 0; 19772 i2 = i2 | 0; 19773 if ((__THREW__ | 0) == 0) { 19774 __THREW__ = i1; 19775 threwValue = i2; 19776 } 19777 } 19778 function __ZN17b2ContactListenerD0Ev(i1) { 19779 i1 = i1 | 0; 19780 var i2 = 0; 19781 i2 = STACKTOP; 19782 __ZdlPv(i1); 19783 STACKTOP = i2; 19784 return; 19785 } 19786 function __ZN16b2PolygonContactD0Ev(i1) { 19787 i1 = i1 | 0; 19788 var i2 = 0; 19789 i2 = STACKTOP; 19790 __ZdlPv(i1); 19791 STACKTOP = i2; 19792 return; 19793 } 19794 function dynCall_vii(i3, i2, i1) { 19795 i3 = i3 | 0; 19796 i2 = i2 | 0; 19797 i1 = i1 | 0; 19798 FUNCTION_TABLE_vii[i3 & 15](i2 | 0, i1 | 0); 19799 } 19800 function __ZN15b2ContactFilterD0Ev(i1) { 19801 i1 = i1 | 0; 19802 var i2 = 0; 19803 i2 = STACKTOP; 19804 __ZdlPv(i1); 19805 STACKTOP = i2; 19806 return; 19807 } 19808 function __ZN15b2CircleContactD0Ev(i1) { 19809 i1 = i1 | 0; 19810 var i2 = 0; 19811 i2 = STACKTOP; 19812 __ZdlPv(i1); 19813 STACKTOP = i2; 19814 return; 19815 } 19816 function __ZN14b2PolygonShapeD0Ev(i1) { 19817 i1 = i1 | 0; 19818 var i2 = 0; 19819 i2 = STACKTOP; 19820 __ZdlPv(i1); 19821 STACKTOP = i2; 19822 return; 19823 } 19824 function __Znaj(i1) { 19825 i1 = i1 | 0; 19826 var i2 = 0; 19827 i2 = STACKTOP; 19828 i1 = __Znwj(i1) | 0; 19829 STACKTOP = i2; 19830 return i1 | 0; 19831 } 19832 function __ZN11b2EdgeShapeD0Ev(i1) { 19833 i1 = i1 | 0; 19834 var i2 = 0; 19835 i2 = STACKTOP; 19836 __ZdlPv(i1); 19837 STACKTOP = i2; 19838 return; 19839 } 19840 function __ZN9b2ContactD0Ev(i1) { 19841 i1 = i1 | 0; 19842 var i2 = 0; 19843 i2 = STACKTOP; 19844 __ZdlPv(i1); 19845 STACKTOP = i2; 19846 return; 19847 } 19848 function b1(i1, i2, i3, i4, i5) { 19849 i1 = i1 | 0; 19850 i2 = i2 | 0; 19851 i3 = i3 | 0; 19852 i4 = i4 | 0; 19853 i5 = i5 | 0; 19854 abort(1); 19855 } 19856 function __Z6b2FreePv(i1) { 19857 i1 = i1 | 0; 19858 var i2 = 0; 19859 i2 = STACKTOP; 19860 _free(i1); 19861 STACKTOP = i2; 19862 return; 19863 } 19864 function ___clang_call_terminate(i1) { 19865 i1 = i1 | 0; 19866 ___cxa_begin_catch(i1 | 0) | 0; 19867 __ZSt9terminatev(); 19868 } 19869 function __ZN17b2ContactListener12BeginContactEP9b2Contact(i1, i2) { 19870 i1 = i1 | 0; 19871 i2 = i2 | 0; 19872 return; 19873 } 19874 function dynCall_ii(i2, i1) { 19875 i2 = i2 | 0; 19876 i1 = i1 | 0; 19877 return FUNCTION_TABLE_ii[i2 & 3](i1 | 0) | 0; 19878 } 19879 function __ZN17b2ContactListener10EndContactEP9b2Contact(i1, i2) { 19880 i1 = i1 | 0; 19881 i2 = i2 | 0; 19882 return; 19883 } 19884 function b11(i1, i2, i3, i4) { 19885 i1 = i1 | 0; 19886 i2 = i2 | 0; 19887 i3 = i3 | 0; 19888 i4 = i4 | 0; 19889 abort(11); 19890 } 19891 function dynCall_vi(i2, i1) { 19892 i2 = i2 | 0; 19893 i1 = i1 | 0; 19894 FUNCTION_TABLE_vi[i2 & 31](i1 | 0); 19895 } 19896 function b0(i1, i2, i3) { 19897 i1 = i1 | 0; 19898 i2 = i2 | 0; 19899 i3 = i3 | 0; 19900 abort(0); 19901 return 0; 19902 } 19903 function __ZNK10__cxxabiv116__shim_type_info5noop2Ev(i1) { 19904 i1 = i1 | 0; 19905 return; 19906 } 19907 function __ZNK10__cxxabiv116__shim_type_info5noop1Ev(i1) { 19908 i1 = i1 | 0; 19909 return; 19910 } 19911 function b5(i1, i2, i3) { 19912 i1 = i1 | 0; 19913 i2 = i2 | 0; 19914 i3 = i3 | 0; 19915 abort(5); 19916 } 19917 function __ZNK14b2PolygonShape13GetChildCountEv(i1) { 19918 i1 = i1 | 0; 19919 return 1; 19920 } 19921 function __ZN10__cxxabiv116__shim_type_infoD2Ev(i1) { 19922 i1 = i1 | 0; 19923 return; 19924 } 19925 function b7(i1, i2, d3) { 19926 i1 = i1 | 0; 19927 i2 = i2 | 0; 19928 d3 = +d3; 19929 abort(7); 19930 } 19931 function __ZNK11b2EdgeShape13GetChildCountEv(i1) { 19932 i1 = i1 | 0; 19933 return 1; 19934 } 19935 function __ZNK7b2Timer15GetMillisecondsEv(i1) { 19936 i1 = i1 | 0; 19937 return 0.0; 19938 } 19939 function __ZN25b2PolygonAndCircleContactD1Ev(i1) { 19940 i1 = i1 | 0; 19941 return; 19942 } 19943 function __ZN24b2ChainAndPolygonContactD1Ev(i1) { 19944 i1 = i1 | 0; 19945 return; 19946 } 19947 function b9(i1, i2) { 19948 i1 = i1 | 0; 19949 i2 = i2 | 0; 19950 abort(9); 19951 return 0; 19952 } 19953 function __ZN23b2EdgeAndPolygonContactD1Ev(i1) { 19954 i1 = i1 | 0; 19955 return; 19956 } 19957 function __ZN23b2ChainAndCircleContactD1Ev(i1) { 19958 i1 = i1 | 0; 19959 return; 19960 } 19961 function __ZN22b2EdgeAndCircleContactD1Ev(i1) { 19962 i1 = i1 | 0; 19963 return; 19964 } 19965 function dynCall_v(i1) { 19966 i1 = i1 | 0; 19967 FUNCTION_TABLE_v[i1 & 3](); 19968 } 19969 function __ZNKSt9bad_alloc4whatEv(i1) { 19970 i1 = i1 | 0; 19971 return 7688; 19972 } 19973 function ___cxa_pure_virtual__wrapper() { 19974 ___cxa_pure_virtual(); 19975 } 19976 function __ZN17b2ContactListenerD1Ev(i1) { 19977 i1 = i1 | 0; 19978 return; 19979 } 19980 function __ZN16b2PolygonContactD1Ev(i1) { 19981 i1 = i1 | 0; 19982 return; 19983 } 19984 function __ZN15b2ContactFilterD1Ev(i1) { 19985 i1 = i1 | 0; 19986 return; 19987 } 19988 function __ZN15b2CircleContactD1Ev(i1) { 19989 i1 = i1 | 0; 19990 return; 19991 } 19992 function __ZN14b2PolygonShapeD1Ev(i1) { 19993 i1 = i1 | 0; 19994 return; 19995 } 19996 function b3(i1, i2) { 19997 i1 = i1 | 0; 19998 i2 = i2 | 0; 19999 abort(3); 20000 } 20001 function runPostSets() { 20002 HEAP32[1932] = __ZTISt9exception; 20003 } 20004 function __ZN11b2EdgeShapeD1Ev(i1) { 20005 i1 = i1 | 0; 20006 return; 20007 } 20008 function __ZNSt9type_infoD2Ev(i1) { 20009 i1 = i1 | 0; 20010 return; 20011 } 20012 function __ZN7b2Timer5ResetEv(i1) { 20013 i1 = i1 | 0; 20014 return; 20015 } 20016 function stackRestore(i1) { 20017 i1 = i1 | 0; 20018 STACKTOP = i1; 20019 } 20020 function setTempRet9(i1) { 20021 i1 = i1 | 0; 20022 tempRet9 = i1; 20023 } 20024 function setTempRet8(i1) { 20025 i1 = i1 | 0; 20026 tempRet8 = i1; 20027 } 20028 function setTempRet7(i1) { 20029 i1 = i1 | 0; 20030 tempRet7 = i1; 20031 } 20032 function setTempRet6(i1) { 20033 i1 = i1 | 0; 20034 tempRet6 = i1; 20035 } 20036 function setTempRet5(i1) { 20037 i1 = i1 | 0; 20038 tempRet5 = i1; 20039 } 20040 function setTempRet4(i1) { 20041 i1 = i1 | 0; 20042 tempRet4 = i1; 20043 } 20044 function setTempRet3(i1) { 20045 i1 = i1 | 0; 20046 tempRet3 = i1; 20047 } 20048 function setTempRet2(i1) { 20049 i1 = i1 | 0; 20050 tempRet2 = i1; 20051 } 20052 function setTempRet1(i1) { 20053 i1 = i1 | 0; 20054 tempRet1 = i1; 20055 } 20056 function setTempRet0(i1) { 20057 i1 = i1 | 0; 20058 tempRet0 = i1; 20059 } 20060 function __ZN9b2ContactD1Ev(i1) { 20061 i1 = i1 | 0; 20062 return; 20063 } 20064 function __ZN7b2TimerC2Ev(i1) { 20065 i1 = i1 | 0; 20066 return; 20067 } 20068 function b4(i1) { 20069 i1 = i1 | 0; 20070 abort(4); 20071 return 0; 20072 } 20073 function stackSave() { 20074 return STACKTOP | 0; 20075 } 20076 function b2(i1) { 20077 i1 = i1 | 0; 20078 abort(2); 20079 } 20080 function b6() { 20081 abort(6); 20082 } 20083 20084 // EMSCRIPTEN_END_FUNCS 20085 var FUNCTION_TABLE_iiii = [b0,__ZNK11b2EdgeShape9TestPointERK11b2TransformRK6b2Vec2,__ZNK14b2PolygonShape9TestPointERK11b2TransformRK6b2Vec2,__ZN15b2ContactFilter13ShouldCollideEP9b2FixtureS1_,__ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv,b0,b0,b0]; 20086 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]; 20087 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 20088 ,__ZN10__cxxabiv120__si_class_type_infoD0Ev,__ZNSt9bad_allocD2Ev,__ZNSt9bad_allocD0Ev]; 20089 var FUNCTION_TABLE_vii = [b3,__ZN17b2ContactListener12BeginContactEP9b2Contact,__ZN17b2ContactListener10EndContactEP9b2Contact,__ZN15b2CircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN25b2PolygonAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN16b2PolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN22b2EdgeAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN23b2EdgeAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN23b2ChainAndCircleContact7DestroyEP9b2ContactP16b2BlockAllocator,__ZN24b2ChainAndPolygonContact7DestroyEP9b2ContactP16b2BlockAllocator,b3,b3,b3,b3,b3,b3]; 20090 var FUNCTION_TABLE_ii = [b4,__ZNK11b2EdgeShape13GetChildCountEv,__ZNK14b2PolygonShape13GetChildCountEv,__ZNKSt9bad_alloc4whatEv]; 20091 var FUNCTION_TABLE_viii = [b5,__ZN17b2ContactListener8PreSolveEP9b2ContactPK10b2Manifold,__ZN17b2ContactListener9PostSolveEP9b2ContactPK16b2ContactImpulse,b5]; 20092 var FUNCTION_TABLE_v = [b6,___cxa_pure_virtual__wrapper,__Z4iterv,b6]; 20093 var FUNCTION_TABLE_viid = [b7,__ZNK11b2EdgeShape11ComputeMassEP10b2MassDataf,__ZNK14b2PolygonShape11ComputeMassEP10b2MassDataf,b7]; 20094 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]; 20095 var FUNCTION_TABLE_iii = [b9,__ZNK11b2EdgeShape5CloneEP16b2BlockAllocator,__ZNK14b2PolygonShape5CloneEP16b2BlockAllocator,__Z14b2PairLessThanRK6b2PairS1_]; 20096 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]; 20097 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]; 20098 20099 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 }; 20100 }) 20101 // EMSCRIPTEN_END_ASM 20102 ({ "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array }, { "abort": abort, "assert": assert, "asmPrintInt": asmPrintInt, "asmPrintFloat": asmPrintFloat, "min": Math_min, "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); 20103 var _strlen = Module["_strlen"] = asm["_strlen"]; 20104 var _free = Module["_free"] = asm["_free"]; 20105 var _main = Module["_main"] = asm["_main"]; 20106 var _memset = Module["_memset"] = asm["_memset"]; 20107 var _malloc = Module["_malloc"] = asm["_malloc"]; 20108 var _memcpy = Module["_memcpy"] = asm["_memcpy"]; 20109 var runPostSets = Module["runPostSets"] = asm["runPostSets"]; 20110 var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"]; 20111 var dynCall_viiiii = Module["dynCall_viiiii"] = asm["dynCall_viiiii"]; 20112 var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"]; 20113 var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"]; 20114 var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"]; 20115 var dynCall_viii = Module["dynCall_viii"] = asm["dynCall_viii"]; 20116 var dynCall_v = Module["dynCall_v"] = asm["dynCall_v"]; 20117 var dynCall_viid = Module["dynCall_viid"] = asm["dynCall_viid"]; 20118 var dynCall_viiiiii = Module["dynCall_viiiiii"] = asm["dynCall_viiiiii"]; 20119 var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"]; 20120 var dynCall_iiiiii = Module["dynCall_iiiiii"] = asm["dynCall_iiiiii"]; 20121 var dynCall_viiii = Module["dynCall_viiii"] = asm["dynCall_viiii"]; 20122 20123 Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) }; 20124 Runtime.stackSave = function() { return asm['stackSave']() }; 20125 Runtime.stackRestore = function(top) { asm['stackRestore'](top) }; 20126 20127 20128 // Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included 20129 var i64Math = null; 20130 20131 // === Auto-generated postamble setup entry stuff === 20132 20133 if (memoryInitializer) { 20134 if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) { 20135 var data = Module['readBinary'](memoryInitializer); 20136 HEAPU8.set(data, STATIC_BASE); 20137 } else { 20138 addRunDependency('memory initializer'); 20139 Browser.asyncLoad(memoryInitializer, function(data) { 20140 HEAPU8.set(data, STATIC_BASE); 20141 removeRunDependency('memory initializer'); 20142 }, function(data) { 20143 throw 'could not load memory initializer ' + memoryInitializer; 20144 }); 20145 } 20146 } 20147 20148 function ExitStatus(status) { 20149 this.name = "ExitStatus"; 20150 this.message = "Program terminated with exit(" + status + ")"; 20151 this.status = status; 20152 }; 20153 ExitStatus.prototype = new Error(); 20154 ExitStatus.prototype.constructor = ExitStatus; 20155 20156 var initialStackTop; 20157 var preloadStartTime = null; 20158 var calledMain = false; 20159 20160 dependenciesFulfilled = function runCaller() { 20161 // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) 20162 if (!Module['calledRun'] && shouldRunNow) run([].concat(Module["arguments"])); 20163 if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled 20164 } 20165 20166 Module['callMain'] = Module.callMain = function callMain(args) { 20167 assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)'); 20168 assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called'); 20169 20170 args = args || []; 20171 20172 ensureInitRuntime(); 20173 20174 var argc = args.length+1; 20175 function pad() { 20176 for (var i = 0; i < 4-1; i++) { 20177 argv.push(0); 20178 } 20179 } 20180 var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL) ]; 20181 pad(); 20182 for (var i = 0; i < argc-1; i = i + 1) { 20183 argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL)); 20184 pad(); 20185 } 20186 argv.push(0); 20187 argv = allocate(argv, 'i32', ALLOC_NORMAL); 20188 20189 initialStackTop = STACKTOP; 20190 20191 try { 20192 20193 var ret = Module['_main'](argc, argv, 0); 20194 20195 20196 // if we're not running an evented main loop, it's time to exit 20197 if (!Module['noExitRuntime']) { 20198 exit(ret); 20199 } 20200 } 20201 catch(e) { 20202 if (e instanceof ExitStatus) { 20203 // exit() throws this once it's done to make sure execution 20204 // has been stopped completely 20205 return; 20206 } else if (e == 'SimulateInfiniteLoop') { 20207 // running an evented main loop, don't immediately exit 20208 Module['noExitRuntime'] = true; 20209 return; 20210 } else { 20211 if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]); 20212 throw e; 20213 } 20214 } finally { 20215 calledMain = true; 20216 } 20217 } 20218 20219 20220 20221 20222 function run(args) { 20223 args = args || Module['arguments']; 20224 20225 if (preloadStartTime === null) preloadStartTime = Date.now(); 20226 20227 if (runDependencies > 0) { 20228 Module.printErr('run() called, but dependencies remain, so not running'); 20229 return; 20230 } 20231 20232 preRun(); 20233 20234 if (runDependencies > 0) return; // a preRun added a dependency, run will be called later 20235 if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame 20236 20237 function doRun() { 20238 if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening 20239 Module['calledRun'] = true; 20240 20241 ensureInitRuntime(); 20242 20243 preMain(); 20244 20245 if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) { 20246 Module.printErr('pre-main prep time: ' + (Date.now() - preloadStartTime) + ' ms'); 20247 } 20248 20249 if (Module['_main'] && shouldRunNow) { 20250 Module['callMain'](args); 20251 } 20252 20253 postRun(); 20254 } 20255 20256 if (Module['setStatus']) { 20257 Module['setStatus']('Running...'); 20258 setTimeout(function() { 20259 setTimeout(function() { 20260 Module['setStatus'](''); 20261 }, 1); 20262 if (!ABORT) doRun(); 20263 }, 1); 20264 } else { 20265 doRun(); 20266 } 20267 } 20268 Module['run'] = Module.run = run; 20269 20270 function exit(status) { 20271 ABORT = true; 20272 EXITSTATUS = status; 20273 STACKTOP = initialStackTop; 20274 20275 // exit the runtime 20276 exitRuntime(); 20277 20278 // TODO We should handle this differently based on environment. 20279 // In the browser, the best we can do is throw an exception 20280 // to halt execution, but in node we could process.exit and 20281 // I'd imagine SM shell would have something equivalent. 20282 // This would let us set a proper exit status (which 20283 // would be great for checking test exit statuses). 20284 // https://github.com/kripken/emscripten/issues/1371 20285 20286 // throw an exception to halt the current execution 20287 throw new ExitStatus(status); 20288 } 20289 Module['exit'] = Module.exit = exit; 20290 20291 function abort(text) { 20292 if (text) { 20293 Module.print(text); 20294 Module.printErr(text); 20295 } 20296 20297 ABORT = true; 20298 EXITSTATUS = 1; 20299 20300 var extra = '\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.'; 20301 20302 throw 'abort() at ' + stackTrace() + extra; 20303 } 20304 Module['abort'] = Module.abort = abort; 20305 20306 // {{PRE_RUN_ADDITIONS}} 20307 20308 if (Module['preInit']) { 20309 if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; 20310 while (Module['preInit'].length > 0) { 20311 Module['preInit'].pop()(); 20312 } 20313 } 20314 20315 // shouldRunNow refers to calling main(), not run(). 20316 var shouldRunNow = true; 20317 if (Module['noInitialRun']) { 20318 shouldRunNow = false; 20319 } 20320 20321 20322 run([].concat(Module["arguments"])); 20323