diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dedbd86 --- /dev/null +++ b/.gitignore @@ -0,0 +1,108 @@ +# Dependency directories +node_modules/ +jspm_packages/ +three/ +.DS_Store +src/example04 + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port diff --git a/README.md b/README.md index 8e6ee72..32a47a1 100644 --- a/README.md +++ b/README.md @@ -1 +1,81 @@ -# threejs-modules \ No newline at end of file +# Copper3D + +This library is base on three.js and ami.js. +Current functions: + +- Load obj file model +- Load mtl file model +- Load gltf file model +- Load MRI images +- Multiple scenes +- Interacting with MRI images +- Draw circle on MRI images + +## How to use: + +``` + import * as Copper from 'copper3d'; + const allScenes = new Copper.Scenes(HTMLElement, 4, {0, 0, 1000}); + allScenes.animate(); +``` + +An example for quickly build multiple scenes: + + In the HTML file, Vue or React components, + you should create a HTMLElement container for copper3d. + E.g., in index.html + +``` +
+``` + + And the css for container might be: + +``` + #container_root { + width: 100vw; + height: 100vh; + } +``` + + In JS: + +``` + import * as Copper from "copper3d"; + const container = document.querySelector("#container_root"); + const numberOfScene = 3; + const allScenes = new Copper.Scenes(container, numberOfScene); + + const scene1 = allScenes.getScene(0); + const scene2 = allScenes.getScene(1); + const scene3 = allScenes.getScene(2); + + Copper.createTestMesh(scene1); + Copper.createTestMesh(scene2); + Copper.createTestMesh(scene3); + + allScenes.animate(); +``` + +In the end, you might see this screenshot in your browser: + + +## API Tutorial: + +See: https://linkungao.github.io/threejs-modules-1/ + +## See examples here: + +See: https://copper3d-examples.herokuapp.com/ + +## How to see examples locally: + +- cd Copper3D +- npm install +- npm run serve + +### The operations for draw circle function + +- a. Adjust the MRI image before you draw circle on it. +- b. Enabled draw circle function in GUI panel. +- c. If you draw circle on a wrong position, you can use delete key on your keyboard. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..30adc51 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,7 @@ +module.exports = { + presets: ["@babel/preset-env"], + plugins: [ + "@babel/plugin-transform-runtime", + "@babel/plugin-proposal-class-properties", + ], +}; diff --git a/build/copper3d.js b/build/copper3d.js new file mode 100644 index 0000000..ef7c683 --- /dev/null +++ b/build/copper3d.js @@ -0,0 +1,113950 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["Copper3D"] = factory(); + else + root["Copper3D"] = factory(); +})(self, function() { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 757: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(666); + + +/***/ }), + +/***/ 875: +/***/ ((module) => { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(); + else {} +})(window, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_538__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_538__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_538__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_538__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_538__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_538__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __nested_webpack_require_538__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __nested_webpack_require_538__.t = function(value, mode) { +/******/ if(mode & 1) value = __nested_webpack_require_538__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __nested_webpack_require_538__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_538__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_538__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_538__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_538__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_538__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_538__(__nested_webpack_require_538__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./external/scripts/jpeg.js": +/*!**********************************!*\ + !*** ./external/scripts/jpeg.js ***! + \**********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +// jshint ignore: start + +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / + /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* + Copyright 2011 notmasteryet + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +// - The JPEG specification can be found in the ITU CCITT Recommendation T.81 +// (www.w3.org/Graphics/JPEG/itu-t81.pdf) +// - The JFIF specification can be found in the JPEG File Interchange Format +// (www.w3.org/Graphics/JPEG/jfif3.pdf) +// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters +// in PostScript Level 2, Technical Note #5116 +// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf) + +var ColorSpace = {Unkown: 0, Grayscale: 1, AdobeRGB: 2, RGB: 3, CYMK: 4}; +var JpegImage = (function jpegImage() { + "use strict"; + var dctZigZag = new Int32Array([ + 0, + 1, 8, + 16, 9, 2, + 3, 10, 17, 24, + 32, 25, 18, 11, 4, + 5, 12, 19, 26, 33, 40, + 48, 41, 34, 27, 20, 13, 6, + 7, 14, 21, 28, 35, 42, 49, 56, + 57, 50, 43, 36, 29, 22, 15, + 23, 30, 37, 44, 51, 58, + 59, 52, 45, 38, 31, + 39, 46, 53, 60, + 61, 54, 47, + 55, 62, + 63 + ]); + + var dctCos1 = 4017; // cos(pi/16) + var dctSin1 = 799; // sin(pi/16) + var dctCos3 = 3406; // cos(3*pi/16) + var dctSin3 = 2276; // sin(3*pi/16) + var dctCos6 = 1567; // cos(6*pi/16) + var dctSin6 = 3784; // sin(6*pi/16) + var dctSqrt2 = 5793; // sqrt(2) + var dctSqrt1d2 = 2896; // sqrt(2) / 2 + + function constructor() { + } + + function buildHuffmanTable(codeLengths, values) { + var k = 0, code = [], i, j, length = 16; + while (length > 0 && !codeLengths[length - 1]) + length--; + code.push({children: [], index: 0}); + var p = code[0], q; + for (i = 0; i < length; i++) { + for (j = 0; j < codeLengths[i]; j++) { + p = code.pop(); + p.children[p.index] = values[k]; + while (p.index > 0) { + p = code.pop(); + } + p.index++; + code.push(p); + while (code.length <= i) { + code.push(q = {children: [], index: 0}); + p.children[p.index] = q.children; + p = q; + } + k++; + } + if (i + 1 < length) { + // p here points to last code + code.push(q = {children: [], index: 0}); + p.children[p.index] = q.children; + p = q; + } + } + return code[0].children; + } + + function getBlockBufferOffset(component, row, col) { + return 64 * ((component.blocksPerLine + 1) * row + col); + } + + function decodeScan(data, offset, + frame, components, resetInterval, + spectralStart, spectralEnd, + successivePrev, successive) { + var precision = frame.precision; + var samplesPerLine = frame.samplesPerLine; + var scanLines = frame.scanLines; + var mcusPerLine = frame.mcusPerLine; + var progressive = frame.progressive; + var maxH = frame.maxH, maxV = frame.maxV; + + var startOffset = offset, bitsData = 0, bitsCount = 0; + + function readBit() { + if (bitsCount > 0) { + bitsCount--; + return (bitsData >> bitsCount) & 1; + } + bitsData = data[offset++]; + if (bitsData == 0xFF) { + var nextByte = data[offset++]; + if (nextByte) { + throw "unexpected marker: " + ((bitsData << 8) | nextByte).toString(16); + } + // unstuff 0 + } + bitsCount = 7; + return bitsData >>> 7; + } + + function decodeHuffman(tree) { + var node = tree; + var bit; + while ((bit = readBit()) !== null) { + node = node[bit]; + if (typeof node === 'number') + return node; + if (typeof node !== 'object') + throw "invalid huffman sequence"; + } + return null; + } + + function receive(length) { + var n = 0; + while (length > 0) { + var bit = readBit(); + if (bit === null) + return; + n = (n << 1) | bit; + length--; + } + return n; + } + + function receiveAndExtend(length) { + var n = receive(length); + if (n >= 1 << (length - 1)) + return n; + return n + (-1 << length) + 1; + } + + function decodeBaseline(component, offset) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : receiveAndExtend(t); + component.blockData[offset] = (component.pred += diff); + var k = 1; + while (k < 64) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) + break; + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + component.blockData[offset + z] = receiveAndExtend(s); + k++; + } + } + + function decodeDCFirst(component, offset) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive); + component.blockData[offset] = (component.pred += diff); + } + + function decodeDCSuccessive(component, offset) { + component.blockData[offset] |= readBit() << successive; + } + + var eobrun = 0; + function decodeACFirst(component, offset) { + if (eobrun > 0) { + eobrun--; + return; + } + var k = spectralStart, e = spectralEnd; + while (k <= e) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r) - 1; + break; + } + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive); + k++; + } + } + + var successiveACState = 0, successiveACNextValue; + function decodeACSuccessive(component, offset) { + var k = spectralStart, e = spectralEnd, r = 0; + while (k <= e) { + var z = dctZigZag[k]; + switch (successiveACState) { + case 0: // initial state + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15; + r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r); + successiveACState = 4; + } else { + r = 16; + successiveACState = 1; + } + } else { + if (s !== 1) + throw "invalid ACn encoding"; + successiveACNextValue = receiveAndExtend(s); + successiveACState = r ? 2 : 3; + } + continue; + case 1: // skipping r zero items + case 2: + if (component.blockData[offset + z]) { + component.blockData[offset + z] += (readBit() << successive); + } else { + r--; + if (r === 0) + successiveACState = successiveACState == 2 ? 3 : 0; + } + break; + case 3: // set value for a zero item + if (component.blockData[offset + z]) { + component.blockData[offset + z] += (readBit() << successive); + } else { + component.blockData[offset + z] = successiveACNextValue << successive; + successiveACState = 0; + } + break; + case 4: // eob + if (component.blockData[offset + z]) { + component.blockData[offset + z] += (readBit() << successive); + } + break; + } + k++; + } + if (successiveACState === 4) { + eobrun--; + if (eobrun === 0) + successiveACState = 0; + } + } + + function decodeMcu(component, decode, mcu, row, col) { + var mcuRow = (mcu / mcusPerLine) | 0; + var mcuCol = mcu % mcusPerLine; + var blockRow = mcuRow * component.v + row; + var blockCol = mcuCol * component.h + col; + var offset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, offset); + } + + function decodeBlock(component, decode, mcu) { + var blockRow = (mcu / component.blocksPerLine) | 0; + var blockCol = mcu % component.blocksPerLine; + var offset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, offset); + } + + var componentsLength = components.length; + var component, i, j, k, n; + var decodeFn; + if (progressive) { + if (spectralStart === 0) + decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; + else + decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; + } else { + decodeFn = decodeBaseline; + } + + var mcu = 0, marker; + var mcuExpected; + if (componentsLength == 1) { + mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; + } else { + mcuExpected = mcusPerLine * frame.mcusPerColumn; + } + if (!resetInterval) { + resetInterval = mcuExpected; + } + + var h, v; + while (mcu < mcuExpected) { + // reset interval stuff + for (i = 0; i < componentsLength; i++) { + components[i].pred = 0; + } + eobrun = 0; + + if (componentsLength == 1) { + component = components[0]; + for (n = 0; n < resetInterval; n++) { + decodeBlock(component, decodeFn, mcu); + mcu++; + } + } else { + for (n = 0; n < resetInterval; n++) { + for (i = 0; i < componentsLength; i++) { + component = components[i]; + h = component.h; + v = component.v; + for (j = 0; j < v; j++) { + for (k = 0; k < h; k++) { + decodeMcu(component, decodeFn, mcu, j, k); + } + } + } + mcu++; + } + } + + // find marker + bitsCount = 0; + marker = (data[offset] << 8) | data[offset + 1]; + if (marker <= 0xFF00) { + throw "marker was not found"; + } + + if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx + offset += 2; + } else { + break; + } + } + + return offset - startOffset; + } + + // A port of poppler's IDCT method which in turn is taken from: + // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, + // "Practical Fast 1-D DCT Algorithms with 11 Multiplications", + // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, + // 988-991. + function quantizeAndInverse(component, blockBufferOffset, p) { + var qt = component.quantizationTable; + var v0, v1, v2, v3, v4, v5, v6, v7, t; + var i; + + // dequant + for (i = 0; i < 64; i++) { + p[i] = component.blockData[blockBufferOffset + i] * qt[i]; + } + + // inverse DCT on rows + for (i = 0; i < 8; ++i) { + var row = 8 * i; + + // check for all-zero AC coefficients + if (p[1 + row] === 0 && p[2 + row] === 0 && p[3 + row] === 0 && + p[4 + row] === 0 && p[5 + row] === 0 && p[6 + row] === 0 && + p[7 + row] === 0) { + t = (dctSqrt2 * p[0 + row] + 512) >> 10; + p[0 + row] = t; + p[1 + row] = t; + p[2 + row] = t; + p[3 + row] = t; + p[4 + row] = t; + p[5 + row] = t; + p[6 + row] = t; + p[7 + row] = t; + continue; + } + + // stage 4 + v0 = (dctSqrt2 * p[0 + row] + 128) >> 8; + v1 = (dctSqrt2 * p[4 + row] + 128) >> 8; + v2 = p[2 + row]; + v3 = p[6 + row]; + v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8; + v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8; + v5 = p[3 + row] << 4; + v6 = p[5 + row] << 4; + + // stage 3 + t = (v0 - v1 + 1) >> 1; + v0 = (v0 + v1 + 1) >> 1; + v1 = t; + t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8; + v3 = t; + t = (v4 - v6 + 1) >> 1; + v4 = (v4 + v6 + 1) >> 1; + v6 = t; + t = (v7 + v5 + 1) >> 1; + v5 = (v7 - v5 + 1) >> 1; + v7 = t; + + // stage 2 + t = (v0 - v3 + 1) >> 1; + v0 = (v0 + v3 + 1) >> 1; + v3 = t; + t = (v1 - v2 + 1) >> 1; + v1 = (v1 + v2 + 1) >> 1; + v2 = t; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p[0 + row] = v0 + v7; + p[7 + row] = v0 - v7; + p[1 + row] = v1 + v6; + p[6 + row] = v1 - v6; + p[2 + row] = v2 + v5; + p[5 + row] = v2 - v5; + p[3 + row] = v3 + v4; + p[4 + row] = v3 - v4; + } + + // inverse DCT on columns + for (i = 0; i < 8; ++i) { + var col = i; + + // check for all-zero AC coefficients + if (p[1 * 8 + col] === 0 && p[2 * 8 + col] === 0 && p[3 * 8 + col] === 0 && + p[4 * 8 + col] === 0 && p[5 * 8 + col] === 0 && p[6 * 8 + col] === 0 && + p[7 * 8 + col] === 0) { + t = (dctSqrt2 * p[i + 0] + 8192) >> 14; + p[0 * 8 + col] = t; + p[1 * 8 + col] = t; + p[2 * 8 + col] = t; + p[3 * 8 + col] = t; + p[4 * 8 + col] = t; + p[5 * 8 + col] = t; + p[6 * 8 + col] = t; + p[7 * 8 + col] = t; + continue; + } + + // stage 4 + v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12; + v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12; + v2 = p[2 * 8 + col]; + v3 = p[6 * 8 + col]; + v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12; + v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12; + v5 = p[3 * 8 + col]; + v6 = p[5 * 8 + col]; + + // stage 3 + t = (v0 - v1 + 1) >> 1; + v0 = (v0 + v1 + 1) >> 1; + v1 = t; + t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12; + v3 = t; + t = (v4 - v6 + 1) >> 1; + v4 = (v4 + v6 + 1) >> 1; + v6 = t; + t = (v7 + v5 + 1) >> 1; + v5 = (v7 - v5 + 1) >> 1; + v7 = t; + + // stage 2 + t = (v0 - v3 + 1) >> 1; + v0 = (v0 + v3 + 1) >> 1; + v3 = t; + t = (v1 - v2 + 1) >> 1; + v1 = (v1 + v2 + 1) >> 1; + v2 = t; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p[0 * 8 + col] = v0 + v7; + p[7 * 8 + col] = v0 - v7; + p[1 * 8 + col] = v1 + v6; + p[6 * 8 + col] = v1 - v6; + p[2 * 8 + col] = v2 + v5; + p[5 * 8 + col] = v2 - v5; + p[3 * 8 + col] = v3 + v4; + p[4 * 8 + col] = v3 - v4; + } + + // convert to 8-bit integers + for (i = 0; i < 64; ++i) { + var index = blockBufferOffset + i; + var q = p[i]; + q = (q <= -2056 / component.bitConversion) ? 0 : + (q >= 2024 / component.bitConversion) ? 255 / component.bitConversion : + (q + 2056 / component.bitConversion) >> 4; + component.blockData[index] = q; + } + } + + function buildComponentData(frame, component) { + var lines = []; + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var samplesPerLine = blocksPerLine << 3; + var computationBuffer = new Int32Array(64); + + var i, j, ll = 0; + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + var offset = getBlockBufferOffset(component, blockRow, blockCol); + quantizeAndInverse(component, offset, computationBuffer); + } + } + return component.blockData; + } + + function clampToUint8(a) { + return a <= 0 ? 0 : a >= 255 ? 255 : a | 0; + } + + constructor.prototype = { + load: function load(path) { + var handleData = (function (data) { + this.parse(data); + if (this.onload) + this.onload(); + }).bind(this); + + if (path.indexOf("data:") > -1) { + var offset = path.indexOf("base64,") + 7; + var data = atob(path.substring(offset)); + var arr = new Uint8Array(data.length); + for (var i = data.length - 1; i >= 0; i--) { + arr[i] = data.charCodeAt(i); + } + handleData(data); + } else { + var xhr = new XMLHttpRequest(); + xhr.open("GET", path, true); + xhr.responseType = "arraybuffer"; + xhr.onload = (function () { + // TODO catch parse error + var data = new Uint8Array(xhr.response); + handleData(data); + }).bind(this); + xhr.send(null); + } + }, + parse: function parse(data) { + + function readUint16() { + var value = (data[offset] << 8) | data[offset + 1]; + offset += 2; + return value; + } + + function readDataBlock() { + var length = readUint16(); + var array = data.subarray(offset, offset + length - 2); + offset += array.length; + return array; + } + + function prepareComponents(frame) { + var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); + var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); + for (var i = 0; i < frame.components.length; i++) { + component = frame.components[i]; + var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); + var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); + var blocksPerLineForMcu = mcusPerLine * component.h; + var blocksPerColumnForMcu = mcusPerColumn * component.v; + + var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); + component.blockData = new Int16Array(blocksBufferSize); + component.blocksPerLine = blocksPerLine; + component.blocksPerColumn = blocksPerColumn; + } + frame.mcusPerLine = mcusPerLine; + frame.mcusPerColumn = mcusPerColumn; + } + + var offset = 0, length = data.length; + var jfif = null; + var adobe = null; + var pixels = null; + var frame, resetInterval; + var quantizationTables = []; + var huffmanTablesAC = [], huffmanTablesDC = []; + var fileMarker = readUint16(); + if (fileMarker != 0xFFD8) { // SOI (Start of Image) + throw "SOI not found"; + } + + fileMarker = readUint16(); + while (fileMarker != 0xFFD9) { // EOI (End of image) + var i, j, l; + switch (fileMarker) { + case 0xFFE0: // APP0 (Application Specific) + case 0xFFE1: // APP1 + case 0xFFE2: // APP2 + case 0xFFE3: // APP3 + case 0xFFE4: // APP4 + case 0xFFE5: // APP5 + case 0xFFE6: // APP6 + case 0xFFE7: // APP7 + case 0xFFE8: // APP8 + case 0xFFE9: // APP9 + case 0xFFEA: // APP10 + case 0xFFEB: // APP11 + case 0xFFEC: // APP12 + case 0xFFED: // APP13 + case 0xFFEE: // APP14 + case 0xFFEF: // APP15 + case 0xFFFE: // COM (Comment) + var appData = readDataBlock(); + + if (fileMarker === 0xFFE0) { + if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 && + appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\x00' + jfif = { + version: {major: appData[5], minor: appData[6]}, + densityUnits: appData[7], + xDensity: (appData[8] << 8) | appData[9], + yDensity: (appData[10] << 8) | appData[11], + thumbWidth: appData[12], + thumbHeight: appData[13], + thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) + }; + } + } + // TODO APP1 - Exif + if (fileMarker === 0xFFEE) { + if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F && + appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\x00' + adobe = { + version: appData[6], + flags0: (appData[7] << 8) | appData[8], + flags1: (appData[9] << 8) | appData[10], + transformCode: appData[11] + }; + } + } + break; + + case 0xFFDB: // DQT (Define Quantization Tables) + var quantizationTablesLength = readUint16(); + var quantizationTablesEnd = quantizationTablesLength + offset - 2; + while (offset < quantizationTablesEnd) { + var quantizationTableSpec = data[offset++]; + var tableData = new Int32Array(64); + if ((quantizationTableSpec >> 4) === 0) { // 8 bit values + for (j = 0; j < 64; j++) { + var z = dctZigZag[j]; + tableData[z] = data[offset++]; + } + } else if ((quantizationTableSpec >> 4) === 1) { //16 bit + for (j = 0; j < 64; j++) { + var zz = dctZigZag[j]; + tableData[zz] = readUint16(); + } + } else + throw "DQT: invalid table spec"; + quantizationTables[quantizationTableSpec & 15] = tableData; + } + break; + + case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT) + case 0xFFC1: // SOF1 (Start of Frame, Extended DCT) + case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT) + if (frame) { + throw "Only single frame JPEGs supported"; + } + readUint16(); // skip data length + frame = {}; + frame.extended = (fileMarker === 0xFFC1); + frame.progressive = (fileMarker === 0xFFC2); + frame.precision = data[offset++]; + frame.scanLines = readUint16(); + frame.samplesPerLine = readUint16(); + frame.components = []; + frame.componentIds = {}; + var componentsCount = data[offset++], componentId; + var maxH = 0, maxV = 0; + for (i = 0; i < componentsCount; i++) { + componentId = data[offset]; + var h = data[offset + 1] >> 4; + var v = data[offset + 1] & 15; + if (maxH < h) + maxH = h; + if (maxV < v) + maxV = v; + var qId = data[offset + 2]; + l = frame.components.push({ + h: h, + v: v, + quantizationTable: quantizationTables[qId], + quantizationTableId: qId, + bitConversion: 255 / ((1 << frame.precision) - 1) + }); + frame.componentIds[componentId] = l - 1; + offset += 3; + } + frame.maxH = maxH; + frame.maxV = maxV; + prepareComponents(frame); + break; + + case 0xFFC4: // DHT (Define Huffman Tables) + var huffmanLength = readUint16(); + for (i = 2; i < huffmanLength; ) { + var huffmanTableSpec = data[offset++]; + var codeLengths = new Uint8Array(16); + var codeLengthSum = 0; + for (j = 0; j < 16; j++, offset++) + codeLengthSum += (codeLengths[j] = data[offset]); + var huffmanValues = new Uint8Array(codeLengthSum); + for (j = 0; j < codeLengthSum; j++, offset++) + huffmanValues[j] = data[offset]; + i += 17 + codeLengthSum; + + ((huffmanTableSpec >> 4) === 0 ? + huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = + buildHuffmanTable(codeLengths, huffmanValues); + } + break; + + case 0xFFDD: // DRI (Define Restart Interval) + readUint16(); // skip data length + resetInterval = readUint16(); + break; + + case 0xFFDA: // SOS (Start of Scan) + var scanLength = readUint16(); + var selectorsCount = data[offset++]; + var components = [], component; + for (i = 0; i < selectorsCount; i++) { + var componentIndex = frame.componentIds[data[offset++]]; + component = frame.components[componentIndex]; + var tableSpec = data[offset++]; + component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; + component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; + components.push(component); + } + var spectralStart = data[offset++]; + var spectralEnd = data[offset++]; + var successiveApproximation = data[offset++]; + var processed = decodeScan(data, offset, + frame, components, resetInterval, + spectralStart, spectralEnd, + successiveApproximation >> 4, successiveApproximation & 15); + offset += processed; + break; + default: + if (data[offset - 3] == 0xFF && + data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) { + // could be incorrect encoding -- last 0xFF byte of the previous + // block was eaten by the encoder + offset -= 3; + break; + } + throw "unknown JPEG marker " + fileMarker.toString(16); + } + fileMarker = readUint16(); + } + + this.width = frame.samplesPerLine; + this.height = frame.scanLines; + this.jfif = jfif; + this.adobe = adobe; + this.components = []; + switch (frame.components.length) + { + case 1: + this.colorspace = ColorSpace.Grayscale; + break; + case 3: + if (this.adobe) + this.colorspace = ColorSpace.AdobeRGB; + else + this.colorspace = ColorSpace.RGB; + break; + case 4: + this.colorspace = ColorSpace.CYMK; + break; + default: + this.colorspace = ColorSpace.Unknown; + } + for (var i = 0; i < frame.components.length; i++) { + var component = frame.components[i]; + if (!component.quantizationTable && component.quantizationTableId !== null) + component.quantizationTable = quantizationTables[component.quantizationTableId]; + this.components.push({ + output: buildComponentData(frame, component), + scaleX: component.h / frame.maxH, + scaleY: component.v / frame.maxV, + blocksPerLine: component.blocksPerLine, + blocksPerColumn: component.blocksPerColumn, + bitConversion: component.bitConversion + }); + } + }, + getData16: function getData16(width, height) { + if (this.components.length !== 1) + throw 'Unsupported color mode'; + var scaleX = this.width / width, scaleY = this.height / height; + + var component, componentScaleX, componentScaleY; + var x, y, i; + var offset = 0; + var numComponents = this.components.length; + var dataLength = width * height * numComponents; + var data = new Uint16Array(dataLength); + var componentLine; + + // lineData is reused for all components. Assume first component is + // the biggest + var lineData = new Uint16Array((this.components[0].blocksPerLine << 3) * + this.components[0].blocksPerColumn * 8); + + // First construct image data ... + for (i = 0; i < numComponents; i++) { + component = this.components[i]; + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var samplesPerLine = blocksPerLine << 3; + + var j, k, ll = 0; + var lineOffset = 0; + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + var scanLine = blockRow << 3; + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol); + var offset = 0, sample = blockCol << 3; + for (j = 0; j < 8; j++) { + var lineOffset = (scanLine + j) * samplesPerLine; + for (k = 0; k < 8; k++) { + lineData[lineOffset + sample + k] = + component.output[bufferOffset + offset++]; + } + } + } + } + + componentScaleX = component.scaleX * scaleX; + componentScaleY = component.scaleY * scaleY; + offset = i; + + var cx, cy; + var index; + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + cy = 0 | (y * componentScaleY); + cx = 0 | (x * componentScaleX); + index = cy * samplesPerLine + cx; + data[offset] = lineData[index]; + offset += numComponents; + } + } + } + return data; + }, + getData: function getData(width, height) { + var scaleX = this.width / width, scaleY = this.height / height; + + var component, componentScaleX, componentScaleY; + var x, y, i; + var offset = 0; + var Y, Cb, Cr, K, C, M, Ye, R, G, B; + var colorTransform; + var numComponents = this.components.length; + var dataLength = width * height * numComponents; + var data = new Uint8Array(dataLength); + var componentLine; + + // lineData is reused for all components. Assume first component is + // the biggest + var lineData = new Uint8Array((this.components[0].blocksPerLine << 3) * + this.components[0].blocksPerColumn * 8); + + // First construct image data ... + for (i = 0; i < numComponents; i++) { + component = this.components[i]; + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var samplesPerLine = blocksPerLine << 3; + + var j, k, ll = 0; + var lineOffset = 0; + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + var scanLine = blockRow << 3; + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol); + var offset = 0, sample = blockCol << 3; + for (j = 0; j < 8; j++) { + var lineOffset = (scanLine + j) * samplesPerLine; + for (k = 0; k < 8; k++) { + lineData[lineOffset + sample + k] = + component.output[bufferOffset + offset++] * component.bitConversion; + } + } + } + } + + componentScaleX = component.scaleX * scaleX; + componentScaleY = component.scaleY * scaleY; + offset = i; + + var cx, cy; + var index; + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + cy = 0 | (y * componentScaleY); + cx = 0 | (x * componentScaleX); + index = cy * samplesPerLine + cx; + data[offset] = lineData[index]; + offset += numComponents; + } + } + } + + // ... then transform colors, if necessary + switch (numComponents) { + case 1: + case 2: + break; + // no color conversion for one or two compoenents + + case 3: + // The default transform for three components is true + colorTransform = true; + // The adobe transform marker overrides any previous setting + if (this.adobe && this.adobe.transformCode) + colorTransform = true; + else if (typeof this.colorTransform !== 'undefined') + colorTransform = !!this.colorTransform; + + if (colorTransform) { + for (i = 0; i < dataLength; i += numComponents) { + Y = data[i ]; + Cb = data[i + 1]; + Cr = data[i + 2]; + + R = clampToUint8(Y - 179.456 + 1.402 * Cr); + G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr); + B = clampToUint8(Y - 226.816 + 1.772 * Cb); + + data[i ] = R; + data[i + 1] = G; + data[i + 2] = B; + } + } + break; + case 4: + if (!this.adobe) + throw 'Unsupported color mode (4 components)'; + // The default transform for four components is false + colorTransform = false; + // The adobe transform marker overrides any previous setting + if (this.adobe && this.adobe.transformCode) + colorTransform = true; + else if (typeof this.colorTransform !== 'undefined') + colorTransform = !!this.colorTransform; + + if (colorTransform) { + for (i = 0; i < dataLength; i += numComponents) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + + C = clampToUint8(434.456 - Y - 1.402 * Cr); + M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr); + Y = clampToUint8(481.816 - Y - 1.772 * Cb); + + data[i ] = C; + data[i + 1] = M; + data[i + 2] = Y; + // K is unchanged + } + } + break; + default: + throw 'Unsupported color mode'; + } + return data; + } + }; + + return constructor; +})(); + +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = JpegImage; +} + +/***/ }), + +/***/ "./external/scripts/jpx.js": +/*!*********************************!*\ + !*** ./external/scripts/jpx.js ***! + \*********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! image-JPEG2000 - v0.3.1 - 2015-08-26 | https://github.com/OHIF/image-JPEG2000 */ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* globals ArithmeticDecoder, globalScope, log2, readUint16, readUint32, + info, warn */ + + + +var JpxImage = (function JpxImageClosure() { + // Table E.1 + var SubbandsGainLog2 = { + 'LL': 0, + 'LH': 1, + 'HL': 1, + 'HH': 2 + }; + function JpxImage() { + this.failOnCorruptedImage = false; + } + JpxImage.prototype = { + parse: function JpxImage_parse(data) { + + var head = readUint16(data, 0); + // No box header, immediate start of codestream (SOC) + if (head === 0xFF4F) { + this.parseCodestream(data, 0, data.length); + return; + } + + var position = 0, length = data.length; + while (position < length) { + var headerSize = 8; + var lbox = readUint32(data, position); + var tbox = readUint32(data, position + 4); + position += headerSize; + if (lbox === 1) { + // XLBox: read UInt64 according to spec. + // JavaScript's int precision of 53 bit should be sufficient here. + lbox = readUint32(data, position) * 4294967296 + + readUint32(data, position + 4); + position += 8; + headerSize += 8; + } + if (lbox === 0) { + lbox = length - position + headerSize; + } + if (lbox < headerSize) { + throw new Error('JPX Error: Invalid box field size'); + } + var dataLength = lbox - headerSize; + var jumpDataLength = true; + switch (tbox) { + case 0x6A703268: // 'jp2h' + jumpDataLength = false; // parsing child boxes + break; + case 0x636F6C72: // 'colr' + // Colorspaces are not used, the CS from the PDF is used. + var method = data[position]; + var precedence = data[position + 1]; + var approximation = data[position + 2]; + if (method === 1) { + // enumerated colorspace + var colorspace = readUint32(data, position + 3); + switch (colorspace) { + case 16: // this indicates a sRGB colorspace + case 17: // this indicates a grayscale colorspace + case 18: // this indicates a YUV colorspace + break; + default: + warn('Unknown colorspace ' + colorspace); + break; + } + } else if (method === 2) { + info('ICC profile not supported'); + } + break; + case 0x6A703263: // 'jp2c' + this.parseCodestream(data, position, position + dataLength); + break; + case 0x6A502020: // 'jP\024\024' + if (0x0d0a870a !== readUint32(data, position)) { + warn('Invalid JP2 signature'); + } + break; + // The following header types are valid but currently not used: + case 0x6A501A1A: // 'jP\032\032' + case 0x66747970: // 'ftyp' + case 0x72726571: // 'rreq' + case 0x72657320: // 'res ' + case 0x69686472: // 'ihdr' + break; + default: + var headerType = String.fromCharCode((tbox >> 24) & 0xFF, + (tbox >> 16) & 0xFF, + (tbox >> 8) & 0xFF, + tbox & 0xFF); + warn('Unsupported header type ' + tbox + ' (' + headerType + ')'); + break; + } + if (jumpDataLength) { + position += dataLength; + } + } + }, + parseImageProperties: function JpxImage_parseImageProperties(stream) { + var newByte = stream.getByte(); + while (newByte >= 0) { + var oldByte = newByte; + newByte = stream.getByte(); + var code = (oldByte << 8) | newByte; + // Image and tile size (SIZ) + if (code === 0xFF51) { + stream.skip(4); + var Xsiz = stream.getInt32() >>> 0; // Byte 4 + var Ysiz = stream.getInt32() >>> 0; // Byte 8 + var XOsiz = stream.getInt32() >>> 0; // Byte 12 + var YOsiz = stream.getInt32() >>> 0; // Byte 16 + stream.skip(16); + var Csiz = stream.getUint16(); // Byte 36 + this.width = Xsiz - XOsiz; + this.height = Ysiz - YOsiz; + this.componentsCount = Csiz; + // Results are always returned as Uint8Arrays + this.bitsPerComponent = 8; + return; + } + } + throw new Error('JPX Error: No size marker found in JPX stream'); + }, + parseCodestream: function JpxImage_parseCodestream(data, start, end) { + var context = {}; + try { + var doNotRecover = false; + var position = start; + while (position + 1 < end) { + var code = readUint16(data, position); + position += 2; + + var length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile; + switch (code) { + case 0xFF4F: // Start of codestream (SOC) + context.mainHeader = true; + break; + case 0xFFD9: // End of codestream (EOC) + break; + case 0xFF51: // Image and tile size (SIZ) + length = readUint16(data, position); + var siz = {}; + siz.Xsiz = readUint32(data, position + 4); + siz.Ysiz = readUint32(data, position + 8); + siz.XOsiz = readUint32(data, position + 12); + siz.YOsiz = readUint32(data, position + 16); + siz.XTsiz = readUint32(data, position + 20); + siz.YTsiz = readUint32(data, position + 24); + siz.XTOsiz = readUint32(data, position + 28); + siz.YTOsiz = readUint32(data, position + 32); + var componentsCount = readUint16(data, position + 36); + siz.Csiz = componentsCount; + var components = []; + j = position + 38; + for (var i = 0; i < componentsCount; i++) { + var component = { + precision: (data[j] & 0x7F) + 1, + isSigned: !!(data[j] & 0x80), + XRsiz: data[j + 1], + YRsiz: data[j + 1] + }; + calculateComponentDimensions(component, siz); + components.push(component); + } + context.SIZ = siz; + context.components = components; + calculateTileGrids(context, components); + context.QCC = []; + context.COC = []; + break; + case 0xFF5C: // Quantization default (QCD) + length = readUint16(data, position); + var qcd = {}; + j = position + 2; + sqcd = data[j++]; + switch (sqcd & 0x1F) { + case 0: + spqcdSize = 8; + scalarExpounded = true; + break; + case 1: + spqcdSize = 16; + scalarExpounded = false; + break; + case 2: + spqcdSize = 16; + scalarExpounded = true; + break; + default: + throw new Error('JPX Error: Invalid SQcd value ' + sqcd); + } + qcd.noQuantization = (spqcdSize === 8); + qcd.scalarExpounded = scalarExpounded; + qcd.guardBits = sqcd >> 5; + spqcds = []; + while (j < length + position) { + var spqcd = {}; + if (spqcdSize === 8) { + spqcd.epsilon = data[j++] >> 3; + spqcd.mu = 0; + } else { + spqcd.epsilon = data[j] >> 3; + spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1]; + j += 2; + } + spqcds.push(spqcd); + } + qcd.SPqcds = spqcds; + if (context.mainHeader) { + context.QCD = qcd; + } else { + context.currentTile.QCD = qcd; + context.currentTile.QCC = []; + } + break; + case 0xFF5D: // Quantization component (QCC) + length = readUint16(data, position); + var qcc = {}; + j = position + 2; + var cqcc; + if (context.SIZ.Csiz < 257) { + cqcc = data[j++]; + } else { + cqcc = readUint16(data, j); + j += 2; + } + sqcd = data[j++]; + switch (sqcd & 0x1F) { + case 0: + spqcdSize = 8; + scalarExpounded = true; + break; + case 1: + spqcdSize = 16; + scalarExpounded = false; + break; + case 2: + spqcdSize = 16; + scalarExpounded = true; + break; + default: + throw new Error('JPX Error: Invalid SQcd value ' + sqcd); + } + qcc.noQuantization = (spqcdSize === 8); + qcc.scalarExpounded = scalarExpounded; + qcc.guardBits = sqcd >> 5; + spqcds = []; + while (j < (length + position)) { + spqcd = {}; + if (spqcdSize === 8) { + spqcd.epsilon = data[j++] >> 3; + spqcd.mu = 0; + } else { + spqcd.epsilon = data[j] >> 3; + spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1]; + j += 2; + } + spqcds.push(spqcd); + } + qcc.SPqcds = spqcds; + if (context.mainHeader) { + context.QCC[cqcc] = qcc; + } else { + context.currentTile.QCC[cqcc] = qcc; + } + break; + case 0xFF52: // Coding style default (COD) + length = readUint16(data, position); + var cod = {}; + j = position + 2; + var scod = data[j++]; + cod.entropyCoderWithCustomPrecincts = !!(scod & 1); + cod.sopMarkerUsed = !!(scod & 2); + cod.ephMarkerUsed = !!(scod & 4); + cod.progressionOrder = data[j++]; + cod.layersCount = readUint16(data, j); + j += 2; + cod.multipleComponentTransform = data[j++]; + + cod.decompositionLevelsCount = data[j++]; + cod.xcb = (data[j++] & 0xF) + 2; + cod.ycb = (data[j++] & 0xF) + 2; + var blockStyle = data[j++]; + cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); + cod.resetContextProbabilities = !!(blockStyle & 2); + cod.terminationOnEachCodingPass = !!(blockStyle & 4); + cod.verticalyStripe = !!(blockStyle & 8); + cod.predictableTermination = !!(blockStyle & 16); + cod.segmentationSymbolUsed = !!(blockStyle & 32); + cod.reversibleTransformation = data[j++]; + if (cod.entropyCoderWithCustomPrecincts) { + var precinctsSizes = []; + while (j < length + position) { + var precinctsSize = data[j++]; + precinctsSizes.push({ + PPx: precinctsSize & 0xF, + PPy: precinctsSize >> 4 + }); + } + cod.precinctsSizes = precinctsSizes; + } + var unsupported = []; + if (cod.selectiveArithmeticCodingBypass) { + unsupported.push('selectiveArithmeticCodingBypass'); + } + if (cod.resetContextProbabilities) { + unsupported.push('resetContextProbabilities'); + } + if (cod.terminationOnEachCodingPass) { + unsupported.push('terminationOnEachCodingPass'); + } + if (cod.verticalyStripe) { + unsupported.push('verticalyStripe'); + } + if (cod.predictableTermination) { + unsupported.push('predictableTermination'); + } + if (unsupported.length > 0) { + doNotRecover = true; + throw new Error('JPX Error: Unsupported COD options (' + + unsupported.join(', ') + ')'); + } + if (context.mainHeader) { + context.COD = cod; + } else { + context.currentTile.COD = cod; + context.currentTile.COC = []; + } + break; + case 0xFF90: // Start of tile-part (SOT) + length = readUint16(data, position); + tile = {}; + tile.index = readUint16(data, position + 2); + tile.length = readUint32(data, position + 4); + tile.dataEnd = tile.length + position - 2; + tile.partIndex = data[position + 8]; + tile.partsCount = data[position + 9]; + + context.mainHeader = false; + if (tile.partIndex === 0) { + // reset component specific settings + tile.COD = context.COD; + tile.COC = context.COC.slice(0); // clone of the global COC + tile.QCD = context.QCD; + tile.QCC = context.QCC.slice(0); // clone of the global COC + } + context.currentTile = tile; + break; + case 0xFF93: // Start of data (SOD) + tile = context.currentTile; + if (tile.partIndex === 0) { + initializeTile(context, tile.index); + buildPackets(context); + } + + // moving to the end of the data + length = tile.dataEnd - position; + parseTilePackets(context, data, position, length); + break; + case 0xFF55: // Tile-part lengths, main header (TLM) + case 0xFF57: // Packet length, main header (PLM) + case 0xFF58: // Packet length, tile-part header (PLT) + case 0xFF64: // Comment (COM) + length = readUint16(data, position); + // skipping content + break; + case 0xFF53: // Coding style component (COC) + throw new Error('JPX Error: Codestream code 0xFF53 (COC) is ' + + 'not implemented'); + default: + throw new Error('JPX Error: Unknown codestream code: ' + + code.toString(16)); + } + position += length; + } + } catch (e) { + if (doNotRecover || this.failOnCorruptedImage) { + throw e; + } else { + warn('Trying to recover from ' + e.message); + } + } + this.tiles = transformComponents(context); + this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; + this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; + this.componentsCount = context.SIZ.Csiz; + } + }; + function calculateComponentDimensions(component, siz) { + // Section B.2 Component mapping + component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); + component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); + component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); + component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); + component.width = component.x1 - component.x0; + component.height = component.y1 - component.y0; + } + function calculateTileGrids(context, components) { + var siz = context.SIZ; + // Section B.3 Division into tile and tile-components + var tile, tiles = []; + var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); + var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); + for (var q = 0; q < numYtiles; q++) { + for (var p = 0; p < numXtiles; p++) { + tile = {}; + tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); + tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); + tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); + tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); + tile.width = tile.tx1 - tile.tx0; + tile.height = tile.ty1 - tile.ty0; + tile.components = []; + tiles.push(tile); + } + } + context.tiles = tiles; + + var componentsCount = siz.Csiz; + for (var i = 0, ii = componentsCount; i < ii; i++) { + var component = components[i]; + for (var j = 0, jj = tiles.length; j < jj; j++) { + var tileComponent = {}; + tile = tiles[j]; + tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); + tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); + tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); + tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); + tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; + tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; + tile.components[i] = tileComponent; + } + } + } + function getBlocksDimensions(context, component, r) { + var codOrCoc = component.codingStyleParameters; + var result = {}; + if (!codOrCoc.entropyCoderWithCustomPrecincts) { + result.PPx = 15; + result.PPy = 15; + } else { + result.PPx = codOrCoc.precinctsSizes[r].PPx; + result.PPy = codOrCoc.precinctsSizes[r].PPy; + } + // calculate codeblock size as described in section B.7 + result.xcb_ = (r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : + Math.min(codOrCoc.xcb, result.PPx)); + result.ycb_ = (r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : + Math.min(codOrCoc.ycb, result.PPy)); + return result; + } + function buildPrecincts(context, resolution, dimensions) { + // Section B.6 Division resolution to precincts + var precinctWidth = 1 << dimensions.PPx; + var precinctHeight = 1 << dimensions.PPy; + // Jasper introduces codeblock groups for mapping each subband codeblocks + // to precincts. Precinct partition divides a resolution according to width + // and height parameters. The subband that belongs to the resolution level + // has a different size than the level, unless it is the zero resolution. + + // From Jasper documentation: jpeg2000.pdf, section K: Tier-2 coding: + // The precinct partitioning for a particular subband is derived from a + // partitioning of its parent LL band (i.e., the LL band at the next higher + // resolution level)... The LL band associated with each resolution level is + // divided into precincts... Each of the resulting precinct regions is then + // mapped into its child subbands (if any) at the next lower resolution + // level. This is accomplished by using the coordinate transformation + // (u, v) = (ceil(x/2), ceil(y/2)) where (x, y) and (u, v) are the + // coordinates of a point in the LL band and child subband, respectively. + var isZeroRes = resolution.resLevel === 0; + var precinctWidthInSubband = 1 << (dimensions.PPx + (isZeroRes ? 0 : -1)); + var precinctHeightInSubband = 1 << (dimensions.PPy + (isZeroRes ? 0 : -1)); + var numprecinctswide = (resolution.trx1 > resolution.trx0 ? + Math.ceil(resolution.trx1 / precinctWidth) - + Math.floor(resolution.trx0 / precinctWidth) : 0); + var numprecinctshigh = (resolution.try1 > resolution.try0 ? + Math.ceil(resolution.try1 / precinctHeight) - + Math.floor(resolution.try0 / precinctHeight) : 0); + var numprecincts = numprecinctswide * numprecinctshigh; + + resolution.precinctParameters = { + precinctWidth: precinctWidth, + precinctHeight: precinctHeight, + numprecinctswide: numprecinctswide, + numprecinctshigh: numprecinctshigh, + numprecincts: numprecincts, + precinctWidthInSubband: precinctWidthInSubband, + precinctHeightInSubband: precinctHeightInSubband + }; + } + function buildCodeblocks(context, subband, dimensions) { + // Section B.7 Division sub-band into code-blocks + var xcb_ = dimensions.xcb_; + var ycb_ = dimensions.ycb_; + var codeblockWidth = 1 << xcb_; + var codeblockHeight = 1 << ycb_; + var cbx0 = subband.tbx0 >> xcb_; + var cby0 = subband.tby0 >> ycb_; + var cbx1 = (subband.tbx1 + codeblockWidth - 1) >> xcb_; + var cby1 = (subband.tby1 + codeblockHeight - 1) >> ycb_; + var precinctParameters = subband.resolution.precinctParameters; + var codeblocks = []; + var precincts = []; + var i, j, codeblock, precinctNumber; + for (j = cby0; j < cby1; j++) { + for (i = cbx0; i < cbx1; i++) { + codeblock = { + cbx: i, + cby: j, + tbx0: codeblockWidth * i, + tby0: codeblockHeight * j, + tbx1: codeblockWidth * (i + 1), + tby1: codeblockHeight * (j + 1) + }; + + codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); + codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); + codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); + codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); + + // Calculate precinct number for this codeblock, codeblock position + // should be relative to its subband, use actual dimension and position + // See comment about codeblock group width and height + var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / + precinctParameters.precinctWidthInSubband); + var pj = Math.floor((codeblock.tby0_ - subband.tby0) / + precinctParameters.precinctHeightInSubband); + precinctNumber = pi + (pj * precinctParameters.numprecinctswide); + + codeblock.precinctNumber = precinctNumber; + codeblock.subbandType = subband.type; + codeblock.Lblock = 3; + + if (codeblock.tbx1_ <= codeblock.tbx0_ || + codeblock.tby1_ <= codeblock.tby0_) { + continue; + } + codeblocks.push(codeblock); + // building precinct for the sub-band + var precinct = precincts[precinctNumber]; + if (precinct !== undefined) { + if (i < precinct.cbxMin) { + precinct.cbxMin = i; + } else if (i > precinct.cbxMax) { + precinct.cbxMax = i; + } + if (j < precinct.cbyMin) { + precinct.cbxMin = j; + } else if (j > precinct.cbyMax) { + precinct.cbyMax = j; + } + } else { + precincts[precinctNumber] = precinct = { + cbxMin: i, + cbyMin: j, + cbxMax: i, + cbyMax: j + }; + } + codeblock.precinct = precinct; + } + } + subband.codeblockParameters = { + codeblockWidth: xcb_, + codeblockHeight: ycb_, + numcodeblockwide: cbx1 - cbx0 + 1, + numcodeblockhigh: cby1 - cby0 + 1 + }; + subband.codeblocks = codeblocks; + subband.precincts = precincts; + } + function createPacket(resolution, precinctNumber, layerNumber) { + var precinctCodeblocks = []; + // Section B.10.8 Order of info in packet + var subbands = resolution.subbands; + // sub-bands already ordered in 'LL', 'HL', 'LH', and 'HH' sequence + for (var i = 0, ii = subbands.length; i < ii; i++) { + var subband = subbands[i]; + var codeblocks = subband.codeblocks; + for (var j = 0, jj = codeblocks.length; j < jj; j++) { + var codeblock = codeblocks[j]; + if (codeblock.precinctNumber !== precinctNumber) { + continue; + } + precinctCodeblocks.push(codeblock); + } + } + return { + layerNumber: layerNumber, + codeblocks: precinctCodeblocks + }; + } + function LayerResolutionComponentPositionIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var maxDecompositionLevelsCount = 0; + for (var q = 0; q < componentsCount; q++) { + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, + tile.components[q].codingStyleParameters.decompositionLevelsCount); + } + + var l = 0, r = 0, i = 0, k = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.1 Layer-resolution-component-position + for (; l < layersCount; l++) { + for (; r <= maxDecompositionLevelsCount; r++) { + for (; i < componentsCount; i++) { + var component = tile.components[i]; + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + + var resolution = component.resolutions[r]; + var numprecincts = resolution.precinctParameters.numprecincts; + for (; k < numprecincts;) { + var packet = createPacket(resolution, k, l); + k++; + return packet; + } + k = 0; + } + i = 0; + } + r = 0; + } + }; + } + function ResolutionLayerComponentPositionIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var maxDecompositionLevelsCount = 0; + for (var q = 0; q < componentsCount; q++) { + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, + tile.components[q].codingStyleParameters.decompositionLevelsCount); + } + + var r = 0, l = 0, i = 0, k = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.2 Resolution-layer-component-position + for (; r <= maxDecompositionLevelsCount; r++) { + for (; l < layersCount; l++) { + for (; i < componentsCount; i++) { + var component = tile.components[i]; + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + + var resolution = component.resolutions[r]; + var numprecincts = resolution.precinctParameters.numprecincts; + for (; k < numprecincts;) { + var packet = createPacket(resolution, k, l); + k++; + return packet; + } + k = 0; + } + i = 0; + } + l = 0; + } + }; + } + function ResolutionPositionComponentLayerIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var l, r, c, p; + var maxDecompositionLevelsCount = 0; + for (c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, + component.codingStyleParameters.decompositionLevelsCount); + } + var maxNumPrecinctsInLevel = new Int32Array( + maxDecompositionLevelsCount + 1); + for (r = 0; r <= maxDecompositionLevelsCount; ++r) { + var maxNumPrecincts = 0; + for (c = 0; c < componentsCount; ++c) { + var resolutions = tile.components[c].resolutions; + if (r < resolutions.length) { + maxNumPrecincts = Math.max(maxNumPrecincts, + resolutions[r].precinctParameters.numprecincts); + } + } + maxNumPrecinctsInLevel[r] = maxNumPrecincts; + } + l = 0; + r = 0; + c = 0; + p = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.3 Resolution-position-component-layer + for (; r <= maxDecompositionLevelsCount; r++) { + for (; p < maxNumPrecinctsInLevel[r]; p++) { + for (; c < componentsCount; c++) { + var component = tile.components[c]; + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + var resolution = component.resolutions[r]; + var numprecincts = resolution.precinctParameters.numprecincts; + if (p >= numprecincts) { + continue; + } + for (; l < layersCount;) { + var packet = createPacket(resolution, p, l); + l++; + return packet; + } + l = 0; + } + c = 0; + } + p = 0; + } + }; + } + function PositionComponentResolutionLayerIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var precinctsSizes = getPrecinctSizesInImageScale(tile); + var precinctsIterationSizes = precinctsSizes; + var l = 0, r = 0, c = 0, px = 0, py = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.4 Position-component-resolution-layer + for (; py < precinctsIterationSizes.maxNumHigh; py++) { + for (; px < precinctsIterationSizes.maxNumWide; px++) { + for (; c < componentsCount; c++) { + var component = tile.components[c]; + var decompositionLevelsCount = + component.codingStyleParameters.decompositionLevelsCount; + for (; r <= decompositionLevelsCount; r++) { + var resolution = component.resolutions[r]; + var sizeInImageScale = + precinctsSizes.components[c].resolutions[r]; + var k = getPrecinctIndexIfExist( + px, + py, + sizeInImageScale, + precinctsIterationSizes, + resolution); + if (k === null) { + continue; + } + for (; l < layersCount;) { + var packet = createPacket(resolution, k, l); + l++; + return packet; + } + l = 0; + } + r = 0; + } + c = 0; + } + px = 0; + } + }; + } + function ComponentPositionResolutionLayerIterator(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var layersCount = tile.codingStyleDefaultParameters.layersCount; + var componentsCount = siz.Csiz; + var precinctsSizes = getPrecinctSizesInImageScale(tile); + var l = 0, r = 0, c = 0, px = 0, py = 0; + + this.nextPacket = function JpxImage_nextPacket() { + // Section B.12.1.5 Component-position-resolution-layer + for (; c < componentsCount; ++c) { + var component = tile.components[c]; + var precinctsIterationSizes = precinctsSizes.components[c]; + var decompositionLevelsCount = + component.codingStyleParameters.decompositionLevelsCount; + for (; py < precinctsIterationSizes.maxNumHigh; py++) { + for (; px < precinctsIterationSizes.maxNumWide; px++) { + for (; r <= decompositionLevelsCount; r++) { + var resolution = component.resolutions[r]; + var sizeInImageScale = precinctsIterationSizes.resolutions[r]; + var k = getPrecinctIndexIfExist( + px, + py, + sizeInImageScale, + precinctsIterationSizes, + resolution); + if (k === null) { + continue; + } + for (; l < layersCount;) { + var packet = createPacket(resolution, k, l); + l++; + return packet; + } + l = 0; + } + r = 0; + } + px = 0; + } + py = 0; + } + }; + } + function getPrecinctIndexIfExist( + pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { + var posX = pxIndex * precinctIterationSizes.minWidth; + var posY = pyIndex * precinctIterationSizes.minHeight; + if (posX % sizeInImageScale.width !== 0 || + posY % sizeInImageScale.height !== 0) { + return null; + } + var startPrecinctRowIndex = + (posY / sizeInImageScale.width) * + resolution.precinctParameters.numprecinctswide; + return (posX / sizeInImageScale.height) + startPrecinctRowIndex; + } + function getPrecinctSizesInImageScale(tile) { + var componentsCount = tile.components.length; + var minWidth = Number.MAX_VALUE; + var minHeight = Number.MAX_VALUE; + var maxNumWide = 0; + var maxNumHigh = 0; + var sizePerComponent = new Array(componentsCount); + for (var c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + var decompositionLevelsCount = + component.codingStyleParameters.decompositionLevelsCount; + var sizePerResolution = new Array(decompositionLevelsCount + 1); + var minWidthCurrentComponent = Number.MAX_VALUE; + var minHeightCurrentComponent = Number.MAX_VALUE; + var maxNumWideCurrentComponent = 0; + var maxNumHighCurrentComponent = 0; + var scale = 1; + for (var r = decompositionLevelsCount; r >= 0; --r) { + var resolution = component.resolutions[r]; + var widthCurrentResolution = + scale * resolution.precinctParameters.precinctWidth; + var heightCurrentResolution = + scale * resolution.precinctParameters.precinctHeight; + minWidthCurrentComponent = Math.min( + minWidthCurrentComponent, + widthCurrentResolution); + minHeightCurrentComponent = Math.min( + minHeightCurrentComponent, + heightCurrentResolution); + maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, + resolution.precinctParameters.numprecinctswide); + maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, + resolution.precinctParameters.numprecinctshigh); + sizePerResolution[r] = { + width: widthCurrentResolution, + height: heightCurrentResolution + }; + scale <<= 1; + } + minWidth = Math.min(minWidth, minWidthCurrentComponent); + minHeight = Math.min(minHeight, minHeightCurrentComponent); + maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); + maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); + sizePerComponent[c] = { + resolutions: sizePerResolution, + minWidth: minWidthCurrentComponent, + minHeight: minHeightCurrentComponent, + maxNumWide: maxNumWideCurrentComponent, + maxNumHigh: maxNumHighCurrentComponent + }; + } + return { + components: sizePerComponent, + minWidth: minWidth, + minHeight: minHeight, + maxNumWide: maxNumWide, + maxNumHigh: maxNumHigh + }; + } + function buildPackets(context) { + var siz = context.SIZ; + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var componentsCount = siz.Csiz; + // Creating resolutions and sub-bands for each component + for (var c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + var decompositionLevelsCount = + component.codingStyleParameters.decompositionLevelsCount; + // Section B.5 Resolution levels and sub-bands + var resolutions = []; + var subbands = []; + for (var r = 0; r <= decompositionLevelsCount; r++) { + var blocksDimensions = getBlocksDimensions(context, component, r); + var resolution = {}; + var scale = 1 << (decompositionLevelsCount - r); + resolution.trx0 = Math.ceil(component.tcx0 / scale); + resolution.try0 = Math.ceil(component.tcy0 / scale); + resolution.trx1 = Math.ceil(component.tcx1 / scale); + resolution.try1 = Math.ceil(component.tcy1 / scale); + resolution.resLevel = r; + buildPrecincts(context, resolution, blocksDimensions); + resolutions.push(resolution); + + var subband; + if (r === 0) { + // one sub-band (LL) with last decomposition + subband = {}; + subband.type = 'LL'; + subband.tbx0 = Math.ceil(component.tcx0 / scale); + subband.tby0 = Math.ceil(component.tcy0 / scale); + subband.tbx1 = Math.ceil(component.tcx1 / scale); + subband.tby1 = Math.ceil(component.tcy1 / scale); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolution.subbands = [subband]; + } else { + var bscale = 1 << (decompositionLevelsCount - r + 1); + var resolutionSubbands = []; + // three sub-bands (HL, LH and HH) with rest of decompositions + subband = {}; + subband.type = 'HL'; + subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); + subband.tby0 = Math.ceil(component.tcy0 / bscale); + subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); + subband.tby1 = Math.ceil(component.tcy1 / bscale); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + + subband = {}; + subband.type = 'LH'; + subband.tbx0 = Math.ceil(component.tcx0 / bscale); + subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); + subband.tbx1 = Math.ceil(component.tcx1 / bscale); + subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + + subband = {}; + subband.type = 'HH'; + subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); + subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); + subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); + subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + + resolution.subbands = resolutionSubbands; + } + } + component.resolutions = resolutions; + component.subbands = subbands; + } + // Generate the packets sequence + var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; + switch (progressionOrder) { + case 0: + tile.packetsIterator = + new LayerResolutionComponentPositionIterator(context); + break; + case 1: + tile.packetsIterator = + new ResolutionLayerComponentPositionIterator(context); + break; + case 2: + tile.packetsIterator = + new ResolutionPositionComponentLayerIterator(context); + break; + case 3: + tile.packetsIterator = + new PositionComponentResolutionLayerIterator(context); + break; + case 4: + tile.packetsIterator = + new ComponentPositionResolutionLayerIterator(context); + break; + default: + throw new Error('JPX Error: Unsupported progression order ' + + progressionOrder); + } + } + function parseTilePackets(context, data, offset, dataLength) { + var position = 0; + var buffer, bufferSize = 0, skipNextBit = false; + function readBits(count) { + while (bufferSize < count) { + if(offset + position >= data.length){ + throw new Error("Unexpected EOF"); + } + var b = data[offset + position]; + position++; + if (skipNextBit) { + buffer = (buffer << 7) | b; + bufferSize += 7; + skipNextBit = false; + } else { + buffer = (buffer << 8) | b; + bufferSize += 8; + } + if (b === 0xFF) { + skipNextBit = true; + } + } + bufferSize -= count; + return (buffer >>> bufferSize) & ((1 << count) - 1); + } + function skipMarkerIfEqual(value) { + if (data[offset + position - 1] === 0xFF && + data[offset + position] === value) { + skipBytes(1); + return true; + } else if (data[offset + position] === 0xFF && + data[offset + position + 1] === value) { + skipBytes(2); + return true; + } + return false; + } + function skipBytes(count) { + position += count; + } + function alignToByte() { + bufferSize = 0; + if (skipNextBit) { + position++; + skipNextBit = false; + } + } + function readCodingpasses() { + if (readBits(1) === 0) { + return 1; + } + if (readBits(1) === 0) { + return 2; + } + var value = readBits(2); + if (value < 3) { + return value + 3; + } + value = readBits(5); + if (value < 31) { + return value + 6; + } + value = readBits(7); + return value + 37; + } + var tileIndex = context.currentTile.index; + var tile = context.tiles[tileIndex]; + var sopMarkerUsed = context.COD.sopMarkerUsed; + var ephMarkerUsed = context.COD.ephMarkerUsed; + var packetsIterator = tile.packetsIterator; + while (position < dataLength) { + try{ + alignToByte(); + if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { + // Skip also marker segment length and packet sequence ID + skipBytes(4); + } + var packet = packetsIterator.nextPacket(); + if (packet === undefined) { + //No more packets. Stream is probably truncated. + return; + } + if (!readBits(1)) { + continue; + } + var layerNumber = packet.layerNumber; + var queue = [], codeblock; + for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) { + codeblock = packet.codeblocks[i]; + var precinct = codeblock.precinct; + var codeblockColumn = codeblock.cbx - precinct.cbxMin; + var codeblockRow = codeblock.cby - precinct.cbyMin; + var codeblockIncluded = false; + var firstTimeInclusion = false; + var valueReady; + if (codeblock['included'] !== undefined) { + codeblockIncluded = !!readBits(1); + } else { + // reading inclusion tree + precinct = codeblock.precinct; + var inclusionTree, zeroBitPlanesTree; + if (precinct['inclusionTree'] !== undefined) { + inclusionTree = precinct.inclusionTree; + } else { + // building inclusion and zero bit-planes trees + var width = precinct.cbxMax - precinct.cbxMin + 1; + var height = precinct.cbyMax - precinct.cbyMin + 1; + inclusionTree = new InclusionTree(width, height); + zeroBitPlanesTree = new TagTree(width, height); + precinct.inclusionTree = inclusionTree; + precinct.zeroBitPlanesTree = zeroBitPlanesTree; + } + + inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber); + while (true) { + if (position >= data.length) { + return; + } + if (inclusionTree.isAboveThreshold()){ + break; + } + if (inclusionTree.isKnown()) { + inclusionTree.nextLevel(); + continue; + } + if (readBits(1)) { + inclusionTree.setKnown(); + if (inclusionTree.isLeaf()) { + codeblock.included = true; + codeblockIncluded = firstTimeInclusion = true; + break; + } else { + inclusionTree.nextLevel(); + } + } else { + inclusionTree.incrementValue(); + } + } + } + if (!codeblockIncluded) { + continue; + } + if (firstTimeInclusion) { + zeroBitPlanesTree = precinct.zeroBitPlanesTree; + zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); + while (true) { + if (position >= data.length) { + return; + } + if (readBits(1)) { + valueReady = !zeroBitPlanesTree.nextLevel(); + if (valueReady) { + break; + } + } else { + zeroBitPlanesTree.incrementValue(); + } + } + codeblock.zeroBitPlanes = zeroBitPlanesTree.value; + } + var codingpasses = readCodingpasses(); + while (readBits(1)) { + codeblock.Lblock++; + } + var codingpassesLog2 = log2(codingpasses); + // rounding down log2 + var bits = ((codingpasses < (1 << codingpassesLog2)) ? + codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; + var codedDataLength = readBits(bits); + queue.push({ + codeblock: codeblock, + codingpasses: codingpasses, + dataLength: codedDataLength + }); + } + alignToByte(); + if (ephMarkerUsed) { + skipMarkerIfEqual(0x92); + } + while (queue.length > 0) { + var packetItem = queue.shift(); + codeblock = packetItem.codeblock; + if (codeblock['data'] === undefined) { + codeblock.data = []; + } + codeblock.data.push({ + data: data, + start: offset + position, + end: offset + position + packetItem.dataLength, + codingpasses: packetItem.codingpasses + }); + position += packetItem.dataLength; + } + } catch (e) { + return; + } + } + return position; + } + function copyCoefficients(coefficients, levelWidth, levelHeight, subband, + delta, mb, reversible, segmentationSymbolUsed) { + var x0 = subband.tbx0; + var y0 = subband.tby0; + var width = subband.tbx1 - subband.tbx0; + var codeblocks = subband.codeblocks; + var right = subband.type.charAt(0) === 'H' ? 1 : 0; + var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0; + + for (var i = 0, ii = codeblocks.length; i < ii; ++i) { + var codeblock = codeblocks[i]; + var blockWidth = codeblock.tbx1_ - codeblock.tbx0_; + var blockHeight = codeblock.tby1_ - codeblock.tby0_; + if (blockWidth === 0 || blockHeight === 0) { + continue; + } + if (codeblock['data'] === undefined) { + continue; + } + + var bitModel, currentCodingpassType; + bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, + codeblock.zeroBitPlanes, mb); + currentCodingpassType = 2; // first bit plane starts from cleanup + + // collect data + var data = codeblock.data, totalLength = 0, codingpasses = 0; + var j, jj, dataItem; + for (j = 0, jj = data.length; j < jj; j++) { + dataItem = data[j]; + totalLength += dataItem.end - dataItem.start; + codingpasses += dataItem.codingpasses; + } + var encodedData = new Int16Array(totalLength); + var position = 0; + for (j = 0, jj = data.length; j < jj; j++) { + dataItem = data[j]; + var chunk = dataItem.data.subarray(dataItem.start, dataItem.end); + encodedData.set(chunk, position); + position += chunk.length; + } + // decoding the item + var decoder = new ArithmeticDecoder(encodedData, 0, totalLength); + bitModel.setDecoder(decoder); + + for (j = 0; j < codingpasses; j++) { + switch (currentCodingpassType) { + case 0: + bitModel.runSignificancePropogationPass(); + break; + case 1: + bitModel.runMagnitudeRefinementPass(); + break; + case 2: + bitModel.runCleanupPass(); + if (segmentationSymbolUsed) { + bitModel.checkSegmentationSymbol(); + } + break; + } + currentCodingpassType = (currentCodingpassType + 1) % 3; + } + + var offset = (codeblock.tbx0_ - x0) + (codeblock.tby0_ - y0) * width; + var sign = bitModel.coefficentsSign; + var magnitude = bitModel.coefficentsMagnitude; + var bitsDecoded = bitModel.bitsDecoded; + var magnitudeCorrection = reversible ? 0 : 0.5; + var k, n, nb; + position = 0; + // Do the interleaving of Section F.3.3 here, so we do not need + // to copy later. LL level is not interleaved, just copied. + var interleave = (subband.type !== 'LL'); + for (j = 0; j < blockHeight; j++) { + var row = (offset / width) | 0; // row in the non-interleaved subband + var levelOffset = 2 * row * (levelWidth - width) + right + bottom; + for (k = 0; k < blockWidth; k++) { + n = magnitude[position]; + if (n !== 0) { + n = (n + magnitudeCorrection) * delta; + if (sign[position] !== 0) { + n = -n; + } + nb = bitsDecoded[position]; + var pos = interleave ? (levelOffset + (offset << 1)) : offset; + if (reversible && (nb >= mb)) { + coefficients[pos] = n; + } else { + coefficients[pos] = n * (1 << (mb - nb)); + } + } + offset++; + position++; + } + offset += width - blockWidth; + } + } + } + function transformTile(context, tile, c) { + var component = tile.components[c]; + var codingStyleParameters = component.codingStyleParameters; + var quantizationParameters = component.quantizationParameters; + var decompositionLevelsCount = + codingStyleParameters.decompositionLevelsCount; + var spqcds = quantizationParameters.SPqcds; + var scalarExpounded = quantizationParameters.scalarExpounded; + var guardBits = quantizationParameters.guardBits; + var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; + var precision = context.components[c].precision; + + var reversible = codingStyleParameters.reversibleTransformation; + var transform = (reversible ? new ReversibleTransform() : + new IrreversibleTransform()); + + var subbandCoefficients = []; + var b = 0; + for (var i = 0; i <= decompositionLevelsCount; i++) { + var resolution = component.resolutions[i]; + + var width = resolution.trx1 - resolution.trx0; + var height = resolution.try1 - resolution.try0; + // Allocate space for the whole sublevel. + var coefficients = new Float32Array(width * height); + + for (var j = 0, jj = resolution.subbands.length; j < jj; j++) { + var mu, epsilon; + if (!scalarExpounded) { + // formula E-5 + mu = spqcds[0].mu; + epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); + } else { + mu = spqcds[b].mu; + epsilon = spqcds[b].epsilon; + b++; + } + + var subband = resolution.subbands[j]; + var gainLog2 = SubbandsGainLog2[subband.type]; + + // calulate quantization coefficient (Section E.1.1.1) + var delta = (reversible ? 1 : + Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048)); + var mb = (guardBits + epsilon - 1); + + // In the first resolution level, copyCoefficients will fill the + // whole array with coefficients. In the succeding passes, + // copyCoefficients will consecutively fill in the values that belong + // to the interleaved positions of the HL, LH, and HH coefficients. + // The LL coefficients will then be interleaved in Transform.iterate(). + copyCoefficients(coefficients, width, height, subband, delta, mb, + reversible, segmentationSymbolUsed); + } + subbandCoefficients.push({ + width: width, + height: height, + items: coefficients + }); + } + + var result = transform.calculate(subbandCoefficients, + component.tcx0, component.tcy0); + return { + left: component.tcx0, + top: component.tcy0, + width: result.width, + height: result.height, + items: result.items + }; + } + function transformComponents(context) { + var siz = context.SIZ; + var components = context.components; + var componentsCount = siz.Csiz; + var resultImages = []; + for (var i = 0, ii = context.tiles.length; i < ii; i++) { + var tile = context.tiles[i]; + var transformedTiles = []; + var c; + for (c = 0; c < componentsCount; c++) { + transformedTiles[c] = transformTile(context, tile, c); + } + var tile0 = transformedTiles[0]; + var isSigned = components[0].isSigned; + if (isSigned) { + var out = new Int16Array(tile0.items.length * componentsCount); + } else { + var out = new Uint16Array(tile0.items.length * componentsCount); + } + var result = { + left: tile0.left, + top: tile0.top, + width: tile0.width, + height: tile0.height, + items: out + }; + + // Section G.2.2 Inverse multi component transform + var shift, offset, max, min, maxK; + var pos = 0, j, jj, y0, y1, y2, r, g, b, k, val; + if (tile.codingStyleDefaultParameters.multipleComponentTransform) { + var fourComponents = componentsCount === 4; + var y0items = transformedTiles[0].items; + var y1items = transformedTiles[1].items; + var y2items = transformedTiles[2].items; + var y3items = fourComponents ? transformedTiles[3].items : null; + + // HACK: The multiple component transform formulas below assume that + // all components have the same precision. With this in mind, we + // compute shift and offset only once. + shift = components[0].precision - 8; + offset = (128 << shift) + 0.5; + max = 255 * (1 << shift); + maxK = max * 0.5; + min = -maxK; + + var component0 = tile.components[0]; + var alpha01 = componentsCount - 3; + jj = y0items.length; + if (!component0.codingStyleParameters.reversibleTransformation) { + // inverse irreversible multiple component transform + for (j = 0; j < jj; j++, pos += alpha01) { + y0 = y0items[j] + offset; + y1 = y1items[j]; + y2 = y2items[j]; + r = y0 + 1.402 * y2; + g = y0 - 0.34413 * y1 - 0.71414 * y2; + b = y0 + 1.772 * y1; + out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift; + out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift; + out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift; + } + } else { + // inverse reversible multiple component transform + for (j = 0; j < jj; j++, pos += alpha01) { + y0 = y0items[j] + offset; + y1 = y1items[j]; + y2 = y2items[j]; + g = y0 - ((y2 + y1) >> 2); + r = g + y2; + b = g + y1; + out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift; + out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift; + out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift; + } + } + if (fourComponents) { + for (j = 0, pos = 3; j < jj; j++, pos += 4) { + k = y3items[j]; + out[pos] = k <= min ? 0 : k >= maxK ? 255 : (k + offset) >> shift; + } + } + } else { // no multi-component transform + for (c = 0; c < componentsCount; c++) { + if (components[c].precision === 8){ + var items = transformedTiles[c].items; + shift = components[c].precision - 8; + offset = (128 << shift) + 0.5; + max = (127.5 * (1 << shift)); + min = -max; + for (pos = c, j = 0, jj = items.length; j < jj; j++) { + val = items[j]; + out[pos] = val <= min ? 0 : + val >= max ? 255 : (val + offset) >> shift; + pos += componentsCount; + } + }else{ + var isSigned = components[c].isSigned; + var items = transformedTiles[c].items; + + if(isSigned){ + for (pos = c, j = 0, jj = items.length; j < jj; j++) { + out[pos] = items[j]; + pos += componentsCount; + } + }else{ + shift = components[c].precision - 8; + offset = (128 << shift) + 0.5; + var precisionMax = Math.pow(2,components[c].precision)-1; + for (pos = c, j = 0, jj = items.length; j < jj; j++) { + val = items[j]; + out[pos] = Math.max(Math.min((val + offset),precisionMax),0); + pos += componentsCount; + } + } + } + } + } + resultImages.push(result); + } + return resultImages; + } + function initializeTile(context, tileIndex) { + var siz = context.SIZ; + var componentsCount = siz.Csiz; + var tile = context.tiles[tileIndex]; + for (var c = 0; c < componentsCount; c++) { + var component = tile.components[c]; + var qcdOrQcc = (context.currentTile.QCC[c] !== undefined ? + context.currentTile.QCC[c] : context.currentTile.QCD); + component.quantizationParameters = qcdOrQcc; + var codOrCoc = (context.currentTile.COC[c] !== undefined ? + context.currentTile.COC[c] : context.currentTile.COD); + component.codingStyleParameters = codOrCoc; + } + tile.codingStyleDefaultParameters = context.currentTile.COD; + } + + // Section B.10.2 Tag trees + var TagTree = (function TagTreeClosure() { + function TagTree(width, height) { + var levelsLength = log2(Math.max(width, height)) + 1; + this.levels = []; + for (var i = 0; i < levelsLength; i++) { + var level = { + width: width, + height: height, + items: [] + }; + this.levels.push(level); + width = Math.ceil(width / 2); + height = Math.ceil(height / 2); + } + } + TagTree.prototype = { + reset: function TagTree_reset(i, j) { + var currentLevel = 0, value = 0, level; + while (currentLevel < this.levels.length) { + level = this.levels[currentLevel]; + var index = i + j * level.width; + if (level.items[index] !== undefined) { + value = level.items[index]; + break; + } + level.index = index; + i >>= 1; + j >>= 1; + currentLevel++; + } + currentLevel--; + level = this.levels[currentLevel]; + level.items[level.index] = value; + this.currentLevel = currentLevel; + delete this.value; + }, + incrementValue: function TagTree_incrementValue() { + var level = this.levels[this.currentLevel]; + level.items[level.index]++; + }, + nextLevel: function TagTree_nextLevel() { + var currentLevel = this.currentLevel; + var level = this.levels[currentLevel]; + var value = level.items[level.index]; + currentLevel--; + if (currentLevel < 0) { + this.value = value; + return false; + } + + this.currentLevel = currentLevel; + level = this.levels[currentLevel]; + level.items[level.index] = value; + return true; + } + }; + return TagTree; + })(); + + var InclusionTree = (function InclusionTreeClosure() { + function InclusionTree(width, height) { + var levelsLength = log2(Math.max(width, height)) + 1; + this.levels = []; + for (var i = 0; i < levelsLength; i++) { + var items = new Uint8Array(width * height); + var status = new Uint8Array(width * height); + for (var j = 0, jj = items.length; j < jj; j++) { + items[j] = 0; + status[j] = 0; + } + + var level = { + width: width, + height: height, + items: items, + status: status + }; + this.levels.push(level); + + width = Math.ceil(width / 2); + height = Math.ceil(height / 2); + } + } + InclusionTree.prototype = { + reset: function InclusionTree_reset(i, j, stopValue) { + this.currentStopValue = stopValue; + var currentLevel = 0; + while (currentLevel < this.levels.length) { + var level = this.levels[currentLevel]; + var index = i + j * level.width; + level.index = index; + + i >>= 1; + j >>= 1; + currentLevel++; + } + + this.currentLevel = this.levels.length - 1; + this.minValue =this.levels[this.currentLevel].items[0]; + return; + }, + incrementValue: function InclusionTree_incrementValue() { + var level = this.levels[this.currentLevel]; + level.items[level.index] = level.items[level.index] + 1; + if(level.items[level.index] > this.minValue) { + this.minValue = level.items[level.index]; + } + }, + nextLevel: function InclusionTree_nextLevel() { + var currentLevel = this.currentLevel; + currentLevel--; + if (currentLevel < 0) { + return false; + } else { + this.currentLevel = currentLevel; + var level = this.levels[currentLevel]; + if(level.items[level.index] < this.minValue) { + level.items[level.index] = this.minValue; + }else if (level.items[level.index] > this.minValue) { + this.minValue = level.items[level.index]; + } + return true; + } + }, + isLeaf: function InclusionTree_isLeaf(){ + return (this.currentLevel === 0); + }, + isAboveThreshold: function InclusionTree_isAboveThreshold(){ + var levelindex = this.currentLevel; + var level = this.levels[levelindex]; + return (level.items[level.index] > this.currentStopValue); + }, + isKnown: function InclusionTree_isKnown(){ + var levelindex = this.currentLevel; + var level = this.levels[levelindex]; + return (level.status[level.index] > 0); + }, + setKnown: function InclusionTree_setKnown(){ + var levelindex = this.currentLevel; + var level = this.levels[levelindex]; + level.status[level.index] = 1; + return; + } + + }; + return InclusionTree; + })(); + + // Section D. Coefficient bit modeling + var BitModel = (function BitModelClosure() { + var UNIFORM_CONTEXT = 17; + var RUNLENGTH_CONTEXT = 18; + // Table D-1 + // The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4), + // vv - sum of Vi (0..2), and hh - sum of Hi (0..2) + var LLAndLHContextsLabel = new Uint8Array([ + 0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, + 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, + 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8 + ]); + var HLContextLabel = new Uint8Array([ + 0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, + 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, + 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8 + ]); + var HHContextLabel = new Uint8Array([ + 0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, + 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, + 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8 + ]); + + function BitModel(width, height, subband, zeroBitPlanes, mb) { + this.width = width; + this.height = height; + + this.contextLabelTable = (subband === 'HH' ? HHContextLabel : + (subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel)); + + var coefficientCount = width * height; + + // coefficients outside the encoding region treated as insignificant + // add border state cells for significanceState + this.neighborsSignificance = new Uint8Array(coefficientCount); + this.coefficentsSign = new Uint8Array(coefficientCount); + this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) : + mb > 6 ? new Uint16Array(coefficientCount) : + new Uint8Array(coefficientCount); + this.processingFlags = new Uint8Array(coefficientCount); + + var bitsDecoded = new Uint8Array(coefficientCount); + if (zeroBitPlanes !== 0) { + for (var i = 0; i < coefficientCount; i++) { + bitsDecoded[i] = zeroBitPlanes; + } + } + this.bitsDecoded = bitsDecoded; + + this.reset(); + } + + BitModel.prototype = { + setDecoder: function BitModel_setDecoder(decoder) { + this.decoder = decoder; + }, + reset: function BitModel_reset() { + // We have 17 contexts that are accessed via context labels, + // plus the uniform and runlength context. + this.contexts = new Int8Array(19); + + // Contexts are packed into 1 byte: + // highest 7 bits carry the index, lowest bit carries mps + this.contexts[0] = (4 << 1) | 0; + this.contexts[UNIFORM_CONTEXT] = (46 << 1) | 0; + this.contexts[RUNLENGTH_CONTEXT] = (3 << 1) | 0; + }, + setNeighborsSignificance: + function BitModel_setNeighborsSignificance(row, column, index) { + var neighborsSignificance = this.neighborsSignificance; + var width = this.width, height = this.height; + var left = (column > 0); + var right = (column + 1 < width); + var i; + + if (row > 0) { + i = index - width; + if (left) { + neighborsSignificance[i - 1] += 0x10; + } + if (right) { + neighborsSignificance[i + 1] += 0x10; + } + neighborsSignificance[i] += 0x04; + } + + if (row + 1 < height) { + i = index + width; + if (left) { + neighborsSignificance[i - 1] += 0x10; + } + if (right) { + neighborsSignificance[i + 1] += 0x10; + } + neighborsSignificance[i] += 0x04; + } + + if (left) { + neighborsSignificance[index - 1] += 0x01; + } + if (right) { + neighborsSignificance[index + 1] += 0x01; + } + neighborsSignificance[index] |= 0x80; + }, + runSignificancePropogationPass: + function BitModel_runSignificancePropogationPass() { + var decoder = this.decoder; + var width = this.width, height = this.height; + var coefficentsMagnitude = this.coefficentsMagnitude; + var coefficentsSign = this.coefficentsSign; + var neighborsSignificance = this.neighborsSignificance; + var processingFlags = this.processingFlags; + var contexts = this.contexts; + var labels = this.contextLabelTable; + var bitsDecoded = this.bitsDecoded; + var processedInverseMask = ~1; + var processedMask = 1; + var firstMagnitudeBitMask = 2; + + for (var i0 = 0; i0 < height; i0 += 4) { + for (var j = 0; j < width; j++) { + var index = i0 * width + j; + for (var i1 = 0; i1 < 4; i1++, index += width) { + var i = i0 + i1; + if (i >= height) { + break; + } + // clear processed flag first + processingFlags[index] &= processedInverseMask; + + if (coefficentsMagnitude[index] || + !neighborsSignificance[index]) { + continue; + } + + var contextLabel = labels[neighborsSignificance[index]]; + var decision = decoder.readBit(contexts, contextLabel); + if (decision) { + var sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + } + bitsDecoded[index]++; + processingFlags[index] |= processedMask; + } + } + } + }, + decodeSignBit: function BitModel_decodeSignBit(row, column, index) { + var width = this.width, height = this.height; + var coefficentsMagnitude = this.coefficentsMagnitude; + var coefficentsSign = this.coefficentsSign; + var contribution, sign0, sign1, significance1; + var contextLabel, decoded; + + // calculate horizontal contribution + significance1 = (column > 0 && coefficentsMagnitude[index - 1] !== 0); + if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { + sign1 = coefficentsSign[index + 1]; + if (significance1) { + sign0 = coefficentsSign[index - 1]; + contribution = 1 - sign1 - sign0; + } else { + contribution = 1 - sign1 - sign1; + } + } else if (significance1) { + sign0 = coefficentsSign[index - 1]; + contribution = 1 - sign0 - sign0; + } else { + contribution = 0; + } + var horizontalContribution = 3 * contribution; + + // calculate vertical contribution and combine with the horizontal + significance1 = (row > 0 && coefficentsMagnitude[index - width] !== 0); + if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { + sign1 = coefficentsSign[index + width]; + if (significance1) { + sign0 = coefficentsSign[index - width]; + contribution = 1 - sign1 - sign0 + horizontalContribution; + } else { + contribution = 1 - sign1 - sign1 + horizontalContribution; + } + } else if (significance1) { + sign0 = coefficentsSign[index - width]; + contribution = 1 - sign0 - sign0 + horizontalContribution; + } else { + contribution = horizontalContribution; + } + + if (contribution >= 0) { + contextLabel = 9 + contribution; + decoded = this.decoder.readBit(this.contexts, contextLabel); + } else { + contextLabel = 9 - contribution; + decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; + } + return decoded; + }, + runMagnitudeRefinementPass: + function BitModel_runMagnitudeRefinementPass() { + var decoder = this.decoder; + var width = this.width, height = this.height; + var coefficentsMagnitude = this.coefficentsMagnitude; + var neighborsSignificance = this.neighborsSignificance; + var contexts = this.contexts; + var bitsDecoded = this.bitsDecoded; + var processingFlags = this.processingFlags; + var processedMask = 1; + var firstMagnitudeBitMask = 2; + var length = width * height; + var width4 = width * 4; + + for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) { + indexNext = Math.min(length, index0 + width4); + for (var j = 0; j < width; j++) { + for (var index = index0 + j; index < indexNext; index += width) { + + // significant but not those that have just become + if (!coefficentsMagnitude[index] || + (processingFlags[index] & processedMask) !== 0) { + continue; + } + + var contextLabel = 16; + if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { + processingFlags[index] ^= firstMagnitudeBitMask; + // first refinement + var significance = neighborsSignificance[index] & 127; + contextLabel = significance === 0 ? 15 : 14; + } + + var bit = decoder.readBit(contexts, contextLabel); + coefficentsMagnitude[index] = + (coefficentsMagnitude[index] << 1) | bit; + bitsDecoded[index]++; + processingFlags[index] |= processedMask; + } + } + } + }, + runCleanupPass: function BitModel_runCleanupPass() { + var decoder = this.decoder; + var width = this.width, height = this.height; + var neighborsSignificance = this.neighborsSignificance; + var coefficentsMagnitude = this.coefficentsMagnitude; + var coefficentsSign = this.coefficentsSign; + var contexts = this.contexts; + var labels = this.contextLabelTable; + var bitsDecoded = this.bitsDecoded; + var processingFlags = this.processingFlags; + var processedMask = 1; + var firstMagnitudeBitMask = 2; + var oneRowDown = width; + var twoRowsDown = width * 2; + var threeRowsDown = width * 3; + var iNext; + for (var i0 = 0; i0 < height; i0 = iNext) { + iNext = Math.min(i0 + 4, height); + var indexBase = i0 * width; + var checkAllEmpty = i0 + 3 < height; + for (var j = 0; j < width; j++) { + var index0 = indexBase + j; + // using the property: labels[neighborsSignificance[index]] === 0 + // when neighborsSignificance[index] === 0 + var allEmpty = (checkAllEmpty && + processingFlags[index0] === 0 && + processingFlags[index0 + oneRowDown] === 0 && + processingFlags[index0 + twoRowsDown] === 0 && + processingFlags[index0 + threeRowsDown] === 0 && + neighborsSignificance[index0] === 0 && + neighborsSignificance[index0 + oneRowDown] === 0 && + neighborsSignificance[index0 + twoRowsDown] === 0 && + neighborsSignificance[index0 + threeRowsDown] === 0); + var i1 = 0, index = index0; + var i = i0, sign; + if (allEmpty) { + var hasSignificantCoefficent = + decoder.readBit(contexts, RUNLENGTH_CONTEXT); + if (!hasSignificantCoefficent) { + bitsDecoded[index0]++; + bitsDecoded[index0 + oneRowDown]++; + bitsDecoded[index0 + twoRowsDown]++; + bitsDecoded[index0 + threeRowsDown]++; + continue; // next column + } + i1 = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) | + decoder.readBit(contexts, UNIFORM_CONTEXT); + if (i1 !== 0) { + i = i0 + i1; + index += i1 * width; + } + + sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + + index = index0; + for (var i2 = i0; i2 <= i; i2++, index += width) { + bitsDecoded[index]++; + } + + i1++; + } + for (i = i0 + i1; i < iNext; i++, index += width) { + if (coefficentsMagnitude[index] || + (processingFlags[index] & processedMask) !== 0) { + continue; + } + + var contextLabel = labels[neighborsSignificance[index]]; + var decision = decoder.readBit(contexts, contextLabel); + if (decision === 1) { + sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + } + bitsDecoded[index]++; + } + } + } + }, + checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() { + var decoder = this.decoder; + var contexts = this.contexts; + var symbol = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 3) | + (decoder.readBit(contexts, UNIFORM_CONTEXT) << 2) | + (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) | + decoder.readBit(contexts, UNIFORM_CONTEXT); + if (symbol !== 0xA) { + throw new Error('JPX Error: Invalid segmentation symbol'); + } + } + }; + + return BitModel; + })(); + + // Section F, Discrete wavelet transformation + var Transform = (function TransformClosure() { + function Transform() {} + + Transform.prototype.calculate = + function transformCalculate(subbands, u0, v0) { + var ll = subbands[0]; + for (var i = 1, ii = subbands.length; i < ii; i++) { + ll = this.iterate(ll, subbands[i], u0, v0); + } + return ll; + }; + Transform.prototype.extend = function extend(buffer, offset, size) { + // Section F.3.7 extending... using max extension of 4 + var i1 = offset - 1, j1 = offset + 1; + var i2 = offset + size - 2, j2 = offset + size; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1] = buffer[j1]; + buffer[j2] = buffer[i2]; + }; + Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, + u0, v0) { + var llWidth = ll.width, llHeight = ll.height, llItems = ll.items; + var width = hl_lh_hh.width; + var height = hl_lh_hh.height; + var items = hl_lh_hh.items; + var i, j, k, l, u, v; + + // Interleave LL according to Section F.3.3 + for (k = 0, i = 0; i < llHeight; i++) { + l = i * 2 * width; + for (j = 0; j < llWidth; j++, k++, l += 2) { + items[l] = llItems[k]; + } + } + // The LL band is not needed anymore. + llItems = ll.items = null; + + var bufferPadding = 4; + var rowBuffer = new Float32Array(width + 2 * bufferPadding); + + // Section F.3.4 HOR_SR + if (width === 1) { + // if width = 1, when u0 even keep items as is, when odd divide by 2 + if ((u0 & 1) !== 0) { + for (v = 0, k = 0; v < height; v++, k += width) { + items[k] *= 0.5; + } + } + } else { + for (v = 0, k = 0; v < height; v++, k += width) { + rowBuffer.set(items.subarray(k, k + width), bufferPadding); + + this.extend(rowBuffer, bufferPadding, width); + this.filter(rowBuffer, bufferPadding, width); + + items.set( + rowBuffer.subarray(bufferPadding, bufferPadding + width), + k); + } + } + + // Accesses to the items array can take long, because it may not fit into + // CPU cache and has to be fetched from main memory. Since subsequent + // accesses to the items array are not local when reading columns, we + // have a cache miss every time. To reduce cache misses, get up to + // 'numBuffers' items at a time and store them into the individual + // buffers. The colBuffers should be small enough to fit into CPU cache. + var numBuffers = 16; + var colBuffers = []; + for (i = 0; i < numBuffers; i++) { + colBuffers.push(new Float32Array(height + 2 * bufferPadding)); + } + var b, currentBuffer = 0; + ll = bufferPadding + height; + + // Section F.3.5 VER_SR + if (height === 1) { + // if height = 1, when v0 even keep items as is, when odd divide by 2 + if ((v0 & 1) !== 0) { + for (u = 0; u < width; u++) { + items[u] *= 0.5; + } + } + } else { + for (u = 0; u < width; u++) { + // if we ran out of buffers, copy several image columns at once + if (currentBuffer === 0) { + numBuffers = Math.min(width - u, numBuffers); + for (k = u, l = bufferPadding; l < ll; k += width, l++) { + for (b = 0; b < numBuffers; b++) { + colBuffers[b][l] = items[k + b]; + } + } + currentBuffer = numBuffers; + } + + currentBuffer--; + var buffer = colBuffers[currentBuffer]; + this.extend(buffer, bufferPadding, height); + this.filter(buffer, bufferPadding, height); + + // If this is last buffer in this group of buffers, flush all buffers. + if (currentBuffer === 0) { + k = u - numBuffers + 1; + for (l = bufferPadding; l < ll; k += width, l++) { + for (b = 0; b < numBuffers; b++) { + items[k + b] = colBuffers[b][l]; + } + } + } + } + } + + return { + width: width, + height: height, + items: items + }; + }; + return Transform; + })(); + + // Section 3.8.2 Irreversible 9-7 filter + var IrreversibleTransform = (function IrreversibleTransformClosure() { + function IrreversibleTransform() { + Transform.call(this); + } + + IrreversibleTransform.prototype = Object.create(Transform.prototype); + IrreversibleTransform.prototype.filter = + function irreversibleTransformFilter(x, offset, length) { + var len = length >> 1; + offset = offset | 0; + var j, n, current, next; + + var alpha = -1.586134342059924; + var beta = -0.052980118572961; + var gamma = 0.882911075530934; + var delta = 0.443506852043971; + var K = 1.230174104914001; + var K_ = 1 / K; + + // step 1 is combined with step 3 + + // step 2 + j = offset - 3; + for (n = len + 4; n--; j += 2) { + x[j] *= K_; + } + + // step 1 & 3 + j = offset - 2; + current = delta * x[j -1]; + for (n = len + 3; n--; j += 2) { + next = delta * x[j + 1]; + x[j] = K * x[j] - current - next; + if (n--) { + j += 2; + current = delta * x[j + 1]; + x[j] = K * x[j] - current - next; + } else { + break; + } + } + + // step 4 + j = offset - 1; + current = gamma * x[j - 1]; + for (n = len + 2; n--; j += 2) { + next = gamma * x[j + 1]; + x[j] -= current + next; + if (n--) { + j += 2; + current = gamma * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + + // step 5 + j = offset; + current = beta * x[j - 1]; + for (n = len + 1; n--; j += 2) { + next = beta * x[j + 1]; + x[j] -= current + next; + if (n--) { + j += 2; + current = beta * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + + // step 6 + if (len !== 0) { + j = offset + 1; + current = alpha * x[j - 1]; + for (n = len; n--; j += 2) { + next = alpha * x[j + 1]; + x[j] -= current + next; + if (n--) { + j += 2; + current = alpha * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + } + }; + + return IrreversibleTransform; + })(); + + // Section 3.8.1 Reversible 5-3 filter + var ReversibleTransform = (function ReversibleTransformClosure() { + function ReversibleTransform() { + Transform.call(this); + } + + ReversibleTransform.prototype = Object.create(Transform.prototype); + ReversibleTransform.prototype.filter = + function reversibleTransformFilter(x, offset, length) { + var len = length >> 1; + offset = offset | 0; + var j, n; + + for (j = offset, n = len + 1; n--; j += 2) { + x[j] -= (x[j - 1] + x[j + 1] + 2) >> 2; + } + + for (j = offset + 1, n = len; n--; j += 2) { + x[j] += (x[j - 1] + x[j + 1]) >> 1; + } + }; + + return ReversibleTransform; + })(); + + return JpxImage; +})(); + + +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +/* This class implements the QM Coder decoding as defined in + * JPEG 2000 Part I Final Committee Draft Version 1.0 + * Annex C.3 Arithmetic decoding procedure + * available at http://www.jpeg.org/public/fcd15444-1.pdf + * + * The arithmetic decoder is used in conjunction with context models to decode + * JPEG2000 and JBIG2 streams. + */ +var ArithmeticDecoder = (function ArithmeticDecoderClosure() { + // Table C-2 + var QeTable = [ + {qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1}, + {qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0}, + {qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0}, + {qe: 0x0AC1, nmps: 4, nlps: 12, switchFlag: 0}, + {qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0}, + {qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0}, + {qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1}, + {qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0}, + {qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0}, + {qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0}, + {qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0}, + {qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0}, + {qe: 0x1C01, nmps: 13, nlps: 20, switchFlag: 0}, + {qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0}, + {qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1}, + {qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0}, + {qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0}, + {qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0}, + {qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0}, + {qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0}, + {qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0}, + {qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0}, + {qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0}, + {qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0}, + {qe: 0x1C01, nmps: 25, nlps: 22, switchFlag: 0}, + {qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0}, + {qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0}, + {qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0}, + {qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0}, + {qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0}, + {qe: 0x0AC1, nmps: 31, nlps: 28, switchFlag: 0}, + {qe: 0x09C1, nmps: 32, nlps: 29, switchFlag: 0}, + {qe: 0x08A1, nmps: 33, nlps: 30, switchFlag: 0}, + {qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0}, + {qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0}, + {qe: 0x02A1, nmps: 36, nlps: 33, switchFlag: 0}, + {qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0}, + {qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0}, + {qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0}, + {qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0}, + {qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0}, + {qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0}, + {qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0}, + {qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0}, + {qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0}, + {qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0}, + {qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0} + ]; + + // C.3.5 Initialisation of the decoder (INITDEC) + function ArithmeticDecoder(data, start, end) { + this.data = data; + this.bp = start; + this.dataEnd = end; + + this.chigh = data[start]; + this.clow = 0; + + this.byteIn(); + + this.chigh = ((this.chigh << 7) & 0xFFFF) | ((this.clow >> 9) & 0x7F); + this.clow = (this.clow << 7) & 0xFFFF; + this.ct -= 7; + this.a = 0x8000; + } + + ArithmeticDecoder.prototype = { + // C.3.4 Compressed data input (BYTEIN) + byteIn: function ArithmeticDecoder_byteIn() { + var data = this.data; + var bp = this.bp; + if (data[bp] === 0xFF) { + var b1 = data[bp + 1]; + if (b1 > 0x8F) { + this.clow += 0xFF00; + this.ct = 8; + } else { + bp++; + this.clow += (data[bp] << 9); + this.ct = 7; + this.bp = bp; + } + } else { + bp++; + this.clow += bp < this.dataEnd ? (data[bp] << 8) : 0xFF00; + this.ct = 8; + this.bp = bp; + } + if (this.clow > 0xFFFF) { + this.chigh += (this.clow >> 16); + this.clow &= 0xFFFF; + } + }, + // C.3.2 Decoding a decision (DECODE) + readBit: function ArithmeticDecoder_readBit(contexts, pos) { + // contexts are packed into 1 byte: + // highest 7 bits carry cx.index, lowest bit carries cx.mps + var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1; + var qeTableIcx = QeTable[cx_index]; + var qeIcx = qeTableIcx.qe; + var d; + var a = this.a - qeIcx; + + if (this.chigh < qeIcx) { + // exchangeLps + if (a < qeIcx) { + a = qeIcx; + d = cx_mps; + cx_index = qeTableIcx.nmps; + } else { + a = qeIcx; + d = 1 ^ cx_mps; + if (qeTableIcx.switchFlag === 1) { + cx_mps = d; + } + cx_index = qeTableIcx.nlps; + } + } else { + this.chigh -= qeIcx; + if ((a & 0x8000) !== 0) { + this.a = a; + return cx_mps; + } + // exchangeMps + if (a < qeIcx) { + d = 1 ^ cx_mps; + if (qeTableIcx.switchFlag === 1) { + cx_mps = d; + } + cx_index = qeTableIcx.nlps; + } else { + d = cx_mps; + cx_index = qeTableIcx.nmps; + } + } + // C.3.3 renormD; + do { + if (this.ct === 0) { + this.byteIn(); + } + + a <<= 1; + this.chigh = ((this.chigh << 1) & 0xFFFF) | ((this.clow >> 15) & 1); + this.clow = (this.clow << 1) & 0xFFFF; + this.ct--; + } while ((a & 0x8000) === 0); + this.a = a; + + contexts[pos] = cx_index << 1 | cx_mps; + return d; + } + }; + + return ArithmeticDecoder; +})(); + +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* globals Cmd, ColorSpace, Dict, MozBlobBuilder, Name, PDFJS, Ref, URL, + Promise */ + +'use strict'; + +var globalScope = (typeof window === 'undefined') ? this : window; + +var isWorker = (typeof window === 'undefined'); + +var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; + +var TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 +}; + +var ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 +}; + +var AnnotationType = { + WIDGET: 1, + TEXT: 2, + LINK: 3 +}; + +var StreamType = { + UNKNOWN: 0, + FLATE: 1, + LZW: 2, + DCT: 3, + JPX: 4, + JBIG: 5, + A85: 6, + AHX: 7, + CCF: 8, + RL: 9 +}; + +var FontType = { + UNKNOWN: 0, + TYPE1: 1, + TYPE1C: 2, + CIDFONTTYPE0: 3, + CIDFONTTYPE0C: 4, + TRUETYPE: 5, + CIDFONTTYPE2: 6, + TYPE3: 7, + OPENTYPE: 8, + TYPE0: 9, + MMTYPE1: 10 +}; + +// The global PDFJS object exposes the API +// In production, it will be declared outside a global wrapper +// In development, it will be declared here +if (!globalScope.PDFJS) { + globalScope.PDFJS = {}; +} + +globalScope.PDFJS.pdfBug = false; + +PDFJS.VERBOSITY_LEVELS = { + errors: 0, + warnings: 1, + infos: 5 +}; + +// All the possible operations for an operator list. +var OPS = PDFJS.OPS = { + // Intentionally start from 1 so it is easy to spot bad operators that will be + // 0's. + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotations: 78, + endAnnotations: 79, + beginAnnotation: 80, + endAnnotation: 81, + paintJpegXObject: 82, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91 +}; + +// A notice for devs. These are good for things that are helpful to devs, such +// as warning that Workers were disabled, which is important to devs but not +// end users. +function info(msg) { + if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.infos) { + console.log('Info: ' + msg); + } +} + +// Non-fatal warnings. +function warn(msg) { + if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.warnings) { + console.log('Warning: ' + msg); + } +} + +// Fatal errors that should trigger the fallback UI and halt execution by +// throwing an exception. +function error(msg) { + // If multiple arguments were passed, pass them all to the log function. + if (arguments.length > 1) { + var logArguments = ['Error:']; + logArguments.push.apply(logArguments, arguments); + console.log.apply(console, logArguments); + // Join the arguments into a single string for the lines below. + msg = [].join.call(arguments, ' '); + } else { + console.log('Error: ' + msg); + } + console.log(backtrace()); + UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown); + throw new Error(msg); +} + +function backtrace() { + try { + throw new Error(); + } catch (e) { + return e.stack ? e.stack.split('\n').slice(2).join('\n') : ''; + } +} + +function assert(cond, msg) { + if (!cond) { + error(msg); + } +} + +var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = { + unknown: 'unknown', + forms: 'forms', + javaScript: 'javaScript', + smask: 'smask', + shadingPattern: 'shadingPattern', + font: 'font' +}; + +var UnsupportedManager = PDFJS.UnsupportedManager = + (function UnsupportedManagerClosure() { + var listeners = []; + return { + listen: function (cb) { + listeners.push(cb); + }, + notify: function (featureId) { + warn('Unsupported feature "' + featureId + '"'); + for (var i = 0, ii = listeners.length; i < ii; i++) { + listeners[i](featureId); + } + } + }; +})(); + +// Combines two URLs. The baseUrl shall be absolute URL. If the url is an +// absolute URL, it will be returned as is. +function combineUrl(baseUrl, url) { + if (!url) { + return baseUrl; + } + if (/^[a-z][a-z0-9+\-.]*:/i.test(url)) { + return url; + } + var i; + if (url.charAt(0) === '/') { + // absolute path + i = baseUrl.indexOf('://'); + if (url.charAt(1) === '/') { + ++i; + } else { + i = baseUrl.indexOf('/', i + 3); + } + return baseUrl.substring(0, i) + url; + } else { + // relative path + var pathLength = baseUrl.length; + i = baseUrl.lastIndexOf('#'); + pathLength = i >= 0 ? i : pathLength; + i = baseUrl.lastIndexOf('?', pathLength); + pathLength = i >= 0 ? i : pathLength; + var prefixLength = baseUrl.lastIndexOf('/', pathLength); + return baseUrl.substring(0, prefixLength + 1) + url; + } +} + +// Validates if URL is safe and allowed, e.g. to avoid XSS. +function isValidUrl(url, allowRelative) { + if (!url) { + return false; + } + // RFC 3986 (http://tools.ietf.org/html/rfc3986#section-3.1) + // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + var protocol = /^[a-z][a-z0-9+\-.]*(?=:)/i.exec(url); + if (!protocol) { + return allowRelative; + } + protocol = protocol[0].toLowerCase(); + switch (protocol) { + case 'http': + case 'https': + case 'ftp': + case 'mailto': + case 'tel': + return true; + default: + return false; + } +} +PDFJS.isValidUrl = isValidUrl; + +function shadow(obj, prop, value) { + Object.defineProperty(obj, prop, { value: value, + enumerable: true, + configurable: true, + writable: false }); + return value; +} +PDFJS.shadow = shadow; + +var PasswordResponses = PDFJS.PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 +}; + +var PasswordException = (function PasswordExceptionClosure() { + function PasswordException(msg, code) { + this.name = 'PasswordException'; + this.message = msg; + this.code = code; + } + + PasswordException.prototype = new Error(); + PasswordException.constructor = PasswordException; + + return PasswordException; +})(); +PDFJS.PasswordException = PasswordException; + +var UnknownErrorException = (function UnknownErrorExceptionClosure() { + function UnknownErrorException(msg, details) { + this.name = 'UnknownErrorException'; + this.message = msg; + this.details = details; + } + + UnknownErrorException.prototype = new Error(); + UnknownErrorException.constructor = UnknownErrorException; + + return UnknownErrorException; +})(); +PDFJS.UnknownErrorException = UnknownErrorException; + +var InvalidPDFException = (function InvalidPDFExceptionClosure() { + function InvalidPDFException(msg) { + this.name = 'InvalidPDFException'; + this.message = msg; + } + + InvalidPDFException.prototype = new Error(); + InvalidPDFException.constructor = InvalidPDFException; + + return InvalidPDFException; +})(); +PDFJS.InvalidPDFException = InvalidPDFException; + +var MissingPDFException = (function MissingPDFExceptionClosure() { + function MissingPDFException(msg) { + this.name = 'MissingPDFException'; + this.message = msg; + } + + MissingPDFException.prototype = new Error(); + MissingPDFException.constructor = MissingPDFException; + + return MissingPDFException; +})(); +PDFJS.MissingPDFException = MissingPDFException; + +var UnexpectedResponseException = + (function UnexpectedResponseExceptionClosure() { + function UnexpectedResponseException(msg, status) { + this.name = 'UnexpectedResponseException'; + this.message = msg; + this.status = status; + } + + UnexpectedResponseException.prototype = new Error(); + UnexpectedResponseException.constructor = UnexpectedResponseException; + + return UnexpectedResponseException; +})(); +PDFJS.UnexpectedResponseException = UnexpectedResponseException; + +var NotImplementedException = (function NotImplementedExceptionClosure() { + function NotImplementedException(msg) { + this.message = msg; + } + + NotImplementedException.prototype = new Error(); + NotImplementedException.prototype.name = 'NotImplementedException'; + NotImplementedException.constructor = NotImplementedException; + + return NotImplementedException; +})(); + +var MissingDataException = (function MissingDataExceptionClosure() { + function MissingDataException(begin, end) { + this.begin = begin; + this.end = end; + this.message = 'Missing data [' + begin + ', ' + end + ')'; + } + + MissingDataException.prototype = new Error(); + MissingDataException.prototype.name = 'MissingDataException'; + MissingDataException.constructor = MissingDataException; + + return MissingDataException; +})(); + +var XRefParseException = (function XRefParseExceptionClosure() { + function XRefParseException(msg) { + this.message = msg; + } + + XRefParseException.prototype = new Error(); + XRefParseException.prototype.name = 'XRefParseException'; + XRefParseException.constructor = XRefParseException; + + return XRefParseException; +})(); + + +function bytesToString(bytes) { + assert(bytes !== null && typeof bytes === 'object' && + bytes.length !== undefined, 'Invalid argument for bytesToString'); + var length = bytes.length; + var MAX_ARGUMENT_COUNT = 8192; + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + var strBuf = []; + for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + var chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + return strBuf.join(''); +} + +function stringToBytes(str) { + assert(typeof str === 'string', 'Invalid argument for stringToBytes'); + var length = str.length; + var bytes = new Uint8Array(length); + for (var i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 0xFF; + } + return bytes; +} + +function string32(value) { + return String.fromCharCode((value >> 24) & 0xff, (value >> 16) & 0xff, + (value >> 8) & 0xff, value & 0xff); +} + +function log2(x) { + var n = 1, i = 0; + while (x > n) { + n <<= 1; + i++; + } + return i; +} + +function readInt8(data, start) { + return (data[start] << 24) >> 24; +} + +function readUint16(data, offset) { + return (data[offset] << 8) | data[offset + 1]; +} + +function readUint32(data, offset) { + return ((data[offset] << 24) | (data[offset + 1] << 16) | + (data[offset + 2] << 8) | data[offset + 3]) >>> 0; +} + +// Lazy test the endianness of the platform +// NOTE: This will be 'true' for simulated TypedArrays +function isLittleEndian() { + var buffer8 = new Uint8Array(2); + buffer8[0] = 1; + var buffer16 = new Uint16Array(buffer8.buffer); + return (buffer16[0] === 1); +} + +Object.defineProperty(PDFJS, 'isLittleEndian', { + configurable: true, + get: function PDFJS_isLittleEndian() { + return shadow(PDFJS, 'isLittleEndian', isLittleEndian()); + } +}); + +//#if !(FIREFOX || MOZCENTRAL || B2G || CHROME) +//// Lazy test if the userAgant support CanvasTypedArrays +function hasCanvasTypedArrays() { + var canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1; + var ctx = canvas.getContext('2d'); + var imageData = ctx.createImageData(1, 1); + return (typeof imageData.data.buffer !== 'undefined'); +} + +Object.defineProperty(PDFJS, 'hasCanvasTypedArrays', { + configurable: true, + get: function PDFJS_hasCanvasTypedArrays() { + return shadow(PDFJS, 'hasCanvasTypedArrays', hasCanvasTypedArrays()); + } +}); + +var Uint32ArrayView = (function Uint32ArrayViewClosure() { + + function Uint32ArrayView(buffer, length) { + this.buffer = buffer; + this.byteLength = buffer.length; + this.length = length === undefined ? (this.byteLength >> 2) : length; + ensureUint32ArrayViewProps(this.length); + } + Uint32ArrayView.prototype = Object.create(null); + + var uint32ArrayViewSetters = 0; + function createUint32ArrayProp(index) { + return { + get: function () { + var buffer = this.buffer, offset = index << 2; + return (buffer[offset] | (buffer[offset + 1] << 8) | + (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)) >>> 0; + }, + set: function (value) { + var buffer = this.buffer, offset = index << 2; + buffer[offset] = value & 255; + buffer[offset + 1] = (value >> 8) & 255; + buffer[offset + 2] = (value >> 16) & 255; + buffer[offset + 3] = (value >>> 24) & 255; + } + }; + } + + function ensureUint32ArrayViewProps(length) { + while (uint32ArrayViewSetters < length) { + Object.defineProperty(Uint32ArrayView.prototype, + uint32ArrayViewSetters, + createUint32ArrayProp(uint32ArrayViewSetters)); + uint32ArrayViewSetters++; + } + } + + return Uint32ArrayView; +})(); +//#else +//PDFJS.hasCanvasTypedArrays = true; +//#endif + +var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; + +var Util = PDFJS.Util = (function UtilClosure() { + function Util() {} + + var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')']; + + // makeCssRgb() can be called thousands of times. Using |rgbBuf| avoids + // creating many intermediate strings. + Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { + rgbBuf[1] = r; + rgbBuf[3] = g; + rgbBuf[5] = b; + return rgbBuf.join(''); + }; + + // Concatenates two transformation matrices together and returns the result. + Util.transform = function Util_transform(m1, m2) { + return [ + m1[0] * m2[0] + m1[2] * m2[1], + m1[1] * m2[0] + m1[3] * m2[1], + m1[0] * m2[2] + m1[2] * m2[3], + m1[1] * m2[2] + m1[3] * m2[3], + m1[0] * m2[4] + m1[2] * m2[5] + m1[4], + m1[1] * m2[4] + m1[3] * m2[5] + m1[5] + ]; + }; + + // For 2d affine transforms + Util.applyTransform = function Util_applyTransform(p, m) { + var xt = p[0] * m[0] + p[1] * m[2] + m[4]; + var yt = p[0] * m[1] + p[1] * m[3] + m[5]; + return [xt, yt]; + }; + + Util.applyInverseTransform = function Util_applyInverseTransform(p, m) { + var d = m[0] * m[3] - m[1] * m[2]; + var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [xt, yt]; + }; + + // Applies the transform to the rectangle and finds the minimum axially + // aligned bounding box. + Util.getAxialAlignedBoundingBox = + function Util_getAxialAlignedBoundingBox(r, m) { + + var p1 = Util.applyTransform(r, m); + var p2 = Util.applyTransform(r.slice(2, 4), m); + var p3 = Util.applyTransform([r[0], r[3]], m); + var p4 = Util.applyTransform([r[2], r[1]], m); + return [ + Math.min(p1[0], p2[0], p3[0], p4[0]), + Math.min(p1[1], p2[1], p3[1], p4[1]), + Math.max(p1[0], p2[0], p3[0], p4[0]), + Math.max(p1[1], p2[1], p3[1], p4[1]) + ]; + }; + + Util.inverseTransform = function Util_inverseTransform(m) { + var d = m[0] * m[3] - m[1] * m[2]; + return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, + (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; + }; + + // Apply a generic 3d matrix M on a 3-vector v: + // | a b c | | X | + // | d e f | x | Y | + // | g h i | | Z | + // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i], + // with v as [X,Y,Z] + Util.apply3dTransform = function Util_apply3dTransform(m, v) { + return [ + m[0] * v[0] + m[1] * v[1] + m[2] * v[2], + m[3] * v[0] + m[4] * v[1] + m[5] * v[2], + m[6] * v[0] + m[7] * v[1] + m[8] * v[2] + ]; + }; + + // This calculation uses Singular Value Decomposition. + // The SVD can be represented with formula A = USV. We are interested in the + // matrix S here because it represents the scale values. + Util.singularValueDecompose2dScale = + function Util_singularValueDecompose2dScale(m) { + + var transpose = [m[0], m[2], m[1], m[3]]; + + // Multiply matrix m with its transpose. + var a = m[0] * transpose[0] + m[1] * transpose[2]; + var b = m[0] * transpose[1] + m[1] * transpose[3]; + var c = m[2] * transpose[0] + m[3] * transpose[2]; + var d = m[2] * transpose[1] + m[3] * transpose[3]; + + // Solve the second degree polynomial to get roots. + var first = (a + d) / 2; + var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; + var sx = first + second || 1; + var sy = first - second || 1; + + // Scale values are the square roots of the eigenvalues. + return [Math.sqrt(sx), Math.sqrt(sy)]; + }; + + // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2) + // For coordinate systems whose origin lies in the bottom-left, this + // means normalization to (BL,TR) ordering. For systems with origin in the + // top-left, this means (TL,BR) ordering. + Util.normalizeRect = function Util_normalizeRect(rect) { + var r = rect.slice(0); // clone rect + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + return r; + }; + + // Returns a rectangle [x1, y1, x2, y2] corresponding to the + // intersection of rect1 and rect2. If no intersection, returns 'false' + // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2] + Util.intersect = function Util_intersect(rect1, rect2) { + function compare(a, b) { + return a - b; + } + + // Order points along the axes + var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare), + orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare), + result = []; + + rect1 = Util.normalizeRect(rect1); + rect2 = Util.normalizeRect(rect2); + + // X: first and second points belong to different rectangles? + if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) || + (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) { + // Intersection must be between second and third points + result[0] = orderedX[1]; + result[2] = orderedX[2]; + } else { + return false; + } + + // Y: first and second points belong to different rectangles? + if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) || + (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) { + // Intersection must be between second and third points + result[1] = orderedY[1]; + result[3] = orderedY[2]; + } else { + return false; + } + + return result; + }; + + Util.sign = function Util_sign(num) { + return num < 0 ? -1 : 1; + }; + + Util.appendToArray = function Util_appendToArray(arr1, arr2) { + Array.prototype.push.apply(arr1, arr2); + }; + + Util.prependToArray = function Util_prependToArray(arr1, arr2) { + Array.prototype.unshift.apply(arr1, arr2); + }; + + Util.extendObj = function extendObj(obj1, obj2) { + for (var key in obj2) { + obj1[key] = obj2[key]; + } + }; + + Util.getInheritableProperty = function Util_getInheritableProperty(dict, + name) { + while (dict && !dict.has(name)) { + dict = dict.get('Parent'); + } + if (!dict) { + return null; + } + return dict.get(name); + }; + + Util.inherit = function Util_inherit(sub, base, prototype) { + sub.prototype = Object.create(base.prototype); + sub.prototype.constructor = sub; + for (var prop in prototype) { + sub.prototype[prop] = prototype[prop]; + } + }; + + Util.loadScript = function Util_loadScript(src, callback) { + var script = document.createElement('script'); + var loaded = false; + script.setAttribute('src', src); + if (callback) { + script.onload = function() { + if (!loaded) { + callback(); + } + loaded = true; + }; + } + document.getElementsByTagName('head')[0].appendChild(script); + }; + + return Util; +})(); + +/** + * PDF page viewport created based on scale, rotation and offset. + * @class + * @alias PDFJS.PageViewport + */ +var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() { + /** + * @constructor + * @private + * @param viewBox {Array} xMin, yMin, xMax and yMax coordinates. + * @param scale {number} scale of the viewport. + * @param rotation {number} rotations of the viewport in degrees. + * @param offsetX {number} offset X + * @param offsetY {number} offset Y + * @param dontFlip {boolean} if true, axis Y will not be flipped. + */ + function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + + // creating transform to convert pdf coordinate system to the normal + // canvas like coordinates taking in account scale and rotation + var centerX = (viewBox[2] + viewBox[0]) / 2; + var centerY = (viewBox[3] + viewBox[1]) / 2; + var rotateA, rotateB, rotateC, rotateD; + rotation = rotation % 360; + rotation = rotation < 0 ? rotation + 360 : rotation; + switch (rotation) { + case 180: + rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1; + break; + case 90: + rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0; + break; + case 270: + rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0; + break; + //case 0: + default: + rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; + break; + } + + if (dontFlip) { + rotateC = -rotateC; rotateD = -rotateD; + } + + var offsetCanvasX, offsetCanvasY; + var width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = Math.abs(viewBox[3] - viewBox[1]) * scale; + height = Math.abs(viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = Math.abs(viewBox[2] - viewBox[0]) * scale; + height = Math.abs(viewBox[3] - viewBox[1]) * scale; + } + // creating transform for the following operations: + // translate(-centerX, -centerY), rotate and flip vertically, + // scale, and translate(offsetCanvasX, offsetCanvasY) + this.transform = [ + rotateA * scale, + rotateB * scale, + rotateC * scale, + rotateD * scale, + offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, + offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY + ]; + + this.width = width; + this.height = height; + this.fontScale = scale; + } + PageViewport.prototype = /** @lends PDFJS.PageViewport.prototype */ { + /** + * Clones viewport with additional properties. + * @param args {Object} (optional) If specified, may contain the 'scale' or + * 'rotation' properties to override the corresponding properties in + * the cloned viewport. + * @returns {PDFJS.PageViewport} Cloned viewport. + */ + clone: function PageViewPort_clone(args) { + args = args || {}; + var scale = 'scale' in args ? args.scale : this.scale; + var rotation = 'rotation' in args ? args.rotation : this.rotation; + return new PageViewport(this.viewBox.slice(), scale, rotation, + this.offsetX, this.offsetY, args.dontFlip); + }, + /** + * Converts PDF point to the viewport coordinates. For examples, useful for + * converting PDF location into canvas pixel coordinates. + * @param x {number} X coordinate. + * @param y {number} Y coordinate. + * @returns {Object} Object that contains 'x' and 'y' properties of the + * point in the viewport coordinate space. + * @see {@link convertToPdfPoint} + * @see {@link convertToViewportRectangle} + */ + convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) { + return Util.applyTransform([x, y], this.transform); + }, + /** + * Converts PDF rectangle to the viewport coordinates. + * @param rect {Array} xMin, yMin, xMax and yMax coordinates. + * @returns {Array} Contains corresponding coordinates of the rectangle + * in the viewport coordinate space. + * @see {@link convertToViewportPoint} + */ + convertToViewportRectangle: + function PageViewport_convertToViewportRectangle(rect) { + var tl = Util.applyTransform([rect[0], rect[1]], this.transform); + var br = Util.applyTransform([rect[2], rect[3]], this.transform); + return [tl[0], tl[1], br[0], br[1]]; + }, + /** + * Converts viewport coordinates to the PDF location. For examples, useful + * for converting canvas pixel location into PDF one. + * @param x {number} X coordinate. + * @param y {number} Y coordinate. + * @returns {Object} Object that contains 'x' and 'y' properties of the + * point in the PDF coordinate space. + * @see {@link convertToViewportPoint} + */ + convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) { + return Util.applyInverseTransform([x, y], this.transform); + } + }; + return PageViewport; +})(); + +var PDFStringTranslateTable = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, + 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, + 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, + 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC +]; + +function stringToPDFString(str) { + var i, n = str.length, strBuf = []; + if (str[0] === '\xFE' && str[1] === '\xFF') { + // UTF16BE BOM + for (i = 2; i < n; i += 2) { + strBuf.push(String.fromCharCode( + (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1))); + } + } else { + for (i = 0; i < n; ++i) { + var code = PDFStringTranslateTable[str.charCodeAt(i)]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } + } + return strBuf.join(''); +} + +function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); +} + +function isEmptyObj(obj) { + for (var key in obj) { + return false; + } + return true; +} + +function isBool(v) { + return typeof v === 'boolean'; +} + +function isInt(v) { + return typeof v === 'number' && ((v | 0) === v); +} + +function isNum(v) { + return typeof v === 'number'; +} + +function isString(v) { + return typeof v === 'string'; +} + +function isNull(v) { + return v === null; +} + +function isName(v) { + return v instanceof Name; +} + +function isCmd(v, cmd) { + return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); +} + +function isDict(v, type) { + if (!(v instanceof Dict)) { + return false; + } + if (!type) { + return true; + } + var dictType = v.get('Type'); + return isName(dictType) && dictType.name === type; +} + +function isArray(v) { + return v instanceof Array; +} + +function isStream(v) { + return typeof v === 'object' && v !== null && v.getBytes !== undefined; +} + +function isArrayBuffer(v) { + return typeof v === 'object' && v !== null && v.byteLength !== undefined; +} + +function isRef(v) { + return v instanceof Ref; +} + +/** + * Promise Capability object. + * + * @typedef {Object} PromiseCapability + * @property {Promise} promise - A promise object. + * @property {function} resolve - Fullfills the promise. + * @property {function} reject - Rejects the promise. + */ + +/** + * Creates a promise capability object. + * @alias PDFJS.createPromiseCapability + * + * @return {PromiseCapability} A capability object contains: + * - a Promise, resolve and reject methods. + */ +function createPromiseCapability() { + var capability = {}; + capability.promise = new Promise(function (resolve, reject) { + capability.resolve = resolve; + capability.reject = reject; + }); + return capability; +} + +PDFJS.createPromiseCapability = createPromiseCapability; + +/** + * Polyfill for Promises: + * The following promise implementation tries to generally implement the + * Promise/A+ spec. Some notable differences from other promise libaries are: + * - There currently isn't a seperate deferred and promise object. + * - Unhandled rejections eventually show an error if they aren't handled. + * + * Based off of the work in: + * https://bugzilla.mozilla.org/show_bug.cgi?id=810490 + */ +(function PromiseClosure() { + if (globalScope.Promise) { + // Promises existing in the DOM/Worker, checking presence of all/resolve + if (typeof globalScope.Promise.all !== 'function') { + globalScope.Promise.all = function (iterable) { + var count = 0, results = [], resolve, reject; + var promise = new globalScope.Promise(function (resolve_, reject_) { + resolve = resolve_; + reject = reject_; + }); + iterable.forEach(function (p, i) { + count++; + p.then(function (result) { + results[i] = result; + count--; + if (count === 0) { + resolve(results); + } + }, reject); + }); + if (count === 0) { + resolve(results); + } + return promise; + }; + } + if (typeof globalScope.Promise.resolve !== 'function') { + globalScope.Promise.resolve = function (value) { + return new globalScope.Promise(function (resolve) { resolve(value); }); + }; + } + if (typeof globalScope.Promise.reject !== 'function') { + globalScope.Promise.reject = function (reason) { + return new globalScope.Promise(function (resolve, reject) { + reject(reason); + }); + }; + } + if (typeof globalScope.Promise.prototype.catch !== 'function') { + globalScope.Promise.prototype.catch = function (onReject) { + return globalScope.Promise.prototype.then(undefined, onReject); + }; + } + return; + } +//#if !MOZCENTRAL + var STATUS_PENDING = 0; + var STATUS_RESOLVED = 1; + var STATUS_REJECTED = 2; + + // In an attempt to avoid silent exceptions, unhandled rejections are + // tracked and if they aren't handled in a certain amount of time an + // error is logged. + var REJECTION_TIMEOUT = 500; + + var HandlerManager = { + handlers: [], + running: false, + unhandledRejections: [], + pendingRejectionCheck: false, + + scheduleHandlers: function scheduleHandlers(promise) { + if (promise._status === STATUS_PENDING) { + return; + } + + this.handlers = this.handlers.concat(promise._handlers); + promise._handlers = []; + + if (this.running) { + return; + } + this.running = true; + + setTimeout(this.runHandlers.bind(this), 0); + }, + + runHandlers: function runHandlers() { + var RUN_TIMEOUT = 1; // ms + var timeoutAt = Date.now() + RUN_TIMEOUT; + while (this.handlers.length > 0) { + var handler = this.handlers.shift(); + + var nextStatus = handler.thisPromise._status; + var nextValue = handler.thisPromise._value; + + try { + if (nextStatus === STATUS_RESOLVED) { + if (typeof handler.onResolve === 'function') { + nextValue = handler.onResolve(nextValue); + } + } else if (typeof handler.onReject === 'function') { + nextValue = handler.onReject(nextValue); + nextStatus = STATUS_RESOLVED; + + if (handler.thisPromise._unhandledRejection) { + this.removeUnhandeledRejection(handler.thisPromise); + } + } + } catch (ex) { + nextStatus = STATUS_REJECTED; + nextValue = ex; + } + + handler.nextPromise._updateStatus(nextStatus, nextValue); + if (Date.now() >= timeoutAt) { + break; + } + } + + if (this.handlers.length > 0) { + setTimeout(this.runHandlers.bind(this), 0); + return; + } + + this.running = false; + }, + + addUnhandledRejection: function addUnhandledRejection(promise) { + this.unhandledRejections.push({ + promise: promise, + time: Date.now() + }); + this.scheduleRejectionCheck(); + }, + + removeUnhandeledRejection: function removeUnhandeledRejection(promise) { + promise._unhandledRejection = false; + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (this.unhandledRejections[i].promise === promise) { + this.unhandledRejections.splice(i); + i--; + } + } + }, + + scheduleRejectionCheck: function scheduleRejectionCheck() { + if (this.pendingRejectionCheck) { + return; + } + this.pendingRejectionCheck = true; + setTimeout(function rejectionCheck() { + this.pendingRejectionCheck = false; + var now = Date.now(); + for (var i = 0; i < this.unhandledRejections.length; i++) { + if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) { + var unhandled = this.unhandledRejections[i].promise._value; + var msg = 'Unhandled rejection: ' + unhandled; + if (unhandled.stack) { + msg += '\n' + unhandled.stack; + } + warn(msg); + this.unhandledRejections.splice(i); + i--; + } + } + if (this.unhandledRejections.length) { + this.scheduleRejectionCheck(); + } + }.bind(this), REJECTION_TIMEOUT); + } + }; + + function Promise(resolver) { + this._status = STATUS_PENDING; + this._handlers = []; + try { + resolver.call(this, this._resolve.bind(this), this._reject.bind(this)); + } catch (e) { + this._reject(e); + } + } + /** + * Builds a promise that is resolved when all the passed in promises are + * resolved. + * @param {array} array of data and/or promises to wait for. + * @return {Promise} New dependant promise. + */ + Promise.all = function Promise_all(promises) { + var resolveAll, rejectAll; + var deferred = new Promise(function (resolve, reject) { + resolveAll = resolve; + rejectAll = reject; + }); + var unresolved = promises.length; + var results = []; + if (unresolved === 0) { + resolveAll(results); + return deferred; + } + function reject(reason) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results = []; + rejectAll(reason); + } + for (var i = 0, ii = promises.length; i < ii; ++i) { + var promise = promises[i]; + var resolve = (function(i) { + return function(value) { + if (deferred._status === STATUS_REJECTED) { + return; + } + results[i] = value; + unresolved--; + if (unresolved === 0) { + resolveAll(results); + } + }; + })(i); + if (Promise.isPromise(promise)) { + promise.then(resolve, reject); + } else { + resolve(promise); + } + } + return deferred; + }; + + /** + * Checks if the value is likely a promise (has a 'then' function). + * @return {boolean} true if value is thenable + */ + Promise.isPromise = function Promise_isPromise(value) { + return value && typeof value.then === 'function'; + }; + + /** + * Creates resolved promise + * @param value resolve value + * @returns {Promise} + */ + Promise.resolve = function Promise_resolve(value) { + return new Promise(function (resolve) { resolve(value); }); + }; + + /** + * Creates rejected promise + * @param reason rejection value + * @returns {Promise} + */ + Promise.reject = function Promise_reject(reason) { + return new Promise(function (resolve, reject) { reject(reason); }); + }; + + Promise.prototype = { + _status: null, + _value: null, + _handlers: null, + _unhandledRejection: null, + + _updateStatus: function Promise__updateStatus(status, value) { + if (this._status === STATUS_RESOLVED || + this._status === STATUS_REJECTED) { + return; + } + + if (status === STATUS_RESOLVED && + Promise.isPromise(value)) { + value.then(this._updateStatus.bind(this, STATUS_RESOLVED), + this._updateStatus.bind(this, STATUS_REJECTED)); + return; + } + + this._status = status; + this._value = value; + + if (status === STATUS_REJECTED && this._handlers.length === 0) { + this._unhandledRejection = true; + HandlerManager.addUnhandledRejection(this); + } + + HandlerManager.scheduleHandlers(this); + }, + + _resolve: function Promise_resolve(value) { + this._updateStatus(STATUS_RESOLVED, value); + }, + + _reject: function Promise_reject(reason) { + this._updateStatus(STATUS_REJECTED, reason); + }, + + then: function Promise_then(onResolve, onReject) { + var nextPromise = new Promise(function (resolve, reject) { + this.resolve = resolve; + this.reject = reject; + }); + this._handlers.push({ + thisPromise: this, + onResolve: onResolve, + onReject: onReject, + nextPromise: nextPromise + }); + HandlerManager.scheduleHandlers(this); + return nextPromise; + }, + + catch: function Promise_catch(onReject) { + return this.then(undefined, onReject); + } + }; + + globalScope.Promise = Promise; +//#else +//throw new Error('DOM Promise is not present'); +//#endif +})(); + +var StatTimer = (function StatTimerClosure() { + function rpad(str, pad, length) { + while (str.length < length) { + str += pad; + } + return str; + } + function StatTimer() { + this.started = {}; + this.times = []; + this.enabled = true; + } + StatTimer.prototype = { + time: function StatTimer_time(name) { + if (!this.enabled) { + return; + } + if (name in this.started) { + warn('Timer is already running for ' + name); + } + this.started[name] = Date.now(); + }, + timeEnd: function StatTimer_timeEnd(name) { + if (!this.enabled) { + return; + } + if (!(name in this.started)) { + warn('Timer has not been started for ' + name); + } + this.times.push({ + 'name': name, + 'start': this.started[name], + 'end': Date.now() + }); + // Remove timer from started so it can be called again. + delete this.started[name]; + }, + toString: function StatTimer_toString() { + var i, ii; + var times = this.times; + var out = ''; + // Find the longest name for padding purposes. + var longest = 0; + for (i = 0, ii = times.length; i < ii; ++i) { + var name = times[i]['name']; + if (name.length > longest) { + longest = name.length; + } + } + for (i = 0, ii = times.length; i < ii; ++i) { + var span = times[i]; + var duration = span.end - span.start; + out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n'; + } + return out; + } + }; + return StatTimer; +})(); + +PDFJS.createBlob = function createBlob(data, contentType) { + if (typeof Blob !== 'undefined') { + return new Blob([data], { type: contentType }); + } + // Blob builder is deprecated in FF14 and removed in FF18. + var bb = new MozBlobBuilder(); + bb.append(data); + return bb.getBlob(contentType); +}; + +PDFJS.createObjectURL = (function createObjectURLClosure() { + // Blob/createObjectURL is not available, falling back to data schema. + var digits = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + return function createObjectURL(data, contentType) { + if (!PDFJS.disableCreateObjectURL && + typeof URL !== 'undefined' && URL.createObjectURL) { + var blob = PDFJS.createBlob(data, contentType); + return URL.createObjectURL(blob); + } + + var buffer = 'data:' + contentType + ';base64,'; + for (var i = 0, ii = data.length; i < ii; i += 3) { + var b1 = data[i] & 0xFF; + var b2 = data[i + 1] & 0xFF; + var b3 = data[i + 2] & 0xFF; + var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4); + var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64; + var d4 = i + 2 < ii ? (b3 & 0x3F) : 64; + buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; + } + return buffer; + }; +})(); + +function MessageHandler(name, comObj) { + this.name = name; + this.comObj = comObj; + this.callbackIndex = 1; + this.postMessageTransfers = true; + var callbacksCapabilities = this.callbacksCapabilities = {}; + var ah = this.actionHandler = {}; + + ah['console_log'] = [function ahConsoleLog(data) { + console.log.apply(console, data); + }]; + ah['console_error'] = [function ahConsoleError(data) { + console.error.apply(console, data); + }]; + ah['_unsupported_feature'] = [function ah_unsupportedFeature(data) { + UnsupportedManager.notify(data); + }]; + + comObj.onmessage = function messageHandlerComObjOnMessage(event) { + var data = event.data; + if (data.isReply) { + var callbackId = data.callbackId; + if (data.callbackId in callbacksCapabilities) { + var callback = callbacksCapabilities[callbackId]; + delete callbacksCapabilities[callbackId]; + if ('error' in data) { + callback.reject(data.error); + } else { + callback.resolve(data.data); + } + } else { + error('Cannot resolve callback ' + callbackId); + } + } else if (data.action in ah) { + var action = ah[data.action]; + if (data.callbackId) { + Promise.resolve().then(function () { + return action[0].call(action[1], data.data); + }).then(function (result) { + comObj.postMessage({ + isReply: true, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + comObj.postMessage({ + isReply: true, + callbackId: data.callbackId, + error: reason + }); + }); + } else { + action[0].call(action[1], data.data); + } + } else { + error('Unknown action from worker: ' + data.action); + } + }; +} + +MessageHandler.prototype = { + on: function messageHandlerOn(actionName, handler, scope) { + var ah = this.actionHandler; + if (ah[actionName]) { + error('There is already an actionName called "' + actionName + '"'); + } + ah[actionName] = [handler, scope]; + }, + /** + * Sends a message to the comObj to invoke the action with the supplied data. + * @param {String} actionName Action to call. + * @param {JSON} data JSON data to send. + * @param {Array} [transfers] Optional list of transfers/ArrayBuffers + */ + send: function messageHandlerSend(actionName, data, transfers) { + var message = { + action: actionName, + data: data + }; + this.postMessage(message, transfers); + }, + /** + * Sends a message to the comObj to invoke the action with the supplied data. + * Expects that other side will callback with the response. + * @param {String} actionName Action to call. + * @param {JSON} data JSON data to send. + * @param {Array} [transfers] Optional list of transfers/ArrayBuffers. + * @returns {Promise} Promise to be resolved with response data. + */ + sendWithPromise: + function messageHandlerSendWithPromise(actionName, data, transfers) { + var callbackId = this.callbackIndex++; + var message = { + action: actionName, + data: data, + callbackId: callbackId + }; + var capability = createPromiseCapability(); + this.callbacksCapabilities[callbackId] = capability; + try { + this.postMessage(message, transfers); + } catch (e) { + capability.reject(e); + } + return capability.promise; + }, + /** + * Sends raw message to the comObj. + * @private + * @param message {Object} Raw message. + * @param transfers List of transfers/ArrayBuffers, or undefined. + */ + postMessage: function (message, transfers) { + if (transfers && this.postMessageTransfers) { + this.comObj.postMessage(message, transfers); + } else { + this.comObj.postMessage(message); + } + } +}; + +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = JpxImage; +} + +function loadJpegStream(id, imageUrl, objs) { + var img = new Image(); + img.onload = (function loadJpegStream_onloadClosure() { + objs.resolve(id, img); + }); + img.onerror = (function loadJpegStream_onerrorClosure() { + objs.resolve(id, null); + warn('Error during JPEG image loading'); + }); + img.src = imageUrl; +} + +/***/ }), + +/***/ "./node_modules/OpenJPEG.js/dist/openJPEG-DynamicMemory-browser.js": +/*!*************************************************************************!*\ + !*** ./node_modules/OpenJPEG.js/dist/openJPEG-DynamicMemory-browser.js ***! + \*************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __nested_webpack_require_175451__) { + +/* WEBPACK VAR INJECTION */(function(process, Buffer) {/*! OpenJPEG.js - v0.10.1 - 2018-03-13 | (c) 2016 Chris Hafey | https://github.com/chafey/openjpeg */ +var OpenJPEG = function(OpenJPEG) { + OpenJPEG = OpenJPEG || {}; + +var Module=typeof OpenJPEG!=="undefined"?OpenJPEG:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&"function"==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=__nested_webpack_require_175451__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js");if(!nodePath)nodePath=__nested_webpack_require_175451__(/*! path */ "./node_modules/path-browserify/index.js");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(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);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(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 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>2]=q;i=1;h=f[l>>2]|0}k=k+1|0}while(k>>>0>>0);if(i|0)Mb(g,2,4792,m)|0}}while(0);h=d[K>>1]|0;b:do if((h+-3&65535)>=4){if(h<<16>>16==7){Mb(g,2,6952,o)|0;d[K>>1]=0;break}if((h+-256&65535)<524){Mb(g,2,7007,r)|0;d[K>>1]=0;break}if((h+-1024&65535)<1180){Mb(g,2,7055,s)|0;d[K>>1]=0;break}if(h<<16>>16<=-1)switch(h<<16>>16){case -32512:break b;case -32768:{Mb(g,2,7097,t)|0;d[K>>1]=0;break b}default:{Mb(g,2,7185,v)|0;d[K>>1]=0;break b}}}else{if((h+-5&65535)<2){Mb(g,2,4884,w)|0;d[K>>1]=0;break}f[c>>2]=0;f[c+12>>2]=1;f[c+16>>2]=1;b[c+18689>>0]=67;b[c+18688>>0]=1;f[c+4>>2]=0;f[c+8>>2]=0;f[c+18180>>2]=0;f[c+18184>>2]=0;f[c+5596>>2]=32;f[c+5600>>2]=32;f[c+5604>>2]=0;f[c+5612>>2]=-1;f[c+18188>>2]=1;f[c+18192>>2]=1;f[c+5608>>2]=1;i=c+4788|0;j=f[i>>2]|0;if((j|0)>1){ja=+n[c+4792+(j+-1<<2)>>2];f[x>>2]=j;p[x+8>>3]=ja;Mb(g,2,4946,x)|0;f[c+4792>>2]=f[c+4792+((f[i>>2]|0)+-1<<2)>>2];f[i>>2]=1;h=d[K>>1]|0}c:do switch(h<<16>>16){case 3:{h=f[$>>2]|0;if((h|0)>6){f[y>>2]=h+1;Mb(g,2,5119,y)|0;f[$>>2]=6;h=6}break}case 4:{h=f[$>>2]|0;if((h|0)<2){f[z>>2]=h+1;Mb(g,2,5265,z)|0;f[$>>2]=1;h=1;break c}if((h|0)>7){f[A>>2]=h+1;Mb(g,2,5419,A)|0;f[$>>2]=7;h=7}break}default:h=f[$>>2]|0}while(0);i=c+40|0;f[i>>2]=f[i>>2]|1;i=c+5620|0;f[i>>2]=h+-1;if((h|0)>1){h=0;do{f[c+5624+(h<<2)>>2]=256;f[c+5756+(h<<2)>>2]=256;h=h+1|0}while((h|0)<(f[i>>2]|0))}f[c+44>>2]=4;if((d[K>>1]|0)==4){h=f[$>>2]|0;f[c+96>>2]=1;f[c+48>>2]=0;f[c+52>>2]=0;f[c+56>>2]=1;W=h+-1|0;f[c+60>>2]=W;f[c+64>>2]=3;f[c+80>>2]=4;f[c+244>>2]=1;f[c+196>>2]=W;f[c+200>>2]=0;f[c+204>>2]=1;f[c+208>>2]=h;f[c+212>>2]=3;f[c+228>>2]=4;h=2}else h=0;f[c+4784>>2]=h;f[c+20>>2]=1;h=f[B>>2]|0;if((h|0)>=1){if((h|0)>1302083){Mb(g,2,5722,D)|0;f[B>>2]=1302083}}else{f[B>>2]=1302083;Mb(g,2,5573,C)|0}h=c+18680|0;i=f[h>>2]|0;if((i|0)>=1){if((i|0)>1041666){Mb(g,2,6044,F)|0;f[h>>2]=1041666}}else{f[h>>2]=1041666;Mb(g,2,5895,E)|0}h=f[e+16>>2]|0;i=f[e+24>>2]|0;k=f[i+8>>2]|0;j=X(k,h)|0;m=f[i+12>>2]|0;j=X(j,m)|0;ja=+((X(j,f[i+24>>2]|0)|0)>>>0);j=X(f[B>>2]<<3,f[i>>2]|0)|0;ja=ja/+((X(j,f[i+4>>2]|0)|0)>>>0);n[c+4792>>2]=ja;j=d[K>>1]|0;d:do if((h|0)==3){h=f[i+28>>2]|0;l=f[i+32>>2]|0;if(!(l|(h|0)!=12)){h=f[i+80>>2]|0;l=f[i+84>>2]|0;if(!(l|(h|0)!=12)){h=f[i+132>>2]|0;i=f[i+136>>2]|0;if(!(i|(h|0)!=12))switch(j<<16>>16){case 3:{if(!(k>>>0>2048|m>>>0>1080))break b;f[H>>2]=k;f[H+4>>2]=m;Mb(g,2,6616,H)|0;break d}case 4:{if(!(k>>>0>4096|m>>>0>2160))break b;f[I>>2]=k;f[I+4>>2]=m;Mb(g,2,6787,I)|0;break d}default:break b}else{m=2;l=i}}else m=1}else m=0;b[L>>0]=b[6383]|0;b[L+1>>0]=b[6384]|0;b[L+2>>0]=b[6385]|0;b[L+3>>0]=b[6386]|0;b[L+4>>0]=b[6387]|0;b[L+5>>0]=b[6388]|0;b[L+6>>0]=b[6389]|0;i=M;j=6390;k=i+9|0;do{b[i>>0]=b[j>>0]|0;i=i+1|0;j=j+1|0}while((i|0)<(k|0));f[N>>2]=m;f[N+4>>2]=h;f[N+8>>2]=l|0?L:M;Mb(g,2,6399,N)|0}else{f[G>>2]=h;Mb(g,2,6217,G)|0}while(0);d[K>>1]=0}while(0);f[a+168>>2]=f[c+18680>>2];W=a+88|0;d[W>>1]=d[K>>1]|0;N=a+181|0;L=b[N>>0]&-2|f[c+20>>2]&1;b[N>>0]=L;M=c+24|0;L=(f[M>>2]&255)<<1&2|L&-3;b[N>>0]=L;b[N>>0]=L&-5|(f[c+28>>2]&255)<<2&4;do if(f[M>>2]|0?(O=c+32|0,f[O>>2]|0):0){h=X((f[c+4788>>2]|0)*12|0,f[$>>2]|0)|0;i=Hc(h)|0;f[a+176>>2]=i;if(i|0){hj(i|0,f[O>>2]|0,h|0)|0;break}Mb(g,1,7244,P)|0;ha=0;u=ia;return ha|0}while(0);k=a+100|0;f[k>>2]=f[c+12>>2];l=a+104|0;f[l>>2]=f[c+16>>2];j=a+92|0;f[j>>2]=f[c+4>>2];m=a+96|0;f[m>>2]=f[c+8>>2];i=c+36|0;h=f[i>>2]|0;do if(!h){h=xc()|0;i=Hc((Kh(h)|0)+29|0)|0;f[a+108>>2]=i;if(i|0){f[S>>2]=7421;f[S+4>>2]=h;Li(i,7416,S)|0;break}Mb(g,1,7370,R)|0;ha=0;u=ia;return ha|0}else{h=Hc((Kh(h)|0)+1|0)|0;f[a+108>>2]=h;if(h|0){Ji(h,f[i>>2]|0)|0;break}Mb(g,1,7316,Q)|0;ha=0;u=ia;return ha|0}while(0);h=(f[e+8>>2]|0)-(f[j>>2]|0)|0;if(!(f[c>>2]|0)){f[k>>2]=h;f[l>>2]=(f[e+12>>2]|0)-(f[m>>2]|0)}else{S=f[k>>2]|0;f[Z>>2]=(h+-1+S|0)/(S|0)|0;S=f[l>>2]|0;f[_>>2]=((f[e+12>>2]|0)+-1-(f[m>>2]|0)+S|0)/(S|0)|0}if(b[c+18688>>0]|0){b[a+180>>0]=b[c+18689>>0]|0;b[N>>0]=b[N>>0]|8}S=Ic(X(f[_>>2]|0,f[Z>>2]|0)|0,5640)|0;M=a+164|0;f[M>>2]=S;if(!S){Mb(g,1,7450,T)|0;ha=0;u=ia;return ha|0}L=c+4784|0;A=f[L>>2]|0;do if(A|0){w=c+48|0;B=f[$>>2]|0;C=f[e+16>>2]|0;D=f[c+4788>>2]|0;E=X(C,B)|0;F=Ic(X(E,D)|0,4)|0;if(!F){Mb(g,1,7504,U)|0;break}h=f[w>>2]|0;r=c+60|0;j=f[r>>2]|0;if(h>>>0 >>0){o=X(h,C)|0;s=c+52|0;t=c+64|0;v=c+56|0;i=f[t>>2]|0;while(1){k=f[s>>2]|0;if(k>>>0>>0){m=k+o|0;j=f[v>>2]|0;while(1){if(!j)j=0;else{i=m;l=0;while(1){f[F+(i<<2)>>2]=1;l=l+1|0;j=f[v>>2]|0;if(l>>>0>=j>>>0)break;else i=i+E|0}i=f[t>>2]|0}k=k+1|0;if(k>>>0>=i>>>0)break;else m=m+1|0}j=f[r>>2]|0}h=h+1|0;if(h>>>0>=j>>>0)break;else o=o+C|0}}if(A>>>0>1){t=1;do{h=w;w=w+148|0;x=f[h+8>>2]|0;v=h+156|0;l=f[v>>2]|0;x=l>>>0>x>>>0?x:0;i=f[w>>2]|0;y=h+160|0;j=f[y>>2]|0;if(i>>>0 >>0){o=X(i,C)|0;z=h+152|0;r=h+164|0;s=X(x,E)|0;h=f[r>>2]|0;while(1){k=f[z>>2]|0;if(k>>>0 >>0){m=k+o|0;while(1){if(x>>>0 >>0){h=m+s|0;j=x;while(1){f[F+(h<<2)>>2]=1;j=j+1|0;l=f[v>>2]|0;if(j>>>0>=l>>>0)break;else h=h+E|0}h=f[r>>2]|0}k=k+1|0;if(k>>>0>=h>>>0)break;else m=m+1|0}j=f[y>>2]|0}i=i+1|0;if(i>>>0>=j>>>0)break;else o=o+C|0}}t=t+1|0}while((t|0)!=(A|0))}if(!((D|0)==0|(B|0)==0|(C|0)==0)){h=0;m=0;o=0;while(1){j=0;l=m;while(1){k=0;i=l;while(1){h=h|(f[F+(i<<2)>>2]|0)!=1;k=k+1|0;if((k|0)==(C|0))break;else i=i+1|0}j=j+1|0;if((j|0)==(B|0))break;else l=l+C|0}o=o+1|0;if((o|0)==(D|0))break;else m=m+E|0}if(h|0)Mb(g,1,7552,V)|0}Mc(F)}while(0);e:do if(X(f[_>>2]|0,f[Z>>2]|0)|0){x=c+4788|0;y=c+40|0;z=c+44|0;A=c+18690|0;B=e+16|0;i=c+18696|0;C=e+24|0;D=c+5596|0;E=c+5600|0;F=c+5604|0;G=c+5608|0;H=c+5612|0;I=c+5616|0;K=c+5620|0;w=0;f:while(1){o=f[M>>2]|0;r=o+(w*5640|0)|0;V=f[x>>2]|0;j=o+(w*5640|0)+8|0;f[j>>2]=V;g:do if(V|0){if(((d[W>>1]|0)+-3&65535)<4)h=0;else{h=0;while(1){V=(b[N>>0]&4)==0;f[(V?o+(w*5640|0)+20+(h<<2)|0:o+(w*5640|0)+5184+(h<<2)|0)>>2]=f[(V?c+4792+(h<<2)|0:c+5192+(h<<2)|0)>>2];h=h+1|0;if(h>>>0>=(f[j>>2]|0)>>>0)break g}}do{if(b[N>>0]&4)f[o+(w*5640|0)+5184+(h<<2)>>2]=f[c+5192+(h<<2)>>2];f[o+(w*5640|0)+20+(h<<2)>>2]=f[c+4792+(h<<2)>>2];h=h+1|0}while(h>>>0<(f[j>>2]|0)>>>0)}while(0);f[r>>2]=f[y>>2];f[o+(w*5640|0)+4>>2]=f[z>>2];m=o+(w*5640|0)+16|0;f[m>>2]=b[A>>0];h=o+(w*5640|0)+5636|0;j=b[h>>0]|0;b[h>>0]=j&-5;if(!(f[L>>2]|0))h=0;else{b[h>>0]=j|4;k=f[L>>2]|0;if(!k)h=0;else{l=w+1|0;h=0;j=0;do{if((l|0)==(f[c+48+(j*148|0)+48>>2]|0)){f[o+(w*5640|0)+424+(h*148|0)>>2]=f[c+48+(h*148|0)>>2];f[o+(w*5640|0)+424+(h*148|0)+4>>2]=f[c+48+(h*148|0)+4>>2];f[o+(w*5640|0)+424+(h*148|0)+8>>2]=f[c+48+(h*148|0)+8>>2];f[o+(w*5640|0)+424+(h*148|0)+12>>2]=f[c+48+(h*148|0)+12>>2];f[o+(w*5640|0)+424+(h*148|0)+16>>2]=f[c+48+(h*148|0)+16>>2];f[o+(w*5640|0)+424+(h*148|0)+32>>2]=f[c+48+(h*148|0)+32>>2];f[o+(w*5640|0)+424+(h*148|0)+48>>2]=f[c+48+(h*148|0)+48>>2];h=h+1|0}j=j+1|0}while(j>>>0 >>0)}h=h+-1|0}f[o+(w*5640|0)+420>>2]=h;V=Ic(f[B>>2]|0,1080)|0;v=o+(w*5640|0)+5584|0;f[v>>2]=V;if(!V){Y=141;break}do if(f[i>>2]|0){j=f[B>>2]|0;j=X(j<<2,j)|0;k=Hc(j)|0;l=(f[i>>2]|0)+j|0;if(!k){Y=144;break f}f[m>>2]=2;h=Hc(j)|0;f[o+(w*5640|0)+5608>>2]=h;if(!h){Y=146;break f}hj(h|0,f[i>>2]|0,j|0)|0;hj(k|0,f[i>>2]|0,j|0)|0;h=Hc(j)|0;j=o+(w*5640|0)+5604|0;f[j>>2]=h;if(!h){Y=148;break f}if(!(Ng(k,h,f[B>>2]|0)|0)){Y=150;break f}h=Hc(f[B>>2]<<3)|0;f[o+(w*5640|0)+5600>>2]=h;if(!h){Y=152;break f}Af(h,f[B>>2]|0,f[j>>2]|0);Mc(k);j=f[B>>2]|0;if(j|0){k=f[v>>2]|0;h=0;do{f[k+(h*1080|0)+1076>>2]=f[l+(h<<2)>>2];h=h+1|0}while(h>>>0 >>0)}if(!(Uc(r,e)|0)){Y=158;break f}if(f[B>>2]|0){r=0;Y=172}}else{h:do if((f[m>>2]|0)==1){h=f[B>>2]|0;if(h>>>0<=2){k=h;break}j=f[C>>2]|0;h=f[j>>2]|0;do if((h|0)==(f[j+52>>2]|0)){if((h|0)!=(f[j+104>>2]|0))break;h=f[j+4>>2]|0;if((h|0)!=(f[j+56>>2]|0))break;if((h|0)==(f[j+108>>2]|0)){Y=166;break h}}while(0);Mb(g,2,7948,ha)|0;f[m>>2]=0;Y=166}else Y=166;while(0);if((Y|0)==166){Y=0;k=f[B>>2]|0}if(!k)break;j=f[C>>2]|0;h=0;do{if(!(f[j+(h*52|0)+32>>2]|0))f[(f[v>>2]|0)+(h*1080|0)+1076>>2]=1<<(f[j+(h*52|0)+24>>2]|0)+-1;h=h+1|0}while(h>>>0 >>0);r=0;Y=172}while(0);if((Y|0)==172)while(1){Y=0;s=f[v>>2]|0;t=s+(r*1080|0)|0;k=f[y>>2]&1;f[t>>2]=k;l=f[$>>2]|0;m=s+(r*1080|0)+4|0;f[m>>2]=l;h=f[D>>2]|0;if((h|0)>1){j=h;h=0;while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}else h=0;f[s+(r*1080|0)+8>>2]=h;h=f[E>>2]|0;if((h|0)>1){j=h;h=0;while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}else h=0;f[s+(r*1080|0)+12>>2]=h;f[s+(r*1080|0)+16>>2]=f[F>>2];V=f[G>>2]|0;f[s+(r*1080|0)+20>>2]=(V|0)==0&1;f[s+(r*1080|0)+24>>2]=V|0?2:0;f[s+(r*1080|0)+804>>2]=2;if((r|0)==(f[H>>2]|0))h=f[I>>2]|0;else h=0;f[s+(r*1080|0)+808>>2]=h;do if(!k){if(!l)break;else h=0;do{f[s+(r*1080|0)+812+(h<<2)>>2]=15;f[s+(r*1080|0)+944+(h<<2)>>2]=15;h=h+1|0}while(h>>>0<(f[m>>2]|0)>>>0)}else{if((l|0)>0)o=0;else break;while(1){m=l;l=l+-1|0;h=f[K>>2]|0;do if((o|0)<(h|0)){h=f[c+5624+(o<<2)>>2]|0;do if((h|0)<1)h=1;else{if((h|0)==1){h=0;break}else{j=h;h=0}while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}while(0);f[s+(r*1080|0)+812+(l<<2)>>2]=h;h=f[c+5756+(o<<2)>>2]|0;if((h|0)<1){h=1;break}if((h|0)==1){h=0;break}else{j=h;h=0}while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}else{V=h+-1|0;j=o-V|0;h=f[c+5624+(V<<2)>>2]>>j;j=f[c+5756+(V<<2)>>2]>>j;do if((h|0)<1)h=1;else{if((h|0)==1){h=0;break}else{k=h;h=0}while(1){h=h+1|0;if(k>>>0>3)k=k>>>1;else break}}while(0);f[s+(r*1080|0)+812+(l<<2)>>2]=h;if((j|0)<1){h=1;break}if((j|0)==1){h=0;break}else h=0;while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}while(0);f[s+(r*1080|0)+944+(l<<2)>>2]=h;if((m|0)<=1)break;else o=o+1|0}}while(0);Ig(t,f[(f[C>>2]|0)+(r*52|0)+24>>2]|0);r=r+1|0;if(r>>>0>=(f[B>>2]|0)>>>0)break;else Y=172}w=w+1|0;if(w>>>0>=(X(f[_>>2]|0,f[Z>>2]|0)|0)>>>0)break e}if((Y|0)==141){Mb(g,1,7591,aa)|0;ha=0;u=ia;return ha|0}else if((Y|0)==144){Mb(g,1,7655,ba)|0;ha=0;u=ia;return ha|0}else if((Y|0)==146){Mc(k);Mb(g,1,7698,ca)|0;ha=0;u=ia;return ha|0}else if((Y|0)==148){Mc(k);Mb(g,1,7756,da)|0;ha=0;u=ia;return ha|0}else if((Y|0)==150){Mc(k);Mb(g,1,7816,ea)|0;ha=0;u=ia;return ha|0}else if((Y|0)==152){Mc(k);Mb(g,1,7864,fa)|0;ha=0;u=ia;return ha|0}else if((Y|0)==158){Mb(g,1,7914,ga)|0;ha=0;u=ia;return ha|0}}else i=c+18696|0;while(0);h=f[i>>2]|0;if(!h){ha=1;u=ia;return ha|0}Mc(h);f[i>>2]=0;ha=1;u=ia;return ha|0}function Uc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0;if((f[a+16>>2]|0)!=2){a=1;return a|0}l=a+5604|0;r=a+5616|0;e=f[r>>2]|0;m=a+5620|0;do if(f[l>>2]|0){do if((e|0)==(f[m>>2]|0)){e=e+10|0;f[m>>2]=e;d=a+5612|0;e=Lc(f[d>>2]|0,e*20|0)|0;if(e|0){f[d>>2]=e;q=f[r>>2]|0;ij(e+(q*20|0)|0,0,((f[m>>2]|0)-q|0)*20|0)|0;e=f[r>>2]|0;break}Mc(f[d>>2]|0);f[d>>2]=0;f[m>>2]=0;f[r>>2]=0;a=0;return a|0}else d=a+5612|0;while(0);j=f[d>>2]|0;g=j+(e*20|0)|0;k=j+(e*20|0)+12|0;d=f[k>>2]|0;if(d|0){Mc(d);f[k>>2]=0}f[j+(e*20|0)+8>>2]=1;f[j+(e*20|0)+4>>2]=1;f[g>>2]=2;d=f[c+16>>2]|0;d=X(d,d)|0;h=d<<2;i=Hc(h)|0;f[k>>2]=i;if(!i){a=0;return a|0}else{Ua[f[768+(f[g>>2]<<2)>>2]&15](f[l>>2]|0,i,d);f[j+(e*20|0)+16>>2]=h;e=(f[r>>2]|0)+1|0;f[r>>2]=e;h=2;break}}else{h=1;g=0}while(0);do if((e|0)==(f[m>>2]|0)){e=e+10|0;f[m>>2]=e;d=a+5612|0;e=Lc(f[d>>2]|0,e*20|0)|0;if(e|0){f[d>>2]=e;q=f[r>>2]|0;e=e+(q*20|0)|0;ij(e|0,0,((f[m>>2]|0)-q|0)*20|0)|0;g=(g|0)==0?0:e+-20|0;e=f[r>>2]|0;break}Mc(f[d>>2]|0);f[d>>2]=0;f[m>>2]=0;f[r>>2]=0;a=0;return a|0}else d=a+5612|0;while(0);m=f[d>>2]|0;q=m+(e*20|0)|0;o=m+(e*20|0)+12|0;d=f[o>>2]|0;if(d|0){Mc(d);f[o>>2]=0}p=h+1|0;f[m+(e*20|0)+8>>2]=h;f[m+(e*20|0)+4>>2]=2;f[q>>2]=2;c=c+16|0;j=f[c>>2]|0;k=j<<2;l=Hc(k)|0;f[o>>2]=l;if(!l){a=0;return a|0}l=Hc(k)|0;if(!l){Mc(f[o>>2]|0);f[o>>2]=0;a=0;return a|0}if(j|0){d=0;h=f[a+5584>>2]|0;i=l;while(1){n[i>>2]=+(f[h+1076>>2]|0);d=d+1|0;if((d|0)==(j|0))break;else{h=h+1080|0;i=i+4|0}}}Ua[f[768+(f[q>>2]<<2)>>2]&15](l,f[o>>2]|0,j);Mc(l);f[m+(e*20|0)+16>>2]=k;f[r>>2]=(f[r>>2]|0)+1;i=a+5628|0;d=f[i>>2]|0;h=a+5632|0;do if((d|0)==(f[h>>2]|0)){d=d+10|0;f[h>>2]=d;e=a+5624|0;d=Lc(f[e>>2]|0,d*20|0)|0;if(d|0){f[e>>2]=d;a=f[i>>2]|0;ij(d+(a*20|0)|0,0,((f[h>>2]|0)-a|0)*20|0)|0;d=f[i>>2]|0;break}Mc(f[e>>2]|0);f[e>>2]=0;f[h>>2]=0;f[i>>2]=0;a=0;return a|0}else e=a+5624|0;while(0);a=f[e>>2]|0;f[a+(d*20|0)+8>>2]=g;r=a+(d*20|0)+16|0;b[r>>0]=b[r>>0]|1;f[a+(d*20|0)+4>>2]=f[c>>2];f[a+(d*20|0)>>2]=p;f[a+(d*20|0)+12>>2]=q;f[i>>2]=(f[i>>2]|0)+1;a=1;return a|0}function Vc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){yb(b,~~+n[a>>2]>>>0,2);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+2|0}}return}function Wc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){yb(b,~~+n[a>>2]>>>0,4);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+4|0}}return}function Xc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){Cb(b,+n[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+4|0}}return}function Yc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){Ab(b,+n[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+8|0}}return}function Zc(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function _c(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;j=Sb()|0;k=b+80|0;f[k>>2]=j;if(!j){k=0;return k|0}e=b+192|0;if(kg(f[e>>2]|0,24,d)|0?kg(f[e>>2]|0,25,d)|0:0){i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}}else ng(i);e=b+188|0;if(kg(f[e>>2]|0,26,d)|0?kg(f[e>>2]|0,27,d)|0:0){i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}}else ng(i);e=Sb()|0;f[c>>2]=e;if(!e){k=0;return k|0}Ub(f[k>>2]|0,e);g=X(f[b+116>>2]|0,f[b+112>>2]|0)|0;i=b+196|0;f[(f[i>>2]|0)+36>>2]=g;g=Ic(g,40)|0;e=f[i>>2]|0;f[e+40>>2]=g;if(!g){k=0;return k|0}if(!(f[e+36>>2]|0)){k=1;return k|0}h=0;while(1){f[g+(h*40|0)+28>>2]=100;f[g+(h*40|0)+20>>2]=0;k=Ic(100,24)|0;e=f[i>>2]|0;g=f[e+40>>2]|0;f[g+(h*40|0)+24>>2]=k;h=h+1|0;if(!k){e=0;g=30;break}if(h>>>0>=(f[e+36>>2]|0)>>>0){e=1;g=30;break}}if((g|0)==30)return e|0}Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}function $c(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ad(a,b,c){a=a|0;b=b|0;c=c|0;return (f[a+8>>2]|0)==0&(f[a+188>>2]|0)!=0&(f[a+192>>2]|0)!=0&1|0}function bd(a,c,e){a=a|0;c=c|0;e=e|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,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=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;X=u;u=u+224|0;W=X+200|0;T=X+192|0;S=X+184|0;P=X+176|0;O=X+168|0;N=X+160|0;M=X+152|0;L=X+144|0;K=X+136|0;H=X+128|0;G=X+120|0;F=X+112|0;E=X+104|0;D=X+96|0;C=X+88|0;B=X+80|0;A=X+72|0;z=X+64|0;y=X+56|0;x=X+48|0;w=X+40|0;J=X+32|0;o=X+24|0;n=X+16|0;m=X+8|0;R=X;g=X+216|0;h=X+212|0;t=X+208|0;v=X+204|0;V=a+8|0;f[V>>2]=1;a:do if((Eb(c,g,2,e)|0)==2?(zb(g,h,2),(f[h>>2]|0)==65359):0){f[V>>2]=2;l=Hb(c)|0;l=Zi(l|0,I|0,-2,-1)|0;k=I;U=a+196|0;h=f[U>>2]|0;f[h>>2]=l;f[h+4>>2]=k;h=R;f[h>>2]=l;f[h+4>>2]=k;Mb(e,4,8053,R)|0;h=f[U>>2]|0;k=f[h>>2]|0;l=h+24|0;g=f[l>>2]|0;j=h+32|0;i=f[j>>2]|0;do if((g+1|0)>>>0>i>>>0){s=~~(+(i>>>0)+100.0)>>>0;f[j>>2]=s;g=h+28|0;h=Lc(f[g>>2]|0,s*24|0)|0;if(!h){Mc(f[g>>2]|0);f[g>>2]=0;f[j>>2]=0;f[l>>2]=0;Mb(e,1,8090,m)|0;break a}else{f[g>>2]=h;g=f[l>>2]|0;break}}else h=f[h+28>>2]|0;while(0);d[h+(g*24|0)>>1]=-177;r=dj(0,k|0,32)|0;s=h+(g*24|0)+8|0;f[s>>2]=r;f[s+4>>2]=I;f[h+(g*24|0)+16>>2]=2;f[l>>2]=g+1;s=a+16|0;if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Mb(e,1,8150,o)|0;W=0;u=X;return W|0}zb(f[s>>2]|0,t,2);j=f[t>>2]|0;if((j|0)!=65424){r=a+20|0;i=0;h=0;g=0;b:do{if(j>>>0<65280){Q=14;break}else k=784;while(1){l=f[k>>2]|0;m=(l|0)==0;if(m|(l|0)==(j|0))break;else k=k+12|0}if(m){Mb(e,2,8219,w)|0;q=2;c:while(1){while(1){if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Q=20;break b}zb(f[s>>2]|0,R,2);j=f[R>>2]|0;if(j>>>0>=65280){p=784;break}}while(1){k=f[p>>2]|0;if((k|0)==0|(k|0)==(j|0))break;else p=p+12|0}if(!(f[p+4>>2]&f[V>>2])){Q=24;break b}if((k|0)>=65424){Q=99;break}switch(k|0){case 0:break;default:break c}q=q+2|0}if((Q|0)==99){Q=0;switch(k|0){case 65424:{Q=26;break b}default:{}}}k=f[U>>2]|0;n=Hb(c)|0;n=n-q|0;o=k+24|0;j=f[o>>2]|0;m=k+32|0;l=f[m>>2]|0;if((j+1|0)>>>0>l>>>0){l=~~(+(l>>>0)+100.0)>>>0;f[m>>2]=l;j=k+28|0;k=Lc(f[j>>2]|0,l*24|0)|0;if(!k){Q=31;break}f[j>>2]=k;j=f[o>>2]|0}else k=f[k+28>>2]|0;d[k+(j*24|0)>>1]=0;m=k+(j*24|0)+8|0;f[m>>2]=n;f[m+4>>2]=((n|0)<0)<<31>>31;f[k+(j*24|0)+16>>2]=q;f[o>>2]=j+1;k=f[p>>2]|0;f[t>>2]=k;if((k|0)==65424)break;else j=784;while(1){l=f[j>>2]|0;if((l|0)==0|(l|0)==(k|0)){m=j;break}else j=j+12|0}}else m=k;g=(l|0)==65361?1:g;h=(l|0)==65362?1:h;i=(l|0)==65372?1:i;if(!(f[m+4>>2]&f[V>>2])){Q=37;break}if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Q=39;break}zb(f[s>>2]|0,v,2);k=(f[v>>2]|0)+-2|0;f[v>>2]=k;j=f[s>>2]|0;if(k>>>0>(f[r>>2]|0)>>>0){j=Lc(j,k)|0;if(!j){Q=42;break}f[s>>2]=j;k=f[v>>2]|0;f[r>>2]=k}j=Eb(c,j,k,e)|0;if((j|0)!=(f[v>>2]|0)){Q=45;break}if(!(Na[f[m+8>>2]&63](a,f[s>>2]|0,j,e)|0)){Q=47;break}l=f[U>>2]|0;n=f[m>>2]|0;o=Hb(c)|0;p=f[v>>2]|0;o=-4-p+o|0;p=p+4|0;q=l+24|0;j=f[q>>2]|0;m=l+32|0;k=f[m>>2]|0;if((j+1|0)>>>0>k>>>0){k=~~(+(k>>>0)+100.0)>>>0;f[m>>2]=k;j=l+28|0;k=Lc(f[j>>2]|0,k*24|0)|0;if(!k){Q=52;break}f[j>>2]=k;j=f[q>>2]|0}else k=f[l+28>>2]|0;d[k+(j*24|0)>>1]=n;n=k+(j*24|0)+8|0;f[n>>2]=o;f[n+4>>2]=((o|0)<0)<<31>>31;f[k+(j*24|0)+16>>2]=p;f[q>>2]=j+1;if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Q=54;break}zb(f[s>>2]|0,t,2);j=f[t>>2]|0}while((j|0)!=65424);switch(Q|0){case 14:{f[J>>2]=j;Mb(e,1,8168,J)|0;W=0;u=X;return W|0}case 20:{Mb(e,1,8150,x)|0;Q=33;break}case 24:{Mb(e,1,8235,y)|0;Q=33;break}case 26:{f[t>>2]=65424;break}case 31:{Mc(f[j>>2]|0);f[j>>2]=0;f[m>>2]=0;f[o>>2]=0;Mb(e,1,8090,z)|0;Q=33;break}case 37:{Mb(e,1,8235,B)|0;W=0;u=X;return W|0}case 39:{Mb(e,1,8150,C)|0;W=0;u=X;return W|0}case 42:{Mc(f[s>>2]|0);f[s>>2]=0;f[r>>2]=0;Mb(e,1,8333,D)|0;W=0;u=X;return W|0}case 45:{Mb(e,1,8150,E)|0;W=0;u=X;return W|0}case 47:{Mb(e,1,8367,F)|0;W=0;u=X;return W|0}case 52:{Mc(f[j>>2]|0);f[j>>2]=0;f[m>>2]=0;f[q>>2]=0;Mb(e,1,8090,G)|0;W=0;u=X;return W|0}case 54:{Mb(e,1,8150,H)|0;W=0;u=X;return W|0}}if((Q|0)==33){Mb(e,1,8278,A)|0;W=0;u=X;return W|0}if(g|0){if(!h){Mb(e,1,8472,L)|0;W=0;u=X;return W|0}if(!i){Mb(e,1,8518,M)|0;W=0;u=X;return W|0}d:do if(b[a+184>>0]&1){r=a+120|0;g=f[r>>2]|0;do if(g){o=a+124|0;m=0;h=0;n=0;e:while(1){i=f[o>>2]|0;k=f[i+(n<<3)>>2]|0;if(!k)i=m;else{i=f[i+(n<<3)+4>>2]|0;j=m>>>0>>0;l=i-m|0;i=j?0:m-i|0;if(!((l|0)==0|j^1)){g=j?k+m|0:k;while(1){if(l>>>0<4){Q=72;break e}zb(g,R,4);g=g+4|0;M=l+-4|0;j=f[R>>2]|0;h=j+h|0;k=M>>>0 >>0;i=k?j-M|0:i;l=k?0:M-j|0;if(!l)break;else g=k?g:g+j|0}g=f[r>>2]|0}}n=n+1|0;if(n>>>0>=g>>>0)break;else m=i}if((Q|0)==72){Mb(e,1,8564,N)|0;break}if(!i)Q=76;else Mb(e,1,8595,O)|0}else{h=0;Q=76}while(0);f:do if((Q|0)==76){i=Hc(h)|0;o=a+144|0;f[o>>2]=i;if(!i){Mb(e,1,8618,P)|0;break}p=a+132|0;f[p>>2]=h;j=f[r>>2]|0;q=a+124|0;do if(j){g=f[q>>2]|0;n=0;k=0;m=0;h=g;g:while(1){l=f[h+(n<<3)>>2]|0;if(!l)i=m;else{h=f[h+(n<<3)+4>>2]|0;g=(f[o>>2]|0)+k|0;h:do if(m>>>0 >>0){hj(g|0,l|0,m|0)|0;i=h-m|0;g=k+m|0;if(!i){i=0;break}h=l+m|0;while(1){if(i>>>0<4){Q=91;break g}zb(h,R,4);k=h+4|0;j=i+-4|0;h=f[R>>2]|0;i=(f[o>>2]|0)+g|0;if(j>>>0 >>0)break;hj(i|0,k|0,h|0)|0;h=f[R>>2]|0;i=j-h|0;g=h+g|0;if(!i){i=0;break h}else h=k+h|0}hj(i|0,k|0,j|0)|0;i=(f[R>>2]|0)-j|0;g=j+g|0}else{hj(g|0,l|0,h|0)|0;i=m-h|0;g=h+k|0}while(0);Mc(f[(f[q>>2]|0)+(n<<3)>>2]|0);h=f[q>>2]|0;f[h+(n<<3)>>2]=0;f[h+(n<<3)+4>>2]=0;k=g;j=f[r>>2]|0;g=h}n=n+1|0;if(n>>>0>=j>>>0){Q=93;break}else m=i}if((Q|0)==91){Mb(e,1,8564,S)|0;break f}else if((Q|0)==93){i=f[o>>2]|0;h=f[p>>2]|0;break}}else g=f[q>>2]|0;while(0);f[a+128>>2]=i;f[a+152>>2]=h;f[r>>2]=0;Mc(g);f[q>>2]=0;break d}while(0);Mb(e,1,8656,T)|0;W=0;u=X;return W|0}while(0);Mb(e,4,8682,W)|0;e=Hb(c)|0;W=(f[U>>2]|0)+8|0;f[W>>2]=e+-2;f[W+4>>2]=0;f[V>>2]=8;W=1;u=X;return W|0}}Mb(e,1,8426,K)|0;W=0;u=X;return W|0}while(0);Mb(e,1,8126,n)|0;W=0;u=X;return W|0}function cd(a,c,d){a=a|0;c=c|0;d=d|0;var e=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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+16|0;F=G;D=f[a+80>>2]|0;E=a+88|0;p=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;s=f[D+16>>2]|0;q=s*1080|0;r=f[a+12>>2]|0;s=X(s<<2,s)|0;a:do if(p|0){t=r+5604|0;v=r+5620|0;w=r+5612|0;x=r+5616|0;y=r+5632|0;z=r+5624|0;A=r+5584|0;n=f[a+164>>2]|0;o=0;b:while(1){j=n+5584|0;B=f[j>>2]|0;hj(n|0,r|0,5640)|0;c=n+5636|0;b[c>>0]=b[c>>0]&-4;f[n+5168>>2]=0;c=n+5604|0;f[c>>2]=0;k=n+5620|0;f[k>>2]=0;C=n+5612|0;f[C>>2]=0;l=n+5632|0;f[l>>2]=0;m=n+5624|0;f[m>>2]=0;f[j>>2]=B;if(f[t>>2]|0){e=Hc(s)|0;f[c>>2]=e;if(!e){c=0;e=25;break}hj(e|0,f[t>>2]|0,s|0)|0}c=(f[v>>2]|0)*20|0;e=Hc(c)|0;f[C>>2]=e;if(!e){c=0;e=25;break}hj(e|0,f[w>>2]|0,c|0)|0;c=f[x>>2]|0;if(c|0){h=f[C>>2]|0;i=f[w>>2]|0;j=0;while(1){g=i+12|0;if(f[g>>2]|0){c=i+16|0;e=Hc(f[c>>2]|0)|0;f[h+12>>2]=e;if(!e){c=0;e=25;break b}hj(e|0,f[g>>2]|0,f[c>>2]|0)|0;c=f[x>>2]|0}f[k>>2]=(f[k>>2]|0)+1;j=j+1|0;if(j>>>0>=c>>>0)break;else{h=h+20|0;i=i+20|0}}}c=(f[y>>2]|0)*20|0;e=Hc(c)|0;f[m>>2]=e;if(!e){c=0;e=25;break}hj(e|0,f[z>>2]|0,c|0)|0;f[l>>2]=f[y>>2];i=f[y>>2]|0;if(i|0){h=f[z>>2]|0;e=f[m>>2]|0;g=0;while(1){c=f[h+8>>2]|0;if(c|0)f[e+8>>2]=(f[C>>2]|0)+(((c-(f[w>>2]|0)|0)/20|0)*20|0);c=f[h+12>>2]|0;if(c|0)f[e+12>>2]=(f[C>>2]|0)+(((c-(f[w>>2]|0)|0)/20|0)*20|0);g=g+1|0;if(g>>>0>=i>>>0)break;else{h=h+20|0;e=e+20|0}}}hj(B|0,f[A>>2]|0,q|0)|0;o=o+1|0;if(o>>>0>=p>>>0)break a;else n=n+5640|0}if((e|0)==25){u=G;return c|0}}while(0);e=Lf(1)|0;c=a+204|0;f[c>>2]=e;if(!e){d=0;u=G;return d|0}if(Pf(e,D,E)|0){d=1;u=G;return d|0}Qf(f[c>>2]|0);f[c>>2]=0;Mb(d,1,8019,F)|0;d=0;u=G;return d|0}function dd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=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,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=u;u=u+112|0;z=B+88|0;w=B+80|0;x=B+72|0;v=B+64|0;r=B+56|0;q=B+48|0;m=B+40|0;k=B+32|0;j=B+24|0;g=B+16|0;s=B+100|0;t=B+96|0;y=B+92|0;f[t>>2]=0;A=a+200|0;if((d|0)!=8){Mb(e,1,11669,B)|0;Mb(e,1,11669,B+8|0)|0;A=0;u=B;return A|0}zb(c,A,2);zb(c+2|0,s,4);zb(c+6|0,y,1);zb(c+7|0,t,1);l=f[A>>2]|0;c=f[a+112>>2]|0;if(l>>>0>=(X(f[a+116>>2]|0,c)|0)>>>0){f[g>>2]=l;Mb(e,1,11695,g)|0;A=0;u=B;return A|0}d=f[a+164>>2]|0;p=(l>>>0)%(c>>>0)|0;o=(l>>>0)/(c>>>0)|0;c=f[s>>2]|0;do if((c+-1|0)>>>0<13){if((c|0)==12){f[j>>2]=12;Mb(e,2,11719,j)|0;c=f[s>>2]|0;break}f[k>>2]=c;Mb(e,1,11756,k)|0;A=0;u=B;return A|0}while(0);if(!c){Mb(e,4,11817,m)|0;f[a+72>>2]=1}c=f[t>>2]|0;do if(!c){c=f[d+(l*5640|0)+5588>>2]|0;if(c|0){i=c;n=18}}else{i=c+((h[a+76>>0]|0)>>>4&1)|0;f[t>>2]=i;d=d+(l*5640|0)+5588|0;g=f[d>>2]|0;c=f[y>>2]|0;if((g+-1|0)>>>0 >>0){f[q>>2]=c;f[q+4>>2]=g;Mb(e,1,11928,q)|0;f[a+72>>2]=1;A=0;u=B;return A|0}if(c>>>0>>0){f[d>>2]=i;n=18;break}f[r>>2]=c;f[r+4>>2]=i;Mb(e,1,12027,r)|0;f[a+72>>2]=1;A=0;u=B;return A|0}while(0);if((n|0)==18?(i|0)==((f[y>>2]|0)+1|0):0){r=a+76|0;b[r>>0]=b[r>>0]|1}f[a+24>>2]=(f[a+72>>2]|0)==0?(f[s>>2]|0)+-12|0:0;f[a+8>>2]=16;c=f[a+60>>2]|0;if((c|0)==-1)if((p>>>0>=(f[a+28>>2]|0)>>>0?p>>>0<(f[a+36>>2]|0)>>>0:0)?o>>>0>=(f[a+32>>2]|0)>>>0:0)c=(o>>>0>=(f[a+40>>2]|0)>>>0&1)<<2&255;else c=4;else c=((f[A>>2]|0)!=(c|0)&1)<<2&255;j=a+76|0;b[j>>0]=b[j>>0]&-5|c;j=a+196|0;c=f[j>>2]|0;if(!c){A=1;u=B;return A|0}i=f[A>>2]|0;c=f[c+40>>2]|0;f[c+(i*40|0)>>2]=i;g=f[y>>2]|0;f[c+(i*40|0)+12>>2]=g;d=f[t>>2]|0;if(d|0){f[c+(i*40|0)+4>>2]=d;f[c+(i*40|0)+8>>2]=d;c=f[c+(i*40|0)+16>>2]|0;if(!c){z=Ic(d,24)|0;f[(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16>>2]=z;if(z|0){A=1;u=B;return A|0}Mb(e,1,12135,v)|0;A=0;u=B;return A|0}c=Lc(c,d*24|0)|0;d=(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16|0;if(!c){Mc(f[d>>2]|0);f[(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16>>2]=0;Mb(e,1,12135,x)|0;A=0;u=B;return A|0}else{f[d>>2]=c;A=1;u=B;return A|0}}do if(!(f[c+(i*40|0)+16>>2]|0)){f[c+(i*40|0)+8>>2]=10;x=Ic(10,24)|0;c=f[(f[j>>2]|0)+40>>2]|0;d=f[A>>2]|0;f[c+(d*40|0)+16>>2]=x;if(x|0){i=d;g=f[y>>2]|0;break}f[c+(d*40|0)+8>>2]=0;Mb(e,1,12135,w)|0;A=0;u=B;return A|0}while(0);d=c+(i*40|0)+8|0;if(g>>>0<(f[d>>2]|0)>>>0){A=1;u=B;return A|0}y=g+1|0;f[d>>2]=y;c=Lc(f[c+(i*40|0)+16>>2]|0,y*24|0)|0;d=(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16|0;if(!c){Mc(f[d>>2]|0);y=f[(f[j>>2]|0)+40>>2]|0;A=f[A>>2]|0;f[y+(A*40|0)+16>>2]=0;f[y+(A*40|0)+8>>2]=0;Mb(e,1,12135,z)|0;A=0;u=B;return A|0}else{f[d>>2]=c;A=1;u=B;return A|0}return 0}function ed(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|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;r=u;u=u+64|0;o=r+48|0;p=r+40|0;j=r+32|0;m=r+52|0;i=r+56|0;f[m>>2]=d;q=a+80|0;k=f[q>>2]|0;n=a+8|0;if((f[n>>2]|0)==16)l=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else l=f[a+12>>2]|0;g=l+5636|0;h=b[g>>0]|0;if(h&1){Mb(e,1,11436,r)|0;q=0;u=r;return q|0}b[g>>0]=h|1;if(d>>>0<5){Mb(e,1,11500,r+8|0)|0;q=0;u=r;return q|0}zb(c,l,1);if((f[l>>2]|0)>>>0>7){Mb(e,1,11526,r+16|0)|0;q=0;u=r;return q|0}zb(c+1|0,i,1);i=f[i>>2]|0;g=l+4|0;f[g>>2]=i;if((i|0)>4){Mb(e,1,11560,r+24|0)|0;f[g>>2]=-1}g=l+8|0;zb(c+2|0,g,2);g=f[g>>2]|0;if((g+-1|0)>>>0>65534){f[j>>2]=g;Mb(e,1,11601,j)|0;q=0;u=r;return q|0}j=f[a+172>>2]|0;f[l+12>>2]=(j|0)==0?g:j;zb(c+4|0,l+16|0,1);j=c+5|0;f[m>>2]=d+-5;i=f[k+16>>2]|0;if(i|0){c=f[l>>2]&1;h=f[l+5584>>2]|0;g=0;do{f[h+(g*1080|0)>>2]=c;g=g+1|0}while(g>>>0>>0)}if(!(Fd(a,0,j,m,e)|0)){Mb(e,1,11500,p)|0;q=0;u=r;return q|0}if(f[m>>2]|0){Mb(e,1,11500,o)|0;q=0;u=r;return q|0}if((f[n>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;g=f[g+5584>>2]|0;k=g+4|0;h=f[k>>2]|0;l=h<<2;if((f[(f[q>>2]|0)+16>>2]|0)>>>0<=1){q=1;u=r;return q|0}a=g+8|0;e=g+12|0;m=g+16|0;n=g+20|0;o=g+812|0;p=g+944|0;f[g+1084>>2]=h;i=f[a>>2]|0;f[g+1088>>2]=i;c=f[e>>2]|0;f[g+1092>>2]=c;j=f[m>>2]|0;f[g+1096>>2]=j;d=f[n>>2]|0;f[g+1100>>2]=d;hj(g+1892|0,o|0,l|0)|0;hj(g+2024|0,p|0,l|0)|0;if((f[(f[q>>2]|0)+16>>2]|0)>>>0<=2){q=1;u=r;return q|0}f[g+2164>>2]=h;f[g+2168>>2]=i;f[g+2172>>2]=c;f[g+2176>>2]=j;f[g+2180>>2]=d;hj(g+2972|0,o|0,l|0)|0;hj(g+3104|0,p|0,l|0)|0;if((f[(f[q>>2]|0)+16>>2]|0)>>>0>3)h=3;else{q=1;u=r;return q|0}while(1){i=f[a>>2]|0;c=f[e>>2]|0;j=f[m>>2]|0;d=f[n>>2]|0;f[g+3244>>2]=f[k>>2];f[g+3248>>2]=i;f[g+3252>>2]=c;f[g+3256>>2]=j;f[g+3260>>2]=d;hj(g+4052|0,o|0,l|0)|0;hj(g+4184|0,p|0,l|0)|0;h=h+1|0;if(h>>>0>=(f[(f[q>>2]|0)+16>>2]|0)>>>0){g=1;break}else g=g+1080|0}u=r;return g|0}function fd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+48|0;i=k+28|0;j=k+32|0;f[i>>2]=c;if((f[a+8>>2]|0)==16)h=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else h=f[a+12>>2]|0;g=(f[a+80>>2]|0)+16|0;e=(f[g>>2]|0)>>>0<257?1:2;if(e>>>0>=c>>>0){Mb(d,1,10929,k)|0;j=0;u=k;return j|0}f[i>>2]=c+-1-e;zb(b,j,e);b=b+e|0;c=f[j>>2]|0;if(c>>>0>=(f[g>>2]|0)>>>0){Mb(d,1,10955,k+8|0)|0;j=0;u=k;return j|0}zb(b,(f[h+5584>>2]|0)+(c*1080|0)|0,1);if(!(Fd(a,f[j>>2]|0,b+1|0,i,d)|0)){Mb(d,1,10929,k+16|0)|0;j=0;u=k;return j|0}if(!(f[i>>2]|0)){j=1;u=k;return j|0}Mb(d,1,10929,k+24|0)|0;j=0;u=k;return j|0}function gd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+32|0;j=k+8|0;h=k+20|0;i=f[(f[a+80>>2]|0)+16>>2]|0;e=i>>>0<257?1:2;if((e+2|0)!=(c|0)){Mb(d,1,10846,k)|0;j=0;u=k;return j|0}if((f[a+8>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;zb(b,h,e);c=b+e|0;zb(c,k+16|0,1);a=f[h>>2]|0;if(a>>>0>>0){zb(c+1|0,(f[g+5584>>2]|0)+(a*1080|0)+808|0,1);j=1;u=k;return j|0}else{f[j>>2]=a;f[j+4>>2]=i;Mb(d,1,10872,j)|0;j=0;u=k;return j|0}return 0}function hd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;h=u;u=u+16|0;e=h+12|0;f[e>>2]=c;if(!(Ed(a,0,b,e,d)|0)){Mb(d,1,10820,h)|0;g=0;u=h;return g|0}if(f[e>>2]|0){Mb(d,1,10820,h+8|0)|0;g=0;u=h;return g|0}if((f[a+8>>2]|0)==16)b=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else b=f[a+12>>2]|0;b=f[b+5584>>2]|0;d=a+80|0;if((f[(f[d>>2]|0)+16>>2]|0)>>>0<=1){g=1;u=h;return g|0}e=b+24|0;a=b+804|0;g=b+28|0;c=1;while(1){f[b+1104>>2]=f[e>>2];f[b+1884>>2]=f[a>>2];hj(b+1108|0,g|0,776)|0;c=c+1|0;if(c>>>0>=(f[(f[d>>2]|0)+16>>2]|0)>>>0){b=1;break}else b=b+1080|0}u=h;return b|0}function id(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+48|0;n=o+32|0;m=o+24|0;l=o+16|0;g=o+8|0;e=o;k=o+36|0;i=o+40|0;f[k>>2]=c;j=a+80|0;do if((f[(f[j>>2]|0)+16>>2]|0)>>>0<257){if(c|0){zb(b,i,1);e=-1;h=1;break}Mb(d,1,10473,e)|0;n=0;u=o;return n|0}else{if(c>>>0>=2){zb(b,i,2);e=-2;h=2;break}Mb(d,1,10473,g)|0;n=0;u=o;return n|0}while(0);f[k>>2]=e+c;g=f[i>>2]|0;e=f[(f[j>>2]|0)+16>>2]|0;if(g>>>0>=e>>>0){f[l>>2]=g;f[l+4>>2]=e;Mb(d,1,10499,l)|0;n=0;u=o;return n|0}if(!(Ed(a,g,b+h|0,k,d)|0)){Mb(d,1,10473,m)|0;n=0;u=o;return n|0}if(!(f[k>>2]|0)){n=1;u=o;return n|0}Mb(d,1,10473,n)|0;n=0;u=o;return n|0}function jd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+16|0;i=p+8|0;n=p+12|0;o=f[(f[a+80>>2]|0)+16>>2]|0;m=o>>>0<257?1:2;g=(m<<1)+5|0;if(((d>>>0)%(g>>>0)|0|0)!=0|g>>>0>d>>>0){Mb(e,1,10429,p)|0;o=0;u=p;return o|0}if((f[a+8>>2]|0)==16)l=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else l=f[a+12>>2]|0;a=l+5636|0;h=b[a>>0]|0;if(!(h&4))k=0;else k=(f[l+420>>2]|0)+1|0;j=k+((d>>>0)/(g>>>0)|0)|0;if(j>>>0>31){f[i>>2]=j;Mb(e,1,10455,i)|0;o=0;u=p;return o|0}b[a>>0]=h|4;if(k>>>0 >>0){h=l+8|0;a=c;d=k;g=l+424+(k*148|0)|0;while(1){zb(a,g,1);a=a+1|0;zb(a,g+4|0,m);a=a+m|0;k=g+8|0;zb(a,k,2);i=f[k>>2]|0;c=f[h>>2]|0;f[k>>2]=i>>>0 >>0?i:c;a=a+2|0;zb(a,g+12|0,1);a=a+1|0;k=g+16|0;zb(a,k,m);a=a+m|0;zb(a,n,1);f[g+36>>2]=f[n>>2];c=f[k>>2]|0;f[k>>2]=c>>>0 >>0?c:o;d=d+1|0;if(d>>>0>=j>>>0)break;else{a=a+1|0;g=g+148|0}}}f[l+420>>2]=j+-1;o=1;u=p;return o|0}function kd(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;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,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=0,K=0,L=0,M=0,N=0;N=u;u=u+160|0;M=N+144|0;H=N+136|0;G=N+128|0;F=N+120|0;E=N+112|0;D=N+104|0;z=N+96|0;y=N+80|0;s=N+72|0;p=N+64|0;o=N+56|0;r=N+48|0;q=N+32|0;k=N+24|0;j=N+16|0;h=N+152|0;w=N+148|0;K=f[a+80>>2]|0;L=a+88|0;if(e>>>0<36){Mb(g,1,9677,N)|0;g=0;u=N;return g|0}J=e+-36|0;n=(J>>>0)/3|0;if((J>>>0)%3|0|0){Mb(g,1,9677,N+8|0)|0;g=0;u=N;return g|0}zb(c,h,2);d[L>>1]=f[h>>2];x=K+8|0;zb(c+2|0,x,4);C=K+12|0;zb(c+6|0,C,4);zb(c+10|0,K,4);m=K+4|0;zb(c+14|0,m,4);v=a+100|0;zb(c+18|0,v,4);B=a+104|0;zb(c+22|0,B,4);t=a+92|0;zb(c+26|0,t,4);A=a+96|0;zb(c+30|0,A,4);zb(c+34|0,h,2);i=c+36|0;e=f[h>>2]|0;if(e>>>0>=16385){f[j>>2]=e;Mb(g,1,9705,j)|0;g=0;u=N;return g|0}e=e&65535;J=K+16|0;f[J>>2]=e;if((e|0)!=(n|0)){f[k>>2]=e;f[k+4>>2]=n;Mb(g,1,9766,k)|0;g=0;u=N;return g|0}k=f[K>>2]|0;l=f[x>>2]|0;if(k>>>0 >>0){j=f[m>>2]|0;c=f[C>>2]|0;if(j>>>0 >>0){h=f[v>>2]|0;e=f[B>>2]|0;if(h)if(!e)e=0;else{if((4294967295/(l>>>0)|0)>>>0 >>0){f[o>>2]=l;f[o+4>>2]=c;Mb(g,1,10007,o)|0;g=0;u=N;return g|0}l=f[t>>2]|0;q=Zi(l|0,0,h|0,0)|0;o=I;m=f[A>>2]|0;r=Zi(m|0,0,e|0,0)|0;if(l>>>0<=k>>>0?m>>>0<=j>>>0&(0-o|q)>>>0>k>>>0&(0-I|r)>>>0>j>>>0:0){e=Ic(n,52)|0;n=K+24|0;f[n>>2]=e;if(!e){f[J>>2]=0;Mb(g,1,10093,s)|0;g=0;u=N;return g|0}a:do if(f[J>>2]|0){l=a+168|0;k=e;j=0;while(1){zb(i,w,1);c=f[w>>2]|0;e=k+24|0;f[e>>2]=(c&127)+1;f[k+32>>2]=c>>>7;zb(i+1|0,w,1);f[k>>2]=f[w>>2];zb(i+2|0,w,1);c=f[w>>2]|0;f[k+4>>2]=c;h=f[k>>2]|0;if((c+-1|0)>>>0>254|(h+-1|0)>>>0>254){e=26;break}c=f[e>>2]|0;if(c>>>0>38){e=28;break}f[k+36>>2]=0;f[k+40>>2]=f[l>>2];e=j+1|0;if(e>>>0<(f[J>>2]|0)>>>0){k=k+52|0;i=i+3|0;j=e}else break a}if((e|0)==26){f[y>>2]=j;f[y+4>>2]=h;f[y+8>>2]=c;Mb(g,1,10141,y)|0}else if((e|0)==28){f[z>>2]=j;f[z+4>>2]=c;Mb(g,1,10246,z)|0}g=0;u=N;return g|0}while(0);l=f[t>>2]|0;k=f[v>>2]|0;i=((f[x>>2]|0)+-1-l+k|0)/(k|0)|0;f[a+112>>2]=i;j=f[A>>2]|0;h=f[B>>2]|0;e=((f[C>>2]|0)+-1-j+h|0)/(h|0)|0;f[a+116>>2]=e;if(!((e|0)==0|(i|0)==0)?i>>>0<=(65535/(e>>>0)|0)>>>0:0){m=X(i,e)|0;c=a+28|0;if(!(b[a+76>>0]&2)){f[c>>2]=0;f[a+32>>2]=0;f[a+36>>2]=i;c=a+40|0}else{f[c>>2]=(((f[c>>2]|0)-l|0)>>>0)/(k>>>0)|0;e=a+32|0;f[e>>2]=(((f[e>>2]|0)-j|0)>>>0)/(h>>>0)|0;e=a+36|0;f[e>>2]=((f[e>>2]|0)+-1-l+k|0)/(k|0)|0;e=a+40|0;c=e;e=((f[e>>2]|0)+-1-j+h|0)/(h|0)|0}f[c>>2]=e;D=Ic(m,5640)|0;j=a+164|0;f[j>>2]=D;if(!D){Mb(g,1,10093,E)|0;g=0;u=N;return g|0}E=Ic(f[J>>2]|0,1080)|0;i=a+12|0;f[(f[i>>2]|0)+5584>>2]=E;if(!(f[(f[i>>2]|0)+5584>>2]|0)){Mb(g,1,10093,F)|0;g=0;u=N;return g|0}e=Ic(10,20)|0;f[(f[i>>2]|0)+5612>>2]=e;e=f[i>>2]|0;if(!(f[e+5612>>2]|0)){Mb(g,1,10093,G)|0;g=0;u=N;return g|0}f[e+5620>>2]=10;e=Ic(10,20)|0;f[(f[i>>2]|0)+5624>>2]=e;e=f[i>>2]|0;if(!(f[e+5624>>2]|0)){Mb(g,1,10093,H)|0;g=0;u=N;return g|0}f[e+5632>>2]=10;h=f[J>>2]|0;if(h|0){c=f[n>>2]|0;e=0;do{if(!(f[c+(e*52|0)+32>>2]|0))f[(f[(f[i>>2]|0)+5584>>2]|0)+(e*1080|0)+1076>>2]=1<<(f[c+(e*52|0)+24>>2]|0)+-1;e=e+1|0}while(e>>>0 >>0)}b:do if(m|0){e=f[j>>2]|0;H=Ic(h,1080)|0;f[e+5584>>2]=H;if(H|0){c=0;while(1){c=c+1|0;if(c>>>0>=m>>>0)break b;H=Ic(f[J>>2]|0,1080)|0;f[e+11224>>2]=H;if(!H)break;else e=e+5640|0}}Mb(g,1,10093,M)|0;g=0;u=N;return g|0}while(0);f[a+8>>2]=4;Tb(K,L);g=1;u=N;return g|0}f[D>>2]=i;f[D+4>>2]=e;Mb(g,1,10346,D)|0;g=0;u=N;return g|0}Mb(g,1,10049,p)|0;g=0;u=N;return g|0}f[r>>2]=h;f[r+4>>2]=e;Mb(g,1,9946,r)|0;g=0;u=N;return g|0}else e=j}else{c=f[C>>2]|0;e=f[m>>2]|0}a=_i(l|0,0,k|0,0)|0;K=I;L=_i(c|0,0,e|0,0)|0;M=q;f[M>>2]=a;f[M+4>>2]=K;M=q+8|0;f[M>>2]=L;f[M+4>>2]=I;Mb(g,1,9880,q)|0;g=0;u=N;return g|0}function ld(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=u;u=u+32|0;a=e+12|0;if(c>>>0<2){Mb(d,1,9651,e)|0;d=0;u=e;return d|0}zb(b,e+16|0,1);zb(b+1|0,a,1);b=f[a>>2]|0;if(!(((c+-2|0)>>>0)%(((b>>>5&2)+2+(b>>>4&3)|0)>>>0)|0)){d=1;u=e;return d|0}Mb(d,1,9651,e+8|0)|0;d=0;u=e;return d|0}function md(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=u;u=u+16|0;if(!c){Mb(d,1,9625,b)|0;a=0}else a=1;u=b;return a|0}function nd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=u;u=u+32|0;i=j+8|0;h=j+12|0;if(!c){Mb(d,1,9599,j)|0;d=0;u=j;return d|0}zb(b,j+16|0,1);g=c+-1|0;if(!g){d=1;u=j;return d|0}else{e=0;a=b;c=0}do{a=a+1|0;zb(a,h,1);b=f[h>>2]|0;e=(b&128|0)==0?0:(b&127|e)<<7;c=c+1|0}while((c|0)!=(g|0));if(!e){d=1;u=j;return d|0}Mb(d,1,9599,i)|0;d=0;u=j;return d|0}function od(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+48|0;n=o+32|0;j=o+24|0;h=o+16|0;g=o+8|0;l=o+36|0;if(d>>>0<2){Mb(e,1,9551,o)|0;n=0;u=o;return n|0}m=a+184|0;b[m>>0]=b[m>>0]|1;zb(c,l,1);m=c+1|0;k=d+-1|0;i=a+124|0;d=f[i>>2]|0;do if(d){g=a+120|0;c=f[l>>2]|0;if((f[g>>2]|0)>>>0<=c>>>0){a=c+1|0;c=Lc(d,a<<3)|0;if(c|0){f[i>>2]=c;d=f[g>>2]|0;ij(c+(d<<3)|0,0,a-d<<3|0)|0;f[g>>2]=a;d=f[i>>2]|0;break}Mb(e,1,8618,h)|0;n=0;u=o;return n|0}}else{c=(f[l>>2]|0)+1|0;d=Ic(c,8)|0;f[i>>2]=d;if(d|0){f[a+120>>2]=c;break}Mb(e,1,8618,g)|0;n=0;u=o;return n|0}while(0);c=f[l>>2]|0;if(f[d+(c<<3)>>2]|0){f[j>>2]=c;Mb(e,1,9577,j)|0;n=0;u=o;return n|0}a=Hc(k)|0;d=f[i>>2]|0;c=f[l>>2]|0;f[d+(c<<3)>>2]=a;if(!a){Mb(e,1,8618,n)|0;n=0;u=o;return n|0}else{f[d+(c<<3)+4>>2]=k;hj(a|0,m|0,k|0)|0;n=1;u=o;return n|0}return 0}function pd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+48|0;p=q+40|0;m=q+32|0;j=q+24|0;i=q+16|0;o=q+44|0;if(d>>>0<2){Mb(e,1,9364,q)|0;p=0;u=q;return p|0}if(b[a+184>>0]&1){Mb(e,1,9390,q+8|0)|0;p=0;u=q;return p|0}h=f[a+164>>2]|0;g=f[a+200>>2]|0;n=h+(g*5640|0)+5636|0;b[n>>0]=b[n>>0]|2;zb(c,o,1);n=c+1|0;l=d+-1|0;k=h+(g*5640|0)+5164|0;c=f[k>>2]|0;do if(c){g=h+(g*5640|0)+5160|0;a=f[o>>2]|0;if((f[g>>2]|0)>>>0<=a>>>0){d=a+1|0;a=Lc(c,d<<3)|0;if(a|0){f[k>>2]=a;c=f[g>>2]|0;ij(a+(c<<3)|0,0,d-c<<3|0)|0;f[g>>2]=d;c=f[k>>2]|0;break}Mb(e,1,9491,j)|0;p=0;u=q;return p|0}}else{a=(f[o>>2]|0)+1|0;c=Ic(a,8)|0;f[k>>2]=c;if(c|0){f[h+(g*5640|0)+5160>>2]=a;break}Mb(e,1,9491,i)|0;p=0;u=q;return p|0}while(0);a=f[o>>2]|0;if(f[c+(a<<3)>>2]|0){f[m>>2]=a;Mb(e,1,9529,m)|0;p=0;u=q;return p|0}d=Hc(l)|0;c=f[k>>2]|0;a=f[o>>2]|0;f[c+(a<<3)>>2]=d;if(!d){Mb(e,1,9491,p)|0;p=0;u=q;return p|0}else{f[c+(a<<3)+4>>2]=l;hj(d|0,n|0,l|0)|0;p=1;u=q;return p|0}return 0}function qd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=u;u=u+16|0;if((f[(f[a+80>>2]|0)+16>>2]<<2|0)==(c|0)){d=1;u=b;return d|0}Mb(d,1,9338,b)|0;d=0;u=b;return d|0}function rd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function sd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=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;r=u;u=u+48|0;q=r+40|0;p=r+32|0;k=r+24|0;o=r+44|0;if((f[a+8>>2]|0)==16)i=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else i=f[a+12>>2]|0;if(c>>>0<2){Mb(d,1,9170,r)|0;q=0;u=r;return q|0}zb(b,o,2);if(f[o>>2]|0){Mb(d,2,9196,r+8|0)|0;q=1;u=r;return q|0}if(c>>>0<7){Mb(d,1,9170,r+16|0)|0;q=0;u=r;return q|0}zb(b+2|0,o,2);m=b+4|0;n=f[o>>2]&255;j=i+5612|0;e=f[j>>2]|0;l=i+5616|0;a=f[l>>2]|0;a:do if(!a){g=e;h=0}else{g=e;h=0;do{if((f[g+8>>2]|0)==(n|0))break a;g=g+20|0;h=h+1|0}while(h>>>0>>0)}while(0);if((h|0)==(a|0)){g=i+5620|0;do if((a|0)==(f[g>>2]|0)){a=a+10|0;f[g>>2]=a;a=Lc(e,a*20|0)|0;if(a|0){f[j>>2]=a;e=f[l>>2]|0;ij(a+(e*20|0)|0,0,((f[g>>2]|0)-e|0)*20|0)|0;e=f[j>>2]|0;a=f[l>>2]|0;break}Mc(f[j>>2]|0);f[j>>2]=0;f[g>>2]=0;f[l>>2]=0;Mb(d,1,9256,k)|0;q=0;u=r;return q|0}while(0);f[l>>2]=a+1;g=e+(a*20|0)|0}h=g+12|0;a=f[h>>2]|0;if(a|0){Mc(a);f[h>>2]=0}f[g+8>>2]=n;n=f[o>>2]|0;f[g+4>>2]=n>>>8&3;f[g>>2]=n>>>10&3;zb(m,o,2);if(f[o>>2]|0){Mb(d,2,9294,p)|0;q=1;u=r;return q|0}a=c+-6|0;e=Hc(a)|0;f[h>>2]=e;if(!e){Mb(d,1,9170,q)|0;q=0;u=r;return q|0}else{hj(e|0,b+6|0,a|0)|0;f[g+16>>2]=a;q=1;u=r;return q|0}return 0}function td(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+32|0;e=i+16|0;h=i+12|0;a=a+80|0;g=f[(f[a>>2]|0)+16>>2]|0;if((g+2|0)!=(c|0)){Mb(d,1,9144,i)|0;h=0;u=i;return h|0}zb(b,e,2);if((f[e>>2]|0)!=(g|0)){Mb(d,1,9144,i+8|0)|0;h=0;u=i;return h|0}if(!g){h=1;u=i;return h|0}d=0;c=b+2|0;a=f[(f[a>>2]|0)+24>>2]|0;while(1){zb(c,h,1);b=f[h>>2]|0;f[a+32>>2]=b>>>7&1;f[a+24>>2]=(b&127)+1;d=d+1|0;if((d|0)==(g|0)){a=1;break}else{c=c+1|0;a=a+52|0}}u=i;return a|0}function ud(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|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,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;K=u;u=u+144|0;J=K+120|0;I=K+112|0;H=K+104|0;G=K+96|0;F=K+88|0;E=K+80|0;D=K+72|0;C=K+64|0;B=K+56|0;A=K+48|0;o=K+40|0;n=K+32|0;l=K+24|0;v=K+136|0;w=K+132|0;x=K+128|0;y=K+124|0;if((f[a+8>>2]|0)==16)p=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else p=f[a+12>>2]|0;if(d>>>0<2){Mb(e,1,8804,K)|0;J=0;u=K;return J|0}zb(c,v,2);if(f[v>>2]|0){Mb(e,2,8830,K+8|0)|0;J=1;u=K;return J|0}if(d>>>0<7){Mb(e,1,8804,K+16|0)|0;J=0;u=K;return J|0}zb(c+2|0,w,1);m=c+3|0;k=p+5624|0;g=f[k>>2]|0;z=p+5628|0;a=f[z>>2]|0;a:do if(!a){i=g;h=0}else{j=f[w>>2]|0;i=g;h=0;do{if((f[i>>2]|0)==(j|0))break a;i=i+20|0;h=h+1|0}while(h>>>0>>0)}while(0);if((h|0)==(a|0)){h=p+5632|0;do if((a|0)==(f[h>>2]|0)){a=a+10|0;f[h>>2]=a;a=Lc(g,a*20|0)|0;if(a|0){f[k>>2]=a;g=f[z>>2]|0;ij(a+(g*20|0)|0,0,((f[h>>2]|0)-g|0)*20|0)|0;g=f[k>>2]|0;a=f[z>>2]|0;break}Mc(f[k>>2]|0);f[k>>2]=0;f[h>>2]=0;f[z>>2]=0;Mb(e,1,8876,l)|0;J=0;u=K;return J|0}while(0);t=1;h=g+(a*20|0)|0}else{t=0;h=i}f[h>>2]=f[w>>2];zb(m,v,2);if(f[v>>2]|0){Mb(e,2,8830,n)|0;J=1;u=K;return J|0}zb(c+5|0,x,2);g=f[x>>2]|0;if(g>>>0>1){Mb(e,2,8914,o)|0;J=1;u=K;return J|0}a=d+-7|0;b:do if(g){q=h+4|0;r=h+16|0;s=h+8|0;d=h+12|0;o=p+5612|0;n=p+5616|0;l=c+7|0;m=0;c:while(1){if(a>>>0<3){g=27;break}zb(l,v,1);if((f[v>>2]|0)!=1){g=29;break}zb(l+1|0,y,2);g=a+-3|0;i=f[y>>2]|0;j=(i>>>15)+1|0;i=i&32767;f[q>>2]=i;h=(X(j,i)|0)+2|0;if(g>>>0 >>0){g=31;break}a=l+3|0;k=g-h|0;if(i){g=0;do{zb(a,v,j);if((f[v>>2]|0)!=(g|0)){g=34;break c}a=a+j|0;g=g+1|0}while(g>>>0<(f[q>>2]|0)>>>0)}zb(a,y,2);g=a+2|0;h=f[y>>2]|0;i=(h>>>15)+1|0;h=h&32767;f[y>>2]=h;if((h|0)!=(f[q>>2]|0)){g=37;break}a=(X(i,h)|0)+3|0;if(k>>>0>>0){g=39;break}a=k-a|0;if(h){h=0;do{zb(g,v,i);if((f[v>>2]|0)!=(h|0)){g=42;break c}g=g+i|0;h=h+1|0}while(h>>>0<(f[q>>2]|0)>>>0)}zb(g,v,3);l=g+3|0;i=f[v>>2]|0;b[r>>0]=(i>>>16^1)&1|b[r>>0]&-2;f[s>>2]=0;f[d>>2]=0;j=i&255;f[w>>2]=j;if(j|0){k=f[n>>2]|0;if(!k){g=50;break}g=f[o>>2]|0;h=0;while(1){if((f[g+8>>2]|0)==(j|0))break;h=h+1|0;if(h>>>0>=k>>>0){g=50;break c}else g=g+20|0}f[s>>2]=g}i=i>>>8&255;f[w>>2]=i;if(i|0){j=f[n>>2]|0;if(!j){g=57;break}g=f[o>>2]|0;h=0;while(1){if((f[g+8>>2]|0)==(i|0))break;h=h+1|0;if(h>>>0>=j>>>0){g=57;break c}else g=g+20|0}f[d>>2]=g}m=m+1|0;if(m>>>0>=(f[x>>2]|0)>>>0)break b}if((g|0)==27){Mb(e,1,8804,A)|0;J=0;u=K;return J|0}else if((g|0)==29){Mb(e,2,8958,B)|0;J=1;u=K;return J|0}else if((g|0)==31){Mb(e,1,8804,C)|0;J=0;u=K;return J|0}else if((g|0)==34){Mb(e,2,9024,D)|0;J=1;u=K;return J|0}else if((g|0)==37){Mb(e,2,9078,E)|0;J=1;u=K;return J|0}else if((g|0)==39){Mb(e,1,8804,F)|0;J=0;u=K;return J|0}else if((g|0)==42){Mb(e,2,9024,G)|0;J=1;u=K;return J|0}else if((g|0)==50){Mb(e,1,8804,H)|0;J=0;u=K;return J|0}else if((g|0)==57){Mb(e,1,8804,I)|0;J=0;u=K;return J|0}}while(0);if(a|0){Mb(e,1,8804,J)|0;J=0;u=K;return J|0}if(!t){J=1;u=K;return J|0}f[z>>2]=(f[z>>2]|0)+1;J=1;u=K;return J|0}function vd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=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;r=u;u=u+32|0;m=r+24|0;p=r+20|0;q=a+80|0;e=f[q>>2]|0;if((f[a+8>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;if(!c){Mb(d,1,8723,r)|0;q=0;u=r;return q|0}zb(b,p,1);a=f[p>>2]|0;if(a>>>0>1){Mb(d,2,8749,r+8|0)|0;q=1;u=r;return q|0}if((a+1|0)!=(c|0)){Mb(d,2,8723,r+16|0)|0;q=0;u=r;return q|0}l=g+5584|0;e=f[e+16>>2]|0;if(e|0){c=f[l>>2]|0;d=0;while(1){f[c+1076>>2]=0;d=d+1|0;if(d>>>0>=e>>>0)break;else c=c+1080|0}}k=g+5604|0;c=f[k>>2]|0;if(c){Mc(c);f[k>>2]=0;a=f[p>>2]|0}if(!a){q=1;u=r;return q|0}j=g+5624|0;i=g+5628|0;h=0;while(1){b=b+1|0;zb(b,m,1);a=f[q>>2]|0;e=f[j>>2]|0;if((f[i>>2]|0?(f[e>>2]|0)==(f[m>>2]|0):0)?(n=f[e+4>>2]|0,o=a+16|0,(n|0)==(f[o>>2]|0)):0){a=f[e+8>>2]|0;if(a|0){c=X(n,n)|0;g=X(f[1036+(f[a>>2]<<2)>>2]|0,c)|0;if((f[a+16>>2]|0)!=(g|0)){a=0;c=32;break}d=Hc(c<<2)|0;f[k>>2]=d;if(!d){a=0;c=32;break}Ua[f[1052+(f[a>>2]<<2)>>2]&15](f[a+12>>2]|0,d,c)}a=f[e+12>>2]|0;if(a|0){c=f[o>>2]|0;g=X(c,f[1036+(f[a>>2]<<2)>>2]|0)|0;if((f[a+16>>2]|0)!=(g|0)){a=0;c=32;break}g=Hc(c<<2)|0;if(!g){a=0;c=32;break}Ua[f[1068+(f[a>>2]<<2)>>2]&15](f[a+12>>2]|0,g,c);e=f[o>>2]|0;if(e|0){a=g;c=f[l>>2]|0;d=0;while(1){f[c+1076>>2]=f[a>>2];d=d+1|0;if((d|0)==(e|0))break;else{a=a+4|0;c=c+1080|0}}}Mc(g)}}h=h+1|0;if(h>>>0>=(f[p>>2]|0)>>>0){a=1;c=32;break}}if((c|0)==32){u=r;return a|0}return 0}function wd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,2);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+2|0}}u=g;return}function xd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,4);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function yd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){Db(a,e);f[b>>2]=~~+n[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function zd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){Bb(a,e);f[b>>2]=~~+p[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}u=g;return}function Ad(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,2);n[b>>2]=+((f[e>>2]|0)>>>0);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+2|0}}u=g;return}function Bd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,4);n[b>>2]=+((f[e>>2]|0)>>>0);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function Cd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){Db(a,e);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function Dd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;f=u;u=u+16|0;e=f;if(!c){u=f;return}d=0;while(1){Bb(a,e);n[b>>2]=+p[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}u=f;return}function Ed(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+32|0;h=m+8|0;j=m+20|0;if((f[a+8>>2]|0)==16)a=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else a=f[a+12>>2]|0;l=f[a+5584>>2]|0;a=f[d>>2]|0;if(!a){Mb(e,1,10568,m)|0;b=0;u=m;return b|0}f[d>>2]=a+-1;zb(c,j,1);c=c+1|0;a=f[j>>2]|0;g=a&31;i=l+(b*1080|0)+24|0;f[i>>2]=g;f[l+(b*1080|0)+804>>2]=a>>>5;do if((g|0)==1){a=1;k=8}else{a=(f[d>>2]|0)>>>((g|0)!=0&1);if(a>>>0>97){f[h>>2]=a;f[h+4>>2]=97;f[h+8>>2]=97;Mb(e,2,10604,h)|0;g=f[i>>2]|0}e=(a|0)==0;if(g|0)if(e){a=0;k=20;break}else{k=8;break}if(!e){g=0;while(1){zb(c,j,1);if(g>>>0<97){f[l+(b*1080|0)+28+(g<<3)>>2]=(f[j>>2]|0)>>>3;f[l+(b*1080|0)+28+(g<<3)+4>>2]=0}g=g+1|0;if((g|0)==(a|0))break;else c=c+1|0}}a=(f[d>>2]|0)-a|0}while(0);if((k|0)==8){g=0;while(1){zb(c,j,2);if(g>>>0<97){k=f[j>>2]|0;f[l+(b*1080|0)+28+(g<<3)>>2]=k>>>11;f[l+(b*1080|0)+28+(g<<3)+4>>2]=k&2047}g=g+1|0;if((g|0)==(a|0)){k=20;break}else c=c+2|0}}if((k|0)==20)a=(f[d>>2]|0)-(a<<1)|0;f[d>>2]=a;if((f[i>>2]|0)!=1){b=1;u=m;return b|0}c=l+(b*1080|0)+28|0;g=l+(b*1080|0)+32|0;a=1;do{d=(f[c>>2]|0)-(((a+-1|0)>>>0)/3|0)|0;f[l+(b*1080|0)+28+(a<<3)>>2]=(d|0)>0?d:0;f[l+(b*1080|0)+28+(a<<3)+4>>2]=f[g>>2];a=a+1|0}while((a|0)!=97);a=1;u=m;return a|0}function Fd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+64|0;o=q+48|0;k=q+40|0;j=q+16|0;i=q+8|0;n=q+52|0;h=a+8|0;if((f[h>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;l=f[g+5584>>2]|0;if((f[d>>2]|0)>>>0<5){Mb(e,1,11008,q)|0;d=0;u=q;return d|0}m=l+(b*1080|0)+4|0;zb(c,m,1);g=(f[m>>2]|0)+1|0;f[m>>2]=g;if(g>>>0>33){f[i>>2]=g;f[i+4>>2]=33;Mb(e,1,11043,i)|0;d=0;u=q;return d|0}if((f[a+168>>2]|0)>>>0>=g>>>0){f[j>>2]=b;Mb(e,1,11120,j)|0;f[h>>2]=f[h>>2]|32768;d=0;u=q;return d|0}i=l+(b*1080|0)+8|0;zb(c+1|0,i,1);f[i>>2]=(f[i>>2]|0)+2;h=l+(b*1080|0)+12|0;zb(c+2|0,h,1);j=(f[h>>2]|0)+2|0;f[h>>2]=j;i=f[i>>2]|0;if(j>>>0>10|i>>>0>10|(i+j|0)>>>0>12){Mb(e,1,11278,q+24|0)|0;d=0;u=q;return d|0}j=l+(b*1080|0)+16|0;zb(c+3|0,j,1);if(f[j>>2]&192|0){Mb(e,1,11346,q+32|0)|0;d=0;u=q;return d|0}zb(c+4|0,l+(b*1080|0)+20|0,1);g=(f[d>>2]|0)+-5|0;f[d>>2]=g;a=f[m>>2]|0;if(!(f[l+(b*1080|0)>>2]&1)){if(!a){d=1;u=q;return d|0}else g=0;do{f[l+(b*1080|0)+812+(g<<2)>>2]=15;f[l+(b*1080|0)+944+(g<<2)>>2]=15;g=g+1|0}while(g>>>0<(f[m>>2]|0)>>>0);g=1;u=q;return g|0}if(g>>>0>>0){Mb(e,1,11008,k)|0;d=0;u=q;return d|0}do if(!a)a=0;else{i=0;h=c+5|0;while(1){zb(h,n,1);h=h+1|0;g=f[n>>2]|0;if(i|0?g>>>0<16|(g&15|0)==0:0)break;f[l+(b*1080|0)+812+(i<<2)>>2]=g&15;f[l+(b*1080|0)+944+(i<<2)>>2]=g>>>4;i=i+1|0;a=f[m>>2]|0;if(i>>>0>=a>>>0){p=24;break}}if((p|0)==24){g=f[d>>2]|0;break}Mb(e,1,11413,o)|0;d=0;u=q;return d|0}while(0);f[d>>2]=g-a;d=1;u=q;return d|0}function Gd(a,c,e,g,h,i,j,k,l,m,n){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=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=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,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;Ca=u;u=u+256|0;Ba=Ca+200|0;Aa=Ca+192|0;ya=Ca+184|0;xa=Ca+176|0;ta=Ca+168|0;sa=Ca+160|0;ra=Ca+152|0;qa=Ca+144|0;pa=Ca+136|0;oa=Ca+128|0;ma=Ca+120|0;la=Ca+112|0;ka=Ca+104|0;ja=Ca+96|0;ia=Ca+88|0;ha=Ca+80|0;ga=Ca+72|0;fa=Ca+64|0;ea=Ca+56|0;da=Ca+48|0;wa=Ca+40|0;va=Ca+32|0;ua=Ca+24|0;na=Ca+16|0;ca=Ca+8|0;ba=Ca;C=Ca+240|0;D=Ca+236|0;E=Ca+232|0;F=Ca+228|0;H=Ca+224|0;J=Ca+220|0;K=Ca+216|0;L=Ca+212|0;M=Ca+208|0;f[L>>2]=65424;za=a+8|0;switch(f[za>>2]|0){case 256:{f[L>>2]=65497;o=a+76|0;break}case 8:{o=a+76|0;if(!(b[o>>0]&1)){N=a+164|0;O=a+200|0;P=a+72|0;Q=a+24|0;R=a+196|0;S=a+112|0;V=a+116|0;W=C+2|0;Y=C+6|0;Z=C+7|0;_=a+16|0;$=a+20|0;aa=a+64|0;p=65424;a:do{b:do if((p|0)!=65427){while(1){A=Ib(m)|0;if((A|0)==0&(I|0)==0){B=50;break}if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=8;break a}zb(f[_>>2]|0,M,2);if((f[M>>2]|0)>>>0<2){B=10;break a}if((f[L>>2]|0)==32896?(A=Ib(m)|0,(A|0)==0&(I|0)==0):0){B=50;break}r=f[za>>2]|0;p=f[M>>2]|0;if(r&16|0)f[Q>>2]=-2-p+(f[Q>>2]|0);q=p+-2|0;f[M>>2]=q;p=f[L>>2]|0;z=784;while(1){A=f[z>>2]|0;if((A|0)==0|(A|0)==(p|0))break;else z=z+12|0}if(!(f[z+4>>2]&r)){B=18;break a}if(q>>>0>(f[$>>2]|0)>>>0){A=Ib(m)|0;y=I;if((y|0)<0|(y|0)==0&A>>>0 >>0){B=22;break a}p=Lc(f[_>>2]|0,f[M>>2]|0)|0;if(!p){B=24;break a}f[_>>2]=p;q=f[M>>2]|0;f[$>>2]=q}else p=f[_>>2]|0;p=Eb(m,p,q,n)|0;if((p|0)!=(f[M>>2]|0)){B=27;break a}q=f[z+8>>2]|0;if(!q){B=29;break a}if(!(Na[q&63](a,f[_>>2]|0,p,n)|0)){B=31;break a}v=f[O>>2]|0;t=f[R>>2]|0;w=f[z>>2]|0;x=Hb(m)|0;y=f[M>>2]|0;x=x-y+-4|0;y=y+4|0;t=t+40|0;s=f[t>>2]|0;p=f[s+(v*40|0)+20>>2]|0;q=s+(v*40|0)+28|0;r=f[q>>2]|0;if((p+1|0)>>>0>r>>>0){r=~~(+(r>>>0)+100.0)>>>0;f[q>>2]=r;q=Lc(f[s+(v*40|0)+24>>2]|0,r*24|0)|0;r=f[t>>2]|0;p=r+(v*40|0)+24|0;if(!q){B=39;break a}f[p>>2]=q;t=r;p=f[r+(v*40|0)+20>>2]|0}else{t=s;q=f[s+(v*40|0)+24>>2]|0}d[q+(p*24|0)>>1]=w;A=q+(p*24|0)+8|0;f[A>>2]=x;f[A+4>>2]=((x|0)<0)<<31>>31;f[q+(p*24|0)+16>>2]=y;f[t+(v*40|0)+20>>2]=p+1;if((w|0)==65424?(G=f[t+(v*40|0)+16>>2]|0,G|0):0){A=G+((f[t+(v*40|0)+12>>2]|0)*24|0)|0;f[A>>2]=x;f[A+4>>2]=0}do if((f[z>>2]|0)==65424){p=Hb(m)|0;p=-4-(f[M>>2]|0)+p|0;A=aa;z=f[A+4>>2]|0;if(!((z|0)<0|((z|0)==0?(f[A>>2]|0)>>>0>>0:0)))break;A=aa;f[A>>2]=p;f[A+4>>2]=0}while(0);if(b[o>>0]&4)break;if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=48;break a}zb(f[_>>2]|0,L,2);if((f[L>>2]|0)==65427)break b}if((B|0)==50){B=0;f[za>>2]=64;break}A=Jb(m,f[Q>>2]|0,0,n)|0;if(!((I|0)==0?(A|0)==(f[Q>>2]|0):0)){B=45;break a}f[L>>2]=65427}while(0);A=Ib(m)|0;if((A|0)==0&(I|0)==0?(f[za>>2]|0)==64:0){B=114;break}p=b[o>>0]|0;if(!(p&4)){q=f[N>>2]|0;r=f[O>>2]|0;if(!(f[P>>2]|0)){p=f[Q>>2]|0;if(p>>>0>1){p=p+-2|0;B=57}}else{p=Ib(m)|0;p=Zi(p|0,I|0,-2,0)|0;B=57}if((B|0)==57){B=0;f[Q>>2]=p}A=q+(r*5640|0)+5592|0;z=q+(r*5640|0)+5596|0;do if(!p)x=1;else{y=Ib(m)|0;x=I;if((x|0)<0|(x|0)==0&y>>>0
>>0)Mb(n,2,12386,ia)|0;p=f[A>>2]|0;if(!p){y=Hc(f[Q>>2]|0)|0;f[A>>2]=y;if(!y){B=66;break a}else{x=0;break}}p=Lc(p,(f[Q>>2]|0)+(f[z>>2]|0)|0)|0;if(!p){B=64;break a}f[A>>2]=p;x=0}while(0);p=f[R>>2]|0;if(p|0){Da=Hb(m)|0;r=I;y=Zi(Da|0,r|0,-2,-1)|0;t=p+40|0;s=f[t>>2]|0;v=f[O>>2]|0;w=f[s+(v*40|0)+12>>2]|0;q=f[s+(v*40|0)+16>>2]|0;p=q+(w*24|0)+8|0;f[p>>2]=y;f[p+4>>2]=I;p=Zi(Da|0,r|0,f[Q>>2]|0,0)|0;w=q+(w*24|0)+16|0;f[w>>2]=p;f[w+4>>2]=I;w=(f[Q>>2]|0)+2|0;p=f[s+(v*40|0)+20>>2]|0;q=s+(v*40|0)+28|0;r=f[q>>2]|0;if((p+1|0)>>>0>r>>>0){r=~~(+(r>>>0)+100.0)>>>0;f[q>>2]=r;q=Lc(f[s+(v*40|0)+24>>2]|0,r*24|0)|0;r=f[t>>2]|0;p=r+(v*40|0)+24|0;if(!q){B=73;break}f[p>>2]=q;t=r;p=f[r+(v*40|0)+20>>2]|0}else{t=s;q=f[s+(v*40|0)+24>>2]|0}d[q+(p*24|0)>>1]=-109;y=dj(0,y|0,32)|0;Da=q+(p*24|0)+8|0;f[Da>>2]=y;f[Da+4>>2]=I;f[q+(p*24|0)+16>>2]=w;f[t+(v*40|0)+20>>2]=p+1}if(!x)p=Eb(m,(f[A>>2]|0)+(f[z>>2]|0)|0,f[Q>>2]|0,n)|0;else p=0;f[za>>2]=(p|0)!=(f[Q>>2]|0)?64:8;f[z>>2]=(f[z>>2]|0)+p;p=b[o>>0]|0;if((p&9)==1){b[o>>0]=p|8;q=f[O>>2]|0;do if((Lb(m)|0)!=0?(T=Hb(m)|0,U=I,!((T|0)==-1&(U|0)==-1)):0){while(1){if((Eb(m,C,2,n)|0)!=2){B=80;break}zb(C,D,2);if((f[D>>2]|0)!=65424){B=82;break}if((Eb(m,C,2,n)|0)!=2){B=84;break}zb(C,E,2);if((f[E>>2]|0)!=10){B=86;break}f[E>>2]=8;p=Eb(m,C,8,n)|0;if((p|0)!=(f[E>>2]|0)){B=88;break}if((p|0)!=8){B=90;break}zb(C,F,2);zb(W,H,4);zb(Y,J,1);zb(Z,K,1);if((f[F>>2]|0)==(q|0)){B=96;break}p=f[H>>2]|0;if(p>>>0<14){B=93;break}Da=p+-12|0;f[H>>2]=Da;Da=Jb(m,Da,0,n)|0;if(!((I|0)==0?(Da|0)==(f[H>>2]|0):0)){B=95;break}}if((B|0)==80){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==82){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==84){B=0;Mb(n,1,8150,la)|0;p=0;q=0;break}else if((B|0)==86){B=0;Mb(n,1,12203,ma)|0;p=0;q=0;break}else if((B|0)==88){B=0;Mb(n,1,8150,oa)|0;p=0;q=0;break}else if((B|0)==90){B=0;Mb(n,1,11669,pa)|0;p=0;q=0;break}else if((B|0)==93){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==95){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==96){B=0;q=(f[J>>2]|0)==(f[K>>2]|0)&1;p=(Kb(m,T,U,n)|0)!=0;break}}else{p=1;q=0}while(0);if(!p){B=98;break}if(q|0){q=X(f[V>>2]|0,f[S>>2]|0)|0;b[o>>0]=b[o>>0]&-18|16;if(q|0){r=f[N>>2]|0;p=0;do{s=r+(p*5640|0)+5588|0;t=f[s>>2]|0;if(t|0)f[s>>2]=t+1;p=p+1|0}while((p|0)!=(q|0))}Mb(n,2,12521,ra)|0}}if(!(b[o>>0]&1)){if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=108;break}zb(f[_>>2]|0,L,2)}}else{b[o>>0]=p&-6;f[za>>2]=8;if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=112;break}zb(f[_>>2]|0,L,2)}p=f[L>>2]|0}while((p|0)!=65497&(b[o>>0]&1)==0);switch(B|0){case 8:{Mb(n,1,8150,ba)|0;Da=0;u=Ca;return Da|0}case 10:{Mb(n,1,12203,ca)|0;Da=0;u=Ca;return Da|0}case 18:{Mb(n,1,8235,na)|0;Da=0;u=Ca;return Da|0}case 22:{Mb(n,1,12229,ua)|0;Da=0;u=Ca;return Da|0}case 24:{Mc(f[_>>2]|0);f[_>>2]=0;f[$>>2]=0;Mb(n,1,8333,va)|0;Da=0;u=Ca;return Da|0}case 27:{Mb(n,1,8150,wa)|0;Da=0;u=Ca;return Da|0}case 29:{Mb(n,1,12274,da)|0;Da=0;u=Ca;return Da|0}case 31:{f[ea>>2]=f[L>>2];Mb(n,1,12303,ea)|0;Da=0;u=Ca;return Da|0}case 39:{Mc(f[p>>2]|0);Da=f[t>>2]|0;f[Da+(v*40|0)+24>>2]=0;f[Da+(v*40|0)+28>>2]=0;f[Da+(v*40|0)+20>>2]=0;Mb(n,1,12350,fa)|0;Da=0;u=Ca;return Da|0}case 45:{Mb(n,1,8150,ga)|0;Da=0;u=Ca;return Da|0}case 48:{Mb(n,1,8150,ha)|0;Da=0;u=Ca;return Da|0}case 64:{Mc(f[A>>2]|0);f[A>>2]=0;B=66;break}case 73:{Mc(f[p>>2]|0);Da=f[t>>2]|0;f[Da+(v*40|0)+24>>2]=0;f[Da+(v*40|0)+28>>2]=0;f[Da+(v*40|0)+20>>2]=0;Mb(n,1,12350,ka)|0;Da=0;u=Ca;return Da|0}case 98:{Mb(n,1,12475,qa)|0;Da=0;u=Ca;return Da|0}case 108:{Mb(n,1,8150,sa)|0;Da=0;u=Ca;return Da|0}case 112:{Mb(n,1,8150,ta)|0;Da=0;u=Ca;return Da|0}case 114:{p=f[L>>2]|0;break}}if((B|0)==66){Mb(n,1,12441,ja)|0;Da=0;u=Ca;return Da|0}if((p|0)==65497?(f[za>>2]|0)!=256:0){f[a+200>>2]=0;f[za>>2]=256}}break}default:{Da=0;u=Ca;return Da|0}}if(!(b[o>>0]&1)){q=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;s=f[a+164>>2]|0;r=a+200|0;o=f[r>>2]|0;c:do if(o>>>0
>>0){p=s+(o*5640|0)|0;while(1){if(f[p+5592>>2]|0)break c;o=o+1|0;f[r>>2]=o;if(o>>>0>>0)p=p+5640|0;else break}}while(0);if((o|0)==(q|0)){f[l>>2]=0;Da=1;u=Ca;return Da|0}}else{o=a+200|0;r=o;s=f[a+164>>2]|0;o=f[o>>2]|0}if(b[s+(o*5640|0)+5636>>0]&2){B=s+(o*5640|0)+5160|0;t=f[B>>2]|0;if(!t)p=0;else{v=f[s+(o*5640|0)+5164>>2]|0;q=0;p=0;do{p=(f[v+(q<<3)+4>>2]|0)+p|0;q=q+1|0}while((q|0)!=(t|0))}Da=Hc(p)|0;A=s+(o*5640|0)+5172|0;f[A>>2]=Da;if(!Da){Mb(n,1,9491,xa)|0;Mb(n,1,12562,ya)|0;Da=0;u=Ca;return Da|0}z=s+(o*5640|0)+5180|0;f[z>>2]=p;q=f[B>>2]|0;y=s+(o*5640|0)+5164|0;if(!q)p=f[y>>2]|0;else{p=f[y>>2]|0;x=0;v=0;w=p;while(1){t=f[w+(x<<3)>>2]|0;if(!t)t=w;else{hj((f[A>>2]|0)+v|0,t|0,f[w+(x<<3)+4>>2]|0)|0;t=f[y>>2]|0;v=(f[t+(x<<3)+4>>2]|0)+v|0;Mc(f[t+(x<<3)>>2]|0);t=f[y>>2]|0;f[t+(x<<3)>>2]=0;f[t+(x<<3)+4>>2]=0;q=f[B>>2]|0;p=t}x=x+1|0;if(x>>>0>=q>>>0)break;else w=t}}f[B>>2]=0;Mc(p);f[y>>2]=0;f[s+(o*5640|0)+5168>>2]=f[A>>2];f[s+(o*5640|0)+5176>>2]=f[z>>2]}o=a+204|0;if(!(Wf(f[o>>2]|0,f[r>>2]|0,n)|0)){Mb(n,1,8019,Aa)|0;Da=0;u=Ca;return Da|0}else{Da=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;f[Ba>>2]=(f[r>>2]|0)+1;f[Ba+4>>2]=Da;Mb(n,4,12588,Ba)|0;f[c>>2]=f[r>>2];f[l>>2]=1;Da=Xf(f[o>>2]|0)|0;f[e>>2]=Da;Da=f[f[(f[o>>2]|0)+20>>2]>>2]|0;f[g>>2]=f[Da>>2];f[h>>2]=f[Da+4>>2];f[i>>2]=f[Da+8>>2];f[j>>2]=f[Da+12>>2];f[k>>2]=f[Da+16>>2];f[za>>2]=f[za>>2]|128;Da=1;u=Ca;return Da|0}return 0}function Hd(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=u;u=u+48|0;p=s+28|0;q=s+32|0;r=a+8|0;if(!(f[r>>2]&128)){r=0;u=s;return r|0}n=a+200|0;if((f[n>>2]|0)!=(c|0)){r=0;u=s;return r|0}i=f[a+164>>2]|0;j=i+(c*5640|0)|0;o=i+(c*5640|0)+5592|0;k=f[o>>2]|0;if(!k){Rc(j);r=0;u=s;return r|0}l=a+204|0;m=i+(c*5640|0)+5596|0;if(!(Zf(f[l>>2]|0,k,f[m>>2]|0,c,f[a+196>>2]|0,h)|0)){Rc(j);f[r>>2]=f[r>>2]|32768;Mb(h,1,12627,s)|0;r=0;u=s;return r|0}if(!(_f(f[l>>2]|0,d,e)|0)){r=0;u=s;return r|0}i=f[o>>2]|0;if(i|0){Mc(i);f[o>>2]=0;f[m>>2]=0}a=a+76|0;b[a>>0]=b[a>>0]&-2;f[r>>2]=f[r>>2]&-129;a=Ib(g)|0;o=f[r>>2]|0;if((o|0)==256|(a|0)==0&(I|0)==0&(o|0)==64){r=1;u=s;return r|0}if((Eb(g,q,2,h)|0)!=2){Mb(h,2,12646,s+8|0)|0;r=1;u=s;return r|0}zb(q,p,2);switch(f[p>>2]|0){case 65497:{f[n>>2]=0;f[r>>2]=256;r=1;u=s;return r|0}case 65424:{r=1;u=s;return r|0}default:if((Ib(g)|0)==0&(I|0)==0){f[r>>2]=64;Mb(h,2,12690,s+16|0)|0;r=1;u=s;return r|0}else{Mb(h,1,12720,s+24|0)|0;r=0;u=s;return r|0}}return 0}function Id(a,c,d,e,g,h,i){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;z=u;u=u+112|0;y=z+96|0;x=z+88|0;w=z+80|0;v=z+72|0;t=z+64|0;s=z+56|0;q=z+48|0;n=z+40|0;m=z+32|0;l=z+24|0;k=z+16|0;p=f[a+80>>2]|0;if((f[a+8>>2]|0)!=8){Mb(i,1,12752,z)|0;y=0;u=z;return y|0}if(!(e|d|g|h)){Mb(i,4,12831,z+8|0)|0;f[a+28>>2]=0;f[a+32>>2]=0;f[a+36>>2]=f[a+112>>2];f[a+40>>2]=f[a+116>>2];y=1;u=z;return y|0}r=p+8|0;j=f[r>>2]|0;if(j>>>0>>0){f[k>>2]=d;f[k+4>>2]=j;Mb(i,1,12900,k)|0;y=0;u=z;return y|0}j=f[p>>2]|0;if(j>>>0>d>>>0){f[l>>2]=d;f[l+4>>2]=j;Mb(i,2,12987,l)|0;f[a+28>>2]=0;d=f[p>>2]|0}else f[a+28>>2]=((d-(f[a+92>>2]|0)|0)>>>0)/((f[a+100>>2]|0)>>>0)|0;f[c>>2]=d;o=p+12|0;d=f[o>>2]|0;if(d>>>0 >>0){f[m>>2]=e;f[m+4>>2]=d;Mb(i,1,13075,m)|0;y=0;u=z;return y|0}k=p+4|0;d=f[k>>2]|0;if(d>>>0>e>>>0){f[n>>2]=e;f[n+4>>2]=d;Mb(i,2,13160,n)|0;f[a+32>>2]=0;d=f[k>>2]|0}else{f[a+32>>2]=((e-(f[a+96>>2]|0)|0)>>>0)/((f[a+104>>2]|0)>>>0)|0;d=e}l=c+4|0;f[l>>2]=d;d=f[p>>2]|0;if(d>>>0>g>>>0){f[q>>2]=g;f[q+4>>2]=d;Mb(i,1,13246,q)|0;y=0;u=z;return y|0}d=f[r>>2]|0;if(d>>>0 >>0){f[s>>2]=g;f[s+4>>2]=d;Mb(i,2,13335,s)|0;f[a+36>>2]=f[a+112>>2];g=f[r>>2]|0}else{s=f[a+100>>2]|0;f[a+36>>2]=(g+-1-(f[a+92>>2]|0)+s|0)/(s|0)|0}j=c+8|0;f[j>>2]=g;g=f[k>>2]|0;if(g>>>0>h>>>0){f[t>>2]=h;f[t+4>>2]=g;Mb(i,1,13423,t)|0;y=0;u=z;return y|0}g=f[o>>2]|0;if(g>>>0 >>0){f[v>>2]=h;f[v+4>>2]=g;Mb(i,2,13513,v)|0;f[a+40>>2]=f[a+116>>2];h=f[o>>2]|0}else{v=f[a+104>>2]|0;f[a+40>>2]=(h+-1-(f[a+96>>2]|0)+v|0)/(v|0)|0}v=c+12|0;f[v>>2]=h;t=a+76|0;b[t>>0]=b[t>>0]|2;t=f[c+16>>2]|0;a=f[c>>2]|0;a:do if(t){d=f[l>>2]|0;s=d+-1|0;g=f[j>>2]|0;q=g+-1|0;r=a+-1|0;p=0;o=f[c+24>>2]|0;while(1){c=f[o>>2]|0;n=(r+c|0)/(c|0)|0;f[o+16>>2]=n;j=f[o+4>>2]|0;k=(s+j|0)/(j|0)|0;f[o+20>>2]=k;c=(q+c|0)/(c|0)|0;l=f[o+40>>2]|0;m=fj(1,0,l|0)|0;e=I;c=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;c=Zi(c|0,I|0,m|0,e|0)|0;c=dj(c|0,I|0,l|0)|0;n=Zi(n|0,((n|0)<0)<<31>>31|0,-1,-1)|0;n=Zi(n|0,I|0,m|0,e|0)|0;n=dj(n|0,I|0,l|0)|0;n=c-n|0;if((n|0)<0){j=29;break}h=f[v>>2]|0;c=(j+-1+h|0)/(j|0)|0;f[o+8>>2]=n;c=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;c=Zi(c|0,I|0,m|0,e|0)|0;c=dj(c|0,I|0,l|0)|0;k=Zi(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;k=Zi(k|0,I|0,m|0,e|0)|0;k=dj(k|0,I|0,l|0)|0;k=c-k|0;if((k|0)<0){j=31;break}f[o+12>>2]=k;j=p+1|0;if(j>>>0 >>0){p=j;o=o+52|0}else break a}if((j|0)==29){f[w>>2]=p;f[w+4>>2]=n;Mb(i,1,13602,w)|0;y=0;u=z;return y|0}else if((j|0)==31){f[x>>2]=p;f[x+4>>2]=k;Mb(i,1,13671,x)|0;y=0;u=z;return y|0}}else{d=f[l>>2]|0;g=f[j>>2]|0;h=f[v>>2]|0}while(0);f[y>>2]=a;f[y+4>>2]=d;f[y+8>>2]=g;f[y+12>>2]=h;Mb(i,4,13740,y)|0;y=1;u=z;return y|0}function Jd(){var a=0,c=0,d=0;a=Ic(1,208)|0;if(!a){c=0;return c|0}f[a>>2]=1;c=a+184|0;b[c>>0]=b[c>>0]|2;c=Ic(1,5640)|0;f[a+12>>2]=c;if(!c){Qc(a);c=0;return c|0}c=Ic(1,1e3)|0;f[a+16>>2]=c;if(!c){Qc(a);c=0;return c|0}f[a+20>>2]=1e3;f[a+60>>2]=-1;c=a+64|0;f[c>>2]=0;f[c+4>>2]=0;c=Ic(1,48)|0;do if(c|0){f[c+32>>2]=100;f[c+24>>2]=0;d=Ic(100,24)|0;f[c+28>>2]=d;if(!d){Mc(c);break}f[c+40>>2]=0;f[a+196>>2]=c;d=ig()|0;f[a+192>>2]=d;if(!d){Qc(a);d=0;return d|0}d=ig()|0;f[a+188>>2]=d;if(d|0){d=a;return d|0}Qc(a);d=0;return d|0}while(0);f[a+196>>2]=0;Qc(a);d=0;return d|0}function Kd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+128|0;w=x+104|0;v=x+72|0;t=x+64|0;q=x+40|0;o=x+24|0;l=x+16|0;k=x+8|0;i=x;if(b&384|0){Mh(13778,11,1,c)|0;u=x;return}if(b&1|0?(h=f[a+80>>2]|0,h|0):0)Ld(h,0,c);if(b&2|0?(e=a+80|0,f[e>>2]|0):0){Mh(13790,36,1,c)|0;h=f[a+96>>2]|0;f[i>>2]=f[a+92>>2];f[i+4>>2]=h;ki(c,13827,i)|0;i=f[a+104>>2]|0;f[k>>2]=f[a+100>>2];f[k+4>>2]=i;ki(c,13845,k)|0;k=f[a+116>>2]|0;f[l>>2]=f[a+112>>2];f[l+4>>2]=k;ki(c,13863,l)|0;Md(f[a+12>>2]|0,f[(f[e>>2]|0)+16>>2]|0,c);Mh(13879,2,1,c)|0}if((b&8|0?(m=X(f[a+112>>2]|0,f[a+116>>2]|0)|0,n=a+80|0,g=f[n>>2]|0,!((g|0)==0|(m|0)==0)):0)?(d=f[a+164>>2]|0,Md(d,f[g+16>>2]|0,c),(m|0)!=1):0){e=1;do{d=d+5640|0;Md(d,f[(f[n>>2]|0)+16>>2]|0,c);e=e+1|0}while((e|0)!=(m|0))}if(!(b&16)){u=x;return}h=f[a+196>>2]|0;Mh(13882,37,1,c)|0;b=h;m=f[b+4>>2]|0;e=h+8|0;n=f[e>>2]|0;e=f[e+4>>2]|0;g=o;f[g>>2]=f[b>>2];f[g+4>>2]=m;g=o+8|0;f[g>>2]=n;f[g+4>>2]=e;ki(c,13920,o)|0;Mh(13987,17,1,c)|0;g=h+28|0;e=f[g>>2]|0;a:do if(e|0?(p=h+24|0,f[p>>2]|0):0){d=0;while(1){m=e+(d*24|0)+8|0;b=f[m>>2]|0;m=f[m+4>>2]|0;o=f[e+(d*24|0)+16>>2]|0;f[q>>2]=j[e+(d*24|0)>>1];n=q+8|0;f[n>>2]=b;f[n+4>>2]=m;f[q+16>>2]=o;ki(c,14005,q)|0;d=d+1|0;if(d>>>0>=(f[p>>2]|0)>>>0)break a;e=f[g>>2]|0}}while(0);Mh(14036,4,1,c)|0;k=h+40|0;g=f[k>>2]|0;if(g|0?(s=h+36|0,r=f[s>>2]|0,r|0):0){d=0;e=0;do{d=(f[g+(e*40|0)+4>>2]|0)+d|0;e=e+1|0}while((e|0)!=(r|0));if(d|0){Mh(14041,16,1,c)|0;if(f[s>>2]|0){i=0;d=f[k>>2]|0;do{h=f[d+(i*40|0)+4>>2]|0;f[t>>2]=i;f[t+4>>2]=h;ki(c,14058,t)|0;d=f[k>>2]|0;g=f[d+(i*40|0)+16>>2]|0;b:do if((h|0)!=0&(g|0)!=0){e=0;d=g;while(1){n=d+(e*24|0)|0;m=f[n>>2]|0;n=f[n+4>>2]|0;p=d+(e*24|0)+8|0;o=f[p>>2]|0;p=f[p+4>>2]|0;r=d+(e*24|0)+16|0;q=f[r>>2]|0;r=f[r+4>>2]|0;f[v>>2]=e;d=v+8|0;f[d>>2]=m;f[d+4>>2]=n;d=v+16|0;f[d>>2]=o;f[d+4>>2]=p;d=v+24|0;f[d>>2]=q;f[d+4>>2]=r;ki(c,14094,v)|0;e=e+1|0;d=f[k>>2]|0;if((e|0)==(h|0))break b;d=f[d+(i*40|0)+16>>2]|0}}while(0);g=f[d+(i*40|0)+24>>2]|0;c:do if((g|0)!=0?(f[d+(i*40|0)+20>>2]|0)!=0:0){e=0;d=g;while(1){q=d+(e*24|0)+8|0;p=f[q>>2]|0;q=f[q+4>>2]|0;r=f[d+(e*24|0)+16>>2]|0;f[w>>2]=j[d+(e*24|0)>>1];d=w+8|0;f[d>>2]=p;f[d+4>>2]=q;f[w+16>>2]=r;ki(c,14005,w)|0;e=e+1|0;d=f[k>>2]|0;if(e>>>0>=(f[d+(i*40|0)+20>>2]|0)>>>0)break c;d=f[d+(i*40|0)+24>>2]|0}}while(0);i=i+1|0}while(i>>>0<(f[s>>2]|0)>>>0)}Mh(14036,4,1,c)|0}}Mh(13879,2,1,c)|0;u=x;return}function Ld(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=u;u=u+64|0;l=m+48|0;k=m+40|0;i=m+32|0;h=m+16|0;g=m;j=m+52|0;if(!c){Mh(14492,13,1,d)|0;b[j>>0]=9;e=1}else{Mh(14455,36,1,f[665]|0)|0;e=0}b[j+e>>0]=0;n=f[a>>2]|0;e=f[a+4>>2]|0;f[g>>2]=j;f[g+4>>2]=n;f[g+8>>2]=e;ki(d,14506,g)|0;e=f[a+8>>2]|0;g=f[a+12>>2]|0;f[h>>2]=j;f[h+4>>2]=e;f[h+8>>2]=g;ki(d,14523,h)|0;h=a+16|0;g=f[h>>2]|0;f[i>>2]=j;f[i+4>>2]=g;ki(d,14540,i)|0;g=a+24|0;if(!(f[g>>2]|0)){Mh(13879,2,1,d)|0;u=m;return}if(!(f[h>>2]|0)){Mh(13879,2,1,d)|0;u=m;return}else e=0;do{f[k>>2]=j;f[k+4>>2]=e;ki(d,14556,k)|0;Nd((f[g>>2]|0)+(e*52|0)|0,c,d);f[l>>2]=j;ki(d,14576,l)|0;e=e+1|0}while(e>>>0<(f[h>>2]|0)>>>0);Mh(13879,2,1,d)|0;u=m;return}function Md(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=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,v=0,w=0,x=0;w=u;u=u+128|0;t=w+120|0;s=w+112|0;r=w+104|0;q=w+96|0;p=w+88|0;o=w+80|0;n=w+72|0;m=w+64|0;l=w+56|0;k=w+48|0;j=w+40|0;i=w+32|0;h=w+24|0;g=w+16|0;e=w+8|0;d=w;if(!a){u=w;return}Mh(14160,17,1,c)|0;f[d>>2]=f[a>>2];ki(c,14178,d)|0;f[e>>2]=f[a+4>>2];ki(c,14191,e)|0;f[g>>2]=f[a+8>>2];ki(c,14203,g)|0;f[h>>2]=f[a+16>>2];ki(c,14220,h)|0;if((b|0)>0){g=a+5584|0;e=0;do{h=f[g>>2]|0;f[i>>2]=e;ki(c,14231,i)|0;f[j>>2]=f[h+(e*1080|0)>>2];ki(c,14245,j)|0;d=h+(e*1080|0)+4|0;f[k>>2]=f[d>>2];ki(c,14259,k)|0;f[l>>2]=f[h+(e*1080|0)+8>>2];ki(c,14282,l)|0;f[m>>2]=f[h+(e*1080|0)+12>>2];ki(c,14298,m)|0;f[n>>2]=f[h+(e*1080|0)+16>>2];ki(c,14314,n)|0;f[o>>2]=f[h+(e*1080|0)+20>>2];ki(c,14331,o)|0;Mh(14346,23,1,c)|0;if(f[d>>2]|0){a=0;do{x=f[h+(e*1080|0)+944+(a<<2)>>2]|0;f[p>>2]=f[h+(e*1080|0)+812+(a<<2)>>2];f[p+4>>2]=x;ki(c,14370,p)|0;a=a+1|0}while(a>>>0<(f[d>>2]|0)>>>0)}Ri(10,c)|0;x=h+(e*1080|0)+24|0;f[q>>2]=f[x>>2];ki(c,14379,q)|0;f[r>>2]=f[h+(e*1080|0)+804>>2];ki(c,14394,r)|0;Mh(14411,20,1,c)|0;if((f[x>>2]|0)!=1){a=(f[d>>2]|0)*3|0;if((a|0)>2){d=a+-2|0;v=8}}else{d=1;v=8}if((v|0)==8){v=0;a=0;do{x=f[h+(e*1080|0)+28+(a<<3)>>2]|0;f[s>>2]=f[h+(e*1080|0)+28+(a<<3)+4>>2];f[s+4>>2]=x;ki(c,14370,s)|0;a=a+1|0}while((a|0)!=(d|0))}Ri(10,c)|0;f[t>>2]=f[h+(e*1080|0)+808>>2];ki(c,14432,t)|0;Mh(14449,5,1,c)|0;e=e+1|0}while((e|0)!=(b|0))}Mh(14036,4,1,c)|0;u=w;return}function Nd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;k=u;u=u+48|0;j=k+24|0;i=k+16|0;h=k;g=k+32|0;e=(c|0)!=0;if(e){Mh(14581,41,1,f[665]|0)|0;c=0}else{b[g>>0]=9;b[g+1>>0]=9;c=2}b[g+c>>0]=0;l=f[a>>2]|0;c=f[a+4>>2]|0;f[h>>2]=g;f[h+4>>2]=l;f[h+8>>2]=c;ki(d,14623,h)|0;h=f[a+24>>2]|0;f[i>>2]=g;f[i+4>>2]=h;ki(d,14640,i)|0;i=f[a+32>>2]|0;f[j>>2]=g;f[j+4>>2]=i;ki(d,14652,j)|0;if(!e){u=k;return}Mh(13879,2,1,d)|0;u=k;return}function Od(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;d=l;c=a+80|0;j=f[(f[c>>2]|0)+16>>2]|0;b=Ic(1,56)|0;f[d>>2]=b;if(!b){k=0;u=l;return k|0}c=f[(f[c>>2]|0)+16>>2]|0;f[b+24>>2]=c;f[b>>2]=f[a+92>>2];f[b+4>>2]=f[a+96>>2];f[b+8>>2]=f[a+100>>2];f[b+12>>2]=f[a+104>>2];f[b+16>>2]=f[a+112>>2];f[b+20>>2]=f[a+116>>2];f[b+52>>2]=0;a=f[a+12>>2]|0;f[b+32>>2]=f[a>>2];f[b+36>>2]=f[a+4>>2];f[b+40>>2]=f[a+8>>2];f[b+44>>2]=f[a+16>>2];c=Ic(c,1080)|0;i=b+48|0;f[i>>2]=c;if(!c){$b(d);k=0;u=l;return k|0}if(!j){k=b;u=l;return k|0}h=a+5584|0;a=0;while(1){g=f[h>>2]|0;f[c+(a*1080|0)+4>>2]=f[g+(a*1080|0)>>2];d=g+(a*1080|0)+4|0;e=f[d>>2]|0;f[c+(a*1080|0)+8>>2]=e;f[c+(a*1080|0)+12>>2]=f[g+(a*1080|0)+8>>2];f[c+(a*1080|0)+16>>2]=f[g+(a*1080|0)+12>>2];f[c+(a*1080|0)+20>>2]=f[g+(a*1080|0)+16>>2];f[c+(a*1080|0)+24>>2]=f[g+(a*1080|0)+20>>2];if(e>>>0<33){hj(c+(a*1080|0)+948|0,g+(a*1080|0)+944|0,e|0)|0;hj(c+(a*1080|0)+816|0,g+(a*1080|0)+812|0,f[d>>2]|0)|0}e=f[g+(a*1080|0)+24>>2]|0;f[c+(a*1080|0)+28>>2]=e;f[c+(a*1080|0)+808>>2]=f[g+(a*1080|0)+804>>2];if((e|0)!=1){d=(f[d>>2]|0)*3|0;if((d+-3|0)>>>0<96){e=d+-2|0;k=10}}else{e=1;k=10}if((k|0)==10){k=0;d=0;do{f[c+(a*1080|0)+32+(d<<2)>>2]=f[g+(a*1080|0)+28+(d<<3)+4>>2];f[c+(a*1080|0)+420+(d<<2)>>2]=f[g+(a*1080|0)+28+(d<<3)>>2];d=d+1|0}while((d|0)!=(e|0))}f[c+(a*1080|0)+812>>2]=f[g+(a*1080|0)+808>>2];a=a+1|0;if((a|0)==(j|0))break;c=f[i>>2]|0}u=l;return b|0}function Pd(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0;b=Ic(1,48)|0;if(!b){k=0;return k|0}h=a+196|0;c=f[h>>2]|0;j=c;k=f[j+4>>2]|0;a=b;f[a>>2]=f[j>>2];f[a+4>>2]=k;a=c+8|0;k=f[a+4>>2]|0;j=b+8|0;f[j>>2]=f[a>>2];f[j+4>>2]=k;j=c+16|0;k=f[j+4>>2]|0;a=b+16|0;f[a>>2]=f[j>>2];f[a+4>>2]=k;c=f[c+24>>2]|0;a=b+24|0;f[a>>2]=c;c=Hc(c*24|0)|0;k=b+28|0;f[k>>2]=c;if(!c){Mc(b);k=0;return k|0}d=f[(f[h>>2]|0)+28>>2]|0;if(!d){Mc(c);f[k>>2]=0}else hj(c|0,d|0,(f[a>>2]|0)*24|0)|0;a=f[(f[h>>2]|0)+36>>2]|0;g=b+36|0;f[g>>2]=a;a=Ic(a,40)|0;j=b+40|0;f[j>>2]=a;if(!a){Mc(f[k>>2]|0);Mc(b);k=0;return k|0}c=f[(f[h>>2]|0)+40>>2]|0;if(!c){Mc(a);f[j>>2]=0;k=b;return k|0}if(!(f[g>>2]|0)){k=b;return k|0}c=f[c+20>>2]|0;f[a+20>>2]=c;c=Hc(c*24|0)|0;a=f[j>>2]|0;f[a+24>>2]=c;a:do if(!c)d=0;else{d=0;while(1){e=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+24>>2]|0;if(!e){Mc(c);a=f[j>>2]|0;f[a+(d*40|0)+24>>2]=0}else{hj(c|0,e|0,(f[a+(d*40|0)+20>>2]|0)*24|0)|0;a=f[j>>2]|0}c=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+4>>2]|0;f[a+(d*40|0)+4>>2]=c;c=Hc(c*24|0)|0;a=f[j>>2]|0;f[a+(d*40|0)+16>>2]=c;if(!c)break;e=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+16>>2]|0;if(!e){Mc(c);a=f[j>>2]|0;f[a+(d*40|0)+16>>2]=0}else{hj(c|0,e|0,(f[a+(d*40|0)+4>>2]|0)*24|0)|0;a=f[j>>2]|0}f[a+(d*40|0)+32>>2]=0;f[a+(d*40|0)+36>>2]=0;d=d+1|0;if(d>>>0>=(f[g>>2]|0)>>>0){i=28;break}c=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+20>>2]|0;f[a+(d*40|0)+20>>2]=c;c=Hc(c*24|0)|0;a=f[j>>2]|0;f[a+(d*40|0)+24>>2]=c;if(!c)break a}if((i|0)==28)return b|0;if(d){c=0;do{Mc(f[a+(c*40|0)+24>>2]|0);Mc(f[(f[j>>2]|0)+(c*40|0)+16>>2]|0);c=c+1|0;a=f[j>>2]|0}while((c|0)!=(d|0))}Mc(a);Mc(f[k>>2]|0);Mc(b);k=0;return k|0}while(0);if(d){c=0;do{Mc(f[a+(c*40|0)+24>>2]|0);c=c+1|0;a=f[j>>2]|0}while((c|0)!=(d|0))}Mc(a);Mc(f[k>>2]|0);Mc(b);k=0;return k|0}function Qd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;if(!c){c=0;return c|0}e=Sb()|0;k=a+84|0;f[k>>2]=e;if(!e){c=0;return c|0}Ub(c,e);i=a+188|0;kg(f[i>>2]|0,28,d)|0;i=f[i>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](a,b,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){c=a+80|0;Qb(f[c>>2]|0);f[c>>2]=0;c=0;return c|0}}else ng(i);i=f[c+16>>2]|0;if(!i){c=1;return c|0}h=f[(f[k>>2]|0)+24>>2]|0;g=f[c+24>>2]|0;e=0;do{f[g+(e*52|0)+36>>2]=f[h+(e*52|0)+36>>2];c=h+(e*52|0)+44|0;f[g+(e*52|0)+44>>2]=f[c>>2];f[c>>2]=0;e=e+1|0}while(e>>>0>>0);e=1;return e|0}function Rd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=u;u=u+80|0;v=C+32|0;w=C+24|0;B=C+16|0;A=C+8|0;o=C+64|0;z=C+60|0;p=C+56|0;q=C+52|0;r=C+48|0;s=C+44|0;t=C+40|0;k=C+36|0;f[o>>2]=1;d=Hc(1e3)|0;if(!d){Mb(c,1,14664,C)|0;B=0;u=C;return B|0}x=a+116|0;y=a+112|0;l=a+204|0;m=a+84|0;n=a+8|0;j=0;e=1e3;while(1){if(!(Gd(a,z,p,q,r,s,t,k,o,b,c)|0)){e=5;break}if(!(f[o>>2]|0)){e=17;break}i=f[p>>2]|0;if(i>>>0>e>>>0){e=Lc(d,i)|0;if(!e){e=9;break}else{d=e;h=i}}else h=e;g=f[z>>2]|0;if(!(Hd(a,g,d,i,b,c)|0)){e=11;break}e=g+1|0;i=X(f[y>>2]|0,f[x>>2]|0)|0;f[w>>2]=e;f[w+4>>2]=i;Mb(c,4,14768,w)|0;i=f[l>>2]|0;if(!(Sd(f[(f[f[i+20>>2]>>2]|0)+20>>2]|0,f[i+24>>2]|0,d,f[(f[m>>2]|0)+24>>2]|0)|0)){e=13;break}f[v>>2]=e;Mb(c,4,14798,v)|0;i=Ib(b)|0;if((i|0)==0&(I|0)==0?(f[n>>2]|0)==64:0){e=17;break}j=j+1|0;if((j|0)==(X(f[y>>2]|0,f[x>>2]|0)|0)){e=17;break}else e=h}if((e|0)==5){Mc(d);B=0;u=C;return B|0}else if((e|0)==9){Mc(d);B=X(f[y>>2]|0,f[x>>2]|0)|0;f[A>>2]=(f[z>>2]|0)+1;f[A+4>>2]=B;Mb(c,1,14699,A)|0;B=0;u=C;return B|0}else if((e|0)==11){Mc(d);A=X(f[y>>2]|0,f[x>>2]|0)|0;f[B>>2]=g+1;f[B+4>>2]=A;Mb(c,1,14739,B)|0;B=0;u=C;return B|0}else if((e|0)==13){Mc(d);B=0;u=C;return B|0}else if((e|0)==17){Mc(d);B=1;u=C;return B|0}return 0}function Sd(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=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=c+16|0;if(!(f[E>>2]|0)){E=1;return E|0}D=0;C=f[c+24>>2]|0;while(1){l=g+44|0;c=f[l>>2]|0;m=g+8|0;if(!c){c=f[m>>2]|0;k=g+12|0;i=f[k>>2]|0;if(!i){e=0;a=66;break}if(c>>>0>(4294967295/(i>>>0)|0)>>>0){e=0;a=66;break}c=Ic(X(i,c)|0,4)|0;f[l>>2]=c;if(!c){e=0;a=66;break}}else k=g+12|0;o=C+36|0;f[g+36>>2]=f[o>>2];v=f[C+24>>2]|0;t=f[a+24>>2]|0;o=f[o>>2]|0;v=(v>>>3)+((v&7|0)!=0&1)|0;w=(v|0)==3;n=f[t+(o*136|0)+8>>2]|0;i=f[t+(o*136|0)>>2]|0;y=n-i|0;s=f[t+(o*136|0)+12>>2]|0;o=f[t+(o*136|0)+4>>2]|0;t=s-o|0;l=f[g+16>>2]|0;p=f[g+40>>2]|0;q=fj(1,0,p|0)|0;B=I;l=Zi(l|0,0,-1,-1)|0;l=Zi(l|0,I|0,q|0,B|0)|0;l=ej(l|0,I|0,p|0)|0;A=Zi(f[g+20>>2]|0,0,-1,-1)|0;B=Zi(A|0,I|0,q|0,B|0)|0;p=ej(B|0,I|0,p|0)|0;B=f[m>>2]|0;m=B+l|0;k=f[k>>2]|0;q=k+p|0;do if(i>>>0<=l>>>0){i=l-i|0;if(n>>>0>m>>>0){A=B;x=i;r=0;u=n-m|0;break}else{A=y-i|0;x=i;r=0;u=0;break}}else{z=n>>>0>m>>>0;u=m-i|0;A=z?u:y;x=0;r=i-l|0;u=z?y-u|0:0}while(0);do if(o>>>0<=p>>>0){i=p-o|0;if(s>>>0>q>>>0){z=k;n=i;l=0;i=s-q|0;break}else{z=t-i|0;n=i;l=0;i=0;break}}else{s=s>>>0>q>>>0;i=q-o|0;z=s?i:t;n=0;l=o-p|0;i=s?t-i|0:0}while(0);if((x|u|A|i|n|z|0)<0){e=0;a=66;break}m=X(n,y)|0;k=m+x|0;p=x+u|0;q=(X(i,y)|0)-x|0;l=c+((X(B,l)|0)+r<<2)|0;switch((w?4:v)&1073741823|0){case 1:{i=e+k|0;c=(z|0)!=0;do if(!(f[C+32>>2]|0))if(c){if(!A){e=e+(u+m+(X(p,z+-1|0)|0)+(x<<1))|0;break}o=A+u+m+(X(A+x+u|0,z+-1|0)|0)+(x<<1)|0;n=0;c=i;while(1){m=c+A|0;k=0;i=l;while(1){f[i>>2]=h[c>>0];k=k+1|0;if((k|0)==(A|0))break;else{c=c+1|0;i=i+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+p|0;l=l+(B<<2)|0}}e=e+o|0}else e=i;else if(c){if(!A){e=e+(u+m+(X(p,z+-1|0)|0)+(x<<1))|0;break}o=A+u+m+(X(A+x+u|0,z+-1|0)|0)+(x<<1)|0;c=i;k=0;while(1){n=c+A|0;m=0;i=l;while(1){f[i>>2]=b[c>>0];m=m+1|0;if((m|0)==(A|0))break;else{c=c+1|0;i=i+4|0}}k=k+1|0;if((k|0)==(z|0))break;else{c=n+p|0;l=l+(B<<2)|0}}e=e+o|0}else e=i;while(0);e=e+q|0;break}case 2:{c=e+(k<<1)|0;i=(z|0)!=0;do if(!(f[C+32>>2]|0))if(i){if(!A){e=e+((X(n<<1,y)|0)+(X(p<<1,z+-1|0)|0)+(x<<2)+(u<<1))|0;break}e=e+((X(A+p<<1,z+-1|0)|0)+(x<<2)+(A+u+m<<1))|0;n=0;while(1){m=c+(A<<1)|0;k=0;i=l;while(1){f[i>>2]=j[c>>1];k=k+1|0;if((k|0)==(A|0))break;else{c=c+2|0;i=i+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+(p<<1)|0;l=l+(B<<2)|0}}}else e=c;else if(i){if(!A){e=e+((X(n<<1,y)|0)+(X(p<<1,z+-1|0)|0)+(x<<2)+(u<<1))|0;break}e=e+((X(A+p<<1,z+-1|0)|0)+(x<<2)+(A+u+m<<1))|0;n=0;while(1){m=c+(A<<1)|0;i=0;k=l;while(1){f[k>>2]=d[c>>1];i=i+1|0;if((i|0)==(A|0))break;else{c=c+2|0;k=k+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+(p<<1)|0;l=l+(B<<2)|0}}}else e=c;while(0);e=e+(q<<1)|0;break}case 4:{c=e+(k<<2)|0;do if(!z)e=c;else{if(!A){e=e+((X(n<<2,y)|0)+(X(p<<2,z+-1|0)|0)+(x<<3)+(u<<2))|0;break}e=e+((X(A+p<<2,z+-1|0)|0)+(x<<3)+(A+u+m<<2))|0;n=0;while(1){m=c+(A<<2)|0;i=0;k=l;while(1){f[k>>2]=f[c>>2];i=i+1|0;if((i|0)==(A|0))break;else{c=c+4|0;k=k+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+(p<<2)|0;l=l+(B<<2)|0}}}while(0);e=e+(q<<2)|0;break}default:{}}D=D+1|0;if(D>>>0>=(f[E>>2]|0)>>>0){e=1;a=66;break}else{a=a+52|0;g=g+52|0;C=C+52|0}}if((a|0)==66)return e|0;return 0}function Td(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|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,v=0,w=0,x=0,y=0,z=0;s=u;u=u+16|0;i=s+8|0;if(!c){Mb(d,1,14842,s)|0;r=0;u=s;return r|0}h=f[a+112>>2]|0;g=X(f[a+116>>2]|0,h)|0;if(g>>>0<=e>>>0){f[i>>2]=e;f[i+4>>2]=g+-1;Mb(d,1,14880,i)|0;r=0;u=s;return r|0}r=(e>>>0)%(h>>>0)|0;q=(e>>>0)/(h>>>0)|0;h=a+100|0;g=X(f[h>>2]|0,r)|0;i=a+92|0;g=g+(f[i>>2]|0)|0;f[c>>2]=g;p=a+80|0;j=f[f[p>>2]>>2]|0;g=g>>>0 >>0?j:g;f[c>>2]=g;r=X(f[h>>2]|0,r+1|0)|0;i=r+(f[i>>2]|0)|0;r=c+8|0;f[r>>2]=i;h=f[(f[p>>2]|0)+8>>2]|0;i=i>>>0>h>>>0?h:i;f[r>>2]=i;r=a+104|0;h=X(f[r>>2]|0,q)|0;j=a+96|0;h=h+(f[j>>2]|0)|0;n=c+4|0;f[n>>2]=h;o=f[(f[p>>2]|0)+4>>2]|0;h=h>>>0 >>0?o:h;f[n>>2]=h;q=X(f[r>>2]|0,q+1|0)|0;j=q+(f[j>>2]|0)|0;q=c+12|0;f[q>>2]=j;r=f[(f[p>>2]|0)+12>>2]|0;j=j>>>0>r>>>0?r:j;f[q>>2]=j;q=c+24|0;r=c+16|0;n=f[r>>2]|0;if(n|0){o=f[(f[p>>2]|0)+24>>2]|0;m=g+-1|0;l=h+-1|0;k=i+-1|0;i=j+-1|0;g=0;h=f[q>>2]|0;while(1){j=f[o+(g*52|0)+40>>2]|0;f[h+40>>2]=j;z=f[h>>2]|0;y=(m+z|0)/(z|0)|0;f[h+16>>2]=y;t=f[h+4>>2]|0;x=(l+t|0)/(t|0)|0;f[h+20>>2]=x;z=(k+z|0)/(z|0)|0;t=(i+t|0)/(t|0)|0;w=fj(1,0,j|0)|0;v=I;z=Zi(z|0,((z|0)<0)<<31>>31|0,-1,-1)|0;z=Zi(z|0,I|0,w|0,v|0)|0;z=dj(z|0,I|0,j|0)|0;y=Zi(y|0,((y|0)<0)<<31>>31|0,-1,-1)|0;y=Zi(y|0,I|0,w|0,v|0)|0;y=dj(y|0,I|0,j|0)|0;f[h+8>>2]=z-y;t=Zi(t|0,((t|0)<0)<<31>>31|0,-1,-1)|0;t=Zi(t|0,I|0,w|0,v|0)|0;t=dj(t|0,I|0,j|0)|0;x=Zi(x|0,((x|0)<0)<<31>>31|0,-1,-1)|0;v=Zi(x|0,I|0,w|0,v|0)|0;j=dj(v|0,I|0,j|0)|0;f[h+12>>2]=t-j;g=g+1|0;if(g>>>0>=n>>>0)break;else h=h+52|0}}l=a+84|0;g=f[l>>2]|0;if(g|0)Qb(g);g=Sb()|0;f[l>>2]=g;if(!g){z=0;u=s;return z|0}Ub(c,g);f[a+60>>2]=e;j=a+188|0;kg(f[j>>2]|0,29,d)|0;j=f[j>>2]|0;k=lg(j)|0;g=mg(j)|0;if(k){h=1;i=0;while(1){if(!h)h=0;else h=(Ma[f[g>>2]&63](a,b,d)|0)!=0;i=i+1|0;if((i|0)==(k|0))break;else{g=g+4|0;h=h&1}}ng(j);if(!h){Qb(f[p>>2]|0);f[p>>2]=0;z=0;u=s;return z|0}}else ng(j);g=f[r>>2]|0;if(!g){z=1;u=s;return z|0}k=0;j=f[(f[l>>2]|0)+24>>2]|0;i=f[q>>2]|0;while(1){f[i+(k*52|0)+36>>2]=f[j+(k*52|0)+36>>2];h=f[i+(k*52|0)+44>>2]|0;if(!h)h=j;else{Mc(h);h=f[(f[l>>2]|0)+24>>2]|0;i=f[q>>2]|0;g=f[r>>2]|0}z=h+(k*52|0)+44|0;f[i+(k*52|0)+44>>2]=f[z>>2];f[z>>2]=0;k=k+1|0;if(k>>>0>=g>>>0){g=1;break}else j=h}u=s;return g|0}function Ud(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;E=u;u=u+96|0;A=E+56|0;z=E+48|0;y=E+40|0;C=E+32|0;B=E+24|0;j=E+16|0;i=E+8|0;q=E+92|0;r=E+88|0;s=E+84|0;t=E+80|0;v=E+76|0;w=E+72|0;x=E+68|0;o=E+64|0;f[q>>2]=1;d=Hc(1e3)|0;if(!d){Mb(c,1,14941,E)|0;D=0;u=E;return D|0}p=a+196|0;e=f[p>>2]|0;g=f[e+40>>2]|0;a:do if(!g){g=X(f[a+116>>2]|0,f[a+112>>2]|0)|0;f[e+36>>2]=g;g=Ic(g,40)|0;e=f[p>>2]|0;f[e+40>>2]=g;b:do if(g|0){if(f[e+36>>2]|0){h=0;do{f[g+(h*40|0)+28>>2]=100;f[g+(h*40|0)+20>>2]=0;n=Ic(100,24)|0;e=f[p>>2]|0;g=f[e+40>>2]|0;f[g+(h*40|0)+24>>2]=n;h=h+1|0;if(!n)break b}while(h>>>0<(f[e+36>>2]|0)>>>0)}e=f[a+60>>2]|0;if(!g)break a;else{h=e;D=11;break a}}while(0);Mc(d);D=0;u=E;return D|0}else{h=f[a+60>>2]|0;D=11}while(0);if((D|0)==11)if(f[g+16>>2]|0){if(!(f[g+(h*40|0)+4>>2]|0)){n=a+64|0;n=Zi(f[n>>2]|0,f[n+4>>2]|0,2,0)|0;if(!(tb(b,n,I,c)|0)){Mb(c,1,14979,i)|0;Mc(d);D=0;u=E;return D|0}}else{n=f[g+(h*40|0)+16>>2]|0;n=Zi(f[n>>2]|0,f[n+4>>2]|0,2,0)|0;if(!(tb(b,n,I,c)|0)){Mb(c,1,14979,j)|0;Mc(d);D=0;u=E;return D|0}}e=a+8|0;if((f[e>>2]|0)==256){f[e>>2]=8;e=h}else e=h}else e=h;c:do if(Gd(a,r,s,t,v,w,x,o,q,b,c)|0){j=a+116|0;k=a+112|0;l=a+204|0;m=a+84|0;n=e+1|0;g=1e3;while(1){if(!(f[q>>2]|0))break;h=f[s>>2]|0;if(h>>>0>g>>>0){g=Lc(d,h)|0;if(!g){D=25;break}else{d=g;g=h}}i=f[r>>2]|0;if(!(Hd(a,i,d,h,b,c)|0)){D=27;break}h=i+1|0;F=X(f[k>>2]|0,f[j>>2]|0)|0;f[C>>2]=h;f[C+4>>2]=F;Mb(c,4,14768,C)|0;F=f[l>>2]|0;if(!(Sd(f[(f[f[F+20>>2]>>2]|0)+20>>2]|0,f[F+24>>2]|0,d,f[(f[m>>2]|0)+24>>2]|0)|0)){D=29;break}f[y>>2]=h;Mb(c,4,14798,y)|0;if((i|0)==(e|0)){D=31;break}f[A>>2]=h;f[A+4>>2]=n;Mb(c,2,15007,A)|0;if(!(Gd(a,r,s,t,v,w,x,o,q,b,c)|0))break c}if((D|0)==25){Mc(d);F=X(f[k>>2]|0,f[j>>2]|0)|0;f[B>>2]=(f[r>>2]|0)+1;f[B+4>>2]=F;Mb(c,1,14699,B)|0;F=0;u=E;return F|0}else if((D|0)==27){Mc(d);F=0;u=E;return F|0}else if((D|0)==29){Mc(d);F=0;u=E;return F|0}else if((D|0)==31){F=(f[p>>2]|0)+8|0;F=Zi(f[F>>2]|0,f[F+4>>2]|0,2,0)|0;if(!(tb(b,F,I,c)|0)){Mb(c,1,14979,z)|0;Mc(d);F=0;u=E;return F|0}}Mc(d);F=1;u=E;return F|0}while(0);Mc(d);F=0;u=E;return F|0}function Vd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;j=k;f[a+168>>2]=b;e=f[a+80>>2]|0;a:do if((((e|0)!=0?(i=f[e+24>>2]|0,(i|0)!=0):0)?(h=a+12|0,d=f[h>>2]|0,(d|0)!=0):0)?(g=f[d+5584>>2]|0,(g|0)!=0):0){d=f[e+16>>2]|0;if(!d)a=1;else{if((f[g+4>>2]|0)>>>0>b>>>0){a=0;do{f[i+(a*52|0)+40>>2]=b;a=a+1|0;if(a>>>0>=d>>>0){a=1;break a}}while((f[(f[(f[h>>2]|0)+5584>>2]|0)+(a*1080|0)+4>>2]|0)>>>0>b>>>0)}Mb(c,1,15074,j)|0;a=0}}else a=0;while(0);u=k;return a|0}function Wd(a,c,e){a=a|0;c=c|0;e=e|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,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;Q=u;u=u+48|0;O=Q+32|0;N=Q+24|0;M=Q+16|0;L=Q+8|0;K=Q;G=a+204|0;g=f[G>>2]|0;H=a+116|0;I=a+112|0;J=X(f[I>>2]|0,f[H>>2]|0)|0;A=(J|0)==1;if(!J){P=1;u=Q;return P|0}B=a+200|0;C=a+12|0;D=a+164|0;E=a+8|0;F=g+20|0;z=g+24|0;y=0;m=0;g=0;a:while(1){if((f[B>>2]|0)!=(y|0)){P=5;break}w=y;y=y+1|0;x=X(f[H>>2]|0,f[I>>2]|0)|0;f[L>>2]=y;f[L+4>>2]=x;Mb(e,4,15187,L)|0;f[C>>2]=0;x=f[G>>2]|0;f[x+12>>2]=f[(f[D>>2]|0)+(w*5640|0)+5588>>2];f[E>>2]=0;if(!(Uf(x,f[B>>2]|0,e)|0))break;h=f[G>>2]|0;l=f[(f[h+24>>2]|0)+16>>2]|0;if(l)if(A){j=f[(f[f[F>>2]>>2]|0)+20>>2]|0;k=f[(f[z>>2]|0)+24>>2]|0;i=0;do{f[j+(i*52|0)+32>>2]=f[k+(i*52|0)+44>>2];f[j+(i*52|0)+36>>2]=0;i=i+1|0}while(i>>>0 >>0)}else{i=0;do{if(!(Tf((f[(f[f[F>>2]>>2]|0)+20>>2]|0)+(i*52|0)|0)|0)){P=14;break a}i=i+1|0;h=f[G>>2]|0}while(i>>>0<(f[(f[h+24>>2]|0)+16>>2]|0)>>>0)}x=$f(h)|0;if(!A){if(x>>>0>g>>>0){g=Lc(m,x)|0;if(!g){P=20;break}else{h=g;g=x}}else h=m;i=f[G>>2]|0;w=i+24|0;j=f[w>>2]|0;if(f[j+16>>2]|0){v=i+20|0;i=h;t=0;do{p=f[(f[f[v>>2]>>2]|0)+20>>2]|0;n=f[j+24>>2]|0;R=f[n+(t*52|0)+24>>2]|0;R=(R>>>3)+((R&7|0)!=0&1)|0;l=f[p+(t*52|0)+8>>2]|0;m=f[p+(t*52|0)>>2]|0;r=l-m|0;o=f[p+(t*52|0)+12>>2]|0;p=f[p+(t*52|0)+4>>2]|0;s=o-p|0;T=f[j>>2]|0;S=f[n+(t*52|0)>>2]|0;k=f[n+(t*52|0)+4>>2]|0;q=(S+~T+(f[j+8>>2]|0)|0)/(S|0)|0;k=m-((T+-1+S|0)/(S|0)|0)+(X(q,p-(((f[j+4>>2]|0)+-1+k|0)/(k|0)|0)|0)|0)|0;k=(f[n+(t*52|0)+44>>2]|0)+(k<<2)|0;b:do switch(((R|0)==3?4:R)&1073741823|0){case 1:{j=(r|0)==0|(s|0)==0;if(!(f[n+(t*52|0)+32>>2]|0)){if(j)break b;p=o+-1-p|0;n=0;o=i;while(1){j=0;l=o;m=k;while(1){b[l>>0]=f[m>>2];j=j+1|0;if((j|0)==(r|0))break;else{l=l+1|0;m=m+4|0}}n=n+1|0;if((n|0)==(s|0))break;else{o=o+r|0;k=k+(q<<2)|0}}i=i+(r+(X(p,r)|0))|0;break b}else{if(j)break b;p=o+-1-p|0;o=i;j=k;k=0;while(1){l=0;m=o;n=j;while(1){b[m>>0]=f[n>>2];l=l+1|0;if((l|0)==(r|0))break;else{m=m+1|0;n=n+4|0}}k=k+1|0;if((k|0)==(s|0))break;else{o=o+r|0;j=j+(q<<2)|0}}i=i+(r+(X(p,r)|0))|0;break b}}case 2:{j=(r|0)==0|(s|0)==0;if(!(f[n+(t*52|0)+32>>2]|0)){if(j)break b;n=l-m<<1;p=n+(X(o+-1-p|0,n)|0)|0;n=i;o=0;while(1){j=0;l=n;m=k;while(1){d[l>>1]=f[m>>2];j=j+1|0;if((j|0)==(r|0))break;else{l=l+2|0;m=m+4|0}}o=o+1|0;if((o|0)==(s|0))break;else{n=n+(r<<1)|0;k=k+(q<<2)|0}}i=i+p|0;break b}else{if(j)break b;n=l-m<<1;p=n+(X(o+-1-p|0,n)|0)|0;n=i;o=0;while(1){j=n;l=0;m=k;while(1){d[j>>1]=f[m>>2];l=l+1|0;if((l|0)==(r|0))break;else{j=j+2|0;m=m+4|0}}o=o+1|0;if((o|0)==(s|0))break;else{n=n+(r<<1)|0;k=k+(q<<2)|0}}i=i+p|0;break b}}case 4:{if(!((r|0)==0|(s|0)==0)){n=l-m<<2;p=n+(X(o+-1-p|0,n)|0)|0;n=i;o=0;while(1){j=n;l=0;m=k;while(1){f[j>>2]=f[m>>2];l=l+1|0;if((l|0)==(r|0))break;else{j=j+4|0;m=m+4|0}}o=o+1|0;if((o|0)==(s|0))break;else{n=n+(r<<2)|0;k=k+(q<<2)|0}}i=i+p|0}break}default:{}}while(0);t=t+1|0;j=f[w>>2]|0}while(t>>>0<(f[j+16>>2]|0)>>>0);i=f[G>>2]|0}if(!(ag(i,h,x)|0)){P=61;break}}else h=m;if(!(Xd(a,c,e)|0)){P=63;break}if(y>>>0>=J>>>0){P=65;break}else m=h}if((P|0)==5)Mb(e,1,15150,K)|0;else if((P|0)==14){Mb(e,1,15208,M)|0;if(!m){T=0;u=Q;return T|0}Mc(m);T=0;u=Q;return T|0}else if((P|0)==20){if(m|0)Mc(m);Mb(e,1,15246,N)|0;T=0;u=Q;return T|0}else if((P|0)==61){Mb(e,1,15285,O)|0;Mc(h);T=0;u=Q;return T|0}else if((P|0)==63){if(!h){T=0;u=Q;return T|0}Mc(h);T=0;u=Q;return T|0}else if((P|0)==65){if(!h){T=1;u=Q;return T|0}Mc(h);T=1;u=Q;return T|0}if(!m){T=0;u=Q;return T|0}Mc(m);T=0;u=Q;return T|0}function Xd(a,b,c){a=a|0;b=b|0;c=c|0;var e=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,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;H=u;u=u+32|0;D=H+16|0;s=H+8|0;k=H;C=H+20|0;F=f[a+40>>2]|0;G=a+36|0;m=f[G>>2]|0;n=a+204|0;j=f[n>>2]|0;f[j+16>>2]=0;z=a+8|0;f[z>>2]=0;yb(m,65424,2);yb(m+2|0,10,2);E=a+200|0;yb(m+4|0,f[E>>2]|0,2);A=a+12|0;yb(m+10|0,f[A>>2]|0,1);B=a+164|0;yb(m+11|0,f[(f[B>>2]|0)+((f[E>>2]|0)*5640|0)+5588>>2]|0,1);f[C>>2]=12;g=m+12|0;e=F+-12|0;l=a+88|0;if(((d[l>>1]|0)+-3&65535)>=4?(h=f[B>>2]|0,i=f[E>>2]|0,(f[h+(i*5640|0)+420>>2]|0)!=0):0){f[C>>2]=0;Yd(f[(f[a+80>>2]|0)+16>>2]|0,h,i,g,C);y=f[C>>2]|0;h=y+12|0;g=g+y|0;e=e-y|0}else h=12;f[C>>2]=0;yb(g,65427,2);f[j+4>>2]=f[z>>2];f[j+8>>2]=f[A>>2];if(!(f[A>>2]|0))f[(f[f[j+20>>2]>>2]|0)+840>>2]=0;f[C>>2]=0;if(!(Yf(j,f[E>>2]|0,g+2|0,C,e+-4|0,0)|0)){Mb(c,1,15332,k)|0;G=0;u=H;return G|0}e=(f[C>>2]|0)+2|0;f[C>>2]=e;e=e+h|0;yb(m+6|0,e,4);if(((d[l>>1]|0)+-3&65535)<4){y=a+28|0;yb(f[y>>2]|0,f[E>>2]|0,1);x=(f[y>>2]|0)+1|0;f[y>>2]=x;yb(x,e,4);f[y>>2]=(f[y>>2]|0)+4}h=m+e|0;y=F-e|0;v=f[n>>2]|0;w=a+88|0;q=f[B>>2]|0;r=f[E>>2]|0;l=Zd(w,0,r)|0;x=a+8|0;f[A>>2]=(f[A>>2]|0)+1;a:do if(l>>>0>1){m=v+4|0;n=v+8|0;o=v+20|0;p=a+28|0;j=h;g=y;e=0;k=1;while(1){f[x>>2]=k;f[C>>2]=0;yb(j,65424,2);yb(j+2|0,10,2);yb(j+4|0,f[E>>2]|0,2);yb(j+10|0,f[A>>2]|0,1);yb(j+11|0,f[(f[B>>2]|0)+((f[E>>2]|0)*5640|0)+5588>>2]|0,1);h=j+12|0;f[C>>2]=0;yb(h,65427,2);f[m>>2]=f[z>>2];f[n>>2]=f[A>>2];if(!(f[A>>2]|0))f[(f[f[o>>2]>>2]|0)+840>>2]=0;f[C>>2]=0;if(!(Yf(v,f[E>>2]|0,j+14|0,C,g+-16|0,0)|0))break;i=f[C>>2]|0;I=i+2|0;f[C>>2]=I;h=h+I|0;e=e+12+I|0;g=g+-12+(-2-i)|0;i=i+14|0;yb(j+6|0,i,4);if(((d[w>>1]|0)+-3&65535)<4){yb(f[p>>2]|0,f[E>>2]|0,1);I=(f[p>>2]|0)+1|0;f[p>>2]=I;yb(I,i,4);f[p>>2]=(f[p>>2]|0)+4}f[A>>2]=(f[A>>2]|0)+1;k=k+1|0;if(k>>>0>=l>>>0){t=12;break a}else j=h}Mb(c,1,15332,s)|0}else{g=y;e=0;t=12}while(0);b:do if((t|0)==12){o=q+(r*5640|0)+420|0;c:do if(f[o>>2]|0){p=v+16|0;q=v+4|0;r=v+8|0;s=v+20|0;n=a+28|0;m=1;d:while(1){f[p>>2]=m;l=Zd(w,m,f[E>>2]|0)|0;if(l){k=0;while(1){f[x>>2]=k;f[C>>2]=0;yb(h,65424,2);yb(h+2|0,10,2);yb(h+4|0,f[E>>2]|0,2);yb(h+10|0,f[A>>2]|0,1);yb(h+11|0,f[(f[B>>2]|0)+((f[E>>2]|0)*5640|0)+5588>>2]|0,1);i=h+12|0;f[C>>2]=0;yb(i,65427,2);f[q>>2]=f[z>>2];f[r>>2]=f[A>>2];if(!(f[A>>2]|0))f[(f[f[s>>2]>>2]|0)+840>>2]=0;f[C>>2]=0;if(!(Yf(v,f[E>>2]|0,h+14|0,C,g+-16|0,0)|0))break d;I=f[C>>2]|0;j=I+2|0;f[C>>2]=j;e=e+12+j|0;j=i+j|0;g=g+-12+(-2-I)|0;i=I+14|0;yb(h+6|0,i,4);if(((d[w>>1]|0)+-3&65535)<4){yb(f[n>>2]|0,f[E>>2]|0,1);I=(f[n>>2]|0)+1|0;f[n>>2]=I;yb(I,i,4);f[n>>2]=(f[n>>2]|0)+4}f[A>>2]=(f[A>>2]|0)+1;k=k+1|0;if(k>>>0>=l>>>0){h=j;break}else h=j}}m=m+1|0;if(m>>>0>(f[o>>2]|0)>>>0)break c}Mb(c,1,15332,D)|0;break b}while(0);I=e-y+F|0;if((Fb(b,f[G>>2]|0,I,c)|0)!=(I|0)){I=0;u=H;return I|0}f[E>>2]=(f[E>>2]|0)+1;I=1;u=H;return I|0}while(0);I=0;u=H;return I|0}function Yd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=f[b+(c*5640|0)+5584>>2]|0;l=(f[b+(c*5640|0)+420>>2]|0)+1|0;i=a>>>0<257?1:2;k=X(l,(i<<1)+5|0)|0;j=k+4|0;yb(d,65375,2);yb(d+2|0,k+2|0,2);if(!l){f[e>>2]=j;return}k=b+(c*5640|0)+8|0;h=g+4|0;b=b+(c*5640|0)+424|0;c=0;g=d+4|0;while(1){yb(g,f[b>>2]|0,1);g=g+1|0;yb(g,f[b+4>>2]|0,i);g=g+i|0;o=b+8|0;yb(g,f[o>>2]|0,2);g=g+2|0;m=b+12|0;yb(g,f[m>>2]|0,1);g=g+1|0;d=b+16|0;yb(g,f[d>>2]|0,i);g=g+i|0;yb(g,f[b+36>>2]|0,1);p=f[o>>2]|0;n=f[k>>2]|0;f[o>>2]=(p|0)<(n|0)?p:n;o=f[m>>2]|0;n=f[h>>2]|0;f[m>>2]=(o|0)<(n|0)?o:n;m=f[d>>2]|0;f[d>>2]=(m|0)<(a|0)?m:a;c=c+1|0;if((c|0)==(l|0))break;else{b=b+148|0;g=g+1|0}}f[e>>2]=j;return}function Zd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;i=f[a+76>>2]|0;e=f[i+(d*5640|0)+4>>2]|0;j=696;while(1){m=f[j>>2]|0;if((m|0)==-1|(m|0)==(e|0))break;else j=j+12|0}if(!(b[a+93>>0]&8)){a=1;return a|0}m=h[a+92>>0]|0;g=i+(d*5640|0)+424+(c*148|0)+92|0;k=i+(d*5640|0)+424+(c*148|0)+88|0;l=i+(d*5640|0)+424+(c*148|0)+96|0;i=i+(d*5640|0)+424+(c*148|0)+84|0;c=b[j+4>>0]|0;switch(c|0){case 67:{e=g;n=8;break}case 82:{e=k;n=8;break}case 80:{e=l;n=8;break}case 76:{e=i;n=8;break}default:e=1}if((n|0)==8)e=f[e>>2]|0;if((m|0)!=(c|0)){d=b[j+5>>0]|0;switch(d|0){case 67:{c=g;n=16;break}case 82:{c=k;n=16;break}case 80:{c=l;n=16;break}case 76:{c=i;n=16;break}default:{}}if((n|0)==16)e=X(f[c>>2]|0,e)|0;if((m|0)!=(d|0)){d=b[j+6>>0]|0;switch(d|0){case 67:{c=g;n=22;break}case 82:{c=k;n=22;break}case 80:{c=l;n=22;break}case 76:{c=i;n=22;break}default:{}}if((n|0)==22)e=X(f[c>>2]|0,e)|0;if((m|0)!=(d|0)){c=b[j+7>>0]|0;switch(c|0){case 67:{n=28;break}case 82:{g=k;n=28;break}case 80:{g=l;n=28;break}case 76:{g=i;n=28;break}default:{}}if((n|0)==28)e=X(f[g>>2]|0,e)|0;if((m|0)==(c|0))g=3;else{a=e;return a|0}}else g=2}else g=1}else g=0;f[a+84>>2]=g;a=e;return a|0}function _d(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0;e=a+188|0;if(!(kg(f[e>>2]|0,30,c)|0)){j=0;return j|0}if(((d[a+88>>1]|0)+-3&65535)<4?(kg(f[e>>2]|0,31,c)|0)==0:0){j=0;return j|0}if(!(kg(f[e>>2]|0,32,c)|0)){j=0;return j|0}if(!(kg(f[e>>2]|0,33,c)|0)){j=0;return j|0}if(!(kg(f[e>>2]|0,34,c)|0)){j=0;return j|0}j=f[e>>2]|0;i=lg(j)|0;e=mg(j)|0;if(!i)e=1;else{g=e;e=1;h=0;while(1){if(!e)e=0;else e=(Ma[f[g>>2]&63](a,b,c)|0)!=0;e=e&1;h=h+1|0;if((h|0)==(i|0))break;else g=g+4|0}}ng(j);j=e;return j|0}function $d(a,b,c){a=a|0;b=b|0;c=c|0;a=a+44|0;yb(f[a>>2]|0,65497,2);if((Fb(b,f[a>>2]|0,2,c)|0)!=2){c=0;return c|0}c=(Gb(b,c)|0)!=0&1;return c|0}function ae(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;g=(f[a+32>>2]|0)*5|0;i=a+16|0;i=Zi(f[i>>2]|0,f[i+4>>2]|0,6,0)|0;h=I;d=Hb(b)|0;e=I;if(!(Kb(b,i,h,c)|0)){i=0;return i|0}if((Fb(b,f[a+24>>2]|0,g,c)|0)!=(g|0)){i=0;return i|0}i=(Kb(b,d,e,c)|0)!=0&1;return i|0}function be(a,b,c){a=a|0;b=b|0;c=c|0;a=f[a+196>>2]|0;if(!a)return 1;b=Hb(b)|0;c=a;c=_i(b|0,I|0,f[c>>2]|0,f[c+4>>2]|0)|0;b=a+16|0;f[b>>2]=c;f[b+4>>2]=I;return 1}function ce(a,b,c){a=a|0;b=b|0;c=c|0;b=a+204|0;Qf(f[b>>2]|0);f[b>>2]=0;b=a+24|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0;f[a+28>>2]=0}c=a+36|0;b=f[c>>2]|0;if(!b){a=a+40|0;f[a>>2]=0;return 1}Mc(b);f[c>>2]=0;a=a+40|0;f[a>>2]=0;return 1}function de(a,b,c){a=a|0;b=b|0;c=c|0;b=a+44|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}f[a+48>>2]=0;return 1}function ee(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;g=Sb()|0;k=a+80|0;f[k>>2]=g;if(!g){Mb(e,1,15352,l)|0;e=0;u=l;return e|0}Ub(c,g);i=f[c+24>>2]|0;if(i|0?(j=f[c+16>>2]|0,j|0):0){g=0;do{c=i+(g*52|0)+44|0;h=f[c>>2]|0;if(h|0){f[(f[(f[k>>2]|0)+24>>2]|0)+(g*52|0)+44>>2]=h;f[c>>2]=0}g=g+1|0}while(g>>>0 >>0)}g=a+192|0;if(!(kg(f[g>>2]|0,35,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,36,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,37,e)|0)){e=0;u=l;return e|0}i=f[g>>2]|0;j=lg(i)|0;g=mg(i)|0;if(j){c=1;h=0;while(1){if(!c)c=0;else c=(Ma[f[g>>2]&63](a,b,e)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{g=g+4|0;c=c&1}}ng(i);if(!c){e=0;u=l;return e|0}}else ng(i);g=a+188|0;if(!(kg(f[g>>2]|0,38,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,39,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,40,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,41,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,42,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,43,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,44,e)|0)){e=0;u=l;return e|0}c=a+88|0;if(((d[c>>1]|0)+-3&65535)<4){if(!(kg(f[g>>2]|0,45,e)|0)){e=0;u=l;return e|0}if((d[c>>1]|0)==4?(kg(f[g>>2]|0,46,e)|0)==0:0){e=0;u=l;return e|0}}if(!(kg(f[g>>2]|0,47,e)|0)){e=0;u=l;return e|0}if(f[a+108>>2]|0?(kg(f[g>>2]|0,48,e)|0)==0:0){e=0;u=l;return e|0}if(d[c>>1]&256?(kg(f[g>>2]|0,49,e)|0)==0:0){e=0;u=l;return e|0}if(f[a+196>>2]|0?(kg(f[g>>2]|0,50,e)|0)==0:0){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,51,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,52,e)|0)){e=0;u=l;return e|0}j=f[g>>2]|0;i=lg(j)|0;g=mg(j)|0;if(!i)g=1;else{c=g;g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[c>>2]&63](a,b,e)|0)!=0;g=g&1;h=h+1|0;if((h|0)==(i|0))break;else c=c+4|0}}ng(j);e=g;u=l;return e|0}function fe(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ge(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=u;u=u+32|0;d=(f[a+8>>2]|0)==0&(f[a+188>>2]|0)!=0&(f[a+192>>2]|0)!=0&1;b=(f[(f[(f[a+164>>2]|0)+5584>>2]|0)+4>>2]|0)+-1|0;if(b>>>0>31){Mb(c,1,16016,e)|0;c=0;u=e;return c|0}b=1<>2]|0)>>>0>>0){Mb(c,1,16016,e+8|0)|0;c=0;u=e;return c|0}if((f[a+104>>2]|0)>>>0>=b>>>0){c=d;u=e;return c|0}Mb(c,1,16016,e+16|0)|0;c=0;u=e;return c|0}function he(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0;if((d[a+88>>1]&-32256)<<16>>16!=-32256){j=1;return j|0}i=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;if(!i){j=1;return j|0}j=a+80|0;g=f[a+164>>2]|0;b=1;h=0;while(1){if((f[g+16>>2]|0)==2){b=b&(f[g+5608>>2]|0)!=0;e=f[(f[j>>2]|0)+16>>2]|0;if(e){c=0;a=f[g+5584>>2]|0;while(1){b=(f[a+20>>2]&1^1)&b;c=c+1|0;if(c>>>0>=e>>>0)break;else a=a+1080|0}}}h=h+1|0;if((h|0)==(i|0))break;else g=g+5640|0}return b|0}function ie(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;h=a+88|0;i=a+32|0;j=f[a+80>>2]|0;g=X(f[a+116>>2]|0,f[a+112>>2]|0)|0;f[i>>2]=0;if(!g)return 1;a=f[a+164>>2]|0;d=0;while(1){Jf(j,h,d);e=a+420|0;b=0;c=0;do{k=Zd(h,b,d)|0;f[i>>2]=(f[i>>2]|0)+k;c=k+c|0;b=b+1|0}while(b>>>0<=(f[e>>2]|0)>>>0);f[a+5588>>2]=c;d=d+1|0;if((d|0)==(g|0))break;else a=a+5640|0}return 1}function je(a,b,c){a=a|0;b=b|0;c=c|0;a=f[a+44>>2]|0;yb(a,65359,2);return (Fb(b,a,2,c)|0)==2|0}function ke(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+16|0;h=o;i=f[a+80>>2]|0;m=i+16|0;k=(f[m>>2]|0)*3|0;n=k+40|0;g=f[i+24>>2]|0;e=a+48|0;l=a+44|0;d=f[l>>2]|0;do if(n>>>0>(f[e>>2]|0)>>>0){d=Lc(d,n)|0;if(d|0){f[l>>2]=d;f[e>>2]=n;break}Mc(f[l>>2]|0);f[l>>2]=0;f[e>>2]=0;Mb(c,1,15978,h)|0;n=0;u=o;return n|0}while(0);yb(d,65361,2);yb(d+2|0,k+38|0,2);yb(d+4|0,j[a+88>>1]|0,2);yb(d+6|0,f[i+8>>2]|0,4);yb(d+10|0,f[i+12>>2]|0,4);yb(d+14|0,f[i>>2]|0,4);yb(d+18|0,f[i+4>>2]|0,4);yb(d+22|0,f[a+100>>2]|0,4);yb(d+26|0,f[a+104>>2]|0,4);yb(d+30|0,f[a+92>>2]|0,4);yb(d+34|0,f[a+96>>2]|0,4);yb(d+38|0,f[m>>2]|0,2);if(f[m>>2]|0){d=d+40|0;e=0;while(1){yb(d,(f[g+24>>2]|0)+-1+(f[g+32>>2]<<7)|0,1);yb(d+1|0,f[g>>2]|0,1);yb(d+2|0,f[g+4>>2]|0,1);e=e+1|0;if(e>>>0>=(f[m>>2]|0)>>>0)break;else{g=g+52|0;d=d+3|0}}}n=(Fb(b,f[l>>2]|0,n,c)|0)==(n|0)&1;u=o;return n|0}function le(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+32|0;p=q+16|0;o=q+8|0;i=q;j=q+20|0;k=a+164|0;l=f[k>>2]|0;m=a+200|0;n=f[m>>2]|0;d=f[l+(n*5640|0)+5584>>2]|0;if(!(f[d>>2]&1))g=5;else g=(f[d+4>>2]|0)+5|0;h=g+9|0;f[j>>2]=h;e=a+48|0;a=a+44|0;d=f[a>>2]|0;do if(h>>>0>(f[e>>2]|0)>>>0){d=Lc(d,h)|0;if(d|0){f[a>>2]=d;f[e>>2]=h;break}Mc(f[a>>2]|0);f[a>>2]=0;f[e>>2]=0;Mb(c,1,15913,i)|0;p=0;u=q;return p|0}while(0);yb(d,65362,2);yb(d+2|0,g+7|0,2);yb(d+4|0,f[l+(n*5640|0)>>2]|0,1);yb(d+5|0,f[l+(n*5640|0)+4>>2]|0,1);yb(d+6|0,f[l+(n*5640|0)+8>>2]|0,2);yb(d+8|0,f[l+(n*5640|0)+16>>2]|0,1);f[j>>2]=g;if(!(Ae(f[k>>2]|0,f[m>>2]|0,d+9|0,j,c)|0)){Mb(c,1,15952,o)|0;p=0;u=q;return p|0}if(!(f[j>>2]|0)){p=(Fb(b,f[a>>2]|0,h,c)|0)==(h|0)&1;u=q;return p|0}else{Mb(c,1,15952,p)|0;p=0;u=q;return p|0}return 0}function me(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+32|0;n=o+16|0;m=o+8|0;i=o;k=o+20|0;l=a+200|0;j=a+164|0;d=f[(f[j>>2]|0)+((f[l>>2]|0)*5640|0)+5584>>2]|0;e=f[d+24>>2]|0;if((e|0)==1)d=1;else d=((f[d+4>>2]|0)*3|0)+-2|0;g=(e|0)==0?d+1|0:d<<1|1;h=g+4|0;f[k>>2]=h;e=a+48|0;a=a+44|0;d=f[a>>2]|0;do if(h>>>0>(f[e>>2]|0)>>>0){d=Lc(d,h)|0;if(d|0){f[a>>2]=d;f[e>>2]=h;break}Mc(f[a>>2]|0);f[a>>2]=0;f[e>>2]=0;Mb(c,1,15848,i)|0;n=0;u=o;return n|0}while(0);yb(d,65372,2);yb(d+2|0,g+2|0,2);f[k>>2]=g;if(!(ze(f[j>>2]|0,f[l>>2]|0,0,d+4|0,k,c)|0)){Mb(c,1,15887,m)|0;n=0;u=o;return n|0}if(!(f[k>>2]|0)){n=(Fb(b,f[a>>2]|0,h,c)|0)==(h|0)&1;u=o;return n|0}else{Mb(c,1,15887,n)|0;n=0;u=o;return n|0}return 0}function ne(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=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,v=0,w=0;w=u;u=u+16|0;t=w;q=w+4|0;r=a+80|0;d=f[(f[r>>2]|0)+16>>2]|0;if(d>>>0<=1){v=1;u=w;return v|0}n=a+164|0;o=a+200|0;s=a+48|0;m=a+44|0;l=1;a=d;while(1){e=f[n>>2]|0;h=f[o>>2]|0;g=f[e+(h*5640|0)+5584>>2]|0;i=f[g+(l*1080|0)>>2]|0;a:do if((((((f[g>>2]|0)==(i|0)?(p=f[g+4>>2]|0,(p|0)==(f[g+(l*1080|0)+4>>2]|0)):0)?(f[g+8>>2]|0)==(f[g+(l*1080|0)+8>>2]|0):0)?(f[g+12>>2]|0)==(f[g+(l*1080|0)+12>>2]|0):0)?(f[g+16>>2]|0)==(f[g+(l*1080|0)+16>>2]|0):0)?(f[g+20>>2]|0)==(f[g+(l*1080|0)+20>>2]|0):0){if(p){d=0;do{if((f[g+812+(d<<2)>>2]|0)!=(f[g+(l*1080|0)+812+(d<<2)>>2]|0)){v=13;break a}if((f[g+944+(d<<2)>>2]|0)!=(f[g+(l*1080|0)+944+(d<<2)>>2]|0)){v=13;break a}d=d+1|0}while(d>>>0 >>0)}}else v=13;while(0);if((v|0)==13){v=0;if(!(i&1))d=5;else d=(f[g+(l*1080|0)+4>>2]|0)+5|0;k=d+(a>>>0<257?6:7)|0;d=f[m>>2]|0;if(k>>>0>(f[s>>2]|0)>>>0){d=Lc(d,k)|0;if(!d){v=17;break}f[m>>2]=d;f[s>>2]=k;j=f[n>>2]|0;h=f[o>>2]|0;g=f[j+(h*5640|0)+5584>>2]|0;a=f[(f[r>>2]|0)+16>>2]|0;i=f[g+(l*1080|0)>>2]|0}else j=e;e=a>>>0<257?1:2;if(!(i&1))a=5;else a=(f[g+(l*1080|0)+4>>2]|0)+5|0;yb(d,65363,2);yb(d+2|0,e+3+a|0,2);i=d+4|0;yb(i,l,e);i=i+e|0;yb(i,f[(f[j+(h*5640|0)+5584>>2]|0)+(l*1080|0)>>2]|0,1);f[q>>2]=a;Ae(f[n>>2]|0,f[o>>2]|0,i+1|0,q,c)|0;if((Fb(b,f[m>>2]|0,k,c)|0)!=(k|0)){a=0;v=24;break}a=f[(f[r>>2]|0)+16>>2]|0}l=l+1|0;if(l>>>0>=a>>>0){a=1;v=24;break}}if((v|0)==17){Mc(f[m>>2]|0);f[m>>2]=0;f[s>>2]=0;Mb(c,1,15774,t)|0;v=0;u=w;return v|0}else if((v|0)==24){u=w;return a|0}return 0} +function oe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=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;t=u;u=u+16|0;r=t;o=t+4|0;p=a+80|0;d=f[(f[p>>2]|0)+16>>2]|0;if(d>>>0<=1){s=1;u=t;return s|0}m=a+164|0;n=a+200|0;q=a+48|0;l=a+44|0;k=1;a=d;while(1){i=f[(f[m>>2]|0)+((f[n>>2]|0)*5640|0)+5584>>2]|0;g=f[i+24>>2]|0;h=f[i+(k*1080|0)+24>>2]|0;a:do if((g|0)==(h|0)?(f[i+804>>2]|0)==(f[i+(k*1080|0)+804>>2]|0):0){if((g|0)!=1){j=(f[i+4>>2]|0)*3|0;d=j+-2|0;if((j|0)!=((f[i+(k*1080|0)+4>>2]|0)*3|0)){s=14;break}if(!d)break;else e=d}else e=1;d=0;do{if((f[i+28+(d<<3)>>2]|0)!=(f[i+(k*1080|0)+28+(d<<3)>>2]|0)){s=14;break a}d=d+1|0}while(d>>>0
>>0);if(g){d=0;do{if((f[i+28+(d<<3)+4>>2]|0)!=(f[i+(k*1080|0)+28+(d<<3)+4>>2]|0)){s=14;break a}d=d+1|0}while(d>>>0 >>0)}}else s=14;while(0);if((s|0)==14){s=0;if((h|0)==1)d=1;else d=((f[i+(k*1080|0)+4>>2]|0)*3|0)+-2|0;j=((h|0)==0?d+1|0:d<<1|1)+5+(a>>>0>256&1)|0;a=f[l>>2]|0;if(j>>>0>(f[q>>2]|0)>>>0){a=Lc(a,j)|0;if(!a){s=18;break}f[l>>2]=a;f[q>>2]=j;d=f[(f[m>>2]|0)+((f[n>>2]|0)*5640|0)+5584>>2]|0;e=f[d+(k*1080|0)+24>>2]|0;g=a}else{e=h;d=i;g=a}if((e|0)==1)a=1;else a=((f[d+(k*1080|0)+4>>2]|0)*3|0)+-2|0;d=(e|0)==0?a+1|0:a<<1|1;f[o>>2]=d+6;yb(g,65373,2);a=g+2|0;if((f[(f[p>>2]|0)+16>>2]|0)>>>0<257){yb(a,d+3|0,2);yb(g+4|0,k,1);a=5}else{yb(a,d+4|0,2);yb(g+4|0,k,2);a=6}f[o>>2]=d;ze(f[m>>2]|0,f[n>>2]|0,k,g+a|0,o,c)|0;if((Fb(b,f[l>>2]|0,j,c)|0)!=(j|0)){a=0;s=28;break}a=f[(f[p>>2]|0)+16>>2]|0}k=k+1|0;if(k>>>0>=a>>>0){a=1;s=28;break}}if((s|0)==18){Mc(f[l>>2]|0);f[l>>2]=0;f[q>>2]=0;Mb(c,1,15702,r)|0;s=0;u=t;return s|0}else if((s|0)==28){u=t;return a|0}return 0}function pe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;g=k;i=(f[a+32>>2]|0)*5|0;j=i+6|0;e=a+48|0;h=a+44|0;d=f[h>>2]|0;do if(j>>>0>(f[e>>2]|0)>>>0){d=Lc(d,j)|0;if(d|0){f[h>>2]=d;f[e>>2]=j;break}Mc(f[h>>2]|0);f[h>>2]=0;f[e>>2]=0;Mb(c,1,15663,g)|0;j=0;u=k;return j|0}while(0);g=Hb(b)|0;a=a+16|0;f[a>>2]=g;f[a+4>>2]=I;yb(d,65365,2);yb(d+2|0,i+4|0,2);yb(d+4|0,0,1);yb(d+5|0,80,1);j=(Fb(b,f[h>>2]|0,j,c)|0)==(j|0)&1;u=k;return j|0}function qe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+16|0;j=p;o=p+4|0;f[o>>2]=0;k=a+164|0;e=f[k>>2]|0;l=a+200|0;d=f[l>>2]|0;i=a+80|0;g=f[(f[i>>2]|0)+16>>2]|0;n=(X(g>>>0<257?7:9,(f[e+(d*5640|0)+420>>2]|0)+1|0)|0)+4|0;h=a+48|0;m=a+44|0;a=f[m>>2]|0;do if(n>>>0>(f[h>>2]|0)>>>0){a=Lc(a,n)|0;if(a|0){f[m>>2]=a;f[h>>2]=n;g=f[(f[i>>2]|0)+16>>2]|0;e=f[k>>2]|0;d=f[l>>2]|0;break}Mc(f[m>>2]|0);f[m>>2]=0;f[h>>2]=0;Mb(c,1,15624,j)|0;o=0;u=p;return o|0}while(0);Yd(g,e,d,a,o);o=(Fb(b,f[m>>2]|0,n,c)|0)==(n|0)&1;u=p;return o|0}function re(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+164|0;k=a+80|0;e=f[k>>2]|0;d=f[e+16>>2]|0;if(!d){k=1;return k|0}i=a+44|0;g=0;h=f[(f[j>>2]|0)+5584>>2]|0;a=e;while(1){if(f[h+808>>2]|0){a=f[(f[j>>2]|0)+5584>>2]|0;d=d>>>0<257?1:2;e=d+6|0;l=f[i>>2]|0;yb(l,65374,2);yb(l+2|0,d|4,2);l=l+4|0;yb(l,g,d);d=l+d|0;yb(d,0,1);yb(d+1|0,f[a+(g*1080|0)+808>>2]|0,1);if((Fb(b,f[i>>2]|0,e,c)|0)!=(e|0)){a=0;d=7;break}a=f[k>>2]|0}g=g+1|0;d=f[a+16>>2]|0;if(g>>>0>=d>>>0){a=1;d=7;break}else h=h+1080|0}if((d|0)==7)return a|0;return 0}function se(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;g=k;h=f[a+108>>2]|0;i=Kh(h)|0;j=i+6|0;e=a+48|0;d=a+44|0;a=f[d>>2]|0;do if(j>>>0>(f[e>>2]|0)>>>0){a=Lc(a,j)|0;if(a|0){f[d>>2]=a;f[e>>2]=j;break}Mc(f[d>>2]|0);f[d>>2]=0;f[e>>2]=0;Mb(c,1,15581,g)|0;j=0;u=k;return j|0}while(0);yb(a,65380,2);yb(a+2|0,i+4|0,2);yb(a+4|0,1,2);hj(a+6|0,h|0,i|0)|0;j=(Fb(b,f[d>>2]|0,j,c)|0)==(j|0)&1;u=k;return j|0}function te(a,c,d){a=a|0;c=c|0;d=d|0;var e=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,v=0,w=0,x=0;x=u;u=u+32|0;v=x+24|0;r=x+16|0;n=x+8|0;g=x;h=f[a+80>>2]|0;j=h+16|0;i=f[j>>2]|0;k=i+6|0;t=a+48|0;w=a+44|0;e=f[w>>2]|0;do if(k>>>0>(f[t>>2]|0)>>>0){e=Lc(e,k)|0;if(e|0){f[w>>2]=e;f[t>>2]=k;break}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15425,g)|0;d=0;u=x;return d|0}while(0);yb(e,65400,2);yb(e+2|0,i+4|0,2);yb(e+4|0,f[j>>2]|0,2);if(f[j>>2]|0){h=f[h+24>>2]|0;e=e+6|0;g=0;while(1){yb(e,(f[h+24>>2]|0)+-1|f[h+32>>2]<<7,1);g=g+1|0;if(g>>>0>=(f[j>>2]|0)>>>0)break;else{h=h+52|0;e=e+1|0}}}if((Fb(c,f[w>>2]|0,k,d)|0)!=(k|0)){d=0;u=x;return d|0}o=a+164|0;m=f[o>>2]|0;p=a+200|0;l=f[p>>2]|0;i=m+(l*5640|0)+5616|0;a:do if(f[i>>2]|0){g=f[m+(l*5640|0)+5612>>2]|0;h=0;while(1){j=g+16|0;k=f[j>>2]|0;a=k+10|0;e=f[w>>2]|0;if(a>>>0>(f[t>>2]|0)>>>0){e=Lc(e,a)|0;if(!e)break;f[w>>2]=e;f[t>>2]=a}yb(e,65396,2);yb(e+2|0,k+8|0,2);yb(e+4|0,0,2);yb(e+6|0,f[g+4>>2]<<8|f[g+8>>2]&255|f[g>>2]<<10,2);yb(e+8|0,0,2);hj(e+10|0,f[g+12>>2]|0,f[j>>2]|0)|0;if((Fb(c,f[w>>2]|0,a,d)|0)!=(a|0)){q=0;s=41;break}h=h+1|0;if(h>>>0>=(f[i>>2]|0)>>>0)break a;else g=g+20|0}if((s|0)==41){u=x;return q|0}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15464,n)|0;d=0;u=x;return d|0}while(0);n=m+(l*5640|0)+5628|0;b:do if(f[n>>2]|0){a=f[m+(l*5640|0)+5624>>2]|0;l=0;while(1){k=a+4|0;g=f[k>>2]|0;i=g>>>0>255;j=i?2:1;i=i?32768:0;g=X(j,g<<1)|0;m=g+19|0;e=f[w>>2]|0;if(m>>>0>(f[t>>2]|0)>>>0){e=Lc(e,m)|0;if(!e)break;f[w>>2]=e;f[t>>2]=m}yb(e,65397,2);yb(e+2|0,g+17|0,2);yb(e+4|0,0,2);yb(e+6|0,f[a>>2]|0,1);yb(e+7|0,0,2);yb(e+9|0,1,2);yb(e+11|0,1,1);yb(e+12|0,f[k>>2]|i,2);e=e+14|0;if(!(f[k>>2]|0))g=0;else{h=0;do{yb(e,h,j);e=e+j|0;h=h+1|0;g=f[k>>2]|0}while(h>>>0 >>0)}yb(e,g|i,2);e=e+2|0;if(!(f[k>>2]|0))h=e;else{g=0;do{yb(e,g,j);e=e+j|0;g=g+1|0}while(g>>>0<(f[k>>2]|0)>>>0);h=e}e=((b[a+16>>0]&1^1)&255)<<16;g=f[a+8>>2]|0;if(g)e=f[g+8>>2]|e;g=f[a+12>>2]|0;if(g)e=f[g+8>>2]<<8|e;yb(h,e,3);if((Fb(c,f[w>>2]|0,m,d)|0)!=(m|0)){q=0;s=41;break}l=l+1|0;if(l>>>0>=(f[n>>2]|0)>>>0)break b;else a=a+20|0}if((s|0)==41){u=x;return q|0}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15503,r)|0;d=0;u=x;return d|0}while(0);j=f[o>>2]|0;i=f[p>>2]|0;k=j+(i*5640|0)+5628|0;g=f[k>>2]|0;a=g+5|0;e=f[w>>2]|0;do if(a>>>0>(f[t>>2]|0)>>>0){e=Lc(e,a)|0;if(e|0){f[w>>2]=e;f[t>>2]=a;break}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15542,v)|0;d=0;u=x;return d|0}while(0);yb(e,65399,2);yb(e+2|0,g+3|0,2);yb(e+4|0,f[k>>2]|0,1);if(f[k>>2]|0){h=0;g=f[j+(i*5640|0)+5624>>2]|0;e=e+5|0;while(1){yb(e,f[g>>2]|0,1);h=h+1|0;if(h>>>0>=(f[k>>2]|0)>>>0)break;else{g=g+20|0;e=e+1|0}}}d=(Fb(c,f[w>>2]|0,a,d)|0)==(a|0)&1;u=x;return d|0}function ue(a,b,c){a=a|0;b=b|0;c=c|0;b=Hb(b)|0;c=(f[a+196>>2]|0)+8|0;f[c>>2]=b;f[c+4>>2]=I;return 1}function ve(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=u;u=u+16|0;b=Lf(0)|0;d=a+204|0;f[d>>2]=b;if(!b){Mb(c,1,15385,e)|0;c=0;u=e;return c|0}if(Pf(b,f[a+80>>2]|0,a+88|0)|0){c=1;u=e;return c|0}Qf(f[d>>2]|0);f[d>>2]=0;c=0;u=e;return c|0}function we(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0,Q=0,R=0,S=0;P=a+80|0;E=f[P>>2]|0;S=a+164|0;h=f[S>>2]|0;O=E+24|0;D=f[O>>2]|0;g=f[D>>2]|0;e=f[D+4>>2]|0;G=E+16|0;D=X(f[D+24>>2]|0,f[G>>2]|0)|0;C=Hb(c)|0;Q=a+116|0;c=f[Q>>2]|0;R=a+112|0;i=f[R>>2]|0;F=(+(C>>>0)+4294967296.0*+(I|0))/+((X(i,c)|0)>>>0);C=(b[a+181>>0]&8)==0?1:2;if(c|0){s=a+92|0;u=a+100|0;x=a+96|0;y=a+104|0;z=E+4|0;A=E+8|0;B=E+12|0;w=+((X(g<<3,e)|0)>>>0);p=0;g=i;e=i;while(1){o=p;p=p+1|0;if(!e){r=c;q=g;e=0}else{l=0;do{v=+Ja[C&3](h);k=f[h+8>>2]|0;v=v/+(k>>>0);r=f[s>>2]|0;g=f[u>>2]|0;j=(X(g,l)|0)+r|0;e=f[E>>2]|0;e=(j|0)>(e|0)?j:e;j=f[x>>2]|0;i=f[y>>2]|0;q=(X(i,o)|0)+j|0;c=f[z>>2]|0;c=(q|0)>(c|0)?q:c;l=l+1|0;r=(X(g,l)|0)+r|0;g=f[A>>2]|0;g=(r|0)<(g|0)?r:g;j=(X(i,p)|0)+j|0;i=f[B>>2]|0;i=(j|0)<(i|0)?j:i;j=h+20|0;m=+n[j>>2];if(m>0.0){t=+((X(X(g-e|0,D)|0,i-c|0)|0)>>>0)/(m*w)-v;n[j>>2]=t}if(k>>>0>1){m=+((X(X(g-e|0,D)|0,i-c|0)|0)>>>0);e=h+24|0;c=1;while(1){t=+n[e>>2];if(t>0.0)n[e>>2]=m/(t*w)-v;c=c+1|0;if(c>>>0>=k>>>0)break;else e=e+4|0}}h=h+5640|0;e=f[R>>2]|0}while(l>>>0 >>0);r=f[Q>>2]|0;q=e}if(p>>>0>=r>>>0)break;else{g=q;c=r}}if(r|0?(K=F+2.0,q|0):0){l=0;e=f[S>>2]|0;while(1){o=0;p=e;k=e+16|0;while(1){e=p+20|0;m=+n[e>>2];if(m>0.0?(w=m-F,n[e>>2]=w,w<30.0):0)n[e>>2]=30.0;c=p+24|0;e=f[p+8>>2]|0;j=e+-1|0;m=+n[c>>2];h=m>0.0;if(j>>>0>1){i=k+(e<<2)|0;g=1;e=h;do{if(e?(w=m-F,n[c>>2]=w,M=+n[c+-4>>2],w >2]=M+20.0;c=c+4|0;g=g+1|0;m=+n[c>>2];e=m>0.0}while((g|0)!=(j|0));if(e){H=i;J=m;N=25}}else if(h){H=c;J=m;N=25}if((N|0)==25?(N=0,w=J-K,n[H>>2]=w,L=+n[H+-4>>2],w >2]=L+20.0;p=p+5640|0;o=o+1|0;if(o>>>0>=q>>>0)break;else k=k+5640|0}l=l+1|0;if(l>>>0>=r>>>0)break;else e=p}}}h=f[G>>2]|0;if(!h)u=0;else{i=(f[a+100>>2]|0)+-1|0;j=(f[a+104>>2]|0)+-1|0;g=0;e=f[O>>2]|0;c=0;while(1){O=f[e>>2]|0;N=f[e+4>>2]|0;O=X(((j+N|0)>>>0)/(N>>>0)|0,((i+O|0)>>>0)/(O>>>0)|0)|0;g=(X(O,f[e+24>>2]|0)|0)+g|0;c=c+1|0;if(c>>>0>=h>>>0)break;else e=e+52|0}u=~~(+(g>>>0)*.1625)>>>0}o=f[(f[P>>2]|0)+16>>2]|0;r=o+-1|0;e=f[S>>2]|0;s=X(f[Q>>2]|0,f[R>>2]|0)|0;p=(s|0)==0;if(p)h=0;else{c=0;g=0;h=e;while(1){S=f[h+5588>>2]|0;c=c>>>0>S>>>0?c:S;g=g+1|0;if((g|0)==(s|0))break;else h=h+5640|0}h=c*12|0}q=a+88|0;if(((d[q>>1]|0)+-3&65535)>=4){if((o|0)==0|p){g=6;c=6}else{i=0;c=0;do{k=f[e+(i*5640|0)+5584>>2]|0;j=0;do{if(!(f[k+(j*1080|0)>>2]&1))g=5;else g=(f[k+(j*1080|0)+4>>2]|0)+5|0;c=c>>>0>g>>>0?c:g;j=j+1|0}while((j|0)!=(o|0));i=i+1|0}while((i|0)!=(s|0));c=c+6|0;j=0;g=0;do{l=f[e+(j*5640|0)+5584>>2]|0;k=0;do{if(!(f[l+(k*1080|0)>>2]&1))i=5;else i=(f[l+(k*1080|0)+4>>2]|0)+5|0;g=g>>>0>i>>>0?g:i;k=k+1|0}while((k|0)!=(o|0));j=j+1|0}while((j|0)!=(s|0));g=g+6|0}h=(X(g+c|0,r)|0)+h|0}if(p)e=13;else{g=0;c=0;while(1){S=f[e+420>>2]|0;g=g>>>0>S>>>0?g:S;c=c+1|0;if((c|0)==(s|0))break;else e=e+5640|0}e=(g*9|0)+13|0}S=h+u+e|0;f[a+40>>2]=S;S=Hc(S)|0;f[a+36>>2]=S;if(!S){a=0;return a|0}if(((d[q>>1]|0)+-3&65535)>=4){a=1;return a|0}e=Hc((f[a+32>>2]|0)*5|0)|0;f[a+24>>2]=e;if(!e){a=0;return a|0}f[a+28>>2]=e;a=1;return a|0}function xe(a){a=a|0;return 0.0}function ye(a){a=a|0;return +(+((((f[a+5588>>2]|0)*14|0)+-14|0)>>>0))}function ze(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+16|0;j=m+8|0;i=m;k=f[a+(b*5640|0)+5584>>2]|0;b=f[k+(c*1080|0)+24>>2]|0;do if((b|0)!=1){a=(f[k+(c*1080|0)+4>>2]|0)*3|0;h=a+-2|0;if(!b){a=a+-1|0;if((f[e>>2]|0)>>>0>>0){Mb(g,1,15741,i)|0;e=0;u=m;return e|0}else{yb(d,f[k+(c*1080|0)+804>>2]<<5,1);if(!h)break;else b=0;do{d=d+1|0;yb(d,f[k+(c*1080|0)+28+(b<<3)>>2]<<3,1);b=b+1|0}while((b|0)!=(h|0))}}else l=7}else{h=1;b=1;l=7}while(0);if((l|0)==7){a=h<<1|1;if((f[e>>2]|0)>>>0>>0){Mb(g,1,15741,j)|0;e=0;u=m;return e|0}yb(d,(f[k+(c*1080|0)+804>>2]<<5)+b|0,1);if(h){d=d+1|0;b=0;while(1){yb(d,(f[k+(c*1080|0)+28+(b<<3)>>2]<<11)+(f[k+(c*1080|0)+28+(b<<3)+4>>2]|0)|0,2);b=b+1|0;if((b|0)==(h|0))break;else d=d+2|0}}}f[e>>2]=(f[e>>2]|0)-a;e=1;u=m;return e|0}function Ae(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0;i=u;u=u+16|0;g=f[a+(b*5640|0)+5584>>2]|0;if((f[d>>2]|0)>>>0<5){Mb(e,1,15813,i)|0;d=0;u=i;return d|0}h=g+4|0;yb(c,(f[h>>2]|0)+-1|0,1);yb(c+1|0,(f[g+8>>2]|0)+-2|0,1);yb(c+2|0,(f[g+12>>2]|0)+-2|0,1);yb(c+3|0,f[g+16>>2]|0,1);yb(c+4|0,f[g+20>>2]|0,1);a=(f[d>>2]|0)+-5|0;f[d>>2]=a;if(!(f[g>>2]&1)){d=1;u=i;return d|0}b=f[h>>2]|0;if(a>>>0>>0){Mb(e,1,15813,i+8|0)|0;d=0;u=i;return d|0}if(!b)b=0;else{a=c+5|0;c=0;while(1){yb(a,(f[g+944+(c<<2)>>2]<<4)+(f[g+812+(c<<2)>>2]|0)|0,1);c=c+1|0;b=f[h>>2]|0;if(c>>>0>=b>>>0)break;else a=a+1|0}a=f[d>>2]|0}f[d>>2]=a-b;d=1;u=i;return d|0}function Be(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+48|0;m=o+40|0;n=o+32|0;l=o+24|0;j=o+16|0;h=o+8|0;i=a+200|0;if((f[i>>2]|0)!=(b|0)){Mb(g,1,15150,o)|0;f[j>>2]=b;Mb(g,1,16086,j)|0;u=o;return 0}k=X(f[a+116>>2]|0,f[a+112>>2]|0)|0;f[h>>2]=b+1;f[h+4>>2]=k;Mb(g,4,15187,h)|0;f[a+12>>2]=0;k=a+204|0;h=f[k>>2]|0;f[h+12>>2]=f[(f[a+164>>2]|0)+(b*5640|0)+5588>>2];f[a+8>>2]=0;if(!(Uf(h,f[i>>2]|0,g)|0)){f[j>>2]=b;Mb(g,1,16086,j)|0;u=o;return 0}h=f[k>>2]|0;a:do if(f[(f[h+24>>2]|0)+16>>2]|0){i=0;while(1){if(!(Tf((f[(f[f[h+20>>2]>>2]|0)+20>>2]|0)+(i*52|0)|0)|0))break;i=i+1|0;h=f[k>>2]|0;if(i>>>0>=(f[(f[h+24>>2]|0)+16>>2]|0)>>>0)break a}Mb(g,1,15208,l)|0;n=0;u=o;return n|0}while(0);if(!(ag(h,c,d)|0)){Mb(g,1,15285,n)|0;n=0;u=o;return n|0}if(Xd(a,e,g)|0){n=1;u=o;return n|0}f[m>>2]=b;Mb(g,1,16143,m)|0;n=0;u=o;return n|0}function Ce(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+16|0;if(!c){c=0;u=i;return c|0}if(!(Qd(f[a>>2]|0,b,c,d)|0)){Mb(d,1,16201,i)|0;c=0;u=i;return c|0}if(f[a+128>>2]|0){c=1;u=i;return c|0}h=a+108|0;if(!(De(c,h,d)|0)){c=0;u=i;return c|0}b=f[a+48>>2]|0;switch(b|0){case 16:{f[c+20>>2]=1;break}case 17:{f[c+20>>2]=2;break}case 18:{f[c+20>>2]=3;break}case 24:{f[c+20>>2]=4;break}default:f[c+20>>2]=(b|0)==12?5:-1}g=a+120|0;b=f[g>>2]|0;do if(b|0){if(f[b+12>>2]|0){Ee(c,h);break}Mc(f[b+4>>2]|0);Mc(f[(f[g>>2]|0)+8>>2]|0);Mc(f[f[g>>2]>>2]|0);b=f[g>>2]|0;e=f[b+12>>2]|0;if(e){Mc(e);b=f[g>>2]|0}Mc(b);f[g>>2]=0}while(0);if(f[a+116>>2]|0)Fe(c,h,d);b=f[h>>2]|0;if(!b){c=1;u=i;return c|0}f[c+28>>2]=b;f[c+32>>2]=f[a+112>>2];f[h>>2]=0;c=1;u=i;return c|0}function De(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=u;u=u+80|0;A=B+72|0;z=B+64|0;y=B+56|0;x=B+48|0;w=B+40|0;v=B+32|0;t=B+24|0;q=B+16|0;n=B+8|0;m=B;g=f[c+8>>2]|0;a:do if(!g)g=f[c+12>>2]|0;else{p=f[g>>2]|0;o=d[g+4>>1]|0;i=f[a+16>>2]|0;g=f[c+12>>2]|0;if((g|0)!=0?(f[g+12>>2]|0)!=0:0)i=h[g+18>>0]|0;b:do if(!(o<<16>>16)){if(!i)break a}else{l=0;c:while(1){c=l&65535;k=j[p+(c*6|0)>>1]|0;if(i>>>0<=k>>>0){l=14;break}c=d[p+(c*6|0)+4>>1]|0;switch(c<<16>>16){case 0:case -1:break;default:{c=(c&65535)+-1|0;if(c>>>0>=i>>>0){l=17;break c}}}l=l+1<<16>>16;if((l&65535)>=(o&65535)){l=8;break}}if((l|0)==8)while(1){i=i+-1|0;c=0;do{if((i|0)==(j[p+((c&65535)*6|0)>>1]|0))break;c=c+1<<16>>16}while((c&65535)<(o&65535));if(c<<16>>16==o<<16>>16)break b;if(!i)break a;else l=8}else if((l|0)==14){f[m>>2]=k;f[m+4>>2]=i;Mb(e,1,16331,m)|0;A=0;u=B;return A|0}else if((l|0)==17){f[n>>2]=c;f[n+4>>2]=i;Mb(e,1,16331,n)|0;A=0;u=B;return A|0}}while(0);Mb(e,1,16368,q)|0;A=0;u=B;return A|0}while(0);if(!g){A=1;u=B;return A|0}s=f[g+12>>2]|0;if(!s){A=1;u=B;return A|0}o=b[g+18>>0]|0;r=o&255;q=o<<24>>24==0;if(q)g=1;else{l=a+16|0;g=1;k=0;c=0;do{c=j[s+(c<<2)>>1]|0;i=f[l>>2]|0;if(i>>>0<=c>>>0){f[t>>2]=c;f[t+4>>2]=i;Mb(e,1,16331,t)|0;g=0}k=k+1<<16>>16;c=k&65535}while(c>>>0 >>0)}p=Ic(r,4)|0;if(!p){Mb(e,1,16401,v)|0;A=0;u=B;return A|0}if(!q){m=0;n=0;do{i=b[s+(n<<2)+3>>0]|0;k=i&255;do if((i&255)<(o&255)){l=p+(k<<2)|0;c=b[s+(n<<2)+2>>0]|0;if((f[l>>2]|0)!=0&c<<24>>24==1){f[x>>2]=k;Mb(e,1,16474,x)|0;g=0;break}if(c<<24>>24!=0|i<<24>>24==0){f[l>>2]=1;break}else{f[y>>2]=n;f[y+4>>2]=k;Mb(e,1,16505,y)|0;g=0;break}}else{f[w>>2]=k;Mb(e,1,16418,w)|0;g=0}while(0);m=m+1<<16>>16;n=m&65535}while(n>>>0 >>0);if(!q){i=0;c=0;do{if((f[p+(c<<2)>>2]|0)==0?(b[s+(c<<2)+2>>0]|0)!=0:0){f[z>>2]=c;Mb(e,1,16541,z)|0;g=0}i=i+1<<16>>16;c=i&65535}while(c>>>0 >>0)}}if(!g){Mc(p);A=0;u=B;return A|0}d:do if(!((f[a+16>>2]|0)!=1|q)){c=0;g=0;while(1){c=c+1<<16>>16;if(!(f[p+(g<<2)>>2]|0))break;g=c&65535;if(g>>>0>=r>>>0)break d}f[A>>2]=g;Mb(e,2,16579,A)|0;g=0;c=0;do{b[s+(c<<2)+2>>0]=1;b[s+(c<<2)+3>>0]=g;g=g+1<<16>>16;c=g&65535}while(c>>>0 >>0)}while(0);Mc(p);A=1;u=B;return A|0}function Ee(a,c){a=a|0;c=c|0;var e=0,g=0,i=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;w=c+12|0;c=f[w>>2]|0;m=f[c+8>>2]|0;n=f[c+4>>2]|0;r=f[c>>2]|0;q=f[c+12>>2]|0;c=b[c+18>>0]|0;s=a+24|0;t=f[s>>2]|0;u=c&255;v=Hc(u*52|0)|0;if(!v)return;o=c<<24>>24==0;if(!o){k=0;l=0;do{c=d[q+(l<<2)>>1]|0;if(!(b[q+(l<<2)+2>>0]|0)){c=c&65535;e=v+(l*52|0)|0;g=t+(c*52|0)|0;i=e+52|0;do{f[e>>2]=f[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(i|0))}else{c=c&65535;e=v+((h[q+(l<<2)+3>>0]|0)*52|0)|0;g=t+(c*52|0)|0;i=e+52|0;do{f[e>>2]=f[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(i|0))}i=Hc(X(f[t+(c*52|0)+8>>2]<<2,f[t+(c*52|0)+12>>2]|0)|0)|0;f[v+(l*52|0)+44>>2]=i;if(!i){p=7;break}f[v+(l*52|0)+24>>2]=h[m+l>>0];f[v+(l*52|0)+32>>2]=h[n+l>>0];k=k+1<<16>>16;l=k&65535}while(l>>>0>>0);if((p|0)==7){Mc(v);return}m=j[(f[w>>2]|0)+16>>1]|0;n=m+-1|0;if(!o){i=0;c=0;do{k=f[t+((j[q+(c<<2)>>1]|0)*52|0)+44>>2]|0;g=h[q+(c<<2)+3>>0]|0;l=X(f[v+(g*52|0)+12>>2]|0,f[v+(g*52|0)+8>>2]|0)|0;if(!(b[q+(c<<2)+2>>0]|0)){e=f[v+(c*52|0)+44>>2]|0;if(l|0){c=0;do{f[e+(c<<2)>>2]=f[k+(c<<2)>>2];c=c+1|0}while((c|0)!=(l|0))}}else{e=f[v+(g*52|0)+44>>2]|0;if(l|0){c=0;do{p=f[k+(c<<2)>>2]|0;p=r+((X((p|0)<0?0:(p|0)<(m|0)?p:n,u)|0)+g<<2)|0;f[e+(c<<2)>>2]=f[p>>2];c=c+1|0}while((c|0)!=(l|0))}}i=i+1<<16>>16;c=i&65535}while(c>>>0>>0)}}g=a+16|0;i=f[g>>2]|0;if(i|0){e=0;c=0;do{c=f[t+(c*52|0)+44>>2]|0;if(c|0)Mc(c);e=e+1<<16>>16;c=e&65535}while(i>>>0>c>>>0)}Mc(t);f[s>>2]=v;f[g>>2]=u;Mc(f[(f[w>>2]|0)+4>>2]|0);Mc(f[(f[w>>2]|0)+8>>2]|0);Mc(f[f[w>>2]>>2]|0);c=f[w>>2]|0;e=f[c+12>>2]|0;if(e){Mc(e);c=f[w>>2]|0}Mc(c);f[w>>2]=0;return}function Fe(a,b,c){a=a|0;b=b|0;c=c|0;var e=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,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=u;u=u+80|0;y=B+8|0;x=B;w=B+16|0;A=b+8|0;e=f[A>>2]|0;b=f[e>>2]|0;v=d[e+4>>1]|0;if(v<<16>>16){t=a+16|0;m=a+24|0;s=v&65535;q=1;r=0;while(1){n=d[b+(r*6|0)>>1]|0;o=n&65535;a=f[t>>2]|0;a:do if(a>>>0>o>>>0){e=d[b+(r*6|0)+4>>1]|0;switch(e<<16>>16){case -1:case 0:{d[(f[m>>2]|0)+(o*52|0)+48>>1]=d[b+(r*6|0)+2>>1]|0;break a}default:{}}p=(e&65535)+65535&65535;l=e+-1<<16>>16;j=l&65535;if(a>>>0<=j>>>0){f[y>>2]=j;f[y+4>>2]=a;Mb(c,2,16290,y)|0;break}k=b+(r*6|0)+2|0;if(n<<16>>16!=l<<16>>16?(d[k>>1]|0)==0:0){e=f[m>>2]|0;a=e+(o*52|0)|0;g=w;h=a;i=g+52|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=a;h=e+(j*52|0)|0;i=g+52|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=(f[m>>2]|0)+(j*52|0)|0;h=w;i=g+52|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));if((v&65535)>(r+1&65535)){g=q;do{a=b+(g*6|0)|0;e=d[a>>1]|0;if(e<<16>>16!=n<<16>>16){if(e<<16>>16==l<<16>>16){e=n;z=14}}else{e=p;z=14}if((z|0)==14){z=0;d[a>>1]=e}g=g+1|0}while(v<<16>>16!=(g&65535)<<16>>16)}}d[(f[m>>2]|0)+(o*52|0)+48>>1]=d[k>>1]|0}else{f[x>>2]=o;f[x+4>>2]=a;Mb(c,2,16250,x)|0}while(0);r=r+1|0;if((r|0)==(s|0))break;else q=q+1|0}b=f[A>>2]|0;e=b;b=f[b>>2]|0}if(!b){z=e;Mc(z);f[A>>2]=0;u=B;return}else{Mc(b);z=f[A>>2]|0;Mc(z);f[A>>2]=0;u=B;return}}function Ge(a,c){a=a|0;c=c|0;Oc(f[a>>2]|0,c);b[a+124>>0]=0;f[a+128>>2]=f[c+8248>>2]&1;return}function He(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;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,v=0,w=0,x=0;x=u;u=u+80|0;v=x+64|0;s=x+56|0;o=x+48|0;r=x+40|0;q=x+32|0;p=x+24|0;if(!((a|0)!=0&(c|0)!=0&(e|0)!=0)){c=0;u=x;return c|0}t=e+16|0;if(((f[t>>2]|0)+-1|0)>>>0>16383){Mb(g,1,16630,x)|0;c=0;u=x;return c|0}if(!(Tc(f[a>>2]|0,c,e,g)|0)){c=0;u=x;return c|0}f[a+56>>2]=1785737760;f[a+60>>2]=0;f[a+64>>2]=1;h=Hc(4)|0;f[a+68>>2]=h;if(!h){Mb(g,1,16699,x+8|0)|0;c=0;u=x;return c|0}f[h>>2]=1785737760;m=f[t>>2]|0;f[a+20>>2]=m;m=Hc(m*12|0)|0;f[a+72>>2]=m;if(!m){Mb(g,1,16699,x+16|0)|0;c=0;u=x;return c|0}f[a+16>>2]=(f[e+12>>2]|0)-(f[e+4>>2]|0);f[a+12>>2]=(f[e+8>>2]|0)-(f[e>>2]|0);w=e+24|0;n=f[w>>2]|0;i=f[n+24>>2]|0;j=f[n+32>>2]|0;k=a+24|0;f[k>>2]=i+-1+(j<<7);l=f[t>>2]|0;if(l>>>0>1){h=1;do{if((i|0)!=(f[n+(h*52|0)+24>>2]|0))f[k>>2]=255;h=h+1|0}while(h>>>0 >>0)}f[a+28>>2]=7;f[a+32>>2]=0;f[a+36>>2]=0;if(l|0?(f[m+8>>2]=i+-1+(j<<7),(l|0)!=1):0){h=1;do{f[m+(h*12|0)+8>>2]=(f[n+(h*52|0)+24>>2]|0)+-1+(f[n+(h*52|0)+32>>2]<<7);h=h+1|0}while(h>>>0 >>0)}h=e+32|0;i=f[h>>2]|0;j=a+40|0;a:do if(!i){f[j>>2]=1;switch(f[e+20>>2]|0){case 1:{f[a+48>>2]=16;break a}case 2:{f[a+48>>2]=17;break a}case 3:{f[a+48>>2]=18;break a}default:break a}}else{f[j>>2]=2;f[a+48>>2]=0;f[a+112>>2]=i;l=Ic(1,i)|0;f[a+108>>2]=l;hj(l|0,f[e+28>>2]|0,f[h>>2]|0)|0;b[a+124>>0]=1;l=f[t>>2]|0}while(0);b:do if(l|0){j=f[w>>2]|0;k=0;h=0;i=0;do{e=(d[j+(i*52|0)+48>>1]|0)==0;h=h+((e^1)&1)|0;k=e?k:i;i=i+1|0}while(i>>>0 >>0);switch(h|0){case 0:break b;case 1:break;default:{Mb(g,2,16995,o)|0;break b}}switch(f[a+48>>2]|0){case 18:case 16:{h=3;break}case 17:{h=1;break}default:{Mb(g,2,16745,p)|0;break b}}if(l>>>0<=h>>>0){Mb(g,2,16819,q)|0;break}if(k>>>0 >>0){Mb(g,2,16912,r)|0;break}r=Hc(8)|0;i=a+116|0;f[i>>2]=r;if(!r){Mb(g,1,17060,s)|0;c=0;u=x;return c|0}k=Hc((f[t>>2]|0)*6|0)|0;i=f[i>>2]|0;f[i>>2]=k;if(!k){Mb(g,1,17060,v)|0;c=0;u=x;return c|0}j=f[t>>2]|0;d[i+4>>1]=j;i=0;do{d[k+(i*6|0)>>1]=i;d[k+(i*6|0)+2>>1]=0;v=i;i=i+1|0;d[k+(v*6|0)+4>>1]=i}while((i|0)!=(h|0));if(h>>>0 >>0){i=f[w>>2]|0;do{w=(d[i+(h*52|0)+48>>1]|0)==0;d[k+(h*6|0)>>1]=h;d[k+(h*6|0)+2>>1]=w?-1:1;d[k+(h*6|0)+4>>1]=w<<31>>31;h=h+1|0}while(h>>>0 >>0)}}while(0);f[a+52>>2]=0;f[a+44>>2]=0;f[a+96>>2]=f[c+18692>>2];c=1;u=x;return c|0}function Ie(a,b,c){a=a|0;b=b|0;c=c|0;return Wd(f[a>>2]|0,b,c)|0}function Je(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;d=a+8|0;if(!(kg(f[d>>2]|0,53,c)|0)){c=0;return c|0}h=f[d>>2]|0;i=lg(h)|0;d=mg(h)|0;if(i){e=1;g=0;while(1){if(!e)e=0;else e=(Ma[f[d>>2]&63](a,b,c)|0)!=0;g=g+1|0;if((g|0)==(i|0))break;else{d=d+4|0;e=e&1}}ng(h);if(!e){c=0;return c|0}}else ng(h);c=Zc(f[a>>2]|0,b,c)|0;return c|0}function Ke(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=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,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=0;J=u;u=u+192|0;D=J+152|0;C=J+144|0;B=J+136|0;A=J+128|0;z=J+120|0;x=J+88|0;w=J+80|0;v=J+64|0;t=J+48|0;F=J+40|0;E=J+32|0;H=J+24|0;y=J+16|0;s=J+8|0;n=J+176|0;o=J+168|0;p=J+156|0;d=Ic(1,1024)|0;if(!d){Mb(c,1,17104,J)|0;H=0;u=J;return H|0}q=n+4|0;r=p+4|0;G=a+100|0;l=d;k=1024;a:while(1){if((Eb(b,n,8,c)|0)!=8)break;b:while(1){zb(n,p,4);zb(q,r,4);switch(f[p>>2]|0){case 0:{d=Ib(b)|0;m=I;if((m|0)>0|(m|0)==0&d>>>0>4294967287){m=6;break a}f[p>>2]=d+8;h=8;break}case 1:{if((Eb(b,n,8,c)|0)!=8){m=12;break a}zb(n,o,4);if(f[o>>2]|0){m=10;break a}zb(q,p,4);h=16;break}default:h=8}g=f[r>>2]|0;if((g|0)==1785737827){m=14;break a}i=f[p>>2]|0;if(!i){m=18;break a}if(i>>>0 >>0){m=20;break a}c:do if((g|0)<1718909296)if((g|0)<1668112752)if((g|0)<1667523942){switch(g|0){case 1651532643:break;default:{m=43;break c}}e=1124;m=30;break}else{switch(g|0){case 1667523942:break;default:{m=43;break c}}e=1148;m=30;break}else if((g|0)<1668246642){switch(g|0){case 1668112752:break;default:{m=43;break c}}e=1140;m=30;break}else{switch(g|0){case 1668246642:break;default:{m=43;break c}}e=1116;m=30;break}else{if((g|0)<1783636e3)if((g|0)<1768449138)switch(g|0){case 1718909296:{m=27;break b}default:{m=43;break c}}else switch(g|0){case 1768449138:{e=1108;m=30;break c}default:{m=43;break c}}if((g|0)<1785737832)switch(g|0){case 1783636e3:{d=1084;m=29;break b}default:{m=43;break c}}if((g|0)<1885564018)switch(g|0){case 1785737832:{m=28;break b}default:{m=43;break c}}switch(g|0){case 1885564018:break;default:{m=43;break c}}e=1132;m=30}while(0);if((m|0)==30){m=0;d=i-h|0;f[t>>2]=g>>>24;f[t+4>>2]=g>>>16&255;f[t+8>>2]=g>>>8&255;f[t+12>>2]=g&255;Mb(c,2,17288,t)|0;if(f[G>>2]&4|0){j=e;g=d;break}j=f[r>>2]|0;f[v>>2]=j>>>24;f[v+4>>2]=j>>>16&255;f[v+8>>2]=j>>>8&255;f[v+12>>2]=j&255;Mb(c,2,17339,v)|0;f[G>>2]=f[G>>2]|2147483647;j=Jb(b,d,0,c)|0;if(!((j|0)==(d|0)&(I|0)==0)){m=32;break a}}else if((m|0)==43){m=0;d=i-h|0;e=f[G>>2]|0;if(!(e&1)){m=44;break a}if(!(e&2)){m=46;break a}f[G>>2]=e|2147483647;j=Jb(b,d,0,c)|0;if(!((j|0)==(d|0)&(I|0)==0)){m=49;break a}}if((Eb(b,n,8,c)|0)!=8)break a}if((m|0)==27){d=1092;m=29}else if((m|0)==28){d=1100;m=29}if((m|0)==29){m=0;j=d;g=i-h|0}i=Ib(b)|0;h=I;if((h|0)<0|(h|0)==0&i>>>0 >>0){m=34;break}if(g>>>0>k>>>0){d=Lc(l,g)|0;if(!d){m=37;break}else e=g}else{d=l;e=k}if((Eb(b,d,g,c)|0)!=(g|0)){m=39;break}if(!(Na[f[j+4>>2]&63](a,d,g,c)|0)){m=42;break}else{l=d;k=e}}switch(m|0){case 6:{Mb(c,1,17154,s)|0;break}case 10:{Mb(c,1,17154,y)|0;break}case 12:break;case 14:{d=f[G>>2]|0;if(!(d&4)){Mb(c,1,17196,H)|0;Mc(l);H=0;u=J;return H|0}else{f[G>>2]=d|8;Mc(l);H=1;u=J;return H|0}}case 18:{Mb(c,1,17224,E)|0;Mc(l);H=0;u=J;return H|0}case 20:{f[F>>2]=i;f[F+4>>2]=g;Mb(c,1,17262,F)|0;Mc(l);H=0;u=J;return H|0}case 32:{Mb(c,1,17405,w)|0;Mc(l);H=0;u=J;return H|0}case 34:{F=f[p>>2]|0;G=f[r>>2]|0;H=Ib(b)|0;f[x>>2]=F;f[x+4>>2]=G>>>24;f[x+8>>2]=G>>>16&255;f[x+12>>2]=G>>>8&255;f[x+16>>2]=G&255;f[x+20>>2]=g;f[x+24>>2]=H;Mb(c,1,17455,x)|0;Mc(l);H=0;u=J;return H|0}case 37:{Mc(l);Mb(c,1,17531,z)|0;H=0;u=J;return H|0}case 39:{Mb(c,1,17573,A)|0;Mc(d);H=0;u=J;return H|0}case 42:{Mc(d);H=0;u=J;return H|0}case 44:{Mb(c,1,17622,B)|0;Mc(l);H=0;u=J;return H|0}case 46:{Mb(c,1,17692,C)|0;Mc(l);H=0;u=J;return H|0}case 49:{Mb(c,1,17405,D)|0;Mc(l);H=0;u=J;return H|0}}Mc(l);H=1;u=J;return H|0}function Le(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;h=u;u=u+48|0;g=h+32|0;e=a+72|0;if(f[e>>2]|0){Mb(d,2,18543,h)|0;g=1;u=h;return g|0}if((c|0)!=14){Mb(d,1,18591,h+8|0)|0;g=0;u=h;return g|0}zb(b,a+16|0,4);zb(b+4|0,a+12|0,4);c=a+20|0;zb(b+8|0,c,2);c=f[c>>2]|0;if((c+-1|0)>>>0>16383){Mb(d,1,18624,h+16|0)|0;g=0;u=h;return g|0}c=Ic(c,12)|0;f[e>>2]=c;if(!c){Mb(d,1,18661,h+24|0)|0;g=0;u=h;return g|0}zb(b+10|0,a+24|0,1);c=a+28|0;zb(b+11|0,c,1);c=f[c>>2]|0;if((c|0)!=7){f[g>>2]=c;Mb(d,4,18710,g)|0}zb(b+12|0,a+32|0,1);zb(b+13|0,a+36|0,1);g=1;u=h;return g|0}function Me(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|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,v=0,w=0,x=0,y=0;y=u;u=u+96|0;i=y+48|0;o=y+40|0;l=y+32|0;k=y+24|0;j=y+16|0;m=y+80|0;n=y+76|0;r=y+72|0;p=y+68|0;s=y+64|0;q=y+60|0;t=y+56|0;v=y+52|0;if(d>>>0<3){Mb(e,1,18186,y)|0;x=0;u=y;return x|0}w=a+108|0;x=a+124|0;if(b[x>>0]|0){Mb(e,4,18218,y+8|0)|0;x=1;u=y;return x|0}h=a+40|0;zb(c,h,1);zb(c+1|0,a+52|0,1);zb(c+2|0,a+44|0,1);g=c+3|0;h=f[h>>2]|0;switch(h|0){case 1:{if(d>>>0<7){f[j>>2]=d;Mb(e,1,18327,j)|0;x=0;u=y;return x|0}h=a+48|0;if((d|0)!=7?(f[h>>2]|0)!=14:0){f[k>>2]=d;Mb(e,2,18327,k)|0}zb(g,h,4);i=c+7|0;if((f[h>>2]|0)==14){m=Hc(36)|0;if(!m){Mb(e,1,18363,l)|0;x=0;u=y;return x|0}f[m>>2]=14;f[t>>2]=0;f[s>>2]=0;f[r>>2]=0;f[q>>2]=0;f[p>>2]=0;f[n>>2]=0;f[v>>2]=4470064;g=m+4|0;f[g>>2]=1145390592;switch(d|0){case 35:{zb(i,n,4);zb(c+11|0,r,4);zb(c+15|0,p,4);zb(c+19|0,s,4);zb(c+23|0,q,4);zb(c+27|0,t,4);zb(c+31|0,v,4);f[g>>2]=0;c=f[n>>2]|0;l=f[p>>2]|0;k=f[q>>2]|0;j=f[r>>2]|0;i=f[s>>2]|0;h=f[t>>2]|0;g=f[v>>2]|0;break}case 7:{c=0;l=0;k=0;j=0;i=0;h=0;g=4470064;break}default:{f[o>>2]=d;Mb(e,2,18393,o)|0;c=0;l=0;k=0;j=0;i=0;h=0;g=4470064}}f[m+8>>2]=c;f[m+16>>2]=l;f[m+24>>2]=k;f[m+12>>2]=j;f[m+20>>2]=i;f[m+28>>2]=h;f[m+32>>2]=g;f[w>>2]=m;f[a+112>>2]=0}b[x>>0]=1;x=1;u=y;return x|0}case 2:{i=d+-3|0;h=a+112|0;f[h>>2]=i;a=Ic(1,i)|0;f[w>>2]=a;if(!a){f[h>>2]=0;x=0;u=y;return x|0}if((d|0)>3){h=0;while(1){zb(g,m,1);b[(f[w>>2]|0)+h>>0]=f[m>>2];h=h+1|0;if((h|0)==(i|0))break;else g=g+1|0}}b[x>>0]=1;x=1;u=y;return x|0}default:{if(h>>>0<=2){x=1;u=y;return x|0}f[i>>2]=h;Mb(e,4,18437,i)|0;x=1;u=y;return x|0}}return 0}function Ne(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+16|0;g=i;e=f[a+24>>2]|0;if((e|0)!=255){f[g>>2]=e;Mb(d,2,18040,g)|0}h=a+20|0;if((f[h>>2]|0)!=(c|0)){Mb(d,1,18154,i+8|0)|0;h=0;u=i;return h|0}if(!c){h=1;u=i;return h|0}g=a+72|0;e=0;while(1){zb(b,(f[g>>2]|0)+(e*12|0)+8|0,1);e=e+1|0;if(e>>>0>=(f[h>>2]|0)>>>0){b=1;break}else b=b+1|0}u=i;return b|0}function Oe(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+16|0;i=r;q=r+12|0;j=a+120|0;if(e>>>0<3|(f[j>>2]|0)!=0){q=0;u=r;return q|0}zb(c,q,2);k=f[q>>2]|0;p=k&65535;if((p+-1|0)>>>0>1023){f[i>>2]=p;Mb(g,1,17957,i)|0;q=0;u=r;return q|0}zb(c+2|0,q,1);o=f[q>>2]&65535;if(!o){Mb(g,1,17995,r+8|0)|0;q=0;u=r;return q|0}if((o+3|0)>>>0>e>>>0){q=0;u=r;return q|0}m=Hc(X(p<<2,o)|0)|0;if(!m){q=0;u=r;return q|0}n=Hc(o)|0;if(!n){Mc(m);q=0;u=r;return q|0}l=Hc(o)|0;if(!l){Mc(m);Mc(n);q=0;u=r;return q|0}a=Hc(20)|0;if(!a){Mc(m);Mc(n);Mc(l);q=0;u=r;return q|0}f[a+4>>2]=l;f[a+8>>2]=n;f[a>>2]=m;d[a+16>>1]=k;b[a+18>>0]=f[q>>2];f[a+12>>2]=0;f[j>>2]=a;a=0;g=c+3|0;i=0;do{zb(g,q,1);g=g+1|0;b[n+i>>0]=(f[q>>2]&127)+1;b[l+i>>0]=(f[q>>2]|0)>>>7&1;a=a+1<<16>>16;i=a&65535}while(o>>>0>i>>>0);if(!p){q=1;u=r;return q|0}l=c;k=0;i=m;a=g;a:while(1){j=0;g=a;a=0;do{a=((h[n+a>>0]|0)+7|0)>>>3;a=a>>>0<4?a:4;if((g-l+a|0)>(e|0)){a=0;i=22;break a}zb(g,q,a);g=g+a|0;f[i>>2]=f[q>>2];i=i+4|0;j=j+1<<16>>16;a=j&65535}while(o>>>0>a>>>0);k=k+1<<16>>16;if(p>>>0<=(k&65535)>>>0){a=1;i=22;break}else a=g}if((i|0)==22){u=r;return a|0}return 0}function Pe(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=u;u=u+32|0;k=l+20|0;j=a+120|0;a=f[j>>2]|0;if(!a){Mb(g,1,17847,l)|0;k=0;u=l;return k|0}if(f[a+12>>2]|0){Mb(g,1,17893,l+8|0)|0;k=0;u=l;return k|0}h=b[a+18>>0]|0;i=h&255;a=i<<2;if(a>>>0>e>>>0){Mb(g,1,17924,l+16|0)|0;k=0;u=l;return k|0}e=Hc(a)|0;if(!e){k=0;u=l;return k|0}if(h<<24>>24){a=c;h=0;while(1){zb(a,k,2);d[e+(h<<2)>>1]=f[k>>2];zb(a+2|0,k,1);b[e+(h<<2)+2>>0]=f[k>>2];zb(a+3|0,k,1);b[e+(h<<2)+3>>0]=f[k>>2];h=h+1|0;if((h|0)==(i|0))break;else a=a+4|0}}f[(f[j>>2]|0)+12>>2]=e;k=1;u=l;return k|0}function Qe(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,k=0;k=u;u=u+32|0;i=k+20|0;h=a+116|0;if(f[h>>2]|0){i=0;u=k;return i|0}if(c>>>0<2){Mb(e,1,17753,k)|0;i=0;u=k;return i|0}zb(b,i,2);g=f[i>>2]|0;a=g&65535;if(!a){Mb(e,1,17786,k+8|0)|0;i=0;u=k;return i|0}if(((a*6|0)+2|0)>>>0>c>>>0){Mb(e,1,17753,k+16|0)|0;i=0;u=k;return i|0}g=Hc(g*6|0)|0;if(!g){i=0;u=k;return i|0}a=Hc(8)|0;f[h>>2]=a;if(!a){Mc(g);i=0;u=k;return i|0}f[a>>2]=g;e=f[i>>2]&65535;d[a+4>>1]=e;if(!(e<<16>>16)){i=1;u=k;return i|0}else a=0;do{e=a&65535;zb(b+2|0,i,2);d[g+(e*6|0)>>1]=f[i>>2];zb(b+4|0,i,2);b=b+6|0;d[g+(e*6|0)+2>>1]=f[i>>2];zb(b,i,2);d[g+(e*6|0)+4>>1]=f[i>>2];a=a+1<<16>>16}while((a&65535)<(j[(f[h>>2]|0)+4>>1]|0));b=1;u=k;return b|0}function Re(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;g=u;u=u+32|0;e=g+20|0;a=a+100|0;if(f[a>>2]|0){Mb(d,1,19251,g)|0;e=0;u=g;return e|0}if((c|0)!=4){Mb(d,1,19305,g+8|0)|0;e=0;u=g;return e|0}zb(b,e,4);if((f[e>>2]|0)==218793738){f[a>>2]=f[a>>2]|1;e=1;u=g;return e|0}else{Mb(d,1,19339,g+16|0)|0;e=0;u=g;return e|0}return 0}function Se(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+32|0;g=i+24|0;h=a+100|0;if((f[h>>2]|0)!=1){Mb(d,1,19132,i)|0;h=0;u=i;return h|0}if(c>>>0<8){Mb(d,1,19182,i+8|0)|0;h=0;u=i;return h|0}zb(b,a+56|0,4);zb(b+4|0,a+60|0,4);b=b+8|0;c=c+-8|0;if(c&3|0){Mb(d,1,19182,i+16|0)|0;h=0;u=i;return h|0}c=c>>>2;e=a+64|0;f[e>>2]=c;if(c|0){c=Ic(c,4)|0;f[a+68>>2]=c;if(!c){Mb(d,1,19218,g)|0;h=0;u=i;return h|0}if(f[e>>2]|0){a=a+68|0;c=0;while(1){zb(b,(f[a>>2]|0)+(c<<2)|0,4);c=c+1|0;if(c>>>0>=(f[e>>2]|0)>>>0)break;else b=b+4|0}}}f[h>>2]=f[h>>2]|2;h=1;u=i;return h|0}function Te(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=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,v=0,w=0,x=0,y=0,z=0;z=u;u=u+96|0;t=z+72|0;s=z+64|0;r=z+56|0;q=z+48|0;y=z+40|0;x=z+32|0;w=z+24|0;v=z+16|0;p=z+8|0;m=z+80|0;n=z+76|0;o=a+100|0;if(!(f[o>>2]&2)){Mb(d,1,18800,z)|0;y=0;u=z;return y|0}l=a+104|0;f[l>>2]=0;do if(c|0){i=0;a:while(1){if(c>>>0<8){h=6;break}zb(b,m,4);e=f[m>>2]|0;zb(b+4|0,m,4);k=f[m>>2]|0;switch(e|0){case 0:{h=15;break a}case 1:{if(c>>>0<16){h=9;break a}zb(b+8|0,n,4);if(f[n>>2]|0){h=11;break a}zb(b+12|0,m,4);e=f[m>>2]|0;if(!e){h=13;break a}j=16;break}default:j=8}if(e>>>0 >>0){h=17;break}if(c>>>0 >>0){h=20;break}b:do if((k|0)<1668246642){if((k|0)<1667523942){switch(k|0){case 1651532643:break;default:{h=28;break b}}g=1124;h=27;break}if((k|0)<1668112752){switch(k|0){case 1667523942:break;default:{h=28;break b}}g=1148;h=27;break}else{switch(k|0){case 1668112752:break;default:{h=28;break b}}g=1140;h=27;break}}else{if((k|0)<1768449138){switch(k|0){case 1668246642:break;default:{h=28;break b}}g=1116;h=27;break}if((k|0)<1885564018)switch(k|0){case 1768449138:{g=1108;h=27;break b}default:{h=28;break b}}switch(k|0){case 1885564018:break;default:{h=28;break b}}g=1132;h=27}while(0);if((h|0)==27){if(!(Na[f[g+4>>2]&63](a,b+j|0,e-j|0,d)|0)){b=0;h=33;break}}else if((h|0)==28)f[l>>2]=f[l>>2]|2147483647;i=(k|0)==1768449138?1:i;c=c-e|0;if(!c){h=30;break}else b=b+e|0}if((h|0)==6)Mb(d,1,18845,p)|0;else if((h|0)==9)Mb(d,1,18885,v)|0;else if((h|0)==11)Mb(d,1,17154,w)|0;else if((h|0)==13)Mb(d,1,17224,x)|0;else if((h|0)==15)Mb(d,1,17224,y)|0;else if((h|0)==17)Mb(d,1,18929,q)|0;else if((h|0)==20){Mb(d,1,19001,s)|0;y=0;u=z;return y|0}else if((h|0)==30){if(!i)break;f[o>>2]=f[o>>2]|4;y=1;u=z;return y|0}else if((h|0)==33){u=z;return b|0}Mb(d,1,18958,r)|0;y=0;u=z;return y|0}while(0);Mb(d,1,19073,t)|0;y=0;u=z;return y|0}function Ue(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;d=a+8|0;if(!(kg(f[d>>2]|0,54,c)|0)){i=0;return i|0}if(!(_d(f[a>>2]|0,b,c)|0)){i=0;return i|0}i=f[d>>2]|0;h=lg(i)|0;d=mg(i)|0;if(!h)d=1;else{e=d;d=1;g=0;while(1){if(!d)d=0;else d=(Ma[f[e>>2]&63](a,b,c)|0)!=0;d=d&1;g=g+1|0;if((g|0)==(h|0))break;else e=e+4|0}}ng(i);i=d;return i|0}function Ve(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;h=u;u=u+32|0;d=h+24|0;e=Hb(b)|0;g=I;a=a+80|0;i=a;i=_i(e|0,g|0,f[i>>2]|0,f[i+4>>2]|0)|0;yb(d,i,4);yb(d+4|0,1785737827,4);if(!(Kb(b,f[a>>2]|0,f[a+4>>2]|0,c)|0)){Mb(c,1,19383,h)|0;i=0;u=h;return i|0}if((Fb(b,d,8,c)|0)!=8){Mb(c,1,19383,h+8|0)|0;i=0;u=h;return i|0}if(Kb(b,e,g,c)|0){i=1;u=h;return i|0}Mb(c,1,19383,h+16|0)|0;i=0;u=h;return i|0}function We(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=a+4|0;if(!(kg(f[e>>2]|0,55,d)|0)){d=0;return d|0}i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](a,b,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){d=0;return d|0}}else ng(i);e=a+8|0;if(!(kg(f[e>>2]|0,56,d)|0)){d=0;return d|0}if(!(kg(f[e>>2]|0,57,d)|0)){d=0;return d|0}if(!(kg(f[e>>2]|0,58,d)|0)){d=0;return d|0}if(f[a+96>>2]|0?(kg(f[e>>2]|0,59,d)|0)==0:0){d=0;return d|0}if(!(kg(f[e>>2]|0,60,d)|0)){d=0;return d|0}i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](a,b,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){d=0;return d|0}}else ng(i);d=ee(f[a>>2]|0,b,c,d)|0;return d|0}function Xe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;c=(f[a>>2]|0?(f[a+104>>2]|f[a+100>>2]|0)==0:0)&(f[a+8>>2]|0)!=0&(f[a+4>>2]|0)!=0&(f[a+64>>2]|0)!=0&(f[a+16>>2]|0)!=0&(f[a+12>>2]|0)!=0&1;e=f[a+20>>2]|0;if(!e){g=c;a=a+40|0;a=f[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Lb(b)|0;b=b&g;b=b&a;return b|0}g=f[a+72>>2]|0;d=0;do{c=c&(f[g+(d*12|0)+8>>2]&126)>>>0<38;d=d+1|0}while(d>>>0 >>0);a=a+40|0;a=f[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Lb(b)|0;b=b&c;b=b&a;return b|0}function Ye(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=u;u=u+16|0;d=a;yb(d,12,4);yb(d+4|0,1783636e3,4);yb(d+8|0,218793738,4);c=(Fb(b,d,12,c)|0)==12&1;u=a;return c|0}function Ze(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;j=k+8|0;g=a+64|0;h=(f[g>>2]<<2)+16|0;i=Ic(1,h)|0;if(!i){Mb(c,1,19500,k)|0;j=0;u=k;return j|0}yb(i,h,4);yb(i+4|0,1718909296,4);yb(i+8|0,f[a+56>>2]|0,4);yb(i+12|0,f[a+60>>2]|0,4);e=i+16|0;if(f[g>>2]|0){d=a+68|0;a=0;do{yb(e,f[(f[d>>2]|0)+(a<<2)>>2]|0,4);a=a+1|0}while(a>>>0<(f[g>>2]|0)>>>0)}a=(Fb(b,i,h,c)|0)==(h|0);if(!a)Mb(c,1,19539,j)|0;Mc(i);j=a&1;u=k;return j|0}function _e(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=u;u=u+80|0;n=p+16|0;l=p+8|0;k=p;e=p+24|0;j=p+72|0;d=e;g=d+48|0;do{f[d>>2]=0;d=d+4|0}while((d|0)<(g|0));if((f[a+24>>2]|0)==255){f[e>>2]=1;d=3;g=2;h=1;i=4}else{d=2;g=1;h=0;i=1}f[e+(h*12|0)>>2]=i;f[e+(g*12|0)>>2]=2;if(!(f[a+116>>2]|0))o=d;else{f[e+(d*12|0)>>2]=3;o=d+1|0}yb(j+4|0,1785737832,4);d=8;g=0;h=e;while(1){i=h+8|0;q=La[f[h>>2]&7](a,i)|0;f[h+4>>2]=q;if(!q){m=7;break}d=(f[i>>2]|0)+d|0;g=g+1|0;if((g|0)>=(o|0))break;else h=h+12|0}if((m|0)==7){Mb(c,1,19414,k)|0;g=0;d=e;while(1){e=f[d+4>>2]|0;if(e|0)Mc(e);g=g+1|0;if((g|0)>=(o|0)){d=0;break}else d=d+12|0}u=p;return d|0}yb(j,d,4);a:do if((Fb(b,j,8,c)|0)==8){d=0;g=e;while(1){q=g+8|0;m=Fb(b,f[g+4>>2]|0,f[q>>2]|0,c)|0;if((m|0)!=(f[q>>2]|0))break;d=d+1|0;if((d|0)>=(o|0)){d=1;break a}else g=g+12|0}Mb(c,1,19457,n)|0;d=0}else{Mb(c,1,19457,l)|0;d=0}while(0);g=0;while(1){h=f[e+4>>2]|0;if(h|0)Mc(h);g=g+1|0;if((g|0)>=(o|0))break;else e=e+12|0}u=p;return d|0}function $e(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Hb(b)|0;a=a+88|0;f[a>>2]=d;f[a+4>>2]=I;c=Jb(b,24,0,c)|0;return (c|0)==24&(I|0)==0&1|0}function af(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Hb(b)|0;a=a+80|0;f[a>>2]=d;f[a+4>>2]=I;c=Jb(b,8,0,c)|0;return (c|0)==8&(I|0)==0&1|0}function bf(a,b){a=a|0;b=b|0;var c=0;c=Ic(1,22)|0;if(!c){c=0;return c|0}yb(c,22,4);yb(c+4|0,1768449138,4);yb(c+8|0,f[a+16>>2]|0,4);yb(c+12|0,f[a+12>>2]|0,4);yb(c+16|0,f[a+20>>2]|0,2);yb(c+18|0,f[a+24>>2]|0,1);yb(c+19|0,f[a+28>>2]|0,1);yb(c+20|0,f[a+32>>2]|0,1);yb(c+21|0,f[a+36>>2]|0,1);f[b>>2]=22;return c|0}function cf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;e=a+20|0;g=(f[e>>2]|0)+8|0;h=Ic(1,g)|0;if(!h){h=0;return h|0}yb(h,g,4);yb(h+4|0,1651532643,4);if(f[e>>2]|0){d=a+72|0;a=0;c=h+8|0;while(1){yb(c,f[(f[d>>2]|0)+(a*12|0)+8>>2]|0,1);a=a+1|0;if(a>>>0>=(f[e>>2]|0)>>>0)break;else c=c+1|0}}f[b>>2]=g;return h|0}function df(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0;c=a+40|0;switch(f[c>>2]|0){case 1:{i=15;break}case 2:{i=(f[a+112>>2]|0)+11|0;break}default:{j=0;return j|0}}j=Ic(1,i)|0;if(!j){j=0;return j|0}yb(j,i,4);yb(j+4|0,1668246642,4);yb(j+8|0,f[c>>2]|0,1);yb(j+9|0,f[a+52>>2]|0,1);yb(j+10|0,f[a+44>>2]|0,1);d=j+11|0;switch(f[c>>2]|0){case 1:{yb(d,f[a+48>>2]|0,4);break}case 2:{g=a+112|0;if(f[g>>2]|0){e=a+108|0;c=d;a=0;while(1){yb(c,h[(f[e>>2]|0)+a>>0]|0,1);a=a+1|0;if(a>>>0>=(f[g>>2]|0)>>>0)break;else c=c+1|0}}break}default:{}}f[b>>2]=i;return j|0}function ef(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0,i=0,k=0;h=a+116|0;i=((j[(f[h>>2]|0)+4>>1]|0)*6|0)+10|0;k=Hc(i)|0;if(!k){b=0;return b|0}yb(k,i,4);yb(k+4|0,1667523942,4);yb(k+8|0,j[(f[h>>2]|0)+4>>1]|0,2);a=f[h>>2]|0;if(d[a+4>>1]|0){e=k+10|0;g=0;c=0;while(1){yb(e,j[(f[a>>2]|0)+(c*6|0)>>1]|0,2);yb(e+2|0,j[(f[f[h>>2]>>2]|0)+(c*6|0)+2>>1]|0,2);yb(e+4|0,j[(f[f[h>>2]>>2]|0)+(c*6|0)+4>>1]|0,2);c=g+1<<16>>16;a=f[h>>2]|0;if((c&65535)>=(j[a+4>>1]|0))break;else{e=e+6|0;g=c;c=c&65535}}}f[b>>2]=i;b=k;return b|0}function ff(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;i=b+8|0;if(!(kg(f[i>>2]|0,53,d)|0)){d=0;return d|0}j=f[b+4>>2]|0;k=lg(j)|0;e=mg(j)|0;if(k){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(k|0))break;else{e=e+4|0;g=g&1}}ng(j);if(!g){d=0;return d|0}}else ng(j);i=f[i>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){d=0;return d|0}}else ng(i);d=_c(a,f[b>>2]|0,c,d)|0;return d|0}function gf(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Gd(f[a>>2]|0,b,c,d,e,g,h,i,j,k,l)|0}function hf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;return Be(f[a>>2]|0,b,c,d,e,g)|0}function jf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;return Hd(f[a>>2]|0,b,c,d,e,g)|0}function kf(a){a=a|0;var b=0,c=0,d=0;if(!a)return;Qc(f[a>>2]|0);f[a>>2]=0;b=a+72|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+68|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}c=a+108|0;b=f[c>>2]|0;if(b|0){Mc(b);f[c>>2]=0}d=a+116|0;b=f[d>>2]|0;if(b|0){c=f[b>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b>>2]=0}Mc(b);f[d>>2]=0}d=a+120|0;b=f[d>>2]|0;if(b|0){c=f[b+12>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b+12>>2]=0}c=f[b+4>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b+4>>2]=0}c=f[b+8>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b+8>>2]=0}c=f[b>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b>>2]=0}Mc(b);f[d>>2]=0}b=a+4|0;c=f[b>>2]|0;if(c|0){jg(c);f[b>>2]=0}b=a+8|0;c=f[b>>2]|0;if(c|0){jg(c);f[b>>2]=0}Mc(a);return}function lf(a,b,c,d,e,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;return Id(f[a>>2]|0,b,c,d,e,g,h)|0}function mf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0;i=u;u=u+16|0;if(!c){c=0;u=i;return c|0}Mb(d,2,19580,i)|0;if(!(Td(f[a>>2]|0,b,c,d,e)|0)){Mb(d,1,16201,i+8|0)|0;c=0;u=i;return c|0}h=a+108|0;if(!(De(c,h,d)|0)){c=0;u=i;return c|0}b=f[a+48>>2]|0;switch(b|0){case 16:{f[c+20>>2]=1;break}case 17:{f[c+20>>2]=2;break}case 18:{f[c+20>>2]=3;break}case 24:{f[c+20>>2]=4;break}default:f[c+20>>2]=(b|0)==12?5:-1}g=a+120|0;b=f[g>>2]|0;do if(b|0){if(f[b+12>>2]|0){Ee(c,h);break}Mc(f[b+4>>2]|0);Mc(f[(f[g>>2]|0)+8>>2]|0);Mc(f[f[g>>2]>>2]|0);b=f[g>>2]|0;e=f[b+12>>2]|0;if(e){Mc(e);b=f[g>>2]|0}Mc(b);f[g>>2]=0}while(0);if(f[a+116>>2]|0)Fe(c,h,d);b=f[h>>2]|0;if(!b){c=1;u=i;return c|0}f[c+28>>2]=b;f[c+32>>2]=f[a+112>>2];f[h>>2]=0;c=1;u=i;return c|0}function nf(a){a=a|0;var c=0;c=Ic(1,136)|0;if(!c)return c|0;if(!a)a=Pc()|0;else a=Jd()|0;f[c>>2]=a;if(!a){kf(c);c=0;return c|0}a=c+108|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;b[a+16>>0]=0;a=ig()|0;f[c+4>>2]=a;if(!a){kf(c);c=0;return c|0}a=ig()|0;f[c+8>>2]=a;if(a|0)return c|0;kf(c);c=0;return c|0}function of(a,b,c){a=a|0;b=b|0;c=c|0;Kd(f[a>>2]|0,b,c);return}function pf(a){a=a|0;return Pd(f[a>>2]|0)|0}function qf(a){a=a|0;return Od(f[a>>2]|0)|0}function rf(a,b,c){a=a|0;b=b|0;c=c|0;return Vd(f[a>>2]|0,b,c)|0}function sf(){return 8}function tf(){return 32}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!d)return;else e=0;do{l=a+(e<<2)|0;i=f[l>>2]|0;j=b+(e<<2)|0;h=f[j>>2]|0;g=c+(e<<2)|0;k=f[g>>2]|0;f[l>>2]=(h<<1)+i+k>>2;f[j>>2]=k-h;f[g>>2]=i-h;e=e+1|0}while((e|0)!=(d|0));return}function vf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!d)return;else e=0;do{k=a+(e<<2)|0;j=b+(e<<2)|0;h=f[j>>2]|0;g=c+(e<<2)|0;l=f[g>>2]|0;i=(f[k>>2]|0)-(l+h>>2)|0;f[k>>2]=i+l;f[j>>2]=i;f[g>>2]=i+h;e=e+1|0}while((e|0)!=(d|0));return}function wf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=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;if(!d)return;else e=0;do{o=a+(e<<2)|0;u=f[o>>2]|0;k=b+(e<<2)|0;t=f[k>>2]|0;g=c+(e<<2)|0;s=f[g>>2]|0;j=((u|0)<0)<<31>>31;q=Yi(u|0,j|0,2449,0)|0;q=Zi(q|0,I|0,4096,0)|0;q=ej(q|0,I|0,13)|0;i=((t|0)<0)<<31>>31;r=Yi(t|0,i|0,4809,0)|0;r=Zi(r|0,I|0,4096,0)|0;r=ej(r|0,I|0,13)|0;h=((s|0)<0)<<31>>31;p=Yi(s|0,h|0,934,0)|0;p=Zi(p|0,I|0,4096,0)|0;p=ej(p|0,I|0,13)|0;l=Yi(u|0,j|0,1382,0)|0;l=Zi(l|0,I|0,4096,0)|0;l=ej(l|0,I|0,13)|0;m=Yi(t|0,i|0,2714,0)|0;m=Zi(m|0,I|0,4096,0)|0;m=ej(m|0,I|0,13)|0;n=fj(s|0,h|0,12)|0;n=Zi(n|0,I|0,4096,0)|0;n=ej(n|0,I|0,13)|0;j=fj(u|0,j|0,12)|0;j=Zi(j|0,I|0,4096,0)|0;j=ej(j|0,I|0,13)|0;i=Yi(t|0,i|0,3430,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;h=Yi(s|0,h|0,666,0)|0;h=Zi(h|0,I|0,4096,0)|0;h=ej(h|0,I|0,13)|0;f[o>>2]=r+q+p;f[k>>2]=n-(m+l);f[g>>2]=j-i-h;e=e+1|0}while((e|0)!=(d|0));return}function xf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0.0,h=0.0,i=0,j=0.0,k=0;if(!d)return;else e=0;do{k=a+(e<<2)|0;h=+n[k>>2];i=b+(e<<2)|0;g=+n[i>>2];f=c+(e<<2)|0;j=+n[f>>2];n[k>>2]=h+j*1.4019999504089355;n[i>>2]=h-g*.3441300094127655-j*.714139997959137;n[f>>2]=h+g*1.7719999551773071;e=e+1|0}while((e|0)!=(d|0));return}function yf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0;g=X(d,d)|0;o=Hc(g+d<<2)|0;if(!o){b=0;return b|0}m=o+(d<<2)|0;if(g|0){e=a;a=0;while(1){f[m+(a<<2)>>2]=~~(+n[e>>2]*8192.0);a=a+1|0;if((a|0)==(g|0))break;else e=e+4|0}}a:do if(b|0){if(!d){e=0;while(1){e=e+1|0;if((e|0)==(b|0))break a}}else l=0;do{e=0;do{f[o+(e<<2)>>2]=f[f[c+(e<<2)>>2]>>2];e=e+1|0}while((e|0)!=(d|0));a=m;g=0;while(1){i=c+(g<<2)|0;j=f[i>>2]|0;f[j>>2]=0;e=0;h=a;k=0;while(1){p=f[h>>2]|0;q=f[o+(e<<2)>>2]|0;p=Yi(q|0,((q|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;p=Zi(p|0,I|0,4096,0)|0;p=ej(p|0,I|0,13)|0;k=k+p|0;f[j>>2]=k;e=e+1|0;if((e|0)==(d|0))break;else h=h+4|0}f[i>>2]=j+4;g=g+1|0;if((g|0)==(d|0))break;else a=a+(d<<2)|0}l=l+1|0}while((l|0)!=(b|0))}while(0);Mc(o);q=1;return q|0}function zf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0.0,l=0,m=0,o=0;o=Hc(d<<3)|0;if(!o){b=0;return b|0}m=o+(d<<2)|0;a:do if(b|0){if(!d){e=0;while(1){e=e+1|0;if((e|0)==(b|0))break a}}else l=0;do{e=0;do{f[o+(e<<2)>>2]=f[f[c+(e<<2)>>2]>>2];e=e+1|0}while((e|0)!=(d|0));g=a;i=0;while(1){j=m+(i<<2)|0;n[j>>2]=0.0;e=0;h=g;k=0.0;while(1){k=k+ +n[h>>2]*+n[o+(e<<2)>>2];n[j>>2]=k;e=e+1|0;if((e|0)==(d|0))break;else h=h+4|0}h=c+(i<<2)|0;j=f[h>>2]|0;f[h>>2]=j+4;n[j>>2]=k;i=i+1|0;if((i|0)==(d|0))break;else g=g+(d<<2)|0}l=l+1|0}while((l|0)!=(b|0))}while(0);Mc(o);b=1;return b|0}function Af(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0.0,h=0,i=0.0;if(!b)return;else f=0;do{h=a+(f<<3)|0;p[h>>3]=0.0;d=0;e=f;g=0.0;while(1){i=+n[c+(e<<2)>>2];g=g+i*i;d=d+1|0;if((d|0)==(b|0))break;else e=e+b|0}i=+L(+g);p[h>>3]=i;f=f+1|0}while((f|0)!=(b|0));return}function Bf(a,c,d){a=a|0;c=c|0;d=d|0;var e=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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+32|0;n=G+28|0;k=G+24|0;o=G+20|0;q=G+16|0;p=G+12|0;r=G+8|0;l=G+4|0;j=G;e=c+76|0;E=f[e>>2]|0;A=E+(d*5640|0)+420|0;F=(f[A>>2]|0)+1|0;m=a+16|0;B=Hc((f[m>>2]|0)*528|0)|0;if(!B){F=0;u=G;return F|0}C=Hc(f[m>>2]<<2)|0;if(!C){Mc(B);F=0;u=G;return F|0}e=Cf(a,f[e>>2]|0,d)|0;if(!e){Mc(B);Mc(C);F=0;u=G;return F|0}i=f[m>>2]|0;if(i|0){g=B;h=0;while(1){f[C+(h<<2)>>2]=g;h=h+1|0;if(h>>>0>=i>>>0)break;else g=g+528|0}}Df(a,c,d,o,q,p,r,l,j,k,n,C);D=f[k>>2]|0;x=X(f[m>>2]|0,D)|0;z=f[n>>2]|0;w=X(z,x)|0;h=e+4|0;f[h>>2]=0;y=E+(d*5640|0)+8|0;g=(f[y>>2]|0)+1|0;if(w>>>0<=(4294967295/(g>>>0)|0)>>>0?(v=Ic(X(g,w)|0,2)|0,f[h>>2]=v,v|0):0){g=f[e+196>>2]|0;v=f[a+24>>2]|0;t=f[o>>2]|0;f[e+200>>2]=t;s=f[p>>2]|0;f[e+204>>2]=s;p=f[q>>2]|0;f[e+208>>2]=p;o=f[r>>2]|0;f[e+212>>2]=o;f[e+20>>2]=1;f[e+16>>2]=D;f[e+12>>2]=x;f[e+8>>2]=w;m=f[e+192>>2]|0;if(m|0){l=v;c=g;j=0;while(1){g=f[c+12>>2]|0;h=f[C+(j<<2)>>2]|0;f[c>>2]=f[l>>2];f[c+4>>2]=f[l+4>>2];k=f[c+8>>2]|0;if(k|0){i=0;while(1){f[g>>2]=f[h>>2];f[g+4>>2]=f[h+4>>2];f[g+8>>2]=f[h+8>>2];f[g+12>>2]=f[h+12>>2];i=i+1|0;if(i>>>0>=k>>>0)break;else{g=g+16|0;h=h+16|0}}}j=j+1|0;if(j>>>0>=m>>>0)break;else{l=l+52|0;c=c+16|0}}}if(F>>>0>1){l=1;n=e;do{g=f[n+428>>2]|0;f[n+432>>2]=t;f[n+436>>2]=s;f[n+440>>2]=p;f[n+444>>2]=o;f[n+252>>2]=1;f[n+248>>2]=D;f[n+244>>2]=x;f[n+240>>2]=w;a=f[n+424>>2]|0;if(a|0){m=v;j=0;while(1){h=f[g+12>>2]|0;i=f[C+(j<<2)>>2]|0;f[g>>2]=f[m>>2];f[g+4>>2]=f[m+4>>2];k=f[g+8>>2]|0;if(k|0){c=0;while(1){f[h>>2]=f[i>>2];f[h+4>>2]=f[i+4>>2];f[h+8>>2]=f[i+8>>2];f[h+12>>2]=f[i+12>>2];c=c+1|0;if(c>>>0>=k>>>0)break;else{h=h+16|0;i=i+16|0}}}j=j+1|0;if(j>>>0>=a>>>0)break;else{m=m+52|0;g=g+16|0}}}f[n+236>>2]=f[n+4>>2];n=n+232|0;l=l+1|0}while((l|0)!=(F|0))}Mc(B);Mc(C);j=(f[A>>2]|0)+1|0;g=(j|0)==0;if(!(b[E+(d*5640|0)+5636>>0]&4)){if(g){F=e;u=G;return F|0}c=f[E+(d*5640|0)+4>>2]|0;i=f[y>>2]|0;g=0;h=e;while(1){f[h+80>>2]=c;f[h+40>>2]=1;f[h+44>>2]=0;f[h+48>>2]=0;f[h+64>>2]=0;f[h+68>>2]=0;f[h+56>>2]=z;f[h+60>>2]=f[h+192>>2];f[h+52>>2]=i;f[h+72>>2]=D;g=g+1|0;if((g|0)==(j|0))break;else h=h+232|0}u=G;return e|0}else{if(g){F=e;u=G;return F|0}g=E+(d*5640|0)+424|0;h=e;i=0;while(1){f[h+80>>2]=f[g+36>>2];f[h+40>>2]=1;f[h+44>>2]=f[g>>2];f[h+48>>2]=f[g+4>>2];f[h+64>>2]=0;f[h+68>>2]=0;f[h+56>>2]=f[g+12>>2];f[h+60>>2]=f[g+16>>2];f[h+52>>2]=f[g+8>>2];f[h+72>>2]=D;i=i+1|0;if((i|0)==(j|0))break;else{g=g+148|0;h=h+232|0}}u=G;return e|0}}Mc(B);Mc(C);g=f[h>>2]|0;if(g|0){Mc(g);f[h>>2]=0}if(F|0){l=e;m=0;while(1){n=l+196|0;g=f[n>>2]|0;if(g|0){k=l+192|0;h=f[k>>2]|0;if(h){j=0;while(1){i=g+12|0;c=f[i>>2]|0;if(c){Mc(c);f[i>>2]=0;h=f[k>>2]|0}j=j+1|0;if(j>>>0>=h>>>0)break;else g=g+16|0}g=f[n>>2]|0}Mc(g);f[n>>2]=0}m=m+1|0;if((m|0)==(F|0))break;else l=l+232|0}}Mc(e);F=0;u=G;return F|0}function Cf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=(f[b+(c*5640|0)+420>>2]|0)+1|0;d=Ic(l,232)|0;if(!d){l=0;return l|0}if(!l){l=d;return l|0}j=a+16|0;i=b+(c*5640|0)+5584|0;g=d;h=0;a=f[j>>2]|0;a:while(1){b=Ic(a,16)|0;e=g+196|0;f[e>>2]=b;if(!b){a=5;break}k=f[j>>2]|0;f[g+192>>2]=k;b:do if(!k)a=0;else{a=(f[i>>2]|0)+4|0;k=Ic(f[a>>2]|0,16)|0;f[b+12>>2]=k;if(!k){a=19;break a}c=0;while(1){f[b+(c<<4)+8>>2]=f[a>>2];c=c+1|0;a=f[j>>2]|0;if(c>>>0>=a>>>0)break b;b=f[e>>2]|0;a=(f[i>>2]|0)+(c*1080|0)+4|0;k=Ic(f[a>>2]|0,16)|0;f[b+(c<<4)+12>>2]=k;if(!k){a=19;break a}}}while(0);h=h+1|0;if(h>>>0>=l>>>0){a=33;break}else g=g+232|0}if((a|0)==5){a=d+4|0;b=f[a>>2]|0;if(!b){i=d;j=0}else{Mc(b);f[a>>2]=0;i=d;j=0}while(1){k=i+196|0;a=f[k>>2]|0;if(a|0){h=i+192|0;b=f[h>>2]|0;if(b){g=0;while(1){c=a+12|0;e=f[c>>2]|0;if(e){Mc(e);f[c>>2]=0;b=f[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=f[k>>2]|0}Mc(a);f[k>>2]=0}j=j+1|0;if((j|0)==(l|0))break;else i=i+232|0}Mc(d);l=0;return l|0}else if((a|0)==19){a=d+4|0;b=f[a>>2]|0;if(!b){i=d;j=0}else{Mc(b);f[a>>2]=0;i=d;j=0}while(1){k=i+196|0;a=f[k>>2]|0;if(a|0){h=i+192|0;b=f[h>>2]|0;if(b){g=0;while(1){c=a+12|0;e=f[c>>2]|0;if(e){Mc(e);f[c>>2]=0;b=f[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=f[k>>2]|0}Mc(a);f[k>>2]=0}j=j+1|0;if((j|0)==(l|0))break;else i=i+232|0}Mc(d);l=0;return l|0}else if((a|0)==33)return d|0;return 0}function Df(a,b,c,d,e,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;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,J=0,K=0,L=0;n=f[(f[b+76>>2]|0)+(c*5640|0)+5584>>2]|0;o=f[a+24>>2]|0;B=f[b+24>>2]|0;C=b+12|0;A=(X(f[C>>2]|0,(c>>>0)%(B>>>0)|0)|0)+(f[b+4>>2]|0)|0;z=f[a>>2]|0;f[d>>2]=A>>>0>z>>>0?A:z;A=Zi(f[C>>2]|0,0,A|0,0)|0;A=0-I|A;C=f[a+8>>2]|0;f[e>>2]=A>>>0 >>0?A:C;C=b+16|0;B=(X(f[C>>2]|0,(c>>>0)/(B>>>0)|0)|0)+(f[b+8>>2]|0)|0;A=f[a+4>>2]|0;f[g>>2]=B>>>0>A>>>0?B:A;B=Zi(f[C>>2]|0,0,B|0,0)|0;B=0-I|B;C=f[a+12>>2]|0;f[h>>2]=B>>>0 >>0?B:C;f[k>>2]=0;f[l>>2]=0;f[i>>2]=2147483647;f[j>>2]=2147483647;C=a+16|0;if(!(f[C>>2]|0))return;else z=0;while(1){u=f[m+(z<<2)>>2]|0;p=f[o>>2]|0;b=((f[d>>2]|0)+-1+p|0)/(p|0)|0;A=o+4|0;q=f[A>>2]|0;c=((f[g>>2]|0)+-1+q|0)/(q|0)|0;p=(p+-1+(f[e>>2]|0)|0)/(p|0)|0;q=(q+-1+(f[h>>2]|0)|0)/(q|0)|0;B=n+4|0;a=f[B>>2]|0;if(a>>>0>(f[l>>2]|0)>>>0){f[l>>2]=a;a=f[B>>2]|0}if(a|0){x=Zi(b|0,((b|0)<0)<<31>>31|0,-1,-1)|0;y=I;v=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;w=I;t=Zi(p|0,((p|0)<0)<<31>>31|0,-1,-1)|0;s=I;q=Zi(q|0,((q|0)<0)<<31>>31|0,-1,-1)|0;r=I;p=0;c=u;while(1){a=a+-1|0;b=f[n+812+(p<<2)>>2]|0;u=f[n+944+(p<<2)>>2]|0;f[c>>2]=b;f[c+4>>2]=u;F=f[o>>2]<>2]<>2]|0;f[i>>2]=(G|0)<(F|0)?G:F;F=f[j>>2]|0;f[j>>2]=(F|0)<(K|0)?F:K;K=fj(1,0,a|0)|0;F=I;G=Zi(x|0,y|0,K|0,F|0)|0;G=dj(G|0,I|0,a|0)|0;D=Zi(v|0,w|0,K|0,F|0)|0;D=dj(D|0,I|0,a|0)|0;J=Zi(t|0,s|0,K|0,F|0)|0;J=dj(J|0,I|0,a|0)|0;F=Zi(q|0,r|0,K|0,F|0)|0;F=dj(F|0,I|0,a|0)|0;K=fj(1,0,b|0)|0;H=I;E=Zi(J|0,((J|0)<0)<<31>>31|0,-1,-1)|0;H=Zi(E|0,I|0,K|0,H|0)|0;H=dj(H|0,I|0,b|0)|0;K=fj(1,0,u|0)|0;E=I;L=Zi(F|0,((F|0)<0)<<31>>31|0,-1,-1)|0;E=Zi(L|0,I|0,K|0,E|0)|0;E=dj(E|0,I|0,u|0)|0;b=(G|0)==(J|0)?0:(H<>b<>b;u=(D|0)==(F|0)?0:(E<>u<>u;f[c+8>>2]=b;f[c+12>>2]=u;b=X(u,b)|0;if(b>>>0>(f[k>>2]|0)>>>0)f[k>>2]=b;p=p+1|0;if(p>>>0>=(f[B>>2]|0)>>>0)break;else c=c+16|0}}z=z+1|0;if(z>>>0>=(f[C>>2]|0)>>>0)break;else{n=n+1080|0;o=o+52|0}}return}function Ef(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!a)return;c=a+4|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0}if(b|0){j=a;k=0;while(1){l=j+196|0;c=f[l>>2]|0;if(c|0){i=j+192|0;d=f[i>>2]|0;if(d){h=0;while(1){e=c+12|0;g=f[e>>2]|0;if(g){Mc(g);f[e>>2]=0;d=f[i>>2]|0}h=h+1|0;if(h>>>0>=d>>>0)break;else c=c+16|0}c=f[l>>2]|0}Mc(c);f[l>>2]=0}k=k+1|0;if((k|0)==(b|0))break;else j=j+232|0}}Mc(a);return}function Ff(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=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;L=u;u=u+32|0;n=L+28|0;m=L+24|0;o=L+20|0;q=L+16|0;p=L+12|0;r=L+8|0;s=L+4|0;t=L;H=c+76|0;C=f[H>>2]|0;K=(f[C+(e*5640|0)+420>>2]|0)+1|0;G=a+16|0;D=Hc((f[G>>2]|0)*528|0)|0;if(!D){K=0;u=L;return K|0}E=Hc(f[G>>2]<<2)|0;if(!E){Mc(D);K=0;u=L;return K|0}i=Cf(a,f[H>>2]|0,e)|0;if(!i){Mc(D);Mc(E);K=0;u=L;return K|0}l=f[G>>2]|0;if(l|0){j=D;k=0;while(1){f[E+(k<<2)>>2]=j;k=k+1|0;if(k>>>0>=l>>>0)break;else j=j+528|0}}Df(a,c,e,o,q,p,r,s,t,m,n,E);J=f[m>>2]|0;x=X(f[G>>2]|0,J)|0;I=f[n>>2]|0;w=X(I,x)|0;b[i>>0]=(h[c+93>>0]|0)>>>3&1;F=Ic(X(f[C+(e*5640|0)+8>>2]|0,w)|0,2)|0;k=i+4|0;f[k>>2]=F;if(!F){Mc(D);Mc(E);j=f[k>>2]|0;if(j|0){Mc(j);f[k>>2]=0}if(K|0){o=i;p=0;while(1){q=o+196|0;j=f[q>>2]|0;if(j|0){a=o+192|0;k=f[a>>2]|0;if(k){n=0;while(1){l=j+12|0;m=f[l>>2]|0;if(m){Mc(m);f[l>>2]=0;k=f[a>>2]|0}n=n+1|0;if(n>>>0>=k>>>0)break;else j=j+16|0}j=f[q>>2]|0}Mc(j);f[q>>2]=0}p=p+1|0;if((p|0)==(K|0))break;else o=o+232|0}}Mc(i);K=0;u=L;return K|0}m=f[i+196>>2]|0;v=f[a+24>>2]|0;F=f[o>>2]|0;f[i+200>>2]=F;B=f[p>>2]|0;f[i+204>>2]=B;A=f[q>>2]|0;f[i+208>>2]=A;z=f[r>>2]|0;f[i+212>>2]=z;y=f[s>>2]|0;f[i+224>>2]=y;s=f[t>>2]|0;f[i+228>>2]=s;f[i+20>>2]=1;f[i+16>>2]=J;f[i+12>>2]=x;f[i+8>>2]=w;p=f[i+192>>2]|0;if(p|0){o=v;n=0;while(1){j=f[m+12>>2]|0;k=f[E+(n<<2)>>2]|0;f[m>>2]=f[o>>2];f[m+4>>2]=f[o+4>>2];a=f[m+8>>2]|0;if(a|0){l=0;while(1){f[j>>2]=f[k>>2];f[j+4>>2]=f[k+4>>2];f[j+8>>2]=f[k+8>>2];f[j+12>>2]=f[k+12>>2];l=l+1|0;if(l>>>0>=a>>>0)break;else{j=j+16|0;k=k+16|0}}}n=n+1|0;if(n>>>0>=p>>>0)break;else{o=o+52|0;m=m+16|0}}}if(K>>>0>1){o=1;q=i;do{j=f[q+428>>2]|0;f[q+432>>2]=F;f[q+436>>2]=B;f[q+440>>2]=A;f[q+444>>2]=z;f[q+456>>2]=y;f[q+460>>2]=s;f[q+252>>2]=1;f[q+248>>2]=J;f[q+244>>2]=x;f[q+240>>2]=w;r=f[q+424>>2]|0;if(r|0){p=v;n=0;while(1){k=f[j+12>>2]|0;l=f[E+(n<<2)>>2]|0;f[j>>2]=f[p>>2];f[j+4>>2]=f[p+4>>2];a=f[j+8>>2]|0;if(a|0){m=0;while(1){f[k>>2]=f[l>>2];f[k+4>>2]=f[l+4>>2];f[k+8>>2]=f[l+8>>2];f[k+12>>2]=f[l+12>>2];m=m+1|0;if(m>>>0>=a>>>0)break;else{k=k+16|0;l=l+16|0}}}n=n+1|0;if(n>>>0>=r>>>0)break;else{p=p+52|0;j=j+16|0}}}f[q+236>>2]=f[q+4>>2];q=q+232|0;o=o+1|0}while((o|0)!=(K|0))}Mc(D);Mc(E);do if(b[C+(e*5640|0)+5636>>0]&4){j=d[c>>1]|0;if((j&65535)>2){if(!((g|0)==1|(j&65535)<7))break}else if((g|0)!=1)break;Gf(f[H>>2]|0,e,F,A,B,z,J,y,s);K=i;u=L;return K|0}while(0);a=f[G>>2]|0;j=f[H>>2]|0;l=(f[j+(e*5640|0)+420>>2]|0)+1|0;if(!l){K=i;u=L;return K|0}m=f[j+(e*5640|0)+8>>2]|0;n=f[j+(e*5640|0)+4>>2]|0;k=0;j=j+(e*5640|0)+424|0;while(1){f[j+76>>2]=0;f[j+92>>2]=a;f[j+72>>2]=0;f[j+88>>2]=I;f[j+68>>2]=0;f[j+84>>2]=m;f[j+36>>2]=n;f[j+80>>2]=0;f[j+96>>2]=J;f[j+100>>2]=F;f[j+104>>2]=A;f[j+108>>2]=B;f[j+112>>2]=z;f[j+116>>2]=y;f[j+120>>2]=s;k=k+1|0;if((k|0)==(l|0))break;else j=j+148|0}u=L;return i|0}function Gf(a,b,c,d,e,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;l=(f[a+(b*5640|0)+420>>2]|0)+1|0;f[a+(b*5640|0)+500>>2]=f[a+(b*5640|0)+428>>2];f[a+(b*5640|0)+516>>2]=f[a+(b*5640|0)+440>>2];f[a+(b*5640|0)+496>>2]=f[a+(b*5640|0)+424>>2];f[a+(b*5640|0)+512>>2]=f[a+(b*5640|0)+436>>2];f[a+(b*5640|0)+508>>2]=f[a+(b*5640|0)+432>>2];f[a+(b*5640|0)+492>>2]=0;f[a+(b*5640|0)+460>>2]=f[a+(b*5640|0)+456>>2];f[a+(b*5640|0)+504>>2]=0;f[a+(b*5640|0)+520>>2]=h;f[a+(b*5640|0)+524>>2]=c;f[a+(b*5640|0)+528>>2]=d;f[a+(b*5640|0)+532>>2]=e;f[a+(b*5640|0)+536>>2]=g;f[a+(b*5640|0)+540>>2]=i;f[a+(b*5640|0)+544>>2]=j;if(l>>>0<=1)return;k=1;a=a+(b*5640|0)+572|0;while(1){f[a+76>>2]=f[a+4>>2];f[a+92>>2]=f[a+16>>2];f[a+72>>2]=f[a>>2];f[a+88>>2]=f[a+12>>2];b=f[a+8>>2]|0;f[a+84>>2]=b;f[a+36>>2]=f[a+32>>2];f[a+80>>2]=0;f[a+68>>2]=b>>>0>(f[a+-64>>2]|0)>>>0?b:0;f[a+96>>2]=h;f[a+100>>2]=c;f[a+104>>2]=d;f[a+108>>2]=e;f[a+112>>2]=g;f[a+116>>2]=i;f[a+120>>2]=j;k=k+1|0;if((k|0)==(l|0))break;else a=a+148|0}return}function Hf(a,c,e,g,h,i,j){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;i=i|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,V=0,W=0,X=0,Y=0;V=f[c+76>>2]|0;Y=V+(e*5640|0)+424+(g*148|0)+36|0;W=Nc(f[Y>>2]|0)|0;f[a+(g*232|0)+40>>2]=1;X=a+(g*232|0)+44|0;f[a+(g*232|0)+80>>2]=f[Y>>2];do if(b[c+93>>0]&8){k=d[c>>1]|0;if((k&65535)>2){if(!((j|0)==1&(k&65535)>6|(k+-3&65535)<4))break}else if(!((j|0)==1|(k+-3&65535)<4))break;a:do if((i|0)<3){p=V+(e*5640|0)+424+(g*148|0)+72|0;q=V+(e*5640|0)+424+(g*148|0)+88|0;r=a+(g*232|0)+56|0;s=V+(e*5640|0)+424+(g*148|0)+76|0;t=a+(g*232|0)+48|0;u=V+(e*5640|0)+424+(g*148|0)+92|0;v=a+(g*232|0)+60|0;w=V+(e*5640|0)+424+(g*148|0)+68|0;x=a+(g*232|0)+64|0;y=V+(e*5640|0)+424+(g*148|0)+84|0;z=a+(g*232|0)+52|0;A=V+(e*5640|0)+424+(g*148|0)+80|0;B=a+(g*232|0)+68|0;C=V+(e*5640|0)+424+(g*148|0)+96|0;D=a+(g*232|0)+72|0;E=V+(e*5640|0)+424+(g*148|0)+100|0;F=a+(g*232|0)+96|0;G=V+(e*5640|0)+424+(g*148|0)+108|0;H=a+(g*232|0)+104|0;I=V+(e*5640|0)+424+(g*148|0)+104|0;J=a+(g*232|0)+100|0;K=V+(e*5640|0)+424+(g*148|0)+112|0;L=a+(g*232|0)+108|0;k=i;while(1){j=k;k=k+1|0;switch(b[W+k>>0]|0){case 82:{l=r;m=q;n=X;o=p;U=10;break}case 67:{l=v;m=u;n=t;o=s;U=10;break}case 76:{l=z;m=y;n=x;o=w;U=10;break}case 80:{if((f[Y>>2]|0)>>>0<2){l=D;m=C;n=B;o=A;U=10}else{f[F>>2]=f[E>>2];f[H>>2]=f[G>>2];l=L;m=K;n=J;o=I;U=10}break}default:{}}if((U|0)==10){U=0;f[n>>2]=f[o>>2];f[l>>2]=f[m>>2]}if((j|0)>=2)break a}}while(0);k=(i|0)>-1;if(!h){if(!k)return;m=V+(e*5640|0)+424+(g*148|0)+76|0;n=V+(e*5640|0)+424+(g*148|0)+132|0;o=a+(g*232|0)+48|0;p=a+(g*232|0)+60|0;q=V+(e*5640|0)+424+(g*148|0)+72|0;r=V+(e*5640|0)+424+(g*148|0)+128|0;s=a+(g*232|0)+56|0;t=V+(e*5640|0)+424+(g*148|0)+68|0;u=V+(e*5640|0)+424+(g*148|0)+124|0;v=a+(g*232|0)+64|0;w=a+(g*232|0)+52|0;x=V+(e*5640|0)+424+(g*148|0)+80|0;y=V+(e*5640|0)+424+(g*148|0)+136|0;z=a+(g*232|0)+68|0;A=a+(g*232|0)+72|0;B=V+(e*5640|0)+424+(g*148|0)+100|0;C=V+(e*5640|0)+424+(g*148|0)+140|0;D=V+(e*5640|0)+424+(g*148|0)+108|0;E=V+(e*5640|0)+424+(g*148|0)+144|0;F=a+(g*232|0)+96|0;G=V+(e*5640|0)+424+(g*148|0)+116|0;H=a+(g*232|0)+100|0;I=a+(g*232|0)+104|0;l=V+(e*5640|0)+424+(g*148|0)+120|0;j=a+(g*232|0)+108|0;k=i;while(1){b:do switch(b[W+k>>0]|0){case 67:{g=f[m>>2]|0;f[o>>2]=g;g=g+1|0;f[p>>2]=g;f[n>>2]=g;break}case 82:{g=f[q>>2]|0;f[X>>2]=g;g=g+1|0;f[s>>2]=g;f[r>>2]=g;break}case 76:{g=f[t>>2]|0;f[v>>2]=g;g=g+1|0;f[w>>2]=g;f[u>>2]=g;break}case 80:if((f[Y>>2]|0)>>>0<2){g=f[x>>2]|0;f[z>>2]=g;g=g+1|0;f[A>>2]=g;f[y>>2]=g;break b}else{g=f[B>>2]|0;i=f[D>>2]|0;f[F>>2]=g;e=f[G>>2]|0;e=e+g-((g>>>0)%(e>>>0)|0)|0;f[H>>2]=e;f[I>>2]=i;g=f[l>>2]|0;g=g+i-((i>>>0)%(g>>>0)|0)|0;f[j>>2]=g;f[C>>2]=e;f[E>>2]=g;break b}default:{}}while(0);if((k|0)>0)k=k+-1|0;else break}return}if(!k)return;P=V+(e*5640|0)+424+(g*148|0)+128|0;Q=V+(e*5640|0)+424+(g*148|0)+88|0;R=V+(e*5640|0)+424+(g*148|0)+72|0;S=a+(g*232|0)+56|0;T=V+(e*5640|0)+424+(g*148|0)+132|0;t=V+(e*5640|0)+424+(g*148|0)+92|0;u=V+(e*5640|0)+424+(g*148|0)+76|0;v=a+(g*232|0)+48|0;w=a+(g*232|0)+60|0;x=V+(e*5640|0)+424+(g*148|0)+124|0;y=V+(e*5640|0)+424+(g*148|0)+84|0;z=V+(e*5640|0)+424+(g*148|0)+68|0;A=a+(g*232|0)+64|0;B=a+(g*232|0)+52|0;C=V+(e*5640|0)+424+(g*148|0)+136|0;D=V+(e*5640|0)+424+(g*148|0)+96|0;E=V+(e*5640|0)+424+(g*148|0)+80|0;F=a+(g*232|0)+68|0;G=a+(g*232|0)+72|0;H=V+(e*5640|0)+424+(g*148|0)+140|0;I=V+(e*5640|0)+424+(g*148|0)+104|0;J=a+(g*232|0)+96|0;K=V+(e*5640|0)+424+(g*148|0)+116|0;L=a+(g*232|0)+100|0;h=V+(e*5640|0)+424+(g*148|0)+144|0;M=V+(e*5640|0)+424+(g*148|0)+112|0;N=a+(g*232|0)+104|0;O=V+(e*5640|0)+424+(g*148|0)+120|0;r=a+(g*232|0)+108|0;s=V+(e*5640|0)+424+(g*148|0)+100|0;q=V+(e*5640|0)+424+(g*148|0)+108|0;k=1;p=i;while(1){o=W+p|0;c:do switch(b[o>>0]|0){case 67:{j=w;l=T;m=(f[T>>2]|0)+-1|0;n=v;U=35;break}case 82:{j=S;l=P;m=(f[P>>2]|0)+-1|0;n=X;U=35;break}case 76:{j=B;l=x;m=(f[x>>2]|0)+-1|0;n=A;U=35;break}case 80:if((f[Y>>2]|0)>>>0<2){j=G;l=C;m=(f[C>>2]|0)+-1|0;n=F;U=35;break c}else{n=f[H>>2]|0;m=f[K>>2]|0;f[J>>2]=n-m-((n>>>0)%(m>>>0)|0);f[L>>2]=n;n=f[h>>2]|0;m=f[O>>2]|0;j=r;l=h;m=n-m-((n>>>0)%(m>>>0)|0)|0;n=N;U=35;break c}default:{}}while(0);if((U|0)==35){U=0;f[n>>2]=m;f[j>>2]=f[l>>2]}d:do if((k|0)==1)switch(b[o>>0]|0){case 82:{k=f[P>>2]|0;if((k|0)!=(f[Q>>2]|0)){f[X>>2]=k;k=k+1|0;f[S>>2]=k;f[P>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[R>>2]|0;f[X>>2]=k;k=k+1|0;f[S>>2]=k;f[P>>2]=k;k=1;break d}case 67:{k=f[T>>2]|0;if((k|0)!=(f[t>>2]|0)){f[v>>2]=k;k=k+1|0;f[w>>2]=k;f[T>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[u>>2]|0;f[v>>2]=k;k=k+1|0;f[w>>2]=k;f[T>>2]=k;k=1;break d}case 76:{k=f[x>>2]|0;if((k|0)!=(f[y>>2]|0)){f[A>>2]=k;k=k+1|0;f[B>>2]=k;f[x>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[z>>2]|0;f[A>>2]=k;k=k+1|0;f[B>>2]=k;f[x>>2]=k;k=1;break d}case 80:{if((f[Y>>2]|0)>>>0<2){k=f[C>>2]|0;if((k|0)!=(f[D>>2]|0)){f[F>>2]=k;k=k+1|0;f[G>>2]=k;f[C>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[E>>2]|0;f[F>>2]=k;k=k+1|0;f[G>>2]=k;f[C>>2]=k;k=1;break d}k=f[H>>2]|0;if(k>>>0<(f[I>>2]|0)>>>0){f[J>>2]=k;i=f[K>>2]|0;k=i+k-((k>>>0)%(i>>>0)|0)|0;f[L>>2]=k;f[H>>2]=k;k=0;break d}j=f[h>>2]|0;if(j>>>0<(f[M>>2]|0)>>>0){f[N>>2]=j;i=f[O>>2]|0;k=0;l=i+j|0;j=(j>>>0)%(i>>>0)|0}else{if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}i=f[q>>2]|0;f[h>>2]=i;f[N>>2]=i;j=f[O>>2]|0;k=1;l=j+i|0;j=(i>>>0)%(j>>>0)|0}V=l-j|0;f[r>>2]=V;f[h>>2]=V;V=f[s>>2]|0;f[J>>2]=V;i=f[K>>2]|0;i=i+V-((V>>>0)%(i>>>0)|0)|0;f[L>>2]=i;f[H>>2]=i;break d}default:{k=1;break d}}while(0);if((p|0)>0)p=p+-1|0;else break}return}while(0);f[X>>2]=f[V+(e*5640|0)+424+(g*148|0)+72>>2];f[a+(g*232|0)+56>>2]=f[V+(e*5640|0)+424+(g*148|0)+88>>2];f[a+(g*232|0)+48>>2]=f[V+(e*5640|0)+424+(g*148|0)+76>>2];f[a+(g*232|0)+60>>2]=f[V+(e*5640|0)+424+(g*148|0)+92>>2];f[a+(g*232|0)+64>>2]=f[V+(e*5640|0)+424+(g*148|0)+68>>2];f[a+(g*232|0)+52>>2]=f[V+(e*5640|0)+424+(g*148|0)+84>>2];f[a+(g*232|0)+68>>2]=f[V+(e*5640|0)+424+(g*148|0)+80>>2];f[a+(g*232|0)+72>>2]=f[V+(e*5640|0)+424+(g*148|0)+96>>2];f[a+(g*232|0)+96>>2]=f[V+(e*5640|0)+424+(g*148|0)+100>>2];f[a+(g*232|0)+104>>2]=f[V+(e*5640|0)+424+(g*148|0)+108>>2];f[a+(g*232|0)+100>>2]=f[V+(e*5640|0)+424+(g*148|0)+104>>2];f[a+(g*232|0)+108>>2]=f[V+(e*5640|0)+424+(g*148|0)+112>>2];return}function If(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0;i=f[c+76>>2]|0;if((a|0)>-1)h=a;else{j=0;j=j&1;return j|0}a:while(1){switch(b[g+h>>0]|0){case 82:{j=3;break a}case 67:{j=5;break a}case 76:{j=7;break a}case 80:{j=9;break a}default:{}}h=h+-1|0}if((j|0)==3){if((f[i+(d*5640|0)+424+(e*148|0)+128>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+88>>2]|0)){j=1;j=j&1;return j|0}j=(If(a+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}else if((j|0)==5){if((f[i+(d*5640|0)+424+(e*148|0)+132>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+92>>2]|0)){j=1;j=j&1;return j|0}j=(If(a+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}else if((j|0)==7){if((f[i+(d*5640|0)+424+(e*148|0)+124>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+84>>2]|0)){j=1;j=j&1;return j|0}j=(If(a+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}else if((j|0)==9){if((f[i+(d*5640|0)+424+(e*148|0)+36>>2]|0)>>>0<2){if((f[i+(d*5640|0)+424+(e*148|0)+136>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+96>>2]|0)){j=1;j=j&1;return j|0}j=(If(h+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}if((f[i+(d*5640|0)+424+(e*148|0)+140>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+104>>2]|0)){j=1;j=j&1;return j|0}if((f[i+(d*5640|0)+424+(e*148|0)+144>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+112>>2]|0)){j=1;j=j&1;return j|0}j=(If(h+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}return 0}function Jf(a,c,d){a=a|0;c=c|0;d=d|0;var e=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,A=0,B=0,C=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;E=f[c+76>>2]|0;F=f[c+24>>2]|0;J=(d>>>0)%(F>>>0)|0;F=(d>>>0)/(F>>>0)|0;G=f[c+4>>2]|0;B=f[c+12>>2]|0;A=(X(B,J)|0)+G|0;H=f[a>>2]|0;H=(A|0)>(H|0)?A:H;G=(X(B,J+1|0)|0)+G|0;J=f[a+8>>2]|0;J=(G|0)<(J|0)?G:J;G=f[c+8>>2]|0;B=f[c+16>>2]|0;A=(X(B,F)|0)+G|0;D=f[a+4>>2]|0;D=(A|0)>(D|0)?A:D;G=(X(B,F+1|0)|0)+G|0;F=f[a+12>>2]|0;F=(G|0)<(F|0)?G:F;G=f[a+16>>2]|0;if(!G){l=0;k=2147483647;j=2147483647;e=0}else{y=H+-1|0;z=D+-1|0;A=J+-1|0;B=F+-1|0;k=2147483647;x=f[E+(d*5640|0)+5584>>2]|0;v=f[a+24>>2]|0;w=0;j=2147483647;l=0;e=0;while(1){s=f[v>>2]|0;c=(y+s|0)/(s|0)|0;t=f[v+4>>2]|0;a=(z+t|0)/(t|0)|0;g=(A+s|0)/(s|0)|0;h=(B+t|0)/(t|0)|0;u=f[x+4>>2]|0;if(u>>>0<=l>>>0){if(u)C=5}else{l=u;C=5}if((C|0)==5){C=0;q=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;r=I;o=Zi(a|0,((a|0)<0)<<31>>31|0,-1,-1)|0;p=I;m=Zi(g|0,((g|0)<0)<<31>>31|0,-1,-1)|0;n=I;h=Zi(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;i=I;L=f[x+812>>2]|0;g=f[x+944>>2]|0;K=u+-1|0;N=s< >>0 >>0?j:N;k=k>>>0 >>0?k:c;c=fj(1,0,K|0)|0;N=I;M=Zi(q|0,r|0,c|0,N|0)|0;M=dj(M|0,I|0,K|0)|0;a=Zi(o|0,p|0,c|0,N|0)|0;a=dj(a|0,I|0,K|0)|0;O=Zi(m|0,n|0,c|0,N|0)|0;O=dj(O|0,I|0,K|0)|0;N=Zi(h|0,i|0,c|0,N|0)|0;K=dj(N|0,I|0,K|0)|0;N=fj(1,0,L|0)|0;N=Zi(N|0,I|0,-1,-1)|0;N=Zi(N|0,I|0,O|0,((O|0)<0)<<31>>31|0)|0;N=dj(N|0,I|0,L|0)|0;c=fj(1,0,g|0)|0;c=Zi(c|0,I|0,-1,-1)|0;c=Zi(c|0,I|0,K|0,((K|0)<0)<<31>>31|0)|0;c=dj(c|0,I|0,g|0)|0;g=X((M|0)==(O|0)?0:(N< >L< >L,(a|0)==(K|0)?0:(c< >g< >g)|0;e=g>>>0>e>>>0?g:e;if(u>>>0>1){a=-1;g=1;while(1){L=f[x+812+(g<<2)>>2]|0;c=f[x+944+(g<<2)>>2]|0;M=a+-1+u|0;a=s< >>0>>0?j:a;k=k>>>0 >>0?k:N;N=fj(1,0,M|0)|0;a=I;K=Zi(q|0,r|0,N|0,a|0)|0;K=dj(K|0,I|0,M|0)|0;O=Zi(o|0,p|0,N|0,a|0)|0;O=dj(O|0,I|0,M|0)|0;P=Zi(m|0,n|0,N|0,a|0)|0;P=dj(P|0,I|0,M|0)|0;a=Zi(h|0,i|0,N|0,a|0)|0;M=dj(a|0,I|0,M|0)|0;a=fj(1,0,L|0)|0;a=Zi(a|0,I|0,-1,-1)|0;a=Zi(a|0,I|0,P|0,((P|0)<0)<<31>>31|0)|0;a=dj(a|0,I|0,L|0)|0;N=fj(1,0,c|0)|0;N=Zi(N|0,I|0,-1,-1)|0;N=Zi(N|0,I|0,M|0,((M|0)<0)<<31>>31|0)|0;N=dj(N|0,I|0,c|0)|0;c=X((K|0)==(P|0)?0:(a< >L< >L,(O|0)==(M|0)?0:(N< >c< >c)|0;e=c>>>0>e>>>0?c:e;c=g+1|0;if(c>>>0>>0){a=~g;g=c}else break}}}w=w+1|0;if(w>>>0>=G>>>0)break;else{x=x+1080|0;v=v+52|0}}}if(b[E+(d*5640|0)+5636>>0]&4){Gf(E,d,H,J,D,F,e,j,k);return}g=(f[E+(d*5640|0)+420>>2]|0)+1|0;if(!g)return;h=f[E+(d*5640|0)+8>>2]|0;i=f[E+(d*5640|0)+4>>2]|0;a=0;c=E+(d*5640|0)+424|0;while(1){f[c+76>>2]=0;f[c+92>>2]=G;f[c+72>>2]=0;f[c+88>>2]=l;f[c+68>>2]=0;f[c+84>>2]=h;f[c+36>>2]=i;f[c+80>>2]=0;f[c+96>>2]=e;f[c+100>>2]=H;f[c+104>>2]=J;f[c+108>>2]=D;f[c+112>>2]=F;f[c+116>>2]=j;f[c+120>>2]=k;a=a+1|0;if((a|0)==(g|0))break;else c=c+148|0}return}function Kf(a){a=a|0;var c=0,e=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,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,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;switch(f[a+80>>2]|0){case 0:{c=a+40|0;if(!(f[c>>2]|0)){E=a+32|0;l=E;E=f[E>>2]|0;e=18}else{f[c>>2]=0;v=f[a+64>>2]|0;f[a+36>>2]=v;e=5}while(1){if((e|0)==5){if(v>>>0>=(f[a+52>>2]|0)>>>0){nb=0;e=153;break}z=f[a+44>>2]|0;f[a+28>>2]=z;e=7}else if((e|0)==18){j=E+1|0;f[l>>2]=j;h=l;e=14}while(1){if((e|0)==7){e=0;if(z>>>0>=(f[a+56>>2]|0)>>>0){e=21;break}A=f[a+48>>2]|0;p=a+24|0;f[p>>2]=A}else if((e|0)==14){if(j>>>0<(f[a+72>>2]|0)>>>0){e=16;break}F=a+24|0;n=F;F=f[F>>2]|0;e=19}while(1){if((e|0)==19){e=0;A=F+1|0;f[n>>2]=A;p=n}if(A>>>0>=(f[a+60>>2]|0)>>>0){e=20;break}B=f[a+196>>2]|0;C=f[a+28>>2]|0;if(C>>>0<(f[B+(A<<4)+8>>2]|0)>>>0)break;else{n=p;F=A;e=19}}if((e|0)==20){e=a+28|0;z=(f[e>>2]|0)+1|0;f[e>>2]=z;e=7;continue}c=f[B+(A<<4)+12>>2]|0;if(!(b[a>>0]|0)){mb=X(f[c+(C<<4)+12>>2]|0,f[c+(C<<4)+8>>2]|0)|0;f[a+72>>2]=mb}j=f[a+68>>2]|0;h=a+32|0;f[h>>2]=j;e=14}if((e|0)==16){e=0;D=X(f[a+8>>2]|0,f[a+36>>2]|0)|0;D=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+D|0;D=D+(X(f[a+16>>2]|0,f[a+24>>2]|0)|0)|0;D=D+(X(f[a+20>>2]|0,j)|0)|0;D=(f[a+4>>2]|0)+(D<<1)|0;if(!(d[D>>1]|0))break;else{l=h;E=j;e=18;continue}}else if((e|0)==21){e=a+36|0;v=(f[e>>2]|0)+1|0;f[e>>2]=v;e=5;continue}}if((e|0)==153)return nb|0;d[D>>1]=1;a=1;return a|0}case 1:{c=a+40|0;if(!(f[c>>2]|0)){x=a+32|0;k=x;x=f[x>>2]|0;e=38}else{f[c>>2]=0;G=f[a+44>>2]|0;f[a+28>>2]=G;e=25}while(1){if((e|0)==25){if(G>>>0>=(f[a+56>>2]|0)>>>0){nb=0;e=153;break}r=f[a+64>>2]|0;f[a+36>>2]=r;e=27}else if((e|0)==38){i=x+1|0;f[k>>2]=i;g=k;e=34}while(1){if((e|0)==27){e=0;if(r>>>0>=(f[a+52>>2]|0)>>>0){e=41;break}s=f[a+48>>2]|0;o=a+24|0;f[o>>2]=s}else if((e|0)==34){if(i>>>0<(f[a+72>>2]|0)>>>0){e=36;break}y=a+24|0;m=y;y=f[y>>2]|0;e=39}while(1){if((e|0)==39){e=0;s=y+1|0;f[m>>2]=s;o=m}if(s>>>0>=(f[a+60>>2]|0)>>>0){e=40;break}t=f[a+196>>2]|0;u=f[a+28>>2]|0;if(u>>>0<(f[t+(s<<4)+8>>2]|0)>>>0)break;else{m=o;y=s;e=39}}if((e|0)==40){e=a+36|0;r=(f[e>>2]|0)+1|0;f[e>>2]=r;e=27;continue}c=f[t+(s<<4)+12>>2]|0;if(!(b[a>>0]|0)){mb=X(f[c+(u<<4)+12>>2]|0,f[c+(u<<4)+8>>2]|0)|0;f[a+72>>2]=mb}i=f[a+68>>2]|0;g=a+32|0;f[g>>2]=i;e=34}if((e|0)==36){e=0;w=X(f[a+8>>2]|0,f[a+36>>2]|0)|0;w=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+w|0;w=w+(X(f[a+16>>2]|0,f[a+24>>2]|0)|0)|0;w=w+(X(f[a+20>>2]|0,i)|0)|0;w=(f[a+4>>2]|0)+(w<<1)|0;if(!(d[w>>1]|0))break;else{k=g;x=i;e=38;continue}}else if((e|0)==41){e=a+28|0;G=(f[e>>2]|0)+1|0;f[e>>2]=G;e=25;continue}}if((e|0)==153)return nb|0;d[w>>1]=1;a=1;return a|0}case 2:{c=a+40|0;if(!(f[c>>2]|0)){lb=a+36|0;Ta=lb;lb=f[lb>>2]|0;e=75}else{f[c>>2]=0;p=a+224|0;f[p>>2]=0;q=a+228|0;f[q>>2]=0;r=f[a+192>>2]|0;if(r|0){s=f[a+196>>2]|0;o=0;e=0;c=0;do{j=f[s+(o<<4)+8>>2]|0;if(j){k=f[s+(o<<4)+12>>2]|0;l=f[s+(o<<4)>>2]|0;m=f[s+(o<<4)+4>>2]|0;n=j+-1|0;Ra=l<<(f[k>>2]|0)+n;Sa=m<<(f[k+4>>2]|0)+n;e=(e|0)==0?Ra:e>>>0 >>0?e:Ra;c=(c|0)==0?Sa:c>>>0 >>0?c:Sa;if((j|0)!=1){h=-1;i=1;while(1){g=n+h|0;Sa=l< >2]|0);g=m<<(f[k+(i<<4)+4>>2]|0)+g;e=(e|0)==0?Sa:e>>>0 >>0?e:Sa;c=(c|0)==0?g:c>>>0 >>0?c:g;g=i+1|0;if(g>>>0 >>0){h=~i;i=g}else break}}f[p>>2]=e;f[q>>2]=c}o=o+1|0}while((o|0)!=(r|0))}if(!(b[a>>0]|0)){f[a+104>>2]=f[a+204>>2];f[a+96>>2]=f[a+200>>2];f[a+108>>2]=f[a+212>>2];f[a+100>>2]=f[a+208>>2]}J=f[a+44>>2]|0;f[a+28>>2]=J;e=54}while(1){if((e|0)==54){if(J>>>0>=(f[a+56>>2]|0)>>>0){nb=0;e=153;break}Xa=f[a+104>>2]|0;f[a+220>>2]=Xa;e=56}else if((e|0)==75){jb=lb+1|0;f[Ta>>2]=jb;Ua=Ta;e=71}while(1){if((e|0)==56){if((Xa|0)>=(f[a+108>>2]|0)){e=79;break}Ya=f[a+96>>2]|0;f[a+216>>2]=Ya;e=58}else if((e|0)==71){if(jb>>>0<(f[a+52>>2]|0)>>>0){e=73;break}mb=a+24|0;Va=mb;mb=f[mb>>2]|0;e=76}while(1){if((e|0)==58){if((Ya|0)>=(f[a+100>>2]|0)){e=78;break}Za=f[a+48>>2]|0;Wa=a+24|0;f[Wa>>2]=Za}else if((e|0)==76){Za=mb+1|0;f[Va>>2]=Za;Wa=Va}if(Za>>>0>=(f[a+60>>2]|0)>>>0){Ya=f[a+224>>2]|0;e=a+216|0;Sa=f[e>>2]|0;Ya=Sa+Ya-((Sa|0)%(Ya|0)|0)|0;f[e>>2]=Ya;e=58;continue}e=f[a+196>>2]|0;m=f[a+28>>2]|0;c=f[e+(Za<<4)+8>>2]|0;if(m>>>0>=c>>>0){Va=Wa;mb=Za;e=76;continue}n=f[e+(Za<<4)+12>>2]|0;i=c+~m|0;j=f[a+200>>2]|0;k=f[e+(Za<<4)>>2]|0;_a=k<>2]|0;Sa=f[e+(Za<<4)+4>>2]|0;ab=Sa<>2]|0)|0)/(_a|0)|0;db=ab+-1|0;e=(db+(f[a+212>>2]|0)|0)/(ab|0)|0;eb=f[n+(m<<4)>>2]|0;g=eb+i|0;fb=f[n+(m<<4)+4>>2]|0;h=fb+i|0;gb=f[a+220>>2]|0;if((gb|0)%(Sa< >2]|0;if((hb|0)%(k< >2]|0;if(!ib){Va=Wa;mb=Za;e=76;continue}if((bb|0)==(e|0)|(($a|0)==(c|0)?1:(f[n+(m<<4)+12>>2]|0)==0)){Va=Wa;mb=Za;e=76}else{e=70;break}}if((e|0)==70){jb=(((cb+hb|0)/(_a|0)|0)>>eb)-($a>>eb)+(X((((db+gb|0)/(ab|0)|0)>>fb)-(bb>>fb)|0,ib)|0)|0;f[a+32>>2]=jb;jb=f[a+64>>2]|0;Ua=a+36|0;f[Ua>>2]=jb;e=71;continue}else if((e|0)==78){Xa=f[a+228>>2]|0;e=a+220|0;Sa=f[e>>2]|0;Xa=Sa+Xa-((Sa|0)%(Xa|0)|0)|0;f[e>>2]=Xa;e=56;continue}}if((e|0)==73){e=0;kb=X(f[a+8>>2]|0,jb)|0;kb=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+kb|0;kb=kb+(X(f[a+16>>2]|0,f[a+24>>2]|0)|0)|0;kb=kb+(X(f[a+20>>2]|0,f[a+32>>2]|0)|0)|0;kb=(f[a+4>>2]|0)+(kb<<1)|0;if(!(d[kb>>1]|0))break;else{Ta=Ua;lb=jb;e=75;continue}}else if((e|0)==79){e=a+28|0;J=(f[e>>2]|0)+1|0;f[e>>2]=J;e=54;continue}}if((e|0)==153)return nb|0;d[kb>>1]=1;a=1;return a|0}case 3:{e=a+40|0;if(!(f[e>>2]|0)){Ra=f[a+24>>2]|0;Oa=a+36|0;ra=(f[a+196>>2]|0)+(Ra<<4)|0;ta=Oa;Oa=f[Oa>>2]|0;e=113}else{f[e>>2]=0;p=a+224|0;f[p>>2]=0;q=a+228|0;f[q>>2]=0;r=f[a+192>>2]|0;if(r|0){s=f[a+196>>2]|0;o=0;e=0;c=0;do{j=f[s+(o<<4)+8>>2]|0;if(j){k=f[s+(o<<4)+12>>2]|0;l=f[s+(o<<4)>>2]|0;m=f[s+(o<<4)+4>>2]|0;n=j+-1|0;lb=l<<(f[k>>2]|0)+n;mb=m<<(f[k+4>>2]|0)+n;e=(e|0)==0?lb:e>>>0 >>0?e:lb;c=(c|0)==0?mb:c>>>0
>>0?c:mb;if((j|0)!=1){h=-1;i=1;while(1){g=n+h|0;mb=l< >2]|0);g=m<<(f[k+(i<<4)+4>>2]|0)+g;e=(e|0)==0?mb:e>>>0 >>0?e:mb;c=(c|0)==0?g:c>>>0 >>0?c:g;g=i+1|0;if(g>>>0 >>0){h=~i;i=g}else break}}f[p>>2]=e;f[q>>2]=c}o=o+1|0}while((o|0)!=(r|0))}if(!(b[a>>0]|0)){c=f[a+204>>2]|0;f[a+104>>2]=c;f[a+96>>2]=f[a+200>>2];f[a+108>>2]=f[a+212>>2];f[a+100>>2]=f[a+208>>2]}else c=f[a+104>>2]|0;f[a+220>>2]=c;e=93}while(1){if((e|0)==93){if((c|0)>=(f[a+108>>2]|0)){nb=0;e=153;break}xa=f[a+96>>2]|0;f[a+216>>2]=xa;e=95}else if((e|0)==113){La=Oa+1|0;f[ta>>2]=La;qa=ra;ua=ta;Ma=Ra;e=109}while(1){if((e|0)==95){if((xa|0)>=(f[a+100>>2]|0)){e=117;break}ya=f[a+48>>2]|0;f[a+24>>2]=ya;e=97}else if((e|0)==109){if(La>>>0<(f[a+52>>2]|0)>>>0){e=111;break}Pa=a+28|0;sa=qa;va=Pa;Pa=f[Pa>>2]|0;Sa=Ma;e=114}while(1){if((e|0)==97){if(ya>>>0>=(f[a+60>>2]|0)>>>0){e=116;break}pa=(f[a+196>>2]|0)+(ya<<4)|0;za=f[a+44>>2]|0;wa=a+28|0;f[wa>>2]=za;Qa=ya}else if((e|0)==114){za=Pa+1|0;f[va>>2]=za;pa=sa;wa=va;Qa=Sa}mb=f[a+56>>2]|0;e=f[pa+8>>2]|0;if(za>>>0>=(mb>>>0 >>0?mb:e)>>>0){ya=Qa+1|0;f[a+24>>2]=ya;e=97;continue}n=f[pa+12>>2]|0;e=e+~za|0;g=f[a+200>>2]|0;h=f[pa>>2]|0;Aa=h< >2]|0;mb=f[pa+4>>2]|0;Ca=mb< >2]|0)|0)/(Aa|0)|0;Fa=Ca+-1|0;k=(Fa+(f[a+212>>2]|0)|0)/(Ca|0)|0;Ga=f[n+(za<<4)>>2]|0;l=Ga+e|0;Ha=f[n+(za<<4)+4>>2]|0;m=Ha+e|0;Ia=f[a+220>>2]|0;if((Ia|0)%(mb< >2]|0;if((Ja|0)%(h< >2]|0;if(!Ka){sa=pa;va=wa;Pa=za;Sa=Qa;e=114;continue}if((Da|0)==(k|0)|((Ba|0)==(j|0)?1:(f[n+(za<<4)+12>>2]|0)==0)){sa=pa;va=wa;Pa=za;Sa=Qa;e=114}else{e=108;break}}if((e|0)==108){La=(((Ea+Ja|0)/(Aa|0)|0)>>Ga)-(Ba>>Ga)+(X((((Fa+Ia|0)/(Ca|0)|0)>>Ha)-(Da>>Ha)|0,Ka)|0)|0;f[a+32>>2]=La;La=f[a+64>>2]|0;ua=a+36|0;f[ua>>2]=La;qa=pa;Ma=Qa;e=109;continue}else if((e|0)==116){xa=f[a+224>>2]|0;e=a+216|0;mb=f[e>>2]|0;xa=mb+xa-((mb|0)%(xa|0)|0)|0;f[e>>2]=xa;e=95;continue}}if((e|0)==111){e=0;Na=X(f[a+8>>2]|0,La)|0;Na=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+Na|0;Na=Na+(X(f[a+16>>2]|0,Ma)|0)|0;Na=Na+(X(f[a+20>>2]|0,f[a+32>>2]|0)|0)|0;Na=(f[a+4>>2]|0)+(Na<<1)|0;if(!(d[Na>>1]|0))break;else{ra=qa;ta=ua;Oa=La;Ra=Ma;e=113;continue}}else if((e|0)==117){c=f[a+228>>2]|0;e=a+220|0;mb=f[e>>2]|0;c=mb+c-((mb|0)%(c|0)|0)|0;f[e>>2]=c;e=93;continue}}if((e|0)==153)return nb|0;d[Na>>1]=1;a=1;return a|0}case 4:{c=a+40|0;if(!(f[c>>2]|0)){la=f[a+24>>2]|0;ja=a+36|0;N=(f[a+196>>2]|0)+(la<<4)|0;P=ja;ja=f[ja>>2]|0;e=148}else{f[c>>2]=0;T=f[a+48>>2]|0;f[a+24>>2]=T;e=121}while(1){if((e|0)==121){if(T>>>0>=(f[a+60>>2]|0)>>>0){nb=0;e=153;break}c=f[a+196>>2]|0;q=c+(T<<4)|0;o=a+224|0;f[o>>2]=0;p=a+228|0;f[p>>2]=0;l=f[c+(T<<4)+8>>2]|0;if(l|0){m=f[c+(T<<4)+12>>2]|0;n=f[q>>2]|0;j=f[c+(T<<4)+4>>2]|0;k=l+-1|0;e=n<<(f[m>>2]|0)+k;c=j<<(f[m+4>>2]|0)+k;if((l|0)!=1){h=-1;i=1;while(1){g=k+h|0;mb=n< >2]|0);g=j<<(f[m+(i<<4)+4>>2]|0)+g;e=(e|0)==0?mb:e>>>0 >>0?e:mb;c=(c|0)==0?g:c>>>0 >>0?c:g;g=i+1|0;if(g>>>0 >>0){h=~i;i=g}else break}}f[o>>2]=e;f[p>>2]=c}if(!(b[a>>0]|0)){c=f[a+204>>2]|0;f[a+104>>2]=c;f[a+96>>2]=f[a+200>>2];f[a+108>>2]=f[a+212>>2];f[a+100>>2]=f[a+208>>2]}else c=f[a+104>>2]|0;f[a+220>>2]=c;H=c;I=T;e=130}else if((e|0)==148){ga=ja+1|0;f[P>>2]=ga;M=N;Q=P;ha=la;e=144}while(1){if((e|0)==130){if((H|0)>=(f[a+108>>2]|0)){e=152;break}U=f[a+96>>2]|0;f[a+216>>2]=U;K=q;ma=I;e=132}else if((e|0)==144){if(ga>>>0<(f[a+52>>2]|0)>>>0){e=146;break}ka=a+28|0;O=M;R=ka;ka=f[ka>>2]|0;oa=ha;e=149}while(1){if((e|0)==132){if((U|0)>=(f[a+100>>2]|0)){e=151;break}V=f[a+44>>2]|0;S=a+28|0;f[S>>2]=V;L=K;na=ma}else if((e|0)==149){V=ka+1|0;f[R>>2]=V;L=O;S=R;na=oa}mb=f[a+56>>2]|0;c=f[L+8>>2]|0;if(V>>>0>=(mb>>>0 >>0?mb:c)>>>0){U=f[a+224>>2]|0;K=a+216|0;ma=f[K>>2]|0;U=ma+U-((ma|0)%(U|0)|0)|0;f[K>>2]=U;K=L;ma=na;e=132;continue}m=f[L+12>>2]|0;c=c+~V|0;e=f[a+200>>2]|0;g=f[L>>2]|0;W=g< >2]|0;mb=f[L+4>>2]|0;Z=mb< >2]|0)|0)/(W|0)|0;aa=Z+-1|0;j=(aa+(f[a+212>>2]|0)|0)/(Z|0)|0;ba=f[m+(V<<4)>>2]|0;k=ba+c|0;ca=f[m+(V<<4)+4>>2]|0;l=ca+c|0;da=f[a+220>>2]|0;if((da|0)%(mb< >2]|0;if((ea|0)%(g< >2]|0;if(!fa){O=L;R=S;ka=V;oa=na;e=149;continue}if((_|0)==(j|0)|((Y|0)==(i|0)?1:(f[m+(V<<4)+12>>2]|0)==0)){O=L;R=S;ka=V;oa=na;e=149}else{e=143;break}}if((e|0)==143){ga=((($+ea|0)/(W|0)|0)>>ba)-(Y>>ba)+(X((((aa+da|0)/(Z|0)|0)>>ca)-(_>>ca)|0,fa)|0)|0;f[a+32>>2]=ga;ga=f[a+64>>2]|0;Q=a+36|0;f[Q>>2]=ga;M=L;ha=na;e=144;continue}else if((e|0)==151){H=f[a+228>>2]|0;q=a+220|0;I=f[q>>2]|0;H=I+H-((I|0)%(H|0)|0)|0;f[q>>2]=H;q=K;I=ma;e=130;continue}}if((e|0)==146){e=0;ia=X(f[a+8>>2]|0,ga)|0;ia=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+ia|0;ia=ia+(X(f[a+16>>2]|0,ha)|0)|0;ia=ia+(X(f[a+20>>2]|0,f[a+32>>2]|0)|0)|0;ia=(f[a+4>>2]|0)+(ia<<1)|0;if(!(d[ia>>1]|0))break;else{N=M;P=Q;ja=ga;la=ha;e=148;continue}}else if((e|0)==152){T=I+1|0;f[a+24>>2]=T;e=121;continue}}if((e|0)==153)return nb|0;d[ia>>1]=1;a=1;return a|0}default:{a=0;return a|0}}return 0}function Lf(a){a=a|0;var c=0,d=0;c=Ic(1,44)|0;if(!c){c=0;return c|0}d=c+40|0;b[d>>0]=b[d>>0]&-2|(a|0)!=0;a=Ic(1,4)|0;f[c+20>>2]=a;if(a|0){d=c;return d|0}Mc(c);d=0;return d|0}function Mf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0.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,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;O=u;u=u+1200|0;M=O;d=f[f[a+20>>2]>>2]|0;N=d+16|0;e=f[N>>2]|0;if(!e){u=O;return}J=d+20|0;K=(f[a+32>>2]|0)+8|0;L=(f[a+28>>2]|0)+88|0;H=a+24|0;I=(b|0)==0;F=(c|0)==0;G=b+-1|0;E=0;d=e;do{i=f[J>>2]|0;j=f[K>>2]|0;C=i+(E*52|0)+16|0;k=f[C>>2]|0;if(j){if(k){e=f[L>>2]|0;g=+((f[(f[(f[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)>>>0)*.0625;a=0;do{h=X(k,a)|0;c=0;do{D=(h+c|0)*3|0;f[M+(a*120|0)+(c*12|0)>>2]=~~(+(f[e+(D<<2)>>2]|0)*g);f[M+(a*120|0)+(c*12|0)+4>>2]=~~(+(f[e+(D+1<<2)>>2]|0)*g);f[M+(a*120|0)+(c*12|0)+8>>2]=~~(+(f[e+(D+2<<2)>>2]|0)*g);c=c+1|0}while(c>>>0 >>0);a=a+1|0}while(a>>>0 >>0);D=9}}else D=9;if((D|0)==9){D=0;if(k){B=i+(E*52|0)+24|0;A=0;d=k;do{y=f[B>>2]|0;z=y+(A*136|0)+24|0;a=f[z>>2]|0;if(a){w=y+(A*136|0)+16|0;x=y+(A*136|0)+20|0;v=0;c=f[x>>2]|0;d=f[w>>2]|0;do{if(X(c,d)|0){r=y+(A*136|0)+28+(v*36|0)+20|0;s=M+(b*120|0)+(A*12|0)+(v<<2)|0;t=M+(G*120|0)+(A*12|0)+(v<<2)|0;q=0;do{d=f[r>>2]|0;p=X(f[d+(q*40|0)+20>>2]|0,f[d+(q*40|0)+16>>2]|0)|0;a:do if(p|0){o=d+(q*40|0)+24|0;i=f[s>>2]|0;if(I){d=0;while(1){c=f[o>>2]|0;e=f[c+(d*52|0)+4>>2]|0;a=(f[(f[(f[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)-(f[c+(d*52|0)+28>>2]|0)|0;a=(i|0)>(a|0)?i-a|0:0;h=c+(d*52|0)+44|0;f[h>>2]=0;a=(a|0)==0?0:(a*3|0)+-2|0;f[e>>2]=a;if(a|0?(n=f[c+(d*52|0)>>2]|0,f[e+4>>2]=f[(f[c+(d*52|0)+8>>2]|0)+((a+-1|0)*24|0)>>2],f[e+16>>2]=n,!F):0)f[h>>2]=a;d=d+1|0;if(d>>>0>=p>>>0)break a}}n=f[t>>2]|0;m=i-n|0;j=0;do{a=f[o>>2]|0;c=a+(j*52|0)|0;k=f[a+(j*52|0)+4>>2]|0;l=(f[(f[(f[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)-(f[a+(j*52|0)+28>>2]|0)|0;d=m+(n-l)|0;d=(n|0)>(l|0)?m:(d|0)>0?d:0;l=a+(j*52|0)+44|0;e=f[l>>2]|0;h=(e|0)==0;if(h)i=(d|0)==0?0:(d*3|0)+-2|0;else i=(d*3|0)+e|0;d=i-e|0;f[k+(b*24|0)>>2]=d;do if(d|0){a=f[a+(j*52|0)+8>>2]|0;d=f[a+((i+-1|0)*24|0)>>2]|0;if(h)a=f[c>>2]|0;else{h=f[a+((e+-1|0)*24|0)>>2]|0;a=(f[c>>2]|0)+h|0;d=d-h|0}f[k+(b*24|0)+4>>2]=d;f[k+(b*24|0)+16>>2]=a;if(F)break;f[l>>2]=i}while(0);j=j+1|0}while(j>>>0 >>0)}while(0);q=q+1|0;d=f[w>>2]|0;c=f[x>>2]|0}while(q>>>0<(X(c,d)|0)>>>0);a=f[z>>2]|0}v=v+1|0}while(v>>>0>>0);d=f[C>>2]|0}A=A+1|0}while(A>>>0
>>0);d=f[N>>2]|0}}E=E+1|0}while(E>>>0 >>0);u=O;return}function Nf(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=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;a=f[f[a+20>>2]>>2]|0;G=a+40+(b<<3)|0;p[G>>3]=0.0;H=a+16|0;e=f[H>>2]|0;if(!e)return;E=a+20|0;F=(b|0)==0;D=(d|0)==0;C=0;a=e;do{d=f[E>>2]|0;B=d+(C*52|0)+16|0;e=f[B>>2]|0;if(e){A=d+(C*52|0)+24|0;z=0;a=e;do{x=f[A>>2]|0;y=x+(z*136|0)+24|0;d=f[y>>2]|0;if(d){v=x+(z*136|0)+16|0;w=x+(z*136|0)+20|0;u=0;e=f[w>>2]|0;a=f[v>>2]|0;do{if(X(e,a)|0){t=x+(z*136|0)+28+(u*36|0)+20|0;s=0;do{d=f[t>>2]|0;r=X(f[d+(s*40|0)+20>>2]|0,f[d+(s*40|0)+16>>2]|0)|0;if(r){n=d+(s*40|0)+24|0;m=0;do{j=f[n>>2]|0;k=j+(m*52|0)|0;o=f[j+(m*52|0)+4>>2]|0;q=j+(m*52|0)+44|0;if(F){f[q>>2]=0;l=0}else l=f[q>>2]|0;h=f[j+(m*52|0)+48>>2]|0;if(l>>>0 >>0){i=f[j+(m*52|0)+8>>2]|0;a=l;e=l;do{d=f[i+(e*24|0)>>2]|0;if(!a)g=+p[i+(e*24|0)+8>>3];else{I=a+-1|0;g=+p[i+(e*24|0)+8>>3]-+p[i+(I*24|0)+8>>3];d=d-(f[i+(I*24|0)>>2]|0)|0}if(!d)d=g!=0.0;else d=c-g/+(d>>>0)<2.220446049250313e-16;e=e+1|0;a=d?e:a}while(e>>>0 >>0);h=a}else h=l;I=h-l|0;f[o+(b*24|0)>>2]=I;if(I){d=f[j+(m*52|0)+8>>2]|0;e=h+-1|0;a=f[d+(e*24|0)>>2]|0;if(!l){f[o+(b*24|0)+16>>2]=f[k>>2];g=+p[d+(e*24|0)+8>>3]}else{l=l+-1|0;I=f[d+(l*24|0)>>2]|0;f[o+(b*24|0)+16>>2]=(f[k>>2]|0)+I;g=+p[d+(e*24|0)+8>>3]-+p[d+(l*24|0)+8>>3];a=a-I|0}f[o+(b*24|0)+4>>2]=a;p[o+(b*24|0)+8>>3]=g;p[G>>3]=g+ +p[G>>3];if(!D)f[q>>2]=h}else p[o+(b*24|0)+8>>3]=0.0;m=m+1|0}while(m>>>0 >>0);e=f[w>>2]|0;a=f[v>>2]|0}s=s+1|0}while(s>>>0<(X(e,a)|0)>>>0);d=f[y>>2]|0}u=u+1|0}while(u>>>0 >>0);a=f[B>>2]|0}z=z+1|0}while(z>>>0>>0);a=f[H>>2]|0}C=C+1|0}while(C>>>0>>0);return}function Of(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0.0,l=0.0,m=0.0,o=0.0,q=0.0,r=0.0,s=0,t=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,Y=0,Z=0,_=0,$=0,aa=0;$=u;u=u+800|0;Y=$;Z=f[a+28>>2]|0;U=f[f[a+20>>2]>>2]|0;V=f[a+32>>2]|0;R=U+24|0;f[R>>2]=0;S=f[U+16>>2]|0;if(!S){J=1797693134862315708145274.0e284;m=0.0;k=0.0;i=0}else{T=a+24|0;Q=f[U+20>>2]|0;P=0;l=1797693134862315708145274.0e284;m=0.0;k=0.0;i=0;do{N=Q+(P*52|0)+48|0;f[N>>2]=0;O=f[Q+(P*52|0)+16>>2]|0;if(!O)j=0;else{L=f[Q+(P*52|0)+24>>2]|0;K=0;j=0;do{G=f[L+(K*136|0)+24>>2]|0;if(G){H=X(f[L+(K*136|0)+20>>2]|0,f[L+(K*136|0)+16>>2]|0)|0;I=(H|0)==0;F=0;do{if(!I){E=f[L+(K*136|0)+28+(F*36|0)+20>>2]|0;D=0;do{B=X(f[E+(D*40|0)+20>>2]|0,f[E+(D*40|0)+16>>2]|0)|0;if(B){C=E+(D*40|0)+24|0;A=0;do{y=f[C>>2]|0;v=f[y+(A*52|0)+48>>2]|0;if(v){w=f[y+(A*52|0)+8>>2]|0;x=w+8|0;t=0;do{s=f[w+(t*24|0)>>2]|0;if(!t)o=+p[x>>3];else{aa=t+-1|0;o=+p[w+(t*24|0)+8>>3]-+p[w+(aa*24|0)+8>>3];s=s-(f[w+(aa*24|0)>>2]|0)|0}if(s){J=o/+(s|0);l=J m?J:m}t=t+1|0}while(t>>>0 >>0)}aa=X((f[y+(A*52|0)+24>>2]|0)-(f[y+(A*52|0)+16>>2]|0)|0,(f[y+(A*52|0)+20>>2]|0)-(f[y+(A*52|0)+12>>2]|0)|0)|0;i=aa+i|0;f[R>>2]=i;j=aa+j|0;f[N>>2]=j;A=A+1|0}while(A>>>0>>0)}D=D+1|0}while(D>>>0 >>0)}F=F+1|0}while(F>>>0 >>0)}K=K+1|0}while(K>>>0 >>0)}J=+(1< >2]|0)+24>>2]|0)+(P*52|0)+24>>2]|0)+-1.0;k=k+J*J*+(j|0);P=P+1|0}while(P>>>0 >>0);J=l}I=(h|0)!=0;if(I){S=f[h+88>>2]|0;T=f[a+36>>2]|0;f[S+(T*592|0)+552>>2]=i;p[S+(T*592|0)+560>>3]=+p[U+32>>3];i=V+8|0;aa=Hc(f[i>>2]<<3)|0;f[S+(T*592|0)>>2]=aa;if(!aa){aa=0;u=$;return aa|0}}else i=V+8|0;if(!(f[i>>2]|0)){aa=1;u=$;return aa|0}A=U+32|0;B=Z+93|0;C=h+88|0;D=a+36|0;E=U+40|0;F=a+24|0;G=a+8|0;H=a+16|0;y=0;while(1){r=+n[V+20+(y<<2)>>2];T=r>0.0;v=~~+W(+r)>>>0;v=T&v>>>0>>0?v:g;r=+n[V+5184+(y<<2)>>2];z=+p[A>>3]-k/+M(10.0,+(r/10.0));aa=b[B>>0]|0;if((aa&1)==0|T^1?!((aa&4)!=0&r>0.0):0)l=J;else{x=Yg(f[F>>2]|0,Z)|0;if(!x){i=0;_=56;break}w=y+1|0;s=Y+(y+-1<<3)|0;t=U+40+(y<<3)|0;if(!y){j=0;l=0.0;q=m;r=J;do{o=(r+q)*.5;Nf(a,0,o,0);do if(!(b[B>>0]&4))if(!(Ug(x,f[D>>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0))r=o;else{l=o;q=o;_=39}else{if(((d[Z>>1]|0)+-3&65535)>=4)if(+p[E>>3] >2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0)if(+p[E>>3] >0]&4))if(!(Ug(x,f[D>>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0))r=o;else{l=o;q=o;_=47}else{if(((d[Z>>1]|0)+-3&65535)>=4)if(+p[s>>3]+ +p[t>>3] >2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0)if(+p[s>>3]+ +p[t>>3] >2]|0)+((f[D>>2]|0)*592|0)>>2]|0)+(y<<3)>>3]=l;Nf(a,y,l,1);if(!y)l=+p[E>>3];else l=+p[Y+(y+-1<<3)>>3]+ +p[U+40+(y<<3)>>3];p[Y+(y<<3)>>3]=l;y=y+1|0;if(y>>>0>=(f[i>>2]|0)>>>0){i=1;_=56;break}}if((_|0)==56){u=$;return i|0}return 0}function Pf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;f[a+24>>2]=b;f[a+28>>2]=c;e=Ic(1,848)|0;d=a+20|0;f[f[d>>2]>>2]=e;if(!e){c=0;return c|0}e=b+16|0;g=Ic(f[e>>2]|0,52)|0;b=f[f[d>>2]>>2]|0;f[b+20>>2]=g;if(!g){g=0;return g|0}f[b+16>>2]=f[e>>2];f[a>>2]=f[c+84>>2];g=1;return g|0}function Qf(a){a=a|0;var c=0,d=0,e=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;if(!a)return;s=a+20|0;c=f[s>>2]|0;do if(c|0){r=(b[a+40>>0]&1)==0?3:4;d=f[c>>2]|0;if(d){o=d+20|0;c=f[o>>2]|0;n=d+16|0;if(f[n>>2]|0){m=0;while(1){l=c+24|0;d=f[l>>2]|0;if(d|0){j=f[c+28>>2]|0;k=(j>>>0)/136|0;if(j>>>0>135){j=0;while(1){i=d+48|0;e=f[i>>2]|0;if(e|0){g=f[d+52>>2]|0;h=(g>>>0)/40|0;if(g>>>0>39){g=0;while(1){t=e+32|0;eg(f[t>>2]|0);f[t>>2]=0;t=e+36|0;eg(f[t>>2]|0);f[t>>2]=0;Sa[r&7](e);g=g+1|0;if(g>>>0>=h>>>0)break;else e=e+40|0}e=f[i>>2]|0}Mc(e);f[i>>2]=0}i=d+84|0;e=f[i>>2]|0;if(e|0){t=f[d+88>>2]|0;h=(t>>>0)/40|0;if(t>>>0>39){g=0;while(1){t=e+32|0;eg(f[t>>2]|0);f[t>>2]=0;t=e+36|0;eg(f[t>>2]|0);f[t>>2]=0;Sa[r&7](e);g=g+1|0;if(g>>>0>=h>>>0)break;else e=e+40|0}e=f[i>>2]|0}Mc(e);f[i>>2]=0}i=d+120|0;e=f[i>>2]|0;if(e|0){t=f[d+124>>2]|0;h=(t>>>0)/40|0;if(t>>>0>39){g=0;while(1){t=e+32|0;eg(f[t>>2]|0);f[t>>2]=0;t=e+36|0;eg(f[t>>2]|0);f[t>>2]=0;Sa[r&7](e);g=g+1|0;if(g>>>0>=h>>>0)break;else e=e+40|0}e=f[i>>2]|0}Mc(e);f[i>>2]=0}j=j+1|0;if(j>>>0>=k>>>0)break;else d=d+136|0}d=f[l>>2]|0}Mc(d);f[l>>2]=0}if(f[c+36>>2]|0?(p=c+32|0,q=f[p>>2]|0,q|0):0){Kc(q);f[p>>2]=0;f[p+4>>2]=0;f[p+8>>2]=0;f[p+12>>2]=0}m=m+1|0;if(m>>>0>=(f[n>>2]|0)>>>0)break;else c=c+52|0}c=f[o>>2]|0}Mc(c);f[o>>2]=0;Mc(f[f[s>>2]>>2]|0);c=f[s>>2]|0;f[c>>2]=0;if(!c)break}Mc(c);f[s>>2]=0}while(0);Mc(a);return}function Rf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;g=a+24|0;b=f[g>>2]|0;if(!b)return;d=f[a+28>>2]|0;e=(d>>>0)/52|0;if(d>>>0>51){d=0;while(1){a=f[b>>2]|0;if(a|0){Mc(a+-1|0);f[b>>2]=0}a=b+4|0;c=f[a>>2]|0;if(c|0){Mc(c);f[a>>2]=0}a=b+8|0;c=f[a>>2]|0;if(c|0){Mc(c);f[a>>2]=0}d=d+1|0;if(d>>>0>=e>>>0)break;else b=b+52|0}b=f[g>>2]|0}Mc(b);f[g>>2]=0;return}function Sf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;g=a+24|0;b=f[g>>2]|0;if(!b)return;d=f[a+28>>2]|0;e=(d>>>0)/56|0;if(d>>>0>55){d=0;while(1){a=f[b>>2]|0;if(a|0){Mc(a);f[b>>2]=0}a=b+4|0;c=f[a>>2]|0;if(c|0){Mc(c);f[a>>2]=0}d=d+1|0;if(d>>>0>=e>>>0)break;else b=b+56|0}b=f[g>>2]|0}Mc(b);f[g>>2]=0;return}function Tf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;d=a+32|0;e=f[d>>2]|0;b=a+40|0;c=f[b>>2]|0;do if(e){g=a+44|0;if(c>>>0<=(f[g>>2]|0)>>>0){h=1;return h|0}if(f[a+36>>2]|0){Kc(e);e=Jc(f[b>>2]|0)|0;f[d>>2]=e;if(e|0){f[g>>2]=f[b>>2];break}f[g>>2]=0;f[b>>2]=0;f[a+36>>2]=0;h=0;return h|0}else h=4}else h=4;while(0);do if((h|0)==4){h=Jc(c)|0;f[d>>2]=h;if(!h){h=0;return h|0}else{f[a+44>>2]=f[b>>2];break}}while(0);f[a+36>>2]=1;h=1;return h|0}function Uf(a,b,c){a=a|0;b=b|0;c=c|0;return Vf(a,b,1,1.0,52,c)|0}function Vf(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=+e;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=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=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,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,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.0;Xa=u;u=u+112|0;Ta=Xa+104|0;Sa=Xa+96|0;Ra=Xa+88|0;Qa=Xa+80|0;Pa=Xa+72|0;Oa=Xa+64|0;Na=Xa+56|0;Ma=Xa+48|0;Wa=Xa+40|0;Va=Xa+32|0;Ua=Xa+24|0;k=f[a+28>>2]|0;Ja=f[f[a+20>>2]>>2]|0;l=f[(f[k+76>>2]|0)+(c*5640|0)+5584>>2]|0;m=f[Ja+20>>2]|0;j=f[a+24>>2]|0;o=f[j+24>>2]|0;i=f[k+24>>2]|0;r=f[k+12>>2]|0;La=(X(r,(c>>>0)%(i>>>0)|0)|0)+(f[k+4>>2]|0)|0;p=f[j>>2]|0;p=La>>>0>p>>>0?La:p;f[Ja>>2]=p;La=Zi(r|0,0,La|0,0)|0;La=0-I|La;r=f[j+8>>2]|0;r=La>>>0 >>0?La:r;La=Ja+8|0;f[La>>2]=r;if(!((p|0)>-1&(r|0)>(p|0))){Mb(h,1,19655,Xa)|0;Wa=0;u=Xa;return Wa|0}q=f[k+16>>2]|0;Fa=(X(q,(c>>>0)/(i>>>0)|0)|0)+(f[k+8>>2]|0)|0;i=f[j+4>>2]|0;i=Fa>>>0>i>>>0?Fa:i;Ia=Ja+4|0;f[Ia>>2]=i;Fa=Zi(q|0,0,Fa|0,0)|0;Fa=0-I|Fa;q=f[j+12>>2]|0;q=Fa>>>0 >>0?Fa:q;Fa=Ja+12|0;f[Fa>>2]=q;if(!((i|0)>-1&(q|0)>(i|0))){Mb(h,1,19693,Xa+8|0)|0;Wa=0;u=Xa;return Wa|0}if(!(f[l+4>>2]|0)){Mb(h,1,19731,Xa+16|0)|0;Wa=0;u=Xa;return Wa|0}Ga=Ja+16|0;if(!(f[Ga>>2]|0)){Wa=1;u=Xa;return Wa|0}Ea=k+80|0;Da=a+40|0;Ca=(d|0)==0;c=0;Ba=m;j=p;k=r;a=q;a:while(1){f[o+36>>2]=0;za=f[o>>2]|0;xa=(j+-1+za|0)/(za|0)|0;f[Ba>>2]=xa;ya=f[o+4>>2]|0;j=(i+-1+ya|0)/(ya|0)|0;Aa=Ba+4|0;f[Aa>>2]=j;k=(k+-1+za|0)/(za|0)|0;za=Ba+8|0;f[za>>2]=k;i=(a+-1+ya|0)/(ya|0)|0;ya=Ba+12|0;f[ya>>2]=i;k=k-xa|0;if(k){i=i-j|0;if((4294967295/(k>>>0)|0)>>>0>>0){Ha=12;break}}else i=i-j|0;i=X(i,k)|0;if(i>>>0>1073741823){Ha=14;break}j=i<<2;i=f[l+4>>2]|0;xa=Ba+16|0;f[xa>>2]=i;k=f[Ea>>2]|0;f[Ba+20>>2]=i>>>0>>0?1:i-k|0;k=Ba+40|0;f[k>>2]=j;do if(b[Da>>0]&1){a=Ba+32|0;d=f[a>>2]|0;if(d){m=Ba+44|0;if(j>>>0<=(f[m>>2]|0)>>>0)break;i=Ba+36|0;if(f[i>>2]|0){Kc(d);wa=Jc(f[k>>2]|0)|0;f[a>>2]=wa;if(!wa){Ha=22;break a}f[m>>2]=f[k>>2]}else Ha=19}else Ha=19;if((Ha|0)==19){Ha=0;wa=Jc(j)|0;f[a>>2]=wa;if(!wa)break a;f[Ba+44>>2]=f[k>>2];i=Ba+36|0}f[i>>2]=1;i=f[xa>>2]|0}while(0);k=i*136|0;a=Ba+24|0;i=f[a>>2]|0;if(i){j=Ba+28|0;if(k>>>0>(f[j>>2]|0)>>>0){i=Lc(i,k)|0;if(!i){Ha=31;break}f[a>>2]=i;wa=f[j>>2]|0;ij(i+wa|0,0,k-wa|0)|0;f[j>>2]=k}}else{i=Hc(k)|0;f[a>>2]=i;if(!i){c=0;Ha=100;break}f[Ba+28>>2]=k;ij(i|0,0,k|0)|0}wa=(f[l+20>>2]|0)==0?7:8;i=f[xa>>2]|0;if(i|0){sa=l+8|0;ta=l+12|0;ua=o+24|0;va=l+804|0;ra=0;qa=f[a>>2]|0;q=l+28|0;while(1){ka=i;i=i+-1|0;pa=f[Ba>>2]|0;la=fj(1,0,i|0)|0;ma=I;na=Zi(la|0,ma|0,-1,-1)|0;oa=I;pa=Zi(na|0,oa|0,pa|0,((pa|0)<0)<<31>>31|0)|0;pa=dj(pa|0,I|0,i|0)|0;f[qa>>2]=pa;ha=f[Aa>>2]|0;ha=Zi(na|0,oa|0,ha|0,((ha|0)<0)<<31>>31|0)|0;ha=dj(ha|0,I|0,i|0)|0;f[qa+4>>2]=ha;j=f[za>>2]|0;j=Zi(na|0,oa|0,j|0,((j|0)<0)<<31>>31|0)|0;j=dj(j|0,I|0,i|0)|0;f[qa+8>>2]=j;ia=f[ya>>2]|0;ia=Zi(na|0,oa|0,ia|0,((ia|0)<0)<<31>>31|0)|0;ia=dj(ia|0,I|0,i|0)|0;f[qa+12>>2]=ia;d=f[l+812+(ra<<2)>>2]|0;a=f[l+944+(ra<<2)>>2]|0;p=pa>>d< >a<>31|0)|0;ja=dj(ja|0,I|0,d|0)|0;k=fj(1,0,a|0)|0;k=Zi(k|0,I|0,-1,-1)|0;k=Zi(k|0,I|0,ia|0,((ia|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,a|0)|0;ja=(ja< >d;j=(pa|0)==(j|0)?0:ja;pa=qa+16|0;f[pa>>2]=j;k=(ha|0)==(ia|0)?0:(k<>a;f[qa+20>>2]=k;if(j|0?(4294967295/(ja>>>0)|0)>>>0 >>0:0){Ha=37;break a}ha=X(k,j)|0;if(ha>>>0>107374182){Ha=39;break a}ia=ha*40|0;ja=(ra|0)==0;if(ja)j=1;else{p=Zi(p|0,((p|0)<0)<<31>>31|0,1,0)|0;p=ej(p|0,I|0,1)|0;m=Zi(m|0,((m|0)<0)<<31>>31|0,1,0)|0;m=ej(m|0,I|0,1)|0;a=a+-1|0;d=d+-1|0;j=3}ga=qa+24|0;f[ga>>2]=j;R=f[sa>>2]|0;R=R>>>0 >>0?R:d;S=f[ta>>2]|0;S=S>>>0>>0?S:a;T=(ha|0)!=0;U=(ha|0)==0;V=1< >2]|0;j=Zi(na|0,oa|0,j|0,((j|0)<0)<<31>>31|0)|0;j=dj(j|0,I|0,i|0)|0;k=f[Aa>>2]|0;k=Zi(na|0,oa|0,k|0,((k|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,i|0)|0;r=f[za>>2]|0;r=Zi(na|0,oa|0,r|0,((r|0)<0)<<31>>31|0)|0;r=dj(r|0,I|0,i|0)|0;t=f[ya>>2]|0;y=0;s=t;t=((t|0)<0)<<31>>31;v=la;w=ma;x=i}else{y=P+1|0;j=f[Ba>>2]|0;w=fj(y&1|0,0,i|0)|0;w=_i(ea|0,fa|0,w|0,I|0)|0;v=I;j=Zi(w|0,v|0,j|0,((j|0)<0)<<31>>31|0)|0;j=dj(j|0,I|0,ka|0)|0;k=f[Aa>>2]|0;t=fj(y>>>1|0,0,i|0)|0;s=I;r=_i(ea|0,fa|0,t|0,s|0)|0;k=Zi(r|0,I|0,k|0,((k|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,ka|0)|0;r=f[za>>2]|0;r=Zi(w|0,v|0,r|0,((r|0)<0)<<31>>31|0)|0;r=dj(r|0,I|0,ka|0)|0;v=f[ya>>2]|0;s=_i(v|0,((v|0)<0)<<31>>31|0,t|0,s|0)|0;t=I;v=ca;w=da;x=ka}f[Q+16>>2]=y;f[Q>>2]=j;O=Q+4|0;f[O>>2]=k;N=Q+8|0;f[N>>2]=r;r=Zi(s|0,t|0,-1,-1)|0;r=Zi(r|0,I|0,v|0,w|0)|0;r=dj(r|0,I|0,x|0)|0;M=Q+12|0;f[M>>2]=r;r=Ka[wa&15](y)|0;Ya=+(f[q+4>>2]|0)*.00048828125+1.0;Ya=+Ni(1.0,(f[ua>>2]|0)+r-(f[q>>2]|0)|0)*Ya*e;n[Q+32>>2]=Ya;f[Q+28>>2]=(f[q>>2]|0)+-1+(f[va>>2]|0);r=Q+20|0;k=f[r>>2]|0;if(!(T&(k|0)==0)){j=Q+24|0;if((f[j>>2]|0)>>>0 >>0){k=Lc(k,ia)|0;if(!k){Ha=53;break a}f[r>>2]=k;Ha=f[j>>2]|0;ij(k+Ha|0,0,ia-Ha|0)|0;Ha=54}}else{j=Hc(ia)|0;f[r>>2]=j;if(!j){Ha=48;break a}ij(j|0,0,ia|0)|0;j=Q+24|0;Ha=54}if((Ha|0)==54){Ha=0;f[j>>2]=ia}if(!U){L=0;B=f[r>>2]|0;while(1){C=f[pa>>2]|0;G=(((L>>>0)%(C>>>0)|0)< >>0)/(C>>>0)|0)<>2]|0;F=(G|0)>(F|0)?G:F;f[B>>2]=F;G=f[O>>2]|0;G=(C|0)>(G|0)?C:G;C=B+4|0;f[C>>2]=G;r=f[N>>2]|0;r=(D|0)<(r|0)?D:r;D=B+8|0;f[D>>2]=r;k=f[M>>2]|0;k=(E|0)<(k|0)?E:k;E=B+12|0;f[E>>2]=k;F=F>>R< >S< >31|0)|0;r=dj(r|0,I|0,R|0)|0;k=Zi(_|0,$|0,k|0,((k|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,S|0)|0;r=(r<>R;H=B+16|0;f[H>>2]=r;k=(k< >S;v=B+20|0;f[v>>2]=k;J=X(r,k)|0;t=X(J,g)|0;K=B+24|0;s=f[K>>2]|0;do if((s|0)==0&(J|0)!=0){j=Hc(t)|0;f[K>>2]=j;if(!j){c=0;Ha=100;break a}ij(j|0,0,t|0)|0;j=B+28|0;Ha=64}else{j=B+28|0;if(t>>>0<=(f[j>>2]|0)>>>0)break;k=Lc(s,t)|0;if(!k){Ha=63;break a}f[K>>2]=k;Ha=f[j>>2]|0;ij(k+Ha|0,0,t-Ha|0)|0;Ha=64}while(0);if((Ha|0)==64){Ha=0;f[j>>2]=t;r=f[H>>2]|0;k=f[v>>2]|0}s=B+32|0;j=f[s>>2]|0;if(!j)j=bg(r,k,h)|0;else j=dg(j,r,k,h)|0;f[s>>2]=j;if(!j)Mb(h,2,19944,Sa)|0;s=B+36|0;k=f[s>>2]|0;r=f[H>>2]|0;j=f[v>>2]|0;if(!k)j=bg(r,j,h)|0;else j=dg(k,r,j,h)|0;f[s>>2]=j;if(!j)Mb(h,2,19966,Ta)|0;if(J|0){A=0;do{x=f[H>>2]|0;w=(((A>>>0)%(x>>>0)|0)<>>0)/(x>>>0)|0)< >2]|0;j=v+(A*56|0)|0;if(!(f[j>>2]|0)){t=Hc(8192)|0;f[j>>2]=t;if(!t){c=0;Ha=100;break a}f[v+(A*56|0)+32>>2]=8192;t=Ic(10,32)|0;f[v+(A*56|0)+4>>2]=t;if(!t){c=0;Ha=100;break a}f[v+(A*56|0)+52>>2]=10;j=v+(A*56|0)+8|0}else{k=v+(A*56|0)+32|0;r=f[k>>2]|0;j=v+(A*56|0)+8|0;s=j;t=s+44|0;do{f[s>>2]=0;s=s+4|0}while((s|0)<(t|0));f[k>>2]=r}t=f[B>>2]|0;f[j>>2]=(w|0)>(t|0)?w:t;w=f[C>>2]|0;f[v+(A*56|0)+12>>2]=(x|0)>(w|0)?x:w;x=f[D>>2]|0;f[v+(A*56|0)+16>>2]=(y|0)<(x|0)?y:x;y=f[E>>2]|0;f[v+(A*56|0)+20>>2]=(z|0)<(y|0)?z:y}else{k=f[K>>2]|0;j=k+(A*52|0)+4|0;if((f[j>>2]|0)==0?(v=Ic(100,24)|0,f[j>>2]=v,(v|0)==0):0){c=0;Ha=100;break a}j=k+(A*52|0)+8|0;if((f[j>>2]|0)==0?(v=Ic(100,24)|0,f[j>>2]=v,(v|0)==0):0){c=0;Ha=100;break a}r=f[B>>2]|0;r=(w|0)>(r|0)?w:r;f[k+(A*52|0)+12>>2]=r;s=f[C>>2]|0;x=(x|0)>(s|0)?x:s;f[k+(A*52|0)+16>>2]=x;s=f[D>>2]|0;s=(y|0)<(s|0)?y:s;f[k+(A*52|0)+20>>2]=s;y=f[E>>2]|0;z=(z|0)<(y|0)?z:y;f[k+(A*52|0)+24>>2]=z;r=X(z-x|0,s-r<<2)|0;s=k+(A*52|0)+36|0;if(r>>>0<=(f[s>>2]|0)>>>0)break;k=k+(A*52|0)|0;j=f[k>>2]|0;if(j|0)Mc(j+-1|0);j=Hc(r|1)|0;f[k>>2]=j;if(!j){Ha=87;break a}f[s>>2]=r;b[j>>0]=0;f[k>>2]=(f[k>>2]|0)+1}while(0);A=A+1|0}while(A>>>0>>0)}L=L+1|0;if(L>>>0>=ha>>>0)break;else B=B+40|0}}q=q+8|0;P=P+1|0;if(P>>>0>=(f[ga>>2]|0)>>>0)break;else Q=Q+36|0}ra=ra+1|0;if(ra>>>0>=(f[xa>>2]|0)>>>0)break;else qa=qa+136|0}}c=c+1|0;if(c>>>0>=(f[Ga>>2]|0)>>>0){c=1;Ha=100;break}l=l+1080|0;Ba=Ba+52|0;o=o+52|0;j=f[Ja>>2]|0;i=f[Ia>>2]|0;k=f[La>>2]|0;a=f[Fa>>2]|0}switch(Ha|0){case 12:{Mb(h,1,19770,Ua)|0;Wa=0;u=Xa;return Wa|0}case 14:{Mb(h,1,19770,Va)|0;Wa=0;u=Xa;return Wa|0}case 22:{f[m>>2]=0;f[k>>2]=0;f[i>>2]=0;break}case 31:{Mb(h,1,19803,Ma)|0;Mc(f[a>>2]|0);f[a>>2]=0;f[j>>2]=0;Wa=0;u=Xa;return Wa|0}case 37:{Mb(h,1,19770,Na)|0;Wa=0;u=Xa;return Wa|0}case 39:{Mb(h,1,19770,Oa)|0;Wa=0;u=Xa;return Wa|0}case 48:{Mb(h,1,19843,Pa)|0;Wa=0;u=Xa;return Wa|0}case 53:{Mb(h,1,19843,Qa)|0;Mc(f[r>>2]|0);f[r>>2]=0;f[j>>2]=0;Wa=0;u=Xa;return Wa|0}case 63:{Mc(f[K>>2]|0);f[K>>2]=0;f[j>>2]=0;Mb(h,1,19886,Ra)|0;Wa=0;u=Xa;return Wa|0}case 87:{f[s>>2]=0;Wa=0;u=Xa;return Wa|0}case 100:{u=Xa;return c|0}}Mb(h,1,19770,Wa)|0;Wa=0;u=Xa;return Wa|0}function Wf(a,b,c){a=a|0;b=b|0;c=c|0;return Vf(a,b,0,.5,56,c)|0}function Xf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;b=f[a+24>>2]|0;e=f[b+16>>2]|0;if(!e){e=0;return e|0}d=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;b=f[b+24>>2]|0;a=0;c=0;while(1){h=f[b+24>>2]|0;h=(h>>>3)+((h&7|0)!=0&1)|0;g=(f[d+24>>2]|0)+((f[d+20>>2]|0)*136|0)+-136|0;a=(X(X((h|0)==3?4:h,(f[g+8>>2]|0)-(f[g>>2]|0)|0)|0,(f[g+12>>2]|0)-(f[g+4>>2]|0)|0)|0)+a|0;c=c+1|0;if(c>>>0>=e>>>0)break;else{d=d+52|0;b=b+52|0}}return a|0}function Yf(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;y=u;u=u+16|0;w=y;if(!(f[a+8>>2]|0)){f[a+36>>2]=c;t=a+28|0;i=f[(f[t>>2]|0)+76>>2]|0;x=a+32|0;f[x>>2]=i+(c*5640|0);v=(h|0)==0;s=a+20|0;if(!v){j=f[(f[f[s>>2]>>2]|0)+20>>2]|0;n=f[i+(c*5640|0)+5584>>2]|0;o=j+16|0;if(!(f[o>>2]|0)){j=0;i=h+88|0}else{l=f[j+24>>2]|0;i=h+88|0;m=f[i>>2]|0;j=0;k=0;do{r=l+(k*136|0)+16|0;f[m+(c*592|0)+20+(k<<2)>>2]=f[r>>2];q=l+(k*136|0)+20|0;f[m+(c*592|0)+152+(k<<2)>>2]=f[q>>2];j=(X(f[q>>2]|0,f[r>>2]|0)|0)+j|0;f[m+(c*592|0)+284+(k<<2)>>2]=f[n+812+(k<<2)>>2];f[m+(c*592|0)+416+(k<<2)>>2]=f[n+944+(k<<2)>>2];k=k+1|0}while(k>>>0<(f[o>>2]|0)>>>0)}r=Ic(X(X(f[h+52>>2]|0,j)|0,f[h+56>>2]|0)|0,32)|0;f[(f[i>>2]|0)+(c*592|0)+548>>2]=r;if(!r){h=0;u=y;return h|0}}i=f[f[s>>2]>>2]|0;r=i+16|0;if(!(f[r>>2]|0)){j=f[i+20>>2]|0;m=f[x>>2]|0;i=0}else{m=f[x>>2]|0;j=f[i+20>>2]|0;c=0;p=j;q=f[m+5584>>2]|0;while(1){n=f[p+32>>2]|0;o=X((f[p+12>>2]|0)-(f[p+4>>2]|0)|0,(f[p+8>>2]|0)-(f[p>>2]|0)|0)|0;i=(o|0)!=0;if((f[q+20>>2]|0)==1){if(i){l=q+1076|0;k=0;i=n;while(1){f[i>>2]=(f[i>>2]|0)-(f[l>>2]|0);k=k+1|0;if((k|0)==(o|0))break;else i=i+4|0}}}else if(i){l=q+1076|0;i=n;k=0;while(1){f[i>>2]=(f[i>>2]|0)-(f[l>>2]|0)<<11;k=k+1|0;if((k|0)==(o|0))break;else i=i+4|0}}c=c+1|0;i=f[r>>2]|0;if(c>>>0>=i>>>0)break;else{p=p+52|0;q=q+1080|0}}}n=X((f[j+12>>2]|0)-(f[j+4>>2]|0)|0,(f[j+8>>2]|0)-(f[j>>2]|0)|0)|0;a:do switch(f[m+16>>2]|0){case 0:break;case 2:{if(f[m+5608>>2]|0){l=Hc(i<<2)|0;if(!l){h=0;u=y;return h|0}i=f[r>>2]|0;if(!i)i=0;else{k=0;while(1){f[l+(k<<2)>>2]=f[j+32>>2];k=k+1|0;if((k|0)==(i|0))break;else j=j+52|0}}r=(yf(f[(f[x>>2]|0)+5608>>2]|0,n,l,i,f[(f[(f[a+24>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Mc(l);if(r){h=0;u=y;return h|0}}break}default:{k=f[j+32>>2]|0;l=f[j+84>>2]|0;i=f[j+136>>2]|0;if(!(f[(f[m+5584>>2]|0)+20>>2]|0)){wf(k,l,i,n);break a}else{uf(k,l,i,n);break a}}}while(0);i=f[f[s>>2]>>2]|0;l=i+16|0;b:do if(f[l>>2]|0){k=f[(f[x>>2]|0)+5584>>2]|0;i=f[i+20>>2]|0;j=0;c:while(1){switch(f[k+20>>2]|0){case 1:{if(!(xg(i)|0)){i=0;j=53;break c}break}case 0:{if(!(Eg(i)|0)){i=0;j=53;break c}break}default:{}}j=j+1|0;if(j>>>0>=(f[l>>2]|0)>>>0)break b;else{k=k+1080|0;i=i+52|0}}if((j|0)==53){u=y;return i|0}}while(0);k=f[x>>2]|0;l=Og(1)|0;if(!l){h=0;u=y;return h|0}do if((f[k+16>>2]|0)==1)if(!(f[(f[k+5584>>2]|0)+20>>2]|0)){i=3;j=tf()|0;break}else{i=3;j=sf()|0;break}else{i=f[(f[a+24>>2]|0)+16>>2]|0;j=f[k+5600>>2]|0}while(0);s=(Tg(l,f[f[s>>2]>>2]|0,k,j,i)|0)==0;Pg(l);if(s){h=0;u=y;return h|0}i=f[t>>2]|0;f[w>>2]=0;if(!v)f[h+12>>2]=0;if(!(b[i+93>>0]&5)){if(f[(f[x>>2]|0)+8>>2]|0){i=0;do{Mf(a,i,1);i=i+1|0}while(i>>>0<(f[(f[x>>2]|0)+8>>2]|0)>>>0)}}else if(!(Of(a,d,w,g,h)|0)){h=0;u=y;return h|0}}if(h|0)f[h+12>>2]=1;i=Yg(f[a+24>>2]|0,f[a+28>>2]|0)|0;if(!i){h=0;u=y;return h|0}h=(Ug(i,f[a+36>>2]|0,f[f[a+20>>2]>>2]|0,f[(f[a+32>>2]|0)+8>>2]|0,d,e,g,h,f[a+4>>2]|0,f[a>>2]|0,f[a+16>>2]|0,1)|0)!=0;Zg(i);h=h&1;u=y;return h|0}function Zf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0;v=u;u=u+16|0;k=v+8|0;j=v;h=v+12|0;i=a+36|0;f[i>>2]=d;p=f[a+28>>2]|0;q=a+32|0;f[q>>2]=(f[p+76>>2]|0)+(d*5640|0);f[h>>2]=0;r=a+24|0;d=Yg(f[r>>2]|0,p)|0;if(!d){t=0;u=v;return t|0}l=a+20|0;p=(Wg(d,f[i>>2]|0,f[f[l>>2]>>2]|0,b,h,c,e,g)|0)==0;Zg(d);if(p){t=0;u=v;return t|0}d=f[f[l>>2]>>2]|0;c=f[(f[q>>2]|0)+5584>>2]|0;a=f[d+20>>2]|0;h=Og(0)|0;if(!h){t=0;u=v;return t|0}e=d+16|0;a:do if(f[e>>2]|0){b=0;d=c;while(1){if(!(Qg(h,a,d)|0))break;b=b+1|0;if(b>>>0>=(f[e>>2]|0)>>>0)break a;else{a=a+52|0;d=d+1080|0}}Pg(h);t=0;u=v;return t|0}while(0);Pg(h);d=f[f[l>>2]>>2]|0;h=d+16|0;do if(f[h>>2]|0){e=f[(f[q>>2]|0)+5584>>2]|0;d=f[d+20>>2]|0;a=0;b=f[(f[r>>2]|0)+24>>2]|0;while(1){c=(f[b+36>>2]|0)+1|0;if((f[e+20>>2]|0)==1){if(!(Ag(d,c)|0)){d=0;a=47;break}}else if(!(Jg(d,c)|0)){d=0;a=47;break}a=a+1|0;if(a>>>0>=(f[h>>2]|0)>>>0){a=14;break}else{e=e+1080|0;d=d+52|0;b=b+52|0}}if((a|0)==14){d=f[f[l>>2]>>2]|0;break}else if((a|0)==47){u=v;return d|0}}while(0);c=f[q>>2]|0;a=f[d+20>>2]|0;b=f[c+16>>2]|0;do if(b|0){i=X((f[a+12>>2]|0)-(f[a+4>>2]|0)|0,(f[a+8>>2]|0)-(f[a>>2]|0)|0)|0;h=d+16|0;d=f[h>>2]|0;if(d>>>0<=2){f[k>>2]=d;Mb(g,1,20049,k)|0;break}if((X((f[a+64>>2]|0)-(f[a+56>>2]|0)|0,(f[a+60>>2]|0)-(f[a+52>>2]|0)|0)|0)>=(i|0)?(X((f[a+116>>2]|0)-(f[a+108>>2]|0)|0,(f[a+112>>2]|0)-(f[a+104>>2]|0)|0)|0)>=(i|0):0){if((b|0)!=2){d=f[a+32>>2]|0;if((f[(f[c+5584>>2]|0)+20>>2]|0)==1){vf(d,f[a+84>>2]|0,f[a+136>>2]|0,i);break}else{xf(d,f[a+84>>2]|0,f[a+136>>2]|0,i);break}}e=c+5604|0;if(!(f[e>>2]|0))break;c=Hc(d<<2)|0;if(!c){t=0;u=v;return t|0}d=f[h>>2]|0;if(!d)d=0;else{b=0;while(1){f[c+(b<<2)>>2]=f[a+32>>2];b=b+1|0;if((b|0)==(d|0))break;else a=a+52|0}}p=(zf(f[e>>2]|0,i,c,d,f[(f[(f[r>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Mc(c);if(p)d=0;else break;u=v;return d|0}Mb(g,1,19988,j)|0;t=0;u=v;return t|0}while(0);d=f[f[l>>2]>>2]|0;p=d+16|0;if(!(f[p>>2]|0)){t=1;u=v;return t|0}o=0;m=f[d+20>>2]|0;l=f[(f[q>>2]|0)+5584>>2]|0;i=f[(f[r>>2]|0)+24>>2]|0;while(1){k=f[m+24>>2]|0;j=f[i+36>>2]|0;g=(f[k+(j*136|0)+8>>2]|0)-(f[k+(j*136|0)>>2]|0)|0;j=(f[k+(j*136|0)+12>>2]|0)-(f[k+(j*136|0)+4>>2]|0)|0;k=(f[m+8>>2]|0)-(f[m>>2]|0)|0;d=f[i+24>>2]|0;if(!(f[i+32>>2]|0)){d=1< >2]|0;d=(j|0)!=0;if((f[l+20>>2]|0)==1){if(d?(t=l+1076|0,g|0):0){d=0;while(1){b=0;c=a;while(1){r=(f[t>>2]|0)+(f[c>>2]|0)|0;f[c>>2]=(r|0)<(h|0)?h:(r|0)>(e|0)?e:r;b=b+1|0;if((b|0)==(g|0))break;else c=c+4|0}d=d+1|0;if((d|0)==(j|0))break;else a=a+(k<<2)|0}}}else if(d?(s=l+1076|0,g|0):0){c=0;while(1){d=0;b=a;while(1){r=Oi(+n[b>>2])|0;r=(f[s>>2]|0)+r|0;f[b>>2]=(r|0)<(h|0)?h:(r|0)>(e|0)?e:r;d=d+1|0;if((d|0)==(g|0))break;else b=b+4|0}c=c+1|0;if((c|0)==(j|0))break;else a=a+(k<<2)|0}}o=o+1|0;if(o>>>0>=(f[p>>2]|0)>>>0){d=1;break}else{m=m+52|0;l=l+1080|0;i=i+52|0}}u=v;return d|0}function _f(a,c,e){a=a|0;c=c|0;e=e|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;r=a+24|0;g=f[r>>2]|0;j=f[g+16>>2]|0;l=(j|0)==0;if(l){r=1;return r|0}m=f[g+24>>2]|0;k=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;g=k;a=m;h=0;i=0;while(1){p=f[a+24>>2]|0;p=(p>>>3)+((p&7|0)!=0&1)|0;q=(f[g+24>>2]|0)+((f[g+20>>2]|0)*136|0)+-136|0;h=(X(X((p|0)==3?4:p,(f[q+8>>2]|0)-(f[q>>2]|0)|0)|0,(f[q+12>>2]|0)-(f[q+4>>2]|0)|0)|0)+h|0;i=i+1|0;if((i|0)==(j|0))break;else{g=g+52|0;a=a+52|0}}g=h>>>0>e>>>0;if(g|l){r=(g^1)&1;return r|0}else q=0;while(1){l=f[m+24>>2]|0;o=f[k+24>>2]|0;j=f[m+36>>2]|0;h=f[o+(j*136|0)+8>>2]|0;i=f[o+(j*136|0)>>2]|0;n=h-i|0;e=f[o+(j*136|0)+12>>2]|0;j=f[o+(j*136|0)+4>>2]|0;o=e-j|0;p=(f[k+8>>2]|0)-(f[k>>2]|0)|0;l=(l>>>3)+((l&7|0)!=0&1)|0;a:do switch(((l|0)==3?4:l)&1073741823|0){case 1:{a=f[k+32>>2]|0;g=(o|0)==0|(n|0)==0;if(!(f[m+32>>2]|0)){if(g)break a;l=h+(X(e+-1-j|0,n)|0)-i|0;j=0;h=c;while(1){g=0;i=a;e=h;while(1){b[e>>0]=f[i>>2];g=g+1|0;if((g|0)==(n|0))break;else{i=i+4|0;e=e+1|0}}j=j+1|0;if((j|0)==(o|0))break;else{a=a+(p<<2)|0;h=h+n|0}}c=c+l|0;break a}else{if(g)break a;l=h+(X(e+-1-j|0,n)|0)-i|0;g=a;a=c;h=0;while(1){i=0;e=g;j=a;while(1){b[j>>0]=f[e>>2];i=i+1|0;if((i|0)==(n|0))break;else{e=e+4|0;j=j+1|0}}h=h+1|0;if((h|0)==(o|0))break;else{g=g+(p<<2)|0;a=a+n|0}}c=c+l|0;break a}}case 2:{g=f[k+32>>2]|0;a=(o|0)==0|(n|0)==0;if(!(f[m+32>>2]|0)){if(a)break a;l=h<<1;h=i<<1;j=c+((X(e+-1-j|0,l-h|0)|0)+l-h)|0;h=0;while(1){a=g;i=0;e=c;while(1){d[e>>1]=f[a>>2];i=i+1|0;if((i|0)==(n|0))break;else{a=a+4|0;e=e+2|0}}h=h+1|0;if((h|0)==(o|0)){c=j;break}else{g=g+(p<<2)|0;c=c+(n<<1)|0}}}else{if(a)break a;l=h<<1;i=i<<1;j=c+((X(e+-1-j|0,l-i|0)|0)+l-i)|0;i=0;while(1){a=c;h=g;e=0;while(1){d[a>>1]=f[h>>2];e=e+1|0;if((e|0)==(n|0))break;else{a=a+2|0;h=h+4|0}}i=i+1|0;if((i|0)==(o|0)){c=j;break}else{c=c+(n<<1)|0;g=g+(p<<2)|0}}}break}case 4:{if(!((o|0)==0|(n|0)==0)){l=h<<2;g=i<<2;j=c+((X(e+-1-j|0,l-g|0)|0)+l-g)|0;g=f[k+32>>2]|0;i=0;while(1){a=c;h=g;e=0;while(1){f[a>>2]=f[h>>2];e=e+1|0;if((e|0)==(n|0))break;else{a=a+4|0;h=h+4|0}}i=i+1|0;if((i|0)==(o|0)){c=j;break}else{c=c+(n<<2)|0;g=g+(p<<2)|0}}}break}default:{}}while(0);q=q+1|0;if(q>>>0>=(f[(f[r>>2]|0)+16>>2]|0)>>>0){c=1;break}else{k=k+52|0;m=m+52|0}}return c|0}function $f(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;b=f[a+24>>2]|0;e=f[b+16>>2]|0;if(!e){e=0;return e|0}d=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;b=f[b+24>>2]|0;a=0;c=0;while(1){g=f[b+24>>2]|0;g=(g>>>3)+((g&7|0)!=0&1)|0;a=(X(X((f[d+12>>2]|0)-(f[d+4>>2]|0)|0,(f[d+8>>2]|0)-(f[d>>2]|0)|0)|0,(g|0)==3?4:g)|0)+a|0;c=c+1|0;if(c>>>0>=e>>>0)break;else{d=d+52|0;b=b+52|0}}return a|0}function ag(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=f[a+24>>2]|0;p=o+16|0;m=f[p>>2]|0;n=(m|0)==0;if(n)g=0;else{i=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;k=f[o+24>>2]|0;g=0;l=0;while(1){q=f[k+24>>2]|0;q=(q>>>3)+((q&7|0)!=0&1)|0;g=(X(X((f[i+12>>2]|0)-(f[i+4>>2]|0)|0,(f[i+8>>2]|0)-(f[i>>2]|0)|0)|0,(q|0)==3?4:q)|0)+g|0;l=l+1|0;if((l|0)==(m|0))break;else{i=i+52|0;k=k+52|0}}}g=(g|0)!=(e|0);if(g|n){q=(g^1)&1;return q|0}a=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;e=f[o+24>>2]|0;n=0;while(1){q=f[e+24>>2]|0;i=(f[a+8>>2]|0)-(f[a>>2]|0)|0;k=(f[a+12>>2]|0)-(f[a+4>>2]|0)|0;m=X(k,i)|0;q=(q>>>3)+((q&7|0)!=0&1)|0;a:do switch(((q|0)==3?4:q)&1073741823|0){case 1:{i=f[a+32>>2]|0;g=(m|0)!=0;if(!(f[e+32>>2]|0)){if(g){k=0;g=i;i=c}else break a;while(1){f[g>>2]=h[i>>0];k=k+1|0;if((k|0)==(m|0))break;else{g=g+4|0;i=i+1|0}}c=c+m|0;break a}else{if(g){g=i;i=c;k=0}else break a;while(1){f[g>>2]=b[i>>0];k=k+1|0;if((k|0)==(m|0))break;else{g=g+4|0;i=i+1|0}}c=c+m|0;break a}}case 2:{g=f[a+32>>2]|0;l=(m|0)!=0;if(!(f[e+32>>2]|0)){if(!l)break a;k=c+(X(k<<1,i)|0)|0;i=0;while(1){f[g>>2]=j[c>>1];i=i+1|0;if((i|0)==(m|0)){c=k;break}else{c=c+2|0;g=g+4|0}}}else{if(!l)break a;k=c+(X(k<<1,i)|0)|0;i=0;while(1){f[g>>2]=d[c>>1];i=i+1|0;if((i|0)==(m|0)){c=k;break}else{c=c+2|0;g=g+4|0}}}break}case 4:{if(m){k=c+(X(k<<2,i)|0)|0;i=f[a+32>>2]|0;g=0;while(1){f[i>>2]=f[c>>2];g=g+1|0;if((g|0)==(m|0)){c=k;break}else{i=i+4|0;c=c+4|0}}}break}default:{}}while(0);n=n+1|0;if(n>>>0>=(f[p>>2]|0)>>>0){c=1;break}else{a=a+52|0;e=e+52|0}}return c|0}function bg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=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;t=u;u=u+288|0;j=t+16|0;h=t+8|0;r=t+152|0;s=t+24|0;d=Ic(1,20)|0;if(!d){Mb(c,1,20123,t)|0;s=0;u=t;return s|0}f[d>>2]=a;k=d+4|0;f[k>>2]=b;f[r>>2]=a;f[s>>2]=b;i=d+8|0;f[i>>2]=0;q=0;g=0;while(1){p=X(b,a)|0;a=(a+1|0)/2|0;e=q+1|0;f[r+(e<<2)>>2]=a;b=(b+1|0)/2|0;f[s+(e<<2)>>2]=b;g=g+p|0;if(p>>>0<=1)break;else q=e}f[i>>2]=g;if(!g){Mc(d);Mb(c,2,20161,h)|0;s=0;u=t;return s|0}b=Ic(g,16)|0;f[d+12>>2]=b;if(!b){Mb(c,1,20211,j)|0;Mc(d);s=0;u=t;return s|0}p=f[i>>2]|0;f[d+16>>2]=p<<4;a=b+((X(f[k>>2]|0,f[d>>2]|0)|0)<<4)|0;if(!q)a=b;else{o=0;g=a;e=a;a=b;do{m=f[s+(o<<2)>>2]|0;a:do if((m|0)>0){n=f[r+(o<<2)>>2]|0;if((n|0)<=0){i=m+-1|0;c=0;while(1){l=(c&1|0)!=0|(c|0)==(i|0);h=l?e:g;g=l?e:g+(n<<4)|0;c=c+1|0;if((c|0)>=(m|0)){e=h;break a}else e=h}}k=~n;k=(n+2+((k|0)>-3?k:-3)|0)>>>1;l=m+-1|0;j=0;do{i=e+16|0;c=n;while(1){f[a>>2]=e;h=a+16|0;if((c|0)==1){a=h;break}f[h>>2]=e;a=a+32|0;if((c|0)>2){c=c+-2|0;e=e+16|0}else break}i=i+(k<<4)|0;c=(j&1|0)!=0|(j|0)==(l|0);e=c?i:g;g=c?i:g+(n<<4)|0;j=j+1|0}while((j|0)<(m|0))}while(0);o=o+1|0}while((o|0)!=(q|0))}f[a>>2]=0;if(!p){s=d;u=t;return s|0}else a=0;while(1){f[b+4>>2]=999;f[b+8>>2]=0;f[b+12>>2]=0;a=a+1|0;if((a|0)==(p|0))break;else b=b+16|0}u=t;return d|0}function cg(a){a=a|0;var b=0,c=0;if(!a)return;c=f[a+8>>2]|0;if(!c)return;b=0;a=f[a+12>>2]|0;while(1){f[a+4>>2]=999;f[a+8>>2]=0;f[a+12>>2]=0;b=b+1|0;if(b>>>0>=c>>>0)break;else a=a+16|0}return}function dg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=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;s=u;u=u+272|0;l=s;q=s+136|0;r=s+8|0;if(!a){r=0;u=s;return r|0}k=a+4|0;if((f[a>>2]|0)==(b|0)?(f[k>>2]|0)==(c|0):0)e=a+8|0;else{f[a>>2]=b;f[k>>2]=c;f[q>>2]=b;f[r>>2]=c;e=a+8|0;f[e>>2]=0;p=0;g=c;h=b;j=0;while(1){o=X(g,h)|0;h=(h+1|0)/2|0;i=p+1|0;f[q+(i<<2)>>2]=h;g=(g+1|0)/2|0;f[r+(i<<2)>>2]=g;j=j+o|0;if(o>>>0<=1)break;else p=i}f[e>>2]=j;if(!j){e=a+12|0;g=f[e>>2]|0;if(g|0){Mc(g);f[e>>2]=0}Mc(a);r=0;u=s;return r|0}h=j<<4;i=a+16|0;j=a+12|0;do if(h>>>0>(f[i>>2]|0)>>>0){g=Lc(f[j>>2]|0,h)|0;if(g|0){f[j>>2]=g;c=f[i>>2]|0;ij(g+c|0,0,h-c|0)|0;f[i>>2]=h;c=f[k>>2]|0;b=f[a>>2]|0;break}Mb(d,1,20255,l)|0;e=f[j>>2]|0;if(e|0){Mc(e);f[j>>2]=0}Mc(a);r=0;u=s;return r|0}while(0);g=f[j>>2]|0;b=g+((X(c,b)|0)<<4)|0;if(p){c=b;o=0;do{m=f[r+(o<<2)>>2]|0;a:do if((m|0)>0){n=f[q+(o<<2)>>2]|0;if((n|0)<=0){j=m+-1|0;i=0;while(1){l=(i&1|0)!=0|(i|0)==(j|0);h=l?b:c+(n<<4)|0;b=l?b:c;i=i+1|0;if((i|0)>=(m|0)){c=h;break a}else c=h}}k=~n;k=(n+2+((k|0)>-3?k:-3)|0)>>>1;l=m+-1|0;d=0;while(1){j=b+16|0;i=n;while(1){f[g>>2]=b;h=g+16|0;if((i|0)==1){g=h;break}f[h>>2]=b;g=g+32|0;if((i|0)>2){i=i+-2|0;b=b+16|0}else break}b=j+(k<<4)|0;j=(d&1|0)!=0|(d|0)==(l|0);h=j?b:c+(n<<4)|0;b=j?b:c;d=d+1|0;if((d|0)>=(m|0)){c=h;break}else c=h}}while(0);o=o+1|0}while((o|0)!=(p|0))}f[g>>2]=0}b=f[e>>2]|0;if(!b){r=a;u=s;return r|0}e=0;g=f[a+12>>2]|0;while(1){f[g+4>>2]=999;f[g+8>>2]=0;f[g+12>>2]=0;e=e+1|0;if((e|0)==(b|0))break;else g=g+16|0}u=s;return a|0}function eg(a){a=a|0;var b=0,c=0;if(!a)return;b=a+12|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}Mc(a);return}function fg(a,b,c){a=a|0;b=b|0;c=c|0;a=(f[a+12>>2]|0)+(b<<4)|0;if(!a)return;while(1){b=a+4|0;if((f[b>>2]|0)<=(c|0)){a=4;break}f[b>>2]=c;a=f[a>>2]|0;if(!a){a=4;break}}if((a|0)==4)return}function gg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=u;u=u+128|0;i=j;c=(f[b+12>>2]|0)+(c<<4)|0;b=f[c>>2]|0;if(!b){b=0;h=0}else{e=0;g=b;while(1){h=e+1|0;f[i+(e<<2)>>2]=c;b=f[g>>2]|0;if(!b){b=0;c=g;break}else{c=g;e=h;g=b}}}while(1){g=c+8|0;e=f[g>>2]|0;if((b|0)>(e|0))f[g>>2]=b;else b=e;a:do if((b|0)<(d|0)){e=c+4|0;while(1){if((b|0)>=(f[e>>2]|0))break;tg(a,0,1);b=b+1|0;if((b|0)>=(d|0))break a}c=c+12|0;if(!(f[c>>2]|0)){tg(a,1,1);f[c>>2]=1}}while(0);f[g>>2]=b;if(!h)break;g=h+-1|0;c=f[i+(g<<2)>>2]|0;h=g}u=j;return}function hg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=u;u=u+128|0;i=j;b=(f[b+12>>2]|0)+(c<<4)|0;c=f[b>>2]|0;if(!c){e=0;g=0}else{e=0;while(1){g=e+1|0;f[i+(e<<2)>>2]=b;b=f[c>>2]|0;if(!b){e=0;b=c;break}else{h=c;e=g;c=b;b=h}}}while(1){h=b+8|0;c=f[h>>2]|0;if((e|0)>(c|0)){f[h>>2]=e;c=e}e=b+4|0;a:do if((c|0)<(d|0)){b=c;while(1){if((b|0)>=(f[e>>2]|0))break a;if(ug(a,1)|0)break;b=b+1|0;if((b|0)>=(d|0))break a}f[e>>2]=b}else b=c;while(0);f[h>>2]=b;if(!g)break;h=g+-1|0;e=b;b=f[i+(h<<2)>>2]|0;g=h}u=j;return (f[e>>2]|0)<(d|0)|0}function ig(){var a=0,b=0;a=Ic(1,12)|0;if(!a){a=0;return a|0}f[a+4>>2]=10;b=Ic(10,4)|0;f[a+8>>2]=b;if(b|0){b=a;return b|0}Mc(a);b=0;return b|0}function jg(a){a=a|0;var b=0;if(!a)return;b=f[a+8>>2]|0;if(b|0)Mc(b);Mc(a);return}function kg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;i=u;u=u+16|0;h=i;g=a+4|0;e=f[g>>2]|0;d=f[a>>2]|0;do if((e|0)==(d|0)){e=e+10|0;f[g>>2]=e;d=a+8|0;e=Lc(f[d>>2]|0,e<<2)|0;if(e|0){f[d>>2]=e;d=f[a>>2]|0;break}Mc(f[d>>2]|0);f[g>>2]=0;f[a>>2]=0;Mb(c,1,20303,h)|0;b=0;u=i;return b|0}else e=f[a+8>>2]|0;while(0);f[e+(d<<2)>>2]=b;f[a>>2]=d+1;b=1;u=i;return b|0}function lg(a){a=a|0;return f[a>>2]|0}function mg(a){a=a|0;return f[a+8>>2]|0}function ng(a){a=a|0;f[a>>2]=0;return}function og(){return Hc(20)|0}function pg(a){a=a|0;if(!a)return;Mc(a);return}function qg(a){a=a|0;return (f[a+8>>2]|0)-(f[a>>2]|0)|0}function rg(a,b,c){a=a|0;b=b|0;c=c|0;f[a>>2]=b;f[a+4>>2]=b+c;f[a+8>>2]=b;f[a+12>>2]=0;f[a+16>>2]=8;return}function sg(a,b,c){a=a|0;b=b|0;c=c|0;f[a>>2]=b;f[a+4>>2]=b+c;f[a+8>>2]=b;f[a+12>>2]=0;f[a+16>>2]=0;return}function tg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!d)return;k=a+16|0;l=a+12|0;m=a+8|0;i=a+4|0;h=d+-1|0;a=f[k>>2]|0;do{j=c>>>h&1;if(!a){e=f[l>>2]|0;a=e<<8&65280;f[l>>2]=a;a=(a|0)==65280?7:8;f[k>>2]=a;g=f[m>>2]|0;if((f[i>>2]|0)>>>0>g>>>0){f[m>>2]=g+1;b[g>>0]=e;a=f[k>>2]|0}}a=a+-1|0;f[k>>2]=a;f[l>>2]=f[l>>2]|j<>>0 >>0);return}function ug(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0;if(!b){l=0;return l|0}j=a+16|0;k=a+12|0;l=a+8|0;i=a+4|0;g=b+-1|0;a=0;c=f[k>>2]|0;d=f[j>>2]|0;do{if(!d){c=c<<8&65280;f[k>>2]=c;d=(c|0)==65280?7:8;f[j>>2]=d;e=f[l>>2]|0;if((f[i>>2]|0)>>>0>e>>>0){f[l>>2]=e+1;c=c|(h[e>>0]|0);f[k>>2]=c}}d=d+-1|0;f[j>>2]=d;a=(c>>>d&1)< >>0>>0);return a|0}function vg(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0;e=a+12|0;c=f[e>>2]|0;i=c<<8&65280;f[e>>2]=i;h=a+16|0;f[h>>2]=(i|0)==65280?7:8;i=a+8|0;d=f[i>>2]|0;g=a+4|0;if((f[g>>2]|0)>>>0<=d>>>0){i=0;return i|0}f[i>>2]=d+1;b[d>>0]=c;if((f[h>>2]|0)!=7){i=1;return i|0}c=f[e>>2]|0;a=c<<8&65280;f[e>>2]=a;f[h>>2]=(a|0)==65280?7:8;a=f[i>>2]|0;if((f[g>>2]|0)>>>0<=a>>>0){i=0;return i|0}f[i>>2]=a+1;b[a>>0]=c;i=1;return i|0}function wg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;g=a+12|0;b=f[g>>2]|0;do if((b&255|0)==255){e=b<<8&65280;f[g>>2]=e;b=a+16|0;f[b>>2]=(e|0)==65280?7:8;c=a+8|0;d=f[c>>2]|0;if((f[a+4>>2]|0)>>>0>d>>>0){f[c>>2]=d+1;f[g>>2]=e|(h[d>>0]|0);break}else{g=0;return g|0}}else b=a+16|0;while(0);f[b>>2]=0;g=1;return g|0}function xg(a){a=a|0;return zg(a,1)|0}function yg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;if(!d){d=(b|0)>0;if(!(d|(c|0)>1))return;if(d){e=c+-1|0;d=0;do{h=d;d=d+1|0;g=a+((h<<1|1)<<2)|0;f[g>>2]=(f[g>>2]|0)-((f[a+(((d|0)>=(c|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((h|0)>=(c|0)?e:h)<<1<<2)>>2]|0)>>1)}while((d|0)!=(b|0))}if((c|0)<=0)return;e=b+-1|0;d=0;do{h=a+(d<<1<<2)|0;f[h>>2]=((f[a+(((d|0)<1?1:(((d|0)>(b|0)?b:d)<<1)+-1|0)<<2)>>2]|0)+2+(f[a+((((d|0)>=(b|0)?e:d)<<1|1)<<2)>>2]|0)>>2)+(f[h>>2]|0);d=d+1|0}while((d|0)!=(c|0));return}if((b|0)==1&(c|0)==0){f[a>>2]=f[a>>2]<<1;return}if((b|0)>0){e=c+-1|0;d=0;do{h=a+(d<<1<<2)|0;f[h>>2]=(f[h>>2]|0)-((f[a+(((d|0)<1?1:(((d|0)>(c|0)?c:d)<<1)+-1|0)<<2)>>2]|0)+(f[a+((((d|0)>=(c|0)?e:d)<<1|1)<<2)>>2]|0)>>1);d=d+1|0}while((d|0)!=(b|0))}if((c|0)<=0)return;e=b+-1|0;d=0;do{g=d;d=d+1|0;h=a+((g<<1|1)<<2)|0;f[h>>2]=((f[a+(((g|0)>=(b|0)?e:g)<<1<<2)>>2]|0)+2+(f[a+(((d|0)>=(b|0)?e:d)<<1<<2)>>2]|0)>>2)+(f[h>>2]|0)}while((d|0)!=(c|0));return}function zg(a,b){a=a|0;b=b|0;var c=0,d=0,e=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;z=(f[a+8>>2]|0)-(f[a>>2]|0)|0;h=f[a+16>>2]|0;c=h+-1|0;y=f[a+32>>2]|0;a=f[a+24>>2]|0;g=a+(c*136|0)|0;e=(c|0)==0;if(e)a=0;else{d=0;do{w=a;a=a+136|0;x=(f[w+144>>2]|0)-(f[a>>2]|0)|0;x=d>>>0 >>0?x:d;w=(f[w+148>>2]|0)-(f[w+140>>2]|0)|0;d=x>>>0 >>0?w:x;c=c+-1|0}while((c|0)!=0);a=d<<2}x=Hc(a)|0;if(!((a|0)==0|(x|0)!=0)){z=0;return z|0}if(!e){w=x+4|0;s=h+-2|0;while(1){j=g;g=g+-136|0;v=f[j>>2]|0;r=(f[j+8>>2]|0)-v|0;l=f[j+4>>2]|0;t=(f[j+12>>2]|0)-l|0;u=(f[j+-128>>2]|0)-(f[g>>2]|0)|0;j=(f[j+-124>>2]|0)-(f[j+-132>>2]|0)|0;v=v&1;l=l&1;m=t-j|0;q=(r|0)>0;a:do if(q){i=(j|0)==0;n=(m|0)==0;o=w+(0-l<<2)|0;p=X(j,z)|0;k=x+(l<<2)|0;if((t|0)>0){h=0;while(1){e=y+(h<<2)|0;a=0;do{d=e+((X(a,z)|0)<<2)|0;f[x+(a<<2)>>2]=f[d>>2];a=a+1|0}while((a|0)!=(t|0));Va[b&3](x,m,j,l);if(!i){a=e;c=j;d=k;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}}if(!n){a=e+(p<<2)|0;c=m;d=o;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}}h=h+1|0;if((h|0)==(r|0))break a}}if(i){a=0;while(1){Va[b&3](x,m,0,l);if(!n){c=y+(a<<2)+(p<<2)|0;d=m;e=o;while(1){d=d+-1|0;f[c>>2]=f[e>>2];if(!d)break;else{c=c+(z<<2)|0;e=e+8|0}}}a=a+1|0;if((a|0)==(r|0))break a}}else h=0;do{e=y+(h<<2)|0;Va[b&3](x,m,j,l);a=e;c=j;d=k;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}if(!n){a=e+(p<<2)|0;c=m;d=o;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}}h=h+1|0}while((h|0)!=(r|0))}while(0);k=r-u|0;b:do if((t|0)>0){i=(u|0)>0;j=x+(v<<2)|0;l=(k|0)>0;m=w+(0-v<<2)|0;if(q){h=0;while(1){e=y+((X(h,z)|0)<<2)|0;a=0;do{f[x+(a<<2)>>2]=f[e+(a<<2)>>2];a=a+1|0}while((a|0)!=(r|0));Va[b&3](x,k,u,v);if(i){a=e;c=0;d=j;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(u|0))break;else{a=a+4|0;d=d+8|0}}}if(l){a=e+(u<<2)|0;c=0;d=m;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(k|0))break;else{a=a+4|0;d=d+8|0}}}h=h+1|0;if((h|0)==(t|0))break b}}if(i)h=0;else{a=0;while(1){Va[b&3](x,k,u,v);if(l){c=y+((X(a,z)|0)<<2)+(u<<2)|0;d=0;e=m;while(1){f[c>>2]=f[e>>2];d=d+1|0;if((d|0)==(k|0))break;else{c=c+4|0;e=e+8|0}}}a=a+1|0;if((a|0)==(t|0))break b}}do{e=y+((X(h,z)|0)<<2)|0;Va[b&3](x,k,u,v);a=e;c=0;d=j;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(u|0))break;else{a=a+4|0;d=d+8|0}}if(l){a=e+(u<<2)|0;c=0;d=m;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(k|0))break;else{a=a+4|0;d=d+8|0}}}h=h+1|0}while((h|0)!=(t|0))}while(0);if(!s)break;else s=s+-1|0}}Mc(x);z=1;return z|0}function Ag(a,b){a=a|0;b=b|0;var c=0,d=0,e=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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+32|0;E=G+16|0;F=G;h=f[a+24>>2]|0;g=(f[h+8>>2]|0)-(f[h>>2]|0)|0;i=(f[h+12>>2]|0)-(f[h+4>>2]|0)|0;D=(f[a+8>>2]|0)-(f[a>>2]|0)|0;if((b|0)==1){F=1;u=G;return F|0}j=b+-1|0;e=(j|0)==0;if(e)b=0;else{b=h;c=0;d=j;do{B=b;b=b+136|0;C=(f[B+144>>2]|0)-(f[b>>2]|0)|0;C=c>>>0 >>0?C:c;B=(f[B+148>>2]|0)-(f[B+140>>2]|0)|0;c=C>>>0>>0?B:C;d=d+-1|0}while((d|0)!=0);b=c<<2}C=Jc(b)|0;f[E>>2]=C;if(!C){F=0;u=G;return F|0}f[F>>2]=C;if(!e){t=a+32|0;v=E+8|0;w=F+8|0;x=E+4|0;y=E+12|0;z=F+4|0;A=F+12|0;B=C+4|0;do{s=f[t>>2]|0;p=h;h=h+136|0;f[v>>2]=g;f[w>>2]=i;c=f[h>>2]|0;n=g;g=(f[p+144>>2]|0)-c|0;o=p+140|0;b=f[o>>2]|0;r=i;i=(f[p+148>>2]|0)-b|0;p=g-n|0;f[x>>2]=p;c=(c|0)%2|0;f[y>>2]=c;q=(i|0)==0;if(!q){k=g<<2;l=(n|0)==0;m=(p|0)==0;b=0;while(1){a=s+((X(b,D)|0)<<2)|0;if(l)d=0;else{c=C+(c<<2)|0;d=a;e=n;while(1){e=e+-1|0;f[c>>2]=f[d>>2];if(!e)break;else{c=c+8|0;d=d+4|0}}c=f[y>>2]|0;d=n}if(!m){e=B+(0-c<<2)|0;c=a+(d<<2)|0;d=p;while(1){d=d+-1|0;f[e>>2]=f[c>>2];if(!d)break;else{e=e+8|0;c=c+4|0}}}Bg(E);hj(a|0,C|0,k|0)|0;b=b+1|0;if((b|0)==(i|0))break;c=f[y>>2]|0}b=f[o>>2]|0}m=i-r|0;f[z>>2]=m;c=(b|0)%2|0;f[A>>2]=c;a:do if(g|0){k=(r|0)==0;l=(m|0)==0;if(q){b=0;while(1){a=s+(b<<2)|0;if(k)d=0;else{c=C+(c<<2)|0;d=a;e=r;while(1){e=e+-1|0;f[c>>2]=f[d>>2];if(!e)break;else{c=c+8|0;d=d+(D<<2)|0}}c=f[A>>2]|0;d=r}if(!l){e=B+(0-c<<2)|0;c=a+((X(d,D)|0)<<2)|0;d=m;while(1){d=d+-1|0;f[e>>2]=f[c>>2];if(!d)break;else{e=e+8|0;c=c+(D<<2)|0}}}Bg(F);b=b+1|0;if((b|0)==(g|0))break a;c=f[A>>2]|0}}else b=0;while(1){a=s+(b<<2)|0;if(k)d=0;else{c=C+(c<<2)|0;d=a;e=r;while(1){e=e+-1|0;f[c>>2]=f[d>>2];if(!e)break;else{c=c+8|0;d=d+(D<<2)|0}}c=f[A>>2]|0;d=r}if(!l){e=B+(0-c<<2)|0;c=a+((X(d,D)|0)<<2)|0;d=m;while(1){d=d+-1|0;f[e>>2]=f[c>>2];if(!d)break;else{e=e+8|0;c=c+(D<<2)|0}}}Bg(F);c=0;do{q=s+((X(c,D)|0)+b<<2)|0;f[q>>2]=f[C+(c<<2)>>2];c=c+1|0}while((c|0)!=(i|0));b=b+1|0;if((b|0)==(g|0))break a;c=f[A>>2]|0}}while(0);j=j+-1|0}while((j|0)!=0)}Kc(C);F=1;u=G;return F|0}function Bg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;d=f[a>>2]|0;e=f[a+4>>2]|0;g=f[a+8>>2]|0;if(!(f[a+12>>2]|0)){c=(e|0)>0;if(!(c|(g|0)>1))return;if((g|0)>0){b=e+-1|0;a=0;do{h=d+(a<<1<<2)|0;f[h>>2]=(f[h>>2]|0)-((f[d+(((a|0)<1?1:(((a|0)>(e|0)?e:a)<<1)+-1|0)<<2)>>2]|0)+2+(f[d+((((a|0)>=(e|0)?b:a)<<1|1)<<2)>>2]|0)>>2);a=a+1|0}while((a|0)!=(g|0))}if(!c)return;b=g+-1|0;a=0;do{c=a;a=a+1|0;h=d+((c<<1|1)<<2)|0;f[h>>2]=((f[d+(((a|0)>=(g|0)?b:a)<<1<<2)>>2]|0)+(f[d+(((c|0)>=(g|0)?b:c)<<1<<2)>>2]|0)>>1)+(f[h>>2]|0)}while((a|0)!=(e|0));return}if((e|0)==1&(g|0)==0){f[d>>2]=(f[d>>2]|0)/2|0;return}if((g|0)>0){b=e+-1|0;a=0;do{c=a;a=a+1|0;h=d+((c<<1|1)<<2)|0;f[h>>2]=(f[h>>2]|0)-((f[d+(((c|0)>=(e|0)?b:c)<<1<<2)>>2]|0)+2+(f[d+(((a|0)>=(e|0)?b:a)<<1<<2)>>2]|0)>>2)}while((a|0)!=(g|0))}if((e|0)<=0)return;b=g+-1|0;a=0;do{h=d+(a<<1<<2)|0;f[h>>2]=((f[d+(((a|0)<1?1:(((a|0)>(g|0)?g:a)<<1)+-1|0)<<2)>>2]|0)+(f[d+((((a|0)>=(g|0)?b:a)<<1|1)<<2)>>2]|0)>>1)+(f[h>>2]|0);a=a+1|0}while((a|0)!=(e|0));return}function Cg(a){a=a|0;return ((a|0)==0?0:(a+-1|0)>>>0<2?1:2)|0}function Dg(a,b){a=a|0;b=b|0;return +(+p[56+(b*80|0)+(a<<3)>>3])}function Eg(a){a=a|0;return zg(a,2)|0} +function Fg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;if(!d){h=(b|0)>0;if(!(h|(c|0)>1))return;if(h){e=c+-1|0;d=0;do{g=d;d=d+1|0;i=(f[a+(((d|0)>=(c|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((g|0)>=(c|0)?e:g)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,12993,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;g=a+((g<<1|1)<<2)|0;f[g>>2]=(f[g>>2]|0)-i}while((d|0)!=(b|0))}g=(c|0)>0;if(g){e=b+-1|0;d=0;do{j=(f[a+((((d|0)>=(b|0)?e:d)<<1|1)<<2)>>2]|0)+(f[a+(((d|0)<1?1:(((d|0)>(b|0)?b:d)<<1)+-1|0)<<2)>>2]|0)|0;j=Yi(j|0,((j|0)<0)<<31>>31|0,434,0)|0;j=Zi(j|0,I|0,4096,0)|0;j=ej(j|0,I|0,13)|0;i=a+(d<<1<<2)|0;f[i>>2]=(f[i>>2]|0)-j;d=d+1|0}while((d|0)!=(c|0))}if(h){e=c+-1|0;d=0;do{j=d;d=d+1|0;i=(f[a+(((d|0)>=(c|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((j|0)>=(c|0)?e:j)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,7233,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+((j<<1|1)<<2)|0;f[j>>2]=(f[j>>2]|0)+i}while((d|0)!=(b|0))}if(g){e=b+-1|0;d=0;do{i=(f[a+((((d|0)>=(b|0)?e:d)<<1|1)<<2)>>2]|0)+(f[a+(((d|0)<1?1:(((d|0)>(b|0)?b:d)<<1)+-1|0)<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,3633,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+(d<<1<<2)|0;f[j>>2]=(f[j>>2]|0)+i;d=d+1|0}while((d|0)!=(c|0))}if(h){d=0;do{j=a+((d<<1|1)<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,5038,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(b|0))}if(g)d=0;else return;do{j=a+(d<<1<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,6659,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(c|0));return}else{h=(c|0)>0;if(!((b|0)>1|h))return;g=(b|0)>0;if(g){e=c+-1|0;d=0;do{i=(f[a+(((d|0)<1?1:(((d|0)>(c|0)?c:d)<<1)+-1|0)<<2)>>2]|0)+(f[a+((((d|0)>=(c|0)?e:d)<<1|1)<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,12993,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+(d<<1<<2)|0;f[j>>2]=(f[j>>2]|0)-i;d=d+1|0}while((d|0)!=(b|0))}if(h){e=b+-1|0;d=0;do{j=d;d=d+1|0;i=(f[a+(((d|0)>=(b|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((j|0)>=(b|0)?e:j)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,434,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+((j<<1|1)<<2)|0;f[j>>2]=(f[j>>2]|0)-i}while((d|0)!=(c|0))}if(g){e=c+-1|0;d=0;do{i=(f[a+(((d|0)<1?1:(((d|0)>(c|0)?c:d)<<1)+-1|0)<<2)>>2]|0)+(f[a+((((d|0)>=(c|0)?e:d)<<1|1)<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,7233,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+(d<<1<<2)|0;f[j>>2]=(f[j>>2]|0)+i;d=d+1|0}while((d|0)!=(b|0))}if(h){e=b+-1|0;d=0;do{j=d;d=d+1|0;i=(f[a+(((d|0)>=(b|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((j|0)>=(b|0)?e:j)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,3633,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+((j<<1|1)<<2)|0;f[j>>2]=(f[j>>2]|0)+i}while((d|0)!=(c|0))}if(g){d=0;do{j=a+(d<<1<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,5038,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(b|0))}if(h)d=0;else return;do{j=a+((d<<1|1)<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,6659,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(c|0));return}}function Gg(a){a=a|0;return 0}function Hg(a,b){a=a|0;b=b|0;return +(+p[376+(b*80|0)+(a<<3)>>3])}function Ig(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=a+4|0;l=((f[k>>2]|0)*3|0)+-2|0;if(!l)return;m=a+20|0;n=a+24|0;j=0;do{if(!j){d=0;e=0}else{e=j+-1|0;d=((e>>>0)%3|0)+1|0;e=((e>>>0)/3|0)+1|0}g=(d|0)==0|(f[m>>2]|0)==0?0:(d+-1|0)>>>0<2?1:2;if(!(f[n>>2]|0))c=1.0;else c=+(1< >2]|0)+~e<<3)>>3];i=~~+J(+(c*8192.0));h=g+b|0;if((i|0)>1){d=i;g=0;while(1)if(d>>>0>3){d=d>>>1;g=g+1|0}else{d=i;e=0;break}while(1)if(d>>>0>3){d=d>>>1;e=e+1|0}else break;e=10-e|0;d=g+-12|0}else{e=11;d=-13}f[a+28+(j<<3)+4>>2]=((e|0)<0?i>>0-e:i< >2]=h-d;j=j+1|0}while((j|0)!=(l|0));return}function Jg(a,b){a=a|0;b=b|0;var c=0,d=0,e=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,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;S=u;u=u+32|0;Q=S+16|0;R=S;j=f[a+24>>2]|0;g=f[j+8>>2]|0;h=f[j>>2]|0;n=f[j+12>>2]|0;o=f[j+4>>2]|0;O=a+8|0;l=f[O>>2]|0;m=f[a>>2]|0;P=l-m|0;i=b+-1|0;e=(i|0)==0;if(e)b=80;else{b=j;c=0;d=i;do{L=b;b=b+136|0;M=(f[L+144>>2]|0)-(f[b>>2]|0)|0;M=c>>>0 >>0?M:c;L=(f[L+148>>2]|0)-(f[L+140>>2]|0)|0;c=M>>>0 >>0?L:M;d=d+-1|0}while((d|0)!=0);b=(c<<4)+80|0}k=Jc(b)|0;f[Q>>2]=k;if(!k){R=0;u=S;return R|0}f[R>>2]=k;a:do if(e)b=k;else{z=a+32|0;A=a+12|0;B=a+4|0;C=Q+8|0;D=R+8|0;E=Q+4|0;F=Q+12|0;G=P<<2;H=P<<1;I=P*3|0;J=R+4|0;K=R+12|0;L=l-m<<2;M=m-l<<2;p=g-h|0;c=i;b=k;d=k;g=l;e=m;t=n-o|0;n=k;while(1){v=f[z>>2]|0;e=X((f[A>>2]|0)-(f[B>>2]|0)|0,g-e|0)|0;f[C>>2]=p;f[D>>2]=t;w=j+136|0;o=f[j+144>>2]|0;q=f[w>>2]|0;x=o-q|0;h=f[j+148>>2]|0;m=j+140|0;g=f[m>>2]|0;y=h-g|0;f[E>>2]=x-p;f[F>>2]=(q|0)%2|0;do if((y|0)>3){k=g+-1-h|0;k=(h+4+((k|0)>-8?k:-8)-g|0)>>>2;l=v+(G<<2)+((X(L,k)|0)<<2)|0;k=X(M,k)|0;if((x|0)>0){g=y;h=e;i=v}else{g=y;h=e;i=v;while(1){Kg(Q,i,P,h);Lg(Q);if((g|0)>7){g=g+-4|0;h=h-G|0;i=i+(G<<2)|0}else break}e=M+e+k|0;h=l;break}while(1){Kg(Q,i,P,h);Lg(Q);j=x;do{s=j;j=j+-1|0;f[i+(j<<2)>>2]=f[n+(j<<4)>>2];f[i+(j+P<<2)>>2]=f[n+(j<<4)+4>>2];f[i+(j+H<<2)>>2]=f[n+(j<<4)+8>>2];f[i+(j+I<<2)>>2]=f[n+(j<<4)+12>>2]}while((s|0)>1);if((g|0)>7){g=g+-4|0;h=h-G|0;i=i+(G<<2)|0}else break}e=M+e+k|0;h=l}else h=v;while(0);b:do if(!(y&3)){s=n;N=22}else{Kg(Q,h,P,e);Lg(Q);e=x+-1|0;if((x|0)<=0){l=y-t|0;f[J>>2]=l;k=(f[m>>2]|0)%2|0;f[K>>2]=k;m=v;break}g=f[Q>>2]|0;switch(y&3){case 3:{b=e;while(1){f[h+(b+H<<2)>>2]=f[g+(b<<4)+8>>2];f[h+(b+P<<2)>>2]=f[g+(b<<4)+4>>2];f[h+(b<<2)>>2]=f[g+(b<<4)>>2];if((b|0)>0)b=b+-1|0;else{b=g;s=g;N=22;break}}break}case 2:{b=e;while(1){f[h+(b+P<<2)>>2]=f[g+(b<<4)+4>>2];f[h+(b<<2)>>2]=f[g+(b<<4)>>2];if((b|0)>0)b=b+-1|0;else{b=g;s=g;N=22;break}}break}case 1:{b=e;while(1){f[h+(b<<2)>>2]=f[g+(b<<4)>>2];if((b|0)>0)b=b+-1|0;else{b=g;s=g;N=22;break}}break}default:{b=g;s=g;N=22;break b}}}while(0);do if((N|0)==22){N=0;r=y-t|0;f[J>>2]=r;p=(f[m>>2]|0)%2|0;f[K>>2]=p;if((x|0)>3){n=q+-1-o|0;o=o+4+((n|0)>-8?n:-8)-q&-4;if(!y){k=(t|0)>0;l=X(t,P)|0;m=0-p|0;n=(r|0)>0;i=v;j=x;while(1){d=f[R>>2]|0;g=d+(p<<4)|0;if(k){e=0;do{q=g+(e<<1<<4)|0;h=i+((X(e,P)|0)<<2)|0;f[q>>2]=f[h>>2];f[q+4>>2]=f[h+4>>2];f[q+8>>2]=f[h+8>>2];f[q+12>>2]=f[h+12>>2];e=e+1|0}while((e|0)!=(t|0))}g=i+(l<<2)|0;h=d+16+(m<<4)|0;if(n){e=0;do{q=h+(e<<1<<4)|0;T=g+((X(e,P)|0)<<2)|0;f[q>>2]=f[T>>2];f[q+4>>2]=f[T+4>>2];f[q+8>>2]=f[T+8>>2];f[q+12>>2]=f[T+12>>2];e=e+1|0}while((e|0)!=(r|0))}Lg(R);if((j|0)>7){i=i+16|0;j=j+-4|0}else break}m=v+16+(o<<2)|0;k=p;l=r;n=s;break}j=f[D>>2]|0;k=(j|0)>0;l=X(j,P)|0;m=0-p|0;n=(r|0)>0;h=v;i=x;while(1){g=d+(p<<4)|0;if(k){e=0;do{T=g+(e<<1<<4)|0;t=h+((X(e,P)|0)<<2)|0;f[T>>2]=f[t>>2];f[T+4>>2]=f[t+4>>2];f[T+8>>2]=f[t+8>>2];f[T+12>>2]=f[t+12>>2];e=e+1|0}while((e|0)!=(j|0))}g=h+(l<<2)|0;e=d+16+(m<<4)|0;if(n){d=0;do{T=e+(d<<1<<4)|0;t=g+((X(d,P)|0)<<2)|0;f[T>>2]=f[t>>2];f[T+4>>2]=f[t+4>>2];f[T+8>>2]=f[t+8>>2];f[T+12>>2]=f[t+12>>2];d=d+1|0}while((d|0)!=(r|0))}Lg(R);e=0;do{T=h+((X(e,P)|0)<<2)|0;d=f[R>>2]|0;t=d+(e<<4)|0;f[T>>2]=f[t>>2];f[T+4>>2]=f[t+4>>2];f[T+8>>2]=f[t+8>>2];f[T+12>>2]=f[t+12>>2];e=e+1|0}while((e|0)!=(y|0));if((i|0)>7){h=h+16|0;i=i+-4|0}else break}m=v+16+(o<<2)|0;k=p;l=r;n=s}else{m=v;k=p;l=r;n=s}}while(0);i=x&3;if(i){j=f[R>>2]|0;e=j+(k<<4)|0;g=f[D>>2]|0;if((g|0)>0){h=i<<2;d=0;do{hj(e+(d<<1<<4)|0,m+((X(d,P)|0)<<2)|0,h|0)|0;d=d+1|0}while((d|0)!=(g|0))}h=m+((X(g,P)|0)<<2)|0;e=j+16+(0-k<<4)|0;if((l|0)>0){g=i<<2;d=0;do{hj(e+(d<<1<<4)|0,h+((X(d,P)|0)<<2)|0,g|0)|0;d=d+1|0}while((d|0)!=(l|0))}Lg(R);if(!y)d=j;else{e=i<<2;d=0;do{hj(m+((X(d,P)|0)<<2)|0,j+(d<<4)|0,e|0)|0;d=d+1|0}while((d|0)!=(y|0));d=j}}c=c+-1|0;if(!c)break a;p=x;j=w;g=f[O>>2]|0;e=f[a>>2]|0;t=y}}while(0);Kc(b);T=1;u=S;return T|0}function Kg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=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;h=f[a>>2]|0;j=f[a+12>>2]|0;g=h+(j<<4)|0;l=f[a+8>>2]|0;m=c*3|0;q=h+16+(0-j<<4)|0;n=f[a+4>>2]|0;if(((l+m|0)<(d|0)?(b&15|0)==0:0)?((g|c)&15|0)==0:0){if((l|0)>0){a=0;do{g=a<<3;f[h+(j<<4)+(g<<2)>>2]=f[b+(a<<2)>>2];r=a+c|0;f[h+(j<<4)+((g|1)<<2)>>2]=f[b+(r<<2)>>2];r=r+c|0;f[h+(j<<4)+((g|2)<<2)>>2]=f[b+(r<<2)>>2];f[h+(j<<4)+((g|3)<<2)>>2]=f[b+(r+c<<2)>>2];a=a+1|0}while((a|0)!=(l|0))}}else e=2;if((e|0)==2?(l|0)>0:0){a=0;do{e=a<<3;f[h+(j<<4)+(e<<2)>>2]=f[b+(a<<2)>>2];g=a+c|0;if(((g|0)<(d|0)?(f[h+(j<<4)+((e|1)<<2)>>2]=f[b+(g<<2)>>2],i=g+c|0,(i|0)<(d|0)):0)?(f[h+(j<<4)+((e|2)<<2)>>2]=f[b+(i<<2)>>2],k=i+c|0,(k|0)<(d|0)):0)f[h+(j<<4)+((e|3)<<2)>>2]=f[b+(k<<2)>>2];a=a+1|0}while((a|0)!=(l|0))}h=b+(l<<2)|0;b=d-l|0;if(((n+m|0)<(b|0)?(h&15|0)==0:0)?((q|c)&15|0)==0:0){if((n|0)>0)a=0;else return;do{r=a<<3;f[q+(r<<2)>>2]=f[h+(a<<2)>>2];p=a+c|0;f[q+((r|1)<<2)>>2]=f[h+(p<<2)>>2];p=p+c|0;f[q+((r|2)<<2)>>2]=f[h+(p<<2)>>2];f[q+((r|3)<<2)>>2]=f[h+(p+c<<2)>>2];a=a+1|0}while((a|0)!=(n|0));return}if((n|0)>0)a=0;else return;do{e=a<<3;f[q+(e<<2)>>2]=f[h+(a<<2)>>2];g=a+c|0;if(((g|0)<(b|0)?(f[q+((e|1)<<2)>>2]=f[h+(g<<2)>>2],o=g+c|0,(o|0)<(b|0)):0)?(f[q+((e|2)<<2)>>2]=f[h+(o<<2)>>2],p=o+c|0,(p|0)<(b|0)):0)f[q+((e|3)<<2)>>2]=f[h+(p<<2)>>2];a=a+1|0}while((a|0)!=(n|0));return}function Lg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0.0,o=0;do if(!(f[a+12>>2]|0)){d=f[a+8>>2]|0;if((f[a+4>>2]|0)>0){b=f[a>>2]|0;if((d|0)>0){e=0;c=1;g=b;i=9;break}else{e=0;h=1;g=b;break}}if((d|0)>1){c=1;b=0;i=7}else return}else{d=f[a+8>>2]|0;if((d|0)<=0)if((f[a+4>>2]|0)>1){e=1;h=0;g=f[a>>2]|0;break}else return;else{c=0;b=1;i=7}}while(0);if((i|0)==7){e=b;g=f[a>>2]|0;i=9}if((i|0)==9){b=0;do{i=b<<3;o=g+(e<<4)+(i<<2)|0;l=g+(e<<4)+((i|1)<<2)|0;m=+n[l>>2];h=g+(e<<4)+((i|2)<<2)|0;k=+n[h>>2];i=g+(e<<4)+((i|3)<<2)|0;j=+n[i>>2];n[o>>2]=+n[o>>2]*1.2301740646362305;n[l>>2]=m*1.2301740646362305;n[h>>2]=k*1.2301740646362305;n[i>>2]=j*1.2301740646362305;b=b+1|0}while((b|0)!=(d|0));h=c}c=f[a+4>>2]|0;if((c|0)>0){b=0;do{o=b<<3;i=g+(h<<4)+(o<<2)|0;a=g+(h<<4)+((o|1)<<2)|0;j=+n[a>>2];l=g+(h<<4)+((o|2)<<2)|0;k=+n[l>>2];o=g+(h<<4)+((o|3)<<2)|0;m=+n[o>>2];n[i>>2]=+n[i>>2]*1.625732421875;n[a>>2]=j*1.625732421875;n[l>>2]=k*1.625732421875;n[o>>2]=m*1.625732421875;b=b+1|0}while((b|0)!=(c|0))}b=g+(h<<4)|0;a=g+(e<<4)|0;g=a+16|0;i=c-e|0;i=(d|0)<(i|0)?d:i;Mg(b,g,d,i,-.4435068666934967);l=b+16|0;o=d-h|0;o=(c|0)<(o|0)?c:o;Mg(a,l,c,o,-.8829110860824585);Mg(b,g,d,i,.05298011749982834);Mg(a,l,c,o,1.5861343145370483);return}function Mg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0.0,g=0.0,h=0.0,i=0.0,j=0,k=0,l=0,m=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0,x=0.0;if((d|0)>0){m=d<<1;l=m+-2|0;j=b;k=0;g=+n[a>>2];h=+n[a+4>>2];i=+n[a+8>>2];f=+n[a+12>>2];while(1){w=j+-16|0;t=j+-12|0;v=+n[t>>2];q=j+-8|0;s=+n[q>>2];a=j+-4|0;p=+n[a>>2];x=g;g=+n[j>>2];u=h;h=+n[j+4>>2];r=i;i=+n[j+8>>2];o=f;f=+n[j+12>>2];n[w>>2]=+n[w>>2]+(x+g)*e;n[t>>2]=v+(u+h)*e;n[q>>2]=s+(r+i)*e;n[a>>2]=p+(o+f)*e;k=k+1|0;if((k|0)==(d|0))break;else j=j+32|0}a=b+(l<<4)|0;b=b+(m<<4)|0}if((d|0)>=(c|0))return;f=e+e;g=f*+n[a>>2];h=f*+n[a+4>>2];i=f*+n[a+8>>2];f=f*+n[a+12>>2];while(1){m=b+-16|0;q=b+-12|0;u=+n[q>>2];t=b+-8|0;v=+n[t>>2];w=b+-4|0;x=+n[w>>2];n[m>>2]=g+ +n[m>>2];n[q>>2]=h+u;n[t>>2]=i+v;n[w>>2]=f+x;d=d+1|0;if((d|0)==(c|0))break;else b=b+32|0}return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0.0,h=0,i=0,j=0,k=0,l=0.0,m=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;x=c<<2;y=Hc(c<<4)|0;if(!y){z=0;return z|0}z=y+x|0;ij(y|0,0,x|0)|0;t=c+-1|0;u=(c|0)==0;if(!u){d=y;e=0;while(1){f[d>>2]=e;e=e+1|0;if((e|0)==(c|0))break;else d=d+4|0}}a:do if(t|0){m=1;o=a;p=0;d=0;q=y;s=c;while(1){r=o+(p<<2)|0;if(p>>>0 >>0){e=r;g=0.0;h=p}else break;while(1){l=+n[e>>2];l=l>0.0?l:-l;w=l>g;d=w?h:d;g=w?l:g;h=h+1|0;if((h|0)==(c|0))break;else e=e+(c<<2)|0}if(g==0.0)break;if((d|0)!=(p|0)){w=q+(d<<2)+(0-p<<2)|0;v=f[q>>2]|0;f[q>>2]=f[w>>2];f[w>>2]=v;w=o+((X(d-p|0,c)|0)<<2)|0;hj(z|0,w|0,x|0)|0;hj(w|0,o|0,x|0)|0;hj(o|0,z|0,x|0)|0}g=+n[r>>2];if(m>>>0 >>0){h=r+(c<<2)|0;j=m;while(1){l=+n[h>>2]/g;n[h>>2]=l;e=m;i=h;k=r;do{k=k+4|0;i=i+4|0;n[i>>2]=+n[i>>2]-l*+n[k>>2];e=e+1|0}while((e|0)!=(c|0));j=j+1|0;if((j|0)==(c|0))break;else h=h+(s<<2)+(p<<2)|0}}p=p+1|0;if(p>>>0>=t>>>0)break a;else{m=m+1|0;o=o+(c<<2)|0;q=q+4|0;s=s+-1|0}}Mc(y);z=0;return z|0}while(0);v=z+(c<<2)|0;w=z+(c<<1<<2)|0;if(!u){q=v+(c<<2)|0;r=w+(c<<2)|0;s=a+((X(c,c)|0)<<2)+-4|0;t=~c;p=0;while(1){ij(z|0,0,x|0)|0;n[z+(p<<2)>>2]=1.0;i=y;j=a;k=w;m=0;o=1;while(1){if(!m)g=0.0;else{d=j;e=w;g=0.0;h=1;while(1){g=g+ +n[d>>2]*+n[e>>2];h=h+1|0;if((h|0)==(o|0))break;else{d=d+4|0;e=e+4|0}}}n[k>>2]=+n[z+(f[i>>2]<<2)>>2]-g;m=m+1|0;if((m|0)==(c|0)){i=c;j=s;k=q;m=r;break}else{i=i+4|0;j=j+(c<<2)|0;k=k+4|0;o=o+1|0}}while(1){m=m+-4|0;l=+n[j>>2];if(i>>>0 >>0){d=j;e=k;g=0.0;h=i;while(1){d=d+4|0;g=g+ +n[d>>2]*+n[e>>2];h=h+1|0;if((h|0)==(c|0))break;else e=e+4|0}}else g=0.0;k=k+-4|0;i=i+-1|0;n[k>>2]=(+n[m>>2]-g)/l;if(!i){d=b;e=0;break}else j=j+(t<<2)|0}while(1){f[d>>2]=f[v+(e<<2)>>2];e=e+1|0;if((e|0)==(c|0))break;else d=d+(c<<2)|0}p=p+1|0;if((p|0)==(c|0))break;else b=b+4|0}}Mc(y);z=1;return z|0}function Og(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;g=Ic(1,44)|0;if(!g){g=0;return g|0}h=_g()|0;f[g>>2]=h;if(!h){$g(0);f[g>>2]=0;h=g+4|0;ph(f[h>>2]|0);f[h>>2]=0;if((f[g+40>>2]|0)==0?(b=g+8|0,c=f[b>>2]|0,c|0):0){Kc(c);f[b>>2]=0}b=g+12|0;c=f[b>>2]|0;if(c|0){Kc(c);f[b>>2]=0}Mc(g);h=0;return h|0}h=oh()|0;b=g+4|0;f[b>>2]=h;if(h|0){f[g+40>>2]=a;h=g;return h|0}$g(f[g>>2]|0);f[g>>2]=0;ph(f[b>>2]|0);f[b>>2]=0;if((f[g+40>>2]|0)==0?(d=g+8|0,e=f[d>>2]|0,e|0):0){Kc(e);f[d>>2]=0}b=g+12|0;c=f[b>>2]|0;if(c|0){Kc(c);f[b>>2]=0}Mc(g);h=0;return h|0}function Pg(a){a=a|0;var b=0,c=0,d=0;if(!a)return;$g(f[a>>2]|0);f[a>>2]=0;d=a+4|0;ph(f[d>>2]|0);f[d>>2]=0;if((f[a+40>>2]|0)==0?(b=a+8|0,c=f[b>>2]|0,c|0):0){Kc(c);f[b>>2]=0}b=a+12|0;c=f[b>>2]|0;if(c|0){Kc(c);f[b>>2]=0}Mc(a);return}function Qg(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,i=0,k=0,l=0,m=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,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;Aa=(f[b+8>>2]|0)-(f[b>>2]|0)|0;Ba=b+20|0;e=f[Ba>>2]|0;if(!e){Ba=1;return Ba|0}sa=b+24|0;ta=c+808|0;ua=c+16|0;va=a+4|0;xa=a+8|0;ya=a+16|0;za=a+20|0;ra=c+20|0;oa=b+32|0;pa=a+12|0;qa=a+32|0;na=0;c=e;a:while(1){la=f[sa>>2]|0;ma=la+(na*136|0)+24|0;b=f[ma>>2]|0;if(b){ia=la+(na*136|0)+16|0;ja=la+(na*136|0)+20|0;ka=na+-1|0;ha=0;e=f[ja>>2]|0;c=f[ia>>2]|0;do{if(X(e,c)|0){ca=la+(na*136|0)+28+(ha*36|0)+20|0;da=la+(na*136|0)+28+(ha*36|0)+16|0;ea=la+(na*136|0)+28+(ha*36|0)|0;fa=la+(na*136|0)+28+(ha*36|0)+4|0;ga=la+(na*136|0)+28+(ha*36|0)+32|0;ba=0;do{b=f[ca>>2]|0;$=b+(ba*40|0)+16|0;aa=b+(ba*40|0)+20|0;if(X(f[aa>>2]|0,f[$>>2]|0)|0){_=b+(ba*40|0)+24|0;Z=0;do{c=f[_>>2]|0;R=f[da>>2]|0;e=f[ta>>2]|0;b=f[ua>>2]|0;S=f[va>>2]|0;T=f[a>>2]|0;U=c+(Z*56|0)+8|0;Y=c+(Z*56|0)+12|0;if(!(Rg(a,(f[c+(Z*56|0)+16>>2]|0)-(f[U>>2]|0)|0,(f[c+(Z*56|0)+20>>2]|0)-(f[Y>>2]|0)|0)|0)){c=0;F=219;break a}V=c+(Z*56|0)+24|0;g=f[V>>2]|0;hh(T);ih(T,18,0,46);ih(T,17,0,3);ih(T,0,0,4);W=c+(Z*56|0)+48|0;if(f[W>>2]|0){M=c+(Z*56|0)+4|0;N=(b&1|0)!=0;O=(b&2|0)==0;P=(b&8|0)==0;Q=R<<8;L=(b&32|0)==0;K=0;b=2;c=g+e|0;do{i=f[M>>2]|0;J=N&(b>>>0<2?(c|0)<=((f[V>>2]|0)+-4|0):0);e=f[i+(K<<5)>>2]|0;b:do if(e){e=(f[e>>2]|0)+(f[i+(K<<5)+4>>2]|0)|0;g=f[i+(K<<5)+16>>2]|0;if(!J){if(!(mh(T,e,g)|0)){c=0;F=219;break a}}else qh(S,e,g);H=i+(K<<5)+12|0;if((c|0)>0&(f[H>>2]|0)!=0){I=O|J;G=0;while(1){c:do switch(b|0){case 0:{if(J){v=1< >1|v;e=f[za>>2]|0;if(!e)break c;u=0-v|0;t=0;g=f[ya>>2]|0;while(1){s=t;t=t+4|0;if(!g)g=0;else{q=(s|0)==-4;r=s|3;p=0;do{d:do if(!q)if(P){e=s;do{if(e>>>0>=(f[za>>2]|0)>>>0)break d;g=f[pa>>2]|0;l=e;e=e+1|0;i=(X(f[qa>>2]|0,e)|0)+p|0;k=g+(i+1<<1)|0;l=(f[xa>>2]|0)+((X(f[ya>>2]|0,l)|0)+p<<2)|0;m=f[va>>2]|0;F=d[k>>1]|0;if((F&255|0)!=0&(F&20480|0)==0){if(rh(m)|0){E=rh(m)|0;f[l>>2]=E|0?u:v;F=f[qa>>2]|0;D=k+(0-F<<1)|0;F=k+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=g+(i<<1)|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[k>>1]=d[k>>1]|4096;D=k+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[k>>1]=d[k>>1]|16384}}while(e>>>0 >>0)}else{e=s;do{g=f[za>>2]|0;if(e>>>0>=g>>>0)break d;i=f[pa>>2]|0;E=e;e=e+1|0;k=(X(f[qa>>2]|0,e)|0)+p|0;l=i+(k+1<<1)|0;m=(f[xa>>2]|0)+((X(f[ya>>2]|0,E)|0)+p<<2)|0;o=f[va>>2]|0;F=d[l>>1]|0;F=(E|0)==(r|0)|(E|0)==(g+-1|0)?F&-1095:F;if((F&255|0)!=0&(F&20480|0)==0){if(rh(o)|0){E=rh(o)|0;f[m>>2]=E|0?u:v;F=f[qa>>2]|0;D=l+(0-F<<1)|0;F=l+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=i+(k<<1)|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[l>>1]=d[l>>1]|4096;D=l+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[l>>1]=d[l>>1]|16384}}while(e>>>0 >>0)}while(0);p=p+1|0;g=f[ya>>2]|0}while(p>>>0 >>0);e=f[za>>2]|0}if(t>>>0>=e>>>0){F=187;break c}}}if(!P){w=1< >1|w;e=f[za>>2]|0;if(!e){F=187;break c}x=0-w|0;g=f[ya>>2]|0;v=0;i=g;while(1){u=v;v=v+4|0;if(!g)g=0;else{s=(u|0)==-4;t=u|3;r=0;while(1){if(s)e=i;else{k=u;do{e=f[za>>2]|0;if(k>>>0>=e>>>0)break;l=f[pa>>2]|0;F=k;k=k+1|0;m=(X(f[qa>>2]|0,k)|0)+r|0;o=l+(m+1<<1)|0;p=(f[xa>>2]|0)+((X(f[ya>>2]|0,F)|0)+r<<2)|0;q=f[a>>2]|0;g=d[o>>1]|0;e=(F|0)==(t|0)|(F|0)==(e+-1|0)?g&-1095:g;g=e&255;if((g|0)!=0&(e&20480|0)==0){i=q+100|0;f[i>>2]=q+24+(h[20356+(g|Q)>>0]<<2);if(nh(q)|0){E=e>>>4&255;f[i>>2]=q+24+(h[21380+E>>0]<<2);F=nh(q)|0;E=F^h[21636+E>>0];f[p>>2]=E|0?x:w;F=f[qa>>2]|0;D=o+(0-F<<1)|0;F=o+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=l+(m<<1)|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[o>>1]=d[o>>1]|4096;D=o+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[o>>1]=d[o>>1]|16384}}while(k>>>0 >>0);e=f[ya>>2]|0}r=r+1|0;if(r>>>0>=e>>>0)break;else i=e}i=e;g=e;e=f[za>>2]|0}if(v>>>0>=e>>>0){F=187;break c}}}g=f[xa>>2]|0;e=(f[pa>>2]|0)+2|0;v=1< >1|v;k=f[za>>2]|0;if(k>>>0>3){u=0-v|0;i=f[ya>>2]|0;m=0;l=i;do{if(!i)i=0;else{t=0;i=l;do{q=g+(t<<2)|0;k=f[qa>>2]|0;r=e+(t<<1)+(k<<1)|0;p=f[a>>2]|0;l=d[r>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=p+100|0;f[i>>2]=p+24+(h[20356+(o|Q)>>0]<<2);if(!(nh(p)|0))k=f[qa>>2]|0;else{E=l>>>4&255;f[i>>2]=p+24+(h[21380+E>>0]<<2);k=nh(p)|0;E=k^h[21636+E>>0];f[q>>2]=E|0?u:v;k=f[qa>>2]|0;D=r+(0-k<<1)|0;F=r+(k<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;p=f[a>>2]|0}q=q+(i<<2)|0;r=r+(k<<1)|0;l=d[r>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=p+100|0;f[i>>2]=p+24+(h[20356+(o|Q)>>0]<<2);if(!(nh(p)|0))k=f[qa>>2]|0;else{E=l>>>4&255;f[i>>2]=p+24+(h[21380+E>>0]<<2);k=nh(p)|0;E=k^h[21636+E>>0];f[q>>2]=E|0?u:v;k=f[qa>>2]|0;D=r+(0-k<<1)|0;F=r+(k<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;p=f[a>>2]|0}s=q+(i<<2)|0;r=r+(k<<1)|0;l=d[r>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=p+100|0;f[i>>2]=p+24+(h[20356+(o|Q)>>0]<<2);if(!(nh(p)|0))k=f[qa>>2]|0;else{E=l>>>4&255;f[i>>2]=p+24+(h[21380+E>>0]<<2);k=nh(p)|0;E=k^h[21636+E>>0];f[s>>2]=E|0?u:v;k=f[qa>>2]|0;D=r+(0-k<<1)|0;F=r+(k<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;q=f[a>>2]|0}else q=p;p=s+(i<<2)|0;k=r+(k<<1)|0;l=d[k>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=q+100|0;f[i>>2]=q+24+(h[20356+(o|Q)>>0]<<2);if(nh(q)|0){E=l>>>4&255;f[i>>2]=q+24+(h[21380+E>>0]<<2);F=nh(q)|0;E=F^h[21636+E>>0];f[p>>2]=E|0?u:v;F=f[qa>>2]|0;D=k+(0-F<<1)|0;F=k+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=k+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[k>>1]=d[k>>1]|4096;D=k+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[k>>1]=d[k>>1]|16384;i=f[ya>>2]|0}t=t+1|0}while(t>>>0>>0);l=i;k=f[za>>2]|0}g=g+(i<<2<<2)|0;e=e+(f[qa>>2]<<2<<1)|0;m=m+4|0}while(m>>>0<(k&-4)>>>0);i=l}else{m=0;i=f[ya>>2]|0}if(!i){F=187;break c}u=0-v|0;t=0;do{if(m>>>0 >>0){q=m;r=e+(t<<1)|0;s=g+(t<<2)|0;while(1){r=r+(f[qa>>2]<<1)|0;l=f[a>>2]|0;o=d[r>>1]|0;p=o&255;if((p|0)!=0&(o&20480|0)==0){i=l+100|0;f[i>>2]=l+24+(h[20356+(p|Q)>>0]<<2);if(nh(l)|0){E=o>>>4&255;f[i>>2]=l+24+(h[21380+E>>0]<<2);F=nh(l)|0;E=F^h[21636+E>>0];f[s>>2]=E|0?u:v;F=f[qa>>2]|0;D=r+(0-F<<1)|0;F=r+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;k=f[za>>2]|0}q=q+1|0;if(q>>>0>=k>>>0)break;else s=s+(i<<2)|0}}t=t+1|0}while(t>>>0>>0);F=187;break}case 1:{if(J){p=1< >1;q=0-p|0;e=f[za>>2]|0;if(!e)break c;g=f[ya>>2]|0;o=0;i=g;while(1){m=o;o=o+4|0;do if(!g){k=i;g=0}else{if((m|0)==-4){k=i;g=i;break}else l=0;do{g=l;l=l+1|0;e=m;do{if(e>>>0>=(f[za>>2]|0)>>>0)break;k=e;e=e+1|0;i=(f[pa>>2]|0)+((X(f[qa>>2]|0,e)|0)+l<<1)|0;k=(f[xa>>2]|0)+((X(f[ya>>2]|0,k)|0)+g<<2)|0;if((d[i>>1]&20480)==4096){E=(rh(f[va>>2]|0)|0)!=0;E=E?p:q;F=f[k>>2]|0;f[k>>2]=((F|0)<0?0-E|0:E)+F;d[i>>1]=d[i>>1]|8192}}while(e>>>0 >>0);e=f[ya>>2]|0}while(l>>>0 >>0);k=e;g=e;e=f[za>>2]|0}while(0);if(o>>>0>=e>>>0){F=187;break c}else i=k}}if(!P){s=1< >1;t=0-s|0;e=f[za>>2]|0;if(!e){F=187;break c}g=f[ya>>2]|0;r=0;k=g;while(1){q=r;r=r+4|0;do if(!g){i=k;g=0}else{p=q|3;if((q|0)==-4){i=k;g=k;break}else o=0;do{i=o;o=o+1|0;g=q;do{e=f[za>>2]|0;if(g>>>0>=e>>>0)break;E=g;g=g+1|0;l=(f[pa>>2]|0)+((X(f[qa>>2]|0,g)|0)+o<<1)|0;m=(f[xa>>2]|0)+((X(f[ya>>2]|0,E)|0)+i<<2)|0;k=f[a>>2]|0;F=d[l>>1]|0;e=(E|0)==(p|0)|(E|0)==(e+-1|0)?F&-1095:F;if((e&20480|0)==4096){f[k+100>>2]=k+24+((e&8192|0?16:e&255|0?15:14)<<2);E=(nh(k)|0)!=0;E=E?s:t;F=f[m>>2]|0;f[m>>2]=((F|0)<0?0-E|0:E)+F;d[l>>1]=d[l>>1]|8192}}while(g>>>0 >>0);e=f[ya>>2]|0}while(o>>>0 >>0);i=e;g=e;e=f[za>>2]|0}while(0);if(r>>>0>=e>>>0){F=187;break c}else k=i}}g=f[xa>>2]|0;e=(f[pa>>2]|0)+2|0;t=1< >1;u=0-t|0;k=f[za>>2]|0;i=f[ya>>2]|0;if(k>>>0>3){m=0;l=i;do{if(!i)i=0;else{s=0;i=l;do{p=g+(s<<2)|0;o=f[qa>>2]|0;q=e+(s<<1)+(o<<1)|0;k=f[a>>2]|0;l=d[q>>1]|0;if((l&20480|0)==4096){f[k+100>>2]=k+24+((l&8192|0?16:l&255|0?15:14)<<2);i=(nh(k)|0)!=0;i=i?t:u;k=f[p>>2]|0;f[p>>2]=((k|0)<0?0-i|0:i)+k;d[q>>1]=d[q>>1]|8192;k=f[a>>2]|0;i=f[ya>>2]|0;o=f[qa>>2]|0}p=p+(i<<2)|0;q=q+(o<<1)|0;l=d[q>>1]|0;if((l&20480|0)==4096){f[k+100>>2]=k+24+((l&8192|0?16:l&255|0?15:14)<<2);i=(nh(k)|0)!=0;i=i?t:u;k=f[p>>2]|0;f[p>>2]=((k|0)<0?0-i|0:i)+k;d[q>>1]=d[q>>1]|8192;k=f[a>>2]|0;i=f[ya>>2]|0;o=f[qa>>2]|0}r=p+(i<<2)|0;q=q+(o<<1)|0;l=d[q>>1]|0;if((l&20480|0)==4096){f[k+100>>2]=k+24+((l&8192|0?16:l&255|0?15:14)<<2);i=(nh(k)|0)!=0;i=i?t:u;p=f[r>>2]|0;f[r>>2]=((p|0)<0?0-i|0:i)+p;d[q>>1]=d[q>>1]|8192;p=f[a>>2]|0;i=f[ya>>2]|0;k=f[qa>>2]|0}else{p=k;k=o}o=r+(i<<2)|0;k=q+(k<<1)|0;l=d[k>>1]|0;if((l&20480|0)==4096){f[p+100>>2]=p+24+((l&8192|0?16:l&255|0?15:14)<<2);F=(nh(p)|0)!=0;F=F?t:u;i=f[o>>2]|0;f[o>>2]=((i|0)<0?0-F|0:F)+i;d[k>>1]=d[k>>1]|8192;i=f[ya>>2]|0}s=s+1|0}while(s>>>0>>0);l=i;k=f[za>>2]|0}g=g+(i<<2<<2)|0;e=e+(f[qa>>2]<<2<<1)|0;m=m+4|0}while(m>>>0<(k&-4)>>>0);i=l}else m=0;if(!i){F=187;break c}else s=0;do{if(m>>>0 >>0){p=m;q=e+(s<<1)|0;r=g+(s<<2)|0;while(1){q=q+(f[qa>>2]<<1)|0;l=f[a>>2]|0;o=d[q>>1]|0;if((o&20480|0)==4096){f[l+100>>2]=l+24+((o&8192|0?16:o&255|0?15:14)<<2);k=(nh(l)|0)!=0;k=k?t:u;i=f[r>>2]|0;f[r>>2]=((i|0)<0?0-k|0:k)+i;d[q>>1]=d[q>>1]|8192;i=f[ya>>2]|0;k=f[za>>2]|0}p=p+1|0;if(p>>>0>=k>>>0)break;else r=r+(i<<2)|0}}s=s+1|0}while(s>>>0>>0);F=187;break}case 2:{D=f[a>>2]|0;E=1< >1|E;do if(P){i=f[xa>>2]|0;g=(f[pa>>2]|0)+2|0;e=f[za>>2]|0;if(e>>>0>3){u=D+92|0;v=D+100|0;w=D+96|0;x=0-E|0;F=f[ya>>2]|0;k=g;m=0;l=F;g=F;while(1){if(!l)l=0;else{q=m|1;r=q+1|0;s=m|3;t=q+3|0;p=0;do{g=i+(p<<2)|0;l=k+(p<<1)|0;F=f[pa>>2]|0;e=f[qa>>2]|0;p=p+1|0;B=F+((X(e,q)|0)+p<<1)|0;A=F+((X(e,r)|0)+p<<1)|0;C=F+((X(e,s)|0)+p<<1)|0;F=F+((X(e,t)|0)+p<<1)|0;e:do if(!((d[A>>1]|d[B>>1]|d[C>>1]|d[F>>1])&20735)){f[v>>2]=u;if(!(nh(D)|0))break;f[v>>2]=w;o=(nh(D)|0)<<1;o=o|(nh(D)|0);if(o>>>0>=4)break;g=g+((X(f[ya>>2]|0,o)|0)<<2)|0;e=l+((X(f[qa>>2]|0,o)|0)<<1)|0;l=o;while(1){if(l>>>0>=(f[za>>2]|0)>>>0)break e;e=e+(f[qa>>2]<<1)|0;if((l|0)==(o|0)){F=f[a>>2]|0;C=(j[e>>1]|0)>>>4&255;f[F+100>>2]=F+24+(h[21380+C>>0]<<2);F=nh(F)|0;C=F^h[21636+C>>0];f[g>>2]=C|0?x:E;F=f[qa>>2]|0;B=e+(0-F<<1)|0;F=e+(F<<1)|0;A=B+-2|0;d[A>>1]=d[A>>1]|2;d[B>>1]=d[B>>1]|d[3160+(C<<1)>>1];B=B+2|0;d[B>>1]=d[B>>1]|4;B=e+-2|0;d[B>>1]=d[B>>1]|d[3160+(C+2<<1)>>1];d[e>>1]=d[e>>1]|4096;B=e+2|0;d[B>>1]=d[B>>1]|d[3160+(C+4<<1)>>1];B=F+-2|0;d[B>>1]=d[B>>1]|1;d[F>>1]=d[F>>1]|d[3160+(C+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8;d[e>>1]=d[e>>1]&-16385}else Sg(a,e,g,R,E);l=l+1|0;if(l>>>0>=4)break;else g=g+(f[ya>>2]<<2)|0}}else{C=l+(e<<1)|0;Sg(a,C,g,R,E);F=g+(f[ya>>2]<<2)|0;C=C+(f[qa>>2]<<1)|0;Sg(a,C,F,R,E);F=F+(f[ya>>2]<<2)|0;C=C+(f[qa>>2]<<1)|0;Sg(a,C,F,R,E);Sg(a,C+(f[qa>>2]<<1)|0,F+(f[ya>>2]<<2)|0,R,E)}while(0);g=f[ya>>2]|0}while(p>>>0 >>0);l=g;e=f[za>>2]|0}i=i+(l<<2<<2)|0;k=k+(f[qa>>2]<<2<<1)|0;m=m+4|0;if(m>>>0>=(e&-4)>>>0){q=k;p=i;break}}}else{q=g;p=i;m=0;g=f[ya>>2]|0}if(!g)break;else o=0;do{if(m>>>0 >>0){i=q+(o<<1)|0;k=p+(o<<2)|0;l=m;while(1){i=i+(f[qa>>2]<<1)|0;Sg(a,i,k,R,E);g=f[ya>>2]|0;l=l+1|0;e=f[za>>2]|0;if(l>>>0>=e>>>0)break;else k=k+(g<<2)|0}}o=o+1|0}while(o>>>0 >>0)}else{e=f[za>>2]|0;if(!e)break;z=D+92|0;A=D+100|0;B=D+96|0;C=0-E|0;i=0;g=f[ya>>2]|0;do if(!g){i=i+4|0;g=0}else{u=i|3;v=i|1;w=v+1|0;x=v+3|0;y=i+4|0;t=0;while(1){do if(u>>>0 >>0){e=f[pa>>2]|0;g=f[qa>>2]|0;k=t+1|0;s=e+((X(g,v)|0)+k<<1)|0;if(d[s>>1]&20735){e=0;s=0;F=152;break}s=e+((X(g,w)|0)+k<<1)|0;if(d[s>>1]&20735){e=0;s=0;F=152;break}s=e+((X(g,u)|0)+k<<1)|0;if(d[s>>1]&20735){e=0;s=0;F=152;break}s=e+((X(g,x)|0)+k<<1)|0;if(d[s>>1]&20665){e=0;s=0;F=152;break}f[A>>2]=z;if(!(nh(D)|0))break;f[A>>2]=B;e=(nh(D)|0)<<1;e=e|(nh(D)|0);s=1;F=152}else{e=0;s=0;F=152}while(0);f:do if((F|0)==152){F=0;l=e+i|0;if(l>>>0 >>0)k=l;else break;do{e=f[za>>2]|0;if(k>>>0>=e>>>0)break f;m=f[pa>>2]|0;Ca=k;k=k+1|0;o=(X(f[qa>>2]|0,k)|0)+t|0;p=m+(o+1<<1)|0;q=(f[xa>>2]|0)+((X(f[ya>>2]|0,Ca)|0)+t<<2)|0;r=f[a>>2]|0;g=d[p>>1]|0;g=(Ca|0)==(u|0)|(Ca|0)==(e+-1|0)?g&-1095:g;do if(!(s&(Ca|0)==(l|0))){if(g&20480|0)break;e=r+100|0;f[e>>2]=r+24+(h[20356+(g&255|Q)>>0]<<2);if(nh(r)|0)F=158}else{e=r+100|0;F=158}while(0);if((F|0)==158){F=0;Ca=g>>>4&255;f[e>>2]=r+24+(h[21380+Ca>>0]<<2);r=nh(r)|0;r=r^h[21636+Ca>>0];f[q>>2]=r|0?C:E;Ca=f[qa>>2]|0;q=p+(0-Ca<<1)|0;Ca=p+(Ca<<1)|0;g=q+-2|0;d[g>>1]=d[g>>1]|2;d[q>>1]=d[q>>1]|d[3160+(r<<1)>>1];q=q+2|0;d[q>>1]=d[q>>1]|4;q=m+(o<<1)|0;d[q>>1]=d[q>>1]|d[3160+(r+2<<1)>>1];d[p>>1]=d[p>>1]|4096;q=p+2|0;d[q>>1]=d[q>>1]|d[3160+(r+4<<1)>>1];q=Ca+-2|0;d[q>>1]=d[q>>1]|1;d[Ca>>1]=d[Ca>>1]|d[3160+(r+6<<1)>>1];Ca=Ca+2|0;d[Ca>>1]=d[Ca>>1]|8}d[p>>1]=d[p>>1]&-16385}while(k>>>0 >>0)}while(0);t=t+1|0;g=f[ya>>2]|0;e=f[za>>2]|0;if(t>>>0>=g>>>0){i=y;break}}}while(i>>>0 >>0)}while(0);if(L){F=187;break c}f[D+100>>2]=D+96;nh(D)|0;nh(D)|0;nh(D)|0;nh(D)|0;F=187;break}default:F=187}while(0);do if((F|0)==187){F=0;if(I)break;hh(T);ih(T,18,0,46);ih(T,17,0,3);ih(T,0,0,4)}while(0);b=b+1|0;Ca=(b|0)==3;c=c+(Ca<<31>>31)|0;b=Ca?0:b;G=G+1|0;if(!((c|0)>0?G>>>0<(f[H>>2]|0)>>>0:0))break b}}}while(0);K=K+1|0}while(K>>>0<(f[W>>2]|0)>>>0)}c=(f[U>>2]|0)-(f[ea>>2]|0)|0;b=(f[Y>>2]|0)-(f[fa>>2]|0)|0;e=f[da>>2]|0;if(e&1){Ca=f[sa>>2]|0;c=(f[Ca+(ka*136|0)+8>>2]|0)+c-(f[Ca+(ka*136|0)>>2]|0)|0}if(e&2){Ca=f[sa>>2]|0;b=(f[Ca+(ka*136|0)+12>>2]|0)+b-(f[Ca+(ka*136|0)+4>>2]|0)|0}o=f[xa>>2]|0;p=f[ya>>2]|0;q=f[za>>2]|0;e=f[ta>>2]|0;if(e|0?(wa=1< >2]|0;m=(l|0)>-1?l:0-l|0;if((m|0)>=(wa|0)){Ca=m>>f[ta>>2];f[k>>2]=(l|0)<0?0-Ca|0:Ca}g=g+1|0}while((g|0)!=(p|0));e=e+1|0}while((e|0)!=(q|0))}k=(f[oa>>2]|0)+((X(b,Aa)|0)+c<<2)|0;c=(q|0)==0|(p|0)==0;if((f[ra>>2]|0)==1){if(!c){c=0;do{e=X(c,p)|0;g=X(c,Aa)|0;b=0;do{f[k+(b+g<<2)>>2]=(f[o+(b+e<<2)>>2]|0)/2|0;b=b+1|0}while((b|0)!=(p|0));c=c+1|0}while((c|0)!=(q|0))}}else if(!c){b=o;g=0;while(1){c=k;e=b;i=0;while(1){n[c>>2]=+n[ga>>2]*+(f[e>>2]|0);i=i+1|0;if((i|0)==(p|0))break;else{c=c+4|0;e=e+4|0}}g=g+1|0;if((g|0)==(q|0))break;else{k=k+(Aa<<2)|0;b=b+(p<<2)|0}}}Z=Z+1|0}while(Z>>>0<(X(f[aa>>2]|0,f[$>>2]|0)|0)>>>0);e=f[ja>>2]|0;c=f[ia>>2]|0}ba=ba+1|0}while(ba>>>0<(X(e,c)|0)>>>0);b=f[ma>>2]|0}ha=ha+1|0}while(ha>>>0>>0);c=f[Ba>>2]|0}na=na+1|0;if(na>>>0>=c>>>0){c=1;F=219;break}}if((F|0)==219)return c|0;return 0}function Rg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;h=X(c,b)|0;if(!(f[a+40>>2]|0)){e=a+24|0;d=a+8|0;do if(h>>>0>(f[e>>2]|0)>>>0){Kc(f[d>>2]|0);g=Jc(h<<2)|0;f[d>>2]=g;if(!g){c=0;return c|0}else{f[e>>2]=h;e=g;d=g;break}}else{d=f[d>>2]|0;e=d}while(0);if(e|0)ij(d|0,0,h<<2|0)|0}g=b+2|0;f[a+32>>2]=g;g=X(c+2|0,g)|0;h=a+28|0;i=a+12|0;d=f[i>>2]|0;do if(g>>>0>(f[h>>2]|0)>>>0){Kc(d);e=g<<1;d=Jc(e)|0;f[i>>2]=d;if(!d){c=0;return c|0}else{f[h>>2]=g;break}}else e=g<<1;while(0);ij(d|0,0,e|0)|0;f[a+16>>2]=b;f[a+20>>2]=c;c=1;return c|0}function Sg(a,b,c,e,g){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0;j=f[a>>2]|0;k=d[b>>1]|0;if(k&20480|0){k=d[b>>1]|0;k=k&-16385;d[b>>1]=k;return}i=j+100|0;f[i>>2]=j+24+(h[20356+(k&255|e<<8)>>0]<<2);if(!(nh(j)|0)){k=d[b>>1]|0;k=k&-16385;d[b>>1]=k;return}k=k>>>4&255;f[i>>2]=j+24+(h[21380+k>>0]<<2);j=nh(j)|0;j=j^h[21636+k>>0];f[c>>2]=j|0?0-g|0:g;k=f[a+32>>2]|0;g=b+(0-k<<1)|0;k=b+(k<<1)|0;e=g+-2|0;d[e>>1]=d[e>>1]|2;d[g>>1]=d[g>>1]|d[3160+(j<<1)>>1];g=g+2|0;d[g>>1]=d[g>>1]|4;g=b+-2|0;d[g>>1]=d[g>>1]|d[3160+(j+2<<1)>>1];d[b>>1]=d[b>>1]|4096;g=b+2|0;d[g>>1]=d[g>>1]|d[3160+(j+4<<1)>>1];g=k+-2|0;d[g>>1]=d[g>>1]|1;d[k>>1]=d[k>>1]|d[3160+(j+6<<1)>>1];k=k+2|0;d[k>>1]=d[k>>1]|8;k=d[b>>1]|0;k=k&-16385;d[b>>1]=k;return}function Tg(a,c,e,g,i){a=a|0;c=c|0;e=e|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,o=0,q=0.0,r=0.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,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0,V=0,W=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.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;Za=c+32|0;p[Za>>3]=0.0;_a=c+16|0;j=f[_a>>2]|0;if(!j){_a=1;return _a|0}Ya=c+20|0;Qa=e+5584|0;Ra=a+16|0;Sa=a+20|0;Ta=a+8|0;Ua=a+36|0;Va=(g|0)!=0;Wa=a+12|0;Xa=a+32|0;Pa=0;c=j;a:while(1){e=f[Ya>>2]|0;j=f[Qa>>2]|0;Na=(f[e+(Pa*52|0)+8>>2]|0)-(f[e+(Pa*52|0)>>2]|0)|0;Oa=e+(Pa*52|0)+16|0;k=f[Oa>>2]|0;if(k){Ma=e+(Pa*52|0)+24|0;Ka=e+(Pa*52|0)+32|0;La=j+(Pa*1080|0)+20|0;Ha=j+(Pa*1080|0)+16|0;Ja=Va&Pa>>>0>>0;Ia=g+(Pa<<3)|0;Ga=0;c=k;do{Da=f[Ma>>2]|0;Ea=Da+(Ga*136|0)+24|0;e=f[Ea>>2]|0;if(e){za=Da+(Ga*136|0)+16|0;Aa=Da+(Ga*136|0)+20|0;Ba=~Ga;Ca=Ga+-1|0;ya=0;j=f[Aa>>2]|0;c=f[za>>2]|0;do{xa=Da+(Ga*136|0)+28+(ya*36|0)+32|0;if(X(j,c)|0){ra=67108864/(~~+J(+(+n[xa>>2]*8192.0))|0)|0;sa=Da+(Ga*136|0)+28+(ya*36|0)+20|0;ta=Da+(Ga*136|0)+28+(ya*36|0)|0;ua=Da+(Ga*136|0)+28+(ya*36|0)+4|0;va=Da+(Ga*136|0)+28+(ya*36|0)+16|0;wa=((ra|0)<0)<<31>>31;qa=0;do{e=f[sa>>2]|0;oa=e+(qa*40|0)+16|0;pa=e+(qa*40|0)+20|0;if(X(f[pa>>2]|0,f[oa>>2]|0)|0){na=e+(qa*40|0)+24|0;ma=0;do{la=f[na>>2]|0;k=f[la+(ma*52|0)+12>>2]|0;c=k-(f[ta>>2]|0)|0;l=f[la+(ma*52|0)+16>>2]|0;e=l-(f[ua>>2]|0)|0;j=f[va>>2]|0;if(j&1){ka=f[Ma>>2]|0;c=(f[ka+(Ca*136|0)+8>>2]|0)+c-(f[ka+(Ca*136|0)>>2]|0)|0}if(j&2){ka=f[Ma>>2]|0;e=(f[ka+(Ca*136|0)+12>>2]|0)+e-(f[ka+(Ca*136|0)+4>>2]|0)|0}if(!(Rg(a,(f[la+(ma*52|0)+20>>2]|0)-k|0,(f[la+(ma*52|0)+24>>2]|0)-l|0)|0)){c=0;Fa=163;break a}l=f[Ra>>2]|0;m=f[Sa>>2]|0;s=(f[Ka>>2]|0)+((X(e,Na)|0)+c<<2)|0;f[Ta>>2]=s;f[Ua>>2]=Na;c=f[La>>2]|0;e=(m|0)!=0;do if((c|0)==1)if(e){if(!l){Fa=27;break}else{c=0;e=0}while(1){j=0;k=c;while(1){Fa=s+(k<<2)|0;f[Fa>>2]=f[Fa>>2]<<6;j=j+1|0;if((j|0)==(l|0))break;else k=k+1|0}e=e+1|0;if((e|0)==(m|0)){Fa=27;break}else c=Na+c|0}}else c=1;else if(e){if(!l){Fa=27;break}else{c=0;j=0}while(1){e=0;k=j;while(1){Fa=s+(k<<2)|0;ka=f[Fa>>2]|0;ka=Yi(ka|0,((ka|0)<0)<<31>>31|0,ra|0,wa|0)|0;ka=Zi(ka|0,I|0,4096,0)|0;ka=ej(ka|0,I|0,18)|0;f[Fa>>2]=ka;e=e+1|0;if((e|0)==(l|0))break;else k=k+1|0}c=c+1|0;if((c|0)==(m|0)){Fa=27;break}else j=Na+j|0}}while(0);if((Fa|0)==27){Fa=0;c=f[La>>2]|0}ga=f[va>>2]|0;ha=(f[Oa>>2]|0)+Ba|0;ia=+n[xa>>2];ja=f[Ha>>2]|0;ka=f[a>>2]|0;m=f[Ra>>2]|0;do if(!m)e=0;else{o=f[Sa>>2]|0;if(!o){e=0;break}l=f[Ua>>2]|0;k=0;j=0;do{e=0;do{fa=s+((X(e,l)|0)+k<<2)|0;fa=f[fa>>2]|0;fa=(fa|0)>-1?fa:0-fa|0;j=(j|0)>(fa|0)?j:fa;e=e+1|0}while((e|0)!=(o|0));k=k+1|0}while((k|0)!=(m|0));if(!j){e=0;break}if((j|0)>1){e=0;while(1){e=e+1|0;if(j>>>0>3)j=j>>>1;else break}}else e=0;e=e+-5|0}while(0);ea=la+(ma*52|0)+28|0;f[ea>>2]=e;e=e+-1|0;hh(ka);ih(ka,18,0,46);ih(ka,17,0,3);ih(ka,0,0,4);fa=la+(ma*52|0)|0;bh(ka,f[fa>>2]|0);b:do if((e|0)>-1){ca=la+(ma*52|0)+8|0;U=ja&1;da=(U|0)!=0;V=(c|0)==1;W=(ja&4|0)==0;U=(U|0)==0;Y=(ja&2|0)==0;$=ja&8;Z=($|0)!=0;_=ga<<8;$=($|0)==0;aa=(ja&32|0)==0;ba=$^1;c=0;S=2;j=0;T=0.0;while(1){R=f[ca>>2]|0;G=da&(S>>>0<2?(e|0)<((f[ea>>2]|0)+-4|0):0);c:do switch(S|0){case 0:{E=1< >2]|0;if(!k){j=0;break c}F=(e|0)==0?3176:3432;m=f[Ra>>2]|0;D=0;j=0;l=m;do{C=D;D=D+4|0;if(!l)l=0;else{A=(C|0)==-4;B=C|3;z=0;while(1){if(A)l=m;else{y=C;do{k=f[Sa>>2]|0;if(y>>>0>=k>>>0)break;u=f[Wa>>2]|0;Q=y;y=y+1|0;v=(X(f[Xa>>2]|0,y)|0)+z|0;x=u+(v+1<<1)|0;o=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,Q)|0)+z<<2)|0;w=f[a>>2]|0;s=d[x>>1]|0;s=Z&((Q|0)==(B|0)|(Q|0)==(k+-1|0))?s&-1095:s;k=s&255;if((k|0)!=0&(s&20480|0)==0){l=f[o>>2]|0;l=(((l|0)<0?0-l|0:l)&E|0)!=0;m=l&1;t=w+100|0;f[t>>2]=w+24+(h[20356+(k|_)>>0]<<2);if(G)fh(w,m);else ch(w,m);if(l){k=f[o>>2]|0;l=k>>>31;j=j+(d[F+((((k|0)<0?0-k|0:k)>>>e&127)<<1)>>1]|0)|0;k=s>>>4&255;f[t>>2]=w+24+(h[21380+k>>0]<<2);if(G)fh(w,l);else ch(w,l^h[21636+k>>0]);Q=f[Xa>>2]|0;P=x+(0-Q<<1)|0;Q=x+(Q<<1)|0;O=P+-2|0;d[O>>1]=d[O>>1]|2;d[P>>1]=d[P>>1]|d[3160+(l<<1)>>1];P=P+2|0;d[P>>1]=d[P>>1]|4;P=u+(v<<1)|0;d[P>>1]=d[P>>1]|d[3160+((l|2)<<1)>>1];d[x>>1]=d[x>>1]|4096;P=x+2|0;d[P>>1]=d[P>>1]|d[3160+((l|4)<<1)>>1];P=Q+-2|0;d[P>>1]=d[P>>1]|1;d[Q>>1]=d[Q>>1]|d[3160+((l|6)<<1)>>1];Q=Q+2|0;d[Q>>1]=d[Q>>1]|8}d[x>>1]=d[x>>1]|16384}}while(y>>>0 >>0);l=f[Ra>>2]|0}z=z+1|0;if(z>>>0>=l>>>0)break;else m=l}k=f[Sa>>2]|0;m=l}}while(D>>>0 >>0);break}case 1:{z=1< >2]|0;if(!k){j=0;break c}A=(e|0)==0?3688:3944;y=0;j=0;l=f[Ra>>2]|0;do{x=y;y=y+4|0;if(!l)l=0;else{v=(x|0)==-4;w=x|3;u=0;do{t=u;u=u+1|0;d:do if(!v)if($)if(G){s=x;do{if(s>>>0>=(f[Sa>>2]|0)>>>0)break d;k=s;s=s+1|0;m=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;l=f[a>>2]|0;o=d[m>>1]|0;if((o&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,k)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[l+100>>2]=l+24+((o&8192|0?16:o&255|0?15:14)<<2);fh(l,(Q&z|0)!=0&1);d[m>>1]=d[m>>1]|8192}}while(s>>>0 >>0)}else{s=x;do{if(s>>>0>=(f[Sa>>2]|0)>>>0)break d;k=s;s=s+1|0;m=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;l=f[a>>2]|0;o=d[m>>1]|0;if((o&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,k)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[l+100>>2]=l+24+((o&8192|0?16:o&255|0?15:14)<<2);ch(l,(Q&z|0)!=0&1);d[m>>1]=d[m>>1]|8192}}while(s>>>0 >>0)}else if(G){s=x;do{k=f[Sa>>2]|0;if(s>>>0>=k>>>0)break d;l=s;s=s+1|0;o=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;m=f[a>>2]|0;Q=d[o>>1]|0;k=(l|0)==(w|0)|(l|0)==(k+-1|0)?Q&-1095:Q;if((k&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,l)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[m+100>>2]=m+24+((k&8192|0?16:k&255|0?15:14)<<2);fh(m,(Q&z|0)!=0&1);d[o>>1]=d[o>>1]|8192}}while(s>>>0 >>0)}else{s=x;do{k=f[Sa>>2]|0;if(s>>>0>=k>>>0)break d;l=s;s=s+1|0;o=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;m=f[a>>2]|0;Q=d[o>>1]|0;k=(l|0)==(w|0)|(l|0)==(k+-1|0)?Q&-1095:Q;if((k&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,l)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[m+100>>2]=m+24+((k&8192|0?16:k&255|0?15:14)<<2);ch(m,(Q&z|0)!=0&1);d[o>>1]=d[o>>1]|8192}}while(s>>>0 >>0)}while(0);l=f[Ra>>2]|0}while(u>>>0 >>0);k=f[Sa>>2]|0}}while(y>>>0 >>0);break}case 2:{L=f[a>>2]|0;M=1< >2]|0;if(!k)j=0;else{N=L+92|0;O=L+100|0;P=L+96|0;Q=(e|0)==0?3176:3432;m=0;j=0;l=f[Ra>>2]|0;do if(!l){m=m+4|0;l=0}else{B=m|3;C=m|1;D=C+1|0;E=C+3|0;K=m+4|0;F=m+1|0;G=m+2|0;H=m+3|0;A=0;while(1){do if(B>>>0 >>0){k=f[Wa>>2]|0;l=f[Xa>>2]|0;o=A+1|0;s=k+((X(l,C)|0)+o<<1)|0;s=d[s>>1]|0;if($){x=k+((X(l,D)|0)+o<<1)|0;y=k+((X(l,B)|0)+o<<1)|0;z=k+((X(l,E)|0)+o<<1)|0;if((d[x>>1]|s|d[y>>1]|d[z>>1])&20735){z=0;k=0;Fa=105;break}}else{if(s&20735){z=0;k=0;Fa=105;break}z=k+((X(l,D)|0)+o<<1)|0;if(d[z>>1]&20735){z=0;k=0;Fa=105;break}z=k+((X(l,B)|0)+o<<1)|0;if(d[z>>1]&20735){z=0;k=0;Fa=105;break}z=k+((X(l,E)|0)+o<<1)|0;if(d[z>>1]&20665){z=0;k=0;Fa=105;break}}k=f[Ta>>2]|0;l=f[Ua>>2]|0;z=k+((X(l,m)|0)+A<<2)|0;z=f[z>>2]|0;do if(!(((z|0)<0?0-z|0:z)&M)){z=k+((X(l,F)|0)+A<<2)|0;z=f[z>>2]|0;if(((z|0)<0?0-z|0:z)&M|0){k=1;break}z=k+((X(l,G)|0)+A<<2)|0;z=f[z>>2]|0;if(((z|0)<0?0-z|0:z)&M|0){k=2;break}k=k+((X(l,H)|0)+A<<2)|0;k=f[k>>2]|0;k=(((k|0)<0?0-k|0:k)&M|0)==0?4:3}else k=0;while(0);f[O>>2]=N;ch(L,(k|0)!=4&1);if((k|0)==4)break;f[O>>2]=P;ch(L,k>>>1);ch(L,k&1);z=1;Fa=105}else{z=0;k=0;Fa=105}while(0);e:do if((Fa|0)==105){Fa=0;y=k+m|0;if(y>>>0 >>0)x=y;else break;do{k=f[Sa>>2]|0;if(x>>>0>=k>>>0)break e;s=f[Wa>>2]|0;$a=x;x=x+1|0;t=(X(f[Xa>>2]|0,x)|0)+A|0;w=s+(t+1<<1)|0;u=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,$a)|0)+A<<2)|0;v=f[a>>2]|0;l=d[w>>1]|0;o=(($a|0)==(B|0)|($a|0)==(k+-1|0))&ba?l&-1095:l;do if(!(z&($a|0)==(y|0))){if(l&20480|0)break;k=v+100|0;f[k>>2]=v+24+(h[20356+(o&255|_)>>0]<<2);$a=f[u>>2]|0;$a=((($a|0)<0?0-$a|0:$a)&M|0)!=0;ch(v,$a&1);if($a)Fa=111}else{k=v+100|0;Fa=111}while(0);if((Fa|0)==111){Fa=0;u=f[u>>2]|0;j=j+(d[Q+((((u|0)<0?0-u|0:u)>>>e&127)<<1)>>1]|0)|0;$a=o>>>4&255;f[k>>2]=v+24+(h[21380+$a>>0]<<2);u=u>>>31;ch(v,u^h[21636+$a>>0]);$a=f[Xa>>2]|0;v=w+(0-$a<<1)|0;$a=w+($a<<1)|0;o=v+-2|0;d[o>>1]=d[o>>1]|2;d[v>>1]=d[v>>1]|d[3160+(u<<1)>>1];v=v+2|0;d[v>>1]=d[v>>1]|4;v=s+(t<<1)|0;d[v>>1]=d[v>>1]|d[3160+((u|2)<<1)>>1];d[w>>1]=d[w>>1]|4096;v=w+2|0;d[v>>1]=d[v>>1]|d[3160+((u|4)<<1)>>1];v=$a+-2|0;d[v>>1]=d[v>>1]|1;d[$a>>1]=d[$a>>1]|d[3160+((u|6)<<1)>>1];$a=$a+2|0;d[$a>>1]=d[$a>>1]|8}d[w>>1]=d[w>>1]&-16385}while(x>>>0 >>0)}while(0);A=A+1|0;l=f[Ra>>2]|0;k=f[Sa>>2]|0;if(A>>>0>=l>>>0){m=K;break}}}while(m>>>0 >>0)}if(aa)break c;lh(ka);break}default:{}}while(0);if(Ja)q=+p[Ia>>3];else q=1.0;if(V)r=+Dg(ha,ga);else r=+Hg(ha,ga);r=q*r*ia*+(1< >3]=+p[Za>>3]+r;do if(W)Fa=127;else{if((e|0)<1&(S|0)==2){Fa=127;break}dh(ka);k=R+(c*24|0)+20|0;l=b[k>>0]|1;b[k>>0]=l;k=1}while(0);do if((Fa|0)==127){k=(f[ea>>2]|0)+-4|0;if((S|0)!=0&(e|0)<(k|0))if(U)Fa=131;else Fa=130;else if(U|((S|0)!=2|(e|0)!=(k|0)))Fa=131;else Fa=130;if((Fa|0)==130){Fa=0;dh(ka);k=R+(c*24|0)+20|0;l=b[k>>0]|1;b[k>>0]=l;k=1;break}else if((Fa|0)==131){Fa=0;k=R+(c*24|0)+20|0;l=b[k>>0]&-2;b[k>>0]=l;k=3;break}}while(0);Q=S+1|0;$a=(Q|0)==3;S=$a?0:Q;e=e+($a<<31>>31)|0;do if((e|0)>0&(l&1)!=0)if(da&(S>>>0<2?(e|0)<((f[ea>>2]|0)+-4|0):0)){eh(ka);break}else{jh(ka);break}while(0);p[R+(c*24|0)+8>>3]=T;$a=(ah(ka)|0)+k|0;f[R+(c*24|0)>>2]=$a;if(!Y)gh(ka);c=c+1|0;if((e|0)<=-1)break b}}else c=0;while(0);do if(!(ja&16)){if(ja&1|0)break;dh(ka)}else kh(ka);while(0);o=la+(ma*52|0)+48|0;f[o>>2]=c;if(c|0){l=la+(ma*52|0)+8|0;k=0;do{m=f[l>>2]|0;e=m+(k*24|0)|0;$a=f[e>>2]|0;if($a>>>0>(ah(ka)|0)>>>0){c=ah(ka)|0;f[e>>2]=c}else c=f[e>>2]|0;do if(c>>>0>1){j=c+-1|0;if((b[(f[fa>>2]|0)+j>>0]|0)!=-1)break;f[e>>2]=j;c=j}while(0);if(!k)e=0;else e=f[(f[l>>2]|0)+((k+-1|0)*24|0)>>2]|0;f[m+(k*24|0)+16>>2]=c-e;k=k+1|0}while(k>>>0<(f[o>>2]|0)>>>0)}ma=ma+1|0}while(ma>>>0<(X(f[pa>>2]|0,f[oa>>2]|0)|0)>>>0);j=f[Aa>>2]|0;c=f[za>>2]|0}qa=qa+1|0}while(qa>>>0<(X(j,c)|0)>>>0);e=f[Ea>>2]|0}ya=ya+1|0}while(ya>>>0 >>0);c=f[Oa>>2]|0}Ga=Ga+1|0}while(Ga>>>0 >>0);c=f[_a>>2]|0}Pa=Pa+1|0;if(Pa>>>0>=c>>>0){c=1;Fa=163;break}}if((Fa|0)==163)return c|0;return 0}function Ug(a,b,c,e,g,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=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;G=u;u=u+16|0;E=G;f[E>>2]=0;p=f[a>>2]|0;z=f[a+4>>2]|0;a=f[z+76>>2]|0;C=a+(b*5640|0)|0;q=(d[z>>1]|0)==4?2:1;r=z+80|0;if(!(f[r>>2]|0))s=1;else s=f[p+16>>2]|0;F=(f[a+(b*5640|0)+420>>2]|0)+1|0;D=Ff(p,z,b,o)|0;if(!D){i=0;u=G;return i|0}f[i>>2]=0;a:do if(!o){if(s|0){o=0;b:while(1){a=0;l=0;n=D;while(1){Hf(D,z,b,l,o,m,0);if((f[n+80>>2]|0)==-1){g=9;break b}p=n+36|0;c:while(1){do if(!(Kf(n)|0))break c;while((f[p>>2]|0)>>>0>=e>>>0);f[E>>2]=0;if(!(Vg(b,c,C,n,g,E,j,k)|0)){g=13;break b}B=f[E>>2]|0;f[i>>2]=(f[i>>2]|0)+B;a=B+a|0;j=j-B|0;g=g+B|0}B=f[r>>2]|0;if((B|0)!=0&a>>>0>B>>>0){g=17;break b}l=l+1|0;if(l>>>0>=q>>>0)break;else n=n+232|0}o=o+1|0;if(o>>>0>=s>>>0)break a}if((g|0)==9){Ef(D,F);i=0;u=G;return i|0}else if((g|0)==13){Ef(D,F);i=0;u=G;return i|0}else if((g|0)==17){Ef(D,F);i=0;u=G;return i|0}}}else{Hf(D,z,b,n,l,m,o);y=D+(n*232|0)|0;if((f[D+(n*232|0)+80>>2]|0)==-1){Ef(D,F);i=0;u=G;return i|0}w=D+(n*232|0)+36|0;x=c+840|0;m=k+12|0;t=k+8|0;v=k+88|0;s=z+93|0;r=a+(b*5640|0)+5636|0;d:do if(!k)while(1){do if(!(Kf(y)|0))break a;while((f[w>>2]|0)>>>0>=e>>>0);f[E>>2]=0;if(!(Vg(b,c,C,y,g,E,j,0)|0))break d;k=f[E>>2]|0;f[i>>2]=(f[i>>2]|0)+k;f[x>>2]=(f[x>>2]|0)+1;j=j-k|0;g=g+k|0}else while(1){do if(!(Kf(y)|0))break a;while((f[w>>2]|0)>>>0>=e>>>0);f[E>>2]=0;if(!(Vg(b,c,C,y,g,E,j,k)|0))break d;q=f[E>>2]|0;g=g+q|0;j=j-q|0;f[i>>2]=(f[i>>2]|0)+q;if(!(f[m>>2]|0))a=f[t>>2]|0;else{p=f[v>>2]|0;n=f[p+(b*592|0)+548>>2]|0;a=f[t>>2]|0;l=n+(a<<5)|0;do if(!a){o=(f[p+(b*592|0)+12>>2]|0)+1|0;p=o;o=((o|0)<0)<<31>>31}else{if(((h[r>>0]|0)>>>2|(h[s>>0]|0)>>>3)&1?(B=l,A=f[B>>2]|0,B=f[B+4>>2]|0,!((A|0)==0&(B|0)==0)):0){p=A;o=B;break}p=n+(a+-1<<5)+16|0;p=Zi(f[p>>2]|0,f[p+4>>2]|0,1,0)|0;o=I}while(0);f[l>>2]=p;f[l+4>>2]=o;o=Zi(p|0,o|0,-1,-1)|0;l=I;q=Zi(o|0,l|0,q|0,0)|0;z=n+(a<<5)+16|0;f[z>>2]=q;f[z+4>>2]=I;z=n+(a<<5)+8|0;q=z;q=Zi(o|0,l|0,f[q>>2]|0,f[q+4>>2]|0)|0;f[z>>2]=q;f[z+4>>2]=I}f[t>>2]=a+1;f[x>>2]=(f[x>>2]|0)+1}while(0);Ef(D,F);i=0;u=G;return i|0}while(0);Ef(D,F);i=1;u=G;return i|0}function Vg(a,c,d,e,g,h,i,j){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0.0,l=0,m=0,n=0,o=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;t=f[e+28>>2]|0;J=f[e+32>>2]|0;K=f[e+36>>2]|0;s=f[(f[c+20>>2]|0)+((f[e+24>>2]|0)*52|0)+24>>2]|0;if(!(f[d>>2]&2))G=g;else{b[g>>0]=-1;b[g+1>>0]=-111;b[g+2>>0]=0;b[g+3>>0]=4;G=c+840|0;b[g+4>>0]=(f[G>>2]|0)>>>8;b[g+5>>0]=f[G>>2];i=i+-6|0;G=g+6|0}if((K|0)==0?(r=s+(t*136|0)+24|0,f[r>>2]|0):0){m=0;n=s+(t*136|0)+28|0;while(1){e=f[n+20>>2]|0;cg(f[e+(J*40|0)+32>>2]|0);o=e+(J*40|0)+36|0;cg(f[o>>2]|0);q=X(f[e+(J*40|0)+20>>2]|0,f[e+(J*40|0)+16>>2]|0)|0;if(q|0){c=e+(J*40|0)+24|0;l=n+28|0;e=0;do{I=f[c>>2]|0;f[I+(e*52|0)+40>>2]=0;fg(f[o>>2]|0,e,(f[l>>2]|0)-(f[I+(e*52|0)+28>>2]|0)|0);e=e+1|0}while((e|0)!=(q|0))}m=m+1|0;if(m>>>0>=(f[r>>2]|0)>>>0)break;else n=n+36|0}}F=og()|0;if(!F){h=0;return h|0}rg(F,G,i);tg(F,1,1);H=s+(t*136|0)+28|0;I=s+(t*136|0)+24|0;if(f[I>>2]|0){D=K+1|0;B=0;C=H;while(1){n=f[C+20>>2]|0;E=X(f[n+(J*40|0)+20>>2]|0,f[n+(J*40|0)+16>>2]|0)|0;o=n+(J*40|0)+24|0;l=(E|0)==0;if(!l){m=n+(J*40|0)+32|0;e=f[o>>2]|0;c=0;while(1){if((f[e+40>>2]|0)==0?f[(f[e+4>>2]|0)+(K*24|0)>>2]|0:0)fg(f[m>>2]|0,c,K);c=c+1|0;if((c|0)==(E|0))break;else e=e+52|0}if(!l){A=n+(J*40|0)+32|0;z=n+(J*40|0)+36|0;w=f[o>>2]|0;x=0;while(1){e=(f[w+4>>2]|0)+(K*24|0)|0;y=w+40|0;if(!(f[y>>2]|0))gg(F,f[A>>2]|0,x,D);else tg(F,(f[e>>2]|0)!=0&1,1);c=f[e>>2]|0;if(c|0){if(!(f[y>>2]|0)){f[w+32>>2]=3;gg(F,f[z>>2]|0,x,999);c=f[e>>2]|0}a:do switch(c|0){case 1:{tg(F,0,1);break}case 2:{tg(F,2,2);break}default:{if(c>>>0<6){tg(F,c+-3|12,4);break a}if(c>>>0<37){tg(F,c+-6|480,9);break a}if(c>>>0<165)tg(F,c+-37|65408,16)}}while(0);m=f[y>>2]|0;c=f[e>>2]|0;v=c+m|0;u=w+8|0;if(m>>>0 >>0){t=w+32|0;s=m+-1+c|0;r=m;l=0;c=0;n=0;q=(f[u>>2]|0)+(m*24|0)|0;while(1){m=c+1|0;l=(f[q+16>>2]|0)+l|0;if((b[q+20>>0]&1)!=0|(r|0)==(s|0)){if((l|0)>1){c=0;while(1){c=c+1|0;if(l>>>0>3)l=l>>>1;else{l=c;break}}}else l=0;o=f[t>>2]|0;if((m|0)>1){c=0;while(1){c=c+1|0;if(m>>>0>3)m=m>>>1;else break}}else c=0;o=l+1-o-c|0;l=0;m=0;n=(n|0)>(o|0)?n:o}r=r+1|0;if((r|0)==(v|0))break;else{c=m;q=q+24|0}}if((n|0)>0){c=n;while(1){tg(F,1,1);if((c|0)>1)c=c+-1|0;else{c=n;break}}}else c=n}else{l=0;m=0;c=0}tg(F,0,1);r=w+32|0;f[r>>2]=(f[r>>2]|0)+c;c=f[y>>2]|0;if(c>>>0 >>0){q=c;o=(f[u>>2]|0)+(c*24|0)|0;c=m;while(1){c=c+1|0;l=(f[o+16>>2]|0)+l|0;if(!((b[o+20>>0]&1)==0?(q|0)!=((f[y>>2]|0)+-1+(f[e>>2]|0)|0):0)){n=f[r>>2]|0;if((c|0)>1){m=0;while(1){m=m+1|0;if(c>>>0>3)c=c>>>1;else{c=m;break}}}else c=0;tg(F,l,c+n|0);l=0;c=0}q=q+1|0;if((q|0)==(v|0))break;else o=o+24|0}}}x=x+1|0;if((x|0)==(E|0))break;else w=w+52|0}}}B=B+1|0;if(B>>>0>=(f[I>>2]|0)>>>0)break;else C=C+36|0}}if(!(vg(F)|0)){pg(F);h=0;return h|0}c=qg(F)|0;e=G+c|0;c=i-c|0;pg(F);if(f[d>>2]&4){b[e>>0]=-1;b[e+1>>0]=-110;c=c+-2|0;e=e+2|0}u=(j|0)!=0;if(u?f[j+12>>2]|0:0){G=e-g|0;d=(f[(f[j+88>>2]|0)+(a*592|0)+548>>2]|0)+(f[j+8>>2]<<5)+8|0;f[d>>2]=G;f[d+4>>2]=((G|0)<0)<<31>>31}b:do if(f[I>>2]|0){v=j+12|0;w=j+88|0;x=j+8|0;t=0;s=H;c:while(1){l=f[s+20>>2]|0;r=X(f[l+(J*40|0)+20>>2]|0,f[l+(J*40|0)+16>>2]|0)|0;l=f[l+(J*40|0)+24>>2]|0;d:do if(r){e:do if(u){q=0;while(1){o=f[l+4>>2]|0;i=o+(K*24|0)|0;if(f[i>>2]|0){m=o+(K*24|0)+4|0;n=f[m>>2]|0;if(n>>>0>c>>>0)i=1;else{hj(e|0,f[o+(K*24|0)+16>>2]|0,n|0)|0;d=l+40|0;f[d>>2]=(f[d>>2]|0)+(f[i>>2]|0);d=f[m>>2]|0;e=e+d|0;c=c-d|0;do if(f[v>>2]|0){d=(f[(f[w>>2]|0)+(a*592|0)+548>>2]|0)+(f[x>>2]<<5)+24|0;k=+p[o+(K*24|0)+8>>3]+ +p[d>>3];p[d>>3]=k;if(!(+p[j>>3] >3]=k}while(0);i=0;l=l+52|0}}else{i=28;l=l+52|0}switch(i&31){case 28:case 0:break;default:break e}q=q+1|0;if(q>>>0>=r>>>0){L=83;break d}}}else{q=0;while(1){i=f[l+4>>2]|0;m=i+(K*24|0)|0;if(f[m>>2]|0){n=i+(K*24|0)+4|0;o=f[n>>2]|0;if(o>>>0>c>>>0)i=1;else{hj(e|0,f[i+(K*24|0)+16>>2]|0,o|0)|0;d=l+40|0;f[d>>2]=(f[d>>2]|0)+(f[m>>2]|0);d=f[n>>2]|0;i=0;c=c-d|0;e=e+d|0;l=l+52|0}}else{i=28;l=l+52|0}switch(i&31){case 28:case 0:break;default:break e}q=q+1|0;if(q>>>0>=r>>>0){L=83;break d}}}while(0);if(!i)i=s;else{e=0;break c}}else L=83;while(0);if((L|0)==83){L=0;i=s+36|0}t=t+1|0;if(t>>>0>=(f[I>>2]|0)>>>0)break b;else s=i}return e|0}while(0);f[h>>2]=e-g+(f[h>>2]|0);h=1;return h|0}function Wg(a,b,c,d,e,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=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,Y=0,Z=0,_=0,$=0,aa=0;_=u;u=u+112|0;Z=_+64|0;U=_+32|0;T=_;R=_+96|0;S=_+92|0;j=f[a>>2]|0;L=a+4|0;Q=f[L>>2]|0;h=f[Q+76>>2]|0;M=h+(b*5640|0)|0;N=h+(b*5640|0)+420|0;P=(f[N>>2]|0)+1|0;Q=Bf(j,Q,b)|0;if(!Q){$=0;u=_;return $|0}O=j+16|0;K=h+(b*5640|0)+12|0;J=c+20|0;H=j+24|0;G=Q;a=g;h=d;F=0;a:while(1){if((f[G+80>>2]|0)==-1){$=4;break}I=Hc(f[O>>2]<<2)|0;if(!I){$=6;break}ij(I|0,1,f[O>>2]<<2|0)|0;if(Kf(G)|0){B=G+24|0;C=G+28|0;D=G+36|0;E=G+32|0;A=h;while(1){if((f[K>>2]|0)>>>0>(f[D>>2]|0)>>>0){h=f[J>>2]|0;b=f[B>>2]|0;if((f[C>>2]|0)>>>0<(f[h+(b*52|0)+20>>2]|0)>>>0){f[I+(b<<2)>>2]=0;z=f[L>>2]|0;f[S>>2]=0;if(!(Xg(z,h,M,G,R,A,S,a,i)|0)){$=45;break a}h=f[S>>2]|0;if(f[R>>2]|0){y=a-h|0;z=A+h|0;f[S>>2]=0;b=f[(f[J>>2]|0)+((f[B>>2]|0)*52|0)+24>>2]|0;c=f[C>>2]|0;w=b+(c*136|0)+24|0;g=f[w>>2]|0;b:do if(!g){b=z;$=43}else{x=A+a|0;j=0;v=b+(c*136|0)+28|0;b=z;c=g;c:while(1){g=f[v+20>>2]|0;k=f[E>>2]|0;if(((f[v+8>>2]|0)!=(f[v>>2]|0)?(f[v+12>>2]|0)!=(f[v+4>>2]|0):0)?(Y=X(f[g+(k*40|0)+20>>2]|0,f[g+(k*40|0)+16>>2]|0)|0,(Y|0)!=0):0){c=0;t=f[g+(k*40|0)+24>>2]|0;while(1){r=t+40|0;if(f[r>>2]|0){s=t+44|0;g=f[s>>2]|0;k=f[t+4>>2]|0;do if(!g){f[s>>2]=1;f[t+36>>2]=0}else{l=g+-1|0;if((f[k+(l<<5)+8>>2]|0)!=(f[k+(l<<5)+20>>2]|0)){k=k+(l<<5)|0;break}f[s>>2]=g+1;k=k+(g<<5)|0}while(0);p=t+36|0;q=t+32|0;o=b;n=k+28|0;g=f[n>>2]|0;if((g+o|0)>>>0 >>0|(b+g|0)>>>0>x>>>0){b=g;break c}l=g;m=f[p>>2]|0;o=n;while(1){n=l+m|0;if(n>>>0 >>0){$=29;break a}g=f[t>>2]|0;if(n>>>0>(f[q>>2]|0)>>>0){g=Lc(g,n)|0;if(!g){$=33;break a}m=f[p>>2]|0;l=f[o>>2]|0;f[q>>2]=l+m;f[t>>2]=g}hj(g+m|0,b|0,l|0)|0;g=k+8|0;l=f[g>>2]|0;if(!l){f[k>>2]=t;m=f[p>>2]|0;f[k+4>>2]=m}else m=f[p>>2]|0;aa=f[o>>2]|0;b=b+aa|0;o=f[k+24>>2]|0;n=o+l|0;f[g>>2]=n;o=(f[r>>2]|0)-o|0;f[r>>2]=o;f[k+12>>2]=n;m=aa+m|0;f[p>>2]=m;n=k+16|0;f[n>>2]=(f[n>>2]|0)+aa;if(!o)break;f[s>>2]=(f[s>>2]|0)+1;aa=b;o=k+60|0;g=f[o>>2]|0;if((g+aa|0)>>>0