VulpesOS/assets/webapps/keyboard.gaiamobile.org/js/imes/jspinyin/libpinyin.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

28531 lines
1,001 KiB
JavaScript

// Note: For maximum-speed code, see "Optimizing Code" on the Emscripten wiki, https://github.com/kripken/emscripten/wiki/Optimizing-Code
// Note: Some Emscripten settings may limit the speed of the generated code.
// The Module object: Our interface to the outside world. We import
// and export values on it, and do the work to get that through
// closure compiler if necessary. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(Module) { ..generated code.. }
// 3. pre-run appended it, var Module = {}; ..generated code..
// 4. External script tag defines var Module.
// We need to do an eval in order to handle the closure compiler
// case, where this code here is minified but Module was defined
// elsewhere (e.g. case 4 above). We also need to check if Module
// already exists (e.g. case 3 above).
// Note that if you want to run closure, and also to use Module
// after the generated code, you will need to define var Module = {};
// before the code. Then that object will be used in the code, and you
// can continue to use Module afterwards as well.
var Module;
if (!Module) Module = eval('(function() { try { return Module || {} } catch(e) { return {} } })()');
(function(Module) {
// We need to put this library in Web Workers so we can't acess the 'document'
// object in this file. In fact, this library doesn't really need the 'document'
// object for our purpose, so we create a dummy object for it.
var document = { addEventListener: function() {} };
// Sometimes an existing Module object exists with properties
// meant to overwrite the default module functionality. Here
// we collect those properties and reapply _after_ we configure
// the current environment's defaults to avoid having to be so
// defensive during initialization.
var moduleOverrides = {};
for (var key in Module) {
if (Module.hasOwnProperty(key)) {
moduleOverrides[key] = Module[key];
}
}
// The environment setup code below is customized to use Module.
// *** Environment setup code ***
var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
var ENVIRONMENT_IS_WEB = typeof window === 'object';
var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
if (ENVIRONMENT_IS_NODE) {
// Expose functionality in the same simple way that the shells work
// Note that we pollute the global namespace here, otherwise we break in node
Module['print'] = function(x) {
process['stdout'].write(x + '\n');
};
Module['printErr'] = function(x) {
process['stderr'].write(x + '\n');
};
var nodeFS = require('fs');
var nodePath = require('path');
Module['read'] = function(filename, binary) {
filename = nodePath['normalize'](filename);
var ret = nodeFS['readFileSync'](filename);
// The path is absolute if the normalized version is the same as the resolved.
if (!ret && filename != nodePath['resolve'](filename)) {
filename = path.join(__dirname, '..', 'src', filename);
ret = nodeFS['readFileSync'](filename);
}
if (ret && !binary) ret = ret.toString();
return ret;
};
Module['readBinary'] = function(filename) { return Module['read'](filename, true) };
Module['load'] = function(f) {
globalEval(read(f));
};
Module['arguments'] = process['argv'].slice(2);
module.exports = Module;
}
if (ENVIRONMENT_IS_SHELL) {
Module['print'] = print;
if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
Module['read'] = read;
Module['readBinary'] = function(f) {
return read(f, 'binary');
};
if (typeof scriptArgs != 'undefined') {
Module['arguments'] = scriptArgs;
} else if (typeof arguments != 'undefined') {
Module['arguments'] = arguments;
}
this['Module'] = Module;
}
if (ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER) {
Module['print'] = function(x) {
console.log(x);
};
Module['printErr'] = function(x) {
console.log(x);
};
this['Module'] = Module;
}
if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
Module['read'] = function(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.send(null);
return xhr.responseText;
};
if (typeof arguments != 'undefined') {
Module['arguments'] = arguments;
}
}
if (ENVIRONMENT_IS_WORKER) {
// We can do very little here...
var TRY_USE_DUMP = false;
Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
dump(x);
}) : (function(x) {
// self.postMessage(x); // enable this if you want stdout to be sent as messages
}));
Module['load'] = importScripts;
}
if (!ENVIRONMENT_IS_WORKER && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_SHELL) {
// Unreachable because SHELL is dependant on the others
throw 'Unknown runtime environment. Where are we?';
}
function globalEval(x) {
eval.call(null, x);
}
if (!Module['load'] && Module['read']) {
Module['load'] = function(f) {
globalEval(Module['read'](f));
};
}
if (!Module['print']) {
Module['print'] = function(){};
}
if (!Module['printErr']) {
Module['printErr'] = Module['print'];
}
if (!Module['arguments']) {
Module['arguments'] = [];
}
// *** Environment setup code ***
// Closure helpers
Module.print = Module['print'];
Module.printErr = Module['printErr'];
// Callbacks
Module['preRun'] = [];
Module['postRun'] = [];
// Merge back in the overrides
for (var key in moduleOverrides) {
if (moduleOverrides.hasOwnProperty(key)) {
Module[key] = moduleOverrides[key];
}
}
// === Auto-generated preamble library stuff ===
//========================================
// Runtime code shared with compiler
//========================================
var Runtime = {
stackSave: function () {
return STACKTOP;
},
stackRestore: function (stackTop) {
STACKTOP = stackTop;
},
forceAlign: function (target, quantum) {
quantum = quantum || 4;
if (quantum == 1) return target;
if (isNumber(target) && isNumber(quantum)) {
return Math.ceil(target/quantum)*quantum;
} else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
var logg = log2(quantum);
return '((((' +target + ')+' + (quantum-1) + ')>>' + logg + ')<<' + logg + ')';
}
return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
},
isNumberType: function (type) {
return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
},
isPointerType: function isPointerType(type) {
return type[type.length-1] == '*';
},
isStructType: function isStructType(type) {
if (isPointerType(type)) return false;
if (isArrayType(type)) return true;
if (/<?{ ?[^}]* ?}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types
// See comment in isStructPointerType()
return type[0] == '%';
},
INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
FLOAT_TYPES: {"float":0,"double":0},
or64: function (x, y) {
var l = (x | 0) | (y | 0);
var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
return l + h;
},
and64: function (x, y) {
var l = (x | 0) & (y | 0);
var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
return l + h;
},
xor64: function (x, y) {
var l = (x | 0) ^ (y | 0);
var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
return l + h;
},
getNativeTypeSize: function (type, quantumSize) {
if (Runtime.QUANTUM_SIZE == 1) return 1;
var size = {
'%i1': 1,
'%i8': 1,
'%i16': 2,
'%i32': 4,
'%i64': 8,
"%float": 4,
"%double": 8
}['%'+type]; // add '%' since float and double confuse Closure compiler as keys, and also spidermonkey as a compiler will remove 's from '_i8' etc
if (!size) {
if (type.charAt(type.length-1) == '*') {
size = Runtime.QUANTUM_SIZE; // A pointer
} else if (type[0] == 'i') {
var bits = parseInt(type.substr(1));
assert(bits % 8 == 0);
size = bits/8;
}
}
return size;
},
getNativeFieldSize: function (type) {
return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
},
dedup: function dedup(items, ident) {
var seen = {};
if (ident) {
return items.filter(function(item) {
if (seen[item[ident]]) return false;
seen[item[ident]] = true;
return true;
});
} else {
return items.filter(function(item) {
if (seen[item]) return false;
seen[item] = true;
return true;
});
}
},
set: function set() {
var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
var ret = {};
for (var i = 0; i < args.length; i++) {
ret[args[i]] = 0;
}
return ret;
},
STACK_ALIGN: 8,
getAlignSize: function (type, size, vararg) {
// we align i64s and doubles on 64-bit boundaries, unlike x86
if (type == 'i64' || type == 'double' || vararg) return 8;
if (!type) return Math.min(size, 8); // align structures internally to 64 bits
return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
},
calculateStructAlignment: function calculateStructAlignment(type) {
type.flatSize = 0;
type.alignSize = 0;
var diffs = [];
var prev = -1;
var index = 0;
type.flatIndexes = type.fields.map(function(field) {
index++;
var size, alignSize;
if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
alignSize = Runtime.getAlignSize(field, size);
} else if (Runtime.isStructType(field)) {
if (field[1] === '0') {
// this is [0 x something]. When inside another structure like here, it must be at the end,
// and it adds no size
// XXX this happens in java-nbody for example... assert(index === type.fields.length, 'zero-length in the middle!');
size = 0;
alignSize = type.alignSize || QUANTUM_SIZE;
} else {
size = Types.types[field].flatSize;
alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
}
} else if (field[0] == 'b') {
// bN, large number field, like a [N x i8]
size = field.substr(1)|0;
alignSize = 1;
} else {
throw 'Unclear type in struct: ' + field + ', in ' + type.name_ + ' :: ' + dump(Types.types[type.name_]);
}
if (type.packed) alignSize = 1;
type.alignSize = Math.max(type.alignSize, alignSize);
var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
type.flatSize = curr + size;
if (prev >= 0) {
diffs.push(curr-prev);
}
prev = curr;
return curr;
});
type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
if (diffs.length == 0) {
type.flatFactor = type.flatSize;
} else if (Runtime.dedup(diffs).length == 1) {
type.flatFactor = diffs[0];
}
type.needsFlattening = (type.flatFactor != 1);
return type.flatIndexes;
},
generateStructInfo: function (struct, typeName, offset) {
var type, alignment;
if (typeName) {
offset = offset || 0;
type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName];
if (!type) return null;
if (type.fields.length != struct.length) {
printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
return null;
}
alignment = type.flatIndexes;
} else {
var type = { fields: struct.map(function(item) { return item[0] }) };
alignment = Runtime.calculateStructAlignment(type);
}
var ret = {
__size__: type.flatSize
};
if (typeName) {
struct.forEach(function(item, i) {
if (typeof item === 'string') {
ret[item] = alignment[i] + offset;
} else {
// embedded struct
var key;
for (var k in item) key = k;
ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]);
}
});
} else {
struct.forEach(function(item, i) {
ret[item[1]] = alignment[i];
});
}
return ret;
},
dynCall: function (sig, ptr, args) {
if (args && args.length) {
if (!args.splice) args = Array.prototype.slice.call(args);
args.splice(0, 0, ptr);
return Module['dynCall_' + sig].apply(null, args);
} else {
return Module['dynCall_' + sig].call(null, ptr);
}
},
functionPointers: [],
addFunction: function (func) {
for (var i = 0; i < Runtime.functionPointers.length; i++) {
if (!Runtime.functionPointers[i]) {
Runtime.functionPointers[i] = func;
return 2 + 2*i;
}
}
throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
},
removeFunction: function (index) {
Runtime.functionPointers[(index-2)/2] = null;
},
warnOnce: function (text) {
if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
if (!Runtime.warnOnce.shown[text]) {
Runtime.warnOnce.shown[text] = 1;
Module.printErr(text);
}
},
funcWrappers: {},
getFuncWrapper: function (func, sig) {
assert(sig);
if (!Runtime.funcWrappers[func]) {
Runtime.funcWrappers[func] = function() {
return Runtime.dynCall(sig, func, arguments);
};
}
return Runtime.funcWrappers[func];
},
UTF8Processor: function () {
var buffer = [];
var needed = 0;
this.processCChar = function (code) {
code = code & 0xff;
if (needed) {
buffer.push(code);
needed--;
}
if (buffer.length == 0) {
if (code < 128) return String.fromCharCode(code);
buffer.push(code);
if (code > 191 && code < 224) {
needed = 1;
} else {
needed = 2;
}
return '';
}
if (needed > 0) return '';
var c1 = buffer[0];
var c2 = buffer[1];
var c3 = buffer[2];
var ret;
if (c1 > 191 && c1 < 224) {
ret = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
} else {
ret = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
}
buffer.length = 0;
return ret;
}
this.processJSString = function(string) {
string = unescape(encodeURIComponent(string));
var ret = [];
for (var i = 0; i < string.length; i++) {
ret.push(string.charCodeAt(i));
}
return ret;
}
},
stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = ((((STACKTOP)+7)>>3)<<3); return ret; },
staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = ((((STATICTOP)+7)>>3)<<3); return ret; },
dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = ((((DYNAMICTOP)+7)>>3)<<3); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; },
alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+(((low)>>>(0))))+((+(((high)>>>(0))))*(+(4294967296)))) : ((+(((low)>>>(0))))+((+(((high)|(0))))*(+(4294967296))))); return ret; },
GLOBAL_BASE: 8,
QUANTUM_SIZE: 4,
__dummy__: 0
}
//========================================
// Runtime essentials
//========================================
var __THREW__ = 0; // Used in checking for thrown exceptions.
var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
var undef = 0;
// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD;
var tempI64, tempI64b;
var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
function assert(condition, text) {
if (!condition) {
abort('Assertion failed: ' + text);
}
}
var globalScope = this;
// C calling interface. A convenient way to call C functions (in C files, or
// defined with extern "C").
//
// Note: LLVM optimizations can inline and remove functions, after which you will not be
// able to call them. Closure can also do so. To avoid that, add your function to
// the exports using something like
//
// -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
//
// @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C")
// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
// 'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit).
// @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,
// except that 'array' is not possible (there is no way for us to know the length of the array)
// @param args An array of the arguments to the function, as native JS values (as in returnType)
// Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
// @return The return value, as a native JS value (as in returnType)
function ccall(ident, returnType, argTypes, args) {
return ccallFunc(getCFunc(ident), returnType, argTypes, args);
}
Module["ccall"] = ccall;
// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
function getCFunc(ident) {
try {
var func = Module['_' + ident]; // closure exported function
if (!func) func = eval('_' + ident); // explicit lookup
} catch(e) {
}
assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
return func;
}
// Internal function that does a C call using a function, not an identifier
function ccallFunc(func, returnType, argTypes, args) {
var stack = 0;
function toC(value, type) {
if (type == 'string') {
if (value === null || value === undefined || value === 0) return 0; // null string
if (!stack) stack = Runtime.stackSave();
var ret = Runtime.stackAlloc(value.length+1);
writeStringToMemory(value, ret);
return ret;
} else if (type == 'array') {
if (!stack) stack = Runtime.stackSave();
var ret = Runtime.stackAlloc(value.length);
writeArrayToMemory(value, ret);
return ret;
}
return value;
}
function fromC(value, type) {
if (type == 'string') {
return Pointer_stringify(value);
}
assert(type != 'array');
return value;
}
var i = 0;
var cArgs = args ? args.map(function(arg) {
return toC(arg, argTypes[i++]);
}) : [];
var ret = fromC(func.apply(null, cArgs), returnType);
if (stack) Runtime.stackRestore(stack);
return ret;
}
// Returns a native JS wrapper for a C function. This is similar to ccall, but
// returns a function you can call repeatedly in a normal way. For example:
//
// var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
// alert(my_function(5, 22));
// alert(my_function(99, 12));
//
function cwrap(ident, returnType, argTypes) {
var func = getCFunc(ident);
return function() {
return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments));
}
}
Module["cwrap"] = cwrap;
// Sets a value in memory in a dynamic way at run-time. Uses the
// type data. This is the same as makeSetValue, except that
// makeSetValue is done at compile-time and generates the needed
// code then, whereas this function picks the right code at
// run-time.
// Note that setValue and getValue only do *aligned* writes and reads!
// Note that ccall uses JS types as for defining types, while setValue and
// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
function setValue(ptr, value, type, noSafe) {
type = type || 'i8';
if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
switch(type) {
case 'i1': HEAP8[(ptr)]=value; break;
case 'i8': HEAP8[(ptr)]=value; break;
case 'i16': HEAP16[((ptr)>>1)]=value; break;
case 'i32': HEAP32[((ptr)>>2)]=value; break;
case 'i64': (tempI64 = [value>>>0,((Math.min((+(Math.floor((value)/(+(4294967296))))), (+(4294967295))))|0)>>>0],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
case 'float': HEAPF32[((ptr)>>2)]=value; break;
case 'double': HEAPF64[((ptr)>>3)]=value; break;
default: abort('invalid type for setValue: ' + type);
}
}
Module['setValue'] = setValue;
// Parallel to setValue.
function getValue(ptr, type, noSafe) {
type = type || 'i8';
if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
switch(type) {
case 'i1': return HEAP8[(ptr)];
case 'i8': return HEAP8[(ptr)];
case 'i16': return HEAP16[((ptr)>>1)];
case 'i32': return HEAP32[((ptr)>>2)];
case 'i64': return HEAP32[((ptr)>>2)];
case 'float': return HEAPF32[((ptr)>>2)];
case 'double': return HEAPF64[((ptr)>>3)];
default: abort('invalid type for setValue: ' + type);
}
return null;
}
Module['getValue'] = getValue;
var ALLOC_NORMAL = 0; // Tries to use _malloc()
var ALLOC_STACK = 1; // Lives for the duration of the current function call
var ALLOC_STATIC = 2; // Cannot be freed
var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
var ALLOC_NONE = 4; // Do not allocate
Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
Module['ALLOC_STACK'] = ALLOC_STACK;
Module['ALLOC_STATIC'] = ALLOC_STATIC;
Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
Module['ALLOC_NONE'] = ALLOC_NONE;
// allocate(): This is for internal use. You can use it yourself as well, but the interface
// is a little tricky (see docs right below). The reason is that it is optimized
// for multiple syntaxes to save space in generated code. So you should
// normally not use allocate(), and instead allocate memory using _malloc(),
// initialize it with setValue(), and so forth.
// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
// in *bytes* (note that this is sometimes confusing: the next parameter does not
// affect this!)
// @types: Either an array of types, one for each byte (or 0 if no type at that position),
// or a single type which is used for the entire block. This only matters if there
// is initial data - if @slab is a number, then this does not matter at all and is
// ignored.
// @allocator: How to allocate memory, see ALLOC_*
function allocate(slab, types, allocator, ptr) {
var zeroinit, size;
if (typeof slab === 'number') {
zeroinit = true;
size = slab;
} else {
zeroinit = false;
size = slab.length;
}
var singleType = typeof types === 'string' ? types : null;
var ret;
if (allocator == ALLOC_NONE) {
ret = ptr;
} else {
ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
}
if (zeroinit) {
var ptr = ret, stop;
assert((ret & 3) == 0);
stop = ret + (size & ~3);
for (; ptr < stop; ptr += 4) {
HEAP32[((ptr)>>2)]=0;
}
stop = ret + size;
while (ptr < stop) {
HEAP8[((ptr++)|0)]=0;
}
return ret;
}
if (singleType === 'i8') {
if (slab.subarray || slab.slice) {
HEAPU8.set(slab, ret);
} else {
HEAPU8.set(new Uint8Array(slab), ret);
}
return ret;
}
var i = 0, type, typeSize, previousType;
while (i < size) {
var curr = slab[i];
if (typeof curr === 'function') {
curr = Runtime.getFunctionIndex(curr);
}
type = singleType || types[i];
if (type === 0) {
i++;
continue;
}
if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
setValue(ret+i, curr, type);
// no need to look up size unless type changes, so cache it
if (previousType !== type) {
typeSize = Runtime.getNativeTypeSize(type);
previousType = type;
}
i += typeSize;
}
return ret;
}
Module['allocate'] = allocate;
function Pointer_stringify(ptr, /* optional */ length) {
// Find the length, and check for UTF while doing so
var hasUtf = false;
var t;
var i = 0;
while (1) {
t = HEAPU8[(((ptr)+(i))|0)];
if (t >= 128) hasUtf = true;
else if (t == 0 && !length) break;
i++;
if (length && i == length) break;
}
if (!length) length = i;
var ret = '';
if (!hasUtf) {
var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
var curr;
while (length > 0) {
curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
ret = ret ? ret + curr : curr;
ptr += MAX_CHUNK;
length -= MAX_CHUNK;
}
return ret;
}
var utf8 = new Runtime.UTF8Processor();
for (i = 0; i < length; i++) {
t = HEAPU8[(((ptr)+(i))|0)];
ret += utf8.processCChar(t);
}
return ret;
}
Module['Pointer_stringify'] = Pointer_stringify;
// Memory management
var PAGE_SIZE = 4096;
function alignMemoryPage(x) {
return ((x+4095)>>12)<<12;
}
var HEAP;
var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
function enlargeMemory() {
abort('Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value, or (2) set Module.TOTAL_MEMORY before the program runs.');
}
var TOTAL_STACK = Module['TOTAL_STACK'] || 131072;
var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 4194304;
var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
// Initialize the runtime's memory
// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
assert(!!Int32Array && !!Float64Array && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
'Cannot fallback to non-typed array case: Code is too specialized');
var buffer = new ArrayBuffer(TOTAL_MEMORY);
HEAP8 = new Int8Array(buffer);
HEAP16 = new Int16Array(buffer);
HEAP32 = new Int32Array(buffer);
HEAPU8 = new Uint8Array(buffer);
HEAPU16 = new Uint16Array(buffer);
HEAPU32 = new Uint32Array(buffer);
HEAPF32 = new Float32Array(buffer);
HEAPF64 = new Float64Array(buffer);
// Endianness check (note: assumes compiler arch was little-endian)
HEAP32[0] = 255;
assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system');
Module['HEAP'] = HEAP;
Module['HEAP8'] = HEAP8;
Module['HEAP16'] = HEAP16;
Module['HEAP32'] = HEAP32;
Module['HEAPU8'] = HEAPU8;
Module['HEAPU16'] = HEAPU16;
Module['HEAPU32'] = HEAPU32;
Module['HEAPF32'] = HEAPF32;
Module['HEAPF64'] = HEAPF64;
function callRuntimeCallbacks(callbacks) {
while(callbacks.length > 0) {
var callback = callbacks.shift();
if (typeof callback == 'function') {
callback();
continue;
}
var func = callback.func;
if (typeof func === 'number') {
if (callback.arg === undefined) {
Runtime.dynCall('v', func);
} else {
Runtime.dynCall('vi', func, [callback.arg]);
}
} else {
func(callback.arg === undefined ? null : callback.arg);
}
}
}
var __ATPRERUN__ = []; // functions called before the runtime is initialized
var __ATINIT__ = []; // functions called during startup
var __ATMAIN__ = []; // functions called when main() is to be run
var __ATEXIT__ = []; // functions called during shutdown
var __ATPOSTRUN__ = []; // functions called after the runtime has exited
var runtimeInitialized = false;
function preRun() {
// compatibility - merge in anything from Module['preRun'] at this time
if (Module['preRun']) {
if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
while (Module['preRun'].length) {
addOnPreRun(Module['preRun'].shift());
}
}
callRuntimeCallbacks(__ATPRERUN__);
}
function ensureInitRuntime() {
if (runtimeInitialized) return;
runtimeInitialized = true;
callRuntimeCallbacks(__ATINIT__);
}
function preMain() {
callRuntimeCallbacks(__ATMAIN__);
}
function exitRuntime() {
callRuntimeCallbacks(__ATEXIT__);
}
function postRun() {
// compatibility - merge in anything from Module['postRun'] at this time
if (Module['postRun']) {
if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
while (Module['postRun'].length) {
addOnPostRun(Module['postRun'].shift());
}
}
callRuntimeCallbacks(__ATPOSTRUN__);
}
function addOnPreRun(cb) {
__ATPRERUN__.unshift(cb);
}
Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun;
function addOnInit(cb) {
__ATINIT__.unshift(cb);
}
Module['addOnInit'] = Module.addOnInit = addOnInit;
function addOnPreMain(cb) {
__ATMAIN__.unshift(cb);
}
Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain;
function addOnExit(cb) {
__ATEXIT__.unshift(cb);
}
Module['addOnExit'] = Module.addOnExit = addOnExit;
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb);
}
Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun;
// Tools
// This processes a JS string into a C-line array of numbers, 0-terminated.
// For LLVM-originating strings, see parser.js:parseLLVMString function
function intArrayFromString(stringy, dontAddNull, length /* optional */) {
var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
if (length) {
ret.length = length;
}
if (!dontAddNull) {
ret.push(0);
}
return ret;
}
Module['intArrayFromString'] = intArrayFromString;
function intArrayToString(array) {
var ret = [];
for (var i = 0; i < array.length; i++) {
var chr = array[i];
if (chr > 0xFF) {
chr &= 0xFF;
}
ret.push(String.fromCharCode(chr));
}
return ret.join('');
}
Module['intArrayToString'] = intArrayToString;
// Write a Javascript array to somewhere in the heap
function writeStringToMemory(string, buffer, dontAddNull) {
var array = intArrayFromString(string, dontAddNull);
var i = 0;
while (i < array.length) {
var chr = array[i];
HEAP8[(((buffer)+(i))|0)]=chr
i = i + 1;
}
}
Module['writeStringToMemory'] = writeStringToMemory;
function writeArrayToMemory(array, buffer) {
for (var i = 0; i < array.length; i++) {
HEAP8[(((buffer)+(i))|0)]=array[i];
}
}
Module['writeArrayToMemory'] = writeArrayToMemory;
function unSign(value, bits, ignore, sig) {
if (value >= 0) {
return value;
}
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
: Math.pow(2, bits) + value;
}
function reSign(value, bits, ignore, sig) {
if (value <= 0) {
return value;
}
var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
: Math.pow(2, bits-1);
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
// but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
// TODO: In i64 mode 1, resign the two parts separately and safely
value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
}
return value;
}
if (!Math['imul']) Math['imul'] = function(a, b) {
var ah = a >>> 16;
var al = a & 0xffff;
var bh = b >>> 16;
var bl = b & 0xffff;
return (al*bl + ((ah*bl + al*bh) << 16))|0;
};
Math.imul = Math['imul'];
// A counter of dependencies for calling run(). If we need to
// do asynchronous work before running, increment this and
// decrement it. Incrementing must happen in a place like
// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
// Note that you can add dependencies in preRun, even though
// it happens right before run - run will be postponed until
// the dependencies are met.
var runDependencies = 0;
var runDependencyTracking = {};
var calledInit = false, calledRun = false;
var runDependencyWatcher = null;
function addRunDependency(id) {
runDependencies++;
if (Module['monitorRunDependencies']) {
Module['monitorRunDependencies'](runDependencies);
}
if (id) {
assert(!runDependencyTracking[id]);
runDependencyTracking[id] = 1;
} else {
Module.printErr('warning: run dependency added without ID');
}
}
Module['addRunDependency'] = addRunDependency;
function removeRunDependency(id) {
runDependencies--;
if (Module['monitorRunDependencies']) {
Module['monitorRunDependencies'](runDependencies);
}
if (id) {
assert(runDependencyTracking[id]);
delete runDependencyTracking[id];
} else {
Module.printErr('warning: run dependency removed without ID');
}
if (runDependencies == 0) {
if (runDependencyWatcher !== null) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
}
// If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
if (!calledRun && shouldRunNow) run();
}
}
Module['removeRunDependency'] = removeRunDependency;
Module["preloadedImages"] = {}; // maps url to image data
Module["preloadedAudios"] = {}; // maps url to audio data
function loadMemoryInitializer(filename) {
function applyData(data) {
HEAPU8.set(data, STATIC_BASE);
}
// always do this asynchronously, to keep shell and web as similar as possible
addOnPreRun(function() {
if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
applyData(Module['readBinary'](filename));
} else {
Browser.asyncLoad(filename, function(data) {
applyData(data);
}, function(data) {
throw 'could not load memory initializer ' + filename;
});
}
});
}
// === Body ===
STATIC_BASE = 8;
STATICTOP = STATIC_BASE + 47432;
/* global initializers */ __ATINIT__.push({ func: function() { runPostSets() } });
var _stderr;
var ___progname;
var __ZTVN10__cxxabiv120__si_class_type_infoE;
var __ZTVN10__cxxabiv119__pointer_type_infoE;
var __ZTVN10__cxxabiv117__class_type_infoE;
var __ZTIy;
var __ZTIx;
var __ZTIt;
var __ZTIs;
var __ZTIm;
var __ZTIl;
var __ZTIj;
var __ZTIi;
var __ZTIh;
var __ZTIf;
var __ZTIe;
var __ZTId;
var __ZTIc;
var __ZTIa;
var __ZN10ime_pinyin11DictBuilderC1Ev;
var __ZN10ime_pinyin11DictBuilderD1Ev;
var __ZN10ime_pinyin8DictTrieC1Ev;
var __ZN10ime_pinyin8DictTrieD1Ev;
var __ZN10ime_pinyin12MatrixSearchC1Ev;
var __ZN10ime_pinyin12MatrixSearchD1Ev;
var __ZN10ime_pinyin5NGramC1Ev;
var __ZN10ime_pinyin5NGramD1Ev;
var __ZN10ime_pinyin12SpellingTrieC1Ev;
var __ZN10ime_pinyin12SpellingTrieD1Ev;
var __ZN10ime_pinyin4SyncC1Ev;
var __ZN10ime_pinyin4SyncD1Ev;
var __ZN10ime_pinyin8DictListC1Ev;
var __ZN10ime_pinyin8DictListD1Ev;
var __ZN10ime_pinyin8LpiCacheC1Ev;
var __ZN10ime_pinyin8LpiCacheD1Ev;
var __ZN10ime_pinyin13SpellingTableC1Ev;
var __ZN10ime_pinyin13SpellingTableD1Ev;
var __ZN10ime_pinyin14SpellingParserC1Ev;
var __ZN10ime_pinyin8UserDictC1Ev;
var __ZN10ime_pinyin8UserDictD1Ev;
var __ZN10ime_pinyin11Utf16ReaderC1Ev;
var __ZN10ime_pinyin11Utf16ReaderD1Ev;
var __ZNSt9type_infoD1Ev;
var __ZNSt8bad_castC1Ev;
var __ZNSt8bad_castD1Ev;
var __ZNSt10bad_typeidC1Ev;
var __ZNSt10bad_typeidD1Ev;
var __ZN10__cxxabiv116__shim_type_infoD1Ev;
var __ZN10__cxxabiv123__fundamental_type_infoD1Ev;
var __ZN10__cxxabiv123__fundamental_type_infoD2Ev;
var __ZN10__cxxabiv117__array_type_infoD1Ev;
var __ZN10__cxxabiv117__array_type_infoD2Ev;
var __ZN10__cxxabiv120__function_type_infoD1Ev;
var __ZN10__cxxabiv120__function_type_infoD2Ev;
var __ZN10__cxxabiv116__enum_type_infoD1Ev;
var __ZN10__cxxabiv116__enum_type_infoD2Ev;
var __ZN10__cxxabiv117__class_type_infoD1Ev;
var __ZN10__cxxabiv117__class_type_infoD2Ev;
var __ZN10__cxxabiv120__si_class_type_infoD1Ev;
var __ZN10__cxxabiv120__si_class_type_infoD2Ev;
var __ZN10__cxxabiv121__vmi_class_type_infoD1Ev;
var __ZN10__cxxabiv121__vmi_class_type_infoD2Ev;
var __ZN10__cxxabiv117__pbase_type_infoD1Ev;
var __ZN10__cxxabiv117__pbase_type_infoD2Ev;
var __ZN10__cxxabiv119__pointer_type_infoD1Ev;
var __ZN10__cxxabiv119__pointer_type_infoD2Ev;
var __ZN10__cxxabiv129__pointer_to_member_type_infoD1Ev;
var __ZN10__cxxabiv129__pointer_to_member_type_infoD2Ev;
var __ZNSt9bad_allocC1Ev;
var __ZNSt9bad_allocD1Ev;
var __ZNSt20bad_array_new_lengthC1Ev;
var __ZNSt20bad_array_new_lengthD1Ev;
var __ZNSt20bad_array_new_lengthD2Ev;
var _err;
var _errx;
var _warn;
var _warnx;
var _verr;
var _verrx;
var _vwarn;
var _vwarnx;
var _stderr = _stderr=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTVN10__cxxabiv120__si_class_type_infoE=allocate([0,0,0,0,248,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTVN10__cxxabiv119__pointer_type_infoE=allocate([0,0,0,0,24,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTVN10__cxxabiv117__class_type_infoE=allocate([0,0,0,0,56,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIy=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIx=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIt=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIs=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIm=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIl=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIj=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIi=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIh=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIf=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIe=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTId=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIc=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
__ZTIa=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
/* memory initializer */ allocate([45,44,32,0,0,0,0,0,45,44,32,0,0,0,0,0,45,44,32,0,0,0,0,0,45,44,32,0,0,0,0,0,45,44,32,0,0,0,0,0,91,114,111,111,116,32,105,115,32,108,97,121,101,114,32,45,49,93,0,0,0,0,0,0,10,45,45,45,45,45,45,45,45,45,45,45,45,83,84,65,84,32,73,78,70,79,45,45,45,45,45,45,45,45,45,45,45,45,45,0,0,0,0,0,111,112,116,105,111,110,32,114,101,113,117,105,114,101,115,32,97,110,32,97,114,103,117,109,101,110,116,32,45,45,32,37,115,0,0,0,0,0,0,0,111,112,116,105,111,110,32,114,101,113,117,105,114,101,115,32,97,110,32,97,114,103,117,109,101,110,116,32,45,45,32,37,99,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,89,64,0,0,0,0,0,136,195,64,0,0,0,0,132,215,151,65,0,128,224,55,121,195,65,67,23,110,5,181,181,184,147,70,245,249,63,233,3,79,56,77,50,29,48,249,72,119,130,90,60,191,115,127,221,79,21,117,64,181,0,0,0,0,0,0,63,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,255,255,255,255,0,0,0,0,111,112,116,105,111,110,32,100,111,101,115,110,39,116,32,116,97,107,101,32,97,110,32,97,114,103,117,109,101,110,116,32,45,45,32,37,46,42,115,0,117,110,107,110,111,119,110,32,111,112,116,105,111,110,32,45,45,32,37,115,0,0,0,0,117,110,107,110,111,119,110,32,111,112,116,105,111,110,32,45,45,32,37,99,0,0,0,0,255,255,255,255,0,0,0,0,97,109,98,105,103,117,111,117,115,32,111,112,116,105,111,110,32,45,45,32,37,46,42,115,0,0,0,0,0,0,0,0,32,77,105,108,101,83,116,111,110,101,58,32,37,120,44,32,37,120,10,0,0,0,0,0,78,85,76,76,32,33,61,32,100,101,112,32,38,38,32,102,114,111,109,95,104,97,110,100,108,101,32,62,32,48,32,38,38,32,102,114,111,109,95,104,97,110,100,108,101,32,60,32,109,105,108,101,95,115,116,111,110,101,115,95,112,111,115,95,0,0,0,0,0,0,0,0,37,115,58,32,0,0,0,0,102,111,117,110,100,95,110,117,109,32,43,32,49,32,60,32,109,97,120,95,115,112,108,105,100,115,0,0,0,0,0,0,83,104,0,0,0,0,0,0,108,109,97,95,102,114,101,113,95,105,100,120,95,0,0,0,100,108,95,115,117,99,99,101,115,115,0,0,0,0,0,0,45,45,45,37,100,10,0,0,115,111,110,45,62,115,112,108,95,105,100,120,32,62,61,32,105,100,95,115,116,97,114,116,32,38,38,32,115,111,110,45,62,115,112,108,95,105,100,120,32,60,32,105,100,95,115,116,97,114,116,32,43,32,105,100,95,110,117,109,0,0,0,0,78,85,76,76,32,33,61,32,104,122,95,102,111,117,110,100,32,38,38,32,104,97,110,122,105,32,61,61,32,42,104,122,95,102,111,117,110,100,0,0,67,104,0,0,0,0,0,0,102,114,101,113,95,99,111,100,101,115,95,0,0,0,0,0,48,32,33,61,32,110,117,109,0,0,0,0,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,37,100,39,116,104,32,68,77,73,32,110,111,100,101,32,98,101,103,105,110,45,45,45,45,45,45,45,45,45,45,45,62,10,0,0,0,0,0,0,49,32,61,61,32,110,111,100,101,45,62,115,111,110,95,49,115,116,95,111,102,102,0,0,104,122,115,95,108,101,110,32,60,61,32,107,77,97,120,80,114,101,100,105,99,116,83,105,122,101,32,38,38,32,104,122,115,95,108,101,110,32,62,32,48,0,0,0,0,0,0,0,37,115,0,0,0,0,0,0,102,114,101,113,95,99,111,100,101,115,95,100,102,95,0,0,49,32,61,61,32,115,112,108,95,105,100,120,95,110,117,109,0,0,0,0,0,0,0,0,115,112,108,95,105,100,95,102,114,32,60,61,32,107,77,97,120,76,101,109,109,97,83,105,122,101,0,0,0,0,0,0,78,85,76,76,32,33,61,32,100,101,112,32,38,38,32,48,32,61,61,32,102,114,111,109,95,104,97,110,100,108,101,0,105,100,95,110,117,109,32,61,61,32,115,116,97,114,116,95,105,100,95,91,107,77,97,120,76,101,109,109,97,83,105,122,101,93,0,0,0,0,0,0,115,111,110,95,112,111,115,32,43,32,49,32,61,61,32,110,117,109,95,111,102,95,115,111,110,0,0,0,0,0,0,0,102,114,101,113,115,91,112,111,115,93,32,62,32,48,0,0,117,116,102,49,54,95,115,116,114,108,101,110,40,116,111,107,101,110,41,32,60,61,32,107,77,97,120,80,105,110,121,105,110,83,105,122,101,0,0,0,116,109,112,32,61,61,32,108,109,97,95,108,101,110,0,0,48,32,61,61,32,100,101,112,45,62,115,112,108,105,100,115,95,101,120,116,101,110,100,101,100,0,0,0,0,0,0,0,46,46,47,115,104,97,114,101,47,109,97,116,114,105,120,115,101,97,114,99,104,46,99,112,112,0,0,0,0,0,0,0,80,79,83,73,88,76,89,95,67,79,82,82,69,67,84,0,99,117,114,114,101,110,116,95,112,111,115,32,61,61,32,115,116,97,114,116,95,112,111,115,95,91,107,77,97,120,76,101,109,109,97,83,105,122,101,93,0,0,0,0,0,0,0,0,105,115,95,118,97,108,105,100,95,115,112,108,95,99,104,97,114,40,99,104,97,114,95,99,117,114,114,101,110,116,41,0,105,100,120,95,110,111,119,32,43,32,49,32,61,61,32,110,101,120,116,95,105,100,120,95,117,110,117,115,101,100,0,0,78,85,76,76,32,33,61,32,116,111,107,101,110,0,0,0,99,95,112,104,114,97,115,101,95,46,108,101,110,103,116,104,32,62,32,48,32,38,38,32,99,95,112,121,95,108,101,110,32,61,61,32,99,95,112,104,114,97,115,101,95,46,115,112,108,95,115,116,97,114,116,91,99,95,112,104,114,97,115,101,95,46,115,117,98,108,109,97,95,115,116,97,114,116,91,99,95,112,104,114,97,115,101,95,46,115,117,98,108,109,97,95,110,117,109,93,93,0,0,0,114,98,0,0,0,0,0,0,115,99,105,115,95,110,117,109,95,32,61,61,32,115,99,105,115,95,110,117,109,0,0,0,40,99,104,97,114,95,102,111,114,95,110,111,100,101,32,62,61,32,39,65,39,41,32,38,38,32,40,99,104,97,114,95,102,111,114,95,110,111,100,101,32,60,61,32,39,90,39,32,124,124,32,39,104,39,32,61,61,32,99,104,97,114,95,102,111,114,95,110,111,100,101,41,0,0,0,0,0,0,0,0,108,101,109,109,97,95,97,114,114,91,112,111,115,93,46,105,100,120,95,98,121,95,104,122,32,61,61,32,105,100,120,95,110,111,119,0,0,0,0,0,109,111,118,101,95,112,111,115,32,62,32,48,0,0,0,0,98,95,97,99,95,116,109,112,0,0,0,0,0,0,0,0,119,98,0,0,0,0,0,0,46,46,32,116,111,116,97,108,32,108,101,109,109,97,32,110,111,100,101,32,110,117,109,98,101,114,58,32,37,108,100,10,0,0,0,0,0,0,0,0,115,116,97,116,105,99,95,99,97,115,116,60,115,105,122,101,95,116,62,40,115,112,108,105,100,32,45,32,107,70,117,108,108,83,112,108,73,100,83,116,97,114,116,41,32,60,32,98,117,102,95,115,105,122,101,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,0,109,97,120,32,115,121,115,116,101,109,32,98,121,116,101,115,32,61,32,37,49,48,108,117,10,0,0,0,0,0,0,0,46,46,32,115,111,110,32,98,117,102,32,97,108,108,111,99,97,116,105,111,110,32,110,117,109,98,101,114,32,119,105,116,104,32,109,111,114,101,32,116,104,97,110,32,49,32,115,111,110,58,32,37,108,100,10,0,102,97,108,115,101,0,0,0,78,85,76,76,32,33,61,32,105,110,115,116,97,110,99,101,95,0,0,0,0,0,0,0,115,116,100,58,58,98,97,100,95,99,97,115,116,0,0,0,99,117,114,114,101,110,116,95,104,122,95,108,101,110,32,62,61,32,108,97,115,116,95,104,122,95,108,101,110,0,0,0,46,46,32,115,111,110,32,98,117,102,32,97,108,108,111,99,97,116,105,111,110,32,110,117,109,98,101,114,32,119,105,116,104,32,111,110,108,121,32,49,32,115,111,110,58,32,37,108,100,10,0,0,0,0,0,0,121,109,95,105,100,32,62,32,48,0,0,0,0,0,0,0,105,116,101,109,95,110,117,109,91,99,111,100,101,93,32,62,32,48,0,0,0,0,0,0,46,46,32,116,111,116,97,108,95,104,111,109,111,95,110,117,109,32,112,101,114,32,108,97,121,101,114,58,10,32,32,32,48,44,32,0,0,0,0,0,114,98,0,0,0,0,0,0,46,46,32,116,111,116,97,108,95,110,111,100,101,95,105,110,95,115,111,110,98,117,102,95,97,108,108,110,111,115,111,110,32,112,101,114,32,108,97,121,101,114,58,10,32,32,32,0,42,102,111,117,110,100,32,61,61,32,104,122,0,0,0,0,108,109,97,95,98,117,102,91,114,101,109,97,105,110,95,110,117,109,32,45,32,49,93,46,104,97,110,122,105,32,61,61,32,108,109,97,95,98,117,102,91,112,111,115,93,46,104,97,110,122,105,0,0,0,0,0,119,43,0,0,0,0,0,0,46,46,32,116,111,116,97,108,95,115,111,110,98,117,102,95,97,108,108,110,111,115,111,110,32,112,101,114,32,108,97,121,101,114,58,10,32,32,32,0,114,101,109,97,105,110,95,110,117,109,32,62,32,48,0,0,46,46,32,116,111,116,97,108,95,115,111,110,98,117,102,95,110,117,109,32,112,101,114,32,108,97,121,101,114,58,10,32,32,32,0,0,0,0,0,0,108,112,115,105,95,110,117,109,32,62,32,110,117,109,0,0,46,46,32,116,111,116,97,108,95,110,111,100,101,95,104,97,115,115,111,110,32,112,101,114,32,108,97,121,101,114,58,10,32,32,32,49,44,32,0,0,78,85,76,76,32,33,61,32,109,116,114,120,95,110,100,0,46,46,47,115,104,97,114,101,47,115,112,101,108,108,105,110,103,116,97,98,108,101,46,99,112,112,0,0,0,0,0,0,46,46,32,116,111,116,97,108,95,115,111,110,95,110,117,109,32,112,101,114,32,108,97,121,101,114,58,10,32,32,32,0,100,109,105,95,99,95,112,104,114,97,115,101,95,0,0,0,108,109,97,95,115,116,97,114,116,95,91,102,105,120,101,100,95,108,109,97,115,95,93,32,61,61,32,102,105,120,101,100,95,104,122,115,95,0,0,0,46,46,47,115,104,97,114,101,47,108,112,105,99,97,99,104,101,46,99,112,112,0,0,0,115,112,108,95,116,114,105,101,95,45,62,105,115,95,104,97,108,102,95,105,100,40,115,112,108,105,100,41,0,0,0,0,46,46,32,109,97,120,95,104,111,109,111,98,117,102,95,108,101,110,32,112,101,114,32,108,97,121,101,114,58,10,32,32,32,45,44,32,0,0,0,0,108,109,97,95,105,100,95,110,117,109,95,32,43,32,102,105,120,101,100,95,108,109,97,115,95,32,45,32,112,111,115,32,45,32,49,32,62,61,32,112,111,115,0,0,0,0,0,0,108,109,97,95,110,111,100,101,95,110,117,109,95,108,101,48,95,32,60,61,32,98,117,102,95,115,105,122,101,0,0,0,37,115,58,32,0,0,0,0,105,110,32,117,115,101,32,98,121,116,101,115,32,32,32,32,32,61,32,37,49,48,108,117,10,0,0,0,0,0,0,0,46,46,47,115,104,97,114,101,47,117,115,101,114,100,105,99,116,46,99,112,112,0,0,0,112,104,114,97,115,101,95,108,101,110,32,62,32,48,0,0,97,118,101,114,97,103,101,95,115,99,111,114,101,32,60,61,32,50,53,53,0,0,0,0,78,85,76,76,32,33,61,32,108,112,105,95,99,97,99,104,101,95,108,101,110,95,0,0,108,101,109,109,97,95,97,114,114,91,48,93,46,105,100,120,95,98,121,95,104,122,32,61,61,32,49,0,0,0,0,0,37,115,10,0,0,0,0,0,37,108,100,44,32,0,0,0,112,104,114,97,115,101,95,108,101,110,32,61,61,32,108,109,97,95,115,116,97,114,116,95,91,102,105,120,101,100,95,108,109,97,115,95,93,0,0,0,115,117,99,101,115,115,0,0,46,46,47,115,104,97,114,101,47,100,105,99,116,108,105,115,116,46,99,112,112,0,0,0,99,98,95,110,101,119,0,0,37,115,10,0,0,0,0,0,46,46,32,109,97,120,95,115,111,110,98,117,102,95,108,101,110,32,112,101,114,32,108,97,121,101,114,40,102,114,111,109,32,108,97,121,101,114,32,48,41,58,10,32,32,32,0,0,108,109,97,95,108,101,110,32,61,61,32,108,109,97,95,115,116,97,114,116,95,91,112,111,115,32,43,32,49,93,32,45,32,108,109,97,95,115,116,97,114,116,95,91,112,111,115,93,0,0,0,0,0,0,0,0,42,110,117,109,32,62,61,32,49,0,0,0,0,0,0,0,111,108,100,114,111,119,32,62,61,32,100,109,105,45,62,115,112,108,115,116,114,95,108,101,110,0,0,0,0,0,0,0,100,101,112,95,45,62,105,100,95,110,117,109,32,62,32,48,0,0,0,0,0,0,0,0,99,97,110,100,95,115,112,108,105,100,115,95,116,104,105,115,32,62,32,48,0,0,0,0,37,115,58,32,0,0,0,0,115,111,110,95,112,111,115,32,43,32,49,32,61,61,32,112,97,114,101,110,116,95,115,111,110,95,110,117,109,0,0,0,48,32,61,61,32,112,114,101,118,95,105,100,115,95,110,117,109,0,0,0,0,0,0,0,40,33,97,114,103,95,118,97,108,105,100,32,38,38,32,115,112,108,105,100,115,95,109,97,120,32,62,61,32,108,109,97,95,108,101,110,41,32,124,124,32,108,109,97,95,108,101,110,32,61,61,32,115,112,108,105,100,115,95,109,97,120,0,0,104,111,109,111,95,110,117,109,32,60,61,32,50,53,53,0,78,85,76,76,32,33,61,32,101,110,100,95,110,111,100,101,0,0,0,0,0,0,0,0,110,111,100,101,95,115,111,110,45,62,115,112,108,95,105,100,120,32,62,61,32,105,100,95,115,116,97,114,116,32,38,38,32,110,111,100,101,95,115,111,110,45,62,115,112,108,95,105,100,120,32,60,32,105,100,95,115,116,97,114,116,32,43,32,105,100,95,110,117,109,0,0,104,111,109,111,95,110,117,109,32,60,61,32,54,53,53,51,53,0,0,0,0,0,0,0,46,46,47,115,104,97,114,101,47,115,112,101,108,108,105,110,103,116,114,105,101,46,99,112,112,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,110,111,100,101,32,61,61,32,114,111,111,116,95,32,38,38,32,49,32,61,61,32,110,111,100,101,95,102,114,95,110,117,109,0,0,0,0,0,0,0,115,112,108,95,115,116,97,114,116,95,91,102,105,120,101,100,95,104,122,115,95,93,32,61,61,32,102,105,120,101,100,95,99,104,95,112,111,115,0,0,37,115,58,32,0,0,0,0,112,97,114,101,110,116,95,115,111,110,95,110,117,109,32,60,61,32,50,53,53,0,0,0,115,116,101,112,95,116,111,95,100,109,105,95,102,114,32,33,61,32,115,116,97,116,105,99,95,99,97,115,116,60,80,111,111,108,80,111,115,84,121,112,101,62,40,45,49,41,0,0,105,100,95,110,117,109,32,62,32,48,0,0,0,0,0,0,98,97,100,95,97,114,114,97,121,95,110,101,119,95,108,101,110,103,116,104,0,0,0,0,112,97,114,101,110,116,95,115,111,110,95,110,117,109,32,60,61,32,54,53,53,51,53,0,99,97,110,100,95,108,101,110,32,62,32,48,0,0,0,0,46,46,47,115,104,97,114,101,47,100,105,99,116,116,114,105,101,46,99,112,112,0,0,0,110,111,100,101,95,103,101,49,45,62,115,111,110,95,49,115,116,95,111,102,102,95,108,32,62,32,48,32,124,124,32,110,111,100,101,95,103,101,49,45,62,115,111,110,95,49,115,116,95,111,102,102,95,104,32,62,32,48,0,0,0,0,0,0,115,121,115,116,101,109,32,98,121,116,101,115,32,32,32,32,32,61,32,37,49,48,108,117,10,0,0,0,0,0,0,0,115,116,100,58,58,98,97,100,95,116,121,112,101,105,100,0,108,101,118,101,108,32,60,32,107,77,97,120,76,101,109,109,97,83,105,122,101,0,0,0,114,98,0,0,0,0,0,0,115,99,111,114,101,32,62,61,32,48,0,0,0,0,0,0,60,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,37,100,39,116,104,32,68,77,73,32,110,111,100,101,32,101,110,100,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,10,0,0,0,0,0,78,85,76,76,32,33,61,32,108,112,105,95,99,97,99,104,101,95,0,0,0,0,0,0,110,111,100,101,95,108,101,48,45,62,115,111,110,95,49,115,116,95,111,102,102,32,60,61,32,108,109,97,95,110,111,100,101,95,110,117,109,95,103,101,49,95,0,0,0,0,0,0,78,85,76,76,32,33,61,32,115,116,114,0,0,0,0,0,108,97,115,116,95,104,122,95,108,101,110,32,62,32,48,0,46,46,47,115,104,97,114,101,47,110,103,114,97,109,46,99,112,112,0,0,0,0,0,0,102,111,117,110,100,0,0,0,58,32,0,0,0,0,0,0,32,84,111,116,97,108,32,80,105,110,121,105,110,32,76,101,110,58,32,37,100,10,0,0,104,50,102,95,110,117,109,95,91,42,115,112,108,105,100,93,32,62,32,48,0,0,0,0,110,111,100,101,45,62,115,111,110,95,49,115,116,95,111,102,102,95,108,32,62,32,48,32,124,124,32,110,111,100,101,45,62,115,111,110,95,49,115,116,95,111,102,102,95,104,32,62,32,48,0,0,0,0,0,0,115,116,97,116,105,99,95,99,97,115,116,60,115,105,122,101,95,116,62,40,102,111,117,110,100,32,45,32,98,117,102,95,41,32,62,61,32,115,116,97,114,116,95,112,111,115,95,91,115,116,114,95,108,101,110,32,45,32,49,93,0,0,0,0,105,116,101,109,95,110,117,109,0,0,0,0,0,0,0,0,58,32,0,0,0,0,0,0,78,85,76,76,32,33,61,32,100,105,99,116,95,116,114,105,101,45,62,108,109,97,95,105,100,120,95,98,117,102,95,0,32,83,112,101,108,108,105,110,103,32,58,32,37,115,44,32,37,100,10,0,0,0,0,0,110,111,100,101,45,62,115,111,110,95,49,115,116,95,111,102,102,32,60,61,32,108,109,97,95,110,111,100,101,95,110,117,109,95,103,101,49,95,0,0,102,111,117,110,100,32,62,32,98,117,102,95,0,0,0,0,90,104,0,0,0,0,0,0,78,85,76,76,32,33,61,32,100,105,99,116,95,116,114,105,101,45,62,114,111,111,116,95,0,0,0,0,0,0,0,0,46,46,47,115,104,97,114,101,47,100,105,99,116,98,117,105,108,100,101,114,46,99,112,112,0,0,0,0,0,0,0,0,114,98,0,0,0,0,0,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,83,112,101,108,108,105,110,103,84,114,105,101,58,58,105,102,95,118,97,108,105,100,95,105,100,95,117,112,100,97,116,101,40,117,105,110,116,49,54,32,42,41,32,99,111,110,115,116,0,0,0,0,0,0,0,118,111,105,100,32,105,109,101,95,112,105,110,121,105,110,58,58,85,115,101,114,68,105,99,116,58,58,114,101,99,108,97,105,109,40,41,0,0,0,0,105,109,101,95,112,105,110,121,105,110,58,58,76,112,105,67,97,99,104,101,58,58,76,112,105,67,97,99,104,101,40,41,0,0,0,0,0,0,0,0,115,116,97,116,105,99,32,105,109,101,95,112,105,110,121,105,110,58,58,76,112,105,67,97,99,104,101,32,38,105,109,101,95,112,105,110,121,105,110,58,58,76,112,105,67,97,99,104,101,58,58,103,101,116,95,105,110,115,116,97,110,99,101,40,41,0,0,0,0,0,0,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,84,114,105,101,58,58,108,111,97,100,95,100,105,99,116,40,70,73,76,69,32,42,41,0,0,0,0,118,105,114,116,117,97,108,32,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,84,114,105,101,58,58,103,101,116,95,108,112,105,115,40,99,111,110,115,116,32,117,105,110,116,49,54,32,42,44,32,117,105,110,116,49,54,44,32,76,109,97,80,115,98,73,116,101,109,32,42,44,32,115,105,122,101,95,116,41,0,0,0,0,0,118,105,114,116,117,97,108,32,117,105,110,116,49,54,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,84,114,105,101,58,58,103,101,116,95,108,101,109,109,97,95,115,112,108,105,100,115,40,76,101,109,109,97,73,100,84,121,112,101,44,32,117,105,110,116,49,54,32,42,44,32,117,105,110,116,49,54,44,32,98,111,111,108,41,0,0,0,0,0,0,77,105,108,101,83,116,111,110,101,72,97,110,100,108,101,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,84,114,105,101,58,58,101,120,116,101,110,100,95,100,105,99,116,50,40,77,105,108,101,83,116,111,110,101,72,97,110,100,108,101,44,32,99,111,110,115,116,32,68,105,99,116,69,120,116,80,97,114,97,32,42,44,32,76,109,97,80,115,98,73,116,101,109,32,42,44,32,115,105,122,101,95,116,44,32,115,105,122,101,95,116,32,42,41,0,0,0,0,0,0,0,0,77,105,108,101,83,116,111,110,101,72,97,110,100,108,101,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,84,114,105,101,58,58,101,120,116,101,110,100,95,100,105,99,116,49,40,77,105,108,101,83,116,111,110,101,72,97,110,100,108,101,44,32,99,111,110,115,116,32,68,105,99,116,69,120,116,80,97,114,97,32,42,44,32,76,109,97,80,115,98,73,116,101,109,32,42,44,32,115,105,122,101,95,116,44,32,115,105,122,101,95,116,32,42,41,0,0,0,0,0,0,0,0,77,105,108,101,83,116,111,110,101,72,97,110,100,108,101,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,84,114,105,101,58,58,101,120,116,101,110,100,95,100,105,99,116,48,40,77,105,108,101,83,116,111,110,101,72,97,110,100,108,101,44,32,99,111,110,115,116,32,68,105,99,116,69,120,116,80,97,114,97,32,42,44,32,76,109,97,80,115,98,73,116,101,109,32,42,44,32,115,105,122,101,95,116,44,32,115,105,122,101,95,116,32,42,41,0,0,0,0,0,0,0,0,118,105,114,116,117,97,108,32,77,105,108,101,83,116,111,110,101,72,97,110,100,108,101,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,84,114,105,101,58,58,101,120,116,101,110,100,95,100,105,99,116,40,77,105,108,101,83,116,111,110,101,72,97,110,100,108,101,44,32,99,111,110,115,116,32,68,105,99,116,69,120,116,80,97,114,97,32,42,44,32,76,109,97,80,115,98,73,116,101,109,32,42,44,32,115,105,122,101,95,116,44,32,115,105,122,101,95,116,32,42,41,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,84,114,105,101,58,58,116,114,121,95,101,120,116,101,110,100,40,99,111,110,115,116,32,117,105,110,116,49,54,32,42,44,32,117,105,110,116,49,54,44,32,76,101,109,109,97,73,100,84,121,112,101,41,0,0,0,0,0,0,118,111,105,100,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,76,105,115,116,58,58,102,105,108,108,95,115,99,105,115,40,99,111,110,115,116,32,105,109,101,95,112,105,110,121,105,110,58,58,83,105,110,103,108,101,67,104,97,114,73,116,101,109,32,42,44,32,115,105,122,101,95,116,41,0,0,0,0,0,0,0,0,118,111,105,100,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,76,105,115,116,58,58,102,105,108,108,95,108,105,115,116,40,99,111,110,115,116,32,105,109,101,95,112,105,110,121,105,110,58,58,76,101,109,109,97,69,110,116,114,121,32,42,44,32,115,105,122,101,95,116,41,0,0,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,76,105,115,116,58,58,112,114,101,100,105,99,116,40,99,111,110,115,116,32,99,104,97,114,49,54,32,42,44,32,117,105,110,116,49,54,44,32,78,80,114,101,100,105,99,116,73,116,101,109,32,42,44,32,115,105,122,101,95,116,44,32,115,105,122,101,95,116,41,0,0,0,0,117,105,110,116,49,54,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,76,105,115,116,58,58,103,101,116,95,115,112,108,105,100,115,95,102,111,114,95,104,97,110,122,105,40,99,104,97,114,49,54,44,32,117,105,110,116,49,54,44,32,117,105,110,116,49,54,32,42,44,32,117,105,110,116,49,54,41,0,0,0,0,0,118,111,105,100,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,76,105,115,116,58,58,99,111,110,118,101,114,116,95,116,111,95,115,99,105,115,95,105,100,115,40,99,104,97,114,49,54,32,42,44,32,117,105,110,116,49,54,41,0,0,0,0,0,0,0,0,118,111,105,100,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,76,105,115,116,58,58,99,111,110,118,101,114,116,95,116,111,95,104,97,110,122,105,115,40,99,104,97,114,49,54,32,42,44,32,117,105,110,116,49,54,41,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,76,105,115,116,58,58,99,97,108,99,117,108,97,116,101,95,115,105,122,101,40,99,111,110,115,116,32,105,109,101,95,112,105,110,121,105,110,58,58,76,101,109,109,97,69,110,116,114,121,32,42,44,32,115,105,122,101,95,116,41,0,0,0,0,0,76,101,109,109,97,73,100,84,121,112,101,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,76,105,115,116,58,58,103,101,116,95,108,101,109,109,97,95,105,100,40,99,111,110,115,116,32,99,104,97,114,49,54,32,42,44,32,117,105,110,116,49,54,41,0,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,78,71,114,97,109,58,58,98,117,105,108,100,95,117,110,105,103,114,97,109,40,105,109,101,95,112,105,110,121,105,110,58,58,76,101,109,109,97,69,110,116,114,121,32,42,44,32,115,105,122,101,95,116,44,32,76,101,109,109,97,73,100,84,121,112,101,41,0,0,0,0,100,111,117,98,108,101,32,105,109,101,95,112,105,110,121,105,110,58,58,114,101,99,97,108,99,117,108,97,116,101,95,107,101,114,110,101,108,40,100,111,117,98,108,101,32,42,44,32,115,105,122,101,95,116,44,32,100,111,117,98,108,101,32,42,44,32,67,79,68,69,66,79,79,75,95,84,89,80,69,32,42,41,0,0,0,0,0,0,99,111,110,115,116,32,99,104,97,114,32,42,105,109,101,95,112,105,110,121,105,110,58,58,83,112,101,108,108,105,110,103,84,97,98,108,101,58,58,97,114,114,97,110,103,101,40,115,105,122,101,95,116,32,42,44,32,115,105,122,101,95,116,32,42,41,0,0,0,0,0,0,105,109,101,95,112,105,110,121,105,110,58,58,83,112,101,108,108,105,110,103,78,111,100,101,32,42,105,109,101,95,112,105,110,121,105,110,58,58,83,112,101,108,108,105,110,103,84,114,105,101,58,58,99,111,110,115,116,114,117,99,116,95,115,112,101,108,108,105,110,103,115,95,115,117,98,115,101,116,40,115,105,122,101,95,116,44,32,115,105,122,101,95,116,44,32,115,105,122,101,95,116,44,32,105,109,101,95,112,105,110,121,105,110,58,58,83,112,101,108,108,105,110,103,78,111,100,101,32,42,41,0,0,0,0,0,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,83,112,101,108,108,105,110,103,84,114,105,101,58,58,98,117,105,108,100,95,121,109,95,105,110,102,111,40,41,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,100,101,108,115,101,97,114,99,104,40,115,105,122,101,95,116,44,32,98,111,111,108,44,32,98,111,111,108,41,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,103,101,116,95,108,112,105,115,40,99,111,110,115,116,32,117,105,110,116,49,54,32,42,44,32,115,105,122,101,95,116,44,32,76,109,97,80,115,98,73,116,101,109,32,42,44,32,115,105,122,101,95,116,44,32,99,111,110,115,116,32,99,104,97,114,49,54,32,42,44,32,98,111,111,108,41,0,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,99,104,111,111,115,101,40,115,105,122,101,95,116,41,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,97,100,100,95,108,109,97,95,116,111,95,117,115,101,114,100,105,99,116,40,117,105,110,116,49,54,44,32,117,105,110,116,49,54,44,32,102,108,111,97,116,41,0,0,0,0,0,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,99,97,110,99,101,108,95,108,97,115,116,95,99,104,111,105,99,101,40,41,0,0,0,118,111,105,100,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,109,101,114,103,101,95,102,105,120,101,100,95,108,109,97,115,40,115,105,122,101,95,116,41,0,118,111,105,100,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,103,101,116,95,115,112,108,95,115,116,97,114,116,95,105,100,40,41,0,0,0,0,0,0,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,97,100,100,95,99,104,97,114,95,113,119,101,114,116,121,40,41,0,0,0,0,0,0,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,101,120,116,101,110,100,95,109,116,114,120,95,110,100,40,77,97,116,114,105,120,78,111,100,101,32,42,44,32,76,109,97,80,115,98,73,116,101,109,32,42,44,32,115,105,122,101,95,116,44,32,80,111,111,108,80,111,115,84,121,112,101,44,32,115,105,122,101,95,116,41,0,0,0,0,0,0,0,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,114,101,115,101,116,95,115,101,97,114,99,104,40,115,105,122,101,95,116,44,32,98,111,111,108,44,32,98,111,111,108,44,32,98,111,111,108,41,0,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,101,120,116,101,110,100,95,100,109,105,95,99,40,68,105,99,116,69,120,116,80,97,114,97,32,42,44,32,68,105,99,116,77,97,116,99,104,73,110,102,111,32,42,41,0,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,77,97,116,114,105,120,83,101,97,114,99,104,58,58,101,120,116,101,110,100,95,100,109,105,40,68,105,99,116,69,120,116,80,97,114,97,32,42,44,32,68,105,99,116,77,97,116,99,104,73,110,102,111,32,42,41,0,0,0,0,0,99,104,97,114,49,54,32,42,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,66,117,105,108,100,101,114,58,58,114,101,97,100,95,118,97,108,105,100,95,104,97,110,122,105,115,40,99,111,110,115,116,32,99,104,97,114,32,42,44,32,115,105,122,101,95,116,32,42,41,0,0,0,0,0,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,66,117,105,108,100,101,114,58,58,104,122,95,105,110,95,104,97,110,122,105,115,95,108,105,115,116,40,99,111,110,115,116,32,99,104,97,114,49,54,32,42,44,32,115,105,122,101,95,116,44,32,99,104,97,114,49,54,41,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,66,117,105,108,100,101,114,58,58,99,111,110,115,116,114,117,99,116,95,115,117,98,115,101,116,40,118,111,105,100,32,42,44,32,105,109,101,95,112,105,110,121,105,110,58,58,76,101,109,109,97,69,110,116,114,121,32,42,44,32,115,105,122,101,95,116,44,32,115,105,122,101,95,116,44,32,115,105,122,101,95,116,41,0,0,0,0,0,0,0,0,118,111,105,100,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,66,117,105,108,100,101,114,58,58,103,101,116,95,116,111,112,95,108,101,109,109,97,115,40,41,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,66,117,105,108,100,101,114,58,58,114,101,97,100,95,114,97,119,95,100,105,99,116,40,99,111,110,115,116,32,99,104,97,114,32,42,44,32,99,111,110,115,116,32,99,104,97,114,32,42,44,32,115,105,122,101,95,116,41,0,0,0,0,0,0,0,115,105,122,101,95,116,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,66,117,105,108,100,101,114,58,58,98,117,105,108,100,95,115,99,105,115,40,41,0,0,0,0,98,111,111,108,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,66,117,105,108,100,101,114,58,58,98,117,105,108,100,95,100,105,99,116,40,99,111,110,115,116,32,99,104,97,114,32,42,44,32,99,111,110,115,116,32,99,104,97,114,32,42,44,32,105,109,101,95,112,105,110,121,105,110,58,58,68,105,99,116,84,114,105,101,32,42,41,0,0,0,0,32,183,0,0,0,0,0,0,0,0,0,0,200,38,0,0,62,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,38,0,0,38,0,0,0,84,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,38,0,0,98,0,0,0,50,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,38,0,0,38,0,0,0,82,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,39,0,0,26,0,0,0,78,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,41,0,0,30,0,0,0,2,0,0,0,2,0,0,0,14,0,0,0,12,0,0,0,2,0,0,0,2,0,0,0,10,0,0,0,20,0,0,0,4,0,0,0,8,0,0,0,2,0,0,0,6,0,0,0,8,0,0,0,30,0,0,0,16,0,0,0,48,0,0,0,16,0,0,0,10,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,41,0,0,68,0,0,0,12,0,0,0,12,0,0,0,8,0,0,0,18,0,0,0,10,0,0,0,4,0,0,0,6,0,0,0,14,0,0,0,12,0,0,0,6,0,0,0,8,0,0,0,18,0,0,0,10,0,0,0,42,0,0,0,4,0,0,0,28,0,0,0,6,0,0,0,8,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,41,0,0,74,0,0,0,34,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,2,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,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,41,0,0,88,0,0,0,60,0,0,0,94,0,0,0,22,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,41,0,0,88,0,0,0,24,0,0,0,94,0,0,0,22,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,41,0,0,88,0,0,0,106,0,0,0,94,0,0,0,22,0,0,0,10,0,0,0,4,0,0,0,4,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,42,0,0,88,0,0,0,46,0,0,0,94,0,0,0,22,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,42,0,0,88,0,0,0,70,0,0,0,94,0,0,0,22,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,42,0,0,88,0,0,0,20,0,0,0,94,0,0,0,22,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,42,0,0,88,0,0,0,72,0,0,0,94,0,0,0,22,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,42,0,0,88,0,0,0,100,0,0,0,94,0,0,0,22,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,119,0,0,0,0,0,0,0,118,0,0,0,0,0,0,0,116,0,0,0,0,0,0,0,115,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,108,0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,105,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,99,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,97,0,0,0,0,0,0,0,83,116,57,116,121,112,101,95,105,110,102,111,0,0,0,0,83,116,57,101,120,99,101,112,116,105,111,110,0,0,0,0,83,116,57,98,97,100,95,97,108,108,111,99,0,0,0,0,83,116,56,98,97,100,95,99,97,115,116,0,0,0,0,0,83,116,50,48,98,97,100,95,97,114,114,97,121,95,110,101,119,95,108,101,110,103,116,104,0,0,0,0,0,0,0,0,83,116,49,48,98,97,100,95,116,121,112,101,105,100,0,0,80,121,0,0,0,0,0,0,80,120,0,0,0,0,0,0,80,119,0,0,0,0,0,0,80,118,0,0,0,0,0,0,80,116,0,0,0,0,0,0,80,115,0,0,0,0,0,0,80,109,0,0,0,0,0,0,80,108,0,0,0,0,0,0,80,106,0,0,0,0,0,0,80,105,0,0,0,0,0,0,80,104,0,0,0,0,0,0,80,102,0,0,0,0,0,0,80,101,0,0,0,0,0,0,80,100,0,0,0,0,0,0,80,99,0,0,0,0,0,0,80,98,0,0,0,0,0,0,80,97,0,0,0,0,0,0,80,75,121,0,0,0,0,0,80,75,120,0,0,0,0,0,80,75,119,0,0,0,0,0,80,75,118,0,0,0,0,0,80,75,116,0,0,0,0,0,80,75,115,0,0,0,0,0,80,75,109,0,0,0,0,0,80,75,108,0,0,0,0,0,80,75,106,0,0,0,0,0,80,75,105,0,0,0,0,0,80,75,104,0,0,0,0,0,80,75,102,0,0,0,0,0,80,75,101,0,0,0,0,0,80,75,100,0,0,0,0,0,80,75,99,0,0,0,0,0,80,75,98,0,0,0,0,0,80,75,97,0,0,0,0,0,80,75,68,115,0,0,0,0,80,75,68,110,0,0,0,0,80,75,68,105,0,0,0,0,80,68,115,0,0,0,0,0,80,68,110,0,0,0,0,0,80,68,105,0,0,0,0,0,78,49,48,105,109,101,95,112,105,110,121,105,110,56,85,115,101,114,68,105,99,116,69,0,78,49,48,105,109,101,95,112,105,110,121,105,110,56,68,105,99,116,84,114,105,101,69,0,78,49,48,105,109,101,95,112,105,110,121,105,110,49,50,65,116,111,109,68,105,99,116,66,97,115,101,69,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,57,95,95,112,111,105,110,116,101,114,95,116,111,95,109,101,109,98,101,114,95,116,121,112,101,95,105,110,102,111,69,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,51,95,95,102,117,110,100,97,109,101,110,116,97,108,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,49,95,95,118,109,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,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,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,102,117,110,99,116,105,111,110,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0,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,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,97,114,114,97,121,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,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,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,101,110,117,109,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,0,68,115,0,0,0,0,0,0,68,110,0,0,0,0,0,0,68,105,0,0,0,0,0,0,56,33,0,0,96,34,0,0,56,33,0,0,104,34,0,0,56,33,0,0,200,34,0,0,0,0,0,0,216,34,0,0,0,0,0,0,232,34,0,0,0,0,0,0,248,34,0,0,208,38,0,0,0,0,0,0,0,0,0,0,8,35,0,0,208,38,0,0,0,0,0,0,0,0,0,0,24,35,0,0,216,38,0,0,0,0,0,0,0,0,0,0,56,35,0,0,208,38,0,0,0,0,0,0,0,0,0,0,72,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,35,0,0,0,0,0,0,176,38,0,0,0,0,0,0,96,35,0,0,0,0,0,0,184,38,0,0,0,0,0,0,104,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,35,0,0,0,0,0,0,0,0,0,0].concat([0,0,0,0,192,35,0,0,0,0,0,0,192,38,0,0,0,0,0,0,200,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,35,0,0,1,0,0,0,0,0,0,0,0,0,0,0,216,35,0,0,1,0,0,0,0,0,0,0,0,0,0,0,224,35,0,0,1,0,0,0,176,38,0,0,0,0,0,0,232,35,0,0,1,0,0,0,184,38,0,0,0,0,0,0,240,35,0,0,1,0,0,0,0,0,0,0,0,0,0,0,248,35,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,8,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,16,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,24,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,32,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,40,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,48,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,56,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,64,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,72,36,0,0,1,0,0,0,192,38,0,0,0,0,0,0,80,36,0,0,1,0,0,0,0,0,0,0,0,0,0,0,88,36,0,0,1,0,0,0,120,42,0,0,0,0,0,0,96,36,0,0,1,0,0,0,128,42,0,0,0,0,0,0,104,36,0,0,1,0,0,0,136,42,0,0,0,0,0,0,112,36,0,0,0,0,0,0,120,42,0,0,0,0,0,0,120,36,0,0,0,0,0,0,128,42,0,0,0,0,0,0,128,36,0,0,0,0,0,0,136,42,0,0,0,0,0,0,136,36,0,0,192,41,0,0,0,0,0,0,96,33,0,0,160,36,0,0,0,0,0,0,1,0,0,0,192,41,0,0,0,0,0,0,0,0,0,0,184,36,0,0,0,0,0,0,216,36,0,0,40,42,0,0,0,0,0,0,0,0,0,0,8,37,0,0,88,42,0,0,0,0,0,0,0,0,0,0,48,37,0,0,56,42,0,0,0,0,0,0,0,0,0,0,88,37,0,0,56,42,0,0,0,0,0,0,0,0,0,0,128,37,0,0,88,42,0,0,0,0,0,0,0,0,0,0,168,37,0,0,40,42,0,0,0,0,0,0,0,0,0,0,208,37,0,0,88,42,0,0,0,0,0,0,0,0,0,0,248,37,0,0,88,42,0,0,0,0,0,0,0,0,0,0,32,38,0,0,88,42,0,0,0,0,0,0,0,0,0,0,72,38,0,0,200,38,0,0,0,0,0,0,0,0,0,0,112,38,0,0,88,42,0,0,0,0,0,0,56,33,0,0,152,38,0,0,56,33,0,0,160,38,0,0,56,33,0,0,168,38,0,0,72,77,0,0,0,0,0,72,78,71,0,0,0,0,78,71,0,0,0,0,0,0,0,0,48,65,66,67,99,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,115,84,85,86,87,88,89,90,122,0,0,2,1,1,1,2,1,1,1,0,1,1,1,1,1,2,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0,128,48,0,0,128,32,14,0,128,32,200,3,128,32,8,250,128,32,8,130,0,0,192,224,240,248,252,0])
, "i8", ALLOC_NONE, Runtime.GLOBAL_BASE)
var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
assert(tempDoublePtr % 8 == 0);
function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
HEAP8[tempDoublePtr] = HEAP8[ptr];
HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
}
function copyTempDouble(ptr) {
HEAP8[tempDoublePtr] = HEAP8[ptr];
HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
}
function ___gxx_personality_v0() {
}
Module["_strcpy"] = _strcpy;
function _llvm_umul_with_overflow_i32(x, y) {
x = x>>>0;
y = y>>>0;
return ((asm["setTempRet0"](x*y > 4294967295),(x*y)>>>0)|0);
}
Module["_memset"] = _memset;var _llvm_memset_p0i8_i32=_memset;
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:35,EIDRM:36,ECHRNG:37,EL2NSYNC:38,EL3HLT:39,EL3RST:40,ELNRNG:41,EUNATCH:42,ENOCSI:43,EL2HLT:44,EDEADLK:45,ENOLCK:46,EBADE:50,EBADR:51,EXFULL:52,ENOANO:53,EBADRQC:54,EBADSLT:55,EDEADLOCK:56,EBFONT:57,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:74,ELBIN:75,EDOTDOT:76,EBADMSG:77,EFTYPE:79,ENOTUNIQ:80,EBADFD:81,EREMCHG:82,ELIBACC:83,ELIBBAD:84,ELIBSCN:85,ELIBMAX:86,ELIBEXEC:87,ENOSYS:88,ENMFILE:89,ENOTEMPTY:90,ENAMETOOLONG:91,ELOOP:92,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:106,EPROTOTYPE:107,ENOTSOCK:108,ENOPROTOOPT:109,ESHUTDOWN:110,ECONNREFUSED:111,EADDRINUSE:112,ECONNABORTED:113,ENETUNREACH:114,ENETDOWN:115,ETIMEDOUT:116,EHOSTDOWN:117,EHOSTUNREACH:118,EINPROGRESS:119,EALREADY:120,EDESTADDRREQ:121,EMSGSIZE:122,EPROTONOSUPPORT:123,ESOCKTNOSUPPORT:124,EADDRNOTAVAIL:125,ENETRESET:126,EISCONN:127,ENOTCONN:128,ETOOMANYREFS:129,EPROCLIM:130,EUSERS:131,EDQUOT:132,ESTALE:133,ENOTSUP:134,ENOMEDIUM:135,ENOSHARE:136,ECASECLASH:137,EILSEQ:138,EOVERFLOW:139,ECANCELED:140,ENOTRECOVERABLE:141,EOWNERDEAD:142,ESTRPIPE:143};
var ___errno_state=0;function ___setErrNo(value) {
// For convenient setting and returning of errno.
HEAP32[((___errno_state)>>2)]=value
return value;
}
var _stdin=allocate(1, "i32*", ALLOC_STATIC);
var _stdout=allocate(1, "i32*", ALLOC_STATIC);
var _stderr=allocate(1, "i32*", ALLOC_STATIC);
var __impure_ptr=allocate(1, "i32*", ALLOC_STATIC);var FS={currentPath:"/",nextInode:2,streams:[null],ignorePermissions:true,createFileHandle:function (stream, fd) {
if (typeof stream === 'undefined') {
stream = null;
}
if (!fd) {
if (stream && stream.socket) {
for (var i = 1; i < 64; i++) {
if (!FS.streams[i]) {
fd = i;
break;
}
}
assert(fd, 'ran out of low fds for sockets');
} else {
fd = Math.max(FS.streams.length, 64);
for (var i = FS.streams.length; i < fd; i++) {
FS.streams[i] = null; // Keep dense
}
}
}
// Close WebSocket first if we are about to replace the fd (i.e. dup2)
if (FS.streams[fd] && FS.streams[fd].socket && FS.streams[fd].socket.close) {
FS.streams[fd].socket.close();
}
FS.streams[fd] = stream;
return fd;
},removeFileHandle:function (fd) {
FS.streams[fd] = null;
},joinPath:function (parts, forceRelative) {
var ret = parts[0];
for (var i = 1; i < parts.length; i++) {
if (ret[ret.length-1] != '/') ret += '/';
ret += parts[i];
}
if (forceRelative && ret[0] == '/') ret = ret.substr(1);
return ret;
},absolutePath:function (relative, base) {
if (typeof relative !== 'string') return null;
if (base === undefined) base = FS.currentPath;
if (relative && relative[0] == '/') base = '';
var full = base + '/' + relative;
var parts = full.split('/').reverse();
var absolute = [''];
while (parts.length) {
var part = parts.pop();
if (part == '' || part == '.') {
// Nothing.
} else if (part == '..') {
if (absolute.length > 1) absolute.pop();
} else {
absolute.push(part);
}
}
return absolute.length == 1 ? '/' : absolute.join('/');
},analyzePath:function (path, dontResolveLastLink, linksVisited) {
var ret = {
isRoot: false,
exists: false,
error: 0,
name: null,
path: null,
object: null,
parentExists: false,
parentPath: null,
parentObject: null
};
path = FS.absolutePath(path);
if (path == '/') {
ret.isRoot = true;
ret.exists = ret.parentExists = true;
ret.name = '/';
ret.path = ret.parentPath = '/';
ret.object = ret.parentObject = FS.root;
} else if (path !== null) {
linksVisited = linksVisited || 0;
path = path.slice(1).split('/');
var current = FS.root;
var traversed = [''];
while (path.length) {
if (path.length == 1 && current.isFolder) {
ret.parentExists = true;
ret.parentPath = traversed.length == 1 ? '/' : traversed.join('/');
ret.parentObject = current;
ret.name = path[0];
}
var target = path.shift();
if (!current.isFolder) {
ret.error = ERRNO_CODES.ENOTDIR;
break;
} else if (!current.read) {
ret.error = ERRNO_CODES.EACCES;
break;
} else if (!current.contents.hasOwnProperty(target)) {
ret.error = ERRNO_CODES.ENOENT;
break;
}
current = current.contents[target];
if (current.link && !(dontResolveLastLink && path.length == 0)) {
if (linksVisited > 40) { // Usual Linux SYMLOOP_MAX.
ret.error = ERRNO_CODES.ELOOP;
break;
}
var link = FS.absolutePath(current.link, traversed.join('/'));
ret = FS.analyzePath([link].concat(path).join('/'),
dontResolveLastLink, linksVisited + 1);
return ret;
}
traversed.push(target);
if (path.length == 0) {
ret.exists = true;
ret.path = traversed.join('/');
ret.object = current;
}
}
}
return ret;
},findObject:function (path, dontResolveLastLink) {
var ret = FS.analyzePath(path, dontResolveLastLink);
if (ret.exists) {
return ret.object;
} else {
___setErrNo(ret.error);
return null;
}
},createObject:function (parent, name, properties, canRead, canWrite) {
if (!parent) parent = '/';
if (typeof parent === 'string') parent = FS.findObject(parent);
if (!parent) {
___setErrNo(ERRNO_CODES.EACCES);
throw new Error('Parent path must exist.');
}
if (!parent.isFolder) {
___setErrNo(ERRNO_CODES.ENOTDIR);
throw new Error('Parent must be a folder.');
}
if (!parent.write && !FS.ignorePermissions) {
___setErrNo(ERRNO_CODES.EACCES);
throw new Error('Parent folder must be writeable.');
}
if (!name || name == '.' || name == '..') {
___setErrNo(ERRNO_CODES.ENOENT);
throw new Error('Name must not be empty.');
}
if (parent.contents.hasOwnProperty(name)) {
___setErrNo(ERRNO_CODES.EEXIST);
throw new Error("Can't overwrite object.");
}
parent.contents[name] = {
read: canRead === undefined ? true : canRead,
write: canWrite === undefined ? false : canWrite,
timestamp: Date.now(),
inodeNumber: FS.nextInode++
};
for (var key in properties) {
if (properties.hasOwnProperty(key)) {
parent.contents[name][key] = properties[key];
}
}
return parent.contents[name];
},createFolder:function (parent, name, canRead, canWrite) {
var properties = {isFolder: true, isDevice: false, contents: {}};
return FS.createObject(parent, name, properties, canRead, canWrite);
},createPath:function (parent, path, canRead, canWrite) {
var current = FS.findObject(parent);
if (current === null) throw new Error('Invalid parent.');
path = path.split('/').reverse();
while (path.length) {
var part = path.pop();
if (!part) continue;
if (!current.contents.hasOwnProperty(part)) {
FS.createFolder(current, part, canRead, canWrite);
}
current = current.contents[part];
}
return current;
},createFile:function (parent, name, properties, canRead, canWrite) {
properties.isFolder = false;
return FS.createObject(parent, name, properties, canRead, canWrite);
},createDataFile:function (parent, name, data, canRead, canWrite) {
if (typeof data === 'string') {
var dataArray = new Array(data.length);
for (var i = 0, len = data.length; i < len; ++i) dataArray[i] = data.charCodeAt(i);
data = dataArray;
}
var properties = {
isDevice: false,
contents: data.subarray ? data.subarray(0) : data // as an optimization, create a new array wrapper (not buffer) here, to help JS engines understand this object
};
return FS.createFile(parent, name, properties, canRead, canWrite);
},createLazyFile:function (parent, name, url, canRead, canWrite) {
if (typeof XMLHttpRequest !== 'undefined') {
if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
// Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
var LazyUint8Array = function() {
this.lengthKnown = false;
this.chunks = []; // Loaded chunks. Index is the chunk number
}
LazyUint8Array.prototype.get = function(idx) {
if (idx > this.length-1 || idx < 0) {
return undefined;
}
var chunkOffset = idx % this.chunkSize;
var chunkNum = Math.floor(idx / this.chunkSize);
return this.getter(chunkNum)[chunkOffset];
}
LazyUint8Array.prototype.setDataGetter = function(getter) {
this.getter = getter;
}
LazyUint8Array.prototype.cacheLength = function() {
// Find length
var xhr = new XMLHttpRequest();
xhr.open('HEAD', url, false);
xhr.send(null);
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
var datalength = Number(xhr.getResponseHeader("Content-length"));
var header;
var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
var chunkSize = 1024*1024; // Chunk size in bytes
if (!hasByteServing) chunkSize = datalength;
// Function to get a range from the remote URL.
var doXHR = (function(from, to) {
if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
// TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
// Some hints to the browser that we want binary data.
if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
if (xhr.overrideMimeType) {
xhr.overrideMimeType('text/plain; charset=x-user-defined');
}
xhr.send(null);
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
if (xhr.response !== undefined) {
return new Uint8Array(xhr.response || []);
} else {
return intArrayFromString(xhr.responseText || '', true);
}
});
var lazyArray = this;
lazyArray.setDataGetter(function(chunkNum) {
var start = chunkNum * chunkSize;
var end = (chunkNum+1) * chunkSize - 1; // including this byte
end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
lazyArray.chunks[chunkNum] = doXHR(start, end);
}
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
return lazyArray.chunks[chunkNum];
});
this._length = datalength;
this._chunkSize = chunkSize;
this.lengthKnown = true;
}
var lazyArray = new LazyUint8Array();
Object.defineProperty(lazyArray, "length", {
get: function() {
if(!this.lengthKnown) {
this.cacheLength();
}
return this._length;
}
});
Object.defineProperty(lazyArray, "chunkSize", {
get: function() {
if(!this.lengthKnown) {
this.cacheLength();
}
return this._chunkSize;
}
});
var properties = { isDevice: false, contents: lazyArray };
} else {
var properties = { isDevice: false, url: url };
}
return FS.createFile(parent, name, properties, canRead, canWrite);
},createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile) {
Browser.init();
var fullname = FS.joinPath([parent, name], true);
function processData(byteArray) {
function finish(byteArray) {
if (!dontCreateFile) {
FS.createDataFile(parent, name, byteArray, canRead, canWrite);
}
if (onload) onload();
removeRunDependency('cp ' + fullname);
}
var handled = false;
Module['preloadPlugins'].forEach(function(plugin) {
if (handled) return;
if (plugin['canHandle'](fullname)) {
plugin['handle'](byteArray, fullname, finish, function() {
if (onerror) onerror();
removeRunDependency('cp ' + fullname);
});
handled = true;
}
});
if (!handled) finish(byteArray);
}
addRunDependency('cp ' + fullname);
if (typeof url == 'string') {
Browser.asyncLoad(url, function(byteArray) {
processData(byteArray);
}, onerror);
} else {
processData(url);
}
},createLink:function (parent, name, target, canRead, canWrite) {
var properties = {isDevice: false, link: target};
return FS.createFile(parent, name, properties, canRead, canWrite);
},createDevice:function (parent, name, input, output) {
if (!(input || output)) {
throw new Error('A device must have at least one callback defined.');
}
var ops = {isDevice: true, input: input, output: output};
return FS.createFile(parent, name, ops, Boolean(input), Boolean(output));
},forceLoadFile:function (obj) {
if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
var success = true;
if (typeof XMLHttpRequest !== 'undefined') {
throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
} else if (Module['read']) {
// Command-line.
try {
// WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
// read() will try to parse UTF8.
obj.contents = intArrayFromString(Module['read'](obj.url), true);
} catch (e) {
success = false;
}
} else {
throw new Error('Cannot load without read() or XMLHttpRequest.');
}
if (!success) ___setErrNo(ERRNO_CODES.EIO);
return success;
},staticInit:function () {
// The main file system tree. All the contents are inside this.
FS.root = {
read: true,
write: true,
isFolder: true,
isDevice: false,
timestamp: Date.now(),
inodeNumber: 1,
contents: {}
};
// Create the temporary folder, if not already created
try {
FS.createFolder('/', 'tmp', true, true);
} catch(e) {}
FS.createFolder('/', 'dev', true, true);
},init:function (input, output, error) {
// Make sure we initialize only once.
assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');
FS.init.initialized = true;
// Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
input = input || Module['stdin'];
output = output || Module['stdout'];
error = error || Module['stderr'];
// Default handlers.
var stdinOverridden = true, stdoutOverridden = true, stderrOverridden = true;
if (!input) {
stdinOverridden = false;
input = function() {
if (!input.cache || !input.cache.length) {
var result;
if (typeof window != 'undefined' &&
typeof window.prompt == 'function') {
// Browser.
result = window.prompt('Input: ');
if (result === null) result = String.fromCharCode(0); // cancel ==> EOF
} else if (typeof readline == 'function') {
// Command line.
result = readline();
}
if (!result) result = '';
input.cache = intArrayFromString(result + '\n', true);
}
return input.cache.shift();
};
}
var utf8 = new Runtime.UTF8Processor();
function createSimpleOutput() {
var fn = function (val) {
if (val === null || val === 10) {
fn.printer(fn.buffer.join(''));
fn.buffer = [];
} else {
fn.buffer.push(utf8.processCChar(val));
}
};
return fn;
}
if (!output) {
stdoutOverridden = false;
output = createSimpleOutput();
}
if (!output.printer) output.printer = Module['print'];
if (!output.buffer) output.buffer = [];
if (!error) {
stderrOverridden = false;
error = createSimpleOutput();
}
if (!error.printer) error.printer = Module['printErr'];
if (!error.buffer) error.buffer = [];
// Create the I/O devices.
var stdin = FS.createDevice('/dev', 'stdin', input);
stdin.isTerminal = !stdinOverridden;
var stdout = FS.createDevice('/dev', 'stdout', null, output);
stdout.isTerminal = !stdoutOverridden;
var stderr = FS.createDevice('/dev', 'stderr', null, error);
stderr.isTerminal = !stderrOverridden;
FS.createDevice('/dev', 'tty', input, output);
FS.createDevice('/dev', 'null', function(){}, function(){});
// Create default streams.
FS.streams[1] = {
path: '/dev/stdin',
object: stdin,
position: 0,
isRead: true,
isWrite: false,
isAppend: false,
error: false,
eof: false,
ungotten: []
};
FS.streams[2] = {
path: '/dev/stdout',
object: stdout,
position: 0,
isRead: false,
isWrite: true,
isAppend: false,
error: false,
eof: false,
ungotten: []
};
FS.streams[3] = {
path: '/dev/stderr',
object: stderr,
position: 0,
isRead: false,
isWrite: true,
isAppend: false,
error: false,
eof: false,
ungotten: []
};
// TODO: put these low in memory like we used to assert on: assert(Math.max(_stdin, _stdout, _stderr) < 15000); // make sure these are low, we flatten arrays with these
HEAP32[((_stdin)>>2)]=1;
HEAP32[((_stdout)>>2)]=2;
HEAP32[((_stderr)>>2)]=3;
// Other system paths
FS.createPath('/', 'dev/shm/tmp', true, true); // temp files
// Newlib initialization
for (var i = FS.streams.length; i < Math.max(_stdin, _stdout, _stderr) + 4; i++) {
FS.streams[i] = null; // Make sure to keep FS.streams dense
}
FS.streams[_stdin] = FS.streams[1];
FS.streams[_stdout] = FS.streams[2];
FS.streams[_stderr] = FS.streams[3];
allocate([ allocate(
[0, 0, 0, 0, _stdin, 0, 0, 0, _stdout, 0, 0, 0, _stderr, 0, 0, 0],
'void*', ALLOC_NORMAL) ], 'void*', ALLOC_NONE, __impure_ptr);
},quit:function () {
if (!FS.init.initialized) return;
// Flush any partially-printed lines in stdout and stderr. Careful, they may have been closed
if (FS.streams[2] && FS.streams[2].object.output.buffer.length > 0) FS.streams[2].object.output(10);
if (FS.streams[3] && FS.streams[3].object.output.buffer.length > 0) FS.streams[3].object.output(10);
},standardizePath:function (path) {
if (path.substr(0, 2) == './') path = path.substr(2);
return path;
},deleteFile:function (path) {
path = FS.analyzePath(path);
if (!path.parentExists || !path.exists) {
throw 'Invalid path ' + path;
}
delete path.parentObject.contents[path.name];
}};
Module['FS'] = FS;
var ___dirent_struct_layout={__size__:1040,d_ino:0,d_name:4,d_off:1028,d_reclen:1032,d_type:1036};function _open(path, oflag, varargs) {
// int open(const char *path, int oflag, ...);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/open.html
// NOTE: This implementation tries to mimic glibc rather than strictly
// following the POSIX standard.
var mode = HEAP32[((varargs)>>2)];
// Simplify flags.
var accessMode = oflag & 3;
var isWrite = accessMode != 0;
var isRead = accessMode != 1;
var isCreate = Boolean(oflag & 512);
var isExistCheck = Boolean(oflag & 2048);
var isTruncate = Boolean(oflag & 1024);
var isAppend = Boolean(oflag & 8);
// Verify path.
var origPath = path;
path = FS.analyzePath(Pointer_stringify(path));
if (!path.parentExists) {
___setErrNo(path.error);
return -1;
}
var target = path.object || null;
var finalPath;
// Verify the file exists, create if needed and allowed.
if (target) {
if (isCreate && isExistCheck) {
___setErrNo(ERRNO_CODES.EEXIST);
return -1;
}
if ((isWrite || isTruncate) && target.isFolder) {
___setErrNo(ERRNO_CODES.EISDIR);
return -1;
}
if (isRead && !target.read || isWrite && !target.write) {
___setErrNo(ERRNO_CODES.EACCES);
return -1;
}
if (isTruncate && !target.isDevice) {
target.contents = [];
} else {
if (!FS.forceLoadFile(target)) {
___setErrNo(ERRNO_CODES.EIO);
return -1;
}
}
finalPath = path.path;
} else {
if (!isCreate) {
___setErrNo(ERRNO_CODES.ENOENT);
return -1;
}
if (!path.parentObject.write) {
___setErrNo(ERRNO_CODES.EACCES);
return -1;
}
target = FS.createDataFile(path.parentObject, path.name, [],
mode & 0x100, mode & 0x80); // S_IRUSR, S_IWUSR.
finalPath = path.parentPath + '/' + path.name;
}
// Actually create an open stream.
var id;
if (target.isFolder) {
var entryBuffer = 0;
if (___dirent_struct_layout) {
entryBuffer = _malloc(___dirent_struct_layout.__size__);
}
var contents = [];
for (var key in target.contents) contents.push(key);
id = FS.createFileHandle({
path: finalPath,
object: target,
// An index into contents. Special values: -2 is ".", -1 is "..".
position: -2,
isRead: true,
isWrite: false,
isAppend: false,
error: false,
eof: false,
ungotten: [],
// Folder-specific properties:
// Remember the contents at the time of opening in an array, so we can
// seek between them relying on a single order.
contents: contents,
// Each stream has its own area for readdir() returns.
currentEntry: entryBuffer
});
} else {
id = FS.createFileHandle({
path: finalPath,
object: target,
position: 0,
isRead: isRead,
isWrite: isWrite,
isAppend: isAppend,
error: false,
eof: false,
ungotten: []
});
}
return id;
}function _fopen(filename, mode) {
// FILE *fopen(const char *restrict filename, const char *restrict mode);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html
var flags;
mode = Pointer_stringify(mode);
if (mode[0] == 'r') {
if (mode.indexOf('+') != -1) {
flags = 2;
} else {
flags = 0;
}
} else if (mode[0] == 'w') {
if (mode.indexOf('+') != -1) {
flags = 2;
} else {
flags = 1;
}
flags |= 512;
flags |= 1024;
} else if (mode[0] == 'a') {
if (mode.indexOf('+') != -1) {
flags = 2;
} else {
flags = 1;
}
flags |= 512;
flags |= 8;
} else {
___setErrNo(ERRNO_CODES.EINVAL);
return 0;
}
var ret = _open(filename, flags, allocate([0x1FF, 0, 0, 0], 'i32', ALLOC_STACK)); // All creation permissions.
return (ret == -1) ? 0 : ret;
}
function _recv(fd, buf, len, flags) {
var info = FS.streams[fd];
if (!info) return -1;
if (!info.hasData()) {
___setErrNo(ERRNO_CODES.EAGAIN); // no data, and all sockets are nonblocking, so this is the right behavior
return -1;
}
var buffer = info.inQueue.shift();
if (len < buffer.length) {
if (info.stream) {
// This is tcp (reliable), so if not all was read, keep it
info.inQueue.unshift(buffer.subarray(len));
}
buffer = buffer.subarray(0, len);
}
HEAPU8.set(buffer, buf);
return buffer.length;
}
function _pread(fildes, buf, nbyte, offset) {
// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
var stream = FS.streams[fildes];
if (!stream || stream.object.isDevice) {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
} else if (!stream.isRead) {
___setErrNo(ERRNO_CODES.EACCES);
return -1;
} else if (stream.object.isFolder) {
___setErrNo(ERRNO_CODES.EISDIR);
return -1;
} else if (nbyte < 0 || offset < 0) {
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
} else if (offset >= stream.object.contents.length) {
return 0;
} else {
var bytesRead = 0;
var contents = stream.object.contents;
var size = Math.min(contents.length - offset, nbyte);
assert(size >= 0);
if (contents.subarray) { // typed array
HEAPU8.set(contents.subarray(offset, offset+size), buf);
} else
if (contents.slice) { // normal array
for (var i = 0; i < size; i++) {
HEAP8[(((buf)+(i))|0)]=contents[offset + i]
}
} else {
for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
HEAP8[(((buf)+(i))|0)]=contents.get(offset + i)
}
}
bytesRead += size;
return bytesRead;
}
}function _read(fildes, buf, nbyte) {
// ssize_t read(int fildes, void *buf, size_t nbyte);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
var stream = FS.streams[fildes];
if (stream && ('socket' in stream)) {
return _recv(fildes, buf, nbyte, 0);
} else if (!stream) {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
} else if (!stream.isRead) {
___setErrNo(ERRNO_CODES.EACCES);
return -1;
} else if (nbyte < 0) {
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
} else {
var bytesRead;
if (stream.object.isDevice) {
if (stream.object.input) {
bytesRead = 0;
for (var i = 0; i < nbyte; i++) {
try {
var result = stream.object.input();
} catch (e) {
___setErrNo(ERRNO_CODES.EIO);
return -1;
}
if (result === undefined && bytesRead === 0) {
___setErrNo(ERRNO_CODES.EAGAIN);
return -1;
}
if (result === null || result === undefined) break;
bytesRead++;
HEAP8[(((buf)+(i))|0)]=result
}
return bytesRead;
} else {
___setErrNo(ERRNO_CODES.ENXIO);
return -1;
}
} else {
bytesRead = _pread(fildes, buf, nbyte, stream.position);
assert(bytesRead >= -1);
if (bytesRead != -1) {
stream.position += bytesRead;
}
return bytesRead;
}
}
}function _fread(ptr, size, nitems, stream) {
// size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
var bytesToRead = nitems * size;
if (bytesToRead == 0) {
return 0;
}
var bytesRead = 0;
var streamObj = FS.streams[stream];
while (streamObj.ungotten.length && bytesToRead > 0) {
HEAP8[((ptr++)|0)]=streamObj.ungotten.pop()
bytesToRead--;
bytesRead++;
}
var err = _read(stream, ptr, bytesToRead);
if (err == -1) {
if (streamObj) streamObj.error = true;
return 0;
}
bytesRead += err;
if (bytesRead < bytesToRead) streamObj.eof = true;
return Math.floor(bytesRead / size);
}
function _close(fildes) {
// int close(int fildes);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/close.html
if (FS.streams[fildes]) {
if (FS.streams[fildes].currentEntry) {
_free(FS.streams[fildes].currentEntry);
}
FS.streams[fildes] = null;
return 0;
} else {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
}
}
function _fsync(fildes) {
// int fsync(int fildes);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fsync.html
if (FS.streams[fildes]) {
// We write directly to the file system, so there's nothing to do here.
return 0;
} else {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
}
}function _fclose(stream) {
// int fclose(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fclose.html
_fsync(stream);
return _close(stream);
}
function _lseek(fildes, offset, whence) {
// off_t lseek(int fildes, off_t offset, int whence);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/lseek.html
if (FS.streams[fildes] && !FS.streams[fildes].object.isDevice) {
var stream = FS.streams[fildes];
var position = offset;
if (whence === 1) { // SEEK_CUR.
position += stream.position;
} else if (whence === 2) { // SEEK_END.
position += stream.object.contents.length;
}
if (position < 0) {
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
} else {
stream.ungotten = [];
stream.position = position;
return position;
}
} else {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
}
}function _fseek(stream, offset, whence) {
// int fseek(FILE *stream, long offset, int whence);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fseek.html
var ret = _lseek(stream, offset, whence);
if (ret == -1) {
return -1;
} else {
FS.streams[stream].eof = false;
return 0;
}
}
function _ftell(stream) {
// long ftell(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/ftell.html
if (FS.streams[stream]) {
stream = FS.streams[stream];
if (stream.object.isDevice) {
___setErrNo(ERRNO_CODES.ESPIPE);
return -1;
} else {
return stream.position;
}
} else {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
}
}
function ___assert_func(filename, line, func, condition) {
throw 'Assertion failed: ' + (condition ? Pointer_stringify(condition) : 'unknown condition') + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function'] + ' at ' + new Error().stack;
}
Module["_memcpy"] = _memcpy;var _llvm_memcpy_p0i8_p0i8_i32=_memcpy;
function __exit(status) {
// void _exit(int status);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
Module['exit'](status);
}function _exit(status) {
__exit(status);
}function __ZSt9terminatev() {
_exit(-1234);
}
Module["_strlen"] = _strlen;
function _send(fd, buf, len, flags) {
var info = FS.streams[fd];
if (!info) return -1;
info.sender(HEAPU8.subarray(buf, buf+len));
return len;
}
function _pwrite(fildes, buf, nbyte, offset) {
// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
var stream = FS.streams[fildes];
if (!stream || stream.object.isDevice) {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
} else if (!stream.isWrite) {
___setErrNo(ERRNO_CODES.EACCES);
return -1;
} else if (stream.object.isFolder) {
___setErrNo(ERRNO_CODES.EISDIR);
return -1;
} else if (nbyte < 0 || offset < 0) {
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
} else {
var contents = stream.object.contents;
while (contents.length < offset) contents.push(0);
for (var i = 0; i < nbyte; i++) {
contents[offset + i] = HEAPU8[(((buf)+(i))|0)];
}
stream.object.timestamp = Date.now();
return i;
}
}function _write(fildes, buf, nbyte) {
// ssize_t write(int fildes, const void *buf, size_t nbyte);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
var stream = FS.streams[fildes];
if (stream && ('socket' in stream)) {
return _send(fildes, buf, nbyte, 0);
} else if (!stream) {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
} else if (!stream.isWrite) {
___setErrNo(ERRNO_CODES.EACCES);
return -1;
} else if (nbyte < 0) {
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
} else {
if (stream.object.isDevice) {
if (stream.object.output) {
for (var i = 0; i < nbyte; i++) {
try {
stream.object.output(HEAP8[(((buf)+(i))|0)]);
} catch (e) {
___setErrNo(ERRNO_CODES.EIO);
return -1;
}
}
stream.object.timestamp = Date.now();
return i;
} else {
___setErrNo(ERRNO_CODES.ENXIO);
return -1;
}
} else {
var bytesWritten = _pwrite(fildes, buf, nbyte, stream.position);
if (bytesWritten != -1) stream.position += bytesWritten;
return bytesWritten;
}
}
}function _fwrite(ptr, size, nitems, stream) {
// size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
var bytesToWrite = nitems * size;
if (bytesToWrite == 0) return 0;
var bytesWritten = _write(stream, ptr, bytesToWrite);
if (bytesWritten == -1) {
if (FS.streams[stream]) FS.streams[stream].error = true;
return 0;
} else {
return Math.floor(bytesWritten / size);
}
}
function __reallyNegative(x) {
return x < 0 || (x === 0 && (1/x) === -Infinity);
}function __formatString(format, varargs) {
var textIndex = format;
var argIndex = 0;
function getNextArg(type) {
// NOTE: Explicitly ignoring type safety. Otherwise this fails:
// int x = 4; printf("%c\n", (char)x);
var ret;
if (type === 'double') {
ret = HEAPF64[(((varargs)+(argIndex))>>3)];
} else if (type == 'i64') {
ret = [HEAP32[(((varargs)+(argIndex))>>2)],
HEAP32[(((varargs)+(argIndex+8))>>2)]];
argIndex += 8; // each 32-bit chunk is in a 64-bit block
} else {
type = 'i32'; // varargs are always i32, i64, or double
ret = HEAP32[(((varargs)+(argIndex))>>2)];
}
argIndex += Math.max(Runtime.getNativeFieldSize(type), Runtime.getAlignSize(type, null, true));
return ret;
}
var ret = [];
var curr, next, currArg;
while(1) {
var startTextIndex = textIndex;
curr = HEAP8[(textIndex)];
if (curr === 0) break;
next = HEAP8[((textIndex+1)|0)];
if (curr == 37) {
// Handle flags.
var flagAlwaysSigned = false;
var flagLeftAlign = false;
var flagAlternative = false;
var flagZeroPad = false;
flagsLoop: while (1) {
switch (next) {
case 43:
flagAlwaysSigned = true;
break;
case 45:
flagLeftAlign = true;
break;
case 35:
flagAlternative = true;
break;
case 48:
if (flagZeroPad) {
break flagsLoop;
} else {
flagZeroPad = true;
break;
}
default:
break flagsLoop;
}
textIndex++;
next = HEAP8[((textIndex+1)|0)];
}
// Handle width.
var width = 0;
if (next == 42) {
width = getNextArg('i32');
textIndex++;
next = HEAP8[((textIndex+1)|0)];
} else {
while (next >= 48 && next <= 57) {
width = width * 10 + (next - 48);
textIndex++;
next = HEAP8[((textIndex+1)|0)];
}
}
// Handle precision.
var precisionSet = false;
if (next == 46) {
var precision = 0;
precisionSet = true;
textIndex++;
next = HEAP8[((textIndex+1)|0)];
if (next == 42) {
precision = getNextArg('i32');
textIndex++;
} else {
while(1) {
var precisionChr = HEAP8[((textIndex+1)|0)];
if (precisionChr < 48 ||
precisionChr > 57) break;
precision = precision * 10 + (precisionChr - 48);
textIndex++;
}
}
next = HEAP8[((textIndex+1)|0)];
} else {
var precision = 6; // Standard default.
}
// Handle integer sizes. WARNING: These assume a 32-bit architecture!
var argSize;
switch (String.fromCharCode(next)) {
case 'h':
var nextNext = HEAP8[((textIndex+2)|0)];
if (nextNext == 104) {
textIndex++;
argSize = 1; // char (actually i32 in varargs)
} else {
argSize = 2; // short (actually i32 in varargs)
}
break;
case 'l':
var nextNext = HEAP8[((textIndex+2)|0)];
if (nextNext == 108) {
textIndex++;
argSize = 8; // long long
} else {
argSize = 4; // long
}
break;
case 'L': // long long
case 'q': // int64_t
case 'j': // intmax_t
argSize = 8;
break;
case 'z': // size_t
case 't': // ptrdiff_t
case 'I': // signed ptrdiff_t or unsigned size_t
argSize = 4;
break;
default:
argSize = null;
}
if (argSize) textIndex++;
next = HEAP8[((textIndex+1)|0)];
// Handle type specifier.
switch (String.fromCharCode(next)) {
case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': {
// Integer.
var signed = next == 100 || next == 105;
argSize = argSize || 4;
var currArg = getNextArg('i' + (argSize * 8));
var origArg = currArg;
var argText;
// Flatten i64-1 [low, high] into a (slightly rounded) double
if (argSize == 8) {
currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117);
}
// Truncate to requested size.
if (argSize <= 4) {
var limit = Math.pow(256, argSize) - 1;
currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
}
// Format the number.
var currAbsArg = Math.abs(currArg);
var prefix = '';
if (next == 100 || next == 105) {
if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); else
argText = reSign(currArg, 8 * argSize, 1).toString(10);
} else if (next == 117) {
if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); else
argText = unSign(currArg, 8 * argSize, 1).toString(10);
currArg = Math.abs(currArg);
} else if (next == 111) {
argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
} else if (next == 120 || next == 88) {
prefix = (flagAlternative && currArg != 0) ? '0x' : '';
if (argSize == 8 && i64Math) {
if (origArg[1]) {
argText = (origArg[1]>>>0).toString(16);
var lower = (origArg[0]>>>0).toString(16);
while (lower.length < 8) lower = '0' + lower;
argText += lower;
} else {
argText = (origArg[0]>>>0).toString(16);
}
} else
if (currArg < 0) {
// Represent negative numbers in hex as 2's complement.
currArg = -currArg;
argText = (currAbsArg - 1).toString(16);
var buffer = [];
for (var i = 0; i < argText.length; i++) {
buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
}
argText = buffer.join('');
while (argText.length < argSize * 2) argText = 'f' + argText;
} else {
argText = currAbsArg.toString(16);
}
if (next == 88) {
prefix = prefix.toUpperCase();
argText = argText.toUpperCase();
}
} else if (next == 112) {
if (currAbsArg === 0) {
argText = '(nil)';
} else {
prefix = '0x';
argText = currAbsArg.toString(16);
}
}
if (precisionSet) {
while (argText.length < precision) {
argText = '0' + argText;
}
}
// Add sign if needed
if (flagAlwaysSigned) {
if (currArg < 0) {
prefix = '-' + prefix;
} else {
prefix = '+' + prefix;
}
}
// Add padding.
while (prefix.length + argText.length < width) {
if (flagLeftAlign) {
argText += ' ';
} else {
if (flagZeroPad) {
argText = '0' + argText;
} else {
prefix = ' ' + prefix;
}
}
}
// Insert the result into the buffer.
argText = prefix + argText;
argText.split('').forEach(function(chr) {
ret.push(chr.charCodeAt(0));
});
break;
}
case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
// Float.
var currArg = getNextArg('double');
var argText;
if (isNaN(currArg)) {
argText = 'nan';
flagZeroPad = false;
} else if (!isFinite(currArg)) {
argText = (currArg < 0 ? '-' : '') + 'inf';
flagZeroPad = false;
} else {
var isGeneral = false;
var effectivePrecision = Math.min(precision, 20);
// Convert g/G to f/F or e/E, as per:
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
if (next == 103 || next == 71) {
isGeneral = true;
precision = precision || 1;
var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10);
if (precision > exponent && exponent >= -4) {
next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
precision -= exponent + 1;
} else {
next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
precision--;
}
effectivePrecision = Math.min(precision, 20);
}
if (next == 101 || next == 69) {
argText = currArg.toExponential(effectivePrecision);
// Make sure the exponent has at least 2 digits.
if (/[eE][-+]\d$/.test(argText)) {
argText = argText.slice(0, -1) + '0' + argText.slice(-1);
}
} else if (next == 102 || next == 70) {
argText = currArg.toFixed(effectivePrecision);
if (currArg === 0 && __reallyNegative(currArg)) {
argText = '-' + argText;
}
}
var parts = argText.split('e');
if (isGeneral && !flagAlternative) {
// Discard trailing zeros and periods.
while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
(parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) {
parts[0] = parts[0].slice(0, -1);
}
} else {
// Make sure we have a period in alternative mode.
if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
// Zero pad until required precision.
while (precision > effectivePrecision++) parts[0] += '0';
}
argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
// Capitalize 'E' if needed.
if (next == 69) argText = argText.toUpperCase();
// Add sign.
if (flagAlwaysSigned && currArg >= 0) {
argText = '+' + argText;
}
}
// Add padding.
while (argText.length < width) {
if (flagLeftAlign) {
argText += ' ';
} else {
if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
argText = argText[0] + '0' + argText.slice(1);
} else {
argText = (flagZeroPad ? '0' : ' ') + argText;
}
}
}
// Adjust case.
if (next < 97) argText = argText.toUpperCase();
// Insert the result into the buffer.
argText.split('').forEach(function(chr) {
ret.push(chr.charCodeAt(0));
});
break;
}
case 's': {
// String.
var arg = getNextArg('i8*');
var argLength = arg ? _strlen(arg) : '(null)'.length;
if (precisionSet) argLength = Math.min(argLength, precision);
if (!flagLeftAlign) {
while (argLength < width--) {
ret.push(32);
}
}
if (arg) {
for (var i = 0; i < argLength; i++) {
ret.push(HEAPU8[((arg++)|0)]);
}
} else {
ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true));
}
if (flagLeftAlign) {
while (argLength < width--) {
ret.push(32);
}
}
break;
}
case 'c': {
// Character.
if (flagLeftAlign) ret.push(getNextArg('i8'));
while (--width > 0) {
ret.push(32);
}
if (!flagLeftAlign) ret.push(getNextArg('i8'));
break;
}
case 'n': {
// Write the length written so far to the next parameter.
var ptr = getNextArg('i32*');
HEAP32[((ptr)>>2)]=ret.length
break;
}
case '%': {
// Literal percent sign.
ret.push(curr);
break;
}
default: {
// Unknown specifiers remain untouched.
for (var i = startTextIndex; i < textIndex + 2; i++) {
ret.push(HEAP8[(i)]);
}
}
}
textIndex += 2;
// TODO: Support a/A (hex float) and m (last error) specifiers.
// TODO: Support %1${specifier} for arg selection.
} else {
ret.push(curr);
textIndex += 1;
}
}
return ret;
}function _fprintf(stream, format, varargs) {
// int fprintf(FILE *restrict stream, const char *restrict format, ...);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
var result = __formatString(format, varargs);
var stack = Runtime.stackSave();
var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream);
Runtime.stackRestore(stack);
return ret;
}function _printf(format, varargs) {
// int printf(const char *restrict format, ...);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
var stdout = HEAP32[((_stdout)>>2)];
return _fprintf(stdout, format, varargs);
}
var _llvm_memset_p0i8_i64=_memset;
function _fputs(s, stream) {
// int fputs(const char *restrict s, FILE *restrict stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
return _write(stream, s, _strlen(s));
}
function _fputc(c, stream) {
// int fputc(int c, FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
var chr = unSign(c & 0xFF);
HEAP8[((_fputc.ret)|0)]=chr
var ret = _write(stream, _fputc.ret, 1);
if (ret == -1) {
if (FS.streams[stream]) FS.streams[stream].error = true;
return -1;
} else {
return chr;
}
}function _puts(s) {
// int puts(const char *s);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html
// NOTE: puts() always writes an extra newline.
var stdout = HEAP32[((_stdout)>>2)];
var ret = _fputs(s, stdout);
if (ret < 0) {
return ret;
} else {
var newlineRet = _fputc(10, stdout);
return (newlineRet < 0) ? -1 : ret + 1;
}
}
function _putchar(c) {
// int putchar(int c);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/putchar.html
return _fputc(c, HEAP32[((_stdout)>>2)]);
}
function _fdopen(fildes, mode) {
// FILE *fdopen(int fildes, const char *mode);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fdopen.html
if (FS.streams[fildes]) {
var stream = FS.streams[fildes];
mode = Pointer_stringify(mode);
if ((mode.indexOf('w') != -1 && !stream.isWrite) ||
(mode.indexOf('r') != -1 && !stream.isRead) ||
(mode.indexOf('a') != -1 && !stream.isAppend) ||
(mode.indexOf('+') != -1 && (!stream.isRead || !stream.isWrite))) {
___setErrNo(ERRNO_CODES.EINVAL);
return 0;
} else {
stream.error = false;
stream.eof = false;
return fildes;
}
} else {
___setErrNo(ERRNO_CODES.EBADF);
return 0;
}
}
function ___cxa_pure_virtual() {
ABORT = true;
throw 'Pure virtual function called!';
}
function _qsort2(base, num, size, cmp) {
// forward calls to the JavaScript sort method
// first, sort the items logically
var keys = [];
for (var i = 0; i < num; i++) {
keys.push(HEAP32[(base + i * size) >> 2]);
}
keys.sort(function(a, b) {
return a - b;
});
// apply the sort
for (var i = 0; i < num; i++) {
HEAP32[(base+i*size >> 2)] = keys[i];
}
}
function _qsort(base, num, size, cmp) {
if (num == 0 || size == 0) return;
// forward calls to the JavaScript sort method
// first, sort the items logically
var keys = [];
for (var i = 0; i < num; i++) keys.push(i);
keys.sort(function(a, b) {
return Module['dynCall_iii'](cmp, base+a*size, base+b*size);
});
// apply the sort
var temp = _malloc(num*size);
_memcpy(temp, base, num*size);
for (var i = 0; i < num; i++) {
if (keys[i] == i) continue; // already in place
_memcpy(base+i*size, temp+keys[i]*size, size);
}
_free(temp);
}
var _fabs=Math.abs;
var _log=Math.log;
function _strncmp(px, py, n) {
var i = 0;
while (i < n) {
var x = HEAPU8[(((px)+(i))|0)];
var y = HEAPU8[(((py)+(i))|0)];
if (x == y && x == 0) return 0;
if (x == 0) return -1;
if (y == 0) return 1;
if (x == y) {
i ++;
continue;
} else {
return x > y ? 1 : -1;
}
}
return 0;
}function _strcmp(px, py) {
return _strncmp(px, py, TOTAL_MEMORY);
}
function _snprintf(s, n, format, varargs) {
// int snprintf(char *restrict s, size_t n, const char *restrict format, ...);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
var result = __formatString(format, varargs);
var limit = (n === undefined) ? result.length
: Math.min(result.length, Math.max(n - 1, 0));
if (s < 0) {
s = -s;
var buf = _malloc(limit+1);
HEAP32[((s)>>2)]=buf;
s = buf;
}
for (var i = 0; i < limit; i++) {
HEAP8[(((s)+(i))|0)]=result[i];
}
if (limit < n || (n === undefined)) HEAP8[(((s)+(i))|0)]=0;
return result.length;
}
function _strdup(ptr) {
var len = _strlen(ptr);
var newStr = _malloc(len + 1);
(_memcpy(newStr, ptr, len)|0);
HEAP8[(((newStr)+(len))|0)]=0;
return newStr;
}
function _bsearch(key, base, num, size, compar) {
var cmp = function(x, y) {
return Module['dynCall_iii'](compar, x, y);
};
var left = 0;
var right = num;
var mid, test, addr;
while (left < right) {
mid = (left + right) >>> 1;
addr = base + (mid * size);
test = cmp(key, addr);
if (test < 0) {
right = mid;
} else if (test > 0) {
left = mid + 1;
} else {
return addr;
}
}
return 0;
}
var _sqrt=Math.sqrt;
Module["_strncpy"] = _strncpy;
function _gettimeofday(ptr) {
// %struct.timeval = type { i32, i32 }
var now = Date.now();
HEAP32[((ptr)>>2)]=Math.floor(now/1000); // seconds
HEAP32[(((ptr)+(4))>>2)]=Math.floor((now-1000*Math.floor(now/1000))*1000); // microseconds
return 0;
}
Module["_memcmp"] = _memcmp;
function _unlink(path) {
// int unlink(const char *path);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/unlink.html
path = Pointer_stringify(path);
path = FS.analyzePath(path, true);
if (!path.parentExists || !path.exists) {
___setErrNo(path.error);
return -1;
} else if (path.object.isFolder) {
___setErrNo(ERRNO_CODES.EPERM);
return -1;
} else if (!path.parentObject.write) {
___setErrNo(ERRNO_CODES.EACCES);
return -1;
} else {
delete path.parentObject.contents[path.name];
return 0;
}
}
function _ferror(stream) {
// int ferror(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/ferror.html
return Number(FS.streams[stream] && FS.streams[stream].error);
}
function _feof(stream) {
// int feof(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/feof.html
return Number(FS.streams[stream] && FS.streams[stream].eof);
}
function _truncate(path, length) {
// int truncate(const char *path, off_t length);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/truncate.html
// NOTE: The path argument may be a string, to simplify ftruncate().
if (length < 0) {
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
} else {
if (typeof path !== 'string') path = Pointer_stringify(path);
var target = FS.findObject(path);
if (target === null) return -1;
if (target.isFolder) {
___setErrNo(ERRNO_CODES.EISDIR);
return -1;
} else if (target.isDevice) {
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
} else if (!target.write) {
___setErrNo(ERRNO_CODES.EACCES);
return -1;
} else {
var contents = target.contents;
if (length < contents.length) contents.length = length;
else while (length > contents.length) contents.push(0);
target.timestamp = Date.now();
return 0;
}
}
}function _ftruncate(fildes, length) {
// int ftruncate(int fildes, off_t length);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/ftruncate.html
if (FS.streams[fildes] && FS.streams[fildes].isWrite) {
return _truncate(FS.streams[fildes].path, length);
} else if (FS.streams[fildes]) {
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
} else {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
}
}
Module["_memmove"] = _memmove;var _llvm_memmove_p0i8_p0i8_i32=_memmove;
function _time(ptr) {
var ret = Math.floor(Date.now()/1000);
if (ptr) {
HEAP32[((ptr)>>2)]=ret
}
return ret;
}
function _abort() {
Module['abort']();
}
function ___errno_location() {
return ___errno_state;
}var ___errno=___errno_location;
function _sysconf(name) {
// long sysconf(int name);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
switch(name) {
case 8: return PAGE_SIZE;
case 54:
case 56:
case 21:
case 61:
case 63:
case 22:
case 67:
case 23:
case 24:
case 25:
case 26:
case 27:
case 69:
case 28:
case 101:
case 70:
case 71:
case 29:
case 30:
case 199:
case 75:
case 76:
case 32:
case 43:
case 44:
case 80:
case 46:
case 47:
case 45:
case 48:
case 49:
case 42:
case 82:
case 33:
case 7:
case 108:
case 109:
case 107:
case 112:
case 119:
case 121:
return 200809;
case 13:
case 104:
case 94:
case 95:
case 34:
case 35:
case 77:
case 81:
case 83:
case 84:
case 85:
case 86:
case 87:
case 88:
case 89:
case 90:
case 91:
case 94:
case 95:
case 110:
case 111:
case 113:
case 114:
case 115:
case 116:
case 117:
case 118:
case 120:
case 40:
case 16:
case 79:
case 19:
return -1;
case 92:
case 93:
case 5:
case 72:
case 6:
case 74:
case 92:
case 93:
case 96:
case 97:
case 98:
case 99:
case 102:
case 103:
case 105:
return 1;
case 38:
case 66:
case 50:
case 51:
case 4:
return 1024;
case 15:
case 64:
case 41:
return 32;
case 55:
case 37:
case 17:
return 2147483647;
case 18:
case 1:
return 47839;
case 59:
case 57:
return 99;
case 68:
case 58:
return 2048;
case 0: return 2097152;
case 3: return 65536;
case 14: return 32768;
case 73: return 32767;
case 39: return 16384;
case 60: return 1000;
case 106: return 700;
case 52: return 256;
case 62: return 255;
case 2: return 100;
case 65: return 64;
case 36: return 20;
case 100: return 16;
case 20: return 6;
case 53: return 4;
case 10: return 1;
}
___setErrNo(ERRNO_CODES.EINVAL);
return -1;
}
function _sbrk(bytes) {
// Implement a Linux-like 'memory area' for our 'process'.
// Changes the size of the memory area by |bytes|; returns the
// address of the previous top ('break') of the memory area
// We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
var self = _sbrk;
if (!self.called) {
DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned
self.called = true;
assert(Runtime.dynamicAlloc);
self.alloc = Runtime.dynamicAlloc;
Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
}
var ret = DYNAMICTOP;
if (bytes != 0) self.alloc(bytes);
return ret; // Previous break location.
}
function ___cxa_allocate_exception(size) {
return _malloc(size);
}
function _llvm_eh_exception() {
return HEAP32[((_llvm_eh_exception.buf)>>2)];
}
function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()
return !!__ZSt18uncaught_exceptionv.uncaught_exception;
}
function ___cxa_is_number_type(type) {
var isNumber = false;
try { if (type == __ZTIi) isNumber = true } catch(e){}
try { if (type == __ZTIj) isNumber = true } catch(e){}
try { if (type == __ZTIl) isNumber = true } catch(e){}
try { if (type == __ZTIm) isNumber = true } catch(e){}
try { if (type == __ZTIx) isNumber = true } catch(e){}
try { if (type == __ZTIy) isNumber = true } catch(e){}
try { if (type == __ZTIf) isNumber = true } catch(e){}
try { if (type == __ZTId) isNumber = true } catch(e){}
try { if (type == __ZTIe) isNumber = true } catch(e){}
try { if (type == __ZTIc) isNumber = true } catch(e){}
try { if (type == __ZTIa) isNumber = true } catch(e){}
try { if (type == __ZTIh) isNumber = true } catch(e){}
try { if (type == __ZTIs) isNumber = true } catch(e){}
try { if (type == __ZTIt) isNumber = true } catch(e){}
return isNumber;
}function ___cxa_does_inherit(definiteType, possibilityType, possibility) {
if (possibility == 0) return false;
if (possibilityType == 0 || possibilityType == definiteType)
return true;
var possibility_type_info;
if (___cxa_is_number_type(possibilityType)) {
possibility_type_info = possibilityType;
} else {
var possibility_type_infoAddr = HEAP32[((possibilityType)>>2)] - 8;
possibility_type_info = HEAP32[((possibility_type_infoAddr)>>2)];
}
switch (possibility_type_info) {
case 0: // possibility is a pointer
// See if definite type is a pointer
var definite_type_infoAddr = HEAP32[((definiteType)>>2)] - 8;
var definite_type_info = HEAP32[((definite_type_infoAddr)>>2)];
if (definite_type_info == 0) {
// Also a pointer; compare base types of pointers
var defPointerBaseAddr = definiteType+8;
var defPointerBaseType = HEAP32[((defPointerBaseAddr)>>2)];
var possPointerBaseAddr = possibilityType+8;
var possPointerBaseType = HEAP32[((possPointerBaseAddr)>>2)];
return ___cxa_does_inherit(defPointerBaseType, possPointerBaseType, possibility);
} else
return false; // one pointer and one non-pointer
case 1: // class with no base class
return false;
case 2: // class with base class
var parentTypeAddr = possibilityType + 8;
var parentType = HEAP32[((parentTypeAddr)>>2)];
return ___cxa_does_inherit(definiteType, parentType, possibility);
default:
return false; // some unencountered type
}
}
function ___resumeException(ptr) {
if (HEAP32[((_llvm_eh_exception.buf)>>2)] == 0) HEAP32[((_llvm_eh_exception.buf)>>2)]=ptr;
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.";;
}function ___cxa_find_matching_catch(thrown, throwntype) {
if (thrown == -1) thrown = HEAP32[((_llvm_eh_exception.buf)>>2)];
if (throwntype == -1) throwntype = HEAP32[(((_llvm_eh_exception.buf)+(4))>>2)];
var typeArray = Array.prototype.slice.call(arguments, 2);
// If throwntype is a pointer, this means a pointer has been
// thrown. When a pointer is thrown, actually what's thrown
// is a pointer to the pointer. We'll dereference it.
if (throwntype != 0 && !___cxa_is_number_type(throwntype)) {
var throwntypeInfoAddr= HEAP32[((throwntype)>>2)] - 8;
var throwntypeInfo= HEAP32[((throwntypeInfoAddr)>>2)];
if (throwntypeInfo == 0)
thrown = HEAP32[((thrown)>>2)];
}
// The different catch blocks are denoted by different types.
// Due to inheritance, those types may not precisely match the
// type of the thrown object. Find one which matches, and
// return the type of the catch block which should be called.
for (var i = 0; i < typeArray.length; i++) {
if (___cxa_does_inherit(typeArray[i], throwntype, thrown))
return ((asm["setTempRet0"](typeArray[i]),thrown)|0);
}
// Shouldn't happen unless we have bogus data in typeArray
// or encounter a type for which emscripten doesn't have suitable
// typeinfo defined. Best-efforts match just in case.
return ((asm["setTempRet0"](throwntype),thrown)|0);
}function ___cxa_throw(ptr, type, destructor) {
if (!___cxa_throw.initialized) {
try {
HEAP32[((__ZTVN10__cxxabiv119__pointer_type_infoE)>>2)]=0; // Workaround for libcxxabi integration bug
} catch(e){}
try {
HEAP32[((__ZTVN10__cxxabiv117__class_type_infoE)>>2)]=1; // Workaround for libcxxabi integration bug
} catch(e){}
try {
HEAP32[((__ZTVN10__cxxabiv120__si_class_type_infoE)>>2)]=2; // Workaround for libcxxabi integration bug
} catch(e){}
___cxa_throw.initialized = true;
}
HEAP32[((_llvm_eh_exception.buf)>>2)]=ptr
HEAP32[(((_llvm_eh_exception.buf)+(4))>>2)]=type
HEAP32[(((_llvm_eh_exception.buf)+(8))>>2)]=destructor
if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) {
__ZSt18uncaught_exceptionv.uncaught_exception = 1;
} else {
__ZSt18uncaught_exceptionv.uncaught_exception++;
}
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.";;
}
function ___cxa_call_unexpected(exception) {
Module.printErr('Unexpected exception thrown, this is not properly supported - aborting');
ABORT = true;
throw exception;
}
function ___cxa_begin_catch(ptr) {
__ZSt18uncaught_exceptionv.uncaught_exception--;
return ptr;
}
function ___cxa_free_exception(ptr) {
try {
return _free(ptr);
} catch(e) { // XXX FIXME
}
}function ___cxa_end_catch() {
if (___cxa_end_catch.rethrown) {
___cxa_end_catch.rethrown = false;
return;
}
// Clear state flag.
asm['setThrew'](0);
// Clear type.
HEAP32[(((_llvm_eh_exception.buf)+(4))>>2)]=0
// Call destructor if one is registered then clear it.
var ptr = HEAP32[((_llvm_eh_exception.buf)>>2)];
var destructor = HEAP32[(((_llvm_eh_exception.buf)+(8))>>2)];
if (destructor) {
Runtime.dynCall('vi', destructor, [ptr]);
HEAP32[(((_llvm_eh_exception.buf)+(8))>>2)]=0
}
// Free ptr if it isn't null.
if (ptr) {
___cxa_free_exception(ptr);
HEAP32[((_llvm_eh_exception.buf)>>2)]=0
}
}
var _environ=allocate(1, "i32*", ALLOC_STATIC);var ___environ=_environ;function ___buildEnvironment(env) {
// WARNING: Arbitrary limit!
var MAX_ENV_VALUES = 64;
var TOTAL_ENV_SIZE = 1024;
// Statically allocate memory for the environment.
var poolPtr;
var envPtr;
if (!___buildEnvironment.called) {
___buildEnvironment.called = true;
// Set default values. Use string keys for Closure Compiler compatibility.
ENV['USER'] = 'root';
ENV['PATH'] = '/';
ENV['PWD'] = '/';
ENV['HOME'] = '/home/emscripten';
ENV['LANG'] = 'en_US.UTF-8';
ENV['_'] = './this.program';
// Allocate memory.
poolPtr = allocate(TOTAL_ENV_SIZE, 'i8', ALLOC_STATIC);
envPtr = allocate(MAX_ENV_VALUES * 4,
'i8*', ALLOC_STATIC);
HEAP32[((envPtr)>>2)]=poolPtr
HEAP32[((_environ)>>2)]=envPtr;
} else {
envPtr = HEAP32[((_environ)>>2)];
poolPtr = HEAP32[((envPtr)>>2)];
}
// Collect key=value lines.
var strings = [];
var totalSize = 0;
for (var key in env) {
if (typeof env[key] === 'string') {
var line = key + '=' + env[key];
strings.push(line);
totalSize += line.length;
}
}
if (totalSize > TOTAL_ENV_SIZE) {
throw new Error('Environment size exceeded TOTAL_ENV_SIZE!');
}
// Make new.
var ptrSize = 4;
for (var i = 0; i < strings.length; i++) {
var line = strings[i];
for (var j = 0; j < line.length; j++) {
HEAP8[(((poolPtr)+(j))|0)]=line.charCodeAt(j);
}
HEAP8[(((poolPtr)+(j))|0)]=0;
HEAP32[(((envPtr)+(i * ptrSize))>>2)]=poolPtr;
poolPtr += line.length + 1;
}
HEAP32[(((envPtr)+(strings.length * ptrSize))>>2)]=0;
}var ENV={};function _getenv(name) {
// char *getenv(const char *name);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/getenv.html
if (name === 0) return 0;
name = Pointer_stringify(name);
if (!ENV.hasOwnProperty(name)) return 0;
if (_getenv.ret) _free(_getenv.ret);
_getenv.ret = allocate(intArrayFromString(ENV[name]), 'i8', ALLOC_NORMAL);
return _getenv.ret;
}
function _strchr(ptr, chr) {
ptr--;
do {
ptr++;
var val = HEAP8[(ptr)];
if (val == chr) return ptr;
} while (val);
return 0;
}
var _llvm_va_start=undefined;
function _llvm_va_end() {}
function _vfprintf(s, f, va_arg) {
return _fprintf(s, f, HEAP32[((va_arg)>>2)]);
}
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:"No message of desired type",36:"Identifier removed",37:"Channel number out of range",38:"Level 2 not synchronized",39:"Level 3 halted",40:"Level 3 reset",41:"Link number out of range",42:"Protocol driver not attached",43:"No CSI structure available",44:"Level 2 halted",45:"Deadlock condition",46:"No record locks available",50:"Invalid exchange",51:"Invalid request descriptor",52:"Exchange full",53:"No anode",54:"Invalid request code",55:"Invalid slot",56:"File locking deadlock error",57:"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",74:"Multihop attempted",75:"Inode is remote (not really error)",76:"Cross mount point (not really error)",77:"Trying to read unreadable message",79:"Inappropriate file type or format",80:"Given log. name not unique",81:"f.d. invalid for this operation",82:"Remote address changed",83:"Can\t access a needed shared lib",84:"Accessing a corrupted shared lib",85:".lib section in a.out corrupted",86:"Attempting to link in too many libs",87:"Attempting to exec a shared library",88:"Function not implemented",89:"No more files",90:"Directory not empty",91:"File or path name too long",92:"Too many symbolic links",95:"Operation not supported on transport endpoint",96:"Protocol family not supported",104:"Connection reset by peer",105:"No buffer space available",106:"Address family not supported by protocol family",107:"Protocol wrong type for socket",108:"Socket operation on non-socket",109:"Protocol not available",110:"Can't send after socket shutdown",111:"Connection refused",112:"Address already in use",113:"Connection aborted",114:"Network is unreachable",115:"Network interface is not configured",116:"Connection timed out",117:"Host is down",118:"Host is unreachable",119:"Connection already in progress",120:"Socket already connected",121:"Destination address required",122:"Message too long",123:"Unknown protocol",124:"Socket type not supported",125:"Address not available",126:"ENETRESET",127:"Socket is already connected",128:"Socket is not connected",129:"TOOMANYREFS",130:"EPROCLIM",131:"EUSERS",132:"EDQUOT",133:"ESTALE",134:"Not supported",135:"No medium (in tape drive)",136:"No such host or network path",137:"Filename exists with different case",138:"EILSEQ",139:"Value too large for defined data type",140:"Operation canceled",141:"State not recoverable",142:"Previous owner died",143:"Streams pipe error"};function _strerror_r(errnum, strerrbuf, buflen) {
if (errnum in ERRNO_MESSAGES) {
if (ERRNO_MESSAGES[errnum].length > buflen - 1) {
return ___setErrNo(ERRNO_CODES.ERANGE);
} else {
var msg = ERRNO_MESSAGES[errnum];
for (var i = 0; i < msg.length; i++) {
HEAP8[(((strerrbuf)+(i))|0)]=msg.charCodeAt(i)
}
HEAP8[(((strerrbuf)+(i))|0)]=0
return 0;
}
} else {
return ___setErrNo(ERRNO_CODES.EINVAL);
}
}function _strerror(errnum) {
if (!_strerror.buffer) _strerror.buffer = _malloc(256);
_strerror_r(errnum, _strerror.buffer, 256);
return _strerror.buffer;
}
function _isspace(chr) {
switch(chr) {
case 32:
case 9:
case 10:
case 11:
case 12:
case 13:
return true;
default:
return false;
};
}
var Browser={mainLoop:{scheduler:null,shouldPause:false,paused:false,queue:[],pause:function () {
Browser.mainLoop.shouldPause = true;
},resume:function () {
if (Browser.mainLoop.paused) {
Browser.mainLoop.paused = false;
Browser.mainLoop.scheduler();
}
Browser.mainLoop.shouldPause = false;
},updateStatus:function () {
if (Module['setStatus']) {
var message = Module['statusMessage'] || 'Please wait...';
var remaining = Browser.mainLoop.remainingBlockers;
var expected = Browser.mainLoop.expectedBlockers;
if (remaining) {
if (remaining < expected) {
Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
} else {
Module['setStatus'](message);
}
} else {
Module['setStatus']('');
}
}
}},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers
if (Browser.initted || ENVIRONMENT_IS_WORKER) return;
Browser.initted = true;
try {
new Blob();
Browser.hasBlobConstructor = true;
} catch(e) {
Browser.hasBlobConstructor = false;
console.log("warning: no blob constructor, cannot create blobs with mimetypes");
}
Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : console.log("warning: cannot create object URLs");
// Support for plugins that can process preloaded files. You can add more of these to
// your app by creating and appending to Module.preloadPlugins.
//
// Each plugin is asked if it can handle a file based on the file's name. If it can,
// it is given the file's raw data. When it is done, it calls a callback with the file's
// (possibly modified) data. For example, a plugin might decompress a file, or it
// might create some side data structure for use later (like an Image element, etc.).
var imagePlugin = {};
imagePlugin['canHandle'] = function(name) {
return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
};
imagePlugin['handle'] = function(byteArray, name, onload, onerror) {
var b = null;
if (Browser.hasBlobConstructor) {
try {
b = new Blob([byteArray], { type: Browser.getMimetype(name) });
if (b.size !== byteArray.length) { // Safari bug #118630
// Safari's Blob can only take an ArrayBuffer
b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });
}
} catch(e) {
Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
}
}
if (!b) {
var bb = new Browser.BlobBuilder();
bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
b = bb.getBlob();
}
var url = Browser.URLObject.createObjectURL(b);
var img = new Image();
img.onload = function() {
assert(img.complete, 'Image ' + name + ' could not be decoded');
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
Module["preloadedImages"][name] = canvas;
Browser.URLObject.revokeObjectURL(url);
if (onload) onload(byteArray);
};
img.onerror = function(event) {
console.log('Image ' + url + ' could not be decoded');
if (onerror) onerror();
};
img.src = url;
};
Module['preloadPlugins'].push(imagePlugin);
var audioPlugin = {};
audioPlugin['canHandle'] = function(name) {
return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
};
audioPlugin['handle'] = function(byteArray, name, onload, onerror) {
var done = false;
function finish(audio) {
if (done) return;
done = true;
Module["preloadedAudios"][name] = audio;
if (onload) onload(byteArray);
}
function fail() {
if (done) return;
done = true;
Module["preloadedAudios"][name] = new Audio(); // empty shim
if (onerror) onerror();
}
if (Browser.hasBlobConstructor) {
try {
var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
} catch(e) {
return fail();
}
var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
var audio = new Audio();
audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
audio.onerror = function(event) {
if (done) return;
console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
function encode64(data) {
var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var PAD = '=';
var ret = '';
var leftchar = 0;
var leftbits = 0;
for (var i = 0; i < data.length; i++) {
leftchar = (leftchar << 8) | data[i];
leftbits += 8;
while (leftbits >= 6) {
var curr = (leftchar >> (leftbits-6)) & 0x3f;
leftbits -= 6;
ret += BASE[curr];
}
}
if (leftbits == 2) {
ret += BASE[(leftchar&3) << 4];
ret += PAD + PAD;
} else if (leftbits == 4) {
ret += BASE[(leftchar&0xf) << 2];
ret += PAD;
}
return ret;
}
audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
finish(audio); // we don't wait for confirmation this worked - but it's worth trying
};
audio.src = url;
// workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
Browser.safeSetTimeout(function() {
finish(audio); // try to use it even though it is not necessarily ready to play
}, 10000);
} else {
return fail();
}
};
Module['preloadPlugins'].push(audioPlugin);
// Canvas event setup
var canvas = Module['canvas'];
canvas.requestPointerLock = canvas['requestPointerLock'] ||
canvas['mozRequestPointerLock'] ||
canvas['webkitRequestPointerLock'];
canvas.exitPointerLock = document['exitPointerLock'] ||
document['mozExitPointerLock'] ||
document['webkitExitPointerLock'] ||
function(){}; // no-op if function does not exist
canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
function pointerLockChange() {
Browser.pointerLock = document['pointerLockElement'] === canvas ||
document['mozPointerLockElement'] === canvas ||
document['webkitPointerLockElement'] === canvas;
}
document.addEventListener('pointerlockchange', pointerLockChange, false);
document.addEventListener('mozpointerlockchange', pointerLockChange, false);
document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
if (Module['elementPointerLock']) {
canvas.addEventListener("click", function(ev) {
if (!Browser.pointerLock && canvas.requestPointerLock) {
canvas.requestPointerLock();
ev.preventDefault();
}
}, false);
}
},createContext:function (canvas, useWebGL, setInModule) {
var ctx;
try {
if (useWebGL) {
ctx = canvas.getContext('experimental-webgl', {
alpha: false
});
} else {
ctx = canvas.getContext('2d');
}
if (!ctx) throw ':(';
} catch (e) {
Module.print('Could not create canvas - ' + e);
return null;
}
if (useWebGL) {
// Set the background of the WebGL canvas to black
canvas.style.backgroundColor = "black";
// Warn on context loss
canvas.addEventListener('webglcontextlost', function(event) {
alert('WebGL context lost. You will need to reload the page.');
}, false);
}
if (setInModule) {
Module.ctx = ctx;
Module.useWebGL = useWebGL;
Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
Browser.init();
}
return ctx;
},destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) {
Browser.lockPointer = lockPointer;
Browser.resizeCanvas = resizeCanvas;
if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
var canvas = Module['canvas'];
function fullScreenChange() {
Browser.isFullScreen = false;
if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
document['fullScreenElement'] || document['fullscreenElement']) === canvas) {
canvas.cancelFullScreen = document['cancelFullScreen'] ||
document['mozCancelFullScreen'] ||
document['webkitCancelFullScreen'];
canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
if (Browser.lockPointer) canvas.requestPointerLock();
Browser.isFullScreen = true;
if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
} else if (Browser.resizeCanvas){
Browser.setWindowedCanvasSize();
}
if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen);
}
if (!Browser.fullScreenHandlersInstalled) {
Browser.fullScreenHandlersInstalled = true;
document.addEventListener('fullscreenchange', fullScreenChange, false);
document.addEventListener('mozfullscreenchange', fullScreenChange, false);
document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
}
canvas.requestFullScreen = canvas['requestFullScreen'] ||
canvas['mozRequestFullScreen'] ||
(canvas['webkitRequestFullScreen'] ? function() { canvas['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
canvas.requestFullScreen();
},requestAnimationFrame:function (func) {
if (!window.requestAnimationFrame) {
window.requestAnimationFrame = window['requestAnimationFrame'] ||
window['webkitRequestAnimationFrame'] ||
window['msRequestAnimationFrame'] ||
window['oRequestAnimationFrame'] ||
window['setTimeout'];
}
window.requestAnimationFrame(func);
},safeCallback:function (func) {
return function() {
if (!ABORT) return func.apply(null, arguments);
};
},safeRequestAnimationFrame:function (func) {
return Browser.requestAnimationFrame(function() {
if (!ABORT) func();
});
},safeSetTimeout:function (func, timeout) {
return setTimeout(function() {
if (!ABORT) func();
}, timeout);
},safeSetInterval:function (func, timeout) {
return setInterval(function() {
if (!ABORT) func();
}, timeout);
},getMimetype:function (name) {
return {
'jpg': 'image/jpeg',
'jpeg': 'image/jpeg',
'png': 'image/png',
'bmp': 'image/bmp',
'ogg': 'audio/ogg',
'wav': 'audio/wav',
'mp3': 'audio/mpeg'
}[name.substr(name.lastIndexOf('.')+1)];
},getUserMedia:function (func) {
if(!window.getUserMedia) {
window.getUserMedia = navigator['getUserMedia'] ||
navigator['mozGetUserMedia'];
}
window.getUserMedia(func);
},getMovementX:function (event) {
return event['movementX'] ||
event['mozMovementX'] ||
event['webkitMovementX'] ||
0;
},getMovementY:function (event) {
return event['movementY'] ||
event['mozMovementY'] ||
event['webkitMovementY'] ||
0;
},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
if (Browser.pointerLock) {
// When the pointer is locked, calculate the coordinates
// based on the movement of the mouse.
// Workaround for Firefox bug 764498
if (event.type != 'mousemove' &&
('mozMovementX' in event)) {
Browser.mouseMovementX = Browser.mouseMovementY = 0;
} else {
Browser.mouseMovementX = Browser.getMovementX(event);
Browser.mouseMovementY = Browser.getMovementY(event);
}
// check if SDL is available
if (typeof SDL != "undefined") {
Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
} else {
// just add the mouse delta to the current absolut mouse position
// FIXME: ideally this should be clamped against the canvas size and zero
Browser.mouseX += Browser.mouseMovementX;
Browser.mouseY += Browser.mouseMovementY;
}
} else {
// Otherwise, calculate the movement based on the changes
// in the coordinates.
var rect = Module["canvas"].getBoundingClientRect();
var x = event.clientX - (window.scrollX + rect.left);
var y = event.clientY - (window.scrollY + rect.top);
// the canvas might be CSS-scaled compared to its backbuffer;
// SDL-using content will want mouse coordinates in terms
// of backbuffer units.
var cw = Module["canvas"].width;
var ch = Module["canvas"].height;
x = x * (cw / rect.width);
y = y * (ch / rect.height);
Browser.mouseMovementX = x - Browser.mouseX;
Browser.mouseMovementY = y - Browser.mouseY;
Browser.mouseX = x;
Browser.mouseY = y;
}
},xhrLoad:function (url, onload, onerror) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
onload(xhr.response);
} else {
onerror();
}
};
xhr.onerror = onerror;
xhr.send(null);
},asyncLoad:function (url, onload, onerror, noRunDep) {
Browser.xhrLoad(url, function(arrayBuffer) {
assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
onload(new Uint8Array(arrayBuffer));
if (!noRunDep) removeRunDependency('al ' + url);
}, function(event) {
if (onerror) {
onerror();
} else {
throw 'Loading data file "' + url + '" failed.';
}
});
if (!noRunDep) addRunDependency('al ' + url);
},resizeListeners:[],updateResizeListeners:function () {
var canvas = Module['canvas'];
Browser.resizeListeners.forEach(function(listener) {
listener(canvas.width, canvas.height);
});
},setCanvasSize:function (width, height, noUpdates) {
var canvas = Module['canvas'];
canvas.width = width;
canvas.height = height;
if (!noUpdates) Browser.updateResizeListeners();
},windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
var canvas = Module['canvas'];
this.windowedWidth = canvas.width;
this.windowedHeight = canvas.height;
canvas.width = screen.width;
canvas.height = screen.height;
// check if SDL is available
if (typeof SDL != "undefined") {
var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
}
Browser.updateResizeListeners();
},setWindowedCanvasSize:function () {
var canvas = Module['canvas'];
canvas.width = this.windowedWidth;
canvas.height = this.windowedHeight;
// check if SDL is available
if (typeof SDL != "undefined") {
var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
}
Browser.updateResizeListeners();
}};
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;
___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
_fputc.ret = allocate([0], "i8", ALLOC_STATIC);
_llvm_eh_exception.buf = allocate(12, "void*", ALLOC_STATIC);
___buildEnvironment(ENV);
Module["requestFullScreen"] = function(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
Module["requestAnimationFrame"] = function(func) { Browser.requestAnimationFrame(func) };
Module["pauseMainLoop"] = function() { Browser.mainLoop.pause() };
Module["resumeMainLoop"] = function() { Browser.mainLoop.resume() };
Module["getUserMedia"] = function() { Browser.getUserMedia() }
STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
staticSealed = true; // seal the static portion of memory
STACK_MAX = STACK_BASE + 131072;
DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
assert(DYNAMIC_BASE < TOTAL_MEMORY); // Stack must fit in TOTAL_MEMORY; allocations from here on may enlarge TOTAL_MEMORY
var ctlz_i8 = allocate([8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_DYNAMIC);
var cttz_i8 = allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0], "i8", ALLOC_DYNAMIC);
var Math_min = Math.min;
function invoke_viiiii(index,a1,a2,a3,a4,a5) {
try {
Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_vi(index,a1) {
try {
Module["dynCall_vi"](index,a1);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_vii(index,a1,a2) {
try {
Module["dynCall_vii"](index,a1,a2);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6) {
try {
return Module["dynCall_iiiiiii"](index,a1,a2,a3,a4,a5,a6);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_iiiii(index,a1,a2,a3,a4) {
try {
return Module["dynCall_iiiii"](index,a1,a2,a3,a4);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_ii(index,a1) {
try {
return Module["dynCall_ii"](index,a1);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_iiii(index,a1,a2,a3) {
try {
return Module["dynCall_iiii"](index,a1,a2,a3);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_viii(index,a1,a2,a3) {
try {
Module["dynCall_viii"](index,a1,a2,a3);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_v(index) {
try {
Module["dynCall_v"](index);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
try {
Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_iii(index,a1,a2) {
try {
return Module["dynCall_iii"](index,a1,a2);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_iiiiii(index,a1,a2,a3,a4,a5) {
try {
return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function invoke_viiii(index,a1,a2,a3,a4) {
try {
Module["dynCall_viiii"](index,a1,a2,a3,a4);
} catch(e) {
if (typeof e !== 'number' && e !== 'longjmp') throw e;
asm["setThrew"](1, 0);
}
}
function asmPrintInt(x, y) {
Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
}
function asmPrintFloat(x, y) {
Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
}
// EMSCRIPTEN_START_ASM
var asm = (function(global, env, buffer) {
'use asm';
var HEAP8 = new global.Int8Array(buffer);
var HEAP16 = new global.Int16Array(buffer);
var HEAP32 = new global.Int32Array(buffer);
var HEAPU8 = new global.Uint8Array(buffer);
var HEAPU16 = new global.Uint16Array(buffer);
var HEAPU32 = new global.Uint32Array(buffer);
var HEAPF32 = new global.Float32Array(buffer);
var HEAPF64 = new global.Float64Array(buffer);
var STACKTOP=env.STACKTOP|0;
var STACK_MAX=env.STACK_MAX|0;
var tempDoublePtr=env.tempDoublePtr|0;
var ABORT=env.ABORT|0;
var cttz_i8=env.cttz_i8|0;
var ctlz_i8=env.ctlz_i8|0;
var __ZTIy=env.__ZTIy|0;
var __ZTIx=env.__ZTIx|0;
var __ZTIt=env.__ZTIt|0;
var __ZTIs=env.__ZTIs|0;
var __ZTIm=env.__ZTIm|0;
var __ZTIl=env.__ZTIl|0;
var __ZTIi=env.__ZTIi|0;
var __ZTIh=env.__ZTIh|0;
var __ZTIj=env.__ZTIj|0;
var __ZTIe=env.__ZTIe|0;
var __ZTId=env.__ZTId|0;
var __ZTVN10__cxxabiv117__class_type_infoE=env.__ZTVN10__cxxabiv117__class_type_infoE|0;
var __ZTIf=env.__ZTIf|0;
var __ZTIa=env.__ZTIa|0;
var __ZTIc=env.__ZTIc|0;
var __ZTVN10__cxxabiv120__si_class_type_infoE=env.__ZTVN10__cxxabiv120__si_class_type_infoE|0;
var _stderr=env._stderr|0;
var ___progname=env.___progname|0;
var __ZTVN10__cxxabiv119__pointer_type_infoE=env.__ZTVN10__cxxabiv119__pointer_type_infoE|0;
var NaN=+env.NaN;
var Infinity=+env.Infinity;
var __THREW__ = 0;
var threwValue = 0;
var setjmpId = 0;
var undef = 0;
var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0;
var tempRet0 = 0;
var tempRet1 = 0;
var tempRet2 = 0;
var tempRet3 = 0;
var tempRet4 = 0;
var tempRet5 = 0;
var tempRet6 = 0;
var tempRet7 = 0;
var tempRet8 = 0;
var tempRet9 = 0;
var Math_floor=global.Math.floor;
var Math_abs=global.Math.abs;
var Math_sqrt=global.Math.sqrt;
var Math_pow=global.Math.pow;
var Math_cos=global.Math.cos;
var Math_sin=global.Math.sin;
var Math_tan=global.Math.tan;
var Math_acos=global.Math.acos;
var Math_asin=global.Math.asin;
var Math_atan=global.Math.atan;
var Math_atan2=global.Math.atan2;
var Math_exp=global.Math.exp;
var Math_log=global.Math.log;
var Math_ceil=global.Math.ceil;
var Math_imul=global.Math.imul;
var abort=env.abort;
var assert=env.assert;
var asmPrintInt=env.asmPrintInt;
var asmPrintFloat=env.asmPrintFloat;
var Math_min=env.min;
var invoke_viiiii=env.invoke_viiiii;
var invoke_vi=env.invoke_vi;
var invoke_vii=env.invoke_vii;
var invoke_iiiiiii=env.invoke_iiiiiii;
var invoke_iiiii=env.invoke_iiiii;
var invoke_ii=env.invoke_ii;
var invoke_iiii=env.invoke_iiii;
var invoke_viii=env.invoke_viii;
var invoke_v=env.invoke_v;
var invoke_viiiiii=env.invoke_viiiiii;
var invoke_iii=env.invoke_iii;
var invoke_iiiiii=env.invoke_iiiiii;
var invoke_viiii=env.invoke_viiii;
var _strncmp=env._strncmp;
var _lseek=env._lseek;
var ___cxa_call_unexpected=env.___cxa_call_unexpected;
var _snprintf=env._snprintf;
var ___cxa_free_exception=env.___cxa_free_exception;
var ___cxa_throw=env.___cxa_throw;
var _fread=env._fread;
var _fclose=env._fclose;
var _strerror=env._strerror;
var ___cxa_pure_virtual=env.___cxa_pure_virtual;
var _fprintf=env._fprintf;
var _sqrt=env._sqrt;
var _llvm_va_end=env._llvm_va_end;
var _pread=env._pread;
var _close=env._close;
var _feof=env._feof;
var _fopen=env._fopen;
var _open=env._open;
var _strchr=env._strchr;
var _fputc=env._fputc;
var ___buildEnvironment=env.___buildEnvironment;
var _log=env._log;
var _puts=env._puts;
var _abort=env._abort;
var ___setErrNo=env.___setErrNo;
var _recv=env._recv;
var _fseek=env._fseek;
var _qsort2=env._qsort2;
var _qsort=env._qsort;
var _send=env._send;
var _write=env._write;
var _fputs=env._fputs;
var _ftell=env._ftell;
var _llvm_umul_with_overflow_i32=env._llvm_umul_with_overflow_i32;
var _exit=env._exit;
var ___cxa_find_matching_catch=env.___cxa_find_matching_catch;
var _strdup=env._strdup;
var ___cxa_allocate_exception=env.___cxa_allocate_exception;
var _ferror=env._ferror;
var _printf=env._printf;
var _sysconf=env._sysconf;
var _sbrk=env._sbrk;
var _truncate=env._truncate;
var _read=env._read;
var ___cxa_is_number_type=env.___cxa_is_number_type;
var __reallyNegative=env.__reallyNegative;
var _time=env._time;
var __formatString=env.__formatString;
var ___cxa_does_inherit=env.___cxa_does_inherit;
var _getenv=env._getenv;
var __ZSt9terminatev=env.__ZSt9terminatev;
var _gettimeofday=env._gettimeofday;
var _llvm_eh_exception=env._llvm_eh_exception;
var _vfprintf=env._vfprintf;
var ___cxa_begin_catch=env.___cxa_begin_catch;
var _unlink=env._unlink;
var ___assert_func=env.___assert_func;
var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv;
var _pwrite=env._pwrite;
var _putchar=env._putchar;
var _fabs=env._fabs;
var _fsync=env._fsync;
var _strerror_r=env._strerror_r;
var ___errno_location=env.___errno_location;
var ___gxx_personality_v0=env.___gxx_personality_v0;
var _isspace=env._isspace;
var _fdopen=env._fdopen;
var _bsearch=env._bsearch;
var _fwrite=env._fwrite;
var _ftruncate=env._ftruncate;
var __exit=env.__exit;
var ___resumeException=env.___resumeException;
var _strcmp=env._strcmp;
var ___cxa_end_catch=env.___cxa_end_catch;
// EMSCRIPTEN_START_FUNCS
function stackAlloc(size) {
size = size | 0;
var ret = 0;
ret = STACKTOP;
STACKTOP = STACKTOP + size | 0;
STACKTOP = STACKTOP + 7 >> 3 << 3;
return ret | 0;
}
function stackSave() {
return STACKTOP | 0;
}
function stackRestore(top) {
top = top | 0;
STACKTOP = top;
}
function setThrew(threw, value) {
threw = threw | 0;
value = value | 0;
if ((__THREW__ | 0) == 0) {
__THREW__ = threw;
threwValue = value;
}
}
function copyTempFloat(ptr) {
ptr = ptr | 0;
HEAP8[tempDoublePtr] = HEAP8[ptr];
HEAP8[tempDoublePtr + 1 | 0] = HEAP8[ptr + 1 | 0];
HEAP8[tempDoublePtr + 2 | 0] = HEAP8[ptr + 2 | 0];
HEAP8[tempDoublePtr + 3 | 0] = HEAP8[ptr + 3 | 0];
}
function copyTempDouble(ptr) {
ptr = ptr | 0;
HEAP8[tempDoublePtr] = HEAP8[ptr];
HEAP8[tempDoublePtr + 1 | 0] = HEAP8[ptr + 1 | 0];
HEAP8[tempDoublePtr + 2 | 0] = HEAP8[ptr + 2 | 0];
HEAP8[tempDoublePtr + 3 | 0] = HEAP8[ptr + 3 | 0];
HEAP8[tempDoublePtr + 4 | 0] = HEAP8[ptr + 4 | 0];
HEAP8[tempDoublePtr + 5 | 0] = HEAP8[ptr + 5 | 0];
HEAP8[tempDoublePtr + 6 | 0] = HEAP8[ptr + 6 | 0];
HEAP8[tempDoublePtr + 7 | 0] = HEAP8[ptr + 7 | 0];
}
function setTempRet0(value) {
value = value | 0;
tempRet0 = value;
}
function setTempRet1(value) {
value = value | 0;
tempRet1 = value;
}
function setTempRet2(value) {
value = value | 0;
tempRet2 = value;
}
function setTempRet3(value) {
value = value | 0;
tempRet3 = value;
}
function setTempRet4(value) {
value = value | 0;
tempRet4 = value;
}
function setTempRet5(value) {
value = value | 0;
tempRet5 = value;
}
function setTempRet6(value) {
value = value | 0;
tempRet6 = value;
}
function setTempRet7(value) {
value = value | 0;
tempRet7 = value;
}
function setTempRet8(value) {
value = value | 0;
tempRet8 = value;
}
function setTempRet9(value) {
value = value | 0;
tempRet9 = value;
}
function runPostSets() {
HEAP32[__ZTVN10__cxxabiv120__si_class_type_infoE + 8 >> 2] = 88;
HEAP32[__ZTVN10__cxxabiv120__si_class_type_infoE + 12 >> 2] = 108;
HEAP32[__ZTVN10__cxxabiv120__si_class_type_infoE + 16 >> 2] = 94;
HEAP32[__ZTVN10__cxxabiv120__si_class_type_infoE + 20 >> 2] = 22;
HEAP32[__ZTVN10__cxxabiv120__si_class_type_infoE + 24 >> 2] = 10;
HEAP32[__ZTVN10__cxxabiv120__si_class_type_infoE + 28 >> 2] = 6;
HEAP32[__ZTVN10__cxxabiv120__si_class_type_infoE + 32 >> 2] = 2;
HEAP32[__ZTVN10__cxxabiv120__si_class_type_infoE + 36 >> 2] = 4;
HEAP32[__ZTVN10__cxxabiv119__pointer_type_infoE + 8 >> 2] = 88;
HEAP32[__ZTVN10__cxxabiv119__pointer_type_infoE + 12 >> 2] = 96;
HEAP32[__ZTVN10__cxxabiv119__pointer_type_infoE + 16 >> 2] = 94;
HEAP32[__ZTVN10__cxxabiv119__pointer_type_infoE + 20 >> 2] = 22;
HEAP32[__ZTVN10__cxxabiv119__pointer_type_infoE + 24 >> 2] = 12;
HEAP32[__ZTVN10__cxxabiv117__class_type_infoE + 8 >> 2] = 88;
HEAP32[__ZTVN10__cxxabiv117__class_type_infoE + 12 >> 2] = 86;
HEAP32[__ZTVN10__cxxabiv117__class_type_infoE + 16 >> 2] = 94;
HEAP32[__ZTVN10__cxxabiv117__class_type_infoE + 20 >> 2] = 22;
HEAP32[__ZTVN10__cxxabiv117__class_type_infoE + 24 >> 2] = 10;
HEAP32[__ZTVN10__cxxabiv117__class_type_infoE + 28 >> 2] = 2;
HEAP32[__ZTVN10__cxxabiv117__class_type_infoE + 32 >> 2] = 6;
HEAP32[__ZTVN10__cxxabiv117__class_type_infoE + 36 >> 2] = 2;
HEAP32[__ZTIy >> 2] = 8504;
HEAP32[__ZTIy + 4 >> 2] = 8784;
HEAP32[__ZTIx >> 2] = 8504;
HEAP32[__ZTIx + 4 >> 2] = 8792;
HEAP32[__ZTIt >> 2] = 8504;
HEAP32[__ZTIt + 4 >> 2] = 8816;
HEAP32[__ZTIs >> 2] = 8504;
HEAP32[__ZTIs + 4 >> 2] = 8824;
HEAP32[__ZTIm >> 2] = 8504;
HEAP32[__ZTIm + 4 >> 2] = 8832;
HEAP32[__ZTIl >> 2] = 8504;
HEAP32[__ZTIl + 4 >> 2] = 8840;
HEAP32[__ZTIj >> 2] = 8504;
HEAP32[__ZTIj + 4 >> 2] = 8848;
HEAP32[__ZTIi >> 2] = 8504;
HEAP32[__ZTIi + 4 >> 2] = 8856;
HEAP32[__ZTIh >> 2] = 8504;
HEAP32[__ZTIh + 4 >> 2] = 8864;
HEAP32[__ZTIf >> 2] = 8504;
HEAP32[__ZTIf + 4 >> 2] = 8872;
HEAP32[__ZTIe >> 2] = 8504;
HEAP32[__ZTIe + 4 >> 2] = 8880;
HEAP32[__ZTId >> 2] = 8504;
HEAP32[__ZTId + 4 >> 2] = 8888;
HEAP32[__ZTIc >> 2] = 8504;
HEAP32[__ZTIc + 4 >> 2] = 8896;
HEAP32[__ZTIa >> 2] = 8504;
HEAP32[__ZTIa + 4 >> 2] = 8912;
HEAP32[2482] = __ZTVN10__cxxabiv117__class_type_infoE + 8;
HEAP32[2484] = __ZTVN10__cxxabiv117__class_type_infoE + 8;
HEAP32[2486] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2490] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2494] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2498] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2502] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2505] = __ZTIy;
HEAP32[2506] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2509] = __ZTIx;
HEAP32[2510] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2514] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2518] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2521] = __ZTIt;
HEAP32[2522] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2525] = __ZTIs;
HEAP32[2526] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2529] = __ZTIm;
HEAP32[2530] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2533] = __ZTIl;
HEAP32[2534] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2537] = __ZTIj;
HEAP32[2538] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2541] = __ZTIi;
HEAP32[2542] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2545] = __ZTIh;
HEAP32[2546] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2549] = __ZTIf;
HEAP32[2550] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2553] = __ZTIe;
HEAP32[2554] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2557] = __ZTId;
HEAP32[2558] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2561] = __ZTIc;
HEAP32[2562] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2566] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2569] = __ZTIa;
HEAP32[2570] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2573] = __ZTIy;
HEAP32[2574] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2577] = __ZTIx;
HEAP32[2578] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2582] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2586] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2589] = __ZTIt;
HEAP32[2590] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2593] = __ZTIs;
HEAP32[2594] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2597] = __ZTIm;
HEAP32[2598] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2601] = __ZTIl;
HEAP32[2602] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2605] = __ZTIj;
HEAP32[2606] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2609] = __ZTIi;
HEAP32[2610] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2613] = __ZTIh;
HEAP32[2614] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2617] = __ZTIf;
HEAP32[2618] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2621] = __ZTIe;
HEAP32[2622] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2625] = __ZTId;
HEAP32[2626] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2629] = __ZTIc;
HEAP32[2630] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2634] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2637] = __ZTIa;
HEAP32[2638] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2642] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2646] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2650] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2654] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2658] = __ZTVN10__cxxabiv119__pointer_type_infoE + 8;
HEAP32[2662] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2672] = __ZTVN10__cxxabiv117__class_type_infoE + 8;
HEAP32[2674] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2678] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2682] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2686] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2690] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2694] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2698] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2702] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2706] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2710] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
HEAP32[2714] = __ZTVN10__cxxabiv120__si_class_type_infoE + 8;
}
function __ZN10ime_pinyin14compare_char16EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $1 = 0, $3 = 0, $retval_0 = 0;
$1 = HEAP16[$p1 >> 1] | 0;
$3 = HEAP16[$p2 >> 1] | 0;
if (($1 & 65535) < ($3 & 65535)) {
$retval_0 = -1;
return $retval_0 | 0;
}
$retval_0 = ($1 & 65535) > ($3 & 65535) | 0;
return $retval_0 | 0;
}
function _im_get_spl_start_at($id) {
$id = $id | 0;
return HEAP16[(HEAP32[2818] | 0) + ($id << 1) >> 1] | 0;
}
function _im_get_predict_at($pos) {
$pos = $pos | 0;
var $retval_0 = 0;
if ($pos >>> 0 > 499) {
$retval_0 = 0;
} else {
$retval_0 = 11280 + ($pos * 48 | 0) | 0;
}
return $retval_0 | 0;
}
function __ZN10ime_pinyin22cmp_scis_hz_splid_freqEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $1 = 0, $3 = 0, $5 = 0, $bf_clear = 0, $7 = 0, $bf_clear12 = 0, $8 = 0, $9 = 0, $10 = 0.0, $11 = 0.0, $retval_0 = 0;
$1 = HEAP16[$p1 + 4 >> 1] | 0;
$3 = HEAP16[$p2 + 4 >> 1] | 0;
do {
if (($1 & 65535) < ($3 & 65535)) {
$retval_0 = -1;
} else {
if (($1 & 65535) > ($3 & 65535)) {
$retval_0 = 1;
break;
}
$5 = HEAP16[$p1 + 6 >> 1] | 0;
$bf_clear = $5 & 31;
$7 = HEAP16[$p2 + 6 >> 1] | 0;
$bf_clear12 = $7 & 31;
if (($bf_clear & 65535) < ($bf_clear12 & 65535)) {
$retval_0 = -1;
break;
}
if (($bf_clear & 65535) > ($bf_clear12 & 65535)) {
$retval_0 = 1;
break;
}
$8 = ($5 & 65535) >>> 5;
$9 = ($7 & 65535) >>> 5;
if (($8 & 65535) < ($9 & 65535)) {
$retval_0 = -1;
break;
}
if (($8 & 65535) > ($9 & 65535)) {
$retval_0 = 1;
break;
}
$10 = +HEAPF32[$p1 >> 2];
$11 = +HEAPF32[$p2 >> 2];
if ($10 > $11) {
$retval_0 = -1;
break;
}
$retval_0 = $10 < $11 | 0;
}
} while (0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin17cmp_scis_hz_splidEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $1 = 0, $3 = 0, $5 = 0, $bf_clear = 0, $7 = 0, $bf_clear12 = 0, $8 = 0, $9 = 0, $retval_0 = 0;
$1 = HEAP16[$p1 + 4 >> 1] | 0;
$3 = HEAP16[$p2 + 4 >> 1] | 0;
do {
if (($1 & 65535) < ($3 & 65535)) {
$retval_0 = -1;
} else {
if (($1 & 65535) > ($3 & 65535)) {
$retval_0 = 1;
break;
}
$5 = HEAP16[$p1 + 6 >> 1] | 0;
$bf_clear = $5 & 31;
$7 = HEAP16[$p2 + 6 >> 1] | 0;
$bf_clear12 = $7 & 31;
if (($bf_clear & 65535) < ($bf_clear12 & 65535)) {
$retval_0 = -1;
break;
}
if (($bf_clear & 65535) > ($bf_clear12 & 65535)) {
$retval_0 = 1;
break;
}
$8 = ($5 & 65535) >>> 5;
$9 = ($7 & 65535) >>> 5;
if (($8 & 65535) < ($9 & 65535)) {
$retval_0 = -1;
break;
}
$retval_0 = ($8 & 65535) > ($9 & 65535) | 0;
}
} while (0);
return $retval_0 | 0;
}
function _im_open_decoder($fn_sys_dict, $fn_usr_dict) {
$fn_sys_dict = $fn_sys_dict | 0;
$fn_usr_dict = $fn_usr_dict | 0;
var $0 = 0, $call = 0, $6 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) != 0) {
__ZN10ime_pinyin12MatrixSearchD2Ev($0);
__ZdlPv($0 | 0);
}
$call = __Znwj(12504) | 0;
$6 = $call;
__ZN10ime_pinyin12MatrixSearchC2Ev($6);
HEAP32[10830] = $6;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch4initEPKcS2_($6, $fn_sys_dict, $fn_usr_dict) | 0;
return $retval_0 | 0;
}
function _im_open_decoder_fd($sys_fd, $start_offset, $length, $fn_usr_dict) {
$sys_fd = $sys_fd | 0;
$start_offset = $start_offset | 0;
$length = $length | 0;
$fn_usr_dict = $fn_usr_dict | 0;
var $0 = 0, $call = 0, $6 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) != 0) {
__ZN10ime_pinyin12MatrixSearchD2Ev($0);
__ZdlPv($0 | 0);
}
$call = __Znwj(12504) | 0;
$6 = $call;
__ZN10ime_pinyin12MatrixSearchC2Ev($6);
HEAP32[10830] = $6;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch7init_fdEillPKc($6, $sys_fd, $start_offset, $length, $fn_usr_dict) | 0;
return $retval_0 | 0;
}
function _im_close_decoder() {
var $0 = 0, $1 = 0;
$0 = HEAP32[10830] | 0;
do {
if (($0 | 0) != 0) {
__ZN10ime_pinyin12MatrixSearch5closeEv($0);
$1 = HEAP32[10830] | 0;
if (($1 | 0) == 0) {
break;
}
__ZN10ime_pinyin12MatrixSearchD2Ev($1);
__ZdlPv($1 | 0);
}
} while (0);
HEAP32[10830] = 0;
return;
}
function _im_set_max_lens($max_sps_len, $max_hzs_len) {
$max_sps_len = $max_sps_len | 0;
$max_hzs_len = $max_hzs_len | 0;
var $0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
return;
}
__ZN10ime_pinyin12MatrixSearch12set_max_lensEjj($0, $max_sps_len, $max_hzs_len);
return;
}
function _im_flush_cache() {
var $0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
return;
}
__ZN10ime_pinyin12MatrixSearch11flush_cacheEv($0);
return;
}
function _im_search($pybuf, $pylen) {
$pybuf = $pybuf | 0;
$pylen = $pylen | 0;
var $0 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin12MatrixSearch6searchEPKcj($0, $pybuf, $pylen) | 0;
$retval_0 = __ZN10ime_pinyin12MatrixSearch17get_candidate_numEv(HEAP32[10830] | 0) | 0;
return $retval_0 | 0;
}
function _im_delsearch($pos, $is_pos_in_splid, $clear_fixed_this_step) {
$pos = $pos | 0;
$is_pos_in_splid = $is_pos_in_splid | 0;
$clear_fixed_this_step = $clear_fixed_this_step | 0;
var $0 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin12MatrixSearch9delsearchEjbb($0, $pos, $is_pos_in_splid, $clear_fixed_this_step) | 0;
$retval_0 = __ZN10ime_pinyin12MatrixSearch17get_candidate_numEv(HEAP32[10830] | 0) | 0;
return $retval_0 | 0;
}
function _im_reset_search() {
var $0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
return;
}
__ZN10ime_pinyin12MatrixSearch12reset_searchEv($0) | 0;
return;
}
function _im_get_sps_str($decoded_len) {
$decoded_len = $decoded_len | 0;
var $0 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch9get_pystrEPj($0, $decoded_len) | 0;
return $retval_0 | 0;
}
function _im_get_candidate($cand_id, $cand_str, $max_len) {
$cand_id = $cand_id | 0;
$cand_str = $cand_str | 0;
$max_len = $max_len | 0;
var $0 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch13get_candidateEjPtj($0, $cand_id, $cand_str, $max_len) | 0;
return $retval_0 | 0;
}
function _toUTF8($src, $length) {
$src = $src | 0;
$length = $length | 0;
var $utf16Start = 0, $utf8Start = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$utf16Start = sp | 0;
$utf8Start = sp + 8 | 0;
HEAP32[$utf16Start >> 2] = $src;
HEAP32[$utf8Start >> 2] = 43328;
_ConvertUTF16toUTF8($utf16Start, $src + ($length << 1) | 0, $utf8Start, 44352, 0) | 0;
STACKTOP = sp;
return 43328 | 0;
}
function _toUTF16($src, $length) {
$src = $src | 0;
$length = $length | 0;
var $utf8Start = 0, $utf16Start = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$utf8Start = sp | 0;
$utf16Start = sp + 8 | 0;
HEAP32[$utf8Start >> 2] = $src;
HEAP32[$utf16Start >> 2] = 44352;
_ConvertUTF8toUTF16($utf8Start, $src + $length | 0, $utf16Start, 46400, 0) | 0;
STACKTOP = sp;
return 44352 | 0;
}
function _im_get_candidate_char($cand_id) {
$cand_id = $cand_id | 0;
var $0 = 0, $arraydecay = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 128 | 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$arraydecay = sp | 0;
__ZN10ime_pinyin12MatrixSearch13get_candidateEjPtj($0, $cand_id, $arraydecay, 64) | 0;
_toUTF8($arraydecay, 64) | 0;
$retval_0 = 43328;
STACKTOP = sp;
return $retval_0 | 0;
}
function _im_get_spl_start() {
var $0 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch13get_spl_startERPKt($0, 11272) | 0;
return $retval_0 | 0;
}
function _im_choose($choice_id) {
$choice_id = $choice_id | 0;
var $0 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch6chooseEj($0, $choice_id) | 0;
return $retval_0 | 0;
}
function _im_cancel_last_choice() {
var $0 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch18cancel_last_choiceEv($0) | 0;
return $retval_0 | 0;
}
function _im_get_fixed_len() {
var $0 = 0, $retval_0 = 0;
$0 = HEAP32[10830] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch12get_fixedlenEv($0) | 0;
return $retval_0 | 0;
}
function _im_get_predicts_utf8($buf, $pre_buf) {
$buf = $buf | 0;
$pre_buf = $pre_buf | 0;
var $call5 = 0, $idx_09 = 0, $arraydecay = 0, $inc = 0, $retval_0 = 0;
if (($buf | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
_toUTF16($buf, 64) | 0;
_utf16_strlen(44352) | 0;
$call5 = __ZN10ime_pinyin12MatrixSearch12get_predictsEPKtPA8_tj(HEAP32[10830] | 0, 44352, 35280, 500) | 0;
HEAP32[$pre_buf >> 2] = 11280;
$idx_09 = 0;
while (1) {
$arraydecay = (HEAP32[$pre_buf >> 2] | 0) + ($idx_09 * 48 | 0) | 0;
_toUTF8(35280 + ($idx_09 << 4) | 0, 8) | 0;
_strcpy($arraydecay | 0, 43328 | 0) | 0;
$inc = $idx_09 + 1 | 0;
if ($inc >>> 0 < 500) {
$idx_09 = $inc;
} else {
$retval_0 = $call5;
break;
}
}
return $retval_0 | 0;
}
function _im_get_predicts($his_buf, $pre_buf) {
$his_buf = $his_buf | 0;
$pre_buf = $pre_buf | 0;
var $retval_0 = 0;
if (($his_buf | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
_utf16_strlen($his_buf) | 0;
HEAP32[$pre_buf >> 2] = 35280;
$retval_0 = __ZN10ime_pinyin12MatrixSearch12get_predictsEPKtPA8_tj(HEAP32[10830] | 0, $his_buf, 35280, 500) | 0;
return $retval_0 | 0;
}
function _im_enable_shm_as_szm($enable) {
$enable = $enable | 0;
__ZN10ime_pinyin12SpellingTrie14szm_enable_shmEb(__ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0, $enable);
return;
}
function _im_enable_ym_as_szm($enable) {
$enable = $enable | 0;
__ZN10ime_pinyin12SpellingTrie13szm_enable_ymEb(__ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0, $enable);
return;
}
function __ZN10ime_pinyin19cmp_lemma_entry_hzsEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $arraydecay = 0, $call = 0, $arraydecay2 = 0, $call3 = 0, $retval_0 = 0;
$arraydecay = $p1 + 8 | 0;
$call = _utf16_strlen($arraydecay) | 0;
$arraydecay2 = $p2 + 8 | 0;
$call3 = _utf16_strlen($arraydecay2) | 0;
if ($call >>> 0 < $call3 >>> 0) {
$retval_0 = -1;
return $retval_0 | 0;
}
if ($call >>> 0 > $call3 >>> 0) {
$retval_0 = 1;
return $retval_0 | 0;
}
$retval_0 = _utf16_strcmp($arraydecay, $arraydecay2) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin10compare_pyEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $call = 0, $retval_0 = 0;
$call = _utf16_strcmp($p1 + 42 | 0, $p2 + 42 | 0) | 0;
if (($call | 0) != 0) {
$retval_0 = $call;
return $retval_0 | 0;
}
$retval_0 = ~~+HEAPF32[$p2 + 120 >> 2] - ~~+HEAPF32[$p1 + 120 >> 2] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin22cmp_lemma_entry_hzspysEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $arraydecay = 0, $call = 0, $arraydecay2 = 0, $call3 = 0, $call11 = 0, $retval_0 = 0;
$arraydecay = $p1 + 8 | 0;
$call = _utf16_strlen($arraydecay) | 0;
$arraydecay2 = $p2 + 8 | 0;
$call3 = _utf16_strlen($arraydecay2) | 0;
if ($call >>> 0 < $call3 >>> 0) {
$retval_0 = -1;
return $retval_0 | 0;
}
if ($call >>> 0 > $call3 >>> 0) {
$retval_0 = 1;
return $retval_0 | 0;
}
$call11 = _utf16_strcmp($arraydecay, $arraydecay2) | 0;
if (($call11 | 0) != 0) {
$retval_0 = $call11;
return $retval_0 | 0;
}
$retval_0 = _utf16_strcmp($p1 + 42 | 0, $p2 + 42 | 0) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin14compare_splid2EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _utf16_strcmp($p1 + 42 | 0, $p2 + 42 | 0) | 0;
}
function __ZN10ime_pinyin11DictBuilderC2Ev($this) {
$this = $this | 0;
_memset($this | 0, 0, 60);
return;
}
function __ZN10ime_pinyin11DictBuilderD2Ev($this) {
$this = $this | 0;
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
return;
}
function __ZN10ime_pinyin11DictBuilder13free_resourceEv($this) {
$this = $this | 0;
var $lemma_arr_ = 0, $0 = 0, $scis_ = 0, $2 = 0, $lma_nodes_le0_ = 0, $4 = 0, $6 = 0, $8 = 0, $spl_table_ = 0, $10 = 0, $spl_parser_ = 0, $14 = 0;
$lemma_arr_ = $this | 0;
$0 = HEAP32[$lemma_arr_ >> 2] | 0;
if (($0 | 0) != 0) {
__ZdaPv($0);
}
$scis_ = $this + 8 | 0;
$2 = HEAP32[$scis_ >> 2] | 0;
if (($2 | 0) != 0) {
__ZdaPv($2);
}
$lma_nodes_le0_ = $this + 16 | 0;
$4 = HEAP32[$lma_nodes_le0_ >> 2] | 0;
if (($4 | 0) != 0) {
__ZdaPv($4);
}
$6 = HEAP32[$this + 20 >> 2] | 0;
if (($6 | 0) != 0) {
__ZdaPv($6);
}
$8 = HEAP32[$this + 32 >> 2] | 0;
if (($8 | 0) != 0) {
__ZdaPv($8);
}
$spl_table_ = $this + 52 | 0;
$10 = HEAP32[$spl_table_ >> 2] | 0;
if (($10 | 0) != 0) {
__ZN10ime_pinyin13SpellingTableD2Ev($10);
__ZdlPv($10 | 0);
}
$spl_parser_ = $this + 56 | 0;
$14 = HEAP32[$spl_parser_ >> 2] | 0;
if (($14 | 0) != 0) {
__ZdlPv($14);
}
HEAP32[$lemma_arr_ >> 2] = 0;
HEAP32[$scis_ >> 2] = 0;
HEAP32[$spl_table_ >> 2] = 0;
HEAP32[$spl_parser_ >> 2] = 0;
HEAP32[$this + 4 >> 2] = 0;
_memset($lma_nodes_le0_ | 0, 0, 28);
return;
}
function __ZN10ime_pinyin11DictBuilder14alloc_resourceEj($this, $lma_num) {
$this = $this | 0;
$lma_num = $lma_num | 0;
var $lemma_num_ = 0, $0$0 = 0, $lemma_arr_ = 0, $top_lmas_ = 0, $mul = 0, $scis_num_ = 0, $7$0 = 0, $scis_ = 0, $lma_nodes_le0_ = 0, $14$0 = 0, $lma_nodes_ge1_ = 0, $20$0 = 0, $homo_idx_buf_ = 0, $25 = 0, $spl_table_ = 0, $call13 = 0, $26 = 0, $27 = 0, $53 = 0, $retval_0 = 0;
if (($lma_num | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
$lemma_num_ = $this + 4 | 0;
HEAP32[$lemma_num_ >> 2] = $lma_num;
$0$0 = _llvm_umul_with_overflow_i32($lma_num | 0, 124) | 0;
$lemma_arr_ = $this | 0;
HEAP32[$lemma_arr_ >> 2] = __Znaj(tempRet0 ? -1 : $0$0) | 0;
HEAP32[$this + 48 >> 2] = 0;
$top_lmas_ = $this + 44 | 0;
HEAP32[$top_lmas_ >> 2] = __Znaj(1240) | 0;
$mul = HEAP32[$lemma_num_ >> 2] << 3;
$scis_num_ = $this + 12 | 0;
HEAP32[$scis_num_ >> 2] = $mul;
$7$0 = _llvm_umul_with_overflow_i32($mul | 0, 8) | 0;
$scis_ = $this + 8 | 0;
HEAP32[$scis_ >> 2] = __Znaj(tempRet0 ? -1 : $7$0) | 0;
HEAP32[$this + 24 >> 2] = 0;
$lma_nodes_le0_ = $this + 16 | 0;
HEAP32[$lma_nodes_le0_ >> 2] = __Znaj(7728) | 0;
HEAP32[$this + 28 >> 2] = 0;
$14$0 = _llvm_umul_with_overflow_i32(HEAP32[$lemma_num_ >> 2] | 0, 10) | 0;
$lma_nodes_ge1_ = $this + 20 | 0;
HEAP32[$lma_nodes_ge1_ >> 2] = __Znaj(tempRet0 ? -1 : $14$0) | 0;
$20$0 = _llvm_umul_with_overflow_i32(HEAP32[$lemma_num_ >> 2] | 0, 4) | 0;
$homo_idx_buf_ = $this + 32 | 0;
HEAP32[$homo_idx_buf_ >> 2] = __Znaj(tempRet0 ? -1 : $20$0) | 0;
$25 = __Znwj(56) | 0;
__ZN10ime_pinyin13SpellingTableC2Ev($25);
$spl_table_ = $this + 52 | 0;
HEAP32[$spl_table_ >> 2] = $25;
$call13 = __Znwj(4) | 0;
$26 = $call13;
__ZN10ime_pinyin14SpellingParserC2Ev($26);
HEAP32[$this + 56 >> 2] = $26;
$27 = HEAP32[$lemma_arr_ >> 2] | 0;
do {
if (($27 | 0) != 0) {
if ((HEAP32[$top_lmas_ >> 2] | 0) == 0) {
break;
}
if ((HEAP32[$scis_ >> 2] | 0) == 0) {
break;
}
if ((HEAP32[$spl_table_ >> 2] | 0) == 0 | ($call13 | 0) == 0) {
break;
}
if ((HEAP32[$lma_nodes_le0_ >> 2] | 0) == 0) {
break;
}
if ((HEAP32[$lma_nodes_ge1_ >> 2] | 0) == 0) {
break;
}
if ((HEAP32[$homo_idx_buf_ >> 2] | 0) == 0) {
break;
}
_memset($27 | 0, 0, (HEAP32[$lemma_num_ >> 2] | 0) * 124 | 0 | 0);
_memset(HEAP32[$scis_ >> 2] | 0, 0, HEAP32[$scis_num_ >> 2] << 3 | 0);
_memset(HEAP32[$lma_nodes_le0_ >> 2] | 0, 0, 7728);
_memset(HEAP32[$lma_nodes_ge1_ >> 2] | 0, 0, (HEAP32[$lemma_num_ >> 2] | 0) * 10 | 0 | 0);
_memset(HEAP32[$homo_idx_buf_ >> 2] | 0, 0, HEAP32[$lemma_num_ >> 2] << 2 | 0);
$53 = HEAP32[$spl_table_ >> 2] | 0;
__ZN10ime_pinyin13SpellingTable10init_tableEjjb($53, 6, 2e3, 1) | 0;
$retval_0 = 1;
return $retval_0 | 0;
}
} while (0);
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
$retval_0 = 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin11DictBuilder17read_valid_hanzisEPKcPj($this, $fn_validhzs, $num) {
$this = $this | 0;
$fn_validhzs = $fn_validhzs | 0;
$num = $num | 0;
var $utf16header = 0, $call = 0, $cmp7 = 0, $div = 0, $sub = 0, $2$0 = 0, $call16 = 0, $call22 = 0, $cmp23 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$utf16header = sp | 0;
if (($fn_validhzs | 0) == 0 | ($num | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP32[$num >> 2] = 0;
$call = _fopen($fn_validhzs | 0, 4440) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$cmp7 = (_fread($utf16header | 0, 2, 1, $call | 0) | 0) == 1;
if (!($cmp7 & (HEAP16[$utf16header >> 1] | 0) == -257)) {
_fclose($call | 0) | 0;
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
_fseek($call | 0, 0, 2) | 0;
$div = (_ftell($call | 0) | 0) >>> 1;
HEAP32[$num >> 2] = $div;
if (($div | 0) == 0) {
___assert_func(4408, 240, 7456, 3040);
return 0;
}
$sub = $div - 1 | 0;
HEAP32[$num >> 2] = $sub;
$2$0 = _llvm_umul_with_overflow_i32($sub | 0, 2) | 0;
$call16 = __Znaj(tempRet0 ? -1 : $2$0) | 0;
if (($call16 | 0) == 0) {
_fclose($call | 0) | 0;
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
_fseek($call | 0, 2, 0) | 0;
$call22 = _fread($call16 | 0, 2, HEAP32[$num >> 2] | 0, $call | 0) | 0;
$cmp23 = ($call22 | 0) == (HEAP32[$num >> 2] | 0);
_fclose($call | 0) | 0;
if ($cmp23) {
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E($call16, HEAP32[$num >> 2] | 0, 2, 24);
$retval_0 = $call16;
STACKTOP = sp;
return $retval_0 | 0;
} else {
__ZdaPv($call16);
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin11DictBuilder19format_spelling_strEPc($this, $spl_str) {
$this = $this | 0;
$spl_str = $spl_str | 0;
var $0 = 0, $1 = 0, $arrayidx21 = 0, $pos_020 = 0, $4 = 0;
if (($spl_str | 0) == 0) {
return;
}
$0 = HEAP8[$spl_str] | 0;
if ($0 << 24 >> 24 == 0) {
return;
} else {
$pos_020 = 0;
$arrayidx21 = $spl_str;
$1 = $0;
}
do {
if (($1 - 97 & 255) < 26) {
HEAP8[$arrayidx21] = $1 - 32 & 255;
}
do {
if ($pos_020 << 16 >> 16 == 1) {
if ((HEAP8[$arrayidx21] | 0) != 72) {
break;
}
$4 = HEAP8[$spl_str] | 0;
if (!(($4 << 24 >> 24 | 0) == 67 | ($4 << 24 >> 24 | 0) == 83 | ($4 << 24 >> 24 | 0) == 90)) {
break;
}
HEAP8[$arrayidx21] = 104;
}
} while (0);
$pos_020 = $pos_020 + 1 & 65535;
$arrayidx21 = $spl_str + ($pos_020 & 65535) | 0;
$1 = HEAP8[$arrayidx21] | 0;
} while ($1 << 24 >> 24 != 0);
return;
}
function __ZN10ime_pinyin11DictBuilder18str_in_hanzis_listEPKtjS2_j($this, $hzs, $hzs_len, $str, $str_len) {
$this = $this | 0;
$hzs = $hzs | 0;
$hzs_len = $hzs_len | 0;
$str = $str | 0;
$str_len = $str_len | 0;
var $pos_0 = 0, $retval_0 = 0, label = 0;
if (($hzs | 0) == 0 | ($str | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
} else {
$pos_0 = 0;
}
while (1) {
if ($pos_0 >>> 0 >= $str_len >>> 0) {
$retval_0 = 1;
label = 227;
break;
}
if (__ZN10ime_pinyin11DictBuilder17hz_in_hanzis_listEPKtjt(0, $hzs, $hzs_len, HEAP16[$str + ($pos_0 << 1) >> 1] | 0) | 0) {
$pos_0 = $pos_0 + 1 | 0;
} else {
$retval_0 = 0;
label = 226;
break;
}
}
if ((label | 0) == 226) {
return $retval_0 | 0;
} else if ((label | 0) == 227) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin11DictBuilder17sort_lemmas_by_hzEv($this) {
$this = $this | 0;
var $lemma_arr_ = 0, $0 = 0, $lemma_num_ = 0, $1 = 0, $i_09 = 0, $idx_max_08 = 0, $5 = 0, $inc23 = 0, $phitmp = 0, $retval_0 = 0;
$lemma_arr_ = $this | 0;
$0 = HEAP32[$lemma_arr_ >> 2] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lemma_num_ = $this + 4 | 0;
$1 = HEAP32[$lemma_num_ >> 2] | 0;
if (($1 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E($0, $1, 124, 22);
HEAP32[(HEAP32[$lemma_arr_ >> 2] | 0) + 4 >> 2] = 1;
if ((HEAP32[$lemma_num_ >> 2] | 0) >>> 0 > 1) {
$idx_max_08 = 2;
$i_09 = 1;
} else {
$retval_0 = 2;
return $retval_0 | 0;
}
while (1) {
$5 = HEAP32[$lemma_arr_ >> 2] | 0;
_utf16_strcmp($5 + ($i_09 * 124 | 0) + 8 | 0, $5 + (($i_09 - 1 | 0) * 124 | 0) + 8 | 0) | 0;
HEAP32[(HEAP32[$lemma_arr_ >> 2] | 0) + ($i_09 * 124 | 0) + 4 >> 2] = $idx_max_08;
$inc23 = $i_09 + 1 | 0;
$phitmp = $idx_max_08 + 1 | 0;
if ($inc23 >>> 0 < (HEAP32[$lemma_num_ >> 2] | 0) >>> 0) {
$idx_max_08 = $phitmp;
$i_09 = $inc23;
} else {
$retval_0 = $phitmp;
break;
}
}
return $retval_0 | 0;
}
function __ZN10ime_pinyin11DictBuilder17hz_in_hanzis_listEPKtjt($this, $hzs, $hzs_len, $hz) {
$this = $this | 0;
$hzs = $hzs | 0;
$hzs_len = $hzs_len | 0;
$hz = $hz | 0;
var $hz_addr = 0, $call = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$hz_addr = sp | 0;
HEAP16[$hz_addr >> 1] = $hz;
if (($hzs | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$call = __ZN10ime_pinyin9mybsearchEPKvS1_jjPFiS1_S1_E($hz_addr, $hzs, $hzs_len, 2, 24) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if ((HEAP16[$call >> 1] | 0) == (HEAP16[$hz_addr >> 1] | 0)) {
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
} else {
___assert_func(4408, 273, 7536, 2128);
return 0;
}
return 0;
}
function __ZN10ime_pinyin11DictBuilder14get_top_lemmasEv($this) {
$this = $this | 0;
var $top_lmas_num_ = 0, $lemma_arr_ = 0, $lemma_num_ = 0, $top_lmas_ = 0, $top_lmas_13 = 0, $pos_016 = 0, $2 = 0, $5 = 0, $6 = 0, $7 = 0, $arrayidx11 = 0, $9 = 0, $cmp19 = 0, $move_pos_0_in = 0, $move_pos_0 = 0, $12 = 0, $sub30 = 0, $13 = 0, $14 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $inc = 0, label = 0;
$top_lmas_num_ = $this + 48 | 0;
HEAP32[$top_lmas_num_ >> 2] = 0;
$lemma_arr_ = $this | 0;
if ((HEAP32[$lemma_arr_ >> 2] | 0) == 0) {
return;
}
$lemma_num_ = $this + 4 | 0;
if ((HEAP32[$lemma_num_ >> 2] | 0) == 0) {
return;
}
$top_lmas_ = $this + 44 | 0;
$top_lmas_13 = $this + 44 | 0;
$pos_016 = 0;
L275 : while (1) {
$2 = HEAP32[$top_lmas_num_ >> 2] | 0;
do {
if (($2 | 0) == 0) {
$5 = HEAP32[$top_lmas_ >> 2] | 0;
$6 = (HEAP32[$lemma_arr_ >> 2] | 0) + ($pos_016 * 124 | 0) | 0;
_memcpy($5 | 0, $6 | 0, 124) | 0;
HEAP32[$top_lmas_num_ >> 2] = 1;
} else {
$7 = HEAP32[$lemma_arr_ >> 2] | 0;
$arrayidx11 = $7 + ($pos_016 * 124 | 0) | 0;
$9 = HEAP32[$top_lmas_13 >> 2] | 0;
$cmp19 = $2 >>> 0 < 10;
if (+HEAPF32[$7 + ($pos_016 * 124 | 0) + 120 >> 2] <= +HEAPF32[$9 + (($2 - 1 | 0) * 124 | 0) + 120 >> 2]) {
if (!$cmp19) {
break;
}
$23 = $9 + ($2 * 124 | 0) | 0;
$24 = $arrayidx11;
_memcpy($23 | 0, $24 | 0, 124) | 0;
HEAP32[$top_lmas_num_ >> 2] = (HEAP32[$top_lmas_num_ >> 2] | 0) + 1;
break;
}
if ($cmp19) {
HEAP32[$top_lmas_num_ >> 2] = $2 + 1;
}
$move_pos_0_in = HEAP32[$top_lmas_num_ >> 2] | 0;
while (1) {
$move_pos_0 = $move_pos_0_in - 1 | 0;
if (($move_pos_0 | 0) == 0) {
label = 258;
break L275;
}
$12 = HEAP32[$top_lmas_13 >> 2] | 0;
$sub30 = $move_pos_0_in - 2 | 0;
$13 = $12 + ($move_pos_0 * 124 | 0) | 0;
$14 = $12 + ($sub30 * 124 | 0) | 0;
_memcpy($13 | 0, $14 | 0, 124) | 0;
if (($sub30 | 0) == 0) {
break;
}
if (+HEAPF32[(HEAP32[$top_lmas_13 >> 2] | 0) + (($move_pos_0_in - 3 | 0) * 124 | 0) + 120 >> 2] > +HEAPF32[(HEAP32[$lemma_arr_ >> 2] | 0) + ($pos_016 * 124 | 0) + 120 >> 2]) {
break;
} else {
$move_pos_0_in = $move_pos_0;
}
}
$21 = (HEAP32[$top_lmas_13 >> 2] | 0) + ($sub30 * 124 | 0) | 0;
$22 = (HEAP32[$lemma_arr_ >> 2] | 0) + ($pos_016 * 124 | 0) | 0;
_memcpy($21 | 0, $22 | 0, 124) | 0;
}
} while (0);
$inc = $pos_016 + 1 | 0;
if ($inc >>> 0 < (HEAP32[$lemma_num_ >> 2] | 0) >>> 0) {
$pos_016 = $inc;
} else {
label = 264;
break;
}
}
if ((label | 0) == 258) {
___assert_func(4408, 315, 7728, 1616);
} else if ((label | 0) == 264) {
return;
}
}
function __ZN10ime_pinyin11DictBuilder13read_raw_dictEPKcS2_j($this, $fn_raw, $fn_validhzs, $max_item) {
$this = $this | 0;
$fn_raw = $fn_raw | 0;
$fn_validhzs = $fn_validhzs | 0;
$max_item = $max_item | 0;
var $utf16_reader = 0, $read_buf = 0, $valid_hzs_num = 0, $token_size = 0, $to_tokenize = 0, $call11 = 0, $arraydecay = 0, $lemma_arr_ = 0, $cmp66 = 0, $spl_table_ = 0, $i_045 = 0, $call19 = 0, $call27 = 0, $arraydecay35 = 0, $call41 = 0, $call49 = 0.0, $call61 = 0, $call65 = 0, $8 = 0, $9 = 0, $hz_pos_0 = 0, $call95 = 0, $17 = 0, $spelling_not_support_0_off0 = 0, $i_1 = 0, $inc143 = 0, $lemma_num_0 = 0, $retval_0 = 0, $retval_1 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 1072 | 0;
$utf16_reader = sp | 0;
$read_buf = sp + 24 | 0;
$valid_hzs_num = sp + 1048 | 0;
$token_size = sp + 1056 | 0;
$to_tokenize = sp + 1064 | 0;
if (($fn_raw | 0) == 0) {
$retval_1 = 0;
STACKTOP = sp;
return $retval_1 | 0;
}
__ZN10ime_pinyin11Utf16ReaderC2Ev($utf16_reader);
L301 : do {
if (__ZN10ime_pinyin11Utf16Reader4openEPKcj($utf16_reader, $fn_raw, 5120) | 0) {
if (!(__ZN10ime_pinyin11DictBuilder14alloc_resourceEj($this, 24e4) | 0)) {
__ZN10ime_pinyin11Utf16Reader5closeEv($utf16_reader) | 0;
}
HEAP32[$valid_hzs_num >> 2] = 0;
$call11 = __ZN10ime_pinyin11DictBuilder17read_valid_hanzisEPKcPj(0, $fn_validhzs, $valid_hzs_num) | 0;
L308 : do {
if (($max_item | 0) == 0) {
$lemma_num_0 = 24e4;
} else {
$arraydecay = $read_buf | 0;
$lemma_arr_ = $this | 0;
$cmp66 = ($call11 | 0) == 0;
$spl_table_ = $this + 52 | 0;
$i_045 = 0;
L310 : while (1) {
if ((__ZN10ime_pinyin11Utf16Reader8readlineEPtj($utf16_reader, $arraydecay, 512) | 0) == 0) {
$lemma_num_0 = $i_045;
break L308;
}
HEAP32[$to_tokenize >> 2] = $arraydecay;
$call19 = _utf16_strtok($arraydecay, $token_size, $to_tokenize) | 0;
if (($call19 | 0) == 0) {
label = 284;
break;
}
$call27 = _utf16_strlen($call19) | 0;
L317 : do {
if ($call27 >>> 0 > 8) {
$i_1 = $i_045 - 1 | 0;
} else {
if ($call27 >>> 0 > 4) {
$i_1 = $i_045 - 1 | 0;
break;
}
$arraydecay35 = (HEAP32[$lemma_arr_ >> 2] | 0) + ($i_045 * 124 | 0) + 8 | 0;
_utf16_strcpy($arraydecay35, $call19) | 0;
HEAP8[(HEAP32[$lemma_arr_ >> 2] | 0) + ($i_045 * 124 | 0) + 116 | 0] = HEAP32[$token_size >> 2] & 255;
$call41 = _utf16_strtok(HEAP32[$to_tokenize >> 2] | 0, $token_size, $to_tokenize) | 0;
if (($call41 | 0) == 0) {
label = 294;
break L310;
}
$call49 = +_utf16_atof($call41);
HEAPF32[(HEAP32[$lemma_arr_ >> 2] | 0) + ($i_045 * 124 | 0) + 120 >> 2] = $call49;
do {
if ($call27 >>> 0 > 1) {
if (+HEAPF32[(HEAP32[$lemma_arr_ >> 2] | 0) + ($i_045 * 124 | 0) + 120 >> 2] >= 60.0) {
break;
}
$i_1 = $i_045 - 1 | 0;
break L317;
}
} while (0);
$call61 = _utf16_strtok(HEAP32[$to_tokenize >> 2] | 0, $token_size, $to_tokenize) | 0;
if (($call61 | 0) == 0) {
label = 302;
break L310;
}
$call65 = _utf16_atoi($call61) | 0;
do {
if ($cmp66) {
label = 307;
} else {
$8 = HEAP32[$valid_hzs_num >> 2] | 0;
if (($8 | 0) == 0) {
label = 307;
break;
}
$9 = HEAP32[$lemma_arr_ >> 2] | 0;
if (__ZN10ime_pinyin11DictBuilder18str_in_hanzis_listEPKtjS2_j(0, $call11, $8, $9 + ($i_045 * 124 | 0) + 8 | 0, HEAPU8[$9 + ($i_045 * 124 | 0) + 116 | 0] | 0) | 0) {
$hz_pos_0 = 0;
break;
}
$i_1 = $i_045 - 1 | 0;
break L317;
}
} while (0);
do {
if ((label | 0) == 307) {
label = 0;
if (($call65 | 0) == 0) {
$hz_pos_0 = 0;
break;
}
$i_1 = $i_045 - 1 | 0;
break L317;
}
} while (0);
while (1) {
if ($hz_pos_0 >>> 0 >= (HEAPU8[(HEAP32[$lemma_arr_ >> 2] | 0) + ($i_045 * 124 | 0) + 116 | 0] | 0) >>> 0) {
$spelling_not_support_0_off0 = 1;
break;
}
$call95 = _utf16_strtok(HEAP32[$to_tokenize >> 2] | 0, $token_size, $to_tokenize) | 0;
if (($call95 | 0) == 0) {
label = 315;
break L310;
}
if ((_utf16_strlen($call95) | 0) >>> 0 >= 7) {
label = 319;
break L310;
}
_utf16_strcpy_tochar((HEAP32[$lemma_arr_ >> 2] | 0) + ($i_045 * 124 | 0) + 60 + ($hz_pos_0 * 7 | 0) | 0, $call95) | 0;
__ZN10ime_pinyin11DictBuilder19format_spelling_strEPc(0, (HEAP32[$lemma_arr_ >> 2] | 0) + ($i_045 * 124 | 0) + 60 + ($hz_pos_0 * 7 | 0) | 0);
$17 = HEAP32[$lemma_arr_ >> 2] | 0;
if (__ZN10ime_pinyin13SpellingTable12put_spellingEPKcd(HEAP32[$spl_table_ >> 2] | 0, $17 + ($i_045 * 124 | 0) + 60 + ($hz_pos_0 * 7 | 0) | 0, +HEAPF32[$17 + ($i_045 * 124 | 0) + 120 >> 2]) | 0) {
$hz_pos_0 = $hz_pos_0 + 1 | 0;
} else {
$spelling_not_support_0_off0 = 0;
break;
}
}
$i_1 = (($spelling_not_support_0_off0 & (_utf16_strtok(HEAP32[$to_tokenize >> 2] | 0, $token_size, $to_tokenize) | 0) == 0 ^ 1) << 31 >> 31) + $i_045 | 0;
}
} while (0);
$inc143 = $i_1 + 1 | 0;
if ($inc143 >>> 0 < $max_item >>> 0) {
$i_045 = $inc143;
} else {
$lemma_num_0 = 24e4;
break L308;
}
}
if ((label | 0) == 294) {
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
__ZN10ime_pinyin11Utf16Reader5closeEv($utf16_reader) | 0;
$retval_0 = 0;
break L301;
} else if ((label | 0) == 284) {
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
__ZN10ime_pinyin11Utf16Reader5closeEv($utf16_reader) | 0;
$retval_0 = 0;
break L301;
} else if ((label | 0) == 302) {
___assert_func(4408, 448, 7776, 1344);
return 0;
} else if ((label | 0) == 315) {
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
__ZN10ime_pinyin11Utf16Reader5closeEv($utf16_reader) | 0;
$retval_0 = 0;
break L301;
} else if ((label | 0) == 319) {
___assert_func(4408, 475, 7776, 1096);
return 0;
}
}
} while (0);
if (($call11 | 0) != 0) {
__ZdaPv($call11);
}
__ZN10ime_pinyin11Utf16Reader5closeEv($utf16_reader) | 0;
$retval_0 = $lemma_num_0;
} else {
$retval_0 = 0;
}
} while (0);
__ZN10ime_pinyin11Utf16ReaderD2Ev($utf16_reader);
$retval_1 = $retval_0;
STACKTOP = sp;
return $retval_1 | 0;
}
function __ZN10ime_pinyin11DictBuilder10build_dictEPKcS2_PNS_8DictTrieE($this, $fn_raw, $fn_validhzs, $dict_trie) {
$this = $this | 0;
$fn_raw = $fn_raw | 0;
$fn_validhzs = $fn_validhzs | 0;
$dict_trie = $dict_trie | 0;
var $spl_item_size = 0, $spl_num = 0, $is_pre = 0, $call = 0, $lemma_num_ = 0, $spl_table_ = 0, $call7 = 0, $call11 = 0, $1 = 0, $2 = 0, $call13 = 0.0, $lemma_arr_ = 0, $spl_parser_ = 0, $arraydecay34 = 0, $arraydecay35 = 0, $i_049 = 0, $hz_pos_047 = 0, $8 = 0, $arraydecay = 0, $scis_num_ = 0, $17 = 0, $lemma_arr_63 = 0, $call69 = 0, $23 = 0, $24 = 0, $lma_nds_used_num_le0_ = 0, $lma_nodes_le0_ = 0, $call80 = 0, $34$0 = 0, $root_ = 0, $lma_nds_used_num_ge1_ = 0, $40$0 = 0, $nodes_ge1_ = 0, $homo_idx_num_eq1_ = 0, $homo_idx_num_gt1_ = 0, $top_lmas_num_ = 0, $add89 = 0, $mul = 0, $call90 = 0, $lma_idx_buf_ = 0, $53 = 0, $55 = 0, $mul109 = 0, $58 = 0, $60 = 0, $mul112 = 0, $homo_idx_buf_ = 0, $add116_lcssa = 0, $top_lmas_ = 0, $pos_043 = 0, $inc123 = 0, $add116 = 0, $pos125_040 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 40 | 0;
$spl_item_size = sp | 0;
$spl_num = sp + 8 | 0;
$is_pre = sp + 32 | 0;
if (($fn_raw | 0) == 0 | ($dict_trie | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$call = __ZN10ime_pinyin11DictBuilder13read_raw_dictEPKcS2_j($this, $fn_raw, $fn_validhzs, 24e4) | 0;
$lemma_num_ = $this + 4 | 0;
HEAP32[$lemma_num_ >> 2] = $call;
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$spl_table_ = $this + 52 | 0;
$call7 = __ZN10ime_pinyin13SpellingTable7arrangeEPjS1_(HEAP32[$spl_table_ >> 2] | 0, $spl_item_size, $spl_num) | 0;
if (($call7 | 0) == 0) {
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$call11 = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
$1 = HEAP32[$spl_item_size >> 2] | 0;
$2 = HEAP32[$spl_num >> 2] | 0;
$call13 = +__ZN10ime_pinyin13SpellingTable19get_score_amplifierEv(HEAP32[$spl_table_ >> 2] | 0);
if (!(__ZN10ime_pinyin12SpellingTrie9constructEPKcjjfh($call11, $call7, $1, $2, $call13, __ZN10ime_pinyin13SpellingTable17get_average_scoreEv(HEAP32[$spl_table_ >> 2] | 0) | 0) | 0)) {
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
L386 : do {
if ((HEAP32[$lemma_num_ >> 2] | 0) != 0) {
$lemma_arr_ = $this | 0;
$spl_parser_ = $this + 56 | 0;
$arraydecay34 = sp + 16 | 0;
$arraydecay35 = sp + 24 | 0;
$i_049 = 0;
L388 : while (1) {
if ((HEAP8[(HEAP32[$lemma_arr_ >> 2] | 0) + ($i_049 * 124 | 0) + 116 | 0] | 0) != 0) {
$hz_pos_047 = 0;
do {
HEAP8[$is_pre] = 1;
$8 = HEAP32[$spl_parser_ >> 2] | 0;
$arraydecay = (HEAP32[$lemma_arr_ >> 2] | 0) + ($i_049 * 124 | 0) + 60 + ($hz_pos_047 * 7 | 0) | 0;
if ((__ZN10ime_pinyin14SpellingParser14splstr_to_idxsEPKctPtS3_tRb($8, $arraydecay, (_strlen($arraydecay | 0) | 0) & 65535, $arraydecay34, $arraydecay35, 2, $is_pre) | 0) << 16 >> 16 != 1) {
label = 346;
break L388;
}
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt($call11, HEAP16[$arraydecay34 >> 1] | 0) | 0) {
if ((__ZNK10ime_pinyin12SpellingTrie12half_to_fullEtPt($call11, HEAP16[$arraydecay34 >> 1] | 0, $arraydecay34) | 0) << 16 >> 16 == 0) {
label = 349;
break L388;
}
}
HEAP16[(HEAP32[$lemma_arr_ >> 2] | 0) + ($i_049 * 124 | 0) + 42 + ($hz_pos_047 << 1) >> 1] = HEAP16[$arraydecay34 >> 1] | 0;
$hz_pos_047 = $hz_pos_047 + 1 | 0;
} while ($hz_pos_047 >>> 0 < (HEAPU8[(HEAP32[$lemma_arr_ >> 2] | 0) + ($i_049 * 124 | 0) + 116 | 0] | 0) >>> 0);
}
$i_049 = $i_049 + 1 | 0;
if ($i_049 >>> 0 >= (HEAP32[$lemma_num_ >> 2] | 0) >>> 0) {
break L386;
}
}
if ((label | 0) == 349) {
___assert_func(4408, 556, 7912, 752);
return 0;
} else if ((label | 0) == 346) {
___assert_func(4408, 552, 7912, 920);
return 0;
}
}
} while (0);
__ZN10ime_pinyin11DictBuilder17sort_lemmas_by_hzEv($this) | 0;
$scis_num_ = $this + 12 | 0;
HEAP32[$scis_num_ >> 2] = __ZN10ime_pinyin11DictBuilder10build_scisEv($this) | 0;
$17 = __Znwj(128) | 0;
__ZN10ime_pinyin8DictListC2Ev($17);
HEAP32[$dict_trie + 4 >> 2] = $17;
$lemma_arr_63 = $this | 0;
if (!(__ZN10ime_pinyin8DictList9init_listEPKNS_14SingleCharItemEjPKNS_10LemmaEntryEj($17, HEAP32[$this + 8 >> 2] | 0, HEAP32[$scis_num_ >> 2] | 0, HEAP32[$lemma_arr_63 >> 2] | 0, HEAP32[$lemma_num_ >> 2] | 0) | 0)) {
___assert_func(4408, 572, 7912, 600);
return 0;
}
$call69 = __ZN10ime_pinyin5NGram12get_instanceEv() | 0;
$23 = HEAP32[$lemma_arr_63 >> 2] | 0;
$24 = HEAP32[$lemma_num_ >> 2] | 0;
__ZN10ime_pinyin5NGram13build_unigramEPNS_10LemmaEntryEjj($call69, $23, $24, (HEAP32[$23 + (($24 - 1 | 0) * 124 | 0) + 4 >> 2] | 0) + 1 | 0) | 0;
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E(HEAP32[$lemma_arr_63 >> 2] | 0, HEAP32[$lemma_num_ >> 2] | 0, 124, 6);
__ZN10ime_pinyin11DictBuilder14get_top_lemmasEv($this);
__ZN10ime_pinyin11DictBuilder9stat_initEv($this);
$lma_nds_used_num_le0_ = $this + 24 | 0;
HEAP32[$lma_nds_used_num_le0_ >> 2] = 1;
$lma_nodes_le0_ = $this + 16 | 0;
$call80 = __ZN10ime_pinyin11DictBuilder16construct_subsetEPvPNS_10LemmaEntryEjjj($this, HEAP32[$lma_nodes_le0_ >> 2] | 0, HEAP32[$lemma_arr_63 >> 2] | 0, 0, HEAP32[$lemma_num_ >> 2] | 0, 0) | 0;
if (!$call80) {
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$34$0 = _llvm_umul_with_overflow_i32(HEAP32[$lma_nds_used_num_le0_ >> 2] | 0, 16) | 0;
$root_ = $dict_trie + 12 | 0;
HEAP32[$root_ >> 2] = __Znaj(tempRet0 ? -1 : $34$0) | 0;
$lma_nds_used_num_ge1_ = $this + 28 | 0;
$40$0 = _llvm_umul_with_overflow_i32(HEAP32[$lma_nds_used_num_ge1_ >> 2] | 0, 10) | 0;
$nodes_ge1_ = $dict_trie + 16 | 0;
HEAP32[$nodes_ge1_ >> 2] = __Znaj(tempRet0 ? -1 : $40$0) | 0;
$homo_idx_num_eq1_ = $this + 36 | 0;
$homo_idx_num_gt1_ = $this + 40 | 0;
$top_lmas_num_ = $this + 48 | 0;
$add89 = (HEAP32[$homo_idx_num_gt1_ >> 2] | 0) + (HEAP32[$homo_idx_num_eq1_ >> 2] | 0) + (HEAP32[$top_lmas_num_ >> 2] | 0) | 0;
$mul = $add89 * 3 | 0;
$call90 = __Znaj($mul) | 0;
$lma_idx_buf_ = $dict_trie + 32 | 0;
HEAP32[$lma_idx_buf_ >> 2] = $call90;
if ((HEAP32[$root_ >> 2] | 0) == 0) {
___assert_func(4408, 606, 7912, 4376);
return 0;
}
if (($call90 | 0) == 0) {
___assert_func(4408, 607, 7912, 4256);
return 0;
}
HEAP32[$dict_trie + 24 >> 2] = HEAP32[$lma_nds_used_num_le0_ >> 2];
HEAP32[$dict_trie + 28 >> 2] = HEAP32[$lma_nds_used_num_ge1_ >> 2];
HEAP32[$dict_trie + 36 >> 2] = $mul;
HEAP32[$dict_trie + 44 >> 2] = HEAP32[$top_lmas_num_ >> 2];
$53 = HEAP32[$root_ >> 2] | 0;
$55 = HEAP32[$lma_nodes_le0_ >> 2] | 0;
$mul109 = HEAP32[$lma_nds_used_num_le0_ >> 2] << 4;
_memcpy($53 | 0, $55 | 0, $mul109) | 0;
$58 = HEAP32[$nodes_ge1_ >> 2] | 0;
$60 = HEAP32[$this + 20 >> 2] | 0;
$mul112 = (HEAP32[$lma_nds_used_num_ge1_ >> 2] | 0) * 10 | 0;
_memcpy($58 | 0, $60 | 0, $mul112) | 0;
if ((HEAP32[$homo_idx_num_gt1_ >> 2] | 0) == (-(HEAP32[$homo_idx_num_eq1_ >> 2] | 0) | 0)) {
$add116_lcssa = 0;
} else {
$homo_idx_buf_ = $this + 32 | 0;
$pos_043 = 0;
while (1) {
__ZN10ime_pinyin11DictBuilder13id_to_charbufEPhj(0, (HEAP32[$lma_idx_buf_ >> 2] | 0) + ($pos_043 * 3 | 0) | 0, HEAP32[(HEAP32[$homo_idx_buf_ >> 2] | 0) + ($pos_043 << 2) >> 2] | 0);
$inc123 = $pos_043 + 1 | 0;
$add116 = (HEAP32[$homo_idx_num_gt1_ >> 2] | 0) + (HEAP32[$homo_idx_num_eq1_ >> 2] | 0) | 0;
if ($inc123 >>> 0 < $add116 >>> 0) {
$pos_043 = $inc123;
} else {
$add116_lcssa = $add116;
break;
}
}
}
if ($add116_lcssa >>> 0 < $add89 >>> 0) {
$top_lmas_ = $this + 44 | 0;
$pos125_040 = $add116_lcssa;
do {
__ZN10ime_pinyin11DictBuilder13id_to_charbufEPhj(0, (HEAP32[$lma_idx_buf_ >> 2] | 0) + ($pos125_040 * 3 | 0) | 0, HEAP32[(HEAP32[$top_lmas_ >> 2] | 0) + (($pos125_040 - (HEAP32[$homo_idx_num_eq1_ >> 2] | 0) - (HEAP32[$homo_idx_num_gt1_ >> 2] | 0) | 0) * 124 | 0) + 4 >> 2] | 0);
$pos125_040 = $pos125_040 + 1 | 0;
} while ($pos125_040 >>> 0 < $add89 >>> 0);
}
__ZN10ime_pinyin11DictBuilder13free_resourceEv($this);
$retval_0 = $call80;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin11DictBuilder13id_to_charbufEPhj($this, $buf, $id) {
$this = $this | 0;
$buf = $buf | 0;
$id = $id | 0;
if (($buf | 0) == 0) {
return;
}
HEAP8[$buf] = $id & 255;
HEAP8[$buf + 1 | 0] = $id >>> 8 & 255;
HEAP8[$buf + 2 | 0] = $id >>> 16 & 255;
return;
}
function __ZN10ime_pinyin11DictBuilder14set_son_offsetEPNS_10LmaNodeGE1Ej($this, $node, $offset) {
$this = $this | 0;
$node = $node | 0;
$offset = $offset | 0;
HEAP16[$node >> 1] = $offset & 65535;
HEAP8[$node + 8 | 0] = $offset >>> 16 & 255;
return;
}
function __ZN10ime_pinyin11DictBuilder22set_homo_id_buf_offsetEPNS_10LmaNodeGE1Ej($this, $node, $offset) {
$this = $this | 0;
$node = $node | 0;
$offset = $offset | 0;
HEAP16[$node + 2 >> 1] = $offset & 65535;
HEAP8[$node + 9 | 0] = $offset >>> 16 & 255;
return;
}
function __ZN10ime_pinyin11DictBuilder9stat_initEv($this) {
$this = $this | 0;
_memset($this + 60 | 0, 0, 268);
return;
}
function __ZN10ime_pinyin11DictBuilder10build_scisEv($this) {
$this = $this | 0;
var $key = 0, $scis_ = 0, $lemma_num_ = 0, $scis_num_ = 0, $call = 0, $6 = 0, $10 = 0, $lemma_arr_ = 0, $pos_049 = 0, $15 = 0, $conv = 0, $cmp42 = 0, $hzpos_047 = 0, $24 = 0, $call36 = 0, $36 = 0, $pos63_044 = 0, $unique_scis_num_043 = 0, $52 = 0, $sub = 0, $61 = 0, $62 = 0, $63 = 0, $64$1 = 0, $call99 = 0, $70 = 0, $unique_scis_num_1 = 0, $inc106 = 0, $unique_scis_num_0_lcssa = 0, $lemma_arr_115 = 0, $hz127 = 0, $76 = 0, $77 = 0, $pos109_040 = 0, $79 = 0, $conv118 = 0, $hzpos119_038 = 0, $83 = 0, $bf_value138 = 0, $call140 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$key = sp | 0;
$scis_ = $this + 8 | 0;
if ((HEAP32[$scis_ >> 2] | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$lemma_num_ = $this + 4 | 0;
$scis_num_ = $this + 12 | 0;
if (HEAP32[$lemma_num_ >> 2] << 3 >>> 0 > (HEAP32[$scis_num_ >> 2] | 0) >>> 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$call = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
HEAPF32[HEAP32[$scis_ >> 2] >> 2] = 0.0;
HEAP16[(HEAP32[$scis_ >> 2] | 0) + 4 >> 1] = 0;
$6 = (HEAP32[$scis_ >> 2] | 0) + 6 | 0;
HEAP16[$6 >> 1] = HEAP16[$6 >> 1] & 31;
$10 = (HEAP32[$scis_ >> 2] | 0) + 6 | 0;
HEAP16[$10 >> 1] = HEAP16[$10 >> 1] & -32;
HEAP32[$scis_num_ >> 2] = 1;
if ((HEAP32[$lemma_num_ >> 2] | 0) != 0) {
$lemma_arr_ = $this | 0;
$pos_049 = 0;
do {
$15 = HEAP8[(HEAP32[$lemma_arr_ >> 2] | 0) + ($pos_049 * 124 | 0) + 116 | 0] | 0;
$conv = $15 & 255;
if ($15 << 24 >> 24 != 0) {
$cmp42 = $15 << 24 >> 24 == 1;
$hzpos_047 = 0;
do {
HEAP16[(HEAP32[$scis_ >> 2] | 0) + (HEAP32[$scis_num_ >> 2] << 3) + 4 >> 1] = HEAP16[(HEAP32[$lemma_arr_ >> 2] | 0) + ($pos_049 * 124 | 0) + 8 + ($hzpos_047 << 1) >> 1] | 0;
$24 = (HEAP32[$scis_ >> 2] | 0) + (HEAP32[$scis_num_ >> 2] << 3) + 6 | 0;
HEAP16[$24 >> 1] = HEAP16[$24 >> 1] & 31 | HEAP16[(HEAP32[$lemma_arr_ >> 2] | 0) + ($pos_049 * 124 | 0) + 42 + ($hzpos_047 << 1) >> 1] << 5;
$call36 = __ZNK10ime_pinyin12SpellingTrie12full_to_halfEt($call, (HEAPU16[(HEAP32[$scis_ >> 2] | 0) + (HEAP32[$scis_num_ >> 2] << 3) + 6 >> 1] | 0) >>> 5) | 0;
$36 = (HEAP32[$scis_ >> 2] | 0) + (HEAP32[$scis_num_ >> 2] << 3) + 6 | 0;
HEAP16[$36 >> 1] = HEAP16[$36 >> 1] & -32 | $call36 & 31;
if ($cmp42) {
HEAPF32[(HEAP32[$scis_ >> 2] | 0) + (HEAP32[$scis_num_ >> 2] << 3) >> 2] = +HEAPF32[(HEAP32[$lemma_arr_ >> 2] | 0) + ($pos_049 * 124 | 0) + 120 >> 2];
} else {
HEAPF32[(HEAP32[$scis_ >> 2] | 0) + (HEAP32[$scis_num_ >> 2] << 3) >> 2] = 9.999999974752427e-7;
}
HEAP32[$scis_num_ >> 2] = (HEAP32[$scis_num_ >> 2] | 0) + 1;
$hzpos_047 = $hzpos_047 + 1 | 0;
} while ($hzpos_047 >>> 0 < $conv >>> 0);
}
$pos_049 = $pos_049 + 1 | 0;
} while ($pos_049 >>> 0 < (HEAP32[$lemma_num_ >> 2] | 0) >>> 0);
}
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E(HEAP32[$scis_ >> 2] | 0, HEAP32[$scis_num_ >> 2] | 0, 8, 50);
if ((HEAP32[$scis_num_ >> 2] | 0) >>> 0 > 1) {
$unique_scis_num_043 = 1;
$pos63_044 = 1;
while (1) {
$52 = HEAP32[$scis_ >> 2] | 0;
$sub = $pos63_044 - 1 | 0;
if ((HEAP16[$52 + ($pos63_044 << 3) + 4 >> 1] | 0) == (HEAP16[$52 + ($sub << 3) + 4 >> 1] | 0)) {
if ((HEAPU16[$52 + ($pos63_044 << 3) + 6 >> 1] | 0) >>> 5 << 16 >> 16 == (HEAPU16[$52 + ($sub << 3) + 6 >> 1] | 0) >>> 5 << 16 >> 16) {
$unique_scis_num_1 = $unique_scis_num_043;
} else {
label = 398;
}
} else {
label = 398;
}
if ((label | 0) == 398) {
label = 0;
$61 = HEAP32[$scis_ >> 2] | 0;
$62 = $61 + ($pos63_044 << 3) | 0;
$63 = $61 + ($unique_scis_num_043 << 3) | 0;
$64$1 = HEAP32[$62 + 4 >> 2] | 0;
HEAP32[$63 >> 2] = HEAP32[$62 >> 2];
HEAP32[$63 + 4 >> 2] = $64$1;
$call99 = __ZNK10ime_pinyin12SpellingTrie12full_to_halfEt($call, (HEAPU16[(HEAP32[$scis_ >> 2] | 0) + ($pos63_044 << 3) + 6 >> 1] | 0) >>> 5) | 0;
$70 = (HEAP32[$scis_ >> 2] | 0) + ($unique_scis_num_043 << 3) + 6 | 0;
HEAP16[$70 >> 1] = HEAP16[$70 >> 1] & -32 | $call99 & 31;
$unique_scis_num_1 = $unique_scis_num_043 + 1 | 0;
}
$inc106 = $pos63_044 + 1 | 0;
if ($inc106 >>> 0 < (HEAP32[$scis_num_ >> 2] | 0) >>> 0) {
$unique_scis_num_043 = $unique_scis_num_1;
$pos63_044 = $inc106;
} else {
$unique_scis_num_0_lcssa = $unique_scis_num_1;
break;
}
}
} else {
$unique_scis_num_0_lcssa = 1;
}
HEAP32[$scis_num_ >> 2] = $unique_scis_num_0_lcssa;
L465 : do {
if ((HEAP32[$lemma_num_ >> 2] | 0) != 0) {
$lemma_arr_115 = $this | 0;
$hz127 = $key + 4 | 0;
$76 = $key + 6 | 0;
$77 = $key;
$pos109_040 = 0;
L467 : while (1) {
$79 = HEAP8[(HEAP32[$lemma_arr_115 >> 2] | 0) + ($pos109_040 * 124 | 0) + 116 | 0] | 0;
$conv118 = $79 & 255;
if ($79 << 24 >> 24 != 0) {
$hzpos119_038 = 0;
do {
HEAP16[$hz127 >> 1] = HEAP16[(HEAP32[$lemma_arr_115 >> 2] | 0) + ($pos109_040 * 124 | 0) + 8 + ($hzpos119_038 << 1) >> 1] | 0;
$83 = HEAP16[(HEAP32[$lemma_arr_115 >> 2] | 0) + ($pos109_040 * 124 | 0) + 42 + ($hzpos119_038 << 1) >> 1] | 0;
HEAP16[$76 >> 1] = HEAP16[$76 >> 1] & 31 | $83 << 5;
$bf_value138 = (__ZNK10ime_pinyin12SpellingTrie12full_to_halfEt($call, $83 & 2047) | 0) & 31;
HEAP16[$76 >> 1] = HEAP16[$76 >> 1] & -32 | $bf_value138;
$call140 = __ZN10ime_pinyin9mybsearchEPKvS1_jjPFiS1_S1_E($77, HEAP32[$scis_ >> 2] | 0, $unique_scis_num_0_lcssa, 8, 34) | 0;
if (($call140 | 0) == 0) {
break L467;
}
HEAP16[(HEAP32[$lemma_arr_115 >> 2] | 0) + ($pos109_040 * 124 | 0) + 26 + ($hzpos119_038 << 1) >> 1] = ($call140 - (HEAP32[$scis_ >> 2] | 0) | 0) >>> 3 & 65535;
HEAP16[(HEAP32[$lemma_arr_115 >> 2] | 0) + ($pos109_040 * 124 | 0) + 42 + ($hzpos119_038 << 1) >> 1] = (HEAPU16[$call140 + 6 >> 1] | 0) >>> 5;
$hzpos119_038 = $hzpos119_038 + 1 | 0;
} while ($hzpos119_038 >>> 0 < $conv118 >>> 0);
}
$pos109_040 = $pos109_040 + 1 | 0;
if ($pos109_040 >>> 0 >= (HEAP32[$lemma_num_ >> 2] | 0) >>> 0) {
break L465;
}
}
___assert_func(4408, 763, 7864, 4048);
return 0;
}
} while (0);
$retval_0 = HEAP32[$scis_num_ >> 2] | 0;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin11DictBuilder16construct_subsetEPvPNS_10LemmaEntryEjjj($this, $parent, $lemma_arr, $item_start, $item_end, $level) {
$this = $this | 0;
$parent = $parent | 0;
$lemma_arr = $lemma_arr | 0;
$item_start = $item_start | 0;
$item_end = $item_end | 0;
$level = $level | 0;
var $lemma_arr_ = 0, $add = 0, $parent_son_num_0192 = 0, $spl_idx_node_0191 = 0, $i_0190 = 0, $2 = 0, $parent_son_num_0_inc = 0, $inc11 = 0, $parent_son_num_0_lcssa = 0, $inc12 = 0, $arrayidx14 = 0, $arrayidx20 = 0, $arrayidx22 = 0, $sonbufs_num1_ = 0, $sonbufs_numgt1_ = 0, $total_lma_node_num_ = 0, $cmp30 = 0, $lma_nds_used_num_le0_ = 0, $10 = 0, $11 = 0, $lma_nds_used_num_ge1_ = 0, $14 = 0, $15 = 0, $lma_nds_used_num_ge1_56 = 0, $19 = 0, $20 = 0, $son_1st_le0_0 = 0, $son_1st_ge1_0 = 0, $22 = 0, $23 = 0, $add74 = 0, $_ = 0, $homo_num_1_neg171 = 0, $homo_idx_num_eq1_ = 0, $homo_idx_num_gt1_ = 0, $arrayidx170 = 0, $homo_idx_buf_ = 0, $homo_idx_num_eq1_123 = 0, $homo_idx_num_gt1_125 = 0, $arrayidx153 = 0, $arrayidx159 = 0, $homo_idx_num_eq1_115 = 0, $homo_idx_num_gt1_116 = 0, $homo_num_1_neg183 = 0, $spl_idx_node_2182 = 0, $i81_0180 = 0, $item_start_next_0177 = 0, $homo_num_1175 = 0, $son_pos_0174 = 0, $allson_noson_0_off0173 = 0, $25 = 0, $26 = 0, $add_ptr107 = 0, $add_ptr113 = 0, $node_cur_le0_0 = 0, $node_cur_ge1_0 = 0, $34 = 0, $35 = 0, $36 = 0, $add_ptr126_sum = 0, $homo_pos_0155 = 0, $next_parent_0 = 0, $add168 = 0, $allson_noson_1_off0 = 0, $allson_noson_2_off0 = 0, $son_pos_1 = 0, $homo_num_3 = 0, $item_start_next_1 = 0, $spl_idx_node_3 = 0, $inc183 = 0, $homo_num_1_neg = 0, $homo_num_1_neg_lcssa = 0, $spl_idx_node_2_lcssa = 0, $item_start_next_0_lcssa = 0, $homo_num_1_lcssa = 0, $son_pos_0_lcssa = 0, $allson_noson_0_off0_lcssa = 0, $add_ptr189 = 0, $homo_idx_num_eq1_191 = 0, $add_ptr199 = 0, $homo_idx_num_gt1_202 = 0, $node_cur_le0185_0 = 0, $node_cur_ge1186_0 = 0, $51 = 0, $52 = 0, $53 = 0, $add_ptr214_sum = 0, $homo_pos233_0153 = 0, $arrayidx245 = 0, $arrayidx252 = 0, $next_parent258_0 = 0, $add263 = 0, $arrayidx267 = 0, $arrayidx271 = 0, $arrayidx273 = 0, $retval_0 = 0, label = 0;
if (!($level >>> 0 < 8 & $item_end >>> 0 > $item_start >>> 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lemma_arr_ = $this | 0;
$add = $item_start + 1 | 0;
if ($add >>> 0 < $item_end >>> 0) {
$i_0190 = $add;
$spl_idx_node_0191 = HEAP16[(HEAP32[$lemma_arr_ >> 2] | 0) + ($item_start * 124 | 0) + 42 + ($level << 1) >> 1] | 0;
$parent_son_num_0192 = 0;
while (1) {
$2 = HEAP16[$lemma_arr + ($i_0190 * 124 | 0) + 42 + ($level << 1) >> 1] | 0;
$parent_son_num_0_inc = ($2 << 16 >> 16 != $spl_idx_node_0191 << 16 >> 16) + $parent_son_num_0192 | 0;
$inc11 = $i_0190 + 1 | 0;
if ($inc11 >>> 0 < $item_end >>> 0) {
$i_0190 = $inc11;
$spl_idx_node_0191 = $2;
$parent_son_num_0192 = $parent_son_num_0_inc;
} else {
$parent_son_num_0_lcssa = $parent_son_num_0_inc;
break;
}
}
} else {
$parent_son_num_0_lcssa = 0;
}
$inc12 = $parent_son_num_0_lcssa + 1 | 0;
if ($level >>> 0 >= 8) {
___assert_func(4408, 803, 7616, 3816);
return 0;
}
$arrayidx14 = $this + 60 + ($level << 2) | 0;
if ($inc12 >>> 0 > (HEAP32[$arrayidx14 >> 2] | 0) >>> 0) {
HEAP32[$arrayidx14 >> 2] = $inc12;
}
$arrayidx20 = $this + 124 + ($level << 2) | 0;
HEAP32[$arrayidx20 >> 2] = (HEAP32[$arrayidx20 >> 2] | 0) + $inc12;
$arrayidx22 = $this + 188 + ($level << 2) | 0;
HEAP32[$arrayidx22 >> 2] = (HEAP32[$arrayidx22 >> 2] | 0) + 1;
if (($parent_son_num_0_lcssa | 0) == 0) {
$sonbufs_num1_ = $this + 316 | 0;
HEAP32[$sonbufs_num1_ >> 2] = (HEAP32[$sonbufs_num1_ >> 2] | 0) + 1;
} else {
$sonbufs_numgt1_ = $this + 320 | 0;
HEAP32[$sonbufs_numgt1_ >> 2] = (HEAP32[$sonbufs_numgt1_ >> 2] | 0) + 1;
}
$total_lma_node_num_ = $this + 324 | 0;
HEAP32[$total_lma_node_num_ >> 2] = (HEAP32[$total_lma_node_num_ >> 2] | 0) + $inc12;
$cmp30 = ($level | 0) == 0;
do {
if ($cmp30) {
$lma_nds_used_num_le0_ = $this + 24 | 0;
HEAP32[$parent >> 2] = HEAP32[$lma_nds_used_num_le0_ >> 2];
$10 = HEAP32[$this + 16 >> 2] | 0;
$11 = HEAP32[$lma_nds_used_num_le0_ >> 2] | 0;
HEAP32[$lma_nds_used_num_le0_ >> 2] = $11 + $inc12;
if ($inc12 >>> 0 < 65536) {
HEAP16[$parent + 10 >> 1] = $inc12 & 65535;
$son_1st_ge1_0 = 0;
$son_1st_le0_0 = $10 + ($11 << 4) | 0;
break;
} else {
___assert_func(4408, 827, 7616, 3640);
return 0;
}
} else {
if (($level | 0) == 1) {
$lma_nds_used_num_ge1_ = $this + 28 | 0;
HEAP32[$parent >> 2] = HEAP32[$lma_nds_used_num_ge1_ >> 2];
$14 = HEAP32[$this + 20 >> 2] | 0;
$15 = HEAP32[$lma_nds_used_num_ge1_ >> 2] | 0;
HEAP32[$lma_nds_used_num_ge1_ >> 2] = $15 + $inc12;
if ($inc12 >>> 0 < 65536) {
HEAP16[$parent + 10 >> 1] = $inc12 & 65535;
$son_1st_ge1_0 = $14 + ($15 * 10 | 0) | 0;
$son_1st_le0_0 = 0;
break;
} else {
___assert_func(4408, 836, 7616, 3640);
return 0;
}
} else {
$lma_nds_used_num_ge1_56 = $this + 28 | 0;
__ZN10ime_pinyin11DictBuilder14set_son_offsetEPNS_10LmaNodeGE1Ej(0, $parent, HEAP32[$lma_nds_used_num_ge1_56 >> 2] | 0);
$19 = HEAP32[$this + 20 >> 2] | 0;
$20 = HEAP32[$lma_nds_used_num_ge1_56 >> 2] | 0;
HEAP32[$lma_nds_used_num_ge1_56 >> 2] = $20 + $inc12;
if ($inc12 >>> 0 < 256) {
HEAP8[$parent + 6 | 0] = $inc12 & 255;
$son_1st_ge1_0 = $19 + ($20 * 10 | 0) | 0;
$son_1st_le0_0 = 0;
break;
} else {
___assert_func(4408, 845, 7616, 3528);
return 0;
}
}
}
} while (0);
$22 = HEAP32[$lemma_arr_ >> 2] | 0;
$23 = HEAP16[$22 + ($item_start * 124 | 0) + 42 + ($level << 1) >> 1] | 0;
$add74 = $level + 1 | 0;
$_ = (HEAP16[$22 + ($item_start * 124 | 0) + 42 + ($add74 << 1) >> 1] | 0) == 0 | 0;
$homo_num_1_neg171 = -$_ | 0;
L512 : do {
if ($add >>> 0 < $item_end >>> 0) {
$homo_idx_num_eq1_ = $this + 36 | 0;
$homo_idx_num_gt1_ = $this + 40 | 0;
$arrayidx170 = $this + 156 + ($level << 2) | 0;
$homo_idx_buf_ = $this + 32 | 0;
$homo_idx_num_eq1_123 = $this + 36 | 0;
$homo_idx_num_gt1_125 = $this + 40 | 0;
$arrayidx153 = $this + 92 + ($level << 2) | 0;
$arrayidx159 = $this + 284 + ($level << 2) | 0;
$homo_idx_num_eq1_115 = $this + 36 | 0;
$homo_idx_num_gt1_116 = $this + 40 | 0;
$allson_noson_0_off0173 = 1;
$son_pos_0174 = 0;
$homo_num_1175 = $_;
$item_start_next_0177 = $item_start;
$i81_0180 = $add;
$spl_idx_node_2182 = $23;
$homo_num_1_neg183 = $homo_num_1_neg171;
while (1) {
$25 = HEAP32[$lemma_arr_ >> 2] | 0;
$26 = HEAP16[$25 + ($i81_0180 * 124 | 0) + 42 + ($level << 1) >> 1] | 0;
if ($26 << 16 >> 16 == $spl_idx_node_2182 << 16 >> 16) {
$spl_idx_node_3 = $spl_idx_node_2182;
$item_start_next_1 = $item_start_next_0177;
$homo_num_3 = ((HEAP16[$25 + ($i81_0180 * 124 | 0) + 42 + ($add74 << 1) >> 1] | 0) == 0) + $homo_num_1175 | 0;
$son_pos_1 = $son_pos_0174;
$allson_noson_2_off0 = $allson_noson_0_off0173;
} else {
if ($cmp30) {
$add_ptr107 = $son_1st_le0_0 + ($son_pos_0174 << 4) | 0;
HEAP16[$son_1st_le0_0 + ($son_pos_0174 << 4) + 8 >> 1] = $spl_idx_node_2182;
HEAP32[$son_1st_le0_0 + ($son_pos_0174 << 4) + 4 >> 2] = (HEAP32[$homo_idx_num_gt1_ >> 2] | 0) + (HEAP32[$homo_idx_num_eq1_ >> 2] | 0);
HEAP32[$add_ptr107 >> 2] = 0;
HEAP32[$homo_idx_num_eq1_ >> 2] = (HEAP32[$homo_idx_num_eq1_ >> 2] | 0) + $homo_num_1175;
$node_cur_ge1_0 = 0;
$node_cur_le0_0 = $add_ptr107;
} else {
$add_ptr113 = $son_1st_ge1_0 + ($son_pos_0174 * 10 | 0) | 0;
HEAP16[$son_1st_ge1_0 + ($son_pos_0174 * 10 | 0) + 4 >> 1] = $spl_idx_node_2182;
__ZN10ime_pinyin11DictBuilder22set_homo_id_buf_offsetEPNS_10LmaNodeGE1Ej(0, $add_ptr113, (HEAP32[$homo_idx_num_gt1_116 >> 2] | 0) + (HEAP32[$homo_idx_num_eq1_115 >> 2] | 0) | 0);
__ZN10ime_pinyin11DictBuilder14set_son_offsetEPNS_10LmaNodeGE1Ej(0, $add_ptr113, 0);
HEAP32[$homo_idx_num_gt1_116 >> 2] = (HEAP32[$homo_idx_num_gt1_116 >> 2] | 0) + $homo_num_1175;
$node_cur_ge1_0 = $add_ptr113;
$node_cur_le0_0 = 0;
}
if (($homo_num_1175 | 0) != 0) {
$34 = HEAP32[$homo_idx_buf_ >> 2] | 0;
$35 = HEAP32[$homo_idx_num_eq1_123 >> 2] | 0;
$36 = HEAP32[$homo_idx_num_gt1_125 >> 2] | 0;
if ($cmp30) {
if ($homo_num_1175 >>> 0 >= 65536) {
label = 444;
break;
}
HEAP16[$node_cur_le0_0 + 12 >> 1] = $homo_num_1175 & 65535;
} else {
if ($homo_num_1175 >>> 0 >= 256) {
label = 447;
break;
}
HEAP8[$node_cur_ge1_0 + 7 | 0] = $homo_num_1175 & 255;
}
if (($homo_num_1175 | 0) != 0) {
$add_ptr126_sum = $35 + $homo_num_1_neg183 + $36 | 0;
$homo_pos_0155 = 0;
do {
HEAP32[$34 + ($add_ptr126_sum + $homo_pos_0155 << 2) >> 2] = HEAP32[(HEAP32[$lemma_arr_ >> 2] | 0) + (($homo_pos_0155 + $item_start_next_0177 | 0) * 124 | 0) + 4 >> 2];
$homo_pos_0155 = $homo_pos_0155 + 1 | 0;
} while ($homo_pos_0155 >>> 0 < $homo_num_1175 >>> 0);
}
if ($homo_num_1175 >>> 0 > (HEAP32[$arrayidx153 >> 2] | 0) >>> 0) {
HEAP32[$arrayidx153 >> 2] = $homo_num_1175;
}
HEAP32[$arrayidx159 >> 2] = (HEAP32[$arrayidx159 >> 2] | 0) + $homo_num_1175;
}
if (($i81_0180 - $item_start_next_0177 | 0) >>> 0 > $homo_num_1175 >>> 0) {
if ($cmp30) {
$next_parent_0 = $node_cur_le0_0;
} else {
$next_parent_0 = $node_cur_ge1_0;
}
$add168 = $item_start_next_0177 + $homo_num_1175 | 0;
__ZN10ime_pinyin11DictBuilder16construct_subsetEPvPNS_10LemmaEntryEjjj($this, $next_parent_0, $lemma_arr, $add168, $i81_0180, $add74) | 0;
HEAP32[$arrayidx170 >> 2] = (HEAP32[$arrayidx170 >> 2] | 0) + 1;
$allson_noson_1_off0 = 0;
} else {
$allson_noson_1_off0 = $allson_noson_0_off0173;
}
$spl_idx_node_3 = $26;
$item_start_next_1 = $i81_0180;
$homo_num_3 = (HEAP16[$25 + ($i81_0180 * 124 | 0) + 42 + ($add74 << 1) >> 1] | 0) == 0 | 0;
$son_pos_1 = $son_pos_0174 + 1 | 0;
$allson_noson_2_off0 = $allson_noson_1_off0;
}
$inc183 = $i81_0180 + 1 | 0;
$homo_num_1_neg = -$homo_num_3 | 0;
if ($inc183 >>> 0 < $item_end >>> 0) {
$allson_noson_0_off0173 = $allson_noson_2_off0;
$son_pos_0174 = $son_pos_1;
$homo_num_1175 = $homo_num_3;
$item_start_next_0177 = $item_start_next_1;
$i81_0180 = $inc183;
$spl_idx_node_2182 = $spl_idx_node_3;
$homo_num_1_neg183 = $homo_num_1_neg;
} else {
$allson_noson_0_off0_lcssa = $allson_noson_2_off0;
$son_pos_0_lcssa = $son_pos_1;
$homo_num_1_lcssa = $homo_num_3;
$item_start_next_0_lcssa = $item_start_next_1;
$spl_idx_node_2_lcssa = $spl_idx_node_3;
$homo_num_1_neg_lcssa = $homo_num_1_neg;
break L512;
}
}
if ((label | 0) == 444) {
___assert_func(4408, 893, 7616, 3376);
return 0;
} else if ((label | 0) == 447) {
___assert_func(4408, 896, 7616, 3264);
return 0;
}
} else {
$allson_noson_0_off0_lcssa = 1;
$son_pos_0_lcssa = 0;
$homo_num_1_lcssa = $_;
$item_start_next_0_lcssa = $item_start;
$spl_idx_node_2_lcssa = $23;
$homo_num_1_neg_lcssa = $homo_num_1_neg171;
}
} while (0);
if ($cmp30) {
$add_ptr189 = $son_1st_le0_0 + ($son_pos_0_lcssa << 4) | 0;
HEAP16[$son_1st_le0_0 + ($son_pos_0_lcssa << 4) + 8 >> 1] = $spl_idx_node_2_lcssa;
$homo_idx_num_eq1_191 = $this + 36 | 0;
HEAP32[$son_1st_le0_0 + ($son_pos_0_lcssa << 4) + 4 >> 2] = (HEAP32[$this + 40 >> 2] | 0) + (HEAP32[$homo_idx_num_eq1_191 >> 2] | 0);
HEAP32[$add_ptr189 >> 2] = 0;
HEAP32[$homo_idx_num_eq1_191 >> 2] = (HEAP32[$homo_idx_num_eq1_191 >> 2] | 0) + $homo_num_1_lcssa;
$node_cur_ge1186_0 = 0;
$node_cur_le0185_0 = $add_ptr189;
} else {
$add_ptr199 = $son_1st_ge1_0 + ($son_pos_0_lcssa * 10 | 0) | 0;
HEAP16[$son_1st_ge1_0 + ($son_pos_0_lcssa * 10 | 0) + 4 >> 1] = $spl_idx_node_2_lcssa;
$homo_idx_num_gt1_202 = $this + 40 | 0;
__ZN10ime_pinyin11DictBuilder22set_homo_id_buf_offsetEPNS_10LmaNodeGE1Ej(0, $add_ptr199, (HEAP32[$homo_idx_num_gt1_202 >> 2] | 0) + (HEAP32[$this + 36 >> 2] | 0) | 0);
__ZN10ime_pinyin11DictBuilder14set_son_offsetEPNS_10LmaNodeGE1Ej(0, $add_ptr199, 0);
HEAP32[$homo_idx_num_gt1_202 >> 2] = (HEAP32[$homo_idx_num_gt1_202 >> 2] | 0) + $homo_num_1_lcssa;
$node_cur_ge1186_0 = $add_ptr199;
$node_cur_le0185_0 = 0;
}
if (($homo_num_1_lcssa | 0) != 0) {
$51 = HEAP32[$this + 32 >> 2] | 0;
$52 = HEAP32[$this + 36 >> 2] | 0;
$53 = HEAP32[$this + 40 >> 2] | 0;
do {
if ($cmp30) {
if ($homo_num_1_lcssa >>> 0 < 65536) {
HEAP16[$node_cur_le0185_0 + 12 >> 1] = $homo_num_1_lcssa & 65535;
break;
} else {
___assert_func(4408, 962, 7616, 3376);
return 0;
}
} else {
if ($homo_num_1_lcssa >>> 0 < 256) {
HEAP8[$node_cur_ge1186_0 + 7 | 0] = $homo_num_1_lcssa & 255;
break;
} else {
___assert_func(4408, 965, 7616, 3264);
return 0;
}
}
} while (0);
if (($homo_num_1_lcssa | 0) != 0) {
$add_ptr214_sum = $52 + $homo_num_1_neg_lcssa + $53 | 0;
$homo_pos233_0153 = 0;
do {
HEAP32[$51 + ($add_ptr214_sum + $homo_pos233_0153 << 2) >> 2] = HEAP32[$lemma_arr + (($homo_pos233_0153 + $item_start_next_0_lcssa | 0) * 124 | 0) + 4 >> 2];
$homo_pos233_0153 = $homo_pos233_0153 + 1 | 0;
} while ($homo_pos233_0153 >>> 0 < $homo_num_1_lcssa >>> 0);
}
$arrayidx245 = $this + 92 + ($level << 2) | 0;
if ($homo_num_1_lcssa >>> 0 > (HEAP32[$arrayidx245 >> 2] | 0) >>> 0) {
HEAP32[$arrayidx245 >> 2] = $homo_num_1_lcssa;
}
$arrayidx252 = $this + 284 + ($level << 2) | 0;
HEAP32[$arrayidx252 >> 2] = (HEAP32[$arrayidx252 >> 2] | 0) + $homo_num_1_lcssa;
}
do {
if (($item_end - $item_start_next_0_lcssa | 0) >>> 0 > $homo_num_1_lcssa >>> 0) {
if ($cmp30) {
$next_parent258_0 = $node_cur_le0185_0;
} else {
$next_parent258_0 = $node_cur_ge1186_0;
}
$add263 = $item_start_next_0_lcssa + $homo_num_1_lcssa | 0;
__ZN10ime_pinyin11DictBuilder16construct_subsetEPvPNS_10LemmaEntryEjjj($this, $next_parent258_0, $lemma_arr, $add263, $item_end, $add74) | 0;
$arrayidx267 = $this + 156 + ($level << 2) | 0;
HEAP32[$arrayidx267 >> 2] = (HEAP32[$arrayidx267 >> 2] | 0) + 1;
} else {
if (!$allson_noson_0_off0_lcssa) {
break;
}
$arrayidx271 = $this + 220 + ($level << 2) | 0;
HEAP32[$arrayidx271 >> 2] = (HEAP32[$arrayidx271 >> 2] | 0) + 1;
$arrayidx273 = $this + 252 + ($level << 2) | 0;
HEAP32[$arrayidx273 >> 2] = (HEAP32[$arrayidx273 >> 2] | 0) + $inc12;
}
} while (0);
if (($son_pos_0_lcssa + 1 | 0) == ($inc12 | 0)) {
$retval_0 = 1;
return $retval_0 | 0;
} else {
___assert_func(4408, 1003, 7616, 3144);
return 0;
}
return 0;
}
function __ZN10ime_pinyin12AtomDictBaseC2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = 8368;
return;
}
function __ZN10ime_pinyin8DictTrie12get_lemma_idEj($this, $id_offset) {
$this = $this | 0;
$id_offset = $id_offset | 0;
var $mul = 0, $0 = 0;
$mul = $id_offset * 3 | 0;
$0 = HEAP32[$this + 32 >> 2] | 0;
return HEAPU8[(HEAP32[$this + 32 >> 2] | 0) + $mul | 0] | 0 | (HEAPU8[$0 + ($mul + 1) | 0] | 0 | (HEAPU8[$0 + ($mul + 2) | 0] | 0) << 8) << 8 | 0;
}
function __ZN10ime_pinyin11DictBuilder10stat_printEv($this) {
$this = $this | 0;
var sp = 0;
sp = STACKTOP;
_puts(72) | 0;
_puts(48) | 0;
_printf(2936, (tempInt = STACKTOP, STACKTOP = STACKTOP + 1 | 0, STACKTOP = STACKTOP + 7 >> 3 << 3, HEAP32[tempInt >> 2] = 0, tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 60 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 64 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 68 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 72 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 76 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 80 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 84 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 88 >> 2], tempInt) | 0) | 0;
_puts(40) | 0;
_printf(2552, (tempInt = STACKTOP, STACKTOP = STACKTOP + 1 | 0, STACKTOP = STACKTOP + 7 >> 3 << 3, HEAP32[tempInt >> 2] = 0, tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 92 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 96 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 100 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 104 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 108 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 112 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 116 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 120 >> 2], tempInt) | 0) | 0;
_putchar(10) | 0;
_printf(2408, (tempInt = STACKTOP, STACKTOP = STACKTOP + 1 | 0, STACKTOP = STACKTOP + 7 >> 3 << 3, HEAP32[tempInt >> 2] = 0, tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 124 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 128 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 132 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 136 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 140 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 144 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 148 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 152 >> 2], tempInt) | 0) | 0;
_puts(32) | 0;
_printf(2320, (tempInt = STACKTOP, STACKTOP = STACKTOP + 1 | 0, STACKTOP = STACKTOP + 7 >> 3 << 3, HEAP32[tempInt >> 2] = 0, tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 156 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 160 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 164 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 168 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 172 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 176 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 180 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 184 >> 2], tempInt) | 0) | 0;
_putchar(10) | 0;
_printf(2264, (tempInt = STACKTOP, STACKTOP = STACKTOP + 1 | 0, STACKTOP = STACKTOP + 7 >> 3 << 3, HEAP32[tempInt >> 2] = 0, tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 188 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 192 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 196 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 200 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 204 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 208 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 212 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 216 >> 2], tempInt) | 0) | 0;
_puts(24) | 0;
_printf(2208, (tempInt = STACKTOP, STACKTOP = STACKTOP + 1 | 0, STACKTOP = STACKTOP + 7 >> 3 << 3, HEAP32[tempInt >> 2] = 0, tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 220 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 224 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 228 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 232 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 236 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 240 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 244 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 248 >> 2], tempInt) | 0) | 0;
_puts(16) | 0;
_printf(2080, (tempInt = STACKTOP, STACKTOP = STACKTOP + 1 | 0, STACKTOP = STACKTOP + 7 >> 3 << 3, HEAP32[tempInt >> 2] = 0, tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 252 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 256 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 260 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 264 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 268 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 272 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 276 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 280 >> 2], tempInt) | 0) | 0;
_puts(8) | 0;
_printf(2032, (tempInt = STACKTOP, STACKTOP = STACKTOP + 1 | 0, STACKTOP = STACKTOP + 7 >> 3 << 3, HEAP32[tempInt >> 2] = 0, tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 284 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 288 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 292 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 296 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 300 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 304 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 308 >> 2], tempInt) | 0) | 0;
_printf(2840, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 312 >> 2], tempInt) | 0) | 0;
_putchar(10) | 0;
_printf(1936, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 316 >> 2], tempInt) | 0) | 0;
_printf(1800, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP32[$this + 320 >> 2], tempInt) | 0) | 0;
_printf(1656, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = (HEAP32[$this + 324 >> 2] | 0) + 1, tempInt) | 0) | 0;
STACKTOP = sp;
return;
}
function __ZN10ime_pinyin8DictTrieC2Ev($this) {
$this = $this | 0;
__ZN10ime_pinyin12AtomDictBaseC2Ev($this | 0);
HEAP32[$this >> 2] = 8272;
HEAP32[$this + 8 >> 2] = __ZN10ime_pinyin12SpellingTrie14get_cpinstanceEv() | 0;
HEAP32[$this + 4 >> 2] = 0;
HEAP32[$this + 56 >> 2] = 0;
_memset($this + 12 | 0, 0, 40);
FUNCTION_TABLE_viii[HEAP32[(HEAP32[$this >> 2] | 0) + 20 >> 2] & 15]($this, 0, 1);
return;
}
function __ZN10ime_pinyin8DictTrieD0Ev($this) {
$this = $this | 0;
__ZN10ime_pinyin8DictTrieD2Ev($this);
__ZdlPv($this);
return;
}
function __ZN10ime_pinyin8DictTrieD2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = 8272;
__ZN10ime_pinyin8DictTrie13free_resourceEb($this, 1);
return;
}
function __ZN10ime_pinyin8DictTrie13free_resourceEb($this, $free_dict_list) {
$this = $this | 0;
$free_dict_list = $free_dict_list | 0;
var $root_ = 0, $0 = 0, $splid_le0_index_ = 0, $2 = 0, $nodes_ge1_ = 0, $4 = 0, $dict_list_ = 0, $6 = 0, $parsing_marks_ = 0, $10 = 0, $mile_stones_ = 0, $12 = 0, $14 = 0, $vtable = 0, $vfn = 0, $15 = 0;
$root_ = $this + 12 | 0;
$0 = HEAP32[$root_ >> 2] | 0;
if (($0 | 0) != 0) {
_free($0);
}
HEAP32[$root_ >> 2] = 0;
$splid_le0_index_ = $this + 20 | 0;
$2 = HEAP32[$splid_le0_index_ >> 2] | 0;
if (($2 | 0) != 0) {
_free($2);
}
HEAP32[$splid_le0_index_ >> 2] = 0;
$nodes_ge1_ = $this + 16 | 0;
$4 = HEAP32[$nodes_ge1_ >> 2] | 0;
if (($4 | 0) != 0) {
_free($4);
}
HEAP32[$nodes_ge1_ >> 2] = 0;
if ($free_dict_list) {
$dict_list_ = $this + 4 | 0;
$6 = HEAP32[$dict_list_ >> 2] | 0;
if (($6 | 0) != 0) {
__ZN10ime_pinyin8DictListD2Ev($6);
__ZdlPv($6 | 0);
}
HEAP32[$dict_list_ >> 2] = 0;
}
$parsing_marks_ = $this + 48 | 0;
$10 = HEAP32[$parsing_marks_ >> 2] | 0;
if (($10 | 0) != 0) {
__ZdaPv($10 | 0);
}
HEAP32[$parsing_marks_ >> 2] = 0;
$mile_stones_ = $this + 56 | 0;
$12 = HEAP32[$mile_stones_ >> 2] | 0;
if (($12 | 0) == 0) {
HEAP32[$mile_stones_ >> 2] = 0;
$14 = $this;
$vtable = HEAP32[$14 >> 2] | 0;
$vfn = $vtable + 20 | 0;
$15 = HEAP32[$vfn >> 2] | 0;
FUNCTION_TABLE_viii[$15 & 15]($this, 0, 1);
return;
}
__ZdaPv($12);
HEAP32[$mile_stones_ >> 2] = 0;
$14 = $this;
$vtable = HEAP32[$14 >> 2] | 0;
$vfn = $vtable + 20 | 0;
$15 = HEAP32[$vfn >> 2] | 0;
FUNCTION_TABLE_viii[$15 & 15]($this, 0, 1);
return;
}
function __ZN10ime_pinyin8DictTrie10build_dictEPKcS2_($this, $fn_raw, $fn_validhzs) {
$this = $this | 0;
$fn_raw = $fn_raw | 0;
$fn_validhzs = $fn_validhzs | 0;
var $0 = 0;
$0 = __Znwj(328) | 0;
__ZN10ime_pinyin11DictBuilderC2Ev($0);
__ZN10ime_pinyin8DictTrie13free_resourceEb($this, 1);
return __ZN10ime_pinyin11DictBuilder10build_dictEPKcS2_PNS_8DictTrieE($0, $fn_raw, $fn_validhzs, $this) | 0;
}
function __ZN10ime_pinyin8DictTrie9save_dictEP7__sFILE($this, $fp) {
$this = $this | 0;
$fp = $fp | 0;
var $lma_node_num_le0_ = 0, $lma_node_num_ge1_ = 0, $lma_idx_buf_len_ = 0, $call18 = 0, $call24 = 0, $call30 = 0, $retval_0 = 0;
if (($fp | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lma_node_num_le0_ = $this + 24 | 0;
if ((_fwrite($lma_node_num_le0_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lma_node_num_ge1_ = $this + 28 | 0;
if ((_fwrite($lma_node_num_ge1_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lma_idx_buf_len_ = $this + 36 | 0;
if ((_fwrite($lma_idx_buf_len_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fwrite($this + 44 | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call18 = _fwrite(HEAP32[$this + 12 >> 2] | 0, 16, HEAP32[$lma_node_num_le0_ >> 2] | 0, $fp | 0) | 0;
if (($call18 | 0) != (HEAP32[$lma_node_num_le0_ >> 2] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call24 = _fwrite(HEAP32[$this + 16 >> 2] | 0, 10, HEAP32[$lma_node_num_ge1_ >> 2] | 0, $fp | 0) | 0;
if (($call24 | 0) != (HEAP32[$lma_node_num_ge1_ >> 2] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call30 = _fwrite(HEAP32[$this + 32 >> 2] | 0, 1, HEAP32[$lma_idx_buf_len_ >> 2] | 0, $fp | 0) | 0;
$retval_0 = ($call30 | 0) == (HEAP32[$lma_idx_buf_len_ >> 2] | 0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictTrie9save_dictEPKc($this, $filename) {
$this = $this | 0;
$filename = $filename | 0;
var $dict_list_ = 0, $call = 0, $call6 = 0, $call7 = 0, $retval_0 = 0;
if (($filename | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$this + 12 >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$dict_list_ = $this + 4 | 0;
if ((HEAP32[$dict_list_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
$call6 = __ZN10ime_pinyin5NGram12get_instanceEv() | 0;
$call7 = _fopen($filename | 0, 1648) | 0;
if (($call7 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
do {
if (__ZN10ime_pinyin12SpellingTrie13save_spl_trieEP7__sFILE($call, $call7) | 0) {
if (!(__ZN10ime_pinyin8DictList9save_listEP7__sFILE(HEAP32[$dict_list_ >> 2] | 0, $call7) | 0)) {
break;
}
if (!(__ZN10ime_pinyin8DictTrie9save_dictEP7__sFILE($this, $call7) | 0)) {
break;
}
if (!(__ZN10ime_pinyin5NGram10save_ngramEP7__sFILE($call6, $call7) | 0)) {
break;
}
_fclose($call7 | 0) | 0;
$retval_0 = 1;
return $retval_0 | 0;
}
} while (0);
_fclose($call7 | 0) | 0;
$retval_0 = 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictTrie9load_dictEPKcjj($this, $filename, $start_id, $end_id) {
$this = $this | 0;
$filename = $filename | 0;
$start_id = $start_id | 0;
$end_id = $end_id | 0;
var $call = 0, $call6 = 0, $0 = 0, $dict_list_ = 0, $call12 = 0, $call13 = 0, $retval_0 = 0;
if (!(($filename | 0) != 0 & $end_id >>> 0 > $start_id >>> 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call = _fopen($filename | 0, 1464) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin8DictTrie13free_resourceEb($this, 1);
$call6 = __Znwj(128) | 0;
$0 = $call6;
__ZN10ime_pinyin8DictListC2Ev($0);
$dict_list_ = $this + 4 | 0;
HEAP32[$dict_list_ >> 2] = $0;
if (($call6 | 0) == 0) {
_fclose($call | 0) | 0;
$retval_0 = 0;
return $retval_0 | 0;
}
$call12 = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
$call13 = __ZN10ime_pinyin5NGram12get_instanceEv() | 0;
do {
if (__ZN10ime_pinyin12SpellingTrie13load_spl_trieEP7__sFILE($call12, $call) | 0) {
if (!(__ZN10ime_pinyin8DictList9load_listEP7__sFILE(HEAP32[$dict_list_ >> 2] | 0, $call) | 0)) {
break;
}
if (!(__ZN10ime_pinyin8DictTrie9load_dictEP7__sFILE($this, $call) | 0)) {
break;
}
if (!(__ZN10ime_pinyin5NGram10load_ngramEP7__sFILE($call13, $call) | 0)) {
break;
}
if ((HEAP32[$this + 40 >> 2] | 0) >>> 0 > (1 - $start_id + $end_id | 0) >>> 0) {
break;
}
_fclose($call | 0) | 0;
$retval_0 = 1;
return $retval_0 | 0;
}
} while (0);
__ZN10ime_pinyin8DictTrie13free_resourceEb($this, 1);
_fclose($call | 0) | 0;
$retval_0 = 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictTrie12load_dict_fdEilljj($this, $sys_fd, $start_offset, $length, $start_id, $end_id) {
$this = $this | 0;
$sys_fd = $sys_fd | 0;
$start_offset = $start_offset | 0;
$length = $length | 0;
$start_id = $start_id | 0;
$end_id = $end_id | 0;
var $call = 0, $call13 = 0, $0 = 0, $dict_list_ = 0, $call19 = 0, $call20 = 0, $retval_0 = 0;
if (!(($length | 0) > 0 & ($start_offset | 0) > -1 & $end_id >>> 0 > $start_id >>> 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call = _fdopen($sys_fd | 0, 1464) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fseek($call | 0, $start_offset | 0, 0) | 0) == -1) {
_fclose($call | 0) | 0;
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin8DictTrie13free_resourceEb($this, 1);
$call13 = __Znwj(128) | 0;
$0 = $call13;
__ZN10ime_pinyin8DictListC2Ev($0);
$dict_list_ = $this + 4 | 0;
HEAP32[$dict_list_ >> 2] = $0;
if (($call13 | 0) == 0) {
_fclose($call | 0) | 0;
$retval_0 = 0;
return $retval_0 | 0;
}
$call19 = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
$call20 = __ZN10ime_pinyin5NGram12get_instanceEv() | 0;
do {
if (__ZN10ime_pinyin12SpellingTrie13load_spl_trieEP7__sFILE($call19, $call) | 0) {
if (!(__ZN10ime_pinyin8DictList9load_listEP7__sFILE(HEAP32[$dict_list_ >> 2] | 0, $call) | 0)) {
break;
}
if (!(__ZN10ime_pinyin8DictTrie9load_dictEP7__sFILE($this, $call) | 0)) {
break;
}
if (!(__ZN10ime_pinyin5NGram10load_ngramEP7__sFILE($call20, $call) | 0)) {
break;
}
if ((_ftell($call | 0) | 0) < ($length + $start_offset | 0)) {
break;
}
if ((HEAP32[$this + 40 >> 2] | 0) >>> 0 > (1 - $start_id + $end_id | 0) >>> 0) {
break;
}
_fclose($call | 0) | 0;
$retval_0 = 1;
return $retval_0 | 0;
}
} while (0);
__ZN10ime_pinyin8DictTrie13free_resourceEb($this, 1);
_fclose($call | 0) | 0;
$retval_0 = 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictTrie15fill_lpi_bufferEPNS_10LmaPsbItemEjPNS_10LmaNodeLE0E($this, $lpi_items, $lpi_max, $node) {
$this = $this | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
$node = $node | 0;
var $call = 0, $homo_idx_buf_off = 0, $num_of_homo = 0, $lpi_num_0 = 0, $bf_value = 0, $2 = 0, $inc = 0, $lpi_num_1 = 0, label = 0;
$call = __ZN10ime_pinyin5NGram12get_instanceEv() | 0;
$homo_idx_buf_off = $node + 4 | 0;
$num_of_homo = $node + 12 | 0;
$lpi_num_0 = 0;
while (1) {
if ($lpi_num_0 >>> 0 >= (HEAPU16[$num_of_homo >> 1] | 0) >>> 0) {
$lpi_num_1 = $lpi_num_0;
label = 602;
break;
}
$bf_value = (__ZN10ime_pinyin8DictTrie12get_lemma_idEj($this, (HEAP32[$homo_idx_buf_off >> 2] | 0) + $lpi_num_0 | 0) | 0) & 16777215;
$2 = $lpi_items + ($lpi_num_0 << 3) | 0;
HEAP32[$2 >> 2] = $bf_value | HEAP32[$2 >> 2] & -268435456 | 16777216;
HEAP16[$lpi_items + ($lpi_num_0 << 3) + 4 >> 1] = ~~+__ZN10ime_pinyin5NGram11get_uni_psbEj($call, $bf_value);
$inc = $lpi_num_0 + 1 | 0;
if ($inc >>> 0 < $lpi_max >>> 0) {
$lpi_num_0 = $inc;
} else {
$lpi_num_1 = $inc;
label = 601;
break;
}
}
if ((label | 0) == 602) {
return $lpi_num_1 | 0;
} else if ((label | 0) == 601) {
return $lpi_num_1 | 0;
}
return 0;
}
function __ZN10ime_pinyin8DictTrie9load_dictEP7__sFILE($this, $fp) {
$this = $this | 0;
$fp = $fp | 0;
var $lma_node_num_le0_ = 0, $lma_node_num_ge1_ = 0, $lma_idx_buf_len_ = 0, $top_lmas_num_ = 0, $root_ = 0, $nodes_ge1_ = 0, $lma_idx_buf_ = 0, $call29 = 0, $add = 0, $splid_le0_index_ = 0, $parsing_marks_ = 0, $mile_stones_ = 0, $18 = 0, $call57 = 0, $call64 = 0, $call71 = 0, $i_034 = 0, $last_pos_033_off0 = 0, $last_splid_032 = 0, $36 = 0, $last_pos_0_lcssa = 0, $last_splid_0_lcssa = 0, $conv10624 = 0, $add107 = 0, $conv117 = 0, $splid_030 = 0, $inc = 0, $39 = 0, $_lcssa = 0, $42 = 0, $inc99 = 0, $conv10627 = 0, $splid101_026 = 0, $sub111 = 0, $splid101_0 = 0, $conv106 = 0, $retval_0 = 0, label = 0;
if (($fp | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lma_node_num_le0_ = $this + 24 | 0;
if ((_fread($lma_node_num_le0_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lma_node_num_ge1_ = $this + 28 | 0;
if ((_fread($lma_node_num_ge1_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lma_idx_buf_len_ = $this + 36 | 0;
if ((_fread($lma_idx_buf_len_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$top_lmas_num_ = $this + 44 | 0;
if ((_fread($top_lmas_num_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$top_lmas_num_ >> 2] | 0) >>> 0 >= (HEAP32[$lma_idx_buf_len_ >> 2] | 0) >>> 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin8DictTrie13free_resourceEb($this, 0);
$root_ = $this + 12 | 0;
HEAP32[$root_ >> 2] = _malloc(HEAP32[$lma_node_num_le0_ >> 2] << 4) | 0;
$nodes_ge1_ = $this + 16 | 0;
HEAP32[$nodes_ge1_ >> 2] = _malloc((HEAP32[$lma_node_num_ge1_ >> 2] | 0) * 10 | 0) | 0;
$lma_idx_buf_ = $this + 32 | 0;
HEAP32[$lma_idx_buf_ >> 2] = _malloc(HEAP32[$lma_idx_buf_len_ >> 2] | 0) | 0;
HEAP32[$this + 40 >> 2] = ((HEAP32[$lma_idx_buf_len_ >> 2] | 0) >>> 0) / 3 | 0;
$call29 = __ZN10ime_pinyin12SpellingTrie16get_spelling_numEv(__ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0) | 0;
$add = $call29 + 1 | 0;
if ((HEAP32[$lma_node_num_le0_ >> 2] | 0) >>> 0 > $add >>> 0) {
___assert_func(3680, 196, 4672, 2640);
return 0;
}
$splid_le0_index_ = $this + 20 | 0;
HEAP32[$splid_le0_index_ >> 2] = _malloc($add << 1) | 0;
$parsing_marks_ = $this + 48 | 0;
HEAP32[$parsing_marks_ >> 2] = __Znaj(2400) | 0;
$mile_stones_ = $this + 56 | 0;
HEAP32[$mile_stones_ >> 2] = __Znaj(400) | 0;
FUNCTION_TABLE_viii[HEAP32[(HEAP32[$this >> 2] | 0) + 20 >> 2] & 15]($this, 0, 1);
$18 = HEAP32[$root_ >> 2] | 0;
do {
if (($18 | 0) != 0) {
if ((HEAP32[$nodes_ge1_ >> 2] | 0) == 0) {
break;
}
if ((HEAP32[$lma_idx_buf_ >> 2] | 0) == 0) {
break;
}
if ((HEAP32[$splid_le0_index_ >> 2] | 0) == 0) {
break;
}
if ((HEAP32[$parsing_marks_ >> 2] | 0) == 0) {
break;
}
if ((HEAP32[$mile_stones_ >> 2] | 0) == 0) {
break;
}
$call57 = _fread($18 | 0, 16, HEAP32[$lma_node_num_le0_ >> 2] | 0, $fp | 0) | 0;
if (($call57 | 0) != (HEAP32[$lma_node_num_le0_ >> 2] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call64 = _fread(HEAP32[$nodes_ge1_ >> 2] | 0, 10, HEAP32[$lma_node_num_ge1_ >> 2] | 0, $fp | 0) | 0;
if (($call64 | 0) != (HEAP32[$lma_node_num_ge1_ >> 2] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call71 = _fread(HEAP32[$lma_idx_buf_ >> 2] | 0, 1, HEAP32[$lma_idx_buf_len_ >> 2] | 0, $fp | 0) | 0;
if (($call71 | 0) != (HEAP32[$lma_idx_buf_len_ >> 2] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$lma_node_num_le0_ >> 2] | 0) >>> 0 > 1) {
$last_splid_032 = 30;
$last_pos_033_off0 = 0;
$i_034 = 1;
while (1) {
$36 = HEAP16[(HEAP32[$root_ >> 2] | 0) + ($i_034 << 4) + 8 >> 1] | 0;
if (($last_splid_032 & 65535) < ($36 & 65535)) {
$splid_030 = $last_splid_032;
while (1) {
HEAP16[(HEAP32[$splid_le0_index_ >> 2] | 0) + (($splid_030 & 65535) - 30 << 1) >> 1] = $last_pos_033_off0;
$inc = $splid_030 + 1 & 65535;
$39 = HEAP16[(HEAP32[$root_ >> 2] | 0) + ($i_034 << 4) + 8 >> 1] | 0;
if (($inc & 65535) < ($39 & 65535)) {
$splid_030 = $inc;
} else {
$_lcssa = $39;
break;
}
}
} else {
$_lcssa = $36;
}
HEAP16[(HEAP32[$splid_le0_index_ >> 2] | 0) + (($_lcssa & 65535) - 30 << 1) >> 1] = $i_034 & 65535;
$42 = HEAP16[(HEAP32[$root_ >> 2] | 0) + ($i_034 << 4) + 8 >> 1] | 0;
$inc99 = $i_034 + 1 | 0;
if ($inc99 >>> 0 < (HEAP32[$lma_node_num_le0_ >> 2] | 0) >>> 0) {
$last_splid_032 = $42;
$last_pos_033_off0 = $i_034 & 65535;
$i_034 = $inc99;
} else {
break;
}
}
$last_splid_0_lcssa = $42 + 1 & 65535;
$last_pos_0_lcssa = $i_034;
} else {
$last_splid_0_lcssa = 31;
$last_pos_0_lcssa = 0;
}
$conv10624 = $last_splid_0_lcssa & 65535;
$add107 = $call29 + 31 | 0;
if ($conv10624 >>> 0 >= $add107 >>> 0) {
$retval_0 = 1;
return $retval_0 | 0;
}
$conv117 = $last_pos_0_lcssa + 1 & 65535;
$splid101_026 = $last_splid_0_lcssa;
$conv10627 = $conv10624;
while (1) {
$sub111 = $conv10627 - 30 | 0;
if ($sub111 >>> 0 >= $add >>> 0) {
label = 629;
break;
}
HEAP16[(HEAP32[$splid_le0_index_ >> 2] | 0) + ($sub111 << 1) >> 1] = $conv117;
$splid101_0 = $splid101_026 + 1 & 65535;
$conv106 = $splid101_0 & 65535;
if ($conv106 >>> 0 < $add107 >>> 0) {
$splid101_026 = $splid101_0;
$conv10627 = $conv106;
} else {
$retval_0 = 1;
label = 642;
break;
}
}
if ((label | 0) == 629) {
___assert_func(3680, 238, 4672, 1696);
return 0;
} else if ((label | 0) == 642) {
return $retval_0 | 0;
}
}
} while (0);
__ZN10ime_pinyin8DictTrie13free_resourceEb($this, 0);
$retval_0 = 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictTrie16reset_milestonesEtt($this, $from_step, $from_handle) {
$this = $this | 0;
$from_step = $from_step | 0;
$from_handle = $from_handle | 0;
var $mile_stones_pos_5 = 0;
if ($from_step << 16 >> 16 == 0) {
HEAP16[$this + 52 >> 1] = 0;
HEAP16[$this + 60 >> 1] = 1;
return;
}
if ($from_handle << 16 >> 16 == 0) {
return;
}
$mile_stones_pos_5 = $this + 60 | 0;
if ((HEAPU16[$mile_stones_pos_5 >> 1] | 0) <= ($from_handle & 65535)) {
return;
}
HEAP16[$mile_stones_pos_5 >> 1] = $from_handle;
HEAP16[$this + 52 >> 1] = HEAP16[(HEAP32[$this + 56 >> 2] | 0) + (($from_handle & 65535) << 2) >> 1] | 0;
return;
}
function __ZN10ime_pinyin8DictTrie23get_homo_idx_buf_offsetEPKNS_10LmaNodeGE1E($this, $node) {
$this = $this | 0;
$node = $node | 0;
return (HEAPU8[$node + 9 | 0] | 0) << 16 | (HEAPU16[$node + 2 >> 1] | 0) | 0;
}
function __ZN10ime_pinyin8DictTrie14get_son_offsetEPKNS_10LmaNodeGE1E($this, $node) {
$this = $this | 0;
$node = $node | 0;
return (HEAPU8[$node + 8 | 0] | 0) << 16 | (HEAPU16[$node >> 1] | 0) | 0;
}
function __ZN10ime_pinyin8DictTrie15fill_lpi_bufferEPNS_10LmaPsbItemEjjPNS_10LmaNodeGE1Et($this, $lpi_items, $lpi_max, $homo_buf_off, $node, $lma_len) {
$this = $this | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
$homo_buf_off = $homo_buf_off | 0;
$node = $node | 0;
$lma_len = $lma_len | 0;
var $call = 0, $num_of_homo = 0, $0 = 0, $lpi_num_0 = 0, $bf_value = 0, $2 = 0, $inc = 0, $lpi_num_1 = 0, label = 0;
$call = __ZN10ime_pinyin5NGram12get_instanceEv() | 0;
$num_of_homo = $node + 7 | 0;
$0 = ($lma_len & 65535) << 24 & 251658240;
$lpi_num_0 = 0;
while (1) {
if ($lpi_num_0 >>> 0 >= (HEAPU8[$num_of_homo] | 0) >>> 0) {
$lpi_num_1 = $lpi_num_0;
label = 661;
break;
}
$bf_value = (__ZN10ime_pinyin8DictTrie12get_lemma_idEj($this, $lpi_num_0 + $homo_buf_off | 0) | 0) & 16777215;
$2 = $lpi_items + ($lpi_num_0 << 3) | 0;
HEAP32[$2 >> 2] = $bf_value | $0 | HEAP32[$2 >> 2] & -268435456;
HEAP16[$lpi_items + ($lpi_num_0 << 3) + 4 >> 1] = ~~+__ZN10ime_pinyin5NGram11get_uni_psbEj($call, $bf_value);
$inc = $lpi_num_0 + 1 | 0;
if ($inc >>> 0 < $lpi_max >>> 0) {
$lpi_num_0 = $inc;
} else {
$lpi_num_1 = $inc;
label = 660;
break;
}
}
if ((label | 0) == 660) {
return $lpi_num_1 | 0;
} else if ((label | 0) == 661) {
return $lpi_num_1 | 0;
}
return 0;
}
function __ZN10ime_pinyin8DictTrie11extend_dictEtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj($this, $from_handle, $dep, $lpi_items, $lpi_max, $lpi_num) {
$this = $this | 0;
$from_handle = $from_handle | 0;
$dep = $dep | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
$lpi_num = $lpi_num | 0;
var $0 = 0, $retval_0 = 0;
if (($dep | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$0 = HEAP16[$dep + 80 >> 1] | 0;
if ($from_handle << 16 >> 16 == 0) {
if ($0 << 16 >> 16 != 0) {
___assert_func(3680, 375, 5296, 1152);
return 0;
}
$retval_0 = __ZN10ime_pinyin8DictTrie12extend_dict0EtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj($this, $from_handle, $dep, $lpi_items, $lpi_max, $lpi_num) | 0;
return $retval_0 | 0;
}
if ($0 << 16 >> 16 == 1) {
$retval_0 = __ZN10ime_pinyin8DictTrie12extend_dict1EtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj($this, $from_handle, $dep, $lpi_items, $lpi_max, $lpi_num) | 0;
return $retval_0 | 0;
} else {
$retval_0 = __ZN10ime_pinyin8DictTrie12extend_dict2EtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj($this, $from_handle, $dep, $lpi_items, $lpi_max, $lpi_num) | 0;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8DictTrie12extend_dict0EtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj($this, $from_handle, $dep, $lpi_items, $lpi_max, $lpi_num) {
$this = $this | 0;
$from_handle = $from_handle | 0;
$dep = $dep | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
$lpi_num = $lpi_num | 0;
var $1 = 0, $2 = 0, $3 = 0, $call5 = 0, $root_ = 0, $conv6 = 0, $5 = 0, $conv8 = 0, $conv10 = 0, $add = 0, $conv14 = 0, $son_1st_off = 0, $mile_stones_pos_ = 0, $parsing_marks_pos_ = 0, $parsing_marks_ = 0, $8 = 0, $mile_stones_ = 0, $sub87 = 0, $spl_trie_ = 0, $son_pos_0 = 0, $ret_handle_0 = 0, $10 = 0, $add_ptr = 0, $spl_idx = 0, $11 = 0, $14 = 0, $call44 = 0, $18 = 0, $20 = 0, $26 = 0, $35 = 0, $ret_handle_1 = 0, $ret_handle_2 = 0, label = 0;
if (!(($dep | 0) != 0 & $from_handle << 16 >> 16 == 0)) {
___assert_func(3680, 391, 5168, 976);
return 0;
}
HEAP32[$lpi_num >> 2] = 0;
$1 = HEAP16[$dep + (HEAPU16[$dep + 80 >> 1] << 1) >> 1] | 0;
$2 = HEAP16[$dep + 88 >> 1] | 0;
$3 = HEAP16[$dep + 90 >> 1] | 0;
$call5 = __ZN10ime_pinyin8LpiCache9is_cachedEt(__ZN10ime_pinyin8LpiCache12get_instanceEv() | 0, $1) | 0;
$root_ = $this + 12 | 0;
$conv6 = $2 & 65535;
$5 = HEAP32[$this + 20 >> 2] | 0;
$conv8 = HEAPU16[$5 + ($conv6 - 30 << 1) >> 1] | 0;
$conv10 = $3 & 65535;
$add = $conv10 + $conv6 | 0;
$conv14 = HEAPU16[$5 + ($add - 30 << 1) >> 1] | 0;
$son_1st_off = HEAP32[$root_ >> 2] | 0;
$mile_stones_pos_ = $this + 60 | 0;
$parsing_marks_pos_ = $this + 52 | 0;
$parsing_marks_ = $this + 48 | 0;
$8 = $conv10 << 24;
$mile_stones_ = $this + 56 | 0;
$sub87 = $add - 1 | 0;
$spl_trie_ = $this + 8 | 0;
$ret_handle_0 = 0;
$son_pos_0 = $conv8;
while (1) {
if ($son_pos_0 >>> 0 >= $conv14 >>> 0) {
$ret_handle_2 = $ret_handle_0;
label = 693;
break;
}
if ((HEAP32[$son_1st_off >> 2] | 0) != 1) {
label = 680;
break;
}
$10 = HEAP32[$root_ >> 2] | 0;
$add_ptr = $10 + ($son_pos_0 << 4) | 0;
$spl_idx = $10 + ($son_pos_0 << 4) + 8 | 0;
$11 = HEAP16[$spl_idx >> 1] | 0;
if (!(($11 & 65535) >= ($2 & 65535) & ($11 & 65535 | 0) < ($add | 0))) {
label = 682;
break;
}
do {
if (!$call5) {
if ((HEAP32[$lpi_num >> 2] | 0) >>> 0 >= $lpi_max >>> 0) {
break;
}
if (!(($son_pos_0 | 0) == ($conv8 | 0) | (__ZNK10ime_pinyin12SpellingTrie16is_half_id_yunmuEt(HEAP32[$spl_trie_ >> 2] | 0, $1) | 0) ^ 1)) {
break;
}
$14 = HEAP32[$lpi_num >> 2] | 0;
$call44 = __ZN10ime_pinyin8DictTrie15fill_lpi_bufferEPNS_10LmaPsbItemEjPNS_10LmaNodeLE0E($this, $lpi_items + ($14 << 3) | 0, $lpi_max - $14 | 0, $add_ptr) | 0;
HEAP32[$lpi_num >> 2] = (HEAP32[$lpi_num >> 2] | 0) + $call44;
}
} while (0);
do {
if ((HEAP16[$spl_idx >> 1] | 0) == $2 << 16 >> 16) {
if ((HEAPU16[$mile_stones_pos_ >> 1] | 0) >= 100) {
$ret_handle_1 = $ret_handle_0;
break;
}
$18 = HEAP16[$parsing_marks_pos_ >> 1] | 0;
if (($18 & 65535) >= 600) {
$ret_handle_1 = $ret_handle_0;
break;
}
$20 = (HEAP32[$parsing_marks_ >> 2] | 0) + (($18 & 65535) << 2) | 0;
HEAP32[$20 >> 2] = HEAP32[$20 >> 2] & -16777216 | $son_pos_0 & 16777215;
$26 = (HEAP32[$parsing_marks_ >> 2] | 0) + (HEAPU16[$parsing_marks_pos_ >> 1] << 2) | 0;
HEAP32[$26 >> 2] = HEAP32[$26 >> 2] & 16777215 | $8;
HEAP16[(HEAP32[$mile_stones_ >> 2] | 0) + (HEAPU16[$mile_stones_pos_ >> 1] << 2) >> 1] = HEAP16[$parsing_marks_pos_ >> 1] | 0;
HEAP16[(HEAP32[$mile_stones_ >> 2] | 0) + (HEAPU16[$mile_stones_pos_ >> 1] << 2) + 2 >> 1] = 1;
$35 = HEAP16[$mile_stones_pos_ >> 1] | 0;
HEAP16[$parsing_marks_pos_ >> 1] = (HEAP16[$parsing_marks_pos_ >> 1] | 0) + 1 & 65535;
HEAP16[$mile_stones_pos_ >> 1] = (HEAP16[$mile_stones_pos_ >> 1] | 0) + 1 & 65535;
$ret_handle_1 = $35;
} else {
$ret_handle_1 = $ret_handle_0;
}
} while (0);
if ((HEAPU16[$spl_idx >> 1] | 0) < ($sub87 | 0)) {
$ret_handle_0 = $ret_handle_1;
$son_pos_0 = $son_pos_0 + 1 | 0;
} else {
$ret_handle_2 = $ret_handle_1;
label = 694;
break;
}
}
if ((label | 0) == 680) {
___assert_func(3680, 408, 5168, 824);
return 0;
} else if ((label | 0) == 682) {
___assert_func(3680, 410, 5168, 624);
return 0;
} else if ((label | 0) == 693) {
return $ret_handle_2 | 0;
} else if ((label | 0) == 694) {
return $ret_handle_2 | 0;
}
return 0;
}
function __ZN10ime_pinyin8DictTrie12extend_dict1EtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj($this, $from_handle, $dep, $lpi_items, $lpi_max, $lpi_num) {
$this = $this | 0;
$from_handle = $from_handle | 0;
$dep = $dep | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
$lpi_num = $lpi_num | 0;
var $conv = 0, $mile_stones_pos_ = 0, $1 = 0, $2 = 0, $mile_stones_ = 0, $3 = 0, $mark_num = 0, $mark_start = 0, $parsing_marks_ = 0, $root_ = 0, $lma_node_num_ge1_ = 0, $nodes_ge1_ = 0, $conv37 = 0, $sub60 = 0, $add44 = 0, $parsing_marks_pos_ = 0, $ret_val_045 = 0, $h_pos_044 = 0, $p_mark_sroa_0_0_copyload = 0, $8 = 0, $bf_clear21 = 0, $conv1741 = 0, $ret_val_140 = 0, $ext_pos_039 = 0, $9 = 0, $add_ptr22_sum = 0, $num_of_son = 0, $son_1st_off = 0, $found_start_0 = 0, $found_num_0 = 0, $son_pos_0 = 0, $11 = 0, $13 = 0, $add_ptr34_sum = 0, $add_ptr35 = 0, $spl_idx = 0, $14 = 0, $15 = 0, $call49 = 0, $found_start_2 = 0, $found_num_1 = 0, $20 = 0, $23 = 0, $29 = 0, $ret_val_2 = 0, $inc103 = 0, $conv17 = 0, $ret_val_1_lcssa = 0, $inc106 = 0, $41 = 0, $ret_handle_0 = 0, label = 0;
if (($dep | 0) == 0) {
___assert_func(3680, 450, 5040, 464);
return 0;
}
$conv = $from_handle & 65535;
if ($from_handle << 16 >> 16 == 0) {
___assert_func(3680, 450, 5040, 464);
return 0;
}
$mile_stones_pos_ = $this + 60 | 0;
if ((HEAPU16[$mile_stones_pos_ >> 1] | 0) <= ($from_handle & 65535)) {
___assert_func(3680, 450, 5040, 464);
return 0;
}
$1 = HEAP16[$dep + 88 >> 1] | 0;
$2 = HEAP16[$dep + 90 >> 1] | 0;
$mile_stones_ = $this + 56 | 0;
$3 = HEAP32[$mile_stones_ >> 2] | 0;
$mark_num = $3 + ($conv << 2) + 2 | 0;
if ((HEAP16[$mark_num >> 1] | 0) == 0) {
$ret_handle_0 = 0;
return $ret_handle_0 | 0;
}
$mark_start = $3 + ($conv << 2) | 0;
$parsing_marks_ = $this + 48 | 0;
$root_ = $this + 12 | 0;
$lma_node_num_ge1_ = $this + 28 | 0;
$nodes_ge1_ = $this + 16 | 0;
$conv37 = $1 & 65535;
$sub60 = $conv37 - 1 + ($2 & 65535) | 0;
$add44 = ($2 & 65535) + $conv37 | 0;
$parsing_marks_pos_ = $this + 52 | 0;
$h_pos_044 = 0;
$ret_val_045 = 0;
L852 : while (1) {
$p_mark_sroa_0_0_copyload = HEAP32[(HEAP32[$parsing_marks_ >> 2] | 0) + ((HEAPU16[$mark_start >> 1] | 0) + ($h_pos_044 & 65535) << 2) >> 2] | 0;
$8 = $p_mark_sroa_0_0_copyload >>> 24;
if (($8 | 0) == 0) {
$ret_val_1_lcssa = $ret_val_045;
} else {
$bf_clear21 = $p_mark_sroa_0_0_copyload & 16777215;
$ext_pos_039 = 0;
$ret_val_140 = $ret_val_045;
$conv1741 = 0;
while (1) {
$9 = HEAP32[$root_ >> 2] | 0;
$add_ptr22_sum = $conv1741 + $bf_clear21 | 0;
$num_of_son = $9 + ($add_ptr22_sum << 4) + 10 | 0;
$son_1st_off = $9 + ($add_ptr22_sum << 4) | 0;
$son_pos_0 = 0;
$found_num_0 = 0;
$found_start_0 = 0;
while (1) {
if ($son_pos_0 >>> 0 >= (HEAPU16[$num_of_son >> 1] | 0) >>> 0) {
$ret_val_2 = $ret_val_140;
break;
}
$11 = HEAP32[$son_1st_off >> 2] | 0;
if ($11 >>> 0 > (HEAP32[$lma_node_num_ge1_ >> 2] | 0) >>> 0) {
label = 706;
break L852;
}
$13 = HEAP32[$nodes_ge1_ >> 2] | 0;
$add_ptr34_sum = $11 + $son_pos_0 | 0;
$add_ptr35 = $13 + ($add_ptr34_sum * 10 | 0) | 0;
$spl_idx = $13 + ($add_ptr34_sum * 10 | 0) + 4 | 0;
$14 = HEAP16[$spl_idx >> 1] | 0;
if (($14 & 65535) >= ($1 & 65535) & ($14 & 65535 | 0) < ($add44 | 0)) {
$15 = HEAP32[$lpi_num >> 2] | 0;
if ($15 >>> 0 < $lpi_max >>> 0) {
$call49 = __ZN10ime_pinyin8DictTrie15fill_lpi_bufferEPNS_10LmaPsbItemEjjPNS_10LmaNodeGE1Et($this, $lpi_items + ($15 << 3) | 0, $lpi_max - $15 | 0, __ZN10ime_pinyin8DictTrie23get_homo_idx_buf_offsetEPKNS_10LmaNodeGE1E(0, $add_ptr35) | 0, $add_ptr35, 2) | 0;
HEAP32[$lpi_num >> 2] = (HEAP32[$lpi_num >> 2] | 0) + $call49;
}
$found_num_1 = $found_num_0 + 1 | 0;
$found_start_2 = ($found_num_0 | 0) == 0 ? $son_pos_0 : $found_start_0;
} else {
$found_num_1 = $found_num_0;
$found_start_2 = $found_start_0;
}
if ((HEAPU16[$spl_idx >> 1] | 0) >= ($sub60 | 0)) {
label = 713;
break;
}
if (($son_pos_0 | 0) == ((HEAPU16[$num_of_son >> 1] | 0) - 1 | 0)) {
label = 713;
break;
} else {
$son_pos_0 = $son_pos_0 + 1 | 0;
$found_num_0 = $found_num_1;
$found_start_0 = $found_start_2;
}
}
do {
if ((label | 0) == 713) {
label = 0;
if (($found_num_1 | 0) == 0) {
$ret_val_2 = $ret_val_140;
break;
}
do {
if ((HEAPU16[$mile_stones_pos_ >> 1] | 0) < 100) {
$20 = HEAP16[$parsing_marks_pos_ >> 1] | 0;
if (($20 & 65535) >= 600) {
break;
}
$23 = (HEAP32[$parsing_marks_ >> 2] | 0) + (($20 & 65535) << 2) | 0;
HEAP32[$23 >> 2] = HEAP32[$23 >> 2] & -16777216 | (HEAP32[$son_1st_off >> 2] | 0) + $found_start_2 & 16777215;
$29 = (HEAP32[$parsing_marks_ >> 2] | 0) + (HEAPU16[$parsing_marks_pos_ >> 1] << 2) | 0;
HEAP32[$29 >> 2] = HEAP32[$29 >> 2] & 16777215 | $found_num_1 << 24;
if (($ret_val_140 | 0) == 0) {
HEAP16[(HEAP32[$mile_stones_ >> 2] | 0) + (HEAPU16[$mile_stones_pos_ >> 1] << 2) >> 1] = HEAP16[$parsing_marks_pos_ >> 1] | 0;
}
HEAP16[$parsing_marks_pos_ >> 1] = (HEAP16[$parsing_marks_pos_ >> 1] | 0) + 1 & 65535;
}
} while (0);
$ret_val_2 = $ret_val_140 + 1 | 0;
}
} while (0);
$inc103 = $ext_pos_039 + 1 & 65535;
$conv17 = $inc103 & 65535;
if ($conv17 >>> 0 < $8 >>> 0) {
$ext_pos_039 = $inc103;
$ret_val_140 = $ret_val_2;
$conv1741 = $conv17;
} else {
$ret_val_1_lcssa = $ret_val_2;
break;
}
}
}
$inc106 = $h_pos_044 + 1 & 65535;
if (($inc106 & 65535) < (HEAPU16[$mark_num >> 1] | 0)) {
$h_pos_044 = $inc106;
$ret_val_045 = $ret_val_1_lcssa;
} else {
break;
}
}
if ((label | 0) == 706) {
___assert_func(3680, 472, 5040, 4312);
return 0;
}
if (($ret_val_1_lcssa | 0) == 0) {
$ret_handle_0 = 0;
return $ret_handle_0 | 0;
}
HEAP16[(HEAP32[$mile_stones_ >> 2] | 0) + (HEAPU16[$mile_stones_pos_ >> 1] << 2) + 2 >> 1] = $ret_val_1_lcssa & 65535;
$41 = HEAP16[$mile_stones_pos_ >> 1] | 0;
HEAP16[$mile_stones_pos_ >> 1] = $41 + 1 & 65535;
$ret_handle_0 = $41;
return $ret_handle_0 | 0;
}
function __ZN10ime_pinyin8DictTrie12extend_dict2EtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj($this, $from_handle, $dep, $lpi_items, $lpi_max, $lpi_num) {
$this = $this | 0;
$from_handle = $from_handle | 0;
$dep = $dep | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
$lpi_num = $lpi_num | 0;
var $conv = 0, $mile_stones_pos_ = 0, $1 = 0, $2 = 0, $mile_stones_ = 0, $3 = 0, $mark_num = 0, $mark_start = 0, $parsing_marks_ = 0, $nodes_ge1_ = 0, $conv40 = 0, $sub67 = 0, $add47 = 0, $splids_extended = 0, $parsing_marks_pos_ = 0, $ret_val_046 = 0, $h_pos_045 = 0, $p_mark_sroa_0_0_copyload = 0, $8 = 0, $bf_clear21 = 0, $conv1742 = 0, $ret_val_141 = 0, $ext_pos_040 = 0, $9 = 0, $add_ptr22_sum = 0, $add_ptr24 = 0, $num_of_son = 0, $son_1st_off_l = 0, $son_1st_off_h = 0, $found_start_0 = 0, $found_num_0 = 0, $son_pos_0 = 0, $13 = 0, $add_ptr37_sum = 0, $add_ptr38 = 0, $spl_idx = 0, $14 = 0, $15 = 0, $call51 = 0, $call56 = 0, $found_start_2 = 0, $found_num_1 = 0, $21 = 0, $add85 = 0, $23 = 0, $29 = 0, $ret_val_2 = 0, $inc111 = 0, $conv17 = 0, $ret_val_1_lcssa = 0, $inc114 = 0, $41 = 0, $ret_handle_0 = 0, label = 0;
if (($dep | 0) == 0) {
___assert_func(3680, 528, 4912, 464);
return 0;
}
$conv = $from_handle & 65535;
if ($from_handle << 16 >> 16 == 0) {
___assert_func(3680, 528, 4912, 464);
return 0;
}
$mile_stones_pos_ = $this + 60 | 0;
if ((HEAPU16[$mile_stones_pos_ >> 1] | 0) <= ($from_handle & 65535)) {
___assert_func(3680, 528, 4912, 464);
return 0;
}
$1 = HEAP16[$dep + 88 >> 1] | 0;
$2 = HEAP16[$dep + 90 >> 1] | 0;
$mile_stones_ = $this + 56 | 0;
$3 = HEAP32[$mile_stones_ >> 2] | 0;
$mark_num = $3 + ($conv << 2) + 2 | 0;
if ((HEAP16[$mark_num >> 1] | 0) == 0) {
$ret_handle_0 = 0;
return $ret_handle_0 | 0;
}
$mark_start = $3 + ($conv << 2) | 0;
$parsing_marks_ = $this + 48 | 0;
$nodes_ge1_ = $this + 16 | 0;
$conv40 = $1 & 65535;
$sub67 = $conv40 - 1 + ($2 & 65535) | 0;
$add47 = ($2 & 65535) + $conv40 | 0;
$splids_extended = $dep + 80 | 0;
$parsing_marks_pos_ = $this + 52 | 0;
$h_pos_045 = 0;
$ret_val_046 = 0;
L901 : while (1) {
$p_mark_sroa_0_0_copyload = HEAP32[(HEAP32[$parsing_marks_ >> 2] | 0) + ((HEAPU16[$mark_start >> 1] | 0) + ($h_pos_045 & 65535) << 2) >> 2] | 0;
$8 = $p_mark_sroa_0_0_copyload >>> 24;
if (($8 | 0) == 0) {
$ret_val_1_lcssa = $ret_val_046;
} else {
$bf_clear21 = $p_mark_sroa_0_0_copyload & 16777215;
$ext_pos_040 = 0;
$ret_val_141 = $ret_val_046;
$conv1742 = 0;
while (1) {
$9 = HEAP32[$nodes_ge1_ >> 2] | 0;
$add_ptr22_sum = $conv1742 + $bf_clear21 | 0;
$add_ptr24 = $9 + ($add_ptr22_sum * 10 | 0) | 0;
$num_of_son = $9 + ($add_ptr22_sum * 10 | 0) + 6 | 0;
$son_1st_off_l = $add_ptr24 | 0;
$son_1st_off_h = $9 + ($add_ptr22_sum * 10 | 0) + 8 | 0;
$son_pos_0 = 0;
$found_num_0 = 0;
$found_start_0 = 0;
while (1) {
if ($son_pos_0 >>> 0 >= (HEAPU8[$num_of_son] | 0) >>> 0) {
$ret_val_2 = $ret_val_141;
break;
}
if ((HEAP16[$son_1st_off_l >> 1] | 0) == 0) {
if ((HEAP8[$son_1st_off_h] | 0) == 0) {
label = 743;
break L901;
}
}
$13 = HEAP32[$nodes_ge1_ >> 2] | 0;
$add_ptr37_sum = (__ZN10ime_pinyin8DictTrie14get_son_offsetEPKNS_10LmaNodeGE1E(0, $add_ptr24) | 0) + $son_pos_0 | 0;
$add_ptr38 = $13 + ($add_ptr37_sum * 10 | 0) | 0;
$spl_idx = $13 + ($add_ptr37_sum * 10 | 0) + 4 | 0;
$14 = HEAP16[$spl_idx >> 1] | 0;
if (($14 & 65535) >= ($1 & 65535) & ($14 & 65535 | 0) < ($add47 | 0)) {
$15 = HEAP32[$lpi_num >> 2] | 0;
if ($15 >>> 0 < $lpi_max >>> 0) {
$call51 = __ZN10ime_pinyin8DictTrie23get_homo_idx_buf_offsetEPKNS_10LmaNodeGE1E(0, $add_ptr38) | 0;
$call56 = __ZN10ime_pinyin8DictTrie15fill_lpi_bufferEPNS_10LmaPsbItemEjjPNS_10LmaNodeGE1Et($this, $lpi_items + ($15 << 3) | 0, $lpi_max - $15 | 0, $call51, $add_ptr38, (HEAP16[$splids_extended >> 1] | 0) + 1 & 65535) | 0;
HEAP32[$lpi_num >> 2] = (HEAP32[$lpi_num >> 2] | 0) + $call56;
}
$found_num_1 = $found_num_0 + 1 | 0;
$found_start_2 = ($found_num_0 | 0) == 0 ? $son_pos_0 : $found_start_0;
} else {
$found_num_1 = $found_num_0;
$found_start_2 = $found_start_0;
}
if ((HEAPU16[$spl_idx >> 1] | 0) >= ($sub67 | 0)) {
label = 750;
break;
}
if (($son_pos_0 | 0) == ((HEAPU8[$num_of_son] | 0) - 1 | 0)) {
label = 750;
break;
} else {
$son_pos_0 = $son_pos_0 + 1 | 0;
$found_num_0 = $found_num_1;
$found_start_0 = $found_start_2;
}
}
do {
if ((label | 0) == 750) {
label = 0;
if (($found_num_1 | 0) == 0) {
$ret_val_2 = $ret_val_141;
break;
}
do {
if ((HEAPU16[$mile_stones_pos_ >> 1] | 0) < 100) {
$21 = HEAP16[$parsing_marks_pos_ >> 1] | 0;
if (($21 & 65535) >= 600) {
break;
}
$add85 = (__ZN10ime_pinyin8DictTrie14get_son_offsetEPKNS_10LmaNodeGE1E(0, $add_ptr24) | 0) + $found_start_2 | 0;
$23 = (HEAP32[$parsing_marks_ >> 2] | 0) + (($21 & 65535) << 2) | 0;
HEAP32[$23 >> 2] = HEAP32[$23 >> 2] & -16777216 | $add85 & 16777215;
$29 = (HEAP32[$parsing_marks_ >> 2] | 0) + (HEAPU16[$parsing_marks_pos_ >> 1] << 2) | 0;
HEAP32[$29 >> 2] = HEAP32[$29 >> 2] & 16777215 | $found_num_1 << 24;
if (($ret_val_141 | 0) == 0) {
HEAP16[(HEAP32[$mile_stones_ >> 2] | 0) + (HEAPU16[$mile_stones_pos_ >> 1] << 2) >> 1] = HEAP16[$parsing_marks_pos_ >> 1] | 0;
}
HEAP16[$parsing_marks_pos_ >> 1] = (HEAP16[$parsing_marks_pos_ >> 1] | 0) + 1 & 65535;
}
} while (0);
$ret_val_2 = $ret_val_141 + 1 | 0;
}
} while (0);
$inc111 = $ext_pos_040 + 1 & 65535;
$conv17 = $inc111 & 65535;
if ($conv17 >>> 0 < $8 >>> 0) {
$ext_pos_040 = $inc111;
$ret_val_141 = $ret_val_2;
$conv1742 = $conv17;
} else {
$ret_val_1_lcssa = $ret_val_2;
break;
}
}
}
$inc114 = $h_pos_045 + 1 & 65535;
if (($inc114 & 65535) < (HEAPU16[$mark_num >> 1] | 0)) {
$h_pos_045 = $inc114;
$ret_val_046 = $ret_val_1_lcssa;
} else {
break;
}
}
if ((label | 0) == 743) {
___assert_func(3680, 551, 4912, 4112);
return 0;
}
if (($ret_val_1_lcssa | 0) == 0) {
$ret_handle_0 = 0;
return $ret_handle_0 | 0;
}
HEAP16[(HEAP32[$mile_stones_ >> 2] | 0) + (HEAPU16[$mile_stones_pos_ >> 1] << 2) + 2 >> 1] = $ret_val_1_lcssa & 65535;
$41 = HEAP16[$mile_stones_pos_ >> 1] | 0;
HEAP16[$mile_stones_pos_ >> 1] = $41 + 1 & 65535;
$ret_handle_0 = $41;
return $ret_handle_0 | 0;
}
function __ZN10ime_pinyin8DictTrie10try_extendEPKttj($this, $splids, $splid_num, $id_lemma) {
$this = $this | 0;
$splids = $splids | 0;
$splid_num = $splid_num | 0;
$id_lemma = $id_lemma | 0;
var $str = 0, $4 = 0, $nodes_ge1_52 = 0, $lma_node_num_ge1_ = 0, $nodes_ge1_ = 0, $conv650 = 0, $node_049 = 0, $pos_048 = 0, $node_son_047 = 0, $node_son35_046 = 0, $5 = 0, $6 = 0, $son_1st_off = 0, $arrayidx23 = 0, $son_pos_0 = 0, $node_son_1 = 0, $7 = 0, $9 = 0, $add_ptr19_sum = 0, $add_ptr21 = 0, $node_son_2 = 0, $13 = 0, $14 = 0, $conv41 = 0, $son_1st_off_l = 0, $16 = 0, $arrayidx59 = 0, $son_pos36_0 = 0, $node_son35_1 = 0, $conv38 = 0, $19 = 0, $add_ptr53_sum = 0, $add_ptr55 = 0, $node_son35_2 = 0, $node_son35_3 = 0, $node_son_3 = 0, $node_1_in = 0, $node_1 = 0, $inc76 = 0, $node_0_lcssa = 0, $conv83 = 0, $25 = 0, $26 = 0, $arraydecay = 0, $homo_pos_0 = 0, $call87 = 0, $29 = 0, $conv99 = 0, $homo_pos100_0 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$str = sp | 0;
if ($splid_num << 16 >> 16 == 0 | ($splids | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$4 = (HEAP32[$this + 12 >> 2] | 0) + (HEAPU16[(HEAP32[$this + 20 >> 2] | 0) + ((HEAPU16[$splids >> 1] | 0) - 30 << 1) >> 1] << 4) | 0;
L943 : do {
if (($splid_num & 65535) > 1) {
$nodes_ge1_52 = $this + 16 | 0;
$lma_node_num_ge1_ = $this + 28 | 0;
$nodes_ge1_ = $this + 16 | 0;
$node_son35_046 = 0;
$node_son_047 = 0;
$pos_048 = 1;
$node_049 = $4;
$conv650 = 1;
L945 : while (1) {
if ($pos_048 << 16 >> 16 == 1) {
$5 = $node_049 + 10 | 0;
$6 = HEAP16[$5 >> 1] | 0;
$son_1st_off = $node_049;
$arrayidx23 = $splids + ($conv650 << 1) | 0;
$node_son_1 = $node_son_047;
$son_pos_0 = 0;
while (1) {
if (($son_pos_0 & 65535) >= ($6 & 65535)) {
$node_son_2 = $node_son_1;
break;
}
$7 = HEAP32[$son_1st_off >> 2] | 0;
if ($7 >>> 0 > (HEAP32[$lma_node_num_ge1_ >> 2] | 0) >>> 0) {
label = 775;
break L945;
}
$9 = HEAP32[$nodes_ge1_ >> 2] | 0;
$add_ptr19_sum = $7 + ($son_pos_0 & 65535) | 0;
$add_ptr21 = $9 + ($add_ptr19_sum * 10 | 0) | 0;
if ((HEAP16[$9 + ($add_ptr19_sum * 10 | 0) + 4 >> 1] | 0) == (HEAP16[$arrayidx23 >> 1] | 0)) {
$node_son_2 = $add_ptr21;
break;
} else {
$node_son_1 = $add_ptr21;
$son_pos_0 = $son_pos_0 + 1 & 65535;
}
}
if (($son_pos_0 & 65535) < (HEAPU16[$5 >> 1] | 0)) {
$node_1_in = $node_son_2;
$node_son_3 = $node_son_2;
$node_son35_3 = $node_son35_046;
} else {
$retval_0 = 0;
label = 794;
break;
}
} else {
$13 = $node_049;
$14 = $node_049 + 6 | 0;
$conv41 = HEAPU8[$14] | 0;
$son_1st_off_l = $node_049;
$16 = $node_049 + 8 | 0;
$arrayidx59 = $splids + ($conv650 << 1) | 0;
$node_son35_1 = $node_son35_046;
$son_pos36_0 = 0;
while (1) {
$conv38 = $son_pos36_0 & 65535;
if ($conv38 >>> 0 >= $conv41 >>> 0) {
$node_son35_2 = $node_son35_1;
break;
}
if ((HEAP16[$son_1st_off_l >> 1] | 0) == 0) {
if ((HEAP8[$16] | 0) == 0) {
label = 782;
break L945;
}
}
$19 = HEAP32[$nodes_ge1_52 >> 2] | 0;
$add_ptr53_sum = (__ZN10ime_pinyin8DictTrie14get_son_offsetEPKNS_10LmaNodeGE1E(0, $13) | 0) + $conv38 | 0;
$add_ptr55 = $19 + ($add_ptr53_sum * 10 | 0) | 0;
if ((HEAP16[$19 + ($add_ptr53_sum * 10 | 0) + 4 >> 1] | 0) == (HEAP16[$arrayidx59 >> 1] | 0)) {
$node_son35_2 = $add_ptr55;
break;
} else {
$node_son35_1 = $add_ptr55;
$son_pos36_0 = $son_pos36_0 + 1 & 65535;
}
}
if ($conv38 >>> 0 < (HEAPU8[$14] | 0) >>> 0) {
$node_1_in = $node_son35_2;
$node_son_3 = $node_son_047;
$node_son35_3 = $node_son35_2;
} else {
$retval_0 = 0;
label = 796;
break;
}
}
$node_1 = $node_1_in;
$inc76 = $pos_048 + 1 & 65535;
if (($inc76 & 65535) < ($splid_num & 65535)) {
$node_son35_046 = $node_son35_3;
$node_son_047 = $node_son_3;
$pos_048 = $inc76;
$node_049 = $node_1;
$conv650 = $inc76 & 65535;
} else {
$node_0_lcssa = $node_1;
break L943;
}
}
if ((label | 0) == 796) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 794) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 775) {
___assert_func(3680, 616, 5424, 3944);
return 0;
} else if ((label | 0) == 782) {
___assert_func(3680, 632, 5424, 3704);
return 0;
}
} else {
$node_0_lcssa = $4;
}
} while (0);
if ($splid_num << 16 >> 16 == 1) {
$conv83 = HEAPU16[$node_0_lcssa + 12 >> 1] | 0;
$25 = $node_0_lcssa + 4 | 0;
$26 = $this;
$arraydecay = $str | 0;
$homo_pos_0 = 0;
while (1) {
if ($homo_pos_0 >>> 0 >= $conv83 >>> 0) {
$retval_0 = 0;
label = 797;
break;
}
$call87 = __ZN10ime_pinyin8DictTrie12get_lemma_idEj($this, (HEAP32[$25 >> 2] | 0) + $homo_pos_0 | 0) | 0;
FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$26 >> 2] | 0) + 32 >> 2] & 31]($this, $call87, $arraydecay, 2) | 0;
if (($call87 | 0) == ($id_lemma | 0)) {
$retval_0 = 1;
label = 798;
break;
} else {
$homo_pos_0 = $homo_pos_0 + 1 | 0;
}
}
if ((label | 0) == 797) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 798) {
STACKTOP = sp;
return $retval_0 | 0;
}
} else {
$29 = $node_0_lcssa;
$conv99 = HEAPU8[$node_0_lcssa + 7 | 0] | 0;
$homo_pos100_0 = 0;
while (1) {
if ($homo_pos100_0 >>> 0 >= $conv99 >>> 0) {
$retval_0 = 0;
label = 799;
break;
}
if ((__ZN10ime_pinyin8DictTrie12get_lemma_idEj($this, (__ZN10ime_pinyin8DictTrie23get_homo_idx_buf_offsetEPKNS_10LmaNodeGE1E(0, $29) | 0) + $homo_pos100_0 | 0) | 0) == ($id_lemma | 0)) {
$retval_0 = 1;
label = 800;
break;
} else {
$homo_pos100_0 = $homo_pos100_0 + 1 | 0;
}
}
if ((label | 0) == 799) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 800) {
STACKTOP = sp;
return $retval_0 | 0;
}
}
return 0;
}
function __ZN10ime_pinyin8DictTrie10close_dictEv($this) {
$this = $this | 0;
return 1;
}
function __ZN10ime_pinyin8DictTrie16number_of_lemmasEv($this) {
$this = $this | 0;
return 0;
}
function __ZN10ime_pinyin8DictTrie9put_lemmaEPtS1_tt($this, $lemma_str, $splids, $lemma_len, $count) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
$count = $count | 0;
return 0;
}
function __ZN10ime_pinyin8DictTrie12update_lemmaEjsb($this, $lemma_id, $delta_count, $selected) {
$this = $this | 0;
$lemma_id = $lemma_id | 0;
$delta_count = $delta_count | 0;
$selected = $selected | 0;
return 0;
}
function __ZN10ime_pinyin8DictTrie12get_lemma_idEPtS1_t($this, $lemma_str, $splids, $lemma_len) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
return 0;
}
function __ZN10ime_pinyin8DictTrie15get_lemma_scoreEj($this, $lemma_id) {
$this = $this | 0;
$lemma_id = $lemma_id | 0;
return 0;
}
function __ZN10ime_pinyin8DictTrie15get_lemma_scoreEPtS1_t($this, $lemma_str, $splids, $lemma_len) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
return 0;
}
function __ZN10ime_pinyin8DictTrie12remove_lemmaEj($this, $lemma_id) {
$this = $this | 0;
$lemma_id = $lemma_id | 0;
return 0;
}
function __ZN10ime_pinyin8DictTrie21get_total_lemma_countEv($this) {
$this = $this | 0;
return 0;
}
function __ZN10ime_pinyin8DictTrie11flush_cacheEv($this) {
$this = $this | 0;
return;
}
function __ZN10ime_pinyin12AtomDictBaseD1Ev($this) {
$this = $this | 0;
return;
}
function __ZN10ime_pinyin12MatrixSearch22reset_pointers_to_nullEv($this) {
$this = $this | 0;
HEAP32[$this + 12 >> 2] = 0;
HEAP32[$this + 16 >> 2] = 0;
HEAP32[$this + 20 >> 2] = 0;
HEAP32[$this + 76 >> 2] = 0;
HEAP32[$this + 80 >> 2] = 0;
HEAP32[$this + 88 >> 2] = 0;
HEAP32[$this + 96 >> 2] = 0;
HEAP32[$this + 100 >> 2] = 0;
HEAP32[$this + 104 >> 2] = 0;
return;
}
function __ZN10ime_pinyin8DictTrie13get_lemma_strEjPtt($this, $id_lemma, $str_buf, $str_max) {
$this = $this | 0;
$id_lemma = $id_lemma | 0;
$str_buf = $str_buf | 0;
$str_max = $str_max | 0;
return __ZN10ime_pinyin8DictList13get_lemma_strEjPtt(HEAP32[$this + 4 >> 2] | 0, $id_lemma, $str_buf, $str_max) | 0;
}
function __ZN10ime_pinyin8DictTrie31set_total_lemma_count_of_othersEj($this, $count) {
$this = $this | 0;
$count = $count | 0;
__ZN10ime_pinyin5NGram23set_total_freq_none_sysEj(__ZN10ime_pinyin5NGram12get_instanceEv() | 0, $count);
return;
}
function __ZN10ime_pinyin8DictTrie17convert_to_hanzisEPtt($this, $str, $str_len) {
$this = $this | 0;
$str = $str | 0;
$str_len = $str_len | 0;
__ZN10ime_pinyin8DictList17convert_to_hanzisEPtt(HEAP32[$this + 4 >> 2] | 0, $str, $str_len);
return;
}
function __ZN10ime_pinyin8DictTrie19convert_to_scis_idsEPtt($this, $str, $str_len) {
$this = $this | 0;
$str = $str | 0;
$str_len = $str_len | 0;
__ZN10ime_pinyin8DictList19convert_to_scis_idsEPtt(HEAP32[$this + 4 >> 2] | 0, $str, $str_len);
return;
}
function __ZN10ime_pinyin8DictTrie12get_lemma_idEPKtt($this, $lemma_str, $lemma_len) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$lemma_len = $lemma_len | 0;
var $retval_0 = 0;
if (($lemma_str | 0) == 0 | ($lemma_len & 65535) > 8) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin8DictList12get_lemma_idEPKtt(HEAP32[$this + 4 >> 2] | 0, $lemma_str, $lemma_len) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictTrie16predict_top_lmasEjPNS_12NPredictItemEjj($this, $his_len, $npre_items, $npre_max, $b4_used) {
$this = $this | 0;
$his_len = $his_len | 0;
$npre_items = $npre_items | 0;
$npre_max = $npre_max | 0;
$b4_used = $b4_used | 0;
var $call = 0, $top_lmas_num_ = 0, $sub = 0, $dict_list_ = 0, $conv10 = 0, $arraydecay20 = 0, $_in = 0, $item_num_0_ph18 = 0, $top_lmas_pos_0_ph17 = 0, $2 = 0, $top_lmas_pos_0 = 0, $call4 = 0, $inc = 0, $item_num_0_ph14 = 0, label = 0;
$call = __ZN10ime_pinyin5NGram12get_instanceEv() | 0;
$top_lmas_num_ = $this + 44 | 0;
$sub = (((HEAP32[$this + 36 >> 2] | 0) >>> 0) / 3 | 0) - (HEAP32[$top_lmas_num_ >> 2] | 0) | 0;
$dict_list_ = $this + 4 | 0;
if (($npre_max | 0) == 0) {
$item_num_0_ph14 = 0;
return $item_num_0_ph14 | 0;
}
$conv10 = $his_len & 65535;
$top_lmas_pos_0_ph17 = 0;
$item_num_0_ph18 = 0;
$_in = $npre_items;
$arraydecay20 = $npre_items + 4 | 0;
L1009 : while (1) {
$2 = $_in;
$top_lmas_pos_0 = $top_lmas_pos_0_ph17;
do {
if ($top_lmas_pos_0 >>> 0 >= (HEAP32[$top_lmas_num_ >> 2] | 0) >>> 0) {
$item_num_0_ph14 = $item_num_0_ph18;
label = 829;
break L1009;
}
_memset($2 | 0, 0, 20);
$call4 = __ZN10ime_pinyin8DictTrie12get_lemma_idEj($this, $sub + $top_lmas_pos_0 | 0) | 0;
$top_lmas_pos_0 = $top_lmas_pos_0 + 1 | 0;
} while ((__ZN10ime_pinyin8DictList13get_lemma_strEjPtt(HEAP32[$dict_list_ >> 2] | 0, $call4, $arraydecay20, 7) | 0) << 16 >> 16 == 0);
HEAPF32[$_in >> 2] = +__ZN10ime_pinyin5NGram11get_uni_psbEj($call, $call4);
HEAP16[$npre_items + ($item_num_0_ph18 * 20 | 0) + 18 >> 1] = $conv10;
$inc = $item_num_0_ph18 + 1 | 0;
if ($inc >>> 0 < $npre_max >>> 0) {
$top_lmas_pos_0_ph17 = $top_lmas_pos_0;
$item_num_0_ph18 = $inc;
$_in = $npre_items + ($inc * 20 | 0) | 0;
$arraydecay20 = $npre_items + ($inc * 20 | 0) + 4 | 0;
} else {
$item_num_0_ph14 = $inc;
label = 831;
break;
}
}
if ((label | 0) == 829) {
return $item_num_0_ph14 | 0;
} else if ((label | 0) == 831) {
return $item_num_0_ph14 | 0;
}
return 0;
}
function __ZN10ime_pinyin8DictTrie7predictEPKttPNS_12NPredictItemEjj($this, $last_hzs, $hzs_len, $npre_items, $npre_max, $b4_used) {
$this = $this | 0;
$last_hzs = $last_hzs | 0;
$hzs_len = $hzs_len | 0;
$npre_items = $npre_items | 0;
$npre_max = $npre_max | 0;
$b4_used = $b4_used | 0;
return __ZN10ime_pinyin8DictList7predictEPKttPNS_12NPredictItemEjj(HEAP32[$this + 4 >> 2] | 0, $last_hzs, $hzs_len, $npre_items, $npre_max, $b4_used) | 0;
}
function __ZN10ime_pinyin12AtomDictBaseD0Ev($this) {
$this = $this | 0;
__ZdlPv($this);
return;
}
function __ZN10ime_pinyin12MatrixSearchC2Ev($this) {
$this = $this | 0;
HEAP8[$this | 0] = 0;
HEAP32[$this + 4 >> 2] = __ZN10ime_pinyin12SpellingTrie14get_cpinstanceEv() | 0;
__ZN10ime_pinyin12MatrixSearch22reset_pointers_to_nullEv($this);
HEAP32[$this + 72 >> 2] = 0;
HEAP16[$this + 84 >> 1] = 0;
HEAP16[$this + 92 >> 1] = 0;
HEAP8[$this + 8 | 0] = 1;
HEAP8[$this + 728 | 0] = 0;
HEAP32[$this + 24 >> 2] = 39;
HEAP32[$this + 28 >> 2] = 40;
return;
}
function __ZN10ime_pinyin12MatrixSearchD2Ev($this) {
$this = $this | 0;
__ZN10ime_pinyin12MatrixSearch13free_resourceEv($this);
return;
}
function __ZN10ime_pinyin12MatrixSearch13free_resourceEv($this) {
$this = $this | 0;
var $0 = 0, $3 = 0, $6 = 0, $8 = 0;
$0 = HEAP32[$this + 12 >> 2] | 0;
if (($0 | 0) != 0) {
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$0 >> 2] | 0) + 4 >> 2] & 127]($0);
}
$3 = HEAP32[$this + 16 >> 2] | 0;
if (($3 | 0) != 0) {
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$3 >> 2] | 0) + 4 >> 2] & 127]($3);
}
$6 = HEAP32[$this + 20 >> 2] | 0;
if (($6 | 0) != 0) {
__ZdlPv($6);
}
$8 = HEAP32[$this + 76 >> 2] | 0;
if (($8 | 0) == 0) {
__ZN10ime_pinyin12MatrixSearch22reset_pointers_to_nullEv($this);
return;
}
__ZdaPv($8);
__ZN10ime_pinyin12MatrixSearch22reset_pointers_to_nullEv($this);
return;
}
function __ZN10ime_pinyin8DictTrie8get_lpisEPKttPNS_10LmaPsbItemEj($this, $splid_str, $splid_str_len, $lma_buf, $max_lma_buf) {
$this = $this | 0;
$splid_str = $splid_str | 0;
$splid_str_len = $splid_str_len | 0;
$lma_buf = $lma_buf | 0;
$max_lma_buf = $max_lma_buf | 0;
var $node_buf1 = 0, $id_start = 0, $conv = 0, $root_ = 0, $0 = 0, $spl_trie_ = 0, $splid_le0_index_ = 0, $lma_node_num_ge1_ = 0, $nodes_ge1_ = 0, $nodes_ge1_165 = 0, $node_fr_le0_0_ph203 = 0, $node_to_le0_0_ph202 = 0, $node_fr_ge1_0_ph201 = 0, $node_to_ge1_0_ph200 = 0, $node_fr_num_0_ph199 = 0, $spl_pos_0_ph198 = 0, $node_fr_le0_0195 = 0, $node_to_le0_0194 = 0, $node_to_ge1_0193 = 0, $node_fr_num_0192 = 0, $spl_pos_0191 = 0, $arrayidx9 = 0, $call14 = 0, $id_num_0 = 0, $add191 = 0, $conv177 = 0, $cmp24 = 0, $conv32 = 0, $add = 0, $add66 = 0, $add125 = 0, $conv111 = 0, $node_to_num_1140 = 0, $node_fr_pos_0139 = 0, $8 = 0, $conv28 = 0, $11 = 0, $conv36 = 0, $son_1st_off = 0, $son_pos_0 = 0, $node_to_num_2 = 0, $15 = 0, $spl_idx = 0, $16 = 0, $17 = 0, $node_to_num_3 = 0, $node_to_num_4 = 0, $inc73 = 0, $inc75 = 0, $node_to_num_5134 = 0, $node_fr_pos83_0133 = 0, $21 = 0, $num_of_son = 0, $son_1st_off94 = 0, $son_pos89_0 = 0, $node_to_num_6 = 0, $23 = 0, $25 = 0, $add_ptr101_sum = 0, $add_ptr102 = 0, $spl_idx103 = 0, $26 = 0, $27 = 0, $node_to_num_7 = 0, $node_to_num_8 = 0, $inc134 = 0, $inc136 = 0, $spl_pos_0_ph_be = 0, $node_fr_num_0_ph_be = 0, $node_to_ge1_0_ph_be = 0, $node_to_le0_0_ph_be = 0, $node_fr_le0_0_ph_be = 0, $node_to_num_9145 = 0, $node_fr_pos144_0144 = 0, $31 = 0, $num_of_son152 = 0, $son_1st_off_l = 0, $son_1st_off_h = 0, $son_pos150_0 = 0, $node_to_num_10 = 0, $35 = 0, $add_ptr167_sum = 0, $add_ptr168 = 0, $spl_idx169 = 0, $36 = 0, $37 = 0, $node_to_num_11 = 0, $node_to_num_12 = 0, $inc200 = 0, $inc202 = 0, $spl_pos_2 = 0, $node_to_num_14 = 0, $call215 = 0, $node_to_num_15 = 0, $cmp228 = 0, $sub246 = 0, $42 = 0, $sub278 = 0, $lma_num_0 = 0, $node_pos_0 = 0, $43 = 0, $conv232 = 0, $homo_idx_buf_off = 0, $homo_pos_0 = 0, $add236 = 0, $bf_value = 0, $46 = 0, $51 = 0, $conv256 = 0, $homo_pos257_0 = 0, $add262 = 0, $bf_value267 = 0, $53 = 0, $num_of_homo_0 = 0, $add286 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 1608 | 0;
$node_buf1 = sp | 0;
$id_start = sp + 1600 | 0;
$conv = $splid_str_len & 65535;
if (($splid_str_len & 65535) > 8) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$root_ = $this + 12 | 0;
$0 = HEAP32[$root_ >> 2] | 0;
HEAP32[$node_buf1 >> 2] = $0;
if (($0 | 0) == 0 | $splid_str_len << 16 >> 16 == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$spl_trie_ = $this + 8 | 0;
$splid_le0_index_ = $this + 20 | 0;
$lma_node_num_ge1_ = $this + 28 | 0;
$nodes_ge1_ = $this + 16 | 0;
$nodes_ge1_165 = $this + 16 | 0;
$spl_pos_0_ph198 = 0;
$node_fr_num_0_ph199 = 1;
$node_to_ge1_0_ph200 = 0;
$node_fr_ge1_0_ph201 = 0;
$node_to_le0_0_ph202 = sp + 800 | 0;
$node_fr_le0_0_ph203 = $node_buf1;
L1043 : while (1) {
$spl_pos_0191 = $spl_pos_0_ph198;
$node_fr_num_0192 = $node_fr_num_0_ph199;
$node_to_ge1_0193 = $node_to_ge1_0_ph200;
$node_to_le0_0194 = $node_to_le0_0_ph202;
$node_fr_le0_0195 = $node_fr_le0_0_ph203;
while (1) {
$arrayidx9 = $splid_str + ($spl_pos_0191 << 1) | 0;
HEAP16[$id_start >> 1] = HEAP16[$arrayidx9 >> 1] | 0;
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$spl_trie_ >> 2] | 0, HEAP16[$arrayidx9 >> 1] | 0) | 0) {
$call14 = __ZNK10ime_pinyin12SpellingTrie12half_to_fullEtPt(HEAP32[$spl_trie_ >> 2] | 0, HEAP16[$arrayidx9 >> 1] | 0, $id_start) | 0;
if ($call14 << 16 >> 16 == 0) {
label = 853;
break L1043;
} else {
$id_num_0 = $call14;
}
} else {
$id_num_0 = 1;
}
if (($spl_pos_0191 | 0) == 1) {
label = 859;
break;
} else if (($spl_pos_0191 | 0) != 0) {
label = 855;
break;
}
if (($node_fr_num_0192 | 0) == 0) {
$retval_0 = 0;
label = 920;
break L1043;
}
$cmp24 = ($node_fr_num_0192 | 0) == 1;
$conv32 = $id_num_0 & 65535;
$add = $conv32 - 30 | 0;
$add66 = $conv32 - 1 | 0;
$node_fr_pos_0139 = 0;
$node_to_num_1140 = 0;
while (1) {
$8 = HEAP32[$node_fr_le0_0195 + ($node_fr_pos_0139 << 2) >> 2] | 0;
if (!(($8 | 0) == (HEAP32[$root_ >> 2] | 0) & $cmp24)) {
label = 862;
break L1043;
}
$conv28 = HEAPU16[$id_start >> 1] | 0;
$11 = HEAP32[$splid_le0_index_ >> 2] | 0;
$conv36 = HEAPU16[$11 + ($add + $conv28 << 1) >> 1] | 0;
$son_1st_off = $8 | 0;
$node_to_num_2 = $node_to_num_1140;
$son_pos_0 = HEAPU16[$11 + ($conv28 - 30 << 1) >> 1] | 0;
while (1) {
if ($son_pos_0 >>> 0 >= $conv36 >>> 0) {
$node_to_num_4 = $node_to_num_2;
break;
}
if ((HEAP32[$son_1st_off >> 2] | 0) != 1) {
label = 866;
break L1043;
}
$15 = HEAP32[$root_ >> 2] | 0;
$spl_idx = $15 + ($son_pos_0 << 4) + 8 | 0;
$16 = HEAP16[$spl_idx >> 1] | 0;
$17 = HEAP16[$id_start >> 1] | 0;
if (($16 & 65535) < ($17 & 65535)) {
label = 914;
break L1043;
}
if (($16 & 65535 | 0) >= (($17 & 65535) + $conv32 | 0)) {
label = 915;
break L1043;
}
if ($node_to_num_2 >>> 0 < 200) {
HEAP32[$node_to_le0_0194 + ($node_to_num_2 << 2) >> 2] = $15 + ($son_pos_0 << 4);
$node_to_num_3 = $node_to_num_2 + 1 | 0;
} else {
$node_to_num_3 = $node_to_num_2;
}
if ((HEAPU16[$spl_idx >> 1] | 0) < ($add66 + (HEAPU16[$id_start >> 1] | 0) | 0)) {
$node_to_num_2 = $node_to_num_3;
$son_pos_0 = $son_pos_0 + 1 | 0;
} else {
$node_to_num_4 = $node_to_num_3;
break;
}
}
$inc73 = $node_fr_pos_0139 + 1 | 0;
if ($inc73 >>> 0 < $node_fr_num_0192 >>> 0) {
$node_fr_pos_0139 = $inc73;
$node_to_num_1140 = $node_to_num_4;
} else {
break;
}
}
$inc75 = $spl_pos_0191 + 1 | 0;
if ($inc75 >>> 0 >= $conv >>> 0 | ($node_to_num_4 | 0) == 0) {
$node_to_num_14 = $node_to_num_4;
$spl_pos_2 = $inc75;
label = 899;
break L1043;
}
if ($inc75 >>> 0 < $conv >>> 0) {
$spl_pos_0191 = $inc75;
$node_fr_num_0192 = $node_to_num_4;
$node_to_ge1_0193 = $node_fr_le0_0195;
$node_fr_le0_0195 = $node_to_le0_0194;
$node_to_le0_0194 = 0;
} else {
$retval_0 = 0;
label = 922;
break L1043;
}
}
if ((label | 0) == 855) {
label = 0;
if (($node_fr_num_0192 | 0) == 0) {
$retval_0 = 0;
label = 916;
break;
}
$add191 = ($id_num_0 & 65535) - 1 | 0;
$conv177 = $id_num_0 & 65535;
$node_fr_pos144_0144 = 0;
$node_to_num_9145 = 0;
while (1) {
$31 = HEAP32[$node_fr_ge1_0_ph201 + ($node_fr_pos144_0144 << 2) >> 2] | 0;
$num_of_son152 = $31 + 6 | 0;
$son_1st_off_l = $31 | 0;
$son_1st_off_h = $31 + 8 | 0;
$node_to_num_10 = $node_to_num_9145;
$son_pos150_0 = 0;
while (1) {
if ($son_pos150_0 >>> 0 >= (HEAPU8[$num_of_son152] | 0) >>> 0) {
$node_to_num_12 = $node_to_num_10;
break;
}
if ((HEAP16[$son_1st_off_l >> 1] | 0) == 0) {
if ((HEAP8[$son_1st_off_h] | 0) == 0) {
label = 892;
break L1043;
}
}
$35 = HEAP32[$nodes_ge1_165 >> 2] | 0;
$add_ptr167_sum = (__ZN10ime_pinyin8DictTrie14get_son_offsetEPKNS_10LmaNodeGE1E(0, $31) | 0) + $son_pos150_0 | 0;
$add_ptr168 = $35 + ($add_ptr167_sum * 10 | 0) | 0;
$spl_idx169 = $35 + ($add_ptr167_sum * 10 | 0) + 4 | 0;
$36 = HEAP16[$spl_idx169 >> 1] | 0;
$37 = HEAP16[$id_start >> 1] | 0;
do {
if (($36 & 65535) < ($37 & 65535)) {
$node_to_num_11 = $node_to_num_10;
} else {
if (!(($36 & 65535 | 0) < (($37 & 65535) + $conv177 | 0) & $node_to_num_10 >>> 0 < 200)) {
$node_to_num_11 = $node_to_num_10;
break;
}
HEAP32[$node_to_ge1_0193 + ($node_to_num_10 << 2) >> 2] = $add_ptr168;
$node_to_num_11 = $node_to_num_10 + 1 | 0;
}
} while (0);
if ((HEAPU16[$spl_idx169 >> 1] | 0) < ($add191 + (HEAPU16[$id_start >> 1] | 0) | 0)) {
$node_to_num_10 = $node_to_num_11;
$son_pos150_0 = $son_pos150_0 + 1 | 0;
} else {
$node_to_num_12 = $node_to_num_11;
break;
}
}
$inc200 = $node_fr_pos144_0144 + 1 | 0;
if ($inc200 >>> 0 < $node_fr_num_0192 >>> 0) {
$node_fr_pos144_0144 = $inc200;
$node_to_num_9145 = $node_to_num_12;
} else {
break;
}
}
$inc202 = $spl_pos_0191 + 1 | 0;
if ($inc202 >>> 0 >= $conv >>> 0 | ($node_to_num_12 | 0) == 0) {
$node_to_num_14 = $node_to_num_12;
$spl_pos_2 = $inc202;
label = 899;
break;
} else {
$node_fr_le0_0_ph_be = $node_fr_le0_0195;
$node_to_le0_0_ph_be = $node_to_le0_0194;
$node_to_ge1_0_ph_be = $node_fr_ge1_0_ph201;
$node_fr_num_0_ph_be = $node_to_num_12;
$spl_pos_0_ph_be = $inc202;
}
} else if ((label | 0) == 859) {
label = 0;
if (($node_fr_num_0192 | 0) == 0) {
$retval_0 = 0;
label = 921;
break;
}
$add125 = ($id_num_0 & 65535) - 1 | 0;
$conv111 = $id_num_0 & 65535;
$node_fr_pos83_0133 = 0;
$node_to_num_5134 = 0;
while (1) {
$21 = HEAP32[$node_fr_le0_0195 + ($node_fr_pos83_0133 << 2) >> 2] | 0;
$num_of_son = $21 + 10 | 0;
$son_1st_off94 = $21 | 0;
$node_to_num_6 = $node_to_num_5134;
$son_pos89_0 = 0;
while (1) {
if ($son_pos89_0 >>> 0 >= (HEAPU16[$num_of_son >> 1] | 0) >>> 0) {
$node_to_num_8 = $node_to_num_6;
break;
}
$23 = HEAP32[$son_1st_off94 >> 2] | 0;
if ($23 >>> 0 > (HEAP32[$lma_node_num_ge1_ >> 2] | 0) >>> 0) {
label = 879;
break L1043;
}
$25 = HEAP32[$nodes_ge1_ >> 2] | 0;
$add_ptr101_sum = $23 + $son_pos89_0 | 0;
$add_ptr102 = $25 + ($add_ptr101_sum * 10 | 0) | 0;
$spl_idx103 = $25 + ($add_ptr101_sum * 10 | 0) + 4 | 0;
$26 = HEAP16[$spl_idx103 >> 1] | 0;
$27 = HEAP16[$id_start >> 1] | 0;
do {
if (($26 & 65535) < ($27 & 65535)) {
$node_to_num_7 = $node_to_num_6;
} else {
if (!(($26 & 65535 | 0) < (($27 & 65535) + $conv111 | 0) & $node_to_num_6 >>> 0 < 200)) {
$node_to_num_7 = $node_to_num_6;
break;
}
HEAP32[$node_to_ge1_0193 + ($node_to_num_6 << 2) >> 2] = $add_ptr102;
$node_to_num_7 = $node_to_num_6 + 1 | 0;
}
} while (0);
if ((HEAPU16[$spl_idx103 >> 1] | 0) < ($add125 + (HEAPU16[$id_start >> 1] | 0) | 0)) {
$node_to_num_6 = $node_to_num_7;
$son_pos89_0 = $son_pos89_0 + 1 | 0;
} else {
$node_to_num_8 = $node_to_num_7;
break;
}
}
$inc134 = $node_fr_pos83_0133 + 1 | 0;
if ($inc134 >>> 0 < $node_fr_num_0192 >>> 0) {
$node_fr_pos83_0133 = $inc134;
$node_to_num_5134 = $node_to_num_8;
} else {
break;
}
}
$inc136 = $spl_pos_0191 + 1 | 0;
if ($inc136 >>> 0 >= $conv >>> 0 | ($node_to_num_8 | 0) == 0) {
$node_to_num_14 = $node_to_num_8;
$spl_pos_2 = $inc136;
label = 899;
break;
}
$node_fr_le0_0_ph_be = 0;
$node_to_le0_0_ph_be = 0;
$node_to_ge1_0_ph_be = $node_fr_le0_0195;
$node_fr_num_0_ph_be = $node_to_num_8;
$spl_pos_0_ph_be = $inc136;
}
if ($spl_pos_0_ph_be >>> 0 < $conv >>> 0) {
$spl_pos_0_ph198 = $spl_pos_0_ph_be;
$node_fr_num_0_ph199 = $node_fr_num_0_ph_be;
$node_to_ge1_0_ph200 = $node_to_ge1_0_ph_be;
$node_fr_ge1_0_ph201 = $node_to_ge1_0193;
$node_to_le0_0_ph202 = $node_to_le0_0_ph_be;
$node_fr_le0_0_ph203 = $node_fr_le0_0_ph_be;
} else {
$retval_0 = 0;
label = 919;
break;
}
}
if ((label | 0) == 866) {
___assert_func(3680, 708, 4720, 824);
return 0;
} else if ((label | 0) == 862) {
___assert_func(3680, 703, 4720, 3440);
return 0;
} else if ((label | 0) == 892) {
___assert_func(3680, 768, 4720, 4112);
return 0;
} else if ((label | 0) == 853) {
___assert_func(3680, 696, 4720, 3600);
return 0;
} else if ((label | 0) == 879) {
___assert_func(3680, 737, 4720, 4312);
return 0;
} else if ((label | 0) == 899) {
if (($node_to_num_14 | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$call215 = __ZN10ime_pinyin5NGram12get_instanceEv() | 0;
do {
if ($splid_str_len << 16 >> 16 == 1) {
if (!(__ZNK10ime_pinyin12SpellingTrie16is_half_id_yunmuEt(HEAP32[$this + 8 >> 2] | 0, HEAP16[$splid_str >> 1] | 0) | 0)) {
$node_to_num_15 = $node_to_num_14;
break;
}
$node_to_num_15 = ($node_to_num_14 | 0) != 0 | 0;
} else {
$node_to_num_15 = $node_to_num_14;
}
} while (0);
$cmp228 = $spl_pos_2 >>> 0 < 2;
$sub246 = $max_lma_buf - 1 | 0;
$42 = $conv << 24 & 251658240;
$sub278 = $max_lma_buf - 1 | 0;
$node_pos_0 = 0;
$lma_num_0 = 0;
while (1) {
if ($node_pos_0 >>> 0 >= $node_to_num_15 >>> 0) {
$retval_0 = $lma_num_0;
label = 924;
break;
}
L1117 : do {
if ($cmp228) {
$43 = HEAP32[$node_to_le0_0194 + ($node_pos_0 << 2) >> 2] | 0;
$conv232 = HEAPU16[$43 + 12 >> 1] | 0;
$homo_idx_buf_off = $43 + 4 | 0;
$homo_pos_0 = 0;
while (1) {
if ($homo_pos_0 >>> 0 >= $conv232 >>> 0) {
$num_of_homo_0 = $conv232;
break L1117;
}
$add236 = $homo_pos_0 + $lma_num_0 | 0;
$bf_value = (__ZN10ime_pinyin8DictTrie12get_lemma_idEj($this, (HEAP32[$homo_idx_buf_off >> 2] | 0) + $homo_pos_0 | 0) | 0) & 16777215;
$46 = $lma_buf + ($add236 << 3) | 0;
HEAP32[$46 >> 2] = $bf_value | HEAP32[$46 >> 2] & -268435456 | 16777216;
HEAP16[$lma_buf + ($add236 << 3) + 4 >> 1] = ~~+__ZN10ime_pinyin5NGram11get_uni_psbEj($call215, $bf_value);
if ($add236 >>> 0 < $sub246 >>> 0) {
$homo_pos_0 = $homo_pos_0 + 1 | 0;
} else {
$num_of_homo_0 = $conv232;
break;
}
}
} else {
$51 = HEAP32[$node_to_ge1_0193 + ($node_pos_0 << 2) >> 2] | 0;
$conv256 = HEAPU8[$51 + 7 | 0] | 0;
$homo_pos257_0 = 0;
while (1) {
if ($homo_pos257_0 >>> 0 >= $conv256 >>> 0) {
$num_of_homo_0 = $conv256;
break L1117;
}
$add262 = $homo_pos257_0 + $lma_num_0 | 0;
$bf_value267 = (__ZN10ime_pinyin8DictTrie12get_lemma_idEj($this, (__ZN10ime_pinyin8DictTrie23get_homo_idx_buf_offsetEPKNS_10LmaNodeGE1E(0, $51) | 0) + $homo_pos257_0 | 0) | 0) & 16777215;
$53 = $lma_buf + ($add262 << 3) | 0;
HEAP32[$53 >> 2] = $bf_value267 | $42 | HEAP32[$53 >> 2] & -268435456;
HEAP16[$lma_buf + ($add262 << 3) + 4 >> 1] = ~~+__ZN10ime_pinyin5NGram11get_uni_psbEj($call215, $bf_value267);
if ($add262 >>> 0 < $sub278 >>> 0) {
$homo_pos257_0 = $homo_pos257_0 + 1 | 0;
} else {
$num_of_homo_0 = $conv256;
break;
}
}
}
} while (0);
$add286 = $num_of_homo_0 + $lma_num_0 | 0;
if ($add286 >>> 0 < $max_lma_buf >>> 0) {
$node_pos_0 = $node_pos_0 + 1 | 0;
$lma_num_0 = $add286;
} else {
$retval_0 = $max_lma_buf;
label = 925;
break;
}
}
if ((label | 0) == 924) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 925) {
STACKTOP = sp;
return $retval_0 | 0;
}
} else if ((label | 0) == 914) {
___assert_func(3680, 711, 4720, 3304);
return 0;
} else if ((label | 0) == 915) {
___assert_func(3680, 711, 4720, 3304);
return 0;
} else if ((label | 0) == 916) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 919) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 920) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 921) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 922) {
STACKTOP = sp;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8DictTrie16get_lemma_splidsEjPttb($this, $id_lemma, $splids, $splids_max, $arg_valid) {
$this = $this | 0;
$id_lemma = $id_lemma | 0;
$splids = $splids | 0;
$splids_max = $splids_max | 0;
$arg_valid = $arg_valid | 0;
var $lma_str = 0, $spl_mtrx = 0, $spl_start = 0, $call = 0, $spl_trie_ = 0, $_in43 = 0, $try_num_0_lcssa = 0, $cmp6344 = 0, $conv652 = 0, $pos_051 = 0, $try_num_050 = 0, $arrayidx11 = 0, $cond_off0 = 0, $9 = 0, $call37 = 0, $cand_splids_this_0 = 0, $inc = 0, $phitmp = 0, $try_pos_0 = 0, $conv6147 = 0, $pos59_046 = 0, $mod_045 = 0, $12 = 0, $sub72 = 0, $mul86 = 0, $inc89 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 128 | 0;
$lma_str = sp | 0;
$spl_mtrx = sp + 24 | 0;
$spl_start = sp + 104 | 0;
$call = FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$this >> 2] | 0) + 32 >> 2] & 31]($this, $id_lemma, $lma_str | 0, 9) | 0;
if (!($call << 16 >> 16 == $splids_max << 16 >> 16 | (($call & 65535) > ($splids_max & 65535) | $arg_valid) ^ 1)) {
___assert_func(3680, 861, 4816, 3200);
return 0;
}
HEAP16[$spl_start >> 1] = 0;
L1141 : do {
if ($call << 16 >> 16 == 0) {
$try_num_0_lcssa = 1;
} else {
$spl_trie_ = $this + 8 | 0;
$_in43 = $this + 4 | 0;
$try_num_050 = 1;
$pos_051 = 0;
$conv652 = 0;
while (1) {
do {
if ($arg_valid) {
$arrayidx11 = $splids + ($conv652 << 1) | 0;
if (__ZNK10ime_pinyin12SpellingTrie10is_full_idEt(HEAP32[$spl_trie_ >> 2] | 0, HEAP16[$arrayidx11 >> 1] | 0) | 0) {
HEAP16[$spl_mtrx + ((HEAPU16[$spl_start + ($conv652 << 1) >> 1] | 0) << 1) >> 1] = HEAP16[$arrayidx11 >> 1] | 0;
$cand_splids_this_0 = 1;
break;
} else {
$cond_off0 = HEAP16[$splids + ($conv652 << 1) >> 1] | 0;
label = 935;
break;
}
} else {
$cond_off0 = 0;
label = 935;
}
} while (0);
if ((label | 0) == 935) {
label = 0;
$9 = HEAP16[$spl_start + ($conv652 << 1) >> 1] | 0;
$call37 = __ZN10ime_pinyin8DictList20get_splids_for_hanziEttPtt(HEAP32[$_in43 >> 2] | 0, HEAP16[$lma_str + ($conv652 << 1) >> 1] | 0, $cond_off0, $spl_mtrx + (($9 & 65535) << 1) | 0, 40 - $9 & 65535) | 0;
if ($call37 << 16 >> 16 == 0) {
break;
} else {
$cand_splids_this_0 = $call37;
}
}
HEAP16[$spl_start + ($conv652 + 1 << 1) >> 1] = (HEAP16[$spl_start + ($conv652 << 1) >> 1] | 0) + $cand_splids_this_0 & 65535;
$inc = $pos_051 + 1 & 65535;
$phitmp = (Math_imul($cand_splids_this_0 & 65535, $try_num_050) | 0) & 65535;
if (($inc & 65535) < ($call & 65535)) {
$try_num_050 = $phitmp;
$pos_051 = $inc;
$conv652 = $inc & 65535;
} else {
$try_num_0_lcssa = $phitmp;
break L1141;
}
}
___assert_func(3680, 877, 4816, 3112);
return 0;
}
} while (0);
$cmp6344 = $call << 16 >> 16 == 0;
$try_pos_0 = 0;
while (1) {
if (($try_pos_0 & 65535) >>> 0 >= $try_num_0_lcssa >>> 0) {
$retval_0 = 0;
label = 944;
break;
}
if (!$cmp6344) {
$mod_045 = 1;
$pos59_046 = 0;
$conv6147 = 0;
while (1) {
$12 = HEAP16[$spl_start + ($conv6147 << 1) >> 1] | 0;
$sub72 = (HEAP16[$spl_start + ($conv6147 + 1 << 1) >> 1] | 0) - $12 & 65535;
HEAP16[$splids + ($conv6147 << 1) >> 1] = HEAP16[$spl_mtrx + (((((($try_pos_0 & 65535) / ($mod_045 & 65535) | 0) & 65535) % ($sub72 & 65535) | 0) & 65535) + ($12 & 65535) << 1) >> 1] | 0;
$mul86 = Math_imul($sub72, $mod_045) | 0;
$inc89 = $pos59_046 + 1 & 65535;
if (($inc89 & 65535) < ($call & 65535)) {
$mod_045 = $mul86;
$pos59_046 = $inc89;
$conv6147 = $inc89 & 65535;
} else {
break;
}
}
}
if (__ZN10ime_pinyin8DictTrie10try_extendEPKttj($this, $splids, $call, $id_lemma) | 0) {
$retval_0 = $call;
label = 943;
break;
} else {
$try_pos_0 = $try_pos_0 + 1 & 65535;
}
}
if ((label | 0) == 944) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 943) {
STACKTOP = sp;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin12MatrixSearch12set_max_lensEjj($this, $max_sps_len, $max_hzs_len) {
$this = $this | 0;
$max_sps_len = $max_sps_len | 0;
$max_hzs_len = $max_hzs_len | 0;
if (($max_sps_len | 0) != 0) {
HEAP32[$this + 24 >> 2] = $max_sps_len;
}
if (($max_hzs_len | 0) == 0) {
return;
}
HEAP32[$this + 28 >> 2] = $max_hzs_len;
return;
}
function __ZN10ime_pinyin12MatrixSearch16set_xi_an_switchEb($this, $xi_an_enabled) {
$this = $this | 0;
$xi_an_enabled = $xi_an_enabled | 0;
HEAP8[$this + 8 | 0] = $xi_an_enabled & 1;
return;
}
function __ZN10ime_pinyin12MatrixSearch16get_xi_an_switchEv($this) {
$this = $this | 0;
return (HEAP8[$this + 8 | 0] & 1) != 0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch14alloc_resourceEv($this) {
$this = $this | 0;
var $0 = 0, $dict_trie_ = 0, $call2 = 0, $user_dict_ = 0, $3 = 0, $spl_parser_ = 0, $div = 0, $div10 = 0, $div12 = 0, $add = 0, $add15 = 0, $add16 = 0, $4$0 = 0, $call17 = 0, $share_buf_ = 0, $retval_0 = 0;
__ZN10ime_pinyin12MatrixSearch13free_resourceEv($this);
$0 = __Znwj(64) | 0;
__ZN10ime_pinyin8DictTrieC2Ev($0);
$dict_trie_ = $this + 12 | 0;
HEAP32[$dict_trie_ >> 2] = $0;
$call2 = __Znwj(1132) | 0;
__ZN10ime_pinyin8UserDictC2Ev($call2);
$user_dict_ = $this + 16 | 0;
HEAP32[$user_dict_ >> 2] = $call2;
$3 = __Znwj(4) | 0;
__ZN10ime_pinyin14SpellingParserC2Ev($3);
$spl_parser_ = $this + 20 | 0;
HEAP32[$spl_parser_ >> 2] = $3;
$div = (__ZN10ime_pinyin15align_to_size_tEj(3200) | 0) >>> 2;
$div10 = (__ZN10ime_pinyin15align_to_size_tEj(9600) | 0) >>> 2;
$div12 = (__ZN10ime_pinyin15align_to_size_tEj(480) | 0) >>> 2;
$add = $div10 + $div | 0;
$add15 = $add + $div12 | 0;
$add16 = $add15 + ((__ZN10ime_pinyin15align_to_size_tEj(92) | 0) >>> 2) | 0;
$4$0 = _llvm_umul_with_overflow_i32($add16 | 0, 4) | 0;
$call17 = __Znaj(tempRet0 ? -1 : $4$0) | 0;
$share_buf_ = $this + 76 | 0;
HEAP32[$share_buf_ >> 2] = $call17;
if ((HEAP32[$dict_trie_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$user_dict_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$spl_parser_ >> 2] | 0) == 0 | ($call17 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP32[$this + 80 >> 2] = $call17;
HEAP32[$this + 88 >> 2] = (HEAP32[$share_buf_ >> 2] | 0) + ($div << 2);
HEAP32[$this + 96 >> 2] = (HEAP32[$share_buf_ >> 2] | 0) + ($add << 2);
HEAP32[$this + 100 >> 2] = (HEAP32[$share_buf_ >> 2] | 0) + ($add15 << 2);
HEAP32[$this + 104 >> 2] = HEAP32[$share_buf_ >> 2];
HEAP32[$this + 108 >> 2] = ($add16 << 2 >>> 0) / 20 | 0;
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch4initEPKcS2_($this, $fn_sys_dict, $fn_usr_dict) {
$this = $this | 0;
$fn_sys_dict = $fn_sys_dict | 0;
$fn_usr_dict = $fn_usr_dict | 0;
var $0 = 0, $user_dict_ = 0, $3 = 0, $call10 = 0, $6 = 0, $retval_0 = 0;
if (($fn_sys_dict | 0) == 0 | ($fn_usr_dict | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin12MatrixSearch14alloc_resourceEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$0 = HEAP32[$this + 12 >> 2] | 0;
if (!(FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$0 >> 2] | 0) + 8 >> 2] & 31]($0, $fn_sys_dict, 1, 5e5) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$user_dict_ = $this + 16 | 0;
$3 = HEAP32[$user_dict_ >> 2] | 0;
$call10 = FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$3 >> 2] | 0) + 8 >> 2] & 31]($3, $fn_usr_dict, 500001, 6e5) | 0;
$6 = HEAP32[$user_dict_ >> 2] | 0;
if ($call10) {
FUNCTION_TABLE_vii[HEAP32[(HEAP32[$6 >> 2] | 0) + 72 >> 2] & 15]($6, 1e8);
} else {
if (($6 | 0) != 0) {
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$6 >> 2] | 0) + 4 >> 2] & 127]($6);
}
HEAP32[$user_dict_ >> 2] = 0;
}
__ZN10ime_pinyin12MatrixSearch13reset_search0Ev($this) | 0;
HEAP8[$this | 0] = 1;
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch13reset_search0Ev($this) {
$this = $this | 0;
var $mtrx_nd_pool_used_ = 0, $matrix_ = 0, $6 = 0, $conv10 = 0, $add_ptr = 0, $12 = 0, $17 = 0, $21 = 0, $24 = 0, $retval_0 = 0;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP32[$this + 72 >> 2] = 0;
$mtrx_nd_pool_used_ = $this + 84 | 0;
HEAP16[$mtrx_nd_pool_used_ >> 1] = 0;
HEAP16[$this + 92 >> 1] = 0;
$matrix_ = $this + 96 | 0;
HEAP16[HEAP32[$matrix_ >> 2] >> 1] = HEAP16[$mtrx_nd_pool_used_ >> 1] | 0;
HEAP16[(HEAP32[$matrix_ >> 2] | 0) + 4 >> 1] = 1;
HEAP16[$mtrx_nd_pool_used_ >> 1] = (HEAP16[$mtrx_nd_pool_used_ >> 1] | 0) + 1 & 65535;
$6 = HEAP32[$this + 80 >> 2] | 0;
$conv10 = HEAPU16[HEAP32[$matrix_ >> 2] >> 1] | 0;
$add_ptr = $6 + ($conv10 << 4) | 0;
HEAP32[$add_ptr >> 2] = 0;
HEAPF32[$6 + ($conv10 << 4) + 4 >> 2] = 0.0;
HEAP32[$6 + ($conv10 << 4) + 8 >> 2] = 0;
HEAP16[$6 + ($conv10 << 4) + 14 >> 1] = 0;
HEAP16[$6 + ($conv10 << 4) + 12 >> 1] = -1;
HEAP16[(HEAP32[$matrix_ >> 2] | 0) + 2 >> 1] = 0;
$12 = (HEAP32[$matrix_ >> 2] | 0) + 6 | 0;
HEAP16[$12 >> 1] = HEAP16[$12 >> 1] & -32768;
$17 = (HEAP32[$matrix_ >> 2] | 0) + 6 | 0;
HEAP16[$17 >> 1] = HEAP16[$17 >> 1] | -32768;
HEAP32[(HEAP32[$matrix_ >> 2] | 0) + 8 >> 2] = $add_ptr;
HEAP16[$this + 116 >> 1] = 0;
HEAP32[$this + 356 >> 2] = 0;
HEAP16[$this + 736 >> 1] = 0;
HEAP32[$this + 896 >> 2] = 0;
$21 = HEAP32[$this + 12 >> 2] | 0;
FUNCTION_TABLE_viii[HEAP32[(HEAP32[$21 >> 2] | 0) + 20 >> 2] & 15]($21, 0, 0);
$24 = HEAP32[$this + 16 >> 2] | 0;
if (($24 | 0) == 0) {
$retval_0 = 1;
return $retval_0 | 0;
}
FUNCTION_TABLE_viii[HEAP32[(HEAP32[$24 >> 2] | 0) + 20 >> 2] & 15]($24, 0, 0);
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch7init_fdEillPKc($this, $sys_fd, $start_offset, $length, $fn_usr_dict) {
$this = $this | 0;
$sys_fd = $sys_fd | 0;
$start_offset = $start_offset | 0;
$length = $length | 0;
$fn_usr_dict = $fn_usr_dict | 0;
var $user_dict_ = 0, $1 = 0, $call7 = 0, $4 = 0, $retval_0 = 0;
if (($fn_usr_dict | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin12MatrixSearch14alloc_resourceEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin8DictTrie12load_dict_fdEilljj(HEAP32[$this + 12 >> 2] | 0, $sys_fd, $start_offset, $length, 1, 5e5) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$user_dict_ = $this + 16 | 0;
$1 = HEAP32[$user_dict_ >> 2] | 0;
$call7 = FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$1 >> 2] | 0) + 8 >> 2] & 31]($1, $fn_usr_dict, 500001, 6e5) | 0;
$4 = HEAP32[$user_dict_ >> 2] | 0;
if ($call7) {
FUNCTION_TABLE_vii[HEAP32[(HEAP32[$4 >> 2] | 0) + 72 >> 2] & 15]($4, 1e8);
} else {
if (($4 | 0) != 0) {
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$4 >> 2] | 0) + 4 >> 2] & 127]($4);
}
HEAP32[$user_dict_ >> 2] = 0;
}
__ZN10ime_pinyin12MatrixSearch13reset_search0Ev($this) | 0;
HEAP8[$this | 0] = 1;
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch5closeEv($this) {
$this = $this | 0;
__ZN10ime_pinyin12MatrixSearch11flush_cacheEv($this);
__ZN10ime_pinyin12MatrixSearch13free_resourceEv($this);
HEAP8[$this | 0] = 0;
return;
}
function __ZN10ime_pinyin12MatrixSearch11flush_cacheEv($this) {
$this = $this | 0;
var $0 = 0;
$0 = HEAP32[$this + 16 >> 2] | 0;
if (($0 | 0) == 0) {
return;
}
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$0 >> 2] | 0) + 76 >> 2] & 127]($0);
return;
}
function __ZN10ime_pinyin12MatrixSearch12reset_searchEv($this) {
$this = $this | 0;
var $retval_0 = 0;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch13reset_search0Ev($this) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch10del_in_pysEjj($this, $start, $len) {
$this = $this | 0;
$start = $start | 0;
$len = $len | 0;
var $sub = 0, $start_addr_07 = 0, $arrayidx = 0, $inc = 0, label = 0;
$sub = 40 - $len | 0;
if ($sub >>> 0 > $start >>> 0) {
$start_addr_07 = $start;
} else {
return;
}
while (1) {
$arrayidx = $this + 32 + $start_addr_07 | 0;
if ((HEAP8[$arrayidx] | 0) == 0) {
label = 1022;
break;
}
HEAP8[$arrayidx] = HEAP8[$start_addr_07 + $len + ($this + 32) | 0] | 0;
$inc = $start_addr_07 + 1 | 0;
if ($inc >>> 0 < $sub >>> 0) {
$start_addr_07 = $inc;
} else {
label = 1020;
break;
}
}
if ((label | 0) == 1020) {
return;
} else if ((label | 0) == 1022) {
return;
}
}
function __ZN10ime_pinyin12MatrixSearch8add_charEc($this, $ch) {
$this = $this | 0;
$ch = $ch | 0;
var $retval_0 = 0;
if (!(__ZN10ime_pinyin12MatrixSearch16prepare_add_charEc($this, $ch) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch15add_char_qwertyEv($this) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch6searchEPKcj($this, $py, $py_len) {
$this = $this | 0;
$py = $py | 0;
$py_len = $py_len | 0;
var $_py_len = 0, $pys_decoded_len_ = 0, $2 = 0, $ch_pos_0 = 0, $3 = 0, $add_ptr = 0, $add_ptr21 = 0, $sub = 0, $ch_pos_1 = 0, $spl_id_num_ = 0, $py_len_addr_124 = 0, $retval_0 = 0, label = 0;
if ((HEAP8[$this | 0] & 1) == 0 | ($py | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$_py_len = $py_len >>> 0 > 39 ? 39 : $py_len;
$pys_decoded_len_ = $this + 72 | 0;
$2 = HEAP32[$pys_decoded_len_ >> 2] | 0;
$ch_pos_0 = 0;
while (1) {
if ($ch_pos_0 >>> 0 >= $2 >>> 0) {
break;
}
$3 = HEAP8[$py + $ch_pos_0 | 0] | 0;
if ($3 << 24 >> 24 == 0) {
break;
}
if ($3 << 24 >> 24 == (HEAP8[$this + 32 + $ch_pos_0 | 0] | 0)) {
$ch_pos_0 = $ch_pos_0 + 1 | 0;
} else {
break;
}
}
__ZN10ime_pinyin12MatrixSearch12reset_searchEjbbb($this, $ch_pos_0, ($ch_pos_0 | 0) != (HEAP32[$pys_decoded_len_ >> 2] | 0), 0, 0) | 0;
$add_ptr = $this + 32 + $ch_pos_0 | 0;
$add_ptr21 = $py + $ch_pos_0 | 0;
$sub = $_py_len - $ch_pos_0 | 0;
_memcpy($add_ptr | 0, $add_ptr21 | 0, $sub) | 0;
HEAP8[$this + 32 + $_py_len | 0] = 0;
$ch_pos_1 = $ch_pos_0;
while (1) {
if ((HEAP8[$this + 32 + $ch_pos_1 | 0] | 0) == 0) {
break;
}
if (__ZN10ime_pinyin12MatrixSearch8add_charEc($this, HEAP8[$py + $ch_pos_1 | 0] | 0) | 0) {
$ch_pos_1 = $ch_pos_1 + 1 | 0;
} else {
label = 1036;
break;
}
}
if ((label | 0) == 1036) {
HEAP32[$pys_decoded_len_ >> 2] = $ch_pos_1;
}
__ZN10ime_pinyin12MatrixSearch16get_spl_start_idEv($this);
$spl_id_num_ = $this + 732 | 0;
if ((HEAP32[$spl_id_num_ >> 2] | 0) >>> 0 > 9) {
$py_len_addr_124 = $_py_len;
do {
$py_len_addr_124 = $py_len_addr_124 - 1 | 0;
__ZN10ime_pinyin12MatrixSearch12reset_searchEjbbb($this, $py_len_addr_124, 0, 0, 0) | 0;
HEAP8[$this + 32 + $py_len_addr_124 | 0] = 0;
__ZN10ime_pinyin12MatrixSearch16get_spl_start_idEv($this);
} while ((HEAP32[$spl_id_num_ >> 2] | 0) >>> 0 > 9);
}
__ZN10ime_pinyin12MatrixSearch18prepare_candidatesEv($this);
$retval_0 = $ch_pos_1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch12reset_searchEjbbb($this, $ch_pos, $clear_fixed_this_step, $clear_dmi_this_step, $clear_mtrx_this_step) {
$this = $this | 0;
$ch_pos = $ch_pos | 0;
$clear_fixed_this_step = $clear_fixed_this_step | 0;
$clear_dmi_this_step = $clear_dmi_this_step | 0;
$clear_mtrx_this_step = $clear_mtrx_this_step | 0;
var $pys_decoded_len_ = 0, $cmp6 = 0, $3 = 0, $add = 0, $10 = 0, $dict_handles_to_clear_1 = 0, $16 = 0, $conv40 = 0, $20 = 0, $sub = 0, $matrix_54 = 0, $24 = 0, $31 = 0, $34 = 0, $sub85 = 0, $matrix_86 = 0, $39 = 0, $43 = 0, $fixed_hzs_ = 0, $fixed_ch_pos_0_ph = 0, $matrix_130 = 0, $50 = 0, $fixed_ch_pos_0 = 0, $cmp133 = 0, $fixed_lmas_ = 0, $52 = 0, $conv141114 = 0, $54 = 0, $inc = 0, $conv141 = 0, $conv141_lcssa = 0, $56 = 0, $conv157110 = 0, $58 = 0, $59 = 0, $inc162 = 0, $conv157 = 0, $61 = 0, $_lcssa = 0, $conv157_lcssa = 0, $cmp177 = 0, $or_cond85 = 0, $62 = 0, $dict_handles_to_clear174_0 = 0, $add200 = 0, $69 = 0, $dict_handles_to_clear174_1 = 0, $75 = 0, $conv224 = 0, $79 = 0, $sub241 = 0, $83 = 0, $90 = 0, $93 = 0, $sub276 = 0, $98 = 0, $102 = 0, $conv306105 = 0, $conv306108 = 0, $re_pos_0107 = 0, $inc311 = 0, $conv306 = 0, $arrayidx317 = 0, $sublma_num = 0, $length366 = 0, $conv321104 = 0, $subpos_0103 = 0, $108 = 0, $add329 = 0, $arrayidx332 = 0, $109 = 0, $splpos_0100 = 0, $conv334101 = 0, $dmi_c_phrase_ = 0, $length386 = 0, $c_py_pos_0 = 0, $116 = 0, $idxprom420 = 0, $120 = 0, $retval_0 = 0, label = 0;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$pys_decoded_len_ = $this + 72 | 0;
if ((HEAP32[$pys_decoded_len_ >> 2] | 0) >>> 0 < $ch_pos >>> 0 | $ch_pos >>> 0 > 39) {
$retval_0 = 0;
return $retval_0 | 0;
}
$cmp6 = ($ch_pos | 0) == 0;
if ($cmp6) {
__ZN10ime_pinyin12MatrixSearch13reset_search0Ev($this) | 0;
$retval_0 = 1;
return $retval_0 | 0;
}
do {
if ($clear_dmi_this_step) {
$3 = HEAP32[$this + 96 >> 2] | 0;
if ((HEAP16[$3 + ($ch_pos * 12 | 0) + 6 >> 1] & 32767) == 0) {
HEAP32[$pys_decoded_len_ >> 2] = $ch_pos;
label = 1059;
break;
} else {
$dict_handles_to_clear_1 = (HEAP32[$this + 88 >> 2] | 0) + ((HEAPU16[$3 + ($ch_pos * 12 | 0) + 2 >> 1] | 0) * 12 | 0) | 0;
label = 1055;
break;
}
} else {
if ((HEAP32[$pys_decoded_len_ >> 2] | 0) >>> 0 <= $ch_pos >>> 0 | $clear_dmi_this_step) {
HEAP32[$pys_decoded_len_ >> 2] = $ch_pos;
label = 1060;
break;
}
$add = $ch_pos + 1 | 0;
$10 = HEAP32[$this + 96 >> 2] | 0;
if ((HEAP16[$10 + ($add * 12 | 0) + 6 >> 1] & 32767) == 0) {
label = 1058;
break;
}
$dict_handles_to_clear_1 = (HEAP32[$this + 88 >> 2] | 0) + ((HEAPU16[$10 + ($add * 12 | 0) + 2 >> 1] | 0) * 12 | 0) | 0;
label = 1055;
}
} while (0);
do {
if ((label | 0) == 1055) {
if (($dict_handles_to_clear_1 | 0) == 0) {
label = 1058;
break;
}
$16 = HEAP32[$this + 12 >> 2] | 0;
$conv40 = $ch_pos & 65535;
FUNCTION_TABLE_viii[HEAP32[(HEAP32[$16 >> 2] | 0) + 20 >> 2] & 15]($16, $conv40, HEAP16[$dict_handles_to_clear_1 >> 1] | 0);
$20 = HEAP32[$this + 16 >> 2] | 0;
if (($20 | 0) == 0) {
label = 1058;
break;
}
FUNCTION_TABLE_viii[HEAP32[(HEAP32[$20 >> 2] | 0) + 20 >> 2] & 15]($20, $conv40, HEAP16[$dict_handles_to_clear_1 + 2 >> 1] | 0);
label = 1058;
}
} while (0);
if ((label | 0) == 1058) {
HEAP32[$pys_decoded_len_ >> 2] = $ch_pos;
if ($clear_dmi_this_step) {
label = 1059;
} else {
label = 1060;
}
}
if ((label | 0) == 1059) {
$sub = $ch_pos - 1 | 0;
$matrix_54 = $this + 96 | 0;
$24 = HEAP32[$matrix_54 >> 2] | 0;
HEAP16[$this + 92 >> 1] = (HEAP16[$24 + ($sub * 12 | 0) + 6 >> 1] & 32767) + (HEAP16[$24 + ($sub * 12 | 0) + 2 >> 1] | 0) & 65535;
$31 = (HEAP32[$matrix_54 >> 2] | 0) + ($ch_pos * 12 | 0) + 6 | 0;
HEAP16[$31 >> 1] = HEAP16[$31 >> 1] & -32768;
} else if ((label | 0) == 1060) {
$34 = HEAP32[$this + 96 >> 2] | 0;
HEAP16[$this + 92 >> 1] = (HEAP16[$34 + ($ch_pos * 12 | 0) + 6 >> 1] & 32767) + (HEAP16[$34 + ($ch_pos * 12 | 0) + 2 >> 1] | 0) & 65535;
}
if ($clear_mtrx_this_step) {
$sub85 = $ch_pos - 1 | 0;
$matrix_86 = $this + 96 | 0;
$39 = HEAP32[$matrix_86 >> 2] | 0;
HEAP16[$this + 84 >> 1] = (HEAP16[$39 + ($sub85 * 12 | 0) + 4 >> 1] | 0) + (HEAP16[$39 + ($sub85 * 12 | 0) >> 1] | 0) & 65535;
HEAP16[(HEAP32[$matrix_86 >> 2] | 0) + ($ch_pos * 12 | 0) + 4 >> 1] = 0;
} else {
$43 = HEAP32[$this + 96 >> 2] | 0;
HEAP16[$this + 84 >> 1] = (HEAP16[$43 + ($ch_pos * 12 | 0) + 4 >> 1] | 0) + (HEAP16[$43 + ($ch_pos * 12 | 0) >> 1] | 0) & 65535;
}
$fixed_hzs_ = $this + 896 | 0;
if ((HEAP32[$fixed_hzs_ >> 2] | 0) == 0) {
$retval_0 = 1;
return $retval_0 | 0;
}
do {
if ((HEAP32[$this + 196 >> 2] | 0) == 16777215) {
if ((HEAPU16[$this + 736 + ((HEAPU16[$this + 724 >> 1] | 0) << 1) >> 1] | 0) >>> 0 <= $ch_pos >>> 0) {
break;
}
if ((HEAP32[$fixed_hzs_ >> 2] | 0) == 0) {
$retval_0 = 1;
return $retval_0 | 0;
}
$arrayidx317 = $this + 196 | 0;
if ((HEAP32[$arrayidx317 >> 2] | 0) != 16777215) {
$retval_0 = 1;
return $retval_0 | 0;
}
$sublma_num = $this + 720 | 0;
if ((HEAP32[$sublma_num >> 2] | 0) != 0) {
$length366 = $this + 724 | 0;
$subpos_0103 = 0;
$conv321104 = 0;
do {
$108 = HEAP16[$this + 640 + ($conv321104 << 1) >> 1] | 0;
$add329 = $conv321104 + 1 | 0;
$arrayidx332 = $this + 640 + ($add329 << 1) | 0;
$109 = HEAP16[$arrayidx332 >> 1] | 0;
if (($108 & 65535) < ($109 & 65535)) {
$splpos_0100 = $108;
do {
$conv334101 = $splpos_0100 & 65535;
do {
if ((HEAPU16[$this + 480 + ($conv334101 << 1) >> 1] | 0) >>> 0 <= $ch_pos >>> 0) {
if ((HEAPU16[$this + 480 + ($conv334101 + 1 << 1) >> 1] | 0) >>> 0 <= $ch_pos >>> 0) {
break;
}
HEAP16[$this + 560 + ($conv334101 << 1) >> 1] = 0;
HEAP16[$arrayidx332 >> 1] = $splpos_0100;
HEAP32[$sublma_num >> 2] = $add329;
HEAP16[$length366 >> 1] = $splpos_0100;
if ($splpos_0100 << 16 >> 16 != $108 << 16 >> 16) {
break;
}
HEAP32[$sublma_num >> 2] = $conv321104;
}
} while (0);
$splpos_0100 = $splpos_0100 + 1 & 65535;
} while (($splpos_0100 & 65535) < ($109 & 65535));
}
$subpos_0103 = $subpos_0103 + 1 & 65535;
$conv321104 = $subpos_0103 & 65535;
} while ($conv321104 >>> 0 < (HEAP32[$sublma_num >> 2] | 0) >>> 0);
}
__ZN10ime_pinyin12MatrixSearch13reset_search0Ev($this) | 0;
$dmi_c_phrase_ = $this + 728 | 0;
HEAP8[$dmi_c_phrase_] = 1;
$length386 = $this + 724 | 0;
$c_py_pos_0 = 0;
while (1) {
if (($c_py_pos_0 & 65535) >= (HEAPU16[$this + 736 + ((HEAPU16[$length386 >> 1] | 0) << 1) >> 1] | 0)) {
break;
}
if (__ZN10ime_pinyin12MatrixSearch8add_charEc($this, HEAP8[($c_py_pos_0 & 65535) + ($this + 32) | 0] | 0) | 0) {
$c_py_pos_0 = $c_py_pos_0 + 1 & 65535;
} else {
label = 1112;
break;
}
}
if ((label | 0) == 1112) {
___assert_func(1184, 393, 7224, 1632);
return 0;
}
HEAP8[$dmi_c_phrase_] = 0;
HEAP32[$this + 112 >> 2] = 1;
HEAP32[$this + 356 >> 2] = 1;
HEAP8[$this + 360 | 0] = 0;
$116 = HEAP16[$length386 >> 1] | 0;
HEAP32[$fixed_hzs_ >> 2] = $116 & 65535;
HEAP16[$this + 118 >> 1] = $116;
HEAP32[$arrayidx317 >> 2] = 16777215;
$idxprom420 = HEAPU16[$this + 736 + (HEAP32[$fixed_hzs_ >> 2] << 1) >> 1] | 0;
$120 = HEAP32[$this + 96 >> 2] | 0;
HEAP32[$120 + ($idxprom420 * 12 | 0) + 8 >> 2] = (HEAP32[$this + 80 >> 2] | 0) + ((HEAPU16[$120 + ($idxprom420 * 12 | 0) >> 1] | 0) << 4);
$retval_0 = 1;
return $retval_0 | 0;
}
} while (0);
if ($clear_fixed_this_step) {
$fixed_ch_pos_0_ph = $cmp6 ? 0 : $ch_pos - 1 | 0;
} else {
$fixed_ch_pos_0_ph = $ch_pos;
}
$matrix_130 = $this + 96 | 0;
$50 = HEAP32[$matrix_130 >> 2] | 0;
$fixed_ch_pos_0 = $fixed_ch_pos_0_ph;
while (1) {
$cmp133 = ($fixed_ch_pos_0 | 0) == 0;
if ((HEAP32[$50 + ($fixed_ch_pos_0 * 12 | 0) + 8 >> 2] | 0) != 0 | $cmp133) {
break;
} else {
$fixed_ch_pos_0 = $fixed_ch_pos_0 - 1 | 0;
}
}
$fixed_lmas_ = $this + 356 | 0;
HEAP32[$fixed_lmas_ >> 2] = 0;
HEAP32[$fixed_hzs_ >> 2] = 0;
do {
if (!$cmp133) {
$52 = HEAP32[$fixed_hzs_ >> 2] | 0;
$conv141114 = HEAPU16[$this + 736 + ($52 << 1) >> 1] | 0;
if ($conv141114 >>> 0 < $fixed_ch_pos_0 >>> 0) {
$54 = $52;
while (1) {
$inc = $54 + 1 | 0;
HEAP32[$fixed_hzs_ >> 2] = $inc;
$conv141 = HEAPU16[$this + 736 + ($inc << 1) >> 1] | 0;
if ($conv141 >>> 0 < $fixed_ch_pos_0 >>> 0) {
$54 = $inc;
} else {
$conv141_lcssa = $conv141;
break;
}
}
} else {
$conv141_lcssa = $conv141114;
}
if (($conv141_lcssa | 0) != ($fixed_ch_pos_0 | 0)) {
___assert_func(1184, 308, 7224, 3480);
return 0;
}
$56 = HEAP32[$fixed_lmas_ >> 2] | 0;
$conv157110 = HEAPU16[$this + 116 + ($56 << 1) >> 1] | 0;
$58 = HEAP32[$fixed_hzs_ >> 2] | 0;
if ($conv157110 >>> 0 < $58 >>> 0) {
$59 = $56;
while (1) {
$inc162 = $59 + 1 | 0;
HEAP32[$fixed_lmas_ >> 2] = $inc162;
$conv157 = HEAPU16[$this + 116 + ($inc162 << 1) >> 1] | 0;
$61 = HEAP32[$fixed_hzs_ >> 2] | 0;
if ($conv157 >>> 0 < $61 >>> 0) {
$59 = $inc162;
} else {
$conv157_lcssa = $conv157;
$_lcssa = $61;
break;
}
}
} else {
$conv157_lcssa = $conv157110;
$_lcssa = $58;
}
if (($conv157_lcssa | 0) == ($_lcssa | 0)) {
break;
}
___assert_func(1184, 312, 7224, 2456);
return 0;
}
} while (0);
$cmp177 = ($fixed_ch_pos_0 | 0) == ($ch_pos | 0);
$or_cond85 = $cmp177 & $clear_dmi_this_step;
do {
if ($or_cond85) {
$62 = HEAP32[$matrix_130 >> 2] | 0;
if ((HEAP16[$62 + ($fixed_ch_pos_0 * 12 | 0) + 6 >> 1] & 32767) == 0) {
$dict_handles_to_clear174_0 = 0;
break;
}
$dict_handles_to_clear174_0 = (HEAP32[$this + 88 >> 2] | 0) + ((HEAPU16[$62 + ($fixed_ch_pos_0 * 12 | 0) + 2 >> 1] | 0) * 12 | 0) | 0;
} else {
$dict_handles_to_clear174_0 = 0;
}
} while (0);
do {
if ((HEAP32[$pys_decoded_len_ >> 2] | 0) >>> 0 <= $fixed_ch_pos_0 >>> 0 | $clear_dmi_this_step) {
$dict_handles_to_clear174_1 = $dict_handles_to_clear174_0;
label = 1086;
} else {
$add200 = $fixed_ch_pos_0 + 1 | 0;
$69 = HEAP32[$matrix_130 >> 2] | 0;
if ((HEAP16[$69 + ($add200 * 12 | 0) + 6 >> 1] & 32767) == 0) {
break;
}
$dict_handles_to_clear174_1 = (HEAP32[$this + 88 >> 2] | 0) + ((HEAPU16[$69 + ($add200 * 12 | 0) + 2 >> 1] | 0) * 12 | 0) | 0;
label = 1086;
}
} while (0);
do {
if ((label | 0) == 1086) {
if (($dict_handles_to_clear174_1 | 0) == 0) {
break;
}
$75 = HEAP32[$this + 12 >> 2] | 0;
$conv224 = $fixed_ch_pos_0 & 65535;
FUNCTION_TABLE_viii[HEAP32[(HEAP32[$75 >> 2] | 0) + 20 >> 2] & 15]($75, $conv224, HEAP16[$dict_handles_to_clear174_1 >> 1] | 0);
$79 = HEAP32[$this + 16 >> 2] | 0;
if (($79 | 0) == 0) {
break;
}
FUNCTION_TABLE_viii[HEAP32[(HEAP32[$79 >> 2] | 0) + 20 >> 2] & 15]($79, $conv224, HEAP16[$dict_handles_to_clear174_1 + 2 >> 1] | 0);
}
} while (0);
HEAP32[$pys_decoded_len_ >> 2] = $fixed_ch_pos_0;
if ($or_cond85) {
$sub241 = $fixed_ch_pos_0 - 1 | 0;
$83 = HEAP32[$matrix_130 >> 2] | 0;
HEAP16[$this + 92 >> 1] = (HEAP16[$83 + ($sub241 * 12 | 0) + 6 >> 1] & 32767) + (HEAP16[$83 + ($sub241 * 12 | 0) + 2 >> 1] | 0) & 65535;
$90 = (HEAP32[$matrix_130 >> 2] | 0) + ($fixed_ch_pos_0 * 12 | 0) + 6 | 0;
HEAP16[$90 >> 1] = HEAP16[$90 >> 1] & -32768;
} else {
$93 = HEAP32[$matrix_130 >> 2] | 0;
HEAP16[$this + 92 >> 1] = (HEAP16[$93 + ($fixed_ch_pos_0 * 12 | 0) + 6 >> 1] & 32767) + (HEAP16[$93 + ($fixed_ch_pos_0 * 12 | 0) + 2 >> 1] | 0) & 65535;
}
if ($cmp177 & $clear_mtrx_this_step) {
$sub276 = $fixed_ch_pos_0 - 1 | 0;
$98 = HEAP32[$matrix_130 >> 2] | 0;
HEAP16[$this + 84 >> 1] = (HEAP16[$98 + ($sub276 * 12 | 0) + 4 >> 1] | 0) + (HEAP16[$98 + ($sub276 * 12 | 0) >> 1] | 0) & 65535;
HEAP16[(HEAP32[$matrix_130 >> 2] | 0) + ($fixed_ch_pos_0 * 12 | 0) + 4 >> 1] = 0;
} else {
$102 = HEAP32[$matrix_130 >> 2] | 0;
HEAP16[$this + 84 >> 1] = (HEAP16[$102 + ($fixed_ch_pos_0 * 12 | 0) + 4 >> 1] | 0) + (HEAP16[$102 + ($fixed_ch_pos_0 * 12 | 0) >> 1] | 0) & 65535;
}
$conv306105 = $fixed_ch_pos_0 & 65535;
if ($conv306105 >>> 0 >= $ch_pos >>> 0) {
$retval_0 = 1;
return $retval_0 | 0;
}
$re_pos_0107 = $fixed_ch_pos_0 & 65535;
$conv306108 = $conv306105;
while (1) {
__ZN10ime_pinyin12MatrixSearch8add_charEc($this, HEAP8[$this + 32 + $conv306108 | 0] | 0) | 0;
$inc311 = $re_pos_0107 + 1 & 65535;
$conv306 = $inc311 & 65535;
if ($conv306 >>> 0 < $ch_pos >>> 0) {
$re_pos_0107 = $inc311;
$conv306108 = $conv306;
} else {
$retval_0 = 1;
break;
}
}
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch18prepare_candidatesEv($this) {
$this = $this | 0;
var $sent_len = 0, $fixed_hzs_ = 0, $sub = 0, $lma_size_max_0 = 0, $call = 0, $2 = 0, $lpi_total_ = 0, $lpi_num_full_match_013 = 0, $pfullsent_112 = 0, $lma_size_011 = 0, $4 = 0, $cmp22 = 0, $call23 = 0, $pfullsent_2 = 0, $lpi_num_full_match_1 = 0, $dec = 0, $lpi_num_full_match_0_lcssa = 0, $7 = 0, $8 = 0, $sub38 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 32 | 0;
$sent_len = sp + 24 | 0;
$fixed_hzs_ = $this + 896 | 0;
$sub = (HEAP32[$this + 732 >> 2] | 0) - (HEAP32[$fixed_hzs_ >> 2] | 0) | 0;
$lma_size_max_0 = $sub >>> 0 < 8 ? $sub & 65535 : 8;
$call = __ZN10ime_pinyin12MatrixSearch14get_candidate0EPtjS1_b($this, sp | 0, 9, $sent_len, 1) | 0;
$2 = HEAP16[$sent_len >> 1] | 0;
$lpi_total_ = $this + 12500 | 0;
HEAP32[$lpi_total_ >> 2] = 0;
if ($lma_size_max_0 << 16 >> 16 == 0) {
$lpi_num_full_match_0_lcssa = 0;
$7 = $this + 900 + ($lpi_num_full_match_0_lcssa << 3) | 0;
$8 = HEAP32[$lpi_total_ >> 2] | 0;
$sub38 = $8 - $lpi_num_full_match_0_lcssa | 0;
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E($7, $sub38, 8, 20);
STACKTOP = sp;
return;
}
$lma_size_011 = $lma_size_max_0;
$pfullsent_112 = ($2 & 65535) > 8 ? 0 : $call;
$lpi_num_full_match_013 = 0;
while (1) {
$4 = HEAP32[$lpi_total_ >> 2] | 0;
$cmp22 = $lma_size_011 << 16 >> 16 == $lma_size_max_0 << 16 >> 16;
$call23 = __ZN10ime_pinyin12MatrixSearch8get_lpisEPKtjPNS_10LmaPsbItemEjS2_b($this, $this + 816 + (HEAP32[$fixed_hzs_ >> 2] << 1) | 0, $lma_size_011 & 65535, $this + 900 + ($4 << 3) | 0, 1450 - $4 | 0, $pfullsent_112, $cmp22) | 0;
if (($call23 | 0) == 0) {
$pfullsent_2 = $pfullsent_112;
} else {
HEAP32[$lpi_total_ >> 2] = (HEAP32[$lpi_total_ >> 2] | 0) + $call23;
$pfullsent_2 = 0;
}
if ($cmp22) {
$lpi_num_full_match_1 = HEAP32[$lpi_total_ >> 2] | 0;
} else {
$lpi_num_full_match_1 = $lpi_num_full_match_013;
}
$dec = $lma_size_011 - 1 & 65535;
if ($dec << 16 >> 16 == 0) {
$lpi_num_full_match_0_lcssa = $lpi_num_full_match_1;
break;
} else {
$lma_size_011 = $dec;
$pfullsent_112 = $pfullsent_2;
$lpi_num_full_match_013 = $lpi_num_full_match_1;
}
}
$7 = $this + 900 + ($lpi_num_full_match_0_lcssa << 3) | 0;
$8 = HEAP32[$lpi_total_ >> 2] | 0;
$sub38 = $8 - $lpi_num_full_match_0_lcssa | 0;
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E($7, $sub38, 8, 20);
STACKTOP = sp;
return;
}
function __ZN10ime_pinyin12MatrixSearch16get_spl_start_idEv($this) {
$this = $this | 0;
var $lma_id_num_ = 0, $spl_id_num_ = 0, $pys_decoded_len_ = 0, $2 = 0, $matrix_ = 0, $fixed_lmas_ = 0, $fixed_hzs_ = 0, $mtrx_nd_pool_ = 0, $add_ptr = 0, $dmi_pool_ = 0, $dmi_pool_41 = 0, $mtrx_nd_093 = 0, $12 = 0, $15 = 0, $phitmp = 0, $step37 = 0, $conv3491_in = 0, $conv3491 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $pos_087 = 0, $sub83 = 0, $add84 = 0, $43 = 0, $44 = 0, $arrayidx96 = 0, $xor55 = 0, $arrayidx108 = 0, $arrayidx134 = 0, $xor13658 = 0, $arrayidx147 = 0, $65 = 0, $66 = 0, $_lcssa = 0, $pos264_066 = 0, $67 = 0, $68 = 0, $69 = 0, $pos166_078 = 0, $sub181 = 0, $add188 = 0, $70 = 0, $71 = 0, $arrayidx200 = 0, $xor20252 = 0, $arrayidx213 = 0, $arrayidx238 = 0, $xor239 = 0, $arrayidx248 = 0, $92 = 0, $pos264_069 = 0, $pos264_0_in68 = 0, $93 = 0, $arrayidx279 = 0, $94 = 0, $storemerge = 0, $pos264_0 = 0, $98 = 0, $pos311_0 = 0, label = 0;
$lma_id_num_ = $this + 112 | 0;
HEAP32[$lma_id_num_ >> 2] = 0;
HEAP16[$this + 116 >> 1] = 0;
$spl_id_num_ = $this + 732 | 0;
HEAP32[$spl_id_num_ >> 2] = 0;
HEAP16[$this + 736 >> 1] = 0;
if ((HEAP8[$this | 0] & 1) == 0) {
return;
}
$pys_decoded_len_ = $this + 72 | 0;
$2 = HEAP32[$pys_decoded_len_ >> 2] | 0;
if (($2 | 0) == 0) {
return;
}
$matrix_ = $this + 96 | 0;
if ((HEAP16[(HEAP32[$matrix_ >> 2] | 0) + ($2 * 12 | 0) + 4 >> 1] | 0) == 0) {
return;
}
$fixed_lmas_ = $this + 356 | 0;
HEAP32[$lma_id_num_ >> 2] = HEAP32[$fixed_lmas_ >> 2];
$fixed_hzs_ = $this + 896 | 0;
HEAP32[$spl_id_num_ >> 2] = HEAP32[$fixed_hzs_ >> 2];
$mtrx_nd_pool_ = $this + 80 | 0;
$add_ptr = (HEAP32[$mtrx_nd_pool_ >> 2] | 0) + (HEAPU16[(HEAP32[$matrix_ >> 2] | 0) + ((HEAP32[$pys_decoded_len_ >> 2] | 0) * 12 | 0) >> 1] << 4) | 0;
L1417 : do {
if (($add_ptr | 0) != (HEAP32[$mtrx_nd_pool_ >> 2] | 0)) {
$dmi_pool_ = $this + 88 | 0;
$dmi_pool_41 = $this + 88 | 0;
$mtrx_nd_093 = $add_ptr;
do {
$12 = HEAP32[$fixed_hzs_ >> 2] | 0;
if (($12 | 0) != 0) {
if ((HEAPU16[$mtrx_nd_093 + 14 >> 1] | 0) <= (HEAPU16[$this + 736 + ($12 << 1) >> 1] | 0)) {
break L1417;
}
}
$15 = HEAP16[$mtrx_nd_093 + 12 >> 1] | 0;
if ($15 << 16 >> 16 != -1) {
$phitmp = (HEAPU8[(HEAP32[$dmi_pool_ >> 2] | 0) + (($15 & 65535) * 12 | 0) + 9 | 0] | 0) >>> 1 & 255;
$step37 = $mtrx_nd_093 + 14 | 0;
$conv3491_in = $15;
do {
$conv3491 = $conv3491_in & 65535;
HEAP16[$this + 736 + ((HEAP32[$spl_id_num_ >> 2] | 0) + 1 << 1) >> 1] = ((HEAP16[$step37 >> 1] | 0) - $phitmp & 65535) + ((HEAPU8[(HEAP32[$dmi_pool_41 >> 2] | 0) + ($conv3491 * 12 | 0) + 9 | 0] | 0) >>> 1 & 255) & 65535;
HEAP16[$this + 816 + (HEAP32[$spl_id_num_ >> 2] << 1) >> 1] = HEAP16[(HEAP32[$dmi_pool_41 >> 2] | 0) + ($conv3491 * 12 | 0) + 6 >> 1] | 0;
HEAP32[$spl_id_num_ >> 2] = (HEAP32[$spl_id_num_ >> 2] | 0) + 1;
$conv3491_in = HEAP16[(HEAP32[$dmi_pool_41 >> 2] | 0) + ($conv3491 * 12 | 0) + 4 >> 1] | 0;
} while ($conv3491_in << 16 >> 16 != -1);
}
HEAP16[$this + 116 + ((HEAP32[$lma_id_num_ >> 2] | 0) + 1 << 1) >> 1] = HEAP32[$spl_id_num_ >> 2] & 65535;
HEAP32[$this + 196 + (HEAP32[$lma_id_num_ >> 2] << 2) >> 2] = HEAP32[$mtrx_nd_093 >> 2];
HEAP32[$lma_id_num_ >> 2] = (HEAP32[$lma_id_num_ >> 2] | 0) + 1;
$mtrx_nd_093 = HEAP32[$mtrx_nd_093 + 8 >> 2] | 0;
} while (($mtrx_nd_093 | 0) != (HEAP32[$mtrx_nd_pool_ >> 2] | 0));
}
} while (0);
$39 = HEAP32[$fixed_hzs_ >> 2] | 0;
$40 = HEAP32[$spl_id_num_ >> 2] | 0;
if ($39 >>> 0 < (((1 - $39 + $40 | 0) >>> 1) + $39 | 0) >>> 0) {
$pos_087 = $39;
$42 = $39;
$41 = $40;
while (1) {
$sub83 = $42 - $pos_087 + $41 | 0;
$add84 = $pos_087 + 1 | 0;
if (($sub83 | 0) != ($add84 | 0)) {
$arrayidx96 = $this + 736 + ($add84 << 1) | 0;
$xor55 = HEAP16[$arrayidx96 >> 1] ^ HEAP16[$this + 736 + ($sub83 << 1) >> 1];
HEAP16[$arrayidx96 >> 1] = $xor55;
$arrayidx108 = $this + 736 + ((HEAP32[$spl_id_num_ >> 2] | 0) - $pos_087 + (HEAP32[$fixed_hzs_ >> 2] | 0) << 1) | 0;
HEAP16[$arrayidx108 >> 1] = HEAP16[$arrayidx108 >> 1] ^ $xor55;
HEAP16[$arrayidx96 >> 1] = HEAP16[$arrayidx96 >> 1] ^ HEAP16[$this + 736 + ((HEAP32[$spl_id_num_ >> 2] | 0) - $pos_087 + (HEAP32[$fixed_hzs_ >> 2] | 0) << 1) >> 1];
$arrayidx134 = $this + 816 + ($pos_087 << 1) | 0;
$xor13658 = HEAP16[$arrayidx134 >> 1] ^ HEAP16[$this + 816 + ((HEAP32[$spl_id_num_ >> 2] | 0) + ~$pos_087 + (HEAP32[$fixed_hzs_ >> 2] | 0) << 1) >> 1];
HEAP16[$arrayidx134 >> 1] = $xor13658;
$arrayidx147 = $this + 816 + ((HEAP32[$spl_id_num_ >> 2] | 0) + ~$pos_087 + (HEAP32[$fixed_hzs_ >> 2] | 0) << 1) | 0;
HEAP16[$arrayidx147 >> 1] = HEAP16[$arrayidx147 >> 1] ^ $xor13658;
HEAP16[$arrayidx134 >> 1] = HEAP16[$arrayidx134 >> 1] ^ HEAP16[$this + 816 + ((HEAP32[$spl_id_num_ >> 2] | 0) + ~$pos_087 + (HEAP32[$fixed_hzs_ >> 2] | 0) << 1) >> 1];
}
$43 = HEAP32[$fixed_hzs_ >> 2] | 0;
$44 = HEAP32[$spl_id_num_ >> 2] | 0;
if ($add84 >>> 0 < (((1 - $43 + $44 | 0) >>> 1) + $43 | 0) >>> 0) {
$pos_087 = $add84;
$42 = $43;
$41 = $44;
} else {
break;
}
}
}
$65 = HEAP32[$fixed_lmas_ >> 2] | 0;
$66 = HEAP32[$lma_id_num_ >> 2] | 0;
L1437 : do {
if ($65 >>> 0 < (((1 - $65 + $66 | 0) >>> 1) + $65 | 0) >>> 0) {
$pos166_078 = $65;
$69 = $65;
$68 = $66;
while (1) {
$sub181 = $69 - $pos166_078 + $68 | 0;
if (($sub181 - 1 | 0) >>> 0 < $pos166_078 >>> 0) {
break;
}
$add188 = $pos166_078 + 1 | 0;
if ($sub181 >>> 0 > $add188 >>> 0) {
$arrayidx200 = $this + 116 + ($add188 << 1) | 0;
$xor20252 = HEAP16[$arrayidx200 >> 1] ^ HEAP16[$this + 116 + ($69 - $pos166_078 + $68 << 1) >> 1];
HEAP16[$arrayidx200 >> 1] = $xor20252;
$arrayidx213 = $this + 116 + ((HEAP32[$lma_id_num_ >> 2] | 0) - $pos166_078 + (HEAP32[$fixed_lmas_ >> 2] | 0) << 1) | 0;
HEAP16[$arrayidx213 >> 1] = HEAP16[$arrayidx213 >> 1] ^ $xor20252;
HEAP16[$arrayidx200 >> 1] = HEAP16[$arrayidx200 >> 1] ^ HEAP16[$this + 116 + ((HEAP32[$lma_id_num_ >> 2] | 0) - $pos166_078 + (HEAP32[$fixed_lmas_ >> 2] | 0) << 1) >> 1];
$arrayidx238 = $this + 196 + ($pos166_078 << 2) | 0;
$xor239 = HEAP32[$arrayidx238 >> 2] ^ HEAP32[$this + 196 + ((HEAP32[$lma_id_num_ >> 2] | 0) + ~$pos166_078 + (HEAP32[$fixed_lmas_ >> 2] | 0) << 2) >> 2];
HEAP32[$arrayidx238 >> 2] = $xor239;
$arrayidx248 = $this + 196 + ((HEAP32[$lma_id_num_ >> 2] | 0) + ~$pos166_078 + (HEAP32[$fixed_lmas_ >> 2] | 0) << 2) | 0;
HEAP32[$arrayidx248 >> 2] = HEAP32[$arrayidx248 >> 2] ^ $xor239;
HEAP32[$arrayidx238 >> 2] = HEAP32[$arrayidx238 >> 2] ^ HEAP32[$this + 196 + ((HEAP32[$lma_id_num_ >> 2] | 0) + ~$pos166_078 + (HEAP32[$fixed_lmas_ >> 2] | 0) << 2) >> 2];
}
$70 = HEAP32[$fixed_lmas_ >> 2] | 0;
$71 = HEAP32[$lma_id_num_ >> 2] | 0;
if ($add188 >>> 0 < (((1 - $70 + $71 | 0) >>> 1) + $70 | 0) >>> 0) {
$pos166_078 = $add188;
$69 = $70;
$68 = $71;
} else {
$_lcssa = $70;
break L1437;
}
}
___assert_func(1184, 1360, 7e3, 2592);
} else {
$_lcssa = $65;
}
} while (0);
$pos264_066 = $_lcssa + 1 | 0;
$67 = HEAP32[$lma_id_num_ >> 2] | 0;
if ($pos264_066 >>> 0 <= $67 >>> 0) {
$pos264_0_in68 = $_lcssa;
$pos264_069 = $pos264_066;
$92 = $67;
while (1) {
$93 = HEAP16[$this + 116 + ($pos264_0_in68 << 1) >> 1] | 0;
$arrayidx279 = $this + 116 + ($pos264_069 << 1) | 0;
$94 = HEAP16[$arrayidx279 >> 1] | 0;
if ($pos264_069 >>> 0 < $92 >>> 0) {
$storemerge = ($94 + $93 & 65535) - (HEAP16[$this + 116 + ($pos264_0_in68 + 2 << 1) >> 1] | 0) & 65535;
} else {
$storemerge = ($94 + $93 & 65535) - (HEAP16[$this + 116 + (HEAP32[$fixed_lmas_ >> 2] << 1) >> 1] | 0) & 65535;
}
HEAP16[$arrayidx279 >> 1] = $storemerge;
$pos264_0 = $pos264_069 + 1 | 0;
$98 = HEAP32[$lma_id_num_ >> 2] | 0;
if ($pos264_0 >>> 0 > $98 >>> 0) {
break;
} else {
$pos264_0_in68 = $pos264_069;
$pos264_069 = $pos264_0;
$92 = $98;
}
}
}
HEAP32[$fixed_hzs_ >> 2] = 0;
$pos311_0 = HEAP32[$spl_id_num_ >> 2] | 0;
while (1) {
if (($pos311_0 | 0) == 0) {
label = 1169;
break;
}
if ((HEAP32[(HEAP32[$matrix_ >> 2] | 0) + ((HEAPU16[$this + 736 + ($pos311_0 << 1) >> 1] | 0) * 12 | 0) + 8 >> 2] | 0) == 0) {
$pos311_0 = $pos311_0 - 1 | 0;
} else {
break;
}
}
if ((label | 0) == 1169) {
return;
}
HEAP32[$fixed_hzs_ >> 2] = $pos311_0;
return;
}
function __ZN10ime_pinyin12MatrixSearch9delsearchEjbb($this, $pos, $is_pos_in_splid, $clear_fixed_this_step) {
$this = $this | 0;
$pos = $pos | 0;
$is_pos_in_splid = $is_pos_in_splid | 0;
$clear_fixed_this_step = $clear_fixed_this_step | 0;
var $pys_decoded_len_ = 0, $2 = 0, $reset_pos_0 = 0, $4 = 0, $fixed_lmas_ = 0, $7 = 0, $sublma_num = 0, $dec = 0, $16 = 0, $arrayidx58 = 0, $conv62 = 0, $sub = 0, $conv69 = 0, $conv84 = 0, $sub85 = 0, $reset_pos_1 = 0, $length94 = 0, $dmi_c_phrase_ = 0, $c_py_pos_0 = 0, $conv110 = 0, $29 = 0, $fixed_hzs_ = 0, $idxprom139 = 0, $33 = 0, $reset_pos_131 = 0, $reset_pos_2 = 0, $35 = 0, $retval_0 = 0, label = 0;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$pys_decoded_len_ = $this + 72 | 0;
$2 = HEAP32[$pys_decoded_len_ >> 2] | 0;
if ($2 >>> 0 <= $pos >>> 0) {
__ZN10ime_pinyin12MatrixSearch10del_in_pysEjj($this, $pos, 1);
$reset_pos_0 = HEAP32[$pys_decoded_len_ >> 2] | 0;
while (1) {
$4 = HEAP8[$this + 32 + $reset_pos_0 | 0] | 0;
if ($4 << 24 >> 24 == 0) {
break;
}
if (__ZN10ime_pinyin12MatrixSearch8add_charEc($this, $4) | 0) {
$reset_pos_0 = $reset_pos_0 + 1 | 0;
} else {
label = 1175;
break;
}
}
if ((label | 0) == 1175) {
HEAP32[$pys_decoded_len_ >> 2] = $reset_pos_0;
}
__ZN10ime_pinyin12MatrixSearch16get_spl_start_idEv($this);
__ZN10ime_pinyin12MatrixSearch18prepare_candidatesEv($this);
$retval_0 = HEAP32[$pys_decoded_len_ >> 2] | 0;
return $retval_0 | 0;
}
do {
if ($is_pos_in_splid) {
if ((HEAP32[$this + 732 >> 2] | 0) >>> 0 <= $pos >>> 0) {
$retval_0 = $2;
return $retval_0 | 0;
}
$arrayidx58 = $this + 736 + ($pos + 1 << 1) | 0;
$conv62 = HEAPU16[$this + 736 + ($pos << 1) >> 1] | 0;
$sub = (HEAPU16[$arrayidx58 >> 1] | 0) - $conv62 | 0;
__ZN10ime_pinyin12MatrixSearch10del_in_pysEjj($this, $conv62, $sub);
$conv69 = HEAPU16[$this + 116 + (HEAP32[$this + 356 >> 2] << 1) >> 1] | 0;
if ($conv69 >>> 0 <= $pos >>> 0) {
$reset_pos_131 = (HEAPU16[$arrayidx58 >> 1] | 0) - $sub | 0;
label = 1198;
break;
}
$conv84 = HEAPU16[$this + 736 + ($conv69 << 1) >> 1] | 0;
$sub85 = $conv84 - $sub | 0;
if (($conv84 | 0) == ($sub | 0)) {
$reset_pos_1 = $sub85;
label = 1189;
break;
}
__ZN10ime_pinyin12MatrixSearch16merge_fixed_lmasEj($this, $pos);
$reset_pos_1 = $sub85;
label = 1189;
} else {
$fixed_lmas_ = $this + 356 | 0;
$7 = HEAP32[$fixed_lmas_ >> 2] | 0;
do {
if (($7 | 0) != 0) {
if ((HEAPU16[$this + 736 + (HEAPU16[$this + 116 + ($7 << 1) >> 1] << 1) >> 1] | 0) >>> 0 <= $pos >>> 0) {
break;
}
$retval_0 = HEAP32[$pys_decoded_len_ >> 2] | 0;
return $retval_0 | 0;
}
} while (0);
__ZN10ime_pinyin12MatrixSearch10del_in_pysEjj($this, $pos, 1);
if ((HEAPU16[$this + 736 + (HEAPU16[$this + 116 + (HEAP32[$fixed_lmas_ >> 2] << 1) >> 1] << 1) >> 1] | 0) != ($pos | 0)) {
$reset_pos_131 = $pos;
label = 1198;
break;
}
if ((HEAP32[$this + 196 >> 2] | 0) != 16777215 | $clear_fixed_this_step ^ 1) {
$reset_pos_131 = $pos;
label = 1198;
break;
}
$sublma_num = $this + 720 | 0;
$dec = (HEAP32[$sublma_num >> 2] | 0) - 1 | 0;
HEAP32[$sublma_num >> 2] = $dec;
$16 = HEAP16[$this + 640 + ($dec << 1) >> 1] | 0;
HEAP16[$this + 724 >> 1] = $16;
$reset_pos_1 = HEAPU16[$this + 736 + (($16 & 65535) << 1) >> 1] | 0;
label = 1189;
}
} while (0);
do {
if ((label | 0) == 1189) {
if (($reset_pos_1 | 0) == 0) {
$reset_pos_131 = 0;
label = 1198;
break;
}
$length94 = $this + 724 | 0;
if ((HEAP16[$length94 >> 1] | 0) == 0) {
___assert_func(1184, 552, 6584, 1360);
return 0;
}
if (($reset_pos_1 | 0) != (HEAPU16[$this + 480 + (HEAPU16[$this + 640 + (HEAP32[$this + 720 >> 2] << 1) >> 1] << 1) >> 1] | 0)) {
___assert_func(1184, 552, 6584, 1360);
return 0;
}
__ZN10ime_pinyin12MatrixSearch13reset_search0Ev($this) | 0;
$dmi_c_phrase_ = $this + 728 | 0;
HEAP8[$dmi_c_phrase_] = 1;
$c_py_pos_0 = 0;
while (1) {
$conv110 = $c_py_pos_0 & 65535;
if ($conv110 >>> 0 >= $reset_pos_1 >>> 0) {
label = 1197;
break;
}
if (__ZN10ime_pinyin12MatrixSearch8add_charEc($this, HEAP8[$this + 32 + $conv110 | 0] | 0) | 0) {
$c_py_pos_0 = $c_py_pos_0 + 1 & 65535;
} else {
label = 1196;
break;
}
}
if ((label | 0) == 1196) {
___assert_func(1184, 563, 6584, 1632);
return 0;
} else if ((label | 0) == 1197) {
HEAP8[$dmi_c_phrase_] = 0;
HEAP32[$this + 112 >> 2] = 1;
HEAP32[$this + 356 >> 2] = 1;
HEAP8[$this + 360 | 0] = 0;
$29 = HEAP16[$length94 >> 1] | 0;
$fixed_hzs_ = $this + 896 | 0;
HEAP32[$fixed_hzs_ >> 2] = $29 & 65535;
HEAP16[$this + 118 >> 1] = $29;
HEAP32[$this + 196 >> 2] = 16777215;
$idxprom139 = HEAPU16[$this + 736 + (HEAP32[$fixed_hzs_ >> 2] << 1) >> 1] | 0;
$33 = HEAP32[$this + 96 >> 2] | 0;
HEAP32[$33 + ($idxprom139 * 12 | 0) + 8 >> 2] = (HEAP32[$this + 80 >> 2] | 0) + (HEAPU16[$33 + ($idxprom139 * 12 | 0) >> 1] << 4);
$reset_pos_2 = $reset_pos_1;
break;
}
}
} while (0);
if ((label | 0) == 1198) {
__ZN10ime_pinyin12MatrixSearch12reset_searchEjbbb($this, $reset_pos_131, $clear_fixed_this_step, 0, 0) | 0;
$reset_pos_2 = $reset_pos_131;
}
while (1) {
$35 = HEAP8[$this + 32 + $reset_pos_2 | 0] | 0;
if ($35 << 24 >> 24 == 0) {
break;
}
if (__ZN10ime_pinyin12MatrixSearch8add_charEc($this, $35) | 0) {
$reset_pos_2 = $reset_pos_2 + 1 | 0;
} else {
label = 1201;
break;
}
}
if ((label | 0) == 1201) {
HEAP32[$pys_decoded_len_ >> 2] = $reset_pos_2;
}
__ZN10ime_pinyin12MatrixSearch16get_spl_start_idEv($this);
__ZN10ime_pinyin12MatrixSearch18prepare_candidatesEv($this);
$retval_0 = HEAP32[$pys_decoded_len_ >> 2] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch17get_candidate_numEv($this) {
$this = $this | 0;
var $2 = 0, $retval_0 = 0;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$2 = HEAP32[$this + 72 >> 2] | 0;
if (($2 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP16[(HEAP32[$this + 96 >> 2] | 0) + ($2 * 12 | 0) + 4 >> 1] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = (HEAP32[$this + 12500 >> 2] | 0) + 1 | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch13get_candidateEjPtj($this, $cand_id, $cand_str, $max_len) {
$this = $this | 0;
$cand_id = $cand_id | 0;
$cand_str = $cand_str | 0;
$max_len = $max_len | 0;
var $s = 0, $dec = 0, $5 = 0, $conv = 0, $s_len_0 = 0, $conv24 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 24 | 0;
$s = sp | 0;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if ((HEAP32[$this + 72 >> 2] | 0) == 0 | ($cand_str | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if (($cand_id | 0) == 0) {
$retval_0 = __ZN10ime_pinyin12MatrixSearch14get_candidate0EPtjS1_b($this, $cand_str, $max_len, 0, 0) | 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if ((HEAP32[$this + 12500 >> 2] | 0) == 0) {
$retval_0 = __ZN10ime_pinyin12MatrixSearch14get_candidate0EPtjS1_b($this, $cand_str, $max_len, 0, 0) | 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$dec = $cand_id - 1 | 0;
$5 = HEAP32[$this + 900 + ($dec << 3) >> 2] | 0;
$conv = $5 >>> 24 & 15;
if (($conv & 65535) > 1) {
$s_len_0 = __ZN10ime_pinyin12MatrixSearch13get_lemma_strEjPtt($this, $5 & 16777215, $s | 0, 9) | 0;
} else {
HEAP16[$s >> 1] = HEAP16[$this + 900 + ($dec << 3) + 6 >> 1] | 0;
HEAP16[$s + 2 >> 1] = 0;
$s_len_0 = $conv;
}
$conv24 = $s_len_0 & 65535;
if (!($s_len_0 << 16 >> 16 != 0 & $conv24 >>> 0 < $max_len >>> 0)) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
_utf16_strncpy($cand_str, $s | 0, $conv24) | 0;
HEAP16[$cand_str + ($conv24 << 1) >> 1] = 0;
$retval_0 = $cand_str;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch14get_candidate0EPtjS1_b($this, $cand_str, $max_len, $retstr_len, $only_unfixed) {
$this = $this | 0;
$cand_str = $cand_str | 0;
$max_len = $max_len | 0;
$retstr_len = $retstr_len | 0;
$only_unfixed = $only_unfixed | 0;
var $idxs = 0, $str = 0, $0 = 0, $1 = 0, $add_ptr = 0, $id_num_0_lcssa = 0, $arraydecay = 0, $fixed_hzs_ = 0, $fixed_hzs_33 = 0, $mtrx_nd_035 = 0, $id_num_034 = 0, $inc = 0, $6 = 0, $id_num_1 = 0, $ret_pos_0 = 0, $dec = 0, $7 = 0, $call = 0, $conv15 = 0, $sub23 = 0, $add_ptr29 = 0, $9 = 0, $add_ptr38 = 0, $ret_pos_1 = 0, $cmp57 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 184 | 0;
$idxs = sp | 0;
$str = sp + 160 | 0;
$0 = HEAP32[$this + 72 >> 2] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$1 = HEAP32[$this + 96 >> 2] | 0;
if ((HEAP16[$1 + ($0 * 12 | 0) + 4 >> 1] | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$add_ptr = (HEAP32[$this + 80 >> 2] | 0) + (HEAPU16[$1 + ($0 * 12 | 0) >> 1] << 4) | 0;
if (($add_ptr | 0) == 0) {
$id_num_0_lcssa = 0;
} else {
$id_num_034 = 0;
$mtrx_nd_035 = $add_ptr;
while (1) {
HEAP32[$idxs + ($id_num_034 << 2) >> 2] = HEAP32[$mtrx_nd_035 >> 2];
$inc = $id_num_034 + 1 | 0;
$6 = HEAP32[$mtrx_nd_035 + 8 >> 2] | 0;
if (($6 | 0) == 0) {
$id_num_0_lcssa = $inc;
break;
} else {
$id_num_034 = $inc;
$mtrx_nd_035 = $6;
}
}
}
$arraydecay = $str | 0;
$fixed_hzs_ = $this + 896 | 0;
$fixed_hzs_33 = $this + 896 | 0;
$ret_pos_0 = 0;
$id_num_1 = $id_num_0_lcssa;
L1561 : while (1) {
$dec = $id_num_1 - 1 | 0;
$7 = HEAP32[$idxs + ($dec << 2) >> 2] | 0;
if (($7 | 0) == 0) {
$ret_pos_1 = $ret_pos_0;
} else {
$call = __ZN10ime_pinyin12MatrixSearch13get_lemma_strEjPtt($this, $7, $arraydecay, 9) | 0;
$conv15 = $call & 65535;
if ($call << 16 >> 16 == 0) {
$retval_0 = 0;
label = 1263;
break;
}
$sub23 = $max_len - $ret_pos_0 | 0;
do {
if ($only_unfixed) {
if (((HEAP32[$fixed_hzs_ >> 2] | 0) + $sub23 | 0) >>> 0 <= $conv15 >>> 0) {
$retval_0 = 0;
label = 1264;
break L1561;
}
$9 = HEAP32[$fixed_hzs_33 >> 2] | 0;
if ($ret_pos_0 >>> 0 < $9 >>> 0) {
break;
}
$add_ptr38 = $cand_str + ($ret_pos_0 - $9 << 1) | 0;
_utf16_strncpy($add_ptr38, $arraydecay, $conv15) | 0;
} else {
if ($sub23 >>> 0 <= $conv15 >>> 0) {
$retval_0 = 0;
label = 1265;
break L1561;
}
$add_ptr29 = $cand_str + ($ret_pos_0 << 1) | 0;
_utf16_strncpy($add_ptr29, $arraydecay, $conv15) | 0;
}
} while (0);
$ret_pos_1 = $conv15 + $ret_pos_0 | 0;
}
if (($dec | 0) == 0) {
label = 1253;
break;
} else {
$ret_pos_0 = $ret_pos_1;
$id_num_1 = $dec;
}
}
if ((label | 0) == 1263) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 1264) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 1265) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 1253) {
$cmp57 = ($retstr_len | 0) != 0;
if ($only_unfixed) {
if ($cmp57) {
HEAP16[$retstr_len >> 1] = $ret_pos_1 - (HEAP32[$this + 896 >> 2] | 0) & 65535;
}
HEAP16[$cand_str + ($ret_pos_1 - (HEAP32[$this + 896 >> 2] | 0) << 1) >> 1] = 0;
$retval_0 = $cand_str;
STACKTOP = sp;
return $retval_0 | 0;
} else {
if ($cmp57) {
HEAP16[$retstr_len >> 1] = $ret_pos_1 & 65535;
}
HEAP16[$cand_str + ($ret_pos_1 << 1) >> 1] = 0;
$retval_0 = $cand_str;
STACKTOP = sp;
return $retval_0 | 0;
}
}
return 0;
}
function __ZN10ime_pinyin12MatrixSearch13get_lemma_strEjPtt($this, $id_lemma, $str_buf, $str_max) {
$this = $this | 0;
$id_lemma = $id_lemma | 0;
$str_buf = $str_buf | 0;
$str_max = $str_max | 0;
var $0 = 0, $3 = 0, $7 = 0, $sub = 0, $str_len_0 = 0, $arraydecay = 0, $conv28 = 0, $retval_0 = 0;
if (__ZN10ime_pinyin15is_system_lemmaEj($id_lemma) | 0) {
$0 = HEAP32[$this + 12 >> 2] | 0;
$retval_0 = FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$0 >> 2] | 0) + 32 >> 2] & 31]($0, $id_lemma, $str_buf, $str_max) | 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin13is_user_lemmaEj($id_lemma) | 0)) {
if (($str_max & 65535) < 2 | (__ZN10ime_pinyin18is_composing_lemmaEj($id_lemma) | 0) ^ 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$7 = HEAP16[$this + 640 + (HEAP32[$this + 720 >> 2] << 1) >> 1] | 0;
$sub = ($str_max & 65535) - 1 | 0;
$str_len_0 = ($7 & 65535 | 0) > ($sub | 0) ? $sub & 65535 : $7;
$arraydecay = $this + 560 | 0;
$conv28 = $str_len_0 & 65535;
_utf16_strncpy($str_buf, $arraydecay, $conv28) | 0;
HEAP16[$str_buf + ($conv28 << 1) >> 1] = 0;
$retval_0 = $str_len_0;
return $retval_0 | 0;
}
$3 = HEAP32[$this + 16 >> 2] | 0;
if (($3 | 0) == 0) {
HEAP16[$str_buf >> 1] = 0;
$retval_0 = 0;
return $retval_0 | 0;
} else {
$retval_0 = FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$3 >> 2] | 0) + 32 >> 2] & 31]($3, $id_lemma, $str_buf, $str_max) | 0;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin12MatrixSearch16update_dict_freqEv($this) {
$this = $this | 0;
var $0 = 0, $call = 0, $3 = 0;
$0 = HEAP32[$this + 16 >> 2] | 0;
if (($0 | 0) == 0) {
return;
}
$call = FUNCTION_TABLE_ii[HEAP32[(HEAP32[$0 >> 2] | 0) + 68 >> 2] & 31]($0) | 0;
$3 = HEAP32[$this + 12 >> 2] | 0;
FUNCTION_TABLE_vii[HEAP32[(HEAP32[$3 >> 2] | 0) + 72 >> 2] & 15]($3, $call);
return;
}
function __ZN10ime_pinyin12MatrixSearch16get_lemma_splidsEjPttb($this, $id_lemma, $splids, $splids_max, $arg_valid) {
$this = $this | 0;
$id_lemma = $id_lemma | 0;
$splids = $splids | 0;
$splids_max = $splids_max | 0;
$arg_valid = $arg_valid | 0;
var $spl_trie_ = 0, $splid_num_0 = 0, $splid_num_1 = 0, $2 = 0, $5 = 0, $length = 0, $spl_trie_45 = 0, $pos_0 = 0, $conv34 = 0, $10 = 0, $retval_0 = 0, label = 0;
do {
if ($arg_valid) {
$spl_trie_ = $this + 4 | 0;
$splid_num_0 = 0;
while (1) {
if (($splid_num_0 & 65535) >= ($splids_max & 65535)) {
break;
}
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$spl_trie_ >> 2] | 0, HEAP16[$splids + (($splid_num_0 & 65535) << 1) >> 1] | 0) | 0) {
break;
} else {
$splid_num_0 = $splid_num_0 + 1 & 65535;
}
}
if ($splid_num_0 << 16 >> 16 == $splids_max << 16 >> 16) {
$retval_0 = $splid_num_0;
} else {
$splid_num_1 = $splid_num_0;
break;
}
return $retval_0 | 0;
} else {
$splid_num_1 = 0;
}
} while (0);
if (__ZN10ime_pinyin15is_system_lemmaEj($id_lemma) | 0) {
$2 = HEAP32[$this + 12 >> 2] | 0;
$retval_0 = FUNCTION_TABLE_iiiiii[HEAP32[(HEAP32[$2 >> 2] | 0) + 36 >> 2] & 15]($2, $id_lemma, $splids, $splids_max, $arg_valid) | 0;
return $retval_0 | 0;
}
if (__ZN10ime_pinyin13is_user_lemmaEj($id_lemma) | 0) {
$5 = HEAP32[$this + 16 >> 2] | 0;
if (($5 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = FUNCTION_TABLE_iiiiii[HEAP32[(HEAP32[$5 >> 2] | 0) + 36 >> 2] & 15]($5, $id_lemma, $splids, $splids_max, $arg_valid) | 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin18is_composing_lemmaEj($id_lemma) | 0)) {
$retval_0 = $splid_num_1;
return $retval_0 | 0;
}
$length = $this + 724 | 0;
if ((HEAPU16[$length >> 1] | 0) > ($splids_max & 65535)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spl_trie_45 = $this + 4 | 0;
$pos_0 = 0;
while (1) {
$conv34 = $pos_0 & 65535;
if (($pos_0 & 65535) >= (HEAPU16[$length >> 1] | 0)) {
$retval_0 = $splid_num_1;
label = 1310;
break;
}
$10 = HEAP16[$this + 400 + ($conv34 << 1) >> 1] | 0;
HEAP16[$splids + ($conv34 << 1) >> 1] = $10;
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$spl_trie_45 >> 2] | 0, $10) | 0) {
$retval_0 = 0;
label = 1305;
break;
} else {
$pos_0 = $pos_0 + 1 & 65535;
}
}
if ((label | 0) == 1310) {
return $retval_0 | 0;
} else if ((label | 0) == 1305) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin12MatrixSearch15debug_print_dmiEtt($this, $dmi_pos, $nest_level) {
$this = $this | 0;
$dmi_pos = $dmi_pos | 0;
$nest_level = $nest_level | 0;
var $conv = 0, $1 = 0, $cmp5 = 0, $2 = 0, $conv22 = 0, $call24 = 0, $spl_id = 0, $call25 = 0, $conv27 = 0, sp = 0;
sp = STACKTOP;
$conv = $dmi_pos & 65535;
if ((HEAPU16[$this + 92 >> 1] | 0) <= ($dmi_pos & 65535)) {
STACKTOP = sp;
return;
}
$1 = HEAP32[$this + 88 >> 2] | 0;
$cmp5 = $nest_level << 16 >> 16 == 1;
if ($cmp5) {
_printf(768, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $conv, tempInt) | 0) | 0;
}
$2 = $1 + ($conv * 12 | 0) + 8 | 0;
if ((HEAP8[$2] & 126) > 1) {
__ZN10ime_pinyin12MatrixSearch15debug_print_dmiEtt($this, HEAP16[$1 + ($conv * 12 | 0) + 4 >> 1] | 0, $nest_level + 1 & 65535);
}
_printf(616, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = HEAP8[$2] & 127, tempInt) | 0) | 0;
$conv22 = HEAPU16[$1 + ($conv * 12 | 0) + 2 >> 1] | 0;
_printf(440, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAP32[tempInt >> 2] = HEAPU16[$1 + ($conv * 12 | 0) >> 1] | 0, HEAP32[tempInt + 8 >> 2] = $conv22, tempInt) | 0) | 0;
$call24 = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
$spl_id = $1 + ($conv * 12 | 0) + 6 | 0;
$call25 = __ZN10ime_pinyin12SpellingTrie16get_spelling_strEt($call24, HEAP16[$spl_id >> 1] | 0) | 0;
$conv27 = HEAPU16[$spl_id >> 1] | 0;
_printf(4288, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAP32[tempInt >> 2] = $call25, HEAP32[tempInt + 8 >> 2] = $conv27, tempInt) | 0) | 0;
_printf(4064, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = (HEAPU8[$1 + ($conv * 12 | 0) + 9 | 0] | 0) >>> 1 & 255, tempInt) | 0) | 0;
if (!$cmp5) {
STACKTOP = sp;
return;
}
_printf(3864, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $conv, tempInt) | 0) | 0;
STACKTOP = sp;
return;
}
function __ZN10ime_pinyin12MatrixSearch25try_add_cand0_to_userdictEv($this) {
$this = $this | 0;
var $call = 0, $fixed_lmas_ = 0, $conv27 = 0, $modified_0_off026 = 0, $pos_025 = 0, $lma_id_from_024 = 0, $cmp9_not = 0, $lma_id_from_1 = 0, $modified_1_off0 = 0, $_modified_1_off0 = 0, $inc = 0, $conv = 0, $conv_lcssa = 0, $modified_0_off0_lcssa = 0, $pos_0_lcssa = 0, $lma_id_from_0_lcssa = 0;
$call = __ZN10ime_pinyin12MatrixSearch17get_candidate_numEv($this) | 0;
if (!((HEAP32[$this + 896 >> 2] | 0) != 0 & ($call | 0) == 1)) {
return 1;
}
$fixed_lmas_ = $this + 356 | 0;
if ((HEAP32[$fixed_lmas_ >> 2] | 0) == 0) {
$lma_id_from_0_lcssa = 0;
$pos_0_lcssa = 0;
$modified_0_off0_lcssa = 1;
$conv_lcssa = 0;
} else {
$lma_id_from_024 = 0;
$pos_025 = 0;
$modified_0_off026 = 0;
$conv27 = 0;
while (1) {
$cmp9_not = ((HEAPU16[$this + 116 + ($conv27 + 1 << 1) >> 1] | 0) - (HEAPU16[$this + 116 + (($lma_id_from_024 & 65535) << 1) >> 1] | 0) | 0) < 9;
if ($cmp9_not | $modified_0_off026 ^ 1) {
$modified_1_off0 = $cmp9_not & $modified_0_off026;
$lma_id_from_1 = $cmp9_not ? $lma_id_from_024 : $pos_025;
} else {
__ZN10ime_pinyin12MatrixSearch19add_lma_to_userdictEttf($this, $lma_id_from_024, $pos_025, 0.0) | 0;
$modified_1_off0 = 0;
$lma_id_from_1 = $pos_025;
}
$_modified_1_off0 = (HEAP8[$this + 360 + $conv27 | 0] | 0) == 0 | $modified_1_off0;
$inc = $pos_025 + 1 & 65535;
$conv = $inc & 65535;
if ($conv >>> 0 < (HEAP32[$fixed_lmas_ >> 2] | 0) >>> 0) {
$lma_id_from_024 = $lma_id_from_1;
$pos_025 = $inc;
$modified_0_off026 = $_modified_1_off0;
$conv27 = $conv;
} else {
break;
}
}
$lma_id_from_0_lcssa = $lma_id_from_1;
$pos_0_lcssa = $inc;
$modified_0_off0_lcssa = $_modified_1_off0 ^ 1;
$conv_lcssa = $conv;
}
if (((HEAPU16[$this + 116 + ($conv_lcssa << 1) >> 1] | 0) - (HEAPU16[$this + 116 + (($lma_id_from_0_lcssa & 65535) << 1) >> 1] | 0) | 0) < 2 | $modified_0_off0_lcssa) {
return 1;
}
__ZN10ime_pinyin12MatrixSearch19add_lma_to_userdictEttf($this, $lma_id_from_0_lcssa, $pos_0_lcssa, 0.0) | 0;
return 1;
}
function __ZN10ime_pinyin12MatrixSearch16merge_fixed_lmasEj($this, $del_spl_pos) {
$this = $this | 0;
$del_spl_pos = $del_spl_pos | 0;
var $fixed_lmas_ = 0, $spl_id_num_ = 0, $sub = 0, $spl_start_ = 0, $sub549 = 0, $pos_073 = 0, $add9 = 0, $8 = 0, $9 = 0, $mul = 0, $11 = 0, $12 = 0, $mul32 = 0, $sublma_num137 = 0, $bp_0 = 0, $sublma_num45 = 0, $conv4964 = 0, $conv54 = 0, $add56 = 0, $arrayidx88 = 0, $conv4968 = 0, $phrase_len_067 = 0, $pos47_066 = 0, $arrayidx53 = 0, $19 = 0, $arrayidx60 = 0, $call = 0, $add112 = 0, $inc115 = 0, $conv49 = 0, $phrase_len_0_lcssa = 0, $conv13571 = 0, $pos133_070 = 0, $arrayidx143 = 0, $31 = 0, $phrase_len_1 = 0, $sublma_num180 = 0, $add189 = 0, $conv17861 = 0, $pos176_060 = 0, $length197 = 0, $conv20353 = 0, $pos201_052 = 0, $del_a_sub_0_off051 = 0, $arrayidx212 = 0, $42 = 0, $43 = 0, label = 0;
$fixed_lmas_ = $this + 356 | 0;
if ((HEAP32[$fixed_lmas_ >> 2] | 0) == 0) {
return;
}
$spl_id_num_ = $this + 732 | 0;
$sub = (HEAP32[$spl_id_num_ >> 2] | 0) - 1 | 0;
HEAP32[$spl_id_num_ >> 2] = $sub;
$spl_start_ = $this + 736 | 0;
L1678 : do {
if ($sub >>> 0 >= $del_spl_pos >>> 0) {
$sub549 = (HEAP16[$this + 736 + ($del_spl_pos << 1) >> 1] | 0) - (HEAP16[$this + 736 + ($del_spl_pos + 1 << 1) >> 1] | 0) & 65535;
$pos_073 = $del_spl_pos;
while (1) {
$add9 = $pos_073 + 1 | 0;
HEAP16[$this + 736 + ($pos_073 << 1) >> 1] = $sub549 + (HEAP16[$this + 736 + ($add9 << 1) >> 1] | 0) & 65535;
if (($pos_073 | 0) == (HEAP32[$spl_id_num_ >> 2] | 0)) {
break L1678;
}
HEAP16[$this + 816 + ($pos_073 << 1) >> 1] = HEAP16[$this + 816 + ($add9 << 1) >> 1] | 0;
if ($add9 >>> 0 > (HEAP32[$spl_id_num_ >> 2] | 0) >>> 0) {
break;
} else {
$pos_073 = $add9;
}
}
}
} while (0);
$8 = $this + 400 | 0;
$9 = $this + 816 | 0;
$mul = HEAP32[$spl_id_num_ >> 2] << 1;
_memcpy($8 | 0, $9 | 0, $mul) | 0;
$11 = $this + 480 | 0;
$12 = $spl_start_;
$mul32 = (HEAP32[$spl_id_num_ >> 2] << 1) + 2 | 0;
_memcpy($11 | 0, $12 | 0, $mul32) | 0;
do {
if ((HEAP32[$fixed_lmas_ >> 2] | 0) >>> 0 > 1) {
label = 1342;
} else {
if ((HEAP32[$this + 196 >> 2] | 0) != 16777215) {
label = 1342;
break;
}
$sublma_num137 = $this + 720 | 0;
$pos133_070 = 0;
$conv13571 = 0;
do {
$arrayidx143 = $this + 640 + ($conv13571 << 1) | 0;
$31 = HEAP16[$arrayidx143 >> 1] | 0;
if (($31 & 65535) >>> 0 > $del_spl_pos >>> 0) {
HEAP16[$arrayidx143 >> 1] = $31 - 1 & 65535;
}
$pos133_070 = $pos133_070 + 1 & 65535;
$conv13571 = $pos133_070 & 65535;
} while ($conv13571 >>> 0 <= (HEAP32[$sublma_num137 >> 2] | 0) >>> 0);
$phrase_len_1 = HEAP16[$this + 724 >> 1] | 0;
}
} while (0);
do {
if ((label | 0) == 1342) {
if ((HEAP32[$this + 196 >> 2] | 0) == 16777215) {
$bp_0 = 1;
} else {
HEAP32[$this + 720 >> 2] = 0;
$bp_0 = 0;
}
$sublma_num45 = $this + 720 | 0;
$conv4964 = $bp_0 & 65535;
L1698 : do {
if ($conv4964 >>> 0 > (HEAP32[$fixed_lmas_ >> 2] | 0) >>> 0) {
$phrase_len_0_lcssa = 0;
} else {
$conv54 = HEAP32[$sublma_num45 >> 2] & 65535;
$add56 = $conv54 - ($bp_0 & 65535) | 0;
$arrayidx88 = $this + 640 + ($conv54 << 1) | 0;
$pos47_066 = $bp_0;
$phrase_len_067 = 0;
$conv4968 = $conv4964;
while (1) {
$arrayidx53 = $this + 116 + ($conv4968 << 1) | 0;
$19 = HEAP16[$arrayidx53 >> 1] | 0;
$arrayidx60 = $this + 640 + ($add56 + $conv4968 << 1) | 0;
HEAP16[$arrayidx60 >> 1] = $19;
if ((HEAPU16[$arrayidx53 >> 1] | 0) >>> 0 > $del_spl_pos >>> 0) {
HEAP16[$arrayidx60 >> 1] = $19 - 1 & 65535;
}
if (($conv4968 | 0) == (HEAP32[$fixed_lmas_ >> 2] | 0)) {
$phrase_len_0_lcssa = $phrase_len_067;
break L1698;
}
$call = __ZN10ime_pinyin12MatrixSearch13get_lemma_strEjPtt($this, HEAP32[$this + 196 + ($conv4968 << 2) >> 2] | 0, $this + 560 + ((HEAPU16[$arrayidx88 >> 1] | 0) + ($phrase_len_067 & 65535) << 1) | 0, 40 - $phrase_len_067 & 65535) | 0;
if (($call & 65535 | 0) != ((HEAPU16[$this + 116 + ($conv4968 + 1 << 1) >> 1] | 0) - (HEAPU16[$arrayidx53 >> 1] | 0) | 0)) {
break;
}
$add112 = $call + $phrase_len_067 & 65535;
$inc115 = $pos47_066 + 1 & 65535;
$conv49 = $inc115 & 65535;
if ($conv49 >>> 0 > (HEAP32[$fixed_lmas_ >> 2] | 0) >>> 0) {
$phrase_len_0_lcssa = $add112;
break L1698;
} else {
$pos47_066 = $inc115;
$phrase_len_067 = $add112;
$conv4968 = $conv49;
}
}
___assert_func(1184, 1245, 6944, 2984);
}
} while (0);
if ($phrase_len_0_lcssa << 16 >> 16 == (HEAP16[$this + 116 + (HEAP32[$fixed_lmas_ >> 2] << 1) >> 1] | 0)) {
HEAP16[$this + 724 >> 1] = $phrase_len_0_lcssa;
HEAP32[$sublma_num45 >> 2] = (HEAP32[$fixed_lmas_ >> 2] | 0) - ($bp_0 & 65535) + (HEAP32[$sublma_num45 >> 2] | 0);
$phrase_len_1 = $phrase_len_0_lcssa;
break;
} else {
___assert_func(1184, 1248, 6944, 2848);
}
}
} while (0);
if (($phrase_len_1 << 16 >> 16 | 0) == 0) {
___assert_func(1184, 1260, 6944, 2736);
} else if (($phrase_len_1 << 16 >> 16 | 0) == 1) {
HEAP32[$fixed_lmas_ >> 2] = 0;
return;
} else {
$sublma_num180 = $this + 720 | 0;
if ((HEAPU16[$this + 640 + (HEAP32[$sublma_num180 >> 2] << 1) >> 1] | 0) != ($del_spl_pos | 0)) {
$add189 = $del_spl_pos + 1 | 0;
$pos176_060 = 0;
$conv17861 = 0;
do {
HEAP16[$this + 560 + ($conv17861 + $del_spl_pos << 1) >> 1] = HEAP16[$this + 560 + ($add189 + $conv17861 << 1) >> 1] | 0;
$pos176_060 = $pos176_060 + 1 & 65535;
$conv17861 = $pos176_060 & 65535;
} while ($conv17861 >>> 0 < ((HEAPU16[$this + 640 + (HEAP32[$sublma_num180 >> 2] << 1) >> 1] | 0) - $del_spl_pos | 0) >>> 0);
}
$length197 = $this + 724 | 0;
HEAP16[$length197 >> 1] = (HEAP16[$length197 >> 1] | 0) - 1 & 65535;
if ((HEAP32[$sublma_num180 >> 2] | 0) == 0) {
return;
} else {
$del_a_sub_0_off051 = 0;
$pos201_052 = 1;
$conv20353 = 1;
}
do {
$arrayidx212 = $this + 640 + ($conv20353 - 1 << 1) | 0;
$42 = HEAP16[$this + 640 + ($conv20353 << 1) >> 1] | 0;
$del_a_sub_0_off051 = (HEAP16[$arrayidx212 >> 1] | 0) == $42 << 16 >> 16 | $del_a_sub_0_off051;
if ($del_a_sub_0_off051) {
HEAP16[$arrayidx212 >> 1] = $42;
}
$pos201_052 = $pos201_052 + 1 & 65535;
$conv20353 = $pos201_052 & 65535;
$43 = HEAP32[$sublma_num180 >> 2] | 0;
} while ($conv20353 >>> 0 <= $43 >>> 0);
if (!$del_a_sub_0_off051) {
return;
}
HEAP32[$sublma_num180 >> 2] = $43 - 1;
return;
}
}
function __ZN10ime_pinyin12MatrixSearch19add_lma_to_userdictEttf($this, $lma_fr, $lma_to, $score) {
$this = $this | 0;
$lma_fr = $lma_fr | 0;
$lma_to = $lma_to | 0;
$score = +$score;
var $word_str = 0, $spl_ids = 0, $user_dict_ = 0, $spl_id_fr_027 = 0, $pos_026 = 0, $conv428 = 0, $1 = 0, $2 = 0, $4 = 0, $6 = 0, $sub18 = 0, $conv20 = 0, $add_ptr = 0, $add50 = 0, $inc = 0, $spl_id_fr_0_lcssa30 = 0, $7 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 40 | 0;
$word_str = sp | 0;
$spl_ids = sp + 24 | 0;
if ((($lma_to & 65535) - ($lma_fr & 65535) | 0) < 2) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$user_dict_ = $this + 16 | 0;
if ((HEAP32[$user_dict_ >> 2] | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
do {
if (($lma_fr & 65535) < ($lma_to & 65535)) {
$pos_026 = $lma_fr;
$spl_id_fr_027 = 0;
while (1) {
$conv428 = $pos_026 & 65535;
$1 = HEAP32[$this + 196 + ($conv428 << 2) >> 2] | 0;
if (__ZN10ime_pinyin13is_user_lemmaEj($1) | 0) {
$2 = HEAP32[$user_dict_ >> 2] | 0;
$4 = HEAP32[(HEAP32[$2 >> 2] | 0) + 48 >> 2] | 0;
FUNCTION_TABLE_iiiii[$4 & 31]($2, $1, 1, 1) | 0;
}
$6 = HEAP16[$this + 116 + ($conv428 << 1) >> 1] | 0;
$sub18 = (HEAP16[$this + 116 + ($conv428 + 1 << 1) >> 1] | 0) - $6 & 65535;
$conv20 = $spl_id_fr_027 & 65535;
$add_ptr = $spl_ids + ($conv20 << 1) | 0;
_utf16_strncpy($add_ptr, $this + 816 + (($6 & 65535) << 1) | 0, $sub18 & 65535) | 0;
if ((__ZN10ime_pinyin12MatrixSearch13get_lemma_strEjPtt($this, $1, $word_str + ($conv20 << 1) | 0, 9 - $spl_id_fr_027 & 65535) | 0) << 16 >> 16 != $sub18 << 16 >> 16) {
label = 1383;
break;
}
if ((__ZN10ime_pinyin12MatrixSearch16get_lemma_splidsEjPttb($this, $1, $add_ptr, $sub18, 1) | 0) << 16 >> 16 != $sub18 << 16 >> 16) {
$retval_0 = 0;
label = 1393;
break;
}
$add50 = $sub18 + $spl_id_fr_027 & 65535;
$inc = $pos_026 + 1 & 65535;
if (($inc & 65535) < ($lma_to & 65535)) {
$pos_026 = $inc;
$spl_id_fr_027 = $add50;
} else {
label = 1386;
break;
}
}
if ((label | 0) == 1386) {
if (($add50 & 65535) < 9) {
$spl_id_fr_0_lcssa30 = $add50;
break;
}
___assert_func(1184, 682, 6808, 944);
return 0;
} else if ((label | 0) == 1383) {
___assert_func(1184, 672, 6808, 1136);
return 0;
} else if ((label | 0) == 1393) {
STACKTOP = sp;
return $retval_0 | 0;
}
} else {
$spl_id_fr_0_lcssa30 = 0;
}
} while (0);
$7 = HEAP32[$user_dict_ >> 2] | 0;
$retval_0 = (FUNCTION_TABLE_iiiiii[HEAP32[(HEAP32[$7 >> 2] | 0) + 44 >> 2] & 15]($7, $word_str | 0, $spl_ids | 0, $spl_id_fr_0_lcssa30, 1) | 0) != 0;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch9match_dmiEjPtt($this, $step_to, $spl_ids, $spl_id_num) {
$this = $this | 0;
$step_to = $step_to | 0;
$spl_ids = $spl_ids | 0;
$spl_id_num = $spl_id_num | 0;
var $matrix_ = 0, $5 = 0, $dmi_pool_ = 0, $9 = 0, $conv19 = 0, $cmp2614 = 0, $sub = 0, $10 = 0, $dmi_pos_022 = 0, $add_ptr_sum = 0, $spl_pos_016 = 0, $dmi_015 = 0, $inc = 0, $inc49 = 0, $20 = 0, $retval_0 = 0, label = 0;
if ((HEAP32[$this + 72 >> 2] | 0) >>> 0 < $step_to >>> 0) {
$retval_0 = -1;
return $retval_0 | 0;
}
$matrix_ = $this + 96 | 0;
if ((HEAP16[(HEAP32[$matrix_ >> 2] | 0) + ($step_to * 12 | 0) + 6 >> 1] & 32767) == 0) {
$retval_0 = -1;
return $retval_0 | 0;
}
$5 = HEAP32[$matrix_ >> 2] | 0;
if ((HEAP16[$5 + ($step_to * 12 | 0) + 6 >> 1] & 32767) == 0) {
$retval_0 = -1;
return $retval_0 | 0;
}
$dmi_pool_ = $this + 88 | 0;
$9 = HEAP32[$dmi_pool_ >> 2] | 0;
$conv19 = $spl_id_num & 65535;
$cmp2614 = $spl_id_num << 16 >> 16 == 0;
$sub = $conv19 - 1 | 0;
$dmi_pos_022 = 0;
$10 = $5;
L1767 : while (1) {
$add_ptr_sum = (HEAPU16[$10 + ($step_to * 12 | 0) + 2 >> 1] | 0) + ($dmi_pos_022 & 65535) | 0;
L1769 : do {
if ((HEAP8[$9 + ($add_ptr_sum * 12 | 0) + 8 | 0] & 127 | 0) == ($conv19 | 0)) {
if ($cmp2614) {
break L1767;
}
$dmi_015 = $9 + ($add_ptr_sum * 12 | 0) | 0;
$spl_pos_016 = 0;
while (1) {
if ((HEAP16[$spl_ids + ($sub - ($spl_pos_016 & 65535) << 1) >> 1] | 0) != (HEAP16[$dmi_015 + 6 >> 1] | 0)) {
break L1769;
}
$inc = $spl_pos_016 + 1 & 65535;
if (($inc & 65535) < ($spl_id_num & 65535)) {
$dmi_015 = (HEAP32[$dmi_pool_ >> 2] | 0) + ((HEAPU16[$dmi_015 + 4 >> 1] | 0) * 12 | 0) | 0;
$spl_pos_016 = $inc;
} else {
break L1767;
}
}
}
} while (0);
$inc49 = $dmi_pos_022 + 1 & 65535;
$20 = HEAP32[$matrix_ >> 2] | 0;
if (($inc49 & 65535) < (HEAP16[$20 + ($step_to * 12 | 0) + 6 >> 1] & 32767)) {
$dmi_pos_022 = $inc49;
$10 = $20;
} else {
$retval_0 = -1;
label = 1410;
break;
}
}
if ((label | 0) == 1410) {
return $retval_0 | 0;
}
$retval_0 = (HEAP16[(HEAP32[$matrix_ >> 2] | 0) + ($step_to * 12 | 0) + 2 >> 1] | 0) + $dmi_pos_022 & 65535;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch12get_fixedlenEv($this) {
$this = $this | 0;
var $retval_0 = 0;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$this + 72 >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = HEAP32[$this + 896 >> 2] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch8fill_dmiEPNS_13DictMatchInfoEPtttthbhh($this, $dmi, $handles, $dmi_fr, $spl_id, $node_num, $dict_level, $splid_end_split, $splstr_len, $all_full_id) {
$this = $this | 0;
$dmi = $dmi | 0;
$handles = $handles | 0;
$dmi_fr = $dmi_fr | 0;
$spl_id = $spl_id | 0;
$node_num = $node_num | 0;
$dict_level = $dict_level | 0;
$splid_end_split = $splid_end_split | 0;
$splstr_len = $splstr_len | 0;
$all_full_id = $all_full_id | 0;
var $2 = 0, $9 = 0;
HEAP16[$dmi >> 1] = HEAP16[$handles >> 1] | 0;
HEAP16[$dmi + 2 >> 1] = HEAP16[$handles + 2 >> 1] | 0;
HEAP16[$dmi + 4 >> 1] = $dmi_fr;
HEAP16[$dmi + 6 >> 1] = $spl_id;
$2 = $dmi + 8 | 0;
HEAP8[$2] = HEAP8[$2] & -128 | $dict_level & 127;
HEAP8[$dmi + 9 | 0] = $splstr_len << 1 | $splid_end_split & 1;
$9 = $dmi + 10 | 0;
HEAP8[$9] = HEAP8[$9] & -2 | $all_full_id & 1;
HEAP8[$2] = HEAP8[$2] & 127;
return;
}
function __ZN10ime_pinyin12MatrixSearch16prepare_add_charEc($this, $ch) {
$this = $this | 0;
$ch = $ch | 0;
var $pys_decoded_len_ = 0, $dmi_pool_used_ = 0, $inc = 0, $5 = 0, $retval_0 = 0;
$pys_decoded_len_ = $this + 72 | 0;
if ((HEAP32[$pys_decoded_len_ >> 2] | 0) >>> 0 > 38) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin14SpellingParser17is_valid_to_parseEc(HEAP32[$this + 20 >> 2] | 0, $ch) | 0 | $ch << 24 >> 24 == 39)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$dmi_pool_used_ = $this + 92 | 0;
if ((HEAPU16[$dmi_pool_used_ >> 1] | 0) > 799) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP8[(HEAP32[$pys_decoded_len_ >> 2] | 0) + ($this + 32) | 0] = $ch;
$inc = (HEAP32[$pys_decoded_len_ >> 2] | 0) + 1 | 0;
HEAP32[$pys_decoded_len_ >> 2] = $inc;
$5 = HEAP32[$this + 96 >> 2] | 0;
HEAP16[$5 + ($inc * 12 | 0) >> 1] = HEAP16[$this + 84 >> 1] | 0;
HEAP16[$5 + ($inc * 12 | 0) + 4 >> 1] = 0;
HEAP16[$5 + ($inc * 12 | 0) + 2 >> 1] = HEAP16[$dmi_pool_used_ >> 1] | 0;
HEAP16[$5 + ($inc * 12 | 0) + 6 >> 1] = 0;
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch11is_split_atEt($this, $pos) {
$this = $this | 0;
$pos = $pos | 0;
return (__ZN10ime_pinyin14SpellingParser17is_valid_to_parseEc(HEAP32[$this + 20 >> 2] | 0, HEAP8[($pos & 65535) - 1 + ($this + 32) | 0] | 0) | 0) ^ 1 | 0;
}
function __ZN10ime_pinyin12MatrixSearch6chooseEj($this, $cand_id) {
$this = $this | 0;
$cand_id = $cand_id | 0;
var $lpi_item26 = 0, $lpi_item26_sub = 0, $tmpcast = 0, $pys_decoded_len_ = 0, $3 = 0, $idxprom = 0, $6 = 0, $fixed_lmas_ = 0, $8 = 0, $lma_id_num_ = 0, $9 = 0, $pos_028 = 0, $inc = 0, $10 = 0, $_lcssa = 0, $arrayidx19 = 0, $13 = 0, $15 = 0, $16 = 0, $dec = 0, $19 = 0, $bf_clear = 0, $20 = 0, $bf_clear43 = 0, $22 = 0, $24 = 0, $fixed_hzs_56 = 0, $25 = 0, $26 = 0, $conv63 = 0, $28 = 0, $matrix_66 = 0, $call72 = 0, $38 = 0, $40 = 0, $fixed_lmas_101 = 0, $43 = 0, $46 = 0, $step_to_0 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$lpi_item26 = sp | 0;
$lpi_item26_sub = $lpi_item26 | 0;
$tmpcast = $lpi_item26;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$pys_decoded_len_ = $this + 72 | 0;
if ((HEAP32[$pys_decoded_len_ >> 2] | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if (($cand_id | 0) == 0) {
$3 = HEAP32[$this + 732 >> 2] | 0;
HEAP32[$this + 896 >> 2] = $3;
$idxprom = HEAPU16[$this + 736 + ($3 << 1) >> 1] | 0;
$6 = HEAP32[$this + 96 >> 2] | 0;
HEAP32[$6 + ($idxprom * 12 | 0) + 8 >> 2] = (HEAP32[$this + 80 >> 2] | 0) + ((HEAPU16[$6 + ($idxprom * 12 | 0) >> 1] | 0) << 4);
$fixed_lmas_ = $this + 356 | 0;
$8 = HEAP32[$fixed_lmas_ >> 2] | 0;
$lma_id_num_ = $this + 112 | 0;
$9 = HEAP32[$lma_id_num_ >> 2] | 0;
if ($8 >>> 0 < $9 >>> 0) {
$pos_028 = $8;
while (1) {
HEAP8[$this + 360 + $pos_028 | 0] = 1;
$inc = $pos_028 + 1 | 0;
$10 = HEAP32[$lma_id_num_ >> 2] | 0;
if ($inc >>> 0 < $10 >>> 0) {
$pos_028 = $inc;
} else {
$_lcssa = $10;
break;
}
}
} else {
$_lcssa = $9;
}
HEAP32[$fixed_lmas_ >> 2] = $_lcssa;
HEAP32[$this + 12500 >> 2] = 0;
do {
if ((HEAP32[$lma_id_num_ >> 2] | 0) == 1) {
$arrayidx19 = $this + 196 | 0;
if (!(__ZN10ime_pinyin13is_user_lemmaEj(HEAP32[$arrayidx19 >> 2] | 0) | 0)) {
break;
}
$13 = HEAP32[$this + 16 >> 2] | 0;
if (($13 | 0) == 0) {
break;
}
$15 = HEAP32[(HEAP32[$13 >> 2] | 0) + 48 >> 2] | 0;
$16 = HEAP32[$arrayidx19 >> 2] | 0;
FUNCTION_TABLE_iiiii[$15 & 31]($13, $16, 1, 1) | 0;
} else {
if ((HEAP32[$this + 16 >> 2] | 0) == 0) {
break;
}
__ZN10ime_pinyin12MatrixSearch25try_add_cand0_to_userdictEv($this) | 0;
}
} while (0);
__ZN10ime_pinyin12MatrixSearch16update_dict_freqEv($this);
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
$dec = $cand_id - 1 | 0;
$19 = HEAP32[$this + 900 + ($dec << 3) >> 2] | 0;
$bf_clear = $19 & 16777215;
$20 = HEAP16[$this + 900 + ($dec << 3) + 4 >> 1] | 0;
$bf_clear43 = $19 >>> 24 & 15;
if (($bf_clear43 | 0) == 0) {
___assert_func(1184, 819, 6760, 3664);
return 0;
}
if (__ZN10ime_pinyin13is_user_lemmaEj($bf_clear) | 0) {
$22 = HEAP32[$this + 16 >> 2] | 0;
if (($22 | 0) != 0) {
$24 = HEAP32[(HEAP32[$22 >> 2] | 0) + 48 >> 2] | 0;
FUNCTION_TABLE_iiiii[$24 & 31]($22, $bf_clear, 1, 1) | 0;
}
__ZN10ime_pinyin12MatrixSearch16update_dict_freqEv($this);
}
$fixed_hzs_56 = $this + 896 | 0;
$25 = HEAP32[$fixed_hzs_56 >> 2] | 0;
$26 = HEAP16[$this + 736 + ($25 << 1) >> 1] | 0;
$conv63 = HEAPU16[$this + 736 + ($25 + $bf_clear43 << 1) >> 1] | 0;
$28 = HEAP32[$pys_decoded_len_ >> 2] | 0;
__ZN10ime_pinyin12MatrixSearch12reset_searchEjbbb($this, $conv63, 0, 0, 1) | 0;
$matrix_66 = $this + 96 | 0;
HEAP16[(HEAP32[$matrix_66 >> 2] | 0) + ($conv63 * 12 | 0) + 4 >> 1] = 0;
HEAP16[$lpi_item26 + 4 >> 1] = $20;
HEAP32[$lpi_item26_sub >> 2] = HEAP32[$lpi_item26_sub >> 2] & -16777216 | $bf_clear;
$call72 = __ZN10ime_pinyin12MatrixSearch9match_dmiEjPtt($this, $conv63, $this + 816 + (HEAP32[$fixed_hzs_56 >> 2] << 1) | 0, $bf_clear43 & 65535) | 0;
if ($call72 << 16 >> 16 == -1) {
___assert_func(1184, 851, 6760, 3552);
return 0;
}
__ZN10ime_pinyin12MatrixSearch14extend_mtrx_ndEPNS_10MatrixNodeEPNS_10LmaPsbItemEjtj($this, HEAP32[(HEAP32[$matrix_66 >> 2] | 0) + (($26 & 65535) * 12 | 0) + 8 >> 2] | 0, $tmpcast, 1, $call72, $conv63) | 0;
$38 = HEAP32[$matrix_66 >> 2] | 0;
HEAP32[$38 + ($conv63 * 12 | 0) + 8 >> 2] = (HEAP32[$this + 80 >> 2] | 0) + ((HEAPU16[$38 + ($conv63 * 12 | 0) >> 1] | 0) << 4);
$40 = HEAP32[$matrix_66 >> 2] | 0;
HEAP16[$this + 84 >> 1] = (HEAP16[$40 + ($conv63 * 12 | 0) + 4 >> 1] | 0) + (HEAP16[$40 + ($conv63 * 12 | 0) >> 1] | 0) & 65535;
$fixed_lmas_101 = $this + 356 | 0;
$43 = HEAP32[$fixed_lmas_101 >> 2] | 0;
HEAP8[$this + 360 + $43 | 0] = ($bf_clear | 0) == (HEAP32[$this + 196 + ($43 << 2) >> 2] | 0) | 0;
HEAP32[$this + 196 + (HEAP32[$fixed_lmas_101 >> 2] << 2) >> 2] = $bf_clear;
$46 = HEAP32[$fixed_lmas_101 >> 2] | 0;
HEAP16[$this + 116 + ($46 + 1 << 1) >> 1] = (HEAPU16[$this + 116 + ($46 << 1) >> 1] | 0) + $bf_clear43 & 65535;
HEAP32[$fixed_lmas_101 >> 2] = (HEAP32[$fixed_lmas_101 >> 2] | 0) + 1;
HEAP32[$fixed_hzs_56 >> 2] = (HEAP32[$fixed_hzs_56 >> 2] | 0) + $bf_clear43;
$step_to_0 = $conv63;
while (1) {
if (($step_to_0 | 0) == ($28 | 0)) {
break;
}
if (__ZN10ime_pinyin12MatrixSearch8add_charEc($this, HEAP8[$this + 32 + $step_to_0 | 0] | 0) | 0) {
$step_to_0 = $step_to_0 + 1 | 0;
} else {
label = 1452;
break;
}
}
if ((label | 0) == 1452) {
___assert_func(1184, 871, 6760, 3432);
return 0;
}
do {
if ((HEAP32[$fixed_hzs_56 >> 2] | 0) >>> 0 < (HEAP32[$this + 732 >> 2] | 0) >>> 0) {
__ZN10ime_pinyin12MatrixSearch18prepare_candidatesEv($this);
} else {
HEAP32[$this + 12500 >> 2] = 0;
if ((HEAP32[$this + 16 >> 2] | 0) == 0) {
break;
}
__ZN10ime_pinyin12MatrixSearch25try_add_cand0_to_userdictEv($this) | 0;
}
} while (0);
$retval_0 = __ZN10ime_pinyin12MatrixSearch17get_candidate_numEv($this) | 0;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch14extend_mtrx_ndEPNS_10MatrixNodeEPNS_10LmaPsbItemEjtj($this, $mtrx_nd, $lpi_items, $lpi_num, $dmi_fr, $res_row) {
$this = $this | 0;
$mtrx_nd = $mtrx_nd | 0;
$lpi_items = $lpi_items | 0;
$lpi_num = $lpi_num | 0;
$dmi_fr = $dmi_fr | 0;
$res_row = $res_row | 0;
var $matrix_ = 0, $lpi_num_addr_0 = 0, $3 = 0, $conv12 = 0, $add_ptr = 0, $score14 = 0, $conv50 = 0, $sub_ptr_rhs_cast = 0, $score20 = 0, $pos_039 = 0, $arrayidx15 = 0, $add = 0.0, $10 = 0, $conv28 = 0, $add_ptr_sum = 0, $add_ptr29 = 0, $replace_0_off036 = 0, $mtrx_nd_res_035 = 0, $add_ptr31 = 0, $12 = 0, $13 = 0, $mtrx_nd_res_0_lcssa45 = 0, $mtrx_nd_res_0_lcssa43 = 0, $mtrx_nd_num54 = 0, $19 = 0, $retval_0 = 0, label = 0;
if (($mtrx_nd | 0) == 0) {
___assert_func(1184, 1589, 7112, 2360);
return 0;
}
$matrix_ = $this + 96 | 0;
HEAP32[(HEAP32[$matrix_ >> 2] | 0) + ($res_row * 12 | 0) + 8 >> 2] = 0;
if ((HEAPU16[$this + 84 >> 1] | 0) > 194) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lpi_num_addr_0 = (HEAP16[$mtrx_nd + 14 >> 1] | 0) == 0 & $lpi_num >>> 0 > 5 ? 5 : $lpi_num;
$3 = HEAP32[$this + 80 >> 2] | 0;
$conv12 = HEAPU16[(HEAP32[$matrix_ >> 2] | 0) + ($res_row * 12 | 0) >> 1] | 0;
$add_ptr = $3 + ($conv12 << 4) | 0;
L1854 : do {
if (($lpi_num_addr_0 | 0) != 0) {
$score14 = $mtrx_nd + 4 | 0;
$conv50 = $res_row & 65535;
$sub_ptr_rhs_cast = $add_ptr;
$score20 = $3 + ($conv12 << 4) + 4 | 0;
$pos_039 = 0;
do {
$arrayidx15 = $lpi_items + ($pos_039 << 3) | 0;
$add = +HEAPF32[$score14 >> 2] + +(HEAPU16[$lpi_items + ($pos_039 << 3) + 4 >> 1] | 0);
if (($pos_039 | 0) != 0) {
if ($add + -8.0e3 > +HEAPF32[$score20 >> 2]) {
break L1854;
}
}
$10 = HEAP16[(HEAP32[$matrix_ >> 2] | 0) + ($res_row * 12 | 0) + 4 >> 1] | 0;
$conv28 = $10 & 65535;
$add_ptr_sum = $conv28 + $conv12 | 0;
$add_ptr29 = $3 + ($add_ptr_sum << 4) | 0;
L1861 : do {
if (($add_ptr_sum | 0) > ($conv12 | 0)) {
$mtrx_nd_res_035 = $add_ptr29;
$replace_0_off036 = 0;
while (1) {
$add_ptr31 = $mtrx_nd_res_035 - 16 | 0;
if ($add >= +HEAPF32[$mtrx_nd_res_035 - 16 + 4 >> 2]) {
break;
}
if ($mtrx_nd_res_035 - $sub_ptr_rhs_cast >> 4 >>> 0 < 5) {
$12 = $mtrx_nd_res_035;
$13 = $add_ptr31;
HEAP32[$12 >> 2] = HEAP32[$13 >> 2];
HEAP32[$12 + 4 >> 2] = HEAP32[$13 + 4 >> 2];
HEAP32[$12 + 8 >> 2] = HEAP32[$13 + 8 >> 2];
HEAP32[$12 + 12 >> 2] = HEAP32[$13 + 12 >> 2];
}
if ($add_ptr31 >>> 0 > $add_ptr >>> 0) {
$mtrx_nd_res_035 = $add_ptr31;
$replace_0_off036 = 1;
} else {
$mtrx_nd_res_0_lcssa43 = $add_ptr31;
label = 1478;
break L1861;
}
}
if ($replace_0_off036) {
$mtrx_nd_res_0_lcssa43 = $mtrx_nd_res_035;
label = 1478;
} else {
$mtrx_nd_res_0_lcssa45 = $mtrx_nd_res_035;
label = 1476;
}
} else {
$mtrx_nd_res_0_lcssa45 = $add_ptr29;
label = 1476;
}
} while (0);
do {
if ((label | 0) == 1476) {
label = 0;
if (($10 & 65535) >= 5) {
break;
}
if (((HEAPU16[(HEAP32[$matrix_ >> 2] | 0) + ($res_row * 12 | 0) >> 1] | 0) + $conv28 | 0) >>> 0 < 200) {
$mtrx_nd_res_0_lcssa43 = $mtrx_nd_res_0_lcssa45;
label = 1478;
}
}
} while (0);
do {
if ((label | 0) == 1478) {
label = 0;
HEAP32[$mtrx_nd_res_0_lcssa43 >> 2] = HEAP32[$arrayidx15 >> 2] & 16777215;
HEAPF32[$mtrx_nd_res_0_lcssa43 + 4 >> 2] = $add;
HEAP32[$mtrx_nd_res_0_lcssa43 + 8 >> 2] = $mtrx_nd;
HEAP16[$mtrx_nd_res_0_lcssa43 + 12 >> 1] = $dmi_fr;
HEAP16[$mtrx_nd_res_0_lcssa43 + 14 >> 1] = $conv50;
$mtrx_nd_num54 = (HEAP32[$matrix_ >> 2] | 0) + ($res_row * 12 | 0) + 4 | 0;
$19 = HEAP16[$mtrx_nd_num54 >> 1] | 0;
if (($19 & 65535) >= 5) {
break;
}
HEAP16[$mtrx_nd_num54 >> 1] = $19 + 1 & 65535;
}
} while (0);
$pos_039 = $pos_039 + 1 | 0;
} while ($pos_039 >>> 0 < $lpi_num_addr_0 >>> 0);
}
} while (0);
$retval_0 = HEAPU16[(HEAP32[$matrix_ >> 2] | 0) + ($res_row * 12 | 0) + 4 >> 1] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch18cancel_last_choiceEv($this) {
$this = $this | 0;
var $fixed_hzs_ = 0, $3 = 0, $6 = 0, $8 = 0, $conv7 = 0, $storemerge = 0, $step_start_0 = 0, $13 = 0, $retval_0 = 0, label = 0;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$this + 72 >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$fixed_hzs_ = $this + 896 | 0;
$3 = HEAP32[$fixed_hzs_ >> 2] | 0;
do {
if (($3 | 0) != 0) {
$6 = HEAP32[(HEAP32[$this + 96 >> 2] | 0) + ((HEAPU16[$this + 736 + ($3 << 1) >> 1] | 0) * 12 | 0) + 8 >> 2] | 0;
if (($6 | 0) == 0) {
___assert_func(1184, 895, 6888, 3280);
return 0;
}
$8 = HEAP16[(HEAP32[$6 + 8 >> 2] | 0) + 14 >> 1] | 0;
$conv7 = $8 & 65535;
if ($8 << 16 >> 16 == 0) {
$storemerge = 0;
} else {
$storemerge = $3 - (HEAP8[(HEAP32[$this + 88 >> 2] | 0) + ((HEAPU16[$6 + 12 >> 1] | 0) * 12 | 0) + 8 | 0] & 127) | 0;
}
HEAP32[$fixed_hzs_ >> 2] = $storemerge;
__ZN10ime_pinyin12MatrixSearch12reset_searchEjbbb($this, $conv7, 0, 0, 0) | 0;
$step_start_0 = $conv7;
while (1) {
$13 = HEAP8[$this + 32 + $step_start_0 | 0] | 0;
if ($13 << 24 >> 24 == 0) {
label = 1496;
break;
}
if (__ZN10ime_pinyin12MatrixSearch8add_charEc($this, $13) | 0) {
$step_start_0 = $step_start_0 + 1 | 0;
} else {
label = 1495;
break;
}
}
if ((label | 0) == 1495) {
___assert_func(1184, 910, 6888, 3432);
return 0;
} else if ((label | 0) == 1496) {
__ZN10ime_pinyin12MatrixSearch18prepare_candidatesEv($this);
break;
}
}
} while (0);
$retval_0 = __ZN10ime_pinyin12MatrixSearch17get_candidate_numEv($this) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch15add_char_qwertyEv($this) {
$this = $this | 0;
var $is_pre = 0, $pys_decoded_len_ = 0, $matrix_ = 0, $fixed_hzs_ = 0, $dmi_c_phrase_ = 0, $spl_parser_ = 0, $dmi_pool_ = 0, $dep_68 = 0, $spl_trie_ = 0, $dep_74 = 0, $spl_trie_194 = 0, $lpi_total_ = 0, $mtrx_nd_pool_ = 0, $arraydecay290 = 0, $dmi_pool_used_292 = 0, $dmi_c_phrase_217 = 0, $dmi_pool_used_236 = 0, $dmi_pool_used_ = 0, $dmi_c_phrase_147 = 0, $dep_ = 0, $dmi_c_phrase_116 = 0, $xi_an_enabled_ = 0, $conv117 = 0, $spl_matched_0_off0116 = 0, $longest_ext_0115 = 0, $ext_len_0112 = 0, $2 = 0, $11 = 0, $sub24 = 0, $conv25 = 0, $conv30 = 0, $call = 0, $spl_matched_0_off0_ = 0, $call54 = 0, $21 = 0, $22 = 0, $conv6096 = 0, $add72101 = 0, $frombool191 = 0, $add72107 = 0, $conv60106 = 0, $dmi_pos_0105 = 0, $longest_ext_1104 = 0, $26 = 0, $add_ptr77 = 0, $27 = 0, $dmi_0 = 0, $dep_77 = 0, $46 = 0, $bf_clear145 = 0, $49 = 0, $conv146 = 0, $d_081 = 0, $prev_ids_num_080 = 0, $dec = 0, $52 = 0, $add_ptr171 = 0, $prev_ids_num_1 = 0, $cmp14272 = 0, $dep_71 = 0, $56 = 0, $call200 = 0, $call212 = 0, $73 = 0, $79 = 0, $80 = 0, $88 = 0, $conv257 = 0, $fr_row_0 = 0, $idxprom269 = 0, $95 = 0, $96 = 0, $conv27482 = 0, $conv27491 = 0, $mtrx_nd_pos_090 = 0, $longest_ext_289 = 0, $ext_len_0_longest_ext_2 = 0, $inc = 0, $conv274 = 0, $102 = 0, $longest_ext_4 = 0, $inc305 = 0, $conv60 = 0, $105 = 0, $add72 = 0, $longest_ext_5 = 0, $spl_matched_2_off0 = 0, $dec308 = 0, $spl_matched_0_off0_lcssa = 0, $mtrx_nd_pool_used_ = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$is_pre = sp | 0;
$pys_decoded_len_ = $this + 72 | 0;
$matrix_ = $this + 96 | 0;
HEAP16[(HEAP32[$matrix_ >> 2] | 0) + ((HEAP32[$pys_decoded_len_ >> 2] | 0) * 12 | 0) + 4 >> 1] = 0;
$fixed_hzs_ = $this + 896 | 0;
$dmi_c_phrase_ = $this + 728 | 0;
$spl_parser_ = $this + 20 | 0;
$dmi_pool_ = $this + 88 | 0;
$dep_68 = $this + 100 | 0;
$spl_trie_ = $this + 4 | 0;
$dep_74 = $this + 100 | 0;
$spl_trie_194 = $this + 4 | 0;
$lpi_total_ = $this + 12500 | 0;
$mtrx_nd_pool_ = $this + 80 | 0;
$arraydecay290 = $this + 900 | 0;
$dmi_pool_used_292 = $this + 92 | 0;
$dmi_c_phrase_217 = $this + 728 | 0;
$dmi_pool_used_236 = $this + 92 | 0;
$dmi_pool_used_ = $this + 92 | 0;
$dmi_c_phrase_147 = $this + 728 | 0;
$dep_ = $this + 100 | 0;
$dmi_c_phrase_116 = $this + 728 | 0;
$xi_an_enabled_ = $this + 8 | 0;
$ext_len_0112 = 7;
$longest_ext_0115 = 0;
$spl_matched_0_off0116 = 0;
$conv117 = 7;
L1902 : while (1) {
$2 = HEAP32[$pys_decoded_len_ >> 2] | 0;
L1904 : do {
if ($conv117 >>> 0 > ($2 - (HEAPU16[$this + 736 + (HEAP32[$fixed_hzs_ >> 2] << 1) >> 1] | 0) | 0) >>> 0) {
$spl_matched_2_off0 = $spl_matched_0_off0116;
$longest_ext_5 = $longest_ext_0115;
} else {
do {
if (!(($ext_len_0112 & 65535) < 2 | $longest_ext_0115 << 16 >> 16 == 0)) {
if ((HEAP16[(HEAP32[$matrix_ >> 2] | 0) + (($2 - $conv117 | 0) * 12 | 0) + 6 >> 1] | 0) <= -1) {
break;
}
if ((HEAP8[$xi_an_enabled_] & 1) == 0) {
$spl_matched_0_off0_lcssa = $spl_matched_0_off0116;
label = 1550;
break L1902;
} else {
$spl_matched_2_off0 = $spl_matched_0_off0116;
$longest_ext_5 = $longest_ext_0115;
break L1904;
}
}
} while (0);
$11 = HEAP32[$pys_decoded_len_ >> 2] | 0;
$sub24 = $11 - $conv117 | 0;
$conv25 = $sub24 & 65535;
$conv30 = $sub24 & 65535;
if ((HEAPU16[$this + 736 + (HEAP32[$fixed_hzs_ >> 2] << 1) >> 1] | 0) >>> 0 > $conv30 >>> 0) {
$spl_matched_2_off0 = $spl_matched_0_off0116;
$longest_ext_5 = $longest_ext_0115;
break;
}
if ((HEAP16[(HEAP32[$matrix_ >> 2] | 0) + ($conv30 * 12 | 0) + 4 >> 1] | 0) == 0) {
if ((HEAP8[$dmi_c_phrase_] & 1) == 0) {
$spl_matched_2_off0 = $spl_matched_0_off0116;
$longest_ext_5 = $longest_ext_0115;
break;
}
}
HEAP8[$is_pre] = 0;
$call = __ZN10ime_pinyin14SpellingParser16get_splid_by_strEPKctPb(HEAP32[$spl_parser_ >> 2] | 0, $this + 32 + $conv30 | 0, $ext_len_0112, $is_pre) | 0;
$spl_matched_0_off0_ = $spl_matched_0_off0116 | (HEAP8[$is_pre] & 1) != 0;
if ($call << 16 >> 16 == 0) {
$spl_matched_2_off0 = $spl_matched_0_off0_;
$longest_ext_5 = $longest_ext_0115;
break;
}
$call54 = __ZN10ime_pinyin12MatrixSearch11is_split_atEt($this, $11 & 65535) | 0;
$21 = HEAP32[$matrix_ >> 2] | 0;
$22 = HEAP16[$21 + ($conv30 * 12 | 0) + 2 >> 1] | 0;
$conv6096 = $22 & 65535;
$add72101 = (HEAP16[$21 + ($conv30 * 12 | 0) + 6 >> 1] & 32767) + ($22 & 65535) | 0;
if (($conv6096 | 0) >= ($add72101 + 1 | 0)) {
$spl_matched_2_off0 = $spl_matched_0_off0_;
$longest_ext_5 = $longest_ext_0115;
break;
}
$frombool191 = $call54 & 1;
$longest_ext_1104 = $longest_ext_0115;
$dmi_pos_0105 = $22;
$conv60106 = $conv6096;
$add72107 = $add72101;
while (1) {
$26 = HEAP32[$dmi_pool_ >> 2] | 0;
$add_ptr77 = $26 + ($conv60106 * 12 | 0) | 0;
do {
if (($conv60106 | 0) == ($add72107 | 0)) {
$dmi_0 = 0;
label = 1518;
} else {
$27 = HEAP32[$fixed_hzs_ >> 2] | 0;
if (($27 | 0) != 0) {
if (((HEAP32[$pys_decoded_len_ >> 2] | 0) - $conv117 - ((HEAPU8[$26 + ($conv60106 * 12 | 0) + 9 | 0] | 0) >>> 1 & 255) | 0) >>> 0 < (HEAPU16[$this + 736 + ($27 << 1) >> 1] | 0) >>> 0) {
$longest_ext_4 = $longest_ext_1104;
break;
}
}
if ((HEAP8[$26 + ($conv60106 * 12 | 0) + 8 | 0] | 0) >= 0) {
$dmi_0 = $add_ptr77;
label = 1518;
break;
}
if ((HEAP8[$dmi_c_phrase_116] & 1) == 0) {
$longest_ext_4 = $longest_ext_1104;
} else {
$dmi_0 = $add_ptr77;
label = 1518;
}
}
} while (0);
L1924 : do {
if ((label | 0) == 1518) {
label = 0;
do {
if (($longest_ext_1104 & 65535) > ($ext_len_0112 & 65535)) {
if (($dmi_0 | 0) == 0) {
if ((HEAP16[(HEAP32[$matrix_ >> 2] | 0) + ($conv30 * 12 | 0) + 6 >> 1] | 0) > -1) {
$longest_ext_4 = $longest_ext_1104;
break L1924;
}
HEAP16[(HEAP32[$dep_68 >> 2] | 0) + 80 >> 1] = 0;
$dep_71 = $dep_68;
$cmp14272 = 1;
break;
} else {
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$spl_trie_ >> 2] | 0, HEAP16[$dmi_0 + 6 >> 1] | 0) | 0) {
$longest_ext_4 = $longest_ext_1104;
break L1924;
}
HEAP16[(HEAP32[$dep_74 >> 2] | 0) + 80 >> 1] = 0;
$dep_77 = $dep_74;
label = 1525;
break;
}
} else {
HEAP16[(HEAP32[$dep_ >> 2] | 0) + 80 >> 1] = 0;
if (($dmi_0 | 0) == 0) {
$dep_71 = $dep_;
$cmp14272 = 1;
} else {
$dep_77 = $dep_;
label = 1525;
}
}
} while (0);
if ((label | 0) == 1525) {
label = 0;
$46 = $dmi_0 + 8 | 0;
$bf_clear145 = HEAP8[$46] & 127;
$49 = HEAP8[$dmi_c_phrase_147] & 1;
if ($49 << 24 >> 24 == 0 & ($bf_clear145 & 255) > 7) {
$longest_ext_4 = $longest_ext_1104;
break;
}
$conv146 = $bf_clear145 & 255;
if ($49 << 24 >> 24 != 0 & ($bf_clear145 & 255) > 39) {
$longest_ext_4 = $longest_ext_1104;
break;
}
L1938 : do {
if (($dmi_0 | 0) == 0) {
$prev_ids_num_1 = $conv146;
} else {
$prev_ids_num_080 = $conv146;
$d_081 = $dmi_0;
while (1) {
$dec = $prev_ids_num_080 - 1 & 65535;
HEAP16[(HEAP32[$dep_77 >> 2] | 0) + (($dec & 65535) << 1) >> 1] = HEAP16[$d_081 + 6 >> 1] | 0;
$52 = HEAP16[$d_081 + 4 >> 1] | 0;
if ($52 << 16 >> 16 == -1) {
$prev_ids_num_1 = $dec;
break L1938;
}
$add_ptr171 = (HEAP32[$dmi_pool_ >> 2] | 0) + (($52 & 65535) * 12 | 0) | 0;
if (($add_ptr171 | 0) == 0) {
$prev_ids_num_1 = $dec;
break;
} else {
$prev_ids_num_080 = $dec;
$d_081 = $add_ptr171;
}
}
}
} while (0);
if ($prev_ids_num_1 << 16 >> 16 != 0) {
label = 1531;
break L1902;
}
HEAP16[(HEAP32[$dep_77 >> 2] | 0) + 80 >> 1] = HEAP8[$46] & 127;
$dep_71 = $dep_77;
$cmp14272 = 0;
}
$56 = HEAP32[$dep_71 >> 2] | 0;
HEAP16[$56 + (HEAPU16[$56 + 80 >> 1] << 1) >> 1] = $call;
HEAP16[(HEAP32[$dep_71 >> 2] | 0) + 82 >> 1] = $ext_len_0112;
HEAP8[(HEAP32[$dep_71 >> 2] | 0) + 86 | 0] = $frombool191;
HEAP16[(HEAP32[$dep_71 >> 2] | 0) + 90 >> 1] = 1;
HEAP16[(HEAP32[$dep_71 >> 2] | 0) + 88 >> 1] = $call;
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$spl_trie_194 >> 2] | 0, $call) | 0) {
$call200 = __ZNK10ime_pinyin12SpellingTrie12half_to_fullEtPt(HEAP32[$spl_trie_194 >> 2] | 0, $call, (HEAP32[$dep_71 >> 2] | 0) + 88 | 0) | 0;
HEAP16[(HEAP32[$dep_71 >> 2] | 0) + 90 >> 1] = $call200;
if ((HEAP16[(HEAP32[$dep_71 >> 2] | 0) + 90 >> 1] | 0) == 0) {
label = 1535;
break L1902;
}
}
$call212 = __ZN10ime_pinyin12MatrixSearch10extend_dmiEPNS_11DictExtParaEPNS_13DictMatchInfoE($this, HEAP32[$dep_71 >> 2] | 0, $dmi_0) | 0;
do {
if (($call212 & 65535 | 0) != 0) {
if ((HEAP8[$dmi_c_phrase_217] & 1) != 0) {
$73 = (HEAP32[$dmi_pool_ >> 2] | 0) + ((HEAPU16[$dmi_pool_used_ >> 1] | 0) * 12 | 0) + 8 | 0;
HEAP8[$73] = HEAP8[$73] | -128;
}
$79 = (HEAP32[$matrix_ >> 2] | 0) + ((HEAP32[$pys_decoded_len_ >> 2] | 0) * 12 | 0) + 6 | 0;
$80 = HEAP16[$79 >> 1] | 0;
HEAP16[$79 >> 1] = ($80 & 65535) + $call212 & 32767 | $80 & -32768;
HEAP16[$dmi_pool_used_236 >> 1] = (HEAPU16[$dmi_pool_used_236 >> 1] | 0) + $call212 & 65535;
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$spl_trie_194 >> 2] | 0, $call) | 0) {
break;
}
$88 = (HEAP32[$matrix_ >> 2] | 0) + ((HEAP32[$pys_decoded_len_ >> 2] | 0) * 12 | 0) + 6 | 0;
HEAP16[$88 >> 1] = HEAP16[$88 >> 1] | -32768;
}
} while (0);
if ((HEAP32[$lpi_total_ >> 2] | 0) == 0) {
$longest_ext_4 = $longest_ext_1104;
break;
}
if ($cmp14272) {
$fr_row_0 = $conv25;
} else {
$conv257 = (HEAPU8[$dmi_0 + 9 | 0] | 0) >>> 1 & 255;
if ($conv30 >>> 0 < $conv257 >>> 0) {
label = 1544;
break L1902;
}
$fr_row_0 = $sub24 - $conv257 & 65535;
}
$idxprom269 = $fr_row_0 & 65535;
$95 = HEAP32[$matrix_ >> 2] | 0;
$96 = HEAP16[$95 + ($idxprom269 * 12 | 0) >> 1] | 0;
$conv27482 = $96 & 65535;
if (($conv27482 | 0) < ((HEAPU16[$95 + ($idxprom269 * 12 | 0) + 4 >> 1] | 0) + ($96 & 65535) | 0)) {
$longest_ext_289 = $longest_ext_1104;
$mtrx_nd_pos_090 = $96;
$conv27491 = $conv27482;
} else {
$longest_ext_4 = $longest_ext_1104;
break;
}
while (1) {
__ZN10ime_pinyin12MatrixSearch14extend_mtrx_ndEPNS_10MatrixNodeEPNS_10LmaPsbItemEjtj($this, (HEAP32[$mtrx_nd_pool_ >> 2] | 0) + ($conv27491 << 4) | 0, $arraydecay290, HEAP32[$lpi_total_ >> 2] | 0, (HEAPU16[$dmi_pool_used_292 >> 1] | 0) - $call212 & 65535, HEAP32[$pys_decoded_len_ >> 2] | 0) | 0;
$ext_len_0_longest_ext_2 = $longest_ext_289 << 16 >> 16 == 0 ? $ext_len_0112 : $longest_ext_289;
$inc = $mtrx_nd_pos_090 + 1 & 65535;
$conv274 = $inc & 65535;
$102 = HEAP32[$matrix_ >> 2] | 0;
if (($conv274 | 0) < ((HEAPU16[$102 + ($idxprom269 * 12 | 0) + 4 >> 1] | 0) + (HEAPU16[$102 + ($idxprom269 * 12 | 0) >> 1] | 0) | 0)) {
$longest_ext_289 = $ext_len_0_longest_ext_2;
$mtrx_nd_pos_090 = $inc;
$conv27491 = $conv274;
} else {
$longest_ext_4 = $ext_len_0_longest_ext_2;
break;
}
}
}
} while (0);
$inc305 = $dmi_pos_0105 + 1 & 65535;
$conv60 = $inc305 & 65535;
$105 = HEAP32[$matrix_ >> 2] | 0;
$add72 = (HEAP16[$105 + ($conv30 * 12 | 0) + 6 >> 1] & 32767) + (HEAPU16[$105 + ($conv30 * 12 | 0) + 2 >> 1] | 0) | 0;
if (($conv60 | 0) < ($add72 + 1 | 0)) {
$longest_ext_1104 = $longest_ext_4;
$dmi_pos_0105 = $inc305;
$conv60106 = $conv60;
$add72107 = $add72;
} else {
$spl_matched_2_off0 = $spl_matched_0_off0_;
$longest_ext_5 = $longest_ext_4;
break;
}
}
}
} while (0);
$dec308 = $ext_len_0112 - 1 & 65535;
if ($dec308 << 16 >> 16 == 0) {
$spl_matched_0_off0_lcssa = $spl_matched_2_off0;
label = 1550;
break;
} else {
$ext_len_0112 = $dec308;
$longest_ext_0115 = $longest_ext_5;
$spl_matched_0_off0116 = $spl_matched_2_off0;
$conv117 = $dec308 & 65535;
}
}
if ((label | 0) == 1535) {
___assert_func(1184, 1082, 7056, 3088);
return 0;
} else if ((label | 0) == 1531) {
___assert_func(1184, 1070, 7056, 3176);
return 0;
} else if ((label | 0) == 1550) {
$mtrx_nd_pool_used_ = $this + 84 | 0;
HEAP16[$mtrx_nd_pool_used_ >> 1] = (HEAP16[$mtrx_nd_pool_used_ >> 1] | 0) + (HEAP16[(HEAP32[$matrix_ >> 2] | 0) + ((HEAP32[$pys_decoded_len_ >> 2] | 0) * 12 | 0) + 4 >> 1] | 0) & 65535;
if ((HEAP8[$this + 728 | 0] & 1) != 0) {
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
$retval_0 = $spl_matched_0_off0_lcssa | (HEAP16[(HEAP32[$matrix_ >> 2] | 0) + ((HEAP32[$pys_decoded_len_ >> 2] | 0) * 12 | 0) + 4 >> 1] | 0) != 0;
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 1544) {
___assert_func(1184, 1106, 7056, 3056);
return 0;
}
return 0;
}
function __ZN10ime_pinyin12MatrixSearch10extend_dmiEPNS_11DictExtParaEPNS_13DictMatchInfoE($this, $dep, $dmi_s) {
$this = $this | 0;
$dep = $dep | 0;
$dmi_s = $dmi_s | 0;
var $lpi_num = 0, $handles = 0, $dmi_pool_used_ = 0, $call4 = 0, $splids_extended = 0, $3 = 0, $4 = 0, $cached_0_off0 = 0, $lpi_total_ = 0, $from_h_sroa_1_0 = 0, $from_h_sroa_0_0 = 0, $arrayidx23 = 0, $arrayidx24 = 0, $cmp28 = 0, $8 = 0, $call31 = 0, $12 = 0, $15 = 0, $call55 = 0, $20 = 0, $21 = 0, $add_ptr79 = 0, $tobool83 = 0, $conv84 = 0, $add91 = 0, $tobool94 = 0, $add100 = 0, $cond107_off0 = 0, $ret_val_0 = 0, $38 = 0, $arraydecay118 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$lpi_num = sp | 0;
$handles = sp + 8 | 0;
$dmi_pool_used_ = $this + 92 | 0;
if ((HEAPU16[$dmi_pool_used_ >> 1] | 0) > 799) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if ((HEAP8[$this + 728 | 0] & 1) != 0) {
$retval_0 = __ZN10ime_pinyin12MatrixSearch12extend_dmi_cEPNS_11DictExtParaEPNS_13DictMatchInfoE($this, $dep, $dmi_s) | 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$call4 = __ZN10ime_pinyin8LpiCache12get_instanceEv() | 0;
$splids_extended = $dep + 80 | 0;
$3 = HEAP16[$splids_extended >> 1] | 0;
$4 = HEAP16[$dep + (($3 & 65535) << 1) >> 1] | 0;
if ($3 << 16 >> 16 == 0) {
$cached_0_off0 = __ZN10ime_pinyin8LpiCache9is_cachedEt($call4, $4) | 0;
} else {
$cached_0_off0 = 0;
}
$lpi_total_ = $this + 12500 | 0;
HEAP32[$lpi_total_ >> 2] = 0;
if ((HEAP16[$splids_extended >> 1] | 0) == 0) {
$from_h_sroa_0_0 = 0;
$from_h_sroa_1_0 = 0;
} else {
$from_h_sroa_0_0 = HEAP16[$dmi_s >> 1] | 0;
$from_h_sroa_1_0 = HEAP16[$dmi_s + 2 >> 1] | 0;
}
HEAP32[$lpi_num >> 2] = 0;
$arrayidx23 = $handles + 2 | 0;
HEAP16[$arrayidx23 >> 1] = 0;
$arrayidx24 = $handles | 0;
HEAP16[$arrayidx24 >> 1] = 0;
$cmp28 = ($dmi_s | 0) == 0;
do {
if ($from_h_sroa_0_0 << 16 >> 16 != 0 | $cmp28) {
$8 = HEAP32[$this + 12 >> 2] | 0;
$call31 = FUNCTION_TABLE_iiiiiii[HEAP32[(HEAP32[$8 >> 2] | 0) + 24 >> 2] & 15]($8, $from_h_sroa_0_0, $dep, $this + 900 | 0, 1450, $lpi_num) | 0;
HEAP16[$arrayidx24 >> 1] = $call31;
if ($call31 << 16 >> 16 == 0) {
break;
}
HEAP32[$lpi_total_ >> 2] = HEAP32[$lpi_num >> 2];
}
} while (0);
$12 = HEAP32[$this + 16 >> 2] | 0;
do {
if (($12 | 0) != 0) {
if (!($from_h_sroa_1_0 << 16 >> 16 != 0 | $cmp28)) {
break;
}
$15 = HEAP32[$lpi_total_ >> 2] | 0;
$call55 = FUNCTION_TABLE_iiiiiii[HEAP32[(HEAP32[$12 >> 2] | 0) + 24 >> 2] & 15]($12, $from_h_sroa_1_0, $dep, $this + 900 + ($15 << 3) | 0, 1450 - $15 | 0, $lpi_num) | 0;
HEAP16[$arrayidx23 >> 1] = $call55;
if ($call55 << 16 >> 16 == 0) {
break;
}
HEAP32[$lpi_total_ >> 2] = (HEAP32[$lpi_total_ >> 2] | 0) + (HEAP32[$lpi_num >> 2] | 0);
}
} while (0);
if ((HEAP16[$arrayidx24 >> 1] | 0) == 0) {
if ((HEAP16[$arrayidx23 >> 1] | 0) == 0) {
$ret_val_0 = 0;
} else {
label = 1571;
}
} else {
label = 1571;
}
do {
if ((label | 0) == 1571) {
$20 = HEAP16[$dmi_pool_used_ >> 1] | 0;
if (($20 & 65535) > 799) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$21 = HEAP32[$this + 88 >> 2] | 0;
$add_ptr79 = $21 + (($20 & 65535) * 12 | 0) | 0;
if ($cmp28) {
$tobool83 = (HEAP8[$dep + 86 | 0] & 1) != 0;
$conv84 = HEAP16[$dep + 82 >> 1] & 255;
__ZN10ime_pinyin12MatrixSearch8fill_dmiEPNS_13DictMatchInfoEPtttthbhh(0, $add_ptr79, $arrayidx24, -1, $4, 0, 1, $tobool83, $conv84, (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$this + 4 >> 2] | 0, $4) | 0) & 1 ^ 1);
$ret_val_0 = 1;
break;
}
$add91 = (HEAP8[$dmi_s + 8 | 0] & 127) + 1 & 255;
$tobool94 = (HEAP8[$dep + 86 | 0] & 1) != 0;
$add100 = (HEAP16[$dep + 82 >> 1] & 255) + ((HEAPU8[$dmi_s + 9 | 0] | 0) >>> 1) & 255;
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$this + 4 >> 2] | 0, $4) | 0) {
$cond107_off0 = 0;
} else {
$cond107_off0 = HEAP8[$dmi_s + 10 | 0] & 1;
}
__ZN10ime_pinyin12MatrixSearch8fill_dmiEPNS_13DictMatchInfoEPtttthbhh(0, $add_ptr79, $arrayidx24, (($dmi_s - $21 | 0) / 12 | 0) & 65535, $4, 0, $add91, $tobool94, $add100, $cond107_off0);
$ret_val_0 = 1;
}
} while (0);
if ($cached_0_off0) {
if (!(__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$this + 4 >> 2] | 0, $4) | 0)) {
___assert_func(1184, 1545, 7376, 2520);
return 0;
}
HEAP32[$lpi_total_ >> 2] = __ZN10ime_pinyin8LpiCache9get_cacheEtPNS_10LmaPsbItemEj($call4, $4, $this + 900 | 0, 1450) | 0;
$retval_0 = $ret_val_0;
STACKTOP = sp;
return $retval_0 | 0;
}
$38 = HEAP32[$lpi_total_ >> 2] | 0;
if (($38 | 0) == 0) {
$retval_0 = $ret_val_0;
STACKTOP = sp;
return $retval_0 | 0;
}
$arraydecay118 = $this + 900 | 0;
__ZN10ime_pinyin12MatrixSearch20QsortLmaPsbItemByPsbEPNS_10LmaPsbItemEj(0, $arraydecay118, $38);
if (!$cmp28) {
$retval_0 = $ret_val_0;
STACKTOP = sp;
return $retval_0 | 0;
}
if (!(__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$this + 4 >> 2] | 0, $4) | 0)) {
$retval_0 = $ret_val_0;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP32[$lpi_total_ >> 2] = __ZN10ime_pinyin8LpiCache9put_cacheEtPNS_10LmaPsbItemEj($call4, $4, $arraydecay118, HEAP32[$lpi_total_ >> 2] | 0) | 0;
$retval_0 = $ret_val_0;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin7compareEPKvS1_($a, $b) {
$a = $a | 0;
$b = $b | 0;
return (HEAP32[$a >> 2] | 0) - (HEAP32[$b >> 2] | 0) | 0;
}
function __ZN10ime_pinyin11comp_doubleEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $1 = 0.0, $3 = 0.0, $retval_0 = 0;
$1 = +HEAPF64[$p1 >> 3];
$3 = +HEAPF64[$p2 >> 3];
if ($1 < $3) {
$retval_0 = -1;
return $retval_0 | 0;
}
$retval_0 = $1 > $3 | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch9get_pystrEPj($this, $decoded_len) {
$this = $this | 0;
$decoded_len = $decoded_len | 0;
var $retval_0 = 0;
if ((HEAP8[$this | 0] & 1) == 0 | ($decoded_len | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP32[$decoded_len >> 2] = HEAP32[$this + 72 >> 2];
$retval_0 = $this + 32 | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch20QsortLmaPsbItemByPsbEPNS_10LmaPsbItemEj($this, $lma_buf, $num) {
$this = $this | 0;
$lma_buf = $lma_buf | 0;
$num = $num | 0;
var $0$0 = 0, $call = 0, $4 = 0, $pos_023 = 0, $6$0 = 0, $call3 = 0, $10 = 0, $11 = 0, $mul = 0, $index_021 = 0, $15 = 0, $16 = 0, $17$1 = 0;
$0$0 = _llvm_umul_with_overflow_i32($num | 0, 4) | 0;
$call = __Znaj(tempRet0 ? -1 : $0$0) | 0;
$4 = $call;
if (($num | 0) != 0) {
$pos_023 = 0;
do {
HEAP32[$4 + ($pos_023 << 2) >> 2] = (HEAPU16[$lma_buf + ($pos_023 << 3) + 4 >> 1] | 0) << 15 | $pos_023;
$pos_023 = $pos_023 + 1 | 0;
} while ($pos_023 >>> 0 < $num >>> 0);
}
_qsort2($call | 0, $num | 0, 4, 36);
$6$0 = _llvm_umul_with_overflow_i32($num | 0, 8) | 0;
$call3 = __Znaj(tempRet0 ? -1 : $6$0) | 0;
$10 = $call3;
$11 = $lma_buf | 0;
$mul = $num << 3;
_memcpy($call3 | 0, $11 | 0, $mul) | 0;
if (($num | 0) != 0) {
$index_021 = 0;
do {
$15 = $10 + ((HEAP32[$4 + ($index_021 << 2) >> 2] & 32767) << 3) | 0;
$16 = $lma_buf + ($index_021 << 3) | 0;
$17$1 = HEAP32[$15 + 4 >> 2] | 0;
HEAP32[$16 >> 2] = HEAP32[$15 >> 2];
HEAP32[$16 + 4 >> 2] = $17$1;
$index_021 = $index_021 + 1 | 0;
} while ($index_021 >>> 0 < $num >>> 0);
}
if (($call | 0) != 0) {
__ZdaPv($call);
}
if (($call3 | 0) == 0) {
return;
}
__ZdaPv($call3);
return;
}
function __ZN10ime_pinyin12MatrixSearch22QsortLmaPsbItemByHanziEPNS_10LmaPsbItemEj($this, $lma_buf, $num) {
$this = $this | 0;
$lma_buf = $lma_buf | 0;
$num = $num | 0;
var $0$0 = 0, $call = 0, $4 = 0, $pos_023 = 0, $6$0 = 0, $call3 = 0, $10 = 0, $11 = 0, $mul = 0, $index_021 = 0, $15 = 0, $16 = 0, $17$1 = 0;
$0$0 = _llvm_umul_with_overflow_i32($num | 0, 4) | 0;
$call = __Znaj(tempRet0 ? -1 : $0$0) | 0;
$4 = $call;
if (($num | 0) != 0) {
$pos_023 = 0;
do {
HEAP32[$4 + ($pos_023 << 2) >> 2] = ((HEAPU16[$lma_buf + ($pos_023 << 3) + 6 >> 1] | 0) << 15) + $pos_023;
$pos_023 = $pos_023 + 1 | 0;
} while ($pos_023 >>> 0 < $num >>> 0);
}
_qsort2($call | 0, $num | 0, 4, 36);
$6$0 = _llvm_umul_with_overflow_i32($num | 0, 8) | 0;
$call3 = __Znaj(tempRet0 ? -1 : $6$0) | 0;
$10 = $call3;
$11 = $lma_buf | 0;
$mul = $num << 3;
_memcpy($call3 | 0, $11 | 0, $mul) | 0;
if (($num | 0) != 0) {
$index_021 = 0;
do {
$15 = $10 + ((HEAP32[$4 + ($index_021 << 2) >> 2] & 32767) << 3) | 0;
$16 = $lma_buf + ($index_021 << 3) | 0;
$17$1 = HEAP32[$15 + 4 >> 2] | 0;
HEAP32[$16 >> 2] = HEAP32[$15 >> 2];
HEAP32[$16 + 4 >> 2] = $17$1;
$index_021 = $index_021 + 1 | 0;
} while ($index_021 >>> 0 < $num >>> 0);
}
if (($call | 0) != 0) {
__ZdaPv($call);
}
if (($call3 | 0) == 0) {
return;
}
__ZdaPv($call3);
return;
}
function __ZN10ime_pinyin12MatrixSearch13get_spl_startERPKt($this, $spl_start) {
$this = $this | 0;
$spl_start = $spl_start | 0;
__ZN10ime_pinyin12MatrixSearch16get_spl_start_idEv($this);
HEAP32[$spl_start >> 2] = $this + 736;
return HEAP32[$this + 732 >> 2] | 0;
}
function __ZN10ime_pinyin12MatrixSearch13inner_predictEPKttPA8_tj($this, $fixed_buf, $fixed_len, $predict_buf, $buf_len) {
$this = $this | 0;
$fixed_buf = $fixed_buf | 0;
$fixed_len = $fixed_len | 0;
$predict_buf = $predict_buf | 0;
$buf_len = $buf_len | 0;
var $npre_items_ = 0, $npre_items_len_ = 0, $conv = 0, $cmp4 = 0, $dict_trie_24 = 0, $user_dict_ = 0, $dict_trie_ = 0, $dict_trie_17 = 0, $len_051 = 0, $res_total_050 = 0, $sub = 0, $nlen_0 = 0, $nearest_n_word_0_off0 = 0, $res_total_1 = 0, $sub23 = 0, $8 = 0, $add_ptr28 = 0, $conv29 = 0, $call32 = 0, $12 = 0, $add_ptr44_sum = 0, $res_this_0 = 0, $add51 = 0, $dec = 0, $res_total_0_lcssa = 0, $call55 = 0, $buf_len_call55 = 0, $i_048 = 0;
$npre_items_ = $this + 104 | 0;
$npre_items_len_ = $this + 108 | 0;
_memset(HEAP32[$npre_items_ >> 2] | 0, 0, (HEAP32[$npre_items_len_ >> 2] | 0) * 20 | 0 | 0);
$conv = $fixed_len & 65535;
if ($fixed_len << 16 >> 16 == 0) {
$res_total_0_lcssa = 0;
} else {
$cmp4 = ($fixed_len & 65535) > 1;
$dict_trie_24 = $this + 12 | 0;
$user_dict_ = $this + 16 | 0;
$dict_trie_ = $this + 12 | 0;
$dict_trie_17 = $this + 12 | 0;
$res_total_050 = 0;
$len_051 = $conv;
while (1) {
$sub = (HEAP32[$npre_items_len_ >> 2] | 0) - $res_total_050 | 0;
if ($cmp4 & ($len_051 | 0) == 1 & ($res_total_050 | 0) == 0) {
$nlen_0 = 2;
while (1) {
if ($nlen_0 >>> 0 > $conv >>> 0) {
$nearest_n_word_0_off0 = 0;
break;
}
if ((__ZN10ime_pinyin8DictTrie12get_lemma_idEPKtt(HEAP32[$dict_trie_ >> 2] | 0, $fixed_buf + ($conv - $nlen_0 << 1) | 0, $nlen_0 & 65535) | 0) == 0) {
$nlen_0 = $nlen_0 + 1 | 0;
} else {
$nearest_n_word_0_off0 = $len_051;
break;
}
}
$res_total_1 = (__ZN10ime_pinyin8DictTrie16predict_top_lmasEjPNS_12NPredictItemEjj(HEAP32[$dict_trie_17 >> 2] | 0, $nearest_n_word_0_off0, (HEAP32[$npre_items_ >> 2] | 0) + ($res_total_050 * 20 | 0) | 0, $sub, $res_total_050) | 0) + $res_total_050 | 0;
} else {
$res_total_1 = $res_total_050;
}
$sub23 = (HEAP32[$npre_items_len_ >> 2] | 0) - $res_total_1 | 0;
$8 = HEAP32[$dict_trie_24 >> 2] | 0;
$add_ptr28 = $fixed_buf + ($conv - $len_051 << 1) | 0;
$conv29 = $len_051 & 65535;
$call32 = FUNCTION_TABLE_iiiiiii[HEAP32[(HEAP32[$8 >> 2] | 0) + 40 >> 2] & 15]($8, $add_ptr28, $conv29, (HEAP32[$npre_items_ >> 2] | 0) + ($res_total_1 * 20 | 0) | 0, $sub23, $res_total_1) | 0;
$12 = HEAP32[$user_dict_ >> 2] | 0;
if (($12 | 0) == 0) {
$res_this_0 = $call32;
} else {
$add_ptr44_sum = $call32 + $res_total_1 | 0;
$res_this_0 = (FUNCTION_TABLE_iiiiiii[HEAP32[(HEAP32[$12 >> 2] | 0) + 40 >> 2] & 15]($12, $add_ptr28, $conv29, (HEAP32[$npre_items_ >> 2] | 0) + ($add_ptr44_sum * 20 | 0) | 0, $sub23 - $call32 | 0, $add_ptr44_sum) | 0) + $call32 | 0;
}
$add51 = $res_this_0 + $res_total_1 | 0;
$dec = $len_051 - 1 | 0;
if (($dec | 0) == 0) {
$res_total_0_lcssa = $add51;
break;
} else {
$res_total_050 = $add51;
$len_051 = $dec;
}
}
}
$call55 = __ZN10ime_pinyin21remove_duplicate_npreEPNS_12NPredictItemEj(HEAP32[$npre_items_ >> 2] | 0, $res_total_0_lcssa) | 0;
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E(HEAP32[$npre_items_ >> 2] | 0, $call55, 20, 4);
$buf_len_call55 = $call55 >>> 0 > $buf_len >>> 0 ? $buf_len : $call55;
if (($buf_len_call55 | 0) == 0) {
return $buf_len_call55 | 0;
} else {
$i_048 = 0;
}
do {
_utf16_strncpy($predict_buf + ($i_048 << 4) | 0, (HEAP32[$npre_items_ >> 2] | 0) + ($i_048 * 20 | 0) + 4 | 0, 7) | 0;
HEAP16[$predict_buf + ($i_048 << 4) + 14 >> 1] = 0;
$i_048 = $i_048 + 1 | 0;
} while ($i_048 >>> 0 < $buf_len_call55 >>> 0);
return $buf_len_call55 | 0;
}
function __ZN10ime_pinyin12MatrixSearch12get_predictsEPKtPA8_tj($this, $fixed_buf, $predict_buf, $buf_len) {
$this = $this | 0;
$fixed_buf = $fixed_buf | 0;
$predict_buf = $predict_buf | 0;
$buf_len = $buf_len | 0;
var $call = 0, $retval_0 = 0;
$call = _utf16_strlen($fixed_buf) | 0;
if (($call | 0) == 0 | $call >>> 0 > 7 | ($buf_len | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12MatrixSearch13inner_predictEPKttPA8_tj($this, $fixed_buf, $call & 65535, $predict_buf, $buf_len) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin15qsearch_nearestEPddii($code_book, $freq, $start, $end) {
$code_book = $code_book | 0;
$freq = +$freq;
$start = $start | 0;
$end = $end | 0;
var $end_tr23 = 0, $start_tr22 = 0, $call = 0.0, $div = 0, $cmp11 = 0, $start_tr_div = 0, $div_end_tr = 0, $retval_0 = 0, label = 0;
if (($start | 0) == ($end | 0)) {
$retval_0 = $start;
return $retval_0 | 0;
} else {
$start_tr22 = $start;
$end_tr23 = $end;
}
while (1) {
if (($start_tr22 + 1 | 0) == ($end_tr23 | 0)) {
break;
}
$div = ($end_tr23 + $start_tr22 | 0) / 2 | 0;
$cmp11 = +HEAPF64[$code_book + ($div << 3) >> 3] > $freq;
$start_tr_div = $cmp11 ? $start_tr22 : $div;
$div_end_tr = $cmp11 ? $div : $end_tr23;
if (($start_tr_div | 0) == ($div_end_tr | 0)) {
$retval_0 = $start_tr_div;
label = 1654;
break;
} else {
$start_tr22 = $start_tr_div;
$end_tr23 = $div_end_tr;
}
}
if ((label | 0) == 1654) {
return $retval_0 | 0;
}
$call = +__ZN10ime_pinyin8distanceEdd($freq, +HEAPF64[$code_book + ($end_tr23 << 3) >> 3]);
$retval_0 = $call > +__ZN10ime_pinyin8distanceEdd($freq, +HEAPF64[$code_book + ($start_tr22 << 3) >> 3]) ? $start_tr22 : $end_tr23;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8distanceEdd($freq, $code) {
$freq = +$freq;
$code = +$code;
var $call = 0.0;
$call = +Math_log(+$freq);
return +(+Math_abs(+($call - +Math_log(+$code))) * $freq);
}
function __ZN10ime_pinyin15update_code_idxEPdjS0_Ph($freqs, $num, $code_book, $code_idx) {
$freqs = $freqs | 0;
$num = $num | 0;
$code_book = $code_book | 0;
$code_idx = $code_idx | 0;
var $changed_010 = 0, $pos_09 = 0, $conv = 0, $arrayidx2 = 0, $changed_0_inc = 0, $inc6 = 0, $changed_0_lcssa = 0;
if (($num | 0) == 0) {
$changed_0_lcssa = 0;
return $changed_0_lcssa | 0;
} else {
$pos_09 = 0;
$changed_010 = 0;
}
while (1) {
$conv = (__ZN10ime_pinyin15qsearch_nearestEPddii($code_book, +HEAPF64[$freqs + ($pos_09 << 3) >> 3], 0, 255) | 0) & 255;
$arrayidx2 = $code_idx + $pos_09 | 0;
$changed_0_inc = ((HEAP8[$arrayidx2] | 0) != $conv << 24 >> 24) + $changed_010 | 0;
HEAP8[$arrayidx2] = $conv;
$inc6 = $pos_09 + 1 | 0;
if ($inc6 >>> 0 < $num >>> 0) {
$pos_09 = $inc6;
$changed_010 = $changed_0_inc;
} else {
$changed_0_lcssa = $changed_0_inc;
break;
}
}
return $changed_0_lcssa | 0;
}
function __ZN10ime_pinyin13iterate_codesEPdjS0_Ph($freqs, $num, $code_book, $code_idx) {
$freqs = $freqs | 0;
$num = $num | 0;
$code_book = $code_book | 0;
$code_idx = $code_idx | 0;
var $delta_last_0 = 0.0, $iter_num_0 = 0, $call1 = 0.0, $call3 = 0.0, label = 0;
$iter_num_0 = 1;
$delta_last_0 = 0.0;
while (1) {
__ZN10ime_pinyin15update_code_idxEPdjS0_Ph($freqs, $num, $code_book, $code_idx) | 0;
$call1 = +__ZN10ime_pinyin18recalculate_kernelEPdjS0_Ph($freqs, $num, $code_book, $code_idx);
if ($iter_num_0 >>> 0 > 1) {
if ($call1 == 0.0) {
label = 1668;
break;
}
$call3 = +Math_abs(+($delta_last_0 - $call1));
if ($call3 / +Math_abs(+$call1) < 1.0e-9) {
label = 1667;
break;
}
}
$iter_num_0 = $iter_num_0 + 1 | 0;
$delta_last_0 = $call1;
}
if ((label | 0) == 1668) {
return;
} else if ((label | 0) == 1667) {
return;
}
}
function __ZN10ime_pinyin5NGramC2Ev($this) {
$this = $this | 0;
HEAP8[$this | 0] = 0;
HEAP32[$this + 4 >> 2] = 0;
_memset($this + 12 | 0, 0, 16);
return;
}
function __ZN10ime_pinyin12MatrixSearch8get_lpisEPKtjPNS_10LmaPsbItemEjS2_b($this, $splid_str, $splid_str_len, $lma_buf, $max_lma_buf, $pfullsent, $sort_by_psb) {
$this = $this | 0;
$splid_str = $splid_str | 0;
$splid_str_len = $splid_str_len | 0;
$lma_buf = $lma_buf | 0;
$max_lma_buf = $max_lma_buf | 0;
$pfullsent = $pfullsent | 0;
$sort_by_psb = $sort_by_psb | 0;
var $hanzis = 0, $0 = 0, $conv = 0, $call = 0, $3 = 0, $num2_0 = 0, $add = 0, $arraydecay83 = 0, $add_ptr15 = 0, $6 = 0, $div = 0, $div_add = 0, $pos_0105 = 0, $arrayidx22 = 0, $8 = 0, $9 = 0, $10$1 = 0, $cmp61 = 0, $pos26_0102 = 0, $remain_num_0101 = 0, $sub34 = 0, $18 = 0, $19 = 0, $20$1 = 0, $23 = 0, $24 = 0, $25$1 = 0, $remain_num_1 = 0, $inc75 = 0, $pos77_0115 = 0, $cmp149 = 0, $arrayidx151 = 0, $cmp106 = 0, $arrayidx108 = 0, $pos91_0111 = 0, $remain_num90_0110 = 0, $hanzi98 = 0, $29 = 0, $sub100 = 0, $sub133 = 0, $39 = 0, $40 = 0, $41$1 = 0, $47 = 0, $48 = 0, $49$1 = 0, $remain_num90_1 = 0, $inc167 = 0, $num_1 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$hanzis = sp | 0;
if ($splid_str_len >>> 0 > 8) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$0 = HEAP32[$this + 12 >> 2] | 0;
$conv = $splid_str_len & 65535;
$call = FUNCTION_TABLE_iiiiii[HEAP32[(HEAP32[$0 >> 2] | 0) + 28 >> 2] & 15]($0, $splid_str, $conv, $lma_buf, $max_lma_buf) | 0;
$3 = HEAP32[$this + 16 >> 2] | 0;
if (($3 | 0) == 0) {
$num2_0 = 0;
} else {
$num2_0 = FUNCTION_TABLE_iiiiii[HEAP32[(HEAP32[$3 >> 2] | 0) + 28 >> 2] & 15]($3, $splid_str, $conv, $lma_buf + ($call << 3) | 0, $max_lma_buf - $call | 0) | 0;
}
$add = $num2_0 + $call | 0;
if (($add | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
L2134 : do {
if ($splid_str_len >>> 0 > 1) {
$add_ptr15 = $lma_buf + ($add << 3) | 0;
$6 = $add_ptr15;
$div = ($max_lma_buf - $add << 3 >>> 0) / 28 | 0;
if ($div >>> 0 <= $add >>> 0) {
___assert_func(1184, 1760, 6648, 2304);
return 0;
}
$div_add = $add >>> 0 > $div >>> 0 ? $div : $add;
if (($div_add | 0) == 0) {
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E($add_ptr15 | 0, $div_add, 28, 26);
$num_1 = 0;
break;
} else {
$pos_0105 = 0;
}
do {
$arrayidx22 = $lma_buf + ($pos_0105 << 3) | 0;
$8 = $arrayidx22;
$9 = $6 + ($pos_0105 * 28 | 0) | 0;
$10$1 = HEAP32[$8 + 4 >> 2] | 0;
HEAP32[$9 >> 2] = HEAP32[$8 >> 2];
HEAP32[$9 + 4 >> 2] = $10$1;
__ZN10ime_pinyin12MatrixSearch13get_lemma_strEjPtt($this, HEAP32[$arrayidx22 >> 2] & 16777215, $6 + ($pos_0105 * 28 | 0) + 8 | 0, 9) | 0;
$pos_0105 = $pos_0105 + 1 | 0;
} while ($pos_0105 >>> 0 < $div_add >>> 0);
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E($add_ptr15 | 0, $div_add, 28, 26);
if (($div_add | 0) == 0) {
$num_1 = 0;
break;
}
$cmp61 = ($pfullsent | 0) == 0;
$remain_num_0101 = 0;
$pos26_0102 = 0;
L2145 : while (1) {
do {
if (($pos26_0102 | 0) == 0) {
label = 1691;
} else {
$sub34 = $pos26_0102 - 1 | 0;
if ((_utf16_strcmp($6 + ($pos26_0102 * 28 | 0) + 8 | 0, $6 + ($sub34 * 28 | 0) + 8 | 0) | 0) != 0) {
label = 1691;
break;
}
if ((HEAPU16[$6 + ($pos26_0102 * 28 | 0) + 4 >> 1] | 0) >= (HEAPU16[$6 + ($sub34 * 28 | 0) + 4 >> 1] | 0)) {
$remain_num_1 = $remain_num_0101;
break;
}
if (($remain_num_0101 | 0) == 0) {
break L2145;
}
$18 = $6 + ($pos26_0102 * 28 | 0) | 0;
$19 = $lma_buf + ($remain_num_0101 - 1 << 3) | 0;
$20$1 = HEAP32[$18 + 4 >> 2] | 0;
HEAP32[$19 >> 2] = HEAP32[$18 >> 2];
HEAP32[$19 + 4 >> 2] = $20$1;
$remain_num_1 = $remain_num_0101;
}
} while (0);
do {
if ((label | 0) == 1691) {
label = 0;
if (!$cmp61) {
if ((_utf16_strcmp($6 + ($pos26_0102 * 28 | 0) + 8 | 0, $pfullsent) | 0) == 0) {
$remain_num_1 = $remain_num_0101;
break;
}
}
$23 = $6 + ($pos26_0102 * 28 | 0) | 0;
$24 = $lma_buf + ($remain_num_0101 << 3) | 0;
$25$1 = HEAP32[$23 + 4 >> 2] | 0;
HEAP32[$24 >> 2] = HEAP32[$23 >> 2];
HEAP32[$24 + 4 >> 2] = $25$1;
$remain_num_1 = $remain_num_0101 + 1 | 0;
}
} while (0);
$inc75 = $pos26_0102 + 1 | 0;
if ($inc75 >>> 0 < $div_add >>> 0) {
$remain_num_0101 = $remain_num_1;
$pos26_0102 = $inc75;
} else {
$num_1 = $remain_num_1;
break L2134;
}
}
___assert_func(1184, 1775, 6648, 2248);
return 0;
} else {
if (($add | 0) == 0) {
__ZN10ime_pinyin12MatrixSearch22QsortLmaPsbItemByHanziEPNS_10LmaPsbItemEj(0, $lma_buf, $add);
$num_1 = 0;
break;
}
$arraydecay83 = $hanzis | 0;
$pos77_0115 = 0;
do {
__ZN10ime_pinyin12MatrixSearch13get_lemma_strEjPtt($this, HEAP32[$lma_buf + ($pos77_0115 << 3) >> 2] & 16777215, $arraydecay83, 2) | 0;
HEAP16[$lma_buf + ($pos77_0115 << 3) + 6 >> 1] = HEAP16[$arraydecay83 >> 1] | 0;
$pos77_0115 = $pos77_0115 + 1 | 0;
} while ($pos77_0115 >>> 0 < $add >>> 0);
__ZN10ime_pinyin12MatrixSearch22QsortLmaPsbItemByHanziEPNS_10LmaPsbItemEj(0, $lma_buf, $add);
if (($add | 0) == 0) {
$num_1 = 0;
break;
}
$cmp149 = ($pfullsent | 0) == 0;
$arrayidx151 = $pfullsent + 2 | 0;
$cmp106 = ($pfullsent | 0) == 0;
$arrayidx108 = $pfullsent + 2 | 0;
$remain_num90_0110 = 0;
$pos91_0111 = 0;
L2167 : while (1) {
L2169 : do {
if (($pos91_0111 | 0) == 0) {
label = 1709;
} else {
$hanzi98 = $lma_buf + ($pos91_0111 << 3) + 6 | 0;
$29 = HEAP16[$hanzi98 >> 1] | 0;
$sub100 = $pos91_0111 - 1 | 0;
if ($29 << 16 >> 16 != (HEAP16[$lma_buf + ($sub100 << 3) + 6 >> 1] | 0)) {
label = 1709;
break;
}
do {
if (!$cmp106) {
if ((HEAP16[$arrayidx108 >> 1] | 0) != 0) {
break;
}
if ($29 << 16 >> 16 == (HEAP16[$pfullsent >> 1] | 0)) {
$remain_num90_1 = $remain_num90_0110;
break L2169;
}
}
} while (0);
if ((HEAPU16[$lma_buf + ($pos91_0111 << 3) + 4 >> 1] | 0) >= (HEAPU16[$lma_buf + ($sub100 << 3) + 4 >> 1] | 0)) {
$remain_num90_1 = $remain_num90_0110;
break;
}
if (($remain_num90_0110 | 0) == 0) {
label = 1705;
break L2167;
}
$sub133 = $remain_num90_0110 - 1 | 0;
if ((HEAP16[$lma_buf + ($sub133 << 3) + 6 >> 1] | 0) != (HEAP16[$hanzi98 >> 1] | 0)) {
label = 1707;
break L2167;
}
$39 = $lma_buf + ($pos91_0111 << 3) | 0;
$40 = $lma_buf + ($sub133 << 3) | 0;
$41$1 = HEAP32[$39 + 4 >> 2] | 0;
HEAP32[$40 >> 2] = HEAP32[$39 >> 2];
HEAP32[$40 + 4 >> 2] = $41$1;
$remain_num90_1 = $remain_num90_0110;
}
} while (0);
L2179 : do {
if ((label | 0) == 1709) {
label = 0;
do {
if (!$cmp149) {
if ((HEAP16[$arrayidx151 >> 1] | 0) != 0) {
break;
}
if ((HEAP16[$lma_buf + ($pos91_0111 << 3) + 6 >> 1] | 0) == (HEAP16[$pfullsent >> 1] | 0)) {
$remain_num90_1 = $remain_num90_0110;
break L2179;
}
}
} while (0);
$47 = $lma_buf + ($pos91_0111 << 3) | 0;
$48 = $lma_buf + ($remain_num90_0110 << 3) | 0;
$49$1 = HEAP32[$47 + 4 >> 2] | 0;
HEAP32[$48 >> 2] = HEAP32[$47 >> 2];
HEAP32[$48 + 4 >> 2] = $49$1;
$remain_num90_1 = $remain_num90_0110 + 1 | 0;
}
} while (0);
$inc167 = $pos91_0111 + 1 | 0;
if ($inc167 >>> 0 < $add >>> 0) {
$remain_num90_0110 = $remain_num90_1;
$pos91_0111 = $inc167;
} else {
$num_1 = $remain_num90_1;
break L2134;
}
}
if ((label | 0) == 1705) {
___assert_func(1184, 1811, 6648, 2248);
return 0;
} else if ((label | 0) == 1707) {
___assert_func(1184, 1812, 6648, 2144);
return 0;
}
}
} while (0);
if (!$sort_by_psb) {
$retval_0 = $num_1;
STACKTOP = sp;
return $retval_0 | 0;
}
__ZN10ime_pinyin12MatrixSearch20QsortLmaPsbItemByPsbEPNS_10LmaPsbItemEj(0, $lma_buf, $num_1);
$retval_0 = $num_1;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12MatrixSearch12extend_dmi_cEPNS_11DictExtParaEPNS_13DictMatchInfoE($this, $dep, $dmi_s) {
$this = $this | 0;
$dep = $dep | 0;
$dmi_s = $dmi_s | 0;
var $lpi_total_ = 0, $2 = 0, $conv = 0, $length = 0, $4 = 0, $6 = 0, $add_ptr = 0, $arraydecay = 0, $tobool13 = 0, $conv14 = 0, $add = 0, $tobool22 = 0, $add28 = 0, $cond38_off0 = 0, $25 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$lpi_total_ = $this + 12500 | 0;
HEAP32[$lpi_total_ >> 2] = 0;
if ((HEAP8[$this + 728 | 0] & 1) == 0) {
___assert_func(1184, 1556, 7296, 2440);
return 0;
}
$2 = HEAP16[$dep + 80 >> 1] | 0;
$conv = $2 & 65535;
$length = $this + 724 | 0;
if (($2 & 65535) >= (HEAPU16[$length >> 1] | 0)) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$4 = HEAP16[$dep + ($conv << 1) >> 1] | 0;
if ($4 << 16 >> 16 != (HEAP16[$this + 400 + ($conv << 1) >> 1] | 0)) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$6 = HEAP32[$this + 88 >> 2] | 0;
$add_ptr = $6 + ((HEAPU16[$this + 92 >> 1] | 0) * 12 | 0) | 0;
$arraydecay = sp | 0;
if (($dmi_s | 0) == 0) {
$tobool13 = (HEAP8[$dep + 86 | 0] & 1) != 0;
$conv14 = HEAP16[$dep + 82 >> 1] & 255;
__ZN10ime_pinyin12MatrixSearch8fill_dmiEPNS_13DictMatchInfoEPtttthbhh(0, $add_ptr, $arraydecay, -1, $4, 0, 1, $tobool13, $conv14, (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$this + 4 >> 2] | 0, $4) | 0) & 1 ^ 1);
} else {
$add = (HEAP8[$dmi_s + 8 | 0] & 127) + 1 & 255;
$tobool22 = (HEAP8[$dep + 86 | 0] & 1) != 0;
$add28 = (HEAP16[$dep + 82 >> 1] & 255) + ((HEAPU8[$dmi_s + 9 | 0] | 0) >>> 1) & 255;
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt(HEAP32[$this + 4 >> 2] | 0, $4) | 0) {
$cond38_off0 = 0;
} else {
$cond38_off0 = HEAP8[$dmi_s + 10 | 0] & 1;
}
__ZN10ime_pinyin12MatrixSearch8fill_dmiEPNS_13DictMatchInfoEPtttthbhh(0, $add_ptr, $arraydecay, (($dmi_s - $6 | 0) / 12 | 0) & 65535, $4, 0, $add, $tobool22, $add28, $cond38_off0);
}
if (($conv | 0) != ((HEAPU16[$length >> 1] | 0) - 1 | 0)) {
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
$25 = $this + 900 | 0;
HEAP32[$25 >> 2] = HEAP32[$25 >> 2] | 16777215;
HEAP16[$this + 904 >> 1] = 0;
HEAP32[$lpi_total_ >> 2] = 1;
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin18recalculate_kernelEPdjS0_Ph($freqs, $num, $code_book, $code_idx) {
$freqs = $freqs | 0;
$num = $num | 0;
$code_book = $code_book | 0;
$code_idx = $code_idx | 0;
var $call = 0, $0 = 0, $tobool = 0, $call1 = 0, $1 = 0, $tobool2 = 0, $ret_0_lcssa = 0.0, $pos_029 = 0, $ret_028 = 0.0, $2 = 0.0, $arrayidx6 = 0, $idxprom = 0, $add = 0.0, $arrayidx12 = 0, $arrayidx16 = 0, $inc = 0, $code_026 = 0, $8 = 0, label = 0;
$call = __Znaj(1024) | 0;
$0 = $call;
$tobool = ($call | 0) == 0;
if ($tobool) {
___assert_func(4024, 79, 6240, 4232);
return 0.0;
}
_memset($call | 0, 0, 1024);
$call1 = __Znaj(2048) | 0;
$1 = $call1;
$tobool2 = ($call1 | 0) == 0;
if ($tobool2) {
___assert_func(4024, 83, 6240, 2920);
return 0.0;
}
_memset($call1 | 0, 0, 2048);
if (($num | 0) == 0) {
$ret_0_lcssa = 0.0;
} else {
$ret_028 = 0.0;
$pos_029 = 0;
while (1) {
$2 = +HEAPF64[$freqs + ($pos_029 << 3) >> 3];
$arrayidx6 = $code_idx + $pos_029 | 0;
$idxprom = HEAPU8[$arrayidx6] | 0;
$add = $ret_028 + +__ZN10ime_pinyin8distanceEdd($2, +HEAPF64[$code_book + ($idxprom << 3) >> 3]);
$arrayidx12 = $1 + ($idxprom << 3) | 0;
HEAPF64[$arrayidx12 >> 3] = $2 + +HEAPF64[$arrayidx12 >> 3];
$arrayidx16 = $0 + ((HEAPU8[$arrayidx6] | 0) << 2) | 0;
HEAP32[$arrayidx16 >> 2] = (HEAP32[$arrayidx16 >> 2] | 0) + 1;
$inc = $pos_029 + 1 | 0;
if ($inc >>> 0 < $num >>> 0) {
$ret_028 = $add;
$pos_029 = $inc;
} else {
$ret_0_lcssa = $add;
break;
}
}
}
$code_026 = 0;
do {
$8 = HEAP32[$0 + ($code_026 << 2) >> 2] | 0;
if (($8 | 0) == 0) {
label = 1745;
break;
}
HEAPF64[$code_book + ($code_026 << 3) >> 3] = +HEAPF64[$1 + ($code_026 << 3) >> 3] / +($8 >>> 0 >>> 0);
$code_026 = $code_026 + 1 | 0;
} while ($code_026 >>> 0 < 256);
if ((label | 0) == 1745) {
___assert_func(4024, 94, 6240, 2008);
return 0.0;
}
if (!$tobool) {
__ZdaPv($call);
}
if ($tobool2) {
return +$ret_0_lcssa;
}
__ZdaPv($call1);
return +$ret_0_lcssa;
}
function __ZN10ime_pinyin15is_system_lemmaEj($lma_id) {
$lma_id = $lma_id | 0;
return $lma_id >>> 0 < 500001 & ($lma_id | 0) != 0 | 0;
}
function __ZN10ime_pinyin13is_user_lemmaEj($lma_id) {
$lma_id = $lma_id | 0;
return ($lma_id - 500001 | 0) >>> 0 < 1e5 | 0;
}
function __ZN10ime_pinyin18is_composing_lemmaEj($lma_id) {
$lma_id = $lma_id | 0;
return ($lma_id | 0) == 16777215 | 0;
}
function __ZN10ime_pinyin15align_to_size_tEj($size) {
$size = $size | 0;
return $size + 3 & -4 | 0;
}
function __ZN10ime_pinyin15cmp_lpi_with_idEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $bf_clear = 0, $bf_clear1 = 0, $retval_0 = 0;
$bf_clear = HEAP32[$p1 >> 2] & 16777215;
$bf_clear1 = HEAP32[$p2 >> 2] & 16777215;
if ($bf_clear >>> 0 < $bf_clear1 >>> 0) {
$retval_0 = -1;
return $retval_0 | 0;
}
$retval_0 = $bf_clear >>> 0 > $bf_clear1 >>> 0 | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12cmp_hanzis_1EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $1 = 0, $3 = 0, $retval_0 = 0;
$1 = HEAP16[$p1 >> 1] | 0;
$3 = HEAP16[$p2 >> 1] | 0;
if (($1 & 65535) < ($3 & 65535)) {
$retval_0 = -1;
return $retval_0 | 0;
}
$retval_0 = ($1 & 65535) > ($3 & 65535) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin17cmp_npre_by_scoreEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $0 = 0.0, $1 = 0.0, $retval_0 = 0;
$0 = +HEAPF32[$p1 >> 2];
$1 = +HEAPF32[$p2 >> 2];
if ($0 > $1) {
$retval_0 = 1;
return $retval_0 | 0;
}
$retval_0 = ($0 < $1) << 31 >> 31;
return $retval_0 | 0;
}
function __ZN10ime_pinyin5NGram11get_uni_psbEj($this, $lma_id) {
$this = $this | 0;
$lma_id = $lma_id | 0;
return +(+((HEAPU16[(HEAP32[$this + 20 >> 2] | 0) + ((HEAPU8[(HEAP32[$this + 24 >> 2] | 0) + $lma_id | 0] | 0) << 1) >> 1] | 0) >>> 0) + +HEAPF32[$this + 12 >> 2]);
}
function __ZN10ime_pinyin16cmp_lpi_with_psbEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $1 = 0, $3 = 0, $retval_0 = 0;
$1 = HEAP16[$p1 + 4 >> 1] | 0;
$3 = HEAP16[$p2 + 4 >> 1] | 0;
if (($1 & 65535) > ($3 & 65535)) {
$retval_0 = 1;
return $retval_0 | 0;
}
$retval_0 = (($1 & 65535) < ($3 & 65535)) << 31 >> 31;
return $retval_0 | 0;
}
function __ZN10ime_pinyin24cmp_lpi_with_unified_psbEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $mul = 0, $mul4 = 0, $retval_0 = 0;
$mul = Math_imul((HEAP32[$p2 >> 2] | 0) >>> 24 & 15, HEAPU16[$p1 + 4 >> 1] | 0) | 0;
$mul4 = Math_imul((HEAP32[$p1 >> 2] | 0) >>> 24 & 15, HEAPU16[$p2 + 4 >> 1] | 0) | 0;
if ($mul >>> 0 < $mul4 >>> 0) {
$retval_0 = -1;
return $retval_0 | 0;
}
$retval_0 = $mul >>> 0 > $mul4 >>> 0 | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin18cmp_lpi_with_hanziEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $1 = 0, $3 = 0, $retval_0 = 0;
$1 = HEAP16[$p1 + 6 >> 1] | 0;
$3 = HEAP16[$p2 + 6 >> 1] | 0;
if (($1 & 65535) < ($3 & 65535)) {
$retval_0 = -1;
return $retval_0 | 0;
}
$retval_0 = ($1 & 65535) > ($3 & 65535) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin24cmp_npre_by_hislen_scoreEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $1 = 0, $3 = 0, $4 = 0.0, $5 = 0.0, $retval_0 = 0;
$1 = HEAP16[$p1 + 18 >> 1] | 0;
$3 = HEAP16[$p2 + 18 >> 1] | 0;
do {
if (($1 & 65535) < ($3 & 65535)) {
$retval_0 = 1;
} else {
if (($1 & 65535) > ($3 & 65535)) {
$retval_0 = -1;
break;
}
$4 = +HEAPF32[$p1 >> 2];
$5 = +HEAPF32[$p2 >> 2];
if ($4 > $5) {
$retval_0 = 1;
break;
}
$retval_0 = ($4 < $5) << 31 >> 31;
}
} while (0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin5NGramD2Ev($this) {
$this = $this | 0;
var $0 = 0, $1 = 0, $3 = 0;
$0 = HEAP32[$this + 24 >> 2] | 0;
if (($0 | 0) != 0) {
_free($0);
}
$1 = HEAP32[$this + 16 >> 2] | 0;
if (($1 | 0) != 0) {
_free($1);
}
$3 = HEAP32[$this + 20 >> 2] | 0;
if (($3 | 0) == 0) {
return;
}
_free($3);
return;
}
function __ZN10ime_pinyin5NGram12get_instanceEv() {
var $1 = 0;
if ((HEAP32[11854] | 0) == 0) {
$1 = __Znwj(28) | 0;
__ZN10ime_pinyin5NGramC2Ev($1);
HEAP32[11854] = $1;
}
return HEAP32[11854] | 0;
}
function __ZN10ime_pinyin5NGram10save_ngramEP7__sFILE($this, $fp) {
$this = $this | 0;
$fp = $fp | 0;
var $idx_num_ = 0, $freq_codes_ = 0, $lma_freq_idx_ = 0, $call20 = 0, $retval_0 = 0;
if ((HEAP8[$this | 0] & 1) == 0 | ($fp | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$idx_num_ = $this + 4 | 0;
if ((HEAP32[$idx_num_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$freq_codes_ = $this + 20 | 0;
if ((HEAP32[$freq_codes_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lma_freq_idx_ = $this + 24 | 0;
if ((HEAP32[$lma_freq_idx_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fwrite($idx_num_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fwrite(HEAP32[$freq_codes_ >> 2] | 0, 2, 256, $fp | 0) | 0) != 256) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call20 = _fwrite(HEAP32[$lma_freq_idx_ >> 2] | 0, 1, HEAP32[$idx_num_ >> 2] | 0, $fp | 0) | 0;
$retval_0 = ($call20 | 0) == (HEAP32[$idx_num_ >> 2] | 0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin5NGram10load_ngramEP7__sFILE($this, $fp) {
$this = $this | 0;
$fp = $fp | 0;
var $initialized_ = 0, $idx_num_ = 0, $lma_freq_idx_ = 0, $1 = 0, $freq_codes_ = 0, $2 = 0, $call16 = 0, $call31 = 0, $retval_0 = 0;
if (($fp | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$initialized_ = $this | 0;
HEAP8[$initialized_] = 0;
$idx_num_ = $this + 4 | 0;
if ((_fread($idx_num_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$lma_freq_idx_ = $this + 24 | 0;
$1 = HEAP32[$lma_freq_idx_ >> 2] | 0;
if (($1 | 0) != 0) {
_free($1);
}
$freq_codes_ = $this + 20 | 0;
$2 = HEAP32[$freq_codes_ >> 2] | 0;
if (($2 | 0) != 0) {
_free($2);
}
HEAP32[$lma_freq_idx_ >> 2] = _malloc(HEAP32[$idx_num_ >> 2] | 0) | 0;
$call16 = _malloc(512) | 0;
HEAP32[$freq_codes_ >> 2] = $call16;
if ((HEAP32[$lma_freq_idx_ >> 2] | 0) == 0 | ($call16 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fread($call16 | 0, 2, 256, $fp | 0) | 0) != 256) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call31 = _fread(HEAP32[$lma_freq_idx_ >> 2] | 0, 1, HEAP32[$idx_num_ >> 2] | 0, $fp | 0) | 0;
if (($call31 | 0) != (HEAP32[$idx_num_ >> 2] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP8[$initialized_] = 1;
HEAP32[$this + 8 >> 2] = 0;
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin5NGram23set_total_freq_none_sysEj($this, $freq_none_sys) {
$this = $this | 0;
$freq_none_sys = $freq_none_sys | 0;
HEAP32[$this + 8 >> 2] = $freq_none_sys;
if (($freq_none_sys | 0) == 0) {
HEAPF32[$this + 12 >> 2] = 0.0;
return;
} else {
HEAPF32[$this + 12 >> 2] = +Math_log(+(1.0e8 / +(($freq_none_sys + 1e8 | 0) >>> 0 >>> 0))) * -800.0;
return;
}
}
function __ZN10ime_pinyin5NGram20convert_psb_to_scoreEd($psb) {
$psb = +$psb;
var $conv = 0.0;
$conv = +Math_log(+$psb) * -800.0;
return +($conv > 16383.0 ? 16383.0 : $conv);
}
function __ZN10ime_pinyin17cmp_lpsi_with_strEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _utf16_strcmp($p1 + 8 | 0, $p2 + 8 | 0) | 0;
}
function __ZN10ime_pinyin12cmp_hanzis_2EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _utf16_strncmp($p1, $p2, 2) | 0;
}
function __ZN10ime_pinyin12cmp_hanzis_3EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _utf16_strncmp($p1, $p2, 3) | 0;
}
function __ZN10ime_pinyin12cmp_hanzis_4EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _utf16_strncmp($p1, $p2, 4) | 0;
}
function __ZN10ime_pinyin12cmp_hanzis_5EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _utf16_strncmp($p1, $p2, 5) | 0;
}
function __ZN10ime_pinyin12cmp_hanzis_6EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _utf16_strncmp($p1, $p2, 6) | 0;
}
function __ZN10ime_pinyin12cmp_hanzis_7EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _utf16_strncmp($p1, $p2, 7) | 0;
}
function __ZN10ime_pinyin12cmp_hanzis_8EPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _utf16_strncmp($p1, $p2, 8) | 0;
}
function __ZN10ime_pinyin23cmp_npre_by_hanzi_scoreEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $call = 0, $0 = 0.0, $1 = 0.0, $retval_0 = 0;
$call = _utf16_strncmp($p1 + 4 | 0, $p2 + 4 | 0, 7) | 0;
if (($call | 0) != 0) {
$retval_0 = $call;
return $retval_0 | 0;
}
$0 = +HEAPF32[$p1 >> 2];
$1 = +HEAPF32[$p2 >> 2];
if ($0 > $1) {
$retval_0 = 1;
return $retval_0 | 0;
}
$retval_0 = ($0 < $1) << 31 >> 31;
return $retval_0 | 0;
}
function __ZN10ime_pinyin21remove_duplicate_npreEPNS_12NPredictItemEj($npre_items, $npre_num) {
$npre_items = $npre_items | 0;
$npre_num = $npre_num | 0;
var $pos_018 = 0, $remain_num_017 = 0, $arrayidx = 0, $1 = 0, $2 = 0, $remain_num_1 = 0, $inc14 = 0, $retval_0 = 0;
if (($npre_items | 0) == 0 | ($npre_num | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E($npre_items, $npre_num, 20, 16);
if ($npre_num >>> 0 > 1) {
$remain_num_017 = 1;
$pos_018 = 1;
} else {
$retval_0 = 1;
return $retval_0 | 0;
}
while (1) {
$arrayidx = $npre_items + ($pos_018 * 20 | 0) | 0;
if ((_utf16_strncmp($npre_items + ($pos_018 * 20 | 0) + 4 | 0, $npre_items + (($remain_num_017 - 1 | 0) * 20 | 0) + 4 | 0, 7) | 0) == 0) {
$remain_num_1 = $remain_num_017;
} else {
if (($remain_num_017 | 0) != ($pos_018 | 0)) {
$1 = $npre_items + ($remain_num_017 * 20 | 0) | 0;
$2 = $arrayidx;
HEAP32[$1 >> 2] = HEAP32[$2 >> 2];
HEAP32[$1 + 4 >> 2] = HEAP32[$2 + 4 >> 2];
HEAP32[$1 + 8 >> 2] = HEAP32[$2 + 8 >> 2];
HEAP32[$1 + 12 >> 2] = HEAP32[$2 + 12 >> 2];
HEAP32[$1 + 16 >> 2] = HEAP32[$2 + 16 >> 2];
}
$remain_num_1 = $remain_num_017 + 1 | 0;
}
$inc14 = $pos_018 + 1 | 0;
if ($inc14 >>> 0 < $npre_num >>> 0) {
$remain_num_017 = $remain_num_1;
$pos_018 = $inc14;
} else {
$retval_0 = $remain_num_1;
break;
}
}
return $retval_0 | 0;
}
function __ZN10ime_pinyin11compare_splEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
return _strcmp($p1 | 0, $p2 | 0) | 0;
}
function __ZN10ime_pinyin12SpellingTrieC2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = 0;
HEAP32[$this + 4 >> 2] = 0;
HEAP32[$this + 8 >> 2] = 0;
HEAP32[$this + 20 >> 2] = 0;
_memset($this + 36 | 0, 0, 20);
HEAP32[11856] = 0;
HEAP32[$this + 24 >> 2] = 0;
HEAP32[$this + 280 >> 2] = 0;
__ZN10ime_pinyin12SpellingTrie14szm_enable_shmEb($this, 1);
__ZN10ime_pinyin12SpellingTrie13szm_enable_ymEb($this, 1);
HEAP32[$this + 284 >> 2] = 0;
return;
}
function __ZN10ime_pinyin12SpellingTrie14szm_enable_shmEb($this, $enable) {
$this = $this | 0;
$enable = $enable | 0;
var $conv10 = 0, $ch_09 = 0, $arrayidx = 0, $inc = 0, $conv1113 = 0, $ch9_012 = 0, $arrayidx18 = 0, $inc26 = 0;
if ($enable) {
$ch_09 = 65;
$conv10 = 65;
while (1) {
if (__ZNK10ime_pinyin12SpellingTrie15is_shengmu_charEc(0, $ch_09) | 0) {
$arrayidx = 10952 + ($conv10 - 65) | 0;
HEAP8[$arrayidx] = HEAP8[$arrayidx] | 4;
}
$inc = $ch_09 + 1 & 255;
if ($inc << 24 >> 24 < 91) {
$ch_09 = $inc;
$conv10 = $inc << 24 >> 24;
} else {
break;
}
}
return;
} else {
$ch9_012 = 65;
$conv1113 = 65;
while (1) {
if (__ZNK10ime_pinyin12SpellingTrie15is_shengmu_charEc(0, $ch9_012) | 0) {
$arrayidx18 = 10952 + ($conv1113 - 65) | 0;
HEAP8[$arrayidx18] = HEAP8[$arrayidx18] & -5;
}
$inc26 = $ch9_012 + 1 & 255;
if ($inc26 << 24 >> 24 < 91) {
$ch9_012 = $inc26;
$conv1113 = $inc26 << 24 >> 24;
} else {
break;
}
}
return;
}
}
function __ZN10ime_pinyin12SpellingTrie13szm_enable_ymEb($this, $enable) {
$this = $this | 0;
$enable = $enable | 0;
var $conv10 = 0, $ch_09 = 0, $arrayidx = 0, $inc = 0, $conv1113 = 0, $ch9_012 = 0, $arrayidx18 = 0, $inc26 = 0;
if ($enable) {
$ch_09 = 65;
$conv10 = 65;
while (1) {
if (__ZNK10ime_pinyin12SpellingTrie13is_yunmu_charEc(0, $ch_09) | 0) {
$arrayidx = 10952 + ($conv10 - 65) | 0;
HEAP8[$arrayidx] = HEAP8[$arrayidx] | 4;
}
$inc = $ch_09 + 1 & 255;
if ($inc << 24 >> 24 < 91) {
$ch_09 = $inc;
$conv10 = $inc << 24 >> 24;
} else {
break;
}
}
return;
} else {
$ch9_012 = 65;
$conv1113 = 65;
while (1) {
if (__ZNK10ime_pinyin12SpellingTrie13is_yunmu_charEc(0, $ch9_012) | 0) {
$arrayidx18 = 10952 + ($conv1113 - 65) | 0;
HEAP8[$arrayidx18] = HEAP8[$arrayidx18] & -5;
}
$inc26 = $ch9_012 + 1 & 255;
if ($inc26 << 24 >> 24 < 91) {
$ch9_012 = $inc26;
$conv1113 = $inc26 << 24 >> 24;
} else {
break;
}
}
return;
}
}
function __ZN10ime_pinyin5NGram13build_unigramEPNS_10LemmaEntryEjj($this, $lemma_arr, $lemma_num, $next_idx_unused) {
$this = $this | 0;
$lemma_arr = $lemma_arr | 0;
$lemma_num = $lemma_num | 0;
$next_idx_unused = $next_idx_unused | 0;
var $0$0 = 0, $call = 0, $4 = 0, $cmp5 = 0, $total_freq_078 = 0.0, $idx_now_077 = 0, $pos_076 = 0, $5 = 0, $inc = 0, $6 = 0.0, $storemerge = 0.0, $idx_now_1 = 0, $total_freq_1 = 0.0, $inc26 = 0, $total_freq_0_lcssa = 0.0, $idx_now_0_lcssa = 0, $add27 = 0, $idx_num_ = 0, $pos33_072 = 0, $arrayidx38 = 0, $div = 0.0, $freq_codes_df_ = 0, $10 = 0, $call55 = 0, $11 = 0, $12 = 0, $freq_codes_ = 0, $14 = 0, $call65 = 0, $15 = 0, $16 = 0, $code_pos_069 = 0, $freq_pos_068 = 0, $inc99 = 0, $freq_pos_1_ph = 0, $arrayidx78 = 0, $20 = 0.0, $i_0 = 0, $lma_freq_idx_ = 0, $25 = 0, $call105 = 0, $27 = 0, $code_pos116_066 = 0, $conv126 = 0, $retval_0 = 0;
if (($lemma_arr | 0) == 0 | ($lemma_num | 0) == 0 | $next_idx_unused >>> 0 < 2) {
$retval_0 = 0;
return $retval_0 | 0;
}
$0$0 = _llvm_umul_with_overflow_i32($next_idx_unused | 0, 8) | 0;
$call = __Znaj(tempRet0 ? -1 : $0$0) | 0;
$4 = $call;
$cmp5 = ($call | 0) == 0;
if ($cmp5) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAPF64[$4 >> 3] = .3;
L2413 : do {
if (($lemma_num | 0) == 0) {
$idx_now_0_lcssa = 0;
$total_freq_0_lcssa = .3;
} else {
$pos_076 = 0;
$idx_now_077 = 0;
$total_freq_078 = .3;
while (1) {
$5 = HEAP32[$lemma_arr + ($pos_076 * 124 | 0) + 4 >> 2] | 0;
if (($5 | 0) == ($idx_now_077 | 0)) {
$total_freq_1 = $total_freq_078;
$idx_now_1 = $idx_now_077;
} else {
$inc = $idx_now_077 + 1 | 0;
if (($5 | 0) != ($inc | 0)) {
break;
}
$6 = +HEAPF32[$lemma_arr + ($pos_076 * 124 | 0) + 120 >> 2];
$storemerge = $6 > 0.0 ? $6 : .3;
HEAPF64[$4 + ($inc << 3) >> 3] = $storemerge;
$total_freq_1 = $total_freq_078 + $storemerge;
$idx_now_1 = $inc;
}
$inc26 = $pos_076 + 1 | 0;
if ($inc26 >>> 0 < $lemma_num >>> 0) {
$pos_076 = $inc26;
$idx_now_077 = $idx_now_1;
$total_freq_078 = $total_freq_1;
} else {
$idx_now_0_lcssa = $idx_now_1;
$total_freq_0_lcssa = $total_freq_1;
break L2413;
}
}
___assert_func(4024, 262, 6152, 1576);
return 0;
}
} while (0);
$add27 = $idx_now_0_lcssa + 1 | 0;
$idx_num_ = $this + 4 | 0;
HEAP32[$idx_num_ >> 2] = $add27;
if (($add27 | 0) != ($next_idx_unused | 0)) {
___assert_func(4024, 273, 6152, 1312);
return 0;
}
L2425 : do {
if ((HEAP32[$idx_num_ >> 2] | 0) != 0) {
$pos33_072 = 0;
while (1) {
$arrayidx38 = $4 + ($pos33_072 << 3) | 0;
$div = +HEAPF64[$arrayidx38 >> 3] / $total_freq_0_lcssa;
HEAPF64[$arrayidx38 >> 3] = $div;
if ($div <= 0.0) {
break;
}
$pos33_072 = $pos33_072 + 1 | 0;
if ($pos33_072 >>> 0 >= (HEAP32[$idx_num_ >> 2] | 0) >>> 0) {
break L2425;
}
}
___assert_func(4024, 277, 6152, 1080);
return 0;
}
} while (0);
$freq_codes_df_ = $this + 16 | 0;
$10 = HEAP32[$freq_codes_df_ >> 2] | 0;
do {
if (($10 | 0) == 0) {
$call55 = __Znaj(2048) | 0;
$11 = $call55;
HEAP32[$freq_codes_df_ >> 2] = $11;
if (($call55 | 0) != 0) {
$12 = $11;
break;
}
___assert_func(4024, 285, 6152, 904);
return 0;
} else {
$12 = $10;
}
} while (0);
_memset($12 | 0, 0, 2048);
$freq_codes_ = $this + 20 | 0;
$14 = HEAP32[$freq_codes_ >> 2] | 0;
do {
if (($14 | 0) == 0) {
$call65 = __Znaj(512) | 0;
$15 = $call65;
HEAP32[$freq_codes_ >> 2] = $15;
if (($call65 | 0) != 0) {
$16 = $15;
break;
}
___assert_func(4024, 290, 6152, 736);
return 0;
} else {
$16 = $14;
}
} while (0);
_memset($16 | 0, 0, 512);
$freq_pos_068 = 0;
$code_pos_069 = 0;
while (1) {
$freq_pos_1_ph = $freq_pos_068;
L2441 : while (1) {
$arrayidx78 = $4 + ($freq_pos_1_ph << 3) | 0;
$20 = +HEAPF64[$arrayidx78 >> 3];
$i_0 = 0;
while (1) {
if ($i_0 >>> 0 >= $code_pos_069 >>> 0) {
break L2441;
}
if (+HEAPF64[(HEAP32[$freq_codes_df_ >> 2] | 0) + ($i_0 << 3) >> 3] == $20) {
break;
} else {
$i_0 = $i_0 + 1 | 0;
}
}
$freq_pos_1_ph = $freq_pos_1_ph + 1 | 0;
}
HEAPF64[(HEAP32[$freq_codes_df_ >> 2] | 0) + ($code_pos_069 << 3) >> 3] = +HEAPF64[$arrayidx78 >> 3];
$inc99 = $code_pos_069 + 1 | 0;
if ($inc99 >>> 0 < 256) {
$freq_pos_068 = $freq_pos_1_ph + 1 | 0;
$code_pos_069 = $inc99;
} else {
break;
}
}
__ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E(HEAP32[$freq_codes_df_ >> 2] | 0, 256, 8, 2);
$lma_freq_idx_ = $this + 24 | 0;
$25 = HEAP32[$lma_freq_idx_ >> 2] | 0;
do {
if (($25 | 0) == 0) {
$call105 = __Znaj(HEAP32[$idx_num_ >> 2] | 0) | 0;
HEAP32[$lma_freq_idx_ >> 2] = $call105;
if (($call105 | 0) != 0) {
$27 = $call105;
break;
}
___assert_func(4024, 317, 6152, 584);
return 0;
} else {
$27 = $25;
}
} while (0);
__ZN10ime_pinyin13iterate_codesEPdjS0_Ph($4, HEAP32[$idx_num_ >> 2] | 0, HEAP32[$freq_codes_df_ >> 2] | 0, $27);
if ($cmp5) {
$code_pos116_066 = 0;
} else {
__ZdaPv($call);
$code_pos116_066 = 0;
}
do {
$conv126 = ~~+__ZN10ime_pinyin5NGram20convert_psb_to_scoreEd(+HEAPF64[(HEAP32[$freq_codes_df_ >> 2] | 0) + ($code_pos116_066 << 3) >> 3]);
HEAP16[(HEAP32[$freq_codes_ >> 2] | 0) + ($code_pos116_066 << 1) >> 1] = $conv126;
$code_pos116_066 = $code_pos116_066 + 1 | 0;
} while ($code_pos116_066 >>> 0 < 256);
HEAP8[$this | 0] = 1;
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie10is_half_idEt($this, $splid) {
$this = $this | 0;
$splid = $splid | 0;
return ($splid & 65535) < 30 & $splid << 16 >> 16 != 0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie14szm_is_enabledEc($this, $ch) {
$this = $this | 0;
$ch = $ch | 0;
return (HEAP8[10952 + (($ch << 24 >> 24) - 65) | 0] & 4) != 0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie13is_yunmu_charEc($this, $ch) {
$this = $this | 0;
$ch = $ch | 0;
return (HEAP8[10952 + (($ch << 24 >> 24) - 65) | 0] & 2) != 0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie10is_full_idEt($this, $splid) {
$this = $this | 0;
$splid = $splid | 0;
if (($splid & 65535) < 30) {
return 0;
} else {
return ($splid & 65535) >>> 0 < ((HEAP32[$this + 8 >> 2] | 0) + 30 | 0) >>> 0 | 0;
}
return 0;
}
function __ZNK10ime_pinyin12SpellingTrie12full_to_halfEt($this, $full_id) {
$this = $this | 0;
$full_id = $full_id | 0;
var $conv = 0, $retval_0 = 0;
if ((HEAP32[$this + 44 >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$conv = $full_id & 65535;
if (($full_id & 65535) < 30) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ($conv >>> 0 > ((HEAP32[$this + 8 >> 2] | 0) + 30 | 0) >>> 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = HEAP16[(HEAP32[$this + 280 >> 2] | 0) + ($conv - 30 << 1) >> 1] | 0;
return $retval_0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie16is_half_id_yunmuEt($this, $splid) {
$this = $this | 0;
$splid = $splid | 0;
var $conv = 0, $retval_0 = 0;
$conv = $splid & 65535;
if ($splid << 16 >> 16 == 0 | ($splid & 65535) > 29) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((538968080 >>> ($conv >>> 0) & 1 | 0) != 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = (HEAP8[10952 + ((HEAP8[10920 + $conv | 0] | 0) - 65) | 0] & 2) != 0;
return $retval_0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie15is_shengmu_charEc($this, $ch) {
$this = $this | 0;
$ch = $ch | 0;
return (HEAP8[10952 + (($ch << 24 >> 24) - 65) | 0] & 1) != 0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie14is_szm_enabledEc($this, $ch) {
$this = $this | 0;
$ch = $ch | 0;
return (HEAP8[10952 + (($ch << 24 >> 24) - 65) | 0] & 4) != 0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie13half2full_numEt($this, $half_id) {
$this = $this | 0;
$half_id = $half_id | 0;
var $retval_0 = 0;
if ((HEAP32[$this + 44 >> 2] | 0) == 0 | ($half_id & 65535) > 29) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = HEAP16[$this + 220 + (($half_id & 65535) << 1) >> 1] | 0;
return $retval_0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie12half_to_fullEtPt($this, $half_id, $spl_id_start) {
$this = $this | 0;
$half_id = $half_id | 0;
$spl_id_start = $spl_id_start | 0;
var $conv = 0, $retval_0 = 0;
do {
if (($spl_id_start | 0) == 0) {
$retval_0 = 0;
} else {
if ((HEAP32[$this + 44 >> 2] | 0) == 0) {
$retval_0 = 0;
break;
}
$conv = $half_id & 65535;
if (($half_id & 65535) > 29) {
$retval_0 = 0;
break;
}
HEAP16[$spl_id_start >> 1] = HEAP16[$this + 160 + ($conv << 1) >> 1] | 0;
$retval_0 = HEAP16[$this + 220 + ($conv << 1) >> 1] | 0;
}
} while (0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin12SpellingTrieD2Ev($this) {
$this = $this | 0;
var $0 = 0, $1 = 0, $2 = 0, $4 = 0, $root_ = 0, $5 = 0, $6 = 0, $8 = 0, $10 = 0, $12 = 0, $16 = 0, $17 = 0;
$0 = HEAP32[$this >> 2] | 0;
if (($0 | 0) != 0) {
__ZdaPv($0);
}
$1 = HEAP32[$this + 36 >> 2] | 0;
if (($1 | 0) != 0) {
__ZdaPv($1);
}
$2 = HEAP32[$this + 40 >> 2] | 0;
if (($2 | 0) != 0) {
__ZdaPv($2);
}
$4 = HEAP32[$this + 20 >> 2] | 0;
if (($4 | 0) != 0) {
__ZdaPv($4);
}
$root_ = $this + 44 | 0;
$5 = HEAP32[$root_ >> 2] | 0;
do {
if (($5 | 0) != 0) {
__ZN10ime_pinyin12SpellingTrie13free_son_trieEPNS_12SpellingNodeE($this, $5);
$6 = HEAP32[$root_ >> 2] | 0;
if (($6 | 0) == 0) {
break;
}
__ZdlPv($6);
}
} while (0);
$8 = HEAP32[$this + 48 >> 2] | 0;
if (($8 | 0) != 0) {
__ZdaPv($8);
}
$10 = HEAP32[$this + 52 >> 2] | 0;
if (($10 | 0) != 0) {
__ZdaPv($10);
}
$12 = HEAP32[11856] | 0;
if (($12 | 0) != 0) {
__ZN10ime_pinyin12SpellingTrieD2Ev($12);
__ZdlPv($12);
HEAP32[11856] = 0;
}
$16 = HEAP32[$this + 24 >> 2] | 0;
if (($16 | 0) != 0) {
__ZdaPv($16);
}
$17 = HEAP32[$this + 280 >> 2] | 0;
if (($17 | 0) == 0) {
return;
}
__ZdaPv($17);
return;
}
function __ZN10ime_pinyin12SpellingTrie13free_son_trieEPNS_12SpellingNodeE($this, $node) {
$this = $this | 0;
$node = $node | 0;
var $1 = 0, $first_son = 0, $3 = 0, $4 = 0, $pos_08 = 0, $inc = 0, $7 = 0, $_lcssa = 0;
if (($node | 0) == 0) {
return;
}
$1 = $node + 4 | 0;
$first_son = $node | 0;
$3 = HEAP32[$first_son >> 2] | 0;
if ((HEAPU16[$1 >> 1] | 0) > 2047) {
$pos_08 = 0;
$4 = $3;
while (1) {
__ZN10ime_pinyin12SpellingTrie13free_son_trieEPNS_12SpellingNodeE($this, $4 + ($pos_08 << 3) | 0);
$inc = $pos_08 + 1 | 0;
$7 = HEAP32[$first_son >> 2] | 0;
if ($inc >>> 0 < ((HEAPU16[$1 >> 1] | 0) >>> 11 & 65535) >>> 0) {
$pos_08 = $inc;
$4 = $7;
} else {
$_lcssa = $7;
break;
}
}
} else {
$_lcssa = $3;
}
if (($_lcssa | 0) == 0) {
return;
}
__ZdaPv($_lcssa);
return;
}
function __ZNK10ime_pinyin12SpellingTrie20half_full_compatibleEtt($this, $half_id, $full_id) {
$this = $this | 0;
$half_id = $half_id | 0;
$full_id = $full_id | 0;
var $call = 0, $retval_0 = 0;
$call = __ZNK10ime_pinyin12SpellingTrie12full_to_halfEt($this, $full_id) | 0;
if ($call << 16 >> 16 == $half_id << 16 >> 16) {
$retval_0 = 1;
return $retval_0 | 0;
}
$retval_0 = (HEAP8[10920 + ($call & 65535) | 0] & -33) << 24 >> 24 == (HEAP8[10920 + ($half_id & 65535) | 0] | 0);
return $retval_0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie11is_szm_charEc($this, $ch) {
$this = $this | 0;
$ch = $ch | 0;
var $0 = 0;
if (__ZNK10ime_pinyin12SpellingTrie15is_shengmu_charEc(0, $ch) | 0) {
$0 = 1;
return $0 | 0;
}
$0 = __ZNK10ime_pinyin12SpellingTrie13is_yunmu_charEc(0, $ch) | 0;
return $0 | 0;
}
function __ZN10ime_pinyin12SpellingTrie14get_cpinstanceEv() {
return __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
}
function __ZN10ime_pinyin12SpellingTrie12get_instanceEv() {
var $1 = 0;
if ((HEAP32[11856] | 0) == 0) {
$1 = __Znwj(288) | 0;
__ZN10ime_pinyin12SpellingTrieC2Ev($1);
HEAP32[11856] = $1;
}
return HEAP32[11856] | 0;
}
function __ZN10ime_pinyin12SpellingTrie9constructEPKcjjfh($this, $spelling_arr, $item_size, $item_num, $score_amplifier, $average_score) {
$this = $this | 0;
$spelling_arr = $spelling_arr | 0;
$item_size = $item_size | 0;
$item_num = $item_num | 0;
$score_amplifier = +$score_amplifier;
$average_score = $average_score | 0;
var $h2f_start_ = 0, $spelling_buf_ = 0, $1 = 0, $mul = 0, $call = 0, $spelling_size_ = 0, $spelling_num_ = 0, $average_score_ = 0, $splstr_queried_ = 0, $2 = 0, $call26 = 0, $splstr16_queried_ = 0, $4 = 0, $7$0 = 0, $call40 = 0, $call49 = 0, $16 = 0, $root_ = 0, $call51 = 0, $18 = 0, $dumb_node_ = 0, $call55 = 0, $22 = 0, $splitter_node_ = 0, $call62 = 0, $retval_0 = 0;
if (($spelling_arr | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$h2f_start_ = $this + 160 | 0;
$spelling_buf_ = $this | 0;
_memset($h2f_start_ | 0, 0, 120);
$1 = HEAP32[$spelling_buf_ >> 2] | 0;
do {
if (($1 | 0) != ($spelling_arr | 0)) {
if (($1 | 0) != 0) {
__ZdaPv($1);
}
$mul = Math_imul($item_num, $item_size) | 0;
$call = __Znaj($mul) | 0;
HEAP32[$spelling_buf_ >> 2] = $call;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
} else {
_memcpy($call | 0, $spelling_arr | 0, $mul) | 0;
break;
}
}
} while (0);
$spelling_size_ = $this + 4 | 0;
HEAP32[$spelling_size_ >> 2] = $item_size;
$spelling_num_ = $this + 8 | 0;
HEAP32[$spelling_num_ >> 2] = $item_num;
HEAPF32[$this + 12 >> 2] = $score_amplifier;
$average_score_ = $this + 16 | 0;
HEAP8[$average_score_] = $average_score;
$splstr_queried_ = $this + 36 | 0;
$2 = HEAP32[$splstr_queried_ >> 2] | 0;
if (($2 | 0) != 0) {
__ZdaPv($2);
}
$call26 = __Znaj(HEAP32[$spelling_size_ >> 2] | 0) | 0;
HEAP32[$splstr_queried_ >> 2] = $call26;
if (($call26 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$splstr16_queried_ = $this + 40 | 0;
$4 = HEAP32[$splstr16_queried_ >> 2] | 0;
if (($4 | 0) != 0) {
__ZdaPv($4);
}
$7$0 = _llvm_umul_with_overflow_i32(HEAP32[$spelling_size_ >> 2] | 0, 2) | 0;
$call40 = __Znaj(tempRet0 ? -1 : $7$0) | 0;
HEAP32[$splstr16_queried_ >> 2] = $call40;
if (($call40 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
_qsort(HEAP32[$spelling_buf_ >> 2] | 0, HEAP32[$spelling_num_ >> 2] | 0, HEAP32[$spelling_size_ >> 2] | 0, 44);
HEAP32[$this + 284 >> 2] = 1;
$call49 = __Znwj(8) | 0;
$16 = $call49;
$root_ = $this + 44 | 0;
HEAP32[$root_ >> 2] = $call49;
HEAP32[$16 >> 2] = 0;
HEAP32[$16 + 4 >> 2] = 0;
$call51 = __Znwj(8) | 0;
$18 = $call51;
$dumb_node_ = $this + 48 | 0;
HEAP32[$dumb_node_ >> 2] = $call51;
HEAP32[$18 >> 2] = 0;
HEAP32[$18 + 4 >> 2] = 0;
HEAP8[(HEAP32[$dumb_node_ >> 2] | 0) + 7 | 0] = HEAP8[$average_score_] | 0;
$call55 = __Znwj(8) | 0;
$22 = $call55;
$splitter_node_ = $this + 52 | 0;
HEAP32[$splitter_node_ >> 2] = $call55;
HEAP32[$22 >> 2] = 0;
HEAP32[$22 + 4 >> 2] = 0;
HEAP8[(HEAP32[$splitter_node_ >> 2] | 0) + 7 | 0] = HEAP8[$average_score_] | 0;
_memset($this + 56 | 0, 0, 104);
$call62 = __ZN10ime_pinyin12SpellingTrie26construct_spellings_subsetEjjjPNS_12SpellingNodeE($this, 0, HEAP32[$spelling_num_ >> 2] | 0, 0, HEAP32[$root_ >> 2] | 0) | 0;
HEAP32[HEAP32[$root_ >> 2] >> 2] = $call62;
HEAP8[(HEAP32[$root_ >> 2] | 0) + 7 | 0] = 0;
if ((HEAP32[HEAP32[$root_ >> 2] >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP16[$this + 220 >> 1] = 0;
HEAP16[$h2f_start_ >> 1] = 0;
if (!(__ZN10ime_pinyin12SpellingTrie9build_f2hEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12SpellingTrie13build_ym_infoEv($this) | 0;
return $retval_0 | 0;
}
function __ZNK10ime_pinyin12SpellingTrie18if_valid_id_updateEPt($this, $splid) {
$this = $this | 0;
$splid = $splid | 0;
var $0 = 0, $conv = 0, $1 = 0, $retval_0 = 0;
do {
if (($splid | 0) == 0) {
$retval_0 = 0;
} else {
$0 = HEAP16[$splid >> 1] | 0;
$conv = $0 & 65535;
if ($0 << 16 >> 16 == 0) {
$retval_0 = 0;
break;
}
if (($0 & 65535) > 29) {
$retval_0 = 1;
break;
}
$1 = HEAP8[10920 + $conv | 0] | 0;
if ((538968080 >>> ($conv >>> 0) & 1 | 0) != 0) {
$retval_0 = 1;
break;
}
if (__ZNK10ime_pinyin12SpellingTrie14szm_is_enabledEc(0, $1) | 0) {
$retval_0 = 1;
break;
}
if (!(__ZNK10ime_pinyin12SpellingTrie13is_yunmu_charEc(0, $1) | 0)) {
$retval_0 = 0;
break;
}
if ((HEAP16[$this + 220 + ($conv << 1) >> 1] | 0) == 0) {
___assert_func(3400, 128, 4448, 4088);
return 0;
} else {
HEAP16[$splid >> 1] = HEAP16[$this + 160 + ($conv << 1) >> 1] | 0;
$retval_0 = 1;
break;
}
}
} while (0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin12SpellingTrie17is_valid_spl_charEc($ch) {
$ch = $ch | 0;
if (($ch - 97 & 255) < 26) {
return 1;
} else {
return ($ch - 65 & 255) < 26 | 0;
}
return 0;
}
function __ZN10ime_pinyin12SpellingTrie9build_f2hEv($this) {
$this = $this | 0;
var $f2h_ = 0, $0 = 0, $3$0 = 0, $call = 0, $conv15 = 0, $hid_014 = 0, $arrayidx = 0, $8 = 0, $conv107 = 0, $arrayidx16 = 0, $conv1013 = 0, $fid_012 = 0, $inc24 = 0, $retval_0 = 0;
$f2h_ = $this + 280 | 0;
$0 = HEAP32[$f2h_ >> 2] | 0;
if (($0 | 0) != 0) {
__ZdaPv($0);
}
$3$0 = _llvm_umul_with_overflow_i32(HEAP32[$this + 8 >> 2] | 0, 2) | 0;
$call = __Znaj(tempRet0 ? -1 : $3$0) | 0;
HEAP32[$f2h_ >> 2] = $call;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
} else {
$hid_014 = 0;
$conv15 = 0;
}
while (1) {
$arrayidx = $this + 160 + ($conv15 << 1) | 0;
$8 = HEAP16[$arrayidx >> 1] | 0;
$conv107 = $8 & 65535;
$arrayidx16 = $this + 220 + ($conv15 << 1) | 0;
if (($conv107 | 0) < ((HEAPU16[$arrayidx16 >> 1] | 0) + ($8 & 65535) | 0)) {
$fid_012 = $8;
$conv1013 = $conv107;
do {
HEAP16[(HEAP32[$f2h_ >> 2] | 0) + ($conv1013 - 30 << 1) >> 1] = $hid_014;
$fid_012 = $fid_012 + 1 & 65535;
$conv1013 = $fid_012 & 65535;
} while (($conv1013 | 0) < ((HEAPU16[$arrayidx16 >> 1] | 0) + (HEAPU16[$arrayidx >> 1] | 0) | 0));
}
$inc24 = $hid_014 + 1 & 65535;
if (($inc24 & 65535) < 30) {
$hid_014 = $inc24;
$conv15 = $inc24 & 65535;
} else {
$retval_0 = 1;
break;
}
}
return $retval_0 | 0;
}
function __ZN10ime_pinyin12SpellingTrie10get_ym_strEPKc($this, $spl_str) {
$this = $this | 0;
$spl_str = $spl_str | 0;
var $0 = 0, $add_ptr8 = 0, $spl_str_addr_0 = 0;
$0 = HEAP8[$spl_str] | 0;
if (!(__ZNK10ime_pinyin12SpellingTrie15is_shengmu_charEc(0, $0) | 0)) {
$spl_str_addr_0 = $spl_str;
return $spl_str_addr_0 | 0;
}
if (($0 << 24 >> 24 | 0) == 90 | ($0 << 24 >> 24 | 0) == 67 | ($0 << 24 >> 24 | 0) == 83) {
$add_ptr8 = $spl_str + 1 | 0;
return ((HEAP8[$add_ptr8] | 0) == 104 ? $spl_str + 2 | 0 : $add_ptr8) | 0;
}
$spl_str_addr_0 = $spl_str + 1 | 0;
return $spl_str_addr_0 | 0;
}
function __ZN10ime_pinyin12SpellingTrie16get_spelling_strEt($this, $splid) {
$this = $this | 0;
$splid = $splid | 0;
var $splstr_queried_ = 0, $1 = 0, $2 = 0, $3 = 0, $add_ptr = 0, $4 = 0, $5 = 0, $dec_splid = 0, $splid_addr_1_off0 = 0, $12 = 0, sp = 0;
sp = STACKTOP;
$splstr_queried_ = $this + 36 | 0;
HEAP8[HEAP32[$splstr_queried_ >> 2] | 0] = 0;
if (($splid & 65535) > 29) {
$1 = HEAP32[$splstr_queried_ >> 2] | 0;
$2 = HEAP32[$this + 4 >> 2] | 0;
$3 = HEAP32[$this >> 2] | 0;
$add_ptr = $3 + (Math_imul($2, $splid - 30 & 65535) | 0) | 0;
_snprintf($1 | 0, $2 | 0, 896, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $add_ptr, tempInt) | 0) | 0;
$12 = HEAP32[$splstr_queried_ >> 2] | 0;
STACKTOP = sp;
return $12 | 0;
}
if (($splid << 16 >> 16 | 0) == 4) {
$4 = HEAP32[$splstr_queried_ >> 2] | 0;
$5 = HEAP32[$this + 4 >> 2] | 0;
_snprintf($4 | 0, $5 | 0, 896, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = 728, tempInt) | 0) | 0;
$12 = HEAP32[$splstr_queried_ >> 2] | 0;
STACKTOP = sp;
return $12 | 0;
} else if (($splid << 16 >> 16 | 0) == 21) {
_snprintf(HEAP32[$splstr_queried_ >> 2] | 0, HEAP32[$this + 4 >> 2] | 0, 896, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = 576, tempInt) | 0) | 0;
$12 = HEAP32[$splstr_queried_ >> 2] | 0;
STACKTOP = sp;
return $12 | 0;
} else if (($splid << 16 >> 16 | 0) == 29) {
_snprintf(HEAP32[$splstr_queried_ >> 2] | 0, HEAP32[$this + 4 >> 2] | 0, 896, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = 4368, tempInt) | 0) | 0;
$12 = HEAP32[$splstr_queried_ >> 2] | 0;
STACKTOP = sp;
return $12 | 0;
} else {
$dec_splid = ((($splid & 65535) > 3) << 31 >> 31) + $splid & 65535;
if (($dec_splid & 65535) > 19) {
$splid_addr_1_off0 = $dec_splid + 255 & 255;
} else {
$splid_addr_1_off0 = $dec_splid & 255;
}
HEAP8[HEAP32[$splstr_queried_ >> 2] | 0] = $splid_addr_1_off0 + 64 & 255;
HEAP8[(HEAP32[$splstr_queried_ >> 2] | 0) + 1 | 0] = 0;
$12 = HEAP32[$splstr_queried_ >> 2] | 0;
STACKTOP = sp;
return $12 | 0;
}
return 0;
}
function __ZN10ime_pinyin12SpellingTrie9get_ym_idEPKc($this, $ym_str) {
$this = $this | 0;
$ym_str = $ym_str | 0;
var $ym_buf_ = 0, $1 = 0, $ym_size_ = 0, $pos_0 = 0, $conv = 0, $2 = 0, $add = 0, $retval_0 = 0, label = 0;
if (($ym_str | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$ym_buf_ = $this + 24 | 0;
if ((HEAP32[$ym_buf_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$1 = HEAP32[$this + 32 >> 2] | 0;
$ym_size_ = $this + 28 | 0;
$pos_0 = 0;
while (1) {
$conv = $pos_0 & 255;
if ($conv >>> 0 >= $1 >>> 0) {
$retval_0 = 0;
label = 2089;
break;
}
$2 = HEAP32[$ym_buf_ >> 2] | 0;
$add = $pos_0 + 1 & 255;
if ((_strcmp($2 + (Math_imul(HEAP32[$ym_size_ >> 2] | 0, $conv) | 0) | 0, $ym_str | 0) | 0) == 0) {
$retval_0 = $add;
label = 2087;
break;
} else {
$pos_0 = $add;
}
}
if ((label | 0) == 2089) {
return $retval_0 | 0;
} else if ((label | 0) == 2087) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin12SpellingTrie13save_spl_trieEP7__sFILE($this, $fp) {
$this = $this | 0;
$fp = $fp | 0;
var $spelling_buf_ = 0, $spelling_size_ = 0, $spelling_num_ = 0, $call21 = 0, $retval_0 = 0;
if (($fp | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spelling_buf_ = $this | 0;
if ((HEAP32[$spelling_buf_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spelling_size_ = $this + 4 | 0;
if ((_fwrite($spelling_size_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spelling_num_ = $this + 8 | 0;
if ((_fwrite($spelling_num_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fwrite($this + 12 | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fwrite($this + 16 | 0, 1, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call21 = _fwrite(HEAP32[$spelling_buf_ >> 2] | 0, HEAP32[$spelling_size_ >> 2] | 0, HEAP32[$spelling_num_ >> 2] | 0, $fp | 0) | 0;
$retval_0 = ($call21 | 0) == (HEAP32[$spelling_num_ >> 2] | 0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin12SpellingTrie26construct_spellings_subsetEjjjPNS_12SpellingNodeE($this, $item_start, $item_end, $level, $parent) {
$this = $this | 0;
$item_start = $item_start | 0;
$item_end = $item_end | 0;
$level = $level | 0;
$parent = $parent | 0;
var $spelling_size_ = 0, $0 = 0, $spelling_buf_ = 0, $1 = 0, $2 = 0, $add = 0, $3 = 0, $4 = 0, $num_of_son_0216 = 0, $char_for_node_0215 = 0, $i_0214 = 0, $5 = 0, $num_of_son_0_inc = 0, $inc23 = 0, $num_of_son_0_lcssa = 0, $conv25 = 0, $node_num_ = 0, $umul_with_overflow = 0, $call = 0, $7 = 0, $8 = 0, $mul31 = 0, $add_ptr32 = 0, $10 = 0, $add34 = 0, $cmp37 = 0, $cmp61 = 0, $cmp149 = 0, $min_son_score_0207 = 0, $spelling_last_start_0206 = 0, $char_for_node_2205 = 0, $son_pos_0201 = 0, $i40_0197 = 0, $item_start_next_0194 = 0, $spelling_endable_1_off0193 = 0, $12 = 0, $mul48 = 0, $add_ptr49 = 0, $14 = 0, $conv57 = 0, $add_ptr60 = 0, $16 = 0, $arrayidx71 = 0, $20 = 0, $21 = 0, $cmp81 = 0, $23 = 0, $score = 0, $27 = 0, $_min_son_score_0 = 0, $29 = 0, $bf_value140_pn = 0, $32 = 0, $cmp164 = 0, $part_id_0174 = 0, $34 = 0, $idxprom188 = 0, $spelling_endable_3_off0 = 0, $item_start_next_1 = 0, $son_pos_1 = 0, $char_for_node_3 = 0, $spelling_last_start_1 = 0, $min_son_score_2 = 0, $inc217 = 0, $min_son_score_0_lcssa = 0, $spelling_last_start_0_lcssa = 0, $char_for_node_2_lcssa = 0, $son_pos_0_lcssa = 0, $item_start_next_0_lcssa = 0, $spelling_endable_1_off0_lcssa = 0, $add_ptr220 = 0, $cmp222 = 0, $44 = 0, $arrayidx237 = 0, $48 = 0, $49 = 0, $cmp248 = 0, $51 = 0, $score264 = 0, $55 = 0, $_min_son_score_0166 = 0, $57 = 0, $bf_value318_pn = 0, $60 = 0, $cmp346 = 0, $part_id336_0180 = 0, $62 = 0, $idxprom370 = 0, $71 = 0, $retval_0 = 0, label = 0;
$spelling_size_ = $this + 4 | 0;
$0 = HEAP32[$spelling_size_ >> 2] | 0;
if ($item_end >>> 0 <= $item_start >>> 0 | $0 >>> 0 <= $level >>> 0 | ($parent | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spelling_buf_ = $this | 0;
$1 = HEAP32[$spelling_buf_ >> 2] | 0;
$2 = HEAP8[$1 + ((Math_imul($0, $item_start) | 0) + $level) | 0] | 0;
if ($2 << 24 >> 24 <= 64) {
___assert_func(3400, 439, 6400, 1496);
return 0;
}
if (!($2 << 24 >> 24 < 91 | $2 << 24 >> 24 == 104)) {
___assert_func(3400, 439, 6400, 1496);
return 0;
}
$add = $item_start + 1 | 0;
if ($add >>> 0 < $item_end >>> 0) {
$3 = HEAP32[$spelling_buf_ >> 2] | 0;
$4 = HEAP32[$spelling_size_ >> 2] | 0;
$i_0214 = $add;
$char_for_node_0215 = $2;
$num_of_son_0216 = 0;
while (1) {
$5 = HEAP8[$3 + ((Math_imul($4, $i_0214) | 0) + $level) | 0] | 0;
$num_of_son_0_inc = ($5 << 24 >> 24 != $char_for_node_0215 << 24 >> 24) + $num_of_son_0216 & 65535;
$inc23 = $i_0214 + 1 | 0;
if ($inc23 >>> 0 < $item_end >>> 0) {
$i_0214 = $inc23;
$char_for_node_0215 = $5;
$num_of_son_0216 = $num_of_son_0_inc;
} else {
break;
}
}
$num_of_son_0_lcssa = $num_of_son_0_inc + 1 & 65535;
} else {
$num_of_son_0_lcssa = 1;
}
$conv25 = $num_of_son_0_lcssa & 65535;
$node_num_ = $this + 284 | 0;
HEAP32[$node_num_ >> 2] = (HEAP32[$node_num_ >> 2] | 0) + $conv25;
$umul_with_overflow = $conv25 << 3;
$call = __Znaj($umul_with_overflow) | 0;
$7 = $call;
_memset($call | 0, 0, $umul_with_overflow | 0);
$8 = HEAP32[$spelling_buf_ >> 2] | 0;
$mul31 = Math_imul(HEAP32[$spelling_size_ >> 2] | 0, $item_start) | 0;
$add_ptr32 = $8 + $mul31 | 0;
$10 = HEAP8[$8 + ($mul31 + $level) | 0] | 0;
$add34 = $level + 1 | 0;
$cmp37 = (HEAP8[$8 + ($mul31 + $add34) | 0] | 0) == 0;
L2694 : do {
if ($add >>> 0 < $item_end >>> 0) {
$cmp61 = ($level | 0) == 0;
$cmp149 = ($level | 0) == 1;
$spelling_endable_1_off0193 = $cmp37;
$item_start_next_0194 = $item_start;
$i40_0197 = $add;
$son_pos_0201 = 0;
$char_for_node_2205 = $10;
$spelling_last_start_0206 = $add_ptr32;
$min_son_score_0207 = -1;
while (1) {
$12 = HEAP32[$spelling_buf_ >> 2] | 0;
$mul48 = Math_imul(HEAP32[$spelling_size_ >> 2] | 0, $i40_0197) | 0;
$add_ptr49 = $12 + $mul48 | 0;
$14 = HEAP8[$12 + ($mul48 + $level) | 0] | 0;
if (!(__ZN10ime_pinyin12SpellingTrie17is_valid_spl_charEc($14) | 0)) {
break;
}
$conv57 = $char_for_node_2205 << 24 >> 24;
if ($14 << 24 >> 24 == $char_for_node_2205 << 24 >> 24) {
$min_son_score_2 = $min_son_score_0207;
$spelling_last_start_1 = $spelling_last_start_0206;
$char_for_node_3 = $char_for_node_2205;
$son_pos_1 = $son_pos_0201;
$item_start_next_1 = $item_start_next_0194;
$spelling_endable_3_off0 = $spelling_endable_1_off0193;
} else {
$add_ptr60 = $7 + ($son_pos_0201 << 3) | 0;
HEAP8[$7 + ($son_pos_0201 << 3) + 6 | 0] = $char_for_node_2205;
if ($cmp61) {
HEAP32[$this + 56 + ($conv57 - 65 << 2) >> 2] = $add_ptr60;
}
if ($spelling_endable_1_off0193) {
$16 = $7 + ($son_pos_0201 << 3) + 4 | 0;
HEAP16[$16 >> 1] = HEAP16[$16 >> 1] & -2048 | $item_start_next_0194 + 30 & 2047;
}
$arrayidx71 = $spelling_last_start_0206 + $add34 | 0;
$20 = HEAP8[$arrayidx71] | 0;
do {
if ($20 << 24 >> 24 == 0) {
if (($i40_0197 - $item_start_next_0194 | 0) >>> 0 > 1) {
$21 = HEAP8[$arrayidx71] | 0;
label = 2126;
break;
} else {
HEAP32[$add_ptr60 >> 2] = 0;
HEAP8[$7 + ($son_pos_0201 << 3) + 7 | 0] = HEAP8[$spelling_last_start_0206 + ((HEAP32[$spelling_size_ >> 2] | 0) - 1) | 0] | 0;
break;
}
} else {
$21 = $20;
label = 2126;
}
} while (0);
do {
if ((label | 0) == 2126) {
label = 0;
$cmp81 = $21 << 24 >> 24 == 0;
HEAP32[$add_ptr60 >> 2] = __ZN10ime_pinyin12SpellingTrie26construct_spellings_subsetEjjjPNS_12SpellingNodeE($this, ($cmp81 & 1) + $item_start_next_0194 | 0, $i40_0197, $add34, $add_ptr60) | 0;
if (!$cmp81) {
break;
}
$23 = HEAP8[$spelling_last_start_0206 + ((HEAP32[$spelling_size_ >> 2] | 0) - 1) | 0] | 0;
$score = $7 + ($son_pos_0201 << 3) + 7 | 0;
if (($23 & 255) >= (HEAPU8[$score] | 0)) {
break;
}
HEAP8[$score] = $23;
}
} while (0);
$27 = HEAP8[$7 + ($son_pos_0201 << 3) + 7 | 0] | 0;
$_min_son_score_0 = ($27 & 255) < ($min_son_score_0207 & 255) ? $27 : $min_son_score_0207;
do {
if ($cmp61) {
if (!(__ZNK10ime_pinyin12SpellingTrie11is_szm_charEc(0, $char_for_node_2205) | 0)) {
break;
}
$29 = $7 + ($son_pos_0201 << 3) + 4 | 0;
$bf_value140_pn = (($conv57 + 1984 & 65535) + ($char_for_node_2205 << 24 >> 24 > 67) & 65535) + ($char_for_node_2205 << 24 >> 24 > 83) & 2047;
HEAP16[$29 >> 1] = HEAP16[$29 >> 1] & -2048 | $bf_value140_pn;
HEAP16[$this + 220 + (($bf_value140_pn & 65535) << 1) >> 1] = $i40_0197 - $item_start_next_0194 & 65535;
label = 2138;
} else {
if (!($cmp149 & $char_for_node_2205 << 24 >> 24 == 104)) {
break;
}
$32 = HEAP8[$spelling_last_start_0206] | 0;
if (($32 << 24 >> 24 | 0) == 83) {
$part_id_0174 = 21;
} else if (($32 << 24 >> 24 | 0) == 67) {
$part_id_0174 = 4;
} else {
$cmp164 = $32 << 24 >> 24 == 90;
if ($cmp164) {
$part_id_0174 = $cmp164 ? 29 : 0;
} else {
break;
}
}
$34 = $7 + ($son_pos_0201 << 3) + 4 | 0;
HEAP16[$34 >> 1] = HEAP16[$34 >> 1] & -2048 | $part_id_0174;
HEAP16[$this + 220 + (($part_id_0174 & 65535) << 1) >> 1] = $i40_0197 - $item_start_next_0194 & 65535;
label = 2138;
}
} while (0);
do {
if ((label | 0) == 2138) {
label = 0;
$idxprom188 = HEAP16[$7 + ($son_pos_0201 << 3) + 4 >> 1] & 2047;
if ((HEAP16[$this + 220 + ($idxprom188 << 1) >> 1] | 0) == 0) {
HEAP16[$this + 160 + ($idxprom188 << 1) >> 1] = 0;
break;
} else {
HEAP16[$this + 160 + ($idxprom188 << 1) >> 1] = $item_start_next_0194 + 30 & 65535;
break;
}
}
} while (0);
$min_son_score_2 = $_min_son_score_0;
$spelling_last_start_1 = $add_ptr49;
$char_for_node_3 = $14;
$son_pos_1 = $son_pos_0201 + 1 | 0;
$item_start_next_1 = $i40_0197;
$spelling_endable_3_off0 = (HEAP8[$12 + ($mul48 + $add34) | 0] | 0) == 0;
}
$inc217 = $i40_0197 + 1 | 0;
if ($inc217 >>> 0 < $item_end >>> 0) {
$spelling_endable_1_off0193 = $spelling_endable_3_off0;
$item_start_next_0194 = $item_start_next_1;
$i40_0197 = $inc217;
$son_pos_0201 = $son_pos_1;
$char_for_node_2205 = $char_for_node_3;
$spelling_last_start_0206 = $spelling_last_start_1;
$min_son_score_0207 = $min_son_score_2;
} else {
$spelling_endable_1_off0_lcssa = $spelling_endable_3_off0;
$item_start_next_0_lcssa = $item_start_next_1;
$son_pos_0_lcssa = $son_pos_1;
$char_for_node_2_lcssa = $char_for_node_3;
$spelling_last_start_0_lcssa = $spelling_last_start_1;
$min_son_score_0_lcssa = $min_son_score_2;
break L2694;
}
}
___assert_func(3400, 474, 6400, 1280);
return 0;
} else {
$spelling_endable_1_off0_lcssa = $cmp37;
$item_start_next_0_lcssa = $item_start;
$son_pos_0_lcssa = 0;
$char_for_node_2_lcssa = $10;
$spelling_last_start_0_lcssa = $add_ptr32;
$min_son_score_0_lcssa = -1;
}
} while (0);
$add_ptr220 = $7 + ($son_pos_0_lcssa << 3) | 0;
HEAP8[$7 + ($son_pos_0_lcssa << 3) + 6 | 0] = $char_for_node_2_lcssa;
$cmp222 = ($level | 0) == 0;
if ($cmp222) {
HEAP32[$this + 56 + (($char_for_node_2_lcssa << 24 >> 24) - 65 << 2) >> 2] = $add_ptr220;
}
if ($spelling_endable_1_off0_lcssa) {
$44 = $7 + ($son_pos_0_lcssa << 3) + 4 | 0;
HEAP16[$44 >> 1] = HEAP16[$44 >> 1] & -2048 | $item_start_next_0_lcssa + 30 & 2047;
}
$arrayidx237 = $spelling_last_start_0_lcssa + $add34 | 0;
$48 = HEAP8[$arrayidx237] | 0;
do {
if ($48 << 24 >> 24 == 0) {
if (($item_end - $item_start_next_0_lcssa | 0) >>> 0 > 1) {
$49 = HEAP8[$arrayidx237] | 0;
label = 2150;
break;
} else {
HEAP32[$add_ptr220 >> 2] = 0;
HEAP8[$7 + ($son_pos_0_lcssa << 3) + 7 | 0] = HEAP8[$spelling_last_start_0_lcssa + ((HEAP32[$spelling_size_ >> 2] | 0) - 1) | 0] | 0;
break;
}
} else {
$49 = $48;
label = 2150;
}
} while (0);
do {
if ((label | 0) == 2150) {
$cmp248 = $49 << 24 >> 24 == 0;
HEAP32[$add_ptr220 >> 2] = __ZN10ime_pinyin12SpellingTrie26construct_spellings_subsetEjjjPNS_12SpellingNodeE($this, ($cmp248 & 1) + $item_start_next_0_lcssa | 0, $item_end, $add34, $add_ptr220) | 0;
if (!$cmp248) {
break;
}
$51 = HEAP8[$spelling_last_start_0_lcssa + ((HEAP32[$spelling_size_ >> 2] | 0) - 1) | 0] | 0;
$score264 = $7 + ($son_pos_0_lcssa << 3) + 7 | 0;
if (($51 & 255) >= (HEAPU8[$score264] | 0)) {
break;
}
HEAP8[$score264] = $51;
}
} while (0);
$55 = HEAP8[$7 + ($son_pos_0_lcssa << 3) + 7 | 0] | 0;
$_min_son_score_0166 = ($55 & 255) < ($min_son_score_0_lcssa & 255) ? $55 : $min_son_score_0_lcssa;
if (($son_pos_0_lcssa + 1 | 0) != ($conv25 | 0)) {
___assert_func(3400, 598, 6400, 1048);
return 0;
}
do {
if ($cmp222) {
if (!(__ZNK10ime_pinyin12SpellingTrie14szm_is_enabledEc(0, $char_for_node_2_lcssa) | 0)) {
break;
}
$57 = $7 + ($son_pos_0_lcssa << 3) + 4 | 0;
$bf_value318_pn = (($char_for_node_2_lcssa << 24 >> 24 > 67 ? 1985 : 1984) + ($char_for_node_2_lcssa << 24 >> 24) & 65535) + ($char_for_node_2_lcssa << 24 >> 24 > 83) & 2047;
HEAP16[$57 >> 1] = HEAP16[$57 >> 1] & -2048 | $bf_value318_pn;
HEAP16[$this + 220 + (($bf_value318_pn & 65535) << 1) >> 1] = $item_end - $item_start_next_0_lcssa & 65535;
label = 2164;
} else {
if (!(($level | 0) == 1 & $char_for_node_2_lcssa << 24 >> 24 == 104)) {
break;
}
$60 = HEAP8[$spelling_last_start_0_lcssa] | 0;
if (($60 << 24 >> 24 | 0) == 67) {
$part_id336_0180 = 4;
} else if (($60 << 24 >> 24 | 0) == 83) {
$part_id336_0180 = 21;
} else {
$cmp346 = $60 << 24 >> 24 == 90;
if ($cmp346) {
$part_id336_0180 = $cmp346 ? 29 : 0;
} else {
break;
}
}
$62 = $7 + ($son_pos_0_lcssa << 3) + 4 | 0;
HEAP16[$62 >> 1] = HEAP16[$62 >> 1] & -2048 | $part_id336_0180;
HEAP16[$this + 220 + (($part_id336_0180 & 65535) << 1) >> 1] = $item_end - $item_start_next_0_lcssa & 65535;
label = 2164;
}
} while (0);
do {
if ((label | 0) == 2164) {
$idxprom370 = HEAP16[$7 + ($son_pos_0_lcssa << 3) + 4 >> 1] & 2047;
if ((HEAP16[$this + 220 + ($idxprom370 << 1) >> 1] | 0) == 0) {
HEAP16[$this + 160 + ($idxprom370 << 1) >> 1] = 0;
break;
} else {
HEAP16[$this + 160 + ($idxprom370 << 1) >> 1] = $item_start_next_0_lcssa + 30 & 65535;
break;
}
}
} while (0);
$71 = $parent + 4 | 0;
HEAP16[$71 >> 1] = HEAP16[$71 >> 1] & 2047 | $num_of_son_0_lcssa << 11;
HEAP8[$parent + 7 | 0] = $_min_son_score_0166;
$retval_0 = $7;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12SpellingTrie13build_ym_infoEv($this) {
$this = $this | 0;
var $ym_item_size = 0, $ym_num = 0, $call = 0, $0 = 0, $spelling_num_ = 0, $spelling_buf_ = 0, $spelling_size_ = 0, $conv25 = 0, $pos_024 = 0, $5 = 0, $call4 = 0, $call13 = 0, $ym_buf_ = 0, $9 = 0, $call19 = 0, $mul32 = 0, $spl_ym_ids_ = 0, $19 = 0, $call46 = 0, $conv5720 = 0, $id_019 = 0, $call63 = 0, $call68 = 0, $inc81 = 0, $conv57 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$ym_item_size = sp | 0;
$ym_num = sp + 8 | 0;
$call = __Znwj(56) | 0;
$0 = $call;
__ZN10ime_pinyin13SpellingTableC2Ev($0);
if (!(__ZN10ime_pinyin13SpellingTable10init_tableEjjb($0, 5, 128, 0) | 0)) {
___assert_func(3400, 372, 6536, 2888);
return 0;
}
$spelling_num_ = $this + 8 | 0;
L2775 : do {
if ((HEAP32[$spelling_num_ >> 2] | 0) != 0) {
$spelling_buf_ = $this | 0;
$spelling_size_ = $this + 4 | 0;
$pos_024 = 0;
$conv25 = 0;
while (1) {
$5 = HEAP32[$spelling_buf_ >> 2] | 0;
$call4 = __ZN10ime_pinyin12SpellingTrie10get_ym_strEPKc(0, $5 + (Math_imul(HEAP32[$spelling_size_ >> 2] | 0, $conv25) | 0) | 0) | 0;
if ((HEAP8[$call4] | 0) != 0) {
if (!(__ZN10ime_pinyin13SpellingTable12put_spellingEPKcd($0, $call4, 0.0) | 0)) {
break;
}
}
$pos_024 = $pos_024 + 1 & 65535;
$conv25 = $pos_024 & 65535;
if ($conv25 >>> 0 >= (HEAP32[$spelling_num_ >> 2] | 0) >>> 0) {
break L2775;
}
}
___assert_func(3400, 379, 6536, 2888);
return 0;
}
} while (0);
$call13 = __ZN10ime_pinyin13SpellingTable7arrangeEPjS1_($0, $ym_item_size, $ym_num) | 0;
$ym_buf_ = $this + 24 | 0;
$9 = HEAP32[$ym_buf_ >> 2] | 0;
if (($9 | 0) != 0) {
__ZdaPv($9);
}
$call19 = __Znaj(Math_imul(HEAP32[$ym_num >> 2] | 0, HEAP32[$ym_item_size >> 2] | 0) | 0) | 0;
HEAP32[$ym_buf_ >> 2] = $call19;
if (($call19 | 0) == 0) {
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
__ZN10ime_pinyin13SpellingTableD2Ev($0);
__ZdlPv($call);
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$mul32 = Math_imul(HEAP32[$ym_num >> 2] | 0, HEAP32[$ym_item_size >> 2] | 0) | 0;
_memcpy($call19 | 0, $call13 | 0, $mul32) | 0;
HEAP32[$this + 28 >> 2] = HEAP32[$ym_item_size >> 2];
HEAP32[$this + 32 >> 2] = HEAP32[$ym_num >> 2];
if (($call | 0) != 0) {
__ZN10ime_pinyin13SpellingTableD2Ev($0);
__ZdlPv($call);
}
$spl_ym_ids_ = $this + 20 | 0;
$19 = HEAP32[$spl_ym_ids_ >> 2] | 0;
if (($19 | 0) != 0) {
__ZdlPv($19);
}
$call46 = __Znaj((HEAP32[$spelling_num_ >> 2] | 0) + 30 | 0) | 0;
HEAP32[$spl_ym_ids_ >> 2] = $call46;
if (($call46 | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
_memset($call46 | 0, 0, (HEAP32[$spelling_num_ >> 2] | 0) + 30 | 0);
if (((HEAP32[$spelling_num_ >> 2] | 0) + 30 | 0) >>> 0 > 1) {
$id_019 = 1;
$conv5720 = 1;
} else {
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
while (1) {
$call63 = __ZN10ime_pinyin12SpellingTrie10get_ym_strEPKc(0, __ZN10ime_pinyin12SpellingTrie16get_spelling_strEt($this, $id_019) | 0) | 0;
if ((HEAP8[$call63] | 0) == 0) {
HEAP8[(HEAP32[$spl_ym_ids_ >> 2] | 0) + $conv5720 | 0] = 0;
} else {
$call68 = __ZN10ime_pinyin12SpellingTrie9get_ym_idEPKc($this, $call63) | 0;
HEAP8[(HEAP32[$spl_ym_ids_ >> 2] | 0) + $conv5720 | 0] = $call68;
if ($call68 << 24 >> 24 == 0) {
label = 2200;
break;
}
}
$inc81 = $id_019 + 1 & 65535;
$conv57 = $inc81 & 65535;
if ($conv57 >>> 0 < ((HEAP32[$spelling_num_ >> 2] | 0) + 30 | 0) >>> 0) {
$id_019 = $inc81;
$conv5720 = $conv57;
} else {
$retval_0 = 1;
label = 2207;
break;
}
}
if ((label | 0) == 2207) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2200) {
___assert_func(3400, 418, 6536, 1992);
return 0;
}
return 0;
}
function __ZN10ime_pinyin4SyncD2Ev($this) {
$this = $this | 0;
return;
}
function __ZN10ime_pinyin12SpellingTrie16get_spelling_numEv($this) {
$this = $this | 0;
return HEAP32[$this + 8 >> 2] | 0;
}
function __ZN10ime_pinyin12SpellingTrie18get_spelling_str16Et($this, $splid) {
$this = $this | 0;
$splid = $splid | 0;
var $splstr16_queried_ = 0, $spelling_size_ = 0, $1 = 0, $conv5 = 0, $spelling_buf_ = 0, $2 = 0, $pos_014 = 0, $add = 0, $dec_splid = 0, $18 = 0;
$splstr16_queried_ = $this + 40 | 0;
HEAP16[HEAP32[$splstr16_queried_ >> 2] >> 1] = 0;
if (($splid & 65535) > 29) {
$spelling_size_ = $this + 4 | 0;
$1 = HEAP32[$spelling_size_ >> 2] | 0;
if (($1 | 0) == 0) {
$18 = HEAP32[$splstr16_queried_ >> 2] | 0;
return $18 | 0;
}
$conv5 = $splid - 30 & 65535;
$spelling_buf_ = $this | 0;
$pos_014 = 0;
$2 = $1;
do {
$add = (Math_imul($2, $conv5) | 0) + $pos_014 | 0;
HEAP16[(HEAP32[$splstr16_queried_ >> 2] | 0) + ($pos_014 << 1) >> 1] = HEAP8[(HEAP32[$spelling_buf_ >> 2] | 0) + $add | 0] | 0;
$pos_014 = $pos_014 + 1 | 0;
$2 = HEAP32[$spelling_size_ >> 2] | 0;
} while ($pos_014 >>> 0 < $2 >>> 0);
$18 = HEAP32[$splstr16_queried_ >> 2] | 0;
return $18 | 0;
}
if (($splid << 16 >> 16 | 0) == 21) {
HEAP16[HEAP32[$splstr16_queried_ >> 2] >> 1] = 83;
HEAP16[(HEAP32[$splstr16_queried_ >> 2] | 0) + 2 >> 1] = 104;
HEAP16[(HEAP32[$splstr16_queried_ >> 2] | 0) + 4 >> 1] = 0;
$18 = HEAP32[$splstr16_queried_ >> 2] | 0;
return $18 | 0;
} else if (($splid << 16 >> 16 | 0) == 29) {
HEAP16[HEAP32[$splstr16_queried_ >> 2] >> 1] = 90;
HEAP16[(HEAP32[$splstr16_queried_ >> 2] | 0) + 2 >> 1] = 104;
HEAP16[(HEAP32[$splstr16_queried_ >> 2] | 0) + 4 >> 1] = 0;
$18 = HEAP32[$splstr16_queried_ >> 2] | 0;
return $18 | 0;
} else if (($splid << 16 >> 16 | 0) == 4) {
HEAP16[HEAP32[$splstr16_queried_ >> 2] >> 1] = 67;
HEAP16[(HEAP32[$splstr16_queried_ >> 2] | 0) + 2 >> 1] = 104;
HEAP16[(HEAP32[$splstr16_queried_ >> 2] | 0) + 4 >> 1] = 0;
$18 = HEAP32[$splstr16_queried_ >> 2] | 0;
return $18 | 0;
} else {
$dec_splid = ((($splid & 65535) > 3) << 31 >> 31) + $splid & 65535;
HEAP16[HEAP32[$splstr16_queried_ >> 2] >> 1] = ($dec_splid + 64 & 65535) + ((($dec_splid & 65535) > 19) << 31 >> 31) & 65535;
HEAP16[(HEAP32[$splstr16_queried_ >> 2] | 0) + 2 >> 1] = 0;
$18 = HEAP32[$splstr16_queried_ >> 2] | 0;
return $18 | 0;
}
return 0;
}
function __ZN10ime_pinyin12SpellingTrie18get_spelling_str16EtPtj($this, $splid, $splstr16, $splstr16_len) {
$this = $this | 0;
$splid = $splid | 0;
$splstr16 = $splstr16 | 0;
$splstr16_len = $splstr16_len | 0;
var $conv8 = 0, $spelling_size_ = 0, $spelling_buf_ = 0, $pos_0 = 0, $add = 0, $2 = 0, $dec_splid = 0, $retval_0 = 0, label = 0;
if (($splstr16 | 0) == 0 | $splstr16_len >>> 0 < 7) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (($splid & 65535) > 29) {
$conv8 = $splid - 30 & 65535;
$spelling_size_ = $this + 4 | 0;
$spelling_buf_ = $this | 0;
$pos_0 = 0;
while (1) {
if ($pos_0 >>> 0 >= 7) {
$retval_0 = 0;
label = 2239;
break;
}
$add = (Math_imul(HEAP32[$spelling_size_ >> 2] | 0, $conv8) | 0) + $pos_0 | 0;
$2 = HEAP8[(HEAP32[$spelling_buf_ >> 2] | 0) + $add | 0] | 0;
HEAP16[$splstr16 + ($pos_0 << 1) >> 1] = $2 << 24 >> 24;
if ($2 << 24 >> 24 == 0) {
$retval_0 = $pos_0;
label = 2245;
break;
} else {
$pos_0 = $pos_0 + 1 | 0;
}
}
if ((label | 0) == 2245) {
return $retval_0 | 0;
} else if ((label | 0) == 2239) {
return $retval_0 | 0;
}
}
if (($splid << 16 >> 16 | 0) == 29) {
HEAP16[$splstr16 >> 1] = 90;
HEAP16[$splstr16 + 2 >> 1] = 104;
HEAP16[$splstr16 + 4 >> 1] = 0;
$retval_0 = 2;
return $retval_0 | 0;
} else if (($splid << 16 >> 16 | 0) == 21) {
HEAP16[$splstr16 >> 1] = 83;
HEAP16[$splstr16 + 2 >> 1] = 104;
HEAP16[$splstr16 + 4 >> 1] = 0;
$retval_0 = 2;
return $retval_0 | 0;
} else if (($splid << 16 >> 16 | 0) == 4) {
HEAP16[$splstr16 >> 1] = 67;
HEAP16[$splstr16 + 2 >> 1] = 104;
HEAP16[$splstr16 + 4 >> 1] = 0;
$retval_0 = 2;
return $retval_0 | 0;
} else {
$dec_splid = ((($splid & 65535) > 3) << 31 >> 31) + $splid & 65535;
HEAP16[$splstr16 >> 1] = ($dec_splid + 64 & 65535) + ((($dec_splid & 65535) > 19) << 31 >> 31) & 65535;
HEAP16[$splstr16 + 2 >> 1] = 0;
$retval_0 = 1;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin4SyncC2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = 0;
HEAP32[$this + 4 >> 2] = 0;
HEAP32[$this + 8 >> 2] = 0;
return;
}
function __ZN10ime_pinyin4Sync18get_last_got_countEv($this) {
$this = $this | 0;
return HEAP32[$this + 8 >> 2] | 0;
}
function _utf16_strtok($utf16_str, $token_size, $utf16_str_next) {
$utf16_str = $utf16_str | 0;
$token_size = $token_size | 0;
$utf16_str_next = $utf16_str_next | 0;
var $pos_0 = 0, $arrayidx = 0, $0 = 0, $pos_1 = 0, $arrayidx_sum = 0, $arrayidx13 = 0, $1 = 0, $retval_0 = 0, label = 0;
if (($utf16_str | 0) == 0 | ($token_size | 0) == 0 | ($utf16_str_next | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
} else {
$pos_0 = 0;
}
while (1) {
$arrayidx = $utf16_str + ($pos_0 << 1) | 0;
$0 = HEAP16[$arrayidx >> 1] | 0;
if (!(($0 << 16 >> 16 | 0) == 32 | ($0 << 16 >> 16 | 0) == 10 | ($0 << 16 >> 16 | 0) == 9)) {
$pos_1 = 0;
break;
}
$pos_0 = $pos_0 + 1 | 0;
}
while (1) {
$arrayidx_sum = $pos_1 + $pos_0 | 0;
$arrayidx13 = $utf16_str + ($arrayidx_sum << 1) | 0;
$1 = HEAP16[$arrayidx13 >> 1] | 0;
if (($1 << 16 >> 16 | 0) == 9 | ($1 << 16 >> 16 | 0) == 10 | ($1 << 16 >> 16 | 0) == 32) {
label = 2254;
break;
} else if (($1 << 16 >> 16 | 0) == 0) {
label = 2253;
break;
}
$pos_1 = $pos_1 + 1 | 0;
}
do {
if ((label | 0) == 2254) {
HEAP32[$utf16_str_next >> 2] = $utf16_str + ($arrayidx_sum + 1 << 1);
} else if ((label | 0) == 2253) {
HEAP32[$utf16_str_next >> 2] = 0;
if (($pos_1 | 0) == 0) {
$retval_0 = 0;
} else {
break;
}
return $retval_0 | 0;
}
} while (0);
HEAP16[$arrayidx13 >> 1] = 0;
HEAP32[$token_size >> 2] = $pos_1;
$retval_0 = $arrayidx;
return $retval_0 | 0;
}
function _utf16_atoi($utf16_str) {
$utf16_str = $utf16_str | 0;
var $cmp1 = 0, $_ = 0, $_10 = 0, $1 = 0, $3 = 0, $pos_014 = 0, $value_013 = 0, $add = 0, $inc12 = 0, $4 = 0, $value_0_lcssa = 0, $retval_0 = 0;
if (($utf16_str | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$cmp1 = (HEAP16[$utf16_str >> 1] | 0) == 45;
$_ = $cmp1 ? -1 : 1;
$_10 = $cmp1 & 1;
$1 = HEAP16[$utf16_str + ($_10 << 1) >> 1] | 0;
if (($1 - 48 & 65535) < 10) {
$value_013 = 0;
$pos_014 = $_10;
$3 = $1;
while (1) {
$add = ($value_013 * 10 | 0) - 48 + ($3 & 65535) | 0;
$inc12 = $pos_014 + 1 | 0;
$4 = HEAP16[$utf16_str + ($inc12 << 1) >> 1] | 0;
if (($4 - 48 & 65535) < 10) {
$value_013 = $add;
$pos_014 = $inc12;
$3 = $4;
} else {
$value_0_lcssa = $add;
break;
}
}
} else {
$value_0_lcssa = 0;
}
$retval_0 = Math_imul($value_0_lcssa, $_) | 0;
return $retval_0 | 0;
}
function _utf16_strlen($utf16_str) {
$utf16_str = $utf16_str | 0;
var $size_0 = 0, $retval_0 = 0;
if (($utf16_str | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
} else {
$size_0 = 0;
}
while (1) {
if ((HEAP16[$utf16_str + ($size_0 << 1) >> 1] | 0) == 0) {
$retval_0 = $size_0;
break;
} else {
$size_0 = $size_0 + 1 | 0;
}
}
return $retval_0 | 0;
}
function _utf16_strcpy_tochar($dst, $src) {
$dst = $dst | 0;
$src = $src | 0;
var $0 = 0, $cp_010 = 0, $src_addr_09 = 0, $incdec_ptr = 0, $incdec_ptr4 = 0, $1 = 0, $retval_0 = 0;
if (($src | 0) == 0 | ($dst | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$0 = HEAP16[$src >> 1] | 0;
HEAP8[$dst] = $0 & 255;
if ($0 << 16 >> 16 == 0) {
$retval_0 = $dst;
return $retval_0 | 0;
} else {
$src_addr_09 = $src;
$cp_010 = $dst;
}
while (1) {
$incdec_ptr = $cp_010 + 1 | 0;
$incdec_ptr4 = $src_addr_09 + 2 | 0;
$1 = HEAP16[$incdec_ptr4 >> 1] | 0;
HEAP8[$incdec_ptr] = $1 & 255;
if ($1 << 16 >> 16 == 0) {
$retval_0 = $dst;
break;
} else {
$src_addr_09 = $incdec_ptr4;
$cp_010 = $incdec_ptr;
}
}
return $retval_0 | 0;
}
function _utf16_strcmp($str1, $str2) {
$str1 = $str1 | 0;
$str2 = $str2 | 0;
var $pos_0 = 0, $0 = 0, $1 = 0;
$pos_0 = 0;
while (1) {
$0 = HEAP16[$str1 + ($pos_0 << 1) >> 1] | 0;
$1 = HEAP16[$str2 + ($pos_0 << 1) >> 1] | 0;
if ($0 << 16 >> 16 == $1 << 16 >> 16 & $0 << 16 >> 16 != 0) {
$pos_0 = $pos_0 + 1 | 0;
} else {
break;
}
}
return ($0 & 65535) - ($1 & 65535) | 0;
}
function _utf16_strncmp($str1, $str2, $size) {
$str1 = $str1 | 0;
$str2 = $str2 | 0;
$size = $size | 0;
var $pos_0 = 0, $0 = 0, $retval_0 = 0;
$pos_0 = 0;
while (1) {
if ($pos_0 >>> 0 >= $size >>> 0) {
break;
}
$0 = HEAP16[$str1 + ($pos_0 << 1) >> 1] | 0;
if ($0 << 16 >> 16 == (HEAP16[$str2 + ($pos_0 << 1) >> 1] | 0) & $0 << 16 >> 16 != 0) {
$pos_0 = $pos_0 + 1 | 0;
} else {
break;
}
}
if (($pos_0 | 0) == ($size | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = (HEAPU16[$str1 + ($pos_0 << 1) >> 1] | 0) - (HEAPU16[$str2 + ($pos_0 << 1) >> 1] | 0) | 0;
return $retval_0 | 0;
}
function _utf16_strcpy($dst, $src) {
$dst = $dst | 0;
$src = $src | 0;
var $0 = 0, $cp_09 = 0, $src_addr_08 = 0, $incdec_ptr = 0, $incdec_ptr3 = 0, $1 = 0, $retval_0 = 0;
if (($src | 0) == 0 | ($dst | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$0 = HEAP16[$src >> 1] | 0;
HEAP16[$dst >> 1] = $0;
if ($0 << 16 >> 16 == 0) {
$retval_0 = $dst;
return $retval_0 | 0;
} else {
$src_addr_08 = $src;
$cp_09 = $dst;
}
while (1) {
$incdec_ptr = $cp_09 + 2 | 0;
$incdec_ptr3 = $src_addr_08 + 2 | 0;
$1 = HEAP16[$incdec_ptr3 >> 1] | 0;
HEAP16[$incdec_ptr >> 1] = $1;
if ($1 << 16 >> 16 == 0) {
$retval_0 = $dst;
break;
} else {
$src_addr_08 = $incdec_ptr3;
$cp_09 = $incdec_ptr;
}
}
return $retval_0 | 0;
}
function _utf16_strncpy($dst, $src, $size) {
$dst = $dst | 0;
$src = $src | 0;
$size = $size | 0;
var $src_addr_0 = 0, $size_addr_0 = 0, $cp_0 = 0, $0 = 0, $retval_0 = 0;
L2923 : do {
if (($src | 0) == 0 | ($dst | 0) == 0 | ($size | 0) == 0) {
$retval_0 = 0;
} else {
if (($src | 0) == ($dst | 0)) {
$retval_0 = $dst;
break;
}
if ($dst >>> 0 < $src >>> 0) {
$cp_0 = $dst;
$size_addr_0 = $size;
$src_addr_0 = $src;
} else {
if ($dst >>> 0 <= $src >>> 0) {
$retval_0 = $dst;
break;
}
if (($src + ($size << 1) | 0) >>> 0 > $dst >>> 0) {
$retval_0 = $dst;
break;
} else {
$cp_0 = $dst;
$size_addr_0 = $size;
$src_addr_0 = $src;
}
}
while (1) {
if (($size_addr_0 | 0) == 0) {
$retval_0 = $dst;
break L2923;
}
$0 = HEAP16[$src_addr_0 >> 1] | 0;
HEAP16[$cp_0 >> 1] = $0;
if ($0 << 16 >> 16 == 0) {
$retval_0 = $dst;
break;
} else {
$cp_0 = $cp_0 + 2 | 0;
$size_addr_0 = $size_addr_0 - 1 | 0;
$src_addr_0 = $src_addr_0 + 2 | 0;
}
}
}
} while (0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin12SpellingTrie13load_spl_trieEP7__sFILE($this, $fp) {
$this = $this | 0;
$fp = $fp | 0;
var $spelling_size_ = 0, $spelling_num_ = 0, $score_amplifier_ = 0, $average_score_ = 0, $spelling_buf_ = 0, $3 = 0, $call23 = 0, $call33 = 0, $8 = 0, $retval_0 = 0;
if (($fp | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spelling_size_ = $this + 4 | 0;
if ((_fread($spelling_size_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spelling_num_ = $this + 8 | 0;
if ((_fread($spelling_num_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$score_amplifier_ = $this + 12 | 0;
if ((_fread($score_amplifier_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$average_score_ = $this + 16 | 0;
if ((_fread($average_score_ | 0, 1, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spelling_buf_ = $this | 0;
$3 = HEAP32[$spelling_buf_ >> 2] | 0;
if (($3 | 0) != 0) {
__ZdaPv($3);
}
$call23 = __Znaj(Math_imul(HEAP32[$spelling_num_ >> 2] | 0, HEAP32[$spelling_size_ >> 2] | 0) | 0) | 0;
HEAP32[$spelling_buf_ >> 2] = $call23;
if (($call23 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call33 = _fread($call23 | 0, HEAP32[$spelling_size_ >> 2] | 0, HEAP32[$spelling_num_ >> 2] | 0, $fp | 0) | 0;
$8 = HEAP32[$spelling_num_ >> 2] | 0;
if (($call33 | 0) != ($8 | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin12SpellingTrie9constructEPKcjjfh($this, HEAP32[$spelling_buf_ >> 2] | 0, HEAP32[$spelling_size_ >> 2] | 0, $8, +HEAPF32[$score_amplifier_ >> 2], HEAP8[$average_score_] | 0) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin4Sync5beginEPKc($this, $filename) {
$this = $this | 0;
$filename = $filename | 0;
var $userdict_ = 0, $call = 0, $dictfile_ = 0, $call9 = 0, $1 = 0, $call19 = 0, $7 = 0, $retval_0 = 0;
$userdict_ = $this | 0;
if ((HEAP32[$userdict_ >> 2] | 0) != 0) {
__ZN10ime_pinyin4Sync6finishEv($this);
}
if (($filename | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call = _strdup($filename | 0) | 0;
$dictfile_ = $this + 4 | 0;
HEAP32[$dictfile_ >> 2] = $call;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call9 = __Znwj(1132) | 0;
$1 = $call9;
__ZN10ime_pinyin8UserDictC2Ev($1);
HEAP32[$userdict_ >> 2] = $1;
if (($call9 | 0) == 0) {
_free(HEAP32[$dictfile_ >> 2] | 0);
HEAP32[$dictfile_ >> 2] = 0;
$retval_0 = 0;
return $retval_0 | 0;
}
$call19 = FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$call9 >> 2] | 0) + 8 >> 2] & 31]($1, HEAP32[$dictfile_ >> 2] | 0, 500001, 6e5) | 0;
$7 = HEAP32[$userdict_ >> 2] | 0;
if ($call19) {
__ZN10ime_pinyin8UserDict9set_limitEjjj($7, 5e3, 2e5, 20);
$retval_0 = 1;
return $retval_0 | 0;
}
if (($7 | 0) != 0) {
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$7 >> 2] | 0) + 4 >> 2] & 127]($7);
}
HEAP32[$userdict_ >> 2] = 0;
_free(HEAP32[$dictfile_ >> 2] | 0);
HEAP32[$dictfile_ >> 2] = 0;
$retval_0 = 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin4Sync6finishEv($this) {
$this = $this | 0;
var $userdict_ = 0, $0 = 0, $3 = 0, $dictfile_ = 0;
$userdict_ = $this | 0;
$0 = HEAP32[$userdict_ >> 2] | 0;
if (($0 | 0) == 0) {
return;
}
FUNCTION_TABLE_ii[HEAP32[(HEAP32[$0 >> 2] | 0) + 12 >> 2] & 31]($0) | 0;
$3 = HEAP32[$userdict_ >> 2] | 0;
if (($3 | 0) != 0) {
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$3 >> 2] | 0) + 4 >> 2] & 127]($3);
}
HEAP32[$userdict_ >> 2] = 0;
$dictfile_ = $this + 4 | 0;
_free(HEAP32[$dictfile_ >> 2] | 0);
HEAP32[$dictfile_ >> 2] = 0;
HEAP32[$this + 8 >> 2] = 0;
return;
}
function __ZN10ime_pinyin4Sync10put_lemmasEPti($this, $lemmas, $len) {
$this = $this | 0;
$lemmas = $lemmas | 0;
$len = $len | 0;
return __ZN10ime_pinyin8UserDict38put_lemmas_no_sync_from_utf16le_stringEPti(HEAP32[$this >> 2] | 0, $lemmas, $len) | 0;
}
function __ZN10ime_pinyin4Sync10get_lemmasEPti($this, $str, $size) {
$this = $this | 0;
$str = $str | 0;
$size = $size | 0;
return __ZN10ime_pinyin8UserDict48get_sync_lemmas_in_utf16le_string_from_beginningEPtiPi(HEAP32[$this >> 2] | 0, $str, $size, $this + 8 | 0) | 0;
}
function __ZN10ime_pinyin4Sync15get_total_countEv($this) {
$this = $this | 0;
return __ZN10ime_pinyin8UserDict14get_sync_countEv(HEAP32[$this >> 2] | 0) | 0;
}
function __ZN10ime_pinyin4Sync14clear_last_gotEv($this) {
$this = $this | 0;
var $last_count_ = 0, $0 = 0;
$last_count_ = $this + 8 | 0;
$0 = HEAP32[$last_count_ >> 2] | 0;
if (($0 | 0) < 0) {
return;
}
__ZN10ime_pinyin8UserDict17clear_sync_lemmasEjj(HEAP32[$this >> 2] | 0, 0, $0);
HEAP32[$last_count_ >> 2] = 0;
return;
}
function __ZN10ime_pinyin4Sync12get_capacityEv($this) {
$this = $this | 0;
var $stat = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 64 | 0;
$stat = sp | 0;
__ZN10ime_pinyin8UserDict5stateEPNS0_12UserDictStatE(HEAP32[$this >> 2] | 0, $stat) | 0;
STACKTOP = sp;
return (HEAP32[$stat + 52 >> 2] | 0) - (HEAP32[$stat + 28 >> 2] | 0) | 0;
}
function _utf16_atof($utf16_str) {
$utf16_str = $utf16_str | 0;
var $arraydecay = 0, $retval_0 = 0.0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 256 | 0;
if ((_utf16_strlen($utf16_str) | 0) >>> 0 > 255) {
$retval_0 = 0.0;
STACKTOP = sp;
return +$retval_0;
}
$arraydecay = sp | 0;
_utf16_strcpy_tochar($arraydecay, $utf16_str) | 0;
$retval_0 = +_atof($arraydecay);
STACKTOP = sp;
return +$retval_0;
}
function __ZN10ime_pinyin8DictListC2Ev($this) {
$this = $this | 0;
HEAP8[$this | 0] = 0;
_memset($this + 8 | 0, 0, 16);
HEAP32[$this + 4 >> 2] = __ZN10ime_pinyin12SpellingTrie14get_cpinstanceEv() | 0;
HEAP32[$this + 96 >> 2] = 14;
HEAP32[$this + 100 >> 2] = 18;
HEAP32[$this + 104 >> 2] = 10;
HEAP32[$this + 108 >> 2] = 12;
HEAP32[$this + 112 >> 2] = 8;
HEAP32[$this + 116 >> 2] = 32;
HEAP32[$this + 120 >> 2] = 46;
HEAP32[$this + 124 >> 2] = 38;
return;
}
function __ZN10ime_pinyin8DictListD2Ev($this) {
$this = $this | 0;
__ZN10ime_pinyin8DictList13free_resourceEv($this);
return;
}
function __ZN10ime_pinyin8DictList13free_resourceEv($this) {
$this = $this | 0;
var $buf_ = 0, $0 = 0, $scis_hz_ = 0, $2 = 0, $scis_splid_ = 0, $4 = 0;
$buf_ = $this + 20 | 0;
$0 = HEAP32[$buf_ >> 2] | 0;
if (($0 | 0) != 0) {
_free($0);
}
HEAP32[$buf_ >> 2] = 0;
$scis_hz_ = $this + 12 | 0;
$2 = HEAP32[$scis_hz_ >> 2] | 0;
if (($2 | 0) != 0) {
_free($2);
}
HEAP32[$scis_hz_ >> 2] = 0;
$scis_splid_ = $this + 16 | 0;
$4 = HEAP32[$scis_splid_ >> 2] | 0;
if (($4 | 0) == 0) {
HEAP32[$scis_splid_ >> 2] = 0;
return;
}
_free($4 | 0);
HEAP32[$scis_splid_ >> 2] = 0;
return;
}
function __ZN10ime_pinyin8DictList14alloc_resourceEjj($this, $buf_size, $scis_num) {
$this = $this | 0;
$buf_size = $buf_size | 0;
$scis_num = $scis_num | 0;
var $call = 0, $scis_num_ = 0, $call5 = 0, $call12 = 0, $retval_0 = 0;
$call = _malloc($buf_size << 1) | 0;
HEAP32[$this + 20 >> 2] = $call;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$scis_num_ = $this + 8 | 0;
HEAP32[$scis_num_ >> 2] = $scis_num;
$call5 = _malloc($scis_num << 1) | 0;
HEAP32[$this + 12 >> 2] = $call5;
if (($call5 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call12 = _malloc(HEAP32[$scis_num_ >> 2] << 1) | 0;
HEAP32[$this + 16 >> 2] = $call12;
$retval_0 = ($call12 | 0) != 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictList9init_listEPKNS_14SingleCharItemEjPKNS_10LemmaEntryEj($this, $scis, $scis_num, $lemma_arr, $lemma_num) {
$this = $this | 0;
$scis = $scis | 0;
$scis_num = $scis_num | 0;
$lemma_arr = $lemma_arr | 0;
$lemma_num = $lemma_num | 0;
var $initialized_ = 0, $0 = 0, $call = 0, $retval_0 = 0;
if (($scis | 0) == 0 | ($scis_num | 0) == 0 | ($lemma_arr | 0) == 0 | ($lemma_num | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$initialized_ = $this | 0;
HEAP8[$initialized_] = 0;
$0 = HEAP32[$this + 20 >> 2] | 0;
if (($0 | 0) != 0) {
_free($0);
}
$call = __ZN10ime_pinyin8DictList14calculate_sizeEPKNS_10LemmaEntryEj($this, $lemma_arr, $lemma_num) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin8DictList14alloc_resourceEjj($this, $call, $scis_num) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin8DictList9fill_scisEPKNS_14SingleCharItemEj($this, $scis, $scis_num);
__ZN10ime_pinyin8DictList9fill_listEPKNS_10LemmaEntryEj($this, $lemma_arr, $lemma_num);
HEAP8[$initialized_] = 1;
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictList13get_lemma_strEjPtt($this, $id_lemma, $str_buf, $str_max) {
$this = $this | 0;
$id_lemma = $id_lemma | 0;
$str_buf = $str_buf | 0;
$str_max = $str_max | 0;
var $sub = 0, $3 = 0, $_lcssa = 0, $add_lcssa29 = 0, $i_024_lcssa28 = 0, $conv625_lcssa27 = 0, $5 = 0, $6 = 0, $add_ptr_sum = 0, $conv3221 = 0, $len_020 = 0, $inc = 0, $retval_0 = 0, $8 = 0, $10 = 0, $12 = 0, $14 = 0, $16 = 0, $18 = 0, $20 = 0, label = 0;
if ((HEAP8[$this | 0] & 1) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$this + 92 >> 2] | 0) >>> 0 <= $id_lemma >>> 0 | ($str_buf | 0) == 0 | ($str_max & 65535) < 2) {
$retval_0 = 0;
return $retval_0 | 0;
}
$sub = ($str_max & 65535) - 1 | 0;
if (($sub | 0) < 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$3 = HEAP32[$this + 60 >> 2] | 0;
if ($3 >>> 0 > $id_lemma >>> 0) {
label = 2401;
} else {
if ((HEAP32[$this + 64 >> 2] | 0) >>> 0 > $id_lemma >>> 0) {
$conv625_lcssa27 = 0;
$i_024_lcssa28 = 0;
$add_lcssa29 = 1;
$_lcssa = $3;
} else {
label = 2401;
}
}
do {
if ((label | 0) == 2401) {
if (($sub | 0) < 2) {
$retval_0 = 0;
return $retval_0 | 0;
}
$8 = HEAP32[$this + 64 >> 2] | 0;
if ($8 >>> 0 <= $id_lemma >>> 0) {
if ((HEAP32[$this + 68 >> 2] | 0) >>> 0 > $id_lemma >>> 0) {
$conv625_lcssa27 = 1;
$i_024_lcssa28 = 1;
$add_lcssa29 = 2;
$_lcssa = $8;
break;
}
}
if (($sub | 0) < 3) {
$retval_0 = 0;
return $retval_0 | 0;
}
$10 = HEAP32[$this + 68 >> 2] | 0;
if ($10 >>> 0 <= $id_lemma >>> 0) {
if ((HEAP32[$this + 72 >> 2] | 0) >>> 0 > $id_lemma >>> 0) {
$conv625_lcssa27 = 2;
$i_024_lcssa28 = 2;
$add_lcssa29 = 3;
$_lcssa = $10;
break;
}
}
if (($sub | 0) < 4) {
$retval_0 = 0;
return $retval_0 | 0;
}
$12 = HEAP32[$this + 72 >> 2] | 0;
if ($12 >>> 0 <= $id_lemma >>> 0) {
if ((HEAP32[$this + 76 >> 2] | 0) >>> 0 > $id_lemma >>> 0) {
$conv625_lcssa27 = 3;
$i_024_lcssa28 = 3;
$add_lcssa29 = 4;
$_lcssa = $12;
break;
}
}
if (($sub | 0) < 5) {
$retval_0 = 0;
return $retval_0 | 0;
}
$14 = HEAP32[$this + 76 >> 2] | 0;
if ($14 >>> 0 <= $id_lemma >>> 0) {
if ((HEAP32[$this + 80 >> 2] | 0) >>> 0 > $id_lemma >>> 0) {
$conv625_lcssa27 = 4;
$i_024_lcssa28 = 4;
$add_lcssa29 = 5;
$_lcssa = $14;
break;
}
}
if (($sub | 0) < 6) {
$retval_0 = 0;
return $retval_0 | 0;
}
$16 = HEAP32[$this + 80 >> 2] | 0;
if ($16 >>> 0 <= $id_lemma >>> 0) {
if ((HEAP32[$this + 84 >> 2] | 0) >>> 0 > $id_lemma >>> 0) {
$conv625_lcssa27 = 5;
$i_024_lcssa28 = 5;
$add_lcssa29 = 6;
$_lcssa = $16;
break;
}
}
if (($sub | 0) < 7) {
$retval_0 = 0;
return $retval_0 | 0;
}
$18 = HEAP32[$this + 84 >> 2] | 0;
if ($18 >>> 0 <= $id_lemma >>> 0) {
if ((HEAP32[$this + 88 >> 2] | 0) >>> 0 > $id_lemma >>> 0) {
$conv625_lcssa27 = 6;
$i_024_lcssa28 = 6;
$add_lcssa29 = 7;
$_lcssa = $18;
break;
}
}
if (($sub | 0) < 8) {
$retval_0 = 0;
return $retval_0 | 0;
}
$20 = HEAP32[$this + 88 >> 2] | 0;
if ($20 >>> 0 > $id_lemma >>> 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$this + 92 >> 2] | 0) >>> 0 > $id_lemma >>> 0) {
$conv625_lcssa27 = 7;
$i_024_lcssa28 = 7;
$add_lcssa29 = 8;
$_lcssa = $20;
break;
} else {
$retval_0 = 0;
}
return $retval_0 | 0;
}
} while (0);
$5 = HEAP32[$this + 20 >> 2] | 0;
$6 = HEAP32[$this + 24 + ($conv625_lcssa27 << 2) >> 2] | 0;
$add_ptr_sum = $6 + (Math_imul($id_lemma - $_lcssa | 0, $add_lcssa29) | 0) | 0;
$len_020 = 0;
$conv3221 = 0;
while (1) {
HEAP16[$str_buf + ($conv3221 << 1) >> 1] = HEAP16[$5 + ($add_ptr_sum + $conv3221 << 1) >> 1] | 0;
$inc = $len_020 + 1 & 65535;
if (($inc & 65535) > ($i_024_lcssa28 & 65535)) {
break;
} else {
$len_020 = $inc;
$conv3221 = $inc & 65535;
}
}
HEAP16[$str_buf + ($add_lcssa29 << 1) >> 1] = 0;
$retval_0 = $add_lcssa29 & 65535;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictList21find_pos2_startedbyhzEt($this, $hz_char) {
$this = $this | 0;
$hz_char = $hz_char | 0;
var $hz_char_addr = 0, $buf_ = 0, $arrayidx = 0, $2 = 0, $call = 0, $add_ptr9 = 0, $found_2w_0 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$hz_char_addr = sp | 0;
HEAP16[$hz_char_addr >> 1] = $hz_char;
$buf_ = $this + 20 | 0;
$arrayidx = $this + 28 | 0;
$2 = HEAP32[$arrayidx >> 2] | 0;
$call = __ZN10ime_pinyin9mybsearchEPKvS1_jjPFiS1_S1_E($hz_char_addr, (HEAP32[$buf_ >> 2] | 0) + ($2 << 1) | 0, ((HEAP32[$this + 32 >> 2] | 0) - $2 | 0) >>> 1, 4, 14) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$add_ptr9 = (HEAP32[$buf_ >> 2] | 0) + (HEAP32[$arrayidx >> 2] << 1) | 0;
$found_2w_0 = $call;
while (1) {
if ($found_2w_0 >>> 0 <= $add_ptr9 >>> 0) {
$retval_0 = $found_2w_0;
label = 2442;
break;
}
if ((HEAP16[$found_2w_0 >> 1] | 0) == (HEAP16[$found_2w_0 - 2 >> 1] | 0)) {
$found_2w_0 = $found_2w_0 - 4 | 0;
} else {
$retval_0 = $found_2w_0;
label = 2441;
break;
}
}
if ((label | 0) == 2442) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2441) {
STACKTOP = sp;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8DictList21find_pos_startedbyhzsEPKtjPFiPKvS4_E($this, $last_hzs, $word_len, $cmp_func) {
$this = $this | 0;
$last_hzs = $last_hzs | 0;
$word_len = $word_len | 0;
$cmp_func = $cmp_func | 0;
var $buf_ = 0, $arrayidx = 0, $2 = 0, $call = 0, $idx_neg = 0, $found_w_0 = 0, $add_ptr14 = 0, $retval_0 = 0, label = 0;
$buf_ = $this + 20 | 0;
$arrayidx = $this + 24 + ($word_len - 1 << 2) | 0;
$2 = HEAP32[$arrayidx >> 2] | 0;
$call = __ZN10ime_pinyin9mybsearchEPKvS1_jjPFiS1_S1_E($last_hzs, (HEAP32[$buf_ >> 2] | 0) + ($2 << 1) | 0, (((HEAP32[$this + 24 + ($word_len << 2) >> 2] | 0) - $2 | 0) >>> 0) / ($word_len >>> 0) | 0, $word_len << 1, $cmp_func) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$idx_neg = -$word_len | 0;
$found_w_0 = $call;
while (1) {
if ($found_w_0 >>> 0 <= ((HEAP32[$buf_ >> 2] | 0) + (HEAP32[$arrayidx >> 2] << 1) | 0) >>> 0) {
$retval_0 = $found_w_0;
label = 2450;
break;
}
$add_ptr14 = $found_w_0 + ($idx_neg << 1) | 0;
if ((FUNCTION_TABLE_iii[$cmp_func & 63]($found_w_0, $add_ptr14) | 0) == 0) {
$found_w_0 = $add_ptr14;
} else {
$retval_0 = $found_w_0;
label = 2449;
break;
}
}
if ((label | 0) == 2450) {
return $retval_0 | 0;
} else if ((label | 0) == 2449) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8DictList14calculate_sizeEPKNS_10LemmaEntryEj($this, $lemma_arr, $lemma_num) {
$this = $this | 0;
$lemma_arr = $lemma_arr | 0;
$lemma_num = $lemma_num | 0;
var $idx_by_hz = 0, $arrayidx9 = 0, $arrayidx10 = 0, $list_size_0_lcssa63 = 0, $id_num_0_lcssa62 = 0, $last_hz_len_0_lcssa61 = 0, $arrayidx56 = 0, $arrayidx58 = 0, $last_hz_len_052 = 0, $i_051 = 0, $id_num_050 = 0, $list_size_049 = 0, $0 = 0, $conv = 0, $inc = 0, $sub = 0, $len_038 = 0, $sub26 = 0, $inc40 = 0, $list_size_1 = 0, $id_num_1 = 0, $last_hz_len_1 = 0, $inc47 = 0, $i49_036 = 0, $inc66 = 0, $arrayidx69 = 0, $4 = 0, label = 0;
do {
if (($lemma_num | 0) == 0) {
$last_hz_len_0_lcssa61 = 0;
$id_num_0_lcssa62 = 0;
$list_size_0_lcssa63 = 0;
} else {
$idx_by_hz = $lemma_arr + 4 | 0;
$arrayidx9 = $this + 24 | 0;
$arrayidx10 = $this + 60 | 0;
$list_size_049 = 0;
$id_num_050 = 0;
$i_051 = 0;
$last_hz_len_052 = 0;
L3124 : while (1) {
$0 = HEAP8[$lemma_arr + ($i_051 * 124 | 0) + 116 | 0] | 0;
$conv = $0 & 255;
do {
if (($i_051 | 0) == 0) {
if ($0 << 24 >> 24 == 0) {
label = 2458;
break L3124;
}
if ((HEAP32[$idx_by_hz >> 2] | 0) != 1) {
label = 2460;
break L3124;
}
$inc = $id_num_050 + 1 | 0;
HEAP32[$arrayidx9 >> 2] = 0;
HEAP32[$arrayidx10 >> 2] = $inc;
$last_hz_len_1 = 1;
$id_num_1 = $inc;
$list_size_1 = $list_size_049 + 1 | 0;
} else {
if ($conv >>> 0 < $last_hz_len_052 >>> 0) {
label = 2463;
break L3124;
}
if (($conv | 0) == ($last_hz_len_052 | 0)) {
$last_hz_len_1 = $last_hz_len_052;
$id_num_1 = $id_num_050 + 1 | 0;
$list_size_1 = $conv + $list_size_049 | 0;
break;
}
$sub = $conv - 1 | 0;
if ($last_hz_len_052 >>> 0 < $sub >>> 0) {
$len_038 = $last_hz_len_052;
do {
$sub26 = $len_038 - 1 | 0;
HEAP32[$this + 24 + ($len_038 << 2) >> 2] = HEAP32[$this + 24 + ($sub26 << 2) >> 2];
HEAP32[$this + 60 + ($len_038 << 2) >> 2] = HEAP32[$this + 60 + ($sub26 << 2) >> 2];
$len_038 = $len_038 + 1 | 0;
} while ($len_038 >>> 0 < $sub >>> 0);
}
HEAP32[$this + 24 + ($sub << 2) >> 2] = $list_size_049;
$inc40 = $id_num_050 + 1 | 0;
HEAP32[$this + 60 + ($sub << 2) >> 2] = $inc40;
$last_hz_len_1 = $conv;
$id_num_1 = $inc40;
$list_size_1 = $conv + $list_size_049 | 0;
}
} while (0);
$inc47 = $i_051 + 1 | 0;
if ($inc47 >>> 0 < $lemma_num >>> 0) {
$list_size_049 = $list_size_1;
$id_num_050 = $id_num_1;
$i_051 = $inc47;
$last_hz_len_052 = $last_hz_len_1;
} else {
label = 2454;
break;
}
}
if ((label | 0) == 2458) {
___assert_func(2896, 122, 5992, 4008);
return 0;
} else if ((label | 0) == 2454) {
if ($last_hz_len_1 >>> 0 < 9) {
$last_hz_len_0_lcssa61 = $last_hz_len_1;
$id_num_0_lcssa62 = $id_num_1;
$list_size_0_lcssa63 = $list_size_1;
break;
}
$arrayidx69 = $this + 56 | 0;
$4 = HEAP32[$arrayidx69 >> 2] | 0;
return $4 | 0;
} else if ((label | 0) == 2460) {
___assert_func(2896, 123, 5992, 2800);
return 0;
} else if ((label | 0) == 2463) {
___assert_func(2896, 134, 5992, 1904);
return 0;
}
}
} while (0);
$arrayidx56 = $this + 24 | 0;
$arrayidx58 = $this + 60 | 0;
$i49_036 = $last_hz_len_0_lcssa61;
while (1) {
if (($i49_036 | 0) == 0) {
HEAP32[$arrayidx56 >> 2] = 0;
HEAP32[$arrayidx58 >> 2] = 1;
$i49_036 = $i49_036 + 1 | 0;
continue;
} else {
HEAP32[$this + 24 + ($i49_036 << 2) >> 2] = $list_size_0_lcssa63;
HEAP32[$this + 60 + ($i49_036 << 2) >> 2] = $id_num_0_lcssa62;
$inc66 = $i49_036 + 1 | 0;
if ($inc66 >>> 0 < 9) {
$i49_036 = $inc66;
continue;
} else {
break;
}
}
}
$arrayidx69 = $this + 56 | 0;
$4 = HEAP32[$arrayidx69 >> 2] | 0;
return $4 | 0;
}
function __ZN10ime_pinyin8DictList9fill_scisEPKNS_14SingleCharItemEj($this, $scis, $scis_num) {
$this = $this | 0;
$scis = $scis | 0;
$scis_num = $scis_num | 0;
var $scis_num_ = 0, $scis_hz_ = 0, $scis_splid_ = 0, $pos_08 = 0;
$scis_num_ = $this + 8 | 0;
if ((HEAP32[$scis_num_ >> 2] | 0) != ($scis_num | 0)) {
___assert_func(2896, 170, 5504, 1472);
}
if ((HEAP32[$scis_num_ >> 2] | 0) == 0) {
return;
}
$scis_hz_ = $this + 12 | 0;
$scis_splid_ = $this + 16 | 0;
$pos_08 = 0;
do {
HEAP16[(HEAP32[$scis_hz_ >> 2] | 0) + ($pos_08 << 1) >> 1] = HEAP16[$scis + ($pos_08 << 3) + 4 >> 1] | 0;
HEAP16[(HEAP32[$scis_splid_ >> 2] | 0) + ($pos_08 << 1) >> 1] = HEAP16[$scis + ($pos_08 << 3) + 6 >> 1] | 0;
$pos_08 = $pos_08 + 1 | 0;
} while ($pos_08 >>> 0 < (HEAP32[$scis_num_ >> 2] | 0) >>> 0);
return;
}
function __ZN10ime_pinyin8DictList9fill_listEPKNS_10LemmaEntryEj($this, $lemma_arr, $lemma_num) {
$this = $this | 0;
$lemma_arr = $lemma_arr | 0;
$lemma_num = $lemma_num | 0;
var $buf_ = 0, $hz_str_len = 0, $conv5 = 0, $i_016 = 0, $current_pos_014 = 0, $hz_str_len11 = 0, $inc17 = 0, $add = 0, $id_num_0_lcssa = 0, $current_pos_0_lcssa = 0;
$buf_ = $this + 20 | 0;
$hz_str_len = $lemma_arr + 116 | 0;
_utf16_strncpy(HEAP32[$buf_ >> 2] | 0, $lemma_arr + 8 | 0, HEAPU8[$hz_str_len] | 0) | 0;
$conv5 = HEAPU8[$hz_str_len] | 0;
if ($lemma_num >>> 0 > 1) {
$current_pos_014 = $conv5;
$i_016 = 1;
while (1) {
$hz_str_len11 = $lemma_arr + ($i_016 * 124 | 0) + 116 | 0;
_utf16_strncpy((HEAP32[$buf_ >> 2] | 0) + ($current_pos_014 << 1) | 0, $lemma_arr + ($i_016 * 124 | 0) + 8 | 0, HEAPU8[$hz_str_len11] | 0) | 0;
$inc17 = $i_016 + 1 | 0;
$add = (HEAPU8[$hz_str_len11] | 0) + $current_pos_014 | 0;
if ($inc17 >>> 0 < $lemma_num >>> 0) {
$current_pos_014 = $add;
$i_016 = $inc17;
} else {
$current_pos_0_lcssa = $add;
$id_num_0_lcssa = $lemma_num;
break;
}
}
} else {
$current_pos_0_lcssa = $conv5;
$id_num_0_lcssa = 1;
}
if (($current_pos_0_lcssa | 0) != (HEAP32[$this + 56 >> 2] | 0)) {
___assert_func(2896, 196, 5592, 1232);
}
if (($id_num_0_lcssa | 0) == (HEAP32[$this + 92 >> 2] | 0)) {
return;
} else {
___assert_func(2896, 197, 5592, 1008);
}
}
function __ZN10ime_pinyin8DictList7predictEPKttPNS_12NPredictItemEjj($this, $last_hzs, $hzs_len, $npre_items, $npre_max, $b4_used) {
$this = $this | 0;
$last_hzs = $last_hzs | 0;
$hzs_len = $hzs_len | 0;
$npre_items = $npre_items | 0;
$npre_max = $npre_max | 0;
$b4_used = $b4_used | 0;
var $conv = 0, $0 = 0, $call = 0, $sub7 = 0, $buf_ = 0, $1 = 0, $conv557 = 0, $item_num_056 = 0, $pre_len_055 = 0, $conv12 = 0, $call13 = 0, $arrayidx15 = 0, $sub29 = 0, $arrayidx31 = 0, $arrayidx36 = 0, $w_buf_052 = 0, $item_num_151 = 0, $add_ptr21 = 0, $inc = 0, $add_ptr42 = 0, $item_num_2 = 0, $inc43 = 0, $conv5 = 0, $i_048 = 0, $new_num_047 = 0, $arraydecay55 = 0, $e_pos_0 = 0, $11 = 0, $12 = 0, $new_num_1 = 0, $inc70 = 0, $new_num_0_lcssa = 0, label = 0;
$conv = $hzs_len & 65535;
if (($hzs_len & 65535) > 7 | $hzs_len << 16 >> 16 == 0) {
___assert_func(2896, 236, 5672, 848);
return 0;
}
$0 = HEAP32[$this + 96 + ($conv - 1 << 2) >> 2] | 0;
$call = __ZN10ime_pinyin5NGram12get_instanceEv() | 0;
$sub7 = 8 - $conv | 0;
if ($hzs_len << 16 >> 16 == 8) {
$new_num_0_lcssa = 0;
return $new_num_0_lcssa | 0;
}
$buf_ = $this + 20 | 0;
$1 = $last_hzs;
$pre_len_055 = 1;
$item_num_056 = 0;
$conv557 = 1;
while (1) {
$conv12 = $pre_len_055 + $hzs_len & 65535;
$call13 = __ZN10ime_pinyin8DictList21find_pos_startedbyhzsEPKtjPFiPKvS4_E($this, $last_hzs, $conv12, $0) | 0;
L3183 : do {
if (($call13 | 0) == 0) {
$item_num_2 = $item_num_056;
} else {
$arrayidx15 = $this + 24 + ($conv12 << 2) | 0;
if ($call13 >>> 0 >= ((HEAP32[$buf_ >> 2] | 0) + (HEAP32[$arrayidx15 >> 2] << 1) | 0) >>> 0) {
$item_num_2 = $item_num_056;
break;
}
$sub29 = $conv12 - 1 | 0;
$arrayidx31 = $this + 24 + ($sub29 << 2) | 0;
$arrayidx36 = $this + 60 + ($sub29 << 2) | 0;
$item_num_151 = $item_num_056;
$w_buf_052 = $call13;
while (1) {
if (!((FUNCTION_TABLE_iii[$0 & 63]($w_buf_052, $1) | 0) == 0 & $item_num_151 >>> 0 < $npre_max >>> 0)) {
$item_num_2 = $item_num_151;
break L3183;
}
$add_ptr21 = $npre_items + ($item_num_151 * 20 | 0) | 0;
_memset($add_ptr21 | 0, 0, 20);
_utf16_strncpy($npre_items + ($item_num_151 * 20 | 0) + 4 | 0, $w_buf_052 + ($conv << 1) | 0, $conv557) | 0;
HEAPF32[$add_ptr21 >> 2] = +__ZN10ime_pinyin5NGram11get_uni_psbEj($call, (HEAP32[$arrayidx36 >> 2] | 0) + (((($w_buf_052 - (HEAP32[$buf_ >> 2] | 0) >> 1) - (HEAP32[$arrayidx31 >> 2] | 0) | 0) >>> 0) / ($conv12 >>> 0) | 0) | 0);
HEAP16[$npre_items + ($item_num_151 * 20 | 0) + 18 >> 1] = $hzs_len;
$inc = $item_num_151 + 1 | 0;
$add_ptr42 = $w_buf_052 + ($conv12 << 1) | 0;
if ($add_ptr42 >>> 0 < ((HEAP32[$buf_ >> 2] | 0) + (HEAP32[$arrayidx15 >> 2] << 1) | 0) >>> 0) {
$item_num_151 = $inc;
$w_buf_052 = $add_ptr42;
} else {
$item_num_2 = $inc;
break;
}
}
}
} while (0);
$inc43 = $pre_len_055 + 1 & 65535;
$conv5 = $inc43 & 65535;
if ($conv5 >>> 0 > $sub7 >>> 0) {
break;
} else {
$pre_len_055 = $inc43;
$item_num_056 = $item_num_2;
$conv557 = $conv5;
}
}
if (($item_num_2 | 0) == 0) {
$new_num_0_lcssa = 0;
return $new_num_0_lcssa | 0;
} else {
$new_num_047 = 0;
$i_048 = 0;
}
while (1) {
$arraydecay55 = $npre_items + ($i_048 * 20 | 0) + 4 | 0;
$e_pos_0 = 1;
while (1) {
if ($e_pos_0 >>> 0 > $b4_used >>> 0) {
label = 2505;
break;
}
if ((_utf16_strncmp($npre_items + ((-$e_pos_0 | 0) * 20 | 0) + 4 | 0, $arraydecay55, 7) | 0) == 0) {
$new_num_1 = $new_num_047;
break;
} else {
$e_pos_0 = $e_pos_0 + 1 | 0;
}
}
if ((label | 0) == 2505) {
label = 0;
$11 = $npre_items + ($new_num_047 * 20 | 0) | 0;
$12 = $npre_items + ($i_048 * 20 | 0) | 0;
HEAP32[$11 >> 2] = HEAP32[$12 >> 2];
HEAP32[$11 + 4 >> 2] = HEAP32[$12 + 4 >> 2];
HEAP32[$11 + 8 >> 2] = HEAP32[$12 + 8 >> 2];
HEAP32[$11 + 12 >> 2] = HEAP32[$12 + 12 >> 2];
HEAP32[$11 + 16 >> 2] = HEAP32[$12 + 16 >> 2];
$new_num_1 = $new_num_047 + 1 | 0;
}
$inc70 = $i_048 + 1 | 0;
if ($inc70 >>> 0 < $item_num_2 >>> 0) {
$new_num_047 = $new_num_1;
$i_048 = $inc70;
} else {
$new_num_0_lcssa = $new_num_1;
break;
}
}
return $new_num_0_lcssa | 0;
}
function __ZN10ime_pinyin8DictList20get_splids_for_hanziEttPtt($this, $hanzi, $half_splid, $splids, $max_splids) {
$this = $this | 0;
$hanzi = $hanzi | 0;
$half_splid = $half_splid | 0;
$splids = $splids | 0;
$max_splids = $max_splids | 0;
var $hanzi_addr = 0, $scis_hz_ = 0, $scis_num_ = 0, $call = 0, $4 = 0, $7 = 0, $8 = 0, $hz_found_0 = 0, $add_ptr = 0, $10 = 0, $12 = 0, $cmp23 = 0, $scis_splid_ = 0, $13 = 0, $hz_f_033 = 0, $strict_0_off032 = 0, $strict_0_off0_lcssa = 0, $15 = 0, $cmp48 = 0, $conv68 = 0, $scis_splid_74 = 0, $scis_splid_52 = 0, $spl_trie_ = 0, $scis_splid_62 = 0, $strict_1_off0 = 0, $incdec_ptr27 = 0, $20 = 0, $22 = 0, $hz_found_129 = 0, $found_num_028 = 0, $sub_ptr_div4523 = 0, $conv67 = 0, $found_num_1 = 0, $incdec_ptr80 = 0, $37 = 0, $found_num_0_lcssa = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$hanzi_addr = sp | 0;
HEAP16[$hanzi_addr >> 1] = $hanzi;
$scis_hz_ = $this + 12 | 0;
$scis_num_ = $this + 8 | 0;
$call = __ZN10ime_pinyin9mybsearchEPKvS1_jjPFiS1_S1_E($hanzi_addr, HEAP32[$scis_hz_ >> 2] | 0, HEAP32[$scis_num_ >> 2] | 0, 2, 14) | 0;
$4 = $call;
if (($call | 0) == 0) {
___assert_func(2896, 314, 5768, 688);
return 0;
}
if ((HEAP16[$hanzi_addr >> 1] | 0) != (HEAP16[$4 >> 1] | 0)) {
___assert_func(2896, 314, 5768, 688);
return 0;
}
$7 = HEAP32[$scis_hz_ >> 2] | 0;
$8 = HEAP16[$hanzi_addr >> 1] | 0;
$hz_found_0 = $4;
while (1) {
if ($hz_found_0 >>> 0 <= $7 >>> 0) {
break;
}
$add_ptr = $hz_found_0 - 2 | 0;
if ($8 << 16 >> 16 == (HEAP16[$add_ptr >> 1] | 0)) {
$hz_found_0 = $add_ptr;
} else {
break;
}
}
$10 = HEAP32[$scis_hz_ >> 2] | 0;
L3213 : do {
if ($hz_found_0 >>> 0 < ($10 + (HEAP32[$scis_num_ >> 2] << 1) | 0) >>> 0) {
$12 = HEAP16[$hanzi_addr >> 1] | 0;
$cmp23 = $half_splid << 16 >> 16 == 0;
$scis_splid_ = $this + 16 | 0;
$strict_0_off032 = 0;
$hz_f_033 = $hz_found_0;
$13 = $10;
while (1) {
if ($12 << 16 >> 16 != (HEAP16[$hz_f_033 >> 1] | 0)) {
$strict_0_off0_lcssa = $strict_0_off032;
break L3213;
}
if ($cmp23) {
label = 2524;
} else {
if ((HEAP16[(HEAP32[$scis_splid_ >> 2] | 0) + ((($hz_f_033 - $13 | 0) >>> 1 & 65535) << 1) >> 1] & 31) == $half_splid << 16 >> 16) {
label = 2524;
} else {
$strict_1_off0 = $strict_0_off032;
}
}
if ((label | 0) == 2524) {
label = 0;
$strict_1_off0 = 1;
}
$incdec_ptr27 = $hz_f_033 + 2 | 0;
$20 = HEAP32[$scis_hz_ >> 2] | 0;
if ($incdec_ptr27 >>> 0 < ($20 + (HEAP32[$scis_num_ >> 2] << 1) | 0) >>> 0) {
$strict_0_off032 = $strict_1_off0;
$hz_f_033 = $incdec_ptr27;
$13 = $20;
} else {
$strict_0_off0_lcssa = $strict_1_off0;
break;
}
}
} else {
$strict_0_off0_lcssa = 0;
}
} while (0);
$15 = HEAP32[$scis_hz_ >> 2] | 0;
if ($hz_found_0 >>> 0 >= ($15 + (HEAP32[$scis_num_ >> 2] << 1) | 0) >>> 0) {
$found_num_0_lcssa = 0;
STACKTOP = sp;
return $found_num_0_lcssa | 0;
}
$cmp48 = $half_splid << 16 >> 16 == 0;
$conv68 = $max_splids & 65535;
$scis_splid_74 = $this + 16 | 0;
$scis_splid_52 = $this + 16 | 0;
$spl_trie_ = $this + 4 | 0;
$scis_splid_62 = $this + 16 | 0;
$found_num_028 = 0;
$hz_found_129 = $hz_found_0;
$22 = $15;
while (1) {
if ((HEAP16[$hanzi_addr >> 1] | 0) != (HEAP16[$hz_found_129 >> 1] | 0)) {
$found_num_0_lcssa = $found_num_028;
label = 2540;
break;
}
$sub_ptr_div4523 = ($hz_found_129 - $22 | 0) >>> 1;
do {
if ($cmp48) {
label = 2531;
} else {
if ($strict_0_off0_lcssa) {
if ((HEAP16[(HEAP32[$scis_splid_52 >> 2] | 0) + (($sub_ptr_div4523 & 65535) << 1) >> 1] & 31) == $half_splid << 16 >> 16) {
label = 2531;
break;
} else {
$found_num_1 = $found_num_028;
break;
}
} else {
if (__ZNK10ime_pinyin12SpellingTrie20half_full_compatibleEtt(HEAP32[$spl_trie_ >> 2] | 0, $half_splid, (HEAPU16[(HEAP32[$scis_splid_62 >> 2] | 0) + (($sub_ptr_div4523 & 65535) << 1) >> 1] | 0) >>> 5) | 0) {
label = 2531;
break;
} else {
$found_num_1 = $found_num_028;
break;
}
}
}
} while (0);
if ((label | 0) == 2531) {
label = 0;
$conv67 = $found_num_028 & 65535;
if (($conv67 + 1 | 0) >>> 0 >= $conv68 >>> 0) {
label = 2532;
break;
}
HEAP16[$splids + ($conv67 << 1) >> 1] = (HEAPU16[(HEAP32[$scis_splid_74 >> 2] | 0) + (($sub_ptr_div4523 & 65535) << 1) >> 1] | 0) >>> 5;
$found_num_1 = $found_num_028 + 1 & 65535;
}
$incdec_ptr80 = $hz_found_129 + 2 | 0;
$37 = HEAP32[$scis_hz_ >> 2] | 0;
if ($incdec_ptr80 >>> 0 < ($37 + (HEAP32[$scis_num_ >> 2] << 1) | 0) >>> 0) {
$found_num_028 = $found_num_1;
$hz_found_129 = $incdec_ptr80;
$22 = $37;
} else {
$found_num_0_lcssa = $found_num_1;
label = 2538;
break;
}
}
if ((label | 0) == 2538) {
STACKTOP = sp;
return $found_num_0_lcssa | 0;
} else if ((label | 0) == 2540) {
STACKTOP = sp;
return $found_num_0_lcssa | 0;
} else if ((label | 0) == 2532) {
___assert_func(2896, 338, 5768, 544);
return 0;
}
return 0;
}
function __ZN10ime_pinyin8DictList12get_lemma_idEPKtt($this, $str, $str_len) {
$this = $this | 0;
$str = $str | 0;
$str_len = $str_len | 0;
var $conv = 0, $sub = 0, $call = 0, $1 = 0, $sub_ptr_div = 0, $2 = 0, $retval_0 = 0;
if (($str | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$conv = $str_len & 65535;
if (($str_len & 65535) > 8) {
$retval_0 = 0;
return $retval_0 | 0;
}
$sub = $conv - 1 | 0;
$call = __ZN10ime_pinyin8DictList21find_pos_startedbyhzsEPKtjPFiPKvS4_E($this, $str, $conv, HEAP32[$this + 96 + ($sub << 2) >> 2] | 0) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$1 = HEAP32[$this + 20 >> 2] | 0;
if ($call >>> 0 <= $1 >>> 0) {
___assert_func(2896, 356, 6080, 4352);
return 0;
}
$sub_ptr_div = $call - $1 >> 1;
$2 = HEAP32[$this + 24 + ($sub << 2) >> 2] | 0;
if ($sub_ptr_div >>> 0 < $2 >>> 0) {
___assert_func(2896, 357, 6080, 4168);
return 0;
}
$retval_0 = ((($sub_ptr_div - $2 | 0) >>> 0) / ($conv >>> 0) | 0) + (HEAP32[$this + 60 + ($sub << 2) >> 2] | 0) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictList17convert_to_hanzisEPtt($this, $str, $str_len) {
$this = $this | 0;
$str = $str | 0;
$str_len = $str_len | 0;
var $scis_hz_ = 0, $str_pos_07 = 0, $arrayidx = 0;
if (($str | 0) == 0) {
___assert_func(2896, 364, 5928, 3992);
}
if ($str_len << 16 >> 16 == 0) {
return;
}
$scis_hz_ = $this + 12 | 0;
$str_pos_07 = 0;
do {
$arrayidx = $str + (($str_pos_07 & 65535) << 1) | 0;
HEAP16[$arrayidx >> 1] = HEAP16[(HEAP32[$scis_hz_ >> 2] | 0) + ((HEAPU16[$arrayidx >> 1] | 0) << 1) >> 1] | 0;
$str_pos_07 = $str_pos_07 + 1 & 65535;
} while (($str_pos_07 & 65535) < ($str_len & 65535));
return;
}
function __ZN10ime_pinyin8DictList19convert_to_scis_idsEPtt($this, $str, $str_len) {
$this = $this | 0;
$str = $str | 0;
$str_len = $str_len | 0;
var $str_pos_05 = 0;
if (($str | 0) == 0) {
___assert_func(2896, 372, 5856, 3992);
}
if ($str_len << 16 >> 16 == 0) {
return;
} else {
$str_pos_05 = 0;
}
do {
HEAP16[$str + (($str_pos_05 & 65535) << 1) >> 1] = 256;
$str_pos_05 = $str_pos_05 + 1 & 65535;
} while (($str_pos_05 & 65535) < ($str_len & 65535));
return;
}
function __ZN10ime_pinyin8LpiCache9is_cachedEt($this, $splid) {
$this = $this | 0;
$splid = $splid | 0;
var $retval_0 = 0;
if (($splid & 65535) > 29) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = (HEAP16[(HEAP32[$this + 4 >> 2] | 0) + (($splid & 65535) << 1) >> 1] | 0) != 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8LpiCache9put_cacheEtPNS_10LmaPsbItemEj($this, $splid, $lpi_items, $lpi_num) {
$this = $this | 0;
$splid = $splid | 0;
$lpi_items = $lpi_items | 0;
$lpi_num = $lpi_num | 0;
var $conv2_ = 0, $0 = 0, $conv3 = 0, $mul = 0, $conv411 = 0, $pos_010 = 0, $3 = 0, $4 = 0, $5$1 = 0, $inc = 0;
$conv2_ = $lpi_num >>> 0 < 15 ? $lpi_num & 65535 : 15;
$0 = HEAP32[$this >> 2] | 0;
$conv3 = $splid & 65535;
$mul = $conv3 * 15 | 0;
if ($conv2_ << 16 >> 16 != 0) {
$pos_010 = 0;
$conv411 = 0;
while (1) {
$3 = $lpi_items + ($conv411 << 3) | 0;
$4 = $0 + ($conv411 + $mul << 3) | 0;
$5$1 = HEAP32[$3 + 4 >> 2] | 0;
HEAP32[$4 >> 2] = HEAP32[$3 >> 2];
HEAP32[$4 + 4 >> 2] = $5$1;
$inc = $pos_010 + 1 & 65535;
if (($inc & 65535) < ($conv2_ & 65535)) {
$pos_010 = $inc;
$conv411 = $inc & 65535;
} else {
break;
}
}
}
HEAP16[(HEAP32[$this + 4 >> 2] | 0) + ($conv3 << 1) >> 1] = $conv2_;
return $conv2_ & 65535 | 0;
}
function __ZN10ime_pinyin8LpiCache9get_cacheEtPNS_10LmaPsbItemEj($this, $splid, $lpi_items, $lpi_max) {
$this = $this | 0;
$splid = $splid | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
var $idxprom = 0, $conv = 0, $conv_lpi_max = 0, $2 = 0, $mul = 0, $conv710 = 0, $pos_09 = 0, $5 = 0, $6 = 0, $7$1 = 0;
$idxprom = $splid & 65535;
$conv = HEAPU16[(HEAP32[$this + 4 >> 2] | 0) + ($idxprom << 1) >> 1] | 0;
$conv_lpi_max = $conv >>> 0 < $lpi_max >>> 0 ? $conv : $lpi_max;
$2 = HEAP32[$this >> 2] | 0;
$mul = $idxprom * 15 | 0;
if (($conv_lpi_max | 0) == 0) {
return $conv_lpi_max | 0;
} else {
$pos_09 = 0;
$conv710 = 0;
}
do {
$5 = $2 + ($conv710 + $mul << 3) | 0;
$6 = $lpi_items + ($conv710 << 3) | 0;
$7$1 = HEAP32[$5 + 4 >> 2] | 0;
HEAP32[$6 >> 2] = HEAP32[$5 >> 2];
HEAP32[$6 + 4 >> 2] = $7$1;
$pos_09 = $pos_09 + 1 & 65535;
$conv710 = $pos_09 & 65535;
} while ($conv710 >>> 0 < $conv_lpi_max >>> 0);
return $conv_lpi_max | 0;
}
function __ZN10ime_pinyin13SpellingTableC2Ev($this) {
$this = $this | 0;
HEAP8[$this | 0] = 0;
HEAP32[$this + 8 >> 2] = 0;
HEAP32[$this + 12 >> 2] = 0;
HEAP32[$this + 32 >> 2] = 0;
HEAPF64[$this + 24 >> 3] = 0.0;
HEAP8[$this + 49 | 0] = 1;
return;
}
function __ZN10ime_pinyin13SpellingTable12get_hash_posEPKc($this, $spelling_str) {
$this = $this | 0;
$spelling_str = $spelling_str | 0;
var $spelling_size_ = 0, $pos_09 = 0, $hash_pos_08 = 0, $1 = 0, $add = 0, $inc = 0, $hash_pos_0_lcssa = 0;
$spelling_size_ = $this + 16 | 0;
L3297 : do {
if ((HEAP32[$spelling_size_ >> 2] | 0) == 0) {
$hash_pos_0_lcssa = 0;
} else {
$hash_pos_08 = 0;
$pos_09 = 0;
while (1) {
$1 = HEAP8[$spelling_str + $pos_09 | 0] | 0;
if ($1 << 24 >> 24 == 0) {
$hash_pos_0_lcssa = $hash_pos_08;
break L3297;
}
$add = ($1 << 24 >> 24) + $hash_pos_08 | 0;
$inc = $pos_09 + 1 | 0;
if ($inc >>> 0 < (HEAP32[$spelling_size_ >> 2] | 0) >>> 0) {
$hash_pos_08 = $add;
$pos_09 = $inc;
} else {
$hash_pos_0_lcssa = $add;
break;
}
}
}
} while (0);
return ($hash_pos_0_lcssa >>> 0) % ((HEAP32[$this + 4 >> 2] | 0) >>> 0) | 0 | 0;
}
function __ZN10ime_pinyin13SpellingTable13hash_pos_nextEj($this, $hash_pos) {
$this = $this | 0;
$hash_pos = $hash_pos | 0;
return (($hash_pos + 123 | 0) >>> 0) % ((HEAP32[$this + 4 >> 2] | 0) >>> 0) | 0 | 0;
}
function __ZN10ime_pinyin13SpellingTable19get_score_amplifierEv($this) {
$this = $this | 0;
return +(+HEAPF64[$this + 40 >> 3]);
}
function __ZN10ime_pinyin13SpellingTable17get_average_scoreEv($this) {
$this = $this | 0;
return HEAP8[$this + 48 | 0] | 0;
}
function __ZN10ime_pinyin8DictList9save_listEP7__sFILE($this, $fp) {
$this = $this | 0;
$fp = $fp | 0;
var $buf_ = 0, $arrayidx = 0, $scis_hz_ = 0, $scis_splid_ = 0, $scis_num_ = 0, $call29 = 0, $13 = 0, $call36 = 0, $call44 = 0, $retval_0 = 0;
if ((HEAP8[$this | 0] & 1) == 0 | ($fp | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$buf_ = $this + 20 | 0;
if ((HEAP32[$buf_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$arrayidx = $this + 56 | 0;
if ((HEAP32[$arrayidx >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$scis_hz_ = $this + 12 | 0;
if ((HEAP32[$scis_hz_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$scis_splid_ = $this + 16 | 0;
if ((HEAP32[$scis_splid_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$scis_num_ = $this + 8 | 0;
if ((HEAP32[$scis_num_ >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fwrite($scis_num_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fwrite($this + 24 | 0, 4, 9, $fp | 0) | 0) != 9) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fwrite($this + 60 | 0, 4, 9, $fp | 0) | 0) != 9) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call29 = _fwrite(HEAP32[$scis_hz_ >> 2] | 0, 2, HEAP32[$scis_num_ >> 2] | 0, $fp | 0) | 0;
$13 = HEAP32[$scis_num_ >> 2] | 0;
if (($call29 | 0) != ($13 | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call36 = _fwrite(HEAP32[$scis_splid_ >> 2] | 0, 2, $13 | 0, $fp | 0) | 0;
if (($call36 | 0) != (HEAP32[$scis_num_ >> 2] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call44 = _fwrite(HEAP32[$buf_ >> 2] | 0, 2, HEAP32[$arrayidx >> 2] | 0, $fp | 0) | 0;
$retval_0 = ($call44 | 0) == (HEAP32[$arrayidx >> 2] | 0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin8DictList9load_listEP7__sFILE($this, $fp) {
$this = $this | 0;
$fp = $fp | 0;
var $initialized_ = 0, $scis_num_ = 0, $arrayidx = 0, $call20 = 0, $8 = 0, $call26 = 0, $call33 = 0, $retval_0 = 0;
if (($fp | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$initialized_ = $this | 0;
HEAP8[$initialized_] = 0;
$scis_num_ = $this + 8 | 0;
if ((_fread($scis_num_ | 0, 4, 1, $fp | 0) | 0) != 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fread($this + 24 | 0, 4, 9, $fp | 0) | 0) != 9) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((_fread($this + 60 | 0, 4, 9, $fp | 0) | 0) != 9) {
$retval_0 = 0;
return $retval_0 | 0;
}
__ZN10ime_pinyin8DictList13free_resourceEv($this);
$arrayidx = $this + 56 | 0;
if (!(__ZN10ime_pinyin8DictList14alloc_resourceEjj($this, HEAP32[$arrayidx >> 2] | 0, HEAP32[$scis_num_ >> 2] | 0) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call20 = _fread(HEAP32[$this + 12 >> 2] | 0, 2, HEAP32[$scis_num_ >> 2] | 0, $fp | 0) | 0;
$8 = HEAP32[$scis_num_ >> 2] | 0;
if (($call20 | 0) != ($8 | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call26 = _fread(HEAP32[$this + 16 >> 2] | 0, 2, $8 | 0, $fp | 0) | 0;
if (($call26 | 0) != (HEAP32[$scis_num_ >> 2] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call33 = _fread(HEAP32[$this + 20 >> 2] | 0, 2, HEAP32[$arrayidx >> 2] | 0, $fp | 0) | 0;
if (($call33 | 0) != (HEAP32[$arrayidx >> 2] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP8[$initialized_] = 1;
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8LpiCacheD2Ev($this) {
$this = $this | 0;
var $0 = 0, $2 = 0;
$0 = HEAP32[$this >> 2] | 0;
if (($0 | 0) != 0) {
__ZdaPv($0 | 0);
}
$2 = HEAP32[$this + 4 >> 2] | 0;
if (($2 | 0) == 0) {
return;
}
__ZdaPv($2);
return;
}
function __ZN10ime_pinyin7myqsortEPvjjPFiPKvS2_E($p, $n, $es, $cmp) {
$p = $p | 0;
$n = $n | 0;
$es = $es | 0;
$cmp = $cmp | 0;
_qsort($p | 0, $n | 0, $es | 0, $cmp | 0);
return;
}
function __ZN10ime_pinyin9mybsearchEPKvS1_jjPFiS1_S1_E($k, $b, $n, $es, $cmp) {
$k = $k | 0;
$b = $b | 0;
$n = $n | 0;
$es = $es | 0;
$cmp = $cmp | 0;
return _bsearch($k | 0, $b | 0, $n | 0, $es | 0, $cmp | 0) | 0;
}
function __ZN10ime_pinyin18compare_raw_spl_ebEPKvS1_($p1, $p2) {
$p1 = $p1 | 0;
$p2 = $p2 | 0;
var $retval_0 = 0;
do {
if ((HEAP8[$p1] | 0) == 0) {
$retval_0 = 1;
} else {
if ((HEAP8[$p2] | 0) == 0) {
$retval_0 = -1;
break;
}
$retval_0 = _strcmp($p1 | 0, $p2 | 0) | 0;
}
} while (0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin12get_odd_nextEj($value) {
$value = $value | 0;
var $v_next_0 = 0, $add = 0, $v_dv_0 = 0;
$v_next_0 = $value;
L3382 : while (1) {
$add = ~~+Math_sqrt(+(+($v_next_0 >>> 0 >>> 0))) + 1 | 0;
$v_dv_0 = 2;
while (1) {
if ($v_dv_0 >>> 0 >= $add >>> 0) {
break L3382;
}
if ((($v_next_0 >>> 0) % ($v_dv_0 >>> 0) | 0 | 0) == 0) {
break;
} else {
$v_dv_0 = $v_dv_0 + 1 | 0;
}
}
$v_next_0 = $v_next_0 + 1 | 0;
}
return $v_next_0 | 0;
}
function __ZN10ime_pinyin13SpellingTableD2Ev($this) {
$this = $this | 0;
__ZN10ime_pinyin13SpellingTable13free_resourceEv($this);
return;
}
function __ZN10ime_pinyin13SpellingTable13free_resourceEv($this) {
$this = $this | 0;
var $raw_spellings_ = 0, $0 = 0, $spelling_buf_ = 0, $2 = 0;
$raw_spellings_ = $this + 8 | 0;
$0 = HEAP32[$raw_spellings_ >> 2] | 0;
if (($0 | 0) != 0) {
__ZdaPv($0 | 0);
}
HEAP32[$raw_spellings_ >> 2] = 0;
$spelling_buf_ = $this + 12 | 0;
$2 = HEAP32[$spelling_buf_ >> 2] | 0;
if (($2 | 0) == 0) {
HEAP32[$spelling_buf_ >> 2] = 0;
return;
}
__ZdaPv($2);
HEAP32[$spelling_buf_ >> 2] = 0;
return;
}
function __ZN10ime_pinyin13SpellingTable10init_tableEjjb($this, $pure_spl_size, $spl_max_num, $need_score) {
$this = $this | 0;
$pure_spl_size = $pure_spl_size | 0;
$spl_max_num = $spl_max_num | 0;
$need_score = $need_score | 0;
var $spelling_size_ = 0, $spelling_max_num_ = 0, $1$0 = 0, $raw_spellings_ = 0, $call13 = 0, $spelling_buf_ = 0, $8 = 0, $11 = 0, $retval_0 = 0;
if (($pure_spl_size | 0) == 0 | ($spl_max_num | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP8[$this | 0] = $need_score & 1;
__ZN10ime_pinyin13SpellingTable13free_resourceEv($this);
$spelling_size_ = $this + 16 | 0;
HEAP32[$spelling_size_ >> 2] = ($need_score ? 2 : 1) + $pure_spl_size;
$spelling_max_num_ = $this + 4 | 0;
HEAP32[$spelling_max_num_ >> 2] = __ZN10ime_pinyin12get_odd_nextEj($spl_max_num) | 0;
HEAP32[$this + 32 >> 2] = 0;
$1$0 = _llvm_umul_with_overflow_i32(HEAP32[$spelling_max_num_ >> 2] | 0, 16) | 0;
$raw_spellings_ = $this + 8 | 0;
HEAP32[$raw_spellings_ >> 2] = __Znaj(tempRet0 ? -1 : $1$0) | 0;
$call13 = __Znaj(Math_imul(HEAP32[$spelling_size_ >> 2] | 0, HEAP32[$spelling_max_num_ >> 2] | 0) | 0) | 0;
$spelling_buf_ = $this + 12 | 0;
HEAP32[$spelling_buf_ >> 2] = $call13;
$8 = HEAP32[$raw_spellings_ >> 2] | 0;
if (($8 | 0) == 0 | ($call13 | 0) == 0) {
__ZN10ime_pinyin13SpellingTable13free_resourceEv($this);
$retval_0 = 0;
return $retval_0 | 0;
} else {
_memset($8 | 0, 0, HEAP32[$spelling_max_num_ >> 2] << 4 | 0);
$11 = HEAP32[$spelling_buf_ >> 2] | 0;
_memset($11 | 0, 0, Math_imul(HEAP32[$spelling_size_ >> 2] | 0, HEAP32[$spelling_max_num_ >> 2] | 0) | 0);
HEAP8[$this + 49 | 0] = 0;
HEAPF64[$this + 24 >> 3] = 0.0;
$retval_0 = 1;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin13SpellingTable12put_spellingEPKcd($this, $spelling_str, $freq) {
$this = $this | 0;
$spelling_str = $spelling_str | 0;
$freq = +$freq;
var $pos_0 = 0, $total_freq_ = 0, $call6 = 0, $spelling_size_ = 0, $raw_spellings_ = 0, $5 = 0, $7 = 0, $sub28 = 0, $freq20 = 0, $hash_pos_0 = 0, $arraydecay26 = 0, $freq34 = 0, $freq45 = 0, $arraydecay50 = 0, $sub52 = 0, $spelling_num_ = 0, $call62 = 0, $retval_0 = 0, label = 0;
if ((HEAP8[$this + 49 | 0] & 1) != 0 | ($spelling_str | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
} else {
$pos_0 = 0;
}
while (1) {
if ($pos_0 >>> 0 >= 3) {
break;
}
if ((_strcmp($spelling_str | 0, 10896 + ($pos_0 * 7 | 0) | 0) | 0) == 0) {
$retval_0 = 0;
label = 2683;
break;
} else {
$pos_0 = $pos_0 + 1 | 0;
}
}
if ((label | 0) == 2683) {
return $retval_0 | 0;
}
$total_freq_ = $this + 24 | 0;
HEAPF64[$total_freq_ >> 3] = +HEAPF64[$total_freq_ >> 3] + $freq;
$call6 = __ZN10ime_pinyin13SpellingTable12get_hash_posEPKc($this, $spelling_str) | 0;
$spelling_size_ = $this + 16 | 0;
$raw_spellings_ = $this + 8 | 0;
HEAP8[(HEAP32[$spelling_size_ >> 2] | 0) - 1 + ((HEAP32[$raw_spellings_ >> 2] | 0) + ($call6 << 4)) | 0] = 0;
$5 = HEAP32[$raw_spellings_ >> 2] | 0;
if ((_strncmp($5 + ($call6 << 4) | 0, $spelling_str | 0, (HEAP32[$spelling_size_ >> 2] | 0) - 1 | 0) | 0) == 0) {
$freq20 = $5 + ($call6 << 4) + 8 | 0;
HEAPF64[$freq20 >> 3] = +HEAPF64[$freq20 >> 3] + $freq;
$retval_0 = 1;
return $retval_0 | 0;
}
$7 = HEAP32[$raw_spellings_ >> 2] | 0;
$sub28 = (HEAP32[$spelling_size_ >> 2] | 0) - 1 | 0;
$hash_pos_0 = $call6;
while (1) {
$arraydecay26 = $7 + ($hash_pos_0 << 4) | 0;
if ((_strncmp($arraydecay26 | 0, $spelling_str | 0, $sub28 | 0) | 0) == 0) {
label = 2676;
break;
}
if ((HEAP8[$arraydecay26] | 0) == 0) {
label = 2678;
break;
}
$call62 = __ZN10ime_pinyin13SpellingTable13hash_pos_nextEj($this, $hash_pos_0) | 0;
if (($call6 | 0) == ($call62 | 0)) {
$retval_0 = 0;
label = 2685;
break;
} else {
$hash_pos_0 = $call62;
}
}
if ((label | 0) == 2678) {
$freq45 = $7 + ($hash_pos_0 << 4) + 8 | 0;
HEAPF64[$freq45 >> 3] = +HEAPF64[$freq45 >> 3] + $freq;
$arraydecay50 = (HEAP32[$raw_spellings_ >> 2] | 0) + ($hash_pos_0 << 4) | 0;
$sub52 = (HEAP32[$spelling_size_ >> 2] | 0) - 1 | 0;
_strncpy($arraydecay50 | 0, $spelling_str | 0, $sub52 | 0) | 0;
HEAP8[(HEAP32[$spelling_size_ >> 2] | 0) - 1 + ((HEAP32[$raw_spellings_ >> 2] | 0) + ($hash_pos_0 << 4)) | 0] = 0;
$spelling_num_ = $this + 32 | 0;
HEAP32[$spelling_num_ >> 2] = (HEAP32[$spelling_num_ >> 2] | 0) + 1;
$retval_0 = 1;
return $retval_0 | 0;
} else if ((label | 0) == 2685) {
return $retval_0 | 0;
} else if ((label | 0) == 2676) {
$freq34 = $7 + ($hash_pos_0 << 4) + 8 | 0;
HEAPF64[$freq34 >> 3] = +HEAPF64[$freq34 >> 3] + $freq;
$retval_0 = 1;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin13SpellingTable7containEPKc($this, $spelling_str) {
$this = $this | 0;
$spelling_str = $spelling_str | 0;
var $call = 0, $raw_spellings_ = 0, $arrayidx4 = 0, $spelling_size_ = 0, $hash_pos_0 = 0, $call15 = 0, $arrayidx22 = 0, $retval_0 = 0, label = 0;
if (($spelling_str | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP32[$this + 12 >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
if ((HEAP8[$this + 49 | 0] & 1) != 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call = __ZN10ime_pinyin13SpellingTable12get_hash_posEPKc($this, $spelling_str) | 0;
$raw_spellings_ = $this + 8 | 0;
$arrayidx4 = (HEAP32[$raw_spellings_ >> 2] | 0) + ($call << 4) | 0;
if ((HEAP8[$arrayidx4] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spelling_size_ = $this + 16 | 0;
if ((_strncmp($arrayidx4 | 0, $spelling_str | 0, (HEAP32[$spelling_size_ >> 2] | 0) - 1 | 0) | 0) == 0) {
$retval_0 = 1;
return $retval_0 | 0;
} else {
$hash_pos_0 = $call;
}
while (1) {
$call15 = __ZN10ime_pinyin13SpellingTable13hash_pos_nextEj($this, $hash_pos_0) | 0;
if (($call | 0) == ($call15 | 0)) {
$retval_0 = 0;
label = 2701;
break;
}
$arrayidx22 = (HEAP32[$raw_spellings_ >> 2] | 0) + ($call15 << 4) | 0;
if ((HEAP8[$arrayidx22] | 0) == 0) {
$retval_0 = 0;
label = 2698;
break;
}
if ((_strncmp($arrayidx22 | 0, $spelling_str | 0, (HEAP32[$spelling_size_ >> 2] | 0) - 1 | 0) | 0) == 0) {
$retval_0 = 1;
label = 2702;
break;
} else {
$hash_pos_0 = $call15;
}
}
if ((label | 0) == 2698) {
return $retval_0 | 0;
} else if ((label | 0) == 2701) {
return $retval_0 | 0;
} else if ((label | 0) == 2702) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin14SpellingParserC2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = __ZN10ime_pinyin12SpellingTrie14get_cpinstanceEv() | 0;
return;
}
function __ZN10ime_pinyin14SpellingParser17is_valid_to_parseEc($this, $ch) {
$this = $this | 0;
$ch = $ch | 0;
return __ZN10ime_pinyin12SpellingTrie17is_valid_spl_charEc($ch) | 0;
}
function __ZN10ime_pinyin8LpiCacheC2Ev($this) {
$this = $this | 0;
var $lpi_cache_ = 0, $call2 = 0, $lpi_cache_len_ = 0, $id_03 = 0;
$lpi_cache_ = $this | 0;
HEAP32[$lpi_cache_ >> 2] = __Znaj(3600) | 0;
$call2 = __Znaj(60) | 0;
$lpi_cache_len_ = $this + 4 | 0;
HEAP32[$lpi_cache_len_ >> 2] = $call2;
if ((HEAP32[$lpi_cache_ >> 2] | 0) == 0) {
___assert_func(2496, 27, 4560, 3920);
}
if (($call2 | 0) == 0) {
___assert_func(2496, 28, 4560, 2776);
} else {
$id_03 = 0;
}
do {
HEAP16[(HEAP32[$lpi_cache_len_ >> 2] | 0) + (($id_03 & 65535) << 1) >> 1] = 0;
$id_03 = $id_03 + 1 & 65535;
} while (($id_03 & 65535) < 30);
return;
}
function __ZN10ime_pinyin8LpiCache12get_instanceEv() {
var $call = 0, $1 = 0, $3 = 0;
if ((HEAP32[11852] | 0) != 0) {
$3 = HEAP32[11852] | 0;
return $3 | 0;
}
$call = __Znwj(8) | 0;
$1 = $call;
__ZN10ime_pinyin8LpiCacheC2Ev($1);
HEAP32[11852] = $1;
if (($call | 0) == 0) {
___assert_func(2496, 44, 4600, 1864);
return 0;
} else {
$3 = HEAP32[11852] | 0;
return $3 | 0;
}
return 0;
}
function __ZN10ime_pinyin13SpellingTable7arrangeEPjS1_($this, $item_size, $spl_num) {
$this = $this | 0;
$item_size = $item_size | 0;
$spl_num = $spl_num | 0;
var $raw_spellings_ = 0, $0 = 0, $spelling_buf_ = 0, $spelling_num_ = 0, $spelling_size_ = 0, $pos_040 = 0, $5 = 0, $6 = 0, $add_ptr = 0, $need_score_ = 0, $total_freq_ = 0, $pos13_036 = 0, $min_score_035 = 0.0, $freq = 0, $17 = 0, $19 = 0.0, $min_score_1 = 0.0, $inc49 = 0, $min_score_0_lcssa = 0.0, $score_amplifier_ = 0, $spelling_size_70 = 0, $pos54_031 = 0, $average_score_030 = 0.0, $call62 = 0.0, $mul64 = 0.0, $add = 0.0, $25 = 0, $26 = 0, $inc76 = 0, $28 = 0, $_lcssa = 0, $average_score_0_lcssa = 0.0, $div80 = 0.0, $retval_0 = 0;
$raw_spellings_ = $this + 8 | 0;
$0 = HEAP32[$raw_spellings_ >> 2] | 0;
if (($0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$spelling_buf_ = $this + 12 | 0;
if ((HEAP32[$spelling_buf_ >> 2] | 0) == 0 | ($item_size | 0) == 0 | ($spl_num | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
_qsort($0 | 0, HEAP32[$this + 4 >> 2] | 0, 16, 40);
$spelling_num_ = $this + 32 | 0;
if ((HEAP32[$spelling_num_ >> 2] | 0) != 0) {
$spelling_size_ = $this + 16 | 0;
$pos_040 = 0;
do {
$5 = HEAP32[$spelling_buf_ >> 2] | 0;
$6 = HEAP32[$spelling_size_ >> 2] | 0;
$add_ptr = $5 + (Math_imul($6, $pos_040) | 0) | 0;
_strncpy($add_ptr | 0, (HEAP32[$raw_spellings_ >> 2] | 0) + ($pos_040 << 4) | 0, $6 | 0) | 0;
$pos_040 = $pos_040 + 1 | 0;
} while ($pos_040 >>> 0 < (HEAP32[$spelling_num_ >> 2] | 0) >>> 0);
}
$need_score_ = $this | 0;
do {
if ((HEAP8[$need_score_] & 1) != 0) {
if ((HEAP32[$spelling_num_ >> 2] | 0) == 0) {
$min_score_0_lcssa = 0.0;
} else {
$total_freq_ = $this + 24 | 0;
$min_score_035 = 0.0;
$pos13_036 = 0;
while (1) {
$freq = (HEAP32[$raw_spellings_ >> 2] | 0) + ($pos13_036 << 4) + 8 | 0;
HEAPF64[$freq >> 3] = +HEAPF64[$freq >> 3] / +HEAPF64[$total_freq_ >> 3];
do {
if ((HEAP8[$need_score_] & 1) == 0) {
$min_score_1 = $min_score_035;
} else {
$17 = HEAP32[$raw_spellings_ >> 2] | 0;
if (($pos13_036 | 0) == 0) {
$min_score_1 = +HEAPF64[$17 + 8 >> 3];
break;
}
$19 = +HEAPF64[$17 + ($pos13_036 << 4) + 8 >> 3];
if ($19 >= $min_score_035) {
$min_score_1 = $min_score_035;
break;
}
$min_score_1 = $19;
}
} while (0);
$inc49 = $pos13_036 + 1 | 0;
if ($inc49 >>> 0 < (HEAP32[$spelling_num_ >> 2] | 0) >>> 0) {
$min_score_035 = $min_score_1;
$pos13_036 = $inc49;
} else {
$min_score_0_lcssa = $min_score_1;
break;
}
}
}
$score_amplifier_ = $this + 40 | 0;
HEAPF64[$score_amplifier_ >> 3] = 255.0 / +Math_log(+$min_score_0_lcssa);
L3498 : do {
if ((HEAP32[$spelling_num_ >> 2] | 0) == 0) {
$average_score_0_lcssa = 0.0;
$_lcssa = 0;
} else {
$spelling_size_70 = $this + 16 | 0;
$average_score_030 = 0.0;
$pos54_031 = 0;
while (1) {
$call62 = +Math_log(+(+HEAPF64[(HEAP32[$raw_spellings_ >> 2] | 0) + ($pos54_031 << 4) + 8 >> 3]));
$mul64 = $call62 * +HEAPF64[$score_amplifier_ >> 3];
if ($mul64 < 0.0) {
break;
}
$add = $average_score_030 + $mul64;
$25 = HEAP32[$spelling_buf_ >> 2] | 0;
$26 = HEAP32[$spelling_size_70 >> 2] | 0;
HEAP8[$25 + ($26 - 1 + (Math_imul($26, $pos54_031) | 0)) | 0] = $mul64 > 255.0 ? -1 : ~~$mul64;
$inc76 = $pos54_031 + 1 | 0;
$28 = HEAP32[$spelling_num_ >> 2] | 0;
if ($inc76 >>> 0 < $28 >>> 0) {
$average_score_030 = $add;
$pos54_031 = $inc76;
} else {
$average_score_0_lcssa = $add;
$_lcssa = $28;
break L3498;
}
}
___assert_func(2376, 272, 6328, 3848);
return 0;
}
} while (0);
$div80 = $average_score_0_lcssa / +($_lcssa >>> 0 >>> 0);
if ($div80 > 255.0) {
___assert_func(2376, 290, 6328, 2752);
return 0;
} else {
HEAP8[$this + 48 | 0] = ~~$div80;
break;
}
}
} while (0);
HEAP32[$item_size >> 2] = HEAP32[$this + 16 >> 2];
HEAP32[$spl_num >> 2] = HEAP32[$spelling_num_ >> 2];
HEAP8[$this + 49 | 0] = 1;
$retval_0 = HEAP32[$spelling_buf_ >> 2] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin12SpellingTrie16is_same_spl_charEcc($ch1, $ch2) {
$ch1 = $ch1 | 0;
$ch2 = $ch2 | 0;
var $conv = 0, $conv1 = 0, $0 = 0;
$conv = $ch1 << 24 >> 24;
$conv1 = $ch2 << 24 >> 24;
if ($ch1 << 24 >> 24 == $ch2 << 24 >> 24) {
$0 = 1;
return $0 | 0;
}
if (($conv - $conv1 | 0) == 32) {
$0 = 1;
return $0 | 0;
}
$0 = ($conv1 - $conv | 0) == 32;
return $0 | 0;
}
function __ZN10ime_pinyin14SpellingParser14splstr_to_idxsEPKctPtS3_tRb($this, $splstr, $str_len, $spl_idx, $start_pos, $max_size, $last_is_pre) {
$this = $this | 0;
$splstr = $splstr | 0;
$str_len = $str_len | 0;
$spl_idx = $spl_idx | 0;
$start_pos = $start_pos | 0;
$max_size = $max_size | 0;
$last_is_pre = $last_is_pre | 0;
var $id_this = 0, $id_this75 = 0, $id_this99 = 0, $spl_trie_ = 0, $2 = 0, $cmp8 = 0, $idx_num_0_ph = 0, $last_is_splitter_0_off0_ph = 0, $str_pos_0_ph = 0, $node_this_0_ph = 0, $arrayidx41 = 0, $last_is_splitter_0_off0_ph60_ph = 0, $str_pos_0_ph61_ph = 0, $node_this_0_ph62_ph = 0, $4 = 0, $str_pos_0_ph6183 = 0, $last_is_splitter_0_off0_ph6082 = 0, $str_pos_071 = 0, $5 = 0, $inc = 0, $inc23 = 0, $inc37 = 0, $conv48 = 0, $13 = 0, $conv65 = 0, $i_0 = 0, $found_son_0 = 0, $inc83 = 0, $idx_num_0_ph_be = 0, $last_is_splitter_0_off0_ph_be = 0, $str_pos_0_ph_be = 0, $last_is_splitter_0_off0_ph6076 = 0, $str_pos_0_lcssa = 0, $inc107 = 0, $idx_num_1 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 24 | 0;
$id_this = sp | 0;
$id_this75 = sp + 8 | 0;
$id_this99 = sp + 16 | 0;
if (($splstr | 0) == 0 | $max_size << 16 >> 16 == 0 | $str_len << 16 >> 16 == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin12SpellingTrie17is_valid_spl_charEc(HEAP8[$splstr] | 0) | 0)) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP8[$last_is_pre] = 0;
$spl_trie_ = $this | 0;
$2 = HEAP32[(HEAP32[$spl_trie_ >> 2] | 0) + 44 >> 2] | 0;
$cmp8 = ($start_pos | 0) != 0;
if ($cmp8) {
HEAP16[$start_pos >> 1] = 0;
$node_this_0_ph = $2;
$str_pos_0_ph = 0;
$last_is_splitter_0_off0_ph = 0;
$idx_num_0_ph = 0;
} else {
$node_this_0_ph = $2;
$str_pos_0_ph = 0;
$last_is_splitter_0_off0_ph = 0;
$idx_num_0_ph = 0;
}
L3527 : while (1) {
$arrayidx41 = $start_pos + (($idx_num_0_ph & 65535) << 1) | 0;
$node_this_0_ph62_ph = $node_this_0_ph;
$str_pos_0_ph61_ph = $str_pos_0_ph;
$last_is_splitter_0_off0_ph60_ph = $last_is_splitter_0_off0_ph;
L3529 : while (1) {
if (($str_pos_0_ph61_ph & 65535) >= ($str_len & 65535)) {
$str_pos_0_lcssa = $str_pos_0_ph61_ph;
$last_is_splitter_0_off0_ph6076 = $last_is_splitter_0_off0_ph60_ph;
label = 2785;
break L3527;
}
$4 = $node_this_0_ph62_ph + 4 | 0;
$last_is_splitter_0_off0_ph6082 = $last_is_splitter_0_off0_ph60_ph;
$str_pos_0_ph6183 = $str_pos_0_ph61_ph;
L3532 : while (1) {
$str_pos_071 = $str_pos_0_ph6183;
while (1) {
$5 = HEAP8[$splstr + ($str_pos_071 & 65535) | 0] | 0;
if (__ZN10ime_pinyin12SpellingTrie17is_valid_spl_charEc($5) | 0) {
break L3532;
}
HEAP16[$id_this >> 1] = HEAP16[$4 >> 1] & 2047;
if (__ZNK10ime_pinyin12SpellingTrie18if_valid_id_updateEPt(HEAP32[$spl_trie_ >> 2] | 0, $id_this) | 0) {
label = 2765;
break L3529;
}
if (!$last_is_splitter_0_off0_ph6082) {
$retval_0 = $idx_num_0_ph;
label = 2796;
break L3527;
}
$inc37 = $str_pos_071 + 1 & 65535;
if (!$cmp8) {
break;
}
HEAP16[$arrayidx41 >> 1] = $inc37;
if (($inc37 & 65535) < ($str_len & 65535)) {
$str_pos_071 = $inc37;
} else {
$str_pos_0_lcssa = $inc37;
$last_is_splitter_0_off0_ph6076 = $last_is_splitter_0_off0_ph6082;
label = 2785;
break L3527;
}
}
if (($inc37 & 65535) < ($str_len & 65535)) {
$last_is_splitter_0_off0_ph6082 = 1;
$str_pos_0_ph6183 = $inc37;
} else {
$str_pos_0_lcssa = $inc37;
$last_is_splitter_0_off0_ph6076 = 1;
label = 2785;
break L3527;
}
}
do {
if ($str_pos_071 << 16 >> 16 == 0) {
$conv48 = $5 << 24 >> 24;
if ($5 << 24 >> 24 > 96) {
$found_son_0 = HEAP32[(HEAP32[$spl_trie_ >> 2] | 0) + 56 + ($conv48 - 97 << 2) >> 2] | 0;
break;
} else {
$found_son_0 = HEAP32[(HEAP32[$spl_trie_ >> 2] | 0) + 56 + ($conv48 - 65 << 2) >> 2] | 0;
break;
}
} else {
$13 = HEAP32[$node_this_0_ph62_ph >> 2] | 0;
$conv65 = (HEAPU16[$node_this_0_ph62_ph + 4 >> 1] | 0) >>> 11 & 65535;
$i_0 = 0;
while (1) {
if (($i_0 | 0) >= ($conv65 | 0)) {
label = 2780;
break L3529;
}
if (__ZN10ime_pinyin12SpellingTrie16is_same_spl_charEcc(HEAP8[$13 + ($i_0 << 3) + 6 | 0] | 0, $5) | 0) {
break;
} else {
$i_0 = $i_0 + 1 | 0;
}
}
$found_son_0 = $13 + ($i_0 << 3) | 0;
}
} while (0);
if (($found_son_0 | 0) == 0) {
label = 2780;
break;
} else {
$node_this_0_ph62_ph = $found_son_0;
$str_pos_0_ph61_ph = $str_pos_071 + 1 & 65535;
$last_is_splitter_0_off0_ph60_ph = 0;
}
}
if ((label | 0) == 2780) {
label = 0;
HEAP16[$id_this75 >> 1] = HEAP16[$node_this_0_ph62_ph + 4 >> 1] & 2047;
if (!(__ZNK10ime_pinyin12SpellingTrie18if_valid_id_updateEPt(HEAP32[$spl_trie_ >> 2] | 0, $id_this75) | 0)) {
$retval_0 = $idx_num_0_ph;
label = 2793;
break;
}
HEAP16[$spl_idx + (($idx_num_0_ph & 65535) << 1) >> 1] = HEAP16[$id_this75 >> 1] | 0;
$inc83 = $idx_num_0_ph + 1 & 65535;
if ($cmp8) {
HEAP16[$start_pos + (($inc83 & 65535) << 1) >> 1] = $str_pos_071;
}
if (($inc83 & 65535) < ($max_size & 65535)) {
$str_pos_0_ph_be = $str_pos_071;
$last_is_splitter_0_off0_ph_be = 0;
$idx_num_0_ph_be = $inc83;
} else {
$retval_0 = $inc83;
label = 2791;
break;
}
} else if ((label | 0) == 2765) {
label = 0;
HEAP16[$spl_idx + (($idx_num_0_ph & 65535) << 1) >> 1] = HEAP16[$id_this >> 1] | 0;
$inc = $idx_num_0_ph + 1 & 65535;
$inc23 = $str_pos_071 + 1 & 65535;
if ($cmp8) {
HEAP16[$start_pos + (($inc & 65535) << 1) >> 1] = $inc23;
}
if (($inc & 65535) < ($max_size & 65535)) {
$str_pos_0_ph_be = $inc23;
$last_is_splitter_0_off0_ph_be = 1;
$idx_num_0_ph_be = $inc;
} else {
$retval_0 = $inc;
label = 2795;
break;
}
}
$node_this_0_ph = HEAP32[(HEAP32[$spl_trie_ >> 2] | 0) + 44 >> 2] | 0;
$str_pos_0_ph = $str_pos_0_ph_be;
$last_is_splitter_0_off0_ph = $last_is_splitter_0_off0_ph_be;
$idx_num_0_ph = $idx_num_0_ph_be;
}
if ((label | 0) == 2785) {
HEAP16[$id_this99 >> 1] = HEAP16[$node_this_0_ph62_ph + 4 >> 1] & 2047;
do {
if (__ZNK10ime_pinyin12SpellingTrie18if_valid_id_updateEPt(HEAP32[$spl_trie_ >> 2] | 0, $id_this99) | 0) {
HEAP16[$spl_idx + (($idx_num_0_ph & 65535) << 1) >> 1] = HEAP16[$id_this99 >> 1] | 0;
$inc107 = $idx_num_0_ph + 1 & 65535;
if (!$cmp8) {
$idx_num_1 = $inc107;
break;
}
HEAP16[$start_pos + (($inc107 & 65535) << 1) >> 1] = $str_pos_0_lcssa;
$idx_num_1 = $inc107;
} else {
$idx_num_1 = $idx_num_0_ph;
}
} while (0);
HEAP8[$last_is_pre] = $last_is_splitter_0_off0_ph6076 & 1 ^ 1;
$retval_0 = $idx_num_1;
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2791) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2793) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2795) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2796) {
STACKTOP = sp;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin14SpellingParser16splstr_to_idxs_fEPKctPtS3_tRb($this, $splstr, $str_len, $spl_idx, $start_pos, $max_size, $last_is_pre) {
$this = $this | 0;
$splstr = $splstr | 0;
$str_len = $str_len | 0;
$spl_idx = $spl_idx | 0;
$start_pos = $start_pos | 0;
$max_size = $max_size | 0;
$last_is_pre = $last_is_pre | 0;
var $call = 0, $spl_trie_ = 0, $sub = 0, $conv14 = 0, $pos_013 = 0, $arrayidx = 0, $2 = 0, $3 = 0, $inc = 0;
$call = __ZN10ime_pinyin14SpellingParser14splstr_to_idxsEPKctPtS3_tRb($this, $splstr, $str_len, $spl_idx, $start_pos, $max_size, $last_is_pre) | 0;
if ($call << 16 >> 16 == 0) {
return $call | 0;
}
$spl_trie_ = $this | 0;
$sub = ($call & 65535) - 1 | 0;
$pos_013 = 0;
$conv14 = 0;
while (1) {
$arrayidx = $spl_idx + ($conv14 << 1) | 0;
do {
if (__ZNK10ime_pinyin12SpellingTrie16is_half_id_yunmuEt(HEAP32[$spl_trie_ >> 2] | 0, HEAP16[$arrayidx >> 1] | 0) | 0) {
$2 = HEAP32[$spl_trie_ >> 2] | 0;
$3 = HEAP16[$arrayidx >> 1] | 0;
__ZNK10ime_pinyin12SpellingTrie12half_to_fullEtPt($2, $3, $arrayidx) | 0;
if (($conv14 | 0) != ($sub | 0)) {
break;
}
HEAP8[$last_is_pre] = 0;
}
} while (0);
$inc = $pos_013 + 1 & 65535;
if (($inc & 65535) < ($call & 65535)) {
$pos_013 = $inc;
$conv14 = $inc & 65535;
} else {
break;
}
}
return $call | 0;
}
function __ZN10ime_pinyin14SpellingParser16splstr16_to_idxsEPKttPtS3_tRb($this, $splstr, $str_len, $spl_idx, $start_pos, $max_size, $last_is_pre) {
$this = $this | 0;
$splstr = $splstr | 0;
$str_len = $str_len | 0;
$spl_idx = $spl_idx | 0;
$start_pos = $start_pos | 0;
$max_size = $max_size | 0;
$last_is_pre = $last_is_pre | 0;
var $id_this = 0, $id_this78 = 0, $id_this102 = 0, $spl_trie_ = 0, $2 = 0, $cmp9 = 0, $idx_num_0_ph = 0, $last_is_splitter_0_off0_ph = 0, $str_pos_0_ph = 0, $node_this_0_ph = 0, $arrayidx43 = 0, $last_is_splitter_0_off0_ph60_ph = 0, $str_pos_0_ph61_ph = 0, $node_this_0_ph62_ph = 0, $4 = 0, $str_pos_0_ph6186 = 0, $last_is_splitter_0_off0_ph6085 = 0, $str_pos_074 = 0, $5 = 0, $conv17 = 0, $inc = 0, $inc25 = 0, $inc39 = 0, $conv50 = 0, $13 = 0, $conv67 = 0, $i_0 = 0, $found_son_0 = 0, $inc86 = 0, $idx_num_0_ph_be = 0, $last_is_splitter_0_off0_ph_be = 0, $str_pos_0_ph_be = 0, $last_is_splitter_0_off0_ph6079 = 0, $str_pos_0_lcssa = 0, $inc110 = 0, $idx_num_1 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 24 | 0;
$id_this = sp | 0;
$id_this78 = sp + 8 | 0;
$id_this102 = sp + 16 | 0;
if (($splstr | 0) == 0 | $max_size << 16 >> 16 == 0 | $str_len << 16 >> 16 == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin12SpellingTrie17is_valid_spl_charEc(HEAP16[$splstr >> 1] & 255) | 0)) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP8[$last_is_pre] = 0;
$spl_trie_ = $this | 0;
$2 = HEAP32[(HEAP32[$spl_trie_ >> 2] | 0) + 44 >> 2] | 0;
$cmp9 = ($start_pos | 0) != 0;
if ($cmp9) {
HEAP16[$start_pos >> 1] = 0;
$node_this_0_ph = $2;
$str_pos_0_ph = 0;
$last_is_splitter_0_off0_ph = 0;
$idx_num_0_ph = 0;
} else {
$node_this_0_ph = $2;
$str_pos_0_ph = 0;
$last_is_splitter_0_off0_ph = 0;
$idx_num_0_ph = 0;
}
L3595 : while (1) {
$arrayidx43 = $start_pos + (($idx_num_0_ph & 65535) << 1) | 0;
$node_this_0_ph62_ph = $node_this_0_ph;
$str_pos_0_ph61_ph = $str_pos_0_ph;
$last_is_splitter_0_off0_ph60_ph = $last_is_splitter_0_off0_ph;
L3597 : while (1) {
if (($str_pos_0_ph61_ph & 65535) >= ($str_len & 65535)) {
$str_pos_0_lcssa = $str_pos_0_ph61_ph;
$last_is_splitter_0_off0_ph6079 = $last_is_splitter_0_off0_ph60_ph;
label = 2837;
break L3595;
}
$4 = $node_this_0_ph62_ph + 4 | 0;
$last_is_splitter_0_off0_ph6085 = $last_is_splitter_0_off0_ph60_ph;
$str_pos_0_ph6186 = $str_pos_0_ph61_ph;
L3600 : while (1) {
$str_pos_074 = $str_pos_0_ph6186;
while (1) {
$5 = HEAP16[$splstr + (($str_pos_074 & 65535) << 1) >> 1] | 0;
$conv17 = $5 & 255;
if (__ZN10ime_pinyin12SpellingTrie17is_valid_spl_charEc($conv17) | 0) {
break L3600;
}
HEAP16[$id_this >> 1] = HEAP16[$4 >> 1] & 2047;
if (__ZNK10ime_pinyin12SpellingTrie18if_valid_id_updateEPt(HEAP32[$spl_trie_ >> 2] | 0, $id_this) | 0) {
label = 2817;
break L3597;
}
if (!$last_is_splitter_0_off0_ph6085) {
$retval_0 = $idx_num_0_ph;
label = 2846;
break L3595;
}
$inc39 = $str_pos_074 + 1 & 65535;
if (!$cmp9) {
break;
}
HEAP16[$arrayidx43 >> 1] = $inc39;
if (($inc39 & 65535) < ($str_len & 65535)) {
$str_pos_074 = $inc39;
} else {
$str_pos_0_lcssa = $inc39;
$last_is_splitter_0_off0_ph6079 = $last_is_splitter_0_off0_ph6085;
label = 2837;
break L3595;
}
}
if (($inc39 & 65535) < ($str_len & 65535)) {
$last_is_splitter_0_off0_ph6085 = 1;
$str_pos_0_ph6186 = $inc39;
} else {
$str_pos_0_lcssa = $inc39;
$last_is_splitter_0_off0_ph6079 = 1;
label = 2837;
break L3595;
}
}
do {
if ($str_pos_074 << 16 >> 16 == 0) {
$conv50 = $5 & 65535;
if (($5 & 65535) > 96) {
$found_son_0 = HEAP32[(HEAP32[$spl_trie_ >> 2] | 0) + 56 + ($conv50 - 97 << 2) >> 2] | 0;
break;
} else {
$found_son_0 = HEAP32[(HEAP32[$spl_trie_ >> 2] | 0) + 56 + ($conv50 - 65 << 2) >> 2] | 0;
break;
}
} else {
$13 = HEAP32[$node_this_0_ph62_ph >> 2] | 0;
$conv67 = (HEAPU16[$node_this_0_ph62_ph + 4 >> 1] | 0) >>> 11 & 65535;
$i_0 = 0;
while (1) {
if (($i_0 | 0) >= ($conv67 | 0)) {
label = 2832;
break L3597;
}
if (__ZN10ime_pinyin12SpellingTrie16is_same_spl_charEcc(HEAP8[$13 + ($i_0 << 3) + 6 | 0] | 0, $conv17) | 0) {
break;
} else {
$i_0 = $i_0 + 1 | 0;
}
}
$found_son_0 = $13 + ($i_0 << 3) | 0;
}
} while (0);
if (($found_son_0 | 0) == 0) {
label = 2832;
break;
} else {
$node_this_0_ph62_ph = $found_son_0;
$str_pos_0_ph61_ph = $str_pos_074 + 1 & 65535;
$last_is_splitter_0_off0_ph60_ph = 0;
}
}
if ((label | 0) == 2832) {
label = 0;
HEAP16[$id_this78 >> 1] = HEAP16[$node_this_0_ph62_ph + 4 >> 1] & 2047;
if (!(__ZNK10ime_pinyin12SpellingTrie18if_valid_id_updateEPt(HEAP32[$spl_trie_ >> 2] | 0, $id_this78) | 0)) {
$retval_0 = $idx_num_0_ph;
label = 2844;
break;
}
HEAP16[$spl_idx + (($idx_num_0_ph & 65535) << 1) >> 1] = HEAP16[$id_this78 >> 1] | 0;
$inc86 = $idx_num_0_ph + 1 & 65535;
if ($cmp9) {
HEAP16[$start_pos + (($inc86 & 65535) << 1) >> 1] = $str_pos_074;
}
if (($inc86 & 65535) < ($max_size & 65535)) {
$str_pos_0_ph_be = $str_pos_074;
$last_is_splitter_0_off0_ph_be = 0;
$idx_num_0_ph_be = $inc86;
} else {
$retval_0 = $inc86;
label = 2843;
break;
}
} else if ((label | 0) == 2817) {
label = 0;
HEAP16[$spl_idx + (($idx_num_0_ph & 65535) << 1) >> 1] = HEAP16[$id_this >> 1] | 0;
$inc = $idx_num_0_ph + 1 & 65535;
$inc25 = $str_pos_074 + 1 & 65535;
if ($cmp9) {
HEAP16[$start_pos + (($inc & 65535) << 1) >> 1] = $inc25;
}
if (($inc & 65535) < ($max_size & 65535)) {
$str_pos_0_ph_be = $inc25;
$last_is_splitter_0_off0_ph_be = 1;
$idx_num_0_ph_be = $inc;
} else {
$retval_0 = $inc;
label = 2845;
break;
}
}
$node_this_0_ph = HEAP32[(HEAP32[$spl_trie_ >> 2] | 0) + 44 >> 2] | 0;
$str_pos_0_ph = $str_pos_0_ph_be;
$last_is_splitter_0_off0_ph = $last_is_splitter_0_off0_ph_be;
$idx_num_0_ph = $idx_num_0_ph_be;
}
if ((label | 0) == 2837) {
HEAP16[$id_this102 >> 1] = HEAP16[$node_this_0_ph62_ph + 4 >> 1] & 2047;
do {
if (__ZNK10ime_pinyin12SpellingTrie18if_valid_id_updateEPt(HEAP32[$spl_trie_ >> 2] | 0, $id_this102) | 0) {
HEAP16[$spl_idx + (($idx_num_0_ph & 65535) << 1) >> 1] = HEAP16[$id_this102 >> 1] | 0;
$inc110 = $idx_num_0_ph + 1 & 65535;
if (!$cmp9) {
$idx_num_1 = $inc110;
break;
}
HEAP16[$start_pos + (($inc110 & 65535) << 1) >> 1] = $str_pos_0_lcssa;
$idx_num_1 = $inc110;
} else {
$idx_num_1 = $idx_num_0_ph;
}
} while (0);
HEAP8[$last_is_pre] = $last_is_splitter_0_off0_ph6079 & 1 ^ 1;
$retval_0 = $idx_num_1;
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2843) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2844) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2845) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 2846) {
STACKTOP = sp;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin14SpellingParser18splstr16_to_idxs_fEPKttPtS3_tRb($this, $splstr, $str_len, $spl_idx, $start_pos, $max_size, $last_is_pre) {
$this = $this | 0;
$splstr = $splstr | 0;
$str_len = $str_len | 0;
$spl_idx = $spl_idx | 0;
$start_pos = $start_pos | 0;
$max_size = $max_size | 0;
$last_is_pre = $last_is_pre | 0;
var $call = 0, $spl_trie_ = 0, $sub = 0, $conv14 = 0, $pos_013 = 0, $arrayidx = 0, $2 = 0, $3 = 0, $inc = 0;
$call = __ZN10ime_pinyin14SpellingParser16splstr16_to_idxsEPKttPtS3_tRb($this, $splstr, $str_len, $spl_idx, $start_pos, $max_size, $last_is_pre) | 0;
if ($call << 16 >> 16 == 0) {
return $call | 0;
}
$spl_trie_ = $this | 0;
$sub = ($call & 65535) - 1 | 0;
$pos_013 = 0;
$conv14 = 0;
while (1) {
$arrayidx = $spl_idx + ($conv14 << 1) | 0;
do {
if (__ZNK10ime_pinyin12SpellingTrie16is_half_id_yunmuEt(HEAP32[$spl_trie_ >> 2] | 0, HEAP16[$arrayidx >> 1] | 0) | 0) {
$2 = HEAP32[$spl_trie_ >> 2] | 0;
$3 = HEAP16[$arrayidx >> 1] | 0;
__ZNK10ime_pinyin12SpellingTrie12half_to_fullEtPt($2, $3, $arrayidx) | 0;
if (($conv14 | 0) != ($sub | 0)) {
break;
}
HEAP8[$last_is_pre] = 0;
}
} while (0);
$inc = $pos_013 + 1 & 65535;
if (($inc & 65535) < ($call & 65535)) {
$pos_013 = $inc;
$conv14 = $inc & 65535;
} else {
break;
}
}
return $call | 0;
}
function __ZN10ime_pinyin14SpellingParser16get_splid_by_strEPKctPb($this, $splstr, $str_len, $is_pre) {
$this = $this | 0;
$splstr = $splstr | 0;
$str_len = $str_len | 0;
$is_pre = $is_pre | 0;
var $start_pos = 0, $arraydecay = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$start_pos = sp + 8 | 0;
if (($is_pre | 0) == 0) {
STACKTOP = sp;
return 0;
}
$arraydecay = sp | 0;
if ((__ZN10ime_pinyin14SpellingParser14splstr_to_idxsEPKctPtS3_tRb($this, $splstr, $str_len, $arraydecay, $start_pos | 0, 2, $is_pre) | 0) << 16 >> 16 == 1) {
STACKTOP = sp;
return ((HEAP16[$start_pos + 2 >> 1] | 0) == $str_len << 16 >> 16 ? HEAP16[$arraydecay >> 1] | 0 : 0) | 0;
} else {
STACKTOP = sp;
return 0;
}
return 0;
}
function __ZN10ime_pinyin14SpellingParser18get_splid_by_str_fEPKctPb($this, $splstr, $str_len, $is_pre) {
$this = $this | 0;
$splstr = $splstr | 0;
$str_len = $str_len | 0;
$is_pre = $is_pre | 0;
var $start_pos = 0, $arraydecay = 0, $spl_trie_ = 0, $3 = 0, $4 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$start_pos = sp + 8 | 0;
if (($is_pre | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$arraydecay = sp | 0;
if ((__ZN10ime_pinyin14SpellingParser14splstr_to_idxsEPKctPtS3_tRb($this, $splstr, $str_len, $arraydecay, $start_pos | 0, 2, $is_pre) | 0) << 16 >> 16 != 1) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if ((HEAP16[$start_pos + 2 >> 1] | 0) != $str_len << 16 >> 16) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$spl_trie_ = $this | 0;
if (__ZNK10ime_pinyin12SpellingTrie16is_half_id_yunmuEt(HEAP32[$spl_trie_ >> 2] | 0, HEAP16[$arraydecay >> 1] | 0) | 0) {
$3 = HEAP32[$spl_trie_ >> 2] | 0;
$4 = HEAP16[$arraydecay >> 1] | 0;
__ZNK10ime_pinyin12SpellingTrie12half_to_fullEtPt($3, $4, $arraydecay) | 0;
HEAP8[$is_pre] = 0;
}
$retval_0 = HEAP16[$arraydecay >> 1] | 0;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin14SpellingParser19get_splids_parallelEPKctPttRtRb($this, $splstr, $str_len, $splidx, $max_size, $full_id_num, $is_pre) {
$this = $this | 0;
$splstr = $splstr | 0;
$str_len = $str_len | 0;
$splidx = $splidx | 0;
$max_size = $max_size | 0;
$full_id_num = $full_id_num | 0;
$is_pre = $is_pre | 0;
var $1 = 0, $retval_0 = 0;
do {
if ($max_size << 16 >> 16 == 0) {
$retval_0 = 0;
} else {
if (!(__ZN10ime_pinyin14SpellingParser17is_valid_to_parseEc(0, HEAP8[$splstr] | 0) | 0)) {
$retval_0 = 0;
break;
}
HEAP16[$splidx >> 1] = __ZN10ime_pinyin14SpellingParser16get_splid_by_strEPKctPb($this, $splstr, $str_len, $is_pre) | 0;
HEAP16[$full_id_num >> 1] = 0;
$1 = HEAP16[$splidx >> 1] | 0;
if ($1 << 16 >> 16 == 0) {
$retval_0 = 0;
break;
}
if (($1 & 65535) <= 29) {
$retval_0 = 1;
break;
}
HEAP16[$full_id_num >> 1] = 1;
$retval_0 = 1;
}
} while (0);
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDictC2Ev($this) {
$this = $this | 0;
__ZN10ime_pinyin12AtomDictBaseC2Ev($this | 0);
HEAP32[$this >> 2] = 8176;
_memset($this + 8 | 0, 0, 100);
__ZN10ime_pinyin8UserDict10cache_initEv($this);
return;
}
function __ZN10ime_pinyin8UserDict10cache_initEv($this) {
$this = $this | 0;
__ZN10ime_pinyin8UserDict11reset_cacheEv($this);
__ZN10ime_pinyin8UserDict16reset_miss_cacheEv($this);
return;
}
function __ZN10ime_pinyin8UserDictD0Ev($this) {
$this = $this | 0;
__ZN10ime_pinyin8UserDictD2Ev($this);
__ZdlPv($this);
return;
}
function __ZN10ime_pinyin8UserDictD2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = 8176;
FUNCTION_TABLE_ii[HEAP32[(HEAP32[$this >> 2] | 0) + 12 >> 2] & 31]($this) | 0;
return;
}
function __ZN10ime_pinyin8UserDict9load_dictEPKcjj($this, $file_name, $start_id, $end_id) {
$this = $this | 0;
$file_name = $file_name | 0;
$start_id = $start_id | 0;
$end_id = $end_id | 0;
var $call = 0, $dict_file_ = 0, $start_id_ = 0, $load_time_ = 0, $retval_0 = 0, label = 0;
$call = _strdup($file_name | 0) | 0;
$dict_file_ = $this + 64 | 0;
HEAP32[$dict_file_ >> 2] = $call;
if (($call | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$start_id_ = $this + 16 | 0;
HEAP32[$start_id_ >> 2] = $start_id;
if (__ZN10ime_pinyin8UserDict8validateEPKc($this, $file_name) | 0) {
label = 2890;
} else {
if (__ZN10ime_pinyin8UserDict5resetEPKc(0, $file_name) | 0) {
label = 2890;
}
}
do {
if ((label | 0) == 2890) {
if (!(__ZN10ime_pinyin8UserDict4loadEPKcj($this, $file_name, $start_id) | 0)) {
break;
}
HEAP32[$this + 104 >> 2] = 1;
$load_time_ = $this + 8 | 0;
_gettimeofday($load_time_ | 0, 0) | 0;
$retval_0 = 1;
return $retval_0 | 0;
}
} while (0);
_free(HEAP32[$dict_file_ >> 2] | 0);
HEAP32[$start_id_ >> 2] = 0;
$retval_0 = 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict8validateEPKc($this, $file) {
$this = $this | 0;
$file = $file | 0;
var $version = 0, $dict_info = 0, $call = 0, $call6 = 0, $cmp14 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 48 | 0;
$version = sp | 0;
$dict_info = sp + 8 | 0;
$call = _fopen($file | 0, 3840) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
do {
if ((_fseek($call | 0, 0, 2) | 0) == 0) {
$call6 = _ftell($call | 0) | 0;
if ($call6 >>> 0 < 40) {
break;
}
if ((_fseek($call | 0, 0, 0) | 0) != 0) {
break;
}
$cmp14 = (_fread($version | 0, 1, 4, $call | 0) | 0) >>> 0 > 3;
if (!($cmp14 & (HEAP32[$version >> 2] | 0) == 18015e4)) {
break;
}
if ((_fseek($call | 0, -36 | 0, 2) | 0) != 0) {
break;
}
if ((_fread($dict_info | 0, 1, 36, $call | 0) | 0) != 36) {
break;
}
if (($call6 | 0) != (__ZN10ime_pinyin8UserDict18get_dict_file_sizeEPNS0_12UserDictInfoE(0, $dict_info) | 0)) {
break;
}
_fclose($call | 0) | 0;
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
} while (0);
_fclose($call | 0) | 0;
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict5resetEPKc($this, $file) {
$this = $this | 0;
$file = $file | 0;
var $version = 0, $call = 0, $call2 = 0, $1 = 0, $cmp = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 48 | 0;
$version = sp | 0;
$call = _fopen($file | 0, 2200) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP32[$version >> 2] = 18015e4;
$call2 = _fwrite($version | 0, 1, 4, $call | 0) | 0;
$1 = sp + 8 | 0;
_memset($1 | 0, 0, 36);
$cmp = ((_fwrite($1 | 0, 1, 36, $call | 0) | 0) + $call2 | 0) == 40;
_fclose($call | 0) | 0;
if ($cmp) {
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
_unlink($file | 0) | 0;
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict16reset_milestonesEtt($this, $from_step, $from_handle) {
$this = $this | 0;
$from_step = $from_step | 0;
$from_handle = $from_handle | 0;
return;
}
function __ZN10ime_pinyin8UserDict16number_of_lemmasEv($this) {
$this = $this | 0;
return HEAP32[$this + 80 >> 2] | 0;
}
function __ZN10ime_pinyin8UserDict14is_valid_stateEv($this) {
$this = $this | 0;
return (HEAP32[$this + 104 >> 2] | 0) != 0 | 0;
}
function __ZN10ime_pinyin8UserDict18is_prefix_spell_idEPKttPKNS0_18UserDictSearchableE($this, $fullids, $fulllen, $searchable) {
$this = $this | 0;
$fullids = $fullids | 0;
$fulllen = $fulllen | 0;
$searchable = $searchable | 0;
var $splids_len = 0, $conv4 = 0, $i_0 = 0, $2 = 0, $3 = 0, $retval_0 = 0, label = 0;
$splids_len = $searchable | 0;
if ((HEAPU16[$splids_len >> 1] | 0) > ($fulllen & 65535)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$conv4 = HEAPU16[$splids_len >> 1] | 0;
$i_0 = 0;
while (1) {
if ($i_0 >>> 0 >= $conv4 >>> 0) {
$retval_0 = 1;
label = 2928;
break;
}
$2 = HEAP16[$searchable + 2 + ($i_0 << 1) >> 1] | 0;
$3 = HEAP16[$fullids + ($i_0 << 1) >> 1] | 0;
if (($3 & 65535) < ($2 & 65535)) {
$retval_0 = 0;
label = 2929;
break;
}
if (($3 & 65535 | 0) < ((HEAPU16[$searchable + 18 + ($i_0 << 1) >> 1] | 0) + ($2 & 65535) | 0)) {
$i_0 = $i_0 + 1 | 0;
} else {
$retval_0 = 0;
label = 2927;
break;
}
}
if ((label | 0) == 2928) {
return $retval_0 | 0;
} else if ((label | 0) == 2927) {
return $retval_0 | 0;
} else if ((label | 0) == 2929) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict14equal_spell_idEPKttPKNS0_18UserDictSearchableE($this, $fullids, $fulllen, $searchable) {
$this = $this | 0;
$fullids = $fullids | 0;
$fulllen = $fulllen | 0;
$searchable = $searchable | 0;
var $conv = 0, $i_0 = 0, $1 = 0, $2 = 0, $retval_0 = 0, label = 0;
$conv = $fulllen & 65535;
if ((HEAP16[$searchable >> 1] | 0) == $fulllen << 16 >> 16) {
$i_0 = 0;
} else {
$retval_0 = 0;
return $retval_0 | 0;
}
while (1) {
if ($i_0 >>> 0 >= $conv >>> 0) {
$retval_0 = 1;
label = 2936;
break;
}
$1 = HEAP16[$searchable + 2 + ($i_0 << 1) >> 1] | 0;
$2 = HEAP16[$fullids + ($i_0 << 1) >> 1] | 0;
if (($2 & 65535) < ($1 & 65535)) {
$retval_0 = 0;
label = 2939;
break;
}
if (($2 & 65535 | 0) < ((HEAPU16[$searchable + 18 + ($i_0 << 1) >> 1] | 0) + ($1 & 65535) | 0)) {
$i_0 = $i_0 + 1 | 0;
} else {
$retval_0 = 0;
label = 2938;
break;
}
}
if ((label | 0) == 2938) {
return $retval_0 | 0;
} else if ((label | 0) == 2936) {
return $retval_0 | 0;
} else if ((label | 0) == 2939) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $offset) {
$this = $this | 0;
$offset = $offset | 0;
return HEAP8[(HEAP32[$this + 24 >> 2] | 0) + (($offset & 2147483647) + 1) | 0] | 0;
}
function __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $offset) {
$this = $this | 0;
$offset = $offset | 0;
return (HEAP32[$this + 24 >> 2] | 0) + (($offset & 2147483647) + 2) | 0;
}
function __ZN10ime_pinyin8UserDict4loadEPKcj($this, $file, $start_id) {
$this = $this | 0;
$file = $file | 0;
$start_id = $start_id | 0;
var $dict_info = 0, $call = 0, $0 = 0, $lemma_size = 0, $call9 = 0, $lemma_count = 0, $call14 = 0, $3 = 0, $call21 = 0, $5 = 0, $sync_count = 0, $call27 = 0, $7 = 0, $call34 = 0, $9 = 0, $call41 = 0, $11 = 0, $call48 = 0, $13 = 0, $15 = 0, $readed_0148 = 0, $add64 = 0, $readed_0_lcssa = 0, $shl70 = 0, $readed_1146 = 0, $shl91 = 0, $readed_2143 = 0, $readed_3140 = 0, $shl131 = 0, $21 = 0, $23 = 0, $readed_4137 = 0, $i_0135 = 0, $25 = 0, $syncs_0 = 0, $scores_0 = 0, $ids_0 = 0, $offsets_by_id_0 = 0, $predicts_0112 = 0, $offsets_by_id_0111 = 0, $ids_0110 = 0, $scores_0109 = 0, $syncs_0108 = 0, $predicts_0103 = 0, $offsets_by_id_0102 = 0, $ids_0101 = 0, $scores_0100 = 0, $syncs_099 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 40 | 0;
$dict_info = sp | 0;
$call = _fopen($file | 0, 3840) | 0;
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
do {
if ((_fseek($call | 0, -36 | 0, 2) | 0) == 0) {
$0 = $dict_info;
if ((_fread($0 | 0, 1, 36, $call | 0) | 0) != 36) {
break;
}
$lemma_size = $dict_info + 16 | 0;
$call9 = _malloc((HEAP32[$lemma_size >> 2] | 0) + 1088 | 0) | 0;
if (($call9 | 0) == 0) {
break;
}
$lemma_count = $dict_info + 12 | 0;
$call14 = _malloc((HEAP32[$lemma_count >> 2] << 2) + 128 | 0) | 0;
$3 = $call14;
if (($call14 | 0) == 0) {
$syncs_0108 = 0;
$scores_0109 = 0;
$ids_0110 = 0;
$offsets_by_id_0111 = 0;
$predicts_0112 = 0;
label = 2980;
} else {
$call21 = _malloc((HEAP32[$lemma_count >> 2] << 2) + 128 | 0) | 0;
$5 = $call21;
L3760 : do {
if (($call21 | 0) == 0) {
$offsets_by_id_0 = 0;
$ids_0 = 0;
$scores_0 = 0;
$syncs_0 = 0;
} else {
$sync_count = $dict_info + 28 | 0;
$call27 = _malloc((HEAP32[$sync_count >> 2] << 2) + 128 | 0) | 0;
$7 = $call27;
if (($call27 | 0) == 0) {
$offsets_by_id_0 = 0;
$ids_0 = 0;
$scores_0 = 0;
$syncs_0 = $7;
break;
}
$call34 = _malloc((HEAP32[$lemma_count >> 2] << 2) + 128 | 0) | 0;
$9 = $call34;
if (($call34 | 0) == 0) {
$offsets_by_id_0 = 0;
$ids_0 = 0;
$scores_0 = $9;
$syncs_0 = $7;
break;
}
$call41 = _malloc((HEAP32[$lemma_count >> 2] << 2) + 128 | 0) | 0;
$11 = $call41;
if (($call41 | 0) == 0) {
$offsets_by_id_0 = 0;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break;
}
$call48 = _malloc((HEAP32[$lemma_count >> 2] << 2) + 128 | 0) | 0;
$13 = $call48;
if (($call48 | 0) == 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break;
}
if ((_fseek($call | 0, 4, 0) | 0) != 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break;
}
L3767 : do {
if ((HEAP32[$lemma_size >> 2] | 0) == 0) {
$readed_0_lcssa = 0;
} else {
$15 = HEAP32[$lemma_size >> 2] | 0;
$readed_0148 = 0;
while (1) {
if ((_ferror($call | 0) | 0) != 0) {
$readed_0_lcssa = $readed_0148;
break L3767;
}
if ((_feof($call | 0) | 0) != 0) {
$readed_0_lcssa = $readed_0148;
break L3767;
}
$add64 = (_fread($call9 + $readed_0148 | 0, 1, $15 - $readed_0148 | 0, $call | 0) | 0) + $readed_0148 | 0;
if ($add64 >>> 0 < $15 >>> 0) {
$readed_0148 = $add64;
} else {
$readed_0_lcssa = $add64;
break;
}
}
}
} while (0);
if ($readed_0_lcssa >>> 0 < (HEAP32[$lemma_size >> 2] | 0) >>> 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break;
}
$shl70 = HEAP32[$lemma_count >> 2] << 2;
if (($shl70 | 0) != 0) {
$readed_1146 = 0;
do {
if ((_ferror($call | 0) | 0) != 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break L3760;
}
if ((_feof($call | 0) | 0) != 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break L3760;
}
$readed_1146 = (_fread($call14 + $readed_1146 | 0, 1, $shl70 - $readed_1146 | 0, $call | 0) | 0) + $readed_1146 | 0;
} while ($readed_1146 >>> 0 < $shl70 >>> 0);
}
$shl91 = HEAP32[$lemma_count >> 2] << 2;
do {
if (($shl91 | 0) != 0) {
$readed_2143 = 0;
do {
if ((_ferror($call | 0) | 0) != 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break L3760;
}
if ((_feof($call | 0) | 0) != 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break L3760;
}
$readed_2143 = (_fread($call21 + $readed_2143 | 0, 1, $shl91 - $readed_2143 | 0, $call | 0) | 0) + $readed_2143 | 0;
} while ($readed_2143 >>> 0 < $shl91 >>> 0);
if (($shl91 | 0) == 0) {
break;
} else {
$readed_3140 = 0;
}
do {
if ((_ferror($call | 0) | 0) != 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break L3760;
}
if ((_feof($call | 0) | 0) != 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break L3760;
}
$readed_3140 = (_fread($call34 + $readed_3140 | 0, 1, $shl91 - $readed_3140 | 0, $call | 0) | 0) + $readed_3140 | 0;
} while ($readed_3140 >>> 0 < $shl91 >>> 0);
}
} while (0);
$shl131 = HEAP32[$sync_count >> 2] << 2;
if (($shl131 | 0) != 0) {
$readed_4137 = 0;
do {
if ((_ferror($call | 0) | 0) != 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break L3760;
}
if ((_feof($call | 0) | 0) != 0) {
$offsets_by_id_0 = $13;
$ids_0 = $11;
$scores_0 = $9;
$syncs_0 = $7;
break L3760;
}
$readed_4137 = (_fread($call27 + $readed_4137 | 0, 1, $shl131 - $readed_4137 | 0, $call | 0) | 0) + $readed_4137 | 0;
} while ($readed_4137 >>> 0 < $shl131 >>> 0);
}
if ((HEAP32[$lemma_count >> 2] | 0) != 0) {
$21 = HEAP32[$lemma_count >> 2] | 0;
$23 = $21 >>> 0 > 1 ? $21 << 2 : 4;
_memcpy($call48 | 0, $call14 | 0, $23) | 0;
$i_0135 = 0;
do {
HEAP32[$11 + ($i_0135 << 2) >> 2] = $i_0135 + $start_id;
$i_0135 = $i_0135 + 1 | 0;
} while ($i_0135 >>> 0 < $21 >>> 0);
}
HEAP32[$this + 24 >> 2] = $call9;
HEAP32[$this + 28 >> 2] = $3;
HEAP32[$this + 44 >> 2] = $7;
HEAP32[$this + 48 >> 2] = (HEAP32[$sync_count >> 2] | 0) + 32;
HEAP32[$this + 52 >> 2] = $13;
HEAP32[$this + 32 >> 2] = $9;
HEAP32[$this + 36 >> 2] = $11;
HEAP32[$this + 40 >> 2] = $5;
HEAP32[$this + 56 >> 2] = 32;
HEAP32[$this + 60 >> 2] = 1088;
$25 = $this + 68 | 0;
_memcpy($25 | 0, $0 | 0, 36) | 0;
HEAP32[$this + 104 >> 2] = 1;
_fclose($call | 0) | 0;
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
} while (0);
if (($call9 | 0) == 0) {
$syncs_099 = $syncs_0;
$scores_0100 = $scores_0;
$ids_0101 = $ids_0;
$offsets_by_id_0102 = $offsets_by_id_0;
$predicts_0103 = $5;
} else {
$syncs_0108 = $syncs_0;
$scores_0109 = $scores_0;
$ids_0110 = $ids_0;
$offsets_by_id_0111 = $offsets_by_id_0;
$predicts_0112 = $5;
label = 2980;
}
}
if ((label | 0) == 2980) {
_free($call9);
$syncs_099 = $syncs_0108;
$scores_0100 = $scores_0109;
$ids_0101 = $ids_0110;
$offsets_by_id_0102 = $offsets_by_id_0111;
$predicts_0103 = $predicts_0112;
}
if (($call14 | 0) != 0) {
_free($call14);
}
if (($syncs_099 | 0) != 0) {
_free($syncs_099);
}
if (($scores_0100 | 0) != 0) {
_free($scores_0100);
}
if (($ids_0101 | 0) != 0) {
_free($ids_0101);
}
if (($offsets_by_id_0102 | 0) != 0) {
_free($offsets_by_id_0102);
}
if (($predicts_0103 | 0) == 0) {
break;
}
_free($predicts_0103);
}
} while (0);
_fclose($call | 0) | 0;
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict10close_dictEv($this) {
$this = $this | 0;
var $0 = 0, $1 = 0, $2 = 0, label = 0;
$0 = HEAP32[$this + 104 >> 2] | 0;
if (($0 | 0) == 0) {
return 1;
} else if (($0 | 0) != 1) {
label = 2999;
}
do {
if ((label | 0) == 2999) {
$1 = HEAP32[$this + 8 >> 2] | 0;
$2 = HEAP32[11850] | 0;
if (($1 | 0) <= ($2 | 0)) {
if (($1 | 0) != ($2 | 0)) {
break;
}
if ((HEAP32[$this + 12 >> 2] | 0) <= (HEAP32[11851] | 0)) {
break;
}
}
__ZN10ime_pinyin8UserDict10write_backEv($this);
_gettimeofday(47400, 0) | 0;
}
} while (0);
_free(HEAP32[$this + 64 >> 2] | 0);
_free(HEAP32[$this + 24 >> 2] | 0);
_free(HEAP32[$this + 28 >> 2] | 0);
_free(HEAP32[$this + 52 >> 2] | 0);
_free(HEAP32[$this + 32 >> 2] | 0);
_free(HEAP32[$this + 36 >> 2] | 0);
_free(HEAP32[$this + 40 >> 2] | 0);
_memset($this + 20 | 0, 0, 88);
return 1;
}
function __ZN10ime_pinyin8UserDict10write_backEv($this) {
$this = $this | 0;
var $state_ = 0, $call = 0, $2 = 0, sp = 0;
sp = STACKTOP;
$state_ = $this + 104 | 0;
if ((HEAP32[$state_ >> 2] | 0) >>> 0 < 2) {
STACKTOP = sp;
return;
}
$call = _open(HEAP32[$this + 64 >> 2] | 0, 1, (tempInt = STACKTOP, STACKTOP = STACKTOP + 1 | 0, STACKTOP = STACKTOP + 7 >> 3 << 3, HEAP32[tempInt >> 2] = 0, tempInt) | 0) | 0;
if (($call | 0) == -1) {
STACKTOP = sp;
return;
}
$2 = HEAP32[$state_ >> 2] | 0;
if (($2 | 0) == 4) {
__ZN10ime_pinyin8UserDict17write_back_offsetEi($this, $call);
} else if (($2 | 0) == 2) {
__ZN10ime_pinyin8UserDict15write_back_syncEi($this, $call);
} else if (($2 | 0) == 3) {
__ZN10ime_pinyin8UserDict16write_back_scoreEi($this, $call);
} else if (($2 | 0) == 6) {
__ZN10ime_pinyin8UserDict14write_back_allEi($this, $call);
} else if (($2 | 0) == 5) {
__ZN10ime_pinyin8UserDict16write_back_lemmaEi($this, $call);
}
_ftruncate($call | 0, _lseek($call | 0, 0, 1) | 0) | 0;
_close($call | 0) | 0;
HEAP32[$state_ >> 2] = 1;
STACKTOP = sp;
return;
}
function __ZN10ime_pinyin8UserDict11extend_dictEtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj($this, $from_handle, $dep, $lpi_items, $lpi_max, $lpi_num) {
$this = $this | 0;
$from_handle = $from_handle | 0;
$dep = $dep | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
$lpi_num = $lpi_num | 0;
var $need_extend = 0, $call4 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$need_extend = sp | 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP8[$need_extend] = 0;
$call4 = __ZN10ime_pinyin8UserDict9_get_lpisEPKttPNS_10LmaPsbItemEjPb($this, $dep | 0, (HEAP16[$dep + 80 >> 1] | 0) + 1 & 65535, $lpi_items, $lpi_max, $need_extend) | 0;
HEAP32[$lpi_num >> 2] = $call4;
if (($call4 | 0) != 0) {
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
$retval_0 = HEAP8[$need_extend] & 1;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict9_get_lpisEPKttPNS_10LmaPsbItemEjPb($this, $splid_str, $splid_str_len, $lpi_items, $lpi_max, $need_extend) {
$this = $this | 0;
$splid_str = $splid_str | 0;
$splid_str_len = $splid_str_len | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
$need_extend = $need_extend | 0;
var $searchable = 0, $start = 0, $count = 0, $tmp_extend_need_extend = 0, $0 = 0, $1 = 0, $6 = 0, $call15 = 0, $7 = 0, $call19 = 0, $middle_0 = 0, $max_off_0 = 0, $offsets_ = 0, $scores_ = 0, $ids_ = 0, $middle_1 = 0, $10 = 0, $call37 = 0, $call38 = 0, $fuzzy_break_1_off0 = 0, $conv50 = 0, $prefix_break_1_off0 = 0, $17 = 0, $lpi_current_1 = 0, $middle_1_ph = 0, $lpi_current_0_ph = 0, $fuzzy_break_0_off0_ph = 0, $prefix_break_0_off0_ph = 0, $cmp31 = 0, $23 = 0, $sub = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 72 | 0;
$searchable = sp + 8 | 0;
$start = sp + 56 | 0;
$count = sp + 64 | 0;
$tmp_extend_need_extend = ($need_extend | 0) == 0 ? sp | 0 : $need_extend;
HEAP8[$tmp_extend_need_extend] = 0;
if (($lpi_max | 0) == 0 | (__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0) ^ 1) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$0 = HEAP32[$this + 8 >> 2] | 0;
$1 = HEAP32[11850] | 0;
do {
if (($0 | 0) < ($1 | 0)) {
label = 3031;
} else {
if (($0 | 0) != ($1 | 0)) {
break;
}
if ((HEAP32[$this + 12 >> 2] | 0) < (HEAP32[11851] | 0)) {
label = 3031;
}
}
} while (0);
if ((label | 0) == 3031) {
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$this >> 2] | 0) + 76 >> 2] & 127]($this);
}
__ZN10ime_pinyin8UserDict14prepare_locateEPNS0_18UserDictSearchableEPKtt(0, $searchable, $splid_str, $splid_str_len);
$6 = HEAP32[$this + 80 >> 2] | 0;
$call15 = __ZN10ime_pinyin8UserDict9cache_hitEPNS0_18UserDictSearchableEPjS3_($this, $searchable, $start, $count) | 0;
if ($call15) {
$7 = HEAP32[$start >> 2] | 0;
$max_off_0 = (HEAP32[$count >> 2] | 0) + $7 | 0;
$middle_0 = $7;
} else {
$call19 = __ZN10ime_pinyin8UserDict23locate_first_in_offsetsEPKNS0_18UserDictSearchableE($this, $searchable) | 0;
HEAP32[$start >> 2] = $call19;
$max_off_0 = $6;
$middle_0 = $call19;
}
if (($middle_0 | 0) == -1) {
if ($call15) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
__ZN10ime_pinyin8UserDict10cache_pushENS0_17UserDictCacheTypeEPNS0_18UserDictSearchableEjj($this, 1, $searchable, 0, 0);
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$offsets_ = $this + 28 | 0;
$scores_ = $this + 32 | 0;
$ids_ = $this + 36 | 0;
$prefix_break_0_off0_ph = 0;
$fuzzy_break_0_off0_ph = 0;
$lpi_current_0_ph = 0;
$middle_1_ph = $middle_0;
L3881 : while (1) {
$cmp31 = $lpi_current_0_ph >>> 0 < $lpi_max >>> 0;
$middle_1 = $middle_1_ph;
while (1) {
if (!($cmp31 & (($middle_1 >>> 0 >= $max_off_0 >>> 0 | $fuzzy_break_0_off0_ph | $prefix_break_0_off0_ph) ^ 1))) {
break L3881;
}
$10 = HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($middle_1 << 2) >> 2] | 0;
if (($10 | 0) < 0) {
$middle_1 = $middle_1 + 1 | 0;
} else {
break;
}
}
$call37 = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $10) | 0;
$call38 = __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $10) | 0;
if ($call15) {
$fuzzy_break_1_off0 = $fuzzy_break_0_off0_ph;
} else {
$fuzzy_break_1_off0 = $fuzzy_break_0_off0_ph | (__ZN10ime_pinyin8UserDict22fuzzy_compare_spell_idEPKttPKNS0_18UserDictSearchableE(0, $call38, $call37 & 255, $searchable) | 0) != 0;
}
do {
if ($prefix_break_0_off0_ph) {
$prefix_break_1_off0 = 1;
} else {
$conv50 = $call37 & 255;
if ((__ZN10ime_pinyin8UserDict24is_fuzzy_prefix_spell_idEPKttPKNS0_18UserDictSearchableE(0, $call38, $conv50, $searchable) | 0) == 0) {
$prefix_break_1_off0 = 1;
break;
}
if ((HEAP8[$tmp_extend_need_extend] & 1) != 0) {
$prefix_break_1_off0 = $prefix_break_0_off0_ph;
break;
}
if (!(__ZN10ime_pinyin8UserDict18is_prefix_spell_idEPKttPKNS0_18UserDictSearchableE(0, $call38, $conv50, $searchable) | 0)) {
$prefix_break_1_off0 = $prefix_break_0_off0_ph;
break;
}
HEAP8[$tmp_extend_need_extend] = 1;
$prefix_break_1_off0 = $prefix_break_0_off0_ph;
}
} while (0);
if (__ZN10ime_pinyin8UserDict14equal_spell_idEPKttPKNS0_18UserDictSearchableE(0, $call38, $call37 & 255, $searchable) | 0) {
HEAP16[$lpi_items + ($lpi_current_0_ph << 3) + 4 >> 1] = __ZN10ime_pinyin8UserDict15translate_scoreEi($this, HEAP32[(HEAP32[$scores_ >> 2] | 0) + ($middle_1 << 2) >> 2] | 0) | 0;
$17 = $lpi_items + ($lpi_current_0_ph << 3) | 0;
HEAP32[$17 >> 2] = HEAP32[(HEAP32[$ids_ >> 2] | 0) + ($middle_1 << 2) >> 2] & 16777215 | ($call37 & 255) << 24 & 251658240 | HEAP32[$17 >> 2] & -268435456;
$lpi_current_1 = $lpi_current_0_ph + 1 | 0;
} else {
$lpi_current_1 = $lpi_current_0_ph;
}
$prefix_break_0_off0_ph = $prefix_break_1_off0;
$fuzzy_break_0_off0_ph = $fuzzy_break_1_off0;
$lpi_current_0_ph = $lpi_current_1;
$middle_1_ph = $middle_1 + 1 | 0;
}
if ($call15) {
$retval_0 = $lpi_current_0_ph;
STACKTOP = sp;
return $retval_0 | 0;
}
$23 = HEAP32[$start >> 2] | 0;
$sub = $middle_1 - $23 | 0;
HEAP32[$count >> 2] = $sub;
__ZN10ime_pinyin8UserDict10cache_pushENS0_17UserDictCacheTypeEPNS0_18UserDictSearchableEjj($this, 0, $searchable, $23, $sub);
$retval_0 = $lpi_current_0_ph;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict24is_fuzzy_prefix_spell_idEPKttPKNS0_18UserDictSearchableE($this, $id1, $len1, $searchable) {
$this = $this | 0;
$id1 = $id1 | 0;
$len1 = $len1 | 0;
$searchable = $searchable | 0;
var $splids_len = 0, $call = 0, $i_0 = 0, $3 = 0, $conv9 = 0, $retval_0 = 0, label = 0;
$splids_len = $searchable | 0;
if ((HEAPU16[$splids_len >> 1] | 0) > ($len1 & 65535)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
$i_0 = 0;
while (1) {
if ($i_0 >>> 0 >= (HEAPU16[$splids_len >> 1] | 0) >>> 0) {
$retval_0 = 1;
label = 3067;
break;
}
$3 = HEAP8[__ZN10ime_pinyin12SpellingTrie16get_spelling_strEt($call, HEAP16[$id1 + ($i_0 << 1) >> 1] | 0) | 0] | 0;
$conv9 = $i_0 << 3 & 24;
if (($3 << 24 >> 24 | 0) == ((HEAP32[$searchable + 36 + ($i_0 >>> 2 << 2) >> 2] & 255 << $conv9) >>> ($conv9 >>> 0) << 24 >> 24 | 0)) {
$i_0 = $i_0 + 1 | 0;
} else {
$retval_0 = 0;
label = 3065;
break;
}
}
if ((label | 0) == 3065) {
return $retval_0 | 0;
} else if ((label | 0) == 3067) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict22fuzzy_compare_spell_idEPKttPKNS0_18UserDictSearchableE($this, $id1, $len1, $searchable) {
$this = $this | 0;
$id1 = $id1 | 0;
$len1 = $len1 | 0;
$searchable = $searchable | 0;
var $conv = 0, $0 = 0, $call = 0, $i_0 = 0, $2 = 0, $conv14 = 0, $conv17 = 0, $conv18 = 0, $retval_0 = 0, label = 0;
$conv = $len1 & 65535;
$0 = HEAP16[$searchable >> 1] | 0;
if (($0 & 65535) > ($len1 & 65535)) {
$retval_0 = -1;
return $retval_0 | 0;
}
if (($0 & 65535) < ($len1 & 65535)) {
$retval_0 = 1;
return $retval_0 | 0;
}
$call = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
$i_0 = 0;
while (1) {
if ($i_0 >>> 0 >= $conv >>> 0) {
$retval_0 = 0;
label = 3076;
break;
}
$2 = HEAP8[__ZN10ime_pinyin12SpellingTrie16get_spelling_strEt($call, HEAP16[$id1 + ($i_0 << 1) >> 1] | 0) | 0] | 0;
$conv14 = $i_0 << 3 & 24;
$conv17 = $2 << 24 >> 24;
$conv18 = (HEAP32[$searchable + 36 + ($i_0 >>> 2 << 2) >> 2] & 255 << $conv14) >>> ($conv14 >>> 0) << 24 >> 24;
if (($conv17 | 0) == ($conv18 | 0)) {
$i_0 = $i_0 + 1 | 0;
} else {
break;
}
}
if ((label | 0) == 3076) {
return $retval_0 | 0;
}
$retval_0 = ($conv17 | 0) > ($conv18 | 0) ? 1 : -1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict23locate_first_in_offsetsEPKNS0_18UserDictSearchableE($this, $searchable) {
$this = $this | 0;
$searchable = $searchable | 0;
var $offsets_ = 0, $first_prefix_0_ph = 0, $end_0_ph_in = 0, $begin_0_ph = 0, $end_0_ph = 0, $first_prefix_0 = 0, $begin_0 = 0, $shr = 0, $2 = 0, $call = 0, $call2 = 0, $conv = 0, $call4 = 0, $first_prefix_0_shr = 0;
$offsets_ = $this + 28 | 0;
$begin_0_ph = 0;
$end_0_ph_in = HEAP32[$this + 80 >> 2] | 0;
$first_prefix_0_ph = -1;
L3929 : while (1) {
$end_0_ph = $end_0_ph_in - 1 | 0;
$begin_0 = $begin_0_ph;
$first_prefix_0 = $first_prefix_0_ph;
while (1) {
if (($begin_0 | 0) > ($end_0_ph | 0)) {
break L3929;
}
$shr = $begin_0 + $end_0_ph >> 1;
$2 = HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($shr << 2) >> 2] | 0;
$call = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $2) | 0;
$call2 = __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $2) | 0;
$conv = $call & 255;
$call4 = __ZN10ime_pinyin8UserDict22fuzzy_compare_spell_idEPKttPKNS0_18UserDictSearchableE(0, $call2, $conv, $searchable) | 0;
$first_prefix_0_shr = (__ZN10ime_pinyin8UserDict24is_fuzzy_prefix_spell_idEPKttPKNS0_18UserDictSearchableE(0, $call2, $conv, $searchable) | 0) == 0 ? $first_prefix_0 : $shr;
if (($call4 | 0) < 0) {
$begin_0 = $shr + 1 | 0;
$first_prefix_0 = $first_prefix_0_shr;
} else {
$begin_0_ph = $begin_0;
$end_0_ph_in = $shr;
$first_prefix_0_ph = $first_prefix_0_shr;
continue L3929;
}
}
}
return $first_prefix_0 | 0;
}
function __ZN10ime_pinyin8UserDict14prepare_locateEPNS0_18UserDictSearchableEPKtt($this, $searchable, $splid_str, $splid_str_len) {
$this = $this | 0;
$searchable = $searchable | 0;
$splid_str = $splid_str | 0;
$splid_str_len = $splid_str_len | 0;
var $0 = 0, $call = 0, $conv = 0, $i_025 = 0, $arrayidx = 0, $shl = 0, $arrayidx16 = 0;
HEAP16[$searchable >> 1] = $splid_str_len;
$0 = $searchable + 36 | 0;
HEAP32[$0 >> 2] = 0;
HEAP32[$0 + 4 >> 2] = 0;
$call = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
$conv = $splid_str_len & 65535;
if ($splid_str_len << 16 >> 16 == 0) {
return;
} else {
$i_025 = 0;
}
do {
$arrayidx = $splid_str + ($i_025 << 1) | 0;
if (__ZNK10ime_pinyin12SpellingTrie10is_half_idEt($call, HEAP16[$arrayidx >> 1] | 0) | 0) {
HEAP16[$searchable + 18 + ($i_025 << 1) >> 1] = __ZNK10ime_pinyin12SpellingTrie12half_to_fullEtPt($call, HEAP16[$arrayidx >> 1] | 0, $searchable + 2 + ($i_025 << 1) | 0) | 0;
} else {
HEAP16[$searchable + 18 + ($i_025 << 1) >> 1] = 1;
HEAP16[$searchable + 2 + ($i_025 << 1) >> 1] = HEAP16[$arrayidx >> 1] | 0;
}
$shl = (HEAPU8[__ZN10ime_pinyin12SpellingTrie16get_spelling_strEt($call, HEAP16[$arrayidx >> 1] | 0) | 0] | 0) << ($i_025 << 3 & 24);
$arrayidx16 = $searchable + 36 + ($i_025 >>> 2 << 2) | 0;
HEAP32[$arrayidx16 >> 2] = $shl | HEAP32[$arrayidx16 >> 2];
$i_025 = $i_025 + 1 | 0;
} while ($i_025 >>> 0 < $conv >>> 0);
return;
}
function __ZN10ime_pinyin8UserDict8get_lpisEPKttPNS_10LmaPsbItemEj($this, $splid_str, $splid_str_len, $lpi_items, $lpi_max) {
$this = $this | 0;
$splid_str = $splid_str | 0;
$splid_str_len = $splid_str_len | 0;
$lpi_items = $lpi_items | 0;
$lpi_max = $lpi_max | 0;
return __ZN10ime_pinyin8UserDict9_get_lpisEPKttPNS_10LmaPsbItemEjPb($this, $splid_str, $splid_str_len, $lpi_items, $lpi_max, 0) | 0;
}
function __ZN10ime_pinyin8UserDict10load_cacheEPNS0_18UserDictSearchableEPjS3_($this, $searchable, $offset, $length) {
$this = $this | 0;
$searchable = $searchable | 0;
$offset = $offset | 0;
$length = $length | 0;
var $sub = 0, $1 = 0, $tail = 0, $i_0 = 0, $idxprom8 = 0, $j_0 = 0, $conv5 = 0, $inc20 = 0, $sub25_inc20 = 0, $retval_0 = 0, label = 0;
$sub = (HEAPU16[$searchable >> 1] | 0) - 1 | 0;
$1 = HEAP16[$this + 588 + ($sub * 68 | 0) + 64 >> 1] | 0;
$tail = $this + 588 + ($sub * 68 | 0) + 66 | 0;
if ($1 << 16 >> 16 == (HEAP16[$tail >> 1] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
} else {
$i_0 = $1;
}
L3949 : while (1) {
$idxprom8 = $i_0 & 65535;
$j_0 = 0;
while (1) {
$conv5 = $j_0 & 65535;
if (($j_0 & 65535) >= 2) {
break L3949;
}
if ((HEAP32[$this + 588 + ($sub * 68 | 0) + ($idxprom8 << 3) + ($conv5 << 2) >> 2] | 0) == (HEAP32[$searchable + 36 + ($conv5 << 2) >> 2] | 0)) {
$j_0 = $j_0 + 1 & 65535;
} else {
break;
}
}
$inc20 = $i_0 + 1 & 65535;
$sub25_inc20 = ($inc20 & 65535) > 3 ? $i_0 - 3 & 65535 : $inc20;
if ($sub25_inc20 << 16 >> 16 == (HEAP16[$tail >> 1] | 0)) {
$retval_0 = 0;
label = 3100;
break;
} else {
$i_0 = $sub25_inc20;
}
}
if ((label | 0) == 3100) {
return $retval_0 | 0;
}
HEAP32[$offset >> 2] = HEAP32[$this + 588 + ($sub * 68 | 0) + 32 + ($idxprom8 << 2) >> 2];
HEAP32[$length >> 2] = HEAP32[$this + 588 + ($sub * 68 | 0) + 48 + ($idxprom8 << 2) >> 2];
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict27remove_lemma_from_sync_listEj($this, $offset) {
$this = $this | 0;
$offset = $offset | 0;
var $syncs_ = 0, $sync_count = 0, $0 = 0, $i_0 = 0, $5 = 0, $6 = 0;
$syncs_ = $this + 44 | 0;
$sync_count = $this + 96 | 0;
$0 = HEAP32[$sync_count >> 2] | 0;
$i_0 = 0;
while (1) {
if ($i_0 >>> 0 >= $0 >>> 0) {
break;
}
if (((HEAP32[(HEAP32[$syncs_ >> 2] | 0) + ($i_0 << 2) >> 2] ^ $offset) & 2147483647 | 0) == 0) {
break;
} else {
$i_0 = $i_0 + 1 | 0;
}
}
$5 = HEAP32[$sync_count >> 2] | 0;
if ($i_0 >>> 0 >= $5 >>> 0) {
return;
}
$6 = HEAP32[$this + 44 >> 2] | 0;
HEAP32[$6 + ($i_0 << 2) >> 2] = HEAP32[$6 + ($5 - 1 << 2) >> 2];
HEAP32[$sync_count >> 2] = (HEAP32[$sync_count >> 2] | 0) - 1;
return;
}
function __ZN10ime_pinyin8UserDict30remove_lemma_from_predict_listEj($this, $offset) {
$this = $this | 0;
$offset = $offset | 0;
var $0 = 0, $predicts_ = 0, $i_0 = 0, $arrayidx = 0, $2 = 0, label = 0;
$0 = HEAP32[$this + 80 >> 2] | 0;
$predicts_ = $this + 40 | 0;
$i_0 = 0;
while (1) {
if ($i_0 >>> 0 >= $0 >>> 0) {
label = 3117;
break;
}
$arrayidx = (HEAP32[$predicts_ >> 2] | 0) + ($i_0 << 2) | 0;
$2 = HEAP32[$arrayidx >> 2] | 0;
if ((($2 ^ $offset) & 2147483647 | 0) == 0) {
break;
} else {
$i_0 = $i_0 + 1 | 0;
}
}
if ((label | 0) == 3117) {
return;
}
HEAP32[$arrayidx >> 2] = $2 | -2147483648;
return;
}
function __ZN10ime_pinyin8UserDict18get_dict_file_sizeEPNS0_12UserDictInfoE($this, $info) {
$this = $this | 0;
$info = $info | 0;
var $1 = 0;
$1 = HEAP32[$info + 12 >> 2] | 0;
return (HEAP32[$info + 16 >> 2] | 0) + 40 + ($1 << 3) + ((HEAP32[$info + 28 >> 2] | 0) + $1 << 2) | 0;
}
function __ZN10ime_pinyin8UserDict9cache_hitEPNS0_18UserDictSearchableEPjS3_($this, $searchable, $offset, $length) {
$this = $this | 0;
$searchable = $searchable | 0;
$offset = $offset | 0;
$length = $length | 0;
var $retval_0 = 0;
if (__ZN10ime_pinyin8UserDict15load_miss_cacheEPNS0_18UserDictSearchableE($this, $searchable) | 0) {
HEAP32[$offset >> 2] = 0;
HEAP32[$length >> 2] = 0;
$retval_0 = 1;
return $retval_0 | 0;
} else {
$retval_0 = __ZN10ime_pinyin8UserDict10load_cacheEPNS0_18UserDictSearchableEPjS3_($this, $searchable, $offset, $length) | 0;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict10cache_pushENS0_17UserDictCacheTypeEPNS0_18UserDictSearchableEjj($this, $type, $searchable, $offset, $length) {
$this = $this | 0;
$type = $type | 0;
$searchable = $searchable | 0;
$offset = $offset | 0;
$length = $length | 0;
if (($type | 0) == 0) {
__ZN10ime_pinyin8UserDict10save_cacheEPNS0_18UserDictSearchableEjj($this, $searchable, $offset, $length);
return;
} else if (($type | 0) == 1) {
__ZN10ime_pinyin8UserDict15save_miss_cacheEPNS0_18UserDictSearchableE($this, $searchable);
return;
} else {
return;
}
}
function __ZN10ime_pinyin8UserDict15translate_scoreEi($this, $raw_score) {
$this = $this | 0;
$raw_score = $raw_score | 0;
var $call = 0, $0 = 0, $sub$0 = 0, $div$0 = 0, $sub4$0 = 0, $conv5 = 0;
$call = __ZN10ime_pinyin8UserDict18extract_score_freqEi(0, $raw_score) | 0;
$0 = HEAP32[$this + 8 >> 2] | 0;
$sub$0 = _i64Add($0, ($0 | 0) < 0 ? -1 : 0, -1229904e3, -1) | 0;
$div$0 = ___udivdi3($sub$0, tempRet0, 604800, 0) | 0;
$sub4$0 = _i64Subtract($div$0 & 65535, tempRet0 & 0, $raw_score >>> 16, 0) | 0;
$conv5 = $sub4$0;
return ~~(+Math_log(+(+($call >>> 0 >>> 0) * (($conv5 | 0) > 4 ? 16.0 : +(80 - ($conv5 << 4) | 0)) / +(((HEAP32[$this + 4 >> 2] | 0) + (HEAP32[$this + 100 >> 2] | 0) | 0) >>> 0 >>> 0))) * -800.0) | 0;
}
function __ZN10ime_pinyin8UserDict13get_lemma_strEjPtt($this, $id_lemma, $str_buf, $str_max) {
$this = $this | 0;
$id_lemma = $id_lemma | 0;
$str_buf = $str_buf | 0;
$str_max = $str_max | 0;
var $2 = 0, $call7 = 0, $call8 = 0, $sub11 = 0, $cond_off0 = 0, $conv17 = 0, $3 = 0, $4 = 0, $i_012 = 0, $i_0_lcssa = 0, $retval_0 = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin8UserDict17is_valid_lemma_idEj($this, $id_lemma) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$2 = HEAP32[(HEAP32[$this + 52 >> 2] | 0) + ($id_lemma - (HEAP32[$this + 16 >> 2] | 0) << 2) >> 2] | 0;
$call7 = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $2) | 0;
$call8 = __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $2) | 0;
$sub11 = ($str_max & 65535) - 1 | 0;
$cond_off0 = ($call7 & 255 | 0) < ($sub11 | 0) ? $call7 & 255 : $sub11 & 65535;
$conv17 = $cond_off0 & 65535;
if ($cond_off0 << 16 >> 16 == 0) {
$i_0_lcssa = 0;
} else {
$3 = $cond_off0 & 65535;
$4 = $3 >>> 0 > 1;
$i_012 = 0;
do {
HEAP16[$str_buf + ($i_012 << 1) >> 1] = HEAP16[$call8 + ($i_012 << 1) >> 1] | 0;
$i_012 = $i_012 + 1 | 0;
} while (($i_012 | 0) < ($conv17 | 0));
$i_0_lcssa = $4 ? $3 : 1;
}
HEAP16[$str_buf + ($i_0_lcssa << 1) >> 1] = 0;
$retval_0 = $cond_off0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict17is_valid_lemma_idEj($this, $id) {
$this = $this | 0;
$id = $id | 0;
var $retval_0 = 0;
do {
if ((HEAP32[$this + 16 >> 2] | 0) >>> 0 <= $id >>> 0) {
if ((__ZN10ime_pinyin8UserDict16get_max_lemma_idEv($this) | 0) >>> 0 < $id >>> 0) {
break;
} else {
$retval_0 = 1;
}
return $retval_0 | 0;
}
} while (0);
$retval_0 = 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $offset) {
$this = $this | 0;
$offset = $offset | 0;
var $and = 0, $call = 0;
$and = $offset & 2147483647;
$call = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $and) | 0;
return (HEAP32[$this + 24 >> 2] | 0) + ($and + 2 + (($call & 255) << 1)) | 0;
}
function __ZN10ime_pinyin8UserDict16get_lemma_splidsEjPttb($this, $id_lemma, $splids, $splids_max, $arg_valid) {
$this = $this | 0;
$id_lemma = $id_lemma | 0;
$splids = $splids | 0;
$splids_max = $splids_max | 0;
$arg_valid = $arg_valid | 0;
var $2 = 0, $call2 = 0, $call3 = 0, $conv6 = 0, $conv4 = 0, $5 = 0, $8 = 0, $umax = 0, $i_010 = 0, $retval_0 = 0;
if (!(__ZN10ime_pinyin8UserDict17is_valid_lemma_idEj($this, $id_lemma) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$2 = HEAP32[(HEAP32[$this + 52 >> 2] | 0) + ($id_lemma - (HEAP32[$this + 16 >> 2] | 0) << 2) >> 2] | 0;
$call2 = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $2) | 0;
$call3 = __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $2) | 0;
$conv6 = $splids_max & 65535;
$conv4 = $call2 & 255;
if (!($call2 << 24 >> 24 != 0 & $splids_max << 16 >> 16 != 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$5 = ($call2 & 255) > 1 ? -($call2 & 255) | 0 : -1;
$8 = ($splids_max & 65535) > 1 ? -($splids_max & 65535) | 0 : -1;
$umax = $5 >>> 0 > $8 >>> 0 ? $5 : $8;
$i_010 = 0;
do {
HEAP16[$splids + ($i_010 << 1) >> 1] = HEAP16[$call3 + ($i_010 << 1) >> 1] | 0;
$i_010 = $i_010 + 1 | 0;
} while (($i_010 | 0) < ($conv4 | 0) & ($i_010 | 0) < ($conv6 | 0));
$retval_0 = -$umax & 65535;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict7predictEPKttPNS_12NPredictItemEjj($this, $last_hzs, $hzs_len, $npre_items, $npre_max, $b4_used) {
$this = $this | 0;
$last_hzs = $last_hzs | 0;
$hzs_len = $hzs_len | 0;
$npre_items = $npre_items | 0;
$npre_max = $npre_max | 0;
$b4_used = $b4_used | 0;
var $sub = 0, $conv = 0, $call = 0, $predicts_ = 0, $1 = 0, $shl = 0, $2 = 0, $new_added_0_ph42 = 0, $j_0_ph41 = 0, $3 = 0, $j_034 = 0, $4 = 0, $j_0_be = 0, $call5 = 0, $conv6 = 0, $call7 = 0, $call8 = 0, $sub25 = 0, $7 = 0, $8 = 0, $inc40 = 0, $inc42 = 0, $retval_0 = 0, label = 0;
$sub = (HEAP32[$this + 80 >> 2] | 0) - 1 | 0;
$conv = $hzs_len & 65535;
$call = __ZN10ime_pinyin8UserDict24locate_first_in_predictsEPKti($this, $last_hzs, $conv) | 0;
if (($call | 0) == -1 | ($call | 0) > ($sub | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$predicts_ = $this + 40 | 0;
$1 = $last_hzs;
$shl = $conv << 1;
$2 = $this;
$j_0_ph41 = $call;
$new_added_0_ph42 = 0;
L4027 : while (1) {
$3 = HEAP32[$predicts_ >> 2] | 0;
$j_034 = $j_0_ph41;
while (1) {
$4 = HEAP32[$3 + ($j_034 << 2) >> 2] | 0;
if (($4 | 0) >= 0) {
$call5 = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $4) | 0;
$conv6 = $call5 << 24 >> 24;
$call7 = __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $4) | 0;
$call8 = __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $4) | 0;
if ($conv6 >>> 0 > $conv >>> 0) {
break;
}
}
$j_0_be = $j_034 + 1 | 0;
if (($j_0_be | 0) > ($sub | 0)) {
$retval_0 = $new_added_0_ph42;
label = 3171;
break L4027;
} else {
$j_034 = $j_0_be;
}
}
if (!((_memcmp($call7 | 0, $1 | 0, $shl | 0) | 0) == 0 & $new_added_0_ph42 >>> 0 < $npre_max >>> 0)) {
$retval_0 = $new_added_0_ph42;
label = 3174;
break;
}
$sub25 = (($call5 & 255) < 7 ? $conv6 << 1 : 14) - $shl | 0;
HEAP16[$npre_items + ($new_added_0_ph42 * 20 | 0) + 18 >> 1] = $hzs_len;
HEAPF32[$npre_items + ($new_added_0_ph42 * 20 | 0) >> 2] = +(((FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$2 >> 2] | 0) + 60 >> 2] & 31]($this, $call7, $call8, $call5 << 24 >> 24) | 0) & 65535) >>> 0);
$7 = $npre_items + ($new_added_0_ph42 * 20 | 0) + 4 | 0;
$8 = $call7 + ($conv << 1) | 0;
_memcpy($7 | 0, $8 | 0, $sub25) | 0;
if ($sub25 >>> 0 < 14) {
HEAP16[$npre_items + ($new_added_0_ph42 * 20 | 0) + 4 + ($sub25 >>> 1 << 1) >> 1] = 0;
}
$inc40 = $new_added_0_ph42 + 1 | 0;
$inc42 = $j_034 + 1 | 0;
if (($inc42 | 0) > ($sub | 0)) {
$retval_0 = $inc40;
label = 3173;
break;
} else {
$j_0_ph41 = $inc42;
$new_added_0_ph42 = $inc40;
}
}
if ((label | 0) == 3171) {
return $retval_0 | 0;
} else if ((label | 0) == 3173) {
return $retval_0 | 0;
} else if ((label | 0) == 3174) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict24locate_first_in_predictsEPKti($this, $words, $lemma_len) {
$this = $this | 0;
$words = $words | 0;
$lemma_len = $lemma_len | 0;
var $sub = 0, $1 = 0, $begin_0_ph51 = 0, $end_0_ph50 = 0, $last_matched_0_ph49 = 0, $begin_046 = 0, $last_matched_045 = 0, $shr = 0, $2 = 0, $call = 0, $call2 = 0, $conv = 0, $cmp3 = 0, $conv_lemma_len = 0, $k_0 = 0, $3 = 0, $4 = 0, $last_matched_0_shr = 0, $last_matched_228 = 0, $add37 = 0, $last_matched_231 = 0, $sub41 = 0, $last_matched_0_lcssa = 0, label = 0;
$sub = (HEAP32[$this + 80 >> 2] | 0) - 1 | 0;
if (($sub | 0) < 0) {
$last_matched_0_lcssa = -1;
return $last_matched_0_lcssa | 0;
}
$1 = HEAP32[$this + 28 >> 2] | 0;
$last_matched_0_ph49 = -1;
$end_0_ph50 = $sub;
$begin_0_ph51 = 0;
L4047 : while (1) {
$last_matched_045 = $last_matched_0_ph49;
$begin_046 = $begin_0_ph51;
L4049 : while (1) {
$shr = $begin_046 + $end_0_ph50 >> 1;
$2 = HEAP32[$1 + ($shr << 2) >> 2] | 0;
$call = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $2) | 0;
$call2 = __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $2) | 0;
$conv = $call & 255;
$cmp3 = ($conv | 0) < ($lemma_len | 0);
$conv_lemma_len = $cmp3 ? $conv : $lemma_len;
$k_0 = 0;
while (1) {
if ($k_0 >>> 0 >= $conv_lemma_len >>> 0) {
label = 3182;
break;
}
$3 = HEAP16[$call2 + ($k_0 << 1) >> 1] | 0;
$4 = HEAP16[$words + ($k_0 << 1) >> 1] | 0;
if (($3 & 65535) < ($4 & 65535)) {
$last_matched_228 = $last_matched_045;
break;
}
if (($3 & 65535) > ($4 & 65535)) {
$last_matched_231 = $last_matched_045;
break L4049;
} else {
$k_0 = $k_0 + 1 | 0;
}
}
if ((label | 0) == 3182) {
label = 0;
$last_matched_0_shr = $cmp3 ? $last_matched_045 : $shr;
if ($cmp3) {
$last_matched_228 = $last_matched_0_shr;
} else {
$last_matched_231 = $last_matched_0_shr;
break;
}
}
$add37 = $shr + 1 | 0;
if (($add37 | 0) > ($end_0_ph50 | 0)) {
$last_matched_0_lcssa = $last_matched_228;
label = 3186;
break L4047;
} else {
$last_matched_045 = $last_matched_228;
$begin_046 = $add37;
}
}
$sub41 = $shr - 1 | 0;
if (($begin_046 | 0) > ($sub41 | 0)) {
$last_matched_0_lcssa = $last_matched_231;
label = 3188;
break;
} else {
$last_matched_0_ph49 = $last_matched_231;
$end_0_ph50 = $sub41;
$begin_0_ph51 = $begin_046;
}
}
if ((label | 0) == 3188) {
return $last_matched_0_lcssa | 0;
} else if ((label | 0) == 3186) {
return $last_matched_0_lcssa | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict17locate_in_offsetsEPtS1_t($this, $lemma_str, $splid_str, $lemma_len) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splid_str = $splid_str | 0;
$lemma_len = $lemma_len | 0;
var $searchable = 0, $start = 0, $count = 0, $0 = 0, $call = 0, $1 = 0, $call2 = 0, $off_0 = 0, $max_off_0 = 0, $offsets_ = 0, $conv19 = 0, $off_123 = 0, $4 = 0, $off_1_be = 0, $call9 = 0, $call18 = 0, $i_0 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 64 | 0;
$searchable = sp | 0;
$start = sp + 48 | 0;
$count = sp + 56 | 0;
$0 = HEAP32[$this + 80 >> 2] | 0;
__ZN10ime_pinyin8UserDict14prepare_locateEPNS0_18UserDictSearchableEPKtt(0, $searchable, $splid_str, $lemma_len);
$call = __ZN10ime_pinyin8UserDict10load_cacheEPNS0_18UserDictSearchableEPjS3_($this, $searchable, $start, $count) | 0;
if ($call) {
$1 = HEAP32[$start >> 2] | 0;
$max_off_0 = (HEAP32[$count >> 2] | 0) + $1 | 0;
$off_0 = $1;
} else {
$call2 = __ZN10ime_pinyin8UserDict23locate_first_in_offsetsEPKNS0_18UserDictSearchableE($this, $searchable) | 0;
HEAP32[$start >> 2] = $call2;
$max_off_0 = $0;
$off_0 = $call2;
}
if (!(($off_0 | 0) != -1 & ($off_0 | 0) < ($max_off_0 | 0))) {
$retval_0 = -1;
STACKTOP = sp;
return $retval_0 | 0;
}
$offsets_ = $this + 28 | 0;
$conv19 = $lemma_len & 65535;
$off_123 = $off_0;
L4070 : while (1) {
$4 = HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($off_123 << 2) >> 2] | 0;
do {
if (($4 | 0) >= 0) {
$call9 = __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $4) | 0;
if (!$call) {
if ((__ZN10ime_pinyin8UserDict22fuzzy_compare_spell_idEPKttPKNS0_18UserDictSearchableE(0, $call9, $lemma_len, $searchable) | 0) != 0) {
$retval_0 = -1;
label = 3204;
break L4070;
}
}
if (!(__ZN10ime_pinyin8UserDict14equal_spell_idEPKttPKNS0_18UserDictSearchableE(0, $call9, $lemma_len, $searchable) | 0)) {
break;
}
$call18 = __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $4) | 0;
$i_0 = 0;
while (1) {
if ($i_0 >>> 0 >= $conv19 >>> 0) {
$retval_0 = $off_123;
label = 3206;
break L4070;
}
if ((HEAP16[$call18 + ($i_0 << 1) >> 1] | 0) == (HEAP16[$lemma_str + ($i_0 << 1) >> 1] | 0)) {
$i_0 = $i_0 + 1 | 0;
} else {
break;
}
}
}
} while (0);
$off_1_be = $off_123 + 1 | 0;
if (($off_1_be | 0) < ($max_off_0 | 0)) {
$off_123 = $off_1_be;
} else {
$retval_0 = -1;
label = 3205;
break;
}
}
if ((label | 0) == 3204) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 3205) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 3206) {
STACKTOP = sp;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict34locate_where_to_insert_in_predictsEPKti($this, $words, $lemma_len) {
$this = $this | 0;
$words = $words | 0;
$lemma_len = $lemma_len | 0;
var $sub = 0, $1 = 0, $begin_0_ph50 = 0, $end_0_ph49 = 0, $last_matched_0_ph48 = 0, $begin_045 = 0, $last_matched_044 = 0, $shr = 0, $2 = 0, $call = 0, $call2 = 0, $conv = 0, $cmp3 = 0, $conv_lemma_len = 0, $k_0 = 0, $3 = 0, $4 = 0, $add33 = 0, $cmp5_130 = 0, $sub37 = 0, $last_matched_0_lcssa = 0, label = 0;
$sub = (HEAP32[$this + 80 >> 2] | 0) - 1 | 0;
if (($sub | 0) < 0) {
$last_matched_0_lcssa = $sub;
return $last_matched_0_lcssa | 0;
}
$1 = HEAP32[$this + 28 >> 2] | 0;
$last_matched_0_ph48 = $sub;
$end_0_ph49 = $sub;
$begin_0_ph50 = 0;
L4090 : while (1) {
$last_matched_044 = $last_matched_0_ph48;
$begin_045 = $begin_0_ph50;
L4092 : while (1) {
$shr = $begin_045 + $end_0_ph49 >> 1;
$2 = HEAP32[$1 + ($shr << 2) >> 2] | 0;
$call = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $2) | 0;
$call2 = __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $2) | 0;
$conv = $call & 255;
$cmp3 = ($conv | 0) < ($lemma_len | 0);
$conv_lemma_len = $cmp3 ? $conv : $lemma_len;
$k_0 = 0;
while (1) {
if ($k_0 >>> 0 >= $conv_lemma_len >>> 0) {
label = 3214;
break;
}
$3 = HEAP16[$call2 + ($k_0 << 1) >> 1] | 0;
$4 = HEAP16[$words + ($k_0 << 1) >> 1] | 0;
if (($3 & 65535) < ($4 & 65535)) {
break;
}
if (($3 & 65535) > ($4 & 65535)) {
$cmp5_130 = $last_matched_044;
break L4092;
} else {
$k_0 = $k_0 + 1 | 0;
}
}
if ((label | 0) == 3214) {
label = 0;
if (!$cmp3) {
label = 3215;
break;
}
}
$add33 = $shr + 1 | 0;
if (($add33 | 0) > ($end_0_ph49 | 0)) {
$last_matched_0_lcssa = $shr;
label = 3219;
break L4090;
} else {
$last_matched_044 = $shr;
$begin_045 = $add33;
}
}
if ((label | 0) == 3215) {
label = 0;
$cmp5_130 = ($conv | 0) > ($lemma_len | 0) ? $last_matched_044 : $shr;
}
$sub37 = $shr - 1 | 0;
if (($begin_045 | 0) > ($sub37 | 0)) {
$last_matched_0_lcssa = $cmp5_130;
label = 3220;
break;
} else {
$last_matched_0_ph48 = $cmp5_130;
$end_0_ph49 = $sub37;
$begin_0_ph50 = $begin_045;
}
}
if ((label | 0) == 3219) {
return $last_matched_0_lcssa | 0;
} else if ((label | 0) == 3220) {
return $last_matched_0_lcssa | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict12get_lemma_idEPtS1_t($this, $lemma_str, $splids, $lemma_len) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
var $call = 0, $retval_0 = 0;
$call = __ZN10ime_pinyin8UserDict17locate_in_offsetsEPtS1_t($this, $lemma_str, $splids, $lemma_len) | 0;
if (($call | 0) == -1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = HEAP32[(HEAP32[$this + 36 >> 2] | 0) + ($call << 2) >> 2] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict15get_lemma_scoreEj($this, $lemma_id) {
$this = $this | 0;
$lemma_id = $lemma_id | 0;
var $retval_0 = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin8UserDict17is_valid_lemma_idEj($this, $lemma_id) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin8UserDict15translate_scoreEi($this, __ZN10ime_pinyin8UserDict16_get_lemma_scoreEj($this, $lemma_id) | 0) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict16_get_lemma_scoreEj($this, $lemma_id) {
$this = $this | 0;
$lemma_id = $lemma_id | 0;
var $2 = 0, $call7 = 0, $call9 = 0, $call12 = 0, $retval_0 = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin8UserDict17is_valid_lemma_idEj($this, $lemma_id) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$2 = HEAP32[(HEAP32[$this + 52 >> 2] | 0) + ($lemma_id - (HEAP32[$this + 16 >> 2] | 0) << 2) >> 2] | 0;
$call7 = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $2) | 0;
$call9 = __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $2) | 0;
$call12 = __ZN10ime_pinyin8UserDict17locate_in_offsetsEPtS1_t($this, __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $2) | 0, $call9, $call7 << 24 >> 24) | 0;
if (($call12 | 0) == -1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = HEAP32[(HEAP32[$this + 32 >> 2] | 0) + ($call12 << 2) >> 2] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict15get_lemma_scoreEPtS1_t($this, $lemma_str, $splids, $lemma_len) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
var $retval_0 = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZN10ime_pinyin8UserDict15translate_scoreEi($this, __ZN10ime_pinyin8UserDict16_get_lemma_scoreEPtS1_t($this, $lemma_str, $splids, $lemma_len) | 0) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict16_get_lemma_scoreEPtS1_t($this, $lemma_str, $splids, $lemma_len) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
var $call2 = 0, $retval_0 = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call2 = __ZN10ime_pinyin8UserDict17locate_in_offsetsEPtS1_t($this, $lemma_str, $splids, $lemma_len) | 0;
if (($call2 | 0) == -1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = HEAP32[(HEAP32[$this + 32 >> 2] | 0) + ($call2 << 2) >> 2] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict28remove_lemma_by_offset_indexEi($this, $offset_index) {
$this = $this | 0;
$offset_index = $offset_index | 0;
var $arrayidx = 0, $1 = 0, $conv6 = 0, $free_count = 0, $free_size = 0, $state_ = 0, $retval_0 = 0;
if (($offset_index | 0) == -1 | (__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0) ^ 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$arrayidx = (HEAP32[$this + 28 >> 2] | 0) + ($offset_index << 2) | 0;
$1 = HEAP32[$arrayidx >> 2] | 0;
$conv6 = (__ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $1) | 0) << 24 >> 24;
HEAP32[$arrayidx >> 2] = $1 | -2147483648;
__ZN10ime_pinyin8UserDict27remove_lemma_from_sync_listEj($this, $1);
__ZN10ime_pinyin8UserDict30remove_lemma_from_predict_listEj($this, $1);
$free_count = $this + 88 | 0;
HEAP32[$free_count >> 2] = (HEAP32[$free_count >> 2] | 0) + 1;
$free_size = $this + 92 | 0;
HEAP32[$free_size >> 2] = (HEAP32[$free_size >> 2] | 0) + ($conv6 << 2 | 2);
$state_ = $this + 104 | 0;
if ((HEAP32[$state_ >> 2] | 0) >= 4) {
$retval_0 = 1;
return $retval_0 | 0;
}
HEAP32[$state_ >> 2] = 4;
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict12remove_lemmaEj($this, $lemma_id) {
$this = $this | 0;
$lemma_id = $lemma_id | 0;
var $2 = 0, $call7 = 0, $call9 = 0, $retval_0 = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin8UserDict17is_valid_lemma_idEj($this, $lemma_id) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$2 = HEAP32[(HEAP32[$this + 52 >> 2] | 0) + ($lemma_id - (HEAP32[$this + 16 >> 2] | 0) << 2) >> 2] | 0;
$call7 = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $2) | 0;
$call9 = __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $2) | 0;
$retval_0 = __ZN10ime_pinyin8UserDict28remove_lemma_by_offset_indexEi($this, __ZN10ime_pinyin8UserDict17locate_in_offsetsEPtS1_t($this, __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $2) | 0, $call9, $call7 << 24 >> 24) | 0) | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict11flush_cacheEv($this) {
$this = $this | 0;
var $0 = 0, $call = 0;
$0 = HEAP32[$this + 16 >> 2] | 0;
$call = _strdup(HEAP32[$this + 64 >> 2] | 0) | 0;
if (($call | 0) == 0) {
return;
}
FUNCTION_TABLE_ii[HEAP32[(HEAP32[$this >> 2] | 0) + 12 >> 2] & 31]($this) | 0;
FUNCTION_TABLE_iiiii[HEAP32[(HEAP32[$this >> 2] | 0) + 8 >> 2] & 31]($this, $call, $0, 6e5) | 0;
_free($call);
__ZN10ime_pinyin8UserDict10cache_initEv($this);
return;
}
function __ZN10ime_pinyin8UserDict14write_back_allEi($this, $fd) {
$this = $this | 0;
$fd = $fd | 0;
var $lemma_count = 0;
if ((_lseek($fd | 0, 4, 0) | 0) == -1) {
return;
}
_write($fd | 0, HEAP32[$this + 24 >> 2] | 0, HEAP32[$this + 84 >> 2] | 0) | 0;
$lemma_count = $this + 80 | 0;
_write($fd | 0, HEAP32[$this + 28 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 40 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 32 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 44 >> 2] | 0, HEAP32[$this + 96 >> 2] << 2 | 0) | 0;
_write($fd | 0, $this + 68 | 0, 36) | 0;
return;
}
function __ZN10ime_pinyin8UserDict16write_back_lemmaEi($this, $fd) {
$this = $this | 0;
$fd = $fd | 0;
var $sub = 0, $lemma_size = 0, $lemma_count = 0;
if ((_lseek($fd | 0, 4, 0) | 0) == -1) {
return;
}
$sub = 1088 - (HEAP32[$this + 60 >> 2] | 0) | 0;
$lemma_size = $this + 84 | 0;
if ((_lseek($fd | 0, (HEAP32[$lemma_size >> 2] | 0) - $sub | 0, 1) | 0) == -1) {
return;
}
_write($fd | 0, (HEAP32[$this + 24 >> 2] | 0) + ((HEAP32[$lemma_size >> 2] | 0) - $sub) | 0, $sub | 0) | 0;
$lemma_count = $this + 80 | 0;
_write($fd | 0, HEAP32[$this + 28 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 40 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 32 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 44 >> 2] | 0, HEAP32[$this + 96 >> 2] << 2 | 0) | 0;
_write($fd | 0, $this + 68 | 0, 36) | 0;
return;
}
function __ZN10ime_pinyin8UserDict10save_cacheEPNS0_18UserDictSearchableEjj($this, $searchable, $offset, $length) {
$this = $this | 0;
$searchable = $searchable | 0;
$offset = $offset | 0;
$length = $length | 0;
var $sub = 0, $tail = 0, $1 = 0, $idxprom = 0, $inc13 = 0, $sub17_inc13 = 0, $head = 0, $4 = 0, $inc24 = 0;
$sub = (HEAPU16[$searchable >> 1] | 0) - 1 | 0;
$tail = $this + 588 + ($sub * 68 | 0) + 66 | 0;
$1 = HEAP16[$tail >> 1] | 0;
$idxprom = $1 & 65535;
HEAP32[$this + 588 + ($sub * 68 | 0) + 32 + ($idxprom << 2) >> 2] = $offset;
HEAP32[$this + 588 + ($sub * 68 | 0) + 48 + ($idxprom << 2) >> 2] = $length;
HEAP32[$this + 588 + ($sub * 68 | 0) + ($idxprom << 3) >> 2] = HEAP32[$searchable + 36 >> 2];
HEAP32[$this + 588 + ($sub * 68 | 0) + ($idxprom << 3) + 4 >> 2] = HEAP32[$searchable + 40 >> 2];
$inc13 = $1 + 1 & 65535;
$sub17_inc13 = ($inc13 & 65535) > 3 ? $1 - 3 & 65535 : $inc13;
$head = $this + 588 + ($sub * 68 | 0) + 64 | 0;
$4 = HEAP16[$head >> 1] | 0;
if ($sub17_inc13 << 16 >> 16 != $4 << 16 >> 16) {
HEAP16[$tail >> 1] = $sub17_inc13;
return;
}
$inc24 = $4 + 1 & 65535;
HEAP16[$head >> 1] = $inc24;
if (($inc24 & 65535) <= 3) {
HEAP16[$tail >> 1] = $sub17_inc13;
return;
}
HEAP16[$head >> 1] = $4 - 3 & 65535;
HEAP16[$tail >> 1] = $sub17_inc13;
return;
}
function __ZN10ime_pinyin8UserDict15load_miss_cacheEPNS0_18UserDictSearchableE($this, $searchable) {
$this = $this | 0;
$searchable = $searchable | 0;
var $sub = 0, $1 = 0, $tail = 0, $i_0 = 0, $idxprom8 = 0, $j_0 = 0, $conv5 = 0, $inc20 = 0, $sub25_inc20 = 0, $retval_0 = 0, label = 0;
$sub = (HEAPU16[$searchable >> 1] | 0) - 1 | 0;
$1 = HEAP16[$this + 108 + ($sub * 60 | 0) + 56 >> 1] | 0;
$tail = $this + 108 + ($sub * 60 | 0) + 58 | 0;
if ($1 << 16 >> 16 == (HEAP16[$tail >> 1] | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
} else {
$i_0 = $1;
}
L4189 : while (1) {
$idxprom8 = $i_0 & 65535;
$j_0 = 0;
while (1) {
$conv5 = $j_0 & 65535;
if (($j_0 & 65535) >= 2) {
$retval_0 = 1;
label = 3300;
break L4189;
}
if ((HEAP32[$this + 108 + ($sub * 60 | 0) + ($idxprom8 << 3) + ($conv5 << 2) >> 2] | 0) == (HEAP32[$searchable + 36 + ($conv5 << 2) >> 2] | 0)) {
$j_0 = $j_0 + 1 & 65535;
} else {
break;
}
}
$inc20 = $i_0 + 1 & 65535;
$sub25_inc20 = ($inc20 & 65535) > 6 ? $i_0 - 6 & 65535 : $inc20;
if ($sub25_inc20 << 16 >> 16 == (HEAP16[$tail >> 1] | 0)) {
$retval_0 = 0;
label = 3299;
break;
} else {
$i_0 = $sub25_inc20;
}
}
if ((label | 0) == 3300) {
return $retval_0 | 0;
} else if ((label | 0) == 3299) {
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict15save_miss_cacheEPNS0_18UserDictSearchableE($this, $searchable) {
$this = $this | 0;
$searchable = $searchable | 0;
var $sub = 0, $tail = 0, $1 = 0, $idxprom6 = 0, $inc9 = 0, $sub13_inc9 = 0, $head = 0, $4 = 0, $inc20 = 0;
$sub = (HEAPU16[$searchable >> 1] | 0) - 1 | 0;
$tail = $this + 108 + ($sub * 60 | 0) + 58 | 0;
$1 = HEAP16[$tail >> 1] | 0;
$idxprom6 = $1 & 65535;
HEAP32[$this + 108 + ($sub * 60 | 0) + ($idxprom6 << 3) >> 2] = HEAP32[$searchable + 36 >> 2];
HEAP32[$this + 108 + ($sub * 60 | 0) + ($idxprom6 << 3) + 4 >> 2] = HEAP32[$searchable + 40 >> 2];
$inc9 = $1 + 1 & 65535;
$sub13_inc9 = ($inc9 & 65535) > 6 ? $1 - 6 & 65535 : $inc9;
$head = $this + 108 + ($sub * 60 | 0) + 56 | 0;
$4 = HEAP16[$head >> 1] | 0;
if ($sub13_inc9 << 16 >> 16 != $4 << 16 >> 16) {
HEAP16[$tail >> 1] = $sub13_inc9;
return;
}
$inc20 = $4 + 1 & 65535;
HEAP16[$head >> 1] = $inc20;
if (($inc20 & 65535) <= 6) {
HEAP16[$tail >> 1] = $sub13_inc9;
return;
}
HEAP16[$head >> 1] = $4 - 6 & 65535;
HEAP16[$tail >> 1] = $sub13_inc9;
return;
}
function __ZN10ime_pinyin8UserDict14set_lemma_flagEjh($this, $offset, $flag) {
$this = $this | 0;
$offset = $offset | 0;
$flag = $flag | 0;
var $arrayidx = 0;
$arrayidx = (HEAP32[$this + 24 >> 2] | 0) + ($offset & 2147483647) | 0;
HEAP8[$arrayidx] = HEAP8[$arrayidx] | $flag;
return;
}
function __ZN10ime_pinyin8UserDict14get_lemma_flagEj($this, $offset) {
$this = $this | 0;
$offset = $offset | 0;
return HEAP8[(HEAP32[$this + 24 >> 2] | 0) + ($offset & 2147483647) | 0] | 0;
}
function __ZN10ime_pinyin8UserDict17write_back_offsetEi($this, $fd) {
$this = $this | 0;
$fd = $fd | 0;
var $lemma_count = 0;
if ((_lseek($fd | 0, (HEAP32[$this + 84 >> 2] | 0) + 4 | 0, 0) | 0) == -1) {
return;
}
$lemma_count = $this + 80 | 0;
_write($fd | 0, HEAP32[$this + 28 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 40 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 32 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 44 >> 2] | 0, HEAP32[$this + 96 >> 2] << 2 | 0) | 0;
_write($fd | 0, $this + 68 | 0, 36) | 0;
return;
}
function __ZN10ime_pinyin8UserDict16write_back_scoreEi($this, $fd) {
$this = $this | 0;
$fd = $fd | 0;
var $lemma_count = 0;
$lemma_count = $this + 80 | 0;
if ((_lseek($fd | 0, (HEAP32[$this + 84 >> 2] | 0) + 4 + (HEAP32[$lemma_count >> 2] << 3) | 0, 0) | 0) == -1) {
return;
}
_write($fd | 0, HEAP32[$this + 32 >> 2] | 0, HEAP32[$lemma_count >> 2] << 2 | 0) | 0;
_write($fd | 0, HEAP32[$this + 44 >> 2] | 0, HEAP32[$this + 96 >> 2] << 2 | 0) | 0;
_write($fd | 0, $this + 68 | 0, 36) | 0;
return;
}
function __ZN10ime_pinyin8UserDict15write_back_syncEi($this, $fd) {
$this = $this | 0;
$fd = $fd | 0;
if ((_lseek($fd | 0, (HEAP32[$this + 84 >> 2] | 0) + 4 + ((HEAP32[$this + 80 >> 2] | 0) * 12 | 0) | 0, 0) | 0) == -1) {
return;
}
_write($fd | 0, HEAP32[$this + 44 >> 2] | 0, HEAP32[$this + 96 >> 2] << 2 | 0) | 0;
_write($fd | 0, $this + 68 | 0, 36) | 0;
return;
}
function __ZN10ime_pinyin8UserDict11reset_cacheEv($this) {
$this = $this | 0;
_memset($this + 588 | 0, 0, 544);
return;
}
function __ZN10ime_pinyin8UserDict16reset_miss_cacheEv($this) {
$this = $this | 0;
_memset($this + 108 | 0, 0, 480);
return;
}
function __ZN10ime_pinyin8UserDict10defragmentEv($this) {
$this = $this | 0;
var $lemma_count = 0, $offsets_ = 0, $scores_ = 0, $ids_ = 0, $first_freed_0142 = 0, $1 = 0, $2 = 0, $predicts_ = 0, $first_freed_1 = 0, $5 = 0, $add = 0, $9 = 0, $10 = 0, $first_inuse_0136 = 0, $inc29 = 0, $13 = 0, $first_inuse_0_lcssa = 0, $14 = 0, $15 = 0, $arrayidx37 = 0, $16 = 0, $19 = 0, $arrayidx44 = 0, $20 = 0, $23 = 0, $arrayidx52 = 0, $24 = 0, $27 = 0, $first_freed_2132 = 0, $28 = 0, $first_freed_3 = 0, $add83 = 0, $32 = 0, $first_inuse_1 = 0, $36 = 0, $arrayidx105 = 0, $37 = 0, $first_freed_4 = 0, $lemma_size = 0, $41 = 0, $lemma_size_left_ = 0, $add121 = 0, $lemma_count_left_ = 0, $add125 = 0, $dst_0130 = 0, $lemmas_ = 0, $sync_count = 0, $syncs_ = 0, $offsets_201 = 0, $ids_214 = 0, $start_id_ = 0, $offsets_by_id_ = 0, $predicts_219 = 0, $add141 = 0, $end_0126 = 0, $dst_1125 = 0, $add154 = 0, $add154_pn = 0, $call160 = 0, $mul174 = 0, $add171 = 0, $add176 = 0, $end_1114 = 0, $add191 = 0, $end_1_lcssa = 0, $44 = 0, $sub196 = 0, $sub20898 = 0, $sub22797 = 0, $j_0116 = 0, $arrayidx202 = 0, $47 = 0, $arrayidx220 = 0, $55 = 0, $sub24696 = 0, $j234_0118 = 0, $arrayidx239 = 0, $59 = 0, $add255 = 0, $dst_1122 = 0, $start_id_275 = 0, $ids_277 = 0, $offsets_279 = 0, $offsets_by_id_281 = 0, $i_0106 = 0, label = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
return;
}
$lemma_count = $this + 80 | 0;
L4229 : do {
if ((HEAP32[$lemma_count >> 2] | 0) == 0) {
$first_freed_4 = 0;
} else {
$offsets_ = $this + 28 | 0;
$scores_ = $this + 32 | 0;
$ids_ = $this + 36 | 0;
$first_freed_0142 = 0;
while (1) {
$1 = HEAP32[$offsets_ >> 2] | 0;
$first_freed_1 = $first_freed_0142;
while (1) {
if ((HEAP32[$1 + ($first_freed_1 << 2) >> 2] | 0) <= -1) {
break;
}
if ($first_freed_1 >>> 0 < (HEAP32[$lemma_count >> 2] | 0) >>> 0) {
$first_freed_1 = $first_freed_1 + 1 | 0;
} else {
break;
}
}
$5 = HEAP32[$lemma_count >> 2] | 0;
if ($first_freed_1 >>> 0 >= $5 >>> 0) {
$2 = $5;
break;
}
__ZN10ime_pinyin8UserDict14set_lemma_flagEjh($this, HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($first_freed_1 << 2) >> 2] | 0, 1);
$add = $first_freed_1 + 1 | 0;
$9 = HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($add << 2) >> 2] | 0;
L4238 : do {
if (($9 | 0) < 0) {
$first_inuse_0136 = $add;
$10 = $9;
while (1) {
if ($first_inuse_0136 >>> 0 >= (HEAP32[$lemma_count >> 2] | 0) >>> 0) {
$first_inuse_0_lcssa = $first_inuse_0136;
break L4238;
}
__ZN10ime_pinyin8UserDict14set_lemma_flagEjh($this, $10, 1);
$inc29 = $first_inuse_0136 + 1 | 0;
$13 = HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($inc29 << 2) >> 2] | 0;
if (($13 | 0) < 0) {
$first_inuse_0136 = $inc29;
$10 = $13;
} else {
$first_inuse_0_lcssa = $inc29;
break;
}
}
} else {
$first_inuse_0_lcssa = $add;
}
} while (0);
$14 = HEAP32[$lemma_count >> 2] | 0;
if ($first_inuse_0_lcssa >>> 0 >= $14 >>> 0) {
$2 = $14;
break;
}
$15 = HEAP32[$offsets_ >> 2] | 0;
$arrayidx37 = $15 + ($first_inuse_0_lcssa << 2) | 0;
$16 = HEAP32[$arrayidx37 >> 2] | 0;
HEAP32[$arrayidx37 >> 2] = HEAP32[$15 + ($first_freed_1 << 2) >> 2];
HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($first_freed_1 << 2) >> 2] = $16;
$19 = HEAP32[$scores_ >> 2] | 0;
$arrayidx44 = $19 + ($first_inuse_0_lcssa << 2) | 0;
$20 = HEAP32[$arrayidx44 >> 2] | 0;
HEAP32[$arrayidx44 >> 2] = HEAP32[$19 + ($first_freed_1 << 2) >> 2];
HEAP32[(HEAP32[$scores_ >> 2] | 0) + ($first_freed_1 << 2) >> 2] = $20;
$23 = HEAP32[$ids_ >> 2] | 0;
$arrayidx52 = $23 + ($first_inuse_0_lcssa << 2) | 0;
$24 = HEAP32[$arrayidx52 >> 2] | 0;
HEAP32[$arrayidx52 >> 2] = HEAP32[$23 + ($first_freed_1 << 2) >> 2];
HEAP32[(HEAP32[$ids_ >> 2] | 0) + ($first_freed_1 << 2) >> 2] = $24;
$27 = HEAP32[$lemma_count >> 2] | 0;
if ($add >>> 0 < $27 >>> 0) {
$first_freed_0142 = $add;
} else {
$2 = $27;
break;
}
}
if (($2 | 0) == 0) {
$first_freed_4 = 0;
break;
}
$predicts_ = $this + 40 | 0;
$first_freed_2132 = 0;
while (1) {
$28 = HEAP32[$predicts_ >> 2] | 0;
$first_freed_3 = $first_freed_2132;
while (1) {
if ((HEAP32[$28 + ($first_freed_3 << 2) >> 2] | 0) <= -1) {
break;
}
if ($first_freed_3 >>> 0 < (HEAP32[$lemma_count >> 2] | 0) >>> 0) {
$first_freed_3 = $first_freed_3 + 1 | 0;
} else {
break;
}
}
if ($first_freed_3 >>> 0 >= (HEAP32[$lemma_count >> 2] | 0) >>> 0) {
$first_freed_4 = $first_freed_3;
break L4229;
}
$add83 = $first_freed_3 + 1 | 0;
$32 = HEAP32[$predicts_ >> 2] | 0;
$first_inuse_1 = $add83;
while (1) {
if ((HEAP32[$32 + ($first_inuse_1 << 2) >> 2] | 0) >= 0) {
break;
}
if ($first_inuse_1 >>> 0 < (HEAP32[$lemma_count >> 2] | 0) >>> 0) {
$first_inuse_1 = $first_inuse_1 + 1 | 0;
} else {
break;
}
}
if ($first_inuse_1 >>> 0 >= (HEAP32[$lemma_count >> 2] | 0) >>> 0) {
$first_freed_4 = $first_freed_3;
break L4229;
}
$36 = HEAP32[$predicts_ >> 2] | 0;
$arrayidx105 = $36 + ($first_inuse_1 << 2) | 0;
$37 = HEAP32[$arrayidx105 >> 2] | 0;
HEAP32[$arrayidx105 >> 2] = HEAP32[$36 + ($first_freed_3 << 2) >> 2];
HEAP32[(HEAP32[$predicts_ >> 2] | 0) + ($first_freed_3 << 2) >> 2] = $37;
if ($add83 >>> 0 < (HEAP32[$lemma_count >> 2] | 0) >>> 0) {
$first_freed_2132 = $add83;
} else {
$first_freed_4 = $add83;
break;
}
}
}
} while (0);
HEAP32[$lemma_count >> 2] = $first_freed_4;
$lemma_size = $this + 84 | 0;
$41 = HEAP32[$lemma_size >> 2] | 0;
$lemma_size_left_ = $this + 60 | 0;
$add121 = (HEAP32[$lemma_size_left_ >> 2] | 0) + $41 | 0;
$lemma_count_left_ = $this + 56 | 0;
$add125 = (HEAP32[$lemma_count_left_ >> 2] | 0) + $first_freed_4 | 0;
if (($41 | 0) == 0) {
return;
} else {
$dst_0130 = 0;
}
while (1) {
if (((__ZN10ime_pinyin8UserDict14get_lemma_flagEj($this, $dst_0130) | 0) & 1) != 0) {
break;
}
$add141 = (((__ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $dst_0130) | 0) & 255) << 2 | 2) + $dst_0130 | 0;
if ($add141 >>> 0 < $41 >>> 0) {
$dst_0130 = $add141;
} else {
label = 3380;
break;
}
}
if ((label | 0) == 3380) {
return;
}
L4267 : do {
if ($dst_0130 >>> 0 < $41 >>> 0) {
$lemmas_ = $this + 24 | 0;
$sync_count = $this + 96 | 0;
$syncs_ = $this + 44 | 0;
$offsets_201 = $this + 28 | 0;
$ids_214 = $this + 36 | 0;
$start_id_ = $this + 16 | 0;
$offsets_by_id_ = $this + 52 | 0;
$predicts_219 = $this + 40 | 0;
$dst_1125 = $dst_0130;
$end_0126 = $dst_0130;
while (1) {
$add154 = $end_0126 + 2 + ((__ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $end_0126) | 0) << 24 >> 24 << 2) | 0;
if ($add154 >>> 0 < $41 >>> 0) {
$add154_pn = $add154;
} else {
$dst_1122 = $dst_1125;
break L4267;
}
while (1) {
$call160 = __ZN10ime_pinyin8UserDict14get_lemma_flagEj($this, $add154_pn) | 0;
$mul174 = ((__ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $add154_pn) | 0) & 255) << 2;
if (($call160 & 1) == 0) {
break;
}
$add171 = ($mul174 | 2) + $add154_pn | 0;
if ($add171 >>> 0 < $41 >>> 0) {
$add154_pn = $add171;
} else {
$dst_1122 = $dst_1125;
break L4267;
}
}
$add176 = $add154_pn + 2 + $mul174 | 0;
L4275 : do {
if ($add176 >>> 0 < $41 >>> 0) {
$end_1114 = $add176;
while (1) {
if (((__ZN10ime_pinyin8UserDict14get_lemma_flagEj($this, $end_1114) | 0) & 1) != 0) {
$end_1_lcssa = $end_1114;
break L4275;
}
$add191 = (((__ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $end_1114) | 0) & 255) << 2 | 2) + $end_1114 | 0;
if ($add191 >>> 0 < $41 >>> 0) {
$end_1114 = $add191;
} else {
$end_1_lcssa = $add191;
break;
}
}
} else {
$end_1_lcssa = $add176;
}
} while (0);
$44 = HEAP32[$lemmas_ >> 2] | 0;
$sub196 = $end_1_lcssa - $add154_pn | 0;
_memmove($44 + $dst_1125 | 0, $44 + $add154_pn | 0, $sub196 | 0);
if ((HEAP32[$lemma_count >> 2] | 0) != 0) {
$sub20898 = $dst_1125 - $add154_pn | 0;
$sub22797 = $dst_1125 - $add154_pn | 0;
$j_0116 = 0;
do {
$arrayidx202 = (HEAP32[$offsets_201 >> 2] | 0) + ($j_0116 << 2) | 0;
$47 = HEAP32[$arrayidx202 >> 2] | 0;
if ($47 >>> 0 >= $add154_pn >>> 0 & $47 >>> 0 < $end_1_lcssa >>> 0) {
HEAP32[$arrayidx202 >> 2] = $sub20898 + $47;
HEAP32[(HEAP32[$offsets_by_id_ >> 2] | 0) + ((HEAP32[(HEAP32[$ids_214 >> 2] | 0) + ($j_0116 << 2) >> 2] | 0) - (HEAP32[$start_id_ >> 2] | 0) << 2) >> 2] = HEAP32[(HEAP32[$offsets_201 >> 2] | 0) + ($j_0116 << 2) >> 2];
}
$arrayidx220 = (HEAP32[$predicts_219 >> 2] | 0) + ($j_0116 << 2) | 0;
$55 = HEAP32[$arrayidx220 >> 2] | 0;
if ($55 >>> 0 >= $add154_pn >>> 0 & $55 >>> 0 < $end_1_lcssa >>> 0) {
HEAP32[$arrayidx220 >> 2] = $sub22797 + $55;
}
$j_0116 = $j_0116 + 1 | 0;
} while ($j_0116 >>> 0 < (HEAP32[$lemma_count >> 2] | 0) >>> 0);
}
if ((HEAP32[$sync_count >> 2] | 0) != 0) {
$sub24696 = $dst_1125 - $add154_pn | 0;
$j234_0118 = 0;
do {
$arrayidx239 = (HEAP32[$syncs_ >> 2] | 0) + ($j234_0118 << 2) | 0;
$59 = HEAP32[$arrayidx239 >> 2] | 0;
if ($59 >>> 0 >= $add154_pn >>> 0 & $59 >>> 0 < $end_1_lcssa >>> 0) {
HEAP32[$arrayidx239 >> 2] = $sub24696 + $59;
}
$j234_0118 = $j234_0118 + 1 | 0;
} while ($j234_0118 >>> 0 < (HEAP32[$sync_count >> 2] | 0) >>> 0);
}
$add255 = $sub196 + $dst_1125 | 0;
if ($end_1_lcssa >>> 0 < $41 >>> 0) {
$dst_1125 = $add255;
$end_0126 = $end_1_lcssa;
} else {
$dst_1122 = $add255;
break;
}
}
} else {
$dst_1122 = $dst_0130;
}
} while (0);
HEAP32[$this + 88 >> 2] = 0;
HEAP32[$this + 92 >> 2] = 0;
HEAP32[$lemma_size >> 2] = $dst_1122;
HEAP32[$lemma_size_left_ >> 2] = $add121 - $dst_1122;
HEAP32[$lemma_count_left_ >> 2] = $add125 - (HEAP32[$lemma_count >> 2] | 0);
if ((HEAP32[$lemma_count >> 2] | 0) != 0) {
$start_id_275 = $this + 16 | 0;
$ids_277 = $this + 36 | 0;
$offsets_279 = $this + 28 | 0;
$offsets_by_id_281 = $this + 52 | 0;
$i_0106 = 0;
do {
HEAP32[(HEAP32[$ids_277 >> 2] | 0) + ($i_0106 << 2) >> 2] = (HEAP32[$start_id_275 >> 2] | 0) + $i_0106;
HEAP32[(HEAP32[$offsets_by_id_281 >> 2] | 0) + ($i_0106 << 2) >> 2] = HEAP32[(HEAP32[$offsets_279 >> 2] | 0) + ($i_0106 << 2) >> 2];
$i_0106 = $i_0106 + 1 | 0;
} while ($i_0106 >>> 0 < (HEAP32[$lemma_count >> 2] | 0) >>> 0);
}
HEAP32[$this + 104 >> 2] = 6;
return;
}
function __ZN10ime_pinyin8UserDict17clear_sync_lemmasEjj($this, $start, $end) {
$this = $this | 0;
$start = $start | 0;
$end = $end | 0;
var $sync_count = 0, $0 = 0, $_end = 0, $1 = 0, $state_ = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
return;
}
$sync_count = $this + 96 | 0;
$0 = HEAP32[$sync_count >> 2] | 0;
$_end = $0 >>> 0 < $end >>> 0 ? $0 : $end;
$1 = HEAP32[$this + 44 >> 2] | 0;
_memmove($1 + ($start << 2) | 0, $1 + ($_end << 2) | 0, $0 - $_end << 2 | 0);
HEAP32[$sync_count >> 2] = $start - $_end + (HEAP32[$sync_count >> 2] | 0);
$state_ = $this + 104 | 0;
if ((HEAP32[$state_ >> 2] | 0) >= 2) {
return;
}
HEAP32[$state_ >> 2] = 2;
return;
}
function __ZN10ime_pinyin8UserDict14get_sync_countEv($this) {
$this = $this | 0;
var $retval_0 = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = HEAP32[$this + 96 >> 2] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict17put_lemma_no_syncEPtS1_tty($this, $lemma_str, $splids, $lemma_len, $count, $lmt$0, $lmt$1) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
$count = $count | 0;
$lmt$0 = $lmt$0 | 0;
$lmt$1 = $lmt$1 | 0;
var $lemma_size = 0, $syncs_ = 0, $0 = 0, $call4 = 0, $limit_lemma_size = 0, $add3 = 0, $1 = 0, $2 = 0, $4 = 0, $7 = 0, $call = 0, $call_lcssa = 0, label = 0;
$lemma_size = $this + 84 | 0;
$syncs_ = $this + 44 | 0;
$0 = HEAP32[$syncs_ >> 2] | 0;
HEAP32[$syncs_ >> 2] = 0;
$call4 = __ZN10ime_pinyin8UserDict10_put_lemmaEPtS1_tty($this, $lemma_str, $splids, $lemma_len, $count, $lmt$0, $lmt$1) | 0;
HEAP32[$syncs_ >> 2] = $0;
if (($call4 | 0) != 0) {
$call_lcssa = $call4;
return $call_lcssa | 0;
}
$limit_lemma_size = $this + 76 | 0;
$add3 = ($lemma_len & 65535) << 2 | 2;
$1 = $this;
$2 = HEAP32[$this + 72 >> 2] | 0;
if (($2 | 0) == 0) {
label = 3399;
} else {
if ((HEAP32[$this + 80 >> 2] | 0) >>> 0 < $2 >>> 0) {
label = 3399;
}
}
do {
if ((label | 0) == 3399) {
$4 = HEAP32[$limit_lemma_size >> 2] | 0;
if (($4 | 0) == 0) {
$call_lcssa = $call4;
return $call_lcssa | 0;
}
if (((HEAP32[$lemma_size >> 2] | 0) + $add3 | 0) >>> 0 > $4 >>> 0) {
break;
} else {
$call_lcssa = $call4;
}
return $call_lcssa | 0;
}
} while (0);
__ZN10ime_pinyin8UserDict7reclaimEv($this);
__ZN10ime_pinyin8UserDict10defragmentEv($this);
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$1 >> 2] | 0) + 76 >> 2] & 127]($this);
$7 = HEAP32[$syncs_ >> 2] | 0;
HEAP32[$syncs_ >> 2] = 0;
$call = __ZN10ime_pinyin8UserDict10_put_lemmaEPtS1_tty($this, $lemma_str, $splids, $lemma_len, $count, $lmt$0, $lmt$1) | 0;
HEAP32[$syncs_ >> 2] = $7;
$call_lcssa = $call;
return $call_lcssa | 0;
}
function __ZN10ime_pinyin8UserDict10_put_lemmaEPtS1_tty($this, $lemma_str, $splids, $lemma_len, $count, $lmt$0, $lmt$1) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
$count = $count | 0;
$lmt$0 = $lmt$0 | 0;
$lmt$1 = $lmt$1 | 0;
var $call2 = 0, $conv5 = 0, $scores_ = 0, $total_nfreq = 0, $call7 = 0, $state_ = 0, $7 = 0, $9 = 0, $call41 = 0, $retval_0 = 0, label = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call2 = __ZN10ime_pinyin8UserDict17locate_in_offsetsEPtS1_t($this, $lemma_str, $splids, $lemma_len) | 0;
if (($call2 | 0) != -1) {
$conv5 = $count & 65535;
$scores_ = $this + 32 | 0;
$total_nfreq = $this + 100 | 0;
HEAP32[$total_nfreq >> 2] = $conv5 - (HEAP32[(HEAP32[$scores_ >> 2] | 0) + ($call2 << 2) >> 2] | 0) + (HEAP32[$total_nfreq >> 2] | 0);
$call7 = __ZN10ime_pinyin8UserDict11build_scoreEyi(0, $lmt$0, $lmt$1, $conv5) | 0;
HEAP32[(HEAP32[$scores_ >> 2] | 0) + ($call2 << 2) >> 2] = $call7;
$state_ = $this + 104 | 0;
if ((HEAP32[$state_ >> 2] | 0) < 3) {
HEAP32[$state_ >> 2] = 3;
}
$retval_0 = HEAP32[(HEAP32[$this + 36 >> 2] | 0) + ($call2 << 2) >> 2] | 0;
return $retval_0 | 0;
}
$7 = HEAP32[$this + 72 >> 2] | 0;
do {
if (($7 | 0) != 0) {
if ((HEAP32[$this + 80 >> 2] | 0) >>> 0 < $7 >>> 0) {
break;
} else {
$retval_0 = 0;
}
return $retval_0 | 0;
}
} while (0);
$9 = HEAP32[$this + 76 >> 2] | 0;
do {
if (($9 | 0) != 0) {
if (((HEAP32[$this + 84 >> 2] | 0) + (($lemma_len & 65535) << 2 | 2) | 0) >>> 0 > $9 >>> 0) {
$retval_0 = 0;
} else {
break;
}
return $retval_0 | 0;
}
} while (0);
if ((HEAP32[$this + 56 >> 2] | 0) == 0) {
label = 3418;
} else {
if ((HEAP32[$this + 60 >> 2] | 0) >>> 0 < (($lemma_len & 65535) << 2 | 2) >>> 0) {
label = 3418;
}
}
if ((label | 0) == 3418) {
FUNCTION_TABLE_vi[HEAP32[(HEAP32[$this >> 2] | 0) + 76 >> 2] & 127]($this);
}
$call41 = __ZN10ime_pinyin8UserDict14append_a_lemmaEPtS1_tty($this, $lemma_str, $splids, $lemma_len, $count, $lmt$0, $lmt$1) | 0;
if ((HEAP32[$this + 44 >> 2] | 0) == 0 | ($call41 | 0) == 0) {
$retval_0 = $call41;
return $retval_0 | 0;
}
__ZN10ime_pinyin8UserDict20queue_lemma_for_syncEj($this, $call41);
$retval_0 = $call41;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict18extract_score_freqEi($this, $raw_score) {
$this = $this | 0;
$raw_score = $raw_score | 0;
return $raw_score & 65535 | 0;
}
function __ZN10ime_pinyin8UserDict17extract_score_lmtEi($this, $raw_score) {
$this = $this | 0;
$raw_score = $raw_score | 0;
var $mul$0 = 0, $add$0 = 0;
$mul$0 = ___muldi3($raw_score >>> 16, 0, 604800, 0) | 0;
$add$0 = _i64Add($mul$0, tempRet0, 1229904e3, 0) | 0;
return (tempRet0 = tempRet0, $add$0) | 0;
}
function __ZN10ime_pinyin8UserDict11build_scoreEyi($this, $lmt$0, $lmt$1, $freq) {
$this = $this | 0;
$lmt$0 = $lmt$0 | 0;
$lmt$1 = $lmt$1 | 0;
$freq = $freq | 0;
var $sub$0 = 0, $div$0 = 0;
$sub$0 = _i64Add($lmt$0, $lmt$1, -1229904e3, -1) | 0;
$div$0 = ___udivdi3($sub$0, tempRet0, 604800, 0) | 0;
return $div$0 << 16 | $freq & 65535 | 0;
}
function __ZN10ime_pinyin8UserDict13utf16le_atollEPti($this, $s, $len) {
$this = $this | 0;
$s = $s | 0;
$len = $len | 0;
var $add_ptr = 0, $0 = 0, $s_addr_0_ph = 0, $flag_0_ph$0 = 0, $flag_0_ph$1 = 0, $1 = 0, $3 = 0, $ret_018$0 = 0, $ret_018$1 = 0, $s_addr_017 = 0, $mul$0 = 0, $mul$1 = 0, $add$0 = 0, $sub$0 = 0, $add16$0 = 0, $add16$1 = 0, $incdec_ptr17 = 0, $4 = 0, $ret_0_lcssa$0 = 0, $ret_0_lcssa$1 = 0, $mul19$0 = 0, $retval_0$0 = 0, $retval_0$1 = 0;
if (($len | 0) < 1) {
$retval_0$1 = 0;
$retval_0$0 = 0;
return (tempRet0 = $retval_0$1, $retval_0$0) | 0;
}
$add_ptr = $s + ($len << 1) | 0;
$0 = HEAP16[$s >> 1] | 0;
if (($0 << 16 >> 16 | 0) == 43) {
$flag_0_ph$1 = 0;
$flag_0_ph$0 = 1;
$s_addr_0_ph = $s + 2 | 0;
} else if (($0 << 16 >> 16 | 0) == 45) {
$flag_0_ph$1 = -1;
$flag_0_ph$0 = -1;
$s_addr_0_ph = $s + 2 | 0;
} else {
$flag_0_ph$1 = 0;
$flag_0_ph$0 = 1;
$s_addr_0_ph = $s;
}
$1 = HEAP16[$s_addr_0_ph >> 1] | 0;
if (($1 - 48 & 65535) < 10 & $s_addr_0_ph >>> 0 < $add_ptr >>> 0) {
$s_addr_017 = $s_addr_0_ph;
$ret_018$1 = 0;
$ret_018$0 = 0;
$3 = $1;
while (1) {
$mul$0 = ___muldi3($ret_018$0, $ret_018$1, 10, 0) | 0;
$mul$1 = tempRet0;
$add$0 = _i64Add($ret_018$0, $ret_018$1, -48, -1) | 0;
$sub$0 = _i64Add($add$0, tempRet0, $mul$0, $mul$1) | 0;
$add16$0 = _i64Add($sub$0, tempRet0, $3 & 65535, 0) | 0;
$add16$1 = tempRet0;
$incdec_ptr17 = $s_addr_017 + 2 | 0;
$4 = HEAP16[$incdec_ptr17 >> 1] | 0;
if (($4 - 48 & 65535) < 10 & $incdec_ptr17 >>> 0 < $add_ptr >>> 0) {
$s_addr_017 = $incdec_ptr17;
$ret_018$1 = $add16$1;
$ret_018$0 = $add16$0;
$3 = $4;
} else {
$ret_0_lcssa$1 = $add16$1;
$ret_0_lcssa$0 = $add16$0;
break;
}
}
} else {
$ret_0_lcssa$1 = 0;
$ret_0_lcssa$0 = 0;
}
$mul19$0 = ___muldi3($flag_0_ph$0, $flag_0_ph$1, $ret_0_lcssa$0, $ret_0_lcssa$1) | 0;
$retval_0$1 = tempRet0;
$retval_0$0 = $mul19$0;
return (tempRet0 = $retval_0$1, $retval_0$0) | 0;
}
function __ZN10ime_pinyin8UserDict13utf16le_lltoaExPti($this, $v$0, $v$1, $s, $size) {
$this = $this | 0;
$v$0 = $v$0 | 0;
$v$1 = $v$1 | 0;
$s = $s | 0;
$size = $size | 0;
var $add_ptr = 0, $$etemp$0$1 = 0, $mul$0 = 0, $s_addr_0 = 0, $v_addr_0$0 = 0, $v_addr_0$1 = 0, $ret_len_0 = 0, $ret_len_127 = 0, $v_addr_126$0 = 0, $v_addr_126$1 = 0, $s_addr_125 = 0, $rem$0 = 0, $add$0 = 0, $incdec_ptr7 = 0, $div$0 = 0, $div$1 = 0, $inc8 = 0, $v_addr_126_off$0 = 0, $v_addr_126_off$1 = 0, $$etemp$7$1 = 0, $ret_len_1_lcssa = 0, $v_addr_1_lcssa$0 = 0, $v_addr_1_lcssa$1 = 0, $s_addr_1_lcssa = 0, $s_addr_219 = 0, $s_addr_222 = 0, $b_021 = 0, $incdec_ptr16 = 0, $s_addr_2 = 0, $retval_0 = 0;
if (($s | 0) == 0 | ($size | 0) < 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$add_ptr = $s + ($size << 1) | 0;
$$etemp$0$1 = 0;
if (($v$1 | 0) < ($$etemp$0$1 | 0) | ($v$1 | 0) == ($$etemp$0$1 | 0) & $v$0 >>> 0 < 0 >>> 0) {
HEAP16[$s >> 1] = 45;
$mul$0 = _i64Subtract(0, 0, $v$0, $v$1) | 0;
$ret_len_0 = 1;
$v_addr_0$1 = tempRet0;
$v_addr_0$0 = $mul$0;
$s_addr_0 = $s + 2 | 0;
} else {
$ret_len_0 = 0;
$v_addr_0$1 = $v$1;
$v_addr_0$0 = $v$0;
$s_addr_0 = $s;
}
if ($s_addr_0 >>> 0 < $add_ptr >>> 0 & (($v_addr_0$0 | 0) != 0 | ($v_addr_0$1 | 0) != 0)) {
$s_addr_125 = $s_addr_0;
$v_addr_126$1 = $v_addr_0$1;
$v_addr_126$0 = $v_addr_0$0;
$ret_len_127 = $ret_len_0;
while (1) {
$rem$0 = ___remdi3($v_addr_126$0, $v_addr_126$1, 10, 0) | 0;
$add$0 = _i64Add($rem$0, tempRet0, 48, 0) | 0;
$incdec_ptr7 = $s_addr_125 + 2 | 0;
HEAP16[$s_addr_125 >> 1] = $add$0 & 65535;
$div$0 = ___divdi3($v_addr_126$0, $v_addr_126$1, 10, 0) | 0;
$div$1 = tempRet0;
$inc8 = $ret_len_127 + 1 | 0;
$v_addr_126_off$0 = _i64Add($v_addr_126$0, $v_addr_126$1, 9, 0) | 0;
$v_addr_126_off$1 = tempRet0;
$$etemp$7$1 = 0;
if ($incdec_ptr7 >>> 0 < $add_ptr >>> 0 & ($v_addr_126_off$1 >>> 0 > $$etemp$7$1 >>> 0 | $v_addr_126_off$1 >>> 0 == $$etemp$7$1 >>> 0 & $v_addr_126_off$0 >>> 0 > 18 >>> 0)) {
$s_addr_125 = $incdec_ptr7;
$v_addr_126$1 = $div$1;
$v_addr_126$0 = $div$0;
$ret_len_127 = $inc8;
} else {
$s_addr_1_lcssa = $incdec_ptr7;
$v_addr_1_lcssa$1 = $div$1;
$v_addr_1_lcssa$0 = $div$0;
$ret_len_1_lcssa = $inc8;
break;
}
}
} else {
$s_addr_1_lcssa = $s_addr_0;
$v_addr_1_lcssa$1 = $v_addr_0$1;
$v_addr_1_lcssa$0 = $v_addr_0$0;
$ret_len_1_lcssa = $ret_len_0;
}
if (!(($v_addr_1_lcssa$0 | 0) == 0 & ($v_addr_1_lcssa$1 | 0) == 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$s_addr_219 = $s_addr_1_lcssa - 2 | 0;
if ($s_addr_0 >>> 0 < $s_addr_219 >>> 0) {
$b_021 = $s_addr_0;
$s_addr_222 = $s_addr_219;
} else {
$retval_0 = $ret_len_1_lcssa;
return $retval_0 | 0;
}
while (1) {
HEAP16[$b_021 >> 1] = HEAP16[$s_addr_222 >> 1] | 0;
$incdec_ptr16 = $b_021 + 2 | 0;
$s_addr_2 = $s_addr_222 - 2 | 0;
if ($incdec_ptr16 >>> 0 < $s_addr_2 >>> 0) {
$b_021 = $incdec_ptr16;
$s_addr_222 = $s_addr_2;
} else {
$retval_0 = $ret_len_1_lcssa;
break;
}
}
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict9set_limitEjjj($this, $max_lemma_count, $max_lemma_size, $reclaim_ratio) {
$this = $this | 0;
$max_lemma_count = $max_lemma_count | 0;
$max_lemma_size = $max_lemma_size | 0;
$reclaim_ratio = $reclaim_ratio | 0;
HEAP32[$this + 72 >> 2] = $max_lemma_count;
HEAP32[$this + 76 >> 2] = $max_lemma_size;
HEAP32[$this + 68 >> 2] = $reclaim_ratio >>> 0 > 100 ? 100 : $reclaim_ratio;
return;
}
function __ZN10ime_pinyin8UserDict4swapEPNS0_23UserDictScoreOffsetPairEii($this, $sop, $i, $j) {
$this = $this | 0;
$sop = $sop | 0;
$i = $i | 0;
$j = $j | 0;
var $score = 0, $0 = 0, $offset_index = 0, $1 = 0, $score4 = 0, $offset_index8 = 0;
$score = $sop + ($i << 3) | 0;
$0 = HEAP32[$score >> 2] | 0;
$offset_index = $sop + ($i << 3) + 4 | 0;
$1 = HEAP32[$offset_index >> 2] | 0;
$score4 = $sop + ($j << 3) | 0;
HEAP32[$score >> 2] = HEAP32[$score4 >> 2];
$offset_index8 = $sop + ($j << 3) + 4 | 0;
HEAP32[$offset_index >> 2] = HEAP32[$offset_index8 >> 2];
HEAP32[$score4 >> 2] = $0;
HEAP32[$offset_index8 >> 2] = $1;
return;
}
function __ZN10ime_pinyin8UserDict38put_lemmas_no_sync_from_utf16le_stringEPti($this, $lemmas, $len) {
$this = $this | 0;
$lemmas = $lemmas | 0;
$len = $len | 0;
var $is_pre = 0, $call = 0, $0 = 0, $sub_ptr_rhs_cast = 0, $arraydecay = 0, $sub_ptr_lhs_cast57 = 0, $newly_added_056 = 0, $p_055 = 0, $2 = 0, $3 = 0, $p_149 = 0, $splid_len_048 = 0, $inc_splid_len_0 = 0, $incdec_ptr = 0, $4 = 0, $p_1_lcssa = 0, $splid_len_0_lcssa = 0, $inc14 = 0, $sub_ptr_lhs_cast15 = 0, $incdec_ptr35 = 0, $p_2 = 0, $incdec_ptr56 = 0, $p_3 = 0, $call74$0 = 0, $incdec_ptr76 = 0, $p_4 = 0, $call94$0 = 0, $inc99 = 0, $incdec_ptr100 = 0, $sub_ptr_lhs_cast = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 24 | 0;
$is_pre = sp + 16 | 0;
$call = __Znwj(4) | 0;
$0 = $call;
__ZN10ime_pinyin14SpellingParserC2Ev($0);
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$sub_ptr_rhs_cast = $lemmas;
if (($len | 0) <= 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$arraydecay = sp | 0;
$p_055 = $lemmas;
$newly_added_056 = 0;
$sub_ptr_lhs_cast57 = $lemmas;
while (1) {
$2 = HEAP16[$p_055 >> 1] | 0;
L4408 : do {
if ($2 << 16 >> 16 == 44) {
$splid_len_0_lcssa = 0;
$p_1_lcssa = $p_055;
} else {
$splid_len_048 = 0;
$p_149 = $p_055;
$3 = $2;
while (1) {
if (($p_149 - $sub_ptr_rhs_cast >> 1 | 0) >= ($len | 0)) {
$splid_len_0_lcssa = $splid_len_048;
$p_1_lcssa = $p_149;
break L4408;
}
$inc_splid_len_0 = ($3 << 16 >> 16 == 32) + $splid_len_048 | 0;
$incdec_ptr = $p_149 + 2 | 0;
$4 = HEAP16[$incdec_ptr >> 1] | 0;
if ($4 << 16 >> 16 == 44) {
$splid_len_0_lcssa = $inc_splid_len_0;
$p_1_lcssa = $incdec_ptr;
break;
} else {
$splid_len_048 = $inc_splid_len_0;
$p_149 = $incdec_ptr;
$3 = $4;
}
}
}
} while (0);
$inc14 = $splid_len_0_lcssa + 1 | 0;
$sub_ptr_lhs_cast15 = $p_1_lcssa;
if (($sub_ptr_lhs_cast15 - $sub_ptr_rhs_cast >> 1 | 0) == ($len | 0) | $inc14 >>> 0 > 8) {
$retval_0 = $newly_added_056;
label = 3483;
break;
}
if (((__ZN10ime_pinyin14SpellingParser18splstr16_to_idxs_fEPKttPtS3_tRb($0, $p_055, ($sub_ptr_lhs_cast15 - $sub_ptr_lhs_cast57 | 0) >>> 1 & 65535, $arraydecay, 0, 8, $is_pre) | 0) & 65535 | 0) != ($inc14 | 0)) {
$retval_0 = $newly_added_056;
label = 3479;
break;
}
$incdec_ptr35 = $p_1_lcssa + 2 | 0;
$p_2 = $incdec_ptr35;
while (1) {
if ((HEAP16[$p_2 >> 1] | 0) == 44) {
break;
}
if (($p_2 - $sub_ptr_rhs_cast >> 1 | 0) < ($len | 0)) {
$p_2 = $p_2 + 2 | 0;
} else {
break;
}
}
if (($p_2 - $incdec_ptr35 >> 1 | 0) != ($inc14 | 0)) {
$retval_0 = $newly_added_056;
label = 3482;
break;
}
$incdec_ptr56 = $p_2 + 2 | 0;
$p_3 = $incdec_ptr56;
while (1) {
if ((HEAP16[$p_3 >> 1] | 0) == 44) {
break;
}
if (($p_3 - $sub_ptr_rhs_cast >> 1 | 0) < ($len | 0)) {
$p_3 = $p_3 + 2 | 0;
} else {
break;
}
}
$call74$0 = __ZN10ime_pinyin8UserDict13utf16le_atollEPti(0, $incdec_ptr56, $p_3 - $incdec_ptr56 >> 1) | 0;
$incdec_ptr76 = $p_3 + 2 | 0;
$p_4 = $incdec_ptr76;
while (1) {
if ((HEAP16[$p_4 >> 1] | 0) == 59) {
break;
}
if (($p_4 - $sub_ptr_rhs_cast >> 1 | 0) < ($len | 0)) {
$p_4 = $p_4 + 2 | 0;
} else {
break;
}
}
$call94$0 = __ZN10ime_pinyin8UserDict13utf16le_atollEPti(0, $incdec_ptr76, $p_4 - $incdec_ptr76 >> 1) | 0;
__ZN10ime_pinyin8UserDict17put_lemma_no_syncEPtS1_tty($this, $incdec_ptr35, $arraydecay, $inc14 & 65535, $call74$0 & 65535, $call94$0, tempRet0) | 0;
$inc99 = $newly_added_056 + 1 | 0;
$incdec_ptr100 = $p_4 + 2 | 0;
$sub_ptr_lhs_cast = $incdec_ptr100;
if (($sub_ptr_lhs_cast - $sub_ptr_rhs_cast >> 1 | 0) < ($len | 0)) {
$p_055 = $incdec_ptr100;
$newly_added_056 = $inc99;
$sub_ptr_lhs_cast57 = $sub_ptr_lhs_cast;
} else {
$retval_0 = $inc99;
label = 3478;
break;
}
}
if ((label | 0) == 3482) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 3483) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 3478) {
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 3479) {
STACKTOP = sp;
return $retval_0 | 0;
}
return 0;
}
function __ZN10ime_pinyin8UserDict48get_sync_lemmas_in_utf16le_string_from_beginningEPtiPi($this, $str, $size, $count) {
$this = $this | 0;
$str = $str | 0;
$size = $size | 0;
$count = $count | 0;
var $call2 = 0, $sync_count = 0, $syncs_ = 0, $len_045 = 0, $left_len_044 = 0, $i_043 = 0, $2 = 0, $call6 = 0, $conv7 = 0, $call8 = 0, $call9 = 0, $call11 = 0, $j_034 = 0, $4 = 0, $call16 = 0, $5 = 0, $add_ptr = 0, $inc = 0, $j_1 = 0, $6 = 0, $incdec_ptr26 = 0, $7 = 0, $cmp3536 = 0, $8 = 0, $j_238 = 0, $9 = 0, $inc42 = 0, $10 = 0, $cmp35 = 0, $cmp35_lcssa = 0, $_lcssa = 0, $j_2_lcssa = 0, $conv54$0 = 0, $11 = 0, $call58 = 0, $12 = 0, $add_ptr62 = 0, $call68$0 = 0, $13 = 0, $call72 = 0, $14 = 0, $add_ptr76 = 0, $sub_ptr_sub82 = 0, $sub_ptr_div83 = 0, $16 = 0, $left_len_1 = 0, $len_1 = 0, $inc90 = 0, $len_0_lcssa = 0, $state_ = 0, $retval_0 = 0;
HEAP32[$count >> 2] = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$call2 = __ZN10ime_pinyin12SpellingTrie12get_instanceEv() | 0;
if (($call2 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$sync_count = $this + 96 | 0;
if ((HEAP32[$sync_count >> 2] | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$syncs_ = $this + 44 | 0;
$i_043 = 0;
$left_len_044 = $size;
$len_045 = 0;
L4443 : while (1) {
$2 = HEAP32[(HEAP32[$syncs_ >> 2] | 0) + ($i_043 << 2) >> 2] | 0;
$call6 = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $2) | 0;
$conv7 = $call6 << 24 >> 24;
$call8 = __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $2) | 0;
$call9 = __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $2) | 0;
$call11 = __ZN10ime_pinyin8UserDict16_get_lemma_scoreEPtS1_t($this, $call9, $call8, $call6 << 24 >> 24) | 0;
HEAP32[2002] = 46880;
L4445 : do {
if ($call6 << 24 >> 24 == 0) {
$j_1 = 0;
} else {
$j_034 = 0;
while (1) {
$4 = HEAP32[2002] | 0;
$call16 = __ZN10ime_pinyin12SpellingTrie18get_spelling_str16EtPtj($call2, HEAP16[$call8 + ($j_034 << 1) >> 1] | 0, $4, 47904 - $4 >> 1) | 0;
if (($call16 | 0) < 1) {
$j_1 = $j_034;
break L4445;
}
$5 = HEAP32[2002] | 0;
$add_ptr = $5 + ($call16 << 1) | 0;
HEAP32[2002] = $add_ptr;
if ($add_ptr >>> 0 >= 47902 >>> 0) {
$j_1 = 0;
break L4445;
}
HEAP32[2002] = $5 + ($call16 + 1 << 1);
HEAP16[$add_ptr >> 1] = 32;
$inc = $j_034 + 1 | 0;
if ($inc >>> 0 < $conv7 >>> 0) {
$j_034 = $inc;
} else {
$j_1 = $inc;
break;
}
}
}
} while (0);
do {
if ($j_1 >>> 0 < $conv7 >>> 0) {
$len_1 = $len_045;
$left_len_1 = $left_len_044;
} else {
$6 = HEAP32[2002] | 0;
$incdec_ptr26 = $6 - 2 | 0;
HEAP32[2002] = $incdec_ptr26;
if ($incdec_ptr26 >>> 0 >= 47902 >>> 0) {
$len_1 = $len_045;
$left_len_1 = $left_len_044;
break;
}
HEAP32[2002] = $6;
HEAP16[$incdec_ptr26 >> 1] = 44;
$7 = HEAP32[2002] | 0;
$cmp3536 = $7 >>> 0 < 47902 >>> 0;
if ($call6 << 24 >> 24 != 0 & $cmp3536) {
$j_238 = 0;
$8 = $7;
while (1) {
$9 = HEAP16[$call9 + ($j_238 << 1) >> 1] | 0;
HEAP32[2002] = $8 + 2;
HEAP16[$8 >> 1] = $9;
$inc42 = $j_238 + 1 | 0;
$10 = HEAP32[2002] | 0;
$cmp35 = $10 >>> 0 < 47902 >>> 0;
if ($inc42 >>> 0 < $conv7 >>> 0 & $cmp35) {
$j_238 = $inc42;
$8 = $10;
} else {
$j_2_lcssa = $inc42;
$_lcssa = $10;
$cmp35_lcssa = $cmp35;
break;
}
}
} else {
$j_2_lcssa = 0;
$_lcssa = $7;
$cmp35_lcssa = $cmp3536;
}
if (!($j_2_lcssa >>> 0 >= $conv7 >>> 0 & $cmp35_lcssa)) {
$len_1 = $len_045;
$left_len_1 = $left_len_044;
break;
}
HEAP32[2002] = $_lcssa + 2;
HEAP16[$_lcssa >> 1] = 44;
$conv54$0 = __ZN10ime_pinyin8UserDict18extract_score_freqEi(0, $call11) | 0;
$11 = HEAP32[2002] | 0;
$call58 = __ZN10ime_pinyin8UserDict13utf16le_lltoaExPti(0, $conv54$0, 0, $11, 47904 - $11 >> 1) | 0;
if (($call58 | 0) < 1) {
$len_1 = $len_045;
$left_len_1 = $left_len_044;
break;
}
$12 = HEAP32[2002] | 0;
$add_ptr62 = $12 + ($call58 << 1) | 0;
HEAP32[2002] = $add_ptr62;
if ($add_ptr62 >>> 0 >= 47902 >>> 0) {
$len_1 = $len_045;
$left_len_1 = $left_len_044;
break;
}
HEAP32[2002] = $12 + ($call58 + 1 << 1);
HEAP16[$add_ptr62 >> 1] = 44;
$call68$0 = __ZN10ime_pinyin8UserDict17extract_score_lmtEi(0, $call11) | 0;
$13 = HEAP32[2002] | 0;
$call72 = __ZN10ime_pinyin8UserDict13utf16le_lltoaExPti(0, $call68$0, tempRet0, $13, 47904 - $13 >> 1) | 0;
if (($call72 | 0) < 1) {
$len_1 = $len_045;
$left_len_1 = $left_len_044;
break;
}
$14 = HEAP32[2002] | 0;
$add_ptr76 = $14 + ($call72 << 1) | 0;
HEAP32[2002] = $add_ptr76;
if ($add_ptr76 >>> 0 >= 47902 >>> 0) {
$len_1 = $len_045;
$left_len_1 = $left_len_044;
break;
}
HEAP32[2002] = $14 + ($call72 + 1 << 1);
HEAP16[$add_ptr76 >> 1] = 59;
$sub_ptr_sub82 = (HEAP32[2002] | 0) - 46880 | 0;
$sub_ptr_div83 = $sub_ptr_sub82 >> 1;
if (($sub_ptr_div83 | 0) > ($left_len_044 | 0)) {
$len_0_lcssa = $len_045;
break L4443;
}
$16 = $str + ($len_045 << 1) | 0;
_memcpy($16 | 0, 46880, $sub_ptr_sub82) | 0;
HEAP32[$count >> 2] = (HEAP32[$count >> 2] | 0) + 1;
$len_1 = $sub_ptr_div83 + $len_045 | 0;
$left_len_1 = $left_len_044 - $sub_ptr_div83 | 0;
}
} while (0);
$inc90 = $i_043 + 1 | 0;
if ($inc90 >>> 0 < (HEAP32[$sync_count >> 2] | 0) >>> 0) {
$i_043 = $inc90;
$left_len_044 = $left_len_1;
$len_045 = $len_1;
} else {
$len_0_lcssa = $len_1;
break;
}
}
if (($len_0_lcssa | 0) <= 0) {
$retval_0 = $len_0_lcssa;
return $retval_0 | 0;
}
$state_ = $this + 104 | 0;
if ((HEAP32[$state_ >> 2] | 0) >= 2) {
$retval_0 = $len_0_lcssa;
return $retval_0 | 0;
}
HEAP32[$state_ >> 2] = 2;
$retval_0 = $len_0_lcssa;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict5stateEPNS0_12UserDictStatE($this, $stat) {
$this = $this | 0;
$stat = $stat | 0;
var $dict_info_ = 0, $retval_0 = 0;
if (($stat | 0) == 0 | (__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0) ^ 1) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP32[$stat >> 2] = HEAP32[$this + 20 >> 2];
HEAP32[$stat + 4 >> 2] = HEAP32[$this + 64 >> 2];
HEAP32[$stat + 8 >> 2] = HEAP32[$this + 8 >> 2];
HEAP32[$stat + 12 >> 2] = HEAP32[$this + 12 >> 2];
HEAP32[$stat + 16 >> 2] = HEAP32[11850];
HEAP32[$stat + 20 >> 2] = HEAP32[11851];
$dict_info_ = $this + 68 | 0;
HEAP32[$stat + 24 >> 2] = __ZN10ime_pinyin8UserDict18get_dict_file_sizeEPNS0_12UserDictInfoE(0, $dict_info_) | 0;
HEAP32[$stat + 28 >> 2] = HEAP32[$this + 80 >> 2];
HEAP32[$stat + 32 >> 2] = HEAP32[$this + 84 >> 2];
HEAP32[$stat + 36 >> 2] = HEAP32[$this + 88 >> 2];
HEAP32[$stat + 40 >> 2] = HEAP32[$this + 92 >> 2];
HEAP32[$stat + 44 >> 2] = HEAP32[$this + 96 >> 2];
HEAP32[$stat + 52 >> 2] = HEAP32[$this + 72 >> 2];
HEAP32[$stat + 56 >> 2] = HEAP32[$this + 76 >> 2];
HEAP32[$stat + 48 >> 2] = HEAP32[$dict_info_ >> 2];
$retval_0 = 1;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict10shift_downEPNS0_23UserDictScoreOffsetPairEii($this, $sop, $i, $n) {
$this = $this | 0;
$sop = $sop | 0;
$i = $i | 0;
$n = $n | 0;
var $par_038 = 0, $add36 = 0, $add2 = 0, $cmp4 = 0, $score = 0, $0 = 0, $par_0_be = 0, $score15 = 0, $4 = 0, label = 0;
if (($i | 0) < ($n | 0)) {
$par_038 = $i;
} else {
return;
}
L4481 : while (1) {
$add36 = $par_038 << 1 | 1;
$add2 = $add36 + 1 | 0;
$cmp4 = ($add2 | 0) < ($n | 0);
if (!(($add36 | 0) < ($n | 0) | $cmp4)) {
label = 3532;
break;
}
$score = $sop + ($add36 << 3) | 0;
$0 = HEAP32[$score >> 2] | 0;
L4484 : do {
if ($cmp4) {
$score15 = $sop + ($add2 << 3) | 0;
do {
if (($0 | 0) > (HEAP32[$score15 >> 2] | 0)) {
if (($0 | 0) <= (HEAP32[$sop + ($par_038 << 3) >> 2] | 0)) {
break;
}
__ZN10ime_pinyin8UserDict4swapEPNS0_23UserDictScoreOffsetPairEii(0, $sop, $add36, $par_038);
$par_0_be = $add36;
break L4484;
}
} while (0);
$4 = HEAP32[$score15 >> 2] | 0;
if (($4 | 0) <= (HEAP32[$score >> 2] | 0)) {
label = 3536;
break L4481;
}
if (($4 | 0) <= (HEAP32[$sop + ($par_038 << 3) >> 2] | 0)) {
label = 3537;
break L4481;
}
__ZN10ime_pinyin8UserDict4swapEPNS0_23UserDictScoreOffsetPairEii(0, $sop, $add2, $par_038);
$par_0_be = $add2;
} else {
if (($0 | 0) <= (HEAP32[$sop + ($par_038 << 3) >> 2] | 0)) {
label = 3534;
break L4481;
}
__ZN10ime_pinyin8UserDict4swapEPNS0_23UserDictScoreOffsetPairEii(0, $sop, $add36, $par_038);
$par_0_be = $add36;
}
} while (0);
if (($par_0_be | 0) < ($n | 0)) {
$par_038 = $par_0_be;
} else {
label = 3533;
break;
}
}
if ((label | 0) == 3536) {
return;
} else if ((label | 0) == 3537) {
return;
} else if ((label | 0) == 3532) {
return;
} else if ((label | 0) == 3533) {
return;
} else if ((label | 0) == 3534) {
return;
}
}
function __ZN10ime_pinyin8UserDict9put_lemmaEPtS1_tt($this, $lemma_str, $splids, $lemma_len, $count) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
$count = $count | 0;
var $call = 0;
$call = _time(0) | 0;
return __ZN10ime_pinyin8UserDict10_put_lemmaEPtS1_tty($this, $lemma_str, $splids, $lemma_len, $count, $call, ($call | 0) < 0 ? -1 : 0) | 0;
}
function __ZN10ime_pinyin8UserDict7reclaimEv($this) {
$this = $this | 0;
var $0 = 0, $lemma_count = 0, $mul = 0, $div = 0, $call7 = 0, $2 = 0, $4 = 0, $i_036 = 0, $scores_28 = 0, $score31 = 0, $7 = 0, $i14_034 = 0, $i21_033 = 0, $10 = 0, $i42_031 = 0, $state_ = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
return;
}
$0 = HEAP32[$this + 68 >> 2] | 0;
if (($0 | 0) == 0) {
return;
} else if (($0 | 0) == 100) {
___assert_func(2712, 1958, 4520, 1856);
} else {
$lemma_count = $this + 80 | 0;
$mul = Math_imul(HEAP32[$lemma_count >> 2] | 0, $0) | 0;
$div = ($mul >>> 0) / 100 | 0;
$call7 = _malloc($div << 3) | 0;
$2 = $call7;
if (($call7 | 0) == 0) {
return;
}
if ($mul >>> 0 > 99) {
$4 = HEAP32[$this + 32 >> 2] | 0;
$i_036 = 0;
do {
HEAP32[$2 + ($i_036 << 3) >> 2] = HEAP32[$4 + ($i_036 << 2) >> 2];
HEAP32[$2 + ($i_036 << 3) + 4 >> 2] = $i_036;
$i_036 = $i_036 + 1 | 0;
} while (($i_036 | 0) < ($div | 0));
}
$i14_034 = ($div + 1 | 0) >>> 1;
while (1) {
__ZN10ime_pinyin8UserDict10shift_downEPNS0_23UserDictScoreOffsetPairEii($this, $2, $i14_034, $div);
if (($i14_034 | 0) > 0) {
$i14_034 = $i14_034 - 1 | 0;
} else {
break;
}
}
if ($div >>> 0 < (HEAP32[$lemma_count >> 2] | 0) >>> 0) {
$scores_28 = $this + 32 | 0;
$score31 = $call7;
$7 = $call7 + 4 | 0;
$i21_033 = $div;
do {
$10 = HEAP32[(HEAP32[$scores_28 >> 2] | 0) + ($i21_033 << 2) >> 2] | 0;
if (($10 | 0) < (HEAP32[$score31 >> 2] | 0)) {
HEAP32[$score31 >> 2] = $10;
HEAP32[$7 >> 2] = $i21_033;
__ZN10ime_pinyin8UserDict10shift_downEPNS0_23UserDictScoreOffsetPairEii($this, $2, 0, $div);
}
$i21_033 = $i21_033 + 1 | 0;
} while ($i21_033 >>> 0 < (HEAP32[$lemma_count >> 2] | 0) >>> 0);
}
do {
if ($mul >>> 0 > 99) {
$i42_031 = 0;
do {
__ZN10ime_pinyin8UserDict28remove_lemma_by_offset_indexEi($this, HEAP32[$2 + ($i42_031 << 3) + 4 >> 2] | 0) | 0;
$i42_031 = $i42_031 + 1 | 0;
} while (($i42_031 | 0) < ($div | 0));
if ($mul >>> 0 <= 99) {
break;
}
$state_ = $this + 104 | 0;
if ((HEAP32[$state_ >> 2] | 0) >= 4) {
break;
}
HEAP32[$state_ >> 2] = 4;
}
} while (0);
_free($call7);
return;
}
}
function __ZN10ime_pinyin8UserDict21get_total_lemma_countEv($this) {
$this = $this | 0;
return HEAP32[$this + 100 >> 2] | 0;
}
function __ZN10ime_pinyin8UserDict31set_total_lemma_count_of_othersEj($this, $count) {
$this = $this | 0;
$count = $count | 0;
HEAP32[$this + 4 >> 2] = $count;
return;
}
function __ZN10ime_pinyin8UserDict16get_max_lemma_idEv($this) {
$this = $this | 0;
return (HEAP32[$this + 16 >> 2] | 0) - 1 + (HEAP32[$this + 80 >> 2] | 0) | 0;
}
function __ZN10ime_pinyin8UserDict14append_a_lemmaEPtS1_tty($this, $lemma_str, $splids, $lemma_len, $count, $lmt$0, $lmt$1) {
$this = $this | 0;
$lemma_str = $lemma_str | 0;
$splids = $splids | 0;
$lemma_len = $lemma_len | 0;
$count = $count | 0;
$lmt$0 = $lmt$0 | 0;
$lmt$1 = $lmt$1 | 0;
var $searchable = 0, $add = 0, $lemma_size = 0, $0 = 0, $lemmas_ = 0, $conv5 = 0, $add8 = 0, $add16 = 0, $i_063 = 0, $shl = 0, $lemma_count = 0, $9 = 0, $offsets_ = 0, $conv23 = 0, $call24 = 0, $scores_ = 0, $ids_ = 0, $predicts_ = 0, $add3461 = 0, $lemma_count_left_ = 0, $lemma_size_left_ = 0, $i42_0 = 0, $21 = 0, $call46 = 0, $22 = 0, $23 = 0, $add_ptr_sum = 0, $shl64 = 0, $27 = 0, $28 = 0, $32 = 0, $33 = 0, $37 = 0, $38 = 0, $call94 = 0, $state_ = 0, $total_nfreq = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 48 | 0;
$searchable = sp | 0;
$add = (__ZN10ime_pinyin8UserDict16get_max_lemma_idEv($this) | 0) + 1 | 0;
$lemma_size = $this + 84 | 0;
$0 = HEAP32[$lemma_size >> 2] | 0;
if (($0 | 0) < 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$lemmas_ = $this + 24 | 0;
HEAP8[(HEAP32[$lemmas_ >> 2] | 0) + $0 | 0] = 0;
HEAP8[(HEAP32[$lemmas_ >> 2] | 0) + ($0 + 1) | 0] = $lemma_len & 255;
$conv5 = $lemma_len & 65535;
if ($lemma_len << 16 >> 16 != 0) {
$add8 = $0 + 2 | 0;
$add16 = $add8 + ($conv5 << 1) | 0;
$i_063 = 0;
do {
$shl = $i_063 << 1;
HEAP16[(HEAP32[$lemmas_ >> 2] | 0) + ($shl + $add8) >> 1] = HEAP16[$splids + ($i_063 << 1) >> 1] | 0;
HEAP16[(HEAP32[$lemmas_ >> 2] | 0) + ($add16 + $shl) >> 1] = HEAP16[$lemma_str + ($i_063 << 1) >> 1] | 0;
$i_063 = $i_063 + 1 | 0;
} while ($i_063 >>> 0 < $conv5 >>> 0);
}
$lemma_count = $this + 80 | 0;
$9 = HEAP32[$lemma_count >> 2] | 0;
$offsets_ = $this + 28 | 0;
HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($9 << 2) >> 2] = $0;
$conv23 = $count & 65535;
$call24 = __ZN10ime_pinyin8UserDict11build_scoreEyi(0, $lmt$0, $lmt$1, $conv23) | 0;
$scores_ = $this + 32 | 0;
HEAP32[(HEAP32[$scores_ >> 2] | 0) + ($9 << 2) >> 2] = $call24;
$ids_ = $this + 36 | 0;
HEAP32[(HEAP32[$ids_ >> 2] | 0) + ($9 << 2) >> 2] = $add;
$predicts_ = $this + 40 | 0;
HEAP32[(HEAP32[$predicts_ >> 2] | 0) + ($9 << 2) >> 2] = $0;
HEAP32[(HEAP32[$this + 52 >> 2] | 0) + ($add - (HEAP32[$this + 16 >> 2] | 0) << 2) >> 2] = $0;
HEAP32[$lemma_count >> 2] = (HEAP32[$lemma_count >> 2] | 0) + 1;
$add3461 = $conv5 << 2 | 2;
HEAP32[$lemma_size >> 2] = (HEAP32[$lemma_size >> 2] | 0) + $add3461;
$lemma_count_left_ = $this + 56 | 0;
HEAP32[$lemma_count_left_ >> 2] = (HEAP32[$lemma_count_left_ >> 2] | 0) - 1;
$lemma_size_left_ = $this + 60 | 0;
HEAP32[$lemma_size_left_ >> 2] = (HEAP32[$lemma_size_left_ >> 2] | 0) - $add3461;
__ZN10ime_pinyin8UserDict14prepare_locateEPNS0_18UserDictSearchableEPKtt(0, $searchable, $splids, $lemma_len);
$i42_0 = 0;
while (1) {
if ($i42_0 >>> 0 >= $9 >>> 0) {
break;
}
$21 = HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($i42_0 << 2) >> 2] | 0;
$call46 = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $21) | 0;
if ((__ZN10ime_pinyin8UserDict22fuzzy_compare_spell_idEPKttPKNS0_18UserDictSearchableE(0, __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $21) | 0, $call46 << 24 >> 24, $searchable) | 0) > -1) {
break;
} else {
$i42_0 = $i42_0 + 1 | 0;
}
}
if (($i42_0 | 0) != ($9 | 0)) {
$22 = HEAP32[$offsets_ >> 2] | 0;
$23 = HEAP32[$22 + ($9 << 2) >> 2] | 0;
$add_ptr_sum = $i42_0 + 1 | 0;
$shl64 = $9 - $i42_0 << 2;
_memmove($22 + ($add_ptr_sum << 2) | 0, $22 + ($i42_0 << 2) | 0, $shl64 | 0);
HEAP32[(HEAP32[$offsets_ >> 2] | 0) + ($i42_0 << 2) >> 2] = $23;
$27 = HEAP32[$scores_ >> 2] | 0;
$28 = HEAP32[$27 + ($9 << 2) >> 2] | 0;
_memmove($27 + ($add_ptr_sum << 2) | 0, $27 + ($i42_0 << 2) | 0, $shl64 | 0);
HEAP32[(HEAP32[$scores_ >> 2] | 0) + ($i42_0 << 2) >> 2] = $28;
$32 = HEAP32[$ids_ >> 2] | 0;
$33 = HEAP32[$32 + ($9 << 2) >> 2] | 0;
_memmove($32 + ($add_ptr_sum << 2) | 0, $32 + ($i42_0 << 2) | 0, $shl64 | 0);
HEAP32[(HEAP32[$ids_ >> 2] | 0) + ($i42_0 << 2) >> 2] = $33;
}
$37 = HEAP32[$predicts_ >> 2] | 0;
$38 = HEAP32[$37 + ($9 << 2) >> 2] | 0;
$call94 = __ZN10ime_pinyin8UserDict34locate_where_to_insert_in_predictsEPKti($this, __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $38) | 0, $conv5) | 0;
if (($call94 | 0) != ($9 | 0)) {
_memmove($37 + ($call94 + 1 << 2) | 0, $37 + ($call94 << 2) | 0, $9 - $call94 << 2 | 0);
HEAP32[(HEAP32[$predicts_ >> 2] | 0) + ($call94 << 2) >> 2] = $38;
}
$state_ = $this + 104 | 0;
if ((HEAP32[$state_ >> 2] | 0) < 5) {
HEAP32[$state_ >> 2] = 5;
}
__ZN10ime_pinyin8UserDict10cache_initEv($this);
$total_nfreq = $this + 100 | 0;
HEAP32[$total_nfreq >> 2] = (HEAP32[$total_nfreq >> 2] | 0) + $conv23;
$retval_0 = $add;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin8UserDict20queue_lemma_for_syncEj($this, $id) {
$this = $this | 0;
$id = $id | 0;
var $sync_count = 0, $0 = 0, $sync_count_size_ = 0, $1 = 0, $4 = 0, $syncs_5 = 0, $call = 0, $12 = 0, $13 = 0;
$sync_count = $this + 96 | 0;
$0 = HEAP32[$sync_count >> 2] | 0;
$sync_count_size_ = $this + 48 | 0;
$1 = HEAP32[$sync_count_size_ >> 2] | 0;
if ($0 >>> 0 < $1 >>> 0) {
$4 = HEAP32[(HEAP32[$this + 52 >> 2] | 0) + ($id - (HEAP32[$this + 16 >> 2] | 0) << 2) >> 2] | 0;
HEAP32[$sync_count >> 2] = $0 + 1;
HEAP32[(HEAP32[$this + 44 >> 2] | 0) + ($0 << 2) >> 2] = $4;
return;
}
$syncs_5 = $this + 44 | 0;
$call = _realloc(HEAP32[$syncs_5 >> 2] | 0, ($1 << 2) + 128 | 0) | 0;
if (($call | 0) == 0) {
return;
}
HEAP32[$sync_count_size_ >> 2] = (HEAP32[$sync_count_size_ >> 2] | 0) + 32;
HEAP32[$syncs_5 >> 2] = $call;
$12 = HEAP32[(HEAP32[$this + 52 >> 2] | 0) + ($id - (HEAP32[$this + 16 >> 2] | 0) << 2) >> 2] | 0;
$13 = HEAP32[$sync_count >> 2] | 0;
HEAP32[$sync_count >> 2] = $13 + 1;
HEAP32[(HEAP32[$syncs_5 >> 2] | 0) + ($13 << 2) >> 2] = $12;
return;
}
function __ZN10ime_pinyin8UserDict12update_lemmaEjsb($this, $lemma_id, $delta_count, $selected) {
$this = $this | 0;
$lemma_id = $lemma_id | 0;
$delta_count = $delta_count | 0;
$selected = $selected | 0;
var $2 = 0, $call7 = 0, $call8 = 0, $call11 = 0, $scores_ = 0, $4 = 0, $call15 = 0, $call16$0 = 0, $call16$1 = 0, $delta_count_addr_0 = 0, $conv26 = 0, $total_nfreq = 0, $call31 = 0, $lmt_0$0 = 0, $lmt_0$1 = 0, $call34 = 0, $state_ = 0, $ids_ = 0, $retval_0 = 0;
if (!(__ZN10ime_pinyin8UserDict14is_valid_stateEv($this) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
if (!(__ZN10ime_pinyin8UserDict17is_valid_lemma_idEj($this, $lemma_id) | 0)) {
$retval_0 = 0;
return $retval_0 | 0;
}
$2 = HEAP32[(HEAP32[$this + 52 >> 2] | 0) + ($lemma_id - (HEAP32[$this + 16 >> 2] | 0) << 2) >> 2] | 0;
$call7 = __ZN10ime_pinyin8UserDict15get_lemma_ncharEj($this, $2) | 0;
$call8 = __ZN10ime_pinyin8UserDict14get_lemma_wordEj($this, $2) | 0;
$call11 = __ZN10ime_pinyin8UserDict17locate_in_offsetsEPtS1_t($this, $call8, __ZN10ime_pinyin8UserDict19get_lemma_spell_idsEj($this, $2) | 0, $call7 & 255) | 0;
if (($call11 | 0) == -1) {
$retval_0 = 0;
return $retval_0 | 0;
}
$scores_ = $this + 32 | 0;
$4 = HEAP32[(HEAP32[$scores_ >> 2] | 0) + ($call11 << 2) >> 2] | 0;
$call15 = __ZN10ime_pinyin8UserDict18extract_score_freqEi(0, $4) | 0;
$call16$0 = __ZN10ime_pinyin8UserDict17extract_score_lmtEi(0, $4) | 0;
$call16$1 = tempRet0;
if (($call15 + ($delta_count << 16 >> 16) | 0) > 65535 | $delta_count << 16 >> 16 < 0) {
$delta_count_addr_0 = 65535 - $call15 & 65535;
} else {
$delta_count_addr_0 = $delta_count;
}
$conv26 = $delta_count_addr_0 << 16 >> 16;
$total_nfreq = $this + 100 | 0;
HEAP32[$total_nfreq >> 2] = (HEAP32[$total_nfreq >> 2] | 0) + $conv26;
if ($selected) {
$call31 = _time(0) | 0;
$lmt_0$1 = ($call31 | 0) < 0 ? -1 : 0;
$lmt_0$0 = $call31;
} else {
$lmt_0$1 = $call16$1;
$lmt_0$0 = $call16$0;
}
$call34 = __ZN10ime_pinyin8UserDict11build_scoreEyi(0, $lmt_0$0, $lmt_0$1, $conv26 + $call15 | 0) | 0;
HEAP32[(HEAP32[$scores_ >> 2] | 0) + ($call11 << 2) >> 2] = $call34;
$state_ = $this + 104 | 0;
if ((HEAP32[$state_ >> 2] | 0) < 3) {
HEAP32[$state_ >> 2] = 3;
}
$ids_ = $this + 36 | 0;
__ZN10ime_pinyin8UserDict20queue_lemma_for_syncEj($this, HEAP32[(HEAP32[$ids_ >> 2] | 0) + ($call11 << 2) >> 2] | 0);
$retval_0 = HEAP32[(HEAP32[$ids_ >> 2] | 0) + ($call11 << 2) >> 2] | 0;
return $retval_0 | 0;
}
function __ZN10ime_pinyin11Utf16ReaderC2Ev($this) {
$this = $this | 0;
_memset($this | 0, 0, 20);
return;
}
function __ZN10ime_pinyin11Utf16ReaderD2Ev($this) {
$this = $this | 0;
var $0 = 0, $1 = 0;
$0 = HEAP32[$this >> 2] | 0;
if (($0 | 0) != 0) {
_fclose($0 | 0) | 0;
}
$1 = HEAP32[$this + 4 >> 2] | 0;
if (($1 | 0) == 0) {
return;
}
__ZdaPv($1);
return;
}
function __ZN10ime_pinyin11Utf16Reader4openEPKcj($this, $filename, $buffer_len) {
$this = $this | 0;
$filename = $filename | 0;
$buffer_len = $buffer_len | 0;
var $header = 0, $buffer_len_addr_0 = 0, $buffer_total_len_ = 0, $buffer_ = 0, $0 = 0, $3$0 = 0, $call = 0, $call18 = 0, $fp_ = 0, $cmp24 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$header = sp | 0;
if (($filename | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
if ($buffer_len >>> 0 < 128) {
$buffer_len_addr_0 = 128;
} else {
$buffer_len_addr_0 = $buffer_len >>> 0 > 65535 ? 65535 : $buffer_len;
}
$buffer_total_len_ = $this + 8 | 0;
HEAP32[$buffer_total_len_ >> 2] = $buffer_len_addr_0;
$buffer_ = $this + 4 | 0;
$0 = HEAP32[$buffer_ >> 2] | 0;
if (($0 | 0) != 0) {
__ZdaPv($0);
}
$3$0 = _llvm_umul_with_overflow_i32(HEAP32[$buffer_total_len_ >> 2] | 0, 2) | 0;
$call = __Znaj(tempRet0 ? -1 : $3$0) | 0;
HEAP32[$buffer_ >> 2] = $call;
if (($call | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$call18 = _fopen($filename | 0, 2072) | 0;
$fp_ = $this | 0;
HEAP32[$fp_ >> 2] = $call18;
if (($call18 | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$cmp24 = (_fread($header | 0, 2, 1, $call18 | 0) | 0) == 1;
if ($cmp24 & (HEAP16[$header >> 1] | 0) == -257) {
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
_fclose(HEAP32[$fp_ >> 2] | 0) | 0;
HEAP32[$fp_ >> 2] = 0;
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZN10ime_pinyin11Utf16Reader8readlineEPtj($this, $read_buf, $max_len) {
$this = $this | 0;
$read_buf = $read_buf | 0;
$max_len = $max_len | 0;
var $fp_ = 0, $buffer_valid_len_ = 0, $buffer_next_pos_ = 0, $buffer_ = 0, $buffer_total_len_ = 0, $sub = 0, $buffer_next_pos_21 = 0, $buffer_22 = 0, $1 = 0, $ret_len_0 = 0, $call = 0, $i_032 = 0, $8 = 0, $add26 = 0, $arrayidx30 = 0, $inc = 0, $buffer_next_pos_40 = 0, $inc59 = 0, $14 = 0, $_lcssa = 0, $retval_0 = 0, label = 0;
$fp_ = $this | 0;
if ((HEAP32[$fp_ >> 2] | 0) == 0 | ($read_buf | 0) == 0 | ($max_len | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$buffer_valid_len_ = $this + 16 | 0;
$buffer_next_pos_ = $this + 12 | 0;
$buffer_ = $this + 4 | 0;
$buffer_total_len_ = $this + 8 | 0;
$sub = $max_len - 1 | 0;
$buffer_next_pos_21 = $this + 12 | 0;
$buffer_22 = $this + 4 | 0;
$ret_len_0 = 0;
$1 = (HEAP32[$buffer_valid_len_ >> 2] | 0) == 0;
L4625 : while (1) {
if ($1) {
HEAP32[$buffer_next_pos_ >> 2] = 0;
$call = _fread(HEAP32[$buffer_ >> 2] | 0, 2, HEAP32[$buffer_total_len_ >> 2] | 0, HEAP32[$fp_ >> 2] | 0) | 0;
HEAP32[$buffer_valid_len_ >> 2] = $call;
if (($call | 0) == 0) {
label = 3635;
break;
} else {
$i_032 = 0;
label = 3637;
}
} else {
if ((HEAP32[$buffer_valid_len_ >> 2] | 0) == 0) {
$_lcssa = 0;
} else {
$i_032 = 0;
label = 3637;
}
}
if ((label | 0) == 3637) {
while (1) {
label = 0;
if (($i_032 | 0) == ($sub | 0)) {
break L4625;
}
$8 = HEAP16[(HEAP32[$buffer_22 >> 2] | 0) + ((HEAP32[$buffer_next_pos_21 >> 2] | 0) + $i_032 << 1) >> 1] | 0;
if ($8 << 16 >> 16 == 10) {
break L4625;
}
HEAP16[$read_buf + ($i_032 + $ret_len_0 << 1) >> 1] = $8;
$inc59 = $i_032 + 1 | 0;
$14 = HEAP32[$buffer_valid_len_ >> 2] | 0;
if ($inc59 >>> 0 < $14 >>> 0) {
$i_032 = $inc59;
label = 3637;
} else {
$_lcssa = $14;
break;
}
}
}
HEAP32[$buffer_valid_len_ >> 2] = 0;
$ret_len_0 = $_lcssa + $ret_len_0 | 0;
$1 = 1;
}
if ((label | 0) == 3635) {
if (($ret_len_0 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
HEAP16[$read_buf + ($ret_len_0 << 1) >> 1] = 0;
$retval_0 = $read_buf;
return $retval_0 | 0;
}
$add26 = $i_032 + $ret_len_0 | 0;
do {
if (($add26 | 0) == 0) {
label = 3642;
} else {
$arrayidx30 = $read_buf + ($add26 - 1 << 1) | 0;
if ((HEAP16[$arrayidx30 >> 1] | 0) != 13) {
label = 3642;
break;
}
HEAP16[$arrayidx30 >> 1] = 0;
}
} while (0);
if ((label | 0) == 3642) {
HEAP16[$read_buf + ($add26 << 1) >> 1] = 0;
}
$inc = $i_032 + 1 | 0;
$buffer_next_pos_40 = $this + 12 | 0;
HEAP32[$buffer_next_pos_40 >> 2] = (HEAP32[$buffer_next_pos_40 >> 2] | 0) + $inc;
HEAP32[$buffer_valid_len_ >> 2] = (HEAP32[$buffer_valid_len_ >> 2] | 0) - $inc;
if ((HEAP32[$buffer_next_pos_40 >> 2] | 0) != (HEAP32[$this + 8 >> 2] | 0)) {
$retval_0 = $read_buf;
return $retval_0 | 0;
}
HEAP32[$buffer_next_pos_40 >> 2] = 0;
HEAP32[$buffer_valid_len_ >> 2] = 0;
$retval_0 = $read_buf;
return $retval_0 | 0;
}
function __ZNSt9type_infoD2Ev($this) {
$this = $this | 0;
return;
}
function __ZNSt8bad_castD2Ev($this) {
$this = $this | 0;
return;
}
function __ZNKSt8bad_cast4whatEv($this) {
$this = $this | 0;
return 1888 | 0;
}
function __ZNSt10bad_typeidD2Ev($this) {
$this = $this | 0;
return;
}
function __ZNKSt10bad_typeid4whatEv($this) {
$this = $this | 0;
return 3800 | 0;
}
function __ZNK10__cxxabiv116__shim_type_info5noop1Ev($this) {
$this = $this | 0;
return;
}
function __ZNK10__cxxabiv116__shim_type_info5noop2Ev($this) {
$this = $this | 0;
return;
}
function _ConvertUTF32toUTF16($sourceStart, $sourceEnd, $targetStart, $targetEnd, $flags) {
$sourceStart = $sourceStart | 0;
$sourceEnd = $sourceEnd | 0;
$targetStart = $targetStart | 0;
$targetEnd = $targetEnd | 0;
$flags = $flags | 0;
var $0 = 0, $1 = 0, $cmp7 = 0, $cmp18 = 0, $target_0_ph39 = 0, $source_0_ph38 = 0, $result_0_ph37 = 0, $target_027 = 0, $source_026 = 0, $incdec_ptr = 0, $2 = 0, $add_ptr = 0, $sub = 0, $target_0_be = 0, $target_0_lcssa = 0, $source_0_lcssa = 0, $result_1 = 0;
$0 = HEAP32[$sourceStart >> 2] | 0;
$1 = HEAP32[$targetStart >> 2] | 0;
L8 : do {
if ($0 >>> 0 < $sourceEnd >>> 0) {
$cmp7 = ($flags | 0) == 0;
$cmp18 = ($flags | 0) == 0;
$result_0_ph37 = 0;
$source_0_ph38 = $0;
$target_0_ph39 = $1;
while (1) {
$source_026 = $source_0_ph38;
$target_027 = $target_0_ph39;
L12 : while (1) {
if ($target_027 >>> 0 >= $targetEnd >>> 0) {
$result_1 = 2;
$source_0_lcssa = $source_026;
$target_0_lcssa = $target_027;
break L8;
}
$incdec_ptr = $source_026 + 4 | 0;
$2 = HEAP32[$source_026 >> 2] | 0;
do {
if ($2 >>> 0 < 65536) {
if (($2 - 55296 | 0) >>> 0 >= 2048) {
HEAP16[$target_027 >> 1] = $2 & 65535;
$target_0_be = $target_027 + 2 | 0;
break;
}
if ($cmp7) {
$result_1 = 3;
$source_0_lcssa = $source_026;
$target_0_lcssa = $target_027;
break L8;
}
HEAP16[$target_027 >> 1] = -3;
$target_0_be = $target_027 + 2 | 0;
} else {
if ($2 >>> 0 > 1114111) {
if ($cmp18) {
break L12;
}
HEAP16[$target_027 >> 1] = -3;
$target_0_be = $target_027 + 2 | 0;
break;
} else {
$add_ptr = $target_027 + 2 | 0;
if ($add_ptr >>> 0 >= $targetEnd >>> 0) {
$result_1 = 2;
$source_0_lcssa = $source_026;
$target_0_lcssa = $target_027;
break L8;
}
$sub = $2 - 65536 | 0;
HEAP16[$target_027 >> 1] = ($sub >>> 10) + 55296 & 65535;
HEAP16[$add_ptr >> 1] = ($sub & 1023 | 56320) & 65535;
$target_0_be = $target_027 + 4 | 0;
break;
}
}
} while (0);
if ($incdec_ptr >>> 0 < $sourceEnd >>> 0) {
$source_026 = $incdec_ptr;
$target_027 = $target_0_be;
} else {
$result_1 = $result_0_ph37;
$source_0_lcssa = $incdec_ptr;
$target_0_lcssa = $target_0_be;
break L8;
}
}
if ($incdec_ptr >>> 0 < $sourceEnd >>> 0) {
$result_0_ph37 = 3;
$source_0_ph38 = $incdec_ptr;
$target_0_ph39 = $target_027;
} else {
$result_1 = 3;
$source_0_lcssa = $incdec_ptr;
$target_0_lcssa = $target_027;
break;
}
}
} else {
$result_1 = 0;
$source_0_lcssa = $0;
$target_0_lcssa = $1;
}
} while (0);
HEAP32[$sourceStart >> 2] = $source_0_lcssa;
HEAP32[$targetStart >> 2] = $target_0_lcssa;
return $result_1 | 0;
}
function _ConvertUTF16toUTF32($sourceStart, $sourceEnd, $targetStart, $targetEnd, $flags) {
$sourceStart = $sourceStart | 0;
$sourceEnd = $sourceEnd | 0;
$targetStart = $targetStart | 0;
$targetEnd = $targetEnd | 0;
$flags = $flags | 0;
var $0 = 0, $1 = 0, $cmp13 = 0, $cmp21 = 0, $source_028 = 0, $target_027 = 0, $incdec_ptr = 0, $2 = 0, $conv = 0, $4 = 0, $ch_0 = 0, $source_1 = 0, $incdec_ptr34 = 0, $source_0_lcssa = 0, $target_0_lcssa = 0, $result_0 = 0;
$0 = HEAP32[$sourceStart >> 2] | 0;
$1 = HEAP32[$targetStart >> 2] | 0;
L31 : do {
if ($0 >>> 0 < $sourceEnd >>> 0) {
$cmp13 = ($flags | 0) == 0;
$cmp21 = ($flags | 0) == 0;
$target_027 = $1;
$source_028 = $0;
while (1) {
$incdec_ptr = $source_028 + 2 | 0;
$2 = HEAP16[$source_028 >> 1] | 0;
$conv = $2 & 65535;
do {
if (($2 + 10240 & 65535) < 1024) {
if ($incdec_ptr >>> 0 >= $sourceEnd >>> 0) {
$result_0 = 1;
$target_0_lcssa = $target_027;
$source_0_lcssa = $source_028;
break L31;
}
$4 = HEAP16[$incdec_ptr >> 1] | 0;
if (($4 + 9216 & 65535) < 1024) {
$source_1 = $source_028 + 4 | 0;
$ch_0 = ($conv << 10) - 56613888 + ($4 & 65535) | 0;
break;
} else {
if ($cmp13) {
$result_0 = 3;
$target_0_lcssa = $target_027;
$source_0_lcssa = $source_028;
break L31;
} else {
$source_1 = $incdec_ptr;
$ch_0 = $conv;
break;
}
}
} else {
if (!$cmp21) {
$source_1 = $incdec_ptr;
$ch_0 = $conv;
break;
}
if (($2 + 9216 & 65535) < 1024) {
$result_0 = 3;
$target_0_lcssa = $target_027;
$source_0_lcssa = $source_028;
break L31;
} else {
$source_1 = $incdec_ptr;
$ch_0 = $conv;
}
}
} while (0);
if ($target_027 >>> 0 >= $targetEnd >>> 0) {
$result_0 = 2;
$target_0_lcssa = $target_027;
$source_0_lcssa = $source_028;
break L31;
}
$incdec_ptr34 = $target_027 + 4 | 0;
HEAP32[$target_027 >> 2] = $ch_0;
if ($source_1 >>> 0 < $sourceEnd >>> 0) {
$target_027 = $incdec_ptr34;
$source_028 = $source_1;
} else {
$result_0 = 0;
$target_0_lcssa = $incdec_ptr34;
$source_0_lcssa = $source_1;
break;
}
}
} else {
$result_0 = 0;
$target_0_lcssa = $1;
$source_0_lcssa = $0;
}
} while (0);
HEAP32[$sourceStart >> 2] = $source_0_lcssa;
HEAP32[$targetStart >> 2] = $target_0_lcssa;
return $result_0 | 0;
}
function _ConvertUTF16toUTF8($sourceStart, $sourceEnd, $targetStart, $targetEnd, $flags) {
$sourceStart = $sourceStart | 0;
$sourceEnd = $sourceEnd | 0;
$targetStart = $targetStart | 0;
$targetEnd = $targetEnd | 0;
$flags = $flags | 0;
var $0 = 0, $1 = 0, $cmp13 = 0, $cmp21 = 0, $source_049 = 0, $target_048 = 0, $incdec_ptr = 0, $2 = 0, $conv = 0, $4 = 0, $ch_0 = 0, $source_1 = 0, $cmp40 = 0, $bytesToWrite_0 = 0, $ch_1 = 0, $add_ptr = 0, $incdec_ptr55 = 0, $ch_2 = 0, $target_1 = 0, $incdec_ptr60 = 0, $ch_3 = 0, $target_2 = 0, $incdec_ptr66 = 0, $ch_4 = 0, $target_3 = 0, $incdec_ptr72 = 0, $target_4 = 0, $add_ptr74 = 0, $source_0_lcssa = 0, $target_0_lcssa = 0, $result_0 = 0, label = 0;
$0 = HEAP32[$sourceStart >> 2] | 0;
$1 = HEAP32[$targetStart >> 2] | 0;
L47 : do {
if ($0 >>> 0 < $sourceEnd >>> 0) {
$cmp13 = ($flags | 0) == 0;
$cmp21 = ($flags | 0) == 0;
$target_048 = $1;
$source_049 = $0;
while (1) {
$incdec_ptr = $source_049 + 2 | 0;
$2 = HEAP16[$source_049 >> 1] | 0;
$conv = $2 & 65535;
do {
if (($2 + 10240 & 65535) < 1024) {
if ($incdec_ptr >>> 0 >= $sourceEnd >>> 0) {
$result_0 = 1;
$target_0_lcssa = $target_048;
$source_0_lcssa = $source_049;
break L47;
}
$4 = HEAP16[$incdec_ptr >> 1] | 0;
if (($4 + 9216 & 65535) < 1024) {
$source_1 = $source_049 + 4 | 0;
$ch_0 = ($conv << 10) - 56613888 + ($4 & 65535) | 0;
break;
} else {
if ($cmp13) {
$result_0 = 3;
$target_0_lcssa = $target_048;
$source_0_lcssa = $source_049;
break L47;
} else {
$source_1 = $incdec_ptr;
$ch_0 = $conv;
break;
}
}
} else {
if (!$cmp21) {
$source_1 = $incdec_ptr;
$ch_0 = $conv;
break;
}
if (($2 + 9216 & 65535) < 1024) {
$result_0 = 3;
$target_0_lcssa = $target_048;
$source_0_lcssa = $source_049;
break L47;
} else {
$source_1 = $incdec_ptr;
$ch_0 = $conv;
}
}
} while (0);
do {
if ($ch_0 >>> 0 < 128) {
$ch_1 = $ch_0;
$bytesToWrite_0 = 1;
} else {
if ($ch_0 >>> 0 < 2048) {
$ch_1 = $ch_0;
$bytesToWrite_0 = 2;
break;
}
if ($ch_0 >>> 0 < 65536) {
$ch_1 = $ch_0;
$bytesToWrite_0 = 3;
break;
}
$cmp40 = $ch_0 >>> 0 < 1114112;
$ch_1 = $cmp40 ? $ch_0 : 65533;
$bytesToWrite_0 = $cmp40 ? 4 : 3;
}
} while (0);
$add_ptr = $target_048 + $bytesToWrite_0 | 0;
if ($add_ptr >>> 0 > $targetEnd >>> 0) {
$result_0 = 2;
$target_0_lcssa = $target_048;
$source_0_lcssa = $source_049;
break L47;
}
if (($bytesToWrite_0 | 0) == 4) {
$incdec_ptr55 = $target_048 + ($bytesToWrite_0 - 1) | 0;
HEAP8[$incdec_ptr55] = ($ch_1 & 63 | 128) & 255;
$target_1 = $incdec_ptr55;
$ch_2 = $ch_1 >>> 6;
label = 53;
} else if (($bytesToWrite_0 | 0) == 3) {
$target_1 = $add_ptr;
$ch_2 = $ch_1;
label = 53;
} else if (($bytesToWrite_0 | 0) == 2) {
$target_2 = $add_ptr;
$ch_3 = $ch_1;
label = 54;
} else if (($bytesToWrite_0 | 0) == 1) {
$target_3 = $add_ptr;
$ch_4 = $ch_1;
label = 55;
} else {
$target_4 = $add_ptr;
}
if ((label | 0) == 53) {
label = 0;
$incdec_ptr60 = $target_1 - 1 | 0;
HEAP8[$incdec_ptr60] = ($ch_2 & 63 | 128) & 255;
$target_2 = $incdec_ptr60;
$ch_3 = $ch_2 >>> 6;
label = 54;
}
if ((label | 0) == 54) {
label = 0;
$incdec_ptr66 = $target_2 - 1 | 0;
HEAP8[$incdec_ptr66] = ($ch_3 & 63 | 128) & 255;
$target_3 = $incdec_ptr66;
$ch_4 = $ch_3 >>> 6;
label = 55;
}
if ((label | 0) == 55) {
label = 0;
$incdec_ptr72 = $target_3 - 1 | 0;
HEAP8[$incdec_ptr72] = (HEAPU8[11264 + $bytesToWrite_0 | 0] | 0 | $ch_4) & 255;
$target_4 = $incdec_ptr72;
}
$add_ptr74 = $target_4 + $bytesToWrite_0 | 0;
if ($source_1 >>> 0 < $sourceEnd >>> 0) {
$target_048 = $add_ptr74;
$source_049 = $source_1;
} else {
$result_0 = 0;
$target_0_lcssa = $add_ptr74;
$source_0_lcssa = $source_1;
break;
}
}
} else {
$result_0 = 0;
$target_0_lcssa = $1;
$source_0_lcssa = $0;
}
} while (0);
HEAP32[$sourceStart >> 2] = $source_0_lcssa;
HEAP32[$targetStart >> 2] = $target_0_lcssa;
return $result_0 | 0;
}
function __ZL11isLegalUTF8PKhi($source, $length) {
$source = $source | 0;
$length = $length | 0;
var $add_ptr = 0, $incdec_ptr = 0, $0 = 0, $srcptr_0 = 0, $incdec_ptr4 = 0, $1 = 0, $srcptr_1 = 0, $2 = 0, $conv18 = 0, $4 = 0, $retval_0 = 0, label = 0;
$add_ptr = $source + $length | 0;
if (($length | 0) == 4) {
$incdec_ptr = $source + ($length - 1) | 0;
$0 = HEAP8[$incdec_ptr] | 0;
if ($0 << 24 >> 24 > -1 | ($0 & 255) > 191) {
$retval_0 = 0;
} else {
$srcptr_0 = $incdec_ptr;
label = 60;
}
} else if (($length | 0) == 3) {
$srcptr_0 = $add_ptr;
label = 60;
} else if (($length | 0) == 2) {
$srcptr_1 = $add_ptr;
label = 61;
} else if (($length | 0) == 1) {
label = 68;
} else {
$retval_0 = 0;
}
if ((label | 0) == 60) {
$incdec_ptr4 = $srcptr_0 - 1 | 0;
$1 = HEAP8[$incdec_ptr4] | 0;
if ($1 << 24 >> 24 > -1 | ($1 & 255) > 191) {
$retval_0 = 0;
} else {
$srcptr_1 = $incdec_ptr4;
label = 61;
}
}
do {
if ((label | 0) == 61) {
$2 = HEAP8[$srcptr_1 - 1 | 0] | 0;
if (($2 & 255) > 191) {
$retval_0 = 0;
break;
}
$conv18 = HEAPU8[$source] | 0;
if (($conv18 | 0) == 224) {
if (($2 & 255) < 160) {
$retval_0 = 0;
break;
} else {
label = 68;
break;
}
} else if (($conv18 | 0) == 237) {
if (($2 & 255) > 159) {
$retval_0 = 0;
break;
} else {
label = 68;
break;
}
} else if (($conv18 | 0) == 240) {
if (($2 & 255) < 144) {
$retval_0 = 0;
break;
} else {
label = 68;
break;
}
} else if (($conv18 | 0) == 244) {
if (($2 & 255) > 143) {
$retval_0 = 0;
break;
} else {
label = 68;
break;
}
} else {
if ($2 << 24 >> 24 > -1) {
$retval_0 = 0;
break;
} else {
label = 68;
break;
}
}
}
} while (0);
do {
if ((label | 0) == 68) {
$4 = HEAP8[$source] | 0;
if ($4 << 24 >> 24 < 0 & ($4 & 255) < 194) {
$retval_0 = 0;
break;
}
$retval_0 = ($4 & 255) < 245 | 0;
}
} while (0);
return $retval_0 | 0;
}
function _ConvertUTF32toUTF8($sourceStart, $sourceEnd, $targetStart, $targetEnd, $flags) {
$sourceStart = $sourceStart | 0;
$sourceEnd = $sourceEnd | 0;
$targetStart = $targetStart | 0;
$targetEnd = $targetEnd | 0;
$flags = $flags | 0;
var $0 = 0, $1 = 0, $cmp1 = 0, $result_036 = 0, $source_035 = 0, $target_034 = 0, $incdec_ptr = 0, $2 = 0, $cmp15 = 0, $ch_0 = 0, $bytesToWrite_0 = 0, $result_1 = 0, $add_ptr = 0, $incdec_ptr30 = 0, $target_1 = 0, $ch_1 = 0, $incdec_ptr35 = 0, $target_2 = 0, $ch_2 = 0, $incdec_ptr41 = 0, $target_3 = 0, $ch_3 = 0, $incdec_ptr47 = 0, $target_4 = 0, $add_ptr49 = 0, $source_0_lcssa = 0, $target_0_lcssa = 0, $result_2 = 0, label = 0;
$0 = HEAP32[$sourceStart >> 2] | 0;
$1 = HEAP32[$targetStart >> 2] | 0;
L95 : do {
if ($0 >>> 0 < $sourceEnd >>> 0) {
$cmp1 = ($flags | 0) == 0;
$target_034 = $1;
$source_035 = $0;
$result_036 = 0;
while (1) {
$incdec_ptr = $source_035 + 4 | 0;
$2 = HEAP32[$source_035 >> 2] | 0;
if ($cmp1) {
if (($2 - 55296 | 0) >>> 0 < 2048) {
$result_2 = 3;
$target_0_lcssa = $target_034;
$source_0_lcssa = $source_035;
break L95;
}
}
do {
if ($2 >>> 0 < 128) {
$result_1 = $result_036;
$bytesToWrite_0 = 1;
$ch_0 = $2;
} else {
if ($2 >>> 0 < 2048) {
$result_1 = $result_036;
$bytesToWrite_0 = 2;
$ch_0 = $2;
break;
}
if ($2 >>> 0 < 65536) {
$result_1 = $result_036;
$bytesToWrite_0 = 3;
$ch_0 = $2;
break;
}
$cmp15 = $2 >>> 0 < 1114112;
$result_1 = $cmp15 ? $result_036 : 3;
$bytesToWrite_0 = $cmp15 ? 4 : 3;
$ch_0 = $cmp15 ? $2 : 65533;
}
} while (0);
$add_ptr = $target_034 + $bytesToWrite_0 | 0;
if ($add_ptr >>> 0 > $targetEnd >>> 0) {
$result_2 = 2;
$target_0_lcssa = $target_034;
$source_0_lcssa = $source_035;
break L95;
}
if (($bytesToWrite_0 | 0) == 4) {
$incdec_ptr30 = $target_034 + ($bytesToWrite_0 - 1) | 0;
HEAP8[$incdec_ptr30] = ($ch_0 & 63 | 128) & 255;
$ch_1 = $ch_0 >>> 6;
$target_1 = $incdec_ptr30;
label = 82;
} else if (($bytesToWrite_0 | 0) == 3) {
$ch_1 = $ch_0;
$target_1 = $add_ptr;
label = 82;
} else if (($bytesToWrite_0 | 0) == 2) {
$ch_2 = $ch_0;
$target_2 = $add_ptr;
label = 83;
} else if (($bytesToWrite_0 | 0) == 1) {
$ch_3 = $ch_0;
$target_3 = $add_ptr;
label = 84;
} else {
$target_4 = $add_ptr;
}
if ((label | 0) == 82) {
label = 0;
$incdec_ptr35 = $target_1 - 1 | 0;
HEAP8[$incdec_ptr35] = ($ch_1 & 63 | 128) & 255;
$ch_2 = $ch_1 >>> 6;
$target_2 = $incdec_ptr35;
label = 83;
}
if ((label | 0) == 83) {
label = 0;
$incdec_ptr41 = $target_2 - 1 | 0;
HEAP8[$incdec_ptr41] = ($ch_2 & 63 | 128) & 255;
$ch_3 = $ch_2 >>> 6;
$target_3 = $incdec_ptr41;
label = 84;
}
if ((label | 0) == 84) {
label = 0;
$incdec_ptr47 = $target_3 - 1 | 0;
HEAP8[$incdec_ptr47] = (HEAPU8[11264 + $bytesToWrite_0 | 0] | 0 | $ch_3) & 255;
$target_4 = $incdec_ptr47;
}
$add_ptr49 = $target_4 + $bytesToWrite_0 | 0;
if ($incdec_ptr >>> 0 < $sourceEnd >>> 0) {
$target_034 = $add_ptr49;
$source_035 = $incdec_ptr;
$result_036 = $result_1;
} else {
$result_2 = $result_1;
$target_0_lcssa = $add_ptr49;
$source_0_lcssa = $incdec_ptr;
break;
}
}
} else {
$result_2 = 0;
$target_0_lcssa = $1;
$source_0_lcssa = $0;
}
} while (0);
HEAP32[$sourceStart >> 2] = $source_0_lcssa;
HEAP32[$targetStart >> 2] = $target_0_lcssa;
return $result_2 | 0;
}
function __ZNSt8bad_castC2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = 8080;
return;
}
function __ZNSt10bad_typeidC2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = 8144;
return;
}
function __ZN10ime_pinyin11Utf16Reader5closeEv($this) {
$this = $this | 0;
var $fp_ = 0, $0 = 0, $buffer_ = 0, $1 = 0;
$fp_ = $this | 0;
$0 = HEAP32[$fp_ >> 2] | 0;
if (($0 | 0) != 0) {
_fclose($0 | 0) | 0;
}
HEAP32[$fp_ >> 2] = 0;
$buffer_ = $this + 4 | 0;
$1 = HEAP32[$buffer_ >> 2] | 0;
if (($1 | 0) == 0) {
HEAP32[$buffer_ >> 2] = 0;
return 1;
}
__ZdaPv($1);
HEAP32[$buffer_ >> 2] = 0;
return 1;
}
function _isLegalUTF8Sequence($source, $sourceEnd) {
$source = $source | 0;
$sourceEnd = $sourceEnd | 0;
var $add = 0, $retval_0 = 0;
$add = (HEAP8[10984 + (HEAPU8[$source] | 0) | 0] | 0) + 1 | 0;
if (($source + $add | 0) >>> 0 > $sourceEnd >>> 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$retval_0 = __ZL11isLegalUTF8PKhi($source, $add) | 0;
return $retval_0 | 0;
}
function _ConvertUTF8toUTF16($sourceStart, $sourceEnd, $targetStart, $targetEnd, $flags) {
$sourceStart = $sourceStart | 0;
$sourceEnd = $sourceEnd | 0;
$targetStart = $targetStart | 0;
$targetEnd = $targetEnd | 0;
$flags = $flags | 0;
var $0 = 0, $1 = 0, $cmp46 = 0, $cmp61 = 0, $target_070 = 0, $source_069 = 0, $idxprom = 0, $conv1 = 0, $source_1 = 0, $ch_0 = 0, $source_2 = 0, $ch_1 = 0, $source_3 = 0, $ch_2 = 0, $source_4 = 0, $ch_3 = 0, $source_5 = 0, $ch_4 = 0, $source_6 = 0, $ch_5 = 0, $sub = 0, $target_0_be = 0, $add_ptr71 = 0, $sub79 = 0, $target_061 = 0, $source_7 = 0, $result_0 = 0, label = 0;
$0 = HEAP32[$sourceStart >> 2] | 0;
$1 = HEAP32[$targetStart >> 2] | 0;
L134 : do {
if ($0 >>> 0 < $sourceEnd >>> 0) {
$cmp46 = ($flags | 0) == 0;
$cmp61 = ($flags | 0) == 0;
$source_069 = $0;
$target_070 = $1;
L136 : while (1) {
$idxprom = HEAPU8[$source_069] | 0;
$conv1 = HEAP8[10984 + $idxprom | 0] & 65535;
if (($source_069 + $conv1 | 0) >>> 0 >= $sourceEnd >>> 0) {
$result_0 = 1;
$source_7 = $source_069;
$target_061 = $target_070;
break L134;
}
if ((__ZL11isLegalUTF8PKhi($source_069, $conv1 + 1 | 0) | 0) << 24 >> 24 == 0) {
$result_0 = 3;
$source_7 = $source_069;
$target_061 = $target_070;
break L134;
}
if (($conv1 | 0) == 5) {
$ch_0 = $idxprom << 6;
$source_1 = $source_069 + 1 | 0;
label = 107;
} else if (($conv1 | 0) == 4) {
$ch_0 = 0;
$source_1 = $source_069;
label = 107;
} else if (($conv1 | 0) == 3) {
$ch_1 = 0;
$source_2 = $source_069;
label = 108;
} else if (($conv1 | 0) == 2) {
$ch_2 = 0;
$source_3 = $source_069;
label = 109;
} else if (($conv1 | 0) == 1) {
$ch_3 = 0;
$source_4 = $source_069;
label = 110;
} else if (($conv1 | 0) == 0) {
$ch_4 = 0;
$source_5 = $source_069;
label = 111;
} else {
$ch_5 = 0;
$source_6 = $source_069;
}
if ((label | 0) == 107) {
label = 0;
$ch_1 = (HEAPU8[$source_1] | 0) + $ch_0 << 6;
$source_2 = $source_1 + 1 | 0;
label = 108;
}
if ((label | 0) == 108) {
label = 0;
$ch_2 = (HEAPU8[$source_2] | 0) + $ch_1 << 6;
$source_3 = $source_2 + 1 | 0;
label = 109;
}
if ((label | 0) == 109) {
label = 0;
$ch_3 = (HEAPU8[$source_3] | 0) + $ch_2 << 6;
$source_4 = $source_3 + 1 | 0;
label = 110;
}
if ((label | 0) == 110) {
label = 0;
$ch_4 = (HEAPU8[$source_4] | 0) + $ch_3 << 6;
$source_5 = $source_4 + 1 | 0;
label = 111;
}
if ((label | 0) == 111) {
label = 0;
$ch_5 = (HEAPU8[$source_5] | 0) + $ch_4 | 0;
$source_6 = $source_5 + 1 | 0;
}
$sub = $ch_5 - (HEAP32[11240 + ($conv1 << 2) >> 2] | 0) | 0;
if ($target_070 >>> 0 >= $targetEnd >>> 0) {
label = 113;
break;
}
do {
if ($sub >>> 0 < 65536) {
if (($sub - 55296 | 0) >>> 0 >= 2048) {
HEAP16[$target_070 >> 1] = $sub & 65535;
$target_0_be = $target_070 + 2 | 0;
break;
}
if ($cmp46) {
label = 117;
break L136;
}
HEAP16[$target_070 >> 1] = -3;
$target_0_be = $target_070 + 2 | 0;
} else {
if ($sub >>> 0 > 1114111) {
if ($cmp61) {
label = 122;
break L136;
}
HEAP16[$target_070 >> 1] = -3;
$target_0_be = $target_070 + 2 | 0;
break;
} else {
$add_ptr71 = $target_070 + 2 | 0;
if ($add_ptr71 >>> 0 >= $targetEnd >>> 0) {
label = 126;
break L136;
}
$sub79 = $sub - 65536 | 0;
HEAP16[$target_070 >> 1] = ($sub79 >>> 10) + 55296 & 65535;
HEAP16[$add_ptr71 >> 1] = ($sub79 & 1023 | 56320) & 65535;
$target_0_be = $target_070 + 4 | 0;
break;
}
}
} while (0);
if ($source_6 >>> 0 < $sourceEnd >>> 0) {
$source_069 = $source_6;
$target_070 = $target_0_be;
} else {
$result_0 = 0;
$source_7 = $source_6;
$target_061 = $target_0_be;
break L134;
}
}
if ((label | 0) == 113) {
$result_0 = 2;
$source_7 = $source_6 + ~$conv1 | 0;
$target_061 = $target_070;
break;
} else if ((label | 0) == 117) {
$result_0 = 3;
$source_7 = $source_6 + ~$conv1 | 0;
$target_061 = $target_070;
break;
} else if ((label | 0) == 122) {
$result_0 = 3;
$source_7 = $source_6 + ~$conv1 | 0;
$target_061 = $target_070;
break;
} else if ((label | 0) == 126) {
$result_0 = 2;
$source_7 = $source_6 + ~$conv1 | 0;
$target_061 = $target_070;
break;
}
} else {
$result_0 = 0;
$source_7 = $0;
$target_061 = $1;
}
} while (0);
HEAP32[$sourceStart >> 2] = $source_7;
HEAP32[$targetStart >> 2] = $target_061;
return $result_0 | 0;
}
function _ConvertUTF8toUTF32($sourceStart, $sourceEnd, $targetStart, $targetEnd, $flags) {
$sourceStart = $sourceStart | 0;
$sourceEnd = $sourceEnd | 0;
$targetStart = $targetStart | 0;
$targetEnd = $targetEnd | 0;
$flags = $flags | 0;
var $0 = 0, $1 = 0, $result_0_ph71 = 0, $target_0_ph70 = 0, $source_0_ph69 = 0, $target_053 = 0, $source_052 = 0, $idxprom = 0, $conv1 = 0, $source_1 = 0, $ch_0 = 0, $source_2 = 0, $ch_1 = 0, $source_3 = 0, $ch_2 = 0, $source_4 = 0, $ch_3 = 0, $source_5 = 0, $ch_4 = 0, $source_6 = 0, $ch_5 = 0, $sub = 0, $_not = 0, $target_0_be = 0, $incdec_ptr58 = 0, $target_046 = 0, $source_7 = 0, $result_1 = 0, label = 0;
$0 = HEAP32[$sourceStart >> 2] | 0;
$1 = HEAP32[$targetStart >> 2] | 0;
L174 : do {
if ($0 >>> 0 < $sourceEnd >>> 0) {
$source_0_ph69 = $0;
$target_0_ph70 = $1;
$result_0_ph71 = 0;
L176 : while (1) {
$source_052 = $source_0_ph69;
$target_053 = $target_0_ph70;
while (1) {
$idxprom = HEAPU8[$source_052] | 0;
$conv1 = HEAP8[10984 + $idxprom | 0] & 65535;
if (($source_052 + $conv1 | 0) >>> 0 >= $sourceEnd >>> 0) {
$result_1 = 1;
$source_7 = $source_052;
$target_046 = $target_053;
break L174;
}
if ((__ZL11isLegalUTF8PKhi($source_052, $conv1 + 1 | 0) | 0) << 24 >> 24 == 0) {
$result_1 = 3;
$source_7 = $source_052;
$target_046 = $target_053;
break L174;
}
if (($conv1 | 0) == 5) {
$ch_0 = $idxprom << 6;
$source_1 = $source_052 + 1 | 0;
label = 136;
} else if (($conv1 | 0) == 4) {
$ch_0 = 0;
$source_1 = $source_052;
label = 136;
} else if (($conv1 | 0) == 3) {
$ch_1 = 0;
$source_2 = $source_052;
label = 137;
} else if (($conv1 | 0) == 2) {
$ch_2 = 0;
$source_3 = $source_052;
label = 138;
} else if (($conv1 | 0) == 1) {
$ch_3 = 0;
$source_4 = $source_052;
label = 139;
} else if (($conv1 | 0) == 0) {
$ch_4 = 0;
$source_5 = $source_052;
label = 140;
} else {
$ch_5 = 0;
$source_6 = $source_052;
}
if ((label | 0) == 136) {
label = 0;
$ch_1 = (HEAPU8[$source_1] | 0) + $ch_0 << 6;
$source_2 = $source_1 + 1 | 0;
label = 137;
}
if ((label | 0) == 137) {
label = 0;
$ch_2 = (HEAPU8[$source_2] | 0) + $ch_1 << 6;
$source_3 = $source_2 + 1 | 0;
label = 138;
}
if ((label | 0) == 138) {
label = 0;
$ch_3 = (HEAPU8[$source_3] | 0) + $ch_2 << 6;
$source_4 = $source_3 + 1 | 0;
label = 139;
}
if ((label | 0) == 139) {
label = 0;
$ch_4 = (HEAPU8[$source_4] | 0) + $ch_3 << 6;
$source_5 = $source_4 + 1 | 0;
label = 140;
}
if ((label | 0) == 140) {
label = 0;
$ch_5 = (HEAPU8[$source_5] | 0) + $ch_4 | 0;
$source_6 = $source_5 + 1 | 0;
}
$sub = $ch_5 - (HEAP32[11240 + ($conv1 << 2) >> 2] | 0) | 0;
if ($target_053 >>> 0 >= $targetEnd >>> 0) {
label = 142;
break L176;
}
if ($sub >>> 0 >= 1114112) {
break;
}
$_not = ($sub - 55296 | 0) >>> 0 > 2047;
if (!($_not | ($flags | 0) != 0)) {
label = 145;
break L176;
}
$target_0_be = $target_053 + 4 | 0;
HEAP32[$target_053 >> 2] = $_not ? $sub : 65533;
if ($source_6 >>> 0 < $sourceEnd >>> 0) {
$source_052 = $source_6;
$target_053 = $target_0_be;
} else {
$result_1 = $result_0_ph71;
$source_7 = $source_6;
$target_046 = $target_0_be;
break L174;
}
}
$incdec_ptr58 = $target_053 + 4 | 0;
HEAP32[$target_053 >> 2] = 65533;
if ($source_6 >>> 0 < $sourceEnd >>> 0) {
$source_0_ph69 = $source_6;
$target_0_ph70 = $incdec_ptr58;
$result_0_ph71 = 3;
} else {
$result_1 = 3;
$source_7 = $source_6;
$target_046 = $incdec_ptr58;
break L174;
}
}
if ((label | 0) == 142) {
$result_1 = 2;
$source_7 = $source_6 + ~$conv1 | 0;
$target_046 = $target_053;
break;
} else if ((label | 0) == 145) {
$result_1 = 3;
$source_7 = $source_6 + ~$conv1 | 0;
$target_046 = $target_053;
break;
}
} else {
$result_1 = 0;
$source_7 = $0;
$target_046 = $1;
}
} while (0);
HEAP32[$sourceStart >> 2] = $source_7;
HEAP32[$targetStart >> 2] = $target_046;
return $result_1 | 0;
}
function __ZNSt9type_infoD0Ev($this) {
$this = $this | 0;
__ZdlPv($this);
return;
}
function __ZNSt8bad_castD0Ev($this) {
$this = $this | 0;
__ZdlPv($this);
return;
}
function __ZNSt10bad_typeidD0Ev($this) {
$this = $this | 0;
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv116__shim_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv116__shim_type_infoD2Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
return;
}
function __ZN10__cxxabiv123__fundamental_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv117__array_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv120__function_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv116__enum_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZNK10__cxxabiv117__array_type_info9can_catchEPKNS_16__shim_type_infoERPv($this, $0, $1) {
$this = $this | 0;
$0 = $0 | 0;
$1 = $1 | 0;
return 0;
}
function __ZNK10__cxxabiv120__function_type_info9can_catchEPKNS_16__shim_type_infoERPv($this, $0, $1) {
$this = $this | 0;
$0 = $0 | 0;
$1 = $1 | 0;
return 0;
}
function __ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv($this, $thrown_type, $0) {
$this = $this | 0;
$thrown_type = $thrown_type | 0;
$0 = $0 | 0;
return ($this | 0) == ($thrown_type | 0) | 0;
}
function __ZNK10__cxxabiv116__enum_type_info9can_catchEPKNS_16__shim_type_infoERPv($this, $thrown_type, $0) {
$this = $this | 0;
$thrown_type = $thrown_type | 0;
$0 = $0 | 0;
return ($this | 0) == ($thrown_type | 0) | 0;
}
function __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi($this, $info, $adjustedPtr, $path_below) {
$this = $this | 0;
$info = $info | 0;
$adjustedPtr = $adjustedPtr | 0;
$path_below = $path_below | 0;
var $dst_ptr_leading_to_static_ptr = 0, $0 = 0, $path_dst_ptr_to_static_ptr6 = 0, $number_to_static_ptr11 = 0;
$dst_ptr_leading_to_static_ptr = $info + 16 | 0;
$0 = HEAP32[$dst_ptr_leading_to_static_ptr >> 2] | 0;
if (($0 | 0) == 0) {
HEAP32[$dst_ptr_leading_to_static_ptr >> 2] = $adjustedPtr;
HEAP32[$info + 24 >> 2] = $path_below;
HEAP32[$info + 36 >> 2] = 1;
return;
}
if (($0 | 0) != ($adjustedPtr | 0)) {
$number_to_static_ptr11 = $info + 36 | 0;
HEAP32[$number_to_static_ptr11 >> 2] = (HEAP32[$number_to_static_ptr11 >> 2] | 0) + 1;
HEAP32[$info + 24 >> 2] = 2;
HEAP8[$info + 54 | 0] = 1;
return;
}
$path_dst_ptr_to_static_ptr6 = $info + 24 | 0;
if ((HEAP32[$path_dst_ptr_to_static_ptr6 >> 2] | 0) != 2) {
return;
}
HEAP32[$path_dst_ptr_to_static_ptr6 >> 2] = $path_below;
return;
}
function __ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($this, $info, $adjustedPtr, $path_below) {
$this = $this | 0;
$info = $info | 0;
$adjustedPtr = $adjustedPtr | 0;
$path_below = $path_below | 0;
var $dst_ptr_leading_to_static_ptr_i = 0, $1 = 0, $path_dst_ptr_to_static_ptr6_i = 0, $number_to_static_ptr11_i = 0;
if ((HEAP32[$info + 8 >> 2] | 0) != ($this | 0)) {
return;
}
$dst_ptr_leading_to_static_ptr_i = $info + 16 | 0;
$1 = HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] | 0;
if (($1 | 0) == 0) {
HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] = $adjustedPtr;
HEAP32[$info + 24 >> 2] = $path_below;
HEAP32[$info + 36 >> 2] = 1;
return;
}
if (($1 | 0) != ($adjustedPtr | 0)) {
$number_to_static_ptr11_i = $info + 36 | 0;
HEAP32[$number_to_static_ptr11_i >> 2] = (HEAP32[$number_to_static_ptr11_i >> 2] | 0) + 1;
HEAP32[$info + 24 >> 2] = 2;
HEAP8[$info + 54 | 0] = 1;
return;
}
$path_dst_ptr_to_static_ptr6_i = $info + 24 | 0;
if ((HEAP32[$path_dst_ptr_to_static_ptr6_i >> 2] | 0) != 2) {
return;
}
HEAP32[$path_dst_ptr_to_static_ptr6_i >> 2] = $path_below;
return;
}
function __ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv($this, $thrown_type, $0) {
$this = $this | 0;
$thrown_type = $thrown_type | 0;
$0 = $0 | 0;
var $2 = 0;
$2 = $thrown_type | 0;
return ($this | 0) == ($2 | 0) | ($2 | 0) == 10880 | 0;
}
function __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i($this, $info, $dst_ptr, $current_ptr, $path_below) {
$this = $this | 0;
$info = $info | 0;
$dst_ptr = $dst_ptr | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
var $dst_ptr_leading_to_static_ptr = 0, $1 = 0, $path_dst_ptr_to_static_ptr12 = 0, $3 = 0, $4 = 0, $number_to_static_ptr26 = 0;
HEAP8[$info + 53 | 0] = 1;
if ((HEAP32[$info + 4 >> 2] | 0) != ($current_ptr | 0)) {
return;
}
HEAP8[$info + 52 | 0] = 1;
$dst_ptr_leading_to_static_ptr = $info + 16 | 0;
$1 = HEAP32[$dst_ptr_leading_to_static_ptr >> 2] | 0;
if (($1 | 0) == 0) {
HEAP32[$dst_ptr_leading_to_static_ptr >> 2] = $dst_ptr;
HEAP32[$info + 24 >> 2] = $path_below;
HEAP32[$info + 36 >> 2] = 1;
if (!((HEAP32[$info + 48 >> 2] | 0) == 1 & ($path_below | 0) == 1)) {
return;
}
HEAP8[$info + 54 | 0] = 1;
return;
}
if (($1 | 0) != ($dst_ptr | 0)) {
$number_to_static_ptr26 = $info + 36 | 0;
HEAP32[$number_to_static_ptr26 >> 2] = (HEAP32[$number_to_static_ptr26 >> 2] | 0) + 1;
HEAP8[$info + 54 | 0] = 1;
return;
}
$path_dst_ptr_to_static_ptr12 = $info + 24 | 0;
$3 = HEAP32[$path_dst_ptr_to_static_ptr12 >> 2] | 0;
if (($3 | 0) == 2) {
HEAP32[$path_dst_ptr_to_static_ptr12 >> 2] = $path_below;
$4 = $path_below;
} else {
$4 = $3;
}
if (!((HEAP32[$info + 48 >> 2] | 0) == 1 & ($4 | 0) == 1)) {
return;
}
HEAP8[$info + 54 | 0] = 1;
return;
}
function __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi($this, $info, $current_ptr, $path_below) {
$this = $this | 0;
$info = $info | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
var $path_dynamic_ptr_to_static_ptr = 0;
if ((HEAP32[$info + 4 >> 2] | 0) != ($current_ptr | 0)) {
return;
}
$path_dynamic_ptr_to_static_ptr = $info + 28 | 0;
if ((HEAP32[$path_dynamic_ptr_to_static_ptr >> 2] | 0) == 1) {
return;
}
HEAP32[$path_dynamic_ptr_to_static_ptr >> 2] = $path_below;
return;
}
function __ZN10__cxxabiv117__class_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv120__si_class_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv121__vmi_class_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv117__pbase_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv119__pointer_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZN10__cxxabiv129__pointer_to_member_type_infoD0Ev($this) {
$this = $this | 0;
__ZNSt9type_infoD2Ev($this | 0);
__ZdlPv($this);
return;
}
function __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv($this, $thrown_type, $adjustedPtr) {
$this = $this | 0;
$thrown_type = $thrown_type | 0;
$adjustedPtr = $adjustedPtr | 0;
var $info = 0, $4 = 0, $5 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 56 | 0;
$info = sp | 0;
if (($this | 0) == ($thrown_type | 0)) {
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
if (($thrown_type | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
$4 = ___dynamic_cast($thrown_type, 10840, 10808, -1) | 0;
$5 = $4;
if (($4 | 0) == 0) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
_memset($info | 0, 0, 56);
HEAP32[$info >> 2] = $5;
HEAP32[$info + 8 >> 2] = $this;
HEAP32[$info + 12 >> 2] = -1;
HEAP32[$info + 48 >> 2] = 1;
FUNCTION_TABLE_viiii[HEAP32[(HEAP32[$4 >> 2] | 0) + 28 >> 2] & 7]($5, $info, HEAP32[$adjustedPtr >> 2] | 0, 1);
if ((HEAP32[$info + 24 >> 2] | 0) != 1) {
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP32[$adjustedPtr >> 2] = HEAP32[$info + 16 >> 2];
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
}
function __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($this, $info, $adjustedPtr, $path_below) {
$this = $this | 0;
$info = $info | 0;
$adjustedPtr = $adjustedPtr | 0;
$path_below = $path_below | 0;
var $dst_ptr_leading_to_static_ptr_i = 0, $3 = 0, $path_dst_ptr_to_static_ptr6_i = 0, $number_to_static_ptr11_i = 0, $6 = 0;
if (($this | 0) != (HEAP32[$info + 8 >> 2] | 0)) {
$6 = HEAP32[$this + 8 >> 2] | 0;
FUNCTION_TABLE_viiii[HEAP32[(HEAP32[$6 >> 2] | 0) + 28 >> 2] & 7]($6, $info, $adjustedPtr, $path_below);
return;
}
$dst_ptr_leading_to_static_ptr_i = $info + 16 | 0;
$3 = HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] | 0;
if (($3 | 0) == 0) {
HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] = $adjustedPtr;
HEAP32[$info + 24 >> 2] = $path_below;
HEAP32[$info + 36 >> 2] = 1;
return;
}
if (($3 | 0) != ($adjustedPtr | 0)) {
$number_to_static_ptr11_i = $info + 36 | 0;
HEAP32[$number_to_static_ptr11_i >> 2] = (HEAP32[$number_to_static_ptr11_i >> 2] | 0) + 1;
HEAP32[$info + 24 >> 2] = 2;
HEAP8[$info + 54 | 0] = 1;
return;
}
$path_dst_ptr_to_static_ptr6_i = $info + 24 | 0;
if ((HEAP32[$path_dst_ptr_to_static_ptr6_i >> 2] | 0) != 2) {
return;
}
HEAP32[$path_dst_ptr_to_static_ptr6_i >> 2] = $path_below;
return;
}
function __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($this, $info, $adjustedPtr, $path_below) {
$this = $this | 0;
$info = $info | 0;
$adjustedPtr = $adjustedPtr | 0;
$path_below = $path_below | 0;
var $0 = 0, $shr = 0, $offset_to_base_0 = 0, $5 = 0;
$0 = HEAP32[$this + 4 >> 2] | 0;
$shr = $0 >> 8;
if (($0 & 1 | 0) == 0) {
$offset_to_base_0 = $shr;
} else {
$offset_to_base_0 = HEAP32[(HEAP32[$adjustedPtr >> 2] | 0) + $shr >> 2] | 0;
}
$5 = HEAP32[$this >> 2] | 0;
FUNCTION_TABLE_viiii[HEAP32[(HEAP32[$5 >> 2] | 0) + 28 >> 2] & 7]($5, $info, $adjustedPtr + $offset_to_base_0 | 0, ($0 & 2 | 0) != 0 ? $path_below : 2);
return;
}
function __ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($this, $info, $adjustedPtr, $path_below) {
$this = $this | 0;
$info = $info | 0;
$adjustedPtr = $adjustedPtr | 0;
$path_below = $path_below | 0;
var $dst_ptr_leading_to_static_ptr_i = 0, $3 = 0, $path_dst_ptr_to_static_ptr6_i = 0, $number_to_static_ptr11_i = 0, $6 = 0, $add_ptr = 0, $7 = 0, $shr_i16 = 0, $offset_to_base_0_i21 = 0, $12 = 0, $search_done = 0, $15 = 0, $p_0 = 0, $16 = 0, $shr_i = 0, $offset_to_base_0_i = 0, $20 = 0, $incdec_ptr6 = 0, label = 0;
if (($this | 0) == (HEAP32[$info + 8 >> 2] | 0)) {
$dst_ptr_leading_to_static_ptr_i = $info + 16 | 0;
$3 = HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] | 0;
if (($3 | 0) == 0) {
HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] = $adjustedPtr;
HEAP32[$info + 24 >> 2] = $path_below;
HEAP32[$info + 36 >> 2] = 1;
return;
}
if (($3 | 0) != ($adjustedPtr | 0)) {
$number_to_static_ptr11_i = $info + 36 | 0;
HEAP32[$number_to_static_ptr11_i >> 2] = (HEAP32[$number_to_static_ptr11_i >> 2] | 0) + 1;
HEAP32[$info + 24 >> 2] = 2;
HEAP8[$info + 54 | 0] = 1;
return;
}
$path_dst_ptr_to_static_ptr6_i = $info + 24 | 0;
if ((HEAP32[$path_dst_ptr_to_static_ptr6_i >> 2] | 0) != 2) {
return;
}
HEAP32[$path_dst_ptr_to_static_ptr6_i >> 2] = $path_below;
return;
}
$6 = HEAP32[$this + 12 >> 2] | 0;
$add_ptr = $this + 16 + ($6 << 3) | 0;
$7 = HEAP32[$this + 20 >> 2] | 0;
$shr_i16 = $7 >> 8;
if (($7 & 1 | 0) == 0) {
$offset_to_base_0_i21 = $shr_i16;
} else {
$offset_to_base_0_i21 = HEAP32[(HEAP32[$adjustedPtr >> 2] | 0) + $shr_i16 >> 2] | 0;
}
$12 = HEAP32[$this + 16 >> 2] | 0;
FUNCTION_TABLE_viiii[HEAP32[(HEAP32[$12 >> 2] | 0) + 28 >> 2] & 7]($12, $info, $adjustedPtr + $offset_to_base_0_i21 | 0, ($7 & 2 | 0) != 0 ? $path_below : 2);
if (($6 | 0) <= 1) {
return;
}
$search_done = $info + 54 | 0;
$15 = $adjustedPtr;
$p_0 = $this + 24 | 0;
while (1) {
$16 = HEAP32[$p_0 + 4 >> 2] | 0;
$shr_i = $16 >> 8;
if (($16 & 1 | 0) == 0) {
$offset_to_base_0_i = $shr_i;
} else {
$offset_to_base_0_i = HEAP32[(HEAP32[$15 >> 2] | 0) + $shr_i >> 2] | 0;
}
$20 = HEAP32[$p_0 >> 2] | 0;
FUNCTION_TABLE_viiii[HEAP32[(HEAP32[$20 >> 2] | 0) + 28 >> 2] & 7]($20, $info, $adjustedPtr + $offset_to_base_0_i | 0, ($16 & 2 | 0) != 0 ? $path_below : 2);
if ((HEAP8[$search_done] & 1) != 0) {
label = 266;
break;
}
$incdec_ptr6 = $p_0 + 8 | 0;
if ($incdec_ptr6 >>> 0 < $add_ptr >>> 0) {
$p_0 = $incdec_ptr6;
} else {
label = 267;
break;
}
}
if ((label | 0) == 266) {
return;
} else if ((label | 0) == 267) {
return;
}
}
function __ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv($this, $thrown_type, $adjustedPtr) {
$this = $this | 0;
$thrown_type = $thrown_type | 0;
$adjustedPtr = $adjustedPtr | 0;
var $info = 0, $4 = 0, $7 = 0, $11 = 0, $13 = 0, $17 = 0, $19 = 0, $22 = 0, $23 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 56 | 0;
$info = sp | 0;
HEAP32[$adjustedPtr >> 2] = HEAP32[HEAP32[$adjustedPtr >> 2] >> 2];
$4 = $thrown_type | 0;
do {
if (($this | 0) == ($4 | 0) | ($4 | 0) == 10880) {
$retval_0 = 1;
} else {
if (($thrown_type | 0) == 0) {
$retval_0 = 0;
break;
}
$7 = ___dynamic_cast($thrown_type, 10840, 10776, -1) | 0;
if (($7 | 0) == 0) {
$retval_0 = 0;
break;
}
if ((HEAP32[$7 + 8 >> 2] & ~HEAP32[$this + 8 >> 2] | 0) != 0) {
$retval_0 = 0;
break;
}
$11 = HEAP32[$this + 12 >> 2] | 0;
$13 = $7 + 12 | 0;
if (($11 | 0) == (HEAP32[$13 >> 2] | 0) | ($11 | 0) == 9912) {
$retval_0 = 1;
break;
}
if (($11 | 0) == 0) {
$retval_0 = 0;
break;
}
$17 = ___dynamic_cast($11, 10840, 10808, -1) | 0;
if (($17 | 0) == 0) {
$retval_0 = 0;
break;
}
$19 = HEAP32[$13 >> 2] | 0;
if (($19 | 0) == 0) {
$retval_0 = 0;
break;
}
$22 = ___dynamic_cast($19, 10840, 10808, -1) | 0;
$23 = $22;
if (($22 | 0) == 0) {
$retval_0 = 0;
break;
}
_memset($info | 0, 0, 56);
HEAP32[$info >> 2] = $23;
HEAP32[$info + 8 >> 2] = $17;
HEAP32[$info + 12 >> 2] = -1;
HEAP32[$info + 48 >> 2] = 1;
FUNCTION_TABLE_viiii[HEAP32[(HEAP32[$22 >> 2] | 0) + 28 >> 2] & 7]($23, $info, HEAP32[$adjustedPtr >> 2] | 0, 1);
if ((HEAP32[$info + 24 >> 2] | 0) != 1) {
$retval_0 = 0;
break;
}
HEAP32[$adjustedPtr >> 2] = HEAP32[$info + 16 >> 2];
$retval_0 = 1;
}
} while (0);
STACKTOP = sp;
return $retval_0 | 0;
}
function ___dynamic_cast($static_ptr, $static_type, $dst_type, $src2dst_offset) {
$static_ptr = $static_ptr | 0;
$static_type = $static_type | 0;
$dst_type = $dst_type | 0;
$src2dst_offset = $src2dst_offset | 0;
var $info = 0, $1 = 0, $add_ptr = 0, $4 = 0, $5 = 0, $dst_ptr_leading_to_static_ptr = 0, $dst_ptr_not_leading_to_static_ptr = 0, $path_dst_ptr_to_static_ptr = 0, $path_dynamic_ptr_to_static_ptr = 0, $path_dynamic_ptr_to_dst_ptr = 0, $number_to_dst_ptr = 0, $14 = 0, $dst_ptr_0 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 56 | 0;
$info = sp | 0;
$1 = HEAP32[$static_ptr >> 2] | 0;
$add_ptr = $static_ptr + (HEAP32[$1 - 8 >> 2] | 0) | 0;
$4 = HEAP32[$1 - 4 >> 2] | 0;
$5 = $4;
HEAP32[$info >> 2] = $dst_type;
HEAP32[$info + 4 >> 2] = $static_ptr;
HEAP32[$info + 8 >> 2] = $static_type;
HEAP32[$info + 12 >> 2] = $src2dst_offset;
$dst_ptr_leading_to_static_ptr = $info + 16 | 0;
$dst_ptr_not_leading_to_static_ptr = $info + 20 | 0;
$path_dst_ptr_to_static_ptr = $info + 24 | 0;
$path_dynamic_ptr_to_static_ptr = $info + 28 | 0;
$path_dynamic_ptr_to_dst_ptr = $info + 32 | 0;
$number_to_dst_ptr = $info + 40 | 0;
_memset($dst_ptr_leading_to_static_ptr | 0, 0, 39);
if (($4 | 0) == ($dst_type | 0)) {
HEAP32[$info + 48 >> 2] = 1;
FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[$4 >> 2] | 0) + 20 >> 2] & 7]($5, $info, $add_ptr, $add_ptr, 1, 0);
STACKTOP = sp;
return ((HEAP32[$path_dst_ptr_to_static_ptr >> 2] | 0) == 1 ? $add_ptr : 0) | 0;
}
FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[$4 >> 2] | 0) + 24 >> 2] & 7]($5, $info, $add_ptr, 1, 0);
$14 = HEAP32[$info + 36 >> 2] | 0;
if (($14 | 0) == 0) {
if ((HEAP32[$number_to_dst_ptr >> 2] | 0) != 1) {
$dst_ptr_0 = 0;
STACKTOP = sp;
return $dst_ptr_0 | 0;
}
if ((HEAP32[$path_dynamic_ptr_to_static_ptr >> 2] | 0) != 1) {
$dst_ptr_0 = 0;
STACKTOP = sp;
return $dst_ptr_0 | 0;
}
$dst_ptr_0 = (HEAP32[$path_dynamic_ptr_to_dst_ptr >> 2] | 0) == 1 ? HEAP32[$dst_ptr_not_leading_to_static_ptr >> 2] | 0 : 0;
STACKTOP = sp;
return $dst_ptr_0 | 0;
} else if (($14 | 0) == 1) {
do {
if ((HEAP32[$path_dst_ptr_to_static_ptr >> 2] | 0) != 1) {
if ((HEAP32[$number_to_dst_ptr >> 2] | 0) != 0) {
$dst_ptr_0 = 0;
STACKTOP = sp;
return $dst_ptr_0 | 0;
}
if ((HEAP32[$path_dynamic_ptr_to_static_ptr >> 2] | 0) != 1) {
$dst_ptr_0 = 0;
STACKTOP = sp;
return $dst_ptr_0 | 0;
}
if ((HEAP32[$path_dynamic_ptr_to_dst_ptr >> 2] | 0) == 1) {
break;
} else {
$dst_ptr_0 = 0;
}
STACKTOP = sp;
return $dst_ptr_0 | 0;
}
} while (0);
$dst_ptr_0 = HEAP32[$dst_ptr_leading_to_static_ptr >> 2] | 0;
STACKTOP = sp;
return $dst_ptr_0 | 0;
} else {
$dst_ptr_0 = 0;
STACKTOP = sp;
return $dst_ptr_0 | 0;
}
return 0;
}
function __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($this, $info, $current_ptr, $path_below, $use_strcmp) {
$this = $this | 0;
$info = $info | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
$use_strcmp = $use_strcmp | 0;
var $path_dynamic_ptr_to_static_ptr_i = 0, $dst_ptr_not_leading_to_static_ptr = 0, $number_to_dst_ptr = 0;
if ((HEAP32[$info + 8 >> 2] | 0) == ($this | 0)) {
if ((HEAP32[$info + 4 >> 2] | 0) != ($current_ptr | 0)) {
return;
}
$path_dynamic_ptr_to_static_ptr_i = $info + 28 | 0;
if ((HEAP32[$path_dynamic_ptr_to_static_ptr_i >> 2] | 0) == 1) {
return;
}
HEAP32[$path_dynamic_ptr_to_static_ptr_i >> 2] = $path_below;
return;
}
if ((HEAP32[$info >> 2] | 0) != ($this | 0)) {
return;
}
do {
if ((HEAP32[$info + 16 >> 2] | 0) != ($current_ptr | 0)) {
$dst_ptr_not_leading_to_static_ptr = $info + 20 | 0;
if ((HEAP32[$dst_ptr_not_leading_to_static_ptr >> 2] | 0) == ($current_ptr | 0)) {
break;
}
HEAP32[$info + 32 >> 2] = $path_below;
HEAP32[$dst_ptr_not_leading_to_static_ptr >> 2] = $current_ptr;
$number_to_dst_ptr = $info + 40 | 0;
HEAP32[$number_to_dst_ptr >> 2] = (HEAP32[$number_to_dst_ptr >> 2] | 0) + 1;
do {
if ((HEAP32[$info + 36 >> 2] | 0) == 1) {
if ((HEAP32[$info + 24 >> 2] | 0) != 2) {
break;
}
HEAP8[$info + 54 | 0] = 1;
}
} while (0);
HEAP32[$info + 44 >> 2] = 4;
return;
}
} while (0);
if (($path_below | 0) != 1) {
return;
}
HEAP32[$info + 32 >> 2] = 1;
return;
}
function __ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($this, $info, $current_ptr, $path_below, $use_strcmp) {
$this = $this | 0;
$info = $info | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
$use_strcmp = $use_strcmp | 0;
var $0 = 0, $path_dynamic_ptr_to_static_ptr_i = 0, $dst_ptr_not_leading_to_static_ptr = 0, $is_dst_type_derived_from_static_type = 0, $10 = 0, $add_ptr = 0, $found_our_static_ptr = 0, $found_any_static_type = 0, $search_done = 0, $__flags34 = 0, $path_dst_ptr_to_static_ptr = 0, $11 = 0, $is_dst_type_derived_from_static_type13_0_off0140 = 0, $p_0139 = 0, $does_dst_type_point_to_our_static_type_0_off0138 = 0, $12 = 0, $shr_i107 = 0, $offset_to_base_0_i112 = 0, $16 = 0, $does_dst_type_point_to_our_static_type_1_off0 = 0, $is_dst_type_derived_from_static_type13_1_off0 = 0, $incdec_ptr = 0, $does_dst_type_point_to_our_static_type_0_off0_lcssa = 0, $is_dst_type_derived_from_static_type13_2_off0 = 0, $is_dst_type_derived_from_static_type13_2_off0146 = 0, $number_to_dst_ptr = 0, $is_dst_type_derived_from_static_type13_2_off0147 = 0, $33 = 0, $add_ptr64 = 0, $34 = 0, $shr_i121 = 0, $offset_to_base_0_i126 = 0, $39 = 0, $incdec_ptr69 = 0, $42 = 0, $number_to_static_ptr76 = 0, $search_done79 = 0, $44 = 0, $p65_0 = 0, $47 = 0, $shr_i92 = 0, $offset_to_base_0_i97 = 0, $51 = 0, $incdec_ptr84 = 0, $path_dst_ptr_to_static_ptr99 = 0, $search_done92 = 0, $54 = 0, $search_done110 = 0, $55 = 0, $p65_1 = 0, $60 = 0, $shr_i76 = 0, $offset_to_base_0_i81 = 0, $64 = 0, $incdec_ptr105 = 0, $p65_2 = 0, $70 = 0, $shr_i = 0, $offset_to_base_0_i = 0, $74 = 0, $incdec_ptr120 = 0, label = 0;
$0 = $this | 0;
if (($0 | 0) == (HEAP32[$info + 8 >> 2] | 0)) {
if ((HEAP32[$info + 4 >> 2] | 0) != ($current_ptr | 0)) {
return;
}
$path_dynamic_ptr_to_static_ptr_i = $info + 28 | 0;
if ((HEAP32[$path_dynamic_ptr_to_static_ptr_i >> 2] | 0) == 1) {
return;
}
HEAP32[$path_dynamic_ptr_to_static_ptr_i >> 2] = $path_below;
return;
}
if (($0 | 0) == (HEAP32[$info >> 2] | 0)) {
do {
if ((HEAP32[$info + 16 >> 2] | 0) != ($current_ptr | 0)) {
$dst_ptr_not_leading_to_static_ptr = $info + 20 | 0;
if ((HEAP32[$dst_ptr_not_leading_to_static_ptr >> 2] | 0) == ($current_ptr | 0)) {
break;
}
HEAP32[$info + 32 >> 2] = $path_below;
$is_dst_type_derived_from_static_type = $info + 44 | 0;
if ((HEAP32[$is_dst_type_derived_from_static_type >> 2] | 0) == 4) {
return;
}
$10 = HEAP32[$this + 12 >> 2] | 0;
$add_ptr = $this + 16 + ($10 << 3) | 0;
L433 : do {
if (($10 | 0) > 0) {
$found_our_static_ptr = $info + 52 | 0;
$found_any_static_type = $info + 53 | 0;
$search_done = $info + 54 | 0;
$__flags34 = $this + 8 | 0;
$path_dst_ptr_to_static_ptr = $info + 24 | 0;
$11 = $current_ptr;
$does_dst_type_point_to_our_static_type_0_off0138 = 0;
$p_0139 = $this + 16 | 0;
$is_dst_type_derived_from_static_type13_0_off0140 = 0;
L435 : while (1) {
HEAP8[$found_our_static_ptr] = 0;
HEAP8[$found_any_static_type] = 0;
$12 = HEAP32[$p_0139 + 4 >> 2] | 0;
$shr_i107 = $12 >> 8;
if (($12 & 1 | 0) == 0) {
$offset_to_base_0_i112 = $shr_i107;
} else {
$offset_to_base_0_i112 = HEAP32[(HEAP32[$11 >> 2] | 0) + $shr_i107 >> 2] | 0;
}
$16 = HEAP32[$p_0139 >> 2] | 0;
FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[$16 >> 2] | 0) + 20 >> 2] & 7]($16, $info, $current_ptr, $current_ptr + $offset_to_base_0_i112 | 0, 2 - ($12 >>> 1 & 1) | 0, $use_strcmp);
if ((HEAP8[$search_done] & 1) != 0) {
$is_dst_type_derived_from_static_type13_2_off0 = $is_dst_type_derived_from_static_type13_0_off0140;
$does_dst_type_point_to_our_static_type_0_off0_lcssa = $does_dst_type_point_to_our_static_type_0_off0138;
break;
}
do {
if ((HEAP8[$found_any_static_type] & 1) == 0) {
$is_dst_type_derived_from_static_type13_1_off0 = $is_dst_type_derived_from_static_type13_0_off0140;
$does_dst_type_point_to_our_static_type_1_off0 = $does_dst_type_point_to_our_static_type_0_off0138;
} else {
if ((HEAP8[$found_our_static_ptr] & 1) == 0) {
if ((HEAP32[$__flags34 >> 2] & 1 | 0) == 0) {
$is_dst_type_derived_from_static_type13_2_off0 = 1;
$does_dst_type_point_to_our_static_type_0_off0_lcssa = $does_dst_type_point_to_our_static_type_0_off0138;
break L435;
} else {
$is_dst_type_derived_from_static_type13_1_off0 = 1;
$does_dst_type_point_to_our_static_type_1_off0 = $does_dst_type_point_to_our_static_type_0_off0138;
break;
}
}
if ((HEAP32[$path_dst_ptr_to_static_ptr >> 2] | 0) == 1) {
label = 347;
break L433;
}
if ((HEAP32[$__flags34 >> 2] & 2 | 0) == 0) {
label = 347;
break L433;
} else {
$is_dst_type_derived_from_static_type13_1_off0 = 1;
$does_dst_type_point_to_our_static_type_1_off0 = 1;
}
}
} while (0);
$incdec_ptr = $p_0139 + 8 | 0;
if ($incdec_ptr >>> 0 < $add_ptr >>> 0) {
$does_dst_type_point_to_our_static_type_0_off0138 = $does_dst_type_point_to_our_static_type_1_off0;
$p_0139 = $incdec_ptr;
$is_dst_type_derived_from_static_type13_0_off0140 = $is_dst_type_derived_from_static_type13_1_off0;
} else {
$is_dst_type_derived_from_static_type13_2_off0 = $is_dst_type_derived_from_static_type13_1_off0;
$does_dst_type_point_to_our_static_type_0_off0_lcssa = $does_dst_type_point_to_our_static_type_1_off0;
break;
}
}
if ($does_dst_type_point_to_our_static_type_0_off0_lcssa) {
$is_dst_type_derived_from_static_type13_2_off0147 = $is_dst_type_derived_from_static_type13_2_off0;
label = 346;
} else {
$is_dst_type_derived_from_static_type13_2_off0146 = $is_dst_type_derived_from_static_type13_2_off0;
label = 343;
}
} else {
$is_dst_type_derived_from_static_type13_2_off0146 = 0;
label = 343;
}
} while (0);
do {
if ((label | 0) == 343) {
HEAP32[$dst_ptr_not_leading_to_static_ptr >> 2] = $current_ptr;
$number_to_dst_ptr = $info + 40 | 0;
HEAP32[$number_to_dst_ptr >> 2] = (HEAP32[$number_to_dst_ptr >> 2] | 0) + 1;
if ((HEAP32[$info + 36 >> 2] | 0) != 1) {
$is_dst_type_derived_from_static_type13_2_off0147 = $is_dst_type_derived_from_static_type13_2_off0146;
label = 346;
break;
}
if ((HEAP32[$info + 24 >> 2] | 0) != 2) {
$is_dst_type_derived_from_static_type13_2_off0147 = $is_dst_type_derived_from_static_type13_2_off0146;
label = 346;
break;
}
HEAP8[$info + 54 | 0] = 1;
if ($is_dst_type_derived_from_static_type13_2_off0146) {
label = 347;
} else {
label = 348;
}
}
} while (0);
if ((label | 0) == 346) {
if ($is_dst_type_derived_from_static_type13_2_off0147) {
label = 347;
} else {
label = 348;
}
}
if ((label | 0) == 347) {
HEAP32[$is_dst_type_derived_from_static_type >> 2] = 3;
return;
} else if ((label | 0) == 348) {
HEAP32[$is_dst_type_derived_from_static_type >> 2] = 4;
return;
}
}
} while (0);
if (($path_below | 0) != 1) {
return;
}
HEAP32[$info + 32 >> 2] = 1;
return;
}
$33 = HEAP32[$this + 12 >> 2] | 0;
$add_ptr64 = $this + 16 + ($33 << 3) | 0;
$34 = HEAP32[$this + 20 >> 2] | 0;
$shr_i121 = $34 >> 8;
if (($34 & 1 | 0) == 0) {
$offset_to_base_0_i126 = $shr_i121;
} else {
$offset_to_base_0_i126 = HEAP32[(HEAP32[$current_ptr >> 2] | 0) + $shr_i121 >> 2] | 0;
}
$39 = HEAP32[$this + 16 >> 2] | 0;
FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[$39 >> 2] | 0) + 24 >> 2] & 7]($39, $info, $current_ptr + $offset_to_base_0_i126 | 0, ($34 & 2 | 0) != 0 ? $path_below : 2, $use_strcmp);
$incdec_ptr69 = $this + 24 | 0;
if (($33 | 0) <= 1) {
return;
}
$42 = HEAP32[$this + 8 >> 2] | 0;
do {
if (($42 & 2 | 0) == 0) {
$number_to_static_ptr76 = $info + 36 | 0;
if ((HEAP32[$number_to_static_ptr76 >> 2] | 0) == 1) {
break;
}
if (($42 & 1 | 0) == 0) {
$search_done110 = $info + 54 | 0;
$55 = $current_ptr;
$p65_2 = $incdec_ptr69;
while (1) {
if ((HEAP8[$search_done110] & 1) != 0) {
label = 388;
break;
}
if ((HEAP32[$number_to_static_ptr76 >> 2] | 0) == 1) {
label = 389;
break;
}
$70 = HEAP32[$p65_2 + 4 >> 2] | 0;
$shr_i = $70 >> 8;
if (($70 & 1 | 0) == 0) {
$offset_to_base_0_i = $shr_i;
} else {
$offset_to_base_0_i = HEAP32[(HEAP32[$55 >> 2] | 0) + $shr_i >> 2] | 0;
}
$74 = HEAP32[$p65_2 >> 2] | 0;
FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[$74 >> 2] | 0) + 24 >> 2] & 7]($74, $info, $current_ptr + $offset_to_base_0_i | 0, ($70 & 2 | 0) != 0 ? $path_below : 2, $use_strcmp);
$incdec_ptr120 = $p65_2 + 8 | 0;
if ($incdec_ptr120 >>> 0 < $add_ptr64 >>> 0) {
$p65_2 = $incdec_ptr120;
} else {
label = 390;
break;
}
}
if ((label | 0) == 388) {
return;
} else if ((label | 0) == 389) {
return;
} else if ((label | 0) == 390) {
return;
}
}
$path_dst_ptr_to_static_ptr99 = $info + 24 | 0;
$search_done92 = $info + 54 | 0;
$54 = $current_ptr;
$p65_1 = $incdec_ptr69;
while (1) {
if ((HEAP8[$search_done92] & 1) != 0) {
label = 385;
break;
}
if ((HEAP32[$number_to_static_ptr76 >> 2] | 0) == 1) {
if ((HEAP32[$path_dst_ptr_to_static_ptr99 >> 2] | 0) == 1) {
label = 386;
break;
}
}
$60 = HEAP32[$p65_1 + 4 >> 2] | 0;
$shr_i76 = $60 >> 8;
if (($60 & 1 | 0) == 0) {
$offset_to_base_0_i81 = $shr_i76;
} else {
$offset_to_base_0_i81 = HEAP32[(HEAP32[$54 >> 2] | 0) + $shr_i76 >> 2] | 0;
}
$64 = HEAP32[$p65_1 >> 2] | 0;
FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[$64 >> 2] | 0) + 24 >> 2] & 7]($64, $info, $current_ptr + $offset_to_base_0_i81 | 0, ($60 & 2 | 0) != 0 ? $path_below : 2, $use_strcmp);
$incdec_ptr105 = $p65_1 + 8 | 0;
if ($incdec_ptr105 >>> 0 < $add_ptr64 >>> 0) {
$p65_1 = $incdec_ptr105;
} else {
label = 387;
break;
}
}
if ((label | 0) == 385) {
return;
} else if ((label | 0) == 386) {
return;
} else if ((label | 0) == 387) {
return;
}
}
} while (0);
$search_done79 = $info + 54 | 0;
$44 = $current_ptr;
$p65_0 = $incdec_ptr69;
while (1) {
if ((HEAP8[$search_done79] & 1) != 0) {
label = 383;
break;
}
$47 = HEAP32[$p65_0 + 4 >> 2] | 0;
$shr_i92 = $47 >> 8;
if (($47 & 1 | 0) == 0) {
$offset_to_base_0_i97 = $shr_i92;
} else {
$offset_to_base_0_i97 = HEAP32[(HEAP32[$44 >> 2] | 0) + $shr_i92 >> 2] | 0;
}
$51 = HEAP32[$p65_0 >> 2] | 0;
FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[$51 >> 2] | 0) + 24 >> 2] & 7]($51, $info, $current_ptr + $offset_to_base_0_i97 | 0, ($47 & 2 | 0) != 0 ? $path_below : 2, $use_strcmp);
$incdec_ptr84 = $p65_0 + 8 | 0;
if ($incdec_ptr84 >>> 0 < $add_ptr64 >>> 0) {
$p65_0 = $incdec_ptr84;
} else {
label = 384;
break;
}
}
if ((label | 0) == 383) {
return;
} else if ((label | 0) == 384) {
return;
}
}
function __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($this, $info, $dst_ptr, $current_ptr, $path_below, $use_strcmp) {
$this = $this | 0;
$info = $info | 0;
$dst_ptr = $dst_ptr | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
$use_strcmp = $use_strcmp | 0;
var $0 = 0, $shr = 0, $offset_to_base_0 = 0, $5 = 0;
$0 = HEAP32[$this + 4 >> 2] | 0;
$shr = $0 >> 8;
if (($0 & 1 | 0) == 0) {
$offset_to_base_0 = $shr;
} else {
$offset_to_base_0 = HEAP32[(HEAP32[$current_ptr >> 2] | 0) + $shr >> 2] | 0;
}
$5 = HEAP32[$this >> 2] | 0;
FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[$5 >> 2] | 0) + 20 >> 2] & 7]($5, $info, $dst_ptr, $current_ptr + $offset_to_base_0 | 0, ($0 & 2 | 0) != 0 ? $path_below : 2, $use_strcmp);
return;
}
function __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($this, $info, $current_ptr, $path_below, $use_strcmp) {
$this = $this | 0;
$info = $info | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
$use_strcmp = $use_strcmp | 0;
var $0 = 0, $shr = 0, $offset_to_base_0 = 0, $5 = 0;
$0 = HEAP32[$this + 4 >> 2] | 0;
$shr = $0 >> 8;
if (($0 & 1 | 0) == 0) {
$offset_to_base_0 = $shr;
} else {
$offset_to_base_0 = HEAP32[(HEAP32[$current_ptr >> 2] | 0) + $shr >> 2] | 0;
}
$5 = HEAP32[$this >> 2] | 0;
FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[$5 >> 2] | 0) + 24 >> 2] & 7]($5, $info, $current_ptr + $offset_to_base_0 | 0, ($0 & 2 | 0) != 0 ? $path_below : 2, $use_strcmp);
return;
}
function __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($this, $info, $current_ptr, $path_below, $use_strcmp) {
$this = $this | 0;
$info = $info | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
$use_strcmp = $use_strcmp | 0;
var $0 = 0, $path_dynamic_ptr_to_static_ptr_i = 0, $dst_ptr_not_leading_to_static_ptr = 0, $is_dst_type_derived_from_static_type = 0, $found_our_static_ptr = 0, $found_any_static_type = 0, $10 = 0, $is_dst_type_derived_from_static_type13_0_off034 = 0, $number_to_dst_ptr = 0, $20 = 0, label = 0;
$0 = $this | 0;
if (($0 | 0) == (HEAP32[$info + 8 >> 2] | 0)) {
if ((HEAP32[$info + 4 >> 2] | 0) != ($current_ptr | 0)) {
return;
}
$path_dynamic_ptr_to_static_ptr_i = $info + 28 | 0;
if ((HEAP32[$path_dynamic_ptr_to_static_ptr_i >> 2] | 0) == 1) {
return;
}
HEAP32[$path_dynamic_ptr_to_static_ptr_i >> 2] = $path_below;
return;
}
if (($0 | 0) != (HEAP32[$info >> 2] | 0)) {
$20 = HEAP32[$this + 8 >> 2] | 0;
FUNCTION_TABLE_viiiii[HEAP32[(HEAP32[$20 >> 2] | 0) + 24 >> 2] & 7]($20, $info, $current_ptr, $path_below, $use_strcmp);
return;
}
do {
if ((HEAP32[$info + 16 >> 2] | 0) != ($current_ptr | 0)) {
$dst_ptr_not_leading_to_static_ptr = $info + 20 | 0;
if ((HEAP32[$dst_ptr_not_leading_to_static_ptr >> 2] | 0) == ($current_ptr | 0)) {
break;
}
HEAP32[$info + 32 >> 2] = $path_below;
$is_dst_type_derived_from_static_type = $info + 44 | 0;
if ((HEAP32[$is_dst_type_derived_from_static_type >> 2] | 0) == 4) {
return;
}
$found_our_static_ptr = $info + 52 | 0;
HEAP8[$found_our_static_ptr] = 0;
$found_any_static_type = $info + 53 | 0;
HEAP8[$found_any_static_type] = 0;
$10 = HEAP32[$this + 8 >> 2] | 0;
FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[$10 >> 2] | 0) + 20 >> 2] & 7]($10, $info, $current_ptr, $current_ptr, 1, $use_strcmp);
if ((HEAP8[$found_any_static_type] & 1) == 0) {
$is_dst_type_derived_from_static_type13_0_off034 = 0;
label = 409;
} else {
if ((HEAP8[$found_our_static_ptr] & 1) == 0) {
$is_dst_type_derived_from_static_type13_0_off034 = 1;
label = 409;
}
}
L543 : do {
if ((label | 0) == 409) {
HEAP32[$dst_ptr_not_leading_to_static_ptr >> 2] = $current_ptr;
$number_to_dst_ptr = $info + 40 | 0;
HEAP32[$number_to_dst_ptr >> 2] = (HEAP32[$number_to_dst_ptr >> 2] | 0) + 1;
do {
if ((HEAP32[$info + 36 >> 2] | 0) == 1) {
if ((HEAP32[$info + 24 >> 2] | 0) != 2) {
label = 412;
break;
}
HEAP8[$info + 54 | 0] = 1;
if ($is_dst_type_derived_from_static_type13_0_off034) {
break L543;
}
} else {
label = 412;
}
} while (0);
if ((label | 0) == 412) {
if ($is_dst_type_derived_from_static_type13_0_off034) {
break;
}
}
HEAP32[$is_dst_type_derived_from_static_type >> 2] = 4;
return;
}
} while (0);
HEAP32[$is_dst_type_derived_from_static_type >> 2] = 3;
return;
}
} while (0);
if (($path_below | 0) != 1) {
return;
}
HEAP32[$info + 32 >> 2] = 1;
return;
}
function __ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($this, $info, $dst_ptr, $current_ptr, $path_below, $use_strcmp) {
$this = $this | 0;
$info = $info | 0;
$dst_ptr = $dst_ptr | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
$use_strcmp = $use_strcmp | 0;
var $dst_ptr_leading_to_static_ptr_i = 0, $4 = 0, $path_dst_ptr_to_static_ptr12_i = 0, $6 = 0, $7 = 0, $number_to_static_ptr26_i = 0, $found_our_static_ptr2 = 0, $11 = 0, $found_any_static_type5 = 0, $13 = 0, $14 = 0, $add_ptr = 0, $15 = 0, $shr_i30 = 0, $offset_to_base_0_i35 = 0, $20 = 0, $path_dst_ptr_to_static_ptr = 0, $__flags = 0, $search_done = 0, $23 = 0, $p_0 = 0, $33 = 0, $shr_i = 0, $offset_to_base_0_i = 0, $37 = 0;
if (($this | 0) != (HEAP32[$info + 8 >> 2] | 0)) {
$found_our_static_ptr2 = $info + 52 | 0;
$11 = HEAP8[$found_our_static_ptr2] & 1;
$found_any_static_type5 = $info + 53 | 0;
$13 = HEAP8[$found_any_static_type5] & 1;
$14 = HEAP32[$this + 12 >> 2] | 0;
$add_ptr = $this + 16 + ($14 << 3) | 0;
HEAP8[$found_our_static_ptr2] = 0;
HEAP8[$found_any_static_type5] = 0;
$15 = HEAP32[$this + 20 >> 2] | 0;
$shr_i30 = $15 >> 8;
if (($15 & 1 | 0) == 0) {
$offset_to_base_0_i35 = $shr_i30;
} else {
$offset_to_base_0_i35 = HEAP32[(HEAP32[$current_ptr >> 2] | 0) + $shr_i30 >> 2] | 0;
}
$20 = HEAP32[$this + 16 >> 2] | 0;
FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[$20 >> 2] | 0) + 20 >> 2] & 7]($20, $info, $dst_ptr, $current_ptr + $offset_to_base_0_i35 | 0, ($15 & 2 | 0) != 0 ? $path_below : 2, $use_strcmp);
L565 : do {
if (($14 | 0) > 1) {
$path_dst_ptr_to_static_ptr = $info + 24 | 0;
$__flags = $this + 8 | 0;
$search_done = $info + 54 | 0;
$23 = $current_ptr;
$p_0 = $this + 24 | 0;
do {
if ((HEAP8[$search_done] & 1) != 0) {
break L565;
}
do {
if ((HEAP8[$found_our_static_ptr2] & 1) == 0) {
if ((HEAP8[$found_any_static_type5] & 1) == 0) {
break;
}
if ((HEAP32[$__flags >> 2] & 1 | 0) == 0) {
break L565;
}
} else {
if ((HEAP32[$path_dst_ptr_to_static_ptr >> 2] | 0) == 1) {
break L565;
}
if ((HEAP32[$__flags >> 2] & 2 | 0) == 0) {
break L565;
}
}
} while (0);
HEAP8[$found_our_static_ptr2] = 0;
HEAP8[$found_any_static_type5] = 0;
$33 = HEAP32[$p_0 + 4 >> 2] | 0;
$shr_i = $33 >> 8;
if (($33 & 1 | 0) == 0) {
$offset_to_base_0_i = $shr_i;
} else {
$offset_to_base_0_i = HEAP32[(HEAP32[$23 >> 2] | 0) + $shr_i >> 2] | 0;
}
$37 = HEAP32[$p_0 >> 2] | 0;
FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[$37 >> 2] | 0) + 20 >> 2] & 7]($37, $info, $dst_ptr, $current_ptr + $offset_to_base_0_i | 0, ($33 & 2 | 0) != 0 ? $path_below : 2, $use_strcmp);
$p_0 = $p_0 + 8 | 0;
} while ($p_0 >>> 0 < $add_ptr >>> 0);
}
} while (0);
HEAP8[$found_our_static_ptr2] = $11;
HEAP8[$found_any_static_type5] = $13;
return;
}
HEAP8[$info + 53 | 0] = 1;
if ((HEAP32[$info + 4 >> 2] | 0) != ($current_ptr | 0)) {
return;
}
HEAP8[$info + 52 | 0] = 1;
$dst_ptr_leading_to_static_ptr_i = $info + 16 | 0;
$4 = HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] | 0;
if (($4 | 0) == 0) {
HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] = $dst_ptr;
HEAP32[$info + 24 >> 2] = $path_below;
HEAP32[$info + 36 >> 2] = 1;
if (!((HEAP32[$info + 48 >> 2] | 0) == 1 & ($path_below | 0) == 1)) {
return;
}
HEAP8[$info + 54 | 0] = 1;
return;
}
if (($4 | 0) != ($dst_ptr | 0)) {
$number_to_static_ptr26_i = $info + 36 | 0;
HEAP32[$number_to_static_ptr26_i >> 2] = (HEAP32[$number_to_static_ptr26_i >> 2] | 0) + 1;
HEAP8[$info + 54 | 0] = 1;
return;
}
$path_dst_ptr_to_static_ptr12_i = $info + 24 | 0;
$6 = HEAP32[$path_dst_ptr_to_static_ptr12_i >> 2] | 0;
if (($6 | 0) == 2) {
HEAP32[$path_dst_ptr_to_static_ptr12_i >> 2] = $path_below;
$7 = $path_below;
} else {
$7 = $6;
}
if (!((HEAP32[$info + 48 >> 2] | 0) == 1 & ($7 | 0) == 1)) {
return;
}
HEAP8[$info + 54 | 0] = 1;
return;
}
function __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($this, $info, $dst_ptr, $current_ptr, $path_below, $use_strcmp) {
$this = $this | 0;
$info = $info | 0;
$dst_ptr = $dst_ptr | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
$use_strcmp = $use_strcmp | 0;
var $dst_ptr_leading_to_static_ptr_i = 0, $4 = 0, $path_dst_ptr_to_static_ptr12_i = 0, $6 = 0, $7 = 0, $number_to_static_ptr26_i = 0, $10 = 0;
if (($this | 0) != (HEAP32[$info + 8 >> 2] | 0)) {
$10 = HEAP32[$this + 8 >> 2] | 0;
FUNCTION_TABLE_viiiiii[HEAP32[(HEAP32[$10 >> 2] | 0) + 20 >> 2] & 7]($10, $info, $dst_ptr, $current_ptr, $path_below, $use_strcmp);
return;
}
HEAP8[$info + 53 | 0] = 1;
if ((HEAP32[$info + 4 >> 2] | 0) != ($current_ptr | 0)) {
return;
}
HEAP8[$info + 52 | 0] = 1;
$dst_ptr_leading_to_static_ptr_i = $info + 16 | 0;
$4 = HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] | 0;
if (($4 | 0) == 0) {
HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] = $dst_ptr;
HEAP32[$info + 24 >> 2] = $path_below;
HEAP32[$info + 36 >> 2] = 1;
if (!((HEAP32[$info + 48 >> 2] | 0) == 1 & ($path_below | 0) == 1)) {
return;
}
HEAP8[$info + 54 | 0] = 1;
return;
}
if (($4 | 0) != ($dst_ptr | 0)) {
$number_to_static_ptr26_i = $info + 36 | 0;
HEAP32[$number_to_static_ptr26_i >> 2] = (HEAP32[$number_to_static_ptr26_i >> 2] | 0) + 1;
HEAP8[$info + 54 | 0] = 1;
return;
}
$path_dst_ptr_to_static_ptr12_i = $info + 24 | 0;
$6 = HEAP32[$path_dst_ptr_to_static_ptr12_i >> 2] | 0;
if (($6 | 0) == 2) {
HEAP32[$path_dst_ptr_to_static_ptr12_i >> 2] = $path_below;
$7 = $path_below;
} else {
$7 = $6;
}
if (!((HEAP32[$info + 48 >> 2] | 0) == 1 & ($7 | 0) == 1)) {
return;
}
HEAP8[$info + 54 | 0] = 1;
return;
}
function __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($this, $info, $dst_ptr, $current_ptr, $path_below, $use_strcmp) {
$this = $this | 0;
$info = $info | 0;
$dst_ptr = $dst_ptr | 0;
$current_ptr = $current_ptr | 0;
$path_below = $path_below | 0;
$use_strcmp = $use_strcmp | 0;
var $dst_ptr_leading_to_static_ptr_i = 0, $2 = 0, $path_dst_ptr_to_static_ptr12_i = 0, $4 = 0, $5 = 0, $number_to_static_ptr26_i = 0;
if ((HEAP32[$info + 8 >> 2] | 0) != ($this | 0)) {
return;
}
HEAP8[$info + 53 | 0] = 1;
if ((HEAP32[$info + 4 >> 2] | 0) != ($current_ptr | 0)) {
return;
}
HEAP8[$info + 52 | 0] = 1;
$dst_ptr_leading_to_static_ptr_i = $info + 16 | 0;
$2 = HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] | 0;
if (($2 | 0) == 0) {
HEAP32[$dst_ptr_leading_to_static_ptr_i >> 2] = $dst_ptr;
HEAP32[$info + 24 >> 2] = $path_below;
HEAP32[$info + 36 >> 2] = 1;
if (!((HEAP32[$info + 48 >> 2] | 0) == 1 & ($path_below | 0) == 1)) {
return;
}
HEAP8[$info + 54 | 0] = 1;
return;
}
if (($2 | 0) != ($dst_ptr | 0)) {
$number_to_static_ptr26_i = $info + 36 | 0;
HEAP32[$number_to_static_ptr26_i >> 2] = (HEAP32[$number_to_static_ptr26_i >> 2] | 0) + 1;
HEAP8[$info + 54 | 0] = 1;
return;
}
$path_dst_ptr_to_static_ptr12_i = $info + 24 | 0;
$4 = HEAP32[$path_dst_ptr_to_static_ptr12_i >> 2] | 0;
if (($4 | 0) == 2) {
HEAP32[$path_dst_ptr_to_static_ptr12_i >> 2] = $path_below;
$5 = $path_below;
} else {
$5 = $4;
}
if (!((HEAP32[$info + 48 >> 2] | 0) == 1 & ($5 | 0) == 1)) {
return;
}
HEAP8[$info + 54 | 0] = 1;
return;
}
function _malloc($bytes) {
$bytes = $bytes | 0;
var $cond = 0, $shr = 0, $0 = 0, $shr3 = 0, $add8 = 0, $shl = 0, $1 = 0, $2 = 0, $3 = 0, $fd9 = 0, $4 = 0, $bk = 0, $shl22 = 0, $9 = 0, $shl37 = 0, $and41 = 0, $sub44 = 0, $and46 = 0, $shr47 = 0, $and49 = 0, $shr51 = 0, $and53 = 0, $shr55 = 0, $and57 = 0, $shr59 = 0, $and61 = 0, $add64 = 0, $shl65 = 0, $13 = 0, $14 = 0, $15 = 0, $fd69 = 0, $16 = 0, $bk78 = 0, $shl90 = 0, $sub91 = 0, $20 = 0, $21 = 0, $23 = 0, $24 = 0, $shr101 = 0, $shl102 = 0, $25 = 0, $26 = 0, $shl105 = 0, $27 = 0, $28 = 0, $_pre_phi = 0, $F104_0 = 0, $32 = 0, $sub2_i = 0, $and3_i = 0, $shr4_i = 0, $and6_i = 0, $shr7_i = 0, $and9_i = 0, $shr11_i = 0, $and13_i = 0, $shr15_i = 0, $and17_i = 0, $33 = 0, $rsize_0_i = 0, $v_0_i = 0, $t_0_i = 0, $35 = 0, $36 = 0, $cond7_i = 0, $sub31_i = 0, $cmp32_i = 0, $38 = 0, $39 = 0, $add_ptr_i = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $bk47_i = 0, $fd50_i = 0, $arrayidx61_i = 0, $47 = 0, $arrayidx65_i = 0, $48 = 0, $RP_0_i = 0, $R_0_i = 0, $arrayidx71_i = 0, $49 = 0, $arrayidx75_i = 0, $50 = 0, $R_1_i = 0, $index_i = 0, $arrayidx94_i = 0, $arrayidx113_i = 0, $61 = 0, $64 = 0, $add177_i = 0, $67 = 0, $70 = 0, $71 = 0, $shr194_i = 0, $shl195_i = 0, $72 = 0, $73 = 0, $shl198_i = 0, $74 = 0, $75 = 0, $_pre_phi_i = 0, $F197_0_i = 0, $add_ptr225_i = 0, $add143 = 0, $and144 = 0, $79 = 0, $sub_i107 = 0, $shr_i108 = 0, $and_i112 = 0, $shl_i113 = 0, $and8_i = 0, $shl9_i = 0, $and12_i = 0, $add17_i = 0, $idx_0_i = 0, $80 = 0, $cond_i = 0, $rst_0_i = 0, $sizebits_0_i = 0, $t_0_i121 = 0, $rsize_0_i122 = 0, $v_0_i123 = 0, $and32_i = 0, $sub33_i = 0, $rsize_1_i = 0, $v_1_i = 0, $82 = 0, $83 = 0, $rst_1_i = 0, $t_1_i = 0, $rsize_2_i = 0, $v_2_i = 0, $shl59_i = 0, $and63_i = 0, $sub69_i = 0, $and72_i = 0, $shr74_i = 0, $and76_i = 0, $shr78_i = 0, $and80_i = 0, $shr82_i = 0, $and84_i = 0, $shr86_i = 0, $and88_i = 0, $t_2_ph_i = 0, $v_326_i = 0, $rsize_325_i = 0, $t_224_i = 0, $sub100_i = 0, $cmp101_i = 0, $sub100_rsize_3_i = 0, $t_2_v_3_i = 0, $86 = 0, $87 = 0, $v_3_lcssa_i = 0, $rsize_3_lcssa_i = 0, $89 = 0, $90 = 0, $add_ptr_i128 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $bk135_i = 0, $fd138_i = 0, $arrayidx150_i = 0, $98 = 0, $arrayidx154_i133 = 0, $99 = 0, $RP_0_i136 = 0, $R_0_i137 = 0, $arrayidx160_i = 0, $100 = 0, $arrayidx164_i = 0, $101 = 0, $R_1_i139 = 0, $index_i140 = 0, $arrayidx183_i = 0, $arrayidx203_i = 0, $112 = 0, $115 = 0, $add267_i = 0, $118 = 0, $shr282_i = 0, $shl287_i = 0, $121 = 0, $122 = 0, $shl290_i = 0, $123 = 0, $124 = 0, $_pre_phi_i147 = 0, $F289_0_i = 0, $129 = 0, $shr317_i = 0, $and330_i = 0, $shl332_i = 0, $and335_i = 0, $shl337_i = 0, $and340_i = 0, $add345_i = 0, $I315_0_i = 0, $arrayidx354_i = 0, $132 = 0, $shl361_i = 0, $cond382_i = 0, $T_0_i = 0, $K372_0_i = 0, $arrayidx393_i = 0, $139 = 0, $fd412_i = 0, $145 = 0, $147 = 0, $add_ptr436_i = 0, $nb_0 = 0, $153 = 0, $sub159 = 0, $154 = 0, $155 = 0, $159 = 0, $162 = 0, $sub187 = 0, $163 = 0, $164 = 0, $call_i_i = 0, $add_i149 = 0, $169 = 0, $sub_i150 = 0, $add9_i = 0, $neg_i151 = 0, $and11_i = 0, $170 = 0, $171 = 0, $add17_i152 = 0, $173 = 0, $174 = 0, $sp_0_i_i = 0, $base_i_i = 0, $175 = 0, $size_i_i = 0, $177 = 0, $call34_i = 0, $178 = 0, $179 = 0, $sub38_i = 0, $ssize_0_i = 0, $180 = 0, $add51_i = 0, $181 = 0, $call65_i = 0, $cmp66_i160 = 0, $and77_i = 0, $call80_i = 0, $cmp82_i = 0, $ssize_1_i = 0, $br_0_i = 0, $tsize_0_i = 0, $tbase_0_i = 0, $sub109_i = 0, $185 = 0, $and101_i = 0, $ssize_2_i = 0, $tsize_0758385_i = 0, $tsize_1_i = 0, $call128_i = 0, $call129_i = 0, $sub_ptr_sub_i = 0, $cmp138_i166 = 0, $call128_tbase_1_i = 0, $tbase_292_i = 0, $tsize_291_i = 0, $add147_i = 0, $189 = 0, $190 = 0, $i_02_i_i = 0, $shl_i_i = 0, $192 = 0, $195 = 0, $cond_i_i = 0, $sub5_i_i = 0, $sp_0105_i = 0, $201 = 0, $size185_i = 0, $202 = 0, $203 = 0, $205 = 0, $206 = 0, $add212_i = 0, $208 = 0, $209 = 0, $cond_i28_i = 0, $sub5_i30_i = 0, $add_ptr224_i = 0, $sp_1101_i = 0, $base223_i = 0, $217 = 0, $size242_i = 0, $220 = 0, $cond_i43_i = 0, $222 = 0, $cond15_i_i = 0, $add_ptr16_i_i = 0, $224 = 0, $add_ptr4_sum_i50_i = 0, $add_ptr17_i_i = 0, $225 = 0, $sub18_i_i = 0, $add_i_i = 0, $add26_i_i = 0, $add_ptr16_sum_i_i = 0, $234 = 0, $and37_i_i = 0, $shr_i55_i = 0, $236 = 0, $238 = 0, $239 = 0, $fd59_i_i = 0, $fd68_pre_phi_i_i = 0, $247 = 0, $249 = 0, $251 = 0, $253 = 0, $bk82_i_i = 0, $fd85_i_i = 0, $add_ptr16_sum56_i_i = 0, $258 = 0, $259 = 0, $arrayidx99_i_i = 0, $260 = 0, $RP_0_i_i = 0, $R_0_i_i = 0, $arrayidx103_i_i = 0, $261 = 0, $arrayidx107_i_i = 0, $262 = 0, $R_1_i_i = 0, $265 = 0, $arrayidx123_i_i = 0, $arrayidx143_i_i = 0, $add_ptr16_sum2728_i_i = 0, $275 = 0, $279 = 0, $qsize_0_i_i = 0, $oldfirst_0_i_i = 0, $head208_i_i = 0, $shr214_i_i = 0, $shl221_i_i = 0, $285 = 0, $286 = 0, $shl226_i_i = 0, $287 = 0, $288 = 0, $_pre_phi_i68_i = 0, $F224_0_i_i = 0, $293 = 0, $shr253_i_i = 0, $and264_i_i = 0, $shl265_i_i = 0, $and268_i_i = 0, $shl270_i_i = 0, $and273_i_i = 0, $add278_i_i = 0, $I252_0_i_i = 0, $arrayidx287_i_i = 0, $296 = 0, $shl294_i_i = 0, $cond315_i_i = 0, $T_0_i69_i = 0, $K305_0_i_i = 0, $arrayidx325_i_i = 0, $303 = 0, $fd344_i_i = 0, $309 = 0, $311 = 0, $316 = 0, $sp_0_i_i_i = 0, $317 = 0, $318 = 0, $add_ptr_i_i_i = 0, $320 = 0, $cond_i18_i = 0, $add_ptr7_i_i = 0, $cond13_i_i = 0, $add_ptr14_i_i = 0, $323 = 0, $cond_i_i_i = 0, $sub5_i_i_i = 0, $330 = 0, $add_ptr2416_i_i = 0, $332 = 0, $sub_ptr_sub_i_i = 0, $335 = 0, $shr_i_i = 0, $shl_i21_i = 0, $337 = 0, $338 = 0, $shl39_i_i = 0, $339 = 0, $340 = 0, $_pre_phi_i_i = 0, $F_0_i_i = 0, $343 = 0, $shr58_i_i = 0, $and69_i_i = 0, $shl70_i_i = 0, $and73_i_i = 0, $shl75_i_i = 0, $and78_i_i = 0, $add83_i_i = 0, $I57_0_i_i = 0, $arrayidx91_i_i = 0, $345 = 0, $shl95_i_i = 0, $cond115_i_i = 0, $T_0_i_i = 0, $K105_0_i_i = 0, $arrayidx126_i_i = 0, $348 = 0, $fd145_i_i = 0, $351 = 0, $353 = 0, $355 = 0, $sub253_i = 0, $356 = 0, $357 = 0, $mem_0 = 0, label = 0;
do {
if ($bytes >>> 0 < 245) {
if ($bytes >>> 0 < 11) {
$cond = 16;
} else {
$cond = $bytes + 11 & -8;
}
$shr = $cond >>> 3;
$0 = HEAP32[11602] | 0;
$shr3 = $0 >>> ($shr >>> 0);
if (($shr3 & 3 | 0) != 0) {
$add8 = ($shr3 & 1 ^ 1) + $shr | 0;
$shl = $add8 << 1;
$1 = 46448 + ($shl << 2) | 0;
$2 = 46448 + ($shl + 2 << 2) | 0;
$3 = HEAP32[$2 >> 2] | 0;
$fd9 = $3 + 8 | 0;
$4 = HEAP32[$fd9 >> 2] | 0;
do {
if (($1 | 0) == ($4 | 0)) {
HEAP32[11602] = $0 & ~(1 << $add8);
} else {
if ($4 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
$bk = $4 + 12 | 0;
if ((HEAP32[$bk >> 2] | 0) == ($3 | 0)) {
HEAP32[$bk >> 2] = $1;
HEAP32[$2 >> 2] = $4;
break;
} else {
_abort();
return 0;
}
}
} while (0);
$shl22 = $add8 << 3;
HEAP32[$3 + 4 >> 2] = $shl22 | 3;
$9 = $3 + ($shl22 | 4) | 0;
HEAP32[$9 >> 2] = HEAP32[$9 >> 2] | 1;
$mem_0 = $fd9;
return $mem_0 | 0;
}
if ($cond >>> 0 <= (HEAP32[11604] | 0) >>> 0) {
$nb_0 = $cond;
break;
}
if (($shr3 | 0) != 0) {
$shl37 = 2 << $shr;
$and41 = $shr3 << $shr & ($shl37 | -$shl37);
$sub44 = ($and41 & -$and41) - 1 | 0;
$and46 = $sub44 >>> 12 & 16;
$shr47 = $sub44 >>> ($and46 >>> 0);
$and49 = $shr47 >>> 5 & 8;
$shr51 = $shr47 >>> ($and49 >>> 0);
$and53 = $shr51 >>> 2 & 4;
$shr55 = $shr51 >>> ($and53 >>> 0);
$and57 = $shr55 >>> 1 & 2;
$shr59 = $shr55 >>> ($and57 >>> 0);
$and61 = $shr59 >>> 1 & 1;
$add64 = ($and49 | $and46 | $and53 | $and57 | $and61) + ($shr59 >>> ($and61 >>> 0)) | 0;
$shl65 = $add64 << 1;
$13 = 46448 + ($shl65 << 2) | 0;
$14 = 46448 + ($shl65 + 2 << 2) | 0;
$15 = HEAP32[$14 >> 2] | 0;
$fd69 = $15 + 8 | 0;
$16 = HEAP32[$fd69 >> 2] | 0;
do {
if (($13 | 0) == ($16 | 0)) {
HEAP32[11602] = $0 & ~(1 << $add64);
} else {
if ($16 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
$bk78 = $16 + 12 | 0;
if ((HEAP32[$bk78 >> 2] | 0) == ($15 | 0)) {
HEAP32[$bk78 >> 2] = $13;
HEAP32[$14 >> 2] = $16;
break;
} else {
_abort();
return 0;
}
}
} while (0);
$shl90 = $add64 << 3;
$sub91 = $shl90 - $cond | 0;
HEAP32[$15 + 4 >> 2] = $cond | 3;
$20 = $15;
$21 = $20 + $cond | 0;
HEAP32[$20 + ($cond | 4) >> 2] = $sub91 | 1;
HEAP32[$20 + $shl90 >> 2] = $sub91;
$23 = HEAP32[11604] | 0;
if (($23 | 0) != 0) {
$24 = HEAP32[11607] | 0;
$shr101 = $23 >>> 3;
$shl102 = $shr101 << 1;
$25 = 46448 + ($shl102 << 2) | 0;
$26 = HEAP32[11602] | 0;
$shl105 = 1 << $shr101;
do {
if (($26 & $shl105 | 0) == 0) {
HEAP32[11602] = $26 | $shl105;
$F104_0 = $25;
$_pre_phi = 46448 + ($shl102 + 2 << 2) | 0;
} else {
$27 = 46448 + ($shl102 + 2 << 2) | 0;
$28 = HEAP32[$27 >> 2] | 0;
if ($28 >>> 0 >= (HEAP32[11606] | 0) >>> 0) {
$F104_0 = $28;
$_pre_phi = $27;
break;
}
_abort();
return 0;
}
} while (0);
HEAP32[$_pre_phi >> 2] = $24;
HEAP32[$F104_0 + 12 >> 2] = $24;
HEAP32[$24 + 8 >> 2] = $F104_0;
HEAP32[$24 + 12 >> 2] = $25;
}
HEAP32[11604] = $sub91;
HEAP32[11607] = $21;
$mem_0 = $fd69;
return $mem_0 | 0;
}
$32 = HEAP32[11603] | 0;
if (($32 | 0) == 0) {
$nb_0 = $cond;
break;
}
$sub2_i = ($32 & -$32) - 1 | 0;
$and3_i = $sub2_i >>> 12 & 16;
$shr4_i = $sub2_i >>> ($and3_i >>> 0);
$and6_i = $shr4_i >>> 5 & 8;
$shr7_i = $shr4_i >>> ($and6_i >>> 0);
$and9_i = $shr7_i >>> 2 & 4;
$shr11_i = $shr7_i >>> ($and9_i >>> 0);
$and13_i = $shr11_i >>> 1 & 2;
$shr15_i = $shr11_i >>> ($and13_i >>> 0);
$and17_i = $shr15_i >>> 1 & 1;
$33 = HEAP32[46712 + (($and6_i | $and3_i | $and9_i | $and13_i | $and17_i) + ($shr15_i >>> ($and17_i >>> 0)) << 2) >> 2] | 0;
$t_0_i = $33;
$v_0_i = $33;
$rsize_0_i = (HEAP32[$33 + 4 >> 2] & -8) - $cond | 0;
while (1) {
$35 = HEAP32[$t_0_i + 16 >> 2] | 0;
if (($35 | 0) == 0) {
$36 = HEAP32[$t_0_i + 20 >> 2] | 0;
if (($36 | 0) == 0) {
break;
} else {
$cond7_i = $36;
}
} else {
$cond7_i = $35;
}
$sub31_i = (HEAP32[$cond7_i + 4 >> 2] & -8) - $cond | 0;
$cmp32_i = $sub31_i >>> 0 < $rsize_0_i >>> 0;
$t_0_i = $cond7_i;
$v_0_i = $cmp32_i ? $cond7_i : $v_0_i;
$rsize_0_i = $cmp32_i ? $sub31_i : $rsize_0_i;
}
$38 = $v_0_i;
$39 = HEAP32[11606] | 0;
if ($38 >>> 0 < $39 >>> 0) {
_abort();
return 0;
}
$add_ptr_i = $38 + $cond | 0;
$40 = $add_ptr_i;
if ($38 >>> 0 >= $add_ptr_i >>> 0) {
_abort();
return 0;
}
$41 = HEAP32[$v_0_i + 24 >> 2] | 0;
$42 = HEAP32[$v_0_i + 12 >> 2] | 0;
do {
if (($42 | 0) == ($v_0_i | 0)) {
$arrayidx61_i = $v_0_i + 20 | 0;
$47 = HEAP32[$arrayidx61_i >> 2] | 0;
if (($47 | 0) == 0) {
$arrayidx65_i = $v_0_i + 16 | 0;
$48 = HEAP32[$arrayidx65_i >> 2] | 0;
if (($48 | 0) == 0) {
$R_1_i = 0;
break;
} else {
$R_0_i = $48;
$RP_0_i = $arrayidx65_i;
}
} else {
$R_0_i = $47;
$RP_0_i = $arrayidx61_i;
}
while (1) {
$arrayidx71_i = $R_0_i + 20 | 0;
$49 = HEAP32[$arrayidx71_i >> 2] | 0;
if (($49 | 0) != 0) {
$R_0_i = $49;
$RP_0_i = $arrayidx71_i;
continue;
}
$arrayidx75_i = $R_0_i + 16 | 0;
$50 = HEAP32[$arrayidx75_i >> 2] | 0;
if (($50 | 0) == 0) {
break;
} else {
$R_0_i = $50;
$RP_0_i = $arrayidx75_i;
}
}
if ($RP_0_i >>> 0 < $39 >>> 0) {
_abort();
return 0;
} else {
HEAP32[$RP_0_i >> 2] = 0;
$R_1_i = $R_0_i;
break;
}
} else {
$43 = HEAP32[$v_0_i + 8 >> 2] | 0;
if ($43 >>> 0 < $39 >>> 0) {
_abort();
return 0;
}
$bk47_i = $43 + 12 | 0;
if ((HEAP32[$bk47_i >> 2] | 0) != ($v_0_i | 0)) {
_abort();
return 0;
}
$fd50_i = $42 + 8 | 0;
if ((HEAP32[$fd50_i >> 2] | 0) == ($v_0_i | 0)) {
HEAP32[$bk47_i >> 2] = $42;
HEAP32[$fd50_i >> 2] = $43;
$R_1_i = $42;
break;
} else {
_abort();
return 0;
}
}
} while (0);
L732 : do {
if (($41 | 0) != 0) {
$index_i = $v_0_i + 28 | 0;
$arrayidx94_i = 46712 + (HEAP32[$index_i >> 2] << 2) | 0;
do {
if (($v_0_i | 0) == (HEAP32[$arrayidx94_i >> 2] | 0)) {
HEAP32[$arrayidx94_i >> 2] = $R_1_i;
if (($R_1_i | 0) != 0) {
break;
}
HEAP32[11603] = HEAP32[11603] & ~(1 << HEAP32[$index_i >> 2]);
break L732;
} else {
if ($41 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
$arrayidx113_i = $41 + 16 | 0;
if ((HEAP32[$arrayidx113_i >> 2] | 0) == ($v_0_i | 0)) {
HEAP32[$arrayidx113_i >> 2] = $R_1_i;
} else {
HEAP32[$41 + 20 >> 2] = $R_1_i;
}
if (($R_1_i | 0) == 0) {
break L732;
}
}
} while (0);
if ($R_1_i >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
HEAP32[$R_1_i + 24 >> 2] = $41;
$61 = HEAP32[$v_0_i + 16 >> 2] | 0;
do {
if (($61 | 0) != 0) {
if ($61 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$R_1_i + 16 >> 2] = $61;
HEAP32[$61 + 24 >> 2] = $R_1_i;
break;
}
}
} while (0);
$64 = HEAP32[$v_0_i + 20 >> 2] | 0;
if (($64 | 0) == 0) {
break;
}
if ($64 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$R_1_i + 20 >> 2] = $64;
HEAP32[$64 + 24 >> 2] = $R_1_i;
break;
}
}
} while (0);
if ($rsize_0_i >>> 0 < 16) {
$add177_i = $rsize_0_i + $cond | 0;
HEAP32[$v_0_i + 4 >> 2] = $add177_i | 3;
$67 = $38 + ($add177_i + 4) | 0;
HEAP32[$67 >> 2] = HEAP32[$67 >> 2] | 1;
} else {
HEAP32[$v_0_i + 4 >> 2] = $cond | 3;
HEAP32[$38 + ($cond | 4) >> 2] = $rsize_0_i | 1;
HEAP32[$38 + ($rsize_0_i + $cond) >> 2] = $rsize_0_i;
$70 = HEAP32[11604] | 0;
if (($70 | 0) != 0) {
$71 = HEAP32[11607] | 0;
$shr194_i = $70 >>> 3;
$shl195_i = $shr194_i << 1;
$72 = 46448 + ($shl195_i << 2) | 0;
$73 = HEAP32[11602] | 0;
$shl198_i = 1 << $shr194_i;
do {
if (($73 & $shl198_i | 0) == 0) {
HEAP32[11602] = $73 | $shl198_i;
$F197_0_i = $72;
$_pre_phi_i = 46448 + ($shl195_i + 2 << 2) | 0;
} else {
$74 = 46448 + ($shl195_i + 2 << 2) | 0;
$75 = HEAP32[$74 >> 2] | 0;
if ($75 >>> 0 >= (HEAP32[11606] | 0) >>> 0) {
$F197_0_i = $75;
$_pre_phi_i = $74;
break;
}
_abort();
return 0;
}
} while (0);
HEAP32[$_pre_phi_i >> 2] = $71;
HEAP32[$F197_0_i + 12 >> 2] = $71;
HEAP32[$71 + 8 >> 2] = $F197_0_i;
HEAP32[$71 + 12 >> 2] = $72;
}
HEAP32[11604] = $rsize_0_i;
HEAP32[11607] = $40;
}
$add_ptr225_i = $v_0_i + 8 | 0;
if (($add_ptr225_i | 0) == 0) {
$nb_0 = $cond;
break;
} else {
$mem_0 = $add_ptr225_i;
}
return $mem_0 | 0;
} else {
if ($bytes >>> 0 > 4294967231) {
$nb_0 = -1;
break;
}
$add143 = $bytes + 11 | 0;
$and144 = $add143 & -8;
$79 = HEAP32[11603] | 0;
if (($79 | 0) == 0) {
$nb_0 = $and144;
break;
}
$sub_i107 = -$and144 | 0;
$shr_i108 = $add143 >>> 8;
do {
if (($shr_i108 | 0) == 0) {
$idx_0_i = 0;
} else {
if ($and144 >>> 0 > 16777215) {
$idx_0_i = 31;
break;
}
$and_i112 = ($shr_i108 + 1048320 | 0) >>> 16 & 8;
$shl_i113 = $shr_i108 << $and_i112;
$and8_i = ($shl_i113 + 520192 | 0) >>> 16 & 4;
$shl9_i = $shl_i113 << $and8_i;
$and12_i = ($shl9_i + 245760 | 0) >>> 16 & 2;
$add17_i = 14 - ($and8_i | $and_i112 | $and12_i) + ($shl9_i << $and12_i >>> 15) | 0;
$idx_0_i = $and144 >>> (($add17_i + 7 | 0) >>> 0) & 1 | $add17_i << 1;
}
} while (0);
$80 = HEAP32[46712 + ($idx_0_i << 2) >> 2] | 0;
L780 : do {
if (($80 | 0) == 0) {
$v_2_i = 0;
$rsize_2_i = $sub_i107;
$t_1_i = 0;
} else {
if (($idx_0_i | 0) == 31) {
$cond_i = 0;
} else {
$cond_i = 25 - ($idx_0_i >>> 1) | 0;
}
$v_0_i123 = 0;
$rsize_0_i122 = $sub_i107;
$t_0_i121 = $80;
$sizebits_0_i = $and144 << $cond_i;
$rst_0_i = 0;
while (1) {
$and32_i = HEAP32[$t_0_i121 + 4 >> 2] & -8;
$sub33_i = $and32_i - $and144 | 0;
if ($sub33_i >>> 0 < $rsize_0_i122 >>> 0) {
if (($and32_i | 0) == ($and144 | 0)) {
$v_2_i = $t_0_i121;
$rsize_2_i = $sub33_i;
$t_1_i = $t_0_i121;
break L780;
} else {
$v_1_i = $t_0_i121;
$rsize_1_i = $sub33_i;
}
} else {
$v_1_i = $v_0_i123;
$rsize_1_i = $rsize_0_i122;
}
$82 = HEAP32[$t_0_i121 + 20 >> 2] | 0;
$83 = HEAP32[$t_0_i121 + 16 + ($sizebits_0_i >>> 31 << 2) >> 2] | 0;
$rst_1_i = ($82 | 0) == 0 | ($82 | 0) == ($83 | 0) ? $rst_0_i : $82;
if (($83 | 0) == 0) {
$v_2_i = $v_1_i;
$rsize_2_i = $rsize_1_i;
$t_1_i = $rst_1_i;
break;
} else {
$v_0_i123 = $v_1_i;
$rsize_0_i122 = $rsize_1_i;
$t_0_i121 = $83;
$sizebits_0_i = $sizebits_0_i << 1;
$rst_0_i = $rst_1_i;
}
}
}
} while (0);
if (($t_1_i | 0) == 0 & ($v_2_i | 0) == 0) {
$shl59_i = 2 << $idx_0_i;
$and63_i = $79 & ($shl59_i | -$shl59_i);
if (($and63_i | 0) == 0) {
$nb_0 = $and144;
break;
}
$sub69_i = ($and63_i & -$and63_i) - 1 | 0;
$and72_i = $sub69_i >>> 12 & 16;
$shr74_i = $sub69_i >>> ($and72_i >>> 0);
$and76_i = $shr74_i >>> 5 & 8;
$shr78_i = $shr74_i >>> ($and76_i >>> 0);
$and80_i = $shr78_i >>> 2 & 4;
$shr82_i = $shr78_i >>> ($and80_i >>> 0);
$and84_i = $shr82_i >>> 1 & 2;
$shr86_i = $shr82_i >>> ($and84_i >>> 0);
$and88_i = $shr86_i >>> 1 & 1;
$t_2_ph_i = HEAP32[46712 + (($and76_i | $and72_i | $and80_i | $and84_i | $and88_i) + ($shr86_i >>> ($and88_i >>> 0)) << 2) >> 2] | 0;
} else {
$t_2_ph_i = $t_1_i;
}
if (($t_2_ph_i | 0) == 0) {
$rsize_3_lcssa_i = $rsize_2_i;
$v_3_lcssa_i = $v_2_i;
} else {
$t_224_i = $t_2_ph_i;
$rsize_325_i = $rsize_2_i;
$v_326_i = $v_2_i;
while (1) {
$sub100_i = (HEAP32[$t_224_i + 4 >> 2] & -8) - $and144 | 0;
$cmp101_i = $sub100_i >>> 0 < $rsize_325_i >>> 0;
$sub100_rsize_3_i = $cmp101_i ? $sub100_i : $rsize_325_i;
$t_2_v_3_i = $cmp101_i ? $t_224_i : $v_326_i;
$86 = HEAP32[$t_224_i + 16 >> 2] | 0;
if (($86 | 0) != 0) {
$t_224_i = $86;
$rsize_325_i = $sub100_rsize_3_i;
$v_326_i = $t_2_v_3_i;
continue;
}
$87 = HEAP32[$t_224_i + 20 >> 2] | 0;
if (($87 | 0) == 0) {
$rsize_3_lcssa_i = $sub100_rsize_3_i;
$v_3_lcssa_i = $t_2_v_3_i;
break;
} else {
$t_224_i = $87;
$rsize_325_i = $sub100_rsize_3_i;
$v_326_i = $t_2_v_3_i;
}
}
}
if (($v_3_lcssa_i | 0) == 0) {
$nb_0 = $and144;
break;
}
if ($rsize_3_lcssa_i >>> 0 >= ((HEAP32[11604] | 0) - $and144 | 0) >>> 0) {
$nb_0 = $and144;
break;
}
$89 = $v_3_lcssa_i;
$90 = HEAP32[11606] | 0;
if ($89 >>> 0 < $90 >>> 0) {
_abort();
return 0;
}
$add_ptr_i128 = $89 + $and144 | 0;
$91 = $add_ptr_i128;
if ($89 >>> 0 >= $add_ptr_i128 >>> 0) {
_abort();
return 0;
}
$92 = HEAP32[$v_3_lcssa_i + 24 >> 2] | 0;
$93 = HEAP32[$v_3_lcssa_i + 12 >> 2] | 0;
do {
if (($93 | 0) == ($v_3_lcssa_i | 0)) {
$arrayidx150_i = $v_3_lcssa_i + 20 | 0;
$98 = HEAP32[$arrayidx150_i >> 2] | 0;
if (($98 | 0) == 0) {
$arrayidx154_i133 = $v_3_lcssa_i + 16 | 0;
$99 = HEAP32[$arrayidx154_i133 >> 2] | 0;
if (($99 | 0) == 0) {
$R_1_i139 = 0;
break;
} else {
$R_0_i137 = $99;
$RP_0_i136 = $arrayidx154_i133;
}
} else {
$R_0_i137 = $98;
$RP_0_i136 = $arrayidx150_i;
}
while (1) {
$arrayidx160_i = $R_0_i137 + 20 | 0;
$100 = HEAP32[$arrayidx160_i >> 2] | 0;
if (($100 | 0) != 0) {
$R_0_i137 = $100;
$RP_0_i136 = $arrayidx160_i;
continue;
}
$arrayidx164_i = $R_0_i137 + 16 | 0;
$101 = HEAP32[$arrayidx164_i >> 2] | 0;
if (($101 | 0) == 0) {
break;
} else {
$R_0_i137 = $101;
$RP_0_i136 = $arrayidx164_i;
}
}
if ($RP_0_i136 >>> 0 < $90 >>> 0) {
_abort();
return 0;
} else {
HEAP32[$RP_0_i136 >> 2] = 0;
$R_1_i139 = $R_0_i137;
break;
}
} else {
$94 = HEAP32[$v_3_lcssa_i + 8 >> 2] | 0;
if ($94 >>> 0 < $90 >>> 0) {
_abort();
return 0;
}
$bk135_i = $94 + 12 | 0;
if ((HEAP32[$bk135_i >> 2] | 0) != ($v_3_lcssa_i | 0)) {
_abort();
return 0;
}
$fd138_i = $93 + 8 | 0;
if ((HEAP32[$fd138_i >> 2] | 0) == ($v_3_lcssa_i | 0)) {
HEAP32[$bk135_i >> 2] = $93;
HEAP32[$fd138_i >> 2] = $94;
$R_1_i139 = $93;
break;
} else {
_abort();
return 0;
}
}
} while (0);
L830 : do {
if (($92 | 0) != 0) {
$index_i140 = $v_3_lcssa_i + 28 | 0;
$arrayidx183_i = 46712 + (HEAP32[$index_i140 >> 2] << 2) | 0;
do {
if (($v_3_lcssa_i | 0) == (HEAP32[$arrayidx183_i >> 2] | 0)) {
HEAP32[$arrayidx183_i >> 2] = $R_1_i139;
if (($R_1_i139 | 0) != 0) {
break;
}
HEAP32[11603] = HEAP32[11603] & ~(1 << HEAP32[$index_i140 >> 2]);
break L830;
} else {
if ($92 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
$arrayidx203_i = $92 + 16 | 0;
if ((HEAP32[$arrayidx203_i >> 2] | 0) == ($v_3_lcssa_i | 0)) {
HEAP32[$arrayidx203_i >> 2] = $R_1_i139;
} else {
HEAP32[$92 + 20 >> 2] = $R_1_i139;
}
if (($R_1_i139 | 0) == 0) {
break L830;
}
}
} while (0);
if ($R_1_i139 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
HEAP32[$R_1_i139 + 24 >> 2] = $92;
$112 = HEAP32[$v_3_lcssa_i + 16 >> 2] | 0;
do {
if (($112 | 0) != 0) {
if ($112 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$R_1_i139 + 16 >> 2] = $112;
HEAP32[$112 + 24 >> 2] = $R_1_i139;
break;
}
}
} while (0);
$115 = HEAP32[$v_3_lcssa_i + 20 >> 2] | 0;
if (($115 | 0) == 0) {
break;
}
if ($115 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$R_1_i139 + 20 >> 2] = $115;
HEAP32[$115 + 24 >> 2] = $R_1_i139;
break;
}
}
} while (0);
do {
if ($rsize_3_lcssa_i >>> 0 < 16) {
$add267_i = $rsize_3_lcssa_i + $and144 | 0;
HEAP32[$v_3_lcssa_i + 4 >> 2] = $add267_i | 3;
$118 = $89 + ($add267_i + 4) | 0;
HEAP32[$118 >> 2] = HEAP32[$118 >> 2] | 1;
} else {
HEAP32[$v_3_lcssa_i + 4 >> 2] = $and144 | 3;
HEAP32[$89 + ($and144 | 4) >> 2] = $rsize_3_lcssa_i | 1;
HEAP32[$89 + ($rsize_3_lcssa_i + $and144) >> 2] = $rsize_3_lcssa_i;
$shr282_i = $rsize_3_lcssa_i >>> 3;
if ($rsize_3_lcssa_i >>> 0 < 256) {
$shl287_i = $shr282_i << 1;
$121 = 46448 + ($shl287_i << 2) | 0;
$122 = HEAP32[11602] | 0;
$shl290_i = 1 << $shr282_i;
do {
if (($122 & $shl290_i | 0) == 0) {
HEAP32[11602] = $122 | $shl290_i;
$F289_0_i = $121;
$_pre_phi_i147 = 46448 + ($shl287_i + 2 << 2) | 0;
} else {
$123 = 46448 + ($shl287_i + 2 << 2) | 0;
$124 = HEAP32[$123 >> 2] | 0;
if ($124 >>> 0 >= (HEAP32[11606] | 0) >>> 0) {
$F289_0_i = $124;
$_pre_phi_i147 = $123;
break;
}
_abort();
return 0;
}
} while (0);
HEAP32[$_pre_phi_i147 >> 2] = $91;
HEAP32[$F289_0_i + 12 >> 2] = $91;
HEAP32[$89 + ($and144 + 8) >> 2] = $F289_0_i;
HEAP32[$89 + ($and144 + 12) >> 2] = $121;
break;
}
$129 = $add_ptr_i128;
$shr317_i = $rsize_3_lcssa_i >>> 8;
do {
if (($shr317_i | 0) == 0) {
$I315_0_i = 0;
} else {
if ($rsize_3_lcssa_i >>> 0 > 16777215) {
$I315_0_i = 31;
break;
}
$and330_i = ($shr317_i + 1048320 | 0) >>> 16 & 8;
$shl332_i = $shr317_i << $and330_i;
$and335_i = ($shl332_i + 520192 | 0) >>> 16 & 4;
$shl337_i = $shl332_i << $and335_i;
$and340_i = ($shl337_i + 245760 | 0) >>> 16 & 2;
$add345_i = 14 - ($and335_i | $and330_i | $and340_i) + ($shl337_i << $and340_i >>> 15) | 0;
$I315_0_i = $rsize_3_lcssa_i >>> (($add345_i + 7 | 0) >>> 0) & 1 | $add345_i << 1;
}
} while (0);
$arrayidx354_i = 46712 + ($I315_0_i << 2) | 0;
HEAP32[$89 + ($and144 + 28) >> 2] = $I315_0_i;
HEAP32[$89 + ($and144 + 20) >> 2] = 0;
HEAP32[$89 + ($and144 + 16) >> 2] = 0;
$132 = HEAP32[11603] | 0;
$shl361_i = 1 << $I315_0_i;
if (($132 & $shl361_i | 0) == 0) {
HEAP32[11603] = $132 | $shl361_i;
HEAP32[$arrayidx354_i >> 2] = $129;
HEAP32[$89 + ($and144 + 24) >> 2] = $arrayidx354_i;
HEAP32[$89 + ($and144 + 12) >> 2] = $129;
HEAP32[$89 + ($and144 + 8) >> 2] = $129;
break;
}
if (($I315_0_i | 0) == 31) {
$cond382_i = 0;
} else {
$cond382_i = 25 - ($I315_0_i >>> 1) | 0;
}
$K372_0_i = $rsize_3_lcssa_i << $cond382_i;
$T_0_i = HEAP32[$arrayidx354_i >> 2] | 0;
while (1) {
if ((HEAP32[$T_0_i + 4 >> 2] & -8 | 0) == ($rsize_3_lcssa_i | 0)) {
break;
}
$arrayidx393_i = $T_0_i + 16 + ($K372_0_i >>> 31 << 2) | 0;
$139 = HEAP32[$arrayidx393_i >> 2] | 0;
if (($139 | 0) == 0) {
label = 648;
break;
} else {
$K372_0_i = $K372_0_i << 1;
$T_0_i = $139;
}
}
if ((label | 0) == 648) {
if ($arrayidx393_i >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$arrayidx393_i >> 2] = $129;
HEAP32[$89 + ($and144 + 24) >> 2] = $T_0_i;
HEAP32[$89 + ($and144 + 12) >> 2] = $129;
HEAP32[$89 + ($and144 + 8) >> 2] = $129;
break;
}
}
$fd412_i = $T_0_i + 8 | 0;
$145 = HEAP32[$fd412_i >> 2] | 0;
$147 = HEAP32[11606] | 0;
if ($T_0_i >>> 0 < $147 >>> 0) {
_abort();
return 0;
}
if ($145 >>> 0 < $147 >>> 0) {
_abort();
return 0;
} else {
HEAP32[$145 + 12 >> 2] = $129;
HEAP32[$fd412_i >> 2] = $129;
HEAP32[$89 + ($and144 + 8) >> 2] = $145;
HEAP32[$89 + ($and144 + 12) >> 2] = $T_0_i;
HEAP32[$89 + ($and144 + 24) >> 2] = 0;
break;
}
}
} while (0);
$add_ptr436_i = $v_3_lcssa_i + 8 | 0;
if (($add_ptr436_i | 0) == 0) {
$nb_0 = $and144;
break;
} else {
$mem_0 = $add_ptr436_i;
}
return $mem_0 | 0;
}
} while (0);
$153 = HEAP32[11604] | 0;
if ($nb_0 >>> 0 <= $153 >>> 0) {
$sub159 = $153 - $nb_0 | 0;
$154 = HEAP32[11607] | 0;
if ($sub159 >>> 0 > 15) {
$155 = $154;
HEAP32[11607] = $155 + $nb_0;
HEAP32[11604] = $sub159;
HEAP32[$155 + ($nb_0 + 4) >> 2] = $sub159 | 1;
HEAP32[$155 + $153 >> 2] = $sub159;
HEAP32[$154 + 4 >> 2] = $nb_0 | 3;
} else {
HEAP32[11604] = 0;
HEAP32[11607] = 0;
HEAP32[$154 + 4 >> 2] = $153 | 3;
$159 = $154 + ($153 + 4) | 0;
HEAP32[$159 >> 2] = HEAP32[$159 >> 2] | 1;
}
$mem_0 = $154 + 8 | 0;
return $mem_0 | 0;
}
$162 = HEAP32[11605] | 0;
if ($nb_0 >>> 0 < $162 >>> 0) {
$sub187 = $162 - $nb_0 | 0;
HEAP32[11605] = $sub187;
$163 = HEAP32[11608] | 0;
$164 = $163;
HEAP32[11608] = $164 + $nb_0;
HEAP32[$164 + ($nb_0 + 4) >> 2] = $sub187 | 1;
HEAP32[$163 + 4 >> 2] = $nb_0 | 3;
$mem_0 = $163 + 8 | 0;
return $mem_0 | 0;
}
do {
if ((HEAP32[10824] | 0) == 0) {
$call_i_i = _sysconf(8) | 0;
if (($call_i_i - 1 & $call_i_i | 0) == 0) {
HEAP32[10826] = $call_i_i;
HEAP32[10825] = $call_i_i;
HEAP32[10827] = -1;
HEAP32[10828] = 2097152;
HEAP32[10829] = 0;
HEAP32[11713] = 0;
HEAP32[10824] = (_time(0) | 0) & -16 ^ 1431655768;
break;
} else {
_abort();
return 0;
}
}
} while (0);
$add_i149 = $nb_0 + 48 | 0;
$169 = HEAP32[10826] | 0;
$sub_i150 = $nb_0 + 47 | 0;
$add9_i = $169 + $sub_i150 | 0;
$neg_i151 = -$169 | 0;
$and11_i = $add9_i & $neg_i151;
if ($and11_i >>> 0 <= $nb_0 >>> 0) {
$mem_0 = 0;
return $mem_0 | 0;
}
$170 = HEAP32[11712] | 0;
do {
if (($170 | 0) != 0) {
$171 = HEAP32[11710] | 0;
$add17_i152 = $171 + $and11_i | 0;
if ($add17_i152 >>> 0 <= $171 >>> 0 | $add17_i152 >>> 0 > $170 >>> 0) {
$mem_0 = 0;
} else {
break;
}
return $mem_0 | 0;
}
} while (0);
L922 : do {
if ((HEAP32[11713] & 4 | 0) == 0) {
$173 = HEAP32[11608] | 0;
L924 : do {
if (($173 | 0) == 0) {
label = 678;
} else {
$174 = $173;
$sp_0_i_i = 46856;
while (1) {
$base_i_i = $sp_0_i_i | 0;
$175 = HEAP32[$base_i_i >> 2] | 0;
if ($175 >>> 0 <= $174 >>> 0) {
$size_i_i = $sp_0_i_i + 4 | 0;
if (($175 + (HEAP32[$size_i_i >> 2] | 0) | 0) >>> 0 > $174 >>> 0) {
break;
}
}
$177 = HEAP32[$sp_0_i_i + 8 >> 2] | 0;
if (($177 | 0) == 0) {
label = 678;
break L924;
} else {
$sp_0_i_i = $177;
}
}
if (($sp_0_i_i | 0) == 0) {
label = 678;
break;
}
$and77_i = $add9_i - (HEAP32[11605] | 0) & $neg_i151;
if ($and77_i >>> 0 >= 2147483647) {
$tsize_0758385_i = 0;
break;
}
$call80_i = _sbrk($and77_i | 0) | 0;
$cmp82_i = ($call80_i | 0) == ((HEAP32[$base_i_i >> 2] | 0) + (HEAP32[$size_i_i >> 2] | 0) | 0);
$tbase_0_i = $cmp82_i ? $call80_i : -1;
$tsize_0_i = $cmp82_i ? $and77_i : 0;
$br_0_i = $call80_i;
$ssize_1_i = $and77_i;
label = 687;
}
} while (0);
do {
if ((label | 0) == 678) {
$call34_i = _sbrk(0) | 0;
if (($call34_i | 0) == -1) {
$tsize_0758385_i = 0;
break;
}
$178 = $call34_i;
$179 = HEAP32[10825] | 0;
$sub38_i = $179 - 1 | 0;
if (($sub38_i & $178 | 0) == 0) {
$ssize_0_i = $and11_i;
} else {
$ssize_0_i = $and11_i - $178 + ($sub38_i + $178 & -$179) | 0;
}
$180 = HEAP32[11710] | 0;
$add51_i = $180 + $ssize_0_i | 0;
if (!($ssize_0_i >>> 0 > $nb_0 >>> 0 & $ssize_0_i >>> 0 < 2147483647)) {
$tsize_0758385_i = 0;
break;
}
$181 = HEAP32[11712] | 0;
if (($181 | 0) != 0) {
if ($add51_i >>> 0 <= $180 >>> 0 | $add51_i >>> 0 > $181 >>> 0) {
$tsize_0758385_i = 0;
break;
}
}
$call65_i = _sbrk($ssize_0_i | 0) | 0;
$cmp66_i160 = ($call65_i | 0) == ($call34_i | 0);
$tbase_0_i = $cmp66_i160 ? $call34_i : -1;
$tsize_0_i = $cmp66_i160 ? $ssize_0_i : 0;
$br_0_i = $call65_i;
$ssize_1_i = $ssize_0_i;
label = 687;
}
} while (0);
L944 : do {
if ((label | 0) == 687) {
$sub109_i = -$ssize_1_i | 0;
if (($tbase_0_i | 0) != -1) {
$tsize_291_i = $tsize_0_i;
$tbase_292_i = $tbase_0_i;
label = 698;
break L922;
}
do {
if (($br_0_i | 0) != -1 & $ssize_1_i >>> 0 < 2147483647 & $ssize_1_i >>> 0 < $add_i149 >>> 0) {
$185 = HEAP32[10826] | 0;
$and101_i = $sub_i150 - $ssize_1_i + $185 & -$185;
if ($and101_i >>> 0 >= 2147483647) {
$ssize_2_i = $ssize_1_i;
break;
}
if ((_sbrk($and101_i | 0) | 0) == -1) {
_sbrk($sub109_i | 0) | 0;
$tsize_0758385_i = $tsize_0_i;
break L944;
} else {
$ssize_2_i = $and101_i + $ssize_1_i | 0;
break;
}
} else {
$ssize_2_i = $ssize_1_i;
}
} while (0);
if (($br_0_i | 0) == -1) {
$tsize_0758385_i = $tsize_0_i;
} else {
$tsize_291_i = $ssize_2_i;
$tbase_292_i = $br_0_i;
label = 698;
break L922;
}
}
} while (0);
HEAP32[11713] = HEAP32[11713] | 4;
$tsize_1_i = $tsize_0758385_i;
label = 695;
} else {
$tsize_1_i = 0;
label = 695;
}
} while (0);
do {
if ((label | 0) == 695) {
if ($and11_i >>> 0 >= 2147483647) {
break;
}
$call128_i = _sbrk($and11_i | 0) | 0;
$call129_i = _sbrk(0) | 0;
if (!(($call129_i | 0) != -1 & ($call128_i | 0) != -1 & $call128_i >>> 0 < $call129_i >>> 0)) {
break;
}
$sub_ptr_sub_i = $call129_i - $call128_i | 0;
$cmp138_i166 = $sub_ptr_sub_i >>> 0 > ($nb_0 + 40 | 0) >>> 0;
$call128_tbase_1_i = $cmp138_i166 ? $call128_i : -1;
if (($call128_tbase_1_i | 0) != -1) {
$tsize_291_i = $cmp138_i166 ? $sub_ptr_sub_i : $tsize_1_i;
$tbase_292_i = $call128_tbase_1_i;
label = 698;
}
}
} while (0);
do {
if ((label | 0) == 698) {
$add147_i = (HEAP32[11710] | 0) + $tsize_291_i | 0;
HEAP32[11710] = $add147_i;
if ($add147_i >>> 0 > (HEAP32[11711] | 0) >>> 0) {
HEAP32[11711] = $add147_i;
}
$189 = HEAP32[11608] | 0;
L964 : do {
if (($189 | 0) == 0) {
$190 = HEAP32[11606] | 0;
if (($190 | 0) == 0 | $tbase_292_i >>> 0 < $190 >>> 0) {
HEAP32[11606] = $tbase_292_i;
}
HEAP32[11714] = $tbase_292_i;
HEAP32[11715] = $tsize_291_i;
HEAP32[11717] = 0;
HEAP32[11611] = HEAP32[10824];
HEAP32[11610] = -1;
$i_02_i_i = 0;
do {
$shl_i_i = $i_02_i_i << 1;
$192 = 46448 + ($shl_i_i << 2) | 0;
HEAP32[46448 + ($shl_i_i + 3 << 2) >> 2] = $192;
HEAP32[46448 + ($shl_i_i + 2 << 2) >> 2] = $192;
$i_02_i_i = $i_02_i_i + 1 | 0;
} while ($i_02_i_i >>> 0 < 32);
$195 = $tbase_292_i + 8 | 0;
if (($195 & 7 | 0) == 0) {
$cond_i_i = 0;
} else {
$cond_i_i = -$195 & 7;
}
$sub5_i_i = $tsize_291_i - 40 - $cond_i_i | 0;
HEAP32[11608] = $tbase_292_i + $cond_i_i;
HEAP32[11605] = $sub5_i_i;
HEAP32[$tbase_292_i + ($cond_i_i + 4) >> 2] = $sub5_i_i | 1;
HEAP32[$tbase_292_i + ($tsize_291_i - 36) >> 2] = 40;
HEAP32[11609] = HEAP32[10828];
} else {
$sp_0105_i = 46856;
while (1) {
$201 = HEAP32[$sp_0105_i >> 2] | 0;
$size185_i = $sp_0105_i + 4 | 0;
$202 = HEAP32[$size185_i >> 2] | 0;
if (($tbase_292_i | 0) == ($201 + $202 | 0)) {
label = 710;
break;
}
$203 = HEAP32[$sp_0105_i + 8 >> 2] | 0;
if (($203 | 0) == 0) {
break;
} else {
$sp_0105_i = $203;
}
}
do {
if ((label | 0) == 710) {
if ((HEAP32[$sp_0105_i + 12 >> 2] & 8 | 0) != 0) {
break;
}
$205 = $189;
if (!($205 >>> 0 >= $201 >>> 0 & $205 >>> 0 < $tbase_292_i >>> 0)) {
break;
}
HEAP32[$size185_i >> 2] = $202 + $tsize_291_i;
$206 = HEAP32[11608] | 0;
$add212_i = (HEAP32[11605] | 0) + $tsize_291_i | 0;
$208 = $206;
$209 = $206 + 8 | 0;
if (($209 & 7 | 0) == 0) {
$cond_i28_i = 0;
} else {
$cond_i28_i = -$209 & 7;
}
$sub5_i30_i = $add212_i - $cond_i28_i | 0;
HEAP32[11608] = $208 + $cond_i28_i;
HEAP32[11605] = $sub5_i30_i;
HEAP32[$208 + ($cond_i28_i + 4) >> 2] = $sub5_i30_i | 1;
HEAP32[$208 + ($add212_i + 4) >> 2] = 40;
HEAP32[11609] = HEAP32[10828];
break L964;
}
} while (0);
if ($tbase_292_i >>> 0 < (HEAP32[11606] | 0) >>> 0) {
HEAP32[11606] = $tbase_292_i;
}
$add_ptr224_i = $tbase_292_i + $tsize_291_i | 0;
$sp_1101_i = 46856;
while (1) {
$base223_i = $sp_1101_i | 0;
if ((HEAP32[$base223_i >> 2] | 0) == ($add_ptr224_i | 0)) {
label = 720;
break;
}
$217 = HEAP32[$sp_1101_i + 8 >> 2] | 0;
if (($217 | 0) == 0) {
break;
} else {
$sp_1101_i = $217;
}
}
do {
if ((label | 0) == 720) {
if ((HEAP32[$sp_1101_i + 12 >> 2] & 8 | 0) != 0) {
break;
}
HEAP32[$base223_i >> 2] = $tbase_292_i;
$size242_i = $sp_1101_i + 4 | 0;
HEAP32[$size242_i >> 2] = (HEAP32[$size242_i >> 2] | 0) + $tsize_291_i;
$220 = $tbase_292_i + 8 | 0;
if (($220 & 7 | 0) == 0) {
$cond_i43_i = 0;
} else {
$cond_i43_i = -$220 & 7;
}
$222 = $tbase_292_i + ($tsize_291_i + 8) | 0;
if (($222 & 7 | 0) == 0) {
$cond15_i_i = 0;
} else {
$cond15_i_i = -$222 & 7;
}
$add_ptr16_i_i = $tbase_292_i + ($cond15_i_i + $tsize_291_i) | 0;
$224 = $add_ptr16_i_i;
$add_ptr4_sum_i50_i = $cond_i43_i + $nb_0 | 0;
$add_ptr17_i_i = $tbase_292_i + $add_ptr4_sum_i50_i | 0;
$225 = $add_ptr17_i_i;
$sub18_i_i = $add_ptr16_i_i - ($tbase_292_i + $cond_i43_i) - $nb_0 | 0;
HEAP32[$tbase_292_i + ($cond_i43_i + 4) >> 2] = $nb_0 | 3;
do {
if (($224 | 0) == (HEAP32[11608] | 0)) {
$add_i_i = (HEAP32[11605] | 0) + $sub18_i_i | 0;
HEAP32[11605] = $add_i_i;
HEAP32[11608] = $225;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 4) >> 2] = $add_i_i | 1;
} else {
if (($224 | 0) == (HEAP32[11607] | 0)) {
$add26_i_i = (HEAP32[11604] | 0) + $sub18_i_i | 0;
HEAP32[11604] = $add26_i_i;
HEAP32[11607] = $225;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 4) >> 2] = $add26_i_i | 1;
HEAP32[$tbase_292_i + ($add26_i_i + $add_ptr4_sum_i50_i) >> 2] = $add26_i_i;
break;
}
$add_ptr16_sum_i_i = $tsize_291_i + 4 | 0;
$234 = HEAP32[$tbase_292_i + ($add_ptr16_sum_i_i + $cond15_i_i) >> 2] | 0;
if (($234 & 3 | 0) == 1) {
$and37_i_i = $234 & -8;
$shr_i55_i = $234 >>> 3;
L1009 : do {
if ($234 >>> 0 < 256) {
$236 = HEAP32[$tbase_292_i + (($cond15_i_i | 8) + $tsize_291_i) >> 2] | 0;
$238 = HEAP32[$tbase_292_i + ($tsize_291_i + 12 + $cond15_i_i) >> 2] | 0;
$239 = 46448 + ($shr_i55_i << 1 << 2) | 0;
do {
if (($236 | 0) != ($239 | 0)) {
if ($236 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
if ((HEAP32[$236 + 12 >> 2] | 0) == ($224 | 0)) {
break;
}
_abort();
return 0;
}
} while (0);
if (($238 | 0) == ($236 | 0)) {
HEAP32[11602] = HEAP32[11602] & ~(1 << $shr_i55_i);
break;
}
do {
if (($238 | 0) == ($239 | 0)) {
$fd68_pre_phi_i_i = $238 + 8 | 0;
} else {
if ($238 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
$fd59_i_i = $238 + 8 | 0;
if ((HEAP32[$fd59_i_i >> 2] | 0) == ($224 | 0)) {
$fd68_pre_phi_i_i = $fd59_i_i;
break;
}
_abort();
return 0;
}
} while (0);
HEAP32[$236 + 12 >> 2] = $238;
HEAP32[$fd68_pre_phi_i_i >> 2] = $236;
} else {
$247 = $add_ptr16_i_i;
$249 = HEAP32[$tbase_292_i + (($cond15_i_i | 24) + $tsize_291_i) >> 2] | 0;
$251 = HEAP32[$tbase_292_i + ($tsize_291_i + 12 + $cond15_i_i) >> 2] | 0;
do {
if (($251 | 0) == ($247 | 0)) {
$add_ptr16_sum56_i_i = $cond15_i_i | 16;
$258 = $tbase_292_i + ($add_ptr16_sum_i_i + $add_ptr16_sum56_i_i) | 0;
$259 = HEAP32[$258 >> 2] | 0;
if (($259 | 0) == 0) {
$arrayidx99_i_i = $tbase_292_i + ($add_ptr16_sum56_i_i + $tsize_291_i) | 0;
$260 = HEAP32[$arrayidx99_i_i >> 2] | 0;
if (($260 | 0) == 0) {
$R_1_i_i = 0;
break;
} else {
$R_0_i_i = $260;
$RP_0_i_i = $arrayidx99_i_i;
}
} else {
$R_0_i_i = $259;
$RP_0_i_i = $258;
}
while (1) {
$arrayidx103_i_i = $R_0_i_i + 20 | 0;
$261 = HEAP32[$arrayidx103_i_i >> 2] | 0;
if (($261 | 0) != 0) {
$R_0_i_i = $261;
$RP_0_i_i = $arrayidx103_i_i;
continue;
}
$arrayidx107_i_i = $R_0_i_i + 16 | 0;
$262 = HEAP32[$arrayidx107_i_i >> 2] | 0;
if (($262 | 0) == 0) {
break;
} else {
$R_0_i_i = $262;
$RP_0_i_i = $arrayidx107_i_i;
}
}
if ($RP_0_i_i >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$RP_0_i_i >> 2] = 0;
$R_1_i_i = $R_0_i_i;
break;
}
} else {
$253 = HEAP32[$tbase_292_i + (($cond15_i_i | 8) + $tsize_291_i) >> 2] | 0;
if ($253 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
$bk82_i_i = $253 + 12 | 0;
if ((HEAP32[$bk82_i_i >> 2] | 0) != ($247 | 0)) {
_abort();
return 0;
}
$fd85_i_i = $251 + 8 | 0;
if ((HEAP32[$fd85_i_i >> 2] | 0) == ($247 | 0)) {
HEAP32[$bk82_i_i >> 2] = $251;
HEAP32[$fd85_i_i >> 2] = $253;
$R_1_i_i = $251;
break;
} else {
_abort();
return 0;
}
}
} while (0);
if (($249 | 0) == 0) {
break;
}
$265 = $tbase_292_i + ($tsize_291_i + 28 + $cond15_i_i) | 0;
$arrayidx123_i_i = 46712 + (HEAP32[$265 >> 2] << 2) | 0;
do {
if (($247 | 0) == (HEAP32[$arrayidx123_i_i >> 2] | 0)) {
HEAP32[$arrayidx123_i_i >> 2] = $R_1_i_i;
if (($R_1_i_i | 0) != 0) {
break;
}
HEAP32[11603] = HEAP32[11603] & ~(1 << HEAP32[$265 >> 2]);
break L1009;
} else {
if ($249 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
$arrayidx143_i_i = $249 + 16 | 0;
if ((HEAP32[$arrayidx143_i_i >> 2] | 0) == ($247 | 0)) {
HEAP32[$arrayidx143_i_i >> 2] = $R_1_i_i;
} else {
HEAP32[$249 + 20 >> 2] = $R_1_i_i;
}
if (($R_1_i_i | 0) == 0) {
break L1009;
}
}
} while (0);
if ($R_1_i_i >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
HEAP32[$R_1_i_i + 24 >> 2] = $249;
$add_ptr16_sum2728_i_i = $cond15_i_i | 16;
$275 = HEAP32[$tbase_292_i + ($add_ptr16_sum2728_i_i + $tsize_291_i) >> 2] | 0;
do {
if (($275 | 0) != 0) {
if ($275 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$R_1_i_i + 16 >> 2] = $275;
HEAP32[$275 + 24 >> 2] = $R_1_i_i;
break;
}
}
} while (0);
$279 = HEAP32[$tbase_292_i + ($add_ptr16_sum_i_i + $add_ptr16_sum2728_i_i) >> 2] | 0;
if (($279 | 0) == 0) {
break;
}
if ($279 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$R_1_i_i + 20 >> 2] = $279;
HEAP32[$279 + 24 >> 2] = $R_1_i_i;
break;
}
}
} while (0);
$oldfirst_0_i_i = $tbase_292_i + (($and37_i_i | $cond15_i_i) + $tsize_291_i) | 0;
$qsize_0_i_i = $and37_i_i + $sub18_i_i | 0;
} else {
$oldfirst_0_i_i = $224;
$qsize_0_i_i = $sub18_i_i;
}
$head208_i_i = $oldfirst_0_i_i + 4 | 0;
HEAP32[$head208_i_i >> 2] = HEAP32[$head208_i_i >> 2] & -2;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 4) >> 2] = $qsize_0_i_i | 1;
HEAP32[$tbase_292_i + ($qsize_0_i_i + $add_ptr4_sum_i50_i) >> 2] = $qsize_0_i_i;
$shr214_i_i = $qsize_0_i_i >>> 3;
if ($qsize_0_i_i >>> 0 < 256) {
$shl221_i_i = $shr214_i_i << 1;
$285 = 46448 + ($shl221_i_i << 2) | 0;
$286 = HEAP32[11602] | 0;
$shl226_i_i = 1 << $shr214_i_i;
do {
if (($286 & $shl226_i_i | 0) == 0) {
HEAP32[11602] = $286 | $shl226_i_i;
$F224_0_i_i = $285;
$_pre_phi_i68_i = 46448 + ($shl221_i_i + 2 << 2) | 0;
} else {
$287 = 46448 + ($shl221_i_i + 2 << 2) | 0;
$288 = HEAP32[$287 >> 2] | 0;
if ($288 >>> 0 >= (HEAP32[11606] | 0) >>> 0) {
$F224_0_i_i = $288;
$_pre_phi_i68_i = $287;
break;
}
_abort();
return 0;
}
} while (0);
HEAP32[$_pre_phi_i68_i >> 2] = $225;
HEAP32[$F224_0_i_i + 12 >> 2] = $225;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 8) >> 2] = $F224_0_i_i;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 12) >> 2] = $285;
break;
}
$293 = $add_ptr17_i_i;
$shr253_i_i = $qsize_0_i_i >>> 8;
do {
if (($shr253_i_i | 0) == 0) {
$I252_0_i_i = 0;
} else {
if ($qsize_0_i_i >>> 0 > 16777215) {
$I252_0_i_i = 31;
break;
}
$and264_i_i = ($shr253_i_i + 1048320 | 0) >>> 16 & 8;
$shl265_i_i = $shr253_i_i << $and264_i_i;
$and268_i_i = ($shl265_i_i + 520192 | 0) >>> 16 & 4;
$shl270_i_i = $shl265_i_i << $and268_i_i;
$and273_i_i = ($shl270_i_i + 245760 | 0) >>> 16 & 2;
$add278_i_i = 14 - ($and268_i_i | $and264_i_i | $and273_i_i) + ($shl270_i_i << $and273_i_i >>> 15) | 0;
$I252_0_i_i = $qsize_0_i_i >>> (($add278_i_i + 7 | 0) >>> 0) & 1 | $add278_i_i << 1;
}
} while (0);
$arrayidx287_i_i = 46712 + ($I252_0_i_i << 2) | 0;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 28) >> 2] = $I252_0_i_i;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 20) >> 2] = 0;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 16) >> 2] = 0;
$296 = HEAP32[11603] | 0;
$shl294_i_i = 1 << $I252_0_i_i;
if (($296 & $shl294_i_i | 0) == 0) {
HEAP32[11603] = $296 | $shl294_i_i;
HEAP32[$arrayidx287_i_i >> 2] = $293;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 24) >> 2] = $arrayidx287_i_i;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 12) >> 2] = $293;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 8) >> 2] = $293;
break;
}
if (($I252_0_i_i | 0) == 31) {
$cond315_i_i = 0;
} else {
$cond315_i_i = 25 - ($I252_0_i_i >>> 1) | 0;
}
$K305_0_i_i = $qsize_0_i_i << $cond315_i_i;
$T_0_i69_i = HEAP32[$arrayidx287_i_i >> 2] | 0;
while (1) {
if ((HEAP32[$T_0_i69_i + 4 >> 2] & -8 | 0) == ($qsize_0_i_i | 0)) {
break;
}
$arrayidx325_i_i = $T_0_i69_i + 16 + ($K305_0_i_i >>> 31 << 2) | 0;
$303 = HEAP32[$arrayidx325_i_i >> 2] | 0;
if (($303 | 0) == 0) {
label = 793;
break;
} else {
$K305_0_i_i = $K305_0_i_i << 1;
$T_0_i69_i = $303;
}
}
if ((label | 0) == 793) {
if ($arrayidx325_i_i >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$arrayidx325_i_i >> 2] = $293;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 24) >> 2] = $T_0_i69_i;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 12) >> 2] = $293;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 8) >> 2] = $293;
break;
}
}
$fd344_i_i = $T_0_i69_i + 8 | 0;
$309 = HEAP32[$fd344_i_i >> 2] | 0;
$311 = HEAP32[11606] | 0;
if ($T_0_i69_i >>> 0 < $311 >>> 0) {
_abort();
return 0;
}
if ($309 >>> 0 < $311 >>> 0) {
_abort();
return 0;
} else {
HEAP32[$309 + 12 >> 2] = $293;
HEAP32[$fd344_i_i >> 2] = $293;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 8) >> 2] = $309;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 12) >> 2] = $T_0_i69_i;
HEAP32[$tbase_292_i + ($add_ptr4_sum_i50_i + 24) >> 2] = 0;
break;
}
}
} while (0);
$mem_0 = $tbase_292_i + ($cond_i43_i | 8) | 0;
return $mem_0 | 0;
}
} while (0);
$316 = $189;
$sp_0_i_i_i = 46856;
while (1) {
$317 = HEAP32[$sp_0_i_i_i >> 2] | 0;
if ($317 >>> 0 <= $316 >>> 0) {
$318 = HEAP32[$sp_0_i_i_i + 4 >> 2] | 0;
$add_ptr_i_i_i = $317 + $318 | 0;
if ($add_ptr_i_i_i >>> 0 > $316 >>> 0) {
break;
}
}
$sp_0_i_i_i = HEAP32[$sp_0_i_i_i + 8 >> 2] | 0;
}
$320 = $317 + ($318 - 39) | 0;
if (($320 & 7 | 0) == 0) {
$cond_i18_i = 0;
} else {
$cond_i18_i = -$320 & 7;
}
$add_ptr7_i_i = $317 + ($318 - 47 + $cond_i18_i) | 0;
$cond13_i_i = $add_ptr7_i_i >>> 0 < ($189 + 16 | 0) >>> 0 ? $316 : $add_ptr7_i_i;
$add_ptr14_i_i = $cond13_i_i + 8 | 0;
$323 = $tbase_292_i + 8 | 0;
if (($323 & 7 | 0) == 0) {
$cond_i_i_i = 0;
} else {
$cond_i_i_i = -$323 & 7;
}
$sub5_i_i_i = $tsize_291_i - 40 - $cond_i_i_i | 0;
HEAP32[11608] = $tbase_292_i + $cond_i_i_i;
HEAP32[11605] = $sub5_i_i_i;
HEAP32[$tbase_292_i + ($cond_i_i_i + 4) >> 2] = $sub5_i_i_i | 1;
HEAP32[$tbase_292_i + ($tsize_291_i - 36) >> 2] = 40;
HEAP32[11609] = HEAP32[10828];
HEAP32[$cond13_i_i + 4 >> 2] = 27;
HEAP32[$add_ptr14_i_i >> 2] = HEAP32[11714];
HEAP32[$add_ptr14_i_i + 4 >> 2] = HEAP32[46860 >> 2];
HEAP32[$add_ptr14_i_i + 8 >> 2] = HEAP32[46864 >> 2];
HEAP32[$add_ptr14_i_i + 12 >> 2] = HEAP32[46868 >> 2];
HEAP32[11714] = $tbase_292_i;
HEAP32[11715] = $tsize_291_i;
HEAP32[11717] = 0;
HEAP32[11716] = $add_ptr14_i_i;
$330 = $cond13_i_i + 28 | 0;
HEAP32[$330 >> 2] = 7;
if (($cond13_i_i + 32 | 0) >>> 0 < $add_ptr_i_i_i >>> 0) {
$add_ptr2416_i_i = $330;
while (1) {
$332 = $add_ptr2416_i_i + 4 | 0;
HEAP32[$332 >> 2] = 7;
if (($add_ptr2416_i_i + 8 | 0) >>> 0 < $add_ptr_i_i_i >>> 0) {
$add_ptr2416_i_i = $332;
} else {
break;
}
}
}
if (($cond13_i_i | 0) == ($316 | 0)) {
break;
}
$sub_ptr_sub_i_i = $cond13_i_i - $189 | 0;
$335 = $316 + ($sub_ptr_sub_i_i + 4) | 0;
HEAP32[$335 >> 2] = HEAP32[$335 >> 2] & -2;
HEAP32[$189 + 4 >> 2] = $sub_ptr_sub_i_i | 1;
HEAP32[$316 + $sub_ptr_sub_i_i >> 2] = $sub_ptr_sub_i_i;
$shr_i_i = $sub_ptr_sub_i_i >>> 3;
if ($sub_ptr_sub_i_i >>> 0 < 256) {
$shl_i21_i = $shr_i_i << 1;
$337 = 46448 + ($shl_i21_i << 2) | 0;
$338 = HEAP32[11602] | 0;
$shl39_i_i = 1 << $shr_i_i;
do {
if (($338 & $shl39_i_i | 0) == 0) {
HEAP32[11602] = $338 | $shl39_i_i;
$F_0_i_i = $337;
$_pre_phi_i_i = 46448 + ($shl_i21_i + 2 << 2) | 0;
} else {
$339 = 46448 + ($shl_i21_i + 2 << 2) | 0;
$340 = HEAP32[$339 >> 2] | 0;
if ($340 >>> 0 >= (HEAP32[11606] | 0) >>> 0) {
$F_0_i_i = $340;
$_pre_phi_i_i = $339;
break;
}
_abort();
return 0;
}
} while (0);
HEAP32[$_pre_phi_i_i >> 2] = $189;
HEAP32[$F_0_i_i + 12 >> 2] = $189;
HEAP32[$189 + 8 >> 2] = $F_0_i_i;
HEAP32[$189 + 12 >> 2] = $337;
break;
}
$343 = $189;
$shr58_i_i = $sub_ptr_sub_i_i >>> 8;
do {
if (($shr58_i_i | 0) == 0) {
$I57_0_i_i = 0;
} else {
if ($sub_ptr_sub_i_i >>> 0 > 16777215) {
$I57_0_i_i = 31;
break;
}
$and69_i_i = ($shr58_i_i + 1048320 | 0) >>> 16 & 8;
$shl70_i_i = $shr58_i_i << $and69_i_i;
$and73_i_i = ($shl70_i_i + 520192 | 0) >>> 16 & 4;
$shl75_i_i = $shl70_i_i << $and73_i_i;
$and78_i_i = ($shl75_i_i + 245760 | 0) >>> 16 & 2;
$add83_i_i = 14 - ($and73_i_i | $and69_i_i | $and78_i_i) + ($shl75_i_i << $and78_i_i >>> 15) | 0;
$I57_0_i_i = $sub_ptr_sub_i_i >>> (($add83_i_i + 7 | 0) >>> 0) & 1 | $add83_i_i << 1;
}
} while (0);
$arrayidx91_i_i = 46712 + ($I57_0_i_i << 2) | 0;
HEAP32[$189 + 28 >> 2] = $I57_0_i_i;
HEAP32[$189 + 20 >> 2] = 0;
HEAP32[$189 + 16 >> 2] = 0;
$345 = HEAP32[11603] | 0;
$shl95_i_i = 1 << $I57_0_i_i;
if (($345 & $shl95_i_i | 0) == 0) {
HEAP32[11603] = $345 | $shl95_i_i;
HEAP32[$arrayidx91_i_i >> 2] = $343;
HEAP32[$189 + 24 >> 2] = $arrayidx91_i_i;
HEAP32[$189 + 12 >> 2] = $189;
HEAP32[$189 + 8 >> 2] = $189;
break;
}
if (($I57_0_i_i | 0) == 31) {
$cond115_i_i = 0;
} else {
$cond115_i_i = 25 - ($I57_0_i_i >>> 1) | 0;
}
$K105_0_i_i = $sub_ptr_sub_i_i << $cond115_i_i;
$T_0_i_i = HEAP32[$arrayidx91_i_i >> 2] | 0;
while (1) {
if ((HEAP32[$T_0_i_i + 4 >> 2] & -8 | 0) == ($sub_ptr_sub_i_i | 0)) {
break;
}
$arrayidx126_i_i = $T_0_i_i + 16 + ($K105_0_i_i >>> 31 << 2) | 0;
$348 = HEAP32[$arrayidx126_i_i >> 2] | 0;
if (($348 | 0) == 0) {
label = 828;
break;
} else {
$K105_0_i_i = $K105_0_i_i << 1;
$T_0_i_i = $348;
}
}
if ((label | 0) == 828) {
if ($arrayidx126_i_i >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$arrayidx126_i_i >> 2] = $343;
HEAP32[$189 + 24 >> 2] = $T_0_i_i;
HEAP32[$189 + 12 >> 2] = $189;
HEAP32[$189 + 8 >> 2] = $189;
break;
}
}
$fd145_i_i = $T_0_i_i + 8 | 0;
$351 = HEAP32[$fd145_i_i >> 2] | 0;
$353 = HEAP32[11606] | 0;
if ($T_0_i_i >>> 0 < $353 >>> 0) {
_abort();
return 0;
}
if ($351 >>> 0 < $353 >>> 0) {
_abort();
return 0;
} else {
HEAP32[$351 + 12 >> 2] = $343;
HEAP32[$fd145_i_i >> 2] = $343;
HEAP32[$189 + 8 >> 2] = $351;
HEAP32[$189 + 12 >> 2] = $T_0_i_i;
HEAP32[$189 + 24 >> 2] = 0;
break;
}
}
} while (0);
$355 = HEAP32[11605] | 0;
if ($355 >>> 0 <= $nb_0 >>> 0) {
break;
}
$sub253_i = $355 - $nb_0 | 0;
HEAP32[11605] = $sub253_i;
$356 = HEAP32[11608] | 0;
$357 = $356;
HEAP32[11608] = $357 + $nb_0;
HEAP32[$357 + ($nb_0 + 4) >> 2] = $sub253_i | 1;
HEAP32[$356 + 4 >> 2] = $nb_0 | 3;
$mem_0 = $356 + 8 | 0;
return $mem_0 | 0;
}
} while (0);
HEAP32[(___errno_location() | 0) >> 2] = 12;
$mem_0 = 0;
return $mem_0 | 0;
}
function _free($mem) {
$mem = $mem | 0;
var $add_ptr = 0, $0 = 0, $1 = 0, $3 = 0, $and = 0, $and5 = 0, $add_ptr6 = 0, $4 = 0, $5 = 0, $add_ptr_sum232 = 0, $add_ptr16 = 0, $6 = 0, $add17 = 0, $shr = 0, $9 = 0, $11 = 0, $12 = 0, $fd56 = 0, $fd67_pre_phi = 0, $18 = 0, $20 = 0, $22 = 0, $24 = 0, $bk82 = 0, $fd86 = 0, $28 = 0, $29 = 0, $arrayidx103 = 0, $30 = 0, $RP_0 = 0, $R_0 = 0, $arrayidx108 = 0, $31 = 0, $arrayidx113 = 0, $32 = 0, $R_1 = 0, $34 = 0, $arrayidx130 = 0, $arrayidx149 = 0, $44 = 0, $48 = 0, $51 = 0, $psize_0 = 0, $p_0 = 0, $55 = 0, $56 = 0, $57 = 0, $add243 = 0, $add258 = 0, $add266 = 0, $shr267 = 0, $66 = 0, $68 = 0, $69 = 0, $fd310 = 0, $fd321_pre_phi = 0, $77 = 0, $79 = 0, $81 = 0, $83 = 0, $bk342 = 0, $fd346 = 0, $88 = 0, $89 = 0, $arrayidx366 = 0, $90 = 0, $RP359_0 = 0, $R331_0 = 0, $arrayidx373 = 0, $91 = 0, $arrayidx378 = 0, $92 = 0, $R331_1 = 0, $95 = 0, $arrayidx399 = 0, $arrayidx418 = 0, $105 = 0, $109 = 0, $psize_1 = 0, $shr497 = 0, $shl504 = 0, $113 = 0, $114 = 0, $shl507 = 0, $115 = 0, $116 = 0, $_pre_phi = 0, $F506_0 = 0, $119 = 0, $shr531 = 0, $and541 = 0, $shl542 = 0, $and545 = 0, $shl547 = 0, $and550 = 0, $add555 = 0, $I530_0 = 0, $arrayidx563 = 0, $121 = 0, $shl569 = 0, $cond = 0, $T_0 = 0, $K579_0 = 0, $arrayidx595 = 0, $124 = 0, $fd613 = 0, $127 = 0, $129 = 0, $dec = 0, $sp_0_in_i = 0, $sp_0_i = 0, label = 0;
if (($mem | 0) == 0) {
return;
}
$add_ptr = $mem - 8 | 0;
$0 = $add_ptr;
$1 = HEAP32[11606] | 0;
if ($add_ptr >>> 0 < $1 >>> 0) {
_abort();
}
$3 = HEAP32[$mem - 4 >> 2] | 0;
$and = $3 & 3;
if (($and | 0) == 1) {
_abort();
}
$and5 = $3 & -8;
$add_ptr6 = $mem + ($and5 - 8) | 0;
$4 = $add_ptr6;
L1181 : do {
if (($3 & 1 | 0) == 0) {
$5 = HEAP32[$add_ptr >> 2] | 0;
if (($and | 0) == 0) {
return;
}
$add_ptr_sum232 = -8 - $5 | 0;
$add_ptr16 = $mem + $add_ptr_sum232 | 0;
$6 = $add_ptr16;
$add17 = $5 + $and5 | 0;
if ($add_ptr16 >>> 0 < $1 >>> 0) {
_abort();
}
if (($6 | 0) == (HEAP32[11607] | 0)) {
$51 = $mem + ($and5 - 4) | 0;
if ((HEAP32[$51 >> 2] & 3 | 0) != 3) {
$p_0 = $6;
$psize_0 = $add17;
break;
}
HEAP32[11604] = $add17;
HEAP32[$51 >> 2] = HEAP32[$51 >> 2] & -2;
HEAP32[$mem + ($add_ptr_sum232 + 4) >> 2] = $add17 | 1;
HEAP32[$add_ptr6 >> 2] = $add17;
return;
}
$shr = $5 >>> 3;
if ($5 >>> 0 < 256) {
$9 = HEAP32[$mem + ($add_ptr_sum232 + 8) >> 2] | 0;
$11 = HEAP32[$mem + ($add_ptr_sum232 + 12) >> 2] | 0;
$12 = 46448 + ($shr << 1 << 2) | 0;
do {
if (($9 | 0) != ($12 | 0)) {
if ($9 >>> 0 < $1 >>> 0) {
_abort();
}
if ((HEAP32[$9 + 12 >> 2] | 0) == ($6 | 0)) {
break;
}
_abort();
}
} while (0);
if (($11 | 0) == ($9 | 0)) {
HEAP32[11602] = HEAP32[11602] & ~(1 << $shr);
$p_0 = $6;
$psize_0 = $add17;
break;
}
do {
if (($11 | 0) == ($12 | 0)) {
$fd67_pre_phi = $11 + 8 | 0;
} else {
if ($11 >>> 0 < $1 >>> 0) {
_abort();
}
$fd56 = $11 + 8 | 0;
if ((HEAP32[$fd56 >> 2] | 0) == ($6 | 0)) {
$fd67_pre_phi = $fd56;
break;
}
_abort();
}
} while (0);
HEAP32[$9 + 12 >> 2] = $11;
HEAP32[$fd67_pre_phi >> 2] = $9;
$p_0 = $6;
$psize_0 = $add17;
break;
}
$18 = $add_ptr16;
$20 = HEAP32[$mem + ($add_ptr_sum232 + 24) >> 2] | 0;
$22 = HEAP32[$mem + ($add_ptr_sum232 + 12) >> 2] | 0;
do {
if (($22 | 0) == ($18 | 0)) {
$28 = $mem + ($add_ptr_sum232 + 20) | 0;
$29 = HEAP32[$28 >> 2] | 0;
if (($29 | 0) == 0) {
$arrayidx103 = $mem + ($add_ptr_sum232 + 16) | 0;
$30 = HEAP32[$arrayidx103 >> 2] | 0;
if (($30 | 0) == 0) {
$R_1 = 0;
break;
} else {
$R_0 = $30;
$RP_0 = $arrayidx103;
}
} else {
$R_0 = $29;
$RP_0 = $28;
}
while (1) {
$arrayidx108 = $R_0 + 20 | 0;
$31 = HEAP32[$arrayidx108 >> 2] | 0;
if (($31 | 0) != 0) {
$R_0 = $31;
$RP_0 = $arrayidx108;
continue;
}
$arrayidx113 = $R_0 + 16 | 0;
$32 = HEAP32[$arrayidx113 >> 2] | 0;
if (($32 | 0) == 0) {
break;
} else {
$R_0 = $32;
$RP_0 = $arrayidx113;
}
}
if ($RP_0 >>> 0 < $1 >>> 0) {
_abort();
} else {
HEAP32[$RP_0 >> 2] = 0;
$R_1 = $R_0;
break;
}
} else {
$24 = HEAP32[$mem + ($add_ptr_sum232 + 8) >> 2] | 0;
if ($24 >>> 0 < $1 >>> 0) {
_abort();
}
$bk82 = $24 + 12 | 0;
if ((HEAP32[$bk82 >> 2] | 0) != ($18 | 0)) {
_abort();
}
$fd86 = $22 + 8 | 0;
if ((HEAP32[$fd86 >> 2] | 0) == ($18 | 0)) {
HEAP32[$bk82 >> 2] = $22;
HEAP32[$fd86 >> 2] = $24;
$R_1 = $22;
break;
} else {
_abort();
}
}
} while (0);
if (($20 | 0) == 0) {
$p_0 = $6;
$psize_0 = $add17;
break;
}
$34 = $mem + ($add_ptr_sum232 + 28) | 0;
$arrayidx130 = 46712 + (HEAP32[$34 >> 2] << 2) | 0;
do {
if (($18 | 0) == (HEAP32[$arrayidx130 >> 2] | 0)) {
HEAP32[$arrayidx130 >> 2] = $R_1;
if (($R_1 | 0) != 0) {
break;
}
HEAP32[11603] = HEAP32[11603] & ~(1 << HEAP32[$34 >> 2]);
$p_0 = $6;
$psize_0 = $add17;
break L1181;
} else {
if ($20 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
$arrayidx149 = $20 + 16 | 0;
if ((HEAP32[$arrayidx149 >> 2] | 0) == ($18 | 0)) {
HEAP32[$arrayidx149 >> 2] = $R_1;
} else {
HEAP32[$20 + 20 >> 2] = $R_1;
}
if (($R_1 | 0) == 0) {
$p_0 = $6;
$psize_0 = $add17;
break L1181;
}
}
} while (0);
if ($R_1 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
HEAP32[$R_1 + 24 >> 2] = $20;
$44 = HEAP32[$mem + ($add_ptr_sum232 + 16) >> 2] | 0;
do {
if (($44 | 0) != 0) {
if ($44 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$R_1 + 16 >> 2] = $44;
HEAP32[$44 + 24 >> 2] = $R_1;
break;
}
}
} while (0);
$48 = HEAP32[$mem + ($add_ptr_sum232 + 20) >> 2] | 0;
if (($48 | 0) == 0) {
$p_0 = $6;
$psize_0 = $add17;
break;
}
if ($48 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$R_1 + 20 >> 2] = $48;
HEAP32[$48 + 24 >> 2] = $R_1;
$p_0 = $6;
$psize_0 = $add17;
break;
}
} else {
$p_0 = $0;
$psize_0 = $and5;
}
} while (0);
$55 = $p_0;
if ($55 >>> 0 >= $add_ptr6 >>> 0) {
_abort();
}
$56 = $mem + ($and5 - 4) | 0;
$57 = HEAP32[$56 >> 2] | 0;
if (($57 & 1 | 0) == 0) {
_abort();
}
do {
if (($57 & 2 | 0) == 0) {
if (($4 | 0) == (HEAP32[11608] | 0)) {
$add243 = (HEAP32[11605] | 0) + $psize_0 | 0;
HEAP32[11605] = $add243;
HEAP32[11608] = $p_0;
HEAP32[$p_0 + 4 >> 2] = $add243 | 1;
if (($p_0 | 0) == (HEAP32[11607] | 0)) {
HEAP32[11607] = 0;
HEAP32[11604] = 0;
}
if ($add243 >>> 0 <= (HEAP32[11609] | 0) >>> 0) {
return;
}
_sys_trim(0) | 0;
return;
}
if (($4 | 0) == (HEAP32[11607] | 0)) {
$add258 = (HEAP32[11604] | 0) + $psize_0 | 0;
HEAP32[11604] = $add258;
HEAP32[11607] = $p_0;
HEAP32[$p_0 + 4 >> 2] = $add258 | 1;
HEAP32[$55 + $add258 >> 2] = $add258;
return;
}
$add266 = ($57 & -8) + $psize_0 | 0;
$shr267 = $57 >>> 3;
L1287 : do {
if ($57 >>> 0 < 256) {
$66 = HEAP32[$mem + $and5 >> 2] | 0;
$68 = HEAP32[$mem + ($and5 | 4) >> 2] | 0;
$69 = 46448 + ($shr267 << 1 << 2) | 0;
do {
if (($66 | 0) != ($69 | 0)) {
if ($66 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
if ((HEAP32[$66 + 12 >> 2] | 0) == ($4 | 0)) {
break;
}
_abort();
}
} while (0);
if (($68 | 0) == ($66 | 0)) {
HEAP32[11602] = HEAP32[11602] & ~(1 << $shr267);
break;
}
do {
if (($68 | 0) == ($69 | 0)) {
$fd321_pre_phi = $68 + 8 | 0;
} else {
if ($68 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
$fd310 = $68 + 8 | 0;
if ((HEAP32[$fd310 >> 2] | 0) == ($4 | 0)) {
$fd321_pre_phi = $fd310;
break;
}
_abort();
}
} while (0);
HEAP32[$66 + 12 >> 2] = $68;
HEAP32[$fd321_pre_phi >> 2] = $66;
} else {
$77 = $add_ptr6;
$79 = HEAP32[$mem + ($and5 + 16) >> 2] | 0;
$81 = HEAP32[$mem + ($and5 | 4) >> 2] | 0;
do {
if (($81 | 0) == ($77 | 0)) {
$88 = $mem + ($and5 + 12) | 0;
$89 = HEAP32[$88 >> 2] | 0;
if (($89 | 0) == 0) {
$arrayidx366 = $mem + ($and5 + 8) | 0;
$90 = HEAP32[$arrayidx366 >> 2] | 0;
if (($90 | 0) == 0) {
$R331_1 = 0;
break;
} else {
$R331_0 = $90;
$RP359_0 = $arrayidx366;
}
} else {
$R331_0 = $89;
$RP359_0 = $88;
}
while (1) {
$arrayidx373 = $R331_0 + 20 | 0;
$91 = HEAP32[$arrayidx373 >> 2] | 0;
if (($91 | 0) != 0) {
$R331_0 = $91;
$RP359_0 = $arrayidx373;
continue;
}
$arrayidx378 = $R331_0 + 16 | 0;
$92 = HEAP32[$arrayidx378 >> 2] | 0;
if (($92 | 0) == 0) {
break;
} else {
$R331_0 = $92;
$RP359_0 = $arrayidx378;
}
}
if ($RP359_0 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$RP359_0 >> 2] = 0;
$R331_1 = $R331_0;
break;
}
} else {
$83 = HEAP32[$mem + $and5 >> 2] | 0;
if ($83 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
$bk342 = $83 + 12 | 0;
if ((HEAP32[$bk342 >> 2] | 0) != ($77 | 0)) {
_abort();
}
$fd346 = $81 + 8 | 0;
if ((HEAP32[$fd346 >> 2] | 0) == ($77 | 0)) {
HEAP32[$bk342 >> 2] = $81;
HEAP32[$fd346 >> 2] = $83;
$R331_1 = $81;
break;
} else {
_abort();
}
}
} while (0);
if (($79 | 0) == 0) {
break;
}
$95 = $mem + ($and5 + 20) | 0;
$arrayidx399 = 46712 + (HEAP32[$95 >> 2] << 2) | 0;
do {
if (($77 | 0) == (HEAP32[$arrayidx399 >> 2] | 0)) {
HEAP32[$arrayidx399 >> 2] = $R331_1;
if (($R331_1 | 0) != 0) {
break;
}
HEAP32[11603] = HEAP32[11603] & ~(1 << HEAP32[$95 >> 2]);
break L1287;
} else {
if ($79 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
$arrayidx418 = $79 + 16 | 0;
if ((HEAP32[$arrayidx418 >> 2] | 0) == ($77 | 0)) {
HEAP32[$arrayidx418 >> 2] = $R331_1;
} else {
HEAP32[$79 + 20 >> 2] = $R331_1;
}
if (($R331_1 | 0) == 0) {
break L1287;
}
}
} while (0);
if ($R331_1 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
HEAP32[$R331_1 + 24 >> 2] = $79;
$105 = HEAP32[$mem + ($and5 + 8) >> 2] | 0;
do {
if (($105 | 0) != 0) {
if ($105 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$R331_1 + 16 >> 2] = $105;
HEAP32[$105 + 24 >> 2] = $R331_1;
break;
}
}
} while (0);
$109 = HEAP32[$mem + ($and5 + 12) >> 2] | 0;
if (($109 | 0) == 0) {
break;
}
if ($109 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$R331_1 + 20 >> 2] = $109;
HEAP32[$109 + 24 >> 2] = $R331_1;
break;
}
}
} while (0);
HEAP32[$p_0 + 4 >> 2] = $add266 | 1;
HEAP32[$55 + $add266 >> 2] = $add266;
if (($p_0 | 0) != (HEAP32[11607] | 0)) {
$psize_1 = $add266;
break;
}
HEAP32[11604] = $add266;
return;
} else {
HEAP32[$56 >> 2] = $57 & -2;
HEAP32[$p_0 + 4 >> 2] = $psize_0 | 1;
HEAP32[$55 + $psize_0 >> 2] = $psize_0;
$psize_1 = $psize_0;
}
} while (0);
$shr497 = $psize_1 >>> 3;
if ($psize_1 >>> 0 < 256) {
$shl504 = $shr497 << 1;
$113 = 46448 + ($shl504 << 2) | 0;
$114 = HEAP32[11602] | 0;
$shl507 = 1 << $shr497;
do {
if (($114 & $shl507 | 0) == 0) {
HEAP32[11602] = $114 | $shl507;
$F506_0 = $113;
$_pre_phi = 46448 + ($shl504 + 2 << 2) | 0;
} else {
$115 = 46448 + ($shl504 + 2 << 2) | 0;
$116 = HEAP32[$115 >> 2] | 0;
if ($116 >>> 0 >= (HEAP32[11606] | 0) >>> 0) {
$F506_0 = $116;
$_pre_phi = $115;
break;
}
_abort();
}
} while (0);
HEAP32[$_pre_phi >> 2] = $p_0;
HEAP32[$F506_0 + 12 >> 2] = $p_0;
HEAP32[$p_0 + 8 >> 2] = $F506_0;
HEAP32[$p_0 + 12 >> 2] = $113;
return;
}
$119 = $p_0;
$shr531 = $psize_1 >>> 8;
do {
if (($shr531 | 0) == 0) {
$I530_0 = 0;
} else {
if ($psize_1 >>> 0 > 16777215) {
$I530_0 = 31;
break;
}
$and541 = ($shr531 + 1048320 | 0) >>> 16 & 8;
$shl542 = $shr531 << $and541;
$and545 = ($shl542 + 520192 | 0) >>> 16 & 4;
$shl547 = $shl542 << $and545;
$and550 = ($shl547 + 245760 | 0) >>> 16 & 2;
$add555 = 14 - ($and545 | $and541 | $and550) + ($shl547 << $and550 >>> 15) | 0;
$I530_0 = $psize_1 >>> (($add555 + 7 | 0) >>> 0) & 1 | $add555 << 1;
}
} while (0);
$arrayidx563 = 46712 + ($I530_0 << 2) | 0;
HEAP32[$p_0 + 28 >> 2] = $I530_0;
HEAP32[$p_0 + 20 >> 2] = 0;
HEAP32[$p_0 + 16 >> 2] = 0;
$121 = HEAP32[11603] | 0;
$shl569 = 1 << $I530_0;
do {
if (($121 & $shl569 | 0) == 0) {
HEAP32[11603] = $121 | $shl569;
HEAP32[$arrayidx563 >> 2] = $119;
HEAP32[$p_0 + 24 >> 2] = $arrayidx563;
HEAP32[$p_0 + 12 >> 2] = $p_0;
HEAP32[$p_0 + 8 >> 2] = $p_0;
} else {
if (($I530_0 | 0) == 31) {
$cond = 0;
} else {
$cond = 25 - ($I530_0 >>> 1) | 0;
}
$K579_0 = $psize_1 << $cond;
$T_0 = HEAP32[$arrayidx563 >> 2] | 0;
while (1) {
if ((HEAP32[$T_0 + 4 >> 2] & -8 | 0) == ($psize_1 | 0)) {
break;
}
$arrayidx595 = $T_0 + 16 + ($K579_0 >>> 31 << 2) | 0;
$124 = HEAP32[$arrayidx595 >> 2] | 0;
if (($124 | 0) == 0) {
label = 1007;
break;
} else {
$K579_0 = $K579_0 << 1;
$T_0 = $124;
}
}
if ((label | 0) == 1007) {
if ($arrayidx595 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$arrayidx595 >> 2] = $119;
HEAP32[$p_0 + 24 >> 2] = $T_0;
HEAP32[$p_0 + 12 >> 2] = $p_0;
HEAP32[$p_0 + 8 >> 2] = $p_0;
break;
}
}
$fd613 = $T_0 + 8 | 0;
$127 = HEAP32[$fd613 >> 2] | 0;
$129 = HEAP32[11606] | 0;
if ($T_0 >>> 0 < $129 >>> 0) {
_abort();
}
if ($127 >>> 0 < $129 >>> 0) {
_abort();
} else {
HEAP32[$127 + 12 >> 2] = $119;
HEAP32[$fd613 >> 2] = $119;
HEAP32[$p_0 + 8 >> 2] = $127;
HEAP32[$p_0 + 12 >> 2] = $T_0;
HEAP32[$p_0 + 24 >> 2] = 0;
break;
}
}
} while (0);
$dec = (HEAP32[11610] | 0) - 1 | 0;
HEAP32[11610] = $dec;
if (($dec | 0) == 0) {
$sp_0_in_i = 46864;
} else {
return;
}
while (1) {
$sp_0_i = HEAP32[$sp_0_in_i >> 2] | 0;
if (($sp_0_i | 0) == 0) {
break;
} else {
$sp_0_in_i = $sp_0_i + 8 | 0;
}
}
HEAP32[11610] = -1;
return;
}
function _calloc($n_elements, $elem_size) {
$n_elements = $n_elements | 0;
$elem_size = $elem_size | 0;
var $mul = 0, $req_0 = 0, $call = 0;
do {
if (($n_elements | 0) == 0) {
$req_0 = 0;
} else {
$mul = Math_imul($elem_size, $n_elements) | 0;
if (($elem_size | $n_elements) >>> 0 <= 65535) {
$req_0 = $mul;
break;
}
$req_0 = (($mul >>> 0) / ($n_elements >>> 0) | 0 | 0) == ($elem_size | 0) ? $mul : -1;
}
} while (0);
$call = _malloc($req_0) | 0;
if (($call | 0) == 0) {
return $call | 0;
}
if ((HEAP32[$call - 4 >> 2] & 3 | 0) == 0) {
return $call | 0;
}
_memset($call | 0, 0, $req_0 | 0);
return $call | 0;
}
function _realloc($oldmem, $bytes) {
$oldmem = $oldmem | 0;
$bytes = $bytes | 0;
var $cond = 0, $call7 = 0, $call12 = 0, $3 = 0, $sub = 0, $cond24 = 0, $mem_0 = 0;
if (($oldmem | 0) == 0) {
$mem_0 = _malloc($bytes) | 0;
return $mem_0 | 0;
}
if ($bytes >>> 0 > 4294967231) {
HEAP32[(___errno_location() | 0) >> 2] = 12;
$mem_0 = 0;
return $mem_0 | 0;
}
if ($bytes >>> 0 < 11) {
$cond = 16;
} else {
$cond = $bytes + 11 & -8;
}
$call7 = _try_realloc_chunk($oldmem - 8 | 0, $cond) | 0;
if (($call7 | 0) != 0) {
$mem_0 = $call7 + 8 | 0;
return $mem_0 | 0;
}
$call12 = _malloc($bytes) | 0;
if (($call12 | 0) == 0) {
$mem_0 = 0;
return $mem_0 | 0;
}
$3 = HEAP32[$oldmem - 4 >> 2] | 0;
$sub = ($3 & -8) - (($3 & 3 | 0) == 0 ? 8 : 4) | 0;
$cond24 = $sub >>> 0 < $bytes >>> 0 ? $sub : $bytes;
_memcpy($call12 | 0, $oldmem | 0, $cond24) | 0;
_free($oldmem);
$mem_0 = $call12;
return $mem_0 | 0;
}
function _realloc_in_place($oldmem, $bytes) {
$oldmem = $oldmem | 0;
$bytes = $bytes | 0;
var $cond = 0, $0 = 0;
if (($oldmem | 0) == 0) {
return 0;
}
if ($bytes >>> 0 > 4294967231) {
HEAP32[(___errno_location() | 0) >> 2] = 12;
return 0;
}
if ($bytes >>> 0 < 11) {
$cond = 16;
} else {
$cond = $bytes + 11 & -8;
}
$0 = $oldmem - 8 | 0;
return ((_try_realloc_chunk($0, $cond) | 0) == ($0 | 0) ? $oldmem : 0) | 0;
}
function _memalign($alignment, $bytes) {
$alignment = $alignment | 0;
$bytes = $bytes | 0;
var $retval_0 = 0;
if ($alignment >>> 0 < 9) {
$retval_0 = _malloc($bytes) | 0;
return $retval_0 | 0;
} else {
$retval_0 = _internal_memalign($alignment, $bytes) | 0;
return $retval_0 | 0;
}
return 0;
}
function _sys_trim($pad) {
$pad = $pad | 0;
var $call_i = 0, $1 = 0, $2 = 0, $3 = 0, $mul = 0, $4 = 0, $sp_0_i = 0, $5 = 0, $7 = 0, $retval_0_i = 0, $call20 = 0, $size = 0, $call24 = 0, $call25 = 0, $sub_ptr_sub = 0, $13 = 0, $sub41 = 0, $15 = 0, $16 = 0, $cond_i = 0, $sub5_i = 0, $released_2 = 0;
do {
if ((HEAP32[10824] | 0) == 0) {
$call_i = _sysconf(8) | 0;
if (($call_i - 1 & $call_i | 0) == 0) {
HEAP32[10826] = $call_i;
HEAP32[10825] = $call_i;
HEAP32[10827] = -1;
HEAP32[10828] = 2097152;
HEAP32[10829] = 0;
HEAP32[11713] = 0;
HEAP32[10824] = (_time(0) | 0) & -16 ^ 1431655768;
break;
} else {
_abort();
return 0;
}
}
} while (0);
if ($pad >>> 0 >= 4294967232) {
$released_2 = 0;
return $released_2 | 0;
}
$1 = HEAP32[11608] | 0;
if (($1 | 0) == 0) {
$released_2 = 0;
return $released_2 | 0;
}
$2 = HEAP32[11605] | 0;
do {
if ($2 >>> 0 > ($pad + 40 | 0) >>> 0) {
$3 = HEAP32[10826] | 0;
$mul = Math_imul((((-40 - $pad - 1 + $2 + $3 | 0) >>> 0) / ($3 >>> 0) | 0) - 1 | 0, $3) | 0;
$4 = $1;
$sp_0_i = 46856;
while (1) {
$5 = HEAP32[$sp_0_i >> 2] | 0;
if ($5 >>> 0 <= $4 >>> 0) {
if (($5 + (HEAP32[$sp_0_i + 4 >> 2] | 0) | 0) >>> 0 > $4 >>> 0) {
$retval_0_i = $sp_0_i;
break;
}
}
$7 = HEAP32[$sp_0_i + 8 >> 2] | 0;
if (($7 | 0) == 0) {
$retval_0_i = 0;
break;
} else {
$sp_0_i = $7;
}
}
if ((HEAP32[$retval_0_i + 12 >> 2] & 8 | 0) != 0) {
break;
}
$call20 = _sbrk(0) | 0;
$size = $retval_0_i + 4 | 0;
if (($call20 | 0) != ((HEAP32[$retval_0_i >> 2] | 0) + (HEAP32[$size >> 2] | 0) | 0)) {
break;
}
$call24 = _sbrk(-($mul >>> 0 > 2147483646 ? -2147483648 - $3 | 0 : $mul) | 0) | 0;
$call25 = _sbrk(0) | 0;
if (!(($call24 | 0) != -1 & $call25 >>> 0 < $call20 >>> 0)) {
break;
}
$sub_ptr_sub = $call20 - $call25 | 0;
if (($call20 | 0) == ($call25 | 0)) {
break;
}
HEAP32[$size >> 2] = (HEAP32[$size >> 2] | 0) - $sub_ptr_sub;
HEAP32[11710] = (HEAP32[11710] | 0) - $sub_ptr_sub;
$13 = HEAP32[11608] | 0;
$sub41 = (HEAP32[11605] | 0) - $sub_ptr_sub | 0;
$15 = $13;
$16 = $13 + 8 | 0;
if (($16 & 7 | 0) == 0) {
$cond_i = 0;
} else {
$cond_i = -$16 & 7;
}
$sub5_i = $sub41 - $cond_i | 0;
HEAP32[11608] = $15 + $cond_i;
HEAP32[11605] = $sub5_i;
HEAP32[$15 + ($cond_i + 4) >> 2] = $sub5_i | 1;
HEAP32[$15 + ($sub41 + 4) >> 2] = 40;
HEAP32[11609] = HEAP32[10828];
$released_2 = ($call20 | 0) != ($call25 | 0) | 0;
return $released_2 | 0;
}
} while (0);
if ((HEAP32[11605] | 0) >>> 0 <= (HEAP32[11609] | 0) >>> 0) {
$released_2 = 0;
return $released_2 | 0;
}
HEAP32[11609] = -1;
$released_2 = 0;
return $released_2 | 0;
}
function _try_realloc_chunk($p, $nb) {
$p = $p | 0;
$nb = $nb | 0;
var $head = 0, $0 = 0, $and = 0, $1 = 0, $add_ptr = 0, $2 = 0, $3 = 0, $and2 = 0, $4 = 0, $5 = 0, $sub = 0, $add = 0, $sub40 = 0, $add58 = 0, $sub62 = 0, $18 = 0, $20 = 0, $storemerge18 = 0, $storemerge = 0, $add105 = 0, $sub110 = 0, $shr = 0, $23 = 0, $25 = 0, $26 = 0, $fd138 = 0, $fd148_pre_phi = 0, $32 = 0, $34 = 0, $36 = 0, $38 = 0, $bk164 = 0, $fd167 = 0, $42 = 0, $43 = 0, $arrayidx182 = 0, $44 = 0, $RP_0 = 0, $R_0 = 0, $arrayidx186 = 0, $45 = 0, $arrayidx190 = 0, $46 = 0, $R_1 = 0, $48 = 0, $arrayidx206 = 0, $arrayidx226 = 0, $58 = 0, $62 = 0, $66 = 0, $71 = 0, $newp_0 = 0;
$head = $p + 4 | 0;
$0 = HEAP32[$head >> 2] | 0;
$and = $0 & -8;
$1 = $p;
$add_ptr = $1 + $and | 0;
$2 = $add_ptr;
$3 = HEAP32[11606] | 0;
if ($1 >>> 0 < $3 >>> 0) {
_abort();
return 0;
}
$and2 = $0 & 3;
if (!(($and2 | 0) != 1 & $1 >>> 0 < $add_ptr >>> 0)) {
_abort();
return 0;
}
$4 = $1 + ($and | 4) | 0;
$5 = HEAP32[$4 >> 2] | 0;
if (($5 & 1 | 0) == 0) {
_abort();
return 0;
}
if (($and2 | 0) == 0) {
if ($nb >>> 0 < 256) {
$newp_0 = 0;
return $newp_0 | 0;
}
do {
if ($and >>> 0 >= ($nb + 4 | 0) >>> 0) {
if (($and - $nb | 0) >>> 0 > HEAP32[10826] << 1 >>> 0) {
break;
} else {
$newp_0 = $p;
}
return $newp_0 | 0;
}
} while (0);
$newp_0 = 0;
return $newp_0 | 0;
}
if ($and >>> 0 >= $nb >>> 0) {
$sub = $and - $nb | 0;
if ($sub >>> 0 <= 15) {
$newp_0 = $p;
return $newp_0 | 0;
}
HEAP32[$head >> 2] = $0 & 1 | $nb | 2;
HEAP32[$1 + ($nb + 4) >> 2] = $sub | 3;
HEAP32[$4 >> 2] = HEAP32[$4 >> 2] | 1;
_dispose_chunk($1 + $nb | 0, $sub);
$newp_0 = $p;
return $newp_0 | 0;
}
if (($2 | 0) == (HEAP32[11608] | 0)) {
$add = (HEAP32[11605] | 0) + $and | 0;
if ($add >>> 0 <= $nb >>> 0) {
$newp_0 = 0;
return $newp_0 | 0;
}
$sub40 = $add - $nb | 0;
HEAP32[$head >> 2] = $0 & 1 | $nb | 2;
HEAP32[$1 + ($nb + 4) >> 2] = $sub40 | 1;
HEAP32[11608] = $1 + $nb;
HEAP32[11605] = $sub40;
$newp_0 = $p;
return $newp_0 | 0;
}
if (($2 | 0) == (HEAP32[11607] | 0)) {
$add58 = (HEAP32[11604] | 0) + $and | 0;
if ($add58 >>> 0 < $nb >>> 0) {
$newp_0 = 0;
return $newp_0 | 0;
}
$sub62 = $add58 - $nb | 0;
if ($sub62 >>> 0 > 15) {
HEAP32[$head >> 2] = $0 & 1 | $nb | 2;
HEAP32[$1 + ($nb + 4) >> 2] = $sub62 | 1;
HEAP32[$1 + $add58 >> 2] = $sub62;
$18 = $1 + ($add58 + 4) | 0;
HEAP32[$18 >> 2] = HEAP32[$18 >> 2] & -2;
$storemerge = $1 + $nb | 0;
$storemerge18 = $sub62;
} else {
HEAP32[$head >> 2] = $0 & 1 | $add58 | 2;
$20 = $1 + ($add58 + 4) | 0;
HEAP32[$20 >> 2] = HEAP32[$20 >> 2] | 1;
$storemerge = 0;
$storemerge18 = 0;
}
HEAP32[11604] = $storemerge18;
HEAP32[11607] = $storemerge;
$newp_0 = $p;
return $newp_0 | 0;
}
if (($5 & 2 | 0) != 0) {
$newp_0 = 0;
return $newp_0 | 0;
}
$add105 = ($5 & -8) + $and | 0;
if ($add105 >>> 0 < $nb >>> 0) {
$newp_0 = 0;
return $newp_0 | 0;
}
$sub110 = $add105 - $nb | 0;
$shr = $5 >>> 3;
L1536 : do {
if ($5 >>> 0 < 256) {
$23 = HEAP32[$1 + ($and + 8) >> 2] | 0;
$25 = HEAP32[$1 + ($and + 12) >> 2] | 0;
$26 = 46448 + ($shr << 1 << 2) | 0;
do {
if (($23 | 0) != ($26 | 0)) {
if ($23 >>> 0 < $3 >>> 0) {
_abort();
return 0;
}
if ((HEAP32[$23 + 12 >> 2] | 0) == ($2 | 0)) {
break;
}
_abort();
return 0;
}
} while (0);
if (($25 | 0) == ($23 | 0)) {
HEAP32[11602] = HEAP32[11602] & ~(1 << $shr);
break;
}
do {
if (($25 | 0) == ($26 | 0)) {
$fd148_pre_phi = $25 + 8 | 0;
} else {
if ($25 >>> 0 < $3 >>> 0) {
_abort();
return 0;
}
$fd138 = $25 + 8 | 0;
if ((HEAP32[$fd138 >> 2] | 0) == ($2 | 0)) {
$fd148_pre_phi = $fd138;
break;
}
_abort();
return 0;
}
} while (0);
HEAP32[$23 + 12 >> 2] = $25;
HEAP32[$fd148_pre_phi >> 2] = $23;
} else {
$32 = $add_ptr;
$34 = HEAP32[$1 + ($and + 24) >> 2] | 0;
$36 = HEAP32[$1 + ($and + 12) >> 2] | 0;
do {
if (($36 | 0) == ($32 | 0)) {
$42 = $1 + ($and + 20) | 0;
$43 = HEAP32[$42 >> 2] | 0;
if (($43 | 0) == 0) {
$arrayidx182 = $1 + ($and + 16) | 0;
$44 = HEAP32[$arrayidx182 >> 2] | 0;
if (($44 | 0) == 0) {
$R_1 = 0;
break;
} else {
$R_0 = $44;
$RP_0 = $arrayidx182;
}
} else {
$R_0 = $43;
$RP_0 = $42;
}
while (1) {
$arrayidx186 = $R_0 + 20 | 0;
$45 = HEAP32[$arrayidx186 >> 2] | 0;
if (($45 | 0) != 0) {
$R_0 = $45;
$RP_0 = $arrayidx186;
continue;
}
$arrayidx190 = $R_0 + 16 | 0;
$46 = HEAP32[$arrayidx190 >> 2] | 0;
if (($46 | 0) == 0) {
break;
} else {
$R_0 = $46;
$RP_0 = $arrayidx190;
}
}
if ($RP_0 >>> 0 < $3 >>> 0) {
_abort();
return 0;
} else {
HEAP32[$RP_0 >> 2] = 0;
$R_1 = $R_0;
break;
}
} else {
$38 = HEAP32[$1 + ($and + 8) >> 2] | 0;
if ($38 >>> 0 < $3 >>> 0) {
_abort();
return 0;
}
$bk164 = $38 + 12 | 0;
if ((HEAP32[$bk164 >> 2] | 0) != ($32 | 0)) {
_abort();
return 0;
}
$fd167 = $36 + 8 | 0;
if ((HEAP32[$fd167 >> 2] | 0) == ($32 | 0)) {
HEAP32[$bk164 >> 2] = $36;
HEAP32[$fd167 >> 2] = $38;
$R_1 = $36;
break;
} else {
_abort();
return 0;
}
}
} while (0);
if (($34 | 0) == 0) {
break;
}
$48 = $1 + ($and + 28) | 0;
$arrayidx206 = 46712 + (HEAP32[$48 >> 2] << 2) | 0;
do {
if (($32 | 0) == (HEAP32[$arrayidx206 >> 2] | 0)) {
HEAP32[$arrayidx206 >> 2] = $R_1;
if (($R_1 | 0) != 0) {
break;
}
HEAP32[11603] = HEAP32[11603] & ~(1 << HEAP32[$48 >> 2]);
break L1536;
} else {
if ($34 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
$arrayidx226 = $34 + 16 | 0;
if ((HEAP32[$arrayidx226 >> 2] | 0) == ($32 | 0)) {
HEAP32[$arrayidx226 >> 2] = $R_1;
} else {
HEAP32[$34 + 20 >> 2] = $R_1;
}
if (($R_1 | 0) == 0) {
break L1536;
}
}
} while (0);
if ($R_1 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
}
HEAP32[$R_1 + 24 >> 2] = $34;
$58 = HEAP32[$1 + ($and + 16) >> 2] | 0;
do {
if (($58 | 0) != 0) {
if ($58 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$R_1 + 16 >> 2] = $58;
HEAP32[$58 + 24 >> 2] = $R_1;
break;
}
}
} while (0);
$62 = HEAP32[$1 + ($and + 20) >> 2] | 0;
if (($62 | 0) == 0) {
break;
}
if ($62 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
return 0;
} else {
HEAP32[$R_1 + 20 >> 2] = $62;
HEAP32[$62 + 24 >> 2] = $R_1;
break;
}
}
} while (0);
if ($sub110 >>> 0 < 16) {
HEAP32[$head >> 2] = $add105 | HEAP32[$head >> 2] & 1 | 2;
$66 = $1 + ($add105 | 4) | 0;
HEAP32[$66 >> 2] = HEAP32[$66 >> 2] | 1;
$newp_0 = $p;
return $newp_0 | 0;
} else {
HEAP32[$head >> 2] = HEAP32[$head >> 2] & 1 | $nb | 2;
HEAP32[$1 + ($nb + 4) >> 2] = $sub110 | 3;
$71 = $1 + ($add105 | 4) | 0;
HEAP32[$71 >> 2] = HEAP32[$71 >> 2] | 1;
_dispose_chunk($1 + $nb | 0, $sub110);
$newp_0 = $p;
return $newp_0 | 0;
}
return 0;
}
function _malloc_footprint() {
return HEAP32[11710] | 0;
}
function _malloc_max_footprint() {
return HEAP32[11711] | 0;
}
function _malloc_footprint_limit() {
var $0 = 0;
$0 = HEAP32[11712] | 0;
return (($0 | 0) == 0 ? -1 : $0) | 0;
}
function _malloc_set_footprint_limit($bytes) {
$bytes = $bytes | 0;
var $0 = 0, $result_0 = 0;
if (($bytes | 0) == -1) {
$result_0 = 0;
} else {
$0 = HEAP32[10826] | 0;
$result_0 = $bytes - 1 + $0 & -$0;
}
HEAP32[11712] = $result_0;
return $result_0 | 0;
}
function _internal_memalign($alignment, $bytes) {
$alignment = $alignment | 0;
$bytes = $bytes | 0;
var $_alignment = 0, $a_0 = 0, $alignment_addr_1 = 0, $cond = 0, $call17 = 0, $add_ptr = 0, $0 = 0, $sub20 = 0, $3 = 0, $add_ptr28 = 0, $sub_ptr_rhs_cast = 0, $cond34 = 0, $4 = 0, $sub_ptr_sub37 = 0, $5 = 0, $6 = 0, $sub39 = 0, $9 = 0, $11 = 0, $14 = 0, $p_0 = 0, $head65 = 0, $16 = 0, $and70 = 0, $sub74 = 0, $17 = 0, $20 = 0, $mem_0 = 0;
$_alignment = $alignment >>> 0 < 16 ? 16 : $alignment;
if (($_alignment - 1 & $_alignment | 0) == 0) {
$alignment_addr_1 = $_alignment;
} else {
$a_0 = 16;
while (1) {
if ($a_0 >>> 0 < $_alignment >>> 0) {
$a_0 = $a_0 << 1;
} else {
$alignment_addr_1 = $a_0;
break;
}
}
}
if ((-64 - $alignment_addr_1 | 0) >>> 0 <= $bytes >>> 0) {
HEAP32[(___errno_location() | 0) >> 2] = 12;
$mem_0 = 0;
return $mem_0 | 0;
}
if ($bytes >>> 0 < 11) {
$cond = 16;
} else {
$cond = $bytes + 11 & -8;
}
$call17 = _malloc($alignment_addr_1 + 12 + $cond | 0) | 0;
if (($call17 | 0) == 0) {
$mem_0 = 0;
return $mem_0 | 0;
}
$add_ptr = $call17 - 8 | 0;
$0 = $add_ptr;
$sub20 = $alignment_addr_1 - 1 | 0;
do {
if (($call17 & $sub20 | 0) == 0) {
$p_0 = $0;
} else {
$3 = $call17 + $sub20 & -$alignment_addr_1;
$add_ptr28 = $3 - 8 | 0;
$sub_ptr_rhs_cast = $add_ptr;
if (($add_ptr28 - $sub_ptr_rhs_cast | 0) >>> 0 > 15) {
$cond34 = $add_ptr28;
} else {
$cond34 = $3 + ($alignment_addr_1 - 8) | 0;
}
$4 = $cond34;
$sub_ptr_sub37 = $cond34 - $sub_ptr_rhs_cast | 0;
$5 = $call17 - 4 | 0;
$6 = HEAP32[$5 >> 2] | 0;
$sub39 = ($6 & -8) - $sub_ptr_sub37 | 0;
if (($6 & 3 | 0) == 0) {
HEAP32[$cond34 >> 2] = (HEAP32[$add_ptr >> 2] | 0) + $sub_ptr_sub37;
HEAP32[$cond34 + 4 >> 2] = $sub39;
$p_0 = $4;
break;
} else {
$9 = $cond34 + 4 | 0;
HEAP32[$9 >> 2] = $sub39 | HEAP32[$9 >> 2] & 1 | 2;
$11 = $cond34 + ($sub39 + 4) | 0;
HEAP32[$11 >> 2] = HEAP32[$11 >> 2] | 1;
HEAP32[$5 >> 2] = $sub_ptr_sub37 | HEAP32[$5 >> 2] & 1 | 2;
$14 = $call17 + ($sub_ptr_sub37 - 4) | 0;
HEAP32[$14 >> 2] = HEAP32[$14 >> 2] | 1;
_dispose_chunk($0, $sub_ptr_sub37);
$p_0 = $4;
break;
}
}
} while (0);
$head65 = $p_0 + 4 | 0;
$16 = HEAP32[$head65 >> 2] | 0;
do {
if (($16 & 3 | 0) != 0) {
$and70 = $16 & -8;
if ($and70 >>> 0 <= ($cond + 16 | 0) >>> 0) {
break;
}
$sub74 = $and70 - $cond | 0;
$17 = $p_0;
HEAP32[$head65 >> 2] = $cond | $16 & 1 | 2;
HEAP32[$17 + ($cond | 4) >> 2] = $sub74 | 3;
$20 = $17 + ($and70 | 4) | 0;
HEAP32[$20 >> 2] = HEAP32[$20 >> 2] | 1;
_dispose_chunk($17 + $cond | 0, $sub74);
}
} while (0);
$mem_0 = $p_0 + 8 | 0;
return $mem_0 | 0;
}
function _posix_memalign($pp, $alignment, $bytes) {
$pp = $pp | 0;
$alignment = $alignment | 0;
$bytes = $bytes | 0;
var $div = 0, $mem_0 = 0, $retval_0 = 0, label = 0;
do {
if (($alignment | 0) == 8) {
$mem_0 = _malloc($bytes) | 0;
label = 1246;
} else {
$div = $alignment >>> 2;
if (($alignment & 3 | 0) != 0 | ($div | 0) == 0) {
$retval_0 = 22;
break;
}
if (($div + 1073741823 & $div | 0) != 0) {
$retval_0 = 22;
break;
}
if ((-64 - $alignment | 0) >>> 0 < $bytes >>> 0) {
$retval_0 = 12;
break;
}
$mem_0 = _internal_memalign($alignment >>> 0 < 16 ? 16 : $alignment, $bytes) | 0;
label = 1246;
}
} while (0);
do {
if ((label | 0) == 1246) {
if (($mem_0 | 0) == 0) {
$retval_0 = 12;
break;
}
HEAP32[$pp >> 2] = $mem_0;
$retval_0 = 0;
}
} while (0);
return $retval_0 | 0;
}
function _independent_calloc($n_elements, $elem_size, $chunks) {
$n_elements = $n_elements | 0;
$elem_size = $elem_size | 0;
$chunks = $chunks | 0;
var $sz = 0, $call = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$sz = sp | 0;
HEAP32[$sz >> 2] = $elem_size;
$call = _ialloc($n_elements, $sz, 3, $chunks) | 0;
STACKTOP = sp;
return $call | 0;
}
function _independent_comalloc($n_elements, $sizes, $chunks) {
$n_elements = $n_elements | 0;
$sizes = $sizes | 0;
$chunks = $chunks | 0;
return _ialloc($n_elements, $sizes, 0, $chunks) | 0;
}
function _valloc($bytes) {
$bytes = $bytes | 0;
var $call_i = 0, $1 = 0, $call1 = 0;
if ((HEAP32[10824] | 0) != 0) {
$1 = HEAP32[10825] | 0;
$call1 = _memalign($1, $bytes) | 0;
return $call1 | 0;
}
$call_i = _sysconf(8) | 0;
if (($call_i - 1 & $call_i | 0) != 0) {
_abort();
return 0;
}
HEAP32[10826] = $call_i;
HEAP32[10825] = $call_i;
HEAP32[10827] = -1;
HEAP32[10828] = 2097152;
HEAP32[10829] = 0;
HEAP32[11713] = 0;
HEAP32[10824] = (_time(0) | 0) & -16 ^ 1431655768;
$1 = HEAP32[10825] | 0;
$call1 = _memalign($1, $bytes) | 0;
return $call1 | 0;
}
function _pvalloc($bytes) {
$bytes = $bytes | 0;
var $call_i = 0, $1 = 0;
do {
if ((HEAP32[10824] | 0) == 0) {
$call_i = _sysconf(8) | 0;
if (($call_i - 1 & $call_i | 0) == 0) {
HEAP32[10826] = $call_i;
HEAP32[10825] = $call_i;
HEAP32[10827] = -1;
HEAP32[10828] = 2097152;
HEAP32[10829] = 0;
HEAP32[11713] = 0;
HEAP32[10824] = (_time(0) | 0) & -16 ^ 1431655768;
break;
} else {
_abort();
return 0;
}
}
} while (0);
$1 = HEAP32[10825] | 0;
return _memalign($1, $bytes - 1 + $1 & -$1) | 0;
}
function _ialloc($n_elements, $sizes, $opts, $chunks) {
$n_elements = $n_elements | 0;
$sizes = $sizes | 0;
$opts = $opts | 0;
$chunks = $chunks | 0;
var $call_i = 0, $cmp2 = 0, $mul = 0, $array_size_0 = 0, $marray_0 = 0, $2 = 0, $cond22 = 0, $i_09 = 0, $contents_size_08 = 0, $3 = 0, $cond34 = 0, $add35 = 0, $inc = 0, $contents_size_1 = 0, $element_size_0 = 0, $call39 = 0, $add_ptr = 0, $and47 = 0, $remainder_size_0 = 0, $marray_1 = 0, $sub65 = 0, $i_15_us = 0, $remainder_size_14_us = 0, $p_0_in3_us = 0, $8 = 0, $size_0_us = 0, $sub82_us = 0, $add_ptr86_us = 0, $inc93_us = 0, $i_15 = 0, $remainder_size_14 = 0, $p_0_in3 = 0, $sub82 = 0, $add_ptr86 = 0, $inc93 = 0, $remainder_size_1_lcssa = 0, $p_0_in_lcssa = 0, $retval_0 = 0;
do {
if ((HEAP32[10824] | 0) == 0) {
$call_i = _sysconf(8) | 0;
if (($call_i - 1 & $call_i | 0) == 0) {
HEAP32[10826] = $call_i;
HEAP32[10825] = $call_i;
HEAP32[10827] = -1;
HEAP32[10828] = 2097152;
HEAP32[10829] = 0;
HEAP32[11713] = 0;
HEAP32[10824] = (_time(0) | 0) & -16 ^ 1431655768;
break;
} else {
_abort();
return 0;
}
}
} while (0);
$cmp2 = ($n_elements | 0) == 0;
do {
if (($chunks | 0) == 0) {
if ($cmp2) {
$retval_0 = _malloc(0) | 0;
return $retval_0 | 0;
} else {
$mul = $n_elements << 2;
if ($mul >>> 0 < 11) {
$marray_0 = 0;
$array_size_0 = 16;
break;
}
$marray_0 = 0;
$array_size_0 = $mul + 11 & -8;
break;
}
} else {
if ($cmp2) {
$retval_0 = $chunks;
} else {
$marray_0 = $chunks;
$array_size_0 = 0;
break;
}
return $retval_0 | 0;
}
} while (0);
do {
if (($opts & 1 | 0) == 0) {
if ($cmp2) {
$element_size_0 = 0;
$contents_size_1 = 0;
break;
} else {
$contents_size_08 = 0;
$i_09 = 0;
}
while (1) {
$3 = HEAP32[$sizes + ($i_09 << 2) >> 2] | 0;
if ($3 >>> 0 < 11) {
$cond34 = 16;
} else {
$cond34 = $3 + 11 & -8;
}
$add35 = $cond34 + $contents_size_08 | 0;
$inc = $i_09 + 1 | 0;
if (($inc | 0) == ($n_elements | 0)) {
$element_size_0 = 0;
$contents_size_1 = $add35;
break;
} else {
$contents_size_08 = $add35;
$i_09 = $inc;
}
}
} else {
$2 = HEAP32[$sizes >> 2] | 0;
if ($2 >>> 0 < 11) {
$cond22 = 16;
} else {
$cond22 = $2 + 11 & -8;
}
$element_size_0 = $cond22;
$contents_size_1 = Math_imul($cond22, $n_elements) | 0;
}
} while (0);
$call39 = _malloc($array_size_0 - 4 + $contents_size_1 | 0) | 0;
if (($call39 | 0) == 0) {
$retval_0 = 0;
return $retval_0 | 0;
}
$add_ptr = $call39 - 8 | 0;
$and47 = HEAP32[$call39 - 4 >> 2] & -8;
if (($opts & 2 | 0) != 0) {
_memset($call39 | 0, 0, -4 - $array_size_0 + $and47 | 0);
}
if (($marray_0 | 0) == 0) {
HEAP32[$call39 + ($contents_size_1 - 4) >> 2] = $and47 - $contents_size_1 | 3;
$marray_1 = $call39 + $contents_size_1 | 0;
$remainder_size_0 = $contents_size_1;
} else {
$marray_1 = $marray_0;
$remainder_size_0 = $and47;
}
HEAP32[$marray_1 >> 2] = $call39;
$sub65 = $n_elements - 1 | 0;
L1713 : do {
if (($sub65 | 0) == 0) {
$p_0_in_lcssa = $add_ptr;
$remainder_size_1_lcssa = $remainder_size_0;
} else {
if (($element_size_0 | 0) == 0) {
$p_0_in3_us = $add_ptr;
$remainder_size_14_us = $remainder_size_0;
$i_15_us = 0;
} else {
$p_0_in3 = $add_ptr;
$remainder_size_14 = $remainder_size_0;
$i_15 = 0;
while (1) {
$sub82 = $remainder_size_14 - $element_size_0 | 0;
HEAP32[$p_0_in3 + 4 >> 2] = $element_size_0 | 3;
$add_ptr86 = $p_0_in3 + $element_size_0 | 0;
$inc93 = $i_15 + 1 | 0;
HEAP32[$marray_1 + ($inc93 << 2) >> 2] = $p_0_in3 + ($element_size_0 + 8);
if (($inc93 | 0) == ($sub65 | 0)) {
$p_0_in_lcssa = $add_ptr86;
$remainder_size_1_lcssa = $sub82;
break L1713;
} else {
$p_0_in3 = $add_ptr86;
$remainder_size_14 = $sub82;
$i_15 = $inc93;
}
}
}
while (1) {
$8 = HEAP32[$sizes + ($i_15_us << 2) >> 2] | 0;
if ($8 >>> 0 < 11) {
$size_0_us = 16;
} else {
$size_0_us = $8 + 11 & -8;
}
$sub82_us = $remainder_size_14_us - $size_0_us | 0;
HEAP32[$p_0_in3_us + 4 >> 2] = $size_0_us | 3;
$add_ptr86_us = $p_0_in3_us + $size_0_us | 0;
$inc93_us = $i_15_us + 1 | 0;
HEAP32[$marray_1 + ($inc93_us << 2) >> 2] = $p_0_in3_us + ($size_0_us + 8);
if (($inc93_us | 0) == ($sub65 | 0)) {
$p_0_in_lcssa = $add_ptr86_us;
$remainder_size_1_lcssa = $sub82_us;
break;
} else {
$p_0_in3_us = $add_ptr86_us;
$remainder_size_14_us = $sub82_us;
$i_15_us = $inc93_us;
}
}
}
} while (0);
HEAP32[$p_0_in_lcssa + 4 >> 2] = $remainder_size_1_lcssa | 3;
$retval_0 = $marray_1;
return $retval_0 | 0;
}
function _bulk_free($array, $nelem) {
$array = $array | 0;
$nelem = $nelem | 0;
var $arrayidx_i = 0, $a_07_i = 0, $0 = 0, $add_ptr_i = 0, $1 = 0, $2 = 0, $and_i = 0, $5 = 0, $add_ptr7_i = 0, $add_ptr_sum_i = 0, $add_i = 0, $9 = 0, $incdec_ptr_pre_phi_i = 0, label = 0;
$arrayidx_i = $array + ($nelem << 2) | 0;
L1726 : do {
if (($nelem | 0) != 0) {
$a_07_i = $array;
L1727 : while (1) {
$0 = HEAP32[$a_07_i >> 2] | 0;
L1729 : do {
if (($0 | 0) == 0) {
$incdec_ptr_pre_phi_i = $a_07_i + 4 | 0;
} else {
$add_ptr_i = $0 - 8 | 0;
$1 = $add_ptr_i;
$2 = $0 - 4 | 0;
$and_i = HEAP32[$2 >> 2] & -8;
HEAP32[$a_07_i >> 2] = 0;
if ($add_ptr_i >>> 0 < (HEAP32[11606] | 0) >>> 0) {
label = 1312;
break L1727;
}
$5 = HEAP32[$2 >> 2] | 0;
if (($5 & 3 | 0) == 1) {
label = 1313;
break L1727;
}
$add_ptr7_i = $a_07_i + 4 | 0;
$add_ptr_sum_i = $5 - 8 & -8;
do {
if (($add_ptr7_i | 0) != ($arrayidx_i | 0)) {
if ((HEAP32[$add_ptr7_i >> 2] | 0) != ($0 + ($add_ptr_sum_i + 8) | 0)) {
break;
}
$add_i = (HEAP32[$0 + ($add_ptr_sum_i | 4) >> 2] & -8) + $and_i | 0;
HEAP32[$2 >> 2] = $5 & 1 | $add_i | 2;
$9 = $0 + ($add_i - 4) | 0;
HEAP32[$9 >> 2] = HEAP32[$9 >> 2] | 1;
HEAP32[$add_ptr7_i >> 2] = $0;
$incdec_ptr_pre_phi_i = $add_ptr7_i;
break L1729;
}
} while (0);
_dispose_chunk($1, $and_i);
$incdec_ptr_pre_phi_i = $add_ptr7_i;
}
} while (0);
if (($incdec_ptr_pre_phi_i | 0) == ($arrayidx_i | 0)) {
break L1726;
} else {
$a_07_i = $incdec_ptr_pre_phi_i;
}
}
if ((label | 0) == 1312) {
_abort();
return 0;
} else if ((label | 0) == 1313) {
_abort();
return 0;
}
}
} while (0);
if ((HEAP32[11605] | 0) >>> 0 <= (HEAP32[11609] | 0) >>> 0) {
return 0;
}
_sys_trim(0) | 0;
return 0;
}
function _malloc_trim($pad) {
$pad = $pad | 0;
var $call_i = 0, $call1 = 0;
if ((HEAP32[10824] | 0) != 0) {
$call1 = _sys_trim($pad) | 0;
return $call1 | 0;
}
$call_i = _sysconf(8) | 0;
if (($call_i - 1 & $call_i | 0) != 0) {
_abort();
return 0;
}
HEAP32[10826] = $call_i;
HEAP32[10825] = $call_i;
HEAP32[10827] = -1;
HEAP32[10828] = 2097152;
HEAP32[10829] = 0;
HEAP32[11713] = 0;
HEAP32[10824] = (_time(0) | 0) & -16 ^ 1431655768;
$call1 = _sys_trim($pad) | 0;
return $call1 | 0;
}
function _mallinfo($agg_result) {
$agg_result = $agg_result | 0;
var $call_i_i = 0, $1 = 0, $2 = 0, $add_i = 0, $s_011_i = 0, $sum_010_i = 0, $mfree_09_i = 0, $nfree_08_i = 0, $3 = 0, $4 = 0, $cond_i = 0, $add_ptr14_i = 0, $q_0_in5_i = 0, $sum_14_i = 0, $mfree_13_i = 0, $nfree_12_i = 0, $8 = 0, $and22_i = 0, $add23_i = 0, $nfree_2_i = 0, $mfree_2_i = 0, $add_ptr31_i = 0, $sum_1_lcssa_i = 0, $mfree_1_lcssa_i = 0, $nfree_1_lcssa_i = 0, $9 = 0, $10 = 0, $nm_sroa_7_0_i = 0, $nm_sroa_6_0_i = 0, $nm_sroa_4_0_i = 0, $nm_sroa_3_0_i = 0, $nm_sroa_1_0_i = 0, $nm_sroa_0_0_i = 0, $nm_sroa_8_0_i = 0, $12 = 0;
do {
if ((HEAP32[10824] | 0) == 0) {
$call_i_i = _sysconf(8) | 0;
if (($call_i_i - 1 & $call_i_i | 0) == 0) {
HEAP32[10826] = $call_i_i;
HEAP32[10825] = $call_i_i;
HEAP32[10827] = -1;
HEAP32[10828] = 2097152;
HEAP32[10829] = 0;
HEAP32[11713] = 0;
HEAP32[10824] = (_time(0) | 0) & -16 ^ 1431655768;
break;
} else {
_abort();
}
}
} while (0);
$1 = HEAP32[11608] | 0;
if (($1 | 0) == 0) {
$nm_sroa_8_0_i = 0;
$nm_sroa_0_0_i = 0;
$nm_sroa_1_0_i = 0;
$nm_sroa_3_0_i = 0;
$nm_sroa_4_0_i = 0;
$nm_sroa_6_0_i = 0;
$nm_sroa_7_0_i = 0;
} else {
$2 = HEAP32[11605] | 0;
$add_i = $2 + 40 | 0;
$nfree_08_i = 1;
$mfree_09_i = $add_i;
$sum_010_i = $add_i;
$s_011_i = 46856;
while (1) {
$3 = HEAP32[$s_011_i >> 2] | 0;
$4 = $3 + 8 | 0;
if (($4 & 7 | 0) == 0) {
$cond_i = 0;
} else {
$cond_i = -$4 & 7;
}
$add_ptr14_i = $3 + (HEAP32[$s_011_i + 4 >> 2] | 0) | 0;
$nfree_12_i = $nfree_08_i;
$mfree_13_i = $mfree_09_i;
$sum_14_i = $sum_010_i;
$q_0_in5_i = $3 + $cond_i | 0;
while (1) {
if ($q_0_in5_i >>> 0 >= $add_ptr14_i >>> 0 | ($q_0_in5_i | 0) == ($1 | 0)) {
$nfree_1_lcssa_i = $nfree_12_i;
$mfree_1_lcssa_i = $mfree_13_i;
$sum_1_lcssa_i = $sum_14_i;
break;
}
$8 = HEAP32[$q_0_in5_i + 4 >> 2] | 0;
if (($8 | 0) == 7) {
$nfree_1_lcssa_i = $nfree_12_i;
$mfree_1_lcssa_i = $mfree_13_i;
$sum_1_lcssa_i = $sum_14_i;
break;
}
$and22_i = $8 & -8;
$add23_i = $and22_i + $sum_14_i | 0;
if (($8 & 3 | 0) == 1) {
$mfree_2_i = $and22_i + $mfree_13_i | 0;
$nfree_2_i = $nfree_12_i + 1 | 0;
} else {
$mfree_2_i = $mfree_13_i;
$nfree_2_i = $nfree_12_i;
}
$add_ptr31_i = $q_0_in5_i + $and22_i | 0;
if ($add_ptr31_i >>> 0 < $3 >>> 0) {
$nfree_1_lcssa_i = $nfree_2_i;
$mfree_1_lcssa_i = $mfree_2_i;
$sum_1_lcssa_i = $add23_i;
break;
} else {
$nfree_12_i = $nfree_2_i;
$mfree_13_i = $mfree_2_i;
$sum_14_i = $add23_i;
$q_0_in5_i = $add_ptr31_i;
}
}
$9 = HEAP32[$s_011_i + 8 >> 2] | 0;
if (($9 | 0) == 0) {
break;
} else {
$nfree_08_i = $nfree_1_lcssa_i;
$mfree_09_i = $mfree_1_lcssa_i;
$sum_010_i = $sum_1_lcssa_i;
$s_011_i = $9;
}
}
$10 = HEAP32[11710] | 0;
$nm_sroa_8_0_i = $2;
$nm_sroa_0_0_i = $sum_1_lcssa_i;
$nm_sroa_1_0_i = $nfree_1_lcssa_i;
$nm_sroa_3_0_i = $10 - $sum_1_lcssa_i | 0;
$nm_sroa_4_0_i = HEAP32[11711] | 0;
$nm_sroa_6_0_i = $10 - $mfree_1_lcssa_i | 0;
$nm_sroa_7_0_i = $mfree_1_lcssa_i;
}
HEAP32[$agg_result >> 2] = $nm_sroa_0_0_i;
HEAP32[$agg_result + 4 >> 2] = $nm_sroa_1_0_i;
$12 = $agg_result + 8 | 0;
HEAP32[$12 >> 2] = 0;
HEAP32[$12 + 4 >> 2] = 0;
HEAP32[$agg_result + 16 >> 2] = $nm_sroa_3_0_i;
HEAP32[$agg_result + 20 >> 2] = $nm_sroa_4_0_i;
HEAP32[$agg_result + 24 >> 2] = 0;
HEAP32[$agg_result + 28 >> 2] = $nm_sroa_6_0_i;
HEAP32[$agg_result + 32 >> 2] = $nm_sroa_7_0_i;
HEAP32[$agg_result + 36 >> 2] = $nm_sroa_8_0_i;
return;
}
function _malloc_stats() {
var $call_i_i = 0, $1 = 0, $2 = 0, $3 = 0, $s_05_i = 0, $used_04_i = 0, $5 = 0, $6 = 0, $cond_i = 0, $add_ptr15_i = 0, $q_0_in3_i = 0, $used_12_i = 0, $10 = 0, $and27_i = 0, $used_2_i = 0, $add_ptr31_i = 0, $used_1_lcssa_i = 0, $11 = 0, $maxfp_0_i = 0, $fp_0_i = 0, $used_3_i = 0, sp = 0;
sp = STACKTOP;
do {
if ((HEAP32[10824] | 0) == 0) {
$call_i_i = _sysconf(8) | 0;
if (($call_i_i - 1 & $call_i_i | 0) == 0) {
HEAP32[10826] = $call_i_i;
HEAP32[10825] = $call_i_i;
HEAP32[10827] = -1;
HEAP32[10828] = 2097152;
HEAP32[10829] = 0;
HEAP32[11713] = 0;
HEAP32[10824] = (_time(0) | 0) & -16 ^ 1431655768;
break;
} else {
_abort();
}
}
} while (0);
$1 = HEAP32[11608] | 0;
if (($1 | 0) == 0) {
$used_3_i = 0;
$fp_0_i = 0;
$maxfp_0_i = 0;
} else {
$2 = HEAP32[11711] | 0;
$3 = HEAP32[11710] | 0;
$used_04_i = $3 - 40 - (HEAP32[11605] | 0) | 0;
$s_05_i = 46856;
while (1) {
$5 = HEAP32[$s_05_i >> 2] | 0;
$6 = $5 + 8 | 0;
if (($6 & 7 | 0) == 0) {
$cond_i = 0;
} else {
$cond_i = -$6 & 7;
}
$add_ptr15_i = $5 + (HEAP32[$s_05_i + 4 >> 2] | 0) | 0;
$used_12_i = $used_04_i;
$q_0_in3_i = $5 + $cond_i | 0;
while (1) {
if ($q_0_in3_i >>> 0 >= $add_ptr15_i >>> 0 | ($q_0_in3_i | 0) == ($1 | 0)) {
$used_1_lcssa_i = $used_12_i;
break;
}
$10 = HEAP32[$q_0_in3_i + 4 >> 2] | 0;
if (($10 | 0) == 7) {
$used_1_lcssa_i = $used_12_i;
break;
}
$and27_i = $10 & -8;
$used_2_i = $used_12_i - (($10 & 3 | 0) == 1 ? $and27_i : 0) | 0;
$add_ptr31_i = $q_0_in3_i + $and27_i | 0;
if ($add_ptr31_i >>> 0 < $5 >>> 0) {
$used_1_lcssa_i = $used_2_i;
break;
} else {
$used_12_i = $used_2_i;
$q_0_in3_i = $add_ptr31_i;
}
}
$11 = HEAP32[$s_05_i + 8 >> 2] | 0;
if (($11 | 0) == 0) {
$used_3_i = $used_1_lcssa_i;
$fp_0_i = $3;
$maxfp_0_i = $2;
break;
} else {
$used_04_i = $used_1_lcssa_i;
$s_05_i = $11;
}
}
}
_fprintf(HEAP32[_stderr >> 2] | 0, 1768, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $maxfp_0_i, tempInt) | 0) | 0;
_fprintf(HEAP32[_stderr >> 2] | 0, 3768, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $fp_0_i, tempInt) | 0) | 0;
_fprintf(HEAP32[_stderr >> 2] | 0, 2680, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $used_3_i, tempInt) | 0) | 0;
STACKTOP = sp;
return;
}
function _malloc_usable_size($mem) {
$mem = $mem | 0;
var $1 = 0, $and = 0, $retval_0 = 0;
do {
if (($mem | 0) == 0) {
$retval_0 = 0;
} else {
$1 = HEAP32[$mem - 4 >> 2] | 0;
$and = $1 & 3;
if (($and | 0) == 1) {
$retval_0 = 0;
break;
}
$retval_0 = ($1 & -8) - (($and | 0) == 0 ? 8 : 4) | 0;
}
} while (0);
return $retval_0 | 0;
}
function _mallopt($param_number, $value) {
$param_number = $param_number | 0;
$value = $value | 0;
var $call_i_i = 0, $retval_0_i = 0;
do {
if ((HEAP32[10824] | 0) == 0) {
$call_i_i = _sysconf(8) | 0;
if (($call_i_i - 1 & $call_i_i | 0) == 0) {
HEAP32[10826] = $call_i_i;
HEAP32[10825] = $call_i_i;
HEAP32[10827] = -1;
HEAP32[10828] = 2097152;
HEAP32[10829] = 0;
HEAP32[11713] = 0;
HEAP32[10824] = (_time(0) | 0) & -16 ^ 1431655768;
break;
} else {
_abort();
return 0;
}
}
} while (0);
if (($param_number | 0) == (-1 | 0)) {
HEAP32[10828] = $value;
$retval_0_i = 1;
return $retval_0_i | 0;
} else if (($param_number | 0) == (-2 | 0)) {
if ((HEAP32[10825] | 0) >>> 0 > $value >>> 0) {
$retval_0_i = 0;
return $retval_0_i | 0;
}
if (($value - 1 & $value | 0) != 0) {
$retval_0_i = 0;
return $retval_0_i | 0;
}
HEAP32[10826] = $value;
$retval_0_i = 1;
return $retval_0_i | 0;
} else if (($param_number | 0) == (-3 | 0)) {
HEAP32[10827] = $value;
$retval_0_i = 1;
return $retval_0_i | 0;
} else {
$retval_0_i = 0;
return $retval_0_i | 0;
}
return 0;
}
function __ZSt15get_new_handlerv() {
return (tempValue = HEAP32[11858] | 0, HEAP32[11858] = tempValue + 0, tempValue) | 0;
}
function _dispose_chunk($p, $psize) {
$p = $p | 0;
$psize = $psize | 0;
var $0 = 0, $add_ptr = 0, $1 = 0, $2 = 0, $3 = 0, $add_ptr5 = 0, $4 = 0, $add6 = 0, $5 = 0, $shr = 0, $8 = 0, $10 = 0, $11 = 0, $fd43 = 0, $fd53_pre_phi = 0, $17 = 0, $19 = 0, $21 = 0, $23 = 0, $bk70 = 0, $fd74 = 0, $add_ptr5_sum24 = 0, $27 = 0, $28 = 0, $arrayidx90 = 0, $29 = 0, $RP_0 = 0, $R_0 = 0, $arrayidx95 = 0, $30 = 0, $arrayidx100 = 0, $31 = 0, $R_1 = 0, $33 = 0, $arrayidx118 = 0, $arrayidx138 = 0, $add_ptr5_sum26 = 0, $43 = 0, $47 = 0, $50 = 0, $psize_addr_0 = 0, $p_addr_0 = 0, $54 = 0, $55 = 0, $56 = 0, $add229 = 0, $add246 = 0, $add255 = 0, $shr256 = 0, $64 = 0, $66 = 0, $67 = 0, $fd304 = 0, $fd315_pre_phi = 0, $73 = 0, $75 = 0, $77 = 0, $79 = 0, $bk337 = 0, $fd341 = 0, $83 = 0, $84 = 0, $arrayidx361 = 0, $85 = 0, $RP354_0 = 0, $R325_0 = 0, $arrayidx368 = 0, $86 = 0, $arrayidx373 = 0, $87 = 0, $R325_1 = 0, $89 = 0, $arrayidx396 = 0, $arrayidx417 = 0, $99 = 0, $103 = 0, $psize_addr_1 = 0, $shr501 = 0, $shl508 = 0, $109 = 0, $110 = 0, $shl513 = 0, $111 = 0, $112 = 0, $_pre_phi = 0, $F511_0 = 0, $115 = 0, $shr540 = 0, $and550 = 0, $shl551 = 0, $and554 = 0, $shl556 = 0, $and559 = 0, $add564 = 0, $I539_0 = 0, $arrayidx573 = 0, $117 = 0, $shl580 = 0, $cond = 0, $T_0 = 0, $K591_0 = 0, $arrayidx607 = 0, $120 = 0, $fd626 = 0, $123 = 0, $125 = 0, label = 0;
$0 = $p;
$add_ptr = $0 + $psize | 0;
$1 = $add_ptr;
$2 = HEAP32[$p + 4 >> 2] | 0;
L1827 : do {
if (($2 & 1 | 0) == 0) {
$3 = HEAP32[$p >> 2] | 0;
if (($2 & 3 | 0) == 0) {
return;
}
$add_ptr5 = $0 + (-$3 | 0) | 0;
$4 = $add_ptr5;
$add6 = $3 + $psize | 0;
$5 = HEAP32[11606] | 0;
if ($add_ptr5 >>> 0 < $5 >>> 0) {
_abort();
}
if (($4 | 0) == (HEAP32[11607] | 0)) {
$50 = $0 + ($psize + 4) | 0;
if ((HEAP32[$50 >> 2] & 3 | 0) != 3) {
$p_addr_0 = $4;
$psize_addr_0 = $add6;
break;
}
HEAP32[11604] = $add6;
HEAP32[$50 >> 2] = HEAP32[$50 >> 2] & -2;
HEAP32[$0 + (4 - $3) >> 2] = $add6 | 1;
HEAP32[$add_ptr >> 2] = $add6;
return;
}
$shr = $3 >>> 3;
if ($3 >>> 0 < 256) {
$8 = HEAP32[$0 + (8 - $3) >> 2] | 0;
$10 = HEAP32[$0 + (12 - $3) >> 2] | 0;
$11 = 46448 + ($shr << 1 << 2) | 0;
do {
if (($8 | 0) != ($11 | 0)) {
if ($8 >>> 0 < $5 >>> 0) {
_abort();
}
if ((HEAP32[$8 + 12 >> 2] | 0) == ($4 | 0)) {
break;
}
_abort();
}
} while (0);
if (($10 | 0) == ($8 | 0)) {
HEAP32[11602] = HEAP32[11602] & ~(1 << $shr);
$p_addr_0 = $4;
$psize_addr_0 = $add6;
break;
}
do {
if (($10 | 0) == ($11 | 0)) {
$fd53_pre_phi = $10 + 8 | 0;
} else {
if ($10 >>> 0 < $5 >>> 0) {
_abort();
}
$fd43 = $10 + 8 | 0;
if ((HEAP32[$fd43 >> 2] | 0) == ($4 | 0)) {
$fd53_pre_phi = $fd43;
break;
}
_abort();
}
} while (0);
HEAP32[$8 + 12 >> 2] = $10;
HEAP32[$fd53_pre_phi >> 2] = $8;
$p_addr_0 = $4;
$psize_addr_0 = $add6;
break;
}
$17 = $add_ptr5;
$19 = HEAP32[$0 + (24 - $3) >> 2] | 0;
$21 = HEAP32[$0 + (12 - $3) >> 2] | 0;
do {
if (($21 | 0) == ($17 | 0)) {
$add_ptr5_sum24 = 16 - $3 | 0;
$27 = $0 + ($add_ptr5_sum24 + 4) | 0;
$28 = HEAP32[$27 >> 2] | 0;
if (($28 | 0) == 0) {
$arrayidx90 = $0 + $add_ptr5_sum24 | 0;
$29 = HEAP32[$arrayidx90 >> 2] | 0;
if (($29 | 0) == 0) {
$R_1 = 0;
break;
} else {
$R_0 = $29;
$RP_0 = $arrayidx90;
}
} else {
$R_0 = $28;
$RP_0 = $27;
}
while (1) {
$arrayidx95 = $R_0 + 20 | 0;
$30 = HEAP32[$arrayidx95 >> 2] | 0;
if (($30 | 0) != 0) {
$R_0 = $30;
$RP_0 = $arrayidx95;
continue;
}
$arrayidx100 = $R_0 + 16 | 0;
$31 = HEAP32[$arrayidx100 >> 2] | 0;
if (($31 | 0) == 0) {
break;
} else {
$R_0 = $31;
$RP_0 = $arrayidx100;
}
}
if ($RP_0 >>> 0 < $5 >>> 0) {
_abort();
} else {
HEAP32[$RP_0 >> 2] = 0;
$R_1 = $R_0;
break;
}
} else {
$23 = HEAP32[$0 + (8 - $3) >> 2] | 0;
if ($23 >>> 0 < $5 >>> 0) {
_abort();
}
$bk70 = $23 + 12 | 0;
if ((HEAP32[$bk70 >> 2] | 0) != ($17 | 0)) {
_abort();
}
$fd74 = $21 + 8 | 0;
if ((HEAP32[$fd74 >> 2] | 0) == ($17 | 0)) {
HEAP32[$bk70 >> 2] = $21;
HEAP32[$fd74 >> 2] = $23;
$R_1 = $21;
break;
} else {
_abort();
}
}
} while (0);
if (($19 | 0) == 0) {
$p_addr_0 = $4;
$psize_addr_0 = $add6;
break;
}
$33 = $0 + (28 - $3) | 0;
$arrayidx118 = 46712 + (HEAP32[$33 >> 2] << 2) | 0;
do {
if (($17 | 0) == (HEAP32[$arrayidx118 >> 2] | 0)) {
HEAP32[$arrayidx118 >> 2] = $R_1;
if (($R_1 | 0) != 0) {
break;
}
HEAP32[11603] = HEAP32[11603] & ~(1 << HEAP32[$33 >> 2]);
$p_addr_0 = $4;
$psize_addr_0 = $add6;
break L1827;
} else {
if ($19 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
$arrayidx138 = $19 + 16 | 0;
if ((HEAP32[$arrayidx138 >> 2] | 0) == ($17 | 0)) {
HEAP32[$arrayidx138 >> 2] = $R_1;
} else {
HEAP32[$19 + 20 >> 2] = $R_1;
}
if (($R_1 | 0) == 0) {
$p_addr_0 = $4;
$psize_addr_0 = $add6;
break L1827;
}
}
} while (0);
if ($R_1 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
HEAP32[$R_1 + 24 >> 2] = $19;
$add_ptr5_sum26 = 16 - $3 | 0;
$43 = HEAP32[$0 + $add_ptr5_sum26 >> 2] | 0;
do {
if (($43 | 0) != 0) {
if ($43 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$R_1 + 16 >> 2] = $43;
HEAP32[$43 + 24 >> 2] = $R_1;
break;
}
}
} while (0);
$47 = HEAP32[$0 + ($add_ptr5_sum26 + 4) >> 2] | 0;
if (($47 | 0) == 0) {
$p_addr_0 = $4;
$psize_addr_0 = $add6;
break;
}
if ($47 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$R_1 + 20 >> 2] = $47;
HEAP32[$47 + 24 >> 2] = $R_1;
$p_addr_0 = $4;
$psize_addr_0 = $add6;
break;
}
} else {
$p_addr_0 = $p;
$psize_addr_0 = $psize;
}
} while (0);
$54 = HEAP32[11606] | 0;
if ($add_ptr >>> 0 < $54 >>> 0) {
_abort();
}
$55 = $0 + ($psize + 4) | 0;
$56 = HEAP32[$55 >> 2] | 0;
do {
if (($56 & 2 | 0) == 0) {
if (($1 | 0) == (HEAP32[11608] | 0)) {
$add229 = (HEAP32[11605] | 0) + $psize_addr_0 | 0;
HEAP32[11605] = $add229;
HEAP32[11608] = $p_addr_0;
HEAP32[$p_addr_0 + 4 >> 2] = $add229 | 1;
if (($p_addr_0 | 0) != (HEAP32[11607] | 0)) {
return;
}
HEAP32[11607] = 0;
HEAP32[11604] = 0;
return;
}
if (($1 | 0) == (HEAP32[11607] | 0)) {
$add246 = (HEAP32[11604] | 0) + $psize_addr_0 | 0;
HEAP32[11604] = $add246;
HEAP32[11607] = $p_addr_0;
HEAP32[$p_addr_0 + 4 >> 2] = $add246 | 1;
HEAP32[$p_addr_0 + $add246 >> 2] = $add246;
return;
}
$add255 = ($56 & -8) + $psize_addr_0 | 0;
$shr256 = $56 >>> 3;
L1926 : do {
if ($56 >>> 0 < 256) {
$64 = HEAP32[$0 + ($psize + 8) >> 2] | 0;
$66 = HEAP32[$0 + ($psize + 12) >> 2] | 0;
$67 = 46448 + ($shr256 << 1 << 2) | 0;
do {
if (($64 | 0) != ($67 | 0)) {
if ($64 >>> 0 < $54 >>> 0) {
_abort();
}
if ((HEAP32[$64 + 12 >> 2] | 0) == ($1 | 0)) {
break;
}
_abort();
}
} while (0);
if (($66 | 0) == ($64 | 0)) {
HEAP32[11602] = HEAP32[11602] & ~(1 << $shr256);
break;
}
do {
if (($66 | 0) == ($67 | 0)) {
$fd315_pre_phi = $66 + 8 | 0;
} else {
if ($66 >>> 0 < $54 >>> 0) {
_abort();
}
$fd304 = $66 + 8 | 0;
if ((HEAP32[$fd304 >> 2] | 0) == ($1 | 0)) {
$fd315_pre_phi = $fd304;
break;
}
_abort();
}
} while (0);
HEAP32[$64 + 12 >> 2] = $66;
HEAP32[$fd315_pre_phi >> 2] = $64;
} else {
$73 = $add_ptr;
$75 = HEAP32[$0 + ($psize + 24) >> 2] | 0;
$77 = HEAP32[$0 + ($psize + 12) >> 2] | 0;
do {
if (($77 | 0) == ($73 | 0)) {
$83 = $0 + ($psize + 20) | 0;
$84 = HEAP32[$83 >> 2] | 0;
if (($84 | 0) == 0) {
$arrayidx361 = $0 + ($psize + 16) | 0;
$85 = HEAP32[$arrayidx361 >> 2] | 0;
if (($85 | 0) == 0) {
$R325_1 = 0;
break;
} else {
$R325_0 = $85;
$RP354_0 = $arrayidx361;
}
} else {
$R325_0 = $84;
$RP354_0 = $83;
}
while (1) {
$arrayidx368 = $R325_0 + 20 | 0;
$86 = HEAP32[$arrayidx368 >> 2] | 0;
if (($86 | 0) != 0) {
$R325_0 = $86;
$RP354_0 = $arrayidx368;
continue;
}
$arrayidx373 = $R325_0 + 16 | 0;
$87 = HEAP32[$arrayidx373 >> 2] | 0;
if (($87 | 0) == 0) {
break;
} else {
$R325_0 = $87;
$RP354_0 = $arrayidx373;
}
}
if ($RP354_0 >>> 0 < $54 >>> 0) {
_abort();
} else {
HEAP32[$RP354_0 >> 2] = 0;
$R325_1 = $R325_0;
break;
}
} else {
$79 = HEAP32[$0 + ($psize + 8) >> 2] | 0;
if ($79 >>> 0 < $54 >>> 0) {
_abort();
}
$bk337 = $79 + 12 | 0;
if ((HEAP32[$bk337 >> 2] | 0) != ($73 | 0)) {
_abort();
}
$fd341 = $77 + 8 | 0;
if ((HEAP32[$fd341 >> 2] | 0) == ($73 | 0)) {
HEAP32[$bk337 >> 2] = $77;
HEAP32[$fd341 >> 2] = $79;
$R325_1 = $77;
break;
} else {
_abort();
}
}
} while (0);
if (($75 | 0) == 0) {
break;
}
$89 = $0 + ($psize + 28) | 0;
$arrayidx396 = 46712 + (HEAP32[$89 >> 2] << 2) | 0;
do {
if (($73 | 0) == (HEAP32[$arrayidx396 >> 2] | 0)) {
HEAP32[$arrayidx396 >> 2] = $R325_1;
if (($R325_1 | 0) != 0) {
break;
}
HEAP32[11603] = HEAP32[11603] & ~(1 << HEAP32[$89 >> 2]);
break L1926;
} else {
if ($75 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
$arrayidx417 = $75 + 16 | 0;
if ((HEAP32[$arrayidx417 >> 2] | 0) == ($73 | 0)) {
HEAP32[$arrayidx417 >> 2] = $R325_1;
} else {
HEAP32[$75 + 20 >> 2] = $R325_1;
}
if (($R325_1 | 0) == 0) {
break L1926;
}
}
} while (0);
if ($R325_1 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
HEAP32[$R325_1 + 24 >> 2] = $75;
$99 = HEAP32[$0 + ($psize + 16) >> 2] | 0;
do {
if (($99 | 0) != 0) {
if ($99 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$R325_1 + 16 >> 2] = $99;
HEAP32[$99 + 24 >> 2] = $R325_1;
break;
}
}
} while (0);
$103 = HEAP32[$0 + ($psize + 20) >> 2] | 0;
if (($103 | 0) == 0) {
break;
}
if ($103 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
} else {
HEAP32[$R325_1 + 20 >> 2] = $103;
HEAP32[$103 + 24 >> 2] = $R325_1;
break;
}
}
} while (0);
HEAP32[$p_addr_0 + 4 >> 2] = $add255 | 1;
HEAP32[$p_addr_0 + $add255 >> 2] = $add255;
if (($p_addr_0 | 0) != (HEAP32[11607] | 0)) {
$psize_addr_1 = $add255;
break;
}
HEAP32[11604] = $add255;
return;
} else {
HEAP32[$55 >> 2] = $56 & -2;
HEAP32[$p_addr_0 + 4 >> 2] = $psize_addr_0 | 1;
HEAP32[$p_addr_0 + $psize_addr_0 >> 2] = $psize_addr_0;
$psize_addr_1 = $psize_addr_0;
}
} while (0);
$shr501 = $psize_addr_1 >>> 3;
if ($psize_addr_1 >>> 0 < 256) {
$shl508 = $shr501 << 1;
$109 = 46448 + ($shl508 << 2) | 0;
$110 = HEAP32[11602] | 0;
$shl513 = 1 << $shr501;
do {
if (($110 & $shl513 | 0) == 0) {
HEAP32[11602] = $110 | $shl513;
$F511_0 = $109;
$_pre_phi = 46448 + ($shl508 + 2 << 2) | 0;
} else {
$111 = 46448 + ($shl508 + 2 << 2) | 0;
$112 = HEAP32[$111 >> 2] | 0;
if ($112 >>> 0 >= (HEAP32[11606] | 0) >>> 0) {
$F511_0 = $112;
$_pre_phi = $111;
break;
}
_abort();
}
} while (0);
HEAP32[$_pre_phi >> 2] = $p_addr_0;
HEAP32[$F511_0 + 12 >> 2] = $p_addr_0;
HEAP32[$p_addr_0 + 8 >> 2] = $F511_0;
HEAP32[$p_addr_0 + 12 >> 2] = $109;
return;
}
$115 = $p_addr_0;
$shr540 = $psize_addr_1 >>> 8;
do {
if (($shr540 | 0) == 0) {
$I539_0 = 0;
} else {
if ($psize_addr_1 >>> 0 > 16777215) {
$I539_0 = 31;
break;
}
$and550 = ($shr540 + 1048320 | 0) >>> 16 & 8;
$shl551 = $shr540 << $and550;
$and554 = ($shl551 + 520192 | 0) >>> 16 & 4;
$shl556 = $shl551 << $and554;
$and559 = ($shl556 + 245760 | 0) >>> 16 & 2;
$add564 = 14 - ($and554 | $and550 | $and559) + ($shl556 << $and559 >>> 15) | 0;
$I539_0 = $psize_addr_1 >>> (($add564 + 7 | 0) >>> 0) & 1 | $add564 << 1;
}
} while (0);
$arrayidx573 = 46712 + ($I539_0 << 2) | 0;
HEAP32[$p_addr_0 + 28 >> 2] = $I539_0;
HEAP32[$p_addr_0 + 20 >> 2] = 0;
HEAP32[$p_addr_0 + 16 >> 2] = 0;
$117 = HEAP32[11603] | 0;
$shl580 = 1 << $I539_0;
if (($117 & $shl580 | 0) == 0) {
HEAP32[11603] = $117 | $shl580;
HEAP32[$arrayidx573 >> 2] = $115;
HEAP32[$p_addr_0 + 24 >> 2] = $arrayidx573;
HEAP32[$p_addr_0 + 12 >> 2] = $p_addr_0;
HEAP32[$p_addr_0 + 8 >> 2] = $p_addr_0;
return;
}
if (($I539_0 | 0) == 31) {
$cond = 0;
} else {
$cond = 25 - ($I539_0 >>> 1) | 0;
}
$K591_0 = $psize_addr_1 << $cond;
$T_0 = HEAP32[$arrayidx573 >> 2] | 0;
while (1) {
if ((HEAP32[$T_0 + 4 >> 2] & -8 | 0) == ($psize_addr_1 | 0)) {
break;
}
$arrayidx607 = $T_0 + 16 + ($K591_0 >>> 31 << 2) | 0;
$120 = HEAP32[$arrayidx607 >> 2] | 0;
if (($120 | 0) == 0) {
label = 1501;
break;
} else {
$K591_0 = $K591_0 << 1;
$T_0 = $120;
}
}
if ((label | 0) == 1501) {
if ($arrayidx607 >>> 0 < (HEAP32[11606] | 0) >>> 0) {
_abort();
}
HEAP32[$arrayidx607 >> 2] = $115;
HEAP32[$p_addr_0 + 24 >> 2] = $T_0;
HEAP32[$p_addr_0 + 12 >> 2] = $p_addr_0;
HEAP32[$p_addr_0 + 8 >> 2] = $p_addr_0;
return;
}
$fd626 = $T_0 + 8 | 0;
$123 = HEAP32[$fd626 >> 2] | 0;
$125 = HEAP32[11606] | 0;
if ($T_0 >>> 0 < $125 >>> 0) {
_abort();
}
if ($123 >>> 0 < $125 >>> 0) {
_abort();
}
HEAP32[$123 + 12 >> 2] = $115;
HEAP32[$fd626 >> 2] = $115;
HEAP32[$p_addr_0 + 8 >> 2] = $123;
HEAP32[$p_addr_0 + 12 >> 2] = $T_0;
HEAP32[$p_addr_0 + 24 >> 2] = 0;
return;
}
function __Znwj($size) {
$size = $size | 0;
var $_size = 0, $call = 0, $0 = 0, $exception = 0, label = 0;
$_size = ($size | 0) == 0 ? 1 : $size;
while (1) {
$call = _malloc($_size) | 0;
if (($call | 0) != 0) {
label = 1545;
break;
}
$0 = (tempValue = HEAP32[11858] | 0, HEAP32[11858] = tempValue + 0, tempValue);
if (($0 | 0) == 0) {
break;
}
FUNCTION_TABLE_v[$0 & 3]();
}
if ((label | 0) == 1545) {
return $call | 0;
}
$exception = ___cxa_allocate_exception(4) | 0;
HEAP32[$exception >> 2] = 8048;
___cxa_throw($exception | 0, 9944, 38);
return 0;
}
function __ZNSt9bad_allocD2Ev($this) {
$this = $this | 0;
return;
}
function __ZNKSt9bad_alloc4whatEv($this) {
$this = $this | 0;
return 1752 | 0;
}
function __ZNKSt20bad_array_new_length4whatEv($this) {
$this = $this | 0;
return 3616 | 0;
}
function __ZSt15set_new_handlerPFvvE($handler) {
$handler = $handler | 0;
return (tempValue = HEAP32[11858] | 0, HEAP32[11858] = $handler, tempValue) | 0;
}
function __ZNSt9bad_allocC2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = 8048;
return;
}
function __ZNSt20bad_array_new_lengthC2Ev($this) {
$this = $this | 0;
HEAP32[$this >> 2] = 8112;
return;
}
function __ZdlPv($ptr) {
$ptr = $ptr | 0;
if (($ptr | 0) == 0) {
return;
}
_free($ptr);
return;
}
function __ZdlPvRKSt9nothrow_t($ptr, $0) {
$ptr = $ptr | 0;
$0 = $0 | 0;
__ZdlPv($ptr);
return;
}
function __ZdaPv($ptr) {
$ptr = $ptr | 0;
__ZdlPv($ptr);
return;
}
function __ZdaPvRKSt9nothrow_t($ptr, $0) {
$ptr = $ptr | 0;
$0 = $0 | 0;
__ZdaPv($ptr);
return;
}
function __ZNSt9bad_allocD0Ev($this) {
$this = $this | 0;
__ZdlPv($this);
return;
}
function __ZNSt20bad_array_new_lengthD0Ev($this) {
$this = $this | 0;
__ZdlPv($this);
return;
}
function _getopt($nargc, $nargv, $options) {
$nargc = $nargc | 0;
$nargv = $nargv | 0;
$options = $options | 0;
return _getopt_internal($nargc, $nargv, $options, 0, 0, 0) | 0;
}
function _getopt_internal($nargc, $nargv, $options, $long_options, $idx, $flags) {
$nargc = $nargc | 0;
$nargv = $nargv | 0;
$options = $options | 0;
$long_options = $long_options | 0;
$idx = $idx | 0;
$flags = $flags | 0;
var $0 = 0, $_pre137 = 0, $1 = 0, $2 = 0, $3 = 0, $conv = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $and_flags = 0, $flags_addr_0146 = 0, $flags_addr_0147 = 0, $options_addr_0 = 0, $_pr = 0, $8 = 0, $9 = 0, $10 = 0, $12 = 0, $13 = 0, $14 = 0, $sub_i = 0, $sub1_i = 0, $rem_i_i = 0, $c_07_i_i = 0, $b_addr_06_i_i = 0, $rem1_i_i = 0, $b_addr_0_lcssa_i_i = 0, $div_i = 0, $15 = 0, $16 = 0, $pos_023_us_i = 0, $j_022_us_i = 0, $pos_1_us_i = 0, $arrayidx_us_i = 0, $17 = 0, $inc_us_i = 0, $i_025_us_i = 0, $add_us_i = 0, $arrayidx9_us_i = 0, $18 = 0, $19 = 0, $20 = 0, $arrayidx = 0, $21 = 0, $arrayidx54 = 0, $23 = 0, $25 = 0, $26 = 0, $sub_i56 = 0, $sub1_i57 = 0, $rem_i_i58 = 0, $c_07_i_i60 = 0, $b_addr_06_i_i61 = 0, $rem1_i_i62 = 0, $b_addr_0_lcssa_i_i65 = 0, $div_i67 = 0, $27 = 0, $28 = 0, $pos_023_us_i75 = 0, $j_022_us_i76 = 0, $pos_1_us_i79 = 0, $arrayidx_us_i80 = 0, $29 = 0, $inc_us_i81 = 0, $i_025_us_i84 = 0, $add_us_i85 = 0, $arrayidx9_us_i86 = 0, $_pr_pre_pre = 0, $30 = 0, $31 = 0, $32 = 0, $_pr_pre = 0, $33 = 0, $inc82 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $inc106 = 0, $sub_i90 = 0, $sub1_i91 = 0, $rem_i_i92 = 0, $c_07_i_i94 = 0, $b_addr_06_i_i95 = 0, $rem1_i_i96 = 0, $b_addr_0_lcssa_i_i99 = 0, $div_i101 = 0, $40 = 0, $41 = 0, $pos_023_us_i109 = 0, $j_022_us_i110 = 0, $pos_1_us_i113 = 0, $arrayidx_us_i114 = 0, $42 = 0, $inc_us_i115 = 0, $i_025_us_i118 = 0, $add_us_i119 = 0, $arrayidx9_us_i120 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $cmp115 = 0, $49 = 0, $short_too_0 = 0, $call146 = 0, $50 = 0, $incdec_ptr152 = 0, $51 = 0, $conv153 = 0, $call164 = 0, $56 = 0, $inc202 = 0, $call220 = 0, $inc240 = 0, $retval_0 = 0, label = 0, sp = 0;
sp = STACKTOP;
if (($options | 0) == 0) {
$retval_0 = -1;
STACKTOP = sp;
return $retval_0 | 0;
}
$0 = HEAP32[70] | 0;
if (($0 | 0) == 0) {
HEAP32[10820] = 1;
HEAP32[70] = 1;
$3 = 1;
$2 = 1;
label = 1569;
} else {
$_pre137 = HEAP32[10820] | 0;
$1 = HEAP32[100] | 0;
if (($1 | 0) == -1 | ($_pre137 | 0) != 0) {
$3 = $_pre137;
$2 = $0;
label = 1569;
} else {
$6 = $1;
$5 = $_pre137;
$4 = $0;
}
}
if ((label | 0) == 1569) {
$conv = (_getenv(1216) | 0) != 0 | 0;
HEAP32[100] = $conv;
$6 = $conv;
$5 = $3;
$4 = $2;
}
$7 = HEAP8[$options] | 0;
if ($7 << 24 >> 24 == 45) {
$flags_addr_0146 = $flags | 2;
label = 1573;
} else {
$and_flags = ($6 | 0) != 0 | $7 << 24 >> 24 == 43 ? $flags & -2 : $flags;
if ($7 << 24 >> 24 == 43) {
$flags_addr_0146 = $and_flags;
label = 1573;
} else {
$options_addr_0 = $options;
$flags_addr_0147 = $and_flags;
}
}
if ((label | 0) == 1573) {
$options_addr_0 = $options + 1 | 0;
$flags_addr_0147 = $flags_addr_0146;
}
HEAP32[10822] = 0;
if (($5 | 0) == 0) {
$9 = $4;
label = 1577;
} else {
HEAP32[76] = -1;
HEAP32[74] = -1;
$8 = $4;
$_pr = $5;
label = 1576;
}
while (1) {
if ((label | 0) == 1576) {
label = 0;
if (($_pr | 0) == 0) {
$9 = $8;
label = 1577;
continue;
} else {
$12 = $8;
}
} else if ((label | 0) == 1577) {
label = 0;
$10 = HEAP32[66] | 0;
if ((HEAP8[$10] | 0) == 0) {
$12 = $9;
} else {
$47 = $10;
$46 = $9;
break;
}
}
HEAP32[10820] = 0;
if (($12 | 0) >= ($nargc | 0)) {
label = 1579;
break;
}
$arrayidx = $nargv + ($12 << 2) | 0;
$21 = HEAP32[$arrayidx >> 2] | 0;
HEAP32[66] = $21;
if ((HEAP8[$21] | 0) == 45) {
$arrayidx54 = $21 + 1 | 0;
$23 = HEAP8[$arrayidx54] | 0;
if ($23 << 24 >> 24 != 0) {
label = 1611;
break;
}
if ((_strchr($options_addr_0 | 0, 45) | 0) != 0) {
label = 1611;
break;
}
}
HEAP32[66] = 46400;
if (($flags_addr_0147 & 2 | 0) != 0) {
label = 1596;
break;
}
if (($flags_addr_0147 & 1 | 0) == 0) {
$retval_0 = -1;
label = 1681;
break;
}
$25 = HEAP32[74] | 0;
do {
if (($25 | 0) == -1) {
HEAP32[74] = $12;
$33 = $12;
$_pr_pre = 0;
} else {
$26 = HEAP32[76] | 0;
if (($26 | 0) == -1) {
$33 = $12;
$_pr_pre = 0;
break;
}
$sub_i56 = $26 - $25 | 0;
$sub1_i57 = $12 - $26 | 0;
$rem_i_i58 = ($sub_i56 | 0) % ($sub1_i57 | 0) | 0;
if (($rem_i_i58 | 0) == 0) {
$b_addr_0_lcssa_i_i65 = $sub1_i57;
} else {
$b_addr_06_i_i61 = $sub1_i57;
$c_07_i_i60 = $rem_i_i58;
while (1) {
$rem1_i_i62 = ($b_addr_06_i_i61 | 0) % ($c_07_i_i60 | 0) | 0;
if (($rem1_i_i62 | 0) == 0) {
$b_addr_0_lcssa_i_i65 = $c_07_i_i60;
break;
} else {
$b_addr_06_i_i61 = $c_07_i_i60;
$c_07_i_i60 = $rem1_i_i62;
}
}
}
$div_i67 = ($12 - $25 | 0) / ($b_addr_0_lcssa_i_i65 | 0) | 0;
do {
if (($b_addr_0_lcssa_i_i65 | 0) > 0) {
$27 = -$sub_i56 | 0;
if (($div_i67 | 0) > 0) {
$i_025_us_i84 = 0;
} else {
$32 = $12;
$31 = $26;
$30 = $25;
$_pr_pre_pre = 0;
break;
}
do {
$add_us_i85 = $i_025_us_i84 + $26 | 0;
$arrayidx9_us_i86 = $nargv + ($add_us_i85 << 2) | 0;
$j_022_us_i76 = 0;
$pos_023_us_i75 = $add_us_i85;
$28 = HEAP32[$arrayidx9_us_i86 >> 2] | 0;
while (1) {
$pos_1_us_i79 = (($pos_023_us_i75 | 0) < ($26 | 0) ? $sub1_i57 : $27) + $pos_023_us_i75 | 0;
$arrayidx_us_i80 = $nargv + ($pos_1_us_i79 << 2) | 0;
$29 = HEAP32[$arrayidx_us_i80 >> 2] | 0;
HEAP32[$arrayidx_us_i80 >> 2] = $28;
HEAP32[$arrayidx9_us_i86 >> 2] = $29;
$inc_us_i81 = $j_022_us_i76 + 1 | 0;
if (($inc_us_i81 | 0) < ($div_i67 | 0)) {
$j_022_us_i76 = $inc_us_i81;
$pos_023_us_i75 = $pos_1_us_i79;
$28 = $29;
} else {
break;
}
}
$i_025_us_i84 = $i_025_us_i84 + 1 | 0;
} while (($i_025_us_i84 | 0) < ($b_addr_0_lcssa_i_i65 | 0));
$32 = HEAP32[70] | 0;
$31 = HEAP32[76] | 0;
$30 = HEAP32[74] | 0;
$_pr_pre_pre = HEAP32[10820] | 0;
} else {
$32 = $12;
$31 = $26;
$30 = $25;
$_pr_pre_pre = 0;
}
} while (0);
HEAP32[74] = $32 - $31 + $30;
HEAP32[76] = -1;
$33 = $32;
$_pr_pre = $_pr_pre_pre;
}
} while (0);
$inc82 = $33 + 1 | 0;
HEAP32[70] = $inc82;
$8 = $inc82;
$_pr = $_pr_pre;
label = 1576;
}
do {
if ((label | 0) == 1579) {
HEAP32[66] = 46400;
$13 = HEAP32[76] | 0;
$14 = HEAP32[74] | 0;
do {
if (($13 | 0) == -1) {
if (($14 | 0) == -1) {
break;
}
HEAP32[70] = $14;
} else {
$sub_i = $13 - $14 | 0;
$sub1_i = $12 - $13 | 0;
$rem_i_i = ($sub_i | 0) % ($sub1_i | 0) | 0;
if (($rem_i_i | 0) == 0) {
$b_addr_0_lcssa_i_i = $sub1_i;
} else {
$b_addr_06_i_i = $sub1_i;
$c_07_i_i = $rem_i_i;
while (1) {
$rem1_i_i = ($b_addr_06_i_i | 0) % ($c_07_i_i | 0) | 0;
if (($rem1_i_i | 0) == 0) {
$b_addr_0_lcssa_i_i = $c_07_i_i;
break;
} else {
$b_addr_06_i_i = $c_07_i_i;
$c_07_i_i = $rem1_i_i;
}
}
}
$div_i = ($12 - $14 | 0) / ($b_addr_0_lcssa_i_i | 0) | 0;
do {
if (($b_addr_0_lcssa_i_i | 0) > 0) {
$15 = -$sub_i | 0;
if (($div_i | 0) > 0) {
$i_025_us_i = 0;
} else {
$20 = $13;
$19 = $14;
$18 = $12;
break;
}
do {
$add_us_i = $i_025_us_i + $13 | 0;
$arrayidx9_us_i = $nargv + ($add_us_i << 2) | 0;
$j_022_us_i = 0;
$pos_023_us_i = $add_us_i;
$16 = HEAP32[$arrayidx9_us_i >> 2] | 0;
while (1) {
$pos_1_us_i = (($pos_023_us_i | 0) < ($13 | 0) ? $sub1_i : $15) + $pos_023_us_i | 0;
$arrayidx_us_i = $nargv + ($pos_1_us_i << 2) | 0;
$17 = HEAP32[$arrayidx_us_i >> 2] | 0;
HEAP32[$arrayidx_us_i >> 2] = $16;
HEAP32[$arrayidx9_us_i >> 2] = $17;
$inc_us_i = $j_022_us_i + 1 | 0;
if (($inc_us_i | 0) < ($div_i | 0)) {
$j_022_us_i = $inc_us_i;
$pos_023_us_i = $pos_1_us_i;
$16 = $17;
} else {
break;
}
}
$i_025_us_i = $i_025_us_i + 1 | 0;
} while (($i_025_us_i | 0) < ($b_addr_0_lcssa_i_i | 0));
$20 = HEAP32[76] | 0;
$19 = HEAP32[74] | 0;
$18 = HEAP32[70] | 0;
} else {
$20 = $13;
$19 = $14;
$18 = $12;
}
} while (0);
HEAP32[70] = $19 - $20 + $18;
}
} while (0);
HEAP32[76] = -1;
HEAP32[74] = -1;
$retval_0 = -1;
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 1611) {
$34 = HEAP32[74] | 0;
$35 = HEAP32[76] | 0;
if (($34 | 0) != -1 & ($35 | 0) == -1) {
HEAP32[76] = $12;
$37 = HEAP8[$arrayidx54] | 0;
$36 = $12;
} else {
$37 = $23;
$36 = $35;
}
if ($37 << 24 >> 24 == 0) {
$47 = $21;
$46 = $12;
break;
}
HEAP32[66] = $arrayidx54;
if ((HEAP8[$arrayidx54] | 0) != 45) {
$47 = $arrayidx54;
$46 = $12;
break;
}
if ((HEAP8[$21 + 2 | 0] | 0) != 0) {
$47 = $arrayidx54;
$46 = $12;
break;
}
$inc106 = $12 + 1 | 0;
HEAP32[70] = $inc106;
HEAP32[66] = 46400;
if (($36 | 0) != -1) {
$sub_i90 = $36 - $34 | 0;
$sub1_i91 = $inc106 - $36 | 0;
$rem_i_i92 = ($sub_i90 | 0) % ($sub1_i91 | 0) | 0;
if (($rem_i_i92 | 0) == 0) {
$b_addr_0_lcssa_i_i99 = $sub1_i91;
} else {
$b_addr_06_i_i95 = $sub1_i91;
$c_07_i_i94 = $rem_i_i92;
while (1) {
$rem1_i_i96 = ($b_addr_06_i_i95 | 0) % ($c_07_i_i94 | 0) | 0;
if (($rem1_i_i96 | 0) == 0) {
$b_addr_0_lcssa_i_i99 = $c_07_i_i94;
break;
} else {
$b_addr_06_i_i95 = $c_07_i_i94;
$c_07_i_i94 = $rem1_i_i96;
}
}
}
$div_i101 = ($inc106 - $34 | 0) / ($b_addr_0_lcssa_i_i99 | 0) | 0;
do {
if (($b_addr_0_lcssa_i_i99 | 0) > 0) {
$40 = -$sub_i90 | 0;
if (($div_i101 | 0) > 0) {
$i_025_us_i118 = 0;
} else {
$45 = $36;
$44 = $34;
$43 = $inc106;
break;
}
do {
$add_us_i119 = $i_025_us_i118 + $36 | 0;
$arrayidx9_us_i120 = $nargv + ($add_us_i119 << 2) | 0;
$j_022_us_i110 = 0;
$pos_023_us_i109 = $add_us_i119;
$41 = HEAP32[$arrayidx9_us_i120 >> 2] | 0;
while (1) {
$pos_1_us_i113 = (($pos_023_us_i109 | 0) < ($36 | 0) ? $sub1_i91 : $40) + $pos_023_us_i109 | 0;
$arrayidx_us_i114 = $nargv + ($pos_1_us_i113 << 2) | 0;
$42 = HEAP32[$arrayidx_us_i114 >> 2] | 0;
HEAP32[$arrayidx_us_i114 >> 2] = $41;
HEAP32[$arrayidx9_us_i120 >> 2] = $42;
$inc_us_i115 = $j_022_us_i110 + 1 | 0;
if (($inc_us_i115 | 0) < ($div_i101 | 0)) {
$j_022_us_i110 = $inc_us_i115;
$pos_023_us_i109 = $pos_1_us_i113;
$41 = $42;
} else {
break;
}
}
$i_025_us_i118 = $i_025_us_i118 + 1 | 0;
} while (($i_025_us_i118 | 0) < ($b_addr_0_lcssa_i_i99 | 0));
$45 = HEAP32[76] | 0;
$44 = HEAP32[74] | 0;
$43 = HEAP32[70] | 0;
} else {
$45 = $36;
$44 = $34;
$43 = $inc106;
}
} while (0);
HEAP32[70] = $44 - $45 + $43;
}
HEAP32[76] = -1;
HEAP32[74] = -1;
$retval_0 = -1;
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 1596) {
HEAP32[70] = $12 + 1;
HEAP32[10822] = HEAP32[$arrayidx >> 2];
$retval_0 = 1;
STACKTOP = sp;
return $retval_0 | 0;
} else if ((label | 0) == 1681) {
STACKTOP = sp;
return $retval_0 | 0;
}
} while (0);
$cmp115 = ($long_options | 0) != 0;
L2160 : do {
if ($cmp115) {
if (($47 | 0) == (HEAP32[$nargv + ($46 << 2) >> 2] | 0)) {
$50 = $47;
break;
}
$49 = HEAP8[$47] | 0;
do {
if ($49 << 24 >> 24 == 45) {
HEAP32[66] = $47 + 1;
$short_too_0 = 0;
} else {
if (($flags_addr_0147 & 4 | 0) == 0) {
$50 = $47;
break L2160;
}
if ($49 << 24 >> 24 == 58) {
$short_too_0 = 0;
break;
}
$short_too_0 = (_strchr($options_addr_0 | 0, $49 << 24 >> 24 | 0) | 0) != 0 | 0;
}
} while (0);
$call146 = _parse_long_options($nargv, $options_addr_0, $long_options, $idx, $short_too_0) | 0;
if (($call146 | 0) == -1) {
$50 = HEAP32[66] | 0;
break;
}
HEAP32[66] = 46400;
$retval_0 = $call146;
STACKTOP = sp;
return $retval_0 | 0;
} else {
$50 = $47;
}
} while (0);
$incdec_ptr152 = $50 + 1 | 0;
HEAP32[66] = $incdec_ptr152;
$51 = HEAP8[$50] | 0;
$conv153 = $51 << 24 >> 24;
if (($51 << 24 >> 24 | 0) == 58) {
label = 1642;
} else if (($51 << 24 >> 24 | 0) == 45) {
if ((HEAP8[$incdec_ptr152] | 0) == 0) {
label = 1639;
}
} else {
label = 1639;
}
do {
if ((label | 0) == 1639) {
$call164 = _strchr($options_addr_0 | 0, $conv153 | 0) | 0;
if (($call164 | 0) == 0) {
if ($51 << 24 >> 24 != 45) {
label = 1642;
break;
}
if ((HEAP8[$incdec_ptr152] | 0) == 0) {
$retval_0 = -1;
} else {
break;
}
STACKTOP = sp;
return $retval_0 | 0;
}
$56 = HEAP8[$call164 + 1 | 0] | 0;
if ($cmp115 & $51 << 24 >> 24 == 87 & $56 << 24 >> 24 == 59) {
do {
if ((HEAP8[$incdec_ptr152] | 0) == 0) {
$inc202 = (HEAP32[70] | 0) + 1 | 0;
HEAP32[70] = $inc202;
if (($inc202 | 0) < ($nargc | 0)) {
HEAP32[66] = HEAP32[$nargv + ($inc202 << 2) >> 2];
break;
}
HEAP32[66] = 46400;
do {
if ((HEAP32[72] | 0) != 0) {
if ((HEAP8[$options_addr_0] | 0) == 58) {
break;
}
__warnx(152, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $conv153, tempInt) | 0);
}
} while (0);
HEAP32[68] = $conv153;
$retval_0 = (HEAP8[$options_addr_0] | 0) == 58 ? 58 : 63;
STACKTOP = sp;
return $retval_0 | 0;
}
} while (0);
$call220 = _parse_long_options($nargv, $options_addr_0, $long_options, $idx, 0) | 0;
HEAP32[66] = 46400;
$retval_0 = $call220;
STACKTOP = sp;
return $retval_0 | 0;
}
if ($56 << 24 >> 24 != 58) {
if ((HEAP8[$incdec_ptr152] | 0) != 0) {
$retval_0 = $conv153;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP32[70] = (HEAP32[70] | 0) + 1;
$retval_0 = $conv153;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP32[10822] = 0;
do {
if ((HEAP8[$incdec_ptr152] | 0) == 0) {
if ((HEAP8[$call164 + 2 | 0] | 0) == 58) {
break;
}
$inc240 = (HEAP32[70] | 0) + 1 | 0;
HEAP32[70] = $inc240;
if (($inc240 | 0) < ($nargc | 0)) {
HEAP32[10822] = HEAP32[$nargv + ($inc240 << 2) >> 2];
break;
}
HEAP32[66] = 46400;
do {
if ((HEAP32[72] | 0) != 0) {
if ((HEAP8[$options_addr_0] | 0) == 58) {
break;
}
__warnx(152, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $conv153, tempInt) | 0);
}
} while (0);
HEAP32[68] = $conv153;
$retval_0 = (HEAP8[$options_addr_0] | 0) == 58 ? 58 : 63;
STACKTOP = sp;
return $retval_0 | 0;
} else {
HEAP32[10822] = $incdec_ptr152;
}
} while (0);
HEAP32[66] = 46400;
HEAP32[70] = (HEAP32[70] | 0) + 1;
$retval_0 = $conv153;
STACKTOP = sp;
return $retval_0 | 0;
}
} while (0);
do {
if ((label | 0) == 1642) {
if ((HEAP8[$incdec_ptr152] | 0) != 0) {
break;
}
HEAP32[70] = (HEAP32[70] | 0) + 1;
}
} while (0);
do {
if ((HEAP32[72] | 0) != 0) {
if ((HEAP8[$options_addr_0] | 0) == 58) {
break;
}
__warnx(376, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $conv153, tempInt) | 0);
}
} while (0);
HEAP32[68] = $conv153;
$retval_0 = 63;
STACKTOP = sp;
return $retval_0 | 0;
}
function _getopt_long($nargc, $nargv, $options, $long_options, $idx) {
$nargc = $nargc | 0;
$nargv = $nargv | 0;
$options = $options | 0;
$long_options = $long_options | 0;
$idx = $idx | 0;
return _getopt_internal($nargc, $nargv, $options, $long_options, $idx, 1) | 0;
}
function _getopt_long_only($nargc, $nargv, $options, $long_options, $idx) {
$nargc = $nargc | 0;
$nargv = $nargv | 0;
$options = $options | 0;
$long_options = $long_options | 0;
$idx = $idx | 0;
return _getopt_internal($nargc, $nargv, $options, $long_options, $idx, 5) | 0;
}
function __ZnwjRKSt9nothrow_t($size, $0) {
$size = $size | 0;
$0 = $0 | 0;
return __Znwj($size) | 0;
}
function __Znaj($size) {
$size = $size | 0;
return __Znwj($size) | 0;
}
function __ZnajRKSt9nothrow_t($size, $0) {
$size = $size | 0;
$0 = $0 | 0;
return __Znaj($size) | 0;
}
function __ZSt17__throw_bad_allocv() {
var $exception = 0;
$exception = ___cxa_allocate_exception(4) | 0;
HEAP32[$exception >> 2] = 8048;
___cxa_throw($exception | 0, 9944, 38);
}
function _parse_long_options($nargv, $options, $long_options, $idx, $short_too) {
$nargv = $nargv | 0;
$options = $options | 0;
$long_options = $long_options | 0;
$idx = $idx | 0;
$short_too = $short_too | 0;
var $0 = 0, $1 = 0, $inc = 0, $call = 0, $has_equal_0 = 0, $current_argv_len_0 = 0, $2 = 0, $3 = 0, $i_061_us = 0, $5 = 0, $match_062 = 0, $i_061 = 0, $match_1 = 0, $inc28 = 0, $8 = 0, $match_2 = 0, $has_arg = 0, $9 = 0, $tobool36 = 0, $storemerge56 = 0, $storemerge = 0, $26 = 0, $27 = 0, $retval_0 = 0, sp = 0;
sp = STACKTOP;
$0 = HEAP32[66] | 0;
$1 = HEAP32[70] | 0;
$inc = $1 + 1 | 0;
HEAP32[70] = $inc;
$call = _strchr($0 | 0, 61) | 0;
if (($call | 0) == 0) {
$current_argv_len_0 = _strlen($0 | 0) | 0;
$has_equal_0 = 0;
} else {
$current_argv_len_0 = $call - $0 | 0;
$has_equal_0 = $call + 1 | 0;
}
$2 = HEAP32[$long_options >> 2] | 0;
L2242 : do {
if (($2 | 0) != 0) {
L2244 : do {
if (($short_too | 0) != 0 & ($current_argv_len_0 | 0) == 1) {
$i_061_us = 0;
$3 = $2;
while (1) {
if ((HEAP8[$0] | 0) == (HEAP8[$3] | 0)) {
if ((_strlen($3 | 0) | 0) == 1) {
$match_2 = $i_061_us;
break L2244;
}
}
$i_061_us = $i_061_us + 1 | 0;
$3 = HEAP32[$long_options + ($i_061_us << 4) >> 2] | 0;
if (($3 | 0) == 0) {
break L2242;
}
}
} else {
$i_061 = 0;
$match_062 = -1;
$5 = $2;
while (1) {
if ((_strncmp($0 | 0, $5 | 0, $current_argv_len_0 | 0) | 0) == 0) {
if ((_strlen($5 | 0) | 0) == ($current_argv_len_0 | 0)) {
$match_2 = $i_061;
break L2244;
}
if (($match_062 | 0) == -1) {
$match_1 = $i_061;
} else {
break;
}
} else {
$match_1 = $match_062;
}
$inc28 = $i_061 + 1 | 0;
$8 = HEAP32[$long_options + ($inc28 << 4) >> 2] | 0;
if (($8 | 0) == 0) {
$match_2 = $match_1;
break L2244;
} else {
$i_061 = $inc28;
$match_062 = $match_1;
$5 = $8;
}
}
do {
if ((HEAP32[72] | 0) != 0) {
if ((HEAP8[$options] | 0) == 58) {
break;
}
__warnx(408, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAP32[tempInt >> 2] = $current_argv_len_0, HEAP32[tempInt + 8 >> 2] = $0, tempInt) | 0);
}
} while (0);
HEAP32[68] = 0;
$retval_0 = 63;
STACKTOP = sp;
return $retval_0 | 0;
}
} while (0);
if (($match_2 | 0) == -1) {
break;
}
$has_arg = $long_options + ($match_2 << 4) + 4 | 0;
$9 = HEAP32[$has_arg >> 2] | 0;
$tobool36 = ($has_equal_0 | 0) == 0;
if (!(($9 | 0) != 0 | $tobool36)) {
do {
if ((HEAP32[72] | 0) != 0) {
if ((HEAP8[$options] | 0) == 58) {
break;
}
__warnx(312, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAP32[tempInt >> 2] = $current_argv_len_0, HEAP32[tempInt + 8 >> 2] = $0, tempInt) | 0);
}
} while (0);
if ((HEAP32[$long_options + ($match_2 << 4) + 8 >> 2] | 0) == 0) {
$storemerge56 = HEAP32[$long_options + ($match_2 << 4) + 12 >> 2] | 0;
} else {
$storemerge56 = 0;
}
HEAP32[68] = $storemerge56;
$retval_0 = (HEAP8[$options] | 0) == 58 ? 58 : 63;
STACKTOP = sp;
return $retval_0 | 0;
}
do {
if (($9 - 1 | 0) >>> 0 < 2) {
if (!$tobool36) {
HEAP32[10822] = $has_equal_0;
break;
}
if (($9 | 0) != 1) {
break;
}
HEAP32[70] = $1 + 2;
HEAP32[10822] = HEAP32[$nargv + ($inc << 2) >> 2];
}
} while (0);
if (!((HEAP32[$has_arg >> 2] | 0) == 1 & (HEAP32[10822] | 0) == 0)) {
if (($idx | 0) != 0) {
HEAP32[$idx >> 2] = $match_2;
}
$26 = HEAP32[$long_options + ($match_2 << 4) + 8 >> 2] | 0;
$27 = HEAP32[$long_options + ($match_2 << 4) + 12 >> 2] | 0;
if (($26 | 0) == 0) {
$retval_0 = $27;
STACKTOP = sp;
return $retval_0 | 0;
}
HEAP32[$26 >> 2] = $27;
$retval_0 = 0;
STACKTOP = sp;
return $retval_0 | 0;
}
do {
if ((HEAP32[72] | 0) != 0) {
if ((HEAP8[$options] | 0) == 58) {
break;
}
__warnx(112, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $0, tempInt) | 0);
}
} while (0);
if ((HEAP32[$long_options + ($match_2 << 4) + 8 >> 2] | 0) == 0) {
$storemerge = HEAP32[$long_options + ($match_2 << 4) + 12 >> 2] | 0;
} else {
$storemerge = 0;
}
HEAP32[68] = $storemerge;
HEAP32[70] = (HEAP32[70] | 0) - 1;
$retval_0 = (HEAP8[$options] | 0) == 58 ? 58 : 63;
STACKTOP = sp;
return $retval_0 | 0;
}
} while (0);
if (($short_too | 0) != 0) {
HEAP32[70] = $1;
$retval_0 = -1;
STACKTOP = sp;
return $retval_0 | 0;
}
do {
if ((HEAP32[72] | 0) != 0) {
if ((HEAP8[$options] | 0) == 58) {
break;
}
__warnx(352, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $0, tempInt) | 0);
}
} while (0);
HEAP32[68] = 0;
$retval_0 = 63;
STACKTOP = sp;
return $retval_0 | 0;
}
function __warn($fmt, varrp) {
$fmt = $fmt | 0;
varrp = varrp | 0;
var $ap = 0, $arraydecay1 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$ap = sp | 0;
$arraydecay1 = $ap;
HEAP32[$arraydecay1 >> 2] = varrp;
HEAP32[$arraydecay1 + 4 >> 2] = 0;
__vwarn($fmt, $ap | 0);
STACKTOP = sp;
return;
}
function __warnx($fmt, varrp) {
$fmt = $fmt | 0;
varrp = varrp | 0;
var $ap = 0, $arraydecay1 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$ap = sp | 0;
$arraydecay1 = $ap;
HEAP32[$arraydecay1 >> 2] = varrp;
HEAP32[$arraydecay1 + 4 >> 2] = 0;
__vwarnx($fmt, $ap | 0);
STACKTOP = sp;
return;
}
function __vwarn($fmt, $ap) {
$fmt = $fmt | 0;
$ap = $ap | 0;
var $0 = 0, $2 = 0, $3 = 0, $4 = 0, $6 = 0, $call4 = 0, sp = 0;
sp = STACKTOP;
$0 = HEAP32[(___errno_location() | 0) >> 2] | 0;
$2 = HEAP32[___progname >> 2] | 0;
_fprintf(HEAP32[_stderr >> 2] | 0, 3136, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $2, tempInt) | 0) | 0;
if (($fmt | 0) != 0) {
$3 = HEAP32[_stderr >> 2] | 0;
_vfprintf($3 | 0, $fmt | 0, $ap | 0) | 0;
$4 = HEAP32[_stderr >> 2] | 0;
_fwrite(4056, 2, 1, $4 | 0) | 0;
}
$6 = HEAP32[_stderr >> 2] | 0;
$call4 = _strerror($0 | 0) | 0;
_fprintf($6 | 0, 2832, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $call4, tempInt) | 0) | 0;
STACKTOP = sp;
return;
}
function __vwarnx($fmt, $ap) {
$fmt = $fmt | 0;
$ap = $ap | 0;
var $1 = 0, $2 = 0, sp = 0;
sp = STACKTOP;
$1 = HEAP32[___progname >> 2] | 0;
_fprintf(HEAP32[_stderr >> 2] | 0, 2672, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $1, tempInt) | 0) | 0;
if (($fmt | 0) != 0) {
$2 = HEAP32[_stderr >> 2] | 0;
_vfprintf($2 | 0, $fmt | 0, $ap | 0) | 0;
}
_fputc(10, HEAP32[_stderr >> 2] | 0) | 0;
STACKTOP = sp;
return;
}
function _strtod($string, $endPtr) {
$string = $string | 0;
$endPtr = $endPtr | 0;
var $p_0 = 0, $add_ptr = 0, $1 = 0, $sign_0 = 0, $p_2 = 0, $p_3 = 0, $mantSize_0 = 0, $decPt_0 = 0, $2 = 0, $decPt_1 = 0, $add_ptr22 = 0, $cmp23 = 0, $mantSize_1 = 0, $cmp28 = 0, $fracExp_0 = 0, $mantSize_2 = 0, $p_4_lcssa91 = 0, $mantSize_3_lcssa90 = 0, $frac1_0_lcssa89 = 0.0, $frac1_081 = 0, $mantSize_380 = 0, $p_479 = 0, $4 = 0, $add_ptr43 = 0, $p_5 = 0, $c_0_in = 0, $add51 = 0, $sub53 = 0, $frac2_076 = 0, $mantSize_475 = 0, $p_674 = 0, $6 = 0, $add_ptr60 = 0, $p_7 = 0, $c_1_in = 0, $add69 = 0, $sub71 = 0, $frac1_0_lcssa88 = 0.0, $frac2_0_lcssa = 0.0, $add76 = 0.0, $add_ptr86 = 0, $8 = 0, $expSign_0_ph = 0, $p_9_ph = 0, $9 = 0, $10 = 0, $exp_070 = 0, $p_969 = 0, $add108 = 0, $add_ptr109 = 0, $11 = 0, $expSign_1 = 0, $p_10 = 0, $exp_1 = 0, $exp_2 = 0, $exp_3 = 0, $exp_565 = 0, $d_064 = 0, $dblExp_063 = 0.0, $dblExp_1 = 0.0, $shr = 0, $dblExp_0_lcssa = 0.0, $fraction_0 = 0.0, $p_11 = 0, $retval_0 = 0.0, label = 0;
$p_0 = $string;
while (1) {
$add_ptr = $p_0 + 1 | 0;
if ((_isspace(HEAP8[$p_0] | 0) | 0) == 0) {
break;
} else {
$p_0 = $add_ptr;
}
}
$1 = HEAP8[$p_0] | 0;
if (($1 << 24 >> 24 | 0) == 45) {
$p_2 = $add_ptr;
$sign_0 = 1;
} else if (($1 << 24 >> 24 | 0) == 43) {
$p_2 = $add_ptr;
$sign_0 = 0;
} else {
$p_2 = $p_0;
$sign_0 = 0;
}
$decPt_0 = -1;
$mantSize_0 = 0;
$p_3 = $p_2;
while (1) {
$2 = HEAP8[$p_3] | 0;
if ((($2 << 24 >> 24) - 48 | 0) >>> 0 < 10) {
$decPt_1 = $decPt_0;
} else {
if ($2 << 24 >> 24 != 46 | ($decPt_0 | 0) > -1) {
break;
} else {
$decPt_1 = $mantSize_0;
}
}
$decPt_0 = $decPt_1;
$mantSize_0 = $mantSize_0 + 1 | 0;
$p_3 = $p_3 + 1 | 0;
}
$add_ptr22 = $p_3 + (-$mantSize_0 | 0) | 0;
$cmp23 = ($decPt_0 | 0) < 0;
$mantSize_1 = (($cmp23 ^ 1) << 31 >> 31) + $mantSize_0 | 0;
$cmp28 = ($mantSize_1 | 0) > 18;
$fracExp_0 = ($cmp28 ? -18 : -$mantSize_1 | 0) + ($cmp23 ? $mantSize_0 : $decPt_0) | 0;
$mantSize_2 = $cmp28 ? 18 : $mantSize_1;
do {
if (($mantSize_2 | 0) == 0) {
$p_11 = $string;
$fraction_0 = 0.0;
} else {
if (($mantSize_2 | 0) > 9) {
$p_479 = $add_ptr22;
$mantSize_380 = $mantSize_2;
$frac1_081 = 0;
while (1) {
$4 = HEAP8[$p_479] | 0;
$add_ptr43 = $p_479 + 1 | 0;
if ($4 << 24 >> 24 == 46) {
$c_0_in = HEAP8[$add_ptr43] | 0;
$p_5 = $p_479 + 2 | 0;
} else {
$c_0_in = $4;
$p_5 = $add_ptr43;
}
$add51 = ($frac1_081 * 10 | 0) - 48 + ($c_0_in << 24 >> 24) | 0;
$sub53 = $mantSize_380 - 1 | 0;
if (($sub53 | 0) > 9) {
$p_479 = $p_5;
$mantSize_380 = $sub53;
$frac1_081 = $add51;
} else {
break;
}
}
$frac1_0_lcssa89 = +($add51 | 0) * 1.0e9;
$mantSize_3_lcssa90 = 9;
$p_4_lcssa91 = $p_5;
label = 1776;
} else {
if (($mantSize_2 | 0) > 0) {
$frac1_0_lcssa89 = 0.0;
$mantSize_3_lcssa90 = $mantSize_2;
$p_4_lcssa91 = $add_ptr22;
label = 1776;
} else {
$frac2_0_lcssa = 0.0;
$frac1_0_lcssa88 = 0.0;
}
}
if ((label | 0) == 1776) {
$p_674 = $p_4_lcssa91;
$mantSize_475 = $mantSize_3_lcssa90;
$frac2_076 = 0;
while (1) {
$6 = HEAP8[$p_674] | 0;
$add_ptr60 = $p_674 + 1 | 0;
if ($6 << 24 >> 24 == 46) {
$c_1_in = HEAP8[$add_ptr60] | 0;
$p_7 = $p_674 + 2 | 0;
} else {
$c_1_in = $6;
$p_7 = $add_ptr60;
}
$add69 = ($frac2_076 * 10 | 0) - 48 + ($c_1_in << 24 >> 24) | 0;
$sub71 = $mantSize_475 - 1 | 0;
if (($sub71 | 0) > 0) {
$p_674 = $p_7;
$mantSize_475 = $sub71;
$frac2_076 = $add69;
} else {
break;
}
}
$frac2_0_lcssa = +($add69 | 0);
$frac1_0_lcssa88 = $frac1_0_lcssa89;
}
$add76 = $frac1_0_lcssa88 + $frac2_0_lcssa;
do {
if (($2 << 24 >> 24 | 0) == 69 | ($2 << 24 >> 24 | 0) == 101) {
$add_ptr86 = $p_3 + 1 | 0;
$8 = HEAP8[$add_ptr86] | 0;
if (($8 << 24 >> 24 | 0) == 43) {
$p_9_ph = $p_3 + 2 | 0;
$expSign_0_ph = 0;
} else if (($8 << 24 >> 24 | 0) == 45) {
$p_9_ph = $p_3 + 2 | 0;
$expSign_0_ph = 1;
} else {
$p_9_ph = $add_ptr86;
$expSign_0_ph = 0;
}
$9 = HEAP8[$p_9_ph] | 0;
if ((($9 << 24 >> 24) - 48 | 0) >>> 0 < 10) {
$p_969 = $p_9_ph;
$exp_070 = 0;
$10 = $9;
} else {
$exp_1 = 0;
$p_10 = $p_9_ph;
$expSign_1 = $expSign_0_ph;
break;
}
while (1) {
$add108 = ($exp_070 * 10 | 0) - 48 + ($10 << 24 >> 24) | 0;
$add_ptr109 = $p_969 + 1 | 0;
$11 = HEAP8[$add_ptr109] | 0;
if ((($11 << 24 >> 24) - 48 | 0) >>> 0 < 10) {
$p_969 = $add_ptr109;
$exp_070 = $add108;
$10 = $11;
} else {
$exp_1 = $add108;
$p_10 = $add_ptr109;
$expSign_1 = $expSign_0_ph;
break;
}
}
} else {
$exp_1 = 0;
$p_10 = $p_3;
$expSign_1 = 0;
}
} while (0);
$exp_2 = $fracExp_0 + (($expSign_1 | 0) == 0 ? $exp_1 : -$exp_1 | 0) | 0;
$exp_3 = ($exp_2 | 0) < 0 ? -$exp_2 | 0 : $exp_2;
if (($exp_3 | 0) > 511) {
HEAP32[(___errno_location() | 0) >> 2] = 34;
$dblExp_063 = 1.0;
$d_064 = 192;
$exp_565 = 511;
label = 1793;
} else {
if (($exp_3 | 0) == 0) {
$dblExp_0_lcssa = 1.0;
} else {
$dblExp_063 = 1.0;
$d_064 = 192;
$exp_565 = $exp_3;
label = 1793;
}
}
if ((label | 0) == 1793) {
while (1) {
label = 0;
if (($exp_565 & 1 | 0) == 0) {
$dblExp_1 = $dblExp_063;
} else {
$dblExp_1 = $dblExp_063 * +HEAPF64[$d_064 >> 3];
}
$shr = $exp_565 >> 1;
if (($shr | 0) == 0) {
$dblExp_0_lcssa = $dblExp_1;
break;
} else {
$dblExp_063 = $dblExp_1;
$d_064 = $d_064 + 8 | 0;
$exp_565 = $shr;
label = 1793;
}
}
}
if (($exp_2 | 0) > -1) {
$p_11 = $p_10;
$fraction_0 = $add76 * $dblExp_0_lcssa;
break;
} else {
$p_11 = $p_10;
$fraction_0 = $add76 / $dblExp_0_lcssa;
break;
}
}
} while (0);
if (($endPtr | 0) != 0) {
HEAP32[$endPtr >> 2] = $p_11;
}
if (($sign_0 | 0) == 0) {
$retval_0 = $fraction_0;
return +$retval_0;
}
$retval_0 = -0.0 - $fraction_0;
return +$retval_0;
}
function _strtold($nptr, $endptr) {
$nptr = $nptr | 0;
$endptr = $endptr | 0;
return +(+_strtod($nptr, $endptr));
}
function _strtof($nptr, $endptr) {
$nptr = $nptr | 0;
$endptr = $endptr | 0;
return +(+_strtod($nptr, $endptr));
}
function _strtod_l($nptr, $endptr, $loc) {
$nptr = $nptr | 0;
$endptr = $endptr | 0;
$loc = $loc | 0;
return +(+_strtod($nptr, $endptr));
}
function _strtold_l($nptr, $endptr, $loc) {
$nptr = $nptr | 0;
$endptr = $endptr | 0;
$loc = $loc | 0;
return +(+_strtod($nptr, $endptr));
}
function _atof($str) {
$str = $str | 0;
return +(+_strtod($str, 0));
}
function __err($eval, $fmt, varrp) {
$eval = $eval | 0;
$fmt = $fmt | 0;
varrp = varrp | 0;
var $ap = 0, $arraydecay1 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$ap = sp | 0;
$arraydecay1 = $ap;
HEAP32[$arraydecay1 >> 2] = varrp;
HEAP32[$arraydecay1 + 4 >> 2] = 0;
__verr($eval, $fmt, $ap | 0);
}
function __errx($eval, $fmt, varrp) {
$eval = $eval | 0;
$fmt = $fmt | 0;
varrp = varrp | 0;
var $ap = 0, $arraydecay1 = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16 | 0;
$ap = sp | 0;
$arraydecay1 = $ap;
HEAP32[$arraydecay1 >> 2] = varrp;
HEAP32[$arraydecay1 + 4 >> 2] = 0;
__verrx($eval, $fmt, $ap | 0);
}
function __verr($eval, $fmt, $ap) {
$eval = $eval | 0;
$fmt = $fmt | 0;
$ap = $ap | 0;
var $0 = 0, $2 = 0, $3 = 0, $4 = 0, $6 = 0, $call4 = 0;
$0 = HEAP32[(___errno_location() | 0) >> 2] | 0;
$2 = HEAP32[___progname >> 2] | 0;
_fprintf(HEAP32[_stderr >> 2] | 0, 536, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $2, tempInt) | 0) | 0;
if (($fmt | 0) != 0) {
$3 = HEAP32[_stderr >> 2] | 0;
_vfprintf($3 | 0, $fmt | 0, $ap | 0) | 0;
$4 = HEAP32[_stderr >> 2] | 0;
_fwrite(4248, 2, 1, $4 | 0) | 0;
}
$6 = HEAP32[_stderr >> 2] | 0;
$call4 = _strerror($0 | 0) | 0;
_fprintf($6 | 0, 2928, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $call4, tempInt) | 0) | 0;
_exit($eval | 0);
}
function __verrx($eval, $fmt, $ap) {
$eval = $eval | 0;
$fmt = $fmt | 0;
$ap = $ap | 0;
var $1 = 0, $2 = 0;
$1 = HEAP32[___progname >> 2] | 0;
_fprintf(HEAP32[_stderr >> 2] | 0, 3520, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[tempInt >> 2] = $1, tempInt) | 0) | 0;
if (($fmt | 0) != 0) {
$2 = HEAP32[_stderr >> 2] | 0;
_vfprintf($2 | 0, $fmt | 0, $ap | 0) | 0;
}
_fputc(10, HEAP32[_stderr >> 2] | 0) | 0;
_exit($eval | 0);
}
function _strcpy(pdest, psrc) {
pdest = pdest | 0;
psrc = psrc | 0;
var i = 0;
do {
HEAP8[pdest + i | 0] = HEAP8[psrc + i | 0];
i = i + 1 | 0;
} while (HEAP8[psrc + (i - 1) | 0] | 0);
return pdest | 0;
}
function _memset(ptr, value, num) {
ptr = ptr | 0;
value = value | 0;
num = num | 0;
var stop = 0, value4 = 0, stop4 = 0, unaligned = 0;
stop = ptr + num | 0;
if ((num | 0) >= 20) {
value = value & 255;
unaligned = ptr & 3;
value4 = value | value << 8 | value << 16 | value << 24;
stop4 = stop & ~3;
if (unaligned) {
unaligned = ptr + 4 - unaligned | 0;
while ((ptr | 0) < (unaligned | 0)) {
HEAP8[ptr] = value;
ptr = ptr + 1 | 0;
}
}
while ((ptr | 0) < (stop4 | 0)) {
HEAP32[ptr >> 2] = value4;
ptr = ptr + 4 | 0;
}
}
while ((ptr | 0) < (stop | 0)) {
HEAP8[ptr] = value;
ptr = ptr + 1 | 0;
}
}
function _memcpy(dest, src, num) {
dest = dest | 0;
src = src | 0;
num = num | 0;
var ret = 0;
ret = dest | 0;
if ((dest & 3) == (src & 3)) {
while (dest & 3) {
if ((num | 0) == 0) return ret | 0;
HEAP8[dest] = HEAP8[src] | 0;
dest = dest + 1 | 0;
src = src + 1 | 0;
num = num - 1 | 0;
}
while ((num | 0) >= 4) {
HEAP32[dest >> 2] = HEAP32[src >> 2];
dest = dest + 4 | 0;
src = src + 4 | 0;
num = num - 4 | 0;
}
}
while ((num | 0) > 0) {
HEAP8[dest] = HEAP8[src] | 0;
dest = dest + 1 | 0;
src = src + 1 | 0;
num = num - 1 | 0;
}
return ret | 0;
}
function _strlen(ptr) {
ptr = ptr | 0;
var curr = 0;
curr = ptr;
while (HEAP8[curr] | 0) {
curr = curr + 1 | 0;
}
return curr - ptr | 0;
}
function _strncpy(pdest, psrc, num) {
pdest = pdest | 0;
psrc = psrc | 0;
num = num | 0;
var padding = 0, i = 0;
while ((i | 0) < (num | 0)) {
HEAP8[pdest + i | 0] = padding ? 0 : HEAP8[psrc + i | 0] | 0;
padding = padding ? 1 : (HEAP8[psrc + i | 0] | 0) == 0;
i = i + 1 | 0;
}
return pdest | 0;
}
function _memcmp(p1, p2, num) {
p1 = p1 | 0;
p2 = p2 | 0;
num = num | 0;
var i = 0, v1 = 0, v2 = 0;
while ((i | 0) < (num | 0)) {
v1 = HEAPU8[p1 + i | 0] | 0;
v2 = HEAPU8[p2 + i | 0] | 0;
if ((v1 | 0) != (v2 | 0)) return ((v1 | 0) > (v2 | 0) ? 1 : -1) | 0;
i = i + 1 | 0;
}
return 0;
}
function _memmove(dest, src, num) {
dest = dest | 0;
src = src | 0;
num = num | 0;
if ((src | 0) < (dest | 0) & (dest | 0) < (src + num | 0)) {
src = src + num | 0;
dest = dest + num | 0;
while ((num | 0) > 0) {
dest = dest - 1 | 0;
src = src - 1 | 0;
num = num - 1 | 0;
HEAP8[dest] = HEAP8[src] | 0;
}
} else {
_memcpy(dest, src, num) | 0;
}
}
function _i64Add(a, b, c, d) {
a = a | 0;
b = b | 0;
c = c | 0;
d = d | 0;
var l = 0;
l = a + c >>> 0;
return (tempRet0 = b + d + (l >>> 0 < a >>> 0 | 0) >>> 0, l | 0) | 0;
}
function _i64Subtract(a, b, c, d) {
a = a | 0;
b = b | 0;
c = c | 0;
d = d | 0;
var h = 0;
h = b - d >>> 0;
h = b - d - (c >>> 0 > a >>> 0 | 0) >>> 0;
return (tempRet0 = h, a - c >>> 0 | 0) | 0;
}
function _bitshift64Shl(low, high, bits) {
low = low | 0;
high = high | 0;
bits = bits | 0;
if ((bits | 0) < 32) {
tempRet0 = high << bits | (low & (1 << bits) - 1 << 32 - bits) >>> 32 - bits;
return low << bits;
}
tempRet0 = low << bits - 32;
return 0;
}
function _bitshift64Lshr(low, high, bits) {
low = low | 0;
high = high | 0;
bits = bits | 0;
if ((bits | 0) < 32) {
tempRet0 = high >>> bits;
return low >>> bits | (high & (1 << bits) - 1) << 32 - bits;
}
tempRet0 = 0;
return high >>> bits - 32 | 0;
}
function _bitshift64Ashr(low, high, bits) {
low = low | 0;
high = high | 0;
bits = bits | 0;
if ((bits | 0) < 32) {
tempRet0 = high >> bits;
return low >>> bits | (high & (1 << bits) - 1) << 32 - bits;
}
tempRet0 = (high | 0) < 0 ? -1 : 0;
return high >> bits - 32 | 0;
}
function _llvm_ctlz_i32(x) {
x = x | 0;
var ret = 0;
ret = HEAP8[ctlz_i8 + (x >>> 24) | 0] | 0;
if ((ret | 0) < 8) return ret | 0;
ret = HEAP8[ctlz_i8 + (x >> 16 & 255) | 0] | 0;
if ((ret | 0) < 8) return ret + 8 | 0;
ret = HEAP8[ctlz_i8 + (x >> 8 & 255) | 0] | 0;
if ((ret | 0) < 8) return ret + 16 | 0;
return (HEAP8[ctlz_i8 + (x & 255) | 0] | 0) + 24 | 0;
}
function _llvm_cttz_i32(x) {
x = x | 0;
var ret = 0;
ret = HEAP8[cttz_i8 + (x & 255) | 0] | 0;
if ((ret | 0) < 8) return ret | 0;
ret = HEAP8[cttz_i8 + (x >> 8 & 255) | 0] | 0;
if ((ret | 0) < 8) return ret + 8 | 0;
ret = HEAP8[cttz_i8 + (x >> 16 & 255) | 0] | 0;
if ((ret | 0) < 8) return ret + 16 | 0;
return (HEAP8[cttz_i8 + (x >>> 24) | 0] | 0) + 24 | 0;
}
function ___muldsi3($a, $b) {
$a = $a | 0;
$b = $b | 0;
var $1 = 0, $2 = 0, $3 = 0, $6 = 0, $8 = 0, $11 = 0, $12 = 0;
$1 = $a & 65535;
$2 = $b & 65535;
$3 = Math_imul($2, $1) | 0;
$6 = $a >>> 16;
$8 = ($3 >>> 16) + (Math_imul($2, $6) | 0) | 0;
$11 = $b >>> 16;
$12 = Math_imul($11, $1) | 0;
return (tempRet0 = ($8 >>> 16) + (Math_imul($11, $6) | 0) + ((($8 & 65535) + $12 | 0) >>> 16) | 0, $8 + $12 << 16 | $3 & 65535 | 0) | 0;
}
function ___divdi3($a$0, $a$1, $b$0, $b$1) {
$a$0 = $a$0 | 0;
$a$1 = $a$1 | 0;
$b$0 = $b$0 | 0;
$b$1 = $b$1 | 0;
var $1$0 = 0, $1$1 = 0, $2$0 = 0, $2$1 = 0, $4$0 = 0, $4$1 = 0, $7$0 = 0, $7$1 = 0, $10$0 = 0;
$1$0 = $a$1 >> 31 | (($a$1 | 0) < 0 ? -1 : 0) << 1;
$1$1 = (($a$1 | 0) < 0 ? -1 : 0) >> 31 | (($a$1 | 0) < 0 ? -1 : 0) << 1;
$2$0 = $b$1 >> 31 | (($b$1 | 0) < 0 ? -1 : 0) << 1;
$2$1 = (($b$1 | 0) < 0 ? -1 : 0) >> 31 | (($b$1 | 0) < 0 ? -1 : 0) << 1;
$4$0 = _i64Subtract($1$0 ^ $a$0, $1$1 ^ $a$1, $1$0, $1$1) | 0;
$4$1 = tempRet0;
$7$0 = $2$0 ^ $1$0;
$7$1 = $2$1 ^ $1$1;
$10$0 = _i64Subtract((___udivmoddi4($4$0, $4$1, _i64Subtract($2$0 ^ $b$0, $2$1 ^ $b$1, $2$0, $2$1) | 0, tempRet0, 0) | 0) ^ $7$0, tempRet0 ^ $7$1, $7$0, $7$1) | 0;
return (tempRet0 = tempRet0, $10$0) | 0;
}
function ___remdi3($a$0, $a$1, $b$0, $b$1) {
$a$0 = $a$0 | 0;
$a$1 = $a$1 | 0;
$b$0 = $b$0 | 0;
$b$1 = $b$1 | 0;
var $rem = 0, $1$0 = 0, $1$1 = 0, $2$0 = 0, $2$1 = 0, $4$0 = 0, $4$1 = 0, $6$0 = 0, $10$0 = 0, $10$1 = 0, __stackBase__ = 0;
__stackBase__ = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$rem = __stackBase__ | 0;
$1$0 = $a$1 >> 31 | (($a$1 | 0) < 0 ? -1 : 0) << 1;
$1$1 = (($a$1 | 0) < 0 ? -1 : 0) >> 31 | (($a$1 | 0) < 0 ? -1 : 0) << 1;
$2$0 = $b$1 >> 31 | (($b$1 | 0) < 0 ? -1 : 0) << 1;
$2$1 = (($b$1 | 0) < 0 ? -1 : 0) >> 31 | (($b$1 | 0) < 0 ? -1 : 0) << 1;
$4$0 = _i64Subtract($1$0 ^ $a$0, $1$1 ^ $a$1, $1$0, $1$1) | 0;
$4$1 = tempRet0;
$6$0 = _i64Subtract($2$0 ^ $b$0, $2$1 ^ $b$1, $2$0, $2$1) | 0;
___udivmoddi4($4$0, $4$1, $6$0, tempRet0, $rem) | 0;
$10$0 = _i64Subtract(HEAP32[$rem >> 2] ^ $1$0, HEAP32[$rem + 4 >> 2] ^ $1$1, $1$0, $1$1) | 0;
$10$1 = tempRet0;
STACKTOP = __stackBase__;
return (tempRet0 = $10$1, $10$0) | 0;
}
function ___muldi3($a$0, $a$1, $b$0, $b$1) {
$a$0 = $a$0 | 0;
$a$1 = $a$1 | 0;
$b$0 = $b$0 | 0;
$b$1 = $b$1 | 0;
var $x_sroa_0_0_extract_trunc = 0, $y_sroa_0_0_extract_trunc = 0, $1$0 = 0, $1$1 = 0;
$x_sroa_0_0_extract_trunc = $a$0;
$y_sroa_0_0_extract_trunc = $b$0;
$1$0 = ___muldsi3($x_sroa_0_0_extract_trunc, $y_sroa_0_0_extract_trunc) | 0;
$1$1 = tempRet0;
return (tempRet0 = (Math_imul($a$1, $y_sroa_0_0_extract_trunc) | 0) + (Math_imul($b$1, $x_sroa_0_0_extract_trunc) | 0) + $1$1 | $1$1 & 0, $1$0 | 0 | 0) | 0;
}
function ___udivdi3($a$0, $a$1, $b$0, $b$1) {
$a$0 = $a$0 | 0;
$a$1 = $a$1 | 0;
$b$0 = $b$0 | 0;
$b$1 = $b$1 | 0;
var $1$0 = 0;
$1$0 = ___udivmoddi4($a$0, $a$1, $b$0, $b$1, 0) | 0;
return (tempRet0 = tempRet0, $1$0) | 0;
}
function ___uremdi3($a$0, $a$1, $b$0, $b$1) {
$a$0 = $a$0 | 0;
$a$1 = $a$1 | 0;
$b$0 = $b$0 | 0;
$b$1 = $b$1 | 0;
var $rem = 0, __stackBase__ = 0;
__stackBase__ = STACKTOP;
STACKTOP = STACKTOP + 8 | 0;
$rem = __stackBase__ | 0;
___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) | 0;
STACKTOP = __stackBase__;
return (tempRet0 = HEAP32[$rem + 4 >> 2] | 0, HEAP32[$rem >> 2] | 0) | 0;
}
function ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) {
$a$0 = $a$0 | 0;
$a$1 = $a$1 | 0;
$b$0 = $b$0 | 0;
$b$1 = $b$1 | 0;
$rem = $rem | 0;
var $n_sroa_0_0_extract_trunc = 0, $n_sroa_1_4_extract_shift$0 = 0, $n_sroa_1_4_extract_trunc = 0, $d_sroa_0_0_extract_trunc = 0, $d_sroa_1_4_extract_shift$0 = 0, $d_sroa_1_4_extract_trunc = 0, $4 = 0, $17 = 0, $37 = 0, $51 = 0, $57 = 0, $58 = 0, $66 = 0, $78 = 0, $88 = 0, $89 = 0, $91 = 0, $92 = 0, $95 = 0, $105 = 0, $119 = 0, $125 = 0, $126 = 0, $130 = 0, $q_sroa_1_1_ph = 0, $q_sroa_0_1_ph = 0, $r_sroa_1_1_ph = 0, $r_sroa_0_1_ph = 0, $sr_1_ph = 0, $d_sroa_0_0_insert_insert99$0 = 0, $d_sroa_0_0_insert_insert99$1 = 0, $137$0 = 0, $137$1 = 0, $carry_0203 = 0, $sr_1202 = 0, $r_sroa_0_1201 = 0, $r_sroa_1_1200 = 0, $q_sroa_0_1199 = 0, $q_sroa_1_1198 = 0, $147 = 0, $149 = 0, $r_sroa_0_0_insert_insert42$0 = 0, $r_sroa_0_0_insert_insert42$1 = 0, $150$1 = 0, $151$0 = 0, $152 = 0, $r_sroa_0_0_extract_trunc = 0, $r_sroa_1_4_extract_trunc = 0, $155 = 0, $carry_0_lcssa$0 = 0, $carry_0_lcssa$1 = 0, $r_sroa_0_1_lcssa = 0, $r_sroa_1_1_lcssa = 0, $q_sroa_0_1_lcssa = 0, $q_sroa_1_1_lcssa = 0, $q_sroa_0_0_insert_ext75$0 = 0, $q_sroa_0_0_insert_ext75$1 = 0, $_0$0 = 0, $_0$1 = 0;
$n_sroa_0_0_extract_trunc = $a$0;
$n_sroa_1_4_extract_shift$0 = $a$1;
$n_sroa_1_4_extract_trunc = $n_sroa_1_4_extract_shift$0;
$d_sroa_0_0_extract_trunc = $b$0;
$d_sroa_1_4_extract_shift$0 = $b$1;
$d_sroa_1_4_extract_trunc = $d_sroa_1_4_extract_shift$0;
if (($n_sroa_1_4_extract_trunc | 0) == 0) {
$4 = ($rem | 0) != 0;
if (($d_sroa_1_4_extract_trunc | 0) == 0) {
if ($4) {
HEAP32[$rem >> 2] = ($n_sroa_0_0_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0);
HEAP32[$rem + 4 >> 2] = 0;
}
$_0$1 = 0;
$_0$0 = ($n_sroa_0_0_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
} else {
if (!$4) {
$_0$1 = 0;
$_0$0 = 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
}
HEAP32[$rem >> 2] = $a$0 | 0;
HEAP32[$rem + 4 >> 2] = $a$1 & 0;
$_0$1 = 0;
$_0$0 = 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
}
}
$17 = ($d_sroa_1_4_extract_trunc | 0) == 0;
do {
if (($d_sroa_0_0_extract_trunc | 0) == 0) {
if ($17) {
if (($rem | 0) != 0) {
HEAP32[$rem >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0);
HEAP32[$rem + 4 >> 2] = 0;
}
$_0$1 = 0;
$_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
}
if (($n_sroa_0_0_extract_trunc | 0) == 0) {
if (($rem | 0) != 0) {
HEAP32[$rem >> 2] = 0;
HEAP32[$rem + 4 >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_1_4_extract_trunc >>> 0);
}
$_0$1 = 0;
$_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_1_4_extract_trunc >>> 0) >>> 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
}
$37 = $d_sroa_1_4_extract_trunc - 1 | 0;
if (($37 & $d_sroa_1_4_extract_trunc | 0) == 0) {
if (($rem | 0) != 0) {
HEAP32[$rem >> 2] = $a$0 | 0;
HEAP32[$rem + 4 >> 2] = $37 & $n_sroa_1_4_extract_trunc | $a$1 & 0;
}
$_0$1 = 0;
$_0$0 = $n_sroa_1_4_extract_trunc >>> ((_llvm_cttz_i32($d_sroa_1_4_extract_trunc | 0) | 0) >>> 0);
return (tempRet0 = $_0$1, $_0$0) | 0;
}
$51 = (_llvm_ctlz_i32($d_sroa_1_4_extract_trunc | 0) | 0) - (_llvm_ctlz_i32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;
if ($51 >>> 0 <= 30) {
$57 = $51 + 1 | 0;
$58 = 31 - $51 | 0;
$sr_1_ph = $57;
$r_sroa_0_1_ph = $n_sroa_1_4_extract_trunc << $58 | $n_sroa_0_0_extract_trunc >>> ($57 >>> 0);
$r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($57 >>> 0);
$q_sroa_0_1_ph = 0;
$q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $58;
break;
}
if (($rem | 0) == 0) {
$_0$1 = 0;
$_0$0 = 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
}
HEAP32[$rem >> 2] = $a$0 | 0;
HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;
$_0$1 = 0;
$_0$0 = 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
} else {
if (!$17) {
$119 = (_llvm_ctlz_i32($d_sroa_1_4_extract_trunc | 0) | 0) - (_llvm_ctlz_i32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;
if ($119 >>> 0 <= 31) {
$125 = $119 + 1 | 0;
$126 = 31 - $119 | 0;
$130 = $119 - 31 >> 31;
$sr_1_ph = $125;
$r_sroa_0_1_ph = $n_sroa_0_0_extract_trunc >>> ($125 >>> 0) & $130 | $n_sroa_1_4_extract_trunc << $126;
$r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($125 >>> 0) & $130;
$q_sroa_0_1_ph = 0;
$q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $126;
break;
}
if (($rem | 0) == 0) {
$_0$1 = 0;
$_0$0 = 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
}
HEAP32[$rem >> 2] = $a$0 | 0;
HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;
$_0$1 = 0;
$_0$0 = 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
}
$66 = $d_sroa_0_0_extract_trunc - 1 | 0;
if (($66 & $d_sroa_0_0_extract_trunc | 0) != 0) {
$88 = (_llvm_ctlz_i32($d_sroa_0_0_extract_trunc | 0) | 0) + 33 - (_llvm_ctlz_i32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;
$89 = 64 - $88 | 0;
$91 = 32 - $88 | 0;
$92 = $91 >> 31;
$95 = $88 - 32 | 0;
$105 = $95 >> 31;
$sr_1_ph = $88;
$r_sroa_0_1_ph = $91 - 1 >> 31 & $n_sroa_1_4_extract_trunc >>> ($95 >>> 0) | ($n_sroa_1_4_extract_trunc << $91 | $n_sroa_0_0_extract_trunc >>> ($88 >>> 0)) & $105;
$r_sroa_1_1_ph = $105 & $n_sroa_1_4_extract_trunc >>> ($88 >>> 0);
$q_sroa_0_1_ph = $n_sroa_0_0_extract_trunc << $89 & $92;
$q_sroa_1_1_ph = ($n_sroa_1_4_extract_trunc << $89 | $n_sroa_0_0_extract_trunc >>> ($95 >>> 0)) & $92 | $n_sroa_0_0_extract_trunc << $91 & $88 - 33 >> 31;
break;
}
if (($rem | 0) != 0) {
HEAP32[$rem >> 2] = $66 & $n_sroa_0_0_extract_trunc;
HEAP32[$rem + 4 >> 2] = 0;
}
if (($d_sroa_0_0_extract_trunc | 0) == 1) {
$_0$1 = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;
$_0$0 = $a$0 | 0 | 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
} else {
$78 = _llvm_cttz_i32($d_sroa_0_0_extract_trunc | 0) | 0;
$_0$1 = $n_sroa_1_4_extract_trunc >>> ($78 >>> 0) | 0;
$_0$0 = $n_sroa_1_4_extract_trunc << 32 - $78 | $n_sroa_0_0_extract_trunc >>> ($78 >>> 0) | 0;
return (tempRet0 = $_0$1, $_0$0) | 0;
}
}
} while (0);
if (($sr_1_ph | 0) == 0) {
$q_sroa_1_1_lcssa = $q_sroa_1_1_ph;
$q_sroa_0_1_lcssa = $q_sroa_0_1_ph;
$r_sroa_1_1_lcssa = $r_sroa_1_1_ph;
$r_sroa_0_1_lcssa = $r_sroa_0_1_ph;
$carry_0_lcssa$1 = 0;
$carry_0_lcssa$0 = 0;
} else {
$d_sroa_0_0_insert_insert99$0 = $b$0 | 0 | 0;
$d_sroa_0_0_insert_insert99$1 = $d_sroa_1_4_extract_shift$0 | $b$1 & 0;
$137$0 = _i64Add($d_sroa_0_0_insert_insert99$0, $d_sroa_0_0_insert_insert99$1, -1, -1) | 0;
$137$1 = tempRet0;
$q_sroa_1_1198 = $q_sroa_1_1_ph;
$q_sroa_0_1199 = $q_sroa_0_1_ph;
$r_sroa_1_1200 = $r_sroa_1_1_ph;
$r_sroa_0_1201 = $r_sroa_0_1_ph;
$sr_1202 = $sr_1_ph;
$carry_0203 = 0;
while (1) {
$147 = $q_sroa_0_1199 >>> 31 | $q_sroa_1_1198 << 1;
$149 = $carry_0203 | $q_sroa_0_1199 << 1;
$r_sroa_0_0_insert_insert42$0 = $r_sroa_0_1201 << 1 | $q_sroa_1_1198 >>> 31 | 0;
$r_sroa_0_0_insert_insert42$1 = $r_sroa_0_1201 >>> 31 | $r_sroa_1_1200 << 1 | 0;
_i64Subtract($137$0, $137$1, $r_sroa_0_0_insert_insert42$0, $r_sroa_0_0_insert_insert42$1) | 0;
$150$1 = tempRet0;
$151$0 = $150$1 >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1;
$152 = $151$0 & 1;
$r_sroa_0_0_extract_trunc = _i64Subtract($r_sroa_0_0_insert_insert42$0, $r_sroa_0_0_insert_insert42$1, $151$0 & $d_sroa_0_0_insert_insert99$0, ((($150$1 | 0) < 0 ? -1 : 0) >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1) & $d_sroa_0_0_insert_insert99$1) | 0;
$r_sroa_1_4_extract_trunc = tempRet0;
$155 = $sr_1202 - 1 | 0;
if (($155 | 0) == 0) {
break;
} else {
$q_sroa_1_1198 = $147;
$q_sroa_0_1199 = $149;
$r_sroa_1_1200 = $r_sroa_1_4_extract_trunc;
$r_sroa_0_1201 = $r_sroa_0_0_extract_trunc;
$sr_1202 = $155;
$carry_0203 = $152;
}
}
$q_sroa_1_1_lcssa = $147;
$q_sroa_0_1_lcssa = $149;
$r_sroa_1_1_lcssa = $r_sroa_1_4_extract_trunc;
$r_sroa_0_1_lcssa = $r_sroa_0_0_extract_trunc;
$carry_0_lcssa$1 = 0;
$carry_0_lcssa$0 = $152;
}
$q_sroa_0_0_insert_ext75$0 = $q_sroa_0_1_lcssa;
$q_sroa_0_0_insert_ext75$1 = 0;
if (($rem | 0) != 0) {
HEAP32[$rem >> 2] = $r_sroa_0_1_lcssa;
HEAP32[$rem + 4 >> 2] = $r_sroa_1_1_lcssa;
}
$_0$1 = ($q_sroa_0_0_insert_ext75$0 | 0) >>> 31 | ($q_sroa_1_1_lcssa | $q_sroa_0_0_insert_ext75$1) << 1 | ($q_sroa_0_0_insert_ext75$1 << 1 | $q_sroa_0_0_insert_ext75$0 >>> 31) & 0 | $carry_0_lcssa$1;
$_0$0 = ($q_sroa_0_0_insert_ext75$0 << 1 | 0 >>> 31) & -2 | $carry_0_lcssa$0;
return (tempRet0 = $_0$1, $_0$0) | 0;
}
function ___cxa_pure_virtual__wrapper() {
___cxa_pure_virtual();
}
function dynCall_viiiii(index, a1, a2, a3, a4, a5) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
a3 = a3 | 0;
a4 = a4 | 0;
a5 = a5 | 0;
FUNCTION_TABLE_viiiii[index & 7](a1 | 0, a2 | 0, a3 | 0, a4 | 0, a5 | 0);
}
function dynCall_vi(index, a1) {
index = index | 0;
a1 = a1 | 0;
FUNCTION_TABLE_vi[index & 127](a1 | 0);
}
function dynCall_vii(index, a1, a2) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
FUNCTION_TABLE_vii[index & 15](a1 | 0, a2 | 0);
}
function dynCall_iiiiiii(index, a1, a2, a3, a4, a5, a6) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
a3 = a3 | 0;
a4 = a4 | 0;
a5 = a5 | 0;
a6 = a6 | 0;
return FUNCTION_TABLE_iiiiiii[index & 15](a1 | 0, a2 | 0, a3 | 0, a4 | 0, a5 | 0, a6 | 0) | 0;
}
function dynCall_iiiii(index, a1, a2, a3, a4) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
a3 = a3 | 0;
a4 = a4 | 0;
return FUNCTION_TABLE_iiiii[index & 31](a1 | 0, a2 | 0, a3 | 0, a4 | 0) | 0;
}
function dynCall_ii(index, a1) {
index = index | 0;
a1 = a1 | 0;
return FUNCTION_TABLE_ii[index & 31](a1 | 0) | 0;
}
function dynCall_iiii(index, a1, a2, a3) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
a3 = a3 | 0;
return FUNCTION_TABLE_iiii[index & 15](a1 | 0, a2 | 0, a3 | 0) | 0;
}
function dynCall_viii(index, a1, a2, a3) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
a3 = a3 | 0;
FUNCTION_TABLE_viii[index & 15](a1 | 0, a2 | 0, a3 | 0);
}
function dynCall_v(index) {
index = index | 0;
FUNCTION_TABLE_v[index & 3]();
}
function dynCall_viiiiii(index, a1, a2, a3, a4, a5, a6) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
a3 = a3 | 0;
a4 = a4 | 0;
a5 = a5 | 0;
a6 = a6 | 0;
FUNCTION_TABLE_viiiiii[index & 7](a1 | 0, a2 | 0, a3 | 0, a4 | 0, a5 | 0, a6 | 0);
}
function dynCall_iii(index, a1, a2) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
return FUNCTION_TABLE_iii[index & 63](a1 | 0, a2 | 0) | 0;
}
function dynCall_iiiiii(index, a1, a2, a3, a4, a5) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
a3 = a3 | 0;
a4 = a4 | 0;
a5 = a5 | 0;
return FUNCTION_TABLE_iiiiii[index & 15](a1 | 0, a2 | 0, a3 | 0, a4 | 0, a5 | 0) | 0;
}
function dynCall_viiii(index, a1, a2, a3, a4) {
index = index | 0;
a1 = a1 | 0;
a2 = a2 | 0;
a3 = a3 | 0;
a4 = a4 | 0;
FUNCTION_TABLE_viiii[index & 7](a1 | 0, a2 | 0, a3 | 0, a4 | 0);
}
function b0(p0, p1, p2, p3, p4) {
p0 = p0 | 0;
p1 = p1 | 0;
p2 = p2 | 0;
p3 = p3 | 0;
p4 = p4 | 0;
abort(0);
}
function b1(p0) {
p0 = p0 | 0;
abort(1);
}
function b2(p0, p1) {
p0 = p0 | 0;
p1 = p1 | 0;
abort(2);
}
function b3(p0, p1, p2, p3, p4, p5) {
p0 = p0 | 0;
p1 = p1 | 0;
p2 = p2 | 0;
p3 = p3 | 0;
p4 = p4 | 0;
p5 = p5 | 0;
abort(3);
return 0;
}
function b4(p0, p1, p2, p3) {
p0 = p0 | 0;
p1 = p1 | 0;
p2 = p2 | 0;
p3 = p3 | 0;
abort(4);
return 0;
}
function b5(p0) {
p0 = p0 | 0;
abort(5);
return 0;
}
function b6(p0, p1, p2) {
p0 = p0 | 0;
p1 = p1 | 0;
p2 = p2 | 0;
abort(6);
return 0;
}
function b7(p0, p1, p2) {
p0 = p0 | 0;
p1 = p1 | 0;
p2 = p2 | 0;
abort(7);
}
function b8() {
abort(8);
}
function b9(p0, p1, p2, p3, p4, p5) {
p0 = p0 | 0;
p1 = p1 | 0;
p2 = p2 | 0;
p3 = p3 | 0;
p4 = p4 | 0;
p5 = p5 | 0;
abort(9);
}
function b10(p0, p1) {
p0 = p0 | 0;
p1 = p1 | 0;
abort(10);
return 0;
}
function b11(p0, p1, p2, p3, p4) {
p0 = p0 | 0;
p1 = p1 | 0;
p2 = p2 | 0;
p3 = p3 | 0;
p4 = p4 | 0;
abort(11);
return 0;
}
function b12(p0, p1, p2, p3) {
p0 = p0 | 0;
p1 = p1 | 0;
p2 = p2 | 0;
p3 = p3 | 0;
abort(12);
}
// EMSCRIPTEN_END_FUNCS
var FUNCTION_TABLE_viiiii = [b0,b0,__ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b0,__ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b0,__ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b0];
var FUNCTION_TABLE_vi = [b1,b1,__ZN10ime_pinyin8UserDictD0Ev,b1,__ZN10ime_pinyin5NGramD2Ev,b1,__ZNSt9bad_allocC2Ev,b1,__ZNSt9type_infoD0Ev,b1,__ZN10ime_pinyin11Utf16ReaderD2Ev
,b1,__ZN10ime_pinyin8DictTrieD0Ev,b1,__ZN10ime_pinyin4SyncC2Ev,b1,__ZN10ime_pinyin8LpiCacheC2Ev,b1,__ZN10ime_pinyin8DictTrie11flush_cacheEv,b1,__ZN10__cxxabiv117__array_type_infoD0Ev
,b1,__ZNK10__cxxabiv116__shim_type_info5noop2Ev,b1,__ZN10__cxxabiv123__fundamental_type_infoD0Ev,b1,__ZNSt10bad_typeidD2Ev,b1,__ZN10ime_pinyin8DictTrieC2Ev,b1,__ZN10ime_pinyin8UserDictD2Ev
,b1,__ZN10ime_pinyin13SpellingTableC2Ev,b1,__ZN10ime_pinyin12AtomDictBaseD0Ev,b1,__ZN10ime_pinyin8UserDictC2Ev,b1,__ZNSt9bad_allocD2Ev,b1,__ZN10ime_pinyin12SpellingTrieD2Ev
,b1,__ZN10ime_pinyin11DictBuilderC2Ev,b1,__ZNSt10bad_typeidC2Ev,b1,__ZN10__cxxabiv120__function_type_infoD0Ev,b1,__ZN10ime_pinyin8UserDict11flush_cacheEv,b1,__ZNSt8bad_castD0Ev
,b1,__ZN10ime_pinyin12SpellingTrieC2Ev,b1,__ZNSt20bad_array_new_lengthC2Ev,b1,__ZN10ime_pinyin11DictBuilderD2Ev,b1,__ZN10ime_pinyin4SyncD2Ev,b1,__ZN10__cxxabiv129__pointer_to_member_type_infoD0Ev
,b1,__ZNSt9type_infoD2Ev,b1,__ZN10ime_pinyin8LpiCacheD2Ev,b1,__ZN10ime_pinyin12MatrixSearchD2Ev,b1,__ZN10ime_pinyin8DictTrieD2Ev,b1,__ZN10__cxxabiv117__pbase_type_infoD0Ev
,b1,__ZN10__cxxabiv116__shim_type_infoD0Ev,b1,__ZN10ime_pinyin12AtomDictBaseD1Ev,b1,__ZN10ime_pinyin8DictListC2Ev,b1,__ZNSt10bad_typeidD0Ev,b1,__ZN10ime_pinyin5NGramC2Ev
,b1,__ZNSt20bad_array_new_lengthD0Ev,b1,__ZNSt9bad_allocD0Ev,b1,__ZN10__cxxabiv117__class_type_infoD0Ev,b1,__ZN10__cxxabiv116__shim_type_infoD2Ev,b1,__ZN10ime_pinyin8DictListD2Ev
,b1,__ZNSt8bad_castC2Ev,b1,__ZNK10__cxxabiv116__shim_type_info5noop1Ev,b1,__ZN10__cxxabiv119__pointer_type_infoD0Ev,b1,__ZNSt8bad_castD2Ev,b1,__ZN10__cxxabiv116__enum_type_infoD0Ev
,b1,__ZN10ime_pinyin13SpellingTableD2Ev,b1,__ZN10ime_pinyin14SpellingParserC2Ev,b1,__ZN10__cxxabiv121__vmi_class_type_infoD0Ev,b1,__ZN10__cxxabiv120__si_class_type_infoD0Ev,b1,__ZN10ime_pinyin12MatrixSearchC2Ev,b1,__ZN10ime_pinyin11Utf16ReaderC2Ev,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1];
var FUNCTION_TABLE_vii = [b2,b2,__vwarnx,b2,__warnx,b2,__warn,b2,__ZN10ime_pinyin8DictTrie31set_total_lemma_count_of_othersEj,b2,__ZN10ime_pinyin8UserDict31set_total_lemma_count_of_othersEj,b2,__vwarn,b2,b2,b2];
var FUNCTION_TABLE_iiiiiii = [b3,b3,__ZN10ime_pinyin8UserDict11extend_dictEtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj,b3,__ZN10ime_pinyin8DictTrie11extend_dictEtPKNS_11DictExtParaEPNS_10LmaPsbItemEjPj,b3,__ZN10ime_pinyin8DictTrie7predictEPKttPNS_12NPredictItemEjj,b3,__ZN10ime_pinyin8UserDict7predictEPKttPNS_12NPredictItemEjj,b3,b3,b3,b3,b3,b3,b3];
var FUNCTION_TABLE_iiiii = [b4,b4,__ZN10ime_pinyin8UserDict9load_dictEPKcjj,b4,__ZN10ime_pinyin8DictTrie15get_lemma_scoreEPtS1_t,b4,__ZN10ime_pinyin8UserDict12update_lemmaEjsb,b4,__ZN10ime_pinyin8UserDict12get_lemma_idEPtS1_t,b4,__ZN10ime_pinyin8DictTrie12get_lemma_idEPtS1_t
,b4,__ZN10ime_pinyin8DictTrie9load_dictEPKcjj,b4,__ZN10ime_pinyin8DictTrie13get_lemma_strEjPtt,b4,__ZN10ime_pinyin8UserDict15get_lemma_scoreEPtS1_t,b4,__ZN10ime_pinyin8DictTrie12update_lemmaEjsb,b4,__ZN10ime_pinyin8UserDict13get_lemma_strEjPtt,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4];
var FUNCTION_TABLE_ii = [b5,b5,__ZNKSt9bad_alloc4whatEv,b5,__ZNKSt8bad_cast4whatEv,b5,__ZN10ime_pinyin8DictTrie21get_total_lemma_countEv,b5,__ZN10ime_pinyin8DictTrie10close_dictEv,b5,__ZNKSt20bad_array_new_length4whatEv
,b5,__ZN10ime_pinyin8UserDict16number_of_lemmasEv,b5,__ZN10ime_pinyin8UserDict10close_dictEv,b5,__ZN10ime_pinyin8UserDict21get_total_lemma_countEv,b5,__ZN10ime_pinyin8DictTrie16number_of_lemmasEv,b5,__ZNKSt10bad_typeid4whatEv,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5];
var FUNCTION_TABLE_iiii = [b6,b6,__ZNK10__cxxabiv117__array_type_info9can_catchEPKNS_16__shim_type_infoERPv,b6,__ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv,b6,__ZNK10__cxxabiv116__enum_type_info9can_catchEPKNS_16__shim_type_infoERPv,b6,__ZNK10__cxxabiv120__function_type_info9can_catchEPKNS_16__shim_type_infoERPv,b6,__ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv,b6,__ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv,b6,__ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv,b6];
var FUNCTION_TABLE_viii = [b7,b7,__ZN10ime_pinyin8UserDict16reset_milestonesEtt,b7,__err,b7,__verr,b7,__verrx,b7,__ZN10ime_pinyin8DictTrie16reset_milestonesEtt,b7,__errx,b7,b7,b7];
var FUNCTION_TABLE_v = [b8,b8,___cxa_pure_virtual__wrapper,b8];
var FUNCTION_TABLE_viiiiii = [b9,b9,__ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b9,__ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b9,__ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b9];
var FUNCTION_TABLE_iii = [b10,b10,__ZN10ime_pinyin11comp_doubleEPKvS1_,b10,__ZN10ime_pinyin24cmp_npre_by_hislen_scoreEPKvS1_,b10,__ZN10ime_pinyin10compare_pyEPKvS1_,b10,__ZN10ime_pinyin12cmp_hanzis_5EPKvS1_,b10,__ZN10ime_pinyin12cmp_hanzis_3EPKvS1_
,b10,__ZN10ime_pinyin12cmp_hanzis_4EPKvS1_,b10,__ZN10ime_pinyin12cmp_hanzis_1EPKvS1_,b10,__ZN10ime_pinyin23cmp_npre_by_hanzi_scoreEPKvS1_,b10,__ZN10ime_pinyin12cmp_hanzis_2EPKvS1_,b10,__ZN10ime_pinyin24cmp_lpi_with_unified_psbEPKvS1_
,b10,__ZN10ime_pinyin19cmp_lemma_entry_hzsEPKvS1_,b10,__ZN10ime_pinyin14compare_char16EPKvS1_,b10,__ZN10ime_pinyin17cmp_lpsi_with_strEPKvS1_,b10,__ZN10ime_pinyin8DictTrie12remove_lemmaEj,b10,__ZN10ime_pinyin8UserDict15get_lemma_scoreEj
,b10,__ZN10ime_pinyin12cmp_hanzis_6EPKvS1_,b10,__ZN10ime_pinyin17cmp_scis_hz_splidEPKvS1_,b10,__ZN10ime_pinyin7compareEPKvS1_,b10,__ZN10ime_pinyin12cmp_hanzis_8EPKvS1_,b10,__ZN10ime_pinyin18compare_raw_spl_ebEPKvS1_
,b10,__ZN10ime_pinyin8DictTrie15get_lemma_scoreEj,b10,__ZN10ime_pinyin11compare_splEPKvS1_,b10,__ZN10ime_pinyin12cmp_hanzis_7EPKvS1_,b10,__ZN10ime_pinyin8UserDict12remove_lemmaEj,b10,__ZN10ime_pinyin22cmp_scis_hz_splid_freqEPKvS1_,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10];
var FUNCTION_TABLE_iiiiii = [b11,b11,__ZN10ime_pinyin8UserDict9put_lemmaEPtS1_tt,b11,__ZN10ime_pinyin8UserDict16get_lemma_splidsEjPttb,b11,__ZN10ime_pinyin8DictTrie8get_lpisEPKttPNS_10LmaPsbItemEj,b11,__ZN10ime_pinyin8DictTrie9put_lemmaEPtS1_tt,b11,__ZN10ime_pinyin8UserDict8get_lpisEPKttPNS_10LmaPsbItemEj,b11,__ZN10ime_pinyin8DictTrie16get_lemma_splidsEjPttb,b11,b11,b11];
var FUNCTION_TABLE_viiii = [b12,b12,__ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b12,__ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b12,__ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b12];
return { _im_enable_ym_as_szm: _im_enable_ym_as_szm, _strlen: _strlen, _im_reset_search: _im_reset_search, _im_flush_cache: _im_flush_cache, _im_get_candidate_char: _im_get_candidate_char, _realloc: _realloc, _im_get_spl_start: _im_get_spl_start, _im_close_decoder: _im_close_decoder, _toUTF8: _toUTF8, _im_open_decoder_fd: _im_open_decoder_fd, _strncpy: _strncpy, _im_get_spl_start_at: _im_get_spl_start_at, _im_get_fixed_len: _im_get_fixed_len, _im_cancel_last_choice: _im_cancel_last_choice, _memset: _memset, _im_search: _im_search, _memcpy: _memcpy, _calloc: _calloc, _im_choose: _im_choose, _im_set_max_lens: _im_set_max_lens, _im_get_predict_at: _im_get_predict_at, _im_get_candidate: _im_get_candidate, _im_enable_shm_as_szm: _im_enable_shm_as_szm, _im_get_sps_str: _im_get_sps_str, _memcmp: _memcmp, _im_get_predicts: _im_get_predicts, _free: _free, _im_open_decoder: _im_open_decoder, _memmove: _memmove, _malloc: _malloc, _im_get_predicts_utf8: _im_get_predicts_utf8, _im_delsearch: _im_delsearch, _strcpy: _strcpy, 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_viiiii: dynCall_viiiii, dynCall_vi: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_iiiiiii: dynCall_iiiiiii, dynCall_iiiii: dynCall_iiiii, dynCall_ii: dynCall_ii, dynCall_iiii: dynCall_iiii, dynCall_viii: dynCall_viii, dynCall_v: dynCall_v, dynCall_viiiiii: dynCall_viiiiii, dynCall_iii: dynCall_iii, dynCall_iiiiii: dynCall_iiiiii, dynCall_viiii: dynCall_viiii };
})
// EMSCRIPTEN_END_ASM
({ "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array }, { "abort": abort, "assert": assert, "asmPrintInt": asmPrintInt, "asmPrintFloat": asmPrintFloat, "min": Math_min, "invoke_viiiii": invoke_viiiii, "invoke_vi": invoke_vi, "invoke_vii": invoke_vii, "invoke_iiiiiii": invoke_iiiiiii, "invoke_iiiii": invoke_iiiii, "invoke_ii": invoke_ii, "invoke_iiii": invoke_iiii, "invoke_viii": invoke_viii, "invoke_v": invoke_v, "invoke_viiiiii": invoke_viiiiii, "invoke_iii": invoke_iii, "invoke_iiiiii": invoke_iiiiii, "invoke_viiii": invoke_viiii, "_strncmp": _strncmp, "_lseek": _lseek, "___cxa_call_unexpected": ___cxa_call_unexpected, "_snprintf": _snprintf, "___cxa_free_exception": ___cxa_free_exception, "___cxa_throw": ___cxa_throw, "_fread": _fread, "_fclose": _fclose, "_strerror": _strerror, "___cxa_pure_virtual": ___cxa_pure_virtual, "_fprintf": _fprintf, "_sqrt": _sqrt, "_llvm_va_end": _llvm_va_end, "_pread": _pread, "_close": _close, "_feof": _feof, "_fopen": _fopen, "_open": _open, "_strchr": _strchr, "_fputc": _fputc, "___buildEnvironment": ___buildEnvironment, "_log": _log, "_puts": _puts, "_abort": _abort, "___setErrNo": ___setErrNo, "_recv": _recv, "_fseek": _fseek, "_qsort": _qsort, "_qsort2": _qsort2, "_send": _send, "_write": _write, "_fputs": _fputs, "_ftell": _ftell, "_llvm_umul_with_overflow_i32": _llvm_umul_with_overflow_i32, "_exit": _exit, "___cxa_find_matching_catch": ___cxa_find_matching_catch, "_strdup": _strdup, "___cxa_allocate_exception": ___cxa_allocate_exception, "_ferror": _ferror, "_printf": _printf, "_sysconf": _sysconf, "_sbrk": _sbrk, "_truncate": _truncate, "_read": _read, "___cxa_is_number_type": ___cxa_is_number_type, "__reallyNegative": __reallyNegative, "_time": _time, "__formatString": __formatString, "___cxa_does_inherit": ___cxa_does_inherit, "_getenv": _getenv, "__ZSt9terminatev": __ZSt9terminatev, "_gettimeofday": _gettimeofday, "_llvm_eh_exception": _llvm_eh_exception, "_vfprintf": _vfprintf, "___cxa_begin_catch": ___cxa_begin_catch, "_unlink": _unlink, "___assert_func": ___assert_func, "__ZSt18uncaught_exceptionv": __ZSt18uncaught_exceptionv, "_pwrite": _pwrite, "_putchar": _putchar, "_fabs": _fabs, "_fsync": _fsync, "_strerror_r": _strerror_r, "___errno_location": ___errno_location, "___gxx_personality_v0": ___gxx_personality_v0, "_isspace": _isspace, "_fdopen": _fdopen, "_bsearch": _bsearch, "_fwrite": _fwrite, "_ftruncate": _ftruncate, "__exit": __exit, "___resumeException": ___resumeException, "_strcmp": _strcmp, "___cxa_end_catch": ___cxa_end_catch, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "cttz_i8": cttz_i8, "ctlz_i8": ctlz_i8, "NaN": NaN, "Infinity": Infinity, "__ZTIy": __ZTIy, "__ZTIx": __ZTIx, "__ZTIt": __ZTIt, "__ZTIs": __ZTIs, "__ZTIm": __ZTIm, "__ZTIl": __ZTIl, "__ZTIi": __ZTIi, "__ZTIh": __ZTIh, "__ZTIj": __ZTIj, "__ZTIe": __ZTIe, "__ZTId": __ZTId, "__ZTVN10__cxxabiv117__class_type_infoE": __ZTVN10__cxxabiv117__class_type_infoE, "__ZTIf": __ZTIf, "__ZTIa": __ZTIa, "__ZTIc": __ZTIc, "__ZTVN10__cxxabiv120__si_class_type_infoE": __ZTVN10__cxxabiv120__si_class_type_infoE, "_stderr": _stderr, "___progname": ___progname, "__ZTVN10__cxxabiv119__pointer_type_infoE": __ZTVN10__cxxabiv119__pointer_type_infoE }, buffer);
var _im_enable_ym_as_szm = Module["_im_enable_ym_as_szm"] = asm["_im_enable_ym_as_szm"];
var _strlen = Module["_strlen"] = asm["_strlen"];
var _im_reset_search = Module["_im_reset_search"] = asm["_im_reset_search"];
var _im_flush_cache = Module["_im_flush_cache"] = asm["_im_flush_cache"];
var _im_get_candidate_char = Module["_im_get_candidate_char"] = asm["_im_get_candidate_char"];
var _realloc = Module["_realloc"] = asm["_realloc"];
var _im_get_spl_start = Module["_im_get_spl_start"] = asm["_im_get_spl_start"];
var _im_close_decoder = Module["_im_close_decoder"] = asm["_im_close_decoder"];
var _toUTF8 = Module["_toUTF8"] = asm["_toUTF8"];
var _im_open_decoder_fd = Module["_im_open_decoder_fd"] = asm["_im_open_decoder_fd"];
var _strncpy = Module["_strncpy"] = asm["_strncpy"];
var _im_get_spl_start_at = Module["_im_get_spl_start_at"] = asm["_im_get_spl_start_at"];
var _im_get_fixed_len = Module["_im_get_fixed_len"] = asm["_im_get_fixed_len"];
var _im_cancel_last_choice = Module["_im_cancel_last_choice"] = asm["_im_cancel_last_choice"];
var _memset = Module["_memset"] = asm["_memset"];
var _im_search = Module["_im_search"] = asm["_im_search"];
var _memcpy = Module["_memcpy"] = asm["_memcpy"];
var _calloc = Module["_calloc"] = asm["_calloc"];
var _im_choose = Module["_im_choose"] = asm["_im_choose"];
var _im_set_max_lens = Module["_im_set_max_lens"] = asm["_im_set_max_lens"];
var _im_get_predict_at = Module["_im_get_predict_at"] = asm["_im_get_predict_at"];
var _im_get_candidate = Module["_im_get_candidate"] = asm["_im_get_candidate"];
var _im_enable_shm_as_szm = Module["_im_enable_shm_as_szm"] = asm["_im_enable_shm_as_szm"];
var _im_get_sps_str = Module["_im_get_sps_str"] = asm["_im_get_sps_str"];
var _memcmp = Module["_memcmp"] = asm["_memcmp"];
var _im_get_predicts = Module["_im_get_predicts"] = asm["_im_get_predicts"];
var _free = Module["_free"] = asm["_free"];
var _im_open_decoder = Module["_im_open_decoder"] = asm["_im_open_decoder"];
var _memmove = Module["_memmove"] = asm["_memmove"];
var _malloc = Module["_malloc"] = asm["_malloc"];
var _im_get_predicts_utf8 = Module["_im_get_predicts_utf8"] = asm["_im_get_predicts_utf8"];
var _im_delsearch = Module["_im_delsearch"] = asm["_im_delsearch"];
var _strcpy = Module["_strcpy"] = asm["_strcpy"];
var runPostSets = Module["runPostSets"] = asm["runPostSets"];
var dynCall_viiiii = Module["dynCall_viiiii"] = asm["dynCall_viiiii"];
var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"];
var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
var dynCall_iiiiiii = Module["dynCall_iiiiiii"] = asm["dynCall_iiiiiii"];
var dynCall_iiiii = Module["dynCall_iiiii"] = asm["dynCall_iiiii"];
var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"];
var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"];
var dynCall_viii = Module["dynCall_viii"] = asm["dynCall_viii"];
var dynCall_v = Module["dynCall_v"] = asm["dynCall_v"];
var dynCall_viiiiii = Module["dynCall_viiiiii"] = asm["dynCall_viiiiii"];
var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"];
var dynCall_iiiiii = Module["dynCall_iiiiii"] = asm["dynCall_iiiiii"];
var dynCall_viiii = Module["dynCall_viiii"] = asm["dynCall_viiii"];
Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) };
Runtime.stackSave = function() { return asm['stackSave']() };
Runtime.stackRestore = function(top) { asm['stackRestore'](top) };
// TODO: strip out parts of this we do not need
//======= begin closure i64 code =======
// Copyright 2009 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @fileoverview Defines a Long class for representing a 64-bit two's-complement
* integer value, which faithfully simulates the behavior of a Java "long". This
* implementation is derived from LongLib in GWT.
*
*/
var i64Math = (function() { // Emscripten wrapper
var goog = { math: {} };
/**
* Constructs a 64-bit two's-complement integer, given its low and high 32-bit
* values as *signed* integers. See the from* functions below for more
* convenient ways of constructing Longs.
*
* The internal representation of a long is the two given signed, 32-bit values.
* We use 32-bit pieces because these are the size of integers on which
* Javascript performs bit-operations. For operations like addition and
* multiplication, we split each number into 16-bit pieces, which can easily be
* multiplied within Javascript's floating-point representation without overflow
* or change in sign.
*
* In the algorithms below, we frequently reduce the negative case to the
* positive case by negating the input(s) and then post-processing the result.
* Note that we must ALWAYS check specially whether those values are MIN_VALUE
* (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as
* a positive number, it overflows back into a negative). Not handling this
* case would often result in infinite recursion.
*
* @param {number} low The low (signed) 32 bits of the long.
* @param {number} high The high (signed) 32 bits of the long.
* @constructor
*/
goog.math.Long = function(low, high) {
/**
* @type {number}
* @private
*/
this.low_ = low | 0; // force into 32 signed bits.
/**
* @type {number}
* @private
*/
this.high_ = high | 0; // force into 32 signed bits.
};
// NOTE: Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the
// from* methods on which they depend.
/**
* A cache of the Long representations of small integer values.
* @type {!Object}
* @private
*/
goog.math.Long.IntCache_ = {};
/**
* Returns a Long representing the given (32-bit) integer value.
* @param {number} value The 32-bit integer in question.
* @return {!goog.math.Long} The corresponding Long value.
*/
goog.math.Long.fromInt = function(value) {
if (-128 <= value && value < 128) {
var cachedObj = goog.math.Long.IntCache_[value];
if (cachedObj) {
return cachedObj;
}
}
var obj = new goog.math.Long(value | 0, value < 0 ? -1 : 0);
if (-128 <= value && value < 128) {
goog.math.Long.IntCache_[value] = obj;
}
return obj;
};
/**
* Returns a Long representing the given value, provided that it is a finite
* number. Otherwise, zero is returned.
* @param {number} value The number in question.
* @return {!goog.math.Long} The corresponding Long value.
*/
goog.math.Long.fromNumber = function(value) {
if (isNaN(value) || !isFinite(value)) {
return goog.math.Long.ZERO;
} else if (value <= -goog.math.Long.TWO_PWR_63_DBL_) {
return goog.math.Long.MIN_VALUE;
} else if (value + 1 >= goog.math.Long.TWO_PWR_63_DBL_) {
return goog.math.Long.MAX_VALUE;
} else if (value < 0) {
return goog.math.Long.fromNumber(-value).negate();
} else {
return new goog.math.Long(
(value % goog.math.Long.TWO_PWR_32_DBL_) | 0,
(value / goog.math.Long.TWO_PWR_32_DBL_) | 0);
}
};
/**
* Returns a Long representing the 64-bit integer that comes by concatenating
* the given high and low bits. Each is assumed to use 32 bits.
* @param {number} lowBits The low 32-bits.
* @param {number} highBits The high 32-bits.
* @return {!goog.math.Long} The corresponding Long value.
*/
goog.math.Long.fromBits = function(lowBits, highBits) {
return new goog.math.Long(lowBits, highBits);
};
/**
* Returns a Long representation of the given string, written using the given
* radix.
* @param {string} str The textual representation of the Long.
* @param {number=} opt_radix The radix in which the text is written.
* @return {!goog.math.Long} The corresponding Long value.
*/
goog.math.Long.fromString = function(str, opt_radix) {
if (str.length == 0) {
throw Error('number format error: empty string');
}
var radix = opt_radix || 10;
if (radix < 2 || 36 < radix) {
throw Error('radix out of range: ' + radix);
}
if (str.charAt(0) == '-') {
return goog.math.Long.fromString(str.substring(1), radix).negate();
} else if (str.indexOf('-') >= 0) {
throw Error('number format error: interior "-" character: ' + str);
}
// Do several (8) digits each time through the loop, so as to
// minimize the calls to the very expensive emulated div.
var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 8));
var result = goog.math.Long.ZERO;
for (var i = 0; i < str.length; i += 8) {
var size = Math.min(8, str.length - i);
var value = parseInt(str.substring(i, i + size), radix);
if (size < 8) {
var power = goog.math.Long.fromNumber(Math.pow(radix, size));
result = result.multiply(power).add(goog.math.Long.fromNumber(value));
} else {
result = result.multiply(radixToPower);
result = result.add(goog.math.Long.fromNumber(value));
}
}
return result;
};
// NOTE: the compiler should inline these constant values below and then remove
// these variables, so there should be no runtime penalty for these.
/**
* Number used repeated below in calculations. This must appear before the
* first call to any from* function below.
* @type {number}
* @private
*/
goog.math.Long.TWO_PWR_16_DBL_ = 1 << 16;
/**
* @type {number}
* @private
*/
goog.math.Long.TWO_PWR_24_DBL_ = 1 << 24;
/**
* @type {number}
* @private
*/
goog.math.Long.TWO_PWR_32_DBL_ =
goog.math.Long.TWO_PWR_16_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
/**
* @type {number}
* @private
*/
goog.math.Long.TWO_PWR_31_DBL_ =
goog.math.Long.TWO_PWR_32_DBL_ / 2;
/**
* @type {number}
* @private
*/
goog.math.Long.TWO_PWR_48_DBL_ =
goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
/**
* @type {number}
* @private
*/
goog.math.Long.TWO_PWR_64_DBL_ =
goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_32_DBL_;
/**
* @type {number}
* @private
*/
goog.math.Long.TWO_PWR_63_DBL_ =
goog.math.Long.TWO_PWR_64_DBL_ / 2;
/** @type {!goog.math.Long} */
goog.math.Long.ZERO = goog.math.Long.fromInt(0);
/** @type {!goog.math.Long} */
goog.math.Long.ONE = goog.math.Long.fromInt(1);
/** @type {!goog.math.Long} */
goog.math.Long.NEG_ONE = goog.math.Long.fromInt(-1);
/** @type {!goog.math.Long} */
goog.math.Long.MAX_VALUE =
goog.math.Long.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0);
/** @type {!goog.math.Long} */
goog.math.Long.MIN_VALUE = goog.math.Long.fromBits(0, 0x80000000 | 0);
/**
* @type {!goog.math.Long}
* @private
*/
goog.math.Long.TWO_PWR_24_ = goog.math.Long.fromInt(1 << 24);
/** @return {number} The value, assuming it is a 32-bit integer. */
goog.math.Long.prototype.toInt = function() {
return this.low_;
};
/** @return {number} The closest floating-point representation to this value. */
goog.math.Long.prototype.toNumber = function() {
return this.high_ * goog.math.Long.TWO_PWR_32_DBL_ +
this.getLowBitsUnsigned();
};
/**
* @param {number=} opt_radix The radix in which the text should be written.
* @return {string} The textual representation of this value.
*/
goog.math.Long.prototype.toString = function(opt_radix) {
var radix = opt_radix || 10;
if (radix < 2 || 36 < radix) {
throw Error('radix out of range: ' + radix);
}
if (this.isZero()) {
return '0';
}
if (this.isNegative()) {
if (this.equals(goog.math.Long.MIN_VALUE)) {
// We need to change the Long value before it can be negated, so we remove
// the bottom-most digit in this base and then recurse to do the rest.
var radixLong = goog.math.Long.fromNumber(radix);
var div = this.div(radixLong);
var rem = div.multiply(radixLong).subtract(this);
return div.toString(radix) + rem.toInt().toString(radix);
} else {
return '-' + this.negate().toString(radix);
}
}
// Do several (6) digits each time through the loop, so as to
// minimize the calls to the very expensive emulated div.
var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 6));
var rem = this;
var result = '';
while (true) {
var remDiv = rem.div(radixToPower);
var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt();
var digits = intval.toString(radix);
rem = remDiv;
if (rem.isZero()) {
return digits + result;
} else {
while (digits.length < 6) {
digits = '0' + digits;
}
result = '' + digits + result;
}
}
};
/** @return {number} The high 32-bits as a signed value. */
goog.math.Long.prototype.getHighBits = function() {
return this.high_;
};
/** @return {number} The low 32-bits as a signed value. */
goog.math.Long.prototype.getLowBits = function() {
return this.low_;
};
/** @return {number} The low 32-bits as an unsigned value. */
goog.math.Long.prototype.getLowBitsUnsigned = function() {
return (this.low_ >= 0) ?
this.low_ : goog.math.Long.TWO_PWR_32_DBL_ + this.low_;
};
/**
* @return {number} Returns the number of bits needed to represent the absolute
* value of this Long.
*/
goog.math.Long.prototype.getNumBitsAbs = function() {
if (this.isNegative()) {
if (this.equals(goog.math.Long.MIN_VALUE)) {
return 64;
} else {
return this.negate().getNumBitsAbs();
}
} else {
var val = this.high_ != 0 ? this.high_ : this.low_;
for (var bit = 31; bit > 0; bit--) {
if ((val & (1 << bit)) != 0) {
break;
}
}
return this.high_ != 0 ? bit + 33 : bit + 1;
}
};
/** @return {boolean} Whether this value is zero. */
goog.math.Long.prototype.isZero = function() {
return this.high_ == 0 && this.low_ == 0;
};
/** @return {boolean} Whether this value is negative. */
goog.math.Long.prototype.isNegative = function() {
return this.high_ < 0;
};
/** @return {boolean} Whether this value is odd. */
goog.math.Long.prototype.isOdd = function() {
return (this.low_ & 1) == 1;
};
/**
* @param {goog.math.Long} other Long to compare against.
* @return {boolean} Whether this Long equals the other.
*/
goog.math.Long.prototype.equals = function(other) {
return (this.high_ == other.high_) && (this.low_ == other.low_);
};
/**
* @param {goog.math.Long} other Long to compare against.
* @return {boolean} Whether this Long does not equal the other.
*/
goog.math.Long.prototype.notEquals = function(other) {
return (this.high_ != other.high_) || (this.low_ != other.low_);
};
/**
* @param {goog.math.Long} other Long to compare against.
* @return {boolean} Whether this Long is less than the other.
*/
goog.math.Long.prototype.lessThan = function(other) {
return this.compare(other) < 0;
};
/**
* @param {goog.math.Long} other Long to compare against.
* @return {boolean} Whether this Long is less than or equal to the other.
*/
goog.math.Long.prototype.lessThanOrEqual = function(other) {
return this.compare(other) <= 0;
};
/**
* @param {goog.math.Long} other Long to compare against.
* @return {boolean} Whether this Long is greater than the other.
*/
goog.math.Long.prototype.greaterThan = function(other) {
return this.compare(other) > 0;
};
/**
* @param {goog.math.Long} other Long to compare against.
* @return {boolean} Whether this Long is greater than or equal to the other.
*/
goog.math.Long.prototype.greaterThanOrEqual = function(other) {
return this.compare(other) >= 0;
};
/**
* Compares this Long with the given one.
* @param {goog.math.Long} other Long to compare against.
* @return {number} 0 if they are the same, 1 if the this is greater, and -1
* if the given one is greater.
*/
goog.math.Long.prototype.compare = function(other) {
if (this.equals(other)) {
return 0;
}
var thisNeg = this.isNegative();
var otherNeg = other.isNegative();
if (thisNeg && !otherNeg) {
return -1;
}
if (!thisNeg && otherNeg) {
return 1;
}
// at this point, the signs are the same, so subtraction will not overflow
if (this.subtract(other).isNegative()) {
return -1;
} else {
return 1;
}
};
/** @return {!goog.math.Long} The negation of this value. */
goog.math.Long.prototype.negate = function() {
if (this.equals(goog.math.Long.MIN_VALUE)) {
return goog.math.Long.MIN_VALUE;
} else {
return this.not().add(goog.math.Long.ONE);
}
};
/**
* Returns the sum of this and the given Long.
* @param {goog.math.Long} other Long to add to this one.
* @return {!goog.math.Long} The sum of this and the given Long.
*/
goog.math.Long.prototype.add = function(other) {
// Divide each number into 4 chunks of 16 bits, and then sum the chunks.
var a48 = this.high_ >>> 16;
var a32 = this.high_ & 0xFFFF;
var a16 = this.low_ >>> 16;
var a00 = this.low_ & 0xFFFF;
var b48 = other.high_ >>> 16;
var b32 = other.high_ & 0xFFFF;
var b16 = other.low_ >>> 16;
var b00 = other.low_ & 0xFFFF;
var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
c00 += a00 + b00;
c16 += c00 >>> 16;
c00 &= 0xFFFF;
c16 += a16 + b16;
c32 += c16 >>> 16;
c16 &= 0xFFFF;
c32 += a32 + b32;
c48 += c32 >>> 16;
c32 &= 0xFFFF;
c48 += a48 + b48;
c48 &= 0xFFFF;
return goog.math.Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);
};
/**
* Returns the difference of this and the given Long.
* @param {goog.math.Long} other Long to subtract from this.
* @return {!goog.math.Long} The difference of this and the given Long.
*/
goog.math.Long.prototype.subtract = function(other) {
return this.add(other.negate());
};
/**
* Returns the product of this and the given long.
* @param {goog.math.Long} other Long to multiply with this.
* @return {!goog.math.Long} The product of this and the other.
*/
goog.math.Long.prototype.multiply = function(other) {
if (this.isZero()) {
return goog.math.Long.ZERO;
} else if (other.isZero()) {
return goog.math.Long.ZERO;
}
if (this.equals(goog.math.Long.MIN_VALUE)) {
return other.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO;
} else if (other.equals(goog.math.Long.MIN_VALUE)) {
return this.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO;
}
if (this.isNegative()) {
if (other.isNegative()) {
return this.negate().multiply(other.negate());
} else {
return this.negate().multiply(other).negate();
}
} else if (other.isNegative()) {
return this.multiply(other.negate()).negate();
}
// If both longs are small, use float multiplication
if (this.lessThan(goog.math.Long.TWO_PWR_24_) &&
other.lessThan(goog.math.Long.TWO_PWR_24_)) {
return goog.math.Long.fromNumber(this.toNumber() * other.toNumber());
}
// Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.
// We can skip products that would overflow.
var a48 = this.high_ >>> 16;
var a32 = this.high_ & 0xFFFF;
var a16 = this.low_ >>> 16;
var a00 = this.low_ & 0xFFFF;
var b48 = other.high_ >>> 16;
var b32 = other.high_ & 0xFFFF;
var b16 = other.low_ >>> 16;
var b00 = other.low_ & 0xFFFF;
var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
c00 += a00 * b00;
c16 += c00 >>> 16;
c00 &= 0xFFFF;
c16 += a16 * b00;
c32 += c16 >>> 16;
c16 &= 0xFFFF;
c16 += a00 * b16;
c32 += c16 >>> 16;
c16 &= 0xFFFF;
c32 += a32 * b00;
c48 += c32 >>> 16;
c32 &= 0xFFFF;
c32 += a16 * b16;
c48 += c32 >>> 16;
c32 &= 0xFFFF;
c32 += a00 * b32;
c48 += c32 >>> 16;
c32 &= 0xFFFF;
c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
c48 &= 0xFFFF;
return goog.math.Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);
};
/**
* Returns this Long divided by the given one.
* @param {goog.math.Long} other Long by which to divide.
* @return {!goog.math.Long} This Long divided by the given one.
*/
goog.math.Long.prototype.div = function(other) {
if (other.isZero()) {
throw Error('division by zero');
} else if (this.isZero()) {
return goog.math.Long.ZERO;
}
if (this.equals(goog.math.Long.MIN_VALUE)) {
if (other.equals(goog.math.Long.ONE) ||
other.equals(goog.math.Long.NEG_ONE)) {
return goog.math.Long.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
} else if (other.equals(goog.math.Long.MIN_VALUE)) {
return goog.math.Long.ONE;
} else {
// At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.
var halfThis = this.shiftRight(1);
var approx = halfThis.div(other).shiftLeft(1);
if (approx.equals(goog.math.Long.ZERO)) {
return other.isNegative() ? goog.math.Long.ONE : goog.math.Long.NEG_ONE;
} else {
var rem = this.subtract(other.multiply(approx));
var result = approx.add(rem.div(other));
return result;
}
}
} else if (other.equals(goog.math.Long.MIN_VALUE)) {
return goog.math.Long.ZERO;
}
if (this.isNegative()) {
if (other.isNegative()) {
return this.negate().div(other.negate());
} else {
return this.negate().div(other).negate();
}
} else if (other.isNegative()) {
return this.div(other.negate()).negate();
}
// Repeat the following until the remainder is less than other: find a
// floating-point that approximates remainder / other *from below*, add this
// into the result, and subtract it from the remainder. It is critical that
// the approximate value is less than or equal to the real value so that the
// remainder never becomes negative.
var res = goog.math.Long.ZERO;
var rem = this;
while (rem.greaterThanOrEqual(other)) {
// Approximate the result of division. This may be a little greater or
// smaller than the actual value.
var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber()));
// We will tweak the approximate result by changing it in the 48-th digit or
// the smallest non-fractional digit, whichever is larger.
var log2 = Math.ceil(Math.log(approx) / Math.LN2);
var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48);
// Decrease the approximation until it is smaller than the remainder. Note
// that if it is too large, the product overflows and is negative.
var approxRes = goog.math.Long.fromNumber(approx);
var approxRem = approxRes.multiply(other);
while (approxRem.isNegative() || approxRem.greaterThan(rem)) {
approx -= delta;
approxRes = goog.math.Long.fromNumber(approx);
approxRem = approxRes.multiply(other);
}
// We know the answer can't be zero... and actually, zero would cause
// infinite recursion since we would make no progress.
if (approxRes.isZero()) {
approxRes = goog.math.Long.ONE;
}
res = res.add(approxRes);
rem = rem.subtract(approxRem);
}
return res;
};
/**
* Returns this Long modulo the given one.
* @param {goog.math.Long} other Long by which to mod.
* @return {!goog.math.Long} This Long modulo the given one.
*/
goog.math.Long.prototype.modulo = function(other) {
return this.subtract(this.div(other).multiply(other));
};
/** @return {!goog.math.Long} The bitwise-NOT of this value. */
goog.math.Long.prototype.not = function() {
return goog.math.Long.fromBits(~this.low_, ~this.high_);
};
/**
* Returns the bitwise-AND of this Long and the given one.
* @param {goog.math.Long} other The Long with which to AND.
* @return {!goog.math.Long} The bitwise-AND of this and the other.
*/
goog.math.Long.prototype.and = function(other) {
return goog.math.Long.fromBits(this.low_ & other.low_,
this.high_ & other.high_);
};
/**
* Returns the bitwise-OR of this Long and the given one.
* @param {goog.math.Long} other The Long with which to OR.
* @return {!goog.math.Long} The bitwise-OR of this and the other.
*/
goog.math.Long.prototype.or = function(other) {
return goog.math.Long.fromBits(this.low_ | other.low_,
this.high_ | other.high_);
};
/**
* Returns the bitwise-XOR of this Long and the given one.
* @param {goog.math.Long} other The Long with which to XOR.
* @return {!goog.math.Long} The bitwise-XOR of this and the other.
*/
goog.math.Long.prototype.xor = function(other) {
return goog.math.Long.fromBits(this.low_ ^ other.low_,
this.high_ ^ other.high_);
};
/**
* Returns this Long with bits shifted to the left by the given amount.
* @param {number} numBits The number of bits by which to shift.
* @return {!goog.math.Long} This shifted to the left by the given amount.
*/
goog.math.Long.prototype.shiftLeft = function(numBits) {
numBits &= 63;
if (numBits == 0) {
return this;
} else {
var low = this.low_;
if (numBits < 32) {
var high = this.high_;
return goog.math.Long.fromBits(
low << numBits,
(high << numBits) | (low >>> (32 - numBits)));
} else {
return goog.math.Long.fromBits(0, low << (numBits - 32));
}
}
};
/**
* Returns this Long with bits shifted to the right by the given amount.
* @param {number} numBits The number of bits by which to shift.
* @return {!goog.math.Long} This shifted to the right by the given amount.
*/
goog.math.Long.prototype.shiftRight = function(numBits) {
numBits &= 63;
if (numBits == 0) {
return this;
} else {
var high = this.high_;
if (numBits < 32) {
var low = this.low_;
return goog.math.Long.fromBits(
(low >>> numBits) | (high << (32 - numBits)),
high >> numBits);
} else {
return goog.math.Long.fromBits(
high >> (numBits - 32),
high >= 0 ? 0 : -1);
}
}
};
/**
* Returns this Long with bits shifted to the right by the given amount, with
* the new top bits matching the current sign bit.
* @param {number} numBits The number of bits by which to shift.
* @return {!goog.math.Long} This shifted to the right by the given amount, with
* zeros placed into the new leading bits.
*/
goog.math.Long.prototype.shiftRightUnsigned = function(numBits) {
numBits &= 63;
if (numBits == 0) {
return this;
} else {
var high = this.high_;
if (numBits < 32) {
var low = this.low_;
return goog.math.Long.fromBits(
(low >>> numBits) | (high << (32 - numBits)),
high >>> numBits);
} else if (numBits == 32) {
return goog.math.Long.fromBits(high, 0);
} else {
return goog.math.Long.fromBits(high >>> (numBits - 32), 0);
}
}
};
//======= begin jsbn =======
var navigator = { appName: 'Modern Browser' }; // polyfill a little
// Copyright (c) 2005 Tom Wu
// All Rights Reserved.
// http://www-cs-students.stanford.edu/~tjw/jsbn/
/*
* Copyright (c) 2003-2005 Tom Wu
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
*
* IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
* INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
* THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* In addition, the following condition applies:
*
* All redistributions must retain an intact copy of this copyright notice
* and disclaimer.
*/
// Basic JavaScript BN library - subset useful for RSA encryption.
// Bits per digit
var dbits;
// JavaScript engine analysis
var canary = 0xdeadbeefcafe;
var j_lm = ((canary&0xffffff)==0xefcafe);
// (public) Constructor
function BigInteger(a,b,c) {
if(a != null)
if("number" == typeof a) this.fromNumber(a,b,c);
else if(b == null && "string" != typeof a) this.fromString(a,256);
else this.fromString(a,b);
}
// return new, unset BigInteger
function nbi() { return new BigInteger(null); }
// am: Compute w_j += (x*this_i), propagate carries,
// c is initial carry, returns final carry.
// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
// We need to select the fastest one that works in this environment.
// am1: use a single mult and divide to get the high bits,
// max digit bits should be 26 because
// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
function am1(i,x,w,j,c,n) {
while(--n >= 0) {
var v = x*this[i++]+w[j]+c;
c = Math.floor(v/0x4000000);
w[j++] = v&0x3ffffff;
}
return c;
}
// am2 avoids a big mult-and-extract completely.
// Max digit bits should be <= 30 because we do bitwise ops
// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
function am2(i,x,w,j,c,n) {
var xl = x&0x7fff, xh = x>>15;
while(--n >= 0) {
var l = this[i]&0x7fff;
var h = this[i++]>>15;
var m = xh*l+h*xl;
l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);
c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
w[j++] = l&0x3fffffff;
}
return c;
}
// Alternately, set max digit bits to 28 since some
// browsers slow down when dealing with 32-bit numbers.
function am3(i,x,w,j,c,n) {
var xl = x&0x3fff, xh = x>>14;
while(--n >= 0) {
var l = this[i]&0x3fff;
var h = this[i++]>>14;
var m = xh*l+h*xl;
l = xl*l+((m&0x3fff)<<14)+w[j]+c;
c = (l>>28)+(m>>14)+xh*h;
w[j++] = l&0xfffffff;
}
return c;
}
if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
BigInteger.prototype.am = am2;
dbits = 30;
}
else if(j_lm && (navigator.appName != "Netscape")) {
BigInteger.prototype.am = am1;
dbits = 26;
}
else { // Mozilla/Netscape seems to prefer am3
BigInteger.prototype.am = am3;
dbits = 28;
}
BigInteger.prototype.DB = dbits;
BigInteger.prototype.DM = ((1<<dbits)-1);
BigInteger.prototype.DV = (1<<dbits);
var BI_FP = 52;
BigInteger.prototype.FV = Math.pow(2,BI_FP);
BigInteger.prototype.F1 = BI_FP-dbits;
BigInteger.prototype.F2 = 2*dbits-BI_FP;
// Digit conversions
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
var BI_RC = new Array();
var rr,vv;
rr = "0".charCodeAt(0);
for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
rr = "a".charCodeAt(0);
for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
rr = "A".charCodeAt(0);
for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
function int2char(n) { return BI_RM.charAt(n); }
function intAt(s,i) {
var c = BI_RC[s.charCodeAt(i)];
return (c==null)?-1:c;
}
// (protected) copy this to r
function bnpCopyTo(r) {
for(var i = this.t-1; i >= 0; --i) r[i] = this[i];
r.t = this.t;
r.s = this.s;
}
// (protected) set from integer value x, -DV <= x < DV
function bnpFromInt(x) {
this.t = 1;
this.s = (x<0)?-1:0;
if(x > 0) this[0] = x;
else if(x < -1) this[0] = x+DV;
else this.t = 0;
}
// return bigint initialized to value
function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
// (protected) set from string and radix
function bnpFromString(s,b) {
var k;
if(b == 16) k = 4;
else if(b == 8) k = 3;
else if(b == 256) k = 8; // byte array
else if(b == 2) k = 1;
else if(b == 32) k = 5;
else if(b == 4) k = 2;
else { this.fromRadix(s,b); return; }
this.t = 0;
this.s = 0;
var i = s.length, mi = false, sh = 0;
while(--i >= 0) {
var x = (k==8)?s[i]&0xff:intAt(s,i);
if(x < 0) {
if(s.charAt(i) == "-") mi = true;
continue;
}
mi = false;
if(sh == 0)
this[this.t++] = x;
else if(sh+k > this.DB) {
this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh;
this[this.t++] = (x>>(this.DB-sh));
}
else
this[this.t-1] |= x<<sh;
sh += k;
if(sh >= this.DB) sh -= this.DB;
}
if(k == 8 && (s[0]&0x80) != 0) {
this.s = -1;
if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh;
}
this.clamp();
if(mi) BigInteger.ZERO.subTo(this,this);
}
// (protected) clamp off excess high words
function bnpClamp() {
var c = this.s&this.DM;
while(this.t > 0 && this[this.t-1] == c) --this.t;
}
// (public) return string representation in given radix
function bnToString(b) {
if(this.s < 0) return "-"+this.negate().toString(b);
var k;
if(b == 16) k = 4;
else if(b == 8) k = 3;
else if(b == 2) k = 1;
else if(b == 32) k = 5;
else if(b == 4) k = 2;
else return this.toRadix(b);
var km = (1<<k)-1, d, m = false, r = "", i = this.t;
var p = this.DB-(i*this.DB)%k;
if(i-- > 0) {
if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }
while(i >= 0) {
if(p < k) {
d = (this[i]&((1<<p)-1))<<(k-p);
d |= this[--i]>>(p+=this.DB-k);
}
else {
d = (this[i]>>(p-=k))&km;
if(p <= 0) { p += this.DB; --i; }
}
if(d > 0) m = true;
if(m) r += int2char(d);
}
}
return m?r:"0";
}
// (public) -this
function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
// (public) |this|
function bnAbs() { return (this.s<0)?this.negate():this; }
// (public) return + if this > a, - if this < a, 0 if equal
function bnCompareTo(a) {
var r = this.s-a.s;
if(r != 0) return r;
var i = this.t;
r = i-a.t;
if(r != 0) return (this.s<0)?-r:r;
while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;
return 0;
}
// returns bit length of the integer x
function nbits(x) {
var r = 1, t;
if((t=x>>>16) != 0) { x = t; r += 16; }
if((t=x>>8) != 0) { x = t; r += 8; }
if((t=x>>4) != 0) { x = t; r += 4; }
if((t=x>>2) != 0) { x = t; r += 2; }
if((t=x>>1) != 0) { x = t; r += 1; }
return r;
}
// (public) return the number of bits in "this"
function bnBitLength() {
if(this.t <= 0) return 0;
return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));
}
// (protected) r = this << n*DB
function bnpDLShiftTo(n,r) {
var i;
for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];
for(i = n-1; i >= 0; --i) r[i] = 0;
r.t = this.t+n;
r.s = this.s;
}
// (protected) r = this >> n*DB
function bnpDRShiftTo(n,r) {
for(var i = n; i < this.t; ++i) r[i-n] = this[i];
r.t = Math.max(this.t-n,0);
r.s = this.s;
}
// (protected) r = this << n
function bnpLShiftTo(n,r) {
var bs = n%this.DB;
var cbs = this.DB-bs;
var bm = (1<<cbs)-1;
var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;
for(i = this.t-1; i >= 0; --i) {
r[i+ds+1] = (this[i]>>cbs)|c;
c = (this[i]&bm)<<bs;
}
for(i = ds-1; i >= 0; --i) r[i] = 0;
r[ds] = c;
r.t = this.t+ds+1;
r.s = this.s;
r.clamp();
}
// (protected) r = this >> n
function bnpRShiftTo(n,r) {
r.s = this.s;
var ds = Math.floor(n/this.DB);
if(ds >= this.t) { r.t = 0; return; }
var bs = n%this.DB;
var cbs = this.DB-bs;
var bm = (1<<bs)-1;
r[0] = this[ds]>>bs;
for(var i = ds+1; i < this.t; ++i) {
r[i-ds-1] |= (this[i]&bm)<<cbs;
r[i-ds] = this[i]>>bs;
}
if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<<cbs;
r.t = this.t-ds;
r.clamp();
}
// (protected) r = this - a
function bnpSubTo(a,r) {
var i = 0, c = 0, m = Math.min(a.t,this.t);
while(i < m) {
c += this[i]-a[i];
r[i++] = c&this.DM;
c >>= this.DB;
}
if(a.t < this.t) {
c -= a.s;
while(i < this.t) {
c += this[i];
r[i++] = c&this.DM;
c >>= this.DB;
}
c += this.s;
}
else {
c += this.s;
while(i < a.t) {
c -= a[i];
r[i++] = c&this.DM;
c >>= this.DB;
}
c -= a.s;
}
r.s = (c<0)?-1:0;
if(c < -1) r[i++] = this.DV+c;
else if(c > 0) r[i++] = c;
r.t = i;
r.clamp();
}
// (protected) r = this * a, r != this,a (HAC 14.12)
// "this" should be the larger one if appropriate.
function bnpMultiplyTo(a,r) {
var x = this.abs(), y = a.abs();
var i = x.t;
r.t = i+y.t;
while(--i >= 0) r[i] = 0;
for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);
r.s = 0;
r.clamp();
if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
}
// (protected) r = this^2, r != this (HAC 14.16)
function bnpSquareTo(r) {
var x = this.abs();
var i = r.t = 2*x.t;
while(--i >= 0) r[i] = 0;
for(i = 0; i < x.t-1; ++i) {
var c = x.am(i,x[i],r,2*i,0,1);
if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {
r[i+x.t] -= x.DV;
r[i+x.t+1] = 1;
}
}
if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);
r.s = 0;
r.clamp();
}
// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
// r != q, this != m. q or r may be null.
function bnpDivRemTo(m,q,r) {
var pm = m.abs();
if(pm.t <= 0) return;
var pt = this.abs();
if(pt.t < pm.t) {
if(q != null) q.fromInt(0);
if(r != null) this.copyTo(r);
return;
}
if(r == null) r = nbi();
var y = nbi(), ts = this.s, ms = m.s;
var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus
if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
else { pm.copyTo(y); pt.copyTo(r); }
var ys = y.t;
var y0 = y[ys-1];
if(y0 == 0) return;
var yt = y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0);
var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;
var i = r.t, j = i-ys, t = (q==null)?nbi():q;
y.dlShiftTo(j,t);
if(r.compareTo(t) >= 0) {
r[r.t++] = 1;
r.subTo(t,r);
}
BigInteger.ONE.dlShiftTo(ys,t);
t.subTo(y,y); // "negative" y so we can replace sub with am later
while(y.t < ys) y[y.t++] = 0;
while(--j >= 0) {
// Estimate quotient digit
var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);
if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
y.dlShiftTo(j,t);
r.subTo(t,r);
while(r[i] < --qd) r.subTo(t,r);
}
}
if(q != null) {
r.drShiftTo(ys,q);
if(ts != ms) BigInteger.ZERO.subTo(q,q);
}
r.t = ys;
r.clamp();
if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
if(ts < 0) BigInteger.ZERO.subTo(r,r);
}
// (public) this mod a
function bnMod(a) {
var r = nbi();
this.abs().divRemTo(a,null,r);
if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
return r;
}
// Modular reduction using "classic" algorithm
function Classic(m) { this.m = m; }
function cConvert(x) {
if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
else return x;
}
function cRevert(x) { return x; }
function cReduce(x) { x.divRemTo(this.m,null,x); }
function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
Classic.prototype.convert = cConvert;
Classic.prototype.revert = cRevert;
Classic.prototype.reduce = cReduce;
Classic.prototype.mulTo = cMulTo;
Classic.prototype.sqrTo = cSqrTo;
// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
// justification:
// xy == 1 (mod m)
// xy = 1+km
// xy(2-xy) = (1+km)(1-km)
// x[y(2-xy)] = 1-k^2m^2
// x[y(2-xy)] == 1 (mod m^2)
// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
// JS multiply "overflows" differently from C/C++, so care is needed here.
function bnpInvDigit() {
if(this.t < 1) return 0;
var x = this[0];
if((x&1) == 0) return 0;
var y = x&3; // y == 1/x mod 2^2
y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
// last step - calculate inverse mod DV directly;
// assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits
// we really want the negative inverse, and -DV < y < DV
return (y>0)?this.DV-y:-y;
}
// Montgomery reduction
function Montgomery(m) {
this.m = m;
this.mp = m.invDigit();
this.mpl = this.mp&0x7fff;
this.mph = this.mp>>15;
this.um = (1<<(m.DB-15))-1;
this.mt2 = 2*m.t;
}
// xR mod m
function montConvert(x) {
var r = nbi();
x.abs().dlShiftTo(this.m.t,r);
r.divRemTo(this.m,null,r);
if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
return r;
}
// x/R mod m
function montRevert(x) {
var r = nbi();
x.copyTo(r);
this.reduce(r);
return r;
}
// x = x/R mod m (HAC 14.32)
function montReduce(x) {
while(x.t <= this.mt2) // pad x so am has enough room later
x[x.t++] = 0;
for(var i = 0; i < this.m.t; ++i) {
// faster way of calculating u0 = x[i]*mp mod DV
var j = x[i]&0x7fff;
var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;
// use am to combine the multiply-shift-add into one call
j = i+this.m.t;
x[j] += this.m.am(0,u0,x,i,0,this.m.t);
// propagate carry
while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }
}
x.clamp();
x.drShiftTo(this.m.t,x);
if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
}
// r = "x^2/R mod m"; x != r
function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
// r = "xy/R mod m"; x,y != r
function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
Montgomery.prototype.convert = montConvert;
Montgomery.prototype.revert = montRevert;
Montgomery.prototype.reduce = montReduce;
Montgomery.prototype.mulTo = montMulTo;
Montgomery.prototype.sqrTo = montSqrTo;
// (protected) true iff this is even
function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }
// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
function bnpExp(e,z) {
if(e > 0xffffffff || e < 1) return BigInteger.ONE;
var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
g.copyTo(r);
while(--i >= 0) {
z.sqrTo(r,r2);
if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
else { var t = r; r = r2; r2 = t; }
}
return z.revert(r);
}
// (public) this^e % m, 0 <= e < 2^32
function bnModPowInt(e,m) {
var z;
if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
return this.exp(e,z);
}
// protected
BigInteger.prototype.copyTo = bnpCopyTo;
BigInteger.prototype.fromInt = bnpFromInt;
BigInteger.prototype.fromString = bnpFromString;
BigInteger.prototype.clamp = bnpClamp;
BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
BigInteger.prototype.drShiftTo = bnpDRShiftTo;
BigInteger.prototype.lShiftTo = bnpLShiftTo;
BigInteger.prototype.rShiftTo = bnpRShiftTo;
BigInteger.prototype.subTo = bnpSubTo;
BigInteger.prototype.multiplyTo = bnpMultiplyTo;
BigInteger.prototype.squareTo = bnpSquareTo;
BigInteger.prototype.divRemTo = bnpDivRemTo;
BigInteger.prototype.invDigit = bnpInvDigit;
BigInteger.prototype.isEven = bnpIsEven;
BigInteger.prototype.exp = bnpExp;
// public
BigInteger.prototype.toString = bnToString;
BigInteger.prototype.negate = bnNegate;
BigInteger.prototype.abs = bnAbs;
BigInteger.prototype.compareTo = bnCompareTo;
BigInteger.prototype.bitLength = bnBitLength;
BigInteger.prototype.mod = bnMod;
BigInteger.prototype.modPowInt = bnModPowInt;
// "constants"
BigInteger.ZERO = nbv(0);
BigInteger.ONE = nbv(1);
// jsbn2 stuff
// (protected) convert from radix string
function bnpFromRadix(s,b) {
this.fromInt(0);
if(b == null) b = 10;
var cs = this.chunkSize(b);
var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
for(var i = 0; i < s.length; ++i) {
var x = intAt(s,i);
if(x < 0) {
if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
continue;
}
w = b*w+x;
if(++j >= cs) {
this.dMultiply(d);
this.dAddOffset(w,0);
j = 0;
w = 0;
}
}
if(j > 0) {
this.dMultiply(Math.pow(b,j));
this.dAddOffset(w,0);
}
if(mi) BigInteger.ZERO.subTo(this,this);
}
// (protected) return x s.t. r^x < DV
function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }
// (public) 0 if this == 0, 1 if this > 0
function bnSigNum() {
if(this.s < 0) return -1;
else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;
else return 1;
}
// (protected) this *= n, this >= 0, 1 < n < DV
function bnpDMultiply(n) {
this[this.t] = this.am(0,n-1,this,0,0,this.t);
++this.t;
this.clamp();
}
// (protected) this += n << w words, this >= 0
function bnpDAddOffset(n,w) {
if(n == 0) return;
while(this.t <= w) this[this.t++] = 0;
this[w] += n;
while(this[w] >= this.DV) {
this[w] -= this.DV;
if(++w >= this.t) this[this.t++] = 0;
++this[w];
}
}
// (protected) convert to radix string
function bnpToRadix(b) {
if(b == null) b = 10;
if(this.signum() == 0 || b < 2 || b > 36) return "0";
var cs = this.chunkSize(b);
var a = Math.pow(b,cs);
var d = nbv(a), y = nbi(), z = nbi(), r = "";
this.divRemTo(d,y,z);
while(y.signum() > 0) {
r = (a+z.intValue()).toString(b).substr(1) + r;
y.divRemTo(d,y,z);
}
return z.intValue().toString(b) + r;
}
// (public) return value as integer
function bnIntValue() {
if(this.s < 0) {
if(this.t == 1) return this[0]-this.DV;
else if(this.t == 0) return -1;
}
else if(this.t == 1) return this[0];
else if(this.t == 0) return 0;
// assumes 16 < DB < 32
return ((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0];
}
// (protected) r = this + a
function bnpAddTo(a,r) {
var i = 0, c = 0, m = Math.min(a.t,this.t);
while(i < m) {
c += this[i]+a[i];
r[i++] = c&this.DM;
c >>= this.DB;
}
if(a.t < this.t) {
c += a.s;
while(i < this.t) {
c += this[i];
r[i++] = c&this.DM;
c >>= this.DB;
}
c += this.s;
}
else {
c += this.s;
while(i < a.t) {
c += a[i];
r[i++] = c&this.DM;
c >>= this.DB;
}
c += a.s;
}
r.s = (c<0)?-1:0;
if(c > 0) r[i++] = c;
else if(c < -1) r[i++] = this.DV+c;
r.t = i;
r.clamp();
}
BigInteger.prototype.fromRadix = bnpFromRadix;
BigInteger.prototype.chunkSize = bnpChunkSize;
BigInteger.prototype.signum = bnSigNum;
BigInteger.prototype.dMultiply = bnpDMultiply;
BigInteger.prototype.dAddOffset = bnpDAddOffset;
BigInteger.prototype.toRadix = bnpToRadix;
BigInteger.prototype.intValue = bnIntValue;
BigInteger.prototype.addTo = bnpAddTo;
//======= end jsbn =======
// Emscripten wrapper
var Wrapper = {
abs: function(l, h) {
var x = new goog.math.Long(l, h);
var ret;
if (x.isNegative()) {
ret = x.negate();
} else {
ret = x;
}
HEAP32[tempDoublePtr>>2] = ret.low_;
HEAP32[tempDoublePtr+4>>2] = ret.high_;
},
ensureTemps: function() {
if (Wrapper.ensuredTemps) return;
Wrapper.ensuredTemps = true;
Wrapper.two32 = new BigInteger();
Wrapper.two32.fromString('4294967296', 10);
Wrapper.two64 = new BigInteger();
Wrapper.two64.fromString('18446744073709551616', 10);
Wrapper.temp1 = new BigInteger();
Wrapper.temp2 = new BigInteger();
},
lh2bignum: function(l, h) {
var a = new BigInteger();
a.fromString(h.toString(), 10);
var b = new BigInteger();
a.multiplyTo(Wrapper.two32, b);
var c = new BigInteger();
c.fromString(l.toString(), 10);
var d = new BigInteger();
c.addTo(b, d);
return d;
},
stringify: function(l, h, unsigned) {
var ret = new goog.math.Long(l, h).toString();
if (unsigned && ret[0] == '-') {
// unsign slowly using jsbn bignums
Wrapper.ensureTemps();
var bignum = new BigInteger();
bignum.fromString(ret, 10);
ret = new BigInteger();
Wrapper.two64.addTo(bignum, ret);
ret = ret.toString(10);
}
return ret;
},
fromString: function(str, base, min, max, unsigned) {
Wrapper.ensureTemps();
var bignum = new BigInteger();
bignum.fromString(str, base);
var bigmin = new BigInteger();
bigmin.fromString(min, 10);
var bigmax = new BigInteger();
bigmax.fromString(max, 10);
if (unsigned && bignum.compareTo(BigInteger.ZERO) < 0) {
var temp = new BigInteger();
bignum.addTo(Wrapper.two64, temp);
bignum = temp;
}
var error = false;
if (bignum.compareTo(bigmin) < 0) {
bignum = bigmin;
error = true;
} else if (bignum.compareTo(bigmax) > 0) {
bignum = bigmax;
error = true;
}
var ret = goog.math.Long.fromString(bignum.toString()); // min-max checks should have clamped this to a range goog.math.Long can handle well
HEAP32[tempDoublePtr>>2] = ret.low_;
HEAP32[tempDoublePtr+4>>2] = ret.high_;
if (error) throw 'range error';
}
};
return Wrapper;
})();
//======= end closure i64 code =======
// === Auto-generated postamble setup entry stuff ===
var initialStackTop;
var inMain;
Module['callMain'] = Module.callMain = function callMain(args) {
assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called');
args = args || [];
ensureInitRuntime();
var argc = args.length+1;
function pad() {
for (var i = 0; i < 4-1; i++) {
argv.push(0);
}
}
var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL) ];
pad();
for (var i = 0; i < argc-1; i = i + 1) {
argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
pad();
}
argv.push(0);
argv = allocate(argv, 'i32', ALLOC_NORMAL);
initialStackTop = STACKTOP;
inMain = true;
var ret;
try {
ret = Module['_main'](argc, argv, 0);
}
catch(e) {
if (e && typeof e == 'object' && e.type == 'ExitStatus') {
// exit() throws this once it's done to make sure execution
// has been stopped completely
Module.print('Exit Status: ' + e.value);
return e.value;
} else if (e == 'SimulateInfiniteLoop') {
// running an evented main loop, don't immediately exit
Module['noExitRuntime'] = true;
} else {
throw e;
}
} finally {
inMain = false;
}
// if we're not running an evented main loop, it's time to exit
if (!Module['noExitRuntime']) {
exit(ret);
}
}
function run(args) {
args = args || Module['arguments'];
if (runDependencies > 0) {
Module.printErr('run() called, but dependencies remain, so not running');
return;
}
preRun();
if (runDependencies > 0) {
// a preRun added a dependency, run will be called later
return;
}
function doRun() {
ensureInitRuntime();
preMain();
calledRun = true;
if (Module['_main'] && shouldRunNow) {
Module['callMain'](args);
}
postRun();
}
if (Module['setStatus']) {
Module['setStatus']('Running...');
setTimeout(function() {
setTimeout(function() {
Module['setStatus']('');
}, 1);
if (!ABORT) doRun();
}, 1);
} else {
doRun();
}
}
Module['run'] = Module.run = run;
function exit(status) {
ABORT = true;
STACKTOP = initialStackTop;
// TODO call externally added 'exit' callbacks with the status code.
// It'd be nice to provide the same interface for all Module events (e.g.
// prerun, premain, postmain). Perhaps an EventEmitter so we can do:
// Module.on('exit', function (status) {});
// exit the runtime
exitRuntime();
if (inMain) {
// if we're still inside the callMain's try/catch, we need to throw an
// exception in order to immediately terminate execution.
throw { type: 'ExitStatus', value: status };
}
}
Module['exit'] = Module.exit = exit;
function abort(text) {
if (text) {
Module.print(text);
}
ABORT = true;
throw 'abort() at ' + (new Error().stack);
}
Module['abort'] = Module.abort = abort;
// {{PRE_RUN_ADDITIONS}}
if (Module['preInit']) {
if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
while (Module['preInit'].length > 0) {
Module['preInit'].pop()();
}
}
// shouldRunNow refers to calling main(), not run().
var shouldRunNow = true;
if (Module['noInitialRun']) {
shouldRunNow = false;
}
run();
// {{POST_RUN_ADDITIONS}}
// {{MODULE_ADDITIONS}}
})(Module);