LiquidFun.js

Quick experiment with LiquidFun from google.github.io/liquidfun/
Exports as a 60 FPS GIF of the same duration as the simulation time.

Log in to post a comment.

// LL 2021

// Using LiquidFun.js

const simulate_seconds = 2; // min=0 max=10 step=.01
const volume = 10; // min=0 max=20 step=0.1
const draw_style = 0; // min=0 max=3 step=1 (Circles,Trace,Contour,Filled contour)
const precision = 500; // min=10 max=1500 step=1

if (draw_style==1) Canvas.setpenopacity(.02);

const turtle = new Turtle();

function walk(i, t) {
    if (i==0 && (t==0 || t==1)) {
    	const gravity = new b2Vec2(0, -10);
		world = new b2World(gravity);
		test = new TestImpulse;
		done_iterations = 0;
    }
    if (i==0) contour_i = 0;

    if (done_iterations < simulate_seconds * 60 * t) {
		world.Step(timeStep, velocityIterations, positionIterations);
    	done_iterations++;
        if (draw_style==1) draw();
    	return true;
    }

    if (draw_style < 2) {
        draw();
        return false;
    }
    
    return contour(contour_i++, getWater);
}

// p: 2D point in -100 to 100 range
function getWater(in_p2) {
	for (var j = 0, jcount = world.particleSystems.length; j < jcount; j++) {
    	var particles = world.particleSystems[j].GetPositionBuffer();
    	const r = 1.5;
    	for (var i = 0, icount = particles.length; i < icount; i += 2) {
    		const x = particles[i] * 48 - 48;
    		const y = -particles[i+1] * 48 + 48;
    		const dist = Math.hypot(in_p2[0] - x, in_p2[1] - y);
    		if (dist < r) return 2 + (draw_style == 3 ? (Math.random() > 0.5) : 0);
    	}
	}
    return 0;
}

function draw() {
	for (var i = 0, max = world.bodies.length; i < max; i++) {
		var body = world.bodies[i];
		var maxFixtures = body.fixtures.length;
		var transform = body.GetTransform();
		for (var j = 0; j < maxFixtures; j++) {
			var fixture = body.fixtures[j];
			//fixture.shape.draw(transform);
		}
	}

	for (var i = 0, max = world.particleSystems.length; i < max; i++) {
		drawParticleSystem(world.particleSystems[i]);
	}
};

function drawParticleSystem(system) {
	var particles = system.GetPositionBuffer();
	var maxParticles = particles.length;

	const r = 1;
	for (var i = 0; i < maxParticles; i += 2) {
		const x = particles[i] * 48 - 48;
		const y = -particles[i+1] * 48 + 48;
		turtle.jump(x, y-r);
		turtle.circle(r, 0, 10);
	}
}


var world = null;
var camera;
var timeStep = 1.0 / 60.0;
var velocityIterations = 8;
var positionIterations = 3;

function TestImpulse() {
	this.boxLeft = -2;
	this.boxRight = 2;
	this.boxBottom = -2;
	this.boxTop = 40;

	var bd = new b2BodyDef;
	var ground = world.CreateBody(bd);

	var shape = new b2ChainShape;
	shape.vertices.push(new b2Vec2(this.boxLeft, this.boxBottom));
	shape.vertices.push(new b2Vec2(this.boxRight, this.boxBottom));
	shape.vertices.push(new b2Vec2(this.boxRight,this.boxTop));
	shape.vertices.push(new b2Vec2(this.boxLeft, this.boxTop));
	shape.CreateLoop();
	ground.CreateFixtureFromShape(shape, 0.0);

	var psd = new b2ParticleSystemDef();
	psd.radius = 0.025;
	psd.damping = 0.2;
	this.particleSystem = world.CreateParticleSystem(psd);

	shape = new b2PolygonShape ;
	shape.SetAsBoxXYCenterAngle(0.2, volume, new b2Vec2(0.0, volume + .01), 0);
	var pd = new b2ParticleGroupDef;
	pd.shape = shape;
	this.group = this.particleSystem.CreateParticleGroup(pd);
}




//////////////////////////////////////////
// Contour utility by Lionel Lemarie 2021
// https://turtletoy.net/turtle/765d77abf4
function contour(i, zFunc) {
    if (i == 0) { cache = {}; }
    const r = 100 / precision;
    
    if (i >= precision*precision) return false;

    const xx = i % precision;
    const yy = (i / precision) | 0;
    
    const ci00 = (xx-1) + (yy-1) * precision;
    const ci01 = (xx-0) + (yy-1) * precision;
    const ci10 = (xx-1) + (yy-0) * precision;
    const ci11 = (xx-0) + (yy-0) * precision;

    const x0 = ((xx-1) / precision - 0.5) * 200;
    const y0 = ((yy-1) / precision - 0.5) * 200;
    const x1 = ((xx-0) / precision - 0.5) * 200;
    const y1 = ((yy-0) / precision - 0.5) * 200;

    const z00 = cache[ci00], z01 = cache[ci01], z10 = cache[ci10];
    const z11 = cache[ci11] = zFunc([x1, y1]);

    var lines = [];
    
    // A bit like marching cubes
    if (z00 != z01 && z00 != z10 && z00 != z11) lines = [[[1,0],[0,1]],[[0,1],[1,2]],[[1,2],[2,1]],[[2,1],[1,0]]];
    if (z00 == z01 && z00 == z10 && z00 != z11) lines = [[[2,1],[1,2]]];
    if (z00 == z01 && z00 == z11 && z00 != z10) lines = [[[0,1],[1,2]]];
    if (z00 == z01 && z10 == z11 && z00 != z10) lines = [[[0,1],[2,1]]];
    if (z00 == z10 && z00 == z11 && z00 != z01) lines = [[[1,0],[2,1]]];
    if (z00 == z10 && z01 == z11 && z00 != z01) lines = [[[1,0],[1,2]]];
    if (z00 == z11 && z01 == z10 && z00 != z01) lines = [[[1,0],[0,1]],[[2,1],[1,2]]];
    if (z01 == z10 && z01 == z11 && z00 != z01) lines = [[[1,0],[0,1]]];

    lines.forEach(l => {
        turtle.jump(r/2+x0+l[0][0]*r, r/2+y0+l[0][1]*r);
        turtle.goto(r/2+x0+l[1][0]*r, r/2+y0+l[1][1]*r);
    });

    return true;
}




// LiquidFun.js from https://google.github.io/liquidfun/

var Module;
if (!Module)
    Module = (typeof Module !== "undefined" ? Module : null) || {};
var moduleOverrides = {};
for (var key in Module)
    if (Module.hasOwnProperty(key))
        moduleOverrides[key] = Module[key];
var ENVIRONMENT_IS_NODE = typeof process === "object" && typeof require === "function";
var ENVIRONMENT_IS_WEB = typeof window === "object";
var ENVIRONMENT_IS_WORKER = typeof importScripts === "function";
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
if (ENVIRONMENT_IS_NODE) {
    if (!Module["print"])
        Module["print"] = function print(x) {
            process["stdout"].write(x + "\n")
        };
    if (!Module["printErr"])
        Module["printErr"] = function printErr(x) {
            process["stderr"].write(x + "\n")
        };
    var nodeFS = require("fs");
    var nodePath = require("path");
    Module["read"] = function read(filename, binary) {
        filename = nodePath["normalize"](filename);
        var ret = nodeFS["readFileSync"](filename);
        if (!ret && filename != nodePath["resolve"](filename)) {
            filename = path.join(__dirname, "..", "src", filename);
            ret = nodeFS["readFileSync"](filename)
        }
        if (ret &&
        !binary)
            ret = ret.toString();
        return ret
    };
    Module["readBinary"] = function readBinary(filename) {
        return Module["read"](filename, true)
    };
    Module["load"] = function load(f) {
        globalEval(read(f))
    };
    Module["arguments"] = process["argv"].slice(2);
    module["exports"] = Module
} else if (ENVIRONMENT_IS_SHELL) {
    if (!Module["print"])
        Module["print"] = print;
    if (typeof printErr != "undefined")
        Module["printErr"] = printErr;
    if (typeof read != "undefined")
        Module["read"] = read;
    else
        Module["read"] = function read() {
            throw "no read() available (jsc?)";
        };
    Module["readBinary"] = function readBinary(f) {
        return read(f, "binary")
    };
    if (typeof scriptArgs != "undefined")
        Module["arguments"] = scriptArgs;
    else if (typeof arguments != "undefined")
        Module["arguments"] = arguments;
    this["Module"] = Module
} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
    Module["read"] = function read(url) {
        var xhr = new XMLHttpRequest;
        xhr.open("GET", url, false);
        xhr.send(null);
        return xhr.responseText
    };
    if (typeof arguments != "undefined")
        Module["arguments"] = arguments;
    if (typeof console !== "undefined") {
        if (!Module["print"])
            Module["print"] =
            function print(x) {
                console.log(x)
            };
        if (!Module["printErr"])
            Module["printErr"] = function printErr(x) {
                console.log(x)
            }
    } else {
        var TRY_USE_DUMP = false;
        if (!Module["print"])
            Module["print"] = TRY_USE_DUMP && typeof dump !== "undefined" ? function(x) {
                dump(x)
            } : function(x) {}
    }
    if (ENVIRONMENT_IS_WEB)
        window["Module"] = Module;
    else
        Module["load"] = importScripts
} else
    throw "Unknown runtime environment. Where are we?";
function globalEval(x) {
    eval.call(null, x)
}
if (!Module["load"] == "undefined" && Module["read"])
    Module["load"] = function load(f) {
        globalEval(Module["read"](f))
    };
if (!Module["print"])
    Module["print"] = function() {};
if (!Module["printErr"])
    Module["printErr"] = Module["print"];
if (!Module["arguments"])
    Module["arguments"] = [];
Module.print = Module["print"];
Module.printErr = Module["printErr"];
Module["preRun"] = [];
Module["postRun"] = [];
for (var key in moduleOverrides)
    if (moduleOverrides.hasOwnProperty(key))
        Module[key] = moduleOverrides[key];
var Runtime = {
    setTempRet0: function(value) {
        tempRet0 = value
    },
    getTempRet0: function() {
        return tempRet0
    },
    stackSave: function() {
        return STACKTOP
    },
    stackRestore: function(stackTop) {
        STACKTOP = stackTop
    },
    forceAlign: function(target, quantum) {
        quantum = quantum || 4;
        if (quantum == 1)
            return target;
        if (isNumber(target) && isNumber(quantum))
            return Math.ceil(target / quantum) * quantum;
        else if (isNumber(quantum) && isPowerOfTwo(quantum))
            return "(((" + target + ")+" + (quantum - 1) + ")&" + -quantum + ")";
        return "Math.ceil((" + target + ")/" + quantum + ")*" + quantum
    },
    isNumberType: function(type) {
        return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES
    },
    isPointerType: function isPointerType(type) {
        return type[type.length - 1] == "*"
    },
    isStructType: function isStructType(type) {
        if (isPointerType(type))
            return false;
        if (isArrayType(type))
            return true;
        if (/<?\{ ?[^}]* ?\}>?/.test(type))
            return true;
        return type[0] == "%"
    },
    INT_TYPES: {
        "i1": 0,
        "i8": 0,
        "i16": 0,
        "i32": 0,
        "i64": 0
    },
    FLOAT_TYPES: {
        "float": 0,
        "double": 0
    },
    or64: function(x, y) {
        var l = x | 0 | (y | 0);
        var h = (Math.round(x / 4294967296) | Math.round(y /
        4294967296)) * 4294967296;
        return l + h
    },
    and64: function(x, y) {
        var l = (x | 0) & (y | 0);
        var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
        return l + h
    },
    xor64: function(x, y) {
        var l = (x | 0) ^ (y | 0);
        var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
        return l + h
    },
    getNativeTypeSize: function(type) {
        switch (type) {
        case "i1":
        case "i8":
            return 1;
        case "i16":
            return 2;
        case "i32":
            return 4;
        case "i64":
            return 8;
        case "float":
            return 4;
        case "double":
            return 8;
        default:
            if (type[type.length - 1] === "*")
                return Runtime.QUANTUM_SIZE;
            else if (type[0] === "i") {
                var bits = parseInt(type.substr(1));
                assert(bits % 8 === 0);
                return bits / 8
            } else
                return 0
        }
    },
    getNativeFieldSize: function(type) {
        return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE)
    },
    dedup: function dedup(items, ident) {
        var seen = {};
        if (ident)
            return items.filter(function(item) {
                if (seen[item[ident]])
                    return false;
                seen[item[ident]] = true;
                return true
            });
        else
            return items.filter(function(item) {
                if (seen[item])
                    return false;
                seen[item] = true;
                return true
            })
    },
    set: function set() {
        var args = typeof arguments[0] ===
        "object" ? arguments[0] : arguments;
        var ret = {};
        for (var i = 0; i < args.length; i++)
            ret[args[i]] = 0;
        return ret
    },
    STACK_ALIGN: 8,
    getAlignSize: function(type, size, vararg) {
        if (!vararg && (type == "i64" || type == "double"))
            return 8;
        if (!type)
            return Math.min(size, 8);
        return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE)
    },
    calculateStructAlignment: function calculateStructAlignment(type) {
        type.flatSize = 0;
        type.alignSize = 0;
        var diffs = [];
        var prev = -1;
        var index = 0;
        type.flatIndexes = type.fields.map(function(field) {
            index++;
            var size,
                alignSize;
            if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
                size = Runtime.getNativeTypeSize(field);
                alignSize = Runtime.getAlignSize(field, size)
            } else if (Runtime.isStructType(field))
                if (field[1] === "0") {
                    size = 0;
                    if (Types.types[field])
                        alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
                    else
                        alignSize = type.alignSize || QUANTUM_SIZE
                } else {
                    size = Types.types[field].flatSize;
                    alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize)
                }
            else if (field[0] == "b") {
                size = field.substr(1) |
                0;
                alignSize = 1
            } else if (field[0] === "<")
                size = alignSize = Types.types[field].flatSize;
            else if (field[0] === "i") {
                size = alignSize = parseInt(field.substr(1)) / 8;
                assert(size % 1 === 0, "cannot handle non-byte-size field " + field)
            } else
                assert(false, "invalid type for calculateStructAlignment");
            if (type.packed)
                alignSize = 1;
            type.alignSize = Math.max(type.alignSize, alignSize);
            var curr = Runtime.alignMemory(type.flatSize, alignSize);
            type.flatSize = curr + size;
            if (prev >= 0)
                diffs.push(curr - prev);
            prev = curr;
            return curr
        });
        if (type.name_ && type.name_[0] ===
        "[")
            type.flatSize = parseInt(type.name_.substr(1)) * type.flatSize / 2;
        type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
        if (diffs.length == 0)
            type.flatFactor = type.flatSize;
        else if (Runtime.dedup(diffs).length == 1)
            type.flatFactor = diffs[0];
        type.needsFlattening = type.flatFactor != 1;
        return type.flatIndexes
    },
    generateStructInfo: function(struct, typeName, offset) {
        var type,
            alignment;
        if (typeName) {
            offset = offset || 0;
            type = (typeof Types === "undefined" ? Runtime.typeInfo : Types.types)[typeName];
            if (!type)
                return null;
            if (type.fields.length != struct.length) {
                printErr("Number of named fields must match the type for " + typeName + ": possibly duplicate struct names. Cannot return structInfo");
                return null
            }
            alignment = type.flatIndexes
        } else {
            var type = {
                fields: struct.map(function(item) {
                    return item[0]
                })
            };
            alignment = Runtime.calculateStructAlignment(type)
        }
        var ret = {
            __size__: type.flatSize
        };
        if (typeName)
            struct.forEach(function(item, i) {
                if (typeof item === "string")
                    ret[item] = alignment[i] + offset;
                else {
                    var key;
                    for (var k in item)
                        key = k;
                    ret[key] =
                    Runtime.generateStructInfo(item[key], type.fields[i], alignment[i])
                }
            });
        else
            struct.forEach(function(item, i) {
                ret[item[1]] = alignment[i]
            });
        return ret
    },
    dynCall: function(sig, ptr, args) {
        if (args && args.length) {
            if (!args.splice)
                args = Array.prototype.slice.call(args);
            args.splice(0, 0, ptr);
            return Module["dynCall_" + sig].apply(null, args)
        } else
            return Module["dynCall_" + sig].call(null, ptr)
    },
    functionPointers: [],
    addFunction: function(func) {
        for (var i = 0; i < Runtime.functionPointers.length; i++)
            if (!Runtime.functionPointers[i]) {
                Runtime.functionPointers[i] =
                func;
                return 2 * (1 + i)
            }
        throw "Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.";
    },
    removeFunction: function(index) {
        Runtime.functionPointers[(index - 2) / 2] = null
    },
    getAsmConst: function(code, numArgs) {
        if (!Runtime.asmConstCache)
            Runtime.asmConstCache = {};
        var func = Runtime.asmConstCache[code];
        if (func)
            return func;
        var args = [];
        for (var i = 0; i < numArgs; i++)
            args.push(String.fromCharCode(36) + i);
        var source = Pointer_stringify(code);
        if (source[0] === '"')
            if (source.indexOf('"', 1) === source.length -
            1)
                source = source.substr(1, source.length - 2);
            else
                abort("invalid EM_ASM input |" + source + "|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)");
        try {
            var evalled = eval("(function(" + args.join(",") + "){ " + source + " })")
        } catch (e) {
            Module.printErr("error in executing inline EM_ASM code: " + e + " on: \n\n" + source + "\n\nwith args |" + args + "| (make sure to use the right one out of EM_ASM, EM_ASM_ARGS, etc.)");
            throw e;
        }
        return Runtime.asmConstCache[code] = evalled
    },
    warnOnce: function(text) {
        if (!Runtime.warnOnce.shown)
            Runtime.warnOnce.shown =
            {};
        if (!Runtime.warnOnce.shown[text]) {
            Runtime.warnOnce.shown[text] = 1;
            Module.printErr(text)
        }
    },
    funcWrappers: {},
    getFuncWrapper: function(func, sig) {
        assert(sig);
        if (!Runtime.funcWrappers[func])
            Runtime.funcWrappers[func] = function dynCall_wrapper() {
                return Runtime.dynCall(sig, func, arguments)
            };
        return Runtime.funcWrappers[func]
    },
    UTF8Processor: function() {
        var buffer = [];
        var needed = 0;
        this.processCChar = function(code) {
            code = code & 255;
            if (buffer.length == 0) {
                if ((code & 128) == 0)
                    return String.fromCharCode(code);
                buffer.push(code);
                if ((code & 224) == 192)
                    needed = 1;
                else if ((code & 240) == 224)
                    needed = 2;
                else
                    needed = 3;
                return ""
            }
            if (needed) {
                buffer.push(code);
                needed--;
                if (needed > 0)
                    return ""
            }
            var c1 = buffer[0];
            var c2 = buffer[1];
            var c3 = buffer[2];
            var c4 = buffer[3];
            var ret;
            if (buffer.length == 2)
                ret = String.fromCharCode((c1 & 31) << 6 | c2 & 63);
            else if (buffer.length == 3)
                ret = String.fromCharCode((c1 & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
            else {
                var codePoint = (c1 & 7) << 18 | (c2 & 63) << 12 | (c3 & 63) << 6 | c4 & 63;
                ret = String.fromCharCode(Math.floor((codePoint - 65536) / 1024) + 55296, (codePoint - 65536) %
                1024 + 56320)
            }
            buffer.length = 0;
            return ret
        };
        this.processJSString = function processJSString(string) {
            string = unescape(encodeURIComponent(string));
            var ret = [];
            for (var i = 0; i < string.length; i++)
                ret.push(string.charCodeAt(i));
            return ret
        }
    },
    getCompilerSetting: function(name) {
        throw "You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work";
    },
    stackAlloc: function(size) {
        var ret = STACKTOP;
        STACKTOP = STACKTOP + size | 0;
        STACKTOP = STACKTOP + 7 & -8;
        return ret
    },
    staticAlloc: function(size) {
        var ret =
        STATICTOP;
        STATICTOP = STATICTOP + size | 0;
        STATICTOP = STATICTOP + 7 & -8;
        return ret
    },
    dynamicAlloc: function(size) {
        var ret = DYNAMICTOP;
        DYNAMICTOP = DYNAMICTOP + size | 0;
        DYNAMICTOP = DYNAMICTOP + 7 & -8;
        if (DYNAMICTOP >= TOTAL_MEMORY)
            enlargeMemory();
        return ret
    },
    alignMemory: function(size, quantum) {
        var ret = size = Math.ceil(size / (quantum ? quantum : 8)) * (quantum ? quantum : 8);
        return ret
    },
    makeBigInt: function(low, high, unsigned) {
        var ret = unsigned ? +(low >>> 0) + +(high >>> 0) * +4294967296 : +(low >>> 0) + +(high | 0) * +4294967296;
        return ret
    },
    GLOBAL_BASE: 8,
    QUANTUM_SIZE: 4,
    __dummy__: 0
};
Module["Runtime"] = Runtime;
var __THREW__ = 0;
var ABORT = false;
var EXITSTATUS = 0;
var undef = 0;
var tempValue,
    tempInt,
    tempBigInt,
    tempInt2,
    tempBigInt2,
    tempPair,
    tempBigIntI,
    tempBigIntR,
    tempBigIntS,
    tempBigIntP,
    tempBigIntD,
    tempDouble,
    tempFloat;
var tempI64,
    tempI64b;
var tempRet0,
    tempRet1,
    tempRet2,
    tempRet3,
    tempRet4,
    tempRet5,
    tempRet6,
    tempRet7,
    tempRet8,
    tempRet9;
function assert(condition, text) {
    if (!condition)
        abort("Assertion failed: " + text)
}
var globalScope = this;
function getCFunc(ident) {
    var func = Module["_" + ident];
    if (!func)
        try {
            func = eval("_" + ident)
        } catch (e) {}
    assert(func, "Cannot call unknown function " + ident + " (perhaps LLVM optimizations or closure removed it?)");
    return func
}
var cwrap,
    ccall;
(function() {
    var stack = 0;
    var JSfuncs = {
        "stackSave": function() {
            stack = Runtime.stackSave()
        },
        "stackRestore": function() {
            Runtime.stackRestore(stack)
        },
        "arrayToC": function(arr) {
            var ret = Runtime.stackAlloc(arr.length);
            writeArrayToMemory(arr, ret);
            return ret
        },
        "stringToC": function(str) {
            var ret = 0;
            if (str !== null && str !== undefined && str !== 0) {
                ret = Runtime.stackAlloc(str.length + 1);
                writeStringToMemory(str, ret)
            }
            return ret
        }
    };
    var toC = {
        "string": JSfuncs["stringToC"],
        "array": JSfuncs["arrayToC"]
    };
    ccall = function ccallFunc(ident,
    returnType, argTypes, args) {
        var func = getCFunc(ident);
        var cArgs = [];
        if (args)
            for (var i = 0; i < args.length; i++) {
                var converter = toC[argTypes[i]];
                if (converter) {
                    if (stack === 0)
                        stack = Runtime.stackSave();
                    cArgs[i] = converter(args[i])
                } else
                    cArgs[i] = args[i]
            }
        var ret = func.apply(null, cArgs);
        if (returnType === "string")
            ret = Pointer_stringify(ret);
        if (stack !== 0)
            JSfuncs["stackRestore"]();
        return ret
    };
    var sourceRegex = /^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;
    function parseJSFunc(jsfunc) {
        var parsed =
        jsfunc.toString().match(sourceRegex).slice(1);
        return {
            arguments: parsed[0],
            body: parsed[1],
            returnValue: parsed[2]
        }
    }
    var JSsource = {};
    for (var fun in JSfuncs)
        if (JSfuncs.hasOwnProperty(fun))
            JSsource[fun] = parseJSFunc(JSfuncs[fun]);
    cwrap = function cwrap(ident, returnType, argTypes) {
        var cfunc = getCFunc(ident);
        var numericArgs = argTypes.every(function(type) {
            return type === "number"
        });
        var numericRet = returnType !== "string";
        if (numericRet && numericArgs)
            return cfunc;
        var argNames = argTypes.map(function(x, i) {
            return "$" + i
        });
        var funcstr =
        "(function(" + argNames.join(",") + ") {";
        var nargs = argTypes.length;
        if (!numericArgs) {
            funcstr += JSsource["stackSave"].body + ";";
            for (var i = 0; i < nargs; i++) {
                var arg = argNames[i],
                    type = argTypes[i];
                if (type === "number")
                    continue;
                var convertCode = JSsource[type + "ToC"];
                funcstr += "var " + convertCode.arguments + " = " + arg + ";";
                funcstr += convertCode.body + ";";
                funcstr += arg + "=" + convertCode.returnValue + ";"
            }
        }
        var cfuncname = parseJSFunc(function() {
            return cfunc
        }).returnValue;
        funcstr += "var ret = " + cfuncname + "(" + argNames.join(",") + ");";
        if (!numericRet) {
            var strgfy =
            parseJSFunc(function() {
                return Pointer_stringify
            }).returnValue;
            funcstr += "ret = " + strgfy + "(ret);"
        }
        if (!numericArgs)
            funcstr += JSsource["stackRestore"].body + ";";
        funcstr += "return ret})";
        return eval(funcstr)
    }
})();
Module["cwrap"] = cwrap;
Module["ccall"] = ccall;
function setValue(ptr, value, type, noSafe) {
    type = type || "i8";
    if (type.charAt(type.length - 1) === "*")
        type = "i32";
    switch (type) {
    case "i1":
        HEAP8[ptr >> 0] = value;
        break;
    case "i8":
        HEAP8[ptr >> 0] = value;
        break;
    case "i16":
        HEAP16[ptr >> 1] = value;
        break;
    case "i32":
        HEAP32[ptr >> 2] = value;
        break;
    case "i64":
        tempI64 = [value >>> 0, (tempDouble = value, +Math_abs(tempDouble) >= +1 ? tempDouble > +0 ? (Math_min(+Math_floor(tempDouble / +4294967296), +4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / +4294967296) >>> 0 : 0)],
        HEAP32[ptr >> 2] =
        tempI64[0],
        HEAP32[ptr + 4 >> 2] = tempI64[1];
        break;
    case "float":
        HEAPF32[ptr >> 2] = value;
        break;
    case "double":
        HEAPF64[ptr >> 3] = value;
        break;
    default:
        abort("invalid type for setValue: " + type)
    }
}
Module["setValue"] = setValue;
function getValue(ptr, type, noSafe) {
    type = type || "i8";
    if (type.charAt(type.length - 1) === "*")
        type = "i32";
    switch (type) {
    case "i1":
        return HEAP8[ptr >> 0];
    case "i8":
        return HEAP8[ptr >> 0];
    case "i16":
        return HEAP16[ptr >> 1];
    case "i32":
        return HEAP32[ptr >> 2];
    case "i64":
        return HEAP32[ptr >> 2];
    case "float":
        return HEAPF32[ptr >> 2];
    case "double":
        return HEAPF64[ptr >> 3];
    default:
        abort("invalid type for setValue: " + type)
    }
    return null
}
Module["getValue"] = getValue;
var ALLOC_NORMAL = 0;
var ALLOC_STACK = 1;
var ALLOC_STATIC = 2;
var ALLOC_DYNAMIC = 3;
var ALLOC_NONE = 4;
Module["ALLOC_NORMAL"] = ALLOC_NORMAL;
Module["ALLOC_STACK"] = ALLOC_STACK;
Module["ALLOC_STATIC"] = ALLOC_STATIC;
Module["ALLOC_DYNAMIC"] = ALLOC_DYNAMIC;
Module["ALLOC_NONE"] = ALLOC_NONE;
function allocate(slab, types, allocator, ptr) {
    var zeroinit,
        size;
    if (typeof slab === "number") {
        zeroinit = true;
        size = slab
    } else {
        zeroinit = false;
        size = slab.length
    }
    var singleType = typeof types === "string" ? types : null;
    var ret;
    if (allocator == ALLOC_NONE)
        ret = ptr;
    else
        ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
    if (zeroinit) {
        var ptr = ret,
            stop;
        assert((ret & 3) == 0);
        stop = ret + (size & ~3);
        for (; ptr < stop; ptr += 4)
            HEAP32[ptr >>
            2] = 0;
        stop = ret + size;
        while (ptr < stop)
            HEAP8[ptr++ >> 0] = 0;
        return ret
    }
    if (singleType === "i8") {
        if (slab.subarray || slab.slice)
            HEAPU8.set(slab, ret);
        else
            HEAPU8.set(new Uint8Array(slab), ret);
        return ret
    }
    var i = 0,
        type,
        typeSize,
        previousType;
    while (i < size) {
        var curr = slab[i];
        if (typeof curr === "function")
            curr = Runtime.getFunctionIndex(curr);
        type = singleType || types[i];
        if (type === 0) {
            i++;
            continue
        }
        if (type == "i64")
            type = "i32";
        setValue(ret + i, curr, type);
        if (previousType !== type) {
            typeSize = Runtime.getNativeTypeSize(type);
            previousType = type
        }
        i +=
        typeSize
    }
    return ret
}
Module["allocate"] = allocate;
function Pointer_stringify(ptr, length) {
    var hasUtf = false;
    var t;
    var i = 0;
    while (1) {
        t = HEAPU8[ptr + i >> 0];
        if (t >= 128)
            hasUtf = true;
        else if (t == 0 && !length)
            break;
        i++;
        if (length && i == length)
            break
    }
    if (!length)
        length = i;
    var ret = "";
    if (!hasUtf) {
        var MAX_CHUNK = 1024;
        var curr;
        while (length > 0) {
            curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
            ret = ret ? ret + curr : curr;
            ptr += MAX_CHUNK;
            length -= MAX_CHUNK
        }
        return ret
    }
    var utf8 = new Runtime.UTF8Processor;
    for (i = 0; i < length; i++) {
        t = HEAPU8[ptr + i >> 0];
        ret +=
        utf8.processCChar(t)
    }
    return ret
}
Module["Pointer_stringify"] = Pointer_stringify;
function UTF16ToString(ptr) {
    var i = 0;
    var str = "";
    while (1) {
        var codeUnit = HEAP16[ptr + i * 2 >> 1];
        if (codeUnit == 0)
            return str;
        ++i;
        str += String.fromCharCode(codeUnit)
    }
}
Module["UTF16ToString"] = UTF16ToString;
function stringToUTF16(str, outPtr) {
    for (var i = 0; i < str.length; ++i) {
        var codeUnit = str.charCodeAt(i);
        HEAP16[outPtr + i * 2 >> 1] = codeUnit
    }
    HEAP16[outPtr + str.length * 2 >> 1] = 0
}
Module["stringToUTF16"] = stringToUTF16;
function UTF32ToString(ptr) {
    var i = 0;
    var str = "";
    while (1) {
        var utf32 = HEAP32[ptr + i * 4 >> 2];
        if (utf32 == 0)
            return str;
        ++i;
        if (utf32 >= 65536) {
            var ch = utf32 - 65536;
            str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023)
        } else
            str += String.fromCharCode(utf32)
    }
}
Module["UTF32ToString"] = UTF32ToString;
function stringToUTF32(str, outPtr) {
    var iChar = 0;
    for (var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
        var codeUnit = str.charCodeAt(iCodeUnit);
        if (codeUnit >= 55296 && codeUnit <= 57343) {
            var trailSurrogate = str.charCodeAt(++iCodeUnit);
            codeUnit = 65536 + ((codeUnit & 1023) << 10) | trailSurrogate & 1023
        }
        HEAP32[outPtr + iChar * 4 >> 2] = codeUnit;
        ++iChar
    }
    HEAP32[outPtr + iChar * 4 >> 2] = 0
}
Module["stringToUTF32"] = stringToUTF32;
function demangle(func) {
    var i = 3;
    var basicTypes = {
        "v": "void",
        "b": "bool",
        "c": "char",
        "s": "short",
        "i": "int",
        "l": "long",
        "f": "float",
        "d": "double",
        "w": "wchar_t",
        "a": "signed char",
        "h": "unsigned char",
        "t": "unsigned short",
        "j": "unsigned int",
        "m": "unsigned long",
        "x": "long long",
        "y": "unsigned long long",
        "z": "..."
    };
    var subs = [];
    var first = true;
    function dump(x) {
        if (x)
            Module.print(x);
        Module.print(func);
        var pre = "";
        for (var a = 0; a < i; a++)
            pre += " ";
        Module.print(pre + "^")
    }
    function parseNested() {
        i++;
        if (func[i] === "K")
            i++;
        var parts =
        [];
        while (func[i] !== "E") {
            if (func[i] === "S") {
                i++;
                var next = func.indexOf("_", i);
                var num = func.substring(i, next) || 0;
                parts.push(subs[num] || "?");
                i = next + 1;
                continue
            }
            if (func[i] === "C") {
                parts.push(parts[parts.length - 1]);
                i += 2;
                continue
            }
            var size = parseInt(func.substr(i));
            var pre = size.toString().length;
            if (!size || !pre) {
                i--;
                break
            }
            var curr = func.substr(i + pre, size);
            parts.push(curr);
            subs.push(curr);
            i += pre + size
        }
        i++;
        return parts
    }
    function parse(rawList, limit, allowVoid) {
        limit = limit || Infinity;
        var ret = "",
            list = [];
        function flushList() {
            return "(" +
            list.join(", ") + ")"
        }
        var name;
        if (func[i] === "N") {
            name = parseNested().join("::");
            limit--;
            if (limit === 0)
                return rawList ? [name] : name
        } else {
            if (func[i] === "K" || first && func[i] === "L")
                i++;
            var size = parseInt(func.substr(i));
            if (size) {
                var pre = size.toString().length;
                name = func.substr(i + pre, size);
                i += pre + size
            }
        }
        first = false;
        if (func[i] === "I") {
            i++;
            var iList = parse(true);
            var iRet = parse(true, 1, true);
            ret += iRet[0] + " " + name + "<" + iList.join(", ") + ">"
        } else
            ret = name;
        paramLoop:
        while (i < func.length && limit-- > 0) {
            var c = func[i++];
            if (c in basicTypes)
                list.push(basicTypes[c]);
            else
                switch (c) {
                case "P":
                    list.push(parse(true, 1, true)[0] + "*");
                    break;
                case "R":
                    list.push(parse(true, 1, true)[0] + "&");
                    break;
                case "L":
                    i++;
                    var end = func.indexOf("E", i);
                    var size = end - i;
                    list.push(func.substr(i, size));
                    i += size + 2;
                    break;
                case "A":
                    var size = parseInt(func.substr(i));
                    i += size.toString().length;
                    if (func[i] !== "_")
                        throw "?";
                    i++;
                    list.push(parse(true, 1, true)[0] + " [" + size + "]");
                    break;
                case "E":
                    break paramLoop;
                default:
                    ret += "?" + c;
                    break paramLoop
                }
        }
        if (!allowVoid && list.length === 1 && list[0] === "void")
            list = [];
        if (rawList) {
            if (ret)
                list.push(ret +
                "?");
            return list
        } else
            return ret + flushList()
    }
    try {
        if (func == "Object._main" || func == "_main")
            return "main()";
        if (typeof func === "number")
            func = Pointer_stringify(func);
        if (func[0] !== "_")
            return func;
        if (func[1] !== "_")
            return func;
        if (func[2] !== "Z")
            return func;
        switch (func[3]) {
        case "n":
            return "operator new()";
        case "d":
            return "operator delete()"
        }
        return parse()
    } catch (e) {
        return func
    }
}
function demangleAll(text) {
    return text.replace(/__Z[\w\d_]+/g, function(x) {
        var y = demangle(x);
        return x === y ? x : x + " [" + y + "]"
    })
}
function stackTrace() {
    var stack = (new Error).stack;
    return stack ? demangleAll(stack) : "(no stack trace available)"
}
var PAGE_SIZE = 4096;
function alignMemoryPage(x) {
    return x + 4095 & -4096
}
var HEAP;
var HEAP8,
    HEAPU8,
    HEAP16,
    HEAPU16,
    HEAP32,
    HEAPU32,
    HEAPF32,
    HEAPF64;
var STATIC_BASE = 0,
    STATICTOP = 0,
    staticSealed = false;
var STACK_BASE = 0,
    STACKTOP = 0,
    STACK_MAX = 0;
var DYNAMIC_BASE = 0,
    DYNAMICTOP = 0;
function enlargeMemory() {
    abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value " + TOTAL_MEMORY + ", (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.")
}
var TOTAL_STACK = Module["TOTAL_STACK"] || 5242880;
var TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 33554432;
var FAST_MEMORY = Module["FAST_MEMORY"] || 2097152;
var totalMemory = 4096;
while (totalMemory < TOTAL_MEMORY || totalMemory < 2 * TOTAL_STACK)
    if (totalMemory < 16 * 1024 * 1024)
        totalMemory *= 2;
    else
        totalMemory += 16 * 1024 * 1024;
if (totalMemory !== TOTAL_MEMORY) {
    Module.printErr("increasing TOTAL_MEMORY to " + totalMemory + " to be more reasonable");
    TOTAL_MEMORY = totalMemory
}
assert(typeof Int32Array !== "undefined" && typeof Float64Array !== "undefined" && !!(new Int32Array(1))["subarray"] && !!(new Int32Array(1))["set"], "JS engine does not provide full typed array support");
var buffer = new ArrayBuffer(TOTAL_MEMORY);
HEAP8 = new Int8Array(buffer);
HEAP16 = new Int16Array(buffer);
HEAP32 = new Int32Array(buffer);
HEAPU8 = new Uint8Array(buffer);
HEAPU16 = new Uint16Array(buffer);
HEAPU32 = new Uint32Array(buffer);
HEAPF32 = new Float32Array(buffer);
HEAPF64 = new Float64Array(buffer);
HEAP32[0] = 255;
assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, "Typed arrays 2 must be run on a little-endian system");
Module["HEAP"] = HEAP;
Module["HEAP8"] = HEAP8;
Module["HEAP16"] = HEAP16;
Module["HEAP32"] = HEAP32;
Module["HEAPU8"] = HEAPU8;
Module["HEAPU16"] = HEAPU16;
Module["HEAPU32"] = HEAPU32;
Module["HEAPF32"] = HEAPF32;
Module["HEAPF64"] = HEAPF64;
function callRuntimeCallbacks(callbacks) {
    while (callbacks.length > 0) {
        var callback = callbacks.shift();
        if (typeof callback == "function") {
            callback();
            continue
        }
        var func = callback.func;
        if (typeof func === "number")
            if (callback.arg === undefined)
                Runtime.dynCall("v", func);
            else
                Runtime.dynCall("vi", func, [callback.arg]);
        else
            func(callback.arg === undefined ? null : callback.arg)
    }
}
var __ATPRERUN__ = [];
var __ATINIT__ = [];
var __ATMAIN__ = [];
var __ATEXIT__ = [];
var __ATPOSTRUN__ = [];
var runtimeInitialized = false;
function preRun() {
    if (Module["preRun"]) {
        if (typeof Module["preRun"] == "function")
            Module["preRun"] = [Module["preRun"]];
        while (Module["preRun"].length)
            addOnPreRun(Module["preRun"].shift())
    }
    callRuntimeCallbacks(__ATPRERUN__)
}
function ensureInitRuntime() {
    if (runtimeInitialized)
        return;
    runtimeInitialized = true;
    callRuntimeCallbacks(__ATINIT__)
}
function preMain() {
    callRuntimeCallbacks(__ATMAIN__)
}
function exitRuntime() {
    callRuntimeCallbacks(__ATEXIT__)
}
function postRun() {
    if (Module["postRun"]) {
        if (typeof Module["postRun"] == "function")
            Module["postRun"] = [Module["postRun"]];
        while (Module["postRun"].length)
            addOnPostRun(Module["postRun"].shift())
    }
    callRuntimeCallbacks(__ATPOSTRUN__)
}
function addOnPreRun(cb) {
    __ATPRERUN__.unshift(cb)
}
Module["addOnPreRun"] = Module.addOnPreRun = addOnPreRun;
function addOnInit(cb) {
    __ATINIT__.unshift(cb)
}
Module["addOnInit"] = Module.addOnInit = addOnInit;
function addOnPreMain(cb) {
    __ATMAIN__.unshift(cb)
}
Module["addOnPreMain"] = Module.addOnPreMain = addOnPreMain;
function addOnExit(cb) {
    __ATEXIT__.unshift(cb)
}
Module["addOnExit"] = Module.addOnExit = addOnExit;
function addOnPostRun(cb) {
    __ATPOSTRUN__.unshift(cb)
}
Module["addOnPostRun"] = Module.addOnPostRun = addOnPostRun;
function intArrayFromString(stringy, dontAddNull, length) {
    var ret = (new Runtime.UTF8Processor).processJSString(stringy);
    if (length)
        ret.length = length;
    if (!dontAddNull)
        ret.push(0);
    return ret
}
Module["intArrayFromString"] = intArrayFromString;
function intArrayToString(array) {
    var ret = [];
    for (var i = 0; i < array.length; i++) {
        var chr = array[i];
        if (chr > 255)
            chr &= 255;
        ret.push(String.fromCharCode(chr))
    }
    return ret.join("")
}
Module["intArrayToString"] = intArrayToString;
function writeStringToMemory(string, buffer, dontAddNull) {
    var array = intArrayFromString(string, dontAddNull);
    var i = 0;
    while (i < array.length) {
        var chr = array[i];
        HEAP8[buffer + i >> 0] = chr;
        i = i + 1
    }
}
Module["writeStringToMemory"] = writeStringToMemory;
function writeArrayToMemory(array, buffer) {
    for (var i = 0; i < array.length; i++)
        HEAP8[buffer + i >> 0] = array[i]
}
Module["writeArrayToMemory"] = writeArrayToMemory;
function writeAsciiToMemory(str, buffer, dontAddNull) {
    for (var i = 0; i < str.length; i++)
        HEAP8[buffer + i >> 0] = str.charCodeAt(i);
    if (!dontAddNull)
        HEAP8[buffer + str.length >> 0] = 0
}
Module["writeAsciiToMemory"] = writeAsciiToMemory;
function unSign(value, bits, ignore) {
    if (value >= 0)
        return value;
    return bits <= 32 ? 2 * Math.abs(1 << bits - 1) + value : Math.pow(2, bits) + value
}
function reSign(value, bits, ignore) {
    if (value <= 0)
        return value;
    var half = bits <= 32 ? Math.abs(1 << bits - 1) : Math.pow(2, bits - 1);
    if (value >= half && (bits <= 32 || value > half))
        value = -2 * half + value;
    return value
}
if (!Math["imul"] || Math["imul"](4294967295, 5) !== -5)
    Math["imul"] = function imul(a, b) {
        var ah = a >>> 16;
        var al = a & 65535;
        var bh = b >>> 16;
        var bl = b & 65535;
        return al * bl + (ah * bl + al * bh << 16) | 0
    };
Math.imul = Math["imul"];
var Math_abs = Math.abs;
var Math_cos = Math.cos;
var Math_sin = Math.sin;
var Math_tan = Math.tan;
var Math_acos = Math.acos;
var Math_asin = Math.asin;
var Math_atan = Math.atan;
var Math_atan2 = Math.atan2;
var Math_exp = Math.exp;
var Math_log = Math.log;
var Math_sqrt = Math.sqrt;
var Math_ceil = Math.ceil;
var Math_floor = Math.floor;
var Math_pow = Math.pow;
var Math_imul = Math.imul;
var Math_fround = Math.fround;
var Math_min = Math.min;
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null;
function addRunDependency(id) {
    runDependencies++;
    if (Module["monitorRunDependencies"])
        Module["monitorRunDependencies"](runDependencies)
}
Module["addRunDependency"] = addRunDependency;
function removeRunDependency(id) {
    runDependencies--;
    if (Module["monitorRunDependencies"])
        Module["monitorRunDependencies"](runDependencies);
    if (runDependencies == 0) {
        if (runDependencyWatcher !== null) {
            clearInterval(runDependencyWatcher);
            runDependencyWatcher = null
        }
        if (dependenciesFulfilled) {
            var callback = dependenciesFulfilled;
            dependenciesFulfilled = null;
            callback()
        }
    }
}
Module["removeRunDependency"] = removeRunDependency;
Module["preloadedImages"] = {};
Module["preloadedAudios"] = {};
var memoryInitializer = null;
var __ZTVN10__cxxabiv117__class_type_infoE = 9E3;
var __ZTVN10__cxxabiv120__si_class_type_infoE = 9040;
STATIC_BASE = 8;
STATICTOP = STATIC_BASE + Runtime.alignMemory(9715);
__ATINIT__.push({
    func: function() {
        __GLOBAL__I_a()
    }
});
allocate([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 49, 53, 82, 97, 121, 67, 97, 115, 116, 67, 97, 108, 108, 98, 97, 99, 107, 0, 0, 0, 0, 0, 0, 0, 49, 55, 98, 50, 82, 97, 121, 67, 97, 115, 116, 67, 97, 108, 108, 98, 97, 99, 107, 0, 0, 0, 0, 0, 48, 35, 0, 0, 120, 0, 0, 0, 88, 35, 0, 0, 96, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 49, 55, 81, 117, 101, 114, 121, 65, 65, 66, 66, 67, 97, 108, 108,
98, 97, 99, 107, 0, 0, 0, 0, 0, 49, 53, 98, 50, 81, 117, 101, 114, 121, 67, 97, 108, 108, 98, 97, 99, 107, 0, 0, 0, 0, 0, 0, 0, 48, 35, 0, 0, 224, 0, 0, 0, 88, 35, 0, 0, 200, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 1, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 50, 50, 98, 50, 87, 111, 114, 108, 100, 67, 111, 110, 116, 97, 99, 116, 76, 105, 115, 116, 101, 110, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 49, 55, 98, 50, 67, 111, 110, 116, 97, 99, 116, 76, 105, 115, 116, 101, 110, 101, 114, 0, 0, 0, 0, 0, 48, 35, 0, 0, 96, 1, 0, 0, 88, 35, 0, 0, 64, 1, 0, 0, 120, 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, 56, 2, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 49, 49, 98, 50, 69, 100, 103, 101, 83, 104, 97, 112, 101, 0, 0, 0, 55, 98, 50, 83, 104, 97, 112, 101, 0, 0, 0, 0, 0, 0, 0, 0, 48, 35, 0, 0, 32, 2, 0, 0, 88, 35, 0, 0, 16, 2, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 2, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 49, 52, 98, 50,
80, 111, 108, 121, 103, 111, 110, 83, 104, 97, 112, 101, 0, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 120, 2, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 2, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 49, 51, 98, 50, 67, 105, 114, 99, 108, 101, 83, 104, 97, 112, 101, 0, 88, 35, 0, 0, 208, 2, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 3, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 7, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 49, 50, 98, 50, 67, 104, 97, 105, 110, 83, 104, 97, 112, 101, 0, 0, 88, 35, 0, 0, 32, 3, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 3, 0, 0, 15, 0, 0,
0, 16, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 49, 53, 98, 50, 67, 111, 110, 116, 97, 99, 116, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 0, 0, 0, 48, 35, 0, 0, 96, 3, 0, 0, 0, 0, 0, 0, 224, 3, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 17, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 49, 50, 98, 50, 77, 111, 117, 115, 101, 74, 111, 105, 110, 116, 0, 0, 55, 98, 50, 74, 111, 105, 110, 116, 0, 0, 0, 0, 0, 0, 0, 0, 48, 35, 0, 0, 200, 3, 0, 0, 88, 35, 0, 0, 184, 3, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 77, 111, 117, 115, 101, 32, 106, 111, 105, 110, 116, 32, 100, 117, 109, 112, 105, 110, 103, 32, 105, 115, 32, 110, 111,
116, 32, 115, 117, 112, 112, 111, 114, 116, 101, 100, 46, 10, 0, 0, 0, 0, 0, 0, 200, 5, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 20, 0, 0, 0, 10, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 32, 32, 98, 50, 77, 111, 116, 111, 114, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67,
111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 105, 110, 101, 97, 114, 79, 102, 102, 115, 101, 116, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 97, 110, 103, 117, 108, 97, 114, 79, 102, 102, 115, 101, 116, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 32, 32, 106, 100, 46, 109, 97, 120, 70, 111, 114, 99, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 109, 97, 120, 84, 111, 114, 113, 117, 101,
32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 114, 114, 101, 99, 116, 105, 111, 110, 70, 97, 99, 116, 111, 114, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100, 45, 62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 49, 50, 98, 50, 77, 111, 116, 111, 114, 74, 111, 105, 110, 116, 0, 0, 88, 35, 0, 0, 184, 5, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 7, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 23, 0, 0, 0, 10, 0, 0,
0, 24, 0, 0, 0, 25, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 98, 50, 68, 105, 115, 116, 97, 110, 99, 101, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67, 111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100,
46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 66, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 101, 110, 103, 116, 104, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 32, 32, 106, 100, 46, 102, 114, 101, 113, 117, 101, 110, 99, 121, 72, 122, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 32, 32, 106, 100, 46, 100,
97, 109, 112, 105, 110, 103, 82, 97, 116, 105, 111, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100, 45, 62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 49, 53, 98, 50, 68, 105, 115, 116, 97, 110, 99, 101, 74, 111, 105, 110, 116, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 128, 7, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 9, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, 26, 0, 0, 0, 10, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 32, 32, 98, 50, 70, 114, 105,
99, 116, 105, 111, 110, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67, 111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53,
108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 66, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 109, 97, 120, 70, 111, 114, 99, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 109, 97, 120, 84, 111, 114, 113, 117, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100, 45,
62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 49, 53, 98, 50, 70, 114, 105, 99, 116, 105, 111, 110, 74, 111, 105, 110, 116, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 56, 9, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 11, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 9, 0, 0, 0, 5, 0, 0, 0, 29, 0, 0, 0, 10, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 32, 32, 98, 50, 87, 101, 108, 100, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106,
100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67, 111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 66, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101,
102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 114, 101, 102, 101, 114, 101, 110, 99, 101, 65, 110, 103, 108, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 32, 32, 106, 100, 46, 102, 114, 101, 113, 117, 101, 110, 99, 121, 72, 122, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 32, 32, 106, 100, 46, 100, 97, 109, 112, 105, 110, 103, 82, 97, 116, 105, 111, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100, 45, 62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10,
0, 0, 0, 0, 0, 0, 49, 49, 98, 50, 87, 101, 108, 100, 74, 111, 105, 110, 116, 0, 0, 0, 88, 35, 0, 0, 8, 11, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 12, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 10, 0, 0, 0, 6, 0, 0, 0, 32, 0, 0, 0, 10, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 32, 32, 98, 50, 71, 101, 97, 114, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0,
0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67, 111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 106, 111, 105, 110, 116, 49, 32, 61, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 106, 111, 105, 110, 116, 50, 32, 61, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 114, 97, 116, 105, 111, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100,
45, 62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 49, 49, 98, 50, 71, 101, 97, 114, 74, 111, 105, 110, 116, 0, 0, 0, 88, 35, 0, 0, 104, 12, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 15, 0, 0, 29, 0, 0, 0, 30, 0, 0, 0, 11, 0, 0, 0, 7, 0, 0, 0, 35, 0, 0, 0, 10, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 32, 32, 98, 50, 80, 114, 105, 115, 109, 97, 116, 105, 99, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32,
32, 106, 100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67, 111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 66, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53,
108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 120, 105, 115, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 32, 32, 106, 100, 46, 114, 101, 102, 101, 114, 101, 110, 99, 101, 65, 110, 103, 108, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 32, 32, 106, 100, 46, 101, 110, 97, 98, 108, 101, 76, 105, 109, 105, 116, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 119, 101, 114, 84, 114, 97, 110, 115, 108, 97, 116, 105, 111, 110, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59,
10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 117, 112, 112, 101, 114, 84, 114, 97, 110, 115, 108, 97, 116, 105, 111, 110, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 101, 110, 97, 98, 108, 101, 77, 111, 116, 111, 114, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 32, 32, 106, 100, 46, 109, 111, 116, 111, 114, 83, 112, 101, 101, 100, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 109, 97, 120, 77, 111, 116, 111, 114, 70, 111, 114, 99, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91,
37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100, 45, 62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 49, 54, 98, 50, 80, 114, 105, 115, 109, 97, 116, 105, 99, 74, 111, 105, 110, 116, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 240, 14, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 16, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 12, 0, 0, 0, 8, 0, 0, 0, 38, 0, 0, 0, 10, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 32, 32, 98, 50, 82, 111, 112, 101, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32, 98, 111, 100,
105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67, 111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 66, 46, 83, 101,
116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 109, 97, 120, 76, 101, 110, 103, 116, 104, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100, 45, 62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 49, 49, 98, 50, 82, 111, 112, 101, 74, 111, 105, 110, 116, 0, 0, 0, 88, 35, 0, 0, 128, 16, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 3, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 41, 0, 0, 0, 10, 0,
0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 47, 47, 32, 68, 117, 109, 112, 32, 105, 115, 32, 110, 111, 116, 32, 115, 117, 112, 112, 111, 114, 116, 101, 100, 32, 102, 111, 114, 32, 116, 104, 105, 115, 32, 106, 111, 105, 110, 116, 32, 116, 121, 112, 101, 46, 10, 0, 0, 0, 0, 0, 0, 80, 19, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 13, 0, 0, 0, 9, 0, 0, 0, 44, 0, 0, 0, 10, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 32, 32, 98, 50, 82, 101, 118, 111, 108, 117, 116, 101, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32,
98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67, 111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 66,
46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 114, 101, 102, 101, 114, 101, 110, 99, 101, 65, 110, 103, 108, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 32, 32, 106, 100, 46, 101, 110, 97, 98, 108, 101, 76, 105, 109, 105, 116, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 119, 101, 114, 65, 110, 103, 108, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 117, 112, 112, 101, 114, 65, 110, 103, 108, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101,
102, 59, 10, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 101, 110, 97, 98, 108, 101, 77, 111, 116, 111, 114, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 32, 32, 106, 100, 46, 109, 111, 116, 111, 114, 83, 112, 101, 101, 100, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 109, 97, 120, 77, 111, 116, 111, 114, 84, 111, 114, 113, 117, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100, 45, 62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10, 0, 0, 0, 0, 0,
0, 49, 53, 98, 50, 82, 101, 118, 111, 108, 117, 116, 101, 74, 111, 105, 110, 116, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 56, 19, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 21, 0, 0, 41, 0, 0, 0, 42, 0, 0, 0, 14, 0, 0, 0, 10, 0, 0, 0, 47, 0, 0, 0, 10, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 32, 32, 98, 50, 87, 104, 101, 101, 108, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100,
93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67, 111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 66, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65,
120, 105, 115, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 32, 32, 106, 100, 46, 101, 110, 97, 98, 108, 101, 77, 111, 116, 111, 114, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 32, 32, 106, 100, 46, 109, 111, 116, 111, 114, 83, 112, 101, 101, 100, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 109, 97, 120, 77, 111, 116, 111, 114, 84, 111, 114, 113, 117, 101, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 32, 32, 106, 100, 46, 102, 114, 101, 113, 117, 101, 110, 99, 121, 72, 122, 32, 61, 32, 37, 46, 49, 53, 108,
101, 102, 59, 10, 0, 0, 0, 0, 32, 32, 106, 100, 46, 100, 97, 109, 112, 105, 110, 103, 82, 97, 116, 105, 111, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100, 45, 62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 49, 50, 98, 50, 87, 104, 101, 101, 108, 74, 111, 105, 110, 116, 0, 0, 88, 35, 0, 0, 112, 21, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 23, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 15, 0, 0, 0, 11, 0, 0, 0, 50, 0, 0, 0, 47, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 18, 0, 0, 0,
0, 0, 0, 0, 32, 32, 98, 50, 80, 117, 108, 108, 101, 121, 74, 111, 105, 110, 116, 68, 101, 102, 32, 106, 100, 59, 10, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 65, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 98, 111, 100, 121, 66, 32, 61, 32, 98, 111, 100, 105, 101, 115, 91, 37, 100, 93, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 99, 111, 108, 108, 105, 100, 101, 67, 111, 110, 110, 101, 99, 116, 101, 100, 32, 61, 32, 98, 111, 111, 108, 40, 37, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 103, 114, 111, 117, 110, 100, 65, 110, 99, 104, 111, 114, 65, 46, 83, 101,
116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 103, 114, 111, 117, 110, 100, 65, 110, 99, 104, 111, 114, 66, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 65, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32, 37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 111, 99, 97, 108, 65, 110, 99, 104, 111, 114, 66, 46, 83, 101, 116, 40, 37, 46, 49, 53, 108, 101, 102, 44, 32,
37, 46, 49, 53, 108, 101, 102, 41, 59, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 101, 110, 103, 116, 104, 65, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 108, 101, 110, 103, 116, 104, 66, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 106, 100, 46, 114, 97, 116, 105, 111, 32, 61, 32, 37, 46, 49, 53, 108, 101, 102, 59, 10, 0, 0, 32, 32, 106, 111, 105, 110, 116, 115, 91, 37, 100, 93, 32, 61, 32, 109, 95, 119, 111, 114, 108, 100, 45, 62, 67, 114, 101, 97, 116, 101, 74, 111, 105, 110, 116, 40, 38, 106, 100, 41, 59, 10, 0, 0, 0, 0, 0, 0, 49, 51, 98, 50, 80, 117,
108, 108, 101, 121, 74, 111, 105, 110, 116, 0, 88, 35, 0, 0, 144, 23, 0, 0, 216, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 7, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 50, 52, 98, 50, 67, 104, 97, 105, 110, 65, 110, 100, 80, 111, 108, 121, 103, 111, 110, 67, 111, 110, 116, 97, 99, 116, 0, 0, 0, 0, 0, 0, 57, 98, 50, 67, 111, 110, 116, 97, 99, 116, 0, 0, 0, 0, 0, 0, 48, 35, 0, 0, 232, 23, 0, 0, 88, 35, 0, 0, 200, 23, 0, 0, 248, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 23, 0, 0, 1, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 25, 0, 0, 8, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 50, 53, 98, 50, 80, 111, 108, 121, 103, 111, 110, 65, 110, 100, 67, 105, 114, 99, 108, 101, 67, 111, 110, 116, 97, 99, 116, 0, 0, 0, 0, 0, 88, 35, 0, 0, 8, 25, 0, 0, 248, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 25,
0, 0, 9, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 49, 53, 98, 50, 67, 105, 114, 99, 108, 101, 67, 111, 110, 116, 97, 99, 116, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 80, 25, 0, 0, 248, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 25, 0, 0, 10, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 50, 50, 98, 50, 69, 100, 103, 101, 65, 110, 100, 67, 105, 114, 99, 108, 101, 67, 111, 110, 116, 97, 99, 116, 0, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 144, 25, 0, 0, 248, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 25, 0, 0, 11, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 50, 51, 98, 50, 67, 104, 97, 105, 110, 65, 110, 100, 67, 105, 114, 99, 108, 101, 67, 111, 110, 116, 97, 99, 116, 0, 0, 0, 0, 0, 0, 0,
88, 35, 0, 0, 216, 25, 0, 0, 248, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 26, 0, 0, 12, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 50, 51, 98, 50, 69, 100, 103, 101, 65, 110, 100, 80, 111, 108, 121, 103, 111, 110, 67, 111, 110, 116, 97, 99, 116, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 32, 26, 0, 0, 248, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 26, 0, 0, 13, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 49, 54, 98, 50, 80, 111, 108, 121, 103, 111, 110, 67, 111, 110, 116, 97, 99, 116, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 104, 26, 0, 0, 248, 23, 0, 0, 0, 0, 0, 0, 72, 3, 0, 0, 0, 0, 0, 0, 168, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 1, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 120, 27, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 14, 0, 0, 0, 90, 78, 49, 54, 98, 50, 80, 97, 114, 116, 105, 99, 108, 101, 83, 121, 115, 116, 101, 109, 49, 52, 83, 111, 108, 118, 101, 67, 111, 108, 108, 105, 115, 105, 111, 110, 69, 82, 75, 49, 48, 98, 50, 84, 105, 109, 101, 83, 116, 101, 112, 69, 50, 50, 83, 111, 108, 118, 101, 67, 111, 108, 108, 105, 115, 105, 111, 110, 67, 97, 108, 108, 98, 97, 99, 107, 0, 0, 0, 0, 51, 48, 98, 50, 70, 105, 120, 116, 117, 114, 101, 80, 97, 114, 116, 105, 99, 108, 101, 81, 117, 101, 114, 121, 67, 97, 108, 108, 98, 97, 99,
107, 0, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 64, 27, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 240, 26, 0, 0, 104, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 27, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 15, 0, 0, 0, 90, 78, 49, 54, 98, 50, 80, 97, 114, 116, 105, 99, 108, 101, 83, 121, 115, 116, 101, 109, 49, 56, 85, 112, 100, 97, 116, 101, 66, 111, 100, 121, 67, 111, 110, 116, 97, 99, 116, 115, 69, 118, 69, 50, 54, 85, 112, 100, 97, 116, 101, 66, 111, 100, 121, 67, 111, 110, 116, 97, 99, 116, 115, 67, 97, 108, 108, 98, 97, 99, 107, 0, 88, 35, 0, 0, 168, 27, 0, 0, 104, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 28, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 16,
0, 0, 0, 0, 0, 0, 0, 90, 78, 49, 54, 98, 50, 80, 97, 114, 116, 105, 99, 108, 101, 83, 121, 115, 116, 101, 109, 50, 48, 85, 112, 100, 97, 116, 101, 80, 97, 105, 114, 115, 65, 110, 100, 84, 114, 105, 97, 100, 115, 69, 105, 105, 82, 75, 78, 83, 95, 49, 54, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 70, 105, 108, 116, 101, 114, 69, 69, 50, 48, 85, 112, 100, 97, 116, 101, 84, 114, 105, 97, 100, 115, 67, 97, 108, 108, 98, 97, 99, 107, 0, 0, 0, 0, 78, 49, 54, 98, 50, 86, 111, 114, 111, 110, 111, 105, 68, 105, 97, 103, 114, 97, 109, 49, 50, 78, 111, 100, 101, 67, 97, 108, 108, 98, 97, 99, 107, 69, 0, 0, 0, 0, 0, 0, 48, 35, 0, 0, 120, 28, 0, 0, 88,
35, 0, 0, 24, 28, 0, 0, 160, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 29, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 21, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 90, 78, 49, 54, 98, 50, 80, 97, 114, 116, 105, 99, 108, 101, 83, 121, 115, 116, 101, 109, 52, 49, 85, 112, 100, 97, 116, 101, 80, 97, 105, 114, 115, 65, 110, 100, 84, 114, 105, 97, 100, 115, 87, 105, 116, 104, 82, 101, 97, 99, 116, 105, 118, 101, 80, 97, 114, 116, 105, 99, 108, 101, 115, 69, 118, 69, 49, 52, 82, 101, 97, 99, 116, 105, 118, 101, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 0, 0, 78, 49, 54, 98, 50, 80, 97, 114, 116, 105, 99, 108, 101, 83, 121, 115, 116, 101, 109, 49, 54, 67, 111, 110, 110, 101,
99, 116, 105, 111, 110, 70, 105, 108, 116, 101, 114, 69, 0, 0, 48, 35, 0, 0, 48, 29, 0, 0, 88, 35, 0, 0, 216, 28, 0, 0, 88, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 29, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 22, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 30, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 22, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 90, 78, 49, 54, 98, 50, 80, 97, 114, 116, 105, 99, 108, 101, 83, 121, 115, 116, 101, 109, 49, 56, 74, 111, 105, 110, 80, 97, 114, 116, 105, 99, 108, 101, 71, 114, 111, 117, 112, 115, 69, 80, 49, 53, 98, 50, 80, 97, 114, 116, 105, 99, 108, 101, 71, 114, 111, 117, 112, 83, 49, 95, 69, 50, 52, 74, 111, 105, 110, 80, 97, 114, 116,
105, 99, 108, 101, 71, 114, 111, 117, 112, 115, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 176, 29, 0, 0, 88, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 30, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 23, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 90, 78, 49, 54, 98, 50, 80, 97, 114, 116, 105, 99, 108, 101, 83, 121, 115, 116, 101, 109, 51, 51, 67, 114, 101, 97, 116, 101, 80, 97, 114, 116, 105, 99, 108, 101, 115, 87, 105, 116, 104, 83, 104, 97, 112, 101, 115, 70, 111, 114, 71, 114, 111, 117, 112, 69, 80, 75, 80, 75, 55, 98, 50, 83, 104, 97, 112, 101, 105, 82, 75, 49, 56, 98, 50, 80, 97, 114, 116, 105, 99,
108, 101, 71, 114, 111, 117, 112, 68, 101, 102, 82, 75, 49, 49, 98, 50, 84, 114, 97, 110, 115, 102, 111, 114, 109, 69, 49, 52, 67, 111, 109, 112, 111, 115, 105, 116, 101, 83, 104, 97, 112, 101, 0, 0, 0, 0, 0, 88, 35, 0, 0, 80, 30, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 31, 0, 0, 85, 0, 0, 0, 86, 0, 0, 0, 24, 0, 0, 0, 10, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 90, 78, 49, 54, 98, 50, 80, 97, 114, 116, 105, 99, 108, 101, 83, 121, 115, 116, 101, 109, 50, 51, 68, 101, 115, 116, 114, 111, 121, 80, 97, 114, 116, 105, 99, 108, 101, 115, 73, 110, 83, 104, 97, 112, 101, 69, 82, 75, 55, 98, 50, 83, 104, 97, 112, 101, 82, 75, 49, 49, 98, 50, 84, 114, 97, 110, 115,
102, 111, 114, 109, 98, 69, 51, 49, 68, 101, 115, 116, 114, 111, 121, 80, 97, 114, 116, 105, 99, 108, 101, 115, 73, 110, 83, 104, 97, 112, 101, 67, 97, 108, 108, 98, 97, 99, 107, 0, 0, 0, 0, 0, 0, 88, 35, 0, 0, 0, 31, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 64, 0, 0, 0, 96, 0, 0, 0, 128, 0, 0, 0, 160, 0, 0, 0, 192, 0, 0, 0, 224, 0, 0, 0, 0, 1, 0, 0, 64, 1, 0, 0, 128, 1, 0, 0, 192, 1, 0, 0, 0, 2, 0, 0, 128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 105, 113, 117, 105, 100, 70, 117, 110, 32, 49, 46, 49, 46, 48, 0, 104, 34, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 116, 57, 116, 121, 112, 101, 95, 105, 110, 102, 111, 0, 0, 0, 0, 48, 35, 0, 0, 160, 34, 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, 88, 35, 0, 0, 184, 34, 0, 0, 176, 34, 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, 88, 35, 0, 0, 240, 34, 0, 0, 224, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 35, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 0, 11, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 160, 35, 0, 0, 87, 0, 0, 0, 91, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 0, 11, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 19, 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, 88, 35, 0, 0, 120, 35, 0, 0, 24, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 37, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 115, 116, 100, 58, 58, 98, 97, 100, 95, 97, 108, 108, 111, 99, 0, 0, 83, 116, 57, 98, 97, 100, 95, 97, 108, 108, 111, 99, 0, 0, 0, 0, 88, 35, 0, 0, 216, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE);
var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
assert(tempDoublePtr % 8 == 0);
function copyTempFloat(ptr) {
    HEAP8[tempDoublePtr] = HEAP8[ptr];
    HEAP8[tempDoublePtr + 1] = HEAP8[ptr + 1];
    HEAP8[tempDoublePtr + 2] = HEAP8[ptr + 2];
    HEAP8[tempDoublePtr + 3] = HEAP8[ptr + 3]
}
function copyTempDouble(ptr) {
    HEAP8[tempDoublePtr] = HEAP8[ptr];
    HEAP8[tempDoublePtr + 1] = HEAP8[ptr + 1];
    HEAP8[tempDoublePtr + 2] = HEAP8[ptr + 2];
    HEAP8[tempDoublePtr + 3] = HEAP8[ptr + 3];
    HEAP8[tempDoublePtr + 4] = HEAP8[ptr + 4];
    HEAP8[tempDoublePtr + 5] = HEAP8[ptr + 5];
    HEAP8[tempDoublePtr + 6] = HEAP8[ptr + 6];
    HEAP8[tempDoublePtr + 7] = HEAP8[ptr + 7]
}
function _cosf() {
    return Math_cos.apply(null, arguments)
}
function ___cxa_pure_virtual() {
    ABORT = true;
    throw "Pure virtual function called!";
}
function _b2WorldEndContactBody(contactPtr) {
    b2World.EndContactBody(contactPtr)
}
function _floorf() {
    return Math_floor.apply(null, arguments)
}
function __ZSt18uncaught_exceptionv() {
    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:
        var definite_type_infoAddr = HEAP32[definiteType >> 2] - 8;
        var definite_type_info =
        HEAP32[definite_type_infoAddr >> 2];
        if (definite_type_info == 0) {
            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;
    case 1:
        return false;
    case 2:
        var parentTypeAddr = possibilityType + 8;
        var parentType = HEAP32[parentTypeAddr >> 2];
        return ___cxa_does_inherit(definiteType, parentType,
        possibility);
    default:
        return false
    }
}
var ___cxa_last_thrown_exception = 0;
function ___resumeException(ptr) {
    if (!___cxa_last_thrown_exception)
        ___cxa_last_thrown_exception = 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.";
}
var ___cxa_exception_header_size = 8;
function ___cxa_find_matching_catch(thrown, throwntype) {
    if (thrown == -1)
        thrown = ___cxa_last_thrown_exception;
    header = thrown - ___cxa_exception_header_size;
    if (throwntype == -1)
        throwntype = HEAP32[header >> 2];
    var typeArray = Array.prototype.slice.call(arguments, 2);
    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]
    }
    for (var i = 0; i < typeArray.length; i++)
        if (___cxa_does_inherit(typeArray[i],
        throwntype, thrown))
            return (asm["setTempRet0"](typeArray[i]), thrown) | 0;
    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
        } catch (e) {}
        try {
            HEAP32[__ZTVN10__cxxabiv117__class_type_infoE >> 2] = 1
        } catch (e) {}
        try {
            HEAP32[__ZTVN10__cxxabiv120__si_class_type_infoE >> 2] = 2
        } catch (e) {}
        ___cxa_throw.initialized = true
    }
    var header = ptr - ___cxa_exception_header_size;
    HEAP32[header >> 2] = type;
    HEAP32[header + 4 >> 2] = destructor;
    ___cxa_last_thrown_exception = ptr;
    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.";
}
Module["_memset"] = _memset;
function _b2WorldRayCastCallback(fixturePtr, pointX, pointY, normalX, normalY, fraction) {
    return b2World.RayCast(fixturePtr, pointX, pointY, normalX, normalY, fraction)
}
var _FtoIHigh = true;
function __exit(status) {
    Module["exit"](status)
}
function _exit(status) {
    __exit(status)
}
function __ZSt9terminatev() {
    _exit(-1234)
}
function _abort() {
    Module["abort"]()
}
function _b2WorldBeginContactBody(contactPtr) {
    b2World.BeginContactBody(contactPtr)
}
var ___cxa_caught_exceptions = [];
function ___cxa_begin_catch(ptr) {
    __ZSt18uncaught_exceptionv.uncaught_exception--;
    ___cxa_caught_exceptions.push(___cxa_last_thrown_exception);
    return ptr
}
function _sinf() {
    return Math_sin.apply(null, arguments)
}
function _b2WorldPostSolve(contactPtr, impulsePtr) {
    b2World.PostSolve(contactPtr, impulsePtr)
}
Module["_strlen"] = _strlen;
function _sqrtf() {
    return Math_sqrt.apply(null, arguments)
}
function _b2WorldQueryAABB(fixturePtr) {
    return b2World.QueryAABB(fixturePtr)
}
Module["_i64Add"] = _i64Add;
function _sbrk(bytes) {
    var self = _sbrk;
    if (!self.called) {
        DYNAMICTOP = alignMemoryPage(DYNAMICTOP);
        self.called = true;
        assert(Runtime.dynamicAlloc);
        self.alloc = Runtime.dynamicAlloc;
        Runtime.dynamicAlloc = function() {
            abort("cannot dynamically allocate, sbrk now has control")
        }
    }
    var ret = DYNAMICTOP;
    if (bytes != 0)
        self.alloc(bytes);
    return ret
}
function _emscripten_memcpy_big(dest, src, num) {
    HEAPU8.set(HEAPU8.subarray(src, src + num), dest);
    return dest
}
Module["_memcpy"] = _memcpy;
Module["_memmove"] = _memmove;
var ___errno_state = 0;
function ___setErrNo(value) {
    HEAP32[___errno_state >> 2] = value;
    return value
}
function ___errno_location() {
    return ___errno_state
}
var _FtoILow = true;
function __ZNSt9exceptionD2Ev() {}
function _b2WorldPreSolve(contactPtr, oldManifoldPtr) {
    b2World.PreSolve(contactPtr, oldManifoldPtr)
}
var ERRNO_CODES = {
    EPERM: 1,
    ENOENT: 2,
    ESRCH: 3,
    EINTR: 4,
    EIO: 5,
    ENXIO: 6,
    E2BIG: 7,
    ENOEXEC: 8,
    EBADF: 9,
    ECHILD: 10,
    EAGAIN: 11,
    EWOULDBLOCK: 11,
    ENOMEM: 12,
    EACCES: 13,
    EFAULT: 14,
    ENOTBLK: 15,
    EBUSY: 16,
    EEXIST: 17,
    EXDEV: 18,
    ENODEV: 19,
    ENOTDIR: 20,
    EISDIR: 21,
    EINVAL: 22,
    ENFILE: 23,
    EMFILE: 24,
    ENOTTY: 25,
    ETXTBSY: 26,
    EFBIG: 27,
    ENOSPC: 28,
    ESPIPE: 29,
    EROFS: 30,
    EMLINK: 31,
    EPIPE: 32,
    EDOM: 33,
    ERANGE: 34,
    ENOMSG: 42,
    EIDRM: 43,
    ECHRNG: 44,
    EL2NSYNC: 45,
    EL3HLT: 46,
    EL3RST: 47,
    ELNRNG: 48,
    EUNATCH: 49,
    ENOCSI: 50,
    EL2HLT: 51,
    EDEADLK: 35,
    ENOLCK: 37,
    EBADE: 52,
    EBADR: 53,
    EXFULL: 54,
    ENOANO: 55,
    EBADRQC: 56,
    EBADSLT: 57,
    EDEADLOCK: 35,
    EBFONT: 59,
    ENOSTR: 60,
    ENODATA: 61,
    ETIME: 62,
    ENOSR: 63,
    ENONET: 64,
    ENOPKG: 65,
    EREMOTE: 66,
    ENOLINK: 67,
    EADV: 68,
    ESRMNT: 69,
    ECOMM: 70,
    EPROTO: 71,
    EMULTIHOP: 72,
    EDOTDOT: 73,
    EBADMSG: 74,
    ENOTUNIQ: 76,
    EBADFD: 77,
    EREMCHG: 78,
    ELIBACC: 79,
    ELIBBAD: 80,
    ELIBSCN: 81,
    ELIBMAX: 82,
    ELIBEXEC: 83,
    ENOSYS: 38,
    ENOTEMPTY: 39,
    ENAMETOOLONG: 36,
    ELOOP: 40,
    EOPNOTSUPP: 95,
    EPFNOSUPPORT: 96,
    ECONNRESET: 104,
    ENOBUFS: 105,
    EAFNOSUPPORT: 97,
    EPROTOTYPE: 91,
    ENOTSOCK: 88,
    ENOPROTOOPT: 92,
    ESHUTDOWN: 108,
    ECONNREFUSED: 111,
    EADDRINUSE: 98,
    ECONNABORTED: 103,
    ENETUNREACH: 101,
    ENETDOWN: 100,
    ETIMEDOUT: 110,
    EHOSTDOWN: 112,
    EHOSTUNREACH: 113,
    EINPROGRESS: 115,
    EALREADY: 114,
    EDESTADDRREQ: 89,
    EMSGSIZE: 90,
    EPROTONOSUPPORT: 93,
    ESOCKTNOSUPPORT: 94,
    EADDRNOTAVAIL: 99,
    ENETRESET: 102,
    EISCONN: 106,
    ENOTCONN: 107,
    ETOOMANYREFS: 109,
    EUSERS: 87,
    EDQUOT: 122,
    ESTALE: 116,
    ENOTSUP: 95,
    ENOMEDIUM: 123,
    EILSEQ: 84,
    EOVERFLOW: 75,
    ECANCELED: 125,
    ENOTRECOVERABLE: 131,
    EOWNERDEAD: 130,
    ESTRPIPE: 86
};
var ERRNO_MESSAGES = {
    0: "Success",
    1: "Not super-user",
    2: "No such file or directory",
    3: "No such process",
    4: "Interrupted system call",
    5: "I/O error",
    6: "No such device or address",
    7: "Arg list too long",
    8: "Exec format error",
    9: "Bad file number",
    10: "No children",
    11: "No more processes",
    12: "Not enough core",
    13: "Permission denied",
    14: "Bad address",
    15: "Block device required",
    16: "Mount device busy",
    17: "File exists",
    18: "Cross-device link",
    19: "No such device",
    20: "Not a directory",
    21: "Is a directory",
    22: "Invalid argument",
    23: "Too many open files in system",
    24: "Too many open files",
    25: "Not a typewriter",
    26: "Text file busy",
    27: "File too large",
    28: "No space left on device",
    29: "Illegal seek",
    30: "Read only file system",
    31: "Too many links",
    32: "Broken pipe",
    33: "Math arg out of domain of func",
    34: "Math result not representable",
    35: "File locking deadlock error",
    36: "File or path name too long",
    37: "No record locks available",
    38: "Function not implemented",
    39: "Directory not empty",
    40: "Too many symbolic links",
    42: "No message of desired type",
    43: "Identifier removed",
    44: "Channel number out of range",
    45: "Level 2 not synchronized",
    46: "Level 3 halted",
    47: "Level 3 reset",
    48: "Link number out of range",
    49: "Protocol driver not attached",
    50: "No CSI structure available",
    51: "Level 2 halted",
    52: "Invalid exchange",
    53: "Invalid request descriptor",
    54: "Exchange full",
    55: "No anode",
    56: "Invalid request code",
    57: "Invalid slot",
    59: "Bad font file fmt",
    60: "Device not a stream",
    61: "No data (for no delay io)",
    62: "Timer expired",
    63: "Out of streams resources",
    64: "Machine is not on the network",
    65: "Package not installed",
    66: "The object is remote",
    67: "The link has been severed",
    68: "Advertise error",
    69: "Srmount error",
    70: "Communication error on send",
    71: "Protocol error",
    72: "Multihop attempted",
    73: "Cross mount point (not really error)",
    74: "Trying to read unreadable message",
    75: "Value too large for defined data type",
    76: "Given log. name not unique",
    77: "f.d. invalid for this operation",
    78: "Remote address changed",
    79: "Can   access a needed shared lib",
    80: "Accessing a corrupted shared lib",
    81: ".lib section in a.out corrupted",
    82: "Attempting to link in too many libs",
    83: "Attempting to exec a shared library",
    84: "Illegal byte sequence",
    86: "Streams pipe error",
    87: "Too many users",
    88: "Socket operation on non-socket",
    89: "Destination address required",
    90: "Message too long",
    91: "Protocol wrong type for socket",
    92: "Protocol not available",
    93: "Unknown protocol",
    94: "Socket type not supported",
    95: "Not supported",
    96: "Protocol family not supported",
    97: "Address family not supported by protocol family",
    98: "Address already in use",
    99: "Address not available",
    100: "Network interface is not configured",
    101: "Network is unreachable",
    102: "Connection reset by network",
    103: "Connection aborted",
    104: "Connection reset by peer",
    105: "No buffer space available",
    106: "Socket is already connected",
    107: "Socket is not connected",
    108: "Can't send after socket shutdown",
    109: "Too many references",
    110: "Connection timed out",
    111: "Connection refused",
    112: "Host is down",
    113: "Host is unreachable",
    114: "Socket already connected",
    115: "Connection already in progress",
    116: "Stale file handle",
    122: "Quota exceeded",
    123: "No medium (in tape drive)",
    125: "Operation canceled",
    130: "Previous owner died",
    131: "State not recoverable"
};
var TTY = {
    ttys: [],
    init: function() {},
    shutdown: function() {},
    register: function(dev, ops) {
        TTY.ttys[dev] = {
            input: [],
            output: [],
            ops: ops
        };
        FS.registerDevice(dev, TTY.stream_ops)
    },
    stream_ops: {
        open: function(stream) {
            var tty = TTY.ttys[stream.node.rdev];
            if (!tty)
                throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
            stream.tty = tty;
            stream.seekable = false
        },
        close: function(stream) {
            if (stream.tty.output.length)
                stream.tty.ops.put_char(stream.tty, 10)
        },
        read: function(stream, buffer, offset, length, pos) {
            if (!stream.tty || !stream.tty.ops.get_char)
                throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
            var bytesRead = 0;
            for (var i = 0; i < length; i++) {
                var result;
                try {
                    result = stream.tty.ops.get_char(stream.tty)
                } catch (e) {
                    throw new FS.ErrnoError(ERRNO_CODES.EIO);
                }
                if (result === undefined && bytesRead === 0)
                    throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
                if (result === null || result === undefined)
                    break;
                bytesRead++;
                buffer[offset + i] = result
            }
            if (bytesRead)
                stream.node.timestamp = Date.now();
            return bytesRead
        },
        write: function(stream, buffer, offset, length, pos) {
            if (!stream.tty || !stream.tty.ops.put_char)
                throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
            for (var i = 0; i < length; i++)
                try {
                    stream.tty.ops.put_char(stream.tty, buffer[offset + i])
                } catch (e) {
                    throw new FS.ErrnoError(ERRNO_CODES.EIO);
                }
            if (length)
                stream.node.timestamp = Date.now();
            return i
        }
    },
    default_tty_ops: {
        get_char: function(tty) {
            if (!tty.input.length) {
                var result = null;
                if (ENVIRONMENT_IS_NODE) {
                    result = process["stdin"]["read"]();
                    if (!result) {
                        if (process["stdin"]["_readableState"] && process["stdin"]["_readableState"]["ended"])
                            return null;
                        return undefined
                    }
                } else if (typeof window != "undefined" && typeof window.prompt ==
                "function") {
                    result = window.prompt("Input: ");
                    if (result !== null)
                        result += "\n"
                } else if (typeof readline == "function") {
                    result = readline();
                    if (result !== null)
                        result += "\n"
                }
                if (!result)
                    return null;
                tty.input = intArrayFromString(result, true)
            }
            return tty.input.shift()
        },
        put_char: function(tty, val) {
            if (val === null || val === 10) {
                Module["print"](tty.output.join(""));
                tty.output = []
            } else
                tty.output.push(TTY.utf8.processCChar(val))
        }
    },
    default_tty1_ops: {
        put_char: function(tty, val) {
            if (val === null || val === 10) {
                Module["printErr"](tty.output.join(""));
                tty.output = []
            } else
                tty.output.push(TTY.utf8.processCChar(val))
        }
    }
};
var MEMFS = {
    ops_table: null,
    mount: function(mount) {
        return MEMFS.createNode(null, "/", 16384 | 511, 0)
    },
    createNode: function(parent, name, mode, dev) {
        if (FS.isBlkdev(mode) || FS.isFIFO(mode))
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        if (!MEMFS.ops_table)
            MEMFS.ops_table = {
                dir: {
                    node: {
                        getattr: MEMFS.node_ops.getattr,
                        setattr: MEMFS.node_ops.setattr,
                        lookup: MEMFS.node_ops.lookup,
                        mknod: MEMFS.node_ops.mknod,
                        rename: MEMFS.node_ops.rename,
                        unlink: MEMFS.node_ops.unlink,
                        rmdir: MEMFS.node_ops.rmdir,
                        readdir: MEMFS.node_ops.readdir,
                        symlink: MEMFS.node_ops.symlink
                    },
                    stream: {
                        llseek: MEMFS.stream_ops.llseek
                    }
                },
                file: {
                    node: {
                        getattr: MEMFS.node_ops.getattr,
                        setattr: MEMFS.node_ops.setattr
                    },
                    stream: {
                        llseek: MEMFS.stream_ops.llseek,
                        read: MEMFS.stream_ops.read,
                        write: MEMFS.stream_ops.write,
                        allocate: MEMFS.stream_ops.allocate,
                        mmap: MEMFS.stream_ops.mmap
                    }
                },
                link: {
                    node: {
                        getattr: MEMFS.node_ops.getattr,
                        setattr: MEMFS.node_ops.setattr,
                        readlink: MEMFS.node_ops.readlink
                    },
                    stream: {}
                },
                chrdev: {
                    node: {
                        getattr: MEMFS.node_ops.getattr,
                        setattr: MEMFS.node_ops.setattr
                    },
                    stream: FS.chrdev_stream_ops
                }
            };
        var node = FS.createNode(parent, name, mode, dev);
        if (FS.isDir(node.mode)) {
            node.node_ops = MEMFS.ops_table.dir.node;
            node.stream_ops = MEMFS.ops_table.dir.stream;
            node.contents = {}
        } else if (FS.isFile(node.mode)) {
            node.node_ops = MEMFS.ops_table.file.node;
            node.stream_ops = MEMFS.ops_table.file.stream;
            node.usedBytes = 0;
            node.contents = null
        } else if (FS.isLink(node.mode)) {
            node.node_ops = MEMFS.ops_table.link.node;
            node.stream_ops = MEMFS.ops_table.link.stream
        } else if (FS.isChrdev(node.mode)) {
            node.node_ops = MEMFS.ops_table.chrdev.node;
            node.stream_ops = MEMFS.ops_table.chrdev.stream
        }
        node.timestamp = Date.now();
        if (parent)
            parent.contents[name] = node;
        return node
    },
    getFileDataAsRegularArray: function(node) {
        if (node.contents && node.contents.subarray) {
            var arr = [];
            for (var i = 0; i < node.usedBytes; ++i)
                arr.push(node.contents[i]);
            return arr
        }
        return node.contents
    },
    getFileDataAsTypedArray: function(node) {
        if (node.contents && node.contents.subarray)
            return node.contents.subarray(0, node.usedBytes);
        return new Uint8Array(node.contents)
    },
    expandFileStorage: function(node,
    newCapacity) {
        if (node.contents && node.contents.subarray && newCapacity > node.contents.length) {
            node.contents = MEMFS.getFileDataAsRegularArray(node);
            node.usedBytes = node.contents.length
        }
        if (!node.contents || node.contents.subarray) {
            var prevCapacity = node.contents ? node.contents.buffer.byteLength : 0;
            if (prevCapacity >= newCapacity)
                return;
            var CAPACITY_DOUBLING_MAX = 1024 * 1024;
            newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) | 0);
            if (prevCapacity != 0)
                newCapacity = Math.max(newCapacity,
                256);
            var oldContents = node.contents;
            node.contents = new Uint8Array(newCapacity);
            if (node.usedBytes > 0)
                node.contents.set(oldContents.subarray(0, node.usedBytes), 0);
            return
        }
        if (!node.contents && newCapacity > 0)
            node.contents = [];
        while (node.contents.length < newCapacity)
            node.contents.push(0)
    },
    resizeFileStorage: function(node, newSize) {
        if (node.usedBytes == newSize)
            return;
        if (newSize == 0) {
            node.contents = null;
            node.usedBytes = 0;
            return
        }
        if (!node.contents || node.contents.subarray) {
            var oldContents = node.contents;
            node.contents = new Uint8Array(new ArrayBuffer(newSize));
            node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes)));
            node.usedBytes = newSize;
            return
        }
        if (!node.contents)
            node.contents = [];
        if (node.contents.length > newSize)
            node.contents.length = newSize;
        else
            while (node.contents.length < newSize)
                node.contents.push(0);
        node.usedBytes = newSize
    },
    node_ops: {
        getattr: function(node) {
            var attr = {};
            attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
            attr.ino = node.id;
            attr.mode = node.mode;
            attr.nlink = 1;
            attr.uid = 0;
            attr.gid = 0;
            attr.rdev = node.rdev;
            if (FS.isDir(node.mode))
                attr.size = 4096;
            else if (FS.isFile(node.mode))
                attr.size = node.usedBytes;
            else if (FS.isLink(node.mode))
                attr.size = node.link.length;
            else
                attr.size = 0;
            attr.atime = new Date(node.timestamp);
            attr.mtime = new Date(node.timestamp);
            attr.ctime = new Date(node.timestamp);
            attr.blksize = 4096;
            attr.blocks = Math.ceil(attr.size / attr.blksize);
            return attr
        },
        setattr: function(node, attr) {
            if (attr.mode !== undefined)
                node.mode = attr.mode;
            if (attr.timestamp !== undefined)
                node.timestamp = attr.timestamp;
            if (attr.size !== undefined)
                MEMFS.resizeFileStorage(node, attr.size)
        },
        lookup: function(parent, name) {
            throw FS.genericErrors[ERRNO_CODES.ENOENT];
        },
        mknod: function(parent, name, mode, dev) {
            return MEMFS.createNode(parent, name, mode, dev)
        },
        rename: function(old_node, new_dir, new_name) {
            if (FS.isDir(old_node.mode)) {
                var new_node;
                try {
                    new_node = FS.lookupNode(new_dir, new_name)
                } catch (e) {}
                if (new_node)
                    for (var i in new_node.contents)
                        throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
            }
            delete old_node.parent.contents[old_node.name];
            old_node.name = new_name;
            new_dir.contents[new_name] = old_node;
            old_node.parent =
            new_dir
        },
        unlink: function(parent, name) {
            delete parent.contents[name]
        },
        rmdir: function(parent, name) {
            var node = FS.lookupNode(parent, name);
            for (var i in node.contents)
                throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
            delete parent.contents[name]
        },
        readdir: function(node) {
            var entries = [".", ".."];
            for (var key in node.contents) {
                if (!node.contents.hasOwnProperty(key))
                    continue;
                entries.push(key)
            }
            return entries
        },
        symlink: function(parent, newname, oldpath) {
            var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);
            node.link = oldpath;
            return node
        },
        readlink: function(node) {
            if (!FS.isLink(node.mode))
                throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
            return node.link
        }
    },
    stream_ops: {
        read: function(stream, buffer, offset, length, position) {
            var contents = stream.node.contents;
            if (position >= stream.node.usedBytes)
                return 0;
            var size = Math.min(stream.node.usedBytes - position, length);
            assert(size >= 0);
            if (size > 8 && contents.subarray)
                buffer.set(contents.subarray(position, position + size), offset);
            else
                for (var i = 0; i < size; i++)
                    buffer[offset + i] = contents[position + i];
            return size
        },
        write: function(stream, buffer, offset, length, position, canOwn) {
            if (!length)
                return 0;
            var node = stream.node;
            node.timestamp = Date.now();
            if (buffer.subarray && (!node.contents || node.contents.subarray))
                if (canOwn) {
                    node.contents = buffer.subarray(offset, offset + length);
                    node.usedBytes = length;
                    return length
                } else if (node.usedBytes === 0 && position === 0) {
                    node.contents = new Uint8Array(buffer.subarray(offset, offset + length));
                    node.usedBytes = length;
                    return length
                } else if (position + length <= node.usedBytes) {
                    node.contents.set(buffer.subarray(offset,
                    offset + length), position);
                    return length
                }
            MEMFS.expandFileStorage(node, position + length);
            if (node.contents.subarray && buffer.subarray)
                node.contents.set(buffer.subarray(offset, offset + length), position);
            else
                for (var i = 0; i < length; i++)
                    node.contents[position + i] = buffer[offset + i];
            node.usedBytes = Math.max(node.usedBytes, position + length);
            return length
        },
        llseek: function(stream, offset, whence) {
            var position = offset;
            if (whence === 1)
                position += stream.position;
            else if (whence === 2)
                if (FS.isFile(stream.node.mode))
                    position += stream.node.usedBytes;
            if (position < 0)
                throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
            stream.ungotten = [];
            stream.position = position;
            return position
        },
        allocate: function(stream, offset, length) {
            MEMFS.expandFileStorage(stream.node, offset + length);
            stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length)
        },
        mmap: function(stream, buffer, offset, length, position, prot, flags) {
            if (!FS.isFile(stream.node.mode))
                throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
            var ptr;
            var allocated;
            var contents = stream.node.contents;
            if (!(flags & 2) && (contents.buffer ===
            buffer || contents.buffer === buffer.buffer)) {
                allocated = false;
                ptr = contents.byteOffset
            } else {
                if (position > 0 || position + length < stream.node.usedBytes)
                    if (contents.subarray)
                        contents = contents.subarray(position, position + length);
                    else
                        contents = Array.prototype.slice.call(contents, position, position + length);
                allocated = true;
                ptr = _malloc(length);
                if (!ptr)
                    throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
                buffer.set(contents, ptr)
            }
            return {
                ptr: ptr,
                allocated: allocated
            }
        }
    }
};
var IDBFS = {
    dbs: {},
    indexedDB: function() {
        return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB
    },
    DB_VERSION: 21,
    DB_STORE_NAME: "FILE_DATA",
    mount: function(mount) {
        return MEMFS.mount.apply(null, arguments)
    },
    syncfs: function(mount, populate, callback) {
        IDBFS.getLocalSet(mount, function(err, local) {
            if (err)
                return callback(err);
            IDBFS.getRemoteSet(mount, function(err, remote) {
                if (err)
                    return callback(err);
                var src = populate ? remote : local;
                var dst = populate ? local : remote;
                IDBFS.reconcile(src, dst,
                callback)
            })
        })
    },
    getDB: function(name, callback) {
        var db = IDBFS.dbs[name];
        if (db)
            return callback(null, db);
        var req;
        try {
            req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION)
        } catch (e) {
            return callback(e)
        }
        req.onupgradeneeded = function(e) {
            var db = e.target.result;
            var transaction = e.target.transaction;
            var fileStore;
            if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME))
                fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
            else
                fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
            fileStore.createIndex("timestamp", "timestamp",
            {
                unique: false
            })
        };
        req.onsuccess = function() {
            db = req.result;
            IDBFS.dbs[name] = db;
            callback(null, db)
        };
        req.onerror = function() {
            callback(this.error)
        }
    },
    getLocalSet: function(mount, callback) {
        var entries = {};
        function isRealDir(p) {
            return p !== "." && p !== ".."
        }
        function toAbsolute(root) {
            return function(p) {
                return PATH.join2(root, p)
            }
        }
        var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
        while (check.length) {
            var path = check.pop();
            var stat;
            try {
                stat = FS.stat(path)
            } catch (e) {
                return callback(e)
            }
            if (FS.isDir(stat.mode))
                check.push.apply(check,
                FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));
            entries[path] = {
                timestamp: stat.mtime
            }
        }
        return callback(null, {
            type: "local",
            entries: entries
        })
    },
    getRemoteSet: function(mount, callback) {
        var entries = {};
        IDBFS.getDB(mount.mountpoint, function(err, db) {
            if (err)
                return callback(err);
            var transaction = db.transaction([IDBFS.DB_STORE_NAME], "readonly");
            transaction.onerror = function() {
                callback(this.error)
            };
            var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
            var index = store.index("timestamp");
            index.openKeyCursor().onsuccess =
            function(event) {
                var cursor = event.target.result;
                if (!cursor)
                    return callback(null, {
                        type: "remote",
                        db: db,
                        entries: entries
                    });
                entries[cursor.primaryKey] = {
                    timestamp: cursor.key
                };
                cursor.continue()
            }
        })
    },
    loadLocalEntry: function(path, callback) {
        var stat,
            node;
        try {
            var lookup = FS.lookupPath(path);
            node = lookup.node;
            stat = FS.stat(path)
        } catch (e) {
            return callback(e)
        }
        if (FS.isDir(stat.mode))
            return callback(null, {
                timestamp: stat.mtime,
                mode: stat.mode
            });
        else if (FS.isFile(stat.mode)) {
            node.contents = MEMFS.getFileDataAsTypedArray(node);
            return callback(null, {
                timestamp: stat.mtime,
                mode: stat.mode,
                contents: node.contents
            })
        } else
            return callback(new Error("node type not supported"))
    },
    storeLocalEntry: function(path, entry, callback) {
        try {
            if (FS.isDir(entry.mode))
                FS.mkdir(path, entry.mode);
            else if (FS.isFile(entry.mode))
                FS.writeFile(path, entry.contents, {
                    encoding: "binary",
                    canOwn: true
                });
            else
                return callback(new Error("node type not supported"));
            FS.utime(path, entry.timestamp, entry.timestamp)
        } catch (e) {
            return callback(e)
        }
        callback(null)
    },
    removeLocalEntry: function(path,
    callback) {
        try {
            var lookup = FS.lookupPath(path);
            var stat = FS.stat(path);
            if (FS.isDir(stat.mode))
                FS.rmdir(path);
            else if (FS.isFile(stat.mode))
                FS.unlink(path)
        } catch (e) {
            return callback(e)
        }
        callback(null)
    },
    loadRemoteEntry: function(store, path, callback) {
        var req = store.get(path);
        req.onsuccess = function(event) {
            callback(null, event.target.result)
        };
        req.onerror = function() {
            callback(this.error)
        }
    },
    storeRemoteEntry: function(store, path, entry, callback) {
        var req = store.put(entry, path);
        req.onsuccess = function() {
            callback(null)
        };
        req.onerror = function() {
            callback(this.error)
        }
    },
    removeRemoteEntry: function(store, path, callback) {
        var req = store.delete(path);
        req.onsuccess = function() {
            callback(null)
        };
        req.onerror = function() {
            callback(this.error)
        }
    },
    reconcile: function(src, dst, callback) {
        var total = 0;
        var create = [];
        Object.keys(src.entries).forEach(function(key) {
            var e = src.entries[key];
            var e2 = dst.entries[key];
            if (!e2 || e.timestamp > e2.timestamp) {
                create.push(key);
                total++
            }
        });
        var remove = [];
        Object.keys(dst.entries).forEach(function(key) {
            var e = dst.entries[key];
            var e2 = src.entries[key];
            if (!e2) {
                remove.push(key);
                total++
            }
        });
        if (!total)
            return callback(null);
        var errored = false;
        var completed = 0;
        var db = src.type === "remote" ? src.db : dst.db;
        var transaction = db.transaction([IDBFS.DB_STORE_NAME], "readwrite");
        var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
        function done(err) {
            if (err) {
                if (!done.errored) {
                    done.errored = true;
                    return callback(err)
                }
                return
            }
            if (++completed >= total)
                return callback(null)
        }
        transaction.onerror = function() {
            done(this.error)
        };
        create.sort().forEach(function(path) {
            if (dst.type ===
            "local")
                IDBFS.loadRemoteEntry(store, path, function(err, entry) {
                    if (err)
                        return done(err);
                    IDBFS.storeLocalEntry(path, entry, done)
                });
            else
                IDBFS.loadLocalEntry(path, function(err, entry) {
                    if (err)
                        return done(err);
                    IDBFS.storeRemoteEntry(store, path, entry, done)
                })
        });
        remove.sort().reverse().forEach(function(path) {
            if (dst.type === "local")
                IDBFS.removeLocalEntry(path, done);
            else
                IDBFS.removeRemoteEntry(store, path, done)
        })
    }
};
var NODEFS = {
    isWindows: false,
    staticInit: function() {
        NODEFS.isWindows = !!process.platform.match(/^win/)
    },
    mount: function(mount) {
        assert(ENVIRONMENT_IS_NODE);
        return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0)
    },
    createNode: function(parent, name, mode, dev) {
        if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode))
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        var node = FS.createNode(parent, name, mode);
        node.node_ops = NODEFS.node_ops;
        node.stream_ops = NODEFS.stream_ops;
        return node
    },
    getMode: function(path) {
        var stat;
        try {
            stat = fs.lstatSync(path);
            if (NODEFS.isWindows)
                stat.mode = stat.mode | (stat.mode & 146) >> 1
        } catch (e) {
            if (!e.code)
                throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
        }
        return stat.mode
    },
    realPath: function(node) {
        var parts = [];
        while (node.parent !== node) {
            parts.push(node.name);
            node = node.parent
        }
        parts.push(node.mount.opts.root);
        parts.reverse();
        return PATH.join.apply(null, parts)
    },
    flagsToPermissionStringMap: {
        0: "r",
        1: "r+",
        2: "r+",
        64: "r",
        65: "r+",
        66: "r+",
        129: "rx+",
        193: "rx+",
        514: "w+",
        577: "w",
        578: "w+",
        705: "wx",
        706: "wx+",
        1024: "a",
        1025: "a",
        1026: "a+",
        1089: "a",
        1090: "a+",
        1153: "ax",
        1154: "ax+",
        1217: "ax",
        1218: "ax+",
        4096: "rs",
        4098: "rs+"
    },
    flagsToPermissionString: function(flags) {
        if (flags in NODEFS.flagsToPermissionStringMap)
            return NODEFS.flagsToPermissionStringMap[flags];
        else
            return flags
    },
    node_ops: {
        getattr: function(node) {
            var path = NODEFS.realPath(node);
            var stat;
            try {
                stat = fs.lstatSync(path)
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
            if (NODEFS.isWindows && !stat.blksize)
                stat.blksize = 4096;
            if (NODEFS.isWindows &&
            !stat.blocks)
                stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0;
            return {
                dev: stat.dev,
                ino: stat.ino,
                mode: stat.mode,
                nlink: stat.nlink,
                uid: stat.uid,
                gid: stat.gid,
                rdev: stat.rdev,
                size: stat.size,
                atime: stat.atime,
                mtime: stat.mtime,
                ctime: stat.ctime,
                blksize: stat.blksize,
                blocks: stat.blocks
            }
        },
        setattr: function(node, attr) {
            var path = NODEFS.realPath(node);
            try {
                if (attr.mode !== undefined) {
                    fs.chmodSync(path, attr.mode);
                    node.mode = attr.mode
                }
                if (attr.timestamp !== undefined) {
                    var date = new Date(attr.timestamp);
                    fs.utimesSync(path,
                    date, date)
                }
                if (attr.size !== undefined)
                    fs.truncateSync(path, attr.size)
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
        },
        lookup: function(parent, name) {
            var path = PATH.join2(NODEFS.realPath(parent), name);
            var mode = NODEFS.getMode(path);
            return NODEFS.createNode(parent, name, mode)
        },
        mknod: function(parent, name, mode, dev) {
            var node = NODEFS.createNode(parent, name, mode, dev);
            var path = NODEFS.realPath(node);
            try {
                if (FS.isDir(node.mode))
                    fs.mkdirSync(path, node.mode);
                else
                    fs.writeFileSync(path, "", {
                        mode: node.mode
                    })
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
            return node
        },
        rename: function(oldNode, newDir, newName) {
            var oldPath = NODEFS.realPath(oldNode);
            var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
            try {
                fs.renameSync(oldPath, newPath)
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
        },
        unlink: function(parent, name) {
            var path = PATH.join2(NODEFS.realPath(parent), name);
            try {
                fs.unlinkSync(path)
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
        },
        rmdir: function(parent,
        name) {
            var path = PATH.join2(NODEFS.realPath(parent), name);
            try {
                fs.rmdirSync(path)
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
        },
        readdir: function(node) {
            var path = NODEFS.realPath(node);
            try {
                return fs.readdirSync(path)
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
        },
        symlink: function(parent, newName, oldPath) {
            var newPath = PATH.join2(NODEFS.realPath(parent), newName);
            try {
                fs.symlinkSync(oldPath, newPath)
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
        },
        readlink: function(node) {
            var path = NODEFS.realPath(node);
            try {
                return fs.readlinkSync(path)
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
        }
    },
    stream_ops: {
        open: function(stream) {
            var path = NODEFS.realPath(stream.node);
            try {
                if (FS.isFile(stream.node.mode))
                    stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags))
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
        },
        close: function(stream) {
            try {
                if (FS.isFile(stream.node.mode) && stream.nfd)
                    fs.closeSync(stream.nfd)
            } catch (e) {
                if (!e.code)
                    throw e;
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
        },
        read: function(stream, buffer, offset, length, position) {
            var nbuffer = new Buffer(length);
            var res;
            try {
                res = fs.readSync(stream.nfd, nbuffer, 0, length, position)
            } catch (e) {
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
            if (res > 0)
                for (var i = 0; i < res; i++)
                    buffer[offset + i] = nbuffer[i];
            return res
        },
        write: function(stream, buffer, offset, length, position) {
            var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
            var res;
            try {
                res = fs.writeSync(stream.nfd, nbuffer, 0, length, position)
            } catch (e) {
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
            }
            return res
        },
        llseek: function(stream, offset, whence) {
            var position = offset;
            if (whence === 1)
                position += stream.position;
            else if (whence === 2)
                if (FS.isFile(stream.node.mode))
                    try {
                        var stat = fs.fstatSync(stream.nfd);
                        position += stat.size
                    } catch (e) {
                        throw new FS.ErrnoError(ERRNO_CODES[e.code]);
                    }
            if (position < 0)
                throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
            stream.position = position;
            return position
        }
    }
};
var _stdin = allocate(1, "i32*", ALLOC_STATIC);
var _stdout = allocate(1, "i32*", ALLOC_STATIC);
var _stderr = allocate(1, "i32*", ALLOC_STATIC);
function _fflush(stream) {}
var FS = {
    root: null,
    mounts: [],
    devices: [null],
    streams: [],
    nextInode: 1,
    nameTable: null,
    currentPath: "/",
    initialized: false,
    ignorePermissions: true,
    trackingDelegate: {},
    tracking: {
        openFlags: {
            READ: 1,
            WRITE: 2
        }
    },
    ErrnoError: null,
    genericErrors: {},
    handleFSError: function(e) {
        if (!(e instanceof FS.ErrnoError))
            throw e + " : " + stackTrace();
        return ___setErrNo(e.errno)
    },
    lookupPath: function(path, opts) {
        path = PATH.resolve(FS.cwd(), path);
        opts = opts || {};
        var defaults = {
            follow_mount: true,
            recurse_count: 0
        };
        for (var key in defaults)
            if (opts[key] === undefined)
                opts[key] =
                defaults[key];
        if (opts.recurse_count > 8)
            throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
        var parts = PATH.normalizeArray(path.split("/").filter(function(p) {
            return !!p
        }), false);
        var current = FS.root;
        var current_path = "/";
        for (var i = 0; i < parts.length; i++) {
            var islast = i === parts.length - 1;
            if (islast && opts.parent)
                break;
            current = FS.lookupNode(current, parts[i]);
            current_path = PATH.join2(current_path, parts[i]);
            if (FS.isMountpoint(current))
                if (!islast || islast && opts.follow_mount)
                    current = current.mounted.root;
            if (!islast || opts.follow) {
                var count =
                0;
                while (FS.isLink(current.mode)) {
                    var link = FS.readlink(current_path);
                    current_path = PATH.resolve(PATH.dirname(current_path), link);
                    var lookup = FS.lookupPath(current_path, {
                        recurse_count: opts.recurse_count
                    });
                    current = lookup.node;
                    if (count++ > 40)
                        throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
                }
            }
        }
        return {
            path: current_path,
            node: current
        }
    },
    getPath: function(node) {
        var path;
        while (true) {
            if (FS.isRoot(node)) {
                var mount = node.mount.mountpoint;
                if (!path)
                    return mount;
                return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path
            }
            path =
            path ? node.name + "/" + path : node.name;
            node = node.parent
        }
    },
    hashName: function(parentid, name) {
        var hash = 0;
        for (var i = 0; i < name.length; i++)
            hash = (hash << 5) - hash + name.charCodeAt(i) | 0;
        return (parentid + hash >>> 0) % FS.nameTable.length
    },
    hashAddNode: function(node) {
        var hash = FS.hashName(node.parent.id, node.name);
        node.name_next = FS.nameTable[hash];
        FS.nameTable[hash] = node
    },
    hashRemoveNode: function(node) {
        var hash = FS.hashName(node.parent.id, node.name);
        if (FS.nameTable[hash] === node)
            FS.nameTable[hash] = node.name_next;
        else {
            var current =
            FS.nameTable[hash];
            while (current) {
                if (current.name_next === node) {
                    current.name_next = node.name_next;
                    break
                }
                current = current.name_next
            }
        }
    },
    lookupNode: function(parent, name) {
        var err = FS.mayLookup(parent);
        if (err)
            throw new FS.ErrnoError(err);
        var hash = FS.hashName(parent.id, name);
        for (var node = FS.nameTable[hash]; node; node = node.name_next) {
            var nodeName = node.name;
            if (node.parent.id === parent.id && nodeName === name)
                return node
        }
        return FS.lookup(parent, name)
    },
    createNode: function(parent, name, mode, rdev) {
        if (!FS.FSNode) {
            FS.FSNode =
            function(parent, name, mode, rdev) {
                if (!parent)
                    parent = this;
                this.parent = parent;
                this.mount = parent.mount;
                this.mounted = null;
                this.id = FS.nextInode++;
                this.name = name;
                this.mode = mode;
                this.node_ops = {};
                this.stream_ops = {};
                this.rdev = rdev
            };
            FS.FSNode.prototype = {};
            var readMode = 292 | 73;
            var writeMode = 146;
            Object.defineProperties(FS.FSNode.prototype, {
                read: {
                    get: function() {
                        return (this.mode & readMode) === readMode
                    },
                    set: function(val) {
                        val ? this.mode |= readMode : this.mode &= ~readMode
                    }
                },
                write: {
                    get: function() {
                        return (this.mode & writeMode) ===
                        writeMode
                    },
                    set: function(val) {
                        val ? this.mode |= writeMode : this.mode &= ~writeMode
                    }
                },
                isFolder: {
                    get: function() {
                        return FS.isDir(this.mode)
                    }
                },
                isDevice: {
                    get: function() {
                        return FS.isChrdev(this.mode)
                    }
                }
            })
        }
        var node = new FS.FSNode(parent, name, mode, rdev);
        FS.hashAddNode(node);
        return node
    },
    destroyNode: function(node) {
        FS.hashRemoveNode(node)
    },
    isRoot: function(node) {
        return node === node.parent
    },
    isMountpoint: function(node) {
        return !!node.mounted
    },
    isFile: function(mode) {
        return (mode & 61440) === 32768
    },
    isDir: function(mode) {
        return (mode &
        61440) === 16384
    },
    isLink: function(mode) {
        return (mode & 61440) === 40960
    },
    isChrdev: function(mode) {
        return (mode & 61440) === 8192
    },
    isBlkdev: function(mode) {
        return (mode & 61440) === 24576
    },
    isFIFO: function(mode) {
        return (mode & 61440) === 4096
    },
    isSocket: function(mode) {
        return (mode & 49152) === 49152
    },
    flagModes: {
        "r": 0,
        "rs": 1052672,
        "r+": 2,
        "w": 577,
        "wx": 705,
        "xw": 705,
        "w+": 578,
        "wx+": 706,
        "xw+": 706,
        "a": 1089,
        "ax": 1217,
        "xa": 1217,
        "a+": 1090,
        "ax+": 1218,
        "xa+": 1218
    },
    modeStringToFlags: function(str) {
        var flags = FS.flagModes[str];
        if (typeof flags ===
        "undefined")
            throw new Error("Unknown file open mode: " + str);
        return flags
    },
    flagsToPermissionString: function(flag) {
        var accmode = flag & 2097155;
        var perms = ["r", "w", "rw"][accmode];
        if (flag & 512)
            perms += "w";
        return perms
    },
    nodePermissions: function(node, perms) {
        if (FS.ignorePermissions)
            return 0;
        if (perms.indexOf("r") !== -1 && !(node.mode & 292))
            return ERRNO_CODES.EACCES;
        else if (perms.indexOf("w") !== -1 && !(node.mode & 146))
            return ERRNO_CODES.EACCES;
        else if (perms.indexOf("x") !== -1 && !(node.mode & 73))
            return ERRNO_CODES.EACCES;
        return 0
    },
    mayLookup: function(dir) {
        return FS.nodePermissions(dir, "x")
    },
    mayCreate: function(dir, name) {
        try {
            var node = FS.lookupNode(dir, name);
            return ERRNO_CODES.EEXIST
        } catch (e) {}
        return FS.nodePermissions(dir, "wx")
    },
    mayDelete: function(dir, name, isdir) {
        var node;
        try {
            node = FS.lookupNode(dir, name)
        } catch (e) {
            return e.errno
        }
        var err = FS.nodePermissions(dir, "wx");
        if (err)
            return err;
        if (isdir) {
            if (!FS.isDir(node.mode))
                return ERRNO_CODES.ENOTDIR;
            if (FS.isRoot(node) || FS.getPath(node) === FS.cwd())
                return ERRNO_CODES.EBUSY
        } else if (FS.isDir(node.mode))
            return ERRNO_CODES.EISDIR;
        return 0
    },
    mayOpen: function(node, flags) {
        if (!node)
            return ERRNO_CODES.ENOENT;
        if (FS.isLink(node.mode))
            return ERRNO_CODES.ELOOP;
        else if (FS.isDir(node.mode))
            if ((flags & 2097155) !== 0 || flags & 512)
                return ERRNO_CODES.EISDIR;
        return FS.nodePermissions(node, FS.flagsToPermissionString(flags))
    },
    MAX_OPEN_FDS: 4096,
    nextfd: function(fd_start, fd_end) {
        fd_start = fd_start || 0;
        fd_end = fd_end || FS.MAX_OPEN_FDS;
        for (var fd = fd_start; fd <= fd_end; fd++)
            if (!FS.streams[fd])
                return fd;
        throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
    },
    getStream: function(fd) {
        return FS.streams[fd]
    },
    createStream: function(stream, fd_start, fd_end) {
        if (!FS.FSStream) {
            FS.FSStream = function() {};
            FS.FSStream.prototype = {};
            Object.defineProperties(FS.FSStream.prototype, {
                object: {
                    get: function() {
                        return this.node
                    },
                    set: function(val) {
                        this.node = val
                    }
                },
                isRead: {
                    get: function() {
                        return (this.flags & 2097155) !== 1
                    }
                },
                isWrite: {
                    get: function() {
                        return (this.flags & 2097155) !== 0
                    }
                },
                isAppend: {
                    get: function() {
                        return this.flags & 1024
                    }
                }
            })
        }
        var newStream = new FS.FSStream;
        for (var p in stream)
            newStream[p] = stream[p];
        stream = newStream;
        var fd = FS.nextfd(fd_start,
        fd_end);
        stream.fd = fd;
        FS.streams[fd] = stream;
        return stream
    },
    closeStream: function(fd) {
        FS.streams[fd] = null
    },
    getStreamFromPtr: function(ptr) {
        return FS.streams[ptr - 1]
    },
    getPtrForStream: function(stream) {
        return stream ? stream.fd + 1 : 0
    },
    chrdev_stream_ops: {
        open: function(stream) {
            var device = FS.getDevice(stream.node.rdev);
            stream.stream_ops = device.stream_ops;
            if (stream.stream_ops.open)
                stream.stream_ops.open(stream)
        },
        llseek: function() {
            throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
        }
    },
    major: function(dev) {
        return dev >> 8
    },
    minor: function(dev) {
        return dev &
        255
    },
    makedev: function(ma, mi) {
        return ma << 8 | mi
    },
    registerDevice: function(dev, ops) {
        FS.devices[dev] = {
            stream_ops: ops
        }
    },
    getDevice: function(dev) {
        return FS.devices[dev]
    },
    getMounts: function(mount) {
        var mounts = [];
        var check = [mount];
        while (check.length) {
            var m = check.pop();
            mounts.push(m);
            check.push.apply(check, m.mounts)
        }
        return mounts
    },
    syncfs: function(populate, callback) {
        if (typeof populate === "function") {
            callback = populate;
            populate = false
        }
        var mounts = FS.getMounts(FS.root.mount);
        var completed = 0;
        function done(err) {
            if (err) {
                if (!done.errored) {
                    done.errored =
                    true;
                    return callback(err)
                }
                return
            }
            if (++completed >= mounts.length)
                callback(null)
        }
        mounts.forEach(function(mount) {
            if (!mount.type.syncfs)
                return done(null);
            mount.type.syncfs(mount, populate, done)
        })
    },
    mount: function(type, opts, mountpoint) {
        var root = mountpoint === "/";
        var pseudo = !mountpoint;
        var node;
        if (root && FS.root)
            throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        else if (!root && !pseudo) {
            var lookup = FS.lookupPath(mountpoint, {
                follow_mount: false
            });
            mountpoint = lookup.path;
            node = lookup.node;
            if (FS.isMountpoint(node))
                throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
            if (!FS.isDir(node.mode))
                throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
        }
        var mount = {
            type: type,
            opts: opts,
            mountpoint: mountpoint,
            mounts: []
        };
        var mountRoot = type.mount(mount);
        mountRoot.mount = mount;
        mount.root = mountRoot;
        if (root)
            FS.root = mountRoot;
        else if (node) {
            node.mounted = mount;
            if (node.mount)
                node.mount.mounts.push(mount)
        }
        return mountRoot
    },
    unmount: function(mountpoint) {
        var lookup = FS.lookupPath(mountpoint, {
            follow_mount: false
        });
        if (!FS.isMountpoint(lookup.node))
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        var node =
        lookup.node;
        var mount = node.mounted;
        var mounts = FS.getMounts(mount);
        Object.keys(FS.nameTable).forEach(function(hash) {
            var current = FS.nameTable[hash];
            while (current) {
                var next = current.name_next;
                if (mounts.indexOf(current.mount) !== -1)
                    FS.destroyNode(current);
                current = next
            }
        });
        node.mounted = null;
        var idx = node.mount.mounts.indexOf(mount);
        assert(idx !== -1);
        node.mount.mounts.splice(idx, 1)
    },
    lookup: function(parent, name) {
        return parent.node_ops.lookup(parent, name)
    },
    mknod: function(path, mode, dev) {
        var lookup = FS.lookupPath(path,
        {
            parent: true
        });
        var parent = lookup.node;
        var name = PATH.basename(path);
        var err = FS.mayCreate(parent, name);
        if (err)
            throw new FS.ErrnoError(err);
        if (!parent.node_ops.mknod)
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        return parent.node_ops.mknod(parent, name, mode, dev)
    },
    create: function(path, mode) {
        mode = mode !== undefined ? mode : 438;
        mode &= 4095;
        mode |= 32768;
        return FS.mknod(path, mode, 0)
    },
    mkdir: function(path, mode) {
        mode = mode !== undefined ? mode : 511;
        mode &= 511 | 512;
        mode |= 16384;
        return FS.mknod(path, mode, 0)
    },
    mkdev: function(path,
    mode, dev) {
        if (typeof dev === "undefined") {
            dev = mode;
            mode = 438
        }
        mode |= 8192;
        return FS.mknod(path, mode, dev)
    },
    symlink: function(oldpath, newpath) {
        var lookup = FS.lookupPath(newpath, {
            parent: true
        });
        var parent = lookup.node;
        var newname = PATH.basename(newpath);
        var err = FS.mayCreate(parent, newname);
        if (err)
            throw new FS.ErrnoError(err);
        if (!parent.node_ops.symlink)
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        return parent.node_ops.symlink(parent, newname, oldpath)
    },
    rename: function(old_path, new_path) {
        var old_dirname = PATH.dirname(old_path);
        var new_dirname = PATH.dirname(new_path);
        var old_name = PATH.basename(old_path);
        var new_name = PATH.basename(new_path);
        var lookup,
            old_dir,
            new_dir;
        try {
            lookup = FS.lookupPath(old_path, {
                parent: true
            });
            old_dir = lookup.node;
            lookup = FS.lookupPath(new_path, {
                parent: true
            });
            new_dir = lookup.node
        } catch (e) {
            throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        }
        if (old_dir.mount !== new_dir.mount)
            throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
        var old_node = FS.lookupNode(old_dir, old_name);
        var relative = PATH.relative(old_path, new_dirname);
        if (relative.charAt(0) !==
        ".")
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        relative = PATH.relative(new_path, old_dirname);
        if (relative.charAt(0) !== ".")
            throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
        var new_node;
        try {
            new_node = FS.lookupNode(new_dir, new_name)
        } catch (e) {}
        if (old_node === new_node)
            return;
        var isdir = FS.isDir(old_node.mode);
        var err = FS.mayDelete(old_dir, old_name, isdir);
        if (err)
            throw new FS.ErrnoError(err);
        err = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);
        if (err)
            throw new FS.ErrnoError(err);
        if (!old_dir.node_ops.rename)
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node))
            throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        if (new_dir !== old_dir) {
            err = FS.nodePermissions(old_dir, "w");
            if (err)
                throw new FS.ErrnoError(err);
        }
        try {
            if (FS.trackingDelegate["willMovePath"])
                FS.trackingDelegate["willMovePath"](old_path, new_path)
        } catch (e) {
            console.log("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message)
        }
        FS.hashRemoveNode(old_node);
        try {
            old_dir.node_ops.rename(old_node, new_dir, new_name)
        } catch (e) {
            throw e;
        } finally {
            FS.hashAddNode(old_node)
        }
        try {
            if (FS.trackingDelegate["onMovePath"])
                FS.trackingDelegate["onMovePath"](old_path, new_path)
        } catch (e) {
            console.log("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message)
        }
    },
    rmdir: function(path) {
        var lookup = FS.lookupPath(path, {
            parent: true
        });
        var parent = lookup.node;
        var name = PATH.basename(path);
        var node = FS.lookupNode(parent, name);
        var err = FS.mayDelete(parent, name, true);
        if (err)
            throw new FS.ErrnoError(err);
        if (!parent.node_ops.rmdir)
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        if (FS.isMountpoint(node))
            throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        try {
            if (FS.trackingDelegate["willDeletePath"])
                FS.trackingDelegate["willDeletePath"](path)
        } catch (e) {
            console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message)
        }
        parent.node_ops.rmdir(parent, name);
        FS.destroyNode(node);
        try {
            if (FS.trackingDelegate["onDeletePath"])
                FS.trackingDelegate["onDeletePath"](path)
        } catch (e) {
            console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message)
        }
    },
    readdir: function(path) {
        var lookup = FS.lookupPath(path, {
            follow: true
        });
        var node = lookup.node;
        if (!node.node_ops.readdir)
            throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
        return node.node_ops.readdir(node)
    },
    unlink: function(path) {
        var lookup = FS.lookupPath(path, {
            parent: true
        });
        var parent = lookup.node;
        var name = PATH.basename(path);
        var node = FS.lookupNode(parent, name);
        var err = FS.mayDelete(parent, name, false);
        if (err) {
            if (err === ERRNO_CODES.EISDIR)
                err = ERRNO_CODES.EPERM;
            throw new FS.ErrnoError(err);
        }
        if (!parent.node_ops.unlink)
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        if (FS.isMountpoint(node))
            throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        try {
            if (FS.trackingDelegate["willDeletePath"])
                FS.trackingDelegate["willDeletePath"](path)
        } catch (e) {
            console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message)
        }
        parent.node_ops.unlink(parent, name);
        FS.destroyNode(node);
        try {
            if (FS.trackingDelegate["onDeletePath"])
                FS.trackingDelegate["onDeletePath"](path)
        } catch (e) {
            console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message)
        }
    },
    readlink: function(path) {
        var lookup = FS.lookupPath(path);
        var link = lookup.node;
        if (!link.node_ops.readlink)
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        return link.node_ops.readlink(link)
    },
    stat: function(path, dontFollow) {
        var lookup = FS.lookupPath(path, {
            follow: !dontFollow
        });
        var node = lookup.node;
        if (!node.node_ops.getattr)
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        return node.node_ops.getattr(node)
    },
    lstat: function(path) {
        return FS.stat(path, true)
    },
    chmod: function(path, mode, dontFollow) {
        var node;
        if (typeof path ===
        "string") {
            var lookup = FS.lookupPath(path, {
                follow: !dontFollow
            });
            node = lookup.node
        } else
            node = path;
        if (!node.node_ops.setattr)
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        node.node_ops.setattr(node, {
            mode: mode & 4095 | node.mode & ~4095,
            timestamp: Date.now()
        })
    },
    lchmod: function(path, mode) {
        FS.chmod(path, mode, true)
    },
    fchmod: function(fd, mode) {
        var stream = FS.getStream(fd);
        if (!stream)
            throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        FS.chmod(stream.node, mode)
    },
    chown: function(path, uid, gid, dontFollow) {
        var node;
        if (typeof path === "string") {
            var lookup =
            FS.lookupPath(path, {
                follow: !dontFollow
            });
            node = lookup.node
        } else
            node = path;
        if (!node.node_ops.setattr)
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        node.node_ops.setattr(node, {
            timestamp: Date.now()
        })
    },
    lchown: function(path, uid, gid) {
        FS.chown(path, uid, gid, true)
    },
    fchown: function(fd, uid, gid) {
        var stream = FS.getStream(fd);
        if (!stream)
            throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        FS.chown(stream.node, uid, gid)
    },
    truncate: function(path, len) {
        if (len < 0)
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        var node;
        if (typeof path ===
        "string") {
            var lookup = FS.lookupPath(path, {
                follow: true
            });
            node = lookup.node
        } else
            node = path;
        if (!node.node_ops.setattr)
            throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        if (FS.isDir(node.mode))
            throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
        if (!FS.isFile(node.mode))
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        var err = FS.nodePermissions(node, "w");
        if (err)
            throw new FS.ErrnoError(err);
        node.node_ops.setattr(node, {
            size: len,
            timestamp: Date.now()
        })
    },
    ftruncate: function(fd, len) {
        var stream = FS.getStream(fd);
        if (!stream)
            throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        if ((stream.flags & 2097155) === 0)
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        FS.truncate(stream.node, len)
    },
    utime: function(path, atime, mtime) {
        var lookup = FS.lookupPath(path, {
            follow: true
        });
        var node = lookup.node;
        node.node_ops.setattr(node, {
            timestamp: Math.max(atime, mtime)
        })
    },
    open: function(path, flags, mode, fd_start, fd_end) {
        flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags;
        mode = typeof mode === "undefined" ? 438 : mode;
        if (flags & 64)
            mode = mode & 4095 | 32768;
        else
            mode = 0;
        var node;
        if (typeof path === "object")
            node =
            path;
        else {
            path = PATH.normalize(path);
            try {
                var lookup = FS.lookupPath(path, {
                    follow: !(flags & 131072)
                });
                node = lookup.node
            } catch (e) {}
        }
        if (flags & 64)
            if (node) {
                if (flags & 128)
                    throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
            } else
                node = FS.mknod(path, mode, 0);
        if (!node)
            throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        if (FS.isChrdev(node.mode))
            flags &= ~512;
        var err = FS.mayOpen(node, flags);
        if (err)
            throw new FS.ErrnoError(err);
        if (flags & 512)
            FS.truncate(node, 0);
        flags &= ~(128 | 512);
        var stream = FS.createStream({
            node: node,
            path: FS.getPath(node),
            flags: flags,
            seekable: true,
            position: 0,
            stream_ops: node.stream_ops,
            ungotten: [],
            error: false
        }, fd_start, fd_end);
        if (stream.stream_ops.open)
            stream.stream_ops.open(stream);
        if (Module["logReadFiles"] && !(flags & 1)) {
            if (!FS.readFiles)
                FS.readFiles = {};
            if (!(path in FS.readFiles)) {
                FS.readFiles[path] = 1;
                Module["printErr"]("read file: " + path)
            }
        }
        try {
            if (FS.trackingDelegate["onOpenFile"]) {
                var trackingFlags = 0;
                if ((flags & 2097155) !== 1)
                    trackingFlags |= FS.tracking.openFlags.READ;
                if ((flags & 2097155) !== 0)
                    trackingFlags |= FS.tracking.openFlags.WRITE;
                FS.trackingDelegate["onOpenFile"](path, trackingFlags)
            }
        } catch (e) {
            console.log("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message)
        }
        return stream
    },
    close: function(stream) {
        try {
            if (stream.stream_ops.close)
                stream.stream_ops.close(stream)
        } catch (e) {
            throw e;
        } finally {
            FS.closeStream(stream.fd)
        }
    },
    llseek: function(stream, offset, whence) {
        if (!stream.seekable || !stream.stream_ops.llseek)
            throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
        return stream.stream_ops.llseek(stream, offset, whence)
    },
    read: function(stream, buffer, offset, length, position) {
        if (length < 0 || position < 0)
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        if ((stream.flags & 2097155) === 1)
            throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        if (FS.isDir(stream.node.mode))
            throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
        if (!stream.stream_ops.read)
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        var seeking = true;
        if (typeof position === "undefined") {
            position = stream.position;
            seeking = false
        } else if (!stream.seekable)
            throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
        var bytesRead =
        stream.stream_ops.read(stream, buffer, offset, length, position);
        if (!seeking)
            stream.position += bytesRead;
        return bytesRead
    },
    write: function(stream, buffer, offset, length, position, canOwn) {
        if (length < 0 || position < 0)
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        if ((stream.flags & 2097155) === 0)
            throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        if (FS.isDir(stream.node.mode))
            throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
        if (!stream.stream_ops.write)
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        if (stream.flags & 1024)
            FS.llseek(stream,
            0, 2);
        var seeking = true;
        if (typeof position === "undefined") {
            position = stream.position;
            seeking = false
        } else if (!stream.seekable)
            throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
        var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
        if (!seeking)
            stream.position += bytesWritten;
        try {
            if (stream.path && FS.trackingDelegate["onWriteToFile"])
                FS.trackingDelegate["onWriteToFile"](stream.path)
        } catch (e) {
            console.log("FS.trackingDelegate['onWriteToFile']('" + path + "') threw an exception: " + e.message)
        }
        return bytesWritten
    },
    allocate: function(stream, offset, length) {
        if (offset < 0 || length <= 0)
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        if ((stream.flags & 2097155) === 0)
            throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode))
            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
        if (!stream.stream_ops.allocate)
            throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
        stream.stream_ops.allocate(stream, offset, length)
    },
    mmap: function(stream, buffer, offset, length, position, prot, flags) {
        if ((stream.flags & 2097155) === 1)
            throw new FS.ErrnoError(ERRNO_CODES.EACCES);
        if (!stream.stream_ops.mmap)
            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
        return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags)
    },
    ioctl: function(stream, cmd, arg) {
        if (!stream.stream_ops.ioctl)
            throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
        return stream.stream_ops.ioctl(stream, cmd, arg)
    },
    readFile: function(path, opts) {
        opts = opts || {};
        opts.flags = opts.flags || "r";
        opts.encoding = opts.encoding || "binary";
        if (opts.encoding !== "utf8" && opts.encoding !== "binary")
            throw new Error('Invalid encoding type "' +
            opts.encoding + '"');
        var ret;
        var stream = FS.open(path, opts.flags);
        var stat = FS.stat(path);
        var length = stat.size;
        var buf = new Uint8Array(length);
        FS.read(stream, buf, 0, length, 0);
        if (opts.encoding === "utf8") {
            ret = "";
            var utf8 = new Runtime.UTF8Processor;
            for (var i = 0; i < length; i++)
                ret += utf8.processCChar(buf[i])
        } else if (opts.encoding === "binary")
            ret = buf;
        FS.close(stream);
        return ret
    },
    writeFile: function(path, data, opts) {
        opts = opts || {};
        opts.flags = opts.flags || "w";
        opts.encoding = opts.encoding || "utf8";
        if (opts.encoding !== "utf8" &&
        opts.encoding !== "binary")
            throw new Error('Invalid encoding type "' + opts.encoding + '"');
        var stream = FS.open(path, opts.flags, opts.mode);
        if (opts.encoding === "utf8") {
            var utf8 = new Runtime.UTF8Processor;
            var buf = new Uint8Array(utf8.processJSString(data));
            FS.write(stream, buf, 0, buf.length, 0, opts.canOwn)
        } else if (opts.encoding === "binary")
            FS.write(stream, data, 0, data.length, 0, opts.canOwn);
        FS.close(stream)
    },
    cwd: function() {
        return FS.currentPath
    },
    chdir: function(path) {
        var lookup = FS.lookupPath(path, {
            follow: true
        });
        if (!FS.isDir(lookup.node.mode))
            throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
        var err = FS.nodePermissions(lookup.node, "x");
        if (err)
            throw new FS.ErrnoError(err);
        FS.currentPath = lookup.path
    },
    createDefaultDirectories: function() {
        FS.mkdir("/tmp")
    },
    createDefaultDevices: function() {
        FS.mkdir("/dev");
        FS.registerDevice(FS.makedev(1, 3), {
            read: function() {
                return 0
            },
            write: function() {
                return 0
            }
        });
        FS.mkdev("/dev/null", FS.makedev(1, 3));
        TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
        TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
        FS.mkdev("/dev/tty", FS.makedev(5, 0));
        FS.mkdev("/dev/tty1", FS.makedev(6,
        0));
        FS.mkdir("/dev/shm");
        FS.mkdir("/dev/shm/tmp")
    },
    createStandardStreams: function() {
        if (Module["stdin"])
            FS.createDevice("/dev", "stdin", Module["stdin"]);
        else
            FS.symlink("/dev/tty", "/dev/stdin");
        if (Module["stdout"])
            FS.createDevice("/dev", "stdout", null, Module["stdout"]);
        else
            FS.symlink("/dev/tty", "/dev/stdout");
        if (Module["stderr"])
            FS.createDevice("/dev", "stderr", null, Module["stderr"]);
        else
            FS.symlink("/dev/tty1", "/dev/stderr");
        var stdin = FS.open("/dev/stdin", "r");
        HEAP32[_stdin >> 2] = FS.getPtrForStream(stdin);
        assert(stdin.fd === 0, "invalid handle for stdin (" + stdin.fd + ")");
        var stdout = FS.open("/dev/stdout", "w");
        HEAP32[_stdout >> 2] = FS.getPtrForStream(stdout);
        assert(stdout.fd === 1, "invalid handle for stdout (" + stdout.fd + ")");
        var stderr = FS.open("/dev/stderr", "w");
        HEAP32[_stderr >> 2] = FS.getPtrForStream(stderr);
        assert(stderr.fd === 2, "invalid handle for stderr (" + stderr.fd + ")")
    },
    ensureErrnoError: function() {
        if (FS.ErrnoError)
            return;
        FS.ErrnoError = function ErrnoError(errno) {
            this.errno = errno;
            for (var key in ERRNO_CODES)
                if (ERRNO_CODES[key] ===
                errno) {
                    this.code = key;
                    break
                }
            this.message = ERRNO_MESSAGES[errno]
        };
        FS.ErrnoError.prototype = new Error;
        FS.ErrnoError.prototype.constructor = FS.ErrnoError;
        [ERRNO_CODES.ENOENT].forEach(function(code) {
            FS.genericErrors[code] = new FS.ErrnoError(code);
            FS.genericErrors[code].stack = "<generic error, no stack>"
        })
    },
    staticInit: function() {
        FS.ensureErrnoError();
        FS.nameTable = new Array(4096);
        FS.mount(MEMFS, {}, "/");
        FS.createDefaultDirectories();
        FS.createDefaultDevices()
    },
    init: function(input, output, error) {
        assert(!FS.init.initialized,
        "FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");
        FS.init.initialized = true;
        FS.ensureErrnoError();
        Module["stdin"] = input || Module["stdin"];
        Module["stdout"] = output || Module["stdout"];
        Module["stderr"] = error || Module["stderr"];
        FS.createStandardStreams()
    },
    quit: function() {
        FS.init.initialized = false;
        for (var i = 0; i < FS.streams.length; i++) {
            var stream = FS.streams[i];
            if (!stream)
                continue;
            FS.close(stream)
        }
    },
    getMode: function(canRead, canWrite) {
        var mode = 0;
        if (canRead)
            mode |= 292 | 73;
        if (canWrite)
            mode |= 146;
        return mode
    },
    joinPath: function(parts, forceRelative) {
        var path = PATH.join.apply(null, parts);
        if (forceRelative && path[0] == "/")
            path = path.substr(1);
        return path
    },
    absolutePath: function(relative, base) {
        return PATH.resolve(base, relative)
    },
    standardizePath: function(path) {
        return PATH.normalize(path)
    },
    findObject: function(path, dontResolveLastLink) {
        var ret = FS.analyzePath(path, dontResolveLastLink);
        if (ret.exists)
            return ret.object;
        else {
            ___setErrNo(ret.error);
            return null
        }
    },
    analyzePath: function(path, dontResolveLastLink) {
        try {
            var lookup = FS.lookupPath(path, {
                follow: !dontResolveLastLink
            });
            path = lookup.path
        } catch (e) {}
        var ret = {
            isRoot: false,
            exists: false,
            error: 0,
            name: null,
            path: null,
            object: null,
            parentExists: false,
            parentPath: null,
            parentObject: null
        };
        try {
            var lookup = FS.lookupPath(path, {
                parent: true
            });
            ret.parentExists = true;
            ret.parentPath = lookup.path;
            ret.parentObject = lookup.node;
            ret.name = PATH.basename(path);
            lookup = FS.lookupPath(path, {
                follow: !dontResolveLastLink
            });
            ret.exists = true;
            ret.path = lookup.path;
            ret.object = lookup.node;
            ret.name = lookup.node.name;
            ret.isRoot = lookup.path === "/"
        } catch (e) {
            ret.error = e.errno
        }
        return ret
    },
    createFolder: function(parent, name, canRead, canWrite) {
        var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name);
        var mode = FS.getMode(canRead, canWrite);
        return FS.mkdir(path, mode)
    },
    createPath: function(parent, path, canRead, canWrite) {
        parent = typeof parent === "string" ? parent : FS.getPath(parent);
        var parts = path.split("/").reverse();
        while (parts.length) {
            var part =
            parts.pop();
            if (!part)
                continue;
            var current = PATH.join2(parent, part);
            try {
                FS.mkdir(current)
            } catch (e) {}
            parent = current
        }
        return current
    },
    createFile: function(parent, name, properties, canRead, canWrite) {
        var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name);
        var mode = FS.getMode(canRead, canWrite);
        return FS.create(path, mode)
    },
    createDataFile: function(parent, name, data, canRead, canWrite, canOwn) {
        var path = name ? PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name) : parent;
        var mode = FS.getMode(canRead,
        canWrite);
        var node = FS.create(path, mode);
        if (data) {
            if (typeof data === "string") {
                var arr = new Array(data.length);
                for (var i = 0, len = data.length; i < len; ++i)
                    arr[i] = data.charCodeAt(i);
                data = arr
            }
            FS.chmod(node, mode | 146);
            var stream = FS.open(node, "w");
            FS.write(stream, data, 0, data.length, 0, canOwn);
            FS.close(stream);
            FS.chmod(node, mode)
        }
        return node
    },
    createDevice: function(parent, name, input, output) {
        var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name);
        var mode = FS.getMode(!!input, !!output);
        if (!FS.createDevice.major)
            FS.createDevice.major =
            64;
        var dev = FS.makedev(FS.createDevice.major++, 0);
        FS.registerDevice(dev, {
            open: function(stream) {
                stream.seekable = false
            },
            close: function(stream) {
                if (output && output.buffer && output.buffer.length)
                    output(10)
            },
            read: function(stream, buffer, offset, length, pos) {
                var bytesRead = 0;
                for (var i = 0; i < length; i++) {
                    var result;
                    try {
                        result = input()
                    } catch (e) {
                        throw new FS.ErrnoError(ERRNO_CODES.EIO);
                    }
                    if (result === undefined && bytesRead === 0)
                        throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
                    if (result === null || result === undefined)
                        break;
                    bytesRead++;
                    buffer[offset + i] = result
                }
                if (bytesRead)
                    stream.node.timestamp = Date.now();
                return bytesRead
            },
            write: function(stream, buffer, offset, length, pos) {
                for (var i = 0; i < length; i++)
                    try {
                        output(buffer[offset + i])
                    } catch (e) {
                        throw new FS.ErrnoError(ERRNO_CODES.EIO);
                    }
                if (length)
                    stream.node.timestamp = Date.now();
                return i
            }
        });
        return FS.mkdev(path, mode, dev)
    },
    createLink: function(parent, name, target, canRead, canWrite) {
        var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name);
        return FS.symlink(target, path)
    },
    forceLoadFile: function(obj) {
        if (obj.isDevice ||
        obj.isFolder || obj.link || obj.contents)
            return true;
        var success = true;
        if (typeof XMLHttpRequest !== "undefined")
            throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
        else if (Module["read"])
            try {
                obj.contents = intArrayFromString(Module["read"](obj.url), true);
                obj.usedBytes = obj.contents.length
            } catch (e) {
                success = false
            }
        else
            throw new Error("Cannot load without read() or XMLHttpRequest.");
        if (!success)
            ___setErrNo(ERRNO_CODES.EIO);
        return success
    },
    createLazyFile: function(parent, name, url, canRead, canWrite) {
        function LazyUint8Array() {
            this.lengthKnown = false;
            this.chunks = []
        }
        LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
            if (idx > this.length - 1 || idx < 0)
                return undefined;
            var chunkOffset = idx % this.chunkSize;
            var chunkNum = Math.floor(idx / this.chunkSize);
            return this.getter(chunkNum)[chunkOffset]
        };
        LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
            this.getter =
            getter
        };
        LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
            var xhr = new XMLHttpRequest;
            xhr.open("HEAD", url, false);
            xhr.send(null);
            if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
                throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
            var datalength = Number(xhr.getResponseHeader("Content-length"));
            var header;
            var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
            var chunkSize = 1024 * 1024;
            if (!hasByteServing)
                chunkSize = datalength;
            var doXHR =
            function(from, to) {
                if (from > to)
                    throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
                if (to > datalength - 1)
                    throw new Error("only " + datalength + " bytes available! programmer error!");
                var xhr = new XMLHttpRequest;
                xhr.open("GET", url, false);
                if (datalength !== chunkSize)
                    xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
                if (typeof Uint8Array != "undefined")
                    xhr.responseType = "arraybuffer";
                if (xhr.overrideMimeType)
                    xhr.overrideMimeType("text/plain; charset=x-user-defined");
                xhr.send(null);
                if (!(xhr.status >=
                200 && xhr.status < 300 || xhr.status === 304))
                    throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
                if (xhr.response !== undefined)
                    return new Uint8Array(xhr.response || []);
                else
                    return intArrayFromString(xhr.responseText || "", true)
            };
            var lazyArray = this;
            lazyArray.setDataGetter(function(chunkNum) {
                var start = chunkNum * chunkSize;
                var end = (chunkNum + 1) * chunkSize - 1;
                end = Math.min(end, datalength - 1);
                if (typeof lazyArray.chunks[chunkNum] === "undefined")
                    lazyArray.chunks[chunkNum] = doXHR(start, end);
                if (typeof lazyArray.chunks[chunkNum] ===
                "undefined")
                    throw new Error("doXHR failed!");
                return lazyArray.chunks[chunkNum]
            });
            this._length = datalength;
            this._chunkSize = chunkSize;
            this.lengthKnown = true
        };
        if (typeof XMLHttpRequest !== "undefined") {
            if (!ENVIRONMENT_IS_WORKER)
                throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";
            var lazyArray = new LazyUint8Array;
            Object.defineProperty(lazyArray, "length", {
                get: function() {
                    if (!this.lengthKnown)
                        this.cacheLength();
                    return this._length
                }
            });
            Object.defineProperty(lazyArray,
            "chunkSize", {
                get: function() {
                    if (!this.lengthKnown)
                        this.cacheLength();
                    return this._chunkSize
                }
            });
            var properties = {
                isDevice: false,
                contents: lazyArray
            }
        } else
            var properties = {
                isDevice: false,
                url: url
            };
        var node = FS.createFile(parent, name, properties, canRead, canWrite);
        if (properties.contents)
            node.contents = properties.contents;
        else if (properties.url) {
            node.contents = null;
            node.url = properties.url
        }
        Object.defineProperty(node, "usedBytes", {
            get: function() {
                return this.contents.length
            }
        });
        var stream_ops = {};
        var keys = Object.keys(node.stream_ops);
        keys.forEach(function(key) {
            var fn = node.stream_ops[key];
            stream_ops[key] = function forceLoadLazyFile() {
                if (!FS.forceLoadFile(node))
                    throw new FS.ErrnoError(ERRNO_CODES.EIO);
                return fn.apply(null, arguments)
            }
        });
        stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
            if (!FS.forceLoadFile(node))
                throw new FS.ErrnoError(ERRNO_CODES.EIO);
            var contents = stream.node.contents;
            if (position >= contents.length)
                return 0;
            var size = Math.min(contents.length - position, length);
            assert(size >= 0);
            if (contents.slice)
                for (var i =
                0; i < size; i++)
                    buffer[offset + i] = contents[position + i];
            else
                for (var i = 0; i < size; i++)
                    buffer[offset + i] = contents.get(position + i);
            return size
        };
        node.stream_ops = stream_ops;
        return node
    },
    createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) {
        Browser.init();
        var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
        function processData(byteArray) {
            function finish(byteArray) {
                if (!dontCreateFile)
                    FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
                if (onload)
                    onload();
                removeRunDependency("cp " + fullname)
            }
            var handled = false;
            Module["preloadPlugins"].forEach(function(plugin) {
                if (handled)
                    return;
                if (plugin["canHandle"](fullname)) {
                    plugin["handle"](byteArray, fullname, finish, function() {
                        if (onerror)
                            onerror();
                        removeRunDependency("cp " + fullname)
                    });
                    handled = true
                }
            });
            if (!handled)
                finish(byteArray)
        }
        addRunDependency("cp " + fullname);
        if (typeof url == "string")
            Browser.asyncLoad(url, function(byteArray) {
                processData(byteArray)
            }, onerror);
        else
            processData(url)
    },
    indexedDB: function() {
        return window.indexedDB ||
            window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB
    },
    DB_NAME: function() {
        return "EM_FS_" + window.location.pathname
    },
    DB_VERSION: 20,
    DB_STORE_NAME: "FILE_DATA",
    saveFilesToDB: function(paths, onload, onerror) {
        onload = onload || function() {};
        onerror = onerror || function() {};
        var indexedDB = FS.indexedDB();
        try {
            var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION)
        } catch (e) {
            return onerror(e)
        }
        openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
            console.log("creating db");
            var db = openRequest.result;
            db.createObjectStore(FS.DB_STORE_NAME)
        };
        openRequest.onsuccess = function openRequest_onsuccess() {
            var db = openRequest.result;
            var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite");
            var files = transaction.objectStore(FS.DB_STORE_NAME);
            var ok = 0,
                fail = 0,
                total = paths.length;
            function finish() {
                if (fail == 0)
                    onload();
                else
                    onerror()
            }
            paths.forEach(function(path) {
                var putRequest = files.put(FS.analyzePath(path).object.contents, path);
                putRequest.onsuccess = function putRequest_onsuccess() {
                    ok++;
                    if (ok + fail == total)
                        finish()
                };
                putRequest.onerror = function putRequest_onerror() {
                    fail++;
                    if (ok + fail == total)
                        finish()
                }
            });
            transaction.onerror = onerror
        };
        openRequest.onerror = onerror
    },
    loadFilesFromDB: function(paths, onload, onerror) {
        onload = onload || function() {};
        onerror = onerror || function() {};
        var indexedDB = FS.indexedDB();
        try {
            var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION)
        } catch (e) {
            return onerror(e)
        }
        openRequest.onupgradeneeded = onerror;
        openRequest.onsuccess = function openRequest_onsuccess() {
            var db = openRequest.result;
            try {
                var transaction =
                db.transaction([FS.DB_STORE_NAME], "readonly")
            } catch (e) {
                onerror(e);
                return
            }
            var files = transaction.objectStore(FS.DB_STORE_NAME);
            var ok = 0,
                fail = 0,
                total = paths.length;
            function finish() {
                if (fail == 0)
                    onload();
                else
                    onerror()
            }
            paths.forEach(function(path) {
                var getRequest = files.get(path);
                getRequest.onsuccess = function getRequest_onsuccess() {
                    if (FS.analyzePath(path).exists)
                        FS.unlink(path);
                    FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
                    ok++;
                    if (ok + fail == total)
                        finish()
                };
                getRequest.onerror =
                function getRequest_onerror() {
                    fail++;
                    if (ok + fail == total)
                        finish()
                }
            });
            transaction.onerror = onerror
        };
        openRequest.onerror = onerror
    }
};
var PATH = {
    splitPath: function(filename) {
        var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
        return splitPathRe.exec(filename).slice(1)
    },
    normalizeArray: function(parts, allowAboveRoot) {
        var up = 0;
        for (var i = parts.length - 1; i >= 0; i--) {
            var last = parts[i];
            if (last === ".")
                parts.splice(i, 1);
            else if (last === "..") {
                parts.splice(i, 1);
                up++
            } else if (up) {
                parts.splice(i, 1);
                up--
            }
        }
        if (allowAboveRoot)
            for (; up--; up)
                parts.unshift("..");
        return parts
    },
    normalize: function(path) {
        var isAbsolute = path.charAt(0) ===
            "/",
            trailingSlash = path.substr(-1) === "/";
        path = PATH.normalizeArray(path.split("/").filter(function(p) {
            return !!p
        }), !isAbsolute).join("/");
        if (!path && !isAbsolute)
            path = ".";
        if (path && trailingSlash)
            path += "/";
        return (isAbsolute ? "/" : "") + path
    },
    dirname: function(path) {
        var result = PATH.splitPath(path),
            root = result[0],
            dir = result[1];
        if (!root && !dir)
            return ".";
        if (dir)
            dir = dir.substr(0, dir.length - 1);
        return root + dir
    },
    basename: function(path) {
        if (path === "/")
            return "/";
        var lastSlash = path.lastIndexOf("/");
        if (lastSlash === -1)
            return path;
        return path.substr(lastSlash + 1)
    },
    extname: function(path) {
        return PATH.splitPath(path)[3]
    },
    join: function() {
        var paths = Array.prototype.slice.call(arguments, 0);
        return PATH.normalize(paths.join("/"))
    },
    join2: function(l, r) {
        return PATH.normalize(l + "/" + r)
    },
    resolve: function() {
        var resolvedPath = "",
            resolvedAbsolute = false;
        for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
            var path = i >= 0 ? arguments[i] : FS.cwd();
            if (typeof path !== "string")
                throw new TypeError("Arguments to path.resolve must be strings");
            else if (!path)
                continue;
            resolvedPath = path + "/" + resolvedPath;
            resolvedAbsolute = path.charAt(0) === "/"
        }
        resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(function(p) {
            return !!p
        }), !resolvedAbsolute).join("/");
        return (resolvedAbsolute ? "/" : "") + resolvedPath || "."
    },
    relative: function(from, to) {
        from = PATH.resolve(from).substr(1);
        to = PATH.resolve(to).substr(1);
        function trim(arr) {
            var start = 0;
            for (; start < arr.length; start++)
                if (arr[start] !== "")
                    break;
            var end = arr.length - 1;
            for (; end >= 0; end--)
                if (arr[end] !== "")
                    break;
            if (start > end)
                return [];
            return arr.slice(start, end - start + 1)
        }
        var fromParts = trim(from.split("/"));
        var toParts = trim(to.split("/"));
        var length = Math.min(fromParts.length, toParts.length);
        var samePartsLength = length;
        for (var i = 0; i < length; i++)
            if (fromParts[i] !== toParts[i]) {
                samePartsLength = i;
                break
            }
        var outputParts = [];
        for (var i = samePartsLength; i < fromParts.length; i++)
            outputParts.push("..");
        outputParts = outputParts.concat(toParts.slice(samePartsLength));
        return outputParts.join("/")
    }
};
var Browser = {
    mainLoop: {
        scheduler: null,
        method: "",
        shouldPause: false,
        paused: false,
        queue: [],
        pause: function() {
            Browser.mainLoop.shouldPause = true
        },
        resume: function() {
            if (Browser.mainLoop.paused) {
                Browser.mainLoop.paused = false;
                Browser.mainLoop.scheduler()
            }
            Browser.mainLoop.shouldPause = false
        },
        updateStatus: function() {
            if (Module["setStatus"]) {
                var message = Module["statusMessage"] || "Please wait...";
                var remaining = Browser.mainLoop.remainingBlockers;
                var expected = Browser.mainLoop.expectedBlockers;
                if (remaining)
                    if (remaining <
                    expected)
                        Module["setStatus"](message + " (" + (expected - remaining) + "/" + expected + ")");
                    else
                        Module["setStatus"](message);
                else
                    Module["setStatus"]("")
            }
        }
    },
    isFullScreen: false,
    pointerLock: false,
    moduleContextCreatedCallbacks: [],
    workers: [],
    init: function() {
        if (!Module["preloadPlugins"])
            Module["preloadPlugins"] = [];
        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 : undefined;
        if (!Module.noImageDecoding && typeof Browser.URLObject === "undefined") {
            console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
            Module.noImageDecoding = true
        }
        var imagePlugin =
        {};
        imagePlugin["canHandle"] = function imagePlugin_canHandle(name) {
            return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name)
        };
        imagePlugin["handle"] = function imagePlugin_handle(byteArray, name, onload, onerror) {
            var b = null;
            if (Browser.hasBlobConstructor)
                try {
                    b = new Blob([byteArray], {
                        type: Browser.getMimetype(name)
                    });
                    if (b.size !== byteArray.length)
                        b = new Blob([(new Uint8Array(byteArray)).buffer], {
                            type: Browser.getMimetype(name)
                        })
                } catch (e) {
                    Runtime.warnOnce("Blob constructor present but fails: " + e + "; falling back to blob builder")
                }
            if (!b) {
                var bb =
                new Browser.BlobBuilder;
                bb.append((new Uint8Array(byteArray)).buffer);
                b = bb.getBlob()
            }
            var url = Browser.URLObject.createObjectURL(b);
            var img = new Image;
            img.onload = function img_onload() {
                assert(img.complete, "Image " + name + " could not be decoded");
                var canvas = document.createElement("canvas");
                canvas.width = img.width;
                canvas.height = img.height;
                var ctx = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0);
                Module["preloadedImages"][name] = canvas;
                Browser.URLObject.revokeObjectURL(url);
                if (onload)
                    onload(byteArray)
            };
            img.onerror =
            function img_onerror(event) {
                console.log("Image " + url + " could not be decoded");
                if (onerror)
                    onerror()
            };
            img.src = url
        };
        Module["preloadPlugins"].push(imagePlugin);
        var audioPlugin = {};
        audioPlugin["canHandle"] = function audioPlugin_canHandle(name) {
            return !Module.noAudioDecoding && name.substr(-4) in {
                    ".ogg": 1,
                    ".wav": 1,
                    ".mp3": 1
                }
        };
        audioPlugin["handle"] = function audioPlugin_handle(byteArray, name, onload, onerror) {
            var done = false;
            function finish(audio) {
                if (done)
                    return;
                done = true;
                Module["preloadedAudios"][name] = audio;
                if (onload)
                    onload(byteArray)
            }
            function fail() {
                if (done)
                    return;
                done = true;
                Module["preloadedAudios"][name] = new Audio;
                if (onerror)
                    onerror()
            }
            if (Browser.hasBlobConstructor) {
                try {
                    var b = new Blob([byteArray], {
                        type: Browser.getMimetype(name)
                    })
                } catch (e) {
                    return fail()
                }
                var url = Browser.URLObject.createObjectURL(b);
                var audio = new Audio;
                audio.addEventListener("canplaythrough", function() {
                    finish(audio)
                }, false);
                audio.onerror = function audio_onerror(event) {
                    if (done)
                        return;
                    console.log("warning: browser could not fully decode audio " + name + ", trying slower base64 approach");
                    function encode64(data) {
                        var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
                        var PAD = "=";
                        var ret = "";
                        var leftchar = 0;
                        var leftbits = 0;
                        for (var i = 0; i < data.length; i++) {
                            leftchar = leftchar << 8 | data[i];
                            leftbits += 8;
                            while (leftbits >= 6) {
                                var curr = leftchar >> leftbits - 6 & 63;
                                leftbits -= 6;
                                ret += BASE[curr]
                            }
                        }
                        if (leftbits == 2) {
                            ret += BASE[(leftchar & 3) << 4];
                            ret += PAD + PAD
                        } else if (leftbits == 4) {
                            ret += BASE[(leftchar & 15) << 2];
                            ret += PAD
                        }
                        return ret
                    }
                    audio.src = "data:audio/x-" + name.substr(-3) + ";base64," + encode64(byteArray);
                    finish(audio)
                };
                audio.src = url;
                Browser.safeSetTimeout(function() {
                    finish(audio)
                }, 1E4)
            } else
                return fail()
        };
        Module["preloadPlugins"].push(audioPlugin);
        var canvas = Module["canvas"];
        if (canvas) {
            canvas.requestPointerLock = canvas["requestPointerLock"] || canvas["mozRequestPointerLock"] || canvas["webkitRequestPointerLock"] || canvas["msRequestPointerLock"] || function() {};
            canvas.exitPointerLock = document["exitPointerLock"] || document["mozExitPointerLock"] || document["webkitExitPointerLock"] || document["msExitPointerLock"] ||
            function() {};
            canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
            function pointerLockChange() {
                Browser.pointerLock = document["pointerLockElement"] === canvas || document["mozPointerLockElement"] === canvas || document["webkitPointerLockElement"] === canvas || document["msPointerLockElement"] === canvas
            }
            document.addEventListener("pointerlockchange", pointerLockChange, false);
            document.addEventListener("mozpointerlockchange", pointerLockChange, false);
            document.addEventListener("webkitpointerlockchange", pointerLockChange,
            false);
            document.addEventListener("mspointerlockchange", pointerLockChange, false);
            if (Module["elementPointerLock"])
                canvas.addEventListener("click", function(ev) {
                    if (!Browser.pointerLock && canvas.requestPointerLock) {
                        canvas.requestPointerLock();
                        ev.preventDefault()
                    }
                }, false)
        }
    },
    createContext: function(canvas, useWebGL, setInModule, webGLContextAttributes) {
        var ctx;
        var errorInfo = "?";
        function onContextCreationError(event) {
            errorInfo = event.statusMessage || errorInfo
        }
        try {
            if (useWebGL) {
                var contextAttributes = {
                    antialias: false,
                    alpha: false
                };
                if (webGLContextAttributes)
                    for (var attribute in webGLContextAttributes)
                        contextAttributes[attribute] = webGLContextAttributes[attribute];
                canvas.addEventListener("webglcontextcreationerror", onContextCreationError, false);
                try {
                    ["experimental-webgl", "webgl"].some(function(webglId) {
                        return ctx = canvas.getContext(webglId, contextAttributes)
                    })
                } finally {
                    canvas.removeEventListener("webglcontextcreationerror", onContextCreationError, false)
                }
            } else
                ctx = canvas.getContext("2d");
            if (!ctx)
                throw ":(";
        } catch (e) {
            Module.print("Could not create canvas: " +
            [errorInfo, e]);
            return null
        }
        if (useWebGL)
            canvas.style.backgroundColor = "black";
        if (setInModule) {
            GLctx = 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;
            var canvasContainer = canvas.parentNode;
            if ((document["webkitFullScreenElement"] || document["webkitFullscreenElement"] || document["mozFullScreenElement"] || document["mozFullscreenElement"] || document["fullScreenElement"] || document["fullscreenElement"] || document["msFullScreenElement"] || document["msFullscreenElement"] ||
            document["webkitCurrentFullScreenElement"]) === canvasContainer) {
                canvas.cancelFullScreen = document["cancelFullScreen"] || document["mozCancelFullScreen"] || document["webkitCancelFullScreen"] || document["msExitFullscreen"] || document["exitFullscreen"] || function() {};
                canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
                if (Browser.lockPointer)
                    canvas.requestPointerLock();
                Browser.isFullScreen = true;
                if (Browser.resizeCanvas)
                    Browser.setFullScreenCanvasSize()
            } else {
                canvasContainer.parentNode.insertBefore(canvas,
                canvasContainer);
                canvasContainer.parentNode.removeChild(canvasContainer);
                if (Browser.resizeCanvas)
                    Browser.setWindowedCanvasSize()
            }
            if (Module["onFullScreen"])
                Module["onFullScreen"](Browser.isFullScreen);
            Browser.updateCanvasDimensions(canvas)
        }
        if (!Browser.fullScreenHandlersInstalled) {
            Browser.fullScreenHandlersInstalled = true;
            document.addEventListener("fullscreenchange", fullScreenChange, false);
            document.addEventListener("mozfullscreenchange", fullScreenChange, false);
            document.addEventListener("webkitfullscreenchange",
            fullScreenChange, false);
            document.addEventListener("MSFullscreenChange", fullScreenChange, false)
        }
        var canvasContainer = document.createElement("div");
        canvas.parentNode.insertBefore(canvasContainer, canvas);
        canvasContainer.appendChild(canvas);
        canvasContainer.requestFullScreen = canvasContainer["requestFullScreen"] || canvasContainer["mozRequestFullScreen"] || canvasContainer["msRequestFullscreen"] || (canvasContainer["webkitRequestFullScreen"] ? function() {
            canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])
        } :
        null);
        canvasContainer.requestFullScreen()
    },
    requestAnimationFrame: function requestAnimationFrame(func) {
        if (typeof window === "undefined")
            setTimeout(func, 1E3 / 60);
        else {
            if (!window.requestAnimationFrame)
                window.requestAnimationFrame = window["requestAnimationFrame"] || window["mozRequestAnimationFrame"] || 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) {
        Module["noExitRuntime"] = true;
        return setTimeout(function() {
            if (!ABORT)
                func()
        }, timeout)
    },
    safeSetInterval: function(func, timeout) {
        Module["noExitRuntime"] = true;
        return setInterval(function() {
            if (!ABORT)
                func()
        }, timeout)
    },
    getMimetype: function(name) {
        return {
            "jpg": "image/jpeg",
            "jpeg": "image/jpeg",
            "png": "image/png",
            "bmp": "image/bmp",
            "ogg": "audio/ogg",
            "wav": "audio/wav",
            "mp3": "audio/mpeg"
        }[name.substr(name.lastIndexOf(".") + 1)]
    },
    getUserMedia: function(func) {
        if (!window.getUserMedia)
            window.getUserMedia = navigator["getUserMedia"] || navigator["mozGetUserMedia"];
        window.getUserMedia(func)
    },
    getMovementX: function(event) {
        return event["movementX"] || event["mozMovementX"] || event["webkitMovementX"] || 0
    },
    getMovementY: function(event) {
        return event["movementY"] || event["mozMovementY"] || event["webkitMovementY"] || 0
    },
    getMouseWheelDelta: function(event) {
        var delta = 0;
        switch (event.type) {
        case "DOMMouseScroll":
            delta =
            event.detail;
            break;
        case "mousewheel":
            delta = -event.wheelDelta;
            break;
        case "wheel":
            delta = event.deltaY;
            break;
        default:
            throw "unrecognized mouse wheel event: " + event.type;
        }
        return Math.max(-1, Math.min(1, delta))
    },
    mouseX: 0,
    mouseY: 0,
    mouseMovementX: 0,
    mouseMovementY: 0,
    touches: {},
    lastTouches: {},
    calculateMouseEvent: function(event) {
        if (Browser.pointerLock) {
            if (event.type != "mousemove" && "mozMovementX" in event)
                Browser.mouseMovementX = Browser.mouseMovementY = 0;
            else {
                Browser.mouseMovementX = Browser.getMovementX(event);
                Browser.mouseMovementY =
                Browser.getMovementY(event)
            }
            if (typeof SDL != "undefined") {
                Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
                Browser.mouseY = SDL.mouseY + Browser.mouseMovementY
            } else {
                Browser.mouseX += Browser.mouseMovementX;
                Browser.mouseY += Browser.mouseMovementY
            }
        } else {
            var rect = Module["canvas"].getBoundingClientRect();
            var cw = Module["canvas"].width;
            var ch = Module["canvas"].height;
            var scrollX = typeof window.scrollX !== "undefined" ? window.scrollX : window.pageXOffset;
            var scrollY = typeof window.scrollY !== "undefined" ? window.scrollY : window.pageYOffset;
            if (event.type === "touchstart" || event.type === "touchend" || event.type === "touchmove") {
                var touch = event.touch;
                if (touch === undefined)
                    return;
                var adjustedX = touch.pageX - (scrollX + rect.left);
                var adjustedY = touch.pageY - (scrollY + rect.top);
                adjustedX = adjustedX * (cw / rect.width);
                adjustedY = adjustedY * (ch / rect.height);
                var coords = {
                    x: adjustedX,
                    y: adjustedY
                };
                if (event.type === "touchstart") {
                    Browser.lastTouches[touch.identifier] = coords;
                    Browser.touches[touch.identifier] = coords
                } else if (event.type === "touchend" || event.type === "touchmove") {
                    Browser.lastTouches[touch.identifier] =
                    Browser.touches[touch.identifier];
                    Browser.touches[touch.identifier] = {
                        x: adjustedX,
                        y: adjustedY
                    }
                }
                return
            }
            var x = event.pageX - (scrollX + rect.left);
            var y = event.pageY - (scrollY + rect.top);
            x = x * (cw / rect.width);
            y = y * (ch / rect.height);
            Browser.mouseMovementX = x - Browser.mouseX;
            Browser.mouseMovementY = y - Browser.mouseY;
            Browser.mouseX = x;
            Browser.mouseY = y
        }
    },
    xhrLoad: function(url, onload, onerror) {
        var xhr = new XMLHttpRequest;
        xhr.open("GET", url, true);
        xhr.responseType = "arraybuffer";
        xhr.onload = function xhr_onload() {
            if (xhr.status ==
            200 || xhr.status == 0 && xhr.response)
                onload(xhr.response);
            else
                onerror()
        };
        xhr.onerror = onerror;
        xhr.send(null)
    },
    asyncLoad: function(url, onload, onerror, noRunDep) {
        Browser.xhrLoad(url, function(arrayBuffer) {
            assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
            onload(new Uint8Array(arrayBuffer));
            if (!noRunDep)
                removeRunDependency("al " + url)
        }, function(event) {
            if (onerror)
                onerror();
            else
                throw 'Loading data file "' + url + '" failed.';
        });
        if (!noRunDep)
            addRunDependency("al " + url)
    },
    resizeListeners: [],
    updateResizeListeners: function() {
        var canvas = Module["canvas"];
        Browser.resizeListeners.forEach(function(listener) {
            listener(canvas.width, canvas.height)
        })
    },
    setCanvasSize: function(width, height, noUpdates) {
        var canvas = Module["canvas"];
        Browser.updateCanvasDimensions(canvas, width, height);
        if (!noUpdates)
            Browser.updateResizeListeners()
    },
    windowedWidth: 0,
    windowedHeight: 0,
    setFullScreenCanvasSize: function() {
        if (typeof SDL != "undefined") {
            var flags = HEAPU32[SDL.screen + Runtime.QUANTUM_SIZE * 0 >> 2];
            flags = flags | 8388608;
            HEAP32[SDL.screen +
            Runtime.QUANTUM_SIZE * 0 >> 2] = flags
        }
        Browser.updateResizeListeners()
    },
    setWindowedCanvasSize: function() {
        if (typeof SDL != "undefined") {
            var flags = HEAPU32[SDL.screen + Runtime.QUANTUM_SIZE * 0 >> 2];
            flags = flags & ~8388608;
            HEAP32[SDL.screen + Runtime.QUANTUM_SIZE * 0 >> 2] = flags
        }
        Browser.updateResizeListeners()
    },
    updateCanvasDimensions: function(canvas, wNative, hNative) {
        if (wNative && hNative) {
            canvas.widthNative = wNative;
            canvas.heightNative = hNative
        } else {
            wNative = canvas.widthNative;
            hNative = canvas.heightNative
        }
        var w = wNative;
        var h = hNative;
        if (Module["forcedAspectRatio"] && Module["forcedAspectRatio"] > 0)
            if (w / h < Module["forcedAspectRatio"])
                w = Math.round(h * Module["forcedAspectRatio"]);
            else
                h = Math.round(w / Module["forcedAspectRatio"]);
        if ((document["webkitFullScreenElement"] || document["webkitFullscreenElement"] || document["mozFullScreenElement"] || document["mozFullscreenElement"] || document["fullScreenElement"] || document["fullscreenElement"] || document["msFullScreenElement"] || document["msFullscreenElement"] || document["webkitCurrentFullScreenElement"]) ===
        canvas.parentNode && typeof screen != "undefined") {
            var factor = Math.min(screen.width / w, screen.height / h);
            w = Math.round(w * factor);
            h = Math.round(h * factor)
        }
        if (Browser.resizeCanvas) {
            if (canvas.width != w)
                canvas.width = w;
            if (canvas.height != h)
                canvas.height = h;
            if (typeof canvas.style != "undefined") {
                canvas.style.removeProperty("width");
                canvas.style.removeProperty("height")
            }
        } else {
            if (canvas.width != wNative)
                canvas.width = wNative;
            if (canvas.height != hNative)
                canvas.height = hNative;
            if (typeof canvas.style != "undefined")
                if (w != wNative ||
                h != hNative) {
                    canvas.style.setProperty("width", w + "px", "important");
                    canvas.style.setProperty("height", h + "px", "important")
                } else {
                    canvas.style.removeProperty("width");
                    canvas.style.removeProperty("height")
                }
        }
    }
};
function _time(ptr) {
    var ret = Math.floor(Date.now() / 1E3);
    if (ptr)
        HEAP32[ptr >> 2] = ret;
    return ret
}
function _sysconf(name) {
    switch (name) {
    case 30:
        return PAGE_SIZE;
    case 132:
    case 133:
    case 12:
    case 137:
    case 138:
    case 15:
    case 235:
    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
    case 149:
    case 13:
    case 10:
    case 236:
    case 153:
    case 9:
    case 21:
    case 22:
    case 159:
    case 154:
    case 14:
    case 77:
    case 78:
    case 139:
    case 80:
    case 81:
    case 79:
    case 82:
    case 68:
    case 67:
    case 164:
    case 11:
    case 29:
    case 47:
    case 48:
    case 95:
    case 52:
    case 51:
    case 46:
        return 200809;
    case 27:
    case 246:
    case 127:
    case 128:
    case 23:
    case 24:
    case 160:
    case 161:
    case 181:
    case 182:
    case 242:
    case 183:
    case 184:
    case 243:
    case 244:
    case 245:
    case 165:
    case 178:
    case 179:
    case 49:
    case 50:
    case 168:
    case 169:
    case 175:
    case 170:
    case 171:
    case 172:
    case 97:
    case 76:
    case 32:
    case 173:
    case 35:
        return -1;
    case 176:
    case 177:
    case 7:
    case 155:
    case 8:
    case 157:
    case 125:
    case 126:
    case 92:
    case 93:
    case 129:
    case 130:
    case 131:
    case 94:
    case 91:
        return 1;
    case 74:
    case 60:
    case 69:
    case 70:
    case 4:
        return 1024;
    case 31:
    case 42:
    case 72:
        return 32;
    case 87:
    case 26:
    case 33:
        return 2147483647;
    case 34:
    case 1:
        return 47839;
    case 38:
    case 36:
        return 99;
    case 43:
    case 37:
        return 2048;
    case 0:
        return 2097152;
    case 3:
        return 65536;
    case 28:
        return 32768;
    case 44:
        return 32767;
    case 75:
        return 16384;
    case 39:
        return 1E3;
    case 89:
        return 700;
    case 71:
        return 256;
    case 40:
        return 255;
    case 2:
        return 100;
    case 180:
        return 64;
    case 25:
        return 20;
    case 5:
        return 16;
    case 6:
        return 6;
    case 73:
        return 4;
    case 84:
        return 1
    }
    ___setErrNo(ERRNO_CODES.EINVAL);
    return -1
}
function _malloc(bytes) {
    var ptr = Runtime.dynamicAlloc(bytes + 8);
    return ptr + 8 & 4294967288
}
Module["_malloc"] = _malloc;
function ___cxa_allocate_exception(size) {
    var ptr = _malloc(size + ___cxa_exception_header_size);
    return ptr + ___cxa_exception_header_size
}
var __ZTISt9exception = allocate([allocate([1, 0, 0, 0, 0, 0, 0], "i8", ALLOC_STATIC) + 8, 0], "i32", ALLOC_STATIC);
___errno_state = Runtime.staticAlloc(4);
HEAP32[___errno_state >> 2] = 0;
Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) {
    Browser.requestFullScreen(lockPointer, resizeCanvas)
};
Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) {
    Browser.requestAnimationFrame(func)
};
Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) {
    Browser.setCanvasSize(width, height, noUpdates)
};
Module["pauseMainLoop"] = function Module_pauseMainLoop() {
    Browser.mainLoop.pause()
};
Module["resumeMainLoop"] = function Module_resumeMainLoop() {
    Browser.mainLoop.resume()
};
Module["getUserMedia"] = function Module_getUserMedia() {
    Browser.getUserMedia()
};
FS.staticInit();
__ATINIT__.unshift({
    func: function() {
        if (!Module["noFSInit"] && !FS.init.initialized)
            FS.init()
    }
});
__ATMAIN__.push({
    func: function() {
        FS.ignorePermissions = false
    }
});
__ATEXIT__.push({
    func: function() {
        FS.quit()
    }
});
Module["FS_createFolder"] = FS.createFolder;
Module["FS_createPath"] = FS.createPath;
Module["FS_createDataFile"] = FS.createDataFile;
Module["FS_createPreloadedFile"] = FS.createPreloadedFile;
Module["FS_createLazyFile"] = FS.createLazyFile;
Module["FS_createLink"] = FS.createLink;
Module["FS_createDevice"] = FS.createDevice;
__ATINIT__.unshift({
    func: function() {
        TTY.init()
    }
});
__ATEXIT__.push({
    func: function() {
        TTY.shutdown()
    }
});
TTY.utf8 = new Runtime.UTF8Processor;
if (ENVIRONMENT_IS_NODE) {
    var fs = require("fs");
    NODEFS.staticInit()
}
STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
staticSealed = true;
STACK_MAX = STACK_BASE + 5242880;
DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
var ctlz_i8 = allocate([8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "i8", ALLOC_DYNAMIC);
var cttz_i8 = allocate([8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0], "i8", ALLOC_DYNAMIC);
var Math_min = Math.min;
function invoke_diiiiid(index, a1, a2, a3, a4, a5, a6) {
    try {
        return Module["dynCall_diiiiid"](index, a1, a2, a3, a4, a5, a6)
    } 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_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_did(index, a1, a2) {
    try {
        return Module["dynCall_did"](index, a1, a2)
    } 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_diiiid(index, a1, a2, a3, a4, a5) {
    try {
        return Module["dynCall_diiiid"](index, a1, a2, a3, a4, a5)
    } 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_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_viid(index, a1, a2, a3) {
    try {
        Module["dynCall_viid"](index, a1, a2, a3)
    } 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_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)
}
function asmPrintFloat(x, y) {
    Module.print("float " + x + "," + y)
}
var asm = function(global, env, buffer) {
    "use asm";
    var a = new global.Int8Array(buffer);
    var b = new global.Int16Array(buffer);
    var c = new global.Int32Array(buffer);
    var d = new global.Uint8Array(buffer);
    var e = new global.Uint16Array(buffer);
    var f = new global.Uint32Array(buffer);
    var g = new global.Float32Array(buffer);
    var h = new global.Float64Array(buffer);
    var i = env.STACKTOP | 0;
    var j = env.STACK_MAX | 0;
    var k = env.tempDoublePtr | 0;
    var l = env.ABORT | 0;
    var m = env.cttz_i8 | 0;
    var n = env.ctlz_i8 | 0;
    var o = env.__ZTISt9exception | 0;
    var p =
    0;
    var q = 0;
    var r = 0;
    var s = 0;
    var t = +env.NaN,
        u = +env.Infinity;
    var v = 0,
        w = 0,
        x = 0,
        y = 0,
        z = 0,
        A = 0,
        B = 0,
        C = 0,
        D = 0;
    var E = 0;
    var F = 0;
    var G = 0;
    var H = 0;
    var I = 0;
    var J = 0;
    var K = 0;
    var L = 0;
    var M = 0;
    var N = 0;
    var O = global.Math.floor;
    var P = global.Math.abs;
    var Q = global.Math.sqrt;
    var R = global.Math.pow;
    var S = global.Math.cos;
    var T = global.Math.sin;
    var U = global.Math.tan;
    var V = global.Math.acos;
    var W = global.Math.asin;
    var X = global.Math.atan;
    var Y = global.Math.atan2;
    var Z = global.Math.exp;
    var _ = global.Math.log;
    var $ = global.Math.ceil;
    var aa =
    global.Math.imul;
    var ba = env.abort;
    var ca = env.assert;
    var da = env.asmPrintInt;
    var ea = env.asmPrintFloat;
    var fa = env.min;
    var ga = env.invoke_diiiiid;
    var ha = env.invoke_ii;
    var ia = env.invoke_viiiii;
    var ja = env.invoke_did;
    var ka = env.invoke_vi;
    var la = env.invoke_diiiid;
    var ma = env.invoke_vii;
    var na = env.invoke_iiii;
    var oa = env.invoke_viii;
    var pa = env.invoke_v;
    var qa = env.invoke_viid;
    var ra = env.invoke_iiiii;
    var sa = env.invoke_viiiiii;
    var ta = env.invoke_iii;
    var ua = env.invoke_iiiiii;
    var va = env.invoke_viiii;
    var wa = env._cosf;
    var xa = env.__ZSt9terminatev;
    var ya = env._b2WorldPreSolve;
    var za = env.___cxa_is_number_type;
    var Aa = env.___cxa_allocate_exception;
    var Ba = env.___cxa_find_matching_catch;
    var Ca = env._fflush;
    var Da = env._time;
    var Ea = env.__exit;
    var Fa = env.___setErrNo;
    var Ga = env._sbrk;
    var Ha = env.___cxa_begin_catch;
    var Ia = env._sinf;
    var Ja = env.___resumeException;
    var Ka = env.__ZSt18uncaught_exceptionv;
    var La = env._b2WorldRayCastCallback;
    var Ma = env._emscripten_memcpy_big;
    var Na = env._floorf;
    var Oa = env._sqrtf;
    var Pa = env._b2WorldBeginContactBody;
    var Qa = env.___errno_location;
    var Ra = env.__ZNSt9exceptionD2Ev;
    var Sa = env.___cxa_throw;
    var Ta = env._sysconf;
    var Ua = env._abort;
    var Va = env.___cxa_does_inherit;
    var Wa = env._b2WorldEndContactBody;
    var Xa = env._b2WorldQueryAABB;
    var Ya = env._b2WorldPostSolve;
    var Za = env._exit;
    var _a = env.___cxa_pure_virtual;
    var $a = 0;
    function $k(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0;
        d = i;
        i = i + 64 | 0;
        e = d;
        f = d + 16 | 0;
        g[e >> 2] = 3.4028234663852886E38;
        g[e + 4 >> 2] = 3.4028234663852886E38;
        h = e + 8 | 0;
        g[h >> 2] = -3.4028234663852886E38;
        g[e + 12 >> 2] = -3.4028234663852886E38;
        j = c[a + 44 >> 2] | 0;
        if ((j | 0) > 0) {
            k = c[a + 104 >> 2] | 0;
            l = c[a + 96 >> 2] | 0;
            m = +g[b >> 2];
            n = 3.4028234663852886E38;
            o = 3.4028234663852886E38;
            p = -3.4028234663852886E38;
            q = -3.4028234663852886E38;
            r = 0;
            do {
                s = k + (r << 3) | 0;
                t = +g[s >> 2];
                u = +g[s + 4 >> 2];
                s = l + (r << 3) | 0;
                v = +g[s >> 2];
                w = +g[s + 4 >> 2];
                x = v + t * m;
                t = u * m + w;
                u = v < x ? v : x;
                y = w < t ? w : t;
                n = n < u ? n : u;
                o = o < y ? o : y;
                y = +n;
                u = +o;
                s = e;
                g[s >> 2] = y;
                g[s + 4 >> 2] = u;
                u = v > x ? v : x;
                x = w > t ? w : t;
                p = p > u ? p : u;
                q = q > x ? q : x;
                x = +p;
                u = +q;
                s = h;
                g[s >> 2] = x;
                g[s + 4 >> 2] = u;
                r = r + 1 | 0
            } while ((r |
            0) < (j | 0))
        }
        c[f + 4 >> 2] = a;
        c[f >> 2] = 6872;
        j = f + 8 | 0;
        c[j + 0 >> 2] = c[b + 0 >> 2];
        c[j + 4 >> 2] = c[b + 4 >> 2];
        c[j + 8 >> 2] = c[b + 8 >> 2];
        c[j + 12 >> 2] = c[b + 12 >> 2];
        c[j + 16 >> 2] = c[b + 16 >> 2];
        c[j + 20 >> 2] = c[b + 20 >> 2];
        c[j + 24 >> 2] = c[b + 24 >> 2];
        Dj(c[a + 400 >> 2] | 0, f, e);
        i = d;
        return
    }
    function al(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la =
            0;
        e = i;
        i = i + 48 | 0;
        f = e;
        h = e + 16 | 0;
        j = b + 44 | 0;
        k = c[j >> 2] | 0;
        if ((k | 0) > 0) {
            l = c[b + 88 >> 2] | 0;
            m = b + 104 | 0;
            n = 0;
            do {
                if ((c[l + (n << 2) >> 2] & 1028 | 0) == 1028) {
                    o = c[m >> 2] | 0;
                    g[o + (n << 3) >> 2] = 0;
                    g[o + (n << 3) + 4 >> 2] = 0
                }
                n = n + 1 | 0
            } while ((n | 0) < (k | 0))
        }
        p = +g[d >> 2] * 2.5;
        k = b + 252 | 0;
        if ((c[k >> 2] | 0) <= 0) {
            i = e;
            return
        }
        n = b + 248 | 0;
        m = b + 96 | 0;
        l = f + 8 | 0;
        o = b + 144 | 0;
        q = b + 104 | 0;
        r = h + 16 | 0;
        s = h + 20 | 0;
        t = h + 4 | 0;
        u = b + 32 | 0;
        v = b + 320 | 0;
        w = d + 4 | 0;
        d = b + 88 | 0;
        x = b + 21 | 0;
        y = b + 112 | 0;
        z = 0;
        do {
            A = c[n >> 2] | 0;
            a:
            do if ((c[A + (z * 20 | 0) + 8 >> 2] & 1024 | 0) != 0) {
                B = c[A + (z * 20 | 0) >> 2] | 0;
                C = c[A + (z * 20 | 0) + 4 >> 2] | 0;
                D = c[m >> 2] | 0;
                E =
                D + (B << 3) | 0;
                F = +g[E >> 2];
                G = +g[E + 4 >> 2];
                E = D + (C << 3) | 0;
                H = +g[E >> 2];
                I = +g[E + 4 >> 2];
                J = +(F < H ? F : H);
                K = +(G < I ? G : I);
                E = f;
                g[E >> 2] = J;
                g[E + 4 >> 2] = K;
                K = +(F > H ? F : H);
                J = +(G > I ? G : I);
                E = l;
                g[E >> 2] = K;
                g[E + 4 >> 2] = J;
                E = c[o >> 2] | 0;
                D = c[E + (B << 2) >> 2] | 0;
                L = c[E + (C << 2) >> 2] | 0;
                if ((D | 0) != 0 ? (c[D + 12 >> 2] & 2 | 0) != 0 : 0) {
                    nk(D);
                    J = +g[D + 56 >> 2];
                    M = +g[D + 48 >> 2] - J * (G - +g[D + 44 >> 2]);
                    N = J * (F - +g[D + 40 >> 2]) + +g[D + 52 >> 2]
                } else {
                    E = (c[q >> 2] | 0) + (B << 3) | 0;
                    J = +g[E >> 2];
                    M = J;
                    N = +g[E + 4 >> 2]
                }
                if ((L | 0) != 0 ? (c[L + 12 >> 2] & 2 | 0) != 0 : 0) {
                    nk(L);
                    J = +g[L + 56 >> 2];
                    O = +g[L + 48 >> 2] - J * (I - +g[L + 44 >> 2]);
                    P = J * (H - +g[L +
                    40 >> 2]) + +g[L + 52 >> 2]
                } else {
                    E = (c[q >> 2] | 0) + (C << 3) | 0;
                    J = +g[E >> 2];
                    O = J;
                    P = +g[E + 4 >> 2]
                }
                J = H - F;
                H = I - G;
                I = O - M;
                K = P - N;
                Nk(h, b, f);
                E = c[r >> 2] | 0;
                C = c[s >> 2] | 0;
                if (E >>> 0 < C >>> 0) {
                    B = c[h >> 2] | 0;
                    R = c[t >> 2] | 0;
                    S = E;
                    while (1) {
                        E = c[S + 4 >> 2] & 1048575;
                        T = S;
                        S = S + 8 | 0;
                        c[r >> 2] = S;
                        if (E >>> 0 < B >>> 0 | E >>> 0 > R >>> 0)
                            if (S >>> 0 < C >>> 0) {
                                S = S;
                                continue
                            } else
                                break;
                        E = c[T >> 2] | 0;
                        if (!((E | 0) > -1))
                            break a;
                        T = (c[m >> 2] | 0) + (E << 3) | 0;
                        U = +g[T >> 2];
                        V = +g[T + 4 >> 2];
                        T = c[(c[o >> 2] | 0) + (E << 2) >> 2] | 0;
                        b:
                        do if (!((D | 0) == (T | 0) | (L | 0) == (T | 0))) {
                            W = (T | 0) == 0;
                            if (!W ? (c[T + 12 >> 2] & 2 | 0) != 0 : 0) {
                                nk(T);
                                X = +g[T + 56 >>
                                2];
                                Y = +g[T + 48 >> 2] - X * (V - +g[T + 44 >> 2]);
                                Z = X * (U - +g[T + 40 >> 2]) + +g[T + 52 >> 2]
                            } else {
                                _ = (c[q >> 2] | 0) + (E << 3) | 0;
                                X = +g[_ >> 2];
                                Y = X;
                                Z = +g[_ + 4 >> 2]
                            }
                            X = U - F;
                            $ = V - G;
                            aa = Y - M;
                            ba = Z - N;
                            ca = I * ba - K * aa;
                            da = J * ba - H * aa - (K * X - I * $);
                            ea = J * $ - H * X;
                            do if (ca == 0) {
                                if (da == 0)
                                    break b;
                                fa = -ea / da;
                                if (!(fa >= 0 & fa < p))
                                    break b;
                                ga = J + I * fa;
                                ha = H + K * fa;
                                ia = (ga * (X + aa * fa) + ha * ($ + ba * fa)) / (ga * ga + ha * ha);
                                if (ia >= 0 & ia <= 1)
                                    ja = ia;
                                else
                                    break b
                            } else {
                                ia = da * da - ea * 4 * ca;
                                if (ia < 0)
                                    break b;
                                ha = +Q(+ia);
                                ia = ca * 2;
                                ga = (-da - ha) / ia;
                                fa = (ha - da) / ia;
                                _ = ga > fa;
                                ia = _ ? fa : ga;
                                ha = _ ? ga : fa;
                                fa = J + I * ia;
                                ga = H + K * ia;
                                ka = (fa *
                                (X + aa * ia) + ga * ($ + ba * ia)) / (fa * fa + ga * ga);
                                if (ia >= 0 & ia < p ? ka >= 0 & ka <= 1 : 0) {
                                    ja = ka;
                                    break
                                }
                                if (!(ha >= 0 & ha < p))
                                    break b;
                                ka = J + I * ha;
                                ia = H + K * ha;
                                ga = (ka * (X + aa * ha) + ia * ($ + ba * ha)) / (ka * ka + ia * ia);
                                if (ga >= 0 & ga <= 1)
                                    ja = ga;
                                else
                                    break b
                            }
                            while (0);
                            ba = M + I * ja - Y;
                            $ = N + K * ja - Z;
                            aa = +g[u >> 2] * .75;
                            X = aa * +g[v >> 2] * aa;
                            aa = ba * X;
                            da = $ * X;
                            if (!W ? (c[T + 12 >> 2] & 2 | 0) != 0 : 0) {
                                nk(T);
                                X = +g[T + 32 >> 2];
                                nk(T);
                                ca = +g[T + 36 >> 2];
                                if (X > 0) {
                                    ea = 1 / X;
                                    _ = T + 48 | 0;
                                    g[_ >> 2] = aa * ea + +g[_ >> 2];
                                    _ = T + 52 | 0;
                                    g[_ >> 2] = da * ea + +g[_ >> 2]
                                }
                                if (ca > 0) {
                                    nk(T);
                                    _ = T + 40 | 0;
                                    ea = +g[_ >> 2];
                                    la = T + 56 | 0;
                                    g[la >> 2] = (da * (U - ea) - aa *
                                    (V - +g[_ + 4 >> 2])) / ca + +g[la >> 2]
                                }
                            } else {
                                la = c[q >> 2] | 0;
                                _ = la + (E << 3) | 0;
                                g[_ >> 2] = ba + +g[_ >> 2];
                                _ = la + (E << 3) + 4 | 0;
                                g[_ >> 2] = $ + +g[_ >> 2]
                            }
                            $ = -+g[w >> 2];
                            ba = aa * $;
                            aa = da * $;
                            if (ba != 0 | aa != 0 ? (c[(c[d >> 2] | 0) + (E << 2) >> 2] & 4 | 0) == 0 : 0) {
                                if ((a[x >> 0] | 0) == 0) {
                                    xn(c[y >> 2] | 0, 0, c[j >> 2] << 3 | 0) | 0;
                                    a[x >> 0] = 1
                                }
                                _ = c[y >> 2] | 0;
                                la = _ + (E << 3) | 0;
                                g[la >> 2] = ba + +g[la >> 2];
                                la = _ + (E << 3) + 4 | 0;
                                g[la >> 2] = aa + +g[la >> 2]
                            }
                        }
                        while (0);
                        if (!(S >>> 0 < C >>> 0))
                            break
                    }
                }
            }
            while (0);
            z = z + 1 | 0
        } while ((z | 0) < (c[k >> 2] | 0));
        i = e;
        return
    }
    function bl(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            ga = 0;
        e = i;
        i = i + 48 | 0;
        f = e + 32 | 0;
        h = e + 28 | 0;
        j = e;
        k = b + 44 | 0;
        l = c[k >> 2] | 0;
        if ((l | 0) == 0) {
            i = e;
            return
        }
        m = c[b + 280 >> 2] | 0;
        a:
        do if ((m | 0) != 0) {
            n = b + 296 | 0;
            o = n;
            p = +g[d >> 2] / +g[b + 396 >> 2] * 4294967296;
            q = zn(~~p >>> 0 | 0, (+P(p) >= 1 ? p > 0 ? (fa(+O(p / 4294967296), 4294967295) | 0) >>> 0 : ~~+$((p - +(~~p >>> 0)) / 4294967296) >>> 0 : 0) | 0, c[o >> 2] | 0, c[o + 4 >> 2] | 0) | 0;
            o = E;
            r = n;
            c[r >> 2] = q;
            c[r + 4 >> 2] = o;
            r = c[b +
            288 >> 2] | 0;
            q = b + 304 | 0;
            if ((a[q >> 0] | 0) != 0) {
                c[h >> 2] = m;
                sl(r, r + (l << 2) | 0, h);
                a[q >> 0] = 0
            }
            if ((l | 0) > 0) {
                q = b + 88 | 0;
                n = l;
                do {
                    n = n + -1 | 0;
                    s = c[r + (n << 2) >> 2] | 0;
                    t = c[m + (s << 2) >> 2] | 0;
                    if ((o | 0) < (t | 0) | (t | 0) < 1)
                        break a;
                    Ak(b, s, c[(c[q >> 2] | 0) + (s << 2) >> 2] | 2)
                } while ((n | 0) > 0)
            }
        }
        while (0);
        m = b + 8 | 0;
        if ((c[m >> 2] & 2 | 0) != 0)
            xk(b);
        l = b + 12 | 0;
        if ((a[l >> 0] | 0) != 0) {
            c[m >> 2] = 0;
            h = c[k >> 2] | 0;
            if ((h | 0) > 0) {
                n = c[b + 88 >> 2] | 0;
                q = 0;
                o = 0;
                do {
                    q = c[n + (o << 2) >> 2] | q;
                    c[m >> 2] = q;
                    o = o + 1 | 0
                } while ((o | 0) != (h | 0))
            }
            a[l >> 0] = 0
        }
        l = b + 20 | 0;
        if ((a[l >> 0] | 0) != 0) {
            h = b + 16 | 0;
            c[h >> 2] = 0;
            o = c[b + 312 >> 2] | 0;
            if ((o |
            0) != 0) {
                q = 0;
                n = o;
                do {
                    q = c[n + 12 >> 2] | q;
                    c[h >> 2] = q;
                    n = c[n + 24 >> 2] | 0
                } while ((n | 0) != 0)
            }
            a[l >> 0] = 0
        }
        if ((a[b >> 0] | 0) != 0) {
            i = e;
            return
        }
        l = b + 24 | 0;
        c[l >> 2] = 0;
        n = d + 20 | 0;
        if ((c[n >> 2] | 0) <= 0) {
            i = e;
            return
        }
        q = b + 4 | 0;
        h = j + 4 | 0;
        o = b + 116 | 0;
        r = b + 236 | 0;
        s = b + 232 | 0;
        t = b + 220 | 0;
        u = b + 216 | 0;
        v = b + 16 | 0;
        w = b + 21 | 0;
        x = b + 324 | 0;
        y = b + 400 | 0;
        z = b + 104 | 0;
        A = b + 32 | 0;
        B = b + 88 | 0;
        C = b + 96 | 0;
        D = b + 372 | 0;
        F = b + 144 | 0;
        G = b + 132 | 0;
        H = b + 368 | 0;
        I = b + 364 | 0;
        J = b + 36 | 0;
        K = b + 28 | 0;
        L = b + 112 | 0;
        M = f + 4 | 0;
        do {
            c[q >> 2] = (c[q >> 2] | 0) + 1;
            c[j + 0 >> 2] = c[d + 0 >> 2];
            c[j + 4 >> 2] = c[d + 4 >> 2];
            c[j + 8 >> 2] = c[d + 8 >> 2];
            c[j + 12 >> 2] = c[d + 12 >>
            2];
            c[j + 16 >> 2] = c[d + 16 >> 2];
            c[j + 20 >> 2] = c[d + 20 >> 2];
            c[j + 24 >> 2] = c[d + 24 >> 2];
            p = +(c[n >> 2] | 0);
            N = +g[j >> 2] / p;
            g[j >> 2] = N;
            R = +g[h >> 2] * p;
            g[h >> 2] = R;
            Gk(b, 0);
            Yk(b);
            xn(c[o >> 2] | 0, 0, c[k >> 2] << 2 | 0) | 0;
            S = c[r >> 2] | 0;
            if ((S | 0) > 0) {
                T = c[s >> 2] | 0;
                U = c[o >> 2] | 0;
                V = 0;
                do {
                    W = U + (c[T + (V * 28 | 0) >> 2] << 2) | 0;
                    g[W >> 2] = +g[T + (V * 28 | 0) + 12 >> 2] + +g[W >> 2];
                    V = V + 1 | 0
                } while ((V | 0) != (S | 0))
            }
            S = c[t >> 2] | 0;
            if ((S | 0) > 0) {
                V = c[u >> 2] | 0;
                T = c[o >> 2] | 0;
                U = 0;
                do {
                    W = c[V + (U * 24 | 0) + 4 >> 2] | 0;
                    p = +g[V + (U * 24 | 0) + 8 >> 2];
                    X = T + (c[V + (U * 24 | 0) >> 2] << 2) | 0;
                    g[X >> 2] = p + +g[X >> 2];
                    X = T + (W << 2) | 0;
                    g[X >> 2] = p + +g[X >>
                    2];
                    U = U + 1 | 0
                } while ((U | 0) != (S | 0))
            }
            if ((c[v >> 2] & 16 | 0) != 0)
                Mk(b);
            S = c[m >> 2] | 0;
            if ((S & 4096 | 0) == 0)
                Y = S;
            else {
                S = c[B >> 2] | 0;
                c[f >> 2] = 7360;
                c[M >> 2] = S;
                Hk(b, 0, c[k >> 2] | 0, f);
                if ((c[k >> 2] | 0) > 0) {
                    S = c[B >> 2] | 0;
                    U = 0;
                    do {
                        T = S + (U << 2) | 0;
                        c[T >> 2] = c[T >> 2] & -4097;
                        U = U + 1 | 0
                    } while ((U | 0) < (c[k >> 2] | 0))
                }
                U = c[m >> 2] & -4097;
                c[m >> 2] = U;
                Y = U
            }
            if ((a[w >> 0] | 0) != 0) {
                p = +g[J >> 2] * 1.3333333730697632;
                Z = N * p * +g[K >> 2] * p;
                U = c[k >> 2] | 0;
                if ((U | 0) > 0) {
                    S = c[z >> 2] | 0;
                    T = c[L >> 2] | 0;
                    V = 0;
                    do {
                        p = Z * +g[T + (V << 3) + 4 >> 2];
                        X = S + (V << 3) | 0;
                        g[X >> 2] = Z * +g[T + (V << 3) >> 2] + +g[X >> 2];
                        X = S + (V << 3) + 4 | 0;
                        g[X >> 2] =
                        p + +g[X >> 2];
                        V = V + 1 | 0
                    } while ((V | 0) != (U | 0))
                }
                a[w >> 0] = 0
            }
            if ((Y & 32 | 0) == 0)
                _ = Y;
            else {
                cl(b);
                _ = c[m >> 2] | 0
            }
            if ((_ & 8192 | 0) != 0 ? (Z = +g[I >> 2] * +g[A >> 2] * R, U = c[t >> 2] | 0, (U | 0) > 0) : 0) {
                V = c[u >> 2] | 0;
                S = 0;
                do {
                    do if ((c[V + (S * 24 | 0) + 20 >> 2] & 8192 | 0) != 0) {
                        T = c[V + (S * 24 | 0) >> 2] | 0;
                        X = c[V + (S * 24 | 0) + 4 >> 2] | 0;
                        W = c[F >> 2] | 0;
                        if ((c[W + (T << 2) >> 2] | 0) == (c[W + (X << 2) >> 2] | 0))
                            break;
                        W = V + (S * 24 | 0) + 12 | 0;
                        N = +g[W >> 2];
                        p = Z * +g[V + (S * 24 | 0) + 8 >> 2];
                        aa = p * N;
                        N = p * +g[W + 4 >> 2];
                        W = c[z >> 2] | 0;
                        ba = W + (T << 3) | 0;
                        g[ba >> 2] = +g[ba >> 2] - aa;
                        ba = W + (T << 3) + 4 | 0;
                        g[ba >> 2] = +g[ba >> 2] - N;
                        ba = W + (X << 3) | 0;
                        g[ba >> 2] =
                        aa + +g[ba >> 2];
                        ba = W + (X << 3) + 4 | 0;
                        g[ba >> 2] = N + +g[ba >> 2]
                    }
                    while (0);
                    S = S + 1 | 0
                } while ((S | 0) != (U | 0))
            }
            if ((_ & 64 | 0) != 0 ? (Z = +g[H >> 2] * +g[A >> 2] * R, U = c[t >> 2] | 0, (U | 0) > 0) : 0) {
                S = c[u >> 2] | 0;
                V = 0;
                do {
                    do if ((c[S + (V * 24 | 0) + 20 >> 2] & 64 | 0) != 0) {
                        N = +g[S + (V * 24 | 0) + 8 >> 2];
                        if (!(N > .25))
                            break;
                        ba = c[S + (V * 24 | 0) >> 2] | 0;
                        X = c[S + (V * 24 | 0) + 4 >> 2] | 0;
                        W = S + (V * 24 | 0) + 12 | 0;
                        aa = +g[W >> 2];
                        p = Z * (N + -.25);
                        N = p * aa;
                        aa = p * +g[W + 4 >> 2];
                        W = c[z >> 2] | 0;
                        T = W + (ba << 3) | 0;
                        g[T >> 2] = +g[T >> 2] - N;
                        T = W + (ba << 3) + 4 | 0;
                        g[T >> 2] = +g[T >> 2] - aa;
                        T = W + (X << 3) | 0;
                        g[T >> 2] = N + +g[T >> 2];
                        T = W + (X << 3) + 4 | 0;
                        g[T >> 2] = aa + +g[T >>
                        2]
                    }
                    while (0);
                    V = V + 1 | 0
                } while ((V | 0) != (U | 0))
            }
            if ((_ & 128 | 0) != 0)
                dl(b, j);
            if ((c[v >> 2] & 1 | 0) != 0 ? (Z = +g[h >> 2] * +g[D >> 2], U = c[t >> 2] | 0, (U | 0) > 0) : 0) {
                V = c[u >> 2] | 0;
                S = c[F >> 2] | 0;
                T = 0;
                do {
                    X = c[V + (T * 24 | 0) >> 2] | 0;
                    W = c[V + (T * 24 | 0) + 4 >> 2] | 0;
                    if ((c[S + (X << 2) >> 2] | 0) != (c[S + (W << 2) >> 2] | 0)) {
                        ba = V + (T * 24 | 0) + 12 | 0;
                        R = +g[ba >> 2];
                        ca = c[G >> 2] | 0;
                        aa = +g[V + (T * 24 | 0) + 8 >> 2] * Z * (+g[ca + (X << 2) >> 2] + +g[ca + (W << 2) >> 2]);
                        N = R * aa;
                        R = +g[ba + 4 >> 2] * aa;
                        ba = c[z >> 2] | 0;
                        ca = ba + (X << 3) | 0;
                        g[ca >> 2] = +g[ca >> 2] - N;
                        ca = ba + (X << 3) + 4 | 0;
                        g[ca >> 2] = +g[ca >> 2] - R;
                        ca = ba + (W << 3) | 0;
                        g[ca >> 2] = N + +g[ca >> 2];
                        ca = ba + (W << 3) + 4 | 0;
                        g[ca >> 2] = R + +g[ca >> 2]
                    }
                    T = T + 1 | 0
                } while ((T | 0) != (U | 0))
            }
            if ((c[m >> 2] & 256 | 0) != 0)
                el(b);
            Z = +g[j >> 2] * +g[x >> 2];
            U = (c[y >> 2] | 0) + 102980 | 0;
            R = +g[U >> 2];
            N = Z * R;
            R = Z * +g[U + 4 >> 2];
            U = c[k >> 2] | 0;
            if ((U | 0) > 0) {
                T = c[z >> 2] | 0;
                V = 0;
                do {
                    S = T + (V << 3) | 0;
                    g[S >> 2] = N + +g[S >> 2];
                    S = T + (V << 3) + 4 | 0;
                    g[S >> 2] = R + +g[S >> 2];
                    V = V + 1 | 0
                } while ((V | 0) != (U | 0))
            }
            if ((c[m >> 2] & 2048 | 0) != 0)
                fl(b, j);
            gl(b, j);
            hl(b, j);
            U = c[m >> 2] | 0;
            if ((U & 2048 | 0) == 0)
                da = U;
            else {
                il(b);
                da = c[m >> 2] | 0
            }
            if ((da & 16 | 0) == 0)
                ea = da;
            else {
                jl(b, j);
                ea = c[m >> 2] | 0
            }
            if ((ea & 8 | 0) != 0)
                kl(b, j);
            R = +g[A >> 2] * +g[h >>
            2];
            N = R * R;
            U = c[k >> 2] | 0;
            if ((U | 0) > 0) {
                V = c[z >> 2] | 0;
                T = 0;
                do {
                    S = V + (T << 3) | 0;
                    R = +g[S >> 2];
                    ca = V + (T << 3) + 4 | 0;
                    Z = +g[ca >> 2];
                    aa = R * R + Z * Z;
                    if (aa > N) {
                        p = +Q(+(N / aa));
                        g[S >> 2] = R * p;
                        g[ca >> 2] = Z * p
                    }
                    T = T + 1 | 0
                } while ((T | 0) != (U | 0))
            }
            if ((c[v >> 2] & 2 | 0) != 0)
                ll(b);
            if ((c[m >> 2] & 1024 | 0) != 0)
                al(b, j);
            $k(b, j);
            if ((c[v >> 2] & 2 | 0) != 0)
                ml(b, j);
            U = c[k >> 2] | 0;
            do if ((c[m >> 2] & 4 | 0) == 0)
                ga = 95;
            else {
                if ((U | 0) <= 0)
                    break;
                T = c[B >> 2] | 0;
                V = 0;
                do {
                    if ((c[T + (V << 2) >> 2] & 4 | 0) != 0) {
                        ca = c[z >> 2] | 0;
                        g[ca + (V << 3) >> 2] = 0;
                        g[ca + (V << 3) + 4 >> 2] = 0
                    }
                    V = V + 1 | 0
                } while ((V | 0) != (U | 0));
                ga = 95
            }
            while (0);
            do if ((ga | 0) ==
            95) {
                ga = 0;
                if ((U | 0) <= 0)
                    break;
                V = c[C >> 2] | 0;
                N = +g[j >> 2];
                T = c[z >> 2] | 0;
                ca = 0;
                do {
                    p = N * +g[T + (ca << 3) + 4 >> 2];
                    S = V + (ca << 3) | 0;
                    g[S >> 2] = N * +g[T + (ca << 3) >> 2] + +g[S >> 2];
                    S = V + (ca << 3) + 4 | 0;
                    g[S >> 2] = p + +g[S >> 2];
                    ca = ca + 1 | 0
                } while ((ca | 0) < (U | 0))
            }
            while (0);
            U = (c[l >> 2] | 0) + 1 | 0;
            c[l >> 2] = U
        } while ((U | 0) < (c[n >> 2] | 0));
        i = e;
        return
    }
    function cl(a) {
        a = a | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0;
        d = i;
        e = +g[a + 352 >> 2];
        f = c[a + 236 >> 2] | 0;
        if ((f | 0) > 0) {
            h = a + 96 | 0;
            j = a + 104 | 0;
            k = a + 36 | 0;
            l =
            a + 28 | 0;
            m = c[a + 232 >> 2] | 0;
            n = c[a + 88 >> 2] | 0;
            o = 0;
            do {
                p = c[m + (o * 28 | 0) >> 2] | 0;
                if ((c[n + (p << 2) >> 2] & 32 | 0) != 0 ? (q = c[m + (o * 28 | 0) + 4 >> 2] | 0, r = (c[h >> 2] | 0) + (p << 3) | 0, s = +g[r >> 2], t = +g[r + 4 >> 2], r = q + 88 | 0, u = +g[r >> 2], v = q + 60 | 0, w = q + 64 | 0, x = q + 80 | 0, y = q + 84 | 0, z = c[j >> 2] | 0, A = z + (p << 3) | 0, B = +g[A >> 2], C = z + (p << 3) + 4 | 0, D = +g[C >> 2], E = +g[m + (o * 28 | 0) + 12 >> 2] * e * +g[m + (o * 28 | 0) + 24 >> 2], F = E * (+g[x >> 2] - u * (t - +g[w >> 2]) - B), G = E * (u * (s - +g[v >> 2]) + +g[y >> 2] - D), u = +g[k >> 2] * 1.3333333730697632, E = u * +g[l >> 2] * u, g[A >> 2] = B + F * E, g[C >> 2] = D + G * E, E = -F, F = -G, (c[q >> 2] | 0) == 2) : 0) {
                    C = q + 4 |
                    0;
                    A = b[C >> 1] | 0;
                    if ((A & 2) == 0 ? (p = A & 65535, (p & 2 | 0) == 0) : 0) {
                        z = (p | 2) & 65535;
                        b[C >> 1] = z;
                        g[q + 160 >> 2] = 0;
                        H = z
                    } else
                        H = A;
                    if (!((H & 2) == 0)) {
                        G = +g[q + 136 >> 2];
                        g[x >> 2] = G * E + +g[x >> 2];
                        g[y >> 2] = G * F + +g[y >> 2];
                        g[r >> 2] = +g[r >> 2] + +g[q + 144 >> 2] * ((s - +g[v >> 2]) * F - (t - +g[w >> 2]) * E)
                    }
                }
                o = o + 1 | 0
            } while ((o | 0) < (f | 0))
        }
        f = c[a + 220 >> 2] | 0;
        if ((f | 0) <= 0) {
            i = d;
            return
        }
        o = c[a + 216 >> 2] | 0;
        H = a + 104 | 0;
        a = 0;
        do {
            if ((c[o + (a * 24 | 0) + 20 >> 2] & 32 | 0) != 0) {
                l = c[o + (a * 24 | 0) >> 2] | 0;
                k = c[o + (a * 24 | 0) + 4 >> 2] | 0;
                m = c[H >> 2] | 0;
                j = m + (k << 3) | 0;
                h = m + (l << 3) | 0;
                E = +g[h >> 2];
                n = m + (k << 3) + 4 | 0;
                k = m + (l << 3) + 4 | 0;
                t =
                +g[k >> 2];
                F = e * +g[o + (a * 24 | 0) + 8 >> 2];
                s = F * (+g[j >> 2] - E);
                G = F * (+g[n >> 2] - t);
                g[h >> 2] = E + s;
                g[k >> 2] = t + G;
                g[j >> 2] = +g[j >> 2] - s;
                g[n >> 2] = +g[n >> 2] - G
            }
            a = a + 1 | 0
        } while ((a | 0) < (f | 0));
        i = d;
        return
    }
    function dl(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0;
        d = i;
        e = a + 44 | 0;
        if ((c[e >> 2] | 0) > 0) {
            f = a + 128 | 0;
            h = 0;
            do {
                j = 8784;
                k = c[j + 4 >> 2] | 0;
                l = (c[f >> 2] | 0) + (h << 3) | 0;
                c[l >> 2] = c[j >> 2];
                c[l + 4 >> 2] = k;
                h = h + 1 | 0
            } while ((h | 0) < (c[e >> 2] | 0))
        }
        e = a + 216 | 0;
        h = c[a + 220 >> 2] | 0;
        f = (h | 0) > 0;
        if (f) {
            k = a + 128 | 0;
            l = c[e >> 2] | 0;
            j = 0;
            do {
                if ((c[l +
                (j * 24 | 0) + 20 >> 2] & 128 | 0) != 0) {
                    m = c[l + (j * 24 | 0) >> 2] | 0;
                    n = c[l + (j * 24 | 0) + 4 >> 2] | 0;
                    o = +g[l + (j * 24 | 0) + 8 >> 2];
                    p = l + (j * 24 | 0) + 12 | 0;
                    q = +g[p >> 2];
                    r = o * (1 - o);
                    o = r * q;
                    q = r * +g[p + 4 >> 2];
                    p = c[k >> 2] | 0;
                    s = p + (m << 3) | 0;
                    g[s >> 2] = +g[s >> 2] - o;
                    s = p + (m << 3) + 4 | 0;
                    g[s >> 2] = +g[s >> 2] - q;
                    s = p + (n << 3) | 0;
                    g[s >> 2] = o + +g[s >> 2];
                    s = p + (n << 3) + 4 | 0;
                    g[s >> 2] = q + +g[s >> 2]
                }
                j = j + 1 | 0
            } while ((j | 0) < (h | 0))
        }
        q = +g[a + 32 >> 2] * +g[b + 4 >> 2];
        o = +g[a + 356 >> 2] * q;
        r = q * +g[a + 360 >> 2];
        t = q * .5;
        if (!f) {
            i = d;
            return
        }
        f = a + 116 | 0;
        b = a + 128 | 0;
        j = a + 104 | 0;
        a = c[e >> 2] | 0;
        e = 0;
        do {
            if ((c[a + (e * 24 | 0) + 20 >> 2] & 128 | 0) != 0) {
                k = c[a + (e *
                24 | 0) >> 2] | 0;
                l = c[a + (e * 24 | 0) + 4 >> 2] | 0;
                s = a + (e * 24 | 0) + 12 | 0;
                q = +g[s >> 2];
                u = +g[s + 4 >> 2];
                s = c[f >> 2] | 0;
                n = c[b >> 2] | 0;
                v = o * (+g[s + (k << 2) >> 2] + +g[s + (l << 2) >> 2] + -2) + r * (q * (+g[n + (l << 3) >> 2] - +g[n + (k << 3) >> 2]) + u * (+g[n + (l << 3) + 4 >> 2] - +g[n + (k << 3) + 4 >> 2]));
                w = +g[a + (e * 24 | 0) + 8 >> 2] * (v < t ? v : t);
                v = q * w;
                q = u * w;
                n = c[j >> 2] | 0;
                s = n + (k << 3) | 0;
                g[s >> 2] = +g[s >> 2] - v;
                s = n + (k << 3) + 4 | 0;
                g[s >> 2] = +g[s >> 2] - q;
                s = n + (l << 3) | 0;
                g[s >> 2] = +g[s >> 2] + v;
                s = n + (l << 3) + 4 | 0;
                g[s >> 2] = +g[s >> 2] + q
            }
            e = e + 1 | 0
        } while ((e | 0) < (h | 0));
        i = d;
        return
    }
    function el(b) {
        b = b | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0;
        e = i;
        f = ~~(+g[b + 388 >> 2] * 128);
        if ((f | 0) == 0) {
            i = e;
            return
        }
        h = b + 220 | 0;
        j = c[h >> 2] | 0;
        if ((j | 0) <= 0) {
            i = e;
            return
        }
        k = b + 216 | 0;
        l = b + 88 | 0;
        m = b + 136 | 0;
        b = d[8064] | 0;
        n = j;
        j = 0;
        while (1) {
            o = c[k >> 2] | 0;
            p = c[o + (j * 24 | 0) >> 2] | 0;
            q = c[o + (j * 24 | 0) + 4 >> 2] | 0;
            o = c[l >> 2] | 0;
            if ((c[o + (p << 2) >> 2] & 256 & c[o + (q << 2) >> 2] | 0) == 0)
                r = n;
            else {
                o = c[m >> 2] | 0;
                s = o + (q << 2) | 0;
                t = o + (p << 2) | 0;
                u = d[t >> 0] | 0;
                v = (aa((d[s >> 0] | 0) - u | 0, f) | 0) >> b;
                w = o + (q << 2) + 1 | 0;
                x = o + (p << 2) + 1 | 0;
                y = d[x >> 0] | 0;
                z = (aa((d[w >> 0] | 0) - y | 0, f) | 0) >> b;
                A = o + (q << 2) + 2 | 0;
                B = o + (p << 2) + 2 | 0;
                C = d[B >> 0] | 0;
                D = (aa((d[A >> 0] | 0) - C | 0, f) | 0) >> b;
                E = o + (q << 2) + 3 | 0;
                q = o + (p << 2) + 3 | 0;
                p = d[q >> 0] | 0;
                o = (aa((d[E >> 0] | 0) - p | 0, f) | 0) >> b;
                a[t >> 0] = v + u;
                a[x >> 0] = z + y;
                a[B >> 0] = D + C;
                a[q >> 0] = o + p;
                a[s >> 0] = (d[s >> 0] | 0) - v;
                a[w >> 0] = (d[w >> 0] | 0) - z;
                a[A >> 0] = (d[A >> 0] | 0) - D;
                a[E >> 0] = (d[E >> 0] | 0) - o;
                r = c[h >> 2] | 0
            }
            j = j + 1 | 0;
            if ((j | 0) >= (r | 0))
                break;
            else
                n = r
        }
        i = e;
        return
    }
    function fl(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0;
        d = i;
        e = a + 120 | 0;
        f = c[e >> 2] | 0;
        if ((f | 0) ==
        0) {
            h = a + 48 | 0;
            j = c[h >> 2] | 0;
            if ((j | 0) == 0) {
                vk(a, 256);
                k = c[h >> 2] | 0
            } else
                k = j;
            j = Em(c[a + 400 >> 2] | 0, k << 2) | 0;
            xn(j | 0, 0, c[h >> 2] << 2 | 0) | 0;
            l = j
        } else
            l = f;
        c[e >> 2] = l;
        m = +g[a + 32 >> 2] * +g[b + 4 >> 2];
        n = +g[a + 320 >> 2] * m * m;
        m = +g[a + 376 >> 2] * n;
        o = n * .25;
        n = +g[a + 380 >> 2];
        b = a + 384 | 0;
        if ((c[b >> 2] | 0) <= 0) {
            i = d;
            return
        }
        l = a + 124 | 0;
        f = a + 44 | 0;
        j = a + 220 | 0;
        h = a + 116 | 0;
        k = a + 88 | 0;
        p = a + 216 | 0;
        a = c[f >> 2] | 0;
        q = 1;
        while (1) {
            xn(c[l >> 2] | 0, 0, a << 2 | 0) | 0;
            r = c[j >> 2] | 0;
            if ((r | 0) > 0) {
                s = c[p >> 2] | 0;
                t = 0;
                do {
                    if ((c[s + (t * 24 | 0) + 20 >> 2] & 2048 | 0) != 0) {
                        u = c[s + (t * 24 | 0) >> 2] | 0;
                        v = c[s + (t * 24 | 0) + 4 >> 2] | 0;
                        w = +g[s +
                        (t * 24 | 0) + 8 >> 2];
                        x = c[e >> 2] | 0;
                        y = c[l >> 2] | 0;
                        z = y + (u << 2) | 0;
                        g[z >> 2] = w * +g[x + (v << 2) >> 2] + +g[z >> 2];
                        z = y + (v << 2) | 0;
                        g[z >> 2] = w * +g[x + (u << 2) >> 2] + +g[z >> 2]
                    }
                    t = t + 1 | 0
                } while ((t | 0) < (r | 0))
            }
            r = c[f >> 2] | 0;
            if ((r | 0) > 0) {
                t = c[h >> 2] | 0;
                s = c[k >> 2] | 0;
                z = 0;
                do {
                    w = +g[t + (z << 2) >> 2];
                    if ((c[s + (z << 2) >> 2] & 2048 | 0) == 0)
                        g[(c[e >> 2] | 0) + (z << 2) >> 2] = 0;
                    else {
                        A = (m * (w + -1) + +g[(c[l >> 2] | 0) + (z << 2) >> 2]) / (n + w);
                        w = A < o ? A : o;
                        g[(c[e >> 2] | 0) + (z << 2) >> 2] = w < 0 ? 0 : w
                    }
                    z = z + 1 | 0
                } while ((z | 0) < (r | 0))
            }
            if ((q | 0) >= (c[b >> 2] | 0))
                break;
            a = r;
            q = q + 1 | 0
        }
        i = d;
        return
    }
    function gl(a, d) {
        a = a | 0;
        d = d | 0;
        var e =
            0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0;
        e = i;
        f = a + 320 | 0;
        h = a + 32 | 0;
        j = +g[h >> 2] * +g[d + 4 >> 2];
        k = +g[f >> 2] * j * j;
        j = +g[a + 336 >> 2] * k;
        l = k * .25;
        m = c[a + 44 >> 2] | 0;
        n = (m | 0) > 0;
        if (n) {
            o = c[a + 116 >> 2] | 0;
            p = c[a + 124 >> 2] | 0;
            q = 0;
            do {
                k = +g[o + (q << 2) >> 2] + -1;
                r = j * (k < 0 ? 0 : k);
                g[p + (q << 2) >> 2] = r < l ? r : l;
                q = q + 1 | 0
            } while ((q | 0) < (m | 0))
        }
        q = c[a + 8 >> 2] | 0;
        if (!((q & 192 | 0) == 0 | n ^ 1)) {
            p = c[a + 88 >> 2] | 0;
            o = a + 124 | 0;
            s = 0;
            do {
                if ((c[p + (s << 2) >> 2] & 192 | 0) != 0)
                    g[(c[o >> 2] | 0) + (s << 2) >> 2] = 0;
                s = s + 1 | 0
            } while ((s | 0) < (m | 0))
        }
        if (!((q & 2048 | 0) == 0 | n ^ 1)) {
            n =
            c[a + 88 >> 2] | 0;
            q = a + 120 | 0;
            s = a + 124 | 0;
            o = 0;
            do {
                if ((c[n + (o << 2) >> 2] & 2048 | 0) != 0) {
                    p = (c[s >> 2] | 0) + (o << 2) | 0;
                    g[p >> 2] = +g[(c[q >> 2] | 0) + (o << 2) >> 2] + +g[p >> 2]
                }
                o = o + 1 | 0
            } while ((o | 0) < (m | 0))
        }
        l = +g[d >> 2] / (+g[f >> 2] * +g[h >> 2]);
        h = c[a + 236 >> 2] | 0;
        if ((h | 0) > 0) {
            f = a + 36 | 0;
            d = a + 28 | 0;
            m = c[a + 232 >> 2] | 0;
            o = c[a + 96 >> 2] | 0;
            q = c[a + 124 >> 2] | 0;
            s = c[a + 104 >> 2] | 0;
            n = 0;
            do {
                p = c[m + (n * 28 | 0) >> 2] | 0;
                t = c[m + (n * 28 | 0) + 4 >> 2] | 0;
                r = +g[m + (n * 28 | 0) + 12 >> 2];
                u = m + (n * 28 | 0) + 16 | 0;
                k = +g[u >> 2];
                v = +g[u + 4 >> 2];
                u = o + (p << 3) | 0;
                w = +g[u >> 2];
                x = +g[u + 4 >> 2];
                y = l * r * +g[m + (n * 28 | 0) + 24 >> 2] * (j * r + +g[q + (p << 2) >>
                2]);
                r = k * y;
                k = v * y;
                y = +g[f >> 2] * 1.3333333730697632;
                v = y * +g[d >> 2] * y;
                u = s + (p << 3) | 0;
                g[u >> 2] = +g[u >> 2] - r * v;
                u = s + (p << 3) + 4 | 0;
                g[u >> 2] = +g[u >> 2] - k * v;
                if ((c[t >> 2] | 0) == 2) {
                    u = t + 4 | 0;
                    p = b[u >> 1] | 0;
                    if ((p & 2) == 0 ? (z = p & 65535, (z & 2 | 0) == 0) : 0) {
                        A = (z | 2) & 65535;
                        b[u >> 1] = A;
                        g[t + 160 >> 2] = 0;
                        B = A
                    } else
                        B = p;
                    if (!((B & 2) == 0)) {
                        v = +g[t + 136 >> 2];
                        p = t + 80 | 0;
                        g[p >> 2] = r * v + +g[p >> 2];
                        p = t + 84 | 0;
                        g[p >> 2] = k * v + +g[p >> 2];
                        p = t + 88 | 0;
                        g[p >> 2] = +g[p >> 2] + +g[t + 144 >> 2] * (k * (w - +g[t + 60 >> 2]) - r * (x - +g[t + 64 >> 2]))
                    }
                }
                n = n + 1 | 0
            } while ((n | 0) < (h | 0))
        }
        h = c[a + 220 >> 2] | 0;
        if ((h | 0) <= 0) {
            i = e;
            return
        }
        n = c[a +
        216 >> 2] | 0;
        B = c[a + 124 >> 2] | 0;
        s = c[a + 104 >> 2] | 0;
        a = 0;
        do {
            d = c[n + (a * 24 | 0) >> 2] | 0;
            f = c[n + (a * 24 | 0) + 4 >> 2] | 0;
            q = n + (a * 24 | 0) + 12 | 0;
            j = +g[q >> 2];
            x = l * +g[n + (a * 24 | 0) + 8 >> 2] * (+g[B + (d << 2) >> 2] + +g[B + (f << 2) >> 2]);
            r = j * x;
            j = +g[q + 4 >> 2] * x;
            q = s + (d << 3) | 0;
            g[q >> 2] = +g[q >> 2] - r;
            q = s + (d << 3) + 4 | 0;
            g[q >> 2] = +g[q >> 2] - j;
            q = s + (f << 3) | 0;
            g[q >> 2] = r + +g[q >> 2];
            q = s + (f << 3) + 4 | 0;
            g[q >> 2] = j + +g[q >> 2];
            a = a + 1 | 0
        } while ((a | 0) < (h | 0));
        i = e;
        return
    }
    function hl(a, d) {
        a = a | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D =
            0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0;
        e = i;
        f = +g[a + 340 >> 2];
        h = 1 / (+g[a + 32 >> 2] * +g[d + 4 >> 2]);
        d = c[a + 236 >> 2] | 0;
        if ((d | 0) > 0) {
            j = a + 36 | 0;
            k = a + 28 | 0;
            l = c[a + 232 >> 2] | 0;
            m = c[a + 96 >> 2] | 0;
            n = c[a + 104 >> 2] | 0;
            o = 0;
            do {
                p = c[l + (o * 28 | 0) >> 2] | 0;
                q = c[l + (o * 28 | 0) + 4 >> 2] | 0;
                r = l + (o * 28 | 0) + 16 | 0;
                s = +g[r >> 2];
                t = +g[r + 4 >> 2];
                r = m + (p << 3) | 0;
                u = +g[r >> 2];
                v = +g[r + 4 >> 2];
                r = q + 88 | 0;
                w = +g[r >> 2];
                x = q + 60 | 0;
                y = q + 64 | 0;
                z = q + 80 | 0;
                A = q + 84 | 0;
                B = n + (p << 3) | 0;
                C = +g[B >> 2];
                D = n + (p << 3) + 4 | 0;
                E = +g[D >> 2];
                F = s * (+g[z >> 2] - w * (v - +g[y >> 2]) - C) + t * (w * (u - +g[x >> 2]) + +g[A >> 2] - E);
                if (F < 0 ? (w = f * +g[l + (o * 28 | 0) + 12 >> 2], G =
                h * F, H = G > -.5 ? -G : .5, G = F * +g[l + (o * 28 | 0) + 24 >> 2] * (w > H ? w : H), H = s * G, s = t * G, G = +g[j >> 2] * 1.3333333730697632, t = G * +g[k >> 2] * G, g[B >> 2] = C + t * H, g[D >> 2] = E + t * s, t = -H, H = -s, (c[q >> 2] | 0) == 2) : 0) {
                    D = q + 4 | 0;
                    B = b[D >> 1] | 0;
                    if ((B & 2) == 0 ? (p = B & 65535, (p & 2 | 0) == 0) : 0) {
                        I = (p | 2) & 65535;
                        b[D >> 1] = I;
                        g[q + 160 >> 2] = 0;
                        J = I
                    } else
                        J = B;
                    if (!((J & 2) == 0)) {
                        s = +g[q + 136 >> 2];
                        g[z >> 2] = s * t + +g[z >> 2];
                        g[A >> 2] = s * H + +g[A >> 2];
                        g[r >> 2] = +g[r >> 2] + +g[q + 144 >> 2] * ((u - +g[x >> 2]) * H - (v - +g[y >> 2]) * t)
                    }
                }
                o = o + 1 | 0
            } while ((o | 0) < (d | 0))
        }
        d = c[a + 220 >> 2] | 0;
        if ((d | 0) <= 0) {
            i = e;
            return
        }
        o = c[a + 216 >> 2] | 0;
        J = c[a +
        104 >> 2] | 0;
        a = 0;
        do {
            k = c[o + (a * 24 | 0) >> 2] | 0;
            j = c[o + (a * 24 | 0) + 4 >> 2] | 0;
            l = o + (a * 24 | 0) + 12 | 0;
            t = +g[l >> 2];
            v = +g[l + 4 >> 2];
            l = J + (j << 3) | 0;
            n = J + (k << 3) | 0;
            H = +g[n >> 2];
            m = J + (j << 3) + 4 | 0;
            j = J + (k << 3) + 4 | 0;
            u = +g[j >> 2];
            s = t * (+g[l >> 2] - H) + v * (+g[m >> 2] - u);
            if (s < 0) {
                E = f * +g[o + (a * 24 | 0) + 8 >> 2];
                C = h * s;
                G = C > -.5 ? -C : .5;
                C = s * (E > G ? E : G);
                G = t * C;
                t = v * C;
                g[n >> 2] = H + G;
                g[j >> 2] = u + t;
                g[l >> 2] = +g[l >> 2] - G;
                g[m >> 2] = +g[m >> 2] - t
            }
            a = a + 1 | 0
        } while ((a | 0) < (d | 0));
        i = e;
        return
    }
    function il(a) {
        a = a | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A =
            0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0;
        d = i;
        e = c[a + 236 >> 2] | 0;
        if ((e | 0) <= 0) {
            i = d;
            return
        }
        f = a + 96 | 0;
        h = a + 104 | 0;
        j = a + 36 | 0;
        k = a + 28 | 0;
        l = c[a + 232 >> 2] | 0;
        m = c[a + 88 >> 2] | 0;
        a = 0;
        do {
            n = c[l + (a * 28 | 0) >> 2] | 0;
            if (((c[m + (n << 2) >> 2] & 2048 | 0) != 0 ? (o = c[l + (a * 28 | 0) + 4 >> 2] | 0, p = l + (a * 28 | 0) + 16 | 0, q = +g[p >> 2], r = +g[p + 4 >> 2], p = (c[f >> 2] | 0) + (n << 3) | 0, s = +g[p >> 2], t = +g[p + 4 >> 2], p = o + 88 | 0, u = +g[p >> 2], v = o + 60 | 0, w = o + 64 | 0, x = o + 80 | 0, y = o + 84 | 0, z = c[h >> 2] | 0, A = z + (n << 3) | 0, B = +g[A >> 2], C = z + (n << 3) + 4 | 0, D = +g[C >> 2], E = q * (+g[x >> 2] - u * (t - +g[w >> 2]) - B) + r * (u * (s - +g[v >> 2]) + +g[y >> 2] - D), E < 0) : 0) ? (u = E * +g[l +
            (a * 28 | 0) + 24 >> 2] * .5, E = q * u, q = r * u, u = +g[j >> 2] * 1.3333333730697632, r = u * +g[k >> 2] * u, g[A >> 2] = B + E * r, g[C >> 2] = D + q * r, r = -E, E = -q, (c[o >> 2] | 0) == 2) : 0) {
                C = o + 4 | 0;
                A = b[C >> 1] | 0;
                if ((A & 2) == 0 ? (n = A & 65535, (n & 2 | 0) == 0) : 0) {
                    z = (n | 2) & 65535;
                    b[C >> 1] = z;
                    g[o + 160 >> 2] = 0;
                    F = z
                } else
                    F = A;
                if (!((F & 2) == 0)) {
                    q = +g[o + 136 >> 2];
                    g[x >> 2] = q * r + +g[x >> 2];
                    g[y >> 2] = q * E + +g[y >> 2];
                    g[p >> 2] = +g[p >> 2] + +g[o + 144 >> 2] * ((s - +g[v >> 2]) * E - (t - +g[w >> 2]) * r)
                }
            }
            a = a + 1 | 0
        } while ((a | 0) < (e | 0));
        i = d;
        return
    }
    function jl(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s =
            0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0;
        d = i;
        e = +g[b + 4 >> 2] * +g[a + 344 >> 2];
        f = a + 268 | 0;
        h = c[f >> 2] | 0;
        if ((h | 0) <= 0) {
            i = d;
            return
        }
        j = a + 264 | 0;
        l = a + 96 | 0;
        m = a + 104 | 0;
        a = h;
        h = 0;
        while (1) {
            n = c[j >> 2] | 0;
            if ((c[n + (h * 60 | 0) + 12 >> 2] & 16 | 0) == 0)
                o = a;
            else {
                p = c[n + (h * 60 | 0) >> 2] | 0;
                q = c[n + (h * 60 | 0) + 4 >> 2] | 0;
                r = c[n + (h * 60 | 0) + 8 >> 2] | 0;
                s = c[l >> 2] | 0;
                t = s + (p << 3) | 0;
                u = +g[t >> 2];
                v = +g[t + 4 >> 2];
                t = s + (q << 3) | 0;
                w = +g[t >> 2];
                x = +g[t + 4 >> 2];
                t = s + (r << 3) | 0;
                y = +g[t >> 2];
                s = c[m >> 2] | 0;
                z = +g[b >> 2];
                A = s + (p << 3) | 0;
                B = +g[A >> 2];
                C = s + (p << 3) +
                4 | 0;
                D = +g[C >> 2];
                E = u + z * B;
                u = v + z * D;
                p = s + (q << 3) | 0;
                F = s + (q << 3) + 4 | 0;
                v = w + z * +g[p >> 2];
                w = x + z * +g[F >> 2];
                q = s + (r << 3) | 0;
                G = s + (r << 3) + 4 | 0;
                x = y + z * +g[q >> 2];
                y = +g[t + 4 >> 2] + z * +g[G >> 2];
                z = (E + v + x) * .3333333432674408;
                H = (u + w + y) * .3333333432674408;
                I = E - z;
                E = u - H;
                u = v - z;
                v = w - H;
                w = x - z;
                z = y - H;
                H = +g[n + (h * 60 | 0) + 20 >> 2];
                y = +g[n + (h * 60 | 0) + 24 >> 2];
                t = n + (h * 60 | 0) + 28 | 0;
                x = +g[t >> 2];
                r = n + (h * 60 | 0) + 32 | 0;
                J = +g[r >> 2];
                s = n + (h * 60 | 0) + 36 | 0;
                K = +g[s >> 2];
                L = n + (h * 60 | 0) + 40 | 0;
                M = +g[L >> 2];
                N = H * E - y * I + (x * v - J * u) + (K * z - w * M);
                O = H * I + y * E + (x * u + J * v) + (w * K + z * M);
                M = N * N + O * O;
                K = (c[k >> 2] = 1597463007 -
                ((g[k >> 2] = M, c[k >> 2] | 0) >> 1), +g[k >> 2]);
                J = K * (1.5 - K * M * .5 * K);
                K = N * J;
                N = O * J;
                J = e * +g[n + (h * 60 | 0) + 16 >> 2];
                g[A >> 2] = B + J * (H * N - y * K - I);
                g[C >> 2] = D + J * (H * K + y * N - E);
                E = +g[t >> 2];
                y = +g[r >> 2];
                g[p >> 2] = +g[p >> 2] + J * (E * N - y * K - u);
                g[F >> 2] = +g[F >> 2] + J * (E * K + y * N - v);
                v = +g[s >> 2];
                y = +g[L >> 2];
                g[q >> 2] = +g[q >> 2] + J * (v * N - y * K - w);
                g[G >> 2] = +g[G >> 2] + J * (v * K + y * N - z);
                o = c[f >> 2] | 0
            }
            h = h + 1 | 0;
            if ((h | 0) >= (o | 0))
                break;
            else
                a = o
        }
        i = d;
        return
    }
    function kl(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0;
        d = i;
        e = +g[b + 4 >> 2] *
        +g[a + 348 >> 2];
        f = c[a + 252 >> 2] | 0;
        if ((f | 0) <= 0) {
            i = d;
            return
        }
        h = a + 96 | 0;
        j = a + 104 | 0;
        k = c[a + 248 >> 2] | 0;
        a = 0;
        do {
            if ((c[k + (a * 20 | 0) + 8 >> 2] & 8 | 0) != 0) {
                l = c[k + (a * 20 | 0) >> 2] | 0;
                m = c[k + (a * 20 | 0) + 4 >> 2] | 0;
                n = c[h >> 2] | 0;
                o = n + (l << 3) | 0;
                p = +g[o >> 2];
                q = +g[o + 4 >> 2];
                o = n + (m << 3) | 0;
                r = +g[o >> 2];
                n = c[j >> 2] | 0;
                s = +g[b >> 2];
                t = n + (l << 3) | 0;
                u = +g[t >> 2];
                v = n + (l << 3) + 4 | 0;
                w = +g[v >> 2];
                l = n + (m << 3) | 0;
                x = n + (m << 3) + 4 | 0;
                y = r + s * +g[l >> 2] - (p + s * u);
                p = +g[o + 4 >> 2] + s * +g[x >> 2] - (q + s * w);
                s = +Q(+(y * y + p * p));
                q = (+g[k + (a * 20 | 0) + 16 >> 2] - s) * e * +g[k + (a * 20 | 0) + 12 >> 2] / s;
                s = y * q;
                y = p * q;
                g[t >> 2] = u - s;
                g[v >> 2] =
                w - y;
                g[l >> 2] = s + +g[l >> 2];
                g[x >> 2] = y + +g[x >> 2]
            }
            a = a + 1 | 0
        } while ((a | 0) < (f | 0));
        i = d;
        return
    }
    function ll(a) {
        a = a | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0;
        d = i;
        e = +g[a + 340 >> 2];
        f = a + 236 | 0;
        if ((c[f >> 2] | 0) > 0) {
            h = a + 232 | 0;
            j = a + 144 | 0;
            k = a + 96 | 0;
            l = 0;
            do {
                m = c[h >> 2] | 0;
                n = c[m + (l * 28 | 0) >> 2] | 0;
                o = c[(c[j >> 2] | 0) + (n << 2) >> 2] | 0;
                if (((o | 0) != 0 ? (c[o + 12 >> 2] & 2 | 0) !=
                0 : 0) ? (p = c[m + (l * 28 | 0) + 4 >> 2] | 0, q = m + (l * 28 | 0) + 16 | 0, r = +g[q >> 2], s = +g[q + 4 >> 2], t = +g[m + (l * 28 | 0) + 12 >> 2], m = (c[k >> 2] | 0) + (n << 3) | 0, u = +g[m >> 2], v = +g[m + 4 >> 2], m = p + 88 | 0, w = +g[m >> 2], n = p + 60 | 0, q = p + 64 | 0, x = p + 80 | 0, y = +g[x >> 2] - w * (v - +g[q >> 2]), z = p + 84 | 0, A = w * (u - +g[n >> 2]) + +g[z >> 2], nk(o), B = o + 56 | 0, w = +g[B >> 2], C = o + 48 | 0, D = o + 52 | 0, E = r * (y - (+g[C >> 2] - w * (v - +g[o + 44 >> 2]))) + s * (A - (w * (u - +g[o + 40 >> 2]) + +g[D >> 2])), E < 0) : 0) {
                    nk(o);
                    w = +g[o + 32 >> 2];
                    nk(o);
                    A = +g[o + 36 >> 2];
                    nk(o);
                    F = o + 40 | 0;
                    y = +g[F >> 2];
                    if (w > 0)
                        G = 1 / w;
                    else
                        G = 0;
                    if (A > 0)
                        H = 1 / A;
                    else
                        H = 0;
                    A = s * (u - y) - r * (v - +g[F +
                    4 >> 2]);
                    y = +g[p + 132 >> 2];
                    w = +g[p + 44 >> 2];
                    I = +g[p + 48 >> 2];
                    J = y * (w * w + I * I);
                    I = +g[p + 140 >> 2] + J - J;
                    if (y > 0)
                        K = 1 / y;
                    else
                        K = 0;
                    if (I > 0)
                        L = 1 / I;
                    else
                        L = 0;
                    I = s * (u - +g[n >> 2]) - r * (v - +g[q >> 2]);
                    y = G + A * A * H + K + I * L * I;
                    if (y > 0)
                        M = E / y;
                    else
                        M = 0;
                    y = e * (t < 1 ? t : 1) * M;
                    t = G * y;
                    g[C >> 2] = +g[C >> 2] + r * t;
                    g[D >> 2] = +g[D >> 2] + s * t;
                    g[B >> 2] = H * A * y + +g[B >> 2];
                    A = -y;
                    y = r * A;
                    r = s * A;
                    if ((c[p >> 2] | 0) == 2) {
                        B = p + 4 | 0;
                        D = b[B >> 1] | 0;
                        if ((D & 2) == 0 ? (C = D & 65535, (C & 2 | 0) == 0) : 0) {
                            F = (C | 2) & 65535;
                            b[B >> 1] = F;
                            g[p + 160 >> 2] = 0;
                            N = F
                        } else
                            N = D;
                        if (!((N & 2) == 0)) {
                            A = +g[p + 136 >> 2];
                            g[x >> 2] = y * A + +g[x >> 2];
                            g[z >> 2] = r * A + +g[z >>
                            2];
                            g[m >> 2] = +g[m >> 2] + +g[p + 144 >> 2] * (r * (u - +g[n >> 2]) - y * (v - +g[q >> 2]))
                        }
                    }
                }
                l = l + 1 | 0
            } while ((l | 0) < (c[f >> 2] | 0))
        }
        f = a + 220 | 0;
        if ((c[f >> 2] | 0) <= 0) {
            i = d;
            return
        }
        l = a + 216 | 0;
        N = a + 144 | 0;
        k = a + 96 | 0;
        j = a + 104 | 0;
        h = a + 88 | 0;
        q = a + 32 | 0;
        n = a + 320 | 0;
        a = 0;
        do {
            p = c[l >> 2] | 0;
            m = c[p + (a * 24 | 0) >> 2] | 0;
            z = c[p + (a * 24 | 0) + 4 >> 2] | 0;
            x = p + (a * 24 | 0) + 12 | 0;
            H = +g[x >> 2];
            G = +g[x + 4 >> 2];
            M = +g[p + (a * 24 | 0) + 8 >> 2];
            p = c[N >> 2] | 0;
            x = c[p + (m << 2) >> 2] | 0;
            D = c[p + (z << 2) >> 2] | 0;
            p = (x | 0) == 0;
            if (p)
                O = 0;
            else
                O = (c[x + 12 >> 2] & 2 | 0) != 0;
            F = (D | 0) == 0;
            if (F)
                P = 0;
            else
                P = (c[D + 12 >> 2] & 2 | 0) != 0;
            do if ((x | 0) != (D | 0) & (O |
            P)) {
                B = c[k >> 2] | 0;
                L = (+g[B + (m << 3) >> 2] + +g[B + (z << 3) >> 2]) * .5;
                K = (+g[B + (m << 3) + 4 >> 2] + +g[B + (z << 3) + 4 >> 2]) * .5;
                if (!F ? (c[D + 12 >> 2] & 2 | 0) != 0 : 0) {
                    nk(D);
                    v = +g[D + 56 >> 2];
                    Q = +g[D + 48 >> 2] - v * (K - +g[D + 44 >> 2]);
                    R = v * (L - +g[D + 40 >> 2]) + +g[D + 52 >> 2]
                } else {
                    B = (c[j >> 2] | 0) + (z << 3) | 0;
                    v = +g[B >> 2];
                    Q = v;
                    R = +g[B + 4 >> 2]
                }
                if (!p ? (c[x + 12 >> 2] & 2 | 0) != 0 : 0) {
                    nk(x);
                    v = +g[x + 56 >> 2];
                    S = +g[x + 48 >> 2] - v * (K - +g[x + 44 >> 2]);
                    T = v * (L - +g[x + 40 >> 2]) + +g[x + 52 >> 2]
                } else {
                    B = (c[j >> 2] | 0) + (m << 3) | 0;
                    v = +g[B >> 2];
                    S = v;
                    T = +g[B + 4 >> 2]
                }
                v = G * (R - T) + H * (Q - S);
                if (v < 0) {
                    if (O) {
                        nk(x);
                        y = +g[x + 32 >> 2];
                        nk(x);
                        u = +g[x +
                        36 >> 2];
                        nk(x);
                        B = x + 40 | 0;
                        r = +g[B >> 2];
                        if (y > 0)
                            U = 1 / y;
                        else
                            U = 0;
                        if (u > 0)
                            V = 1 / u;
                        else
                            V = 0;
                        W = V;
                        X = U;
                        Y = G * (L - r) - H * (K - +g[B + 4 >> 2])
                    } else {
                        if ((c[(c[h >> 2] | 0) + (m << 2) >> 2] & 4 | 0) == 0 ? (r = +g[q >> 2] * .75, u = r * +g[n >> 2] * r, u > 0) : 0)
                            Z = 1 / u;
                        else
                            Z = 0;
                        W = 0;
                        X = Z;
                        Y = G * (L - L) - H * (K - K)
                    }
                    if (P) {
                        nk(D);
                        u = +g[D + 32 >> 2];
                        nk(D);
                        r = +g[D + 36 >> 2];
                        nk(D);
                        B = D + 40 | 0;
                        y = +g[B >> 2];
                        if (u > 0)
                            _ = 1 / u;
                        else
                            _ = 0;
                        if (r > 0)
                            $ = 1 / r;
                        else
                            $ = 0;
                        aa = _;
                        ba = $;
                        ca = G * (L - y) - H * (K - +g[B + 4 >> 2])
                    } else {
                        if ((c[(c[h >> 2] | 0) + (z << 2) >> 2] & 4 | 0) == 0 ? (y = +g[q >> 2] * .75, r = y * +g[n >> 2] * y, r > 0) : 0)
                            da = 1 / r;
                        else
                            da = 0;
                        aa = da;
                        ba = 0;
                        ca = G * (L -
                        L) - H * (K - K)
                    }
                    K = X + Y * W * Y + aa + ca * ba * ca;
                    if (K > 0)
                        ea = v / K;
                    else
                        ea = 0;
                    K = e * M * ea;
                    if (O) {
                        v = X * K;
                        B = x + 48 | 0;
                        g[B >> 2] = H * v + +g[B >> 2];
                        B = x + 52 | 0;
                        g[B >> 2] = G * v + +g[B >> 2];
                        B = x + 56 | 0;
                        g[B >> 2] = W * Y * K + +g[B >> 2]
                    } else {
                        B = c[j >> 2] | 0;
                        v = X * K;
                        C = B + (m << 3) | 0;
                        g[C >> 2] = H * v + +g[C >> 2];
                        C = B + (m << 3) + 4 | 0;
                        g[C >> 2] = G * v + +g[C >> 2]
                    }
                    v = -K;
                    if (P) {
                        K = aa * v;
                        C = D + 48 | 0;
                        g[C >> 2] = H * K + +g[C >> 2];
                        C = D + 52 | 0;
                        g[C >> 2] = G * K + +g[C >> 2];
                        C = D + 56 | 0;
                        g[C >> 2] = ba * ca * v + +g[C >> 2];
                        break
                    } else {
                        C = c[j >> 2] | 0;
                        K = aa * v;
                        B = C + (z << 3) | 0;
                        g[B >> 2] = H * K + +g[B >> 2];
                        B = C + (z << 3) + 4 | 0;
                        g[B >> 2] = G * K + +g[B >> 2];
                        break
                    }
                }
            }
            while (0);
            a = a + 1 | 0
        } while ((a | 0) < (c[f >> 2] | 0));
        i = d;
        return
    }
    function ml(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        d = i;
        e = c[a + 312 >> 2] | 0;
        if ((e | 0) == 0) {
            i = d;
            return
        }
        f = b + 4 | 0;
        h = a + 104 | 0;
        j = a + 96 | 0;
        a = e;
        do {
            if ((c[a + 12 >> 2] & 2 | 0) != 0 ? (nk(a), k = +g[b >> 2], l = k * +g[a + 56 >> 2], m = +T(+l), n = +S(+l), l = +g[a + 40 >> 2], o = +g[a + 44 >> 2], p = k * +g[a + 48 >> 2] + l - (n * l - m * o), q = k * +g[a + 52 >> 2] + o - (m * l + n * o), e = a + 60 | 0, o = +g[a + 72 >> 2], l = +g[a + 68 >> 2], k = +(m * o + n * l), r = +(n * o - m * l), l = +g[e >> 2], o = +g[a + 64 >> 2], s = +(p + (n * l - m * o)), t = +(q + (m * l + n * o)),
            u = e, g[u >> 2] = s, g[u + 4 >> 2] = t, u = a + 68 | 0, g[u >> 2] = k, g[u + 4 >> 2] = r, r = +g[f >> 2], k = p * r, p = q * r, q = m * r, m = (n + -1) * r, u = c[a + 4 >> 2] | 0, e = a + 8 | 0, (u | 0) < (c[e >> 2] | 0)) : 0) {
                v = u;
                do {
                    u = c[j >> 2] | 0;
                    r = +g[u + (v << 3) >> 2];
                    n = +g[u + (v << 3) + 4 >> 2];
                    t = +(k + (m * r - q * n));
                    s = +(p + (q * r + m * n));
                    u = (c[h >> 2] | 0) + (v << 3) | 0;
                    g[u >> 2] = t;
                    g[u + 4 >> 2] = s;
                    v = v + 1 | 0
                } while ((v | 0) < (c[e >> 2] | 0))
            }
            a = c[a + 24 >> 2] | 0
        } while ((a | 0) != 0);
        i = d;
        return
    }
    function nl(b, d, e, f) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0;
        h = i;
        j = +(e - d | 0);
        k = +g[f >> 2] / j;
        l = +g[f + 4 >> 2] / j;
        if (!(k != 0 | l != 0)) {
            i = h;
            return
        }
        f = b + 21 | 0;
        if ((a[f >>
        0] | 0) == 0) {
            xn(c[b + 112 >> 2] | 0, 0, c[b + 44 >> 2] << 3 | 0) | 0;
            a[f >> 0] = 1
        }
        if ((d | 0) >= (e | 0)) {
            i = h;
            return
        }
        f = c[b + 112 >> 2] | 0;
        b = d;
        do {
            d = f + (b << 3) | 0;
            g[d >> 2] = k + +g[d >> 2];
            d = f + (b << 3) + 4 | 0;
            g[d >> 2] = l + +g[d >> 2];
            b = b + 1 | 0
        } while ((b | 0) != (e | 0));
        i = h;
        return
    }
    function ol(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0;
        f = i;
        h = +g[a + 32 >> 2] * .75;
        j = +(d - b | 0) * h * +g[a + 320 >> 2] * h;
        h = +g[e >> 2] / j;
        k = +g[e + 4 >> 2] / j;
        if ((b | 0) >= (d | 0)) {
            i = f;
            return
        }
        e = c[a + 104 >> 2] | 0;
        a = b;
        do {
            b = e + (a << 3) | 0;
            g[b >> 2] = h + +g[b >> 2];
            b = e + (a << 3) + 4 | 0;
            g[b >> 2] = k + +g[b >> 2];
            a = a + 1 | 0
        } while ((a | 0) != (d |
        0));
        i = f;
        return
    }
    function pl(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0;
        e = i;
        f = c[a + 204 >> 2] | 0;
        if ((f | 0) == 0) {
            i = e;
            return
        }
        h = c[a + 200 >> 2] | 0;
        j = +g[a + 36 >> 2];
        k = +g[d >> 2];
        l = d + 4 | 0;
        m = (~~(j * +g[l >> 2] + 2048) >>> 0 << 20) + (~~(j * k * 256 + 524288) >>> 0) | 0;
        n = h;
        o = f << 3 >> 3;
        a:
        while (1) {
            p = o;
            while (1) {
                if ((p | 0) == 0)
                    break a;
                q = (p | 0) / 2 | 0;
                if ((c[n + (q << 3) + 4 >> 2] | 0) >>> 0 < m >>> 0)
                    break;
                else
                    p = q
            }
            n = n + (q + 1 << 3) | 0;
            o = p + -1 - q | 0
        }
        q = d + 8 | 0;
        o = d + 12 | 0;
        m = (~~(j * +g[o >> 2] + 2048) >>> 0 << 20) + (~~(j * +g[q >> 2] * 256 + 524288) >>> 0) | 0;
        r = n;
        s =
        h + (f << 3) - n >> 3;
        b:
        while (1) {
            f = s;
            while (1) {
                if ((f | 0) == 0)
                    break b;
                t = (f | 0) / 2 | 0;
                if ((c[r + (t << 3) + 4 >> 2] | 0) >>> 0 > m >>> 0)
                    f = t;
                else
                    break
            }
            r = r + (t + 1 << 3) | 0;
            s = f + -1 - t | 0
        }
        if (!(n >>> 0 < r >>> 0)) {
            i = e;
            return
        }
        t = a + 96 | 0;
        j = k;
        s = n;
        while (1) {
            n = c[s >> 2] | 0;
            m = c[t >> 2] | 0;
            k = +g[m + (n << 3) >> 2];
            if ((((j < k ? k < +g[q >> 2] : 0) ? (k = +g[m + (n << 3) + 4 >> 2], +g[l >> 2] < k) : 0) ? k < +g[o >> 2] : 0) ? !(hb[c[(c[b >> 2] | 0) + 12 >> 2] & 15](b, a, n) | 0) : 0) {
                u = 21;
                break
            }
            n = s + 8 | 0;
            if (!(n >>> 0 < r >>> 0)) {
                u = 21;
                break
            }
            j = +g[d >> 2];
            s = n
        }
        if ((u | 0) == 21) {
            i = e;
            return
        }
    }
    function ql(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f =
            0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0;
        f = i;
        i = i + 64 | 0;
        h = f;
        j = f + 32 | 0;
        k = f + 24 | 0;
        l = f + 16 | 0;
        if ((c[a + 204 >> 2] | 0) == 0) {
            i = f;
            return
        }
        m = +g[d >> 2];
        n = +g[e >> 2];
        o = d + 4 | 0;
        p = +g[o >> 2];
        q = +g[e + 4 >> 2];
        r = +(m < n ? m : n);
        s = +(p < q ? p : q);
        e = h;
        g[e >> 2] = r;
        g[e + 4 >> 2] = s;
        s = +(m > n ? m : n);
        r = +(p > q ? p : q);
        e = h + 8 | 0;
        g[e >> 2] = s;
        g[e + 4 >> 2] = r;
        r = n - m;
        m = q - p;
        p = r * r + m * m;
        Nk(j, a, h);
        h = j + 16 | 0;
        e = c[j + 20 >> 2] | 0;
        t = j + 4 | 0;
        u = a + 96 | 0;
        v = a + 40 | 0;
        w = k + 4 | 0;
        x = l + 4 | 0;
        y = c[h >> 2] | 0;
        q = 1;
        a:
        while (1) {
            if (!(y >>>
            0 < e >>> 0)) {
                z = 16;
                break
            }
            A = c[j >> 2] | 0;
            B = c[t >> 2] | 0;
            C = y;
            while (1) {
                D = c[C + 4 >> 2] & 1048575;
                E = C;
                C = C + 8 | 0;
                c[h >> 2] = C;
                if (D >>> 0 < A >>> 0 | D >>> 0 > B >>> 0)
                    if (C >>> 0 < e >>> 0) {
                        C = C;
                        continue
                    } else {
                        z = 16;
                        break a
                    }
                F = c[E >> 2] | 0;
                if (!((F | 0) > -1)) {
                    z = 16;
                    break a
                }
                E = c[u >> 2] | 0;
                G = +g[d >> 2];
                H = G - +g[E + (F << 3) >> 2];
                I = +g[o >> 2];
                J = I - +g[E + (F << 3) + 4 >> 2];
                n = r * H + m * J;
                s = n * n - p * (H * H + J * J - +g[v >> 2]);
                if (s >= 0 ? (K = +Q(+s), s = (-n - K) / p, !(s > q)) : 0) {
                    if (!(s < 0)) {
                        L = s;
                        break
                    }
                    s = (K - n) / p;
                    if (!(s < 0 | s > q)) {
                        L = s;
                        break
                    }
                }
                if (!(C >>> 0 < e >>> 0)) {
                    z = 16;
                    break a
                }
            }
            s = r * L;
            n = m * L;
            K = H + s;
            M = J + n;
            g[k >> 2] = K;
            g[w >> 2] = M;
            N = +Q(+(K * K + M * M));
            if (!(N < 1.1920928955078125E-7)) {
                O = 1 / N;
                g[k >> 2] = K * O;
                g[w >> 2] = M * O
            }
            B = c[(c[b >> 2] | 0) + 12 >> 2] | 0;
            g[l >> 2] = s + G;
            g[x >> 2] = n + I;
            n = +ab[B & 1](b, a, F, l, k, L);
            q = q < n ? q : n;
            if (q <= 0) {
                z = 16;
                break
            } else
                y = C
        }
        if ((z | 0) == 16) {
            i = f;
            return
        }
    }
    function rl(b, c, e) {
        b = b | 0;
        c = c | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0;
        f = i;
        g = ((e + -4 + (0 - c) | 0) >>> 2) + 1 | 0;
        h = b;
        j = c;
        k = c;
        while (1) {
            c = d[h >> 0] | d[h + 1 >> 0] << 8 | d[h + 2 >> 0] << 16 | d[h + 3 >> 0] << 24;
            l = k + 1 | 0;
            m = a[l >> 0] | 0;
            n = k + 2 | 0;
            o = a[n >> 0] | 0;
            p = k + 3 | 0;
            q = a[p >> 0] | 0;
            a[h >> 0] = a[k >>
            0] | 0;
            a[h + 1 >> 0] = m;
            a[h + 2 >> 0] = o;
            a[h + 3 >> 0] = q;
            a[k >> 0] = c;
            a[l >> 0] = c >>> 8;
            a[n >> 0] = c >>> 16;
            a[p >> 0] = c >>> 24;
            c = h + 4 | 0;
            p = k + 4 | 0;
            r = (c | 0) == (j | 0);
            if ((p | 0) == (e | 0))
                break;
            h = c;
            j = r ? p : j;
            k = p
        }
        k = b + (g << 2) | 0;
        if (r) {
            i = f;
            return k | 0
        } else {
            s = k;
            t = j;
            u = j
        }
        a:
        while (1) {
            j = s;
            r = u;
            while (1) {
                g = d[j >> 0] | d[j + 1 >> 0] << 8 | d[j + 2 >> 0] << 16 | d[j + 3 >> 0] << 24;
                b = r + 1 | 0;
                h = a[b >> 0] | 0;
                p = r + 2 | 0;
                c = a[p >> 0] | 0;
                n = r + 3 | 0;
                l = a[n >> 0] | 0;
                a[j >> 0] = a[r >> 0] | 0;
                a[j + 1 >> 0] = h;
                a[j + 2 >> 0] = c;
                a[j + 3 >> 0] = l;
                a[r >> 0] = g;
                a[b >> 0] = g >>> 8;
                a[p >> 0] = g >>> 16;
                a[n >> 0] = g >>> 24;
                j = j + 4 | 0;
                v = r + 4 | 0;
                w = (j | 0) == (t | 0);
                if ((v | 0) !=
                (e | 0))
                    break;
                if (w)
                    break a;
                else
                    r = t
            }
            s = j;
            t = w ? v : t;
            u = v
        }
        i = f;
        return k | 0
    }
    function sl(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0;
        e = i;
        f = a;
        a = b;
        a:
        while (1) {
            b = a;
            g = a + -4 | 0;
            h = f;
            b:
            while (1) {
                j = h;
                k = b - j | 0;
                l = k >> 2;
                switch (l | 0) {
                case 2:
                    m = 4;
                    break a;
                    break;
                case 3:
                    m = 6;
                    break a;
                    break;
                case 5:
                    m = 8;
                    break a;
                    break;
                case 4:
                    m = 7;
                    break a;
                    break;
                case 1:
                case 0:
                    m = 51;
                    break a;
                    break;
                default:
                }
                if ((k |
                0) < 124) {
                    m = 10;
                    break a
                }
                n = (l | 0) / 2 | 0;
                o = h + (n << 2) | 0;
                if ((k | 0) > 3996) {
                    k = (l | 0) / 4 | 0;
                    p = vl(h, h + (k << 2) | 0, o, h + (k + n << 2) | 0, g, d) | 0
                } else
                    p = tl(h, o, g, c[d >> 2] | 0) | 0;
                n = c[h >> 2] | 0;
                k = c[d >> 2] | 0;
                l = c[k + (n << 2) >> 2] | 0;
                q = c[k + (c[o >> 2] << 2) >> 2] | 0;
                r = +(l | 0) <= 0;
                s = +(q | 0) <= 0;
                do if (r ^ s ? r : (l | 0) > (q | 0)) {
                    t = g;
                    u = p
                } else {
                    v = g;
                    while (1) {
                        v = v + -4 | 0;
                        if ((h | 0) == (v | 0))
                            break;
                        w = c[v >> 2] | 0;
                        x = c[k + (w << 2) >> 2] | 0;
                        y = +(x | 0) <= 0;
                        if (y ^ s ? y : (x | 0) > (q | 0)) {
                            m = 34;
                            break
                        }
                    }
                    if ((m | 0) == 34) {
                        m = 0;
                        c[h >> 2] = w;
                        c[v >> 2] = n;
                        t = v;
                        u = p + 1 | 0;
                        break
                    }
                    x = h + 4 | 0;
                    y = c[g >> 2] | 0;
                    z = c[k + (y << 2) >> 2] | 0;
                    if (r ^ +(z | 0) <=
                    0 ? r : (l | 0) > (z | 0))
                        A = x;
                    else {
                        if ((x | 0) == (g | 0)) {
                            m = 51;
                            break a
                        } else
                            B = x;
                        while (1) {
                            C = c[B >> 2] | 0;
                            x = c[k + (C << 2) >> 2] | 0;
                            D = B + 4 | 0;
                            if (r ^ +(x | 0) <= 0 ? r : (l | 0) > (x | 0))
                                break;
                            if ((D | 0) == (g | 0)) {
                                m = 51;
                                break a
                            } else
                                B = D
                        }
                        c[B >> 2] = y;
                        c[g >> 2] = C;
                        A = D
                    }
                    if ((A | 0) == (g | 0)) {
                        m = 51;
                        break a
                    } else {
                        E = A;
                        F = g
                    }
                    while (1) {
                        v = c[k + (c[h >> 2] << 2) >> 2] | 0;
                        x = +(v | 0) <= 0;
                        z = E;
                        while (1) {
                            G = c[z >> 2] | 0;
                            H = c[k + (G << 2) >> 2] | 0;
                            I = z + 4 | 0;
                            if (x ^ +(H | 0) <= 0 ? x : (v | 0) > (H | 0)) {
                                J = F;
                                break
                            } else
                                z = I
                        }
                        do {
                            J = J + -4 | 0;
                            K = c[J >> 2] | 0;
                            H = c[k + (K << 2) >> 2] | 0
                        } while (x ^ +(H | 0) <= 0 ? x : (v | 0) > (H | 0));
                        if (!(z >>> 0 < J >>> 0)) {
                            h = z;
                            continue b
                        }
                        c[z >>
                        2] = K;
                        c[J >> 2] = G;
                        E = I;
                        F = J
                    }
                }
                while (0);
                l = h + 4 | 0;
                c:
                do if (l >>> 0 < t >>> 0) {
                    r = l;
                    n = t;
                    q = o;
                    s = u;
                    while (1) {
                        y = c[k + (c[q >> 2] << 2) >> 2] | 0;
                        v = +(y | 0) <= 0;
                        x = r;
                        while (1) {
                            L = c[x >> 2] | 0;
                            H = c[k + (L << 2) >> 2] | 0;
                            M = +(H | 0) <= 0;
                            N = x + 4 | 0;
                            if (M ^ v ? M : (H | 0) > (y | 0))
                                x = N;
                            else {
                                O = n;
                                break
                            }
                        }
                        do {
                            O = O + -4 | 0;
                            P = c[O >> 2] | 0;
                            z = c[k + (P << 2) >> 2] | 0;
                            H = +(z | 0) <= 0
                        } while (!(H ^ v ? H : (z | 0) > (y | 0)));
                        if (x >>> 0 > O >>> 0) {
                            Q = x;
                            R = q;
                            S = s;
                            break c
                        }
                        c[x >> 2] = P;
                        c[O >> 2] = L;
                        r = N;
                        n = O;
                        q = (q | 0) == (x | 0) ? O : q;
                        s = s + 1 | 0
                    }
                } else {
                    Q = l;
                    R = o;
                    S = u
                }
                while (0);
                if ((Q | 0) != (R | 0) ? (o = c[R >> 2] | 0, l = c[Q >> 2] | 0, s = c[k + (o << 2) >> 2] | 0, q = c[k + (l << 2) >>
                2] | 0, n = +(s | 0) <= 0, n ^ +(q | 0) <= 0 ? n : (s | 0) > (q | 0)) : 0) {
                    c[Q >> 2] = o;
                    c[R >> 2] = l;
                    T = S + 1 | 0
                } else
                    T = S;
                if ((T | 0) == 0) {
                    U = wl(h, Q, d) | 0;
                    l = Q + 4 | 0;
                    if (wl(l, a, d) | 0) {
                        m = 46;
                        break
                    }
                    if (U) {
                        h = l;
                        continue
                    }
                }
                l = Q;
                if ((l - j | 0) >= (b - l | 0)) {
                    m = 50;
                    break
                }
                sl(h, Q, d);
                h = Q + 4 | 0
            }
            if ((m | 0) == 46) {
                m = 0;
                if (U) {
                    m = 51;
                    break
                } else {
                    f = h;
                    a = Q;
                    continue
                }
            } else if ((m | 0) == 50) {
                m = 0;
                sl(Q + 4 | 0, a, d);
                f = h;
                a = Q;
                continue
            }
        }
        if ((m | 0) == 4) {
            Q = c[g >> 2] | 0;
            f = c[h >> 2] | 0;
            U = c[d >> 2] | 0;
            T = c[U + (Q << 2) >> 2] | 0;
            S = c[U + (f << 2) >> 2] | 0;
            U = +(T | 0) <= 0;
            if (!(U ^ +(S | 0) <= 0 ? U : (T | 0) > (S | 0))) {
                i = e;
                return
            }
            c[h >> 2] = Q;
            c[g >> 2] = f;
            i = e;
            return
        } else if ((m |
        0) == 6) {
            tl(h, h + 4 | 0, g, c[d >> 2] | 0) | 0;
            i = e;
            return
        } else if ((m | 0) == 7) {
            ul(h, h + 4 | 0, h + 8 | 0, g, d) | 0;
            i = e;
            return
        } else if ((m | 0) == 8) {
            vl(h, h + 4 | 0, h + 8 | 0, h + 12 | 0, g, d) | 0;
            i = e;
            return
        } else if ((m | 0) == 10) {
            g = h + 8 | 0;
            tl(h, h + 4 | 0, g, c[d >> 2] | 0) | 0;
            f = h + 12 | 0;
            if ((f | 0) == (a | 0)) {
                i = e;
                return
            }
            Q = c[d >> 2] | 0;
            d = f;
            f = g;
            while (1) {
                g = c[d >> 2] | 0;
                S = c[f >> 2] | 0;
                T = Q + (g << 2) | 0;
                U = c[T >> 2] | 0;
                R = c[Q + (S << 2) >> 2] | 0;
                u = +(U | 0) <= 0;
                if (u ^ +(R | 0) <= 0 ? u : (U | 0) > (R | 0)) {
                    R = S;
                    S = d;
                    U = f;
                    while (1) {
                        c[S >> 2] = R;
                        if ((U | 0) == (h | 0)) {
                            V = h;
                            break
                        }
                        u = U + -4 | 0;
                        R = c[u >> 2] | 0;
                        O = c[T >> 2] | 0;
                        N = c[Q + (R << 2) >> 2] | 0;
                        L = +(O |
                        0) <= 0;
                        if (!(L ^ +(N | 0) <= 0 ? L : (O | 0) > (N | 0))) {
                            V = U;
                            break
                        } else {
                            N = U;
                            U = u;
                            S = N
                        }
                    }
                    c[V >> 2] = g
                }
                S = d + 4 | 0;
                if ((S | 0) == (a | 0))
                    break;
                else {
                    U = d;
                    d = S;
                    f = U
                }
            }
            i = e;
            return
        } else if ((m | 0) == 51) {
            i = e;
            return
        }
    }
    function tl(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0;
        f = i;
        g = c[b >> 2] | 0;
        h = c[a >> 2] | 0;
        j = c[e + (g << 2) >> 2] | 0;
        k = e + (h << 2) | 0;
        l = c[k >> 2] | 0;
        m = +(j | 0) <= 0;
        n = c[d >> 2] | 0;
        o = c[e + (n << 2) >> 2] | 0;
        p = +(o | 0) <= 0;
        q = p ^ m ? p : (o | 0) > (j | 0);
        if (!(m ^ +(l | 0) <= 0 ? m : (j | 0) > (l | 0))) {
            if (!q) {
                r = 0;
                i = f;
                return r | 0
            }
            c[b >> 2] = n;
            c[d >> 2] = g;
            l = c[b >> 2] | 0;
            j = c[a >> 2] | 0;
            m = c[e + (l << 2) >> 2] | 0;
            o = c[e + (j << 2) >> 2] | 0;
            p = +(m | 0) <= 0;
            if (!(p ^ +(o | 0) <= 0 ? p : (m | 0) > (o | 0))) {
                r = 1;
                i = f;
                return r | 0
            }
            c[a >> 2] = l;
            c[b >> 2] = j;
            r = 2;
            i = f;
            return r | 0
        }
        if (q) {
            c[a >> 2] = n;
            c[d >> 2] = h;
            r = 1;
            i = f;
            return r | 0
        }
        c[a >> 2] = g;
        c[b >> 2] = h;
        g = c[d >> 2] | 0;
        a = c[e + (g << 2) >> 2] | 0;
        e = c[k >> 2] | 0;
        k = +(a | 0) <= 0;
        if (!(k ^ +(e | 0) <= 0 ? k : (a | 0) > (e | 0))) {
            r = 1;
            i = f;
            return r | 0
        }
        c[b >> 2] = g;
        c[d >> 2] = h;
        r = 2;
        i = f;
        return r | 0
    }
    function ul(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        g = i;
        h = tl(a, b, d, c[f >> 2] | 0) | 0;
        j = c[e >> 2] | 0;
        k = c[d >> 2] |
        0;
        l = c[f >> 2] | 0;
        f = c[l + (j << 2) >> 2] | 0;
        m = c[l + (k << 2) >> 2] | 0;
        n = +(f | 0) <= 0;
        if (!(n ^ +(m | 0) <= 0 ? n : (f | 0) > (m | 0))) {
            o = h;
            i = g;
            return o | 0
        }
        c[d >> 2] = j;
        c[e >> 2] = k;
        k = c[d >> 2] | 0;
        e = c[b >> 2] | 0;
        j = c[l + (k << 2) >> 2] | 0;
        m = c[l + (e << 2) >> 2] | 0;
        f = +(j | 0) <= 0;
        if (!(f ^ +(m | 0) <= 0 ? f : (j | 0) > (m | 0))) {
            o = h + 1 | 0;
            i = g;
            return o | 0
        }
        c[b >> 2] = k;
        c[d >> 2] = e;
        e = c[b >> 2] | 0;
        d = c[a >> 2] | 0;
        k = c[l + (e << 2) >> 2] | 0;
        m = c[l + (d << 2) >> 2] | 0;
        l = +(k | 0) <= 0;
        if (!(l ^ +(m | 0) <= 0 ? l : (k | 0) > (m | 0))) {
            o = h + 2 | 0;
            i = g;
            return o | 0
        }
        c[a >> 2] = e;
        c[b >> 2] = d;
        o = h + 3 | 0;
        i = g;
        return o | 0
    }
    function vl(a, b, d, e, f, g) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        h = i;
        j = ul(a, b, d, e, g) | 0;
        k = c[f >> 2] | 0;
        l = c[e >> 2] | 0;
        m = c[g >> 2] | 0;
        g = c[m + (k << 2) >> 2] | 0;
        n = c[m + (l << 2) >> 2] | 0;
        o = +(g | 0) <= 0;
        if (!(o ^ +(n | 0) <= 0 ? o : (g | 0) > (n | 0))) {
            p = j;
            i = h;
            return p | 0
        }
        c[e >> 2] = k;
        c[f >> 2] = l;
        l = c[e >> 2] | 0;
        f = c[d >> 2] | 0;
        k = c[m + (l << 2) >> 2] | 0;
        n = c[m + (f << 2) >> 2] | 0;
        g = +(k | 0) <= 0;
        if (!(g ^ +(n | 0) <= 0 ? g : (k | 0) > (n | 0))) {
            p = j + 1 | 0;
            i = h;
            return p | 0
        }
        c[d >> 2] = l;
        c[e >> 2] = f;
        f = c[d >> 2] | 0;
        e = c[b >> 2] | 0;
        l = c[m + (f << 2) >> 2] | 0;
        n = c[m + (e << 2) >> 2] | 0;
        k = +(l | 0) <= 0;
        if (!(k ^ +(n | 0) <= 0 ? k : (l | 0) > (n | 0))) {
            p = j + 2 | 0;
            i =
            h;
            return p | 0
        }
        c[b >> 2] = f;
        c[d >> 2] = e;
        e = c[b >> 2] | 0;
        d = c[a >> 2] | 0;
        f = c[m + (e << 2) >> 2] | 0;
        n = c[m + (d << 2) >> 2] | 0;
        m = +(f | 0) <= 0;
        if (!(m ^ +(n | 0) <= 0 ? m : (f | 0) > (n | 0))) {
            p = j + 3 | 0;
            i = h;
            return p | 0
        }
        c[a >> 2] = e;
        c[b >> 2] = d;
        p = j + 4 | 0;
        i = h;
        return p | 0
    }
    function wl(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        e = i;
        switch (b - a >> 2 | 0) {
        case 3:
            tl(a, a + 4 | 0, b + -4 | 0, c[d >> 2] | 0) | 0;
            f = 1;
            i = e;
            return f | 0;
        case 2:
            g = b + -4 | 0;
            h = c[g >> 2] | 0;
            j = c[a >> 2] | 0;
            k = c[d >> 2] | 0;
            l = c[k + (h << 2) >> 2] | 0;
            m = c[k + (j << 2) >> 2] | 0;
            k = +(l | 0) <= 0;
            if (!(k ^
            +(m | 0) <= 0 ? k : (l | 0) > (m | 0))) {
                f = 1;
                i = e;
                return f | 0
            }
            c[a >> 2] = h;
            c[g >> 2] = j;
            f = 1;
            i = e;
            return f | 0;
        case 4:
            ul(a, a + 4 | 0, a + 8 | 0, b + -4 | 0, d) | 0;
            f = 1;
            i = e;
            return f | 0;
        case 1:
        case 0:
            f = 1;
            i = e;
            return f | 0;
        case 5:
            vl(a, a + 4 | 0, a + 8 | 0, a + 12 | 0, b + -4 | 0, d) | 0;
            f = 1;
            i = e;
            return f | 0;
        default:
            j = a + 8 | 0;
            tl(a, a + 4 | 0, j, c[d >> 2] | 0) | 0;
            g = a + 12 | 0;
            if ((g | 0) == (b | 0)) {
                f = 1;
                i = e;
                return f | 0
            }
            h = c[d >> 2] | 0;
            d = 0;
            m = g;
            g = j;
            while (1) {
                j = c[m >> 2] | 0;
                l = c[g >> 2] | 0;
                k = h + (j << 2) | 0;
                n = c[k >> 2] | 0;
                o = c[h + (l << 2) >> 2] | 0;
                p = +(n | 0) <= 0;
                if (p ^ +(o | 0) <= 0 ? p : (n | 0) > (o | 0)) {
                    o = l;
                    l = m;
                    n = g;
                    while (1) {
                        c[l >> 2] = o;
                        if ((n |
                        0) == (a | 0)) {
                            q = a;
                            break
                        }
                        p = n + -4 | 0;
                        o = c[p >> 2] | 0;
                        r = c[k >> 2] | 0;
                        s = c[h + (o << 2) >> 2] | 0;
                        t = +(r | 0) <= 0;
                        if (!(t ^ +(s | 0) <= 0 ? t : (r | 0) > (s | 0))) {
                            q = n;
                            break
                        } else {
                            s = n;
                            n = p;
                            l = s
                        }
                    }
                    c[q >> 2] = j;
                    l = d + 1 | 0;
                    if ((l | 0) == 8)
                        break;
                    else
                        u = l
                } else
                    u = d;
                l = m + 4 | 0;
                if ((l | 0) == (b | 0)) {
                    f = 1;
                    v = 15;
                    break
                } else {
                    n = m;
                    d = u;
                    m = l;
                    g = n
                }
            }
            if ((v | 0) == 15) {
                i = e;
                return f | 0
            }
            f = (m + 4 | 0) == (b | 0);
            i = e;
            return f | 0
        }
        return 0
    }
    function xl(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0;
        d = i;
        i = i + 32 | 0;
        e = d + 16 | 0;
        f = d + 8 | 0;
        h = d;
        j = a + 4 | 0;
        k = a + 8 | 0;
        if ((c[b >> 2] | 0) == (c[j >> 2] | 0)) {
            l = c[k >> 2] |
            0;
            c[a + 8 >> 2] = l + 1;
            if ((l | 0) > 3) {
                l = c[a + 12 >> 2] | 0;
                c[l >> 2] = (c[l >> 2] | 0) + 1;
                m = 1;
                i = d;
                return m | 0
            }
        } else {
            c[k >> 2] = 0;
            c[j >> 2] = c[b >> 2];
            c[a + 8 >> 2] = 1
        }
        j = b + 16 | 0;
        n = +g[j >> 2];
        k = c[a >> 2] | 0;
        o = +g[k + 32 >> 2] * (1 - +g[b + 12 >> 2]);
        l = c[b >> 2] | 0;
        p = c[k + 96 >> 2] | 0;
        q = +g[j + 4 >> 2] * o + +g[p + (l << 3) + 4 >> 2];
        g[e >> 2] = +g[p + (l << 3) >> 2] + n * o;
        g[e + 4 >> 2] = q;
        l = b + 8 | 0;
        b = c[l >> 2] | 0;
        p = c[b + 12 >> 2] | 0;
        if (hb[c[(c[p >> 2] | 0) + 16 >> 2] & 15](p, (c[b + 8 >> 2] | 0) + 12 | 0, e) | 0) {
            m = 0;
            i = d;
            return m | 0
        }
        b = c[(c[l >> 2] | 0) + 12 >> 2] | 0;
        p = bb[c[(c[b >> 2] | 0) + 12 >> 2] & 7](b) | 0;
        a:
        do if ((p | 0) > 0) {
            b = 0;
            while (1) {
                j = c[l >> 2] |
                0;
                k = c[j + 12 >> 2] | 0;
                mb[c[(c[k >> 2] | 0) + 20 >> 2] & 7](k, (c[j + 8 >> 2] | 0) + 12 | 0, e, f, h, b);
                b = b + 1 | 0;
                if (+g[f >> 2] < .004999999888241291) {
                    m = 0;
                    break
                }
                if ((b | 0) >= (p | 0))
                    break a
            }
            i = d;
            return m | 0
        }
        while (0);
        p = c[a + 12 >> 2] | 0;
        c[p >> 2] = (c[p >> 2] | 0) + 1;
        m = 1;
        i = d;
        return m | 0
    }
    function yl(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0;
        e = i;
        i = i + 32 | 0;
        f = e;
        g = a;
        a = b;
        a:
        while (1) {
            b = a;
            h = a + -28 | 0;
            j = g;
            b:
            while (1) {
                k = j;
                l = b - k | 0;
                switch ((l | 0) / 28 | 0 | 0) {
                case 4:
                    m =
                    14;
                    break a;
                    break;
                case 3:
                    m = 6;
                    break a;
                    break;
                case 5:
                    m = 15;
                    break a;
                    break;
                case 1:
                case 0:
                    m = 67;
                    break a;
                    break;
                case 2:
                    m = 4;
                    break a;
                    break;
                default:
                }
                if ((l | 0) < 868) {
                    m = 21;
                    break a
                }
                n = (l | 0) / 56 | 0;
                o = j + (n * 28 | 0) | 0;
                do if ((l | 0) > 27972) {
                    p = (l | 0) / 112 | 0;
                    q = j + (p * 28 | 0) | 0;
                    r = j + ((p + n | 0) * 28 | 0) | 0;
                    p = zl(j, q, o, r, d) | 0;
                    if (nb[c[d >> 2] & 31](h, r) | 0) {
                        c[f + 0 >> 2] = c[r + 0 >> 2];
                        c[f + 4 >> 2] = c[r + 4 >> 2];
                        c[f + 8 >> 2] = c[r + 8 >> 2];
                        c[f + 12 >> 2] = c[r + 12 >> 2];
                        c[f + 16 >> 2] = c[r + 16 >> 2];
                        c[f + 20 >> 2] = c[r + 20 >> 2];
                        c[f + 24 >> 2] = c[r + 24 >> 2];
                        c[r + 0 >> 2] = c[h + 0 >> 2];
                        c[r + 4 >> 2] = c[h + 4 >> 2];
                        c[r + 8 >> 2] =
                        c[h + 8 >> 2];
                        c[r + 12 >> 2] = c[h + 12 >> 2];
                        c[r + 16 >> 2] = c[h + 16 >> 2];
                        c[r + 20 >> 2] = c[h + 20 >> 2];
                        c[r + 24 >> 2] = c[h + 24 >> 2];
                        c[h + 0 >> 2] = c[f + 0 >> 2];
                        c[h + 4 >> 2] = c[f + 4 >> 2];
                        c[h + 8 >> 2] = c[f + 8 >> 2];
                        c[h + 12 >> 2] = c[f + 12 >> 2];
                        c[h + 16 >> 2] = c[f + 16 >> 2];
                        c[h + 20 >> 2] = c[f + 20 >> 2];
                        c[h + 24 >> 2] = c[f + 24 >> 2];
                        s = p + 1 | 0;
                        if (nb[c[d >> 2] & 31](r, o) | 0) {
                            c[f + 0 >> 2] = c[o + 0 >> 2];
                            c[f + 4 >> 2] = c[o + 4 >> 2];
                            c[f + 8 >> 2] = c[o + 8 >> 2];
                            c[f + 12 >> 2] = c[o + 12 >> 2];
                            c[f + 16 >> 2] = c[o + 16 >> 2];
                            c[f + 20 >> 2] = c[o + 20 >> 2];
                            c[f + 24 >> 2] = c[o + 24 >> 2];
                            c[o + 0 >> 2] = c[r + 0 >> 2];
                            c[o + 4 >> 2] = c[r + 4 >> 2];
                            c[o + 8 >> 2] = c[r + 8 >> 2];
                            c[o + 12 >> 2] = c[r +
                            12 >> 2];
                            c[o + 16 >> 2] = c[r + 16 >> 2];
                            c[o + 20 >> 2] = c[r + 20 >> 2];
                            c[o + 24 >> 2] = c[r + 24 >> 2];
                            c[r + 0 >> 2] = c[f + 0 >> 2];
                            c[r + 4 >> 2] = c[f + 4 >> 2];
                            c[r + 8 >> 2] = c[f + 8 >> 2];
                            c[r + 12 >> 2] = c[f + 12 >> 2];
                            c[r + 16 >> 2] = c[f + 16 >> 2];
                            c[r + 20 >> 2] = c[f + 20 >> 2];
                            c[r + 24 >> 2] = c[f + 24 >> 2];
                            r = p + 2 | 0;
                            if (nb[c[d >> 2] & 31](o, q) | 0) {
                                c[f + 0 >> 2] = c[q + 0 >> 2];
                                c[f + 4 >> 2] = c[q + 4 >> 2];
                                c[f + 8 >> 2] = c[q + 8 >> 2];
                                c[f + 12 >> 2] = c[q + 12 >> 2];
                                c[f + 16 >> 2] = c[q + 16 >> 2];
                                c[f + 20 >> 2] = c[q + 20 >> 2];
                                c[f + 24 >> 2] = c[q + 24 >> 2];
                                c[q + 0 >> 2] = c[o + 0 >> 2];
                                c[q + 4 >> 2] = c[o + 4 >> 2];
                                c[q + 8 >> 2] = c[o + 8 >> 2];
                                c[q + 12 >> 2] = c[o + 12 >> 2];
                                c[q + 16 >> 2] = c[o + 16 >>
                                2];
                                c[q + 20 >> 2] = c[o + 20 >> 2];
                                c[q + 24 >> 2] = c[o + 24 >> 2];
                                c[o + 0 >> 2] = c[f + 0 >> 2];
                                c[o + 4 >> 2] = c[f + 4 >> 2];
                                c[o + 8 >> 2] = c[f + 8 >> 2];
                                c[o + 12 >> 2] = c[f + 12 >> 2];
                                c[o + 16 >> 2] = c[f + 16 >> 2];
                                c[o + 20 >> 2] = c[f + 20 >> 2];
                                c[o + 24 >> 2] = c[f + 24 >> 2];
                                if (nb[c[d >> 2] & 31](q, j) | 0) {
                                    c[f + 0 >> 2] = c[j + 0 >> 2];
                                    c[f + 4 >> 2] = c[j + 4 >> 2];
                                    c[f + 8 >> 2] = c[j + 8 >> 2];
                                    c[f + 12 >> 2] = c[j + 12 >> 2];
                                    c[f + 16 >> 2] = c[j + 16 >> 2];
                                    c[f + 20 >> 2] = c[j + 20 >> 2];
                                    c[f + 24 >> 2] = c[j + 24 >> 2];
                                    c[j + 0 >> 2] = c[q + 0 >> 2];
                                    c[j + 4 >> 2] = c[q + 4 >> 2];
                                    c[j + 8 >> 2] = c[q + 8 >> 2];
                                    c[j + 12 >> 2] = c[q + 12 >> 2];
                                    c[j + 16 >> 2] = c[q + 16 >> 2];
                                    c[j + 20 >> 2] = c[q + 20 >> 2];
                                    c[j + 24 >>
                                    2] = c[q + 24 >> 2];
                                    c[q + 0 >> 2] = c[f + 0 >> 2];
                                    c[q + 4 >> 2] = c[f + 4 >> 2];
                                    c[q + 8 >> 2] = c[f + 8 >> 2];
                                    c[q + 12 >> 2] = c[f + 12 >> 2];
                                    c[q + 16 >> 2] = c[f + 16 >> 2];
                                    c[q + 20 >> 2] = c[f + 20 >> 2];
                                    c[q + 24 >> 2] = c[f + 24 >> 2];
                                    t = p + 4 | 0
                                } else
                                    t = p + 3 | 0
                            } else
                                t = r
                        } else
                            t = s
                    } else
                        t = p
                } else {
                    p = nb[c[d >> 2] & 31](o, j) | 0;
                    s = nb[c[d >> 2] & 31](h, o) | 0;
                    if (!p) {
                        if (!s) {
                            t = 0;
                            break
                        }
                        c[f + 0 >> 2] = c[o + 0 >> 2];
                        c[f + 4 >> 2] = c[o + 4 >> 2];
                        c[f + 8 >> 2] = c[o + 8 >> 2];
                        c[f + 12 >> 2] = c[o + 12 >> 2];
                        c[f + 16 >> 2] = c[o + 16 >> 2];
                        c[f + 20 >> 2] = c[o + 20 >> 2];
                        c[f + 24 >> 2] = c[o + 24 >> 2];
                        c[o + 0 >> 2] = c[h + 0 >> 2];
                        c[o + 4 >> 2] = c[h + 4 >> 2];
                        c[o + 8 >> 2] = c[h + 8 >> 2];
                        c[o + 12 >>
                        2] = c[h + 12 >> 2];
                        c[o + 16 >> 2] = c[h + 16 >> 2];
                        c[o + 20 >> 2] = c[h + 20 >> 2];
                        c[o + 24 >> 2] = c[h + 24 >> 2];
                        c[h + 0 >> 2] = c[f + 0 >> 2];
                        c[h + 4 >> 2] = c[f + 4 >> 2];
                        c[h + 8 >> 2] = c[f + 8 >> 2];
                        c[h + 12 >> 2] = c[f + 12 >> 2];
                        c[h + 16 >> 2] = c[f + 16 >> 2];
                        c[h + 20 >> 2] = c[f + 20 >> 2];
                        c[h + 24 >> 2] = c[f + 24 >> 2];
                        if (!(nb[c[d >> 2] & 31](o, j) | 0)) {
                            t = 1;
                            break
                        }
                        c[f + 0 >> 2] = c[j + 0 >> 2];
                        c[f + 4 >> 2] = c[j + 4 >> 2];
                        c[f + 8 >> 2] = c[j + 8 >> 2];
                        c[f + 12 >> 2] = c[j + 12 >> 2];
                        c[f + 16 >> 2] = c[j + 16 >> 2];
                        c[f + 20 >> 2] = c[j + 20 >> 2];
                        c[f + 24 >> 2] = c[j + 24 >> 2];
                        c[j + 0 >> 2] = c[o + 0 >> 2];
                        c[j + 4 >> 2] = c[o + 4 >> 2];
                        c[j + 8 >> 2] = c[o + 8 >> 2];
                        c[j + 12 >> 2] = c[o + 12 >> 2];
                        c[j +
                        16 >> 2] = c[o + 16 >> 2];
                        c[j + 20 >> 2] = c[o + 20 >> 2];
                        c[j + 24 >> 2] = c[o + 24 >> 2];
                        c[o + 0 >> 2] = c[f + 0 >> 2];
                        c[o + 4 >> 2] = c[f + 4 >> 2];
                        c[o + 8 >> 2] = c[f + 8 >> 2];
                        c[o + 12 >> 2] = c[f + 12 >> 2];
                        c[o + 16 >> 2] = c[f + 16 >> 2];
                        c[o + 20 >> 2] = c[f + 20 >> 2];
                        c[o + 24 >> 2] = c[f + 24 >> 2];
                        t = 2;
                        break
                    }
                    if (s) {
                        c[f + 0 >> 2] = c[j + 0 >> 2];
                        c[f + 4 >> 2] = c[j + 4 >> 2];
                        c[f + 8 >> 2] = c[j + 8 >> 2];
                        c[f + 12 >> 2] = c[j + 12 >> 2];
                        c[f + 16 >> 2] = c[j + 16 >> 2];
                        c[f + 20 >> 2] = c[j + 20 >> 2];
                        c[f + 24 >> 2] = c[j + 24 >> 2];
                        c[j + 0 >> 2] = c[h + 0 >> 2];
                        c[j + 4 >> 2] = c[h + 4 >> 2];
                        c[j + 8 >> 2] = c[h + 8 >> 2];
                        c[j + 12 >> 2] = c[h + 12 >> 2];
                        c[j + 16 >> 2] = c[h + 16 >> 2];
                        c[j + 20 >> 2] = c[h + 20 >> 2];
                        c[j +
                        24 >> 2] = c[h + 24 >> 2];
                        c[h + 0 >> 2] = c[f + 0 >> 2];
                        c[h + 4 >> 2] = c[f + 4 >> 2];
                        c[h + 8 >> 2] = c[f + 8 >> 2];
                        c[h + 12 >> 2] = c[f + 12 >> 2];
                        c[h + 16 >> 2] = c[f + 16 >> 2];
                        c[h + 20 >> 2] = c[f + 20 >> 2];
                        c[h + 24 >> 2] = c[f + 24 >> 2];
                        t = 1;
                        break
                    }
                    c[f + 0 >> 2] = c[j + 0 >> 2];
                    c[f + 4 >> 2] = c[j + 4 >> 2];
                    c[f + 8 >> 2] = c[j + 8 >> 2];
                    c[f + 12 >> 2] = c[j + 12 >> 2];
                    c[f + 16 >> 2] = c[j + 16 >> 2];
                    c[f + 20 >> 2] = c[j + 20 >> 2];
                    c[f + 24 >> 2] = c[j + 24 >> 2];
                    c[j + 0 >> 2] = c[o + 0 >> 2];
                    c[j + 4 >> 2] = c[o + 4 >> 2];
                    c[j + 8 >> 2] = c[o + 8 >> 2];
                    c[j + 12 >> 2] = c[o + 12 >> 2];
                    c[j + 16 >> 2] = c[o + 16 >> 2];
                    c[j + 20 >> 2] = c[o + 20 >> 2];
                    c[j + 24 >> 2] = c[o + 24 >> 2];
                    c[o + 0 >> 2] = c[f + 0 >> 2];
                    c[o + 4 >> 2] =
                    c[f + 4 >> 2];
                    c[o + 8 >> 2] = c[f + 8 >> 2];
                    c[o + 12 >> 2] = c[f + 12 >> 2];
                    c[o + 16 >> 2] = c[f + 16 >> 2];
                    c[o + 20 >> 2] = c[f + 20 >> 2];
                    c[o + 24 >> 2] = c[f + 24 >> 2];
                    if (nb[c[d >> 2] & 31](h, o) | 0) {
                        c[f + 0 >> 2] = c[o + 0 >> 2];
                        c[f + 4 >> 2] = c[o + 4 >> 2];
                        c[f + 8 >> 2] = c[o + 8 >> 2];
                        c[f + 12 >> 2] = c[o + 12 >> 2];
                        c[f + 16 >> 2] = c[o + 16 >> 2];
                        c[f + 20 >> 2] = c[o + 20 >> 2];
                        c[f + 24 >> 2] = c[o + 24 >> 2];
                        c[o + 0 >> 2] = c[h + 0 >> 2];
                        c[o + 4 >> 2] = c[h + 4 >> 2];
                        c[o + 8 >> 2] = c[h + 8 >> 2];
                        c[o + 12 >> 2] = c[h + 12 >> 2];
                        c[o + 16 >> 2] = c[h + 16 >> 2];
                        c[o + 20 >> 2] = c[h + 20 >> 2];
                        c[o + 24 >> 2] = c[h + 24 >> 2];
                        c[h + 0 >> 2] = c[f + 0 >> 2];
                        c[h + 4 >> 2] = c[f + 4 >> 2];
                        c[h + 8 >> 2] = c[f + 8 >> 2];
                        c[h +
                        12 >> 2] = c[f + 12 >> 2];
                        c[h + 16 >> 2] = c[f + 16 >> 2];
                        c[h + 20 >> 2] = c[f + 20 >> 2];
                        c[h + 24 >> 2] = c[f + 24 >> 2];
                        t = 2
                    } else
                        t = 1
                }
                while (0);
                do if (nb[c[d >> 2] & 31](j, o) | 0) {
                    u = h;
                    v = t
                } else {
                    n = h;
                    while (1) {
                        n = n + -28 | 0;
                        if ((j | 0) == (n | 0))
                            break;
                        if (nb[c[d >> 2] & 31](n, o) | 0) {
                            m = 50;
                            break
                        }
                    }
                    if ((m | 0) == 50) {
                        m = 0;
                        c[f + 0 >> 2] = c[j + 0 >> 2];
                        c[f + 4 >> 2] = c[j + 4 >> 2];
                        c[f + 8 >> 2] = c[j + 8 >> 2];
                        c[f + 12 >> 2] = c[j + 12 >> 2];
                        c[f + 16 >> 2] = c[j + 16 >> 2];
                        c[f + 20 >> 2] = c[j + 20 >> 2];
                        c[f + 24 >> 2] = c[j + 24 >> 2];
                        c[j + 0 >> 2] = c[n + 0 >> 2];
                        c[j + 4 >> 2] = c[n + 4 >> 2];
                        c[j + 8 >> 2] = c[n + 8 >> 2];
                        c[j + 12 >> 2] = c[n + 12 >> 2];
                        c[j + 16 >> 2] = c[n + 16 >> 2];
                        c[j + 20 >> 2] = c[n + 20 >> 2];
                        c[j + 24 >> 2] = c[n + 24 >> 2];
                        c[n + 0 >> 2] = c[f + 0 >> 2];
                        c[n + 4 >> 2] = c[f + 4 >> 2];
                        c[n + 8 >> 2] = c[f + 8 >> 2];
                        c[n + 12 >> 2] = c[f + 12 >> 2];
                        c[n + 16 >> 2] = c[f + 16 >> 2];
                        c[n + 20 >> 2] = c[f + 20 >> 2];
                        c[n + 24 >> 2] = c[f + 24 >> 2];
                        u = n;
                        v = t + 1 | 0;
                        break
                    }
                    l = j + 28 | 0;
                    if (nb[c[d >> 2] & 31](j, h) | 0)
                        w = l;
                    else {
                        if ((l | 0) == (h | 0)) {
                            m = 67;
                            break a
                        } else
                            x = l;
                        while (1) {
                            y = x + 28 | 0;
                            if (nb[c[d >> 2] & 31](j, x) | 0)
                                break;
                            if ((y | 0) == (h | 0)) {
                                m = 67;
                                break a
                            } else
                                x = y
                        }
                        c[f + 0 >> 2] = c[x + 0 >> 2];
                        c[f + 4 >> 2] = c[x + 4 >> 2];
                        c[f + 8 >> 2] = c[x + 8 >> 2];
                        c[f + 12 >> 2] = c[x + 12 >> 2];
                        c[f + 16 >> 2] = c[x + 16 >> 2];
                        c[f + 20 >> 2] = c[x + 20 >>
                        2];
                        c[f + 24 >> 2] = c[x + 24 >> 2];
                        c[x + 0 >> 2] = c[h + 0 >> 2];
                        c[x + 4 >> 2] = c[h + 4 >> 2];
                        c[x + 8 >> 2] = c[h + 8 >> 2];
                        c[x + 12 >> 2] = c[h + 12 >> 2];
                        c[x + 16 >> 2] = c[h + 16 >> 2];
                        c[x + 20 >> 2] = c[h + 20 >> 2];
                        c[x + 24 >> 2] = c[h + 24 >> 2];
                        c[h + 0 >> 2] = c[f + 0 >> 2];
                        c[h + 4 >> 2] = c[f + 4 >> 2];
                        c[h + 8 >> 2] = c[f + 8 >> 2];
                        c[h + 12 >> 2] = c[f + 12 >> 2];
                        c[h + 16 >> 2] = c[f + 16 >> 2];
                        c[h + 20 >> 2] = c[f + 20 >> 2];
                        c[h + 24 >> 2] = c[f + 24 >> 2];
                        w = y
                    }
                    if ((w | 0) == (h | 0)) {
                        m = 67;
                        break a
                    } else {
                        z = w;
                        A = h
                    }
                    while (1) {
                        n = z;
                        while (1) {
                            B = n + 28 | 0;
                            if (nb[c[d >> 2] & 31](j, n) | 0) {
                                C = A;
                                break
                            } else
                                n = B
                        }
                        do C = C + -28 | 0;
                        while (nb[c[d >> 2] & 31](j, C) | 0);
                        if (!(n >>> 0 < C >>>
                        0)) {
                            j = n;
                            continue b
                        }
                        c[f + 0 >> 2] = c[n + 0 >> 2];
                        c[f + 4 >> 2] = c[n + 4 >> 2];
                        c[f + 8 >> 2] = c[n + 8 >> 2];
                        c[f + 12 >> 2] = c[n + 12 >> 2];
                        c[f + 16 >> 2] = c[n + 16 >> 2];
                        c[f + 20 >> 2] = c[n + 20 >> 2];
                        c[f + 24 >> 2] = c[n + 24 >> 2];
                        c[n + 0 >> 2] = c[C + 0 >> 2];
                        c[n + 4 >> 2] = c[C + 4 >> 2];
                        c[n + 8 >> 2] = c[C + 8 >> 2];
                        c[n + 12 >> 2] = c[C + 12 >> 2];
                        c[n + 16 >> 2] = c[C + 16 >> 2];
                        c[n + 20 >> 2] = c[C + 20 >> 2];
                        c[n + 24 >> 2] = c[C + 24 >> 2];
                        c[C + 0 >> 2] = c[f + 0 >> 2];
                        c[C + 4 >> 2] = c[f + 4 >> 2];
                        c[C + 8 >> 2] = c[f + 8 >> 2];
                        c[C + 12 >> 2] = c[f + 12 >> 2];
                        c[C + 16 >> 2] = c[f + 16 >> 2];
                        c[C + 20 >> 2] = c[f + 20 >> 2];
                        c[C + 24 >> 2] = c[f + 24 >> 2];
                        z = B;
                        A = C
                    }
                }
                while (0);
                l = j + 28 | 0;
                c:
                do if (l >>>
                0 < u >>> 0) {
                    s = l;
                    p = u;
                    r = o;
                    q = v;
                    while (1) {
                        D = s;
                        while (1) {
                            E = D + 28 | 0;
                            if (nb[c[d >> 2] & 31](D, r) | 0)
                                D = E;
                            else {
                                F = p;
                                break
                            }
                        }
                        do F = F + -28 | 0;
                        while (!(nb[c[d >> 2] & 31](F, r) | 0));
                        if (D >>> 0 > F >>> 0) {
                            G = D;
                            H = r;
                            I = q;
                            break c
                        }
                        c[f + 0 >> 2] = c[D + 0 >> 2];
                        c[f + 4 >> 2] = c[D + 4 >> 2];
                        c[f + 8 >> 2] = c[D + 8 >> 2];
                        c[f + 12 >> 2] = c[D + 12 >> 2];
                        c[f + 16 >> 2] = c[D + 16 >> 2];
                        c[f + 20 >> 2] = c[D + 20 >> 2];
                        c[f + 24 >> 2] = c[D + 24 >> 2];
                        c[D + 0 >> 2] = c[F + 0 >> 2];
                        c[D + 4 >> 2] = c[F + 4 >> 2];
                        c[D + 8 >> 2] = c[F + 8 >> 2];
                        c[D + 12 >> 2] = c[F + 12 >> 2];
                        c[D + 16 >> 2] = c[F + 16 >> 2];
                        c[D + 20 >> 2] = c[F + 20 >> 2];
                        c[D + 24 >> 2] = c[F + 24 >> 2];
                        c[F + 0 >> 2] = c[f + 0 >> 2];
                        c[F +
                        4 >> 2] = c[f + 4 >> 2];
                        c[F + 8 >> 2] = c[f + 8 >> 2];
                        c[F + 12 >> 2] = c[f + 12 >> 2];
                        c[F + 16 >> 2] = c[f + 16 >> 2];
                        c[F + 20 >> 2] = c[f + 20 >> 2];
                        c[F + 24 >> 2] = c[f + 24 >> 2];
                        s = E;
                        p = F;
                        r = (r | 0) == (D | 0) ? F : r;
                        q = q + 1 | 0
                    }
                } else {
                    G = l;
                    H = o;
                    I = v
                }
                while (0);
                if ((G | 0) != (H | 0) ? nb[c[d >> 2] & 31](H, G) | 0 : 0) {
                    c[f + 0 >> 2] = c[G + 0 >> 2];
                    c[f + 4 >> 2] = c[G + 4 >> 2];
                    c[f + 8 >> 2] = c[G + 8 >> 2];
                    c[f + 12 >> 2] = c[G + 12 >> 2];
                    c[f + 16 >> 2] = c[G + 16 >> 2];
                    c[f + 20 >> 2] = c[G + 20 >> 2];
                    c[f + 24 >> 2] = c[G + 24 >> 2];
                    c[G + 0 >> 2] = c[H + 0 >> 2];
                    c[G + 4 >> 2] = c[H + 4 >> 2];
                    c[G + 8 >> 2] = c[H + 8 >> 2];
                    c[G + 12 >> 2] = c[H + 12 >> 2];
                    c[G + 16 >> 2] = c[H + 16 >> 2];
                    c[G + 20 >> 2] = c[H + 20 >> 2];
                    c[G + 24 >> 2] = c[H + 24 >> 2];
                    c[H + 0 >> 2] = c[f + 0 >> 2];
                    c[H + 4 >> 2] = c[f + 4 >> 2];
                    c[H + 8 >> 2] = c[f + 8 >> 2];
                    c[H + 12 >> 2] = c[f + 12 >> 2];
                    c[H + 16 >> 2] = c[f + 16 >> 2];
                    c[H + 20 >> 2] = c[f + 20 >> 2];
                    c[H + 24 >> 2] = c[f + 24 >> 2];
                    J = I + 1 | 0
                } else
                    J = I;
                if ((J | 0) == 0) {
                    K = Bl(j, G, d) | 0;
                    o = G + 28 | 0;
                    if (Bl(o, a, d) | 0) {
                        m = 62;
                        break
                    }
                    if (K) {
                        j = o;
                        continue
                    }
                }
                o = G;
                if ((o - k | 0) >= (b - o | 0)) {
                    m = 66;
                    break
                }
                yl(j, G, d);
                j = G + 28 | 0
            }
            if ((m | 0) == 62) {
                m = 0;
                if (K) {
                    m = 67;
                    break
                } else {
                    g = j;
                    a = G;
                    continue
                }
            } else if ((m | 0) == 66) {
                m = 0;
                yl(G + 28 | 0, a, d);
                g = j;
                a = G;
                continue
            }
        }
        if ((m | 0) == 4) {
            if (!(nb[c[d >> 2] & 31](h, j) | 0)) {
                i = e;
                return
            }
            c[f + 0 >> 2] =
            c[j + 0 >> 2];
            c[f + 4 >> 2] = c[j + 4 >> 2];
            c[f + 8 >> 2] = c[j + 8 >> 2];
            c[f + 12 >> 2] = c[j + 12 >> 2];
            c[f + 16 >> 2] = c[j + 16 >> 2];
            c[f + 20 >> 2] = c[j + 20 >> 2];
            c[f + 24 >> 2] = c[j + 24 >> 2];
            c[j + 0 >> 2] = c[h + 0 >> 2];
            c[j + 4 >> 2] = c[h + 4 >> 2];
            c[j + 8 >> 2] = c[h + 8 >> 2];
            c[j + 12 >> 2] = c[h + 12 >> 2];
            c[j + 16 >> 2] = c[h + 16 >> 2];
            c[j + 20 >> 2] = c[h + 20 >> 2];
            c[j + 24 >> 2] = c[h + 24 >> 2];
            c[h + 0 >> 2] = c[f + 0 >> 2];
            c[h + 4 >> 2] = c[f + 4 >> 2];
            c[h + 8 >> 2] = c[f + 8 >> 2];
            c[h + 12 >> 2] = c[f + 12 >> 2];
            c[h + 16 >> 2] = c[f + 16 >> 2];
            c[h + 20 >> 2] = c[f + 20 >> 2];
            c[h + 24 >> 2] = c[f + 24 >> 2];
            i = e;
            return
        } else if ((m | 0) == 6) {
            G = j + 28 | 0;
            g = nb[c[d >> 2] & 31](G, j) | 0;
            K = nb[c[d >>
            2] & 31](h, G) | 0;
            if (!g) {
                if (!K) {
                    i = e;
                    return
                }
                c[f + 0 >> 2] = c[G + 0 >> 2];
                c[f + 4 >> 2] = c[G + 4 >> 2];
                c[f + 8 >> 2] = c[G + 8 >> 2];
                c[f + 12 >> 2] = c[G + 12 >> 2];
                c[f + 16 >> 2] = c[G + 16 >> 2];
                c[f + 20 >> 2] = c[G + 20 >> 2];
                c[f + 24 >> 2] = c[G + 24 >> 2];
                c[G + 0 >> 2] = c[h + 0 >> 2];
                c[G + 4 >> 2] = c[h + 4 >> 2];
                c[G + 8 >> 2] = c[h + 8 >> 2];
                c[G + 12 >> 2] = c[h + 12 >> 2];
                c[G + 16 >> 2] = c[h + 16 >> 2];
                c[G + 20 >> 2] = c[h + 20 >> 2];
                c[G + 24 >> 2] = c[h + 24 >> 2];
                c[h + 0 >> 2] = c[f + 0 >> 2];
                c[h + 4 >> 2] = c[f + 4 >> 2];
                c[h + 8 >> 2] = c[f + 8 >> 2];
                c[h + 12 >> 2] = c[f + 12 >> 2];
                c[h + 16 >> 2] = c[f + 16 >> 2];
                c[h + 20 >> 2] = c[f + 20 >> 2];
                c[h + 24 >> 2] = c[f + 24 >> 2];
                if (!(nb[c[d >> 2] & 31](G,
                j) | 0)) {
                    i = e;
                    return
                }
                c[f + 0 >> 2] = c[j + 0 >> 2];
                c[f + 4 >> 2] = c[j + 4 >> 2];
                c[f + 8 >> 2] = c[j + 8 >> 2];
                c[f + 12 >> 2] = c[j + 12 >> 2];
                c[f + 16 >> 2] = c[j + 16 >> 2];
                c[f + 20 >> 2] = c[j + 20 >> 2];
                c[f + 24 >> 2] = c[j + 24 >> 2];
                c[j + 0 >> 2] = c[G + 0 >> 2];
                c[j + 4 >> 2] = c[G + 4 >> 2];
                c[j + 8 >> 2] = c[G + 8 >> 2];
                c[j + 12 >> 2] = c[G + 12 >> 2];
                c[j + 16 >> 2] = c[G + 16 >> 2];
                c[j + 20 >> 2] = c[G + 20 >> 2];
                c[j + 24 >> 2] = c[G + 24 >> 2];
                c[G + 0 >> 2] = c[f + 0 >> 2];
                c[G + 4 >> 2] = c[f + 4 >> 2];
                c[G + 8 >> 2] = c[f + 8 >> 2];
                c[G + 12 >> 2] = c[f + 12 >> 2];
                c[G + 16 >> 2] = c[f + 16 >> 2];
                c[G + 20 >> 2] = c[f + 20 >> 2];
                c[G + 24 >> 2] = c[f + 24 >> 2];
                i = e;
                return
            }
            if (K) {
                c[f + 0 >> 2] = c[j + 0 >> 2];
                c[f +
                4 >> 2] = c[j + 4 >> 2];
                c[f + 8 >> 2] = c[j + 8 >> 2];
                c[f + 12 >> 2] = c[j + 12 >> 2];
                c[f + 16 >> 2] = c[j + 16 >> 2];
                c[f + 20 >> 2] = c[j + 20 >> 2];
                c[f + 24 >> 2] = c[j + 24 >> 2];
                c[j + 0 >> 2] = c[h + 0 >> 2];
                c[j + 4 >> 2] = c[h + 4 >> 2];
                c[j + 8 >> 2] = c[h + 8 >> 2];
                c[j + 12 >> 2] = c[h + 12 >> 2];
                c[j + 16 >> 2] = c[h + 16 >> 2];
                c[j + 20 >> 2] = c[h + 20 >> 2];
                c[j + 24 >> 2] = c[h + 24 >> 2];
                c[h + 0 >> 2] = c[f + 0 >> 2];
                c[h + 4 >> 2] = c[f + 4 >> 2];
                c[h + 8 >> 2] = c[f + 8 >> 2];
                c[h + 12 >> 2] = c[f + 12 >> 2];
                c[h + 16 >> 2] = c[f + 16 >> 2];
                c[h + 20 >> 2] = c[f + 20 >> 2];
                c[h + 24 >> 2] = c[f + 24 >> 2];
                i = e;
                return
            }
            c[f + 0 >> 2] = c[j + 0 >> 2];
            c[f + 4 >> 2] = c[j + 4 >> 2];
            c[f + 8 >> 2] = c[j + 8 >> 2];
            c[f + 12 >> 2] =
            c[j + 12 >> 2];
            c[f + 16 >> 2] = c[j + 16 >> 2];
            c[f + 20 >> 2] = c[j + 20 >> 2];
            c[f + 24 >> 2] = c[j + 24 >> 2];
            c[j + 0 >> 2] = c[G + 0 >> 2];
            c[j + 4 >> 2] = c[G + 4 >> 2];
            c[j + 8 >> 2] = c[G + 8 >> 2];
            c[j + 12 >> 2] = c[G + 12 >> 2];
            c[j + 16 >> 2] = c[G + 16 >> 2];
            c[j + 20 >> 2] = c[G + 20 >> 2];
            c[j + 24 >> 2] = c[G + 24 >> 2];
            c[G + 0 >> 2] = c[f + 0 >> 2];
            c[G + 4 >> 2] = c[f + 4 >> 2];
            c[G + 8 >> 2] = c[f + 8 >> 2];
            c[G + 12 >> 2] = c[f + 12 >> 2];
            c[G + 16 >> 2] = c[f + 16 >> 2];
            c[G + 20 >> 2] = c[f + 20 >> 2];
            c[G + 24 >> 2] = c[f + 24 >> 2];
            if (!(nb[c[d >> 2] & 31](h, G) | 0)) {
                i = e;
                return
            }
            c[f + 0 >> 2] = c[G + 0 >> 2];
            c[f + 4 >> 2] = c[G + 4 >> 2];
            c[f + 8 >> 2] = c[G + 8 >> 2];
            c[f + 12 >> 2] = c[G + 12 >> 2];
            c[f + 16 >>
            2] = c[G + 16 >> 2];
            c[f + 20 >> 2] = c[G + 20 >> 2];
            c[f + 24 >> 2] = c[G + 24 >> 2];
            c[G + 0 >> 2] = c[h + 0 >> 2];
            c[G + 4 >> 2] = c[h + 4 >> 2];
            c[G + 8 >> 2] = c[h + 8 >> 2];
            c[G + 12 >> 2] = c[h + 12 >> 2];
            c[G + 16 >> 2] = c[h + 16 >> 2];
            c[G + 20 >> 2] = c[h + 20 >> 2];
            c[G + 24 >> 2] = c[h + 24 >> 2];
            c[h + 0 >> 2] = c[f + 0 >> 2];
            c[h + 4 >> 2] = c[f + 4 >> 2];
            c[h + 8 >> 2] = c[f + 8 >> 2];
            c[h + 12 >> 2] = c[f + 12 >> 2];
            c[h + 16 >> 2] = c[f + 16 >> 2];
            c[h + 20 >> 2] = c[f + 20 >> 2];
            c[h + 24 >> 2] = c[f + 24 >> 2];
            i = e;
            return
        } else if ((m | 0) == 14) {
            zl(j, j + 28 | 0, j + 56 | 0, h, d) | 0;
            i = e;
            return
        } else if ((m | 0) == 15) {
            G = j + 28 | 0;
            K = j + 56 | 0;
            g = j + 84 | 0;
            zl(j, G, K, g, d) | 0;
            if (!(nb[c[d >> 2] & 31](h,
            g) | 0)) {
                i = e;
                return
            }
            c[f + 0 >> 2] = c[g + 0 >> 2];
            c[f + 4 >> 2] = c[g + 4 >> 2];
            c[f + 8 >> 2] = c[g + 8 >> 2];
            c[f + 12 >> 2] = c[g + 12 >> 2];
            c[f + 16 >> 2] = c[g + 16 >> 2];
            c[f + 20 >> 2] = c[g + 20 >> 2];
            c[f + 24 >> 2] = c[g + 24 >> 2];
            c[g + 0 >> 2] = c[h + 0 >> 2];
            c[g + 4 >> 2] = c[h + 4 >> 2];
            c[g + 8 >> 2] = c[h + 8 >> 2];
            c[g + 12 >> 2] = c[h + 12 >> 2];
            c[g + 16 >> 2] = c[h + 16 >> 2];
            c[g + 20 >> 2] = c[h + 20 >> 2];
            c[g + 24 >> 2] = c[h + 24 >> 2];
            c[h + 0 >> 2] = c[f + 0 >> 2];
            c[h + 4 >> 2] = c[f + 4 >> 2];
            c[h + 8 >> 2] = c[f + 8 >> 2];
            c[h + 12 >> 2] = c[f + 12 >> 2];
            c[h + 16 >> 2] = c[f + 16 >> 2];
            c[h + 20 >> 2] = c[f + 20 >> 2];
            c[h + 24 >> 2] = c[f + 24 >> 2];
            if (!(nb[c[d >> 2] & 31](g, K) | 0)) {
                i = e;
                return
            }
            c[f +
            0 >> 2] = c[K + 0 >> 2];
            c[f + 4 >> 2] = c[K + 4 >> 2];
            c[f + 8 >> 2] = c[K + 8 >> 2];
            c[f + 12 >> 2] = c[K + 12 >> 2];
            c[f + 16 >> 2] = c[K + 16 >> 2];
            c[f + 20 >> 2] = c[K + 20 >> 2];
            c[f + 24 >> 2] = c[K + 24 >> 2];
            c[K + 0 >> 2] = c[g + 0 >> 2];
            c[K + 4 >> 2] = c[g + 4 >> 2];
            c[K + 8 >> 2] = c[g + 8 >> 2];
            c[K + 12 >> 2] = c[g + 12 >> 2];
            c[K + 16 >> 2] = c[g + 16 >> 2];
            c[K + 20 >> 2] = c[g + 20 >> 2];
            c[K + 24 >> 2] = c[g + 24 >> 2];
            c[g + 0 >> 2] = c[f + 0 >> 2];
            c[g + 4 >> 2] = c[f + 4 >> 2];
            c[g + 8 >> 2] = c[f + 8 >> 2];
            c[g + 12 >> 2] = c[f + 12 >> 2];
            c[g + 16 >> 2] = c[f + 16 >> 2];
            c[g + 20 >> 2] = c[f + 20 >> 2];
            c[g + 24 >> 2] = c[f + 24 >> 2];
            if (!(nb[c[d >> 2] & 31](K, G) | 0)) {
                i = e;
                return
            }
            c[f + 0 >> 2] = c[G + 0 >> 2];
            c[f +
            4 >> 2] = c[G + 4 >> 2];
            c[f + 8 >> 2] = c[G + 8 >> 2];
            c[f + 12 >> 2] = c[G + 12 >> 2];
            c[f + 16 >> 2] = c[G + 16 >> 2];
            c[f + 20 >> 2] = c[G + 20 >> 2];
            c[f + 24 >> 2] = c[G + 24 >> 2];
            c[G + 0 >> 2] = c[K + 0 >> 2];
            c[G + 4 >> 2] = c[K + 4 >> 2];
            c[G + 8 >> 2] = c[K + 8 >> 2];
            c[G + 12 >> 2] = c[K + 12 >> 2];
            c[G + 16 >> 2] = c[K + 16 >> 2];
            c[G + 20 >> 2] = c[K + 20 >> 2];
            c[G + 24 >> 2] = c[K + 24 >> 2];
            c[K + 0 >> 2] = c[f + 0 >> 2];
            c[K + 4 >> 2] = c[f + 4 >> 2];
            c[K + 8 >> 2] = c[f + 8 >> 2];
            c[K + 12 >> 2] = c[f + 12 >> 2];
            c[K + 16 >> 2] = c[f + 16 >> 2];
            c[K + 20 >> 2] = c[f + 20 >> 2];
            c[K + 24 >> 2] = c[f + 24 >> 2];
            if (!(nb[c[d >> 2] & 31](G, j) | 0)) {
                i = e;
                return
            }
            c[f + 0 >> 2] = c[j + 0 >> 2];
            c[f + 4 >> 2] = c[j + 4 >> 2];
            c[f +
            8 >> 2] = c[j + 8 >> 2];
            c[f + 12 >> 2] = c[j + 12 >> 2];
            c[f + 16 >> 2] = c[j + 16 >> 2];
            c[f + 20 >> 2] = c[j + 20 >> 2];
            c[f + 24 >> 2] = c[j + 24 >> 2];
            c[j + 0 >> 2] = c[G + 0 >> 2];
            c[j + 4 >> 2] = c[G + 4 >> 2];
            c[j + 8 >> 2] = c[G + 8 >> 2];
            c[j + 12 >> 2] = c[G + 12 >> 2];
            c[j + 16 >> 2] = c[G + 16 >> 2];
            c[j + 20 >> 2] = c[G + 20 >> 2];
            c[j + 24 >> 2] = c[G + 24 >> 2];
            c[G + 0 >> 2] = c[f + 0 >> 2];
            c[G + 4 >> 2] = c[f + 4 >> 2];
            c[G + 8 >> 2] = c[f + 8 >> 2];
            c[G + 12 >> 2] = c[f + 12 >> 2];
            c[G + 16 >> 2] = c[f + 16 >> 2];
            c[G + 20 >> 2] = c[f + 20 >> 2];
            c[G + 24 >> 2] = c[f + 24 >> 2];
            i = e;
            return
        } else if ((m | 0) == 21) {
            Al(j, a, d);
            i = e;
            return
        } else if ((m | 0) == 67) {
            i = e;
            return
        }
    }
    function zl(a, b, d, e,
    f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        g = i;
        i = i + 32 | 0;
        h = g;
        j = nb[c[f >> 2] & 31](b, a) | 0;
        k = nb[c[f >> 2] & 31](d, b) | 0;
        do if (j) {
            if (k) {
                c[h + 0 >> 2] = c[a + 0 >> 2];
                c[h + 4 >> 2] = c[a + 4 >> 2];
                c[h + 8 >> 2] = c[a + 8 >> 2];
                c[h + 12 >> 2] = c[a + 12 >> 2];
                c[h + 16 >> 2] = c[a + 16 >> 2];
                c[h + 20 >> 2] = c[a + 20 >> 2];
                c[h + 24 >> 2] = c[a + 24 >> 2];
                c[a + 0 >> 2] = c[d + 0 >> 2];
                c[a + 4 >> 2] = c[d + 4 >> 2];
                c[a + 8 >> 2] = c[d + 8 >> 2];
                c[a + 12 >> 2] = c[d + 12 >> 2];
                c[a + 16 >> 2] = c[d + 16 >> 2];
                c[a + 20 >> 2] = c[d + 20 >> 2];
                c[a + 24 >> 2] = c[d + 24 >> 2];
                c[d + 0 >> 2] = c[h + 0 >> 2];
                c[d + 4 >> 2] = c[h + 4 >> 2];
                c[d + 8 >> 2] = c[h + 8 >> 2];
                c[d +
                12 >> 2] = c[h + 12 >> 2];
                c[d + 16 >> 2] = c[h + 16 >> 2];
                c[d + 20 >> 2] = c[h + 20 >> 2];
                c[d + 24 >> 2] = c[h + 24 >> 2];
                l = 1;
                break
            }
            c[h + 0 >> 2] = c[a + 0 >> 2];
            c[h + 4 >> 2] = c[a + 4 >> 2];
            c[h + 8 >> 2] = c[a + 8 >> 2];
            c[h + 12 >> 2] = c[a + 12 >> 2];
            c[h + 16 >> 2] = c[a + 16 >> 2];
            c[h + 20 >> 2] = c[a + 20 >> 2];
            c[h + 24 >> 2] = c[a + 24 >> 2];
            c[a + 0 >> 2] = c[b + 0 >> 2];
            c[a + 4 >> 2] = c[b + 4 >> 2];
            c[a + 8 >> 2] = c[b + 8 >> 2];
            c[a + 12 >> 2] = c[b + 12 >> 2];
            c[a + 16 >> 2] = c[b + 16 >> 2];
            c[a + 20 >> 2] = c[b + 20 >> 2];
            c[a + 24 >> 2] = c[b + 24 >> 2];
            c[b + 0 >> 2] = c[h + 0 >> 2];
            c[b + 4 >> 2] = c[h + 4 >> 2];
            c[b + 8 >> 2] = c[h + 8 >> 2];
            c[b + 12 >> 2] = c[h + 12 >> 2];
            c[b + 16 >> 2] = c[h + 16 >> 2];
            c[b + 20 >>
            2] = c[h + 20 >> 2];
            c[b + 24 >> 2] = c[h + 24 >> 2];
            if (nb[c[f >> 2] & 31](d, b) | 0) {
                c[h + 0 >> 2] = c[b + 0 >> 2];
                c[h + 4 >> 2] = c[b + 4 >> 2];
                c[h + 8 >> 2] = c[b + 8 >> 2];
                c[h + 12 >> 2] = c[b + 12 >> 2];
                c[h + 16 >> 2] = c[b + 16 >> 2];
                c[h + 20 >> 2] = c[b + 20 >> 2];
                c[h + 24 >> 2] = c[b + 24 >> 2];
                c[b + 0 >> 2] = c[d + 0 >> 2];
                c[b + 4 >> 2] = c[d + 4 >> 2];
                c[b + 8 >> 2] = c[d + 8 >> 2];
                c[b + 12 >> 2] = c[d + 12 >> 2];
                c[b + 16 >> 2] = c[d + 16 >> 2];
                c[b + 20 >> 2] = c[d + 20 >> 2];
                c[b + 24 >> 2] = c[d + 24 >> 2];
                c[d + 0 >> 2] = c[h + 0 >> 2];
                c[d + 4 >> 2] = c[h + 4 >> 2];
                c[d + 8 >> 2] = c[h + 8 >> 2];
                c[d + 12 >> 2] = c[h + 12 >> 2];
                c[d + 16 >> 2] = c[h + 16 >> 2];
                c[d + 20 >> 2] = c[h + 20 >> 2];
                c[d + 24 >> 2] = c[h + 24 >>
                2];
                l = 2
            } else
                l = 1
        } else if (k) {
            c[h + 0 >> 2] = c[b + 0 >> 2];
            c[h + 4 >> 2] = c[b + 4 >> 2];
            c[h + 8 >> 2] = c[b + 8 >> 2];
            c[h + 12 >> 2] = c[b + 12 >> 2];
            c[h + 16 >> 2] = c[b + 16 >> 2];
            c[h + 20 >> 2] = c[b + 20 >> 2];
            c[h + 24 >> 2] = c[b + 24 >> 2];
            c[b + 0 >> 2] = c[d + 0 >> 2];
            c[b + 4 >> 2] = c[d + 4 >> 2];
            c[b + 8 >> 2] = c[d + 8 >> 2];
            c[b + 12 >> 2] = c[d + 12 >> 2];
            c[b + 16 >> 2] = c[d + 16 >> 2];
            c[b + 20 >> 2] = c[d + 20 >> 2];
            c[b + 24 >> 2] = c[d + 24 >> 2];
            c[d + 0 >> 2] = c[h + 0 >> 2];
            c[d + 4 >> 2] = c[h + 4 >> 2];
            c[d + 8 >> 2] = c[h + 8 >> 2];
            c[d + 12 >> 2] = c[h + 12 >> 2];
            c[d + 16 >> 2] = c[h + 16 >> 2];
            c[d + 20 >> 2] = c[h + 20 >> 2];
            c[d + 24 >> 2] = c[h + 24 >> 2];
            if (nb[c[f >> 2] & 31](b, a) | 0) {
                c[h +
                0 >> 2] = c[a + 0 >> 2];
                c[h + 4 >> 2] = c[a + 4 >> 2];
                c[h + 8 >> 2] = c[a + 8 >> 2];
                c[h + 12 >> 2] = c[a + 12 >> 2];
                c[h + 16 >> 2] = c[a + 16 >> 2];
                c[h + 20 >> 2] = c[a + 20 >> 2];
                c[h + 24 >> 2] = c[a + 24 >> 2];
                c[a + 0 >> 2] = c[b + 0 >> 2];
                c[a + 4 >> 2] = c[b + 4 >> 2];
                c[a + 8 >> 2] = c[b + 8 >> 2];
                c[a + 12 >> 2] = c[b + 12 >> 2];
                c[a + 16 >> 2] = c[b + 16 >> 2];
                c[a + 20 >> 2] = c[b + 20 >> 2];
                c[a + 24 >> 2] = c[b + 24 >> 2];
                c[b + 0 >> 2] = c[h + 0 >> 2];
                c[b + 4 >> 2] = c[h + 4 >> 2];
                c[b + 8 >> 2] = c[h + 8 >> 2];
                c[b + 12 >> 2] = c[h + 12 >> 2];
                c[b + 16 >> 2] = c[h + 16 >> 2];
                c[b + 20 >> 2] = c[h + 20 >> 2];
                c[b + 24 >> 2] = c[h + 24 >> 2];
                l = 2
            } else
                l = 1
        } else
            l = 0;
        while (0);
        if (!(nb[c[f >> 2] & 31](e, d) | 0)) {
            m =
            l;
            i = g;
            return m | 0
        }
        c[h + 0 >> 2] = c[d + 0 >> 2];
        c[h + 4 >> 2] = c[d + 4 >> 2];
        c[h + 8 >> 2] = c[d + 8 >> 2];
        c[h + 12 >> 2] = c[d + 12 >> 2];
        c[h + 16 >> 2] = c[d + 16 >> 2];
        c[h + 20 >> 2] = c[d + 20 >> 2];
        c[h + 24 >> 2] = c[d + 24 >> 2];
        c[d + 0 >> 2] = c[e + 0 >> 2];
        c[d + 4 >> 2] = c[e + 4 >> 2];
        c[d + 8 >> 2] = c[e + 8 >> 2];
        c[d + 12 >> 2] = c[e + 12 >> 2];
        c[d + 16 >> 2] = c[e + 16 >> 2];
        c[d + 20 >> 2] = c[e + 20 >> 2];
        c[d + 24 >> 2] = c[e + 24 >> 2];
        c[e + 0 >> 2] = c[h + 0 >> 2];
        c[e + 4 >> 2] = c[h + 4 >> 2];
        c[e + 8 >> 2] = c[h + 8 >> 2];
        c[e + 12 >> 2] = c[h + 12 >> 2];
        c[e + 16 >> 2] = c[h + 16 >> 2];
        c[e + 20 >> 2] = c[h + 20 >> 2];
        c[e + 24 >> 2] = c[h + 24 >> 2];
        if (!(nb[c[f >> 2] & 31](d, b) | 0)) {
            m = l + 1 | 0;
            i = g;
            return m | 0
        }
        c[h + 0 >> 2] = c[b + 0 >> 2];
        c[h + 4 >> 2] = c[b + 4 >> 2];
        c[h + 8 >> 2] = c[b + 8 >> 2];
        c[h + 12 >> 2] = c[b + 12 >> 2];
        c[h + 16 >> 2] = c[b + 16 >> 2];
        c[h + 20 >> 2] = c[b + 20 >> 2];
        c[h + 24 >> 2] = c[b + 24 >> 2];
        c[b + 0 >> 2] = c[d + 0 >> 2];
        c[b + 4 >> 2] = c[d + 4 >> 2];
        c[b + 8 >> 2] = c[d + 8 >> 2];
        c[b + 12 >> 2] = c[d + 12 >> 2];
        c[b + 16 >> 2] = c[d + 16 >> 2];
        c[b + 20 >> 2] = c[d + 20 >> 2];
        c[b + 24 >> 2] = c[d + 24 >> 2];
        c[d + 0 >> 2] = c[h + 0 >> 2];
        c[d + 4 >> 2] = c[h + 4 >> 2];
        c[d + 8 >> 2] = c[h + 8 >> 2];
        c[d + 12 >> 2] = c[h + 12 >> 2];
        c[d + 16 >> 2] = c[h + 16 >> 2];
        c[d + 20 >> 2] = c[h + 20 >> 2];
        c[d + 24 >> 2] = c[h + 24 >> 2];
        if (!(nb[c[f >> 2] & 31](b, a) | 0)) {
            m = l + 2 | 0;
            i = g;
            return m |
            0
        }
        c[h + 0 >> 2] = c[a + 0 >> 2];
        c[h + 4 >> 2] = c[a + 4 >> 2];
        c[h + 8 >> 2] = c[a + 8 >> 2];
        c[h + 12 >> 2] = c[a + 12 >> 2];
        c[h + 16 >> 2] = c[a + 16 >> 2];
        c[h + 20 >> 2] = c[a + 20 >> 2];
        c[h + 24 >> 2] = c[a + 24 >> 2];
        c[a + 0 >> 2] = c[b + 0 >> 2];
        c[a + 4 >> 2] = c[b + 4 >> 2];
        c[a + 8 >> 2] = c[b + 8 >> 2];
        c[a + 12 >> 2] = c[b + 12 >> 2];
        c[a + 16 >> 2] = c[b + 16 >> 2];
        c[a + 20 >> 2] = c[b + 20 >> 2];
        c[a + 24 >> 2] = c[b + 24 >> 2];
        c[b + 0 >> 2] = c[h + 0 >> 2];
        c[b + 4 >> 2] = c[h + 4 >> 2];
        c[b + 8 >> 2] = c[h + 8 >> 2];
        c[b + 12 >> 2] = c[h + 12 >> 2];
        c[b + 16 >> 2] = c[h + 16 >> 2];
        c[b + 20 >> 2] = c[h + 20 >> 2];
        c[b + 24 >> 2] = c[h + 24 >> 2];
        m = l + 3 | 0;
        i = g;
        return m | 0
    }
    function Al(a, b, d) {
        a = a | 0;
        b = b | 0;
        d =
        d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        e = i;
        i = i + 64 | 0;
        f = e + 28 | 0;
        g = e;
        h = a + 56 | 0;
        j = a + 28 | 0;
        k = nb[c[d >> 2] & 31](j, a) | 0;
        l = nb[c[d >> 2] & 31](h, j) | 0;
        do if (k) {
            if (l) {
                c[f + 0 >> 2] = c[a + 0 >> 2];
                c[f + 4 >> 2] = c[a + 4 >> 2];
                c[f + 8 >> 2] = c[a + 8 >> 2];
                c[f + 12 >> 2] = c[a + 12 >> 2];
                c[f + 16 >> 2] = c[a + 16 >> 2];
                c[f + 20 >> 2] = c[a + 20 >> 2];
                c[f + 24 >> 2] = c[a + 24 >> 2];
                c[a + 0 >> 2] = c[h + 0 >> 2];
                c[a + 4 >> 2] = c[h + 4 >> 2];
                c[a + 8 >> 2] = c[h + 8 >> 2];
                c[a + 12 >> 2] = c[h + 12 >> 2];
                c[a + 16 >> 2] = c[h + 16 >> 2];
                c[a + 20 >> 2] = c[h + 20 >> 2];
                c[a + 24 >> 2] = c[h + 24 >> 2];
                c[h + 0 >> 2] = c[f + 0 >> 2];
                c[h + 4 >> 2] = c[f + 4 >> 2];
                c[h + 8 >> 2] = c[f + 8 >> 2];
                c[h + 12 >> 2] = c[f + 12 >> 2];
                c[h + 16 >> 2] = c[f + 16 >> 2];
                c[h + 20 >> 2] = c[f + 20 >> 2];
                c[h + 24 >> 2] = c[f + 24 >> 2];
                break
            }
            c[f + 0 >> 2] = c[a + 0 >> 2];
            c[f + 4 >> 2] = c[a + 4 >> 2];
            c[f + 8 >> 2] = c[a + 8 >> 2];
            c[f + 12 >> 2] = c[a + 12 >> 2];
            c[f + 16 >> 2] = c[a + 16 >> 2];
            c[f + 20 >> 2] = c[a + 20 >> 2];
            c[f + 24 >> 2] = c[a + 24 >> 2];
            c[a + 0 >> 2] = c[j + 0 >> 2];
            c[a + 4 >> 2] = c[j + 4 >> 2];
            c[a + 8 >> 2] = c[j + 8 >> 2];
            c[a + 12 >> 2] = c[j + 12 >> 2];
            c[a + 16 >> 2] = c[j + 16 >> 2];
            c[a + 20 >> 2] = c[j + 20 >> 2];
            c[a + 24 >> 2] = c[j + 24 >> 2];
            c[j + 0 >> 2] = c[f + 0 >> 2];
            c[j + 4 >> 2] = c[f + 4 >> 2];
            c[j + 8 >> 2] = c[f + 8 >> 2];
            c[j + 12 >> 2] = c[f + 12 >> 2];
            c[j + 16 >> 2] = c[f + 16 >> 2];
            c[j + 20 >>
            2] = c[f + 20 >> 2];
            c[j + 24 >> 2] = c[f + 24 >> 2];
            if (nb[c[d >> 2] & 31](h, j) | 0) {
                c[f + 0 >> 2] = c[j + 0 >> 2];
                c[f + 4 >> 2] = c[j + 4 >> 2];
                c[f + 8 >> 2] = c[j + 8 >> 2];
                c[f + 12 >> 2] = c[j + 12 >> 2];
                c[f + 16 >> 2] = c[j + 16 >> 2];
                c[f + 20 >> 2] = c[j + 20 >> 2];
                c[f + 24 >> 2] = c[j + 24 >> 2];
                c[j + 0 >> 2] = c[h + 0 >> 2];
                c[j + 4 >> 2] = c[h + 4 >> 2];
                c[j + 8 >> 2] = c[h + 8 >> 2];
                c[j + 12 >> 2] = c[h + 12 >> 2];
                c[j + 16 >> 2] = c[h + 16 >> 2];
                c[j + 20 >> 2] = c[h + 20 >> 2];
                c[j + 24 >> 2] = c[h + 24 >> 2];
                c[h + 0 >> 2] = c[f + 0 >> 2];
                c[h + 4 >> 2] = c[f + 4 >> 2];
                c[h + 8 >> 2] = c[f + 8 >> 2];
                c[h + 12 >> 2] = c[f + 12 >> 2];
                c[h + 16 >> 2] = c[f + 16 >> 2];
                c[h + 20 >> 2] = c[f + 20 >> 2];
                c[h + 24 >> 2] = c[f + 24 >>
                2]
            }
        } else if (l) {
            c[f + 0 >> 2] = c[j + 0 >> 2];
            c[f + 4 >> 2] = c[j + 4 >> 2];
            c[f + 8 >> 2] = c[j + 8 >> 2];
            c[f + 12 >> 2] = c[j + 12 >> 2];
            c[f + 16 >> 2] = c[j + 16 >> 2];
            c[f + 20 >> 2] = c[j + 20 >> 2];
            c[f + 24 >> 2] = c[j + 24 >> 2];
            c[j + 0 >> 2] = c[h + 0 >> 2];
            c[j + 4 >> 2] = c[h + 4 >> 2];
            c[j + 8 >> 2] = c[h + 8 >> 2];
            c[j + 12 >> 2] = c[h + 12 >> 2];
            c[j + 16 >> 2] = c[h + 16 >> 2];
            c[j + 20 >> 2] = c[h + 20 >> 2];
            c[j + 24 >> 2] = c[h + 24 >> 2];
            c[h + 0 >> 2] = c[f + 0 >> 2];
            c[h + 4 >> 2] = c[f + 4 >> 2];
            c[h + 8 >> 2] = c[f + 8 >> 2];
            c[h + 12 >> 2] = c[f + 12 >> 2];
            c[h + 16 >> 2] = c[f + 16 >> 2];
            c[h + 20 >> 2] = c[f + 20 >> 2];
            c[h + 24 >> 2] = c[f + 24 >> 2];
            if (nb[c[d >> 2] & 31](j, a) | 0) {
                c[f + 0 >> 2] = c[a + 0 >>
                2];
                c[f + 4 >> 2] = c[a + 4 >> 2];
                c[f + 8 >> 2] = c[a + 8 >> 2];
                c[f + 12 >> 2] = c[a + 12 >> 2];
                c[f + 16 >> 2] = c[a + 16 >> 2];
                c[f + 20 >> 2] = c[a + 20 >> 2];
                c[f + 24 >> 2] = c[a + 24 >> 2];
                c[a + 0 >> 2] = c[j + 0 >> 2];
                c[a + 4 >> 2] = c[j + 4 >> 2];
                c[a + 8 >> 2] = c[j + 8 >> 2];
                c[a + 12 >> 2] = c[j + 12 >> 2];
                c[a + 16 >> 2] = c[j + 16 >> 2];
                c[a + 20 >> 2] = c[j + 20 >> 2];
                c[a + 24 >> 2] = c[j + 24 >> 2];
                c[j + 0 >> 2] = c[f + 0 >> 2];
                c[j + 4 >> 2] = c[f + 4 >> 2];
                c[j + 8 >> 2] = c[f + 8 >> 2];
                c[j + 12 >> 2] = c[f + 12 >> 2];
                c[j + 16 >> 2] = c[f + 16 >> 2];
                c[j + 20 >> 2] = c[f + 20 >> 2];
                c[j + 24 >> 2] = c[f + 24 >> 2]
            }
        }
        while (0);
        f = a + 84 | 0;
        if ((f | 0) == (b | 0)) {
            i = e;
            return
        }
        j = f;
        f = h;
        while (1) {
            if (nb[c[d >>
            2] & 31](j, f) | 0) {
                c[g + 0 >> 2] = c[j + 0 >> 2];
                c[g + 4 >> 2] = c[j + 4 >> 2];
                c[g + 8 >> 2] = c[j + 8 >> 2];
                c[g + 12 >> 2] = c[j + 12 >> 2];
                c[g + 16 >> 2] = c[j + 16 >> 2];
                c[g + 20 >> 2] = c[j + 20 >> 2];
                c[g + 24 >> 2] = c[j + 24 >> 2];
                h = j;
                l = f;
                while (1) {
                    c[h + 0 >> 2] = c[l + 0 >> 2];
                    c[h + 4 >> 2] = c[l + 4 >> 2];
                    c[h + 8 >> 2] = c[l + 8 >> 2];
                    c[h + 12 >> 2] = c[l + 12 >> 2];
                    c[h + 16 >> 2] = c[l + 16 >> 2];
                    c[h + 20 >> 2] = c[l + 20 >> 2];
                    c[h + 24 >> 2] = c[l + 24 >> 2];
                    if ((l | 0) == (a | 0))
                        break;
                    k = l + -28 | 0;
                    if (nb[c[d >> 2] & 31](g, k) | 0) {
                        m = l;
                        l = k;
                        h = m
                    } else
                        break
                }
                c[l + 0 >> 2] = c[g + 0 >> 2];
                c[l + 4 >> 2] = c[g + 4 >> 2];
                c[l + 8 >> 2] = c[g + 8 >> 2];
                c[l + 12 >> 2] = c[g + 12 >> 2];
                c[l + 16 >> 2] =
                c[g + 16 >> 2];
                c[l + 20 >> 2] = c[g + 20 >> 2];
                c[l + 24 >> 2] = c[g + 24 >> 2]
            }
            h = j + 28 | 0;
            if ((h | 0) == (b | 0))
                break;
            else {
                m = j;
                j = h;
                f = m
            }
        }
        i = e;
        return
    }
    function Bl(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0;
        e = i;
        i = i + 64 | 0;
        f = e + 28 | 0;
        g = e;
        switch ((b - a | 0) / 28 | 0 | 0) {
        case 5:
            h = a + 28 | 0;
            j = a + 56 | 0;
            k = a + 84 | 0;
            l = b + -28 | 0;
            zl(a, h, j, k, d) | 0;
            if (!(nb[c[d >> 2] & 31](l, k) | 0)) {
                m = 1;
                i = e;
                return m | 0
            }
            c[f + 0 >> 2] = c[k + 0 >> 2];
            c[f + 4 >> 2] = c[k + 4 >> 2];
            c[f + 8 >> 2] = c[k + 8 >> 2];
            c[f + 12 >> 2] = c[k + 12 >> 2];
            c[f + 16 >> 2] = c[k + 16 >> 2];
            c[f + 20 >> 2] = c[k + 20 >> 2];
            c[f + 24 >> 2] = c[k +
            24 >> 2];
            c[k + 0 >> 2] = c[l + 0 >> 2];
            c[k + 4 >> 2] = c[l + 4 >> 2];
            c[k + 8 >> 2] = c[l + 8 >> 2];
            c[k + 12 >> 2] = c[l + 12 >> 2];
            c[k + 16 >> 2] = c[l + 16 >> 2];
            c[k + 20 >> 2] = c[l + 20 >> 2];
            c[k + 24 >> 2] = c[l + 24 >> 2];
            c[l + 0 >> 2] = c[f + 0 >> 2];
            c[l + 4 >> 2] = c[f + 4 >> 2];
            c[l + 8 >> 2] = c[f + 8 >> 2];
            c[l + 12 >> 2] = c[f + 12 >> 2];
            c[l + 16 >> 2] = c[f + 16 >> 2];
            c[l + 20 >> 2] = c[f + 20 >> 2];
            c[l + 24 >> 2] = c[f + 24 >> 2];
            if (!(nb[c[d >> 2] & 31](k, j) | 0)) {
                m = 1;
                i = e;
                return m | 0
            }
            c[f + 0 >> 2] = c[j + 0 >> 2];
            c[f + 4 >> 2] = c[j + 4 >> 2];
            c[f + 8 >> 2] = c[j + 8 >> 2];
            c[f + 12 >> 2] = c[j + 12 >> 2];
            c[f + 16 >> 2] = c[j + 16 >> 2];
            c[f + 20 >> 2] = c[j + 20 >> 2];
            c[f + 24 >> 2] = c[j + 24 >> 2];
            c[j +
            0 >> 2] = c[k + 0 >> 2];
            c[j + 4 >> 2] = c[k + 4 >> 2];
            c[j + 8 >> 2] = c[k + 8 >> 2];
            c[j + 12 >> 2] = c[k + 12 >> 2];
            c[j + 16 >> 2] = c[k + 16 >> 2];
            c[j + 20 >> 2] = c[k + 20 >> 2];
            c[j + 24 >> 2] = c[k + 24 >> 2];
            c[k + 0 >> 2] = c[f + 0 >> 2];
            c[k + 4 >> 2] = c[f + 4 >> 2];
            c[k + 8 >> 2] = c[f + 8 >> 2];
            c[k + 12 >> 2] = c[f + 12 >> 2];
            c[k + 16 >> 2] = c[f + 16 >> 2];
            c[k + 20 >> 2] = c[f + 20 >> 2];
            c[k + 24 >> 2] = c[f + 24 >> 2];
            if (!(nb[c[d >> 2] & 31](j, h) | 0)) {
                m = 1;
                i = e;
                return m | 0
            }
            c[f + 0 >> 2] = c[h + 0 >> 2];
            c[f + 4 >> 2] = c[h + 4 >> 2];
            c[f + 8 >> 2] = c[h + 8 >> 2];
            c[f + 12 >> 2] = c[h + 12 >> 2];
            c[f + 16 >> 2] = c[h + 16 >> 2];
            c[f + 20 >> 2] = c[h + 20 >> 2];
            c[f + 24 >> 2] = c[h + 24 >> 2];
            c[h + 0 >> 2] = c[j +
            0 >> 2];
            c[h + 4 >> 2] = c[j + 4 >> 2];
            c[h + 8 >> 2] = c[j + 8 >> 2];
            c[h + 12 >> 2] = c[j + 12 >> 2];
            c[h + 16 >> 2] = c[j + 16 >> 2];
            c[h + 20 >> 2] = c[j + 20 >> 2];
            c[h + 24 >> 2] = c[j + 24 >> 2];
            c[j + 0 >> 2] = c[f + 0 >> 2];
            c[j + 4 >> 2] = c[f + 4 >> 2];
            c[j + 8 >> 2] = c[f + 8 >> 2];
            c[j + 12 >> 2] = c[f + 12 >> 2];
            c[j + 16 >> 2] = c[f + 16 >> 2];
            c[j + 20 >> 2] = c[f + 20 >> 2];
            c[j + 24 >> 2] = c[f + 24 >> 2];
            if (!(nb[c[d >> 2] & 31](h, a) | 0)) {
                m = 1;
                i = e;
                return m | 0
            }
            c[f + 0 >> 2] = c[a + 0 >> 2];
            c[f + 4 >> 2] = c[a + 4 >> 2];
            c[f + 8 >> 2] = c[a + 8 >> 2];
            c[f + 12 >> 2] = c[a + 12 >> 2];
            c[f + 16 >> 2] = c[a + 16 >> 2];
            c[f + 20 >> 2] = c[a + 20 >> 2];
            c[f + 24 >> 2] = c[a + 24 >> 2];
            c[a + 0 >> 2] = c[h + 0 >> 2];
            c[a +
            4 >> 2] = c[h + 4 >> 2];
            c[a + 8 >> 2] = c[h + 8 >> 2];
            c[a + 12 >> 2] = c[h + 12 >> 2];
            c[a + 16 >> 2] = c[h + 16 >> 2];
            c[a + 20 >> 2] = c[h + 20 >> 2];
            c[a + 24 >> 2] = c[h + 24 >> 2];
            c[h + 0 >> 2] = c[f + 0 >> 2];
            c[h + 4 >> 2] = c[f + 4 >> 2];
            c[h + 8 >> 2] = c[f + 8 >> 2];
            c[h + 12 >> 2] = c[f + 12 >> 2];
            c[h + 16 >> 2] = c[f + 16 >> 2];
            c[h + 20 >> 2] = c[f + 20 >> 2];
            c[h + 24 >> 2] = c[f + 24 >> 2];
            m = 1;
            i = e;
            return m | 0;
        case 3:
            h = a + 28 | 0;
            j = b + -28 | 0;
            k = nb[c[d >> 2] & 31](h, a) | 0;
            l = nb[c[d >> 2] & 31](j, h) | 0;
            if (!k) {
                if (!l) {
                    m = 1;
                    i = e;
                    return m | 0
                }
                c[f + 0 >> 2] = c[h + 0 >> 2];
                c[f + 4 >> 2] = c[h + 4 >> 2];
                c[f + 8 >> 2] = c[h + 8 >> 2];
                c[f + 12 >> 2] = c[h + 12 >> 2];
                c[f + 16 >> 2] = c[h + 16 >> 2];
                c[f + 20 >> 2] = c[h + 20 >> 2];
                c[f + 24 >> 2] = c[h + 24 >> 2];
                c[h + 0 >> 2] = c[j + 0 >> 2];
                c[h + 4 >> 2] = c[j + 4 >> 2];
                c[h + 8 >> 2] = c[j + 8 >> 2];
                c[h + 12 >> 2] = c[j + 12 >> 2];
                c[h + 16 >> 2] = c[j + 16 >> 2];
                c[h + 20 >> 2] = c[j + 20 >> 2];
                c[h + 24 >> 2] = c[j + 24 >> 2];
                c[j + 0 >> 2] = c[f + 0 >> 2];
                c[j + 4 >> 2] = c[f + 4 >> 2];
                c[j + 8 >> 2] = c[f + 8 >> 2];
                c[j + 12 >> 2] = c[f + 12 >> 2];
                c[j + 16 >> 2] = c[f + 16 >> 2];
                c[j + 20 >> 2] = c[f + 20 >> 2];
                c[j + 24 >> 2] = c[f + 24 >> 2];
                if (!(nb[c[d >> 2] & 31](h, a) | 0)) {
                    m = 1;
                    i = e;
                    return m | 0
                }
                c[f + 0 >> 2] = c[a + 0 >> 2];
                c[f + 4 >> 2] = c[a + 4 >> 2];
                c[f + 8 >> 2] = c[a + 8 >> 2];
                c[f + 12 >> 2] = c[a + 12 >> 2];
                c[f + 16 >> 2] = c[a + 16 >> 2];
                c[f + 20 >> 2] =
                c[a + 20 >> 2];
                c[f + 24 >> 2] = c[a + 24 >> 2];
                c[a + 0 >> 2] = c[h + 0 >> 2];
                c[a + 4 >> 2] = c[h + 4 >> 2];
                c[a + 8 >> 2] = c[h + 8 >> 2];
                c[a + 12 >> 2] = c[h + 12 >> 2];
                c[a + 16 >> 2] = c[h + 16 >> 2];
                c[a + 20 >> 2] = c[h + 20 >> 2];
                c[a + 24 >> 2] = c[h + 24 >> 2];
                c[h + 0 >> 2] = c[f + 0 >> 2];
                c[h + 4 >> 2] = c[f + 4 >> 2];
                c[h + 8 >> 2] = c[f + 8 >> 2];
                c[h + 12 >> 2] = c[f + 12 >> 2];
                c[h + 16 >> 2] = c[f + 16 >> 2];
                c[h + 20 >> 2] = c[f + 20 >> 2];
                c[h + 24 >> 2] = c[f + 24 >> 2];
                m = 1;
                i = e;
                return m | 0
            }
            if (l) {
                c[f + 0 >> 2] = c[a + 0 >> 2];
                c[f + 4 >> 2] = c[a + 4 >> 2];
                c[f + 8 >> 2] = c[a + 8 >> 2];
                c[f + 12 >> 2] = c[a + 12 >> 2];
                c[f + 16 >> 2] = c[a + 16 >> 2];
                c[f + 20 >> 2] = c[a + 20 >> 2];
                c[f + 24 >> 2] = c[a + 24 >> 2];
                c[a + 0 >> 2] = c[j + 0 >> 2];
                c[a + 4 >> 2] = c[j + 4 >> 2];
                c[a + 8 >> 2] = c[j + 8 >> 2];
                c[a + 12 >> 2] = c[j + 12 >> 2];
                c[a + 16 >> 2] = c[j + 16 >> 2];
                c[a + 20 >> 2] = c[j + 20 >> 2];
                c[a + 24 >> 2] = c[j + 24 >> 2];
                c[j + 0 >> 2] = c[f + 0 >> 2];
                c[j + 4 >> 2] = c[f + 4 >> 2];
                c[j + 8 >> 2] = c[f + 8 >> 2];
                c[j + 12 >> 2] = c[f + 12 >> 2];
                c[j + 16 >> 2] = c[f + 16 >> 2];
                c[j + 20 >> 2] = c[f + 20 >> 2];
                c[j + 24 >> 2] = c[f + 24 >> 2];
                m = 1;
                i = e;
                return m | 0
            }
            c[f + 0 >> 2] = c[a + 0 >> 2];
            c[f + 4 >> 2] = c[a + 4 >> 2];
            c[f + 8 >> 2] = c[a + 8 >> 2];
            c[f + 12 >> 2] = c[a + 12 >> 2];
            c[f + 16 >> 2] = c[a + 16 >> 2];
            c[f + 20 >> 2] = c[a + 20 >> 2];
            c[f + 24 >> 2] = c[a + 24 >> 2];
            c[a + 0 >> 2] = c[h + 0 >> 2];
            c[a + 4 >> 2] = c[h + 4 >> 2];
            c[a + 8 >> 2] = c[h + 8 >> 2];
            c[a + 12 >> 2] = c[h + 12 >> 2];
            c[a + 16 >> 2] = c[h + 16 >> 2];
            c[a + 20 >> 2] = c[h + 20 >> 2];
            c[a + 24 >> 2] = c[h + 24 >> 2];
            c[h + 0 >> 2] = c[f + 0 >> 2];
            c[h + 4 >> 2] = c[f + 4 >> 2];
            c[h + 8 >> 2] = c[f + 8 >> 2];
            c[h + 12 >> 2] = c[f + 12 >> 2];
            c[h + 16 >> 2] = c[f + 16 >> 2];
            c[h + 20 >> 2] = c[f + 20 >> 2];
            c[h + 24 >> 2] = c[f + 24 >> 2];
            if (!(nb[c[d >> 2] & 31](j, h) | 0)) {
                m = 1;
                i = e;
                return m | 0
            }
            c[f + 0 >> 2] = c[h + 0 >> 2];
            c[f + 4 >> 2] = c[h + 4 >> 2];
            c[f + 8 >> 2] = c[h + 8 >> 2];
            c[f + 12 >> 2] = c[h + 12 >> 2];
            c[f + 16 >> 2] = c[h + 16 >> 2];
            c[f + 20 >> 2] = c[h + 20 >> 2];
            c[f + 24 >> 2] = c[h + 24 >> 2];
            c[h + 0 >> 2] = c[j + 0 >> 2];
            c[h + 4 >> 2] = c[j + 4 >> 2];
            c[h + 8 >> 2] =
            c[j + 8 >> 2];
            c[h + 12 >> 2] = c[j + 12 >> 2];
            c[h + 16 >> 2] = c[j + 16 >> 2];
            c[h + 20 >> 2] = c[j + 20 >> 2];
            c[h + 24 >> 2] = c[j + 24 >> 2];
            c[j + 0 >> 2] = c[f + 0 >> 2];
            c[j + 4 >> 2] = c[f + 4 >> 2];
            c[j + 8 >> 2] = c[f + 8 >> 2];
            c[j + 12 >> 2] = c[f + 12 >> 2];
            c[j + 16 >> 2] = c[f + 16 >> 2];
            c[j + 20 >> 2] = c[f + 20 >> 2];
            c[j + 24 >> 2] = c[f + 24 >> 2];
            m = 1;
            i = e;
            return m | 0;
        case 1:
        case 0:
            m = 1;
            i = e;
            return m | 0;
        case 4:
            zl(a, a + 28 | 0, a + 56 | 0, b + -28 | 0, d) | 0;
            m = 1;
            i = e;
            return m | 0;
        case 2:
            j = b + -28 | 0;
            if (!(nb[c[d >> 2] & 31](j, a) | 0)) {
                m = 1;
                i = e;
                return m | 0
            }
            c[f + 0 >> 2] = c[a + 0 >> 2];
            c[f + 4 >> 2] = c[a + 4 >> 2];
            c[f + 8 >> 2] = c[a + 8 >> 2];
            c[f + 12 >> 2] = c[a + 12 >> 2];
            c[f + 16 >> 2] = c[a + 16 >> 2];
            c[f + 20 >> 2] = c[a + 20 >> 2];
            c[f + 24 >> 2] = c[a + 24 >> 2];
            c[a + 0 >> 2] = c[j + 0 >> 2];
            c[a + 4 >> 2] = c[j + 4 >> 2];
            c[a + 8 >> 2] = c[j + 8 >> 2];
            c[a + 12 >> 2] = c[j + 12 >> 2];
            c[a + 16 >> 2] = c[j + 16 >> 2];
            c[a + 20 >> 2] = c[j + 20 >> 2];
            c[a + 24 >> 2] = c[j + 24 >> 2];
            c[j + 0 >> 2] = c[f + 0 >> 2];
            c[j + 4 >> 2] = c[f + 4 >> 2];
            c[j + 8 >> 2] = c[f + 8 >> 2];
            c[j + 12 >> 2] = c[f + 12 >> 2];
            c[j + 16 >> 2] = c[f + 16 >> 2];
            c[j + 20 >> 2] = c[f + 20 >> 2];
            c[j + 24 >> 2] = c[f + 24 >> 2];
            m = 1;
            i = e;
            return m | 0;
        default:
            j = a + 56 | 0;
            h = a + 28 | 0;
            l = nb[c[d >> 2] & 31](h, a) | 0;
            k = nb[c[d >> 2] & 31](j, h) | 0;
            do if (l) {
                if (k) {
                    c[f + 0 >> 2] = c[a + 0 >> 2];
                    c[f + 4 >> 2] = c[a +
                    4 >> 2];
                    c[f + 8 >> 2] = c[a + 8 >> 2];
                    c[f + 12 >> 2] = c[a + 12 >> 2];
                    c[f + 16 >> 2] = c[a + 16 >> 2];
                    c[f + 20 >> 2] = c[a + 20 >> 2];
                    c[f + 24 >> 2] = c[a + 24 >> 2];
                    c[a + 0 >> 2] = c[j + 0 >> 2];
                    c[a + 4 >> 2] = c[j + 4 >> 2];
                    c[a + 8 >> 2] = c[j + 8 >> 2];
                    c[a + 12 >> 2] = c[j + 12 >> 2];
                    c[a + 16 >> 2] = c[j + 16 >> 2];
                    c[a + 20 >> 2] = c[j + 20 >> 2];
                    c[a + 24 >> 2] = c[j + 24 >> 2];
                    c[j + 0 >> 2] = c[f + 0 >> 2];
                    c[j + 4 >> 2] = c[f + 4 >> 2];
                    c[j + 8 >> 2] = c[f + 8 >> 2];
                    c[j + 12 >> 2] = c[f + 12 >> 2];
                    c[j + 16 >> 2] = c[f + 16 >> 2];
                    c[j + 20 >> 2] = c[f + 20 >> 2];
                    c[j + 24 >> 2] = c[f + 24 >> 2];
                    break
                }
                c[f + 0 >> 2] = c[a + 0 >> 2];
                c[f + 4 >> 2] = c[a + 4 >> 2];
                c[f + 8 >> 2] = c[a + 8 >> 2];
                c[f + 12 >> 2] = c[a + 12 >> 2];
                c[f +
                16 >> 2] = c[a + 16 >> 2];
                c[f + 20 >> 2] = c[a + 20 >> 2];
                c[f + 24 >> 2] = c[a + 24 >> 2];
                c[a + 0 >> 2] = c[h + 0 >> 2];
                c[a + 4 >> 2] = c[h + 4 >> 2];
                c[a + 8 >> 2] = c[h + 8 >> 2];
                c[a + 12 >> 2] = c[h + 12 >> 2];
                c[a + 16 >> 2] = c[h + 16 >> 2];
                c[a + 20 >> 2] = c[h + 20 >> 2];
                c[a + 24 >> 2] = c[h + 24 >> 2];
                c[h + 0 >> 2] = c[f + 0 >> 2];
                c[h + 4 >> 2] = c[f + 4 >> 2];
                c[h + 8 >> 2] = c[f + 8 >> 2];
                c[h + 12 >> 2] = c[f + 12 >> 2];
                c[h + 16 >> 2] = c[f + 16 >> 2];
                c[h + 20 >> 2] = c[f + 20 >> 2];
                c[h + 24 >> 2] = c[f + 24 >> 2];
                if (nb[c[d >> 2] & 31](j, h) | 0) {
                    c[f + 0 >> 2] = c[h + 0 >> 2];
                    c[f + 4 >> 2] = c[h + 4 >> 2];
                    c[f + 8 >> 2] = c[h + 8 >> 2];
                    c[f + 12 >> 2] = c[h + 12 >> 2];
                    c[f + 16 >> 2] = c[h + 16 >> 2];
                    c[f + 20 >> 2] = c[h +
                    20 >> 2];
                    c[f + 24 >> 2] = c[h + 24 >> 2];
                    c[h + 0 >> 2] = c[j + 0 >> 2];
                    c[h + 4 >> 2] = c[j + 4 >> 2];
                    c[h + 8 >> 2] = c[j + 8 >> 2];
                    c[h + 12 >> 2] = c[j + 12 >> 2];
                    c[h + 16 >> 2] = c[j + 16 >> 2];
                    c[h + 20 >> 2] = c[j + 20 >> 2];
                    c[h + 24 >> 2] = c[j + 24 >> 2];
                    c[j + 0 >> 2] = c[f + 0 >> 2];
                    c[j + 4 >> 2] = c[f + 4 >> 2];
                    c[j + 8 >> 2] = c[f + 8 >> 2];
                    c[j + 12 >> 2] = c[f + 12 >> 2];
                    c[j + 16 >> 2] = c[f + 16 >> 2];
                    c[j + 20 >> 2] = c[f + 20 >> 2];
                    c[j + 24 >> 2] = c[f + 24 >> 2]
                }
            } else if (k) {
                c[f + 0 >> 2] = c[h + 0 >> 2];
                c[f + 4 >> 2] = c[h + 4 >> 2];
                c[f + 8 >> 2] = c[h + 8 >> 2];
                c[f + 12 >> 2] = c[h + 12 >> 2];
                c[f + 16 >> 2] = c[h + 16 >> 2];
                c[f + 20 >> 2] = c[h + 20 >> 2];
                c[f + 24 >> 2] = c[h + 24 >> 2];
                c[h + 0 >> 2] = c[j + 0 >>
                2];
                c[h + 4 >> 2] = c[j + 4 >> 2];
                c[h + 8 >> 2] = c[j + 8 >> 2];
                c[h + 12 >> 2] = c[j + 12 >> 2];
                c[h + 16 >> 2] = c[j + 16 >> 2];
                c[h + 20 >> 2] = c[j + 20 >> 2];
                c[h + 24 >> 2] = c[j + 24 >> 2];
                c[j + 0 >> 2] = c[f + 0 >> 2];
                c[j + 4 >> 2] = c[f + 4 >> 2];
                c[j + 8 >> 2] = c[f + 8 >> 2];
                c[j + 12 >> 2] = c[f + 12 >> 2];
                c[j + 16 >> 2] = c[f + 16 >> 2];
                c[j + 20 >> 2] = c[f + 20 >> 2];
                c[j + 24 >> 2] = c[f + 24 >> 2];
                if (nb[c[d >> 2] & 31](h, a) | 0) {
                    c[f + 0 >> 2] = c[a + 0 >> 2];
                    c[f + 4 >> 2] = c[a + 4 >> 2];
                    c[f + 8 >> 2] = c[a + 8 >> 2];
                    c[f + 12 >> 2] = c[a + 12 >> 2];
                    c[f + 16 >> 2] = c[a + 16 >> 2];
                    c[f + 20 >> 2] = c[a + 20 >> 2];
                    c[f + 24 >> 2] = c[a + 24 >> 2];
                    c[a + 0 >> 2] = c[h + 0 >> 2];
                    c[a + 4 >> 2] = c[h + 4 >> 2];
                    c[a + 8 >> 2] =
                    c[h + 8 >> 2];
                    c[a + 12 >> 2] = c[h + 12 >> 2];
                    c[a + 16 >> 2] = c[h + 16 >> 2];
                    c[a + 20 >> 2] = c[h + 20 >> 2];
                    c[a + 24 >> 2] = c[h + 24 >> 2];
                    c[h + 0 >> 2] = c[f + 0 >> 2];
                    c[h + 4 >> 2] = c[f + 4 >> 2];
                    c[h + 8 >> 2] = c[f + 8 >> 2];
                    c[h + 12 >> 2] = c[f + 12 >> 2];
                    c[h + 16 >> 2] = c[f + 16 >> 2];
                    c[h + 20 >> 2] = c[f + 20 >> 2];
                    c[h + 24 >> 2] = c[f + 24 >> 2]
                }
            }
            while (0);
            f = a + 84 | 0;
            if ((f | 0) == (b | 0)) {
                m = 1;
                i = e;
                return m | 0
            }
            h = 0;
            k = f;
            f = j;
            while (1) {
                if (nb[c[d >> 2] & 31](k, f) | 0) {
                    c[g + 0 >> 2] = c[k + 0 >> 2];
                    c[g + 4 >> 2] = c[k + 4 >> 2];
                    c[g + 8 >> 2] = c[k + 8 >> 2];
                    c[g + 12 >> 2] = c[k + 12 >> 2];
                    c[g + 16 >> 2] = c[k + 16 >> 2];
                    c[g + 20 >> 2] = c[k + 20 >> 2];
                    c[g + 24 >> 2] = c[k + 24 >> 2];
                    j = k;
                    l =
                    f;
                    while (1) {
                        c[j + 0 >> 2] = c[l + 0 >> 2];
                        c[j + 4 >> 2] = c[l + 4 >> 2];
                        c[j + 8 >> 2] = c[l + 8 >> 2];
                        c[j + 12 >> 2] = c[l + 12 >> 2];
                        c[j + 16 >> 2] = c[l + 16 >> 2];
                        c[j + 20 >> 2] = c[l + 20 >> 2];
                        c[j + 24 >> 2] = c[l + 24 >> 2];
                        if ((l | 0) == (a | 0))
                            break;
                        n = l + -28 | 0;
                        if (nb[c[d >> 2] & 31](g, n) | 0) {
                            o = l;
                            l = n;
                            j = o
                        } else
                            break
                    }
                    c[l + 0 >> 2] = c[g + 0 >> 2];
                    c[l + 4 >> 2] = c[g + 4 >> 2];
                    c[l + 8 >> 2] = c[g + 8 >> 2];
                    c[l + 12 >> 2] = c[g + 12 >> 2];
                    c[l + 16 >> 2] = c[g + 16 >> 2];
                    c[l + 20 >> 2] = c[g + 20 >> 2];
                    c[l + 24 >> 2] = c[g + 24 >> 2];
                    j = h + 1 | 0;
                    if ((j | 0) == 8)
                        break;
                    else
                        p = j
                } else
                    p = h;
                j = k + 28 | 0;
                if ((j | 0) == (b | 0)) {
                    m = 1;
                    q = 35;
                    break
                } else {
                    o = k;
                    h = p;
                    k = j;
                    f = o
                }
            }
            if ((q |
            0) == 35) {
                i = e;
                return m | 0
            }
            m = (k + 28 | 0) == (b | 0);
            i = e;
            return m | 0
        }
        return 0
    }
    function Cl(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        g = a;
        a = b;
        a:
        while (1) {
            b = a;
            h = a + -8 | 0;
            j = g;
            b:
            while (1) {
                k = j;
                l = b - k | 0;
                m = l >> 3;
                switch (m | 0) {
                case 2:
                    n = 4;
                    break a;
                    break;
                case 3:
                    n = 6;
                    break a;
                    break;
                case 4:
                    n = 14;
                    break a;
                    break;
                case 5:
                    n = 26;
                    break a;
                    break;
                case 1:
                case 0:
                    n = 84;
                    break a;
                    break;
                default:
                }
                if ((l |
                0) < 248) {
                    n = 28;
                    break a
                }
                o = (m | 0) / 2 | 0;
                p = j + (o << 3) | 0;
                do if ((l | 0) <= 7992) {
                    q = nb[c[d >> 2] & 31](p, j) | 0;
                    r = nb[c[d >> 2] & 31](h, p) | 0;
                    if (!q) {
                        if (!r) {
                            s = 0;
                            break
                        }
                        q = p;
                        t = c[q >> 2] | 0;
                        u = c[q + 4 >> 2] | 0;
                        q = h;
                        v = c[q + 4 >> 2] | 0;
                        w = p;
                        c[w >> 2] = c[q >> 2];
                        c[w + 4 >> 2] = v;
                        v = h;
                        c[v >> 2] = t;
                        c[v + 4 >> 2] = u;
                        if (!(nb[c[d >> 2] & 31](p, j) | 0)) {
                            s = 1;
                            break
                        }
                        u = j;
                        v = c[u >> 2] | 0;
                        t = c[u + 4 >> 2] | 0;
                        u = p;
                        w = c[u + 4 >> 2] | 0;
                        q = j;
                        c[q >> 2] = c[u >> 2];
                        c[q + 4 >> 2] = w;
                        w = p;
                        c[w >> 2] = v;
                        c[w + 4 >> 2] = t;
                        s = 2;
                        break
                    }
                    t = j;
                    w = c[t >> 2] | 0;
                    v = c[t + 4 >> 2] | 0;
                    if (r) {
                        r = h;
                        t = c[r + 4 >> 2] | 0;
                        q = j;
                        c[q >> 2] = c[r >> 2];
                        c[q + 4 >> 2] = t;
                        t = h;
                        c[t >> 2] = w;
                        c[t +
                        4 >> 2] = v;
                        s = 1;
                        break
                    }
                    t = p;
                    q = c[t + 4 >> 2] | 0;
                    r = j;
                    c[r >> 2] = c[t >> 2];
                    c[r + 4 >> 2] = q;
                    q = p;
                    c[q >> 2] = w;
                    c[q + 4 >> 2] = v;
                    if (nb[c[d >> 2] & 31](h, p) | 0) {
                        v = p;
                        q = c[v >> 2] | 0;
                        w = c[v + 4 >> 2] | 0;
                        v = h;
                        r = c[v + 4 >> 2] | 0;
                        t = p;
                        c[t >> 2] = c[v >> 2];
                        c[t + 4 >> 2] = r;
                        r = h;
                        c[r >> 2] = q;
                        c[r + 4 >> 2] = w;
                        s = 2
                    } else
                        s = 1
                } else {
                    w = (m | 0) / 4 | 0;
                    s = Dl(j, j + (w << 3) | 0, p, j + (w + o << 3) | 0, h, d) | 0
                }
                while (0);
                do if (nb[c[d >> 2] & 31](j, p) | 0) {
                    x = h;
                    y = s
                } else {
                    o = h;
                    while (1) {
                        o = o + -8 | 0;
                        if ((j | 0) == (o | 0))
                            break;
                        if (nb[c[d >> 2] & 31](o, p) | 0) {
                            n = 67;
                            break
                        }
                    }
                    if ((n | 0) == 67) {
                        n = 0;
                        m = j;
                        l = c[m >> 2] | 0;
                        w = c[m + 4 >> 2] | 0;
                        m = o;
                        r = c[m + 4 >> 2] | 0;
                        q = j;
                        c[q >>
                        2] = c[m >> 2];
                        c[q + 4 >> 2] = r;
                        r = o;
                        c[r >> 2] = l;
                        c[r + 4 >> 2] = w;
                        x = o;
                        y = s + 1 | 0;
                        break
                    }
                    w = j + 8 | 0;
                    if (nb[c[d >> 2] & 31](j, h) | 0)
                        z = w;
                    else {
                        if ((w | 0) == (h | 0)) {
                            n = 84;
                            break a
                        } else
                            A = w;
                        while (1) {
                            B = A + 8 | 0;
                            if (nb[c[d >> 2] & 31](j, A) | 0)
                                break;
                            if ((B | 0) == (h | 0)) {
                                n = 84;
                                break a
                            } else
                                A = B
                        }
                        o = A;
                        w = c[o >> 2] | 0;
                        r = c[o + 4 >> 2] | 0;
                        o = h;
                        l = c[o + 4 >> 2] | 0;
                        q = A;
                        c[q >> 2] = c[o >> 2];
                        c[q + 4 >> 2] = l;
                        l = h;
                        c[l >> 2] = w;
                        c[l + 4 >> 2] = r;
                        z = B
                    }
                    if ((z | 0) == (h | 0)) {
                        n = 84;
                        break a
                    } else {
                        C = z;
                        D = h
                    }
                    while (1) {
                        r = C;
                        while (1) {
                            E = r + 8 | 0;
                            if (nb[c[d >> 2] & 31](j, r) | 0) {
                                F = D;
                                break
                            } else
                                r = E
                        }
                        do F = F + -8 | 0;
                        while (nb[c[d >> 2] & 31](j, F) |
                        0);
                        if (!(r >>> 0 < F >>> 0)) {
                            j = r;
                            continue b
                        }
                        l = r;
                        w = c[l >> 2] | 0;
                        q = c[l + 4 >> 2] | 0;
                        l = F;
                        o = c[l + 4 >> 2] | 0;
                        m = r;
                        c[m >> 2] = c[l >> 2];
                        c[m + 4 >> 2] = o;
                        o = F;
                        c[o >> 2] = w;
                        c[o + 4 >> 2] = q;
                        C = E;
                        D = F
                    }
                }
                while (0);
                q = j + 8 | 0;
                c:
                do if (q >>> 0 < x >>> 0) {
                    o = q;
                    w = x;
                    m = p;
                    l = y;
                    while (1) {
                        t = o;
                        while (1) {
                            G = t + 8 | 0;
                            if (nb[c[d >> 2] & 31](t, m) | 0)
                                t = G;
                            else {
                                H = w;
                                break
                            }
                        }
                        do H = H + -8 | 0;
                        while (!(nb[c[d >> 2] & 31](H, m) | 0));
                        if (t >>> 0 > H >>> 0) {
                            I = t;
                            J = m;
                            K = l;
                            break c
                        }
                        r = t;
                        v = c[r >> 2] | 0;
                        u = c[r + 4 >> 2] | 0;
                        r = H;
                        L = c[r + 4 >> 2] | 0;
                        M = t;
                        c[M >> 2] = c[r >> 2];
                        c[M + 4 >> 2] = L;
                        L = H;
                        c[L >> 2] = v;
                        c[L + 4 >> 2] = u;
                        o = G;
                        w = H;
                        m = (m | 0) == (t | 0) ? H : m;
                        l = l + 1 | 0
                    }
                } else {
                    I =
                    q;
                    J = p;
                    K = y
                }
                while (0);
                if ((I | 0) != (J | 0) ? nb[c[d >> 2] & 31](J, I) | 0 : 0) {
                    p = I;
                    q = c[p >> 2] | 0;
                    l = c[p + 4 >> 2] | 0;
                    p = J;
                    m = c[p + 4 >> 2] | 0;
                    w = I;
                    c[w >> 2] = c[p >> 2];
                    c[w + 4 >> 2] = m;
                    m = J;
                    c[m >> 2] = q;
                    c[m + 4 >> 2] = l;
                    N = K + 1 | 0
                } else
                    N = K;
                if ((N | 0) == 0) {
                    O = El(j, I, d) | 0;
                    l = I + 8 | 0;
                    if (El(l, a, d) | 0) {
                        n = 79;
                        break
                    }
                    if (O) {
                        j = l;
                        continue
                    }
                }
                l = I;
                if ((l - k | 0) >= (b - l | 0)) {
                    n = 83;
                    break
                }
                Cl(j, I, d);
                j = I + 8 | 0
            }
            if ((n | 0) == 79) {
                n = 0;
                if (O) {
                    n = 84;
                    break
                } else {
                    g = j;
                    a = I;
                    continue
                }
            } else if ((n | 0) == 83) {
                n = 0;
                Cl(I + 8 | 0, a, d);
                g = j;
                a = I;
                continue
            }
        }
        if ((n | 0) == 4) {
            if (!(nb[c[d >> 2] & 31](h, j) | 0)) {
                i = e;
                return
            }
            I = j;
            g = c[I >> 2] | 0;
            O = c[I + 4 >> 2] | 0;
            I = h;
            N = c[I + 4 >> 2] | 0;
            K = j;
            c[K >> 2] = c[I >> 2];
            c[K + 4 >> 2] = N;
            N = h;
            c[N >> 2] = g;
            c[N + 4 >> 2] = O;
            i = e;
            return
        } else if ((n | 0) == 6) {
            O = j + 8 | 0;
            N = nb[c[d >> 2] & 31](O, j) | 0;
            g = nb[c[d >> 2] & 31](h, O) | 0;
            if (!N) {
                if (!g) {
                    i = e;
                    return
                }
                N = O;
                K = c[N >> 2] | 0;
                I = c[N + 4 >> 2] | 0;
                N = h;
                J = c[N + 4 >> 2] | 0;
                y = O;
                c[y >> 2] = c[N >> 2];
                c[y + 4 >> 2] = J;
                J = h;
                c[J >> 2] = K;
                c[J + 4 >> 2] = I;
                if (!(nb[c[d >> 2] & 31](O, j) | 0)) {
                    i = e;
                    return
                }
                I = j;
                J = c[I >> 2] | 0;
                K = c[I + 4 >> 2] | 0;
                I = O;
                y = c[I + 4 >> 2] | 0;
                N = j;
                c[N >> 2] = c[I >> 2];
                c[N + 4 >> 2] = y;
                y = O;
                c[y >> 2] = J;
                c[y + 4 >> 2] = K;
                i = e;
                return
            }
            K = j;
            y = c[K >> 2] | 0;
            J = c[K + 4 >> 2] | 0;
            if (g) {
                g =
                h;
                K = c[g + 4 >> 2] | 0;
                N = j;
                c[N >> 2] = c[g >> 2];
                c[N + 4 >> 2] = K;
                K = h;
                c[K >> 2] = y;
                c[K + 4 >> 2] = J;
                i = e;
                return
            }
            K = O;
            N = c[K + 4 >> 2] | 0;
            g = j;
            c[g >> 2] = c[K >> 2];
            c[g + 4 >> 2] = N;
            N = O;
            c[N >> 2] = y;
            c[N + 4 >> 2] = J;
            if (!(nb[c[d >> 2] & 31](h, O) | 0)) {
                i = e;
                return
            }
            J = O;
            N = c[J >> 2] | 0;
            y = c[J + 4 >> 2] | 0;
            J = h;
            g = c[J + 4 >> 2] | 0;
            K = O;
            c[K >> 2] = c[J >> 2];
            c[K + 4 >> 2] = g;
            g = h;
            c[g >> 2] = N;
            c[g + 4 >> 2] = y;
            i = e;
            return
        } else if ((n | 0) == 14) {
            y = j + 8 | 0;
            g = j + 16 | 0;
            N = nb[c[d >> 2] & 31](y, j) | 0;
            K = nb[c[d >> 2] & 31](g, y) | 0;
            do if (N) {
                J = j;
                O = c[J >> 2] | 0;
                I = c[J + 4 >> 2] | 0;
                if (K) {
                    J = g;
                    H = c[J + 4 >> 2] | 0;
                    G = j;
                    c[G >> 2] = c[J >> 2];
                    c[G + 4 >> 2] = H;
                    H = g;
                    c[H >> 2] = O;
                    c[H + 4 >> 2] = I;
                    break
                }
                H = y;
                G = c[H + 4 >> 2] | 0;
                J = j;
                c[J >> 2] = c[H >> 2];
                c[J + 4 >> 2] = G;
                G = y;
                c[G >> 2] = O;
                c[G + 4 >> 2] = I;
                if (nb[c[d >> 2] & 31](g, y) | 0) {
                    I = y;
                    G = c[I >> 2] | 0;
                    O = c[I + 4 >> 2] | 0;
                    I = g;
                    J = c[I + 4 >> 2] | 0;
                    H = y;
                    c[H >> 2] = c[I >> 2];
                    c[H + 4 >> 2] = J;
                    J = g;
                    c[J >> 2] = G;
                    c[J + 4 >> 2] = O
                }
            } else if (K ? (O = y, J = c[O >> 2] | 0, G = c[O + 4 >> 2] | 0, O = g, H = c[O + 4 >> 2] | 0, I = y, c[I >> 2] = c[O >> 2], c[I + 4 >> 2] = H, H = g, c[H >> 2] = J, c[H + 4 >> 2] = G, nb[c[d >> 2] & 31](y, j) | 0) : 0) {
                G = j;
                H = c[G >> 2] | 0;
                J = c[G + 4 >> 2] | 0;
                G = y;
                I = c[G + 4 >> 2] | 0;
                O = j;
                c[O >> 2] = c[G >> 2];
                c[O + 4 >> 2] = I;
                I = y;
                c[I >> 2] = H;
                c[I + 4 >> 2] = J
            }
            while (0);
            if (!(nb[c[d >>
            2] & 31](h, g) | 0)) {
                i = e;
                return
            }
            K = g;
            N = c[K >> 2] | 0;
            J = c[K + 4 >> 2] | 0;
            K = h;
            I = c[K + 4 >> 2] | 0;
            H = g;
            c[H >> 2] = c[K >> 2];
            c[H + 4 >> 2] = I;
            I = h;
            c[I >> 2] = N;
            c[I + 4 >> 2] = J;
            if (!(nb[c[d >> 2] & 31](g, y) | 0)) {
                i = e;
                return
            }
            J = y;
            I = c[J >> 2] | 0;
            N = c[J + 4 >> 2] | 0;
            J = g;
            H = c[J + 4 >> 2] | 0;
            K = y;
            c[K >> 2] = c[J >> 2];
            c[K + 4 >> 2] = H;
            H = g;
            c[H >> 2] = I;
            c[H + 4 >> 2] = N;
            if (!(nb[c[d >> 2] & 31](y, j) | 0)) {
                i = e;
                return
            }
            N = j;
            H = c[N >> 2] | 0;
            I = c[N + 4 >> 2] | 0;
            N = y;
            g = c[N + 4 >> 2] | 0;
            K = j;
            c[K >> 2] = c[N >> 2];
            c[K + 4 >> 2] = g;
            g = y;
            c[g >> 2] = H;
            c[g + 4 >> 2] = I;
            i = e;
            return
        } else if ((n | 0) == 26) {
            Dl(j, j + 8 | 0, j + 16 | 0, j + 24 | 0, h, d) | 0;
            i = e;
            return
        } else if ((n |
        0) == 28) {
            h = j + 16 | 0;
            I = j + 8 | 0;
            g = nb[c[d >> 2] & 31](I, j) | 0;
            H = nb[c[d >> 2] & 31](h, I) | 0;
            do if (g) {
                y = j;
                K = c[y >> 2] | 0;
                N = c[y + 4 >> 2] | 0;
                if (H) {
                    y = h;
                    J = c[y + 4 >> 2] | 0;
                    O = j;
                    c[O >> 2] = c[y >> 2];
                    c[O + 4 >> 2] = J;
                    J = h;
                    c[J >> 2] = K;
                    c[J + 4 >> 2] = N;
                    break
                }
                J = I;
                O = c[J + 4 >> 2] | 0;
                y = j;
                c[y >> 2] = c[J >> 2];
                c[y + 4 >> 2] = O;
                O = I;
                c[O >> 2] = K;
                c[O + 4 >> 2] = N;
                if (nb[c[d >> 2] & 31](h, I) | 0) {
                    N = I;
                    O = c[N >> 2] | 0;
                    K = c[N + 4 >> 2] | 0;
                    N = h;
                    y = c[N + 4 >> 2] | 0;
                    J = I;
                    c[J >> 2] = c[N >> 2];
                    c[J + 4 >> 2] = y;
                    y = h;
                    c[y >> 2] = O;
                    c[y + 4 >> 2] = K
                }
            } else if (H ? (K = I, y = c[K >> 2] | 0, O = c[K + 4 >> 2] | 0, K = h, J = c[K + 4 >> 2] | 0, N = I, c[N >> 2] = c[K >> 2], c[N + 4 >> 2] = J, J =
            h, c[J >> 2] = y, c[J + 4 >> 2] = O, nb[c[d >> 2] & 31](I, j) | 0) : 0) {
                O = j;
                J = c[O >> 2] | 0;
                y = c[O + 4 >> 2] | 0;
                O = I;
                N = c[O + 4 >> 2] | 0;
                K = j;
                c[K >> 2] = c[O >> 2];
                c[K + 4 >> 2] = N;
                N = I;
                c[N >> 2] = J;
                c[N + 4 >> 2] = y
            }
            while (0);
            I = j + 24 | 0;
            if ((I | 0) == (a | 0)) {
                i = e;
                return
            } else {
                P = I;
                Q = h
            }
            while (1) {
                if (nb[c[d >> 2] & 31](P, Q) | 0) {
                    h = P;
                    I = c[h + 4 >> 2] | 0;
                    H = f;
                    c[H >> 2] = c[h >> 2];
                    c[H + 4 >> 2] = I;
                    I = P;
                    H = Q;
                    while (1) {
                        h = H;
                        g = c[h + 4 >> 2] | 0;
                        y = I;
                        c[y >> 2] = c[h >> 2];
                        c[y + 4 >> 2] = g;
                        if ((H | 0) == (j | 0))
                            break;
                        g = H + -8 | 0;
                        if (nb[c[d >> 2] & 31](f, g) | 0) {
                            y = H;
                            H = g;
                            I = y
                        } else
                            break
                    }
                    I = f;
                    y = c[I + 4 >> 2] | 0;
                    g = H;
                    c[g >> 2] = c[I >> 2];
                    c[g + 4 >> 2] = y
                }
                y = P +
                8 | 0;
                if ((y | 0) == (a | 0))
                    break;
                else {
                    g = P;
                    P = y;
                    Q = g
                }
            }
            i = e;
            return
        } else if ((n | 0) == 84) {
            i = e;
            return
        }
    }
    function Dl(a, b, d, e, f, g) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0;
        h = i;
        j = nb[c[g >> 2] & 31](b, a) | 0;
        k = nb[c[g >> 2] & 31](d, b) | 0;
        do if (j) {
            l = a;
            m = c[l >> 2] | 0;
            n = c[l + 4 >> 2] | 0;
            if (k) {
                l = d;
                o = c[l + 4 >> 2] | 0;
                p = a;
                c[p >> 2] = c[l >> 2];
                c[p + 4 >> 2] = o;
                o = d;
                c[o >> 2] = m;
                c[o + 4 >> 2] = n;
                q = 1;
                break
            }
            o = b;
            p = c[o + 4 >> 2] | 0;
            l = a;
            c[l >> 2] = c[o >> 2];
            c[l + 4 >> 2] = p;
            p = b;
            c[p >> 2] = m;
            c[p + 4 >> 2] = n;
            if (nb[c[g >> 2] & 31](d, b) | 0) {
                n = b;
                p = c[n >> 2] | 0;
                m = c[n +
                4 >> 2] | 0;
                n = d;
                l = c[n + 4 >> 2] | 0;
                o = b;
                c[o >> 2] = c[n >> 2];
                c[o + 4 >> 2] = l;
                l = d;
                c[l >> 2] = p;
                c[l + 4 >> 2] = m;
                q = 2
            } else
                q = 1
        } else if (k) {
            m = b;
            l = c[m >> 2] | 0;
            p = c[m + 4 >> 2] | 0;
            m = d;
            o = c[m + 4 >> 2] | 0;
            n = b;
            c[n >> 2] = c[m >> 2];
            c[n + 4 >> 2] = o;
            o = d;
            c[o >> 2] = l;
            c[o + 4 >> 2] = p;
            if (nb[c[g >> 2] & 31](b, a) | 0) {
                p = a;
                o = c[p >> 2] | 0;
                l = c[p + 4 >> 2] | 0;
                p = b;
                n = c[p + 4 >> 2] | 0;
                m = a;
                c[m >> 2] = c[p >> 2];
                c[m + 4 >> 2] = n;
                n = b;
                c[n >> 2] = o;
                c[n + 4 >> 2] = l;
                q = 2
            } else
                q = 1
        } else
            q = 0;
        while (0);
        if (nb[c[g >> 2] & 31](e, d) | 0) {
            k = d;
            j = c[k >> 2] | 0;
            l = c[k + 4 >> 2] | 0;
            k = e;
            n = c[k + 4 >> 2] | 0;
            o = d;
            c[o >> 2] = c[k >> 2];
            c[o + 4 >> 2] = n;
            n = e;
            c[n >> 2] = j;
            c[n +
            4 >> 2] = l;
            l = q + 1 | 0;
            if (nb[c[g >> 2] & 31](d, b) | 0) {
                n = b;
                j = c[n >> 2] | 0;
                o = c[n + 4 >> 2] | 0;
                n = d;
                k = c[n + 4 >> 2] | 0;
                m = b;
                c[m >> 2] = c[n >> 2];
                c[m + 4 >> 2] = k;
                k = d;
                c[k >> 2] = j;
                c[k + 4 >> 2] = o;
                if (nb[c[g >> 2] & 31](b, a) | 0) {
                    o = a;
                    k = c[o >> 2] | 0;
                    j = c[o + 4 >> 2] | 0;
                    o = b;
                    m = c[o + 4 >> 2] | 0;
                    n = a;
                    c[n >> 2] = c[o >> 2];
                    c[n + 4 >> 2] = m;
                    m = b;
                    c[m >> 2] = k;
                    c[m + 4 >> 2] = j;
                    r = q + 3 | 0
                } else
                    r = q + 2 | 0
            } else
                r = l
        } else
            r = q;
        if (!(nb[c[g >> 2] & 31](f, e) | 0)) {
            s = r;
            i = h;
            return s | 0
        }
        q = e;
        l = c[q >> 2] | 0;
        j = c[q + 4 >> 2] | 0;
        q = f;
        m = c[q + 4 >> 2] | 0;
        k = e;
        c[k >> 2] = c[q >> 2];
        c[k + 4 >> 2] = m;
        m = f;
        c[m >> 2] = l;
        c[m + 4 >> 2] = j;
        if (!(nb[c[g >> 2] & 31](e, d) | 0)) {
            s =
            r + 1 | 0;
            i = h;
            return s | 0
        }
        j = d;
        m = c[j >> 2] | 0;
        l = c[j + 4 >> 2] | 0;
        j = e;
        f = c[j + 4 >> 2] | 0;
        k = d;
        c[k >> 2] = c[j >> 2];
        c[k + 4 >> 2] = f;
        f = e;
        c[f >> 2] = m;
        c[f + 4 >> 2] = l;
        if (!(nb[c[g >> 2] & 31](d, b) | 0)) {
            s = r + 2 | 0;
            i = h;
            return s | 0
        }
        l = b;
        f = c[l >> 2] | 0;
        m = c[l + 4 >> 2] | 0;
        l = d;
        e = c[l + 4 >> 2] | 0;
        k = b;
        c[k >> 2] = c[l >> 2];
        c[k + 4 >> 2] = e;
        e = d;
        c[e >> 2] = f;
        c[e + 4 >> 2] = m;
        if (!(nb[c[g >> 2] & 31](b, a) | 0)) {
            s = r + 3 | 0;
            i = h;
            return s | 0
        }
        g = a;
        m = c[g >> 2] | 0;
        e = c[g + 4 >> 2] | 0;
        g = b;
        f = c[g + 4 >> 2] | 0;
        d = a;
        c[d >> 2] = c[g >> 2];
        c[d + 4 >> 2] = f;
        f = b;
        c[f >> 2] = m;
        c[f + 4 >> 2] = e;
        s = r + 4 | 0;
        i = h;
        return s | 0
    }
    function El(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d |
        0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        switch (b - a >> 3 | 0) {
        case 2:
            g = b + -8 | 0;
            if (!(nb[c[d >> 2] & 31](g, a) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            j = a;
            k = c[j >> 2] | 0;
            l = c[j + 4 >> 2] | 0;
            j = g;
            m = c[j + 4 >> 2] | 0;
            n = a;
            c[n >> 2] = c[j >> 2];
            c[n + 4 >> 2] = m;
            m = g;
            c[m >> 2] = k;
            c[m + 4 >> 2] = l;
            h = 1;
            i = e;
            return h | 0;
        case 5:
            Dl(a, a + 8 | 0, a + 16 | 0, a + 24 | 0, b + -8 | 0, d) | 0;
            h = 1;
            i = e;
            return h | 0;
        case 1:
        case 0:
            h = 1;
            i = e;
            return h | 0;
        case 4:
            l = a + 8 | 0;
            m = a + 16 | 0;
            k = b + -8 | 0;
            g = nb[c[d >> 2] & 31](l, a) | 0;
            n = nb[c[d >> 2] & 31](m, l) | 0;
            do if (g) {
                j = a;
                o = c[j >> 2] |
                0;
                p = c[j + 4 >> 2] | 0;
                if (n) {
                    j = m;
                    q = c[j + 4 >> 2] | 0;
                    r = a;
                    c[r >> 2] = c[j >> 2];
                    c[r + 4 >> 2] = q;
                    q = m;
                    c[q >> 2] = o;
                    c[q + 4 >> 2] = p;
                    break
                }
                q = l;
                r = c[q + 4 >> 2] | 0;
                j = a;
                c[j >> 2] = c[q >> 2];
                c[j + 4 >> 2] = r;
                r = l;
                c[r >> 2] = o;
                c[r + 4 >> 2] = p;
                if (nb[c[d >> 2] & 31](m, l) | 0) {
                    p = l;
                    r = c[p >> 2] | 0;
                    o = c[p + 4 >> 2] | 0;
                    p = m;
                    j = c[p + 4 >> 2] | 0;
                    q = l;
                    c[q >> 2] = c[p >> 2];
                    c[q + 4 >> 2] = j;
                    j = m;
                    c[j >> 2] = r;
                    c[j + 4 >> 2] = o
                }
            } else if (n ? (o = l, j = c[o >> 2] | 0, r = c[o + 4 >> 2] | 0, o = m, q = c[o + 4 >> 2] | 0, p = l, c[p >> 2] = c[o >> 2], c[p + 4 >> 2] = q, q = m, c[q >> 2] = j, c[q + 4 >> 2] = r, nb[c[d >> 2] & 31](l, a) | 0) : 0) {
                r = a;
                q = c[r >> 2] | 0;
                j = c[r + 4 >> 2] | 0;
                r = l;
                p = c[r + 4 >> 2] |
                0;
                o = a;
                c[o >> 2] = c[r >> 2];
                c[o + 4 >> 2] = p;
                p = l;
                c[p >> 2] = q;
                c[p + 4 >> 2] = j
            }
            while (0);
            if (!(nb[c[d >> 2] & 31](k, m) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            n = m;
            g = c[n >> 2] | 0;
            j = c[n + 4 >> 2] | 0;
            n = k;
            p = c[n + 4 >> 2] | 0;
            q = m;
            c[q >> 2] = c[n >> 2];
            c[q + 4 >> 2] = p;
            p = k;
            c[p >> 2] = g;
            c[p + 4 >> 2] = j;
            if (!(nb[c[d >> 2] & 31](m, l) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            j = l;
            p = c[j >> 2] | 0;
            g = c[j + 4 >> 2] | 0;
            j = m;
            k = c[j + 4 >> 2] | 0;
            q = l;
            c[q >> 2] = c[j >> 2];
            c[q + 4 >> 2] = k;
            k = m;
            c[k >> 2] = p;
            c[k + 4 >> 2] = g;
            if (!(nb[c[d >> 2] & 31](l, a) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            g = a;
            k = c[g >> 2] | 0;
            p = c[g + 4 >> 2] | 0;
            g = l;
            m = c[g + 4 >> 2] | 0;
            q = a;
            c[q >> 2] = c[g >> 2];
            c[q + 4 >> 2] =
            m;
            m = l;
            c[m >> 2] = k;
            c[m + 4 >> 2] = p;
            h = 1;
            i = e;
            return h | 0;
        case 3:
            p = a + 8 | 0;
            m = b + -8 | 0;
            k = nb[c[d >> 2] & 31](p, a) | 0;
            l = nb[c[d >> 2] & 31](m, p) | 0;
            if (!k) {
                if (!l) {
                    h = 1;
                    i = e;
                    return h | 0
                }
                k = p;
                q = c[k >> 2] | 0;
                g = c[k + 4 >> 2] | 0;
                k = m;
                j = c[k + 4 >> 2] | 0;
                n = p;
                c[n >> 2] = c[k >> 2];
                c[n + 4 >> 2] = j;
                j = m;
                c[j >> 2] = q;
                c[j + 4 >> 2] = g;
                if (!(nb[c[d >> 2] & 31](p, a) | 0)) {
                    h = 1;
                    i = e;
                    return h | 0
                }
                g = a;
                j = c[g >> 2] | 0;
                q = c[g + 4 >> 2] | 0;
                g = p;
                n = c[g + 4 >> 2] | 0;
                k = a;
                c[k >> 2] = c[g >> 2];
                c[k + 4 >> 2] = n;
                n = p;
                c[n >> 2] = j;
                c[n + 4 >> 2] = q;
                h = 1;
                i = e;
                return h | 0
            }
            q = a;
            n = c[q >> 2] | 0;
            j = c[q + 4 >> 2] | 0;
            if (l) {
                l = m;
                q = c[l + 4 >> 2] | 0;
                k = a;
                c[k >> 2] = c[l >>
                2];
                c[k + 4 >> 2] = q;
                q = m;
                c[q >> 2] = n;
                c[q + 4 >> 2] = j;
                h = 1;
                i = e;
                return h | 0
            }
            q = p;
            k = c[q + 4 >> 2] | 0;
            l = a;
            c[l >> 2] = c[q >> 2];
            c[l + 4 >> 2] = k;
            k = p;
            c[k >> 2] = n;
            c[k + 4 >> 2] = j;
            if (!(nb[c[d >> 2] & 31](m, p) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            j = p;
            k = c[j >> 2] | 0;
            n = c[j + 4 >> 2] | 0;
            j = m;
            l = c[j + 4 >> 2] | 0;
            q = p;
            c[q >> 2] = c[j >> 2];
            c[q + 4 >> 2] = l;
            l = m;
            c[l >> 2] = k;
            c[l + 4 >> 2] = n;
            h = 1;
            i = e;
            return h | 0;
        default:
            n = a + 16 | 0;
            l = a + 8 | 0;
            k = nb[c[d >> 2] & 31](l, a) | 0;
            m = nb[c[d >> 2] & 31](n, l) | 0;
            do if (k) {
                q = a;
                j = c[q >> 2] | 0;
                p = c[q + 4 >> 2] | 0;
                if (m) {
                    q = n;
                    g = c[q + 4 >> 2] | 0;
                    o = a;
                    c[o >> 2] = c[q >> 2];
                    c[o + 4 >> 2] = g;
                    g = n;
                    c[g >> 2] = j;
                    c[g + 4 >> 2] =
                    p;
                    break
                }
                g = l;
                o = c[g + 4 >> 2] | 0;
                q = a;
                c[q >> 2] = c[g >> 2];
                c[q + 4 >> 2] = o;
                o = l;
                c[o >> 2] = j;
                c[o + 4 >> 2] = p;
                if (nb[c[d >> 2] & 31](n, l) | 0) {
                    p = l;
                    o = c[p >> 2] | 0;
                    j = c[p + 4 >> 2] | 0;
                    p = n;
                    q = c[p + 4 >> 2] | 0;
                    g = l;
                    c[g >> 2] = c[p >> 2];
                    c[g + 4 >> 2] = q;
                    q = n;
                    c[q >> 2] = o;
                    c[q + 4 >> 2] = j
                }
            } else if (m ? (j = l, q = c[j >> 2] | 0, o = c[j + 4 >> 2] | 0, j = n, g = c[j + 4 >> 2] | 0, p = l, c[p >> 2] = c[j >> 2], c[p + 4 >> 2] = g, g = n, c[g >> 2] = q, c[g + 4 >> 2] = o, nb[c[d >> 2] & 31](l, a) | 0) : 0) {
                o = a;
                g = c[o >> 2] | 0;
                q = c[o + 4 >> 2] | 0;
                o = l;
                p = c[o + 4 >> 2] | 0;
                j = a;
                c[j >> 2] = c[o >> 2];
                c[j + 4 >> 2] = p;
                p = l;
                c[p >> 2] = g;
                c[p + 4 >> 2] = q
            }
            while (0);
            l = a + 24 | 0;
            if ((l | 0) == (b | 0)) {
                h =
                1;
                i = e;
                return h | 0
            } else {
                s = 0;
                t = l;
                u = n
            }
            while (1) {
                if (nb[c[d >> 2] & 31](t, u) | 0) {
                    n = t;
                    l = c[n + 4 >> 2] | 0;
                    m = f;
                    c[m >> 2] = c[n >> 2];
                    c[m + 4 >> 2] = l;
                    l = t;
                    m = u;
                    while (1) {
                        n = m;
                        k = c[n + 4 >> 2] | 0;
                        q = l;
                        c[q >> 2] = c[n >> 2];
                        c[q + 4 >> 2] = k;
                        if ((m | 0) == (a | 0))
                            break;
                        k = m + -8 | 0;
                        if (nb[c[d >> 2] & 31](f, k) | 0) {
                            q = m;
                            m = k;
                            l = q
                        } else
                            break
                    }
                    l = f;
                    q = c[l + 4 >> 2] | 0;
                    k = m;
                    c[k >> 2] = c[l >> 2];
                    c[k + 4 >> 2] = q;
                    q = s + 1 | 0;
                    if ((q | 0) == 8)
                        break;
                    else
                        v = q
                } else
                    v = s;
                q = t + 8 | 0;
                if ((q | 0) == (b | 0)) {
                    h = 1;
                    w = 41;
                    break
                } else {
                    k = t;
                    s = v;
                    t = q;
                    u = k
                }
            }
            if ((w | 0) == 41) {
                i = e;
                return h | 0
            }
            h = (t + 8 | 0) == (b | 0);
            i = e;
            return h | 0
        }
        return 0
    }
    function Fl(a,
    b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        g = a;
        a = b;
        a:
        while (1) {
            b = a;
            h = a + -8 | 0;
            j = g;
            b:
            while (1) {
                k = j;
                l = b - k | 0;
                m = l >> 3;
                switch (m | 0) {
                case 2:
                    n = 4;
                    break a;
                    break;
                case 4:
                    n = 14;
                    break a;
                    break;
                case 5:
                    n = 26;
                    break a;
                    break;
                case 3:
                    n = 6;
                    break a;
                    break;
                case 1:
                case 0:
                    n = 84;
                    break a;
                    break;
                default:
                }
                if ((l | 0) < 248) {
                    n = 28;
                    break a
                }
                o = (m | 0) / 2 | 0;
                p = j + (o << 3) | 0;
                do if ((l | 0) <= 7992) {
                    q = nb[c[d >> 2] &
                    31](p, j) | 0;
                    r = nb[c[d >> 2] & 31](h, p) | 0;
                    if (!q) {
                        if (!r) {
                            s = 0;
                            break
                        }
                        q = p;
                        t = c[q >> 2] | 0;
                        u = c[q + 4 >> 2] | 0;
                        q = h;
                        v = c[q + 4 >> 2] | 0;
                        w = p;
                        c[w >> 2] = c[q >> 2];
                        c[w + 4 >> 2] = v;
                        v = h;
                        c[v >> 2] = t;
                        c[v + 4 >> 2] = u;
                        if (!(nb[c[d >> 2] & 31](p, j) | 0)) {
                            s = 1;
                            break
                        }
                        u = j;
                        v = c[u >> 2] | 0;
                        t = c[u + 4 >> 2] | 0;
                        u = p;
                        w = c[u + 4 >> 2] | 0;
                        q = j;
                        c[q >> 2] = c[u >> 2];
                        c[q + 4 >> 2] = w;
                        w = p;
                        c[w >> 2] = v;
                        c[w + 4 >> 2] = t;
                        s = 2;
                        break
                    }
                    t = j;
                    w = c[t >> 2] | 0;
                    v = c[t + 4 >> 2] | 0;
                    if (r) {
                        r = h;
                        t = c[r + 4 >> 2] | 0;
                        q = j;
                        c[q >> 2] = c[r >> 2];
                        c[q + 4 >> 2] = t;
                        t = h;
                        c[t >> 2] = w;
                        c[t + 4 >> 2] = v;
                        s = 1;
                        break
                    }
                    t = p;
                    q = c[t + 4 >> 2] | 0;
                    r = j;
                    c[r >> 2] = c[t >> 2];
                    c[r + 4 >> 2] = q;
                    q = p;
                    c[q >>
                    2] = w;
                    c[q + 4 >> 2] = v;
                    if (nb[c[d >> 2] & 31](h, p) | 0) {
                        v = p;
                        q = c[v >> 2] | 0;
                        w = c[v + 4 >> 2] | 0;
                        v = h;
                        r = c[v + 4 >> 2] | 0;
                        t = p;
                        c[t >> 2] = c[v >> 2];
                        c[t + 4 >> 2] = r;
                        r = h;
                        c[r >> 2] = q;
                        c[r + 4 >> 2] = w;
                        s = 2
                    } else
                        s = 1
                } else {
                    w = (m | 0) / 4 | 0;
                    s = Gl(j, j + (w << 3) | 0, p, j + (w + o << 3) | 0, h, d) | 0
                }
                while (0);
                do if (nb[c[d >> 2] & 31](j, p) | 0) {
                    x = h;
                    y = s
                } else {
                    o = h;
                    while (1) {
                        o = o + -8 | 0;
                        if ((j | 0) == (o | 0))
                            break;
                        if (nb[c[d >> 2] & 31](o, p) | 0) {
                            n = 67;
                            break
                        }
                    }
                    if ((n | 0) == 67) {
                        n = 0;
                        m = j;
                        l = c[m >> 2] | 0;
                        w = c[m + 4 >> 2] | 0;
                        m = o;
                        r = c[m + 4 >> 2] | 0;
                        q = j;
                        c[q >> 2] = c[m >> 2];
                        c[q + 4 >> 2] = r;
                        r = o;
                        c[r >> 2] = l;
                        c[r + 4 >> 2] = w;
                        x = o;
                        y = s + 1 | 0;
                        break
                    }
                    w = j + 8 | 0;
                    if (nb[c[d >> 2] & 31](j, h) | 0)
                        z = w;
                    else {
                        if ((w | 0) == (h | 0)) {
                            n = 84;
                            break a
                        } else
                            A = w;
                        while (1) {
                            B = A + 8 | 0;
                            if (nb[c[d >> 2] & 31](j, A) | 0)
                                break;
                            if ((B | 0) == (h | 0)) {
                                n = 84;
                                break a
                            } else
                                A = B
                        }
                        o = A;
                        w = c[o >> 2] | 0;
                        r = c[o + 4 >> 2] | 0;
                        o = h;
                        l = c[o + 4 >> 2] | 0;
                        q = A;
                        c[q >> 2] = c[o >> 2];
                        c[q + 4 >> 2] = l;
                        l = h;
                        c[l >> 2] = w;
                        c[l + 4 >> 2] = r;
                        z = B
                    }
                    if ((z | 0) == (h | 0)) {
                        n = 84;
                        break a
                    } else {
                        C = z;
                        D = h
                    }
                    while (1) {
                        r = C;
                        while (1) {
                            E = r + 8 | 0;
                            if (nb[c[d >> 2] & 31](j, r) | 0) {
                                F = D;
                                break
                            } else
                                r = E
                        }
                        do F = F + -8 | 0;
                        while (nb[c[d >> 2] & 31](j, F) | 0);
                        if (!(r >>> 0 < F >>> 0)) {
                            j = r;
                            continue b
                        }
                        l = r;
                        w = c[l >> 2] | 0;
                        q = c[l + 4 >> 2] | 0;
                        l = F;
                        o = c[l +
                        4 >> 2] | 0;
                        m = r;
                        c[m >> 2] = c[l >> 2];
                        c[m + 4 >> 2] = o;
                        o = F;
                        c[o >> 2] = w;
                        c[o + 4 >> 2] = q;
                        C = E;
                        D = F
                    }
                }
                while (0);
                q = j + 8 | 0;
                c:
                do if (q >>> 0 < x >>> 0) {
                    o = q;
                    w = x;
                    m = p;
                    l = y;
                    while (1) {
                        t = o;
                        while (1) {
                            G = t + 8 | 0;
                            if (nb[c[d >> 2] & 31](t, m) | 0)
                                t = G;
                            else {
                                H = w;
                                break
                            }
                        }
                        do H = H + -8 | 0;
                        while (!(nb[c[d >> 2] & 31](H, m) | 0));
                        if (t >>> 0 > H >>> 0) {
                            I = t;
                            J = m;
                            K = l;
                            break c
                        }
                        r = t;
                        v = c[r >> 2] | 0;
                        u = c[r + 4 >> 2] | 0;
                        r = H;
                        L = c[r + 4 >> 2] | 0;
                        M = t;
                        c[M >> 2] = c[r >> 2];
                        c[M + 4 >> 2] = L;
                        L = H;
                        c[L >> 2] = v;
                        c[L + 4 >> 2] = u;
                        o = G;
                        w = H;
                        m = (m | 0) == (t | 0) ? H : m;
                        l = l + 1 | 0
                    }
                } else {
                    I = q;
                    J = p;
                    K = y
                }
                while (0);
                if ((I | 0) != (J | 0) ? nb[c[d >> 2] & 31](J, I) | 0 : 0) {
                    p = I;
                    q = c[p >>
                    2] | 0;
                    l = c[p + 4 >> 2] | 0;
                    p = J;
                    m = c[p + 4 >> 2] | 0;
                    w = I;
                    c[w >> 2] = c[p >> 2];
                    c[w + 4 >> 2] = m;
                    m = J;
                    c[m >> 2] = q;
                    c[m + 4 >> 2] = l;
                    N = K + 1 | 0
                } else
                    N = K;
                if ((N | 0) == 0) {
                    O = Hl(j, I, d) | 0;
                    l = I + 8 | 0;
                    if (Hl(l, a, d) | 0) {
                        n = 79;
                        break
                    }
                    if (O) {
                        j = l;
                        continue
                    }
                }
                l = I;
                if ((l - k | 0) >= (b - l | 0)) {
                    n = 83;
                    break
                }
                Fl(j, I, d);
                j = I + 8 | 0
            }
            if ((n | 0) == 79) {
                n = 0;
                if (O) {
                    n = 84;
                    break
                } else {
                    g = j;
                    a = I;
                    continue
                }
            } else if ((n | 0) == 83) {
                n = 0;
                Fl(I + 8 | 0, a, d);
                g = j;
                a = I;
                continue
            }
        }
        if ((n | 0) == 4) {
            if (!(nb[c[d >> 2] & 31](h, j) | 0)) {
                i = e;
                return
            }
            I = j;
            g = c[I >> 2] | 0;
            O = c[I + 4 >> 2] | 0;
            I = h;
            N = c[I + 4 >> 2] | 0;
            K = j;
            c[K >> 2] = c[I >> 2];
            c[K + 4 >> 2] = N;
            N = h;
            c[N >>
            2] = g;
            c[N + 4 >> 2] = O;
            i = e;
            return
        } else if ((n | 0) == 6) {
            O = j + 8 | 0;
            N = nb[c[d >> 2] & 31](O, j) | 0;
            g = nb[c[d >> 2] & 31](h, O) | 0;
            if (!N) {
                if (!g) {
                    i = e;
                    return
                }
                N = O;
                K = c[N >> 2] | 0;
                I = c[N + 4 >> 2] | 0;
                N = h;
                J = c[N + 4 >> 2] | 0;
                y = O;
                c[y >> 2] = c[N >> 2];
                c[y + 4 >> 2] = J;
                J = h;
                c[J >> 2] = K;
                c[J + 4 >> 2] = I;
                if (!(nb[c[d >> 2] & 31](O, j) | 0)) {
                    i = e;
                    return
                }
                I = j;
                J = c[I >> 2] | 0;
                K = c[I + 4 >> 2] | 0;
                I = O;
                y = c[I + 4 >> 2] | 0;
                N = j;
                c[N >> 2] = c[I >> 2];
                c[N + 4 >> 2] = y;
                y = O;
                c[y >> 2] = J;
                c[y + 4 >> 2] = K;
                i = e;
                return
            }
            K = j;
            y = c[K >> 2] | 0;
            J = c[K + 4 >> 2] | 0;
            if (g) {
                g = h;
                K = c[g + 4 >> 2] | 0;
                N = j;
                c[N >> 2] = c[g >> 2];
                c[N + 4 >> 2] = K;
                K = h;
                c[K >> 2] = y;
                c[K + 4 >> 2] = J;
                i = e;
                return
            }
            K = O;
            N = c[K + 4 >> 2] | 0;
            g = j;
            c[g >> 2] = c[K >> 2];
            c[g + 4 >> 2] = N;
            N = O;
            c[N >> 2] = y;
            c[N + 4 >> 2] = J;
            if (!(nb[c[d >> 2] & 31](h, O) | 0)) {
                i = e;
                return
            }
            J = O;
            N = c[J >> 2] | 0;
            y = c[J + 4 >> 2] | 0;
            J = h;
            g = c[J + 4 >> 2] | 0;
            K = O;
            c[K >> 2] = c[J >> 2];
            c[K + 4 >> 2] = g;
            g = h;
            c[g >> 2] = N;
            c[g + 4 >> 2] = y;
            i = e;
            return
        } else if ((n | 0) == 14) {
            y = j + 8 | 0;
            g = j + 16 | 0;
            N = nb[c[d >> 2] & 31](y, j) | 0;
            K = nb[c[d >> 2] & 31](g, y) | 0;
            do if (N) {
                J = j;
                O = c[J >> 2] | 0;
                I = c[J + 4 >> 2] | 0;
                if (K) {
                    J = g;
                    H = c[J + 4 >> 2] | 0;
                    G = j;
                    c[G >> 2] = c[J >> 2];
                    c[G + 4 >> 2] = H;
                    H = g;
                    c[H >> 2] = O;
                    c[H + 4 >> 2] = I;
                    break
                }
                H = y;
                G = c[H + 4 >> 2] | 0;
                J = j;
                c[J >> 2] = c[H >> 2];
                c[J + 4 >> 2] =
                G;
                G = y;
                c[G >> 2] = O;
                c[G + 4 >> 2] = I;
                if (nb[c[d >> 2] & 31](g, y) | 0) {
                    I = y;
                    G = c[I >> 2] | 0;
                    O = c[I + 4 >> 2] | 0;
                    I = g;
                    J = c[I + 4 >> 2] | 0;
                    H = y;
                    c[H >> 2] = c[I >> 2];
                    c[H + 4 >> 2] = J;
                    J = g;
                    c[J >> 2] = G;
                    c[J + 4 >> 2] = O
                }
            } else if (K ? (O = y, J = c[O >> 2] | 0, G = c[O + 4 >> 2] | 0, O = g, H = c[O + 4 >> 2] | 0, I = y, c[I >> 2] = c[O >> 2], c[I + 4 >> 2] = H, H = g, c[H >> 2] = J, c[H + 4 >> 2] = G, nb[c[d >> 2] & 31](y, j) | 0) : 0) {
                G = j;
                H = c[G >> 2] | 0;
                J = c[G + 4 >> 2] | 0;
                G = y;
                I = c[G + 4 >> 2] | 0;
                O = j;
                c[O >> 2] = c[G >> 2];
                c[O + 4 >> 2] = I;
                I = y;
                c[I >> 2] = H;
                c[I + 4 >> 2] = J
            }
            while (0);
            if (!(nb[c[d >> 2] & 31](h, g) | 0)) {
                i = e;
                return
            }
            K = g;
            N = c[K >> 2] | 0;
            J = c[K + 4 >> 2] | 0;
            K = h;
            I = c[K + 4 >>
            2] | 0;
            H = g;
            c[H >> 2] = c[K >> 2];
            c[H + 4 >> 2] = I;
            I = h;
            c[I >> 2] = N;
            c[I + 4 >> 2] = J;
            if (!(nb[c[d >> 2] & 31](g, y) | 0)) {
                i = e;
                return
            }
            J = y;
            I = c[J >> 2] | 0;
            N = c[J + 4 >> 2] | 0;
            J = g;
            H = c[J + 4 >> 2] | 0;
            K = y;
            c[K >> 2] = c[J >> 2];
            c[K + 4 >> 2] = H;
            H = g;
            c[H >> 2] = I;
            c[H + 4 >> 2] = N;
            if (!(nb[c[d >> 2] & 31](y, j) | 0)) {
                i = e;
                return
            }
            N = j;
            H = c[N >> 2] | 0;
            I = c[N + 4 >> 2] | 0;
            N = y;
            g = c[N + 4 >> 2] | 0;
            K = j;
            c[K >> 2] = c[N >> 2];
            c[K + 4 >> 2] = g;
            g = y;
            c[g >> 2] = H;
            c[g + 4 >> 2] = I;
            i = e;
            return
        } else if ((n | 0) == 26) {
            Gl(j, j + 8 | 0, j + 16 | 0, j + 24 | 0, h, d) | 0;
            i = e;
            return
        } else if ((n | 0) == 28) {
            h = j + 16 | 0;
            I = j + 8 | 0;
            g = nb[c[d >> 2] & 31](I, j) | 0;
            H = nb[c[d >> 2] &
            31](h, I) | 0;
            do if (g) {
                y = j;
                K = c[y >> 2] | 0;
                N = c[y + 4 >> 2] | 0;
                if (H) {
                    y = h;
                    J = c[y + 4 >> 2] | 0;
                    O = j;
                    c[O >> 2] = c[y >> 2];
                    c[O + 4 >> 2] = J;
                    J = h;
                    c[J >> 2] = K;
                    c[J + 4 >> 2] = N;
                    break
                }
                J = I;
                O = c[J + 4 >> 2] | 0;
                y = j;
                c[y >> 2] = c[J >> 2];
                c[y + 4 >> 2] = O;
                O = I;
                c[O >> 2] = K;
                c[O + 4 >> 2] = N;
                if (nb[c[d >> 2] & 31](h, I) | 0) {
                    N = I;
                    O = c[N >> 2] | 0;
                    K = c[N + 4 >> 2] | 0;
                    N = h;
                    y = c[N + 4 >> 2] | 0;
                    J = I;
                    c[J >> 2] = c[N >> 2];
                    c[J + 4 >> 2] = y;
                    y = h;
                    c[y >> 2] = O;
                    c[y + 4 >> 2] = K
                }
            } else if (H ? (K = I, y = c[K >> 2] | 0, O = c[K + 4 >> 2] | 0, K = h, J = c[K + 4 >> 2] | 0, N = I, c[N >> 2] = c[K >> 2], c[N + 4 >> 2] = J, J = h, c[J >> 2] = y, c[J + 4 >> 2] = O, nb[c[d >> 2] & 31](I, j) | 0) : 0) {
                O = j;
                J = c[O >>
                2] | 0;
                y = c[O + 4 >> 2] | 0;
                O = I;
                N = c[O + 4 >> 2] | 0;
                K = j;
                c[K >> 2] = c[O >> 2];
                c[K + 4 >> 2] = N;
                N = I;
                c[N >> 2] = J;
                c[N + 4 >> 2] = y
            }
            while (0);
            I = j + 24 | 0;
            if ((I | 0) == (a | 0)) {
                i = e;
                return
            } else {
                P = I;
                Q = h
            }
            while (1) {
                if (nb[c[d >> 2] & 31](P, Q) | 0) {
                    h = P;
                    I = c[h + 4 >> 2] | 0;
                    H = f;
                    c[H >> 2] = c[h >> 2];
                    c[H + 4 >> 2] = I;
                    I = P;
                    H = Q;
                    while (1) {
                        h = H;
                        g = c[h + 4 >> 2] | 0;
                        y = I;
                        c[y >> 2] = c[h >> 2];
                        c[y + 4 >> 2] = g;
                        if ((H | 0) == (j | 0))
                            break;
                        g = H + -8 | 0;
                        if (nb[c[d >> 2] & 31](f, g) | 0) {
                            y = H;
                            H = g;
                            I = y
                        } else
                            break
                    }
                    I = f;
                    y = c[I + 4 >> 2] | 0;
                    g = H;
                    c[g >> 2] = c[I >> 2];
                    c[g + 4 >> 2] = y
                }
                y = P + 8 | 0;
                if ((y | 0) == (a | 0))
                    break;
                else {
                    g = P;
                    P = y;
                    Q = g
                }
            }
            i = e;
            return
        } else if ((n |
        0) == 84) {
            i = e;
            return
        }
    }
    function Gl(a, b, d, e, f, g) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0;
        h = i;
        j = nb[c[g >> 2] & 31](b, a) | 0;
        k = nb[c[g >> 2] & 31](d, b) | 0;
        do if (j) {
            l = a;
            m = c[l >> 2] | 0;
            n = c[l + 4 >> 2] | 0;
            if (k) {
                l = d;
                o = c[l + 4 >> 2] | 0;
                p = a;
                c[p >> 2] = c[l >> 2];
                c[p + 4 >> 2] = o;
                o = d;
                c[o >> 2] = m;
                c[o + 4 >> 2] = n;
                q = 1;
                break
            }
            o = b;
            p = c[o + 4 >> 2] | 0;
            l = a;
            c[l >> 2] = c[o >> 2];
            c[l + 4 >> 2] = p;
            p = b;
            c[p >> 2] = m;
            c[p + 4 >> 2] = n;
            if (nb[c[g >> 2] & 31](d, b) | 0) {
                n = b;
                p = c[n >> 2] | 0;
                m = c[n + 4 >> 2] | 0;
                n = d;
                l = c[n + 4 >> 2] | 0;
                o = b;
                c[o >> 2] = c[n >> 2];
                c[o + 4 >> 2] = l;
                l = d;
                c[l >>
                2] = p;
                c[l + 4 >> 2] = m;
                q = 2
            } else
                q = 1
        } else if (k) {
            m = b;
            l = c[m >> 2] | 0;
            p = c[m + 4 >> 2] | 0;
            m = d;
            o = c[m + 4 >> 2] | 0;
            n = b;
            c[n >> 2] = c[m >> 2];
            c[n + 4 >> 2] = o;
            o = d;
            c[o >> 2] = l;
            c[o + 4 >> 2] = p;
            if (nb[c[g >> 2] & 31](b, a) | 0) {
                p = a;
                o = c[p >> 2] | 0;
                l = c[p + 4 >> 2] | 0;
                p = b;
                n = c[p + 4 >> 2] | 0;
                m = a;
                c[m >> 2] = c[p >> 2];
                c[m + 4 >> 2] = n;
                n = b;
                c[n >> 2] = o;
                c[n + 4 >> 2] = l;
                q = 2
            } else
                q = 1
        } else
            q = 0;
        while (0);
        if (nb[c[g >> 2] & 31](e, d) | 0) {
            k = d;
            j = c[k >> 2] | 0;
            l = c[k + 4 >> 2] | 0;
            k = e;
            n = c[k + 4 >> 2] | 0;
            o = d;
            c[o >> 2] = c[k >> 2];
            c[o + 4 >> 2] = n;
            n = e;
            c[n >> 2] = j;
            c[n + 4 >> 2] = l;
            l = q + 1 | 0;
            if (nb[c[g >> 2] & 31](d, b) | 0) {
                n = b;
                j = c[n >> 2] | 0;
                o = c[n + 4 >>
                2] | 0;
                n = d;
                k = c[n + 4 >> 2] | 0;
                m = b;
                c[m >> 2] = c[n >> 2];
                c[m + 4 >> 2] = k;
                k = d;
                c[k >> 2] = j;
                c[k + 4 >> 2] = o;
                if (nb[c[g >> 2] & 31](b, a) | 0) {
                    o = a;
                    k = c[o >> 2] | 0;
                    j = c[o + 4 >> 2] | 0;
                    o = b;
                    m = c[o + 4 >> 2] | 0;
                    n = a;
                    c[n >> 2] = c[o >> 2];
                    c[n + 4 >> 2] = m;
                    m = b;
                    c[m >> 2] = k;
                    c[m + 4 >> 2] = j;
                    r = q + 3 | 0
                } else
                    r = q + 2 | 0
            } else
                r = l
        } else
            r = q;
        if (!(nb[c[g >> 2] & 31](f, e) | 0)) {
            s = r;
            i = h;
            return s | 0
        }
        q = e;
        l = c[q >> 2] | 0;
        j = c[q + 4 >> 2] | 0;
        q = f;
        m = c[q + 4 >> 2] | 0;
        k = e;
        c[k >> 2] = c[q >> 2];
        c[k + 4 >> 2] = m;
        m = f;
        c[m >> 2] = l;
        c[m + 4 >> 2] = j;
        if (!(nb[c[g >> 2] & 31](e, d) | 0)) {
            s = r + 1 | 0;
            i = h;
            return s | 0
        }
        j = d;
        m = c[j >> 2] | 0;
        l = c[j + 4 >> 2] | 0;
        j = e;
        f = c[j + 4 >>
        2] | 0;
        k = d;
        c[k >> 2] = c[j >> 2];
        c[k + 4 >> 2] = f;
        f = e;
        c[f >> 2] = m;
        c[f + 4 >> 2] = l;
        if (!(nb[c[g >> 2] & 31](d, b) | 0)) {
            s = r + 2 | 0;
            i = h;
            return s | 0
        }
        l = b;
        f = c[l >> 2] | 0;
        m = c[l + 4 >> 2] | 0;
        l = d;
        e = c[l + 4 >> 2] | 0;
        k = b;
        c[k >> 2] = c[l >> 2];
        c[k + 4 >> 2] = e;
        e = d;
        c[e >> 2] = f;
        c[e + 4 >> 2] = m;
        if (!(nb[c[g >> 2] & 31](b, a) | 0)) {
            s = r + 3 | 0;
            i = h;
            return s | 0
        }
        g = a;
        m = c[g >> 2] | 0;
        e = c[g + 4 >> 2] | 0;
        g = b;
        f = c[g + 4 >> 2] | 0;
        d = a;
        c[d >> 2] = c[g >> 2];
        c[d + 4 >> 2] = f;
        f = b;
        c[f >> 2] = m;
        c[f + 4 >> 2] = e;
        s = r + 4 | 0;
        i = h;
        return s | 0
    }
    function Hl(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t =
            0,
            u = 0,
            v = 0,
            w = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        switch (b - a >> 3 | 0) {
        case 3:
            g = a + 8 | 0;
            h = b + -8 | 0;
            j = nb[c[d >> 2] & 31](g, a) | 0;
            k = nb[c[d >> 2] & 31](h, g) | 0;
            if (!j) {
                if (!k) {
                    l = 1;
                    i = e;
                    return l | 0
                }
                j = g;
                m = c[j >> 2] | 0;
                n = c[j + 4 >> 2] | 0;
                j = h;
                o = c[j + 4 >> 2] | 0;
                p = g;
                c[p >> 2] = c[j >> 2];
                c[p + 4 >> 2] = o;
                o = h;
                c[o >> 2] = m;
                c[o + 4 >> 2] = n;
                if (!(nb[c[d >> 2] & 31](g, a) | 0)) {
                    l = 1;
                    i = e;
                    return l | 0
                }
                n = a;
                o = c[n >> 2] | 0;
                m = c[n + 4 >> 2] | 0;
                n = g;
                p = c[n + 4 >> 2] | 0;
                j = a;
                c[j >> 2] = c[n >> 2];
                c[j + 4 >> 2] = p;
                p = g;
                c[p >> 2] = o;
                c[p + 4 >> 2] = m;
                l = 1;
                i = e;
                return l | 0
            }
            m = a;
            p = c[m >> 2] | 0;
            o = c[m + 4 >> 2] | 0;
            if (k) {
                k = h;
                m = c[k + 4 >> 2] | 0;
                j = a;
                c[j >> 2] = c[k >>
                2];
                c[j + 4 >> 2] = m;
                m = h;
                c[m >> 2] = p;
                c[m + 4 >> 2] = o;
                l = 1;
                i = e;
                return l | 0
            }
            m = g;
            j = c[m + 4 >> 2] | 0;
            k = a;
            c[k >> 2] = c[m >> 2];
            c[k + 4 >> 2] = j;
            j = g;
            c[j >> 2] = p;
            c[j + 4 >> 2] = o;
            if (!(nb[c[d >> 2] & 31](h, g) | 0)) {
                l = 1;
                i = e;
                return l | 0
            }
            o = g;
            j = c[o >> 2] | 0;
            p = c[o + 4 >> 2] | 0;
            o = h;
            k = c[o + 4 >> 2] | 0;
            m = g;
            c[m >> 2] = c[o >> 2];
            c[m + 4 >> 2] = k;
            k = h;
            c[k >> 2] = j;
            c[k + 4 >> 2] = p;
            l = 1;
            i = e;
            return l | 0;
        case 4:
            p = a + 8 | 0;
            k = a + 16 | 0;
            j = b + -8 | 0;
            h = nb[c[d >> 2] & 31](p, a) | 0;
            m = nb[c[d >> 2] & 31](k, p) | 0;
            do if (h) {
                o = a;
                g = c[o >> 2] | 0;
                n = c[o + 4 >> 2] | 0;
                if (m) {
                    o = k;
                    q = c[o + 4 >> 2] | 0;
                    r = a;
                    c[r >> 2] = c[o >> 2];
                    c[r + 4 >> 2] = q;
                    q = k;
                    c[q >> 2] = g;
                    c[q +
                    4 >> 2] = n;
                    break
                }
                q = p;
                r = c[q + 4 >> 2] | 0;
                o = a;
                c[o >> 2] = c[q >> 2];
                c[o + 4 >> 2] = r;
                r = p;
                c[r >> 2] = g;
                c[r + 4 >> 2] = n;
                if (nb[c[d >> 2] & 31](k, p) | 0) {
                    n = p;
                    r = c[n >> 2] | 0;
                    g = c[n + 4 >> 2] | 0;
                    n = k;
                    o = c[n + 4 >> 2] | 0;
                    q = p;
                    c[q >> 2] = c[n >> 2];
                    c[q + 4 >> 2] = o;
                    o = k;
                    c[o >> 2] = r;
                    c[o + 4 >> 2] = g
                }
            } else if (m ? (g = p, o = c[g >> 2] | 0, r = c[g + 4 >> 2] | 0, g = k, q = c[g + 4 >> 2] | 0, n = p, c[n >> 2] = c[g >> 2], c[n + 4 >> 2] = q, q = k, c[q >> 2] = o, c[q + 4 >> 2] = r, nb[c[d >> 2] & 31](p, a) | 0) : 0) {
                r = a;
                q = c[r >> 2] | 0;
                o = c[r + 4 >> 2] | 0;
                r = p;
                n = c[r + 4 >> 2] | 0;
                g = a;
                c[g >> 2] = c[r >> 2];
                c[g + 4 >> 2] = n;
                n = p;
                c[n >> 2] = q;
                c[n + 4 >> 2] = o
            }
            while (0);
            if (!(nb[c[d >> 2] & 31](j,
            k) | 0)) {
                l = 1;
                i = e;
                return l | 0
            }
            m = k;
            h = c[m >> 2] | 0;
            o = c[m + 4 >> 2] | 0;
            m = j;
            n = c[m + 4 >> 2] | 0;
            q = k;
            c[q >> 2] = c[m >> 2];
            c[q + 4 >> 2] = n;
            n = j;
            c[n >> 2] = h;
            c[n + 4 >> 2] = o;
            if (!(nb[c[d >> 2] & 31](k, p) | 0)) {
                l = 1;
                i = e;
                return l | 0
            }
            o = p;
            n = c[o >> 2] | 0;
            h = c[o + 4 >> 2] | 0;
            o = k;
            j = c[o + 4 >> 2] | 0;
            q = p;
            c[q >> 2] = c[o >> 2];
            c[q + 4 >> 2] = j;
            j = k;
            c[j >> 2] = n;
            c[j + 4 >> 2] = h;
            if (!(nb[c[d >> 2] & 31](p, a) | 0)) {
                l = 1;
                i = e;
                return l | 0
            }
            h = a;
            j = c[h >> 2] | 0;
            n = c[h + 4 >> 2] | 0;
            h = p;
            k = c[h + 4 >> 2] | 0;
            q = a;
            c[q >> 2] = c[h >> 2];
            c[q + 4 >> 2] = k;
            k = p;
            c[k >> 2] = j;
            c[k + 4 >> 2] = n;
            l = 1;
            i = e;
            return l | 0;
        case 1:
        case 0:
            l = 1;
            i = e;
            return l | 0;
        case 5:
            Gl(a,
            a + 8 | 0, a + 16 | 0, a + 24 | 0, b + -8 | 0, d) | 0;
            l = 1;
            i = e;
            return l | 0;
        case 2:
            n = b + -8 | 0;
            if (!(nb[c[d >> 2] & 31](n, a) | 0)) {
                l = 1;
                i = e;
                return l | 0
            }
            k = a;
            j = c[k >> 2] | 0;
            p = c[k + 4 >> 2] | 0;
            k = n;
            q = c[k + 4 >> 2] | 0;
            h = a;
            c[h >> 2] = c[k >> 2];
            c[h + 4 >> 2] = q;
            q = n;
            c[q >> 2] = j;
            c[q + 4 >> 2] = p;
            l = 1;
            i = e;
            return l | 0;
        default:
            p = a + 16 | 0;
            q = a + 8 | 0;
            j = nb[c[d >> 2] & 31](q, a) | 0;
            n = nb[c[d >> 2] & 31](p, q) | 0;
            do if (j) {
                h = a;
                k = c[h >> 2] | 0;
                o = c[h + 4 >> 2] | 0;
                if (n) {
                    h = p;
                    m = c[h + 4 >> 2] | 0;
                    g = a;
                    c[g >> 2] = c[h >> 2];
                    c[g + 4 >> 2] = m;
                    m = p;
                    c[m >> 2] = k;
                    c[m + 4 >> 2] = o;
                    break
                }
                m = q;
                g = c[m + 4 >> 2] | 0;
                h = a;
                c[h >> 2] = c[m >> 2];
                c[h + 4 >> 2] = g;
                g = q;
                c[g >> 2] =
                k;
                c[g + 4 >> 2] = o;
                if (nb[c[d >> 2] & 31](p, q) | 0) {
                    o = q;
                    g = c[o >> 2] | 0;
                    k = c[o + 4 >> 2] | 0;
                    o = p;
                    h = c[o + 4 >> 2] | 0;
                    m = q;
                    c[m >> 2] = c[o >> 2];
                    c[m + 4 >> 2] = h;
                    h = p;
                    c[h >> 2] = g;
                    c[h + 4 >> 2] = k
                }
            } else if (n ? (k = q, h = c[k >> 2] | 0, g = c[k + 4 >> 2] | 0, k = p, m = c[k + 4 >> 2] | 0, o = q, c[o >> 2] = c[k >> 2], c[o + 4 >> 2] = m, m = p, c[m >> 2] = h, c[m + 4 >> 2] = g, nb[c[d >> 2] & 31](q, a) | 0) : 0) {
                g = a;
                m = c[g >> 2] | 0;
                h = c[g + 4 >> 2] | 0;
                g = q;
                o = c[g + 4 >> 2] | 0;
                k = a;
                c[k >> 2] = c[g >> 2];
                c[k + 4 >> 2] = o;
                o = q;
                c[o >> 2] = m;
                c[o + 4 >> 2] = h
            }
            while (0);
            q = a + 24 | 0;
            if ((q | 0) == (b | 0)) {
                l = 1;
                i = e;
                return l | 0
            } else {
                s = 0;
                t = q;
                u = p
            }
            while (1) {
                if (nb[c[d >> 2] & 31](t, u) | 0) {
                    p =
                    t;
                    q = c[p + 4 >> 2] | 0;
                    n = f;
                    c[n >> 2] = c[p >> 2];
                    c[n + 4 >> 2] = q;
                    q = t;
                    n = u;
                    while (1) {
                        p = n;
                        j = c[p + 4 >> 2] | 0;
                        h = q;
                        c[h >> 2] = c[p >> 2];
                        c[h + 4 >> 2] = j;
                        if ((n | 0) == (a | 0))
                            break;
                        j = n + -8 | 0;
                        if (nb[c[d >> 2] & 31](f, j) | 0) {
                            h = n;
                            n = j;
                            q = h
                        } else
                            break
                    }
                    q = f;
                    h = c[q + 4 >> 2] | 0;
                    j = n;
                    c[j >> 2] = c[q >> 2];
                    c[j + 4 >> 2] = h;
                    h = s + 1 | 0;
                    if ((h | 0) == 8)
                        break;
                    else
                        v = h
                } else
                    v = s;
                h = t + 8 | 0;
                if ((h | 0) == (b | 0)) {
                    l = 1;
                    w = 41;
                    break
                } else {
                    j = t;
                    s = v;
                    t = h;
                    u = j
                }
            }
            if ((w | 0) == 41) {
                i = e;
                return l | 0
            }
            l = (t + 8 | 0) == (b | 0);
            i = e;
            return l | 0
        }
        return 0
    }
    function Il(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0;
        e = i;
        f = a;
        a = b;
        a:
        while (1) {
            b = a;
            g = a + -8 | 0;
            h = a + -4 | 0;
            j = f;
            b:
            while (1) {
                k = j;
                l = b - k | 0;
                m = l >> 3;
                switch (m | 0) {
                case 2:
                    n = 4;
                    break a;
                    break;
                case 4:
                    n = 14;
                    break a;
                    break;
                case 3:
                    n = 6;
                    break a;
                    break;
                case 5:
                    n = 15;
                    break a;
                    break;
                case 1:
                case 0:
                    n = 85;
                    break a;
                    break;
                default:
                }
                if ((l | 0) < 248) {
                    n = 21;
                    break a
                }
                o = (m | 0) / 2 | 0;
                p = j + (o << 3) | 0;
                do if ((l | 0) > 7992) {
                    q = (m | 0) / 4 | 0;
                    r = j + (q << 3) | 0;
                    s = q + o | 0;
                    t = j + (s << 3) | 0;
                    u = Jl(j, r, p, t, 0) | 0;
                    v = j + (s <<
                    3) + 4 | 0;
                    if (!((c[h >> 2] | 0) >>> 0 < (c[v >> 2] | 0) >>> 0)) {
                        w = j + (o << 3) + 4 | 0;
                        x = u;
                        break
                    }
                    s = t;
                    y = c[s >> 2] | 0;
                    z = c[s + 4 >> 2] | 0;
                    s = g;
                    A = c[s + 4 >> 2] | 0;
                    B = t;
                    c[B >> 2] = c[s >> 2];
                    c[B + 4 >> 2] = A;
                    A = g;
                    c[A >> 2] = y;
                    c[A + 4 >> 2] = z;
                    z = j + (o << 3) + 4 | 0;
                    if (!((c[v >> 2] | 0) >>> 0 < (c[z >> 2] | 0) >>> 0)) {
                        w = z;
                        x = u + 1 | 0;
                        break
                    }
                    v = p;
                    A = c[v >> 2] | 0;
                    y = c[v + 4 >> 2] | 0;
                    v = t;
                    B = c[v + 4 >> 2] | 0;
                    s = p;
                    c[s >> 2] = c[v >> 2];
                    c[s + 4 >> 2] = B;
                    B = t;
                    c[B >> 2] = A;
                    c[B + 4 >> 2] = y;
                    y = j + (q << 3) + 4 | 0;
                    if (!((c[z >> 2] | 0) >>> 0 < (c[y >> 2] | 0) >>> 0)) {
                        w = z;
                        x = u + 2 | 0;
                        break
                    }
                    q = r;
                    B = c[q >> 2] | 0;
                    A = c[q + 4 >> 2] | 0;
                    q = p;
                    t = c[q + 4 >> 2] | 0;
                    s = r;
                    c[s >> 2] = c[q >> 2];
                    c[s + 4 >>
                    2] = t;
                    t = p;
                    c[t >> 2] = B;
                    c[t + 4 >> 2] = A;
                    if ((c[y >> 2] | 0) >>> 0 < (c[j + 4 >> 2] | 0) >>> 0) {
                        y = j;
                        A = c[y >> 2] | 0;
                        t = c[y + 4 >> 2] | 0;
                        y = r;
                        B = c[y + 4 >> 2] | 0;
                        s = j;
                        c[s >> 2] = c[y >> 2];
                        c[s + 4 >> 2] = B;
                        B = r;
                        c[B >> 2] = A;
                        c[B + 4 >> 2] = t;
                        w = z;
                        x = u + 4 | 0;
                        break
                    } else {
                        w = z;
                        x = u + 3 | 0;
                        break
                    }
                } else {
                    u = j + (o << 3) + 4 | 0;
                    z = c[u >> 2] | 0;
                    t = j + 4 | 0;
                    B = (c[h >> 2] | 0) >>> 0 < z >>> 0;
                    if (!(z >>> 0 < (c[t >> 2] | 0) >>> 0)) {
                        if (!B) {
                            w = u;
                            x = 0;
                            break
                        }
                        z = p;
                        A = c[z >> 2] | 0;
                        r = c[z + 4 >> 2] | 0;
                        z = g;
                        s = c[z + 4 >> 2] | 0;
                        y = p;
                        c[y >> 2] = c[z >> 2];
                        c[y + 4 >> 2] = s;
                        s = g;
                        c[s >> 2] = A;
                        c[s + 4 >> 2] = r;
                        if (!((c[u >> 2] | 0) >>> 0 < (c[t >> 2] | 0) >>> 0)) {
                            w = u;
                            x = 1;
                            break
                        }
                        t = j;
                        r = c[t >>
                        2] | 0;
                        s = c[t + 4 >> 2] | 0;
                        t = p;
                        A = c[t + 4 >> 2] | 0;
                        y = j;
                        c[y >> 2] = c[t >> 2];
                        c[y + 4 >> 2] = A;
                        A = p;
                        c[A >> 2] = r;
                        c[A + 4 >> 2] = s;
                        w = u;
                        x = 2;
                        break
                    }
                    s = j;
                    A = c[s >> 2] | 0;
                    r = c[s + 4 >> 2] | 0;
                    if (B) {
                        B = g;
                        s = c[B + 4 >> 2] | 0;
                        y = j;
                        c[y >> 2] = c[B >> 2];
                        c[y + 4 >> 2] = s;
                        s = g;
                        c[s >> 2] = A;
                        c[s + 4 >> 2] = r;
                        w = u;
                        x = 1;
                        break
                    }
                    s = p;
                    y = c[s + 4 >> 2] | 0;
                    B = j;
                    c[B >> 2] = c[s >> 2];
                    c[B + 4 >> 2] = y;
                    y = p;
                    c[y >> 2] = A;
                    c[y + 4 >> 2] = r;
                    if ((c[h >> 2] | 0) >>> 0 < r >>> 0) {
                        y = g;
                        B = c[y + 4 >> 2] | 0;
                        s = p;
                        c[s >> 2] = c[y >> 2];
                        c[s + 4 >> 2] = B;
                        B = g;
                        c[B >> 2] = A;
                        c[B + 4 >> 2] = r;
                        w = u;
                        x = 2
                    } else {
                        w = u;
                        x = 1
                    }
                }
                while (0);
                o = j + 4 | 0;
                m = c[o >> 2] | 0;
                l = c[w >> 2] | 0;
                do if (m >>> 0 < l >>> 0) {
                    C = g;
                    D =
                    x
                } else {
                    u = g;
                    while (1) {
                        r = u;
                        u = u + -8 | 0;
                        if ((j | 0) == (u | 0))
                            break;
                        if ((c[r + -4 >> 2] | 0) >>> 0 < l >>> 0) {
                            n = 68;
                            break
                        }
                    }
                    if ((n | 0) == 68) {
                        n = 0;
                        r = j;
                        B = c[r >> 2] | 0;
                        A = c[r + 4 >> 2] | 0;
                        r = u;
                        s = c[r + 4 >> 2] | 0;
                        y = j;
                        c[y >> 2] = c[r >> 2];
                        c[y + 4 >> 2] = s;
                        s = u;
                        c[s >> 2] = B;
                        c[s + 4 >> 2] = A;
                        C = u;
                        D = x + 1 | 0;
                        break
                    }
                    A = j + 8 | 0;
                    if (m >>> 0 < (c[h >> 2] | 0) >>> 0)
                        E = A;
                    else {
                        if ((A | 0) == (g | 0)) {
                            n = 85;
                            break a
                        } else
                            F = A;
                        while (1) {
                            G = F + 8 | 0;
                            if (m >>> 0 < (c[F + 4 >> 2] | 0) >>> 0)
                                break;
                            if ((G | 0) == (g | 0)) {
                                n = 85;
                                break a
                            } else
                                F = G
                        }
                        u = F;
                        A = c[u >> 2] | 0;
                        s = c[u + 4 >> 2] | 0;
                        u = g;
                        B = c[u + 4 >> 2] | 0;
                        y = F;
                        c[y >> 2] = c[u >> 2];
                        c[y + 4 >> 2] = B;
                        B = g;
                        c[B >> 2] = A;
                        c[B + 4 >> 2] = s;
                        E = G
                    }
                    if ((E | 0) == (g | 0)) {
                        n = 85;
                        break a
                    } else {
                        H = E;
                        I = g
                    }
                    while (1) {
                        s = c[o >> 2] | 0;
                        B = H;
                        while (1) {
                            J = B + 8 | 0;
                            if (s >>> 0 < (c[B + 4 >> 2] | 0) >>> 0) {
                                K = I;
                                break
                            } else
                                B = J
                        }
                        do {
                            A = K;
                            K = K + -8 | 0
                        } while (s >>> 0 < (c[A + -4 >> 2] | 0) >>> 0);
                        if (!(B >>> 0 < K >>> 0)) {
                            j = B;
                            continue b
                        }
                        s = B;
                        A = c[s >> 2] | 0;
                        y = c[s + 4 >> 2] | 0;
                        s = K;
                        u = c[s + 4 >> 2] | 0;
                        r = B;
                        c[r >> 2] = c[s >> 2];
                        c[r + 4 >> 2] = u;
                        u = K;
                        c[u >> 2] = A;
                        c[u + 4 >> 2] = y;
                        H = J;
                        I = K
                    }
                }
                while (0);
                o = j + 8 | 0;
                c:
                do if (o >>> 0 < C >>> 0) {
                    m = o;
                    l = C;
                    y = p;
                    u = D;
                    while (1) {
                        A = c[y + 4 >> 2] | 0;
                        r = m;
                        while (1) {
                            L = r + 8 | 0;
                            if ((c[r + 4 >> 2] | 0) >>> 0 < A >>> 0)
                                r = L;
                            else {
                                M = l;
                                break
                            }
                        }
                        do {
                            B = M;
                            M = M +
                            -8 | 0
                        } while (!((c[B + -4 >> 2] | 0) >>> 0 < A >>> 0));
                        if (r >>> 0 > M >>> 0) {
                            N = r;
                            O = y;
                            P = u;
                            break c
                        }
                        A = r;
                        B = c[A >> 2] | 0;
                        s = c[A + 4 >> 2] | 0;
                        A = M;
                        t = c[A + 4 >> 2] | 0;
                        z = r;
                        c[z >> 2] = c[A >> 2];
                        c[z + 4 >> 2] = t;
                        t = M;
                        c[t >> 2] = B;
                        c[t + 4 >> 2] = s;
                        m = L;
                        l = M;
                        y = (y | 0) == (r | 0) ? M : y;
                        u = u + 1 | 0
                    }
                } else {
                    N = o;
                    O = p;
                    P = D
                }
                while (0);
                if ((N | 0) != (O | 0) ? (c[O + 4 >> 2] | 0) >>> 0 < (c[N + 4 >> 2] | 0) >>> 0 : 0) {
                    p = N;
                    o = c[p >> 2] | 0;
                    u = c[p + 4 >> 2] | 0;
                    p = O;
                    y = c[p + 4 >> 2] | 0;
                    l = N;
                    c[l >> 2] = c[p >> 2];
                    c[l + 4 >> 2] = y;
                    y = O;
                    c[y >> 2] = o;
                    c[y + 4 >> 2] = u;
                    Q = P + 1 | 0
                } else
                    Q = P;
                if ((Q | 0) == 0) {
                    R = Kl(j, N, 0) | 0;
                    u = N + 8 | 0;
                    if (Kl(u, a, 0) | 0) {
                        n = 80;
                        break
                    }
                    if (R) {
                        j = u;
                        continue
                    }
                }
                u =
                N;
                if ((u - k | 0) >= (b - u | 0)) {
                    n = 84;
                    break
                }
                Il(j, N, d);
                j = N + 8 | 0
            }
            if ((n | 0) == 80) {
                n = 0;
                if (R) {
                    n = 85;
                    break
                } else {
                    f = j;
                    a = N;
                    continue
                }
            } else if ((n | 0) == 84) {
                n = 0;
                Il(N + 8 | 0, a, d);
                f = j;
                a = N;
                continue
            }
        }
        if ((n | 0) == 4) {
            if (!((c[h >> 2] | 0) >>> 0 < (c[j + 4 >> 2] | 0) >>> 0)) {
                i = e;
                return
            }
            N = j;
            f = c[N >> 2] | 0;
            d = c[N + 4 >> 2] | 0;
            N = g;
            R = c[N + 4 >> 2] | 0;
            Q = j;
            c[Q >> 2] = c[N >> 2];
            c[Q + 4 >> 2] = R;
            R = g;
            c[R >> 2] = f;
            c[R + 4 >> 2] = d;
            i = e;
            return
        } else if ((n | 0) == 6) {
            d = j + 8 | 0;
            R = j + 12 | 0;
            f = c[R >> 2] | 0;
            Q = j + 4 | 0;
            N = (c[h >> 2] | 0) >>> 0 < f >>> 0;
            if (!(f >>> 0 < (c[Q >> 2] | 0) >>> 0)) {
                if (!N) {
                    i = e;
                    return
                }
                f = d;
                P = c[f >> 2] | 0;
                O = c[f + 4 >> 2] |
                0;
                f = g;
                D = c[f + 4 >> 2] | 0;
                M = d;
                c[M >> 2] = c[f >> 2];
                c[M + 4 >> 2] = D;
                D = g;
                c[D >> 2] = P;
                c[D + 4 >> 2] = O;
                if (!((c[R >> 2] | 0) >>> 0 < (c[Q >> 2] | 0) >>> 0)) {
                    i = e;
                    return
                }
                Q = j;
                R = c[Q >> 2] | 0;
                O = c[Q + 4 >> 2] | 0;
                Q = d;
                D = c[Q + 4 >> 2] | 0;
                P = j;
                c[P >> 2] = c[Q >> 2];
                c[P + 4 >> 2] = D;
                D = d;
                c[D >> 2] = R;
                c[D + 4 >> 2] = O;
                i = e;
                return
            }
            O = j;
            D = c[O >> 2] | 0;
            R = c[O + 4 >> 2] | 0;
            if (N) {
                N = g;
                O = c[N + 4 >> 2] | 0;
                P = j;
                c[P >> 2] = c[N >> 2];
                c[P + 4 >> 2] = O;
                O = g;
                c[O >> 2] = D;
                c[O + 4 >> 2] = R;
                i = e;
                return
            }
            O = d;
            P = c[O + 4 >> 2] | 0;
            N = j;
            c[N >> 2] = c[O >> 2];
            c[N + 4 >> 2] = P;
            P = d;
            c[P >> 2] = D;
            c[P + 4 >> 2] = R;
            if (!((c[h >> 2] | 0) >>> 0 < R >>> 0)) {
                i = e;
                return
            }
            P = g;
            N = c[P + 4 >> 2] | 0;
            O = d;
            c[O >> 2] = c[P >> 2];
            c[O + 4 >> 2] = N;
            N = g;
            c[N >> 2] = D;
            c[N + 4 >> 2] = R;
            i = e;
            return
        } else if ((n | 0) == 14) {
            Jl(j, j + 8 | 0, j + 16 | 0, g, 0) | 0;
            i = e;
            return
        } else if ((n | 0) == 15) {
            R = j + 8 | 0;
            N = j + 16 | 0;
            D = j + 24 | 0;
            Jl(j, R, N, D, 0) | 0;
            O = j + 28 | 0;
            if (!((c[h >> 2] | 0) >>> 0 < (c[O >> 2] | 0) >>> 0)) {
                i = e;
                return
            }
            h = D;
            P = c[h >> 2] | 0;
            d = c[h + 4 >> 2] | 0;
            h = g;
            Q = c[h + 4 >> 2] | 0;
            M = D;
            c[M >> 2] = c[h >> 2];
            c[M + 4 >> 2] = Q;
            Q = g;
            c[Q >> 2] = P;
            c[Q + 4 >> 2] = d;
            if (!((c[O >> 2] | 0) >>> 0 < (c[j + 20 >> 2] | 0) >>> 0)) {
                i = e;
                return
            }
            O = N;
            d = c[O >> 2] | 0;
            Q = c[O + 4 >> 2] | 0;
            O = D;
            P = c[O >> 2] | 0;
            g = c[O + 4 >> 2] | 0;
            O = N;
            c[O >> 2] = P;
            c[O + 4 >> 2] = g;
            O = D;
            c[O >> 2] =
            d;
            c[O + 4 >> 2] = Q;
            if (!(g >>> 0 < (c[j + 12 >> 2] | 0) >>> 0)) {
                i = e;
                return
            }
            Q = R;
            O = c[Q >> 2] | 0;
            d = c[Q + 4 >> 2] | 0;
            Q = R;
            c[Q >> 2] = P;
            c[Q + 4 >> 2] = g;
            Q = N;
            c[Q >> 2] = O;
            c[Q + 4 >> 2] = d;
            if (!(g >>> 0 < (c[j + 4 >> 2] | 0) >>> 0)) {
                i = e;
                return
            }
            d = j;
            Q = c[d >> 2] | 0;
            O = c[d + 4 >> 2] | 0;
            d = j;
            c[d >> 2] = P;
            c[d + 4 >> 2] = g;
            g = R;
            c[g >> 2] = Q;
            c[g + 4 >> 2] = O;
            i = e;
            return
        } else if ((n | 0) == 21) {
            O = j + 16 | 0;
            g = j + 8 | 0;
            Q = c[j + 12 >> 2] | 0;
            R = c[j + 4 >> 2] | 0;
            d = c[j + 20 >> 2] | 0;
            P = d >>> 0 < Q >>> 0;
            do if (Q >>> 0 < R >>> 0) {
                N = j;
                D = c[N >> 2] | 0;
                M = c[N + 4 >> 2] | 0;
                if (P) {
                    N = O;
                    h = c[N + 4 >> 2] | 0;
                    f = j;
                    c[f >> 2] = c[N >> 2];
                    c[f + 4 >> 2] = h;
                    h = O;
                    c[h >> 2] = D;
                    c[h + 4 >> 2] = M;
                    break
                }
                h =
                g;
                f = c[h + 4 >> 2] | 0;
                N = j;
                c[N >> 2] = c[h >> 2];
                c[N + 4 >> 2] = f;
                f = g;
                c[f >> 2] = D;
                c[f + 4 >> 2] = M;
                if (d >>> 0 < M >>> 0) {
                    f = O;
                    N = c[f + 4 >> 2] | 0;
                    h = g;
                    c[h >> 2] = c[f >> 2];
                    c[h + 4 >> 2] = N;
                    N = O;
                    c[N >> 2] = D;
                    c[N + 4 >> 2] = M
                }
            } else if (P ? (M = g, N = c[M >> 2] | 0, D = c[M + 4 >> 2] | 0, M = O, h = c[M >> 2] | 0, f = c[M + 4 >> 2] | 0, M = g, c[M >> 2] = h, c[M + 4 >> 2] = f, M = O, c[M >> 2] = N, c[M + 4 >> 2] = D, f >>> 0 < R >>> 0) : 0) {
                D = j;
                M = c[D >> 2] | 0;
                N = c[D + 4 >> 2] | 0;
                D = j;
                c[D >> 2] = h;
                c[D + 4 >> 2] = f;
                f = g;
                c[f >> 2] = M;
                c[f + 4 >> 2] = N
            }
            while (0);
            g = j + 24 | 0;
            if ((g | 0) == (a | 0)) {
                i = e;
                return
            } else {
                S = g;
                T = O
            }
            while (1) {
                if ((c[S + 4 >> 2] | 0) >>> 0 < (c[T + 4 >> 2] | 0) >>> 0) {
                    O = S;
                    g =
                    c[O >> 2] | 0;
                    R = c[O + 4 >> 2] | 0;
                    O = S;
                    P = T;
                    while (1) {
                        d = P;
                        Q = c[d + 4 >> 2] | 0;
                        N = O;
                        c[N >> 2] = c[d >> 2];
                        c[N + 4 >> 2] = Q;
                        if ((P | 0) == (j | 0))
                            break;
                        if (R >>> 0 < (c[P + -4 >> 2] | 0) >>> 0) {
                            Q = P;
                            P = P + -8 | 0;
                            O = Q
                        } else
                            break
                    }
                    O = P;
                    c[O >> 2] = g;
                    c[O + 4 >> 2] = R
                }
                O = S + 8 | 0;
                if ((O | 0) == (a | 0))
                    break;
                else {
                    Q = S;
                    S = O;
                    T = Q
                }
            }
            i = e;
            return
        } else if ((n | 0) == 85) {
            i = e;
            return
        }
    }
    function Jl(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        f = i;
        g = b + 4 | 0;
        h = c[g >> 2] | 0;
        j = a + 4 | 0;
        k = d + 4 | 0;
        l = c[k >> 2] | 0;
        m = l >>> 0 < h >>> 0;
        do if (h >>> 0 < (c[j >> 2] | 0) >>> 0) {
            n = a;
            o = c[n >> 2] | 0;
            p = c[n + 4 >> 2] | 0;
            if (m) {
                n = d;
                q = c[n + 4 >> 2] | 0;
                r = a;
                c[r >> 2] = c[n >> 2];
                c[r + 4 >> 2] = q;
                q = d;
                c[q >> 2] = o;
                c[q + 4 >> 2] = p;
                s = 1;
                t = p;
                break
            }
            q = b;
            r = c[q + 4 >> 2] | 0;
            n = a;
            c[n >> 2] = c[q >> 2];
            c[n + 4 >> 2] = r;
            r = b;
            c[r >> 2] = o;
            c[r + 4 >> 2] = p;
            r = c[k >> 2] | 0;
            if (r >>> 0 < p >>> 0) {
                n = d;
                q = c[n + 4 >> 2] | 0;
                u = b;
                c[u >> 2] = c[n >> 2];
                c[u + 4 >> 2] = q;
                q = d;
                c[q >> 2] = o;
                c[q + 4 >> 2] = p;
                s = 2;
                t = p
            } else {
                s = 1;
                t = r
            }
        } else if (m) {
            r = b;
            p = c[r >> 2] | 0;
            q = c[r + 4 >> 2] | 0;
            r = d;
            o = c[r + 4 >> 2] | 0;
            u = b;
            c[u >> 2] = c[r >> 2];
            c[u + 4 >> 2] = o;
            o = d;
            c[o >> 2] = p;
            c[o + 4 >> 2] = q;
            if ((c[g >> 2] | 0) >>> 0 < (c[j >> 2] | 0) >>> 0) {
                o = a;
                p = c[o >> 2] | 0;
                u = c[o + 4 >>
                2] | 0;
                o = b;
                r = c[o + 4 >> 2] | 0;
                n = a;
                c[n >> 2] = c[o >> 2];
                c[n + 4 >> 2] = r;
                r = b;
                c[r >> 2] = p;
                c[r + 4 >> 2] = u;
                s = 2;
                t = c[k >> 2] | 0
            } else {
                s = 1;
                t = q
            }
        } else {
            s = 0;
            t = l
        }
        while (0);
        if (!((c[e + 4 >> 2] | 0) >>> 0 < t >>> 0)) {
            v = s;
            i = f;
            return v | 0
        }
        t = d;
        l = c[t >> 2] | 0;
        m = c[t + 4 >> 2] | 0;
        t = e;
        h = c[t + 4 >> 2] | 0;
        q = d;
        c[q >> 2] = c[t >> 2];
        c[q + 4 >> 2] = h;
        h = e;
        c[h >> 2] = l;
        c[h + 4 >> 2] = m;
        if (!((c[k >> 2] | 0) >>> 0 < (c[g >> 2] | 0) >>> 0)) {
            v = s + 1 | 0;
            i = f;
            return v | 0
        }
        k = b;
        m = c[k >> 2] | 0;
        h = c[k + 4 >> 2] | 0;
        k = d;
        l = c[k + 4 >> 2] | 0;
        e = b;
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = l;
        l = d;
        c[l >> 2] = m;
        c[l + 4 >> 2] = h;
        if (!((c[g >> 2] | 0) >>> 0 < (c[j >> 2] | 0) >>> 0)) {
            v = s + 2 |
            0;
            i = f;
            return v | 0
        }
        j = a;
        g = c[j >> 2] | 0;
        h = c[j + 4 >> 2] | 0;
        j = b;
        l = c[j + 4 >> 2] | 0;
        m = a;
        c[m >> 2] = c[j >> 2];
        c[m + 4 >> 2] = l;
        l = b;
        c[l >> 2] = g;
        c[l + 4 >> 2] = h;
        v = s + 3 | 0;
        i = f;
        return v | 0
    }
    function Kl(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        d = i;
        switch (b - a >> 3 | 0) {
        case 5:
            e = a + 8 | 0;
            f = a + 16 | 0;
            g = a + 24 | 0;
            Jl(a, e, f, g, 0) | 0;
            h = a + 28 | 0;
            if (!((c[b + -4 >> 2] | 0) >>> 0 < (c[h >> 2] | 0) >>> 0)) {
                j = 1;
                i = d;
                return j | 0
            }
            k = b + -8 | 0;
            l = g;
            m = c[l >> 2] | 0;
            n = c[l + 4 >> 2] | 0;
            l = k;
            o = c[l + 4 >> 2] | 0;
            p = g;
            c[p >> 2] = c[l >> 2];
            c[p + 4 >> 2] = o;
            o = k;
            c[o >> 2] = m;
            c[o +
            4 >> 2] = n;
            if (!((c[h >> 2] | 0) >>> 0 < (c[a + 20 >> 2] | 0) >>> 0)) {
                j = 1;
                i = d;
                return j | 0
            }
            h = f;
            n = c[h >> 2] | 0;
            o = c[h + 4 >> 2] | 0;
            h = g;
            m = c[h >> 2] | 0;
            k = c[h + 4 >> 2] | 0;
            h = f;
            c[h >> 2] = m;
            c[h + 4 >> 2] = k;
            h = g;
            c[h >> 2] = n;
            c[h + 4 >> 2] = o;
            if (!(k >>> 0 < (c[a + 12 >> 2] | 0) >>> 0)) {
                j = 1;
                i = d;
                return j | 0
            }
            o = e;
            h = c[o >> 2] | 0;
            n = c[o + 4 >> 2] | 0;
            o = e;
            c[o >> 2] = m;
            c[o + 4 >> 2] = k;
            o = f;
            c[o >> 2] = h;
            c[o + 4 >> 2] = n;
            if (!(k >>> 0 < (c[a + 4 >> 2] | 0) >>> 0)) {
                j = 1;
                i = d;
                return j | 0
            }
            n = a;
            o = c[n >> 2] | 0;
            h = c[n + 4 >> 2] | 0;
            n = a;
            c[n >> 2] = m;
            c[n + 4 >> 2] = k;
            k = e;
            c[k >> 2] = o;
            c[k + 4 >> 2] = h;
            j = 1;
            i = d;
            return j | 0;
        case 4:
            Jl(a, a + 8 | 0, a + 16 | 0, b + -8 | 0, 0) | 0;
            j = 1;
            i = d;
            return j | 0;
        case 1:
        case 0:
            j = 1;
            i = d;
            return j | 0;
        case 3:
            h = a + 8 | 0;
            k = b + -8 | 0;
            o = a + 12 | 0;
            e = c[o >> 2] | 0;
            n = a + 4 | 0;
            m = b + -4 | 0;
            f = (c[m >> 2] | 0) >>> 0 < e >>> 0;
            if (!(e >>> 0 < (c[n >> 2] | 0) >>> 0)) {
                if (!f) {
                    j = 1;
                    i = d;
                    return j | 0
                }
                e = h;
                g = c[e >> 2] | 0;
                p = c[e + 4 >> 2] | 0;
                e = k;
                l = c[e + 4 >> 2] | 0;
                q = h;
                c[q >> 2] = c[e >> 2];
                c[q + 4 >> 2] = l;
                l = k;
                c[l >> 2] = g;
                c[l + 4 >> 2] = p;
                if (!((c[o >> 2] | 0) >>> 0 < (c[n >> 2] | 0) >>> 0)) {
                    j = 1;
                    i = d;
                    return j | 0
                }
                n = a;
                o = c[n >> 2] | 0;
                p = c[n + 4 >> 2] | 0;
                n = h;
                l = c[n + 4 >> 2] | 0;
                g = a;
                c[g >> 2] = c[n >> 2];
                c[g + 4 >> 2] = l;
                l = h;
                c[l >> 2] = o;
                c[l + 4 >> 2] = p;
                j = 1;
                i = d;
                return j | 0
            }
            p = a;
            l = c[p >> 2] | 0;
            o = c[p +
            4 >> 2] | 0;
            if (f) {
                f = k;
                p = c[f + 4 >> 2] | 0;
                g = a;
                c[g >> 2] = c[f >> 2];
                c[g + 4 >> 2] = p;
                p = k;
                c[p >> 2] = l;
                c[p + 4 >> 2] = o;
                j = 1;
                i = d;
                return j | 0
            }
            p = h;
            g = c[p + 4 >> 2] | 0;
            f = a;
            c[f >> 2] = c[p >> 2];
            c[f + 4 >> 2] = g;
            g = h;
            c[g >> 2] = l;
            c[g + 4 >> 2] = o;
            if (!((c[m >> 2] | 0) >>> 0 < o >>> 0)) {
                j = 1;
                i = d;
                return j | 0
            }
            m = k;
            g = c[m + 4 >> 2] | 0;
            f = h;
            c[f >> 2] = c[m >> 2];
            c[f + 4 >> 2] = g;
            g = k;
            c[g >> 2] = l;
            c[g + 4 >> 2] = o;
            j = 1;
            i = d;
            return j | 0;
        case 2:
            if (!((c[b + -4 >> 2] | 0) >>> 0 < (c[a + 4 >> 2] | 0) >>> 0)) {
                j = 1;
                i = d;
                return j | 0
            }
            o = b + -8 | 0;
            g = a;
            l = c[g >> 2] | 0;
            k = c[g + 4 >> 2] | 0;
            g = o;
            f = c[g + 4 >> 2] | 0;
            m = a;
            c[m >> 2] = c[g >> 2];
            c[m + 4 >> 2] = f;
            f = o;
            c[f >> 2] = l;
            c[f + 4 >> 2] = k;
            j = 1;
            i = d;
            return j | 0;
        default:
            k = a + 16 | 0;
            f = a + 8 | 0;
            l = c[a + 12 >> 2] | 0;
            o = c[a + 4 >> 2] | 0;
            m = c[a + 20 >> 2] | 0;
            g = m >>> 0 < l >>> 0;
            do if (l >>> 0 < o >>> 0) {
                h = a;
                p = c[h >> 2] | 0;
                n = c[h + 4 >> 2] | 0;
                if (g) {
                    h = k;
                    q = c[h + 4 >> 2] | 0;
                    e = a;
                    c[e >> 2] = c[h >> 2];
                    c[e + 4 >> 2] = q;
                    q = k;
                    c[q >> 2] = p;
                    c[q + 4 >> 2] = n;
                    break
                }
                q = f;
                e = c[q + 4 >> 2] | 0;
                h = a;
                c[h >> 2] = c[q >> 2];
                c[h + 4 >> 2] = e;
                e = f;
                c[e >> 2] = p;
                c[e + 4 >> 2] = n;
                if (m >>> 0 < n >>> 0) {
                    e = k;
                    h = c[e + 4 >> 2] | 0;
                    q = f;
                    c[q >> 2] = c[e >> 2];
                    c[q + 4 >> 2] = h;
                    h = k;
                    c[h >> 2] = p;
                    c[h + 4 >> 2] = n
                }
            } else if (g ? (n = f, h = c[n >> 2] | 0, p = c[n + 4 >> 2] | 0, n = k, q = c[n >> 2] | 0, e = c[n + 4 >> 2] | 0, n = f, c[n >> 2] =
            q, c[n + 4 >> 2] = e, n = k, c[n >> 2] = h, c[n + 4 >> 2] = p, e >>> 0 < o >>> 0) : 0) {
                p = a;
                n = c[p >> 2] | 0;
                h = c[p + 4 >> 2] | 0;
                p = a;
                c[p >> 2] = q;
                c[p + 4 >> 2] = e;
                e = f;
                c[e >> 2] = n;
                c[e + 4 >> 2] = h
            }
            while (0);
            f = a + 24 | 0;
            if ((f | 0) == (b | 0)) {
                j = 1;
                i = d;
                return j | 0
            } else {
                r = 0;
                s = f;
                t = k
            }
            while (1) {
                if ((c[s + 4 >> 2] | 0) >>> 0 < (c[t + 4 >> 2] | 0) >>> 0) {
                    k = s;
                    f = c[k >> 2] | 0;
                    o = c[k + 4 >> 2] | 0;
                    k = s;
                    g = t;
                    while (1) {
                        m = g;
                        l = c[m + 4 >> 2] | 0;
                        h = k;
                        c[h >> 2] = c[m >> 2];
                        c[h + 4 >> 2] = l;
                        if ((g | 0) == (a | 0))
                            break;
                        if (o >>> 0 < (c[g + -4 >> 2] | 0) >>> 0) {
                            l = g;
                            g = g + -8 | 0;
                            k = l
                        } else
                            break
                    }
                    k = g;
                    c[k >> 2] = f;
                    c[k + 4 >> 2] = o;
                    k = r + 1 | 0;
                    if ((k | 0) == 8)
                        break;
                    else
                        u = k
                } else
                    u =
                    r;
                k = s + 8 | 0;
                if ((k | 0) == (b | 0)) {
                    j = 1;
                    v = 34;
                    break
                } else {
                    l = s;
                    r = u;
                    s = k;
                    t = l
                }
            }
            if ((v | 0) == 34) {
                i = d;
                return j | 0
            }
            j = (s + 8 | 0) == (b | 0);
            i = d;
            return j | 0
        }
        return 0
    }
    function Ll(a, b, d, e, f, g) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0;
        h = i;
        i = i + 64 | 0;
        j = h;
        if ((e | 0) == 2) {
            k = b + -60 | 0;
            if (!(nb[c[d >> 2] & 31](k, a) | 0)) {
                i = h;
                return
            }
            l = j + 0 | 0;
            m = a + 0 | 0;
            n = l + 60 | 0;
            do {
                c[l >> 2] = c[m >> 2];
                l = l + 4 | 0;
                m = m + 4 | 0
            } while ((l | 0) < (n | 0));
            l = a + 0 | 0;
            m = k + 0 | 0;
            n = l + 60 | 0;
            do {
                c[l >> 2] = c[m >> 2];
                l = l + 4 | 0;
                m = m + 4 | 0
            } while ((l | 0) < (n |
            0));
            l = k + 0 | 0;
            m = j + 0 | 0;
            n = l + 60 | 0;
            do {
                c[l >> 2] = c[m >> 2];
                l = l + 4 | 0;
                m = m + 4 | 0
            } while ((l | 0) < (n | 0));
            i = h;
            return
        } else if ((e | 0) == 1 | (e | 0) == 0) {
            i = h;
            return
        } else {
            if ((e | 0) < 129) {
                if ((a | 0) == (b | 0)) {
                    i = h;
                    return
                }
                k = a + 60 | 0;
                if ((k | 0) == (b | 0)) {
                    i = h;
                    return
                }
                o = k;
                do {
                    l = j + 0 | 0;
                    m = o + 0 | 0;
                    n = l + 60 | 0;
                    do {
                        c[l >> 2] = c[m >> 2];
                        l = l + 4 | 0;
                        m = m + 4 | 0
                    } while ((l | 0) < (n | 0));
                    a:
                    do if ((o | 0) == (a | 0))
                        p = a;
                    else {
                        k = o;
                        while (1) {
                            q = k;
                            k = k + -60 | 0;
                            if (!(nb[c[d >> 2] & 31](j, k) | 0)) {
                                p = q;
                                break a
                            }
                            l = q + 0 | 0;
                            m = k + 0 | 0;
                            n = l + 60 | 0;
                            do {
                                c[l >> 2] = c[m >> 2];
                                l = l + 4 | 0;
                                m = m + 4 | 0
                            } while ((l | 0) < (n | 0));
                            if ((k | 0) == (a | 0)) {
                                p = a;
                                break
                            }
                        }
                    }
                    while (0);
                    l = p + 0 | 0;
                    m = j + 0 | 0;
                    n = l + 60 | 0;
                    do {
                        c[l >> 2] = c[m >> 2];
                        l = l + 4 | 0;
                        m = m + 4 | 0
                    } while ((l | 0) < (n | 0));
                    o = o + 60 | 0
                } while ((o | 0) != (b | 0));
                i = h;
                return
            }
            o = (e | 0) / 2 | 0;
            j = a + (o * 60 | 0) | 0;
            if ((e | 0) > (g | 0)) {
                Ll(a, j, d, o, f, g);
                p = e - o | 0;
                Ll(j, b, d, p, f, g);
                Nl(a, j, b, d, o, p, f, g);
                i = h;
                return
            }
            Ml(a, j, d, o, f);
            g = f + (o * 60 | 0) | 0;
            Ml(j, b, d, e - o | 0, g);
            o = f + (e * 60 | 0) | 0;
            b:
            do if ((e + 1 | 0) >>> 0 < 3) {
                r = a;
                s = g
            } else {
                b = a;
                j = f;
                p = g;
                while (1) {
                    if ((p | 0) == (o | 0))
                        break;
                    if (nb[c[d >> 2] & 31](p, j) | 0) {
                        l = b + 0 | 0;
                        m = p + 0 | 0;
                        n = l + 60 | 0;
                        do {
                            c[l >> 2] = c[m >> 2];
                            l = l + 4 | 0;
                            m = m + 4 | 0
                        } while ((l | 0) < (n | 0));
                        t = p + 60 | 0;
                        u = j
                    } else {
                        l = b +
                        0 | 0;
                        m = j + 0 | 0;
                        n = l + 60 | 0;
                        do {
                            c[l >> 2] = c[m >> 2];
                            l = l + 4 | 0;
                            m = m + 4 | 0
                        } while ((l | 0) < (n | 0));
                        t = p;
                        u = j + 60 | 0
                    }
                    k = b + 60 | 0;
                    if ((u | 0) == (g | 0)) {
                        r = k;
                        s = t;
                        break b
                    } else {
                        b = k;
                        j = u;
                        p = t
                    }
                }
                if ((j | 0) == (g | 0)) {
                    i = h;
                    return
                } else {
                    v = j;
                    w = b
                }
                while (1) {
                    l = w + 0 | 0;
                    m = v + 0 | 0;
                    n = l + 60 | 0;
                    do {
                        c[l >> 2] = c[m >> 2];
                        l = l + 4 | 0;
                        m = m + 4 | 0
                    } while ((l | 0) < (n | 0));
                    v = v + 60 | 0;
                    if ((v | 0) == (g | 0))
                        break;
                    else
                        w = w + 60 | 0
                }
                i = h;
                return
            }
            while (0);
            if ((s | 0) == (o | 0)) {
                i = h;
                return
            } else {
                x = r;
                y = s
            }
            while (1) {
                l = x + 0 | 0;
                m = y + 0 | 0;
                n = l + 60 | 0;
                do {
                    c[l >> 2] = c[m >> 2];
                    l = l + 4 | 0;
                    m = m + 4 | 0
                } while ((l | 0) < (n | 0));
                y = y + 60 | 0;
                if ((y | 0) == (o | 0))
                    break;
                else
                    x = x + 60 | 0
            }
            i = h;
            return
        }
    }
    function Ml(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0;
        g = i;
        if ((e | 0) == 1) {
            if ((f | 0) == 0) {
                i = g;
                return
            }
            h = f + 0 | 0;
            j = a + 0 | 0;
            k = h + 60 | 0;
            do {
                c[h >> 2] = c[j >> 2];
                h = h + 4 | 0;
                j = j + 4 | 0
            } while ((h | 0) < (k | 0));
            i = g;
            return
        } else if ((e | 0) == 2) {
            l = b + -60 | 0;
            m = (f | 0) == 0;
            if (nb[c[d >> 2] & 31](l, a) | 0) {
                if (!m) {
                    h = f + 0 | 0;
                    j = l + 0 | 0;
                    k = h + 60 | 0;
                    do {
                        c[h >> 2] = c[j >> 2];
                        h = h + 4 | 0;
                        j = j + 4 | 0
                    } while ((h | 0) < (k | 0))
                }
                h = f + 60 | 0;
                j = a + 0 | 0;
                k = h + 60 | 0;
                do {
                    c[h >> 2] = c[j >> 2];
                    h = h + 4 | 0;
                    j = j + 4 | 0
                } while ((h |
                0) < (k | 0));
                i = g;
                return
            } else {
                if (!m) {
                    h = f + 0 | 0;
                    j = a + 0 | 0;
                    k = h + 60 | 0;
                    do {
                        c[h >> 2] = c[j >> 2];
                        h = h + 4 | 0;
                        j = j + 4 | 0
                    } while ((h | 0) < (k | 0))
                }
                h = f + 60 | 0;
                j = l + 0 | 0;
                k = h + 60 | 0;
                do {
                    c[h >> 2] = c[j >> 2];
                    h = h + 4 | 0;
                    j = j + 4 | 0
                } while ((h | 0) < (k | 0));
                i = g;
                return
            }
        } else if ((e | 0) == 0) {
            i = g;
            return
        } else {
            if ((e | 0) < 9) {
                if ((a | 0) == (b | 0)) {
                    i = g;
                    return
                }
                if ((f | 0) == 0)
                    n = 0;
                else {
                    h = f + 0 | 0;
                    j = a + 0 | 0;
                    k = h + 60 | 0;
                    do {
                        c[h >> 2] = c[j >> 2];
                        h = h + 4 | 0;
                        j = j + 4 | 0
                    } while ((h | 0) < (k | 0));
                    n = f
                }
                l = a + 60 | 0;
                if ((l | 0) == (b | 0)) {
                    i = g;
                    return
                } else {
                    o = l;
                    p = n
                }
                do {
                    n = p;
                    p = p + 60 | 0;
                    if (nb[c[d >> 2] & 31](o, n) | 0) {
                        h = p + 0 | 0;
                        j = n + 0 | 0;
                        k = h + 60 | 0;
                        do {
                            c[h >>
                            2] = c[j >> 2];
                            h = h + 4 | 0;
                            j = j + 4 | 0
                        } while ((h | 0) < (k | 0));
                        a:
                        do if ((n | 0) == (f | 0))
                            q = f;
                        else {
                            l = n;
                            while (1) {
                                m = l;
                                l = l + -60 | 0;
                                if (!(nb[c[d >> 2] & 31](o, l) | 0)) {
                                    q = m;
                                    break a
                                }
                                h = m + 0 | 0;
                                j = l + 0 | 0;
                                k = h + 60 | 0;
                                do {
                                    c[h >> 2] = c[j >> 2];
                                    h = h + 4 | 0;
                                    j = j + 4 | 0
                                } while ((h | 0) < (k | 0));
                                if ((l | 0) == (f | 0)) {
                                    q = f;
                                    break
                                }
                            }
                        }
                        while (0);
                        h = q + 0 | 0;
                        j = o + 0 | 0;
                        k = h + 60 | 0;
                        do {
                            c[h >> 2] = c[j >> 2];
                            h = h + 4 | 0;
                            j = j + 4 | 0
                        } while ((h | 0) < (k | 0))
                    } else {
                        h = p + 0 | 0;
                        j = o + 0 | 0;
                        k = h + 60 | 0;
                        do {
                            c[h >> 2] = c[j >> 2];
                            h = h + 4 | 0;
                            j = j + 4 | 0
                        } while ((h | 0) < (k | 0))
                    }
                    o = o + 60 | 0
                } while ((o | 0) != (b | 0));
                i = g;
                return
            }
            o = (e | 0) / 2 | 0;
            p = a + (o * 60 | 0) | 0;
            Ll(a, p, d, o,
            f, o);
            q = e - o | 0;
            Ll(p, b, d, q, f + (o * 60 | 0) | 0, q);
            b:
            do if ((e + 1 | 0) >>> 0 < 3) {
                r = p;
                s = f
            } else {
                q = p;
                o = a;
                n = f;
                while (1) {
                    if ((q | 0) == (b | 0))
                        break;
                    l = (n | 0) == 0;
                    if (nb[c[d >> 2] & 31](q, o) | 0) {
                        if (!l) {
                            h = n + 0 | 0;
                            j = q + 0 | 0;
                            k = h + 60 | 0;
                            do {
                                c[h >> 2] = c[j >> 2];
                                h = h + 4 | 0;
                                j = j + 4 | 0
                            } while ((h | 0) < (k | 0))
                        }
                        t = o;
                        u = q + 60 | 0
                    } else {
                        if (!l) {
                            h = n + 0 | 0;
                            j = o + 0 | 0;
                            k = h + 60 | 0;
                            do {
                                c[h >> 2] = c[j >> 2];
                                h = h + 4 | 0;
                                j = j + 4 | 0
                            } while ((h | 0) < (k | 0))
                        }
                        t = o + 60 | 0;
                        u = q
                    }
                    l = n + 60 | 0;
                    if ((t | 0) == (p | 0)) {
                        r = u;
                        s = l;
                        break b
                    } else {
                        q = u;
                        o = t;
                        n = l
                    }
                }
                if ((o | 0) == (p | 0)) {
                    i = g;
                    return
                } else {
                    v = o;
                    w = n
                }
                while (1) {
                    if ((w | 0) != 0) {
                        h = w + 0 | 0;
                        j = v + 0 | 0;
                        k = h +
                        60 | 0;
                        do {
                            c[h >> 2] = c[j >> 2];
                            h = h + 4 | 0;
                            j = j + 4 | 0
                        } while ((h | 0) < (k | 0))
                    }
                    v = v + 60 | 0;
                    if ((v | 0) == (p | 0))
                        break;
                    else
                        w = w + 60 | 0
                }
                i = g;
                return
            }
            while (0);
            if ((r | 0) == (b | 0)) {
                i = g;
                return
            } else {
                x = r;
                y = s
            }
            while (1) {
                if ((y | 0) != 0) {
                    h = y + 0 | 0;
                    j = x + 0 | 0;
                    k = h + 60 | 0;
                    do {
                        c[h >> 2] = c[j >> 2];
                        h = h + 4 | 0;
                        j = j + 4 | 0
                    } while ((h | 0) < (k | 0))
                }
                x = x + 60 | 0;
                if ((x | 0) == (b | 0))
                    break;
                else
                    y = y + 60 | 0
            }
            i = g;
            return
        }
    }
    function Nl(a, b, d, e, f, g, h, j) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        h = h | 0;
        j = j | 0;
        var k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I =
            0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0;
        k = i;
        i = i + 64 | 0;
        l = k;
        if ((g | 0) == 0) {
            i = k;
            return
        }
        m = a;
        a = b;
        b = d;
        d = f;
        f = g;
        a:
        while (1) {
            g = b;
            n = a;
            o = d;
            p = m;
            q = f;
            while (1) {
                if ((o | 0) == 0) {
                    r = 45;
                    break a
                } else {
                    s = p;
                    t = o
                }
                while (1) {
                    if (nb[c[e >> 2] & 31](n, s) | 0)
                        break;
                    u = t + -1 | 0;
                    if ((u | 0) == 0) {
                        r = 45;
                        break a
                    } else {
                        s = s + 60 | 0;
                        t = u
                    }
                }
                if (!((t | 0) > (j | 0) & (q | 0) > (j | 0))) {
                    r = 8;
                    break a
                }
                if ((t | 0) < (q | 0)) {
                    u = (q | 0) / 2 | 0;
                    v = n + (u * 60 | 0) | 0;
                    w = s;
                    x = s;
                    y = (n - w | 0) / 60 | 0;
                    b:
                    while (1) {
                        z = y;
                        while (1) {
                            if ((z | 0) == 0)
                                break b;
                            A = (z | 0) / 2 | 0;
                            if (nb[c[e >> 2] & 31](v, x + (A * 60 | 0) | 0) | 0)
                                z = A;
                            else
                                break
                        }
                        x =
                        x + ((A + 1 | 0) * 60 | 0) | 0;
                        y = z + -1 - A | 0
                    }
                    B = x;
                    C = v;
                    D = (x - w | 0) / 60 | 0;
                    E = u
                } else {
                    if ((t | 0) == 1) {
                        r = 17;
                        break a
                    }
                    y = (t | 0) / 2 | 0;
                    F = s + (y * 60 | 0) | 0;
                    G = n;
                    H = n;
                    I = (g - G | 0) / 60 | 0;
                    c:
                    while (1) {
                        J = I;
                        while (1) {
                            if ((J | 0) == 0)
                                break c;
                            K = (J | 0) / 2 | 0;
                            if (nb[c[e >> 2] & 31](H + (K * 60 | 0) | 0, F) | 0)
                                break;
                            else
                                J = K
                        }
                        H = H + ((K + 1 | 0) * 60 | 0) | 0;
                        I = J + -1 - K | 0
                    }
                    B = F;
                    C = H;
                    D = y;
                    E = (H - G | 0) / 60 | 0
                }
                o = t - D | 0;
                L = q - E | 0;
                d:
                do if ((B | 0) != (n | 0))
                    if ((n | 0) == (C | 0))
                        M = B;
                    else {
                        if ((B + 60 | 0) == (n | 0)) {
                            N = l + 0 | 0;
                            O = B + 0 | 0;
                            P = N + 60 | 0;
                            do {
                                c[N >> 2] = c[O >> 2];
                                N = N + 4 | 0;
                                O = O + 4 | 0
                            } while ((N | 0) < (P | 0));
                            J = C - n | 0;
                            Bn(B | 0, n | 0, J | 0) | 0;
                            I = B + (((J | 0) /
                            60 | 0) * 60 | 0) | 0;
                            N = I + 0 | 0;
                            O = l + 0 | 0;
                            P = N + 60 | 0;
                            do {
                                c[N >> 2] = c[O >> 2];
                                N = N + 4 | 0;
                                O = O + 4 | 0
                            } while ((N | 0) < (P | 0));
                            M = I;
                            break
                        }
                        if ((n + 60 | 0) == (C | 0)) {
                            J = C + -60 | 0;
                            N = l + 0 | 0;
                            O = J + 0 | 0;
                            P = N + 60 | 0;
                            do {
                                c[N >> 2] = c[O >> 2];
                                N = N + 4 | 0;
                                O = O + 4 | 0
                            } while ((N | 0) < (P | 0));
                            I = J - B | 0;
                            u = C + (((I | 0) / -60 | 0) * 60 | 0) | 0;
                            Bn(u | 0, B | 0, I | 0) | 0;
                            N = B + 0 | 0;
                            O = l + 0 | 0;
                            P = N + 60 | 0;
                            do {
                                c[N >> 2] = c[O >> 2];
                                N = N + 4 | 0;
                                O = O + 4 | 0
                            } while ((N | 0) < (P | 0));
                            M = u;
                            break
                        }
                        J = n;
                        I = (J - B | 0) / 60 | 0;
                        w = C;
                        x = (w - J | 0) / 60 | 0;
                        if ((I | 0) == (x | 0)) {
                            J = B;
                            v = n;
                            while (1) {
                                N = l + 0 | 0;
                                O = J + 0 | 0;
                                P = N + 60 | 0;
                                do {
                                    c[N >> 2] = c[O >> 2];
                                    N = N + 4 | 0;
                                    O = O + 4 | 0
                                } while ((N | 0) < (P |
                                0));
                                N = J + 0 | 0;
                                O = v + 0 | 0;
                                P = N + 60 | 0;
                                do {
                                    c[N >> 2] = c[O >> 2];
                                    N = N + 4 | 0;
                                    O = O + 4 | 0
                                } while ((N | 0) < (P | 0));
                                N = v + 0 | 0;
                                O = l + 0 | 0;
                                P = N + 60 | 0;
                                do {
                                    c[N >> 2] = c[O >> 2];
                                    N = N + 4 | 0;
                                    O = O + 4 | 0
                                } while ((N | 0) < (P | 0));
                                J = J + 60 | 0;
                                if ((J | 0) == (n | 0)) {
                                    M = n;
                                    break d
                                } else
                                    v = v + 60 | 0
                            }
                        } else {
                            Q = I;
                            R = x
                        }
                        while (1) {
                            v = (Q | 0) % (R | 0) | 0;
                            if ((v | 0) == 0)
                                break;
                            else {
                                J = R;
                                R = v;
                                Q = J
                            }
                        }
                        if ((R | 0) != 0) {
                            J = I + -1 | 0;
                            v = B + (R * 60 | 0) | 0;
                            do {
                                u = v;
                                v = v + -60 | 0;
                                N = l + 0 | 0;
                                O = v + 0 | 0;
                                P = N + 60 | 0;
                                do {
                                    c[N >> 2] = c[O >> 2];
                                    N = N + 4 | 0;
                                    O = O + 4 | 0
                                } while ((N | 0) < (P | 0));
                                z = v;
                                S = u + (J * 60 | 0) | 0;
                                while (1) {
                                    N = z + 0 | 0;
                                    O = S + 0 | 0;
                                    P = N + 60 | 0;
                                    do {
                                        c[N >> 2] = c[O >> 2];
                                        N = N + 4 | 0;
                                        O = O + 4 | 0
                                    } while ((N | 0) < (P | 0));
                                    T = (w - S | 0) / 60 | 0;
                                    if ((I | 0) < (T | 0))
                                        U = S + (I * 60 | 0) | 0;
                                    else
                                        U = B + ((I - T | 0) * 60 | 0) | 0;
                                    if ((U | 0) == (v | 0))
                                        break;
                                    else {
                                        T = S;
                                        S = U;
                                        z = T
                                    }
                                }
                                N = S + 0 | 0;
                                O = l + 0 | 0;
                                P = N + 60 | 0;
                                do {
                                    c[N >> 2] = c[O >> 2];
                                    N = N + 4 | 0;
                                    O = O + 4 | 0
                                } while ((N | 0) < (P | 0))
                            } while ((v | 0) != (B | 0))
                        }
                        M = B + (x * 60 | 0) | 0
                    }
                else
                    M = C;
                while (0);
                if ((E + D | 0) >= (L + o | 0))
                    break;
                Nl(s, B, M, e, D, E, h, j);
                if ((q | 0) == (E | 0)) {
                    r = 45;
                    break a
                } else {
                    n = C;
                    p = M;
                    q = L
                }
            }
            Nl(M, C, b, e, o, L, h, j);
            if ((E | 0) == 0) {
                r = 45;
                break
            } else {
                m = s;
                a = B;
                b = M;
                d = D;
                f = E
            }
        }
        if ((r | 0) == 8) {
            Ol(s, n, b, e, t, q, h);
            i = k;
            return
        } else if ((r | 0) == 17) {
            N = l + 0 |
            0;
            O = s + 0 | 0;
            P = N + 60 | 0;
            do {
                c[N >> 2] = c[O >> 2];
                N = N + 4 | 0;
                O = O + 4 | 0
            } while ((N | 0) < (P | 0));
            N = s + 0 | 0;
            O = n + 0 | 0;
            P = N + 60 | 0;
            do {
                c[N >> 2] = c[O >> 2];
                N = N + 4 | 0;
                O = O + 4 | 0
            } while ((N | 0) < (P | 0));
            N = n + 0 | 0;
            O = l + 0 | 0;
            P = N + 60 | 0;
            do {
                c[N >> 2] = c[O >> 2];
                N = N + 4 | 0;
                O = O + 4 | 0
            } while ((N | 0) < (P | 0));
            i = k;
            return
        } else if ((r | 0) == 45) {
            i = k;
            return
        }
    }
    function Ol(a, b, d, e, f, g, h) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0;
        j = i;
        k = a;
        l = b;
        if ((f | 0) <= (g | 0)) {
            a:
            do if ((a | 0) != (b | 0)) {
                g = (((b + -60 + (0 -
                k) | 0) >>> 0) / 60 | 0) + 1 | 0;
                f = a;
                m = h;
                while (1) {
                    if ((m | 0) != 0) {
                        n = m + 0 | 0;
                        o = f + 0 | 0;
                        p = n + 60 | 0;
                        do {
                            c[n >> 2] = c[o >> 2];
                            n = n + 4 | 0;
                            o = o + 4 | 0
                        } while ((n | 0) < (p | 0))
                    }
                    f = f + 60 | 0;
                    if ((f | 0) == (b | 0))
                        break;
                    else
                        m = m + 60 | 0
                }
                m = h + (g * 60 | 0) | 0;
                if ((m | 0) != (h | 0)) {
                    f = a;
                    q = b;
                    r = h;
                    while (1) {
                        if ((q | 0) == (d | 0))
                            break;
                        if (nb[c[e >> 2] & 31](q, r) | 0) {
                            n = f + 0 | 0;
                            o = q + 0 | 0;
                            p = n + 60 | 0;
                            do {
                                c[n >> 2] = c[o >> 2];
                                n = n + 4 | 0;
                                o = o + 4 | 0
                            } while ((n | 0) < (p | 0));
                            s = r;
                            t = q + 60 | 0
                        } else {
                            n = f + 0 | 0;
                            o = r + 0 | 0;
                            p = n + 60 | 0;
                            do {
                                c[n >> 2] = c[o >> 2];
                                n = n + 4 | 0;
                                o = o + 4 | 0
                            } while ((n | 0) < (p | 0));
                            s = r + 60 | 0;
                            t = q
                        }
                        u = f + 60 | 0;
                        if ((s | 0) == (m | 0)) {
                            v = u;
                            w = t;
                            break a
                        } else {
                            f =
                            u;
                            q = t;
                            r = s
                        }
                    }
                    Bn(f | 0, r | 0, m - r | 0) | 0;
                    i = j;
                    return
                } else {
                    v = a;
                    w = b
                }
            } else {
                v = a;
                w = b
            }
            while (0);
            Bn(v | 0, w | 0, d - w | 0) | 0;
            i = j;
            return
        }
        if ((b | 0) == (d | 0))
            x = h;
        else {
            w = (((d + -60 + (0 - l) | 0) >>> 0) / 60 | 0) + 1 | 0;
            l = b;
            v = h;
            while (1) {
                if ((v | 0) != 0) {
                    n = v + 0 | 0;
                    o = l + 0 | 0;
                    p = n + 60 | 0;
                    do {
                        c[n >> 2] = c[o >> 2];
                        n = n + 4 | 0;
                        o = o + 4 | 0
                    } while ((n | 0) < (p | 0))
                }
                l = l + 60 | 0;
                if ((l | 0) == (d | 0))
                    break;
                else
                    v = v + 60 | 0
            }
            x = h + (w * 60 | 0) | 0
        }
        w = x;
        b:
        do if ((b | 0) == (a | 0)) {
            y = w;
            z = d
        } else {
            v = w;
            l = b;
            r = x;
            m = d;
            while (1) {
                if ((v | 0) == (h | 0))
                    break;
                f = r + -60 | 0;
                s = l + -60 | 0;
                t = m + -60 | 0;
                if (nb[c[e >> 2] & 31](f, s) | 0) {
                    n = t + 0 | 0;
                    o = s + 0 | 0;
                    p = n + 60 |
                    0;
                    do {
                        c[n >> 2] = c[o >> 2];
                        n = n + 4 | 0;
                        o = o + 4 | 0
                    } while ((n | 0) < (p | 0));
                    A = s;
                    B = r
                } else {
                    n = t + 0 | 0;
                    o = f + 0 | 0;
                    p = n + 60 | 0;
                    do {
                        c[n >> 2] = c[o >> 2];
                        n = n + 4 | 0;
                        o = o + 4 | 0
                    } while ((n | 0) < (p | 0));
                    A = l;
                    B = f
                }
                s = B;
                if ((A | 0) == (a | 0)) {
                    y = s;
                    z = t;
                    break b
                } else {
                    v = s;
                    l = A;
                    r = B;
                    m = t
                }
            }
            if ((l | 0) == (a | 0)) {
                i = j;
                return
            } else {
                C = m;
                D = l
            }
            do {
                C = C + -60 | 0;
                D = D + -60 | 0;
                n = C + 0 | 0;
                o = D + 0 | 0;
                p = n + 60 | 0;
                do {
                    c[n >> 2] = c[o >> 2];
                    n = n + 4 | 0;
                    o = o + 4 | 0
                } while ((n | 0) < (p | 0))
            } while ((D | 0) != (a | 0));
            i = j;
            return
        }
        while (0);
        a = y;
        if ((a | 0) == (h | 0)) {
            i = j;
            return
        } else {
            E = z;
            F = a
        }
        do {
            E = E + -60 | 0;
            F = F + -60 | 0;
            n = E + 0 | 0;
            o = F + 0 | 0;
            p = n + 60 | 0;
            do {
                c[n >> 2] =
                c[o >> 2];
                n = n + 4 | 0;
                o = o + 4 | 0
            } while ((n | 0) < (p | 0))
        } while ((F | 0) != (h | 0));
        i = j;
        return
    }
    function Pl(a, b, d, e, f, g) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        h = i;
        i = i + 32 | 0;
        j = h;
        if ((e | 0) == 2) {
            k = b + -20 | 0;
            if (!(nb[c[d >> 2] & 31](k, a) | 0)) {
                i = h;
                return
            }
            c[j + 0 >> 2] = c[a + 0 >> 2];
            c[j + 4 >> 2] = c[a + 4 >> 2];
            c[j + 8 >> 2] = c[a + 8 >> 2];
            c[j + 12 >> 2] = c[a + 12 >> 2];
            c[j + 16 >> 2] = c[a + 16 >> 2];
            c[a + 0 >> 2] = c[k + 0 >> 2];
            c[a + 4 >> 2] = c[k + 4 >> 2];
            c[a + 8 >> 2] = c[k + 8 >> 2];
            c[a + 12 >> 2] = c[k + 12 >> 2];
            c[a + 16 >> 2] = c[k + 16 >> 2];
            c[k + 0 >> 2] = c[j + 0 >> 2];
            c[k + 4 >> 2] = c[j + 4 >> 2];
            c[k + 8 >> 2] = c[j + 8 >> 2];
            c[k + 12 >> 2] = c[j + 12 >> 2];
            c[k + 16 >> 2] = c[j + 16 >> 2];
            i = h;
            return
        } else if ((e | 0) == 1 | (e | 0) == 0) {
            i = h;
            return
        } else {
            if ((e | 0) < 129) {
                if ((a | 0) == (b | 0)) {
                    i = h;
                    return
                }
                k = a + 20 | 0;
                if ((k | 0) == (b | 0)) {
                    i = h;
                    return
                } else
                    l = k;
                do {
                    c[j + 0 >> 2] = c[l + 0 >> 2];
                    c[j + 4 >> 2] = c[l + 4 >> 2];
                    c[j + 8 >> 2] = c[l + 8 >> 2];
                    c[j + 12 >> 2] = c[l + 12 >> 2];
                    c[j + 16 >> 2] = c[l + 16 >> 2];
                    a:
                    do if ((l | 0) == (a | 0))
                        m = a;
                    else {
                        k = l;
                        while (1) {
                            n = k;
                            k = k + -20 | 0;
                            if (!(nb[c[d >> 2] & 31](j, k) | 0)) {
                                m = n;
                                break a
                            }
                            c[n + 0 >> 2] = c[k + 0 >> 2];
                            c[n + 4 >> 2] = c[k + 4 >> 2];
                            c[n + 8 >> 2] = c[k + 8 >> 2];
                            c[n + 12 >> 2] =
                            c[k + 12 >> 2];
                            c[n + 16 >> 2] = c[k + 16 >> 2];
                            if ((k | 0) == (a | 0)) {
                                m = a;
                                break
                            }
                        }
                    }
                    while (0);
                    c[m + 0 >> 2] = c[j + 0 >> 2];
                    c[m + 4 >> 2] = c[j + 4 >> 2];
                    c[m + 8 >> 2] = c[j + 8 >> 2];
                    c[m + 12 >> 2] = c[j + 12 >> 2];
                    c[m + 16 >> 2] = c[j + 16 >> 2];
                    l = l + 20 | 0
                } while ((l | 0) != (b | 0));
                i = h;
                return
            }
            l = (e | 0) / 2 | 0;
            j = a + (l * 20 | 0) | 0;
            if ((e | 0) > (g | 0)) {
                Pl(a, j, d, l, f, g);
                m = e - l | 0;
                Pl(j, b, d, m, f, g);
                Rl(a, j, b, d, l, m, f, g);
                i = h;
                return
            }
            Ql(a, j, d, l, f);
            g = f + (l * 20 | 0) | 0;
            Ql(j, b, d, e - l | 0, g);
            l = f + (e * 20 | 0) | 0;
            b:
            do if ((e + 1 | 0) >>> 0 < 3) {
                o = a;
                p = g
            } else {
                b = a;
                j = f;
                m = g;
                while (1) {
                    if ((m | 0) == (l | 0))
                        break;
                    if (nb[c[d >> 2] & 31](m, j) | 0) {
                        c[b + 0 >>
                        2] = c[m + 0 >> 2];
                        c[b + 4 >> 2] = c[m + 4 >> 2];
                        c[b + 8 >> 2] = c[m + 8 >> 2];
                        c[b + 12 >> 2] = c[m + 12 >> 2];
                        c[b + 16 >> 2] = c[m + 16 >> 2];
                        q = m + 20 | 0;
                        r = j
                    } else {
                        c[b + 0 >> 2] = c[j + 0 >> 2];
                        c[b + 4 >> 2] = c[j + 4 >> 2];
                        c[b + 8 >> 2] = c[j + 8 >> 2];
                        c[b + 12 >> 2] = c[j + 12 >> 2];
                        c[b + 16 >> 2] = c[j + 16 >> 2];
                        q = m;
                        r = j + 20 | 0
                    }
                    k = b + 20 | 0;
                    if ((r | 0) == (g | 0)) {
                        o = k;
                        p = q;
                        break b
                    } else {
                        b = k;
                        j = r;
                        m = q
                    }
                }
                if ((j | 0) == (g | 0)) {
                    i = h;
                    return
                } else {
                    s = j;
                    t = b
                }
                while (1) {
                    c[t + 0 >> 2] = c[s + 0 >> 2];
                    c[t + 4 >> 2] = c[s + 4 >> 2];
                    c[t + 8 >> 2] = c[s + 8 >> 2];
                    c[t + 12 >> 2] = c[s + 12 >> 2];
                    c[t + 16 >> 2] = c[s + 16 >> 2];
                    s = s + 20 | 0;
                    if ((s | 0) == (g | 0))
                        break;
                    else
                        t = t + 20 | 0
                }
                i = h;
                return
            }
            while (0);
            if ((p | 0) == (l | 0)) {
                i = h;
                return
            } else {
                u = o;
                v = p
            }
            while (1) {
                c[u + 0 >> 2] = c[v + 0 >> 2];
                c[u + 4 >> 2] = c[v + 4 >> 2];
                c[u + 8 >> 2] = c[v + 8 >> 2];
                c[u + 12 >> 2] = c[v + 12 >> 2];
                c[u + 16 >> 2] = c[v + 16 >> 2];
                v = v + 20 | 0;
                if ((v | 0) == (l | 0))
                    break;
                else
                    u = u + 20 | 0
            }
            i = h;
            return
        }
    }
    function Ql(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0;
        g = i;
        if ((e | 0) == 1) {
            if ((f | 0) == 0) {
                i = g;
                return
            }
            c[f + 0 >> 2] = c[a + 0 >> 2];
            c[f + 4 >> 2] = c[a + 4 >> 2];
            c[f + 8 >> 2] = c[a + 8 >> 2];
            c[f + 12 >> 2] = c[a + 12 >> 2];
            c[f + 16 >> 2] = c[a + 16 >> 2];
            i = g;
            return
        } else if ((e | 0) ==
        0) {
            i = g;
            return
        } else if ((e | 0) == 2) {
            h = b + -20 | 0;
            j = (f | 0) == 0;
            if (nb[c[d >> 2] & 31](h, a) | 0) {
                if (!j) {
                    c[f + 0 >> 2] = c[h + 0 >> 2];
                    c[f + 4 >> 2] = c[h + 4 >> 2];
                    c[f + 8 >> 2] = c[h + 8 >> 2];
                    c[f + 12 >> 2] = c[h + 12 >> 2];
                    c[f + 16 >> 2] = c[h + 16 >> 2]
                }
                k = f + 20 | 0;
                c[k + 0 >> 2] = c[a + 0 >> 2];
                c[k + 4 >> 2] = c[a + 4 >> 2];
                c[k + 8 >> 2] = c[a + 8 >> 2];
                c[k + 12 >> 2] = c[a + 12 >> 2];
                c[k + 16 >> 2] = c[a + 16 >> 2];
                i = g;
                return
            } else {
                if (!j) {
                    c[f + 0 >> 2] = c[a + 0 >> 2];
                    c[f + 4 >> 2] = c[a + 4 >> 2];
                    c[f + 8 >> 2] = c[a + 8 >> 2];
                    c[f + 12 >> 2] = c[a + 12 >> 2];
                    c[f + 16 >> 2] = c[a + 16 >> 2]
                }
                j = f + 20 | 0;
                c[j + 0 >> 2] = c[h + 0 >> 2];
                c[j + 4 >> 2] = c[h + 4 >> 2];
                c[j + 8 >> 2] = c[h + 8 >> 2];
                c[j +
                12 >> 2] = c[h + 12 >> 2];
                c[j + 16 >> 2] = c[h + 16 >> 2];
                i = g;
                return
            }
        } else {
            if ((e | 0) < 9) {
                if ((a | 0) == (b | 0)) {
                    i = g;
                    return
                }
                if ((f | 0) == 0)
                    l = 0;
                else {
                    c[f + 0 >> 2] = c[a + 0 >> 2];
                    c[f + 4 >> 2] = c[a + 4 >> 2];
                    c[f + 8 >> 2] = c[a + 8 >> 2];
                    c[f + 12 >> 2] = c[a + 12 >> 2];
                    c[f + 16 >> 2] = c[a + 16 >> 2];
                    l = f
                }
                h = a + 20 | 0;
                if ((h | 0) == (b | 0)) {
                    i = g;
                    return
                } else {
                    m = h;
                    n = l
                }
                do {
                    l = n;
                    n = n + 20 | 0;
                    if (nb[c[d >> 2] & 31](m, l) | 0) {
                        c[n + 0 >> 2] = c[l + 0 >> 2];
                        c[n + 4 >> 2] = c[l + 4 >> 2];
                        c[n + 8 >> 2] = c[l + 8 >> 2];
                        c[n + 12 >> 2] = c[l + 12 >> 2];
                        c[n + 16 >> 2] = c[l + 16 >> 2];
                        a:
                        do if ((l | 0) == (f | 0))
                            o = f;
                        else {
                            h = l;
                            while (1) {
                                j = h;
                                h = h + -20 | 0;
                                if (!(nb[c[d >> 2] & 31](m,
                                h) | 0)) {
                                    o = j;
                                    break a
                                }
                                c[j + 0 >> 2] = c[h + 0 >> 2];
                                c[j + 4 >> 2] = c[h + 4 >> 2];
                                c[j + 8 >> 2] = c[h + 8 >> 2];
                                c[j + 12 >> 2] = c[h + 12 >> 2];
                                c[j + 16 >> 2] = c[h + 16 >> 2];
                                if ((h | 0) == (f | 0)) {
                                    o = f;
                                    break
                                }
                            }
                        }
                        while (0);
                        c[o + 0 >> 2] = c[m + 0 >> 2];
                        c[o + 4 >> 2] = c[m + 4 >> 2];
                        c[o + 8 >> 2] = c[m + 8 >> 2];
                        c[o + 12 >> 2] = c[m + 12 >> 2];
                        c[o + 16 >> 2] = c[m + 16 >> 2]
                    } else {
                        c[n + 0 >> 2] = c[m + 0 >> 2];
                        c[n + 4 >> 2] = c[m + 4 >> 2];
                        c[n + 8 >> 2] = c[m + 8 >> 2];
                        c[n + 12 >> 2] = c[m + 12 >> 2];
                        c[n + 16 >> 2] = c[m + 16 >> 2]
                    }
                    m = m + 20 | 0
                } while ((m | 0) != (b | 0));
                i = g;
                return
            }
            m = (e | 0) / 2 | 0;
            n = a + (m * 20 | 0) | 0;
            Pl(a, n, d, m, f, m);
            o = e - m | 0;
            Pl(n, b, d, o, f + (m * 20 | 0) | 0, o);
            b:
            do if ((e +
            1 | 0) >>> 0 < 3) {
                p = n;
                q = f
            } else {
                o = n;
                m = a;
                l = f;
                while (1) {
                    if ((o | 0) == (b | 0))
                        break;
                    h = (l | 0) == 0;
                    if (nb[c[d >> 2] & 31](o, m) | 0) {
                        if (!h) {
                            c[l + 0 >> 2] = c[o + 0 >> 2];
                            c[l + 4 >> 2] = c[o + 4 >> 2];
                            c[l + 8 >> 2] = c[o + 8 >> 2];
                            c[l + 12 >> 2] = c[o + 12 >> 2];
                            c[l + 16 >> 2] = c[o + 16 >> 2]
                        }
                        r = m;
                        s = o + 20 | 0
                    } else {
                        if (!h) {
                            c[l + 0 >> 2] = c[m + 0 >> 2];
                            c[l + 4 >> 2] = c[m + 4 >> 2];
                            c[l + 8 >> 2] = c[m + 8 >> 2];
                            c[l + 12 >> 2] = c[m + 12 >> 2];
                            c[l + 16 >> 2] = c[m + 16 >> 2]
                        }
                        r = m + 20 | 0;
                        s = o
                    }
                    h = l + 20 | 0;
                    if ((r | 0) == (n | 0)) {
                        p = s;
                        q = h;
                        break b
                    } else {
                        o = s;
                        m = r;
                        l = h
                    }
                }
                if ((m | 0) == (n | 0)) {
                    i = g;
                    return
                } else {
                    t = m;
                    u = l
                }
                while (1) {
                    if ((u | 0) != 0) {
                        c[u + 0 >> 2] = c[t + 0 >> 2];
                        c[u + 4 >> 2] = c[t + 4 >> 2];
                        c[u + 8 >> 2] = c[t + 8 >> 2];
                        c[u + 12 >> 2] = c[t + 12 >> 2];
                        c[u + 16 >> 2] = c[t + 16 >> 2]
                    }
                    t = t + 20 | 0;
                    if ((t | 0) == (n | 0))
                        break;
                    else
                        u = u + 20 | 0
                }
                i = g;
                return
            }
            while (0);
            if ((p | 0) == (b | 0)) {
                i = g;
                return
            } else {
                v = p;
                w = q
            }
            while (1) {
                if ((w | 0) != 0) {
                    c[w + 0 >> 2] = c[v + 0 >> 2];
                    c[w + 4 >> 2] = c[v + 4 >> 2];
                    c[w + 8 >> 2] = c[v + 8 >> 2];
                    c[w + 12 >> 2] = c[v + 12 >> 2];
                    c[w + 16 >> 2] = c[v + 16 >> 2]
                }
                v = v + 20 | 0;
                if ((v | 0) == (b | 0))
                    break;
                else
                    w = w + 20 | 0
            }
            i = g;
            return
        }
    }
    function Rl(a, b, d, e, f, g, h, j) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        h = h | 0;
        j = j | 0;
        var k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0;
        k = i;
        i = i + 48 | 0;
        l = k + 20 | 0;
        m = k;
        if ((g | 0) == 0) {
            i = k;
            return
        }
        n = a;
        a = b;
        b = d;
        d = f;
        f = g;
        a:
        while (1) {
            g = b;
            o = a;
            p = d;
            q = n;
            r = f;
            while (1) {
                if ((p | 0) == 0) {
                    s = 45;
                    break a
                } else {
                    t = q;
                    u = p
                }
                while (1) {
                    if (nb[c[e >> 2] & 31](o, t) | 0)
                        break;
                    v = u + -1 | 0;
                    if ((v | 0) == 0) {
                        s = 45;
                        break a
                    } else {
                        t = t + 20 | 0;
                        u = v
                    }
                }
                if (!((u | 0) > (j | 0) & (r | 0) > (j | 0))) {
                    s = 8;
                    break a
                }
                if ((u | 0) < (r | 0)) {
                    v = (r | 0) / 2 | 0;
                    w = o + (v * 20 | 0) | 0;
                    x = t;
                    y = t;
                    z = (o - x | 0) / 20 | 0;
                    b:
                    while (1) {
                        A = z;
                        while (1) {
                            if ((A | 0) == 0)
                                break b;
                            B = (A | 0) / 2 | 0;
                            if (nb[c[e >>
                            2] & 31](w, y + (B * 20 | 0) | 0) | 0)
                                A = B;
                            else
                                break
                        }
                        y = y + ((B + 1 | 0) * 20 | 0) | 0;
                        z = A + -1 - B | 0
                    }
                    C = y;
                    D = w;
                    E = (y - x | 0) / 20 | 0;
                    F = v
                } else {
                    if ((u | 0) == 1) {
                        s = 17;
                        break a
                    }
                    z = (u | 0) / 2 | 0;
                    G = t + (z * 20 | 0) | 0;
                    H = o;
                    I = o;
                    J = (g - H | 0) / 20 | 0;
                    c:
                    while (1) {
                        K = J;
                        while (1) {
                            if ((K | 0) == 0)
                                break c;
                            L = (K | 0) / 2 | 0;
                            if (nb[c[e >> 2] & 31](I + (L * 20 | 0) | 0, G) | 0)
                                break;
                            else
                                K = L
                        }
                        I = I + ((L + 1 | 0) * 20 | 0) | 0;
                        J = K + -1 - L | 0
                    }
                    C = G;
                    D = I;
                    E = z;
                    F = (I - H | 0) / 20 | 0
                }
                p = u - E | 0;
                M = r - F | 0;
                d:
                do if ((C | 0) != (o | 0))
                    if ((o | 0) == (D | 0))
                        N = C;
                    else {
                        if ((C + 20 | 0) == (o | 0)) {
                            c[l + 0 >> 2] = c[C + 0 >> 2];
                            c[l + 4 >> 2] = c[C + 4 >> 2];
                            c[l + 8 >> 2] = c[C + 8 >> 2];
                            c[l + 12 >> 2] = c[C +
                            12 >> 2];
                            c[l + 16 >> 2] = c[C + 16 >> 2];
                            J = D - o | 0;
                            Bn(C | 0, o | 0, J | 0) | 0;
                            v = C + (((J | 0) / 20 | 0) * 20 | 0) | 0;
                            c[v + 0 >> 2] = c[l + 0 >> 2];
                            c[v + 4 >> 2] = c[l + 4 >> 2];
                            c[v + 8 >> 2] = c[l + 8 >> 2];
                            c[v + 12 >> 2] = c[l + 12 >> 2];
                            c[v + 16 >> 2] = c[l + 16 >> 2];
                            N = v;
                            break
                        }
                        if ((o + 20 | 0) == (D | 0)) {
                            v = D + -20 | 0;
                            c[l + 0 >> 2] = c[v + 0 >> 2];
                            c[l + 4 >> 2] = c[v + 4 >> 2];
                            c[l + 8 >> 2] = c[v + 8 >> 2];
                            c[l + 12 >> 2] = c[v + 12 >> 2];
                            c[l + 16 >> 2] = c[v + 16 >> 2];
                            J = v - C | 0;
                            v = D + (((J | 0) / -20 | 0) * 20 | 0) | 0;
                            Bn(v | 0, C | 0, J | 0) | 0;
                            c[C + 0 >> 2] = c[l + 0 >> 2];
                            c[C + 4 >> 2] = c[l + 4 >> 2];
                            c[C + 8 >> 2] = c[l + 8 >> 2];
                            c[C + 12 >> 2] = c[l + 12 >> 2];
                            c[C + 16 >> 2] = c[l + 16 >> 2];
                            N = v;
                            break
                        }
                        v = o;
                        J =
                        (v - C | 0) / 20 | 0;
                        x = D;
                        y = (x - v | 0) / 20 | 0;
                        if ((J | 0) == (y | 0)) {
                            v = C;
                            w = o;
                            while (1) {
                                c[l + 0 >> 2] = c[v + 0 >> 2];
                                c[l + 4 >> 2] = c[v + 4 >> 2];
                                c[l + 8 >> 2] = c[v + 8 >> 2];
                                c[l + 12 >> 2] = c[v + 12 >> 2];
                                c[l + 16 >> 2] = c[v + 16 >> 2];
                                c[v + 0 >> 2] = c[w + 0 >> 2];
                                c[v + 4 >> 2] = c[w + 4 >> 2];
                                c[v + 8 >> 2] = c[w + 8 >> 2];
                                c[v + 12 >> 2] = c[w + 12 >> 2];
                                c[v + 16 >> 2] = c[w + 16 >> 2];
                                c[w + 0 >> 2] = c[l + 0 >> 2];
                                c[w + 4 >> 2] = c[l + 4 >> 2];
                                c[w + 8 >> 2] = c[l + 8 >> 2];
                                c[w + 12 >> 2] = c[l + 12 >> 2];
                                c[w + 16 >> 2] = c[l + 16 >> 2];
                                v = v + 20 | 0;
                                if ((v | 0) == (o | 0)) {
                                    N = o;
                                    break d
                                } else
                                    w = w + 20 | 0
                            }
                        } else {
                            O = J;
                            P = y
                        }
                        while (1) {
                            w = (O | 0) % (P | 0) | 0;
                            if ((w | 0) == 0)
                                break;
                            else {
                                v = P;
                                P = w;
                                O =
                                v
                            }
                        }
                        if ((P | 0) != 0) {
                            v = J + -1 | 0;
                            w = C + (P * 20 | 0) | 0;
                            do {
                                K = w;
                                w = w + -20 | 0;
                                c[m + 0 >> 2] = c[w + 0 >> 2];
                                c[m + 4 >> 2] = c[w + 4 >> 2];
                                c[m + 8 >> 2] = c[w + 8 >> 2];
                                c[m + 12 >> 2] = c[w + 12 >> 2];
                                c[m + 16 >> 2] = c[w + 16 >> 2];
                                A = w;
                                Q = K + (v * 20 | 0) | 0;
                                while (1) {
                                    c[A + 0 >> 2] = c[Q + 0 >> 2];
                                    c[A + 4 >> 2] = c[Q + 4 >> 2];
                                    c[A + 8 >> 2] = c[Q + 8 >> 2];
                                    c[A + 12 >> 2] = c[Q + 12 >> 2];
                                    c[A + 16 >> 2] = c[Q + 16 >> 2];
                                    K = (x - Q | 0) / 20 | 0;
                                    if ((J | 0) < (K | 0))
                                        R = Q + (J * 20 | 0) | 0;
                                    else
                                        R = C + ((J - K | 0) * 20 | 0) | 0;
                                    if ((R | 0) == (w | 0))
                                        break;
                                    else {
                                        K = Q;
                                        Q = R;
                                        A = K
                                    }
                                }
                                c[Q + 0 >> 2] = c[m + 0 >> 2];
                                c[Q + 4 >> 2] = c[m + 4 >> 2];
                                c[Q + 8 >> 2] = c[m + 8 >> 2];
                                c[Q + 12 >> 2] = c[m + 12 >> 2];
                                c[Q + 16 >> 2] = c[m +
                                16 >> 2]
                            } while ((w | 0) != (C | 0))
                        }
                        N = C + (y * 20 | 0) | 0
                    }
                else
                    N = D;
                while (0);
                if ((F + E | 0) >= (M + p | 0))
                    break;
                Rl(t, C, N, e, E, F, h, j);
                if ((r | 0) == (F | 0)) {
                    s = 45;
                    break a
                } else {
                    o = D;
                    q = N;
                    r = M
                }
            }
            Rl(N, D, b, e, p, M, h, j);
            if ((F | 0) == 0) {
                s = 45;
                break
            } else {
                n = t;
                a = C;
                b = N;
                d = E;
                f = F
            }
        }
        if ((s | 0) == 8) {
            Sl(t, o, b, e, u, r, h);
            i = k;
            return
        } else if ((s | 0) == 17) {
            c[l + 0 >> 2] = c[t + 0 >> 2];
            c[l + 4 >> 2] = c[t + 4 >> 2];
            c[l + 8 >> 2] = c[t + 8 >> 2];
            c[l + 12 >> 2] = c[t + 12 >> 2];
            c[l + 16 >> 2] = c[t + 16 >> 2];
            c[t + 0 >> 2] = c[o + 0 >> 2];
            c[t + 4 >> 2] = c[o + 4 >> 2];
            c[t + 8 >> 2] = c[o + 8 >> 2];
            c[t + 12 >> 2] = c[o + 12 >> 2];
            c[t + 16 >> 2] = c[o + 16 >> 2];
            c[o + 0 >> 2] =
            c[l + 0 >> 2];
            c[o + 4 >> 2] = c[l + 4 >> 2];
            c[o + 8 >> 2] = c[l + 8 >> 2];
            c[o + 12 >> 2] = c[l + 12 >> 2];
            c[o + 16 >> 2] = c[l + 16 >> 2];
            i = k;
            return
        } else if ((s | 0) == 45) {
            i = k;
            return
        }
    }
    function Sl(a, b, d, e, f, g, h) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0;
        j = i;
        k = a;
        l = b;
        if ((f | 0) <= (g | 0)) {
            a:
            do if ((a | 0) != (b | 0)) {
                g = (((b + -20 + (0 - k) | 0) >>> 0) / 20 | 0) + 1 | 0;
                f = a;
                m = h;
                while (1) {
                    if ((m | 0) != 0) {
                        c[m + 0 >> 2] = c[f + 0 >> 2];
                        c[m + 4 >> 2] = c[f + 4 >> 2];
                        c[m + 8 >> 2] = c[f + 8 >> 2];
                        c[m + 12 >> 2] = c[f + 12 >> 2];
                        c[m + 16 >> 2] = c[f +
                        16 >> 2]
                    }
                    f = f + 20 | 0;
                    if ((f | 0) == (b | 0))
                        break;
                    else
                        m = m + 20 | 0
                }
                m = h + (g * 20 | 0) | 0;
                if ((m | 0) != (h | 0)) {
                    f = a;
                    n = b;
                    o = h;
                    while (1) {
                        if ((n | 0) == (d | 0))
                            break;
                        if (nb[c[e >> 2] & 31](n, o) | 0) {
                            c[f + 0 >> 2] = c[n + 0 >> 2];
                            c[f + 4 >> 2] = c[n + 4 >> 2];
                            c[f + 8 >> 2] = c[n + 8 >> 2];
                            c[f + 12 >> 2] = c[n + 12 >> 2];
                            c[f + 16 >> 2] = c[n + 16 >> 2];
                            p = o;
                            q = n + 20 | 0
                        } else {
                            c[f + 0 >> 2] = c[o + 0 >> 2];
                            c[f + 4 >> 2] = c[o + 4 >> 2];
                            c[f + 8 >> 2] = c[o + 8 >> 2];
                            c[f + 12 >> 2] = c[o + 12 >> 2];
                            c[f + 16 >> 2] = c[o + 16 >> 2];
                            p = o + 20 | 0;
                            q = n
                        }
                        r = f + 20 | 0;
                        if ((p | 0) == (m | 0)) {
                            s = r;
                            t = q;
                            break a
                        } else {
                            f = r;
                            n = q;
                            o = p
                        }
                    }
                    Bn(f | 0, o | 0, m - o | 0) | 0;
                    i = j;
                    return
                } else {
                    s = a;
                    t = b
                }
            } else {
                s =
                a;
                t = b
            }
            while (0);
            Bn(s | 0, t | 0, d - t | 0) | 0;
            i = j;
            return
        }
        if ((b | 0) == (d | 0))
            u = h;
        else {
            t = (((d + -20 + (0 - l) | 0) >>> 0) / 20 | 0) + 1 | 0;
            l = b;
            s = h;
            while (1) {
                if ((s | 0) != 0) {
                    c[s + 0 >> 2] = c[l + 0 >> 2];
                    c[s + 4 >> 2] = c[l + 4 >> 2];
                    c[s + 8 >> 2] = c[l + 8 >> 2];
                    c[s + 12 >> 2] = c[l + 12 >> 2];
                    c[s + 16 >> 2] = c[l + 16 >> 2]
                }
                l = l + 20 | 0;
                if ((l | 0) == (d | 0))
                    break;
                else
                    s = s + 20 | 0
            }
            u = h + (t * 20 | 0) | 0
        }
        t = u;
        b:
        do if ((b | 0) == (a | 0)) {
            v = t;
            w = d
        } else {
            s = t;
            l = b;
            p = u;
            q = d;
            while (1) {
                if ((s | 0) == (h | 0))
                    break;
                k = p + -20 | 0;
                n = l + -20 | 0;
                g = q + -20 | 0;
                if (nb[c[e >> 2] & 31](k, n) | 0) {
                    c[g + 0 >> 2] = c[n + 0 >> 2];
                    c[g + 4 >> 2] = c[n + 4 >> 2];
                    c[g + 8 >> 2] = c[n + 8 >> 2];
                    c[g + 12 >> 2] = c[n + 12 >> 2];
                    c[g + 16 >> 2] = c[n + 16 >> 2];
                    x = n;
                    y = p
                } else {
                    c[g + 0 >> 2] = c[k + 0 >> 2];
                    c[g + 4 >> 2] = c[k + 4 >> 2];
                    c[g + 8 >> 2] = c[k + 8 >> 2];
                    c[g + 12 >> 2] = c[k + 12 >> 2];
                    c[g + 16 >> 2] = c[k + 16 >> 2];
                    x = l;
                    y = k
                }
                k = y;
                if ((x | 0) == (a | 0)) {
                    v = k;
                    w = g;
                    break b
                } else {
                    s = k;
                    l = x;
                    p = y;
                    q = g
                }
            }
            if ((l | 0) == (a | 0)) {
                i = j;
                return
            } else {
                z = q;
                A = l
            }
            do {
                z = z + -20 | 0;
                A = A + -20 | 0;
                c[z + 0 >> 2] = c[A + 0 >> 2];
                c[z + 4 >> 2] = c[A + 4 >> 2];
                c[z + 8 >> 2] = c[A + 8 >> 2];
                c[z + 12 >> 2] = c[A + 12 >> 2];
                c[z + 16 >> 2] = c[A + 16 >> 2]
            } while ((A | 0) != (a | 0));
            i = j;
            return
        }
        while (0);
        a = v;
        if ((a | 0) == (h | 0)) {
            i = j;
            return
        } else {
            B = w;
            C = a
        }
        do {
            B = B + -20 | 0;
            C = C + -20 |
            0;
            c[B + 0 >> 2] = c[C + 0 >> 2];
            c[B + 4 >> 2] = c[C + 4 >> 2];
            c[B + 8 >> 2] = c[C + 8 >> 2];
            c[B + 12 >> 2] = c[C + 12 >> 2];
            c[B + 16 >> 2] = c[C + 16 >> 2]
        } while ((C | 0) != (h | 0));
        i = j;
        return
    }
    function Tl(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0;
        b = i;
        d = a + 4 | 0;
        e = c[d >> 2] | 0;
        if ((e | 0) != (a | 0)) {
            f = e;
            do {
                e = Sm(f) | 0;
                g = c[e >> 2] | 0;
                if ((g | 0) != 0) {
                    h = 0;
                    j = e + 32 | 0;
                    while (1) {
                        k = j + 4 | 0;
                        c[(c[j >> 2] | 0) + 4 >> 2] = c[k >> 2];
                        c[c[k >> 2] >> 2] = c[j >> 2];
                        c[k >> 2] = j;
                        c[j >> 2] = j;
                        h = h + 1 | 0;
                        if ((h | 0) == (g | 0))
                            break;
                        else
                            j = j + 12 | 0
                    }
                }
                Um(a, e);
                f = c[d >> 2] | 0
            } while ((f | 0) != (a | 0))
        }
        f = a + 12 | 0;
        j = a + 20 | 0;
        g = a + 24 | 0;
        c[(c[j >> 2] | 0) +
        4 >> 2] = c[g >> 2];
        c[c[g >> 2] >> 2] = c[j >> 2];
        c[g >> 2] = j;
        c[j >> 2] = j;
        j = a + 16 | 0;
        c[(c[f >> 2] | 0) + 4 >> 2] = c[j >> 2];
        c[c[j >> 2] >> 2] = c[f >> 2];
        c[j >> 2] = f;
        c[f >> 2] = f;
        Vm(a);
        c[(c[a >> 2] | 0) + 4 >> 2] = c[d >> 2];
        c[c[d >> 2] >> 2] = c[a >> 2];
        c[d >> 2] = a;
        c[a >> 2] = a;
        i = b;
        return
    }
    function Ul(a) {
        a = a | 0;
        return
    }
    function Vl(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Wl(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        e = i;
        i = i + 48 | 0;
        f = e + 24 | 0;
        g = e;
        if ((a[d + 38 >> 0] | 0) != 0) {
            i = e;
            return 1
        }
        h = c[d + 12 >> 2] | 0;
        j = bb[c[(c[h >> 2] | 0) + 12 >> 2] &
        7](h) | 0;
        if ((j | 0) <= 0) {
            i = e;
            return 1
        }
        h = d + 24 | 0;
        k = b + 4 | 0;
        l = g + 16 | 0;
        m = g + 20 | 0;
        n = g + 4 | 0;
        o = 0;
        do {
            p = (c[h >> 2] | 0) + (o * 28 | 0) | 0;
            c[f + 0 >> 2] = c[p + 0 >> 2];
            c[f + 4 >> 2] = c[p + 4 >> 2];
            c[f + 8 >> 2] = c[p + 8 >> 2];
            c[f + 12 >> 2] = c[p + 12 >> 2];
            Nk(g, c[k >> 2] | 0, f);
            p = c[l >> 2] | 0;
            q = c[m >> 2] | 0;
            a:
            do if (p >>> 0 < q >>> 0) {
                r = c[g >> 2] | 0;
                s = c[n >> 2] | 0;
                t = p;
                while (1) {
                    u = c[t + 4 >> 2] & 1048575;
                    v = t;
                    t = t + 8 | 0;
                    c[l >> 2] = t;
                    if (u >>> 0 < r >>> 0 | u >>> 0 > s >>> 0)
                        if (t >>> 0 < q >>> 0) {
                            t = t;
                            continue
                        } else
                            break;
                    u = c[v >> 2] | 0;
                    if (!((u | 0) > -1))
                        break a;
                    pb[c[(c[b >> 2] | 0) + 20 >> 2] & 31](b, d, o, u);
                    if (!(t >>> 0 < q >>> 0))
                        break
                }
            }
            while (0);
            o = o + 1 | 0
        } while ((o | 0) != (j | 0));
        i = e;
        return 1
    }
    function Xl(a, b) {
        a = a | 0;
        b = b | 0;
        return 0
    }
    function Yl(b, d, e, f) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0;
        h = i;
        i = i + 48 | 0;
        j = h + 24 | 0;
        l = h;
        m = c[d + 8 >> 2] | 0;
        n = b + 4 | 0;
        o = c[n >> 2] | 0;
        p = (c[o + 96 >> 2] | 0) + (f << 3) | 0;
        q = c[p >> 2] | 0;
        r = c[p + 4 >> 2] | 0;
        s = (c[k >> 2] = q, +g[k >> 2]);
        t = (c[k >> 2] = r, +g[k >> 2]);
        p = (c[o + 104 >> 2] | 0) + (f << 3) | 0;
        u = +g[p >> 2];
        v = +g[p + 4 >> 2];
        if ((c[o + 24 >> 2] | 0) == 0) {
            w = s - +g[m + 28 >> 2];
            x = t - +g[m + 32 >> 2];
            y = +g[m + 40 >> 2];
            z = +g[m + 36 >> 2];
            A = w * y + x * z;
            B = y * x - w * z;
            o = c[d + 12 >> 2] | 0;
            if ((c[o + 4 >> 2] | 0) == 0) {
                w = +g[m + 44 >> 2];
                x = A - w;
                C = +g[m + 48 >> 2];
                D = B - C;
                E = x * y - D * z;
                F = y * D + x * z;
                z = +g[m + 24 >> 2];
                x = +g[m + 20 >> 2];
                G = z;
                H = w + (z * E + x * F);
                I = x;
                J = C + (z * F - E * x)
            } else {
                G = +g[m + 24 >> 2];
                H = A;
                I = +g[m + 20 >> 2];
                J = B
            }
            B = +(+g[m + 12 >> 2] + (H * G - J * I));
            A = +(J * G + H * I + +g[m + 16 >> 2]);
            p = l;
            g[p >> 2] = B;
            g[p + 4 >> 2] = A;
            K = o
        } else {
            o = l;
            c[o >> 2] = q;
            c[o + 4 >> 2] = r;
            K = c[d + 12 >> 2] | 0
        }
        d = l + 8 | 0;
        A = +g[b + 8 >> 2];
        B = +(s + u * A);
        I = +(t + v * A);
        r = d;
        g[r >> 2] = B;
        g[r + 4 >> 2] = I;
        g[l + 16 >> 2] = 1;
        if (!(ob[c[(c[K >> 2] | 0) + 24 >> 2] & 15](K, j, l, m +
        12 | 0, e) | 0)) {
            i = h;
            return
        }
        e = j;
        I = +g[e >> 2];
        B = +g[j + 8 >> 2];
        A = 1 - B;
        j = b + 12 | 0;
        H = +g[j >> 2];
        G = H * (I * .004999999888241291 + (+g[l >> 2] * A + B * +g[d >> 2]) - s);
        s = H * (+g[e + 4 >> 2] * .004999999888241291 + (A * +g[l + 4 >> 2] + B * +g[l + 12 >> 2]) - t);
        t = +G;
        B = +s;
        l = (c[(c[n >> 2] | 0) + 104 >> 2] | 0) + (f << 3) | 0;
        g[l >> 2] = t;
        g[l + 4 >> 2] = B;
        l = c[n >> 2] | 0;
        B = +g[l + 32 >> 2] * .75;
        t = +g[j >> 2] * B * +g[l + 320 >> 2] * B;
        B = (u - G) * t;
        G = (v - s) * t;
        if (!(B != 0 | G != 0)) {
            i = h;
            return
        }
        if ((c[(c[l + 88 >> 2] | 0) + (f << 2) >> 2] & 4 | 0) != 0) {
            i = h;
            return
        }
        j = l + 21 | 0;
        n = l + 112 | 0;
        if ((a[j >> 0] | 0) == 0) {
            xn(c[n >> 2] | 0, 0, c[l + 44 >> 2] << 3 | 0) | 0;
            a[j >>
            0] = 1
        }
        j = c[n >> 2] | 0;
        n = j + (f << 3) | 0;
        g[n >> 2] = B + +g[n >> 2];
        n = j + (f << 3) + 4 | 0;
        g[n >> 2] = G + +g[n >> 2];
        i = h;
        return
    }
    function Zl(a) {
        a = a | 0;
        return
    }
    function _l(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function $l(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0;
        f = i;
        i = i + 32 | 0;
        h = f;
        j = f + 16 | 0;
        k = f + 8 | 0;
        l = a + 4 | 0;
        m = (c[(c[l >> 2] | 0) + 96 >> 2] | 0) + (e << 3) | 0;
        n = c[m + 4 >> 2] | 0;
        o = h;
        c[o >> 2] = c[m >> 2];
        c[o + 4 >> 2] = n;
        n = c[b + 12 >> 2] | 0;
        o = b + 8 | 0;
        mb[c[(c[n >> 2] | 0) + 20 >> 2] & 7](n, (c[o >> 2] | 0) + 12 |
        0, h, j, k, d);
        d = c[l >> 2] | 0;
        if (!(+g[j >> 2] < +g[d + 32 >> 2])) {
            i = f;
            return
        }
        n = c[a + 8 >> 2] | 0;
        if (((n | 0) != 0 ? (c[(c[d + 88 >> 2] | 0) + (e << 2) >> 2] & 65536 | 0) != 0 : 0) ? !(lb[c[(c[n >> 2] | 0) + 12 >> 2] & 7](n, b, d, e) | 0) : 0) {
            i = f;
            return
        }
        d = c[o >> 2] | 0;
        o = d + 60 | 0;
        p = +g[o >> 2];
        q = +g[d + 132 >> 2];
        r = +g[d + 44 >> 2];
        s = +g[d + 48 >> 2];
        t = q * (r * r + s * s);
        s = +g[d + 140 >> 2] + t - t;
        if (q > 0)
            u = 1 / q;
        else
            u = 0;
        if (s > 0)
            v = 1 / s;
        else
            v = 0;
        n = c[l >> 2] | 0;
        if ((c[(c[n + 88 >> 2] | 0) + (e << 2) >> 2] & 4 | 0) == 0) {
            s = +g[n + 36 >> 2] * 1.3333333730697632;
            w = s * +g[n + 28 >> 2] * s
        } else
            w = 0;
        a = k + 4 | 0;
        s = (+g[h >> 2] - p) * +g[a >> 2] - (+g[h + 4 >> 2] - +g[o +
        4 >> 2]) * +g[k >> 2];
        p = u + w + s * v * s;
        o = n + 232 | 0;
        h = n + 236 | 0;
        m = c[h >> 2] | 0;
        x = n + 240 | 0;
        y = c[x >> 2] | 0;
        if ((m | 0) >= (y | 0) ? (z = (y | 0) == 0 ? 256 : y << 1, (y | 0) < (z | 0)) : 0) {
            y = n + 244 | 0;
            n = Em(c[y >> 2] | 0, z * 28 | 0) | 0;
            A = c[o >> 2] | 0;
            if ((A | 0) != 0) {
                An(n | 0, A | 0, (c[h >> 2] | 0) * 28 | 0) | 0;
                Fm(c[y >> 2] | 0, c[o >> 2] | 0, (c[x >> 2] | 0) * 28 | 0)
            }
            c[x >> 2] = z;
            c[o >> 2] = n;
            B = c[h >> 2] | 0
        } else
            B = m;
        c[h >> 2] = B + 1;
        h = c[o >> 2] | 0;
        c[h + (B * 28 | 0) >> 2] = e;
        c[h + (B * 28 | 0) + 4 >> 2] = d;
        c[h + (B * 28 | 0) + 8 >> 2] = b;
        g[h + (B * 28 | 0) + 12 >> 2] = 1 - +g[j >> 2] * +g[(c[l >> 2] | 0) + 36 >> 2];
        s = +-+g[k >> 2];
        v = +-+g[a >> 2];
        a = h + (B * 28 | 0) + 16 | 0;
        g[a >> 2] = s;
        g[a +
        4 >> 2] = v;
        if (p > 0)
            C = 1 / p;
        else
            C = 0;
        g[h + (B * 28 | 0) + 24 >> 2] = C;
        Tk(c[l >> 2] | 0, e);
        i = f;
        return
    }
    function am(a) {
        a = a | 0;
        return
    }
    function bm(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function sj(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        b = i;
        d = c[a + 102960 >> 2] | 0;
        if ((d | 0) != 0) {
            e = d;
            do {
                d = e;
                e = c[e + 112 >> 2] | 0;
                f = c[d + 116 >> 2] | 0;
                while (1) {
                    if ((f | 0) == 0)
                        break;
                    d = c[f + 4 >> 2] | 0;
                    c[f + 28 >> 2] = 0;
                    nj(f, a);
                    f = d
                }
            } while ((e | 0) != 0)
        }
        e = a + 102968 | 0;
        f = c[e >> 2] | 0;
        if ((f | 0) == 0) {
            g = a + 102880 | 0;
            Ne(g);
            h = a + 76 | 0;
            Xm(h);
            Dm(a);
            i = b;
            return
        }
        d = a + 102876 | 0;
        j = f;
        while (1) {
            if ((c[d >>
            2] & 2 | 0) == 0) {
                f = j + 404 | 0;
                k = c[f >> 2] | 0;
                l = j + 408 | 0;
                if ((k | 0) != 0)
                    c[k + 408 >> 2] = c[l >> 2];
                k = c[l >> 2] | 0;
                if ((k | 0) != 0)
                    c[k + 404 >> 2] = c[f >> 2];
                if ((c[e >> 2] | 0) == (j | 0))
                    c[e >> 2] = c[l >> 2];
                sk(j);
                Fm(a, j, 416);
                m = c[e >> 2] | 0
            } else
                m = j;
            if ((m | 0) == 0)
                break;
            else
                j = m
        }
        g = a + 102880 | 0;
        Ne(g);
        h = a + 76 | 0;
        Xm(h);
        Dm(a);
        i = b;
        return
    }
    function tj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0;
        d = i;
        if ((c[a + 102876 >> 2] & 2 | 0) != 0) {
            i = d;
            return
        }
        e = b + 404 | 0;
        f = c[e >> 2] | 0;
        g = b + 408 | 0;
        if ((f | 0) != 0)
            c[f + 408 >> 2] = c[g >> 2];
        f = c[g >> 2] | 0;
        if ((f | 0) != 0)
            c[f + 404 >> 2] = c[e >> 2];
        e = a + 102968 | 0;
        if ((c[e >> 2] | 0) ==
        (b | 0))
            c[e >> 2] = c[g >> 2];
        sk(b);
        Fm(a, b, 416);
        i = d;
        return
    }
    function uj(a, b) {
        a = a | 0;
        b = b | 0;
        c[a + 102952 >> 2] = b;
        return
    }
    function vj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0;
        d = i;
        if ((c[a + 102876 >> 2] & 2 | 0) != 0) {
            e = 0;
            i = d;
            return e | 0
        }
        f = Em(a, 168) | 0;
        if ((f | 0) == 0)
            g = 0;
        else {
            Hj(f, b, a);
            g = f
        }
        c[g + 108 >> 2] = 0;
        f = a + 102960 | 0;
        c[g + 112 >> 2] = c[f >> 2];
        b = c[f >> 2] | 0;
        if ((b | 0) != 0)
            c[b + 108 >> 2] = g;
        c[f >> 2] = g;
        f = a + 102972 | 0;
        c[f >> 2] = (c[f >> 2] | 0) + 1;
        e = g;
        i = d;
        return e | 0
    }
    function wj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        d = i;
        if ((c[a + 102876 >> 2] & 2 | 0) != 0) {
            i =
            d;
            return
        }
        e = b + 124 | 0;
        f = c[e >> 2] | 0;
        if ((f | 0) != 0) {
            g = a + 102992 | 0;
            h = f;
            do {
                f = h;
                h = c[h + 12 >> 2] | 0;
                j = c[g >> 2] | 0;
                if ((j | 0) == 0)
                    k = f + 4 | 0;
                else {
                    l = f + 4 | 0;
                    gb[c[(c[j >> 2] | 0) + 8 >> 2] & 63](j, c[l >> 2] | 0);
                    k = l
                }
                xj(a, c[k >> 2] | 0);
                c[e >> 2] = h
            } while ((h | 0) != 0)
        }
        c[e >> 2] = 0;
        e = b + 128 | 0;
        h = c[e >> 2] | 0;
        if ((h | 0) != 0) {
            k = a + 102880 | 0;
            g = h;
            do {
                h = g;
                g = c[g + 12 >> 2] | 0;
                Tj(k, c[h + 4 >> 2] | 0)
            } while ((g | 0) != 0)
        }
        c[e >> 2] = 0;
        e = b + 116 | 0;
        g = c[e >> 2] | 0;
        if ((g | 0) == 0)
            m = b + 120 | 0;
        else {
            k = a + 102992 | 0;
            h = a + 102880 | 0;
            l = b + 120 | 0;
            j = g;
            do {
                g = j;
                j = c[j + 4 >> 2] | 0;
                f = c[k >> 2] | 0;
                if ((f | 0) != 0)
                    gb[c[(c[f >> 2] | 0) + 12 >> 2] & 63](f,
                    g);
                pj(g, h);
                nj(g, a);
                Fm(a, g, 44);
                c[e >> 2] = j;
                c[l >> 2] = (c[l >> 2] | 0) + -1
            } while ((j | 0) != 0);
            m = l
        }
        c[e >> 2] = 0;
        c[m >> 2] = 0;
        m = b + 108 | 0;
        e = c[m >> 2] | 0;
        l = b + 112 | 0;
        if ((e | 0) != 0)
            c[e + 112 >> 2] = c[l >> 2];
        e = c[l >> 2] | 0;
        if ((e | 0) != 0)
            c[e + 108 >> 2] = c[m >> 2];
        m = a + 102960 | 0;
        if ((c[m >> 2] | 0) == (b | 0))
            c[m >> 2] = c[l >> 2];
        l = a + 102972 | 0;
        c[l >> 2] = (c[l >> 2] | 0) + -1;
        Ij(b);
        Fm(a, b, 168);
        i = d;
        return
    }
    function xj(d, f) {
        d = d | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        h = i;
        if ((c[d + 102876 >> 2] & 2 | 0) != 0) {
            i = h;
            return
        }
        j = a[f + 61 >> 0] | 0;
        k = f + 8 | 0;
        l = c[k >> 2] | 0;
        m = f + 12 | 0;
        if ((l | 0) != 0)
            c[l + 12 >> 2] =
            c[m >> 2];
        l = c[m >> 2] | 0;
        if ((l | 0) != 0)
            c[l + 8 >> 2] = c[k >> 2];
        k = d + 102964 | 0;
        if ((c[k >> 2] | 0) == (f | 0))
            c[k >> 2] = c[m >> 2];
        m = c[f + 48 >> 2] | 0;
        k = c[f + 52 >> 2] | 0;
        l = m + 4 | 0;
        n = e[l >> 1] | 0;
        if ((n & 2 | 0) == 0) {
            b[l >> 1] = n | 2;
            g[m + 160 >> 2] = 0
        }
        n = k + 4 | 0;
        l = e[n >> 1] | 0;
        if ((l & 2 | 0) == 0) {
            b[n >> 1] = l | 2;
            g[k + 160 >> 2] = 0
        }
        l = f + 24 | 0;
        n = c[l >> 2] | 0;
        o = f + 28 | 0;
        if ((n | 0) != 0)
            c[n + 12 >> 2] = c[o >> 2];
        n = c[o >> 2] | 0;
        if ((n | 0) != 0)
            c[n + 8 >> 2] = c[l >> 2];
        n = m + 124 | 0;
        if ((f + 16 | 0) == (c[n >> 2] | 0))
            c[n >> 2] = c[o >> 2];
        c[l >> 2] = 0;
        c[o >> 2] = 0;
        o = f + 40 | 0;
        l = c[o >> 2] | 0;
        n = f + 44 | 0;
        if ((l | 0) != 0)
            c[l + 12 >> 2] = c[n >> 2];
        l = c[n >> 2] | 0;
        if ((l |
        0) != 0)
            c[l + 8 >> 2] = c[o >> 2];
        l = k + 124 | 0;
        if ((f + 32 | 0) == (c[l >> 2] | 0))
            c[l >> 2] = c[n >> 2];
        c[o >> 2] = 0;
        c[n >> 2] = 0;
        uh(f, d);
        f = d + 102976 | 0;
        c[f >> 2] = (c[f >> 2] | 0) + -1;
        if (!(j << 24 >> 24 == 0)) {
            i = h;
            return
        }
        j = c[k + 128 >> 2] | 0;
        if ((j | 0) == 0) {
            i = h;
            return
        } else
            p = j;
        do {
            if ((c[p >> 2] | 0) == (m | 0)) {
                j = (c[p + 4 >> 2] | 0) + 4 | 0;
                c[j >> 2] = c[j >> 2] | 8
            }
            p = c[p + 12 >> 2] | 0
        } while ((p | 0) != 0);
        i = h;
        return
    }
    function yj(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        e = i;
        if ((c[b + 102876 >> 2] & 2 | 0) != 0) {
            f = 0;
            i = e;
            return f | 0
        }
        g = th(d, b) | 0;
        c[g + 8 >> 2] = 0;
        h = b + 102964 | 0;
        c[g + 12 >> 2] =
        c[h >> 2];
        j = c[h >> 2] | 0;
        if ((j | 0) != 0)
            c[j + 8 >> 2] = g;
        c[h >> 2] = g;
        h = b + 102976 | 0;
        c[h >> 2] = (c[h >> 2] | 0) + 1;
        h = g + 16 | 0;
        c[g + 20 >> 2] = g;
        b = g + 52 | 0;
        c[h >> 2] = c[b >> 2];
        c[g + 24 >> 2] = 0;
        j = g + 48 | 0;
        k = c[j >> 2] | 0;
        l = k + 124 | 0;
        c[g + 28 >> 2] = c[l >> 2];
        m = c[l >> 2] | 0;
        if ((m | 0) == 0)
            n = k;
        else {
            c[m + 8 >> 2] = h;
            n = c[j >> 2] | 0
        }
        c[n + 124 >> 2] = h;
        h = g + 32 | 0;
        c[g + 36 >> 2] = g;
        c[h >> 2] = c[j >> 2];
        c[g + 40 >> 2] = 0;
        j = c[b >> 2] | 0;
        n = j + 124 | 0;
        c[g + 44 >> 2] = c[n >> 2];
        m = c[n >> 2] | 0;
        if ((m | 0) == 0)
            o = j;
        else {
            c[m + 8 >> 2] = h;
            o = c[b >> 2] | 0
        }
        c[o + 124 >> 2] = h;
        h = c[d + 8 >> 2] | 0;
        if ((a[d + 16 >> 0] | 0) != 0) {
            f = g;
            i = e;
            return f | 0
        }
        o = c[(c[d + 12 >>
        2] | 0) + 128 >> 2] | 0;
        if ((o | 0) == 0) {
            f = g;
            i = e;
            return f | 0
        } else
            p = o;
        do {
            if ((c[p >> 2] | 0) == (h | 0)) {
                o = (c[p + 4 >> 2] | 0) + 4 | 0;
                c[o >> 2] = c[o >> 2] | 8
            }
            p = c[p + 12 >> 2] | 0
        } while ((p | 0) != 0);
        f = g;
        i = e;
        return f | 0
    }
    function zj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0;
        d = i;
        if ((c[a + 102876 >> 2] & 2 | 0) != 0) {
            e = 0;
            i = d;
            return e | 0
        }
        f = Em(a, 416) | 0;
        if ((f | 0) == 0)
            g = 0;
        else {
            rk(f, b, a);
            g = f
        }
        c[g + 404 >> 2] = 0;
        f = a + 102968 | 0;
        c[g + 408 >> 2] = c[f >> 2];
        a = c[f >> 2] | 0;
        if ((a | 0) != 0)
            c[a + 404 >> 2] = g;
        c[f >> 2] = g;
        e = g;
        i = d;
        return e | 0
    }
    function Aj(d, f) {
        d = d | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q =
            0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0;
        h = i;
        i = i + 96 | 0;
        j = h + 40 | 0;
        k = h + 8 | 0;
        l = h;
        m = d + 102960 | 0;
        n = c[m >> 2] | 0;
        if ((n | 0) != 0) {
            o = n;
            do {
                n = o + 28 | 0;
                p = o + 12 | 0;
                c[n + 0 >> 2] = c[p + 0 >> 2];
                c[n + 4 >> 2] = c[p + 4 >> 2];
                c[n + 8 >> 2] = c[p + 8 >> 2];
                c[n + 12 >> 2] = c[p + 12 >> 2];
                o = c[o + 112 >> 2] | 0
            } while ((o | 0) != 0)
        }
        o = d + 103020 | 0;
        g[o >> 2] = 0;
        p = d + 103024 | 0;
        g[p >> 2] = 0;
        n = d + 103028 | 0;
        g[n >> 2] = 0;
        q = d + 102972 | 0;
        r = d + 102880 | 0;
        s = d + 76 | 0;
        mf(j, c[q >> 2] | 0, c[d + 102944 >> 2] | 0, c[d + 102976 >> 2] | 0, s, c[d +
        102952 >> 2] | 0);
        t = c[m >> 2] | 0;
        if ((t | 0) != 0) {
            u = t;
            do {
                t = u + 4 | 0;
                b[t >> 1] = b[t >> 1] & 65534;
                u = c[u + 112 >> 2] | 0
            } while ((u | 0) != 0)
        }
        u = c[d + 102940 >> 2] | 0;
        if ((u | 0) != 0) {
            t = u;
            do {
                u = t + 4 | 0;
                c[u >> 2] = c[u >> 2] & -2;
                t = c[t + 12 >> 2] | 0
            } while ((t | 0) != 0)
        }
        t = c[d + 102964 >> 2] | 0;
        if ((t | 0) != 0) {
            u = t;
            do {
                a[u + 60 >> 0] = 0;
                u = c[u + 12 >> 2] | 0
            } while ((u | 0) != 0)
        }
        u = Ym(s, c[q >> 2] << 2) | 0;
        q = c[m >> 2] | 0;
        if ((q | 0) != 0) {
            t = j + 28 | 0;
            v = j + 36 | 0;
            w = j + 32 | 0;
            x = j + 8 | 0;
            y = j + 16 | 0;
            z = j + 12 | 0;
            A = d + 102980 | 0;
            B = d + 102988 | 0;
            C = k + 12 | 0;
            D = k + 16 | 0;
            E = k + 20 | 0;
            F = q;
            do {
                q = F + 4 | 0;
                G = b[q >> 1] | 0;
                if ((G & 35) == 34 ? (c[F >> 2] | 0) != 0 : 0) {
                    c[t >>
                    2] = 0;
                    c[v >> 2] = 0;
                    c[w >> 2] = 0;
                    c[u >> 2] = F;
                    b[q >> 1] = G & 65535 | 1;
                    G = 0;
                    q = 1;
                    while (1) {
                        H = q + -1 | 0;
                        I = c[u + (H << 2) >> 2] | 0;
                        c[I + 8 >> 2] = G;
                        J = c[t >> 2] | 0;
                        c[(c[x >> 2] | 0) + (J << 2) >> 2] = I;
                        c[t >> 2] = J + 1;
                        J = I + 4 | 0;
                        K = e[J >> 1] | 0;
                        if ((K & 2 | 0) == 0) {
                            b[J >> 1] = K | 2;
                            g[I + 160 >> 2] = 0
                        }
                        if ((c[I >> 2] | 0) != 0) {
                            K = c[I + 128 >> 2] | 0;
                            if ((K | 0) == 0)
                                L = H;
                            else {
                                J = K;
                                K = H;
                                while (1) {
                                    M = c[J + 4 >> 2] | 0;
                                    N = M + 4 | 0;
                                    do if ((c[N >> 2] & 7 | 0) == 6 ? (a[(c[M + 48 >> 2] | 0) + 38 >> 0] | 0) == 0 : 0) {
                                        if ((a[(c[M + 52 >> 2] | 0) + 38 >> 0] | 0) != 0) {
                                            O = K;
                                            break
                                        }
                                        P = c[v >> 2] | 0;
                                        c[v >> 2] = P + 1;
                                        c[(c[z >> 2] | 0) + (P << 2) >> 2] = M;
                                        c[N >> 2] = c[N >> 2] | 1;
                                        P = c[J >> 2] | 0;
                                        Q =
                                        P + 4 | 0;
                                        R = b[Q >> 1] | 0;
                                        if (!((R & 1) == 0)) {
                                            O = K;
                                            break
                                        }
                                        c[u + (K << 2) >> 2] = P;
                                        b[Q >> 1] = R & 65535 | 1;
                                        O = K + 1 | 0
                                    } else
                                        O = K;
                                    while (0);
                                    J = c[J + 12 >> 2] | 0;
                                    if ((J | 0) == 0) {
                                        L = O;
                                        break
                                    } else
                                        K = O
                                }
                            }
                            K = c[I + 124 >> 2] | 0;
                            if ((K | 0) == 0)
                                S = L;
                            else {
                                J = K;
                                K = L;
                                while (1) {
                                    N = J + 4 | 0;
                                    M = c[N >> 2] | 0;
                                    do if ((a[M + 60 >> 0] | 0) == 0 ? (R = c[J >> 2] | 0, Q = R + 4 | 0, P = b[Q >> 1] | 0, !((P & 32) == 0)) : 0) {
                                        T = c[w >> 2] | 0;
                                        c[w >> 2] = T + 1;
                                        c[(c[y >> 2] | 0) + (T << 2) >> 2] = M;
                                        a[(c[N >> 2] | 0) + 60 >> 0] = 1;
                                        if (!((P & 1) == 0)) {
                                            U = K;
                                            break
                                        }
                                        c[u + (K << 2) >> 2] = R;
                                        b[Q >> 1] = P & 65535 | 1;
                                        U = K + 1 | 0
                                    } else
                                        U = K;
                                    while (0);
                                    J = c[J + 12 >> 2] | 0;
                                    if ((J | 0) == 0) {
                                        S = U;
                                        break
                                    } else
                                        K =
                                        U
                                }
                            }
                        } else
                            S = H;
                        if ((S | 0) <= 0)
                            break;
                        G = c[t >> 2] | 0;
                        q = S
                    }
                    of(j, k, f, A, (a[B >> 0] | 0) != 0);
                    g[o >> 2] = +g[C >> 2] + +g[o >> 2];
                    g[p >> 2] = +g[D >> 2] + +g[p >> 2];
                    g[n >> 2] = +g[E >> 2] + +g[n >> 2];
                    q = c[t >> 2] | 0;
                    if ((q | 0) > 0) {
                        G = c[x >> 2] | 0;
                        K = 0;
                        do {
                            J = c[G + (K << 2) >> 2] | 0;
                            if ((c[J >> 2] | 0) == 0) {
                                I = J + 4 | 0;
                                b[I >> 1] = b[I >> 1] & 65534
                            }
                            K = K + 1 | 0
                        } while ((K | 0) < (q | 0))
                    }
                }
                F = c[F + 112 >> 2] | 0
            } while ((F | 0) != 0)
        }
        _m(s, u);
        Km(l);
        u = c[m >> 2] | 0;
        if ((u | 0) == 0) {
            Vj(r);
            V = +Mm(l);
            W = d + 103032 | 0;
            g[W >> 2] = V;
            nf(j);
            i = h;
            return
        } else
            X = u;
        do {
            if (!((b[X + 4 >> 1] & 1) == 0) ? (c[X >> 2] | 0) != 0 : 0)
                Lj(X);
            X = c[X + 112 >> 2] | 0
        } while ((X |
        0) != 0);
        Vj(r);
        V = +Mm(l);
        W = d + 103032 | 0;
        g[W >> 2] = V;
        nf(j);
        i = h;
        return
    }
    function Bj(d, f) {
        d = d | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Da = 0,
            Ea = 0,
            Fa = 0,
            Ga = 0,
            Ha = 0,
            Ia = 0,
            Ja = 0,
            Ka = 0,
            La = 0,
            Ma = 0,
            Na = 0,
            Oa = 0,
            Pa = 0,
            Qa = 0,
            Ra = 0,
            Sa = 0,
            Ta = 0,
            Ua = 0,
            Va = 0,
            Wa = 0,
            Xa = 0,
            Ya = 0,
            Za = 0;
        h = i;
        i = i + 336 | 0;
        j = h + 284 | 0;
        l = h + 152 | 0;
        m = h + 144 | 0;
        n = h + 108 | 0;
        o = h + 72 | 0;
        p = h + 64 | 0;
        q = h + 28 | 0;
        r = h;
        s = d + 102880 | 0;
        t = d + 102952 | 0;
        mf(j, 64, 32, 0, d + 76 | 0, c[t >> 2] | 0);
        u = d + 103007 | 0;
        if ((a[u >> 0] | 0) != 0) {
            v = c[d + 102960 >> 2] | 0;
            if ((v | 0) != 0) {
                w = v;
                do {
                    v = w + 4 | 0;
                    b[v >> 1] = b[v >> 1] & 65534;
                    g[w + 76 >> 2] = 0;
                    w = c[w + 112 >> 2] | 0
                } while ((w | 0) != 0)
            }
            w = d + 102940 | 0;
            v = c[w >> 2] | 0;
            if ((v | 0) == 0)
                x = w;
            else {
                y = v;
                do {
                    v = y + 4 | 0;
                    c[v >> 2] = c[v >> 2] & -34;
                    c[y + 128 >> 2] = 0;
                    g[y + 132 >> 2] = 1;
                    y = c[y + 12 >> 2] | 0
                } while ((y | 0) != 0);
                x = w
            }
        } else
            x = d + 102940 | 0;
        w = j + 28 | 0;
        y = j + 36 | 0;
        v = j + 32 |
        0;
        z = j + 8 | 0;
        A = j + 12 | 0;
        B = p + 4 | 0;
        C = j + 40 | 0;
        D = j + 44 | 0;
        E = r + 4 | 0;
        F = r + 8 | 0;
        G = r + 16 | 0;
        H = f + 12 | 0;
        I = r + 12 | 0;
        J = f + 20 | 0;
        K = r + 20 | 0;
        L = r + 24 | 0;
        M = d + 103006 | 0;
        d = l + 16 | 0;
        N = l + 20 | 0;
        O = l + 24 | 0;
        P = l + 44 | 0;
        Q = l + 48 | 0;
        R = l + 52 | 0;
        U = l + 28 | 0;
        V = l + 56 | 0;
        W = l + 92 | 0;
        X = l + 128 | 0;
        Y = m + 4 | 0;
        while (1) {
            Z = c[x >> 2] | 0;
            if ((Z | 0) == 0) {
                _ = 28;
                break
            } else {
                $ = Z;
                aa = 1;
                ba = 0
            }
            while (1) {
                Z = $ + 4 | 0;
                ca = c[Z >> 2] | 0;
                do if ((ca & 4 | 0) != 0 ? (c[$ + 128 >> 2] | 0) <= 8 : 0) {
                    if ((ca & 32 | 0) == 0) {
                        da = c[$ + 48 >> 2] | 0;
                        ea = c[$ + 52 >> 2] | 0;
                        if ((a[da + 38 >> 0] | 0) != 0) {
                            fa = aa;
                            ga = ba;
                            break
                        }
                        if ((a[ea + 38 >> 0] | 0) != 0) {
                            fa = aa;
                            ga = ba;
                            break
                        }
                        ha = c[da + 8 >>
                        2] | 0;
                        ia = c[ea + 8 >> 2] | 0;
                        ja = c[ha >> 2] | 0;
                        ka = c[ia >> 2] | 0;
                        la = b[ha + 4 >> 1] | 0;
                        ma = b[ia + 4 >> 1] | 0;
                        if (!((la & 2) != 0 & (ja | 0) != 0 | (ma & 2) != 0 & (ka | 0) != 0)) {
                            fa = aa;
                            ga = ba;
                            break
                        }
                        if (!((la & 8) != 0 | (ja | 0) != 2 | ((ma & 8) != 0 | (ka | 0) != 2))) {
                            fa = aa;
                            ga = ba;
                            break
                        }
                        ka = ha + 44 | 0;
                        ma = ha + 76 | 0;
                        na = +g[ma >> 2];
                        ja = ia + 44 | 0;
                        la = ia + 76 | 0;
                        oa = +g[la >> 2];
                        if (!(na < oa))
                            if (oa < na) {
                                pa = (na - oa) / (1 - oa);
                                qa = ia + 52 | 0;
                                ra = +g[qa >> 2];
                                sa = ia + 56 | 0;
                                ta = +g[sa >> 2];
                                ua = pa * (+g[ia + 64 >> 2] - ta);
                                g[qa >> 2] = ra + pa * (+g[ia + 60 >> 2] - ra);
                                g[sa >> 2] = ta + ua;
                                sa = ia + 68 | 0;
                                ua = +g[sa >> 2];
                                g[sa >> 2] = ua + pa * (+g[ia + 72 >> 2] - ua);
                                g[la >>
                                2] = na;
                                va = na
                            } else
                                va = na;
                        else {
                            ua = (oa - na) / (1 - na);
                            la = ha + 52 | 0;
                            na = +g[la >> 2];
                            ia = ha + 56 | 0;
                            pa = +g[ia >> 2];
                            ta = ua * (+g[ha + 64 >> 2] - pa);
                            g[la >> 2] = na + ua * (+g[ha + 60 >> 2] - na);
                            g[ia >> 2] = pa + ta;
                            ia = ha + 68 | 0;
                            ta = +g[ia >> 2];
                            g[ia >> 2] = ta + ua * (+g[ha + 72 >> 2] - ta);
                            g[ma >> 2] = oa;
                            va = oa
                        }
                        ma = c[$ + 56 >> 2] | 0;
                        ha = c[$ + 60 >> 2] | 0;
                        c[d >> 2] = 0;
                        c[N >> 2] = 0;
                        g[O >> 2] = 0;
                        c[P >> 2] = 0;
                        c[Q >> 2] = 0;
                        g[R >> 2] = 0;
                        be(l, c[da + 12 >> 2] | 0, ma);
                        be(U, c[ea + 12 >> 2] | 0, ha);
                        wa = V + 0 | 0;
                        xa = ka + 0 | 0;
                        ya = wa + 36 | 0;
                        do {
                            c[wa >> 2] = c[xa >> 2];
                            wa = wa + 4 | 0;
                            xa = xa + 4 | 0
                        } while ((wa | 0) < (ya | 0));
                        wa = W + 0 | 0;
                        xa = ja + 0 | 0;
                        ya = wa + 36 | 0;
                        do {
                            c[wa >> 2] = c[xa >> 2];
                            wa = wa + 4 | 0;
                            xa = xa + 4 | 0
                        } while ((wa | 0) < (ya | 0));
                        g[X >> 2] = 1;
                        Zd(m, l);
                        if ((c[m >> 2] | 0) == 3) {
                            oa = va + (1 - va) * +g[Y >> 2];
                            za = oa < 1 ? oa : 1
                        } else
                            za = 1;
                        g[$ + 132 >> 2] = za;
                        c[Z >> 2] = c[Z >> 2] | 32;
                        Aa = za
                    } else
                        Aa = +g[$ + 132 >> 2];
                    if (Aa < aa) {
                        fa = Aa;
                        ga = $
                    } else {
                        fa = aa;
                        ga = ba
                    }
                } else {
                    fa = aa;
                    ga = ba
                }
                while (0);
                $ = c[$ + 12 >> 2] | 0;
                if (($ | 0) == 0)
                    break;
                else {
                    aa = fa;
                    ba = ga
                }
            }
            if ((ga | 0) == 0 | fa > .9999988079071045) {
                _ = 28;
                break
            }
            Z = c[(c[ga + 48 >> 2] | 0) + 8 >> 2] | 0;
            ca = c[(c[ga + 52 >> 2] | 0) + 8 >> 2] | 0;
            ja = Z + 44 | 0;
            wa = n + 0 | 0;
            xa = ja + 0 | 0;
            ya = wa + 36 | 0;
            do {
                c[wa >> 2] = c[xa >> 2];
                wa = wa + 4 | 0;
                xa = xa +
                4 | 0
            } while ((wa | 0) < (ya | 0));
            ka = ca + 44 | 0;
            wa = o + 0 | 0;
            xa = ka + 0 | 0;
            ya = wa + 36 | 0;
            do {
                c[wa >> 2] = c[xa >> 2];
                wa = wa + 4 | 0;
                xa = xa + 4 | 0
            } while ((wa | 0) < (ya | 0));
            ha = Z + 76 | 0;
            oa = +g[ha >> 2];
            ta = (fa - oa) / (1 - oa);
            ea = Z + 60 | 0;
            ma = Z + 52 | 0;
            oa = +g[ma >> 2];
            da = Z + 64 | 0;
            ia = Z + 56 | 0;
            ua = +g[ia >> 2];
            pa = ta * (+g[da >> 2] - ua);
            g[ma >> 2] = oa + ta * (+g[ea >> 2] - oa);
            g[ia >> 2] = ua + pa;
            ia = Z + 72 | 0;
            ma = Z + 68 | 0;
            pa = +g[ma >> 2];
            ua = pa + ta * (+g[ia >> 2] - pa);
            g[ma >> 2] = ua;
            g[ha >> 2] = fa;
            ha = Z + 52 | 0;
            ma = c[ha >> 2] | 0;
            la = c[ha + 4 >> 2] | 0;
            ha = Z + 60 | 0;
            c[ha >> 2] = ma;
            c[ha + 4 >> 2] = la;
            g[ia >> 2] = ua;
            pa = +T(+ua);
            ha = Z + 20 | 0;
            g[ha >> 2] = pa;
            ta = +S(+ua);
            sa = Z + 24 | 0;
            g[sa >> 2] = ta;
            qa = Z + 12 | 0;
            Ba = Z + 44 | 0;
            ua = +g[Ba >> 2];
            Ca = Z + 48 | 0;
            oa = +g[Ca >> 2];
            na = (c[k >> 2] = ma, +g[k >> 2]) - (ta * ua - pa * oa);
            ra = (c[k >> 2] = la, +g[k >> 2]) - (pa * ua + ta * oa);
            oa = +na;
            na = +ra;
            la = qa;
            g[la >> 2] = oa;
            g[la + 4 >> 2] = na;
            la = ca + 76 | 0;
            na = +g[la >> 2];
            oa = (fa - na) / (1 - na);
            ma = ca + 60 | 0;
            Da = ca + 52 | 0;
            na = +g[Da >> 2];
            Ea = ca + 64 | 0;
            Fa = ca + 56 | 0;
            ra = +g[Fa >> 2];
            ta = oa * (+g[Ea >> 2] - ra);
            g[Da >> 2] = na + oa * (+g[ma >> 2] - na);
            g[Fa >> 2] = ra + ta;
            Fa = ca + 72 | 0;
            Da = ca + 68 | 0;
            ta = +g[Da >> 2];
            ra = ta + oa * (+g[Fa >> 2] - ta);
            g[Da >> 2] = ra;
            g[la >> 2] = fa;
            la = ca + 52 | 0;
            Da = c[la >> 2] | 0;
            Ga =
            c[la + 4 >> 2] | 0;
            la = ca + 60 | 0;
            c[la >> 2] = Da;
            c[la + 4 >> 2] = Ga;
            g[Fa >> 2] = ra;
            ta = +T(+ra);
            la = ca + 20 | 0;
            g[la >> 2] = ta;
            oa = +S(+ra);
            Ha = ca + 24 | 0;
            g[Ha >> 2] = oa;
            Ia = ca + 12 | 0;
            Ja = ca + 44 | 0;
            ra = +g[Ja >> 2];
            Ka = ca + 48 | 0;
            na = +g[Ka >> 2];
            ua = (c[k >> 2] = Da, +g[k >> 2]) - (oa * ra - ta * na);
            pa = (c[k >> 2] = Ga, +g[k >> 2]) - (ta * ra + oa * na);
            na = +ua;
            ua = +pa;
            Ga = Ia;
            g[Ga >> 2] = na;
            g[Ga + 4 >> 2] = ua;
            xi(ga, c[t >> 2] | 0);
            Ga = ga + 4 | 0;
            Da = c[Ga >> 2] | 0;
            c[Ga >> 2] = Da & -33;
            La = ga + 128 | 0;
            c[La >> 2] = (c[La >> 2] | 0) + 1;
            if ((Da & 6 | 0) != 6) {
                c[Ga >> 2] = Da & -37;
                wa = ja + 0 | 0;
                xa = n + 0 | 0;
                ya = wa + 36 | 0;
                do {
                    c[wa >> 2] = c[xa >> 2];
                    wa = wa + 4 | 0;
                    xa =
                    xa + 4 | 0
                } while ((wa | 0) < (ya | 0));
                wa = ka + 0 | 0;
                xa = o + 0 | 0;
                ya = wa + 36 | 0;
                do {
                    c[wa >> 2] = c[xa >> 2];
                    wa = wa + 4 | 0;
                    xa = xa + 4 | 0
                } while ((wa | 0) < (ya | 0));
                ua = +g[ia >> 2];
                na = +T(+ua);
                g[ha >> 2] = na;
                pa = +S(+ua);
                g[sa >> 2] = pa;
                ua = +g[Ba >> 2];
                oa = +g[Ca >> 2];
                ra = +(+g[ea >> 2] - (pa * ua - na * oa));
                ta = +(+g[da >> 2] - (na * ua + pa * oa));
                ka = qa;
                g[ka >> 2] = ra;
                g[ka + 4 >> 2] = ta;
                ta = +g[Fa >> 2];
                ra = +T(+ta);
                g[la >> 2] = ra;
                oa = +S(+ta);
                g[Ha >> 2] = oa;
                ta = +g[Ja >> 2];
                pa = +g[Ka >> 2];
                ua = +(+g[ma >> 2] - (oa * ta - ra * pa));
                na = +(+g[Ea >> 2] - (ra * ta + oa * pa));
                ka = Ia;
                g[ka >> 2] = ua;
                g[ka + 4 >> 2] = na;
                continue
            }
            ka = Z + 4 | 0;
            ja = b[ka >>
            1] | 0;
            Da = ja & 65535;
            if ((Da & 2 | 0) == 0) {
                La = (Da | 2) & 65535;
                b[ka >> 1] = La;
                g[Z + 160 >> 2] = 0;
                Ma = La
            } else
                Ma = ja;
            ja = ca + 4 | 0;
            La = e[ja >> 1] | 0;
            if ((La & 2 | 0) == 0) {
                b[ja >> 1] = La | 2;
                g[ca + 160 >> 2] = 0;
                Na = b[ka >> 1] | 0
            } else
                Na = Ma;
            c[w >> 2] = 0;
            c[y >> 2] = 0;
            c[v >> 2] = 0;
            La = Z + 8 | 0;
            c[La >> 2] = 0;
            Da = c[w >> 2] | 0;
            c[(c[z >> 2] | 0) + (Da << 2) >> 2] = Z;
            Oa = Da + 1 | 0;
            c[w >> 2] = Oa;
            Da = ca + 8 | 0;
            c[Da >> 2] = Oa;
            Oa = c[w >> 2] | 0;
            c[(c[z >> 2] | 0) + (Oa << 2) >> 2] = ca;
            c[w >> 2] = Oa + 1;
            Oa = c[y >> 2] | 0;
            c[y >> 2] = Oa + 1;
            c[(c[A >> 2] | 0) + (Oa << 2) >> 2] = ga;
            b[ka >> 1] = Na & 65535 | 1;
            b[ja >> 1] = e[ja >> 1] | 1;
            c[Ga >> 2] = c[Ga >> 2] | 1;
            c[p >> 2] = Z;
            c[B >>
            2] = ca;
            ja = Z;
            ka = 1;
            while (1) {
                a:
                do if ((c[ja >> 2] | 0) == 2 ? (Oa = c[ja + 128 >> 2] | 0, (Oa | 0) != 0) : 0) {
                    Pa = ja + 4 | 0;
                    Qa = Oa;
                    do {
                        if ((c[w >> 2] | 0) == (c[C >> 2] | 0))
                            break a;
                        if ((c[y >> 2] | 0) == (c[D >> 2] | 0))
                            break a;
                        Oa = c[Qa + 4 >> 2] | 0;
                        Ra = Oa + 4 | 0;
                        do if ((c[Ra >> 2] & 1 | 0) == 0) {
                            Sa = c[Qa >> 2] | 0;
                            if (((c[Sa >> 2] | 0) == 2 ? (b[Pa >> 1] & 8) == 0 : 0) ? (b[Sa + 4 >> 1] & 8) == 0 : 0)
                                break;
                            if ((a[(c[Oa + 48 >> 2] | 0) + 38 >> 0] | 0) == 0 ? (a[(c[Oa + 52 >> 2] | 0) + 38 >> 0] | 0) == 0 : 0) {
                                Ta = Sa + 44 | 0;
                                wa = q + 0 | 0;
                                xa = Ta + 0 | 0;
                                ya = wa + 36 | 0;
                                do {
                                    c[wa >> 2] = c[xa >> 2];
                                    wa = wa + 4 | 0;
                                    xa = xa + 4 | 0
                                } while ((wa | 0) < (ya | 0));
                                Ua = Sa + 4 | 0;
                                if ((b[Ua >> 1] & 1) ==
                                0) {
                                    Va = Sa + 76 | 0;
                                    na = +g[Va >> 2];
                                    ua = (fa - na) / (1 - na);
                                    Wa = Sa + 52 | 0;
                                    na = +g[Wa >> 2];
                                    Xa = Sa + 56 | 0;
                                    pa = +g[Xa >> 2];
                                    oa = ua * (+g[Sa + 64 >> 2] - pa);
                                    g[Wa >> 2] = na + ua * (+g[Sa + 60 >> 2] - na);
                                    g[Xa >> 2] = pa + oa;
                                    Xa = Sa + 72 | 0;
                                    Wa = Sa + 68 | 0;
                                    oa = +g[Wa >> 2];
                                    pa = oa + ua * (+g[Xa >> 2] - oa);
                                    g[Wa >> 2] = pa;
                                    g[Va >> 2] = fa;
                                    Va = Sa + 52 | 0;
                                    Wa = c[Va >> 2] | 0;
                                    Ya = c[Va + 4 >> 2] | 0;
                                    Va = Sa + 60 | 0;
                                    c[Va >> 2] = Wa;
                                    c[Va + 4 >> 2] = Ya;
                                    g[Xa >> 2] = pa;
                                    oa = +T(+pa);
                                    g[Sa + 20 >> 2] = oa;
                                    ua = +S(+pa);
                                    g[Sa + 24 >> 2] = ua;
                                    pa = +g[Sa + 44 >> 2];
                                    na = +g[Sa + 48 >> 2];
                                    ta = (c[k >> 2] = Wa, +g[k >> 2]) - (ua * pa - oa * na);
                                    ra = (c[k >> 2] = Ya, +g[k >> 2]) - (oa * pa + ua * na);
                                    na =
                                    +ta;
                                    ta = +ra;
                                    Ya = Sa + 12 | 0;
                                    g[Ya >> 2] = na;
                                    g[Ya + 4 >> 2] = ta
                                }
                                xi(Oa, c[t >> 2] | 0);
                                Ya = c[Ra >> 2] | 0;
                                if ((Ya & 4 | 0) == 0) {
                                    wa = Ta + 0 | 0;
                                    xa = q + 0 | 0;
                                    ya = wa + 36 | 0;
                                    do {
                                        c[wa >> 2] = c[xa >> 2];
                                        wa = wa + 4 | 0;
                                        xa = xa + 4 | 0
                                    } while ((wa | 0) < (ya | 0));
                                    ta = +g[Sa + 72 >> 2];
                                    na = +T(+ta);
                                    g[Sa + 20 >> 2] = na;
                                    ra = +S(+ta);
                                    g[Sa + 24 >> 2] = ra;
                                    ta = +g[Sa + 44 >> 2];
                                    ua = +g[Sa + 48 >> 2];
                                    pa = +(+g[Sa + 60 >> 2] - (ra * ta - na * ua));
                                    oa = +(+g[Sa + 64 >> 2] - (na * ta + ra * ua));
                                    Wa = Sa + 12 | 0;
                                    g[Wa >> 2] = pa;
                                    g[Wa + 4 >> 2] = oa;
                                    break
                                }
                                if ((Ya & 2 | 0) == 0) {
                                    wa = Ta + 0 | 0;
                                    xa = q + 0 | 0;
                                    ya = wa + 36 | 0;
                                    do {
                                        c[wa >> 2] = c[xa >> 2];
                                        wa = wa + 4 | 0;
                                        xa = xa + 4 | 0
                                    } while ((wa | 0) < (ya | 0));
                                    oa = +g[Sa + 72 >> 2];
                                    pa = +T(+oa);
                                    g[Sa + 20 >> 2] = pa;
                                    ua = +S(+oa);
                                    g[Sa + 24 >> 2] = ua;
                                    oa = +g[Sa + 44 >> 2];
                                    ra = +g[Sa + 48 >> 2];
                                    ta = +(+g[Sa + 60 >> 2] - (ua * oa - pa * ra));
                                    na = +(+g[Sa + 64 >> 2] - (pa * oa + ua * ra));
                                    Ta = Sa + 12 | 0;
                                    g[Ta >> 2] = ta;
                                    g[Ta + 4 >> 2] = na;
                                    break
                                }
                                c[Ra >> 2] = Ya | 1;
                                Ta = c[y >> 2] | 0;
                                c[y >> 2] = Ta + 1;
                                c[(c[A >> 2] | 0) + (Ta << 2) >> 2] = Oa;
                                Ta = e[Ua >> 1] | 0;
                                if ((Ta & 1 | 0) != 0)
                                    break;
                                b[Ua >> 1] = Ta | 1;
                                do if ((c[Sa >> 2] | 0) != 0) {
                                    if ((Ta & 2 | 0) != 0)
                                        break;
                                    b[Ua >> 1] = Ta | 3;
                                    g[Sa + 160 >> 2] = 0
                                }
                                while (0);
                                c[Sa + 8 >> 2] = c[w >> 2];
                                Ta = c[w >> 2] | 0;
                                c[(c[z >> 2] | 0) + (Ta << 2) >> 2] = Sa;
                                c[w >> 2] = Ta + 1
                            }
                        }
                        while (0);
                        Qa = c[Qa +
                        12 >> 2] | 0
                    } while ((Qa | 0) != 0)
                }
                while (0);
                if ((ka | 0) >= 2)
                    break;
                ja = c[p + (ka << 2) >> 2] | 0;
                ka = ka + 1 | 0
            }
            na = (1 - fa) * +g[f >> 2];
            g[r >> 2] = na;
            g[E >> 2] = 1 / na;
            g[F >> 2] = 1;
            c[G >> 2] = 20;
            c[I >> 2] = c[H >> 2];
            c[K >> 2] = c[J >> 2];
            a[L >> 0] = 0;
            pf(j, r, c[La >> 2] | 0, c[Da >> 2] | 0);
            ka = c[w >> 2] | 0;
            if ((ka | 0) > 0) {
                ja = ka;
                ka = 0;
                while (1) {
                    Z = c[(c[z >> 2] | 0) + (ka << 2) >> 2] | 0;
                    ca = Z + 4 | 0;
                    b[ca >> 1] = b[ca >> 1] & 65534;
                    if ((c[Z >> 2] | 0) == 2) {
                        Lj(Z);
                        ca = c[Z + 128 >> 2] | 0;
                        if ((ca | 0) != 0) {
                            Z = ca;
                            do {
                                ca = (c[Z + 4 >> 2] | 0) + 4 | 0;
                                c[ca >> 2] = c[ca >> 2] & -34;
                                Z = c[Z + 12 >> 2] | 0
                            } while ((Z | 0) != 0)
                        }
                        Za = c[w >> 2] | 0
                    } else
                        Za = ja;
                    ka = ka + 1 | 0;
                    if ((ka | 0) >= (Za | 0))
                        break;
                    else
                        ja = Za
                }
            }
            Vj(s);
            if ((a[M >> 0] | 0) != 0) {
                _ = 68;
                break
            }
        }
        if ((_ | 0) == 28) {
            a[u >> 0] = 1;
            nf(j);
            i = h;
            return
        } else if ((_ | 0) == 68) {
            a[u >> 0] = 0;
            nf(j);
            i = h;
            return
        }
    }
    function Cj(b, d, e, f, h) {
        b = b | 0;
        d = +d;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0;
        j = i;
        i = i + 64 | 0;
        k = j + 24 | 0;
        l = j + 32 | 0;
        m = j + 16 | 0;
        n = j + 8 | 0;
        o = j;
        Km(k);
        p = b + 102876 | 0;
        q = c[p >> 2] | 0;
        if ((q & 1 | 0) == 0)
            r = q;
        else {
            Vj(b + 102880 | 0);
            q = c[p >> 2] & -2;
            c[p >> 2] = q;
            r = q
        }
        c[p >> 2] = r | 2;
        g[l >> 2] = d;
        c[l + 12 >> 2] = e;
        c[l + 16 >> 2] = f;
        c[l + 20 >> 2] = h;
        if (d > 0)
            g[l + 4 >> 2] =
            1 / d;
        else
            g[l + 4 >> 2] = 0;
        h = b + 103E3 | 0;
        g[l + 8 >> 2] = +g[h >> 2] * d;
        a[l + 24 >> 0] = a[b + 103004 >> 0] | 0;
        Km(m);
        Uj(b + 102880 | 0);
        g[b + 103012 >> 2] = +Mm(m);
        if ((a[b + 103007 >> 0] | 0) != 0 ? +g[l >> 2] > 0 : 0) {
            Km(n);
            m = c[b + 102968 >> 2] | 0;
            if ((m | 0) != 0) {
                f = m;
                do {
                    bl(f, l);
                    f = c[f + 408 >> 2] | 0
                } while ((f | 0) != 0)
            }
            Aj(b, l);
            g[b + 103016 >> 2] = +Mm(n)
        }
        if ((a[b + 103005 >> 0] | 0) != 0) {
            d = +g[l >> 2];
            if (d > 0) {
                Km(o);
                Bj(b, l);
                g[b + 103036 >> 2] = +Mm(o);
                s = 14
            } else
                t = d
        } else
            s = 14;
        if ((s | 0) == 14)
            t = +g[l >> 2];
        if (t > 0)
            g[h >> 2] = +g[l + 4 >> 2];
        l = c[p >> 2] | 0;
        if ((l & 4 | 0) == 0) {
            u = l & -3;
            c[p >> 2] = u;
            v = +Mm(k);
            w = b + 103008 | 0;
            g[w >>
            2] = v;
            i = j;
            return
        }
        h = c[b + 102960 >> 2] | 0;
        if ((h | 0) == 0) {
            u = l & -3;
            c[p >> 2] = u;
            v = +Mm(k);
            w = b + 103008 | 0;
            g[w >> 2] = v;
            i = j;
            return
        } else
            x = h;
        do {
            g[x + 92 >> 2] = 0;
            g[x + 96 >> 2] = 0;
            g[x + 100 >> 2] = 0;
            x = c[x + 112 >> 2] | 0
        } while ((x | 0) != 0);
        u = l & -3;
        c[p >> 2] = u;
        v = +Mm(k);
        w = b + 103008 | 0;
        g[w >> 2] = v;
        i = j;
        return
    }
    function Dj(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        g = a + 102880 | 0;
        c[f >> 2] = g;
        c[f + 4 >> 2] = b;
        Gj(g, f, d);
        f = c[a + 102968 >> 2] | 0;
        if ((f | 0) == 0) {
            i = e;
            return
        }
        a = f;
        do {
            if (nb[c[(c[b >> 2] | 0) + 16 >> 2] & 31](b, a) | 0)
                pl(a, b, d);
            a = c[a + 408 >> 2] | 0
        } while ((a | 0) != 0);
        i = e;
        return
    }
    function Ej(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        f = i;
        i = i + 32 | 0;
        h = f + 24 | 0;
        j = f;
        k = a + 102880 | 0;
        c[h >> 2] = k;
        c[h + 4 >> 2] = b;
        g[j + 16 >> 2] = 1;
        l = d;
        m = c[l + 4 >> 2] | 0;
        n = j;
        c[n >> 2] = c[l >> 2];
        c[n + 4 >> 2] = m;
        m = e;
        n = c[m + 4 >> 2] | 0;
        l = j + 8 | 0;
        c[l >> 2] = c[m >> 2];
        c[l + 4 >> 2] = n;
        Fj(k, h, j);
        j = c[a + 102968 >> 2] | 0;
        if ((j | 0) == 0) {
            i = f;
            return
        }
        a = j;
        do {
            if (nb[c[(c[b >> 2] | 0) + 16 >> 2] & 31](b, a) | 0)
                ql(a, b, d, e);
            a = c[a + 408 >> 2] | 0
        } while ((a | 0) != 0);
        i = f;
        return
    }
    function Fj(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r =
            0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0;
        e = i;
        i = i + 1088 | 0;
        f = e + 1064 | 0;
        h = e + 1056 | 0;
        j = e + 20 | 0;
        k = e;
        l = d;
        m = +g[l >> 2];
        n = +g[l + 4 >> 2];
        l = d + 8 | 0;
        o = l;
        p = +g[o >> 2];
        q = p - m;
        p = +g[o + 4 >> 2] - n;
        r = +Q(+(q * q + p * p));
        if (r < 1.1920928955078125E-7) {
            s = p;
            t = q
        } else {
            u = 1 / r;
            s = p * u;
            t = q * u
        }
        u = -s;
        r = s < -0 ? u : s;
        if (t > 0)
            v = t;
        else
            v = -t;
        s = +g[d + 16 >> 2];
        w = m + q * s;
        x = n + p * s;
        o = j + 4 | 0;
        c[j >> 2] = o;
        y = j + 1028 |
        0;
        c[y >> 2] = 0;
        z = j + 1032 | 0;
        c[z >> 2] = 256;
        A = c[j >> 2] | 0;
        c[A + (c[y >> 2] << 2) >> 2] = c[a >> 2];
        B = c[y >> 2] | 0;
        C = B + 1 | 0;
        c[y >> 2] = C;
        a:
        do if ((B | 0) > -1) {
            D = a + 4 | 0;
            E = k + 8 | 0;
            F = k + 16 | 0;
            G = f + 8 | 0;
            H = k + 4 | 0;
            I = k + 8 | 0;
            J = k + 12 | 0;
            K = h + 4 | 0;
            L = b + 4 | 0;
            M = C;
            N = n < x ? n : x;
            O = m < w ? m : w;
            P = n > x ? n : x;
            R = m > w ? m : w;
            S = A;
            T = s;
            while (1) {
                U = M;
                V = S;
                while (1) {
                    W = U + -1 | 0;
                    c[y >> 2] = W;
                    X = c[V + (W << 2) >> 2] | 0;
                    if ((X | 0) == -1) {
                        Y = W;
                        Z = V
                    } else {
                        _ = c[D >> 2] | 0;
                        $ = +g[_ + (X * 36 | 0) + 8 >> 2];
                        aa = +g[_ + (X * 36 | 0) + 12 >> 2];
                        ba = +g[_ + (X * 36 | 0) >> 2];
                        ca = +g[_ + (X * 36 | 0) + 4 >> 2];
                        if (O - $ > 0 | N - aa > 0 | ba - R > 0 | ca - P > 0) {
                            da = N;
                            ea = O;
                            fa = P;
                            ga = R;
                            ha = T;
                            break
                        }
                        ia =
                        (m - ($ + ba) * .5) * u + t * (n - (aa + ca) * .5);
                        if (ia > 0)
                            ja = ia;
                        else
                            ja = -ia;
                        if (ja - (r * ($ - ba) * .5 + v * (aa - ca) * .5) > 0) {
                            da = N;
                            ea = O;
                            fa = P;
                            ga = R;
                            ha = T;
                            break
                        }
                        ka = _ + (X * 36 | 0) + 24 | 0;
                        if ((c[ka >> 2] | 0) == -1) {
                            la = 17;
                            break
                        }
                        if ((W | 0) == (c[z >> 2] | 0) ? (c[z >> 2] = W << 1, ma = Pm(W << 3) | 0, c[j >> 2] = ma, An(ma | 0, V | 0, c[y >> 2] << 2 | 0) | 0, (V | 0) != (o | 0)) : 0)
                            Qm(V);
                        ma = c[j >> 2] | 0;
                        c[ma + (c[y >> 2] << 2) >> 2] = c[ka >> 2];
                        ka = (c[y >> 2] | 0) + 1 | 0;
                        c[y >> 2] = ka;
                        W = _ + (X * 36 | 0) + 28 | 0;
                        if ((ka | 0) == (c[z >> 2] | 0) ? (c[z >> 2] = ka << 1, _ = Pm(ka << 3) | 0, c[j >> 2] = _, An(_ | 0, ma | 0, c[y >> 2] << 2 | 0) | 0, (ma | 0) != (o | 0)) : 0)
                            Qm(ma);
                        ma = c[j >>
                        2] | 0;
                        c[ma + (c[y >> 2] << 2) >> 2] = c[W >> 2];
                        W = (c[y >> 2] | 0) + 1 | 0;
                        c[y >> 2] = W;
                        Y = W;
                        Z = ma
                    }
                    if ((Y | 0) > 0) {
                        U = Y;
                        V = Z
                    } else
                        break a
                }
                if ((la | 0) == 17) {
                    la = 0;
                    c[k + 0 >> 2] = 0;
                    c[k + 4 >> 2] = 0;
                    c[k + 8 >> 2] = 0;
                    c[k + 12 >> 2] = 0;
                    V = d;
                    U = c[V + 4 >> 2] | 0;
                    ma = k;
                    c[ma >> 2] = c[V >> 2];
                    c[ma + 4 >> 2] = U;
                    U = l;
                    ma = c[U + 4 >> 2] | 0;
                    V = E;
                    c[V >> 2] = c[U >> 2];
                    c[V + 4 >> 2] = ma;
                    g[F >> 2] = T;
                    ma = c[(c[(c[b >> 2] | 0) + 4 >> 2] | 0) + (X * 36 | 0) + 16 >> 2] | 0;
                    V = c[ma + 16 >> 2] | 0;
                    U = c[V + 12 >> 2] | 0;
                    if (ob[c[(c[U >> 2] | 0) + 24 >> 2] & 15](U, f, k, (c[V + 8 >> 2] | 0) + 12 | 0, c[ma + 20 >> 2] | 0) | 0) {
                        ca = +g[G >> 2];
                        aa = 1 - ca;
                        ba = aa * +g[H >> 2] + ca * +g[J >> 2];
                        g[h >> 2] = +g[k >>
                        2] * aa + ca * +g[I >> 2];
                        g[K >> 2] = ba;
                        ma = c[L >> 2] | 0;
                        na = +fb[c[(c[ma >> 2] | 0) + 8 >> 2] & 1](ma, V, h, f, ca)
                    } else
                        na = +g[F >> 2];
                    if (na == 0)
                        break a;
                    if (na > 0) {
                        ca = m + q * na;
                        ba = n + p * na;
                        da = n < ba ? n : ba;
                        ea = m < ca ? m : ca;
                        fa = n > ba ? n : ba;
                        ga = m > ca ? m : ca;
                        ha = na
                    } else {
                        da = N;
                        ea = O;
                        fa = P;
                        ga = R;
                        ha = T
                    }
                }
                V = c[y >> 2] | 0;
                if ((V | 0) <= 0)
                    break a;
                M = V;
                N = da;
                O = ea;
                P = fa;
                R = ga;
                S = c[j >> 2] | 0;
                T = ha
            }
        }
        while (0);
        y = c[j >> 2] | 0;
        if ((y | 0) == (o | 0)) {
            i = e;
            return
        }
        Qm(y);
        c[j >> 2] = 0;
        i = e;
        return
    }
    function Gj(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0;
        e = i;
        i = i + 1040 | 0;
        f = e;
        h = f + 4 | 0;
        c[f >> 2] = h;
        j = f + 1028 | 0;
        c[j >> 2] = 0;
        k = f + 1032 | 0;
        c[k >> 2] = 256;
        l = c[f >> 2] | 0;
        c[l + (c[j >> 2] << 2) >> 2] = c[a >> 2];
        m = c[j >> 2] | 0;
        n = m + 1 | 0;
        c[j >> 2] = n;
        a:
        do if ((m | 0) > -1) {
            o = a + 4 | 0;
            p = d + 4 | 0;
            q = d + 8 | 0;
            r = d + 12 | 0;
            s = b + 4 | 0;
            t = n;
            u = l;
            while (1) {
                v = t + -1 | 0;
                c[j >> 2] = v;
                w = c[u + (v << 2) >> 2] | 0;
                do if (!((w | 0) == -1) ? (x = c[o >> 2] | 0, !((+g[d >> 2] - +g[x + (w * 36 | 0) + 8 >> 2] > 0 ? 1 : +g[p >> 2] - +g[x + (w * 36 | 0) + 12 >> 2] > 0) | +g[x + (w * 36 | 0) >> 2] - +g[q >> 2] > 0 | +g[x + (w * 36 | 0) + 4 >> 2] - +g[r >> 2] > 0)) : 0) {
                    y = x + (w * 36 | 0) + 24 | 0;
                    if ((c[y >> 2] | 0) == -1) {
                        z = c[s >> 2] | 0;
                        if (!(nb[c[(c[z >>
                        2] | 0) + 8 >> 2] & 31](z, c[(c[(c[(c[b >> 2] | 0) + 4 >> 2] | 0) + (w * 36 | 0) + 16 >> 2] | 0) + 16 >> 2] | 0) | 0))
                            break a;
                        A = c[j >> 2] | 0;
                        break
                    }
                    if ((v | 0) == (c[k >> 2] | 0) ? (c[k >> 2] = v << 1, z = Pm(v << 3) | 0, c[f >> 2] = z, An(z | 0, u | 0, c[j >> 2] << 2 | 0) | 0, (u | 0) != (h | 0)) : 0)
                        Qm(u);
                    z = c[f >> 2] | 0;
                    c[z + (c[j >> 2] << 2) >> 2] = c[y >> 2];
                    y = (c[j >> 2] | 0) + 1 | 0;
                    c[j >> 2] = y;
                    B = x + (w * 36 | 0) + 28 | 0;
                    if ((y | 0) == (c[k >> 2] | 0) ? (c[k >> 2] = y << 1, x = Pm(y << 3) | 0, c[f >> 2] = x, An(x | 0, z | 0, c[j >> 2] << 2 | 0) | 0, (z | 0) != (h | 0)) : 0)
                        Qm(z);
                    c[(c[f >> 2] | 0) + (c[j >> 2] << 2) >> 2] = c[B >> 2];
                    B = (c[j >> 2] | 0) + 1 | 0;
                    c[j >> 2] = B;
                    A = B
                } else
                    A = v;
                while (0);
                if ((A |
                0) <= 0)
                    break a;
                t = A;
                u = c[f >> 2] | 0
            }
        }
        while (0);
        A = c[f >> 2] | 0;
        if ((A | 0) == (h | 0)) {
            i = e;
            return
        }
        Qm(A);
        c[f >> 2] = 0;
        i = e;
        return
    }
    function Hj(d, e, f) {
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0;
        h = i;
        j = d + 12 | 0;
        k = d + 28 | 0;
        l = d + 80 | 0;
        m = d + 4 | 0;
        n = (a[e + 39 >> 0] | 0) == 0 ? 0 : 8;
        b[m >> 1] = n;
        if ((a[e + 38 >> 0] | 0) == 0)
            o = n;
        else {
            p = (n & 65535 | 16) & 65535;
            b[m >> 1] = p;
            o = p
        }
        if ((a[e + 36 >> 0] | 0) == 0)
            q = o;
        else {
            p = (o & 65535 | 4) & 65535;
            b[m >> 1] = p;
            q = p
        }
        if ((a[e + 37 >> 0] | 0) == 0)
            r = q;
        else {
            p = (q & 65535 | 2) & 65535;
            b[m >> 1] = p;
            r = p
        }
        if ((a[e + 40 >> 0] |
        0) != 0)
            b[m >> 1] = r & 65535 | 32;
        c[d + 104 >> 2] = f;
        f = e + 4 | 0;
        r = c[f >> 2] | 0;
        m = c[f + 4 >> 2] | 0;
        f = j;
        c[f >> 2] = r;
        c[f + 4 >> 2] = m;
        f = e + 12 | 0;
        s = +g[f >> 2];
        g[d + 20 >> 2] = +T(+s);
        g[d + 24 >> 2] = +S(+s);
        c[k + 0 >> 2] = c[j + 0 >> 2];
        c[k + 4 >> 2] = c[j + 4 >> 2];
        c[k + 8 >> 2] = c[j + 8 >> 2];
        c[k + 12 >> 2] = c[j + 12 >> 2];
        g[d + 44 >> 2] = 0;
        g[d + 48 >> 2] = 0;
        j = d + 52 | 0;
        c[j >> 2] = r;
        c[j + 4 >> 2] = m;
        j = d + 60 | 0;
        c[j >> 2] = r;
        c[j + 4 >> 2] = m;
        g[d + 68 >> 2] = +g[f >> 2];
        g[d + 72 >> 2] = +g[f >> 2];
        g[d + 76 >> 2] = 0;
        c[d + 124 >> 2] = 0;
        c[d + 128 >> 2] = 0;
        c[d + 108 >> 2] = 0;
        c[d + 112 >> 2] = 0;
        f = e + 16 | 0;
        m = c[f + 4 >> 2] | 0;
        j = l;
        c[j >> 2] = c[f >> 2];
        c[j + 4 >> 2] = m;
        g[d + 88 >> 2] = +g[e +
        24 >> 2];
        g[d + 148 >> 2] = +g[e + 28 >> 2];
        g[d + 152 >> 2] = +g[e + 32 >> 2];
        g[d + 156 >> 2] = +g[e + 48 >> 2];
        g[d + 92 >> 2] = 0;
        g[d + 96 >> 2] = 0;
        g[d + 100 >> 2] = 0;
        g[d + 160 >> 2] = 0;
        m = c[e >> 2] | 0;
        c[d >> 2] = m;
        j = d + 132 | 0;
        if ((m | 0) == 2) {
            g[j >> 2] = 1;
            g[d + 136 >> 2] = 1;
            t = d + 140 | 0;
            g[t >> 2] = 0;
            u = d + 144 | 0;
            g[u >> 2] = 0;
            v = e + 44 | 0;
            w = c[v >> 2] | 0;
            x = d + 164 | 0;
            c[x >> 2] = w;
            y = d + 116 | 0;
            c[y >> 2] = 0;
            z = d + 120 | 0;
            c[z >> 2] = 0;
            i = h;
            return
        } else {
            g[j >> 2] = 0;
            g[d + 136 >> 2] = 0;
            t = d + 140 | 0;
            g[t >> 2] = 0;
            u = d + 144 | 0;
            g[u >> 2] = 0;
            v = e + 44 | 0;
            w = c[v >> 2] | 0;
            x = d + 164 | 0;
            c[x >> 2] = w;
            y = d + 116 | 0;
            c[y >> 2] = 0;
            z = d + 120 | 0;
            c[z >> 2] = 0;
            i = h;
            return
        }
    }
    function Ij(a) {
        a =
        a | 0;
        return
    }
    function Jj(a, d) {
        a = a | 0;
        d = d | 0;
        var f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0;
        f = i;
        i = i + 16 | 0;
        h = f;
        j = a + 104 | 0;
        if ((c[(c[j >> 2] | 0) + 102876 >> 2] & 2 | 0) != 0) {
            i = f;
            return
        }
        if ((c[a >> 2] | 0) == (d | 0)) {
            i = f;
            return
        }
        c[a >> 2] = d;
        Kj(a);
        if ((c[a >> 2] | 0) == 0 ? (g[a + 80 >> 2] = 0, g[a + 84 >> 2] = 0, g[a + 88 >> 2] = 0, l = +g[a + 72 >> 2], g[a + 68 >> 2] = l, d = a + 60 | 0, m = c[d >> 2] | 0, n = c[d + 4 >> 2] | 0, d = a + 52 | 0, c[d >> 2] = m, c[d + 4 >> 2] = n, o = +T(+l), g[h + 8 >> 2] = o, p = +S(+l), g[h + 12 >> 2] = p, l = +g[a + 44 >> 2], q = +g[a + 48 >> 2], r = (c[k >> 2] = m, +g[k >> 2]) - (p * l - o * q), s = (c[k >> 2] = n, +g[k >> 2]) - (o *
        l + p * q), q = +r, r = +s, n = h, g[n >> 2] = q, g[n + 4 >> 2] = r, n = (c[j >> 2] | 0) + 102880 | 0, m = c[a + 116 >> 2] | 0, (m | 0) != 0) : 0) {
            d = a + 12 | 0;
            t = m;
            do {
                qj(t, n, h, d);
                t = c[t + 4 >> 2] | 0
            } while ((t | 0) != 0)
        }
        t = a + 4 | 0;
        d = e[t >> 1] | 0;
        if ((d & 2 | 0) == 0) {
            b[t >> 1] = d | 2;
            g[a + 160 >> 2] = 0
        }
        g[a + 92 >> 2] = 0;
        g[a + 96 >> 2] = 0;
        g[a + 100 >> 2] = 0;
        d = a + 128 | 0;
        t = c[d >> 2] | 0;
        if ((t | 0) != 0) {
            h = t;
            do {
                t = h;
                h = c[h + 12 >> 2] | 0;
                Tj((c[j >> 2] | 0) + 102880 | 0, c[t + 4 >> 2] | 0)
            } while ((h | 0) != 0)
        }
        c[d >> 2] = 0;
        d = (c[j >> 2] | 0) + 102880 | 0;
        j = c[a + 116 >> 2] | 0;
        if ((j | 0) == 0) {
            i = f;
            return
        } else
            u = j;
        do {
            j = c[u + 28 >> 2] | 0;
            if ((j | 0) > 0) {
                a = u + 24 | 0;
                h = 0;
                do {
                    Re(d,
                    c[(c[a >> 2] | 0) + (h * 28 | 0) + 24 >> 2] | 0);
                    h = h + 1 | 0
                } while ((h | 0) != (j | 0))
            }
            u = c[u + 4 >> 2] | 0
        } while ((u | 0) != 0);
        i = f;
        return
    }
    function Kj(a) {
        a = a | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0;
        d = i;
        i = i + 16 | 0;
        e = d;
        f = a + 132 | 0;
        h = a + 136 | 0;
        j = a + 140 | 0;
        k = a + 144 | 0;
        l = a + 44 | 0;
        g[l >> 2] = 0;
        g[a + 48 >> 2] = 0;
        c[f + 0 >> 2] = 0;
        c[f + 4 >> 2] = 0;
        c[f + 8 >> 2] = 0;
        c[f + 12 >> 2] = 0;
        if ((c[a >> 2] | 0) >>> 0 < 2) {
            m = a + 12 | 0;
            n = c[m >> 2] | 0;
            o = c[m + 4 >> 2] | 0;
            m = a + 52 | 0;
            c[m >> 2] = n;
            c[m + 4 >> 2] = o;
            m = a + 60 | 0;
            c[m >> 2] = n;
            c[m + 4 >> 2] = o;
            g[a + 68 >> 2] = +g[a + 72 >> 2];
            i = d;
            return
        }
        o = 8784;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        o = c[a + 116 >> 2] | 0;
        if ((o | 0) != 0) {
            m = e + 4 | 0;
            n = e + 8 | 0;
            r = e + 12 | 0;
            s = 0;
            t = 0;
            u = p;
            v = q;
            w = o;
            while (1) {
                x = +g[w >> 2];
                if (x == 0) {
                    y = s;
                    z = t;
                    A = u;
                    B = v
                } else {
                    o = c[w + 12 >> 2] | 0;
                    kb[c[(c[o >> 2] | 0) + 32 >> 2] & 31](o, e, x);
                    x = +g[e >> 2];
                    C = x + +g[f >> 2];
                    g[f >> 2] = C;
                    D = u + x * +g[m >> 2];
                    E = v + x * +g[n >> 2];
                    x = +g[r >> 2] + +g[j >> 2];
                    g[j >> 2] = x;
                    y = x;
                    z = C;
                    A = D;
                    B = E
                }
                w = c[w + 4 >> 2] | 0;
                if ((w | 0) == 0)
                    break;
                else {
                    s = y;
                    t = z;
                    u = A;
                    v = B
                }
            }
            if (z > 0) {
                v = 1 / z;
                g[h >> 2] = v;
                F = y;
                G = A * v;
                H = B * v;
                I = z
            } else {
                J = B;
                K = A;
                L = y;
                M = 10
            }
        } else {
            J =
            q;
            K = p;
            L = 0;
            M = 10
        }
        if ((M | 0) == 10) {
            g[f >> 2] = 1;
            g[h >> 2] = 1;
            F = L;
            G = K;
            H = J;
            I = 1
        }
        if (F > 0 ? (b[a + 4 >> 1] & 16) == 0 : 0) {
            J = F - (H * H + G * G) * I;
            g[j >> 2] = J;
            N = 1 / J
        } else {
            g[j >> 2] = 0;
            N = 0
        }
        g[k >> 2] = N;
        k = a + 60 | 0;
        j = k;
        N = +g[j >> 2];
        J = +g[j + 4 >> 2];
        I = +G;
        F = +H;
        j = l;
        g[j >> 2] = I;
        g[j + 4 >> 2] = F;
        F = +g[a + 24 >> 2];
        I = +g[a + 20 >> 2];
        K = +g[a + 12 >> 2] + (F * G - I * H);
        L = G * I + F * H + +g[a + 16 >> 2];
        H = +K;
        F = +L;
        j = k;
        g[j >> 2] = H;
        g[j + 4 >> 2] = F;
        j = a + 52 | 0;
        g[j >> 2] = H;
        g[j + 4 >> 2] = F;
        F = +g[a + 88 >> 2];
        j = a + 80 | 0;
        g[j >> 2] = +g[j >> 2] - F * (L - J);
        j = a + 84 | 0;
        g[j >> 2] = F * (K - N) + +g[j >> 2];
        i = d;
        return
    }
    function Lj(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f =
            0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        b = i;
        i = i + 16 | 0;
        d = b;
        e = +g[a + 68 >> 2];
        f = +T(+e);
        g[d + 8 >> 2] = f;
        h = +S(+e);
        g[d + 12 >> 2] = h;
        e = +g[a + 44 >> 2];
        j = +g[a + 48 >> 2];
        k = +(+g[a + 52 >> 2] - (h * e - f * j));
        l = +(+g[a + 56 >> 2] - (e * f + h * j));
        m = d;
        g[m >> 2] = k;
        g[m + 4 >> 2] = l;
        m = (c[a + 104 >> 2] | 0) + 102880 | 0;
        n = c[a + 116 >> 2] | 0;
        if ((n | 0) == 0) {
            i = b;
            return
        }
        o = a + 12 | 0;
        a = n;
        do {
            qj(a, m, d, o);
            a = c[a + 4 >> 2] | 0
        } while ((a | 0) != 0);
        i = b;
        return
    }
    function Mj(a, d) {
        a = a | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        e = i;
        f = a + 104 | 0;
        h = c[f >> 2] | 0;
        if ((c[h + 102876 >> 2] & 2 | 0) != 0) {
            j = 0;
            i = e;
            return j | 0
        }
        k = Em(h, 44) | 0;
        if ((k | 0) ==
        0)
            l = 0;
        else {
            lj(k);
            l = k
        }
        mj(l, h, a, d);
        if (!((b[a + 4 >> 1] & 32) == 0))
            oj(l, (c[f >> 2] | 0) + 102880 | 0, a + 12 | 0);
        d = a + 116 | 0;
        c[l + 4 >> 2] = c[d >> 2];
        c[d >> 2] = l;
        d = a + 120 | 0;
        c[d >> 2] = (c[d >> 2] | 0) + 1;
        c[l + 8 >> 2] = a;
        if (+g[l >> 2] > 0)
            Kj(a);
        a = (c[f >> 2] | 0) + 102876 | 0;
        c[a >> 2] = c[a >> 2] | 1;
        j = l;
        i = e;
        return j | 0
    }
    function Nj(a, d) {
        a = a | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        e = i;
        f = a + 104 | 0;
        if ((c[(c[f >> 2] | 0) + 102876 >> 2] & 2 | 0) != 0) {
            i = e;
            return
        }
        g = a + 116 | 0;
        h = c[g >> 2] | 0;
        a:
        do if ((h | 0) != 0) {
            j = h;
            k = g;
            while (1) {
                l = j + 4 | 0;
                if ((j | 0) == (d | 0))
                    break;
                j = c[l >> 2] | 0;
                if ((j | 0) == 0)
                    break a;
                else
                    k =
                    l
            }
            c[k >> 2] = c[d + 4 >> 2]
        }
        while (0);
        g = c[a + 128 >> 2] | 0;
        if ((g | 0) != 0) {
            h = g;
            do {
                g = c[h + 4 >> 2] | 0;
                h = c[h + 12 >> 2] | 0;
                if ((c[g + 48 >> 2] | 0) == (d | 0) ? 1 : (c[g + 52 >> 2] | 0) == (d | 0))
                    Tj((c[f >> 2] | 0) + 102880 | 0, g)
            } while ((h | 0) != 0)
        }
        h = c[f >> 2] | 0;
        if (!((b[a + 4 >> 1] & 32) == 0))
            pj(d, h + 102880 | 0);
        nj(d, h);
        c[d + 8 >> 2] = 0;
        c[d + 4 >> 2] = 0;
        Fm(h, d, 44);
        d = a + 120 | 0;
        c[d >> 2] = (c[d >> 2] | 0) + -1;
        Kj(a);
        i = e;
        return
    }
    function Oj(a, d) {
        a = a | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0;
        e = i;
        if ((c[(c[a + 104 >> 2] | 0) + 102876 >> 2] & 2 | 0) != 0) {
            i = e;
            return
        }
        if ((c[a >> 2] | 0) != 2) {
            i = e;
            return
        }
        f =
        a + 136 | 0;
        g[f >> 2] = 0;
        h = a + 140 | 0;
        g[h >> 2] = 0;
        j = a + 144 | 0;
        g[j >> 2] = 0;
        l = +g[d >> 2];
        m = !(l <= 0) ? l : 1;
        g[a + 132 >> 2] = m;
        g[f >> 2] = 1 / m;
        l = +g[d + 12 >> 2];
        if (l > 0 ? (b[a + 4 >> 1] & 16) == 0 : 0) {
            n = +g[d + 4 >> 2];
            o = +g[d + 8 >> 2];
            p = l - m * (n * n + o * o);
            g[h >> 2] = p;
            g[j >> 2] = 1 / p
        }
        j = a + 60 | 0;
        h = j;
        p = +g[h >> 2];
        o = +g[h + 4 >> 2];
        h = d + 4 | 0;
        d = c[h >> 2] | 0;
        f = c[h + 4 >> 2] | 0;
        h = a + 44 | 0;
        c[h >> 2] = d;
        c[h + 4 >> 2] = f;
        n = +g[a + 24 >> 2];
        m = (c[k >> 2] = d, +g[k >> 2]);
        l = +g[a + 20 >> 2];
        q = (c[k >> 2] = f, +g[k >> 2]);
        r = +g[a + 12 >> 2] + (n * m - l * q);
        s = m * l + n * q + +g[a + 16 >> 2];
        q = +r;
        n = +s;
        f = j;
        g[f >> 2] = q;
        g[f + 4 >> 2] = n;
        f = a + 52 | 0;
        g[f >> 2] = q;
        g[f + 4 >> 2] =
        n;
        n = +g[a + 88 >> 2];
        f = a + 80 | 0;
        g[f >> 2] = +g[f >> 2] - n * (s - o);
        f = a + 84 | 0;
        g[f >> 2] = n * (r - p) + +g[f >> 2];
        i = e;
        return
    }
    function Pj(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0;
        e = i;
        if ((c[b >> 2] | 0) != 2 ? (c[d >> 2] | 0) != 2 : 0)
            f = 0;
        else
            g = 3;
        a:
        do if ((g | 0) == 3) {
            h = c[b + 124 >> 2] | 0;
            if ((h | 0) == 0)
                f = 1;
            else {
                j = h;
                while (1) {
                    if ((c[j >> 2] | 0) == (d | 0) ? (a[(c[j + 4 >> 2] | 0) + 61 >> 0] | 0) == 0 : 0) {
                        f = 0;
                        break a
                    }
                    j = c[j + 12 >> 2] | 0;
                    if ((j | 0) == 0) {
                        f = 1;
                        break
                    }
                }
            }
        }
        while (0);
        i = e;
        return f | 0
    }
    function Qj(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = +d;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0;
        e = i;
        f = c[a + 104 >>
        2] | 0;
        if ((c[f + 102876 >> 2] & 2 | 0) != 0) {
            i = e;
            return
        }
        h = a + 12 | 0;
        j = +T(+d);
        g[a + 20 >> 2] = j;
        l = +S(+d);
        g[a + 24 >> 2] = l;
        m = b;
        b = c[m >> 2] | 0;
        n = c[m + 4 >> 2] | 0;
        m = h;
        c[m >> 2] = b;
        c[m + 4 >> 2] = n;
        m = a + 28 | 0;
        c[m + 0 >> 2] = c[h + 0 >> 2];
        c[m + 4 >> 2] = c[h + 4 >> 2];
        c[m + 8 >> 2] = c[h + 8 >> 2];
        c[m + 12 >> 2] = c[h + 12 >> 2];
        o = +g[a + 44 >> 2];
        p = +g[a + 48 >> 2];
        q = (c[k >> 2] = b, +g[k >> 2]) + (l * o - j * p);
        r = o * j + l * p + (c[k >> 2] = n, +g[k >> 2]);
        p = +q;
        q = +r;
        n = a + 60 | 0;
        g[n >> 2] = p;
        g[n + 4 >> 2] = q;
        g[a + 72 >> 2] = d;
        n = a + 52 | 0;
        g[n >> 2] = p;
        g[n + 4 >> 2] = q;
        g[a + 68 >> 2] = d;
        n = f + 102880 | 0;
        f = c[a + 116 >> 2] | 0;
        if ((f | 0) == 0) {
            i = e;
            return
        } else
            s = f;
        do {
            qj(s,
            n, h, h);
            s = c[s + 4 >> 2] | 0
        } while ((s | 0) != 0);
        i = e;
        return
    }
    function Rj(a) {
        a = a | 0;
        return
    }
    function Sj(a) {
        a = a | 0;
        var b = 0;
        b = i;
        Me(a);
        c[a + 60 >> 2] = 0;
        c[a + 64 >> 2] = 0;
        c[a + 68 >> 2] = 6800;
        c[a + 72 >> 2] = 6808;
        c[a + 76 >> 2] = 0;
        i = b;
        return
    }
    function Tj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        d = i;
        e = c[(c[b + 48 >> 2] | 0) + 8 >> 2] | 0;
        f = c[(c[b + 52 >> 2] | 0) + 8 >> 2] | 0;
        g = c[a + 72 >> 2] | 0;
        if ((g | 0) != 0 ? (c[b + 4 >> 2] & 2 | 0) != 0 : 0)
            gb[c[(c[g >> 2] | 0) + 12 >> 2] & 63](g, b);
        g = b + 8 | 0;
        h = c[g >> 2] | 0;
        j = b + 12 | 0;
        if ((h | 0) != 0)
            c[h + 12 >> 2] = c[j >> 2];
        h = c[j >> 2] | 0;
        if ((h | 0) != 0)
            c[h +
            8 >> 2] = c[g >> 2];
        g = a + 60 | 0;
        if ((c[g >> 2] | 0) == (b | 0))
            c[g >> 2] = c[j >> 2];
        j = b + 24 | 0;
        g = c[j >> 2] | 0;
        h = b + 28 | 0;
        if ((g | 0) != 0)
            c[g + 12 >> 2] = c[h >> 2];
        g = c[h >> 2] | 0;
        if ((g | 0) != 0)
            c[g + 8 >> 2] = c[j >> 2];
        j = e + 128 | 0;
        if ((b + 16 | 0) == (c[j >> 2] | 0))
            c[j >> 2] = c[h >> 2];
        h = b + 40 | 0;
        j = c[h >> 2] | 0;
        e = b + 44 | 0;
        if ((j | 0) != 0)
            c[j + 12 >> 2] = c[e >> 2];
        j = c[e >> 2] | 0;
        if ((j | 0) != 0)
            c[j + 8 >> 2] = c[h >> 2];
        h = f + 128 | 0;
        if ((b + 32 | 0) != (c[h >> 2] | 0)) {
            k = a + 76 | 0;
            l = c[k >> 2] | 0;
            vi(b, l);
            m = a + 64 | 0;
            n = c[m >> 2] | 0;
            o = n + -1 | 0;
            c[m >> 2] = o;
            i = d;
            return
        }
        c[h >> 2] = c[e >> 2];
        k = a + 76 | 0;
        l = c[k >> 2] | 0;
        vi(b, l);
        m = a + 64 | 0;
        n = c[m >> 2] | 0;
        o =
        n + -1 | 0;
        c[m >> 2] = o;
        i = d;
        return
    }
    function Uj(a) {
        a = a | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0;
        d = i;
        e = c[a + 60 >> 2] | 0;
        if ((e | 0) == 0) {
            i = d;
            return
        }
        f = a + 4 | 0;
        h = a + 72 | 0;
        j = a + 68 | 0;
        k = e;
        while (1) {
            e = c[k + 48 >> 2] | 0;
            l = c[k + 52 >> 2] | 0;
            m = c[k + 56 >> 2] | 0;
            n = c[k + 60 >> 2] | 0;
            o = c[e + 8 >> 2] | 0;
            p = c[l + 8 >> 2] | 0;
            q = k + 4 | 0;
            do if ((c[q >> 2] & 8 | 0) == 0)
                r = 11;
            else {
                if (!(Pj(p, o) | 0)) {
                    s = c[k + 12 >> 2] | 0;
                    Tj(a, k);
                    t = s;
                    break
                }
                s = c[j >> 2] | 0;
                if ((s | 0) != 0 ? !(hb[c[(c[s >> 2] | 0) + 8 >> 2] & 15](s, e, l) | 0) : 0) {
                    s = c[k + 12 >> 2] | 0;
                    Tj(a, k);
                    t = s;
                    break
                }
                c[q >> 2] = c[q >> 2] &
                -9;
                r = 11
            }
            while (0);
            do if ((r | 0) == 11) {
                r = 0;
                if ((b[o + 4 >> 1] & 2) == 0)
                    u = 0;
                else
                    u = (c[o >> 2] | 0) != 0;
                if ((b[p + 4 >> 1] & 2) == 0)
                    v = 0;
                else
                    v = (c[p >> 2] | 0) != 0;
                if (!(u | v)) {
                    t = c[k + 12 >> 2] | 0;
                    break
                }
                q = c[(c[e + 24 >> 2] | 0) + (m * 28 | 0) + 24 >> 2] | 0;
                s = c[(c[l + 24 >> 2] | 0) + (n * 28 | 0) + 24 >> 2] | 0;
                w = c[f >> 2] | 0;
                if ((+g[w + (s * 36 | 0) >> 2] - +g[w + (q * 36 | 0) + 8 >> 2] > 0 ? 1 : +g[w + (s * 36 | 0) + 4 >> 2] - +g[w + (q * 36 | 0) + 12 >> 2] > 0) | +g[w + (q * 36 | 0) >> 2] - +g[w + (s * 36 | 0) + 8 >> 2] > 0 | +g[w + (q * 36 | 0) + 4 >> 2] - +g[w + (s * 36 | 0) + 12 >> 2] > 0) {
                    s = c[k + 12 >> 2] | 0;
                    Tj(a, k);
                    t = s;
                    break
                } else {
                    xi(k, c[h >> 2] | 0);
                    t = c[k + 12 >> 2] | 0;
                    break
                }
            }
            while (0);
            if ((t | 0) == 0)
                break;
            else
                k = t
        }
        i = d;
        return
    }
    function Vj(a) {
        a = a | 0;
        var b = 0;
        b = i;
        Wj(a, a);
        i = b;
        return
    }
    function Wj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        d = i;
        i = i + 16 | 0;
        e = d;
        f = a + 52 | 0;
        c[f >> 2] = 0;
        g = a + 40 | 0;
        h = c[g >> 2] | 0;
        if ((h | 0) > 0) {
            j = a + 32 | 0;
            k = a + 56 | 0;
            l = a + 4 | 0;
            m = h;
            h = 0;
            while (1) {
                n = c[(c[j >> 2] | 0) + (h << 2) >> 2] | 0;
                c[k >> 2] = n;
                if ((n | 0) == -1)
                    o = m;
                else {
                    Yj(a, a, (c[l >> 2] | 0) + (n * 36 | 0) | 0);
                    o = c[g >> 2] | 0
                }
                h = h + 1 | 0;
                if ((h | 0) >= (o | 0))
                    break;
                else
                    m = o
            }
            p = c[f >> 2] | 0
        } else
            p = 0;
        c[g >> 2] = 0;
        g = a + 44 | 0;
        o = c[g >> 2] | 0;
        c[e >> 2] = 26;
        _j(o, o + (p << 3) |
        0, e);
        if ((c[f >> 2] | 0) <= 0) {
            i = d;
            return
        }
        e = a + 4 | 0;
        a = 0;
        a:
        while (1) {
            p = c[g >> 2] | 0;
            o = p + (a << 3) | 0;
            m = c[e >> 2] | 0;
            h = p + (a << 3) + 4 | 0;
            Xj(b, c[m + ((c[o >> 2] | 0) * 36 | 0) + 16 >> 2] | 0, c[m + ((c[h >> 2] | 0) * 36 | 0) + 16 >> 2] | 0);
            m = c[f >> 2] | 0;
            p = a;
            while (1) {
                l = p + 1 | 0;
                if ((l | 0) >= (m | 0))
                    break a;
                k = c[g >> 2] | 0;
                if ((c[k + (l << 3) >> 2] | 0) != (c[o >> 2] | 0)) {
                    a = l;
                    continue a
                }
                if ((c[k + (l << 3) + 4 >> 2] | 0) == (c[h >> 2] | 0))
                    p = l;
                else {
                    a = l;
                    continue a
                }
            }
        }
        i = d;
        return
    }
    function Xj(d, f, h) {
        d = d | 0;
        f = f | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        j = i;
        k = c[f + 16 >> 2] | 0;
        l = c[h + 16 >> 2] | 0;
        m = c[f + 20 >> 2] | 0;
        f = c[h + 20 >> 2] | 0;
        h = c[k + 8 >> 2] | 0;
        n = c[l + 8 >> 2] | 0;
        if ((h | 0) == (n | 0)) {
            i = j;
            return
        }
        o = c[n + 128 >> 2] | 0;
        a:
        do if ((o | 0) != 0) {
            p = o;
            while (1) {
                if ((c[p >> 2] | 0) == (h | 0)) {
                    q = c[p + 4 >> 2] | 0;
                    r = c[q + 48 >> 2] | 0;
                    s = c[q + 52 >> 2] | 0;
                    t = c[q + 56 >> 2] | 0;
                    u = c[q + 60 >> 2] | 0;
                    if ((r | 0) == (k | 0) & (s | 0) == (l | 0) & (t | 0) == (m | 0) & (u | 0) == (f | 0)) {
                        v = 24;
                        break
                    }
                    if ((r | 0) == (l | 0) & (s | 0) == (k | 0) & (t | 0) == (f | 0) & (u | 0) == (m | 0)) {
                        v = 24;
                        break
                    }
                }
                p = c[p + 12 >> 2] | 0;
                if ((p | 0) == 0)
                    break a
            }
            if ((v | 0) == 24) {
                i = j;
                return
            }
        }
        while (0);
        if (!(Pj(n, h) | 0)) {
            i = j;
            return
        }
        h = c[d + 68 >> 2] | 0;
        if ((h | 0) != 0 ? !(hb[c[(c[h >>
        2] | 0) + 8 >> 2] & 15](h, k, l) | 0) : 0) {
            i = j;
            return
        }
        h = ui(k, m, l, f, c[d + 76 >> 2] | 0) | 0;
        if ((h | 0) == 0) {
            i = j;
            return
        }
        f = c[h + 48 >> 2] | 0;
        l = c[h + 52 >> 2] | 0;
        m = c[f + 8 >> 2] | 0;
        k = c[l + 8 >> 2] | 0;
        c[h + 8 >> 2] = 0;
        n = d + 60 | 0;
        c[h + 12 >> 2] = c[n >> 2];
        v = c[n >> 2] | 0;
        if ((v | 0) != 0)
            c[v + 8 >> 2] = h;
        c[n >> 2] = h;
        n = h + 16 | 0;
        c[h + 20 >> 2] = h;
        c[n >> 2] = k;
        c[h + 24 >> 2] = 0;
        v = m + 128 | 0;
        c[h + 28 >> 2] = c[v >> 2];
        o = c[v >> 2] | 0;
        if ((o | 0) != 0)
            c[o + 8 >> 2] = n;
        c[v >> 2] = n;
        n = h + 32 | 0;
        c[h + 36 >> 2] = h;
        c[n >> 2] = m;
        c[h + 40 >> 2] = 0;
        v = k + 128 | 0;
        c[h + 44 >> 2] = c[v >> 2];
        h = c[v >> 2] | 0;
        if ((h | 0) != 0)
            c[h + 8 >> 2] = n;
        c[v >> 2] = n;
        if ((a[f + 38 >> 0] | 0) == 0 ? (a[l +
        38 >> 0] | 0) == 0 : 0) {
            l = m + 4 | 0;
            f = e[l >> 1] | 0;
            if ((f & 2 | 0) == 0) {
                b[l >> 1] = f | 2;
                g[m + 160 >> 2] = 0
            }
            m = k + 4 | 0;
            f = e[m >> 1] | 0;
            if ((f & 2 | 0) == 0) {
                b[m >> 1] = f | 2;
                g[k + 160 >> 2] = 0
            }
        }
        k = d + 64 | 0;
        c[k >> 2] = (c[k >> 2] | 0) + 1;
        i = j;
        return
    }
    function Yj(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0;
        e = i;
        i = i + 1040 | 0;
        f = e;
        h = f + 4 | 0;
        c[f >> 2] = h;
        j = f + 1028 | 0;
        c[j >> 2] = 0;
        k = f + 1032 | 0;
        c[k >> 2] = 256;
        l = c[f >> 2] | 0;
        c[l + (c[j >> 2] << 2) >> 2] = c[a >> 2];
        m = c[j >> 2] | 0;
        n = m + 1 | 0;
        c[j >> 2] = n;
        a:
        do if ((m | 0) > -1) {
            o = a + 4 | 0;
            p = d + 4 | 0;
            q = d + 8 | 0;
            r =
            d + 12 | 0;
            s = n;
            t = l;
            while (1) {
                u = s + -1 | 0;
                c[j >> 2] = u;
                v = c[t + (u << 2) >> 2] | 0;
                do if (!((v | 0) == -1) ? (w = c[o >> 2] | 0, !((+g[d >> 2] - +g[w + (v * 36 | 0) + 8 >> 2] > 0 ? 1 : +g[p >> 2] - +g[w + (v * 36 | 0) + 12 >> 2] > 0) | +g[w + (v * 36 | 0) >> 2] - +g[q >> 2] > 0 | +g[w + (v * 36 | 0) + 4 >> 2] - +g[r >> 2] > 0)) : 0) {
                    x = w + (v * 36 | 0) + 24 | 0;
                    if ((c[x >> 2] | 0) == -1) {
                        if (!(Se(b, v) | 0))
                            break a;
                        y = c[j >> 2] | 0;
                        break
                    }
                    if ((u | 0) == (c[k >> 2] | 0) ? (c[k >> 2] = u << 1, z = Pm(u << 3) | 0, c[f >> 2] = z, An(z | 0, t | 0, c[j >> 2] << 2 | 0) | 0, (t | 0) != (h | 0)) : 0)
                        Qm(t);
                    z = c[f >> 2] | 0;
                    c[z + (c[j >> 2] << 2) >> 2] = c[x >> 2];
                    x = (c[j >> 2] | 0) + 1 | 0;
                    c[j >> 2] = x;
                    A = w + (v * 36 | 0) + 28 |
                    0;
                    if ((x | 0) == (c[k >> 2] | 0) ? (c[k >> 2] = x << 1, w = Pm(x << 3) | 0, c[f >> 2] = w, An(w | 0, z | 0, c[j >> 2] << 2 | 0) | 0, (z | 0) != (h | 0)) : 0)
                        Qm(z);
                    c[(c[f >> 2] | 0) + (c[j >> 2] << 2) >> 2] = c[A >> 2];
                    A = (c[j >> 2] | 0) + 1 | 0;
                    c[j >> 2] = A;
                    y = A
                } else
                    y = u;
                while (0);
                if ((y | 0) <= 0)
                    break a;
                s = y;
                t = c[f >> 2] | 0
            }
        }
        while (0);
        y = c[f >> 2] | 0;
        if ((y | 0) == (h | 0)) {
            i = e;
            return
        }
        Qm(y);
        c[f >> 2] = 0;
        i = e;
        return
    }
    function Zj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0;
        d = i;
        e = c[a >> 2] | 0;
        f = c[b >> 2] | 0;
        if ((e | 0) >= (f | 0))
            if ((e | 0) == (f | 0))
                g = (c[a + 4 >> 2] | 0) < (c[b + 4 >> 2] | 0);
            else
                g = 0;
        else
            g = 1;
        i = d;
        return g | 0
    }
    function _j(a, b, d) {
        a =
        a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0;
        e = i;
        f = a;
        a = b;
        a:
        while (1) {
            b = a;
            g = a + -8 | 0;
            h = f;
            b:
            while (1) {
                j = h;
                k = b - j | 0;
                l = k >> 3;
                switch (l | 0) {
                case 5:
                    m = 15;
                    break a;
                    break;
                case 2:
                    m = 4;
                    break a;
                    break;
                case 4:
                    m = 14;
                    break a;
                    break;
                case 1:
                case 0:
                    m = 67;
                    break a;
                    break;
                case 3:
                    m = 6;
                    break a;
                    break;
                default:
                }
                if ((k | 0) < 248) {
                    m = 21;
                    break a
                }
                n = (l | 0) / 2 | 0;
                o = h + (n << 3) | 0;
                do if ((k | 0) > 7992) {
                    p = (l | 0) / 4 | 0;
                    q = h + (p << 3) | 0;
                    r = h + (p + n << 3) | 0;
                    p =
                    $j(h, q, o, r, d) | 0;
                    if (nb[c[d >> 2] & 31](g, r) | 0) {
                        s = r;
                        t = c[s >> 2] | 0;
                        u = c[s + 4 >> 2] | 0;
                        s = g;
                        v = c[s + 4 >> 2] | 0;
                        w = r;
                        c[w >> 2] = c[s >> 2];
                        c[w + 4 >> 2] = v;
                        v = g;
                        c[v >> 2] = t;
                        c[v + 4 >> 2] = u;
                        u = p + 1 | 0;
                        if (nb[c[d >> 2] & 31](r, o) | 0) {
                            v = o;
                            t = c[v >> 2] | 0;
                            w = c[v + 4 >> 2] | 0;
                            v = r;
                            s = c[v + 4 >> 2] | 0;
                            x = o;
                            c[x >> 2] = c[v >> 2];
                            c[x + 4 >> 2] = s;
                            s = r;
                            c[s >> 2] = t;
                            c[s + 4 >> 2] = w;
                            w = p + 2 | 0;
                            if (nb[c[d >> 2] & 31](o, q) | 0) {
                                s = q;
                                t = c[s >> 2] | 0;
                                r = c[s + 4 >> 2] | 0;
                                s = o;
                                x = c[s + 4 >> 2] | 0;
                                v = q;
                                c[v >> 2] = c[s >> 2];
                                c[v + 4 >> 2] = x;
                                x = o;
                                c[x >> 2] = t;
                                c[x + 4 >> 2] = r;
                                if (nb[c[d >> 2] & 31](q, h) | 0) {
                                    r = h;
                                    x = c[r >> 2] | 0;
                                    t = c[r + 4 >> 2] | 0;
                                    r = q;
                                    v = c[r + 4 >> 2] | 0;
                                    s = h;
                                    c[s >> 2] = c[r >> 2];
                                    c[s + 4 >> 2] = v;
                                    v = q;
                                    c[v >> 2] = x;
                                    c[v + 4 >> 2] = t;
                                    y = p + 4 | 0
                                } else
                                    y = p + 3 | 0
                            } else
                                y = w
                        } else
                            y = u
                    } else
                        y = p
                } else {
                    p = nb[c[d >> 2] & 31](o, h) | 0;
                    u = nb[c[d >> 2] & 31](g, o) | 0;
                    if (!p) {
                        if (!u) {
                            y = 0;
                            break
                        }
                        p = o;
                        w = c[p >> 2] | 0;
                        t = c[p + 4 >> 2] | 0;
                        p = g;
                        v = c[p + 4 >> 2] | 0;
                        x = o;
                        c[x >> 2] = c[p >> 2];
                        c[x + 4 >> 2] = v;
                        v = g;
                        c[v >> 2] = w;
                        c[v + 4 >> 2] = t;
                        if (!(nb[c[d >> 2] & 31](o, h) | 0)) {
                            y = 1;
                            break
                        }
                        t = h;
                        v = c[t >> 2] | 0;
                        w = c[t + 4 >> 2] | 0;
                        t = o;
                        x = c[t + 4 >> 2] | 0;
                        p = h;
                        c[p >> 2] = c[t >> 2];
                        c[p + 4 >> 2] = x;
                        x = o;
                        c[x >> 2] = v;
                        c[x + 4 >> 2] = w;
                        y = 2;
                        break
                    }
                    w = h;
                    x = c[w >> 2] | 0;
                    v = c[w + 4 >> 2] | 0;
                    if (u) {
                        u = g;
                        w = c[u + 4 >> 2] | 0;
                        p = h;
                        c[p >> 2] = c[u >> 2];
                        c[p + 4 >> 2] = w;
                        w = g;
                        c[w >> 2] = x;
                        c[w + 4 >> 2] = v;
                        y = 1;
                        break
                    }
                    w = o;
                    p = c[w + 4 >> 2] | 0;
                    u = h;
                    c[u >> 2] = c[w >> 2];
                    c[u + 4 >> 2] = p;
                    p = o;
                    c[p >> 2] = x;
                    c[p + 4 >> 2] = v;
                    if (nb[c[d >> 2] & 31](g, o) | 0) {
                        v = o;
                        p = c[v >> 2] | 0;
                        x = c[v + 4 >> 2] | 0;
                        v = g;
                        u = c[v + 4 >> 2] | 0;
                        w = o;
                        c[w >> 2] = c[v >> 2];
                        c[w + 4 >> 2] = u;
                        u = g;
                        c[u >> 2] = p;
                        c[u + 4 >> 2] = x;
                        y = 2
                    } else
                        y = 1
                }
                while (0);
                do if (nb[c[d >> 2] & 31](h, o) | 0) {
                    z = g;
                    A = y
                } else {
                    n = g;
                    while (1) {
                        n = n + -8 | 0;
                        if ((h | 0) == (n | 0))
                            break;
                        if (nb[c[d >> 2] & 31](n, o) | 0) {
                            m = 50;
                            break
                        }
                    }
                    if ((m | 0) == 50) {
                        m = 0;
                        l = h;
                        k = c[l >> 2] | 0;
                        x = c[l + 4 >> 2] | 0;
                        l = n;
                        u = c[l + 4 >> 2] | 0;
                        p = h;
                        c[p >> 2] = c[l >>
                        2];
                        c[p + 4 >> 2] = u;
                        u = n;
                        c[u >> 2] = k;
                        c[u + 4 >> 2] = x;
                        z = n;
                        A = y + 1 | 0;
                        break
                    }
                    x = h + 8 | 0;
                    if (nb[c[d >> 2] & 31](h, g) | 0)
                        B = x;
                    else {
                        if ((x | 0) == (g | 0)) {
                            m = 67;
                            break a
                        } else
                            C = x;
                        while (1) {
                            D = C + 8 | 0;
                            if (nb[c[d >> 2] & 31](h, C) | 0)
                                break;
                            if ((D | 0) == (g | 0)) {
                                m = 67;
                                break a
                            } else
                                C = D
                        }
                        n = C;
                        x = c[n >> 2] | 0;
                        u = c[n + 4 >> 2] | 0;
                        n = g;
                        k = c[n + 4 >> 2] | 0;
                        p = C;
                        c[p >> 2] = c[n >> 2];
                        c[p + 4 >> 2] = k;
                        k = g;
                        c[k >> 2] = x;
                        c[k + 4 >> 2] = u;
                        B = D
                    }
                    if ((B | 0) == (g | 0)) {
                        m = 67;
                        break a
                    } else {
                        E = B;
                        F = g
                    }
                    while (1) {
                        u = E;
                        while (1) {
                            G = u + 8 | 0;
                            if (nb[c[d >> 2] & 31](h, u) | 0) {
                                H = F;
                                break
                            } else
                                u = G
                        }
                        do H = H + -8 | 0;
                        while (nb[c[d >> 2] & 31](h, H) | 0);
                        if (!(u >>>
                        0 < H >>> 0)) {
                            h = u;
                            continue b
                        }
                        k = u;
                        x = c[k >> 2] | 0;
                        p = c[k + 4 >> 2] | 0;
                        k = H;
                        n = c[k + 4 >> 2] | 0;
                        l = u;
                        c[l >> 2] = c[k >> 2];
                        c[l + 4 >> 2] = n;
                        n = H;
                        c[n >> 2] = x;
                        c[n + 4 >> 2] = p;
                        E = G;
                        F = H
                    }
                }
                while (0);
                p = h + 8 | 0;
                c:
                do if (p >>> 0 < z >>> 0) {
                    n = p;
                    x = z;
                    l = o;
                    k = A;
                    while (1) {
                        w = n;
                        while (1) {
                            I = w + 8 | 0;
                            if (nb[c[d >> 2] & 31](w, l) | 0)
                                w = I;
                            else {
                                J = x;
                                break
                            }
                        }
                        do J = J + -8 | 0;
                        while (!(nb[c[d >> 2] & 31](J, l) | 0));
                        if (w >>> 0 > J >>> 0) {
                            K = w;
                            L = l;
                            M = k;
                            break c
                        }
                        u = w;
                        v = c[u >> 2] | 0;
                        t = c[u + 4 >> 2] | 0;
                        u = J;
                        q = c[u + 4 >> 2] | 0;
                        s = w;
                        c[s >> 2] = c[u >> 2];
                        c[s + 4 >> 2] = q;
                        q = J;
                        c[q >> 2] = v;
                        c[q + 4 >> 2] = t;
                        n = I;
                        x = J;
                        l = (l | 0) == (w | 0) ? J : l;
                        k = k + 1 | 0
                    }
                } else {
                    K = p;
                    L =
                    o;
                    M = A
                }
                while (0);
                if ((K | 0) != (L | 0) ? nb[c[d >> 2] & 31](L, K) | 0 : 0) {
                    o = K;
                    p = c[o >> 2] | 0;
                    k = c[o + 4 >> 2] | 0;
                    o = L;
                    l = c[o + 4 >> 2] | 0;
                    x = K;
                    c[x >> 2] = c[o >> 2];
                    c[x + 4 >> 2] = l;
                    l = L;
                    c[l >> 2] = p;
                    c[l + 4 >> 2] = k;
                    N = M + 1 | 0
                } else
                    N = M;
                if ((N | 0) == 0) {
                    O = bk(h, K, d) | 0;
                    k = K + 8 | 0;
                    if (bk(k, a, d) | 0) {
                        m = 62;
                        break
                    }
                    if (O) {
                        h = k;
                        continue
                    }
                }
                k = K;
                if ((k - j | 0) >= (b - k | 0)) {
                    m = 66;
                    break
                }
                _j(h, K, d);
                h = K + 8 | 0
            }
            if ((m | 0) == 62) {
                m = 0;
                if (O) {
                    m = 67;
                    break
                } else {
                    f = h;
                    a = K;
                    continue
                }
            } else if ((m | 0) == 66) {
                m = 0;
                _j(K + 8 | 0, a, d);
                f = h;
                a = K;
                continue
            }
        }
        if ((m | 0) == 4) {
            if (!(nb[c[d >> 2] & 31](g, h) | 0)) {
                i = e;
                return
            }
            K = h;
            f = c[K >> 2] | 0;
            O = c[K +
            4 >> 2] | 0;
            K = g;
            N = c[K + 4 >> 2] | 0;
            M = h;
            c[M >> 2] = c[K >> 2];
            c[M + 4 >> 2] = N;
            N = g;
            c[N >> 2] = f;
            c[N + 4 >> 2] = O;
            i = e;
            return
        } else if ((m | 0) == 6) {
            O = h + 8 | 0;
            N = nb[c[d >> 2] & 31](O, h) | 0;
            f = nb[c[d >> 2] & 31](g, O) | 0;
            if (!N) {
                if (!f) {
                    i = e;
                    return
                }
                N = O;
                M = c[N >> 2] | 0;
                K = c[N + 4 >> 2] | 0;
                N = g;
                L = c[N + 4 >> 2] | 0;
                A = O;
                c[A >> 2] = c[N >> 2];
                c[A + 4 >> 2] = L;
                L = g;
                c[L >> 2] = M;
                c[L + 4 >> 2] = K;
                if (!(nb[c[d >> 2] & 31](O, h) | 0)) {
                    i = e;
                    return
                }
                K = h;
                L = c[K >> 2] | 0;
                M = c[K + 4 >> 2] | 0;
                K = O;
                A = c[K + 4 >> 2] | 0;
                N = h;
                c[N >> 2] = c[K >> 2];
                c[N + 4 >> 2] = A;
                A = O;
                c[A >> 2] = L;
                c[A + 4 >> 2] = M;
                i = e;
                return
            }
            M = h;
            A = c[M >> 2] | 0;
            L = c[M + 4 >> 2] | 0;
            if (f) {
                f = g;
                M = c[f +
                4 >> 2] | 0;
                N = h;
                c[N >> 2] = c[f >> 2];
                c[N + 4 >> 2] = M;
                M = g;
                c[M >> 2] = A;
                c[M + 4 >> 2] = L;
                i = e;
                return
            }
            M = O;
            N = c[M + 4 >> 2] | 0;
            f = h;
            c[f >> 2] = c[M >> 2];
            c[f + 4 >> 2] = N;
            N = O;
            c[N >> 2] = A;
            c[N + 4 >> 2] = L;
            if (!(nb[c[d >> 2] & 31](g, O) | 0)) {
                i = e;
                return
            }
            L = O;
            N = c[L >> 2] | 0;
            A = c[L + 4 >> 2] | 0;
            L = g;
            f = c[L + 4 >> 2] | 0;
            M = O;
            c[M >> 2] = c[L >> 2];
            c[M + 4 >> 2] = f;
            f = g;
            c[f >> 2] = N;
            c[f + 4 >> 2] = A;
            i = e;
            return
        } else if ((m | 0) == 14) {
            $j(h, h + 8 | 0, h + 16 | 0, g, d) | 0;
            i = e;
            return
        } else if ((m | 0) == 15) {
            A = h + 8 | 0;
            f = h + 16 | 0;
            N = h + 24 | 0;
            $j(h, A, f, N, d) | 0;
            if (!(nb[c[d >> 2] & 31](g, N) | 0)) {
                i = e;
                return
            }
            M = N;
            L = c[M >> 2] | 0;
            O = c[M + 4 >> 2] | 0;
            M = g;
            K =
            c[M + 4 >> 2] | 0;
            J = N;
            c[J >> 2] = c[M >> 2];
            c[J + 4 >> 2] = K;
            K = g;
            c[K >> 2] = L;
            c[K + 4 >> 2] = O;
            if (!(nb[c[d >> 2] & 31](N, f) | 0)) {
                i = e;
                return
            }
            O = f;
            K = c[O >> 2] | 0;
            L = c[O + 4 >> 2] | 0;
            O = N;
            g = c[O + 4 >> 2] | 0;
            J = f;
            c[J >> 2] = c[O >> 2];
            c[J + 4 >> 2] = g;
            g = N;
            c[g >> 2] = K;
            c[g + 4 >> 2] = L;
            if (!(nb[c[d >> 2] & 31](f, A) | 0)) {
                i = e;
                return
            }
            L = A;
            g = c[L >> 2] | 0;
            K = c[L + 4 >> 2] | 0;
            L = f;
            N = c[L + 4 >> 2] | 0;
            J = A;
            c[J >> 2] = c[L >> 2];
            c[J + 4 >> 2] = N;
            N = f;
            c[N >> 2] = g;
            c[N + 4 >> 2] = K;
            if (!(nb[c[d >> 2] & 31](A, h) | 0)) {
                i = e;
                return
            }
            K = h;
            N = c[K >> 2] | 0;
            g = c[K + 4 >> 2] | 0;
            K = A;
            f = c[K + 4 >> 2] | 0;
            J = h;
            c[J >> 2] = c[K >> 2];
            c[J + 4 >> 2] = f;
            f = A;
            c[f >> 2] = N;
            c[f + 4 >>
            2] = g;
            i = e;
            return
        } else if ((m | 0) == 21) {
            ak(h, a, d);
            i = e;
            return
        } else if ((m | 0) == 67) {
            i = e;
            return
        }
    }
    function $j(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0;
        g = i;
        h = nb[c[f >> 2] & 31](b, a) | 0;
        j = nb[c[f >> 2] & 31](d, b) | 0;
        do if (h) {
            k = a;
            l = c[k >> 2] | 0;
            m = c[k + 4 >> 2] | 0;
            if (j) {
                k = d;
                n = c[k + 4 >> 2] | 0;
                o = a;
                c[o >> 2] = c[k >> 2];
                c[o + 4 >> 2] = n;
                n = d;
                c[n >> 2] = l;
                c[n + 4 >> 2] = m;
                p = 1;
                break
            }
            n = b;
            o = c[n + 4 >> 2] | 0;
            k = a;
            c[k >> 2] = c[n >> 2];
            c[k + 4 >> 2] = o;
            o = b;
            c[o >> 2] = l;
            c[o + 4 >> 2] = m;
            if (nb[c[f >> 2] & 31](d, b) | 0) {
                m = b;
                o = c[m >> 2] | 0;
                l = c[m + 4 >> 2] | 0;
                m =
                d;
                k = c[m + 4 >> 2] | 0;
                n = b;
                c[n >> 2] = c[m >> 2];
                c[n + 4 >> 2] = k;
                k = d;
                c[k >> 2] = o;
                c[k + 4 >> 2] = l;
                p = 2
            } else
                p = 1
        } else if (j) {
            l = b;
            k = c[l >> 2] | 0;
            o = c[l + 4 >> 2] | 0;
            l = d;
            n = c[l + 4 >> 2] | 0;
            m = b;
            c[m >> 2] = c[l >> 2];
            c[m + 4 >> 2] = n;
            n = d;
            c[n >> 2] = k;
            c[n + 4 >> 2] = o;
            if (nb[c[f >> 2] & 31](b, a) | 0) {
                o = a;
                n = c[o >> 2] | 0;
                k = c[o + 4 >> 2] | 0;
                o = b;
                m = c[o + 4 >> 2] | 0;
                l = a;
                c[l >> 2] = c[o >> 2];
                c[l + 4 >> 2] = m;
                m = b;
                c[m >> 2] = n;
                c[m + 4 >> 2] = k;
                p = 2
            } else
                p = 1
        } else
            p = 0;
        while (0);
        if (!(nb[c[f >> 2] & 31](e, d) | 0)) {
            q = p;
            i = g;
            return q | 0
        }
        j = d;
        h = c[j >> 2] | 0;
        k = c[j + 4 >> 2] | 0;
        j = e;
        m = c[j + 4 >> 2] | 0;
        n = d;
        c[n >> 2] = c[j >> 2];
        c[n + 4 >> 2] = m;
        m = e;
        c[m >>
        2] = h;
        c[m + 4 >> 2] = k;
        if (!(nb[c[f >> 2] & 31](d, b) | 0)) {
            q = p + 1 | 0;
            i = g;
            return q | 0
        }
        k = b;
        m = c[k >> 2] | 0;
        h = c[k + 4 >> 2] | 0;
        k = d;
        e = c[k + 4 >> 2] | 0;
        n = b;
        c[n >> 2] = c[k >> 2];
        c[n + 4 >> 2] = e;
        e = d;
        c[e >> 2] = m;
        c[e + 4 >> 2] = h;
        if (!(nb[c[f >> 2] & 31](b, a) | 0)) {
            q = p + 2 | 0;
            i = g;
            return q | 0
        }
        f = a;
        h = c[f >> 2] | 0;
        e = c[f + 4 >> 2] | 0;
        f = b;
        m = c[f + 4 >> 2] | 0;
        d = a;
        c[d >> 2] = c[f >> 2];
        c[d + 4 >> 2] = m;
        m = b;
        c[m >> 2] = h;
        c[m + 4 >> 2] = e;
        q = p + 3 | 0;
        i = g;
        return q | 0
    }
    function ak(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        g = a + 16 | 0;
        h = a + 8 | 0;
        j = nb[c[d >> 2] & 31](h,
        a) | 0;
        k = nb[c[d >> 2] & 31](g, h) | 0;
        do if (j) {
            l = a;
            m = c[l >> 2] | 0;
            n = c[l + 4 >> 2] | 0;
            if (k) {
                l = g;
                o = c[l + 4 >> 2] | 0;
                p = a;
                c[p >> 2] = c[l >> 2];
                c[p + 4 >> 2] = o;
                o = g;
                c[o >> 2] = m;
                c[o + 4 >> 2] = n;
                break
            }
            o = h;
            p = c[o + 4 >> 2] | 0;
            l = a;
            c[l >> 2] = c[o >> 2];
            c[l + 4 >> 2] = p;
            p = h;
            c[p >> 2] = m;
            c[p + 4 >> 2] = n;
            if (nb[c[d >> 2] & 31](g, h) | 0) {
                n = h;
                p = c[n >> 2] | 0;
                m = c[n + 4 >> 2] | 0;
                n = g;
                l = c[n + 4 >> 2] | 0;
                o = h;
                c[o >> 2] = c[n >> 2];
                c[o + 4 >> 2] = l;
                l = g;
                c[l >> 2] = p;
                c[l + 4 >> 2] = m
            }
        } else if (k ? (m = h, l = c[m >> 2] | 0, p = c[m + 4 >> 2] | 0, m = g, o = c[m + 4 >> 2] | 0, n = h, c[n >> 2] = c[m >> 2], c[n + 4 >> 2] = o, o = g, c[o >> 2] = l, c[o + 4 >> 2] = p, nb[c[d >> 2] & 31](h, a) |
        0) : 0) {
            p = a;
            o = c[p >> 2] | 0;
            l = c[p + 4 >> 2] | 0;
            p = h;
            n = c[p + 4 >> 2] | 0;
            m = a;
            c[m >> 2] = c[p >> 2];
            c[m + 4 >> 2] = n;
            n = h;
            c[n >> 2] = o;
            c[n + 4 >> 2] = l
        }
        while (0);
        h = a + 24 | 0;
        if ((h | 0) == (b | 0)) {
            i = e;
            return
        } else {
            q = h;
            r = g
        }
        while (1) {
            if (nb[c[d >> 2] & 31](q, r) | 0) {
                g = q;
                h = c[g + 4 >> 2] | 0;
                k = f;
                c[k >> 2] = c[g >> 2];
                c[k + 4 >> 2] = h;
                h = q;
                k = r;
                while (1) {
                    g = k;
                    j = c[g + 4 >> 2] | 0;
                    l = h;
                    c[l >> 2] = c[g >> 2];
                    c[l + 4 >> 2] = j;
                    if ((k | 0) == (a | 0))
                        break;
                    j = k + -8 | 0;
                    if (nb[c[d >> 2] & 31](f, j) | 0) {
                        l = k;
                        k = j;
                        h = l
                    } else
                        break
                }
                h = f;
                l = c[h + 4 >> 2] | 0;
                j = k;
                c[j >> 2] = c[h >> 2];
                c[j + 4 >> 2] = l
            }
            l = q + 8 | 0;
            if ((l | 0) == (b | 0))
                break;
            else {
                j = q;
                q = l;
                r = j
            }
        }
        i =
        e;
        return
    }
    function bk(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        switch (b - a >> 3 | 0) {
        case 2:
            g = b + -8 | 0;
            if (!(nb[c[d >> 2] & 31](g, a) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            j = a;
            k = c[j >> 2] | 0;
            l = c[j + 4 >> 2] | 0;
            j = g;
            m = c[j + 4 >> 2] | 0;
            n = a;
            c[n >> 2] = c[j >> 2];
            c[n + 4 >> 2] = m;
            m = g;
            c[m >> 2] = k;
            c[m + 4 >> 2] = l;
            h = 1;
            i = e;
            return h | 0;
        case 4:
            $j(a, a + 8 | 0, a + 16 | 0, b + -8 | 0, d) | 0;
            h = 1;
            i = e;
            return h | 0;
        case 5:
            l = a + 8 | 0;
            m = a + 16 | 0;
            k = a + 24 | 0;
            g = b + -8 | 0;
            $j(a, l, m, k, d) | 0;
            if (!(nb[c[d >> 2] & 31](g, k) | 0)) {
                h = 1;
                i = e;
                return h |
                0
            }
            n = k;
            j = c[n >> 2] | 0;
            o = c[n + 4 >> 2] | 0;
            n = g;
            p = c[n + 4 >> 2] | 0;
            q = k;
            c[q >> 2] = c[n >> 2];
            c[q + 4 >> 2] = p;
            p = g;
            c[p >> 2] = j;
            c[p + 4 >> 2] = o;
            if (!(nb[c[d >> 2] & 31](k, m) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            o = m;
            p = c[o >> 2] | 0;
            j = c[o + 4 >> 2] | 0;
            o = k;
            g = c[o + 4 >> 2] | 0;
            q = m;
            c[q >> 2] = c[o >> 2];
            c[q + 4 >> 2] = g;
            g = k;
            c[g >> 2] = p;
            c[g + 4 >> 2] = j;
            if (!(nb[c[d >> 2] & 31](m, l) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            j = l;
            g = c[j >> 2] | 0;
            p = c[j + 4 >> 2] | 0;
            j = m;
            k = c[j + 4 >> 2] | 0;
            q = l;
            c[q >> 2] = c[j >> 2];
            c[q + 4 >> 2] = k;
            k = m;
            c[k >> 2] = g;
            c[k + 4 >> 2] = p;
            if (!(nb[c[d >> 2] & 31](l, a) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            p = a;
            k = c[p >> 2] | 0;
            g = c[p + 4 >> 2] | 0;
            p = l;
            m = c[p +
            4 >> 2] | 0;
            q = a;
            c[q >> 2] = c[p >> 2];
            c[q + 4 >> 2] = m;
            m = l;
            c[m >> 2] = k;
            c[m + 4 >> 2] = g;
            h = 1;
            i = e;
            return h | 0;
        case 3:
            g = a + 8 | 0;
            m = b + -8 | 0;
            k = nb[c[d >> 2] & 31](g, a) | 0;
            l = nb[c[d >> 2] & 31](m, g) | 0;
            if (!k) {
                if (!l) {
                    h = 1;
                    i = e;
                    return h | 0
                }
                k = g;
                q = c[k >> 2] | 0;
                p = c[k + 4 >> 2] | 0;
                k = m;
                j = c[k + 4 >> 2] | 0;
                o = g;
                c[o >> 2] = c[k >> 2];
                c[o + 4 >> 2] = j;
                j = m;
                c[j >> 2] = q;
                c[j + 4 >> 2] = p;
                if (!(nb[c[d >> 2] & 31](g, a) | 0)) {
                    h = 1;
                    i = e;
                    return h | 0
                }
                p = a;
                j = c[p >> 2] | 0;
                q = c[p + 4 >> 2] | 0;
                p = g;
                o = c[p + 4 >> 2] | 0;
                k = a;
                c[k >> 2] = c[p >> 2];
                c[k + 4 >> 2] = o;
                o = g;
                c[o >> 2] = j;
                c[o + 4 >> 2] = q;
                h = 1;
                i = e;
                return h | 0
            }
            q = a;
            o = c[q >> 2] | 0;
            j = c[q + 4 >> 2] | 0;
            if (l) {
                l =
                m;
                q = c[l + 4 >> 2] | 0;
                k = a;
                c[k >> 2] = c[l >> 2];
                c[k + 4 >> 2] = q;
                q = m;
                c[q >> 2] = o;
                c[q + 4 >> 2] = j;
                h = 1;
                i = e;
                return h | 0
            }
            q = g;
            k = c[q + 4 >> 2] | 0;
            l = a;
            c[l >> 2] = c[q >> 2];
            c[l + 4 >> 2] = k;
            k = g;
            c[k >> 2] = o;
            c[k + 4 >> 2] = j;
            if (!(nb[c[d >> 2] & 31](m, g) | 0)) {
                h = 1;
                i = e;
                return h | 0
            }
            j = g;
            k = c[j >> 2] | 0;
            o = c[j + 4 >> 2] | 0;
            j = m;
            l = c[j + 4 >> 2] | 0;
            q = g;
            c[q >> 2] = c[j >> 2];
            c[q + 4 >> 2] = l;
            l = m;
            c[l >> 2] = k;
            c[l + 4 >> 2] = o;
            h = 1;
            i = e;
            return h | 0;
        case 1:
        case 0:
            h = 1;
            i = e;
            return h | 0;
        default:
            o = a + 16 | 0;
            l = a + 8 | 0;
            k = nb[c[d >> 2] & 31](l, a) | 0;
            m = nb[c[d >> 2] & 31](o, l) | 0;
            do if (k) {
                q = a;
                j = c[q >> 2] | 0;
                g = c[q + 4 >> 2] | 0;
                if (m) {
                    q = o;
                    p = c[q +
                    4 >> 2] | 0;
                    n = a;
                    c[n >> 2] = c[q >> 2];
                    c[n + 4 >> 2] = p;
                    p = o;
                    c[p >> 2] = j;
                    c[p + 4 >> 2] = g;
                    break
                }
                p = l;
                n = c[p + 4 >> 2] | 0;
                q = a;
                c[q >> 2] = c[p >> 2];
                c[q + 4 >> 2] = n;
                n = l;
                c[n >> 2] = j;
                c[n + 4 >> 2] = g;
                if (nb[c[d >> 2] & 31](o, l) | 0) {
                    g = l;
                    n = c[g >> 2] | 0;
                    j = c[g + 4 >> 2] | 0;
                    g = o;
                    q = c[g + 4 >> 2] | 0;
                    p = l;
                    c[p >> 2] = c[g >> 2];
                    c[p + 4 >> 2] = q;
                    q = o;
                    c[q >> 2] = n;
                    c[q + 4 >> 2] = j
                }
            } else if (m ? (j = l, q = c[j >> 2] | 0, n = c[j + 4 >> 2] | 0, j = o, p = c[j + 4 >> 2] | 0, g = l, c[g >> 2] = c[j >> 2], c[g + 4 >> 2] = p, p = o, c[p >> 2] = q, c[p + 4 >> 2] = n, nb[c[d >> 2] & 31](l, a) | 0) : 0) {
                n = a;
                p = c[n >> 2] | 0;
                q = c[n + 4 >> 2] | 0;
                n = l;
                g = c[n + 4 >> 2] | 0;
                j = a;
                c[j >> 2] = c[n >> 2];
                c[j + 4 >> 2] =
                g;
                g = l;
                c[g >> 2] = p;
                c[g + 4 >> 2] = q
            }
            while (0);
            l = a + 24 | 0;
            if ((l | 0) == (b | 0)) {
                h = 1;
                i = e;
                return h | 0
            } else {
                r = 0;
                s = l;
                t = o
            }
            while (1) {
                if (nb[c[d >> 2] & 31](s, t) | 0) {
                    o = s;
                    l = c[o + 4 >> 2] | 0;
                    m = f;
                    c[m >> 2] = c[o >> 2];
                    c[m + 4 >> 2] = l;
                    l = s;
                    m = t;
                    while (1) {
                        o = m;
                        k = c[o + 4 >> 2] | 0;
                        q = l;
                        c[q >> 2] = c[o >> 2];
                        c[q + 4 >> 2] = k;
                        if ((m | 0) == (a | 0))
                            break;
                        k = m + -8 | 0;
                        if (nb[c[d >> 2] & 31](f, k) | 0) {
                            q = m;
                            m = k;
                            l = q
                        } else
                            break
                    }
                    l = f;
                    q = c[l + 4 >> 2] | 0;
                    k = m;
                    c[k >> 2] = c[l >> 2];
                    c[k + 4 >> 2] = q;
                    q = r + 1 | 0;
                    if ((q | 0) == 8)
                        break;
                    else
                        u = q
                } else
                    u = r;
                q = s + 8 | 0;
                if ((q | 0) == (b | 0)) {
                    h = 1;
                    v = 34;
                    break
                } else {
                    k = s;
                    r = u;
                    s = q;
                    t = k
                }
            }
            if ((v | 0) == 34) {
                i =
                e;
                return h | 0
            }
            h = (s + 8 | 0) == (b | 0);
            i = e;
            return h | 0
        }
        return 0
    }
    function ck(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function dk(a, b) {
        a = a | 0;
        b = b | 0;
        return
    }
    function ek(a, b) {
        a = a | 0;
        b = b | 0;
        return
    }
    function fk(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        return
    }
    function gk(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        return
    }
    function hk(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0;
        e = i;
        c[a >> 2] = b;
        c[a + 4 >> 2] = Ym(b, d << 4) | 0;
        c[a + 8 >> 2] = d;
        d = a + 12 | 0;
        c[d + 0 >> 2] = 0;
        c[d + 4 >> 2] = 0;
        c[d + 8 >> 2] = 0;
        c[d + 12 >> 2] = 0;
        i = e;
        return
    }
    function ik(a) {
        a = a | 0;
        var b = 0,
            d = 0;
        b = i;
        d = c[a + 24 >> 2] | 0;
        if ((d | 0) != 0)
            _m(c[a >> 2] |
            0, d);
        _m(c[a >> 2] | 0, c[a + 4 >> 2] | 0);
        i = b;
        return
    }
    function jk(b, d, e, f) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            i = 0;
        g = b + 12 | 0;
        h = c[g >> 2] | 0;
        c[g >> 2] = h + 1;
        g = c[b + 4 >> 2] | 0;
        b = d;
        d = c[b + 4 >> 2] | 0;
        i = g + (h << 4) | 0;
        c[i >> 2] = c[b >> 2];
        c[i + 4 >> 2] = d;
        c[g + (h << 4) + 8 >> 2] = e;
        a[g + (h << 4) + 12 >> 0] = f & 1;
        return
    }
    function kk(b, d, e) {
        b = b | 0;
        d = +d;
        e = +e;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea =
            0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Da = 0,
            Ea = 0,
            Fa = 0,
            Ga = 0,
            Ha = 0,
            Ia = 0,
            Ja = 0,
            Ka = 0,
            La = 0,
            Ma = 0,
            Na = 0,
            Oa = 0,
            Pa = 0,
            Qa = 0,
            Ra = 0,
            Sa = 0,
            Ta = 0,
            Ua = 0,
            Va = 0,
            Wa = 0,
            Xa = 0,
            Ya = 0,
            Za = 0,
            _a = 0,
            $a = 0,
            ab = 0,
            bb = 0,
            cb = 0,
            db = 0,
            eb = 0,
            fb = 0,
            gb = 0,
            hb = 0,
            ib = 0,
            jb = 0,
            kb = 0,
            lb = 0,
            mb = 0,
            nb = 0,
            ob = 0,
            pb = 0,
            qb = 0,
            rb = 0,
            sb = 0,
            tb = 0,
            ub = 0,
            vb = 0,
            wb = 0,
            xb = 0,
            yb = 0,
            zb = 0,
            Ab = 0,
            Bb = 0,
            Cb = 0,
            Db = 0,
            Eb = 0,
            Fb = 0,
            Gb = 0,
            Hb = 0,
            Ib = 0,
            Jb = 0,
            Kb = 0,
            Lb = 0,
            Mb = 0,
            Nb = 0,
            Ob = 0,
            Pb = 0,
            Qb = 0,
            Rb = 0,
            Sb = 0,
            Tb = 0,
            Ub = 0,
            Vb = 0,
            Wb = 0,
            Xb = 0,
            Yb = 0,
            Zb = 0,
            _b = 0,
            $b = 0,
            ac = 0,
            bc = 0,
            cc = 0,
            dc = 0,
            ec = 0,
            fc = 0,
            gc = 0,
            hc = 0,
            ic = 0,
            jc = 0;
        f = i;
        h = 1 / d;
        j = b + 12 | 0;
        k = c[j >> 2] | 0;
        if ((k | 0) > 0) {
            l = c[b + 4 >> 2] | 0;
            d = 3.4028234663852886E38;
            m = 3.4028234663852886E38;
            n = -3.4028234663852886E38;
            o = -3.4028234663852886E38;
            p = 0;
            while (1) {
                if ((a[l + (p << 4) + 12 >> 0] | 0) == 0) {
                    q = m;
                    r = d;
                    s = o;
                    t = n
                } else {
                    u = +g[l + (p << 4) >> 2];
                    v = +g[l + (p << 4) + 4 >> 2];
                    q = m < v ? m : v;
                    r = d < u ? d : u;
                    s = o > v ? o : v;
                    t = n > u ? n : u
                }
                p = p + 1 | 0;
                if ((p | 0) >= (k | 0)) {
                    w = q;
                    x = r;
                    y = s;
                    z = t;
                    break
                } else {
                    d = r;
                    m = q;
                    n = t;
                    o = s
                }
            }
        } else {
            w = 3.4028234663852886E38;
            x = 3.4028234663852886E38;
            y = -3.4028234663852886E38;
            z = -3.4028234663852886E38
        }
        s = x - e;
        x = w - e;
        k = ~~(h * (z + e - s)) + 1 | 0;
        p = b + 16 | 0;
        c[p >> 2] = k;
        l = ~~(h * (y + e - x)) + 1 | 0;
        A = b + 20 | 0;
        c[A >> 2] = l;
        B = Ym(c[b >> 2] | 0, aa(l << 2, k) | 0) | 0;
        k = b + 24 | 0;
        c[k >> 2] = B;
        l = c[p >> 2] | 0;
        C = c[A >> 2] | 0;
        D = aa(C, l) | 0;
        a:
        do if ((D | 0) > 0) {
            E = B;
            F = 0;
            while (1) {
                c[E + (F << 2) >> 2] = 0;
                G = F + 1 | 0;
                if ((G | 0) >= (D | 0))
                    break a;
                E = c[k >> 2] | 0;
                F = G
            }
        }
        while (0);
        D = c[b >> 2] | 0;
        B = aa(l << 2, C) | 0;
        C = Ym(D, B << 4) | 0;
        if ((c[j >> 2] | 0) > 0) {
            l = b + 4 | 0;
            b = 0;
            F = B;
            E = C;
            G = 0;
            while (1) {
                H = c[l >> 2] | 0;
                I = H + (G << 4) | 0;
                J = H + (G << 4) + 4 | 0;
                e = h * (+g[I >> 2] - s);
                y = +e;
                z = +(h * (+g[J >> 2] - x));
                H = I;
                g[H >> 2] = y;
                g[H +
                4 >> 2] = z;
                H = ~~e;
                K = ~~+g[J >> 2];
                if (((K | H | 0) > -1 ? (J = c[p >> 2] | 0, (H | 0) < (J | 0)) : 0) ? (K | 0) < (c[A >> 2] | 0) : 0) {
                    L = (aa(J, K) | 0) + H | 0;
                    if ((b | 0) < (F | 0)) {
                        M = F;
                        N = E
                    } else {
                        if ((b | 0) > 0) {
                            J = 0;
                            do J = J + 1 | 0;
                            while ((J | 0) != (b | 0))
                        }
                        J = (F | 0) > 0 ? F << 1 : 1;
                        M = J;
                        N = Zm(D, E, J << 4) | 0
                    }
                    c[N + (b << 4) >> 2] = H;
                    c[N + (b << 4) + 4 >> 2] = K;
                    c[N + (b << 4) + 8 >> 2] = L;
                    c[N + (b << 4) + 12 >> 2] = I;
                    O = M;
                    P = b + 1 | 0;
                    Q = N
                } else {
                    O = F;
                    P = b;
                    Q = E
                }
                G = G + 1 | 0;
                if ((G | 0) >= (c[j >> 2] | 0)) {
                    R = O;
                    S = P;
                    T = 0;
                    U = Q;
                    break
                } else {
                    b = P;
                    F = O;
                    E = Q
                }
            }
        } else {
            R = B;
            S = 0;
            T = 0;
            U = C
        }
        b:
        while (1) {
            C = T;
            do {
                if ((C | 0) == (S | 0))
                    break b;
                V = c[U + (C << 4) >> 2] | 0;
                W = c[U + (C << 4) + 4 >>
                2] | 0;
                X = c[U + (C << 4) + 8 >> 2] | 0;
                Y = c[U + (C << 4) + 12 >> 2] | 0;
                C = C + 1 | 0;
                Z = (c[k >> 2] | 0) + (X << 2) | 0
            } while ((c[Z >> 2] | 0) != 0);
            c[Z >> 2] = Y;
            if ((V | 0) > 0) {
                I = V + -1 | 0;
                L = X + -1 | 0;
                if ((S | 0) >= (R | 0)) {
                    if ((C | 0) < (S | 0)) {
                        K = C;
                        do {
                            H = U + (K - C << 4) | 0;
                            B = U + (K << 4) | 0;
                            c[H + 0 >> 2] = c[B + 0 >> 2];
                            c[H + 4 >> 2] = c[B + 4 >> 2];
                            c[H + 8 >> 2] = c[B + 8 >> 2];
                            c[H + 12 >> 2] = c[B + 12 >> 2];
                            K = K + 1 | 0
                        } while ((K | 0) != (S | 0))
                    }
                    K = S - C | 0;
                    if ((K | 0) < (R | 0)) {
                        _ = U;
                        $ = K;
                        ba = R;
                        ca = 0
                    } else {
                        B = (R | 0) > 0 ? R << 1 : 1;
                        _ = Zm(D, U, B << 4) | 0;
                        $ = K;
                        ba = B;
                        ca = 0
                    }
                } else {
                    _ = U;
                    $ = S;
                    ba = R;
                    ca = C
                }
                c[_ + ($ << 4) >> 2] = I;
                c[_ + ($ << 4) + 4 >> 2] = W;
                c[_ + ($ << 4) + 8 >> 2] = L;
                c[_ + ($ <<
                4) + 12 >> 2] = Y;
                da = $ + 1 | 0;
                ea = ba;
                fa = ca;
                ga = _
            } else {
                da = S;
                ea = R;
                fa = C;
                ga = U
            }
            if ((W | 0) > 0) {
                B = W + -1 | 0;
                K = X - (c[p >> 2] | 0) | 0;
                if ((da | 0) >= (ea | 0)) {
                    if ((fa | 0) < (da | 0)) {
                        H = fa;
                        do {
                            Q = ga + (H - fa << 4) | 0;
                            E = ga + (H << 4) | 0;
                            c[Q + 0 >> 2] = c[E + 0 >> 2];
                            c[Q + 4 >> 2] = c[E + 4 >> 2];
                            c[Q + 8 >> 2] = c[E + 8 >> 2];
                            c[Q + 12 >> 2] = c[E + 12 >> 2];
                            H = H + 1 | 0
                        } while ((H | 0) != (da | 0))
                    }
                    H = da - fa | 0;
                    if ((H | 0) < (ea | 0)) {
                        ha = ga;
                        ia = H;
                        ja = ea;
                        ka = 0
                    } else {
                        C = (ea | 0) > 0 ? ea << 1 : 1;
                        ha = Zm(D, ga, C << 4) | 0;
                        ia = H;
                        ja = C;
                        ka = 0
                    }
                } else {
                    ha = ga;
                    ia = da;
                    ja = ea;
                    ka = fa
                }
                c[ha + (ia << 4) >> 2] = V;
                c[ha + (ia << 4) + 4 >> 2] = B;
                c[ha + (ia << 4) + 8 >> 2] = K;
                c[ha + (ia << 4) + 12 >>
                2] = Y;
                la = ia + 1 | 0;
                ma = ja;
                na = ka;
                oa = ha
            } else {
                la = da;
                ma = ea;
                na = fa;
                oa = ga
            }
            if ((V | 0) < ((c[p >> 2] | 0) + -1 | 0)) {
                C = V + 1 | 0;
                H = X + 1 | 0;
                if ((la | 0) >= (ma | 0)) {
                    if ((na | 0) < (la | 0)) {
                        L = na;
                        do {
                            I = oa + (L - na << 4) | 0;
                            E = oa + (L << 4) | 0;
                            c[I + 0 >> 2] = c[E + 0 >> 2];
                            c[I + 4 >> 2] = c[E + 4 >> 2];
                            c[I + 8 >> 2] = c[E + 8 >> 2];
                            c[I + 12 >> 2] = c[E + 12 >> 2];
                            L = L + 1 | 0
                        } while ((L | 0) != (la | 0))
                    }
                    L = la - na | 0;
                    if ((L | 0) < (ma | 0)) {
                        pa = oa;
                        qa = L;
                        ra = ma;
                        sa = 0
                    } else {
                        K = (ma | 0) > 0 ? ma << 1 : 1;
                        pa = Zm(D, oa, K << 4) | 0;
                        qa = L;
                        ra = K;
                        sa = 0
                    }
                } else {
                    pa = oa;
                    qa = la;
                    ra = ma;
                    sa = na
                }
                c[pa + (qa << 4) >> 2] = C;
                c[pa + (qa << 4) + 4 >> 2] = W;
                c[pa + (qa << 4) + 8 >> 2] = H;
                c[pa + (qa <<
                4) + 12 >> 2] = Y;
                ta = qa + 1 | 0;
                ua = ra;
                va = sa;
                wa = pa
            } else {
                ta = la;
                ua = ma;
                va = na;
                wa = oa
            }
            if ((W | 0) >= ((c[A >> 2] | 0) + -1 | 0)) {
                R = ua;
                S = ta;
                T = va;
                U = wa;
                continue
            }
            K = W + 1 | 0;
            L = (c[p >> 2] | 0) + X | 0;
            if ((ta | 0) >= (ua | 0)) {
                if ((va | 0) < (ta | 0)) {
                    B = va;
                    do {
                        E = wa + (B - va << 4) | 0;
                        I = wa + (B << 4) | 0;
                        c[E + 0 >> 2] = c[I + 0 >> 2];
                        c[E + 4 >> 2] = c[I + 4 >> 2];
                        c[E + 8 >> 2] = c[I + 8 >> 2];
                        c[E + 12 >> 2] = c[I + 12 >> 2];
                        B = B + 1 | 0
                    } while ((B | 0) != (ta | 0))
                }
                B = ta - va | 0;
                if ((B | 0) < (ua | 0)) {
                    xa = wa;
                    ya = B;
                    za = ua;
                    Aa = 0
                } else {
                    H = (ua | 0) > 0 ? ua << 1 : 1;
                    xa = Zm(D, wa, H << 4) | 0;
                    ya = B;
                    za = H;
                    Aa = 0
                }
            } else {
                xa = wa;
                ya = ta;
                za = ua;
                Aa = va
            }
            c[xa + (ya << 4) >> 2] = V;
            c[xa +
            (ya << 4) + 4 >> 2] = K;
            c[xa + (ya << 4) + 8 >> 2] = L;
            c[xa + (ya << 4) + 12 >> 2] = Y;
            R = za;
            S = ya + 1 | 0;
            T = Aa;
            U = xa
        }
        xa = c[A >> 2] | 0;
        if ((xa | 0) > 0) {
            Aa = c[p >> 2] | 0;
            T = xa;
            ya = U;
            za = S;
            Y = S;
            V = R;
            va = 0;
            while (1) {
                if ((Aa + -1 | 0) > 0) {
                    ua = Aa;
                    ta = Y;
                    wa = V;
                    X = za;
                    W = ya;
                    oa = 0;
                    while (1) {
                        na = (aa(ua, va) | 0) + oa | 0;
                        ma = c[k >> 2] | 0;
                        la = c[ma + (na << 2) >> 2] | 0;
                        pa = na + 1 | 0;
                        sa = c[ma + (pa << 2) >> 2] | 0;
                        if ((la | 0) == (sa | 0)) {
                            Ba = oa + 1 | 0;
                            Ca = ua;
                            Da = wa;
                            Ea = ta;
                            Fa = X;
                            Ga = W
                        } else {
                            if ((ta | 0) >= (wa | 0)) {
                                if ((X | 0) < (ta | 0)) {
                                    ma = X;
                                    do {
                                        ra = W + (ma - X << 4) | 0;
                                        qa = W + (ma << 4) | 0;
                                        c[ra + 0 >> 2] = c[qa + 0 >> 2];
                                        c[ra + 4 >> 2] = c[qa + 4 >> 2];
                                        c[ra + 8 >> 2] = c[qa +
                                        8 >> 2];
                                        c[ra + 12 >> 2] = c[qa + 12 >> 2];
                                        ma = ma + 1 | 0
                                    } while ((ma | 0) != (ta | 0))
                                }
                                ma = ta - X | 0;
                                if ((ma | 0) < (wa | 0)) {
                                    Ha = W;
                                    Ia = ma;
                                    Ja = wa;
                                    Ka = 0
                                } else {
                                    qa = (wa | 0) > 0 ? wa << 1 : 1;
                                    Ha = Zm(D, W, qa << 4) | 0;
                                    Ia = ma;
                                    Ja = qa;
                                    Ka = 0
                                }
                            } else {
                                Ha = W;
                                Ia = ta;
                                Ja = wa;
                                Ka = X
                            }
                            c[Ha + (Ia << 4) >> 2] = oa;
                            c[Ha + (Ia << 4) + 4 >> 2] = va;
                            c[Ha + (Ia << 4) + 8 >> 2] = na;
                            c[Ha + (Ia << 4) + 12 >> 2] = sa;
                            qa = Ia + 1 | 0;
                            ma = oa + 1 | 0;
                            if ((qa | 0) >= (Ja | 0)) {
                                if ((Ka | 0) < (qa | 0)) {
                                    ra = Ka;
                                    do {
                                        ga = Ha + (ra - Ka << 4) | 0;
                                        fa = Ha + (ra << 4) | 0;
                                        c[ga + 0 >> 2] = c[fa + 0 >> 2];
                                        c[ga + 4 >> 2] = c[fa + 4 >> 2];
                                        c[ga + 8 >> 2] = c[fa + 8 >> 2];
                                        c[ga + 12 >> 2] = c[fa + 12 >> 2];
                                        ra = ra + 1 | 0
                                    } while ((ra | 0) !=
                                    (qa | 0))
                                }
                                ra = qa - Ka | 0;
                                if ((ra | 0) < (Ja | 0)) {
                                    La = Ha;
                                    Ma = ra;
                                    Na = Ja;
                                    Oa = 0
                                } else {
                                    sa = (Ja | 0) > 0 ? Ja << 1 : 1;
                                    La = Zm(D, Ha, sa << 4) | 0;
                                    Ma = ra;
                                    Na = sa;
                                    Oa = 0
                                }
                            } else {
                                La = Ha;
                                Ma = qa;
                                Na = Ja;
                                Oa = Ka
                            }
                            c[La + (Ma << 4) >> 2] = ma;
                            c[La + (Ma << 4) + 4 >> 2] = va;
                            c[La + (Ma << 4) + 8 >> 2] = pa;
                            c[La + (Ma << 4) + 12 >> 2] = la;
                            Ba = ma;
                            Ca = c[p >> 2] | 0;
                            Da = Na;
                            Ea = Ma + 1 | 0;
                            Fa = Oa;
                            Ga = La
                        }
                        if ((Ba | 0) < (Ca + -1 | 0)) {
                            ua = Ca;
                            ta = Ea;
                            wa = Da;
                            X = Fa;
                            W = Ga;
                            oa = Ba
                        } else
                            break
                    }
                    Pa = Da;
                    Qa = Ea;
                    Ra = Fa;
                    Sa = Ga;
                    Ta = c[A >> 2] | 0;
                    Ua = Ca
                } else {
                    Pa = V;
                    Qa = Y;
                    Ra = za;
                    Sa = ya;
                    Ta = T;
                    Ua = Aa
                }
                va = va + 1 | 0;
                if ((va | 0) >= (Ta | 0)) {
                    Va = Pa;
                    Wa = Qa;
                    Xa = Ra;
                    Ya = Sa;
                    Za = Ta;
                    break
                } else {
                    Aa =
                    Ua;
                    T = Ta;
                    ya = Sa;
                    za = Ra;
                    Y = Qa;
                    V = Pa
                }
            }
        } else {
            Va = R;
            Wa = S;
            Xa = S;
            Ya = U;
            Za = xa
        }
        if ((Za + -1 | 0) > 0) {
            xa = c[p >> 2] | 0;
            U = Za;
            Za = Ya;
            S = Xa;
            R = Wa;
            Pa = Va;
            V = 0;
            while (1) {
                Qa = V;
                V = V + 1 | 0;
                if ((xa | 0) > 0) {
                    Y = xa;
                    Ra = R;
                    za = Pa;
                    Sa = S;
                    ya = Za;
                    Ta = 0;
                    while (1) {
                        T = (aa(Y, Qa) | 0) + Ta | 0;
                        Ua = c[k >> 2] | 0;
                        Aa = c[Ua + (T << 2) >> 2] | 0;
                        va = c[Ua + (T + Y << 2) >> 2] | 0;
                        if ((Aa | 0) == (va | 0)) {
                            _a = Y;
                            $a = za;
                            ab = Ra;
                            bb = Sa;
                            cb = ya
                        } else {
                            if ((Ra | 0) >= (za | 0)) {
                                if ((Sa | 0) < (Ra | 0)) {
                                    Ua = Sa;
                                    do {
                                        Ca = ya + (Ua - Sa << 4) | 0;
                                        Ga = ya + (Ua << 4) | 0;
                                        c[Ca + 0 >> 2] = c[Ga + 0 >> 2];
                                        c[Ca + 4 >> 2] = c[Ga + 4 >> 2];
                                        c[Ca + 8 >> 2] = c[Ga + 8 >> 2];
                                        c[Ca + 12 >> 2] = c[Ga + 12 >> 2];
                                        Ua =
                                        Ua + 1 | 0
                                    } while ((Ua | 0) != (Ra | 0))
                                }
                                Ua = Ra - Sa | 0;
                                if ((Ua | 0) < (za | 0)) {
                                    db = ya;
                                    eb = Ua;
                                    fb = za;
                                    gb = 0
                                } else {
                                    ma = (za | 0) > 0 ? za << 1 : 1;
                                    db = Zm(D, ya, ma << 4) | 0;
                                    eb = Ua;
                                    fb = ma;
                                    gb = 0
                                }
                            } else {
                                db = ya;
                                eb = Ra;
                                fb = za;
                                gb = Sa
                            }
                            c[db + (eb << 4) >> 2] = Ta;
                            c[db + (eb << 4) + 4 >> 2] = Qa;
                            c[db + (eb << 4) + 8 >> 2] = T;
                            c[db + (eb << 4) + 12 >> 2] = va;
                            ma = eb + 1 | 0;
                            Ua = (c[p >> 2] | 0) + T | 0;
                            if ((ma | 0) >= (fb | 0)) {
                                if ((gb | 0) < (ma | 0)) {
                                    la = gb;
                                    do {
                                        pa = db + (la - gb << 4) | 0;
                                        qa = db + (la << 4) | 0;
                                        c[pa + 0 >> 2] = c[qa + 0 >> 2];
                                        c[pa + 4 >> 2] = c[qa + 4 >> 2];
                                        c[pa + 8 >> 2] = c[qa + 8 >> 2];
                                        c[pa + 12 >> 2] = c[qa + 12 >> 2];
                                        la = la + 1 | 0
                                    } while ((la | 0) != (ma | 0))
                                }
                                la = ma - gb | 0;
                                if ((la | 0) < (fb | 0)) {
                                    hb = db;
                                    ib = la;
                                    jb = fb;
                                    kb = 0
                                } else {
                                    T = (fb | 0) > 0 ? fb << 1 : 1;
                                    hb = Zm(D, db, T << 4) | 0;
                                    ib = la;
                                    jb = T;
                                    kb = 0
                                }
                            } else {
                                hb = db;
                                ib = ma;
                                jb = fb;
                                kb = gb
                            }
                            c[hb + (ib << 4) >> 2] = Ta;
                            c[hb + (ib << 4) + 4 >> 2] = V;
                            c[hb + (ib << 4) + 8 >> 2] = Ua;
                            c[hb + (ib << 4) + 12 >> 2] = Aa;
                            _a = c[p >> 2] | 0;
                            $a = jb;
                            ab = ib + 1 | 0;
                            bb = kb;
                            cb = hb
                        }
                        Ta = Ta + 1 | 0;
                        if ((Ta | 0) >= (_a | 0))
                            break;
                        else {
                            Y = _a;
                            Ra = ab;
                            za = $a;
                            Sa = bb;
                            ya = cb
                        }
                    }
                    lb = $a;
                    mb = ab;
                    nb = bb;
                    ob = cb;
                    pb = c[A >> 2] | 0;
                    qb = _a
                } else {
                    lb = Pa;
                    mb = R;
                    nb = S;
                    ob = Za;
                    pb = U;
                    qb = xa
                }
                if ((V | 0) >= (pb + -1 | 0)) {
                    rb = lb;
                    sb = mb;
                    tb = nb;
                    ub = ob;
                    break
                } else {
                    xa = qb;
                    U = pb;
                    Za = ob;
                    S = nb;
                    R = mb;
                    Pa = lb
                }
            }
        } else {
            rb =
            Va;
            sb = Wa;
            tb = Xa;
            ub = Ya
        }
        if ((tb | 0) == (sb | 0)) {
            vb = ub;
            _m(D, vb);
            i = f;
            return
        } else {
            wb = rb;
            xb = sb;
            yb = tb;
            zb = ub
        }
        c:
        while (1) {
            ub = c[k >> 2] | 0;
            tb = yb;
            while (1) {
                Ab = c[zb + (tb << 4) >> 2] | 0;
                Bb = c[zb + (tb << 4) + 4 >> 2] | 0;
                Cb = c[zb + (tb << 4) + 8 >> 2] | 0;
                Db = c[zb + (tb << 4) + 12 >> 2] | 0;
                tb = tb + 1 | 0;
                Eb = ub + (Cb << 2) | 0;
                sb = c[Eb >> 2] | 0;
                if ((sb | 0) != (Db | 0) ? (x = +(Ab | 0), h = +g[sb >> 2] - x, s = +(Bb | 0), e = +g[sb + 4 >> 2] - s, z = +g[Db >> 2] - x, x = +g[Db + 4 >> 2] - s, h * h + e * e > z * z + x * x) : 0)
                    break;
                if ((tb | 0) == (xb | 0)) {
                    vb = zb;
                    Fb = 122;
                    break c
                }
            }
            c[Eb >> 2] = Db;
            if ((Ab | 0) > 0) {
                ub = Ab + -1 | 0;
                sb = Cb + -1 | 0;
                if ((xb | 0) >= (wb | 0)) {
                    if ((tb |
                    0) < (xb | 0)) {
                        rb = tb;
                        do {
                            Ya = zb + (rb - tb << 4) | 0;
                            Xa = zb + (rb << 4) | 0;
                            c[Ya + 0 >> 2] = c[Xa + 0 >> 2];
                            c[Ya + 4 >> 2] = c[Xa + 4 >> 2];
                            c[Ya + 8 >> 2] = c[Xa + 8 >> 2];
                            c[Ya + 12 >> 2] = c[Xa + 12 >> 2];
                            rb = rb + 1 | 0
                        } while ((rb | 0) != (xb | 0))
                    }
                    rb = xb - tb | 0;
                    if ((rb | 0) < (wb | 0)) {
                        Gb = zb;
                        Hb = rb;
                        Ib = wb;
                        Jb = 0
                    } else {
                        Xa = (wb | 0) > 0 ? wb << 1 : 1;
                        Gb = Zm(D, zb, Xa << 4) | 0;
                        Hb = rb;
                        Ib = Xa;
                        Jb = 0
                    }
                } else {
                    Gb = zb;
                    Hb = xb;
                    Ib = wb;
                    Jb = tb
                }
                c[Gb + (Hb << 4) >> 2] = ub;
                c[Gb + (Hb << 4) + 4 >> 2] = Bb;
                c[Gb + (Hb << 4) + 8 >> 2] = sb;
                c[Gb + (Hb << 4) + 12 >> 2] = Db;
                Kb = Hb + 1 | 0;
                Lb = Ib;
                Mb = Jb;
                Nb = Gb
            } else {
                Kb = xb;
                Lb = wb;
                Mb = tb;
                Nb = zb
            }
            if ((Bb | 0) > 0) {
                Xa = Bb + -1 | 0;
                rb = Cb - (c[p >>
                2] | 0) | 0;
                if ((Kb | 0) >= (Lb | 0)) {
                    if ((Mb | 0) < (Kb | 0)) {
                        Ya = Mb;
                        do {
                            Wa = Nb + (Ya - Mb << 4) | 0;
                            Va = Nb + (Ya << 4) | 0;
                            c[Wa + 0 >> 2] = c[Va + 0 >> 2];
                            c[Wa + 4 >> 2] = c[Va + 4 >> 2];
                            c[Wa + 8 >> 2] = c[Va + 8 >> 2];
                            c[Wa + 12 >> 2] = c[Va + 12 >> 2];
                            Ya = Ya + 1 | 0
                        } while ((Ya | 0) != (Kb | 0))
                    }
                    Ya = Kb - Mb | 0;
                    if ((Ya | 0) < (Lb | 0)) {
                        Ob = Nb;
                        Pb = Ya;
                        Qb = Lb;
                        Rb = 0
                    } else {
                        tb = (Lb | 0) > 0 ? Lb << 1 : 1;
                        Ob = Zm(D, Nb, tb << 4) | 0;
                        Pb = Ya;
                        Qb = tb;
                        Rb = 0
                    }
                } else {
                    Ob = Nb;
                    Pb = Kb;
                    Qb = Lb;
                    Rb = Mb
                }
                c[Ob + (Pb << 4) >> 2] = Ab;
                c[Ob + (Pb << 4) + 4 >> 2] = Xa;
                c[Ob + (Pb << 4) + 8 >> 2] = rb;
                c[Ob + (Pb << 4) + 12 >> 2] = Db;
                Sb = Pb + 1 | 0;
                Tb = Qb;
                Ub = Rb;
                Vb = Ob
            } else {
                Sb = Kb;
                Tb = Lb;
                Ub = Mb;
                Vb = Nb
            }
            if ((Ab |
            0) < ((c[p >> 2] | 0) + -1 | 0)) {
                tb = Ab + 1 | 0;
                Ya = Cb + 1 | 0;
                if ((Sb | 0) >= (Tb | 0)) {
                    if ((Ub | 0) < (Sb | 0)) {
                        sb = Ub;
                        do {
                            ub = Vb + (sb - Ub << 4) | 0;
                            Va = Vb + (sb << 4) | 0;
                            c[ub + 0 >> 2] = c[Va + 0 >> 2];
                            c[ub + 4 >> 2] = c[Va + 4 >> 2];
                            c[ub + 8 >> 2] = c[Va + 8 >> 2];
                            c[ub + 12 >> 2] = c[Va + 12 >> 2];
                            sb = sb + 1 | 0
                        } while ((sb | 0) != (Sb | 0))
                    }
                    sb = Sb - Ub | 0;
                    if ((sb | 0) < (Tb | 0)) {
                        Wb = Vb;
                        Xb = sb;
                        Yb = Tb;
                        Zb = 0
                    } else {
                        rb = (Tb | 0) > 0 ? Tb << 1 : 1;
                        Wb = Zm(D, Vb, rb << 4) | 0;
                        Xb = sb;
                        Yb = rb;
                        Zb = 0
                    }
                } else {
                    Wb = Vb;
                    Xb = Sb;
                    Yb = Tb;
                    Zb = Ub
                }
                c[Wb + (Xb << 4) >> 2] = tb;
                c[Wb + (Xb << 4) + 4 >> 2] = Bb;
                c[Wb + (Xb << 4) + 8 >> 2] = Ya;
                c[Wb + (Xb << 4) + 12 >> 2] = Db;
                _b = Xb + 1 | 0;
                $b = Yb;
                ac = Zb;
                bc =
                Wb
            } else {
                _b = Sb;
                $b = Tb;
                ac = Ub;
                bc = Vb
            }
            if ((Bb | 0) < ((c[A >> 2] | 0) + -1 | 0)) {
                rb = Bb + 1 | 0;
                sb = (c[p >> 2] | 0) + Cb | 0;
                if ((_b | 0) >= ($b | 0)) {
                    if ((ac | 0) < (_b | 0)) {
                        Xa = ac;
                        do {
                            Va = bc + (Xa - ac << 4) | 0;
                            ub = bc + (Xa << 4) | 0;
                            c[Va + 0 >> 2] = c[ub + 0 >> 2];
                            c[Va + 4 >> 2] = c[ub + 4 >> 2];
                            c[Va + 8 >> 2] = c[ub + 8 >> 2];
                            c[Va + 12 >> 2] = c[ub + 12 >> 2];
                            Xa = Xa + 1 | 0
                        } while ((Xa | 0) != (_b | 0))
                    }
                    Xa = _b - ac | 0;
                    if ((Xa | 0) < ($b | 0)) {
                        cc = bc;
                        dc = Xa;
                        ec = $b;
                        fc = 0
                    } else {
                        Ya = ($b | 0) > 0 ? $b << 1 : 1;
                        cc = Zm(D, bc, Ya << 4) | 0;
                        dc = Xa;
                        ec = Ya;
                        fc = 0
                    }
                } else {
                    cc = bc;
                    dc = _b;
                    ec = $b;
                    fc = ac
                }
                c[cc + (dc << 4) >> 2] = Ab;
                c[cc + (dc << 4) + 4 >> 2] = rb;
                c[cc + (dc << 4) + 8 >> 2] = sb;
                c[cc + (dc << 4) + 12 >> 2] = Db;
                gc = ec;
                hc = dc + 1 | 0;
                ic = fc;
                jc = cc
            } else {
                gc = $b;
                hc = _b;
                ic = ac;
                jc = bc
            }
            if ((ic | 0) == (hc | 0)) {
                vb = jc;
                Fb = 122;
                break
            } else {
                wb = gc;
                xb = hc;
                yb = ic;
                zb = jc
            }
        }
        if ((Fb | 0) == 122) {
            _m(D, vb);
            i = f;
            return
        }
    }
    function lk(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0;
        e = i;
        f = b + 20 | 0;
        g = c[f >> 2] | 0;
        if ((g + -1 | 0) <= 0) {
            i = e;
            return
        }
        h = b + 16 | 0;
        j = b + 24 | 0;
        b = c[h >> 2] | 0;
        k = g;
        g = 0;
        while (1) {
            if ((b + -1 | 0) > 0) {
                l = b;
                m = 0;
                do {
                    n = (aa(l, g) | 0) + m | 0;
                    o = c[j >> 2] | 0;
                    p = c[o + (n << 2) >> 2] | 0;
                    q = n + 1 | 0;
                    r = c[o + (q << 2) >> 2] | 0;
                    s = c[o + (n + l << 2) >> 2] |
                    0;
                    n = c[o + (q + l << 2) >> 2] | 0;
                    do if ((r | 0) != (s | 0)) {
                        do if (!((p | 0) == (r | 0) | (p | 0) == (s | 0))) {
                            if (((a[p + 12 >> 0] | 0) == 0 ? (a[r + 12 >> 0] | 0) == 0 : 0) ? (a[s + 12 >> 0] | 0) == 0 : 0)
                                break;
                            pb[c[(c[d >> 2] | 0) + 8 >> 2] & 31](d, c[p + 8 >> 2] | 0, c[r + 8 >> 2] | 0, c[s + 8 >> 2] | 0)
                        }
                        while (0);
                        if (!((n | 0) == (r | 0) | (n | 0) == (s | 0))) {
                            if (((a[r + 12 >> 0] | 0) == 0 ? (a[n + 12 >> 0] | 0) == 0 : 0) ? (a[s + 12 >> 0] | 0) == 0 : 0)
                                break;
                            pb[c[(c[d >> 2] | 0) + 8 >> 2] & 31](d, c[r + 8 >> 2] | 0, c[n + 8 >> 2] | 0, c[s + 8 >> 2] | 0)
                        }
                    }
                    while (0);
                    m = m + 1 | 0;
                    l = c[h >> 2] | 0
                } while ((m | 0) < (l + -1 | 0));
                t = c[f >> 2] | 0;
                u = l
            } else {
                t = k;
                u = b
            }
            g = g + 1 | 0;
            if ((g | 0) >= (t + -1 | 0))
                break;
            else {
                b = u;
                k = t
            }
        }
        i = e;
        return
    }
    function mk(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0;
        b = i;
        d = a + 40 | 0;
        e = a + 48 | 0;
        f = a + 16 | 0;
        c[a + 0 >> 2] = 0;
        c[a + 4 >> 2] = 0;
        c[a + 8 >> 2] = 0;
        c[a + 12 >> 2] = 0;
        g[f >> 2] = 1;
        c[a + 20 >> 2] = 0;
        c[a + 24 >> 2] = 0;
        c[a + 28 >> 2] = -1;
        g[a + 32 >> 2] = 0;
        g[a + 36 >> 2] = 0;
        f = 8784;
        h = c[f + 4 >> 2] | 0;
        j = d;
        c[j >> 2] = c[f >> 2];
        c[j + 4 >> 2] = h;
        h = 8784;
        j = c[h + 4 >> 2] | 0;
        f = e;
        c[f >> 2] = c[h >> 2];
        c[f + 4 >> 2] = j;
        j = a + 56 | 0;
        f = a + 72 | 0;
        c[j + 0 >> 2] = 0;
        c[j + 4 >> 2] = 0;
        c[j + 8 >> 2] = 0;
        c[j + 12 >> 2] = 0;
        g[f >> 2] = 1;
        c[a + 76 >> 2] = 0;
        i = b;
        return
    }
    function nk(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0;
        b = i;
        d = a + 28 | 0;
        e = c[a >> 2] | 0;
        f = c[e + 4 >> 2] | 0;
        if ((c[d >> 2] | 0) == (f | 0)) {
            i = b;
            return
        }
        h = +g[e + 32 >> 2] * .75;
        j = h * +g[e + 320 >> 2] * h;
        k = a + 32 | 0;
        g[k >> 2] = 0;
        l = a + 40 | 0;
        m = a + 44 | 0;
        n = a + 48 | 0;
        o = a + 52 | 0;
        p = a + 4 | 0;
        c[l + 0 >> 2] = 0;
        c[l + 4 >> 2] = 0;
        c[l + 8 >> 2] = 0;
        c[l + 12 >> 2] = 0;
        q = c[p >> 2] | 0;
        p = c[a + 8 >> 2] | 0;
        r = (q | 0) < (p | 0);
        if (r) {
            s = c[e + 96 >> 2] | 0;
            t = c[e + 104 >> 2] | 0;
            h = 0;
            u = 0;
            v = 0;
            w = 0;
            x = 0;
            y = q;
            do {
                h = j + h;
                g[k >> 2] = h;
                z = j * +g[s + (y << 3) + 4 >> 2];
                u = j * +g[s + (y << 3) >> 2] + u;
                g[l >> 2] = u;
                v = z + v;
                g[m >> 2] = v;
                z = j * +g[t + (y <<
                3) + 4 >> 2];
                w = j * +g[t + (y << 3) >> 2] + w;
                g[n >> 2] = w;
                x = z + x;
                g[o >> 2] = x;
                y = y + 1 | 0
            } while ((y | 0) < (p | 0));
            if (h > 0) {
                z = 1 / h;
                A = z * u;
                g[l >> 2] = A;
                B = z * v;
                g[m >> 2] = B;
                z = 1 / h;
                h = z * w;
                g[n >> 2] = h;
                C = z * x;
                g[o >> 2] = C;
                D = A;
                E = B;
                F = h;
                G = C
            } else {
                D = u;
                E = v;
                F = w;
                G = x
            }
            o = a + 36 | 0;
            g[o >> 2] = 0;
            n = a + 56 | 0;
            g[n >> 2] = 0;
            if (r) {
                r = c[e + 96 >> 2] | 0;
                m = c[e + 104 >> 2] | 0;
                x = 0;
                w = 0;
                e = q;
                do {
                    v = +g[r + (e << 3) >> 2] - D;
                    u = +g[r + (e << 3) + 4 >> 2] - E;
                    C = +g[m + (e << 3) >> 2] - F;
                    h = +g[m + (e << 3) + 4 >> 2] - G;
                    x = j * (v * v + u * u) + x;
                    g[o >> 2] = x;
                    w = w + j * (v * h - u * C);
                    g[n >> 2] = w;
                    e = e + 1 | 0
                } while ((e | 0) < (p | 0));
                if (x > 0)
                    g[n >> 2] = 1 / x * w
            }
        } else {
            g[a + 36 >> 2] = 0;
            g[a +
            56 >> 2] = 0
        }
        c[d >> 2] = f;
        i = b;
        return
    }
    function ok(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        d = i;
        nl(c[a >> 2] | 0, c[a + 4 >> 2] | 0, c[a + 8 >> 2] | 0, b);
        i = d;
        return
    }
    function pk(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        d = i;
        ol(c[a >> 2] | 0, c[a + 4 >> 2] | 0, c[a + 8 >> 2] | 0, b);
        i = d;
        return
    }
    function qk(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0;
        d = i;
        e = c[a >> 2] | 0;
        if ((c[(c[e + 400 >> 2] | 0) + 102876 >> 2] & 2 | 0) != 0) {
            i = d;
            return
        }
        f = c[a + 4 >> 2] | 0;
        g = a + 8 | 0;
        if ((f | 0) < (c[g >> 2] | 0)) {
            h = e;
            j = f
        } else {
            i = d;
            return
        }
        while (1) {
            Bk(h, j, b);
            f = j + 1 | 0;
            if ((f | 0) >= (c[g >> 2] | 0))
                break;
            h = c[a >> 2] | 0;
            j = f
        }
        i = d;
        return
    }
    function rk(b,
    d, e) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0;
        f = i;
        h = b + 52 | 0;
        c[b + 56 >> 2] = h;
        c[h >> 2] = h;
        c[b + 60 >> 2] = 256;
        h = b + 64 | 0;
        c[b + 68 >> 2] = h;
        c[h >> 2] = h;
        h = b + 72 | 0;
        c[b + 76 >> 2] = h;
        c[h >> 2] = h;
        h = b + 80 | 0;
        c[b + 136 >> 2] = 0;
        c[b + 140 >> 2] = 0;
        c[b + 148 >> 2] = 0;
        c[b + 152 >> 2] = 0;
        j = b + 160 | 0;
        k = b + 196 | 0;
        c[h + 0 >> 2] = 0;
        c[h + 4 >> 2] = 0;
        c[h + 8 >> 2] = 0;
        c[h + 12 >> 2] = 0;
        c[h + 16 >> 2] = 0;
        c[h + 20 >> 2] = 0;
        c[h + 24 >> 2] = 0;
        c[h + 28 >> 2] = 0;
        h = j + 0 | 0;
        j = h + 36 | 0;
        do {
            c[h >> 2] = 0;
            h = h + 4 | 0
        } while ((h | 0) < (j | 0));
        c[k >> 2] = e;
        c[b + 200 >> 2] = 0;
        c[b + 204 >> 2] = 0;
        c[b + 208 >> 2] = 0;
        c[b + 212 >> 2] = e;
        c[b + 216 >>
        2] = 0;
        c[b + 220 >> 2] = 0;
        c[b + 224 >> 2] = 0;
        c[b + 228 >> 2] = e;
        c[b + 232 >> 2] = 0;
        c[b + 236 >> 2] = 0;
        c[b + 240 >> 2] = 0;
        c[b + 244 >> 2] = e;
        c[b + 248 >> 2] = 0;
        c[b + 252 >> 2] = 0;
        c[b + 256 >> 2] = 0;
        c[b + 260 >> 2] = e;
        c[b + 264 >> 2] = 0;
        c[b + 268 >> 2] = 0;
        c[b + 272 >> 2] = 0;
        c[b + 276 >> 2] = e;
        k = b + 280 | 0;
        l = b + 316 | 0;
        a[l >> 0] = 0;
        m = b + 320 | 0;
        c[k + 0 >> 2] = 0;
        c[k + 4 >> 2] = 0;
        c[k + 8 >> 2] = 0;
        c[k + 12 >> 2] = 0;
        g[m >> 2] = 1;
        n = b + 324 | 0;
        g[n >> 2] = 1;
        g[b + 328 >> 2] = 1;
        o = b + 332 | 0;
        c[o >> 2] = 0;
        g[b + 336 >> 2] = .05000000074505806;
        g[b + 340 >> 2] = 1;
        g[b + 344 >> 2] = .25;
        g[b + 348 >> 2] = .25;
        g[b + 352 >> 2] = .25;
        g[b + 356 >> 2] = .20000000298023224;
        g[b + 360 >>
        2] = .20000000298023224;
        g[b + 364 >> 2] = 1;
        g[b + 368 >> 2] = .5;
        g[b + 372 >> 2] = .5;
        g[b + 376 >> 2] = .20000000298023224;
        g[b + 380 >> 2] = .20000000298023224;
        c[b + 384 >> 2] = 8;
        g[b + 388 >> 2] = .5;
        p = b + 392 | 0;
        a[p >> 0] = 1;
        g[b + 396 >> 2] = .01666666753590107;
        a[b >> 0] = 0;
        c[b + 4 >> 2] = 0;
        c[b + 8 >> 2] = 0;
        a[b + 12 >> 0] = 0;
        c[b + 16 >> 2] = 0;
        a[b + 20 >> 0] = 0;
        a[b + 21 >> 0] = 0;
        c[b + 24 >> 2] = 0;
        a[l >> 0] = a[d >> 0] | 0;
        q = +g[d + 4 >> 2];
        g[m >> 2] = q;
        g[b + 28 >> 2] = 1 / q;
        g[n >> 2] = +g[d + 8 >> 2];
        q = +g[d + 12 >> 2] * 2;
        g[b + 32 >> 2] = q;
        g[b + 40 >> 2] = q * q;
        g[b + 36 >> 2] = 1 / q;
        c[o >> 2] = c[d + 16 >> 2];
        c[b + 44 >> 2] = 0;
        o = b + 48 | 0;
        c[o >> 2] = 0;
        n = b + 112 | 0;
        c[b + 144 >> 2] = 0;
        c[b + 308 >> 2] = 0;
        c[b + 312 >> 2] = 0;
        c[n + 0 >> 2] = 0;
        c[n + 4 >> 2] = 0;
        c[n + 8 >> 2] = 0;
        c[n + 12 >> 2] = 0;
        c[n + 16 >> 2] = 0;
        c[n + 20 >> 2] = 0;
        h = l + 0 | 0;
        l = d + 0 | 0;
        j = h + 84 | 0;
        do {
            c[h >> 2] = c[l >> 2];
            h = h + 4 | 0;
            l = l + 4 | 0
        } while ((h | 0) < (j | 0));
        l = b + 400 | 0;
        c[l >> 2] = e;
        c[b + 156 >> 2] = 0;
        e = b + 296 | 0;
        c[e >> 2] = 0;
        c[e + 4 >> 2] = 0;
        a[b + 304 >> 0] = 0;
        e = a[p >> 0] | 0;
        if (e << 24 >> 24 == 0) {
            a[p >> 0] = e;
            i = f;
            return
        }
        h = c[k >> 2] | 0;
        if ((h | 0) == 0) {
            vk(b, 256);
            b = Em(c[l >> 2] | 0, c[o >> 2] << 2) | 0;
            xn(b | 0, 0, c[o >> 2] << 2 | 0) | 0;
            r = b
        } else
            r = h;
        c[k >> 2] = r;
        a[p >> 0] = e;
        i = f;
        return
    }
    function sk(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g =
            0;
        b = i;
        d = a + 312 | 0;
        while (1) {
            e = c[d >> 2] | 0;
            if ((e | 0) == 0)
                break;
            tk(a, e)
        }
        if ((c[a + 84 >> 2] | 0) == 0 ? (d = a + 80 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 2);
            c[d >> 2] = 0
        }
        if ((c[a + 92 >> 2] | 0) == 0 ? (d = a + 88 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 2);
            c[d >> 2] = 0
        }
        if ((c[a + 164 >> 2] | 0) == 0 ? (d = a + 160 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 2);
            c[d >> 2] = 0
        }
        if ((c[a + 172 >> 2] | 0) == 0 ? (d = a + 168 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 2);
            c[d >> 2] = 0
        }
        if ((c[a + 180 >> 2] | 0) == 0 ? (d = a + 176 | 0, e =
        c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 2);
            c[d >> 2] = 0
        }
        if ((c[a + 100 >> 2] | 0) == 0 ? (d = a + 96 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 3);
            c[d >> 2] = 0
        }
        if ((c[a + 108 >> 2] | 0) == 0 ? (d = a + 104 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 3);
            c[d >> 2] = 0
        }
        if ((c[a + 140 >> 2] | 0) == 0 ? (d = a + 136 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 2);
            c[d >> 2] = 0
        }
        if ((c[a + 152 >> 2] | 0) == 0 ? (d = a + 148 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 2);
            c[d >> 2] = 0
        }
        if ((c[a + 284 >> 2] | 0) == 0 ? (d = a +
        280 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 2);
            c[d >> 2] = 0
        }
        if ((c[a + 292 >> 2] | 0) == 0 ? (d = a + 288 | 0, e = c[d >> 2] | 0, (e | 0) != 0) : 0) {
            Fm(c[a + 400 >> 2] | 0, e, c[a + 48 >> 2] << 2);
            c[d >> 2] = 0
        }
        d = a + 112 | 0;
        e = a + 48 | 0;
        f = c[d >> 2] | 0;
        if ((f | 0) != 0) {
            Fm(c[a + 400 >> 2] | 0, f, c[e >> 2] << 3);
            c[d >> 2] = 0
        }
        d = a + 116 | 0;
        f = c[d >> 2] | 0;
        if ((f | 0) != 0) {
            Fm(c[a + 400 >> 2] | 0, f, c[e >> 2] << 2);
            c[d >> 2] = 0
        }
        d = a + 120 | 0;
        f = c[d >> 2] | 0;
        if ((f | 0) != 0) {
            Fm(c[a + 400 >> 2] | 0, f, c[e >> 2] << 2);
            c[d >> 2] = 0
        }
        d = a + 124 | 0;
        f = c[d >> 2] | 0;
        if ((f | 0) != 0) {
            Fm(c[a + 400 >> 2] | 0, f, c[e >> 2] << 2);
            c[d >> 2] = 0
        }
        d = a + 128 | 0;
        f =
        c[d >> 2] | 0;
        if ((f | 0) != 0) {
            Fm(c[a + 400 >> 2] | 0, f, c[e >> 2] << 3);
            c[d >> 2] = 0
        }
        d = a + 132 | 0;
        f = c[d >> 2] | 0;
        if ((f | 0) != 0) {
            Fm(c[a + 400 >> 2] | 0, f, c[e >> 2] << 2);
            c[d >> 2] = 0
        }
        d = a + 144 | 0;
        f = c[d >> 2] | 0;
        if ((f | 0) != 0) {
            Fm(c[a + 400 >> 2] | 0, f, c[e >> 2] << 2);
            c[d >> 2] = 0
        }
        d = a + 264 | 0;
        e = c[d >> 2] | 0;
        if ((e | 0) != 0) {
            f = a + 272 | 0;
            Fm(c[a + 276 >> 2] | 0, e, (c[f >> 2] | 0) * 60 | 0);
            c[d >> 2] = 0;
            c[f >> 2] = 0;
            c[a + 268 >> 2] = 0
        }
        f = a + 248 | 0;
        d = c[f >> 2] | 0;
        if ((d | 0) != 0) {
            e = a + 256 | 0;
            Fm(c[a + 260 >> 2] | 0, d, (c[e >> 2] | 0) * 20 | 0);
            c[f >> 2] = 0;
            c[e >> 2] = 0;
            c[a + 252 >> 2] = 0
        }
        e = a + 232 | 0;
        f = c[e >> 2] | 0;
        if ((f | 0) != 0) {
            d = a + 240 | 0;
            Fm(c[a + 244 >>
            2] | 0, f, (c[d >> 2] | 0) * 28 | 0);
            c[e >> 2] = 0;
            c[d >> 2] = 0;
            c[a + 236 >> 2] = 0
        }
        d = a + 216 | 0;
        e = c[d >> 2] | 0;
        if ((e | 0) != 0) {
            f = a + 224 | 0;
            Fm(c[a + 228 >> 2] | 0, e, (c[f >> 2] | 0) * 24 | 0);
            c[d >> 2] = 0;
            c[f >> 2] = 0;
            c[a + 220 >> 2] = 0
        }
        f = a + 200 | 0;
        d = c[f >> 2] | 0;
        if ((d | 0) != 0) {
            e = a + 208 | 0;
            Fm(c[a + 212 >> 2] | 0, d, c[e >> 2] << 3);
            c[f >> 2] = 0;
            c[e >> 2] = 0;
            c[a + 204 >> 2] = 0
        }
        e = a + 184 | 0;
        f = c[e >> 2] | 0;
        if ((f | 0) == 0) {
            g = a + 52 | 0;
            Tl(g);
            i = b;
            return
        }
        d = a + 192 | 0;
        Fm(c[a + 196 >> 2] | 0, f, c[d >> 2] << 2);
        c[e >> 2] = 0;
        c[d >> 2] = 0;
        c[a + 188 >> 2] = 0;
        g = a + 52 | 0;
        Tl(g);
        i = b;
        return
    }
    function tk(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k =
            0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        e = i;
        f = b + 400 | 0;
        g = c[(c[f >> 2] | 0) + 102992 >> 2] | 0;
        if ((g | 0) != 0)
            gb[c[(c[g >> 2] | 0) + 16 >> 2] & 63](g, d);
        g = d + 12 | 0;
        h = c[g >> 2] | 0;
        j = h << 4;
        k = j & 16;
        if ((((j | -17) ^ 16) & h | 0) != 0)
            a[b + 20 >> 0] = 1;
        h = b + 16 | 0;
        j = c[h >> 2] | 0;
        if ((k & ~j | 0) != 0)
            c[h >> 2] = j | k;
        c[g >> 2] = k;
        k = c[d + 4 >> 2] | 0;
        g = c[d + 8 >> 2] | 0;
        if ((k | 0) < (g | 0)) {
            j = b + 144 | 0;
            h = k;
            do {
                c[(c[j >> 2] | 0) + (h << 2) >> 2] = 0;
                h = h + 1 | 0
            } while ((h | 0) < (g | 0))
        }
        g = d + 20 | 0;
        h = c[g >> 2] | 0;
        j = d + 24 | 0;
        if ((h | 0) != 0)
            c[h + 24 >> 2] = c[j >> 2];
        h = c[j >> 2] | 0;
        if ((h | 0) != 0)
            c[h + 20 >> 2] = c[g >> 2];
        g = b + 312 | 0;
        if ((c[g >> 2] | 0) != (d | 0)) {
            l = b + 308 | 0;
            m =
            c[l >> 2] | 0;
            n = m + -1 | 0;
            c[l >> 2] = n;
            o = c[f >> 2] | 0;
            Fm(o, d, 80);
            i = e;
            return
        }
        c[g >> 2] = c[j >> 2];
        l = b + 308 | 0;
        m = c[l >> 2] | 0;
        n = m + -1 | 0;
        c[l >> 2] = n;
        o = c[f >> 2] | 0;
        Fm(o, d, 80);
        i = e;
        return
    }
    function uk(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0;
        b = i;
        d = a + 136 | 0;
        e = c[d >> 2] | 0;
        if ((e | 0) != 0) {
            f = e;
            c[d >> 2] = f;
            i = b;
            return f | 0
        }
        e = a + 48 | 0;
        g = c[e >> 2] | 0;
        if ((g | 0) == 0) {
            vk(a, 256);
            h = c[e >> 2] | 0
        } else
            h = g;
        g = Em(c[a + 400 >> 2] | 0, h << 2) | 0;
        xn(g | 0, 0, c[e >> 2] << 2 | 0) | 0;
        f = g;
        c[d >> 2] = f;
        i = b;
        return f | 0
    }
    function vk(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0;
        d = i;
        e = c[a + 332 >> 2] | 0;
        if ((e | 0) == 0)
            f = b;
        else
            f = (e | 0) < (b | 0) ? e : b;
        b = a + 92 | 0;
        e = c[b >> 2] | 0;
        if ((e | 0) == 0)
            g = f;
        else
            g = (f | 0) > (e | 0) ? e : f;
        f = a + 100 | 0;
        e = c[f >> 2] | 0;
        if ((e | 0) == 0)
            h = g;
        else
            h = (g | 0) > (e | 0) ? e : g;
        g = a + 108 | 0;
        e = c[g >> 2] | 0;
        if ((e | 0) == 0)
            j = h;
        else
            j = (h | 0) > (e | 0) ? e : h;
        h = a + 140 | 0;
        e = c[h >> 2] | 0;
        if ((e | 0) == 0)
            k = j;
        else
            k = (j | 0) > (e | 0) ? e : j;
        j = a + 152 | 0;
        e = c[j >> 2] | 0;
        if ((e | 0) == 0)
            l = k;
        else
            l = (k | 0) > (e | 0) ? e : k;
        k = a + 48 | 0;
        e = c[k >> 2] | 0;
        if ((e | 0) >= (l | 0)) {
            i = d;
            return
        }
        m = a + 80 | 0;
        n = c[m >> 2] | 0;
        o = (n |
        0) == 0;
        if ((c[a + 84 >> 2] | 0) == 0 & (o ^ 1)) {
            p = a + 400 | 0;
            q = Em(c[p >> 2] | 0, l << 2) | 0;
            if (o)
                r = q;
            else {
                o = e << 2;
                An(q | 0, n | 0, o | 0) | 0;
                Fm(c[p >> 2] | 0, n, o);
                r = q
            }
        } else
            r = n;
        c[m >> 2] = r;
        r = c[k >> 2] | 0;
        c[a + 60 >> 2] = l - r;
        m = a + 88 | 0;
        n = c[m >> 2] | 0;
        if ((c[b >> 2] | 0) == 0) {
            b = a + 400 | 0;
            q = Em(c[b >> 2] | 0, l << 2) | 0;
            if ((n | 0) == 0)
                s = q;
            else {
                o = r << 2;
                An(q | 0, n | 0, o | 0) | 0;
                Fm(c[b >> 2] | 0, n, o);
                s = q
            }
        } else
            s = n;
        c[m >> 2] = s;
        s = (c[a + 156 >> 2] | 0) > 0;
        m = c[k >> 2] | 0;
        n = a + 160 | 0;
        q = c[n >> 2] | 0;
        o = (q | 0) == 0;
        if ((c[a + 164 >> 2] | 0) == 0 & (o & s ^ 1)) {
            b = a + 400 | 0;
            r = Em(c[b >> 2] | 0, l << 2) | 0;
            if (o)
                t = r;
            else {
                o = m << 2;
                An(r | 0, q | 0, o | 0) |
                0;
                Fm(c[b >> 2] | 0, q, o);
                t = r
            }
        } else
            t = q;
        c[n >> 2] = t;
        t = c[k >> 2] | 0;
        n = a + 168 | 0;
        q = c[n >> 2] | 0;
        r = (q | 0) == 0;
        if ((c[a + 172 >> 2] | 0) == 0 & (r & s ^ 1)) {
            o = a + 400 | 0;
            b = Em(c[o >> 2] | 0, l << 2) | 0;
            if (r)
                u = b;
            else {
                r = t << 2;
                An(b | 0, q | 0, r | 0) | 0;
                Fm(c[o >> 2] | 0, q, r);
                u = b
            }
        } else
            u = q;
        c[n >> 2] = u;
        u = c[k >> 2] | 0;
        n = a + 176 | 0;
        q = c[n >> 2] | 0;
        b = (q | 0) == 0;
        if ((c[a + 180 >> 2] | 0) == 0 & (b & s ^ 1)) {
            s = a + 400 | 0;
            r = Em(c[s >> 2] | 0, l << 2) | 0;
            if (b)
                v = r;
            else {
                b = u << 2;
                An(r | 0, q | 0, b | 0) | 0;
                Fm(c[s >> 2] | 0, q, b);
                v = r
            }
        } else
            v = q;
        c[n >> 2] = v;
        v = c[k >> 2] | 0;
        n = a + 96 | 0;
        q = c[n >> 2] | 0;
        if ((c[f >> 2] | 0) == 0) {
            f = a + 400 | 0;
            r = Em(c[f >> 2] | 0,
            l << 3) | 0;
            if ((q | 0) == 0)
                w = r;
            else {
                b = v << 3;
                An(r | 0, q | 0, b | 0) | 0;
                Fm(c[f >> 2] | 0, q, b);
                w = r
            }
        } else
            w = q;
        c[n >> 2] = w;
        w = c[k >> 2] | 0;
        n = a + 104 | 0;
        q = c[n >> 2] | 0;
        if ((c[g >> 2] | 0) == 0) {
            g = a + 400 | 0;
            r = l << 3;
            b = Em(c[g >> 2] | 0, r) | 0;
            if ((q | 0) == 0) {
                x = b;
                y = r;
                z = g
            } else {
                f = w << 3;
                An(b | 0, q | 0, f | 0) | 0;
                Fm(c[g >> 2] | 0, q, f);
                x = b;
                y = r;
                z = g
            }
        } else {
            x = q;
            y = l << 3;
            z = a + 400 | 0
        }
        c[n >> 2] = x;
        x = a + 112 | 0;
        n = c[x >> 2] | 0;
        q = c[k >> 2] | 0;
        g = Em(c[z >> 2] | 0, y) | 0;
        if ((n | 0) != 0) {
            r = q << 3;
            An(g | 0, n | 0, r | 0) | 0;
            Fm(c[z >> 2] | 0, n, r)
        }
        c[x >> 2] = g;
        g = a + 116 | 0;
        x = c[g >> 2] | 0;
        r = c[k >> 2] | 0;
        n = l << 2;
        q = Em(c[z >> 2] | 0, n) | 0;
        if ((x | 0) != 0) {
            b =
            r << 2;
            An(q | 0, x | 0, b | 0) | 0;
            Fm(c[z >> 2] | 0, x, b)
        }
        c[g >> 2] = q;
        q = a + 120 | 0;
        g = c[q >> 2] | 0;
        if ((g | 0) == 0)
            A = 0;
        else {
            b = c[k >> 2] | 0;
            x = Em(c[z >> 2] | 0, n) | 0;
            r = b << 2;
            An(x | 0, g | 0, r | 0) | 0;
            Fm(c[z >> 2] | 0, g, r);
            A = x
        }
        c[q >> 2] = A;
        A = a + 124 | 0;
        q = c[A >> 2] | 0;
        x = c[k >> 2] | 0;
        r = Em(c[z >> 2] | 0, n) | 0;
        if ((q | 0) != 0) {
            g = x << 2;
            An(r | 0, q | 0, g | 0) | 0;
            Fm(c[z >> 2] | 0, q, g)
        }
        c[A >> 2] = r;
        r = a + 128 | 0;
        A = c[r >> 2] | 0;
        if ((A | 0) == 0)
            B = 0;
        else {
            g = c[k >> 2] | 0;
            q = Em(c[z >> 2] | 0, y) | 0;
            y = g << 3;
            An(q | 0, A | 0, y | 0) | 0;
            Fm(c[z >> 2] | 0, A, y);
            B = q
        }
        c[r >> 2] = B;
        B = a + 132 | 0;
        r = c[B >> 2] | 0;
        if ((r | 0) == 0)
            C = 0;
        else {
            q = c[k >> 2] | 0;
            y = Em(c[z >> 2] |
            0, n) | 0;
            A = q << 2;
            An(y | 0, r | 0, A | 0) | 0;
            Fm(c[z >> 2] | 0, r, A);
            C = y
        }
        c[B >> 2] = C;
        C = c[k >> 2] | 0;
        B = a + 136 | 0;
        y = c[B >> 2] | 0;
        A = (y | 0) == 0;
        do if ((c[h >> 2] | 0) == 0 & (A ^ 1)) {
            r = Em(c[z >> 2] | 0, n) | 0;
            if (A) {
                D = r;
                break
            }
            q = C << 2;
            An(r | 0, y | 0, q | 0) | 0;
            Fm(c[z >> 2] | 0, y, q);
            D = r
        } else
            D = y;
        while (0);
        c[B >> 2] = D;
        D = a + 144 | 0;
        B = c[D >> 2] | 0;
        y = c[k >> 2] | 0;
        C = Em(c[z >> 2] | 0, n) | 0;
        if ((B | 0) != 0) {
            A = y << 2;
            An(C | 0, B | 0, A | 0) | 0;
            Fm(c[z >> 2] | 0, B, A)
        }
        c[D >> 2] = C;
        C = c[k >> 2] | 0;
        D = a + 148 | 0;
        A = c[D >> 2] | 0;
        B = (A | 0) == 0;
        do if ((c[j >> 2] | 0) == 0 & (B ^ 1)) {
            y = Em(c[z >> 2] | 0, n) | 0;
            if (B) {
                E = y;
                break
            }
            h = C << 2;
            An(y | 0, A | 0, h | 0) | 0;
            Fm(c[z >> 2] | 0, A, h);
            E = y
        } else
            E = A;
        while (0);
        c[D >> 2] = E;
        E = c[k >> 2] | 0;
        D = a + 280 | 0;
        A = c[D >> 2] | 0;
        C = (A | 0) == 0;
        do if ((c[a + 284 >> 2] | 0) == 0 & (C ^ 1)) {
            B = Em(c[z >> 2] | 0, n) | 0;
            if (C) {
                F = B;
                break
            }
            j = E << 2;
            An(B | 0, A | 0, j | 0) | 0;
            Fm(c[z >> 2] | 0, A, j);
            F = B
        } else
            F = A;
        while (0);
        c[D >> 2] = F;
        F = c[k >> 2] | 0;
        D = a + 288 | 0;
        A = c[D >> 2] | 0;
        E = (A | 0) == 0;
        do if ((c[a + 292 >> 2] | 0) == 0 & (E ^ 1)) {
            C = Em(c[z >> 2] | 0, n) | 0;
            if (E) {
                G = C;
                break
            }
            B = F << 2;
            An(C | 0, A | 0, B | 0) | 0;
            Fm(c[z >> 2] | 0, A, B);
            G = C
        } else
            G = A;
        while (0);
        c[D >> 2] = G;
        c[k >> 2] = l;
        i = d;
        return
    }
    function wk(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l =
            0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0;
        e = i;
        f = b + 400 | 0;
        if ((c[(c[f >> 2] | 0) + 102876 >> 2] & 2 | 0) != 0) {
            h = 0;
            i = e;
            return h | 0
        }
        j = b + 44 | 0;
        k = c[j >> 2] | 0;
        l = b + 48 | 0;
        m = c[l >> 2] | 0;
        if ((k | 0) < (m | 0)) {
            n = k;
            o = m
        } else {
            vk(b, (k | 0) == 0 ? 256 : k << 1);
            n = c[j >> 2] | 0;
            o = c[l >> 2] | 0
        }
        do if ((n | 0) >= (o | 0))
            if ((a[b + 392 >> 0] | 0) == 0) {
                h = -1;
                i = e;
                return h | 0
            } else {
                k = c[b + 288 >> 2] | 0;
                m = c[k + (n + -1 << 2) >> 2] | 0;
                p = +(c[(c[b + 280 >> 2] | 0) + (m << 2) >> 2] | 0) > 0 ? m : c[k >> 2] | 0;
                k = b + 88 | 0;
                Ak(b, p, c[(c[k >> 2] | 0) + (p << 2) >> 2] | 2);
                xk(b);
                q = k;
                r = c[j >> 2] | 0;
                break
            }
        else {
            q = b + 88 | 0;
            r = n
        }
        while (0);
        n = r + 1 | 0;
        c[j >> 2] = n;
        c[(c[q >> 2] | 0) + (r << 2) >> 2] = 0;
        q = c[b + 160 >> 2] | 0;
        if ((q | 0) != 0)
            c[q + (r << 2) >> 2] = 0;
        q = c[b + 168 >> 2] | 0;
        if ((q | 0) != 0)
            c[q + (r << 2) >> 2] = 0;
        q = c[b + 176 >> 2] | 0;
        if ((q | 0) != 0)
            c[q + (r << 2) >> 2] = 0;
        q = d + 4 | 0;
        j = c[q + 4 >> 2] | 0;
        o = (c[b + 96 >> 2] | 0) + (r << 3) | 0;
        c[o >> 2] = c[q >> 2];
        c[o + 4 >> 2] = j;
        j = d + 12 | 0;
        o = c[j + 4 >> 2] | 0;
        q = (c[b + 104 >> 2] | 0) + (r << 3) | 0;
        c[q >> 2] = c[j >> 2];
        c[q + 4 >> 2] = o;
        g[(c[b + 116 >> 2] | 0) + (r << 2) >> 2] = 0;
        o = 8784;
        q = c[o + 4 >> 2] | 0;
        j = (c[b + 112 >> 2] | 0) + (r << 3) | 0;
        c[j >> 2] = c[o >> 2];
        c[j + 4 >> 2] = q;
        q = c[b + 120 >> 2] | 0;
        if ((q | 0) != 0)
            g[q + (r << 2) >> 2] = 0;
        q = c[b + 132 >> 2] | 0;
        if ((q | 0) != 0)
            g[q + (r << 2) >> 2] = 0;
        q = b + 136 | 0;
        j = c[q >> 2] | 0;
        o = d + 20 | 0;
        do if ((j | 0) == 0) {
            if ((((a[o >> 0] | 0) == 0 ? (a[d + 21 >> 0] | 0) == 0 : 0) ? (a[d + 22 >> 0] | 0) == 0 : 0) ? (a[d + 23 >> 0] | 0) == 0 : 0)
                break;
            k = c[l >> 2] | 0;
            if ((k | 0) == 0) {
                vk(b, 256);
                s = c[l >> 2] | 0
            } else
                s = k;
            k = Em(c[f >> 2] | 0, s << 2) | 0;
            xn(k | 0, 0, c[l >> 2] << 2 | 0) | 0;
            t = k;
            u = 26
        } else {
            t = j;
            u = 26
        }
        while (0);
        if ((u | 0) == 26) {
            c[q >> 2] = t;
            q = a[d + 21 >> 0] | 0;
            j = a[d + 22 >> 0] | 0;
            s = a[d + 23 >> 0] | 0;
            a[t + (r << 2) >> 0] = a[o >> 0] | 0;
            a[t + (r << 2) + 1 >> 0] = q;
            a[t + (r << 2) + 2 >> 0] = j;
            a[t + (r << 2) + 3 >> 0] = s
        }
        s = b + 148 | 0;
        t = c[s >> 2] | 0;
        j = d + 28 | 0;
        if ((t | 0) == 0) {
            if ((c[j >>
            2] | 0) != 0) {
                q = c[l >> 2] | 0;
                if ((q | 0) == 0) {
                    vk(b, 256);
                    v = c[l >> 2] | 0
                } else
                    v = q;
                q = Em(c[f >> 2] | 0, v << 2) | 0;
                xn(q | 0, 0, c[l >> 2] << 2 | 0) | 0;
                w = q;
                u = 32
            }
        } else {
            w = t;
            u = 32
        }
        if ((u | 0) == 32) {
            c[s >> 2] = w;
            c[w + (r << 2) >> 2] = c[j >> 2]
        }
        j = c[b + 80 >> 2] | 0;
        if ((j | 0) != 0)
            c[j + (r << 2) >> 2] = 0;
        j = b + 200 | 0;
        w = b + 204 | 0;
        s = c[w >> 2] | 0;
        u = b + 208 | 0;
        t = c[u >> 2] | 0;
        if ((s | 0) >= (t | 0) ? (q = (t | 0) == 0 ? 256 : t << 1, (t | 0) < (q | 0)) : 0) {
            t = b + 212 | 0;
            l = Em(c[t >> 2] | 0, q << 3) | 0;
            v = c[j >> 2] | 0;
            if ((v | 0) != 0) {
                An(l | 0, v | 0, c[w >> 2] << 3 | 0) | 0;
                Fm(c[t >> 2] | 0, c[j >> 2] | 0, c[u >> 2] << 3)
            }
            c[u >> 2] = q;
            c[j >> 2] = l;
            x = c[w >> 2] | 0
        } else
            x = s;
        c[w >>
        2] = x + 1;
        w = c[j >> 2] | 0;
        y = +g[d + 24 >> 2];
        j = y > 0;
        if ((c[b + 280 >> 2] | 0) != 0 | j) {
            if (j)
                z = y;
            else {
                j = c[b + 300 >> 2] | 0;
                z = +g[b + 396 >> 2] * +(((j | 0) < 0 ? 0 - j | 0 : 0) - j | 0)
            }
            yk(b, r, z);
            c[(c[b + 288 >> 2] | 0) + (r << 2) >> 2] = r
        }
        c[w + (x << 3) >> 2] = r;
        x = c[d + 32 >> 2] | 0;
        c[(c[b + 144 >> 2] | 0) + (r << 2) >> 2] = x;
        do if ((x | 0) != 0) {
            w = x + 4 | 0;
            j = c[w >> 2] | 0;
            s = x + 8 | 0;
            l = c[s >> 2] | 0;
            if ((j | 0) < (l | 0)) {
                zk(b, j, l, r);
                c[s >> 2] = n;
                break
            } else {
                c[w >> 2] = r;
                c[s >> 2] = n;
                break
            }
        }
        while (0);
        Ak(b, r, c[d >> 2] | 0);
        h = r;
        i = e;
        return h | 0
    }
    function xk(b) {
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0;
        d = i;
        e = b + 400 | 0;
        f = b + 44 | 0;
        h = Ym((c[e >> 2] | 0) + 76 | 0, c[f >> 2] << 2) | 0;
        if ((c[f >> 2] | 0) > 0) {
            j = b + 88 | 0;
            k = b + 80 | 0;
            l = b + 160 | 0;
            m = b + 168 | 0;
            n = b + 176 | 0;
            o = b + 96 | 0;
            p = b + 104 | 0;
            q = b + 144 | 0;
            r = b + 21 | 0;
            s = b + 120 | 0;
            t = b + 132 | 0;
            u = b + 136 | 0;
            v = b + 148 | 0;
            w = b + 280 | 0;
            x = b + 112 | 0;
            y = b + 64 | 0;
            z = 0;
            A = 0;
            B = 0;
            while (1) {
                C =
                c[j >> 2] | 0;
                D = c[C + (A << 2) >> 2] | 0;
                if ((D & 2 | 0) == 0) {
                    c[h + (A << 2) >> 2] = B;
                    if ((A | 0) != (B | 0)) {
                        E = c[k >> 2] | 0;
                        if ((E | 0) == 0)
                            F = C;
                        else {
                            C = c[E + (A << 2) >> 2] | 0;
                            if ((C | 0) != 0)
                                c[C + 8 >> 2] = B;
                            c[E + (B << 2) >> 2] = C;
                            F = c[j >> 2] | 0
                        }
                        c[F + (B << 2) >> 2] = c[F + (A << 2) >> 2];
                        C = c[l >> 2] | 0;
                        if ((C | 0) != 0)
                            c[C + (B << 2) >> 2] = c[C + (A << 2) >> 2];
                        C = c[m >> 2] | 0;
                        if ((C | 0) != 0)
                            c[C + (B << 2) >> 2] = c[C + (A << 2) >> 2];
                        C = c[n >> 2] | 0;
                        if ((C | 0) != 0)
                            c[C + (B << 2) >> 2] = c[C + (A << 2) >> 2];
                        C = c[o >> 2] | 0;
                        E = C + (A << 3) | 0;
                        G = c[E + 4 >> 2] | 0;
                        H = C + (B << 3) | 0;
                        c[H >> 2] = c[E >> 2];
                        c[H + 4 >> 2] = G;
                        G = c[p >> 2] | 0;
                        H = G + (A << 3) | 0;
                        E = c[H + 4 >> 2] | 0;
                        C = G + (B <<
                        3) | 0;
                        c[C >> 2] = c[H >> 2];
                        c[C + 4 >> 2] = E;
                        E = c[q >> 2] | 0;
                        c[E + (B << 2) >> 2] = c[E + (A << 2) >> 2];
                        if ((a[r >> 0] | 0) != 0) {
                            E = c[x >> 2] | 0;
                            C = E + (A << 3) | 0;
                            H = c[C + 4 >> 2] | 0;
                            G = E + (B << 3) | 0;
                            c[G >> 2] = c[C >> 2];
                            c[G + 4 >> 2] = H
                        }
                        H = c[s >> 2] | 0;
                        if ((H | 0) != 0)
                            g[H + (B << 2) >> 2] = +g[H + (A << 2) >> 2];
                        H = c[t >> 2] | 0;
                        if ((H | 0) != 0)
                            g[H + (B << 2) >> 2] = +g[H + (A << 2) >> 2];
                        H = c[u >> 2] | 0;
                        if ((H | 0) != 0) {
                            G = a[H + (A << 2) + 1 >> 0] | 0;
                            C = a[H + (A << 2) + 2 >> 0] | 0;
                            E = a[H + (A << 2) + 3 >> 0] | 0;
                            a[H + (B << 2) >> 0] = a[H + (A << 2) >> 0] | 0;
                            a[H + (B << 2) + 1 >> 0] = G;
                            a[H + (B << 2) + 2 >> 0] = C;
                            a[H + (B << 2) + 3 >> 0] = E
                        }
                        E = c[v >> 2] | 0;
                        if ((E | 0) != 0)
                            c[E + (B << 2) >> 2] = c[E +
                            (A << 2) >> 2];
                        E = c[w >> 2] | 0;
                        if ((E | 0) != 0)
                            c[E + (B << 2) >> 2] = c[E + (A << 2) >> 2]
                    }
                    I = D | z;
                    J = B + 1 | 0
                } else {
                    E = c[(c[e >> 2] | 0) + 102992 >> 2] | 0;
                    if (!((D & 512 | 0) == 0 | (E | 0) == 0))
                        ib[c[(c[E >> 2] | 0) + 20 >> 2] & 7](E, b, A);
                    E = c[k >> 2] | 0;
                    if ((E | 0) != 0 ? (D = E + (A << 2) | 0, E = c[D >> 2] | 0, (E | 0) != 0) : 0) {
                        c[E + 8 >> 2] = -1;
                        c[D >> 2] = 0;
                        Bm(y, E)
                    }
                    c[h + (A << 2) >> 2] = -1;
                    I = z;
                    J = B
                }
                A = A + 1 | 0;
                if ((A | 0) >= (c[f >> 2] | 0)) {
                    K = I;
                    L = J;
                    break
                } else {
                    z = I;
                    B = J
                }
            }
        } else {
            K = 0;
            L = 0
        }
        J = b + 204 | 0;
        B = c[J >> 2] | 0;
        I = b + 200 | 0;
        z = c[I >> 2] | 0;
        if ((B | 0) > 0) {
            A = 0;
            do {
                y = z + (A << 3) | 0;
                c[y >> 2] = c[h + (c[y >> 2] << 2) >> 2];
                A = A + 1 | 0;
                y = c[J >> 2] | 0
            } while ((A |
            0) < (y | 0));
            M = y
        } else
            M = B;
        B = z + (M << 3) | 0;
        a:
        do if ((M | 0) == 0) {
            N = z;
            O = 40
        } else {
            A = z;
            while (1) {
                if ((c[A >> 2] | 0) < 0) {
                    N = A;
                    O = 40;
                    break a
                }
                A = A + 8 | 0;
                if ((A | 0) == (B | 0)) {
                    P = B;
                    Q = z;
                    break
                }
            }
        }
        while (0);
        if ((O | 0) == 40)
            if ((N | 0) == (B | 0)) {
                P = B;
                Q = z
            } else {
                z = N;
                M = N;
                b:
                while (1) {
                    N = M;
                    do {
                        N = N + 8 | 0;
                        if ((N | 0) == (B | 0))
                            break b
                    } while ((c[N >> 2] | 0) < 0);
                    A = N;
                    y = c[A + 4 >> 2] | 0;
                    k = z;
                    c[k >> 2] = c[A >> 2];
                    c[k + 4 >> 2] = y;
                    z = z + 8 | 0;
                    M = N
                }
                P = z;
                Q = c[I >> 2] | 0
            }
        c[J >> 2] = P - Q >> 3;
        Q = b + 220 | 0;
        P = c[Q >> 2] | 0;
        J = b + 216 | 0;
        I = c[J >> 2] | 0;
        if ((P | 0) > 0) {
            z = 0;
            do {
                M = I + (z * 24 | 0) | 0;
                B = I + (z * 24 | 0) + 4 | 0;
                y = c[h + (c[B >> 2] << 2) >> 2] | 0;
                c[M >> 2] = c[h + (c[M >> 2] << 2) >> 2];
                c[B >> 2] = y;
                z = z + 1 | 0;
                y = c[Q >> 2] | 0
            } while ((z | 0) < (y | 0));
            R = y
        } else
            R = P;
        P = I + (R * 24 | 0) | 0;
        c:
        do if ((R | 0) == 0) {
            S = I;
            O = 52
        } else {
            z = I;
            while (1) {
                if ((c[z >> 2] | 0) < 0) {
                    S = z;
                    O = 52;
                    break c
                }
                if ((c[z + 4 >> 2] | 0) < 0) {
                    S = z;
                    O = 52;
                    break c
                }
                z = z + 24 | 0;
                if ((z | 0) == (P | 0)) {
                    T = P;
                    U = I;
                    break
                }
            }
        }
        while (0);
        if ((O | 0) == 52)
            if ((S | 0) == (P | 0)) {
                T = P;
                U = I
            } else {
                I = S + 24 | 0;
                d:
                do if ((I | 0) == (P | 0))
                    V = S;
                else {
                    R = S;
                    z = I;
                    N = S;
                    while (1) {
                        y = z;
                        B = N;
                        while (1) {
                            if ((c[y >> 2] | 0) >= 0 ? (c[B + 28 >> 2] | 0) >= 0 : 0)
                                break;
                            M = y + 24 | 0;
                            if ((M | 0) == (P | 0)) {
                                V = R;
                                break d
                            } else {
                                k = y;
                                y = M;
                                B = k
                            }
                        }
                        c[R + 0 >>
                        2] = c[y + 0 >> 2];
                        c[R + 4 >> 2] = c[y + 4 >> 2];
                        c[R + 8 >> 2] = c[y + 8 >> 2];
                        c[R + 12 >> 2] = c[y + 12 >> 2];
                        c[R + 16 >> 2] = c[y + 16 >> 2];
                        c[R + 20 >> 2] = c[y + 20 >> 2];
                        B = R + 24 | 0;
                        z = y + 24 | 0;
                        if ((z | 0) == (P | 0)) {
                            V = B;
                            break
                        } else {
                            R = B;
                            N = y
                        }
                    }
                }
                while (0);
                T = V;
                U = c[J >> 2] | 0
            }
        c[Q >> 2] = (T - U | 0) / 24 | 0;
        U = b + 236 | 0;
        T = c[U >> 2] | 0;
        Q = b + 232 | 0;
        J = c[Q >> 2] | 0;
        if ((T | 0) > 0) {
            V = 0;
            do {
                P = J + (V * 28 | 0) | 0;
                c[P >> 2] = c[h + (c[P >> 2] << 2) >> 2];
                V = V + 1 | 0;
                P = c[U >> 2] | 0
            } while ((V | 0) < (P | 0));
            W = P
        } else
            W = T;
        T = J + (W * 28 | 0) | 0;
        e:
        do if ((W | 0) == 0) {
            X = J;
            O = 65
        } else {
            V = J;
            while (1) {
                if ((c[V >> 2] | 0) < 0) {
                    X = V;
                    O = 65;
                    break e
                }
                V = V + 28 | 0;
                if ((V | 0) == (T |
                0)) {
                    Y = T;
                    Z = J;
                    break
                }
            }
        }
        while (0);
        if ((O | 0) == 65)
            if ((X | 0) == (T | 0)) {
                Y = T;
                Z = J
            } else {
                J = X;
                W = X;
                f:
                while (1) {
                    X = W;
                    do {
                        X = X + 28 | 0;
                        if ((X | 0) == (T | 0))
                            break f
                    } while ((c[X >> 2] | 0) < 0);
                    c[J + 0 >> 2] = c[X + 0 >> 2];
                    c[J + 4 >> 2] = c[X + 4 >> 2];
                    c[J + 8 >> 2] = c[X + 8 >> 2];
                    c[J + 12 >> 2] = c[X + 12 >> 2];
                    c[J + 16 >> 2] = c[X + 16 >> 2];
                    c[J + 20 >> 2] = c[X + 20 >> 2];
                    c[J + 24 >> 2] = c[X + 24 >> 2];
                    J = J + 28 | 0;
                    W = X
                }
                Y = J;
                Z = c[Q >> 2] | 0
            }
        c[U >> 2] = (Y - Z | 0) / 28 | 0;
        Z = b + 252 | 0;
        Y = c[Z >> 2] | 0;
        U = b + 248 | 0;
        Q = c[U >> 2] | 0;
        if ((Y | 0) > 0) {
            J = 0;
            do {
                W = Q + (J * 20 | 0) | 0;
                c[W >> 2] = c[h + (c[W >> 2] << 2) >> 2];
                W = Q + (J * 20 | 0) + 4 | 0;
                c[W >> 2] = c[h + (c[W >> 2] << 2) >> 2];
                J = J + 1 | 0;
                W = c[Z >> 2] | 0
            } while ((J | 0) < (W | 0));
            _ = W
        } else
            _ = Y;
        Y = Q + (_ * 20 | 0) | 0;
        g:
        do if ((_ | 0) == 0) {
            $ = Q;
            O = 77
        } else {
            J = Q;
            while (1) {
                if ((c[J >> 2] | 0) < 0) {
                    $ = J;
                    O = 77;
                    break g
                }
                if ((c[J + 4 >> 2] | 0) < 0) {
                    $ = J;
                    O = 77;
                    break g
                }
                J = J + 20 | 0;
                if ((J | 0) == (Y | 0)) {
                    aa = Y;
                    ba = Q;
                    break
                }
            }
        }
        while (0);
        if ((O | 0) == 77)
            if (($ | 0) == (Y | 0)) {
                aa = Y;
                ba = Q
            } else {
                Q = $ + 20 | 0;
                h:
                do if ((Q | 0) == (Y | 0))
                    ca = $;
                else {
                    _ = $;
                    J = Q;
                    X = $;
                    while (1) {
                        W = J;
                        T = X;
                        while (1) {
                            if ((c[W >> 2] | 0) >= 0 ? (c[T + 24 >> 2] | 0) >= 0 : 0)
                                break;
                            V = W + 20 | 0;
                            if ((V | 0) == (Y | 0)) {
                                ca = _;
                                break h
                            } else {
                                P = W;
                                W = V;
                                T = P
                            }
                        }
                        c[_ + 0 >> 2] = c[W + 0 >> 2];
                        c[_ + 4 >> 2] = c[W + 4 >> 2];
                        c[_ + 8 >> 2] = c[W + 8 >> 2];
                        c[_ + 12 >> 2] = c[W + 12 >> 2];
                        c[_ + 16 >> 2] = c[W + 16 >> 2];
                        T = _ + 20 | 0;
                        J = W + 20 | 0;
                        if ((J | 0) == (Y | 0)) {
                            ca = T;
                            break
                        } else {
                            _ = T;
                            X = W
                        }
                    }
                }
                while (0);
                aa = ca;
                ba = c[U >> 2] | 0
            }
        c[Z >> 2] = (aa - ba | 0) / 20 | 0;
        ba = b + 268 | 0;
        aa = c[ba >> 2] | 0;
        Z = b + 264 | 0;
        U = c[Z >> 2] | 0;
        if ((aa | 0) > 0) {
            ca = 0;
            do {
                Y = U + (ca * 60 | 0) | 0;
                c[Y >> 2] = c[h + (c[Y >> 2] << 2) >> 2];
                Y = U + (ca * 60 | 0) + 4 | 0;
                c[Y >> 2] = c[h + (c[Y >> 2] << 2) >> 2];
                Y = U + (ca * 60 | 0) + 8 | 0;
                c[Y >> 2] = c[h + (c[Y >> 2] << 2) >> 2];
                ca = ca + 1 | 0;
                Y = c[ba >> 2] | 0
            } while ((ca | 0) < (Y | 0));
            da = Y
        } else
            da = aa;
        aa = U + (da * 60 | 0) | 0;
        i:
        do if ((da | 0) == 0) {
            ea = U;
            O = 92
        } else {
            ca = U;
            while (1) {
                if ((c[ca >>
                2] | 0) < 0) {
                    ea = ca;
                    O = 92;
                    break i
                }
                if ((c[ca + 4 >> 2] | 0) < 0) {
                    ea = ca;
                    O = 92;
                    break i
                }
                if ((c[ca + 8 >> 2] | 0) < 0) {
                    ea = ca;
                    O = 92;
                    break i
                }
                ca = ca + 60 | 0;
                if ((ca | 0) == (aa | 0)) {
                    fa = aa;
                    ga = U;
                    break
                }
            }
        }
        while (0);
        if ((O | 0) == 92)
            if ((ea | 0) == (aa | 0)) {
                fa = aa;
                ga = U
            } else {
                U = ea + 60 | 0;
                j:
                do if ((U | 0) == (aa | 0))
                    ha = ea;
                else {
                    O = ea;
                    da = U;
                    ca = ea;
                    while (1) {
                        Y = da;
                        $ = ca;
                        while (1) {
                            if (((c[Y >> 2] | 0) >= 0 ? (c[$ + 64 >> 2] | 0) >= 0 : 0) ? (c[$ + 68 >> 2] | 0) >= 0 : 0)
                                break;
                            Q = Y + 60 | 0;
                            if ((Q | 0) == (aa | 0)) {
                                ha = O;
                                break j
                            } else {
                                X = Y;
                                Y = Q;
                                $ = X
                            }
                        }
                        $ = O + 0 | 0;
                        W = Y + 0 | 0;
                        X = $ + 60 | 0;
                        do {
                            c[$ >> 2] = c[W >> 2];
                            $ = $ + 4 | 0;
                            W = W + 4 | 0
                        } while (($ | 0) < (X | 0));
                        W = O + 60 | 0;
                        da = Y + 60 | 0;
                        if ((da | 0) == (aa | 0)) {
                            ha = W;
                            break
                        } else {
                            O = W;
                            ca = Y
                        }
                    }
                }
                while (0);
                fa = ha;
                ga = c[Z >> 2] | 0
            }
        c[ba >> 2] = (fa - ga | 0) / 60 | 0;
        ga = c[b + 288 >> 2] | 0;
        if ((ga | 0) != 0 ? (fa = c[f >> 2] | 0, (fa | 0) > 0) : 0) {
            ba = fa;
            fa = 0;
            Z = 0;
            while (1) {
                ha = c[h + (c[ga + (fa << 2) >> 2] << 2) >> 2] | 0;
                if ((ha | 0) == -1) {
                    ia = ba;
                    ja = Z
                } else {
                    c[ga + (Z << 2) >> 2] = ha;
                    ia = c[f >> 2] | 0;
                    ja = Z + 1 | 0
                }
                fa = fa + 1 | 0;
                if ((fa | 0) >= (ia | 0))
                    break;
                else {
                    ba = ia;
                    Z = ja
                }
            }
        }
        ja = b + 312 | 0;
        Z = c[ja >> 2] | 0;
        if ((Z | 0) != 0) {
            ia = b + 16 | 0;
            ba = b + 132 | 0;
            fa = b + 48 | 0;
            ga = b + 20 | 0;
            ha = Z;
            do {
                Z = ha + 4 | 0;
                aa = c[Z >> 2] | 0;
                ea = ha + 8 | 0;
                U = c[ea >> 2] | 0;
                if ((aa | 0) < (U |
                0)) {
                    ca = L;
                    O = aa;
                    aa = 0;
                    da = 0;
                    while (1) {
                        W = c[h + (O << 2) >> 2] | 0;
                        if ((W | 0) > -1) {
                            $ = W + 1 | 0;
                            ka = (ca | 0) < (W | 0) ? ca : W;
                            la = (aa | 0) > ($ | 0) ? aa : $;
                            ma = da
                        } else {
                            ka = ca;
                            la = aa;
                            ma = 1
                        }
                        O = O + 1 | 0;
                        if ((O | 0) >= (U | 0)) {
                            na = ka;
                            oa = la;
                            pa = ma;
                            break
                        } else {
                            ca = ka;
                            aa = la;
                            da = ma
                        }
                    }
                } else {
                    na = L;
                    oa = 0;
                    pa = 0
                }
                if ((na | 0) < (oa | 0)) {
                    c[Z >> 2] = na;
                    c[ea >> 2] = oa;
                    if (pa ? (da = ha + 12 | 0, aa = c[da >> 2] | 0, (aa & 1 | 0) != 0) : 0) {
                        ca = aa | 16;
                        aa = c[ia >> 2] | 0;
                        if ((ca & ~aa | 0) != 0) {
                            U = c[ba >> 2] | 0;
                            if ((U | 0) == 0) {
                                O = c[fa >> 2] | 0;
                                if ((O | 0) == 0) {
                                    vk(b, 256);
                                    qa = c[fa >> 2] | 0
                                } else
                                    qa = O;
                                O = Em(c[e >> 2] | 0, qa << 2) | 0;
                                xn(O | 0, 0, c[fa >> 2] << 2 | 0) |
                                0;
                                ra = O;
                                sa = c[ia >> 2] | 0
                            } else {
                                ra = U;
                                sa = aa
                            }
                            c[ba >> 2] = ra;
                            c[ia >> 2] = sa | ca
                        }
                        c[da >> 2] = ca
                    }
                } else {
                    c[Z >> 2] = 0;
                    c[ea >> 2] = 0;
                    ca = ha + 12 | 0;
                    da = c[ca >> 2] | 0;
                    if ((da & 4 | 0) == 0) {
                        aa = da | 8;
                        if (((da & -9 ^ -9) & da | 0) != 0)
                            a[ga >> 0] = 1;
                        U = c[ia >> 2] | 0;
                        if ((aa & ~U | 0) != 0) {
                            if ((da & 1 | 0) == 0)
                                ta = U;
                            else {
                                da = c[ba >> 2] | 0;
                                if ((da | 0) == 0) {
                                    O = c[fa >> 2] | 0;
                                    if ((O | 0) == 0) {
                                        vk(b, 256);
                                        ua = c[fa >> 2] | 0
                                    } else
                                        ua = O;
                                    O = Em(c[e >> 2] | 0, ua << 2) | 0;
                                    xn(O | 0, 0, c[fa >> 2] << 2 | 0) | 0;
                                    va = O;
                                    wa = c[ia >> 2] | 0
                                } else {
                                    va = da;
                                    wa = U
                                }
                                c[ba >> 2] = va;
                                ta = wa
                            }
                            c[ia >> 2] = ta | aa
                        }
                        c[ca >> 2] = aa
                    }
                }
                ha = c[ha + 24 >> 2] | 0
            } while ((ha | 0) != 0)
        }
        c[f >> 2] =
        L;
        _m((c[e >> 2] | 0) + 76 | 0, h);
        c[b + 8 >> 2] = K;
        a[b + 12 >> 0] = 0;
        K = c[ja >> 2] | 0;
        if ((K | 0) == 0) {
            i = d;
            return
        } else
            xa = K;
        do {
            K = xa;
            xa = c[xa + 24 >> 2] | 0;
            if ((c[K + 12 >> 2] & 8 | 0) != 0)
                tk(b, K)
        } while ((xa | 0) != 0);
        i = d;
        return
    }
    function yk(b, d, e) {
        b = b | 0;
        d = d | 0;
        e = +e;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0;
        f = i;
        h = b + 288 | 0;
        j = c[h >> 2] | 0;
        k = (j | 0) == 0;
        l = b + 280 | 0;
        m = c[l >> 2] | 0;
        if ((m | 0) == 0) {
            n = b + 48 | 0;
            o = c[n >> 2] | 0;
            if ((o | 0) == 0) {
                vk(b, 256);
                p = c[n >> 2] | 0
            } else
                p = o;
            o = Em(c[b + 400 >> 2] | 0, p << 2) | 0;
            xn(o | 0, 0, c[n >> 2] << 2 | 0) | 0;
            q = o;
            r = c[h >> 2] | 0
        } else {
            q = m;
            r = j
        }
        c[l >> 2] =
        q;
        if ((r | 0) == 0) {
            q = b + 48 | 0;
            j = c[q >> 2] | 0;
            if ((j | 0) == 0) {
                vk(b, 256);
                s = c[q >> 2] | 0
            } else
                s = j;
            j = Em(c[b + 400 >> 2] | 0, s << 2) | 0;
            xn(j | 0, 0, c[q >> 2] << 2 | 0) | 0;
            t = j
        } else
            t = r;
        c[h >> 2] = t;
        if (k ? (k = c[b + 44 >> 2] | 0, (k | 0) > 0) : 0) {
            h = 0;
            do {
                c[t + (h << 2) >> 2] = h;
                h = h + 1 | 0
            } while ((h | 0) != (k | 0))
        }
        k = ~~(e / +g[b + 396 >> 2]);
        if ((k | 0) > 0)
            u = (c[b + 300 >> 2] | 0) + k | 0;
        else
            u = k;
        k = (c[l >> 2] | 0) + (d << 2) | 0;
        if ((u | 0) == (c[k >> 2] | 0)) {
            i = f;
            return
        }
        c[k >> 2] = u;
        a[b + 304 >> 0] = 1;
        i = f;
        return
    }
    function zk(b, d, e, f) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w =
            0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0;
        h = i;
        if ((d | 0) == (e | 0) | (e | 0) == (f | 0)) {
            i = h;
            return
        }
        j = c[b + 88 >> 2] | 0;
        k = j + (d << 2) | 0;
        l = j + (e << 2) | 0;
        m = j + (f << 2) | 0;
        a:
        do if ((d + 1 | 0) != (e | 0)) {
            if ((e + 1 | 0) == (f | 0)) {
                n = j + (f + -1 << 2) | 0;
                o = c[n >> 2] | 0;
                p = n - k | 0;
                Bn(j + (f - (p >> 2) << 2) | 0, k | 0, p | 0) | 0;
                c[k >> 2] = o;
                break
            }
            o = l;
            p = o - k >> 2;
            n = m;
            q = n - o >> 2;
            if ((p | 0) == (q |
            0)) {
                o = k;
                r = l;
                while (1) {
                    s = c[o >> 2] | 0;
                    c[o >> 2] = c[r >> 2];
                    c[r >> 2] = s;
                    o = o + 4 | 0;
                    if ((o | 0) == (l | 0))
                        break a;
                    else
                        r = r + 4 | 0
                }
            } else {
                t = p;
                u = q
            }
            while (1) {
                r = (t | 0) % (u | 0) | 0;
                if ((r | 0) == 0)
                    break;
                else {
                    o = u;
                    u = r;
                    t = o
                }
            }
            if ((u | 0) != 0) {
                q = p + -1 | 0;
                o = p + d | 0;
                r = j + (u + d << 2) | 0;
                do {
                    s = r;
                    r = r + -4 | 0;
                    v = c[r >> 2] | 0;
                    w = r;
                    x = s + (q << 2) | 0;
                    while (1) {
                        c[w >> 2] = c[x >> 2];
                        s = n - x >> 2;
                        if ((p | 0) < (s | 0))
                            y = x + (p << 2) | 0;
                        else
                            y = j + (o - s << 2) | 0;
                        if ((y | 0) == (r | 0))
                            break;
                        else {
                            s = x;
                            x = y;
                            w = s
                        }
                    }
                    c[x >> 2] = v
                } while ((r | 0) != (k | 0))
            }
        } else {
            r = c[k >> 2] | 0;
            o = m - l | 0;
            Bn(k | 0, l | 0, o | 0) | 0;
            c[j + ((o >> 2) + d << 2) >> 2] = r
        }
        while (0);
        j = c[b +
        160 >> 2] | 0;
        b:
        do if ((j | 0) != 0) {
            l = j + (d << 2) | 0;
            k = j + (e << 2) | 0;
            m = j + (f << 2) | 0;
            if ((d + 1 | 0) == (e | 0)) {
                y = c[l >> 2] | 0;
                u = m - k | 0;
                Bn(l | 0, k | 0, u | 0) | 0;
                c[j + ((u >> 2) + d << 2) >> 2] = y;
                break
            }
            if ((e + 1 | 0) == (f | 0)) {
                y = j + (f + -1 << 2) | 0;
                u = c[y >> 2] | 0;
                t = y - l | 0;
                Bn(j + (f - (t >> 2) << 2) | 0, l | 0, t | 0) | 0;
                c[l >> 2] = u;
                break
            }
            u = k;
            t = u - l >> 2;
            y = m;
            m = y - u >> 2;
            if ((t | 0) == (m | 0)) {
                u = l;
                r = k;
                while (1) {
                    o = c[u >> 2] | 0;
                    c[u >> 2] = c[r >> 2];
                    c[r >> 2] = o;
                    u = u + 4 | 0;
                    if ((u | 0) == (k | 0))
                        break b;
                    else
                        r = r + 4 | 0
                }
            } else {
                z = t;
                A = m
            }
            while (1) {
                r = (z | 0) % (A | 0) | 0;
                if ((r | 0) == 0)
                    break;
                else {
                    k = A;
                    A = r;
                    z = k
                }
            }
            if ((A | 0) != 0) {
                m = t + -1 | 0;
                k = t +
                d | 0;
                r = j + (A + d << 2) | 0;
                do {
                    u = r;
                    r = r + -4 | 0;
                    o = c[r >> 2] | 0;
                    p = r;
                    n = u + (m << 2) | 0;
                    while (1) {
                        c[p >> 2] = c[n >> 2];
                        u = y - n >> 2;
                        if ((t | 0) < (u | 0))
                            B = n + (t << 2) | 0;
                        else
                            B = j + (k - u << 2) | 0;
                        if ((B | 0) == (r | 0))
                            break;
                        else {
                            u = n;
                            n = B;
                            p = u
                        }
                    }
                    c[n >> 2] = o
                } while ((r | 0) != (l | 0))
            }
        }
        while (0);
        B = c[b + 168 >> 2] | 0;
        c:
        do if ((B | 0) != 0) {
            j = B + (d << 2) | 0;
            A = B + (e << 2) | 0;
            z = B + (f << 2) | 0;
            if ((d + 1 | 0) == (e | 0)) {
                l = c[j >> 2] | 0;
                r = z - A | 0;
                Bn(j | 0, A | 0, r | 0) | 0;
                c[B + ((r >> 2) + d << 2) >> 2] = l;
                break
            }
            if ((e + 1 | 0) == (f | 0)) {
                l = B + (f + -1 << 2) | 0;
                r = c[l >> 2] | 0;
                k = l - j | 0;
                Bn(B + (f - (k >> 2) << 2) | 0, j | 0, k | 0) | 0;
                c[j >> 2] = r;
                break
            }
            r = A;
            k = r - j >> 2;
            l = z;
            z = l - r >> 2;
            if ((k | 0) == (z | 0)) {
                r = j;
                t = A;
                while (1) {
                    y = c[r >> 2] | 0;
                    c[r >> 2] = c[t >> 2];
                    c[t >> 2] = y;
                    r = r + 4 | 0;
                    if ((r | 0) == (A | 0))
                        break c;
                    else
                        t = t + 4 | 0
                }
            } else {
                C = k;
                D = z
            }
            while (1) {
                t = (C | 0) % (D | 0) | 0;
                if ((t | 0) == 0)
                    break;
                else {
                    A = D;
                    D = t;
                    C = A
                }
            }
            if ((D | 0) != 0) {
                z = k + -1 | 0;
                A = k + d | 0;
                t = B + (D + d << 2) | 0;
                do {
                    r = t;
                    t = t + -4 | 0;
                    y = c[t >> 2] | 0;
                    m = t;
                    p = r + (z << 2) | 0;
                    while (1) {
                        c[m >> 2] = c[p >> 2];
                        r = l - p >> 2;
                        if ((k | 0) < (r | 0))
                            E = p + (k << 2) | 0;
                        else
                            E = B + (A - r << 2) | 0;
                        if ((E | 0) == (t | 0))
                            break;
                        else {
                            r = p;
                            p = E;
                            m = r
                        }
                    }
                    c[p >> 2] = y
                } while ((t | 0) != (j | 0))
            }
        }
        while (0);
        E = c[b + 176 >> 2] | 0;
        d:
        do if ((E | 0) != 0) {
            B = E + (d << 2) |
            0;
            D = E + (e << 2) | 0;
            C = E + (f << 2) | 0;
            if ((d + 1 | 0) == (e | 0)) {
                j = c[B >> 2] | 0;
                t = C - D | 0;
                Bn(B | 0, D | 0, t | 0) | 0;
                c[E + ((t >> 2) + d << 2) >> 2] = j;
                break
            }
            if ((e + 1 | 0) == (f | 0)) {
                j = E + (f + -1 << 2) | 0;
                t = c[j >> 2] | 0;
                A = j - B | 0;
                Bn(E + (f - (A >> 2) << 2) | 0, B | 0, A | 0) | 0;
                c[B >> 2] = t;
                break
            }
            t = D;
            A = t - B >> 2;
            j = C;
            C = j - t >> 2;
            if ((A | 0) == (C | 0)) {
                t = B;
                k = D;
                while (1) {
                    l = c[t >> 2] | 0;
                    c[t >> 2] = c[k >> 2];
                    c[k >> 2] = l;
                    t = t + 4 | 0;
                    if ((t | 0) == (D | 0))
                        break d;
                    else
                        k = k + 4 | 0
                }
            } else {
                F = A;
                G = C
            }
            while (1) {
                k = (F | 0) % (G | 0) | 0;
                if ((k | 0) == 0)
                    break;
                else {
                    D = G;
                    G = k;
                    F = D
                }
            }
            if ((G | 0) != 0) {
                C = A + -1 | 0;
                D = A + d | 0;
                k = E + (G + d << 2) | 0;
                do {
                    t = k;
                    k = k + -4 | 0;
                    l = c[k >>
                    2] | 0;
                    z = k;
                    m = t + (C << 2) | 0;
                    while (1) {
                        c[z >> 2] = c[m >> 2];
                        t = j - m >> 2;
                        if ((A | 0) < (t | 0))
                            H = m + (A << 2) | 0;
                        else
                            H = E + (D - t << 2) | 0;
                        if ((H | 0) == (k | 0))
                            break;
                        else {
                            t = m;
                            m = H;
                            z = t
                        }
                    }
                    c[m >> 2] = l
                } while ((k | 0) != (B | 0))
            }
        }
        while (0);
        H = c[b + 96 >> 2] | 0;
        E = H + (d << 3) | 0;
        G = H + (e << 3) | 0;
        F = H + (f << 3) | 0;
        e:
        do if ((d + 1 | 0) != (e | 0)) {
            if ((e + 1 | 0) == (f | 0)) {
                B = H + (f + -1 << 3) | 0;
                k = B;
                D = c[k >> 2] | 0;
                A = c[k + 4 >> 2] | 0;
                k = B - E | 0;
                Bn(H + (f - (k >> 3) << 3) | 0, E | 0, k | 0) | 0;
                k = E;
                c[k >> 2] = D;
                c[k + 4 >> 2] = A;
                break
            }
            A = G;
            k = A - E >> 3;
            D = F;
            B = D - A >> 3;
            if ((k | 0) == (B | 0)) {
                A = E;
                j = G;
                while (1) {
                    C = A;
                    z = c[C >> 2] | 0;
                    y = c[C + 4 >> 2] | 0;
                    C = j;
                    p = c[C + 4 >>
                    2] | 0;
                    t = A;
                    c[t >> 2] = c[C >> 2];
                    c[t + 4 >> 2] = p;
                    p = j;
                    c[p >> 2] = z;
                    c[p + 4 >> 2] = y;
                    A = A + 8 | 0;
                    if ((A | 0) == (G | 0))
                        break e;
                    else
                        j = j + 8 | 0
                }
            } else {
                I = k;
                J = B
            }
            while (1) {
                j = (I | 0) % (J | 0) | 0;
                if ((j | 0) == 0)
                    break;
                else {
                    A = J;
                    J = j;
                    I = A
                }
            }
            if ((J | 0) != 0) {
                B = k + -1 | 0;
                A = k + d | 0;
                j = H + (J + d << 3) | 0;
                do {
                    y = j;
                    j = j + -8 | 0;
                    p = j;
                    z = c[p >> 2] | 0;
                    t = c[p + 4 >> 2] | 0;
                    p = j;
                    C = y + (B << 3) | 0;
                    while (1) {
                        y = C;
                        o = c[y + 4 >> 2] | 0;
                        n = p;
                        c[n >> 2] = c[y >> 2];
                        c[n + 4 >> 2] = o;
                        o = D - C >> 3;
                        if ((k | 0) < (o | 0))
                            K = C + (k << 3) | 0;
                        else
                            K = H + (A - o << 3) | 0;
                        if ((K | 0) == (j | 0))
                            break;
                        else {
                            o = C;
                            C = K;
                            p = o
                        }
                    }
                    p = C;
                    c[p >> 2] = z;
                    c[p + 4 >> 2] = t
                } while ((j | 0) != (E | 0))
            }
        } else {
            j =
            E;
            A = c[j >> 2] | 0;
            k = c[j + 4 >> 2] | 0;
            j = F - G | 0;
            Bn(E | 0, G | 0, j | 0) | 0;
            D = H + ((j >> 3) + d << 3) | 0;
            c[D >> 2] = A;
            c[D + 4 >> 2] = k
        }
        while (0);
        H = c[b + 104 >> 2] | 0;
        G = H + (d << 3) | 0;
        E = H + (e << 3) | 0;
        F = H + (f << 3) | 0;
        f:
        do if ((d + 1 | 0) != (e | 0)) {
            if ((e + 1 | 0) == (f | 0)) {
                K = H + (f + -1 << 3) | 0;
                J = K;
                I = c[J >> 2] | 0;
                k = c[J + 4 >> 2] | 0;
                J = K - G | 0;
                Bn(H + (f - (J >> 3) << 3) | 0, G | 0, J | 0) | 0;
                J = G;
                c[J >> 2] = I;
                c[J + 4 >> 2] = k;
                break
            }
            k = E;
            J = k - G >> 3;
            I = F;
            K = I - k >> 3;
            if ((J | 0) == (K | 0)) {
                k = G;
                D = E;
                while (1) {
                    A = k;
                    j = c[A >> 2] | 0;
                    B = c[A + 4 >> 2] | 0;
                    A = D;
                    p = c[A + 4 >> 2] | 0;
                    l = k;
                    c[l >> 2] = c[A >> 2];
                    c[l + 4 >> 2] = p;
                    p = D;
                    c[p >> 2] = j;
                    c[p + 4 >> 2] = B;
                    k = k + 8 | 0;
                    if ((k |
                    0) == (E | 0))
                        break f;
                    else
                        D = D + 8 | 0
                }
            } else {
                L = J;
                M = K
            }
            while (1) {
                D = (L | 0) % (M | 0) | 0;
                if ((D | 0) == 0)
                    break;
                else {
                    k = M;
                    M = D;
                    L = k
                }
            }
            if ((M | 0) != 0) {
                K = J + -1 | 0;
                k = J + d | 0;
                D = H + (M + d << 3) | 0;
                do {
                    B = D;
                    D = D + -8 | 0;
                    p = D;
                    j = c[p >> 2] | 0;
                    l = c[p + 4 >> 2] | 0;
                    p = D;
                    A = B + (K << 3) | 0;
                    while (1) {
                        B = A;
                        m = c[B + 4 >> 2] | 0;
                        o = p;
                        c[o >> 2] = c[B >> 2];
                        c[o + 4 >> 2] = m;
                        m = I - A >> 3;
                        if ((J | 0) < (m | 0))
                            N = A + (J << 3) | 0;
                        else
                            N = H + (k - m << 3) | 0;
                        if ((N | 0) == (D | 0))
                            break;
                        else {
                            m = A;
                            A = N;
                            p = m
                        }
                    }
                    p = A;
                    c[p >> 2] = j;
                    c[p + 4 >> 2] = l
                } while ((D | 0) != (G | 0))
            }
        } else {
            D = G;
            k = c[D >> 2] | 0;
            J = c[D + 4 >> 2] | 0;
            D = F - E | 0;
            Bn(G | 0, E | 0, D | 0) | 0;
            I = H + ((D >> 3) + d << 3) | 0;
            c[I >>
            2] = k;
            c[I + 4 >> 2] = J
        }
        while (0);
        H = c[b + 144 >> 2] | 0;
        E = H + (d << 2) | 0;
        G = H + (e << 2) | 0;
        F = H + (f << 2) | 0;
        g:
        do if ((d + 1 | 0) != (e | 0)) {
            if ((e + 1 | 0) == (f | 0)) {
                N = H + (f + -1 << 2) | 0;
                M = c[N >> 2] | 0;
                L = N - E | 0;
                Bn(H + (f - (L >> 2) << 2) | 0, E | 0, L | 0) | 0;
                c[E >> 2] = M;
                break
            }
            M = G;
            L = M - E >> 2;
            N = F;
            J = N - M >> 2;
            if ((L | 0) == (J | 0)) {
                M = E;
                I = G;
                while (1) {
                    k = c[M >> 2] | 0;
                    c[M >> 2] = c[I >> 2];
                    c[I >> 2] = k;
                    M = M + 4 | 0;
                    if ((M | 0) == (G | 0))
                        break g;
                    else
                        I = I + 4 | 0
                }
            } else {
                O = L;
                P = J
            }
            while (1) {
                I = (O | 0) % (P | 0) | 0;
                if ((I | 0) == 0)
                    break;
                else {
                    M = P;
                    P = I;
                    O = M
                }
            }
            if ((P | 0) != 0) {
                J = L + -1 | 0;
                M = L + d | 0;
                I = H + (P + d << 2) | 0;
                do {
                    k = I;
                    I = I + -4 | 0;
                    D = c[I >> 2] | 0;
                    K =
                    I;
                    p = k + (J << 2) | 0;
                    while (1) {
                        c[K >> 2] = c[p >> 2];
                        k = N - p >> 2;
                        if ((L | 0) < (k | 0))
                            Q = p + (L << 2) | 0;
                        else
                            Q = H + (M - k << 2) | 0;
                        if ((Q | 0) == (I | 0))
                            break;
                        else {
                            k = p;
                            p = Q;
                            K = k
                        }
                    }
                    c[p >> 2] = D
                } while ((I | 0) != (E | 0))
            }
        } else {
            I = c[E >> 2] | 0;
            M = F - G | 0;
            Bn(E | 0, G | 0, M | 0) | 0;
            c[H + ((M >> 2) + d << 2) >> 2] = I
        }
        while (0);
        h:
        do if ((a[b + 21 >> 0] | 0) != 0) {
            H = c[b + 112 >> 2] | 0;
            G = H + (d << 3) | 0;
            E = H + (e << 3) | 0;
            F = H + (f << 3) | 0;
            if ((d + 1 | 0) == (e | 0)) {
                Q = G;
                P = c[Q >> 2] | 0;
                O = c[Q + 4 >> 2] | 0;
                Q = F - E | 0;
                Bn(G | 0, E | 0, Q | 0) | 0;
                I = H + ((Q >> 3) + d << 3) | 0;
                c[I >> 2] = P;
                c[I + 4 >> 2] = O;
                break
            }
            if ((e + 1 | 0) == (f | 0)) {
                O = H + (f + -1 << 3) | 0;
                I = O;
                P = c[I >> 2] | 0;
                Q =
                c[I + 4 >> 2] | 0;
                I = O - G | 0;
                Bn(H + (f - (I >> 3) << 3) | 0, G | 0, I | 0) | 0;
                I = G;
                c[I >> 2] = P;
                c[I + 4 >> 2] = Q;
                break
            }
            Q = E;
            I = Q - G >> 3;
            P = F;
            F = P - Q >> 3;
            if ((I | 0) == (F | 0)) {
                Q = G;
                O = E;
                while (1) {
                    M = Q;
                    L = c[M >> 2] | 0;
                    N = c[M + 4 >> 2] | 0;
                    M = O;
                    J = c[M + 4 >> 2] | 0;
                    K = Q;
                    c[K >> 2] = c[M >> 2];
                    c[K + 4 >> 2] = J;
                    J = O;
                    c[J >> 2] = L;
                    c[J + 4 >> 2] = N;
                    Q = Q + 8 | 0;
                    if ((Q | 0) == (E | 0))
                        break h;
                    else
                        O = O + 8 | 0
                }
            } else {
                R = I;
                S = F
            }
            while (1) {
                O = (R | 0) % (S | 0) | 0;
                if ((O | 0) == 0)
                    break;
                else {
                    E = S;
                    S = O;
                    R = E
                }
            }
            if ((S | 0) != 0) {
                F = I + -1 | 0;
                E = I + d | 0;
                O = H + (S + d << 3) | 0;
                do {
                    Q = O;
                    O = O + -8 | 0;
                    N = O;
                    J = c[N >> 2] | 0;
                    L = c[N + 4 >> 2] | 0;
                    N = O;
                    K = Q + (F << 3) | 0;
                    while (1) {
                        Q = K;
                        M = c[Q + 4 >> 2] |
                        0;
                        l = N;
                        c[l >> 2] = c[Q >> 2];
                        c[l + 4 >> 2] = M;
                        M = P - K >> 3;
                        if ((I | 0) < (M | 0))
                            T = K + (I << 3) | 0;
                        else
                            T = H + (E - M << 3) | 0;
                        if ((T | 0) == (O | 0))
                            break;
                        else {
                            M = K;
                            K = T;
                            N = M
                        }
                    }
                    N = K;
                    c[N >> 2] = J;
                    c[N + 4 >> 2] = L
                } while ((O | 0) != (G | 0))
            }
        }
        while (0);
        T = c[b + 120 >> 2] | 0;
        i:
        do if ((T | 0) != 0) {
            S = T + (d << 2) | 0;
            R = T + (e << 2) | 0;
            G = T + (f << 2) | 0;
            if ((d + 1 | 0) == (e | 0)) {
                U = +g[S >> 2];
                O = G - R | 0;
                Bn(S | 0, R | 0, O | 0) | 0;
                g[T + ((O >> 2) + d << 2) >> 2] = U;
                break
            }
            if ((e + 1 | 0) == (f | 0)) {
                O = T + (f + -1 << 2) | 0;
                U = +g[O >> 2];
                E = O - S | 0;
                Bn(T + (f - (E >> 2) << 2) | 0, S | 0, E | 0) | 0;
                g[S >> 2] = U;
                break
            }
            E = R;
            O = E - S >> 2;
            H = G;
            G = H - E >> 2;
            if ((O | 0) == (G | 0)) {
                E = S;
                I = R;
                while (1) {
                    U =
                    +g[E >> 2];
                    g[E >> 2] = +g[I >> 2];
                    g[I >> 2] = U;
                    E = E + 4 | 0;
                    if ((E | 0) == (R | 0))
                        break i;
                    else
                        I = I + 4 | 0
                }
            } else {
                V = O;
                W = G
            }
            while (1) {
                I = (V | 0) % (W | 0) | 0;
                if ((I | 0) == 0)
                    break;
                else {
                    R = W;
                    W = I;
                    V = R
                }
            }
            if ((W | 0) != 0) {
                G = O + -1 | 0;
                R = O + d | 0;
                I = T + (W + d << 2) | 0;
                do {
                    E = I;
                    I = I + -4 | 0;
                    U = +g[I >> 2];
                    P = I;
                    F = E + (G << 2) | 0;
                    while (1) {
                        g[P >> 2] = +g[F >> 2];
                        E = H - F >> 2;
                        if ((O | 0) < (E | 0))
                            X = F + (O << 2) | 0;
                        else
                            X = T + (R - E << 2) | 0;
                        if ((X | 0) == (I | 0))
                            break;
                        else {
                            E = F;
                            F = X;
                            P = E
                        }
                    }
                    g[F >> 2] = U
                } while ((I | 0) != (S | 0))
            }
        }
        while (0);
        X = c[b + 132 >> 2] | 0;
        j:
        do if ((X | 0) != 0) {
            T = X + (d << 2) | 0;
            W = X + (e << 2) | 0;
            V = X + (f << 2) | 0;
            if ((d + 1 | 0) == (e | 0)) {
                Y =
                +g[T >> 2];
                S = V - W | 0;
                Bn(T | 0, W | 0, S | 0) | 0;
                g[X + ((S >> 2) + d << 2) >> 2] = Y;
                break
            }
            if ((e + 1 | 0) == (f | 0)) {
                S = X + (f + -1 << 2) | 0;
                Y = +g[S >> 2];
                I = S - T | 0;
                Bn(X + (f - (I >> 2) << 2) | 0, T | 0, I | 0) | 0;
                g[T >> 2] = Y;
                break
            }
            I = W;
            S = I - T >> 2;
            R = V;
            V = R - I >> 2;
            if ((S | 0) == (V | 0)) {
                I = T;
                O = W;
                while (1) {
                    Y = +g[I >> 2];
                    g[I >> 2] = +g[O >> 2];
                    g[O >> 2] = Y;
                    I = I + 4 | 0;
                    if ((I | 0) == (W | 0))
                        break j;
                    else
                        O = O + 4 | 0
                }
            } else {
                Z = S;
                _ = V
            }
            while (1) {
                O = (Z | 0) % (_ | 0) | 0;
                if ((O | 0) == 0)
                    break;
                else {
                    W = _;
                    _ = O;
                    Z = W
                }
            }
            if ((_ | 0) != 0) {
                V = S + -1 | 0;
                W = S + d | 0;
                O = X + (_ + d << 2) | 0;
                do {
                    I = O;
                    O = O + -4 | 0;
                    Y = +g[O >> 2];
                    H = O;
                    G = I + (V << 2) | 0;
                    while (1) {
                        g[H >> 2] = +g[G >> 2];
                        I =
                        R - G >> 2;
                        if ((S | 0) < (I | 0))
                            $ = G + (S << 2) | 0;
                        else
                            $ = X + (W - I << 2) | 0;
                        if (($ | 0) == (O | 0))
                            break;
                        else {
                            I = G;
                            G = $;
                            H = I
                        }
                    }
                    g[G >> 2] = Y
                } while ((O | 0) != (T | 0))
            }
        }
        while (0);
        $ = c[b + 136 >> 2] | 0;
        if (($ | 0) != 0)
            rl($ + (d << 2) | 0, $ + (e << 2) | 0, $ + (f << 2) | 0) | 0;
        $ = c[b + 148 >> 2] | 0;
        k:
        do if (($ | 0) != 0) {
            X = $ + (d << 2) | 0;
            _ = $ + (e << 2) | 0;
            Z = $ + (f << 2) | 0;
            if ((d + 1 | 0) == (e | 0)) {
                T = c[X >> 2] | 0;
                O = Z - _ | 0;
                Bn(X | 0, _ | 0, O | 0) | 0;
                c[$ + ((O >> 2) + d << 2) >> 2] = T;
                break
            }
            if ((e + 1 | 0) == (f | 0)) {
                T = $ + (f + -1 << 2) | 0;
                O = c[T >> 2] | 0;
                W = T - X | 0;
                Bn($ + (f - (W >> 2) << 2) | 0, X | 0, W | 0) | 0;
                c[X >> 2] = O;
                break
            }
            O = _;
            W = O - X >> 2;
            T = Z;
            Z = T - O >> 2;
            if ((W | 0) ==
            (Z | 0)) {
                O = X;
                S = _;
                while (1) {
                    R = c[O >> 2] | 0;
                    c[O >> 2] = c[S >> 2];
                    c[S >> 2] = R;
                    O = O + 4 | 0;
                    if ((O | 0) == (_ | 0))
                        break k;
                    else
                        S = S + 4 | 0
                }
            } else {
                aa = W;
                ba = Z
            }
            while (1) {
                S = (aa | 0) % (ba | 0) | 0;
                if ((S | 0) == 0)
                    break;
                else {
                    _ = ba;
                    ba = S;
                    aa = _
                }
            }
            if ((ba | 0) != 0) {
                Z = W + -1 | 0;
                _ = W + d | 0;
                S = $ + (ba + d << 2) | 0;
                do {
                    O = S;
                    S = S + -4 | 0;
                    R = c[S >> 2] | 0;
                    V = S;
                    H = O + (Z << 2) | 0;
                    while (1) {
                        c[V >> 2] = c[H >> 2];
                        O = T - H >> 2;
                        if ((W | 0) < (O | 0))
                            ca = H + (W << 2) | 0;
                        else
                            ca = $ + (_ - O << 2) | 0;
                        if ((ca | 0) == (S | 0))
                            break;
                        else {
                            O = H;
                            H = ca;
                            V = O
                        }
                    }
                    c[H >> 2] = R
                } while ((S | 0) != (X | 0))
            }
        }
        while (0);
        ca = b + 80 | 0;
        $ = c[ca >> 2] | 0;
        if (($ | 0) != 0) {
            ba = $ + (d << 2) | 0;
            aa = $ +
            (e << 2) | 0;
            X = $ + (f << 2) | 0;
            l:
            do if ((d + 1 | 0) != (e | 0)) {
                if ((e + 1 | 0) == (f | 0)) {
                    S = $ + (f + -1 << 2) | 0;
                    _ = c[S >> 2] | 0;
                    W = S - ba | 0;
                    Bn($ + (f - (W >> 2) << 2) | 0, ba | 0, W | 0) | 0;
                    c[ba >> 2] = _;
                    break
                }
                _ = aa;
                W = _ - ba >> 2;
                S = X;
                T = S - _ >> 2;
                if ((W | 0) == (T | 0)) {
                    _ = ba;
                    Z = aa;
                    while (1) {
                        V = c[_ >> 2] | 0;
                        c[_ >> 2] = c[Z >> 2];
                        c[Z >> 2] = V;
                        _ = _ + 4 | 0;
                        if ((_ | 0) == (aa | 0))
                            break l;
                        else
                            Z = Z + 4 | 0
                    }
                } else {
                    da = W;
                    ea = T
                }
                while (1) {
                    Z = (da | 0) % (ea | 0) | 0;
                    if ((Z | 0) == 0)
                        break;
                    else {
                        _ = ea;
                        ea = Z;
                        da = _
                    }
                }
                if ((ea | 0) != 0) {
                    T = W + -1 | 0;
                    _ = W + d | 0;
                    Z = $ + (ea + d << 2) | 0;
                    do {
                        V = Z;
                        Z = Z + -4 | 0;
                        G = c[Z >> 2] | 0;
                        O = Z;
                        F = V + (T << 2) | 0;
                        while (1) {
                            c[O >> 2] = c[F >> 2];
                            V =
                            S - F >> 2;
                            if ((W | 0) < (V | 0))
                                fa = F + (W << 2) | 0;
                            else
                                fa = $ + (_ - V << 2) | 0;
                            if ((fa | 0) == (Z | 0))
                                break;
                            else {
                                V = F;
                                F = fa;
                                O = V
                            }
                        }
                        c[F >> 2] = G
                    } while ((Z | 0) != (ba | 0))
                }
            } else {
                Z = c[ba >> 2] | 0;
                _ = X - aa | 0;
                Bn(ba | 0, aa | 0, _ | 0) | 0;
                c[$ + ((_ >> 2) + d << 2) >> 2] = Z
            }
            while (0);
            if ((d | 0) < (f | 0)) {
                $ = c[ca >> 2] | 0;
                ca = f - e | 0;
                aa = d - e | 0;
                ba = d;
                do {
                    X = c[$ + (ba << 2) >> 2] | 0;
                    if ((X | 0) != 0) {
                        fa = X + 8 | 0;
                        X = c[fa >> 2] | 0;
                        do if ((X | 0) >= (d | 0))
                            if ((X | 0) < (e | 0)) {
                                ga = ca + X | 0;
                                break
                            } else {
                                ga = X + ((X | 0) < (f | 0) ? aa : 0) | 0;
                                break
                            }
                        else
                            ga = X;
                        while (0);
                        c[fa >> 2] = ga
                    }
                    ba = ba + 1 | 0
                } while ((ba | 0) != (f | 0))
            }
        }
        ba = c[b + 280 >> 2] | 0;
        if ((ba | 0) != 0) {
            ga =
            ba + (d << 2) | 0;
            aa = ba + (e << 2) | 0;
            ca = ba + (f << 2) | 0;
            m:
            do if ((d + 1 | 0) == (e | 0)) {
                $ = c[ga >> 2] | 0;
                X = ca - aa | 0;
                Bn(ga | 0, aa | 0, X | 0) | 0;
                c[ba + ((X >> 2) + d << 2) >> 2] = $
            } else {
                if ((e + 1 | 0) == (f | 0)) {
                    $ = ba + (f + -1 << 2) | 0;
                    X = c[$ >> 2] | 0;
                    ea = $ - ga | 0;
                    Bn(ba + (f - (ea >> 2) << 2) | 0, ga | 0, ea | 0) | 0;
                    c[ga >> 2] = X;
                    break
                }
                X = aa;
                ea = X - ga >> 2;
                $ = ca;
                da = $ - X >> 2;
                if ((ea | 0) == (da | 0)) {
                    X = ga;
                    Z = aa;
                    while (1) {
                        _ = c[X >> 2] | 0;
                        c[X >> 2] = c[Z >> 2];
                        c[Z >> 2] = _;
                        X = X + 4 | 0;
                        if ((X | 0) == (aa | 0))
                            break m;
                        else
                            Z = Z + 4 | 0
                    }
                } else {
                    ha = ea;
                    ia = da
                }
                while (1) {
                    Z = (ha | 0) % (ia | 0) | 0;
                    if ((Z | 0) == 0)
                        break;
                    else {
                        X = ia;
                        ia = Z;
                        ha = X
                    }
                }
                if ((ia | 0) == 0)
                    break;
                da = ea + -1 | 0;
                X = ea + d | 0;
                Z = ba + (ia + d << 2) | 0;
                do {
                    fa = Z;
                    Z = Z + -4 | 0;
                    _ = c[Z >> 2] | 0;
                    W = Z;
                    S = fa + (da << 2) | 0;
                    while (1) {
                        c[W >> 2] = c[S >> 2];
                        fa = $ - S >> 2;
                        if ((ea | 0) < (fa | 0))
                            ja = S + (ea << 2) | 0;
                        else
                            ja = ba + (X - fa << 2) | 0;
                        if ((ja | 0) == (Z | 0))
                            break;
                        else {
                            fa = S;
                            S = ja;
                            W = fa
                        }
                    }
                    c[S >> 2] = _
                } while ((Z | 0) != (ga | 0))
            }
            while (0);
            ga = c[b + 44 >> 2] | 0;
            ja = c[b + 288 >> 2] | 0;
            if ((ga | 0) > 0) {
                ba = f - e | 0;
                ia = d - e | 0;
                ha = 0;
                do {
                    aa = ja + (ha << 2) | 0;
                    ca = c[aa >> 2] | 0;
                    do if ((ca | 0) >= (d | 0))
                        if ((ca | 0) < (e | 0)) {
                            ka = ba + ca | 0;
                            break
                        } else {
                            ka = ca + ((ca | 0) < (f | 0) ? ia : 0) | 0;
                            break
                        }
                    else
                        ka = ca;
                    while (0);
                    c[aa >> 2] = ka;
                    ha = ha + 1 | 0
                } while ((ha |
                0) != (ga | 0))
            }
        }
        ga = b + 204 | 0;
        if ((c[ga >> 2] | 0) > 0) {
            ha = c[b + 200 >> 2] | 0;
            ka = f - e | 0;
            ia = d - e | 0;
            ba = 0;
            do {
                ja = ha + (ba << 3) | 0;
                ca = c[ja >> 2] | 0;
                do if ((ca | 0) >= (d | 0))
                    if ((ca | 0) < (e | 0)) {
                        la = ka + ca | 0;
                        break
                    } else {
                        la = ca + ((ca | 0) < (f | 0) ? ia : 0) | 0;
                        break
                    }
                else
                    la = ca;
                while (0);
                c[ja >> 2] = la;
                ba = ba + 1 | 0
            } while ((ba | 0) < (c[ga >> 2] | 0))
        }
        ga = b + 220 | 0;
        if ((c[ga >> 2] | 0) > 0) {
            ba = c[b + 216 >> 2] | 0;
            la = f - e | 0;
            ia = d - e | 0;
            ka = 0;
            do {
                ha = ba + (ka * 24 | 0) | 0;
                ca = c[ha >> 2] | 0;
                do if ((ca | 0) >= (d | 0))
                    if ((ca | 0) < (e | 0)) {
                        ma = la + ca | 0;
                        break
                    } else {
                        ma = ca + ((ca | 0) < (f | 0) ? ia : 0) | 0;
                        break
                    }
                else
                    ma = ca;
                while (0);
                ca = ba +
                (ka * 24 | 0) + 4 | 0;
                ja = c[ca >> 2] | 0;
                do if ((ja | 0) >= (d | 0))
                    if ((ja | 0) < (e | 0)) {
                        na = la + ja | 0;
                        break
                    } else {
                        na = ja + ((ja | 0) < (f | 0) ? ia : 0) | 0;
                        break
                    }
                else
                    na = ja;
                while (0);
                c[ha >> 2] = ma;
                c[ca >> 2] = na;
                ka = ka + 1 | 0
            } while ((ka | 0) < (c[ga >> 2] | 0))
        }
        ga = b + 236 | 0;
        if ((c[ga >> 2] | 0) > 0) {
            ka = c[b + 232 >> 2] | 0;
            na = f - e | 0;
            ma = d - e | 0;
            ia = 0;
            do {
                la = ka + (ia * 28 | 0) | 0;
                ba = c[la >> 2] | 0;
                do if ((ba | 0) >= (d | 0))
                    if ((ba | 0) < (e | 0)) {
                        oa = na + ba | 0;
                        break
                    } else {
                        oa = ba + ((ba | 0) < (f | 0) ? ma : 0) | 0;
                        break
                    }
                else
                    oa = ba;
                while (0);
                c[la >> 2] = oa;
                ia = ia + 1 | 0
            } while ((ia | 0) < (c[ga >> 2] | 0))
        }
        ga = b + 252 | 0;
        if ((c[ga >> 2] | 0) > 0) {
            ia =
            c[b + 248 >> 2] | 0;
            oa = f - e | 0;
            ma = d - e | 0;
            na = 0;
            do {
                ka = ia + (na * 20 | 0) | 0;
                ba = c[ka >> 2] | 0;
                do if ((ba | 0) >= (d | 0))
                    if ((ba | 0) < (e | 0)) {
                        pa = oa + ba | 0;
                        break
                    } else {
                        pa = ba + ((ba | 0) < (f | 0) ? ma : 0) | 0;
                        break
                    }
                else
                    pa = ba;
                while (0);
                c[ka >> 2] = pa;
                ba = ia + (na * 20 | 0) + 4 | 0;
                la = c[ba >> 2] | 0;
                do if ((la | 0) >= (d | 0))
                    if ((la | 0) < (e | 0)) {
                        qa = oa + la | 0;
                        break
                    } else {
                        qa = la + ((la | 0) < (f | 0) ? ma : 0) | 0;
                        break
                    }
                else
                    qa = la;
                while (0);
                c[ba >> 2] = qa;
                na = na + 1 | 0
            } while ((na | 0) < (c[ga >> 2] | 0))
        }
        ga = b + 268 | 0;
        if ((c[ga >> 2] | 0) > 0) {
            na = c[b + 264 >> 2] | 0;
            qa = f - e | 0;
            ma = d - e | 0;
            oa = 0;
            do {
                ia = na + (oa * 60 | 0) | 0;
                pa = c[ia >> 2] | 0;
                do if ((pa |
                0) >= (d | 0))
                    if ((pa | 0) < (e | 0)) {
                        ra = qa + pa | 0;
                        break
                    } else {
                        ra = pa + ((pa | 0) < (f | 0) ? ma : 0) | 0;
                        break
                    }
                else
                    ra = pa;
                while (0);
                c[ia >> 2] = ra;
                pa = na + (oa * 60 | 0) + 4 | 0;
                ba = c[pa >> 2] | 0;
                do if ((ba | 0) >= (d | 0))
                    if ((ba | 0) < (e | 0)) {
                        sa = qa + ba | 0;
                        break
                    } else {
                        sa = ba + ((ba | 0) < (f | 0) ? ma : 0) | 0;
                        break
                    }
                else
                    sa = ba;
                while (0);
                c[pa >> 2] = sa;
                ba = na + (oa * 60 | 0) + 8 | 0;
                ia = c[ba >> 2] | 0;
                do if ((ia | 0) >= (d | 0))
                    if ((ia | 0) < (e | 0)) {
                        ta = qa + ia | 0;
                        break
                    } else {
                        ta = ia + ((ia | 0) < (f | 0) ? ma : 0) | 0;
                        break
                    }
                else
                    ta = ia;
                while (0);
                c[ba >> 2] = ta;
                oa = oa + 1 | 0
            } while ((oa | 0) < (c[ga >> 2] | 0))
        }
        ga = c[b + 312 >> 2] | 0;
        if ((ga | 0) == 0) {
            i =
            h;
            return
        }
        b = d - e | 0;
        oa = f - e | 0;
        ta = ga;
        do {
            ga = ta + 4 | 0;
            ma = c[ga >> 2] | 0;
            do if ((ma | 0) >= (d | 0))
                if ((ma | 0) < (e | 0)) {
                    ua = oa + ma | 0;
                    break
                } else {
                    ua = ma + ((ma | 0) < (f | 0) ? b : 0) | 0;
                    break
                }
            else
                ua = ma;
            while (0);
            c[ga >> 2] = ua;
            ma = ta + 8 | 0;
            ba = c[ma >> 2] | 0;
            qa = ba + -1 | 0;
            do if ((ba | 0) > (d | 0))
                if ((ba | 0) > (e | 0)) {
                    va = qa + ((ba | 0) > (f | 0) ? 0 : b) | 0;
                    break
                } else {
                    va = oa + qa | 0;
                    break
                }
            else
                va = qa;
            while (0);
            c[ma >> 2] = va + 1;
            ta = c[ta + 24 >> 2] | 0
        } while ((ta | 0) != 0);
        i = h;
        return
    }
    function Ak(b, d, e) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        f = i;
        g = (c[b + 88 >> 2] | 0) + (d << 2) | 0;
        if ((c[g >>
        2] & ~e | 0) != 0)
            a[b + 12 >> 0] = 1;
        d = b + 8 | 0;
        if ((~c[d >> 2] & e | 0) == 0) {
            c[g >> 2] = e;
            i = f;
            return
        }
        if ((e & 128 | 0) != 0) {
            h = b + 128 | 0;
            j = c[h >> 2] | 0;
            if ((j | 0) == 0) {
                k = b + 48 | 0;
                l = c[k >> 2] | 0;
                if ((l | 0) == 0) {
                    vk(b, 256);
                    m = c[k >> 2] | 0
                } else
                    m = l;
                l = Em(c[b + 400 >> 2] | 0, m << 3) | 0;
                xn(l | 0, 0, c[k >> 2] << 3 | 0) | 0;
                n = l
            } else
                n = j;
            c[h >> 2] = n
        }
        if ((e & 256 | 0) != 0) {
            n = b + 136 | 0;
            h = c[n >> 2] | 0;
            if ((h | 0) == 0) {
                j = b + 48 | 0;
                l = c[j >> 2] | 0;
                if ((l | 0) == 0) {
                    vk(b, 256);
                    o = c[j >> 2] | 0
                } else
                    o = l;
                l = Em(c[b + 400 >> 2] | 0, o << 2) | 0;
                xn(l | 0, 0, c[j >> 2] << 2 | 0) | 0;
                p = l
            } else
                p = h;
            c[n >> 2] = p
        }
        c[d >> 2] = c[d >> 2] | e;
        c[g >> 2] = e;
        i = f;
        return
    }
    function Bk(a,
    b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0;
        e = i;
        Ak(a, b, c[(c[a + 88 >> 2] | 0) + (b << 2) >> 2] | (d ? 514 : 2));
        i = e;
        return
    }
    function Ck(b, d, e, f) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        g = i;
        i = i + 64 | 0;
        h = g + 16 | 0;
        j = g;
        k = b + 400 | 0;
        if ((c[(c[k >> 2] | 0) + 102876 >> 2] & 2 | 0) != 0) {
            l = 0;
            i = g;
            return l | 0
        }
        c[h >> 2] = 7912;
        m = h + 12 | 0;
        c[h + 4 >> 2] = b;
        c[h + 8 >> 2] = d;
        c[m + 0 >> 2] = c[e + 0 >> 2];
        c[m + 4 >> 2] = c[e + 4 >> 2];
        c[m + 8 >> 2] = c[e + 8 >> 2];
        c[m + 12 >> 2] = c[e + 12 >> 2];
        a[h + 28 >> 0] = f & 1;
        f = h + 32 | 0;
        c[f >> 2] = 0;
        pb[c[(c[d >> 2] | 0) + 28 >> 2] & 31](d, j, e, 0);
        Dj(c[k >> 2] | 0, h, j);
        l = c[f >> 2] | 0;
        i = g;
        return l | 0
    }
    function Dk(d, e, f, h) {
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0;
        j = i;
        i = i + 96 | 0;
        k = j + 48 | 0;
        l = j;
        m = +g[f + 52 >> 2];
        if (m == 0)
            n = +g[d + 32 >> 2] * .75;
        else
            n = m;
        o = bb[c[(c[e >> 2] | 0) + 12 >> 2] & 7](e) | 0;
        if ((o | 0) <= 0) {
            i = j;
            return
        }
        p = l + 4 | 0;
        q = l + 8 | 0;
        r = l + 28 | 0;
        s = e + 4 | 0;
        t = l + 12 | 0;
        u = e + 12 | 0;
        v = l + 20 | 0;
        w = l + 12 | 0;
        x = l +
        24 | 0;
        y = l + 16 | 0;
        z = k + 4 | 0;
        A = k + 12 | 0;
        B = k + 20 | 0;
        C = k + 21 | 0;
        D = k + 22 | 0;
        E = k + 23 | 0;
        F = k + 24 | 0;
        G = k + 28 | 0;
        H = k + 32 | 0;
        I = h + 12 | 0;
        J = h + 8 | 0;
        K = h + 4 | 0;
        L = f + 28 | 0;
        M = f + 8 | 0;
        N = f + 12 | 0;
        O = f + 20 | 0;
        P = f + 24 | 0;
        R = f + 32 | 0;
        S = f + 33 | 0;
        T = f + 34 | 0;
        U = f + 35 | 0;
        V = f + 64 | 0;
        W = f + 68 | 0;
        X = 0;
        m = 0;
        while (1) {
            c[l >> 2] = 488;
            c[p >> 2] = 1;
            g[q >> 2] = .009999999776482582;
            c[r + 0 >> 2] = 0;
            c[r + 4 >> 2] = 0;
            c[r + 8 >> 2] = 0;
            c[r + 12 >> 2] = 0;
            b[r + 16 >> 1] = 0;
            if ((c[s >> 2] | 0) == 1) {
                Y = s;
                Z = c[Y + 4 >> 2] | 0;
                _ = p;
                c[_ >> 2] = c[Y >> 2];
                c[_ + 4 >> 2] = Z;
                c[t + 0 >> 2] = c[u + 0 >> 2];
                c[t + 4 >> 2] = c[u + 4 >> 2];
                c[t + 8 >> 2] = c[u + 8 >> 2];
                c[t + 12 >> 2] = c[u + 12 >> 2];
                c[t +
                16 >> 2] = c[u + 16 >> 2];
                c[t + 20 >> 2] = c[u + 20 >> 2];
                c[t + 24 >> 2] = c[u + 24 >> 2];
                c[t + 28 >> 2] = c[u + 28 >> 2];
                b[t + 32 >> 1] = b[u + 32 >> 1] | 0
            } else
                Ge(e, l, X);
            $ = +g[w >> 2];
            aa = +g[v >> 2] - $;
            ba = +g[y >> 2];
            ca = +g[x >> 2] - ba;
            da = +Q(+(aa * aa + ca * ca));
            a:
            do if (m < da) {
                ea = $;
                fa = ba;
                ga = m;
                while (1) {
                    ha = ga / da;
                    ia = ea + aa * ha;
                    ja = ca * ha + fa;
                    c[H >> 2] = 0;
                    c[k >> 2] = c[f >> 2];
                    ha = +g[I >> 2];
                    ka = +g[J >> 2];
                    la = +g[h >> 2] + (ia * ha - ja * ka);
                    ma = ja * ha + ia * ka + +g[K >> 2];
                    ka = +la;
                    ia = +ma;
                    Z = z;
                    g[Z >> 2] = ka;
                    g[Z + 4 >> 2] = ia;
                    ia = +g[L >> 2];
                    ka = +(+g[O >> 2] - ia * (ma - +g[N >> 2]));
                    ma = +(ia * (la - +g[M >> 2]) + +g[P >> 2]);
                    Z = A;
                    g[Z >> 2] =
                    ka;
                    g[Z + 4 >> 2] = ma;
                    Z = a[S >> 0] | 0;
                    _ = a[T >> 0] | 0;
                    Y = a[U >> 0] | 0;
                    a[B >> 0] = a[R >> 0] | 0;
                    a[C >> 0] = Z;
                    a[D >> 0] = _;
                    a[E >> 0] = Y;
                    g[F >> 2] = +g[V >> 2];
                    c[G >> 2] = c[W >> 2];
                    wk(d, k) | 0;
                    ma = n + ga;
                    if (!(ma < da)) {
                        na = ma;
                        break a
                    }
                    ea = +g[w >> 2];
                    fa = +g[y >> 2];
                    ga = ma
                }
            } else
                na = m;
            while (0);
            Y = X + 1 | 0;
            if ((Y | 0) == (o | 0))
                break;
            X = Y;
            m = na - da
        }
        i = j;
        return
    }
    function Ek(b, d, e, f) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0;
        h = i;
        i = i + 80 | 0;
        j = h + 40 | 0;
        k = h + 24 | 0;
        l = h + 8 | 0;
        m = h;
        n = +g[e + 52 >> 2];
        if (n == 0)
            o = +g[b + 32 >> 2] * .75;
        else
            o = n;
        g[k >> 2] = 0;
        g[k + 4 >> 2] = 0;
        g[k + 8 >> 2] = 0;
        g[k + 12 >> 2] = 1;
        pb[c[(c[d >> 2] | 0) + 28 >> 2] & 31](d, l, k, 0);
        n = o * +O(+(+g[l + 4 >> 2] / o));
        p = l + 12 | 0;
        q = +g[p >> 2];
        if (!(n < q)) {
            i = h;
            return
        }
        r = l + 8 | 0;
        s = m + 4 | 0;
        t = j + 4 | 0;
        u = j + 12 | 0;
        v = j + 20 | 0;
        w = j + 21 | 0;
        x = j + 22 | 0;
        y = j + 23 | 0;
        z = j + 24 | 0;
        A = j + 28 | 0;
        B = j + 32 | 0;
        C = f + 12 | 0;
        D = f + 8 | 0;
        E = f + 4 | 0;
        F = e + 28 | 0;
        G = e + 8 | 0;
        H = e + 12 | 0;
        I = e + 20 | 0;
        J = e + 24 | 0;
        K = e + 32 | 0;
        L = e + 33 | 0;
        M = e + 34 | 0;
        N = e + 35 | 0;
        P = e + 64 | 0;
        Q = e + 68 | 0;
        R = q;
        q = +g[r >> 2];
        S =
        n;
        while (1) {
            n = o * +O(+(+g[l >> 2] / o));
            if (n < q) {
                T = n;
                do {
                    g[m >> 2] = T;
                    g[s >> 2] = S;
                    if (hb[c[(c[d >> 2] | 0) + 16 >> 2] & 15](d, k, m) | 0) {
                        c[B >> 2] = 0;
                        c[j >> 2] = c[e >> 2];
                        n = +g[C >> 2];
                        U = +g[m >> 2];
                        V = +g[D >> 2];
                        W = +g[s >> 2];
                        X = +g[f >> 2] + (n * U - V * W);
                        Y = U * V + n * W + +g[E >> 2];
                        W = +X;
                        n = +Y;
                        Z = t;
                        g[Z >> 2] = W;
                        g[Z + 4 >> 2] = n;
                        n = +g[F >> 2];
                        W = +(+g[I >> 2] - n * (Y - +g[H >> 2]));
                        Y = +(n * (X - +g[G >> 2]) + +g[J >> 2]);
                        Z = u;
                        g[Z >> 2] = W;
                        g[Z + 4 >> 2] = Y;
                        Z = a[L >> 0] | 0;
                        _ = a[M >> 0] | 0;
                        $ = a[N >> 0] | 0;
                        a[v >> 0] = a[K >> 0] | 0;
                        a[w >> 0] = Z;
                        a[x >> 0] = _;
                        a[y >> 0] = $;
                        g[z >> 2] = +g[P >> 2];
                        c[A >> 2] = c[Q >> 2];
                        wk(b, j) | 0
                    }
                    T = o + T;
                    aa = +g[r >> 2]
                } while (T <
                aa);
                ba = +g[p >> 2];
                ca = aa
            } else {
                ba = R;
                ca = q
            }
            S = o + S;
            if (!(S < ba))
                break;
            else {
                R = ba;
                q = ca
            }
        }
        i = h;
        return
    }
    function Fk(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0;
        e = i;
        i = i + 64 | 0;
        f = e + 20 | 0;
        h = e;
        j = e + 16 | 0;
        k = b + 400 | 0;
        if ((c[(c[k >> 2] | 0) + 102876 >> 2] & 2 | 0) != 0) {
            l = 0;
            i = e;
            return l | 0
        }
        m = +g[d + 16 >> 2];
        n = d + 8 | 0;
        o = c[n + 4 >> 2] | 0;
        p = h;
        c[p >> 2] = c[n >> 2];
        c[p + 4 >> 2] = o;
        o = h + 8 | 0;
        g[o >> 2] = +T(+m);
        p = h + 12 | 0;
        g[p >> 2] = +S(+m);
        n = b + 44 | 0;
        q = c[n >> 2] | 0;
        r = c[d + 40 >> 2] | 0;
        do if ((r | 0) != 0) {
            s = c[r + 4 >> 2] | 0;
            if ((s | 0) == 3 | (s | 0) == 1) {
                Dk(b, r, d, h);
                break
            } else if ((s | 0) == 0 | (s | 0) == 2) {
                Ek(b, r, d, h);
                break
            } else
                break
        }
        while (0);
        r = c[d + 44 >> 2] | 0;
        if ((r | 0) != 0) {
            s = c[d + 48 >> 2] | 0;
            c[f >> 2] = 7720;
            c[f + 12 >> 2] = r;
            c[f + 16 >> 2] = s;
            Ek(b, f, d, h)
        }
        s = d + 56 | 0;
        if ((c[s >> 2] | 0) > 0) {
            r = d + 60 | 0;
            t = f + 4 | 0;
            u = f + 12 | 0;
            v = f + 20 | 0;
            w = f + 21 | 0;
            x = f + 22 | 0;
            y = f + 23 | 0;
            z = f + 24 | 0;
            A = f + 28 | 0;
            B = f + 32 | 0;
            m = +g[p >> 2];
            C = +g[o >> 2];
            D = +g[h >> 2];
            E = +g[h + 4 >> 2];
            o = d + 28 | 0;
            p = d + 8 | 0;
            F = d + 12 | 0;
            G = d + 20 | 0;
            H = d + 24 | 0;
            I = d + 32 |
            0;
            J = d + 33 | 0;
            K = d + 34 | 0;
            L = d + 35 | 0;
            M = d + 64 | 0;
            N = d + 68 | 0;
            O = 0;
            do {
                P = (c[r >> 2] | 0) + (O << 3) | 0;
                Q = +g[P >> 2];
                R = +g[P + 4 >> 2];
                c[B >> 2] = 0;
                c[f >> 2] = c[d >> 2];
                U = D + (Q * m - R * C);
                V = m * R + Q * C + E;
                Q = +U;
                R = +V;
                P = t;
                g[P >> 2] = Q;
                g[P + 4 >> 2] = R;
                R = +g[o >> 2];
                Q = +(+g[G >> 2] - R * (V - +g[F >> 2]));
                V = +(R * (U - +g[p >> 2]) + +g[H >> 2]);
                P = u;
                g[P >> 2] = Q;
                g[P + 4 >> 2] = V;
                P = a[J >> 0] | 0;
                W = a[K >> 0] | 0;
                X = a[L >> 0] | 0;
                a[v >> 0] = a[I >> 0] | 0;
                a[w >> 0] = P;
                a[x >> 0] = W;
                a[y >> 0] = X;
                g[z >> 2] = +g[M >> 2];
                c[A >> 2] = c[N >> 2];
                wk(b, f) | 0;
                O = O + 1 | 0
            } while ((O | 0) < (c[s >> 2] | 0))
        }
        s = c[n >> 2] | 0;
        n = Em(c[k >> 2] | 0, 80) | 0;
        if ((n | 0) == 0)
            Y = 0;
        else {
            mk(n);
            Y = n
        }
        c[Y >> 2] = b;
        c[Y + 4 >> 2] = q;
        c[Y + 8 >> 2] = s;
        g[Y + 16 >> 2] = +g[d + 36 >> 2];
        c[Y + 76 >> 2] = c[d + 68 >> 2];
        n = Y + 60 | 0;
        c[n + 0 >> 2] = c[h + 0 >> 2];
        c[n + 4 >> 2] = c[h + 4 >> 2];
        c[n + 8 >> 2] = c[h + 8 >> 2];
        c[n + 12 >> 2] = c[h + 12 >> 2];
        c[Y + 20 >> 2] = 0;
        h = b + 312 | 0;
        c[Y + 24 >> 2] = c[h >> 2];
        n = c[h >> 2] | 0;
        if ((n | 0) != 0)
            c[n + 20 >> 2] = Y;
        c[h >> 2] = Y;
        h = b + 308 | 0;
        c[h >> 2] = (c[h >> 2] | 0) + 1;
        if ((q | 0) < (s | 0)) {
            h = b + 144 | 0;
            n = q;
            do {
                c[(c[h >> 2] | 0) + (n << 2) >> 2] = Y;
                n = n + 1 | 0
            } while ((n | 0) != (s | 0))
        }
        n = c[d + 4 >> 2] | 0;
        h = Y + 12 | 0;
        O = c[h >> 2] | 0;
        f = (O ^ n) << 4 & 16 | n;
        if ((O & ~f | 0) != 0)
            a[b + 20 >> 0] = 1;
        O = b + 16 | 0;
        N = c[O >> 2] | 0;
        if ((f & ~N | 0) != 0) {
            if ((n &
            1 | 0) == 0)
                Z = N;
            else {
                n = b + 132 | 0;
                A = c[n >> 2] | 0;
                if ((A | 0) == 0) {
                    M = b + 48 | 0;
                    z = c[M >> 2] | 0;
                    if ((z | 0) == 0) {
                        vk(b, 256);
                        _ = c[M >> 2] | 0
                    } else
                        _ = z;
                    z = Em(c[k >> 2] | 0, _ << 2) | 0;
                    xn(z | 0, 0, c[M >> 2] << 2 | 0) | 0;
                    $ = z;
                    aa = c[O >> 2] | 0
                } else {
                    $ = A;
                    aa = N
                }
                c[n >> 2] = $;
                Z = aa
            }
            c[O >> 2] = Z | f
        }
        c[h >> 2] = f;
        c[j >> 2] = 7544;
        Gk(b, 1);
        Hk(b, q, s, j);
        j = d + 72 | 0;
        d = c[j >> 2] | 0;
        if ((d | 0) == 0) {
            l = Y;
            i = e;
            return l | 0
        }
        Ik(b, d, Y);
        l = c[j >> 2] | 0;
        i = e;
        return l | 0
    }
    function Gk(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0;
        d = i;
        i = i + 32 | 0;
        e = d;
        f = d + 8 | 0;
        h = a + 204 | 0;
        j = c[h >> 2] | 0;
        k =
        c[a + 200 >> 2] | 0;
        l = k + (j << 3) | 0;
        if ((j | 0) > 0) {
            m = c[a + 96 >> 2] | 0;
            n = +g[a + 36 >> 2];
            o = k;
            do {
                p = c[o >> 2] | 0;
                c[o + 4 >> 2] = (~~(n * +g[m + (p << 3) + 4 >> 2] + 2048) >>> 0 << 20) + (~~(n * +g[m + (p << 3) >> 2] * 256 + 524288) >>> 0);
                o = o + 8 | 0
            } while (o >>> 0 < l >>> 0);
            q = c[h >> 2] | 0
        } else
            q = j;
        Il(k, k + (q << 3) | 0, e);
        e = c[a + 400 >> 2] | 0;
        c[f >> 2] = 0;
        c[f + 4 >> 2] = 0;
        q = f + 8 | 0;
        c[q >> 2] = 0;
        k = f + 12 | 0;
        c[k >> 2] = e + 76;
        if ((c[a + 8 >> 2] & 32768 | 0) != 0 ? (c[e + 102952 >> 2] | 0) != 0 : 0)
            Rk(f, c[a + 216 >> 2] | 0, c[a + 220 >> 2] | 0, c[a + 88 >> 2] | 0);
        e = a + 216 | 0;
        Ok(a, e);
        Qk(a, e);
        Sk(a, f);
        if (b) {
            b = c[e >> 2] | 0;
            j = a + 220 | 0;
            a = c[j >> 2] | 0;
            h = b + (a * 24 |
            0) | 0;
            a:
            do if ((a | 0) == 0) {
                r = b;
                s = 12
            } else {
                l = b;
                while (1) {
                    if ((c[l + 20 >> 2] & 2 | 0) != 0) {
                        r = l;
                        s = 12;
                        break a
                    }
                    l = l + 24 | 0;
                    if ((l | 0) == (h | 0)) {
                        t = h;
                        u = b;
                        break
                    }
                }
            }
            while (0);
            if ((s | 0) == 12)
                if ((r | 0) == (h | 0)) {
                    t = h;
                    u = b
                } else {
                    b = r;
                    s = r;
                    b:
                    while (1) {
                        r = s;
                        do {
                            a = r;
                            r = r + 24 | 0;
                            if ((r | 0) == (h | 0))
                                break b
                        } while ((c[a + 44 >> 2] & 2 | 0) != 0);
                        c[b + 0 >> 2] = c[r + 0 >> 2];
                        c[b + 4 >> 2] = c[r + 4 >> 2];
                        c[b + 8 >> 2] = c[r + 8 >> 2];
                        c[b + 12 >> 2] = c[r + 12 >> 2];
                        c[b + 16 >> 2] = c[r + 16 >> 2];
                        c[b + 20 >> 2] = c[r + 20 >> 2];
                        b = b + 24 | 0;
                        s = r
                    }
                    t = b;
                    u = c[e >> 2] | 0
                }
            c[j >> 2] = (t - u | 0) / 24 | 0
        }
        u = c[f >> 2] | 0;
        if ((u | 0) == 0) {
            i = d;
            return
        }
        _m(c[k >> 2] | 0, u);
        c[f >> 2] = 0;
        c[q >> 2] = 0;
        i = d;
        return
    }
    function Hk(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0;
        f = i;
        i = i + 48 | 0;
        h = f + 40 | 0;
        j = f + 12 | 0;
        k = f;
        l = (b | 0) < (d | 0);
        if (!l) {
            i = f;
            return
        }
        m = c[a + 88 >> 2] | 0;
        n = b;
        o = 0;
        do {
            o = c[m + (n << 2) >> 2] | o;
            n = n + 1 | 0
        } while ((n | 0) != (d | 0));
        if ((o & 1032 | 0) != 0) {
            n = a + 220 | 0;
            if ((c[n >> 2] | 0) > 0) {
                m = a + 216 | 0;
                p = a + 88 | 0;
                q = a + 144 | 0;
                r = a + 252 | 0;
                s = a + 256 | 0;
                t = a + 248 | 0;
                u = a + 96 | 0;
                v = a + 260 | 0;
                w = 0;
                do {
                    x = c[m >> 2] | 0;
                    y = c[x + (w * 24 | 0) >> 2] | 0;
                    z = c[x + (w * 24 | 0) + 4 >> 2] | 0;
                    A = c[p >> 2] | 0;
                    B = c[A + (y << 2) >> 2] | 0;
                    C = c[A + (z << 2) >> 2] | 0;
                    A = c[q >> 2] | 0;
                    D = c[A + (y << 2) >> 2] | 0;
                    E = c[A + (z << 2) >> 2] | 0;
                    do if ((z | 0) < (d | 0) & (((y | 0) >= (d | 0) | (y | 0) < (b | 0) | (z | 0) < (b | 0)) ^ 1) ? (A = C | B, !((A & 2 | 0) != 0 | (A & 1032 | 0) == 0)) : 0) {
                        if (!(nb[c[(c[e >> 2] | 0) + 8 >> 2] & 31](e, y) | 0) ? !(nb[c[(c[e >> 2] | 0) + 8 >> 2] & 31](e, z) | 0) : 0)
                            break;
                        if ((B & 28 | 0) == 0) {
                            if ((D | 0) == 0)
                                break;
                            if ((c[D + 12 >> 2] & 2 | 0) == 0)
                                break
                        }
                        if ((C & 28 | 0) == 0) {
                            if ((E | 0) == 0)
                                break;
                            if ((c[E + 12 >> 2] & 2 | 0) == 0)
                                break
                        }
                        if (hb[c[(c[e >>
                        2] | 0) + 12 >> 2] & 15](e, y, z) | 0) {
                            A = c[r >> 2] | 0;
                            F = c[s >> 2] | 0;
                            if ((A | 0) >= (F | 0) ? (G = (F | 0) == 0 ? 256 : F << 1, (F | 0) < (G | 0)) : 0) {
                                F = Em(c[v >> 2] | 0, G * 20 | 0) | 0;
                                H = c[t >> 2] | 0;
                                if ((H | 0) != 0) {
                                    An(F | 0, H | 0, (c[r >> 2] | 0) * 20 | 0) | 0;
                                    Fm(c[v >> 2] | 0, c[t >> 2] | 0, (c[s >> 2] | 0) * 20 | 0)
                                }
                                c[s >> 2] = G;
                                c[t >> 2] = F;
                                I = c[r >> 2] | 0
                            } else
                                I = A;
                            c[r >> 2] = I + 1;
                            A = c[t >> 2] | 0;
                            c[A + (I * 20 | 0) >> 2] = y;
                            c[A + (I * 20 | 0) + 4 >> 2] = z;
                            c[A + (I * 20 | 0) + 8 >> 2] = c[x + (w * 24 | 0) + 20 >> 2];
                            if ((D | 0) == 0)
                                J = 1;
                            else
                                J = +g[D + 16 >> 2];
                            if ((E | 0) == 0)
                                K = 1;
                            else
                                K = +g[E + 16 >> 2];
                            g[A + (I * 20 | 0) + 12 >> 2] = J < K ? J : K;
                            F = c[u >> 2] | 0;
                            L = +g[F + (y << 3) >> 2] - +g[F +
                            (z << 3) >> 2];
                            M = +g[F + (y << 3) + 4 >> 2] - +g[F + (z << 3) + 4 >> 2];
                            g[A + (I * 20 | 0) + 16 >> 2] = +Q(+(L * L + M * M))
                        }
                    }
                    while (0);
                    w = w + 1 | 0
                } while ((w | 0) < (c[n >> 2] | 0));
                N = r
            } else
                N = a + 252 | 0;
            r = a + 248 | 0;
            n = c[r >> 2] | 0;
            w = c[N >> 2] | 0;
            I = n + (w * 20 | 0) | 0;
            c[h >> 2] = 27;
            u = w * 20 | 0;
            w = (u | 0) / 20 | 0;
            a:
            do if ((u | 0) > 2560) {
                t = w;
                while (1) {
                    s = rn(t * 20 | 0, 9632) | 0;
                    if ((s | 0) != 0) {
                        O = s;
                        P = t;
                        break a
                    }
                    if ((t | 0) > 1)
                        t = (t | 0) / 2 | 0;
                    else {
                        O = s;
                        P = 0;
                        break
                    }
                }
            } else {
                O = 0;
                P = 0
            }
            while (0);
            Pl(n, I, h, w, O, P);
            if ((O | 0) != 0)
                sn(O);
            O = c[r >> 2] | 0;
            P = c[N >> 2] | 0;
            w = O + (P * 20 | 0) | 0;
            b:
            do if ((P | 0) == 0) {
                R = O;
                S = 40
            } else if ((P | 0) == 1) {
                T = w;
                U = O
            } else {
                I =
                O;
                n = O + 20 | 0;
                u = c[O >> 2] | 0;
                while (1) {
                    t = u;
                    u = c[n >> 2] | 0;
                    if ((t | 0) == (u | 0) ? (c[I + 4 >> 2] | 0) == (c[I + 24 >> 2] | 0) : 0) {
                        R = I;
                        S = 40;
                        break b
                    }
                    t = n + 20 | 0;
                    if ((t | 0) == (w | 0)) {
                        T = w;
                        U = O;
                        break
                    } else {
                        s = n;
                        n = t;
                        I = s
                    }
                }
            }
            while (0);
            if ((S | 0) == 40)
                if ((R | 0) == (w | 0)) {
                    T = w;
                    U = O
                } else {
                    O = R;
                    P = R + 20 | 0;
                    c:
                    while (1) {
                        R = O + 4 | 0;
                        I = P;
                        do {
                            n = I;
                            I = I + 20 | 0;
                            if ((I | 0) == (w | 0))
                                break c;
                            if ((c[O >> 2] | 0) != (c[I >> 2] | 0))
                                break
                        } while ((c[R >> 2] | 0) == (c[n + 24 >> 2] | 0));
                        R = O + 20 | 0;
                        c[R + 0 >> 2] = c[I + 0 >> 2];
                        c[R + 4 >> 2] = c[I + 4 >> 2];
                        c[R + 8 >> 2] = c[I + 8 >> 2];
                        c[R + 12 >> 2] = c[I + 12 >> 2];
                        c[R + 16 >> 2] = c[I + 16 >> 2];
                        O = R;
                        P = I
                    }
                    T = O + 20 | 0;
                    U =
                    c[r >> 2] | 0
                }
            c[N >> 2] = (T - U | 0) / 20 | 0
        }
        if ((o & 16 | 0) == 0) {
            i = f;
            return
        }
        hk(j, (c[a + 400 >> 2] | 0) + 76 | 0, d - b | 0);
        if (l) {
            l = a + 88 | 0;
            o = a + 144 | 0;
            U = a + 96 | 0;
            T = b;
            do {
                b = c[(c[l >> 2] | 0) + (T << 2) >> 2] | 0;
                do if ((b & 2 | 0) == 0) {
                    N = c[(c[o >> 2] | 0) + (T << 2) >> 2] | 0;
                    if ((b & 28 | 0) == 0) {
                        if ((N | 0) == 0)
                            break;
                        if ((c[N + 12 >> 2] & 2 | 0) == 0)
                            break
                    }
                    N = c[U >> 2] | 0;
                    jk(j, N + (T << 3) | 0, T, nb[c[(c[e >> 2] | 0) + 8 >> 2] & 31](e, T) | 0)
                }
                while (0);
                T = T + 1 | 0
            } while ((T | 0) < (d | 0))
        }
        K = +g[a + 32 >> 2] * .75;
        kk(j, K * .5, K * 2);
        c[k >> 2] = 7176;
        c[k + 4 >> 2] = a;
        c[k + 8 >> 2] = e;
        lk(j, k);
        k = a + 264 | 0;
        e = c[k >> 2] | 0;
        d = a + 268 | 0;
        a = c[d >> 2] | 0;
        T = e + (a *
        60 | 0) | 0;
        c[h >> 2] = 28;
        U = a * 60 | 0;
        a = (U | 0) / 60 | 0;
        d:
        do if ((U | 0) > 7680) {
            o = a;
            while (1) {
                l = rn(o * 60 | 0, 9632) | 0;
                if ((l | 0) != 0) {
                    V = l;
                    W = o;
                    break d
                }
                if ((o | 0) > 1)
                    o = (o | 0) / 2 | 0;
                else {
                    V = l;
                    W = 0;
                    break
                }
            }
        } else {
            V = 0;
            W = 0
        }
        while (0);
        Ll(e, T, h, a, V, W);
        if ((V | 0) != 0)
            sn(V);
        V = c[k >> 2] | 0;
        W = c[d >> 2] | 0;
        a = V + (W * 60 | 0) | 0;
        e:
        do if ((W | 0) == 0) {
            X = V;
            S = 69
        } else if ((W | 0) == 1) {
            Y = a;
            Z = V
        } else {
            h = V;
            T = V + 60 | 0;
            e = c[V >> 2] | 0;
            while (1) {
                U = e;
                e = c[T >> 2] | 0;
                if (((U | 0) == (e | 0) ? (c[h + 4 >> 2] | 0) == (c[h + 64 >> 2] | 0) : 0) ? (c[h + 8 >> 2] | 0) == (c[h + 68 >> 2] | 0) : 0) {
                    X = h;
                    S = 69;
                    break e
                }
                U = T + 60 | 0;
                if ((U | 0) == (a | 0)) {
                    Y = a;
                    Z =
                    V;
                    break
                } else {
                    o = T;
                    T = U;
                    h = o
                }
            }
        }
        while (0);
        if ((S | 0) == 69)
            if ((X | 0) == (a | 0)) {
                Y = a;
                Z = V
            } else {
                V = X;
                S = X + 60 | 0;
                f:
                while (1) {
                    X = V + 4 | 0;
                    W = V + 8 | 0;
                    h = S;
                    do {
                        T = h;
                        h = h + 60 | 0;
                        if ((h | 0) == (a | 0))
                            break f;
                        if ((c[V >> 2] | 0) != (c[h >> 2] | 0))
                            break;
                        if ((c[X >> 2] | 0) != (c[T + 64 >> 2] | 0))
                            break
                    } while ((c[W >> 2] | 0) == (c[T + 68 >> 2] | 0));
                    W = V + 60 | 0;
                    X = W + 0 | 0;
                    T = h + 0 | 0;
                    e = X + 60 | 0;
                    do {
                        c[X >> 2] = c[T >> 2];
                        X = X + 4 | 0;
                        T = T + 4 | 0
                    } while ((X | 0) < (e | 0));
                    V = W;
                    S = h
                }
                Y = V + 60 | 0;
                Z = c[k >> 2] | 0
            }
        c[d >> 2] = (Y - Z | 0) / 60 | 0;
        ik(j);
        i = f;
        return
    }
    function Ik(b, d, e) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        f = i;
        i = i + 16 | 0;
        g = f;
        h = b + 400 | 0;
        if ((c[(c[h >> 2] | 0) + 102876 >> 2] & 2 | 0) != 0) {
            i = f;
            return
        }
        j = e + 4 | 0;
        k = e + 8 | 0;
        zk(b, c[j >> 2] | 0, c[k >> 2] | 0, c[b + 44 >> 2] | 0);
        l = d + 4 | 0;
        m = d + 8 | 0;
        zk(b, c[l >> 2] | 0, c[m >> 2] | 0, c[j >> 2] | 0);
        n = c[j >> 2] | 0;
        c[g >> 2] = 7576;
        c[g + 4 >> 2] = n;
        Gk(b, 1);
        Hk(b, c[l >> 2] | 0, c[k >> 2] | 0, g);
        g = c[j >> 2] | 0;
        l = c[k >> 2] | 0;
        if ((g | 0) < (l | 0)) {
            n = b + 144 | 0;
            o = g;
            do {
                c[(c[n >> 2] | 0) + (o << 2) >> 2] = d;
                o = o + 1 | 0
            } while ((o | 0) < (l | 0))
        }
        l = d + 12 | 0;
        d = c[l >> 2] | 0;
        o = c[e + 12 >> 2] | d;
        n = (o ^ d) << 4 & 16 | o;
        if ((d & ~n | 0) != 0)
            a[b + 20 >> 0] = 1;
        d = b + 16 | 0;
        g = c[d >> 2] | 0;
        if ((n &
        ~g | 0) != 0) {
            if ((o & 1 | 0) == 0)
                p = g;
            else {
                o = b + 132 | 0;
                q = c[o >> 2] | 0;
                if ((q | 0) == 0) {
                    r = b + 48 | 0;
                    s = c[r >> 2] | 0;
                    if ((s | 0) == 0) {
                        vk(b, 256);
                        t = c[r >> 2] | 0
                    } else
                        t = s;
                    s = Em(c[h >> 2] | 0, t << 2) | 0;
                    xn(s | 0, 0, c[r >> 2] << 2 | 0) | 0;
                    u = s;
                    v = c[d >> 2] | 0
                } else {
                    u = q;
                    v = g
                }
                c[o >> 2] = u;
                p = v
            }
            c[d >> 2] = p | n
        }
        c[l >> 2] = n;
        c[m >> 2] = c[k >> 2];
        c[j >> 2] = c[k >> 2];
        tk(b, e);
        i = f;
        return
    }
    function Jk(a) {
        a = a | 0;
        return
    }
    function Kk(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0;
        d = i;
        e = c[a >> 2] | 0;
        f = c[b >> 2] | 0;
        if ((e | 0) == (f | 0)) {
            g = (c[a + 4 >> 2] | 0) < (c[b + 4 >> 2] | 0);
            i = d;
            return g | 0
        } else {
            g = (e - f | 0) < 0;
            i = d;
            return g | 0
        }
        return 0
    }
    function Lk(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0;
        d = i;
        e = c[a >> 2] | 0;
        f = c[b >> 2] | 0;
        if ((e | 0) != (f | 0)) {
            g = (e - f | 0) < 0;
            i = d;
            return g | 0
        }
        f = c[a + 4 >> 2] | 0;
        e = c[b + 4 >> 2] | 0;
        if ((f | 0) == (e | 0)) {
            g = (c[a + 8 >> 2] | 0) < (c[b + 8 >> 2] | 0);
            i = d;
            return g | 0
        } else {
            g = (f - e | 0) < 0;
            i = d;
            return g | 0
        }
        return 0
    }
    function Mk(b) {
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0;
        d = i;
        e = b + 400 | 0;
        f = b + 220 | 0;
        h = Ym((c[e >> 2] | 0) + 76 | 0, (c[f >> 2] | 0) * 24 | 0) | 0;
        j = c[f >> 2] |
        0;
        if ((j | 0) > 0) {
            k = b + 216 | 0;
            l = b + 144 | 0;
            m = j;
            j = 0;
            n = 0;
            while (1) {
                o = c[k >> 2] | 0;
                p = o + (n * 24 | 0) | 0;
                q = c[l >> 2] | 0;
                r = c[q + (c[p >> 2] << 2) >> 2] | 0;
                if (((r | 0) != 0 ? (r | 0) == (c[q + (c[o + (n * 24 | 0) + 4 >> 2] << 2) >> 2] | 0) : 0) ? (c[r + 12 >> 2] & 16 | 0) != 0 : 0) {
                    r = j + 1 | 0;
                    o = h + (j * 24 | 0) | 0;
                    c[o + 0 >> 2] = c[p + 0 >> 2];
                    c[o + 4 >> 2] = c[p + 4 >> 2];
                    c[o + 8 >> 2] = c[p + 8 >> 2];
                    c[o + 12 >> 2] = c[p + 12 >> 2];
                    c[o + 16 >> 2] = c[p + 16 >> 2];
                    c[o + 20 >> 2] = c[p + 20 >> 2];
                    s = c[f >> 2] | 0;
                    t = r
                } else {
                    s = m;
                    t = j
                }
                n = n + 1 | 0;
                if ((n | 0) >= (s | 0)) {
                    u = t;
                    break
                } else {
                    m = s;
                    j = t
                }
            }
        } else
            u = 0;
        t = Ym((c[e >> 2] | 0) + 76 | 0, c[b + 308 >> 2] << 2) | 0;
        j = c[b + 312 >> 2] | 0;
        if ((j |
        0) == 0)
            v = 0;
        else {
            s = b + 16 | 0;
            m = b + 124 | 0;
            n = b + 132 | 0;
            f = b + 48 | 0;
            l = b + 20 | 0;
            k = j;
            j = 0;
            while (1) {
                r = k + 12 | 0;
                p = c[r >> 2] | 0;
                if ((p & 16 | 0) != 0) {
                    o = j + 1 | 0;
                    c[t + (j << 2) >> 2] = k;
                    q = p & -17;
                    if ((((p | 16) ^ -17) & p | 0) != 0)
                        a[l >> 0] = 1;
                    w = c[s >> 2] | 0;
                    if ((q & ~w | 0) != 0) {
                        if ((p & 1 | 0) == 0)
                            x = w;
                        else {
                            p = c[n >> 2] | 0;
                            if ((p | 0) == 0) {
                                y = c[f >> 2] | 0;
                                if ((y | 0) == 0) {
                                    vk(b, 256);
                                    z = c[f >> 2] | 0
                                } else
                                    z = y;
                                y = Em(c[e >> 2] | 0, z << 2) | 0;
                                xn(y | 0, 0, c[f >> 2] << 2 | 0) | 0;
                                A = y;
                                B = c[s >> 2] | 0
                            } else {
                                A = p;
                                B = w
                            }
                            c[n >> 2] = A;
                            x = B
                        }
                        c[s >> 2] = x | q
                    }
                    c[r >> 2] = q;
                    q = c[k + 4 >> 2] | 0;
                    r = c[k + 8 >> 2] | 0;
                    if ((q | 0) < (r | 0)) {
                        w = q + 1 | 0;
                        xn((c[m >> 2] | 0) + (q << 2) |
                        0, 0, ((r | 0) > (w | 0) ? r : w) - q << 2 | 0) | 0;
                        C = o
                    } else
                        C = o
                } else
                    C = j;
                k = c[k + 24 >> 2] | 0;
                if ((k | 0) == 0) {
                    v = C;
                    break
                } else
                    j = C
            }
        }
        C = (u | 0) > 0;
        if (C) {
            j = c[b + 124 >> 2] | 0;
            k = 0;
            do {
                m = c[h + (k * 24 | 0) + 4 >> 2] | 0;
                D = +g[h + (k * 24 | 0) + 8 >> 2];
                x = j + (c[h + (k * 24 | 0) >> 2] << 2) | 0;
                g[x >> 2] = D + +g[x >> 2];
                x = j + (m << 2) | 0;
                g[x >> 2] = D + +g[x >> 2];
                k = k + 1 | 0
            } while ((k | 0) != (u | 0))
        }
        k = (v | 0) > 0;
        if (k) {
            j = b + 124 | 0;
            x = b + 132 | 0;
            m = 0;
            do {
                s = c[t + (m << 2) >> 2] | 0;
                B = c[s + 4 >> 2] | 0;
                A = c[s + 8 >> 2] | 0;
                if ((B | 0) < (A | 0)) {
                    s = c[j >> 2] | 0;
                    n = c[x >> 2] | 0;
                    f = B;
                    do {
                        g[n + (f << 2) >> 2] = +g[s + (f << 2) >> 2] < .800000011920929 ? 0 : 3.4028234663852886E38;
                        f = f + 1 | 0
                    } while ((f | 0) < (A | 0))
                }
                m = m + 1 | 0
            } while ((m | 0) != (v | 0))
        }
        m = ~~+Q(1+(c[b + 44 >> 2] | 0));
        if ((m | 0) > 0 ? (x = b + 132 | 0, C) : 0) {
            C = 0;
            do {
                j = c[x >> 2] | 0;
                A = 0;
                f = 0;
                while (1) {
                    D = 1 - +g[h + (A * 24 | 0) + 8 >> 2];
                    s = j + (c[h + (A * 24 | 0) >> 2] << 2) | 0;
                    n = j + (c[h + (A * 24 | 0) + 4 >> 2] << 2) | 0;
                    E = +g[n >> 2];
                    F = D + E;
                    G = +g[s >> 2];
                    H = D + G;
                    if (G > F) {
                        g[s >> 2] = F;
                        I = +g[n >> 2];
                        J = 1
                    } else {
                        I = E;
                        J = f
                    }
                    if (I > H) {
                        g[n >> 2] = H;
                        K = 1
                    } else
                        K = J;
                    A = A + 1 | 0;
                    if ((A | 0) == (u | 0))
                        break;
                    else
                        f = K
                }
                C = C + 1 | 0
            } while (K & (C | 0) < (m | 0))
        }
        if (!k) {
            L = c[e >> 2] | 0;
            M = L + 76 | 0;
            _m(M, t);
            N = c[e >> 2] | 0;
            O = N + 76 | 0;
            _m(O, h);
            i = d;
            return
        }
        k = b + 132 | 0;
        m = b + 32 | 0;
        b = 0;
        do {
            C = c[t + (b << 2) >> 2] | 0;
            K = c[C + 4 >> 2] | 0;
            u = c[C + 8 >> 2] | 0;
            if ((K | 0) < (u | 0)) {
                C = c[k >> 2] | 0;
                J = K;
                do {
                    K = C + (J << 2) | 0;
                    I = +g[K >> 2];
                    if (I < 3.4028234663852886E38)
                        P = I * +g[m >> 2];
                    else
                        P = 0;
                    g[K >> 2] = P;
                    J = J + 1 | 0
                } while ((J | 0) < (u | 0))
            }
            b = b + 1 | 0
        } while ((b | 0) != (v | 0));
        L = c[e >> 2] | 0;
        M = L + 76 | 0;
        _m(M, t);
        N = c[e >> 2] | 0;
        O = N + 76 | 0;
        _m(O, h);
        i = d;
        return
    }
    function Nk(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        e = i;
        f = +g[b + 36 >> 2];
        h = (~~(f * +g[d + 4 >> 2] + -1 + 2048) >>> 0 << 20) + (~~((f * +g[d >> 2] + -1) * 256 + 524288) >>> 0) | 0;
        j = ~~(f * +g[d + 12 >> 2] + 1 + 2048) >>> 0;
        k = ~~((f *
        +g[d + 8 >> 2] + 1) * 256 + 524288) >>> 0;
        d = c[b + 200 >> 2] | 0;
        l = c[b + 204 >> 2] | 0;
        b = d + (l << 3) | 0;
        m = d;
        d = l << 3 >> 3;
        a:
        while (1) {
            l = d;
            while (1) {
                if ((l | 0) == 0)
                    break a;
                n = (l | 0) / 2 | 0;
                if ((c[m + (n << 3) + 4 >> 2] | 0) >>> 0 < h >>> 0)
                    break;
                else
                    l = n
            }
            m = m + (n + 1 << 3) | 0;
            d = l + -1 - n | 0
        }
        n = (j << 20) + k | 0;
        k = m;
        j = b - m >> 3;
        b:
        while (1) {
            b = j;
            while (1) {
                if ((b | 0) == 0)
                    break b;
                o = (b | 0) / 2 | 0;
                if ((c[k + (o << 3) + 4 >> 2] | 0) >>> 0 > n >>> 0)
                    b = o;
                else
                    break
            }
            k = k + (o + 1 << 3) | 0;
            j = b + -1 - o | 0
        }
        c[a >> 2] = h & 1048575;
        c[a + 4 >> 2] = n & 1048575;
        c[a + 8 >> 2] = h & -1048576;
        c[a + 12 >> 2] = n & -1048576;
        c[a + 16 >> 2] = m;
        c[a + 20 >> 2] = k;
        i = e;
        return
    }
    function Ok(a,
    b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        d = i;
        e = c[a + 200 >> 2] | 0;
        f = c[a + 204 >> 2] | 0;
        g = e + (f << 3) | 0;
        c[b + 4 >> 2] = 0;
        if ((f | 0) > 0) {
            h = e;
            j = e
        } else {
            i = d;
            return
        }
        while (1) {
            e = h + 4 | 0;
            f = (c[e >> 2] | 0) + 256 | 0;
            k = h;
            h = h + 8 | 0;
            l = h >>> 0 < g >>> 0;
            a:
            do if (l) {
                m = h;
                do {
                    if (f >>> 0 < (c[m + 4 >> 2] | 0) >>> 0)
                        break a;
                    Pk(a, c[k >> 2] | 0, c[m >> 2] | 0, b);
                    m = m + 8 | 0
                } while (m >>> 0 < g >>> 0)
            }
            while (0);
            f = c[e >> 2] | 0;
            m = f + 1048320 | 0;
            b:
            do if (j >>> 0 < g >>> 0) {
                n = j;
                while (1) {
                    o = n + 8 | 0;
                    if (!(m >>> 0 > (c[n + 4 >> 2] | 0) >>> 0)) {
                        p = n;
                        break b
                    }
                    if (o >>> 0 < g >>> 0)
                        n = o;
                    else {
                        p = o;
                        break
                    }
                }
            } else
                p = j;
            while (0);
            m = f + 1048832 | 0;
            c:
            do if (p >>> 0 < g >>> 0) {
                e = p;
                do {
                    if (m >>> 0 < (c[e + 4 >> 2] | 0) >>> 0)
                        break c;
                    Pk(a, c[k >> 2] | 0, c[e >> 2] | 0, b);
                    e = e + 8 | 0
                } while (e >>> 0 < g >>> 0)
            }
            while (0);
            if (!l)
                break;
            else
                j = p
        }
        i = d;
        return
    }
    function Pk(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        f = i;
        h = c[a + 96 >> 2] | 0;
        j = +g[h + (d << 3) >> 2] - +g[h + (b << 3) >> 2];
        l = +g[h + (d << 3) + 4 >> 2] - +g[h + (b << 3) + 4 >> 2];
        m = j * j + l * l;
        if (!(m < +g[a + 40 >> 2])) {
            i = f;
            return
        }
        n = (c[k >> 2] = 1597463007 - ((g[k >> 2] = m, c[k >> 2] | 0) >> 1), +g[k >> 2]);
        o = n * (1.5 - n * m * .5 * n);
        h = e + 4 | 0;
        p = c[h >>
        2] | 0;
        q = e + 8 | 0;
        r = c[q >> 2] | 0;
        if ((p | 0) >= (r | 0) ? (s = (r | 0) == 0 ? 256 : r << 1, (r | 0) < (s | 0)) : 0) {
            r = e + 12 | 0;
            t = Em(c[r >> 2] | 0, s * 24 | 0) | 0;
            u = c[e >> 2] | 0;
            if ((u | 0) != 0) {
                An(t | 0, u | 0, (c[h >> 2] | 0) * 24 | 0) | 0;
                Fm(c[r >> 2] | 0, c[e >> 2] | 0, (c[q >> 2] | 0) * 24 | 0)
            }
            c[q >> 2] = s;
            c[e >> 2] = t;
            v = c[h >> 2] | 0
        } else
            v = p;
        c[h >> 2] = v + 1;
        h = c[e >> 2] | 0;
        c[h + (v * 24 | 0) >> 2] = b;
        c[h + (v * 24 | 0) + 4 >> 2] = d;
        e = c[a + 88 >> 2] | 0;
        c[h + (v * 24 | 0) + 20 >> 2] = c[e + (d << 2) >> 2] | c[e + (b << 2) >> 2];
        g[h + (v * 24 | 0) + 8 >> 2] = 1 - m * o * +g[a + 36 >> 2];
        m = +(j * o);
        j = +(l * o);
        a = h + (v * 24 | 0) + 12 | 0;
        g[a >> 2] = m;
        g[a + 4 >> 2] = j;
        i = f;
        return
    }
    function Qk(a, b) {
        a =
        a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        d = i;
        if ((c[a + 8 >> 2] & 131072 | 0) == 0) {
            i = d;
            return
        }
        e = c[(c[a + 400 >> 2] | 0) + 102948 >> 2] | 0;
        if ((e | 0) == 0) {
            i = d;
            return
        }
        f = c[b >> 2] | 0;
        g = b + 4 | 0;
        h = c[g >> 2] | 0;
        j = f + (h * 24 | 0) | 0;
        a:
        do if ((h | 0) == 0) {
            k = f;
            l = 8
        } else {
            m = f;
            while (1) {
                if ((c[m + 20 >> 2] & 131072 | 0) != 0 ? !(lb[c[(c[e >> 2] | 0) + 16 >> 2] & 7](e, a, c[m >> 2] | 0, c[m + 4 >> 2] | 0) | 0) : 0) {
                    k = m;
                    l = 8;
                    break a
                }
                m = m + 24 | 0;
                if ((m | 0) == (j | 0)) {
                    n = j;
                    break
                }
            }
        }
        while (0);
        b:
        do if ((l | 0) == 8)
            if ((k | 0) == (j | 0))
                n = j;
            else {
                f = k;
                h = k;
                while (1) {
                    m = h;
                    do {
                        o = m;
                        m = m + 24 | 0;
                        if ((m | 0) == (j | 0)) {
                            n = f;
                            break b
                        }
                        if ((c[o + 44 >> 2] & 131072 | 0) == 0)
                            break
                    } while (!(lb[c[(c[e >> 2] | 0) + 16 >> 2] & 7](e, a, c[m >> 2] | 0, c[o + 28 >> 2] | 0) | 0));
                    c[f + 0 >> 2] = c[m + 0 >> 2];
                    c[f + 4 >> 2] = c[m + 4 >> 2];
                    c[f + 8 >> 2] = c[m + 8 >> 2];
                    c[f + 12 >> 2] = c[m + 12 >> 2];
                    c[f + 16 >> 2] = c[m + 16 >> 2];
                    c[f + 20 >> 2] = c[m + 20 >> 2];
                    f = f + 24 | 0;
                    h = m
                }
            }
        while (0);
        c[g >> 2] = (n - (c[b >> 2] | 0) | 0) / 24 | 0;
        i = d;
        return
    }
    function Rk(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        f = i;
        i = i + 16 | 0;
        g = f;
        h = c[a >> 2] | 0;
        if ((h | 0) != 0) {
            _m(c[a + 12 >> 2] | 0, h);
            c[a >> 2] = 0;
            c[a + 8 >> 2] = 0
        }
        if ((d | 0) == 0)
            j = c[a + 8 >> 2] | 0;
        else {
            h =
            Ym(c[a + 12 >> 2] | 0, d * 9 | 0) | 0;
            c[a >> 2] = h;
            k = h + (d << 3) | 0;
            c[a + 4 >> 2] = k;
            xn(k | 0, 1, d | 0) | 0;
            c[a + 8 >> 2] = d;
            j = d
        }
        if ((j | 0) == 0) {
            i = f;
            return
        }
        j = c[a >> 2] | 0;
        if ((d | 0) > 0) {
            k = 0;
            h = 0;
            while (1) {
                l = c[b + (k * 24 | 0) >> 2] | 0;
                if ((!((l | 0) == -1) ? (m = b + (k * 24 | 0) + 4 | 0, n = c[m >> 2] | 0, !((n | 0) == -1)) : 0) ? ((c[e + (n << 2) >> 2] | c[e + (l << 2) >> 2]) & 32768 | 0) != 0 : 0) {
                    c[j + (k << 3) >> 2] = l;
                    c[j + (k << 3) + 4 >> 2] = c[m >> 2];
                    o = h + 1 | 0
                } else
                    o = h;
                k = k + 1 | 0;
                if ((k | 0) == (d | 0)) {
                    p = o;
                    break
                } else
                    h = o
            }
        } else
            p = 0;
        c[a + 8 >> 2] = p;
        c[g >> 2] = 29;
        Cl(j, j + (p << 3) | 0, g);
        i = f;
        return
    }
    function Sk(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0;
        e = i;
        if ((c[b + 8 >> 2] & 32768 | 0) == 0) {
            i = e;
            return
        }
        f = c[(c[b + 400 >> 2] | 0) + 102952 >> 2] | 0;
        if ((f | 0) == 0) {
            i = e;
            return
        }
        g = c[b + 220 >> 2] | 0;
        h = c[b + 216 >> 2] | 0;
        j = h + (g * 24 | 0) | 0;
        k = d + 8 | 0;
        if ((g | 0) > 0) {
            g = d + 4 | 0;
            l = h;
            while (1) {
                h = c[l >> 2] | 0;
                m = c[l + 4 >> 2] | 0;
                n = c[k >> 2] | 0;
                do if ((n | 0) == 0)
                    o = 24;
                else {
                    p = c[d >> 2] | 0;
                    q = p;
                    r = p + (n << 3) - q >> 3;
                    s = (r | 0) == 0;
                    a:
                    do if (s)
                        t = p;
                    else {
                        u = p;
                        v = r;
                        while (1) {
                            w = v;
                            while (1) {
                                x = (w | 0) / 2 | 0;
                                if ((c[u + (x << 3) >> 2] | 0) < (h | 0) ? (c[u + (x << 3) + 4 >> 2] | 0) < (m |
                                0) : 0)
                                    break;
                                if ((w + 1 | 0) >>> 0 < 3) {
                                    t = u;
                                    break a
                                } else
                                    w = x
                            }
                            y = u + (x + 1 << 3) | 0;
                            z = w + -1 | 0;
                            if ((z | 0) == (x | 0)) {
                                t = y;
                                break
                            } else {
                                u = y;
                                v = z - x | 0
                            }
                        }
                    }
                    while (0);
                    if ((t | 0) != 0 ? (v = (t - q | 0) >>> 3, u = c[g >> 2] | 0, (a[u + v >> 0] | 0) != 0) : 0) {
                        A = u;
                        B = v
                    } else {
                        b:
                        do if (s)
                            C = p;
                        else {
                            v = p;
                            u = r;
                            while (1) {
                                z = u;
                                while (1) {
                                    D = (z | 0) / 2 | 0;
                                    if ((c[v + (D << 3) >> 2] | 0) < (m | 0) ? (c[v + (D << 3) + 4 >> 2] | 0) < (h | 0) : 0)
                                        break;
                                    if ((z + 1 | 0) >>> 0 < 3) {
                                        C = v;
                                        break b
                                    } else
                                        z = D
                                }
                                w = v + (D + 1 << 3) | 0;
                                y = z + -1 | 0;
                                if ((y | 0) == (D | 0)) {
                                    C = w;
                                    break
                                } else {
                                    v = w;
                                    u = y - D | 0
                                }
                            }
                        }
                        while (0);
                        if ((C | 0) == 0) {
                            o = 24;
                            break
                        }
                        r = (C - q | 0) >>> 3;
                        p = c[g >> 2] | 0;
                        if ((a[p +
                        r >> 0] | 0) == 0) {
                            o = 24;
                            break
                        } else {
                            A = p;
                            B = r
                        }
                    }
                    a[A + B >> 0] = 0
                }
                while (0);
                if ((o | 0) == 24) {
                    o = 0;
                    ib[c[(c[f >> 2] | 0) + 24 >> 2] & 7](f, b, l)
                }
                l = l + 24 | 0;
                if (!(l >>> 0 < j >>> 0)) {
                    E = d;
                    F = g;
                    break
                }
            }
        } else {
            E = d;
            F = d + 4 | 0
        }
        d = c[k >> 2] | 0;
        k = c[E >> 2] | 0;
        E = c[F >> 2] | 0;
        if ((d | 0) <= 0) {
            i = e;
            return
        }
        F = 0;
        do {
            if ((a[E + F >> 0] | 0) != 0)
                pb[c[(c[f >> 2] | 0) + 28 >> 2] & 31](f, b, c[k + (F << 3) >> 2] | 0, c[k + (F << 3) + 4 >> 2] | 0);
            F = F + 1 | 0
        } while ((F | 0) != (d | 0));
        i = e;
        return
    }
    function Tk(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        d = i;
        e = a + 156 | 0;
        if ((c[e >> 2] | 0) < 1) {
            i = d;
            return
        }
        f = (c[a + 176 >> 2] |
        0) + (b << 2) | 0;
        g = (c[a + 160 >> 2] | 0) + (b << 2) | 0;
        h = (c[a + 168 >> 2] | 0) + (b << 2) | 0;
        j = (c[h >> 2] | 0) + 1 | 0;
        c[h >> 2] = j;
        if ((j | 0) == 2 ? (j = c[f >> 2] | 0, c[f >> 2] = j + 1, (j | 0) >= (c[e >> 2] | 0)) : 0) {
            e = a + 184 | 0;
            j = a + 188 | 0;
            f = c[j >> 2] | 0;
            h = a + 192 | 0;
            k = c[h >> 2] | 0;
            if ((f | 0) >= (k | 0) ? (l = (k | 0) == 0 ? 256 : k << 1, (k | 0) < (l | 0)) : 0) {
                k = a + 196 | 0;
                m = Em(c[k >> 2] | 0, l << 2) | 0;
                n = c[e >> 2] | 0;
                if ((n | 0) != 0) {
                    An(m | 0, n | 0, c[j >> 2] << 2 | 0) | 0;
                    Fm(c[k >> 2] | 0, c[e >> 2] | 0, c[h >> 2] << 2)
                }
                c[h >> 2] = l;
                c[e >> 2] = m;
                o = c[j >> 2] | 0
            } else
                o = f;
            c[j >> 2] = o + 1;
            c[(c[e >> 2] | 0) + (o << 2) >> 2] = b
        }
        c[g >> 2] = c[a + 4 >> 2];
        i = d;
        return
    }
    function Uk(a,
    b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        f = i;
        i = i + 16 | 0;
        g = f;
        h = c[a >> 2] | 0;
        if ((h | 0) != 0) {
            _m(c[a + 12 >> 2] | 0, h);
            c[a >> 2] = 0;
            c[a + 8 >> 2] = 0
        }
        if ((d | 0) == 0)
            j = c[a + 8 >> 2] | 0;
        else {
            h = Ym(c[a + 12 >> 2] | 0, d * 9 | 0) | 0;
            c[a >> 2] = h;
            k = h + (d << 3) | 0;
            c[a + 4 >> 2] = k;
            xn(k | 0, 1, d | 0) | 0;
            c[a + 8 >> 2] = d;
            j = d
        }
        if ((j | 0) == 0) {
            i = f;
            return
        }
        j = c[a >> 2] | 0;
        if ((d | 0) > 0) {
            k = 0;
            h = 0;
            while (1) {
                l = c[b + (k * 28 | 0) >> 2] | 0;
                if (!((l | 0) == -1) ? (c[e + (l << 2) >> 2] & 16384 | 0) != 0 : 0) {
                    c[j + (k << 3) >> 2] = c[b + (k * 28 | 0) + 8 >> 2];
                    c[j + (k << 3) + 4 >> 2] = l;
                    m = h + 1 | 0
                } else
                    m = h;
                k = k + 1 | 0;
                if ((k | 0) == (d | 0)) {
                    n =
                    m;
                    break
                } else
                    h = m
            }
        } else
            n = 0;
        c[a + 8 >> 2] = n;
        c[g >> 2] = 30;
        Fl(j, j + (n << 3) | 0, g);
        i = f;
        return
    }
    function Vk(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0;
        d = i;
        if (!((c[a >> 2] | 0) >>> 0 < (c[b >> 2] | 0) >>> 0)) {
            e = 0;
            i = d;
            return e | 0
        }
        e = (c[a + 4 >> 2] | 0) < (c[b + 4 >> 2] | 0);
        i = d;
        return e | 0
    }
    function Wk(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0;
        d = i;
        if ((c[a >> 2] | 0) >= (c[b >> 2] | 0)) {
            e = 0;
            i = d;
            return e | 0
        }
        e = (c[a + 4 >> 2] | 0) < (c[b + 4 >> 2] | 0);
        i = d;
        return e | 0
    }
    function Xk(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0;
        e = i;
        if ((c[b +
        8 >> 2] & 16384 | 0) == 0) {
            i = e;
            return
        }
        f = c[(c[b + 400 >> 2] | 0) + 102952 >> 2] | 0;
        if ((f | 0) == 0) {
            i = e;
            return
        }
        g = b + 232 | 0;
        h = b + 236 | 0;
        if ((c[h >> 2] | 0) == 0) {
            j = d;
            k = d + 8 | 0;
            l = d + 4 | 0
        } else {
            m = d + 8 | 0;
            n = d + 4 | 0;
            o = c[g >> 2] | 0;
            while (1) {
                p = c[o + 8 >> 2] | 0;
                q = c[o >> 2] | 0;
                r = c[m >> 2] | 0;
                if ((r | 0) != 0) {
                    s = c[d >> 2] | 0;
                    t = s;
                    u = s + (r << 3) - t >> 3;
                    a:
                    do if ((u | 0) == 0)
                        v = s;
                    else {
                        r = s;
                        w = u;
                        while (1) {
                            x = w;
                            while (1) {
                                y = (x | 0) / 2 | 0;
                                if ((c[r + (y << 3) >> 2] | 0) >>> 0 < p >>> 0 ? (c[r + (y << 3) + 4 >> 2] | 0) < (q | 0) : 0)
                                    break;
                                if ((x + 1 | 0) >>> 0 < 3) {
                                    v = r;
                                    break a
                                } else
                                    x = y
                            }
                            z = r + (y + 1 << 3) | 0;
                            A = x + -1 | 0;
                            if ((A | 0) == (y | 0)) {
                                v = z;
                                break
                            } else {
                                r =
                                z;
                                w = A - y | 0
                            }
                        }
                    }
                    while (0);
                    if ((v | 0) != 0 ? (q = (c[n >> 2] | 0) + ((v - t | 0) >>> 3) | 0, (a[q >> 0] | 0) != 0) : 0)
                        a[q >> 0] = 0;
                    else
                        B = 16
                } else
                    B = 16;
                if ((B | 0) == 16) {
                    B = 0;
                    ib[c[(c[f >> 2] | 0) + 16 >> 2] & 7](f, b, o)
                }
                o = o + 28 | 0;
                if ((o | 0) == ((c[g >> 2] | 0) + ((c[h >> 2] | 0) * 28 | 0) | 0)) {
                    j = d;
                    k = m;
                    l = n;
                    break
                }
            }
        }
        n = c[j >> 2] | 0;
        j = c[l >> 2] | 0;
        l = c[k >> 2] | 0;
        if ((l | 0) <= 0) {
            i = e;
            return
        }
        k = 0;
        do {
            if ((a[j + k >> 0] | 0) != 0)
                pb[c[(c[f >> 2] | 0) + 20 >> 2] & 31](f, c[n + (k << 3) >> 2] | 0, b, c[n + (k << 3) + 4 >> 2] | 0);
            k = k + 1 | 0
        } while ((k | 0) != (l | 0));
        i = e;
        return
    }
    function Yk(b) {
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p =
            0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0;
        d = i;
        i = i + 48 | 0;
        e = d + 32 | 0;
        f = d + 16 | 0;
        h = d;
        j = b + 400 | 0;
        k = c[j >> 2] | 0;
        c[e >> 2] = 0;
        c[e + 4 >> 2] = 0;
        l = e + 8 | 0;
        c[l >> 2] = 0;
        m = e + 12 | 0;
        c[m >> 2] = k + 76;
        n = b + 8 | 0;
        if ((c[n >> 2] & 16384 | 0) != 0 ? (c[k + 102952 >> 2] | 0) != 0 : 0)
            Uk(e, c[b + 232 >> 2] | 0, c[b + 236 >> 2] | 0, c[b + 88 >> 2] | 0);
        if ((c[b + 156 >> 2] | 0) > 0 ? (k = c[b + 44 >> 2] | 0, (k | 0) > 0) : 0) {
            o = c[b + 168 >> 2] | 0;
            p = b + 4 | 0;
            q = c[b + 160 >> 2] | 0;
            r = b + 176 | 0;
            s = 0;
            do {
                c[o + (s << 2) >> 2] = 0;
                if ((c[p >> 2] | 0) > ((c[q + (s << 2) >> 2] | 0) + 1 | 0))
                    c[(c[r >> 2] | 0) + (s << 2) >> 2] = 0;
                s = s + 1 | 0
            } while ((s |
            0) != (k | 0))
        }
        c[b + 236 >> 2] = 0;
        c[b + 188 >> 2] = 0;
        if ((c[n >> 2] & 65536 | 0) == 0)
            t = 0;
        else
            t = c[(c[j >> 2] | 0) + 102948 >> 2] | 0;
        c[f + 4 >> 2] = b;
        c[f >> 2] = 7056;
        c[f + 8 >> 2] = t;
        t = c[b + 44 >> 2] | 0;
        g[h >> 2] = 3.4028234663852886E38;
        n = h + 4 | 0;
        g[n >> 2] = 3.4028234663852886E38;
        k = h + 8 | 0;
        g[k >> 2] = -3.4028234663852886E38;
        s = h + 12 | 0;
        g[s >> 2] = -3.4028234663852886E38;
        if ((t | 0) > 0) {
            r = c[b + 96 >> 2] | 0;
            u = 3.4028234663852886E38;
            v = 3.4028234663852886E38;
            w = -3.4028234663852886E38;
            x = -3.4028234663852886E38;
            q = 0;
            while (1) {
                p = r + (q << 3) | 0;
                y = +g[p >> 2];
                z = +g[p + 4 >> 2];
                A = u < y ? u : y;
                B = v < z ? v : z;
                C = +A;
                D =
                +B;
                p = h;
                g[p >> 2] = C;
                g[p + 4 >> 2] = D;
                D = w > y ? w : y;
                y = x > z ? x : z;
                z = +D;
                C = +y;
                p = k;
                g[p >> 2] = z;
                g[p + 4 >> 2] = C;
                q = q + 1 | 0;
                if ((q | 0) == (t | 0)) {
                    E = y;
                    F = A;
                    G = B;
                    H = D;
                    break
                } else {
                    u = A;
                    v = B;
                    w = D;
                    x = y
                }
            }
        } else {
            E = -3.4028234663852886E38;
            F = 3.4028234663852886E38;
            G = 3.4028234663852886E38;
            H = -3.4028234663852886E38
        }
        x = +g[b + 32 >> 2];
        g[h >> 2] = F - x;
        g[n >> 2] = G - x;
        g[k >> 2] = H + x;
        g[s >> 2] = E + x;
        Dj(c[j >> 2] | 0, f, h);
        if ((a[b + 316 >> 0] | 0) != 0)
            Zk(b);
        Xk(b, e);
        b = c[e >> 2] | 0;
        if ((b | 0) == 0) {
            i = d;
            return
        }
        _m(c[m >> 2] | 0, b);
        c[e >> 2] = 0;
        c[l >> 2] = 0;
        i = d;
        return
    }
    function Zk(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0;
        b = i;
        i = i + 32 | 0;
        d = b + 20 | 0;
        e = b;
        f = b + 16 | 0;
        g = a + 232 | 0;
        h = c[g >> 2] | 0;
        j = a + 236 | 0;
        k = h + ((c[j >> 2] | 0) * 28 | 0) | 0;
        c[d >> 2] = 31;
        yl(h, k, d);
        c[f >> 2] = 0;
        d = c[g >> 2] | 0;
        g = c[j >> 2] | 0;
        k = d + (g * 28 | 0) | 0;
        c[e >> 2] = a;
        c[e + 4 >> 2] = -1;
        c[e + 8 >> 2] = 0;
        c[e + 12 >> 2] = f;
        a:
        do if ((g | 0) == 0)
            l = d;
        else {
            a = d;
            do {
                if (xl(e, a) | 0) {
                    l = a;
                    break a
                }
                a = a + 28 | 0
            } while ((a | 0) != (k | 0));
            m = c[j >> 2] | 0;
            n = c[f >> 2] | 0;
            o = m - n | 0;
            c[j >> 2] = o;
            i = b;
            return
        }
        while (0);
        if ((l | 0) == (k | 0)) {
            m = c[j >> 2] | 0;
            n = c[f >> 2] | 0;
            o = m - n | 0;
            c[j >> 2] = o;
            i = b;
            return
        } else {
            p = l;
            q = l
        }
        b:
        while (1) {
            l = q;
            do {
                l = l +
                28 | 0;
                if ((l | 0) == (k | 0))
                    break b
            } while (xl(e, l) | 0);
            c[p + 0 >> 2] = c[l + 0 >> 2];
            c[p + 4 >> 2] = c[l + 4 >> 2];
            c[p + 8 >> 2] = c[l + 8 >> 2];
            c[p + 12 >> 2] = c[l + 12 >> 2];
            c[p + 16 >> 2] = c[l + 16 >> 2];
            c[p + 20 >> 2] = c[l + 20 >> 2];
            c[p + 24 >> 2] = c[l + 24 >> 2];
            p = p + 28 | 0;
            q = l
        }
        m = c[j >> 2] | 0;
        n = c[f >> 2] | 0;
        o = m - n | 0;
        c[j >> 2] = o;
        i = b;
        return
    }
    function _k(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0;
        d = i;
        e = c[a >> 2] | 0;
        f = c[b >> 2] | 0;
        if ((e | 0) == (f | 0)) {
            h = +g[a + 12 >> 2] > +g[b + 12 >> 2];
            i = d;
            return h | 0
        } else {
            h = (e | 0) < (f | 0);
            i = d;
            return h | 0
        }
        return 0
    }
    function Jf(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0;
        d = i;
        vh(a, b);
        c[a >>
        2] = 1056;
        e = b + 20 | 0;
        f = c[e + 4 >> 2] | 0;
        h = a + 68 | 0;
        c[h >> 2] = c[e >> 2];
        c[h + 4 >> 2] = f;
        g[a + 76 >> 2] = +g[b + 28 >> 2];
        g[a + 80 >> 2] = 0;
        g[a + 84 >> 2] = 0;
        g[a + 88 >> 2] = 0;
        g[a + 92 >> 2] = +g[b + 32 >> 2];
        g[a + 96 >> 2] = +g[b + 36 >> 2];
        g[a + 100 >> 2] = +g[b + 40 >> 2];
        i = d;
        return
    }
    function Kf(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa =
            0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Da = 0,
            Ea = 0;
        e = i;
        f = c[b + 48 >> 2] | 0;
        h = c[f + 8 >> 2] | 0;
        j = b + 104 | 0;
        c[j >> 2] = h;
        l = c[b + 52 >> 2] | 0;
        m = c[l + 8 >> 2] | 0;
        n = b + 108 | 0;
        c[n >> 2] = m;
        o = f + 44 | 0;
        p = c[o >> 2] | 0;
        q = c[o + 4 >> 2] | 0;
        o = b + 128 | 0;
        c[o >> 2] = p;
        c[o + 4 >> 2] = q;
        o = l + 44 | 0;
        r = c[o >> 2] | 0;
        s = c[o + 4 >> 2] | 0;
        o = b + 136 | 0;
        c[o >> 2] = r;
        c[o + 4 >> 2] = s;
        o = b + 156 | 0;
        g[o >> 2] = +g[f + 136 >> 2];
        t = b + 160 | 0;
        g[t >> 2] = +g[l + 136 >> 2];
        u = b + 164 | 0;
        g[u >> 2] = +g[f + 144 >> 2];
        f = b + 168 | 0;
        g[f >> 2] = +g[l + 144 >> 2];
        l = c[d + 28 >> 2] | 0;
        v = l + (h * 12 | 0) | 0;
        w = +g[v >> 2];
        x = +g[v + 4 >> 2];
        y = +g[l + (h *
        12 | 0) + 8 >> 2];
        v = d + 32 | 0;
        z = c[v >> 2] | 0;
        A = z + (h * 12 | 0) | 0;
        B = +g[A >> 2];
        C = +g[A + 4 >> 2];
        D = +g[z + (h * 12 | 0) + 8 >> 2];
        h = l + (m * 12 | 0) | 0;
        E = +g[h >> 2];
        F = +g[h + 4 >> 2];
        G = +g[l + (m * 12 | 0) + 8 >> 2];
        l = z + (m * 12 | 0) | 0;
        H = +g[l >> 2];
        I = +g[l + 4 >> 2];
        J = +g[z + (m * 12 | 0) + 8 >> 2];
        K = +T(+y);
        L = +S(+y);
        M = +T(+G);
        N = +S(+G);
        O = -(c[k >> 2] = p, +g[k >> 2]);
        P = -(c[k >> 2] = q, +g[k >> 2]);
        Q = L * O - K * P;
        R = K * O + L * P;
        P = +Q;
        O = +R;
        q = b + 112 | 0;
        g[q >> 2] = P;
        g[q + 4 >> 2] = O;
        O = -(c[k >> 2] = r, +g[k >> 2]);
        P = -(c[k >> 2] = s, +g[k >> 2]);
        U = N * O - M * P;
        V = M * O + N * P;
        P = +U;
        N = +V;
        s = b + 120 | 0;
        g[s >> 2] = P;
        g[s + 4 >> 2] = N;
        N = +g[o >> 2];
        P = +g[t >> 2];
        O = +g[u >>
        2];
        M = +g[f >> 2];
        W = N + P;
        X = W + R * O * R + V * M * V;
        Y = O * Q;
        Z = M * U;
        _ = -(R * Y) - V * Z;
        $ = W + Q * Y + U * Z;
        Z = X * $ - _ * _;
        if (Z != 0)
            aa = 1 / Z;
        else
            aa = Z;
        Z = -(_ * aa);
        g[b + 172 >> 2] = $ * aa;
        g[b + 176 >> 2] = Z;
        g[b + 180 >> 2] = Z;
        g[b + 184 >> 2] = X * aa;
        aa = O + M;
        if (aa > 0)
            ba = 1 / aa;
        else
            ba = aa;
        g[b + 188 >> 2] = ba;
        ba = +g[b + 68 >> 2];
        aa = +g[b + 72 >> 2];
        X = +(E + U - w - Q - (L * ba - K * aa));
        w = +(F + V - x - R - (K * ba + L * aa));
        f = b + 144 | 0;
        g[f >> 2] = X;
        g[f + 4 >> 2] = w;
        g[b + 152 >> 2] = G - y - +g[b + 76 >> 2];
        f = b + 80 | 0;
        if ((a[d + 24 >> 0] | 0) == 0) {
            g[f >> 2] = 0;
            g[b + 84 >> 2] = 0;
            g[b + 88 >> 2] = 0;
            ca = B;
            da = C;
            ea = H;
            fa = I;
            ga = D;
            ha = J;
            ia = c[j >> 2] | 0;
            ja = c[v >> 2] | 0;
            ka = ja + (ia *
            12 | 0) | 0;
            la = +ca;
            ma = +da;
            na = ka;
            oa = na;
            g[oa >> 2] = la;
            pa = na + 4 | 0;
            qa = pa;
            g[qa >> 2] = ma;
            ra = c[j >> 2] | 0;
            sa = c[v >> 2] | 0;
            ta = sa + (ra * 12 | 0) + 8 | 0;
            g[ta >> 2] = ga;
            ua = c[n >> 2] | 0;
            va = sa + (ua * 12 | 0) | 0;
            wa = +ea;
            xa = +fa;
            ya = va;
            za = ya;
            g[za >> 2] = wa;
            Aa = ya + 4 | 0;
            Ba = Aa;
            g[Ba >> 2] = xa;
            Ca = c[n >> 2] | 0;
            Da = c[v >> 2] | 0;
            Ea = Da + (Ca * 12 | 0) + 8 | 0;
            g[Ea >> 2] = ha;
            i = e;
            return
        } else {
            u = d + 8 | 0;
            y = +g[u >> 2];
            G = y * +g[f >> 2];
            g[f >> 2] = G;
            f = b + 84 | 0;
            w = y * +g[f >> 2];
            g[f >> 2] = w;
            f = b + 88 | 0;
            y = +g[u >> 2] * +g[f >> 2];
            g[f >> 2] = y;
            ca = B - N * G;
            da = C - N * w;
            ea = H + P * G;
            fa = I + P * w;
            ga = D - O * (y + (w * Q - G * R));
            ha = J + M * (y + (w * U - G * V));
            ia = c[j >>
            2] | 0;
            ja = c[v >> 2] | 0;
            ka = ja + (ia * 12 | 0) | 0;
            la = +ca;
            ma = +da;
            na = ka;
            oa = na;
            g[oa >> 2] = la;
            pa = na + 4 | 0;
            qa = pa;
            g[qa >> 2] = ma;
            ra = c[j >> 2] | 0;
            sa = c[v >> 2] | 0;
            ta = sa + (ra * 12 | 0) + 8 | 0;
            g[ta >> 2] = ga;
            ua = c[n >> 2] | 0;
            va = sa + (ua * 12 | 0) | 0;
            wa = +ea;
            xa = +fa;
            ya = va;
            za = ya;
            g[za >> 2] = wa;
            Aa = ya + 4 | 0;
            Ba = Aa;
            g[Ba >> 2] = xa;
            Ca = c[n >> 2] | 0;
            Da = c[v >> 2] | 0;
            Ea = Da + (Ca * 12 | 0) + 8 | 0;
            g[Ea >> 2] = ha;
            i = e;
            return
        }
    }
    function Lf(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0;
        d = i;
        e = a + 104 |
        0;
        f = c[e >> 2] | 0;
        h = b + 32 | 0;
        j = c[h >> 2] | 0;
        k = j + (f * 12 | 0) | 0;
        l = +g[k >> 2];
        m = +g[k + 4 >> 2];
        n = +g[j + (f * 12 | 0) + 8 >> 2];
        f = a + 108 | 0;
        k = c[f >> 2] | 0;
        o = j + (k * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[j + (k * 12 | 0) + 8 >> 2];
        s = +g[a + 156 >> 2];
        t = +g[a + 160 >> 2];
        u = +g[a + 164 >> 2];
        v = +g[a + 168 >> 2];
        w = +g[b >> 2];
        x = +g[b + 4 >> 2] * +g[a + 100 >> 2];
        b = a + 88 | 0;
        y = +g[b >> 2];
        z = w * +g[a + 96 >> 2];
        A = y - +g[a + 188 >> 2] * (r - n + x * +g[a + 152 >> 2]);
        B = -z;
        C = A < z ? A : z;
        z = C < B ? B : C;
        g[b >> 2] = z;
        C = z - y;
        y = n - u * C;
        n = r + v * C;
        C = +g[a + 124 >> 2];
        r = +g[a + 120 >> 2];
        z = +g[a + 116 >> 2];
        B = +g[a + 112 >> 2];
        A = +g[a + 144 >> 2] * x + (z * y + (p - C * n - l));
        D =
        x * +g[a + 148 >> 2] + (q + r * n - m - B * y);
        x = +g[a + 176 >> 2] * A + +g[a + 184 >> 2] * D;
        b = a + 80 | 0;
        k = b;
        E = +g[k >> 2];
        F = +g[k + 4 >> 2];
        G = E - (+g[a + 172 >> 2] * A + +g[a + 180 >> 2] * D);
        g[b >> 2] = G;
        k = a + 84 | 0;
        D = +g[k >> 2] - x;
        g[k >> 2] = D;
        x = w * +g[a + 92 >> 2];
        w = G * G + D * D;
        if (w > x * x) {
            A = +Q(+w);
            if (A < 1.1920928955078125E-7) {
                H = G;
                I = D
            } else {
                w = 1 / A;
                A = G * w;
                g[b >> 2] = A;
                J = D * w;
                g[k >> 2] = J;
                H = A;
                I = J
            }
            J = x * H;
            g[b >> 2] = J;
            H = x * I;
            g[k >> 2] = H;
            K = J;
            L = H
        } else {
            K = G;
            L = D
        }
        D = K - E;
        E = L - F;
        F = +(l - s * D);
        l = +(m - s * E);
        k = (c[h >> 2] | 0) + ((c[e >> 2] | 0) * 12 | 0) | 0;
        g[k >> 2] = F;
        g[k + 4 >> 2] = l;
        k = c[h >> 2] | 0;
        g[k + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = y - u * (B *
        E - D * z);
        z = +(p + t * D);
        p = +(q + t * E);
        e = k + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = z;
        g[e + 4 >> 2] = p;
        g[(c[h >> 2] | 0) + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = n + v * (E * r - D * C);
        i = d;
        return
    }
    function Mf(a, b) {
        a = a | 0;
        b = b | 0;
        return 1
    }
    function Nf(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0;
        d = (c[b + 48 >> 2] | 0) + 12 | 0;
        b = c[d + 4 >> 2] | 0;
        e = a;
        c[e >> 2] = c[d >> 2];
        c[e + 4 >> 2] = b;
        return
    }
    function Of(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0;
        d = (c[b + 52 >> 2] | 0) + 12 | 0;
        b = c[d + 4 >> 2] | 0;
        e = a;
        c[e >> 2] = c[d >> 2];
        c[e + 4 >> 2] = b;
        return
    }
    function Pf(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0;
        d = +g[b + 84 >> 2] * c;
        g[a >> 2] = +g[b + 80 >> 2] * c;
        g[a + 4 >> 2] =
        d;
        return
    }
    function Qf(a, b) {
        a = a | 0;
        b = +b;
        return +(+g[a + 88 >> 2] * b)
    }
    function Rf(a, d) {
        a = a | 0;
        d = d | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        f = i;
        h = a + 68 | 0;
        if (!(+g[d >> 2] != +g[h >> 2]) ? !(+g[d + 4 >> 2] != +g[a + 72 >> 2]) : 0) {
            i = f;
            return
        }
        j = c[a + 48 >> 2] | 0;
        k = j + 4 | 0;
        l = e[k >> 1] | 0;
        if ((l & 2 | 0) == 0) {
            b[k >> 1] = l | 2;
            g[j + 160 >> 2] = 0
        }
        j = c[a + 52 >> 2] | 0;
        a = j + 4 | 0;
        l = e[a >> 1] | 0;
        if ((l & 2 | 0) == 0) {
            b[a >> 1] = l | 2;
            g[j + 160 >> 2] = 0
        }
        j = d;
        d = c[j + 4 >> 2] | 0;
        l = h;
        c[l >> 2] = c[j >> 2];
        c[l + 4 >> 2] = d;
        i = f;
        return
    }
    function Sf(a, d) {
        a = a | 0;
        d = +d;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        f = i;
        h = a + 76 | 0;
        if (!(+g[h >> 2] != d)) {
            i = f;
            return
        }
        j =
        c[a + 48 >> 2] | 0;
        k = j + 4 | 0;
        l = e[k >> 1] | 0;
        if ((l & 2 | 0) == 0) {
            b[k >> 1] = l | 2;
            g[j + 160 >> 2] = 0
        }
        j = c[a + 52 >> 2] | 0;
        a = j + 4 | 0;
        l = e[a >> 1] | 0;
        if ((l & 2 | 0) == 0) {
            b[a >> 1] = l | 2;
            g[j + 160 >> 2] = 0
        }
        g[h >> 2] = d;
        i = f;
        return
    }
    function Tf(a) {
        a = a | 0;
        var b = 0,
            e = 0,
            f = 0,
            j = 0,
            l = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) + 8 >> 2] | 0;
        Rm(1104, e);
        c[e >> 2] = f;
        Rm(1128, e);
        c[e >> 2] = j;
        Rm(1160, e);
        c[e >> 2] = d[a + 61 >> 0] | 0;
        Rm(1192, e);
        l = +g[a + 72 >> 2];
        h[k >> 3] = +g[a + 68 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(1232,
        e);
        h[k >> 3] = +g[a + 76 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(1280, e);
        h[k >> 3] = +g[a + 92 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(1312, e);
        h[k >> 3] = +g[a + 96 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(1344, e);
        h[k >> 3] = +g[a + 100 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(1376, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(1416, e);
        i = b;
        return
    }
    function Uf(a, b) {
        a = a | 0;
        b = b | 0;
        return
    }
    function Vf(a) {
        a = a | 0;
        return
    }
    function Wf(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Xf(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m =
            0,
            n = 0,
            o = 0,
            p = 0;
        h = i;
        c[a + 8 >> 2] = b;
        c[a + 12 >> 2] = d;
        j = +g[e >> 2] - +g[b + 12 >> 2];
        k = e + 4 | 0;
        l = +g[k >> 2] - +g[b + 16 >> 2];
        m = +g[b + 24 >> 2];
        n = +g[b + 20 >> 2];
        o = +(j * m + l * n);
        p = +(m * l - j * n);
        b = a + 20 | 0;
        g[b >> 2] = o;
        g[b + 4 >> 2] = p;
        p = +g[f >> 2] - +g[d + 12 >> 2];
        b = f + 4 | 0;
        o = +g[b >> 2] - +g[d + 16 >> 2];
        n = +g[d + 24 >> 2];
        j = +g[d + 20 >> 2];
        l = +(p * n + o * j);
        m = +(n * o - p * j);
        d = a + 28 | 0;
        g[d >> 2] = l;
        g[d + 4 >> 2] = m;
        m = +g[f >> 2] - +g[e >> 2];
        l = +g[b >> 2] - +g[k >> 2];
        g[a + 36 >> 2] = +Q(+(m * m + l * l));
        i = h;
        return
    }
    function Yf(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0;
        d = i;
        vh(a, b);
        c[a >> 2] = 1504;
        e = b + 20 | 0;
        f = c[e + 4 >> 2] | 0;
        h = a + 80 |
        0;
        c[h >> 2] = c[e >> 2];
        c[h + 4 >> 2] = f;
        f = b + 28 | 0;
        h = c[f + 4 >> 2] | 0;
        e = a + 88 | 0;
        c[e >> 2] = c[f >> 2];
        c[e + 4 >> 2] = h;
        g[a + 104 >> 2] = +g[b + 36 >> 2];
        g[a + 68 >> 2] = +g[b + 40 >> 2];
        g[a + 72 >> 2] = +g[b + 44 >> 2];
        g[a + 100 >> 2] = 0;
        g[a + 96 >> 2] = 0;
        g[a + 76 >> 2] = 0;
        i = d;
        return
    }
    function Zf(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa =
            0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0;
        e = i;
        f = c[b + 48 >> 2] | 0;
        h = c[f + 8 >> 2] | 0;
        j = b + 108 | 0;
        c[j >> 2] = h;
        l = c[b + 52 >> 2] | 0;
        m = c[l + 8 >> 2] | 0;
        n = b + 112 | 0;
        c[n >> 2] = m;
        o = f + 44 | 0;
        p = c[o >> 2] | 0;
        q = c[o + 4 >> 2] | 0;
        o = b + 140 | 0;
        c[o >> 2] = p;
        c[o + 4 >> 2] = q;
        o = l + 44 | 0;
        r = c[o >> 2] | 0;
        s = c[o + 4 >> 2] | 0;
        o = b + 148 | 0;
        c[o >> 2] = r;
        c[o + 4 >> 2] = s;
        s = b + 156 | 0;
        g[s >> 2] = +g[f + 136 >> 2];
        o = b + 160 | 0;
        g[o >> 2] = +g[l + 136 >> 2];
        t = b + 164 | 0;
        g[t >> 2] = +g[f + 144 >> 2];
        f = b + 168 | 0;
        g[f >> 2] = +g[l + 144 >> 2];
        l = c[d + 28 >> 2] | 0;
        u = l + (h * 12 | 0) | 0;
        v = +g[u >> 2];
        w = +g[u + 4 >> 2];
        x = +g[l + (h * 12 | 0) + 8 >> 2];
        u = d + 32 | 0;
        y = c[u >> 2] |
        0;
        z = y + (h * 12 | 0) | 0;
        A = +g[z >> 2];
        B = +g[z + 4 >> 2];
        C = +g[y + (h * 12 | 0) + 8 >> 2];
        h = l + (m * 12 | 0) | 0;
        D = +g[h >> 2];
        E = +g[h + 4 >> 2];
        F = +g[l + (m * 12 | 0) + 8 >> 2];
        l = y + (m * 12 | 0) | 0;
        G = +g[l >> 2];
        H = +g[l + 4 >> 2];
        I = +g[y + (m * 12 | 0) + 8 >> 2];
        J = +T(+x);
        K = +S(+x);
        x = +T(+F);
        L = +S(+F);
        F = +g[b + 80 >> 2] - (c[k >> 2] = p, +g[k >> 2]);
        M = +g[b + 84 >> 2] - (c[k >> 2] = q, +g[k >> 2]);
        N = K * F - J * M;
        O = J * F + K * M;
        M = +N;
        K = +O;
        q = b + 124 | 0;
        g[q >> 2] = M;
        g[q + 4 >> 2] = K;
        K = +g[b + 88 >> 2] - (c[k >> 2] = r, +g[k >> 2]);
        M = +g[b + 92 >> 2] - +g[b + 152 >> 2];
        F = L * K - x * M;
        J = x * K + L * M;
        M = +F;
        L = +J;
        r = b + 132 | 0;
        g[r >> 2] = M;
        g[r + 4 >> 2] = L;
        r = b + 116 | 0;
        L = D + F - v - N;
        v = E +
        J - w - O;
        w = +L;
        E = +v;
        q = r;
        g[q >> 2] = w;
        g[q + 4 >> 2] = E;
        E = +Q(+(L * L + v * v));
        if (E > .004999999888241291) {
            w = 1 / E;
            D = L * w;
            g[r >> 2] = D;
            P = w * v;
            R = D
        } else {
            g[r >> 2] = 0;
            P = 0;
            R = 0
        }
        g[b + 120 >> 2] = P;
        D = P * N - O * R;
        v = P * F - R * J;
        w = +g[s >> 2];
        L = +g[t >> 2];
        M = +g[o >> 2];
        K = +g[f >> 2];
        x = M + (w + D * D * L) + v * v * K;
        if (x != 0)
            U = 1 / x;
        else
            U = 0;
        f = b + 172 | 0;
        g[f >> 2] = U;
        v = +g[b + 68 >> 2];
        if (v > 0) {
            D = E - +g[b + 104 >> 2];
            E = v * 6.2831854820251465;
            v = E * U * E;
            V = +g[d >> 2];
            W = V * (E * U * 2 * +g[b + 72 >> 2] + v * V);
            o = b + 96 | 0;
            g[o >> 2] = W;
            if (W != 0)
                X = 1 / W;
            else
                X = 0;
            g[o >> 2] = X;
            g[b + 76 >> 2] = v * D * V * X;
            V = x + X;
            if (V != 0)
                Y = 1 / V;
            else
                Y = 0;
            g[f >> 2] = Y
        } else {
            g[b +
            96 >> 2] = 0;
            g[b + 76 >> 2] = 0
        }
        if ((a[d + 24 >> 0] | 0) == 0) {
            g[b + 100 >> 2] = 0;
            Z = A;
            _ = B;
            $ = G;
            aa = H;
            ba = C;
            ca = I;
            da = c[j >> 2] | 0;
            ea = c[u >> 2] | 0;
            fa = ea + (da * 12 | 0) | 0;
            ga = +Z;
            ha = +_;
            ia = fa;
            ja = ia;
            g[ja >> 2] = ga;
            ka = ia + 4 | 0;
            la = ka;
            g[la >> 2] = ha;
            ma = c[j >> 2] | 0;
            na = c[u >> 2] | 0;
            oa = na + (ma * 12 | 0) + 8 | 0;
            g[oa >> 2] = ba;
            pa = c[n >> 2] | 0;
            qa = na + (pa * 12 | 0) | 0;
            ra = +$;
            sa = +aa;
            ta = qa;
            ua = ta;
            g[ua >> 2] = ra;
            va = ta + 4 | 0;
            wa = va;
            g[wa >> 2] = sa;
            xa = c[n >> 2] | 0;
            ya = c[u >> 2] | 0;
            za = ya + (xa * 12 | 0) + 8 | 0;
            g[za >> 2] = ca;
            i = e;
            return
        } else {
            f = b + 100 | 0;
            Y = +g[d + 8 >> 2] * +g[f >> 2];
            g[f >> 2] = Y;
            V = R * Y;
            R = Y * P;
            Z = A - V * w;
            _ = B - R * w;
            $ = G + V * M;
            aa =
            H + R * M;
            ba = C - L * (R * N - V * O);
            ca = I + K * (R * F - V * J);
            da = c[j >> 2] | 0;
            ea = c[u >> 2] | 0;
            fa = ea + (da * 12 | 0) | 0;
            ga = +Z;
            ha = +_;
            ia = fa;
            ja = ia;
            g[ja >> 2] = ga;
            ka = ia + 4 | 0;
            la = ka;
            g[la >> 2] = ha;
            ma = c[j >> 2] | 0;
            na = c[u >> 2] | 0;
            oa = na + (ma * 12 | 0) + 8 | 0;
            g[oa >> 2] = ba;
            pa = c[n >> 2] | 0;
            qa = na + (pa * 12 | 0) | 0;
            ra = +$;
            sa = +aa;
            ta = qa;
            ua = ta;
            g[ua >> 2] = ra;
            va = ta + 4 | 0;
            wa = va;
            g[wa >> 2] = sa;
            xa = c[n >> 2] | 0;
            ya = c[u >> 2] | 0;
            za = ya + (xa * 12 | 0) + 8 | 0;
            g[za >> 2] = ca;
            i = e;
            return
        }
    }
    function _f(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0;
        d = i;
        e = a +
        108 | 0;
        f = c[e >> 2] | 0;
        h = b + 32 | 0;
        b = c[h >> 2] | 0;
        j = b + (f * 12 | 0) | 0;
        k = j;
        l = +g[k >> 2];
        m = +g[k + 4 >> 2];
        n = +g[b + (f * 12 | 0) + 8 >> 2];
        f = a + 112 | 0;
        k = c[f >> 2] | 0;
        o = b + (k * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[b + (k * 12 | 0) + 8 >> 2];
        s = +g[a + 128 >> 2];
        t = +g[a + 124 >> 2];
        u = +g[a + 136 >> 2];
        v = +g[a + 132 >> 2];
        w = +g[a + 116 >> 2];
        x = +g[a + 120 >> 2];
        k = a + 100 | 0;
        y = +g[k >> 2];
        z = +g[a + 172 >> 2] * (+g[a + 76 >> 2] + (w * (p - r * u - (l - n * s)) + x * (q + r * v - (m + n * t))) + +g[a + 96 >> 2] * y);
        A = -z;
        g[k >> 2] = y - z;
        z = w * A;
        w = x * A;
        A = +g[a + 156 >> 2];
        x = n - +g[a + 164 >> 2] * (t * w - z * s);
        s = +g[a + 160 >> 2];
        t = r + +g[a + 168 >> 2] * (w * v - z * u);
        u = +(l - A *
        z);
        l = +(m - A * w);
        a = j;
        g[a >> 2] = u;
        g[a + 4 >> 2] = l;
        a = c[h >> 2] | 0;
        g[a + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = x;
        x = +(p + z * s);
        z = +(q + w * s);
        e = a + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = x;
        g[e + 4 >> 2] = z;
        g[(c[h >> 2] | 0) + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = t;
        i = d;
        return
    }
    function $f(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0;
        d = i;
        if (+g[a + 68 >> 2] > 0) {
            e = 1;
            i = d;
            return e | 0
        }
        f = a + 108 | 0;
        h = c[f >> 2] | 0;
        j = b + 28 | 0;
        b = c[j >> 2] | 0;
        k = b + (h * 12 | 0) | 0;
        l = k;
        m = +g[l >> 2];
        n = +g[l + 4 >> 2];
        o = +g[b + (h * 12 | 0) + 8 >> 2];
        h = a + 112 | 0;
        l =
        c[h >> 2] | 0;
        p = b + (l * 12 | 0) | 0;
        q = +g[p >> 2];
        r = +g[p + 4 >> 2];
        s = +g[b + (l * 12 | 0) + 8 >> 2];
        t = +T(+o);
        u = +S(+o);
        v = +T(+s);
        w = +S(+s);
        x = +g[a + 80 >> 2] - +g[a + 140 >> 2];
        y = +g[a + 84 >> 2] - +g[a + 144 >> 2];
        z = u * x - t * y;
        A = t * x + u * y;
        y = +g[a + 88 >> 2] - +g[a + 148 >> 2];
        u = +g[a + 92 >> 2] - +g[a + 152 >> 2];
        x = w * y - v * u;
        t = v * y + w * u;
        u = q + x - m - z;
        w = r + t - n - A;
        y = +Q(+(u * u + w * w));
        if (y < 1.1920928955078125E-7) {
            B = 0;
            C = u;
            D = w
        } else {
            v = 1 / y;
            B = y;
            C = u * v;
            D = w * v
        }
        v = B - +g[a + 104 >> 2];
        B = v < .20000000298023224 ? v : .20000000298023224;
        v = B < -.20000000298023224 ? -.20000000298023224 : B;
        B = -(+g[a + 172 >> 2] * v);
        w = C * B;
        C = D * B;
        B = +g[a +
        156 >> 2];
        D = o - +g[a + 164 >> 2] * (z * C - A * w);
        A = +g[a + 160 >> 2];
        z = s + +g[a + 168 >> 2] * (x * C - t * w);
        t = +(m - B * w);
        m = +(n - B * C);
        a = k;
        g[a >> 2] = t;
        g[a + 4 >> 2] = m;
        a = c[j >> 2] | 0;
        g[a + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = D;
        D = +(q + A * w);
        w = +(r + A * C);
        f = a + ((c[h >> 2] | 0) * 12 | 0) | 0;
        g[f >> 2] = D;
        g[f + 4 >> 2] = w;
        g[(c[j >> 2] | 0) + ((c[h >> 2] | 0) * 12 | 0) + 8 >> 2] = z;
        if (v > 0)
            E = v;
        else
            E = -v;
        e = E < .004999999888241291;
        i = d;
        return e | 0
    }
    function ag(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 48 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 80 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 84 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d +
        12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function bg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 88 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 92 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function cg(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0;
        d = +g[b + 100 >> 2] * c;
        c = d * +g[b + 120 >> 2];
        g[a >> 2] = +g[b + 116 >> 2] * d;
        g[a + 4 >> 2] = c;
        return
    }
    function dg(a, b) {
        a = a | 0;
        b = +b;
        return 0
    }
    function eg(a) {
        a = a | 0;
        var b = 0,
            e = 0,
            f = 0,
            j = 0,
            l = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) +
        8 >> 2] | 0;
        Rm(1552, e);
        c[e >> 2] = f;
        Rm(1584, e);
        c[e >> 2] = j;
        Rm(1616, e);
        c[e >> 2] = d[a + 61 >> 0] | 0;
        Rm(1648, e);
        l = +g[a + 84 >> 2];
        h[k >> 3] = +g[a + 80 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(1688, e);
        l = +g[a + 92 >> 2];
        h[k >> 3] = +g[a + 88 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(1736, e);
        h[k >> 3] = +g[a + 104 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(1784, e);
        h[k >> 3] = +g[a + 68 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(1808, e);
        h[k >>
        3] = +g[a + 72 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(1840, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(1872, e);
        i = b;
        return
    }
    function fg(a) {
        a = a | 0;
        return
    }
    function gg(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function hg(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        f = i;
        c[a + 8 >> 2] = b;
        c[a + 12 >> 2] = d;
        h = +g[e >> 2] - +g[b + 12 >> 2];
        j = e + 4 | 0;
        k = +g[j >> 2] - +g[b + 16 >> 2];
        l = +g[b + 24 >> 2];
        m = +g[b + 20 >> 2];
        n = +(h * l + k * m);
        o = +(l * k - h * m);
        b = a + 20 | 0;
        g[b >> 2] = n;
        g[b + 4 >> 2] = o;
        o = +g[e >> 2] - +g[d + 12 >> 2];
        n = +g[j >> 2] - +g[d + 16 >> 2];
        m = +g[d + 24 >> 2];
        h = +g[d + 20 >>
        2];
        k = +(o * m + n * h);
        l = +(m * n - o * h);
        d = a + 28 | 0;
        g[d >> 2] = k;
        g[d + 4 >> 2] = l;
        i = f;
        return
    }
    function ig(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0;
        d = i;
        vh(a, b);
        c[a >> 2] = 1968;
        e = b + 20 | 0;
        f = c[e + 4 >> 2] | 0;
        h = a + 68 | 0;
        c[h >> 2] = c[e >> 2];
        c[h + 4 >> 2] = f;
        f = b + 28 | 0;
        h = c[f + 4 >> 2] | 0;
        e = a + 76 | 0;
        c[e >> 2] = c[f >> 2];
        c[e + 4 >> 2] = h;
        g[a + 84 >> 2] = 0;
        g[a + 88 >> 2] = 0;
        g[a + 92 >> 2] = 0;
        g[a + 96 >> 2] = +g[b + 36 >> 2];
        g[a + 100 >> 2] = +g[b + 40 >> 2];
        i = d;
        return
    }
    function jg(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H =
            0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0;
        e = i;
        f = c[b + 48 >> 2] | 0;
        h = c[f + 8 >> 2] | 0;
        j = b + 104 | 0;
        c[j >> 2] = h;
        l = c[b + 52 >> 2] | 0;
        m = c[l + 8 >> 2] | 0;
        n = b + 108 | 0;
        c[n >> 2] = m;
        o = f + 44 | 0;
        p = c[o >> 2] | 0;
        q = c[o + 4 >> 2] | 0;
        o = b + 128 | 0;
        c[o >> 2] = p;
        c[o + 4 >> 2] = q;
        o = l + 44 | 0;
        r = c[o >> 2] | 0;
        s = c[o + 4 >> 2] | 0;
        o = b + 136 | 0;
        c[o >> 2] = r;
        c[o + 4 >> 2] = s;
        o = b + 144 | 0;
        g[o >> 2] = +g[f + 136 >> 2];
        t = +g[l + 136 >> 2];
        g[b + 148 >> 2] = t;
        u = +g[f + 144 >> 2];
        g[b + 152 >> 2] = u;
        v =
        +g[l + 144 >> 2];
        g[b + 156 >> 2] = v;
        l = c[d + 28 >> 2] | 0;
        w = +g[l + (h * 12 | 0) + 8 >> 2];
        f = d + 32 | 0;
        x = c[f >> 2] | 0;
        y = x + (h * 12 | 0) | 0;
        z = +g[y >> 2];
        A = +g[y + 4 >> 2];
        B = +g[x + (h * 12 | 0) + 8 >> 2];
        C = +g[l + (m * 12 | 0) + 8 >> 2];
        l = x + (m * 12 | 0) | 0;
        D = +g[l >> 2];
        E = +g[l + 4 >> 2];
        F = +g[x + (m * 12 | 0) + 8 >> 2];
        G = +T(+w);
        H = +S(+w);
        w = +T(+C);
        I = +S(+C);
        C = +g[b + 68 >> 2] - (c[k >> 2] = p, +g[k >> 2]);
        J = +g[b + 72 >> 2] - (c[k >> 2] = q, +g[k >> 2]);
        K = H * C - G * J;
        L = G * C + H * J;
        J = +K;
        H = +L;
        q = b + 112 | 0;
        g[q >> 2] = J;
        g[q + 4 >> 2] = H;
        H = +g[b + 76 >> 2] - (c[k >> 2] = r, +g[k >> 2]);
        J = +g[b + 80 >> 2] - (c[k >> 2] = s, +g[k >> 2]);
        C = I * H - w * J;
        G = w * H + I * J;
        J = +C;
        I = +G;
        s = b +
        120 | 0;
        g[s >> 2] = J;
        g[s + 4 >> 2] = I;
        I = +g[o >> 2];
        J = I + t;
        H = J + L * u * L + G * v * G;
        w = u * K;
        M = v * C;
        N = -(L * w) - G * M;
        O = J + K * w + C * M;
        M = H * O - N * N;
        if (M != 0)
            P = 1 / M;
        else
            P = M;
        M = -(N * P);
        g[b + 160 >> 2] = O * P;
        g[b + 164 >> 2] = M;
        g[b + 168 >> 2] = M;
        g[b + 172 >> 2] = H * P;
        P = u + v;
        if (P > 0)
            Q = 1 / P;
        else
            Q = P;
        g[b + 176 >> 2] = Q;
        o = b + 84 | 0;
        if ((a[d + 24 >> 0] | 0) == 0) {
            g[o >> 2] = 0;
            g[b + 88 >> 2] = 0;
            g[b + 92 >> 2] = 0;
            R = z;
            U = A;
            V = D;
            W = E;
            X = B;
            Y = F;
            Z = c[j >> 2] | 0;
            _ = c[f >> 2] | 0;
            $ = _ + (Z * 12 | 0) | 0;
            aa = +R;
            ba = +U;
            ca = $;
            da = ca;
            g[da >> 2] = aa;
            ea = ca + 4 | 0;
            fa = ea;
            g[fa >> 2] = ba;
            ga = c[j >> 2] | 0;
            ha = c[f >> 2] | 0;
            ia = ha + (ga * 12 | 0) + 8 | 0;
            g[ia >> 2] = X;
            ja = c[n >> 2] |
            0;
            ka = ha + (ja * 12 | 0) | 0;
            la = +V;
            ma = +W;
            na = ka;
            oa = na;
            g[oa >> 2] = la;
            pa = na + 4 | 0;
            qa = pa;
            g[qa >> 2] = ma;
            ra = c[n >> 2] | 0;
            sa = c[f >> 2] | 0;
            ta = sa + (ra * 12 | 0) + 8 | 0;
            g[ta >> 2] = Y;
            i = e;
            return
        } else {
            s = d + 8 | 0;
            Q = +g[s >> 2];
            P = Q * +g[o >> 2];
            g[o >> 2] = P;
            o = b + 88 | 0;
            H = Q * +g[o >> 2];
            g[o >> 2] = H;
            o = b + 92 | 0;
            Q = +g[s >> 2] * +g[o >> 2];
            g[o >> 2] = Q;
            R = z - I * P;
            U = A - I * H;
            V = D + t * P;
            W = E + t * H;
            X = B - u * (Q + (H * K - P * L));
            Y = F + v * (Q + (H * C - P * G));
            Z = c[j >> 2] | 0;
            _ = c[f >> 2] | 0;
            $ = _ + (Z * 12 | 0) | 0;
            aa = +R;
            ba = +U;
            ca = $;
            da = ca;
            g[da >> 2] = aa;
            ea = ca + 4 | 0;
            fa = ea;
            g[fa >> 2] = ba;
            ga = c[j >> 2] | 0;
            ha = c[f >> 2] | 0;
            ia = ha + (ga * 12 | 0) + 8 | 0;
            g[ia >> 2] = X;
            ja = c[n >> 2] | 0;
            ka = ha + (ja * 12 | 0) | 0;
            la = +V;
            ma = +W;
            na = ka;
            oa = na;
            g[oa >> 2] = la;
            pa = na + 4 | 0;
            qa = pa;
            g[qa >> 2] = ma;
            ra = c[n >> 2] | 0;
            sa = c[f >> 2] | 0;
            ta = sa + (ra * 12 | 0) + 8 | 0;
            g[ta >> 2] = Y;
            i = e;
            return
        }
    }
    function kg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0;
        d = i;
        e = a + 104 | 0;
        f = c[e >> 2] | 0;
        h = b + 32 | 0;
        j = c[h >> 2] | 0;
        k = j + (f * 12 | 0) | 0;
        l = +g[k >> 2];
        m = +g[k + 4 >> 2];
        n = +g[j + (f * 12 | 0) + 8 >> 2];
        f = a + 108 | 0;
        k = c[f >> 2] | 0;
        o = j + (k * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[j +
        (k * 12 | 0) + 8 >> 2];
        s = +g[a + 144 >> 2];
        t = +g[a + 148 >> 2];
        u = +g[a + 152 >> 2];
        v = +g[a + 156 >> 2];
        w = +g[b >> 2];
        b = a + 92 | 0;
        x = +g[b >> 2];
        y = w * +g[a + 100 >> 2];
        z = x - (r - n) * +g[a + 176 >> 2];
        A = -y;
        B = z < y ? z : y;
        y = B < A ? A : B;
        g[b >> 2] = y;
        B = y - x;
        x = n - u * B;
        n = r + v * B;
        B = +g[a + 124 >> 2];
        r = +g[a + 120 >> 2];
        y = +g[a + 116 >> 2];
        A = +g[a + 112 >> 2];
        z = y * x + (p - B * n - l);
        C = q + r * n - m - A * x;
        D = +g[a + 164 >> 2] * z + +g[a + 172 >> 2] * C;
        b = a + 84 | 0;
        k = b;
        E = +g[k >> 2];
        F = +g[k + 4 >> 2];
        G = E - (+g[a + 160 >> 2] * z + +g[a + 168 >> 2] * C);
        g[b >> 2] = G;
        k = a + 88 | 0;
        C = +g[k >> 2] - D;
        g[k >> 2] = C;
        D = w * +g[a + 96 >> 2];
        w = G * G + C * C;
        if (w > D * D) {
            z = +Q(+w);
            if (z < 1.1920928955078125E-7) {
                H =
                G;
                I = C
            } else {
                w = 1 / z;
                z = G * w;
                g[b >> 2] = z;
                J = C * w;
                g[k >> 2] = J;
                H = z;
                I = J
            }
            J = D * H;
            g[b >> 2] = J;
            H = D * I;
            g[k >> 2] = H;
            K = J;
            L = H
        } else {
            K = G;
            L = C
        }
        C = K - E;
        E = L - F;
        F = +(l - s * C);
        l = +(m - s * E);
        k = (c[h >> 2] | 0) + ((c[e >> 2] | 0) * 12 | 0) | 0;
        g[k >> 2] = F;
        g[k + 4 >> 2] = l;
        k = c[h >> 2] | 0;
        g[k + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = x - u * (A * E - C * y);
        y = +(p + t * C);
        p = +(q + t * E);
        e = k + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = y;
        g[e + 4 >> 2] = p;
        g[(c[h >> 2] | 0) + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = n + v * (E * r - C * B);
        i = d;
        return
    }
    function lg(a, b) {
        a = a | 0;
        b = b | 0;
        return 1
    }
    function mg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 48 >> 2] | 0;
        e =
        +g[d + 24 >> 2];
        f = +g[b + 68 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 72 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function ng(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 76 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 80 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function og(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0;
        d = +g[b + 88 >> 2] * c;
        g[a >> 2] = +g[b + 84 >> 2] * c;
        g[a + 4 >> 2] = d;
        return
    }
    function pg(a, b) {
        a = a | 0;
        b = +b;
        return +(+g[a + 92 >> 2] * b)
    }
    function qg(a) {
        a = a | 0;
        var b =
            0,
            e = 0,
            f = 0,
            j = 0,
            l = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) + 8 >> 2] | 0;
        Rm(2016, e);
        c[e >> 2] = f;
        Rm(2048, e);
        c[e >> 2] = j;
        Rm(2080, e);
        c[e >> 2] = d[a + 61 >> 0] | 0;
        Rm(2112, e);
        l = +g[a + 72 >> 2];
        h[k >> 3] = +g[a + 68 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(2152, e);
        l = +g[a + 80 >> 2];
        h[k >> 3] = +g[a + 76 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(2200, e);
        h[k >> 3] = +g[a + 96 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(2248,
        e);
        h[k >> 3] = +g[a + 100 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(2280, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(2312, e);
        i = b;
        return
    }
    function rg(a) {
        a = a | 0;
        return
    }
    function sg(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function tg(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        f = i;
        c[a + 8 >> 2] = b;
        c[a + 12 >> 2] = d;
        h = +g[e >> 2] - +g[b + 12 >> 2];
        j = e + 4 | 0;
        k = +g[j >> 2] - +g[b + 16 >> 2];
        l = +g[b + 24 >> 2];
        m = +g[b + 20 >> 2];
        n = +(h * l + k * m);
        o = +(l * k - h * m);
        p = a + 20 | 0;
        g[p >> 2] = n;
        g[p + 4 >> 2] = o;
        o = +g[e >> 2] - +g[d + 12 >> 2];
        n = +g[j >> 2] - +g[d + 16 >> 2];
        m = +g[d + 24 >> 2];
        h = +g[d + 20 >> 2];
        k = +(o * m + n * h);
        l = +(m * n - o * h);
        j = a + 28 | 0;
        g[j >> 2] = k;
        g[j + 4 >> 2] = l;
        g[a + 36 >> 2] = +g[d + 72 >> 2] - +g[b + 72 >> 2];
        i = f;
        return
    }
    function ug(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0;
        d = i;
        vh(a, b);
        c[a >> 2] = 2408;
        e = b + 20 | 0;
        f = c[e + 4 >> 2] | 0;
        h = a + 80 | 0;
        c[h >> 2] = c[e >> 2];
        c[h + 4 >> 2] = f;
        f = b + 28 | 0;
        h = c[f + 4 >> 2] | 0;
        e = a + 88 | 0;
        c[e >> 2] = c[f >> 2];
        c[e + 4 >> 2] = h;
        g[a + 96 >> 2] = +g[b + 36 >> 2];
        g[a + 68 >> 2] = +g[b + 40 >> 2];
        g[a + 72 >> 2] = +g[b + 44 >> 2];
        g[a + 104 >> 2] = 0;
        g[a + 108 >> 2] = 0;
        g[a + 112 >> 2] = 0;
        i = d;
        return
    }
    function vg(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0;
        e = i;
        i = i + 48 | 0;
        f = e;
        h = c[b + 48 >> 2] | 0;
        j = c[h + 8 >> 2] | 0;
        l = b + 116 | 0;
        c[l >> 2] = j;
        m = c[b + 52 >> 2] | 0;
        n = c[m + 8 >> 2] | 0;
        o = b + 120 | 0;
        c[o >> 2] = n;
        p = h + 44 | 0;
        q = c[p >> 2] | 0;
        r = c[p + 4 >> 2] | 0;
        p = b + 140 | 0;
        c[p >> 2] = q;
        c[p + 4 >> 2] = r;
        p = m + 44 | 0;
        s = c[p >> 2] | 0;
        t = c[p + 4 >> 2] | 0;
        p = b + 148 | 0;
        c[p >> 2] = s;
        c[p + 4 >> 2] = t;
        p = b +
        156 | 0;
        g[p >> 2] = +g[h + 136 >> 2];
        u = +g[m + 136 >> 2];
        g[b + 160 >> 2] = u;
        v = +g[h + 144 >> 2];
        g[b + 164 >> 2] = v;
        w = +g[m + 144 >> 2];
        g[b + 168 >> 2] = w;
        m = c[d + 28 >> 2] | 0;
        x = +g[m + (j * 12 | 0) + 8 >> 2];
        h = d + 32 | 0;
        y = c[h >> 2] | 0;
        z = y + (j * 12 | 0) | 0;
        A = +g[z >> 2];
        B = +g[z + 4 >> 2];
        C = +g[y + (j * 12 | 0) + 8 >> 2];
        D = +g[m + (n * 12 | 0) + 8 >> 2];
        m = y + (n * 12 | 0) | 0;
        E = +g[m >> 2];
        F = +g[m + 4 >> 2];
        G = +g[y + (n * 12 | 0) + 8 >> 2];
        H = +T(+x);
        I = +S(+x);
        J = +T(+D);
        K = +S(+D);
        n = b + 124 | 0;
        L = +g[b + 80 >> 2] - (c[k >> 2] = q, +g[k >> 2]);
        M = +g[b + 84 >> 2] - (c[k >> 2] = r, +g[k >> 2]);
        N = I * L - H * M;
        O = H * L + I * M;
        M = +N;
        I = +O;
        r = n;
        g[r >> 2] = M;
        g[r + 4 >> 2] = I;
        r = b + 132 | 0;
        I = +g[b +
        88 >> 2] - (c[k >> 2] = s, +g[k >> 2]);
        M = +g[b + 92 >> 2] - (c[k >> 2] = t, +g[k >> 2]);
        L = K * I - J * M;
        H = J * I + K * M;
        M = +L;
        K = +H;
        t = r;
        g[t >> 2] = M;
        g[t + 4 >> 2] = K;
        K = +g[p >> 2];
        M = K + u;
        p = b + 128 | 0;
        t = b + 136 | 0;
        g[f >> 2] = M + v * O * O + w * H * H;
        I = -(v * O * N) - w * H * L;
        g[f + 12 >> 2] = I;
        J = -(v * O) - w * H;
        g[f + 24 >> 2] = J;
        g[f + 4 >> 2] = I;
        g[f + 16 >> 2] = M + v * N * N + w * L * L;
        M = v * N + w * L;
        g[f + 28 >> 2] = M;
        g[f + 8 >> 2] = J;
        g[f + 20 >> 2] = M;
        M = v + w;
        g[f + 32 >> 2] = M;
        s = b + 68 | 0;
        q = b + 172 | 0;
        if (+g[s >> 2] > 0) {
            Im(f, q);
            if (M > 0)
                P = 1 / M;
            else
                P = 0;
            J = D - x - +g[b + 96 >> 2];
            x = +g[s >> 2] * 6.2831854820251465;
            D = x * P * x;
            L = +g[d >> 2];
            N = L * (x * P * 2 * +g[b + 72 >> 2] + L * D);
            s = b +
            100 | 0;
            g[s >> 2] = N;
            if (N != 0)
                Q = 1 / N;
            else
                Q = 0;
            g[s >> 2] = Q;
            g[b + 76 >> 2] = J * L * D * Q;
            D = M + Q;
            if (D != 0)
                R = 1 / D;
            else
                R = 0;
            g[b + 204 >> 2] = R
        } else {
            Jm(f, q);
            g[b + 100 >> 2] = 0;
            g[b + 76 >> 2] = 0
        }
        q = b + 104 | 0;
        if ((a[d + 24 >> 0] | 0) == 0) {
            g[q >> 2] = 0;
            g[b + 108 >> 2] = 0;
            g[b + 112 >> 2] = 0;
            U = A;
            V = B;
            W = E;
            X = F;
            Y = C;
            Z = G;
            _ = c[l >> 2] | 0;
            $ = c[h >> 2] | 0;
            aa = $ + (_ * 12 | 0) | 0;
            ba = +U;
            ca = +V;
            da = aa;
            ea = da;
            g[ea >> 2] = ba;
            fa = da + 4 | 0;
            ga = fa;
            g[ga >> 2] = ca;
            ha = c[l >> 2] | 0;
            ia = c[h >> 2] | 0;
            ja = ia + (ha * 12 | 0) + 8 | 0;
            g[ja >> 2] = Y;
            ka = c[o >> 2] | 0;
            la = ia + (ka * 12 | 0) | 0;
            ma = +W;
            na = +X;
            oa = la;
            pa = oa;
            g[pa >> 2] = ma;
            qa = oa + 4 | 0;
            ra = qa;
            g[ra >> 2] = na;
            sa = c[o >> 2] | 0;
            ta = c[h >> 2] | 0;
            ua = ta + (sa * 12 | 0) + 8 | 0;
            g[ua >> 2] = Z;
            i = e;
            return
        } else {
            R = +g[d + 8 >> 2];
            D = R * +g[q >> 2];
            g[q >> 2] = D;
            q = b + 108 | 0;
            Q = R * +g[q >> 2];
            g[q >> 2] = Q;
            q = b + 112 | 0;
            M = R * +g[q >> 2];
            g[q >> 2] = M;
            U = A - K * D;
            V = B - K * Q;
            W = E + u * D;
            X = F + u * Q;
            Y = C - v * (M + (Q * +g[n >> 2] - D * +g[p >> 2]));
            Z = G + w * (M + (Q * +g[r >> 2] - D * +g[t >> 2]));
            _ = c[l >> 2] | 0;
            $ = c[h >> 2] | 0;
            aa = $ + (_ * 12 | 0) | 0;
            ba = +U;
            ca = +V;
            da = aa;
            ea = da;
            g[ea >> 2] = ba;
            fa = da + 4 | 0;
            ga = fa;
            g[ga >> 2] = ca;
            ha = c[l >> 2] | 0;
            ia = c[h >> 2] | 0;
            ja = ia + (ha * 12 | 0) + 8 | 0;
            g[ja >> 2] = Y;
            ka = c[o >> 2] | 0;
            la = ia + (ka * 12 | 0) | 0;
            ma = +W;
            na = +X;
            oa = la;
            pa = oa;
            g[pa >> 2] = ma;
            qa = oa + 4 | 0;
            ra = qa;
            g[ra >> 2] = na;
            sa = c[o >> 2] | 0;
            ta = c[h >> 2] | 0;
            ua = ta + (sa * 12 | 0) + 8 | 0;
            g[ua >> 2] = Z;
            i = e;
            return
        }
    }
    function wg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0;
        d = i;
        e = a + 116 | 0;
        f = c[e >> 2] | 0;
        h = b + 32 | 0;
        b = c[h >> 2] | 0;
        j = b + (f * 12 | 0) | 0;
        k = j;
        l = +g[k >> 2];
        m = +g[k + 4 >> 2];
        n = +g[b + (f * 12 | 0) + 8 >> 2];
        f = a + 120 | 0;
        k = c[f >>
        2] | 0;
        o = b + (k * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[b + (k * 12 | 0) + 8 >> 2];
        s = +g[a + 156 >> 2];
        t = +g[a + 160 >> 2];
        u = +g[a + 164 >> 2];
        v = +g[a + 168 >> 2];
        if (+g[a + 68 >> 2] > 0) {
            k = a + 112 | 0;
            w = +g[k >> 2];
            x = +g[a + 204 >> 2] * (r - n + +g[a + 76 >> 2] + +g[a + 100 >> 2] * w);
            y = -x;
            g[k >> 2] = w - x;
            x = n - u * y;
            w = r + v * y;
            y = +g[a + 136 >> 2];
            z = +g[a + 132 >> 2];
            A = +g[a + 128 >> 2];
            B = +g[a + 124 >> 2];
            C = A * x + (p - y * w - l);
            D = q + z * w - m - B * x;
            E = +g[a + 172 >> 2] * C + +g[a + 184 >> 2] * D;
            F = +g[a + 176 >> 2] * C + +g[a + 188 >> 2] * D;
            D = -E;
            C = -F;
            k = a + 104 | 0;
            g[k >> 2] = +g[k >> 2] - E;
            k = a + 108 | 0;
            g[k >> 2] = +g[k >> 2] - F;
            G = C;
            H = D;
            I = x - u * (B * C - A * D);
            J = w + v *
            (z * C - y * D);
            K = t * H;
            L = t * G;
            M = s * H;
            N = s * G;
            O = p + K;
            P = q + L;
            Q = l - M;
            R = m - N;
            S = +Q;
            T = +R;
            U = j;
            V = U;
            g[V >> 2] = S;
            W = U + 4 | 0;
            X = W;
            g[X >> 2] = T;
            Y = c[e >> 2] | 0;
            Z = c[h >> 2] | 0;
            _ = Z + (Y * 12 | 0) + 8 | 0;
            g[_ >> 2] = I;
            $ = c[f >> 2] | 0;
            aa = Z + ($ * 12 | 0) | 0;
            ba = +O;
            ca = +P;
            da = aa;
            ea = da;
            g[ea >> 2] = ba;
            fa = da + 4 | 0;
            ga = fa;
            g[ga >> 2] = ca;
            ha = c[f >> 2] | 0;
            ia = c[h >> 2] | 0;
            ja = ia + (ha * 12 | 0) + 8 | 0;
            g[ja >> 2] = J;
            i = d;
            return
        } else {
            D = +g[a + 136 >> 2];
            y = +g[a + 132 >> 2];
            C = +g[a + 128 >> 2];
            z = +g[a + 124 >> 2];
            w = p - r * D - l + n * C;
            A = q + r * y - m - n * z;
            B = r - n;
            x = w * +g[a + 172 >> 2] + A * +g[a + 184 >> 2] + B * +g[a + 196 >> 2];
            F = w * +g[a + 176 >> 2] + A * +g[a + 188 >> 2] + B * +g[a +
            200 >> 2];
            E = w * +g[a + 180 >> 2] + A * +g[a + 192 >> 2] + B * +g[a + 204 >> 2];
            B = -x;
            A = -F;
            k = a + 104 | 0;
            g[k >> 2] = +g[k >> 2] - x;
            k = a + 108 | 0;
            g[k >> 2] = +g[k >> 2] - F;
            k = a + 112 | 0;
            g[k >> 2] = +g[k >> 2] - E;
            G = A;
            H = B;
            I = n - u * (z * A - C * B - E);
            J = r + v * (y * A - D * B - E);
            K = t * H;
            L = t * G;
            M = s * H;
            N = s * G;
            O = p + K;
            P = q + L;
            Q = l - M;
            R = m - N;
            S = +Q;
            T = +R;
            U = j;
            V = U;
            g[V >> 2] = S;
            W = U + 4 | 0;
            X = W;
            g[X >> 2] = T;
            Y = c[e >> 2] | 0;
            Z = c[h >> 2] | 0;
            _ = Z + (Y * 12 | 0) + 8 | 0;
            g[_ >> 2] = I;
            $ = c[f >> 2] | 0;
            aa = Z + ($ * 12 | 0) | 0;
            ba = +O;
            ca = +P;
            da = aa;
            ea = da;
            g[ea >> 2] = ba;
            fa = da + 4 | 0;
            ga = fa;
            g[ga >> 2] = ca;
            ha = c[f >> 2] | 0;
            ia = c[h >> 2] | 0;
            ja = ia + (ha * 12 | 0) + 8 | 0;
            g[ja >> 2] = J;
            i = d;
            return
        }
    }
    function xg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0;
        d = i;
        i = i + 80 | 0;
        e = d + 40 | 0;
        f = d + 32 | 0;
        h = d + 24 | 0;
        j = d + 12 | 0;
        k = d;
        l = a + 116 | 0;
        m = c[l >> 2] | 0;
        n = b + 28 | 0;
        b = c[n >> 2] | 0;
        o = b + (m * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[b + (m * 12 | 0) + 8 >> 2];
        m = a + 120 | 0;
        o = c[m >> 2] | 0;
        s = b + (o * 12 | 0) | 0;
        t = +g[s >> 2];
        u = +g[s + 4 >> 2];
        v = +g[b + (o * 12 | 0) + 8 >> 2];
        w = +T(+r);
        x = +S(+r);
        y = +T(+v);
        z = +S(+v);
        A = +g[a + 156 >> 2];
        B = +g[a + 160 >> 2];
        C = +g[a + 164 >>
        2];
        D = +g[a + 168 >> 2];
        E = +g[a + 80 >> 2] - +g[a + 140 >> 2];
        F = +g[a + 84 >> 2] - +g[a + 144 >> 2];
        G = x * E - w * F;
        H = w * E + x * F;
        F = +g[a + 88 >> 2] - +g[a + 148 >> 2];
        x = +g[a + 92 >> 2] - +g[a + 152 >> 2];
        E = z * F - y * x;
        w = y * F + z * x;
        x = A + B;
        g[e >> 2] = x + C * H * H + D * w * w;
        z = -(C * H * G) - D * w * E;
        g[e + 12 >> 2] = z;
        F = -(C * H) - D * w;
        g[e + 24 >> 2] = F;
        g[e + 4 >> 2] = z;
        g[e + 16 >> 2] = x + C * G * G + D * E * E;
        x = C * G + D * E;
        g[e + 28 >> 2] = x;
        g[e + 8 >> 2] = F;
        g[e + 20 >> 2] = x;
        g[e + 32 >> 2] = C + D;
        x = t + E - p - G;
        F = u + w - q - H;
        if (+g[a + 68 >> 2] > 0) {
            g[f >> 2] = x;
            g[f + 4 >> 2] = F;
            z = +Q(+(F * F + x * x));
            Hm(h, e, f);
            y = -+g[h >> 2];
            I = -+g[h + 4 >> 2];
            J = I;
            K = y;
            L = E * I - w * y;
            M = G * I - H * y;
            N = 0;
            O = z
        } else {
            z =
            v - r - +g[a + 96 >> 2];
            y = +Q(+(x * x + F * F));
            if (z > 0)
                P = z;
            else
                P = -z;
            g[j >> 2] = x;
            g[j + 4 >> 2] = F;
            g[j + 8 >> 2] = z;
            Gm(k, e, j);
            z = -+g[k >> 2];
            F = -+g[k + 4 >> 2];
            x = +g[k + 8 >> 2];
            J = F;
            K = z;
            L = E * F - w * z - x;
            M = G * F - H * z - x;
            N = P;
            O = y
        }
        y = +(p - A * K);
        p = +(q - A * J);
        k = (c[n >> 2] | 0) + ((c[l >> 2] | 0) * 12 | 0) | 0;
        g[k >> 2] = y;
        g[k + 4 >> 2] = p;
        k = c[n >> 2] | 0;
        g[k + ((c[l >> 2] | 0) * 12 | 0) + 8 >> 2] = r - C * M;
        M = +(t + B * K);
        K = +(u + B * J);
        l = k + ((c[m >> 2] | 0) * 12 | 0) | 0;
        g[l >> 2] = M;
        g[l + 4 >> 2] = K;
        g[(c[n >> 2] | 0) + ((c[m >> 2] | 0) * 12 | 0) + 8 >> 2] = v + D * L;
        if (!(O <= .004999999888241291)) {
            R = 0;
            i = d;
            return R | 0
        }
        R = N <= .03490658849477768;
        i = d;
        return R |
        0
    }
    function yg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 48 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 80 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 84 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function zg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 88 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 92 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Ag(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0;
        d = +g[b + 108 >> 2] * c;
        g[a >> 2] = +g[b + 104 >> 2] * c;
        g[a + 4 >> 2] = d;
        return
    }
    function Bg(a, b) {
        a = a | 0;
        b = +b;
        return +(+g[a + 112 >> 2] * b)
    }
    function Cg(a) {
        a = a | 0;
        var b = 0,
            e = 0,
            f = 0,
            j = 0,
            l = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) + 8 >> 2] | 0;
        Rm(2456, e);
        c[e >> 2] = f;
        Rm(2480, e);
        c[e >> 2] = j;
        Rm(2512, e);
        c[e >> 2] = d[a + 61 >> 0] | 0;
        Rm(2544, e);
        l = +g[a + 84 >> 2];
        h[k >> 3] = +g[a + 80 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(2584, e);
        l = +g[a + 92 >> 2];
        h[k >> 3] = +g[a + 88 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] =
        c[k + 4 >> 2];
        Rm(2632, e);
        h[k >> 3] = +g[a + 96 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(2680, e);
        h[k >> 3] = +g[a + 68 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(2712, e);
        h[k >> 3] = +g[a + 72 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(2744, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(2776, e);
        i = b;
        return
    }
    function Dg(a) {
        a = a | 0;
        return
    }
    function Eg(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Fg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0;
        d = i;
        vh(a, b);
        c[a >> 2] = 2864;
        e = a + 92 | 0;
        f = a + 100 | 0;
        h = a + 108 | 0;
        j = a + 116 | 0;
        l = a + 124 | 0;
        m = a + 132 | 0;
        n = b + 20 | 0;
        o = c[n >> 2] | 0;
        c[a + 68 >> 2] = o;
        p = b + 24 | 0;
        q = c[p >> 2] | 0;
        c[a + 72 >> 2] = q;
        r = c[o + 4 >> 2] | 0;
        c[a + 76 >> 2] = r;
        s = c[q + 4 >> 2] | 0;
        c[a + 80 >> 2] = s;
        t = c[o + 48 >> 2] | 0;
        c[a + 84 >> 2] = t;
        u = c[o + 52 >> 2] | 0;
        c[a + 48 >> 2] = u;
        v = +g[u + 20 >> 2];
        w = +g[u + 24 >> 2];
        x = +g[t + 20 >> 2];
        y = +g[t + 24 >> 2];
        o = c[n >> 2] | 0;
        if ((r | 0) == 1) {
            z = +g[u + 72 >> 2];
            A = +g[t + 72 >> 2];
            r = o + 68 | 0;
            n = c[r + 4 >> 2] | 0;
            B = h;
            c[B >> 2] = c[r >> 2];
            c[B + 4 >> 2] = n;
            n = o + 76 | 0;
            B = c[n + 4 >> 2] | 0;
            r = e;
            c[r >> 2] = c[n >> 2];
            c[r + 4 >> 2] =
            B;
            C = +g[o + 116 >> 2];
            g[a + 140 >> 2] = C;
            g[l >> 2] = 0;
            g[a + 128 >> 2] = 0;
            D = z - A - C
        } else {
            C = +g[t + 16 >> 2];
            A = +g[t + 12 >> 2];
            z = +g[u + 16 >> 2];
            E = +g[u + 12 >> 2];
            u = o + 68 | 0;
            t = c[u >> 2] | 0;
            B = c[u + 4 >> 2] | 0;
            u = h;
            c[u >> 2] = t;
            c[u + 4 >> 2] = B;
            u = o + 76 | 0;
            h = c[u >> 2] | 0;
            r = c[u + 4 >> 2] | 0;
            u = e;
            c[u >> 2] = h;
            c[u + 4 >> 2] = r;
            g[a + 140 >> 2] = +g[o + 100 >> 2];
            u = o + 84 | 0;
            o = c[u >> 2] | 0;
            e = c[u + 4 >> 2] | 0;
            u = l;
            c[u >> 2] = o;
            c[u + 4 >> 2] = e;
            F = (c[k >> 2] = t, +g[k >> 2]);
            G = (c[k >> 2] = B, +g[k >> 2]);
            H = (c[k >> 2] = h, +g[k >> 2]);
            I = (c[k >> 2] = r, +g[k >> 2]);
            J = E - A + (w * H - v * I);
            A = z - C + (v * H + w * I);
            I = (c[k >> 2] = o, +g[k >> 2]) * (y * J + x * A - F);
            D = I + (c[k >>
            2] = e, +g[k >> 2]) * (y * A - x * J - G)
        }
        e = c[q + 48 >> 2] | 0;
        c[a + 88 >> 2] = e;
        o = c[q + 52 >> 2] | 0;
        c[a + 52 >> 2] = o;
        G = +g[o + 20 >> 2];
        J = +g[o + 24 >> 2];
        x = +g[e + 20 >> 2];
        A = +g[e + 24 >> 2];
        q = c[p >> 2] | 0;
        if ((s | 0) == 1) {
            y = +g[o + 72 >> 2];
            I = +g[e + 72 >> 2];
            s = q + 68 | 0;
            p = c[s + 4 >> 2] | 0;
            r = j;
            c[r >> 2] = c[s >> 2];
            c[r + 4 >> 2] = p;
            p = q + 76 | 0;
            r = c[p + 4 >> 2] | 0;
            s = f;
            c[s >> 2] = c[p >> 2];
            c[s + 4 >> 2] = r;
            F = +g[q + 116 >> 2];
            g[a + 144 >> 2] = F;
            g[m >> 2] = 0;
            g[a + 136 >> 2] = 0;
            K = y - I - F;
            L = b + 28 | 0;
            M = +g[L >> 2];
            N = a + 152 | 0;
            g[N >> 2] = M;
            O = K * M;
            P = D + O;
            Q = a + 148 | 0;
            g[Q >> 2] = P;
            R = a + 156 | 0;
            g[R >> 2] = 0;
            i = d;
            return
        } else {
            F = +g[e + 16 >> 2];
            I = +g[e + 12 >> 2];
            y =
            +g[o + 16 >> 2];
            w = +g[o + 12 >> 2];
            o = q + 68 | 0;
            e = c[o >> 2] | 0;
            r = c[o + 4 >> 2] | 0;
            o = j;
            c[o >> 2] = e;
            c[o + 4 >> 2] = r;
            o = q + 76 | 0;
            j = c[o >> 2] | 0;
            s = c[o + 4 >> 2] | 0;
            o = f;
            c[o >> 2] = j;
            c[o + 4 >> 2] = s;
            g[a + 144 >> 2] = +g[q + 100 >> 2];
            o = q + 84 | 0;
            q = c[o >> 2] | 0;
            f = c[o + 4 >> 2] | 0;
            o = m;
            c[o >> 2] = q;
            c[o + 4 >> 2] = f;
            H = (c[k >> 2] = e, +g[k >> 2]);
            v = (c[k >> 2] = r, +g[k >> 2]);
            C = (c[k >> 2] = j, +g[k >> 2]);
            z = (c[k >> 2] = s, +g[k >> 2]);
            E = w - I + (J * C - G * z);
            I = y - F + (G * C + J * z);
            z = (c[k >> 2] = q, +g[k >> 2]) * (A * E + x * I - H);
            K = z + (c[k >> 2] = f, +g[k >> 2]) * (A * I - x * E - v);
            L = b + 28 | 0;
            M = +g[L >> 2];
            N = a + 152 | 0;
            g[N >> 2] = M;
            O = K * M;
            P = D + O;
            Q = a + 148 | 0;
            g[Q >> 2] = P;
            R = a + 156 | 0;
            g[R >> 2] = 0;
            i = d;
            return
        }
    }
    function Gg(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Da = 0,
            Ea = 0,
            Fa = 0,
            Ga = 0,
            Ha = 0,
            Ia = 0,
            Ja = 0,
            Ka = 0,
            La = 0,
            Ma = 0,
            Na = 0,
            Oa = 0,
            Pa = 0,
            Qa = 0,
            Ra = 0,
            Sa = 0,
            Ta = 0,
            Ua = 0,
            Va = 0,
            Wa = 0,
            Xa = 0,
            Ya = 0,
            Za =
            0,
            _a = 0,
            $a = 0,
            ab = 0,
            bb = 0,
            cb = 0,
            db = 0,
            eb = 0,
            fb = 0,
            gb = 0,
            hb = 0,
            ib = 0,
            jb = 0,
            kb = 0,
            lb = 0,
            mb = 0,
            nb = 0,
            ob = 0,
            pb = 0,
            qb = 0,
            rb = 0,
            sb = 0,
            tb = 0,
            ub = 0,
            vb = 0,
            wb = 0,
            xb = 0,
            yb = 0;
        e = i;
        f = c[b + 48 >> 2] | 0;
        h = c[f + 8 >> 2] | 0;
        j = b + 160 | 0;
        c[j >> 2] = h;
        l = c[b + 52 >> 2] | 0;
        m = c[l + 8 >> 2] | 0;
        n = b + 164 | 0;
        c[n >> 2] = m;
        o = c[b + 84 >> 2] | 0;
        p = c[o + 8 >> 2] | 0;
        q = b + 168 | 0;
        c[q >> 2] = p;
        r = c[b + 88 >> 2] | 0;
        s = c[r + 8 >> 2] | 0;
        t = b + 172 | 0;
        c[t >> 2] = s;
        u = b + 176 | 0;
        v = f + 44 | 0;
        w = c[v + 4 >> 2] | 0;
        x = u;
        c[x >> 2] = c[v >> 2];
        c[x + 4 >> 2] = w;
        w = b + 184 | 0;
        x = l + 44 | 0;
        v = c[x + 4 >> 2] | 0;
        y = w;
        c[y >> 2] = c[x >> 2];
        c[y + 4 >> 2] = v;
        v = b + 192 | 0;
        y = o + 44 | 0;
        x = c[y + 4 >> 2] | 0;
        z =
        v;
        c[z >> 2] = c[y >> 2];
        c[z + 4 >> 2] = x;
        x = r + 44 | 0;
        z = c[x >> 2] | 0;
        y = c[x + 4 >> 2] | 0;
        x = b + 200 | 0;
        c[x >> 2] = z;
        c[x + 4 >> 2] = y;
        A = +g[f + 136 >> 2];
        g[b + 208 >> 2] = A;
        B = +g[l + 136 >> 2];
        g[b + 212 >> 2] = B;
        C = +g[o + 136 >> 2];
        g[b + 216 >> 2] = C;
        D = +g[r + 136 >> 2];
        g[b + 220 >> 2] = D;
        E = +g[f + 144 >> 2];
        g[b + 224 >> 2] = E;
        F = +g[l + 144 >> 2];
        g[b + 228 >> 2] = F;
        G = +g[o + 144 >> 2];
        g[b + 232 >> 2] = G;
        H = +g[r + 144 >> 2];
        g[b + 236 >> 2] = H;
        r = c[d + 28 >> 2] | 0;
        I = +g[r + (h * 12 | 0) + 8 >> 2];
        o = d + 32 | 0;
        l = c[o >> 2] | 0;
        f = l + (h * 12 | 0) | 0;
        J = +g[f >> 2];
        K = +g[f + 4 >> 2];
        L = +g[l + (h * 12 | 0) + 8 >> 2];
        M = +g[r + (m * 12 | 0) + 8 >> 2];
        h = l + (m * 12 | 0) | 0;
        N = +g[h >> 2];
        O = +g[h +
        4 >> 2];
        P = +g[l + (m * 12 | 0) + 8 >> 2];
        Q = +g[r + (p * 12 | 0) + 8 >> 2];
        m = l + (p * 12 | 0) | 0;
        R = +g[m >> 2];
        U = +g[m + 4 >> 2];
        V = +g[l + (p * 12 | 0) + 8 >> 2];
        W = +g[r + (s * 12 | 0) + 8 >> 2];
        r = l + (s * 12 | 0) | 0;
        X = +g[r >> 2];
        Y = +g[r + 4 >> 2];
        Z = +g[l + (s * 12 | 0) + 8 >> 2];
        _ = +T(+I);
        $ = +S(+I);
        I = +T(+M);
        aa = +S(+M);
        M = +T(+Q);
        ba = +S(+Q);
        Q = +T(+W);
        ca = +S(+W);
        s = b + 272 | 0;
        g[s >> 2] = 0;
        W = (c[k >> 2] = z, +g[k >> 2]);
        if ((c[b + 76 >> 2] | 0) == 1) {
            g[b + 240 >> 2] = 0;
            g[b + 244 >> 2] = 0;
            g[b + 256 >> 2] = 1;
            g[b + 264 >> 2] = 1;
            da = E + G;
            ea = 0;
            fa = 0;
            ga = 1;
            ha = 1
        } else {
            ia = +g[b + 124 >> 2];
            ja = +g[b + 128 >> 2];
            ka = ba * ia - M * ja;
            la = M * ia + ba * ja;
            ja = +g[b + 108 >> 2] - +g[v >>
            2];
            ia = +g[b + 112 >> 2] - +g[b + 196 >> 2];
            ma = +g[b + 92 >> 2] - +g[u >> 2];
            na = +g[b + 96 >> 2] - +g[b + 180 >> 2];
            oa = +ka;
            pa = +la;
            u = b + 240 | 0;
            g[u >> 2] = oa;
            g[u + 4 >> 2] = pa;
            pa = la * (ba * ja - M * ia) - ka * (M * ja + ba * ia);
            g[b + 264 >> 2] = pa;
            ia = la * ($ * ma - _ * na) - ka * (_ * ma + $ * na);
            g[b + 256 >> 2] = ia;
            da = C + A + pa * G * pa + ia * E * ia;
            ea = ka;
            fa = la;
            ga = ia;
            ha = pa
        }
        pa = da + 0;
        g[s >> 2] = pa;
        if ((c[b + 80 >> 2] | 0) == 1) {
            g[b + 248 >> 2] = 0;
            g[b + 252 >> 2] = 0;
            da = +g[b + 152 >> 2];
            g[b + 260 >> 2] = da;
            g[b + 268 >> 2] = da;
            qa = da * da * (F + H);
            ra = 0;
            sa = 0;
            ta = da;
            ua = da
        } else {
            da = +g[b + 132 >> 2];
            ia = +g[b + 136 >> 2];
            la = ca * da - Q * ia;
            ka = Q * da + ca * ia;
            ia = +g[b +
            116 >> 2] - W;
            W = +g[b + 120 >> 2] - +g[b + 204 >> 2];
            da = +g[b + 100 >> 2] - +g[w >> 2];
            na = +g[b + 104 >> 2] - +g[b + 188 >> 2];
            $ = +g[b + 152 >> 2];
            ma = la * $;
            _ = ka * $;
            ba = +ma;
            ja = +_;
            w = b + 248 | 0;
            g[w >> 2] = ba;
            g[w + 4 >> 2] = ja;
            ja = (ka * (ca * ia - Q * W) - la * (Q * ia + ca * W)) * $;
            g[b + 268 >> 2] = ja;
            W = $ * (ka * (aa * da - I * na) - la * (I * da + aa * na));
            g[b + 260 >> 2] = W;
            qa = $ * $ * (D + B) + ja * H * ja + W * W * F;
            ra = ma;
            sa = _;
            ta = W;
            ua = ja
        }
        ja = pa + qa;
        g[s >> 2] = ja;
        if (ja > 0)
            va = 1 / ja;
        else
            va = 0;
        g[s >> 2] = va;
        s = b + 156 | 0;
        if ((a[d + 24 >> 0] | 0) == 0) {
            g[s >> 2] = 0;
            wa = J;
            xa = K;
            ya = N;
            za = O;
            Aa = R;
            Ba = U;
            Ca = X;
            Da = Y;
            Ea = L;
            Fa = P;
            Ga = V;
            Ha = Z;
            Ia = c[j >> 2] | 0;
            Ja = c[o >>
            2] | 0;
            Ka = Ja + (Ia * 12 | 0) | 0;
            La = +wa;
            Ma = +xa;
            Na = Ka;
            Oa = Na;
            g[Oa >> 2] = La;
            Pa = Na + 4 | 0;
            Qa = Pa;
            g[Qa >> 2] = Ma;
            Ra = c[j >> 2] | 0;
            Sa = c[o >> 2] | 0;
            Ta = Sa + (Ra * 12 | 0) + 8 | 0;
            g[Ta >> 2] = Ea;
            Ua = c[n >> 2] | 0;
            Va = Sa + (Ua * 12 | 0) | 0;
            Wa = +ya;
            Xa = +za;
            Ya = Va;
            Za = Ya;
            g[Za >> 2] = Wa;
            _a = Ya + 4 | 0;
            $a = _a;
            g[$a >> 2] = Xa;
            ab = c[n >> 2] | 0;
            bb = c[o >> 2] | 0;
            cb = bb + (ab * 12 | 0) + 8 | 0;
            g[cb >> 2] = Fa;
            db = c[q >> 2] | 0;
            eb = bb + (db * 12 | 0) | 0;
            fb = +Aa;
            gb = +Ba;
            hb = eb;
            ib = hb;
            g[ib >> 2] = fb;
            jb = hb + 4 | 0;
            kb = jb;
            g[kb >> 2] = gb;
            lb = c[q >> 2] | 0;
            mb = c[o >> 2] | 0;
            nb = mb + (lb * 12 | 0) + 8 | 0;
            g[nb >> 2] = Ga;
            ob = c[t >> 2] | 0;
            pb = mb + (ob * 12 | 0) | 0;
            qb = +Ca;
            rb = +Da;
            sb = pb;
            tb = sb;
            g[tb >> 2] = qb;
            ub = sb + 4 | 0;
            vb = ub;
            g[vb >> 2] = rb;
            wb = c[t >> 2] | 0;
            xb = c[o >> 2] | 0;
            yb = xb + (wb * 12 | 0) + 8 | 0;
            g[yb >> 2] = Ha;
            i = e;
            return
        } else {
            va = +g[s >> 2];
            ja = A * va;
            A = va * B;
            B = va * C;
            C = va * D;
            wa = J + ea * ja;
            xa = K + ja * fa;
            ya = N + ra * A;
            za = O + A * sa;
            Aa = R - ea * B;
            Ba = U - fa * B;
            Ca = X - ra * C;
            Da = Y - sa * C;
            Ea = L + va * E * ga;
            Fa = P + va * F * ta;
            Ga = V - va * G * ha;
            Ha = Z - va * H * ua;
            Ia = c[j >> 2] | 0;
            Ja = c[o >> 2] | 0;
            Ka = Ja + (Ia * 12 | 0) | 0;
            La = +wa;
            Ma = +xa;
            Na = Ka;
            Oa = Na;
            g[Oa >> 2] = La;
            Pa = Na + 4 | 0;
            Qa = Pa;
            g[Qa >> 2] = Ma;
            Ra = c[j >> 2] | 0;
            Sa = c[o >> 2] | 0;
            Ta = Sa + (Ra * 12 | 0) + 8 | 0;
            g[Ta >> 2] = Ea;
            Ua = c[n >> 2] | 0;
            Va = Sa + (Ua * 12 | 0) | 0;
            Wa =
            +ya;
            Xa = +za;
            Ya = Va;
            Za = Ya;
            g[Za >> 2] = Wa;
            _a = Ya + 4 | 0;
            $a = _a;
            g[$a >> 2] = Xa;
            ab = c[n >> 2] | 0;
            bb = c[o >> 2] | 0;
            cb = bb + (ab * 12 | 0) + 8 | 0;
            g[cb >> 2] = Fa;
            db = c[q >> 2] | 0;
            eb = bb + (db * 12 | 0) | 0;
            fb = +Aa;
            gb = +Ba;
            hb = eb;
            ib = hb;
            g[ib >> 2] = fb;
            jb = hb + 4 | 0;
            kb = jb;
            g[kb >> 2] = gb;
            lb = c[q >> 2] | 0;
            mb = c[o >> 2] | 0;
            nb = mb + (lb * 12 | 0) + 8 | 0;
            g[nb >> 2] = Ga;
            ob = c[t >> 2] | 0;
            pb = mb + (ob * 12 | 0) | 0;
            qb = +Ca;
            rb = +Da;
            sb = pb;
            tb = sb;
            g[tb >> 2] = qb;
            ub = sb + 4 | 0;
            vb = ub;
            g[vb >> 2] = rb;
            wb = c[t >> 2] | 0;
            xb = c[o >> 2] | 0;
            yb = xb + (wb * 12 | 0) + 8 | 0;
            g[yb >> 2] = Ha;
            i = e;
            return
        }
    }
    function Hg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l =
            0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0;
        d = i;
        e = a + 160 | 0;
        f = c[e >> 2] | 0;
        h = b + 32 | 0;
        b = c[h >> 2] | 0;
        j = b + (f * 12 | 0) | 0;
        k = +g[j >> 2];
        l = +g[j + 4 >> 2];
        m = +g[b + (f * 12 | 0) + 8 >> 2];
        f = a + 164 | 0;
        j = c[f >> 2] | 0;
        n = b + (j * 12 | 0) | 0;
        o = +g[n >> 2];
        p = +g[n + 4 >> 2];
        q = +g[b + (j * 12 | 0) + 8 >> 2];
        j = a + 168 | 0;
        n = c[j >> 2] | 0;
        r = b + (n * 12 | 0) | 0;
        s = +g[r >> 2];
        t = +g[r + 4 >> 2];
        u = +g[b + (n * 12 | 0) + 8 >> 2];
        n = a + 172 | 0;
        r = c[n >> 2] | 0;
        v = b + (r * 12 | 0) | 0;
        w = +g[v >> 2];
        x = +g[v + 4 >> 2];
        y = +g[b + (r * 12 | 0) + 8 >> 2];
        z = +g[a + 240 >> 2];
        A = +g[a + 244 >> 2];
        B = +g[a + 248 >> 2];
        C =
        +g[a + 252 >> 2];
        D = +g[a + 256 >> 2];
        E = +g[a + 264 >> 2];
        F = +g[a + 260 >> 2];
        G = +g[a + 268 >> 2];
        H = +g[a + 272 >> 2] * ((k - s) * z + (l - t) * A + ((o - w) * B + (p - x) * C) + (m * D - u * E + (q * F - y * G)));
        I = -H;
        r = a + 156 | 0;
        g[r >> 2] = +g[r >> 2] - H;
        H = +g[a + 208 >> 2] * I;
        J = m + +g[a + 224 >> 2] * I * D;
        D = +g[a + 212 >> 2] * I;
        m = q + +g[a + 228 >> 2] * I * F;
        F = +g[a + 216 >> 2] * I;
        q = u - +g[a + 232 >> 2] * I * E;
        E = +g[a + 220 >> 2] * I;
        u = y - +g[a + 236 >> 2] * I * G;
        G = +(k + z * H);
        k = +(l + A * H);
        a = (c[h >> 2] | 0) + ((c[e >> 2] | 0) * 12 | 0) | 0;
        g[a >> 2] = G;
        g[a + 4 >> 2] = k;
        a = c[h >> 2] | 0;
        g[a + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = J;
        J = +(o + B * D);
        o = +(p + D * C);
        e = a + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = J;
        g[e + 4 >> 2] = o;
        e = c[h >> 2] | 0;
        g[e + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = m;
        m = +(s - z * F);
        z = +(t - A * F);
        f = e + ((c[j >> 2] | 0) * 12 | 0) | 0;
        g[f >> 2] = m;
        g[f + 4 >> 2] = z;
        f = c[h >> 2] | 0;
        g[f + ((c[j >> 2] | 0) * 12 | 0) + 8 >> 2] = q;
        q = +(w - B * E);
        B = +(x - C * E);
        j = f + ((c[n >> 2] | 0) * 12 | 0) | 0;
        g[j >> 2] = q;
        g[j + 4 >> 2] = B;
        g[(c[h >> 2] | 0) + ((c[n >> 2] | 0) * 12 | 0) + 8 >> 2] = u;
        i = d;
        return
    }
    function Ig(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X =
            0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0;
        d = i;
        e = a + 160 | 0;
        f = c[e >> 2] | 0;
        h = b + 28 | 0;
        b = c[h >> 2] | 0;
        j = b + (f * 12 | 0) | 0;
        k = j;
        l = +g[k >> 2];
        m = +g[k + 4 >> 2];
        n = +g[b + (f * 12 | 0) + 8 >> 2];
        f = a + 164 | 0;
        k = c[f >> 2] | 0;
        o = b + (k * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[b + (k * 12 | 0) + 8 >> 2];
        k = a + 168 | 0;
        o = c[k >> 2] | 0;
        s = b + (o * 12 | 0) | 0;
        t = +g[s >> 2];
        u = +g[s + 4 >> 2];
        v = +g[b + (o * 12 | 0) + 8 >> 2];
        o = a + 172 | 0;
        s = c[o >> 2] | 0;
        w = b + (s * 12 | 0) | 0;
        x = +g[w >> 2];
        y = +g[w + 4 >> 2];
        z = +g[b + (s * 12 | 0) + 8 >> 2];
        A = +T(+n);
        B = +S(+n);
        C = +T(+r);
        D = +S(+r);
        E = +T(+v);
        F = +S(+v);
        G = +T(+z);
        H = +S(+z);
        if ((c[a + 76 >> 2] | 0) == 1) {
            I = +g[a + 224 >> 2];
            J = +g[a + 232 >> 2];
            K = 0;
            L = 0;
            M = I;
            N = J;
            O = 1;
            P = 1;
            Q = n - v - +g[a + 140 >> 2];
            R = I + J
        } else {
            J = +g[a + 124 >> 2];
            I = +g[a + 128 >> 2];
            U = F * J - E * I;
            V = E * J + F * I;
            W = +g[a + 108 >> 2] - +g[a + 192 >> 2];
            X = +g[a + 112 >> 2] - +g[a + 196 >> 2];
            Y = +g[a + 92 >> 2] - +g[a + 176 >> 2];
            Z = +g[a + 96 >> 2] - +g[a + 180 >> 2];
            _ = B * Y - A * Z;
            $ = A * Y + B * Z;
            Z = V * (F * W - E * X) - U * (E * W + F * X);
            B = V * _ - U * $;
            Y = +g[a + 232 >> 2];
            A = +g[a + 224 >> 2];
            aa = l - t + _;
            _ = m - u + $;
            K = U;
            L = V;
            M = A;
            N = Y;
            O = B;
            P = Z;
            Q = J * (F * aa + E * _ - W) + I * (F * _ - E * aa - X);
            R = +g[a + 216 >> 2] + +g[a + 208 >> 2] + Z * Z * Y + B * A * B
        }
        if ((c[a + 80 >> 2] | 0) == 1) {
            B = +g[a + 152 >> 2];
            A = +g[a + 228 >> 2];
            Y = +g[a + 236 >> 2];
            ba = B * B * (A + Y);
            ca = B;
            da = 0;
            ea = 0;
            fa = A;
            ga = Y;
            ha = B;
            ia = B;
            ja = r - z - +g[a + 144 >> 2]
        } else {
            B = +g[a + 132 >> 2];
            Y = +g[a + 136 >> 2];
            A = H * B - G * Y;
            Z = G * B + H * Y;
            X = +g[a + 116 >> 2] - +g[a + 200 >> 2];
            aa = +g[a + 120 >> 2] - +g[a + 204 >> 2];
            E = +g[a + 100 >> 2] - +g[a + 184 >> 2];
            _ = +g[a + 104 >> 2] - +g[a + 188 >> 2];
            F = D * E - C * _;
            I = C * E + D * _;
            _ = +g[a + 152 >> 2];
            D = _ * (Z * (H * X - G * aa) - A * (G * X + H * aa));
            E = _ * (Z * F - A * I);
            C = +g[a + 236 >> 2];
            W = +g[a + 228 >> 2];
            J = p - x + F;
            F = q - y + I;
            ba = _ * _ * (+g[a + 220 >> 2] + +g[a + 212 >> 2]) + D * D * C + E * W * E;
            ca = _;
            da = A * _;
            ea = Z * _;
            fa = W;
            ga = C;
            ha = E;
            ia = D;
            ja = B * (H * J + G * F - X) + Y * (H *
            F - G * J - aa)
        }
        aa = R + 0 + ba;
        if (aa > 0)
            ka = -(Q + ja * ca - +g[a + 148 >> 2]) / aa;
        else
            ka = 0;
        aa = ka * +g[a + 208 >> 2];
        ca = ka * +g[a + 212 >> 2];
        ja = ka * +g[a + 216 >> 2];
        Q = ka * +g[a + 220 >> 2];
        ba = +(l + K * aa);
        l = +(m + L * aa);
        a = j;
        g[a >> 2] = ba;
        g[a + 4 >> 2] = l;
        a = c[h >> 2] | 0;
        g[a + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = n + O * ka * M;
        M = +(p + da * ca);
        p = +(q + ea * ca);
        e = a + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = M;
        g[e + 4 >> 2] = p;
        e = c[h >> 2] | 0;
        g[e + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = r + ha * ka * fa;
        fa = +(t - K * ja);
        K = +(u - L * ja);
        f = e + ((c[k >> 2] | 0) * 12 | 0) | 0;
        g[f >> 2] = fa;
        g[f + 4 >> 2] = K;
        f = c[h >> 2] | 0;
        g[f + ((c[k >> 2] | 0) * 12 | 0) + 8 >> 2] = v - P * ka * N;
        N = +(x - da *
        Q);
        da = +(y - ea * Q);
        k = f + ((c[o >> 2] | 0) * 12 | 0) | 0;
        g[k >> 2] = N;
        g[k + 4 >> 2] = da;
        g[(c[h >> 2] | 0) + ((c[o >> 2] | 0) * 12 | 0) + 8 >> 2] = z - ia * ka * ga;
        i = d;
        return 1
    }
    function Jg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 48 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 92 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 96 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Kg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 100 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 104 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e *
        f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Lg(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0,
            e = 0;
        d = +g[b + 156 >> 2];
        e = d * +g[b + 244 >> 2] * c;
        g[a >> 2] = d * +g[b + 240 >> 2] * c;
        g[a + 4 >> 2] = e;
        return
    }
    function Mg(a, b) {
        a = a | 0;
        b = +b;
        return +(+g[a + 156 >> 2] * +g[a + 256 >> 2] * b)
    }
    function Ng(a) {
        a = a | 0;
        return ++g[a + 152 >> 2]
    }
    function Og(a) {
        a = a | 0;
        var b = 0,
            e = 0,
            f = 0,
            j = 0,
            l = 0,
            m = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) + 8 >> 2] | 0;
        l = c[(c[a + 68 >> 2] | 0) + 56 >> 2] | 0;
        m = c[(c[a + 72 >> 2] | 0) + 56 >> 2] | 0;
        Rm(2912, e);
        c[e >> 2] = f;
        Rm(2936, e);
        c[e >> 2] = j;
        Rm(2968, e);
        c[e >> 2] = d[a + 61 >>
        0] | 0;
        Rm(3E3, e);
        c[e >> 2] = l;
        Rm(3040, e);
        c[e >> 2] = m;
        Rm(3072, e);
        h[k >> 3] = +g[a + 152 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(3104, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(3128, e);
        i = b;
        return
    }
    function Pg(a) {
        a = a | 0;
        return
    }
    function Qg(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Rg(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0;
        h = i;
        c[a + 8 >> 2] = b;
        c[a + 12 >> 2] = d;
        j = +g[e >> 2] - +g[b + 12 >> 2];
        k = e + 4 | 0;
        l = +g[k >> 2] - +g[b + 16 >> 2];
        m = b + 24 | 0;
        n = +g[m >> 2];
        o = b + 20 | 0;
        p = +g[o >> 2];
        q = +(j * n + l * p);
        r = +(n * l - j * p);
        s = a + 20 |
        0;
        g[s >> 2] = q;
        g[s + 4 >> 2] = r;
        r = +g[e >> 2] - +g[d + 12 >> 2];
        q = +g[k >> 2] - +g[d + 16 >> 2];
        p = +g[d + 24 >> 2];
        j = +g[d + 20 >> 2];
        l = +(r * p + q * j);
        n = +(p * q - r * j);
        k = a + 28 | 0;
        g[k >> 2] = l;
        g[k + 4 >> 2] = n;
        n = +g[m >> 2];
        l = +g[f >> 2];
        j = +g[o >> 2];
        r = +g[f + 4 >> 2];
        q = +(n * l + j * r);
        p = +(n * r - l * j);
        f = a + 36 | 0;
        g[f >> 2] = q;
        g[f + 4 >> 2] = p;
        g[a + 44 >> 2] = +g[d + 72 >> 2] - +g[b + 72 >> 2];
        i = h;
        return
    }
    function Sg(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0;
        e = i;
        vh(b, d);
        c[b >> 2] = 3216;
        f = b + 84 | 0;
        h = d + 20 | 0;
        j = c[h + 4 >> 2] | 0;
        l = b + 68 | 0;
        c[l >> 2] = c[h >> 2];
        c[l + 4 >> 2] = j;
        j = d + 28 | 0;
        l = c[j + 4 >> 2] | 0;
        h = b +
        76 | 0;
        c[h >> 2] = c[j >> 2];
        c[h + 4 >> 2] = l;
        l = d + 36 | 0;
        h = c[l >> 2] | 0;
        j = c[l + 4 >> 2] | 0;
        l = f;
        c[l >> 2] = h;
        c[l + 4 >> 2] = j;
        m = (c[k >> 2] = h, +g[k >> 2]);
        n = (c[k >> 2] = j, +g[k >> 2]);
        o = +Q(+(m * m + n * n));
        if (o < 1.1920928955078125E-7) {
            p = n;
            q = m
        } else {
            r = 1 / o;
            o = m * r;
            g[f >> 2] = o;
            m = n * r;
            g[b + 88 >> 2] = m;
            p = m;
            q = o
        }
        o = +-p;
        p = +q;
        f = b + 92 | 0;
        g[f >> 2] = o;
        g[f + 4 >> 2] = p;
        g[b + 100 >> 2] = +g[d + 44 >> 2];
        f = b + 104 | 0;
        g[b + 252 >> 2] = 0;
        j = d + 52 | 0;
        c[f + 0 >> 2] = 0;
        c[f + 4 >> 2] = 0;
        c[f + 8 >> 2] = 0;
        c[f + 12 >> 2] = 0;
        g[b + 120 >> 2] = +g[j >> 2];
        g[b + 124 >> 2] = +g[d + 56 >> 2];
        g[b + 128 >> 2] = +g[d + 64 >> 2];
        g[b + 132 >> 2] = +g[d + 68 >> 2];
        a[b + 136 >> 0] = a[d +
        48 >> 0] | 0;
        a[b + 137 >> 0] = a[d + 60 >> 0] | 0;
        c[b + 140 >> 2] = 0;
        d = b + 184 | 0;
        c[d + 0 >> 2] = 0;
        c[d + 4 >> 2] = 0;
        c[d + 8 >> 2] = 0;
        c[d + 12 >> 2] = 0;
        i = e;
        return
    }
    function Tg(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Da = 0;
        e = i;
        f = c[b + 48 >> 2] | 0;
        h =
        c[f + 8 >> 2] | 0;
        j = b + 144 | 0;
        c[j >> 2] = h;
        l = c[b + 52 >> 2] | 0;
        m = c[l + 8 >> 2] | 0;
        n = b + 148 | 0;
        c[n >> 2] = m;
        o = f + 44 | 0;
        p = c[o >> 2] | 0;
        q = c[o + 4 >> 2] | 0;
        o = b + 152 | 0;
        c[o >> 2] = p;
        c[o + 4 >> 2] = q;
        o = l + 44 | 0;
        r = c[o >> 2] | 0;
        s = c[o + 4 >> 2] | 0;
        o = b + 160 | 0;
        c[o >> 2] = r;
        c[o + 4 >> 2] = s;
        o = b + 168 | 0;
        g[o >> 2] = +g[f + 136 >> 2];
        t = b + 172 | 0;
        g[t >> 2] = +g[l + 136 >> 2];
        u = +g[f + 144 >> 2];
        g[b + 176 >> 2] = u;
        v = +g[l + 144 >> 2];
        g[b + 180 >> 2] = v;
        l = c[d + 28 >> 2] | 0;
        f = l + (h * 12 | 0) | 0;
        w = +g[f >> 2];
        x = +g[f + 4 >> 2];
        y = +g[l + (h * 12 | 0) + 8 >> 2];
        f = d + 32 | 0;
        z = c[f >> 2] | 0;
        A = z + (h * 12 | 0) | 0;
        B = +g[A >> 2];
        C = +g[A + 4 >> 2];
        D = +g[z + (h * 12 | 0) + 8 >> 2];
        h = l + (m * 12 |
        0) | 0;
        E = +g[h >> 2];
        F = +g[h + 4 >> 2];
        G = +g[l + (m * 12 | 0) + 8 >> 2];
        l = z + (m * 12 | 0) | 0;
        H = +g[l >> 2];
        I = +g[l + 4 >> 2];
        J = +g[z + (m * 12 | 0) + 8 >> 2];
        K = +T(+y);
        L = +S(+y);
        y = +T(+G);
        M = +S(+G);
        G = +g[b + 68 >> 2] - (c[k >> 2] = p, +g[k >> 2]);
        N = +g[b + 72 >> 2] - (c[k >> 2] = q, +g[k >> 2]);
        O = L * G - K * N;
        P = K * G + L * N;
        N = +g[b + 76 >> 2] - (c[k >> 2] = r, +g[k >> 2]);
        G = +g[b + 80 >> 2] - (c[k >> 2] = s, +g[k >> 2]);
        Q = M * N - y * G;
        R = y * N + M * G;
        G = E - w + Q - O;
        w = F - x + R - P;
        x = +g[o >> 2];
        F = +g[t >> 2];
        E = +g[b + 84 >> 2];
        M = +g[b + 88 >> 2];
        N = L * E - K * M;
        y = K * E + L * M;
        M = +N;
        E = +y;
        t = b + 184 | 0;
        g[t >> 2] = M;
        g[t + 4 >> 2] = E;
        E = O + G;
        O = P + w;
        P = E * y - O * N;
        g[b + 208 >> 2] = P;
        M = Q * y -
        R * N;
        g[b + 212 >> 2] = M;
        U = x + F;
        V = u * P;
        W = v * M;
        X = U + P * V + M * W;
        if (X > 0)
            Y = 1 / X;
        else
            Y = X;
        g[b + 252 >> 2] = Y;
        Y = +g[b + 92 >> 2];
        Z = +g[b + 96 >> 2];
        _ = L * Y - K * Z;
        $ = K * Y + L * Z;
        Z = +_;
        L = +$;
        t = b + 192 | 0;
        g[t >> 2] = Z;
        g[t + 4 >> 2] = L;
        L = E * $ - O * _;
        g[b + 200 >> 2] = L;
        O = Q * $ - R * _;
        g[b + 204 >> 2] = O;
        R = u * L;
        Q = v * O;
        E = R + Q;
        Z = R * P + Q * M;
        Y = v + u;
        K = V + W;
        g[b + 216 >> 2] = U + L * R + O * Q;
        g[b + 220 >> 2] = E;
        g[b + 224 >> 2] = Z;
        g[b + 228 >> 2] = E;
        g[b + 232 >> 2] = Y == 0 ? 1 : Y;
        g[b + 236 >> 2] = K;
        g[b + 240 >> 2] = Z;
        g[b + 244 >> 2] = K;
        g[b + 248 >> 2] = X;
        do if ((a[b + 136 >> 0] | 0) != 0) {
            X = G * N + w * y;
            K = +g[b + 124 >> 2];
            Z = +g[b + 120 >> 2];
            Y = K - Z;
            if (Y > 0)
                aa = Y;
            else
                aa = -Y;
            if (aa <
            .009999999776482582) {
                c[b + 140 >> 2] = 3;
                break
            }
            if (X <= Z) {
                t = b + 140 | 0;
                if ((c[t >> 2] | 0) == 1)
                    break;
                c[t >> 2] = 1;
                g[b + 112 >> 2] = 0;
                break
            }
            t = b + 140 | 0;
            if (!(X >= K)) {
                c[t >> 2] = 0;
                g[b + 112 >> 2] = 0;
                break
            }
            if ((c[t >> 2] | 0) != 2) {
                c[t >> 2] = 2;
                g[b + 112 >> 2] = 0
            }
        } else {
            c[b + 140 >> 2] = 0;
            g[b + 112 >> 2] = 0
        }
        while (0);
        if ((a[b + 137 >> 0] | 0) == 0)
            g[b + 116 >> 2] = 0;
        t = b + 104 | 0;
        if ((a[d + 24 >> 0] | 0) == 0) {
            c[t + 0 >> 2] = 0;
            c[t + 4 >> 2] = 0;
            c[t + 8 >> 2] = 0;
            c[t + 12 >> 2] = 0;
            ba = B;
            ca = C;
            da = H;
            ea = I;
            fa = D;
            ga = J;
            ha = c[j >> 2] | 0;
            ia = c[f >> 2] | 0;
            ja = ia + (ha * 12 | 0) | 0;
            ka = +ba;
            la = +ca;
            ma = ja;
            na = ma;
            g[na >> 2] = ka;
            oa = ma + 4 | 0;
            pa = oa;
            g[pa >>
            2] = la;
            qa = c[j >> 2] | 0;
            ra = c[f >> 2] | 0;
            sa = ra + (qa * 12 | 0) + 8 | 0;
            g[sa >> 2] = fa;
            ta = c[n >> 2] | 0;
            ua = ra + (ta * 12 | 0) | 0;
            va = +da;
            wa = +ea;
            xa = ua;
            ya = xa;
            g[ya >> 2] = va;
            za = xa + 4 | 0;
            Aa = za;
            g[Aa >> 2] = wa;
            Ba = c[n >> 2] | 0;
            Ca = c[f >> 2] | 0;
            Da = Ca + (Ba * 12 | 0) + 8 | 0;
            g[Da >> 2] = ga;
            i = e;
            return
        } else {
            o = d + 8 | 0;
            aa = +g[o >> 2];
            w = aa * +g[t >> 2];
            g[t >> 2] = w;
            t = b + 108 | 0;
            G = aa * +g[t >> 2];
            g[t >> 2] = G;
            t = b + 112 | 0;
            K = aa * +g[t >> 2];
            g[t >> 2] = K;
            t = b + 116 | 0;
            aa = +g[o >> 2] * +g[t >> 2];
            g[t >> 2] = aa;
            X = aa + K;
            K = w * _ + N * X;
            N = w * $ + X * y;
            ba = B - x * K;
            ca = C - x * N;
            da = H + F * K;
            ea = I + F * N;
            fa = D - u * (w * L + G + X * P);
            ga = J + v * (G + w * O + X * M);
            ha = c[j >> 2] |
            0;
            ia = c[f >> 2] | 0;
            ja = ia + (ha * 12 | 0) | 0;
            ka = +ba;
            la = +ca;
            ma = ja;
            na = ma;
            g[na >> 2] = ka;
            oa = ma + 4 | 0;
            pa = oa;
            g[pa >> 2] = la;
            qa = c[j >> 2] | 0;
            ra = c[f >> 2] | 0;
            sa = ra + (qa * 12 | 0) + 8 | 0;
            g[sa >> 2] = fa;
            ta = c[n >> 2] | 0;
            ua = ra + (ta * 12 | 0) | 0;
            va = +da;
            wa = +ea;
            xa = ua;
            ya = xa;
            g[ya >> 2] = va;
            za = xa + 4 | 0;
            Aa = za;
            g[Aa >> 2] = wa;
            Ba = c[n >> 2] | 0;
            Ca = c[f >> 2] | 0;
            Da = Ca + (Ba * 12 | 0) + 8 | 0;
            g[Da >> 2] = ga;
            i = e;
            return
        }
    }
    function Ug(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Da = 0,
            Ea = 0,
            Fa = 0,
            Ga = 0,
            Ha = 0,
            Ia = 0,
            Ja = 0,
            Ka = 0,
            La = 0,
            Ma = 0,
            Na = 0,
            Oa = 0;
        e = i;
        i = i + 64 | 0;
        f = e + 44 | 0;
        h = e + 32 | 0;
        j = e + 24 | 0;
        k = e + 16 | 0;
        l = e + 8 | 0;
        m = e;
        n = b + 144 | 0;
        o = c[n >> 2] | 0;
        p = d + 32 | 0;
        q = c[p >> 2] | 0;
        r = q + (o * 12 | 0) | 0;
        s = +g[r >> 2];
        t = +g[r + 4 >> 2];
        u = +g[q + (o * 12 | 0) + 8 >> 2];
        o = b + 148 | 0;
        r = c[o >> 2] | 0;
        v = q + (r * 12 | 0) | 0;
        w = +g[v >> 2];
        x = +g[v + 4 >> 2];
        y = +g[q + (r * 12 | 0) + 8 >> 2];
        z = +g[b + 168 >> 2];
        A = +g[b + 172 >> 2];
        B = +g[b + 176 >> 2];
        C = +g[b + 180 >> 2];
        if ((a[b + 137 >> 0] | 0) != 0 ? (c[b + 140 >> 2] | 0) != 3 : 0) {
            D = +g[b + 184 >> 2];
            E = +g[b + 188 >> 2];
            F = +g[b + 212 >> 2];
            G = +g[b + 208 >> 2];
            r = b + 116 | 0;
            H = +g[r >> 2];
            I = +g[d >> 2] * +g[b + 128 >> 2];
            J = H + +g[b + 252 >> 2] * (+g[b + 132 >> 2] - ((w - s) * D + (x - t) * E + y * F - u * G));
            K = -I;
            L = J < I ? J : I;
            I = L < K ? K : L;
            g[r >> 2] = I;
            L = I - H;
            H = D * L;
            D = E * L;
            M = t - z * D;
            N = x + A * D;
            O = s - z * H;
            P = w + A * H;
            Q = u - B * G * L;
            R = y + C * F * L
        } else {
            M = t;
            N = x;
            O = s;
            P = w;
            Q = u;
            R = y
        }
        y = P - O;
        u = N - M;
        r = b + 192 | 0;
        d = b + 196 | 0;
        q = b + 204 | 0;
        v = b + 200 | 0;
        w = y * +g[r >> 2] + u * +g[d >> 2] + R * +g[q >> 2] - Q * +g[v >> 2];
        s =
        R - Q;
        if ((a[b + 136 >> 0] | 0) != 0 ? (S = b + 140 | 0, (c[S >> 2] | 0) != 0) : 0) {
            T = b + 184 | 0;
            U = b + 188 | 0;
            V = b + 212 | 0;
            W = b + 208 | 0;
            X = b + 104 | 0;
            x = +g[X >> 2];
            Y = b + 108 | 0;
            t = +g[Y >> 2];
            Z = b + 112 | 0;
            L = +g[Z >> 2];
            _ = b + 216 | 0;
            F = -w;
            G = -s;
            H = -(y * +g[T >> 2] + u * +g[U >> 2] + R * +g[V >> 2] - Q * +g[W >> 2]);
            g[h >> 2] = F;
            g[h + 4 >> 2] = G;
            g[h + 8 >> 2] = H;
            Gm(f, _, h);
            g[X >> 2] = +g[f >> 2] + +g[X >> 2];
            h = f + 4 | 0;
            g[Y >> 2] = +g[h >> 2] + +g[Y >> 2];
            $ = f + 8 | 0;
            H = +g[$ >> 2] + +g[Z >> 2];
            g[Z >> 2] = H;
            aa = c[S >> 2] | 0;
            if ((aa | 0) == 2) {
                u = H < 0 ? H : 0;
                g[Z >> 2] = u;
                ba = u
            } else if ((aa | 0) == 1) {
                u = H > 0 ? H : 0;
                g[Z >> 2] = u;
                ba = u
            } else
                ba = H;
            H = ba - L;
            ba = G - H * +g[b + 244 >>
            2];
            g[j >> 2] = F - +g[b + 240 >> 2] * H;
            g[j + 4 >> 2] = ba;
            Hm(k, _, j);
            ba = x + +g[k >> 2];
            H = t + +g[k + 4 >> 2];
            g[X >> 2] = ba;
            g[Y >> 2] = H;
            F = ba - x;
            x = H - t;
            t = +g[Z >> 2] - L;
            g[f >> 2] = F;
            g[h >> 2] = x;
            g[$ >> 2] = t;
            ca = x + F * +g[q >> 2] + t * +g[V >> 2];
            da = F * +g[r >> 2] + t * +g[T >> 2];
            ea = F * +g[v >> 2] + x + t * +g[W >> 2];
            fa = F * +g[d >> 2] + t * +g[U >> 2];
            ga = z * fa;
            ha = z * da;
            ia = O - ha;
            ja = M - ga;
            ka = A * da;
            la = A * fa;
            ma = P + ka;
            na = N + la;
            oa = B * ea;
            pa = C * ca;
            qa = Q - oa;
            ra = R + pa;
            sa = c[n >> 2] | 0;
            ta = c[p >> 2] | 0;
            ua = ta + (sa * 12 | 0) | 0;
            va = +ia;
            wa = +ja;
            xa = ua;
            ya = xa;
            g[ya >> 2] = va;
            za = xa + 4 | 0;
            Aa = za;
            g[Aa >> 2] = wa;
            Ba = c[n >> 2] | 0;
            Ca = c[p >> 2] | 0;
            Da = Ca +
            (Ba * 12 | 0) + 8 | 0;
            g[Da >> 2] = qa;
            Ea = c[o >> 2] | 0;
            Fa = Ca + (Ea * 12 | 0) | 0;
            Ga = +ma;
            Ha = +na;
            Ia = Fa;
            Ja = Ia;
            g[Ja >> 2] = Ga;
            Ka = Ia + 4 | 0;
            La = Ka;
            g[La >> 2] = Ha;
            Ma = c[o >> 2] | 0;
            Na = c[p >> 2] | 0;
            Oa = Na + (Ma * 12 | 0) + 8 | 0;
            g[Oa >> 2] = ra;
            i = e;
            return
        }
        g[m >> 2] = -w;
        g[m + 4 >> 2] = -s;
        Hm(l, b + 216 | 0, m);
        s = +g[l >> 2];
        m = b + 104 | 0;
        g[m >> 2] = s + +g[m >> 2];
        w = +g[l + 4 >> 2];
        l = b + 108 | 0;
        g[l >> 2] = w + +g[l >> 2];
        ca = w + s * +g[q >> 2];
        da = s * +g[r >> 2];
        ea = s * +g[v >> 2] + w;
        fa = s * +g[d >> 2];
        ga = z * fa;
        ha = z * da;
        ia = O - ha;
        ja = M - ga;
        ka = A * da;
        la = A * fa;
        ma = P + ka;
        na = N + la;
        oa = B * ea;
        pa = C * ca;
        qa = Q - oa;
        ra = R + pa;
        sa = c[n >> 2] | 0;
        ta = c[p >> 2] | 0;
        ua =
        ta + (sa * 12 | 0) | 0;
        va = +ia;
        wa = +ja;
        xa = ua;
        ya = xa;
        g[ya >> 2] = va;
        za = xa + 4 | 0;
        Aa = za;
        g[Aa >> 2] = wa;
        Ba = c[n >> 2] | 0;
        Ca = c[p >> 2] | 0;
        Da = Ca + (Ba * 12 | 0) + 8 | 0;
        g[Da >> 2] = qa;
        Ea = c[o >> 2] | 0;
        Fa = Ca + (Ea * 12 | 0) | 0;
        Ga = +ma;
        Ha = +na;
        Ia = Fa;
        Ja = Ia;
        g[Ja >> 2] = Ga;
        Ka = Ia + 4 | 0;
        La = Ka;
        g[La >> 2] = Ha;
        Ma = c[o >> 2] | 0;
        Na = c[p >> 2] | 0;
        Oa = Na + (Ma * 12 | 0) + 8 | 0;
        g[Oa >> 2] = ra;
        i = e;
        return
    }
    function Vg(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0;
        e = i;
        i = i + 64 | 0;
        f = e + 24 | 0;
        h = e + 12 | 0;
        j = e;
        k = b + 144 | 0;
        l = c[k >> 2] | 0;
        m = d + 28 | 0;
        d = c[m >> 2] | 0;
        n = d + (l * 12 | 0) | 0;
        o = +g[n >> 2];
        p = +g[n + 4 >> 2];
        q = +g[d + (l * 12 | 0) + 8 >> 2];
        l = b + 148 | 0;
        n = c[l >> 2] | 0;
        r = d + (n * 12 | 0) | 0;
        s = +g[r >> 2];
        t = +g[r + 4 >> 2];
        u = +g[d + (n * 12 | 0) + 8 >> 2];
        v = +T(+q);
        w = +S(+q);
        x = +T(+u);
        y = +S(+u);
        z = +g[b + 168 >> 2];
        A = +g[b + 172 >> 2];
        B = +g[b + 176 >> 2];
        C = +g[b + 180 >> 2];
        D = +g[b + 68 >> 2] - +g[b + 152 >> 2];
        E = +g[b + 72 >> 2] - +g[b + 156 >> 2];
        F = w * D - v * E;
        G = v * D + w * E;
        E = +g[b + 76 >> 2] - +g[b + 160 >> 2];
        D = +g[b + 80 >> 2] - +g[b + 164 >> 2];
        H = y * E - x * D;
        I = x * E + y * D;
        D = s + H -
        o - F;
        y = t + I - p - G;
        E = +g[b + 84 >> 2];
        x = +g[b + 88 >> 2];
        J = w * E - v * x;
        K = v * E + w * x;
        x = F + D;
        F = G + y;
        G = K * x - J * F;
        E = H * K - I * J;
        L = +g[b + 92 >> 2];
        M = +g[b + 96 >> 2];
        N = w * L - v * M;
        O = v * L + w * M;
        M = O * x - N * F;
        F = H * O - I * N;
        I = N * D + O * y;
        H = u - q - +g[b + 100 >> 2];
        if (I > 0)
            P = I;
        else
            P = -I;
        if (H > 0)
            Q = H;
        else
            Q = -H;
        do if ((a[b + 136 >> 0] | 0) != 0) {
            x = J * D + K * y;
            w = +g[b + 124 >> 2];
            L = +g[b + 120 >> 2];
            v = w - L;
            if (v > 0)
                R = v;
            else
                R = -v;
            if (R < .009999999776482582) {
                v = x < .20000000298023224 ? x : .20000000298023224;
                if (x > 0)
                    U = x;
                else
                    U = -x;
                V = v < -.20000000298023224 ? -.20000000298023224 : v;
                W = 1;
                X = P > U ? P : U;
                break
            }
            if (x <= L) {
                v = x - L + .004999999888241291;
                Y = v < 0 ? v : 0;
                v = L - x;
                V = Y < -.20000000298023224 ? -.20000000298023224 : Y;
                W = 1;
                X = P > v ? P : v;
                break
            }
            if (x >= w) {
                v = x - w;
                w = v + -.004999999888241291;
                x = w < .20000000298023224 ? w : .20000000298023224;
                V = x < 0 ? 0 : x;
                W = 1;
                X = P > v ? P : v
            } else {
                V = 0;
                W = 0;
                X = P
            }
        } else {
            V = 0;
            W = 0;
            X = P
        }
        while (0);
        P = z + A;
        U = B * M;
        R = C * F;
        y = F * R + (P + M * U);
        D = R + U;
        if (W) {
            v = E * R + G * U;
            U = B + C;
            R = B * G;
            x = C * E;
            w = x + R;
            g[f >> 2] = y;
            g[f + 4 >> 2] = D;
            g[f + 8 >> 2] = v;
            g[f + 12 >> 2] = D;
            g[f + 16 >> 2] = U == 0 ? 1 : U;
            g[f + 20 >> 2] = w;
            g[f + 24 >> 2] = v;
            g[f + 28 >> 2] = w;
            g[f + 32 >> 2] = E * x + (P + G * R);
            g[j >> 2] = -I;
            g[j + 4 >> 2] = -H;
            g[j + 8 >> 2] = -V;
            Gm(h, f, j);
            Z = +g[h >> 2];
            _ =
            +g[h + 8 >> 2];
            $ = +g[h + 4 >> 2]
        } else {
            V = B + C;
            R = V == 0 ? 1 : V;
            V = -I;
            I = -H;
            H = R * y - D * D;
            if (H != 0)
                aa = 1 / H;
            else
                aa = H;
            Z = (R * V - D * I) * aa;
            _ = 0;
            $ = (y * I - D * V) * aa
        }
        aa = J * _ + N * Z;
        N = K * _ + O * Z;
        O = +(o - z * aa);
        o = +(p - z * N);
        h = (c[m >> 2] | 0) + ((c[k >> 2] | 0) * 12 | 0) | 0;
        g[h >> 2] = O;
        g[h + 4 >> 2] = o;
        h = c[m >> 2] | 0;
        g[h + ((c[k >> 2] | 0) * 12 | 0) + 8 >> 2] = q - B * (G * _ + ($ + M * Z));
        M = +(s + A * aa);
        aa = +(t + A * N);
        k = h + ((c[l >> 2] | 0) * 12 | 0) | 0;
        g[k >> 2] = M;
        g[k + 4 >> 2] = aa;
        g[(c[m >> 2] | 0) + ((c[l >> 2] | 0) * 12 | 0) + 8 >> 2] = u + C * (E * _ + ($ + F * Z));
        if (!(X <= .004999999888241291)) {
            ba = 0;
            i = e;
            return ba | 0
        }
        ba = Q <= .03490658849477768;
        i = e;
        return ba |
        0
    }
    function Wg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 48 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 68 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 72 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Xg(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 76 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 80 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Yg(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0,
            e = 0,
            f = 0;
        d = +g[b + 104 >> 2];
        e = +g[b + 116 >> 2] + +g[b + 112 >> 2];
        f = (d *
        +g[b + 196 >> 2] + e * +g[b + 188 >> 2]) * c;
        g[a >> 2] = (d * +g[b + 192 >> 2] + +g[b + 184 >> 2] * e) * c;
        g[a + 4 >> 2] = f;
        return
    }
    function Zg(a, b) {
        a = a | 0;
        b = +b;
        return +(+g[a + 108 >> 2] * b)
    }
    function _g(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        b = c[a + 48 >> 2] | 0;
        d = +g[b + 24 >> 2];
        e = +g[a + 68 >> 2];
        f = +g[b + 20 >> 2];
        h = +g[a + 72 >> 2];
        i = c[a + 52 >> 2] | 0;
        j = +g[i + 24 >> 2];
        k = +g[a + 76 >> 2];
        l = +g[i + 20 >> 2];
        m = +g[a + 80 >> 2];
        n = +g[a + 84 >> 2];
        o = +g[a + 88 >> 2];
        return +((+g[i + 12 >> 2] + (j * k - l * m) - (+g[b + 12 >> 2] + (d * e - f * h))) * (d * n - f * o) + (k * l + j * m + +g[i + 16 >> 2] - (e * f + d * h + +g[b + 16 >> 2])) * (f *
        n + d * o))
    }
    function $g(b) {
        b = b | 0;
        return (a[b + 136 >> 0] | 0) != 0 | 0
    }
    function ah(f, h) {
        f = f | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        j = i;
        k = f + 136 | 0;
        if ((h & 1 | 0) == (d[k >> 0] | 0 | 0)) {
            i = j;
            return
        }
        l = c[f + 48 >> 2] | 0;
        m = l + 4 | 0;
        n = e[m >> 1] | 0;
        if ((n & 2 | 0) == 0) {
            b[m >> 1] = n | 2;
            g[l + 160 >> 2] = 0
        }
        l = c[f + 52 >> 2] | 0;
        n = l + 4 | 0;
        m = e[n >> 1] | 0;
        if ((m & 2 | 0) == 0) {
            b[n >> 1] = m | 2;
            g[l + 160 >> 2] = 0
        }
        a[k >> 0] = h & 1;
        g[f + 112 >> 2] = 0;
        i = j;
        return
    }
    function bh(b) {
        b = b | 0;
        return (a[b + 137 >> 0] | 0) != 0 | 0
    }
    function ch(d, f) {
        d = d | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        h = i;
        j = c[d + 48 >> 2] | 0;
        k = j + 4 | 0;
        l = e[k >> 1] | 0;
        if ((l & 2 |
        0) == 0) {
            b[k >> 1] = l | 2;
            g[j + 160 >> 2] = 0
        }
        j = c[d + 52 >> 2] | 0;
        l = j + 4 | 0;
        k = e[l >> 1] | 0;
        if ((k & 2 | 0) != 0) {
            m = d + 137 | 0;
            n = f & 1;
            a[m >> 0] = n;
            i = h;
            return
        }
        b[l >> 1] = k | 2;
        g[j + 160 >> 2] = 0;
        m = d + 137 | 0;
        n = f & 1;
        a[m >> 0] = n;
        i = h;
        return
    }
    function dh(a, d) {
        a = a | 0;
        d = +d;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        f = i;
        h = c[a + 48 >> 2] | 0;
        j = h + 4 | 0;
        k = e[j >> 1] | 0;
        if ((k & 2 | 0) == 0) {
            b[j >> 1] = k | 2;
            g[h + 160 >> 2] = 0
        }
        h = c[a + 52 >> 2] | 0;
        k = h + 4 | 0;
        j = e[k >> 1] | 0;
        if ((j & 2 | 0) != 0) {
            l = a + 132 | 0;
            g[l >> 2] = d;
            i = f;
            return
        }
        b[k >> 1] = j | 2;
        g[h + 160 >> 2] = 0;
        l = a + 132 | 0;
        g[l >> 2] = d;
        i = f;
        return
    }
    function eh(a, b) {
        a = a | 0;
        b = +b;
        return +(+g[a + 116 >> 2] *
        b)
    }
    function fh(a) {
        a = a | 0;
        var b = 0,
            e = 0,
            f = 0,
            j = 0,
            l = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) + 8 >> 2] | 0;
        Rm(3264, e);
        c[e >> 2] = f;
        Rm(3296, e);
        c[e >> 2] = j;
        Rm(3328, e);
        c[e >> 2] = d[a + 61 >> 0] | 0;
        Rm(3360, e);
        l = +g[a + 72 >> 2];
        h[k >> 3] = +g[a + 68 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(3400, e);
        l = +g[a + 80 >> 2];
        h[k >> 3] = +g[a + 76 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(3448, e);
        l = +g[a + 88 >> 2];
        h[k >> 3] = +g[a +
        84 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(3496, e);
        h[k >> 3] = +g[a + 100 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(3536, e);
        c[e >> 2] = d[a + 136 >> 0] | 0;
        Rm(3568, e);
        h[k >> 3] = +g[a + 120 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(3600, e);
        h[k >> 3] = +g[a + 124 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(3640, e);
        c[e >> 2] = d[a + 137 >> 0] | 0;
        Rm(3680, e);
        h[k >> 3] = +g[a + 132 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(3712, e);
        h[k >> 3] = +g[a + 128 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(3744, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(3776, e);
        i = b;
        return
    }
    function gh(a) {
        a = a | 0;
        return
    }
    function hh(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function ih(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0;
        d = i;
        vh(a, b);
        c[a >> 2] = 3872;
        e = b + 20 | 0;
        f = c[e + 4 >> 2] | 0;
        h = a + 68 | 0;
        c[h >> 2] = c[e >> 2];
        c[h + 4 >> 2] = f;
        f = b + 28 | 0;
        h = c[f + 4 >> 2] | 0;
        e = a + 76 | 0;
        c[e >> 2] = c[f >> 2];
        c[e + 4 >> 2] = h;
        g[a + 84 >> 2] = +g[b + 36 >> 2];
        g[a + 160 >> 2] = 0;
        g[a + 92 >> 2] = 0;
        c[a + 164 >> 2] = 0;
        g[a + 88 >> 2] = 0;
        i = d;
        return
    }
    function jh(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0;
        e = i;
        f = c[b + 48 >> 2] | 0;
        h = c[f + 8 >> 2] | 0;
        j = b + 96 | 0;
        c[j >> 2] = h;
        l = c[b + 52 >> 2] | 0;
        m = c[l + 8 >> 2] | 0;
        n = b + 100 | 0;
        c[n >> 2] = m;
        o = f + 44 | 0;
        p = c[o >> 2] | 0;
        q = c[o + 4 >> 2] | 0;
        o = b + 128 | 0;
        c[o >> 2] = p;
        c[o + 4 >> 2] = q;
        o = l + 44 | 0;
        r = c[o >> 2] | 0;
        s = c[o + 4 >> 2] | 0;
        o = b + 136 | 0;
        c[o >> 2] = r;
        c[o + 4 >> 2] = s;
        s = b + 144 | 0;
        g[s >> 2] = +g[f + 136 >> 2];
        o = b + 148 | 0;
        g[o >> 2] = +g[l + 136 >> 2];
        t = b + 152 | 0;
        g[t >> 2] = +g[f + 144 >> 2];
        f = b + 156 | 0;
        g[f >> 2] = +g[l + 144 >> 2];
        l = c[d + 28 >> 2] | 0;
        u = l + (h * 12 | 0) | 0;
        v = +g[u >> 2];
        w = +g[u + 4 >> 2];
        x = +g[l + (h * 12 | 0) + 8 >> 2];
        u = d + 32 | 0;
        y = c[u >> 2] | 0;
        z = y + (h * 12 | 0) | 0;
        A = +g[z >> 2];
        B = +g[z + 4 >> 2];
        C = +g[y + (h * 12 | 0) + 8 >> 2];
        h = l + (m * 12 | 0) | 0;
        D = +g[h >> 2];
        E = +g[h + 4 >> 2];
        F = +g[l + (m * 12 | 0) + 8 >> 2];
        l = y + (m * 12 | 0) | 0;
        G = +g[l >> 2];
        H = +g[l + 4 >> 2];
        I = +g[y + (m * 12 | 0) + 8 >> 2];
        J = +T(+x);
        K = +S(+x);
        x = +T(+F);
        L = +S(+F);
        F = +g[b + 68 >> 2] - (c[k >> 2] = p, +g[k >> 2]);
        M = +g[b + 72 >> 2] - (c[k >> 2] = q, +g[k >> 2]);
        N = K * F - J * M;
        O = J * F + K * M;
        M = +N;
        K = +O;
        q = b + 112 | 0;
        g[q >> 2] = M;
        g[q + 4 >> 2] = K;
        K = +g[b + 76 >> 2] - (c[k >> 2] = r, +g[k >> 2]);
        M = +g[b + 80 >> 2] - +g[b + 140 >> 2];
        F = L * K - x * M;
        J = x * K + L * M;
        M =
        +F;
        L = +J;
        r = b + 120 | 0;
        g[r >> 2] = M;
        g[r + 4 >> 2] = L;
        r = b + 104 | 0;
        L = D + F - v - N;
        v = E + J - w - O;
        w = +L;
        E = +v;
        q = r;
        g[q >> 2] = w;
        g[q + 4 >> 2] = E;
        q = b + 108 | 0;
        E = +Q(+(L * L + v * v));
        g[b + 88 >> 2] = E;
        c[b + 164 >> 2] = E - +g[b + 84 >> 2] > 0 ? 2 : 0;
        if (!(E > .004999999888241291)) {
            g[r >> 2] = 0;
            g[q >> 2] = 0;
            g[b + 160 >> 2] = 0;
            g[b + 92 >> 2] = 0;
            i = e;
            return
        }
        w = 1 / E;
        E = w * L;
        g[r >> 2] = E;
        L = w * v;
        g[q >> 2] = L;
        v = N * L - O * E;
        w = L * F - E * J;
        D = +g[s >> 2];
        M = +g[t >> 2];
        K = +g[o >> 2];
        x = +g[f >> 2];
        P = K + (D + v * v * M) + w * w * x;
        if (P != 0)
            R = 1 / P;
        else
            R = 0;
        g[b + 160 >> 2] = R;
        if ((a[d + 24 >> 0] | 0) == 0) {
            g[b + 92 >> 2] = 0;
            U = A;
            V = B;
            W = G;
            X = H;
            Y = C;
            Z = I
        } else {
            f = b + 92 | 0;
            R = +g[d +
            8 >> 2] * +g[f >> 2];
            g[f >> 2] = R;
            P = E * R;
            E = R * L;
            U = A - P * D;
            V = B - E * D;
            W = G + P * K;
            X = H + E * K;
            Y = C - M * (E * N - P * O);
            Z = I + x * (E * F - P * J)
        }
        J = +U;
        U = +V;
        f = (c[u >> 2] | 0) + ((c[j >> 2] | 0) * 12 | 0) | 0;
        g[f >> 2] = J;
        g[f + 4 >> 2] = U;
        f = c[u >> 2] | 0;
        g[f + ((c[j >> 2] | 0) * 12 | 0) + 8 >> 2] = Y;
        Y = +W;
        W = +X;
        j = f + ((c[n >> 2] | 0) * 12 | 0) | 0;
        g[j >> 2] = Y;
        g[j + 4 >> 2] = W;
        g[(c[u >> 2] | 0) + ((c[n >> 2] | 0) * 12 | 0) + 8 >> 2] = Z;
        i = e;
        return
    }
    function kh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0;
        d = i;
        e = a + 96 | 0;
        f = c[e >> 2] | 0;
        h = b + 32 | 0;
        j = c[h >> 2] | 0;
        k = j + (f * 12 |
        0) | 0;
        l = k;
        m = +g[l >> 2];
        n = +g[l + 4 >> 2];
        o = +g[j + (f * 12 | 0) + 8 >> 2];
        f = a + 100 | 0;
        l = c[f >> 2] | 0;
        p = j + (l * 12 | 0) | 0;
        q = +g[p >> 2];
        r = +g[p + 4 >> 2];
        s = +g[j + (l * 12 | 0) + 8 >> 2];
        t = +g[a + 116 >> 2];
        u = +g[a + 112 >> 2];
        v = +g[a + 124 >> 2];
        w = +g[a + 120 >> 2];
        x = +g[a + 88 >> 2] - +g[a + 84 >> 2];
        y = +g[a + 104 >> 2];
        z = +g[a + 108 >> 2];
        A = (q - s * v - (m - o * t)) * y + (r + s * w - (n + o * u)) * z;
        if (x < 0)
            B = A + x * +g[b + 4 >> 2];
        else
            B = A;
        b = a + 92 | 0;
        A = +g[b >> 2];
        x = A - B * +g[a + 160 >> 2];
        B = x > 0 ? 0 : x;
        g[b >> 2] = B;
        x = B - A;
        A = y * x;
        y = z * x;
        x = +g[a + 144 >> 2];
        z = o - +g[a + 152 >> 2] * (u * y - A * t);
        t = +g[a + 148 >> 2];
        u = s + +g[a + 156 >> 2] * (y * w - A * v);
        v = +(m - x * A);
        m = +(n -
        x * y);
        a = k;
        g[a >> 2] = v;
        g[a + 4 >> 2] = m;
        a = c[h >> 2] | 0;
        g[a + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = z;
        z = +(q + A * t);
        A = +(r + y * t);
        e = a + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = z;
        g[e + 4 >> 2] = A;
        g[(c[h >> 2] | 0) + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = u;
        i = d;
        return
    }
    function lh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0;
        d = i;
        e = a + 96 | 0;
        f = c[e >> 2] | 0;
        h = b + 28 | 0;
        b = c[h >> 2] | 0;
        j = b + (f * 12 | 0) | 0;
        k = j;
        l = +g[k >> 2];
        m = +g[k + 4 >> 2];
        n = +g[b + (f * 12 | 0) + 8 >> 2];
        f = a + 100 | 0;
        k = c[f >> 2] | 0;
        o = b + (k * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[b +
        (k * 12 | 0) + 8 >> 2];
        s = +T(+n);
        t = +S(+n);
        u = +T(+r);
        v = +S(+r);
        w = +g[a + 68 >> 2] - +g[a + 128 >> 2];
        x = +g[a + 72 >> 2] - +g[a + 132 >> 2];
        y = t * w - s * x;
        z = s * w + t * x;
        x = +g[a + 76 >> 2] - +g[a + 136 >> 2];
        t = +g[a + 80 >> 2] - +g[a + 140 >> 2];
        w = v * x - u * t;
        s = u * x + v * t;
        t = p + w - l - y;
        v = q + s - m - z;
        x = +Q(+(t * t + v * v));
        if (x < 1.1920928955078125E-7) {
            A = 0;
            B = t;
            C = v
        } else {
            u = 1 / x;
            A = x;
            B = t * u;
            C = v * u
        }
        k = a + 84 | 0;
        u = A - +g[k >> 2];
        v = u < .20000000298023224 ? u : .20000000298023224;
        u = -(+g[a + 160 >> 2] * (v < 0 ? 0 : v));
        v = B * u;
        B = C * u;
        u = +g[a + 144 >> 2];
        C = n - +g[a + 152 >> 2] * (y * B - z * v);
        z = +g[a + 148 >> 2];
        y = r + +g[a + 156 >> 2] * (w * B - s * v);
        s = +(l - u *
        v);
        l = +(m - u * B);
        a = j;
        g[a >> 2] = s;
        g[a + 4 >> 2] = l;
        a = c[h >> 2] | 0;
        g[a + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = C;
        C = +(p + z * v);
        v = +(q + z * B);
        e = a + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = C;
        g[e + 4 >> 2] = v;
        g[(c[h >> 2] | 0) + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = y;
        i = d;
        return A - +g[k >> 2] < .004999999888241291 | 0
    }
    function mh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 48 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 68 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 72 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function nh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >>
        2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 76 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 80 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function oh(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0;
        d = +g[b + 92 >> 2] * c;
        c = d * +g[b + 108 >> 2];
        g[a >> 2] = +g[b + 104 >> 2] * d;
        g[a + 4 >> 2] = c;
        return
    }
    function ph(a, b) {
        a = a | 0;
        b = +b;
        return 0
    }
    function qh(a) {
        a = a | 0;
        var b = 0,
            e = 0,
            f = 0,
            j = 0,
            l = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) + 8 >> 2] | 0;
        Rm(3920, e);
        c[e >> 2] = f;
        Rm(3944, e);
        c[e >> 2] = j;
        Rm(3976, e);
        c[e >> 2] = d[a + 61 >> 0] | 0;
        Rm(4008, e);
        l = +g[a + 72 >>
        2];
        h[k >> 3] = +g[a + 68 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(4048, e);
        l = +g[a + 80 >> 2];
        h[k >> 3] = +g[a + 76 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(4096, e);
        h[k >> 3] = +g[a + 84 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(4144, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(4176, e);
        i = b;
        return
    }
    function rh(a) {
        a = a | 0;
        return
    }
    function sh(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function th(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0;
        d = i;
        do switch (c[a >> 2] | 0) {
        case 5:
            e = Em(b, 168) | 0;
            if ((e | 0) == 0)
                f = 0;
            else {
                vf(e, a);
                f = e
            }
            g = f;
            break;
        case 2:
            e = Em(b, 256) | 0;
            if ((e | 0) == 0)
                h = 0;
            else {
                Sg(e, a);
                h = e
            }
            g = h;
            break;
        case 7:
            e = Em(b, 224) | 0;
            if ((e | 0) == 0)
                j = 0;
            else {
                Sh(e, a);
                j = e
            }
            g = j;
            break;
        case 4:
            e = Em(b, 196) | 0;
            if ((e | 0) == 0)
                k = 0;
            else {
                di(e, a);
                k = e
            }
            g = k;
            break;
        case 3:
            e = Em(b, 176) | 0;
            if ((e | 0) == 0)
                l = 0;
            else {
                Yf(e, a);
                l = e
            }
            g = l;
            break;
        case 9:
            e = Em(b, 180) | 0;
            if ((e | 0) == 0)
                m = 0;
            else {
                ig(e, a);
                m = e
            }
            g = m;
            break;
        case 11:
            e = Em(b, 192) | 0;
            if ((e | 0) == 0)
                n = 0;
            else {
                Jf(e, a);
                n = e
            }
            g = n;
            break;
        case 1:
            e = Em(b, 228) | 0;
            if ((e | 0) == 0)
                o = 0;
            else {
                Ah(e, a);
                o = e
            }
            g = o;
            break;
        case 8:
            e = Em(b, 208) | 0;
            if ((e | 0) == 0)
                p = 0;
            else {
                ug(e, a);
                p = e
            }
            g = p;
            break;
        case 6:
            e = Em(b, 276) | 0;
            if ((e | 0) == 0)
                q = 0;
            else {
                Fg(e, a);
                q = e
            }
            g = q;
            break;
        case 10:
            e = Em(b, 168) | 0;
            if ((e | 0) == 0)
                r = 0;
            else {
                ih(e, a);
                r = e
            }
            g = r;
            break;
        default:
            g = 0
        }
        while (0);
        i = d;
        return g | 0
    }
    function uh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        d = i;
        eb[c[(c[a >> 2] | 0) + 24 >> 2] & 127](a);
        do switch (c[a + 4 >> 2] | 0) {
        case 9:
            Fm(b, a, 180);
            break;
        case 2:
            Fm(b, a, 256);
            break;
        case 1:
            Fm(b, a, 228);
            break;
        case 7:
            Fm(b, a, 224);
            break;
        case 8:
            Fm(b,
            a, 208);
            break;
        case 5:
            Fm(b, a, 168);
            break;
        case 3:
            Fm(b, a, 176);
            break;
        case 11:
            Fm(b, a, 192);
            break;
        case 4:
            Fm(b, a, 196);
            break;
        case 10:
            Fm(b, a, 168);
            break;
        case 6:
            Fm(b, a, 276);
            break;
        default:
        }
        while (0);
        i = d;
        return
    }
    function vh(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0;
        e = i;
        c[b >> 2] = 4264;
        c[b + 4 >> 2] = c[d >> 2];
        c[b + 8 >> 2] = 0;
        c[b + 12 >> 2] = 0;
        c[b + 48 >> 2] = c[d + 8 >> 2];
        c[b + 52 >> 2] = c[d + 12 >> 2];
        c[b + 56 >> 2] = 0;
        a[b + 61 >> 0] = a[d + 16 >> 0] | 0;
        a[b + 60 >> 0] = 0;
        c[b + 64 >> 2] = c[d + 4 >> 2];
        d = b + 16 | 0;
        c[d + 0 >> 2] = 0;
        c[d + 4 >> 2] = 0;
        c[d + 8 >> 2] = 0;
        c[d + 12 >> 2] = 0;
        c[d + 16 >> 2] = 0;
        c[d + 20 >> 2] = 0;
        c[d + 24 >> 2] = 0;
        c[d + 28 >> 2] = 0;
        i = e;
        return
    }
    function wh(a) {
        a = a | 0;
        a = i;
        i = i + 16 | 0;
        Rm(4312, a);
        i = a;
        return
    }
    function xh(a) {
        a = a | 0;
        return
    }
    function yh(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function zh(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        f = i;
        c[a + 8 >> 2] = b;
        c[a + 12 >> 2] = d;
        h = +g[e >> 2] - +g[b + 12 >> 2];
        j = e + 4 | 0;
        k = +g[j >> 2] - +g[b + 16 >> 2];
        l = +g[b + 24 >> 2];
        m = +g[b + 20 >> 2];
        n = +(h * l + k * m);
        o = +(l * k - h * m);
        p = a + 20 | 0;
        g[p >> 2] = n;
        g[p + 4 >> 2] = o;
        o = +g[e >> 2] - +g[d + 12 >> 2];
        n = +g[j >> 2] - +g[d + 16 >> 2];
        m = +g[d + 24 >> 2];
        h = +g[d + 20 >> 2];
        k = +(o * m + n * h);
        l = +(m *
        n - o * h);
        j = a + 28 | 0;
        g[j >> 2] = k;
        g[j + 4 >> 2] = l;
        g[a + 36 >> 2] = +g[d + 72 >> 2] - +g[b + 72 >> 2];
        i = f;
        return
    }
    function Ah(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0;
        e = i;
        vh(b, d);
        c[b >> 2] = 4368;
        f = d + 20 | 0;
        h = c[f + 4 >> 2] | 0;
        j = b + 68 | 0;
        c[j >> 2] = c[f >> 2];
        c[j + 4 >> 2] = h;
        h = d + 28 | 0;
        j = c[h + 4 >> 2] | 0;
        f = b + 76 | 0;
        c[f >> 2] = c[h >> 2];
        c[f + 4 >> 2] = j;
        g[b + 116 >> 2] = +g[d + 36 >> 2];
        j = b + 84 | 0;
        f = d + 44 | 0;
        c[j + 0 >> 2] = 0;
        c[j + 4 >> 2] = 0;
        c[j + 8 >> 2] = 0;
        c[j + 12 >> 2] = 0;
        g[b + 120 >> 2] = +g[f >> 2];
        g[b + 124 >> 2] = +g[d + 48 >> 2];
        g[b + 104 >> 2] = +g[d + 60 >> 2];
        g[b + 108 >> 2] = +g[d + 56 >> 2];
        a[b + 112 >> 0] = a[d + 40 >> 0] | 0;
        a[b + 100 >> 0] = a[d +
        52 >> 0] | 0;
        c[b + 224 >> 2] = 0;
        i = e;
        return
    }
    function Bh(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0;
        e = i;
        f = c[b + 48 >> 2] | 0;
        h = c[f + 8 >> 2] | 0;
        j = b + 128 | 0;
        c[j >> 2] = h;
        l = c[b + 52 >> 2] | 0;
        m = c[l + 8 >> 2] | 0;
        n = b + 132 | 0;
        c[n >> 2] = m;
        o = f + 44 | 0;
        p = c[o >> 2] | 0;
        q = c[o + 4 >> 2] | 0;
        o = b + 152 | 0;
        c[o >> 2] =
        p;
        c[o + 4 >> 2] = q;
        o = l + 44 | 0;
        r = c[o >> 2] | 0;
        s = c[o + 4 >> 2] | 0;
        o = b + 160 | 0;
        c[o >> 2] = r;
        c[o + 4 >> 2] = s;
        o = b + 168 | 0;
        g[o >> 2] = +g[f + 136 >> 2];
        t = +g[l + 136 >> 2];
        g[b + 172 >> 2] = t;
        u = +g[f + 144 >> 2];
        g[b + 176 >> 2] = u;
        v = +g[l + 144 >> 2];
        g[b + 180 >> 2] = v;
        l = c[d + 28 >> 2] | 0;
        w = +g[l + (h * 12 | 0) + 8 >> 2];
        f = d + 32 | 0;
        x = c[f >> 2] | 0;
        y = x + (h * 12 | 0) | 0;
        z = +g[y >> 2];
        A = +g[y + 4 >> 2];
        B = +g[x + (h * 12 | 0) + 8 >> 2];
        C = +g[l + (m * 12 | 0) + 8 >> 2];
        l = x + (m * 12 | 0) | 0;
        D = +g[l >> 2];
        E = +g[l + 4 >> 2];
        F = +g[x + (m * 12 | 0) + 8 >> 2];
        G = +T(+w);
        H = +S(+w);
        I = +T(+C);
        J = +S(+C);
        m = b + 136 | 0;
        K = +g[b + 68 >> 2] - (c[k >> 2] = p, +g[k >> 2]);
        L = +g[b + 72 >> 2] - (c[k >>
        2] = q, +g[k >> 2]);
        M = H * K - G * L;
        N = G * K + H * L;
        L = +M;
        H = +N;
        q = m;
        g[q >> 2] = L;
        g[q + 4 >> 2] = H;
        H = +g[b + 76 >> 2] - (c[k >> 2] = r, +g[k >> 2]);
        L = +g[b + 80 >> 2] - (c[k >> 2] = s, +g[k >> 2]);
        K = J * H - I * L;
        G = I * H + J * L;
        L = +K;
        J = +G;
        s = b + 144 | 0;
        g[s >> 2] = L;
        g[s + 4 >> 2] = J;
        J = +g[o >> 2];
        L = u + v;
        o = L == 0;
        H = J + t;
        s = b + 140 | 0;
        g[b + 184 >> 2] = H + u * N * N + v * G * G;
        I = -(u * N * M) - v * G * K;
        g[b + 196 >> 2] = I;
        O = -(u * N) - v * G;
        g[b + 208 >> 2] = O;
        g[b + 188 >> 2] = I;
        g[b + 200 >> 2] = H + u * M * M + v * K * K;
        H = u * M + v * K;
        g[b + 212 >> 2] = H;
        g[b + 192 >> 2] = O;
        g[b + 204 >> 2] = H;
        g[b + 216 >> 2] = L;
        if (L > 0)
            P = 1 / L;
        else
            P = L;
        g[b + 220 >> 2] = P;
        if ((a[b + 100 >> 0] | 0) == 0 | o)
            g[b + 96 >>
            2] = 0;
        do if ((a[b + 112 >> 0] | 0) == 0 | o)
            c[b + 224 >> 2] = 0;
        else {
            P = C - w - +g[b + 116 >> 2];
            L = +g[b + 124 >> 2];
            H = +g[b + 120 >> 2];
            O = L - H;
            if (O > 0)
                Q = O;
            else
                Q = -O;
            if (Q < .06981317698955536) {
                c[b + 224 >> 2] = 3;
                break
            }
            if (P <= H) {
                r = b + 224 | 0;
                if ((c[r >> 2] | 0) != 1)
                    g[b + 92 >> 2] = 0;
                c[r >> 2] = 1;
                break
            }
            r = b + 224 | 0;
            if (!(P >= L)) {
                c[r >> 2] = 0;
                g[b + 92 >> 2] = 0;
                break
            }
            if ((c[r >> 2] | 0) != 2)
                g[b + 92 >> 2] = 0;
            c[r >> 2] = 2
        }
        while (0);
        o = b + 84 | 0;
        if ((a[d + 24 >> 0] | 0) == 0) {
            c[o + 0 >> 2] = 0;
            c[o + 4 >> 2] = 0;
            c[o + 8 >> 2] = 0;
            c[o + 12 >> 2] = 0;
            R = z;
            U = A;
            V = D;
            W = E;
            X = B;
            Y = F;
            Z = c[j >> 2] | 0;
            _ = c[f >> 2] | 0;
            $ = _ + (Z * 12 | 0) | 0;
            aa = +R;
            ba = +U;
            ca = $;
            da =
            ca;
            g[da >> 2] = aa;
            ea = ca + 4 | 0;
            fa = ea;
            g[fa >> 2] = ba;
            ga = c[j >> 2] | 0;
            ha = c[f >> 2] | 0;
            ia = ha + (ga * 12 | 0) + 8 | 0;
            g[ia >> 2] = X;
            ja = c[n >> 2] | 0;
            ka = ha + (ja * 12 | 0) | 0;
            la = +V;
            ma = +W;
            na = ka;
            oa = na;
            g[oa >> 2] = la;
            pa = na + 4 | 0;
            qa = pa;
            g[qa >> 2] = ma;
            ra = c[n >> 2] | 0;
            sa = c[f >> 2] | 0;
            ta = sa + (ra * 12 | 0) + 8 | 0;
            g[ta >> 2] = Y;
            i = e;
            return
        } else {
            r = d + 8 | 0;
            Q = +g[r >> 2];
            w = Q * +g[o >> 2];
            g[o >> 2] = w;
            o = b + 88 | 0;
            C = Q * +g[o >> 2];
            g[o >> 2] = C;
            o = b + 92 | 0;
            L = Q * +g[o >> 2];
            g[o >> 2] = L;
            o = b + 96 | 0;
            Q = +g[r >> 2] * +g[o >> 2];
            g[o >> 2] = Q;
            R = z - J * w;
            U = A - J * C;
            V = D + t * w;
            W = E + t * C;
            X = B - u * (L + (Q + (C * +g[m >> 2] - w * +g[s >> 2])));
            Y = F + v * (L + (Q + (C * K - w *
            G)));
            Z = c[j >> 2] | 0;
            _ = c[f >> 2] | 0;
            $ = _ + (Z * 12 | 0) | 0;
            aa = +R;
            ba = +U;
            ca = $;
            da = ca;
            g[da >> 2] = aa;
            ea = ca + 4 | 0;
            fa = ea;
            g[fa >> 2] = ba;
            ga = c[j >> 2] | 0;
            ha = c[f >> 2] | 0;
            ia = ha + (ga * 12 | 0) + 8 | 0;
            g[ia >> 2] = X;
            ja = c[n >> 2] | 0;
            ka = ha + (ja * 12 | 0) | 0;
            la = +V;
            ma = +W;
            na = ka;
            oa = na;
            g[oa >> 2] = la;
            pa = na + 4 | 0;
            qa = pa;
            g[qa >> 2] = ma;
            ra = c[n >> 2] | 0;
            sa = c[f >> 2] | 0;
            ta = sa + (ra * 12 | 0) + 8 | 0;
            g[ta >> 2] = Y;
            i = e;
            return
        }
    }
    function Ch(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Da = 0,
            Ea = 0,
            Fa = 0,
            Ga = 0,
            Ha = 0;
        e = i;
        i = i + 80 | 0;
        f = e + 60 | 0;
        h = e + 48 | 0;
        j = e + 40 | 0;
        k = e + 32 | 0;
        l = e + 24 | 0;
        m = e + 16 | 0;
        n = e + 8 | 0;
        o = e;
        p = b + 128 | 0;
        q = c[p >> 2] | 0;
        r = d + 32 | 0;
        s = c[r >> 2] | 0;
        t = s + (q * 12 | 0) | 0;
        u = +g[t >> 2];
        v = +g[t + 4 >> 2];
        w = +g[s + (q * 12 | 0) + 8 >> 2];
        q = b + 132 | 0;
        t = c[q >> 2] | 0;
        x = s + (t * 12 | 0) | 0;
        y = +g[x >> 2];
        z = +g[x + 4 >> 2];
        A = +g[s + (t * 12 | 0) + 8 >> 2];
        B = +g[b + 168 >> 2];
        C = +g[b + 172 >> 2];
        D = +g[b + 176 >> 2];
        E = +g[b + 180 >> 2];
        t = D + E == 0;
        if ((a[b + 100 >> 0] | 0) != 0 ? !((c[b + 224 >> 2] | 0) == 3 | t) : 0) {
            s = b + 96 | 0;
            F = +g[s >> 2];
            G = +g[d >> 2] * +g[b + 104 >> 2];
            H = F - +g[b + 220 >> 2] * (A - w - +g[b + 108 >> 2]);
            I = -G;
            J = H < G ? H : G;
            G = J < I ? I : J;
            g[s >> 2] = G;
            J = G - F;
            K = w - D * J;
            L = A + E * J
        } else {
            K = w;
            L = A
        }
        if ((a[b + 112 >> 0] | 0) != 0 ? (s = b + 224 | 0, !((c[s >> 2] | 0) == 0 | t)) : 0) {
            t = b + 148 | 0;
            d = b + 144 | 0;
            x = b + 140 | 0;
            M = b + 136 | 0;
            A = y - L * +g[t >> 2] - u + K * +g[x >> 2];
            w = z + L * +g[d >> 2] - v - K * +g[M >> 2];
            g[f >> 2] = A;
            g[f + 4 >> 2] = w;
            g[f + 8 >> 2] = L - K;
            N = b + 184 | 0;
            Gm(h, N, f);
            J = +g[h >> 2];
            F = -J;
            G = +g[h + 4 >> 2];
            I = -G;
            H = +g[h +
            8 >> 2];
            O = -H;
            h = c[s >> 2] | 0;
            do if ((h | 0) == 2) {
                s = b + 84 | 0;
                f = b + 92 | 0;
                P = +g[f >> 2];
                Q = P - H;
                if (Q > 0) {
                    R = P * +g[b + 212 >> 2] - w;
                    g[l >> 2] = P * +g[b + 208 >> 2] - A;
                    g[l + 4 >> 2] = R;
                    Hm(m, N, l);
                    R = +g[m >> 2];
                    P = +g[m + 4 >> 2];
                    S = -+g[f >> 2];
                    g[s >> 2] = R + +g[s >> 2];
                    T = b + 88 | 0;
                    g[T >> 2] = P + +g[T >> 2];
                    g[f >> 2] = 0;
                    U = P;
                    V = R;
                    W = S;
                    break
                } else {
                    g[s >> 2] = +g[s >> 2] - J;
                    s = b + 88 | 0;
                    g[s >> 2] = +g[s >> 2] - G;
                    g[f >> 2] = Q;
                    U = I;
                    V = F;
                    W = O;
                    break
                }
            } else if ((h | 0) == 3) {
                f = b + 84 | 0;
                g[f >> 2] = +g[f >> 2] - J;
                f = b + 88 | 0;
                g[f >> 2] = +g[f >> 2] - G;
                f = b + 92 | 0;
                g[f >> 2] = +g[f >> 2] - H;
                U = I;
                V = F;
                W = O
            } else if ((h | 0) == 1) {
                f = b + 84 | 0;
                s = b + 92 | 0;
                Q = +g[s >> 2];
                S = Q - H;
                if (S < 0) {
                    R = Q * +g[b + 212 >> 2] - w;
                    g[j >> 2] = Q * +g[b + 208 >> 2] - A;
                    g[j + 4 >> 2] = R;
                    Hm(k, N, j);
                    R = +g[k >> 2];
                    Q = +g[k + 4 >> 2];
                    P = -+g[s >> 2];
                    g[f >> 2] = R + +g[f >> 2];
                    T = b + 88 | 0;
                    g[T >> 2] = Q + +g[T >> 2];
                    g[s >> 2] = 0;
                    U = Q;
                    V = R;
                    W = P;
                    break
                } else {
                    g[f >> 2] = +g[f >> 2] - J;
                    f = b + 88 | 0;
                    g[f >> 2] = +g[f >> 2] - G;
                    g[s >> 2] = S;
                    U = I;
                    V = F;
                    W = O;
                    break
                }
            } else {
                U = I;
                V = F;
                W = O
            }
            while (0);
            X = W + (U * +g[d >> 2] - V * +g[t >> 2]);
            Y = W + (U * +g[M >> 2] - V * +g[x >> 2]);
            Z = U;
            _ = V;
            $ = C * _;
            aa = C * Z;
            ba = B * _;
            ca = B * Z;
            da = y + $;
            ea = z + aa;
            fa = u - ba;
            ga = v - ca;
            ha = D * Y;
            ia = E * X;
            ja = K - ha;
            ka = L + ia;
            la = c[p >> 2] | 0;
            ma = c[r >> 2] | 0;
            na = ma + (la * 12 | 0) | 0;
            oa = +fa;
            pa = +ga;
            qa = na;
            ra = qa;
            g[ra >> 2] = oa;
            sa = qa + 4 | 0;
            ta = sa;
            g[ta >> 2] = pa;
            ua = c[p >> 2] | 0;
            va = c[r >> 2] | 0;
            wa = va + (ua * 12 | 0) + 8 | 0;
            g[wa >> 2] = ja;
            xa = c[q >> 2] | 0;
            ya = va + (xa * 12 | 0) | 0;
            za = +da;
            Aa = +ea;
            Ba = ya;
            Ca = Ba;
            g[Ca >> 2] = za;
            Da = Ba + 4 | 0;
            Ea = Da;
            g[Ea >> 2] = Aa;
            Fa = c[q >> 2] | 0;
            Ga = c[r >> 2] | 0;
            Ha = Ga + (Fa * 12 | 0) + 8 | 0;
            g[Ha >> 2] = ka;
            i = e;
            return
        }
        x = b + 148 | 0;
        M = b + 144 | 0;
        t = b + 140 | 0;
        d = b + 136 | 0;
        V = -(z + L * +g[M >> 2] - v - K * +g[d >> 2]);
        g[o >> 2] = -(y - L * +g[x >> 2] - u + K * +g[t >> 2]);
        g[o + 4 >> 2] = V;
        Hm(n, b + 184 | 0, o);
        V = +g[n >> 2];
        o = b + 84 | 0;
        g[o >> 2] = V + +g[o >> 2];
        U = +g[n + 4 >> 2];
        n = b + 88 | 0;
        g[n >> 2] = U + +g[n >> 2];
        X = U * +g[M >> 2] - V * +g[x >> 2];
        Y = U * +g[d >> 2] - V * +g[t >> 2];
        Z = U;
        _ = V;
        $ = C * _;
        aa = C * Z;
        ba = B * _;
        ca = B * Z;
        da = y + $;
        ea = z + aa;
        fa = u - ba;
        ga = v - ca;
        ha = D * Y;
        ia = E * X;
        ja = K - ha;
        ka = L + ia;
        la = c[p >> 2] | 0;
        ma = c[r >> 2] | 0;
        na = ma + (la * 12 | 0) | 0;
        oa = +fa;
        pa = +ga;
        qa = na;
        ra = qa;
        g[ra >> 2] = oa;
        sa = qa + 4 | 0;
        ta = sa;
        g[ta >> 2] = pa;
        ua = c[p >> 2] | 0;
        va = c[r >> 2] | 0;
        wa = va + (ua * 12 | 0) + 8 | 0;
        g[wa >> 2] = ja;
        xa = c[q >> 2] | 0;
        ya = va + (xa * 12 | 0) | 0;
        za = +da;
        Aa = +ea;
        Ba = ya;
        Ca = Ba;
        g[Ca >> 2] = za;
        Da = Ba + 4 | 0;
        Ea = Da;
        g[Ea >> 2] = Aa;
        Fa = c[q >> 2] | 0;
        Ga = c[r >> 2] | 0;
        Ha = Ga + (Fa * 12 | 0) + 8 | 0;
        g[Ha >> 2] = ka;
        i = e;
        return
    }
    function Dh(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0;
        e = i;
        f = b + 128 | 0;
        h = c[f >> 2] | 0;
        j = d + 28 | 0;
        d = c[j >> 2] | 0;
        k = d + (h * 12 | 0) | 0;
        l = k;
        m = +g[l >> 2];
        n = +g[l + 4 >> 2];
        o = +g[d + (h * 12 | 0) + 8 >> 2];
        h = b + 132 | 0;
        l = c[h >> 2] | 0;
        p = d + (l * 12 | 0) | 0;
        q = +g[p >> 2];
        r = +g[p + 4 >> 2];
        s = +g[d + (l * 12 | 0) + 8 >> 2];
        l = b + 176 | 0;
        d = b + 180 | 0;
        if ((a[b + 112 >> 0] | 0) != 0) {
            t = +g[d >> 2];
            u = +g[l >> 2];
            p = c[b + 224 >> 2] | 0;
            if ((p | 0) == 0 | t + u == 0) {
                v = u;
                w = t;
                x = o;
                y = s;
                z = 0
            } else {
                A = s - o - +g[b + 116 >> 2];
                if ((p | 0) == 1) {
                    B = A - +g[b +
                    120 >> 2];
                    C = B + .03490658849477768;
                    D = C < 0 ? C : 0;
                    E = -B;
                    F = -(+g[b + 220 >> 2] * (D < -.13962635397911072 ? -.13962635397911072 : D))
                } else if ((p | 0) == 3) {
                    D = A - +g[b + 120 >> 2];
                    B = D < .13962635397911072 ? D : .13962635397911072;
                    D = B < -.13962635397911072 ? -.13962635397911072 : B;
                    B = -(+g[b + 220 >> 2] * D);
                    if (D > 0) {
                        E = D;
                        F = B
                    } else {
                        E = -D;
                        F = B
                    }
                } else if ((p | 0) == 2) {
                    B = A - +g[b + 124 >> 2];
                    A = B + -.03490658849477768;
                    D = A < .13962635397911072 ? A : .13962635397911072;
                    E = B;
                    F = -(+g[b + 220 >> 2] * (D < 0 ? 0 : D))
                } else {
                    E = 0;
                    F = 0
                }
                v = u;
                w = t;
                x = o - F * u;
                y = s + F * t;
                z = E
            }
        } else {
            v = +g[l >> 2];
            w = +g[d >> 2];
            x = o;
            y = s;
            z = 0
        }
        s =
        +T(+x);
        o = +S(+x);
        E = +T(+y);
        t = +S(+y);
        F = +g[b + 68 >> 2] - +g[b + 152 >> 2];
        u = +g[b + 72 >> 2] - +g[b + 156 >> 2];
        D = o * F - s * u;
        B = s * F + o * u;
        u = +g[b + 76 >> 2] - +g[b + 160 >> 2];
        o = +g[b + 80 >> 2] - +g[b + 164 >> 2];
        F = t * u - E * o;
        s = E * u + t * o;
        o = q + F - m - D;
        t = r + s - n - B;
        u = +Q(+(o * o + t * t));
        E = +g[b + 168 >> 2];
        A = +g[b + 172 >> 2];
        C = E + A;
        G = C + B * B * v + s * s * w;
        H = D * v;
        I = F * w;
        J = -(B * H) - s * I;
        K = C + D * H + F * I;
        I = G * K - J * J;
        if (I != 0)
            L = 1 / I;
        else
            L = I;
        I = -((o * K - t * J) * L);
        K = -((t * G - o * J) * L);
        L = +(m - E * I);
        m = +(n - E * K);
        b = k;
        g[b >> 2] = L;
        g[b + 4 >> 2] = m;
        b = c[j >> 2] | 0;
        g[b + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = x - v * (D * K - B * I);
        B = +(q + A * I);
        q = +(r + A * K);
        f =
        b + ((c[h >> 2] | 0) * 12 | 0) | 0;
        g[f >> 2] = B;
        g[f + 4 >> 2] = q;
        g[(c[j >> 2] | 0) + ((c[h >> 2] | 0) * 12 | 0) + 8 >> 2] = y + w * (F * K - s * I);
        if (!(u <= .004999999888241291)) {
            M = 0;
            i = e;
            return M | 0
        }
        M = z <= .03490658849477768;
        i = e;
        return M | 0
    }
    function Eh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 48 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 68 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 72 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Fh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 76 >> 2];
        h = +g[d + 20 >> 2];
        i =
        +g[b + 80 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Gh(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0;
        d = +g[b + 88 >> 2] * c;
        g[a >> 2] = +g[b + 84 >> 2] * c;
        g[a + 4 >> 2] = d;
        return
    }
    function Hh(a, b) {
        a = a | 0;
        b = +b;
        return +(+g[a + 92 >> 2] * b)
    }
    function Ih(a) {
        a = a | 0;
        return +(+g[(c[a + 52 >> 2] | 0) + 72 >> 2] - +g[(c[a + 48 >> 2] | 0) + 72 >> 2] - +g[a + 116 >> 2])
    }
    function Jh(b) {
        b = b | 0;
        return (a[b + 100 >> 0] | 0) != 0 | 0
    }
    function Kh(d, f) {
        d = d | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        h = i;
        j = c[d + 48 >> 2] | 0;
        k = j + 4 | 0;
        l = e[k >> 1] | 0;
        if ((l & 2 | 0) == 0) {
            b[k >> 1] = l | 2;
            g[j +
            160 >> 2] = 0
        }
        j = c[d + 52 >> 2] | 0;
        l = j + 4 | 0;
        k = e[l >> 1] | 0;
        if ((k & 2 | 0) != 0) {
            m = d + 100 | 0;
            n = f & 1;
            a[m >> 0] = n;
            i = h;
            return
        }
        b[l >> 1] = k | 2;
        g[j + 160 >> 2] = 0;
        m = d + 100 | 0;
        n = f & 1;
        a[m >> 0] = n;
        i = h;
        return
    }
    function Lh(a, d) {
        a = a | 0;
        d = +d;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        f = i;
        h = c[a + 48 >> 2] | 0;
        j = h + 4 | 0;
        k = e[j >> 1] | 0;
        if ((k & 2 | 0) == 0) {
            b[j >> 1] = k | 2;
            g[h + 160 >> 2] = 0
        }
        h = c[a + 52 >> 2] | 0;
        k = h + 4 | 0;
        j = e[k >> 1] | 0;
        if ((j & 2 | 0) != 0) {
            l = a + 108 | 0;
            g[l >> 2] = d;
            i = f;
            return
        }
        b[k >> 1] = j | 2;
        g[h + 160 >> 2] = 0;
        l = a + 108 | 0;
        g[l >> 2] = d;
        i = f;
        return
    }
    function Mh(b) {
        b = b | 0;
        return (a[b + 112 >> 0] | 0) != 0 | 0
    }
    function Nh(f, h) {
        f = f | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        j = i;
        k = f + 112 | 0;
        if ((h & 1 | 0) == (d[k >> 0] | 0 | 0)) {
            i = j;
            return
        }
        l = c[f + 48 >> 2] | 0;
        m = l + 4 | 0;
        n = e[m >> 1] | 0;
        if ((n & 2 | 0) == 0) {
            b[m >> 1] = n | 2;
            g[l + 160 >> 2] = 0
        }
        l = c[f + 52 >> 2] | 0;
        n = l + 4 | 0;
        m = e[n >> 1] | 0;
        if ((m & 2 | 0) == 0) {
            b[n >> 1] = m | 2;
            g[l + 160 >> 2] = 0
        }
        a[k >> 0] = h & 1;
        g[f + 92 >> 2] = 0;
        i = j;
        return
    }
    function Oh(a) {
        a = a | 0;
        var b = 0,
            e = 0,
            f = 0,
            j = 0,
            l = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) + 8 >> 2] | 0;
        Rm(4416, e);
        c[e >> 2] = f;
        Rm(4448, e);
        c[e >> 2] = j;
        Rm(4480, e);
        c[e >> 2] = d[a + 61 >> 0] | 0;
        Rm(4512, e);
        l = +g[a + 72 >> 2];
        h[k >> 3] = +g[a + 68 >>
        2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(4552, e);
        l = +g[a + 80 >> 2];
        h[k >> 3] = +g[a + 76 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(4600, e);
        h[k >> 3] = +g[a + 116 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(4648, e);
        c[e >> 2] = d[a + 112 >> 0] | 0;
        Rm(4680, e);
        h[k >> 3] = +g[a + 120 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(4712, e);
        h[k >> 3] = +g[a + 124 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(4744, e);
        c[e >> 2] = d[a + 100 >> 0] | 0;
        Rm(4776,
        e);
        h[k >> 3] = +g[a + 108 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(4808, e);
        h[k >> 3] = +g[a + 104 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(4840, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(4872, e);
        i = b;
        return
    }
    function Ph(a) {
        a = a | 0;
        return
    }
    function Qh(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Rh(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0;
        h = i;
        c[a + 8 >> 2] = b;
        c[a + 12 >> 2] = d;
        j = +g[e >> 2] - +g[b + 12 >> 2];
        k = e + 4 | 0;
        l = +g[k >> 2] - +g[b + 16 >> 2];
        m = b + 24 | 0;
        n = +g[m >> 2];
        o = b + 20 | 0;
        p = +g[o >> 2];
        q = +(j * n + l * p);
        r = +(n * l - j *
        p);
        b = a + 20 | 0;
        g[b >> 2] = q;
        g[b + 4 >> 2] = r;
        r = +g[e >> 2] - +g[d + 12 >> 2];
        q = +g[k >> 2] - +g[d + 16 >> 2];
        p = +g[d + 24 >> 2];
        j = +g[d + 20 >> 2];
        l = +(r * p + q * j);
        n = +(p * q - r * j);
        d = a + 28 | 0;
        g[d >> 2] = l;
        g[d + 4 >> 2] = n;
        n = +g[m >> 2];
        l = +g[f >> 2];
        j = +g[o >> 2];
        r = +g[f + 4 >> 2];
        q = +(n * l + j * r);
        p = +(n * r - l * j);
        f = a + 36 | 0;
        g[f >> 2] = q;
        g[f + 4 >> 2] = p;
        i = h;
        return
    }
    function Sh(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0;
        e = i;
        vh(b, d);
        c[b >> 2] = 4968;
        f = d + 20 | 0;
        h = c[f + 4 >> 2] | 0;
        j = b + 76 | 0;
        c[j >> 2] = c[f >> 2];
        c[j + 4 >> 2] = h;
        h = d + 28 | 0;
        j = c[h + 4 >> 2] | 0;
        f = b + 84 | 0;
        c[f >> 2] = c[h >> 2];
        c[f + 4 >> 2] = j;
        j = d + 36 | 0;
        f = c[j >> 2] | 0;
        h = c[j + 4 >>
        2] | 0;
        j = b + 92 | 0;
        c[j >> 2] = f;
        c[j + 4 >> 2] = h;
        j = b + 100 | 0;
        g[j >> 2] = -(c[k >> 2] = h, +g[k >> 2]);
        c[j + 4 >> 2] = f;
        g[b + 204 >> 2] = 0;
        g[b + 108 >> 2] = 0;
        g[b + 208 >> 2] = 0;
        g[b + 112 >> 2] = 0;
        g[b + 212 >> 2] = 0;
        g[b + 116 >> 2] = 0;
        g[b + 120 >> 2] = +g[d + 48 >> 2];
        g[b + 124 >> 2] = +g[d + 52 >> 2];
        a[b + 128 >> 0] = a[d + 44 >> 0] | 0;
        g[b + 68 >> 2] = +g[d + 56 >> 2];
        g[b + 72 >> 2] = +g[d + 60 >> 2];
        g[b + 216 >> 2] = 0;
        g[b + 220 >> 2] = 0;
        d = b + 172 | 0;
        c[d + 0 >> 2] = 0;
        c[d + 4 >> 2] = 0;
        c[d + 8 >> 2] = 0;
        c[d + 12 >> 2] = 0;
        i = e;
        return
    }
    function Th(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0;
        e = i;
        f = c[b + 48 >> 2] | 0;
        h = c[f + 8 >> 2] | 0;
        j = b + 132 | 0;
        c[j >> 2] = h;
        l = c[b + 52 >> 2] | 0;
        m = c[l + 8 >> 2] | 0;
        n = b + 136 | 0;
        c[n >> 2] = m;
        o = f + 44 | 0;
        p = c[o >> 2] | 0;
        q = c[o + 4 >> 2] | 0;
        o = b + 140 | 0;
        c[o >> 2] = p;
        c[o + 4 >> 2] = q;
        o = l + 44 | 0;
        r = c[o >> 2] | 0;
        s = c[o + 4 >> 2] | 0;
        o = b + 148 | 0;
        c[o >> 2] = r;
        c[o + 4 >> 2] = s;
        t = +g[f + 136 >> 2];
        o = b + 156 | 0;
        g[o >> 2] = t;
        u = +g[l + 136 >> 2];
        v = b + 160 | 0;
        g[v >> 2] = u;
        w = +g[f + 144 >> 2];
        f = b + 164 | 0;
        g[f >> 2] = w;
        x = +g[l + 144 >> 2];
        l = b + 168 | 0;
        g[l >> 2] = x;
        y = c[d + 28 >> 2] | 0;
        z = y + (h * 12 | 0) | 0;
        A = +g[z >> 2];
        B = +g[z + 4 >> 2];
        C = +g[y + (h * 12 | 0) + 8 >> 2];
        z = d + 32 | 0;
        D = c[z >> 2] | 0;
        E = D + (h * 12 | 0) | 0;
        F = +g[E >> 2];
        G = +g[E + 4 >> 2];
        H = +g[D + (h * 12 | 0) + 8 >> 2];
        h = y + (m * 12 | 0) | 0;
        I = +g[h >> 2];
        J = +g[h + 4 >> 2];
        K = +g[y + (m * 12 | 0) + 8 >> 2];
        y = D + (m * 12 | 0) | 0;
        L = +g[y >> 2];
        M = +g[y + 4 >> 2];
        N = +g[D + (m * 12 | 0) + 8 >> 2];
        O = +T(+C);
        P = +S(+C);
        C = +T(+K);
        Q = +S(+K);
        K = +g[b + 76 >> 2] - (c[k >> 2] = p, +g[k >> 2]);
        R = +g[b + 80 >> 2] - (c[k >> 2] = q, +g[k >> 2]);
        U = P * K - O * R;
        V = O * K + P * R;
        R = +g[b + 84 >> 2] - (c[k >> 2] = r, +g[k >> 2]);
        K = +g[b + 88 >> 2] - (c[k >> 2] = s, +g[k >> 2]);
        W = Q * R - C * K;
        X = C * R + Q * K;
        K = I + W - A - U;
        A = J + X - B - V;
        B = +g[b + 100 >> 2];
        J = +g[b + 104 >> 2];
        I = P * B - O * J;
        Q = O * B + P * J;
        J = +I;
        B = +Q;
        s = b + 180 | 0;
        g[s >> 2] = J;
        g[s + 4 >> 2] = B;
        B = U + K;
        U = V + A;
        V = Q * B - I * U;
        g[b + 196 >> 2] = V;
        J = W * Q - X * I;
        g[b + 200 >> 2] = J;
        R = t + u;
        u = R + V * w * V + J * x * J;
        if (u > 0)
            Y = 1 / u;
        else
            Y = u;
        g[b + 204 >> 2] = Y;
        s = b + 212 | 0;
        g[s >> 2] = 0;
        r = b + 216 | 0;
        g[r >> 2] = 0;
        q = b + 220 | 0;
        g[q >> 2] = 0;
        Y = +g[b + 68 >> 2];
        if (Y > 0) {
            u = +g[b + 92 >> 2];
            t = +g[b + 96 >> 2];
            C = P * u - O * t;
            Z = O * u + P * t;
            t = +C;
            P = +Z;
            p = b + 172 | 0;
            g[p >> 2] = t;
            g[p +
            4 >> 2] = P;
            P = B * Z - U * C;
            g[b + 188 >> 2] = P;
            U = W * Z - X * C;
            g[b + 192 >> 2] = U;
            X = R + P * w * P + U * x * U;
            if (X > 0) {
                U = 1 / X;
                g[s >> 2] = U;
                P = Y * 6.2831854820251465;
                Y = P * U * P;
                R = +g[d >> 2];
                W = R * (P * U * 2 * +g[b + 72 >> 2] + R * Y);
                if (W > 0)
                    _ = 1 / W;
                else
                    _ = W;
                g[q >> 2] = _;
                g[r >> 2] = (K * C + A * Z) * R * Y * _;
                Y = X + _;
                g[s >> 2] = Y;
                if (Y > 0)
                    g[s >> 2] = 1 / Y
            }
        } else
            g[b + 116 >> 2] = 0;
        if ((a[b + 128 >> 0] | 0) != 0) {
            Y = x + w;
            s = b + 208 | 0;
            g[s >> 2] = Y;
            if (Y > 0)
                g[s >> 2] = 1 / Y
        } else {
            g[b + 208 >> 2] = 0;
            g[b + 112 >> 2] = 0
        }
        if ((a[d + 24 >> 0] | 0) == 0) {
            g[b + 108 >> 2] = 0;
            g[b + 116 >> 2] = 0;
            g[b + 112 >> 2] = 0;
            $ = F;
            aa = G;
            ba = L;
            ca = M;
            da = H;
            ea = N;
            fa = c[j >> 2] | 0;
            ga = c[z >> 2] | 0;
            ha = ga +
            (fa * 12 | 0) | 0;
            ia = +$;
            ja = +aa;
            ka = ha;
            la = ka;
            g[la >> 2] = ia;
            ma = ka + 4 | 0;
            na = ma;
            g[na >> 2] = ja;
            oa = c[j >> 2] | 0;
            pa = c[z >> 2] | 0;
            qa = pa + (oa * 12 | 0) + 8 | 0;
            g[qa >> 2] = da;
            ra = c[n >> 2] | 0;
            sa = pa + (ra * 12 | 0) | 0;
            ta = +ba;
            ua = +ca;
            va = sa;
            wa = va;
            g[wa >> 2] = ta;
            xa = va + 4 | 0;
            ya = xa;
            g[ya >> 2] = ua;
            za = c[n >> 2] | 0;
            Aa = c[z >> 2] | 0;
            Ba = Aa + (za * 12 | 0) + 8 | 0;
            g[Ba >> 2] = ea;
            i = e;
            return
        } else {
            s = d + 8 | 0;
            d = b + 108 | 0;
            Y = +g[s >> 2] * +g[d >> 2];
            g[d >> 2] = Y;
            d = b + 116 | 0;
            w = +g[s >> 2] * +g[d >> 2];
            g[d >> 2] = w;
            d = b + 112 | 0;
            x = +g[s >> 2] * +g[d >> 2];
            g[d >> 2] = x;
            _ = Y * I + w * +g[b + 172 >> 2];
            I = Y * Q + w * +g[b + 176 >> 2];
            Q = +g[o >> 2];
            X = +g[v >> 2];
            $ = F -
            _ * Q;
            aa = G - I * Q;
            ba = L + _ * X;
            ca = M + I * X;
            da = H - (x + (Y * V + w * +g[b + 188 >> 2])) * +g[f >> 2];
            ea = N + (x + (Y * J + w * +g[b + 192 >> 2])) * +g[l >> 2];
            fa = c[j >> 2] | 0;
            ga = c[z >> 2] | 0;
            ha = ga + (fa * 12 | 0) | 0;
            ia = +$;
            ja = +aa;
            ka = ha;
            la = ka;
            g[la >> 2] = ia;
            ma = ka + 4 | 0;
            na = ma;
            g[na >> 2] = ja;
            oa = c[j >> 2] | 0;
            pa = c[z >> 2] | 0;
            qa = pa + (oa * 12 | 0) + 8 | 0;
            g[qa >> 2] = da;
            ra = c[n >> 2] | 0;
            sa = pa + (ra * 12 | 0) | 0;
            ta = +ba;
            ua = +ca;
            va = sa;
            wa = va;
            g[wa >> 2] = ta;
            xa = va + 4 | 0;
            ya = xa;
            g[ya >> 2] = ua;
            za = c[n >> 2] | 0;
            Aa = c[z >> 2] | 0;
            Ba = Aa + (za * 12 | 0) + 8 | 0;
            g[Ba >> 2] = ea;
            i = e;
            return
        }
    }
    function Uh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l =
            0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0;
        d = i;
        e = +g[a + 156 >> 2];
        f = +g[a + 160 >> 2];
        h = +g[a + 164 >> 2];
        j = +g[a + 168 >> 2];
        k = a + 132 | 0;
        l = c[k >> 2] | 0;
        m = b + 32 | 0;
        n = c[m >> 2] | 0;
        o = n + (l * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[n + (l * 12 | 0) + 8 >> 2];
        l = a + 136 | 0;
        o = c[l >> 2] | 0;
        s = n + (o * 12 | 0) | 0;
        t = +g[s >> 2];
        u = +g[s + 4 >> 2];
        v = +g[n + (o * 12 | 0) + 8 >> 2];
        w = +g[a + 172 >> 2];
        x = +g[a + 176 >> 2];
        y = +g[a + 192 >> 2];
        z = +g[a + 188 >> 2];
        o = a + 116 | 0;
        A = +g[o >> 2];
        B = +g[a + 212 >> 2] * (+g[a + 216 >> 2] + (v * y + (w * (t - p) + x * (u - q)) - r * z) + +g[a + 220 >> 2] * A);
        C = -B;
        g[o >> 2] = A - B;
        B = w * C;
        w =
        x * C;
        x = p - e * B;
        p = q - e * w;
        q = r - h * z * C;
        z = t + f * B;
        B = u + f * w;
        w = v + j * y * C;
        o = a + 112 | 0;
        C = +g[o >> 2];
        y = +g[b >> 2] * +g[a + 120 >> 2];
        v = C - +g[a + 208 >> 2] * (w - q - +g[a + 124 >> 2]);
        u = -y;
        t = v < y ? v : y;
        y = t < u ? u : t;
        g[o >> 2] = y;
        t = y - C;
        C = q - h * t;
        q = w + j * t;
        t = +g[a + 180 >> 2];
        w = +g[a + 184 >> 2];
        y = +g[a + 200 >> 2];
        u = +g[a + 196 >> 2];
        v = +g[a + 204 >> 2] * ((z - x) * t + (B - p) * w + y * q - u * C);
        r = -v;
        o = a + 108 | 0;
        g[o >> 2] = +g[o >> 2] - v;
        v = t * r;
        t = w * r;
        w = +(x - e * v);
        x = +(p - e * t);
        o = (c[m >> 2] | 0) + ((c[k >> 2] | 0) * 12 | 0) | 0;
        g[o >> 2] = w;
        g[o + 4 >> 2] = x;
        o = c[m >> 2] | 0;
        g[o + ((c[k >> 2] | 0) * 12 | 0) + 8 >> 2] = C - h * u * r;
        u = +(z + f * v);
        v = +(B + f * t);
        k = o + ((c[l >>
        2] | 0) * 12 | 0) | 0;
        g[k >> 2] = u;
        g[k + 4 >> 2] = v;
        g[(c[m >> 2] | 0) + ((c[l >> 2] | 0) * 12 | 0) + 8 >> 2] = q + j * y * r;
        i = d;
        return
    }
    function Vh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0;
        d = i;
        e = a + 132 | 0;
        f = c[e >> 2] | 0;
        h = b + 28 | 0;
        b = c[h >> 2] | 0;
        j = b + (f * 12 | 0) | 0;
        k = +g[j >> 2];
        l = +g[j + 4 >> 2];
        m = +g[b + (f * 12 | 0) + 8 >> 2];
        f = a + 136 | 0;
        j = c[f >> 2] | 0;
        n = b + (j * 12 | 0) | 0;
        o = +g[n >> 2];
        p = +g[n + 4 >> 2];
        q = +g[b + (j * 12 | 0) + 8 >> 2];
        r = +T(+m);
        s = +S(+m);
        t = +T(+q);
        u = +S(+q);
        v = +g[a + 76 >> 2] - +g[a + 140 >>
        2];
        w = +g[a + 80 >> 2] - +g[a + 144 >> 2];
        x = s * v - r * w;
        y = r * v + s * w;
        w = +g[a + 84 >> 2] - +g[a + 148 >> 2];
        v = +g[a + 88 >> 2] - +g[a + 152 >> 2];
        z = u * w - t * v;
        A = t * w + u * v;
        v = o - k + z - x;
        u = p - l + A - y;
        w = +g[a + 100 >> 2];
        t = +g[a + 104 >> 2];
        B = s * w - r * t;
        C = r * w + s * t;
        t = B * v + C * u;
        s = +g[a + 156 >> 2];
        w = +g[a + 160 >> 2];
        r = +g[a + 164 >> 2];
        D = +g[a + 196 >> 2];
        E = +g[a + 168 >> 2];
        F = +g[a + 200 >> 2];
        G = s + w + D * r * D + F * E * F;
        if (G != 0)
            H = -t / G;
        else
            H = 0;
        G = B * H;
        F = C * H;
        D = +(k - G * s);
        k = +(l - F * s);
        a = (c[h >> 2] | 0) + ((c[e >> 2] | 0) * 12 | 0) | 0;
        g[a >> 2] = D;
        g[a + 4 >> 2] = k;
        a = c[h >> 2] | 0;
        g[a + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = m - (C * (x + v) - B * (y + u)) * H * r;
        r = +(o + G * w);
        G = +(p + F * w);
        e = a + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = r;
        g[e + 4 >> 2] = G;
        g[(c[h >> 2] | 0) + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = q + (z * C - A * B) * H * E;
        if (t > 0) {
            I = t;
            J = I <= .004999999888241291;
            i = d;
            return J | 0
        }
        I = -t;
        J = I <= .004999999888241291;
        i = d;
        return J | 0
    }
    function Wh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 48 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 76 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 80 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Xh(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b +
        84 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 88 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Yh(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0,
            e = 0,
            f = 0;
        d = +g[b + 108 >> 2];
        e = +g[b + 116 >> 2];
        f = (d * +g[b + 184 >> 2] + e * +g[b + 176 >> 2]) * c;
        g[a >> 2] = (d * +g[b + 180 >> 2] + e * +g[b + 172 >> 2]) * c;
        g[a + 4 >> 2] = f;
        return
    }
    function Zh(a, b) {
        a = a | 0;
        b = +b;
        return +(+g[a + 112 >> 2] * b)
    }
    function _h(a, d) {
        a = a | 0;
        d = +d;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        f = i;
        h = c[a + 48 >> 2] | 0;
        j = h + 4 | 0;
        k = e[j >> 1] | 0;
        if ((k & 2 | 0) == 0) {
            b[j >> 1] = k | 2;
            g[h + 160 >> 2] = 0
        }
        h = c[a + 52 >> 2] | 0;
        k = h + 4 | 0;
        j = e[k >> 1] |
        0;
        if ((j & 2 | 0) != 0) {
            l = a + 124 | 0;
            g[l >> 2] = d;
            i = f;
            return
        }
        b[k >> 1] = j | 2;
        g[h + 160 >> 2] = 0;
        l = a + 124 | 0;
        g[l >> 2] = d;
        i = f;
        return
    }
    function $h(a) {
        a = a | 0;
        var b = 0,
            e = 0,
            f = 0,
            j = 0,
            l = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) + 8 >> 2] | 0;
        Rm(5016, e);
        c[e >> 2] = f;
        Rm(5040, e);
        c[e >> 2] = j;
        Rm(5072, e);
        c[e >> 2] = d[a + 61 >> 0] | 0;
        Rm(5104, e);
        l = +g[a + 80 >> 2];
        h[k >> 3] = +g[a + 76 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(5144, e);
        l = +g[a + 88 >> 2];
        h[k >> 3] = +g[a + 84 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] =
        c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(5192, e);
        l = +g[a + 96 >> 2];
        h[k >> 3] = +g[a + 92 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(5240, e);
        c[e >> 2] = d[a + 128 >> 0] | 0;
        Rm(5280, e);
        h[k >> 3] = +g[a + 124 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(5312, e);
        h[k >> 3] = +g[a + 120 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(5344, e);
        h[k >> 3] = +g[a + 68 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(5376, e);
        h[k >> 3] = +g[a + 72 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(5408, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(5440, e);
        i = b;
        return
    }
    function ai(a) {
        a = a | 0;
        return
    }
    function bi(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function ci(a, b, d, e, f, h, j, k) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        j = j | 0;
        k = +k;
        var l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0;
        l = i;
        c[a + 8 >> 2] = b;
        c[a + 12 >> 2] = d;
        m = e;
        n = c[m + 4 >> 2] | 0;
        o = a + 20 | 0;
        c[o >> 2] = c[m >> 2];
        c[o + 4 >> 2] = n;
        n = f;
        o = c[n + 4 >> 2] | 0;
        m = a + 28 | 0;
        c[m >> 2] = c[n >> 2];
        c[m + 4 >> 2] = o;
        p = +g[h >> 2] - +g[b + 12 >> 2];
        o = h + 4 | 0;
        q = +g[o >> 2] - +g[b + 16 >> 2];
        r = +g[b + 24 >> 2];
        s = +g[b + 20 >> 2];
        t = +(p * r + q * s);
        u = +(r * q - p * s);
        b = a +
        36 | 0;
        g[b >> 2] = t;
        g[b + 4 >> 2] = u;
        u = +g[j >> 2] - +g[d + 12 >> 2];
        b = j + 4 | 0;
        t = +g[b >> 2] - +g[d + 16 >> 2];
        s = +g[d + 24 >> 2];
        p = +g[d + 20 >> 2];
        q = +(u * s + t * p);
        r = +(s * t - u * p);
        d = a + 44 | 0;
        g[d >> 2] = q;
        g[d + 4 >> 2] = r;
        r = +g[h >> 2] - +g[e >> 2];
        q = +g[o >> 2] - +g[e + 4 >> 2];
        g[a + 52 >> 2] = +Q(+(r * r + q * q));
        q = +g[j >> 2] - +g[f >> 2];
        r = +g[b >> 2] - +g[f + 4 >> 2];
        g[a + 56 >> 2] = +Q(+(q * q + r * r));
        g[a + 60 >> 2] = k;
        i = l;
        return
    }
    function di(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0;
        d = i;
        vh(a, b);
        c[a >> 2] = 5528;
        e = b + 20 | 0;
        f = c[e + 4 >> 2] | 0;
        h = a + 68 | 0;
        c[h >> 2] = c[e >> 2];
        c[h + 4 >> 2] = f;
        f = b + 28 | 0;
        h = c[f + 4 >> 2] | 0;
        e = a + 76 | 0;
        c[e >>
        2] = c[f >> 2];
        c[e + 4 >> 2] = h;
        h = b + 36 | 0;
        e = c[h + 4 >> 2] | 0;
        f = a + 92 | 0;
        c[f >> 2] = c[h >> 2];
        c[f + 4 >> 2] = e;
        e = b + 44 | 0;
        f = c[e + 4 >> 2] | 0;
        h = a + 100 | 0;
        c[h >> 2] = c[e >> 2];
        c[h + 4 >> 2] = f;
        f = b + 52 | 0;
        g[a + 84 >> 2] = +g[f >> 2];
        h = b + 56 | 0;
        g[a + 88 >> 2] = +g[h >> 2];
        j = +g[b + 60 >> 2];
        g[a + 112 >> 2] = j;
        g[a + 108 >> 2] = +g[f >> 2] + j * +g[h >> 2];
        g[a + 116 >> 2] = 0;
        i = d;
        return
    }
    function ei(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0;
        e = i;
        f = c[b + 48 >> 2] | 0;
        h = c[f + 8 >> 2] | 0;
        j = b + 120 | 0;
        c[j >> 2] = h;
        l = c[b + 52 >> 2] | 0;
        m = c[l + 8 >> 2] | 0;
        n = b + 124 | 0;
        c[n >> 2] = m;
        o = f + 44 | 0;
        p = c[o >> 2] | 0;
        q = c[o + 4 >> 2] | 0;
        o = b + 160 | 0;
        c[o >> 2] = p;
        c[o + 4 >> 2] = q;
        o = l + 44 | 0;
        r = c[o >> 2] | 0;
        s = c[o + 4 >> 2] | 0;
        o = b + 168 | 0;
        c[o >> 2] = r;
        c[o + 4 >> 2] = s;
        s = b + 176 | 0;
        g[s >> 2] = +g[f + 136 >> 2];
        o = b + 180 | 0;
        g[o >> 2] = +g[l + 136 >> 2];
        t = b + 184 | 0;
        g[t >> 2] = +g[f + 144 >> 2];
        f = b + 188 | 0;
        g[f >> 2] = +g[l + 144 >> 2];
        l = c[d + 28 >> 2] | 0;
        u = l + (h * 12 | 0) |
        0;
        v = +g[u >> 2];
        w = +g[u + 4 >> 2];
        x = +g[l + (h * 12 | 0) + 8 >> 2];
        u = d + 32 | 0;
        y = c[u >> 2] | 0;
        z = y + (h * 12 | 0) | 0;
        A = +g[z >> 2];
        B = +g[z + 4 >> 2];
        C = +g[y + (h * 12 | 0) + 8 >> 2];
        h = l + (m * 12 | 0) | 0;
        D = +g[h >> 2];
        E = +g[h + 4 >> 2];
        F = +g[l + (m * 12 | 0) + 8 >> 2];
        l = y + (m * 12 | 0) | 0;
        G = +g[l >> 2];
        H = +g[l + 4 >> 2];
        I = +g[y + (m * 12 | 0) + 8 >> 2];
        J = +T(+x);
        K = +S(+x);
        x = +T(+F);
        L = +S(+F);
        m = b + 144 | 0;
        F = +g[b + 92 >> 2] - (c[k >> 2] = p, +g[k >> 2]);
        M = +g[b + 96 >> 2] - (c[k >> 2] = q, +g[k >> 2]);
        N = K * F - J * M;
        O = J * F + K * M;
        M = +N;
        K = +O;
        q = m;
        g[q >> 2] = M;
        g[q + 4 >> 2] = K;
        K = +g[b + 100 >> 2] - (c[k >> 2] = r, +g[k >> 2]);
        M = +g[b + 104 >> 2] - +g[b + 172 >> 2];
        F = L * K - x * M;
        J = x *
        K + L * M;
        M = +F;
        L = +J;
        r = b + 152 | 0;
        g[r >> 2] = M;
        g[r + 4 >> 2] = L;
        r = b + 128 | 0;
        L = v + N - +g[b + 68 >> 2];
        N = w + O - +g[b + 72 >> 2];
        O = +L;
        w = +N;
        q = r;
        g[q >> 2] = O;
        g[q + 4 >> 2] = w;
        q = b + 136 | 0;
        w = D + F - +g[b + 76 >> 2];
        D = E + J - +g[b + 80 >> 2];
        E = +w;
        O = +D;
        p = q;
        g[p >> 2] = E;
        g[p + 4 >> 2] = O;
        O = +Q(+(L * L + N * N));
        E = +Q(+(w * w + D * D));
        if (O > .04999999701976776) {
            v = 1 / O;
            O = L * v;
            g[r >> 2] = O;
            P = v * N;
            R = O
        } else {
            g[r >> 2] = 0;
            P = 0;
            R = 0
        }
        g[b + 132 >> 2] = P;
        if (E > .04999999701976776) {
            O = 1 / E;
            E = O * w;
            g[q >> 2] = E;
            U = O * D;
            V = E
        } else {
            g[q >> 2] = 0;
            U = 0;
            V = 0
        }
        g[b + 140 >> 2] = U;
        E = +g[m >> 2];
        D = +g[b + 148 >> 2];
        O = E * P - D * R;
        w = F * U - J * V;
        N = +g[s >> 2];
        v = +g[t >> 2];
        L = +g[o >> 2];
        M = +g[f >> 2];
        K = +g[b + 112 >> 2];
        x = N + O * O * v + K * K * (L + w * w * M);
        if (x > 0)
            W = 1 / x;
        else
            W = x;
        g[b + 192 >> 2] = W;
        if ((a[d + 24 >> 0] | 0) == 0) {
            g[b + 116 >> 2] = 0;
            X = A;
            Y = B;
            Z = G;
            _ = H;
            $ = C;
            aa = I;
            ba = c[j >> 2] | 0;
            ca = c[u >> 2] | 0;
            da = ca + (ba * 12 | 0) | 0;
            ea = +X;
            fa = +Y;
            ga = da;
            ha = ga;
            g[ha >> 2] = ea;
            ia = ga + 4 | 0;
            ja = ia;
            g[ja >> 2] = fa;
            ka = c[j >> 2] | 0;
            la = c[u >> 2] | 0;
            ma = la + (ka * 12 | 0) + 8 | 0;
            g[ma >> 2] = $;
            na = c[n >> 2] | 0;
            oa = la + (na * 12 | 0) | 0;
            pa = +Z;
            qa = +_;
            ra = oa;
            sa = ra;
            g[sa >> 2] = pa;
            ta = ra + 4 | 0;
            ua = ta;
            g[ua >> 2] = qa;
            va = c[n >> 2] | 0;
            wa = c[u >> 2] | 0;
            xa = wa + (va * 12 | 0) + 8 | 0;
            g[xa >> 2] = aa;
            i = e;
            return
        } else {
            f = b + 116 | 0;
            W = +g[d + 8 >> 2] * +g[f >> 2];
            g[f >> 2] = W;
            x = -W;
            w = R * x;
            R = P * x;
            x = -(W * K);
            K = V * x;
            V = U * x;
            X = A + w * N;
            Y = B + R * N;
            Z = G + K * L;
            _ = H + V * L;
            $ = C + v * (R * E - w * D);
            aa = I + M * (V * F - K * J);
            ba = c[j >> 2] | 0;
            ca = c[u >> 2] | 0;
            da = ca + (ba * 12 | 0) | 0;
            ea = +X;
            fa = +Y;
            ga = da;
            ha = ga;
            g[ha >> 2] = ea;
            ia = ga + 4 | 0;
            ja = ia;
            g[ja >> 2] = fa;
            ka = c[j >> 2] | 0;
            la = c[u >> 2] | 0;
            ma = la + (ka * 12 | 0) + 8 | 0;
            g[ma >> 2] = $;
            na = c[n >> 2] | 0;
            oa = la + (na * 12 | 0) | 0;
            pa = +Z;
            qa = +_;
            ra = oa;
            sa = ra;
            g[sa >> 2] = pa;
            ta = ra + 4 | 0;
            ua = ta;
            g[ua >> 2] = qa;
            va = c[n >> 2] | 0;
            wa = c[u >> 2] | 0;
            xa = wa + (va * 12 | 0) + 8 | 0;
            g[xa >> 2] = aa;
            i = e;
            return
        }
    }
    function fi(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0;
        d = i;
        e = a + 120 | 0;
        f = c[e >> 2] | 0;
        h = b + 32 | 0;
        b = c[h >> 2] | 0;
        j = b + (f * 12 | 0) | 0;
        k = j;
        l = +g[k >> 2];
        m = +g[k + 4 >> 2];
        n = +g[b + (f * 12 | 0) + 8 >> 2];
        f = a + 124 | 0;
        k = c[f >> 2] | 0;
        o = b + (k * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[b + (k * 12 | 0) + 8 >> 2];
        s = +g[a + 148 >> 2];
        t = +g[a + 144 >> 2];
        u = +g[a + 156 >> 2];
        v = +g[a + 152 >> 2];
        w = +g[a + 128 >> 2];
        x = +g[a + 132 >> 2];
        y = +g[a + 112 >> 2];
        z = +g[a + 136 >> 2];
        A = +g[a + 140 >> 2];
        B = +g[a + 192 >> 2] * (-((l - n * s) * w + (m + n * t) * x) - y * ((p - r * u) * z + (q + r * v) * A));
        k = a + 116 | 0;
        g[k >>
        2] = +g[k >> 2] - B;
        C = w * B;
        w = x * B;
        x = y * B;
        B = z * x;
        z = x * A;
        A = +g[a + 176 >> 2];
        x = n + +g[a + 184 >> 2] * (w * t - C * s);
        s = +g[a + 180 >> 2];
        t = r + +g[a + 188 >> 2] * (z * v - B * u);
        u = +(l + C * A);
        C = +(m + w * A);
        a = j;
        g[a >> 2] = u;
        g[a + 4 >> 2] = C;
        a = c[h >> 2] | 0;
        g[a + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = x;
        x = +(p + B * s);
        B = +(q + z * s);
        e = a + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = x;
        g[e + 4 >> 2] = B;
        g[(c[h >> 2] | 0) + ((c[f >> 2] | 0) * 12 | 0) + 8 >> 2] = t;
        i = d;
        return
    }
    function gi(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K =
            0,
            L = 0;
        d = i;
        e = a + 120 | 0;
        f = c[e >> 2] | 0;
        h = b + 28 | 0;
        b = c[h >> 2] | 0;
        j = b + (f * 12 | 0) | 0;
        k = j;
        l = +g[k >> 2];
        m = +g[k + 4 >> 2];
        n = +g[b + (f * 12 | 0) + 8 >> 2];
        f = a + 124 | 0;
        k = c[f >> 2] | 0;
        o = b + (k * 12 | 0) | 0;
        p = +g[o >> 2];
        q = +g[o + 4 >> 2];
        r = +g[b + (k * 12 | 0) + 8 >> 2];
        s = +T(+n);
        t = +S(+n);
        u = +T(+r);
        v = +S(+r);
        w = +g[a + 92 >> 2] - +g[a + 160 >> 2];
        x = +g[a + 96 >> 2] - +g[a + 164 >> 2];
        y = t * w - s * x;
        z = s * w + t * x;
        x = +g[a + 100 >> 2] - +g[a + 168 >> 2];
        t = +g[a + 104 >> 2] - +g[a + 172 >> 2];
        w = v * x - u * t;
        s = u * x + v * t;
        t = l + y - +g[a + 68 >> 2];
        v = m + z - +g[a + 72 >> 2];
        x = p + w - +g[a + 76 >> 2];
        u = q + s - +g[a + 80 >> 2];
        A = +Q(+(t * t + v * v));
        B = +Q(+(x * x + u * u));
        if (A > .04999999701976776) {
            C =
            1 / A;
            D = v * C;
            E = t * C
        } else {
            D = 0;
            E = 0
        }
        if (B > .04999999701976776) {
            C = 1 / B;
            F = u * C;
            G = x * C
        } else {
            F = 0;
            G = 0
        }
        C = y * D - z * E;
        x = w * F - s * G;
        u = +g[a + 176 >> 2];
        t = +g[a + 184 >> 2];
        v = +g[a + 180 >> 2];
        H = +g[a + 188 >> 2];
        I = +g[a + 112 >> 2];
        J = u + C * C * t + I * I * (v + x * x * H);
        if (J > 0)
            K = 1 / J;
        else
            K = J;
        J = +g[a + 108 >> 2] - A - B * I;
        if (J > 0)
            L = J;
        else
            L = -J;
        B = K * J;
        J = E * B;
        E = D * B;
        D = B * I;
        I = G * D;
        G = F * D;
        D = +(l + J * u);
        l = +(m + E * u);
        a = j;
        g[a >> 2] = D;
        g[a + 4 >> 2] = l;
        a = c[h >> 2] | 0;
        g[a + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = n + (y * E - z * J) * t;
        t = +(p + I * v);
        p = +(q + G * v);
        e = a + ((c[f >> 2] | 0) * 12 | 0) | 0;
        g[e >> 2] = t;
        g[e + 4 >> 2] = p;
        g[(c[h >> 2] | 0) + ((c[f >> 2] | 0) *
        12 | 0) + 8 >> 2] = r + H * (w * G - s * I);
        i = d;
        return L < .004999999888241291 | 0
    }
    function hi(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 48 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 92 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 96 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function ii(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 100 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 104 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function ji(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d =
            0,
            e = 0;
        d = +g[b + 116 >> 2];
        e = d * +g[b + 140 >> 2] * c;
        g[a >> 2] = d * +g[b + 136 >> 2] * c;
        g[a + 4 >> 2] = e;
        return
    }
    function ki(a, b) {
        a = a | 0;
        b = +b;
        return 0
    }
    function li(a) {
        a = a | 0;
        var b = 0,
            e = 0,
            f = 0,
            j = 0,
            l = 0;
        b = i;
        i = i + 16 | 0;
        e = b;
        f = c[(c[a + 48 >> 2] | 0) + 8 >> 2] | 0;
        j = c[(c[a + 52 >> 2] | 0) + 8 >> 2] | 0;
        Rm(5576, e);
        c[e >> 2] = f;
        Rm(5600, e);
        c[e >> 2] = j;
        Rm(5632, e);
        c[e >> 2] = d[a + 61 >> 0] | 0;
        Rm(5664, e);
        l = +g[a + 72 >> 2];
        h[k >> 3] = +g[a + 68 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(5704, e);
        l = +g[a + 80 >> 2];
        h[k >> 3] = +g[a + 76 >> 2];
        c[e >> 2] = c[k >>
        2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(5752, e);
        l = +g[a + 96 >> 2];
        h[k >> 3] = +g[a + 92 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(5800, e);
        l = +g[a + 104 >> 2];
        h[k >> 3] = +g[a + 100 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        j = e + 8 | 0;
        h[k >> 3] = l;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        Rm(5848, e);
        h[k >> 3] = +g[a + 84 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(5896, e);
        h[k >> 3] = +g[a + 88 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(5928, e);
        h[k >> 3] =
        +g[a + 112 >> 2];
        c[e >> 2] = c[k >> 2];
        c[e + 4 >> 2] = c[k + 4 >> 2];
        Rm(5960, e);
        c[e >> 2] = c[a + 56 >> 2];
        Rm(5984, e);
        i = b;
        return
    }
    function mi(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0,
            d = 0;
        c = a + 68 | 0;
        g[c >> 2] = +g[c >> 2] - +g[b >> 2];
        c = b + 4 | 0;
        d = a + 72 | 0;
        g[d >> 2] = +g[d >> 2] - +g[c >> 2];
        d = a + 76 | 0;
        g[d >> 2] = +g[d >> 2] - +g[b >> 2];
        b = a + 80 | 0;
        g[b >> 2] = +g[b >> 2] - +g[c >> 2];
        return
    }
    function ni(a) {
        a = a | 0;
        return
    }
    function oi(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function pi(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            j = 0;
        g = i;
        h = Em(f, 148) | 0;
        if ((h | 0) == 0) {
            j = 0;
            i = g;
            return j | 0
        }
        wi(h, a,
        b, d, e);
        c[h >> 2] = 6072;
        j = h;
        i = g;
        return j | 0
    }
    function qi(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        d = i;
        eb[c[(c[a >> 2] | 0) + 4 >> 2] & 127](a);
        Fm(b, a, 148);
        i = d;
        return
    }
    function ri(a, d, e, f) {
        a = a | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0;
        h = i;
        i = i + 48 | 0;
        j = h;
        k = c[(c[a + 48 >> 2] | 0) + 12 >> 2] | 0;
        c[j >> 2] = 488;
        c[j + 4 >> 2] = 1;
        g[j + 8 >> 2] = .009999999776482582;
        l = j + 28 | 0;
        c[l + 0 >> 2] = 0;
        c[l + 4 >> 2] = 0;
        c[l + 8 >> 2] = 0;
        c[l + 12 >> 2] = 0;
        b[l + 16 >> 1] = 0;
        Ge(k, j, c[a + 56 >> 2] | 0);
        ff(d, j, e, c[(c[a + 52 >> 2] | 0) + 12 >> 2] | 0, f);
        i = h;
        return
    }
    function si(a) {
        a = a | 0;
        return
    }
    function ti(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function ui(b, d, e, f, g) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        h = i;
        if ((a[6352] | 0) == 0) {
            c[1540] = 6;
            c[6164 >> 2] = 53;
            a[6168 >> 0] = 1;
            c[6256 >> 2] = 7;
            c[6260 >> 2] = 54;
            a[6264 >> 0] = 1;
            c[6184 >> 2] = 7;
            c[6188 >> 2] = 54;
            a[6192 >> 0] = 0;
            c[6280 >> 2] = 8;
            c[6284 >> 2] = 55;
            a[6288 >> 0] = 1;
            c[6208 >> 2] = 9;
            c[6212 >> 2] = 56;
            a[6216 >> 0] = 1;
            c[6172 >> 2] = 9;
            c[6176 >> 2] = 56;
            a[6180 >> 0] = 0;
            c[6232 >> 2] = 10;
            c[6236 >> 2] = 57;
            a[6240 >> 0] = 1;
            c[6268 >> 2] = 10;
            c[6272 >> 2] = 57;
            a[6276 >> 0] = 0;
            c[6304 >> 2] = 11;
            c[6308 >> 2] = 58;
            a[6312 >> 0] = 1;
            c[6196 >> 2] = 11;
            c[6200 >> 2] = 58;
            a[6204 >>
            0] = 0;
            c[6328 >> 2] = 12;
            c[6332 >> 2] = 59;
            a[6336 >> 0] = 1;
            c[6292 >> 2] = 12;
            c[6296 >> 2] = 59;
            a[6300 >> 0] = 0;
            a[6352] = 1
        }
        j = c[(c[b + 12 >> 2] | 0) + 4 >> 2] | 0;
        k = c[(c[e + 12 >> 2] | 0) + 4 >> 2] | 0;
        l = c[6160 + (j * 48 | 0) + (k * 12 | 0) >> 2] | 0;
        if ((l | 0) == 0) {
            m = 0;
            i = h;
            return m | 0
        }
        if ((a[6160 + (j * 48 | 0) + (k * 12 | 0) + 8 >> 0] | 0) == 0) {
            m = ob[l & 15](e, f, b, d, g) | 0;
            i = h;
            return m | 0
        } else {
            m = ob[l & 15](b, d, e, f, g) | 0;
            i = h;
            return m | 0
        }
        return 0
    }
    function vi(d, f) {
        d = d | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        h = i;
        j = c[d + 48 >> 2] | 0;
        k = c[d + 52 >> 2] | 0;
        if (((c[d + 124 >> 2] | 0) > 0 ? (a[j + 38 >> 0] | 0) == 0 : 0) ? (a[k + 38 >> 0] | 0) == 0 :
        0) {
            l = c[j + 8 >> 2] | 0;
            m = l + 4 | 0;
            n = e[m >> 1] | 0;
            if ((n & 2 | 0) == 0) {
                b[m >> 1] = n | 2;
                g[l + 160 >> 2] = 0
            }
            l = c[k + 8 >> 2] | 0;
            n = l + 4 | 0;
            m = e[n >> 1] | 0;
            if ((m & 2 | 0) == 0) {
                b[n >> 1] = m | 2;
                g[l + 160 >> 2] = 0
            }
        }
        gb[c[6160 + ((c[(c[j + 12 >> 2] | 0) + 4 >> 2] | 0) * 48 | 0) + ((c[(c[k + 12 >> 2] | 0) + 4 >> 2] | 0) * 12 | 0) + 4 >> 2] & 63](d, f);
        i = h;
        return
    }
    function wi(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0;
        h = i;
        c[a >> 2] = 6368;
        c[a + 4 >> 2] = 4;
        c[a + 48 >> 2] = b;
        c[a + 52 >> 2] = e;
        c[a + 56 >> 2] = d;
        c[a + 60 >> 2] = f;
        c[a + 124 >> 2] = 0;
        c[a + 128 >> 2] = 0;
        f = b + 16 | 0;
        d = a + 8 | 0;
        j = d + 40 | 0;
        do {
            c[d >> 2] = 0;
            d = d + 4 | 0
        } while ((d | 0) < (j |
        0));
        g[a + 136 >> 2] = +Q(+(+g[f >> 2] * +g[e + 16 >> 2]));
        k = +g[b + 20 >> 2];
        l = +g[e + 20 >> 2];
        g[a + 140 >> 2] = k > l ? k : l;
        g[a + 144 >> 2] = 0;
        i = h;
        return
    }
    function xi(d, f) {
        d = d | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0;
        h = i;
        i = i + 64 | 0;
        j = h;
        k = d + 64 | 0;
        l = j + 0 | 0;
        m = k + 0 | 0;
        n = l + 64 | 0;
        do {
            c[l >> 2] = c[m >> 2];
            l = l + 4 | 0;
            m = m + 4 | 0
        } while ((l | 0) < (n | 0));
        m = d + 4 | 0;
        l = c[m >> 2] | 0;
        c[m >> 2] = l | 4;
        n = l >>> 1;
        l = c[d + 48 >> 2] | 0;
        o = c[d + 52 >> 2] | 0;
        p = (a[o + 38 >> 0] | a[l + 38 >> 0]) << 24 >> 24 != 0;
        q = c[l + 8 >> 2] | 0;
        r = c[o + 8 >> 2] | 0;
        s = q + 12 | 0;
        t = r + 12 | 0;
        if (!p) {
            pb[c[c[d >>
            2] >> 2] & 31](d, k, s, t);
            k = d + 124 | 0;
            u = (c[k >> 2] | 0) > 0;
            a:
            do if (u) {
                v = c[j + 60 >> 2] | 0;
                if ((v | 0) > 0)
                    w = 0;
                else {
                    x = 0;
                    while (1) {
                        g[d + (x * 20 | 0) + 72 >> 2] = 0;
                        g[d + (x * 20 | 0) + 76 >> 2] = 0;
                        x = x + 1 | 0;
                        if ((x | 0) >= (c[k >> 2] | 0))
                            break a
                    }
                }
                do {
                    x = d + (w * 20 | 0) + 72 | 0;
                    g[x >> 2] = 0;
                    y = d + (w * 20 | 0) + 76 | 0;
                    g[y >> 2] = 0;
                    z = c[d + (w * 20 | 0) + 80 >> 2] | 0;
                    A = 0;
                    while (1) {
                        B = A + 1 | 0;
                        if ((c[j + (A * 20 | 0) + 16 >> 2] | 0) == (z | 0)) {
                            C = 7;
                            break
                        }
                        if ((B | 0) < (v | 0))
                            A = B;
                        else
                            break
                    }
                    if ((C | 0) == 7) {
                        C = 0;
                        g[x >> 2] = +g[j + (A * 20 | 0) + 8 >> 2];
                        g[y >> 2] = +g[j + (A * 20 | 0) + 12 >> 2]
                    }
                    w = w + 1 | 0
                } while ((w | 0) < (c[k >> 2] | 0))
            }
            while (0);
            k = n & 1;
            if (u ^ (k | 0) !=
            0) {
                w = q + 4 | 0;
                C = e[w >> 1] | 0;
                if ((C & 2 | 0) == 0) {
                    b[w >> 1] = C | 2;
                    g[q + 160 >> 2] = 0
                }
                q = r + 4 | 0;
                C = e[q >> 1] | 0;
                if ((C & 2 | 0) == 0) {
                    b[q >> 1] = C | 2;
                    g[r + 160 >> 2] = 0;
                    D = k;
                    E = u
                } else {
                    D = k;
                    E = u
                }
            } else {
                D = k;
                E = u
            }
        } else {
            u = lf(c[l + 12 >> 2] | 0, c[d + 56 >> 2] | 0, c[o + 12 >> 2] | 0, c[d + 60 >> 2] | 0, s, t) | 0;
            c[d + 124 >> 2] = 0;
            D = n & 1;
            E = u
        }
        u = c[m >> 2] | 0;
        c[m >> 2] = E ? u | 2 : u & -3;
        u = (D | 0) == 0;
        D = E ^ 1;
        m = (f | 0) == 0;
        if (!(u ^ 1 | D | m))
            gb[c[(c[f >> 2] | 0) + 8 >> 2] & 63](f, d);
        if (!(u | E | m))
            gb[c[(c[f >> 2] | 0) + 12 >> 2] & 63](f, d);
        if (p | D | m) {
            i = h;
            return
        }
        ib[c[(c[f >> 2] | 0) + 32 >> 2] & 7](f, d, j);
        i = h;
        return
    }
    function yi(a) {
        a = a | 0;
        return
    }
    function zi(a) {
        a =
        a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Ai(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0;
        e = i;
        b = Em(f, 148) | 0;
        if ((b | 0) == 0) {
            g = 0;
            i = e;
            return g | 0
        }
        wi(b, a, 0, d, 0);
        c[b >> 2] = 6392;
        g = b;
        i = e;
        return g | 0
    }
    function Bi(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        d = i;
        eb[c[(c[a >> 2] | 0) + 4 >> 2] & 127](a);
        Fm(b, a, 148);
        i = d;
        return
    }
    function Ci(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0;
        f = i;
        Ue(b, c[(c[a + 48 >> 2] | 0) + 12 >> 2] | 0, d, c[(c[a + 52 >> 2] | 0) + 12 >> 2] | 0, e);
        i = f;
        return
    }
    function Di(a) {
        a = a | 0;
        return
    }
    function Ei(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Fi(a,
    b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0;
        e = i;
        b = Em(f, 148) | 0;
        if ((b | 0) == 0) {
            g = 0;
            i = e;
            return g | 0
        }
        wi(b, a, 0, d, 0);
        c[b >> 2] = 6464;
        g = b;
        i = e;
        return g | 0
    }
    function Gi(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        d = i;
        eb[c[(c[a >> 2] | 0) + 4 >> 2] & 127](a);
        Fm(b, a, 148);
        i = d;
        return
    }
    function Hi(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0;
        f = i;
        Te(b, c[(c[a + 48 >> 2] | 0) + 12 >> 2] | 0, d, c[(c[a + 52 >> 2] | 0) + 12 >> 2] | 0, e);
        i = f;
        return
    }
    function Ii(a) {
        a = a | 0;
        return
    }
    function Ji(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Ki(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l =
            0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0;
        e = i;
        c[b + 0 >> 2] = c[d + 0 >> 2];
        c[b + 4 >> 2] = c[d + 4 >> 2];
        c[b + 8 >> 2] = c[d + 8 >> 2];
        c[b + 12 >> 2] = c[d + 12 >> 2];
        c[b + 16 >> 2] = c[d + 16 >> 2];
        c[b + 20 >> 2] = c[d + 20 >> 2];
        c[b + 24 >> 2] = c[d + 24 >> 2];
        f = c[d + 44 >> 2] | 0;
        h = b + 36 | 0;
        c[h >> 2] = f;
        j = c[d + 32 >> 2] | 0;
        k = b + 52 | 0;
        c[k >> 2] = j;
        l = b + 40 | 0;
        c[l >> 2] = Ym(f, j * 88 | 0) | 0;
        j = Ym(c[h >> 2] | 0, (c[k >> 2] | 0) * 156 | 0) | 0;
        h = b + 44 | 0;
        c[h >> 2] = j;
        c[b + 28 >> 2] = c[d + 36 >> 2];
        c[b + 32 >> 2] = c[d + 40 >> 2];
        f = c[d + 28 >> 2] | 0;
        d = b + 48 | 0;
        c[d >> 2] = f;
        if ((c[k >> 2] | 0) <= 0) {
            i = e;
            return
        }
        m = b + 24 | 0;
        n = b + 8 | 0;
        b = f;
        f = j;
        j = 0;
        while (1) {
            o = c[b + (j << 2) >> 2] | 0;
            p = c[o + 48 >> 2] | 0;
            q = c[o + 52 >> 2] | 0;
            r = +g[(c[p + 12 >> 2] | 0) + 8 >> 2];
            s = +g[(c[q + 12 >> 2] | 0) + 8 >> 2];
            t = c[p + 8 >> 2] | 0;
            p = c[q + 8 >> 2] | 0;
            q = c[o + 124 >> 2] | 0;
            g[f + (j * 156 | 0) + 136 >> 2] = +g[o + 136 >> 2];
            g[f + (j * 156 | 0) + 140 >> 2] = +g[o + 140 >> 2];
            g[f + (j * 156 | 0) + 144 >> 2] = +g[o + 144 >> 2];
            u = t + 8 | 0;
            c[f + (j * 156 | 0) + 112 >> 2] = c[u >> 2];
            v = p + 8 | 0;
            c[f + (j * 156 | 0) + 116 >> 2] = c[v >> 2];
            w = t + 136 | 0;
            g[f + (j * 156 | 0) + 120 >> 2] = +g[w >> 2];
            x = p + 136 | 0;
            g[f + (j * 156 | 0) + 124 >> 2] = +g[x >> 2];
            y = t + 144 | 0;
            g[f + (j * 156 | 0) + 128 >> 2] = +g[y >> 2];
            z = p + 144 | 0;
            g[f + (j * 156 | 0) + 132 >> 2] = +g[z >> 2];
            c[f + (j * 156 | 0) + 152 >> 2] = j;
            c[f + (j * 156 | 0) + 148 >> 2] = q;
            A = f + (j * 156 | 0) + 80 | 0;
            c[A + 0 >> 2] = 0;
            c[A + 4 >> 2] = 0;
            c[A + 8 >> 2] = 0;
            c[A + 12 >> 2] = 0;
            c[A + 16 >> 2] = 0;
            c[A + 20 >> 2] = 0;
            c[A + 24 >> 2] = 0;
            c[A + 28 >> 2] = 0;
            A = c[l >> 2] | 0;
            c[A + (j * 88 | 0) + 32 >> 2] = c[u >> 2];
            c[A + (j * 88 | 0) + 36 >> 2] = c[v >> 2];
            g[A + (j * 88 | 0) + 40 >> 2] = +g[w >> 2];
            g[A + (j * 88 | 0) + 44 >> 2] = +g[x >> 2];
            x = t + 44 | 0;
            t = c[x + 4 >> 2] | 0;
            w = A + (j * 88 | 0) + 48 | 0;
            c[w >> 2] = c[x >> 2];
            c[w + 4 >> 2] = t;
            t = p + 44 | 0;
            p = c[t + 4 >> 2] | 0;
            w = A + (j * 88 | 0) + 56 | 0;
            c[w >> 2] = c[t >> 2];
            c[w + 4 >> 2] = p;
            g[A + (j * 88 | 0) + 64 >> 2] = +g[y >> 2];
            g[A + (j * 88 | 0) + 68 >> 2] = +g[z >> 2];
            z = o + 104 | 0;
            y =
            c[z + 4 >> 2] | 0;
            p = A + (j * 88 | 0) + 16 | 0;
            c[p >> 2] = c[z >> 2];
            c[p + 4 >> 2] = y;
            y = o + 112 | 0;
            p = c[y + 4 >> 2] | 0;
            z = A + (j * 88 | 0) + 24 | 0;
            c[z >> 2] = c[y >> 2];
            c[z + 4 >> 2] = p;
            c[A + (j * 88 | 0) + 84 >> 2] = q;
            g[A + (j * 88 | 0) + 76 >> 2] = r;
            g[A + (j * 88 | 0) + 80 >> 2] = s;
            c[A + (j * 88 | 0) + 72 >> 2] = c[o + 120 >> 2];
            if ((q | 0) > 0) {
                p = 0;
                do {
                    z = o + (p * 20 | 0) + 64 | 0;
                    if ((a[m >> 0] | 0) == 0) {
                        g[f + (j * 156 | 0) + (p * 36 | 0) + 16 >> 2] = 0;
                        g[f + (j * 156 | 0) + (p * 36 | 0) + 20 >> 2] = 0
                    } else {
                        g[f + (j * 156 | 0) + (p * 36 | 0) + 16 >> 2] = +g[n >> 2] * +g[o + (p * 20 | 0) + 72 >> 2];
                        g[f + (j * 156 | 0) + (p * 36 | 0) + 20 >> 2] = +g[n >> 2] * +g[o + (p * 20 | 0) + 76 >> 2]
                    }
                    y = f + (j * 156 | 0) + (p * 36 | 0) | 0;
                    g[f + (j *
                    156 | 0) + (p * 36 | 0) + 24 >> 2] = 0;
                    g[f + (j * 156 | 0) + (p * 36 | 0) + 28 >> 2] = 0;
                    g[f + (j * 156 | 0) + (p * 36 | 0) + 32 >> 2] = 0;
                    w = A + (j * 88 | 0) + (p << 3) | 0;
                    c[y + 0 >> 2] = 0;
                    c[y + 4 >> 2] = 0;
                    c[y + 8 >> 2] = 0;
                    c[y + 12 >> 2] = 0;
                    y = z;
                    z = c[y + 4 >> 2] | 0;
                    t = w;
                    c[t >> 2] = c[y >> 2];
                    c[t + 4 >> 2] = z;
                    p = p + 1 | 0
                } while ((p | 0) != (q | 0))
            }
            q = j + 1 | 0;
            if ((q | 0) >= (c[k >> 2] | 0))
                break;
            b = c[d >> 2] | 0;
            f = c[h >> 2] | 0;
            j = q
        }
        i = e;
        return
    }
    function Li(a) {
        a = a | 0;
        var b = 0,
            d = 0;
        b = i;
        d = a + 36 | 0;
        _m(c[d >> 2] | 0, c[a + 44 >> 2] | 0);
        _m(c[d >> 2] | 0, c[a + 40 >> 2] | 0);
        i = b;
        return
    }
    function Mi(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0;
        b = i;
        i = i + 64 | 0;
        d = b + 48 | 0;
        e = b + 32 | 0;
        f = b;
        h = a + 52 | 0;
        if ((c[h >> 2] | 0) <= 0) {
            i = b;
            return
        }
        j = a + 44 | 0;
        k = a + 40 | 0;
        l = a + 48 | 0;
        m = a + 28 | 0;
        n = a + 32 | 0;
        a = d + 8 | 0;
        o = d + 12 | 0;
        p = e + 8 | 0;
        q = e + 12 | 0;
        r = 0;
        do {
            s = c[j >> 2] | 0;
            t = c[k >> 2] | 0;
            u = +g[t + (r * 88 | 0) + 76 >> 2];
            v = +g[t + (r * 88 | 0) + 80 >> 2];
            w = (c[(c[l >> 2] | 0) + (c[s + (r * 156 | 0) + 152 >> 2] << 2) >> 2] | 0) + 64 | 0;
            x = c[s + (r * 156 | 0) + 112 >> 2] | 0;
            y = c[s + (r * 156 | 0) + 116 >> 2] |
            0;
            z = +g[s + (r * 156 | 0) + 120 >> 2];
            A = +g[s + (r * 156 | 0) + 124 >> 2];
            B = +g[s + (r * 156 | 0) + 128 >> 2];
            C = +g[s + (r * 156 | 0) + 132 >> 2];
            D = t + (r * 88 | 0) + 48 | 0;
            E = +g[D >> 2];
            F = +g[D + 4 >> 2];
            D = t + (r * 88 | 0) + 56 | 0;
            G = +g[D >> 2];
            H = +g[D + 4 >> 2];
            D = c[m >> 2] | 0;
            t = D + (x * 12 | 0) | 0;
            I = +g[t >> 2];
            J = +g[t + 4 >> 2];
            K = +g[D + (x * 12 | 0) + 8 >> 2];
            t = c[n >> 2] | 0;
            L = t + (x * 12 | 0) | 0;
            M = +g[L >> 2];
            N = +g[L + 4 >> 2];
            O = +g[t + (x * 12 | 0) + 8 >> 2];
            x = D + (y * 12 | 0) | 0;
            P = +g[x >> 2];
            Q = +g[x + 4 >> 2];
            R = +g[D + (y * 12 | 0) + 8 >> 2];
            D = t + (y * 12 | 0) | 0;
            U = +g[D >> 2];
            V = +g[D + 4 >> 2];
            W = +g[t + (y * 12 | 0) + 8 >> 2];
            X = +T(+K);
            g[a >> 2] = X;
            Y = +S(+K);
            g[o >> 2] = Y;
            K = +T(+R);
            g[p >> 2] = K;
            Z = +S(+R);
            g[q >> 2] = Z;
            R = +(I - (E * Y - F * X));
            _ = +(J - (F * Y + E * X));
            y = d;
            g[y >> 2] = R;
            g[y + 4 >> 2] = _;
            _ = +(P - (G * Z - H * K));
            R = +(Q - (H * Z + G * K));
            y = e;
            g[y >> 2] = _;
            g[y + 4 >> 2] = R;
            jf(f, w, d, u, e, v);
            w = s + (r * 156 | 0) + 72 | 0;
            y = f;
            t = c[y + 4 >> 2] | 0;
            D = w;
            c[D >> 2] = c[y >> 2];
            c[D + 4 >> 2] = t;
            t = s + (r * 156 | 0) + 148 | 0;
            D = c[t >> 2] | 0;
            do if ((D | 0) > 0) {
                y = s + (r * 156 | 0) + 76 | 0;
                v = z + A;
                x = s + (r * 156 | 0) + 140 | 0;
                L = 0;
                do {
                    $ = f + (L << 3) + 8 | 0;
                    u = +g[$ >> 2] - I;
                    aa = f + (L << 3) + 12 | 0;
                    R = +u;
                    _ = +(+g[aa >> 2] - J);
                    ba = s + (r * 156 | 0) + (L * 36 | 0) | 0;
                    g[ba >> 2] = R;
                    g[ba + 4 >> 2] = _;
                    _ = +g[$ >> 2] - P;
                    R = +_;
                    K = +(+g[aa >> 2] - Q);
                    aa = s + (r * 156 | 0) + (L *
                    36 | 0) + 8 | 0;
                    g[aa >> 2] = R;
                    g[aa + 4 >> 2] = K;
                    K = +g[y >> 2];
                    R = +g[s + (r * 156 | 0) + (L * 36 | 0) + 4 >> 2];
                    G = +g[w >> 2];
                    Z = u * K - R * G;
                    H = +g[s + (r * 156 | 0) + (L * 36 | 0) + 12 >> 2];
                    X = K * _ - G * H;
                    G = v + Z * B * Z + X * C * X;
                    if (G > 0)
                        ca = 1 / G;
                    else
                        ca = 0;
                    g[s + (r * 156 | 0) + (L * 36 | 0) + 24 >> 2] = ca;
                    G = +g[y >> 2];
                    X = -+g[w >> 2];
                    Z = u * X - G * R;
                    K = _ * X - G * H;
                    G = v + Z * B * Z + K * C * K;
                    if (G > 0)
                        da = 1 / G;
                    else
                        da = 0;
                    g[s + (r * 156 | 0) + (L * 36 | 0) + 28 >> 2] = da;
                    aa = s + (r * 156 | 0) + (L * 36 | 0) + 32 | 0;
                    g[aa >> 2] = 0;
                    G = +g[w >> 2] * (U - W * H - M + O * R) + +g[y >> 2] * (V + W * _ - N - O * u);
                    if (G < -1)
                        g[aa >> 2] = -(G * +g[x >> 2]);
                    L = L + 1 | 0
                } while ((L | 0) != (D | 0));
                if ((c[t >> 2] | 0) == 2) {
                    v = +g[s +
                    (r * 156 | 0) + 76 >> 2];
                    G = +g[w >> 2];
                    u = +g[s + (r * 156 | 0) >> 2] * v - +g[s + (r * 156 | 0) + 4 >> 2] * G;
                    _ = v * +g[s + (r * 156 | 0) + 8 >> 2] - G * +g[s + (r * 156 | 0) + 12 >> 2];
                    R = v * +g[s + (r * 156 | 0) + 36 >> 2] - G * +g[s + (r * 156 | 0) + 40 >> 2];
                    H = v * +g[s + (r * 156 | 0) + 44 >> 2] - G * +g[s + (r * 156 | 0) + 48 >> 2];
                    G = z + A;
                    v = B * u;
                    K = C * _;
                    Z = G + u * v + _ * K;
                    _ = G + R * B * R + H * C * H;
                    u = G + v * R + K * H;
                    H = Z * _ - u * u;
                    if (!(Z * Z < H * 1E3)) {
                        c[t >> 2] = 1;
                        break
                    }
                    g[s + (r * 156 | 0) + 96 >> 2] = Z;
                    g[s + (r * 156 | 0) + 100 >> 2] = u;
                    g[s + (r * 156 | 0) + 104 >> 2] = u;
                    g[s + (r * 156 | 0) + 108 >> 2] = _;
                    if (H != 0)
                        ea = 1 / H;
                    else
                        ea = H;
                    H = -(ea * u);
                    g[s + (r * 156 | 0) + 80 >> 2] = _ * ea;
                    g[s + (r * 156 | 0) + 84 >> 2] =
                    H;
                    g[s + (r * 156 | 0) + 88 >> 2] = H;
                    g[s + (r * 156 | 0) + 92 >> 2] = Z * ea
                }
            }
            while (0);
            r = r + 1 | 0
        } while ((r | 0) < (c[h >> 2] | 0));
        i = b;
        return
    }
    function Ni(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0;
        b = i;
        d = a + 52 | 0;
        if ((c[d >> 2] | 0) <= 0) {
            i = b;
            return
        }
        e = a + 44 | 0;
        f = a + 32 | 0;
        a = c[f >> 2] | 0;
        h = 0;
        do {
            j = c[e >> 2] | 0;
            k = c[j + (h * 156 | 0) + 112 >> 2] | 0;
            l = c[j + (h * 156 | 0) + 116 >> 2] | 0;
            m = +g[j + (h * 156 | 0) + 120 >> 2];
            n = +g[j + (h * 156 | 0) + 128 >> 2];
            o = +g[j + (h *
            156 | 0) + 124 >> 2];
            p = +g[j + (h * 156 | 0) + 132 >> 2];
            q = c[j + (h * 156 | 0) + 148 >> 2] | 0;
            r = a + (k * 12 | 0) | 0;
            s = r;
            t = +g[s >> 2];
            u = +g[s + 4 >> 2];
            v = +g[a + (k * 12 | 0) + 8 >> 2];
            s = a + (l * 12 | 0) | 0;
            w = +g[s >> 2];
            x = +g[s + 4 >> 2];
            y = +g[a + (l * 12 | 0) + 8 >> 2];
            s = j + (h * 156 | 0) + 72 | 0;
            z = +g[s >> 2];
            A = +g[s + 4 >> 2];
            if ((q | 0) > 0) {
                B = t;
                C = u;
                D = w;
                E = x;
                s = 0;
                F = v;
                G = y;
                while (1) {
                    H = +g[j + (h * 156 | 0) + (s * 36 | 0) + 16 >> 2];
                    I = +g[j + (h * 156 | 0) + (s * 36 | 0) + 20 >> 2];
                    J = z * H + A * I;
                    K = A * H - z * I;
                    I = F - n * (+g[j + (h * 156 | 0) + (s * 36 | 0) >> 2] * K - +g[j + (h * 156 | 0) + (s * 36 | 0) + 4 >> 2] * J);
                    H = B - m * J;
                    L = C - m * K;
                    M = G + p * (K * +g[j + (h * 156 | 0) + (s * 36 | 0) + 8 >> 2] - J * +g[j +
                    (h * 156 | 0) + (s * 36 | 0) + 12 >> 2]);
                    N = D + o * J;
                    J = E + o * K;
                    s = s + 1 | 0;
                    if ((s | 0) == (q | 0)) {
                        O = L;
                        P = J;
                        Q = N;
                        R = H;
                        S = I;
                        T = M;
                        break
                    } else {
                        B = H;
                        C = L;
                        D = N;
                        E = J;
                        F = I;
                        G = M
                    }
                }
            } else {
                O = u;
                P = x;
                Q = w;
                R = t;
                S = v;
                T = y
            }
            G = +R;
            F = +O;
            q = r;
            g[q >> 2] = G;
            g[q + 4 >> 2] = F;
            q = c[f >> 2] | 0;
            g[q + (k * 12 | 0) + 8 >> 2] = S;
            F = +Q;
            G = +P;
            s = q + (l * 12 | 0) | 0;
            g[s >> 2] = F;
            g[s + 4 >> 2] = G;
            a = c[f >> 2] | 0;
            g[a + (l * 12 | 0) + 8 >> 2] = T;
            h = h + 1 | 0
        } while ((h | 0) < (c[d >> 2] | 0));
        i = b;
        return
    }
    function Oi(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J =
            0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0;
        b = i;
        d = a + 52 | 0;
        if ((c[d >> 2] | 0) <= 0) {
            i = b;
            return
        }
        e = a + 44 | 0;
        f = a + 32 | 0;
        a = c[f >> 2] | 0;
        h = 0;
        do {
            j = c[e >> 2] | 0;
            k = j + (h * 156 | 0) | 0;
            l = c[j + (h * 156 | 0) + 112 >> 2] | 0;
            m = c[j + (h * 156 | 0) + 116 >> 2] | 0;
            n = +g[j + (h * 156 | 0) + 120 >> 2];
            o = +g[j + (h * 156 | 0) + 128 >> 2];
            p = +g[j + (h * 156 | 0) + 124 >> 2];
            q = +g[j + (h * 156 | 0) + 132 >> 2];
            r = j + (h * 156 | 0) + 148 | 0;
            s = c[r >> 2] | 0;
            t = a + (l * 12 | 0) | 0;
            u = t;
            v = +g[u >> 2];
            w = +g[u + 4 >> 2];
            x =
            +g[a + (l * 12 | 0) + 8 >> 2];
            u = a + (m * 12 | 0) | 0;
            y = +g[u >> 2];
            z = +g[u + 4 >> 2];
            A = +g[a + (m * 12 | 0) + 8 >> 2];
            u = j + (h * 156 | 0) + 72 | 0;
            B = +g[u >> 2];
            C = +g[u + 4 >> 2];
            D = -B;
            E = +g[j + (h * 156 | 0) + 136 >> 2];
            if ((s | 0) > 0) {
                u = j + (h * 156 | 0) + 144 | 0;
                F = y;
                G = z;
                H = v;
                I = w;
                J = 0;
                K = x;
                L = A;
                do {
                    M = +g[j + (h * 156 | 0) + (J * 36 | 0) + 12 >> 2];
                    N = +g[j + (h * 156 | 0) + (J * 36 | 0) + 8 >> 2];
                    O = +g[j + (h * 156 | 0) + (J * 36 | 0) + 4 >> 2];
                    P = +g[j + (h * 156 | 0) + (J * 36 | 0) >> 2];
                    Q = E * +g[j + (h * 156 | 0) + (J * 36 | 0) + 16 >> 2];
                    R = j + (h * 156 | 0) + (J * 36 | 0) + 20 | 0;
                    S = +g[R >> 2];
                    T = S - +g[j + (h * 156 | 0) + (J * 36 | 0) + 28 >> 2] * (C * (F - L * M - H + K * O) + (G + L * N - I - K * P) * D - +g[u >> 2]);
                    U = -Q;
                    V = T < Q ? T : Q;
                    Q = V < U ? U : V;
                    V = Q - S;
                    g[R >> 2] = Q;
                    Q = C * V;
                    S = V * D;
                    H = H - n * Q;
                    I = I - n * S;
                    K = K - o * (P * S - O * Q);
                    F = F + p * Q;
                    G = G + p * S;
                    L = L + q * (N * S - M * Q);
                    J = J + 1 | 0
                } while ((J | 0) != (s | 0));
                if ((c[r >> 2] | 0) == 1) {
                    D = +g[j + (h * 156 | 0) + 12 >> 2];
                    E = +g[j + (h * 156 | 0) + 8 >> 2];
                    Q = +g[j + (h * 156 | 0) + 4 >> 2];
                    M = +g[k >> 2];
                    s = j + (h * 156 | 0) + 16 | 0;
                    S = +g[s >> 2];
                    N = S - +g[j + (h * 156 | 0) + 24 >> 2] * (B * (F - L * D - H + K * Q) + C * (G + L * E - I - K * M) - +g[j + (h * 156 | 0) + 32 >> 2]);
                    O = N > 0 ? N : 0;
                    N = O - S;
                    g[s >> 2] = O;
                    O = B * N;
                    S = C * N;
                    W = H - n * O;
                    X = I - n * S;
                    Y = F + p * O;
                    Z = G + p * S;
                    _ = K - o * (M * S - Q * O);
                    $ = L + q * (E * S - D * O)
                } else {
                    aa = I;
                    ba = H;
                    ca = G;
                    da = F;
                    ea = K;
                    fa = L;
                    ga = 8
                }
            } else {
                aa =
                w;
                ba = v;
                ca = z;
                da = y;
                ea = x;
                fa = A;
                ga = 8
            }
            do if ((ga | 0) == 8) {
                ga = 0;
                s = j + (h * 156 | 0) + 16 | 0;
                O = +g[s >> 2];
                J = j + (h * 156 | 0) + 52 | 0;
                D = +g[J >> 2];
                S = +g[j + (h * 156 | 0) + 12 >> 2];
                E = +g[j + (h * 156 | 0) + 8 >> 2];
                Q = +g[j + (h * 156 | 0) + 4 >> 2];
                M = +g[k >> 2];
                N = +g[j + (h * 156 | 0) + 48 >> 2];
                P = +g[j + (h * 156 | 0) + 44 >> 2];
                V = +g[j + (h * 156 | 0) + 40 >> 2];
                U = +g[j + (h * 156 | 0) + 36 >> 2];
                T = +g[j + (h * 156 | 0) + 104 >> 2];
                ha = +g[j + (h * 156 | 0) + 100 >> 2];
                ia = B * (da - fa * S - ba + ea * Q) + C * (ca + fa * E - aa - ea * M) - +g[j + (h * 156 | 0) + 32 >> 2] - (O * +g[j + (h * 156 | 0) + 96 >> 2] + D * T);
                ja = B * (da - fa * N - ba + ea * V) + C * (ca + fa * P - aa - ea * U) - +g[j + (h * 156 | 0) + 68 >> 2] -
                (O * ha + D * +g[j + (h * 156 | 0) + 108 >> 2]);
                ka = +g[j + (h * 156 | 0) + 80 >> 2] * ia + +g[j + (h * 156 | 0) + 88 >> 2] * ja;
                la = ia * +g[j + (h * 156 | 0) + 84 >> 2] + ja * +g[j + (h * 156 | 0) + 92 >> 2];
                ma = -ka;
                na = -la;
                if (!(!(ka <= -0) | !(la <= -0))) {
                    la = ma - O;
                    ka = na - D;
                    oa = B * la;
                    pa = C * la;
                    la = B * ka;
                    qa = C * ka;
                    ka = oa + la;
                    ra = pa + qa;
                    g[s >> 2] = ma;
                    g[J >> 2] = na;
                    W = ba - n * ka;
                    X = aa - n * ra;
                    Y = da + p * ka;
                    Z = ca + p * ra;
                    _ = ea - o * (M * pa - Q * oa + (U * qa - V * la));
                    $ = fa + q * (E * pa - S * oa + (P * qa - N * la));
                    break
                }
                la = ia * +g[j + (h * 156 | 0) + 24 >> 2];
                qa = -la;
                if (la <= -0 ? ja + ha * qa >= 0 : 0) {
                    ha = qa - O;
                    la = 0 - D;
                    oa = B * ha;
                    pa = C * ha;
                    ha = B * la;
                    ra = C * la;
                    la = ha + oa;
                    ka = ra + pa;
                    g[s >> 2] = qa;
                    g[J >> 2] = 0;
                    W = ba - n * la;
                    X = aa - n * ka;
                    Y = da + p * la;
                    Z = ca + p * ka;
                    _ = ea - o * (pa * M - oa * Q + (ra * U - ha * V));
                    $ = fa + q * (pa * E - oa * S + (ra * P - ha * N));
                    break
                }
                ha = ja * +g[j + (h * 156 | 0) + 60 >> 2];
                ra = -ha;
                if (ha <= -0 ? ia + T * ra >= 0 : 0) {
                    T = 0 - O;
                    ha = ra - D;
                    oa = B * T;
                    pa = C * T;
                    T = B * ha;
                    ka = C * ha;
                    ha = oa + T;
                    la = pa + ka;
                    g[s >> 2] = 0;
                    g[J >> 2] = ra;
                    W = ba - n * ha;
                    X = aa - n * la;
                    Y = da + p * ha;
                    Z = ca + p * la;
                    _ = ea - o * (pa * M - oa * Q + (ka * U - T * V));
                    $ = fa + q * (pa * E - oa * S + (ka * P - T * N));
                    break
                }
                if (!(ia >= 0) | !(ja >= 0)) {
                    W = ba;
                    X = aa;
                    Y = da;
                    Z = ca;
                    _ = ea;
                    $ = fa
                } else {
                    ja = 0 - O;
                    O = 0 - D;
                    D = B * ja;
                    ia = C * ja;
                    ja = B * O;
                    T = C * O;
                    O = D + ja;
                    ka = ia + T;
                    g[s >> 2] = 0;
                    g[J >>
                    2] = 0;
                    W = ba - n * O;
                    X = aa - n * ka;
                    Y = da + p * O;
                    Z = ca + p * ka;
                    _ = ea - o * (ia * M - D * Q + (T * U - ja * V));
                    $ = fa + q * (ia * E - D * S + (T * P - ja * N))
                }
            }
            while (0);
            q = +W;
            o = +X;
            j = t;
            g[j >> 2] = q;
            g[j + 4 >> 2] = o;
            j = c[f >> 2] | 0;
            g[j + (l * 12 | 0) + 8 >> 2] = _;
            o = +Y;
            q = +Z;
            k = j + (m * 12 | 0) | 0;
            g[k >> 2] = o;
            g[k + 4 >> 2] = q;
            a = c[f >> 2] | 0;
            g[a + (m * 12 | 0) + 8 >> 2] = $;
            h = h + 1 | 0
        } while ((h | 0) < (c[d >> 2] | 0));
        i = b;
        return
    }
    function Pi(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0;
        b = i;
        d = c[a + 52 >> 2] | 0;
        if ((d | 0) <= 0) {
            i = b;
            return
        }
        e = c[a + 44 >> 2] | 0;
        f = c[a + 48 >> 2] | 0;
        a = 0;
        do {
            h = c[f + (c[e + (a * 156 | 0) + 152 >> 2] << 2) >> 2] | 0;
            j = c[e + (a * 156 | 0) + 148 >> 2] | 0;
            if ((j | 0) > 0) {
                k = 0;
                do {
                    g[h + (k * 20 | 0) + 72 >> 2] = +g[e + (a * 156 | 0) + (k * 36 | 0) + 16 >> 2];
                    g[h + (k * 20 | 0) + 76 >> 2] = +g[e + (a * 156 | 0) + (k * 36 | 0) + 20 >> 2];
                    k = k + 1 | 0
                } while ((k | 0) < (j | 0))
            }
            a = a + 1 | 0
        } while ((a | 0) < (d | 0));
        i = b;
        return
    }
    function Qi(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0;
        b = i;
        i = i + 64 | 0;
        d = b + 40 |
        0;
        e = b + 24 | 0;
        f = b;
        h = a + 52 | 0;
        if ((c[h >> 2] | 0) <= 0) {
            j = 0;
            k = j >= -.014999999664723873;
            i = b;
            return k | 0
        }
        l = a + 40 | 0;
        m = a + 28 | 0;
        a = d + 8 | 0;
        n = d + 12 | 0;
        o = e + 8 | 0;
        p = e + 12 | 0;
        q = f + 8 | 0;
        r = f + 16 | 0;
        s = c[m >> 2] | 0;
        t = 0;
        u = 0;
        while (1) {
            v = c[l >> 2] | 0;
            w = v + (t * 88 | 0) | 0;
            x = c[v + (t * 88 | 0) + 32 >> 2] | 0;
            y = c[v + (t * 88 | 0) + 36 >> 2] | 0;
            z = v + (t * 88 | 0) + 48 | 0;
            A = +g[z >> 2];
            B = +g[z + 4 >> 2];
            C = +g[v + (t * 88 | 0) + 40 >> 2];
            D = +g[v + (t * 88 | 0) + 64 >> 2];
            z = v + (t * 88 | 0) + 56 | 0;
            E = +g[z >> 2];
            F = +g[z + 4 >> 2];
            G = +g[v + (t * 88 | 0) + 44 >> 2];
            H = +g[v + (t * 88 | 0) + 68 >> 2];
            z = c[v + (t * 88 | 0) + 84 >> 2] | 0;
            v = s + (x * 12 | 0) | 0;
            I = +g[v >> 2];
            J = +g[v + 4 >> 2];
            K =
            +g[s + (x * 12 | 0) + 8 >> 2];
            v = s + (y * 12 | 0) | 0;
            L = +g[v >> 2];
            M = +g[v + 4 >> 2];
            N = +g[s + (y * 12 | 0) + 8 >> 2];
            if ((z | 0) > 0) {
                O = C + G;
                P = I;
                Q = J;
                R = L;
                U = M;
                V = K;
                W = N;
                v = 0;
                X = u;
                do {
                    Y = +T(+V);
                    g[a >> 2] = Y;
                    Z = +S(+V);
                    g[n >> 2] = Z;
                    _ = +T(+W);
                    g[o >> 2] = _;
                    $ = +S(+W);
                    g[p >> 2] = $;
                    aa = +(P - (A * Z - B * Y));
                    ba = +(Q - (B * Z + A * Y));
                    ca = d;
                    g[ca >> 2] = aa;
                    g[ca + 4 >> 2] = ba;
                    ba = +(R - (E * $ - F * _));
                    aa = +(U - (F * $ + E * _));
                    ca = e;
                    g[ca >> 2] = ba;
                    g[ca + 4 >> 2] = aa;
                    Ri(f, w, d, e, v);
                    ca = f;
                    aa = +g[ca >> 2];
                    ba = +g[ca + 4 >> 2];
                    ca = q;
                    _ = +g[ca >> 2];
                    $ = +g[ca + 4 >> 2];
                    Y = +g[r >> 2];
                    Z = _ - P;
                    da = $ - Q;
                    ea = _ - R;
                    _ = $ - U;
                    X = X < Y ? X : Y;
                    $ = (Y + .004999999888241291) * .20000000298023224;
                    Y = $ < 0 ? $ : 0;
                    $ = ba * Z - aa * da;
                    fa = ba * ea - aa * _;
                    ga = fa * H * fa + (O + $ * D * $);
                    if (ga > 0)
                        ha = -(Y < -.20000000298023224 ? -.20000000298023224 : Y) / ga;
                    else
                        ha = 0;
                    ga = aa * ha;
                    aa = ba * ha;
                    P = P - C * ga;
                    Q = Q - C * aa;
                    V = V - D * (Z * aa - da * ga);
                    R = R + G * ga;
                    U = U + G * aa;
                    W = W + H * (ea * aa - _ * ga);
                    v = v + 1 | 0
                } while ((v | 0) != (z | 0));
                ia = Q;
                ja = P;
                ka = U;
                la = R;
                ma = c[m >> 2] | 0;
                na = V;
                oa = W;
                pa = X
            } else {
                ia = J;
                ja = I;
                ka = M;
                la = L;
                ma = s;
                na = K;
                oa = N;
                pa = u
            }
            H = +ja;
            G = +ia;
            z = ma + (x * 12 | 0) | 0;
            g[z >> 2] = H;
            g[z + 4 >> 2] = G;
            z = c[m >> 2] | 0;
            g[z + (x * 12 | 0) + 8 >> 2] = na;
            G = +la;
            H = +ka;
            v = z + (y * 12 | 0) | 0;
            g[v >> 2] = G;
            g[v + 4 >> 2] = H;
            s = c[m >> 2] | 0;
            g[s + (y * 12 | 0) + 8 >>
            2] = oa;
            t = t + 1 | 0;
            if ((t | 0) >= (c[h >> 2] | 0)) {
                j = pa;
                break
            } else
                u = pa
        }
        k = j >= -.014999999664723873;
        i = b;
        return k | 0
    }
    function Ri(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0;
        h = i;
        j = c[b + 72 >> 2] | 0;
        if ((j | 0) == 2) {
            k = e + 12 | 0;
            l = +g[k >> 2];
            m = +g[b + 16 >> 2];
            n = e + 8 | 0;
            o = +g[n >> 2];
            p = +g[b + 20 >> 2];
            q = l * m - o * p;
            r = m * o + l * p;
            p = +q;
            l = +r;
            s = a;
            g[s >> 2] = p;
            g[s + 4 >> 2] = l;
            l = +g[k >> 2];
            p = +g[b + 24 >> 2];
            o = +g[n >> 2];
            m = +g[b + 28 >> 2];
            t = +g[d + 12 >> 2];
            u = +g[b + (f << 3) >> 2];
            v = +g[d + 8 >> 2];
            w = +g[b + (f << 3) + 4 >> 2];
            x = +g[d >> 2] + (t * u - v * w);
            y = u * v + t * w + +g[d + 4 >> 2];
            g[a + 16 >> 2] = q * (x - (+g[e >> 2] + (l * p - o * m))) + (y - (p * o + l * m + +g[e + 4 >> 2])) * r - +g[b + 76 >> 2] - +g[b + 80 >> 2];
            m = +x;
            x = +y;
            n = a + 8 | 0;
            g[n >> 2] = m;
            g[n + 4 >> 2] = x;
            x = +-q;
            q = +-r;
            n = a;
            g[n >> 2] = x;
            g[n + 4 >> 2] = q;
            i = h;
            return
        } else if ((j | 0) == 1) {
            n = d + 12 | 0;
            q = +g[n >> 2];
            x = +g[b + 16 >> 2];
            k = d + 8 | 0;
            r = +g[k >> 2];
            m = +g[b + 20 >> 2];
            y = q * x - r * m;
            l = x * r + q * m;
            m = +y;
            q = +l;
            s = a;
            g[s >> 2] = m;
            g[s + 4 >> 2] = q;
            q = +g[n >> 2];
            m = +g[b + 24 >> 2];
            r = +g[k >> 2];
            x = +g[b + 28 >> 2];
            o = +g[e + 12 >> 2];
            p = +g[b + (f << 3) >> 2];
            w = +g[e + 8 >> 2];
            t = +g[b + (f << 3) + 4 >> 2];
            v = +g[e >> 2] + (o * p - w * t);
            u =
            p * w + o * t + +g[e + 4 >> 2];
            g[a + 16 >> 2] = y * (v - (+g[d >> 2] + (q * m - r * x))) + (u - (m * r + q * x + +g[d + 4 >> 2])) * l - +g[b + 76 >> 2] - +g[b + 80 >> 2];
            l = +v;
            v = +u;
            f = a + 8 | 0;
            g[f >> 2] = l;
            g[f + 4 >> 2] = v;
            i = h;
            return
        } else if ((j | 0) == 0) {
            v = +g[d + 12 >> 2];
            l = +g[b + 24 >> 2];
            u = +g[d + 8 >> 2];
            x = +g[b + 28 >> 2];
            q = +g[d >> 2] + (v * l - u * x);
            r = l * u + v * x + +g[d + 4 >> 2];
            x = +g[e + 12 >> 2];
            v = +g[b >> 2];
            u = +g[e + 8 >> 2];
            l = +g[b + 4 >> 2];
            m = +g[e >> 2] + (x * v - u * l);
            y = v * u + x * l + +g[e + 4 >> 2];
            l = m - q;
            x = y - r;
            u = +l;
            v = +x;
            e = a;
            g[e >> 2] = u;
            g[e + 4 >> 2] = v;
            v = +Q(+(l * l + x * x));
            if (v < 1.1920928955078125E-7) {
                z = l;
                A = x
            } else {
                u = 1 / v;
                v = l * u;
                g[a >> 2] = v;
                t =
                x * u;
                g[a + 4 >> 2] = t;
                z = v;
                A = t
            }
            t = +((q + m) * .5);
            m = +((r + y) * .5);
            e = a + 8 | 0;
            g[e >> 2] = t;
            g[e + 4 >> 2] = m;
            g[a + 16 >> 2] = l * z + x * A - +g[b + 76 >> 2] - +g[b + 80 >> 2];
            i = h;
            return
        } else {
            g[a + 16 >> 2] = 0;
            b = 8784;
            e = c[b + 4 >> 2] | 0;
            d = a;
            c[d >> 2] = c[b >> 2];
            c[d + 4 >> 2] = e;
            e = 8784;
            d = c[e + 4 >> 2] | 0;
            b = a + 8 | 0;
            c[b >> 2] = c[e >> 2];
            c[b + 4 >> 2] = d;
            i = h;
            return
        }
    }
    function Si(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0;
        e = i;
        i = i + 64 | 0;
        f = e + 40 | 0;
        h = e + 24 | 0;
        j = e;
        k = a + 52 | 0;
        if ((c[k >> 2] | 0) <= 0) {
            l = 0;
            m = l >= -.007499999832361937;
            i = e;
            return m | 0
        }
        n = a + 40 | 0;
        o = a + 28 | 0;
        a = f + 8 | 0;
        p = f + 12 | 0;
        q = h + 8 | 0;
        r = h + 12 | 0;
        s = j + 8 | 0;
        t = j + 16 | 0;
        u = 0;
        v = 0;
        while (1) {
            w = c[n >> 2] | 0;
            x = w + (u * 88 | 0) | 0;
            y = c[w + (u * 88 | 0) + 32 >> 2] | 0;
            z = c[w + (u * 88 | 0) + 36 >> 2] | 0;
            A = w + (u * 88 | 0) + 48 | 0;
            B = +g[A >> 2];
            C = +g[A + 4 >> 2];
            A = w + (u * 88 | 0) + 56 | 0;
            D = +g[A >> 2];
            E = +g[A + 4 >> 2];
            A = c[w + (u * 88 | 0) + 84 >> 2] | 0;
            if ((y | 0) == (b | 0) | (y | 0) == (d | 0)) {
                F = +g[w +
                (u * 88 | 0) + 64 >> 2];
                G = +g[w + (u * 88 | 0) + 40 >> 2]
            } else {
                F = 0;
                G = 0
            }
            if ((z | 0) == (b | 0) | (z | 0) == (d | 0)) {
                H = +g[w + (u * 88 | 0) + 68 >> 2];
                I = +g[w + (u * 88 | 0) + 44 >> 2]
            } else {
                H = 0;
                I = 0
            }
            w = c[o >> 2] | 0;
            J = w + (y * 12 | 0) | 0;
            K = +g[J >> 2];
            L = +g[J + 4 >> 2];
            M = +g[w + (y * 12 | 0) + 8 >> 2];
            J = w + (z * 12 | 0) | 0;
            N = +g[J >> 2];
            O = +g[J + 4 >> 2];
            P = +g[w + (z * 12 | 0) + 8 >> 2];
            if ((A | 0) > 0) {
                Q = G + I;
                R = N;
                U = O;
                V = K;
                W = L;
                X = M;
                Y = P;
                J = 0;
                Z = v;
                do {
                    _ = +T(+X);
                    g[a >> 2] = _;
                    $ = +S(+X);
                    g[p >> 2] = $;
                    aa = +T(+Y);
                    g[q >> 2] = aa;
                    ba = +S(+Y);
                    g[r >> 2] = ba;
                    ca = +(V - (B * $ - C * _));
                    da = +(W - (C * $ + B * _));
                    ea = f;
                    g[ea >> 2] = ca;
                    g[ea + 4 >> 2] = da;
                    da = +(R - (D * ba - E * aa));
                    ca = +(U -
                    (E * ba + D * aa));
                    ea = h;
                    g[ea >> 2] = da;
                    g[ea + 4 >> 2] = ca;
                    Ri(j, x, f, h, J);
                    ea = j;
                    ca = +g[ea >> 2];
                    da = +g[ea + 4 >> 2];
                    ea = s;
                    aa = +g[ea >> 2];
                    ba = +g[ea + 4 >> 2];
                    _ = +g[t >> 2];
                    $ = aa - V;
                    fa = ba - W;
                    ga = aa - R;
                    aa = ba - U;
                    Z = Z < _ ? Z : _;
                    ba = (_ + .004999999888241291) * .75;
                    _ = ba < 0 ? ba : 0;
                    ba = da * $ - ca * fa;
                    ha = da * ga - ca * aa;
                    ia = ha * H * ha + (Q + ba * F * ba);
                    if (ia > 0)
                        ja = -(_ < -.20000000298023224 ? -.20000000298023224 : _) / ia;
                    else
                        ja = 0;
                    ia = ca * ja;
                    ca = da * ja;
                    V = V - G * ia;
                    W = W - G * ca;
                    X = X - F * ($ * ca - fa * ia);
                    R = R + I * ia;
                    U = U + I * ca;
                    Y = Y + H * (ga * ca - aa * ia);
                    J = J + 1 | 0
                } while ((J | 0) != (A | 0));
                ka = W;
                la = V;
                ma = U;
                na = R;
                oa = c[o >> 2] | 0;
                pa = X;
                qa = Y;
                ra = Z
            } else {
                ka = L;
                la = K;
                ma = O;
                na = N;
                oa = w;
                pa = M;
                qa = P;
                ra = v
            }
            Q = +la;
            D = +ka;
            A = oa + (y * 12 | 0) | 0;
            g[A >> 2] = Q;
            g[A + 4 >> 2] = D;
            A = c[o >> 2] | 0;
            g[A + (y * 12 | 0) + 8 >> 2] = pa;
            D = +na;
            Q = +ma;
            J = A + (z * 12 | 0) | 0;
            g[J >> 2] = D;
            g[J + 4 >> 2] = Q;
            g[(c[o >> 2] | 0) + (z * 12 | 0) + 8 >> 2] = qa;
            u = u + 1 | 0;
            if ((u | 0) >= (c[k >> 2] | 0)) {
                l = ra;
                break
            } else
                v = ra
        }
        m = l >= -.007499999832361937;
        i = e;
        return m | 0
    }
    function Ti(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0;
        e = i;
        b = Em(f, 148) | 0;
        if ((b | 0) == 0) {
            g = 0;
            i = e;
            return g | 0
        }
        wi(b, a, 0, d, 0);
        c[b >> 2] = 6528;
        g = b;
        i = e;
        return g | 0
    }
    function Ui(a, b) {
        a = a | 0;
        b = b | 0;
        var d =
        0;
        d = i;
        eb[c[(c[a >> 2] | 0) + 4 >> 2] & 127](a);
        Fm(b, a, 148);
        i = d;
        return
    }
    function Vi(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0;
        f = i;
        cf(b, c[(c[a + 48 >> 2] | 0) + 12 >> 2] | 0, d, c[(c[a + 52 >> 2] | 0) + 12 >> 2] | 0, e);
        i = f;
        return
    }
    function Wi(a) {
        a = a | 0;
        return
    }
    function Xi(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Yi(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0,
            j = 0;
        g = i;
        h = Em(f, 148) | 0;
        if ((h | 0) == 0) {
            j = 0;
            i = g;
            return j | 0
        }
        wi(h, a, b, d, e);
        c[h >> 2] = 6600;
        j = h;
        i = g;
        return j | 0
    }
    function Zi(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        d = i;
        eb[c[(c[a >> 2] | 0) + 4 >> 2] & 127](a);
        Fm(b, a, 148);
        i = d;
        return
    }
    function _i(a, d, e, f) {
        a = a | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0;
        h = i;
        i = i + 48 | 0;
        j = h;
        k = c[(c[a + 48 >> 2] | 0) + 12 >> 2] | 0;
        c[j >> 2] = 488;
        c[j + 4 >> 2] = 1;
        g[j + 8 >> 2] = .009999999776482582;
        l = j + 28 | 0;
        c[l + 0 >> 2] = 0;
        c[l + 4 >> 2] = 0;
        c[l + 8 >> 2] = 0;
        c[l + 12 >> 2] = 0;
        b[l + 16 >> 1] = 0;
        Ge(k, j, c[a + 56 >> 2] | 0);
        cf(d, j, e, c[(c[a + 52 >> 2] | 0) + 12 >> 2] | 0, f);
        i = h;
        return
    }
    function $i(a) {
        a = a | 0;
        return
    }
    function aj(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function bj(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0;
        e = i;
        b = Em(f, 148) | 0;
        if ((b | 0) == 0) {
            g = 0;
            i = e;
            return g | 0
        }
        wi(b, a, 0, d, 0);
        c[b >> 2] = 6672;
        g = b;
        i = e;
        return g | 0
    }
    function cj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        d = i;
        eb[c[(c[a >> 2] | 0) + 4 >> 2] & 127](a);
        Fm(b, a, 148);
        i = d;
        return
    }
    function dj(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0;
        f = i;
        ff(b, c[(c[a + 48 >> 2] | 0) + 12 >> 2] | 0, d, c[(c[a + 52 >> 2] | 0) + 12 >> 2] | 0, e);
        i = f;
        return
    }
    function ej(a) {
        a = a | 0;
        return
    }
    function fj(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function gj(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0;
        e = i;
        b = Em(f, 148) | 0;
        if ((b | 0) == 0) {
            g = 0;
            i = e;
            return g | 0
        }
        wi(b, a, 0, d, 0);
        c[b >> 2] = 6744;
        g = b;
        i = e;
        return g | 0
    }
    function hj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        d = i;
        eb[c[(c[a >> 2] | 0) + 4 >> 2] & 127](a);
        Fm(b, a, 148);
        i = d;
        return
    }
    function ij(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0;
        f = i;
        gf(b, c[(c[a + 48 >> 2] | 0) + 12 >> 2] | 0, d, c[(c[a + 52 >> 2] | 0) + 12 >> 2] | 0, e);
        i = f;
        return
    }
    function jj(a) {
        a = a | 0;
        return
    }
    function kj(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function lj(a) {
        a = a | 0;
        var d = 0;
        d = i;
        b[a + 32 >> 1] = 1;
        b[a + 34 >> 1] = -1;
        b[a + 36 >> 1] = 0;
        c[a + 40 >> 2] = 0;
        c[a + 24 >> 2] = 0;
        c[a + 28 >> 2] = 0;
        c[a + 0 >> 2] = 0;
        c[a + 4 >> 2] = 0;
        c[a + 8 >> 2] = 0;
        c[a + 12 >> 2] = 0;
        i = d;
        return
    }
    function mj(d,
    e, f, h) {
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        j = i;
        c[d + 40 >> 2] = c[h + 4 >> 2];
        g[d + 16 >> 2] = +g[h + 8 >> 2];
        g[d + 20 >> 2] = +g[h + 12 >> 2];
        c[d + 8 >> 2] = f;
        c[d + 4 >> 2] = 0;
        f = d + 32 | 0;
        k = h + 22 | 0;
        b[f + 0 >> 1] = b[k + 0 >> 1] | 0;
        b[f + 2 >> 1] = b[k + 2 >> 1] | 0;
        b[f + 4 >> 1] = b[k + 4 >> 1] | 0;
        a[d + 38 >> 0] = a[h + 20 >> 0] | 0;
        k = c[h >> 2] | 0;
        f = nb[c[(c[k >> 2] | 0) + 8 >> 2] & 31](k, e) | 0;
        c[d + 12 >> 2] = f;
        k = bb[c[(c[f >> 2] | 0) + 12 >> 2] & 7](f) | 0;
        f = Em(e, k * 28 | 0) | 0;
        e = d + 24 | 0;
        c[e >> 2] = f;
        if ((k | 0) > 0) {
            l = f;
            m = 0
        } else {
            n = d + 28 | 0;
            c[n >> 2] = 0;
            o = h + 16 | 0;
            p = +g[o >> 2];
            g[d >> 2] = p;
            i = j;
            return
        }
        do {
            c[l + (m * 28 | 0) + 16 >>
            2] = 0;
            l = c[e >> 2] | 0;
            c[l + (m * 28 | 0) + 24 >> 2] = -1;
            m = m + 1 | 0
        } while ((m | 0) != (k | 0));
        n = d + 28 | 0;
        c[n >> 2] = 0;
        o = h + 16 | 0;
        p = +g[o >> 2];
        g[d >> 2] = p;
        i = j;
        return
    }
    function nj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0;
        d = i;
        e = a + 12 | 0;
        f = c[e >> 2] | 0;
        g = bb[c[(c[f >> 2] | 0) + 12 >> 2] & 7](f) | 0;
        f = a + 24 | 0;
        Fm(b, c[f >> 2] | 0, g * 28 | 0);
        c[f >> 2] = 0;
        f = c[e >> 2] | 0;
        g = c[f + 4 >> 2] | 0;
        if ((g | 0) == 1) {
            eb[c[c[f >> 2] >> 2] & 127](f);
            Fm(b, f, 48);
            c[e >> 2] = 0;
            i = d;
            return
        } else if ((g | 0) == 3) {
            eb[c[c[f >> 2] >> 2] & 127](f);
            Fm(b, f, 40);
            c[e >> 2] = 0;
            i = d;
            return
        } else if ((g | 0) == 0) {
            eb[c[c[f >> 2] >> 2] & 127](f);
            Fm(b, f, 20);
            c[e >> 2] = 0;
            i = d;
            return
        } else if ((g | 0) == 2) {
            eb[c[c[f >> 2] >> 2] & 127](f);
            Fm(b, f, 152);
            c[e >> 2] = 0;
            i = d;
            return
        } else {
            c[e >> 2] = 0;
            i = d;
            return
        }
    }
    function oj(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        e = i;
        f = a + 12 | 0;
        g = c[f >> 2] | 0;
        h = bb[c[(c[g >> 2] | 0) + 12 >> 2] & 7](g) | 0;
        g = a + 28 | 0;
        c[g >> 2] = h;
        if ((h | 0) <= 0) {
            i = e;
            return
        }
        h = a + 24 | 0;
        j = 0;
        do {
            k = c[h >> 2] | 0;
            l = k + (j * 28 | 0) | 0;
            m = c[f >> 2] | 0;
            pb[c[(c[m >> 2] | 0) + 28 >> 2] & 31](m, l, d, j);
            c[k + (j * 28 | 0) + 24 >> 2] = Oe(b, l, l) | 0;
            c[k + (j * 28 | 0) + 16 >> 2] = a;
            c[k + (j * 28 | 0) + 20 >> 2] = j;
            j = j + 1 | 0
        } while ((j | 0) < (c[g >> 2] | 0));
        i =
        e;
        return
    }
    function pj(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0;
        d = i;
        e = a + 28 | 0;
        if ((c[e >> 2] | 0) <= 0) {
            c[e >> 2] = 0;
            i = d;
            return
        }
        f = a + 24 | 0;
        a = 0;
        do {
            g = (c[f >> 2] | 0) + (a * 28 | 0) + 24 | 0;
            Pe(b, c[g >> 2] | 0);
            c[g >> 2] = -1;
            a = a + 1 | 0
        } while ((a | 0) < (c[e >> 2] | 0));
        c[e >> 2] = 0;
        i = d;
        return
    }
    function qj(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0;
        f = i;
        i = i + 48 | 0;
        h = f + 24 | 0;
        j = f + 8 | 0;
        k = f;
        l = a + 28 | 0;
        if ((c[l >> 2] | 0) <= 0) {
            i = f;
            return
        }
        m = a + 24 | 0;
        n = a + 12 | 0;
        a = h + 4 | 0;
        o = j + 4 | 0;
        p = h + 8 | 0;
        q = j + 8 |
        0;
        r = h + 12 | 0;
        s = j + 12 | 0;
        t = e + 4 | 0;
        u = d + 4 | 0;
        v = k + 4 | 0;
        w = 0;
        do {
            x = c[m >> 2] | 0;
            y = c[n >> 2] | 0;
            z = x + (w * 28 | 0) + 20 | 0;
            pb[c[(c[y >> 2] | 0) + 28 >> 2] & 31](y, h, d, c[z >> 2] | 0);
            y = c[n >> 2] | 0;
            pb[c[(c[y >> 2] | 0) + 28 >> 2] & 31](y, j, e, c[z >> 2] | 0);
            z = x + (w * 28 | 0) | 0;
            A = +g[h >> 2];
            B = +g[j >> 2];
            C = +g[a >> 2];
            D = +g[o >> 2];
            E = +(A < B ? A : B);
            B = +(C < D ? C : D);
            y = z;
            g[y >> 2] = E;
            g[y + 4 >> 2] = B;
            B = +g[p >> 2];
            E = +g[q >> 2];
            D = +g[r >> 2];
            C = +g[s >> 2];
            A = +(B > E ? B : E);
            E = +(D > C ? D : C);
            y = x + (w * 28 | 0) + 8 | 0;
            g[y >> 2] = A;
            g[y + 4 >> 2] = E;
            E = +g[t >> 2] - +g[u >> 2];
            g[k >> 2] = +g[e >> 2] - +g[d >> 2];
            g[v >> 2] = E;
            Qe(b, c[x + (w * 28 | 0) + 24 >> 2] | 0, z, k);
            w = w + 1 | 0
        } while ((w | 0) < (c[l >> 2] | 0));
        i = f;
        return
    }
    function rj(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0;
        e = i;
        Cm(b);
        Wm(b + 76 | 0);
        Sj(b + 102880 | 0);
        c[b + 102992 >> 2] = 0;
        c[b + 102996 >> 2] = 0;
        f = b + 102960 | 0;
        h = b + 103004 | 0;
        c[f + 0 >> 2] = 0;
        c[f + 4 >> 2] = 0;
        c[f + 8 >> 2] = 0;
        c[f + 12 >> 2] = 0;
        c[f + 16 >> 2] = 0;
        a[h >> 0] = 1;
        a[b + 103005 >> 0] = 1;
        a[b + 103006 >> 0] = 0;
        a[b + 103007 >> 0] = 1;
        a[b + 102988 >> 0] = 1;
        h = d;
        d = c[h + 4 >> 2] | 0;
        f = b + 102980 | 0;
        c[f >> 2] = c[h >> 2];
        c[f + 4 >> 2] = d;
        c[b + 102876 >> 2] = 4;
        g[b + 103E3 >> 2] = 0;
        c[b + 102956 >> 2] = b;
        c[b + 103040 >> 2] = 8792;
        c[b + 103044 >> 2] = c[2206];
        d = b + 103008 | 0;
        c[d + 0 >> 2] = 0;
        c[d + 4 >> 2] = 0;
        c[d + 8 >> 2] = 0;
        c[d + 12 >> 2] = 0;
        c[d + 16 >> 2] = 0;
        c[d + 20 >> 2] = 0;
        c[d + 24 >> 2] = 0;
        c[d + 28 >> 2] = 0;
        i = e;
        return
    }
    function qb(a) {
        a = a | 0;
        var b = 0;
        b = i;
        i = i + a | 0;
        i = i + 7 & -8;
        return b | 0
    }
    function rb() {
        return i | 0
    }
    function sb(a) {
        a = a | 0;
        i = a
    }
    function tb(a, b) {
        a = a | 0;
        b = b | 0;
        if ((p | 0) == 0) {
            p = a;
            q = b
        }
    }
    function ub(b) {
        b = b | 0;
        a[k >> 0] = a[b >> 0];
        a[k + 1 >> 0] = a[b + 1 >> 0];
        a[k + 2 >> 0] = a[b + 2 >> 0];
        a[k + 3 >> 0] = a[b + 3 >> 0]
    }
    function vb(b) {
        b = b | 0;
        a[k >> 0] = a[b >> 0];
        a[k + 1 >> 0] = a[b + 1 >> 0];
        a[k + 2 >> 0] = a[b + 2 >> 0];
        a[k + 3 >> 0] = a[b + 3 >> 0];
        a[k + 4 >> 0] = a[b + 4 >> 0];
        a[k + 5 >> 0] = a[b + 5 >> 0];
        a[k + 6 >>
        0] = a[b + 6 >> 0];
        a[k + 7 >> 0] = a[b + 7 >> 0]
    }
    function wb(a) {
        a = a | 0;
        E = a
    }
    function xb() {
        return E | 0
    }
    function yb(a) {
        a = a | 0;
        return 1+(c[a + 60 >> 2] | 0)
    }
    function zb(d, e, f, j, k, l, m, n, o, p, q) {
        d = d | 0;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = p | 0;
        q = +q;
        var r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0;
        r = i;
        i = i + 1104 | 0;
        s = r;
        t = r + 1072 | 0;
        u = r + 1032 | 0;
        v = r + 8 | 0;
        h[s >> 3] = l;
        c[t >> 2] = 0;
        g[t + 16 >> 2] = e;
        g[t + 8 >> 2] = f;
        a[t + 20 >> 0] = j != 0 & 1;
        g[t + 12 >> 2] = k;
        c[t + 4 >> 2] = s;
        b[t + 22 >> 1] = ~~m;
        b[t + 26 >> 1] = ~~n;
        b[t + 24 >> 1] = ~~o;
        c[u >> 2] = 760;
        c[u + 4 >> 2] = 3;
        g[u + 8 >> 2] = .009999999776482582;
        c[u + 12 >>
        2] = 0;
        c[u + 16 >> 2] = 0;
        a[u + 36 >> 0] = 0;
        a[u + 37 >> 0] = 0;
        s = ~~(q * .5);
        if (q > 0) {
            w = 0;
            x = 0
        } else {
            De(u, v, s);
            c[t >> 2] = u;
            y = Mj(d, t) | 0;
            Ce(u);
            i = r;
            return y | 0
        }
        while (1) {
            o = ++g[p + (w << 2) >> 2];
            n = ++g[p + ((w | 1) << 2) >> 2];
            z = v + (x << 3) | 0;
            g[z >> 2] = o;
            g[z + 4 >> 2] = n;
            w = w + 2 | 0;
            if (!(+(w | 0) < q))
                break;
            else
                x = x + 1 | 0
        }
        De(u, v, s);
        c[t >> 2] = u;
        y = Mj(d, t) | 0;
        Ce(u);
        i = r;
        return y | 0
    }
    function Ab(a) {
        a = a | 0;
        Ha(a | 0) | 0;
        xa()
    }
    function Bb(d, e, f, j, k, l, m, n, o, p, q, r) {
        d = d | 0;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        var s = 0,
            t = 0,
            u = 0,
            v = 0;
        s = i;
        i = i + 64 | 0;
        t = s;
        u = s + 28 | 0;
        v = s + 8 | 0;
        h[t >>
        3] = l;
        g[u + 16 >> 2] = e;
        g[u + 8 >> 2] = f;
        a[u + 20 >> 0] = j != 0 & 1;
        g[u + 12 >> 2] = k;
        c[u + 4 >> 2] = t;
        b[u + 22 >> 1] = ~~m;
        b[u + 26 >> 1] = ~~n;
        b[u + 24 >> 1] = ~~o;
        c[v >> 2] = 680;
        t = v + 4 | 0;
        c[t + 0 >> 2] = 0;
        c[t + 4 >> 2] = 0;
        c[t + 8 >> 2] = 0;
        g[v + 12 >> 2] = p;
        g[v + 16 >> 2] = q;
        g[v + 8 >> 2] = r;
        c[u >> 2] = v;
        v = Mj(d, u) | 0;
        i = s;
        return v | 0
    }
    function Cb(a) {
        a = a | 0;
        return
    }
    function Db(b, d, e, f, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B) {
        b = b | 0;
        d = +d;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        v = +v;
        w = +w;
        x = +x;
        y = +y;
        z = +z;
        A = +A;
        B = +B;
        var C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N =
            0,
            O = 0,
            P = 0,
            Q = 0;
        C = i;
        i = i + 112 | 0;
        D = C;
        E = C + 28 | 0;
        F = C + 8 | 0;
        h[D >> 3] = y;
        G = E + 8 | 0;
        H = E + 20 | 0;
        I = E + 4 | 0;
        J = E + 16 | 0;
        K = E + 28 | 0;
        L = E + 32 | 0;
        M = E + 33 | 0;
        N = E + 34 | 0;
        O = E + 35 | 0;
        P = E + 36 | 0;
        Q = E + 40 | 0;
        c[Q + 0 >> 2] = 0;
        c[Q + 4 >> 2] = 0;
        c[Q + 8 >> 2] = 0;
        c[Q + 12 >> 2] = 0;
        c[Q + 16 >> 2] = 0;
        c[Q + 20 >> 2] = 0;
        c[Q + 24 >> 2] = 0;
        g[J >> 2] = d;
        g[K >> 2] = e;
        a[L >> 0] = ~~f;
        a[M >> 0] = ~~j;
        a[N >> 0] = ~~k;
        a[O >> 0] = ~~l;
        c[E >> 2] = ~~m >>> 0;
        c[E + 72 >> 2] = 0;
        c[I >> 2] = ~~o >>> 0;
        g[E + 64 >> 2] = p;
        p = +q;
        q = +r;
        I = H;
        g[I >> 2] = p;
        g[I + 4 >> 2] = q;
        q = +s;
        s = +t;
        I = G;
        g[I >> 2] = q;
        g[I + 4 >> 2] = s;
        c[E + 60 >> 2] = 0;
        c[E + 56 >> 2] = ~~v;
        c[E + 48 >> 2] = 0;
        c[E + 44 >> 2] = 0;
        g[P >>
        2] = w;
        g[E + 52 >> 2] = x;
        c[E + 68 >> 2] = D;
        c[F >> 2] = 680;
        c[F + 4 >> 2] = 0;
        x = +z;
        z = +A;
        D = F + 12 | 0;
        g[D >> 2] = x;
        g[D + 4 >> 2] = z;
        g[F + 8 >> 2] = B;
        c[Q >> 2] = F;
        F = Fk(b, E) | 0;
        i = C;
        return F | 0
    }
    function Eb(a, b, d, e, f, h, j, k) {
        a = a | 0;
        b = +b;
        d = +d;
        e = +e;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        var l = 0,
            m = 0,
            n = 0,
            o = 0;
        l = i;
        i = i + 48 | 0;
        m = l + 16 | 0;
        n = l;
        c[m >> 2] = 680;
        o = m + 4 | 0;
        c[o + 0 >> 2] = 0;
        c[o + 4 >> 2] = 0;
        c[o + 8 >> 2] = 0;
        g[m + 12 >> 2] = b;
        g[m + 16 >> 2] = d;
        g[m + 8 >> 2] = e;
        g[n >> 2] = f;
        g[n + 4 >> 2] = h;
        g[n + 8 >> 2] = j;
        g[n + 12 >> 2] = k;
        k = +(Ck(a, m, n, 0) | 0);
        i = l;
        return +k
    }
    function Fb(d, e, f, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) {
        d = d | 0;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        v = +v;
        w = +w;
        x = +x;
        y = +y;
        var z = 0,
            A = 0,
            B = 0,
            C = 0;
        z = i;
        i = i + 96 | 0;
        A = z;
        B = z + 56 | 0;
        C = z + 8 | 0;
        h[A >> 3] = l;
        g[B + 16 >> 2] = e;
        g[B + 8 >> 2] = f;
        a[B + 20 >> 0] = j != 0 & 1;
        g[B + 12 >> 2] = k;
        c[B + 4 >> 2] = A;
        b[B + 22 >> 1] = ~~m;
        b[B + 26 >> 1] = ~~n;
        b[B + 24 >> 1] = ~~o;
        c[C >> 2] = 488;
        c[C + 4 >> 2] = 1;
        g[C + 8 >> 2] = .009999999776482582;
        A = C + 28 | 0;
        c[A + 0 >> 2] = 0;
        c[A + 4 >> 2] = 0;
        c[A + 8 >> 2] = 0;
        c[A + 12 >> 2] = 0;
        b[A + 16 >> 1] = 0;
        o = +r;
        r = +s;
        A = C + 28 | 0;
        g[A >> 2] = o;
        g[A + 4 >> 2] = r;
        r = +t;
        t = +u;
        A = C + 12 | 0;
        g[A >> 2] = r;
        g[A + 4 >> 2] = t;
        t = +v;
        v = +w;
        A = C + 20 | 0;
        g[A >> 2] = t;
        g[A + 4 >> 2] =
        v;
        v = +x;
        x = +y;
        A = C + 36 | 0;
        g[A >> 2] = v;
        g[A + 4 >> 2] = x;
        a[C + 44 >> 0] = p != 0 & 1;
        a[C + 45 >> 0] = q != 0 & 1;
        c[B >> 2] = C;
        C = Mj(d, B) | 0;
        i = z;
        return C | 0
    }
    function Gb(a) {
        a = a | 0;
        return
    }
    function Hb(d, e, f, j, k, l, m, n, o, p, q, r, s, t, u) {
        d = d | 0;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        var v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0;
        v = i;
        i = i + 224 | 0;
        w = v;
        x = v + 184 | 0;
        y = v + 160 | 0;
        z = v + 8 | 0;
        h[w >> 3] = l;
        g[x + 16 >> 2] = e;
        g[x + 8 >> 2] = f;
        a[x + 20 >> 0] = j != 0 & 1;
        g[x + 12 >> 2] = k;
        c[x + 4 >> 2] = w;
        b[x + 22 >> 1] = ~~m;
        b[x + 26 >> 1] = ~~n;
        b[x + 24 >> 1] = ~~o;
        g[y >> 2] = p;
        g[y + 4 >> 2] = q;
        g[y + 8 >> 2] = r;
        g[y + 12 >> 2] =
        s;
        g[y + 16 >> 2] = t;
        g[y + 20 >> 2] = u;
        c[z >> 2] = 592;
        c[z + 4 >> 2] = 2;
        g[z + 8 >> 2] = .009999999776482582;
        c[z + 148 >> 2] = 0;
        g[z + 12 >> 2] = 0;
        g[z + 16 >> 2] = 0;
        oe(z, y, 3);
        c[x >> 2] = z;
        z = Mj(d, x) | 0;
        i = v;
        return z | 0
    }
    function Ib(a) {
        a = a | 0;
        return
    }
    function Jb(d, e, f, j, k, l, m, n, o, p, q, r, s, t, u, v, w) {
        d = d | 0;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        v = +v;
        w = +w;
        var x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0;
        x = i;
        i = i + 224 | 0;
        y = x;
        z = x + 192 | 0;
        A = x + 160 | 0;
        B = x + 8 | 0;
        h[y >> 3] = l;
        g[z + 16 >> 2] = e;
        g[z + 8 >> 2] = f;
        a[z + 20 >> 0] = j != 0 & 1;
        g[z + 12 >> 2] = k;
        c[z + 4 >> 2] = y;
        b[z + 22 >> 1] = ~~m;
        b[z + 26 >>
        1] = ~~n;
        b[z + 24 >> 1] = ~~o;
        g[A >> 2] = p;
        g[A + 4 >> 2] = q;
        g[A + 8 >> 2] = r;
        g[A + 12 >> 2] = s;
        g[A + 16 >> 2] = t;
        g[A + 20 >> 2] = u;
        g[A + 24 >> 2] = v;
        g[A + 28 >> 2] = w;
        c[B >> 2] = 592;
        c[B + 4 >> 2] = 2;
        g[B + 8 >> 2] = .009999999776482582;
        c[B + 148 >> 2] = 0;
        g[B + 12 >> 2] = 0;
        g[B + 16 >> 2] = 0;
        oe(B, A, 4);
        c[z >> 2] = B;
        B = Mj(d, z) | 0;
        i = x;
        return B | 0
    }
    function Kb(d, e, f, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) {
        d = d | 0;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        v = +v;
        w = +w;
        x = +x;
        y = +y;
        var z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0;
        z = i;
        i = i + 240 | 0;
        A = z;
        B = z + 200 | 0;
        C = z + 160 | 0;
        D = z + 8 | 0;
        h[A >> 3] = l;
        g[B + 16 >> 2] = e;
        g[B + 8 >> 2] = f;
        a[B + 20 >> 0] = j != 0 & 1;
        g[B + 12 >> 2] = k;
        c[B + 4 >> 2] = A;
        b[B + 22 >> 1] = ~~m;
        b[B + 26 >> 1] = ~~n;
        b[B + 24 >> 1] = ~~o;
        g[C >> 2] = p;
        g[C + 4 >> 2] = q;
        g[C + 8 >> 2] = r;
        g[C + 12 >> 2] = s;
        g[C + 16 >> 2] = t;
        g[C + 20 >> 2] = u;
        g[C + 24 >> 2] = v;
        g[C + 28 >> 2] = w;
        g[C + 32 >> 2] = x;
        g[C + 36 >> 2] = y;
        c[D >> 2] = 592;
        c[D + 4 >> 2] = 2;
        g[D + 8 >> 2] = .009999999776482582;
        c[D + 148 >> 2] = 0;
        g[D + 12 >> 2] = 0;
        g[D + 16 >> 2] = 0;
        oe(D, C, 5);
        c[B >> 2] = D;
        D = Mj(d, B) | 0;
        i = z;
        return D | 0
    }
    function Lb(d, e, f, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A) {
        d = d | 0;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        v = +v;
        w = +w;
        x = +x;
        y = +y;
        z = +z;
        A = +A;
        var B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0;
        B = i;
        i = i + 240 | 0;
        C = B;
        D = B + 208 | 0;
        E = B + 160 | 0;
        F = B + 8 | 0;
        h[C >> 3] = l;
        g[D + 16 >> 2] = e;
        g[D + 8 >> 2] = f;
        a[D + 20 >> 0] = j != 0 & 1;
        g[D + 12 >> 2] = k;
        c[D + 4 >> 2] = C;
        b[D + 22 >> 1] = ~~m;
        b[D + 26 >> 1] = ~~n;
        b[D + 24 >> 1] = ~~o;
        g[E >> 2] = p;
        g[E + 4 >> 2] = q;
        g[E + 8 >> 2] = r;
        g[E + 12 >> 2] = s;
        g[E + 16 >> 2] = t;
        g[E + 20 >> 2] = u;
        g[E + 24 >> 2] = v;
        g[E + 28 >> 2] = w;
        g[E + 32 >> 2] = x;
        g[E + 36 >> 2] = y;
        g[E + 40 >> 2] = z;
        g[E + 44 >> 2] = A;
        c[F >> 2] = 592;
        c[F + 4 >> 2] = 2;
        g[F + 8 >> 2] = .009999999776482582;
        c[F + 148 >> 2] = 0;
        g[F + 12 >> 2] = 0;
        g[F + 16 >> 2] = 0;
        oe(F, E, 6);
        c[D >> 2] = F;
        F = Mj(d, D) | 0;
        i = B;
        return F |
        0
    }
    function Mb(d, e, f, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C) {
        d = d | 0;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        v = +v;
        w = +w;
        x = +x;
        y = +y;
        z = +z;
        A = +A;
        B = +B;
        C = +C;
        var D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0;
        D = i;
        i = i + 256 | 0;
        E = D;
        F = D + 216 | 0;
        G = D + 160 | 0;
        H = D + 8 | 0;
        h[E >> 3] = l;
        g[F + 16 >> 2] = e;
        g[F + 8 >> 2] = f;
        a[F + 20 >> 0] = j != 0 & 1;
        g[F + 12 >> 2] = k;
        c[F + 4 >> 2] = E;
        b[F + 22 >> 1] = ~~m;
        b[F + 26 >> 1] = ~~n;
        b[F + 24 >> 1] = ~~o;
        g[G >> 2] = p;
        g[G + 4 >> 2] = q;
        g[G + 8 >> 2] = r;
        g[G + 12 >> 2] = s;
        g[G + 16 >> 2] = t;
        g[G + 20 >> 2] = u;
        g[G + 24 >> 2] = v;
        g[G + 28 >> 2] = w;
        g[G + 32 >> 2] = x;
        g[G + 36 >> 2] = y;
        g[G + 40 >>
        2] = z;
        g[G + 44 >> 2] = A;
        g[G + 48 >> 2] = B;
        g[G + 52 >> 2] = C;
        c[H >> 2] = 592;
        c[H + 4 >> 2] = 2;
        g[H + 8 >> 2] = .009999999776482582;
        c[H + 148 >> 2] = 0;
        g[H + 12 >> 2] = 0;
        g[H + 16 >> 2] = 0;
        oe(H, G, 7);
        c[F >> 2] = H;
        H = Mj(d, F) | 0;
        i = D;
        return H | 0
    }
    function Nb(d, e, f, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E) {
        d = d | 0;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        v = +v;
        w = +w;
        x = +x;
        y = +y;
        z = +z;
        A = +A;
        B = +B;
        C = +C;
        D = +D;
        E = +E;
        var F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0;
        F = i;
        i = i + 256 | 0;
        G = F;
        H = F + 224 | 0;
        I = F + 160 | 0;
        J = F + 8 | 0;
        h[G >> 3] = l;
        g[H + 16 >> 2] = e;
        g[H + 8 >> 2] = f;
        a[H + 20 >> 0] = j != 0 & 1;
        g[H +
        12 >> 2] = k;
        c[H + 4 >> 2] = G;
        b[H + 22 >> 1] = ~~m;
        b[H + 26 >> 1] = ~~n;
        b[H + 24 >> 1] = ~~o;
        g[I >> 2] = p;
        g[I + 4 >> 2] = q;
        g[I + 8 >> 2] = r;
        g[I + 12 >> 2] = s;
        g[I + 16 >> 2] = t;
        g[I + 20 >> 2] = u;
        g[I + 24 >> 2] = v;
        g[I + 28 >> 2] = w;
        g[I + 32 >> 2] = x;
        g[I + 36 >> 2] = y;
        g[I + 40 >> 2] = z;
        g[I + 44 >> 2] = A;
        g[I + 48 >> 2] = B;
        g[I + 52 >> 2] = C;
        g[I + 56 >> 2] = D;
        g[I + 60 >> 2] = E;
        c[J >> 2] = 592;
        c[J + 4 >> 2] = 2;
        g[J + 8 >> 2] = .009999999776482582;
        c[J + 148 >> 2] = 0;
        g[J + 12 >> 2] = 0;
        g[J + 16 >> 2] = 0;
        oe(J, I, 8);
        c[H >> 2] = J;
        J = Mj(d, H) | 0;
        i = F;
        return J | 0
    }
    function Ob(b, d, e, f, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G) {
        b = b | 0;
        d = +d;
        e = +e;
        f = +f;
        j =
        +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        v = +v;
        w = +w;
        x = +x;
        y = +y;
        z = +z;
        A = +A;
        B = +B;
        C = +C;
        D = +D;
        E = +E;
        F = +F;
        G = +G;
        var H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0;
        H = i;
        i = i + 272 | 0;
        I = H;
        J = H + 192 | 0;
        K = H + 160 | 0;
        L = H + 8 | 0;
        h[I >> 3] = y;
        M = J + 8 | 0;
        N = J + 20 | 0;
        O = J + 4 | 0;
        P = J + 16 | 0;
        Q = J + 28 | 0;
        R = J + 32 | 0;
        S = J + 33 | 0;
        T = J + 34 | 0;
        U = J + 35 | 0;
        V = J + 36 | 0;
        W = J + 40 | 0;
        c[W + 0 >> 2] = 0;
        c[W + 4 >> 2] = 0;
        c[W + 8 >> 2] = 0;
        c[W + 12 >> 2] = 0;
        c[W + 16 >> 2] = 0;
        c[W + 20 >> 2] = 0;
        c[W + 24 >> 2] = 0;
        g[P >> 2] = d;
        g[Q >> 2] = e;
        a[R >> 0] = ~~f;
        a[S >> 0] = ~~j;
        a[T >> 0] = ~~k;
        a[U >> 0] = ~~l;
        c[J >> 2] =
        ~~m >>> 0;
        c[J + 72 >> 2] = 0;
        c[O >> 2] = ~~o >>> 0;
        g[J + 64 >> 2] = p;
        p = +q;
        q = +r;
        O = N;
        g[O >> 2] = p;
        g[O + 4 >> 2] = q;
        q = +s;
        s = +t;
        O = M;
        g[O >> 2] = q;
        g[O + 4 >> 2] = s;
        c[J + 60 >> 2] = 0;
        c[J + 56 >> 2] = ~~v;
        c[J + 48 >> 2] = 0;
        c[J + 44 >> 2] = 0;
        g[V >> 2] = w;
        g[J + 52 >> 2] = x;
        c[J + 68 >> 2] = I;
        g[K >> 2] = z;
        g[K + 4 >> 2] = A;
        g[K + 8 >> 2] = B;
        g[K + 12 >> 2] = C;
        g[K + 16 >> 2] = D;
        g[K + 20 >> 2] = E;
        g[K + 24 >> 2] = F;
        g[K + 28 >> 2] = G;
        c[L >> 2] = 592;
        c[L + 4 >> 2] = 2;
        g[L + 8 >> 2] = .009999999776482582;
        c[L + 148 >> 2] = 0;
        g[L + 12 >> 2] = 0;
        g[L + 16 >> 2] = 0;
        oe(L, K, 4);
        c[W >> 2] = L;
        L = Fk(b, J) | 0;
        i = H;
        return L | 0
    }
    function Pb(a, b, d, e, f, h, j, k, l, m, n, o, p) {
        a = a | 0;
        b = +b;
        d = +d;
        e = +e;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        var q = 0,
            r = 0,
            s = 0,
            t = 0;
        q = i;
        i = i + 208 | 0;
        r = q + 168 | 0;
        s = q + 16 | 0;
        t = q;
        g[r >> 2] = b;
        g[r + 4 >> 2] = d;
        g[r + 8 >> 2] = e;
        g[r + 12 >> 2] = f;
        g[r + 16 >> 2] = h;
        g[r + 20 >> 2] = j;
        g[r + 24 >> 2] = k;
        g[r + 28 >> 2] = l;
        c[s >> 2] = 592;
        c[s + 4 >> 2] = 2;
        g[s + 8 >> 2] = .009999999776482582;
        c[s + 148 >> 2] = 0;
        g[s + 12 >> 2] = 0;
        g[s + 16 >> 2] = 0;
        oe(s, r, 4);
        g[t >> 2] = m;
        g[t + 4 >> 2] = n;
        g[t + 8 >> 2] = o;
        g[t + 12 >> 2] = p;
        p = +(Ck(a, s, t, 0) | 0);
        i = q;
        return +p
    }
    function Qb(a, d, e) {
        a = a | 0;
        d = +d;
        e = +e;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        f = i;
        h = d;
        if ((c[a >> 2] | 0) != 2) {
            i = f;
            return
        }
        j =
        a + 4 | 0;
        k = b[j >> 1] | 0;
        if ((e != 0 ? (k & 2) == 0 : 0) ? (l = k & 65535, (l & 2 | 0) == 0) : 0) {
            m = (l | 2) & 65535;
            b[j >> 1] = m;
            g[a + 160 >> 2] = 0;
            n = m
        } else
            n = k;
        if ((n & 2) == 0) {
            i = f;
            return
        }
        n = a + 88 | 0;
        g[n >> 2] = +g[n >> 2] + h * +g[a + 144 >> 2];
        i = f;
        return
    }
    function Rb(a, d, e, f, h, j) {
        a = a | 0;
        d = +d;
        e = +e;
        f = +f;
        h = +h;
        j = +j;
        var k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0;
        k = i;
        l = d;
        d = e;
        e = f;
        f = h;
        if ((c[a >> 2] | 0) != 2) {
            i = k;
            return
        }
        m = a + 4 | 0;
        n = b[m >> 1] | 0;
        if ((j != 0 ? (n & 2) == 0 : 0) ? (o = n & 65535, (o & 2 | 0) == 0) : 0) {
            p = (o | 2) & 65535;
            b[m >> 1] = p;
            g[a + 160 >> 2] = 0;
            q = p
        } else
            q = n;
        if ((q & 2) == 0) {
            i = k;
            return
        }
        q = a + 92 | 0;
        g[q >> 2] = l + +g[q >> 2];
        q = a + 96 | 0;
        g[q >> 2] = d + +g[q >> 2];
        q = a + 100 | 0;
        g[q >> 2] = +g[q >> 2] + (d * (e - +g[a + 60 >> 2]) - l * (f - +g[a + 64 >> 2]));
        i = k;
        return
    }
    function Sb(a, d, e, f) {
        a = a | 0;
        d = +d;
        e = +e;
        f = +f;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        h = i;
        j = d;
        d = e;
        if ((c[a >> 2] | 0) != 2) {
            i = h;
            return
        }
        k = a + 4 | 0;
        l = b[k >> 1] | 0;
        if ((f != 0 ? (l & 2) == 0 : 0) ? (m = l & 65535, (m & 2 | 0) == 0) : 0) {
            n = (m | 2) & 65535;
            b[k >> 1] = n;
            g[a + 160 >> 2] = 0;
            o = n
        } else
            o = l;
        if ((o & 2) == 0) {
            i = h;
            return
        }
        o = a + 92 | 0;
        g[o >> 2] = j + +g[o >> 2];
        o = a + 96 | 0;
        g[o >> 2] = d + +g[o >> 2];
        i = h;
        return
    }
    function Tb(a, d, e) {
        a = a | 0;
        d = +d;
        e = +e;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        f =
        i;
        h = d;
        if ((c[a >> 2] | 0) != 2) {
            i = f;
            return
        }
        j = a + 4 | 0;
        k = b[j >> 1] | 0;
        if ((e != 0 ? (k & 2) == 0 : 0) ? (l = k & 65535, (l & 2 | 0) == 0) : 0) {
            m = (l | 2) & 65535;
            b[j >> 1] = m;
            g[a + 160 >> 2] = 0;
            n = m
        } else
            n = k;
        if ((n & 2) == 0) {
            i = f;
            return
        }
        n = a + 100 | 0;
        g[n >> 2] = h + +g[n >> 2];
        i = f;
        return
    }
    function Ub(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        c = i;
        Nj(a, b);
        i = c;
        return
    }
    function Vb(a) {
        a = a | 0;
        return ++g[a + 72 >> 2]
    }
    function Wb(a) {
        a = a | 0;
        return ++g[a + 88 >> 2]
    }
    function Xb(a) {
        a = a | 0;
        var b = 0,
            c = 0;
        b = +g[a + 44 >> 2];
        c = +g[a + 48 >> 2];
        return +(+g[a + 140 >> 2] + +g[a + 132 >> 2] * (b * b + c * c))
    }
    function Yb(a, b) {
        a = a | 0;
        b = b | 0;
        var c =
        0;
        c = +g[a + 84 >> 2];
        g[b >> 2] = +g[a + 80 >> 2];
        g[b + 4 >> 2] = c;
        return
    }
    function Zb(a, b, c, d) {
        a = a | 0;
        b = +b;
        c = +c;
        d = d | 0;
        var e = 0,
            f = 0;
        e = b - +g[a + 12 >> 2];
        b = c - +g[a + 16 >> 2];
        c = +g[a + 24 >> 2];
        f = +g[a + 20 >> 2];
        g[d >> 2] = e * c + b * f;
        g[d + 4 >> 2] = c * b - e * f;
        return
    }
    function _b(a, b, c, d) {
        a = a | 0;
        b = +b;
        c = +c;
        d = d | 0;
        var e = 0,
            f = 0;
        e = b - +g[a + 12 >> 2];
        b = c - +g[a + 16 >> 2];
        c = +g[a + 24 >> 2];
        f = +g[a + 20 >> 2];
        g[d >> 2] = e * c + b * f;
        g[d + 4 >> 2] = c * b - e * f;
        return
    }
    function $b(a) {
        a = a | 0;
        return ++g[a + 132 >> 2]
    }
    function ac(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        c = +g[a + 16 >> 2];
        g[b >> 2] = +g[a + 12 >> 2];
        g[b + 4 >> 2] = c;
        return
    }
    function bc(a,
    b) {
        a = a | 0;
        b = b | 0;
        g[b >> 2] = +g[a + 12 >> 2];
        g[b + 4 >> 2] = +g[a + 16 >> 2];
        g[b + 8 >> 2] = +g[a + 20 >> 2];
        g[b + 12 >> 2] = +g[a + 24 >> 2];
        return
    }
    function cc(a) {
        a = a | 0;
        return 1+((c[a >> 2] | 0) >>> 0)
    }
    function dc(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        c = +g[a + 64 >> 2];
        g[b >> 2] = +g[a + 60 >> 2];
        g[b + 4 >> 2] = c;
        return
    }
    function ec(a, b, c, d) {
        a = a | 0;
        b = +b;
        c = +c;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0;
        e = b;
        b = c;
        c = +g[a + 24 >> 2];
        f = +g[a + 20 >> 2];
        h = b * c + e * f + +g[a + 16 >> 2];
        g[d >> 2] = +g[a + 12 >> 2] + (e * c - b * f);
        g[d + 4 >> 2] = h;
        return
    }
    function fc(a, b, c, d) {
        a = a | 0;
        b = +b;
        c = +c;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0;
        e = b;
        b = c;
        c = +g[a + 24 >> 2];
        f = +g[a +
        20 >> 2];
        h = b * c + e * f + +g[a + 16 >> 2];
        g[d >> 2] = +g[a + 12 >> 2] + (e * c - b * f);
        g[d + 4 >> 2] = h;
        return
    }
    function gc(a, d) {
        a = a | 0;
        d = +d;
        var f = 0,
            h = 0,
            j = 0,
            k = 0;
        f = i;
        h = a + 4 | 0;
        j = e[h >> 1] | 0;
        if (!(d != 0)) {
            b[h >> 1] = j & 65533;
            g[a + 160 >> 2] = 0;
            k = a + 80 | 0;
            c[k + 0 >> 2] = 0;
            c[k + 4 >> 2] = 0;
            c[k + 8 >> 2] = 0;
            c[k + 12 >> 2] = 0;
            c[k + 16 >> 2] = 0;
            c[k + 20 >> 2] = 0;
            i = f;
            return
        }
        if ((j & 2 | 0) != 0) {
            i = f;
            return
        }
        b[h >> 1] = j | 2;
        g[a + 160 >> 2] = 0;
        i = f;
        return
    }
    function hc(a, d) {
        a = a | 0;
        d = +d;
        var f = 0,
            h = 0,
            j = 0,
            k = 0;
        f = i;
        h = d;
        if ((c[a >> 2] | 0) == 0) {
            i = f;
            return
        }
        if (h * h > 0 ? (j = a + 4 | 0, k = e[j >> 1] | 0, (k & 2 | 0) == 0) : 0) {
            b[j >> 1] = k | 2;
            g[a + 160 >>
            2] = 0
        }
        g[a + 88 >> 2] = h;
        i = f;
        return
    }
    function ic(a, d, f) {
        a = a | 0;
        d = +d;
        f = +f;
        var h = 0,
            j = 0,
            k = 0,
            l = 0;
        h = i;
        j = d;
        d = f;
        if ((c[a >> 2] | 0) == 0) {
            i = h;
            return
        }
        if (j * j + d * d > 0 ? (k = a + 4 | 0, l = e[k >> 1] | 0, (l & 2 | 0) == 0) : 0) {
            b[k >> 1] = l | 2;
            g[a + 160 >> 2] = 0
        }
        f = +j;
        j = +d;
        l = a + 80 | 0;
        g[l >> 2] = f;
        g[l + 4 >> 2] = j;
        i = h;
        return
    }
    function jc(a, b, c, d, e) {
        a = a | 0;
        b = +b;
        c = +c;
        d = +d;
        e = +e;
        var f = 0,
            h = 0;
        f = i;
        i = i + 16 | 0;
        h = f;
        g[h >> 2] = b;
        g[h + 4 >> 2] = c;
        g[h + 8 >> 2] = d;
        g[h + 12 >> 2] = e;
        Oj(a, h);
        i = f;
        return
    }
    function kc(a, b, c, d) {
        a = a | 0;
        b = +b;
        c = +c;
        d = +d;
        var e = 0,
            f = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        g[f >> 2] = b;
        g[f + 4 >> 2] = c;
        Qj(a, f, d);
        i =
        e;
        return
    }
    function lc(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        Jj(a, ~~b >>> 0);
        i = c;
        return
    }
    function mc(a, b, d) {
        a = a | 0;
        b = +b;
        d = +d;
        var e = 0,
            f = 0,
            h = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        g[f >> 2] = b;
        g[f + 4 >> 2] = d;
        h = c[a + 12 >> 2] | 0;
        d = +((hb[c[(c[h >> 2] | 0) + 16 >> 2] & 15](h, (c[a + 8 >> 2] | 0) + 12 | 0, f) | 0) & 1);
        i = e;
        return +d
    }
    function nc(a) {
        a = a | 0;
        return
    }
    function oc(a) {
        a = a | 0;
        return
    }
    function pc(a) {
        a = a | 0;
        return
    }
    function qc(a, b) {
        a = +a;
        b = +b;
        var c = 0,
            d = 0,
            e = 0;
        c = i;
        i = i + 16 | 0;
        d = c;
        e = qn(103048) | 0;
        g[d >> 2] = a;
        g[d + 4 >> 2] = b;
        rj(e, d);
        i = c;
        return e | 0
    }
    function rc(b, d, e, f, h, j, k, l, m, n, o, p, q, r, s,
    t, u) {
        b = b | 0;
        d = +d;
        e = +e;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = u | 0;
        var v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0;
        v = i;
        i = i + 64 | 0;
        w = v;
        x = w + 44 | 0;
        y = w + 4 | 0;
        z = w + 36 | 0;
        c[y + 0 >> 2] = 0;
        c[y + 4 >> 2] = 0;
        c[y + 8 >> 2] = 0;
        c[y + 12 >> 2] = 0;
        c[y + 16 >> 2] = 0;
        c[y + 20 >> 2] = 0;
        a[w + 40 >> 0] = d != 0 & 1;
        a[z >> 0] = e != 0 & 1;
        g[w + 12 >> 2] = f;
        g[w + 24 >> 2] = h;
        g[w + 32 >> 2] = j;
        a[w + 37 >> 0] = k != 0 & 1;
        a[w + 39 >> 0] = l != 0 & 1;
        a[w + 38 >> 0] = m != 0 & 1;
        g[w + 48 >> 2] = n;
        g[w + 28 >> 2] = o;
        g[w + 16 >> 2] = p;
        g[w + 20 >> 2] = q;
        g[y >> 2] = r;
        g[w + 8 >> 2] = s;
        c[w >> 2] = ~~t >>> 0;
        c[x >> 2] = u;
        u = vj(b, w) | 0;
        i = v;
        return u | 0
    }
    function sc(b,
    d, e, f, h, j, k, l, m, n, o, p, q, r, s, t, u, v) {
        b = b | 0;
        d = +d;
        e = +e;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        v = +v;
        var w = 0,
            x = 0,
            y = 0;
        w = i;
        i = i + 96 | 0;
        x = w;
        a[x >> 0] = 0;
        g[x + 4 >> 2] = 1;
        g[x + 8 >> 2] = 1;
        c[x + 16 >> 2] = 0;
        g[x + 72 >> 2] = d;
        g[x + 24 >> 2] = e;
        a[x + 76 >> 0] = f != 0 & 1;
        g[x + 56 >> 2] = h;
        g[x + 28 >> 2] = j;
        g[x + 80 >> 2] = k;
        g[x + 52 >> 2] = l;
        g[x + 20 >> 2] = m;
        g[x + 12 >> 2] = n;
        g[x + 48 >> 2] = o;
        g[x + 32 >> 2] = p;
        c[x + 68 >> 2] = ~~q;
        g[x + 64 >> 2] = r;
        g[x + 60 >> 2] = s;
        g[x + 44 >> 2] = t;
        g[x + 40 >> 2] = u;
        g[x + 36 >> 2] = v;
        y = zj(b, x) | 0;
        i = w;
        return y | 0
    }
    function tc(a) {
        a = a | 0;
        var b = 0;
        b = i;
        if ((a | 0) !=
        0) {
            sj(a);
            sn(a)
        }
        i = b;
        return
    }
    function uc(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        c = i;
        wj(a, b);
        i = c;
        return
    }
    function vc(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        c = i;
        xj(a, b);
        i = c;
        return
    }
    function wc(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        c = i;
        tj(a, b);
        i = c;
        return
    }
    function xc(a, b, c, d, e) {
        a = a | 0;
        b = +b;
        c = +c;
        d = +d;
        e = +e;
        var f = 0,
            h = 0,
            j = 0,
            k = 0;
        f = i;
        i = i + 16 | 0;
        h = f;
        j = +b;
        b = +c;
        k = h;
        g[k >> 2] = j;
        g[k + 4 >> 2] = b;
        b = +d;
        d = +e;
        k = h + 8 | 0;
        g[k >> 2] = b;
        g[k + 4 >> 2] = d;
        Dj(a, 16, h);
        i = f;
        return
    }
    function yc(a, b, c, d, e) {
        a = a | 0;
        b = +b;
        c = +c;
        d = +d;
        e = +e;
        var f = 0,
            h = 0,
            j = 0;
        f = i;
        i = i + 16 | 0;
        h = f + 8 | 0;
        j = f;
        g[h >> 2] = b;
        g[h + 4 >> 2] = c;
        g[j >> 2] = d;
        g[j + 4 >> 2] = e;
        Ej(a, 24, h, j);
        i = f;
        return
    }
    function zc(a) {
        a = a | 0;
        var b = 0;
        b = i;
        uj(a, 8);
        i = b;
        return
    }
    function Ac(a, b, c) {
        a = a | 0;
        b = +b;
        c = +c;
        var d = 0,
            e = 0,
            f = 0;
        d = i;
        e = +b;
        b = +c;
        f = a + 102980 | 0;
        g[f >> 2] = e;
        g[f + 4 >> 2] = b;
        i = d;
        return
    }
    function Bc(a, b, c, d) {
        a = a | 0;
        b = +b;
        c = +c;
        d = +d;
        var e = 0;
        e = i;
        Cj(a, b, ~~c, ~~d, 3);
        i = e;
        return
    }
    function Cc(a) {
        a = a | 0;
        return a + 64 | 0
    }
    function Dc(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0;
        b = i;
        d = c[a + 48 >> 2] | 0;
        e = c[a + 52 >> 2] | 0;
        jf(32, a + 64 | 0, (c[d + 8 >> 2] | 0) + 12 | 0, +g[(c[d + 12 >> 2] | 0) + 8 >> 2], (c[e + 8 >> 2] | 0) + 12 | 0, +g[(c[e + 12 >> 2] | 0) + 8 >> 2]);
        i = b;
        return 32
    }
    function Ec(b, d, e, f, h, j, k, l, m, n, o) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        var p = 0,
            q = 0,
            r = 0;
        p = i;
        i = i + 48 | 0;
        q = p;
        c[q + 0 >> 2] = 0;
        c[q + 4 >> 2] = 0;
        c[q + 8 >> 2] = 0;
        c[q + 12 >> 2] = 0;
        c[q >> 2] = 3;
        r = q + 20 | 0;
        c[r >> 2] = 0;
        c[r + 4 >> 2] = 0;
        c[q + 8 >> 2] = d;
        c[q + 12 >> 2] = e;
        a[q + 16 >> 0] = f != 0 & 1;
        g[q + 44 >> 2] = h;
        g[q + 40 >> 2] = j;
        g[q + 36 >> 2] = k;
        k = +l;
        l = +m;
        e = q + 20 | 0;
        g[e >> 2] = k;
        g[e + 4 >> 2] = l;
        l = +n;
        n = +o;
        e = q + 28 | 0;
        g[e >> 2] = l;
        g[e + 4 >> 2] = n;
        e = yj(b, q) | 0;
        i = p;
        return e | 0
    }
    function Fc(b, d, e, f, h, j, k, l, m, n) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        var o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0;
        o = i;
        i = i + 64 | 0;
        p = o + 16 | 0;
        q = o + 8 | 0;
        r = o;
        c[p + 0 >> 2] = 0;
        c[p + 4 >> 2] = 0;
        c[p + 8 >> 2] = 0;
        c[p + 12 >> 2] = 0;
        c[p >> 2] = 3;
        s = p + 20 | 0;
        t = p + 36 | 0;
        c[s + 0 >> 2] = 0;
        c[s + 4 >> 2] = 0;
        c[s + 8 >> 2] = 0;
        c[s + 12 >> 2] = 0;
        g[t >> 2] = 1;
        a[p + 16 >> 0] = l != 0 & 1;
        g[p + 44 >> 2] = m;
        g[p + 40 >> 2] = n;
        g[q >> 2] = f;
        g[q + 4 >> 2] = h;
        g[r >> 2] = j;
        g[r + 4 >> 2] = k;
        Xf(p, d, e, q, r);
        r = yj(b, p) | 0;
        i = o;
        return r | 0
    }
    function Gc(b, d, e, f, h, j, k, l, m, n) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        var o = 0,
            p = 0,
            q = 0;
        o = i;
        i = i + 48 | 0;
        p = o;
        c[p + 0 >> 2] = 0;
        c[p + 4 >> 2] = 0;
        c[p + 8 >> 2] = 0;
        c[p + 12 >> 2] = 0;
        c[p >> 2] =
        9;
        q = p + 20 | 0;
        c[q + 0 >> 2] = 0;
        c[q + 4 >> 2] = 0;
        c[q + 8 >> 2] = 0;
        c[q + 12 >> 2] = 0;
        c[q + 16 >> 2] = 0;
        c[p + 8 >> 2] = d;
        c[p + 12 >> 2] = e;
        a[p + 16 >> 0] = f != 0 & 1;
        f = +h;
        h = +j;
        e = p + 20 | 0;
        g[e >> 2] = f;
        g[e + 4 >> 2] = h;
        h = +k;
        k = +l;
        e = p + 28 | 0;
        g[e >> 2] = h;
        g[e + 4 >> 2] = k;
        g[p + 36 >> 2] = m;
        g[p + 40 >> 2] = n;
        e = yj(b, p) | 0;
        i = o;
        return e | 0
    }
    function Hc(b, d, e, f, h, j, k, l) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        var m = 0,
            n = 0,
            o = 0,
            p = 0;
        m = i;
        i = i + 64 | 0;
        n = m + 8 | 0;
        o = m;
        c[n + 0 >> 2] = 0;
        c[n + 4 >> 2] = 0;
        c[n + 8 >> 2] = 0;
        c[n + 12 >> 2] = 0;
        c[n >> 2] = 9;
        p = n + 20 | 0;
        c[p + 0 >> 2] = 0;
        c[p + 4 >> 2] = 0;
        c[p + 8 >> 2] = 0;
        c[p + 12 >> 2] = 0;
        c[p + 16 >> 2] = 0;
        a[n +
        16 >> 0] = j != 0 & 1;
        g[n + 36 >> 2] = k;
        g[n + 40 >> 2] = l;
        g[o >> 2] = f;
        g[o + 4 >> 2] = h;
        hg(n, d, e, o);
        o = yj(b, n) | 0;
        i = m;
        return o | 0
    }
    function Ic(a) {
        a = a | 0;
        var b = 0,
            c = 0;
        b = i;
        c = +Ng(a);
        i = b;
        return +c
    }
    function Jc(b, d, e, f, h, j, k) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = h | 0;
        j = j | 0;
        k = +k;
        var l = 0,
            m = 0;
        l = i;
        i = i + 32 | 0;
        m = l;
        c[m + 0 >> 2] = 0;
        c[m + 4 >> 2] = 0;
        c[m + 8 >> 2] = 0;
        c[m + 12 >> 2] = 0;
        c[m >> 2] = 6;
        c[m + 8 >> 2] = d;
        c[m + 12 >> 2] = e;
        a[m + 16 >> 0] = f != 0 & 1;
        c[m + 20 >> 2] = h;
        c[m + 24 >> 2] = j;
        g[m + 28 >> 2] = k;
        j = yj(b, m) | 0;
        i = l;
        return j | 0
    }
    function Kc(a) {
        a = a | 0;
        return c[a + 48 >> 2] | 0
    }
    function Lc(a) {
        a = a | 0;
        return c[a + 52 >>
        2] | 0
    }
    function Mc(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        Sf(a, b);
        i = c;
        return
    }
    function Nc(a, b, c) {
        a = a | 0;
        b = +b;
        c = +c;
        var d = 0,
            e = 0;
        d = i;
        i = i + 16 | 0;
        e = d;
        g[e >> 2] = b;
        g[e + 4 >> 2] = c;
        Rf(a, e);
        i = d;
        return
    }
    function Oc(b, d, e, f, h, j, k, l, m, n) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        var o = 0,
            p = 0;
        o = i;
        i = i + 48 | 0;
        p = o;
        c[p + 0 >> 2] = 0;
        c[p + 4 >> 2] = 0;
        c[p + 8 >> 2] = 0;
        c[p + 12 >> 2] = 0;
        c[p >> 2] = 11;
        c[p + 8 >> 2] = d;
        c[p + 12 >> 2] = e;
        a[p + 16 >> 0] = f != 0 & 1;
        g[p + 28 >> 2] = h;
        g[p + 40 >> 2] = j;
        j = +k;
        k = +l;
        e = p + 20 | 0;
        g[e >> 2] = j;
        g[e + 4 >> 2] = k;
        g[p + 32 >> 2] = m;
        g[p + 36 >> 2] = n;
        e = yj(b, p) | 0;
        i = o;
        return e |
        0
    }
    function Pc(b, d, e, f, h, j, k) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        var l = 0,
            m = 0;
        l = i;
        i = i + 48 | 0;
        m = l;
        c[m + 0 >> 2] = 0;
        c[m + 4 >> 2] = 0;
        c[m + 8 >> 2] = 0;
        c[m + 12 >> 2] = 0;
        c[m >> 2] = 11;
        g[m + 20 >> 2] = 0;
        g[m + 24 >> 2] = 0;
        g[m + 28 >> 2] = 0;
        a[m + 16 >> 0] = f != 0 & 1;
        g[m + 40 >> 2] = h;
        g[m + 32 >> 2] = j;
        g[m + 36 >> 2] = k;
        If(m, d, e);
        e = yj(b, m) | 0;
        i = l;
        return e | 0
    }
    function Qc(a, b, c) {
        a = a | 0;
        b = +b;
        c = +c;
        var d = 0,
            e = 0;
        d = i;
        i = i + 16 | 0;
        e = d;
        g[e >> 2] = b;
        g[e + 4 >> 2] = c;
        wf(a, e);
        i = d;
        return
    }
    function Rc(b, d, e, f, h, j, k, l, m) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        var n = 0,
            o = 0;
        n = i;
        i = i + 48 | 0;
        o = n;
        c[o + 0 >> 2] = 0;
        c[o + 4 >> 2] = 0;
        c[o + 8 >> 2] = 0;
        c[o + 12 >> 2] = 0;
        c[o >> 2] = 5;
        c[o + 8 >> 2] = d;
        c[o + 12 >> 2] = e;
        a[o + 16 >> 0] = f != 0 & 1;
        g[o + 36 >> 2] = h;
        g[o + 32 >> 2] = j;
        g[o + 28 >> 2] = k;
        k = +l;
        l = +m;
        e = o + 20 | 0;
        g[e >> 2] = k;
        g[e + 4 >> 2] = l;
        e = yj(b, o) | 0;
        i = n;
        return e | 0
    }
    function Sc(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        ah(a, b != 0);
        i = c;
        return
    }
    function Tc(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        ch(a, b != 0);
        i = c;
        return
    }
    function Uc(a) {
        a = a | 0;
        var b = 0,
            c = 0;
        b = i;
        c = +_g(a);
        i = b;
        return +c
    }
    function Vc(a) {
        a = a | 0;
        return ++g[a + 132 >> 2]
    }
    function Wc(a, b) {
        a = a | 0;
        b = +b;
        var c = 0,
            d = 0;
        c = i;
        d = +eh(a, b);
        i = c;
        return +d
    }
    function Xc(a) {
        a = a | 0;
        var b = 0,
            c = 0;
        b = i;
        c = +(($g(a) | 0) & 1);
        i = b;
        return +c
    }
    function Yc(a) {
        a = a | 0;
        var b = 0,
            c = 0;
        b = i;
        c = +((bh(a) | 0) & 1);
        i = b;
        return +c
    }
    function Zc(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        dh(a, b);
        i = c;
        return
    }
    function _c(b, d, e, f, h, j, k, l, m, n, o, p, q, r, s, t, u) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        t = +t;
        u = +u;
        var v = 0,
            w = 0,
            x = 0;
        v = i;
        i = i + 80 | 0;
        w = v;
        c[w + 0 >> 2] = 0;
        c[w + 4 >> 2] = 0;
        c[w + 8 >> 2] = 0;
        c[w + 12 >> 2] = 0;
        c[w >> 2] = 2;
        x = w + 20 | 0;
        c[x >> 2] = 0;
        c[x + 4 >> 2] = 0;
        c[w + 8 >> 2] = d;
        c[w + 12 >> 2] = e;
        a[w + 16 >> 0] = f != 0 & 1;
        a[w + 48 >>
        0] = h != 0 & 1;
        a[w + 60 >> 0] = j != 0 & 1;
        j = +k;
        k = +l;
        e = w + 20 | 0;
        g[e >> 2] = j;
        g[e + 4 >> 2] = k;
        k = +m;
        m = +n;
        e = w + 28 | 0;
        g[e >> 2] = k;
        g[e + 4 >> 2] = m;
        m = +o;
        o = +p;
        e = w + 36 | 0;
        g[e >> 2] = m;
        g[e + 4 >> 2] = o;
        g[w + 52 >> 2] = q;
        g[w + 64 >> 2] = r;
        g[w + 68 >> 2] = s;
        g[w + 44 >> 2] = t;
        g[w + 56 >> 2] = u;
        e = yj(b, w) | 0;
        i = v;
        return e | 0
    }
    function $c(b, d, e, f, h, j, k, l, m, n, o, p, q, r) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        var s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0;
        s = i;
        i = i + 96 | 0;
        t = s + 16 | 0;
        u = s + 8 | 0;
        v = s;
        c[t + 0 >> 2] = 0;
        c[t + 4 >> 2] = 0;
        c[t + 8 >> 2] = 0;
        c[t + 12 >> 2] = 0;
        c[t >> 2] = 2;
        w = t + 20 | 0;
        x = t + 36 | 0;
        c[w + 0 >>
        2] = 0;
        c[w + 4 >> 2] = 0;
        c[w + 8 >> 2] = 0;
        c[w + 12 >> 2] = 0;
        g[x >> 2] = 1;
        g[t + 40 >> 2] = 0;
        g[t + 44 >> 2] = 0;
        a[t + 16 >> 0] = l != 0 & 1;
        a[t + 48 >> 0] = m != 0 & 1;
        a[t + 60 >> 0] = n != 0 & 1;
        g[t + 52 >> 2] = o;
        g[t + 64 >> 2] = p;
        g[t + 68 >> 2] = q;
        g[t + 56 >> 2] = r;
        g[u >> 2] = f;
        g[u + 4 >> 2] = h;
        g[v >> 2] = j;
        g[v + 4 >> 2] = k;
        Rg(t, d, e, u, v);
        v = yj(b, t) | 0;
        i = s;
        return v | 0
    }
    function ad(b, d, e, f, h, j, k, l, m, n, o, p, q, r, s) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        var t = 0,
            u = 0;
        t = i;
        i = i + 64 | 0;
        u = t;
        c[u + 0 >> 2] = 0;
        c[u + 4 >> 2] = 0;
        c[u + 8 >> 2] = 0;
        c[u >> 2] = 4;
        c[u + 8 >> 2] = d;
        c[u + 12 >> 2] = e;
        a[u + 16 >> 0] =
        f != 0 & 1;
        f = +h;
        h = +j;
        e = u + 20 | 0;
        g[e >> 2] = f;
        g[e + 4 >> 2] = h;
        h = +k;
        k = +l;
        e = u + 28 | 0;
        g[e >> 2] = h;
        g[e + 4 >> 2] = k;
        g[u + 52 >> 2] = m;
        g[u + 56 >> 2] = n;
        n = +o;
        o = +p;
        e = u + 36 | 0;
        g[e >> 2] = n;
        g[e + 4 >> 2] = o;
        o = +q;
        q = +r;
        e = u + 44 | 0;
        g[e >> 2] = o;
        g[e + 4 >> 2] = q;
        g[u + 60 >> 2] = s;
        e = yj(b, u) | 0;
        i = t;
        return e | 0
    }
    function bd(b, d, e, f, h, j, k, l, m, n, o, p, q) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        var r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0;
        r = i;
        i = i + 96 | 0;
        s = r + 32 | 0;
        t = r + 24 | 0;
        u = r + 16 | 0;
        v = r + 8 | 0;
        w = r;
        c[s + 0 >> 2] = 0;
        c[s + 4 >> 2] = 0;
        c[s + 8 >> 2] = 0;
        c[s + 12 >> 2] = 0;
        c[s >> 2] = 4;
        g[s + 20 >> 2] = -1;
        g[s +
        24 >> 2] = 1;
        g[s + 28 >> 2] = 1;
        g[s + 32 >> 2] = 1;
        g[s + 36 >> 2] = -1;
        g[s + 40 >> 2] = 0;
        g[s + 44 >> 2] = 1;
        g[s + 48 >> 2] = 0;
        g[s + 52 >> 2] = 0;
        g[s + 56 >> 2] = 0;
        g[s + 60 >> 2] = 1;
        a[s + 16 >> 0] = q != 0 & 1;
        g[t >> 2] = l;
        g[t + 4 >> 2] = m;
        g[u >> 2] = n;
        g[u + 4 >> 2] = o;
        g[v >> 2] = f;
        g[v + 4 >> 2] = h;
        g[w >> 2] = j;
        g[w + 4 >> 2] = k;
        ci(s, d, e, t, u, v, w, p);
        w = yj(b, s) | 0;
        i = r;
        return w | 0
    }
    function cd(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        Nh(a, b != 0);
        i = c;
        return
    }
    function dd(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        Kh(a, b != 0);
        i = c;
        return
    }
    function ed(a) {
        a = a | 0;
        var b = 0,
            c = 0;
        b = i;
        c = +Ih(a);
        i = b;
        return +c
    }
    function fd(a) {
        a = a | 0;
        var b = 0,
            c = 0;
        b = i;
        c =
        +((Mh(a) | 0) & 1);
        i = b;
        return +c
    }
    function gd(a) {
        a = a | 0;
        var b = 0,
            c = 0;
        b = i;
        c = +((Jh(a) | 0) & 1);
        i = b;
        return +c
    }
    function hd(b, d, e, f, h, j, k, l, m, n, o, p, q, r, s) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        var t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0;
        t = i;
        i = i + 64 | 0;
        u = t;
        c[u + 0 >> 2] = 0;
        c[u + 4 >> 2] = 0;
        c[u + 8 >> 2] = 0;
        c[u + 12 >> 2] = 0;
        c[u >> 2] = 1;
        v = u + 20 | 0;
        w = u + 44 | 0;
        x = u + 48 | 0;
        y = u + 60 | 0;
        z = u + 56 | 0;
        A = u + 52 | 0;
        c[v + 0 >> 2] = 0;
        c[v + 4 >> 2] = 0;
        c[v + 8 >> 2] = 0;
        c[v + 12 >> 2] = 0;
        c[u + 8 >> 2] = d;
        c[u + 12 >> 2] = e;
        a[u + 16 >> 0] = f != 0 & 1;
        a[u + 40 >> 0] = h != 0 & 1;
        a[A >> 0] = j !=
        0 & 1;
        j = +l;
        l = +m;
        A = u + 20 | 0;
        g[A >> 2] = j;
        g[A + 4 >> 2] = l;
        l = +n;
        n = +o;
        A = u + 28 | 0;
        g[A >> 2] = l;
        g[A + 4 >> 2] = n;
        g[w >> 2] = k;
        g[y >> 2] = p;
        g[z >> 2] = q;
        g[u + 36 >> 2] = r;
        g[x >> 2] = s;
        x = yj(b, u) | 0;
        i = t;
        return x | 0
    }
    function id(b, d, e, f, h, j, k, l, m, n, o, p) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        var q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0;
        q = i;
        i = i + 80 | 0;
        r = q + 8 | 0;
        s = q;
        c[r + 0 >> 2] = 0;
        c[r + 4 >> 2] = 0;
        c[r + 8 >> 2] = 0;
        c[r + 12 >> 2] = 0;
        c[r >> 2] = 1;
        t = r + 20 | 0;
        u = r + 44 | 0;
        v = r + 48 | 0;
        w = r + 60 | 0;
        x = r + 56 | 0;
        y = r + 52 | 0;
        c[t + 0 >> 2] = 0;
        c[t + 4 >> 2] = 0;
        c[t + 8 >> 2] = 0;
        c[t + 12 >> 2] = 0;
        c[t + 16 >>
        2] = 0;
        a[r + 16 >> 0] = j != 0 & 1;
        a[r + 40 >> 0] = k != 0 & 1;
        a[y >> 0] = l != 0 & 1;
        g[u >> 2] = m;
        g[w >> 2] = n;
        g[x >> 2] = o;
        g[v >> 2] = p;
        g[s >> 2] = f;
        g[s + 4 >> 2] = h;
        zh(r, d, e, s);
        s = yj(b, r) | 0;
        i = q;
        return s | 0
    }
    function jd(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        Lh(a, b);
        i = c;
        return
    }
    function kd(b, d, e, f, h, j, k, l, m) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        var n = 0,
            o = 0;
        n = i;
        i = i + 48 | 0;
        o = n;
        c[o + 0 >> 2] = 0;
        c[o + 4 >> 2] = 0;
        c[o + 8 >> 2] = 0;
        c[o + 12 >> 2] = 0;
        c[o >> 2] = 10;
        c[o + 8 >> 2] = d;
        c[o + 12 >> 2] = e;
        a[o + 16 >> 0] = f != 0 & 1;
        f = +h;
        h = +j;
        e = o + 20 | 0;
        g[e >> 2] = f;
        g[e + 4 >> 2] = h;
        h = +k;
        k = +l;
        e = o + 28 | 0;
        g[e >> 2] = h;
        g[e +
        4 >> 2] = k;
        g[o + 36 >> 2] = m;
        e = yj(b, o) | 0;
        i = n;
        return e | 0
    }
    function ld(b, d, e, f, h, j, k, l, m, n, o) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        var p = 0,
            q = 0,
            r = 0;
        p = i;
        i = i + 48 | 0;
        q = p;
        c[q + 0 >> 2] = 0;
        c[q + 4 >> 2] = 0;
        c[q + 8 >> 2] = 0;
        c[q + 12 >> 2] = 0;
        c[q >> 2] = 8;
        r = q + 20 | 0;
        c[r + 0 >> 2] = 0;
        c[r + 4 >> 2] = 0;
        c[r + 8 >> 2] = 0;
        c[r + 12 >> 2] = 0;
        c[q + 8 >> 2] = d;
        c[q + 12 >> 2] = e;
        a[q + 16 >> 0] = f != 0 & 1;
        g[q + 44 >> 2] = h;
        g[q + 40 >> 2] = j;
        j = +k;
        k = +l;
        e = q + 20 | 0;
        g[e >> 2] = j;
        g[e + 4 >> 2] = k;
        k = +m;
        m = +n;
        e = q + 28 | 0;
        g[e >> 2] = k;
        g[e + 4 >> 2] = m;
        g[q + 36 >> 2] = o;
        e = yj(b, q) | 0;
        i = p;
        return e | 0
    }
    function md(b, d, e, f,
    h, j, k, l) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        var m = 0,
            n = 0,
            o = 0,
            p = 0;
        m = i;
        i = i + 64 | 0;
        n = m + 8 | 0;
        o = m;
        c[n + 0 >> 2] = 0;
        c[n + 4 >> 2] = 0;
        c[n + 8 >> 2] = 0;
        c[n + 12 >> 2] = 0;
        c[n >> 2] = 8;
        p = n + 20 | 0;
        c[p + 0 >> 2] = 0;
        c[p + 4 >> 2] = 0;
        c[p + 8 >> 2] = 0;
        c[p + 12 >> 2] = 0;
        c[p + 16 >> 2] = 0;
        a[n + 16 >> 0] = j != 0 & 1;
        g[n + 44 >> 2] = k;
        g[n + 40 >> 2] = l;
        g[o >> 2] = f;
        g[o + 4 >> 2] = h;
        tg(n, d, e, o);
        o = yj(b, n) | 0;
        i = m;
        return o | 0
    }
    function nd(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        _h(a, b);
        i = c;
        return
    }
    function od(a, b) {
        a = a | 0;
        b = +b;
        g[a + 68 >> 2] = b;
        return
    }
    function pd(b, d, e, f, h, j, k, l, m, n, o, p, q, r, s) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f =
        +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        s = +s;
        var t = 0,
            u = 0,
            v = 0;
        t = i;
        i = i + 64 | 0;
        u = t;
        c[u + 0 >> 2] = 0;
        c[u + 4 >> 2] = 0;
        c[u + 8 >> 2] = 0;
        c[u + 12 >> 2] = 0;
        c[u >> 2] = 7;
        v = u + 20 | 0;
        c[v >> 2] = 0;
        c[v + 4 >> 2] = 0;
        c[u + 8 >> 2] = d;
        c[u + 12 >> 2] = e;
        a[u + 16 >> 0] = f != 0 & 1;
        g[u + 60 >> 2] = h;
        a[u + 44 >> 0] = j != 0 & 1;
        g[u + 56 >> 2] = k;
        k = +l;
        l = +m;
        e = u + 20 | 0;
        g[e >> 2] = k;
        g[e + 4 >> 2] = l;
        l = +n;
        n = +o;
        e = u + 28 | 0;
        g[e >> 2] = l;
        g[e + 4 >> 2] = n;
        n = +p;
        p = +q;
        e = u + 36 | 0;
        g[e >> 2] = n;
        g[e + 4 >> 2] = p;
        g[u + 48 >> 2] = r;
        g[u + 52 >> 2] = s;
        e = yj(b, u) | 0;
        i = t;
        return e | 0
    }
    function qd(b, d, e, f, h, j, k, l, m, n, o, p, q) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = +h;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        var r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0;
        r = i;
        i = i + 80 | 0;
        s = r + 16 | 0;
        t = r + 8 | 0;
        u = r;
        c[s + 0 >> 2] = 0;
        c[s + 4 >> 2] = 0;
        c[s + 8 >> 2] = 0;
        c[s + 12 >> 2] = 0;
        c[s >> 2] = 7;
        v = s + 20 | 0;
        w = s + 36 | 0;
        c[v + 0 >> 2] = 0;
        c[v + 4 >> 2] = 0;
        c[v + 8 >> 2] = 0;
        c[v + 12 >> 2] = 0;
        g[w >> 2] = 1;
        g[s + 40 >> 2] = 0;
        a[s + 16 >> 0] = l != 0 & 1;
        g[s + 60 >> 2] = m;
        a[s + 44 >> 0] = n != 0 & 1;
        g[s + 56 >> 2] = o;
        g[s + 48 >> 2] = p;
        g[s + 52 >> 2] = q;
        g[t >> 2] = f;
        g[t + 4 >> 2] = h;
        g[u >> 2] = j;
        g[u + 4 >> 2] = k;
        Rh(s, d, e, t, u);
        u = yj(b, s) | 0;
        i = r;
        return u | 0
    }
    function rd(a, b, c) {
        a = a | 0;
        b = +b;
        c = +c;
        var d = 0,
            e = 0;
        d = i;
        i = i + 16 | 0;
        e = d;
        g[e >>
        2] = b;
        g[e + 4 >> 2] = c;
        ok(a, e);
        i = d;
        return
    }
    function sd(a, b, c) {
        a = a | 0;
        b = +b;
        c = +c;
        var d = 0,
            e = 0;
        d = i;
        i = i + 16 | 0;
        e = d;
        g[e >> 2] = b;
        g[e + 4 >> 2] = c;
        pk(a, e);
        i = d;
        return
    }
    function td(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = i;
        qk(a, b != 0);
        i = c;
        return
    }
    function ud(a) {
        a = a | 0;
        return 1+(c[a + 4 >> 2] | 0)
    }
    function vd(a) {
        a = a | 0;
        return 1+((c[a + 8 >> 2] | 0) - (c[a + 4 >> 2] | 0) | 0)
    }
    function wd(b, d, e, f, j, k, l, m, n, o, p, q, r) {
        b = b | 0;
        d = +d;
        e = +e;
        f = +f;
        j = +j;
        k = +k;
        l = +l;
        m = +m;
        n = +n;
        o = +o;
        p = +p;
        q = +q;
        r = +r;
        var s = 0,
            t = 0,
            u = 0,
            v = 0;
        s = i;
        i = i + 64 | 0;
        t = s + 8 | 0;
        u = s;
        v = s + 16 | 0;
        h[t >> 3] = l;
        h[u >> 3] = p;
        a[v + 20 >> 0] = ~~d;
        a[v + 21 >> 0] = ~~f;
        a[v + 22 >> 0] = ~~e;
        a[v + 23 >> 0] = ~~j;
        c[v >> 2] = ~~k >>> 0;
        c[v + 32 >> 2] = t;
        g[v + 24 >> 2] = m;
        m = +n;
        n = +o;
        t = v + 4 | 0;
        g[t >> 2] = m;
        g[t + 4 >> 2] = n;
        c[v + 28 >> 2] = u;
        n = +q;
        q = +r;
        u = v + 12 | 0;
        g[u >> 2] = n;
        g[u + 4 >> 2] = q;
        q = +(wk(b, v) | 0);
        i = s;
        return +q
    }
    function xd(a) {
        a = a | 0;
        var b = 0,
            c = 0;
        b = i;
        c = uk(a) | 0;
        i = b;
        return c | 0
    }
    function yd(a) {
        a = a | 0;
        return 1+(c[a + 44 >> 2] | 0)
    }
    function zd(a) {
        a = a | 0;
        return c[a + 96 >> 2] | 0
    }
    function Ad(a) {
        a = a | 0;
        return c[a + 104 >> 2] | 0
    }
    function Bd(a, b) {
        a = a | 0;
        b = +b;
        g[a + 340 >> 2] = b;
        return
    }
    function Cd(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = b;
        g[a + 320 >> 2] = c;
        g[a + 28 >> 2] = 1 / c;
        return
    }
    function Dd(a, b) {
        a = a | 0;
        b = +b;
        var c = 0;
        c = b * 2;
        g[a + 32 >> 2] = c;
        g[a + 40 >> 2] = c * c;
        g[a + 36 >> 2] = 1 / c;
        return
    }
    function Ed(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Fd(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = +e;
        var f = 0;
        a = i;
        f = +La(b | 0, ++g[c >> 2], ++g[c + 4 >> 2], ++g[d >> 2], ++g[d + 4 >> 2], +e);
        i = a;
        return +f
    }
    function Gd(a, b, c, d, e, f) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        return 0
    }
    function Hd(a, b) {
        a = a | 0;
        b = b | 0;
        return 1
    }
    function Id(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Jd(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        a = i;
        c = Xa(b | 0) | 0;
        i = a;
        return c | 0
    }
    function Kd(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        return 0
    }
    function Ld(a, b) {
        a = a | 0;
        b = b | 0;
        return 1
    }
    function Md(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Nd(a, b) {
        a = a | 0;
        b = b | 0;
        a = i;
        Pa(b | 0);
        i = a;
        return
    }
    function Od(a, b) {
        a = a | 0;
        b = b | 0;
        a = i;
        Wa(b | 0);
        i = a;
        return
    }
    function Pd(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        return
    }
    function Qd(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        return
    }
    function Rd(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        return
    }
    function Sd(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        return
    }
    function Td(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        a = i;
        ya(b |
        0, c | 0);
        i = a;
        return
    }
    function Ud(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        a = i;
        Ya(b | 0, c | 0);
        i = a;
        return
    }
    function Vd(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Wd(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Xd(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function Yd() {
        c[2] = 280;
        c[4] = 176;
        c[6] = 72;
        return
    }
    function Zd(d, e) {
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca =
            0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Da = 0,
            Ea = 0,
            Fa = 0,
            Ga = 0,
            Ha = 0;
        f = i;
        i = i + 320 | 0;
        h = f;
        j = f + 284 | 0;
        k = f + 248 | 0;
        l = f + 236 | 0;
        m = f + 144 | 0;
        n = f + 120 | 0;
        o = f + 16 | 0;
        p = f + 12 | 0;
        q = f + 8 | 0;
        Km(h);
        c[104] = (c[104] | 0) + 1;
        c[d >> 2] = 0;
        r = e + 128 | 0;
        s = d + 4 | 0;
        g[s >> 2] = +g[r >> 2];
        t = e + 28 | 0;
        u = j + 0 | 0;
        v = e + 56 | 0;
        w = u + 36 | 0;
        do {
            c[u >> 2] = c[v >> 2];
            u = u + 4 | 0;
            v = v + 4 | 0
        } while ((u | 0) < (w | 0));
        u = k + 0 | 0;
        v = e + 92 | 0;
        w = u + 36 | 0;
        do {
            c[u >> 2] = c[v >> 2];
            u = u + 4 | 0;
            v = v + 4 | 0
        } while ((u | 0) < (w | 0));
        v = j + 24 | 0;
        x =
        +g[v >> 2];
        y = +O(+(x / 6.2831854820251465)) * 6.2831854820251465;
        z = x - y;
        g[v >> 2] = z;
        u = j + 28 | 0;
        x = +g[u >> 2] - y;
        g[u >> 2] = x;
        w = k + 24 | 0;
        y = +g[w >> 2];
        A = +O(+(y / 6.2831854820251465)) * 6.2831854820251465;
        B = y - A;
        g[w >> 2] = B;
        C = k + 28 | 0;
        y = +g[C >> 2] - A;
        g[C >> 2] = y;
        A = +g[r >> 2];
        D = +g[e + 24 >> 2] + +g[e + 52 >> 2] + -.014999999664723873;
        E = D < .004999999888241291 ? .004999999888241291 : D;
        b[l + 4 >> 1] = 0;
        c[m + 0 >> 2] = c[e + 0 >> 2];
        c[m + 4 >> 2] = c[e + 4 >> 2];
        c[m + 8 >> 2] = c[e + 8 >> 2];
        c[m + 12 >> 2] = c[e + 12 >> 2];
        c[m + 16 >> 2] = c[e + 16 >> 2];
        c[m + 20 >> 2] = c[e + 20 >> 2];
        c[m + 24 >> 2] = c[e + 24 >> 2];
        r = m + 28 | 0;
        c[r +
        0 >> 2] = c[t + 0 >> 2];
        c[r + 4 >> 2] = c[t + 4 >> 2];
        c[r + 8 >> 2] = c[t + 8 >> 2];
        c[r + 12 >> 2] = c[t + 12 >> 2];
        c[r + 16 >> 2] = c[t + 16 >> 2];
        c[r + 20 >> 2] = c[t + 20 >> 2];
        c[r + 24 >> 2] = c[t + 24 >> 2];
        a[m + 88 >> 0] = 0;
        r = j + 8 | 0;
        F = j + 12 | 0;
        G = j + 16 | 0;
        H = j + 20 | 0;
        I = j + 4 | 0;
        J = k + 8 | 0;
        K = k + 12 | 0;
        L = k + 16 | 0;
        M = k + 20 | 0;
        N = k + 4 | 0;
        P = m + 56 | 0;
        Q = m + 64 | 0;
        R = m + 68 | 0;
        U = m + 72 | 0;
        V = m + 80 | 0;
        W = m + 84 | 0;
        X = n + 16 | 0;
        D = E + .0012499999720603228;
        Y = E + -.0012499999720603228;
        Z = z;
        z = x;
        x = B;
        B = y;
        _ = 0;
        y = 0;
        a:
        while (1) {
            $ = 1 - y;
            aa = $ * Z + y * z;
            ba = +T(+aa);
            ca = +S(+aa);
            aa = +g[j >> 2];
            da = +g[I >> 2];
            ea = $ * x + y * B;
            fa = +T(+ea);
            ga = +S(+ea);
            ea = +g[k >> 2];
            ha =
            +g[N >> 2];
            ia = $ * +g[J >> 2] + y * +g[L >> 2] - (ga * ea - fa * ha);
            ja = $ * +g[K >> 2] + y * +g[M >> 2] - (fa * ea + ga * ha);
            ha = +($ * +g[r >> 2] + y * +g[G >> 2] - (ca * aa - ba * da));
            ea = +($ * +g[F >> 2] + y * +g[H >> 2] - (ba * aa + ca * da));
            ka = P;
            g[ka >> 2] = ha;
            g[ka + 4 >> 2] = ea;
            g[Q >> 2] = ba;
            g[R >> 2] = ca;
            ca = +ia;
            ia = +ja;
            ka = U;
            g[ka >> 2] = ca;
            g[ka + 4 >> 2] = ia;
            g[V >> 2] = fa;
            g[W >> 2] = ga;
            de(n, l, m);
            ga = +g[X >> 2];
            if (ga <= 0) {
                la = 3;
                break
            }
            if (ga < D) {
                la = 5;
                break
            }
            +_d(o, l, e, j, t, k, y);
            ka = 0;
            ga = A;
            while (1) {
                fa = +$d(o, p, q, ga);
                if (fa > D) {
                    la = 8;
                    break a
                }
                if (fa > Y) {
                    ma = ga;
                    break
                }
                na = c[p >> 2] | 0;
                oa = c[q >> 2] | 0;
                ia = +ae(o, na, oa, y);
                if (ia <
                Y) {
                    la = 11;
                    break a
                }
                if (!(ia <= D)) {
                    pa = y;
                    qa = ga;
                    ra = 0;
                    sa = ia;
                    ta = fa
                } else {
                    la = 13;
                    break a
                }
                while (1) {
                    if ((ra & 1 | 0) == 0)
                        ua = (pa + qa) * .5;
                    else
                        ua = pa + (E - sa) * (qa - pa) / (ta - sa);
                    ra = ra + 1 | 0;
                    c[110] = (c[110] | 0) + 1;
                    fa = +ae(o, na, oa, ua);
                    ia = fa - E;
                    if (ia > 0)
                        va = ia;
                    else
                        va = -ia;
                    if (va < .0012499999720603228) {
                        wa = ua;
                        break
                    }
                    xa = fa > E;
                    if ((ra | 0) == 50) {
                        wa = ga;
                        break
                    } else {
                        pa = xa ? ua : pa;
                        qa = xa ? qa : ua;
                        sa = xa ? fa : sa;
                        ta = xa ? ta : fa
                    }
                }
                oa = c[112] | 0;
                c[112] = (oa | 0) > (ra | 0) ? oa : ra;
                ka = ka + 1 | 0;
                if ((ka | 0) == 8) {
                    ma = y;
                    break
                } else
                    ga = wa
            }
            ka = _ + 1 | 0;
            c[106] = (c[106] | 0) + 1;
            if ((ka | 0) == 20) {
                la = 25;
                break
            }
            Z =
            +g[v >> 2];
            z = +g[u >> 2];
            x = +g[w >> 2];
            B = +g[C >> 2];
            _ = ka;
            y = ma
        }
        if ((la | 0) == 3) {
            c[d >> 2] = 2;
            g[s >> 2] = 0;
            ya = _;
            za = c[108] | 0;
            Aa = (za | 0) > (ya | 0);
            Ba = Aa ? za : ya;
            c[108] = Ba;
            Ca = +Mm(h);
            Da = +g[102];
            Ea = Da > Ca;
            Fa = Ea ? Da : Ca;
            g[102] = Fa;
            Ga = +g[100];
            Ha = Ca + Ga;
            g[100] = Ha;
            i = f;
            return
        } else if ((la | 0) == 5) {
            c[d >> 2] = 3;
            g[s >> 2] = y;
            ya = _;
            za = c[108] | 0;
            Aa = (za | 0) > (ya | 0);
            Ba = Aa ? za : ya;
            c[108] = Ba;
            Ca = +Mm(h);
            Da = +g[102];
            Ea = Da > Ca;
            Fa = Ea ? Da : Ca;
            g[102] = Fa;
            Ga = +g[100];
            Ha = Ca + Ga;
            g[100] = Ha;
            i = f;
            return
        } else if ((la | 0) == 8) {
            c[d >> 2] = 4;
            g[s >> 2] = A
        } else if ((la | 0) == 11) {
            c[d >> 2] = 1;
            g[s >> 2] = y
        } else if ((la |
        0) == 13) {
            c[d >> 2] = 3;
            g[s >> 2] = y
        } else if ((la | 0) == 25) {
            c[d >> 2] = 1;
            g[s >> 2] = ma;
            ya = 20;
            za = c[108] | 0;
            Aa = (za | 0) > (ya | 0);
            Ba = Aa ? za : ya;
            c[108] = Ba;
            Ca = +Mm(h);
            Da = +g[102];
            Ea = Da > Ca;
            Fa = Ea ? Da : Ca;
            g[102] = Fa;
            Ga = +g[100];
            Ha = Ca + Ga;
            g[100] = Ha;
            i = f;
            return
        }
        c[106] = (c[106] | 0) + 1;
        ya = _ + 1 | 0;
        za = c[108] | 0;
        Aa = (za | 0) > (ya | 0);
        Ba = Aa ? za : ya;
        c[108] = Ba;
        Ca = +Mm(h);
        Da = +g[102];
        Ea = Da > Ca;
        Fa = Ea ? Da : Ca;
        g[102] = Fa;
        Ga = +g[100];
        Ha = Ca + Ga;
        g[100] = Ha;
        i = f;
        return
    }
    function _d(e, f, h, j, k, l, m) {
        e = e | 0;
        f = f | 0;
        h = h | 0;
        j = j | 0;
        k = k | 0;
        l = l | 0;
        m = +m;
        var n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w =
            0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0;
        n = i;
        c[e >> 2] = h;
        c[e + 4 >> 2] = k;
        o = b[f + 4 >> 1] | 0;
        p = e + 8 | 0;
        q = p + 0 | 0;
        r = j + 0 | 0;
        j = q + 36 | 0;
        do {
            c[q >> 2] = c[r >> 2];
            q = q + 4 | 0;
            r = r + 4 | 0
        } while ((q | 0) < (j | 0));
        s = e + 44 | 0;
        q = s + 0 | 0;
        r = l + 0 | 0;
        j = q + 36 | 0;
        do {
            c[q >> 2] = c[r >> 2];
            q = q + 4 | 0;
            r = r + 4 | 0
        } while ((q | 0) < (j | 0));
        t = 1 - m;
        u = t * +g[e + 32 >> 2] + +g[e + 36 >> 2] * m;
        v = +T(+u);
        w = +S(+u);
        u = +g[p >> 2];
        x = +g[e + 12 >> 2];
        y = t * +g[e + 16 >> 2] + +g[e + 24 >> 2] * m - (w * u - v * x);
        z = t * +g[e + 20 >> 2] + +g[e + 28 >> 2] * m - (v * u + w * x);
        x = t * +g[e + 68 >> 2] + +g[e + 72 >> 2] * m;
        u = +T(+x);
        A = +S(+x);
        x = +g[s >>
        2];
        B = +g[e + 48 >> 2];
        C = t * +g[e + 52 >> 2] + +g[e + 60 >> 2] * m - (A * x - u * B);
        D = t * +g[e + 56 >> 2] + +g[e + 64 >> 2] * m - (u * x + A * B);
        if (o << 16 >> 16 == 1) {
            c[e + 80 >> 2] = 0;
            o = (c[h + 16 >> 2] | 0) + (d[f + 6 >> 0] << 3) | 0;
            B = +g[o >> 2];
            x = +g[o + 4 >> 2];
            o = (c[k + 16 >> 2] | 0) + (d[f + 9 >> 0] << 3) | 0;
            m = +g[o >> 2];
            t = +g[o + 4 >> 2];
            o = e + 92 | 0;
            E = C + (A * m - u * t) - (y + (w * B - v * x));
            F = D + (u * m + A * t) - (z + (v * B + w * x));
            x = +E;
            B = +F;
            s = o;
            g[s >> 2] = x;
            g[s + 4 >> 2] = B;
            B = +Q(+(E * E + F * F));
            if (B < 1.1920928955078125E-7)
                G = 0;
            else {
                x = 1 / B;
                g[o >> 2] = E * x;
                g[e + 96 >> 2] = F * x;
                G = B
            }
            o = 8784;
            s = c[o + 4 >> 2] | 0;
            p = e + 84 | 0;
            c[p >> 2] = c[o >> 2];
            c[p + 4 >> 2] = s;
            H = G;
            i = n;
            return +H
        }
        s = f + 6 | 0;
        p = f + 7 | 0;
        o = e + 80 | 0;
        if ((a[s >> 0] | 0) == (a[p >> 0] | 0)) {
            c[o >> 2] = 2;
            r = c[k + 16 >> 2] | 0;
            q = r + (d[f + 9 >> 0] << 3) | 0;
            G = +g[q >> 2];
            B = +g[q + 4 >> 2];
            q = r + (d[f + 10 >> 0] << 3) | 0;
            x = +g[q >> 2];
            F = +g[q + 4 >> 2];
            q = e + 92 | 0;
            E = x - G;
            t = F - B;
            m = -E;
            I = +t;
            J = +m;
            r = q;
            g[r >> 2] = I;
            g[r + 4 >> 2] = J;
            J = +Q(+(t * t + E * E));
            if (J < 1.1920928955078125E-7) {
                K = t;
                L = m
            } else {
                E = 1 / J;
                J = t * E;
                g[q >> 2] = J;
                t = E * m;
                g[e + 96 >> 2] = t;
                K = J;
                L = t
            }
            t = (G + x) * .5;
            x = (B + F) * .5;
            F = +t;
            B = +x;
            r = e + 84 | 0;
            g[r >> 2] = F;
            g[r + 4 >> 2] = B;
            r = (c[h + 16 >> 2] | 0) + (d[s >> 0] << 3) | 0;
            B = +g[r >> 2];
            F = +g[r + 4 >> 2];
            G = (A * K - u * L) * (y + (w * B - v * F) - (C + (A * t - u *
            x))) + (u * K + A * L) * (z + (v * B + w * F) - (D + (u * t + A * x)));
            if (!(G < 0)) {
                H = G;
                i = n;
                return +H
            }
            x = +-K;
            K = +-L;
            r = q;
            g[r >> 2] = x;
            g[r + 4 >> 2] = K;
            H = -G;
            i = n;
            return +H
        } else {
            c[o >> 2] = 1;
            o = c[h + 16 >> 2] | 0;
            h = o + (d[s >> 0] << 3) | 0;
            G = +g[h >> 2];
            K = +g[h + 4 >> 2];
            h = o + (d[p >> 0] << 3) | 0;
            x = +g[h >> 2];
            L = +g[h + 4 >> 2];
            h = e + 92 | 0;
            t = x - G;
            F = L - K;
            B = -t;
            J = +F;
            m = +B;
            p = h;
            g[p >> 2] = J;
            g[p + 4 >> 2] = m;
            m = +Q(+(F * F + t * t));
            if (m < 1.1920928955078125E-7) {
                M = F;
                N = B
            } else {
                t = 1 / m;
                m = F * t;
                g[h >> 2] = m;
                F = t * B;
                g[e + 96 >> 2] = F;
                M = m;
                N = F
            }
            F = (G + x) * .5;
            x = (K + L) * .5;
            L = +F;
            K = +x;
            p = e + 84 | 0;
            g[p >> 2] = L;
            g[p + 4 >> 2] = K;
            p = (c[k + 16 >> 2] | 0) + (d[f + 9 >> 0] <<
            3) | 0;
            K = +g[p >> 2];
            L = +g[p + 4 >> 2];
            G = (w * M - v * N) * (C + (A * K - u * L) - (y + (w * F - v * x))) + (v * M + w * N) * (D + (u * K + A * L) - (z + (v * F + w * x)));
            if (!(G < 0)) {
                H = G;
                i = n;
                return +H
            }
            x = +-M;
            M = +-N;
            p = h;
            g[p >> 2] = x;
            g[p + 4 >> 2] = M;
            H = -G;
            i = n;
            return +H
        }
        return 0
    }
    function $d(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = +e;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0;
        f = i;
        h = 1 - e;
        j = h * +g[a + 32 >> 2] + +g[a + 36 >> 2] * e;
        k = +T(+j);
        l = +S(+j);
        j = +g[a + 8 >> 2];
        m = +g[a + 12 >> 2];
        n = h * +g[a + 16 >> 2] + +g[a + 24 >> 2] * e - (l * j - k * m);
        o = h * +g[a + 20 >> 2] +
        +g[a + 28 >> 2] * e - (k * j + l * m);
        m = h * +g[a + 68 >> 2] + +g[a + 72 >> 2] * e;
        j = +T(+m);
        p = +S(+m);
        m = +g[a + 44 >> 2];
        q = +g[a + 48 >> 2];
        r = h * +g[a + 52 >> 2] + +g[a + 60 >> 2] * e - (p * m - j * q);
        s = h * +g[a + 56 >> 2] + +g[a + 64 >> 2] * e - (j * m + p * q);
        t = c[a + 80 >> 2] | 0;
        if ((t | 0) == 0) {
            q = +g[a + 92 >> 2];
            m = +g[a + 96 >> 2];
            e = l * q + k * m;
            h = l * m - k * q;
            u = -q;
            v = -m;
            w = p * u + j * v;
            x = p * v - j * u;
            y = c[a >> 2] | 0;
            z = c[y + 16 >> 2] | 0;
            A = c[y + 20 >> 2] | 0;
            if ((A | 0) > 1) {
                y = 0;
                u = h * +g[z + 4 >> 2] + e * +g[z >> 2];
                B = 1;
                while (1) {
                    v = e * +g[z + (B << 3) >> 2] + h * +g[z + (B << 3) + 4 >> 2];
                    C = v > u;
                    D = C ? B : y;
                    B = B + 1 | 0;
                    if ((B | 0) == (A | 0)) {
                        E = D;
                        break
                    } else {
                        y = D;
                        u = C ? v : u
                    }
                }
            } else
                E =
                0;
            c[b >> 2] = E;
            E = c[a + 4 >> 2] | 0;
            y = c[E + 16 >> 2] | 0;
            A = c[E + 20 >> 2] | 0;
            if ((A | 0) > 1) {
                E = 0;
                u = x * +g[y + 4 >> 2] + w * +g[y >> 2];
                B = 1;
                while (1) {
                    h = w * +g[y + (B << 3) >> 2] + x * +g[y + (B << 3) + 4 >> 2];
                    C = h > u;
                    D = C ? B : E;
                    B = B + 1 | 0;
                    if ((B | 0) == (A | 0)) {
                        F = D;
                        break
                    } else {
                        E = D;
                        u = C ? h : u
                    }
                }
            } else
                F = 0;
            c[d >> 2] = F;
            E = z + (c[b >> 2] << 3) | 0;
            u = +g[E >> 2];
            x = +g[E + 4 >> 2];
            E = y + (F << 3) | 0;
            w = +g[E >> 2];
            h = +g[E + 4 >> 2];
            G = q * (r + (p * w - j * h) - (n + (l * u - k * x))) + m * (s + (j * w + p * h) - (o + (k * u + l * x)));
            i = f;
            return +G
        } else if ((t | 0) == 1) {
            x = +g[a + 92 >> 2];
            u = +g[a + 96 >> 2];
            h = l * x - k * u;
            w = k * x + l * u;
            u = +g[a + 84 >> 2];
            x = +g[a + 88 >> 2];
            m = n + (l * u - k * x);
            q = o + (k * u + l * x);
            x = -h;
            u = -w;
            e = p * x + j * u;
            v = p * u - j * x;
            c[b >> 2] = -1;
            E = c[a + 4 >> 2] | 0;
            F = c[E + 16 >> 2] | 0;
            y = c[E + 20 >> 2] | 0;
            if ((y | 0) > 1) {
                E = 0;
                x = v * +g[F + 4 >> 2] + e * +g[F >> 2];
                z = 1;
                while (1) {
                    u = e * +g[F + (z << 3) >> 2] + v * +g[F + (z << 3) + 4 >> 2];
                    A = u > x;
                    B = A ? z : E;
                    z = z + 1 | 0;
                    if ((z | 0) == (y | 0)) {
                        H = B;
                        break
                    } else {
                        E = B;
                        x = A ? u : x
                    }
                }
            } else
                H = 0;
            c[d >> 2] = H;
            E = F + (H << 3) | 0;
            x = +g[E >> 2];
            v = +g[E + 4 >> 2];
            G = h * (r + (p * x - j * v) - m) + w * (s + (j * x + p * v) - q);
            i = f;
            return +G
        } else if ((t | 0) == 2) {
            q = +g[a + 92 >> 2];
            v = +g[a + 96 >> 2];
            x = p * q - j * v;
            w = j * q + p * v;
            v = +g[a + 84 >> 2];
            q = +g[a + 88 >> 2];
            m = r + (p * v - j * q);
            r = s + (j * v + p * q);
            q = -x;
            p = -w;
            v = l * q + k * p;
            j = l * p - k * q;
            c[d >> 2] = -1;
            t = c[a >> 2] | 0;
            a = c[t + 16 >> 2] | 0;
            E = c[t + 20 >> 2] | 0;
            if ((E | 0) > 1) {
                t = 0;
                q = j * +g[a + 4 >> 2] + v * +g[a >> 2];
                H = 1;
                while (1) {
                    p = v * +g[a + (H << 3) >> 2] + j * +g[a + (H << 3) + 4 >> 2];
                    F = p > q;
                    y = F ? H : t;
                    H = H + 1 | 0;
                    if ((H | 0) == (E | 0)) {
                        I = y;
                        break
                    } else {
                        t = y;
                        q = F ? p : q
                    }
                }
            } else
                I = 0;
            c[b >> 2] = I;
            t = a + (I << 3) | 0;
            q = +g[t >> 2];
            j = +g[t + 4 >> 2];
            G = x * (n + (l * q - k * j) - m) + w * (o + (k * q + l * j) - r);
            i = f;
            return +G
        } else {
            c[b >> 2] = -1;
            c[d >> 2] = -1;
            G = 0;
            i = f;
            return +G
        }
        return 0
    }
    function ae(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = +e;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v =
            0,
            w = 0,
            x = 0;
        f = i;
        h = 1 - e;
        j = h * +g[a + 32 >> 2] + +g[a + 36 >> 2] * e;
        k = +T(+j);
        l = +S(+j);
        j = +g[a + 8 >> 2];
        m = +g[a + 12 >> 2];
        n = h * +g[a + 16 >> 2] + +g[a + 24 >> 2] * e - (l * j - k * m);
        o = h * +g[a + 20 >> 2] + +g[a + 28 >> 2] * e - (k * j + l * m);
        m = h * +g[a + 68 >> 2] + +g[a + 72 >> 2] * e;
        j = +T(+m);
        p = +S(+m);
        m = +g[a + 44 >> 2];
        q = +g[a + 48 >> 2];
        r = h * +g[a + 52 >> 2] + +g[a + 60 >> 2] * e - (p * m - j * q);
        s = h * +g[a + 56 >> 2] + +g[a + 64 >> 2] * e - (j * m + p * q);
        t = c[a + 80 >> 2] | 0;
        if ((t | 0) == 0) {
            u = (c[(c[a >> 2] | 0) + 16 >> 2] | 0) + (b << 3) | 0;
            q = +g[u >> 2];
            m = +g[u + 4 >> 2];
            u = (c[(c[a + 4 >> 2] | 0) + 16 >> 2] | 0) + (d << 3) | 0;
            e = +g[u >> 2];
            h = +g[u + 4 >> 2];
            v = +g[a + 92 >> 2] *
            (r + (p * e - j * h) - (n + (l * q - k * m))) + +g[a + 96 >> 2] * (s + (j * e + p * h) - (o + (k * q + l * m)));
            i = f;
            return +v
        } else if ((t | 0) == 1) {
            m = +g[a + 92 >> 2];
            q = +g[a + 96 >> 2];
            h = +g[a + 84 >> 2];
            e = +g[a + 88 >> 2];
            u = (c[(c[a + 4 >> 2] | 0) + 16 >> 2] | 0) + (d << 3) | 0;
            w = +g[u >> 2];
            x = +g[u + 4 >> 2];
            v = (l * m - k * q) * (r + (p * w - j * x) - (n + (l * h - k * e))) + (k * m + l * q) * (s + (j * w + p * x) - (o + (k * h + l * e)));
            i = f;
            return +v
        } else if ((t | 0) == 2) {
            e = +g[a + 92 >> 2];
            h = +g[a + 96 >> 2];
            x = +g[a + 84 >> 2];
            w = +g[a + 88 >> 2];
            t = (c[(c[a >> 2] | 0) + 16 >> 2] | 0) + (b << 3) | 0;
            q = +g[t >> 2];
            m = +g[t + 4 >> 2];
            v = (p * e - j * h) * (n + (l * q - k * m) - (r + (p * x - j * w))) + (j * e + p * h) * (o + (k * q +
            l * m) - (s + (j * x + p * w)));
            i = f;
            return +v
        } else {
            v = 0;
            i = f;
            return +v
        }
        return 0
    }
    function be(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0;
        e = i;
        f = c[b + 4 >> 2] | 0;
        if ((f | 0) == 0) {
            c[a + 16 >> 2] = b + 12;
            c[a + 20 >> 2] = 1;
            g[a + 24 >> 2] = +g[b + 8 >> 2];
            i = e;
            return
        } else if ((f | 0) == 2) {
            c[a + 16 >> 2] = b + 20;
            c[a + 20 >> 2] = c[b + 148 >> 2];
            g[a + 24 >> 2] = +g[b + 8 >> 2];
            i = e;
            return
        } else if ((f | 0) == 1) {
            c[a + 16 >> 2] = b + 12;
            c[a + 20 >> 2] = 2;
            g[a + 24 >> 2] = +g[b + 8 >> 2];
            i = e;
            return
        } else if ((f | 0) == 3) {
            f = b + 12 | 0;
            h = (c[f >> 2] | 0) + (d << 3) | 0;
            j = c[h + 4 >> 2] | 0;
            k = a;
            c[k >> 2] = c[h >> 2];
            c[k + 4 >> 2] = j;
            j = d + 1 | 0;
            d = a + 8 | 0;
            k =
            c[f >> 2] | 0;
            if ((j | 0) < (c[b + 16 >> 2] | 0)) {
                f = k + (j << 3) | 0;
                j = c[f + 4 >> 2] | 0;
                h = d;
                c[h >> 2] = c[f >> 2];
                c[h + 4 >> 2] = j
            } else {
                j = k;
                k = c[j + 4 >> 2] | 0;
                h = d;
                c[h >> 2] = c[j >> 2];
                c[h + 4 >> 2] = k
            }
            c[a + 16 >> 2] = a;
            c[a + 20 >> 2] = 2;
            g[a + 24 >> 2] = +g[b + 8 >> 2];
            i = e;
            return
        } else {
            i = e;
            return
        }
    }
    function ce(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0;
        b = i;
        d = a + 16 | 0;
        e = +g[d >> 2];
        f = +g[d + 4 >> 2];
        d = a + 36 | 0;
        h = a + 52 | 0;
        j = +g[h >> 2];
        k = +g[h + 4 >> 2];
        h = a + 72 | 0;
        l = a + 88 | 0;
        m = +g[l >> 2];
        n = +g[l + 4 >> 2];
        o = j - e;
        p = k - f;
        q = e * o + f * p;
        r = j * o + k *
        p;
        s = m - e;
        t = n - f;
        u = e * s + f * t;
        v = m * s + n * t;
        w = m - j;
        x = n - k;
        y = j * w + k * x;
        z = m * w + n * x;
        x = o * t - p * s;
        s = (j * n - k * m) * x;
        p = (f * m - e * n) * x;
        n = (e * k - f * j) * x;
        if (!(!(q >= -0) | !(u >= -0))) {
            g[a + 24 >> 2] = 1;
            c[a + 108 >> 2] = 1;
            i = b;
            return
        }
        if (!(!(q < -0) | !(r > 0) | !(n <= 0))) {
            x = 1 / (r - q);
            g[a + 24 >> 2] = r * x;
            g[a + 60 >> 2] = -(q * x);
            c[a + 108 >> 2] = 2;
            i = b;
            return
        }
        if (!(!(u < -0) | !(v > 0) | !(p <= 0))) {
            x = 1 / (v - u);
            g[a + 24 >> 2] = v * x;
            g[a + 96 >> 2] = -(u * x);
            c[a + 108 >> 2] = 2;
            A = d + 0 | 0;
            B = h + 0 | 0;
            C = A + 36 | 0;
            do {
                c[A >> 2] = c[B >> 2];
                A = A + 4 | 0;
                B = B + 4 | 0
            } while ((A | 0) < (C | 0));
            i = b;
            return
        }
        if (!(!(r <= 0) | !(y >= -0))) {
            g[a + 60 >> 2] = 1;
            c[a + 108 >>
            2] = 1;
            A = a + 0 | 0;
            B = d + 0 | 0;
            C = A + 36 | 0;
            do {
                c[A >> 2] = c[B >> 2];
                A = A + 4 | 0;
                B = B + 4 | 0
            } while ((A | 0) < (C | 0));
            i = b;
            return
        }
        if (!(!(v <= 0) | !(z <= 0))) {
            g[a + 96 >> 2] = 1;
            c[a + 108 >> 2] = 1;
            A = a + 0 | 0;
            B = h + 0 | 0;
            C = A + 36 | 0;
            do {
                c[A >> 2] = c[B >> 2];
                A = A + 4 | 0;
                B = B + 4 | 0
            } while ((A | 0) < (C | 0));
            i = b;
            return
        }
        if (!(y < -0) | !(z > 0) | !(s <= 0)) {
            v = 1 / (n + (s + p));
            g[a + 24 >> 2] = s * v;
            g[a + 60 >> 2] = p * v;
            g[a + 96 >> 2] = n * v;
            c[a + 108 >> 2] = 3;
            i = b;
            return
        } else {
            v = 1 / (z - y);
            g[a + 60 >> 2] = z * v;
            g[a + 96 >> 2] = -(y * v);
            c[a + 108 >> 2] = 2;
            A = a + 0 | 0;
            B = h + 0 | 0;
            C = A + 36 | 0;
            do {
                c[A >> 2] = c[B >> 2];
                A = A + 4 | 0;
                B = B + 4 | 0
            } while ((A | 0) < (C | 0));
            i = b;
            return
        }
    }
    function de(d,
    e, f) {
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0;
        h = i;
        i = i + 176 | 0;
        j = h + 152 | 0;
        l = h + 136 | 0;
        m = h;
        n = h + 124 | 0;
        o = h + 112 | 0;
        c[114] = (c[114] | 0) + 1;
        p = f + 28 | 0;
        q = f + 56 | 0;
        c[j + 0 >> 2] = c[q + 0 >> 2];
        c[j + 4 >> 2] = c[q + 4 >> 2];
        c[j + 8 >> 2] = c[q + 8 >> 2];
        c[j + 12 >> 2] = c[q + 12 >> 2];
        q = f + 72 |
        0;
        c[l + 0 >> 2] = c[q + 0 >> 2];
        c[l + 4 >> 2] = c[q + 4 >> 2];
        c[l + 8 >> 2] = c[q + 8 >> 2];
        c[l + 12 >> 2] = c[q + 12 >> 2];
        ee(m, e, f, j, p, l);
        c[n + 0 >> 2] = 0;
        c[n + 4 >> 2] = 0;
        c[n + 8 >> 2] = 0;
        c[o + 0 >> 2] = 0;
        c[o + 4 >> 2] = 0;
        c[o + 8 >> 2] = 0;
        p = m + 108 | 0;
        r = +g[j + 12 >> 2];
        s = +g[j + 8 >> 2];
        q = f + 16 | 0;
        t = f + 20 | 0;
        u = +g[j >> 2];
        v = +g[j + 4 >> 2];
        w = +g[l + 12 >> 2];
        x = +g[l + 8 >> 2];
        j = f + 44 | 0;
        y = f + 48 | 0;
        z = +g[l >> 2];
        A = +g[l + 4 >> 2];
        l = m + 16 | 0;
        B = m + 20 | 0;
        C = m + 52 | 0;
        D = m + 56 | 0;
        E = m + 16 | 0;
        F = m + 36 | 0;
        G = m + 52 | 0;
        H = m + 24 | 0;
        I = m + 60 | 0;
        J = c[p >> 2] | 0;
        K = 0;
        a:
        while (1) {
            L = (J | 0) > 0;
            if (L) {
                M = 0;
                do {
                    c[n + (M << 2) >> 2] = c[m + (M * 36 | 0) + 28 >> 2];
                    c[o + (M << 2) >> 2] =
                    c[m + (M * 36 | 0) + 32 >> 2];
                    M = M + 1 | 0
                } while ((M | 0) != (J | 0))
            }
            do if ((J | 0) == 2) {
                M = E;
                N = +g[M >> 2];
                O = +g[M + 4 >> 2];
                M = G;
                P = +g[M >> 2];
                R = +g[M + 4 >> 2];
                S = P - N;
                T = R - O;
                U = N * S + O * T;
                if (U >= -0) {
                    g[H >> 2] = 1;
                    c[p >> 2] = 1;
                    V = 13;
                    break
                }
                O = P * S + R * T;
                if (!(O <= 0)) {
                    T = 1 / (O - U);
                    g[H >> 2] = O * T;
                    g[I >> 2] = -(U * T);
                    c[p >> 2] = 2;
                    V = 14;
                    break
                } else {
                    g[I >> 2] = 1;
                    c[p >> 2] = 1;
                    M = m + 0 | 0;
                    W = F + 0 | 0;
                    X = M + 36 | 0;
                    do {
                        c[M >> 2] = c[W >> 2];
                        M = M + 4 | 0;
                        W = W + 4 | 0
                    } while ((M | 0) < (X | 0));
                    V = 13;
                    break
                }
            } else if ((J | 0) == 3) {
                ce(m);
                W = c[p >> 2] | 0;
                if ((W | 0) == 3) {
                    V = 11;
                    break a
                } else {
                    Y = W;
                    V = 12
                }
            } else {
                Y = J;
                V = 12
            }
            while (0);
            do if ((V | 0) == 12) {
                V = 0;
                if ((Y |
                0) == 1) {
                    V = 13;
                    break
                } else if ((Y | 0) == 2) {
                    V = 14;
                    break
                }
                W = 8784;
                T = +g[W >> 2];
                Z = T;
                _ = +g[W + 4 >> 2];
                $ = Y
            }
            while (0);
            do if ((V | 0) == 13) {
                V = 0;
                Z = -+g[l >> 2];
                _ = -+g[B >> 2];
                $ = 1
            } else if ((V | 0) == 14) {
                V = 0;
                T = +g[l >> 2];
                U = +g[C >> 2] - T;
                O = +g[B >> 2];
                R = +g[D >> 2] - O;
                if (T * R - U * O > 0) {
                    Z = -R;
                    _ = U;
                    $ = 2;
                    break
                } else {
                    Z = R;
                    _ = -U;
                    $ = 2;
                    break
                }
            }
            while (0);
            if (_ * _ + Z * Z < 1.4210854715202004E-14) {
                aa = $;
                ba = K;
                V = 31;
                break
            }
            W = m + ($ * 36 | 0) | 0;
            U = -Z;
            R = -_;
            O = r * U + s * R;
            T = r * R - s * U;
            M = c[q >> 2] | 0;
            X = c[t >> 2] | 0;
            if ((X | 0) > 1) {
                ca = 0;
                U = T * +g[M + 4 >> 2] + O * +g[M >> 2];
                da = 1;
                while (1) {
                    R = O * +g[M + (da << 3) >> 2] + T * +g[M + (da << 3) + 4 >>
                    2];
                    ea = R > U;
                    fa = ea ? da : ca;
                    da = da + 1 | 0;
                    if ((da | 0) == (X | 0)) {
                        ga = fa;
                        break
                    } else {
                        ca = fa;
                        U = ea ? R : U
                    }
                }
            } else
                ga = 0;
            c[m + ($ * 36 | 0) + 28 >> 2] = ga;
            U = +g[M + (ga << 3) >> 2];
            T = +g[M + (ga << 3) + 4 >> 2];
            O = u + (r * U - s * T);
            R = +O;
            S = +(U * s + r * T + v);
            ca = W;
            g[ca >> 2] = R;
            g[ca + 4 >> 2] = S;
            S = Z * w + _ * x;
            R = _ * w - Z * x;
            ca = c[j >> 2] | 0;
            X = c[y >> 2] | 0;
            if ((X | 0) > 1) {
                da = 0;
                T = R * +g[ca + 4 >> 2] + S * +g[ca >> 2];
                ea = 1;
                while (1) {
                    U = S * +g[ca + (ea << 3) >> 2] + R * +g[ca + (ea << 3) + 4 >> 2];
                    fa = U > T;
                    ha = fa ? ea : da;
                    ea = ea + 1 | 0;
                    if ((ea | 0) == (X | 0)) {
                        ia = ha;
                        break
                    } else {
                        da = ha;
                        T = fa ? U : T
                    }
                }
            } else
                ia = 0;
            c[m + ($ * 36 | 0) + 32 >> 2] = ia;
            T = +g[ca + (ia << 3) >> 2];
            R = +g[ca + (ia << 3) + 4 >> 2];
            S = z + (w * T - x * R);
            U = +S;
            P = +(T * x + w * R + A);
            da = m + ($ * 36 | 0) + 8 | 0;
            g[da >> 2] = U;
            g[da + 4 >> 2] = P;
            P = +(S - O);
            S = +(+g[m + ($ * 36 | 0) + 12 >> 2] - +g[m + ($ * 36 | 0) + 4 >> 2]);
            da = m + ($ * 36 | 0) + 16 | 0;
            g[da >> 2] = P;
            g[da + 4 >> 2] = S;
            ja = K + 1 | 0;
            c[116] = (c[116] | 0) + 1;
            if (L) {
                da = 0;
                do {
                    if ((ga | 0) == (c[n + (da << 2) >> 2] | 0) ? (ia | 0) == (c[o + (da << 2) >> 2] | 0) : 0) {
                        V = 30;
                        break a
                    }
                    da = da + 1 | 0
                } while ((da | 0) < (J | 0))
            }
            da = (c[p >> 2] | 0) + 1 | 0;
            c[p >> 2] = da;
            if ((ja | 0) < 20) {
                J = da;
                K = ja
            } else {
                aa = da;
                ba = ja;
                V = 31;
                break
            }
        }
        if ((V | 0) == 11) {
            J = c[118] | 0;
            c[118] = (J | 0) > (K | 0) ? J : K;
            ka = d + 8 | 0;
            la = K;
            V = 35
        } else if ((V |
        0) == 30) {
            aa = c[p >> 2] | 0;
            ba = ja;
            V = 31
        }
        do if ((V | 0) == 31) {
            ja = c[118] | 0;
            c[118] = (ja | 0) > (ba | 0) ? ja : ba;
            ja = d + 8 | 0;
            if ((aa | 0) == 1) {
                p = m;
                K = c[p >> 2] | 0;
                J = c[p + 4 >> 2] | 0;
                p = d;
                c[p >> 2] = K;
                c[p + 4 >> 2] = J;
                p = m + 8 | 0;
                o = c[p >> 2] | 0;
                ia = c[p + 4 >> 2] | 0;
                p = ja;
                c[p >> 2] = o;
                c[p + 4 >> 2] = ia;
                A = (c[k >> 2] = K, +g[k >> 2]);
                w = (c[k >> 2] = o, +g[k >> 2]);
                x = (c[k >> 2] = J, +g[k >> 2]);
                ma = w;
                na = A;
                oa = (c[k >> 2] = ia, +g[k >> 2]);
                pa = x;
                qa = 1;
                ra = ja;
                sa = ba;
                break
            } else if ((aa | 0) == 2) {
                x = +g[H >> 2];
                A = +g[I >> 2];
                w = x * +g[m >> 2] + A * +g[m + 36 >> 2];
                z = x * +g[m + 4 >> 2] + A * +g[m + 40 >> 2];
                Z = +w;
                _ = +z;
                ia = d;
                g[ia >> 2] = Z;
                g[ia + 4 >> 2] = _;
                _ = x *
                +g[m + 8 >> 2] + A * +g[m + 44 >> 2];
                Z = x * +g[m + 12 >> 2] + A * +g[m + 48 >> 2];
                A = +_;
                x = +Z;
                ia = ja;
                g[ia >> 2] = A;
                g[ia + 4 >> 2] = x;
                ma = _;
                na = w;
                oa = Z;
                pa = z;
                qa = 2;
                ra = ja;
                sa = ba;
                break
            } else if ((aa | 0) == 3) {
                ka = ja;
                la = ba;
                V = 35;
                break
            } else {
                ma = +g[ja >> 2];
                na = +g[d >> 2];
                oa = +g[d + 12 >> 2];
                pa = +g[d + 4 >> 2];
                qa = aa;
                ra = ja;
                sa = ba;
                break
            }
        }
        while (0);
        if ((V | 0) == 35) {
            z = +g[H >> 2];
            Z = +g[I >> 2];
            w = +g[m + 96 >> 2];
            _ = z * +g[m >> 2] + Z * +g[m + 36 >> 2] + w * +g[m + 72 >> 2];
            x = z * +g[m + 4 >> 2] + Z * +g[m + 40 >> 2] + w * +g[m + 76 >> 2];
            w = +_;
            Z = +x;
            I = d;
            g[I >> 2] = w;
            g[I + 4 >> 2] = Z;
            I = ka;
            g[I >> 2] = w;
            g[I + 4 >> 2] = Z;
            ma = _;
            na = _;
            oa = x;
            pa = x;
            qa = 3;
            ra = ka;
            sa = la
        }
        x = na - ma;
        la = d + 4 | 0;
        ka = d + 12 | 0;
        ma = pa - oa;
        I = d + 16 | 0;
        g[I >> 2] = +Q(+(x * x + ma * ma));
        c[d + 20 >> 2] = sa;
        if ((qa | 0) == 2) {
            ma = +g[l >> 2] - +g[C >> 2];
            x = +g[B >> 2] - +g[D >> 2];
            ta = +Q(+(ma * ma + x * x));
            V = 39
        } else if ((qa | 0) != 3) {
            g[e >> 2] = 0;
            b[e + 4 >> 1] = qa;
            if ((qa | 0) > 0) {
                ua = 0;
                V = 41
            }
        } else {
            x = +g[l >> 2];
            ma = +g[B >> 2];
            ta = (+g[C >> 2] - x) * (+g[m + 92 >> 2] - ma) - (+g[D >> 2] - ma) * (+g[m + 88 >> 2] - x);
            V = 39
        }
        if ((V | 0) == 39) {
            g[e >> 2] = ta;
            b[e + 4 >> 1] = qa;
            ua = 0;
            V = 41
        }
        if ((V | 0) == 41)
            while (1) {
                V = 0;
                a[e + ua + 6 >> 0] = c[m + (ua * 36 | 0) + 28 >> 2];
                a[e + ua + 9 >> 0] = c[m + (ua * 36 | 0) + 32 >> 2];
                ua = ua + 1 | 0;
                if ((ua | 0) >= (qa | 0))
                    break;
                else
                    V = 41
            }
        if ((a[f + 88 >> 0] | 0) == 0) {
            i = h;
            return
        }
        ta = +g[f + 24 >> 2];
        x = +g[f + 52 >> 2];
        ma = +g[I >> 2];
        oa = ta + x;
        if (!(ma > oa & ma > 1.1920928955078125E-7)) {
            pa = +((+g[d >> 2] + +g[ra >> 2]) * .5);
            na = +((+g[la >> 2] + +g[ka >> 2]) * .5);
            f = d;
            g[f >> 2] = pa;
            g[f + 4 >> 2] = na;
            f = ra;
            g[f >> 2] = pa;
            g[f + 4 >> 2] = na;
            g[I >> 2] = 0;
            i = h;
            return
        }
        g[I >> 2] = ma - oa;
        oa = +g[ra >> 2];
        ma = +g[d >> 2];
        na = oa - ma;
        pa = +g[ka >> 2];
        _ = +g[la >> 2];
        Z = pa - _;
        w = +Q(+(na * na + Z * Z));
        if (w < 1.1920928955078125E-7) {
            va = na;
            wa = Z
        } else {
            z = 1 / w;
            va = na * z;
            wa = Z * z
        }
        g[d >> 2] = ta * va + ma;
        g[la >> 2] = ta * wa + _;
        g[ra >> 2] = oa - x * va;
        g[ka >> 2] = pa - x * wa;
        i = h;
        return
    }
    function ee(a, e, f, h, j, k) {
        a = a | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        j = j | 0;
        k = k | 0;
        var l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0;
        l = i;
        m = b[e + 4 >> 1] | 0;
        n = m & 65535;
        o = a + 108 | 0;
        c[o >> 2] = n;
        if (m << 16 >> 16 == 0)
            p = n;
        else {
            n = f + 16 | 0;
            m = j + 16 | 0;
            q = h + 12 | 0;
            r = h + 8 | 0;
            s = h + 4 | 0;
            t = k + 12 | 0;
            u = k + 8 | 0;
            v = k + 4 | 0;
            w = 0;
            do {
                x = d[e + w + 6 >> 0] | 0;
                c[a + (w * 36 | 0) + 28 >> 2] = x;
                y = d[e + w + 9 >> 0] | 0;
                c[a + (w * 36 | 0) + 32 >> 2] = y;
                z = (c[n >> 2] | 0) + (x << 3) | 0;
                A = +g[z >> 2];
                B = +g[z + 4 >> 2];
                z = (c[m >> 2] | 0) + (y << 3) | 0;
                C = +g[z >> 2];
                D = +g[z + 4 >> 2];
                E = +g[q >>
                2];
                F = +g[r >> 2];
                G = +g[h >> 2] + (A * E - B * F);
                H = +G;
                I = +(E * B + A * F + +g[s >> 2]);
                z = a + (w * 36 | 0) | 0;
                g[z >> 2] = H;
                g[z + 4 >> 2] = I;
                I = +g[t >> 2];
                H = +g[u >> 2];
                F = +g[k >> 2] + (C * I - D * H);
                A = +F;
                B = +(D * I + C * H + +g[v >> 2]);
                z = a + (w * 36 | 0) + 8 | 0;
                g[z >> 2] = A;
                g[z + 4 >> 2] = B;
                B = +(F - G);
                G = +(+g[a + (w * 36 | 0) + 12 >> 2] - +g[a + (w * 36 | 0) + 4 >> 2]);
                z = a + (w * 36 | 0) + 16 | 0;
                g[z >> 2] = B;
                g[z + 4 >> 2] = G;
                g[a + (w * 36 | 0) + 24 >> 2] = 0;
                w = w + 1 | 0;
                z = c[o >> 2] | 0
            } while ((w | 0) < (z | 0));
            p = z
        }
        do if ((p | 0) > 1) {
            G = +g[e >> 2];
            if ((p | 0) == 2) {
                B = +g[a + 16 >> 2] - +g[a + 52 >> 2];
                F = +g[a + 20 >> 2] - +g[a + 56 >> 2];
                J = +Q(+(B * B + F * F))
            } else if ((p | 0) == 3) {
                F = +g[a +
                16 >> 2];
                B = +g[a + 20 >> 2];
                J = (+g[a + 52 >> 2] - F) * (+g[a + 92 >> 2] - B) - (+g[a + 56 >> 2] - B) * (+g[a + 88 >> 2] - F)
            } else
                J = 0;
            if (!(J < G * .5) ? !(G * 2 < J | J < 1.1920928955078125E-7) : 0) {
                K = 11;
                break
            }
            c[o >> 2] = 0
        } else
            K = 11;
        while (0);
        if ((K | 0) == 11 ? (p | 0) != 0 : 0) {
            i = l;
            return
        }
        c[a + 28 >> 2] = 0;
        c[a + 32 >> 2] = 0;
        p = c[f + 16 >> 2] | 0;
        J = +g[p >> 2];
        G = +g[p + 4 >> 2];
        p = c[j + 16 >> 2] | 0;
        F = +g[p >> 2];
        B = +g[p + 4 >> 2];
        A = +g[h + 12 >> 2];
        H = +g[h + 8 >> 2];
        C = +g[h >> 2] + (J * A - G * H);
        I = A * G + J * H + +g[h + 4 >> 2];
        H = +C;
        J = +I;
        h = a;
        g[h >> 2] = H;
        g[h + 4 >> 2] = J;
        J = +g[k + 12 >> 2];
        H = +g[k + 8 >> 2];
        G = +g[k >> 2] + (F * J - B * H);
        A = B * J + F * H + +g[k + 4 >> 2];
        H = +G;
        F = +A;
        k = a + 8 | 0;
        g[k >> 2] = H;
        g[k + 4 >> 2] = F;
        F = +(G - C);
        C = +(A - I);
        k = a + 16 | 0;
        g[k >> 2] = F;
        g[k + 4 >> 2] = C;
        g[a + 24 >> 2] = 1;
        c[o >> 2] = 1;
        i = l;
        return
    }
    function fe(a, d) {
        a = a | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0;
        e = i;
        f = Em(d, 48) | 0;
        if ((f | 0) == 0)
            h = 0;
        else {
            c[f >> 2] = 488;
            c[f + 4 >> 2] = 1;
            g[f + 8 >> 2] = .009999999776482582;
            d = f + 28 | 0;
            c[d + 0 >> 2] = 0;
            c[d + 4 >> 2] = 0;
            c[d + 8 >> 2] = 0;
            c[d + 12 >> 2] = 0;
            b[d + 16 >> 1] = 0;
            h = f
        }
        f = a + 4 | 0;
        d = c[f + 4 >> 2] | 0;
        j = h + 4 | 0;
        c[j >> 2] = c[f >> 2];
        c[j + 4 >> 2] = d;
        d = h + 12 | 0;
        j = a + 12 | 0;
        c[d + 0 >> 2] = c[j + 0 >> 2];
        c[d + 4 >> 2] = c[j + 4 >> 2];
        c[d + 8 >> 2] = c[j + 8 >> 2];
        c[d + 12 >> 2] = c[j + 12 >> 2];
        c[d +
        16 >> 2] = c[j + 16 >> 2];
        c[d + 20 >> 2] = c[j + 20 >> 2];
        c[d + 24 >> 2] = c[j + 24 >> 2];
        c[d + 28 >> 2] = c[j + 28 >> 2];
        b[d + 32 >> 1] = b[j + 32 >> 1] | 0;
        i = e;
        return h | 0
    }
    function ge(a) {
        a = a | 0;
        return 1
    }
    function he(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        return 0
    }
    function ie(a, b, c, d, e, f) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0;
        f = i;
        h = +g[b + 12 >> 2];
        j = +g[a + 12 >> 2];
        k = +g[b + 8 >> 2];
        l = +g[a + 16 >> 2];
        m = +g[b >> 2];
        n = m + (h * j - k * l);
        o = +g[b + 4 >> 2];
        p = j * k + h * l + o;
        l = +g[a + 20 >> 2];
        j = +g[a + 24 >> 2];
        q = m + (h * l - k * j);
        m =
        o + (k * l + h * j);
        j = +g[c >> 2];
        h = j - n;
        l = +g[c + 4 >> 2];
        k = l - p;
        o = q - n;
        n = m - p;
        p = h * o + k * n;
        do if (p > 0) {
            r = o * o + n * n;
            if (p > r) {
                s = j - q;
                t = l - m;
                break
            } else {
                u = p / r;
                s = h - o * u;
                t = k - n * u;
                break
            }
        } else {
            s = h;
            t = k
        }
        while (0);
        k = +Q(+(t * t + s * s));
        g[d >> 2] = k;
        if (k > 0) {
            h = 1 / k;
            v = s * h;
            w = t * h;
            x = +v;
            y = +w;
            z = e;
            A = z;
            g[A >> 2] = x;
            B = z + 4 | 0;
            C = B;
            g[C >> 2] = y;
            i = f;
            return
        } else {
            d = 8784;
            h = +g[d >> 2];
            v = h;
            w = +g[d + 4 >> 2];
            x = +v;
            y = +w;
            z = e;
            A = z;
            g[A >> 2] = x;
            B = z + 4 | 0;
            C = B;
            g[C >> 2] = y;
            i = f;
            return
        }
    }
    function je(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0;
        e = i;
        f = +g[d >> 2];
        h = +g[c >> 2] - f;
        j = +g[d + 4 >> 2];
        k = +g[c + 4 >> 2] - j;
        l = d + 12 | 0;
        m = +g[l >> 2];
        n = d + 8 | 0;
        o = +g[n >> 2];
        p = h * m + k * o;
        q = m * k - h * o;
        h = +g[c + 8 >> 2] - f;
        f = +g[c + 12 >> 2] - j;
        j = m * h + o * f - p;
        k = m * f - o * h - q;
        d = a + 12 | 0;
        h = +g[d >> 2];
        o = +g[d + 4 >> 2];
        d = a + 20 | 0;
        f = +g[d >> 2];
        m = f - h;
        f = +g[d + 4 >> 2] - o;
        r = -m;
        s = m * m + f * f;
        t = +Q(+s);
        if (t < 1.1920928955078125E-7) {
            u = f;
            v = r
        } else {
            w = 1 / t;
            u = f * w;
            v = w * r
        }
        r = (o - q) * v + (h - p) * u;
        w = k * v + j * u;
        if (w == 0) {
            x = 0;
            i = e;
            return x | 0
        }
        t = r / w;
        if (t < 0) {
            x = 0;
            i = e;
            return x | 0
        }
        if (s == 0 ? 1 : +g[c + 16 >> 2] < t) {
            x = 0;
            i = e;
            return x | 0
        }
        w = (m * (p + j * t - h) + f * (q + k * t - o)) / s;
        if (w < 0 | w > 1) {
            x = 0;
            i = e;
            return x | 0
        }
        g[b + 8 >> 2] = t;
        t = +g[l >> 2];
        w = +g[n >> 2];
        s = u * t - v * w;
        o = v * t + u * w;
        if (r > 0) {
            r = +-s;
            w = +-o;
            n = b;
            g[n >> 2] = r;
            g[n + 4 >> 2] = w;
            x = 1;
            i = e;
            return x | 0
        } else {
            w = +s;
            s = +o;
            n = b;
            g[n >> 2] = w;
            g[n + 4 >> 2] = s;
            x = 1;
            i = e;
            return x | 0
        }
        return 0
    }
    function ke(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        d = i;
        e = +g[c + 12 >> 2];
        f = +g[a + 12 >> 2];
        h = +g[c + 8 >> 2];
        j = +g[a + 16 >> 2];
        k = +g[c >> 2];
        l = k + (e * f - h * j);
        m = +g[c + 4 >> 2];
        n = f * h + e * j + m;
        j = +g[a + 20 >> 2];
        f = +g[a + 24 >> 2];
        o = k + (e * j - h * f);
        k = m + (h * j + e * f);
        f = +g[a + 8 >> 2];
        e = +((l < o ? l : o) - f);
        j =
        +((n < k ? n : k) - f);
        a = b;
        g[a >> 2] = e;
        g[a + 4 >> 2] = j;
        j = +(f + (l > o ? l : o));
        o = +(f + (n > k ? n : k));
        a = b + 8 | 0;
        g[a >> 2] = j;
        g[a + 4 >> 2] = o;
        i = d;
        return
    }
    function le(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0,
            e = 0;
        d = i;
        g[b >> 2] = 0;
        c = +((+g[a + 12 >> 2] + +g[a + 20 >> 2]) * .5);
        e = +((+g[a + 16 >> 2] + +g[a + 24 >> 2]) * .5);
        a = b + 4 | 0;
        g[a >> 2] = c;
        g[a + 4 >> 2] = e;
        g[b + 12 >> 2] = 0;
        i = d;
        return
    }
    function me(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0;
        d = i;
        e = Em(b, 152) | 0;
        if ((e | 0) == 0)
            f = 0;
        else {
            c[e >> 2] = 592;
            c[e + 4 >> 2] = 2;
            g[e + 8 >> 2] = .009999999776482582;
            c[e + 148 >> 2] = 0;
            g[e + 12 >> 2] = 0;
            g[e + 16 >> 2] = 0;
            f = e
        }
        e = a + 4 | 0;
        b = c[e +
        4 >> 2] | 0;
        h = f + 4 | 0;
        c[h >> 2] = c[e >> 2];
        c[h + 4 >> 2] = b;
        An(f + 12 | 0, a + 12 | 0, 140) | 0;
        i = d;
        return f | 0
    }
    function ne(a) {
        a = a | 0;
        return 1
    }
    function oe(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0;
        e = i;
        i = i + 96 | 0;
        f = e + 32 | 0;
        h = e;
        if ((d | 0) < 3) {
            c[a + 148 >> 2] = 4;
            g[a + 20 >> 2] = -1;
            g[a + 24 >> 2] = -1;
            g[a + 28 >> 2] = 1;
            g[a + 32 >> 2] = -1;
            g[a + 36 >> 2] = 1;
            g[a + 40 >> 2] = 1;
            g[a + 44 >> 2] = -1;
            g[a + 48 >> 2] = 1;
            g[a + 84 >> 2] = 0;
            g[a + 88 >> 2] = -1;
            g[a + 92 >> 2] = 1;
            g[a + 96 >> 2] = 0;
            g[a + 100 >> 2] = 0;
            g[a +
            104 >> 2] = 1;
            g[a + 108 >> 2] = -1;
            g[a + 112 >> 2] = 0;
            g[a + 12 >> 2] = 0;
            g[a + 16 >> 2] = 0;
            i = e;
            return
        }
        j = (d | 0) < 8 ? d : 8;
        d = 0;
        l = 0;
        while (1) {
            m = b + (d << 3) | 0;
            n = c[m >> 2] | 0;
            o = c[m + 4 >> 2] | 0;
            p = (c[k >> 2] = n, +g[k >> 2]);
            q = (c[k >> 2] = o, +g[k >> 2]);
            a:
            do if ((l | 0) > 0) {
                m = 0;
                while (1) {
                    r = p - +g[f + (m << 3) >> 2];
                    s = q - +g[f + (m << 3) + 4 >> 2];
                    m = m + 1 | 0;
                    if (r * r + s * s < .0024999999441206455) {
                        t = l;
                        break a
                    }
                    if ((m | 0) >= (l | 0)) {
                        u = 7;
                        break
                    }
                }
            } else
                u = 7;
            while (0);
            if ((u | 0) == 7) {
                u = 0;
                m = f + (l << 3) | 0;
                c[m >> 2] = n;
                c[m + 4 >> 2] = o;
                t = l + 1 | 0
            }
            d = d + 1 | 0;
            if ((d | 0) == (j | 0))
                break;
            else
                l = t
        }
        if ((t | 0) < 3) {
            c[a + 148 >> 2] = 4;
            g[a + 20 >> 2] = -1;
            g[a + 24 >> 2] = -1;
            g[a + 28 >> 2] = 1;
            g[a + 32 >> 2] = -1;
            g[a + 36 >> 2] = 1;
            g[a + 40 >> 2] = 1;
            g[a + 44 >> 2] = -1;
            g[a + 48 >> 2] = 1;
            g[a + 84 >> 2] = 0;
            g[a + 88 >> 2] = -1;
            g[a + 92 >> 2] = 1;
            g[a + 96 >> 2] = 0;
            g[a + 100 >> 2] = 0;
            g[a + 104 >> 2] = 1;
            g[a + 108 >> 2] = -1;
            g[a + 112 >> 2] = 0;
            g[a + 12 >> 2] = 0;
            g[a + 16 >> 2] = 0;
            i = e;
            return
        }
        l = 0;
        j = 1;
        q = +g[f >> 2];
        while (1) {
            p = +g[f + (j << 3) >> 2];
            if (!(p > q))
                if (p == q ? +g[f + (j << 3) + 4 >> 2] < +g[f + (l << 3) + 4 >> 2] : 0)
                    u = 22;
                else {
                    v = l;
                    w = q
                }
            else
                u = 22;
            if ((u | 0) == 22) {
                u = 0;
                v = j;
                w = p
            }
            j = j + 1 | 0;
            if ((j | 0) == (t | 0)) {
                x = v;
                y = 0;
                break
            } else {
                l = v;
                q = w
            }
        }
        while (1) {
            c[h + (y << 2) >> 2] = x;
            l = 0;
            j = 1;
            while (1) {
                if ((l | 0) !=
                (x | 0)) {
                    w = +g[f + (x << 3) >> 2];
                    q = +g[f + (l << 3) >> 2] - w;
                    p = +g[f + (x << 3) + 4 >> 2];
                    s = +g[f + (l << 3) + 4 >> 2] - p;
                    r = +g[f + (j << 3) >> 2] - w;
                    w = +g[f + (j << 3) + 4 >> 2] - p;
                    p = q * w - s * r;
                    u = p < 0 ? j : l;
                    if (p == 0 ? r * r + w * w > q * q + s * s : 0)
                        z = j;
                    else
                        z = u
                } else
                    z = j;
                j = j + 1 | 0;
                if ((j | 0) == (t | 0))
                    break;
                else
                    l = z
            }
            A = y + 1 | 0;
            if ((z | 0) == (v | 0))
                break;
            else {
                x = z;
                y = A
            }
        }
        c[a + 148 >> 2] = A;
        z = (y | 0) > -1;
        if (z) {
            x = 0;
            do {
                v = f + (c[h + (x << 2) >> 2] << 3) | 0;
                t = c[v + 4 >> 2] | 0;
                l = a + (x << 3) + 20 | 0;
                c[l >> 2] = c[v >> 2];
                c[l + 4 >> 2] = t;
                x = x + 1 | 0
            } while ((x | 0) != (A | 0));
            if (z) {
                z = 0;
                do {
                    x = z;
                    z = z + 1 | 0;
                    h = (z | 0) < (A | 0) ? z : 0;
                    s = +g[a + (h << 3) + 24 >> 2] - +g[a + (x <<
                    3) + 24 >> 2];
                    f = a + (x << 3) + 84 | 0;
                    q = +s;
                    w = +-(+g[a + (h << 3) + 20 >> 2] - +g[a + (x << 3) + 20 >> 2]);
                    h = f;
                    g[h >> 2] = q;
                    g[h + 4 >> 2] = w;
                    h = a + (x << 3) + 88 | 0;
                    w = +g[h >> 2];
                    q = +Q(+(s * s + w * w));
                    if (!(q < 1.1920928955078125E-7)) {
                        r = 1 / q;
                        g[f >> 2] = s * r;
                        g[h >> 2] = w * r
                    }
                } while ((z | 0) != (A | 0))
            }
        }
        z = a + 12 | 0;
        h = a + 20 | 0;
        if ((y | 0) > -1) {
            r = 0;
            w = 0;
            s = 0;
            y = 0;
            while (1) {
                f = a + (y << 3) + 20 | 0;
                q = +g[f >> 2];
                p = +g[f + 4 >> 2];
                y = y + 1 | 0;
                if ((y | 0) < (A | 0))
                    B = a + (y << 3) + 20 | 0;
                else
                    B = h;
                f = B;
                C = +g[f >> 2];
                D = +g[f + 4 >> 2];
                E = (q * D - p * C) * .5;
                F = s + E;
                G = E * .3333333432674408;
                E = r + (q + 0 + C) * G;
                C = w + (p + 0 + D) * G;
                if ((y | 0) == (A | 0)) {
                    H = E;
                    I = C;
                    J = F;
                    break
                } else {
                    r =
                    E;
                    w = C;
                    s = F
                }
            }
        } else {
            H = 0;
            I = 0;
            J = 0
        }
        s = 1 / J;
        J = +(H * s);
        H = +(I * s);
        A = z;
        g[A >> 2] = J;
        g[A + 4 >> 2] = H;
        i = e;
        return
    }
    function pe(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        e = i;
        f = +g[d >> 2] - +g[b >> 2];
        h = +g[d + 4 >> 2] - +g[b + 4 >> 2];
        j = +g[b + 12 >> 2];
        k = +g[b + 8 >> 2];
        l = f * j + h * k;
        m = j * h - f * k;
        b = c[a + 148 >> 2] | 0;
        if ((b | 0) > 0)
            n = 0;
        else {
            o = 1;
            i = e;
            return o | 0
        }
        while (1) {
            if ((l - +g[a + (n << 3) + 20 >> 2]) * +g[a + (n << 3) + 84 >> 2] + (m - +g[a + (n << 3) + 24 >> 2]) * +g[a + (n << 3) + 88 >> 2] > 0) {
                o = 0;
                p = 4;
                break
            }
            n = n + 1 | 0;
            if ((n | 0) >= (b | 0)) {
                o = 1;
                p = 4;
                break
            }
        }
        if ((p | 0) == 4) {
            i = e;
            return o | 0
        }
        return 0
    }
    function qe(a, b, d, e, f, h) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0;
        h = i;
        j = +g[d >> 2] - +g[b >> 2];
        k = +g[d + 4 >> 2] - +g[b + 4 >> 2];
        d = b + 12 | 0;
        l = +g[d >> 2];
        m = b + 8 | 0;
        n = +g[m >> 2];
        o = j * l + k * n;
        p = l * k - j * n;
        b = c[a + 148 >> 2] | 0;
        q = (b | 0) > 0;
        if (q) {
            n = o;
            j = p;
            r = 0;
            k = -3.4028234663852886E38;
            while (1) {
                s = a + (r << 3) + 84 | 0;
                l = (o - +g[a + (r << 3) + 20 >> 2]) * +g[s >> 2] + (p - +g[a + (r << 3) + 24 >> 2]) * +g[a + (r << 3) + 88 >> 2];
                if (l > k) {
                    t = s;
                    u = +g[t >> 2];
                    v = +g[t + 4 >> 2];
                    w = u;
                    x = l
                } else {
                    v = j;
                    w = n;
                    x = k
                }
                r =
                r + 1 | 0;
                if ((r | 0) >= (b | 0))
                    break;
                else {
                    n = w;
                    j = v;
                    k = x
                }
            }
            if (x > 0) {
                k = x * x;
                if (q) {
                    j = v;
                    n = w;
                    q = 0;
                    l = k;
                    while (1) {
                        u = o - +g[a + (q << 3) + 20 >> 2];
                        y = p - +g[a + (q << 3) + 24 >> 2];
                        z = u * u + y * y;
                        r = l > z;
                        A = r ? y : j;
                        y = r ? u : n;
                        u = r ? z : l;
                        q = q + 1 | 0;
                        if ((q | 0) >= (b | 0)) {
                            B = A;
                            C = y;
                            D = u;
                            break
                        } else {
                            j = A;
                            n = y;
                            l = u
                        }
                    }
                } else {
                    B = v;
                    C = w;
                    D = k
                }
                g[e >> 2] = +Q(+D);
                D = +g[d >> 2];
                k = +g[m >> 2];
                l = C * D - B * k;
                n = B * D + C * k;
                k = +l;
                C = +n;
                b = f;
                g[b >> 2] = k;
                g[b + 4 >> 2] = C;
                C = +Q(+(l * l + n * n));
                if (C < 1.1920928955078125E-7) {
                    i = h;
                    return
                }
                k = 1 / C;
                g[f >> 2] = l * k;
                g[f + 4 >> 2] = n * k;
                i = h;
                return
            } else {
                E = v;
                F = w;
                G = x
            }
        } else {
            E = p;
            F = o;
            G = -3.4028234663852886E38
        }
        g[e >>
        2] = G;
        G = +g[d >> 2];
        o = +g[m >> 2];
        p = +(F * G - E * o);
        x = +(E * G + F * o);
        m = f;
        g[m >> 2] = p;
        g[m + 4 >> 2] = x;
        i = h;
        return
    }
    function re(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0;
        f = i;
        h = +g[e >> 2];
        j = +g[d >> 2] - h;
        k = +g[e + 4 >> 2];
        l = +g[d + 4 >> 2] - k;
        m = e + 12 | 0;
        n = +g[m >> 2];
        o = e + 8 | 0;
        p = +g[o >> 2];
        q = j * n + l * p;
        r = n * l - j * p;
        j = +g[d + 8 >> 2] - h;
        h = +g[d + 12 >> 2] - k;
        k = n * j + p * h - q;
        l = n * h - p * j - r;
        e = c[a + 148 >> 2] | 0;
        if ((e | 0) <= 0) {
            s = 0;
            i = f;
            return s | 0
        }
        t = 0;
        u = -1;
        j = 0;
        p = +g[d + 16 >> 2];
        a:
        while (1) {
            h = +g[a + (t << 3) + 84 >> 2];
            n =
            +g[a + (t << 3) + 88 >> 2];
            v = (+g[a + (t << 3) + 20 >> 2] - q) * h + (+g[a + (t << 3) + 24 >> 2] - r) * n;
            w = k * h + l * n;
            do if (w == 0)
                if (v < 0) {
                    s = 0;
                    x = 15;
                    break a
                } else {
                    y = u;
                    z = j;
                    A = p
                }
            else {
                if (w < 0 ? v < j * w : 0) {
                    y = t;
                    z = v / w;
                    A = p;
                    break
                }
                if (w > 0 ? v < p * w : 0) {
                    y = u;
                    z = j;
                    A = v / w
                } else {
                    y = u;
                    z = j;
                    A = p
                }
            }
            while (0);
            t = t + 1 | 0;
            if (A < z) {
                s = 0;
                x = 15;
                break
            }
            if ((t | 0) >= (e | 0)) {
                x = 13;
                break
            } else {
                u = y;
                j = z;
                p = A
            }
        }
        if ((x | 0) == 13) {
            if (!((y | 0) > -1)) {
                s = 0;
                i = f;
                return s | 0
            }
            g[b + 8 >> 2] = z;
            z = +g[m >> 2];
            A = +g[a + (y << 3) + 84 >> 2];
            p = +g[o >> 2];
            j = +g[a + (y << 3) + 88 >> 2];
            l = +(z * A - p * j);
            k = +(A * p + z * j);
            y = b;
            g[y >> 2] = l;
            g[y + 4 >> 2] = k;
            s = 1;
            i = f;
            return s |
            0
        } else if ((x | 0) == 15) {
            i = f;
            return s | 0
        }
        return 0
    }
    function se(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0;
        e = i;
        f = +g[d + 12 >> 2];
        h = +g[a + 20 >> 2];
        j = +g[d + 8 >> 2];
        k = +g[a + 24 >> 2];
        l = +g[d >> 2];
        m = l + (f * h - j * k);
        n = +g[d + 4 >> 2];
        o = h * j + f * k + n;
        d = c[a + 148 >> 2] | 0;
        if ((d | 0) > 1) {
            k = m;
            h = o;
            p = m;
            q = o;
            r = 1;
            while (1) {
                s = +g[a + (r << 3) + 20 >> 2];
                t = +g[a + (r << 3) + 24 >> 2];
                u = l + (f * s - j * t);
                v = s * j + f * t + n;
                t = k < u ? k : u;
                s = h < v ? h : v;
                w = p > u ? p : u;
                u = q > v ? q : v;
                r = r + 1 | 0;
                if ((r | 0) >= (d | 0)) {
                    x = s;
                    y = t;
                    z = u;
                    A = w;
                    break
                } else {
                    k =
                    t;
                    h = s;
                    p = w;
                    q = u
                }
            }
        } else {
            x = o;
            y = m;
            z = o;
            A = m
        }
        m = +g[a + 8 >> 2];
        o = +(y - m);
        y = +(x - m);
        a = b;
        g[a >> 2] = o;
        g[a + 4 >> 2] = y;
        y = +(A + m);
        A = +(z + m);
        a = b + 8 | 0;
        g[a >> 2] = y;
        g[a + 4 >> 2] = A;
        i = e;
        return
    }
    function te(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = +d;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0;
        e = i;
        f = c[a + 148 >> 2] | 0;
        h = (f | 0) > 0;
        if (h) {
            j = 0;
            k = 0;
            l = 0;
            do {
                j = j + +g[a + (l << 3) + 20 >> 2];
                k = k + +g[a + (l << 3) + 24 >> 2];
                l = l + 1 | 0
            } while ((l | 0) < (f | 0));
            m = 1 / +(f | 0);
            n = j * m;
            j = k * m;
            if (h) {
                h = a + 20 | 0;
                l = a + 24 | 0;
                m = 0;
                k = 0;
                o = 0;
                p = 0;
                q = 0;
                while (1) {
                    r = +g[a + (q << 3) + 20 >> 2] - n;
                    s = +g[a + (q << 3) + 24 >> 2] - j;
                    q = q + 1 | 0;
                    t = (q | 0) < (f | 0);
                    if (t) {
                        u = a + (q << 3) + 20 | 0;
                        v = a + (q << 3) + 24 | 0
                    } else {
                        u = h;
                        v = l
                    }
                    w = +g[u >> 2] - n;
                    x = +g[v >> 2] - j;
                    y = r * x - s * w;
                    z = y * .5;
                    A = p + z;
                    B = z * .3333333432674408;
                    z = m + (r + w) * B;
                    C = k + (s + x) * B;
                    B = o + y * .0833333358168602 * (w * w + (r * r + r * w) + (x * x + (s * s + s * x)));
                    if (!t) {
                        D = C;
                        E = z;
                        F = n;
                        G = j;
                        H = B;
                        I = A;
                        break
                    } else {
                        m = z;
                        k = C;
                        o = B;
                        p = A
                    }
                }
            } else {
                D = 0;
                E = 0;
                F = n;
                G = j;
                H = 0;
                I = 0
            }
        } else {
            j = 1 / +(f | 0);
            D = 0;
            E = 0;
            F = j * 0;
            G = j * 0;
            H = 0;
            I = 0
        }
        j = I * d;
        g[b >> 2] = j;
        n = 1 / I;
        I = E * n;
        E = D * n;
        n = F + I;
        F = G + E;
        G = +n;
        D = +F;
        f = b + 4 | 0;
        g[f >> 2] = G;
        g[f + 4 >> 2] = D;
        g[b +
        12 >> 2] = H * d + j * (n * n + F * F - (I * I + E * E));
        i = e;
        return
    }
    function ue(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0;
        d = i;
        e = Em(b, 20) | 0;
        if ((e | 0) == 0)
            f = 0;
        else {
            c[e >> 2] = 680;
            b = e + 4 | 0;
            c[b + 0 >> 2] = 0;
            c[b + 4 >> 2] = 0;
            c[b + 8 >> 2] = 0;
            c[b + 12 >> 2] = 0;
            f = e
        }
        e = a + 4 | 0;
        b = c[e + 4 >> 2] | 0;
        g = f + 4 | 0;
        c[g >> 2] = c[e >> 2];
        c[g + 4 >> 2] = b;
        b = a + 12 | 0;
        a = c[b + 4 >> 2] | 0;
        g = f + 12 | 0;
        c[g >> 2] = c[b >> 2];
        c[g + 4 >> 2] = a;
        i = d;
        return f | 0
    }
    function ve(a) {
        a = a | 0;
        return 1
    }
    function we(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = +g[b + 12 >> 2];
        e = +g[a + 12 >> 2];
        f = +g[b + 8 >> 2];
        h = +g[a + 16 >> 2];
        i = +g[c >> 2] - (+g[b >>
        2] + (d * e - f * h));
        j = +g[c + 4 >> 2] - (+g[b + 4 >> 2] + (e * f + d * h));
        h = +g[a + 8 >> 2];
        return i * i + j * j <= h * h | 0
    }
    function xe(a, b, c, d, e, f) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        f = i;
        h = +g[b + 12 >> 2];
        j = +g[a + 12 >> 2];
        k = +g[b + 8 >> 2];
        l = +g[a + 16 >> 2];
        m = +g[c >> 2] - (+g[b >> 2] + (h * j - k * l));
        n = +g[c + 4 >> 2] - (+g[b + 4 >> 2] + (j * k + h * l));
        l = +Q(+(m * m + n * n));
        g[d >> 2] = l - +g[a + 8 >> 2];
        h = 1 / l;
        l = +(m * h);
        m = +(n * h);
        a = e;
        g[a >> 2] = l;
        g[a + 4 >> 2] = m;
        i = f;
        return
    }
    function ye(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        e = i;
        f = +g[d +
        12 >> 2];
        h = +g[a + 12 >> 2];
        j = +g[d + 8 >> 2];
        k = +g[a + 16 >> 2];
        l = +g[c >> 2];
        m = l - (+g[d >> 2] + (f * h - j * k));
        n = +g[c + 4 >> 2];
        o = n - (+g[d + 4 >> 2] + (h * j + f * k));
        k = +g[a + 8 >> 2];
        f = +g[c + 8 >> 2] - l;
        l = +g[c + 12 >> 2] - n;
        n = m * f + o * l;
        j = f * f + l * l;
        h = n * n - (m * m + o * o - k * k) * j;
        if (h < 0 | j < 1.1920928955078125E-7) {
            p = 0;
            i = e;
            return p | 0
        }
        k = n + +Q(+h);
        h = -k;
        if (!(k <= -0)) {
            p = 0;
            i = e;
            return p | 0
        }
        if (!(j * +g[c + 16 >> 2] >= h)) {
            p = 0;
            i = e;
            return p | 0
        }
        k = h / j;
        g[b + 8 >> 2] = k;
        j = m + f * k;
        f = o + l * k;
        k = +j;
        l = +f;
        c = b;
        g[c >> 2] = k;
        g[c + 4 >> 2] = l;
        l = +Q(+(j * j + f * f));
        if (l < 1.1920928955078125E-7) {
            p = 1;
            i = e;
            return p | 0
        }
        k = 1 / l;
        g[b >> 2] =
        j * k;
        g[b + 4 >> 2] = f * k;
        p = 1;
        i = e;
        return p | 0
    }
    function ze(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0,
            k = 0;
        e = +g[c + 12 >> 2];
        f = +g[a + 12 >> 2];
        h = +g[c + 8 >> 2];
        i = +g[a + 16 >> 2];
        j = +g[c >> 2] + (e * f - h * i);
        k = +g[c + 4 >> 2] + (f * h + e * i);
        c = a + 8 | 0;
        i = +g[c >> 2];
        g[b >> 2] = j - i;
        g[b + 4 >> 2] = k - i;
        i = +g[c >> 2];
        g[b + 8 >> 2] = j + i;
        g[b + 12 >> 2] = k + i;
        return
    }
    function Ae(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = +d;
        var e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        e = a + 8 | 0;
        f = +g[e >> 2];
        h = f * d * 3.1415927410125732 * f;
        g[b >> 2] = h;
        i = a + 12 | 0;
        j = i;
        k = c[j + 4 >> 2] | 0;
        l = b + 4 | 0;
        c[l >> 2] = c[j >> 2];
        c[l + 4 >> 2] = k;
        f = +g[e >> 2];
        d = +g[i >> 2];
        m = +g[a + 16 >> 2];
        g[b + 12 >> 2] = h * (f * f * .5 + (d * d + m * m));
        return
    }
    function Be(a) {
        a = a | 0;
        var b = 0;
        b = i;
        c[a >> 2] = 760;
        Qm(c[a + 12 >> 2] | 0);
        sn(a);
        i = b;
        return
    }
    function Ce(a) {
        a = a | 0;
        var b = 0,
            d = 0;
        b = i;
        c[a >> 2] = 760;
        d = a + 12 | 0;
        Qm(c[d >> 2] | 0);
        c[d >> 2] = 0;
        c[a + 16 >> 2] = 0;
        i = b;
        return
    }
    function De(a, d, e) {
        a = a | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0;
        f = i;
        g = a + 16 | 0;
        c[g >> 2] = e;
        h = Pm(e << 3) | 0;
        c[a + 12 >> 2] = h;
        An(h | 0, d | 0, c[g >> 2] << 3 | 0) | 0;
        g = a + 20 | 0;
        c[g + 0 >> 2] = 0;
        c[g + 4 >> 2] = 0;
        c[g + 8 >> 2] = 0;
        c[g + 12 >> 2] = 0;
        b[g + 16 >> 1] = 0;
        i = f;
        return
    }
    function Ee(d, e) {
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        f = i;
        h = Em(e, 40) | 0;
        if ((h | 0) == 0)
            j = 0;
        else {
            c[h >> 2] = 760;
            c[h + 4 >> 2] = 3;
            g[h + 8 >> 2] = .009999999776482582;
            c[h + 12 >> 2] = 0;
            c[h + 16 >> 2] = 0;
            a[h + 36 >> 0] = 0;
            a[h + 37 >> 0] = 0;
            j = h
        }
        h = c[d + 12 >> 2] | 0;
        e = c[d + 16 >> 2] | 0;
        k = j + 16 | 0;
        c[k >> 2] = e;
        l = Pm(e << 3) | 0;
        c[j + 12 >> 2] = l;
        An(l | 0, h | 0, c[k >> 2] << 3 | 0) | 0;
        k = j + 20 | 0;
        c[k + 0 >> 2] = 0;
        c[k + 4 >> 2] = 0;
        c[k + 8 >> 2] = 0;
        c[k + 12 >> 2] = 0;
        b[k + 16 >> 1] = 0;
        k = d + 20 | 0;
        h = c[k + 4 >> 2] | 0;
        l = j + 20 | 0;
        c[l >> 2] = c[k >> 2];
        c[l + 4 >> 2] = h;
        h = d + 28 | 0;
        l = c[h + 4 >> 2] | 0;
        k = j + 28 | 0;
        c[k >> 2] = c[h >> 2];
        c[k + 4 >> 2] = l;
        a[j + 36 >> 0] = a[d + 36 >> 0] | 0;
        a[j + 37 >> 0] = a[d + 37 >> 0] | 0;
        i = f;
        return j | 0
    }
    function Fe(a) {
        a = a | 0;
        return (c[a + 16 >> 2] | 0) + -1 | 0
    }
    function Ge(b, d, e) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        f = i;
        c[d + 4 >> 2] = 1;
        g[d + 8 >> 2] = +g[b + 8 >> 2];
        h = b + 12 | 0;
        j = (c[h >> 2] | 0) + (e << 3) | 0;
        k = c[j + 4 >> 2] | 0;
        l = d + 12 | 0;
        c[l >> 2] = c[j >> 2];
        c[l + 4 >> 2] = k;
        k = (c[h >> 2] | 0) + (e + 1 << 3) | 0;
        l = c[k + 4 >> 2] | 0;
        j = d + 20 | 0;
        c[j >> 2] = c[k >> 2];
        c[j + 4 >> 2] = l;
        l = d + 28 | 0;
        if ((e | 0) > 0) {
            j = (c[h >> 2] | 0) + (e + -1 << 3) | 0;
            k = c[j + 4 >> 2] | 0;
            m = l;
            c[m >> 2] = c[j >> 2];
            c[m + 4 >> 2] = k;
            a[d + 44 >> 0] = 1
        } else {
            k = b + 20 | 0;
            m = c[k + 4 >> 2] | 0;
            j = l;
            c[j >> 2] = c[k >> 2];
            c[j + 4 >> 2] = m;
            a[d + 44 >> 0] = a[b +
            36 >> 0] | 0
        }
        m = d + 36 | 0;
        if (((c[b + 16 >> 2] | 0) + -2 | 0) > (e | 0)) {
            j = (c[h >> 2] | 0) + (e + 2 << 3) | 0;
            e = c[j + 4 >> 2] | 0;
            h = m;
            c[h >> 2] = c[j >> 2];
            c[h + 4 >> 2] = e;
            a[d + 45 >> 0] = 1;
            i = f;
            return
        } else {
            e = b + 28 | 0;
            h = c[e + 4 >> 2] | 0;
            j = m;
            c[j >> 2] = c[e >> 2];
            c[j + 4 >> 2] = h;
            a[d + 45 >> 0] = a[b + 37 >> 0] | 0;
            i = f;
            return
        }
    }
    function He(d, e, f, h, j, k) {
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        j = j | 0;
        k = k | 0;
        var l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0;
        l = i;
        i = i + 48 | 0;
        m = l;
        c[m >> 2] = 488;
        n = m + 4 | 0;
        o = m + 8 | 0;
        p = m + 28 | 0;
        c[p + 0 >> 2] = 0;
        c[p + 4 >> 2] = 0;
        c[p + 8 >> 2] = 0;
        c[p + 12 >> 2] = 0;
        b[p + 16 >> 1] = 0;
        c[n >> 2] = 1;
        g[o >> 2] = +g[d + 8 >> 2];
        o = c[d + 12 >> 2] | 0;
        n = o + (k <<
        3) | 0;
        p = c[n + 4 >> 2] | 0;
        q = m + 12 | 0;
        c[q >> 2] = c[n >> 2];
        c[q + 4 >> 2] = p;
        p = o + (k + 1 << 3) | 0;
        q = c[p + 4 >> 2] | 0;
        n = m + 20 | 0;
        c[n >> 2] = c[p >> 2];
        c[n + 4 >> 2] = q;
        q = m + 28 | 0;
        if ((k | 0) > 0) {
            n = o + (k + -1 << 3) | 0;
            p = c[n + 4 >> 2] | 0;
            r = q;
            c[r >> 2] = c[n >> 2];
            c[r + 4 >> 2] = p;
            a[m + 44 >> 0] = 1
        } else {
            p = d + 20 | 0;
            r = c[p + 4 >> 2] | 0;
            n = q;
            c[n >> 2] = c[p >> 2];
            c[n + 4 >> 2] = r;
            a[m + 44 >> 0] = a[d + 36 >> 0] | 0
        }
        r = m + 36 | 0;
        if (((c[d + 16 >> 2] | 0) + -2 | 0) > (k | 0)) {
            n = o + (k + 2 << 3) | 0;
            k = c[n + 4 >> 2] | 0;
            o = r;
            c[o >> 2] = c[n >> 2];
            c[o + 4 >> 2] = k;
            a[m + 45 >> 0] = 1;
            ie(m, e, f, h, j, 0);
            i = l;
            return
        } else {
            k = d + 28 | 0;
            o = c[k + 4 >> 2] | 0;
            n = r;
            c[n >> 2] = c[k >> 2];
            c[n + 4 >> 2] =
            o;
            a[m + 45 >> 0] = a[d + 37 >> 0] | 0;
            ie(m, e, f, h, j, 0);
            i = l;
            return
        }
    }
    function Ie(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        return 0
    }
    function Je(a, d, e, f, h) {
        a = a | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        j = i;
        i = i + 48 | 0;
        k = j;
        c[k >> 2] = 488;
        c[k + 4 >> 2] = 1;
        g[k + 8 >> 2] = .009999999776482582;
        l = k + 28 | 0;
        c[l + 0 >> 2] = 0;
        c[l + 4 >> 2] = 0;
        c[l + 8 >> 2] = 0;
        c[l + 12 >> 2] = 0;
        b[l + 16 >> 1] = 0;
        l = h + 1 | 0;
        m = (l | 0) == (c[a + 16 >> 2] | 0) ? 0 : l;
        l = c[a + 12 >> 2] | 0;
        a = l + (h << 3) | 0;
        h = c[a + 4 >> 2] | 0;
        n = k + 12 | 0;
        c[n >> 2] = c[a >> 2];
        c[n + 4 >> 2] = h;
        h = l + (m << 3) | 0;
        m = c[h + 4 >> 2] | 0;
        l = k + 20 | 0;
        c[l >> 2] = c[h >> 2];
        c[l + 4 >> 2] = m;
        m = je(k,
        d, e, f, 0) | 0;
        i = j;
        return m | 0
    }
    function Ke(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0;
        f = i;
        h = e + 1 | 0;
        j = (h | 0) == (c[a + 16 >> 2] | 0) ? 0 : h;
        h = c[a + 12 >> 2] | 0;
        k = +g[d + 12 >> 2];
        l = +g[h + (e << 3) >> 2];
        m = +g[d + 8 >> 2];
        n = +g[h + (e << 3) + 4 >> 2];
        o = +g[d >> 2];
        p = o + (k * l - m * n);
        q = +g[d + 4 >> 2];
        r = l * m + k * n + q;
        n = +g[h + (j << 3) >> 2];
        l = +g[h + (j << 3) + 4 >> 2];
        s = o + (k * n - m * l);
        o = q + (m * n + k * l);
        l = +(p < s ? p : s);
        k = +(r < o ? r : o);
        j = b;
        g[j >> 2] = l;
        g[j + 4 >> 2] = k;
        k = +(p > s ? p : s);
        s = +(r > o ? r : o);
        j = b + 8 | 0;
        g[j >> 2] = k;
        g[j + 4 >> 2] = s;
        i = f;
        return
    }
    function Le(a, b, d) {
        a = a |
        0;
        b = b | 0;
        d = +d;
        a = i;
        c[b + 0 >> 2] = 0;
        c[b + 4 >> 2] = 0;
        c[b + 8 >> 2] = 0;
        c[b + 12 >> 2] = 0;
        i = a;
        return
    }
    function Me(a) {
        a = a | 0;
        var b = 0;
        b = i;
        Ve(a);
        c[a + 28 >> 2] = 0;
        c[a + 48 >> 2] = 16;
        c[a + 52 >> 2] = 0;
        c[a + 44 >> 2] = Pm(128) | 0;
        c[a + 36 >> 2] = 16;
        c[a + 40 >> 2] = 0;
        c[a + 32 >> 2] = Pm(64) | 0;
        i = b;
        return
    }
    function Ne(a) {
        a = a | 0;
        var b = 0;
        b = i;
        Qm(c[a + 32 >> 2] | 0);
        Qm(c[a + 44 >> 2] | 0);
        We(a);
        i = b;
        return
    }
    function Oe(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0;
        e = i;
        f = Ye(a, b, d) | 0;
        d = a + 28 | 0;
        c[d >> 2] = (c[d >> 2] | 0) + 1;
        d = a + 40 | 0;
        b = c[d >> 2] | 0;
        g = a + 36 | 0;
        h = a + 32 | 0;
        if ((b | 0) == (c[g >> 2] | 0)) {
            a = c[h >> 2] |
            0;
            c[g >> 2] = b << 1;
            g = Pm(b << 3) | 0;
            c[h >> 2] = g;
            An(g | 0, a | 0, c[d >> 2] << 2 | 0) | 0;
            Qm(a);
            j = c[d >> 2] | 0
        } else
            j = b;
        c[(c[h >> 2] | 0) + (j << 2) >> 2] = f;
        c[d >> 2] = (c[d >> 2] | 0) + 1;
        i = e;
        return f | 0
    }
    function Pe(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0;
        d = i;
        e = a + 40 | 0;
        f = c[e >> 2] | 0;
        if ((f | 0) > 0) {
            g = c[a + 32 >> 2] | 0;
            h = f;
            f = 0;
            while (1) {
                j = g + (f << 2) | 0;
                if ((c[j >> 2] | 0) == (b | 0)) {
                    c[j >> 2] = -1;
                    k = c[e >> 2] | 0
                } else
                    k = h;
                f = f + 1 | 0;
                if ((f | 0) >= (k | 0))
                    break;
                else
                    h = k
            }
        }
        k = a + 28 | 0;
        c[k >> 2] = (c[k >> 2] | 0) + -1;
        _e(a, b);
        i = d;
        return
    }
    function Qe(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0;
        f = i;
        if (!(af(a, b, d, e) | 0)) {
            i = f;
            return
        }
        e = a + 40 | 0;
        d = c[e >> 2] | 0;
        g = a + 36 | 0;
        h = a + 32 | 0;
        if ((d | 0) == (c[g >> 2] | 0)) {
            a = c[h >> 2] | 0;
            c[g >> 2] = d << 1;
            g = Pm(d << 3) | 0;
            c[h >> 2] = g;
            An(g | 0, a | 0, c[e >> 2] << 2 | 0) | 0;
            Qm(a);
            j = c[e >> 2] | 0
        } else
            j = d;
        c[(c[h >> 2] | 0) + (j << 2) >> 2] = b;
        c[e >> 2] = (c[e >> 2] | 0) + 1;
        i = f;
        return
    }
    function Re(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0;
        d = i;
        e = a + 40 | 0;
        f = c[e >> 2] | 0;
        g = a + 36 | 0;
        h = a + 32 | 0;
        if ((f | 0) == (c[g >> 2] | 0)) {
            a = c[h >> 2] | 0;
            c[g >> 2] = f << 1;
            g = Pm(f << 3) | 0;
            c[h >> 2] = g;
            An(g | 0, a | 0, c[e >> 2] << 2 | 0) | 0;
            Qm(a);
            j = c[e >> 2] | 0
        } else
            j = f;
        c[(c[h >>
        2] | 0) + (j << 2) >> 2] = b;
        c[e >> 2] = (c[e >> 2] | 0) + 1;
        i = d;
        return
    }
    function Se(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        d = i;
        e = a + 56 | 0;
        f = c[e >> 2] | 0;
        if ((f | 0) == (b | 0)) {
            i = d;
            return 1
        }
        g = a + 52 | 0;
        h = c[g >> 2] | 0;
        j = a + 48 | 0;
        k = a + 44 | 0;
        if ((h | 0) == (c[j >> 2] | 0)) {
            a = c[k >> 2] | 0;
            c[j >> 2] = h << 1;
            j = Pm(h << 4) | 0;
            c[k >> 2] = j;
            An(j | 0, a | 0, c[g >> 2] << 3 | 0) | 0;
            Qm(a);
            l = c[e >> 2] | 0;
            m = c[g >> 2] | 0
        } else {
            l = f;
            m = h
        }
        h = c[k >> 2] | 0;
        c[h + (m << 3) >> 2] = (l | 0) > (b | 0) ? b : l;
        l = c[e >> 2] | 0;
        c[h + (c[g >> 2] << 3) + 4 >> 2] = (l | 0) < (b | 0) ? b : l;
        c[g >> 2] = (c[g >> 2] | 0) + 1;
        i = d;
        return 1
    }
    function Te(a, b,
    d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0;
        h = i;
        j = a + 60 | 0;
        c[j >> 2] = 0;
        k = b + 12 | 0;
        l = +g[d + 12 >> 2];
        m = +g[k >> 2];
        n = +g[d + 8 >> 2];
        o = +g[b + 16 >> 2];
        p = e + 12 | 0;
        q = +g[f + 12 >> 2];
        r = +g[p >> 2];
        s = +g[f + 8 >> 2];
        t = +g[e + 16 >> 2];
        u = +g[f >> 2] + (q * r - s * t) - (+g[d >> 2] + (l * m - n * o));
        v = r * s + q * t + +g[f + 4 >> 2] - (m * n + l * o + +g[d + 4 >> 2]);
        o = +g[b + 8 >> 2] + +g[e + 8 >> 2];
        if (u * u + v * v > o * o) {
            i = h;
            return
        }
        c[a + 56 >> 2] = 0;
        e = k;
        k = c[e + 4 >> 2] | 0;
        b = a + 48 | 0;
        c[b >> 2] = c[e >> 2];
        c[b + 4 >> 2] = k;
        g[a + 40 >> 2] = 0;
        g[a + 44 >> 2] = 0;
        c[j >> 2] = 1;
        j = p;
        p = c[j + 4 >> 2] | 0;
        k = a;
        c[k >> 2] = c[j >> 2];
        c[k + 4 >> 2] = p;
        c[a + 16 >> 2] = 0;
        i = h;
        return
    }
    function Ue(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0;
        h = i;
        j = a + 60 | 0;
        c[j >> 2] = 0;
        l = e + 12 | 0;
        m = +g[f + 12 >> 2];
        n = +g[l >> 2];
        o = +g[f + 8 >> 2];
        p = +g[e + 16 >> 2];
        q = +g[f >> 2] + (m * n - o * p) - +g[d >> 2];
        r = n * o + m * p + +g[f + 4 >> 2] - +g[d + 4 >> 2];
        p = +g[d + 12 >> 2];
        m = +g[d + 8 >> 2];
        o = q * p + r * m;
        n = p * r - q * m;
        m = +g[b + 8 >> 2] + +g[e + 8 >> 2];
        e = c[b + 148 >> 2] | 0;
        do if ((e | 0) > 0) {
            d = 0;
            f = 0;
            q = -3.4028234663852886E38;
            while (1) {
                r = (o -
                +g[b + (d << 3) + 20 >> 2]) * +g[b + (d << 3) + 84 >> 2] + (n - +g[b + (d << 3) + 24 >> 2]) * +g[b + (d << 3) + 88 >> 2];
                if (r > m) {
                    s = 19;
                    break
                }
                t = r > q;
                q = t ? r : q;
                f = t ? d : f;
                d = d + 1 | 0;
                if ((d | 0) >= (e | 0)) {
                    s = 4;
                    break
                }
            }
            if ((s | 0) == 4) {
                u = f;
                v = q < 1.1920928955078125E-7;
                break
            } else if ((s | 0) == 19) {
                i = h;
                return
            }
        } else {
            u = 0;
            v = 1
        }
        while (0);
        s = u + 1 | 0;
        d = b + (u << 3) + 20 | 0;
        t = c[d >> 2] | 0;
        w = c[d + 4 >> 2] | 0;
        r = (c[k >> 2] = t, +g[k >> 2]);
        p = (c[k >> 2] = w, +g[k >> 2]);
        d = b + (((s | 0) < (e | 0) ? s : 0) << 3) + 20 | 0;
        s = c[d >> 2] | 0;
        e = c[d + 4 >> 2] | 0;
        x = (c[k >> 2] = s, +g[k >> 2]);
        y = (c[k >> 2] = e, +g[k >> 2]);
        if (v) {
            c[j >> 2] = 1;
            c[a + 56 >> 2] = 1;
            v = b + (u << 3) + 84 |
            0;
            d = c[v + 4 >> 2] | 0;
            z = a + 40 | 0;
            c[z >> 2] = c[v >> 2];
            c[z + 4 >> 2] = d;
            A = +((r + x) * .5);
            B = +((p + y) * .5);
            d = a + 48 | 0;
            g[d >> 2] = A;
            g[d + 4 >> 2] = B;
            d = l;
            z = c[d + 4 >> 2] | 0;
            v = a;
            c[v >> 2] = c[d >> 2];
            c[v + 4 >> 2] = z;
            c[a + 16 >> 2] = 0;
            i = h;
            return
        }
        B = o - r;
        A = n - p;
        C = o - x;
        D = n - y;
        if (B * (x - r) + A * (y - p) <= 0) {
            if (B * B + A * A > m * m) {
                i = h;
                return
            }
            c[j >> 2] = 1;
            c[a + 56 >> 2] = 1;
            z = a + 40 | 0;
            E = +B;
            F = +A;
            v = z;
            g[v >> 2] = E;
            g[v + 4 >> 2] = F;
            F = +Q(+(B * B + A * A));
            if (!(F < 1.1920928955078125E-7)) {
                E = 1 / F;
                g[z >> 2] = B * E;
                g[a + 44 >> 2] = A * E
            }
            z = a + 48 | 0;
            c[z >> 2] = t;
            c[z + 4 >> 2] = w;
            w = l;
            z = c[w + 4 >> 2] | 0;
            t = a;
            c[t >> 2] = c[w >> 2];
            c[t + 4 >> 2] = z;
            c[a + 16 >> 2] =
            0;
            i = h;
            return
        }
        if (!(C * (r - x) + D * (p - y) <= 0)) {
            E = (r + x) * .5;
            x = (p + y) * .5;
            z = b + (u << 3) + 84 | 0;
            if ((o - E) * +g[z >> 2] + (n - x) * +g[b + (u << 3) + 88 >> 2] > m) {
                i = h;
                return
            }
            c[j >> 2] = 1;
            c[a + 56 >> 2] = 1;
            u = z;
            z = c[u + 4 >> 2] | 0;
            b = a + 40 | 0;
            c[b >> 2] = c[u >> 2];
            c[b + 4 >> 2] = z;
            n = +E;
            E = +x;
            z = a + 48 | 0;
            g[z >> 2] = n;
            g[z + 4 >> 2] = E;
            z = l;
            b = c[z + 4 >> 2] | 0;
            u = a;
            c[u >> 2] = c[z >> 2];
            c[u + 4 >> 2] = b;
            c[a + 16 >> 2] = 0;
            i = h;
            return
        }
        if (C * C + D * D > m * m) {
            i = h;
            return
        }
        c[j >> 2] = 1;
        c[a + 56 >> 2] = 1;
        j = a + 40 | 0;
        m = +C;
        E = +D;
        b = j;
        g[b >> 2] = m;
        g[b + 4 >> 2] = E;
        E = +Q(+(C * C + D * D));
        if (!(E < 1.1920928955078125E-7)) {
            m = 1 / E;
            g[j >> 2] = C * m;
            g[a + 44 >> 2] = D *
            m
        }
        j = a + 48 | 0;
        c[j >> 2] = s;
        c[j + 4 >> 2] = e;
        e = l;
        l = c[e + 4 >> 2] | 0;
        j = a;
        c[j >> 2] = c[e >> 2];
        c[j + 4 >> 2] = l;
        c[a + 16 >> 2] = 0;
        i = h;
        return
    }
    function Ve(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0;
        b = i;
        c[a >> 2] = -1;
        d = a + 12 | 0;
        c[d >> 2] = 16;
        c[a + 8 >> 2] = 0;
        e = Pm(576) | 0;
        f = a + 4 | 0;
        c[f >> 2] = e;
        xn(e | 0, 0, (c[d >> 2] | 0) * 36 | 0) | 0;
        e = (c[d >> 2] | 0) + -1 | 0;
        g = c[f >> 2] | 0;
        if ((e | 0) > 0) {
            f = 0;
            do {
                h = f;
                f = f + 1 | 0;
                c[g + (h * 36 | 0) + 20 >> 2] = f;
                c[g + (h * 36 | 0) + 32 >> 2] = -1;
                h = (c[d >> 2] | 0) + -1 | 0
            } while ((f | 0) < (h | 0));
            j = h
        } else
            j = e;
        c[g + (j * 36 | 0) + 20 >> 2] = -1;
        c[g + (((c[d >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1;
        c[a + 16 >> 2] = 0;
        c[a +
        20 >> 2] = 0;
        c[a + 24 >> 2] = 0;
        i = b;
        return
    }
    function We(a) {
        a = a | 0;
        var b = 0;
        b = i;
        Qm(c[a + 4 >> 2] | 0);
        i = b;
        return
    }
    function Xe(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0;
        b = i;
        d = a + 16 | 0;
        e = c[d >> 2] | 0;
        f = a + 4 | 0;
        g = c[f >> 2] | 0;
        if ((e | 0) == -1) {
            h = a + 12 | 0;
            j = c[h >> 2] | 0;
            c[h >> 2] = j << 1;
            k = Pm(j * 72 | 0) | 0;
            c[f >> 2] = k;
            j = a + 8 | 0;
            An(k | 0, g | 0, (c[j >> 2] | 0) * 36 | 0) | 0;
            Qm(g);
            k = c[j >> 2] | 0;
            l = (c[h >> 2] | 0) + -1 | 0;
            m = c[f >> 2] | 0;
            if ((k | 0) < (l | 0)) {
                f = k;
                do {
                    k = f;
                    f = f + 1 | 0;
                    c[m + (k * 36 | 0) + 20 >> 2] = f;
                    c[m + (k * 36 | 0) + 32 >> 2] = -1;
                    k = (c[h >> 2] | 0) + -1 | 0
                } while ((f | 0) < (k | 0));
                n = k
            } else
                n =
                l;
            c[m + (n * 36 | 0) + 20 >> 2] = -1;
            c[m + (((c[h >> 2] | 0) + -1 | 0) * 36 | 0) + 32 >> 2] = -1;
            h = c[j >> 2] | 0;
            c[d >> 2] = h;
            o = j;
            p = m;
            q = h
        } else {
            o = a + 8 | 0;
            p = g;
            q = e
        }
        e = p + (q * 36 | 0) + 20 | 0;
        c[d >> 2] = c[e >> 2];
        c[e >> 2] = -1;
        c[p + (q * 36 | 0) + 24 >> 2] = -1;
        c[p + (q * 36 | 0) + 28 >> 2] = -1;
        c[p + (q * 36 | 0) + 32 >> 2] = 0;
        c[p + (q * 36 | 0) + 16 >> 2] = 0;
        c[o >> 2] = (c[o >> 2] | 0) + 1;
        i = b;
        return q | 0
    }
    function Ye(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        e = i;
        f = Xe(a) | 0;
        h = a + 4 | 0;
        j = +(+g[b >> 2] + -.10000000149011612);
        k = +(+g[b + 4 >> 2] + -.10000000149011612);
        l = (c[h >> 2] | 0) + (f * 36 | 0) | 0;
        g[l >> 2] = j;
        g[l + 4 >> 2] = k;
        k = +(+g[b +
        8 >> 2] + .10000000149011612);
        j = +(+g[b + 12 >> 2] + .10000000149011612);
        b = (c[h >> 2] | 0) + (f * 36 | 0) + 8 | 0;
        g[b >> 2] = k;
        g[b + 4 >> 2] = j;
        c[(c[h >> 2] | 0) + (f * 36 | 0) + 16 >> 2] = d;
        c[(c[h >> 2] | 0) + (f * 36 | 0) + 32 >> 2] = 0;
        Ze(a, f);
        i = e;
        return f | 0
    }
    function Ze(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0;
        d = i;
        e = a + 24 | 0;
        c[e >> 2] = (c[e >> 2] | 0) + 1;
        e = c[a >> 2] | 0;
        if ((e | 0) == -1) {
            c[a >> 2] = b;
            c[(c[a + 4 >> 2] | 0) + (b * 36 | 0) + 20 >> 2] = -1;
            i = d;
            return
        }
        f = a + 4 | 0;
        h = c[f >> 2] | 0;
        j = +g[h + (b * 36 | 0) >>
        2];
        k = +g[h + (b * 36 | 0) + 4 >> 2];
        l = +g[h + (b * 36 | 0) + 8 >> 2];
        m = +g[h + (b * 36 | 0) + 12 >> 2];
        n = c[h + (e * 36 | 0) + 24 >> 2] | 0;
        a:
        do if ((n | 0) == -1)
            o = e;
        else {
            p = n;
            q = e;
            while (1) {
                r = c[h + (q * 36 | 0) + 28 >> 2] | 0;
                s = +g[h + (q * 36 | 0) + 8 >> 2];
                t = +g[h + (q * 36 | 0) >> 2];
                u = +g[h + (q * 36 | 0) + 12 >> 2];
                v = +g[h + (q * 36 | 0) + 4 >> 2];
                w = ((s > l ? s : l) - (t < j ? t : j) + ((u > m ? u : m) - (v < k ? v : k))) * 2;
                x = w * 2;
                y = (w - (s - t + (u - v)) * 2) * 2;
                v = +g[h + (p * 36 | 0) >> 2];
                u = j < v ? j : v;
                t = +g[h + (p * 36 | 0) + 4 >> 2];
                s = k < t ? k : t;
                w = +g[h + (p * 36 | 0) + 8 >> 2];
                z = l > w ? l : w;
                A = +g[h + (p * 36 | 0) + 12 >> 2];
                B = m > A ? m : A;
                if ((c[h + (p * 36 | 0) + 24 >> 2] | 0) == -1)
                    C = (z - u + (B - s)) * 2;
                else
                    C =
                    (z - u + (B - s)) * 2 - (w - v + (A - t)) * 2;
                t = y + C;
                A = +g[h + (r * 36 | 0) >> 2];
                v = j < A ? j : A;
                w = +g[h + (r * 36 | 0) + 4 >> 2];
                s = k < w ? k : w;
                B = +g[h + (r * 36 | 0) + 8 >> 2];
                u = l > B ? l : B;
                z = +g[h + (r * 36 | 0) + 12 >> 2];
                D = m > z ? m : z;
                if ((c[h + (r * 36 | 0) + 24 >> 2] | 0) == -1)
                    E = (u - v + (D - s)) * 2;
                else
                    E = (u - v + (D - s)) * 2 - (B - A + (z - w)) * 2;
                w = y + E;
                if (x < t & x < w) {
                    o = q;
                    break a
                }
                F = t < w ? p : r;
                p = c[h + (F * 36 | 0) + 24 >> 2] | 0;
                if ((p | 0) == -1) {
                    o = F;
                    break
                } else
                    q = F
            }
        }
        while (0);
        e = c[h + (o * 36 | 0) + 20 >> 2] | 0;
        h = Xe(a) | 0;
        n = c[f >> 2] | 0;
        c[n + (h * 36 | 0) + 20 >> 2] = e;
        c[n + (h * 36 | 0) + 16 >> 2] = 0;
        n = c[f >> 2] | 0;
        E = +g[n + (o * 36 | 0) >> 2];
        C = +g[n + (o * 36 | 0) + 4 >> 2];
        w = +(j < E ?
        j : E);
        E = +(k < C ? k : C);
        q = n + (h * 36 | 0) | 0;
        g[q >> 2] = w;
        g[q + 4 >> 2] = E;
        E = +g[n + (o * 36 | 0) + 8 >> 2];
        w = +g[n + (o * 36 | 0) + 12 >> 2];
        C = +(l > E ? l : E);
        E = +(m > w ? m : w);
        q = n + (h * 36 | 0) + 8 | 0;
        g[q >> 2] = C;
        g[q + 4 >> 2] = E;
        q = c[f >> 2] | 0;
        c[q + (h * 36 | 0) + 32 >> 2] = (c[q + (o * 36 | 0) + 32 >> 2] | 0) + 1;
        if ((e | 0) == -1) {
            c[q + (h * 36 | 0) + 24 >> 2] = o;
            c[q + (h * 36 | 0) + 28 >> 2] = b;
            c[q + (o * 36 | 0) + 20 >> 2] = h;
            n = q + (b * 36 | 0) + 20 | 0;
            c[n >> 2] = h;
            c[a >> 2] = h;
            G = c[n >> 2] | 0
        } else {
            n = q + (e * 36 | 0) + 24 | 0;
            if ((c[n >> 2] | 0) == (o | 0))
                c[n >> 2] = h;
            else
                c[q + (e * 36 | 0) + 28 >> 2] = h;
            c[q + (h * 36 | 0) + 24 >> 2] = o;
            c[q + (h * 36 | 0) + 28 >> 2] = b;
            c[q + (o * 36 | 0) + 20 >> 2] = h;
            c[q + (b * 36 | 0) + 20 >> 2] = h;
            G = h
        }
        if ((G | 0) == -1) {
            i = d;
            return
        } else
            H = G;
        do {
            G = bf(a, H) | 0;
            h = c[f >> 2] | 0;
            b = c[h + (G * 36 | 0) + 24 >> 2] | 0;
            q = c[h + (G * 36 | 0) + 28 >> 2] | 0;
            o = c[h + (b * 36 | 0) + 32 >> 2] | 0;
            e = c[h + (q * 36 | 0) + 32 >> 2] | 0;
            c[h + (G * 36 | 0) + 32 >> 2] = ((o | 0) > (e | 0) ? o : e) + 1;
            E = +g[h + (b * 36 | 0) >> 2];
            C = +g[h + (q * 36 | 0) >> 2];
            w = +g[h + (b * 36 | 0) + 4 >> 2];
            m = +g[h + (q * 36 | 0) + 4 >> 2];
            l = +(E < C ? E : C);
            C = +(w < m ? w : m);
            e = h + (G * 36 | 0) | 0;
            g[e >> 2] = l;
            g[e + 4 >> 2] = C;
            C = +g[h + (b * 36 | 0) + 8 >> 2];
            l = +g[h + (q * 36 | 0) + 8 >> 2];
            m = +g[h + (b * 36 | 0) + 12 >> 2];
            w = +g[h + (q * 36 | 0) + 12 >> 2];
            E = +(C > l ? C : l);
            l = +(m > w ? m : w);
            q = h + (G * 36 | 0) + 8 |
            0;
            g[q >> 2] = E;
            g[q + 4 >> 2] = l;
            H = c[(c[f >> 2] | 0) + (G * 36 | 0) + 20 >> 2] | 0
        } while (!((H | 0) == -1));
        i = d;
        return
    }
    function _e(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0;
        d = i;
        $e(a, b);
        e = a + 16 | 0;
        f = c[a + 4 >> 2] | 0;
        c[f + (b * 36 | 0) + 20 >> 2] = c[e >> 2];
        c[f + (b * 36 | 0) + 32 >> 2] = -1;
        c[e >> 2] = b;
        b = a + 8 | 0;
        c[b >> 2] = (c[b >> 2] | 0) + -1;
        i = d;
        return
    }
    function $e(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0;
        d = i;
        if ((c[a >> 2] | 0) == (b | 0)) {
            c[a >> 2] = -1;
            i = d;
            return
        }
        e = a + 4 | 0;
        f = c[e >> 2] | 0;
        h = c[f + (b * 36 | 0) + 20 >> 2] | 0;
        j = f + (h * 36 | 0) + 20 | 0;
        k = c[j >> 2] | 0;
        l = c[f + (h * 36 | 0) + 24 >> 2] |
        0;
        if ((l | 0) == (b | 0))
            m = c[f + (h * 36 | 0) + 28 >> 2] | 0;
        else
            m = l;
        if ((k | 0) == -1) {
            c[a >> 2] = m;
            c[f + (m * 36 | 0) + 20 >> 2] = -1;
            l = a + 16 | 0;
            c[j >> 2] = c[l >> 2];
            c[f + (h * 36 | 0) + 32 >> 2] = -1;
            c[l >> 2] = h;
            l = a + 8 | 0;
            c[l >> 2] = (c[l >> 2] | 0) + -1;
            i = d;
            return
        }
        l = f + (k * 36 | 0) + 24 | 0;
        if ((c[l >> 2] | 0) == (h | 0))
            c[l >> 2] = m;
        else
            c[f + (k * 36 | 0) + 28 >> 2] = m;
        c[f + (m * 36 | 0) + 20 >> 2] = k;
        m = a + 16 | 0;
        c[j >> 2] = c[m >> 2];
        c[f + (h * 36 | 0) + 32 >> 2] = -1;
        c[m >> 2] = h;
        h = a + 8 | 0;
        c[h >> 2] = (c[h >> 2] | 0) + -1;
        h = k;
        do {
            k = bf(a, h) | 0;
            m = c[e >> 2] | 0;
            f = c[m + (k * 36 | 0) + 24 >> 2] | 0;
            j = c[m + (k * 36 | 0) + 28 >> 2] | 0;
            n = +g[m + (f * 36 | 0) >> 2];
            o = +g[m + (j * 36 | 0) >>
            2];
            p = +g[m + (f * 36 | 0) + 4 >> 2];
            q = +g[m + (j * 36 | 0) + 4 >> 2];
            r = +(n < o ? n : o);
            o = +(p < q ? p : q);
            l = m + (k * 36 | 0) | 0;
            g[l >> 2] = r;
            g[l + 4 >> 2] = o;
            o = +g[m + (f * 36 | 0) + 8 >> 2];
            r = +g[m + (j * 36 | 0) + 8 >> 2];
            q = +g[m + (f * 36 | 0) + 12 >> 2];
            p = +g[m + (j * 36 | 0) + 12 >> 2];
            n = +(o > r ? o : r);
            r = +(q > p ? q : p);
            l = m + (k * 36 | 0) + 8 | 0;
            g[l >> 2] = n;
            g[l + 4 >> 2] = r;
            l = c[e >> 2] | 0;
            m = c[l + (f * 36 | 0) + 32 >> 2] | 0;
            f = c[l + (j * 36 | 0) + 32 >> 2] | 0;
            c[l + (k * 36 | 0) + 32 >> 2] = ((m | 0) > (f | 0) ? m : f) + 1;
            h = c[l + (k * 36 | 0) + 20 >> 2] | 0
        } while (!((h | 0) == -1));
        i = d;
        return
    }
    function af(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0;
        f = i;
        h = a + 4 | 0;
        j = c[h >> 2] | 0;
        if (((+g[j + (b * 36 | 0) >> 2] <= +g[d >> 2] ? +g[j + (b * 36 | 0) + 4 >> 2] <= +g[d + 4 >> 2] : 0) ? +g[d + 8 >> 2] <= +g[j + (b * 36 | 0) + 8 >> 2] : 0) ? +g[d + 12 >> 2] <= +g[j + (b * 36 | 0) + 12 >> 2] : 0) {
            k = 0;
            i = f;
            return k | 0
        }
        $e(a, b);
        j = d;
        l = +g[j >> 2];
        m = +g[j + 4 >> 2];
        j = d + 8 | 0;
        n = +g[j >> 2];
        o = l + -.10000000149011612;
        l = m + -.10000000149011612;
        m = n + .10000000149011612;
        n = +g[j + 4 >> 2] + .10000000149011612;
        p = +g[e >> 2] * 2;
        q = +g[e + 4 >> 2] * 2;
        if (p < 0) {
            r = o + p;
            s = m
        } else {
            r = o;
            s = p + m
        }
        if (q < 0) {
            t = l + q;
            u = n
        } else {
            t = l;
            u = q + n
        }
        e = c[h >> 2] | 0;
        n = +r;
        r = +t;
        h = e + (b * 36 | 0) | 0;
        g[h >>
        2] = n;
        g[h + 4 >> 2] = r;
        r = +s;
        s = +u;
        h = e + (b * 36 | 0) + 8 | 0;
        g[h >> 2] = r;
        g[h + 4 >> 2] = s;
        Ze(a, b);
        k = 1;
        i = f;
        return k | 0
    }
    function bf(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0;
        d = i;
        e = c[a + 4 >> 2] | 0;
        f = e + (b * 36 | 0) | 0;
        h = e + (b * 36 | 0) + 24 | 0;
        j = c[h >> 2] | 0;
        if ((j | 0) == -1) {
            k = b;
            i = d;
            return k | 0
        }
        l = e + (b * 36 | 0) + 32 | 0;
        if ((c[l >> 2] | 0) < 2) {
            k = b;
            i = d;
            return k | 0
        }
        m = e + (b * 36 | 0) + 28 | 0;
        n = c[m >> 2] | 0;
        o = e + (j * 36 | 0) | 0;
        p = e + (n * 36 | 0) | 0;
        q = e + (n * 36 | 0) + 32 | 0;
        r = e + (j * 36 | 0) + 32 | 0;
        s = (c[q >> 2] | 0) - (c[r >> 2] | 0) | 0;
        if ((s | 0) > 1) {
            t = e + (n * 36 | 0) + 24 | 0;
            u = c[t >> 2] | 0;
            v = e + (n * 36 | 0) + 28 | 0;
            w = c[v >> 2] | 0;
            x = e + (u * 36 | 0) | 0;
            y = e + (w * 36 | 0) | 0;
            c[t >> 2] = b;
            t = e + (b * 36 | 0) + 20 | 0;
            z = e + (n * 36 | 0) + 20 | 0;
            c[z >> 2] = c[t >> 2];
            c[t >> 2] = n;
            t = c[z >> 2] | 0;
            do if (!((t | 0) == -1)) {
                z = e + (t * 36 | 0) + 24 | 0;
                if ((c[z >> 2] | 0) == (b | 0)) {
                    c[z >> 2] = n;
                    break
                } else {
                    c[e + (t * 36 | 0) + 28 >> 2] = n;
                    break
                }
            } else
                c[a >> 2] = n;
            while (0);
            t = e + (u * 36 | 0) + 32 | 0;
            z = e + (w * 36 | 0) + 32 | 0;
            if ((c[t >> 2] | 0) > (c[z >> 2] | 0)) {
                c[v >> 2] = u;
                c[m >> 2] = w;
                c[e + (w * 36 | 0) + 20 >> 2] = b;
                A = +g[o >> 2];
                B = +g[y >> 2];
                C = A < B ? A : B;
                B = +g[e + (j * 36 | 0) +
                4 >> 2];
                A = +g[e + (w * 36 | 0) + 4 >> 2];
                D = +C;
                E = +(B < A ? B : A);
                F = f;
                g[F >> 2] = D;
                g[F + 4 >> 2] = E;
                E = +g[e + (j * 36 | 0) + 8 >> 2];
                D = +g[e + (w * 36 | 0) + 8 >> 2];
                A = +g[e + (j * 36 | 0) + 12 >> 2];
                B = +g[e + (w * 36 | 0) + 12 >> 2];
                G = +(E > D ? E : D);
                D = +(A > B ? A : B);
                F = e + (b * 36 | 0) + 8 | 0;
                g[F >> 2] = G;
                g[F + 4 >> 2] = D;
                D = +g[x >> 2];
                G = +g[e + (b * 36 | 0) + 4 >> 2];
                B = +g[e + (u * 36 | 0) + 4 >> 2];
                A = +(C < D ? C : D);
                D = +(G < B ? G : B);
                F = p;
                g[F >> 2] = A;
                g[F + 4 >> 2] = D;
                D = +g[e + (b * 36 | 0) + 8 >> 2];
                A = +g[e + (u * 36 | 0) + 8 >> 2];
                B = +g[e + (b * 36 | 0) + 12 >> 2];
                G = +g[e + (u * 36 | 0) + 12 >> 2];
                C = +(D > A ? D : A);
                A = +(B > G ? B : G);
                F = e + (n * 36 | 0) + 8 | 0;
                g[F >> 2] = C;
                g[F + 4 >> 2] = A;
                F = c[r >> 2] | 0;
                H = c[z >> 2] | 0;
                I = ((F | 0) > (H | 0) ? F : H) + 1 | 0;
                c[l >> 2] = I;
                H = c[t >> 2] | 0;
                J = (I | 0) > (H | 0) ? I : H
            } else {
                c[v >> 2] = w;
                c[m >> 2] = u;
                c[e + (u * 36 | 0) + 20 >> 2] = b;
                A = +g[o >> 2];
                C = +g[x >> 2];
                G = A < C ? A : C;
                C = +g[e + (j * 36 | 0) + 4 >> 2];
                A = +g[e + (u * 36 | 0) + 4 >> 2];
                B = +G;
                D = +(C < A ? C : A);
                x = f;
                g[x >> 2] = B;
                g[x + 4 >> 2] = D;
                D = +g[e + (j * 36 | 0) + 8 >> 2];
                B = +g[e + (u * 36 | 0) + 8 >> 2];
                A = +g[e + (j * 36 | 0) + 12 >> 2];
                C = +g[e + (u * 36 | 0) + 12 >> 2];
                E = +(D > B ? D : B);
                B = +(A > C ? A : C);
                u = e + (b * 36 | 0) + 8 | 0;
                g[u >> 2] = E;
                g[u + 4 >> 2] = B;
                B = +g[y >> 2];
                E = +g[e + (b * 36 | 0) + 4 >> 2];
                C = +g[e + (w * 36 | 0) + 4 >> 2];
                A = +(G < B ? G : B);
                B = +(E < C ? E : C);
                y = p;
                g[y >> 2] = A;
                g[y + 4 >> 2] =
                B;
                B = +g[e + (b * 36 | 0) + 8 >> 2];
                A = +g[e + (w * 36 | 0) + 8 >> 2];
                C = +g[e + (b * 36 | 0) + 12 >> 2];
                E = +g[e + (w * 36 | 0) + 12 >> 2];
                G = +(B > A ? B : A);
                A = +(C > E ? C : E);
                w = e + (n * 36 | 0) + 8 | 0;
                g[w >> 2] = G;
                g[w + 4 >> 2] = A;
                w = c[r >> 2] | 0;
                y = c[t >> 2] | 0;
                t = ((w | 0) > (y | 0) ? w : y) + 1 | 0;
                c[l >> 2] = t;
                y = c[z >> 2] | 0;
                J = (t | 0) > (y | 0) ? t : y
            }
            c[q >> 2] = J + 1;
            k = n;
            i = d;
            return k | 0
        }
        if (!((s | 0) < -1)) {
            k = b;
            i = d;
            return k | 0
        }
        s = e + (j * 36 | 0) + 24 | 0;
        J = c[s >> 2] | 0;
        y = e + (j * 36 | 0) + 28 | 0;
        t = c[y >> 2] | 0;
        z = e + (J * 36 | 0) | 0;
        w = e + (t * 36 | 0) | 0;
        c[s >> 2] = b;
        s = e + (b * 36 | 0) + 20 | 0;
        u = e + (j * 36 | 0) + 20 | 0;
        c[u >> 2] = c[s >> 2];
        c[s >> 2] = j;
        s = c[u >> 2] | 0;
        do if (!((s | 0) == -1)) {
            u =
            e + (s * 36 | 0) + 24 | 0;
            if ((c[u >> 2] | 0) == (b | 0)) {
                c[u >> 2] = j;
                break
            } else {
                c[e + (s * 36 | 0) + 28 >> 2] = j;
                break
            }
        } else
            c[a >> 2] = j;
        while (0);
        a = e + (J * 36 | 0) + 32 | 0;
        s = e + (t * 36 | 0) + 32 | 0;
        if ((c[a >> 2] | 0) > (c[s >> 2] | 0)) {
            c[y >> 2] = J;
            c[h >> 2] = t;
            c[e + (t * 36 | 0) + 20 >> 2] = b;
            A = +g[p >> 2];
            G = +g[w >> 2];
            E = A < G ? A : G;
            G = +g[e + (n * 36 | 0) + 4 >> 2];
            A = +g[e + (t * 36 | 0) + 4 >> 2];
            C = +E;
            B = +(G < A ? G : A);
            u = f;
            g[u >> 2] = C;
            g[u + 4 >> 2] = B;
            B = +g[e + (n * 36 | 0) + 8 >> 2];
            C = +g[e + (t * 36 | 0) + 8 >> 2];
            A = +g[e + (n * 36 | 0) + 12 >> 2];
            G = +g[e + (t * 36 | 0) + 12 >> 2];
            D = +(B > C ? B : C);
            C = +(A > G ? A : G);
            u = e + (b * 36 | 0) + 8 | 0;
            g[u >> 2] = D;
            g[u + 4 >> 2] = C;
            C = +g[z >>
            2];
            D = +g[e + (b * 36 | 0) + 4 >> 2];
            G = +g[e + (J * 36 | 0) + 4 >> 2];
            A = +(E < C ? E : C);
            C = +(D < G ? D : G);
            u = o;
            g[u >> 2] = A;
            g[u + 4 >> 2] = C;
            C = +g[e + (b * 36 | 0) + 8 >> 2];
            A = +g[e + (J * 36 | 0) + 8 >> 2];
            G = +g[e + (b * 36 | 0) + 12 >> 2];
            D = +g[e + (J * 36 | 0) + 12 >> 2];
            E = +(C > A ? C : A);
            A = +(G > D ? G : D);
            u = e + (j * 36 | 0) + 8 | 0;
            g[u >> 2] = E;
            g[u + 4 >> 2] = A;
            u = c[q >> 2] | 0;
            x = c[s >> 2] | 0;
            m = ((u | 0) > (x | 0) ? u : x) + 1 | 0;
            c[l >> 2] = m;
            x = c[a >> 2] | 0;
            K = (m | 0) > (x | 0) ? m : x
        } else {
            c[y >> 2] = t;
            c[h >> 2] = J;
            c[e + (J * 36 | 0) + 20 >> 2] = b;
            A = +g[p >> 2];
            E = +g[z >> 2];
            D = A < E ? A : E;
            E = +g[e + (n * 36 | 0) + 4 >> 2];
            A = +g[e + (J * 36 | 0) + 4 >> 2];
            G = +D;
            C = +(E < A ? E : A);
            z = f;
            g[z >> 2] = G;
            g[z +
            4 >> 2] = C;
            C = +g[e + (n * 36 | 0) + 8 >> 2];
            G = +g[e + (J * 36 | 0) + 8 >> 2];
            A = +g[e + (n * 36 | 0) + 12 >> 2];
            E = +g[e + (J * 36 | 0) + 12 >> 2];
            B = +(C > G ? C : G);
            G = +(A > E ? A : E);
            J = e + (b * 36 | 0) + 8 | 0;
            g[J >> 2] = B;
            g[J + 4 >> 2] = G;
            G = +g[w >> 2];
            B = +g[e + (b * 36 | 0) + 4 >> 2];
            E = +g[e + (t * 36 | 0) + 4 >> 2];
            A = +(D < G ? D : G);
            G = +(B < E ? B : E);
            w = o;
            g[w >> 2] = A;
            g[w + 4 >> 2] = G;
            G = +g[e + (b * 36 | 0) + 8 >> 2];
            A = +g[e + (t * 36 | 0) + 8 >> 2];
            E = +g[e + (b * 36 | 0) + 12 >> 2];
            B = +g[e + (t * 36 | 0) + 12 >> 2];
            D = +(G > A ? G : A);
            A = +(E > B ? E : B);
            t = e + (j * 36 | 0) + 8 | 0;
            g[t >> 2] = D;
            g[t + 4 >> 2] = A;
            t = c[q >> 2] | 0;
            q = c[a >> 2] | 0;
            a = ((t | 0) > (q | 0) ? t : q) + 1 | 0;
            c[l >> 2] = a;
            l = c[s >> 2] | 0;
            K = (a | 0) >
            (l | 0) ? a : l
        }
        c[r >> 2] = K + 1;
        k = j;
        i = d;
        return k | 0
    }
    function cf(b, d, e, f, h) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        var j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0;
        j = i;
        l = b + 60 | 0;
        c[l >> 2] = 0;
        m = f + 12 | 0;
        n = +g[h + 12 >> 2];
        o = +g[m >> 2];
        p = +g[h + 8 >> 2];
        q = +g[f + 16 >> 2];
        r = +g[h >> 2] + (n * o - p * q) - +g[e >> 2];
        s = o * p + n * q + +g[h + 4 >> 2] - +g[e + 4 >> 2];
        q = +g[e + 12 >> 2];
        n = +g[e + 8 >> 2];
        p = r * q + s * n;
        o = q * s - r * n;
        e = d + 12 | 0;
        h = c[e >> 2] | 0;
        t = c[e + 4 >> 2] | 0;
        n = (c[k >> 2] = h, +g[k >> 2]);
        r = (c[k >> 2] = t, +g[k >> 2]);
        e = d + 20 | 0;
        u = c[e >> 2] | 0;
        v = c[e + 4 >> 2] | 0;
        s = (c[k >> 2] = u, +g[k >> 2]);
        q = (c[k >> 2] = v, +g[k >> 2]);
        w = s - n;
        x = q - r;
        y = w * (s - p) + x * (q - o);
        z = p - n;
        A = o - r;
        B = z * w + A * x;
        C = +g[d + 8 >> 2] + +g[f + 8 >> 2];
        if (B <= 0) {
            if (z * z + A * A > C * C) {
                i = j;
                return
            }
            if ((a[d + 44 >> 0] | 0) != 0 ? (f = d + 28 | 0, D = +g[f >> 2], (n - p) * (n - D) + (r - o) * (r - +g[f + 4 >> 2]) > 0) : 0) {
                i = j;
                return
            }
            c[l >> 2] = 1;
            c[b + 56 >> 2] = 0;
            g[b + 40 >> 2] = 0;
            g[b + 44 >> 2] = 0;
            f = b + 48 | 0;
            c[f >> 2] = h;
            c[f + 4 >> 2] = t;
            f = b + 16 | 0;
            c[f >> 2] = 0;
            a[f >> 0] = 0;
            a[f + 1 >> 0] = 0;
            a[f + 2 >> 0] = 0;
            a[f + 3 >> 0] = 0;
            f = m;
            e = c[f + 4 >> 2] | 0;
            E = b;
            c[E >> 2] = c[f >> 2];
            c[E + 4 >> 2] = e;
            i = j;
            return
        }
        if (y <= 0) {
            D = p - s;
            F = o - q;
            if (D * D + F *
            F > C * C) {
                i = j;
                return
            }
            if ((a[d + 45 >> 0] | 0) != 0 ? (e = d + 36 | 0, G = +g[e >> 2], D * (G - s) + F * (+g[e + 4 >> 2] - q) > 0) : 0) {
                i = j;
                return
            }
            c[l >> 2] = 1;
            c[b + 56 >> 2] = 0;
            g[b + 40 >> 2] = 0;
            g[b + 44 >> 2] = 0;
            e = b + 48 | 0;
            c[e >> 2] = u;
            c[e + 4 >> 2] = v;
            v = b + 16 | 0;
            c[v >> 2] = 0;
            a[v >> 0] = 1;
            a[v + 1 >> 0] = 0;
            a[v + 2 >> 0] = 0;
            a[v + 3 >> 0] = 0;
            v = m;
            e = c[v + 4 >> 2] | 0;
            u = b;
            c[u >> 2] = c[v >> 2];
            c[u + 4 >> 2] = e;
            i = j;
            return
        }
        F = 1 / (w * w + x * x);
        G = p - (n * y + s * B) * F;
        s = o - (r * y + q * B) * F;
        if (G * G + s * s > C * C) {
            i = j;
            return
        }
        C = -x;
        if (w * A + z * C < 0) {
            H = x;
            I = -w
        } else {
            H = C;
            I = w
        }
        w = +Q(+(I * I + H * H));
        if (w < 1.1920928955078125E-7) {
            J = H;
            K = I
        } else {
            C = 1 / w;
            J = H * C;
            K = I * C
        }
        c[l >>
        2] = 1;
        c[b + 56 >> 2] = 1;
        C = +J;
        J = +K;
        l = b + 40 | 0;
        g[l >> 2] = C;
        g[l + 4 >> 2] = J;
        l = b + 48 | 0;
        c[l >> 2] = h;
        c[l + 4 >> 2] = t;
        t = b + 16 | 0;
        c[t >> 2] = 0;
        a[t >> 0] = 0;
        a[t + 1 >> 0] = 0;
        a[t + 2 >> 0] = 1;
        a[t + 3 >> 0] = 0;
        t = m;
        m = c[t + 4 >> 2] | 0;
        l = b;
        c[l >> 2] = c[t >> 2];
        c[l + 4 >> 2] = m;
        i = j;
        return
    }
    function df(b, d, e, f, h, j) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        j = j | 0;
        var l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka =
            0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Da = 0,
            Ea = 0;
        l = i;
        i = i + 144 | 0;
        m = l + 128 | 0;
        n = l + 24 | 0;
        o = l + 72 | 0;
        p = l + 48 | 0;
        q = l;
        r = b + 132 | 0;
        s = +g[f + 12 >> 2];
        t = +g[j + 8 >> 2];
        u = +g[f + 8 >> 2];
        v = +g[j + 12 >> 2];
        w = s * t - u * v;
        x = t * u + s * v;
        v = +w;
        t = +x;
        y = +g[j >> 2] - +g[f >> 2];
        z = +g[j + 4 >> 2] - +g[f + 4 >> 2];
        A = s * y + u * z;
        B = s * z - u * y;
        y = +A;
        u = +B;
        f = r;
        g[f >> 2] = y;
        g[f + 4 >> 2] = u;
        f = b + 140 | 0;
        g[f >> 2] = v;
        g[f + 4 >> 2] = t;
        f = b + 144 | 0;
        t = +g[h + 12 >> 2];
        j = b + 140 | 0;
        v = +g[h + 16 >> 2];
        u = A + (x * t - w * v);
        C = b + 136 | 0;
        A = t * w + x * v + B;
        B = +u;
        v = +A;
        D = b + 148 | 0;
        g[D >> 2] = B;
        g[D +
        4 >> 2] = v;
        D = e + 28 | 0;
        E = c[D >> 2] | 0;
        F = c[D + 4 >> 2] | 0;
        D = b + 156 | 0;
        c[D >> 2] = E;
        c[D + 4 >> 2] = F;
        D = b + 164 | 0;
        G = e + 12 | 0;
        H = c[G >> 2] | 0;
        I = c[G + 4 >> 2] | 0;
        G = D;
        c[G >> 2] = H;
        c[G + 4 >> 2] = I;
        G = b + 172 | 0;
        J = e + 20 | 0;
        K = c[J >> 2] | 0;
        L = c[J + 4 >> 2] | 0;
        J = G;
        c[J >> 2] = K;
        c[J + 4 >> 2] = L;
        J = e + 36 | 0;
        M = c[J >> 2] | 0;
        N = c[J + 4 >> 2] | 0;
        J = b + 180 | 0;
        c[J >> 2] = M;
        c[J + 4 >> 2] = N;
        J = (a[e + 44 >> 0] | 0) != 0;
        O = (a[e + 45 >> 0] | 0) != 0;
        v = (c[k >> 2] = K, +g[k >> 2]);
        B = (c[k >> 2] = H, +g[k >> 2]);
        x = v - B;
        w = (c[k >> 2] = L, +g[k >> 2]);
        L = b + 168 | 0;
        t = (c[k >> 2] = I, +g[k >> 2]);
        y = w - t;
        z = +Q(+(x * x + y * y));
        s = (c[k >> 2] = E, +g[k >> 2]);
        P = (c[k >> 2] = F, +g[k >> 2]);
        R = (c[k >> 2] = M, +g[k >> 2]);
        S = (c[k >> 2] = N, +g[k >> 2]);
        if (z < 1.1920928955078125E-7) {
            T = x;
            U = y
        } else {
            V = 1 / z;
            T = x * V;
            U = y * V
        }
        N = b + 196 | 0;
        V = -T;
        g[N >> 2] = U;
        M = b + 200 | 0;
        g[M >> 2] = V;
        y = (u - B) * U + (A - t) * V;
        if (J) {
            V = B - s;
            B = t - P;
            t = +Q(+(V * V + B * B));
            if (t < 1.1920928955078125E-7) {
                W = V;
                X = B
            } else {
                x = 1 / t;
                W = V * x;
                X = B * x
            }
            x = -W;
            g[b + 188 >> 2] = X;
            g[b + 192 >> 2] = x;
            Y = U * W - T * X >= 0;
            Z = (u - s) * X + (A - P) * x
        } else {
            Y = 0;
            Z = 0
        }
        a:
        do if (!O) {
            if (!J) {
                F = y >= 0;
                a[b + 248 >> 0] = F & 1;
                E = b + 212 | 0;
                if (F) {
                    _ = E;
                    $ = 64;
                    break
                } else {
                    aa = E;
                    $ = 65;
                    break
                }
            }
            E = Z >= 0;
            if (Y) {
                if (!E) {
                    F = y >= 0;
                    a[b + 248 >> 0] = F & 1;
                    I = b + 212 | 0;
                    if (F)
                        ba = I;
                    else {
                        x =
                        +-U;
                        P = +T;
                        F = I;
                        g[F >> 2] = x;
                        g[F + 4 >> 2] = P;
                        F = N;
                        I = c[F >> 2] | 0;
                        H = c[F + 4 >> 2] | 0;
                        F = b + 228 | 0;
                        c[F >> 2] = I;
                        c[F + 4 >> 2] = H;
                        H = b + 236 | 0;
                        g[H >> 2] = -(c[k >> 2] = I, +g[k >> 2]);
                        g[H + 4 >> 2] = P;
                        break
                    }
                } else {
                    a[b + 248 >> 0] = 1;
                    ba = b + 212 | 0
                }
                H = N;
                I = c[H + 4 >> 2] | 0;
                F = ba;
                c[F >> 2] = c[H >> 2];
                c[F + 4 >> 2] = I;
                I = b + 188 | 0;
                F = c[I + 4 >> 2] | 0;
                H = b + 228 | 0;
                c[H >> 2] = c[I >> 2];
                c[H + 4 >> 2] = F;
                P = +-+g[N >> 2];
                x = +-+g[M >> 2];
                F = b + 236 | 0;
                g[F >> 2] = P;
                g[F + 4 >> 2] = x;
                break
            } else {
                if (E) {
                    E = y >= 0;
                    a[b + 248 >> 0] = E & 1;
                    F = b + 212 | 0;
                    if (E) {
                        E = N;
                        H = c[E >> 2] | 0;
                        I = c[E + 4 >> 2] | 0;
                        E = F;
                        c[E >> 2] = H;
                        c[E + 4 >> 2] = I;
                        E = b + 228 | 0;
                        c[E >> 2] = H;
                        c[E + 4 >> 2] = I;
                        x = +-(c[k >> 2] = H, +g[k >> 2]);
                        P = +T;
                        H = b + 236 | 0;
                        g[H >> 2] = x;
                        g[H + 4 >> 2] = P;
                        break
                    } else
                        ca = F
                } else {
                    a[b + 248 >> 0] = 0;
                    ca = b + 212 | 0
                }
                P = +-U;
                x = +T;
                F = ca;
                g[F >> 2] = P;
                g[F + 4 >> 2] = x;
                F = N;
                H = c[F + 4 >> 2] | 0;
                I = b + 228 | 0;
                c[I >> 2] = c[F >> 2];
                c[I + 4 >> 2] = H;
                x = +-+g[b + 188 >> 2];
                P = +-+g[b + 192 >> 2];
                H = b + 236 | 0;
                g[H >> 2] = x;
                g[H + 4 >> 2] = P;
                break
            }
        } else {
            P = R - v;
            x = S - w;
            X = +Q(+(P * P + x * x));
            if (X < 1.1920928955078125E-7) {
                da = P;
                ea = x
            } else {
                s = 1 / X;
                da = P * s;
                ea = x * s
            }
            s = -da;
            H = b + 204 | 0;
            g[H >> 2] = ea;
            I = b + 208 | 0;
            g[I >> 2] = s;
            F = T * ea - U * da > 0;
            x = (u - v) * ea + (A - w) * s;
            if (!J) {
                E = y >= 0;
                if (!O) {
                    a[b + 248 >> 0] = E & 1;
                    K = b + 212 | 0;
                    if (E) {
                        _ =
                        K;
                        $ = 64;
                        break
                    } else {
                        aa = K;
                        $ = 65;
                        break
                    }
                }
                if (F) {
                    if (!E) {
                        K = x >= 0;
                        a[b + 248 >> 0] = K & 1;
                        e = b + 212 | 0;
                        if (K)
                            fa = e;
                        else {
                            s = +-U;
                            P = +T;
                            K = e;
                            g[K >> 2] = s;
                            g[K + 4 >> 2] = P;
                            K = b + 228 | 0;
                            g[K >> 2] = s;
                            g[K + 4 >> 2] = P;
                            K = N;
                            e = c[K + 4 >> 2] | 0;
                            ga = b + 236 | 0;
                            c[ga >> 2] = c[K >> 2];
                            c[ga + 4 >> 2] = e;
                            break
                        }
                    } else {
                        a[b + 248 >> 0] = 1;
                        fa = b + 212 | 0
                    }
                    e = N;
                    ga = c[e + 4 >> 2] | 0;
                    K = fa;
                    c[K >> 2] = c[e >> 2];
                    c[K + 4 >> 2] = ga;
                    P = +-+g[N >> 2];
                    s = +-+g[M >> 2];
                    ga = b + 228 | 0;
                    g[ga >> 2] = P;
                    g[ga + 4 >> 2] = s;
                    ga = b + 204 | 0;
                    K = c[ga + 4 >> 2] | 0;
                    e = b + 236 | 0;
                    c[e >> 2] = c[ga >> 2];
                    c[e + 4 >> 2] = K;
                    break
                } else {
                    if (E) {
                        E = x >= 0;
                        a[b + 248 >> 0] = E & 1;
                        K = b + 212 | 0;
                        if (E) {
                            E = N;
                            e =
                            c[E >> 2] | 0;
                            ga = c[E + 4 >> 2] | 0;
                            E = K;
                            c[E >> 2] = e;
                            c[E + 4 >> 2] = ga;
                            s = +-(c[k >> 2] = e, +g[k >> 2]);
                            P = +T;
                            E = b + 228 | 0;
                            g[E >> 2] = s;
                            g[E + 4 >> 2] = P;
                            E = b + 236 | 0;
                            c[E >> 2] = e;
                            c[E + 4 >> 2] = ga;
                            break
                        } else
                            ha = K
                    } else {
                        a[b + 248 >> 0] = 0;
                        ha = b + 212 | 0
                    }
                    P = +-U;
                    s = +T;
                    K = ha;
                    g[K >> 2] = P;
                    g[K + 4 >> 2] = s;
                    s = +-+g[b + 204 >> 2];
                    P = +-+g[b + 208 >> 2];
                    K = b + 228 | 0;
                    g[K >> 2] = s;
                    g[K + 4 >> 2] = P;
                    K = N;
                    ga = c[K + 4 >> 2] | 0;
                    E = b + 236 | 0;
                    c[E >> 2] = c[K >> 2];
                    c[E + 4 >> 2] = ga;
                    break
                }
            }
            if (Y & F) {
                if (!(Z >= 0) & !(y >= 0)) {
                    ga = x >= 0;
                    a[b + 248 >> 0] = ga & 1;
                    E = b + 212 | 0;
                    if (ga)
                        ia = E;
                    else {
                        P = +-U;
                        s = +T;
                        ga = E;
                        g[ga >> 2] = P;
                        g[ga + 4 >> 2] = s;
                        ga = b + 228 | 0;
                        g[ga >> 2] =
                        P;
                        g[ga + 4 >> 2] = s;
                        ga = b + 236 | 0;
                        g[ga >> 2] = P;
                        g[ga + 4 >> 2] = s;
                        break
                    }
                } else {
                    a[b + 248 >> 0] = 1;
                    ia = b + 212 | 0
                }
                ga = N;
                E = c[ga + 4 >> 2] | 0;
                K = ia;
                c[K >> 2] = c[ga >> 2];
                c[K + 4 >> 2] = E;
                E = b + 188 | 0;
                K = c[E + 4 >> 2] | 0;
                ga = b + 228 | 0;
                c[ga >> 2] = c[E >> 2];
                c[ga + 4 >> 2] = K;
                K = b + 204 | 0;
                ga = c[K + 4 >> 2] | 0;
                E = b + 236 | 0;
                c[E >> 2] = c[K >> 2];
                c[E + 4 >> 2] = ga;
                break
            }
            if (Y) {
                do if (!(Z >= 0)) {
                    if (y >= 0) {
                        ga = x >= 0;
                        a[b + 248 >> 0] = ga & 1;
                        E = b + 212 | 0;
                        if (ga) {
                            ja = E;
                            break
                        } else
                            ka = E
                    } else {
                        a[b + 248 >> 0] = 0;
                        ka = b + 212 | 0
                    }
                    s = +-U;
                    P = +T;
                    E = ka;
                    g[E >> 2] = s;
                    g[E + 4 >> 2] = P;
                    P = +-+g[H >> 2];
                    s = +-+g[I >> 2];
                    E = b + 228 | 0;
                    g[E >> 2] = P;
                    g[E + 4 >> 2] = s;
                    s = +-+g[N >>
                    2];
                    P = +-+g[M >> 2];
                    E = b + 236 | 0;
                    g[E >> 2] = s;
                    g[E + 4 >> 2] = P;
                    break a
                } else {
                    a[b + 248 >> 0] = 1;
                    ja = b + 212 | 0
                }
                while (0);
                E = N;
                ga = c[E + 4 >> 2] | 0;
                K = ja;
                c[K >> 2] = c[E >> 2];
                c[K + 4 >> 2] = ga;
                ga = b + 188 | 0;
                K = c[ga + 4 >> 2] | 0;
                E = b + 228 | 0;
                c[E >> 2] = c[ga >> 2];
                c[E + 4 >> 2] = K;
                K = N;
                E = c[K + 4 >> 2] | 0;
                ga = b + 236 | 0;
                c[ga >> 2] = c[K >> 2];
                c[ga + 4 >> 2] = E;
                break
            }
            if (!F) {
                if (!(!(Z >= 0) | !(y >= 0))) {
                    E = x >= 0;
                    a[b + 248 >> 0] = E & 1;
                    ga = b + 212 | 0;
                    if (E) {
                        E = N;
                        K = c[E >> 2] | 0;
                        e = c[E + 4 >> 2] | 0;
                        E = ga;
                        c[E >> 2] = K;
                        c[E + 4 >> 2] = e;
                        E = b + 228 | 0;
                        c[E >> 2] = K;
                        c[E + 4 >> 2] = e;
                        E = b + 236 | 0;
                        c[E >> 2] = K;
                        c[E + 4 >> 2] = e;
                        break
                    } else
                        la = ga
                } else {
                    a[b + 248 >> 0] =
                    0;
                    la = b + 212 | 0
                }
                P = +-U;
                s = +T;
                ga = la;
                g[ga >> 2] = P;
                g[ga + 4 >> 2] = s;
                s = +-+g[H >> 2];
                P = +-+g[I >> 2];
                ga = b + 228 | 0;
                g[ga >> 2] = s;
                g[ga + 4 >> 2] = P;
                P = +-+g[b + 188 >> 2];
                s = +-+g[b + 192 >> 2];
                ga = b + 236 | 0;
                g[ga >> 2] = P;
                g[ga + 4 >> 2] = s;
                break
            }
            do if (!(x >= 0)) {
                if (Z >= 0) {
                    ga = y >= 0;
                    a[b + 248 >> 0] = ga & 1;
                    e = b + 212 | 0;
                    if (ga) {
                        ma = e;
                        break
                    } else
                        na = e
                } else {
                    a[b + 248 >> 0] = 0;
                    na = b + 212 | 0
                }
                s = +-U;
                P = +T;
                e = na;
                g[e >> 2] = s;
                g[e + 4 >> 2] = P;
                P = +-+g[N >> 2];
                s = +-+g[M >> 2];
                e = b + 228 | 0;
                g[e >> 2] = P;
                g[e + 4 >> 2] = s;
                s = +-+g[b + 188 >> 2];
                P = +-+g[b + 192 >> 2];
                e = b + 236 | 0;
                g[e >> 2] = s;
                g[e + 4 >> 2] = P;
                break a
            } else {
                a[b + 248 >> 0] = 1;
                ma = b +
                212 | 0
            }
            while (0);
            I = N;
            H = c[I + 4 >> 2] | 0;
            F = ma;
            c[F >> 2] = c[I >> 2];
            c[F + 4 >> 2] = H;
            H = N;
            F = c[H + 4 >> 2] | 0;
            I = b + 228 | 0;
            c[I >> 2] = c[H >> 2];
            c[I + 4 >> 2] = F;
            F = b + 204 | 0;
            I = c[F + 4 >> 2] | 0;
            H = b + 236 | 0;
            c[H >> 2] = c[F >> 2];
            c[H + 4 >> 2] = I
        }
        while (0);
        if (($ | 0) == 64) {
            ma = N;
            na = c[ma >> 2] | 0;
            la = c[ma + 4 >> 2] | 0;
            ma = _;
            c[ma >> 2] = na;
            c[ma + 4 >> 2] = la;
            y = +-(c[k >> 2] = na, +g[k >> 2]);
            Z = +T;
            na = b + 228 | 0;
            g[na >> 2] = y;
            g[na + 4 >> 2] = Z;
            na = b + 236 | 0;
            g[na >> 2] = y;
            g[na + 4 >> 2] = Z
        } else if (($ | 0) == 65) {
            Z = +-U;
            U = +T;
            na = aa;
            g[na >> 2] = Z;
            g[na + 4 >> 2] = U;
            na = N;
            aa = c[na >> 2] | 0;
            la = c[na + 4 >> 2] | 0;
            na = b + 228 | 0;
            c[na >> 2] = aa;
            c[na + 4 >> 2] =
            la;
            na = b + 236 | 0;
            c[na >> 2] = aa;
            c[na + 4 >> 2] = la
        }
        la = h + 148 | 0;
        na = b + 128 | 0;
        c[na >> 2] = c[la >> 2];
        if ((c[la >> 2] | 0) > 0) {
            aa = 0;
            do {
                U = +g[f >> 2];
                Z = +g[h + (aa << 3) + 20 >> 2];
                T = +g[j >> 2];
                y = +g[h + (aa << 3) + 24 >> 2];
                w = +(+g[r >> 2] + (U * Z - T * y));
                A = +(Z * T + U * y + +g[C >> 2]);
                ma = b + (aa << 3) | 0;
                g[ma >> 2] = w;
                g[ma + 4 >> 2] = A;
                A = +g[f >> 2];
                w = +g[h + (aa << 3) + 84 >> 2];
                y = +g[j >> 2];
                U = +g[h + (aa << 3) + 88 >> 2];
                T = +(A * w - y * U);
                Z = +(w * y + A * U);
                ma = b + (aa << 3) + 64 | 0;
                g[ma >> 2] = T;
                g[ma + 4 >> 2] = Z;
                aa = aa + 1 | 0
            } while ((aa | 0) < (c[la >> 2] | 0))
        }
        la = b + 244 | 0;
        g[la >> 2] = .019999999552965164;
        aa = d + 60 | 0;
        c[aa >> 2] = 0;
        ma = b + 248 | 0;
        _ = c[na >> 2] | 0;
        if ((_ | 0) <= 0) {
            i = l;
            return
        }
        Z = +g[b + 164 >> 2];
        T = +g[L >> 2];
        U = +g[b + 212 >> 2];
        A = +g[b + 216 >> 2];
        y = 3.4028234663852886E38;
        L = 0;
        do {
            w = U * (+g[b + (L << 3) >> 2] - Z) + A * (+g[b + (L << 3) + 4 >> 2] - T);
            y = w < y ? w : y;
            L = L + 1 | 0
        } while ((L | 0) != (_ | 0));
        if (y > .019999999552965164) {
            i = l;
            return
        }
        ef(m, b);
        _ = c[m >> 2] | 0;
        if ((_ | 0) != 0) {
            T = +g[m + 8 >> 2];
            if (T > +g[la >> 2]) {
                i = l;
                return
            }
            if (T > y * .9800000190734863 + .0010000000474974513) {
                L = c[m + 4 >> 2] | 0;
                m = d + 56 | 0;
                if ((_ | 0) == 1) {
                    oa = n;
                    pa = m;
                    $ = 77
                } else {
                    c[m >> 2] = 2;
                    m = D;
                    _ = c[m + 4 >> 2] | 0;
                    ja = n;
                    c[ja >> 2] = c[m >> 2];
                    c[ja + 4 >> 2] = _;
                    _ = n + 8 | 0;
                    a[_ >> 0] =
                    0;
                    ja = L & 255;
                    a[_ + 1 >> 0] = ja;
                    a[_ + 2 >> 0] = 0;
                    a[_ + 3 >> 0] = 1;
                    _ = G;
                    m = c[_ + 4 >> 2] | 0;
                    ka = n + 12 | 0;
                    c[ka >> 2] = c[_ >> 2];
                    c[ka + 4 >> 2] = m;
                    m = n + 20 | 0;
                    a[m >> 0] = 0;
                    a[m + 1 >> 0] = ja;
                    a[m + 2 >> 0] = 0;
                    a[m + 3 >> 0] = 1;
                    c[o >> 2] = L;
                    m = L + 1 | 0;
                    ja = (m | 0) < (c[na >> 2] | 0) ? m : 0;
                    c[o + 4 >> 2] = ja;
                    m = b + (L << 3) | 0;
                    ka = c[m >> 2] | 0;
                    _ = c[m + 4 >> 2] | 0;
                    m = o + 8 | 0;
                    c[m >> 2] = ka;
                    c[m + 4 >> 2] = _;
                    m = b + (ja << 3) | 0;
                    ja = c[m >> 2] | 0;
                    Y = c[m + 4 >> 2] | 0;
                    m = o + 16 | 0;
                    c[m >> 2] = ja;
                    c[m + 4 >> 2] = Y;
                    m = b + (L << 3) + 64 | 0;
                    ia = c[m >> 2] | 0;
                    ha = c[m + 4 >> 2] | 0;
                    m = o + 24 | 0;
                    c[m >> 2] = ia;
                    c[m + 4 >> 2] = ha;
                    qa = Y;
                    ra = ja;
                    sa = _;
                    ta = ka;
                    ua = ia;
                    va = ha;
                    wa = n;
                    xa = L;
                    ya = 0
                }
            } else
                $ = 75
        } else
            $ =
            75;
        if (($ | 0) == 75) {
            oa = n;
            pa = d + 56 | 0;
            $ = 77
        }
        do if (($ | 0) == 77) {
            c[pa >> 2] = 1;
            L = c[na >> 2] | 0;
            if ((L | 0) > 1) {
                y = +g[b + 216 >> 2];
                T = +g[b + 212 >> 2];
                ha = 0;
                A = T * +g[b + 64 >> 2] + y * +g[b + 68 >> 2];
                ia = 1;
                while (1) {
                    Z = T * +g[b + (ia << 3) + 64 >> 2] + y * +g[b + (ia << 3) + 68 >> 2];
                    ka = Z < A;
                    _ = ka ? ia : ha;
                    ia = ia + 1 | 0;
                    if ((ia | 0) >= (L | 0)) {
                        za = _;
                        break
                    } else {
                        ha = _;
                        A = ka ? Z : A
                    }
                }
            } else
                za = 0;
            ha = za + 1 | 0;
            ia = (ha | 0) < (L | 0) ? ha : 0;
            ha = b + (za << 3) | 0;
            ka = c[ha + 4 >> 2] | 0;
            _ = n;
            c[_ >> 2] = c[ha >> 2];
            c[_ + 4 >> 2] = ka;
            ka = n + 8 | 0;
            a[ka >> 0] = 0;
            a[ka + 1 >> 0] = za;
            a[ka + 2 >> 0] = 1;
            a[ka + 3 >> 0] = 0;
            ka = b + (ia << 3) | 0;
            _ = c[ka + 4 >> 2] | 0;
            ha = n + 12 | 0;
            c[ha >>
            2] = c[ka >> 2];
            c[ha + 4 >> 2] = _;
            _ = n + 20 | 0;
            a[_ >> 0] = 0;
            a[_ + 1 >> 0] = ia;
            a[_ + 2 >> 0] = 1;
            a[_ + 3 >> 0] = 0;
            if ((a[ma >> 0] | 0) == 0) {
                c[o >> 2] = 1;
                c[o + 4 >> 2] = 0;
                _ = G;
                ia = c[_ >> 2] | 0;
                ha = c[_ + 4 >> 2] | 0;
                _ = o + 8 | 0;
                c[_ >> 2] = ia;
                c[_ + 4 >> 2] = ha;
                _ = D;
                ka = c[_ >> 2] | 0;
                ja = c[_ + 4 >> 2] | 0;
                _ = o + 16 | 0;
                c[_ >> 2] = ka;
                c[_ + 4 >> 2] = ja;
                _ = (g[k >> 2] = -+g[N >> 2], c[k >> 2] | 0);
                Y = (g[k >> 2] = -+g[M >> 2], c[k >> 2] | 0);
                m = o + 24 | 0;
                c[m >> 2] = _;
                c[m + 4 >> 2] = Y;
                qa = ja;
                ra = ka;
                sa = ha;
                ta = ia;
                ua = _;
                va = Y;
                wa = oa;
                xa = 1;
                ya = 1;
                break
            } else {
                c[o >> 2] = 0;
                c[o + 4 >> 2] = 1;
                Y = D;
                _ = c[Y >> 2] | 0;
                ia = c[Y + 4 >> 2] | 0;
                Y = o + 8 | 0;
                c[Y >> 2] = _;
                c[Y + 4 >> 2] = ia;
                Y = G;
                ha = c[Y >>
                2] | 0;
                ka = c[Y + 4 >> 2] | 0;
                Y = o + 16 | 0;
                c[Y >> 2] = ha;
                c[Y + 4 >> 2] = ka;
                Y = N;
                ja = c[Y >> 2] | 0;
                m = c[Y + 4 >> 2] | 0;
                Y = o + 24 | 0;
                c[Y >> 2] = ja;
                c[Y + 4 >> 2] = m;
                qa = ka;
                ra = ha;
                sa = ia;
                ta = _;
                ua = ja;
                va = m;
                wa = oa;
                xa = 0;
                ya = 1;
                break
            }
        }
        while (0);
        A = (c[k >> 2] = va, +g[k >> 2]);
        y = (c[k >> 2] = ua, +g[k >> 2]);
        T = (c[k >> 2] = ta, +g[k >> 2]);
        Z = (c[k >> 2] = sa, +g[k >> 2]);
        U = (c[k >> 2] = ra, +g[k >> 2]);
        w = (c[k >> 2] = qa, +g[k >> 2]);
        qa = o + 32 | 0;
        ra = o + 24 | 0;
        sa = o + 28 | 0;
        ea = -y;
        g[qa >> 2] = A;
        g[o + 36 >> 2] = ea;
        ta = o + 44 | 0;
        y = -A;
        va = ta;
        g[va >> 2] = y;
        c[va + 4 >> 2] = ua;
        va = o + 8 | 0;
        oa = o + 12 | 0;
        v = A * T + Z * ea;
        g[o + 40 >> 2] = v;
        N = o + 52 | 0;
        g[N >> 2] = U * y + (c[k >>
        2] = ua, +g[k >> 2]) * w;
        if ((kf(p, wa, qa, v, xa) | 0) < 2) {
            i = l;
            return
        }
        if ((kf(q, p, ta, +g[N >> 2], c[o + 4 >> 2] | 0) | 0) < 2) {
            i = l;
            return
        }
        N = d + 40 | 0;
        if (ya) {
            ya = ra;
            ta = c[ya >> 2] | 0;
            p = c[ya + 4 >> 2] | 0;
            ya = N;
            c[ya >> 2] = ta;
            c[ya + 4 >> 2] = p;
            p = va;
            ya = c[p >> 2] | 0;
            xa = c[p + 4 >> 2] | 0;
            p = d + 48 | 0;
            c[p >> 2] = ya;
            c[p + 4 >> 2] = xa;
            v = (c[k >> 2] = ya, +g[k >> 2]);
            w = (c[k >> 2] = ta, +g[k >> 2]);
            y = +g[oa >> 2];
            U = +g[sa >> 2];
            ea = +g[q >> 2];
            Z = +g[q + 4 >> 2];
            T = +g[la >> 2];
            if (!((ea - v) * w + (Z - y) * U <= T)) {
                Aa = T;
                Ba = 0
            } else {
                T = ea - +g[r >> 2];
                ea = Z - +g[C >> 2];
                Z = +g[f >> 2];
                A = +g[j >> 2];
                u = +(T * Z + ea * A);
                da = +(Z * ea - T * A);
                ta = d;
                g[ta >> 2] = u;
                g[ta + 4 >> 2] = da;
                c[d + 16 >> 2] = c[q + 8 >> 2];
                Aa = +g[la >> 2];
                Ba = 1
            }
            da = +g[q + 12 >> 2];
            u = +g[q + 16 >> 2];
            if (!((da - v) * w + (u - y) * U <= Aa))
                Ca = Ba;
            else {
                Aa = da - +g[r >> 2];
                da = u - +g[C >> 2];
                u = +g[f >> 2];
                U = +g[j >> 2];
                y = +(Aa * u + da * U);
                w = +(u * da - Aa * U);
                j = d + (Ba * 20 | 0) | 0;
                g[j >> 2] = y;
                g[j + 4 >> 2] = w;
                c[d + (Ba * 20 | 0) + 16 >> 2] = c[q + 20 >> 2];
                Ca = Ba + 1 | 0
            }
        } else {
            Ba = c[o >> 2] | 0;
            o = h + (Ba << 3) + 84 | 0;
            j = c[o + 4 >> 2] | 0;
            f = N;
            c[f >> 2] = c[o >> 2];
            c[f + 4 >> 2] = j;
            j = h + (Ba << 3) + 20 | 0;
            Ba = c[j + 4 >> 2] | 0;
            h = d + 48 | 0;
            c[h >> 2] = c[j >> 2];
            c[h + 4 >> 2] = Ba;
            w = +g[va >> 2];
            y = +g[ra >> 2];
            U = +g[oa >> 2];
            Aa = +g[sa >> 2];
            da = +g[la >> 2];
            if (!((+g[q >>
            2] - w) * y + (+g[q + 4 >> 2] - U) * Aa <= da)) {
                Da = da;
                Ea = 0
            } else {
                sa = q;
                oa = c[sa + 4 >> 2] | 0;
                ra = d;
                c[ra >> 2] = c[sa >> 2];
                c[ra + 4 >> 2] = oa;
                oa = q + 8 | 0;
                ra = d + 16 | 0;
                a[ra + 2 >> 0] = a[oa + 3 >> 0] | 0;
                a[ra + 3 >> 0] = a[oa + 2 >> 0] | 0;
                a[ra >> 0] = a[oa + 1 >> 0] | 0;
                a[ra + 1 >> 0] = a[oa >> 0] | 0;
                Da = +g[la >> 2];
                Ea = 1
            }
            la = q + 12 | 0;
            if (!((+g[la >> 2] - w) * y + (+g[q + 16 >> 2] - U) * Aa <= Da))
                Ca = Ea;
            else {
                oa = la;
                la = c[oa + 4 >> 2] | 0;
                ra = d + (Ea * 20 | 0) | 0;
                c[ra >> 2] = c[oa >> 2];
                c[ra + 4 >> 2] = la;
                la = q + 20 | 0;
                q = d + (Ea * 20 | 0) + 16 | 0;
                a[q + 2 >> 0] = a[la + 3 >> 0] | 0;
                a[q + 3 >> 0] = a[la + 2 >> 0] | 0;
                a[q >> 0] = a[la + 1 >> 0] | 0;
                a[q + 1 >> 0] = a[la >> 0] | 0;
                Ca = Ea + 1 | 0
            }
        }
        c[aa >>
        2] = Ca;
        i = l;
        return
    }
    function ef(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0;
        d = i;
        c[a >> 2] = 0;
        e = a + 4 | 0;
        c[e >> 2] = -1;
        f = a + 8 | 0;
        g[f >> 2] = -3.4028234663852886E38;
        h = +g[b + 216 >> 2];
        j = +g[b + 212 >> 2];
        k = c[b + 128 >> 2] | 0;
        if ((k | 0) <= 0) {
            i = d;
            return
        }
        l = +g[b + 164 >> 2];
        m = +g[b + 168 >> 2];
        n = +g[b + 172 >> 2];
        o = +g[b + 176 >> 2];
        p = +g[b + 244 >> 2];
        q = b + 228 | 0;
        r = b + 232 | 0;
        s = b + 236 | 0;
        t = b + 240 | 0;
        u = -3.4028234663852886E38;
        v = 0;
        while (1) {
            w = +g[b + (v << 3) + 64 >> 2];
            x = -w;
            y = -+g[b + (v << 3) + 68 >>
            2];
            z = +g[b + (v << 3) >> 2];
            A = +g[b + (v << 3) + 4 >> 2];
            B = (z - l) * x + (A - m) * y;
            C = (z - n) * x + (A - o) * y;
            D = B < C ? B : C;
            if (D > p)
                break;
            if (!(h * w + j * y >= 0))
                if (D > u ? !((x - +g[q >> 2]) * j + (y - +g[r >> 2]) * h < -.03490658849477768) : 0)
                    E = 8;
                else
                    F = u;
            else if (D > u ? !((x - +g[s >> 2]) * j + (y - +g[t >> 2]) * h < -.03490658849477768) : 0)
                E = 8;
            else
                F = u;
            if ((E | 0) == 8) {
                E = 0;
                c[a >> 2] = 2;
                c[e >> 2] = v;
                g[f >> 2] = D;
                F = D
            }
            G = v + 1 | 0;
            if ((G | 0) < (k | 0)) {
                u = F;
                v = G
            } else {
                E = 10;
                break
            }
        }
        if ((E | 0) == 10) {
            i = d;
            return
        }
        c[a >> 2] = 2;
        c[e >> 2] = v;
        g[f >> 2] = D;
        i = d;
        return
    }
    function ff(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        var f = 0;
        f =
        i;
        i = i + 256 | 0;
        df(f, a, b, c, d, e);
        i = f;
        return
    }
    function gf(b, d, e, f, h) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0;
        j = i;
        i = i + 96 | 0;
        k = j + 92 | 0;
        l = j + 88 | 0;
        m = j;
        n = j + 80 | 0;
        o = j + 56 | 0;
        p = j + 32 | 0;
        q = j + 24 | 0;
        r = b + 60 | 0;
        c[r >> 2] = 0;
        s = +g[d + 8 >> 2] + +g[f + 8 >> 2];
        c[k >> 2] = 0;
        t = +hf(k, d, e, f, h);
        if (t > s) {
            i = j;
            return
        }
        c[l >> 2] = 0;
        u = +hf(l, f, h, d, e);
        if (u > s) {
            i = j;
            return
        }
        if (u > t + 5.000000237487257E-4) {
            t = +g[h >> 2];
            u =
            +g[h + 4 >> 2];
            v = +g[h + 8 >> 2];
            w = +g[h + 12 >> 2];
            x = +g[e >> 2];
            y = +g[e + 4 >> 2];
            z = +g[e + 8 >> 2];
            A = +g[e + 12 >> 2];
            B = c[l >> 2] | 0;
            c[b + 56 >> 2] = 2;
            C = t;
            D = u;
            E = w;
            F = v;
            G = A;
            H = z;
            I = x;
            J = y;
            K = B;
            L = 1;
            M = f;
            N = d
        } else {
            y = +g[e >> 2];
            x = +g[e + 4 >> 2];
            z = +g[e + 8 >> 2];
            A = +g[e + 12 >> 2];
            v = +g[h >> 2];
            w = +g[h + 4 >> 2];
            u = +g[h + 8 >> 2];
            t = +g[h + 12 >> 2];
            h = c[k >> 2] | 0;
            c[b + 56 >> 2] = 1;
            C = y;
            D = x;
            E = A;
            F = z;
            G = t;
            H = u;
            I = v;
            J = w;
            K = h;
            L = 0;
            M = d;
            N = f
        }
        f = c[N + 148 >> 2] | 0;
        w = +g[M + (K << 3) + 84 >> 2];
        v = +g[M + (K << 3) + 88 >> 2];
        u = E * w - F * v;
        t = F * w + E * v;
        v = G * u + H * t;
        w = G * t - H * u;
        if ((f | 0) > 0) {
            d = 0;
            h = 0;
            u = 3.4028234663852886E38;
            while (1) {
                t = v * +g[N +
                (d << 3) + 84 >> 2] + w * +g[N + (d << 3) + 88 >> 2];
                k = t < u;
                e = k ? d : h;
                d = d + 1 | 0;
                if ((d | 0) == (f | 0)) {
                    O = e;
                    break
                } else {
                    h = e;
                    u = k ? t : u
                }
            }
        } else
            O = 0;
        h = O + 1 | 0;
        d = (h | 0) < (f | 0) ? h : 0;
        u = +g[N + (O << 3) + 20 >> 2];
        w = +g[N + (O << 3) + 24 >> 2];
        v = +(I + (G * u - H * w));
        t = +(J + (H * u + G * w));
        h = m;
        g[h >> 2] = v;
        g[h + 4 >> 2] = t;
        h = K & 255;
        f = m + 8 | 0;
        a[f >> 0] = h;
        a[f + 1 >> 0] = O;
        a[f + 2 >> 0] = 1;
        a[f + 3 >> 0] = 0;
        t = +g[N + (d << 3) + 20 >> 2];
        v = +g[N + (d << 3) + 24 >> 2];
        w = +(I + (G * t - H * v));
        u = +(J + (H * t + G * v));
        N = m + 12 | 0;
        g[N >> 2] = w;
        g[N + 4 >> 2] = u;
        N = m + 20 | 0;
        a[N >> 0] = h;
        a[N + 1 >> 0] = d;
        a[N + 2 >> 0] = 1;
        a[N + 3 >> 0] = 0;
        N = K + 1 | 0;
        d = (N | 0) < (c[M + 148 >> 2] | 0) ? N : 0;
        N =
        M + (K << 3) + 20 | 0;
        u = +g[N >> 2];
        w = +g[N + 4 >> 2];
        N = M + (d << 3) + 20 | 0;
        v = +g[N >> 2];
        t = +g[N + 4 >> 2];
        z = v - u;
        A = t - w;
        x = +Q(+(z * z + A * A));
        if (x < 1.1920928955078125E-7) {
            P = z;
            R = A
        } else {
            y = 1 / x;
            P = z * y;
            R = A * y
        }
        y = E * P - F * R;
        A = E * R + F * P;
        g[n >> 2] = y;
        g[n + 4 >> 2] = A;
        z = -y;
        x = C + (E * u - F * w);
        S = D + (F * u + E * w);
        T = x * A + S * z;
        g[q >> 2] = z;
        g[q + 4 >> 2] = -A;
        if ((kf(o, m, q, s - (x * y + S * A), K) | 0) < 2) {
            i = j;
            return
        }
        if ((kf(p, o, n, s + ((C + (E * v - F * t)) * y + (D + (F * v + E * t)) * A), d) | 0) < 2) {
            i = j;
            return
        }
        E = +R;
        R = +-P;
        d = b + 40 | 0;
        g[d >> 2] = E;
        g[d + 4 >> 2] = R;
        R = +((u + v) * .5);
        v = +((w + t) * .5);
        d = b + 48 | 0;
        g[d >> 2] = R;
        g[d + 4 >> 2] = v;
        v = +g[p >> 2];
        R =
        +g[p + 4 >> 2];
        d = !(A * v + R * z - T <= s);
        if (L << 24 >> 24 == 0) {
            if (d)
                U = 0;
            else {
                t = v - I;
                w = R - J;
                u = +(G * t + H * w);
                E = +(G * w - H * t);
                L = b;
                g[L >> 2] = u;
                g[L + 4 >> 2] = E;
                c[b + 16 >> 2] = c[p + 8 >> 2];
                U = 1
            }
            E = +g[p + 12 >> 2];
            u = +g[p + 16 >> 2];
            if (!(A * E + u * z - T <= s))
                V = U;
            else {
                t = E - I;
                E = u - J;
                u = +(G * t + H * E);
                w = +(G * E - H * t);
                L = b + (U * 20 | 0) | 0;
                g[L >> 2] = u;
                g[L + 4 >> 2] = w;
                c[b + (U * 20 | 0) + 16 >> 2] = c[p + 20 >> 2];
                V = U + 1 | 0
            }
        } else {
            if (d)
                W = 0;
            else {
                w = v - I;
                v = R - J;
                R = +(G * w + H * v);
                u = +(G * v - H * w);
                d = b;
                g[d >> 2] = R;
                g[d + 4 >> 2] = u;
                d = b + 16 | 0;
                U = c[p + 8 >> 2] | 0;
                c[d >> 2] = U;
                a[d >> 0] = U >>> 8;
                a[d + 1 >> 0] = U;
                a[d + 2 >> 0] = U >>> 24;
                a[d + 3 >> 0] = U >>> 16;
                W = 1
            }
            u =
            +g[p + 12 >> 2];
            R = +g[p + 16 >> 2];
            if (!(A * u + R * z - T <= s))
                V = W;
            else {
                s = u - I;
                I = R - J;
                J = +(G * s + H * I);
                R = +(G * I - H * s);
                U = b + (W * 20 | 0) | 0;
                g[U >> 2] = J;
                g[U + 4 >> 2] = R;
                U = b + (W * 20 | 0) + 16 | 0;
                b = c[p + 20 >> 2] | 0;
                c[U >> 2] = b;
                a[U >> 0] = b >>> 8;
                a[U + 1 >> 0] = b;
                a[U + 2 >> 0] = b >>> 24;
                a[U + 3 >> 0] = b >>> 16;
                V = W + 1 | 0
            }
        }
        c[r >> 2] = V;
        i = j;
        return
    }
    function hf(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0;
        h = i;
        j = c[b + 148 >> 2] | 0;
        k = c[e + 148 >> 2] | 0;
        l = +g[f + 12 >> 2];
        m = +g[d + 8 >> 2];
        n = +g[f + 8 >> 2];
        o = +g[d + 12 >> 2];
        p = l * m - n * o;
        q =
        m * n + l * o;
        o = +g[d >> 2] - +g[f >> 2];
        m = +g[d + 4 >> 2] - +g[f + 4 >> 2];
        r = l * o + n * m;
        s = l * m - n * o;
        if ((j | 0) <= 0) {
            t = 0;
            u = -3.4028234663852886E38;
            c[a >> 2] = t;
            i = h;
            return +u
        }
        if ((k | 0) > 0) {
            v = 0;
            w = 0;
            x = -3.4028234663852886E38
        } else {
            f = 0;
            d = 0;
            o = -3.4028234663852886E38;
            while (1) {
                y = o < 3.4028234663852886E38;
                n = y ? 3.4028234663852886E38 : o;
                z = y ? d : f;
                d = d + 1 | 0;
                if ((d | 0) == (j | 0)) {
                    t = z;
                    u = n;
                    break
                } else {
                    f = z;
                    o = n
                }
            }
            c[a >> 2] = t;
            i = h;
            return +u
        }
        while (1) {
            o = +g[b + (w << 3) + 84 >> 2];
            n = +g[b + (w << 3) + 88 >> 2];
            m = q * o - p * n;
            l = p * o + q * n;
            n = +g[b + (w << 3) + 20 >> 2];
            o = +g[b + (w << 3) + 24 >> 2];
            A = r + (q * n - p * o);
            B = s + (p *
            n + q * o);
            f = 0;
            o = 3.4028234663852886E38;
            do {
                n = m * (+g[e + (f << 3) + 20 >> 2] - A) + l * (+g[e + (f << 3) + 24 >> 2] - B);
                o = n < o ? n : o;
                f = f + 1 | 0
            } while ((f | 0) != (k | 0));
            f = o > x;
            B = f ? o : x;
            d = f ? w : v;
            w = w + 1 | 0;
            if ((w | 0) == (j | 0)) {
                t = d;
                u = B;
                break
            } else {
                v = d;
                x = B
            }
        }
        c[a >> 2] = t;
        i = h;
        return +u
    }
    function jf(a, b, d, e, f, h) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = +e;
        f = f | 0;
        h = +h;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0;
        j = i;
        k = b + 60 | 0;
        if ((c[k >> 2] | 0) == 0) {
            i = j;
            return
        }
        l = c[b + 56 >> 2] | 0;
        if ((l | 0) == 2) {
            m = f + 12 | 0;
            n = +g[m >> 2];
            o = +g[b + 40 >> 2];
            p = f + 8 | 0;
            q = +g[p >> 2];
            r = +g[b + 44 >> 2];
            s = n * o - q * r;
            t = o * q + n * r;
            r = +s;
            n = +t;
            u = a;
            g[u >> 2] = r;
            g[u + 4 >> 2] = n;
            n = +g[m >> 2];
            r = +g[b + 48 >> 2];
            q = +g[p >> 2];
            o = +g[b + 52 >> 2];
            v = +g[f >> 2] + (n * r - q * o);
            w = r * q + n * o + +g[f + 4 >> 2];
            if ((c[k >> 2] | 0) > 0) {
                p = d + 12 | 0;
                m = d + 8 | 0;
                u = d + 4 | 0;
                x = a + 4 | 0;
                o = s;
                n = t;
                y = 0;
                while (1) {
                    q = +g[p >> 2];
                    r = +g[b + (y * 20 | 0) >> 2];
                    z = +g[m >> 2];
                    A = +g[b + (y * 20 | 0) + 4 >> 2];
                    B = +g[d >> 2] + (q * r - z * A);
                    C = r * z + q * A + +g[u >> 2];
                    A = h - (o * (B - v) + (C - w) * n);
                    q = B + o * A;
                    z = C + n * A;
                    A = B - o * e;
                    B = C - n * e;
                    C = +((A + q) * .5);
                    r = +((B + z) * .5);
                    D = a + (y << 3) + 8 | 0;
                    g[D >> 2] = C;
                    g[D + 4 >> 2] = r;
                    g[a + (y << 2) + 24 >> 2] = +g[a >> 2] * (A - q) +
                    +g[x >> 2] * (B - z);
                    y = y + 1 | 0;
                    z = +g[a >> 2];
                    B = +g[x >> 2];
                    if ((y | 0) >= (c[k >> 2] | 0)) {
                        E = z;
                        F = B;
                        break
                    } else {
                        o = z;
                        n = B
                    }
                }
            } else {
                E = s;
                F = t
            }
            t = +-E;
            E = +-F;
            y = a;
            g[y >> 2] = t;
            g[y + 4 >> 2] = E;
            i = j;
            return
        } else if ((l | 0) == 0) {
            g[a >> 2] = 1;
            y = a + 4 | 0;
            g[y >> 2] = 0;
            E = +g[d + 12 >> 2];
            t = +g[b + 48 >> 2];
            F = +g[d + 8 >> 2];
            s = +g[b + 52 >> 2];
            n = +g[d >> 2] + (E * t - F * s);
            o = t * F + E * s + +g[d + 4 >> 2];
            s = +g[f + 12 >> 2];
            E = +g[b >> 2];
            F = +g[f + 8 >> 2];
            t = +g[b + 4 >> 2];
            w = +g[f >> 2] + (s * E - F * t);
            v = E * F + s * t + +g[f + 4 >> 2];
            t = n - w;
            s = o - v;
            if (t * t + s * s > 1.4210854715202004E-14) {
                s = w - n;
                t = v - o;
                F = +s;
                E = +t;
                x = a;
                g[x >> 2] = F;
                g[x + 4 >> 2] = E;
                E = +Q(+(s *
                s + t * t));
                if (E < 1.1920928955078125E-7) {
                    G = s;
                    H = t
                } else {
                    F = 1 / E;
                    E = s * F;
                    g[a >> 2] = E;
                    s = t * F;
                    g[y >> 2] = s;
                    G = E;
                    H = s
                }
            } else {
                G = 1;
                H = 0
            }
            s = n + G * e;
            n = o + H * e;
            o = w - G * h;
            w = v - H * h;
            v = +((s + o) * .5);
            E = +((n + w) * .5);
            y = a + 8 | 0;
            g[y >> 2] = v;
            g[y + 4 >> 2] = E;
            g[a + 24 >> 2] = G * (o - s) + H * (w - n);
            i = j;
            return
        } else if ((l | 0) == 1) {
            l = d + 12 | 0;
            n = +g[l >> 2];
            w = +g[b + 40 >> 2];
            y = d + 8 | 0;
            H = +g[y >> 2];
            s = +g[b + 44 >> 2];
            o = n * w - H * s;
            G = w * H + n * s;
            s = +o;
            n = +G;
            x = a;
            g[x >> 2] = s;
            g[x + 4 >> 2] = n;
            n = +g[l >> 2];
            s = +g[b + 48 >> 2];
            H = +g[y >> 2];
            w = +g[b + 52 >> 2];
            E = +g[d >> 2] + (n * s - H * w);
            v = s * H + n * w + +g[d + 4 >> 2];
            if ((c[k >> 2] | 0) <= 0) {
                i = j;
                return
            }
            d =
            f + 12 | 0;
            y = f + 8 | 0;
            l = f + 4 | 0;
            x = a + 4 | 0;
            w = o;
            o = G;
            u = 0;
            while (1) {
                G = +g[d >> 2];
                n = +g[b + (u * 20 | 0) >> 2];
                H = +g[y >> 2];
                s = +g[b + (u * 20 | 0) + 4 >> 2];
                F = +g[f >> 2] + (G * n - H * s);
                t = n * H + G * s + +g[l >> 2];
                s = e - (w * (F - E) + (t - v) * o);
                G = F + w * s;
                H = t + o * s;
                s = F - w * h;
                F = t - o * h;
                t = +((s + G) * .5);
                n = +((F + H) * .5);
                m = a + (u << 3) + 8 | 0;
                g[m >> 2] = t;
                g[m + 4 >> 2] = n;
                g[a + (u << 2) + 24 >> 2] = +g[a >> 2] * (s - G) + +g[x >> 2] * (F - H);
                m = u + 1 | 0;
                if ((m | 0) >= (c[k >> 2] | 0))
                    break;
                w = +g[a >> 2];
                o = +g[x >> 2];
                u = m
            }
            i = j;
            return
        } else {
            i = j;
            return
        }
    }
    function kf(b, d, e, f, h) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q =
            0,
            r = 0,
            s = 0,
            t = 0,
            u = 0;
        j = i;
        k = +g[e >> 2];
        l = +g[e + 4 >> 2];
        e = d + 4 | 0;
        m = k * +g[d >> 2] + l * +g[e >> 2] - f;
        n = d + 12 | 0;
        o = d + 16 | 0;
        p = k * +g[n >> 2] + l * +g[o >> 2] - f;
        if (!(m <= 0))
            q = 0;
        else {
            c[b + 0 >> 2] = c[d + 0 >> 2];
            c[b + 4 >> 2] = c[d + 4 >> 2];
            c[b + 8 >> 2] = c[d + 8 >> 2];
            q = 1
        }
        if (!(p <= 0))
            r = q;
        else {
            s = q + 1 | 0;
            t = b + (q * 12 | 0) | 0;
            c[t + 0 >> 2] = c[n + 0 >> 2];
            c[t + 4 >> 2] = c[n + 4 >> 2];
            c[t + 8 >> 2] = c[n + 8 >> 2];
            r = s
        }
        if (!(m * p < 0)) {
            u = r;
            i = j;
            return u | 0
        }
        f = m / (m - p);
        p = +g[d >> 2];
        m = +g[e >> 2];
        l = +(p + f * (+g[n >> 2] - p));
        p = +(m + f * (+g[o >> 2] - m));
        o = b + (r * 12 | 0) | 0;
        g[o >> 2] = l;
        g[o + 4 >> 2] = p;
        o = b + (r * 12 | 0) + 8 | 0;
        a[o >> 0] = h;
        a[o + 1 >> 0] = a[d +
        9 >> 0] | 0;
        a[o + 2 >> 0] = 0;
        a[o + 3 >> 0] = 1;
        u = r + 1 | 0;
        i = j;
        return u | 0
    }
    function lf(d, e, f, h, j, k) {
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        j = j | 0;
        k = k | 0;
        var l = 0,
            m = 0,
            n = 0,
            o = 0;
        l = i;
        i = i + 128 | 0;
        m = l + 36 | 0;
        n = l + 24 | 0;
        o = l;
        c[m + 16 >> 2] = 0;
        c[m + 20 >> 2] = 0;
        g[m + 24 >> 2] = 0;
        c[m + 44 >> 2] = 0;
        c[m + 48 >> 2] = 0;
        g[m + 52 >> 2] = 0;
        be(m, d, e);
        be(m + 28 | 0, f, h);
        h = m + 56 | 0;
        c[h + 0 >> 2] = c[j + 0 >> 2];
        c[h + 4 >> 2] = c[j + 4 >> 2];
        c[h + 8 >> 2] = c[j + 8 >> 2];
        c[h + 12 >> 2] = c[j + 12 >> 2];
        j = m + 72 | 0;
        c[j + 0 >> 2] = c[k + 0 >> 2];
        c[j + 4 >> 2] = c[k + 4 >> 2];
        c[j + 8 >> 2] = c[k + 8 >> 2];
        c[j + 12 >> 2] = c[k + 12 >> 2];
        a[m + 88 >> 0] = 1;
        b[n + 4 >> 1] = 0;
        de(o, n, m);
        i = l;
        return +g[o +
        16 >> 2] < 1.1920928955078125E-6 | 0
    }
    function mf(a, b, d, e, f, g) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0,
            j = 0;
        h = i;
        j = a + 40 | 0;
        c[j >> 2] = b;
        c[a + 44 >> 2] = d;
        c[a + 48 >> 2] = e;
        c[a + 28 >> 2] = 0;
        c[a + 36 >> 2] = 0;
        c[a + 32 >> 2] = 0;
        c[a >> 2] = f;
        c[a + 4 >> 2] = g;
        c[a + 8 >> 2] = Ym(f, b << 2) | 0;
        c[a + 12 >> 2] = Ym(c[a >> 2] | 0, d << 2) | 0;
        c[a + 16 >> 2] = Ym(c[a >> 2] | 0, e << 2) | 0;
        c[a + 24 >> 2] = Ym(c[a >> 2] | 0, (c[j >> 2] | 0) * 12 | 0) | 0;
        c[a + 20 >> 2] = Ym(c[a >> 2] | 0, (c[j >> 2] | 0) * 12 | 0) | 0;
        i = h;
        return
    }
    function nf(a) {
        a = a | 0;
        var b = 0;
        b = i;
        _m(c[a >> 2] | 0, c[a + 20 >> 2] | 0);
        _m(c[a >> 2] | 0, c[a + 24 >> 2] | 0);
        _m(c[a >> 2] | 0, c[a +
        16 >> 2] | 0);
        _m(c[a >> 2] | 0, c[a + 12 >> 2] | 0);
        _m(c[a >> 2] | 0, c[a + 8 >> 2] | 0);
        i = b;
        return
    }
    function of(d, e, f, h, j) {
        d = d | 0;
        e = e | 0;
        f = f | 0;
        h = h | 0;
        j = j | 0;
        var l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            R = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0;
        l = i;
        i = i + 176 | 0;
        m = l + 148 | 0;
        n = l;
        o = l + 112 | 0;
        p = l + 64 | 0;
        q = l + 8 | 0;
        Km(n);
        r = +g[f >> 2];
        s = d + 28 | 0;
        if ((c[s >> 2] | 0) > 0) {
            t = d + 8 | 0;
            u = h + 4 | 0;
            v = d + 20 | 0;
            w = d + 24 | 0;
            x = 0;
            do {
                y = c[(c[t >> 2] | 0) + (x << 2) >> 2] | 0;
                z = y + 60 | 0;
                A = c[z >> 2] | 0;
                B = c[z + 4 >> 2] | 0;
                C = +g[y + 72 >> 2];
                z = y +
                80 | 0;
                D = +g[z >> 2];
                E = +g[z + 4 >> 2];
                F = +g[y + 88 >> 2];
                z = y + 52 | 0;
                c[z >> 2] = A;
                c[z + 4 >> 2] = B;
                g[y + 68 >> 2] = C;
                if ((c[y >> 2] | 0) == 2) {
                    G = +g[y + 156 >> 2];
                    H = +g[y + 136 >> 2];
                    I = 1 / (r * +g[y + 148 >> 2] + 1);
                    J = (D + r * (G * +g[h >> 2] + H * +g[y + 92 >> 2])) * I;
                    K = (E + r * (G * +g[u >> 2] + H * +g[y + 96 >> 2])) * I;
                    L = (F + r * +g[y + 144 >> 2] * +g[y + 100 >> 2]) * (1 / (r * +g[y + 152 >> 2] + 1))
                } else {
                    J = D;
                    K = E;
                    L = F
                }
                y = (c[v >> 2] | 0) + (x * 12 | 0) | 0;
                c[y >> 2] = A;
                c[y + 4 >> 2] = B;
                g[(c[v >> 2] | 0) + (x * 12 | 0) + 8 >> 2] = C;
                C = +J;
                F = +K;
                B = (c[w >> 2] | 0) + (x * 12 | 0) | 0;
                g[B >> 2] = C;
                g[B + 4 >> 2] = F;
                g[(c[w >> 2] | 0) + (x * 12 | 0) + 8 >> 2] = L;
                x = x + 1 | 0
            } while ((x | 0) < (c[s >> 2] |
            0));
            M = w;
            N = v
        } else {
            M = d + 24 | 0;
            N = d + 20 | 0
        }
        c[o + 0 >> 2] = c[f + 0 >> 2];
        c[o + 4 >> 2] = c[f + 4 >> 2];
        c[o + 8 >> 2] = c[f + 8 >> 2];
        c[o + 12 >> 2] = c[f + 12 >> 2];
        c[o + 16 >> 2] = c[f + 16 >> 2];
        c[o + 20 >> 2] = c[f + 20 >> 2];
        c[o + 24 >> 2] = c[f + 24 >> 2];
        v = c[N >> 2] | 0;
        c[o + 28 >> 2] = v;
        w = c[M >> 2] | 0;
        c[o + 32 >> 2] = w;
        c[p + 0 >> 2] = c[f + 0 >> 2];
        c[p + 4 >> 2] = c[f + 4 >> 2];
        c[p + 8 >> 2] = c[f + 8 >> 2];
        c[p + 12 >> 2] = c[f + 12 >> 2];
        c[p + 16 >> 2] = c[f + 16 >> 2];
        c[p + 20 >> 2] = c[f + 20 >> 2];
        c[p + 24 >> 2] = c[f + 24 >> 2];
        x = d + 12 | 0;
        c[p + 28 >> 2] = c[x >> 2];
        u = d + 36 | 0;
        c[p + 32 >> 2] = c[u >> 2];
        c[p + 36 >> 2] = v;
        c[p + 40 >> 2] = w;
        c[p + 44 >> 2] = c[d >> 2];
        Ki(q, p);
        Mi(q);
        if ((a[f +
        24 >> 0] | 0) != 0)
            Ni(q);
        p = d + 32 | 0;
        if ((c[p >> 2] | 0) > 0) {
            w = d + 16 | 0;
            v = 0;
            do {
                h = c[(c[w >> 2] | 0) + (v << 2) >> 2] | 0;
                gb[c[(c[h >> 2] | 0) + 32 >> 2] & 63](h, o);
                v = v + 1 | 0
            } while ((v | 0) < (c[p >> 2] | 0))
        }
        g[e + 12 >> 2] = +Mm(n);
        v = f + 12 | 0;
        if ((c[v >> 2] | 0) > 0) {
            w = d + 16 | 0;
            h = 0;
            do {
                if ((c[p >> 2] | 0) > 0) {
                    t = 0;
                    do {
                        B = c[(c[w >> 2] | 0) + (t << 2) >> 2] | 0;
                        gb[c[(c[B >> 2] | 0) + 36 >> 2] & 63](B, o);
                        t = t + 1 | 0
                    } while ((t | 0) < (c[p >> 2] | 0))
                }
                Oi(q);
                h = h + 1 | 0
            } while ((h | 0) < (c[v >> 2] | 0))
        }
        Pi(q);
        g[e + 16 >> 2] = +Mm(n);
        if ((c[s >> 2] | 0) > 0) {
            v = c[M >> 2] | 0;
            h = 0;
            do {
                w = c[N >> 2] | 0;
                t = w + (h * 12 | 0) | 0;
                B = t;
                L = +g[B >> 2];
                K = +g[B + 4 >> 2];
                J = +g[w + (h *
                12 | 0) + 8 >> 2];
                w = v + (h * 12 | 0) | 0;
                F = +g[w >> 2];
                C = +g[w + 4 >> 2];
                E = +g[v + (h * 12 | 0) + 8 >> 2];
                D = r * F;
                I = r * C;
                H = D * D + I * I;
                if (H > 4) {
                    I = 2 / +Q(+H);
                    O = F * I;
                    P = C * I
                } else {
                    O = F;
                    P = C
                }
                C = r * E;
                if (C * C > 2.4674012660980225) {
                    if (C > 0)
                        R = C;
                    else
                        R = -C;
                    U = E * (1.5707963705062866 / R)
                } else
                    U = E;
                E = +(L + r * O);
                L = +(K + r * P);
                w = t;
                g[w >> 2] = E;
                g[w + 4 >> 2] = L;
                g[(c[N >> 2] | 0) + (h * 12 | 0) + 8 >> 2] = J + r * U;
                J = +O;
                L = +P;
                w = (c[M >> 2] | 0) + (h * 12 | 0) | 0;
                g[w >> 2] = J;
                g[w + 4 >> 2] = L;
                v = c[M >> 2] | 0;
                g[v + (h * 12 | 0) + 8 >> 2] = U;
                h = h + 1 | 0
            } while ((h | 0) < (c[s >> 2] | 0))
        }
        h = f + 16 | 0;
        a:
        do if ((c[h >> 2] | 0) > 0) {
            f = d + 16 | 0;
            v = 0;
            while (1) {
                w = Qi(q) | 0;
                if ((c[p >>
                2] | 0) > 0) {
                    t = 0;
                    B = 1;
                    while (1) {
                        y = c[(c[f >> 2] | 0) + (t << 2) >> 2] | 0;
                        A = B & (nb[c[(c[y >> 2] | 0) + 40 >> 2] & 31](y, o) | 0);
                        t = t + 1 | 0;
                        if ((t | 0) >= (c[p >> 2] | 0)) {
                            V = A;
                            break
                        } else
                            B = A
                    }
                } else
                    V = 1;
                v = v + 1 | 0;
                if (w & V) {
                    W = 0;
                    break a
                }
                if ((v | 0) >= (c[h >> 2] | 0)) {
                    W = 1;
                    break
                }
            }
        } else
            W = 1;
        while (0);
        if ((c[s >> 2] | 0) > 0) {
            h = d + 8 | 0;
            V = 0;
            do {
                p = c[(c[h >> 2] | 0) + (V << 2) >> 2] | 0;
                o = (c[N >> 2] | 0) + (V * 12 | 0) | 0;
                v = c[o >> 2] | 0;
                f = c[o + 4 >> 2] | 0;
                o = p + 60 | 0;
                c[o >> 2] = v;
                c[o + 4 >> 2] = f;
                U = +g[(c[N >> 2] | 0) + (V * 12 | 0) + 8 >> 2];
                g[p + 72 >> 2] = U;
                o = (c[M >> 2] | 0) + (V * 12 | 0) | 0;
                B = c[o + 4 >> 2] | 0;
                t = p + 80 | 0;
                c[t >> 2] = c[o >> 2];
                c[t + 4 >> 2] = B;
                g[p + 88 >> 2] = +g[(c[M >> 2] | 0) + (V * 12 | 0) + 8 >> 2];
                P = +T(+U);
                g[p + 20 >> 2] = P;
                O = +S(+U);
                g[p + 24 >> 2] = O;
                U = +g[p + 44 >> 2];
                R = +g[p + 48 >> 2];
                L = (c[k >> 2] = v, +g[k >> 2]) - (O * U - P * R);
                J = (c[k >> 2] = f, +g[k >> 2]) - (P * U + O * R);
                R = +L;
                L = +J;
                f = p + 12 | 0;
                g[f >> 2] = R;
                g[f + 4 >> 2] = L;
                V = V + 1 | 0
            } while ((V | 0) < (c[s >> 2] | 0))
        }
        g[e + 20 >> 2] = +Mm(n);
        n = c[q + 44 >> 2] | 0;
        e = d + 4 | 0;
        if ((c[e >> 2] | 0) != 0 ? (c[u >> 2] | 0) > 0 : 0) {
            V = m + 16 | 0;
            M = 0;
            do {
                N = c[(c[x >> 2] | 0) + (M << 2) >> 2] | 0;
                h = c[n + (M * 156 | 0) + 148 >> 2] | 0;
                c[V >> 2] = h;
                if ((h | 0) > 0) {
                    f = 0;
                    do {
                        g[m + (f << 2) >> 2] = +g[n + (M * 156 | 0) + (f * 36 | 0) + 16 >> 2];
                        g[m + (f << 2) + 8 >> 2] = +g[n + (M * 156 |
                        0) + (f * 36 | 0) + 20 >> 2];
                        f = f + 1 | 0
                    } while ((f | 0) != (h | 0))
                }
                h = c[e >> 2] | 0;
                ib[c[(c[h >> 2] | 0) + 36 >> 2] & 7](h, N, m);
                M = M + 1 | 0
            } while ((M | 0) < (c[u >> 2] | 0))
        }
        if (!j) {
            Li(q);
            i = l;
            return
        }
        j = c[s >> 2] | 0;
        u = (j | 0) > 0;
        if (u) {
            M = c[d + 8 >> 2] | 0;
            m = 0;
            L = 3.4028234663852886E38;
            while (1) {
                e = c[M + (m << 2) >> 2] | 0;
                do if ((c[e >> 2] | 0) == 0)
                    X = L;
                else {
                    if ((!((b[e + 4 >> 1] & 4) == 0) ? (R = +g[e + 88 >> 2], !(R * R > .001218469929881394)) : 0) ? (R = +g[e + 80 >> 2], J = +g[e + 84 >> 2], !(R * R + J * J > 9.999999747378752E-5)) : 0) {
                        n = e + 160 | 0;
                        J = r + +g[n >> 2];
                        g[n >> 2] = J;
                        X = L < J ? L : J;
                        break
                    }
                    g[e + 160 >> 2] = 0;
                    X = 0
                }
                while (0);
                m = m + 1 | 0;
                if ((m |
                0) >= (j | 0)) {
                    Y = X;
                    break
                } else
                    L = X
            }
        } else
            Y = 3.4028234663852886E38;
        if (!(Y >= .5) | W | u ^ 1) {
            Li(q);
            i = l;
            return
        }
        u = d + 8 | 0;
        d = 0;
        do {
            W = c[(c[u >> 2] | 0) + (d << 2) >> 2] | 0;
            j = W + 4 | 0;
            b[j >> 1] = b[j >> 1] & 65533;
            g[W + 160 >> 2] = 0;
            j = W + 80 | 0;
            c[j + 0 >> 2] = 0;
            c[j + 4 >> 2] = 0;
            c[j + 8 >> 2] = 0;
            c[j + 12 >> 2] = 0;
            c[j + 16 >> 2] = 0;
            c[j + 20 >> 2] = 0;
            d = d + 1 | 0
        } while ((d | 0) < (c[s >> 2] | 0));
        Li(q);
        i = l;
        return
    }
    function pf(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0;
        f = i;
        i = i + 128 | 0;
        h = f +
        104 | 0;
        j = f + 56 | 0;
        k = f;
        l = a + 28 | 0;
        if ((c[l >> 2] | 0) > 0) {
            m = a + 8 | 0;
            n = a + 20 | 0;
            o = a + 24 | 0;
            p = 0;
            do {
                q = c[(c[m >> 2] | 0) + (p << 2) >> 2] | 0;
                r = q + 60 | 0;
                s = c[r + 4 >> 2] | 0;
                t = (c[n >> 2] | 0) + (p * 12 | 0) | 0;
                c[t >> 2] = c[r >> 2];
                c[t + 4 >> 2] = s;
                g[(c[n >> 2] | 0) + (p * 12 | 0) + 8 >> 2] = +g[q + 72 >> 2];
                s = q + 80 | 0;
                t = c[s + 4 >> 2] | 0;
                r = (c[o >> 2] | 0) + (p * 12 | 0) | 0;
                c[r >> 2] = c[s >> 2];
                c[r + 4 >> 2] = t;
                t = c[o >> 2] | 0;
                g[t + (p * 12 | 0) + 8 >> 2] = +g[q + 88 >> 2];
                p = p + 1 | 0
            } while ((p | 0) < (c[l >> 2] | 0));
            u = n;
            v = t
        } else {
            u = a + 20 | 0;
            v = c[a + 24 >> 2] | 0
        }
        n = a + 12 | 0;
        c[j + 28 >> 2] = c[n >> 2];
        p = a + 36 | 0;
        c[j + 32 >> 2] = c[p >> 2];
        c[j + 44 >> 2] = c[a >> 2];
        c[j + 0 >> 2] = c[b +
        0 >> 2];
        c[j + 4 >> 2] = c[b + 4 >> 2];
        c[j + 8 >> 2] = c[b + 8 >> 2];
        c[j + 12 >> 2] = c[b + 12 >> 2];
        c[j + 16 >> 2] = c[b + 16 >> 2];
        c[j + 20 >> 2] = c[b + 20 >> 2];
        c[j + 24 >> 2] = c[b + 24 >> 2];
        c[j + 36 >> 2] = c[u >> 2];
        o = a + 24 | 0;
        c[j + 40 >> 2] = v;
        Ki(k, j);
        j = b + 16 | 0;
        a:
        do if ((c[j >> 2] | 0) > 0) {
            v = 0;
            do {
                v = v + 1 | 0;
                if (Si(k, d, e) | 0)
                    break a
            } while ((v | 0) < (c[j >> 2] | 0))
        }
        while (0);
        j = a + 8 | 0;
        v = (c[u >> 2] | 0) + (d * 12 | 0) | 0;
        m = c[v + 4 >> 2] | 0;
        t = (c[(c[j >> 2] | 0) + (d << 2) >> 2] | 0) + 52 | 0;
        c[t >> 2] = c[v >> 2];
        c[t + 4 >> 2] = m;
        m = c[u >> 2] | 0;
        t = c[j >> 2] | 0;
        g[(c[t + (d << 2) >> 2] | 0) + 68 >> 2] = +g[m + (d * 12 | 0) + 8 >> 2];
        d = m + (e * 12 | 0) | 0;
        m = c[d + 4 >> 2] | 0;
        v =
        (c[t + (e << 2) >> 2] | 0) + 52 | 0;
        c[v >> 2] = c[d >> 2];
        c[v + 4 >> 2] = m;
        g[(c[(c[j >> 2] | 0) + (e << 2) >> 2] | 0) + 68 >> 2] = +g[(c[u >> 2] | 0) + (e * 12 | 0) + 8 >> 2];
        Mi(k);
        e = b + 12 | 0;
        if ((c[e >> 2] | 0) > 0) {
            m = 0;
            do {
                Oi(k);
                m = m + 1 | 0
            } while ((m | 0) < (c[e >> 2] | 0))
        }
        w = +g[b >> 2];
        if ((c[l >> 2] | 0) > 0) {
            b = 0;
            do {
                e = c[u >> 2] | 0;
                m = e + (b * 12 | 0) | 0;
                v = m;
                x = +g[v >> 2];
                y = +g[v + 4 >> 2];
                z = +g[e + (b * 12 | 0) + 8 >> 2];
                e = c[o >> 2] | 0;
                v = e + (b * 12 | 0) | 0;
                A = +g[v >> 2];
                B = +g[v + 4 >> 2];
                C = +g[e + (b * 12 | 0) + 8 >> 2];
                D = w * A;
                E = w * B;
                F = D * D + E * E;
                if (F > 4) {
                    E = 2 / +Q(+F);
                    G = A * E;
                    H = B * E
                } else {
                    G = A;
                    H = B
                }
                B = w * C;
                if (B * B > 2.4674012660980225) {
                    if (B > 0)
                        I = B;
                    else
                        I =
                        -B;
                    J = C * (1.5707963705062866 / I)
                } else
                    J = C;
                C = x + w * G;
                x = y + w * H;
                y = z + w * J;
                z = +C;
                B = +x;
                e = m;
                g[e >> 2] = z;
                g[e + 4 >> 2] = B;
                g[(c[u >> 2] | 0) + (b * 12 | 0) + 8 >> 2] = y;
                A = +G;
                E = +H;
                e = (c[o >> 2] | 0) + (b * 12 | 0) | 0;
                g[e >> 2] = A;
                g[e + 4 >> 2] = E;
                g[(c[o >> 2] | 0) + (b * 12 | 0) + 8 >> 2] = J;
                e = c[(c[j >> 2] | 0) + (b << 2) >> 2] | 0;
                m = e + 60 | 0;
                g[m >> 2] = z;
                g[m + 4 >> 2] = B;
                g[e + 72 >> 2] = y;
                m = e + 80 | 0;
                g[m >> 2] = A;
                g[m + 4 >> 2] = E;
                g[e + 88 >> 2] = J;
                E = +T(+y);
                g[e + 20 >> 2] = E;
                A = +S(+y);
                g[e + 24 >> 2] = A;
                y = +g[e + 44 >> 2];
                B = +g[e + 48 >> 2];
                z = +(C - (A * y - E * B));
                C = +(x - (E * y + A * B));
                m = e + 12 | 0;
                g[m >> 2] = z;
                g[m + 4 >> 2] = C;
                b = b + 1 | 0
            } while ((b | 0) < (c[l >> 2] |
            0))
        }
        l = c[k + 44 >> 2] | 0;
        b = a + 4 | 0;
        if ((c[b >> 2] | 0) == 0) {
            Li(k);
            i = f;
            return
        }
        if ((c[p >> 2] | 0) <= 0) {
            Li(k);
            i = f;
            return
        }
        a = h + 16 | 0;
        j = 0;
        do {
            o = c[(c[n >> 2] | 0) + (j << 2) >> 2] | 0;
            u = c[l + (j * 156 | 0) + 148 >> 2] | 0;
            c[a >> 2] = u;
            if ((u | 0) > 0) {
                m = 0;
                do {
                    g[h + (m << 2) >> 2] = +g[l + (j * 156 | 0) + (m * 36 | 0) + 16 >> 2];
                    g[h + (m << 2) + 8 >> 2] = +g[l + (j * 156 | 0) + (m * 36 | 0) + 20 >> 2];
                    m = m + 1 | 0
                } while ((m | 0) != (u | 0))
            }
            u = c[b >> 2] | 0;
            ib[c[(c[u >> 2] | 0) + 36 >> 2] & 7](u, o, h);
            j = j + 1 | 0
        } while ((j | 0) < (c[p >> 2] | 0));
        Li(k);
        i = f;
        return
    }
    function qf(a, c, d) {
        a = a | 0;
        c = c | 0;
        d = d | 0;
        var e = 0,
            f = 0;
        a = i;
        e = b[c + 36 >> 1] | 0;
        if (!(e << 16 >> 16 ==
        0 ? 1 : e << 16 >> 16 != (b[d + 36 >> 1] | 0))) {
            f = e << 16 >> 16 > 0;
            i = a;
            return f | 0
        }
        if ((b[d + 32 >> 1] & b[c + 34 >> 1]) << 16 >> 16 == 0) {
            f = 0;
            i = a;
            return f | 0
        }
        f = (b[d + 34 >> 1] & b[c + 32 >> 1]) << 16 >> 16 != 0;
        i = a;
        return f | 0
    }
    function rf(a) {
        a = a | 0;
        return
    }
    function sf(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function tf(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        return 1
    }
    function uf(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        return 1
    }
    function vf(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        d = i;
        vh(a, b);
        c[a >> 2] = 904;
        e = b + 20 | 0;
        f = c[e >> 2] | 0;
        h = c[e + 4 >> 2] | 0;
        e = a + 76 | 0;
        c[e >>
        2] = f;
        c[e + 4 >> 2] = h;
        e = c[a + 52 >> 2] | 0;
        j = (c[k >> 2] = f, +g[k >> 2]) - +g[e + 12 >> 2];
        l = (c[k >> 2] = h, +g[k >> 2]) - +g[e + 16 >> 2];
        m = +g[e + 24 >> 2];
        n = +g[e + 20 >> 2];
        o = +(j * m + l * n);
        p = +(m * l - j * n);
        e = a + 68 | 0;
        g[e >> 2] = o;
        g[e + 4 >> 2] = p;
        g[a + 104 >> 2] = +g[b + 28 >> 2];
        g[a + 96 >> 2] = 0;
        g[a + 100 >> 2] = 0;
        g[a + 84 >> 2] = +g[b + 32 >> 2];
        g[a + 88 >> 2] = +g[b + 36 >> 2];
        g[a + 92 >> 2] = 0;
        g[a + 108 >> 2] = 0;
        i = d;
        return
    }
    function wf(a, d) {
        a = a | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0;
        e = i;
        f = c[a + 52 >> 2] | 0;
        h = f + 4 | 0;
        j = b[h >> 1] | 0;
        if ((j & 2) == 0 ? (k = j & 65535, (k & 2 | 0) == 0) : 0) {
            b[h >> 1] = k | 2;
            g[f + 160 >> 2] = 0
        }
        f = d;
        d = c[f + 4 >> 2] | 0;
        k = a + 76 |
        0;
        c[k >> 2] = c[f >> 2];
        c[k + 4 >> 2] = d;
        i = e;
        return
    }
    function xf(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            U = 0,
            V = 0;
        e = i;
        f = c[b + 52 >> 2] | 0;
        h = c[f + 8 >> 2] | 0;
        j = b + 116 | 0;
        c[j >> 2] = h;
        l = f + 44 | 0;
        m = c[l >> 2] | 0;
        n = c[l + 4 >> 2] | 0;
        l = b + 128 | 0;
        c[l >> 2] = m;
        c[l + 4 >> 2] = n;
        o = +g[f + 136 >> 2];
        g[b + 136 >> 2] = o;
        p = +g[f + 144 >> 2];
        g[b + 140 >> 2] = p;
        l = c[d + 28 >> 2] | 0;
        q = l + (h * 12 | 0) | 0;
        r = +g[q >> 2];
        s = +g[q + 4 >> 2];
        t = +g[l + (h * 12 | 0) + 8 >> 2];
        l = d + 32 | 0;
        q = c[l >> 2] |
        0;
        u = q + (h * 12 | 0) | 0;
        v = +g[u >> 2];
        w = +g[u + 4 >> 2];
        x = +g[q + (h * 12 | 0) + 8 >> 2];
        y = +T(+t);
        z = +S(+t);
        t = +g[f + 132 >> 2];
        A = +g[b + 84 >> 2] * 6.2831854820251465;
        B = +g[d >> 2];
        C = B * t * A * A;
        D = B * (A * t * 2 * +g[b + 88 >> 2] + C);
        t = (c[k >> 2] = m, +g[k >> 2]);
        A = (c[k >> 2] = n, +g[k >> 2]);
        if (D != 0)
            E = 1 / D;
        else
            E = D;
        g[b + 108 >> 2] = E;
        D = C * E;
        g[b + 92 >> 2] = D;
        C = +g[b + 68 >> 2] - t;
        t = +g[b + 72 >> 2] - A;
        A = z * C - y * t;
        B = y * C + z * t;
        t = +A;
        z = +B;
        n = b + 120 | 0;
        g[n >> 2] = t;
        g[n + 4 >> 2] = z;
        z = E + (o + B * p * B);
        t = p * A;
        C = B * t;
        y = E + (o + A * t);
        t = z * y - C * C;
        if (t != 0)
            F = 1 / t;
        else
            F = t;
        t = C * F;
        g[b + 144 >> 2] = y * F;
        g[b + 148 >> 2] = t;
        g[b + 152 >> 2] = t;
        g[b + 156 >>
        2] = z * F;
        n = b + 160 | 0;
        F = r + A - +g[b + 76 >> 2];
        r = s + B - +g[b + 80 >> 2];
        s = +F;
        z = +r;
        m = n;
        g[m >> 2] = s;
        g[m + 4 >> 2] = z;
        g[n >> 2] = D * F;
        g[b + 164 >> 2] = D * r;
        r = x * .9800000190734863;
        n = b + 96 | 0;
        if ((a[d + 24 >> 0] | 0) == 0) {
            g[n >> 2] = 0;
            g[b + 100 >> 2] = 0;
            G = v;
            H = w;
            I = r;
            J = c[l >> 2] | 0;
            K = J + (h * 12 | 0) | 0;
            L = +G;
            M = +H;
            N = K;
            O = N;
            g[O >> 2] = L;
            P = N + 4 | 0;
            Q = P;
            g[Q >> 2] = M;
            R = c[j >> 2] | 0;
            U = c[l >> 2] | 0;
            V = U + (R * 12 | 0) + 8 | 0;
            g[V >> 2] = I;
            i = e;
            return
        } else {
            x = +g[d + 8 >> 2];
            D = x * +g[n >> 2];
            g[n >> 2] = D;
            n = b + 100 | 0;
            F = x * +g[n >> 2];
            g[n >> 2] = F;
            G = v + o * D;
            H = w + F * o;
            I = r + p * (F * A - D * B);
            J = c[l >> 2] | 0;
            K = J + (h * 12 | 0) | 0;
            L = +G;
            M = +H;
            N = K;
            O = N;
            g[O >>
            2] = L;
            P = N + 4 | 0;
            Q = P;
            g[Q >> 2] = M;
            R = c[j >> 2] | 0;
            U = c[l >> 2] | 0;
            V = U + (R * 12 | 0) + 8 | 0;
            g[V >> 2] = I;
            i = e;
            return
        }
    }
    function yf(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0;
        d = i;
        e = a + 116 | 0;
        f = c[e >> 2] | 0;
        h = b + 32 | 0;
        j = c[h >> 2] | 0;
        k = j + (f * 12 | 0) | 0;
        l = k;
        m = +g[l >> 2];
        n = +g[l + 4 >> 2];
        o = +g[j + (f * 12 | 0) + 8 >> 2];
        p = +g[a + 124 >> 2];
        q = +g[a + 120 >> 2];
        r = +g[a + 108 >> 2];
        f = a + 96 | 0;
        s = +g[f >> 2];
        j = a + 100 | 0;
        t = +g[j >> 2];
        u = -(m - o * p + +g[a + 160 >> 2] + r * s);
        v = -(n + o * q + +g[a + 164 >> 2] + r * t);
        r = +g[a + 148 >> 2] * u + +g[a + 156 >> 2] * v;
        l =
        f;
        w = +g[l >> 2];
        x = +g[l + 4 >> 2];
        y = s + (+g[a + 144 >> 2] * u + +g[a + 152 >> 2] * v);
        g[f >> 2] = y;
        v = r + t;
        g[j >> 2] = v;
        t = +g[b >> 2] * +g[a + 104 >> 2];
        r = v * v + y * y;
        if (r > t * t) {
            u = t / +Q(+r);
            r = y * u;
            g[f >> 2] = r;
            t = u * v;
            g[j >> 2] = t;
            z = r;
            A = t
        } else {
            z = y;
            A = v
        }
        v = z - w;
        w = A - x;
        x = +g[a + 136 >> 2];
        A = o + +g[a + 140 >> 2] * (w * q - v * p);
        p = +(m + v * x);
        v = +(n + w * x);
        a = k;
        g[a >> 2] = p;
        g[a + 4 >> 2] = v;
        g[(c[h >> 2] | 0) + ((c[e >> 2] | 0) * 12 | 0) + 8 >> 2] = A;
        i = d;
        return
    }
    function zf(a, b) {
        a = a | 0;
        b = b | 0;
        return 1
    }
    function Af(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0;
        d = b + 76 | 0;
        b = c[d + 4 >> 2] | 0;
        e = a;
        c[e >> 2] = c[d >> 2];
        c[e + 4 >> 2] = b;
        return
    }
    function Bf(a,
    b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0;
        d = c[b + 52 >> 2] | 0;
        e = +g[d + 24 >> 2];
        f = +g[b + 68 >> 2];
        h = +g[d + 20 >> 2];
        i = +g[b + 72 >> 2];
        j = f * h + e * i + +g[d + 16 >> 2];
        g[a >> 2] = +g[d + 12 >> 2] + (e * f - h * i);
        g[a + 4 >> 2] = j;
        return
    }
    function Cf(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        var d = 0;
        d = +g[b + 100 >> 2] * c;
        g[a >> 2] = +g[b + 96 >> 2] * c;
        g[a + 4 >> 2] = d;
        return
    }
    function Df(a, b) {
        a = a | 0;
        b = +b;
        return +(b * 0)
    }
    function Ef(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        c = a + 76 | 0;
        g[c >> 2] = +g[c >> 2] - +g[b >> 2];
        c = a + 80 | 0;
        g[c >> 2] = +g[c >> 2] - +g[b + 4 >> 2];
        return
    }
    function Ff(a) {
        a = a | 0;
        a = i;
        i = i + 16 | 0;
        Rm(1008, a);
        i = a;
        return
    }
    function Gf(a) {
        a = a | 0;
        return
    }
    function Hf(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function If(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        e = i;
        c[a + 8 >> 2] = b;
        c[a + 12 >> 2] = d;
        f = d + 12 | 0;
        h = +g[f >> 2];
        j = h - +g[b + 12 >> 2];
        h = +g[f + 4 >> 2] - +g[b + 16 >> 2];
        k = +g[b + 24 >> 2];
        l = +g[b + 20 >> 2];
        m = +(j * k + h * l);
        n = +(k * h - j * l);
        f = a + 20 | 0;
        g[f >> 2] = m;
        g[f + 4 >> 2] = n;
        g[a + 28 >> 2] = +g[d + 72 >> 2] - +g[b + 72 >> 2];
        i = e;
        return
    }
    function cm(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0;
        f = i;
        h = a + 4 | 0;
        j = c[(c[h >> 2] | 0) + 88 >> 2] | 0;
        k = c[j + (d << 2) >> 2] | c[j + (b << 2) >> 2] | c[j + (e << 2) >> 2];
        if ((k & 16 | 0) == 0) {
            i = f;
            return
        }
        j = c[a + 8 >> 2] | 0;
        if (!(lb[c[(c[j >> 2] | 0) + 16 >> 2] & 7](j, b, d, e) | 0)) {
            i = f;
            return
        }
        j = c[h >> 2] | 0;
        h = c[j + 96 >> 2] | 0;
        a = h + (b << 3) | 0;
        l = +g[a >> 2];
        m = h + (d << 3) | 0;
        n = +g[m >> 2];
        o = l - n;
        p = h + (b << 3) + 4 | 0;
        q = +g[p >> 2];
        r = h + (d << 3) + 4 | 0;
        s = +g[r >> 2];
        t = q - s;
        u = h + (e << 3) | 0;
        v = +g[u >> 2];
        w = n - v;
        x = h + (e << 3) + 4 | 0;
        n = +g[x >> 2];
        y = s - n;
        s = v - l;
        l = n - q;
        q = +g[j + 40 >> 2] * 4;
        if (o * o + t * t > q) {
            i = f;
            return
        }
        if (w * w + y * y > q) {
            i = f;
            return
        }
        if (s *
        s + l * l > q) {
            i = f;
            return
        }
        h = c[j + 144 >> 2] | 0;
        z = c[h + (b << 2) >> 2] | 0;
        A = c[h + (d << 2) >> 2] | 0;
        B = c[h + (e << 2) >> 2] | 0;
        h = j + 264 | 0;
        C = j + 268 | 0;
        D = c[C >> 2] | 0;
        E = j + 272 | 0;
        F = c[E >> 2] | 0;
        if ((D | 0) >= (F | 0) ? (G = (F | 0) == 0 ? 256 : F << 1, (F | 0) < (G | 0)) : 0) {
            F = j + 276 | 0;
            j = Em(c[F >> 2] | 0, G * 60 | 0) | 0;
            H = c[h >> 2] | 0;
            if ((H | 0) != 0) {
                An(j | 0, H | 0, (c[C >> 2] | 0) * 60 | 0) | 0;
                Fm(c[F >> 2] | 0, c[h >> 2] | 0, (c[E >> 2] | 0) * 60 | 0)
            }
            c[E >> 2] = G;
            c[h >> 2] = j;
            I = c[C >> 2] | 0
        } else
            I = D;
        c[C >> 2] = I + 1;
        C = c[h >> 2] | 0;
        c[C + (I * 60 | 0) >> 2] = b;
        c[C + (I * 60 | 0) + 4 >> 2] = d;
        c[C + (I * 60 | 0) + 8 >> 2] = e;
        c[C + (I * 60 | 0) + 12 >> 2] = k;
        if ((z | 0) == 0)
            J = 1;
        else
            J =
            +g[z + 16 >> 2];
        if ((A | 0) == 0)
            K = 1;
        else
            K = +g[A + 16 >> 2];
        q = J < K ? J : K;
        if ((B | 0) == 0)
            L = 1;
        else
            L = +g[B + 16 >> 2];
        g[C + (I * 60 | 0) + 16 >> 2] = q < L ? q : L;
        L = +g[a >> 2];
        q = +g[p >> 2];
        K = (L + +g[m >> 2] + +g[u >> 2]) * .3333333432674408;
        J = (q + +g[r >> 2] + +g[x >> 2]) * .3333333432674408;
        n = +(L - K);
        L = +(q - J);
        B = C + (I * 60 | 0) + 20 | 0;
        g[B >> 2] = n;
        g[B + 4 >> 2] = L;
        L = +(+g[m >> 2] - K);
        n = +(+g[r >> 2] - J);
        B = C + (I * 60 | 0) + 28 | 0;
        g[B >> 2] = L;
        g[B + 4 >> 2] = n;
        n = +(+g[u >> 2] - K);
        K = +(+g[x >> 2] - J);
        B = C + (I * 60 | 0) + 36 | 0;
        g[B >> 2] = n;
        g[B + 4 >> 2] = K;
        g[C + (I * 60 | 0) + 44 >> 2] = -(o * s + t * l);
        g[C + (I * 60 | 0) + 48 >> 2] = -(o * w + t * y);
        g[C + (I *
        60 | 0) + 52 >> 2] = -(w * s + y * l);
        l = +g[a >> 2];
        y = +g[r >> 2];
        s = +g[p >> 2];
        w = +g[m >> 2];
        t = +g[x >> 2];
        o = +g[u >> 2];
        g[C + (I * 60 | 0) + 56 >> 2] = s * o - l * t + (l * y - s * w + (w * t - y * o));
        i = f;
        return
    }
    function dm(a) {
        a = a | 0;
        return
    }
    function em(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function fm(a, b) {
        a = a | 0;
        b = b | 0;
        return (c[(c[a + 4 >> 2] | 0) + (b << 2) >> 2] & 4096 | 0) != 0 | 0
    }
    function gm(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        return 1
    }
    function hm(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        return 1
    }
    function im(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function jm(a, b) {
        a = a | 0;
        b = b | 0;
        return 1
    }
    function km(a) {
        a =
        a | 0;
        return
    }
    function lm(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function mm(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0;
        e = i;
        f = c[a + 4 >> 2] | 0;
        a = (f | 0) <= (b | 0);
        b = (f | 0) > (d | 0);
        if (a | b) {
            i = e;
            return b & a | 0
        } else {
            i = e;
            return 1
        }
        return 0
    }
    function nm(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0;
        f = i;
        g = c[a + 4 >> 2] | 0;
        a = (g | 0) > (b | 0);
        b = (g | 0) > (d | 0);
        if (a | b | (g | 0) > (e | 0)) {
            i = f;
            return (g | 0) <= (e | 0) | a & b ^ 1 | 0
        } else {
            i = f;
            return 0
        }
        return 0
    }
    function om(a) {
        a = a | 0;
        return
    }
    function pm(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function qm(a, b) {
        a = a | 0;
        b = b | 0;
        return 0
    }
    function rm(a) {
        a = a | 0;
        return 1
    }
    function sm(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0;
        e = i;
        f = a + 16 | 0;
        if ((c[f >> 2] | 0) <= 0) {
            g = 0;
            i = e;
            return g | 0
        }
        h = a + 12 | 0;
        a = 0;
        while (1) {
            j = c[(c[h >> 2] | 0) + (a << 2) >> 2] | 0;
            a = a + 1 | 0;
            if (hb[c[(c[j >> 2] | 0) + 16 >> 2] & 15](j, b, d) | 0) {
                g = 1;
                k = 5;
                break
            }
            if ((a | 0) >= (c[f >> 2] | 0)) {
                g = 0;
                k = 5;
                break
            }
        }
        if ((k | 0) == 5) {
            i = e;
            return g | 0
        }
        return 0
    }
    function tm(a, b, c, d, e, f) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        return
    }
    function um(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        return 0
    }
    function vm(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d |
        0;
        e = e | 0;
        var f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0;
        e = i;
        i = i + 16 | 0;
        f = e;
        g[b >> 2] = 3.4028234663852886E38;
        h = b + 4 | 0;
        g[h >> 2] = 3.4028234663852886E38;
        g[b + 8 >> 2] = -3.4028234663852886E38;
        j = b + 12 | 0;
        g[j >> 2] = -3.4028234663852886E38;
        k = a + 16 | 0;
        if ((c[k >> 2] | 0) <= 0) {
            i = e;
            return
        }
        l = a + 12 | 0;
        a = f + 4 | 0;
        m = b + 8 | 0;
        n = f + 8 | 0;
        o = f + 12 | 0;
        p = 0;
        do {
            q = c[(c[l >> 2] | 0) + (p << 2) >> 2] | 0;
            r = bb[c[(c[q >> 2] | 0) + 12 >> 2] & 7](q) | 0;
            if ((r | 0) > 0) {
                q = 0;
                do {
                    s = c[(c[l >> 2] | 0) + (p << 2) >> 2] | 0;
                    pb[c[(c[s >> 2] | 0) + 28 >> 2] & 31](s, f, d, q);
                    t = +g[b >> 2];
                    u = +g[f >> 2];
                    v = +g[h >>
                    2];
                    w = +g[a >> 2];
                    x = +(t < u ? t : u);
                    u = +(v < w ? v : w);
                    s = b;
                    g[s >> 2] = x;
                    g[s + 4 >> 2] = u;
                    u = +g[m >> 2];
                    x = +g[n >> 2];
                    w = +g[j >> 2];
                    v = +g[o >> 2];
                    t = +(u > x ? u : x);
                    x = +(w > v ? w : v);
                    s = m;
                    g[s >> 2] = t;
                    g[s + 4 >> 2] = x;
                    q = q + 1 | 0
                } while ((q | 0) != (r | 0))
            }
            p = p + 1 | 0
        } while ((p | 0) < (c[k >> 2] | 0));
        i = e;
        return
    }
    function wm(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        return
    }
    function xm(a) {
        a = a | 0;
        return
    }
    function ym(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function zm(a, b) {
        a = a | 0;
        b = b | 0;
        return 0
    }
    function Am(b, d, e) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0;
        f = i;
        g = b + 4 | 0;
        if ((c[g >> 2] | 0) != (d | 0)) {
            h = 0;
            i = f;
            return h |
            0
        }
        j = c[b + 8 >> 2] | 0;
        if (!(hb[c[(c[j >> 2] | 0) + 16 >> 2] & 15](j, b + 12 | 0, (c[d + 96 >> 2] | 0) + (e << 3) | 0) | 0)) {
            h = 1;
            i = f;
            return h | 0
        }
        d = c[g >> 2] | 0;
        Ak(d, e, c[(c[d + 88 >> 2] | 0) + (e << 2) >> 2] | ((a[b + 28 >> 0] | 0) != 0 ? 514 : 2));
        e = b + 32 | 0;
        c[e >> 2] = (c[e >> 2] | 0) + 1;
        h = 1;
        i = f;
        return h | 0
    }
    function Bm(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0;
        d = b + 4 | 0;
        c[(c[b >> 2] | 0) + 4 >> 2] = c[d >> 2];
        c[c[d >> 2] >> 2] = c[b >> 2];
        c[d >> 2] = b;
        c[b >> 2] = b;
        e = a + 12 | 0;
        c[d >> 2] = c[e >> 2];
        c[b >> 2] = a + 8;
        c[c[e >> 2] >> 2] = b;
        c[e >> 2] = b;
        return
    }
    function Cm(b) {
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0;
        d = i;
        e = b + 68 | 0;
        c[b + 72 >> 2] = e;
        c[e >> 2] =
        e;
        e = b + 8 | 0;
        c[e >> 2] = 128;
        c[b + 4 >> 2] = 0;
        f = Pm(1024) | 0;
        c[b >> 2] = f;
        xn(f | 0, 0, c[e >> 2] << 3 | 0) | 0;
        e = b + 12 | 0;
        b = e + 56 | 0;
        do {
            c[e >> 2] = 0;
            e = e + 4 | 0
        } while ((e | 0) < (b | 0));
        if ((a[8776] | 0) == 0) {
            g = 1;
            h = 0
        } else {
            i = d;
            return
        }
        while (1) {
            if ((g | 0) > (c[8072 + (h << 2) >> 2] | 0)) {
                e = h + 1 | 0;
                a[8128 + g >> 0] = e;
                j = e
            } else {
                a[8128 + g >> 0] = h;
                j = h
            }
            g = g + 1 | 0;
            if ((g | 0) == 641)
                break;
            else
                h = j
        }
        a[8776] = 1;
        i = d;
        return
    }
    function Dm(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0;
        b = i;
        d = a + 4 | 0;
        e = c[a >> 2] | 0;
        if ((c[d >> 2] | 0) > 0) {
            f = e;
            g = 0;
            while (1) {
                Qm(c[f + (g << 3) + 4 >> 2] | 0);
                g = g + 1 | 0;
                h = c[a >> 2] | 0;
                if ((g | 0) >= (c[d >>
                2] | 0)) {
                    j = h;
                    break
                } else
                    f = h
            }
        } else
            j = e;
        Qm(j);
        j = a + 68 | 0;
        Vm(j);
        e = a + 72 | 0;
        c[(c[j >> 2] | 0) + 4 >> 2] = c[e >> 2];
        c[c[e >> 2] >> 2] = c[j >> 2];
        c[e >> 2] = j;
        c[j >> 2] = j;
        i = b;
        return
    }
    function Em(a, b) {
        a = a | 0;
        b = b | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        e = i;
        if ((b | 0) == 0) {
            f = 0;
            i = e;
            return f | 0
        }
        if ((b | 0) > 640) {
            f = Tm(a + 68 | 0, b) | 0;
            i = e;
            return f | 0
        }
        g = d[8128 + b >> 0] | 0;
        b = a + (g << 2) + 12 | 0;
        h = c[b >> 2] | 0;
        if ((h | 0) != 0) {
            c[b >> 2] = c[h >> 2];
            f = h;
            i = e;
            return f | 0
        }
        h = a + 4 | 0;
        j = c[h >> 2] | 0;
        k = a + 8 | 0;
        if ((j | 0) == (c[k >> 2] | 0)) {
            l = c[a >> 2] | 0;
            m = j + 128 | 0;
            c[k >> 2] = m;
            k = Pm(m << 3) | 0;
            c[a >> 2] = k;
            An(k | 0, l | 0, c[h >> 2] << 3 | 0) | 0;
            xn((c[a >> 2] | 0) + (c[h >> 2] << 3) | 0, 0, 1024) | 0;
            Qm(l);
            n = c[h >> 2] | 0
        } else
            n = j;
        j = c[a >> 2] | 0;
        a = Pm(16384) | 0;
        l = j + (n << 3) + 4 | 0;
        c[l >> 2] = a;
        k = c[8072 + (g << 2) >> 2] | 0;
        c[j + (n << 3) >> 2] = k;
        n = (16384 / (k | 0) | 0) + -1 | 0;
        if ((n | 0) > 0) {
            j = a;
            g = 0;
            while (1) {
                m = g;
                g = g + 1 | 0;
                c[j + (aa(m, k) | 0) >> 2] = j + (aa(g, k) | 0);
                m = c[l >> 2] | 0;
                if ((g | 0) == (n | 0)) {
                    o = m;
                    break
                } else
                    j = m
            }
        } else
            o = a;
        c[o + (aa(n, k) | 0) >> 2] = 0;
        c[b >> 2] = c[c[l >> 2] >> 2];
        c[h >> 2] = (c[h >> 2] | 0) + 1;
        f = c[l >> 2] | 0;
        i = e;
        return f | 0
    }
    function Fm(a, b, e) {
        a = a | 0;
        b = b | 0;
        e = e | 0;
        var f = 0,
            g = 0;
        f = i;
        if ((e | 0) == 0) {
            i =
            f;
            return
        }
        if ((e | 0) > 640) {
            Um(a + 68 | 0, b);
            i = f;
            return
        } else {
            g = a + ((d[8128 + e >> 0] | 0) << 2) + 12 | 0;
            c[b >> 2] = c[g >> 2];
            c[g >> 2] = b;
            i = f;
            return
        }
    }
    function Gm(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0;
        d = +g[b + 16 >> 2];
        e = +g[b + 32 >> 2];
        f = +g[b + 20 >> 2];
        h = +g[b + 28 >> 2];
        i = d * e - f * h;
        j = +g[b + 24 >> 2];
        k = +g[b + 12 >> 2];
        l = f * j - e * k;
        m = h * k - d * j;
        n = +g[b >> 2];
        o = +g[b + 4 >> 2];
        p = +g[b + 8 >> 2];
        q = i * n + o * l + m * p;
        if (q != 0)
            r = 1 / q;
        else
            r = q;
        q = +g[c >> 2];
        s = +g[c + 4 >> 2];
        t = +g[c + 8 >> 2];
        g[a >> 2] = r * (i * q + s * l + m * t);
        g[a + 4 >> 2] = r * ((s * e - t * h) * n + o *
        (t * j - e * q) + (h * q - s * j) * p);
        g[a + 8 >> 2] = r * ((d * t - f * s) * n + o * (f * q - t * k) + (s * k - d * q) * p);
        return
    }
    function Hm(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0,
            k = 0;
        d = +g[b >> 2];
        e = +g[b + 12 >> 2];
        f = +g[b + 4 >> 2];
        h = +g[b + 16 >> 2];
        i = d * h - e * f;
        if (i != 0)
            j = 1 / i;
        else
            j = i;
        i = +g[c >> 2];
        k = +g[c + 4 >> 2];
        g[a >> 2] = j * (h * i - e * k);
        g[a + 4 >> 2] = j * (d * k - f * i);
        return
    }
    function Im(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0,
            f = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0;
        d = i;
        e = +g[a >> 2];
        f = +g[a + 12 >> 2];
        h = +g[a + 4 >> 2];
        j = +g[a + 16 >> 2];
        k = e * j - f * h;
        if (k != 0)
            l = 1 / k;
        else
            l = k;
        g[b >> 2] = j * l;
        j = -l;
        g[b + 12 >> 2] = f * j;
        g[b + 8 >> 2] = 0;
        g[b + 4 >> 2] = h * j;
        g[b + 16 >> 2] = e * l;
        a = b + 20 | 0;
        c[a + 0 >> 2] = 0;
        c[a + 4 >> 2] = 0;
        c[a + 8 >> 2] = 0;
        c[a + 12 >> 2] = 0;
        i = d;
        return
    }
    function Jm(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0,
            d = 0,
            e = 0,
            f = 0,
            h = 0,
            i = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0;
        c = +g[a + 16 >> 2];
        d = +g[a + 32 >> 2];
        e = c * d;
        f = +g[a + 20 >> 2];
        h = +g[a + 28 >> 2];
        i = +g[a + 24 >> 2];
        j = +g[a + 12 >> 2];
        k = d * j;
        l = h * j - c * i;
        m = +g[a >> 2];
        n = (e - f * h) * m + +g[a + 4 >> 2] * (f * i - k) + l * +g[a + 8 >> 2];
        if (n != 0)
            o = 1 / n;
        else
            o = n;
        g[b >> 2] = o * (e - h * h);
        e = o * (i * h - k);
        g[b + 4 >> 2] = e;
        k = o * l;
        g[b + 8 >> 2] = k;
        g[b + 12 >> 2] = e;
        g[b + 16 >> 2] = o * (m * d - i * i);
        d = o * (j * i - m * h);
        g[b + 20 >> 2] = d;
        g[b + 24 >> 2] = k;
        g[b +
        28 >> 2] = d;
        g[b + 32 >> 2] = o * (m * c - j * j);
        return
    }
    function Km(a) {
        a = a | 0;
        return
    }
    function Lm(a) {
        a = a | 0;
        return
    }
    function Mm(a) {
        a = a | 0;
        return 0
    }
    function Nm(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        b = i;
        c = on(a) | 0;
        i = b;
        return c | 0
    }
    function Om(a, b) {
        a = a | 0;
        b = b | 0;
        b = i;
        pn(a);
        i = b;
        return
    }
    function Pm(a) {
        a = a | 0;
        var b = 0,
            d = 0;
        b = i;
        c[2214] = (c[2214] | 0) + 1;
        d = nb[c[2208] & 31](a, c[2212] | 0) | 0;
        i = b;
        return d | 0
    }
    function Qm(a) {
        a = a | 0;
        var b = 0;
        b = i;
        c[2214] = (c[2214] | 0) + -1;
        gb[c[2210] & 63](a, c[2212] | 0);
        i = b;
        return
    }
    function Rm(a, b) {
        a = a | 0;
        b = b | 0;
        return
    }
    function Sm(a) {
        a = a | 0;
        return a +
        43 & -32 | 0
    }
    function Tm(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0,
            e = 0;
        d = i;
        e = Pm(b + 44 | 0) | 0;
        c[e >> 2] = e;
        b = e + 43 & -32;
        c[b + -4 >> 2] = e;
        c[e + 4 >> 2] = a;
        c[e >> 2] = c[a >> 2];
        c[(c[a >> 2] | 0) + 4 >> 2] = e;
        c[a >> 2] = e;
        i = d;
        return b | 0
    }
    function Um(a, b) {
        a = a | 0;
        b = b | 0;
        var d = 0;
        a = i;
        d = c[b + -4 >> 2] | 0;
        b = d + 4 | 0;
        c[(c[d >> 2] | 0) + 4 >> 2] = c[b >> 2];
        c[c[b >> 2] >> 2] = c[d >> 2];
        c[b >> 2] = d;
        c[d >> 2] = d;
        Qm(d);
        i = a;
        return
    }
    function Vm(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0;
        b = i;
        d = a + 4 | 0;
        e = c[d >> 2] | 0;
        if ((e | 0) == (a | 0)) {
            i = b;
            return
        } else
            f = e;
        do {
            e = f + 4 | 0;
            c[(c[f >> 2] | 0) + 4 >> 2] = c[e >> 2];
            c[c[e >> 2] >> 2] = c[f >> 2];
            c[e >> 2] = f;
            c[f >> 2] = f;
            Qm(f);
            f = c[d >> 2] | 0
        } while ((f | 0) != (a | 0));
        i = b;
        return
    }
    function Wm(a) {
        a = a | 0;
        c[a + 102400 >> 2] = 0;
        c[a + 102404 >> 2] = 0;
        c[a + 102408 >> 2] = 0;
        c[a + 102796 >> 2] = 0;
        return
    }
    function Xm(a) {
        a = a | 0;
        return
    }
    function Ym(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0;
        e = i;
        f = d + 3 & -4;
        d = b + 102796 | 0;
        g = c[d >> 2] | 0;
        h = b + (g * 12 | 0) + 102412 | 0;
        c[b + (g * 12 | 0) + 102416 >> 2] = f;
        j = b + 102400 | 0;
        k = c[j >> 2] | 0;
        if ((k + f | 0) > 102400) {
            c[h >> 2] = Pm(f) | 0;
            a[b + (g * 12 | 0) + 102420 >> 0] = 1
        } else {
            c[h >> 2] = b + k;
            a[b + (g * 12 | 0) + 102420 >> 0] = 0;
            c[j >> 2] = (c[j >> 2] | 0) + f
        }
        j = b + 102404 | 0;
        g = (c[j >> 2] |
        0) + f | 0;
        c[j >> 2] = g;
        j = b + 102408 | 0;
        b = c[j >> 2] | 0;
        c[j >> 2] = (b | 0) > (g | 0) ? b : g;
        c[d >> 2] = (c[d >> 2] | 0) + 1;
        i = e;
        return c[h >> 2] | 0
    }
    function Zm(b, d, e) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0;
        d = i;
        f = (c[b + 102796 >> 2] | 0) + -1 | 0;
        g = b + (f * 12 | 0) + 102412 | 0;
        h = b + (f * 12 | 0) + 102416 | 0;
        j = e - (c[h >> 2] | 0) | 0;
        if ((j | 0) <= 0) {
            k = c[g >> 2] | 0;
            i = d;
            return k | 0
        }
        l = b + (f * 12 | 0) + 102420 | 0;
        do if ((a[l >> 0] | 0) == 0) {
            f = b + 102400 | 0;
            m = (c[f >> 2] | 0) + j | 0;
            if ((m | 0) > 102400) {
                n = Pm(e) | 0;
                An(n | 0, c[g >> 2] | 0, c[h >> 2] | 0) | 0;
                c[f >> 2] = (c[f >> 2] | 0) - (c[h >> 2] | 0);
                c[g >> 2] = n;
                a[l >> 0] = 1;
                break
            } else {
                c[f >>
                2] = m;
                m = b + 102404 | 0;
                f = (c[m >> 2] | 0) + j | 0;
                c[m >> 2] = f;
                m = b + 102408 | 0;
                n = c[m >> 2] | 0;
                c[m >> 2] = (n | 0) > (f | 0) ? n : f;
                break
            }
        } else {
            f = Pm(e) | 0;
            An(f | 0, c[g >> 2] | 0, c[h >> 2] | 0) | 0;
            Qm(c[g >> 2] | 0);
            c[g >> 2] = f
        }
        while (0);
        c[h >> 2] = e;
        k = c[g >> 2] | 0;
        i = d;
        return k | 0
    }
    function _m(b, d) {
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        e = i;
        f = b + 102796 | 0;
        g = c[f >> 2] | 0;
        h = g + -1 | 0;
        if ((a[b + (h * 12 | 0) + 102420 >> 0] | 0) == 0) {
            j = b + (h * 12 | 0) + 102416 | 0;
            k = b + 102400 | 0;
            c[k >> 2] = (c[k >> 2] | 0) - (c[j >> 2] | 0);
            l = j;
            m = g
        } else {
            Qm(d);
            l = b + (h * 12 | 0) + 102416 | 0;
            m = c[f >> 2] | 0
        }
        h = b + 102404 | 0;
        c[h >> 2] = (c[h >>
        2] | 0) - (c[l >> 2] | 0);
        c[f >> 2] = m + -1;
        i = e;
        return
    }
    function $m(a) {
        a = a | 0;
        return
    }
    function an(a) {
        a = a | 0;
        return
    }
    function bn(a) {
        a = a | 0;
        return
    }
    function cn(a) {
        a = a | 0;
        return
    }
    function dn(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function en(a) {
        a = a | 0;
        var b = 0;
        b = i;
        sn(a);
        i = b;
        return
    }
    function fn(a, b, d) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0;
        e = i;
        i = i + 64 | 0;
        f = e;
        if ((a | 0) == (b | 0)) {
            g = 1;
            i = e;
            return g | 0
        }
        if ((b | 0) == 0) {
            g = 0;
            i = e;
            return g | 0
        }
        h = jn(b, 8928, 8984, 0) | 0;
        if ((h | 0) == 0) {
            g = 0;
            i = e;
            return g | 0
        }
        b = f + 0 | 0;
        j = b + 56 | 0;
        do {
            c[b >> 2] = 0;
            b = b + 4 | 0
        } while ((b |
        0) < (j | 0));
        c[f >> 2] = h;
        c[f + 8 >> 2] = a;
        c[f + 12 >> 2] = -1;
        c[f + 48 >> 2] = 1;
        pb[c[(c[h >> 2] | 0) + 28 >> 2] & 31](h, f, c[d >> 2] | 0, 1);
        if ((c[f + 24 >> 2] | 0) != 1) {
            g = 0;
            i = e;
            return g | 0
        }
        c[d >> 2] = c[f + 16 >> 2];
        g = 1;
        i = e;
        return g | 0
    }
    function gn(b, d, e, f) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0;
        g = i;
        if ((c[d + 8 >> 2] | 0) != (b | 0)) {
            i = g;
            return
        }
        b = d + 16 | 0;
        h = c[b >> 2] | 0;
        if ((h | 0) == 0) {
            c[b >> 2] = e;
            c[d + 24 >> 2] = f;
            c[d + 36 >> 2] = 1;
            i = g;
            return
        }
        if ((h | 0) != (e | 0)) {
            e = d + 36 | 0;
            c[e >> 2] = (c[e >> 2] | 0) + 1;
            c[d + 24 >> 2] = 2;
            a[d + 54 >> 0] = 1;
            i = g;
            return
        }
        e = d + 24 | 0;
        if ((c[e >> 2] | 0) != 2) {
            i = g;
            return
        }
        c[e >> 2] = f;
        i = g;
        return
    }
    function hn(b, d, e, f) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g = 0,
            h = 0;
        g = i;
        if ((b | 0) != (c[d + 8 >> 2] | 0)) {
            h = c[b + 8 >> 2] | 0;
            pb[c[(c[h >> 2] | 0) + 28 >> 2] & 31](h, d, e, f);
            i = g;
            return
        }
        h = d + 16 | 0;
        b = c[h >> 2] | 0;
        if ((b | 0) == 0) {
            c[h >> 2] = e;
            c[d + 24 >> 2] = f;
            c[d + 36 >> 2] = 1;
            i = g;
            return
        }
        if ((b | 0) != (e | 0)) {
            e = d + 36 | 0;
            c[e >> 2] = (c[e >> 2] | 0) + 1;
            c[d + 24 >> 2] = 2;
            a[d + 54 >> 0] = 1;
            i = g;
            return
        }
        e = d + 24 | 0;
        if ((c[e >> 2] | 0) != 2) {
            i = g;
            return
        }
        c[e >> 2] = f;
        i = g;
        return
    }
    function jn(d, e, f, g) {
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0;
        h = i;
        i = i + 64 | 0;
        j = h;
        k = c[d >> 2] | 0;
        l = d + (c[k +
        -8 >> 2] | 0) | 0;
        m = c[k + -4 >> 2] | 0;
        c[j >> 2] = f;
        c[j + 4 >> 2] = d;
        c[j + 8 >> 2] = e;
        c[j + 12 >> 2] = g;
        g = j + 16 | 0;
        e = j + 20 | 0;
        d = j + 24 | 0;
        k = j + 28 | 0;
        n = j + 32 | 0;
        o = j + 40 | 0;
        p = (m | 0) == (f | 0);
        f = g + 0 | 0;
        q = f + 36 | 0;
        do {
            c[f >> 2] = 0;
            f = f + 4 | 0
        } while ((f | 0) < (q | 0));
        b[g + 36 >> 1] = 0;
        a[g + 38 >> 0] = 0;
        if (p) {
            c[j + 48 >> 2] = 1;
            mb[c[(c[m >> 2] | 0) + 20 >> 2] & 7](m, j, l, l, 1, 0);
            r = (c[d >> 2] | 0) == 1 ? l : 0;
            i = h;
            return r | 0
        }
        cb[c[(c[m >> 2] | 0) + 24 >> 2] & 3](m, j, l, 1, 0);
        l = c[j + 36 >> 2] | 0;
        if ((l | 0) == 1) {
            if ((c[d >> 2] | 0) != 1) {
                if ((c[o >> 2] | 0) != 0) {
                    r = 0;
                    i = h;
                    return r | 0
                }
                if ((c[k >> 2] | 0) != 1) {
                    r = 0;
                    i = h;
                    return r | 0
                }
                if ((c[n >> 2] | 0) != 1) {
                    r =
                    0;
                    i = h;
                    return r | 0
                }
            }
            r = c[g >> 2] | 0;
            i = h;
            return r | 0
        } else if ((l | 0) == 0) {
            if ((c[o >> 2] | 0) != 1) {
                r = 0;
                i = h;
                return r | 0
            }
            if ((c[k >> 2] | 0) != 1) {
                r = 0;
                i = h;
                return r | 0
            }
            r = (c[n >> 2] | 0) == 1 ? c[e >> 2] | 0 : 0;
            i = h;
            return r | 0
        } else {
            r = 0;
            i = h;
            return r | 0
        }
        return 0
    }
    function kn(b, d, e, f, g) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0;
        h = i;
        if ((b | 0) == (c[d + 8 >> 2] | 0)) {
            if ((c[d + 4 >> 2] | 0) != (e | 0)) {
                i = h;
                return
            }
            j = d + 28 | 0;
            if ((c[j >> 2] | 0) == 1) {
                i = h;
                return
            }
            c[j >> 2] = f;
            i = h;
            return
        }
        if ((b | 0) != (c[d >> 2] | 0)) {
            j = c[b + 8 >> 2] | 0;
            cb[c[(c[j >> 2] | 0) + 24 >> 2] & 3](j, d, e, f,
            g);
            i = h;
            return
        }
        if ((c[d + 16 >> 2] | 0) != (e | 0) ? (j = d + 20 | 0, (c[j >> 2] | 0) != (e | 0)) : 0) {
            c[d + 32 >> 2] = f;
            k = d + 44 | 0;
            if ((c[k >> 2] | 0) == 4) {
                i = h;
                return
            }
            l = d + 52 | 0;
            a[l >> 0] = 0;
            m = d + 53 | 0;
            a[m >> 0] = 0;
            n = c[b + 8 >> 2] | 0;
            mb[c[(c[n >> 2] | 0) + 20 >> 2] & 7](n, d, e, e, 1, g);
            if ((a[m >> 0] | 0) != 0) {
                if ((a[l >> 0] | 0) == 0) {
                    o = 1;
                    p = 13
                }
            } else {
                o = 0;
                p = 13
            }
            do if ((p | 0) == 13) {
                c[j >> 2] = e;
                l = d + 40 | 0;
                c[l >> 2] = (c[l >> 2] | 0) + 1;
                if ((c[d + 36 >> 2] | 0) == 1 ? (c[d + 24 >> 2] | 0) == 2 : 0) {
                    a[d + 54 >> 0] = 1;
                    if (o)
                        break
                } else
                    p = 16;
                if ((p | 0) == 16 ? o : 0)
                    break;
                c[k >> 2] = 4;
                i = h;
                return
            }
            while (0);
            c[k >> 2] = 3;
            i = h;
            return
        }
        if ((f | 0) != 1) {
            i =
            h;
            return
        }
        c[d + 32 >> 2] = 1;
        i = h;
        return
    }
    function ln(b, d, e, f, g) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        var h = 0;
        g = i;
        if ((c[d + 8 >> 2] | 0) == (b | 0)) {
            if ((c[d + 4 >> 2] | 0) != (e | 0)) {
                i = g;
                return
            }
            h = d + 28 | 0;
            if ((c[h >> 2] | 0) == 1) {
                i = g;
                return
            }
            c[h >> 2] = f;
            i = g;
            return
        }
        if ((c[d >> 2] | 0) != (b | 0)) {
            i = g;
            return
        }
        if ((c[d + 16 >> 2] | 0) != (e | 0) ? (b = d + 20 | 0, (c[b >> 2] | 0) != (e | 0)) : 0) {
            c[d + 32 >> 2] = f;
            c[b >> 2] = e;
            e = d + 40 | 0;
            c[e >> 2] = (c[e >> 2] | 0) + 1;
            if ((c[d + 36 >> 2] | 0) == 1 ? (c[d + 24 >> 2] | 0) == 2 : 0)
                a[d + 54 >> 0] = 1;
            c[d + 44 >> 2] = 4;
            i = g;
            return
        }
        if ((f | 0) != 1) {
            i = g;
            return
        }
        c[d + 32 >> 2] = 1;
        i = g;
        return
    }
    function mn(b,
    d, e, f, g, h) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        h = h | 0;
        var j = 0,
            k = 0,
            l = 0;
        j = i;
        if ((b | 0) != (c[d + 8 >> 2] | 0)) {
            k = c[b + 8 >> 2] | 0;
            mb[c[(c[k >> 2] | 0) + 20 >> 2] & 7](k, d, e, f, g, h);
            i = j;
            return
        }
        a[d + 53 >> 0] = 1;
        if ((c[d + 4 >> 2] | 0) != (f | 0)) {
            i = j;
            return
        }
        a[d + 52 >> 0] = 1;
        f = d + 16 | 0;
        h = c[f >> 2] | 0;
        if ((h | 0) == 0) {
            c[f >> 2] = e;
            c[d + 24 >> 2] = g;
            c[d + 36 >> 2] = 1;
            if (!((g | 0) == 1 ? (c[d + 48 >> 2] | 0) == 1 : 0)) {
                i = j;
                return
            }
            a[d + 54 >> 0] = 1;
            i = j;
            return
        }
        if ((h | 0) != (e | 0)) {
            e = d + 36 | 0;
            c[e >> 2] = (c[e >> 2] | 0) + 1;
            a[d + 54 >> 0] = 1;
            i = j;
            return
        }
        e = d + 24 | 0;
        h = c[e >> 2] | 0;
        if ((h | 0) == 2) {
            c[e >> 2] = g;
            l = g
        } else
            l = h;
        if (!((l | 0) ==
        1 ? (c[d + 48 >> 2] | 0) == 1 : 0)) {
            i = j;
            return
        }
        a[d + 54 >> 0] = 1;
        i = j;
        return
    }
    function nn(b, d, e, f, g, h) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        h = h | 0;
        var j = 0;
        h = i;
        if ((c[d + 8 >> 2] | 0) != (b | 0)) {
            i = h;
            return
        }
        a[d + 53 >> 0] = 1;
        if ((c[d + 4 >> 2] | 0) != (f | 0)) {
            i = h;
            return
        }
        a[d + 52 >> 0] = 1;
        f = d + 16 | 0;
        b = c[f >> 2] | 0;
        if ((b | 0) == 0) {
            c[f >> 2] = e;
            c[d + 24 >> 2] = g;
            c[d + 36 >> 2] = 1;
            if (!((g | 0) == 1 ? (c[d + 48 >> 2] | 0) == 1 : 0)) {
                i = h;
                return
            }
            a[d + 54 >> 0] = 1;
            i = h;
            return
        }
        if ((b | 0) != (e | 0)) {
            e = d + 36 | 0;
            c[e >> 2] = (c[e >> 2] | 0) + 1;
            a[d + 54 >> 0] = 1;
            i = h;
            return
        }
        e = d + 24 | 0;
        b = c[e >> 2] | 0;
        if ((b | 0) == 2) {
            c[e >> 2] = g;
            j = g
        } else
            j = b;
        if (!((j |
        0) == 1 ? (c[d + 48 >> 2] | 0) == 1 : 0)) {
            i = h;
            return
        }
        a[d + 54 >> 0] = 1;
        i = h;
        return
    }
    function on(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0,
            L = 0,
            M = 0,
            N = 0,
            O = 0,
            P = 0,
            Q = 0,
            R = 0,
            S = 0,
            T = 0,
            U = 0,
            V = 0,
            W = 0,
            X = 0,
            Y = 0,
            Z = 0,
            _ = 0,
            $ = 0,
            aa = 0,
            ba = 0,
            ca = 0,
            da = 0,
            ea = 0,
            fa = 0,
            ga = 0,
            ha = 0,
            ia = 0,
            ja = 0,
            ka = 0,
            la = 0,
            ma = 0,
            na = 0,
            oa = 0,
            pa = 0,
            qa = 0,
            ra = 0,
            sa = 0,
            ta = 0,
            ua = 0,
            va = 0,
            wa = 0,
            xa = 0,
            ya = 0,
            za = 0,
            Aa = 0,
            Ba = 0,
            Ca = 0,
            Ea = 0,
            Fa = 0,
            Ha = 0,
            Ia = 0,
            Ja = 0,
            Ka = 0,
            La = 0;
        b = i;
        do if (a >>> 0 < 245) {
            if (a >>> 0 <
            11)
                d = 16;
            else
                d = a + 11 & -8;
            e = d >>> 3;
            f = c[2284] | 0;
            g = f >>> e;
            if ((g & 3 | 0) != 0) {
                h = (g & 1 ^ 1) + e | 0;
                j = h << 1;
                k = 9176 + (j << 2) | 0;
                l = 9176 + (j + 2 << 2) | 0;
                j = c[l >> 2] | 0;
                m = j + 8 | 0;
                n = c[m >> 2] | 0;
                do if ((k | 0) != (n | 0)) {
                    if (n >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                        Ua();
                    o = n + 12 | 0;
                    if ((c[o >> 2] | 0) == (j | 0)) {
                        c[o >> 2] = k;
                        c[l >> 2] = n;
                        break
                    } else
                        Ua()
                } else
                    c[2284] = f & ~(1 << h);
                while (0);
                n = h << 3;
                c[j + 4 >> 2] = n | 3;
                l = j + (n | 4) | 0;
                c[l >> 2] = c[l >> 2] | 1;
                p = m;
                i = b;
                return p | 0
            }
            if (d >>> 0 > (c[9144 >> 2] | 0) >>> 0) {
                if ((g | 0) != 0) {
                    l = 2 << e;
                    n = g << e & (l | 0 - l);
                    l = (n & 0 - n) + -1 | 0;
                    n = l >>> 12 & 16;
                    k = l >>> n;
                    l = k >>> 5 & 8;
                    o = k >>> l;
                    k = o >>> 2 &
                    4;
                    q = o >>> k;
                    o = q >>> 1 & 2;
                    r = q >>> o;
                    q = r >>> 1 & 1;
                    s = (l | n | k | o | q) + (r >>> q) | 0;
                    q = s << 1;
                    r = 9176 + (q << 2) | 0;
                    o = 9176 + (q + 2 << 2) | 0;
                    q = c[o >> 2] | 0;
                    k = q + 8 | 0;
                    n = c[k >> 2] | 0;
                    do if ((r | 0) != (n | 0)) {
                        if (n >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                            Ua();
                        l = n + 12 | 0;
                        if ((c[l >> 2] | 0) == (q | 0)) {
                            c[l >> 2] = r;
                            c[o >> 2] = n;
                            break
                        } else
                            Ua()
                    } else
                        c[2284] = f & ~(1 << s);
                    while (0);
                    f = s << 3;
                    n = f - d | 0;
                    c[q + 4 >> 2] = d | 3;
                    o = q + d | 0;
                    c[q + (d | 4) >> 2] = n | 1;
                    c[q + f >> 2] = n;
                    f = c[9144 >> 2] | 0;
                    if ((f | 0) != 0) {
                        r = c[9156 >> 2] | 0;
                        e = f >>> 3;
                        f = e << 1;
                        g = 9176 + (f << 2) | 0;
                        m = c[2284] | 0;
                        j = 1 << e;
                        if ((m & j | 0) != 0) {
                            e = 9176 + (f + 2 << 2) | 0;
                            h = c[e >> 2] | 0;
                            if (h >>> 0 <
                            (c[9152 >> 2] | 0) >>> 0)
                                Ua();
                            else {
                                t = e;
                                u = h
                            }
                        } else {
                            c[2284] = m | j;
                            t = 9176 + (f + 2 << 2) | 0;
                            u = g
                        }
                        c[t >> 2] = r;
                        c[u + 12 >> 2] = r;
                        c[r + 8 >> 2] = u;
                        c[r + 12 >> 2] = g
                    }
                    c[9144 >> 2] = n;
                    c[9156 >> 2] = o;
                    p = k;
                    i = b;
                    return p | 0
                }
                o = c[9140 >> 2] | 0;
                if ((o | 0) != 0) {
                    n = (o & 0 - o) + -1 | 0;
                    o = n >>> 12 & 16;
                    g = n >>> o;
                    n = g >>> 5 & 8;
                    r = g >>> n;
                    g = r >>> 2 & 4;
                    f = r >>> g;
                    r = f >>> 1 & 2;
                    j = f >>> r;
                    f = j >>> 1 & 1;
                    m = c[9440 + ((n | o | g | r | f) + (j >>> f) << 2) >> 2] | 0;
                    f = (c[m + 4 >> 2] & -8) - d | 0;
                    j = m;
                    r = m;
                    while (1) {
                        m = c[j + 16 >> 2] | 0;
                        if ((m | 0) == 0) {
                            g = c[j + 20 >> 2] | 0;
                            if ((g | 0) == 0)
                                break;
                            else
                                v = g
                        } else
                            v = m;
                        m = (c[v + 4 >> 2] & -8) - d | 0;
                        g = m >>> 0 < f >>> 0;
                        f = g ? m : f;
                        j = v;
                        r = g ? v : r
                    }
                    j = c[9152 >> 2] | 0;
                    if (r >>> 0 < j >>> 0)
                        Ua();
                    k = r + d | 0;
                    if (!(r >>> 0 < k >>> 0))
                        Ua();
                    q = c[r + 24 >> 2] | 0;
                    s = c[r + 12 >> 2] | 0;
                    do if ((s | 0) == (r | 0)) {
                        g = r + 20 | 0;
                        m = c[g >> 2] | 0;
                        if ((m | 0) == 0) {
                            o = r + 16 | 0;
                            n = c[o >> 2] | 0;
                            if ((n | 0) == 0) {
                                w = 0;
                                break
                            } else {
                                x = n;
                                y = o
                            }
                        } else {
                            x = m;
                            y = g
                        }
                        while (1) {
                            g = x + 20 | 0;
                            m = c[g >> 2] | 0;
                            if ((m | 0) != 0) {
                                x = m;
                                y = g;
                                continue
                            }
                            g = x + 16 | 0;
                            m = c[g >> 2] | 0;
                            if ((m | 0) == 0)
                                break;
                            else {
                                x = m;
                                y = g
                            }
                        }
                        if (y >>> 0 < j >>> 0)
                            Ua();
                        else {
                            c[y >> 2] = 0;
                            w = x;
                            break
                        }
                    } else {
                        g = c[r + 8 >> 2] | 0;
                        if (g >>> 0 < j >>> 0)
                            Ua();
                        m = g + 12 | 0;
                        if ((c[m >> 2] | 0) != (r | 0))
                            Ua();
                        o = s + 8 | 0;
                        if ((c[o >> 2] | 0) == (r | 0)) {
                            c[m >> 2] =
                            s;
                            c[o >> 2] = g;
                            w = s;
                            break
                        } else
                            Ua()
                    }
                    while (0);
                    do if ((q | 0) != 0) {
                        s = c[r + 28 >> 2] | 0;
                        j = 9440 + (s << 2) | 0;
                        if ((r | 0) == (c[j >> 2] | 0)) {
                            c[j >> 2] = w;
                            if ((w | 0) == 0) {
                                c[9140 >> 2] = c[9140 >> 2] & ~(1 << s);
                                break
                            }
                        } else {
                            if (q >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                Ua();
                            s = q + 16 | 0;
                            if ((c[s >> 2] | 0) == (r | 0))
                                c[s >> 2] = w;
                            else
                                c[q + 20 >> 2] = w;
                            if ((w | 0) == 0)
                                break
                        }
                        if (w >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                            Ua();
                        c[w + 24 >> 2] = q;
                        s = c[r + 16 >> 2] | 0;
                        do if ((s | 0) != 0)
                            if (s >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                Ua();
                            else {
                                c[w + 16 >> 2] = s;
                                c[s + 24 >> 2] = w;
                                break
                            }
                        while (0);
                        s = c[r + 20 >> 2] | 0;
                        if ((s | 0) != 0)
                            if (s >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                Ua();
                            else {
                                c[w + 20 >> 2] = s;
                                c[s + 24 >> 2] = w;
                                break
                            }
                    }
                    while (0);
                    if (f >>> 0 < 16) {
                        q = f + d | 0;
                        c[r + 4 >> 2] = q | 3;
                        s = r + (q + 4) | 0;
                        c[s >> 2] = c[s >> 2] | 1
                    } else {
                        c[r + 4 >> 2] = d | 3;
                        c[r + (d | 4) >> 2] = f | 1;
                        c[r + (f + d) >> 2] = f;
                        s = c[9144 >> 2] | 0;
                        if ((s | 0) != 0) {
                            q = c[9156 >> 2] | 0;
                            j = s >>> 3;
                            s = j << 1;
                            g = 9176 + (s << 2) | 0;
                            o = c[2284] | 0;
                            m = 1 << j;
                            if ((o & m | 0) != 0) {
                                j = 9176 + (s + 2 << 2) | 0;
                                n = c[j >> 2] | 0;
                                if (n >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                    Ua();
                                else {
                                    z = j;
                                    A = n
                                }
                            } else {
                                c[2284] = o | m;
                                z = 9176 + (s + 2 << 2) | 0;
                                A = g
                            }
                            c[z >> 2] = q;
                            c[A + 12 >> 2] = q;
                            c[q + 8 >> 2] = A;
                            c[q + 12 >> 2] = g
                        }
                        c[9144 >> 2] = f;
                        c[9156 >> 2] = k
                    }
                    p = r + 8 | 0;
                    i = b;
                    return p | 0
                } else
                    B = d
            } else
                B =
                d
        } else if (!(a >>> 0 > 4294967231)) {
            g = a + 11 | 0;
            q = g & -8;
            s = c[9140 >> 2] | 0;
            if ((s | 0) != 0) {
                m = 0 - q | 0;
                o = g >>> 8;
                if ((o | 0) != 0)
                    if (q >>> 0 > 16777215)
                        C = 31;
                    else {
                        g = (o + 1048320 | 0) >>> 16 & 8;
                        n = o << g;
                        o = (n + 520192 | 0) >>> 16 & 4;
                        j = n << o;
                        n = (j + 245760 | 0) >>> 16 & 2;
                        h = 14 - (o | g | n) + (j << n >>> 15) | 0;
                        C = q >>> (h + 7 | 0) & 1 | h << 1
                    }
                else
                    C = 0;
                h = c[9440 + (C << 2) >> 2] | 0;
                a:
                do if ((h | 0) == 0) {
                    D = m;
                    E = 0;
                    F = 0
                } else {
                    if ((C | 0) == 31)
                        G = 0;
                    else
                        G = 25 - (C >>> 1) | 0;
                    n = m;
                    j = 0;
                    g = q << G;
                    o = h;
                    e = 0;
                    while (1) {
                        l = c[o + 4 >> 2] & -8;
                        H = l - q | 0;
                        if (H >>> 0 < n >>> 0)
                            if ((l | 0) == (q | 0)) {
                                D = H;
                                E = o;
                                F = o;
                                break a
                            } else {
                                I = H;
                                J = o
                            }
                        else {
                            I = n;
                            J = e
                        }
                        H = c[o +
                        20 >> 2] | 0;
                        o = c[o + (g >>> 31 << 2) + 16 >> 2] | 0;
                        l = (H | 0) == 0 | (H | 0) == (o | 0) ? j : H;
                        if ((o | 0) == 0) {
                            D = I;
                            E = l;
                            F = J;
                            break
                        } else {
                            n = I;
                            j = l;
                            g = g << 1;
                            e = J
                        }
                    }
                }
                while (0);
                if ((E | 0) == 0 & (F | 0) == 0) {
                    h = 2 << C;
                    m = s & (h | 0 - h);
                    if ((m | 0) == 0) {
                        B = q;
                        break
                    }
                    h = (m & 0 - m) + -1 | 0;
                    m = h >>> 12 & 16;
                    r = h >>> m;
                    h = r >>> 5 & 8;
                    k = r >>> h;
                    r = k >>> 2 & 4;
                    f = k >>> r;
                    k = f >>> 1 & 2;
                    e = f >>> k;
                    f = e >>> 1 & 1;
                    K = c[9440 + ((h | m | r | k | f) + (e >>> f) << 2) >> 2] | 0
                } else
                    K = E;
                if ((K | 0) == 0) {
                    L = D;
                    M = F
                } else {
                    f = D;
                    e = K;
                    k = F;
                    while (1) {
                        r = (c[e + 4 >> 2] & -8) - q | 0;
                        m = r >>> 0 < f >>> 0;
                        h = m ? r : f;
                        r = m ? e : k;
                        m = c[e + 16 >> 2] | 0;
                        if ((m | 0) != 0) {
                            f = h;
                            e = m;
                            k = r;
                            continue
                        }
                        e = c[e + 20 >> 2] |
                        0;
                        if ((e | 0) == 0) {
                            L = h;
                            M = r;
                            break
                        } else {
                            f = h;
                            k = r
                        }
                    }
                }
                if ((M | 0) != 0 ? L >>> 0 < ((c[9144 >> 2] | 0) - q | 0) >>> 0 : 0) {
                    k = c[9152 >> 2] | 0;
                    if (M >>> 0 < k >>> 0)
                        Ua();
                    f = M + q | 0;
                    if (!(M >>> 0 < f >>> 0))
                        Ua();
                    e = c[M + 24 >> 2] | 0;
                    s = c[M + 12 >> 2] | 0;
                    do if ((s | 0) == (M | 0)) {
                        r = M + 20 | 0;
                        h = c[r >> 2] | 0;
                        if ((h | 0) == 0) {
                            m = M + 16 | 0;
                            g = c[m >> 2] | 0;
                            if ((g | 0) == 0) {
                                N = 0;
                                break
                            } else {
                                O = g;
                                P = m
                            }
                        } else {
                            O = h;
                            P = r
                        }
                        while (1) {
                            r = O + 20 | 0;
                            h = c[r >> 2] | 0;
                            if ((h | 0) != 0) {
                                O = h;
                                P = r;
                                continue
                            }
                            r = O + 16 | 0;
                            h = c[r >> 2] | 0;
                            if ((h | 0) == 0)
                                break;
                            else {
                                O = h;
                                P = r
                            }
                        }
                        if (P >>> 0 < k >>> 0)
                            Ua();
                        else {
                            c[P >> 2] = 0;
                            N = O;
                            break
                        }
                    } else {
                        r = c[M + 8 >> 2] | 0;
                        if (r >>> 0 < k >>>
                        0)
                            Ua();
                        h = r + 12 | 0;
                        if ((c[h >> 2] | 0) != (M | 0))
                            Ua();
                        m = s + 8 | 0;
                        if ((c[m >> 2] | 0) == (M | 0)) {
                            c[h >> 2] = s;
                            c[m >> 2] = r;
                            N = s;
                            break
                        } else
                            Ua()
                    }
                    while (0);
                    do if ((e | 0) != 0) {
                        s = c[M + 28 >> 2] | 0;
                        k = 9440 + (s << 2) | 0;
                        if ((M | 0) == (c[k >> 2] | 0)) {
                            c[k >> 2] = N;
                            if ((N | 0) == 0) {
                                c[9140 >> 2] = c[9140 >> 2] & ~(1 << s);
                                break
                            }
                        } else {
                            if (e >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                Ua();
                            s = e + 16 | 0;
                            if ((c[s >> 2] | 0) == (M | 0))
                                c[s >> 2] = N;
                            else
                                c[e + 20 >> 2] = N;
                            if ((N | 0) == 0)
                                break
                        }
                        if (N >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                            Ua();
                        c[N + 24 >> 2] = e;
                        s = c[M + 16 >> 2] | 0;
                        do if ((s | 0) != 0)
                            if (s >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                Ua();
                            else {
                                c[N + 16 >> 2] = s;
                                c[s + 24 >>
                                2] = N;
                                break
                            }
                        while (0);
                        s = c[M + 20 >> 2] | 0;
                        if ((s | 0) != 0)
                            if (s >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                Ua();
                            else {
                                c[N + 20 >> 2] = s;
                                c[s + 24 >> 2] = N;
                                break
                            }
                    }
                    while (0);
                    b:
                    do if (!(L >>> 0 < 16)) {
                        c[M + 4 >> 2] = q | 3;
                        c[M + (q | 4) >> 2] = L | 1;
                        c[M + (L + q) >> 2] = L;
                        e = L >>> 3;
                        if (L >>> 0 < 256) {
                            s = e << 1;
                            k = 9176 + (s << 2) | 0;
                            r = c[2284] | 0;
                            m = 1 << e;
                            do if ((r & m | 0) == 0) {
                                c[2284] = r | m;
                                Q = 9176 + (s + 2 << 2) | 0;
                                R = k
                            } else {
                                e = 9176 + (s + 2 << 2) | 0;
                                h = c[e >> 2] | 0;
                                if (!(h >>> 0 < (c[9152 >> 2] | 0) >>> 0)) {
                                    Q = e;
                                    R = h;
                                    break
                                }
                                Ua()
                            }
                            while (0);
                            c[Q >> 2] = f;
                            c[R + 12 >> 2] = f;
                            c[M + (q + 8) >> 2] = R;
                            c[M + (q + 12) >> 2] = k;
                            break
                        }
                        s = L >>> 8;
                        if ((s | 0) != 0)
                            if (L >>> 0 > 16777215)
                                S =
                                31;
                            else {
                                m = (s + 1048320 | 0) >>> 16 & 8;
                                r = s << m;
                                s = (r + 520192 | 0) >>> 16 & 4;
                                h = r << s;
                                r = (h + 245760 | 0) >>> 16 & 2;
                                e = 14 - (s | m | r) + (h << r >>> 15) | 0;
                                S = L >>> (e + 7 | 0) & 1 | e << 1
                            }
                        else
                            S = 0;
                        e = 9440 + (S << 2) | 0;
                        c[M + (q + 28) >> 2] = S;
                        c[M + (q + 20) >> 2] = 0;
                        c[M + (q + 16) >> 2] = 0;
                        r = c[9140 >> 2] | 0;
                        h = 1 << S;
                        if ((r & h | 0) == 0) {
                            c[9140 >> 2] = r | h;
                            c[e >> 2] = f;
                            c[M + (q + 24) >> 2] = e;
                            c[M + (q + 12) >> 2] = f;
                            c[M + (q + 8) >> 2] = f;
                            break
                        }
                        h = c[e >> 2] | 0;
                        if ((S | 0) == 31)
                            T = 0;
                        else
                            T = 25 - (S >>> 1) | 0;
                        c:
                        do if ((c[h + 4 >> 2] & -8 | 0) != (L | 0)) {
                            e = L << T;
                            r = h;
                            while (1) {
                                U = r + (e >>> 31 << 2) + 16 | 0;
                                m = c[U >> 2] | 0;
                                if ((m | 0) == 0)
                                    break;
                                if ((c[m + 4 >> 2] & -8 |
                                0) == (L | 0)) {
                                    V = m;
                                    break c
                                } else {
                                    e = e << 1;
                                    r = m
                                }
                            }
                            if (U >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                Ua();
                            else {
                                c[U >> 2] = f;
                                c[M + (q + 24) >> 2] = r;
                                c[M + (q + 12) >> 2] = f;
                                c[M + (q + 8) >> 2] = f;
                                break b
                            }
                        } else
                            V = h;
                        while (0);
                        h = V + 8 | 0;
                        k = c[h >> 2] | 0;
                        e = c[9152 >> 2] | 0;
                        if (V >>> 0 < e >>> 0)
                            Ua();
                        if (k >>> 0 < e >>> 0)
                            Ua();
                        else {
                            c[k + 12 >> 2] = f;
                            c[h >> 2] = f;
                            c[M + (q + 8) >> 2] = k;
                            c[M + (q + 12) >> 2] = V;
                            c[M + (q + 24) >> 2] = 0;
                            break
                        }
                    } else {
                        k = L + q | 0;
                        c[M + 4 >> 2] = k | 3;
                        h = M + (k + 4) | 0;
                        c[h >> 2] = c[h >> 2] | 1
                    }
                    while (0);
                    p = M + 8 | 0;
                    i = b;
                    return p | 0
                } else
                    B = q
            } else
                B = q
        } else
            B = -1;
        while (0);
        M = c[9144 >> 2] | 0;
        if (!(B >>> 0 > M >>> 0)) {
            L = M - B | 0;
            V = c[9156 >>
            2] | 0;
            if (L >>> 0 > 15) {
                c[9156 >> 2] = V + B;
                c[9144 >> 2] = L;
                c[V + (B + 4) >> 2] = L | 1;
                c[V + M >> 2] = L;
                c[V + 4 >> 2] = B | 3
            } else {
                c[9144 >> 2] = 0;
                c[9156 >> 2] = 0;
                c[V + 4 >> 2] = M | 3;
                L = V + (M + 4) | 0;
                c[L >> 2] = c[L >> 2] | 1
            }
            p = V + 8 | 0;
            i = b;
            return p | 0
        }
        V = c[9148 >> 2] | 0;
        if (B >>> 0 < V >>> 0) {
            L = V - B | 0;
            c[9148 >> 2] = L;
            V = c[9160 >> 2] | 0;
            c[9160 >> 2] = V + B;
            c[V + (B + 4) >> 2] = L | 1;
            c[V + 4 >> 2] = B | 3;
            p = V + 8 | 0;
            i = b;
            return p | 0
        }
        do if ((c[2402] | 0) == 0) {
            V = Ta(30) | 0;
            if ((V + -1 & V | 0) == 0) {
                c[9616 >> 2] = V;
                c[9612 >> 2] = V;
                c[9620 >> 2] = -1;
                c[9624 >> 2] = -1;
                c[9628 >> 2] = 0;
                c[9580 >> 2] = 0;
                c[2402] = (Da(0) | 0) & -16 ^ 1431655768;
                break
            } else
                Ua()
        }
        while (0);
        V = B + 48 | 0;
        L = c[9616 >> 2] | 0;
        M = B + 47 | 0;
        U = L + M | 0;
        T = 0 - L | 0;
        L = U & T;
        if (!(L >>> 0 > B >>> 0)) {
            p = 0;
            i = b;
            return p | 0
        }
        S = c[9576 >> 2] | 0;
        if ((S | 0) != 0 ? (R = c[9568 >> 2] | 0, Q = R + L | 0, Q >>> 0 <= R >>> 0 | Q >>> 0 > S >>> 0) : 0) {
            p = 0;
            i = b;
            return p | 0
        }
        d:
        do if ((c[9580 >> 2] & 4 | 0) == 0) {
            S = c[9160 >> 2] | 0;
            e:
            do if ((S | 0) != 0) {
                Q = 9584 | 0;
                while (1) {
                    R = c[Q >> 2] | 0;
                    if (!(R >>> 0 > S >>> 0) ? (W = Q + 4 | 0, (R + (c[W >> 2] | 0) | 0) >>> 0 > S >>> 0) : 0)
                        break;
                    R = c[Q + 8 >> 2] | 0;
                    if ((R | 0) == 0) {
                        X = 182;
                        break e
                    } else
                        Q = R
                }
                if ((Q | 0) != 0) {
                    R = U - (c[9148 >> 2] | 0) & T;
                    if (R >>> 0 < 2147483647) {
                        N = Ga(R | 0) | 0;
                        O = (N | 0) == ((c[Q >> 2] | 0) + (c[W >> 2] | 0) | 0);
                        Y = N;
                        Z = R;
                        _ = O ? N : -1;
                        $ = O ? R : 0;
                        X = 191
                    } else
                        aa = 0
                } else
                    X = 182
            } else
                X = 182;
            while (0);
            do if ((X | 0) == 182) {
                S = Ga(0) | 0;
                if ((S | 0) != (-1 | 0)) {
                    q = S;
                    R = c[9612 >> 2] | 0;
                    O = R + -1 | 0;
                    if ((O & q | 0) == 0)
                        ba = L;
                    else
                        ba = L - q + (O + q & 0 - R) | 0;
                    R = c[9568 >> 2] | 0;
                    q = R + ba | 0;
                    if (ba >>> 0 > B >>> 0 & ba >>> 0 < 2147483647) {
                        O = c[9576 >> 2] | 0;
                        if ((O | 0) != 0 ? q >>> 0 <= R >>> 0 | q >>> 0 > O >>> 0 : 0) {
                            aa = 0;
                            break
                        }
                        O = Ga(ba | 0) | 0;
                        q = (O | 0) == (S | 0);
                        Y = O;
                        Z = ba;
                        _ = q ? S : -1;
                        $ = q ? ba : 0;
                        X = 191
                    } else
                        aa = 0
                } else
                    aa = 0
            }
            while (0);
            f:
            do if ((X | 0) == 191) {
                q = 0 - Z | 0;
                if ((_ | 0) != (-1 | 0)) {
                    ca = _;
                    da = $;
                    X = 202;
                    break d
                }
                do if ((Y | 0) != (-1 | 0) & Z >>> 0 < 2147483647 &
                Z >>> 0 < V >>> 0 ? (S = c[9616 >> 2] | 0, O = M - Z + S & 0 - S, O >>> 0 < 2147483647) : 0)
                    if ((Ga(O | 0) | 0) == (-1 | 0)) {
                        Ga(q | 0) | 0;
                        aa = $;
                        break f
                    } else {
                        ea = O + Z | 0;
                        break
                    }
                else
                    ea = Z;
                while (0);
                if ((Y | 0) == (-1 | 0))
                    aa = $;
                else {
                    ca = Y;
                    da = ea;
                    X = 202;
                    break d
                }
            }
            while (0);
            c[9580 >> 2] = c[9580 >> 2] | 4;
            fa = aa;
            X = 199
        } else {
            fa = 0;
            X = 199
        }
        while (0);
        if ((((X | 0) == 199 ? L >>> 0 < 2147483647 : 0) ? (aa = Ga(L | 0) | 0, L = Ga(0) | 0, (L | 0) != (-1 | 0) & (aa | 0) != (-1 | 0) & aa >>> 0 < L >>> 0) : 0) ? (ea = L - aa | 0, L = ea >>> 0 > (B + 40 | 0) >>> 0, L) : 0) {
            ca = aa;
            da = L ? ea : fa;
            X = 202
        }
        if ((X | 0) == 202) {
            fa = (c[9568 >> 2] | 0) + da | 0;
            c[9568 >> 2] = fa;
            if (fa >>> 0 > (c[9572 >>
            2] | 0) >>> 0)
                c[9572 >> 2] = fa;
            fa = c[9160 >> 2] | 0;
            g:
            do if ((fa | 0) != 0) {
                ea = 9584 | 0;
                while (1) {
                    ga = c[ea >> 2] | 0;
                    ha = ea + 4 | 0;
                    ia = c[ha >> 2] | 0;
                    if ((ca | 0) == (ga + ia | 0)) {
                        X = 214;
                        break
                    }
                    L = c[ea + 8 >> 2] | 0;
                    if ((L | 0) == 0)
                        break;
                    else
                        ea = L
                }
                if (((X | 0) == 214 ? (c[ea + 12 >> 2] & 8 | 0) == 0 : 0) ? fa >>> 0 >= ga >>> 0 & fa >>> 0 < ca >>> 0 : 0) {
                    c[ha >> 2] = ia + da;
                    L = (c[9148 >> 2] | 0) + da | 0;
                    aa = fa + 8 | 0;
                    if ((aa & 7 | 0) == 0)
                        ja = 0;
                    else
                        ja = 0 - aa & 7;
                    aa = L - ja | 0;
                    c[9160 >> 2] = fa + ja;
                    c[9148 >> 2] = aa;
                    c[fa + (ja + 4) >> 2] = aa | 1;
                    c[fa + (L + 4) >> 2] = 40;
                    c[9164 >> 2] = c[9624 >> 2];
                    break
                }
                if (ca >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                    c[9152 >> 2] = ca;
                L = ca +
                da | 0;
                aa = 9584 | 0;
                while (1) {
                    if ((c[aa >> 2] | 0) == (L | 0)) {
                        X = 224;
                        break
                    }
                    Y = c[aa + 8 >> 2] | 0;
                    if ((Y | 0) == 0)
                        break;
                    else
                        aa = Y
                }
                if ((X | 0) == 224 ? (c[aa + 12 >> 2] & 8 | 0) == 0 : 0) {
                    c[aa >> 2] = ca;
                    L = aa + 4 | 0;
                    c[L >> 2] = (c[L >> 2] | 0) + da;
                    L = ca + 8 | 0;
                    if ((L & 7 | 0) == 0)
                        ka = 0;
                    else
                        ka = 0 - L & 7;
                    L = ca + (da + 8) | 0;
                    if ((L & 7 | 0) == 0)
                        la = 0;
                    else
                        la = 0 - L & 7;
                    L = ca + (la + da) | 0;
                    ea = ka + B | 0;
                    Y = ca + ea | 0;
                    $ = L - (ca + ka) - B | 0;
                    c[ca + (ka + 4) >> 2] = B | 3;
                    h:
                    do if ((L | 0) != (c[9160 >> 2] | 0)) {
                        if ((L | 0) == (c[9156 >> 2] | 0)) {
                            Z = (c[9144 >> 2] | 0) + $ | 0;
                            c[9144 >> 2] = Z;
                            c[9156 >> 2] = Y;
                            c[ca + (ea + 4) >> 2] = Z | 1;
                            c[ca + (Z + ea) >> 2] = Z;
                            break
                        }
                        Z = da + 4 | 0;
                        M = c[ca + (Z + la) >> 2] | 0;
                        if ((M & 3 | 0) == 1) {
                            V = M & -8;
                            _ = M >>> 3;
                            i:
                            do if (!(M >>> 0 < 256)) {
                                ba = c[ca + ((la | 24) + da) >> 2] | 0;
                                W = c[ca + (da + 12 + la) >> 2] | 0;
                                do if ((W | 0) == (L | 0)) {
                                    T = la | 16;
                                    U = ca + (Z + T) | 0;
                                    q = c[U >> 2] | 0;
                                    if ((q | 0) == 0) {
                                        Q = ca + (T + da) | 0;
                                        T = c[Q >> 2] | 0;
                                        if ((T | 0) == 0) {
                                            ma = 0;
                                            break
                                        } else {
                                            na = T;
                                            oa = Q
                                        }
                                    } else {
                                        na = q;
                                        oa = U
                                    }
                                    while (1) {
                                        U = na + 20 | 0;
                                        q = c[U >> 2] | 0;
                                        if ((q | 0) != 0) {
                                            na = q;
                                            oa = U;
                                            continue
                                        }
                                        U = na + 16 | 0;
                                        q = c[U >> 2] | 0;
                                        if ((q | 0) == 0)
                                            break;
                                        else {
                                            na = q;
                                            oa = U
                                        }
                                    }
                                    if (oa >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                        Ua();
                                    else {
                                        c[oa >> 2] = 0;
                                        ma = na;
                                        break
                                    }
                                } else {
                                    U = c[ca + ((la | 8) + da) >> 2] | 0;
                                    if (U >>> 0 < (c[9152 >> 2] |
                                    0) >>> 0)
                                        Ua();
                                    q = U + 12 | 0;
                                    if ((c[q >> 2] | 0) != (L | 0))
                                        Ua();
                                    Q = W + 8 | 0;
                                    if ((c[Q >> 2] | 0) == (L | 0)) {
                                        c[q >> 2] = W;
                                        c[Q >> 2] = U;
                                        ma = W;
                                        break
                                    } else
                                        Ua()
                                }
                                while (0);
                                if ((ba | 0) == 0)
                                    break;
                                W = c[ca + (da + 28 + la) >> 2] | 0;
                                r = 9440 + (W << 2) | 0;
                                do if ((L | 0) != (c[r >> 2] | 0)) {
                                    if (ba >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                        Ua();
                                    U = ba + 16 | 0;
                                    if ((c[U >> 2] | 0) == (L | 0))
                                        c[U >> 2] = ma;
                                    else
                                        c[ba + 20 >> 2] = ma;
                                    if ((ma | 0) == 0)
                                        break i
                                } else {
                                    c[r >> 2] = ma;
                                    if ((ma | 0) != 0)
                                        break;
                                    c[9140 >> 2] = c[9140 >> 2] & ~(1 << W);
                                    break i
                                }
                                while (0);
                                if (ma >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                    Ua();
                                c[ma + 24 >> 2] = ba;
                                W = la | 16;
                                r = c[ca + (W + da) >> 2] | 0;
                                do if ((r | 0) !=
                                0)
                                    if (r >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                        Ua();
                                    else {
                                        c[ma + 16 >> 2] = r;
                                        c[r + 24 >> 2] = ma;
                                        break
                                    }
                                while (0);
                                r = c[ca + (Z + W) >> 2] | 0;
                                if ((r | 0) == 0)
                                    break;
                                if (r >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                    Ua();
                                else {
                                    c[ma + 20 >> 2] = r;
                                    c[r + 24 >> 2] = ma;
                                    break
                                }
                            } else {
                                r = c[ca + ((la | 8) + da) >> 2] | 0;
                                ba = c[ca + (da + 12 + la) >> 2] | 0;
                                U = 9176 + (_ << 1 << 2) | 0;
                                do if ((r | 0) != (U | 0)) {
                                    if (r >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                        Ua();
                                    if ((c[r + 12 >> 2] | 0) == (L | 0))
                                        break;
                                    Ua()
                                }
                                while (0);
                                if ((ba | 0) == (r | 0)) {
                                    c[2284] = c[2284] & ~(1 << _);
                                    break
                                }
                                do if ((ba | 0) == (U | 0))
                                    pa = ba + 8 | 0;
                                else {
                                    if (ba >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                        Ua();
                                    W = ba + 8 | 0;
                                    if ((c[W >> 2] |
                                    0) == (L | 0)) {
                                        pa = W;
                                        break
                                    }
                                    Ua()
                                }
                                while (0);
                                c[r + 12 >> 2] = ba;
                                c[pa >> 2] = r
                            }
                            while (0);
                            qa = ca + ((V | la) + da) | 0;
                            ra = V + $ | 0
                        } else {
                            qa = L;
                            ra = $
                        }
                        _ = qa + 4 | 0;
                        c[_ >> 2] = c[_ >> 2] & -2;
                        c[ca + (ea + 4) >> 2] = ra | 1;
                        c[ca + (ra + ea) >> 2] = ra;
                        _ = ra >>> 3;
                        if (ra >>> 0 < 256) {
                            Z = _ << 1;
                            M = 9176 + (Z << 2) | 0;
                            U = c[2284] | 0;
                            W = 1 << _;
                            do if ((U & W | 0) == 0) {
                                c[2284] = U | W;
                                sa = 9176 + (Z + 2 << 2) | 0;
                                ta = M
                            } else {
                                _ = 9176 + (Z + 2 << 2) | 0;
                                Q = c[_ >> 2] | 0;
                                if (!(Q >>> 0 < (c[9152 >> 2] | 0) >>> 0)) {
                                    sa = _;
                                    ta = Q;
                                    break
                                }
                                Ua()
                            }
                            while (0);
                            c[sa >> 2] = Y;
                            c[ta + 12 >> 2] = Y;
                            c[ca + (ea + 8) >> 2] = ta;
                            c[ca + (ea + 12) >> 2] = M;
                            break
                        }
                        Z = ra >>> 8;
                        do if ((Z | 0) == 0)
                            ua = 0;
                        else {
                            if (ra >>>
                            0 > 16777215) {
                                ua = 31;
                                break
                            }
                            W = (Z + 1048320 | 0) >>> 16 & 8;
                            U = Z << W;
                            V = (U + 520192 | 0) >>> 16 & 4;
                            Q = U << V;
                            U = (Q + 245760 | 0) >>> 16 & 2;
                            _ = 14 - (V | W | U) + (Q << U >>> 15) | 0;
                            ua = ra >>> (_ + 7 | 0) & 1 | _ << 1
                        }
                        while (0);
                        Z = 9440 + (ua << 2) | 0;
                        c[ca + (ea + 28) >> 2] = ua;
                        c[ca + (ea + 20) >> 2] = 0;
                        c[ca + (ea + 16) >> 2] = 0;
                        M = c[9140 >> 2] | 0;
                        _ = 1 << ua;
                        if ((M & _ | 0) == 0) {
                            c[9140 >> 2] = M | _;
                            c[Z >> 2] = Y;
                            c[ca + (ea + 24) >> 2] = Z;
                            c[ca + (ea + 12) >> 2] = Y;
                            c[ca + (ea + 8) >> 2] = Y;
                            break
                        }
                        _ = c[Z >> 2] | 0;
                        if ((ua | 0) == 31)
                            va = 0;
                        else
                            va = 25 - (ua >>> 1) | 0;
                        j:
                        do if ((c[_ + 4 >> 2] & -8 | 0) != (ra | 0)) {
                            Z = ra << va;
                            M = _;
                            while (1) {
                                wa = M + (Z >>> 31 << 2) + 16 | 0;
                                U = c[wa >>
                                2] | 0;
                                if ((U | 0) == 0)
                                    break;
                                if ((c[U + 4 >> 2] & -8 | 0) == (ra | 0)) {
                                    xa = U;
                                    break j
                                } else {
                                    Z = Z << 1;
                                    M = U
                                }
                            }
                            if (wa >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                                Ua();
                            else {
                                c[wa >> 2] = Y;
                                c[ca + (ea + 24) >> 2] = M;
                                c[ca + (ea + 12) >> 2] = Y;
                                c[ca + (ea + 8) >> 2] = Y;
                                break h
                            }
                        } else
                            xa = _;
                        while (0);
                        _ = xa + 8 | 0;
                        Z = c[_ >> 2] | 0;
                        r = c[9152 >> 2] | 0;
                        if (xa >>> 0 < r >>> 0)
                            Ua();
                        if (Z >>> 0 < r >>> 0)
                            Ua();
                        else {
                            c[Z + 12 >> 2] = Y;
                            c[_ >> 2] = Y;
                            c[ca + (ea + 8) >> 2] = Z;
                            c[ca + (ea + 12) >> 2] = xa;
                            c[ca + (ea + 24) >> 2] = 0;
                            break
                        }
                    } else {
                        Z = (c[9148 >> 2] | 0) + $ | 0;
                        c[9148 >> 2] = Z;
                        c[9160 >> 2] = Y;
                        c[ca + (ea + 4) >> 2] = Z | 1
                    }
                    while (0);
                    p = ca + (ka | 8) | 0;
                    i = b;
                    return p | 0
                }
                ea = 9584 |
                0;
                while (1) {
                    ya = c[ea >> 2] | 0;
                    if (!(ya >>> 0 > fa >>> 0) ? (za = c[ea + 4 >> 2] | 0, Aa = ya + za | 0, Aa >>> 0 > fa >>> 0) : 0)
                        break;
                    ea = c[ea + 8 >> 2] | 0
                }
                ea = ya + (za + -39) | 0;
                if ((ea & 7 | 0) == 0)
                    Ba = 0;
                else
                    Ba = 0 - ea & 7;
                ea = ya + (za + -47 + Ba) | 0;
                Y = ea >>> 0 < (fa + 16 | 0) >>> 0 ? fa : ea;
                ea = Y + 8 | 0;
                $ = ca + 8 | 0;
                if (($ & 7 | 0) == 0)
                    Ca = 0;
                else
                    Ca = 0 - $ & 7;
                $ = da + -40 - Ca | 0;
                c[9160 >> 2] = ca + Ca;
                c[9148 >> 2] = $;
                c[ca + (Ca + 4) >> 2] = $ | 1;
                c[ca + (da + -36) >> 2] = 40;
                c[9164 >> 2] = c[9624 >> 2];
                c[Y + 4 >> 2] = 27;
                c[ea + 0 >> 2] = c[9584 >> 2];
                c[ea + 4 >> 2] = c[9588 >> 2];
                c[ea + 8 >> 2] = c[9592 >> 2];
                c[ea + 12 >> 2] = c[9596 >> 2];
                c[9584 >> 2] = ca;
                c[9588 >> 2] = da;
                c[9596 >> 2] = 0;
                c[9592 >> 2] = ea;
                ea = Y + 28 | 0;
                c[ea >> 2] = 7;
                if ((Y + 32 | 0) >>> 0 < Aa >>> 0) {
                    $ = ea;
                    do {
                        ea = $;
                        $ = $ + 4 | 0;
                        c[$ >> 2] = 7
                    } while ((ea + 8 | 0) >>> 0 < Aa >>> 0)
                }
                if ((Y | 0) != (fa | 0)) {
                    $ = Y - fa | 0;
                    ea = fa + ($ + 4) | 0;
                    c[ea >> 2] = c[ea >> 2] & -2;
                    c[fa + 4 >> 2] = $ | 1;
                    c[fa + $ >> 2] = $;
                    ea = $ >>> 3;
                    if ($ >>> 0 < 256) {
                        L = ea << 1;
                        aa = 9176 + (L << 2) | 0;
                        Z = c[2284] | 0;
                        _ = 1 << ea;
                        do if ((Z & _ | 0) == 0) {
                            c[2284] = Z | _;
                            Ea = 9176 + (L + 2 << 2) | 0;
                            Fa = aa
                        } else {
                            ea = 9176 + (L + 2 << 2) | 0;
                            r = c[ea >> 2] | 0;
                            if (!(r >>> 0 < (c[9152 >> 2] | 0) >>> 0)) {
                                Ea = ea;
                                Fa = r;
                                break
                            }
                            Ua()
                        }
                        while (0);
                        c[Ea >> 2] = fa;
                        c[Fa + 12 >> 2] = fa;
                        c[fa + 8 >> 2] = Fa;
                        c[fa + 12 >> 2] = aa;
                        break
                    }
                    L =
                    $ >>> 8;
                    if ((L | 0) != 0)
                        if ($ >>> 0 > 16777215)
                            Ha = 31;
                        else {
                            _ = (L + 1048320 | 0) >>> 16 & 8;
                            Z = L << _;
                            L = (Z + 520192 | 0) >>> 16 & 4;
                            Y = Z << L;
                            Z = (Y + 245760 | 0) >>> 16 & 2;
                            r = 14 - (L | _ | Z) + (Y << Z >>> 15) | 0;
                            Ha = $ >>> (r + 7 | 0) & 1 | r << 1
                        }
                    else
                        Ha = 0;
                    r = 9440 + (Ha << 2) | 0;
                    c[fa + 28 >> 2] = Ha;
                    c[fa + 20 >> 2] = 0;
                    c[fa + 16 >> 2] = 0;
                    Z = c[9140 >> 2] | 0;
                    Y = 1 << Ha;
                    if ((Z & Y | 0) == 0) {
                        c[9140 >> 2] = Z | Y;
                        c[r >> 2] = fa;
                        c[fa + 24 >> 2] = r;
                        c[fa + 12 >> 2] = fa;
                        c[fa + 8 >> 2] = fa;
                        break
                    }
                    Y = c[r >> 2] | 0;
                    if ((Ha | 0) == 31)
                        Ia = 0;
                    else
                        Ia = 25 - (Ha >>> 1) | 0;
                    k:
                    do if ((c[Y + 4 >> 2] & -8 | 0) != ($ | 0)) {
                        r = $ << Ia;
                        Z = Y;
                        while (1) {
                            Ja = Z + (r >>> 31 << 2) + 16 | 0;
                            _ = c[Ja >> 2] | 0;
                            if ((_ | 0) == 0)
                                break;
                            if ((c[_ + 4 >> 2] & -8 | 0) == ($ | 0)) {
                                Ka = _;
                                break k
                            } else {
                                r = r << 1;
                                Z = _
                            }
                        }
                        if (Ja >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                            Ua();
                        else {
                            c[Ja >> 2] = fa;
                            c[fa + 24 >> 2] = Z;
                            c[fa + 12 >> 2] = fa;
                            c[fa + 8 >> 2] = fa;
                            break g
                        }
                    } else
                        Ka = Y;
                    while (0);
                    Y = Ka + 8 | 0;
                    $ = c[Y >> 2] | 0;
                    aa = c[9152 >> 2] | 0;
                    if (Ka >>> 0 < aa >>> 0)
                        Ua();
                    if ($ >>> 0 < aa >>> 0)
                        Ua();
                    else {
                        c[$ + 12 >> 2] = fa;
                        c[Y >> 2] = fa;
                        c[fa + 8 >> 2] = $;
                        c[fa + 12 >> 2] = Ka;
                        c[fa + 24 >> 2] = 0;
                        break
                    }
                }
            } else {
                $ = c[9152 >> 2] | 0;
                if (($ | 0) == 0 | ca >>> 0 < $ >>> 0)
                    c[9152 >> 2] = ca;
                c[9584 >> 2] = ca;
                c[9588 >> 2] = da;
                c[9596 >> 2] = 0;
                c[9172 >> 2] = c[2402];
                c[9168 >> 2] = -1;
                $ = 0;
                do {
                    Y = $ <<
                    1;
                    aa = 9176 + (Y << 2) | 0;
                    c[9176 + (Y + 3 << 2) >> 2] = aa;
                    c[9176 + (Y + 2 << 2) >> 2] = aa;
                    $ = $ + 1 | 0
                } while (($ | 0) != 32);
                $ = ca + 8 | 0;
                if (($ & 7 | 0) == 0)
                    La = 0;
                else
                    La = 0 - $ & 7;
                $ = da + -40 - La | 0;
                c[9160 >> 2] = ca + La;
                c[9148 >> 2] = $;
                c[ca + (La + 4) >> 2] = $ | 1;
                c[ca + (da + -36) >> 2] = 40;
                c[9164 >> 2] = c[9624 >> 2]
            }
            while (0);
            da = c[9148 >> 2] | 0;
            if (da >>> 0 > B >>> 0) {
                ca = da - B | 0;
                c[9148 >> 2] = ca;
                da = c[9160 >> 2] | 0;
                c[9160 >> 2] = da + B;
                c[da + (B + 4) >> 2] = ca | 1;
                c[da + 4 >> 2] = B | 3;
                p = da + 8 | 0;
                i = b;
                return p | 0
            }
        }
        c[(Qa() | 0) >> 2] = 12;
        p = 0;
        i = b;
        return p | 0
    }
    function pn(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n =
            0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            E = 0,
            F = 0,
            G = 0,
            H = 0,
            I = 0,
            J = 0,
            K = 0;
        b = i;
        if ((a | 0) == 0) {
            i = b;
            return
        }
        d = a + -8 | 0;
        e = c[9152 >> 2] | 0;
        if (d >>> 0 < e >>> 0)
            Ua();
        f = c[a + -4 >> 2] | 0;
        g = f & 3;
        if ((g | 0) == 1)
            Ua();
        h = f & -8;
        j = a + (h + -8) | 0;
        do if ((f & 1 | 0) == 0) {
            k = c[d >> 2] | 0;
            if ((g | 0) == 0) {
                i = b;
                return
            }
            l = -8 - k | 0;
            m = a + l | 0;
            n = k + h | 0;
            if (m >>> 0 < e >>> 0)
                Ua();
            if ((m | 0) == (c[9156 >> 2] | 0)) {
                o = a + (h + -4) | 0;
                if ((c[o >> 2] & 3 | 0) != 3) {
                    p = m;
                    q = n;
                    break
                }
                c[9144 >> 2] = n;
                c[o >> 2] = c[o >> 2] & -2;
                c[a + (l + 4) >> 2] = n | 1;
                c[j >> 2] = n;
                i = b;
                return
            }
            o = k >>> 3;
            if (k >>> 0 < 256) {
                k = c[a + (l + 8) >>
                2] | 0;
                r = c[a + (l + 12) >> 2] | 0;
                s = 9176 + (o << 1 << 2) | 0;
                if ((k | 0) != (s | 0)) {
                    if (k >>> 0 < e >>> 0)
                        Ua();
                    if ((c[k + 12 >> 2] | 0) != (m | 0))
                        Ua()
                }
                if ((r | 0) == (k | 0)) {
                    c[2284] = c[2284] & ~(1 << o);
                    p = m;
                    q = n;
                    break
                }
                if ((r | 0) != (s | 0)) {
                    if (r >>> 0 < e >>> 0)
                        Ua();
                    s = r + 8 | 0;
                    if ((c[s >> 2] | 0) == (m | 0))
                        t = s;
                    else
                        Ua()
                } else
                    t = r + 8 | 0;
                c[k + 12 >> 2] = r;
                c[t >> 2] = k;
                p = m;
                q = n;
                break
            }
            k = c[a + (l + 24) >> 2] | 0;
            r = c[a + (l + 12) >> 2] | 0;
            do if ((r | 0) == (m | 0)) {
                s = a + (l + 20) | 0;
                o = c[s >> 2] | 0;
                if ((o | 0) == 0) {
                    u = a + (l + 16) | 0;
                    v = c[u >> 2] | 0;
                    if ((v | 0) == 0) {
                        w = 0;
                        break
                    } else {
                        x = v;
                        y = u
                    }
                } else {
                    x = o;
                    y = s
                }
                while (1) {
                    s = x + 20 | 0;
                    o = c[s >> 2] | 0;
                    if ((o |
                    0) != 0) {
                        x = o;
                        y = s;
                        continue
                    }
                    s = x + 16 | 0;
                    o = c[s >> 2] | 0;
                    if ((o | 0) == 0)
                        break;
                    else {
                        x = o;
                        y = s
                    }
                }
                if (y >>> 0 < e >>> 0)
                    Ua();
                else {
                    c[y >> 2] = 0;
                    w = x;
                    break
                }
            } else {
                s = c[a + (l + 8) >> 2] | 0;
                if (s >>> 0 < e >>> 0)
                    Ua();
                o = s + 12 | 0;
                if ((c[o >> 2] | 0) != (m | 0))
                    Ua();
                u = r + 8 | 0;
                if ((c[u >> 2] | 0) == (m | 0)) {
                    c[o >> 2] = r;
                    c[u >> 2] = s;
                    w = r;
                    break
                } else
                    Ua()
            }
            while (0);
            if ((k | 0) != 0) {
                r = c[a + (l + 28) >> 2] | 0;
                s = 9440 + (r << 2) | 0;
                if ((m | 0) == (c[s >> 2] | 0)) {
                    c[s >> 2] = w;
                    if ((w | 0) == 0) {
                        c[9140 >> 2] = c[9140 >> 2] & ~(1 << r);
                        p = m;
                        q = n;
                        break
                    }
                } else {
                    if (k >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                        Ua();
                    r = k + 16 | 0;
                    if ((c[r >> 2] | 0) == (m | 0))
                        c[r >> 2] = w;
                    else
                        c[k +
                        20 >> 2] = w;
                    if ((w | 0) == 0) {
                        p = m;
                        q = n;
                        break
                    }
                }
                if (w >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                    Ua();
                c[w + 24 >> 2] = k;
                r = c[a + (l + 16) >> 2] | 0;
                do if ((r | 0) != 0)
                    if (r >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                        Ua();
                    else {
                        c[w + 16 >> 2] = r;
                        c[r + 24 >> 2] = w;
                        break
                    }
                while (0);
                r = c[a + (l + 20) >> 2] | 0;
                if ((r | 0) != 0)
                    if (r >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                        Ua();
                    else {
                        c[w + 20 >> 2] = r;
                        c[r + 24 >> 2] = w;
                        p = m;
                        q = n;
                        break
                    }
                else {
                    p = m;
                    q = n
                }
            } else {
                p = m;
                q = n
            }
        } else {
            p = d;
            q = h
        }
        while (0);
        if (!(p >>> 0 < j >>> 0))
            Ua();
        d = a + (h + -4) | 0;
        w = c[d >> 2] | 0;
        if ((w & 1 | 0) == 0)
            Ua();
        if ((w & 2 | 0) == 0) {
            if ((j | 0) == (c[9160 >> 2] | 0)) {
                e = (c[9148 >> 2] | 0) + q | 0;
                c[9148 >> 2] = e;
                c[9160 >>
                2] = p;
                c[p + 4 >> 2] = e | 1;
                if ((p | 0) != (c[9156 >> 2] | 0)) {
                    i = b;
                    return
                }
                c[9156 >> 2] = 0;
                c[9144 >> 2] = 0;
                i = b;
                return
            }
            if ((j | 0) == (c[9156 >> 2] | 0)) {
                e = (c[9144 >> 2] | 0) + q | 0;
                c[9144 >> 2] = e;
                c[9156 >> 2] = p;
                c[p + 4 >> 2] = e | 1;
                c[p + e >> 2] = e;
                i = b;
                return
            }
            e = (w & -8) + q | 0;
            x = w >>> 3;
            do if (!(w >>> 0 < 256)) {
                y = c[a + (h + 16) >> 2] | 0;
                t = c[a + (h | 4) >> 2] | 0;
                do if ((t | 0) == (j | 0)) {
                    g = a + (h + 12) | 0;
                    f = c[g >> 2] | 0;
                    if ((f | 0) == 0) {
                        r = a + (h + 8) | 0;
                        k = c[r >> 2] | 0;
                        if ((k | 0) == 0) {
                            z = 0;
                            break
                        } else {
                            A = k;
                            B = r
                        }
                    } else {
                        A = f;
                        B = g
                    }
                    while (1) {
                        g = A + 20 | 0;
                        f = c[g >> 2] | 0;
                        if ((f | 0) != 0) {
                            A = f;
                            B = g;
                            continue
                        }
                        g = A + 16 | 0;
                        f = c[g >> 2] | 0;
                        if ((f | 0) ==
                        0)
                            break;
                        else {
                            A = f;
                            B = g
                        }
                    }
                    if (B >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                        Ua();
                    else {
                        c[B >> 2] = 0;
                        z = A;
                        break
                    }
                } else {
                    g = c[a + h >> 2] | 0;
                    if (g >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                        Ua();
                    f = g + 12 | 0;
                    if ((c[f >> 2] | 0) != (j | 0))
                        Ua();
                    r = t + 8 | 0;
                    if ((c[r >> 2] | 0) == (j | 0)) {
                        c[f >> 2] = t;
                        c[r >> 2] = g;
                        z = t;
                        break
                    } else
                        Ua()
                }
                while (0);
                if ((y | 0) != 0) {
                    t = c[a + (h + 20) >> 2] | 0;
                    n = 9440 + (t << 2) | 0;
                    if ((j | 0) == (c[n >> 2] | 0)) {
                        c[n >> 2] = z;
                        if ((z | 0) == 0) {
                            c[9140 >> 2] = c[9140 >> 2] & ~(1 << t);
                            break
                        }
                    } else {
                        if (y >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                            Ua();
                        t = y + 16 | 0;
                        if ((c[t >> 2] | 0) == (j | 0))
                            c[t >> 2] = z;
                        else
                            c[y + 20 >> 2] = z;
                        if ((z | 0) == 0)
                            break
                    }
                    if (z >>>
                    0 < (c[9152 >> 2] | 0) >>> 0)
                        Ua();
                    c[z + 24 >> 2] = y;
                    t = c[a + (h + 8) >> 2] | 0;
                    do if ((t | 0) != 0)
                        if (t >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                            Ua();
                        else {
                            c[z + 16 >> 2] = t;
                            c[t + 24 >> 2] = z;
                            break
                        }
                    while (0);
                    t = c[a + (h + 12) >> 2] | 0;
                    if ((t | 0) != 0)
                        if (t >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                            Ua();
                        else {
                            c[z + 20 >> 2] = t;
                            c[t + 24 >> 2] = z;
                            break
                        }
                }
            } else {
                t = c[a + h >> 2] | 0;
                y = c[a + (h | 4) >> 2] | 0;
                n = 9176 + (x << 1 << 2) | 0;
                if ((t | 0) != (n | 0)) {
                    if (t >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                        Ua();
                    if ((c[t + 12 >> 2] | 0) != (j | 0))
                        Ua()
                }
                if ((y | 0) == (t | 0)) {
                    c[2284] = c[2284] & ~(1 << x);
                    break
                }
                if ((y | 0) != (n | 0)) {
                    if (y >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                        Ua();
                    n = y + 8 | 0;
                    if ((c[n >>
                    2] | 0) == (j | 0))
                        C = n;
                    else
                        Ua()
                } else
                    C = y + 8 | 0;
                c[t + 12 >> 2] = y;
                c[C >> 2] = t
            }
            while (0);
            c[p + 4 >> 2] = e | 1;
            c[p + e >> 2] = e;
            if ((p | 0) == (c[9156 >> 2] | 0)) {
                c[9144 >> 2] = e;
                i = b;
                return
            } else
                D = e
        } else {
            c[d >> 2] = w & -2;
            c[p + 4 >> 2] = q | 1;
            c[p + q >> 2] = q;
            D = q
        }
        q = D >>> 3;
        if (D >>> 0 < 256) {
            w = q << 1;
            d = 9176 + (w << 2) | 0;
            e = c[2284] | 0;
            C = 1 << q;
            if ((e & C | 0) != 0) {
                q = 9176 + (w + 2 << 2) | 0;
                j = c[q >> 2] | 0;
                if (j >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                    Ua();
                else {
                    E = q;
                    F = j
                }
            } else {
                c[2284] = e | C;
                E = 9176 + (w + 2 << 2) | 0;
                F = d
            }
            c[E >> 2] = p;
            c[F + 12 >> 2] = p;
            c[p + 8 >> 2] = F;
            c[p + 12 >> 2] = d;
            i = b;
            return
        }
        d = D >>> 8;
        if ((d | 0) != 0)
            if (D >>> 0 > 16777215)
                G = 31;
            else {
                F = (d + 1048320 | 0) >>> 16 & 8;
                E = d << F;
                d = (E + 520192 | 0) >>> 16 & 4;
                w = E << d;
                E = (w + 245760 | 0) >>> 16 & 2;
                C = 14 - (d | F | E) + (w << E >>> 15) | 0;
                G = D >>> (C + 7 | 0) & 1 | C << 1
            }
        else
            G = 0;
        C = 9440 + (G << 2) | 0;
        c[p + 28 >> 2] = G;
        c[p + 20 >> 2] = 0;
        c[p + 16 >> 2] = 0;
        E = c[9140 >> 2] | 0;
        w = 1 << G;
        a:
        do if ((E & w | 0) != 0) {
            F = c[C >> 2] | 0;
            if ((G | 0) == 31)
                H = 0;
            else
                H = 25 - (G >>> 1) | 0;
            b:
            do if ((c[F + 4 >> 2] & -8 | 0) != (D | 0)) {
                d = D << H;
                e = F;
                while (1) {
                    I = e + (d >>> 31 << 2) + 16 | 0;
                    j = c[I >> 2] | 0;
                    if ((j | 0) == 0)
                        break;
                    if ((c[j + 4 >> 2] & -8 | 0) == (D | 0)) {
                        J = j;
                        break b
                    } else {
                        d = d << 1;
                        e = j
                    }
                }
                if (I >>> 0 < (c[9152 >> 2] | 0) >>> 0)
                    Ua();
                else {
                    c[I >> 2] = p;
                    c[p +
                    24 >> 2] = e;
                    c[p + 12 >> 2] = p;
                    c[p + 8 >> 2] = p;
                    break a
                }
            } else
                J = F;
            while (0);
            F = J + 8 | 0;
            d = c[F >> 2] | 0;
            j = c[9152 >> 2] | 0;
            if (J >>> 0 < j >>> 0)
                Ua();
            if (d >>> 0 < j >>> 0)
                Ua();
            else {
                c[d + 12 >> 2] = p;
                c[F >> 2] = p;
                c[p + 8 >> 2] = d;
                c[p + 12 >> 2] = J;
                c[p + 24 >> 2] = 0;
                break
            }
        } else {
            c[9140 >> 2] = E | w;
            c[C >> 2] = p;
            c[p + 24 >> 2] = C;
            c[p + 12 >> 2] = p;
            c[p + 8 >> 2] = p
        }
        while (0);
        p = (c[9168 >> 2] | 0) + -1 | 0;
        c[9168 >> 2] = p;
        if ((p | 0) == 0)
            K = 9592 | 0;
        else {
            i = b;
            return
        }
        while (1) {
            p = c[K >> 2] | 0;
            if ((p | 0) == 0)
                break;
            else
                K = p + 8 | 0
        }
        c[9168 >> 2] = -1;
        i = b;
        return
    }
    function qn(a) {
        a = a | 0;
        var b = 0,
            d = 0,
            e = 0,
            f = 0;
        b = i;
        d = (a | 0) == 0 ? 1 : a;
        while (1) {
            e =
            on(d) | 0;
            if ((e | 0) != 0) {
                f = 6;
                break
            }
            a = c[2410] | 0;
            c[2410] = a + 0;
            if ((a | 0) == 0) {
                f = 5;
                break
            }
            jb[a & 1]()
        }
        if ((f | 0) == 5) {
            d = Aa(4) | 0;
            c[d >> 2] = 9656;
            Sa(d | 0, 9704, 92)
        } else if ((f | 0) == 6) {
            i = b;
            return e | 0
        }
        return 0
    }
    function rn(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0;
        b = i;
        c = qn(a) | 0;
        i = b;
        return c | 0
    }
    function sn(a) {
        a = a | 0;
        var b = 0;
        b = i;
        if ((a | 0) != 0)
            pn(a);
        i = b;
        return
    }
    function tn(a) {
        a = a | 0;
        var b = 0;
        b = i;
        Ra(a | 0);
        sn(a);
        i = b;
        return
    }
    function un(a) {
        a = a | 0;
        var b = 0;
        b = i;
        Ra(a | 0);
        i = b;
        return
    }
    function vn(a) {
        a = a | 0;
        return 9672
    }
    function wn() {
        c[2428] = o
    }
    function xn(b, d, e) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            i = 0;
        f = b + e | 0;
        if ((e | 0) >= 20) {
            d = d & 255;
            g = b & 3;
            h = d | d << 8 | d << 16 | d << 24;
            i = f & ~3;
            if (g) {
                g = b + 4 - g | 0;
                while ((b | 0) < (g | 0)) {
                    a[b >> 0] = d;
                    b = b + 1 | 0
                }
            }
            while ((b | 0) < (i | 0)) {
                c[b >> 2] = h;
                b = b + 4 | 0
            }
        }
        while ((b | 0) < (f | 0)) {
            a[b >> 0] = d;
            b = b + 1 | 0
        }
        return b - e | 0
    }
    function yn(b) {
        b = b | 0;
        var c = 0;
        c = b;
        while (a[c >> 0] | 0)
            c = c + 1 | 0;
        return c - b | 0
    }
    function zn(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        var e = 0;
        e = a + c >>> 0;
        return (E = b + d + (e >>> 0 < a >>> 0 | 0) >>> 0, e | 0) | 0
    }
    function An(b, d, e) {
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0;
        if ((e | 0) >= 4096)
            return Ma(b | 0, d | 0, e | 0) | 0;
        f = b | 0;
        if ((b & 3) == (d & 3)) {
            while (b & 3) {
                if ((e | 0) == 0)
                    return f | 0;
                a[b >> 0] = a[d >> 0] | 0;
                b = b + 1 | 0;
                d = d + 1 | 0;
                e = e - 1 | 0
            }
            while ((e | 0) >= 4) {
                c[b >> 2] = c[d >> 2];
                b = b + 4 | 0;
                d = d + 4 | 0;
                e = e - 4 | 0
            }
        }
        while ((e | 0) > 0) {
            a[b >> 0] = a[d >> 0] | 0;
            b = b + 1 | 0;
            d = d + 1 | 0;
            e = e - 1 | 0
        }
        return f | 0
    }
    function Bn(b, c, d) {
        b = b | 0;
        c = c | 0;
        d = d | 0;
        var e = 0;
        if ((c | 0) < (b | 0) & (b | 0) < (c + d | 0)) {
            e = b;
            c = c + d | 0;
            b = b + d | 0;
            while ((d | 0) > 0) {
                b = b - 1 | 0;
                c = c - 1 | 0;
                d = d - 1 | 0;
                a[b >> 0] = a[c >> 0] | 0
            }
            b = e
        } else
            An(b, c, d) | 0;
        return b | 0
    }
    function Cn(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        var e = 0;
        e = b - d >>> 0;
        e = b - d - (c >>> 0 > a >>> 0 | 0) >>> 0;
        return (E = e,
        a - c >>> 0 | 0) | 0
    }
    function Dn(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        if ((c | 0) < 32) {
            E = b << c | (a & (1 << c) - 1 << 32 - c) >>> 32 - c;
            return a << c
        }
        E = a << c - 32;
        return 0
    }
    function En(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        if ((c | 0) < 32) {
            E = b >>> c;
            return a >>> c | (b & (1 << c) - 1) << 32 - c
        }
        E = 0;
        return b >>> c - 32 | 0
    }
    function Fn(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        if ((c | 0) < 32) {
            E = b >> c;
            return a >>> c | (b & (1 << c) - 1) << 32 - c
        }
        E = (b | 0) < 0 ? -1 : 0;
        return b >> c - 32 | 0
    }
    function Gn(b) {
        b = b | 0;
        var c = 0;
        c = a[n + (b >>> 24) >> 0] | 0;
        if ((c | 0) < 8)
            return c | 0;
        c = a[n + (b >> 16 & 255) >> 0] | 0;
        if ((c | 0) < 8)
            return c + 8 | 0;
        c = a[n + (b >> 8 & 255) >> 0] |
        0;
        if ((c | 0) < 8)
            return c + 16 | 0;
        return (a[n + (b & 255) >> 0] | 0) + 24 | 0
    }
    function Hn(b) {
        b = b | 0;
        var c = 0;
        c = a[m + (b & 255) >> 0] | 0;
        if ((c | 0) < 8)
            return c | 0;
        c = a[m + (b >> 8 & 255) >> 0] | 0;
        if ((c | 0) < 8)
            return c + 8 | 0;
        c = a[m + (b >> 16 & 255) >> 0] | 0;
        if ((c | 0) < 8)
            return c + 16 | 0;
        return (a[m + (b >>> 24) >> 0] | 0) + 24 | 0
    }
    function In(a, b) {
        a = a | 0;
        b = b | 0;
        var c = 0,
            d = 0,
            e = 0,
            f = 0;
        c = a & 65535;
        d = b & 65535;
        e = aa(d, c) | 0;
        f = a >>> 16;
        a = (e >>> 16) + (aa(d, f) | 0) | 0;
        d = b >>> 16;
        b = aa(d, c) | 0;
        return (E = (a >>> 16) + (aa(d, f) | 0) + (((a & 65535) + b | 0) >>> 16) | 0, a + b << 16 | e & 65535 | 0) | 0
    }
    function Jn(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        var e = 0,
            f = 0,
            g = 0,
            h = 0,
            i = 0;
        e = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
        f = ((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
        g = d >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;
        h = ((d | 0) < 0 ? -1 : 0) >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;
        i = Cn(e ^ a, f ^ b, e, f) | 0;
        b = E;
        a = g ^ e;
        e = h ^ f;
        f = Cn((On(i, b, Cn(g ^ c, h ^ d, g, h) | 0, E, 0) | 0) ^ a, E ^ e, a, e) | 0;
        return f | 0
    }
    function Kn(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0,
            h = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0;
        f = i;
        i = i + 8 | 0;
        g = f | 0;
        h = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
        j = ((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
        k = e >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;
        l = ((e | 0) < 0 ? -1 : 0) >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;
        m = Cn(h ^ a, j ^
        b, h, j) | 0;
        b = E;
        On(m, b, Cn(k ^ d, l ^ e, k, l) | 0, E, g) | 0;
        l = Cn(c[g >> 2] ^ h, c[g + 4 >> 2] ^ j, h, j) | 0;
        j = E;
        i = f;
        return (E = j, l) | 0
    }
    function Ln(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        var e = 0,
            f = 0;
        e = a;
        a = c;
        c = In(e, a) | 0;
        f = E;
        return (E = (aa(b, a) | 0) + (aa(d, e) | 0) + f | f & 0, c | 0 | 0) | 0
    }
    function Mn(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        var e = 0;
        e = On(a, b, c, d, 0) | 0;
        return e | 0
    }
    function Nn(a, b, d, e) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        var f = 0,
            g = 0;
        f = i;
        i = i + 8 | 0;
        g = f | 0;
        On(a, b, d, e, g) | 0;
        i = f;
        return (E = c[g + 4 >> 2] | 0, c[g >> 2] | 0) | 0
    }
    function On(a, b, d, e, f) {
        a = a | 0;
        b = b | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        var g =
            0,
            h = 0,
            i = 0,
            j = 0,
            k = 0,
            l = 0,
            m = 0,
            n = 0,
            o = 0,
            p = 0,
            q = 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = 0,
            w = 0,
            x = 0,
            y = 0,
            z = 0,
            A = 0,
            B = 0,
            C = 0,
            D = 0,
            F = 0,
            G = 0,
            H = 0;
        g = a;
        h = b;
        i = h;
        j = d;
        k = e;
        l = k;
        if ((i | 0) == 0) {
            m = (f | 0) != 0;
            if ((l | 0) == 0) {
                if (m) {
                    c[f >> 2] = (g >>> 0) % (j >>> 0);
                    c[f + 4 >> 2] = 0
                }
                n = 0;
                o = (g >>> 0) / (j >>> 0) >>> 0;
                return (E = n, o) | 0
            } else {
                if (!m) {
                    n = 0;
                    o = 0;
                    return (E = n, o) | 0
                }
                c[f >> 2] = a | 0;
                c[f + 4 >> 2] = b & 0;
                n = 0;
                o = 0;
                return (E = n, o) | 0
            }
        }
        m = (l | 0) == 0;
        do if ((j | 0) != 0) {
            if (!m) {
                p = (Gn(l | 0) | 0) - (Gn(i | 0) | 0) | 0;
                if (p >>> 0 <= 31) {
                    q = p + 1 | 0;
                    r = 31 - p | 0;
                    s = p - 31 >> 31;
                    t = q;
                    u = g >>> (q >>> 0) & s | i << r;
                    v = i >>> (q >>> 0) & s;
                    w = 0;
                    x = g << r;
                    break
                }
                if ((f |
                0) == 0) {
                    n = 0;
                    o = 0;
                    return (E = n, o) | 0
                }
                c[f >> 2] = a | 0;
                c[f + 4 >> 2] = h | b & 0;
                n = 0;
                o = 0;
                return (E = n, o) | 0
            }
            r = j - 1 | 0;
            if ((r & j | 0) != 0) {
                s = (Gn(j | 0) | 0) + 33 - (Gn(i | 0) | 0) | 0;
                q = 64 - s | 0;
                p = 32 - s | 0;
                y = p >> 31;
                z = s - 32 | 0;
                A = z >> 31;
                t = s;
                u = p - 1 >> 31 & i >>> (z >>> 0) | (i << p | g >>> (s >>> 0)) & A;
                v = A & i >>> (s >>> 0);
                w = g << q & y;
                x = (i << q | g >>> (z >>> 0)) & y | g << p & s - 33 >> 31;
                break
            }
            if ((f | 0) != 0) {
                c[f >> 2] = r & g;
                c[f + 4 >> 2] = 0
            }
            if ((j | 0) == 1) {
                n = h | b & 0;
                o = a | 0 | 0;
                return (E = n, o) | 0
            } else {
                r = Hn(j | 0) | 0;
                n = i >>> (r >>> 0) | 0;
                o = i << 32 - r | g >>> (r >>> 0) | 0;
                return (E = n, o) | 0
            }
        } else {
            if (m) {
                if ((f | 0) != 0) {
                    c[f >> 2] = (i >>> 0) % (j >>> 0);
                    c[f +
                    4 >> 2] = 0
                }
                n = 0;
                o = (i >>> 0) / (j >>> 0) >>> 0;
                return (E = n, o) | 0
            }
            if ((g | 0) == 0) {
                if ((f | 0) != 0) {
                    c[f >> 2] = 0;
                    c[f + 4 >> 2] = (i >>> 0) % (l >>> 0)
                }
                n = 0;
                o = (i >>> 0) / (l >>> 0) >>> 0;
                return (E = n, o) | 0
            }
            r = l - 1 | 0;
            if ((r & l | 0) == 0) {
                if ((f | 0) != 0) {
                    c[f >> 2] = a | 0;
                    c[f + 4 >> 2] = r & i | b & 0
                }
                n = 0;
                o = i >>> ((Hn(l | 0) | 0) >>> 0);
                return (E = n, o) | 0
            }
            r = (Gn(l | 0) | 0) - (Gn(i | 0) | 0) | 0;
            if (r >>> 0 <= 30) {
                s = r + 1 | 0;
                p = 31 - r | 0;
                t = s;
                u = i << p | g >>> (s >>> 0);
                v = i >>> (s >>> 0);
                w = 0;
                x = g << p;
                break
            }
            if ((f | 0) == 0) {
                n = 0;
                o = 0;
                return (E = n, o) | 0
            }
            c[f >> 2] = a | 0;
            c[f + 4 >> 2] = h | b & 0;
            n = 0;
            o = 0;
            return (E = n, o) | 0
        }
        while (0);
        if ((t | 0) == 0) {
            B = x;
            C = w;
            D = v;
            F =
            u;
            G = 0;
            H = 0
        } else {
            b = d | 0 | 0;
            d = k | e & 0;
            e = zn(b, d, -1, -1) | 0;
            k = E;
            h = x;
            x = w;
            w = v;
            v = u;
            u = t;
            t = 0;
            do {
                a = h;
                h = x >>> 31 | h << 1;
                x = t | x << 1;
                g = v << 1 | a >>> 31 | 0;
                a = v >>> 31 | w << 1 | 0;
                Cn(e, k, g, a) | 0;
                i = E;
                l = i >> 31 | ((i | 0) < 0 ? -1 : 0) << 1;
                t = l & 1;
                v = Cn(g, a, l & b, (((i | 0) < 0 ? -1 : 0) >> 31 | ((i | 0) < 0 ? -1 : 0) << 1) & d) | 0;
                w = E;
                u = u - 1 | 0
            } while ((u | 0) != 0);
            B = h;
            C = x;
            D = w;
            F = v;
            G = 0;
            H = t
        }
        t = C;
        C = 0;
        if ((f | 0) != 0) {
            c[f >> 2] = F;
            c[f + 4 >> 2] = D
        }
        n = (t | 0) >>> 31 | (B | C) << 1 | (C << 1 | t >>> 31) & 0 | G;
        o = (t << 1 | 0 >>> 31) & -2 | H;
        return (E = n, o) | 0
    }
    function Pn(a, b, c, d, e, f, g) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = +g;
        return +ab[a & 1](b |
        0, c | 0, d | 0, e | 0, f | 0, +g)
    }
    function Qn(a, b) {
        a = a | 0;
        b = b | 0;
        return bb[a & 7](b | 0) | 0
    }
    function Rn(a, b, c, d, e, f) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        cb[a & 3](b | 0, c | 0, d | 0, e | 0, f | 0)
    }
    function Sn(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        return +db[a & 15](b | 0, +c)
    }
    function Tn(a, b) {
        a = a | 0;
        b = b | 0;
        eb[a & 127](b | 0)
    }
    function Un(a, b, c, d, e, f) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        return +fb[a & 1](b | 0, c | 0, d | 0, e | 0, +f)
    }
    function Vn(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        gb[a & 63](b | 0, c | 0)
    }
    function Wn(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        return hb[a & 15](b | 0, c | 0, d | 0) | 0
    }
    function Xn(a,
    b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        ib[a & 7](b | 0, c | 0, d | 0)
    }
    function Yn(a) {
        a = a | 0;
        jb[a & 1]()
    }
    function Zn(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = +d;
        kb[a & 31](b | 0, c | 0, +d)
    }
    function _n(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        return lb[a & 7](b | 0, c | 0, d | 0, e | 0) | 0
    }
    function $n(a, b, c, d, e, f, g) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        g = g | 0;
        mb[a & 7](b | 0, c | 0, d | 0, e | 0, f | 0, g | 0)
    }
    function ao(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        return nb[a & 31](b | 0, c | 0) | 0
    }
    function bo(a, b, c, d, e, f) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        return ob[a & 15](b | 0, c | 0, d | 0, e | 0, f | 0) | 0
    }
    function co(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        pb[a & 31](b | 0, c | 0, d | 0, e | 0)
    }
    function eo(a, b, c, d, e, f) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = +f;
        ba(0);
        return 0
    }
    function fo(a) {
        a = a | 0;
        ba(1);
        return 0
    }
    function go(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        ba(2)
    }
    function ho(a, b) {
        a = a | 0;
        b = +b;
        ba(3);
        return 0
    }
    function io(a) {
        a = a | 0;
        ba(4)
    }
    function jo(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = +e;
        ba(5);
        return 0
    }
    function ko(a, b) {
        a = a | 0;
        b = b | 0;
        ba(6)
    }
    function lo(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        ba(7);
        return 0
    }
    function mo(a, b, c) {
        a = a | 0;
        b = b |
        0;
        c = c | 0;
        ba(8)
    }
    function no() {
        ba(9)
    }
    function oo() {
        _a()
    }
    function po(a, b, c) {
        a = a | 0;
        b = b | 0;
        c = +c;
        ba(10)
    }
    function qo(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        ba(11);
        return 0
    }
    function ro(a, b, c, d, e, f) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        f = f | 0;
        ba(12)
    }
    function so(a, b) {
        a = a | 0;
        b = b | 0;
        ba(13);
        return 0
    }
    function to(a, b, c, d, e) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        e = e | 0;
        ba(14);
        return 0
    }
    function uo(a, b, c, d) {
        a = a | 0;
        b = b | 0;
        c = c | 0;
        d = d | 0;
        ba(15)
    }
    var ab = [eo, Gd];
    var bb = [fo, ge, ne, ve, Fe, rm, vn, fo];
    var cb = [go, ln, kn, go];
    var db = [ho, Df, Qf, dg, pg, Bg, Mg, Zg, ph, Hh, Zh,
    ki, ho, ho, ho, ho];
    var eb = [io, pc, Ed, oc, Id, nc, Md, Gb, Wd, Ib, Vd, Cb, Xd, Ce, Be, rf, sf, Ff, Gf, Hf, Tf, Vf, Wf, eg, fg, gg, qg, rg, sg, Cg, Dg, Eg, Og, Pg, Qg, fh, gh, hh, qh, rh, sh, wh, xh, yh, Oh, Ph, Qh, $h, ai, bi, li, ni, oi, si, ti, yi, zi, Di, Ei, Ii, Ji, Wi, Xi, $i, aj, ej, fj, jj, kj, Rj, ck, Ul, Vl, Zl, _l, am, bm, dm, em, Jk, im, km, lm, om, pm, xm, ym, an, dn, bn, cn, en, un, tn, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io, io];
    var fb = [jo, Fd];
    var gb = [ko, Nd, Od, Af, Bf, Ef, xf, yf, Nf, Of, Uf, Kf, Lf, ag, bg, Zf, _f, mg, ng, jg, kg, yg, zg,
    vg, wg, Jg, Kg, Gg, Hg, Wg, Xg, Tg, Ug, mh, nh, jh, kh, Eh, Fh, Bh, Ch, Wh, Xh, Th, Uh, hi, ii, mi, ei, fi, dk, ek, Om, Gi, Bi, hj, Ui, cj, Zi, qi, ko, ko, ko, ko];
    var hb = [lo, Kd, he, pe, we, Ie, qf, gm, mm, sm, Am, fn, lo, lo, lo, lo];
    var ib = [mo, Pd, Rd, Td, Ud, fk, gk, mo];
    var jb = [no, oo];
    var kb = [po, le, te, Ae, Le, Cf, Pf, cg, og, Ag, Lg, Yg, oh, Gh, Yh, ji, wm, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po];
    var lb = [qo, tf, uf, hm, nm, qo, qo, qo];
    var mb = [ro, ie, qe, xe, He, tm, nn, mn];
    var nb = [so, Hd, Jd, Ld, fe, me, ue, Ee, zf, Mf, $f, lg, xg, Ig, Vg, lh, Dh, Vh, gi, Wl, Xl, fm, jm, qm, zm, Nm, Zj, Kk, Lk, Wk, Vk,
    _k];
    var ob = [to, je, re, ye, Je, um, Fi, Ai, gj, Ti, bj, Yi, pi, to, to, to];
    var pb = [uo, Qd, Sd, ke, se, ze, Ke, ri, Ci, Hi, Vi, _i, dj, ij, Yl, $l, cm, vm, gn, hn, uo, uo, uo, uo, uo, uo, uo, uo, uo, uo, uo, uo];
    return {
        _b2PrismaticJoint_IsMotorEnabled: Yc,
        _b2Body_GetWorldVector: fc,
        _strlen: yn,
        _b2Body_GetLocalVector: _b,
        _b2PrismaticJoint_GetMotorSpeed: Vc,
        _b2RopeJointDef_Create: kd,
        _b2World_CreateParticleSystem: sc,
        _b2ParticleSystem_SetRadius: Dd,
        _b2FrictionJointDef_Create: Gc,
        _b2World_RayCast: yc,
        _b2MotorJointDef_InitializeAndCreate: Pc,
        _b2GearJoint_GetRatio: Ic,
        _b2Body_GetLocalPoint: Zb,
        _memcpy: An,
        _b2RevoluteJoint_EnableLimit: cd,
        _b2Body_DestroyFixture: Ub,
        _b2World_Create: qc,
        _b2PolygonShape_CreateFixture_3: Hb,
        _b2PolygonShape_CreateFixture_6: Lb,
        _b2PolygonShape_CreateFixture_7: Mb,
        _b2PolygonShape_CreateFixture_4: Jb,
        _b2PolygonShape_CreateFixture_5: Kb,
        _b2Body_SetAwake: gc,
        _b2Body_GetWorldCenter: dc,
        _b2ParticleGroup_DestroyParticles: td,
        _b2PrismaticJoint_EnableLimit: Sc,
        _b2Fixture_TestPoint: mc,
        _b2MotorJoint_SetLinearOffset: Nc,
        _free: pn,
        _b2ParticleSystem_CreateParticle: wd,
        _b2Body_SetLinearVelocity: ic,
        _b2CircleShape_CreateParticleGroup: Db,
        _b2WeldJointDef_Create: ld,
        _b2Body_GetAngularVelocity: Wb,
        _b2Body_ApplyForceToCenter: Sb,
        _b2DistanceJointDef_InitializeAndCreate: Fc,
        _b2Body_ApplyForce: Rb,
        _b2RevoluteJoint_SetMotorSpeed: jd,
        _b2Body_GetPosition: ac,
        _b2World_CreateBody: rc,
        _b2Body_GetLinearVelocity: Yb,
        _b2Body_SetMassData: jc,
        _b2MouseJointDef_Create: Rc,
        _b2ParticleSystem_GetColorBuffer: xd,
        _b2DistanceJointDef_Create: Ec,
        _b2ParticleSystem_GetPositionBuffer: zd,
        _b2CircleShape_DestroyParticlesInShape: Eb,
        _b2World_QueryAABB: xc,
        _b2PolygonShape_DestroyParticlesInShape_4: Pb,
        _b2RevoluteJointDef_InitializeAndCreate: id,
        _b2GearJointDef_Create: Jc,
        _b2PrismaticJoint_IsLimitEnabled: Xc,
        _b2Contact_GetWorldManifold: Dc,
        _b2WheelJoint_SetSpringFrequencyHz: od,
        _b2Body_ApplyTorque: Tb,
        _b2ParticleGroup_ApplyLinearImpulse: sd,
        _b2PrismaticJointDef_InitializeAndCreate: $c,
        _memset: xn,
        _b2MotorJointDef_Create: Oc,
        _b2World_DestroyBody: uc,
        _b2RevoluteJointDef_Create: hd,
        _b2ParticleGroup_GetParticleCount: vd,
        _b2World_SetGravity: Ac,
        _b2PrismaticJoint_EnableMotor: Tc,
        _b2PolygonShape_CreateParticleGroup_4: Ob,
        _b2PolygonShape_CreateFixture_8: Nb,
        _b2Body_SetAngularVelocity: hc,
        _b2Body_GetWorldPoint: ec,
        _b2WheelJoint_SetMotorSpeed: nd,
        _b2FrictionJointDef_InitializeAndCreate: Hc,
        _b2World_SetContactListener: zc,
        _b2ParticleSystem_SetDamping: Bd,
        _b2Body_SetType: lc,
        _b2Body_SetTransform: kc,
        _b2CircleShape_CreateFixture: Bb,
        _b2RevoluteJoint_GetJointAngle: ed,
        _b2ParticleGroup_ApplyForce: rd,
        _malloc: on,
        _b2Contact_GetManifold: Cc,
        _b2RevoluteJoint_IsMotorEnabled: gd,
        _b2ParticleSystem_GetVelocityBuffer: Ad,
        _b2RevoluteJoint_IsLimitEnabled: fd,
        _b2World_DestroyParticleSystem: wc,
        _b2RevoluteJoint_EnableMotor: dd,
        _b2Body_GetTransform: bc,
        _b2WeldJointDef_InitializeAndCreate: md,
        _b2EdgeShape_CreateFixture: Fb,
        _b2Body_GetType: cc,
        _b2Manifold_GetPointCount: yb,
        _b2ParticleSystem_SetDensity: Cd,
        _b2PrismaticJoint_GetMotorForce: Wc,
        _b2Joint_GetBodyA: Kc,
        _b2PulleyJointDef_InitializeAndCreate: bd,
        _b2Joint_GetBodyB: Lc,
        _b2ParticleSystem_GetParticleCount: yd,
        _b2MouseJoint_SetTarget: Qc,
        _b2Body_ApplyAngularImpulse: Qb,
        _b2ChainShape_CreateFixture: zb,
        _b2World_DestroyJoint: vc,
        _b2MotorJoint_SetAngularOffset: Mc,
        _b2World_Delete: tc,
        _b2PrismaticJoint_GetJointTranslation: Uc,
        _i64Add: zn,
        _b2Body_GetMass: $b,
        _b2Body_GetAngle: Vb,
        _b2ParticleGroup_GetBufferIndex: ud,
        _b2WheelJointDef_InitializeAndCreate: qd,
        _b2World_Step: Bc,
        _b2PrismaticJointDef_Create: _c,
        _b2WheelJointDef_Create: pd,
        _b2PulleyJointDef_Create: ad,
        _b2Body_GetInertia: Xb,
        _memmove: Bn,
        _b2PrismaticJoint_SetMotorSpeed: Zc,
        __GLOBAL__I_a: Yd,
        runPostSets: wn,
        stackAlloc: qb,
        stackSave: rb,
        stackRestore: sb,
        setThrew: tb,
        setTempRet0: wb,
        getTempRet0: xb,
        dynCall_diiiiid: Pn,
        dynCall_ii: Qn,
        dynCall_viiiii: Rn,
        dynCall_did: Sn,
        dynCall_vi: Tn,
        dynCall_diiiid: Un,
        dynCall_vii: Vn,
        dynCall_iiii: Wn,
        dynCall_viii: Xn,
        dynCall_v: Yn,
        dynCall_viid: Zn,
        dynCall_iiiii: _n,
        dynCall_viiiiii: $n,
        dynCall_iii: ao,
        dynCall_iiiiii: bo,
        dynCall_viiii: co
    }
}({
    "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_diiiiid": invoke_diiiiid,
    "invoke_ii": invoke_ii,
    "invoke_viiiii": invoke_viiiii,
    "invoke_did": invoke_did,
    "invoke_vi": invoke_vi,
    "invoke_diiiid": invoke_diiiid,
    "invoke_vii": invoke_vii,
    "invoke_iiii": invoke_iiii,
    "invoke_viii": invoke_viii,
    "invoke_v": invoke_v,
    "invoke_viid": invoke_viid,
    "invoke_iiiii": invoke_iiiii,
    "invoke_viiiiii": invoke_viiiiii,
    "invoke_iii": invoke_iii,
    "invoke_iiiiii": invoke_iiiiii,
    "invoke_viiii": invoke_viiii,
    "_cosf": _cosf,
    "__ZSt9terminatev": __ZSt9terminatev,
    "_b2WorldPreSolve": _b2WorldPreSolve,
    "___cxa_is_number_type": ___cxa_is_number_type,
    "___cxa_allocate_exception": ___cxa_allocate_exception,
    "___cxa_find_matching_catch": ___cxa_find_matching_catch,
    "_fflush": _fflush,
    "_time": _time,
    "__exit": __exit,
    "___setErrNo": ___setErrNo,
    "_sbrk": _sbrk,
    "___cxa_begin_catch": ___cxa_begin_catch,
    "_sinf": _sinf,
    "___resumeException": ___resumeException,
    "__ZSt18uncaught_exceptionv": __ZSt18uncaught_exceptionv,
    "_b2WorldRayCastCallback": _b2WorldRayCastCallback,
    "_emscripten_memcpy_big": _emscripten_memcpy_big,
    "_floorf": _floorf,
    "_sqrtf": _sqrtf,
    "_b2WorldBeginContactBody": _b2WorldBeginContactBody,
    "___errno_location": ___errno_location,
    "__ZNSt9exceptionD2Ev": __ZNSt9exceptionD2Ev,
    "___cxa_throw": ___cxa_throw,
    "_sysconf": _sysconf,
    "_abort": _abort,
    "___cxa_does_inherit": ___cxa_does_inherit,
    "_b2WorldEndContactBody": _b2WorldEndContactBody,
    "_b2WorldQueryAABB": _b2WorldQueryAABB,
    "_b2WorldPostSolve": _b2WorldPostSolve,
    "_exit": _exit,
    "___cxa_pure_virtual": ___cxa_pure_virtual,
    "STACKTOP": STACKTOP,
    "STACK_MAX": STACK_MAX,
    "tempDoublePtr": tempDoublePtr,
    "ABORT": ABORT,
    "cttz_i8": cttz_i8,
    "ctlz_i8": ctlz_i8,
    "NaN": NaN,
    "Infinity": Infinity,
    "__ZTISt9exception": __ZTISt9exception
}, buffer);
var _b2PrismaticJoint_IsMotorEnabled = Module["_b2PrismaticJoint_IsMotorEnabled"] = asm["_b2PrismaticJoint_IsMotorEnabled"];
var _b2Body_GetWorldVector = Module["_b2Body_GetWorldVector"] = asm["_b2Body_GetWorldVector"];
var _strlen = Module["_strlen"] = asm["_strlen"];
var _b2Body_GetLocalVector = Module["_b2Body_GetLocalVector"] = asm["_b2Body_GetLocalVector"];
var _b2PrismaticJoint_GetMotorSpeed = Module["_b2PrismaticJoint_GetMotorSpeed"] = asm["_b2PrismaticJoint_GetMotorSpeed"];
var _b2RopeJointDef_Create = Module["_b2RopeJointDef_Create"] = asm["_b2RopeJointDef_Create"];
var _b2World_CreateParticleSystem = Module["_b2World_CreateParticleSystem"] = asm["_b2World_CreateParticleSystem"];
var _b2ParticleSystem_SetRadius = Module["_b2ParticleSystem_SetRadius"] = asm["_b2ParticleSystem_SetRadius"];
var _b2FrictionJointDef_Create = Module["_b2FrictionJointDef_Create"] = asm["_b2FrictionJointDef_Create"];
var _b2World_RayCast = Module["_b2World_RayCast"] = asm["_b2World_RayCast"];
var _b2MotorJointDef_InitializeAndCreate = Module["_b2MotorJointDef_InitializeAndCreate"] = asm["_b2MotorJointDef_InitializeAndCreate"];
var _b2GearJoint_GetRatio = Module["_b2GearJoint_GetRatio"] = asm["_b2GearJoint_GetRatio"];
var _b2Body_GetLocalPoint = Module["_b2Body_GetLocalPoint"] = asm["_b2Body_GetLocalPoint"];
var _memcpy = Module["_memcpy"] = asm["_memcpy"];
var _b2RevoluteJoint_EnableLimit = Module["_b2RevoluteJoint_EnableLimit"] = asm["_b2RevoluteJoint_EnableLimit"];
var _b2Body_DestroyFixture = Module["_b2Body_DestroyFixture"] = asm["_b2Body_DestroyFixture"];
var _b2World_Create = Module["_b2World_Create"] = asm["_b2World_Create"];
var _b2PolygonShape_CreateFixture_3 = Module["_b2PolygonShape_CreateFixture_3"] = asm["_b2PolygonShape_CreateFixture_3"];
var _b2PolygonShape_CreateFixture_6 = Module["_b2PolygonShape_CreateFixture_6"] = asm["_b2PolygonShape_CreateFixture_6"];
var _b2PolygonShape_CreateFixture_7 = Module["_b2PolygonShape_CreateFixture_7"] = asm["_b2PolygonShape_CreateFixture_7"];
var _b2PolygonShape_CreateFixture_4 = Module["_b2PolygonShape_CreateFixture_4"] = asm["_b2PolygonShape_CreateFixture_4"];
var _b2PolygonShape_CreateFixture_5 = Module["_b2PolygonShape_CreateFixture_5"] = asm["_b2PolygonShape_CreateFixture_5"];
var _b2Body_SetAwake = Module["_b2Body_SetAwake"] = asm["_b2Body_SetAwake"];
var _b2Body_GetWorldCenter = Module["_b2Body_GetWorldCenter"] = asm["_b2Body_GetWorldCenter"];
var _b2ParticleGroup_DestroyParticles = Module["_b2ParticleGroup_DestroyParticles"] = asm["_b2ParticleGroup_DestroyParticles"];
var _b2PrismaticJoint_EnableLimit = Module["_b2PrismaticJoint_EnableLimit"] = asm["_b2PrismaticJoint_EnableLimit"];
var _b2Fixture_TestPoint = Module["_b2Fixture_TestPoint"] = asm["_b2Fixture_TestPoint"];
var _b2MotorJoint_SetLinearOffset = Module["_b2MotorJoint_SetLinearOffset"] = asm["_b2MotorJoint_SetLinearOffset"];
var _free = Module["_free"] = asm["_free"];
var _b2ParticleSystem_CreateParticle = Module["_b2ParticleSystem_CreateParticle"] = asm["_b2ParticleSystem_CreateParticle"];
var _b2Body_SetLinearVelocity = Module["_b2Body_SetLinearVelocity"] = asm["_b2Body_SetLinearVelocity"];
var _b2CircleShape_CreateParticleGroup = Module["_b2CircleShape_CreateParticleGroup"] = asm["_b2CircleShape_CreateParticleGroup"];
var _b2WeldJointDef_Create = Module["_b2WeldJointDef_Create"] = asm["_b2WeldJointDef_Create"];
var _b2Body_GetAngularVelocity = Module["_b2Body_GetAngularVelocity"] = asm["_b2Body_GetAngularVelocity"];
var _b2Body_ApplyForceToCenter = Module["_b2Body_ApplyForceToCenter"] = asm["_b2Body_ApplyForceToCenter"];
var _b2DistanceJointDef_InitializeAndCreate = Module["_b2DistanceJointDef_InitializeAndCreate"] = asm["_b2DistanceJointDef_InitializeAndCreate"];
var _b2Body_ApplyForce = Module["_b2Body_ApplyForce"] = asm["_b2Body_ApplyForce"];
var _b2RevoluteJoint_SetMotorSpeed = Module["_b2RevoluteJoint_SetMotorSpeed"] = asm["_b2RevoluteJoint_SetMotorSpeed"];
var _b2Body_GetPosition = Module["_b2Body_GetPosition"] = asm["_b2Body_GetPosition"];
var _b2World_CreateBody = Module["_b2World_CreateBody"] = asm["_b2World_CreateBody"];
var _b2Body_GetLinearVelocity = Module["_b2Body_GetLinearVelocity"] = asm["_b2Body_GetLinearVelocity"];
var _b2Body_SetMassData = Module["_b2Body_SetMassData"] = asm["_b2Body_SetMassData"];
var _b2MouseJointDef_Create = Module["_b2MouseJointDef_Create"] = asm["_b2MouseJointDef_Create"];
var _b2ParticleSystem_GetColorBuffer = Module["_b2ParticleSystem_GetColorBuffer"] = asm["_b2ParticleSystem_GetColorBuffer"];
var _b2DistanceJointDef_Create = Module["_b2DistanceJointDef_Create"] = asm["_b2DistanceJointDef_Create"];
var _b2ParticleSystem_GetPositionBuffer = Module["_b2ParticleSystem_GetPositionBuffer"] = asm["_b2ParticleSystem_GetPositionBuffer"];
var _b2CircleShape_DestroyParticlesInShape = Module["_b2CircleShape_DestroyParticlesInShape"] = asm["_b2CircleShape_DestroyParticlesInShape"];
var _b2World_QueryAABB = Module["_b2World_QueryAABB"] = asm["_b2World_QueryAABB"];
var _b2PolygonShape_DestroyParticlesInShape_4 = Module["_b2PolygonShape_DestroyParticlesInShape_4"] = asm["_b2PolygonShape_DestroyParticlesInShape_4"];
var _b2RevoluteJointDef_InitializeAndCreate = Module["_b2RevoluteJointDef_InitializeAndCreate"] = asm["_b2RevoluteJointDef_InitializeAndCreate"];
var _b2GearJointDef_Create = Module["_b2GearJointDef_Create"] = asm["_b2GearJointDef_Create"];
var _b2PrismaticJoint_IsLimitEnabled = Module["_b2PrismaticJoint_IsLimitEnabled"] = asm["_b2PrismaticJoint_IsLimitEnabled"];
var _b2Contact_GetWorldManifold = Module["_b2Contact_GetWorldManifold"] = asm["_b2Contact_GetWorldManifold"];
var _b2WheelJoint_SetSpringFrequencyHz = Module["_b2WheelJoint_SetSpringFrequencyHz"] = asm["_b2WheelJoint_SetSpringFrequencyHz"];
var _b2Body_ApplyTorque = Module["_b2Body_ApplyTorque"] = asm["_b2Body_ApplyTorque"];
var _b2ParticleGroup_ApplyLinearImpulse = Module["_b2ParticleGroup_ApplyLinearImpulse"] = asm["_b2ParticleGroup_ApplyLinearImpulse"];
var _b2PrismaticJointDef_InitializeAndCreate = Module["_b2PrismaticJointDef_InitializeAndCreate"] = asm["_b2PrismaticJointDef_InitializeAndCreate"];
var _memset = Module["_memset"] = asm["_memset"];
var _b2MotorJointDef_Create = Module["_b2MotorJointDef_Create"] = asm["_b2MotorJointDef_Create"];
var _b2World_DestroyBody = Module["_b2World_DestroyBody"] = asm["_b2World_DestroyBody"];
var _b2RevoluteJointDef_Create = Module["_b2RevoluteJointDef_Create"] = asm["_b2RevoluteJointDef_Create"];
var _b2ParticleGroup_GetParticleCount = Module["_b2ParticleGroup_GetParticleCount"] = asm["_b2ParticleGroup_GetParticleCount"];
var _b2World_SetGravity = Module["_b2World_SetGravity"] = asm["_b2World_SetGravity"];
var _b2PrismaticJoint_EnableMotor = Module["_b2PrismaticJoint_EnableMotor"] = asm["_b2PrismaticJoint_EnableMotor"];
var _b2PolygonShape_CreateParticleGroup_4 = Module["_b2PolygonShape_CreateParticleGroup_4"] = asm["_b2PolygonShape_CreateParticleGroup_4"];
var _b2PolygonShape_CreateFixture_8 = Module["_b2PolygonShape_CreateFixture_8"] = asm["_b2PolygonShape_CreateFixture_8"];
var _b2Body_SetAngularVelocity = Module["_b2Body_SetAngularVelocity"] = asm["_b2Body_SetAngularVelocity"];
var _b2Body_GetWorldPoint = Module["_b2Body_GetWorldPoint"] = asm["_b2Body_GetWorldPoint"];
var _b2WheelJoint_SetMotorSpeed = Module["_b2WheelJoint_SetMotorSpeed"] = asm["_b2WheelJoint_SetMotorSpeed"];
var _b2FrictionJointDef_InitializeAndCreate = Module["_b2FrictionJointDef_InitializeAndCreate"] = asm["_b2FrictionJointDef_InitializeAndCreate"];
var _b2World_SetContactListener = Module["_b2World_SetContactListener"] = asm["_b2World_SetContactListener"];
var _b2ParticleSystem_SetDamping = Module["_b2ParticleSystem_SetDamping"] = asm["_b2ParticleSystem_SetDamping"];
var _b2Body_SetType = Module["_b2Body_SetType"] = asm["_b2Body_SetType"];
var _b2Body_SetTransform = Module["_b2Body_SetTransform"] = asm["_b2Body_SetTransform"];
var _b2CircleShape_CreateFixture = Module["_b2CircleShape_CreateFixture"] = asm["_b2CircleShape_CreateFixture"];
var _b2RevoluteJoint_GetJointAngle = Module["_b2RevoluteJoint_GetJointAngle"] = asm["_b2RevoluteJoint_GetJointAngle"];
var _b2ParticleGroup_ApplyForce = Module["_b2ParticleGroup_ApplyForce"] = asm["_b2ParticleGroup_ApplyForce"];
var _malloc = Module["_malloc"] = asm["_malloc"];
var _b2Contact_GetManifold = Module["_b2Contact_GetManifold"] = asm["_b2Contact_GetManifold"];
var _b2RevoluteJoint_IsMotorEnabled = Module["_b2RevoluteJoint_IsMotorEnabled"] = asm["_b2RevoluteJoint_IsMotorEnabled"];
var _b2ParticleSystem_GetVelocityBuffer = Module["_b2ParticleSystem_GetVelocityBuffer"] = asm["_b2ParticleSystem_GetVelocityBuffer"];
var _b2RevoluteJoint_IsLimitEnabled = Module["_b2RevoluteJoint_IsLimitEnabled"] = asm["_b2RevoluteJoint_IsLimitEnabled"];
var _b2World_DestroyParticleSystem = Module["_b2World_DestroyParticleSystem"] = asm["_b2World_DestroyParticleSystem"];
var _b2RevoluteJoint_EnableMotor = Module["_b2RevoluteJoint_EnableMotor"] = asm["_b2RevoluteJoint_EnableMotor"];
var _b2Body_GetTransform = Module["_b2Body_GetTransform"] = asm["_b2Body_GetTransform"];
var _b2WeldJointDef_InitializeAndCreate = Module["_b2WeldJointDef_InitializeAndCreate"] = asm["_b2WeldJointDef_InitializeAndCreate"];
var _b2EdgeShape_CreateFixture = Module["_b2EdgeShape_CreateFixture"] = asm["_b2EdgeShape_CreateFixture"];
var _b2Body_GetType = Module["_b2Body_GetType"] = asm["_b2Body_GetType"];
var _b2Manifold_GetPointCount = Module["_b2Manifold_GetPointCount"] = asm["_b2Manifold_GetPointCount"];
var _b2ParticleSystem_SetDensity = Module["_b2ParticleSystem_SetDensity"] = asm["_b2ParticleSystem_SetDensity"];
var _b2PrismaticJoint_GetMotorForce = Module["_b2PrismaticJoint_GetMotorForce"] = asm["_b2PrismaticJoint_GetMotorForce"];
var _b2Joint_GetBodyA = Module["_b2Joint_GetBodyA"] = asm["_b2Joint_GetBodyA"];
var _b2PulleyJointDef_InitializeAndCreate = Module["_b2PulleyJointDef_InitializeAndCreate"] = asm["_b2PulleyJointDef_InitializeAndCreate"];
var _b2Joint_GetBodyB = Module["_b2Joint_GetBodyB"] = asm["_b2Joint_GetBodyB"];
var _b2ParticleSystem_GetParticleCount = Module["_b2ParticleSystem_GetParticleCount"] = asm["_b2ParticleSystem_GetParticleCount"];
var _b2MouseJoint_SetTarget = Module["_b2MouseJoint_SetTarget"] = asm["_b2MouseJoint_SetTarget"];
var _b2Body_ApplyAngularImpulse = Module["_b2Body_ApplyAngularImpulse"] = asm["_b2Body_ApplyAngularImpulse"];
var _b2ChainShape_CreateFixture = Module["_b2ChainShape_CreateFixture"] = asm["_b2ChainShape_CreateFixture"];
var _b2World_DestroyJoint = Module["_b2World_DestroyJoint"] = asm["_b2World_DestroyJoint"];
var _b2MotorJoint_SetAngularOffset = Module["_b2MotorJoint_SetAngularOffset"] = asm["_b2MotorJoint_SetAngularOffset"];
var _b2World_Delete = Module["_b2World_Delete"] = asm["_b2World_Delete"];
var _b2PrismaticJoint_GetJointTranslation = Module["_b2PrismaticJoint_GetJointTranslation"] = asm["_b2PrismaticJoint_GetJointTranslation"];
var _i64Add = Module["_i64Add"] = asm["_i64Add"];
var _b2Body_GetMass = Module["_b2Body_GetMass"] = asm["_b2Body_GetMass"];
var _b2Body_GetAngle = Module["_b2Body_GetAngle"] = asm["_b2Body_GetAngle"];
var _b2ParticleGroup_GetBufferIndex = Module["_b2ParticleGroup_GetBufferIndex"] = asm["_b2ParticleGroup_GetBufferIndex"];
var _b2WheelJointDef_InitializeAndCreate = Module["_b2WheelJointDef_InitializeAndCreate"] = asm["_b2WheelJointDef_InitializeAndCreate"];
var _b2World_Step = Module["_b2World_Step"] = asm["_b2World_Step"];
var _b2PrismaticJointDef_Create = Module["_b2PrismaticJointDef_Create"] = asm["_b2PrismaticJointDef_Create"];
var _b2WheelJointDef_Create = Module["_b2WheelJointDef_Create"] = asm["_b2WheelJointDef_Create"];
var _b2PulleyJointDef_Create = Module["_b2PulleyJointDef_Create"] = asm["_b2PulleyJointDef_Create"];
var _b2Body_GetInertia = Module["_b2Body_GetInertia"] = asm["_b2Body_GetInertia"];
var _memmove = Module["_memmove"] = asm["_memmove"];
var _b2PrismaticJoint_SetMotorSpeed = Module["_b2PrismaticJoint_SetMotorSpeed"] = asm["_b2PrismaticJoint_SetMotorSpeed"];
var __GLOBAL__I_a = Module["__GLOBAL__I_a"] = asm["__GLOBAL__I_a"];
var runPostSets = Module["runPostSets"] = asm["runPostSets"];
var dynCall_diiiiid = Module["dynCall_diiiiid"] = asm["dynCall_diiiiid"];
var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"];
var dynCall_viiiii = Module["dynCall_viiiii"] = asm["dynCall_viiiii"];
var dynCall_did = Module["dynCall_did"] = asm["dynCall_did"];
var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"];
var dynCall_diiiid = Module["dynCall_diiiid"] = asm["dynCall_diiiid"];
var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
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_viid = Module["dynCall_viid"] = asm["dynCall_viid"];
var dynCall_iiiii = Module["dynCall_iiiii"] = asm["dynCall_iiiii"];
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 = asm["stackAlloc"];
Runtime.stackSave = asm["stackSave"];
Runtime.stackRestore = asm["stackRestore"];
Runtime.setTempRet0 = asm["setTempRet0"];
Runtime.getTempRet0 = asm["getTempRet0"];
var i64Math = function() {
    var goog = {
        math: {}
    };
    goog.math.Long = function(low, high) {
        this.low_ = low | 0;
        this.high_ = high | 0
    };
    goog.math.Long.IntCache_ = {};
    goog.math.Long.fromInt = function(value) {
        if (-128 <= value && value < 128) {
            var cachedObj = goog.math.Long.IntCache_[value];
            if (cachedObj)
                return cachedObj
        }
        var obj = new goog.math.Long(value | 0, value < 0 ? -1 : 0);
        if (-128 <= value && value < 128)
            goog.math.Long.IntCache_[value] = obj;
        return obj
    };
    goog.math.Long.fromNumber = function(value) {
        if (isNaN(value) || !isFinite(value))
            return goog.math.Long.ZERO;
        else if (value <= -goog.math.Long.TWO_PWR_63_DBL_)
            return goog.math.Long.MIN_VALUE;
        else if (value + 1 >= goog.math.Long.TWO_PWR_63_DBL_)
            return goog.math.Long.MAX_VALUE;
        else if (value < 0)
            return goog.math.Long.fromNumber(-value).negate();
        else
            return new goog.math.Long(value % goog.math.Long.TWO_PWR_32_DBL_ | 0, value / goog.math.Long.TWO_PWR_32_DBL_ | 0)
    };
    goog.math.Long.fromBits = function(lowBits, highBits) {
        return new goog.math.Long(lowBits, highBits)
    };
    goog.math.Long.fromString = function(str, opt_radix) {
        if (str.length == 0)
            throw Error("number format error: empty string");
        var radix = opt_radix || 10;
        if (radix < 2 || 36 < radix)
            throw Error("radix out of range: " + radix);
        if (str.charAt(0) == "-")
            return goog.math.Long.fromString(str.substring(1), radix).negate();
        else if (str.indexOf("-") >= 0)
            throw Error('number format error: interior "-" character: ' + str);
        var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 8));
        var result = goog.math.Long.ZERO;
        for (var i = 0; i < str.length; i += 8) {
            var size = Math.min(8, str.length - i);
            var value = parseInt(str.substring(i, i + size), radix);
            if (size < 8) {
                var power = goog.math.Long.fromNumber(Math.pow(radix,
                size));
                result = result.multiply(power).add(goog.math.Long.fromNumber(value))
            } else {
                result = result.multiply(radixToPower);
                result = result.add(goog.math.Long.fromNumber(value))
            }
        }
        return result
    };
    goog.math.Long.TWO_PWR_16_DBL_ = 1 << 16;
    goog.math.Long.TWO_PWR_24_DBL_ = 1 << 24;
    goog.math.Long.TWO_PWR_32_DBL_ = goog.math.Long.TWO_PWR_16_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
    goog.math.Long.TWO_PWR_31_DBL_ = goog.math.Long.TWO_PWR_32_DBL_ / 2;
    goog.math.Long.TWO_PWR_48_DBL_ = goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
    goog.math.Long.TWO_PWR_64_DBL_ = goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_32_DBL_;
    goog.math.Long.TWO_PWR_63_DBL_ = goog.math.Long.TWO_PWR_64_DBL_ / 2;
    goog.math.Long.ZERO = goog.math.Long.fromInt(0);
    goog.math.Long.ONE = goog.math.Long.fromInt(1);
    goog.math.Long.NEG_ONE = goog.math.Long.fromInt(-1);
    goog.math.Long.MAX_VALUE = goog.math.Long.fromBits(4294967295 | 0, 2147483647 | 0);
    goog.math.Long.MIN_VALUE = goog.math.Long.fromBits(0, 2147483648 | 0);
    goog.math.Long.TWO_PWR_24_ = goog.math.Long.fromInt(1 << 24);
    goog.math.Long.prototype.toInt =
    function() {
        return this.low_
    };
    goog.math.Long.prototype.toNumber = function() {
        return this.high_ * goog.math.Long.TWO_PWR_32_DBL_ + this.getLowBitsUnsigned()
    };
    goog.math.Long.prototype.toString = function(opt_radix) {
        var radix = opt_radix || 10;
        if (radix < 2 || 36 < radix)
            throw Error("radix out of range: " + radix);
        if (this.isZero())
            return "0";
        if (this.isNegative())
            if (this.equals(goog.math.Long.MIN_VALUE)) {
                var radixLong = goog.math.Long.fromNumber(radix);
                var div = this.div(radixLong);
                var rem = div.multiply(radixLong).subtract(this);
                return div.toString(radix) + rem.toInt().toString(radix)
            } else
                return "-" + this.negate().toString(radix);
        var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 6));
        var rem = this;
        var result = "";
        while (true) {
            var remDiv = rem.div(radixToPower);
            var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt();
            var digits = intval.toString(radix);
            rem = remDiv;
            if (rem.isZero())
                return digits + result;
            else {
                while (digits.length < 6)
                    digits = "0" + digits;
                result = "" + digits + result
            }
        }
    };
    goog.math.Long.prototype.getHighBits = function() {
        return this.high_
    };
    goog.math.Long.prototype.getLowBits = function() {
        return this.low_
    };
    goog.math.Long.prototype.getLowBitsUnsigned = function() {
        return this.low_ >= 0 ? this.low_ : goog.math.Long.TWO_PWR_32_DBL_ + this.low_
    };
    goog.math.Long.prototype.getNumBitsAbs = function() {
        if (this.isNegative())
            if (this.equals(goog.math.Long.MIN_VALUE))
                return 64;
            else
                return this.negate().getNumBitsAbs();
        else {
            var val = this.high_ != 0 ? this.high_ : this.low_;
            for (var bit = 31; bit > 0; bit--)
                if ((val & 1 << bit) != 0)
                    break;
            return this.high_ != 0 ? bit + 33 : bit + 1
        }
    };
    goog.math.Long.prototype.isZero =
    function() {
        return this.high_ == 0 && this.low_ == 0
    };
    goog.math.Long.prototype.isNegative = function() {
        return this.high_ < 0
    };
    goog.math.Long.prototype.isOdd = function() {
        return (this.low_ & 1) == 1
    };
    goog.math.Long.prototype.equals = function(other) {
        return this.high_ == other.high_ && this.low_ == other.low_
    };
    goog.math.Long.prototype.notEquals = function(other) {
        return this.high_ != other.high_ || this.low_ != other.low_
    };
    goog.math.Long.prototype.lessThan = function(other) {
        return this.compare(other) < 0
    };
    goog.math.Long.prototype.lessThanOrEqual =
    function(other) {
        return this.compare(other) <= 0
    };
    goog.math.Long.prototype.greaterThan = function(other) {
        return this.compare(other) > 0
    };
    goog.math.Long.prototype.greaterThanOrEqual = function(other) {
        return this.compare(other) >= 0
    };
    goog.math.Long.prototype.compare = function(other) {
        if (this.equals(other))
            return 0;
        var thisNeg = this.isNegative();
        var otherNeg = other.isNegative();
        if (thisNeg && !otherNeg)
            return -1;
        if (!thisNeg && otherNeg)
            return 1;
        if (this.subtract(other).isNegative())
            return -1;
        else
            return 1
    };
    goog.math.Long.prototype.negate =
    function() {
        if (this.equals(goog.math.Long.MIN_VALUE))
            return goog.math.Long.MIN_VALUE;
        else
            return this.not().add(goog.math.Long.ONE)
    };
    goog.math.Long.prototype.add = function(other) {
        var a48 = this.high_ >>> 16;
        var a32 = this.high_ & 65535;
        var a16 = this.low_ >>> 16;
        var a00 = this.low_ & 65535;
        var b48 = other.high_ >>> 16;
        var b32 = other.high_ & 65535;
        var b16 = other.low_ >>> 16;
        var b00 = other.low_ & 65535;
        var c48 = 0,
            c32 = 0,
            c16 = 0,
            c00 = 0;
        c00 += a00 + b00;
        c16 += c00 >>> 16;
        c00 &= 65535;
        c16 += a16 + b16;
        c32 += c16 >>> 16;
        c16 &= 65535;
        c32 += a32 + b32;
        c48 += c32 >>>
        16;
        c32 &= 65535;
        c48 += a48 + b48;
        c48 &= 65535;
        return goog.math.Long.fromBits(c16 << 16 | c00, c48 << 16 | c32)
    };
    goog.math.Long.prototype.subtract = function(other) {
        return this.add(other.negate())
    };
    goog.math.Long.prototype.multiply = function(other) {
        if (this.isZero())
            return goog.math.Long.ZERO;
        else if (other.isZero())
            return goog.math.Long.ZERO;
        if (this.equals(goog.math.Long.MIN_VALUE))
            return other.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO;
        else if (other.equals(goog.math.Long.MIN_VALUE))
            return this.isOdd() ? goog.math.Long.MIN_VALUE :
            goog.math.Long.ZERO;
        if (this.isNegative())
            if (other.isNegative())
                return this.negate().multiply(other.negate());
            else
                return this.negate().multiply(other).negate();
        else if (other.isNegative())
            return this.multiply(other.negate()).negate();
        if (this.lessThan(goog.math.Long.TWO_PWR_24_) && other.lessThan(goog.math.Long.TWO_PWR_24_))
            return goog.math.Long.fromNumber(this.toNumber() * other.toNumber());
        var a48 = this.high_ >>> 16;
        var a32 = this.high_ & 65535;
        var a16 = this.low_ >>> 16;
        var a00 = this.low_ & 65535;
        var b48 = other.high_ >>>
        16;
        var b32 = other.high_ & 65535;
        var b16 = other.low_ >>> 16;
        var b00 = other.low_ & 65535;
        var c48 = 0,
            c32 = 0,
            c16 = 0,
            c00 = 0;
        c00 += a00 * b00;
        c16 += c00 >>> 16;
        c00 &= 65535;
        c16 += a16 * b00;
        c32 += c16 >>> 16;
        c16 &= 65535;
        c16 += a00 * b16;
        c32 += c16 >>> 16;
        c16 &= 65535;
        c32 += a32 * b00;
        c48 += c32 >>> 16;
        c32 &= 65535;
        c32 += a16 * b16;
        c48 += c32 >>> 16;
        c32 &= 65535;
        c32 += a00 * b32;
        c48 += c32 >>> 16;
        c32 &= 65535;
        c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
        c48 &= 65535;
        return goog.math.Long.fromBits(c16 << 16 | c00, c48 << 16 | c32)
    };
    goog.math.Long.prototype.div = function(other) {
        if (other.isZero())
            throw Error("division by zero");
        else if (this.isZero())
            return goog.math.Long.ZERO;
        if (this.equals(goog.math.Long.MIN_VALUE))
            if (other.equals(goog.math.Long.ONE) || other.equals(goog.math.Long.NEG_ONE))
                return goog.math.Long.MIN_VALUE;
            else if (other.equals(goog.math.Long.MIN_VALUE))
                return goog.math.Long.ONE;
            else {
                var halfThis = this.shiftRight(1);
                var approx = halfThis.div(other).shiftLeft(1);
                if (approx.equals(goog.math.Long.ZERO))
                    return other.isNegative() ? goog.math.Long.ONE : goog.math.Long.NEG_ONE;
                else {
                    var rem = this.subtract(other.multiply(approx));
                    var result = approx.add(rem.div(other));
                    return result
                }
            }
        else if (other.equals(goog.math.Long.MIN_VALUE))
            return goog.math.Long.ZERO;
        if (this.isNegative())
            if (other.isNegative())
                return this.negate().div(other.negate());
            else
                return this.negate().div(other).negate();
        else if (other.isNegative())
            return this.div(other.negate()).negate();
        var res = goog.math.Long.ZERO;
        var rem = this;
        while (rem.greaterThanOrEqual(other)) {
            var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber()));
            var log2 = Math.ceil(Math.log(approx) /
            Math.LN2);
            var delta = log2 <= 48 ? 1 : Math.pow(2, log2 - 48);
            var approxRes = goog.math.Long.fromNumber(approx);
            var approxRem = approxRes.multiply(other);
            while (approxRem.isNegative() || approxRem.greaterThan(rem)) {
                approx -= delta;
                approxRes = goog.math.Long.fromNumber(approx);
                approxRem = approxRes.multiply(other)
            }
            if (approxRes.isZero())
                approxRes = goog.math.Long.ONE;
            res = res.add(approxRes);
            rem = rem.subtract(approxRem)
        }
        return res
    };
    goog.math.Long.prototype.modulo = function(other) {
        return this.subtract(this.div(other).multiply(other))
    };
    goog.math.Long.prototype.not = function() {
        return goog.math.Long.fromBits(~this.low_, ~this.high_)
    };
    goog.math.Long.prototype.and = function(other) {
        return goog.math.Long.fromBits(this.low_ & other.low_, this.high_ & other.high_)
    };
    goog.math.Long.prototype.or = function(other) {
        return goog.math.Long.fromBits(this.low_ | other.low_, this.high_ | other.high_)
    };
    goog.math.Long.prototype.xor = function(other) {
        return goog.math.Long.fromBits(this.low_ ^ other.low_, this.high_ ^ other.high_)
    };
    goog.math.Long.prototype.shiftLeft = function(numBits) {
        numBits &=
        63;
        if (numBits == 0)
            return this;
        else {
            var low = this.low_;
            if (numBits < 32) {
                var high = this.high_;
                return goog.math.Long.fromBits(low << numBits, high << numBits | low >>> 32 - numBits)
            } else
                return goog.math.Long.fromBits(0, low << numBits - 32)
        }
    };
    goog.math.Long.prototype.shiftRight = function(numBits) {
        numBits &= 63;
        if (numBits == 0)
            return this;
        else {
            var high = this.high_;
            if (numBits < 32) {
                var low = this.low_;
                return goog.math.Long.fromBits(low >>> numBits | high << 32 - numBits, high >> numBits)
            } else
                return goog.math.Long.fromBits(high >> numBits - 32, high >=
                0 ? 0 : -1)
        }
    };
    goog.math.Long.prototype.shiftRightUnsigned = function(numBits) {
        numBits &= 63;
        if (numBits == 0)
            return this;
        else {
            var high = this.high_;
            if (numBits < 32) {
                var low = this.low_;
                return goog.math.Long.fromBits(low >>> numBits | high << 32 - numBits, high >>> numBits)
            } else if (numBits == 32)
                return goog.math.Long.fromBits(high, 0);
            else
                return goog.math.Long.fromBits(high >>> numBits - 32, 0)
        }
    };
    var navigator = {
        appName: "Modern Browser"
    };
    var dbits;
    var canary = 0xdeadbeefcafe;
    var j_lm = (canary & 16777215) == 15715070;
    function BigInteger(a, b,
    c) {
        if (a != null)
            if ("number" == typeof a)
                this.fromNumber(a, b, c);
            else if (b == null && "string" != typeof a)
                this.fromString(a, 256);
            else
                this.fromString(a, b)
    }
    function nbi() {
        return new BigInteger(null)
    }
    function am1(i, x, w, j, c, n) {
        while (--n >= 0) {
            var v = x * this[i++] + w[j] + c;
            c = Math.floor(v / 67108864);
            w[j++] = v & 67108863
        }
        return c
    }
    function am2(i, x, w, j, c, n) {
        var xl = x & 32767,
            xh = x >> 15;
        while (--n >= 0) {
            var l = this[i] & 32767;
            var h = this[i++] >> 15;
            var m = xh * l + h * xl;
            l = xl * l + ((m & 32767) << 15) + w[j] + (c & 1073741823);
            c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);
            w[j++] = l & 1073741823
        }
        return c
    }
    function am3(i, x, w, j, c, n) {
        var xl = x & 16383,
            xh = x >> 14;
        while (--n >= 0) {
            var l = this[i] & 16383;
            var h = this[i++] >> 14;
            var m = xh * l + h * xl;
            l = xl * l + ((m & 16383) << 14) + w[j] + c;
            c = (l >> 28) + (m >> 14) + xh * h;
            w[j++] = l & 268435455
        }
        return c
    }
    if (j_lm && navigator.appName == "Microsoft Internet Explorer") {
        BigInteger.prototype.am = am2;
        dbits = 30
    } else if (j_lm && navigator.appName != "Netscape") {
        BigInteger.prototype.am = am1;
        dbits = 26
    } else {
        BigInteger.prototype.am = am3;
        dbits = 28
    }
    BigInteger.prototype.DB = dbits;
    BigInteger.prototype.DM =
    (1 << dbits) - 1;
    BigInteger.prototype.DV = 1 << dbits;
    var BI_FP = 52;
    BigInteger.prototype.FV = Math.pow(2, BI_FP);
    BigInteger.prototype.F1 = BI_FP - dbits;
    BigInteger.prototype.F2 = 2 * dbits - BI_FP;
    var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
    var BI_RC = new Array;
    var rr,
        vv;
    rr = "0".charCodeAt(0);
    for (vv = 0; vv <= 9; ++vv)
        BI_RC[rr++] = vv;
    rr = "a".charCodeAt(0);
    for (vv = 10; vv < 36; ++vv)
        BI_RC[rr++] = vv;
    rr = "A".charCodeAt(0);
    for (vv = 10; vv < 36; ++vv)
        BI_RC[rr++] = vv;
    function int2char(n) {
        return BI_RM.charAt(n)
    }
    function intAt(s, i) {
        var c = BI_RC[s.charCodeAt(i)];
        return c == null ? -1 : c
    }
    function bnpCopyTo(r) {
        for (var i = this.t - 1; i >= 0; --i)
            r[i] = this[i];
        r.t = this.t;
        r.s = this.s
    }
    function bnpFromInt(x) {
        this.t = 1;
        this.s = x < 0 ? -1 : 0;
        if (x > 0)
            this[0] = x;
        else if (x < -1)
            this[0] = x + DV;
        else
            this.t = 0
    }
    function nbv(i) {
        var r = nbi();
        r.fromInt(i);
        return r
    }
    function bnpFromString(s, b) {
        var k;
        if (b == 16)
            k = 4;
        else if (b == 8)
            k = 3;
        else if (b == 256)
            k = 8;
        else if (b == 2)
            k = 1;
        else if (b == 32)
            k = 5;
        else if (b == 4)
            k = 2;
        else {
            this.fromRadix(s, b);
            return
        }
        this.t = 0;
        this.s = 0;
        var i = s.length,
            mi = false,
            sh = 0;
        while (--i >= 0) {
            var x = k == 8 ? s[i] &
            255 : intAt(s, i);
            if (x < 0) {
                if (s.charAt(i) == "-")
                    mi = true;
                continue
            }
            mi = false;
            if (sh == 0)
                this[this.t++] = x;
            else if (sh + k > this.DB) {
                this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh;
                this[this.t++] = x >> this.DB - sh
            } else
                this[this.t - 1] |= x << sh;
            sh += k;
            if (sh >= this.DB)
                sh -= this.DB
        }
        if (k == 8 && (s[0] & 128) != 0) {
            this.s = -1;
            if (sh > 0)
                this[this.t - 1] |= (1 << this.DB - sh) - 1 << sh
        }
        this.clamp();
        if (mi)
            BigInteger.ZERO.subTo(this, this)
    }
    function bnpClamp() {
        var c = this.s & this.DM;
        while (this.t > 0 && this[this.t - 1] == c)
            --this.t
    }
    function bnToString(b) {
        if (this.s < 0)
            return "-" +
            this.negate().toString(b);
        var k;
        if (b == 16)
            k = 4;
        else if (b == 8)
            k = 3;
        else if (b == 2)
            k = 1;
        else if (b == 32)
            k = 5;
        else if (b == 4)
            k = 2;
        else
            return this.toRadix(b);
        var km = (1 << k) - 1,
            d,
            m = false,
            r = "",
            i = this.t;
        var p = this.DB - i * this.DB % k;
        if (i-- > 0) {
            if (p < this.DB && (d = this[i] >> p) > 0) {
                m = true;
                r = int2char(d)
            }
            while (i >= 0) {
                if (p < k) {
                    d = (this[i] & (1 << p) - 1) << k - p;
                    d |= this[--i] >> (p += this.DB - k)
                } else {
                    d = this[i] >> (p -= k) & km;
                    if (p <= 0) {
                        p += this.DB;
                        --i
                    }
                }
                if (d > 0)
                    m = true;
                if (m)
                    r += int2char(d)
            }
        }
        return m ? r : "0"
    }
    function bnNegate() {
        var r = nbi();
        BigInteger.ZERO.subTo(this,
        r);
        return r
    }
    function bnAbs() {
        return this.s < 0 ? this.negate() : this
    }
    function bnCompareTo(a) {
        var r = this.s - a.s;
        if (r != 0)
            return r;
        var i = this.t;
        r = i - a.t;
        if (r != 0)
            return this.s < 0 ? -r : r;
        while (--i >= 0)
            if ((r = this[i] - a[i]) != 0)
                return r;
        return 0
    }
    function nbits(x) {
        var r = 1,
            t;
        if ((t = x >>> 16) != 0) {
            x = t;
            r += 16
        }
        if ((t = x >> 8) != 0) {
            x = t;
            r += 8
        }
        if ((t = x >> 4) != 0) {
            x = t;
            r += 4
        }
        if ((t = x >> 2) != 0) {
            x = t;
            r += 2
        }
        if ((t = x >> 1) != 0) {
            x = t;
            r += 1
        }
        return r
    }
    function bnBitLength() {
        if (this.t <= 0)
            return 0;
        return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM)
    }
    function bnpDLShiftTo(n,
    r) {
        var i;
        for (i = this.t - 1; i >= 0; --i)
            r[i + n] = this[i];
        for (i = n - 1; i >= 0; --i)
            r[i] = 0;
        r.t = this.t + n;
        r.s = this.s
    }
    function bnpDRShiftTo(n, r) {
        for (var i = n; i < this.t; ++i)
            r[i - n] = this[i];
        r.t = Math.max(this.t - n, 0);
        r.s = this.s
    }
    function bnpLShiftTo(n, r) {
        var bs = n % this.DB;
        var cbs = this.DB - bs;
        var bm = (1 << cbs) - 1;
        var ds = Math.floor(n / this.DB),
            c = this.s << bs & this.DM,
            i;
        for (i = this.t - 1; i >= 0; --i) {
            r[i + ds + 1] = this[i] >> cbs | c;
            c = (this[i] & bm) << bs
        }
        for (i = ds - 1; i >= 0; --i)
            r[i] = 0;
        r[ds] = c;
        r.t = this.t + ds + 1;
        r.s = this.s;
        r.clamp()
    }
    function bnpRShiftTo(n, r) {
        r.s =
        this.s;
        var ds = Math.floor(n / this.DB);
        if (ds >= this.t) {
            r.t = 0;
            return
        }
        var bs = n % this.DB;
        var cbs = this.DB - bs;
        var bm = (1 << bs) - 1;
        r[0] = this[ds] >> bs;
        for (var i = ds + 1; i < this.t; ++i) {
            r[i - ds - 1] |= (this[i] & bm) << cbs;
            r[i - ds] = this[i] >> bs
        }
        if (bs > 0)
            r[this.t - ds - 1] |= (this.s & bm) << cbs;
        r.t = this.t - ds;
        r.clamp()
    }
    function bnpSubTo(a, r) {
        var i = 0,
            c = 0,
            m = Math.min(a.t, this.t);
        while (i < m) {
            c += this[i] - a[i];
            r[i++] = c & this.DM;
            c >>= this.DB
        }
        if (a.t < this.t) {
            c -= a.s;
            while (i < this.t) {
                c += this[i];
                r[i++] = c & this.DM;
                c >>= this.DB
            }
            c += this.s
        } else {
            c += this.s;
            while (i <
            a.t) {
                c -= a[i];
                r[i++] = c & this.DM;
                c >>= this.DB
            }
            c -= a.s
        }
        r.s = c < 0 ? -1 : 0;
        if (c < -1)
            r[i++] = this.DV + c;
        else if (c > 0)
            r[i++] = c;
        r.t = i;
        r.clamp()
    }
    function bnpMultiplyTo(a, r) {
        var x = this.abs(),
            y = a.abs();
        var i = x.t;
        r.t = i + y.t;
        while (--i >= 0)
            r[i] = 0;
        for (i = 0; i < y.t; ++i)
            r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);
        r.s = 0;
        r.clamp();
        if (this.s != a.s)
            BigInteger.ZERO.subTo(r, r)
    }
    function bnpSquareTo(r) {
        var x = this.abs();
        var i = r.t = 2 * x.t;
        while (--i >= 0)
            r[i] = 0;
        for (i = 0; i < x.t - 1; ++i) {
            var c = x.am(i, x[i], r, 2 * i, 0, 1);
            if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >=
            x.DV) {
                r[i + x.t] -= x.DV;
                r[i + x.t + 1] = 1
            }
        }
        if (r.t > 0)
            r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);
        r.s = 0;
        r.clamp()
    }
    function bnpDivRemTo(m, q, r) {
        var pm = m.abs();
        if (pm.t <= 0)
            return;
        var pt = this.abs();
        if (pt.t < pm.t) {
            if (q != null)
                q.fromInt(0);
            if (r != null)
                this.copyTo(r);
            return
        }
        if (r == null)
            r = nbi();
        var y = nbi(),
            ts = this.s,
            ms = m.s;
        var nsh = this.DB - nbits(pm[pm.t - 1]);
        if (nsh > 0) {
            pm.lShiftTo(nsh, y);
            pt.lShiftTo(nsh, r)
        } else {
            pm.copyTo(y);
            pt.copyTo(r)
        }
        var ys = y.t;
        var y0 = y[ys - 1];
        if (y0 == 0)
            return;
        var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);
        var d1 =
            this.FV / yt,
            d2 = (1 << this.F1) / yt,
            e = 1 << this.F2;
        var i = r.t,
            j = i - ys,
            t = q == null ? nbi() : q;
        y.dlShiftTo(j, t);
        if (r.compareTo(t) >= 0) {
            r[r.t++] = 1;
            r.subTo(t, r)
        }
        BigInteger.ONE.dlShiftTo(ys, t);
        t.subTo(y, y);
        while (y.t < ys)
            y[y.t++] = 0;
        while (--j >= 0) {
            var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);
            if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {
                y.dlShiftTo(j, t);
                r.subTo(t, r);
                while (r[i] < --qd)
                    r.subTo(t, r)
            }
        }
        if (q != null) {
            r.drShiftTo(ys, q);
            if (ts != ms)
                BigInteger.ZERO.subTo(q, q)
        }
        r.t = ys;
        r.clamp();
        if (nsh > 0)
            r.rShiftTo(nsh, r);
        if (ts < 0)
            BigInteger.ZERO.subTo(r,
            r)
    }
    function bnMod(a) {
        var r = nbi();
        this.abs().divRemTo(a, null, r);
        if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0)
            a.subTo(r, r);
        return r
    }
    function Classic(m) {
        this.m = m
    }
    function cConvert(x) {
        if (x.s < 0 || x.compareTo(this.m) >= 0)
            return x.mod(this.m);
        else
            return x
    }
    function cRevert(x) {
        return x
    }
    function cReduce(x) {
        x.divRemTo(this.m, null, x)
    }
    function cMulTo(x, y, r) {
        x.multiplyTo(y, r);
        this.reduce(r)
    }
    function cSqrTo(x, r) {
        x.squareTo(r);
        this.reduce(r)
    }
    Classic.prototype.convert = cConvert;
    Classic.prototype.revert = cRevert;
    Classic.prototype.reduce =
    cReduce;
    Classic.prototype.mulTo = cMulTo;
    Classic.prototype.sqrTo = cSqrTo;
    function bnpInvDigit() {
        if (this.t < 1)
            return 0;
        var x = this[0];
        if ((x & 1) == 0)
            return 0;
        var y = x & 3;
        y = y * (2 - (x & 15) * y) & 15;
        y = y * (2 - (x & 255) * y) & 255;
        y = y * (2 - ((x & 65535) * y & 65535)) & 65535;
        y = y * (2 - x * y % this.DV) % this.DV;
        return y > 0 ? this.DV - y : -y
    }
    function Montgomery(m) {
        this.m = m;
        this.mp = m.invDigit();
        this.mpl = this.mp & 32767;
        this.mph = this.mp >> 15;
        this.um = (1 << m.DB - 15) - 1;
        this.mt2 = 2 * m.t
    }
    function montConvert(x) {
        var r = nbi();
        x.abs().dlShiftTo(this.m.t, r);
        r.divRemTo(this.m,
        null, r);
        if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0)
            this.m.subTo(r, r);
        return r
    }
    function montRevert(x) {
        var r = nbi();
        x.copyTo(r);
        this.reduce(r);
        return r
    }
    function montReduce(x) {
        while (x.t <= this.mt2)
            x[x.t++] = 0;
        for (var i = 0; i < this.m.t; ++i) {
            var j = x[i] & 32767;
            var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM;
            j = i + this.m.t;
            x[j] += this.m.am(0, u0, x, i, 0, this.m.t);
            while (x[j] >= x.DV) {
                x[j] -= x.DV;
                x[++j]++
            }
        }
        x.clamp();
        x.drShiftTo(this.m.t, x);
        if (x.compareTo(this.m) >= 0)
            x.subTo(this.m, x)
    }
    function montSqrTo(x,
    r) {
        x.squareTo(r);
        this.reduce(r)
    }
    function montMulTo(x, y, r) {
        x.multiplyTo(y, r);
        this.reduce(r)
    }
    Montgomery.prototype.convert = montConvert;
    Montgomery.prototype.revert = montRevert;
    Montgomery.prototype.reduce = montReduce;
    Montgomery.prototype.mulTo = montMulTo;
    Montgomery.prototype.sqrTo = montSqrTo;
    function bnpIsEven() {
        return (this.t > 0 ? this[0] & 1 : this.s) == 0
    }
    function bnpExp(e, z) {
        if (e > 4294967295 || e < 1)
            return BigInteger.ONE;
        var r = nbi(),
            r2 = nbi(),
            g = z.convert(this),
            i = nbits(e) - 1;
        g.copyTo(r);
        while (--i >= 0) {
            z.sqrTo(r, r2);
            if ((e &
            1 << i) > 0)
                z.mulTo(r2, g, r);
            else {
                var t = r;
                r = r2;
                r2 = t
            }
        }
        return z.revert(r)
    }
    function bnModPowInt(e, m) {
        var z;
        if (e < 256 || m.isEven())
            z = new Classic(m);
        else
            z = new Montgomery(m);
        return this.exp(e, z)
    }
    BigInteger.prototype.copyTo = bnpCopyTo;
    BigInteger.prototype.fromInt = bnpFromInt;
    BigInteger.prototype.fromString = bnpFromString;
    BigInteger.prototype.clamp = bnpClamp;
    BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
    BigInteger.prototype.drShiftTo = bnpDRShiftTo;
    BigInteger.prototype.lShiftTo = bnpLShiftTo;
    BigInteger.prototype.rShiftTo =
    bnpRShiftTo;
    BigInteger.prototype.subTo = bnpSubTo;
    BigInteger.prototype.multiplyTo = bnpMultiplyTo;
    BigInteger.prototype.squareTo = bnpSquareTo;
    BigInteger.prototype.divRemTo = bnpDivRemTo;
    BigInteger.prototype.invDigit = bnpInvDigit;
    BigInteger.prototype.isEven = bnpIsEven;
    BigInteger.prototype.exp = bnpExp;
    BigInteger.prototype.toString = bnToString;
    BigInteger.prototype.negate = bnNegate;
    BigInteger.prototype.abs = bnAbs;
    BigInteger.prototype.compareTo = bnCompareTo;
    BigInteger.prototype.bitLength = bnBitLength;
    BigInteger.prototype.mod =
    bnMod;
    BigInteger.prototype.modPowInt = bnModPowInt;
    BigInteger.ZERO = nbv(0);
    BigInteger.ONE = nbv(1);
    function bnpFromRadix(s, b) {
        this.fromInt(0);
        if (b == null)
            b = 10;
        var cs = this.chunkSize(b);
        var d = Math.pow(b, cs),
            mi = false,
            j = 0,
            w = 0;
        for (var i = 0; i < s.length; ++i) {
            var x = intAt(s, i);
            if (x < 0) {
                if (s.charAt(i) == "-" && this.signum() == 0)
                    mi = true;
                continue
            }
            w = b * w + x;
            if (++j >= cs) {
                this.dMultiply(d);
                this.dAddOffset(w, 0);
                j = 0;
                w = 0
            }
        }
        if (j > 0) {
            this.dMultiply(Math.pow(b, j));
            this.dAddOffset(w, 0)
        }
        if (mi)
            BigInteger.ZERO.subTo(this, this)
    }
    function bnpChunkSize(r) {
        return Math.floor(Math.LN2 *
        this.DB / Math.log(r))
    }
    function bnSigNum() {
        if (this.s < 0)
            return -1;
        else if (this.t <= 0 || this.t == 1 && this[0] <= 0)
            return 0;
        else
            return 1
    }
    function bnpDMultiply(n) {
        this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);
        ++this.t;
        this.clamp()
    }
    function bnpDAddOffset(n, w) {
        if (n == 0)
            return;
        while (this.t <= w)
            this[this.t++] = 0;
        this[w] += n;
        while (this[w] >= this.DV) {
            this[w] -= this.DV;
            if (++w >= this.t)
                this[this.t++] = 0;
            ++this[w]
        }
    }
    function bnpToRadix(b) {
        if (b == null)
            b = 10;
        if (this.signum() == 0 || b < 2 || b > 36)
            return "0";
        var cs = this.chunkSize(b);
        var a = Math.pow(b,
        cs);
        var d = nbv(a),
            y = nbi(),
            z = nbi(),
            r = "";
        this.divRemTo(d, y, z);
        while (y.signum() > 0) {
            r = (a + z.intValue()).toString(b).substr(1) + r;
            y.divRemTo(d, y, z)
        }
        return z.intValue().toString(b) + r
    }
    function bnIntValue() {
        if (this.s < 0)
            if (this.t == 1)
                return this[0] - this.DV;
            else {
                if (this.t == 0)
                    return -1
            }
        else if (this.t == 1)
            return this[0];
        else if (this.t == 0)
            return 0;
        return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
    }
    function bnpAddTo(a, r) {
        var i = 0,
            c = 0,
            m = Math.min(a.t, this.t);
        while (i < m) {
            c += this[i] + a[i];
            r[i++] = c & this.DM;
            c >>= this.DB
        }
        if (a.t <
        this.t) {
            c += a.s;
            while (i < this.t) {
                c += this[i];
                r[i++] = c & this.DM;
                c >>= this.DB
            }
            c += this.s
        } else {
            c += this.s;
            while (i < a.t) {
                c += a[i];
                r[i++] = c & this.DM;
                c >>= this.DB
            }
            c += a.s
        }
        r.s = c < 0 ? -1 : 0;
        if (c > 0)
            r[i++] = c;
        else if (c < -1)
            r[i++] = this.DV + c;
        r.t = i;
        r.clamp()
    }
    BigInteger.prototype.fromRadix = bnpFromRadix;
    BigInteger.prototype.chunkSize = bnpChunkSize;
    BigInteger.prototype.signum = bnSigNum;
    BigInteger.prototype.dMultiply = bnpDMultiply;
    BigInteger.prototype.dAddOffset = bnpDAddOffset;
    BigInteger.prototype.toRadix = bnpToRadix;
    BigInteger.prototype.intValue =
    bnIntValue;
    BigInteger.prototype.addTo = bnpAddTo;
    var Wrapper = {
        abs: function(l, h) {
            var x = new goog.math.Long(l, h);
            var ret;
            if (x.isNegative())
                ret = x.negate();
            else
                ret = x;
            HEAP32[tempDoublePtr >> 2] = ret.low_;
            HEAP32[tempDoublePtr + 4 >> 2] = ret.high_
        },
        ensureTemps: function() {
            if (Wrapper.ensuredTemps)
                return;
            Wrapper.ensuredTemps = true;
            Wrapper.two32 = new BigInteger;
            Wrapper.two32.fromString("4294967296", 10);
            Wrapper.two64 = new BigInteger;
            Wrapper.two64.fromString("18446744073709551616", 10);
            Wrapper.temp1 = new BigInteger;
            Wrapper.temp2 =
            new BigInteger
        },
        lh2bignum: function(l, h) {
            var a = new BigInteger;
            a.fromString(h.toString(), 10);
            var b = new BigInteger;
            a.multiplyTo(Wrapper.two32, b);
            var c = new BigInteger;
            c.fromString(l.toString(), 10);
            var d = new BigInteger;
            c.addTo(b, d);
            return d
        },
        stringify: function(l, h, unsigned) {
            var ret = (new goog.math.Long(l, h)).toString();
            if (unsigned && ret[0] == "-") {
                Wrapper.ensureTemps();
                var bignum = new BigInteger;
                bignum.fromString(ret, 10);
                ret = new BigInteger;
                Wrapper.two64.addTo(bignum, ret);
                ret = ret.toString(10)
            }
            return ret
        },
        fromString: function(str,
        base, min, max, unsigned) {
            Wrapper.ensureTemps();
            var bignum = new BigInteger;
            bignum.fromString(str, base);
            var bigmin = new BigInteger;
            bigmin.fromString(min, 10);
            var bigmax = new BigInteger;
            bigmax.fromString(max, 10);
            if (unsigned && bignum.compareTo(BigInteger.ZERO) < 0) {
                var temp = new BigInteger;
                bignum.addTo(Wrapper.two64, temp);
                bignum = temp
            }
            var error = false;
            if (bignum.compareTo(bigmin) < 0) {
                bignum = bigmin;
                error = true
            } else if (bignum.compareTo(bigmax) > 0) {
                bignum = bigmax;
                error = true
            }
            var ret = goog.math.Long.fromString(bignum.toString());
            HEAP32[tempDoublePtr >> 2] = ret.low_;
            HEAP32[tempDoublePtr + 4 >> 2] = ret.high_;
            if (error)
                throw "range error";
        }
    };
    return Wrapper
}();
if (memoryInitializer)
    if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
        var data = Module["readBinary"](memoryInitializer);
        HEAPU8.set(data, STATIC_BASE)
    } else {
        addRunDependency("memory initializer");
        Browser.asyncLoad(memoryInitializer, function(data) {
            HEAPU8.set(data, STATIC_BASE);
            removeRunDependency("memory initializer")
        }, function(data) {
            throw "could not load memory initializer " + memoryInitializer;
        })
    }
function ExitStatus(status) {
    this.name = "ExitStatus";
    this.message = "Program terminated with exit(" + status + ")";
    this.status = status
}
ExitStatus.prototype = new Error;
ExitStatus.prototype.constructor = ExitStatus;
var initialStackTop;
var preloadStartTime = null;
var calledMain = false;
dependenciesFulfilled = function runCaller() {
    if (!Module["calledRun"] && shouldRunNow)
        run();
    if (!Module["calledRun"])
        dependenciesFulfilled = runCaller
};
Module["callMain"] = Module.callMain = function callMain(args) {
    assert(runDependencies == 0, "cannot call main when async dependencies remain! (listen on __ATMAIN__)");
    assert(__ATPRERUN__.length == 0, "cannot call main when preRun functions remain to be called");
    args = args || [];
    ensureInitRuntime();
    var argc = args.length + 1;
    function pad() {
        for (var i = 0; i < 4 - 1; i++)
            argv.push(0)
    }
    var argv = [allocate(intArrayFromString("/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;
    try {
        var ret = Module["_main"](argc, argv, 0);
        if (!Module["noExitRuntime"])
            exit(ret)
    } catch (e) {
        if (e instanceof ExitStatus)
            return;
        else if (e == "SimulateInfiniteLoop") {
            Module["noExitRuntime"] = true;
            return
        } else {
            if (e && typeof e === "object" && e.stack)
                Module.printErr("exception thrown: " + [e, e.stack]);
            throw e;
        }
    } finally {
        calledMain = true
    }
};
function run(args) {
    args = args || Module["arguments"];
    if (preloadStartTime === null)
        preloadStartTime = Date.now();
    if (runDependencies > 0) {
        Module.printErr("run() called, but dependencies remain, so not running");
        return
    }
    preRun();
    if (runDependencies > 0)
        return;
    if (Module["calledRun"])
        return;
    function doRun() {
        if (Module["calledRun"])
            return;
        Module["calledRun"] = true;
        ensureInitRuntime();
        preMain();
        if (ENVIRONMENT_IS_WEB && preloadStartTime !== null)
            Module.printErr("pre-main prep time: " + (Date.now() - preloadStartTime) + " ms");
        if (Module["_main"] &&
        shouldRunNow)
            Module["callMain"](args);
        postRun()
    }
    if (Module["setStatus"]) {
        Module["setStatus"]("Running...");
        setTimeout(function() {
            setTimeout(function() {
                Module["setStatus"]("")
            }, 1);
            if (!ABORT)
                doRun()
        }, 1)
    } else
        doRun()
}
Module["run"] = Module.run = run;
function exit(status) {
    ABORT = true;
    EXITSTATUS = status;
    STACKTOP = initialStackTop;
    exitRuntime();
    throw new ExitStatus(status);
}
Module["exit"] = Module.exit = exit;
function abort(text) {
    if (text) {
        Module.print(text);
        Module.printErr(text)
    }
    ABORT = true;
    EXITSTATUS = 1;
    var extra = "\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";
    throw "abort() at " + stackTrace() + extra;
}
Module["abort"] = Module.abort = abort;
if (Module["preInit"]) {
    if (typeof Module["preInit"] == "function")
        Module["preInit"] = [Module["preInit"]];
    while (Module["preInit"].length > 0)
        Module["preInit"].pop()()
}
var shouldRunNow = true;
if (Module["noInitialRun"])
    shouldRunNow = false;
run();
var Offsets = {
    b2Body: {
        type: 0,
        islandIndex: 8,
        xf: 12,
        xf0: 28,
        sweep: 44,
        linearVelocity: 80,
        angularVelocity: 88,
        force: 92,
        torque: 100,
        world: 104,
        prev: 108,
        next: 112,
        fixtureList: 116,
        fixtureCount: 120,
        jointList: 124,
        contactList: 128,
        mass: 132,
        invMass: 136,
        I: 140,
        invI: 144,
        linearDamping: 148,
        angularDamping: 152,
        gravityScale: 156,
        sleepTime: 160,
        userData: 164
    },
    b2Contact: {
        flags: 4,
        prev: 8,
        next: 12,
        nodeA: 16,
        nodeB: 32,
        fixtureA: 48,
        fixtureB: 52,
        indexA: 56,
        indexB: 60,
        manifold: 64,
        toiCount: 128,
        toi: 132,
        friction: 136,
        restitution: 140,
        tangentSpeed: 144
    },
    b2Fixture: {
        density: 0,
        next: 4,
        body: 8,
        shape: 12,
        friction: 16,
        restitution: 20,
        proxies: 24,
        proxyCount: 28,
        filter: 32,
        isSensor: 38,
        userData: 40
    },
    b2ParticleGroup: {
        system: 0,
        firstIndex: 4,
        lastIndex: 8,
        groupFlags: 12,
        strength: 16,
        prev: 20,
        next: 24,
        timestamp: 28,
        mass: 32,
        inertia: 36,
        center: 40,
        linearVelocity: 48,
        angularVelocity: 56,
        transform: 60,
        userData: 76
    },
    b2WorldManifold: {
        normal: 0,
        points: 8,
        separations: 24
    },
    b2World: {
        bodyList: 102960
    }
};
var FLT_EPSILON = 1.1920929E-7;
function b2Max(a, b) {
    return new b2Vec2(Math.max(a.x, b.x), Math.max(a.y, b.y))
}
function b2Min(a, b) {
    return new b2Vec2(Math.min(a.x, b.x), Math.min(a.y, b.y))
}
function b2Clamp(a, low, high) {
    return b2Max(low, b2Min(a, high))
}
function b2Vec2(x, y) {
    if (x === undefined)
        x = 0;
    if (y === undefined)
        y = 0;
    this.x = x;
    this.y = y
}
b2Vec2.Add = function(out, a, b) {
    out.x = a.x + b.x;
    out.y = a.y + b.y
};
b2Vec2.CrossScalar = function(output, input, scalar) {
    output.x = -scalar * input.y;
    output.y = scalar * input.x
};
b2Vec2.Cross = function(a, b) {
    return a.x * b.y - a.y * b.x
};
b2Vec2.MulScalar = function(out, input, scalar) {
    out.x = input.x * scalar;
    out.y = input.y * scalar
};
b2Vec2.Mul = function(out, T, v) {
    var Tp = T.p;
    var Tqc = T.q.c;
    var Tqs = T.q.s;
    var x = v.x;
    var y = v.y;
    out.x = Tqc * x - Tqs * y + Tp.x;
    out.y = Tqs * x + Tqc * y + Tp.y
};
b2Vec2.Normalize = function(out, input) {
    var length = input.Length();
    if (length < FLT_EPSILON) {
        out.x = 0;
        out.y = 0;
        return
    }
    var invLength = 1 / length;
    out.x = input.x * invLength;
    out.y = input.y * invLength
};
b2Vec2.Sub = function(out, input, subtract) {
    out.x = input.x - subtract.x;
    out.y = input.y - subtract.y
};
b2Vec2.prototype.Clone = function() {
    return new b2Vec2(this.x, this.y)
};
b2Vec2.prototype.Set = function(x, y) {
    this.x = x;
    this.y = y
};
b2Vec2.prototype.Length = function() {
    var x = this.x;
    var y = this.y;
    return Math.sqrt(x * x + y * y)
};
b2Vec2.prototype.LengthSquared = function() {
    var x = this.x;
    var y = this.y;
    return x * x + y * y
};
function b2Rot(radians) {
    if (radians === undefined)
        radians = 0;
    this.s = Math.sin(radians);
    this.c = Math.cos(radians)
}
b2Rot.prototype.Set = function(radians) {
    this.s = Math.sin(radians);
    this.c = Math.cos(radians)
};
b2Rot.prototype.SetIdentity = function() {
    this.s = 0;
    this.c = 1
};
b2Rot.prototype.GetXAxis = function() {
    return new b2Vec2(this.c, this.s)
};
function b2Transform(position, rotation) {
    if (position === undefined)
        position = new b2Vec2;
    if (rotation === undefined)
        rotation = new b2Rot;
    this.p = position;
    this.q = rotation
}
b2Transform.prototype.FromFloat64Array = function(arr) {
    var p = this.p;
    var q = this.q;
    p.x = arr[0];
    p.y = arr[1];
    q.s = arr[2];
    q.c = arr[3]
};
b2Transform.prototype.SetIdentity = function() {
    this.p.Set(0, 0);
    this.q.SetIdentity()
};
function b2AABB() {
    this.lowerBound = new b2Vec2;
    this.upperBound = new b2Vec2
}
b2AABB.prototype.GetCenter = function() {
    var sum = new b2Vec2;
    b2Vec2.Add(sum, this.lowerBound, this.upperBound);
    b2Vec2.MulScalar(sum, sum, .5)
};
var b2Manifold_GetPointCount = Module.cwrap("b2Manifold_GetPointCount", "number", ["number"]);
function b2Manifold(ptr) {
    this.ptr = ptr
}
b2Manifold.prototype.GetPointCount = function() {
    return b2Manifold_GetPointCount(this.ptr)
};
var b2WorldManifold_points_offset = Offsets.b2WorldManifold.points;
function b2WorldManifold(ptr) {
    this.buffer = new DataView(Module.HEAPU8.buffer, ptr);
    this.ptr = ptr
}
b2WorldManifold.prototype.GetPoint = function(i) {
    var point = new b2Vec2;
    point.x = this.buffer.getFloat32(i * 2 + b2WorldManifold_points_offset, true);
    point.y = this.buffer.getFloat32(i * 2 + 4 + b2WorldManifold_points_offset, true);
    return point
};
var b2EdgeShape_CreateFixture = Module.cwrap("b2EdgeShape_CreateFixture", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
function b2EdgeShape() {
    this.hasVertex0 = false;
    this.hasVertex3 = false;
    this.vertex0 = new b2Vec2;
    this.vertex1 = new b2Vec2;
    this.vertex2 = new b2Vec2;
    this.vertex3 = new b2Vec2;
    this.type = b2Shape_Type_e_edge
}
b2EdgeShape.prototype.Set = function(v1, v2) {
    this.vertex1 = v1;
    this.vertex2 = v2;
    this.hasVertex0 = false;
    this.hasVertex3 = false
};
b2EdgeShape.prototype._CreateFixture = function(body, fixtureDef) {
    return b2EdgeShape_CreateFixture(body.ptr, fixtureDef.density, fixtureDef.friction, fixtureDef.isSensor, fixtureDef.restitution, fixtureDef.userData, fixtureDef.filter.categoryBits, fixtureDef.filter.groupIndex, fixtureDef.filter.maskBits, this.hasVertex0, this.hasVertex3, this.vertex0.x, this.vertex0.y, this.vertex1.x, this.vertex1.y, this.vertex2.x, this.vertex2.y, this.vertex3.x, this.vertex3.y)
};
var b2PolygonShape_CreateFixture_3 = Module.cwrap("b2PolygonShape_CreateFixture_3", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2PolygonShape_CreateFixture_4 = Module.cwrap("b2PolygonShape_CreateFixture_4", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2PolygonShape_CreateFixture_5 = Module.cwrap("b2PolygonShape_CreateFixture_5", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2PolygonShape_CreateFixture_6 = Module.cwrap("b2PolygonShape_CreateFixture_6", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2PolygonShape_CreateFixture_7 = Module.cwrap("b2PolygonShape_CreateFixture_7", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2PolygonShape_CreateFixture_8 = Module.cwrap("b2PolygonShape_CreateFixture_8", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2PolygonShape_CreateParticleGroup_4 = Module.cwrap("b2PolygonShape_CreateParticleGroup_4", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2PolygonShape_DestroyParticlesInShape_4 = Module.cwrap("b2PolygonShape_DestroyParticlesInShape_4", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
function b2PolygonShape() {
    this.position = new b2Vec2;
    this.vertices = [];
    this.type = b2Shape_Type_e_polygon
}
b2PolygonShape.prototype.SetAsBoxXY = function(hx, hy) {
    this.vertices[0] = new b2Vec2(-hx, -hy);
    this.vertices[1] = new b2Vec2(hx, -hy);
    this.vertices[2] = new b2Vec2(hx, hy);
    this.vertices[3] = new b2Vec2(-hx, hy)
};
b2PolygonShape.prototype.SetAsBoxXYCenterAngle = function(hx, hy, center, angle) {
    this.vertices[0] = new b2Vec2(-hx, -hy);
    this.vertices[1] = new b2Vec2(hx, -hy);
    this.vertices[2] = new b2Vec2(hx, hy);
    this.vertices[3] = new b2Vec2(-hx, hy);
    var xf = new b2Transform;
    xf.p = center;
    xf.q.Set(angle);
    for (var i = 0; i < 4; i++)
        b2Vec2.Mul(this.vertices[i], xf, this.vertices[i])
};
b2PolygonShape.prototype._CreateFixture = function(body, fixtureDef) {
    var vertices = this.vertices;
    switch (vertices.length) {
    case 3:
        var v0 = vertices[0];
        var v1 = vertices[1];
        var v2 = vertices[2];
        return b2PolygonShape_CreateFixture_3(body.ptr, fixtureDef.density, fixtureDef.friction, fixtureDef.isSensor, fixtureDef.restitution, fixtureDef.userData, fixtureDef.filter.categoryBits, fixtureDef.filter.groupIndex, fixtureDef.filter.maskBits, v0.x, v0.y, v1.x, v1.y, v2.x, v2.y);
        break;
    case 4:
        var v0 = vertices[0];
        var v1 = vertices[1];
        var v2 =
        vertices[2];
        var v3 = vertices[3];
        return b2PolygonShape_CreateFixture_4(body.ptr, fixtureDef.density, fixtureDef.friction, fixtureDef.isSensor, fixtureDef.restitution, fixtureDef.userData, fixtureDef.filter.categoryBits, fixtureDef.filter.groupIndex, fixtureDef.filter.maskBits, v0.x, v0.y, v1.x, v1.y, v2.x, v2.y, v3.x, v3.y);
        break;
    case 5:
        var v0 = vertices[0];
        var v1 = vertices[1];
        var v2 = vertices[2];
        var v3 = vertices[3];
        var v4 = vertices[4];
        return b2PolygonShape_CreateFixture_5(body.ptr, fixtureDef.density, fixtureDef.friction,
        fixtureDef.isSensor, fixtureDef.restitution, fixtureDef.userData, fixtureDef.filter.categoryBits, fixtureDef.filter.groupIndex, fixtureDef.filter.maskBits, v0.x, v0.y, v1.x, v1.y, v2.x, v2.y, v3.x, v3.y, v4.x, v4.y);
        break;
    case 6:
        var v0 = vertices[0];
        var v1 = vertices[1];
        var v2 = vertices[2];
        var v3 = vertices[3];
        var v4 = vertices[4];
        var v5 = vertices[5];
        return b2PolygonShape_CreateFixture_6(body.ptr, fixtureDef.density, fixtureDef.friction, fixtureDef.isSensor, fixtureDef.restitution, fixtureDef.userData, fixtureDef.filter.categoryBits,
        fixtureDef.filter.groupIndex, fixtureDef.filter.maskBits, v0.x, v0.y, v1.x, v1.y, v2.x, v2.y, v3.x, v3.y, v4.x, v4.y, v5.x, v5.y);
        break;
    case 7:
        var v0 = vertices[0];
        var v1 = vertices[1];
        var v2 = vertices[2];
        var v3 = vertices[3];
        var v4 = vertices[4];
        var v5 = vertices[5];
        var v6 = vertices[6];
        return b2PolygonShape_CreateFixture_7(body.ptr, fixtureDef.density, fixtureDef.friction, fixtureDef.isSensor, fixtureDef.restitution, fixtureDef.userData, fixtureDef.filter.categoryBits, fixtureDef.filter.groupIndex, fixtureDef.filter.maskBits, v0.x,
        v0.y, v1.x, v1.y, v2.x, v2.y, v3.x, v3.y, v4.x, v4.y, v5.x, v5.y, v6.x, v6.y);
        break;
    case 8:
        var v0 = vertices[0];
        var v1 = vertices[1];
        var v2 = vertices[2];
        var v3 = vertices[3];
        var v4 = vertices[4];
        var v5 = vertices[5];
        var v6 = vertices[6];
        var v7 = vertices[7];
        return b2PolygonShape_CreateFixture_8(body.ptr, fixtureDef.density, fixtureDef.friction, fixtureDef.isSensor, fixtureDef.restitution, fixtureDef.userData, fixtureDef.filter.categoryBits, fixtureDef.filter.groupIndex, fixtureDef.filter.maskBits, v0.x, v0.y, v1.x, v1.y, v2.x, v2.y, v3.x,
        v3.y, v4.x, v4.y, v5.x, v5.y, v6.x, v6.y, v6.x, v7.y);
        break
    }
};
b2PolygonShape.prototype._CreateParticleGroup = function(particleSystem, pgd) {
    var v = this.vertices;
    switch (v.length) {
    case 3:
        break;
    case 4:
        return b2PolygonShape_CreateParticleGroup_4(particleSystem.ptr, pgd.angle, pgd.angularVelocity, pgd.color.r, pgd.color.g, pgd.color.b, pgd.color.a, pgd.flags, pgd.group.ptr, pgd.groupFlags, pgd.lifetime, pgd.linearVelocity.x, pgd.linearVelocity.y, pgd.position.x, pgd.position.y, pgd.positionData, pgd.particleCount, pgd.strength, pgd.stride, pgd.userData, v[0].x, v[0].y, v[1].x, v[1].y, v[2].x,
        v[2].y, v[3].x, v[3].y);
        break
    }
};
b2PolygonShape.prototype._DestroyParticlesInShape = function(ps, xf) {
    var v = this.vertices;
    switch (v.length) {
    case 3:
        break;
    case 4:
        return b2PolygonShape_DestroyParticlesInShape_4(ps.ptr, v[0].x, v[0].y, v[1].x, v[1].y, v[2].x, v[2].y, v[3].x, v[3].y, xf.p.x, xf.p.y, xf.q.s, xf.q.c);
        break
    }
};
b2PolygonShape.prototype.Validate = function() {
    for (var i = 0, max = this.vertices.length; i < max; ++i) {
        var i1 = i;
        var i2 = i < max - 1 ? i1 + 1 : 0;
        var p = this.vertices[i1];
        var e = this.vertices[i2];
        var eSubP = new b2Vec2;
        b2Vec2.Sub(eSubP, e, p);
        for (var j = 0; j < max; ++j) {
            if (j == i1 || j == i2)
                continue;
            var v = new b2Vec2;
            b2Vec2.Sub(v, this.vertices[j], p);
            var c = b2Vec2.Cross(eSubP, v);
            if (c < 0)
                return false
        }
    }
    return true
};
var b2Shape_Type_e_circle = 0;
var b2Shape_Type_e_edge = 1;
var b2Shape_Type_e_polygon = 2;
var b2Shape_Type_e_chain = 3;
var b2Shape_Type_e_typeCount = 4;
var b2_linearSlop = .005;
var b2_polygonRadius = 2 * b2_linearSlop;
var b2_maxPolygonVertices = 8;
function b2MassData(mass, center, I) {
    this.mass = mass;
    this.center = center;
    this.I = I
}
;
var b2ChainShape_CreateFixture = Module.cwrap("b2ChainShape_CreateFixture", "number", ["number", "number", "number", "number", "number", "number", "number", "number"]);
function b2ChainShape() {
    this.radius = b2_polygonRadius;
    this.vertices = [];
    this.type = b2Shape_Type_e_chain
}
b2ChainShape.prototype.CreateLoop = function() {
    this.vertices.push(this.vertices[0])
};
b2ChainShape.prototype._CreateFixture = function(body, fixtureDef) {
    var vertices = this.vertices;
    var chainLength = vertices.length;
    var dataLength = chainLength * 2;
    var data = new Float32Array(dataLength);
    for (var i = 0, j = 0; i < dataLength; i += 2, j++) {
        data[i] = vertices[j].x;
        data[i + 1] = vertices[j].y
    }
    var nDataBytes = data.length * data.BYTES_PER_ELEMENT;
    var dataPtr = Module._malloc(nDataBytes);
    var dataHeap = new Uint8Array(Module.HEAPU8.buffer, dataPtr, nDataBytes);
    dataHeap.set(new Uint8Array(data.buffer));
    var fixture = b2ChainShape_CreateFixture(body.ptr,
    fixtureDef.density, fixtureDef.friction, fixtureDef.isSensor, fixtureDef.restitution, fixtureDef.userData, fixtureDef.filter.categoryBits, fixtureDef.filter.groupIndex, fixtureDef.filter.maskBits, dataHeap.byteOffset, data.length);
    Module._free(dataHeap.byteOffset);
    return fixture
};
var b2CircleShape_CreateFixture = Module.cwrap("b2CircleShape_CreateFixture", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2CircleShape_CreateParticleGroup = Module.cwrap("b2CircleShape_CreateParticleGroup", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2CircleShape_DestroyParticlesInShape = Module.cwrap("b2CircleShape_DestroyParticlesInShape", "number", ["number", "number", "number", "number", "number", "number", "number", "number"]);
function b2CircleShape() {
    this.position = new b2Vec2;
    this.radius = 0;
    this.type = b2Shape_Type_e_circle
}
b2CircleShape.prototype._CreateFixture = function(body, fixtureDef) {
    return b2CircleShape_CreateFixture(body.ptr, fixtureDef.density, fixtureDef.friction, fixtureDef.isSensor, fixtureDef.restitution, fixtureDef.userData, fixtureDef.filter.categoryBits, fixtureDef.filter.groupIndex, fixtureDef.filter.maskBits, this.position.x, this.position.y, this.radius)
};
b2CircleShape.prototype._CreateParticleGroup = function(particleSystem, pgd) {
    return b2CircleShape_CreateParticleGroup(particleSystem.ptr, pgd.angle, pgd.angularVelocity, pgd.color.r, pgd.color.g, pgd.color.b, pgd.color.a, pgd.flags, pgd.group.ptr, pgd.groupFlags, pgd.lifetime, pgd.linearVelocity.x, pgd.linearVelocity.y, pgd.position.x, pgd.position.y, pgd.positionData, pgd.particleCount, pgd.strength, pgd.stride, pgd.userData, this.position.x, this.position.y, this.radius)
};
b2CircleShape.prototype._DestroyParticlesInShape = function(ps, xf) {
    return b2CircleShape_DestroyParticlesInShape(ps.ptr, this.position.x, this.position.y, this.radius, xf.p.x, xf.p.y, xf.q.s, xf.q.c)
};
var b2Body_ApplyAngularImpulse = Module.cwrap("b2Body_ApplyAngularImpulse", "null", ["number", "number", "number"]);
var b2Body_ApplyForce = Module.cwrap("b2Body_ApplyForce", "number", ["number", "number", "number", "number", "number", "number"]);
var b2Body_ApplyForceToCenter = Module.cwrap("b2Body_ApplyForceToCenter", "number", ["number", "number", "number", "number"]);
var b2Body_ApplyTorque = Module.cwrap("b2Body_ApplyTorque", "number", ["number", "number", "number"]);
var b2Body_DestroyFixture = Module.cwrap("b2Body_DestroyFixture", "null", ["number", "number"]);
var b2Body_GetAngle = Module.cwrap("b2Body_GetAngle", "number", ["number"]);
var b2Body_GetAngularVelocity = Module.cwrap("b2Body_GetAngularVelocity", "number", ["number"]);
var b2Body_GetInertia = Module.cwrap("b2Body_GetInertia", "number", ["number"]);
var b2Body_GetLinearVelocity = Module.cwrap("b2Body_GetLinearVelocity", "null", ["number", "number"]);
var b2Body_GetLocalPoint = Module.cwrap("b2Body_GetLocalPoint", "null", ["number", "number", "number", "number"]);
var b2Body_GetLocalVector = Module.cwrap("b2Body_GetLocalVector", "null", ["number", "number", "number", "number"]);
var b2Body_GetMass = Module.cwrap("b2Body_GetMass", "number", ["number"]);
var b2Body_GetPosition = Module.cwrap("b2Body_GetPosition", "null", ["number", "number"]);
var b2Body_GetTransform = Module.cwrap("b2Body_GetTransform", "null", ["number", "number"]);
var b2Body_GetType = Module.cwrap("b2Body_GetType", "number", ["number"]);
var b2Body_GetWorldCenter = Module.cwrap("b2Body_GetWorldCenter", "null", ["number", "number"]);
var b2Body_GetWorldPoint = Module.cwrap("b2Body_GetWorldPoint", "null", ["number", "number", "number", "number"]);
var b2Body_GetWorldVector = Module.cwrap("b2Body_GetWorldVector", "null", ["number", "number", "number", "number"]);
var b2Body_SetAngularVelocity = Module.cwrap("b2Body_SetAngularVelocity", "null", ["number", "number"]);
var b2Body_SetAwake = Module.cwrap("b2Body_SetAwake", "number", ["number", "number"]);
var b2Body_SetLinearVelocity = Module.cwrap("b2Body_SetLinearVelocity", "null", ["number", "number", "number"]);
var b2Body_SetMassData = Module.cwrap("b2Body_SetMassData", "null", ["number", "number", "number", "number", "number"]);
var b2Body_SetTransform = Module.cwrap("b2Body_SetTransform", "null", ["number", "number", "number"]);
var b2Body_SetType = Module.cwrap("b2Body_SetType", "null", ["number", "number"]);
var b2Body_xf_offset = Offsets.b2Body.xf;
var b2Body_userData_offset = Offsets.b2Body.userData;
function b2Body(ptr) {
    this.buffer = new DataView(Module.HEAPU8.buffer, ptr);
    this.ptr = ptr;
    this.fixtures = []
}
b2Body.prototype.ApplyAngularImpulse = function(force, wake) {
    b2Body_ApplyAngularImpulse(this.ptr, force, wake)
};
b2Body.prototype.ApplyForce = function(force, point, wake) {
    b2Body_ApplyForce(this.ptr, force.x, force.y, point.x, point.y, wake)
};
b2Body.prototype.ApplyForceToCenter = function(force, wake) {
    b2Body_ApplyForceToCenter(this.ptr, force.x, force.y, wake)
};
b2Body.prototype.ApplyTorque = function(force, wake) {
    b2Body_ApplyTorque(this.ptr, force, wake)
};
b2Body.prototype.CreateFixtureFromDef = function(fixtureDef) {
    var fixture = new b2Fixture;
    fixture.FromFixtureDef(fixtureDef);
    fixture._SetPtr(fixtureDef.shape._CreateFixture(this, fixtureDef));
    fixture.body = this;
    b2World._Push(fixture, this.fixtures);
    world.fixturesLookup[fixture.ptr] = fixture;
    return fixture
};
b2Body.prototype.CreateFixtureFromShape = function(shape, density) {
    var fixtureDef = new b2FixtureDef;
    fixtureDef.shape = shape;
    fixtureDef.density = density;
    return this.CreateFixtureFromDef(fixtureDef)
};
b2Body.prototype.DestroyFixture = function(fixture) {
    b2Body_DestroyFixture(this.ptr, fixture.ptr);
    b2World._RemoveItem(fixture, this.fixtures)
};
b2Body.prototype.GetAngle = function() {
    return b2Body_GetAngle(this.ptr)
};
b2Body.prototype.GetAngularVelocity = function() {
    return b2Body_GetAngularVelocity(this.ptr)
};
b2Body.prototype.GetInertia = function() {
    return b2Body_GetInertia(this.ptr)
};
b2Body.prototype.GetMass = function() {
    return b2Body_GetMass(this.ptr)
};
b2Body.prototype.GetLinearVelocity = function() {
    b2Body_GetLinearVelocity(this.ptr, _vec2Buf.byteOffset);
    var result = new Float32Array(_vec2Buf.buffer, _vec2Buf.byteOffset, _vec2Buf.length);
    return new b2Vec2(result[0], result[1])
};
b2Body.prototype.GetLocalPoint = function(vec) {
    b2Body_GetLocalPoint(this.ptr, vec.x, vec.y, _vec2Buf.byteOffset);
    var result = new Float32Array(_vec2Buf.buffer, _vec2Buf.byteOffset, _vec2Buf.length);
    return new b2Vec2(result[0], result[1])
};
b2Body.prototype.GetLocalVector = function(vec) {
    b2Body_GetLocalVector(this.ptr, vec.x, vec.y, _vec2Buf.byteOffset);
    var result = new Float32Array(_vec2Buf.buffer, _vec2Buf.byteOffset, _vec2Buf.length);
    return new b2Vec2(result[0], result[1])
};
b2Body.prototype.GetPosition = function() {
    b2Body_GetPosition(this.ptr, _vec2Buf.byteOffset);
    var result = new Float32Array(_vec2Buf.buffer, _vec2Buf.byteOffset, _vec2Buf.length);
    return new b2Vec2(result[0], result[1])
};
b2Body.prototype.GetTransform = function() {
    var transform = new b2Transform;
    transform.p.x = this.buffer.getFloat32(b2Body_xf_offset, true);
    transform.p.y = this.buffer.getFloat32(b2Body_xf_offset + 4, true);
    transform.q.s = this.buffer.getFloat32(b2Body_xf_offset + 8, true);
    transform.q.c = this.buffer.getFloat32(b2Body_xf_offset + 12, true);
    return transform
};
b2Body.prototype.GetType = function() {
    return b2Body_GetType(this.ptr)
};
b2Body.prototype.GetUserData = function() {
    return this.buffer.getUint32(b2Body_userData_offset, true)
};
b2Body.prototype.GetWorldCenter = function() {
    b2Body_GetWorldCenter(this.ptr, _vec2Buf.byteOffset);
    var result = new Float32Array(_vec2Buf.buffer, _vec2Buf.byteOffset, _vec2Buf.length);
    return new b2Vec2(result[0], result[1])
};
b2Body.prototype.GetWorldPoint = function(vec) {
    b2Body_GetWorldPoint(this.ptr, vec.x, vec.y, _vec2Buf.byteOffset);
    var result = new Float32Array(_vec2Buf.buffer, _vec2Buf.byteOffset, _vec2Buf.length);
    return new b2Vec2(result[0], result[1])
};
b2Body.prototype.GetWorldVector = function(vec) {
    b2Body_GetWorldVector(this.ptr, vec.x, vec.y, _vec2Buf.byteOffset);
    var result = new Float32Array(_vec2Buf.buffer, _vec2Buf.byteOffset, _vec2Buf.length);
    return new b2Vec2(result[0], result[1])
};
b2Body.prototype.SetAngularVelocity = function(angle) {
    b2Body_SetAngularVelocity(this.ptr, angle)
};
b2Body.prototype.SetAwake = function(flag) {
    b2Body_SetAwake(this.ptr, flag)
};
b2Body.prototype.SetLinearVelocity = function(v) {
    b2Body_SetLinearVelocity(this.ptr, v.x, v.y)
};
b2Body.prototype.SetMassData = function(massData) {
    b2Body_SetMassData(this.ptr, massData.mass, massData.center.x, massData.center.y, massData.I)
};
b2Body.prototype.SetTransform = function(v, angle) {
    b2Body_SetTransform(this.ptr, v.x, v.y, angle)
};
b2Body.prototype.SetType = function(type) {
    b2Body_SetType(this.ptr, type)
};
var b2_staticBody = 0;
var b2_kinematicBody = 1;
var b2_dynamicBody = 2;
function b2BodyDef() {
    this.active = true;
    this.allowSleep = true;
    this.angle = 0;
    this.angularVelocity = 0;
    this.angularDamping = 0;
    this.awake = true;
    this.bullet = false;
    this.fixedRotation = false;
    this.gravityScale = 1;
    this.linearDamping = 0;
    this.linearVelocity = new b2Vec2;
    this.position = new b2Vec2;
    this.type = b2_staticBody;
    this.userData = null
}
;
b2World.BeginContactBody = function(contactPtr) {
    if (world.listener.BeginContactBody === undefined)
        return;
    var contact = new b2Contact(contactPtr);
    world.listener.BeginContactBody(contact)
};
b2World.EndContactBody = function(contactPtr) {
    if (world.listener.EndContactBody === undefined)
        return;
    var contact = new b2Contact(contactPtr);
    world.listener.EndContactBody(contact)
};
b2World.PreSolve = function(contactPtr, oldManifoldPtr) {
    if (world.listener.PreSolve === undefined)
        return;
    world.listener.PreSolve(new b2Contact(contactPtr), new b2Manifold(oldManifoldPtr))
};
b2World.PostSolve = function(contactPtr, impulsePtr) {
    if (world.listener.PostSolve === undefined)
        return;
    world.listener.PostSolve(new b2Contact(contactPtr), new b2ContactImpulse(impulsePtr))
};
b2World.QueryAABB = function(fixturePtr) {
    return world.queryAABBCallback.ReportFixture(world.fixturesLookup[fixturePtr])
};
b2World.RayCast = function(fixturePtr, pointX, pointY, normalX, normalY, fraction) {
    return world.rayCastCallback.ReportFixture(world.fixturesLookup[fixturePtr], new b2Vec2(pointX, pointY), new b2Vec2(normalX, normalY), fraction)
};
var b2World_Create = Module.cwrap("b2World_Create", "number", ["number", "number"]);
var b2World_CreateBody = Module.cwrap("b2World_CreateBody", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2World_CreateParticleSystem = Module.cwrap("b2World_CreateParticleSystem", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2World_DestroyBody = Module.cwrap("b2World_DestroyBody", "null", ["number", "number"]);
var b2World_DestroyJoint = Module.cwrap("b2World_DestroyJoint", "null", ["number", "number"]);
var b2World_DestroyParticleSystem = Module.cwrap("b2World_DestroyParticleSystem", "null", ["number", "number"]);
var b2World_QueryAABB = Module.cwrap("b2World_QueryAABB", "null", ["number", "number", "number", "number", "number"]);
var b2World_RayCast = Module.cwrap("b2World_RayCast", "null", ["number", "number", "number", "number", "number"]);
var b2World_SetContactListener = Module.cwrap("b2World_SetContactListener", "null", ["number"]);
var b2World_SetGravity = Module.cwrap("b2World_SetGravity", "null", ["number", "number", "number"]);
var b2World_Step = Module.cwrap("b2World_Step", "null", ["number", "number", "number"]);
var _transBuf = null;
var _vec2Buf = null;
function b2World(gravity) {
    this.bodies = [];
    this.bodiesLookup = {};
    this.fixturesLookup = {};
    this.joints = [];
    this.listener = null;
    this.particleSystems = [];
    this.ptr = b2World_Create(gravity.x, gravity.y);
    this.queryAABBCallback = null;
    this.rayCastCallback = null;
    this.buffer = new DataView(Module.HEAPU8.buffer, this.ptr);
    var nDataBytes = 4 * Float32Array.BYTES_PER_ELEMENT;
    var dataPtr = Module._malloc(nDataBytes);
    _transBuf = new Uint8Array(Module.HEAPU8.buffer, dataPtr, nDataBytes);
    nDataBytes = 2 * Float32Array.BYTES_PER_ELEMENT;
    dataPtr =
    Module._malloc(nDataBytes);
    _vec2Buf = new Uint8Array(Module.HEAPU8.buffer, dataPtr, nDataBytes)
}
b2World._Push = function(item, list) {
    item.lindex = list.length;
    list.push(item)
};
b2World._RemoveItem = function(item, list) {
    var length = list.length;
    var lindex = item.lindex;
    if (length > 1) {
        list[lindex] = list[length - 1];
        list[lindex].lindex = lindex
    }
    list.pop()
};
b2World.prototype.CreateBody = function(bodyDef) {
    var body = new b2Body(b2World_CreateBody(this.ptr, bodyDef.active, bodyDef.allowSleep, bodyDef.angle, bodyDef.angularVelocity, bodyDef.angularDamping, bodyDef.awake, bodyDef.bullet, bodyDef.fixedRotation, bodyDef.gravityScale, bodyDef.linearDamping, bodyDef.linearVelocity.x, bodyDef.linearVelocity.y, bodyDef.position.x, bodyDef.position.y, bodyDef.type, bodyDef.userData));
    b2World._Push(body, this.bodies);
    this.bodiesLookup[body.ptr] = body;
    return body
};
b2World.prototype.CreateJoint = function(jointDef) {
    var joint = jointDef.Create(this);
    b2World._Push(joint, this.joints);
    return joint
};
b2World.prototype.CreateParticleSystem = function(psd) {
    var ps = new b2ParticleSystem(b2World_CreateParticleSystem(this.ptr, psd.colorMixingStrength, psd.dampingStrength, psd.destroyByAge, psd.ejectionStrength, psd.elasticStrength, psd.lifetimeGranularity, psd.powderStrength, psd.pressureStrength, psd.radius, psd.repulsiveStrength, psd.springStrength, psd.staticPressureIterations, psd.staticPressureRelaxation, psd.staticPressureStrength, psd.surfaceTensionNormalStrength, psd.surfaceTensionPressureStrength, psd.viscousStrength));
    b2World._Push(ps, this.particleSystems);
    ps.dampingStrength = psd.dampingStrength;
    ps.radius = psd.radius;
    return ps
};
b2World.prototype.DestroyBody = function(body) {
    b2World_DestroyBody(this.ptr, body.ptr);
    b2World._RemoveItem(body, this.bodies)
};
b2World.prototype.DestroyJoint = function(joint) {
    b2World_DestroyJoint(this.ptr, joint.ptr);
    b2World._RemoveItem(joint, this.joints)
};
b2World.prototype.DestroyParticleSystem = function(particleSystem) {
    b2World_DestroyParticleSystem(this.ptr, particleSystem.ptr);
    b2World._RemoveItem(particleSystem, this.particleSystems)
};
b2World.prototype.QueryAABB = function(callback, aabb) {
    this.queryAABBCallback = callback;
    b2World_QueryAABB(this.ptr, aabb.lowerBound.x, aabb.lowerBound.y, aabb.upperBound.x, aabb.upperBound.y)
};
b2World.prototype.RayCast = function(callback, point1, point2) {
    this.rayCastCallback = callback;
    b2World_RayCast(this.ptr, point1.x, point1.y, point2.x, point2.y)
};
b2World.prototype.SetContactListener = function(listener) {
    this.listener = listener;
    b2World_SetContactListener(this.ptr)
};
b2World.prototype.SetGravity = function(gravity) {
    b2World_SetGravity(this.ptr, gravity.x, gravity.y)
};
b2World.prototype.Step = function(steps, vIterations, pIterations) {
    b2World_Step(this.ptr, steps, vIterations, pIterations)
};
var b2WheelJoint_SetMotorSpeed = Module.cwrap("b2WheelJoint_SetMotorSpeed", "null", ["number", "number"]);
var b2WheelJoint_SetSpringFrequencyHz = Module.cwrap("b2WheelJoint_SetSpringFrequencyHz", "null", ["number", "number"]);
function b2WheelJoint(def) {
    this.next = null;
    this.ptr = null
}
b2WheelJoint.prototype.SetMotorSpeed = function(speed) {
    b2WheelJoint_SetMotorSpeed(this.ptr, speed)
};
b2WheelJoint.prototype.SetSpringFrequencyHz = function(hz) {
    b2WheelJoint_SetSpringFrequencyHz(this.ptr, hz)
};
var b2WheelJointDef_Create = Module.cwrap("b2WheelJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2WheelJointDef_InitializeAndCreate = Module.cwrap("b2WheelJointDef_InitializeAndCreate", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
function b2WheelJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = false;
    this.dampingRatio = .7;
    this.enableMotor = false;
    this.frequencyHz = 2;
    this.localAnchorA = new b2Vec2;
    this.localAnchorB = new b2Vec2;
    this.localAxisA = new b2Vec2(1, 0);
    this.maxMotorTorque = 0;
    this.motorSpeed = 0
}
b2WheelJointDef.prototype.Create = function(world) {
    var wheelJoint = new b2WheelJoint(this);
    wheelJoint.ptr = b2WheelJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.dampingRatio, this.enableMotor, this.frequencyHz, this.localAnchorA.x, this.localAnchorA.y, this.localAnchorB.x, this.localAnchorB.y, this.localAxisA.x, this.localAxisA.y, this.maxMotorTorque, this.motorSpeed);
    return wheelJoint
};
b2WheelJointDef.prototype.InitializeAndCreate = function(bodyA, bodyB, anchor, axis) {
    this.bodyA = bodyA;
    this.bodyB = bodyB;
    var wheelJoint = new b2WheelJoint(this);
    wheelJoint.ptr = b2WheelJointDef_InitializeAndCreate(world.ptr, this.bodyA.ptr, this.bodyB.ptr, anchor.x, anchor.y, axis.x, axis.y, this.collideConnected, this.dampingRatio, this.enableMotor, this.frequencyHz, this.maxMotorTorque, this.motorSpeed);
    b2World._Push(wheelJoint, world.joints);
    return wheelJoint
};
var b2WeldJointDef_Create = Module.cwrap("b2WeldJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2WeldJointDef_InitializeAndCreate = Module.cwrap("b2WeldJointDef_InitializeAndCreate", "number", ["number", "number", "number", "number", "number", "number", "number", "number"]);
function b2WeldJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = false;
    this.dampingRatio = 0;
    this.frequencyHz = 0;
    this.localAnchorA = new b2Vec2;
    this.localAnchorB = new b2Vec2;
    this.referenceAngle = 0
}
b2WeldJointDef.prototype.Create = function(world) {
    var weldJoint = new b2WeldJoint(this);
    weldJoint.ptr = b2WeldJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.dampingRatio, this.frequencyHz, this.localAnchorA.x, this.localAnchorA.y, this.localAnchorB.x, this.localAnchorB.y, this.referenceAngle);
    return weldJoint
};
b2WeldJointDef.prototype.InitializeAndCreate = function(bodyA, bodyB, anchor) {
    this.bodyA = bodyA;
    this.bodyB = bodyB;
    var weldJoint = new b2WeldJoint(this);
    weldJoint.ptr = b2WeldJointDef_InitializeAndCreate(world.ptr, this.bodyA.ptr, this.bodyB.ptr, anchor.x, anchor.y, this.collideConnected, this.dampingRatio, this.frequencyHz);
    b2World._Push(weldJoint, world.joints);
    return weldJoint
};
function b2WeldJoint(def) {
    this.bodyA = def.bodyA;
    this.bodyB = def.bodyB;
    this.next = null;
    this.ptr = null
}
;
var b2GearJoint_GetRatio = Module.cwrap("b2GearJoint_GetRatio", "number", ["number"]);
function b2GearJoint(def) {
    this.ptr = null;
    this.next = null
}
b2GearJoint.prototype.GetRatio = function() {
    return b2GearJoint_GetRatio(this.ptr)
};
var b2GearJointDef_Create = Module.cwrap("b2GearJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number"]);
function b2GearJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = false;
    this.joint1 = null;
    this.joint2 = null;
    this.ratio = 0
}
b2GearJointDef.prototype.Create = function(world) {
    var gearJoint = new b2GearJoint(this);
    gearJoint.ptr = b2GearJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.joint1.ptr, this.joint2.ptr, this.ratio);
    return gearJoint
};
var e_unknownJoint = 0;
var e_revoluteJoint = 1;
var e_prismaticJoint = 2;
var e_distanceJoint = 3;
var e_pulleyJoint = 4;
var e_mouseJoint = 5;
var e_gearJoint = 6;
var e_wheelJoint = 7;
var e_weldJoint = 8;
var e_frictionJoint = 9;
var e_ropeJoint = 10;
var e_motorJoint = 11;
var b2Joint_GetBodyA = Module.cwrap("b2Joint_GetBodyA", "number", ["number"]);
var b2Joint_GetBodyB = Module.cwrap("b2Joint_GetBodyB", "number", ["number"]);
function b2Joint() {}
b2Joint.prototype.GetBodyA = function() {
    return world.bodiesLookup[b2Joint_GetBodyA(this.ptr)]
};
b2Joint.prototype.GetBodyB = function() {
    return world.bodiesLookup[b2Joint_GetBodyB(this.ptr)]
};
var b2FrictionJointDef_Create = Module.cwrap("b2FrictionJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2FrictionJointDef_InitializeAndCreate = Module.cwrap("b2FrictionJointDef_InitializeAndCreate", "number", ["number", "number", "number", "number", "number", "number", "number", "number"]);
function b2FrictionJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = false;
    this.localAnchorA = new b2Vec2;
    this.localAnchorB = new b2Vec2;
    this.maxForce = 0;
    this.maxTorque = 0;
    this.userData = null
}
b2FrictionJointDef.prototype.Create = function(world) {
    var frictionJoint = new b2FrictionJoint(this);
    frictionJoint.ptr = b2FrictionJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.localAnchorA.x, this.localAnchorA.y, this.localAnchorB.x, this.localAnchorB.y, this.maxForce, this.maxTorque);
    return frictionJoint
};
b2FrictionJointDef.prototype.InitializeAndCreate = function(bodyA, bodyB, anchor) {
    this.bodyA = bodyA;
    this.bodyB = bodyB;
    var frictionJoint = new b2FrictionJoint(this);
    frictionJoint.ptr = b2FrictionJointDef_InitializeAndCreate(world.ptr, this.bodyA.ptr, this.bodyB.ptr, anchor.x, anchor.y, this.collideConnected, this.maxForce, this.maxTorque);
    b2World._Push(frictionJoint, world.joints);
    return frictionJoint
};
function b2FrictionJoint(def) {
    this.bodyA = def.bodyA;
    this.bodyB = def.bodyB;
    this.ptr = null;
    this.next = null
}
;
var b2RevoluteJoint_EnableLimit = Module.cwrap("b2RevoluteJoint_EnableLimit", "number", ["number", "number"]);
var b2RevoluteJoint_EnableMotor = Module.cwrap("b2RevoluteJoint_EnableMotor", "number", ["number", "number"]);
var b2RevoluteJoint_GetJointAngle = Module.cwrap("b2RevoluteJoint_GetJointAngle", "number", ["number"]);
var b2RevoluteJoint_IsLimitEnabled = Module.cwrap("b2RevoluteJoint_IsLimitEnabled", "number", ["number"]);
var b2RevoluteJoint_IsMotorEnabled = Module.cwrap("b2RevoluteJoint_IsMotorEnabled", "number", ["number"]);
var b2RevoluteJoint_SetMotorSpeed = Module.cwrap("b2RevoluteJoint_SetMotorSpeed", "number", ["number", "number"]);
function b2RevoluteJoint(revoluteJointDef) {
    this.collideConnected = revoluteJointDef.collideConnected;
    this.enableLimit = revoluteJointDef.enableLimit;
    this.enableMotor = revoluteJointDef.enableMotor;
    this.lowerAngle = revoluteJointDef.lowerAngle;
    this.maxMotorTorque = revoluteJointDef.maxMotorTorque;
    this.motorSpeed = revoluteJointDef.motorSpeed;
    this.next = null;
    this.ptr = null;
    this.upperAngle = revoluteJointDef.upperAngle;
    this.userData = revoluteJointDef.userData
}
b2RevoluteJoint.prototype = new b2Joint;
b2RevoluteJoint.prototype.EnableLimit = function(flag) {
    b2RevoluteJoint_EnableLimit(this.ptr, flag)
};
b2RevoluteJoint.prototype.EnableMotor = function(flag) {
    b2RevoluteJoint_EnableMotor(this.ptr, flag)
};
b2RevoluteJoint.prototype.GetJointAngle = function(flag) {
    return b2RevoluteJoint_GetJointAngle(this.ptr)
};
b2RevoluteJoint.prototype.IsLimitEnabled = function() {
    return b2RevoluteJoint_IsLimitEnabled(this.ptr)
};
b2RevoluteJoint.prototype.IsMotorEnabled = function() {
    return b2RevoluteJoint_IsMotorEnabled(this.ptr)
};
b2RevoluteJoint.prototype.SetMotorSpeed = function(speed) {
    b2RevoluteJoint_SetMotorSpeed(this.ptr, speed);
    this.motorSpeed = speed
};
var b2RevoluteJointDef_Create = Module.cwrap("b2RevoluteJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2RevoluteJointDef_InitializeAndCreate = Module.cwrap("b2RevoluteJointDef_InitializeAndCreate", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
function b2RevoluteJointDef() {
    this.collideConnected = false;
    this.enableLimit = false;
    this.enableMotor = false;
    this.localAnchorA = new b2Vec2;
    this.localAnchorB = new b2Vec2;
    this.lowerAngle = 0;
    this.maxMotorTorque = 0;
    this.motorSpeed = 0;
    this.referenceAngle = 0;
    this.upperAngle = 0;
    this.userData = null
}
b2RevoluteJointDef.prototype.Create = function(world) {
    var revoluteJoint = new b2RevoluteJoint(this);
    revoluteJoint.ptr = b2RevoluteJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.enableLimit, this.enableMotor, this.lowerAngle, this.localAnchorA.x, this.localAnchorA.y, this.localAnchorB.x, this.localAnchorB.y, this.maxMotorTorque, this.motorSpeed, this.referenceAngle, this.upperAngle);
    return revoluteJoint
};
b2RevoluteJointDef.prototype.InitializeAndCreate = function(bodyA, bodyB, anchor) {
    this.bodyA = bodyA;
    this.bodyB = bodyB;
    var revoluteJoint = new b2RevoluteJoint(this);
    revoluteJoint.ptr = b2RevoluteJointDef_InitializeAndCreate(world.ptr, bodyA.ptr, bodyB.ptr, anchor.x, anchor.y, this.collideConnected, this.enableLimit, this.enableMotor, this.lowerAngle, this.maxMotorTorque, this.motorSpeed, this.upperAngle);
    b2World._Push(revoluteJoint, world.joints);
    return revoluteJoint
};
var b2MotorJoint_SetAngularOffset = Module.cwrap("b2MotorJoint_SetAngularOffset", "null", ["number", "number"]);
var b2MotorJoint_SetLinearOffset = Module.cwrap("b2MotorJoint_SetLinearOffset", "null", ["number", "number", "number"]);
function b2MotorJoint(def) {
    this.bodyA = def.bodyA;
    this.bodyB = def.bodyB;
    this.ptr = null;
    this.next = null
}
b2MotorJoint.prototype.SetAngularOffset = function(angle) {
    b2MotorJoint_SetAngularOffset(this.ptr, angle)
};
b2MotorJoint.prototype.SetLinearOffset = function(v) {
    b2MotorJoint_SetLinearOffset(this.ptr, v.x, v.y)
};
var b2MotorJointDef_Create = Module.cwrap("b2MotorJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2MotorJointDef_InitializeAndCreate = Module.cwrap("b2MotorJointDef_InitializeAndCreate", "number", ["number", "number", "number", "number", "number", "number", "number", "number"]);
function b2MotorJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = false;
    this.angularOffset = 0;
    this.correctionFactor = .3;
    this.linearOffset = new b2Vec2;
    this.maxForce = 0;
    this.maxTorque = 0
}
b2MotorJointDef.prototype.Create = function(world) {
    var motorJoint = new b2MotorJoint(this);
    motorJoint.ptr = b2MotorJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.angularOffset, this.correctionFactor, this.linearOffset.x, this.linearOffset.y, this.maxForce, this.maxTorque);
    return motorJoint
};
b2MotorJointDef.prototype.InitializeAndCreate = function(bodyA, bodyB) {
    this.bodyA = bodyA;
    this.bodyB = bodyB;
    var motorJoint = new b2MotorJoint(this);
    motorJoint.ptr = b2MotorJointDef_InitializeAndCreate(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.correctionFactor, this.maxForce, this.maxTorque);
    b2World._Push(motorJoint, world.joints);
    return motorJoint
};
function b2PulleyJoint(def) {
    this.ptr = null;
    this.next = null
}
var b2PulleyJointDef_Create = Module.cwrap("b2PulleyJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2PulleyJointDef_InitializeAndCreate = Module.cwrap("b2PulleyJointDef_InitializeAndCreate", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
function b2PulleyJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = true;
    this.groundAnchorA = new b2Vec2;
    this.groundAnchorB = new b2Vec2;
    this.localAnchorA = new b2Vec2;
    this.localAnchorB = new b2Vec2;
    this.lengthA = 0;
    this.lengthB = 0;
    this.ratio = 1
}
b2PulleyJointDef.prototype.Create = function(world) {
    var pulleyJoint = new b2PulleyJoint(this);
    pulleyJoint.ptr = b2PulleyJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.groundAnchorA.x, this.groundAnchorA.y, this.groundAnchorB.x, this.groundAnchorB.y, this.lengthA, this.lengthB, this.localAnchorA.x, this.localAnchorA.y, this.localAnchorB.x, this.localAnchorB.y, this.ratio);
    return pulleyJoint
};
b2PulleyJointDef.prototype.InitializeAndCreate = function(bodyA, bodyB, groundAnchorA, groundAnchorB, anchorA, anchorB, ratio) {
    this.bodyA = bodyA;
    this.bodyB = bodyB;
    var pulleyJoint = new b2PulleyJoint(this);
    pulleyJoint.ptr = b2PulleyJointDef_InitializeAndCreate(world.ptr, this.bodyA.ptr, this.bodyB.ptr, anchorA.x, anchorA.y, anchorB.x, anchorB.y, groundAnchorA.x, groundAnchorA.y, groundAnchorB.x, groundAnchorB.y, ratio, this.collideConnected);
    b2World._Push(pulleyJoint, world.joints);
    return pulleyJoint
};
function b2DistanceJoint(def) {
    this.bodyA = def.bodyA;
    this.bodyB = def.bodyB;
    this.ptr = null;
    this.next = null
}
var b2DistanceJointDef_Create = Module.cwrap("b2DistanceJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2DistanceJointDef_InitializeAndCreate = Module.cwrap("b2DistanceJointDef_InitializeAndCreate", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
function b2DistanceJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = false;
    this.dampingRatio = 0;
    this.length = 1;
    this.localAnchorA = new b2Vec2;
    this.localAnchorB = new b2Vec2;
    this.frequencyHz = 0
}
b2DistanceJointDef.prototype.Create = function(world) {
    var distanceJoint = new b2DistanceJoint(this);
    distanceJoint.ptr = b2DistanceJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.dampingRatio, this.frequencyHz, this.length, this.localAnchorA.x, this.localAnchorA.y, this.localAnchorB.x, this.localAnchorB.y);
    return distanceJoint
};
b2DistanceJointDef.prototype.InitializeAndCreate = function(bodyA, bodyB, anchorA, anchorB) {
    this.bodyA = bodyA;
    this.bodyB = bodyB;
    var distanceJoint = new b2DistanceJoint(this);
    distanceJoint.ptr = b2DistanceJointDef_InitializeAndCreate(world.ptr, this.bodyA.ptr, this.bodyB.ptr, anchorA.x, anchorA.y, anchorB.x, anchorB.y, this.collideConnected, this.dampingRatio, this.frequencyHz);
    b2World._Push(distanceJoint, world.joints);
    return distanceJoint
};
var b2PrismaticJoint_EnableLimit = Module.cwrap("b2PrismaticJoint_EnableLimit", "number", ["number", "number"]);
var b2PrismaticJoint_EnableMotor = Module.cwrap("b2PrismaticJoint_EnableMotor", "number", ["number", "number"]);
var b2PrismaticJoint_GetJointTranslation = Module.cwrap("b2PrismaticJoint_GetJointTranslation", "number", ["number"]);
var b2PrismaticJoint_GetMotorSpeed = Module.cwrap("b2PrismaticJoint_GetMotorSpeed", "number", ["number"]);
var b2PrismaticJoint_GetMotorForce = Module.cwrap("b2PrismaticJoint_GetMotorForce", "number", ["number", "number"]);
var b2PrismaticJoint_IsLimitEnabled = Module.cwrap("b2PrismaticJoint_IsLimitEnabled", "number", ["number"]);
var b2PrismaticJoint_IsMotorEnabled = Module.cwrap("b2PrismaticJoint_IsMotorEnabled", "number", ["number"]);
var b2PrismaticJoint_SetMotorSpeed = Module.cwrap("b2PrismaticJoint_SetMotorSpeed", "number", ["number", "number"]);
function b2PrismaticJoint(def) {
    this.ptr = null;
    this.next = null
}
b2PrismaticJoint.prototype = new b2Joint;
b2PrismaticJoint.prototype.EnableLimit = function(flag) {
    return b2PrismaticJoint_EnableLimit(this.ptr, flag)
};
b2PrismaticJoint.prototype.EnableMotor = function(flag) {
    return b2PrismaticJoint_EnableMotor(this.ptr, flag)
};
b2PrismaticJoint.prototype.GetJointTranslation = function() {
    return b2PrismaticJoint_GetJointTranslation(this.ptr)
};
b2PrismaticJoint.prototype.GetMotorSpeed = function() {
    return b2PrismaticJoint_GetMotorSpeed(this.ptr)
};
b2PrismaticJoint.prototype.GetMotorForce = function(hz) {
    return b2PrismaticJoint_GetMotorForce(this.ptr, hz)
};
b2PrismaticJoint.prototype.IsLimitEnabled = function() {
    return b2PrismaticJoint_IsLimitEnabled(this.ptr)
};
b2PrismaticJoint.prototype.IsMotorEnabled = function() {
    return b2PrismaticJoint_IsMotorEnabled(this.ptr)
};
b2PrismaticJoint.prototype.GetMotorEnabled = function() {
    return b2PrismaticJoint_IsMotorEnabled(this.ptr)
};
b2PrismaticJoint.prototype.SetMotorSpeed = function(speed) {
    return b2PrismaticJoint_SetMotorSpeed(this.ptr, speed)
};
var b2PrismaticJointDef_Create = Module.cwrap("b2PrismaticJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2PrismaticJointDef_InitializeAndCreate = Module.cwrap("b2PrismaticJointDef_InitializeAndCreate", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
function b2PrismaticJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = false;
    this.enableLimit = false;
    this.enableMotor = false;
    this.localAnchorA = new b2Vec2;
    this.localAnchorB = new b2Vec2;
    this.localAxisA = new b2Vec2(1, 0);
    this.lowerTranslation = 0;
    this.maxMotorForce = 0;
    this.motorSpeed = 0;
    this.referenceAngle = 0;
    this.upperTranslation = 0
}
b2PrismaticJointDef.prototype.Create = function(world) {
    var prismaticJoint = new b2PrismaticJoint(this);
    prismaticJoint.ptr = b2PrismaticJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.enableLimit, this.enableMotor, this.localAnchorA.x, this.localAnchorA.y, this.localAnchorB.x, this.localAnchorB.y, this.localAxisA.x, this.localAxisA.y, this.lowerTranslation, this.maxMotorForce, this.motorSpeed, this.referenceAngle, this.upperTranslation);
    return prismaticJoint
};
b2PrismaticJointDef.prototype.InitializeAndCreate = function(bodyA, bodyB, anchor, axis) {
    this.bodyA = bodyA;
    this.bodyB = bodyB;
    var prismaticJoint = new b2PrismaticJoint(this);
    prismaticJoint.ptr = b2PrismaticJointDef_InitializeAndCreate(world.ptr, this.bodyA.ptr, this.bodyB.ptr, anchor.x, anchor.y, axis.x, axis.y, this.collideConnected, this.enableLimit, this.enableMotor, this.lowerTranslation, this.maxMotorForce, this.motorSpeed, this.upperTranslation);
    b2World._Push(prismaticJoint, world.joints);
    return prismaticJoint
};
function b2RopeJoint(def) {
    this.next = null;
    this.ptr = null
}
var b2RopeJointDef_Create = Module.cwrap("b2RopeJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number"]);
function b2RopeJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = false;
    this.localAnchorA = new b2Vec2;
    this.localAnchorB = new b2Vec2;
    this.maxLength = 0
}
b2RopeJointDef.prototype.Create = function(world) {
    var ropeJoint = new b2RopeJoint(this);
    ropeJoint.ptr = b2RopeJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.localAnchorA.x, this.localAnchorA.y, this.localAnchorB.x, this.localAnchorB.y, this.maxLength);
    return ropeJoint
};
var b2MouseJoint_SetTarget = Module.cwrap("b2MouseJoint_SetTarget", "null", ["number", "number", "number"]);
function b2MouseJoint(def) {
    this.ptr = null;
    this.next = null
}
b2MouseJoint.prototype.SetTarget = function(p) {
    b2MouseJoint_SetTarget(this.ptr, p.x, p.y)
};
var b2MouseJointDef_Create = Module.cwrap("b2MouseJointDef_Create", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number"]);
function b2MouseJointDef() {
    this.bodyA = null;
    this.bodyB = null;
    this.collideConnected = false;
    this.dampingRatio = .7;
    this.frequencyHz = 5;
    this.maxForce = 0;
    this.target = new b2Vec2
}
b2MouseJointDef.prototype.Create = function(world) {
    var mouseJoint = new b2MouseJoint(this);
    mouseJoint.ptr = b2MouseJointDef_Create(world.ptr, this.bodyA.ptr, this.bodyB.ptr, this.collideConnected, this.dampingRatio, this.frequencyHz, this.maxForce, this.target.x, this.target.y);
    return mouseJoint
};
var b2Contact_fixtureA_offset = Offsets.b2Contact.fixtureA;
var b2Contact_fixtureB_offset = Offsets.b2Contact.fixtureB;
var b2Contact_tangentSpeed_offset = Offsets.b2Contact.tangentSpeed;
var b2Contact_GetManifold = Module.cwrap("b2Contact_GetManifold", "number", ["number"]);
var b2Contact_GetWorldManifold = Module.cwrap("b2Contact_GetWorldManifold", "number", ["number"]);
function b2Contact(ptr) {
    this.buffer = new DataView(Module.HEAPU8.buffer, ptr);
    this.ptr = ptr
}
b2Contact.prototype.GetFixtureA = function() {
    var fixAPtr = this.buffer.getUint32(b2Contact_fixtureA_offset, true);
    return world.fixturesLookup[fixAPtr]
};
b2Contact.prototype.GetFixtureB = function() {
    var fixBPtr = this.buffer.getUint32(b2Contact_fixtureB_offset, true);
    return world.fixturesLookup[fixBPtr]
};
b2Contact.prototype.GetManifold = function() {
    return new b2Manifold(b2Contact_GetManifold(this.ptr))
};
b2Contact.prototype.GetWorldManifold = function() {
    return new b2WorldManifold(b2Contact_GetWorldManifold(this.ptr))
};
b2Contact.prototype.SetTangentSpeed = function(speed) {
    this.buffer.setFloat32(b2Contact_tangentSpeed_offset, speed, true)
};
function b2Filter() {
    this.categoryBits = 1;
    this.groupIndex = 0;
    this.maskBits = 65535
}
var b2Fixture_isSensor_offset = Offsets.b2Fixture.isSensor;
var b2Fixture_userData_offset = Offsets.b2Fixture.userData;
function b2Fixture() {
    this.body = null;
    this.buffer = null;
    this.ptr = null;
    this.shape = null
}
var b2Fixture_TestPoint = Module.cwrap("b2Fixture_TestPoint", "number", ["number", "number", "number"]);
b2Fixture.prototype._SetPtr = function(ptr) {
    this.ptr = ptr;
    this.buffer = new DataView(Module.HEAPU8.buffer, ptr)
};
b2Fixture.prototype.FromFixtureDef = function(fixtureDef) {
    this.density = fixtureDef.density;
    this.friction = fixtureDef.friction;
    this.isSensor = fixtureDef.isSensor;
    this.restitution = fixtureDef.restitution;
    this.shape = fixtureDef.shape;
    this.userData = fixtureDef.userData;
    this.vertices = []
};
b2Fixture.prototype.GetUserData = function() {
    return this.buffer.getUint32(b2Fixture_userData_offset, true)
};
b2Fixture.prototype.SetSensor = function(flag) {
    this.buffer.setUint32(b2Fixture_isSensor_offset, flag, true)
};
b2Fixture.prototype.TestPoint = function(p) {
    return b2Fixture_TestPoint(this.ptr, p.x, p.y)
};
function b2FixtureDef() {
    this.density = 0;
    this.friction = .2;
    this.isSensor = false;
    this.restitution = 0;
    this.shape = null;
    this.userData = null;
    this.filter = new b2Filter
}
;
function b2ContactImpulse(ptr) {
    this.ptr = ptr;
    this.buffer = new DataView(Module.HEAPU8.buffer, ptr)
}
b2ContactImpulse.prototype.GetNormalImpulse = function(i) {
    return this.buffer.getFloat32(i * 4, true)
};
b2ContactImpulse.prototype.GetTangentImpulse = function(i) {
    return this.buffer.getFloat32(i * 4 + 8, true)
};
b2ContactImpulse.prototype.GetCount = function(i) {
    console.log(this.buffer.getInt32(16, true))
};
function b2ParticleSystemDef() {
    this.colorMixingStrength = .5;
    this.dampingStrength = 1;
    this.destroyByAge = true;
    this.ejectionStrength = .5;
    this.elasticStrength = .25;
    this.lifetimeGranularity = 1 / 60;
    this.powderStrength = .5;
    this.pressureStrength = .05;
    this.radius = 1;
    this.repulsiveStrength = 1;
    this.springStrength = .25;
    this.staticPressureIterations = 8;
    this.staticPressureRelaxation = .2;
    this.staticPressureStrength = .2;
    this.surfaceTensionNormalStrength = .2;
    this.surfaceTensionPressureStrength = .2;
    this.viscousStrength = .25
}
var b2ParticleSystem_CreateParticle = Module.cwrap("b2ParticleSystem_CreateParticle", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]);
var b2ParticleSystem_GetColorBuffer = Module.cwrap("b2ParticleSystem_GetColorBuffer", "number", ["number"]);
var b2ParticleSystem_GetParticleCount = Module.cwrap("b2ParticleSystem_GetParticleCount", "number", ["number"]);
var b2ParticleSystem_GetPositionBuffer = Module.cwrap("b2ParticleSystem_GetPositionBuffer", "number", ["number"]);
var b2ParticleSystem_GetVelocityBuffer = Module.cwrap("b2ParticleSystem_GetVelocityBuffer", "number", ["number"]);
var b2ParticleSystem_SetDamping = Module.cwrap("b2ParticleSystem_SetDamping", "null", ["number", "number"]);
var b2ParticleSystem_SetDensity = Module.cwrap("b2ParticleSystem_SetDensity", "null", ["number", "number"]);
var b2ParticleSystem_SetRadius = Module.cwrap("b2ParticleSystem_SetRadius", "null", ["number", "number"]);
function b2ParticleSystem(ptr) {
    this.dampingStrength = 1;
    this.density = 1;
    this.ptr = ptr;
    this.particleGroups = [];
    this.radius = 1
}
b2ParticleSystem.prototype.CreateParticle = function(pd) {
    return b2ParticleSystem_CreateParticle(this.ptr, pd.color.r, pd.color.g, pd.color.b, pd.color.a, pd.flags, pd.group, pd.lifetime, pd.position.x, pd.position.y, pd.userData, pd.velocity.x, pd.velocity.y)
};
b2ParticleSystem.prototype.CreateParticleGroup = function(pgd) {
    var particleGroup = new b2ParticleGroup(pgd.shape._CreateParticleGroup(this, pgd));
    this.particleGroups.push(particleGroup);
    return particleGroup
};
b2ParticleSystem.prototype.DestroyParticlesInShape = function(shape, xf) {
    return shape._DestroyParticlesInShape(this, xf)
};
b2ParticleSystem.prototype.GetColorBuffer = function() {
    var count = b2ParticleSystem_GetParticleCount(this.ptr) * 4;
    var offset = b2ParticleSystem_GetColorBuffer(this.ptr);
    return new Uint8Array(Module.HEAPU8.buffer, offset, count)
};
b2ParticleSystem.prototype.GetParticleCount = function() {
    return b2ParticleSystem_GetParticleCount(this.ptr) * 2
};
b2ParticleSystem.prototype.GetPositionBuffer = function() {
    var count = b2ParticleSystem_GetParticleCount(this.ptr) * 2;
    var offset = b2ParticleSystem_GetPositionBuffer(this.ptr);
    return new Float32Array(Module.HEAPU8.buffer, offset, count)
};
b2ParticleSystem.prototype.GetVelocityBuffer = function() {
    var count = b2ParticleSystem_GetParticleCount(this.ptr) * 2;
    var offset = b2ParticleSystem_GetVelocityBuffer(this.ptr);
    return new Float32Array(Module.HEAPU8.buffer, offset, count)
};
b2ParticleSystem.prototype.SetDamping = function(damping) {
    this.dampingStrength = damping;
    b2ParticleSystem_SetDamping(this.ptr, damping)
};
b2ParticleSystem.prototype.SetDensity = function(density) {
    this.density = density;
    b2ParticleSystem_SetDensity(this.ptr, density)
};
b2ParticleSystem.prototype.SetRadius = function(radius) {
    this.radius = radius;
    b2ParticleSystem_SetRadius(this.ptr, radius)
};
var b2_solidParticleGroup = 1 << 0;
var b2_rigidParticleGroup = 1 << 1;
var b2_particleGroupCanBeEmpty = 1 << 2;
var b2_particleGroupWillBeDestroyed = 1 << 3;
var b2_particleGroupNeedsUpdateDepth = 1 << 4;
var b2_particleGroupInternalMask = b2_particleGroupWillBeDestroyed | b2_particleGroupNeedsUpdateDepth;
var b2ParticleGroup_ApplyForce = Module.cwrap("b2ParticleGroup_ApplyForce", "null", ["number", "number", "number"]);
var b2ParticleGroup_ApplyLinearImpulse = Module.cwrap("b2ParticleGroup_ApplyLinearImpulse", "null", ["number", "number", "number"]);
var b2ParticleGroup_DestroyParticles = Module.cwrap("b2ParticleGroup_DestroyParticles", "null", ["number", "number"]);
var b2ParticleGroup_GetBufferIndex = Module.cwrap("b2ParticleGroup_GetBufferIndex", "number", ["number"]);
var b2ParticleGroup_GetParticleCount = Module.cwrap("b2ParticleGroup_GetParticleCount", "number", ["number"]);
var b2ParticleGroup_groupFlags_offset = Offsets.b2ParticleGroup.groupFlags;
function b2ParticleGroup(ptr) {
    this.buffer = new DataView(Module.HEAPU8.buffer, ptr);
    this.ptr = ptr
}
b2ParticleGroup.prototype.ApplyForce = function(force) {
    b2ParticleGroup_ApplyForce(this.ptr, force.x, force.y)
};
b2ParticleGroup.prototype.ApplyLinearImpulse = function(impulse) {
    b2ParticleGroup_ApplyLinearImpulse(this.ptr, impulse.x, impulse.y)
};
b2ParticleGroup.prototype.DestroyParticles = function(flag) {
    b2ParticleGroup_DestroyParticles(this.ptr, flag)
};
b2ParticleGroup.prototype.GetBufferIndex = function() {
    return b2ParticleGroup_GetBufferIndex(this.ptr)
};
b2ParticleGroup.prototype.GetGroupFlags = function() {
    return this.buffer.getUint32(b2ParticleGroup_groupFlags_offset, true)
};
b2ParticleGroup.prototype.GetParticleCount = function() {
    return b2ParticleGroup_GetParticleCount(this.ptr)
};
b2ParticleGroup.prototype.SetGroupFlags = function(flags) {
    this.buffer.setUint32(b2ParticleGroup_groupFlags_offset, flags, true)
};
function b2ParticleGroupDef() {
    this.angle = 0;
    this.angularVelocity = 0;
    this.color = new b2ParticleColor(0, 0, 0, 0);
    this.flags = 0;
    this.group = new b2ParticleGroup(null);
    this.groupFlags = 0;
    this.lifetime = 0;
    this.linearVelocity = new b2Vec2;
    this.position = new b2Vec2;
    this.positionData = null;
    this.particleCount = 0;
    this.shape = null;
    this.strength = 1;
    this.stride = 0;
    this.userData = null
}
;
var b2_waterParticle = 0;
var b2_zombieParticle = 1 << 1;
var b2_wallParticle = 1 << 2;
var b2_springParticle = 1 << 3;
var b2_elasticParticle = 1 << 4;
var b2_viscousParticle = 1 << 5;
var b2_powderParticle = 1 << 6;
var b2_tensileParticle = 1 << 7;
var b2_colorMixingParticle = 1 << 8;
var b2_destructionListenerParticle = 1 << 9;
var b2_barrierParticle = 1 << 10;
var b2_staticPressureParticle = 1 << 11;
var b2_reactiveParticle = 1 << 12;
var b2_repulsiveParticle = 1 << 13;
var b2_fixtureContactListenerParticle = 1 << 14;
var b2_particleContactListenerParticle = 1 << 15;
var b2_fixtureContactFilterParticle = 1 << 16;
var b2_particleContactFilterParticle = 1 << 17;
function b2ParticleColor(r, g, b, a) {
    if (r === undefined)
        r = 0;
    if (g === undefined)
        g = 0;
    if (b === undefined)
        b = 0;
    if (a === undefined)
        a = 0;
    this.r = r;
    this.g = g;
    this.b = b;
    this.a = a
}
b2ParticleColor.prototype.Set = function(r, g, b, a) {
    this.r = r;
    this.g = g;
    this.b = b;
    this.a = a
};
function b2ParticleDef() {
    this.color = new b2Vec2;
    this.flags = 0;
    this.group = 0;
    this.lifetime = 0;
    this.position = new b2Vec2;
    this.userData = 0;
    this.velocity = new b2Vec2
}
;