From f1ce40cbd8cc687be8af4d61d425f3058d873e99 Mon Sep 17 00:00:00 2001 From: jamesrobb Date: Sat, 15 Feb 2014 19:48:20 +0000 Subject: [PATCH 1/7] png 32 and png 24 support added to addImage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit png 32 and png 24 support added to addImage partial png 8, but needs looking at as there are issues with transparency… and colour ArrayBuffer and ArrayBufferView/TypedArray support added to addImage --- jspdf.plugin.addimage.js | 310 +++++++++++++++++++++++++++++++++------ 1 file changed, 268 insertions(+), 42 deletions(-) diff --git a/jspdf.plugin.addimage.js b/jspdf.plugin.addimage.js index 5db9d5f37..e8ce7e96a 100644 --- a/jspdf.plugin.addimage.js +++ b/jspdf.plugin.addimage.js @@ -30,7 +30,11 @@ ;(function(jsPDFAPI) { 'use strict' -var namespace = 'addImage_' +var namespace = 'addImage_', + supported_image_types = ['jpg', 'jpeg', 'png'], + color_spaces = ['DeviceRGB', 'DeviceGray', 'DeviceCMYK', 'Indexed'], + filter_methods = ['DCTDecode', 'FlateDecode', 'LZWDecode']; + // takes a string imgData containing the raw bytes of // a jpeg image and returns [width, height] @@ -48,7 +52,7 @@ var getJpegSize = function(imgData) { !imgData.charCodeAt(8) === 'I'.charCodeAt(0) || !imgData.charCodeAt(9) === 'F'.charCodeAt(0) || !imgData.charCodeAt(10) === 0x00) { - throw new Error('getJpegSize requires a binary jpeg file') + throw new Error('getJpegSize requires a binary string jpeg file') } var blockLength = imgData.charCodeAt(4)*256 + imgData.charCodeAt(5); var i = 4, len = imgData.length; @@ -76,6 +80,7 @@ var getJpegSize = function(imgData) { } // Image functionality ported from pdf.js , putImage = function(img) { + //console.log(img); var objectNumber = this.internal.newObject() , out = this.internal.write , putStream = this.internal.putStream @@ -106,7 +111,7 @@ var getJpegSize = function(imgData) { if ('trns' in img && img['trns'].constructor == Array) { var trns = ''; for ( var i = 0; i < img['trns'].length; i++) { - trns += (img[trns][i] + ' ' + img['trns'][i] + ' '); + trns += (img['trns'][i] + ' ' + img['trns'][i] + ' '); out('/Mask [' + trns + ']'); } } @@ -118,6 +123,26 @@ var getJpegSize = function(imgData) { putStream(img['data']); out('endobj'); + + // Soft mask + if ('smask' in img) { + var dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns ' + img['w']; + var smask = {'w': img['w'], 'h': img['h'], 'cs': 'DeviceGray', 'bpc': 8, 'dp': dp, 'data': img['smask']}; + if ('f' in img) + smask.f = img['f']; + putImage.call(this, smask); + } + + //Palette + if (img['cs'] === 'Indexed') { + + this.internal.newObject(); + //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>'); + //putStream(zlib.compress(img['pal'])); + out('<< /Length ' + img['pal'].length + '>>'); + putStream(img['pal']); + out('endobj'); + } } , putResourcesCallback = function() { var images = this.internal.collections[namespace + 'images'] @@ -139,11 +164,90 @@ var getJpegSize = function(imgData) { ) } } +, extractBase64Info = function(dataURL) { + return /^(data:image\/([\w]+?);base64,)(.+?)$/g.exec(dataURL); +} +, supportsArrayBuffer = function() { + return typeof ArrayBuffer == 'function'; +} +, isArrayBuffer = function(object) { + if(!supportsArrayBuffer()) + return false; + return object instanceof ArrayBuffer; +} +, isArrayBufferView = function(object) { + if(!supportsArrayBuffer()) + return false; + return (object instanceof Int8Array || + object instanceof Uint8Array || + object instanceof Uint8ClampedArray || + object instanceof Int16Array || + object instanceof Uint16Array || + object instanceof Int32Array || + object instanceof Uint32Array || + object instanceof Float32Array || + object instanceof Float64Array ); +} +, binaryStringToUint8Array = function(binary_string) { + var len = binary_string.length; + var bytes = new Uint8Array( len ); + for (var i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + return bytes; +} +, arrayBufferToBinaryString = function( array_buffer ) { + /*var binary_string = ''; + //var bytes = new Uint8Array( array_buffer ); + var bytes = array_buffer; + var len = bytes.byteLength; + for (var i = 0; i < len; i++) { + binary_string += String.fromCharCode( bytes[ i ] ); + } + return binary_string;*/ + + if(isArrayBufferView()) + array_buffer = array_buffer.buffer; + + var base64 = base64ArrayBuffer(array_buffer); + + return window.atob(base64); +} +, createImageInfo = function(data, wd, ht, cs, bpc, f, imageIndex, alias, dp, trns, pal, smask) { + var info = { + alias:alias, + w : wd, + h : ht, + cs : cs, + bpc : bpc, + i : imageIndex, + data : data + // n: objectNumber will be added by putImage code + }; + + if(f) + info.f = f; + + if(dp) + info.dp = dp; + + if(trns) + info.trns = trns; + + if(pal) + info.pal = pal; + + if(smask) + info.smask = smask; + + return info; +}; jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias) { 'use strict' var images = this.internal.collections[namespace + 'images'], - cached_info; + cached_info, + binaryStringData; if(typeof format === 'number') { var tmp = h; @@ -151,12 +255,27 @@ jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias) { w = y; y = x; x = format; - format = tmp || 'JPEG'; + format = tmp || 'jpeg'; } + if(typeof alias === 'undefined') { // TODO: Alias dynamic generation from imageData's checksum/hash } + if (typeof imageData === 'object' && imageData.nodeType === 1) { + var canvas = document.createElement('canvas'); + canvas.width = imageData.clientWidth || imageData.width; + canvas.height = imageData.clientHeight || imageData.height; + + var ctx = canvas.getContext('2d'); + if (!ctx) { + throw ('addImage requires canvas to be supported by browser.'); + } + ctx.drawImage(imageData, 0, 0, canvas.width, canvas.height); + imageData = canvas.toDataURL(); + format = "png"; + } + if(typeof imageData === 'string') { if(imageData.charCodeAt(0) !== 0xff && imageData.substr(0,5) !== 'data:') { // This is neither raw jpeg-data nor a data uri; alias? @@ -171,36 +290,35 @@ jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias) { } } - } else if(imageData.substr(0,14) === 'data:image/jpg') { - imageData = imageData.replace('data:image/jpg','data:image/jpeg'); + } else { + + var base64Info = extractBase64Info(imageData); + + if(base64Info) { + + format = base64Info[2]; + imageData = atob(base64Info[3]);//convert to binary string + + /* + * need to test if it's more efficent to convert all binary strings + * to TypedArray - or should we just leave and process as string? + */ + if(supportsArrayBuffer()) { + binaryStringData = imageData; + imageData = binaryStringToUint8Array(imageData); + } + + } } } - if (typeof imageData === 'object' && imageData.nodeType === 1) { - var canvas = document.createElement('canvas'); - canvas.width = imageData.clientWidth || imageData.width; - canvas.height = imageData.clientHeight || imageData.height; - - var ctx = canvas.getContext('2d'); - if (!ctx) { - throw ('addImage requires canvas to be supported by browser.'); - } - ctx.drawImage(imageData, 0, 0, canvas.width, canvas.height); - imageData = canvas.toDataURL('image/jpeg'); - format = "JPEG"; - } - if (format.toUpperCase() !== 'JPEG') { - throw new Error('addImage currently only supports format \'JPEG\', not \''+format+'\''); - } + + if( supported_image_types.indexOf(format.toLowerCase()) == -1 ) + throw new Error('addImage currently only supports formats ' + supported_image_types + ', not \''+format+'\''); var imageIndex , coord = this.internal.getCoordinateString , vcoord = this.internal.getVerticalCoordinateString; - // Detect if the imageData is raw binary or Data URL - if (imageData.substring(0, 23) === 'data:image/jpeg;base64,') { - imageData = atob(imageData.replace('data:image/jpeg;base64,', '')); - } - if (images){ // this is NOT the first time this method is ran on this instance of jsPDF object. imageIndex = Object.keys ? @@ -218,20 +336,128 @@ jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias) { this.internal.events.subscribe('putXobjectDict', putXObjectsDictCallback) } - var info = cached_info || (function(dims) { - return images[imageIndex] = { - alias:alias, - w : dims[0], - h : dims[1], - cs : 'DeviceRGB', - bpc : 8, - f : 'DCTDecode', - i : imageIndex, - data : imageData - // n: objectNumber will be added by putImage code - }; - })(getJpegSize(imageData)); - + var info = cached_info; + + if(!info) { + + var img, + dims, + dp, + trns, + colorSpace = color_spaces[0], + filter = filter_methods[0], + bpc = 8, + colors, + pal, + smask; + + format = format.toLocaleLowerCase(); + + /* + * we have a binary string + */ + if(typeof imageData === 'string') { + + if(['jpeg', 'jpg'].indexOf(format) !== -1) { + + dims = getJpegSize(imageData); + info = createImageInfo(imageData, dims[0], dims[1], colorSpace, bpc, filter, imageIndex, alias); + } + + if(format === 'png') { + + } + } + + if(isArrayBuffer(imageData)) + imageData = new Uint8Array(imageData); + + if(isArrayBufferView(imageData)) { + + if(['jpeg', 'jpg'].indexOf(format) !== -1) { + img = new JpegImage(); + img.parse(imageData); + + /* + * check if already have a stored binary string rep + */ + imageData = binaryStringData || arrayBufferToBinaryString(imageData); + + info = createImageInfo(imageData, img.width, img.height, colorSpace, bpc, filter, imageIndex, alias); + } + + if(format === 'png') { + + img = new PNG(imageData); + imageData = img.imgData; + bpc = img.bits; + colorSpace = img.colorSpace; + colors = img.colors; + filter = filter_methods[1];//FlateDecode as png pixels are compressed + + /* + * we need to extract alpha layer and add it as a smask + */ + if(img.colorType === 6 && + img.pixelBitlength === 32) { + + var //pixels = new DataView(img.decode().buffer), + pixels = new Uint32Array(img.decode().buffer), + //len = pixels.byteLength / 4, + len = pixels.length, + colorData = new Uint8Array(len * 3), + transData = new Uint8Array(len), + pixel, + i = 0, + n = 0; + + for(; i < len; i++) { + //pixel = pixels.getInt32(i); + pixel = pixels[i]; + + colorData[n++] = ( pixel >> 0 ) & 0xff; + colorData[n++] = ( pixel >> 8 ) & 0xff; + colorData[n++] = ( pixel >> 16 ) & 0xff; + + transData[i] = ( pixel >> 24 ) & 0xff; + } + + imageData = colorData; + smask = arrayBufferToBinaryString(transData); + filter = null; + } + + if(filter === filter_methods[1]) + dp = '/Predictor 15 /Colors '+ colors +' /BitsPerComponent '+ bpc +' /Columns '+ img.width; + + if(img.palette && img.palette.length > 0) + pal = img.palette; + + if(img.transparency.indexed) + trns = img.transparency.indexed; + + info = createImageInfo(arrayBufferToBinaryString(imageData), + img.width, + img.height, + colorSpace, + bpc, + filter, + imageIndex, + alias, + dp, + trns, + pal, + smask); + } + } + + } + + if( !info ) + throw new Error('Something went wrong, theres no image info'); + + images[imageIndex] = info; + if (!w && !h) { w = -96; h = -96; From 9078189fe6cf4764d09d4558837ac6c9246d7093 Mon Sep 17 00:00:00 2001 From: jamesrobb Date: Sat, 15 Feb 2014 19:51:43 +0000 Subject: [PATCH 2/7] adding png support dependencies --- libs/png_support/arrayBufferToBase64.js | 55 ++ libs/png_support/jpg.js | 956 ++++++++++++++++++++++++ libs/png_support/png.js | 461 ++++++++++++ libs/png_support/zlib.js | 464 ++++++++++++ 4 files changed, 1936 insertions(+) create mode 100644 libs/png_support/arrayBufferToBase64.js create mode 100755 libs/png_support/jpg.js create mode 100755 libs/png_support/png.js create mode 100755 libs/png_support/zlib.js diff --git a/libs/png_support/arrayBufferToBase64.js b/libs/png_support/arrayBufferToBase64.js new file mode 100644 index 000000000..f200e30df --- /dev/null +++ b/libs/png_support/arrayBufferToBase64.js @@ -0,0 +1,55 @@ +// Converts an ArrayBuffer directly to base64, without any intermediate 'convert to string then +// use window.btoa' step. According to my tests, this appears to be a faster approach: +// http://jsperf.com/encoding-xhr-image-data/5 + +function base64ArrayBuffer(arrayBuffer) { + var base64 = '' + var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + + var bytes = new Uint8Array(arrayBuffer) + var byteLength = bytes.byteLength + var byteRemainder = byteLength % 3 + var mainLength = byteLength - byteRemainder + + var a, b, c, d + var chunk + + // Main loop deals with bytes in chunks of 3 + for (var i = 0; i < mainLength; i = i + 3) { + // Combine the three bytes into a single integer + chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2] + + // Use bitmasks to extract 6-bit segments from the triplet + a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18 + b = (chunk & 258048) >> 12 // 258048 = (2^6 - 1) << 12 + c = (chunk & 4032) >> 6 // 4032 = (2^6 - 1) << 6 + d = chunk & 63 // 63 = 2^6 - 1 + + // Convert the raw binary segments to the appropriate ASCII encoding + base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d] + } + + // Deal with the remaining bytes and padding + if (byteRemainder == 1) { + chunk = bytes[mainLength] + + a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2 + + // Set the 4 least significant bits to zero + b = (chunk & 3) << 4 // 3 = 2^2 - 1 + + base64 += encodings[a] + encodings[b] + '==' + } else if (byteRemainder == 2) { + chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1] + + a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10 + b = (chunk & 1008) >> 4 // 1008 = (2^6 - 1) << 4 + + // Set the 2 least significant bits to zero + c = (chunk & 15) << 2 // 15 = 2^4 - 1 + + base64 += encodings[a] + encodings[b] + encodings[c] + '=' + } + + return base64 +} \ No newline at end of file diff --git a/libs/png_support/jpg.js b/libs/png_support/jpg.js new file mode 100755 index 000000000..51398eee2 --- /dev/null +++ b/libs/png_support/jpg.js @@ -0,0 +1,956 @@ +/* -*- 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 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 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, 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, zz) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : receiveAndExtend(t); + zz[0]= (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]; + zz[z] = receiveAndExtend(s); + k++; + } + } + function decodeDCFirst(component, zz) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive); + zz[0] = (component.pred += diff); + } + function decodeDCSuccessive(component, zz) { + zz[0] |= readBit() << successive; + } + var eobrun = 0; + function decodeACFirst(component, zz) { + 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]; + zz[z] = receiveAndExtend(s) * (1 << successive); + k++; + } + } + var successiveACState = 0, successiveACNextValue; + function decodeACSuccessive(component, zz) { + 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 (zz[z]) + zz[z] += (readBit() << successive); + else { + r--; + if (r === 0) + successiveACState = successiveACState == 2 ? 3 : 0; + } + break; + case 3: // set value for a zero item + if (zz[z]) + zz[z] += (readBit() << successive); + else { + zz[z] = successiveACNextValue << successive; + successiveACState = 0; + } + break; + case 4: // eob + if (zz[z]) + zz[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; + decode(component, component.blocks[blockRow][blockCol]); + } + function decodeBlock(component, decode, mcu) { + var blockRow = (mcu / component.blocksPerLine) | 0; + var blockCol = mcu % component.blocksPerLine; + decode(component, component.blocks[blockRow][blockCol]); + } + + 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; + } + + function buildComponentData(frame, component) { + var lines = []; + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var samplesPerLine = blocksPerLine << 3; + var R = new Int32Array(64), r = new Uint8Array(64); + + // 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(zz, dataOut, dataIn) { + var qt = component.quantizationTable; + var v0, v1, v2, v3, v4, v5, v6, v7, t; + var p = dataIn; + var i; + + // dequant + for (i = 0; i < 64; i++) + p[i] = zz[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 * dataIn[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 sample = 128 + ((p[i] + 8) >> 4); + dataOut[i] = sample < 0 ? 0 : sample > 0xFF ? 0xFF : sample; + } + } + + var i, j; + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + var scanLine = blockRow << 3; + for (i = 0; i < 8; i++) + lines.push(new Uint8Array(samplesPerLine)); + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + quantizeAndInverse(component.blocks[blockRow][blockCol], r, R); + + var offset = 0, sample = blockCol << 3; + for (j = 0; j < 8; j++) { + var line = lines[scanLine + j]; + for (i = 0; i < 8; i++) + line[sample + i] = r[offset++]; + } + } + } + return lines; + } + + function clampTo8bit(a) { + return a < 0 ? 0 : a > 255 ? 255 : a; + } + + constructor.prototype = { + load: function load(path) { + 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 || xhr.mozResponseArrayBuffer); + this.parse(data); + if (this.onload) + this.onload(); + }).bind(this); + xhr.send(null); + }, + parse: function parse(data) { + var offset = 0, length = data.length; + 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 maxH = 0, maxV = 0; + var component, componentId; + for (componentId in frame.components) { + if (frame.components.hasOwnProperty(componentId)) { + component = frame.components[componentId]; + if (maxH < component.h) maxH = component.h; + if (maxV < component.v) maxV = component.v; + } + } + var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / maxH); + var mcusPerColumn = Math.ceil(frame.scanLines / 8 / maxV); + for (componentId in frame.components) { + if (frame.components.hasOwnProperty(componentId)) { + component = frame.components[componentId]; + var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / maxH); + var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / maxV); + var blocksPerLineForMcu = mcusPerLine * component.h; + var blocksPerColumnForMcu = mcusPerColumn * component.v; + var blocks = []; + for (var i = 0; i < blocksPerColumnForMcu; i++) { + var row = []; + for (var j = 0; j < blocksPerLineForMcu; j++) + row.push(new Int32Array(64)); + blocks.push(row); + } + component.blocksPerLine = blocksPerLine; + component.blocksPerColumn = blocksPerColumn; + component.blocks = blocks; + } + } + frame.maxH = maxH; + frame.maxV = maxV; + frame.mcusPerLine = mcusPerLine; + frame.mcusPerColumn = mcusPerColumn; + } + var jfif = null; + var adobe = null; + var pixels = null; + var frame, resetInterval; + var quantizationTables = [], frames = []; + 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 z = dctZigZag[j]; + tableData[z] = 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) + 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.componentsOrder = []; + 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; + var qId = data[offset + 2]; + frame.componentsOrder.push(componentId); + frame.components[componentId] = { + h: h, + v: v, + quantizationTable: quantizationTables[qId] + }; + offset += 3; + } + prepareComponents(frame); + frames.push(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++) { + component = frame.components[data[offset++]]; + 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(); + } + if (frames.length != 1) + throw "only single frame JPEGs supported"; + + this.width = frame.samplesPerLine; + this.height = frame.scanLines; + this.jfif = jfif; + this.adobe = adobe; + this.components = []; + for (var i = 0; i < frame.componentsOrder.length; i++) { + var component = frame.components[frame.componentsOrder[i]]; + this.components.push({ + lines: buildComponentData(frame, component), + scaleX: component.h / frame.maxH, + scaleY: component.v / frame.maxV + }); + } + }, + getData: function getData(width, height) { + var scaleX = this.width / width, scaleY = this.height / height; + + var component1, component2, component3, component4; + var component1Line, component2Line, component3Line, component4Line; + var x, y; + var offset = 0; + var Y, Cb, Cr, K, C, M, Ye, R, G, B; + var colorTransform; + var dataLength = width * height * this.components.length; + var data = new Uint8Array(dataLength); + switch (this.components.length) { + case 1: + component1 = this.components[0]; + for (y = 0; y < height; y++) { + component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; + for (x = 0; x < width; x++) { + Y = component1Line[0 | (x * component1.scaleX * scaleX)]; + + data[offset++] = Y; + } + } + break; + case 2: + // PDF might compress two component data in custom colorspace + component1 = this.components[0]; + component2 = this.components[1]; + for (y = 0; y < height; y++) { + component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; + component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)]; + for (x = 0; x < width; x++) { + Y = component1Line[0 | (x * component1.scaleX * scaleX)]; + data[offset++] = Y; + Y = component2Line[0 | (x * component2.scaleX * scaleX)]; + data[offset++] = Y; + } + } + break; + 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; + + component1 = this.components[0]; + component2 = this.components[1]; + component3 = this.components[2]; + for (y = 0; y < height; y++) { + component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; + component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)]; + component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)]; + for (x = 0; x < width; x++) { + if (!colorTransform) { + R = component1Line[0 | (x * component1.scaleX * scaleX)]; + G = component2Line[0 | (x * component2.scaleX * scaleX)]; + B = component3Line[0 | (x * component3.scaleX * scaleX)]; + } else { + Y = component1Line[0 | (x * component1.scaleX * scaleX)]; + Cb = component2Line[0 | (x * component2.scaleX * scaleX)]; + Cr = component3Line[0 | (x * component3.scaleX * scaleX)]; + + R = clampTo8bit(Y + 1.402 * (Cr - 128)); + G = clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128)); + B = clampTo8bit(Y + 1.772 * (Cb - 128)); + } + + data[offset++] = R; + data[offset++] = G; + data[offset++] = 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; + + component1 = this.components[0]; + component2 = this.components[1]; + component3 = this.components[2]; + component4 = this.components[3]; + for (y = 0; y < height; y++) { + component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; + component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)]; + component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)]; + component4Line = component4.lines[0 | (y * component4.scaleY * scaleY)]; + for (x = 0; x < width; x++) { + if (!colorTransform) { + C = component1Line[0 | (x * component1.scaleX * scaleX)]; + M = component2Line[0 | (x * component2.scaleX * scaleX)]; + Ye = component3Line[0 | (x * component3.scaleX * scaleX)]; + K = component4Line[0 | (x * component4.scaleX * scaleX)]; + } else { + Y = component1Line[0 | (x * component1.scaleX * scaleX)]; + Cb = component2Line[0 | (x * component2.scaleX * scaleX)]; + Cr = component3Line[0 | (x * component3.scaleX * scaleX)]; + K = component4Line[0 | (x * component4.scaleX * scaleX)]; + + C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128)); + M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128)); + Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128)); + } + data[offset++] = C; + data[offset++] = M; + data[offset++] = Ye; + data[offset++] = K; + } + } + break; + default: + throw 'Unsupported color mode'; + } + return data; + }, + copyToImageData: function copyToImageData(imageData) { + var width = imageData.width, height = imageData.height; + var imageDataArray = imageData.data; + var data = this.getData(width, height); + var i = 0, j = 0, x, y; + var Y, K, C, M, R, G, B; + switch (this.components.length) { + case 1: + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + Y = data[i++]; + + imageDataArray[j++] = Y; + imageDataArray[j++] = Y; + imageDataArray[j++] = Y; + imageDataArray[j++] = 255; + } + } + break; + case 3: + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + R = data[i++]; + G = data[i++]; + B = data[i++]; + + imageDataArray[j++] = R; + imageDataArray[j++] = G; + imageDataArray[j++] = B; + imageDataArray[j++] = 255; + } + } + break; + case 4: + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + C = data[i++]; + M = data[i++]; + Y = data[i++]; + K = data[i++]; + + R = 255 - clampTo8bit(C * (1 - K / 255) + K); + G = 255 - clampTo8bit(M * (1 - K / 255) + K); + B = 255 - clampTo8bit(Y * (1 - K / 255) + K); + + imageDataArray[j++] = R; + imageDataArray[j++] = G; + imageDataArray[j++] = B; + imageDataArray[j++] = 255; + } + } + break; + default: + throw 'Unsupported color mode'; + } + } + }; + + return constructor; +})(); diff --git a/libs/png_support/png.js b/libs/png_support/png.js new file mode 100755 index 000000000..83be09ee9 --- /dev/null +++ b/libs/png_support/png.js @@ -0,0 +1,461 @@ +// Generated by CoffeeScript 1.4.0 + +/* +# MIT LICENSE +# Copyright (c) 2011 Devon Govett +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of this +# software and associated documentation files (the "Software"), to deal in the Software +# without restriction, including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +# to whom the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all copies or +# substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + + +(function() { + var PNG; + + PNG = (function() { + var APNG_BLEND_OP_OVER, APNG_BLEND_OP_SOURCE, APNG_DISPOSE_OP_BACKGROUND, APNG_DISPOSE_OP_NONE, APNG_DISPOSE_OP_PREVIOUS, makeImage, scratchCanvas, scratchCtx; + + PNG.load = function(url, canvas, callback) { + var xhr, + _this = this; + if (typeof canvas === 'function') { + callback = canvas; + } + xhr = new XMLHttpRequest; + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = function() { + var data, png; + data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer); + png = new PNG(data); + if (typeof (canvas != null ? canvas.getContext : void 0) === 'function') { + png.render(canvas); + } + return typeof callback === "function" ? callback(png) : void 0; + }; + return xhr.send(null); + }; + + APNG_DISPOSE_OP_NONE = 0; + + APNG_DISPOSE_OP_BACKGROUND = 1; + + APNG_DISPOSE_OP_PREVIOUS = 2; + + APNG_BLEND_OP_SOURCE = 0; + + APNG_BLEND_OP_OVER = 1; + + function PNG(data) { + var chunkSize, colors, delayDen, delayNum, frame, i, index, key, section, short, text, _i, _j, _ref; + this.data = data; + this.pos = 8; + this.palette = []; + this.imgData = []; + this.transparency = {}; + this.animation = null; + this.text = {}; + frame = null; + while (true) { + chunkSize = this.readUInt32(); + section = ((function() { + var _i, _results; + _results = []; + for (i = _i = 0; _i < 4; i = ++_i) { + _results.push(String.fromCharCode(this.data[this.pos++])); + } + return _results; + }).call(this)).join(''); + switch (section) { + case 'IHDR': + this.width = this.readUInt32(); + this.height = this.readUInt32(); + this.bits = this.data[this.pos++]; + this.colorType = this.data[this.pos++]; + this.compressionMethod = this.data[this.pos++]; + this.filterMethod = this.data[this.pos++]; + this.interlaceMethod = this.data[this.pos++]; + break; + case 'acTL': + this.animation = { + numFrames: this.readUInt32(), + numPlays: this.readUInt32() || Infinity, + frames: [] + }; + break; + case 'PLTE': + this.palette = this.read(chunkSize); + break; + case 'fcTL': + if (frame) { + this.animation.frames.push(frame); + } + this.pos += 4; + frame = { + width: this.readUInt32(), + height: this.readUInt32(), + xOffset: this.readUInt32(), + yOffset: this.readUInt32() + }; + delayNum = this.readUInt16(); + delayDen = this.readUInt16() || 100; + frame.delay = 1000 * delayNum / delayDen; + frame.disposeOp = this.data[this.pos++]; + frame.blendOp = this.data[this.pos++]; + frame.data = []; + break; + case 'IDAT': + case 'fdAT': + if (section === 'fdAT') { + this.pos += 4; + chunkSize -= 4; + } + data = (frame != null ? frame.data : void 0) || this.imgData; + for (i = _i = 0; 0 <= chunkSize ? _i < chunkSize : _i > chunkSize; i = 0 <= chunkSize ? ++_i : --_i) { + data.push(this.data[this.pos++]); + } + break; + case 'tRNS': + this.transparency = {}; + switch (this.colorType) { + case 3: + this.transparency.indexed = this.read(chunkSize); + if (short > 0) { + for (i = _j = 0; 0 <= short ? _j < short : _j > short; i = 0 <= short ? ++_j : --_j) { + this.transparency.indexed.push(255); + } + } + break; + case 0: + this.transparency.grayscale = this.read(chunkSize)[0]; + break; + case 2: + this.transparency.rgb = this.read(chunkSize); + } + break; + case 'tEXt': + text = this.read(chunkSize); + index = text.indexOf(0); + key = String.fromCharCode.apply(String, text.slice(0, index)); + this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1)); + break; + case 'IEND': + if (frame) { + this.animation.frames.push(frame); + } + this.colors = (function() { + switch (this.colorType) { + case 0: + case 3: + case 4: + return 1; + case 2: + case 6: + return 3; + } + }).call(this); + this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6; + colors = this.colors + (this.hasAlphaChannel ? 1 : 0); + this.pixelBitlength = this.bits * colors; + this.colorSpace = (function() { + switch (this.colors) { + case 1: + //ADDED + if(this.colorType == 3) + return 'Indexed'; + //// + return 'DeviceGray'; + case 3: + return 'DeviceRGB'; + } + }).call(this); + this.imgData = new Uint8Array(this.imgData); + return; + default: + this.pos += chunkSize; + } + this.pos += 4; + if (this.pos > this.data.length) { + throw new Error("Incomplete or corrupt PNG file"); + } + } + return; + } + + PNG.prototype.read = function(bytes) { + var i, _i, _results; + _results = []; + for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) { + _results.push(this.data[this.pos++]); + } + return _results; + }; + + PNG.prototype.readUInt32 = function() { + var b1, b2, b3, b4; + b1 = this.data[this.pos++] << 24; + b2 = this.data[this.pos++] << 16; + b3 = this.data[this.pos++] << 8; + b4 = this.data[this.pos++]; + return b1 | b2 | b3 | b4; + }; + + PNG.prototype.readUInt16 = function() { + var b1, b2; + b1 = this.data[this.pos++] << 8; + b2 = this.data[this.pos++]; + return b1 | b2; + }; + + PNG.prototype.decodePixels = function(data) { + var byte, c, col, i, left, length, p, pa, paeth, pb, pc, pixelBytes, pixels, pos, row, scanlineLength, upper, upperLeft, _i, _j, _k, _l, _m; + if (data == null) { + data = this.imgData; + } + if (data.length === 0) { + return new Uint8Array(0); + } + data = new FlateStream(data); + data = data.getBytes(); + pixelBytes = this.pixelBitlength / 8; + scanlineLength = pixelBytes * this.width; + pixels = new Uint8Array(scanlineLength * this.height); + length = data.length; + row = 0; + pos = 0; + c = 0; + while (pos < length) { + switch (data[pos++]) { + case 0: + for (i = _i = 0; _i < scanlineLength; i = _i += 1) { + pixels[c++] = data[pos++]; + } + break; + case 1: + for (i = _j = 0; _j < scanlineLength; i = _j += 1) { + byte = data[pos++]; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + pixels[c++] = (byte + left) % 256; + } + break; + case 2: + for (i = _k = 0; _k < scanlineLength; i = _k += 1) { + byte = data[pos++]; + col = (i - (i % pixelBytes)) / pixelBytes; + upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)]; + pixels[c++] = (upper + byte) % 256; + } + break; + case 3: + for (i = _l = 0; _l < scanlineLength; i = _l += 1) { + byte = data[pos++]; + col = (i - (i % pixelBytes)) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)]; + pixels[c++] = (byte + Math.floor((left + upper) / 2)) % 256; + } + break; + case 4: + for (i = _m = 0; _m < scanlineLength; i = _m += 1) { + byte = data[pos++]; + col = (i - (i % pixelBytes)) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + if (row === 0) { + upper = upperLeft = 0; + } else { + upper = pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)]; + upperLeft = col && pixels[(row - 1) * scanlineLength + (col - 1) * pixelBytes + (i % pixelBytes)]; + } + p = left + upper - upperLeft; + pa = Math.abs(p - left); + pb = Math.abs(p - upper); + pc = Math.abs(p - upperLeft); + if (pa <= pb && pa <= pc) { + paeth = left; + } else if (pb <= pc) { + paeth = upper; + } else { + paeth = upperLeft; + } + pixels[c++] = (byte + paeth) % 256; + } + break; + default: + throw new Error("Invalid filter algorithm: " + data[pos - 1]); + } + row++; + } + return pixels; + }; + + PNG.prototype.decodePalette = function() { + var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1; + palette = this.palette; + transparency = this.transparency.indexed || []; + ret = new Uint8Array((transparency.length || 0) + palette.length); + pos = 0; + length = palette.length; + c = 0; + for (i = _i = 0, _ref = palette.length; _i < _ref; i = _i += 3) { + ret[pos++] = palette[i]; + ret[pos++] = palette[i + 1]; + ret[pos++] = palette[i + 2]; + ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255; + } + return ret; + }; + + PNG.prototype.copyToImageData = function(imageData, pixels) { + var alpha, colors, data, i, input, j, k, length, palette, v, _ref; + colors = this.colors; + palette = null; + alpha = this.hasAlphaChannel; + if (this.palette.length) { + palette = (_ref = this._decodedPalette) != null ? _ref : this._decodedPalette = this.decodePalette(); + colors = 4; + alpha = true; + } + data = imageData.data || imageData; + length = data.length; + input = palette || pixels; + i = j = 0; + if (colors === 1) { + while (i < length) { + k = palette ? pixels[i / 4] * 4 : j; + v = input[k++]; + data[i++] = v; + data[i++] = v; + data[i++] = v; + data[i++] = alpha ? input[k++] : 255; + j = k; + } + } else { + while (i < length) { + k = palette ? pixels[i / 4] * 4 : j; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = alpha ? input[k++] : 255; + j = k; + } + } + }; + + PNG.prototype.decode = function() { + var ret; + ret = new Uint8Array(this.width * this.height * 4); + this.copyToImageData(ret, this.decodePixels()); + return ret; + }; + + scratchCanvas = document.createElement('canvas'); + + scratchCtx = scratchCanvas.getContext('2d'); + + makeImage = function(imageData) { + var img; + scratchCtx.width = imageData.width; + scratchCtx.height = imageData.height; + scratchCtx.clearRect(0, 0, imageData.width, imageData.height); + scratchCtx.putImageData(imageData, 0, 0); + img = new Image; + img.src = scratchCanvas.toDataURL(); + return img; + }; + + PNG.prototype.decodeFrames = function(ctx) { + var frame, i, imageData, pixels, _i, _len, _ref, _results; + if (!this.animation) { + return; + } + _ref = this.animation.frames; + _results = []; + for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { + frame = _ref[i]; + imageData = ctx.createImageData(frame.width, frame.height); + pixels = this.decodePixels(new Uint8Array(frame.data)); + this.copyToImageData(imageData, pixels); + frame.imageData = imageData; + _results.push(frame.image = makeImage(imageData)); + } + return _results; + }; + + PNG.prototype.renderFrame = function(ctx, number) { + var frame, frames, prev; + frames = this.animation.frames; + frame = frames[number]; + prev = frames[number - 1]; + if (number === 0) { + ctx.clearRect(0, 0, this.width, this.height); + } + if ((prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND) { + ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height); + } else if ((prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS) { + ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset); + } + if (frame.blendOp === APNG_BLEND_OP_SOURCE) { + ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height); + } + return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset); + }; + + PNG.prototype.animate = function(ctx) { + var doFrame, frameNumber, frames, numFrames, numPlays, _ref, + _this = this; + frameNumber = 0; + _ref = this.animation, numFrames = _ref.numFrames, frames = _ref.frames, numPlays = _ref.numPlays; + return (doFrame = function() { + var f, frame; + f = frameNumber++ % numFrames; + frame = frames[f]; + _this.renderFrame(ctx, f); + if (numFrames > 1 && frameNumber / numFrames < numPlays) { + return _this.animation._timeout = setTimeout(doFrame, frame.delay); + } + })(); + }; + + PNG.prototype.stopAnimation = function() { + var _ref; + return clearTimeout((_ref = this.animation) != null ? _ref._timeout : void 0); + }; + + PNG.prototype.render = function(canvas) { + var ctx, data; + if (canvas._png) { + canvas._png.stopAnimation(); + } + canvas._png = this; + canvas.width = this.width; + canvas.height = this.height; + ctx = canvas.getContext("2d"); + if (this.animation) { + this.decodeFrames(ctx); + return this.animate(ctx); + } else { + data = ctx.createImageData(this.width, this.height); + this.copyToImageData(data, this.decodePixels()); + return ctx.putImageData(data, 0, 0); + } + }; + + return PNG; + + })(); + + window.PNG = PNG; + +}).call(this); diff --git a/libs/png_support/zlib.js b/libs/png_support/zlib.js new file mode 100755 index 000000000..2d0f40b26 --- /dev/null +++ b/libs/png_support/zlib.js @@ -0,0 +1,464 @@ +/* + * Extracted from pdf.js + * https://github.com/andreasgal/pdf.js + * + * Copyright (c) 2011 Mozilla Foundation + * + * Contributors: Andreas Gal + * Chris G Jones + * Shaon Barman + * Vivien Nicolas <21@vingtetun.org> + * Justin D'Arcangelo + * Yury Delendik + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +var DecodeStream = (function() { + function constructor() { + this.pos = 0; + this.bufferLength = 0; + this.eof = false; + this.buffer = null; + } + + constructor.prototype = { + ensureBuffer: function decodestream_ensureBuffer(requested) { + var buffer = this.buffer; + var current = buffer ? buffer.byteLength : 0; + if (requested < current) + return buffer; + var size = 512; + while (size < requested) + size <<= 1; + var buffer2 = new Uint8Array(size); + for (var i = 0; i < current; ++i) + buffer2[i] = buffer[i]; + return this.buffer = buffer2; + }, + getByte: function decodestream_getByte() { + var pos = this.pos; + while (this.bufferLength <= pos) { + if (this.eof) + return null; + this.readBlock(); + } + return this.buffer[this.pos++]; + }, + getBytes: function decodestream_getBytes(length) { + var pos = this.pos; + + if (length) { + this.ensureBuffer(pos + length); + var end = pos + length; + + while (!this.eof && this.bufferLength < end) + this.readBlock(); + + var bufEnd = this.bufferLength; + if (end > bufEnd) + end = bufEnd; + } else { + while (!this.eof) + this.readBlock(); + + var end = this.bufferLength; + } + + this.pos = end; + return this.buffer.subarray(pos, end); + }, + lookChar: function decodestream_lookChar() { + var pos = this.pos; + while (this.bufferLength <= pos) { + if (this.eof) + return null; + this.readBlock(); + } + return String.fromCharCode(this.buffer[this.pos]); + }, + getChar: function decodestream_getChar() { + var pos = this.pos; + while (this.bufferLength <= pos) { + if (this.eof) + return null; + this.readBlock(); + } + return String.fromCharCode(this.buffer[this.pos++]); + }, + makeSubStream: function decodestream_makeSubstream(start, length, dict) { + var end = start + length; + while (this.bufferLength <= end && !this.eof) + this.readBlock(); + return new Stream(this.buffer, start, length, dict); + }, + skip: function decodestream_skip(n) { + if (!n) + n = 1; + this.pos += n; + }, + reset: function decodestream_reset() { + this.pos = 0; + } + }; + + return constructor; +})(); + +var FlateStream = (function() { + var codeLenCodeMap = new Uint32Array([ + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + ]); + + var lengthDecode = new Uint32Array([ + 0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, + 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, + 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, + 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102 + ]); + + var distDecode = new Uint32Array([ + 0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, + 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, + 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, + 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001 + ]); + + var fixedLitCodeTab = [new Uint32Array([ + 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, + 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, + 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, + 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, + 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, + 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, + 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, + 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, + 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, + 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, + 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, + 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, + 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, + 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, + 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, + 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, + 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, + 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, + 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, + 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, + 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, + 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, + 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, + 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, + 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, + 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, + 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, + 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, + 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, + 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, + 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, + 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, + 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, + 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, + 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, + 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, + 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, + 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, + 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, + 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, + 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, + 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, + 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, + 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, + 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, + 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, + 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, + 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, + 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, + 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, + 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, + 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, + 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, + 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, + 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, + 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, + 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, + 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, + 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, + 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, + 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, + 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, + 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, + 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff + ]), 9]; + + var fixedDistCodeTab = [new Uint32Array([ + 0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, + 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, + 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, + 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000 + ]), 5]; + + function error(e) { + throw new Error(e) + } + + function constructor(bytes) { + //var bytes = stream.getBytes(); + var bytesPos = 0; + + var cmf = bytes[bytesPos++]; + var flg = bytes[bytesPos++]; + if (cmf == -1 || flg == -1) + error('Invalid header in flate stream'); + if ((cmf & 0x0f) != 0x08) + error('Unknown compression method in flate stream'); + if ((((cmf << 8) + flg) % 31) != 0) + error('Bad FCHECK in flate stream'); + if (flg & 0x20) + error('FDICT bit set in flate stream'); + + this.bytes = bytes; + this.bytesPos = bytesPos; + + this.codeSize = 0; + this.codeBuf = 0; + + DecodeStream.call(this); + } + + constructor.prototype = Object.create(DecodeStream.prototype); + + constructor.prototype.getBits = function(bits) { + var codeSize = this.codeSize; + var codeBuf = this.codeBuf; + var bytes = this.bytes; + var bytesPos = this.bytesPos; + + var b; + while (codeSize < bits) { + if (typeof (b = bytes[bytesPos++]) == 'undefined') + error('Bad encoding in flate stream'); + codeBuf |= b << codeSize; + codeSize += 8; + } + b = codeBuf & ((1 << bits) - 1); + this.codeBuf = codeBuf >> bits; + this.codeSize = codeSize -= bits; + this.bytesPos = bytesPos; + return b; + }; + + constructor.prototype.getCode = function(table) { + var codes = table[0]; + var maxLen = table[1]; + var codeSize = this.codeSize; + var codeBuf = this.codeBuf; + var bytes = this.bytes; + var bytesPos = this.bytesPos; + + while (codeSize < maxLen) { + var b; + if (typeof (b = bytes[bytesPos++]) == 'undefined') + error('Bad encoding in flate stream'); + codeBuf |= (b << codeSize); + codeSize += 8; + } + var code = codes[codeBuf & ((1 << maxLen) - 1)]; + var codeLen = code >> 16; + var codeVal = code & 0xffff; + if (codeSize == 0 || codeSize < codeLen || codeLen == 0) + error('Bad encoding in flate stream'); + this.codeBuf = (codeBuf >> codeLen); + this.codeSize = (codeSize - codeLen); + this.bytesPos = bytesPos; + return codeVal; + }; + + constructor.prototype.generateHuffmanTable = function(lengths) { + var n = lengths.length; + + // find max code length + var maxLen = 0; + for (var i = 0; i < n; ++i) { + if (lengths[i] > maxLen) + maxLen = lengths[i]; + } + + // build the table + var size = 1 << maxLen; + var codes = new Uint32Array(size); + for (var len = 1, code = 0, skip = 2; + len <= maxLen; + ++len, code <<= 1, skip <<= 1) { + for (var val = 0; val < n; ++val) { + if (lengths[val] == len) { + // bit-reverse the code + var code2 = 0; + var t = code; + for (var i = 0; i < len; ++i) { + code2 = (code2 << 1) | (t & 1); + t >>= 1; + } + + // fill the table entries + for (var i = code2; i < size; i += skip) + codes[i] = (len << 16) | val; + + ++code; + } + } + } + + return [codes, maxLen]; + }; + + constructor.prototype.readBlock = function() { + function repeat(stream, array, len, offset, what) { + var repeat = stream.getBits(len) + offset; + while (repeat-- > 0) + array[i++] = what; + } + + // read block header + var hdr = this.getBits(3); + if (hdr & 1) + this.eof = true; + hdr >>= 1; + + if (hdr == 0) { // uncompressed block + var bytes = this.bytes; + var bytesPos = this.bytesPos; + var b; + + if (typeof (b = bytes[bytesPos++]) == 'undefined') + error('Bad block header in flate stream'); + var blockLen = b; + if (typeof (b = bytes[bytesPos++]) == 'undefined') + error('Bad block header in flate stream'); + blockLen |= (b << 8); + if (typeof (b = bytes[bytesPos++]) == 'undefined') + error('Bad block header in flate stream'); + var check = b; + if (typeof (b = bytes[bytesPos++]) == 'undefined') + error('Bad block header in flate stream'); + check |= (b << 8); + if (check != (~blockLen & 0xffff)) + error('Bad uncompressed block length in flate stream'); + + this.codeBuf = 0; + this.codeSize = 0; + + var bufferLength = this.bufferLength; + var buffer = this.ensureBuffer(bufferLength + blockLen); + var end = bufferLength + blockLen; + this.bufferLength = end; + for (var n = bufferLength; n < end; ++n) { + if (typeof (b = bytes[bytesPos++]) == 'undefined') { + this.eof = true; + break; + } + buffer[n] = b; + } + this.bytesPos = bytesPos; + return; + } + + var litCodeTable; + var distCodeTable; + if (hdr == 1) { // compressed block, fixed codes + litCodeTable = fixedLitCodeTab; + distCodeTable = fixedDistCodeTab; + } else if (hdr == 2) { // compressed block, dynamic codes + var numLitCodes = this.getBits(5) + 257; + var numDistCodes = this.getBits(5) + 1; + var numCodeLenCodes = this.getBits(4) + 4; + + // build the code lengths code table + var codeLenCodeLengths = Array(codeLenCodeMap.length); + var i = 0; + while (i < numCodeLenCodes) + codeLenCodeLengths[codeLenCodeMap[i++]] = this.getBits(3); + var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); + + // build the literal and distance code tables + var len = 0; + var i = 0; + var codes = numLitCodes + numDistCodes; + var codeLengths = new Array(codes); + while (i < codes) { + var code = this.getCode(codeLenCodeTab); + if (code == 16) { + repeat(this, codeLengths, 2, 3, len); + } else if (code == 17) { + repeat(this, codeLengths, 3, 3, len = 0); + } else if (code == 18) { + repeat(this, codeLengths, 7, 11, len = 0); + } else { + codeLengths[i++] = len = code; + } + } + + litCodeTable = + this.generateHuffmanTable(codeLengths.slice(0, numLitCodes)); + distCodeTable = + this.generateHuffmanTable(codeLengths.slice(numLitCodes, codes)); + } else { + error('Unknown block type in flate stream'); + } + + var buffer = this.buffer; + var limit = buffer ? buffer.length : 0; + var pos = this.bufferLength; + while (true) { + var code1 = this.getCode(litCodeTable); + if (code1 < 256) { + if (pos + 1 >= limit) { + buffer = this.ensureBuffer(pos + 1); + limit = buffer.length; + } + buffer[pos++] = code1; + continue; + } + if (code1 == 256) { + this.bufferLength = pos; + return; + } + code1 -= 257; + code1 = lengthDecode[code1]; + var code2 = code1 >> 16; + if (code2 > 0) + code2 = this.getBits(code2); + var len = (code1 & 0xffff) + code2; + code1 = this.getCode(distCodeTable); + code1 = distDecode[code1]; + code2 = code1 >> 16; + if (code2 > 0) + code2 = this.getBits(code2); + var dist = (code1 & 0xffff) + code2; + if (pos + len >= limit) { + buffer = this.ensureBuffer(pos + len); + limit = buffer.length; + } + for (var k = 0; k < len; ++k, ++pos) + buffer[pos] = buffer[pos - dist]; + } + }; + + return constructor; +})(); \ No newline at end of file From a0db64ae6f3aa0543a01ae56ca7c41761f94321d Mon Sep 17 00:00:00 2001 From: jamesrobb Date: Sun, 16 Feb 2014 00:35:25 +0000 Subject: [PATCH 3/7] Added example file Added example file added transparent parameter for greater control of canvas output when adding a DOM element --- examples/images.html | 121 +++++++++++++++++++++++++++++++++ examples/images/24_bit.png | Bin 0 -> 36615 bytes examples/images/32_bit.png | Bin 0 -> 44856 bytes examples/images/jpg.jpg | Bin 0 -> 12405 bytes examples/images/png8_trans.png | Bin 0 -> 13595 bytes jspdf.plugin.addimage.js | 32 +++++++-- 6 files changed, 146 insertions(+), 7 deletions(-) create mode 100644 examples/images.html create mode 100644 examples/images/24_bit.png create mode 100644 examples/images/32_bit.png create mode 100644 examples/images/jpg.jpg create mode 100644 examples/images/png8_trans.png diff --git a/examples/images.html b/examples/images.html new file mode 100644 index 000000000..f4397c4d0 --- /dev/null +++ b/examples/images.html @@ -0,0 +1,121 @@ + + + + + jsPDF png test + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + \ No newline at end of file diff --git a/examples/images/24_bit.png b/examples/images/24_bit.png new file mode 100644 index 0000000000000000000000000000000000000000..3f4b22b85366f0a77b7c1a188f3c74231cd6c78e GIT binary patch literal 36615 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

XITX z^F5r`>j<$m99C?5q0yKVLRSOP;)frEkOBcM0e&DcvK?o)-+ya;y&pwpaM#C=H$~A+%gIJ#$TJUAbwtq{bfPSQUlVdxcfFB5@~4DpuUA`lRk+w+icYNhTvZ!^Y83fC z#6TMx8&|fs6NpgpO|oxc0q_nAB?aQ##y�q9nkLD=Y5b`df_?CrofCC${hD0}mum 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 literal 0 HcmV?d00001 diff --git a/examples/images/32_bit.png b/examples/images/32_bit.png new file mode 100644 index 0000000000000000000000000000000000000000..13254746985ebe2387b726065e6ab608fb79e8f8 GIT binary patch literal 44856 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�cf{Bfo6f+}IR5cpf7V{P< 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 Pb0t+pErohHMCAVf>&V&y literal 0 HcmV?d00001 diff --git a/jspdf.plugin.addimage.js b/jspdf.plugin.addimage.js index e8ce7e96a..846a5269d 100644 --- a/jspdf.plugin.addimage.js +++ b/jspdf.plugin.addimage.js @@ -189,6 +189,9 @@ var getJpegSize = function(imgData) { object instanceof Float64Array ); } , binaryStringToUint8Array = function(binary_string) { + /* + * not sure how efficient this will be will bigger files. Is there a native method? + */ var len = binary_string.length; var bytes = new Uint8Array( len ); for (var i = 0; i < len; i++) { @@ -197,6 +200,20 @@ var getJpegSize = function(imgData) { return bytes; } , arrayBufferToBinaryString = function( array_buffer ) { + /* + * @see this discussion + * http://stackoverflow.com/questions/6965107/converting-between-strings-and-arraybuffers + * + * As stated, i imagine the method below is highly inefficent for large files. Also of note from Mozilla, + * + * "However, this is slow and error-prone, due to the need for multiple conversions (especially if the binary data is not actually byte-format data, but, for example, 32-bit integers or floats)." + * + * https://developer.mozilla.org/en-US/Add-ons/Code_snippets/StringView + * + * Although i'm strugglig to see how it solves this issue? Doesn't appear to be a direct method for conversion? + * + * Async method using Blob and FileReader could be best, but i'm not sure how to fit it into this flow? + */ /*var binary_string = ''; //var bytes = new Uint8Array( array_buffer ); var bytes = array_buffer; @@ -209,9 +226,7 @@ var getJpegSize = function(imgData) { if(isArrayBufferView()) array_buffer = array_buffer.buffer; - var base64 = base64ArrayBuffer(array_buffer); - - return window.atob(base64); + return window.atob(base64ArrayBuffer(array_buffer)); } , createImageInfo = function(data, wd, ht, cs, bpc, f, imageIndex, alias, dp, trns, pal, smask) { var info = { @@ -243,11 +258,13 @@ var getJpegSize = function(imgData) { return info; }; -jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias) { +jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias, transparency) { 'use strict' var images = this.internal.collections[namespace + 'images'], cached_info, binaryStringData; + + transparency = transparency || false; if(typeof format === 'number') { var tmp = h; @@ -272,7 +289,7 @@ jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias) { throw ('addImage requires canvas to be supported by browser.'); } ctx.drawImage(imageData, 0, 0, canvas.width, canvas.height); - imageData = canvas.toDataURL(); + imageData = canvas.toDataURL(transparency ? 'image/png' : 'image/jpeg'); format = "png"; } @@ -433,8 +450,9 @@ jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias) { if(img.palette && img.palette.length > 0) pal = img.palette; - if(img.transparency.indexed) - trns = img.transparency.indexed; + //I'm not sure the output from png.js is correct for this? + /*if(img.transparency.indexed) + trns = img.transparency.indexed;*/ info = createImageInfo(arrayBufferToBinaryString(imageData), img.width, From 3270cdbfd9ed4320fccfe94f93531a372942d19c Mon Sep 17 00:00:00 2001 From: jamesrobb Date: Wed, 19 Feb 2014 22:41:25 +0000 Subject: [PATCH 4/7] added compression heavy refactoring - separated png functionality into separate plugin added compression to transparent pngs added png filter method 0 fixed indexed png colour issues, but still no transparency made addImage method scaleable for new formats --- examples/images.html | 50 +- jspdf.plugin.addimage.js | 906 +++++++++++++----------- jspdf.plugin.png_support.js | 216 ++++++ libs/png_support/arrayBufferToBase64.js | 55 -- libs/png_support/zpipe.min.js | 408 +++++++++++ 5 files changed, 1146 insertions(+), 489 deletions(-) create mode 100755 jspdf.plugin.png_support.js delete mode 100644 libs/png_support/arrayBufferToBase64.js create mode 100644 libs/png_support/zpipe.min.js diff --git a/examples/images.html b/examples/images.html index f4397c4d0..65e54fee4 100644 --- a/examples/images.html +++ b/examples/images.html @@ -7,18 +7,19 @@ - - + + - - + + - - - - + + + + + @@ -30,7 +31,7 @@ var jpgData = 'data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABGAAD/4QMtaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OURFMTU0MDM4RUJEMTFFM0FEMkRCRERBRjBENkQwRjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OURFMTU0MDQ4RUJEMTFFM0FEMkRCRERBRjBENkQwRjgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5REUxNTQwMThFQkQxMUUzQUQyREJEREFGMEQ2RDBGOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5REUxNTQwMjhFQkQxMUUzQUQyREJEREFGMEQ2RDBGOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEAAQDAwMDAwQDAwQGBAMEBgcF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'; - createPDFObject(jpgData, 'base64 jpg', 'jpg'); + createPDFObject(jpgData, 'jpg base64', 'jpg'); } function createFromJpegImg() { @@ -47,11 +48,18 @@ createPDFObject(png32bit, '32 bit base64 png', 'png'); } + function createFromBase6432BitPngCompressed() { + + var png32bit = 'data:image/png;base64,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'; + + createPDFObject(png32bit, '32 bit base64 png compressed', 'png', true); + } + function createFrom32BitPngImg() { var img = document.getElementById('32_bit'); - createPDFObject(img, '32 bit png ', 'png', true); + createPDFObject(img, '32 bit png ', 'png'); } function createFromBase6424BitPng() { @@ -70,30 +78,31 @@ function createFromBase648BitPng() { - var png24bit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAADSCAMAAACmVC/YAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3NDZDREVGOThEN0MxMUUzQTRFMkNERDVCRDNEQzVFNCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3NDZDREVGQThEN0MxMUUzQTRFMkNERDVCRDNEQzVFNCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc0NkNERUY3OEQ3QzExRTNBNEUyQ0RENUJEM0RDNUU0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjc0NkNERUY4OEQ3QzExRTNBNEUyQ0RENUJEM0RDNUU0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+XKa0NgAAAwBQTFRF6iEhky0seQcH5ufmp6cwrKwcDg6uJ3UnRESpDg6SqalrF5cXkpWRGxvZuyEh0xsbbm7TuRsbKCiSrKxMlJQXT7BPJIgk////2trayRkZcG+wGacZlZVPkZGw89fXAEwAVVUFamrujIzOja2NyMnI0qyss86z2yYmxyQkFngW09PzkZJtmlgdze3NjtWOJJckVgMCa5FrJqcmbbBtcMxwBFcENDTYpKWPUpJRrpGRBWYFsEdHkHFx6hoaCAh8aAQDzUlIIsghwMFtFxfGIyPbVlb9jY0ZNzijsrLtJibJTU2YlpYmUMdQbm4vOjrk8rGxIyLphQsFf3x8lEtMZhQUiooiISL6kvmSdXWYJSS4mJg2urm4FIQUkZHrqhcXr6/PpikoJLgkMzPK0JOTc3MMe3sQ65CQGowa6UlJpDQ0aGcIRkbJR0fbpaWjVVXpr21rREToseKxCXQJR0f7hhYV2DU16DIy62xs9PT0JSWjR3hHtTY2NZg1V1fYFmkW+unpe3tLihAHMzO2mxYUGhrqyzU1dhoYz2lqG4Ibx8eFAT0BFFgTqgQECoQKtgkJVlbBlyFk3MfHlREKmAMDYCaXhIQSE44TOKc4Obg5pLejZGQYBARpiooRduN2MYkxeSMWxlsq6en9hIMcuaamplGSzNfMeSsshyAdclQKi4s1KCh6LWkUFRWBoaG8/fT0L4QXrhwfg4MM9B4epHM/AQBboppW9fX9Ly/yzy4e8TQ0xw4OdE5Ozc3XCwvDcSB1mw0Srz4ZC5ILYA4JWDgKexEO7yAgLSvbfAwMawoOq4ch2yA1kx4foUEkhw4QOE8JFRVur2BeOiW5aRAw4h4eDnsNpA4RImAiyy8poKAaRUWCyCBDgIKGDk4Ovr8xDYsN7+/v+/v7r7CwPj7Juy0rkJAQjl9fPCDH0zk/Hh7NgEU+XQQ0X1/v3zwyoNSgPBiiDWUNOghG4i0tEJMQwMHBqYGBTSTHlI4hIK4fwL9cDw/UWuBaPT+4FIoUwxgoGoAWAAAAvPS68QAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAC11SURBVHja7J0JQJTn1e+ZARkRmGFkkQHRCOoMGh0WQRQR4qBsBmVrRZCOuODIoiKirEYQJEEhasA12JArVAuWpLWpFGuDCNNSqw0oWo0g6BWveiliXT4tc895nneGweWqKBAoZyigNl/k1//5n+V53vk0FEPx0tAYQjAEZgjMEJghMENghsAMgRkCQ+NnJL77zve77+DrEBgSW3+mxIJcEMzChe7u/+1gJBIJAfMdcqGCWbhwof5CfX391v9eMPru4eHhjtUUCo2fUTDu+u6tEolOb/39Y2NDI3R1f6pg3Kt9U1IMzFJ8KZLq6mp3d4CyEKBAeLlLJNq9QKatLdXa2jorKyJC19z80dKfHhj9hY4x45YssbQ0iKRgwFf09bcCFy8S1V6SViAz+73+vbNTUwELJyvLxEQsFiOZjz76iYHRd3dMWeLpWfELy9xmR8IFbcV9q7u+V3BCcFpaeLWXfmtrq7b2eySDVDjWAMWkwERcQMAs/eij94rmXcHAzxyeYuA5aZLnEoPIcC+aQluBy0L3VgCTkOYV7tXaCv77HslAAnE4HIJFXFAgTrazE9vZLSVkPvqpgNGHnz48xXKJ5xLLlKhqcFmJPgb1F69gCC8vyCv83fdFJrSzM4vDASoRERFiQJOcLLbbs8d4/l4C5qOlPwUw+sglOC1y3DiDO1GO6LEQhA0lA38KXNxbCSwk8x4sODQ0FLWCXHSBjBjJ2O2xnzZt2nzEgtHvYCSS1tZgTBbHKN9qd/0n6LCzdQiare4ETGsr5BZ+q48frRIdnXfG8gyEAliyTCLy4RVhArkktjOeNnXd1C/nAxc7TKp+BiPRl7RisoCFgEgkT05q6xw4cGC2DqA5+QRl467fSjwHipS7PnY0+u+qGeSST8gkF4hRMcRnxLp77O+tmzJ12ny7PXbJ6Db9CQZoQBUObgUu4CxPCJfZB373u98dIKrRPgl/TMFAgYIShS2wu/67NTShwATA6IqTjZ2ckpNNIrAqQbk2tzOeum7K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'; + var png8bit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAADSCAMAAACmVC/YAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3NDZDREVGOThEN0MxMUUzQTRFMkNERDVCRDNEQzVFNCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3NDZDREVGQThEN0MxMUUzQTRFMkNERDVCRDNEQzVFNCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc0NkNERUY3OEQ3QzExRTNBNEUyQ0RENUJEM0RDNUU0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjc0NkNERUY4OEQ3QzExRTNBNEUyQ0RENUJEM0RDNUU0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+XKa0NgAAAwBQTFRF6iEhky0seQcH5ufmp6cwrKwcDg6uJ3UnRESpDg6SqalrF5cXkpWRGxvZuyEh0xsbbm7TuRsbKCiSrKxMlJQXT7BPJIgk////2trayRkZcG+wGacZlZVPkZGw89fXAEwAVVUFamrujIzOja2NyMnI0qyss86z2yYmxyQkFngW09PzkZJtmlgdze3NjtWOJJckVgMCa5FrJqcmbbBtcMxwBFcENDTYpKWPUpJRrpGRBWYFsEdHkHFx6hoaCAh8aAQDzUlIIsghwMFtFxfGIyPbVlb9jY0ZNzijsrLtJibJTU2YlpYmUMdQbm4vOjrk8rGxIyLphQsFf3x8lEtMZhQUiooiISL6kvmSdXWYJSS4mJg2urm4FIQUkZHrqhcXr6/PpikoJLgkMzPK0JOTc3MMe3sQ65CQGowa6UlJpDQ0aGcIRkbJR0fbpaWjVVXpr21rREToseKxCXQJR0f7hhYV2DU16DIy62xs9PT0JSWjR3hHtTY2NZg1V1fYFmkW+unpe3tLihAHMzO2mxYUGhrqyzU1dhoYz2lqG4Ibx8eFAT0BFFgTqgQECoQKtgkJVlbBlyFk3MfHlREKmAMDYCaXhIQSE44TOKc4Obg5pLejZGQYBARpiooRduN2MYkxeSMWxlsq6en9hIMcuaamplGSzNfMeSsshyAdclQKi4s1KCh6LWkUFRWBoaG8/fT0L4QXrhwfg4MM9B4epHM/AQBboppW9fX9Ly/yzy4e8TQ0xw4OdE5Ozc3XCwvDcSB1mw0Srz4ZC5ILYA4JWDgKexEO7yAgLSvbfAwMawoOq4ch2yA1kx4foUEkhw4QOE8JFRVur2BeOiW5aRAw4h4eDnsNpA4RImAiyy8poKAaRUWCyCBDgIKGDk4Ovr8xDYsN7+/v+/v7r7CwPj7Juy0rkJAQjl9fPCDH0zk/Hh7NgEU+XQQ0X1/v3zwyoNSgPBiiDWUNOghG4i0tEJMQwMHBqYGBTSTHlI4hIK4fwL9cDw/UWuBaPT+4FIoUwxgoGoAWAAAAvPS68QAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAC11SURBVHja7J0JQJTn1e+ZARkRmGFkkQHRCOoMGh0WQRQR4qBsBmVrRZCOuODIoiKirEYQJEEhasA12JArVAuWpLWpFGuDCNNSqw0oWo0g6BWveiliXT4tc895nneGweWqKBAoZyigNl/k1//5n+V53vk0FEPx0tAYQjAEZgjMEJghMENghsAMgRkCQ+NnJL77zve77+DrEBgSW3+mxIJcEMzChe7u/+1gJBIJAfMdcqGCWbhwof5CfX391v9eMPru4eHhjtUUCo2fUTDu+u6tEolOb/39Y2NDI3R1f6pg3Kt9U1IMzFJ8KZLq6mp3d4CyEKBAeLlLJNq9QKatLdXa2jorKyJC19z80dKfHhj9hY4x45YssbQ0iKRgwFf09bcCFy8S1V6SViAz+73+vbNTUwELJyvLxEQsFiOZjz76iYHRd3dMWeLpWfELy9xmR8IFbcV9q7u+V3BCcFpaeLWXfmtrq7b2eySDVDjWAMWkwERcQMAs/eij94rmXcHAzxyeYuA5aZLnEoPIcC+aQluBy0L3VgCTkOYV7tXaCv77HslAAnE4HIJFXFAgTrazE9vZLSVkPvqpgNGHnz48xXKJ5xLLlKhqcFmJPgb1F69gCC8vyCv83fdFJrSzM4vDASoRERFiQJOcLLbbs8d4/l4C5qOlPwUw+sglOC1y3DiDO1GO6LEQhA0lA38KXNxbCSwk8x4sODQ0FLWCXHSBjBjJ2O2xnzZt2nzEgtHvYCSS1tZgTBbHKN9qd/0n6LCzdQiare4ETGsr5BZ+q48frRIdnXfG8gyEAliyTCLy4RVhArkktjOeNnXd1C/nAxc7TKp+BiPRl7RisoCFgEgkT05q6xw4cGC2DqA5+QRl467fSjwHipS7PnY0+u+qGeSST8gkF4hRMcRnxLp77O+tmzJ12ny7PXbJ6Db9CQZoQBUObgUu4CxPCJfZB373u98dIKrRPgl/TMFAgYIShS2wu/67NTShwATA6IqTjZ2ckpNNIrAqQbk2tzOeum7K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'; + //var png8bit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAEG0lEQVQIHQEQBO/7ACVe+QMfZvcDGHHzAxJ87gMLiucDBpjeBQKn0hUAt8UdAMW3HQLSpxUG3pgFC+eKAxLufAMY83EDH/dmAyX5XgMAK1X7AyVe+QMeaPYDFnTxBQ+C6yUIkuE9A6TVTQC1xlUAxrVVA9WkTQjhkj0P64IlFvF0BR72aAMl+V4DK/tVAwAzS/0DLFT7AyVe+Q0cavU1E3nvVQuL5m0En9l9ALTIhQDItIUE2Z99C+aLbRPveVUc9Wo1JfleDSz7VAMz/UsDAD1B/QM2SP0FLlL8NSVe+V0abfR9D4HrlQaY3qUAscqtAMqxrQbemKUP64GVGvRtfSX5Xl0u/FI1Nv1IBT39QQMASTb9A0I8/SU6RP1VMU/8fSVe+Z0XcvK1Co7kxQGuzc0Bza7NCuSOxRfycrUl+V6dMfxPfTr9RFVC/TwlSf02AwBWKvsFUS/8PUo1/W1BPf2VNUr9tSVe+c0SfO7dAqfS5QLSp+US7nzdJflezTX9SrVB/T2VSv01bVH8Lz1W+yoFAGYf9xViIvhNXSX5fVYq+6VMMv3FPUH93SVe+e0GmN71Bt6Y9SX5Xu09/UHdTP0yxVb7KqVd+SV9YvgiTWb3HxUAdhXwHXUW8VVzF/KFcBjzrW0b9M1mH/flVir79SVe+f0l+V79Vvsq9Wb3H+Vt9BvNcPMYrXPyF4V18RZVdvAVHQCHDegdiAznVYoL5oWNCuWtkAnizZcG3uWnAtP12ASf/difBP2n0wL1l94G5ZDiCc2N5QqtiuYLhYjnDFWH6A0dAJcG3hWbBdtNoATYfacC06WxAMvFwAC83dgEn+33H2X192Uf9difBO3AvADdscsAxafTAqWg2AR9m9sFTZfeBhUApwLTBawBzj2zAMhtvADAlcgAs7XYBJ/N6w+B3fsrVuX7Vivl64EP3difBM3IswC1vMAAlbPIAG2szgE9p9MCBQC0AMcDuwDBJcMAuVXMAa592ASfneYLi7XzGW/F/DBPzfxPMM3zbxnF5osLtdifBJ3MrgF9w7kAVbvBACW0xwADAMAAvAPHALUFzwGrNdgEn13jCZB97hJ8lfcfZaX9M0yt/UwzrfdlH6XufBKV45AJfdifBF3PqwE1x7UABcC8AAMAygCyA9ECqQPYBJ8N4QiTNeoOhFXyF3Jt+SReff01SYX9STWF+V4kffJyF23qhA5V4ZMINdifBA3RqQIDyrIAAwDSAqgD2ASfA98HlQPnDIkF7hJ7JfUcaz36KFlN/TdIVf1IN1X6WShN9WscPe57EiXniQwF35UHA9ifBAPSqAIDANgEnwPeBpcD5QqMA+sPgQPyFnMD9x9lBfsrVhX9OEYd/UY4HftWKxX3ZR8F8nMWA+uBDwPljAoD3pcGA9ifBAM8Q9/wbTP+CgAAAABJRU5ErkJggg=='; + //var png8bit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///809TMSAAAAEHRSTlP//8DAoKCAgGBgQEAgIAAATXQTkgAAAJtJREFUCB0BkABv/wAAAAAAAAAAAAAAERERERERAAAjIzMzMzMyMgAjMjMzMzMjMgBFVUVVVVRVVABFVVRVVUVVVABnd3dndnd3dgBnd3d2Z3d3dgCJmZmYiZmZmACJmZmJmJmZmACru7q7u6u7ugCru6u7u7q7ugDN3N3d3d3N3ADNzd3d3d3c3ADu////////7gDu7u7u7u7u7gXuQRWvTQmUAAAAAElFTkSuQmCC'; - createPDFObject(png24bit, '8 bit base64 png', 'png'); + createPDFObject(png8bit, 'Indexed base64 png', 'png'); } function createFrom8BitPngImg() { var img = document.getElementById('8_bit'); - createPDFObject(img, '8 bit png ', 'png', true); + createPDFObject(img, 'Indexed png ', 'png'); } - function createPDFObject(imgData, type, format, transparency) { - - transparency = transparency || false; + function createPDFObject(imgData, type, format, compress) { - var doc = new jsPDF('p', 'pt'); + var doc = new jsPDF('p', 'pt', 'a4', false); doc.setFontSize(40); doc.setDrawColor(0); doc.setFillColor(255, 0, 0); doc.rect(0, 0, 595.28, 841.89, 'F'); doc.text(35, 100, type + " test"); - doc.addImage(imgData, format, 100, 200, 280, 210, null, transparency); + doc.addImage(imgData, format, 100, 200, 280, 210, undefined, compress); + //doc.addImage(imgData, format, 100, 500, 280, 210, undefined, compress); doc.save( type + ' test.pdf') } @@ -107,14 +116,15 @@ +

- - + +
diff --git a/jspdf.plugin.addimage.js b/jspdf.plugin.addimage.js index 846a5269d..92ac5e3cf 100644 --- a/jspdf.plugin.addimage.js +++ b/jspdf.plugin.addimage.js @@ -28,288 +28,435 @@ */ ;(function(jsPDFAPI) { -'use strict' - -var namespace = 'addImage_', - supported_image_types = ['jpg', 'jpeg', 'png'], - color_spaces = ['DeviceRGB', 'DeviceGray', 'DeviceCMYK', 'Indexed'], - filter_methods = ['DCTDecode', 'FlateDecode', 'LZWDecode']; - - -// takes a string imgData containing the raw bytes of -// a jpeg image and returns [width, height] -// Algorithm from: http://www.64lines.com/jpeg-width-height -var getJpegSize = function(imgData) { 'use strict' - var width, height; - // Verify we have a valid jpeg header 0xff,0xd8,0xff,0xe0,?,?,'J','F','I','F',0x00 - if (!imgData.charCodeAt(0) === 0xff || - !imgData.charCodeAt(1) === 0xd8 || - !imgData.charCodeAt(2) === 0xff || - !imgData.charCodeAt(3) === 0xe0 || - !imgData.charCodeAt(6) === 'J'.charCodeAt(0) || - !imgData.charCodeAt(7) === 'F'.charCodeAt(0) || - !imgData.charCodeAt(8) === 'I'.charCodeAt(0) || - !imgData.charCodeAt(9) === 'F'.charCodeAt(0) || - !imgData.charCodeAt(10) === 0x00) { - throw new Error('getJpegSize requires a binary string jpeg file') - } - var blockLength = imgData.charCodeAt(4)*256 + imgData.charCodeAt(5); - var i = 4, len = imgData.length; - while ( i < len ) { - i += blockLength; - if (imgData.charCodeAt(i) !== 0xff) { - throw new Error('getJpegSize could not find the size of the image'); - } - if (imgData.charCodeAt(i+1) === 0xc0 || //(SOF) Huffman - Baseline DCT - imgData.charCodeAt(i+1) === 0xc1 || //(SOF) Huffman - Extended sequential DCT - imgData.charCodeAt(i+1) === 0xc2 || // Progressive DCT (SOF2) - imgData.charCodeAt(i+1) === 0xc3 || // Spatial (sequential) lossless (SOF3) - imgData.charCodeAt(i+1) === 0xc4 || // Differential sequential DCT (SOF5) - imgData.charCodeAt(i+1) === 0xc5 || // Differential progressive DCT (SOF6) - imgData.charCodeAt(i+1) === 0xc6 || // Differential spatial (SOF7) - imgData.charCodeAt(i+1) === 0xc7) { - height = imgData.charCodeAt(i+5)*256 + imgData.charCodeAt(i+6); - width = imgData.charCodeAt(i+7)*256 + imgData.charCodeAt(i+8); - return [width, height]; + + var namespace = 'addImage_', + supported_image_types = ['jpeg', 'jpg', 'png']; + + + // Image functionality ported from pdf.js + var putImage = function(img) { + + var objectNumber = this.internal.newObject() + , out = this.internal.write + , putStream = this.internal.putStream + + img['n'] = objectNumber + + out('<>'); + } + if ('trns' in img && img['trns'].constructor == Array) { + var trns = ''; + for ( var i = 0; i < img['trns'].length; i++) + trns += (img['trns'][i] + ' ' + img['trns'][i] + ' '); + out('/Mask [' + trns + ']'); + } + if ('smask' in img) { + out('/SMask ' + (objectNumber + 1) + ' 0 R'); + } + out('/Length ' + img['data'].length + '>>'); + + putStream(img['data']); + + out('endobj'); + + // Soft mask + if ('smask' in img) { + var dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns ' + img['w']; + var smask = {'w': img['w'], 'h': img['h'], 'cs': 'DeviceGray', 'bpc': 8, 'dp': dp, 'data': img['smask']}; + //if ('f' in img) + //smask.f = img['f']; + putImage.call(this, smask); + } + + //Palette + if (img['cs'] === 'Indexed') { + + this.internal.newObject(); + //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>'); + //putStream(zlib.compress(img['pal'])); + out('<< /Length ' + img['pal'].length + '>>'); + putStream(this.arrayBufferToBinaryString(new Uint8Array(img['pal']))); + out('endobj'); } } -} -// Image functionality ported from pdf.js -, putImage = function(img) { - //console.log(img); - var objectNumber = this.internal.newObject() - , out = this.internal.write - , putStream = this.internal.putStream - - img['n'] = objectNumber - - out('<>'); + , getImages = function() { + var images = this.internal.collections[namespace + 'images']; + //first run, so initialise stuff + if(!images) { + this.internal.collections[namespace + 'images'] = images = {}; + this.internal.events.subscribe('putResources', putResourcesCallback); + this.internal.events.subscribe('putXobjectDict', putXObjectsDictCallback); + } + + return images; } - if ('trns' in img && img['trns'].constructor == Array) { - var trns = ''; - for ( var i = 0; i < img['trns'].length; i++) { - trns += (img['trns'][i] + ' ' + img['trns'][i] + ' '); - out('/Mask [' + trns + ']'); + , getImageIndex = function(images) { + var imageIndex = 0; + + if (images){ + // this is NOT the first time this method is ran on this instance of jsPDF object. + imageIndex = Object.keys ? + Object.keys(images).length : + (function(o){ + var i = 0 + for (var e in o){if(o.hasOwnProperty(e)){ i++ }} + return i + })(images) } + + return imageIndex; } - if ('smask' in img) { - out('/SMask ' + (objectNumber + 1) + ' 0 R'); + , noAliasDefined = function(alias) { + return typeof alias === 'undefined' || alias === null; } - out('/Length ' + img['data'].length + '>>'); - - putStream(img['data']); - - out('endobj'); - - // Soft mask - if ('smask' in img) { - var dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns ' + img['w']; - var smask = {'w': img['w'], 'h': img['h'], 'cs': 'DeviceGray', 'bpc': 8, 'dp': dp, 'data': img['smask']}; - if ('f' in img) - smask.f = img['f']; - putImage.call(this, smask); + , generateAliasFromData = function(data) { + // TODO: Alias dynamic generation from imageData's checksum/hash + return undefined; + } + , doesNotSupportImageType = function(type) { + return supported_image_types.indexOf(type) === -1; + } + , processMethodNotEnabled = function(type) { + return typeof jsPDFAPI['process' + type.toUpperCase()] !== 'function'; + } + , isDOMElement = function(object) { + return typeof object === 'object' && object.nodeType === 1; } - - //Palette - if (img['cs'] === 'Indexed') { + , createDataURIFromElement = function(imageData, format) { - this.internal.newObject(); - //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>'); - //putStream(zlib.compress(img['pal'])); - out('<< /Length ' + img['pal'].length + '>>'); - putStream(img['pal']); - out('endobj'); + var canvas = document.createElement('canvas'); + canvas.width = imageData.clientWidth || imageData.width; + canvas.height = imageData.clientHeight || imageData.height; + + var ctx = canvas.getContext('2d'); + if (!ctx) { + throw ('addImage requires canvas to be supported by browser.'); + } + ctx.drawImage(imageData, 0, 0, canvas.width, canvas.height); + + return canvas.toDataURL(format == 'png' ? 'image/png' : 'image/jpeg'); + } + ,checkImagesForAlias = function(imageData, images) { + var cached_info; + if(images) { + for(var e in images) { + if(imageData === images[e].alias) { + cached_info = images[e]; + break; + } + } + } + return cached_info; } -} -, putResourcesCallback = function() { - var images = this.internal.collections[namespace + 'images'] - for ( var i in images ) { - putImage.call(this, images[i]) + ,determineWidthAndHeight = function(w, h) { + if (!w && !h) { + w = -96; + h = -96; + } + if (w < 0) { + w = (-1) * info['w'] * 72 / w / this.internal.scaleFactor; + } + if (h < 0) { + h = (-1) * info['h'] * 72 / h / this.internal.scaleFactor; + } + if (w === 0) { + w = h * info['w'] / info['h']; + } + if (h === 0) { + h = w * info['h'] / info['w']; + } + + return [w, h]; } -} -, putXObjectsDictCallback = function(){ - var images = this.internal.collections[namespace + 'images'] - , out = this.internal.write - , image - for (var i in images) { - image = images[i] - out( - '/I' + image['i'] - , image['n'] - , '0' - , 'R' + , writeImageToPDF = function(x, y, w, h, info, index, images) { + var dims = determineWidthAndHeight(w, h), + coord = this.internal.getCoordinateString, + vcoord = this.internal.getVerticalCoordinateString; + + w = dims[0]; + h = dims[1]; + + images[index] = info; + + this.internal.write( + 'q' + , coord(w) + , '0 0' + , coord(h) // TODO: check if this should be shifted by vcoord + , coord(x) + , vcoord(y + h) + , 'cm /I'+info['i'] + , 'Do Q' ) - } -} -, extractBase64Info = function(dataURL) { - return /^(data:image\/([\w]+?);base64,)(.+?)$/g.exec(dataURL); -} -, supportsArrayBuffer = function() { - return typeof ArrayBuffer == 'function'; -} -, isArrayBuffer = function(object) { - if(!supportsArrayBuffer()) - return false; - return object instanceof ArrayBuffer; -} -, isArrayBufferView = function(object) { - if(!supportsArrayBuffer()) - return false; - return (object instanceof Int8Array || - object instanceof Uint8Array || - object instanceof Uint8ClampedArray || - object instanceof Int16Array || - object instanceof Uint16Array || - object instanceof Int32Array || - object instanceof Uint32Array || - object instanceof Float32Array || - object instanceof Float64Array ); -} -, binaryStringToUint8Array = function(binary_string) { - /* - * not sure how efficient this will be will bigger files. Is there a native method? + }; + + + /** + * COLOR SPACE + */ + jsPDFAPI.DEVICE_RGB = 'DeviceRGB'; + jsPDFAPI.DEVICE_GRAY = 'DeviceGray'; + jsPDFAPI.DEVICE_CMYK = 'DeviceCMYK'; + jsPDFAPI.INDEXED = 'Indexed'; + + /** + * COMPRESSION METHODS + */ + jsPDFAPI.DCT_DECODE = 'DCTDecode'; + jsPDFAPI.FLATE_DECODE = 'FlateDecode'; + jsPDFAPI.LZW_DECODE = 'LZWDecode'; + + + jsPDFAPI.isString = function(object) { + return typeof object === 'string'; + }; + + /** + * Strips out and returns info from a valid base64 data URI + * @param {String[dataURI]} a valid data URI of format 'data:[][;base64],' + * @returns an Array containing the following + * [0] the complete data URI + * [1] + * [2] format - the second part of the mime-type i.e 'png' in 'image/png' + * [4] + */ + jsPDFAPI.extractInfoFromBase64DataURI = function(dataURI) { + return /^data:([\w]+?\/([\w]+?));base64,(.+?)$/g.exec(dataURI); + }; + + /** + * Check to see if ArrayBuffer is supported */ - var len = binary_string.length; - var bytes = new Uint8Array( len ); - for (var i = 0; i < len; i++) { - bytes[i] = binary_string.charCodeAt(i); - } - return bytes; -} -, arrayBufferToBinaryString = function( array_buffer ) { - /* + jsPDFAPI.supportsArrayBuffer = function() { + return typeof ArrayBuffer === 'function'; + }; + + /** + * Tests supplied object to determine if ArrayBuffer + * @param {Object[object]} + */ + jsPDFAPI.isArrayBuffer = function(object) { + if(!this.supportsArrayBuffer()) + return false; + return object instanceof ArrayBuffer; + }; + + /** + * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface + * @param {Object[object]} + */ + jsPDFAPI.isArrayBufferView = function(object) { + if(!this.supportsArrayBuffer()) + return false; + return (object instanceof Int8Array || + object instanceof Uint8Array || + object instanceof Uint8ClampedArray || + object instanceof Int16Array || + object instanceof Uint16Array || + object instanceof Int32Array || + object instanceof Uint32Array || + object instanceof Float32Array || + object instanceof Float64Array ); + }; + + /** + * Exactly what it says on the tin + */ + jsPDFAPI.binaryStringToUint8Array = function(binary_string) { + /* + * not sure how efficient this will be will bigger files. Is there a native method? + */ + var len = binary_string.length; + var bytes = new Uint8Array( len ); + for (var i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + return bytes; + }; + + /** * @see this discussion * http://stackoverflow.com/questions/6965107/converting-between-strings-and-arraybuffers * - * As stated, i imagine the method below is highly inefficent for large files. Also of note from Mozilla, + * As stated, i imagine the method below is highly inefficent for large files. + * + * Also of note from Mozilla, * * "However, this is slow and error-prone, due to the need for multiple conversions (especially if the binary data is not actually byte-format data, but, for example, 32-bit integers or floats)." * * https://developer.mozilla.org/en-US/Add-ons/Code_snippets/StringView * - * Although i'm strugglig to see how it solves this issue? Doesn't appear to be a direct method for conversion? + * Although i'm strugglig to see how StringView solves this issue? Doesn't appear to be a direct method for conversion? * - * Async method using Blob and FileReader could be best, but i'm not sure how to fit it into this flow? + * Async method using Blob and FileReader could be best, but i'm not sure how to fit it into the flow? */ - /*var binary_string = ''; - //var bytes = new Uint8Array( array_buffer ); - var bytes = array_buffer; - var len = bytes.byteLength; - for (var i = 0; i < len; i++) { - binary_string += String.fromCharCode( bytes[ i ] ); - } - return binary_string;*/ - - if(isArrayBufferView()) - array_buffer = array_buffer.buffer; + jsPDFAPI.arrayBufferToBinaryString = function(buffer) { + if(this.isArrayBuffer(buffer)) + buffer = new Uint8Array(buffer); + var binary_string = ''; + var len = buffer.byteLength; + for (var i = 0; i < len; i++) { + binary_string += String.fromCharCode(buffer[i]); + } + return binary_string; + /* + * Another solution is the method below - convert array buffer straight to base64 and then use atob + */ + //return atob(arrayBufferToBase64(array_buffer)); + }; - return window.atob(base64ArrayBuffer(array_buffer)); -} -, createImageInfo = function(data, wd, ht, cs, bpc, f, imageIndex, alias, dp, trns, pal, smask) { - var info = { - alias:alias, - w : wd, - h : ht, - cs : cs, - bpc : bpc, - i : imageIndex, - data : data - // n: objectNumber will be added by putImage code - }; - - if(f) - info.f = f; - - if(dp) - info.dp = dp; - - if(trns) - info.trns = trns; - - if(pal) - info.pal = pal; - - if(smask) - info.smask = smask; - - return info; -}; + /** + * Converts an ArrayBuffer directly to base64 + * + * Taken from here + * + * http://jsperf.com/encoding-xhr-image-data/31 + * + * Need to test if this is a better solution for larger files + * + */ + jsPDFAPI.arrayBufferToBase64 = function(arrayBuffer) { + var base64 = '' + var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias, transparency) { - 'use strict' - var images = this.internal.collections[namespace + 'images'], - cached_info, - binaryStringData; - - transparency = transparency || false; + var bytes = new Uint8Array(arrayBuffer) + var byteLength = bytes.byteLength + var byteRemainder = byteLength % 3 + var mainLength = byteLength - byteRemainder - if(typeof format === 'number') { - var tmp = h; - h = w; - w = y; - y = x; - x = format; - format = tmp || 'jpeg'; - } - - if(typeof alias === 'undefined') { - // TODO: Alias dynamic generation from imageData's checksum/hash - } + var a, b, c, d + var chunk - if (typeof imageData === 'object' && imageData.nodeType === 1) { - var canvas = document.createElement('canvas'); - canvas.width = imageData.clientWidth || imageData.width; - canvas.height = imageData.clientHeight || imageData.height; + // Main loop deals with bytes in chunks of 3 + for (var i = 0; i < mainLength; i = i + 3) { + // Combine the three bytes into a single integer + chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2] - var ctx = canvas.getContext('2d'); - if (!ctx) { - throw ('addImage requires canvas to be supported by browser.'); - } - ctx.drawImage(imageData, 0, 0, canvas.width, canvas.height); - imageData = canvas.toDataURL(transparency ? 'image/png' : 'image/jpeg'); - format = "png"; - } - - if(typeof imageData === 'string') { - if(imageData.charCodeAt(0) !== 0xff && imageData.substr(0,5) !== 'data:') { - // This is neither raw jpeg-data nor a data uri; alias? - if(images) { + // Use bitmasks to extract 6-bit segments from the triplet + a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18 + b = (chunk & 258048) >> 12 // 258048 = (2^6 - 1) << 12 + c = (chunk & 4032) >> 6 // 4032 = (2^6 - 1) << 6 + d = chunk & 63 // 63 = 2^6 - 1 - for(var e in images) { + // Convert the raw binary segments to the appropriate ASCII encoding + base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d] + } - if(imageData === images[e].alias) { - cached_info = images[e]; - break; - } - } - } + // Deal with the remaining bytes and padding + if (byteRemainder == 1) { + chunk = bytes[mainLength] - } else { + a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2 + + // Set the 4 least significant bits to zero + b = (chunk & 3) << 4 // 3 = 2^2 - 1 + + base64 += encodings[a] + encodings[b] + '==' + } else if (byteRemainder == 2) { + chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1] + + a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10 + b = (chunk & 1008) >> 4 // 1008 = (2^6 - 1) << 4 + + // Set the 2 least significant bits to zero + c = (chunk & 15) << 2 // 15 = 2^4 - 1 + + base64 += encodings[a] + encodings[b] + encodings[c] + '=' + } + + return base64 + }; + + + jsPDFAPI.createImageInfo = function(data, wd, ht, cs, bpc, f, imageIndex, alias, dp, trns, pal, smask) { + var info = { + alias:alias, + w : wd, + h : ht, + cs : cs, + bpc : bpc, + i : imageIndex, + data : data + // n: objectNumber will be added by putImage code + }; + + if(f) info.f = f; + if(dp) info.dp = dp; + if(trns) info.trns = trns; + if(pal) info.pal = pal; + if(smask) info.smask = smask; + + return info; + }; + + jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias, compress) { + 'use strict' + + if(typeof format === 'number') { + var tmp = h; + h = w; + w = y; + y = x; + x = format; + format = tmp || 'jpeg'; + } + + var images = getImages.call(this),//initalises internals and events on first run + cached_info, + dataAsBinaryString; + + compress = compress || false; + format = format.toLowerCase(); + + if(noAliasDefined(alias)) + alias = generateAliasFromData(imageData); + + if(isDOMElement(imageData)) + imageData = createDataURIFromElement(imageData, format); + + if(this.isString(imageData)) { - var base64Info = extractBase64Info(imageData); + var base64Info = this.extractInfoFromBase64DataURI(imageData); if(base64Info) { @@ -320,190 +467,121 @@ jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias, transparency) * need to test if it's more efficent to convert all binary strings * to TypedArray - or should we just leave and process as string? */ - if(supportsArrayBuffer()) { - binaryStringData = imageData; - imageData = binaryStringToUint8Array(imageData); + if(this.supportsArrayBuffer()) { + dataAsBinaryString = imageData; + imageData = this.binaryStringToUint8Array(imageData); } - + + }else{ + // This is neither raw jpeg-data nor a data uri; alias? + if(imageData.charCodeAt(0) !== 0xff) + cached_info = checkImagesForAlias(imageData, images); } } - } - - if( supported_image_types.indexOf(format.toLowerCase()) == -1 ) - throw new Error('addImage currently only supports formats ' + supported_image_types + ', not \''+format+'\''); - - var imageIndex - , coord = this.internal.getCoordinateString - , vcoord = this.internal.getVerticalCoordinateString; - - if (images){ - // this is NOT the first time this method is ran on this instance of jsPDF object. - imageIndex = Object.keys ? - Object.keys(images).length : - (function(o){ - var i = 0 - for (var e in o){if(o.hasOwnProperty(e)){ i++ }} - return i - })(images) - } else { - // this is the first time this method is ran on this instance of jsPDF object. - imageIndex = 0 - this.internal.collections[namespace + 'images'] = images = {} - this.internal.events.subscribe('putResources', putResourcesCallback) - this.internal.events.subscribe('putXobjectDict', putXObjectsDictCallback) - } - - var info = cached_info; - - if(!info) { - var img, - dims, - dp, - trns, - colorSpace = color_spaces[0], - filter = filter_methods[0], - bpc = 8, - colors, - pal, - smask; + if(doesNotSupportImageType(format)) + throw new Error('addImage currently only supports formats ' + supported_image_types + ', not \''+format+'\''); - format = format.toLocaleLowerCase(); + if(processMethodNotEnabled(format)) + throw new Error('please ensure that the plugin for \''+format+'\' support is added'); - /* - * we have a binary string - */ - if(typeof imageData === 'string') { + var imageIndex = getImageIndex(images), + info = cached_info; + + if(!info) { - if(['jpeg', 'jpg'].indexOf(format) !== -1) { - - dims = getJpegSize(imageData); - info = createImageInfo(imageData, dims[0], dims[1], colorSpace, bpc, filter, imageIndex, alias); - } + if(format === 'jpg') + format = 'jpeg'; - if(format === 'png') { - + info = this['process' + format.toUpperCase()](imageData, imageIndex, alias, compress, dataAsBinaryString); + } + + if( !info ) + throw new Error('An unkwown error occurred whilst processing the image'); + + writeImageToPDF.call(this, x, y, w, h, info, imageIndex, images); + + return this + }; + + + /** + * JPEG SUPPORT + **/ + + //takes a string imgData containing the raw bytes of + //a jpeg image and returns [width, height] + //Algorithm from: http://www.64lines.com/jpeg-width-height + var getJpegSize = function(imgData) { + 'use strict' + var width, height; + // Verify we have a valid jpeg header 0xff,0xd8,0xff,0xe0,?,?,'J','F','I','F',0x00 + if (!imgData.charCodeAt(0) === 0xff || + !imgData.charCodeAt(1) === 0xd8 || + !imgData.charCodeAt(2) === 0xff || + !imgData.charCodeAt(3) === 0xe0 || + !imgData.charCodeAt(6) === 'J'.charCodeAt(0) || + !imgData.charCodeAt(7) === 'F'.charCodeAt(0) || + !imgData.charCodeAt(8) === 'I'.charCodeAt(0) || + !imgData.charCodeAt(9) === 'F'.charCodeAt(0) || + !imgData.charCodeAt(10) === 0x00) { + throw new Error('getJpegSize requires a binary string jpeg file') + } + var blockLength = imgData.charCodeAt(4)*256 + imgData.charCodeAt(5); + var i = 4, len = imgData.length; + while ( i < len ) { + i += blockLength; + if (imgData.charCodeAt(i) !== 0xff) { + throw new Error('getJpegSize could not find the size of the image'); } + if (imgData.charCodeAt(i+1) === 0xc0 || //(SOF) Huffman - Baseline DCT + imgData.charCodeAt(i+1) === 0xc1 || //(SOF) Huffman - Extended sequential DCT + imgData.charCodeAt(i+1) === 0xc2 || // Progressive DCT (SOF2) + imgData.charCodeAt(i+1) === 0xc3 || // Spatial (sequential) lossless (SOF3) + imgData.charCodeAt(i+1) === 0xc4 || // Differential sequential DCT (SOF5) + imgData.charCodeAt(i+1) === 0xc5 || // Differential progressive DCT (SOF6) + imgData.charCodeAt(i+1) === 0xc6 || // Differential spatial (SOF7) + imgData.charCodeAt(i+1) === 0xc7) { + height = imgData.charCodeAt(i+5)*256 + imgData.charCodeAt(i+6); + width = imgData.charCodeAt(i+7)*256 + imgData.charCodeAt(i+8); + return [width, height]; + } else { + i += 2; + blockLength = imgData.charCodeAt(i)*256 + imgData.charCodeAt(i+1) + } + } + }; + + + jsPDFAPI.processJPEG = function(imageData, imageIndex, alias, compress, dataAsBinaryString) { + 'use strict' + var colorSpace = this.DEVICE_RGB, + filter = this.DCT_DECODE, + bpc = 8, + dims; + + if(this.isString(imageData)) { + dims = getJpegSize(imageData); + return this.createImageInfo(imageData, dims[0], dims[1], colorSpace, bpc, filter, imageIndex, alias); } - if(isArrayBuffer(imageData)) + if(this.isArrayBuffer(imageData)) imageData = new Uint8Array(imageData); - if(isArrayBufferView(imageData)) { + if(this.isArrayBufferView(imageData)) { - if(['jpeg', 'jpg'].indexOf(format) !== -1) { - img = new JpegImage(); - img.parse(imageData); - - /* - * check if already have a stored binary string rep - */ - imageData = binaryStringData || arrayBufferToBinaryString(imageData); - - info = createImageInfo(imageData, img.width, img.height, colorSpace, bpc, filter, imageIndex, alias); - } + var img = new JpegImage(); + img.parse(imageData); - if(format === 'png') { - - img = new PNG(imageData); - imageData = img.imgData; - bpc = img.bits; - colorSpace = img.colorSpace; - colors = img.colors; - filter = filter_methods[1];//FlateDecode as png pixels are compressed - - /* - * we need to extract alpha layer and add it as a smask - */ - if(img.colorType === 6 && - img.pixelBitlength === 32) { - - var //pixels = new DataView(img.decode().buffer), - pixels = new Uint32Array(img.decode().buffer), - //len = pixels.byteLength / 4, - len = pixels.length, - colorData = new Uint8Array(len * 3), - transData = new Uint8Array(len), - pixel, - i = 0, - n = 0; - - for(; i < len; i++) { - //pixel = pixels.getInt32(i); - pixel = pixels[i]; - - colorData[n++] = ( pixel >> 0 ) & 0xff; - colorData[n++] = ( pixel >> 8 ) & 0xff; - colorData[n++] = ( pixel >> 16 ) & 0xff; - - transData[i] = ( pixel >> 24 ) & 0xff; - } - - imageData = colorData; - smask = arrayBufferToBinaryString(transData); - filter = null; - } - - if(filter === filter_methods[1]) - dp = '/Predictor 15 /Colors '+ colors +' /BitsPerComponent '+ bpc +' /Columns '+ img.width; - - if(img.palette && img.palette.length > 0) - pal = img.palette; - - //I'm not sure the output from png.js is correct for this? - /*if(img.transparency.indexed) - trns = img.transparency.indexed;*/ - - info = createImageInfo(arrayBufferToBinaryString(imageData), - img.width, - img.height, - colorSpace, - bpc, - filter, - imageIndex, - alias, - dp, - trns, - pal, - smask); - } + /* + * if we already have a stored binary string rep use that + */ + imageData = dataAsBinaryString || this.arrayBufferToBinaryString(imageData); + + return this.createImageInfo(imageData, img.width, img.height, colorSpace, bpc, filter, imageIndex, alias); } - } - - if( !info ) - throw new Error('Something went wrong, theres no image info'); - - images[imageIndex] = info; - - if (!w && !h) { - w = -96; - h = -96; - } - if (w < 0) { - w = (-1) * info['w'] * 72 / w / this.internal.scaleFactor; - } - if (h < 0) { - h = (-1) * info['h'] * 72 / h / this.internal.scaleFactor; - } - if (w === 0) { - w = h * info['w'] / info['h']; - } - if (h === 0) { - h = w * info['h'] / info['w']; - } - - this.internal.write( - 'q' - , coord(w) - , '0 0' - , coord(h) // TODO: check if this should be shifted by vcoord - , coord(x) - , vcoord(y + h) - , 'cm /I'+info['i'] - , 'Do Q' - ) + return null; + }; - return this -} })(jsPDF.API); diff --git a/jspdf.plugin.png_support.js b/jspdf.plugin.png_support.js new file mode 100755 index 000000000..235b65e55 --- /dev/null +++ b/jspdf.plugin.png_support.js @@ -0,0 +1,216 @@ +/** ==================================================================== + * jsPDF [NAME] plugin + * Copyright (c) 2013 [YOUR NAME HERE] [WAY TO CONTACT YOU HERE] + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * ==================================================================== + */ + +(function(jsPDFAPI) { +'use strict' + + /* + * @see http://www.w3.org/TR/PNG-Chunks.html + * + Color Allowed Interpretation + Type Bit Depths + + 0 1,2,4,8,16 Each pixel is a grayscale sample. + + 2 8,16 Each pixel is an R,G,B triple. + + 3 1,2,4,8 Each pixel is a palette index; + a PLTE chunk must appear. + + 4 8,16 Each pixel is a grayscale sample, + followed by an alpha sample. + + 6 8,16 Each pixel is an R,G,B triple, + followed by an alpha sample. + */ + + /* + * PNG filter method types + * + * @see http://www.w3.org/TR/PNG-Filters.html + * @see http://www.libpng.org/pub/png/book/chapter09.html + * + * This is what the value 'Predictor' in decode params relates to + * + * 15 is "optimal prediction", which means the prediction algorithm can change from line to line. In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte + * + 0 None + 1 Sub + 2 Up + 3 Average + 4 Paeth + */ + + var doesNotHavePngJS = function() { + return typeof PNG !== 'function' || typeof FlateStream !== 'function'; + } + , hasCompressionJS = function() { + var inst = typeof zpipe === 'object'; + if(!inst) + console.log("requires zpipe.js for compression") + return inst; + } + , compressBytes = function(bytes, width, colors) { + + bytes = applyPngFilterMethod(bytes, width, colors); + + return zpipe.deflate(this.arrayBufferToBinaryString(bytes)); + } + , applyPngFilterMethod = function(bytes, width, colors){ + + /* + * TODO - this is only filter method 0 - None + * + * implement all 5 + */ + var lines = bytes.length / (width * colors), + arr = new Uint8Array(bytes.length + lines), + i = 0, offset; + + for(; i < lines; i++) { + offset = i * width * colors; + arr[offset + i] = 0; + arr.set(bytes.subarray(offset, (offset + width ) * colors), offset + i + 1); + } + + return arr; + } + , logImg = function(img) { + console.log("width: " + img.width); + console.log("height: " + img.height); + console.log("bits: " + img.bits); + console.log("colorType: " + img.colorType); + console.log("transparency:"); + console.log(img.transparency); + console.log("text:"); + console.log(img.text); + console.log("compressionMethod: " + img.compressionMethod); + console.log("filterMethod: " + img.filterMethod); + console.log("interlaceMethod: " + img.interlaceMethod); + console.log("imgData:"); + console.log(img.imgData); + console.log("palette:"); + console.log(img.palette); + console.log("colors: " + img.colors); + console.log("colorSpace: " + img.colorSpace); + console.log("pixelBitlength: " + img.pixelBitlength); + console.log("hasAlphaChannel: " + img.hasAlphaChannel); + }; + + + + + jsPDFAPI.processPNG = function(imageData, imageIndex, alias, compress, dataAsBinaryString) { + 'use strict' + + var colorSpace = this.DEVICE_RGB, + compression = this.FLATE_DECODE, + bpc = 8, + img, dp, trns, + colors, pal, smask; + + if(this.isString(imageData)) { + + } + + if(this.isArrayBuffer(imageData)) + imageData = new Uint8Array(imageData); + + if(this.isArrayBufferView(imageData)) { + + if(doesNotHavePngJS()) + throw new Error("PNG support requires png.js and zlib.js"); + + img = new PNG(imageData); + imageData = img.imgData; + bpc = img.bits; + colorSpace = img.colorType != 3 ? img.colorSpace : this.INDEXED; + colors = img.colors; + + //logImg(img); + + /* + * we need to extract alpha layer and add it as a smask + */ + if(img.colorType === 6 && + img.pixelBitlength === 32) { + + var pixels = new Uint32Array(img.decodePixels().buffer), + len = pixels.length, + colorData = new Uint8Array(len * 3), + transData = new Uint8Array(len), + pixel, + i = 0, + n = 0; + + for(; i < len; i++) { + pixel = pixels[i]; + + colorData[n++] = ( pixel >> 0 ) & 0xff; + colorData[n++] = ( pixel >> 8 ) & 0xff; + colorData[n++] = ( pixel >> 16 ) & 0xff; + + transData[i] = ( pixel >> 24 ) & 0xff; + } + + if(compress && hasCompressionJS()) { + + imageData = compressBytes.call(this, colorData, img.width, img.colors); + //smask = compressBytes.call(this, transData); + smask = this.arrayBufferToBinaryString(transData); + compression = this.FLATE_DECODE; + + }else{ + + imageData = colorData; + smask = this.arrayBufferToBinaryString(transData); + compression = null; + } + } + + if(compression === this.FLATE_DECODE) + dp = '/Predictor 15 /Colors '+ colors +' /BitsPerComponent '+ bpc +' /Columns '+ img.width; + else + //remove 'Predictor' as it applies to the type of png filter applied to its IDAT - we only apply with compression + dp = '/Colors '+ colors +' /BitsPerComponent '+ bpc +' /Columns '+ img.width; + + if(img.palette && img.palette.length > 0) + pal = img.palette; + + //I'm not sure the output from png.js is correct for this + /*if(img.transparency.indexed) + trns = img.transparency.indexed;*/ + + if(this.isArrayBuffer(imageData) || this.isArrayBufferView(imageData)) + imageData = this.arrayBufferToBinaryString(imageData); + + return this.createImageInfo(imageData, img.width, img.height, colorSpace, + bpc, compression, imageIndex, alias, dp, trns, pal, smask); + } + + return info; + } + +})(jsPDF.API) diff --git a/libs/png_support/arrayBufferToBase64.js b/libs/png_support/arrayBufferToBase64.js deleted file mode 100644 index f200e30df..000000000 --- a/libs/png_support/arrayBufferToBase64.js +++ /dev/null @@ -1,55 +0,0 @@ -// Converts an ArrayBuffer directly to base64, without any intermediate 'convert to string then -// use window.btoa' step. According to my tests, this appears to be a faster approach: -// http://jsperf.com/encoding-xhr-image-data/5 - -function base64ArrayBuffer(arrayBuffer) { - var base64 = '' - var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' - - var bytes = new Uint8Array(arrayBuffer) - var byteLength = bytes.byteLength - var byteRemainder = byteLength % 3 - var mainLength = byteLength - byteRemainder - - var a, b, c, d - var chunk - - // Main loop deals with bytes in chunks of 3 - for (var i = 0; i < mainLength; i = i + 3) { - // Combine the three bytes into a single integer - chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2] - - // Use bitmasks to extract 6-bit segments from the triplet - a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18 - b = (chunk & 258048) >> 12 // 258048 = (2^6 - 1) << 12 - c = (chunk & 4032) >> 6 // 4032 = (2^6 - 1) << 6 - d = chunk & 63 // 63 = 2^6 - 1 - - // Convert the raw binary segments to the appropriate ASCII encoding - base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d] - } - - // Deal with the remaining bytes and padding - if (byteRemainder == 1) { - chunk = bytes[mainLength] - - a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2 - - // Set the 4 least significant bits to zero - b = (chunk & 3) << 4 // 3 = 2^2 - 1 - - base64 += encodings[a] + encodings[b] + '==' - } else if (byteRemainder == 2) { - chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1] - - a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10 - b = (chunk & 1008) >> 4 // 1008 = (2^6 - 1) << 4 - - // Set the 2 least significant bits to zero - c = (chunk & 15) << 2 // 15 = 2^4 - 1 - - base64 += encodings[a] + encodings[b] + encodings[c] + '=' - } - - return base64 -} \ No newline at end of file diff --git a/libs/png_support/zpipe.min.js b/libs/png_support/zpipe.min.js new file mode 100644 index 000000000..a72971a23 --- /dev/null +++ b/libs/png_support/zpipe.min.js @@ -0,0 +1,408 @@ +!function(sb,Ab,Qa){"undefined"!==typeof module?module.exports=Qa(sb,Ab):"function"===typeof define&&"object"===typeof define.amd?define(Qa):Ab[sb]=Qa(sb,Ab)}("zpipe",this,function(sb,Ab){var Qa,Ra,yd,Jb,qc,Nc;function Cg(a){eval.call(null,a)}function Gb(a){Yb(a+":\n"+Error().stack);throw"Assertion: "+a;}function Hb(a,e){a||Gb("Assertion failed: "+e)}function qf(c,e,d){d=d||"i8";"*"===d[d.length-1]&&(d="i32");switch(d){case "i1":l[c]=e;break;case "i8":l[c]=e;break;case "i16":h[c>>1]=e;break;case "i32":a[c>> +2]=e;break;case "i64":a[c>>2]=e;break;case "float":Kb[c>>2]=e;break;case "double":de[0]=e;a[c>>2]=Oc[0];a[c+4>>2]=Oc[1];break;default:Gb("invalid type for setValue: "+d)}}function E(a,e,d){var b,f;"number"===typeof a?(b=!0,f=a):(b=!1,f=a.length);var g="string"===typeof e?e:null,d=[Pc,fa.stackAlloc,fa.staticAlloc][void 0===d?u:d](Math.max(f,g?1:e.length));if(b)return Sb(d,0,f),d;b=0;for(var i;b>2;var f=b+56,g=b+16440;a[d+8]=0;a[d+9]=0;a[d+10]=0;var i=je(b),o=0==(i|0);a:do if(o){var m=f|0,k=b+4|0,h=b|0;d=(b+16|0)>>2;var l=g|0,j=b+12|0;b:for(;;){var n=ke(m,1,16384,c);a[k>>2]=n;if(0!=(Eb(c)|0)){Lb(b);var x=-1;break a}var q=(n=0!=(Number(c in C.streams&&C.streams[c].eof)|0))? +4:1;a[h>>2]=m;c:for(;;){a[d]=16384;a[j>>2]=l;var v=rf(b,q);-2==(v|0)&&Qc(s.__str1|0,75,s.___func___def|0,s.__str2|0);var t=16384-a[d]|0,t=(za(l,1,t,e)|0)==(t|0);do if(t&&0==(Eb(e)|0)){if(0==(a[d]|0))continue c;0==(a[k>>2]|0)||Qc(s.__str1|0,82,s.___func___def|0,s.__str3|0);if(!n)continue b;1!=(v|0)&&Qc(s.__str1|0,86,s.___func___def|0,s.__str4|0);Lb(b);x=0;break a}while(0);Lb(b);x=-1;break a}}}else x=i;while(0);ma=b;return x}function le(c,e){var d,b,f=ma;ma+=32824;b=f>>2;var g=f+56,i=f+16440;a[b+8]= +0;a[b+9]=0;a[b+10]=0;b=f+4|0;a[b>>2]=0;var o=f|0;a[o>>2]=0;var m;if(0==(f|0))m=-2;else{a[f+24>>2]=0;m=f+32|0;var k=a[m>>2];0==(k|0)?(a[m>>2]=2,a[f+40>>2]=0,d=2):d=k;m=(f+36|0)>>2;0==(a[m]|0)&&(a[m]=4);k=f+40|0;d=va[d](a[k>>2],1,7116);if(0==(d|0))m=-4;else{var h=f+28|0;a[h>>2]=d;a[(d+52|0)>>2]=0;var l;if(0==(f|0))l=-2;else if(l=a[f+28>>2],0==(l|0))l=-2;else{var j=l+52|0,n=a[j>>2],x=l+36|0;0!=(n|0)&&15!=(a[x>>2]|0)&&(va[a[f+36>>2]](a[f+40>>2],n),a[(j|0)>>2]=0);a[(l+8|0)>>2]=1;a[x>>2]=15;l=sf(f)}0== +(l|0)?m=0:(va[a[m]](a[k>>2],d),a[h>>2]=0,m=l)}}k=0==(m|0);a:do if(k){h=g|0;d=(f+16|0)>>2;l=i|0;j=f+12|0;n=0;b:for(;;){x=ke(h,1,16384,c);a[b>>2]=x;if(0==(Eb(c)|0)){x=0==(x|0);c:do if(x)var q=n;else{a[o>>2]=h;d:for(;;){a[d]=16384;a[j>>2]=l;var v=me(f);if(-2==v)Qc(s.__str1|0,133,s.___func___inf|0,s.__str2|0);else if(2==v){var t=-3;break b}else if(-3==v||-4==v){t=v;break b}var w=16384-a[d]|0,w=(za(l,1,w,e)|0)==(w|0);do if(w&&0==(Eb(e)|0)){if(0==(a[d]|0))continue d;if(1==(v|0)){q=1;break c}n=v;continue b}while(0); +Rc(f);d=-1;break a}}while(0);Rc(f);d=1==(q|0)?0:-3;break a}Rc(f);d=-1;break a}Rc(f);d=t}else d=m;while(0);ma=f;return d}function tf(c){za(s.__str5|0,7,1,a[a[La>>2]+12>>2]);-1==c?(c=a[La>>2],0!=(Eb(a[c+4>>2])|0)&&(za(s.__str6|0,20,1,a[c+12>>2]),c=a[La>>2]),0!=(Eb(a[c+8>>2])|0)&&za(s.__str7|0,21,1,a[c+12>>2])):-2==c?za(s.__str8|0,26,1,a[a[La>>2]+12>>2]):-3==c?za(s.__str9|0,35,1,a[a[La>>2]+12>>2]):-4==c?za(s.__str10|0,14,1,a[a[La>>2]+12>>2]):-6==c&&za(s.__str11|0,23,1,a[a[La>>2]+12>>2])}function uf(c, +e){var d;if(1==c){var b=a[La>>2],b=ie(a[b+4>>2],a[b+8>>2]);0==(b|0)?b=0:tf(b);d=7}else if(2==c){a:{for(d=0;d>2]+d],g=l[(s.__str12|0)+d];if(f==g&&0==f)break;if(0==f){d=-1;break a}if(0==g){d=1;break a}if(f==g)d++;else{d=f>g?1:-1;break a}}d=0}0!=(d|0)?d=6:(b=a[La>>2],b=le(a[b+4>>2],a[b+8>>2]),0==(b|0)?b=0:tf(b),d=7)}else d=6;6==d&&(za(s.__str13|0,40,1,a[a[La>>2]+12>>2]),b=1);return b}function je(c){var e,d,b,f=0==(c|0);a:do if(f)var g=-2;else{g=c+24|0;a[g>>2]=0;b=(c+32|0)>>2;var i= +a[b];0==(i|0)&&(a[b]=2,a[c+40>>2]=0,i=2);var o=c+36|0;0==(a[o>>2]|0)&&(a[o>>2]=4);d=(c+40|0)>>2;i=va[i](a[d],1,5828);if(0!=(i|0)){a[c+28>>2]=i;a[i>>2]=c;a[(i+24|0)>>2]=1;a[(i+28|0)>>2]=0;a[(i+48|0)>>2]=15;e=(i+44|0)>>2;a[e]=32768;a[(i+52|0)>>2]=32767;a[(i+80|0)>>2]=15;var m=i+76|0;a[m>>2]=32768;a[(i+84|0)>>2]=32767;a[(i+88|0)>>2]=5;var h=va[a[b]](a[d],32768,2),o=i+56|0;a[o>>2]=h;var j=va[a[b]](a[d],a[e],2),h=i+64|0;a[h>>2]=j;Sb(j,0,a[e]<<1,1);m=va[a[b]](a[d],a[m>>2],2);e=i+68|0;a[e>>2]=m;a[(i+5824| +0)>>2]=0;m=i+5788|0;a[m>>2]=16384;d=b=va[a[b]](a[d],16384,4);a[(i+8|0)>>2]=b;m=k[m>>2];a[(i+12|0)>>2]=m<<2;o=0==(a[o>>2]|0);do if(!o&&0!=(a[h>>2]|0)&&!(0==(a[e>>2]|0)|0==(b|0))){a[(i+5796|0)>>2]=(m>>>1<<1)+d|0;a[(i+5784|0)>>2]=b+3*m|0;a[(i+132|0)>>2]=6;a[(i+136|0)>>2]=0;l[i+36|0]=8;g=ne(c);break a}while(0);a[(i+4|0)>>2]=666;a[g>>2]=s.__str664|0;Lb(c)}g=-4}while(0);return g}function Lb(c){var e,d,b=c>>2;if(0!=(c|0)&&(d=(c+28|0)>>2,e=a[d],0!=(e|0))){var f=a[e+4>>2];if(666==f||113==f||103==f||91==f|| +73==f||69==f||42==f){f=a[e+8>>2];0!=(f|0)&&(va[a[b+9]](a[b+10],f),e=a[d]);f=a[e+68>>2];0==(f|0)?f=e:(va[a[b+9]](a[b+10],f),f=a[d]);var g=a[f+64>>2];e=(c+36|0)>>2;0!=(g|0)&&(va[a[e]](a[b+10],g),f=a[d]);b=a[f+56>>2];0==(b|0)?(b=f,c=c+40|0):(c=c+40|0,va[a[e]](a[c>>2],b),b=a[d]);va[a[e]](a[c>>2],b);a[d]=0}}}function ne(c){var e=c>>2;if(0==(c|0))e=-2;else if(c=a[e+7],0==(c|0))e=-2;else if(0==(a[e+8]|0))e=-2;else if(0==(a[e+9]|0))e=-2;else{a[e+5]=0;a[e+2]=0;a[e+6]=0;a[e+11]=2;a[(c+20|0)>>2]=0;a[(c+16|0)>> +2]=a[c+8>>2];var d=c+24|0,b=a[d>>2];0>(b|0)&&(b=-b|0,a[d>>2]=b);d=b;a[(c+4|0)>>2]=0!=(d|0)?42:113;d=2==(d|0)?oa(0,0,0):kc(0,0,0);a[e+12]=d;a[(c+40|0)>>2]=0;a[c+2840>>2]=c+148|0;a[c+2848>>2]=Sc;a[c+2852>>2]=c+2440|0;a[c+2860>>2]=Tc;a[c+2864>>2]=c+2684|0;a[c+2872>>2]=Uc;h[c+5816>>1]=0;a[c+5820>>2]=0;a[c+5812>>2]=8;Vc(c);oe(c);e=0}return e}function oe(c){var e=c>>2;a[e+15]=a[e+11]<<1;var d=c+76|0,c=c+68|0;h[a[c>>2]+(a[d>>2]-1<<1)>>1]=0;Sb(a[c>>2],0,(a[d>>2]<<1)-2|0,1);d=k[e+33];a[e+32]=p[(Ub+2>>1)+(6* +d|0)]&65535;a[e+35]=p[(Ub>>1)+(6*d|0)]&65535;a[e+36]=p[(Ub+4>>1)+(6*d|0)]&65535;a[e+31]=p[(Ub+6>>1)+(6*d|0)]&65535;a[e+27]=0;a[e+23]=0;a[e+29]=0;a[e+30]=2;a[e+24]=2;a[e+28]=0;a[e+26]=0;a[e+18]=0}function rf(c,e){var d,b,f,g,i,o,m,ia,j,L,A,n,x,q,v,t,w,O,da,p,ga,z,r,J,F,u,B,E,C,K,D,G=c>>2,M,Q=0==(c|0);a:do if(Q)var Ma=-2;else{var N=k[G+7];D=N>>2;if(!(0==(N|0)|5>>0)){var X=0==(a[G+3]|0);do if(!X&&!(0==(a[G]|0)&&0!=(a[G+1]|0))){K=(N+4|0)>>2;var cb=k[K],db=4==(e|0);if(666!=(cb|0)|db){C=(c+16|0)>>2; +if(0==(a[C]|0)){a[G+6]=s.__str765|0;Ma=-5;break a}a[D]=c;E=(N+40|0)>>2;var ya=a[E];a[E]=e;if(42==(cb|0))if(2!=(a[D+6]|0)){var ma=(a[D+12]<<12)-30720|0;if(1<(a[D+34]|0))var Z=0;else var lc=a[D+33],Z=2>(lc|0)?0:6>(lc|0)?64:6==(lc|0)?128:192;var fa=Z|ma,Na=N+108|0,tb=0==(a[Na>>2]|0)?fa:fa|32,Aa=tb|31-(tb>>>0)%31;a[K]=113;Zb(N,Aa);B=(c+48|0)>>2;0!=(a[Na>>2]|0)&&(Zb(N,k[B]>>>16),Zb(N,a[B]&65535));var Xa=kc(0,0,0);a[B]=Xa;var Ia=a[K];M=31}else{var Da=oa(0,0,0);u=(c+48|0)>>2;a[u]=Da;F=(N+20|0)>>2;var Ya= +a[F];a[F]=Ya+1|0;J=(N+8|0)>>2;l[a[J]+Ya|0]=31;var Sa=a[F];a[F]=Sa+1|0;l[a[J]+Sa|0]=-117;var vf=a[F];a[F]=vf+1|0;l[a[J]+vf|0]=8;var Ta=N+28|0;r=Ta>>2;var jb=k[r];z=jb>>2;if(0==(jb|0)){var eb=a[F];a[F]=eb+1|0;l[a[J]+eb|0]=0;var rc=a[F];a[F]=rc+1|0;l[a[J]+rc|0]=0;var Ua=a[F];a[F]=Ua+1|0;l[a[J]+Ua|0]=0;var mc=a[F];a[F]=mc+1|0;l[a[J]+mc|0]=0;var Ba=a[F];a[F]=Ba+1|0;l[a[J]+Ba|0]=0;var Oa=a[D+33],Za=9==(Oa|0)?2:1<(a[D+34]|0)?4:2>(Oa|0)?4:0,$a=a[F];a[F]=$a+1|0;l[a[J]+$a|0]=Za;var kb=a[F];a[F]=kb+1|0;l[a[J]+ +kb|0]=3;a[K]=113;M=92}else{var fb=(0!=(a[z+11]|0)?2:0)|0!=(a[z]|0)&1|(0==(a[z+4]|0)?0:4)|(0==(a[z+7]|0)?0:8)|(0==(a[z+9]|0)?0:16),pb=a[F];a[F]=pb+1|0;l[a[J]+pb|0]=fb;var lb=a[a[r]+4>>2]&255,P=a[F];a[F]=P+1|0;l[a[J]+P|0]=lb;var aa=k[a[r]+4>>2]>>>8&255,$=k[F];a[F]=$+1|0;l[a[J]+$|0]=aa;var qa=k[a[r]+4>>2]>>>16&255,H=k[F];a[F]=H+1|0;l[a[J]+H|0]=qa;var ba=k[a[r]+4>>2]>>>24&255,V=k[F];a[F]=V+1|0;l[a[J]+V|0]=ba;var I=a[D+33],sa=9==(I|0)?2:1<(a[D+34]|0)?4:2>(I|0)?4:0,ub=a[F];a[F]=ub+1|0;l[a[J]+ub|0]=sa;var ha= +a[a[r]+12>>2]&255,ja=a[F];a[F]=ja+1|0;l[a[J]+ja|0]=ha;var ka=k[r];if(0==(a[ka+16>>2]|0))var W=ka;else{var na=a[ka+20>>2]&255,ra=a[F];a[F]=ra+1|0;l[a[J]+ra|0]=na;var pa=k[a[r]+20>>2]>>>8&255,la=k[F];a[F]=la+1|0;l[a[J]+la|0]=pa;W=a[r]}if(0!=(a[W+44>>2]|0)){var ua=oa(a[u],a[J],a[F]);a[u]=ua}a[D+8]=0;a[K]=69;var Va=Ta;ga=Va>>2;M=33}}else Ia=cb,M=31;if(31==M)if(69!=(Ia|0)){var Fa=Ia;M=50}else Va=N+28|0,ga=Va>>2,M=33;do if(33==M){var ab=k[ga];if(0==(a[ab+16>>2]|0)){a[K]=73;var T=ab;M=52}else{p=(N+20|0)>> +2;da=(N+32|0)>>2;var Y=N+12|0;O=(c+48|0)>>2;w=(N+8|0)>>2;for(var U=a[p],ca=a[da],ea=ab;;){if(ca>>>0>=(a[ea+20>>2]&65535)>>>0){var S=U,Ea=ea;break}var gb=k[p];if((gb|0)==(a[Y>>2]|0)){if(0!=(a[ea+44>>2]|0)&gb>>>0>U>>>0){var vb=oa(a[O],a[w]+U|0,gb-U|0);a[O]=vb}ta(c);var Wa=k[p];if((Wa|0)==(a[Y>>2]|0)){S=Wa;Ea=a[ga];break}var Ga=Wa,hb=Wa,qe=a[da],Wc=a[ga]}else Ga=U,hb=gb,qe=ca,Wc=ea;var mb=l[a[Wc+16>>2]+qe|0];a[p]=hb+1|0;l[a[w]+hb|0]=mb;var wb=a[da]+1|0;a[da]=wb;U=Ga;ca=wb;ea=a[ga]}if(0==(a[Ea+44>>2]| +0))var qb=Ea;else{var yb=k[p];if(yb>>>0<=S>>>0)qb=Ea;else{var ib=oa(a[O],a[w]+S|0,yb-S|0);a[O]=ib;qb=a[ga]}}(a[da]|0)==(a[qb+20>>2]|0)?(a[da]=0,a[K]=73,T=qb,M=52):(Fa=a[K],M=50)}}while(0);if(50==M)if(73!=(Fa|0)){var Pa=Fa;M=67}else T=a[D+7],M=52;do if(52==M){var Ja=N+28|0;t=Ja>>2;if(0==(a[T+28>>2]|0)){a[K]=91;var Ka=Ja;v=Ka>>2;M=69}else{q=(N+20|0)>>2;var rb=a[q],Qh=N+12|0;x=(c+48|0)>>2;n=(N+8|0)>>2;A=(N+32|0)>>2;for(var nb=rb,Bb=rb;;){if((Bb|0)==(a[Qh>>2]|0)){if(0!=(a[a[t]+44>>2]|0)&Bb>>>0>nb>>>0){var xb= +oa(a[x],a[n]+nb|0,Bb-nb|0);a[x]=xb}ta(c);var bb=k[q];if((bb|0)==(a[Qh>>2]|0)){var zb=1,Cb=bb;break}var Dg=bb,wa=bb}else Dg=nb,wa=Bb;var Rh=a[A];a[A]=Rh+1|0;var sc=y[a[a[t]+28>>2]+Rh|0],xa=sc&255;a[q]=wa+1|0;l[a[n]+wa|0]=sc;if(0==sc<<24>>24){zb=xa;Cb=Dg;break}nb=Dg;Bb=a[q]}if(0!=(a[a[t]+44>>2]|0)){var Ha=k[q];if(!(Ha>>>0<=Cb>>>0)){var La=oa(a[x],a[n]+Cb|0,Ha-Cb|0);a[x]=La}}0==(zb|0)?(a[A]=0,a[K]=91,Ka=Ja,v=Ka>>2,M=69):(Pa=a[K],M=67)}}while(0);if(67==M)if(91!=(Pa|0)){var Ca=Pa;M=84}else Ka=N+28|0,v= +Ka>>2,M=69;do if(69==M)if(0==(a[a[v]+36>>2]|0)){a[K]=103;var Vb=Ka;M=86}else{L=(N+20|0)>>2;var $b=a[L],za=N+12|0;j=(c+48|0)>>2;ia=(N+8|0)>>2;for(var Qa=N+32|0,Fb=$b,Nb=$b;;){if((Nb|0)==(a[za>>2]|0)){if(0!=(a[a[v]+44>>2]|0)&Nb>>>0>Fb>>>0){var uj=oa(a[j],a[ia]+Fb|0,Nb-Fb|0);a[j]=uj}ta(c);var ac=k[L];if((ac|0)==(a[za>>2]|0)){var Ra=1,Ib=ac;break}var Wb=ac,Bc=ac}else Wb=Fb,Bc=Nb;var Sh=a[Qa>>2];a[Qa>>2]=Sh+1|0;var bc=y[a[a[v]+36>>2]+Sh|0],Qb=bc&255;a[L]=Bc+1|0;l[a[ia]+Bc|0]=bc;if(0==bc<<24>>24){Ra=Qb; +Ib=Wb;break}Fb=Wb;Nb=a[L]}if(0!=(a[a[v]+44>>2]|0)){var nc=k[L];if(!(nc>>>0<=Ib>>>0)){var vj=oa(a[j],a[ia]+Ib|0,nc-Ib|0);a[j]=vj}}0==(Ra|0)?(a[K]=103,Vb=Ka,M=86):(Ca=a[K],M=84)}while(0);84==M&&(103!=(Ca|0)?M=92:(Vb=N+28|0,M=86));do if(86==M){if(0!=(a[a[Vb>>2]+44>>2]|0)){m=(N+20|0)>>2;var cc=k[m],oc=N+12|0,dc=k[oc>>2];if((cc+2|0)>>>0>dc>>>0){ta(c);var Ob=a[m],Th=a[oc>>2]}else Ob=cc,Th=dc;if((Ob+2|0)>>>0>Th>>>0)break;o=(c+48|0)>>2;var sb=a[o]&255;a[m]=Ob+1|0;var zd=N+8|0;l[a[zd>>2]+Ob|0]=sb;var ec=k[o]>>> +8&255,vc=k[m];a[m]=vc+1|0;l[a[zd>>2]+vc|0]=ec;var fc=oa(0,0,0);a[o]=fc}a[K]=113}while(0);i=(N+20|0)>>2;var wj=0==(a[i]|0);do{if(wj){var pc=a[G+1];if(0!=(pc|0)){var gc=pc;break}if(!((ya|0)>=(e|0)&4!=(e|0))){gc=pc;break}a[G+6]=s.__str765|0;Ma=-5;break a}ta(c);if(0==(a[C]|0)){a[E]=-1;Ma=0;break a}gc=a[G+1]}while(0);var tc=666==(a[K]|0),Uh=0==(gc|0);do{if(tc){if(Uh){M=103;break}a[G+6]=s.__str765|0;Ma=-5;break a}M=Uh?103:106}while(0);do if(103==M)if(0!=(a[D+29]|0))M=106;else{if(0==(e|0)){Ma=0;break a}M= +tc?122:106}while(0);do if(106==M){var hc=a[D+34],Pb=2==hc?wf(N,e):3==hc?xf(N,e):va[a[(Ub+8>>2)+(3*a[D+33]|0)]](N,e);2>(Pb-2|0)>>>0?a[K]=666:M=112;if(2==Pb||0==Pb){if(0!=(a[C]|0)){Ma=0;break a}a[E]=-1;Ma=0;break a}else if(1==Pb){if(1==e)yf(N);else if(5!=e&&(re(N,0,0,0),3==(e|0))){var ic=N+76|0,wc=N+68|0;h[a[wc>>2]+(a[ic>>2]-1<<1)>>1]=0;Sb(a[wc>>2],0,(a[ic>>2]<<1)-2|0,1);0==(a[D+29]|0)&&(a[D+27]=0,a[D+23]=0)}ta(c);if(0==(a[C]|0)){a[E]=-1;Ma=0;break a}}}while(0);if(!db){Ma=0;break a}g=(N+24|0)>>2;var Ab= +a[g];if(1>(Ab|0)){Ma=1;break a}f=(c+48|0)>>2;var ob=k[f];if(2==(Ab|0)){var Mb=ob&255,Db=a[i];a[i]=Db+1|0;b=(N+8|0)>>2;l[a[b]+Db|0]=Mb;var Jb=k[f]>>>8&255,Hb=k[i];a[i]=Hb+1|0;l[a[b]+Hb|0]=Jb;var Xc=k[f]>>>16&255,xc=k[i];a[i]=xc+1|0;l[a[b]+xc|0]=Xc;var Kb=k[f]>>>24&255,Eb=k[i];a[i]=Eb+1|0;l[a[b]+Eb|0]=Kb;d=(c+8|0)>>2;var Cc=a[d]&255,Dc=a[i];a[i]=Dc+1|0;l[a[b]+Dc|0]=Cc;var yc=k[d]>>>8&255,zc=k[i];a[i]=zc+1|0;l[a[b]+zc|0]=yc;var Rb=k[d]>>>16&255,Gb=k[i];a[i]=Gb+1|0;l[a[b]+Gb|0]=Rb;var Yb=k[d]>>>24&255, +Tb=k[i];a[i]=Tb+1|0;l[a[b]+Tb|0]=Yb}else Zb(N,ob>>>16),Zb(N,a[f]&65535);ta(c);var Lb=a[g];0<(Lb|0)&&(a[g]=-Lb|0);Ma=0==(a[i]|0)&1;break a}}while(0);a[G+6]=s.__str462|0}Ma=-2}while(0);return Ma}function Zb(c,e){var d;d=(c+20|0)>>2;var b=k[d];a[d]=b+1|0;var f=c+8|0;l[a[f>>2]+b|0]=e>>>8&255;b=a[d];a[d]=b+1|0;l[a[f>>2]+b|0]=e&255}function ta(c){var e,d,b;b=(c+28|0)>>2;var f=k[b],g=k[f+20>>2];d=(c+16|0)>>2;e=k[d];g=g>>>0>e>>>0?e:g;0!=(g|0)&&(e=(c+12|0)>>2,Qb(a[e],a[f+16>>2],g,1),a[e]=a[e]+g|0,f=a[b]+16| +0,a[f>>2]=a[f>>2]+g|0,c=c+20|0,a[c>>2]=a[c>>2]+g|0,a[d]=a[d]-g|0,d=a[b]+20|0,a[d>>2]=a[d>>2]-g|0,b=a[b],0==(a[b+20>>2]|0)&&(a[(b+16|0)>>2]=a[b+8>>2]))}function wf(c,e){var d,b,f,g,i,o;o=(c+116|0)>>2;var m=c+96|0;i=(c+108|0)>>2;g=(c+56|0)>>2;f=(c+5792|0)>>2;var k=c+5796|0,j=c+5784|0,L=c+5788|0;b=(c+92|0)>>2;d=(c|0)>>2;a:for(;;){var A=0==(a[o]|0);do if(A&&(Rb(c),0==(a[o]|0))){if(0==(e|0)){var n=0;break a}f=a[b];o=4==(e|0);xa(c,-1<(f|0)?a[g]+f|0:0,a[i]-f|0,o&1);a[b]=a[i];ta(a[d]);if(0==(a[a[d]+16>>2]| +0)){n=o?2:0;break a}n=o?3:1;break a}while(0);a[m>>2]=0;A=y[a[g]+a[i]|0];h[a[k>>2]+(a[f]<<1)>>1]=0;var x=a[f];a[f]=x+1|0;l[a[j>>2]+x|0]=A;A=((A&255)<<2)+c+148|0;h[A>>1]=h[A>>1]+1&65535;x=(a[f]|0)==(a[L>>2]-1|0);a[o]=a[o]-1|0;A=a[i]+1|0;a[i]=A;if(x&&(x=a[b],xa(c,-1<(x|0)?a[g]+x|0:0,A-x|0,0),a[b]=a[i],ta(a[d]),0==(a[a[d]+16>>2]|0))){n=0;break}}return n}function xf(c,e){var d,b,f,g,i,o,m,ia;m=(c+116|0)>>2;var j=0==(e|0);o=(c+96|0)>>2;i=(c+108|0)>>2;g=(c+5792|0)>>2;var L=c+5796|0,A=c+5784|0,n=c+2440|0, +x=c+5788|0;f=(c+56|0)>>2;b=(c+92|0)>>2;d=(c|0)>>2;a:for(;;){var q=k[m],v=258>q>>>0;do if(v){Rb(c);ia=k[m];if(258>ia>>>0&j){var t=0;break a}if(0!=(ia|0))if(a[o]=0,2>>0)O=ia,ia=7;else{var w=a[i];ia=22}else{g=a[b];o=4==(e|0);xa(c,-1<(g|0)?a[f]+g|0:0,a[i]-g|0,o&1);a[b]=a[i];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){t=o?2:0;break a}t=o?3:1;break a}}else{a[o]=0;var O=q;ia=7}while(0);do if(7==ia)if(q=k[i],0==(q|0))w=0,ia=22;else if(ia=k[f],v=y[ia+(q-1)|0],v<<24>>24!=l[ia+q|0]<<24>>24)w=q,ia=22;else if(v<<24>> +24!=l[q+(ia+1)|0]<<24>>24)w=q,ia=22;else{var da=q+(ia+2)|0;if(v<<24>>24!=l[da]<<24>>24)w=q,ia=22;else{for(ia=q+(ia+258)|0;;){var p=da+1|0;if(v<<24>>24!=l[p]<<24>>24){var ga=p;break}p=da+2|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+3|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+4|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+5|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+6|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+7|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}da=da+8|0;if(!(v<<24>>24==l[da]<< +24>>24&da>>>0>>0)){ga=da;break}}v=ga-ia+258|0;v=v>>>0>O>>>0?O:v;a[o]=v;if(2>=v>>>0)w=q,ia=22;else{var z=v+253|0,r=z&255;h[a[L>>2]+(a[g]<<1)>>1]=1;q=a[g];a[g]=q+1|0;l[a[A>>2]+q|0]=r;z=((y[s.__length_code+(z&255)|0]&255|256)+1<<2)+c+148|0;h[z>>1]=h[z>>1]+1&65535;h[n>>1]=h[n>>1]+1&65535;z=(a[g]|0)==(a[x>>2]-1|0)&1;r=a[o];a[m]=a[m]-r|0;r=a[i]+r|0;a[i]=r;a[o]=0;ia=23}}}while(0);22==ia&&(z=y[a[f]+w|0],h[a[L>>2]+(a[g]<<1)>>1]=0,r=a[g],a[g]=r+1|0,l[a[A>>2]+r|0]=z,z=((z&255)<<2)+c+148|0,h[z>>1]=h[z>>1]+ +1&65535,z=(a[g]|0)==(a[x>>2]-1|0)&1,a[m]=a[m]-1|0,r=a[i]+1|0,a[i]=r);if(0!=(z|0)&&(q=a[b],xa(c,-1<(q|0)?a[f]+q|0:0,r-q|0,0),a[b]=a[i],ta(a[d]),0==(a[a[d]+16>>2]|0))){t=0;break}}return t}function Rb(c){var e,d,b,f,g=c+44|0,i=k[g>>2],o=c+60|0;b=(c+116|0)>>2;d=(c+108|0)>>2;var m=i-262|0,ia=c|0;e=(c+56|0)>>2;var l=c+72|0,j=c+88|0,A=c+84|0,n=c+112|0,x=c+92|0,q=c+76|0,v=c+68|0,t=c+64|0,w=a[b];f=i;a:for(;;){var O=k[d],w=a[o>>2]-w-O|0;if(O>>>0<(m+f|0)>>>0)O=w;else{f=k[e];Qb(f,f+i|0,i,1);a[n>>2]=a[n>>2]-i| +0;a[d]=a[d]-i|0;a[x>>2]=a[x>>2]-i|0;f=O=a[q>>2];for(O=(O<<1)+a[v>>2]|0;;){var O=O-2|0,da=p[O>>1]&65535;h[O>>1]=da>>>0>>0?0:da-i&65535;f=f-1|0;if(0==(f|0))break}f=i;for(O=(i<<1)+a[t>>2]|0;!(O=O-2|0,da=p[O>>1]&65535,h[O>>1]=da>>>0>>0?0:da-i&65535,f=f-1|0,0==(f|0)););O=w+i|0}w=a[ia>>2];if(0==(a[w+4>>2]|0))break;f=a[e]+a[b]+a[d]|0;var da=w+4|0,s=k[da>>2],O=s>>>0>O>>>0?O:s;if(0==(O|0))w=0;else{a[da>>2]=s-O|0;da=a[a[w+28>>2]+24>>2];if(1==da){var da=w+48|0,s=a[w>>2],ga=kc(a[da>>2],s,O);a[da>>2]=ga; +da=s}else 2==da?(da=w+48|0,s=a[w>>2],ga=oa(a[da>>2],s,O),a[da>>2]=ga,da=s):da=a[w>>2];s=w|0;Qb(f,da,O,1);a[s>>2]=a[s>>2]+O|0;w=w+8|0;a[w>>2]=a[w>>2]+O|0;w=O}w=a[b]+w|0;a[b]=w;2>>0?(f=k[d],O=k[e],da=y[O+f|0]&255,a[l>>2]=da,a[l>>2]=(y[f+(O+1)|0]&255^da<>2])&a[A>>2],f=262>w>>>0?14:16):f=14;do if(14==f&&0!=(a[a[ia>>2]+4>>2]|0)){f=a[g>>2];continue a}while(0);c=(c+5824|0)>>2;b=k[c];o=k[o>>2];if(b>>>0>=o>>>0)break;d=w+a[d]|0;if(b>>>0>>0){o=o-d|0;o=258>>0?258:o;Sb(a[e]+d|0,0,o,1);a[c]=o+d|0; +break}d=d+258|0;if(b>>>0>=d>>>0)break;d=d-b|0;o=o-b|0;d=d>>>0>o>>>0?o:d;Sb(a[e]+b|0,0,d,1);a[c]=a[c]+d|0;break}}function zf(c,e){var d,b,f,g,i;d=a[c+12>>2]-5|0;var o=65535>d>>>0?d:65535;i=(c+116|0)>>2;g=(c+108|0)>>2;f=(c+92|0)>>2;var m=c+44|0;b=(c+56|0)>>2;d=(c|0)>>2;a:for(;;){var h=k[i],l=2>h>>>0;do if(l){Rb(c);var j=k[i];if(0==(j|e|0)){var A=0;break a}if(0==(j|0)){A=a[f];i=4==(e|0);xa(c,-1<(A|0)?a[b]+A|0:0,a[g]-A|0,i&1);a[f]=a[g];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){A=i?2:0;break a}A=i?3:1;break a}}else j= +h;while(0);l=a[g]+j|0;a[g]=l;a[i]=0;h=k[f];j=h+o|0;if(!(0!=(l|0)&l>>>0>>0)){a[i]=l-j|0;a[g]=j;xa(c,-1<(h|0)?a[b]+h|0:0,o,0);a[f]=a[g];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){A=0;break}l=a[g];h=a[f]}l=l-h|0;if(!(l>>>0<(a[m>>2]-262|0)>>>0)&&(xa(c,-1<(h|0)?a[b]+h|0:0,l,0),a[f]=a[g],ta(a[d]),0==(a[a[d]+16>>2]|0))){A=0;break}}return A}function Yc(c,e){var d=c>>2,b=k[d+31],f=k[d+14],g=k[d+27],i=f+g|0,o=k[d+30],m=k[d+36],h=a[d+11]-262|0,h=g>>>0>h>>>0?g-h|0:0,j=a[d+16],L=a[d+13],A=g+(f+258)|0,n=k[d+29],m=m>>> +0>n>>>0?n:m,x=c+112|0,q=g+(f+1)|0,v=g+(f+2)|0,t=g+257|0,w=l[f+o+g|0],O=e,d=o>>>0>>0?b:b>>>2,b=l[f+(g-1)+o|0];a:for(;;){var y=f+O|0,s=l[f+O+o|0]<<24>>24==w<<24>>24;do if(s)if(l[f+(o-1)+O|0]<<24>>24!=b<<24>>24)var ga=w,z=b,r=o;else if(l[y]<<24>>24!=l[i]<<24>>24)ga=w,z=b,r=o;else if(l[O+(f+1)|0]<<24>>24!=l[q]<<24>>24)ga=w,z=b,r=o;else{ga=v;for(z=O+(f+2)|0;;){r=ga+1|0;if(l[r]<<24>>24!=l[z+1|0]<<24>>24){var J=r;break}r=ga+2|0;if(l[r]<<24>>24!=l[z+2|0]<<24>>24){J=r;break}r=ga+3|0;if(l[r]<<24>> +24!=l[z+3|0]<<24>>24){J=r;break}r=ga+4|0;if(l[r]<<24>>24!=l[z+4|0]<<24>>24){J=r;break}r=ga+5|0;if(l[r]<<24>>24!=l[z+5|0]<<24>>24){J=r;break}r=ga+6|0;if(l[r]<<24>>24!=l[z+6|0]<<24>>24){J=r;break}r=ga+7|0;if(l[r]<<24>>24!=l[z+7|0]<<24>>24){J=r;break}ga=ga+8|0;z=z+8|0;if(!(l[ga]<<24>>24==l[z]<<24>>24&ga>>>0
>>0)){J=ga;break}}z=J-A|0;r=z+258|0;if((r|0)<=(o|0))ga=w,z=b,r=o;else{a[x>>2]=O;if((r|0)>=(m|0)){var F=r;break a}ga=l[f+r+g|0];z=l[f+t+z|0]}}else ga=w,z=b,r=o;while(0);O=p[j+((O&L)<<1)>>1]&65535; +if(O>>>0<=h>>>0){F=r;break}d=d-1|0;if(0==(d|0)){F=r;break}w=ga;b=z;o=r}return F>>>0>n>>>0?n:F}function Af(c,e){var d,b,f,g,i,o,m,ia,j,L,A,n;A=(c+116|0)>>2;var x=0==(e|0);L=(c+72|0)>>2;j=(c+88|0)>>2;ia=(c+108|0)>>2;m=(c+56|0)>>2;o=(c+84|0)>>2;i=(c+68|0)>>2;var q=c+52|0,v=c+64|0,t=c+44|0;g=(c+96|0)>>2;var w=c+112|0;f=(c+5792|0)>>2;var O=c+5796|0,da=c+5784|0,E=c+5788|0,ga=c+128|0;b=(c+92|0)>>2;d=(c|0)>>2;a:for(;;){var z=262>k[A]>>>0;do if(z){Rb(c);n=k[A];if(262>n>>>0&x){var r=0;break a}if(0==(n|0)){f= +a[b];g=4==(e|0);xa(c,-1<(f|0)?a[m]+f|0:0,a[ia]-f|0,g&1);a[b]=a[ia];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){r=g?2:0;break a}r=g?3:1;break a}else n=2>>0?5:8}else n=5;while(0);if(5==n)if(z=k[ia],n=(y[a[m]+z+2|0]&255^a[L]<>1],h[a[v>>2]+((a[q>>2]&z)<<1)>>1]=n,z=n&65535,h[a[i]+(a[L]<<1)>>1]=a[ia]&65535,0==n<<16>>16)n=8;else if((a[ia]-z|0)>>>0>(a[t>>2]-262|0)>>>0)n=8;else{var J=Yc(c,z);a[g]=J;n=9}8==n&&(J=a[g]);if(2>>0){z=J+253|0;n=a[ia]-a[w>>2]&65535;h[a[O>>2]+(a[f]<< +1)>>1]=n;var F=a[f];a[f]=F+1|0;l[a[da>>2]+F|0]=z&255;n=n-1&65535;z=((y[s.__length_code+(z&255)|0]&255|256)+1<<2)+c+148|0;h[z>>1]=h[z>>1]+1&65535;z=n&65535;z=((y[s.__dist_code+(256>(n&65535)?z:(z>>>7)+256|0)|0]&255)<<2)+c+2440|0;h[z>>1]=h[z>>1]+1&65535;z=(a[f]|0)==(a[E>>2]-1|0)&1;n=k[g];F=a[A]-n|0;a[A]=F;if(n>>>0<=k[ga>>2]>>>0&2>>0){for(a[g]=n-1|0;!(F=k[ia],n=F+1|0,a[ia]=n,F=(y[a[m]+F+3|0]&255^a[L]<>2]+((a[q>>2]&n)<<1)>>1]=h[a[i]+(F<<1)>>1],h[a[i]+(a[L]<<1)>>1]=a[ia]&65535, +n=a[g]-1|0,a[g]=n,0==(n|0)););n=a[ia]+1|0;a[ia]=n}else{n=a[ia]+n|0;a[ia]=n;a[g]=0;var F=k[m],u=y[F+n|0]&255;a[L]=u;a[L]=(y[n+(F+1)|0]&255^u<>2]+(a[f]<<1)>>1]=0,n=a[f],a[f]=n+1|0,l[a[da>>2]+n|0]=z,z=((z&255)<<2)+c+148|0,h[z>>1]=h[z>>1]+1&65535,z=(a[f]|0)==(a[E>>2]-1|0)&1,a[A]=a[A]-1|0,n=a[ia]+1|0,a[ia]=n;if(0!=(z|0)&&(z=a[b],xa(c,-1<(z|0)?a[m]+z|0:0,n-z|0,0),a[b]=a[ia],ta(a[d]),0==(a[a[d]+16>>2]|0))){r=0;break}}return r}function se(c,e){var d,b,f,g,i,o,m,j, +R,L,A,n,x,q,v,t;v=(c+116|0)>>2;var w=0==(e|0);q=(c+72|0)>>2;var O=c+88|0;x=(c+108|0)>>2;n=(c+56|0)>>2;var da=c+84|0;A=(c+68|0)>>2;var E=c+52|0,ga=c+64|0;L=(c+96|0)>>2;R=(c+120|0)>>2;j=(c+112|0)>>2;m=(c+100|0)>>2;o=(c+5792|0)>>2;i=(c+5796|0)>>2;g=(c+5784|0)>>2;var z=c+5788|0;f=(c+104|0)>>2;b=(c+92|0)>>2;d=(c|0)>>2;var r=c+128|0,J=c+44|0,F=c+136|0;a:for(;;){for(var u=a[v];;){u=262>u>>>0;do if(u){Rb(c);t=k[v];if(262>t>>>0&w){var B=0;break a}if(0!=(t|0))if(2>>0)t=7;else{a[R]=a[L];a[m]=a[j];var D=a[L]= +2;t=15}else{0!=(a[f]|0)&&(m=y[a[n]+(a[x]-1)|0],h[a[i]+(a[o]<<1)>>1]=0,i=a[o],a[o]=i+1|0,l[a[g]+i|0]=m,g=((m&255)<<2)+c+148|0,h[g>>1]=h[g>>1]+1&65535,a[f]=0);f=k[b];g=4==(e|0);xa(c,-1<(f|0)?a[n]+f|0:0,a[x]-f|0,g&1);a[b]=a[x];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){B=g?2:0;break a}B=g?3:1;break a}}else t=7;while(0);do if(7==t){t=k[x];u=(y[a[n]+t+2|0]&255^a[q]<>2])&a[da>>2];a[q]=u;u=p[a[A]+(u<<1)>>1];h[a[ga>>2]+((a[E>>2]&t)<<1)>>1]=u;t=u&65535;h[a[A]+(a[q]<<1)>>1]=a[x]&65535;var C=k[L];a[R]=C;a[m]=a[j]; +a[L]=2;if(0==u<<16>>16)D=2,t=15;else if(C>>>0>=k[r>>2]>>>0){var K=C,Q=2;t=16}else{if((a[x]-t|0)>>>0>(a[J>>2]-262|0)>>>0)D=2;else if(D=Yc(c,t),a[L]=D,!(6<=D>>>0)){if(1!=(a[F>>2]|0)){if(3!=(D|0)){t=15;break}if(4096>=(a[x]-a[j]|0)>>>0){D=3;t=15;break}}D=a[L]=2}t=15}}while(0);15==t&&(K=a[R],Q=D);if(!(3>K>>>0|Q>>>0>K>>>0))break;if(0==(a[f]|0))a[f]=1,a[x]=a[x]+1|0,u=a[v]-1|0,a[v]=u;else if(u=y[a[n]+(a[x]-1)|0],h[a[i]+(a[o]<<1)>>1]=0,t=a[o],a[o]=t+1|0,l[a[g]+t|0]=u,u=((u&255)<<2)+c+148|0,h[u>>1]=h[u>>1]+ +1&65535,(a[o]|0)==(a[z>>2]-1|0)&&(u=a[b],xa(c,-1<(u|0)?a[n]+u|0:0,a[x]-u|0,0),a[b]=a[x],ta(a[d])),a[x]=a[x]+1|0,u=a[v]-1|0,a[v]=u,0==(a[a[d]+16>>2]|0)){B=0;break a}}C=k[x];u=C-3+a[v]|0;t=K+253|0;C=C+65535-a[m]&65535;h[a[i]+(a[o]<<1)>>1]=C;var G=a[o];a[o]=G+1|0;l[a[g]+G|0]=t&255;C=C-1&65535;t=((y[s.__length_code+(t&255)|0]&255|256)+1<<2)+c+148|0;h[t>>1]=h[t>>1]+1&65535;t=C&65535;t=((y[s.__dist_code+(256>(C&65535)?t:(t>>>7)+256|0)|0]&255)<<2)+c+2440|0;h[t>>1]=h[t>>1]+1&65535;t=a[o];C=a[z>>2]-1|0;G= +a[R];a[v]=1-G+a[v]|0;for(var G=G-2|0,M=a[R]=G;;){var X=k[x],G=X+1|0;a[x]=G;G>>>0>u>>>0?G=M:(M=(y[a[n]+X+3|0]&255^a[q]<>2])&a[da>>2],a[q]=M,h[a[ga>>2]+((a[E>>2]&G)<<1)>>1]=h[a[A]+(M<<1)>>1],h[a[A]+(a[q]<<1)>>1]=a[x]&65535,G=a[R]);G=G-1|0;a[R]=G;if(0==(G|0))break;M=G}t=(t|0)==(C|0);a[f]=0;a[L]=2;u=a[x]+1|0;a[x]=u;if(t&&(t=a[b],xa(c,-1<(t|0)?a[n]+t|0:0,u-t|0,0),a[b]=a[x],ta(a[d]),0==(a[a[d]+16>>2]|0))){B=0;break}}return B}function sf(c){var e=c>>2;0==(c|0)?e=-2:(c=a[e+7],0==(c|0)?e=-2:(a[(c+28| +0)>>2]=0,a[e+5]=0,a[e+2]=0,a[e+6]=0,a[e+12]=1,a[(c|0)>>2]=0,a[(c+4|0)>>2]=0,a[(c+12|0)>>2]=0,a[(c+20|0)>>2]=32768,a[(c+32|0)>>2]=0,a[(c+40|0)>>2]=0,a[(c+44|0)>>2]=0,a[(c+48|0)>>2]=0,a[(c+56|0)>>2]=0,a[(c+60|0)>>2]=0,e=c+1328|0,a[(c+108|0)>>2]=e,a[(c+80|0)>>2]=e,a[(c+76|0)>>2]=e,a[(c+7104|0)>>2]=1,a[(c+7108|0)>>2]=-1,e=0));return e}function me(c){var e,d,b,f,g,i,o,m,j,R,L,A,n,x,q,v,t,w,O,da,u,ga,z,r,J,F,E=ma;ma+=4;var B,C=0==(c|0);a:do if(C)var D=-2;else{var K=a[c+28>>2];if(0==(K|0))D=-2;else{F=(c+ +12|0)>>2;var Q=a[F];if(0==(Q|0))D=-2;else{J=(c|0)>>2;var G=a[J];if(0==(G|0)&&0!=(a[c+4>>2]|0))D=-2;else{var M=K;r=(K|0)>>2;var X=a[r];if(11==(X|0)){a[r]=12;var Ma=a[F],N=a[J],Z=12}else Ma=Q,N=G,Z=X;z=(c+16|0)>>2;var cb=a[z];ga=(c+4|0)>>2;var db=k[ga];u=(K+56|0)>>2;da=(K+60|0)>>2;O=(K+8|0)>>2;w=(K+24|0)>>2;var ya=E|0,pe=E+1|0;t=(K+16|0)>>2;v=(K+32|0)>>2;q=(c+24|0)>>2;var fa=K+36|0,lc=K+20|0;x=(c+48|0)>>2;n=(K+64|0)>>2;var wa=K+12|0;A=(K+4|0)>>2;L=(K+7108|0)>>2;var Na=K+84|0;R=Na>>2;var tb=K+76|0;j= +(K+72|0)>>2;var Aa=K+7112|0;m=(K+68|0)>>2;var Xa=K+44|0,Ia=K+7104|0,Da=K+48|0,Ya=K+52|0,Sa=K+40|0;o=(c+20|0)>>2;i=(K+28|0)>>2;var vf=E+2|0,Ta=E+3|0;g=(K+96|0)>>2;f=(K+100|0)>>2;var jb=K+92|0;b=(K+104|0)>>2;var eb=K+112|0;d=eb>>1;var rc=K+108|0,Ua=rc,mc=rc|0,Ba=K+1328|0,Oa=K+76|0,Za=eb,$a=K+752|0,kb=K+624|0,fb=K+80|0,pb=K+88|0,lb=K+80|0,P=0,aa=N,$=Ma,qa=db,H=cb,ba=a[u],V=a[da],I=cb,sa=Z;b:for(;;){c:do if(0==sa){var ub=k[O];if(0==(ub|0)){a[r]=12;var ha=P,ja=aa,ka=$,W=qa,na=H,ra=ba,pa=V,la=I}else{for(var ua= +aa,Va=qa,Fa=ba,ab=V;!(16<=ab>>>0);){if(0==(Va|0)){var T=P,Y=ua,U=0,ca=Fa,ea=ab,S=I;break b}var Ea=((y[ua]&255)<>2]=-1,Ga=a[O];var hb=0==(Ga&1|0);do if(!hb&&0==((((Fa<<8&65280)+(Fa>>>8)|0)>>>0)%31|0)){if(8==(Fa&15|0)){var qe=Fa>>>4,Wc=ab-4|0,mb=(qe& +15)+8|0,wb=k[fa>>2],qb=0==(wb|0);do{if(!qb){if(mb>>>0<=wb>>>0)break;a[q]=s.__str317|0;a[r]=29;ha=P;ja=ua;ka=$;W=Va;na=H;ra=qe;pa=Wc;la=I;B=265;break c}a[fa>>2]=mb}while(0);a[lc>>2]=1<>>12&2^11;ha=P;ja=ua;ka=$;W=Va;na=H;pa=ra=0;la=I;B=265;break c}a[q]=s.__str216|0;a[r]=29;ha=P;ja=ua;ka=$;W=Va;na=H;ra=Fa;pa=ab;la=I;B=265;break c}while(0);a[q]=s.__str115|0;a[r]=29;ha=P;ja=ua;ka=$;W=Va;na=H;ra=Fa;pa=ab}la=I}B=265}else if(1==sa){for(var ib=aa,Pa=qa,Ja=ba,Ka= +V;!(16<=Ka>>>0);){if(0==(Pa|0)){T=P;Y=ib;U=0;ca=Ja;ea=Ka;S=I;break b}var rb=((y[ib]&255)<>2]=Ja>>>8&1,nb=a[t];if(0!=(nb&512|0)){l[ya]=Ja&255;l[pe]=Ja>>>8&255;var Bb=oa(a[w],ya,2);a[w]=Bb}a[r]=2;var xb=ib,bb=Pa,zb=0,Cb=0;B=43}else a[q]=s.__str418|0,a[r]=29,ha=P,ja=ib,ka=$,W=Pa,na=H, +ra=Ja,pa=Ka,la=I,B=265}else if(2==sa)xb=aa,bb=qa,zb=ba,Cb=V,B=43;else if(3==sa){var ta=aa,Ha=qa,xa=ba,sc=V;B=51}else if(4==sa){var Ca=aa,za=qa,La=ba,Qa=V;B=59}else if(5==sa){var Vb=aa,$b=qa,Ra=ba,Ab=V;B=70}else if(6==sa){var Fb=aa,Nb=qa,ob=ba,ac=V,Db=a[t];B=80}else if(7==sa){var Ib=aa,Wb=qa,Bc=ba,sb=V;B=93}else if(8==sa){var bc=aa,Hb=qa,nc=ba,Eb=V;B=106}else if(9==sa){for(var cc=aa,oc=qa,dc=ba,Ob=V;!(32<=Ob>>>0);){if(0==(oc|0)){T=P;Y=cc;U=0;ca=dc;ea=Ob;S=I;break b}var Mb=((y[cc]&255)<>>(Kb>>>0),wc=V-Kb|0;!(32<=wc>>>0);){if(0==(Pb|0)){T=P;Y=hc;U=0;ca=ic;ea=wc;S=I;break b}var Sb=((y[hc]&255)<>>16^65535|0)){a[n]=Tb;a[r]=14;var Lb=hc,Rb=Pb,Yb=0,Ub=0;B=140}else a[q]= +s.__str721|0,a[r]=29,ha=P,ja=hc,ka=$,W=Pb,na=H,ra=ic,pa=wc,la=I,B=265}else if(14==sa)Lb=aa,Rb=qa,Yb=ba,Ub=V,B=140;else if(15==sa){var Xc=aa,xc=qa,Zb=ba,jc=V;B=141}else if(16==sa){for(var Cc=aa,Dc=qa,yc=ba,zc=V;!(14<=zc>>>0);){if(0==(Dc|0)){T=P;Y=Cc;U=0;ca=yc;ea=zc;S=I;break b}var vd=((y[Cc]&255)<>>5&31)+1|0;a[f]=Oc;a[jb>>2]=(yc>>>10&15)+4|0;var Qc=yc>>>14,Rc=zc-14|0;if(286>>0|30>>0)a[q]=s.__str822|0,a[r]= +29,ha=P,ja=Cc,ka=$,W=Dc,na=H,ra=Qc,pa=Rc,la=I,B=265;else{a[b]=0;a[r]=17;var te=Cc,ue=Dc,ve=Qc,we=Rc;B=151}}else if(17==sa)te=aa,ue=qa,ve=ba,we=V,B=151;else if(18==sa){var uc=P,Sc=aa,Tc=qa,jd=ba,nd=V;B=161}else if(19==sa){var pd=P,rd=aa,sd=qa,ud=ba,yd=V;B=202}else if(20==sa){var Ec=P,Nc=aa,Bf=qa,Pc=ba,Uc=V;B=203}else if(21==sa){var Vc=P,Yc=aa,kd=qa,ld=ba,md=V,Zc=a[j];B=224}else if(22==sa){var xe=P,$d=aa,ae=qa,be=ba,ce=V;B=231}else if(23==sa){var od=P,qd=aa,td=qa,wd=ba,xd=V,$c=a[j];B=245}else if(24== +sa){var Cf=P,Df=aa,Ef=qa,Ff=ba,Gf=V;B=251}else if(25==sa){if(0==(H|0)){T=P;Y=aa;U=qa;ca=ba;ea=V;S=I;break b}l[$]=a[n]&255;a[r]=20;ha=P;ja=aa;ka=$+1|0;W=qa;na=H-1|0;ra=ba;pa=V;la=I;B=265}else if(26==sa){var nf=0==(a[O]|0);do{if(!nf){for(var Ad=aa,ye=qa,Bd=ba,Cd=V;!(32<=Cd>>>0);){if(0==(ye|0)){T=P;Y=Ad;U=0;ca=Bd;ea=Cd;S=I;break b}var qf=((y[Ad]&255)<>> +0);){if(0==(bb|0)){T=P;Y=xb;U=0;ca=zb;ea=Cb;S=I;break b}var rf=((y[xb]&255)<>2]=zb);if(0!=(a[t]&512|0)){l[ya]=zb&255;l[pe]=zb>>>8&255;l[vf]=zb>>>16&255;l[Ta]=zb>>>24&255;var sf=oa(a[w],ya,4);a[w]=sf}a[r]=3;ta=xb;Ha=bb;sc=xa=0;B=51}else if(119==B){if(0==(a[wa>>2]|0)){a[F]=$;a[z]=H;a[J]=zd;a[ga]=ec;a[u]=vc;a[da]=fc;D=2;break a}var me=kc(0,0,0);a[w]=me;a[x]=me;a[r]=11;Gb=zd;pc=ec;gc=vc;tc=fc;B=122}else if(140==B)a[r]=15, +Xc=Lb,xc=Rb,Zb=Yb,jc=Ub,B=141;else if(151==B){for(;;){var Ae=k[b];if(Ae>>>0>=k[jb>>2]>>>0)break;for(var Be=te,Mf=ue,Ce=ve,Dd=we;!(3<=Dd>>>0);){if(0==(Mf|0)){T=P;Y=Be;U=0;ca=Ce;ea=Dd;S=I;break b}var tf=((y[Be]&255)<>1]&65535)<<1>>1)+d]=Ce&7;te=Be;ue=Mf;ve=Ce>>>3;we=Dd-3|0}var uf=19>Ae>>>0;d:do if(uf)for(var Fg=Ae;;){a[b]=Fg+1|0;h[((p[Eg+(Fg<<1)>>1]&65535)<<1>>1)+d]=0;var ne=k[b];if(19<=ne>>>0)break d;Fg=ne}while(0);a[mc>>2]= +Ba;a[Oa>>2]=Ba;a[R]=7;var oe=Nf(0,Za,19,Ua,Na,$a);0==(oe|0)?(a[b]=0,a[r]=18,uc=0,Sc=te,Tc=ue,jd=ve,nd=we,B=161):(a[q]=s.__str923|0,a[r]=29,ha=oe,ja=te,ka=$,W=ue,na=H,ra=ve,pa=we,la=I,B=265)}else if(283==B){var wf=0==(a[O]|0);do{if(!wf){if(0==(a[t]|0)){var Gg=Hf,Hg=If,Ig=Jf,Jg=Kf;break}for(var Ed=Hf,De=If,Ee=Jf,Fd=Kf;!(32<=Fd>>>0);){if(0==(De|0)){T=P;Y=Ed;U=0;ca=Ee;ea=Fd;S=Lf;break b}var xf=((y[Ed]&255)<>>0);){if(0==(Ha|0)){T=P;Y=ta;U=0;ca=xa;ea=sc;S=I;break b}var yf=((y[ta]&255)<>2]=xa&255,a[(a[v]+12|0)>>2]=xa>>>8);if(0!=(a[t]&512|0)){l[ya]=xa&255;l[pe]=xa>>>8&255;var zf=oa(a[w],ya,2);a[w]=zf}a[r]=4;Ca=ta;za=Ha;Qa=La=0;B=59}else if(122== +B){if(0==(a[A]|0)){for(var Fe=Gb,Of=pc,Gd=gc,Hd=tc;!(3<=Hd>>>0);){if(0==(Of|0)){T=P;Y=Fe;U=0;ca=Gd;ea=Hd;S=I;break b}var Af=((y[Fe]&255)<>>1&3;if(0==Pf)a[r]=13;else if(1==Pf){var Qf=M;a[Qf+76>>2]=Wh|0;a[Qf+84>>2]=9;a[Qf+80>>2]=Xh|0;a[Qf+88>>2]=5;a[r]=19}else 2==Pf?a[r]=16:3==Pf&&(a[q]=s.__str620|0,a[r]=29);ha=P;ja=Fe;ka=$;W=Of;na=H;ra=Gd>>>3;pa=Hd-3|0}else{var se=tc&7;a[r]=26;ha=P;ja=Gb;ka=$;W=pc;na=H;ra=gc>>>(se>>>0);pa=tc-se|0}la= +I;B=265}else if(141==B){var Kg=k[n];if(0==(Kg|0))a[r]=11,ha=P,ja=Xc,ka=$,W=xc,na=H;else{var cf=Kg>>>0>xc>>>0?xc:Kg,ad=cf>>>0>H>>>0?H:cf;if(0==(ad|0)){T=P;Y=Xc;U=xc;ca=Zb;ea=jc;S=I;break b}Qb($,Xc,ad,1);var ng=xc-ad|0,og=Xc+ad|0,pg=H-ad|0,qg=$+ad|0;a[n]=a[n]-ad|0;ha=P;ja=og;ka=qg;W=ng;na=pg}ra=Zb;pa=jc;la=I;B=265}else if(161==B){var Fc=Sc,Gc=Tc,Hc=jd,Ic=nd;d:for(;;){var bd=k[b],df=k[g],ef=a[f]+df|0;if(bd>>>0>>0){for(var rg=(1<>2],Jc=Fc,cd=Gc,Kc=Hc,Ac=Ic;;){var gf=rg&Kc,Xb=y[(gf<< +2)+ff+1|0]&255;if(Xb>>>0<=Ac>>>0)break;if(0==(cd|0)){T=uc;Y=Jc;U=0;ca=Kc;ea=Ac;S=I;break b}var sg=((y[Jc]&255)<>1];if(16>(Rf&65535)){for(var Ge=Jc,Sf=cd,Tf=Kc,Id=Ac;!(Id>>>0>=Xb>>>0);){if(0==(Sf|0)){T=uc;Y=Ge;U=0;ca=Tf;ea=Id;S=I;break b}var tg=((y[Ge]&255)<>>(Xb>>>0),vg=Id-Xb|0;a[b]=bd+1|0;h[(bd<<1>>1)+d]=Rf;Fc=Ge;Gc=Sf;Hc=ug;Ic=vg}else{if(16==Rf){for(var wg=Xb+2|0,Jd=Jc,He= +cd,Uf=Kc,Kd=Ac;!(Kd>>>0>=wg>>>0);){if(0==(He|0)){T=uc;Y=Jd;U=0;ca=Uf;ea=Kd;S=I;break b}var xg=((y[Jd]&255)<>>(Xb>>>0),hf=Kd-Xb|0;if(0==(bd|0)){a[q]=s.__str1024|0;a[r]=29;ha=uc;ja=Jd;ka=$;W=He;na=H;ra=Lg;pa=hf;la=I;B=265;break c}var Mg=h[(bd-1<<1>>1)+d],Vf=Jd,Wf=He,Xf=Lg>>>2,Yf=hf-2|0,Zf=(Lg&3)+3|0}else if(17==Rf){for(var yg=Xb+3|0,Ie=Jc,$f=cd,ag=Kc,Ld=Ac;!(Ld>>>0>=yg>>>0);){if(0==($f|0)){T=uc;Y=Ie;U=0;ca=ag;ea=Ld;S=I;break b}var zg=((y[Ie]&255)<< +Ld)+ag|0,Ie=Ie+1|0,$f=$f-1|0,ag=zg,Ld=Ld+8|0}var jf=ag>>>(Xb>>>0),Mg=0,Vf=Ie,Wf=$f,Xf=jf>>>3,Yf=-3-Xb+Ld|0,Zf=(jf&7)+3|0}else{for(var Ag=Xb+7|0,Je=Jc,bg=cd,cg=Kc,Md=Ac;!(Md>>>0>=Ag>>>0);){if(0==(bg|0)){T=uc;Y=Je;U=0;ca=cg;ea=Md;S=I;break b}var Bg=((y[Je]&255)<>>(Xb>>>0),Mg=0,Vf=Je,Wf=bg,Xf=kf>>>7,Yf=-7-Xb+Md|0,Zf=(kf&127)+11|0}if((bd+Zf|0)>>>0>ef>>>0){a[q]=s.__str1024|0;a[r]=29;ha=uc;ja=Vf;ka=$;W=Wf;na=H;ra=Xf;pa=Yf;la=I;B=265;break c}for(var lf= +Zf,Ng=bd;;){var mf=lf-1|0;a[b]=Ng+1|0;h[(Ng<<1>>1)+d]=Mg;if(0==(mf|0)){Fc=Vf;Gc=Wf;Hc=Xf;Ic=Yf;continue d}lf=mf;Ng=a[b]}}}else{if(29==(a[r]|0)){ha=uc;ja=Fc;ka=$;W=Gc;na=H;ra=Hc;pa=Ic;la=I;B=265;break c}if(0==h[kb>>1]<<16>>16){a[q]=s.__str1125|0;a[r]=29;ha=uc;ja=Fc;ka=$;W=Gc;na=H;ra=Hc;pa=Ic;la=I;B=265;break c}a[mc>>2]=Ba;a[Oa>>2]=Ba;a[R]=9;var of=Nf(1,Za,df,Ua,Na,$a);if(0!=(of|0)){a[q]=s.__str1226|0;a[r]=29;ha=of;ja=Fc;ka=$;W=Gc;na=H;ra=Hc;pa=Ic;la=I;B=265;break c}a[fb>>2]=a[Ua>>2];a[pb>>2]=6;var pf= +Nf(2,(a[g]<<1)+Za|0,a[f],Ua,pb,$a);if(0==(pf|0)){a[r]=19;pd=0;rd=Fc;sd=Gc;ud=Hc;yd=Ic;B=202;break c}a[q]=s.__str1327|0;a[r]=29;ha=pf;ja=Fc;ka=$;W=Gc;na=H;ra=Hc;pa=Ic;la=I;B=265;break c}}}while(0);do if(59==B){var Yh=k[t],Cg=0==(Yh&1024|0);do if(Cg){var Zh=a[v];if(0==(Zh|0))var Og=Ca,Pg=za,Qg=La,Rg=Qa;else a[(Zh+16|0)>>2]=0,Og=Ca,Pg=za,Qg=La,Rg=Qa}else{for(var Ke=Ca,dg=za,dd=La,Le=Qa;!(16<=Le>>>0);){if(0==(dg|0)){T=P;Y=Ke;U=0;ca=dd;ea=Le;S=I;break b}var Gh=((y[Ke]&255)<>2]=dd,ai=a[t];if(0!=(ai&512|0)){l[ya]=dd&255;l[pe]=dd>>>8&255;var Hh=oa(a[w],ya,2);a[w]=Hh}Og=Ke;Pg=dg;Rg=Qg=0}while(0);a[r]=5;Vb=Og;$b=Pg;Ra=Qg;Ab=Rg;B=70}else 202==B&&(a[r]=20,Ec=pd,Nc=rd,Bf=sd,Pc=ud,Uc=yd,B=203);while(0);do if(70==B){var Me=k[t];if(0==(Me&1024|0))var bi=Vb,ci=$b,di=Me;else{var eg=k[n],ed=eg>>>0>$b>>>0?$b:eg;if(0==(ed|0))var Sg=Vb,Tg=$b,ei=eg,fi=Me;else{var gi=k[v];e=gi>>2;if(0==(gi|0))var fg=Me;else{var hi= +a[e+4];if(0==(hi|0))fg=Me;else{var Ug=a[e+5]-eg|0,ii=k[e+6];Qb(hi+Ug|0,Vb,(Ug+ed|0)>>>0>ii>>>0?ii-Ug|0:ed,1);fg=a[t]}}if(0!=(fg&512|0)){var Ih=oa(a[w],Vb,ed);a[w]=Ih}var Jh=$b-ed|0,Kh=Vb+ed|0,ji=a[n]-ed|0;a[n]=ji;Sg=Kh;Tg=Jh;ei=ji;fi=fg}if(0!=(ei|0)){T=P;Y=Sg;U=Tg;ca=Ra;ea=Ab;S=I;break b}bi=Sg;ci=Tg;di=fi}a[n]=0;a[r]=6;Fb=bi;Nb=ci;ob=Ra;ac=Ab;Db=di;B=80}else if(203==B)if(5>>0&257>>0){a[F]=$;a[z]=H;a[J]=Nc;a[ga]=Bf;a[u]=Pc;a[da]=Uc;ki(c,I);var Lh=a[F],Mh=a[z],Nh=a[J],Oh=a[ga],Ph=a[u],xj=a[da]; +11==(a[r]|0)&&(a[L]=-1);ha=Ec;ja=Nh;ka=Lh;W=Oh;na=Mh;ra=Ph;pa=xj;la=I;B=265}else{a[L]=0;for(var yj=(1<>2],fd=Nc,Od=Bf,gd=Pc,Lc=Uc;;){var Vg=yj&gd,Wg=y[(Vg<<2)+Nd+1|0],Mc=Wg&255;if(Mc>>>0<=Lc>>>0)break;if(0==(Od|0)){T=Ec;Y=fd;U=0;ca=gd;ea=Lc;S=I;break b}var zj=((y[fd]&255)<>1],li=Xg&255,Aj=0==Xg<<24>>24;do if(Aj)var Pd=fd,Qd=Od,Zg=gd,$g=Lc,gg=0,ah=Wg,bh=Yg,ch=0;else if(0!=(li&240|0))Pd=fd,Qd=Od, +Zg=gd,$g=Lc,gg=Xg,ah=Wg,bh=Yg,ch=0;else{for(var Bj=Yg&65535,Cj=(1<>>(Mc>>>0))+Bj|0,mi=y[(dh<<2)+Nd+1|0];if(((mi&255)+Mc|0)>>>0<=Rd>>>0)break;if(0==(hg|0)){T=Ec;Y=Ne;U=0;ca=Oe;ea=Rd;S=I;break b}var Dj=((y[Ne]&255)<>1],Fj=l[(dh<<2)+Nd|0],Gj=Oe>>>(Mc>>>0),Hj=Rd-Mc|0;a[L]=Mc;Pd=Ne;Qd=hg;Zg=Gj;$g=Hj;gg=Fj;ah=mi;bh=Ej;ch=Mc}while(0);var eh=ah&255,ig=Zg>>>(eh>>>0),jg=$g-eh|0;a[L]=ch+ +eh|0;a[n]=bh&65535;var fh=gg&255;if(0==gg<<24>>24)a[r]=25,ha=Ec,ja=Pd,ka=$,W=Qd,na=H,ra=ig,pa=jg,la=I,B=265;else if(0!=(fh&32|0))a[L]=-1,a[r]=11,ha=Ec,ja=Pd,ka=$,W=Qd,na=H,ra=ig,pa=jg,la=I,B=265;else if(0==(fh&64|0)){var ni=fh&15;a[j]=ni;a[r]=21;Vc=Ec;Yc=Pd;kd=Qd;ld=ig;md=jg;Zc=ni;B=224}else a[q]=s.__str255|0,a[r]=29,ha=Ec,ja=Pd,ka=$,W=Qd,na=H,ra=ig,pa=jg,la=I,B=265}while(0);do if(80==B){var Ij=0==(Db&2048|0);do if(Ij){var oi=a[v];if(0==(oi|0))var gh=Fb,hh=Nb;else a[(oi+28|0)>>2]=0,gh=Fb,hh=Nb}else{if(0== +(Nb|0)){T=P;Y=Fb;U=0;ca=ob;ea=ac;S=I;break b}for(var ih=0;;){var Pe=ih+1|0,pi=l[Fb+ih|0],jh=a[v];if(0!=(jh|0)){var qi=jh+28|0;if(0!=(a[qi>>2]|0)){var kh=k[n];kh>>>0>=k[jh+32>>2]>>>0||(a[n]=kh+1|0,l[a[qi>>2]+kh|0]=pi)}}var ri=0!=pi<<24>>24;if(!(ri&Pe>>>0>>0))break;ih=Pe}if(0!=(a[t]&512|0)){var Jj=oa(a[w],Fb,Pe);a[w]=Jj}var si=Nb-Pe|0,ti=Fb+Pe|0;if(ri){T=P;Y=ti;U=si;ca=ob;ea=ac;S=I;break b}gh=ti;hh=si}while(0);a[n]=0;a[r]=7;Ib=gh;Wb=hh;Bc=ob;sb=ac;B=93}else if(224==B){if(0==(Zc|0))var ui=Yc,vi= +kd,wi=ld,xi=md,yi=a[n];else{for(var Qe=Yc,kg=kd,Re=ld,Sd=md;!(Sd>>>0>=Zc>>>0);){if(0==(kg|0)){T=Vc;Y=Qe;U=0;ca=Re;ea=Sd;S=I;break b}var Kj=((y[Qe]&255)<>>(Zc>>>0);xi=Sd-Zc|0;yi=zi}a[Aa>>2]=yi;a[r]=22;xe=Vc;$d=ui;ae=vi;be=wi;ce=xi;B=231}while(0);do if(93==B){var Lj=0==(a[t]&4096|0);do if(Lj){var Ai=a[v];if(0==(Ai|0))var lh=Ib,mh=Wb;else a[(Ai+36|0)>>2]=0,lh=Ib,mh=Wb}else{if(0==(Wb|0)){T= +P;Y=Ib;U=0;ca=Bc;ea=sb;S=I;break b}for(var nh=0;;){var Se=nh+1|0,Bi=l[Ib+nh|0],oh=a[v];if(0!=(oh|0)){var Ci=oh+36|0;if(0!=(a[Ci>>2]|0)){var ph=k[n];ph>>>0>=k[oh+40>>2]>>>0||(a[n]=ph+1|0,l[a[Ci>>2]+ph|0]=Bi)}}var Di=0!=Bi<<24>>24;if(!(Di&Se>>>0>>0))break;nh=Se}if(0!=(a[t]&512|0)){var Mj=oa(a[w],Ib,Se);a[w]=Mj}var Ei=Wb-Se|0,Fi=Ib+Se|0;if(Di){T=P;Y=Fi;U=Ei;ca=Bc;ea=sb;S=I;break b}lh=Fi;mh=Ei}while(0);a[r]=8;bc=lh;Hb=mh;nc=Bc;Eb=sb;B=106}else if(231==B){for(var Nj=(1<>2])-1|0,Td=k[lb>>2],Ud= +$d,Te=ae,Vd=be,hd=ce;;){var qh=Nj&Vd,Gi=y[(qh<<2)+Td+1|0],id=Gi&255;if(id>>>0<=hd>>>0)break;if(0==(Te|0)){T=xe;Y=Ud;U=0;ca=Vd;ea=hd;S=I;break b}var Oj=((y[Ud]&255)<>1],Ji=Hi&255;if(0==(Ji&240|0)){for(var Pj=Ii&65535,Qj=(1<>>(id>>>0))+Pj|0,Ki=y[(rh<<2)+Td+1|0];if(((Ki&255)+id|0)>>>0<=Wd>>>0)break;if(0==(lg|0)){T=xe;Y=Ue;U=0;ca=Ve;ea=Wd;S=I;break b}var Rj=((y[Ue]& +255)<>1],Tj=l[(rh<<2)+Td|0],Uj=Ve>>>(id>>>0),Vj=Wd-id|0,Li=a[L]+id|0;a[L]=Li;var sh=Ue,th=lg,Mi=Uj,Ni=Vj,Oi=Tj,Pi=Ki,Qi=Sj,Ri=Li}else sh=Ud,th=Te,Mi=Vd,Ni=hd,Oi=Hi,Pi=Gi,Qi=Ii,Ri=a[L];var uh=Pi&255,Si=Mi>>>(uh>>>0),Ti=Ni-uh|0;a[L]=Ri+uh|0;var Ui=Oi&255;if(0==(Ui&64|0)){a[m]=Qi&65535;var Vi=Ui&15;a[j]=Vi;a[r]=23;od=xe;qd=sh;td=th;wd=Si;xd=Ti;$c=Vi;B=245}else a[q]=s.__str154|0,a[r]=29,ha=xe,ja=sh,ka=$,W=th,na=H,ra=Si,pa=Ti,la=I,B=265}while(0); +c:do if(106==B){var Wi=k[t],Wj=0==(Wi&512|0);do{if(!Wj){for(var Xd=bc,We=Hb,Xe=nc,Yd=Eb;!(16<=Yd>>>0);){if(0==(We|0)){T=P;Y=Xd;U=0;ca=Xe;ea=Yd;S=I;break b}var Xj=((y[Xd]&255)<>2]=Wi>>>9&1,a[(a[v]+48|0)>>2]=1);var bj=oa(0,0,0);a[w]=bj;a[x]=bj;a[r]= +11;ha=P;ja=Xi;ka=$;W=Yi;na=H;ra=Zi;pa=$i;la=I;B=265}else if(245==B){if(0==($c|0))var cj=qd,dj=td,ej=wd,fj=xd;else{for(var Ye=qd,mg=td,Ze=wd,Zd=xd;!(Zd>>>0>=$c>>>0);){if(0==(mg|0)){T=od;Y=Ye;U=0;ca=Ze;ea=Zd;S=I;break b}var Yj=((y[Ye]&255)<>>($c>>>0);fj=Zd-$c|0}a[r]=24;Cf=od;Df=cj;Ef=dj;Ff=ej;Gf=fj;B=251}while(0);c:do if(251==B){if(0==(H|0)){T=Cf;Y=Df;U=Ef;ca=Ff;ea=Gf;S=I;break b}var gj=I-H|0,vh= +k[m],Zj=vh>>>0>gj>>>0;do if(Zj){var $e=vh-gj|0,$j=$e>>>0>k[Xa>>2]>>>0;do if($j&&0!=(a[Ia>>2]|0)){a[q]=s.__str53|0;a[r]=29;ha=Cf;ja=Df;ka=$;W=Ef;na=H;ra=Ff;pa=Gf;la=I;break c}while(0);var wh=k[Da>>2];if($e>>>0>wh>>>0)var hj=$e-wh|0,xh=a[Ya>>2]+(a[Sa>>2]-hj)|0,yh=hj;else xh=a[Ya>>2]+(wh-$e)|0,yh=$e;var zh=k[n];if(yh>>>0<=zh>>>0)var Ah=xh,af=yh,Bh=zh;else Ah=xh,Bh=af=zh}else var ak=a[n],Ah=$+-vh|0,Bh=af=ak;while(0);var Ch=af>>>0>H>>>0?H:af;a[n]=Bh-Ch|0;for(var ij=af^-1,jj=H^-1,bk=ij>>>0>jj>>>0?ij:jj, +Dh=Ah,Eh=$,kj=Ch;;){l[Eh]=l[Dh];var lj=kj-1|0;if(0==(lj|0))break;Dh=Dh+1|0;Eh=Eh+1|0;kj=lj}var ck=H-Ch|0,dk=$+(bk^-1)|0;0==(a[n]|0)&&(a[r]=20);ha=Cf;ja=Df;ka=dk;W=Ef;na=ck;ra=Ff;pa=Gf;la=I}while(0);P=ha;aa=ja;$=ka;qa=W;H=na;ba=ra;V=pa;I=la;sa=a[r]}a[F]=$;a[z]=H;a[J]=Y;a[ga]=U;a[u]=ca;a[da]=ea;B=0==(a[Sa>>2]|0)?26<=k[r]>>>0?297:(S|0)==(a[z]|0)?297:295:295;do if(295==B&&0!=(mj(c,S)|0)){a[r]=30;D=-4;break a}while(0);var nj=k[ga],oj=k[z],bf=S-oj|0,pj=c+8|0;a[pj>>2]=db-nj+a[pj>>2]|0;a[o]=a[o]+bf|0;a[i]= +a[i]+bf|0;var qj=(S|0)==(oj|0);if(!(0==(a[O]|0)|qj)){var rj=a[w],sj=a[F]+-bf|0,tj=0==(a[t]|0)?kc(rj,sj,bf):oa(rj,sj,bf);a[w]=tj;a[x]=tj}var Fh=a[r];a[c+44>>2]=(0!=(a[A]|0)?64:0)+a[da]+(11==(Fh|0)?128:0)+(19==(Fh|0)?256:14==(Fh|0)?256:0)|0;D=(db|0)==(nj|0)&qj&0==(T|0)?-5:T}}}}while(0);ma=E;return D}function Vc(c){for(var e=0;!(h[c+(e<<2)+148>>1]=0,e=e+1|0,286==(e|0)););h[c+2440>>1]=0;h[c+2444>>1]=0;h[c+2448>>1]=0;h[c+2452>>1]=0;h[c+2456>>1]=0;h[c+2460>>1]=0;h[c+2464>>1]=0;h[c+2468>>1]=0;h[c+2472>> +1]=0;h[c+2476>>1]=0;h[c+2480>>1]=0;h[c+2484>>1]=0;h[c+2488>>1]=0;h[c+2492>>1]=0;h[c+2496>>1]=0;h[c+2500>>1]=0;h[c+2504>>1]=0;h[c+2508>>1]=0;h[c+2512>>1]=0;h[c+2516>>1]=0;h[c+2520>>1]=0;h[c+2524>>1]=0;h[c+2528>>1]=0;h[c+2532>>1]=0;h[c+2536>>1]=0;h[c+2540>>1]=0;h[c+2544>>1]=0;h[c+2548>>1]=0;h[c+2552>>1]=0;h[c+2556>>1]=0;h[c+2684>>1]=0;h[c+2688>>1]=0;h[c+2692>>1]=0;h[c+2696>>1]=0;h[c+2700>>1]=0;h[c+2704>>1]=0;h[c+2708>>1]=0;h[c+2712>>1]=0;h[c+2716>>1]=0;h[c+2720>>1]=0;h[c+2724>>1]=0;h[c+2728>>1]=0;h[c+ +2732>>1]=0;h[c+2736>>1]=0;h[c+2740>>1]=0;h[c+2744>>1]=0;h[c+2748>>1]=0;h[c+2752>>1]=0;h[c+2756>>1]=0;h[c+1172>>1]=1;a[c+5804>>2]=0;a[c+5800>>2]=0;a[c+5808>>2]=0;a[c+5792>>2]=0}function cf(c){var e,d,b;b=(c+5820|0)>>2;e=k[b];if(16==(e|0)){d=(c+5816|0)>>1;var f=h[d]&255;e=(c+20|0)>>2;var g=a[e];a[e]=g+1|0;c=c+8|0;l[a[c>>2]+g|0]=f;f=(p[d]&65535)>>>8&255;g=k[e];a[e]=g+1|0;l[a[c>>2]+g|0]=f;h[d]=0;a[b]=0}else 7>=(e|0)||(e=(c+5816|0)>>1,d=h[e]&255,f=c+20|0,g=a[f>>2],a[f>>2]=g+1|0,l[a[c+8>>2]+g|0]=d,h[e]= +(p[e]&65535)>>>8,a[b]=a[b]-8|0)}function mj(c,e){var d,b,f,g=c>>2,i,o=k[g+7];f=o>>2;var m=o+52|0;i=a[m>>2];if(0==(i|0))if(i=va[a[g+8]](a[g+10],1<>2]=i,0==(i|0))b=1,i=12;else{var h=i;i=2}else h=i,i=2;do if(2==i){b=(o+40|0)>>2;d=a[b];if(0==(d|0)){d=1<>>0>>0){d=(o+48|0)>>2;var A=k[d],j=j-A|0,j=j>>>0>l>>>0?l:j,n=c+12|0;Qb(h+A|0,a[n>>2]+-l|0,j,1);A=l-j|0;if((l|0)==(j|0)){l=a[d]+j|0;a[d]=l;b=k[b];(l|0)==(b|0)&&(a[d]= +0);d=o+44|0;l=k[d>>2];if(l>>>0>=b>>>0){b=0;break}a[d>>2]=l+j|0}else Qb(a[m>>2],a[n>>2]+-A|0,A,1),a[d]=A,a[f+11]=a[b]}else Qb(h,a[g+3]+-j|0,j,1),a[f+12]=0,a[f+11]=a[b];b=0}while(0);return b}function Rc(c){var e;if(0!=(c|0)){e=(c+28|0)>>2;var d=a[e];if(0!=(d|0)){var b=c+36|0,f=a[b>>2];if(0!=(f|0)){var g=a[d+52>>2],c=c+40|0;0==(g|0)?b=f:(va[f](a[c>>2],g),b=a[b>>2],d=a[e]);va[b](a[c>>2],d);a[e]=0}}}}function re(c,e,d,b){var f,g;g=(c+5820|0)>>2;f=k[g];var i=b&65535,b=(c+5816|0)>>1,o=p[b]&65535|i<>2;var m=a[f];a[f]=m+1|0;var j=c+8|0;l[a[j>>2]+m|0]=o&255;o=(p[b]&65535)>>>8&255;m=k[f];a[f]=m+1|0;l[a[j>>2]+m|0]=o;f=k[g];h[b]=i>>>((16-f|0)>>>0)&65535;b=f-13|0}else b=f+3|0;a[g]=b;ng(c,e,d)}function ng(c,e,d){var b;og(c);a[c+5812>>2]=8;b=(c+20|0)>>2;var f=a[b];a[b]=f+1|0;c=(c+8|0)>>2;l[a[c]+f|0]=d&255;f=k[b];a[b]=f+1|0;l[a[c]+f|0]=d>>>8&255;var f=d&65535^65535,g=a[b];a[b]=g+1|0;l[a[c]+g|0]=f&255;g=k[b];a[b]=g+1|0;l[a[c]+g|0]=f>>>8&255;f=0==(d|0);a:do if(!f)for(var g= +e,i=d;;){var i=i-1|0,o=l[g],m=a[b];a[b]=m+1|0;l[a[c]+m|0]=o;if(0==(i|0))break a;g=g+1|0}while(0)}function yf(c){var e,d,b,f;f=(c+5820|0)>>2;var g=k[f];b=(c+5816|0)>>1;e=p[b]&65535|2<>2;var i=a[d];a[d]=i+1|0;g=c+8|0;l[a[g>>2]+i|0]=e&255;e=(p[b]&65535)>>>8&255;i=k[d];a[d]=i+1|0;l[a[g>>2]+i|0]=e;e=k[f];d=2>>>((16-e|0)>>>0)&65535;h[b]=d;e=e-13|0}else e=g+3|0;g=d;a[f]=e;9<(e|0)?(d=(c+20|0)>>2,i=a[d],a[d]=i+1|0,e=c+8|0,l[a[e>>2]+i|0]=g&255,g=(p[b]&65535)>>>8& +255,i=k[d],a[d]=i+1|0,l[a[e>>2]+i|0]=g,h[b]=0,d=a[f]-9|0):d=e+7|0;a[f]=d;cf(c);d=c+5812|0;i=k[f];if(9>(a[d>>2]+11-i|0)){g=p[b]&65535|2<>2;var o=a[e];a[e]=o+1|0;i=c+8|0;l[a[i>>2]+o|0]=g&255;g=(p[b]&65535)>>>8&255;o=k[e];a[e]=o+1|0;l[a[i>>2]+o|0]=g;g=k[f];e=2>>>((16-g|0)>>>0)&65535;h[b]=e;g=g-13|0}else g=i+3|0;i=e;a[f]=g;9<(g|0)?(e=(c+20|0)>>2,o=a[e],a[e]=o+1|0,g=c+8|0,l[a[g>>2]+o|0]=i&255,i=(p[b]&65535)>>>8&255,o=k[e],a[e]=o+1|0,l[a[g>>2]+o|0]=i,h[b]=0,b= +a[f]-9|0):b=g+7|0;a[f]=b;cf(c)}a[d>>2]=7}function xa(c,e,d,b){var f,g;g=c>>2;var i=0<(a[g+33]|0);do if(i){var o=a[g]+44|0;if(2==(a[o>>2]|0)){for(var m=c>>1,j=void 0,R=0,L=-201342849;;){if(32<=(R|0)){j=5;break}if(0!=(L&1|0)&&0!=h[((R<<2)+148>>1)+m]<<16>>16){f=0;j=11;break}R=R+1|0;L>>>=1}a:do if(5==j)if(0!=h[m+92]<<16>>16)f=1;else if(0!=h[m+94]<<16>>16)f=1;else if(0!=h[m+100]<<16>>16)f=1;else for(R=32;;){if(256<=(R|0)){f=0;break a}if(0!=h[((R<<2)+148>>1)+m]<<16>>16){f=1;break a}R=R+1|0}while(0);a[o>> +2]=f}jd(c,c+2840|0);jd(c,c+2852|0);m=c;kd(m,m+148|0,a[m+2844>>2]);kd(m,m+2440|0,a[m+2856>>2]);jd(m,m+2864|0);for(o=18;!(2>=(o|0));){if(0!=h[m+((y[s._bl_order+o|0]&255)<<2)+2686>>1]<<16>>16)break;o=o-1|0}m=m+5800|0;a[m>>2]=3*o+a[m>>2]+17|0;j=(a[g+1450]+10|0)>>>3;R=(a[g+1451]+10|0)>>>3;R>>>0>j>>>0?(m=R,R=j):m=R}else j=d+5|0,o=0,R=m=j;while(0);(d+4|0)>>>0>R>>>0|0==(e|0)?(e=(c+5820|0)>>2,f=k[e],j=13<(f|0),4==(a[g+34]|0)|(m|0)==(R|0)?(o=b+2&65535,g=(c+5816|0)>>1,i=p[g]&65535|o<>2,m=a[d],a[d]=m+1|0,f=c+8|0,l[a[f>>2]+m|0]=i&255,i=(p[g]&65535)>>>8&255,m=k[d],a[d]=m+1|0,l[a[f>>2]+m|0]=i,d=k[e],h[g]=o>>>((16-d|0)>>>0)&65535,g=d-13|0):g=f+3|0,a[e]=g,ld(c,md|0,$d|0)):(i=b+4&65535,d=(c+5816|0)>>1,m=p[d]&65535|i<>2,R=a[f],a[f]=R+1|0,j=c+8|0,l[a[j>>2]+R|0]=m&255,m=(p[d]&65535)>>>8&255,R=k[f],a[f]=R+1|0,l[a[j>>2]+R|0]=m,f=k[e],h[d]=i>>>((16-f|0)>>>0)&65535,d=f-13|0):d=f+3|0,a[e]=d,pg(c,a[g+711]+1|0,a[g+714]+1|0,o+1|0),ld(c,c+148|0,c+2440|0))):re(c, +e,d,b);Vc(c);0!=(b|0)&&og(c)}function ld(c,e,d){var b,f,g,i,o,m,j=e>>1,R=c+5792|0,L=0==(a[R>>2]|0);a:do if(L)var A=a[c+5820>>2],n=h[c+5816>>1];else{var x=c+5796|0,q=c+5784|0;m=(c+5820|0)>>2;o=(c+5816|0)>>1;i=(c+20|0)>>2;g=(c+8|0)>>2;for(var v=0;;){var t=p[a[x>>2]+(v<<1)>>1],w=t&65535,O=v+1|0,u=y[a[q>>2]+v|0]&255;if(0==t<<16>>16){var D=p[((u<<2)+2>>1)+j]&65535,ga=k[m],z=(ga|0)>(16-D|0),r=p[(u<<2>>1)+j]&65535,J=p[o]&65535|r<>>8&255,Q=k[i];a[i]=Q+1|0;l[a[g]+Q|0]=C;var K=k[m],X=r>>>((16-K|0)>>>0)&65535;h[o]=X;var G=D-16+K|0,M=a[m]=G,Z=X}else var Ma=ga+D|0,M=a[m]=Ma,Z=F}else{var N=y[s.__length_code+u|0]&255,ma=(N|256)+1|0,cb=p[((ma<<2)+2>>1)+j]&65535,db=k[m],ya=(db|0)>(16-cb|0),fa=p[(ma<<2>>1)+j]&65535,ta=p[o]&65535|fa<>>8&255,Aa=k[i];a[i]=Aa+1|0;l[a[g]+Aa|0]=tb;var Xa=k[m],Ia=fa>>>((16-Xa|0)>>>0)&65535;h[o]= +Ia;var Da=cb-16+Xa|0,Ya=Ia}else Da=db+cb|0,Ya=lc;a[m]=Da;var Sa=k[ae+(N<<2)>>2];if(20>(N-8|0)>>>0){var wa=(Da|0)>(16-Sa|0),Ta=u-a[qg+(N<<2)>>2]&65535,jb=Ta<>>8&255,Ba=k[i];a[i]=Ba+1|0;l[a[g]+Ba|0]=mc;var Oa=k[m],Za=Ta>>>((16-Oa|0)>>>0)&65535;h[o]=Za;var $a=Sa-16+Oa|0,kb=a[m]=$a,fb=Za}else var pb=Da+Sa|0,kb=a[m]=pb,fb=eb}else kb=Da,fb=Ya;var lb=w-1|0,P=y[s.__dist_code+(256>lb>>>0?lb:(lb>>> +7)+256|0)|0]&255,aa=p[d+(P<<2)+2>>1]&65535,$=(kb|0)>(16-aa|0),qa=p[d+(P<<2)>>1]&65535,H=fb&65535|qa<>>8&255,ub=k[i];a[i]=ub+1|0;l[a[g]+ub|0]=sa;var ha=k[m],ja=qa>>>((16-ha|0)>>>0)&65535;h[o]=ja;var ka=aa-16+ha|0,W=ja}else ka=kb+aa|0,W=ba;a[m]=ka;var na=k[be+(P<<2)>>2];if(26<=(P-4|0)>>>0)M=ka,Z=W;else{var ra=(ka|0)>(16-na|0),pa=lb-a[df+(P<<2)>>2]&65535,la=pa<>>8&255,T=k[i];a[i]=T+1|0;l[a[g]+T|0]=ab;var Y=k[m],U=pa>>>((16-Y|0)>>>0)&65535;h[o]=U;var ca=na-16+Y|0,M=a[m]=ca,Z=U}else var ea=ka+na|0,M=a[m]=ea,Z=ua}}if(O>>>0>=k[R>>2]>>>0){A=M;n=Z;break a}v=O}}while(0);var S=e+1026|0,Ea=p[S>>1]&65535,gb=c+5820|0,vb=(A|0)>(16-Ea|0),Wa=p[j+512]&65535;f=(c+5816|0)>>1;var Ga=n&65535|Wa<>2;var va=a[b];a[b]=va+1|0;var oa=c+8|0;l[a[oa>>2]+va|0]=hb;var mb=(p[f]& +65535)>>>8&255,wb=k[b];a[b]=wb+1|0;l[a[oa>>2]+wb|0]=mb;var qb=k[gb>>2];h[f]=Wa>>>((16-qb|0)>>>0)&65535;var yb=Ea-16+qb|0}else yb=A+Ea|0;a[gb>>2]=yb;a[c+5812>>2]=p[S>>1]&65535}function og(c){var e,d=c+5820|0,b=k[d>>2];if(8<(b|0)){var b=c+5816|0,f=h[b>>1]&255;e=(c+20|0)>>2;var g=a[e];a[e]=g+1|0;c=c+8|0;l[a[c>>2]+g|0]=f;f=(p[b>>1]&65535)>>>8&255;g=k[e];a[e]=g+1|0;l[a[c>>2]+g|0]=f;c=b}else e=c+5816|0,0>=(b|0)||(b=h[e>>1]&255,f=c+20|0,g=a[f>>2],a[f>>2]=g+1|0,l[a[c+8>>2]+g|0]=b),c=e;h[c>>1]=0;a[d>>2]=0} +function jd(c,e){var d,b,f,g,i,o,m=e|0,j=k[m>>2];i=j>>1;var R=e+8|0;f=a[R>>2];var L=a[f>>2],A=k[f+12>>2];g=(c+5200|0)>>2;a[g]=0;f=(c+5204|0)>>2;a[f]=573;b=0<(A|0);do if(b){o=0;for(var n=-1;;){if(0==h[(o<<2>>1)+i]<<16>>16){h[((o<<2)+2>>1)+i]=0;var x=n}else x=a[g]+1|0,a[g]=x,a[((x<<2)+c+2908|0)>>2]=o,l[c+(o+5208)|0]=0,x=o;o=o+1|0;if((o|0)==(A|0))break;n=x}o=a[g];if(2>(o|0)){d=o;var q=x;o=2}else{var v=x;o=9}}else d=0,q=-1,o=2;while(0);a:do if(2==o)if(b=(c+5800|0)>>2,x=c+5804|0,0==(L|0)){x=q;for(n=d;;){var t= +2>(x|0),w=x+1|0,x=t?w:x,t=t?w:0,n=n+1|0;a[g]=n;a[c+(n<<2)+2908>>2]=t;h[(t<<2>>1)+i]=1;l[c+(t+5208)|0]=0;a[b]=a[b]-1|0;n=a[g];if(2<=(n|0)){v=x;break a}}}else{n=q;for(t=d;;){var w=2>(n|0),O=n+1|0,n=w?O:n,w=w?O:0,t=t+1|0;a[g]=t;a[c+(t<<2)+2908>>2]=w;h[(w<<2>>1)+i]=1;l[c+(w+5208)|0]=0;a[b]=a[b]-1|0;a[x>>2]=a[x>>2]-(p[L+(w<<2)+2>>1]&65535)|0;t=k[g];if(2<=(t|0)){v=n;break a}}}while(0);L=e+4|0;a[L>>2]=v;d=a[g];if(1<(d|0)){for(d=d/2|0;!(nd(c,j,d),d=d-1|0,0>=(d|0)););q=a[g]}else q=d;d=(c+2912|0)>>2;for(o= +q;;){q=k[d];a[g]=o-1|0;a[d]=a[c+(o<<2)+2908>>2];nd(c,j,1);o=k[d];b=a[f]-1|0;a[f]=b;a[((b<<2)+c+2908|0)>>2]=q;b=a[f]-1|0;a[f]=b;a[((b<<2)+c+2908|0)>>2]=o;h[(A<<2>>1)+i]=h[(o<<2>>1)+i]+h[(q<<2>>1)+i]&65535;b=y[c+(q+5208)|0];x=y[c+(o+5208)|0];l[c+(A+5208)|0]=((b&255)<(x&255)?x:b)+1&255;b=A&65535;h[((o<<2)+2>>1)+i]=b;h[((q<<2)+2>>1)+i]=b;q=A+1|0;a[d]=A;nd(c,j,1);o=k[g];if(1>=(o|0))break;A=q}i=a[d];g=a[f]-1|0;a[f]=g;a[((g<<2)+c+2908|0)>>2]=i;ef(c,a[m>>2],a[L>>2],a[R>>2]);rg(j,v,c+2876|0)}function pg(c, +e,d,b){var f,g,i;i=(c+5820|0)>>2;f=k[i];var o=e+65279&65535;g=(c+5816|0)>>1;var m=p[g]&65535|o<>2;var R=a[f];a[f]=R+1|0;j=c+8|0;l[a[j>>2]+R|0]=m&255;m=(p[g]&65535)>>>8&255;R=k[f];a[f]=R+1|0;l[a[j>>2]+R|0]=m;f=k[i];o=o>>>((16-f|0)>>>0)&65535;h[g]=o;f=f-11|0;m=o}else f=f+5|0,m=j;a[i]=f;d=d-1|0;o=d&65535;m=m&65535|o<>2,R=a[f],a[f]=R+1|0,j=c+8|0,l[a[j>>2]+R|0]=m&255,m=(p[g]&65535)>>>8&255,R=k[f],a[f]=R+1|0,l[a[j>>2]+ +R|0]=m,f=k[i],o=o>>>((16-f|0)>>>0)&65535,h[g]=o,f=f-11|0,m=o):(f=f+5|0,m=j);a[i]=f;o=b+65532&65535;m=m&65535|o<>2,R=a[f],a[f]=R+1|0,j=c+8|0,l[a[j>>2]+R|0]=m&255,m=(p[g]&65535)>>>8&255,R=k[f],a[f]=R+1|0,l[a[j>>2]+R|0]=m,f=k[i],m=o>>>((16-f|0)>>>0)&65535,h[g]=m,o=f-12|0):(o=f+4|0,m=j);a[i]=o;j=0<(b|0);a:do if(j){f=(c+20|0)>>2;for(var R=c+8|0,L=0,A=o,n=m;;){var x=p[c+((y[s._bl_order+L|0]&255)<<2)+2686>>1]&65535,q=n&65535|x<>2]+n|0]=A,A=(p[g]&65535)>>>8&255,n=k[f],a[f]=n+1|0,l[a[R>>2]+n|0]=A,A=k[i],n=x>>>((16-A|0)>>>0)&65535,h[g]=n,x=A-13|0):x=A+3|0;a[i]=x;L=L+1|0;if((L|0)==(b|0))break a;A=x}}while(0);ce(c,c+148|0,e-1|0);ce(c,c+2440|0,d)}function ce(c,e,d){var b,f,g,i,o=p[e+2>>1],m=0==o<<16>>16,j=m?138:7,R=m?3:4,L=c+2754|0;i=(c+5820|0)>>2;var A=c+2752|0;g=(c+5816|0)>>1;f=(c+20|0)>>2;b=(c+8|0)>>2;var n=c+2758|0,x=c+2756|0,q=c+2750|0,v=c+2748|0,t=R,w=j,O=0,u=-1,y=o&65535;a:for(;;){for(var s=0,z= +O,r=y;;){if((z|0)>(d|0))break a;var D=z+1|0,F=p[e+(D<<2)+2>>1],E=F&65535,B=s+1|0,C=(r|0)==(E|0);if(!((B|0)<(w|0)&C))break;s=B;z=D;r=E}var Q=(B|0)<(t|0);b:do if(Q)for(var K=(r<<2)+c+2686|0,X=(r<<2)+c+2684|0,G=B,M=a[i],Z=h[g];;){var Ma=p[K>>1]&65535,N=(M|0)>(16-Ma|0),ma=p[X>>1]&65535,cb=Z&65535|ma<>>8&255,lc=k[f];a[f]=lc+1|0;l[a[b]+lc|0]=ta;var va=k[i],Na=ma>>>((16-va|0)>>>0)&65535;h[g]=Na;var tb=Ma-16+ +va|0,Aa=Na}else tb=M+Ma|0,Aa=db;a[i]=tb;var Xa=G-1|0;if(0==(Xa|0))break b;G=Xa;M=tb;Z=Aa}else if(0==(r|0))if(11>(B|0)){var Ia=p[L>>1]&65535,Da=k[i],Ya=(Da|0)>(16-Ia|0),Sa=p[A>>1]&65535,oa=p[g]&65535|Sa<>>8&255,Ua=k[f];a[f]=Ua+1|0;l[a[b]+Ua|0]=xa;var wa=k[i],Ba=Sa>>>((16-wa|0)>>>0)&65535;h[g]=Ba;var Oa=Ia-16+wa|0,Za=Ba}else Oa=Da+Ia|0,Za=Ta;a[i]=Oa;var $a=s+65534&65535,kb=Za&65535|$a<>>8&255,lb=k[f];a[f]=lb+1|0;l[a[b]+lb|0]=pb;var P=k[i];h[g]=$a>>>((16-P|0)>>>0)&65535;a[i]=P-13|0}else a[i]=Oa+3|0}else{var aa=p[n>>1]&65535,$=k[i],qa=($|0)>(16-aa|0),H=p[x>>1]&65535,ba=p[g]&65535|H<<$,V=ba&65535;h[g]=V;if(qa){var I=ba&255,sa=a[f];a[f]=sa+1|0;l[a[b]+sa|0]=I;var ub=(p[g]&65535)>>>8&255,ha=k[f];a[f]=ha+1|0;l[a[b]+ha|0]=ub;var ja=k[i],ka=H>>>((16-ja|0)>>>0)&65535;h[g]=ka;var W=aa-16+ja|0,na=ka}else W=$+aa| +0,na=V;a[i]=W;var ra=s+65526&65535,pa=na&65535|ra<>>8&255,Va=k[f];a[f]=Va+1|0;l[a[b]+Va|0]=ua;var Fa=k[i];h[g]=ra>>>((16-Fa|0)>>>0)&65535;a[i]=Fa-9|0}else a[i]=W+7|0}else{if((r|0)==(u|0))var ab=B,T=a[i],Y=h[g];else{var U=p[c+(r<<2)+2686>>1]&65535,ca=k[i],ea=(ca|0)>(16-U|0),S=p[c+(r<<2)+2684>>1]&65535,Ea=p[g]&65535|S<>>8&255,hb=k[f];a[f]=hb+1|0;l[a[b]+hb|0]=Ga;var Ha=k[i],Wc=S>>>((16-Ha|0)>>>0)&65535;h[g]=Wc;var mb=U-16+Ha|0,wb=Wc}else mb=ca+U|0,wb=gb;a[i]=mb;ab=s;T=mb;Y=wb}var qb=p[q>>1]&65535,yb=(T|0)>(16-qb|0),ib=p[v>>1]&65535,Pa=Y&65535|ib<>>8&255,nb=k[f];a[f]=nb+1|0;l[a[b]+nb|0]=Ca;var Bb=k[i],xb=ib>>>((16-Bb|0)>>>0)&65535;h[g]=xb;var bb=qb-16+Bb|0,zb=xb}else bb=T+qb|0,zb=Ja;a[i]=bb;var Cb=ab+65533& +65535,za=zb&65535|Cb<>>8&255,Ra=k[f];a[f]=Ra+1|0;l[a[b]+Ra|0]=Qa;var ob=k[i];h[g]=Cb>>>((16-ob|0)>>>0)&65535;a[i]=ob-14|0}else a[i]=bb+2|0}while(0);if(0==F<<16>>16)t=3,w=138;else var sb=C?6:7,t=C?3:4,w=sb;O=D;u=r;y=E}}function kd(a,e,d){var b=p[e+2>>1],f=0==b<<16>>16;h[e+(d+1<<2)+2>>1]=-1;var g=a+2752|0,i=a+2756|0,o=a+2748|0,m=f?3:4,f=f?138:7,k=0,j=-1,b=b&65535;a:for(;;){for(var l=0;;){if((k|0)>(d|0))break a; +var A=k+1|0,n=p[e+(A<<2)+2>>1],x=n&65535,q=l+1|0,v=(b|0)==(x|0);if(!((q|0)<(f|0)&v))break;l=q;k=A;b=x}(q|0)<(m|0)?(m=(b<<2)+a+2684|0,h[m>>1]=(p[m>>1]&65535)+q&65535):0==(b|0)?11>(q|0)?h[g>>1]=h[g>>1]+1&65535:h[i>>1]=h[i>>1]+1&65535:((b|0)!=(j|0)&&(m=(b<<2)+a+2684|0,h[m>>1]=h[m>>1]+1&65535),h[o>>1]=h[o>>1]+1&65535);0==n<<16>>16?(m=3,f=138):(f=v?6:7,m=v?3:4);k=A;j=b;b=x}}function nd(c,e,d){for(var b=c>>2,f=k[((d<<2)+2908>>2)+b],g=c+(f+5208)|0,i=c+5200|0,o=(f<<2)+e|0;;){var m=d<<1,j=a[i>>2];if((m|0)> +(j|0))break;j=(m|0)<(j|0);do if(j){var h=m|1,l=k[((h<<2)+2908>>2)+b],A=p[e+(l<<2)>>1],n=k[((m<<2)+2908>>2)+b],x=p[e+(n<<2)>>1];if((A&65535)>=(x&65535)){if(A<<16>>16!=x<<16>>16){h=m;break}if((y[c+(l+5208)|0]&255)>(y[c+(n+5208)|0]&255)){h=m;break}}}else h=m;while(0);m=p[o>>1];j=k[((h<<2)+2908>>2)+b];l=p[e+(j<<2)>>1];if((m&65535)<(l&65535))break;if(m<<16>>16==l<<16>>16&&(y[g]&255)<=(y[c+(j+5208)|0]&255))break;a[((d<<2)+2908>>2)+b]=j;d=h}a[((d<<2)+2908>>2)+b]=f}function ef(c,e,d,b){var f,g=e>>1,i=k[b>> +2],o=k[b+4>>2],m=k[b+8>>2],b=k[b+16>>2];Sb(c+2876|0,0,32,2);f=c+5204|0;h[((a[c+(a[f>>2]<<2)+2908>>2]<<2)+2>>1)+g]=0;var j=a[f>>2]+1|0,l=573>(j|0);a:do if(l){f=(c+5800|0)>>2;var L=0==(i|0),A=c+5804|0;b:do if(L)for(var n=0,x=j;;){var q=k[c+(x<<2)+2908>>2],v=(q<<2)+e+2|0,t=(p[(((p[v>>1]&65535)<<2)+2>>1)+g]&65535)+1|0,w=(t|0)>(b|0),n=(w&1)+n|0,t=w?b:t;h[v>>1]=t&65535;(q|0)<=(d|0)&&(v=(t<<1)+c+2876|0,h[v>>1]=h[v>>1]+1&65535,a[f]=(p[(q<<2>>1)+g]&65535)*(((q|0)<(m|0)?0:a[o+(q-m<<2)>>2])+t)+a[f]|0);x=x+1| +0;if(573==(x|0)){var u=n;break b}}else{n=0;for(x=j;;)if(q=k[c+(x<<2)+2908>>2],v=(q<<2)+e+2|0,t=(p[(((p[v>>1]&65535)<<2)+2>>1)+g]&65535)+1|0,w=(t|0)>(b|0),n=(w&1)+n|0,t=w?b:t,h[v>>1]=t&65535,(q|0)<=(d|0)&&(v=(t<<1)+c+2876|0,h[v>>1]=h[v>>1]+1&65535,v=(q|0)<(m|0)?0:a[o+(q-m<<2)>>2],w=p[(q<<2>>1)+g]&65535,a[f]=w*(v+t)+a[f]|0,a[A>>2]=((p[i+(q<<2)+2>>1]&65535)+v)*w+a[A>>2]|0),x=x+1|0,573==(x|0)){u=n;break b}}while(0);if(0!=(u|0)){L=(b<<1)+c+2876|0;for(A=u;;){for(var y=b;;){var x=y-1|0,s=(x<<1)+c+2876|0, +D=h[s>>1];if(0!=D<<16>>16)break;y=x}h[s>>1]=D-1&65535;y=(y<<1)+c+2876|0;h[y>>1]=h[y>>1]+2&65535;y=h[L>>1]-1&65535;h[L>>1]=y;A=A-2|0;if(0>=(A|0))break}if(0!=(b|0)){q=573;L=b;for(x=y;;){A=L&65535;for(x&=65535;!(0==(x|0));){for(;;){var z=q-1|0,r=k[c+(z<<2)+2908>>2];if((r|0)<=(d|0))break;q=z}q=(r<<2)+e+2|0;n=p[q>>1]&65535;(n|0)!=(L|0)&&(a[f]=(p[(r<<2>>1)+g]&65535)*(L-n)+a[f]|0,h[q>>1]=A);x=x-1|0;q=z}L=L-1|0;if(0==(L|0))break a;x=A=h[c+(L<<1)+2876>>1]}}}}while(0)}function kc(a,e,d){var b,f=a>>>16,a=a& +65535,g=1==(d|0);do if(g){var i=(y[e]&255)+a|0,i=65520>>0?i-65521|0:i;b=i+f|0;i|=(65520>>0?b+15|0:b)<<16}else if(0==(e|0))i=1;else if(16>d>>>0){i=0==(d|0);a:do if(i)var o=f,m=a;else{var k=f,j=d;b=e;for(var h=a;;){j=j-1|0;h=(y[b]&255)+h|0;k=h+k|0;if(0==(j|0)){o=k;m=h;break a}b=b+1|0}}while(0);i=(o>>>0)%65521<<16|(65520>>0?m-65521|0:m)}else{i=5551>>0;do if(i){k=f;j=d;b=e;for(h=a;;){for(var l=j-5552|0,j=h,n=b,x=k,q=347;;){var v=(y[n]&255)+j|0,k=v+(y[n+1|0]&255)|0,j=k+(y[n+2|0]&255)|0,h=j+ +(y[n+3|0]&255)|0,t=h+(y[n+4|0]&255)|0,w=t+(y[n+5|0]&255)|0,p=w+(y[n+6|0]&255)|0,u=p+(y[n+7|0]&255)|0,s=u+(y[n+8|0]&255)|0,D=s+(y[n+9|0]&255)|0,z=D+(y[n+10|0]&255)|0,r=z+(y[n+11|0]&255)|0,E=r+(y[n+12|0]&255)|0,F=E+(y[n+13|0]&255)|0,C=F+(y[n+14|0]&255)|0,B=C+(y[n+15|0]&255)|0,v=v+x+k+j+h+t+w+p+u+s+D+z+r+E+F+C+B|0,q=q-1|0;if(0==(q|0))break;j=B;n=n+16|0;x=v}n=b+5552|0;x=(B>>>0)%65521;q=(v>>>0)%65521;if(5551>=l>>>0)break;k=q;j=l;b=n;h=x}if(0==(l|0)){var Q=x,X=q;b=17}else if(15>>0){var K=q,Z=l,G=n,M= +x;b=14}else{var ma=q,Ma=l,N=n,fa=x;b=15}}else K=f,Z=d,G=e,M=a,b=14;while(0);do if(14==b){for(;;){var cb=Z-16|0,db=(y[G]&255)+M|0,ya=db+(y[G+1|0]&255)|0,i=ya+(y[G+2|0]&255)|0;b=i+(y[G+3|0]&255)|0;var k=b+(y[G+4|0]&255)|0,j=k+(y[G+5|0]&255)|0,h=j+(y[G+6|0]&255)|0,t=h+(y[G+7|0]&255)|0,w=t+(y[G+8|0]&255)|0,p=w+(y[G+9|0]&255)|0,u=p+(y[G+10|0]&255)|0,s=u+(y[G+11|0]&255)|0,D=s+(y[G+12|0]&255)|0,z=D+(y[G+13|0]&255)|0,r=z+(y[G+14|0]&255)|0,ta=r+(y[G+15|0]&255)|0,db=db+K+ya+i+b+k+j+h+t+w+p+u+s+D+z+r+ta|0,ya= +G+16|0;if(15>=cb>>>0)break;K=db;Z=cb;G=ya;M=ta}if(0==(cb|0)){var va=db,oa=ta;b=16}else ma=db,Ma=cb,N=ya,fa=ta,b=15}while(0);a:do if(15==b)for(;;){i=Ma-1|0;k=(y[N]&255)+fa|0;j=k+ma|0;if(0==(i|0)){va=j;oa=k;b=16;break a}ma=j;Ma=i;N=N+1|0;fa=k}while(0);16==b&&(Q=(oa>>>0)%65521,X=(va>>>0)%65521);i=Q|X<<16}while(0);return i}function ff(c,e,d){for(var b,f,c=c^-1;;){if(0==(d|0)){var g=c;f=11;break}if(0==(e&3|0)){f=4;break}c=a[Q+((y[e]&255^c&255)<<2)>>2]^c>>>8;e=e+1|0;d=d-1|0}a:do if(4==f){var i=e,k=31>> +0;b:do if(k){var m=c,j=d,h=i;for(b=h>>2;;){m^=a[b];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+1];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+2];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+3];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<< +2)>>2]^a[b+4];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+5];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+6];h=h+32|0;b=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+7];b=a[Q+((b>>>8&255)<<2)+2048>>2]^a[Q+((b&255)<<2)+3072>>2]^a[Q+((b>>>16&255)<<2)+1024>>2]^a[Q+(b>>>24<<2)>>2];j=j-32|0;if(31>=j>>>0){var l= +b,A=j,n=h;break b}m=b;b=h>>2}}else l=c,A=d,n=i;while(0);i=3>>0;b:do if(i){b=l;j=A;for(h=n;;){k=h+4|0;b^=a[h>>2];b=a[Q+((b>>>8&255)<<2)+2048>>2]^a[Q+((b&255)<<2)+3072>>2]^a[Q+((b>>>16&255)<<2)+1024>>2]^a[Q+(b>>>24<<2)>>2];j=j-4|0;if(3>=j>>>0){var x=b,q=j,v=k;break b}h=k}}else x=l,q=A,v=n;while(0);if(0==(q|0))g=x;else{i=v;k=q;for(j=x;;){j=a[Q+((y[i]&255^j&255)<<2)>>2]^j>>>8;k=k-1|0;if(0==(k|0)){g=j;break a}i=i+1|0}}}while(0);return g^-1}function rg(a,e,d){var b,f=d>>1,d=ma;ma+=32;b=d>>1;var g=h[f]<< +1;h[b+1]=g;g=(h[f+1]+g&65535)<<1;h[b+2]=g;g=(h[f+2]+g&65535)<<1;h[b+3]=g;g=(h[f+3]+g&65535)<<1;h[b+4]=g;g=(h[f+4]+g&65535)<<1;h[b+5]=g;g=(h[f+5]+g&65535)<<1;h[b+6]=g;g=(h[f+6]+g&65535)<<1;h[b+7]=g;g=(h[f+7]+g&65535)<<1;h[b+8]=g;g=(h[f+8]+g&65535)<<1;h[b+9]=g;g=(h[f+9]+g&65535)<<1;h[b+10]=g;g=(h[f+10]+g&65535)<<1;h[b+11]=g;g=(h[f+11]+g&65535)<<1;h[b+12]=g;g=(h[f+12]+g&65535)<<1;h[b+13]=g;g=(h[f+13]+g&65535)<<1;h[b+14]=g;h[b+15]=(h[f+14]+g&65535)<<1;b=0>(e|0);a:do if(!b){f=e+1|0;for(g=0;;){var i=p[a+ +(g<<2)+2>>1],k=i&65535;if(0!=i<<16>>16){var i=(k<<1)+d|0,m=p[i>>1];h[i>>1]=m+1&65535;i=m&65535;for(m=0;;){var j=i&1|m,m=j<<1,k=k-1|0;if(0>=(k|0))break;i>>>=1}h[a+(g<<2)>>1]=j&65535}g=g+1|0;if((g|0)==(f|0))break a}}while(0);ma=d}function oa(a,e,d){return 0==(e|0)?0:ff(a,e,d)}function Nf(c,e,d,b,f,g){var i,j,m=b>>2,ia=ma;ma+=32;var u;j=ia>>1;var y=ma;i=y>>1;ma+=32;Sb(ia,0,32,2);var A=0==(d|0);a:do if(!A)for(var n=0;;){var x=((p[e+(n<<1)>>1]&65535)<<1)+ia|0;h[x>>1]=h[x>>1]+1&65535;var q=n+1|0;if((q| +0)==(d|0))break a;n=q}while(0);for(var v=k[f>>2],t=15;;){if(0==(t|0)){var w=k[m];a[m]=w+4|0;l[w|0]=64;l[w+1|0]=1;h[w+2>>1]=0;var s=a[m];a[m]=s+4|0;l[s|0]=64;l[s+1|0]=1;h[s+2>>1]=0;a[f>>2]=1;var D=0;u=57;break}if(0!=h[(t<<1>>1)+j]<<16>>16){u=6;break}t=t-1|0}a:do if(6==u){for(var E=v>>>0>t>>>0?t:v,C=1;!(C>>>0>=t>>>0);){if(0!=h[(C<<1>>1)+j]<<16>>16)break;C=C+1|0}for(var z=E>>>0>>0?C:E,r=1,J=1;!(16<=r>>>0);){var F=(J<<1)-(p[(r<<1>>1)+j]&65535)|0;if(0>(F|0)){D=-1;break a}r=r+1|0;J=F}if(0<(J|0)&&!(0!= +(c|0)&1==(t|0)))D=-1;else{h[i+1]=0;var Q=h[j+1];h[i+2]=Q;var B=h[j+2]+Q&65535;h[i+3]=B;var X=h[j+3]+B&65535;h[i+4]=X;var Z=h[j+4]+X&65535;h[i+5]=Z;var K=h[j+5]+Z&65535;h[i+6]=K;var fa=h[j+6]+K&65535;h[i+7]=fa;var G=h[j+7]+fa&65535;h[i+8]=G;var M=h[j+8]+G&65535;h[i+9]=M;var ta=h[j+9]+M&65535;h[i+10]=ta;var Ma=h[j+10]+ta&65535;h[i+11]=Ma;var N=h[j+11]+Ma&65535;h[i+12]=N;var va=h[j+12]+N&65535;h[i+13]=va;var cb=h[j+13]+va&65535;h[i+14]=cb;h[i+15]=h[j+14]+cb&65535;b:do if(A)u=21;else for(var db=0;;){var ya= +p[e+(db<<1)>>1];if(0!=ya<<16>>16){var oa=((ya&65535)<<1)+y|0,wa=p[oa>>1];h[oa>>1]=wa+1&65535;h[g+((wa&65535)<<1)>>1]=db&65535}var xa=db+1|0;if((xa|0)==(d|0))break b;db=xa}while(0);if(0==c){var Ha=0,Na=1<>>0){D=1;break}var jb=2==(c|0);if(jb&591>>0){D=1;break}Ha=Ta;Na=za;tb=Da;Aa=Ya;Xa=Sa;Ia=jb}var eb=Na-1|0,rc=z&255,Ua=a[m],mc= +-1,Ba=C,Oa=0,Za=z,$a=0,kb=Na,fb=0;b:for(;;){for(var pb=1<>1],ba=H&65535;if((ba|0)<(tb|0))var V=0,I=H;else(ba|0)<=(tb|0)?(V=96,I=0):(V=h[Aa+(ba<<1)>>1]&255,I=h[Xa+(ba<<1)>>1]);for(var sa=1<<$,ub=aa>>>($a>>>0),ha=pb;;){var ja=ha-sa|0,ka=ja+ub|0;l[(ka<<2)+Ua|0]=V;l[(ka<<2)+Ua+1|0]=qa;h[Ua+(ka<<2)+2>>1]=I;if((ha|0)==(sa|0))break;ha=ja}var W=1<>>1;if(0==(la&aa|0))break; +pa=la}if(0==(la|0)){var ua=0;u=37}else ra=la,u=36}while(0);36==u&&(ua=(ra-1&aa)+ra|0);var Va=P+1|0,Fa=(lb<<1)+ia|0,ab=h[Fa>>1]-1&65535;h[Fa>>1]=ab;if(0==ab<<16>>16){if((lb|0)==(t|0))break b;var T=p[e+((p[g+(Va<<1)>>1]&65535)<<1)>>1]&65535}else T=lb;if(!(T>>>0<=z>>>0)){var Y=ua&eb;if((Y|0)!=(mc|0))break}lb=T;P=Va;aa=ua}for(var U=0==($a|0)?z:$a,ca=(pb<<2)+Ua|0,ea=T-U|0,S=ea,Ea=1<>>0>=t>>>0)break;var vb=Ea-(p[(gb<<1>>1)+j]&65535)|0;if(1>(vb|0))break;var Wa=vb<<1,S=S+1|0,Ea= +Wa}var Ga=(1<>>0|Ia&591>>0){D=1;break a}l[(Y<<2)+a[m]|0]=S&255;l[(Y<<2)+a[m]+1|0]=rc;var hb=k[m];h[hb+(Y<<2)+2>>1]=(ca-hb|0)>>>2&65535;Ua=ca;mc=Y;Ba=T;Oa=Va;Za=S;$a=U;kb=Ga;fb=ua}var La=0==(ua|0);b:do if(!La)for(var Ca=qa,mb=ua,wb=$a,qb=lb,yb=Ua;;){if(0==(wb|0))var ib=yb,Pa=qb,Ja=0,Ka=Ca;else(mb&eb|0)==(mc|0)?(ib=yb,Pa=qb,Ja=wb,Ka=Ca):(ib=a[m],Pa=z,Ja=0,Ka=rc);var rb=mb>>>(Ja>>>0);l[(rb<<2)+ib|0]=64;l[(rb<<2)+ib+1|0]=Ka;h[ib+(rb<<2)+2>>1]=0;var Qa=1<>>1;if(0==(xb&mb|0))break;Bb=xb}if(0==(xb|0))break b;nb=xb}var bb=(nb-1&mb)+nb|0;if(0==(bb|0))break b;Ca=Ka;mb=bb;wb=Ja;qb=Pa;yb=ib}while(0);a[m]=(kb<<2)+a[m]|0;a[f>>2]=z;D=0}}while(0);ma=ia;return D}function ki(c,e){var d,b,f=k[c+28>>2];d=f>>2;var g=c|0,i=a[g>>2],j=c+4|0,m=i+(a[j>>2]-6)|0,h=c+12|0,u=a[h>>2],L=c+16|0,A=a[L>>2],n=u+(A-258)|0,x=k[d+11],q=k[d+12],v=k[d+13],t=f+56|0,w=f+60|0,D=a[d+19],E=a[d+20],C=(1<>2],ma=a[t>>2];a:for(;;){if(15>M>>>0)var Ma=fa+2|0,N=Ma,ta=M+16|0,cb=((y[fa+1|0]&255)<>1],xa=y[(va<<2)+D+1|0]&255,Na=ya>>>(xa>>>0),tb=db-xa|0,Aa=oa&255;if(0==oa<<24>>24){var Xa=G+1|0;l[Xa]=wa&255;var Ia=N,Da=Xa,Ya=tb,Sa=Na;b=57;break}if(0!=(Aa&16|0)){b=7;break}if(0==(Aa&64|0))var Ha=(Na& +(1<>2]=s.__str255|0;a[d]=29;var Ta=N,jb=G,eb=tb,za=Na;break a}a[d]=11;Ta=N;jb=G;eb=tb;za=Na;break a}}do if(7==b){var Ua=wa&65535,Ca=Aa&15;if(0==(Ca|0))var Ba=Ua,Oa=N,Za=tb,$a=Na;else{if(tb>>>0>>0)var kb=N+1|0,fb=kb,pb=tb+8|0,lb=((y[kb]&255)<>>(Ca>>>0)}if(15>Za>>>0)var P=Oa+2|0,aa=P,$=Za+16|0,qa=((y[Oa+1|0]&255)<>1],sa=y[(V<<2)+E+1|0]&255,ub=ba>>>(sa>>>0),ha=H-sa|0,ja=y[(V<<2)+E|0]&255;if(0!=(ja&16|0))break;if(0!=(ja&64|0)){a[c+24>>2]=s.__str154|0;a[d]=29;Ta=aa;jb=G;eb=ha;za=ub;break a}var ka=(ub&(1<>>0>>0){var ra=aa+1|0,pa=((y[ra]&255)<>>0>=na>>>0)var ua=ra,Va=la,Fa=pa;else var ab=aa+2|0,ua=ab,Va=ha+16|0,Fa=((y[ab]&255)<>>(na>>>0),ca=Va-na|0,ea=G,S=ea-z|0;if(Y>>>0>S>>>0){var Ea=Y-S|0,gb=Ea>>>0>x>>>0;do{if(gb){if(0==(a[r>>2]|0))break;a[c+24>>2]=s.__str53|0;a[d]=29;Ta=ua;jb=G;eb=ca;za=U;break a}b=22}while(0);do if(F){var vb=v+(Q-Ea)|0;if(Ea>>>0>=Ba>>>0)var Wa=vb,Ga=Ba,hb=G;else{for(var Qa=Ba-Ea|0,La=T-ea|0,mb=Z+La|0,wb=vb,qb=Ea,yb=G;;){var ib=wb+1|0,Pa=yb+1|0;l[Pa]=l[ib];var Ja=qb-1|0;if(0==(Ja|0))break;wb=ib;qb=Ja;yb=Pa}Wa=G+mb+W+(1-Y)|0;Ga=Qa;hb=G+z+La+W|0}}else if(q>>>0>>0){var Ka= +v+(B-Ea)|0,rb=Ea-q|0;if(rb>>>0>=Ba>>>0)Wa=Ka,Ga=Ba,hb=G;else{for(var Ra=Ba-rb|0,nb=T-ea|0,Bb=Ka,xb=rb,bb=G;;){var zb=Bb+1|0,Cb=bb+1|0;l[Cb]=l[zb];var ob=xb-1|0;if(0==(ob|0))break;Bb=zb;xb=ob;bb=Cb}var sb=G+K+nb+W|0;if(q>>>0>=Ra>>>0)Wa=J,Ga=Ra,hb=sb;else{for(var Ab=Ra-q|0,Hb=Z+nb|0,Eb=J,Db=q,Gb=sb;;){var Jb=Eb+1|0,Vb=Gb+1|0;l[Vb]=l[Jb];var $b=Db-1|0;if(0==($b|0))break;Eb=Jb;Db=$b;Gb=Vb}Wa=G+Hb+W+(1-Y)|0;Ga=Ab;hb=G+z+nb+W|0}}}else{var Kb=v+(X-Ea)|0;if(Ea>>>0>=Ba>>>0)Wa=Kb,Ga=Ba,hb=G;else{for(var Tb= +Ba-Ea|0,Fb=T-ea|0,Nb=Z+Fb|0,Lb=Kb,ac=Ea,Mb=G;;){var Ib=Lb+1|0,Wb=Mb+1|0;l[Wb]=l[Ib];var Rb=ac-1|0;if(0==(Rb|0))break;Lb=Ib;ac=Rb;Mb=Wb}Wa=G+Nb+W+(1-Y)|0;Ga=Tb;hb=G+z+Fb+W|0}}while(0);var Yb=2>>0;b:do if(Yb)for(var bc=hb,Sb=Ga,nc=Wa;;){l[bc+1|0]=l[nc+1|0];l[bc+2|0]=l[nc+2|0];var Qb=nc+3|0,cc=bc+3|0;l[cc]=l[Qb];var oc=Sb-3|0;if(2>=oc>>>0){var dc=cc,Ob=oc,Ub=Qb;break b}bc=cc;Sb=oc;nc=Qb}else dc=hb,Ob=Ga,Ub=Wa;while(0);if(0==(Ob|0)){Ia=ua;Da=dc;Ya=ca;Sa=U;break}var Zb=dc+1|0;l[Zb]=l[Ub+1|0];if(1>= +Ob>>>0){Ia=ua;Da=Zb;Ya=ca;Sa=U;break}var jc=dc+2|0;l[jc]=l[Ub+2|0];Ia=ua;Da=jc}else{for(var ec=G+-Y|0,vc=Ba,fc=G;;){l[fc+1|0]=l[ec+1|0];l[fc+2|0]=l[ec+2|0];var kc=ec+3|0,pc=fc+3|0;l[pc]=l[kc];var gc=vc-3|0;if(2>=gc>>>0)break;ec=kc;vc=gc;fc=pc}if(0==(gc|0)){Ia=ua;Da=pc;Ya=ca;Sa=U;break}var tc=fc+4|0;l[tc]=l[ec+4|0];if(1>=gc>>>0){Ia=ua;Da=tc;Ya=ca;Sa=U;break}var qc=fc+5|0;l[qc]=l[ec+5|0];Ia=ua;Da=qc}Ya=ca;Sa=U}while(0);if(!(Ia>>>0>>0&Da>>>0>>0)){Ta=Ia;jb=Da;eb=Ya;za=Sa;break}fa=Ia;G=Da;M=Ya;ma= +Sa}var hc=eb>>>3,Pb=Ta+-hc|0,ic=eb&7;a[g>>2]=Ta+(1-hc)|0;a[h>>2]=jb+1|0;a[j>>2]=(Pb>>>0>>0?m-Pb|0:m-Pb|0)+5|0;a[L>>2]=(jb>>>0>>0?n-jb|0:n-jb|0)+257|0;a[t>>2]=(1<>2]=ic}function Pc(c){var e,d=245>c>>>0;do{if(d){var b=11>c>>>0?16:c+11&-8,f=b>>>3;e=k[j>>2];var g=e>>>(f>>>0);if(0!=(g&3|0)){var c=(g&1^1)+f|0,b=c<<1,d=(b<<2)+j+40|0,f=(b+2<<2)+j+40|0,i=k[f>>2],b=i+8|0,g=k[b>>2];if((d|0)==(g|0))a[j>>2]=e&(1<>>0>2]>>>0)throw D(),"Reached an unreachable!";a[f>>2]= +g;a[g+12>>2]=d}e=c<<3;a[i+4>>2]=e|3;e=i+(e|4)|0;a[e>>2]|=1;i=b;e=37;break}if(b>>>0<=k[j+8>>2]>>>0){var h=b;e=29;break}if(0!=(g|0)){var c=2<>>12&16,i=d>>>(c>>>0),d=i>>>5&8,f=i>>>(d>>>0),i=f>>>2&4,g=f>>>(i>>>0),f=g>>>1&2,g=g>>>(f>>>0),m=g>>>1&1,i=(d|c|i|f|m)+(g>>>(m>>>0))|0,c=i<<1,f=(c<<2)+j+40|0,g=(c+2<<2)+j+40|0,d=k[g>>2],c=d+8|0,m=k[c>>2];if((f|0)==(m|0))a[j>>2]=e&(1<>>0>2]>>>0)throw D(),"Reached an unreachable!";a[g>>2]=m;a[m+12>>2]=f}i<<= +3;e=i-b|0;a[d+4>>2]=b|3;f=d;d=f+b|0;a[f+(b|4)>>2]=e|1;a[f+i>>2]=e;m=k[j+8>>2];if(0!=(m|0)){b=a[j+20>>2];f=m>>>2&1073741822;i=(f<<2)+j+40|0;g=k[j>>2];m=1<<(m>>>3);if(0==(g&m|0))a[j>>2]=g|m,g=i,f=(f+2<<2)+j+40|0;else if(f=(f+2<<2)+j+40|0,g=k[f>>2],!(g>>>0>=k[j+16>>2]>>>0))throw D(),"Reached an unreachable!";a[f>>2]=b;a[g+12>>2]=b;a[(b+8|0)>>2]=g;a[(b+12|0)>>2]=i}a[j+8>>2]=e;a[j+20>>2]=d;i=c;e=37;break}if(0==(a[j+4>>2]|0)){h=b;e=29;break}e=vg(b);if(0==(e|0)){h=b;e=29;break}i=e}else{if(4294967231>> +0){h=-1;e=29;break}e=c+11&-8;if(0==(a[j+4>>2]|0)){h=e;e=29;break}b=wg(e);if(0==(b|0)){h=e;e=29;break}i=b}e=37}while(0);29==e&&(b=k[j+8>>2],h>>>0>b>>>0?(e=k[j+12>>2],h>>>0>>0?(e=e-h|0,a[j+12>>2]=e,b=k[j+24>>2],a[j+24>>2]=b+h|0,a[h+(b+4)>>2]=e|1,a[b+4>>2]=h|3,i=b+8|0):i=xg(h)):(c=b-h|0,e=k[j+20>>2],15>>0?(a[j+20>>2]=e+h|0,a[j+8>>2]=c,a[h+(e+4)>>2]=c|1,a[e+b>>2]=c,a[e+4>>2]=h|3):(a[j+8>>2]=0,a[j+20>>2]=0,a[e+4>>2]=b|3,h=b+(e+4)|0,a[h>>2]|=1),i=e+8|0));return i}function vg(c){var e,d,b=a[j+4>>2], +f=(b&-b)-1|0,b=f>>>12&16,g=f>>>(b>>>0),f=g>>>5&8;d=g>>>(f>>>0);var g=d>>>2&4,i=d>>>(g>>>0);d=i>>>1&2;var i=i>>>(d>>>0),h=i>>>1&1,b=f=k[j+((f|b|g|d|h)+(i>>>(h>>>0))<<2)+304>>2];d=b>>2;f=(a[f+4>>2]&-8)-c|0;a:for(;;)for(g=b;;){i=a[g+16>>2];if(0==(i|0)){if(g=a[g+20>>2],0==(g|0))break a}else g=i;i=(a[g+4>>2]&-8)-c|0;if(i>>>0>>0){b=g;d=b>>2;f=i;continue a}}var i=b,m=k[j+16>>2],h=i>>>0>>0;do if(!h){var l=i+c|0,g=l;if(!(i>>>0>=l>>>0)){var h=k[d+6],l=k[d+3],u=(l|0)==(b|0);do{if(u){e=b+20|0;var p=a[e>> +2];if(0==(p|0)&&(e=b+16|0,p=a[e>>2],0==(p|0))){p=0;e=p>>2;break}for(;;){var A=p+20|0,n=a[A>>2];if(0==(n|0)&&(A=p+16|0,n=k[A>>2],0==(n|0)))break;e=A;p=n}if(e>>>0>>0)throw D(),"Reached an unreachable!";a[e>>2]=0}else{e=k[d+2];if(e>>>0>>0)throw D(),"Reached an unreachable!";a[e+12>>2]=l;a[l+8>>2]=e;p=l}e=p>>2}while(0);m=0==(h|0);a:do if(!m){l=b+28|0;u=(a[l>>2]<<2)+j+304|0;A=(b|0)==(a[u>>2]|0);do{if(A){a[u>>2]=p;if(0!=(p|0))break;a[j+4>>2]&=1<>2]^-1;break a}if(h>>>0>2]>>>0)throw D(), +"Reached an unreachable!";n=h+16|0;(a[n>>2]|0)==(b|0)?a[n>>2]=p:a[h+20>>2]=p;if(0==(p|0))break a}while(0);if(p>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+6]=h;l=k[d+4];if(0!=(l|0)){if(l>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+4]=l;a[l+24>>2]=p}l=k[d+5];if(0!=(l|0)){if(l>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+5]=l;a[l+24>>2]=p}}while(0);if(16>f>>>0)c=f+c|0,a[d+1]=c|3,c=c+(i+4)|0,a[c>>2]|=1;else{a[d+1]=c|3;a[c+(i+4)>>2]=f|1;a[i+f+c>>2]=f;m=k[j+ +8>>2];if(0!=(m|0)){c=k[j+20>>2];i=m>>>2&1073741822;d=(i<<2)+j+40|0;h=k[j>>2];m=1<<(m>>>3);if(0==(h&m|0))a[j>>2]=h|m,h=d,i=(i+2<<2)+j+40|0;else if(i=(i+2<<2)+j+40|0,h=k[i>>2],!(h>>>0>=k[j+16>>2]>>>0))throw D(),"Reached an unreachable!";a[i>>2]=c;a[h+12>>2]=c;a[c+8>>2]=h;a[c+12>>2]=d}a[j+8>>2]=f;a[j+20>>2]=g}return b+8|0}}while(0);D();throw"Reached an unreachable!";}function wg(c){var e,d,b,f,g,i=c>>2,h=-c|0,m=c>>>8;if(0==(m|0))var l=0;else if(16777215>>0)l=31;else var p=(m+1048320|0)>>>16&8,u=m<< +p,A=(u+520192|0)>>>16&4,n=u<>>16&2,q=14-(A|p|x)+(n<>>15)|0,l=c>>>((q+7|0)>>>0)&1|q<<1;var v=k[j+(l<<2)+304>>2],t=0==(v|0);a:do if(t)var w=0,y=h,s=0;else{var E=31==(l|0)?0:25-(l>>>1)|0,C=0,z=h,r=v;g=r>>2;for(var J=c<>>0>>0){if((Q|0)==(c|0)){w=r;y=B;s=r;break a}var X=r,Z=B}else X=C,Z=z;var K=k[g+5],fa=k[((J>>>31<<2)+16>>2)+g],G=0==(K|0)|(K|0)==(fa|0)?F:K;if(0==(fa|0)){w=X;y=Z;s=G;break a}C=X;z=Z;r=fa;g=r>>2;J<<=1;F=G}}while(0);if(0==(s| +0)&0==(w|0)){var M=2<>2]&(M|-M);if(0==(ma|0))var ta=s;else var N=(ma&-ma)-1|0,va=N>>>12&16,cb=N>>>(va>>>0),oa=cb>>>5&8,ya=cb>>>(oa>>>0),wa=ya>>>2&4,xa=ya>>>(wa>>>0),za=xa>>>1&2,Ca=xa>>>(za>>>0),Na=Ca>>>1&1,ta=a[j+((oa|va|wa|za|Na)+(Ca>>>(Na>>>0))<<2)+304>>2]}else ta=s;var Ha=0==(ta|0);a:do if(Ha){var Aa=y,Xa=w;f=Xa>>2}else{var Ia=ta;b=Ia>>2;for(var Da=y,Ya=w;;){var Sa=(a[b+1]&-8)-c|0,La=Sa>>>0>>0,Ta=La?Sa:Da,jb=La?Ia:Ya,eb=k[b+4];if(0!=(eb|0))Ia=eb;else{var Qa=k[b+5];if(0==(Qa|0)){Aa= +Ta;Xa=jb;f=Xa>>2;break a}Ia=Qa}b=Ia>>2;Da=Ta;Ya=jb}}while(0);var Ua=0==(Xa|0);a:do if(Ua)var Ra=0;else if(Aa>>>0>=(a[j+8>>2]-c|0)>>>0)Ra=0;else{var Ba=Xa;d=Ba>>2;var Oa=k[j+16>>2],Za=Ba>>>0>>0;do if(!Za){var $a=Ba+c|0,kb=$a;if(!(Ba>>>0>=$a>>>0)){var fb=k[f+6],pb=k[f+3],lb=(pb|0)==(Xa|0);do{if(lb){var P=Xa+20|0,aa=a[P>>2];if(0==(aa|0)){var $=Xa+16|0,qa=a[$>>2];if(0==(qa|0)){var H=0;e=H>>2;break}var ba=$,V=qa}else ba=P,V=aa;for(;;){var I=V+20|0,sa=a[I>>2];if(0!=(sa|0))ba=I,V=sa;else{var ub=V+16| +0,ha=k[ub>>2];if(0==(ha|0))break;ba=ub;V=ha}}if(ba>>>0>>0)throw D(),"Reached an unreachable!";a[ba>>2]=0;H=V}else{var ja=k[f+2];if(ja>>>0>>0)throw D(),"Reached an unreachable!";a[ja+12>>2]=pb;a[pb+8>>2]=ja;H=pb}e=H>>2}while(0);var ka=0==(fb|0);b:do if(!ka){var W=Xa+28|0,na=(a[W>>2]<<2)+j+304|0,ra=(Xa|0)==(a[na>>2]|0);do{if(ra){a[na>>2]=H;if(0!=(H|0))break;a[j+4>>2]&=1<>2]^-1;break b}if(fb>>>0>2]>>>0)throw D(),"Reached an unreachable!";var pa=fb+16|0;(a[pa>>2]|0)==(Xa|0)?a[pa>> +2]=H:a[fb+20>>2]=H;if(0==(H|0))break b}while(0);if(H>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+6]=fb;var la=k[f+4];if(0!=(la|0)){if(la>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+4]=la;a[la+24>>2]=H}var ua=k[f+5];if(0!=(ua|0)){if(ua>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+5]=ua;a[ua+24>>2]=H}}while(0);var Va=16>Aa>>>0;b:do if(Va){var Fa=Aa+c|0;a[f+1]=Fa|3;var ab=Fa+(Ba+4)|0;a[ab>>2]|=1}else if(a[f+1]=c|3,a[i+(d+1)]=Aa|1,a[(Aa>>2)+d+i]=Aa,256>Aa>>> +0){var T=Aa>>>2&1073741822,Y=(T<<2)+j+40|0,U=k[j>>2],ca=1<<(Aa>>>3);if(0==(U&ca|0)){a[j>>2]=U|ca;var ea=Y,S=(T+2<<2)+j+40|0}else{var Ea=(T+2<<2)+j+40|0,gb=k[Ea>>2];if(gb>>>0>=k[j+16>>2]>>>0)ea=gb,S=Ea;else throw D(),"Reached an unreachable!";}a[S>>2]=kb;a[ea+12>>2]=kb;a[i+(d+2)]=ea;a[i+(d+3)]=Y}else{var vb=$a,Wa=Aa>>>8;if(0==(Wa|0))var Ga=0;else if(16777215>>0)Ga=31;else var hb=(Wa+1048320|0)>>>16&8,ob=Wa<>>16&4,mb=ob<>>16&2,qb=14-(sb|hb|wb)+(mb<>> +15)|0,Ga=Aa>>>((qb+7|0)>>>0)&1|qb<<1;var yb=(Ga<<2)+j+304|0;a[i+(d+7)]=Ga;var ib=c+(Ba+16)|0;a[i+(d+5)]=0;a[ib>>2]=0;var Pa=a[j+4>>2],Ja=1<>2]=Pa|Ja,a[yb>>2]=vb,a[i+(d+6)]=yb,a[i+(d+3)]=vb,a[i+(d+2)]=vb;else for(var Ka=Aa<<(31==(Ga|0)?0:25-(Ga>>>1)|0),rb=a[yb>>2];;){if((a[rb+4>>2]&-8|0)==(Aa|0)){var Ab=rb+8|0,nb=k[Ab>>2],Bb=k[j+16>>2],xb=rb>>>0>>0;do if(!xb&&!(nb>>>0>>0)){a[nb+12>>2]=vb;a[Ab>>2]=vb;a[i+(d+2)]=nb;a[i+(d+3)]=rb;a[i+(d+6)]=0;break b}while(0);D();throw"Reached an unreachable!"; +}var bb=(Ka>>>31<<2)+rb+16|0,zb=k[bb>>2];if(0==(zb|0)){if(bb>>>0>=k[j+16>>2]>>>0){a[bb>>2]=vb;a[i+(d+6)]=rb;a[i+(d+3)]=vb;a[i+(d+2)]=vb;break b}D();throw"Reached an unreachable!";}Ka<<=1;rb=zb}}while(0);Ra=Xa+8|0;break a}}while(0);D();throw"Reached an unreachable!";}while(0);return Ra}function xg(c){var e,d;0==(a[wa>>2]|0)&&hf();var b=0==(a[j+440>>2]&4|0);do if(b){d=a[j+24>>2];if(0==(d|0))d=5;else if(d=od(d),0==(d|0))d=5;else{var f=a[wa+8>>2],f=c+47-a[j+12>>2]+f&-f;if(2147483647<=f>>>0)d=13;else{var g= +Ca(f);if((g|0)==(a[d>>2]+a[d+4>>2]|0)){var i=g,h=f;e=g;d=12}else{var m=g,l=f;d=14}}}if(5==d)if(d=Ca(0),-1==(d|0))d=13;else{var f=a[wa+8>>2],f=f+(c+47)&-f,g=d,p=a[wa+4>>2],u=p-1|0,f=0==(u&g|0)?f:f-g+(u+g&-p)|0;2147483647<=f>>>0?d=13:(g=Ca(f),(g|0)==(d|0)?(i=d,h=f,e=g,d=12):(m=g,l=f,d=14))}if(13==d)a[j+440>>2]|=4,d=22;else{if(12==d){if(-1!=(i|0)){var A=h,n=i;d=25;break}m=e;l=h}d=-l|0;if(-1!=(m|0)&2147483647>l>>>0)if(l>>>0>=(c+48|0)>>>0){var x=l;d=20}else f=a[wa+8>>2],f=c+47-l+f&-f,2147483647<=f>>>0? +(x=l,d=20):-1==(Ca(f)|0)?(Ca(d),d=21):(x=f+l|0,d=20);else x=l,d=20;20==d&&-1!=(m|0)?(A=x,n=m,d=25):(a[j+440>>2]|=4,d=22)}}else d=22;while(0);22==d&&(b=a[wa+8>>2],b=b+(c+47)&-b,2147483647<=b>>>0?d=48:(b=Ca(b),i=Ca(0),-1!=(i|0)&-1!=(b|0)&b>>>0>>0?(i=i-b|0,i>>>0<=(c+40|0)>>>0|-1==(b|0)?d=48:(A=i,n=b,d=25)):d=48));a:do if(25==d){b=a[j+432>>2]+A|0;a[j+432>>2]=b;b>>>0>k[j+436>>2]>>>0&&(a[j+436>>2]=b);b=k[j+24>>2];i=0==(b|0);b:do if(i){h=k[j+16>>2];0==(h|0)|n>>>0>>0&&(a[j+16>>2]=n);a[j+444>>2]=n;a[j+ +448>>2]=A;a[j+456>>2]=0;a[j+36>>2]=a[wa>>2];a[j+32>>2]=-1;for(h=0;!(e=h<<1,m=(e<<2)+j+40|0,a[j+(e+3<<2)+40>>2]=m,a[j+(e+2<<2)+40>>2]=m,h=h+1|0,32==(h|0)););pd(n,A-40|0)}else{m=j+444|0;for(e=m>>2;!(0==(m|0));){h=k[e];m=m+4|0;l=k[m>>2];x=h+l|0;if((n|0)==(x|0)){if(0!=(a[e+3]&8|0))break;e=b;if(!(e>>>0>=h>>>0&e>>>0>>0))break;a[m>>2]=l+A|0;pd(a[j+24>>2],a[j+12>>2]+A|0);break b}m=a[e+2];e=m>>2}n>>>0>2]>>>0&&(a[j+16>>2]=n);e=n+A|0;for(m=j+444|0;!(0==(m|0));){l=m|0;h=k[l>>2];if((h|0)==(e|0)){if(0!= +(a[m+12>>2]&8|0))break;a[l>>2]=n;var q=m+4|0;a[q>>2]=a[q>>2]+A|0;q=yg(n,h,c);d=49;break a}m=a[m+8>>2]}zg(n,A)}while(0);b=k[j+12>>2];b>>>0<=c>>>0?d=48:(q=b-c|0,a[j+12>>2]=q,i=b=k[j+24>>2],a[j+24>>2]=i+c|0,a[c+(i+4)>>2]=q|1,a[b+4>>2]=c|3,q=b+8|0,d=49)}while(0);48==d&&(a[Z.ret>>2]=12,q=0);return q}function jf(){var c;0==(a[wa>>2]|0)&&hf();var e=k[j+24>>2],d=0==(e|0);a:do if(!d){var b=k[j+12>>2],f=40>>0;do if(f){var g=k[wa+8>>2],i=(Math.floor(((b-41+g|0)>>>0)/(g>>>0))-1)*g|0,h=od(e);if(0==(a[h+12>> +2]&8|0)){var m=Ca(0);c=(h+4|0)>>2;if((m|0)==(a[h>>2]+a[c]|0)&&(i=Ca(-(2147483646>>0?-2147483648-g|0:i)|0),g=Ca(0),-1!=(i|0)&g>>>0>>0&&(i=m-g|0,(m|0)!=(g|0)))){a[c]=a[c]-i|0;a[j+432>>2]=a[j+432>>2]-i|0;pd(a[j+24>>2],a[j+12>>2]-i|0);break a}}}while(0);k[j+12>>2]>>>0<=k[j+28>>2]>>>0||(a[j+28>>2]=-1)}while(0)}function Ag(c){var e,d,b,f,g,i,h=c>>2,m,l=0==(c|0);a:do if(!l){var p=c-8|0,u=p,A=k[j+16>>2],n=p>>>0>>0;b:do if(!n){var x=k[c-4>>2],q=x&3;if(1!=(q|0)){var v=x&-8;i=v>>2;var t=c+(v-8)|0,w= +t,y=0==(x&1|0);c:do if(y){var s=k[p>>2];if(0==(q|0))break a;var E=-8-s|0;g=E>>2;var C=c+E|0,z=C,r=s+v|0;if(C>>>0>>0)break b;if((z|0)==(a[j+20>>2]|0)){f=(c+(v-4)|0)>>2;if(3!=(a[f]&3|0)){var J=z;b=J>>2;var F=r;break}a[j+8>>2]=r;a[f]&=-2;a[g+(h+1)]=r|1;a[t>>2]=r;break a}if(256>s>>>0){var Q=k[g+(h+2)],B=k[g+(h+3)];if((Q|0)==(B|0))a[j>>2]&=1<<(s>>>3)^-1,J=z,b=J>>2,F=r;else{var X=((s>>>2&1073741822)<<2)+j+40|0,Z=(Q|0)!=(X|0)&Q>>>0>>0;do if(!Z&&(B|0)==(X|0)|B>>>0>=A>>>0){a[Q+12>>2]=B;a[B+8>>2]=Q;J= +z;b=J>>2;F=r;break c}while(0);D();throw"Reached an unreachable!";}}else{var K=C,fa=k[g+(h+6)],G=k[g+(h+3)],M=(G|0)==(K|0);do{if(M){var ma=E+(c+20)|0,ta=a[ma>>2];if(0==(ta|0)){var N=E+(c+16)|0,va=a[N>>2];if(0==(va|0)){var oa=0;d=oa>>2;break}var wa=N,ya=va}else wa=ma,ya=ta,m=20;for(;;){var xa=ya+20|0,za=a[xa>>2];if(0!=(za|0))wa=xa,ya=za;else{var Ca=ya+16|0,Ha=k[Ca>>2];if(0==(Ha|0))break;wa=Ca;ya=Ha}}if(wa>>>0>>0)throw D(),"Reached an unreachable!";a[wa>>2]=0;oa=ya}else{var Na=k[g+(h+2)];if(Na>>> +0>>0)throw D(),"Reached an unreachable!";a[Na+12>>2]=G;a[G+8>>2]=Na;oa=G}d=oa>>2}while(0);if(0!=(fa|0)){var La=E+(c+28)|0,Aa=(a[La>>2]<<2)+j+304|0,Xa=(K|0)==(a[Aa>>2]|0);do{if(Xa){a[Aa>>2]=oa;if(0!=(oa|0))break;a[j+4>>2]&=1<>2]^-1;J=z;b=J>>2;F=r;break c}if(fa>>>0>2]>>>0)throw D(),"Reached an unreachable!";var Ia=fa+16|0;(a[Ia>>2]|0)==(K|0)?a[Ia>>2]=oa:a[fa+20>>2]=oa;if(0==(oa|0)){J=z;b=J>>2;F=r;break c}}while(0);if(oa>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[d+6]= +fa;var Da=k[g+(h+4)];if(0!=(Da|0)){if(Da>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[d+4]=Da;a[Da+24>>2]=oa}var Ya=k[g+(h+5)];if(0!=(Ya|0)){if(Ya>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[d+5]=Ya;a[Ya+24>>2]=oa}}J=z;b=J>>2;F=r}}else J=u,b=J>>2,F=v;while(0);var Sa=J;if(!(Sa>>>0>=t>>>0)){var Qa=c+(v-4)|0,Ta=k[Qa>>2];if(0!=(Ta&1|0)){var jb=0==(Ta&2|0);do if(jb){if((w|0)==(a[j+24>>2]|0)){var eb=a[j+12>>2]+F|0;a[j+12>>2]=eb;a[j+24>>2]=J;a[b+1]=eb|1;(J|0)==(a[j+20>>2]|0)&&(a[j+ +20>>2]=0,a[j+8>>2]=0);if(eb>>>0<=k[j+28>>2]>>>0)break a;jf();break a}if((w|0)==(a[j+20>>2]|0)){var Ra=a[j+8>>2]+F|0;a[j+8>>2]=Ra;a[j+20>>2]=J;a[b+1]=Ra|1;a[(Sa+Ra|0)>>2]=Ra;break a}var Ua=(Ta&-8)+F|0,ob=Ta>>>3,Ba=256>Ta>>>0;c:do if(Ba){var Oa=k[h+i],Za=k[((v|4)>>2)+h];if((Oa|0)==(Za|0))a[j>>2]&=1<>>2&1073741822)<<2)+j+40|0;m=(Oa|0)==($a|0)?62:Oa>>>0>2]>>>0?65:62;do if(62==m&&!((Za|0)!=($a|0)&&Za>>>0>2]>>>0)){a[Oa+12>>2]=Za;a[Za+8>>2]=Oa;break c}while(0);D(); +throw"Reached an unreachable!";}}else{var kb=t,fb=k[i+(h+4)],pb=k[((v|4)>>2)+h],lb=(pb|0)==(kb|0);do{if(lb){var P=v+(c+12)|0,aa=a[P>>2];if(0==(aa|0)){var $=v+(c+8)|0,qa=a[$>>2];if(0==(qa|0)){var H=0;e=H>>2;break}var ba=$,V=qa}else ba=P,V=aa,m=72;for(;;){var I=V+20|0,sa=a[I>>2];if(0!=(sa|0))ba=I,V=sa;else{var ub=V+16|0,ha=k[ub>>2];if(0==(ha|0))break;ba=ub;V=ha}}if(ba>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[ba>>2]=0;H=V}else{var ja=k[h+i];if(ja>>>0>2]>>>0)throw D(),"Reached an unreachable!"; +a[ja+12>>2]=pb;a[pb+8>>2]=ja;H=pb}e=H>>2}while(0);if(0!=(fb|0)){var ka=v+(c+20)|0,W=(a[ka>>2]<<2)+j+304|0,na=(kb|0)==(a[W>>2]|0);do{if(na){a[W>>2]=H;if(0!=(H|0))break;a[j+4>>2]&=1<>2]^-1;break c}if(fb>>>0>2]>>>0)throw D(),"Reached an unreachable!";var ra=fb+16|0;(a[ra>>2]|0)==(kb|0)?a[ra>>2]=H:a[fb+20>>2]=H;if(0==(H|0))break c}while(0);if(H>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+6]=fb;var pa=k[i+(h+2)];if(0!=(pa|0)){if(pa>>>0>2]>>>0)throw D(),"Reached an unreachable!"; +a[e+4]=pa;a[pa+24>>2]=H}var la=k[i+(h+3)];if(0!=(la|0)){if(la>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+5]=la;a[la+24>>2]=H}}}while(0);a[b+1]=Ua|1;a[Sa+Ua>>2]=Ua;if((J|0)!=(a[j+20>>2]|0))var ua=Ua;else{a[j+8>>2]=Ua;break a}}else a[Qa>>2]=Ta&-2,a[b+1]=F|1,ua=a[Sa+F>>2]=F;while(0);if(256>ua>>>0){var Va=ua>>>2&1073741822,Fa=(Va<<2)+j+40|0,ab=k[j>>2],T=1<<(ua>>>3);if(0==(ab&T|0)){a[j>>2]=ab|T;var Y=Fa,U=(Va+2<<2)+j+40|0}else{var ca=(Va+2<<2)+j+40|0,ea=k[ca>>2];if(ea>>>0>=k[j+16>>2]>>> +0)Y=ea,U=ca;else throw D(),"Reached an unreachable!";}a[U>>2]=J;a[Y+12>>2]=J;a[b+2]=Y;a[b+3]=Fa;break a}var S=J,Ea=ua>>>8;if(0==(Ea|0))var gb=0;else if(16777215>>0)gb=31;else var vb=(Ea+1048320|0)>>>16&8,Wa=Ea<>>16&4,hb=Wa<>>16&2,Ab=14-(Ga|vb|sb)+(hb<>>15)|0,gb=ua>>>((Ab+7|0)>>>0)&1|Ab<<1;var mb=(gb<<2)+j+304|0;a[b+7]=gb;a[b+5]=0;a[b+4]=0;var wb=a[j+4>>2],qb=1<>2]=wb|qb,a[mb>>2]=S,a[b+6]=mb,a[b+3]=J,a[b+2]=J;else for(var ib= +ua<<(31==(gb|0)?0:25-(gb>>>1)|0),Pa=a[mb>>2];;){if((a[Pa+4>>2]&-8|0)==(ua|0)){var Ja=Pa+8|0,Ka=k[Ja>>2],rb=k[j+16>>2],Eb=Pa>>>0>>0;do if(!Eb&&!(Ka>>>0>>0)){a[Ka+12>>2]=S;a[Ja>>2]=S;a[b+2]=Ka;a[b+3]=Pa;a[b+6]=0;break c}while(0);D();throw"Reached an unreachable!";}var nb=(ib>>>31<<2)+Pa+16|0,Bb=k[nb>>2];if(0==(Bb|0)){if(nb>>>0>=k[j+16>>2]>>>0){a[nb>>2]=S;a[b+6]=Pa;a[b+3]=J;a[b+2]=J;break c}D();throw"Reached an unreachable!";}ib<<=1;Pa=Bb}while(0);var xb=a[j+32>>2]-1|0;a[j+32>>2]=xb;if(0!=(xb| +0))break a;var bb=a[j+452>>2],zb=0==(bb|0);c:do if(!zb)for(var Cb=bb;;){var Db=a[Cb+8>>2];if(0==(Db|0))break c;Cb=Db}while(0);a[j+32>>2]=-1;break a}}}}while(0);D();throw"Reached an unreachable!";}while(0)}function od(c){var e,d=j+444|0;for(e=d>>2;;){var b=k[e];if(b>>>0<=c>>>0&&(b+a[e+1]|0)>>>0>c>>>0){var f=d;break}e=k[e+2];if(0==(e|0)){f=0;break}d=e;e=d>>2}return f}function pd(c,e){var d=c+8|0,d=0==(d&7|0)?0:-d&7,b=e-d|0;a[j+24>>2]=c+d|0;a[j+12>>2]=b;a[d+(c+4)>>2]=b|1;a[e+(c+4)>>2]=40;a[j+28>>2]= +a[wa+16>>2]}function hf(){if(0==(a[wa>>2]|0)){var c=Gh(8);if(0==(c-1&c|0))a[wa+8>>2]=c,a[wa+4>>2]=c,a[wa+12>>2]=-1,a[wa+16>>2]=2097152,a[wa+20>>2]=0,a[j+440>>2]=0,c=Math.floor(Date.now()/1E3),a[wa>>2]=c&-16^1431655768;else throw D(),"Reached an unreachable!";}}function yg(c,e,d){var b,f,g,i=e>>2,h=c>>2,m,l=c+8|0,l=0==(l&7|0)?0:-l&7;f=e+8|0;var p=0==(f&7|0)?0:-f&7;g=p>>2;var u=e+p|0,A=l+d|0;f=A>>2;var n=c+A|0,x=u-(c+l)-d|0;a[(l+4>>2)+h]=d|3;d=(u|0)==(a[j+24>>2]|0);a:do if(d){var q=a[j+12>>2]+x|0;a[j+ +12>>2]=q;a[j+24>>2]=n;a[f+(h+1)]=q|1}else if((u|0)==(a[j+20>>2]|0))q=a[j+8>>2]+x|0,a[j+8>>2]=q,a[j+20>>2]=n,a[f+(h+1)]=q|1,a[(c+q+A|0)>>2]=q;else{m=k[g+(i+1)];if(1==(m&3|0)){var q=m&-8,v=m>>>3,t=256>m>>>0;b:do if(t){var w=k[((p|8)>>2)+i],s=k[g+(i+3)];if((w|0)==(s|0))a[j>>2]&=1<>>2&1073741822)<<2)+j+40|0;m=(w|0)==(v|0)?14:w>>>0>2]>>>0?17:14;do if(14==m&&!((s|0)!=(v|0)&&s>>>0>2]>>>0)){a[w+12>>2]=s;a[s+8>>2]=w;break b}while(0);D();throw"Reached an unreachable!";}}else{var w= +u,s=k[((p|24)>>2)+i],y=k[g+(i+3)],E=(y|0)==(w|0);do{if(E){b=p|16;var C=b+(e+4)|0,z=a[C>>2];if(0==(z|0)){if(b=e+b|0,z=a[b>>2],0==(z|0)){z=0;b=z>>2;break}}else b=C;for(;;){var C=z+20|0,r=a[C>>2];if(0==(r|0)&&(C=z+16|0,r=k[C>>2],0==(r|0)))break;b=C;z=r}if(b>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b>>2]=0}else{b=k[((p|8)>>2)+i];if(b>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b+12>>2]=y;a[y+8>>2]=b;z=y}b=z>>2}while(0);if(0!=(s|0)){y=p+(e+28)|0;E=(a[y>>2]<<2)+j+304|0;C=(w| +0)==(a[E>>2]|0);do{if(C){a[E>>2]=z;if(0!=(z|0))break;a[j+4>>2]&=1<>2]^-1;break b}if(s>>>0>2]>>>0)throw D(),"Reached an unreachable!";r=s+16|0;(a[r>>2]|0)==(w|0)?a[r>>2]=z:a[s+20>>2]=z;if(0==(z|0))break b}while(0);if(z>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b+6]=s;w=p|16;s=k[(w>>2)+i];if(0!=(s|0)){if(s>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b+4]=s;a[s+24>>2]=z}w=k[(w+4>>2)+i];if(0!=(w|0)){if(w>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b+ +5]=w;a[w+24>>2]=z}}}while(0);m=e+(q|p)|0;q=q+x|0}else m=u,q=x;m=m+4|0;a[m>>2]&=-2;a[f+(h+1)]=q|1;a[(q>>2)+h+f]=q;if(256>q>>>0){v=q>>>2&1073741822;m=(v<<2)+j+40|0;t=k[j>>2];q=1<<(q>>>3);if(0==(t&q|0))a[j>>2]=t|q,q=m,v=(v+2<<2)+j+40|0;else if(v=(v+2<<2)+j+40|0,q=k[v>>2],!(q>>>0>=k[j+16>>2]>>>0))throw D(),"Reached an unreachable!";a[v>>2]=n;a[q+12>>2]=n;a[f+(h+2)]=q;a[f+(h+3)]=m}else if(m=n,t=q>>>8,0==(t|0)?t=0:16777215>>0?t=31:(v=(t+1048320|0)>>>16&8,w=t<>>16&4,w<<=t,s=(w+245760| +0)>>>16&2,v=14-(t|v|s)+(w<>>15)|0,t=q>>>((v+7|0)>>>0)&1|v<<1),v=(t<<2)+j+304|0,a[f+(h+7)]=t,w=A+(c+16)|0,a[f+(h+5)]=0,a[w>>2]=0,w=a[j+4>>2],s=1<>2]=w|s,a[v>>2]=m,a[f+(h+6)]=v,a[f+(h+3)]=m,a[f+(h+2)]=m;else{t=q<<(31==(t|0)?0:25-(t>>>1)|0);for(v=a[v>>2];;){if((a[v+4>>2]&-8|0)==(q|0)){e=v+8|0;i=k[e>>2];g=k[j+16>>2];p=v>>>0>>0;do if(!p&&!(i>>>0>>0)){a[i+12>>2]=m;a[e>>2]=m;a[f+(h+2)]=i;a[f+(h+3)]=v;a[f+(h+6)]=0;break a}while(0);D();throw"Reached an unreachable!";}w=(t>>>31<< +2)+v+16|0;s=k[w>>2];if(0==(s|0)){if(w>>>0>=k[j+16>>2]>>>0){a[w>>2]=m;a[f+(h+6)]=v;a[f+(h+3)]=m;a[f+(h+2)]=m;break a}D();throw"Reached an unreachable!";}t<<=1;v=s}}}while(0);return c+(l|8)|0}function zg(c,e){var d,b,f=k[j+24>>2];b=f>>2;var g=od(f),i=a[g>>2];d=a[g+4>>2];var g=i+d|0,h=i+(d-39)|0,i=i+(d-47)+(0==(h&7|0)?0:-h&7)|0,i=i>>>0<(f+16|0)>>>0?f:i,h=i+8|0;d=h>>2;pd(c,e-40|0);a[(i+4|0)>>2]=27;a[d]=a[j+444>>2];a[d+1]=a[j+448>>2];a[d+2]=a[j+452>>2];a[d+3]=a[j+456>>2];a[j+444>>2]=c;a[j+448>>2]=e;a[j+ +456>>2]=0;a[j+452>>2]=h;d=i+28|0;a[d>>2]=7;h=(i+32|0)>>>0>>0;a:do if(h)for(var m=d;;){var l=m+4|0;a[l>>2]=7;if((m+8|0)>>>0>=g>>>0)break a;m=l}while(0);g=(i|0)==(f|0);a:do if(!g)if(d=i-f|0,h=f+d|0,m=d+(f+4)|0,a[m>>2]&=-2,a[b+1]=d|1,a[h>>2]=d,256>d>>>0){m=d>>>2&1073741822;h=(m<<2)+j+40|0;l=k[j>>2];d=1<<(d>>>3);if(0==(l&d|0))a[j>>2]=l|d,d=h,m=(m+2<<2)+j+40|0;else if(m=(m+2<<2)+j+40|0,d=k[m>>2],!(d>>>0>=k[j+16>>2]>>>0))throw D(),"Reached an unreachable!";a[m>>2]=f;a[d+12>>2]=f;a[b+2]=d;a[b+3]=h}else{h= +f;l=d>>>8;if(0==(l|0))l=0;else if(16777215>>0)l=31;else var m=(l+1048320|0)>>>16&8,p=l<>>16&4,p=p<>>16&2,m=14-(l|m|s)+(p<>>15)|0,l=d>>>((m+7|0)>>>0)&1|m<<1;m=(l<<2)+j+304|0;a[b+7]=l;a[b+5]=0;a[b+4]=0;p=a[j+4>>2];s=1<>2]=p|s,a[m>>2]=h,a[b+6]=m,a[b+3]=f,a[b+2]=f;else{l=d<<(31==(l|0)?0:25-(l>>>1)|0);for(m=a[m>>2];;){if((a[m+4>>2]&-8|0)==(d|0)){f=m+8|0;i=k[f>>2];g=k[j+16>>2];d=m>>>0>>0;do if(!d&&!(i>>>0>>0)){a[i+12>>2]=h;a[f>>2]=h; +a[b+2]=i;a[b+3]=m;a[b+6]=0;break a}while(0);D();throw"Reached an unreachable!";}p=(l>>>31<<2)+m+16|0;s=k[p>>2];if(0==(s|0)){if(p>>>0>=k[j+16>>2]>>>0){a[p>>2]=h;a[b+6]=m;a[b+3]=f;a[b+2]=f;break a}D();throw"Reached an unreachable!";}l<<=1;m=s}}}while(0)}function Z(c){Z.ret||(Z.ret=E([0],"i32",u));return a[Z.ret>>2]=c}function Hh(a,e,d,b){var f=C.streams[a];if(!f||f.object.isDevice)return Z(Qa),-1;if(f.isRead){if(f.object.isFolder)return Z(yd),-1;if(0>d||0>b)return Z(Jb),-1;for(a=0;f.ungotten.length&& +0d)return Z(Jb),-1;if(b.object.isDevice){if(b.object.input){for(a=0;b.ungotten.length&&0d)return Z(Jb),-1;if(b.object.isDevice){if(b.object.output){for(var f= +0;fd||0>f)Z(Jb),e=-1;else{for(var i=a.object.contents;i.lengthe&&(e+=256);for(var c=c>>2,b=d>>2,f=e|e<<8|e<<16|e<<24;c>2,c=c>>2,b=d>>2;e>=1;c>>=1;for(b=d>>1;e>12<<12,e.called=!0);e=Ha;0!=a&&fa.staticAlloc(a);return e}function Vh(a){for(var a=0<=a?a:2*Math.abs(-2147483648)+a,e=[],d=0;4>d;d++)e[d]=a&255,a>>=8;for(d=a=0;4>d;d++)a<<=8,a+=e[d];return a}function qd(a){X.preRun&&X.preRun();a=a||X.arguments;ee(Bg);var e=null;X._main&&(e=X.callMain(a),ee(kf),Lh.print());X.postRun&& +X.postRun();return e}var Mh="object"===typeof window,Nh="function"===typeof importScripts;if("object"===typeof process){var Yb=function(a){process.stdout.write(a+"\n")},rd=function(a){process.stderr.write(a+"\n")},lf=require("fs"),jc=function(a){var e=lf.readFileSync(a).toString();!e&&"/"!=a[0]&&(a=__dirname.split("/").slice(0,-1).join("/")+"/src/"+a,e=lf.readFileSync(a).toString());return e};process.argv.slice(2)}else if(Mh)var Yb=rd=function(a){console.log(a)},jc=function(a){var e=new XMLHttpRequest; +e.open("GET",a,!1);e.send(null);return e.responseText};else if(Nh)var mf=importScripts;else throw"Unknown runtime environment. Where are we?";"undefined"==typeof mf&&"undefined"!=typeof jc&&(mf=function(a){Cg(jc(a))});"undefined"===typeof rd&&(rd=function(){});"undefined"===typeof Yb&&(Yb=rd);var X={},fa={stackSave:function(){return ma},stackRestore:function(a){ma=a},forceAlign:function(a,e){e=e||4;if(1==e)return a;if(isNumber(a)&&isNumber(e))return Math.ceil(a/e)*e;if(isNumber(e)&&isPowerOfTwo(e)){var d= +log2(e);return"(((("+a+")+"+(e-1)+")>>"+d+")<<"+d+")"}return"Math.ceil(("+a+")/"+e+")*"+e},isNumberType:function(a){return a in fa.INT_TYPES||a in fa.FLOAT_TYPES},isPointerType:function(a){return"*"==a[a.length-1]},isStructType:function(a){return isPointerType(a)?!1:/^\[\d+\ x\ (.*)\]/.test(a)||/?/.test(a)?!0:"%"==a[0]},INT_TYPES:{i1:0,i8:0,i16:0,i32:0,i64:0},FLOAT_TYPES:{"float":0,"double":0},bitshift64:function(a,e,d,b){var f=Math.pow(2,b)-1;if(32>b)switch(d){case "shl":return[a<>>32-b];case "ashr":return[(a>>>b|(e&f)<<32-b)>>0>>>0,e>>b>>>0];case "lshr":return[(a>>>b|(e&f)<<32-b)>>>0,e>>>b]}else if(32==b)switch(d){case "shl":return[0,a];case "ashr":return[e,0>(e|0)?f:0];case "lshr":return[e,0]}else switch(d){case "shl":return[0,a<>b-32>>>0,0>(e|0)?f:0];case "lshr":return[e>>>b-32,0]}Gb("unknown bitshift64 op: "+[value,d,b])},or64:function(a,e){var d=a|0|e|0,b=4294967296*(Math.round(a/4294967296)|Math.round(e/4294967296));return d+ +b},and64:function(a,e){var d=(a|0)&(e|0),b=4294967296*(Math.round(a/4294967296)&Math.round(e/4294967296));return d+b},xor64:function(a,e){var d=(a|0)^(e|0),b=4294967296*(Math.round(a/4294967296)^Math.round(e/4294967296));return d+b},getNativeTypeSize:function(a){if(1==fa.QUANTUM_SIZE)return 1;var e={"%i1":1,"%i8":1,"%i16":2,"%i32":4,"%i64":8,"%float":4,"%double":8}["%"+a];e||("*"==a[a.length-1]?e=fa.QUANTUM_SIZE:"i"==a[0]&&(a=parseInt(a.substr(1)),Hb(0==a%8),e=a/8));return e},getNativeFieldSize:function(a){return Math.max(fa.getNativeTypeSize(a), +fa.QUANTUM_SIZE)},dedup:function(a,e){var d={};return e?a.filter(function(a){return d[a[e]]?!1:d[a[e]]=!0}):a.filter(function(a){return d[a]?!1:d[a]=!0})},set:function(){for(var a="object"===typeof arguments[0]?arguments[0]:arguments,e={},d=0;d>2<<2;return e},staticAlloc:function(c){var e=Ha;Ha+=c;Ha=Ha+3>>2<<2;if(Ha>=Mb){for(;Mb<=Ha;)Mb=2*Mb+4095>>12<<12;var c=l,d=new ArrayBuffer(Mb);l=new Int8Array(d);h=new Int16Array(d);a=new Int32Array(d);y=new Uint8Array(d);p=new Uint16Array(d);k=new Uint32Array(d);Kb=new Float32Array(d);l.set(c)}return e},alignMemory:function(a,e){return Math.ceil(a/(e?e:4))*(e?e:4)},makeBigInt:function(a,e,d){return d?(a>>>0)+4294967296*(e>>>0):(a>>>0)+4294967296*(e| +0)},QUANTUM_SIZE:4,__dummy__:0},Lh={MAX_ALLOWED:0,corrections:0,sigs:{},note:function(a,e){e||(this.corrections++,this.corrections>=this.MAX_ALLOWED&&Gb("\n\nToo many corrections!"))},print:function(){}},Oh=this;X.ccall=function(a,e,d,b){try{var f=eval("_"+a)}catch(g){try{f=Oh.Module["_"+a]}catch(i){}}Hb(f,"Cannot call unknown function "+a+" (perhaps LLVM optimizations or closure removed it?)");var h=0,a=b?b.map(function(a){if("string"==d[h++]){var c=ma;fa.stackAlloc(a.length+1);he(a,c);a=c}return a}): +[];return function(a,c){return"string"==c?Tb(a):a}(f.apply(null,a),e)};X.setValue=qf;X.getValue=function(c,e){e=e||"i8";"*"===e[e.length-1]&&(e="i32");switch(e){case "i1":return l[c];case "i8":return l[c];case "i16":return h[c>>1];case "i32":return a[c>>2];case "i64":return a[c>>2];case "float":return Kb[c>>2];case "double":return Oc[0]=a[c>>2],Oc[1]=a[c+4>>2],de[0];default:Gb("invalid type for setValue: "+e)}return null};var u=2;X.ALLOC_NORMAL=0;X.ALLOC_STACK=1;X.ALLOC_STATIC=u;X.allocate=E;X.Pointer_stringify= +Tb;X.Array_stringify=function(a){for(var e="",d=0;d>2);Kb.subarray(vd>>2);var de=(new Float64Array(l.buffer)).subarray(vd>>3);sd=vd+8;Ha=sd+4095>>12<<12;var Bg=[],kf=[];X.Array_copy= +fe;X.TypedArray_copy=function(a,e){for(var d=new Uint8Array(e),b=0;ba;a++)b.push(0)}var d=a.length+1,b=[E(ob("/bin/this.program"),"i8",u)];e();for(var f=0;f>2]=md|0;a[Sc+4>>2]=ae|0;a[Tc>>2]=$d|0;a[Tc+4>>2]=be|0;a[Uc+4>>2]=of|0;va=[0,0,function(a,e,d){return Pc(d*e|0)},0,function(a,e){Ag(e)},0,zf,0,Af,0,se,0];X.FUNCTION_TABLE=va;X.run=qd;var pf=Ab[sb];return function(){var a,e,d;C.init(function(){if(e Date: Wed, 19 Feb 2014 23:21:07 +0000 Subject: [PATCH 5/7] tweaks --- jspdf.plugin.addimage.js | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/jspdf.plugin.addimage.js b/jspdf.plugin.addimage.js index 92ac5e3cf..76bdb20dc 100644 --- a/jspdf.plugin.addimage.js +++ b/jspdf.plugin.addimage.js @@ -146,8 +146,8 @@ return imageIndex; } - , noAliasDefined = function(alias) { - return typeof alias === 'undefined' || alias === null; + , notDefined = function(value) { + return typeof value === 'undefined' || value === null; } , generateAliasFromData = function(data) { // TODO: Alias dynamic generation from imageData's checksum/hash @@ -448,7 +448,7 @@ compress = compress || false; format = format.toLowerCase(); - if(noAliasDefined(alias)) + if(notDefined(alias)) alias = generateAliasFromData(imageData); if(isDOMElement(imageData)) @@ -488,15 +488,10 @@ var imageIndex = getImageIndex(images), info = cached_info; - if(!info) { - - if(format === 'jpg') - format = 'jpeg'; - + if(!info) info = this['process' + format.toUpperCase()](imageData, imageIndex, alias, compress, dataAsBinaryString); - } - if( !info ) + if(!info) throw new Error('An unkwown error occurred whilst processing the image'); writeImageToPDF.call(this, x, y, w, h, info, imageIndex, images); @@ -553,35 +548,39 @@ }; - jsPDFAPI.processJPEG = function(imageData, imageIndex, alias, compress, dataAsBinaryString) { + jsPDFAPI.processJPEG = function(data, index, alias, compress, dataAsBinaryString) { 'use strict' var colorSpace = this.DEVICE_RGB, filter = this.DCT_DECODE, bpc = 8, dims; - if(this.isString(imageData)) { - dims = getJpegSize(imageData); - return this.createImageInfo(imageData, dims[0], dims[1], colorSpace, bpc, filter, imageIndex, alias); + if(this.isString(data)) { + dims = getJpegSize(data); + return this.createImageInfo(data, dims[0], dims[1], colorSpace, bpc, filter, index, alias); } - if(this.isArrayBuffer(imageData)) - imageData = new Uint8Array(imageData); + if(this.isArrayBuffer(data)) + data = new Uint8Array(data); - if(this.isArrayBufferView(imageData)) { + if(this.isArrayBufferView(data)) { var img = new JpegImage(); - img.parse(imageData); + img.parse(data); /* * if we already have a stored binary string rep use that */ - imageData = dataAsBinaryString || this.arrayBufferToBinaryString(imageData); + data = dataAsBinaryString || this.arrayBufferToBinaryString(data); - return this.createImageInfo(imageData, img.width, img.height, colorSpace, bpc, filter, imageIndex, alias); + return this.createImageInfo(data, img.width, img.height, colorSpace, bpc, filter, index, alias); } return null; }; + + jsPDFAPI.processJPG = function(data, index, alias, compress, dataAsBinaryString) { + return this.processJPEG(data, index, alias, compress, dataAsBinaryString); + } })(jsPDF.API); From 43722d09685aa5f4300cb68633e32cf57046a5a3 Mon Sep 17 00:00:00 2001 From: jamesrobb Date: Thu, 27 Feb 2014 23:30:25 +0000 Subject: [PATCH 6/7] all 8 bit colour types now supported 8 bit colour types supported and 16 bit for type 1, 2, 4 and 6 Recompression added using Deflator - now recompresses images and masks Colour type 3 key masks and smack support added for multi pixel alpha example updated --- examples/images.html | 204 +++++----- examples/images/RGBA_16bpc.png | Bin 0 -> 76032 bytes examples/images/RGB_16bpc.png | Bin 0 -> 61159 bytes examples/images/grayscale_16bpc.png | Bin 0 -> 22830 bytes examples/images/grayscale_8bpc.png | Bin 0 -> 13698 bytes examples/images/grayscale_alpha_16_bpc.png | Bin 0 -> 37853 bytes examples/images/grayscale_alpha_8bpc.png | Bin 0 -> 22902 bytes examples/images/png8_flat.png | Bin 0 -> 14038 bytes examples/images/tiny_png_indexed.png | Bin 0 -> 11014 bytes jspdf.plugin.addimage.js | 96 +++-- jspdf.plugin.png_support.js | 419 ++++++++++++++++++--- libs/png_support/png.js | 14 +- libs/png_support/zpipe.min.js | 408 -------------------- 13 files changed, 552 insertions(+), 589 deletions(-) create mode 100644 examples/images/RGBA_16bpc.png create mode 100644 examples/images/RGB_16bpc.png create mode 100644 examples/images/grayscale_16bpc.png create mode 100644 examples/images/grayscale_8bpc.png create mode 100644 examples/images/grayscale_alpha_16_bpc.png create mode 100644 examples/images/grayscale_alpha_8bpc.png create mode 100644 examples/images/png8_flat.png create mode 100644 examples/images/tiny_png_indexed.png delete mode 100644 libs/png_support/zpipe.min.js diff --git a/examples/images.html b/examples/images.html index 65e54fee4..ae14d49ed 100644 --- a/examples/images.html +++ b/examples/images.html @@ -7,125 +7,155 @@ - - - - - - + + + + + + - - + + + + + + - + - - - -
- - - - -
- - - -
- - - -
\ No newline at end of file diff --git a/examples/images/RGBA_16bpc.png b/examples/images/RGBA_16bpc.png new file mode 100644 index 0000000000000000000000000000000000000000..14810a0ca4cf1334c1409cd52e0b848bad9c8f0e GIT binary patch literal 76032 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

`INMol17N2a!oY-*ck`FyRv*c# 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�dM2irb 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 literal 0 HcmV?d00001 diff --git a/examples/images/RGB_16bpc.png b/examples/images/RGB_16bpc.png new file mode 100644 index 0000000000000000000000000000000000000000..427bd0432c23e357820b485c8f162b95489b48d3 GIT binary patch literal 61159 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

$!S`r<1?O{8Jret2Q?QbRs34SJL318!}3 zFGmo;4Lf|p+btsJs3}J^|M>7Np<29OpJUKaG1BQ3bPS;cys5TI(&JZdix1g1^5}ws z;;+F__5HWTx-y3$YHo%ROy>uXNKRQWm6cMk@?)U;KJnPC3P*gV&ooLPHR`|AB!7-y z$30BL-kDx|&pbrw1b;JCJSVx#1_XZ5yCr{f7HRqA1Wb> zm$`w`(GMAMMmw7Gt`!q`DEfr2`!1g)8Sm>?bi-4S(fY&HHN*ME8{wkkrFztY#>d1P&=>BWg9y!+ph zHdnzr-9EFF!G0?2cfI$kWMe;lEr&Ozv)4{3%GPJi_kZ62s}y=K__s%eu~84TL_0p< z)l&~p`W+u|kEsXTqT>U8A@xwpW9p%X*Z-FvzO|$I?>`#IxWrXlKc99t1RMn18rEp+ GmhykWrnS%j literal 0 HcmV?d00001 diff --git a/examples/images/grayscale_16bpc.png b/examples/images/grayscale_16bpc.png new file mode 100644 index 0000000000000000000000000000000000000000..ced8fabe0e09cb944c2d6c6397fae724e2a229a7 GIT binary patch literal 22830 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 literal 0 HcmV?d00001 diff --git a/examples/images/grayscale_alpha_16_bpc.png b/examples/images/grayscale_alpha_16_bpc.png new file mode 100644 index 0000000000000000000000000000000000000000..a62f333f3b2b67382aaebc789c48cc4a2c3349e8 GIT binary patch literal 37853 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 literal 0 HcmV?d00001 diff --git a/examples/images/grayscale_alpha_8bpc.png b/examples/images/grayscale_alpha_8bpc.png new file mode 100644 index 0000000000000000000000000000000000000000..49c3037eb49c52368f03f9bd3dfa77da63a559d7 GIT binary patch literal 22902 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 literal 0 HcmV?d00001 diff --git a/examples/images/png8_flat.png b/examples/images/png8_flat.png new file mode 100644 index 0000000000000000000000000000000000000000..57071de06a98205b3429d90b7541bc562efd7ffc GIT binary patch literal 14038 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 Aw*UYD literal 0 HcmV?d00001 diff --git a/jspdf.plugin.addimage.js b/jspdf.plugin.addimage.js index 76bdb20dc..98a36f5d3 100644 --- a/jspdf.plugin.addimage.js +++ b/jspdf.plugin.addimage.js @@ -1,5 +1,5 @@ /** @preserve - * jsPDF addImage plugin (JPEG only at this time) + * jsPDF addImage plugin * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/ * 2013 Chris Dowling, https://github.com/gingerchris * 2013 Trinh Ho, https://github.com/ineedfat @@ -47,13 +47,14 @@ out('/Subtype /Image') out('/Width ' + img['w']) out('/Height ' + img['h']) - if (img['cs'] === 'Indexed') { + if (img['cs'] === this.color_spaces.INDEXED) { out('/ColorSpace [/Indexed /DeviceRGB ' - + (img['pal'].length / 3 - 1) + ' ' + (objectNumber + 1) + // if an indexed png defines more than one colour with transparency, we've created a smask + + (img['pal'].length / 3 - 1) + ' ' + ('smask' in img ? objectNumber + 2 : objectNumber + 1) + ' 0 R]'); } else { out('/ColorSpace /' + img['cs']); - if (img['cs'] === 'DeviceCMYK') { + if (img['cs'] === this.color_spaces.DEVICE_CMYK) { out('/Decode [1 0 1 0 1 0 1 0]'); } } @@ -65,8 +66,10 @@ out('/DecodeParms <<' + img['dp'] + '>>'); } if ('trns' in img && img['trns'].constructor == Array) { - var trns = ''; - for ( var i = 0; i < img['trns'].length; i++) + var trns = '', + i = 0, + len = img['trns'].length; + for (; i < len; i++) trns += (img['trns'][i] + ' ' + img['trns'][i] + ' '); out('/Mask [' + trns + ']'); } @@ -81,15 +84,15 @@ // Soft mask if ('smask' in img) { - var dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns ' + img['w']; - var smask = {'w': img['w'], 'h': img['h'], 'cs': 'DeviceGray', 'bpc': 8, 'dp': dp, 'data': img['smask']}; - //if ('f' in img) - //smask.f = img['f']; + var dp = '/Predictor 15 /Colors 1 /BitsPerComponent ' + img['bpc'] + ' /Columns ' + img['w']; + var smask = {'w': img['w'], 'h': img['h'], 'cs': 'DeviceGray', 'bpc': img['bpc'], 'dp': dp, 'data': img['smask']}; + if ('f' in img) + smask.f = img['f']; putImage.call(this, smask); } //Palette - if (img['cs'] === 'Indexed') { + if (img['cs'] === this.color_spaces.INDEXED) { this.internal.newObject(); //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>'); @@ -119,6 +122,11 @@ ) } } + , checkCompressValue = function(value) { + if(value && typeof value === 'string') + value = value.toUpperCase(); + return value in jsPDFAPI.image_compression ? value : jsPDFAPI.image_compression.NONE; + } , getImages = function() { var images = this.internal.collections[namespace + 'images']; //first run, so initialise stuff @@ -232,19 +240,46 @@ /** - * COLOR SPACE + * COLOR SPACES + */ + jsPDFAPI.color_spaces = { + DEVICE_RGB:'DeviceRGB', + DEVICE_GRAY:'DeviceGray', + DEVICE_CMYK:'DeviceCMYK', + CAL_GREY:'CalGray', + CAL_RGB:'CalRGB', + LAB:'Lab', + ICC_BASED:'ICCBased', + INDEXED:'Indexed', + PATTERN:'Pattern', + SEPERATION:'Seperation', + DEVICE_N:'DeviceN' + }; + + /** + * DECODE METHODS */ - jsPDFAPI.DEVICE_RGB = 'DeviceRGB'; - jsPDFAPI.DEVICE_GRAY = 'DeviceGray'; - jsPDFAPI.DEVICE_CMYK = 'DeviceCMYK'; - jsPDFAPI.INDEXED = 'Indexed'; + jsPDFAPI.decode = { + DCT_DECODE:'DCTDecode', + FLATE_DECODE:'FlateDecode', + LZW_DECODE:'LZWDecode', + JPX_DECODE:'JPXDecode', + JBIG2_DECODE:'JBIG2Decode', + ASCII85_DECODE:'ASCII85Decode', + ASCII_HEX_DECODE:'ASCIIHexDecode', + RUN_LENGTH_DECODE:'RunLengthDecode', + CCITT_FAX_DECODE:'CCITTFaxDecode' + }; /** - * COMPRESSION METHODS + * IMAGE COMPRESSION TYPES */ - jsPDFAPI.DCT_DECODE = 'DCTDecode'; - jsPDFAPI.FLATE_DECODE = 'FlateDecode'; - jsPDFAPI.LZW_DECODE = 'LZWDecode'; + jsPDFAPI.image_compression = { + NONE: 'NONE', + FAST: 'FAST', + MEDIUM: 'MEDIUM', + SLOW: 'SLOW' + }; jsPDFAPI.isString = function(object) { @@ -333,6 +368,7 @@ jsPDFAPI.arrayBufferToBinaryString = function(buffer) { if(this.isArrayBuffer(buffer)) buffer = new Uint8Array(buffer); + var binary_string = ''; var len = buffer.byteLength; for (var i = 0; i < len; i++) { @@ -342,7 +378,7 @@ /* * Another solution is the method below - convert array buffer straight to base64 and then use atob */ - //return atob(arrayBufferToBase64(array_buffer)); + //return atob(this.arrayBufferToBase64(buffer)); }; /** @@ -429,7 +465,7 @@ return info; }; - jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias, compress) { + jsPDFAPI.addImage = function(imageData, format, x, y, w, h, alias, compression) { 'use strict' if(typeof format === 'number') { @@ -444,8 +480,8 @@ var images = getImages.call(this),//initalises internals and events on first run cached_info, dataAsBinaryString; - - compress = compress || false; + + compression = checkCompressValue(compression); format = format.toLowerCase(); if(notDefined(alias)) @@ -489,7 +525,7 @@ info = cached_info; if(!info) - info = this['process' + format.toUpperCase()](imageData, imageIndex, alias, compress, dataAsBinaryString); + info = this['process' + format.toUpperCase()](imageData, imageIndex, alias, compression, dataAsBinaryString); if(!info) throw new Error('An unkwown error occurred whilst processing the image'); @@ -548,10 +584,10 @@ }; - jsPDFAPI.processJPEG = function(data, index, alias, compress, dataAsBinaryString) { + jsPDFAPI.processJPEG = function(data, index, alias, compression, dataAsBinaryString) { 'use strict' - var colorSpace = this.DEVICE_RGB, - filter = this.DCT_DECODE, + var colorSpace = this.color_spaces.DEVICE_RGB, + filter = this.decode.DCT_DECODE, bpc = 8, dims; @@ -579,8 +615,8 @@ return null; }; - jsPDFAPI.processJPG = function(data, index, alias, compress, dataAsBinaryString) { - return this.processJPEG(data, index, alias, compress, dataAsBinaryString); + jsPDFAPI.processJPG = function(data, index, alias, compression, dataAsBinaryString) { + return this.processJPEG(data, index, alias, compression, dataAsBinaryString); } })(jsPDF.API); diff --git a/jspdf.plugin.png_support.js b/jspdf.plugin.png_support.js index 235b65e55..391ab70f0 100755 --- a/jspdf.plugin.png_support.js +++ b/jspdf.plugin.png_support.js @@ -1,6 +1,7 @@ -/** ==================================================================== +/**@preserve + * ==================================================================== * jsPDF [NAME] plugin - * Copyright (c) 2013 [YOUR NAME HERE] [WAY TO CONTACT YOU HERE] + * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -54,7 +55,8 @@ * * This is what the value 'Predictor' in decode params relates to * - * 15 is "optimal prediction", which means the prediction algorithm can change from line to line. In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte + * 15 is "optimal prediction", which means the prediction algorithm can change from line to line. + * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte. * 0 None 1 Sub @@ -66,36 +68,252 @@ var doesNotHavePngJS = function() { return typeof PNG !== 'function' || typeof FlateStream !== 'function'; } + , canCompress = function(value) { + return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS(); + } , hasCompressionJS = function() { - var inst = typeof zpipe === 'object'; + var inst = typeof Deflater === 'function'; if(!inst) - console.log("requires zpipe.js for compression") + throw new Error("requires deflate.js for compression") return inst; } - , compressBytes = function(bytes, width, colors) { + , compressBytes = function(bytes, lineLength, colorsPerPixel, compression) { - bytes = applyPngFilterMethod(bytes, width, colors); + var level = 5, + filter_method = filterUp; - return zpipe.deflate(this.arrayBufferToBinaryString(bytes)); - } - , applyPngFilterMethod = function(bytes, width, colors){ + switch(compression) { + + case jsPDFAPI.image_compression.FAST: + + level = 3; + filter_method = filterSub; + break; + + case jsPDFAPI.image_compression.MEDIUM: + + level = 6; + filter_method = filterAverage; + break; + + case jsPDFAPI.image_compression.SLOW: + + level = 9; + filter_method = filterPaeth;//uses to sum to choose best filter for each line + break; + } + + bytes = applyPngFilterMethod(bytes, lineLength, colorsPerPixel, filter_method); + + var header = new Uint8Array(createZlibHeader(level)); + var checksum = adler32(bytes); + + var deflate = new Deflater(level); + var a = deflate.append(bytes); + var cBytes = deflate.flush(); + var len = header.length + a.length + cBytes.length; + + var cmpd = new Uint8Array(len + 4); + cmpd.set(header); + cmpd.set(a, header.length); + cmpd.set(cBytes, header.length + a.length); + + cmpd[len++] = (checksum >>> 24) & 0xff; + cmpd[len++] = (checksum >>> 16) & 0xff; + cmpd[len++] = (checksum >>> 8) & 0xff; + cmpd[len++] = checksum & 0xff; + + return jsPDFAPI.arrayBufferToBinaryString(cmpd); + } + , createZlibHeader = function(bytes, level){ /* - * TODO - this is only filter method 0 - None - * - * implement all 5 + * @see http://www.ietf.org/rfc/rfc1950.txt for zlib header */ - var lines = bytes.length / (width * colors), - arr = new Uint8Array(bytes.length + lines), - i = 0, offset; + var cm = 8; + var cinfo = Math.LOG2E * Math.log(0x8000) - 8; + var cmf = (cinfo << 4) | cm; + + var hdr = cmf << 8; + var flevel = Math.min(3, ((level - 1) & 0xff) >> 1); + + hdr |= (flevel << 6); + hdr |= 0;//FDICT + hdr += 31 - (hdr % 31); + + return [cmf, (hdr & 0xff) & 0xff]; + } + , adler32 = function(array, param) { + var adler = 1; + var s1 = adler & 0xffff, + s2 = (adler >>> 16) & 0xffff; + var len = array.length; + var tlen; + var i = 0; + + while (len > 0) { + tlen = len > param ? param : len; + len -= tlen; + do { + s1 += array[i++]; + s2 += s1; + } while (--tlen); + + s1 %= 65521; + s2 %= 65521; + } + + return ((s2 << 16) | s1) >>> 0; + } + , applyPngFilterMethod = function(bytes, lineLength, colorsPerPixel, filter_method) { + var lines = bytes.length / lineLength, + result = new Uint8Array(bytes.length + lines), + filter_methods = getFilterMethods(), + i = 0, line, prevLine, offset; for(; i < lines; i++) { - offset = i * width * colors; - arr[offset + i] = 0; - arr.set(bytes.subarray(offset, (offset + width ) * colors), offset + i + 1); + offset = i * lineLength; + line = bytes.subarray(offset, offset + lineLength); + + if(filter_method) { + result.set(filter_method(line, colorsPerPixel, prevLine), offset + i); + + }else{ + + var j = 0, + len = filter_methods.length, + results = []; + + for(; j < len; j++) + results[j] = filter_methods[j](line, colorsPerPixel, prevLine); + + var ind = getIndexOfSmallestSum(results.concat()); + + result.set(results[ind], offset + i); + } + + prevLine = line; + } + + return result; + } + , filterNone = function(line, colorsPerPixel, prevLine) { + /*var result = new Uint8Array(line.length + 1); + result[0] = 0; + result.set(line, 1);*/ + + var result = Array.apply([], line); + result.unshift(0); + + return result; + } + , filterSub = function(line, colorsPerPixel, prevLine) { + var result = [], + i = 0, + len = line.length, + left; + + result[0] = 1; + + for(; i < len; i++) { + left = line[i - colorsPerPixel] || 0; + result[i + 1] = (line[i] - left + 0x0100) & 0xff; + } + + return result; + } + , filterUp = function(line, colorsPerPixel, prevLine) { + var result = [], + i = 0, + len = line.length, + up; + + result[0] = 2; + + for(; i < len; i++) { + up = prevLine && prevLine[i] || 0; + result[i + 1] = (line[i] - up + 0x0100) & 0xff; + } + + return result; + } + , filterAverage = function(line, colorsPerPixel, prevLine) { + var result = [], + i = 0, + len = line.length, + left, + up; + + result[0] = 3; + + for(; i < len; i++) { + left = line[i - colorsPerPixel] || 0; + up = prevLine && prevLine[i] || 0; + result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff; + } + + return result; + } + , filterPaeth = function(line, colorsPerPixel, prevLine) { + var result = [], + i = 0, + len = line.length, + left, + up, + upLeft, + paeth; + + result[0] = 4; + + for(; i < len; i++) { + left = line[i - colorsPerPixel] || 0; + up = prevLine && prevLine[i] || 0; + upLeft = prevLine && prevLine[i - colorsPerPixel] || 0; + paeth = paethPredictor(left, up, upLeft); + result[i + 1] = (line[i] - paeth + 0x0100) & 0xff; } - return arr; + return result; + } + ,paethPredictor = function(left, up, upLeft) { + + var p = left + up - upLeft, + pLeft = Math.abs(p - left), + pUp = Math.abs(p - up), + pUpLeft = Math.abs(p - upLeft); + + return (pLeft <= pUp && pLeft <= pUpLeft) ? left : (pUp <= pUpLeft) ? up : upLeft; + } + , getFilterMethods = function() { + return [filterNone, filterSub, filterUp, filterAverage, filterPaeth]; + } + ,getIndexOfSmallestSum = function(arrays) { + var i = 0, + len = arrays.length, + sum, min, ind; + + while(i < len) { + sum = absSum(arrays[i].slice(1)); + + if(sum < min || !min) { + min = sum; + ind = i; + } + + i++; + } + + return ind; + } + , absSum = function(array) { + var i = 0, + len = array.length, + sum = 0; + + while(i < len) + sum += Math.abs(array[i++]); + + return sum; } , logImg = function(img) { console.log("width: " + img.width); @@ -122,11 +340,11 @@ - jsPDFAPI.processPNG = function(imageData, imageIndex, alias, compress, dataAsBinaryString) { + jsPDFAPI.processPNG = function(imageData, imageIndex, alias, compression, dataAsBinaryString) { 'use strict' - var colorSpace = this.DEVICE_RGB, - compression = this.FLATE_DECODE, + var colorSpace = this.color_spaces.DEVICE_RGB, + decode = this.decode.FLATE_DECODE, bpc = 8, img, dp, trns, colors, pal, smask; @@ -146,68 +364,151 @@ img = new PNG(imageData); imageData = img.imgData; bpc = img.bits; - colorSpace = img.colorType != 3 ? img.colorSpace : this.INDEXED; + colorSpace = img.colorSpace; colors = img.colors; //logImg(img); /* - * we need to extract alpha layer and add it as a smask + * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample. + * + * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample. + * + * Extract alpha to create two separate images, using the alpha as a sMask */ - if(img.colorType === 6 && - img.pixelBitlength === 32) { - - var pixels = new Uint32Array(img.decodePixels().buffer), - len = pixels.length, - colorData = new Uint8Array(len * 3), - transData = new Uint8Array(len), - pixel, - i = 0, - n = 0; - - for(; i < len; i++) { - pixel = pixels[i]; + if([4,6].indexOf(img.colorType) !== -1) { + + /* + * processes 8 bit RGBA and grayscale + alpha images + */ + if(img.bits === 8) { + + var pixelsArrayType = window['Uint' + img.pixelBitlength + 'Array'], + pixels = new pixelsArrayType(img.decodePixels().buffer), + len = pixels.length, + imgData = new Uint8Array(len * img.colors), + alphaData = new Uint8Array(len), + pDiff = img.pixelBitlength - img.bits, + i = 0, n = 0, pixel, pbl; + + for(; i < len; i++) { + pixel = pixels[i]; + pbl = 0; + + while(pbl < pDiff) { + + imgData[n++] = ( pixel >>> pbl ) & 0xff; + pbl = pbl + img.bits; + } + + alphaData[i] = ( pixel >>> pbl ) & 0xff; + } + } + + /* + * processes 16 bit RGBA and grayscale + alpha images + */ + if(img.bits === 16) { - colorData[n++] = ( pixel >> 0 ) & 0xff; - colorData[n++] = ( pixel >> 8 ) & 0xff; - colorData[n++] = ( pixel >> 16 ) & 0xff; + var pixels = new Uint32Array(img.decodePixels().buffer), + len = pixels.length, + imgData = new Uint8Array((len * (32 / img.pixelBitlength) ) * img.colors), + alphaData = new Uint8Array(len * (32 / img.pixelBitlength) ), + hasColors = img.colors > 1, + i = 0, n = 0, a = 0, pixel; - transData[i] = ( pixel >> 24 ) & 0xff; + while(i < len) { + pixel = pixels[i++]; + + imgData[n++] = (pixel >>> 0) & 0xFF; + + if(hasColors) { + imgData[n++] = (pixel >>> 16) & 0xFF; + + pixel = pixels[i++]; + imgData[n++] = (pixel >>> 0) & 0xFF; + } + + alphaData[a++] = (pixel >>> 16) & 0xFF; + } + + bpc = 8; } - if(compress && hasCompressionJS()) { + if(canCompress(compression)) { - imageData = compressBytes.call(this, colorData, img.width, img.colors); - //smask = compressBytes.call(this, transData); - smask = this.arrayBufferToBinaryString(transData); - compression = this.FLATE_DECODE; + imageData = compressBytes(imgData, img.width * img.colors, img.colors, compression); + smask = compressBytes(alphaData, img.width, 1, compression); }else{ - imageData = colorData; - smask = this.arrayBufferToBinaryString(transData); - compression = null; + imageData = imgData; + smask = alphaData; + decode = null; + } + } + + /* + * Indexed png. Each pixel is a palette index. + */ + if(img.colorType === 3) { + + colorSpace = this.color_spaces.INDEXED; + pal = img.palette; + + if(img.transparency.indexed) { + + var trans = img.transparency.indexed; + + var total = 0, + i = 0, + len = trans.length; + + for(; i 0) - pal = img.palette; - - //I'm not sure the output from png.js is correct for this - /*if(img.transparency.indexed) - trns = img.transparency.indexed;*/ - if(this.isArrayBuffer(imageData) || this.isArrayBufferView(imageData)) imageData = this.arrayBufferToBinaryString(imageData); + if(smask && this.isArrayBuffer(smask) || this.isArrayBufferView(smask)) + smask = this.arrayBufferToBinaryString(smask); + return this.createImageInfo(imageData, img.width, img.height, colorSpace, - bpc, compression, imageIndex, alias, dp, trns, pal, smask); + bpc, decode, imageIndex, alias, dp, trns, pal, smask); } return info; diff --git a/libs/png_support/png.js b/libs/png_support/png.js index 83be09ee9..590ad2f3a 100755 --- a/libs/png_support/png.js +++ b/libs/png_support/png.js @@ -59,7 +59,7 @@ APNG_BLEND_OP_OVER = 1; function PNG(data) { - var chunkSize, colors, delayDen, delayNum, frame, i, index, key, section, short, text, _i, _j, _ref; + var chunkSize, colors, palLen, delayDen, delayNum, frame, i, index, key, section, short, text, _i, _j, _ref; this.data = data; this.pos = 8; this.palette = []; @@ -131,7 +131,15 @@ this.transparency = {}; switch (this.colorType) { case 3: + palLen = this.palette.length/3; this.transparency.indexed = this.read(chunkSize); + if(this.transparency.indexed.length > palLen) + throw new Error('More transparent colors than palette size'); + /* + * According to the PNG spec trns should be increased to the same size as palette if shorter + */ + //short = 255 - this.transparency.indexed.length; + short = palLen - this.transparency.indexed.length; if (short > 0) { for (i = _j = 0; 0 <= short ? _j < short : _j > short; i = 0 <= short ? ++_j : --_j) { this.transparency.indexed.push(255); @@ -172,10 +180,6 @@ this.colorSpace = (function() { switch (this.colors) { case 1: - //ADDED - if(this.colorType == 3) - return 'Indexed'; - //// return 'DeviceGray'; case 3: return 'DeviceRGB'; diff --git a/libs/png_support/zpipe.min.js b/libs/png_support/zpipe.min.js deleted file mode 100644 index a72971a23..000000000 --- a/libs/png_support/zpipe.min.js +++ /dev/null @@ -1,408 +0,0 @@ -!function(sb,Ab,Qa){"undefined"!==typeof module?module.exports=Qa(sb,Ab):"function"===typeof define&&"object"===typeof define.amd?define(Qa):Ab[sb]=Qa(sb,Ab)}("zpipe",this,function(sb,Ab){var Qa,Ra,yd,Jb,qc,Nc;function Cg(a){eval.call(null,a)}function Gb(a){Yb(a+":\n"+Error().stack);throw"Assertion: "+a;}function Hb(a,e){a||Gb("Assertion failed: "+e)}function qf(c,e,d){d=d||"i8";"*"===d[d.length-1]&&(d="i32");switch(d){case "i1":l[c]=e;break;case "i8":l[c]=e;break;case "i16":h[c>>1]=e;break;case "i32":a[c>> -2]=e;break;case "i64":a[c>>2]=e;break;case "float":Kb[c>>2]=e;break;case "double":de[0]=e;a[c>>2]=Oc[0];a[c+4>>2]=Oc[1];break;default:Gb("invalid type for setValue: "+d)}}function E(a,e,d){var b,f;"number"===typeof a?(b=!0,f=a):(b=!1,f=a.length);var g="string"===typeof e?e:null,d=[Pc,fa.stackAlloc,fa.staticAlloc][void 0===d?u:d](Math.max(f,g?1:e.length));if(b)return Sb(d,0,f),d;b=0;for(var i;b>2;var f=b+56,g=b+16440;a[d+8]=0;a[d+9]=0;a[d+10]=0;var i=je(b),o=0==(i|0);a:do if(o){var m=f|0,k=b+4|0,h=b|0;d=(b+16|0)>>2;var l=g|0,j=b+12|0;b:for(;;){var n=ke(m,1,16384,c);a[k>>2]=n;if(0!=(Eb(c)|0)){Lb(b);var x=-1;break a}var q=(n=0!=(Number(c in C.streams&&C.streams[c].eof)|0))? -4:1;a[h>>2]=m;c:for(;;){a[d]=16384;a[j>>2]=l;var v=rf(b,q);-2==(v|0)&&Qc(s.__str1|0,75,s.___func___def|0,s.__str2|0);var t=16384-a[d]|0,t=(za(l,1,t,e)|0)==(t|0);do if(t&&0==(Eb(e)|0)){if(0==(a[d]|0))continue c;0==(a[k>>2]|0)||Qc(s.__str1|0,82,s.___func___def|0,s.__str3|0);if(!n)continue b;1!=(v|0)&&Qc(s.__str1|0,86,s.___func___def|0,s.__str4|0);Lb(b);x=0;break a}while(0);Lb(b);x=-1;break a}}}else x=i;while(0);ma=b;return x}function le(c,e){var d,b,f=ma;ma+=32824;b=f>>2;var g=f+56,i=f+16440;a[b+8]= -0;a[b+9]=0;a[b+10]=0;b=f+4|0;a[b>>2]=0;var o=f|0;a[o>>2]=0;var m;if(0==(f|0))m=-2;else{a[f+24>>2]=0;m=f+32|0;var k=a[m>>2];0==(k|0)?(a[m>>2]=2,a[f+40>>2]=0,d=2):d=k;m=(f+36|0)>>2;0==(a[m]|0)&&(a[m]=4);k=f+40|0;d=va[d](a[k>>2],1,7116);if(0==(d|0))m=-4;else{var h=f+28|0;a[h>>2]=d;a[(d+52|0)>>2]=0;var l;if(0==(f|0))l=-2;else if(l=a[f+28>>2],0==(l|0))l=-2;else{var j=l+52|0,n=a[j>>2],x=l+36|0;0!=(n|0)&&15!=(a[x>>2]|0)&&(va[a[f+36>>2]](a[f+40>>2],n),a[(j|0)>>2]=0);a[(l+8|0)>>2]=1;a[x>>2]=15;l=sf(f)}0== -(l|0)?m=0:(va[a[m]](a[k>>2],d),a[h>>2]=0,m=l)}}k=0==(m|0);a:do if(k){h=g|0;d=(f+16|0)>>2;l=i|0;j=f+12|0;n=0;b:for(;;){x=ke(h,1,16384,c);a[b>>2]=x;if(0==(Eb(c)|0)){x=0==(x|0);c:do if(x)var q=n;else{a[o>>2]=h;d:for(;;){a[d]=16384;a[j>>2]=l;var v=me(f);if(-2==v)Qc(s.__str1|0,133,s.___func___inf|0,s.__str2|0);else if(2==v){var t=-3;break b}else if(-3==v||-4==v){t=v;break b}var w=16384-a[d]|0,w=(za(l,1,w,e)|0)==(w|0);do if(w&&0==(Eb(e)|0)){if(0==(a[d]|0))continue d;if(1==(v|0)){q=1;break c}n=v;continue b}while(0); -Rc(f);d=-1;break a}}while(0);Rc(f);d=1==(q|0)?0:-3;break a}Rc(f);d=-1;break a}Rc(f);d=t}else d=m;while(0);ma=f;return d}function tf(c){za(s.__str5|0,7,1,a[a[La>>2]+12>>2]);-1==c?(c=a[La>>2],0!=(Eb(a[c+4>>2])|0)&&(za(s.__str6|0,20,1,a[c+12>>2]),c=a[La>>2]),0!=(Eb(a[c+8>>2])|0)&&za(s.__str7|0,21,1,a[c+12>>2])):-2==c?za(s.__str8|0,26,1,a[a[La>>2]+12>>2]):-3==c?za(s.__str9|0,35,1,a[a[La>>2]+12>>2]):-4==c?za(s.__str10|0,14,1,a[a[La>>2]+12>>2]):-6==c&&za(s.__str11|0,23,1,a[a[La>>2]+12>>2])}function uf(c, -e){var d;if(1==c){var b=a[La>>2],b=ie(a[b+4>>2],a[b+8>>2]);0==(b|0)?b=0:tf(b);d=7}else if(2==c){a:{for(d=0;d>2]+d],g=l[(s.__str12|0)+d];if(f==g&&0==f)break;if(0==f){d=-1;break a}if(0==g){d=1;break a}if(f==g)d++;else{d=f>g?1:-1;break a}}d=0}0!=(d|0)?d=6:(b=a[La>>2],b=le(a[b+4>>2],a[b+8>>2]),0==(b|0)?b=0:tf(b),d=7)}else d=6;6==d&&(za(s.__str13|0,40,1,a[a[La>>2]+12>>2]),b=1);return b}function je(c){var e,d,b,f=0==(c|0);a:do if(f)var g=-2;else{g=c+24|0;a[g>>2]=0;b=(c+32|0)>>2;var i= -a[b];0==(i|0)&&(a[b]=2,a[c+40>>2]=0,i=2);var o=c+36|0;0==(a[o>>2]|0)&&(a[o>>2]=4);d=(c+40|0)>>2;i=va[i](a[d],1,5828);if(0!=(i|0)){a[c+28>>2]=i;a[i>>2]=c;a[(i+24|0)>>2]=1;a[(i+28|0)>>2]=0;a[(i+48|0)>>2]=15;e=(i+44|0)>>2;a[e]=32768;a[(i+52|0)>>2]=32767;a[(i+80|0)>>2]=15;var m=i+76|0;a[m>>2]=32768;a[(i+84|0)>>2]=32767;a[(i+88|0)>>2]=5;var h=va[a[b]](a[d],32768,2),o=i+56|0;a[o>>2]=h;var j=va[a[b]](a[d],a[e],2),h=i+64|0;a[h>>2]=j;Sb(j,0,a[e]<<1,1);m=va[a[b]](a[d],a[m>>2],2);e=i+68|0;a[e>>2]=m;a[(i+5824| -0)>>2]=0;m=i+5788|0;a[m>>2]=16384;d=b=va[a[b]](a[d],16384,4);a[(i+8|0)>>2]=b;m=k[m>>2];a[(i+12|0)>>2]=m<<2;o=0==(a[o>>2]|0);do if(!o&&0!=(a[h>>2]|0)&&!(0==(a[e>>2]|0)|0==(b|0))){a[(i+5796|0)>>2]=(m>>>1<<1)+d|0;a[(i+5784|0)>>2]=b+3*m|0;a[(i+132|0)>>2]=6;a[(i+136|0)>>2]=0;l[i+36|0]=8;g=ne(c);break a}while(0);a[(i+4|0)>>2]=666;a[g>>2]=s.__str664|0;Lb(c)}g=-4}while(0);return g}function Lb(c){var e,d,b=c>>2;if(0!=(c|0)&&(d=(c+28|0)>>2,e=a[d],0!=(e|0))){var f=a[e+4>>2];if(666==f||113==f||103==f||91==f|| -73==f||69==f||42==f){f=a[e+8>>2];0!=(f|0)&&(va[a[b+9]](a[b+10],f),e=a[d]);f=a[e+68>>2];0==(f|0)?f=e:(va[a[b+9]](a[b+10],f),f=a[d]);var g=a[f+64>>2];e=(c+36|0)>>2;0!=(g|0)&&(va[a[e]](a[b+10],g),f=a[d]);b=a[f+56>>2];0==(b|0)?(b=f,c=c+40|0):(c=c+40|0,va[a[e]](a[c>>2],b),b=a[d]);va[a[e]](a[c>>2],b);a[d]=0}}}function ne(c){var e=c>>2;if(0==(c|0))e=-2;else if(c=a[e+7],0==(c|0))e=-2;else if(0==(a[e+8]|0))e=-2;else if(0==(a[e+9]|0))e=-2;else{a[e+5]=0;a[e+2]=0;a[e+6]=0;a[e+11]=2;a[(c+20|0)>>2]=0;a[(c+16|0)>> -2]=a[c+8>>2];var d=c+24|0,b=a[d>>2];0>(b|0)&&(b=-b|0,a[d>>2]=b);d=b;a[(c+4|0)>>2]=0!=(d|0)?42:113;d=2==(d|0)?oa(0,0,0):kc(0,0,0);a[e+12]=d;a[(c+40|0)>>2]=0;a[c+2840>>2]=c+148|0;a[c+2848>>2]=Sc;a[c+2852>>2]=c+2440|0;a[c+2860>>2]=Tc;a[c+2864>>2]=c+2684|0;a[c+2872>>2]=Uc;h[c+5816>>1]=0;a[c+5820>>2]=0;a[c+5812>>2]=8;Vc(c);oe(c);e=0}return e}function oe(c){var e=c>>2;a[e+15]=a[e+11]<<1;var d=c+76|0,c=c+68|0;h[a[c>>2]+(a[d>>2]-1<<1)>>1]=0;Sb(a[c>>2],0,(a[d>>2]<<1)-2|0,1);d=k[e+33];a[e+32]=p[(Ub+2>>1)+(6* -d|0)]&65535;a[e+35]=p[(Ub>>1)+(6*d|0)]&65535;a[e+36]=p[(Ub+4>>1)+(6*d|0)]&65535;a[e+31]=p[(Ub+6>>1)+(6*d|0)]&65535;a[e+27]=0;a[e+23]=0;a[e+29]=0;a[e+30]=2;a[e+24]=2;a[e+28]=0;a[e+26]=0;a[e+18]=0}function rf(c,e){var d,b,f,g,i,o,m,ia,j,L,A,n,x,q,v,t,w,O,da,p,ga,z,r,J,F,u,B,E,C,K,D,G=c>>2,M,Q=0==(c|0);a:do if(Q)var Ma=-2;else{var N=k[G+7];D=N>>2;if(!(0==(N|0)|5>>0)){var X=0==(a[G+3]|0);do if(!X&&!(0==(a[G]|0)&&0!=(a[G+1]|0))){K=(N+4|0)>>2;var cb=k[K],db=4==(e|0);if(666!=(cb|0)|db){C=(c+16|0)>>2; -if(0==(a[C]|0)){a[G+6]=s.__str765|0;Ma=-5;break a}a[D]=c;E=(N+40|0)>>2;var ya=a[E];a[E]=e;if(42==(cb|0))if(2!=(a[D+6]|0)){var ma=(a[D+12]<<12)-30720|0;if(1<(a[D+34]|0))var Z=0;else var lc=a[D+33],Z=2>(lc|0)?0:6>(lc|0)?64:6==(lc|0)?128:192;var fa=Z|ma,Na=N+108|0,tb=0==(a[Na>>2]|0)?fa:fa|32,Aa=tb|31-(tb>>>0)%31;a[K]=113;Zb(N,Aa);B=(c+48|0)>>2;0!=(a[Na>>2]|0)&&(Zb(N,k[B]>>>16),Zb(N,a[B]&65535));var Xa=kc(0,0,0);a[B]=Xa;var Ia=a[K];M=31}else{var Da=oa(0,0,0);u=(c+48|0)>>2;a[u]=Da;F=(N+20|0)>>2;var Ya= -a[F];a[F]=Ya+1|0;J=(N+8|0)>>2;l[a[J]+Ya|0]=31;var Sa=a[F];a[F]=Sa+1|0;l[a[J]+Sa|0]=-117;var vf=a[F];a[F]=vf+1|0;l[a[J]+vf|0]=8;var Ta=N+28|0;r=Ta>>2;var jb=k[r];z=jb>>2;if(0==(jb|0)){var eb=a[F];a[F]=eb+1|0;l[a[J]+eb|0]=0;var rc=a[F];a[F]=rc+1|0;l[a[J]+rc|0]=0;var Ua=a[F];a[F]=Ua+1|0;l[a[J]+Ua|0]=0;var mc=a[F];a[F]=mc+1|0;l[a[J]+mc|0]=0;var Ba=a[F];a[F]=Ba+1|0;l[a[J]+Ba|0]=0;var Oa=a[D+33],Za=9==(Oa|0)?2:1<(a[D+34]|0)?4:2>(Oa|0)?4:0,$a=a[F];a[F]=$a+1|0;l[a[J]+$a|0]=Za;var kb=a[F];a[F]=kb+1|0;l[a[J]+ -kb|0]=3;a[K]=113;M=92}else{var fb=(0!=(a[z+11]|0)?2:0)|0!=(a[z]|0)&1|(0==(a[z+4]|0)?0:4)|(0==(a[z+7]|0)?0:8)|(0==(a[z+9]|0)?0:16),pb=a[F];a[F]=pb+1|0;l[a[J]+pb|0]=fb;var lb=a[a[r]+4>>2]&255,P=a[F];a[F]=P+1|0;l[a[J]+P|0]=lb;var aa=k[a[r]+4>>2]>>>8&255,$=k[F];a[F]=$+1|0;l[a[J]+$|0]=aa;var qa=k[a[r]+4>>2]>>>16&255,H=k[F];a[F]=H+1|0;l[a[J]+H|0]=qa;var ba=k[a[r]+4>>2]>>>24&255,V=k[F];a[F]=V+1|0;l[a[J]+V|0]=ba;var I=a[D+33],sa=9==(I|0)?2:1<(a[D+34]|0)?4:2>(I|0)?4:0,ub=a[F];a[F]=ub+1|0;l[a[J]+ub|0]=sa;var ha= -a[a[r]+12>>2]&255,ja=a[F];a[F]=ja+1|0;l[a[J]+ja|0]=ha;var ka=k[r];if(0==(a[ka+16>>2]|0))var W=ka;else{var na=a[ka+20>>2]&255,ra=a[F];a[F]=ra+1|0;l[a[J]+ra|0]=na;var pa=k[a[r]+20>>2]>>>8&255,la=k[F];a[F]=la+1|0;l[a[J]+la|0]=pa;W=a[r]}if(0!=(a[W+44>>2]|0)){var ua=oa(a[u],a[J],a[F]);a[u]=ua}a[D+8]=0;a[K]=69;var Va=Ta;ga=Va>>2;M=33}}else Ia=cb,M=31;if(31==M)if(69!=(Ia|0)){var Fa=Ia;M=50}else Va=N+28|0,ga=Va>>2,M=33;do if(33==M){var ab=k[ga];if(0==(a[ab+16>>2]|0)){a[K]=73;var T=ab;M=52}else{p=(N+20|0)>> -2;da=(N+32|0)>>2;var Y=N+12|0;O=(c+48|0)>>2;w=(N+8|0)>>2;for(var U=a[p],ca=a[da],ea=ab;;){if(ca>>>0>=(a[ea+20>>2]&65535)>>>0){var S=U,Ea=ea;break}var gb=k[p];if((gb|0)==(a[Y>>2]|0)){if(0!=(a[ea+44>>2]|0)&gb>>>0>U>>>0){var vb=oa(a[O],a[w]+U|0,gb-U|0);a[O]=vb}ta(c);var Wa=k[p];if((Wa|0)==(a[Y>>2]|0)){S=Wa;Ea=a[ga];break}var Ga=Wa,hb=Wa,qe=a[da],Wc=a[ga]}else Ga=U,hb=gb,qe=ca,Wc=ea;var mb=l[a[Wc+16>>2]+qe|0];a[p]=hb+1|0;l[a[w]+hb|0]=mb;var wb=a[da]+1|0;a[da]=wb;U=Ga;ca=wb;ea=a[ga]}if(0==(a[Ea+44>>2]| -0))var qb=Ea;else{var yb=k[p];if(yb>>>0<=S>>>0)qb=Ea;else{var ib=oa(a[O],a[w]+S|0,yb-S|0);a[O]=ib;qb=a[ga]}}(a[da]|0)==(a[qb+20>>2]|0)?(a[da]=0,a[K]=73,T=qb,M=52):(Fa=a[K],M=50)}}while(0);if(50==M)if(73!=(Fa|0)){var Pa=Fa;M=67}else T=a[D+7],M=52;do if(52==M){var Ja=N+28|0;t=Ja>>2;if(0==(a[T+28>>2]|0)){a[K]=91;var Ka=Ja;v=Ka>>2;M=69}else{q=(N+20|0)>>2;var rb=a[q],Qh=N+12|0;x=(c+48|0)>>2;n=(N+8|0)>>2;A=(N+32|0)>>2;for(var nb=rb,Bb=rb;;){if((Bb|0)==(a[Qh>>2]|0)){if(0!=(a[a[t]+44>>2]|0)&Bb>>>0>nb>>>0){var xb= -oa(a[x],a[n]+nb|0,Bb-nb|0);a[x]=xb}ta(c);var bb=k[q];if((bb|0)==(a[Qh>>2]|0)){var zb=1,Cb=bb;break}var Dg=bb,wa=bb}else Dg=nb,wa=Bb;var Rh=a[A];a[A]=Rh+1|0;var sc=y[a[a[t]+28>>2]+Rh|0],xa=sc&255;a[q]=wa+1|0;l[a[n]+wa|0]=sc;if(0==sc<<24>>24){zb=xa;Cb=Dg;break}nb=Dg;Bb=a[q]}if(0!=(a[a[t]+44>>2]|0)){var Ha=k[q];if(!(Ha>>>0<=Cb>>>0)){var La=oa(a[x],a[n]+Cb|0,Ha-Cb|0);a[x]=La}}0==(zb|0)?(a[A]=0,a[K]=91,Ka=Ja,v=Ka>>2,M=69):(Pa=a[K],M=67)}}while(0);if(67==M)if(91!=(Pa|0)){var Ca=Pa;M=84}else Ka=N+28|0,v= -Ka>>2,M=69;do if(69==M)if(0==(a[a[v]+36>>2]|0)){a[K]=103;var Vb=Ka;M=86}else{L=(N+20|0)>>2;var $b=a[L],za=N+12|0;j=(c+48|0)>>2;ia=(N+8|0)>>2;for(var Qa=N+32|0,Fb=$b,Nb=$b;;){if((Nb|0)==(a[za>>2]|0)){if(0!=(a[a[v]+44>>2]|0)&Nb>>>0>Fb>>>0){var uj=oa(a[j],a[ia]+Fb|0,Nb-Fb|0);a[j]=uj}ta(c);var ac=k[L];if((ac|0)==(a[za>>2]|0)){var Ra=1,Ib=ac;break}var Wb=ac,Bc=ac}else Wb=Fb,Bc=Nb;var Sh=a[Qa>>2];a[Qa>>2]=Sh+1|0;var bc=y[a[a[v]+36>>2]+Sh|0],Qb=bc&255;a[L]=Bc+1|0;l[a[ia]+Bc|0]=bc;if(0==bc<<24>>24){Ra=Qb; -Ib=Wb;break}Fb=Wb;Nb=a[L]}if(0!=(a[a[v]+44>>2]|0)){var nc=k[L];if(!(nc>>>0<=Ib>>>0)){var vj=oa(a[j],a[ia]+Ib|0,nc-Ib|0);a[j]=vj}}0==(Ra|0)?(a[K]=103,Vb=Ka,M=86):(Ca=a[K],M=84)}while(0);84==M&&(103!=(Ca|0)?M=92:(Vb=N+28|0,M=86));do if(86==M){if(0!=(a[a[Vb>>2]+44>>2]|0)){m=(N+20|0)>>2;var cc=k[m],oc=N+12|0,dc=k[oc>>2];if((cc+2|0)>>>0>dc>>>0){ta(c);var Ob=a[m],Th=a[oc>>2]}else Ob=cc,Th=dc;if((Ob+2|0)>>>0>Th>>>0)break;o=(c+48|0)>>2;var sb=a[o]&255;a[m]=Ob+1|0;var zd=N+8|0;l[a[zd>>2]+Ob|0]=sb;var ec=k[o]>>> -8&255,vc=k[m];a[m]=vc+1|0;l[a[zd>>2]+vc|0]=ec;var fc=oa(0,0,0);a[o]=fc}a[K]=113}while(0);i=(N+20|0)>>2;var wj=0==(a[i]|0);do{if(wj){var pc=a[G+1];if(0!=(pc|0)){var gc=pc;break}if(!((ya|0)>=(e|0)&4!=(e|0))){gc=pc;break}a[G+6]=s.__str765|0;Ma=-5;break a}ta(c);if(0==(a[C]|0)){a[E]=-1;Ma=0;break a}gc=a[G+1]}while(0);var tc=666==(a[K]|0),Uh=0==(gc|0);do{if(tc){if(Uh){M=103;break}a[G+6]=s.__str765|0;Ma=-5;break a}M=Uh?103:106}while(0);do if(103==M)if(0!=(a[D+29]|0))M=106;else{if(0==(e|0)){Ma=0;break a}M= -tc?122:106}while(0);do if(106==M){var hc=a[D+34],Pb=2==hc?wf(N,e):3==hc?xf(N,e):va[a[(Ub+8>>2)+(3*a[D+33]|0)]](N,e);2>(Pb-2|0)>>>0?a[K]=666:M=112;if(2==Pb||0==Pb){if(0!=(a[C]|0)){Ma=0;break a}a[E]=-1;Ma=0;break a}else if(1==Pb){if(1==e)yf(N);else if(5!=e&&(re(N,0,0,0),3==(e|0))){var ic=N+76|0,wc=N+68|0;h[a[wc>>2]+(a[ic>>2]-1<<1)>>1]=0;Sb(a[wc>>2],0,(a[ic>>2]<<1)-2|0,1);0==(a[D+29]|0)&&(a[D+27]=0,a[D+23]=0)}ta(c);if(0==(a[C]|0)){a[E]=-1;Ma=0;break a}}}while(0);if(!db){Ma=0;break a}g=(N+24|0)>>2;var Ab= -a[g];if(1>(Ab|0)){Ma=1;break a}f=(c+48|0)>>2;var ob=k[f];if(2==(Ab|0)){var Mb=ob&255,Db=a[i];a[i]=Db+1|0;b=(N+8|0)>>2;l[a[b]+Db|0]=Mb;var Jb=k[f]>>>8&255,Hb=k[i];a[i]=Hb+1|0;l[a[b]+Hb|0]=Jb;var Xc=k[f]>>>16&255,xc=k[i];a[i]=xc+1|0;l[a[b]+xc|0]=Xc;var Kb=k[f]>>>24&255,Eb=k[i];a[i]=Eb+1|0;l[a[b]+Eb|0]=Kb;d=(c+8|0)>>2;var Cc=a[d]&255,Dc=a[i];a[i]=Dc+1|0;l[a[b]+Dc|0]=Cc;var yc=k[d]>>>8&255,zc=k[i];a[i]=zc+1|0;l[a[b]+zc|0]=yc;var Rb=k[d]>>>16&255,Gb=k[i];a[i]=Gb+1|0;l[a[b]+Gb|0]=Rb;var Yb=k[d]>>>24&255, -Tb=k[i];a[i]=Tb+1|0;l[a[b]+Tb|0]=Yb}else Zb(N,ob>>>16),Zb(N,a[f]&65535);ta(c);var Lb=a[g];0<(Lb|0)&&(a[g]=-Lb|0);Ma=0==(a[i]|0)&1;break a}}while(0);a[G+6]=s.__str462|0}Ma=-2}while(0);return Ma}function Zb(c,e){var d;d=(c+20|0)>>2;var b=k[d];a[d]=b+1|0;var f=c+8|0;l[a[f>>2]+b|0]=e>>>8&255;b=a[d];a[d]=b+1|0;l[a[f>>2]+b|0]=e&255}function ta(c){var e,d,b;b=(c+28|0)>>2;var f=k[b],g=k[f+20>>2];d=(c+16|0)>>2;e=k[d];g=g>>>0>e>>>0?e:g;0!=(g|0)&&(e=(c+12|0)>>2,Qb(a[e],a[f+16>>2],g,1),a[e]=a[e]+g|0,f=a[b]+16| -0,a[f>>2]=a[f>>2]+g|0,c=c+20|0,a[c>>2]=a[c>>2]+g|0,a[d]=a[d]-g|0,d=a[b]+20|0,a[d>>2]=a[d>>2]-g|0,b=a[b],0==(a[b+20>>2]|0)&&(a[(b+16|0)>>2]=a[b+8>>2]))}function wf(c,e){var d,b,f,g,i,o;o=(c+116|0)>>2;var m=c+96|0;i=(c+108|0)>>2;g=(c+56|0)>>2;f=(c+5792|0)>>2;var k=c+5796|0,j=c+5784|0,L=c+5788|0;b=(c+92|0)>>2;d=(c|0)>>2;a:for(;;){var A=0==(a[o]|0);do if(A&&(Rb(c),0==(a[o]|0))){if(0==(e|0)){var n=0;break a}f=a[b];o=4==(e|0);xa(c,-1<(f|0)?a[g]+f|0:0,a[i]-f|0,o&1);a[b]=a[i];ta(a[d]);if(0==(a[a[d]+16>>2]| -0)){n=o?2:0;break a}n=o?3:1;break a}while(0);a[m>>2]=0;A=y[a[g]+a[i]|0];h[a[k>>2]+(a[f]<<1)>>1]=0;var x=a[f];a[f]=x+1|0;l[a[j>>2]+x|0]=A;A=((A&255)<<2)+c+148|0;h[A>>1]=h[A>>1]+1&65535;x=(a[f]|0)==(a[L>>2]-1|0);a[o]=a[o]-1|0;A=a[i]+1|0;a[i]=A;if(x&&(x=a[b],xa(c,-1<(x|0)?a[g]+x|0:0,A-x|0,0),a[b]=a[i],ta(a[d]),0==(a[a[d]+16>>2]|0))){n=0;break}}return n}function xf(c,e){var d,b,f,g,i,o,m,ia;m=(c+116|0)>>2;var j=0==(e|0);o=(c+96|0)>>2;i=(c+108|0)>>2;g=(c+5792|0)>>2;var L=c+5796|0,A=c+5784|0,n=c+2440|0, -x=c+5788|0;f=(c+56|0)>>2;b=(c+92|0)>>2;d=(c|0)>>2;a:for(;;){var q=k[m],v=258>q>>>0;do if(v){Rb(c);ia=k[m];if(258>ia>>>0&j){var t=0;break a}if(0!=(ia|0))if(a[o]=0,2>>0)O=ia,ia=7;else{var w=a[i];ia=22}else{g=a[b];o=4==(e|0);xa(c,-1<(g|0)?a[f]+g|0:0,a[i]-g|0,o&1);a[b]=a[i];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){t=o?2:0;break a}t=o?3:1;break a}}else{a[o]=0;var O=q;ia=7}while(0);do if(7==ia)if(q=k[i],0==(q|0))w=0,ia=22;else if(ia=k[f],v=y[ia+(q-1)|0],v<<24>>24!=l[ia+q|0]<<24>>24)w=q,ia=22;else if(v<<24>> -24!=l[q+(ia+1)|0]<<24>>24)w=q,ia=22;else{var da=q+(ia+2)|0;if(v<<24>>24!=l[da]<<24>>24)w=q,ia=22;else{for(ia=q+(ia+258)|0;;){var p=da+1|0;if(v<<24>>24!=l[p]<<24>>24){var ga=p;break}p=da+2|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+3|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+4|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+5|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+6|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}p=da+7|0;if(v<<24>>24!=l[p]<<24>>24){ga=p;break}da=da+8|0;if(!(v<<24>>24==l[da]<< -24>>24&da>>>0>>0)){ga=da;break}}v=ga-ia+258|0;v=v>>>0>O>>>0?O:v;a[o]=v;if(2>=v>>>0)w=q,ia=22;else{var z=v+253|0,r=z&255;h[a[L>>2]+(a[g]<<1)>>1]=1;q=a[g];a[g]=q+1|0;l[a[A>>2]+q|0]=r;z=((y[s.__length_code+(z&255)|0]&255|256)+1<<2)+c+148|0;h[z>>1]=h[z>>1]+1&65535;h[n>>1]=h[n>>1]+1&65535;z=(a[g]|0)==(a[x>>2]-1|0)&1;r=a[o];a[m]=a[m]-r|0;r=a[i]+r|0;a[i]=r;a[o]=0;ia=23}}}while(0);22==ia&&(z=y[a[f]+w|0],h[a[L>>2]+(a[g]<<1)>>1]=0,r=a[g],a[g]=r+1|0,l[a[A>>2]+r|0]=z,z=((z&255)<<2)+c+148|0,h[z>>1]=h[z>>1]+ -1&65535,z=(a[g]|0)==(a[x>>2]-1|0)&1,a[m]=a[m]-1|0,r=a[i]+1|0,a[i]=r);if(0!=(z|0)&&(q=a[b],xa(c,-1<(q|0)?a[f]+q|0:0,r-q|0,0),a[b]=a[i],ta(a[d]),0==(a[a[d]+16>>2]|0))){t=0;break}}return t}function Rb(c){var e,d,b,f,g=c+44|0,i=k[g>>2],o=c+60|0;b=(c+116|0)>>2;d=(c+108|0)>>2;var m=i-262|0,ia=c|0;e=(c+56|0)>>2;var l=c+72|0,j=c+88|0,A=c+84|0,n=c+112|0,x=c+92|0,q=c+76|0,v=c+68|0,t=c+64|0,w=a[b];f=i;a:for(;;){var O=k[d],w=a[o>>2]-w-O|0;if(O>>>0<(m+f|0)>>>0)O=w;else{f=k[e];Qb(f,f+i|0,i,1);a[n>>2]=a[n>>2]-i| -0;a[d]=a[d]-i|0;a[x>>2]=a[x>>2]-i|0;f=O=a[q>>2];for(O=(O<<1)+a[v>>2]|0;;){var O=O-2|0,da=p[O>>1]&65535;h[O>>1]=da>>>0>>0?0:da-i&65535;f=f-1|0;if(0==(f|0))break}f=i;for(O=(i<<1)+a[t>>2]|0;!(O=O-2|0,da=p[O>>1]&65535,h[O>>1]=da>>>0>>0?0:da-i&65535,f=f-1|0,0==(f|0)););O=w+i|0}w=a[ia>>2];if(0==(a[w+4>>2]|0))break;f=a[e]+a[b]+a[d]|0;var da=w+4|0,s=k[da>>2],O=s>>>0>O>>>0?O:s;if(0==(O|0))w=0;else{a[da>>2]=s-O|0;da=a[a[w+28>>2]+24>>2];if(1==da){var da=w+48|0,s=a[w>>2],ga=kc(a[da>>2],s,O);a[da>>2]=ga; -da=s}else 2==da?(da=w+48|0,s=a[w>>2],ga=oa(a[da>>2],s,O),a[da>>2]=ga,da=s):da=a[w>>2];s=w|0;Qb(f,da,O,1);a[s>>2]=a[s>>2]+O|0;w=w+8|0;a[w>>2]=a[w>>2]+O|0;w=O}w=a[b]+w|0;a[b]=w;2>>0?(f=k[d],O=k[e],da=y[O+f|0]&255,a[l>>2]=da,a[l>>2]=(y[f+(O+1)|0]&255^da<>2])&a[A>>2],f=262>w>>>0?14:16):f=14;do if(14==f&&0!=(a[a[ia>>2]+4>>2]|0)){f=a[g>>2];continue a}while(0);c=(c+5824|0)>>2;b=k[c];o=k[o>>2];if(b>>>0>=o>>>0)break;d=w+a[d]|0;if(b>>>0>>0){o=o-d|0;o=258>>0?258:o;Sb(a[e]+d|0,0,o,1);a[c]=o+d|0; -break}d=d+258|0;if(b>>>0>=d>>>0)break;d=d-b|0;o=o-b|0;d=d>>>0>o>>>0?o:d;Sb(a[e]+b|0,0,d,1);a[c]=a[c]+d|0;break}}function zf(c,e){var d,b,f,g,i;d=a[c+12>>2]-5|0;var o=65535>d>>>0?d:65535;i=(c+116|0)>>2;g=(c+108|0)>>2;f=(c+92|0)>>2;var m=c+44|0;b=(c+56|0)>>2;d=(c|0)>>2;a:for(;;){var h=k[i],l=2>h>>>0;do if(l){Rb(c);var j=k[i];if(0==(j|e|0)){var A=0;break a}if(0==(j|0)){A=a[f];i=4==(e|0);xa(c,-1<(A|0)?a[b]+A|0:0,a[g]-A|0,i&1);a[f]=a[g];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){A=i?2:0;break a}A=i?3:1;break a}}else j= -h;while(0);l=a[g]+j|0;a[g]=l;a[i]=0;h=k[f];j=h+o|0;if(!(0!=(l|0)&l>>>0>>0)){a[i]=l-j|0;a[g]=j;xa(c,-1<(h|0)?a[b]+h|0:0,o,0);a[f]=a[g];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){A=0;break}l=a[g];h=a[f]}l=l-h|0;if(!(l>>>0<(a[m>>2]-262|0)>>>0)&&(xa(c,-1<(h|0)?a[b]+h|0:0,l,0),a[f]=a[g],ta(a[d]),0==(a[a[d]+16>>2]|0))){A=0;break}}return A}function Yc(c,e){var d=c>>2,b=k[d+31],f=k[d+14],g=k[d+27],i=f+g|0,o=k[d+30],m=k[d+36],h=a[d+11]-262|0,h=g>>>0>h>>>0?g-h|0:0,j=a[d+16],L=a[d+13],A=g+(f+258)|0,n=k[d+29],m=m>>> -0>n>>>0?n:m,x=c+112|0,q=g+(f+1)|0,v=g+(f+2)|0,t=g+257|0,w=l[f+o+g|0],O=e,d=o>>>0>>0?b:b>>>2,b=l[f+(g-1)+o|0];a:for(;;){var y=f+O|0,s=l[f+O+o|0]<<24>>24==w<<24>>24;do if(s)if(l[f+(o-1)+O|0]<<24>>24!=b<<24>>24)var ga=w,z=b,r=o;else if(l[y]<<24>>24!=l[i]<<24>>24)ga=w,z=b,r=o;else if(l[O+(f+1)|0]<<24>>24!=l[q]<<24>>24)ga=w,z=b,r=o;else{ga=v;for(z=O+(f+2)|0;;){r=ga+1|0;if(l[r]<<24>>24!=l[z+1|0]<<24>>24){var J=r;break}r=ga+2|0;if(l[r]<<24>>24!=l[z+2|0]<<24>>24){J=r;break}r=ga+3|0;if(l[r]<<24>> -24!=l[z+3|0]<<24>>24){J=r;break}r=ga+4|0;if(l[r]<<24>>24!=l[z+4|0]<<24>>24){J=r;break}r=ga+5|0;if(l[r]<<24>>24!=l[z+5|0]<<24>>24){J=r;break}r=ga+6|0;if(l[r]<<24>>24!=l[z+6|0]<<24>>24){J=r;break}r=ga+7|0;if(l[r]<<24>>24!=l[z+7|0]<<24>>24){J=r;break}ga=ga+8|0;z=z+8|0;if(!(l[ga]<<24>>24==l[z]<<24>>24&ga>>>0>>0)){J=ga;break}}z=J-A|0;r=z+258|0;if((r|0)<=(o|0))ga=w,z=b,r=o;else{a[x>>2]=O;if((r|0)>=(m|0)){var F=r;break a}ga=l[f+r+g|0];z=l[f+t+z|0]}}else ga=w,z=b,r=o;while(0);O=p[j+((O&L)<<1)>>1]&65535; -if(O>>>0<=h>>>0){F=r;break}d=d-1|0;if(0==(d|0)){F=r;break}w=ga;b=z;o=r}return F>>>0>n>>>0?n:F}function Af(c,e){var d,b,f,g,i,o,m,ia,j,L,A,n;A=(c+116|0)>>2;var x=0==(e|0);L=(c+72|0)>>2;j=(c+88|0)>>2;ia=(c+108|0)>>2;m=(c+56|0)>>2;o=(c+84|0)>>2;i=(c+68|0)>>2;var q=c+52|0,v=c+64|0,t=c+44|0;g=(c+96|0)>>2;var w=c+112|0;f=(c+5792|0)>>2;var O=c+5796|0,da=c+5784|0,E=c+5788|0,ga=c+128|0;b=(c+92|0)>>2;d=(c|0)>>2;a:for(;;){var z=262>k[A]>>>0;do if(z){Rb(c);n=k[A];if(262>n>>>0&x){var r=0;break a}if(0==(n|0)){f= -a[b];g=4==(e|0);xa(c,-1<(f|0)?a[m]+f|0:0,a[ia]-f|0,g&1);a[b]=a[ia];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){r=g?2:0;break a}r=g?3:1;break a}else n=2>>0?5:8}else n=5;while(0);if(5==n)if(z=k[ia],n=(y[a[m]+z+2|0]&255^a[L]<>1],h[a[v>>2]+((a[q>>2]&z)<<1)>>1]=n,z=n&65535,h[a[i]+(a[L]<<1)>>1]=a[ia]&65535,0==n<<16>>16)n=8;else if((a[ia]-z|0)>>>0>(a[t>>2]-262|0)>>>0)n=8;else{var J=Yc(c,z);a[g]=J;n=9}8==n&&(J=a[g]);if(2>>0){z=J+253|0;n=a[ia]-a[w>>2]&65535;h[a[O>>2]+(a[f]<< -1)>>1]=n;var F=a[f];a[f]=F+1|0;l[a[da>>2]+F|0]=z&255;n=n-1&65535;z=((y[s.__length_code+(z&255)|0]&255|256)+1<<2)+c+148|0;h[z>>1]=h[z>>1]+1&65535;z=n&65535;z=((y[s.__dist_code+(256>(n&65535)?z:(z>>>7)+256|0)|0]&255)<<2)+c+2440|0;h[z>>1]=h[z>>1]+1&65535;z=(a[f]|0)==(a[E>>2]-1|0)&1;n=k[g];F=a[A]-n|0;a[A]=F;if(n>>>0<=k[ga>>2]>>>0&2>>0){for(a[g]=n-1|0;!(F=k[ia],n=F+1|0,a[ia]=n,F=(y[a[m]+F+3|0]&255^a[L]<>2]+((a[q>>2]&n)<<1)>>1]=h[a[i]+(F<<1)>>1],h[a[i]+(a[L]<<1)>>1]=a[ia]&65535, -n=a[g]-1|0,a[g]=n,0==(n|0)););n=a[ia]+1|0;a[ia]=n}else{n=a[ia]+n|0;a[ia]=n;a[g]=0;var F=k[m],u=y[F+n|0]&255;a[L]=u;a[L]=(y[n+(F+1)|0]&255^u<>2]+(a[f]<<1)>>1]=0,n=a[f],a[f]=n+1|0,l[a[da>>2]+n|0]=z,z=((z&255)<<2)+c+148|0,h[z>>1]=h[z>>1]+1&65535,z=(a[f]|0)==(a[E>>2]-1|0)&1,a[A]=a[A]-1|0,n=a[ia]+1|0,a[ia]=n;if(0!=(z|0)&&(z=a[b],xa(c,-1<(z|0)?a[m]+z|0:0,n-z|0,0),a[b]=a[ia],ta(a[d]),0==(a[a[d]+16>>2]|0))){r=0;break}}return r}function se(c,e){var d,b,f,g,i,o,m,j, -R,L,A,n,x,q,v,t;v=(c+116|0)>>2;var w=0==(e|0);q=(c+72|0)>>2;var O=c+88|0;x=(c+108|0)>>2;n=(c+56|0)>>2;var da=c+84|0;A=(c+68|0)>>2;var E=c+52|0,ga=c+64|0;L=(c+96|0)>>2;R=(c+120|0)>>2;j=(c+112|0)>>2;m=(c+100|0)>>2;o=(c+5792|0)>>2;i=(c+5796|0)>>2;g=(c+5784|0)>>2;var z=c+5788|0;f=(c+104|0)>>2;b=(c+92|0)>>2;d=(c|0)>>2;var r=c+128|0,J=c+44|0,F=c+136|0;a:for(;;){for(var u=a[v];;){u=262>u>>>0;do if(u){Rb(c);t=k[v];if(262>t>>>0&w){var B=0;break a}if(0!=(t|0))if(2>>0)t=7;else{a[R]=a[L];a[m]=a[j];var D=a[L]= -2;t=15}else{0!=(a[f]|0)&&(m=y[a[n]+(a[x]-1)|0],h[a[i]+(a[o]<<1)>>1]=0,i=a[o],a[o]=i+1|0,l[a[g]+i|0]=m,g=((m&255)<<2)+c+148|0,h[g>>1]=h[g>>1]+1&65535,a[f]=0);f=k[b];g=4==(e|0);xa(c,-1<(f|0)?a[n]+f|0:0,a[x]-f|0,g&1);a[b]=a[x];ta(a[d]);if(0==(a[a[d]+16>>2]|0)){B=g?2:0;break a}B=g?3:1;break a}}else t=7;while(0);do if(7==t){t=k[x];u=(y[a[n]+t+2|0]&255^a[q]<>2])&a[da>>2];a[q]=u;u=p[a[A]+(u<<1)>>1];h[a[ga>>2]+((a[E>>2]&t)<<1)>>1]=u;t=u&65535;h[a[A]+(a[q]<<1)>>1]=a[x]&65535;var C=k[L];a[R]=C;a[m]=a[j]; -a[L]=2;if(0==u<<16>>16)D=2,t=15;else if(C>>>0>=k[r>>2]>>>0){var K=C,Q=2;t=16}else{if((a[x]-t|0)>>>0>(a[J>>2]-262|0)>>>0)D=2;else if(D=Yc(c,t),a[L]=D,!(6<=D>>>0)){if(1!=(a[F>>2]|0)){if(3!=(D|0)){t=15;break}if(4096>=(a[x]-a[j]|0)>>>0){D=3;t=15;break}}D=a[L]=2}t=15}}while(0);15==t&&(K=a[R],Q=D);if(!(3>K>>>0|Q>>>0>K>>>0))break;if(0==(a[f]|0))a[f]=1,a[x]=a[x]+1|0,u=a[v]-1|0,a[v]=u;else if(u=y[a[n]+(a[x]-1)|0],h[a[i]+(a[o]<<1)>>1]=0,t=a[o],a[o]=t+1|0,l[a[g]+t|0]=u,u=((u&255)<<2)+c+148|0,h[u>>1]=h[u>>1]+ -1&65535,(a[o]|0)==(a[z>>2]-1|0)&&(u=a[b],xa(c,-1<(u|0)?a[n]+u|0:0,a[x]-u|0,0),a[b]=a[x],ta(a[d])),a[x]=a[x]+1|0,u=a[v]-1|0,a[v]=u,0==(a[a[d]+16>>2]|0)){B=0;break a}}C=k[x];u=C-3+a[v]|0;t=K+253|0;C=C+65535-a[m]&65535;h[a[i]+(a[o]<<1)>>1]=C;var G=a[o];a[o]=G+1|0;l[a[g]+G|0]=t&255;C=C-1&65535;t=((y[s.__length_code+(t&255)|0]&255|256)+1<<2)+c+148|0;h[t>>1]=h[t>>1]+1&65535;t=C&65535;t=((y[s.__dist_code+(256>(C&65535)?t:(t>>>7)+256|0)|0]&255)<<2)+c+2440|0;h[t>>1]=h[t>>1]+1&65535;t=a[o];C=a[z>>2]-1|0;G= -a[R];a[v]=1-G+a[v]|0;for(var G=G-2|0,M=a[R]=G;;){var X=k[x],G=X+1|0;a[x]=G;G>>>0>u>>>0?G=M:(M=(y[a[n]+X+3|0]&255^a[q]<>2])&a[da>>2],a[q]=M,h[a[ga>>2]+((a[E>>2]&G)<<1)>>1]=h[a[A]+(M<<1)>>1],h[a[A]+(a[q]<<1)>>1]=a[x]&65535,G=a[R]);G=G-1|0;a[R]=G;if(0==(G|0))break;M=G}t=(t|0)==(C|0);a[f]=0;a[L]=2;u=a[x]+1|0;a[x]=u;if(t&&(t=a[b],xa(c,-1<(t|0)?a[n]+t|0:0,u-t|0,0),a[b]=a[x],ta(a[d]),0==(a[a[d]+16>>2]|0))){B=0;break}}return B}function sf(c){var e=c>>2;0==(c|0)?e=-2:(c=a[e+7],0==(c|0)?e=-2:(a[(c+28| -0)>>2]=0,a[e+5]=0,a[e+2]=0,a[e+6]=0,a[e+12]=1,a[(c|0)>>2]=0,a[(c+4|0)>>2]=0,a[(c+12|0)>>2]=0,a[(c+20|0)>>2]=32768,a[(c+32|0)>>2]=0,a[(c+40|0)>>2]=0,a[(c+44|0)>>2]=0,a[(c+48|0)>>2]=0,a[(c+56|0)>>2]=0,a[(c+60|0)>>2]=0,e=c+1328|0,a[(c+108|0)>>2]=e,a[(c+80|0)>>2]=e,a[(c+76|0)>>2]=e,a[(c+7104|0)>>2]=1,a[(c+7108|0)>>2]=-1,e=0));return e}function me(c){var e,d,b,f,g,i,o,m,j,R,L,A,n,x,q,v,t,w,O,da,u,ga,z,r,J,F,E=ma;ma+=4;var B,C=0==(c|0);a:do if(C)var D=-2;else{var K=a[c+28>>2];if(0==(K|0))D=-2;else{F=(c+ -12|0)>>2;var Q=a[F];if(0==(Q|0))D=-2;else{J=(c|0)>>2;var G=a[J];if(0==(G|0)&&0!=(a[c+4>>2]|0))D=-2;else{var M=K;r=(K|0)>>2;var X=a[r];if(11==(X|0)){a[r]=12;var Ma=a[F],N=a[J],Z=12}else Ma=Q,N=G,Z=X;z=(c+16|0)>>2;var cb=a[z];ga=(c+4|0)>>2;var db=k[ga];u=(K+56|0)>>2;da=(K+60|0)>>2;O=(K+8|0)>>2;w=(K+24|0)>>2;var ya=E|0,pe=E+1|0;t=(K+16|0)>>2;v=(K+32|0)>>2;q=(c+24|0)>>2;var fa=K+36|0,lc=K+20|0;x=(c+48|0)>>2;n=(K+64|0)>>2;var wa=K+12|0;A=(K+4|0)>>2;L=(K+7108|0)>>2;var Na=K+84|0;R=Na>>2;var tb=K+76|0;j= -(K+72|0)>>2;var Aa=K+7112|0;m=(K+68|0)>>2;var Xa=K+44|0,Ia=K+7104|0,Da=K+48|0,Ya=K+52|0,Sa=K+40|0;o=(c+20|0)>>2;i=(K+28|0)>>2;var vf=E+2|0,Ta=E+3|0;g=(K+96|0)>>2;f=(K+100|0)>>2;var jb=K+92|0;b=(K+104|0)>>2;var eb=K+112|0;d=eb>>1;var rc=K+108|0,Ua=rc,mc=rc|0,Ba=K+1328|0,Oa=K+76|0,Za=eb,$a=K+752|0,kb=K+624|0,fb=K+80|0,pb=K+88|0,lb=K+80|0,P=0,aa=N,$=Ma,qa=db,H=cb,ba=a[u],V=a[da],I=cb,sa=Z;b:for(;;){c:do if(0==sa){var ub=k[O];if(0==(ub|0)){a[r]=12;var ha=P,ja=aa,ka=$,W=qa,na=H,ra=ba,pa=V,la=I}else{for(var ua= -aa,Va=qa,Fa=ba,ab=V;!(16<=ab>>>0);){if(0==(Va|0)){var T=P,Y=ua,U=0,ca=Fa,ea=ab,S=I;break b}var Ea=((y[ua]&255)<>2]=-1,Ga=a[O];var hb=0==(Ga&1|0);do if(!hb&&0==((((Fa<<8&65280)+(Fa>>>8)|0)>>>0)%31|0)){if(8==(Fa&15|0)){var qe=Fa>>>4,Wc=ab-4|0,mb=(qe& -15)+8|0,wb=k[fa>>2],qb=0==(wb|0);do{if(!qb){if(mb>>>0<=wb>>>0)break;a[q]=s.__str317|0;a[r]=29;ha=P;ja=ua;ka=$;W=Va;na=H;ra=qe;pa=Wc;la=I;B=265;break c}a[fa>>2]=mb}while(0);a[lc>>2]=1<>>12&2^11;ha=P;ja=ua;ka=$;W=Va;na=H;pa=ra=0;la=I;B=265;break c}a[q]=s.__str216|0;a[r]=29;ha=P;ja=ua;ka=$;W=Va;na=H;ra=Fa;pa=ab;la=I;B=265;break c}while(0);a[q]=s.__str115|0;a[r]=29;ha=P;ja=ua;ka=$;W=Va;na=H;ra=Fa;pa=ab}la=I}B=265}else if(1==sa){for(var ib=aa,Pa=qa,Ja=ba,Ka= -V;!(16<=Ka>>>0);){if(0==(Pa|0)){T=P;Y=ib;U=0;ca=Ja;ea=Ka;S=I;break b}var rb=((y[ib]&255)<>2]=Ja>>>8&1,nb=a[t];if(0!=(nb&512|0)){l[ya]=Ja&255;l[pe]=Ja>>>8&255;var Bb=oa(a[w],ya,2);a[w]=Bb}a[r]=2;var xb=ib,bb=Pa,zb=0,Cb=0;B=43}else a[q]=s.__str418|0,a[r]=29,ha=P,ja=ib,ka=$,W=Pa,na=H, -ra=Ja,pa=Ka,la=I,B=265}else if(2==sa)xb=aa,bb=qa,zb=ba,Cb=V,B=43;else if(3==sa){var ta=aa,Ha=qa,xa=ba,sc=V;B=51}else if(4==sa){var Ca=aa,za=qa,La=ba,Qa=V;B=59}else if(5==sa){var Vb=aa,$b=qa,Ra=ba,Ab=V;B=70}else if(6==sa){var Fb=aa,Nb=qa,ob=ba,ac=V,Db=a[t];B=80}else if(7==sa){var Ib=aa,Wb=qa,Bc=ba,sb=V;B=93}else if(8==sa){var bc=aa,Hb=qa,nc=ba,Eb=V;B=106}else if(9==sa){for(var cc=aa,oc=qa,dc=ba,Ob=V;!(32<=Ob>>>0);){if(0==(oc|0)){T=P;Y=cc;U=0;ca=dc;ea=Ob;S=I;break b}var Mb=((y[cc]&255)<>>(Kb>>>0),wc=V-Kb|0;!(32<=wc>>>0);){if(0==(Pb|0)){T=P;Y=hc;U=0;ca=ic;ea=wc;S=I;break b}var Sb=((y[hc]&255)<>>16^65535|0)){a[n]=Tb;a[r]=14;var Lb=hc,Rb=Pb,Yb=0,Ub=0;B=140}else a[q]= -s.__str721|0,a[r]=29,ha=P,ja=hc,ka=$,W=Pb,na=H,ra=ic,pa=wc,la=I,B=265}else if(14==sa)Lb=aa,Rb=qa,Yb=ba,Ub=V,B=140;else if(15==sa){var Xc=aa,xc=qa,Zb=ba,jc=V;B=141}else if(16==sa){for(var Cc=aa,Dc=qa,yc=ba,zc=V;!(14<=zc>>>0);){if(0==(Dc|0)){T=P;Y=Cc;U=0;ca=yc;ea=zc;S=I;break b}var vd=((y[Cc]&255)<>>5&31)+1|0;a[f]=Oc;a[jb>>2]=(yc>>>10&15)+4|0;var Qc=yc>>>14,Rc=zc-14|0;if(286>>0|30>>0)a[q]=s.__str822|0,a[r]= -29,ha=P,ja=Cc,ka=$,W=Dc,na=H,ra=Qc,pa=Rc,la=I,B=265;else{a[b]=0;a[r]=17;var te=Cc,ue=Dc,ve=Qc,we=Rc;B=151}}else if(17==sa)te=aa,ue=qa,ve=ba,we=V,B=151;else if(18==sa){var uc=P,Sc=aa,Tc=qa,jd=ba,nd=V;B=161}else if(19==sa){var pd=P,rd=aa,sd=qa,ud=ba,yd=V;B=202}else if(20==sa){var Ec=P,Nc=aa,Bf=qa,Pc=ba,Uc=V;B=203}else if(21==sa){var Vc=P,Yc=aa,kd=qa,ld=ba,md=V,Zc=a[j];B=224}else if(22==sa){var xe=P,$d=aa,ae=qa,be=ba,ce=V;B=231}else if(23==sa){var od=P,qd=aa,td=qa,wd=ba,xd=V,$c=a[j];B=245}else if(24== -sa){var Cf=P,Df=aa,Ef=qa,Ff=ba,Gf=V;B=251}else if(25==sa){if(0==(H|0)){T=P;Y=aa;U=qa;ca=ba;ea=V;S=I;break b}l[$]=a[n]&255;a[r]=20;ha=P;ja=aa;ka=$+1|0;W=qa;na=H-1|0;ra=ba;pa=V;la=I;B=265}else if(26==sa){var nf=0==(a[O]|0);do{if(!nf){for(var Ad=aa,ye=qa,Bd=ba,Cd=V;!(32<=Cd>>>0);){if(0==(ye|0)){T=P;Y=Ad;U=0;ca=Bd;ea=Cd;S=I;break b}var qf=((y[Ad]&255)<>> -0);){if(0==(bb|0)){T=P;Y=xb;U=0;ca=zb;ea=Cb;S=I;break b}var rf=((y[xb]&255)<>2]=zb);if(0!=(a[t]&512|0)){l[ya]=zb&255;l[pe]=zb>>>8&255;l[vf]=zb>>>16&255;l[Ta]=zb>>>24&255;var sf=oa(a[w],ya,4);a[w]=sf}a[r]=3;ta=xb;Ha=bb;sc=xa=0;B=51}else if(119==B){if(0==(a[wa>>2]|0)){a[F]=$;a[z]=H;a[J]=zd;a[ga]=ec;a[u]=vc;a[da]=fc;D=2;break a}var me=kc(0,0,0);a[w]=me;a[x]=me;a[r]=11;Gb=zd;pc=ec;gc=vc;tc=fc;B=122}else if(140==B)a[r]=15, -Xc=Lb,xc=Rb,Zb=Yb,jc=Ub,B=141;else if(151==B){for(;;){var Ae=k[b];if(Ae>>>0>=k[jb>>2]>>>0)break;for(var Be=te,Mf=ue,Ce=ve,Dd=we;!(3<=Dd>>>0);){if(0==(Mf|0)){T=P;Y=Be;U=0;ca=Ce;ea=Dd;S=I;break b}var tf=((y[Be]&255)<>1]&65535)<<1>>1)+d]=Ce&7;te=Be;ue=Mf;ve=Ce>>>3;we=Dd-3|0}var uf=19>Ae>>>0;d:do if(uf)for(var Fg=Ae;;){a[b]=Fg+1|0;h[((p[Eg+(Fg<<1)>>1]&65535)<<1>>1)+d]=0;var ne=k[b];if(19<=ne>>>0)break d;Fg=ne}while(0);a[mc>>2]= -Ba;a[Oa>>2]=Ba;a[R]=7;var oe=Nf(0,Za,19,Ua,Na,$a);0==(oe|0)?(a[b]=0,a[r]=18,uc=0,Sc=te,Tc=ue,jd=ve,nd=we,B=161):(a[q]=s.__str923|0,a[r]=29,ha=oe,ja=te,ka=$,W=ue,na=H,ra=ve,pa=we,la=I,B=265)}else if(283==B){var wf=0==(a[O]|0);do{if(!wf){if(0==(a[t]|0)){var Gg=Hf,Hg=If,Ig=Jf,Jg=Kf;break}for(var Ed=Hf,De=If,Ee=Jf,Fd=Kf;!(32<=Fd>>>0);){if(0==(De|0)){T=P;Y=Ed;U=0;ca=Ee;ea=Fd;S=Lf;break b}var xf=((y[Ed]&255)<>>0);){if(0==(Ha|0)){T=P;Y=ta;U=0;ca=xa;ea=sc;S=I;break b}var yf=((y[ta]&255)<>2]=xa&255,a[(a[v]+12|0)>>2]=xa>>>8);if(0!=(a[t]&512|0)){l[ya]=xa&255;l[pe]=xa>>>8&255;var zf=oa(a[w],ya,2);a[w]=zf}a[r]=4;Ca=ta;za=Ha;Qa=La=0;B=59}else if(122== -B){if(0==(a[A]|0)){for(var Fe=Gb,Of=pc,Gd=gc,Hd=tc;!(3<=Hd>>>0);){if(0==(Of|0)){T=P;Y=Fe;U=0;ca=Gd;ea=Hd;S=I;break b}var Af=((y[Fe]&255)<>>1&3;if(0==Pf)a[r]=13;else if(1==Pf){var Qf=M;a[Qf+76>>2]=Wh|0;a[Qf+84>>2]=9;a[Qf+80>>2]=Xh|0;a[Qf+88>>2]=5;a[r]=19}else 2==Pf?a[r]=16:3==Pf&&(a[q]=s.__str620|0,a[r]=29);ha=P;ja=Fe;ka=$;W=Of;na=H;ra=Gd>>>3;pa=Hd-3|0}else{var se=tc&7;a[r]=26;ha=P;ja=Gb;ka=$;W=pc;na=H;ra=gc>>>(se>>>0);pa=tc-se|0}la= -I;B=265}else if(141==B){var Kg=k[n];if(0==(Kg|0))a[r]=11,ha=P,ja=Xc,ka=$,W=xc,na=H;else{var cf=Kg>>>0>xc>>>0?xc:Kg,ad=cf>>>0>H>>>0?H:cf;if(0==(ad|0)){T=P;Y=Xc;U=xc;ca=Zb;ea=jc;S=I;break b}Qb($,Xc,ad,1);var ng=xc-ad|0,og=Xc+ad|0,pg=H-ad|0,qg=$+ad|0;a[n]=a[n]-ad|0;ha=P;ja=og;ka=qg;W=ng;na=pg}ra=Zb;pa=jc;la=I;B=265}else if(161==B){var Fc=Sc,Gc=Tc,Hc=jd,Ic=nd;d:for(;;){var bd=k[b],df=k[g],ef=a[f]+df|0;if(bd>>>0>>0){for(var rg=(1<>2],Jc=Fc,cd=Gc,Kc=Hc,Ac=Ic;;){var gf=rg&Kc,Xb=y[(gf<< -2)+ff+1|0]&255;if(Xb>>>0<=Ac>>>0)break;if(0==(cd|0)){T=uc;Y=Jc;U=0;ca=Kc;ea=Ac;S=I;break b}var sg=((y[Jc]&255)<>1];if(16>(Rf&65535)){for(var Ge=Jc,Sf=cd,Tf=Kc,Id=Ac;!(Id>>>0>=Xb>>>0);){if(0==(Sf|0)){T=uc;Y=Ge;U=0;ca=Tf;ea=Id;S=I;break b}var tg=((y[Ge]&255)<>>(Xb>>>0),vg=Id-Xb|0;a[b]=bd+1|0;h[(bd<<1>>1)+d]=Rf;Fc=Ge;Gc=Sf;Hc=ug;Ic=vg}else{if(16==Rf){for(var wg=Xb+2|0,Jd=Jc,He= -cd,Uf=Kc,Kd=Ac;!(Kd>>>0>=wg>>>0);){if(0==(He|0)){T=uc;Y=Jd;U=0;ca=Uf;ea=Kd;S=I;break b}var xg=((y[Jd]&255)<>>(Xb>>>0),hf=Kd-Xb|0;if(0==(bd|0)){a[q]=s.__str1024|0;a[r]=29;ha=uc;ja=Jd;ka=$;W=He;na=H;ra=Lg;pa=hf;la=I;B=265;break c}var Mg=h[(bd-1<<1>>1)+d],Vf=Jd,Wf=He,Xf=Lg>>>2,Yf=hf-2|0,Zf=(Lg&3)+3|0}else if(17==Rf){for(var yg=Xb+3|0,Ie=Jc,$f=cd,ag=Kc,Ld=Ac;!(Ld>>>0>=yg>>>0);){if(0==($f|0)){T=uc;Y=Ie;U=0;ca=ag;ea=Ld;S=I;break b}var zg=((y[Ie]&255)<< -Ld)+ag|0,Ie=Ie+1|0,$f=$f-1|0,ag=zg,Ld=Ld+8|0}var jf=ag>>>(Xb>>>0),Mg=0,Vf=Ie,Wf=$f,Xf=jf>>>3,Yf=-3-Xb+Ld|0,Zf=(jf&7)+3|0}else{for(var Ag=Xb+7|0,Je=Jc,bg=cd,cg=Kc,Md=Ac;!(Md>>>0>=Ag>>>0);){if(0==(bg|0)){T=uc;Y=Je;U=0;ca=cg;ea=Md;S=I;break b}var Bg=((y[Je]&255)<>>(Xb>>>0),Mg=0,Vf=Je,Wf=bg,Xf=kf>>>7,Yf=-7-Xb+Md|0,Zf=(kf&127)+11|0}if((bd+Zf|0)>>>0>ef>>>0){a[q]=s.__str1024|0;a[r]=29;ha=uc;ja=Vf;ka=$;W=Wf;na=H;ra=Xf;pa=Yf;la=I;B=265;break c}for(var lf= -Zf,Ng=bd;;){var mf=lf-1|0;a[b]=Ng+1|0;h[(Ng<<1>>1)+d]=Mg;if(0==(mf|0)){Fc=Vf;Gc=Wf;Hc=Xf;Ic=Yf;continue d}lf=mf;Ng=a[b]}}}else{if(29==(a[r]|0)){ha=uc;ja=Fc;ka=$;W=Gc;na=H;ra=Hc;pa=Ic;la=I;B=265;break c}if(0==h[kb>>1]<<16>>16){a[q]=s.__str1125|0;a[r]=29;ha=uc;ja=Fc;ka=$;W=Gc;na=H;ra=Hc;pa=Ic;la=I;B=265;break c}a[mc>>2]=Ba;a[Oa>>2]=Ba;a[R]=9;var of=Nf(1,Za,df,Ua,Na,$a);if(0!=(of|0)){a[q]=s.__str1226|0;a[r]=29;ha=of;ja=Fc;ka=$;W=Gc;na=H;ra=Hc;pa=Ic;la=I;B=265;break c}a[fb>>2]=a[Ua>>2];a[pb>>2]=6;var pf= -Nf(2,(a[g]<<1)+Za|0,a[f],Ua,pb,$a);if(0==(pf|0)){a[r]=19;pd=0;rd=Fc;sd=Gc;ud=Hc;yd=Ic;B=202;break c}a[q]=s.__str1327|0;a[r]=29;ha=pf;ja=Fc;ka=$;W=Gc;na=H;ra=Hc;pa=Ic;la=I;B=265;break c}}}while(0);do if(59==B){var Yh=k[t],Cg=0==(Yh&1024|0);do if(Cg){var Zh=a[v];if(0==(Zh|0))var Og=Ca,Pg=za,Qg=La,Rg=Qa;else a[(Zh+16|0)>>2]=0,Og=Ca,Pg=za,Qg=La,Rg=Qa}else{for(var Ke=Ca,dg=za,dd=La,Le=Qa;!(16<=Le>>>0);){if(0==(dg|0)){T=P;Y=Ke;U=0;ca=dd;ea=Le;S=I;break b}var Gh=((y[Ke]&255)<>2]=dd,ai=a[t];if(0!=(ai&512|0)){l[ya]=dd&255;l[pe]=dd>>>8&255;var Hh=oa(a[w],ya,2);a[w]=Hh}Og=Ke;Pg=dg;Rg=Qg=0}while(0);a[r]=5;Vb=Og;$b=Pg;Ra=Qg;Ab=Rg;B=70}else 202==B&&(a[r]=20,Ec=pd,Nc=rd,Bf=sd,Pc=ud,Uc=yd,B=203);while(0);do if(70==B){var Me=k[t];if(0==(Me&1024|0))var bi=Vb,ci=$b,di=Me;else{var eg=k[n],ed=eg>>>0>$b>>>0?$b:eg;if(0==(ed|0))var Sg=Vb,Tg=$b,ei=eg,fi=Me;else{var gi=k[v];e=gi>>2;if(0==(gi|0))var fg=Me;else{var hi= -a[e+4];if(0==(hi|0))fg=Me;else{var Ug=a[e+5]-eg|0,ii=k[e+6];Qb(hi+Ug|0,Vb,(Ug+ed|0)>>>0>ii>>>0?ii-Ug|0:ed,1);fg=a[t]}}if(0!=(fg&512|0)){var Ih=oa(a[w],Vb,ed);a[w]=Ih}var Jh=$b-ed|0,Kh=Vb+ed|0,ji=a[n]-ed|0;a[n]=ji;Sg=Kh;Tg=Jh;ei=ji;fi=fg}if(0!=(ei|0)){T=P;Y=Sg;U=Tg;ca=Ra;ea=Ab;S=I;break b}bi=Sg;ci=Tg;di=fi}a[n]=0;a[r]=6;Fb=bi;Nb=ci;ob=Ra;ac=Ab;Db=di;B=80}else if(203==B)if(5>>0&257>>0){a[F]=$;a[z]=H;a[J]=Nc;a[ga]=Bf;a[u]=Pc;a[da]=Uc;ki(c,I);var Lh=a[F],Mh=a[z],Nh=a[J],Oh=a[ga],Ph=a[u],xj=a[da]; -11==(a[r]|0)&&(a[L]=-1);ha=Ec;ja=Nh;ka=Lh;W=Oh;na=Mh;ra=Ph;pa=xj;la=I;B=265}else{a[L]=0;for(var yj=(1<>2],fd=Nc,Od=Bf,gd=Pc,Lc=Uc;;){var Vg=yj&gd,Wg=y[(Vg<<2)+Nd+1|0],Mc=Wg&255;if(Mc>>>0<=Lc>>>0)break;if(0==(Od|0)){T=Ec;Y=fd;U=0;ca=gd;ea=Lc;S=I;break b}var zj=((y[fd]&255)<>1],li=Xg&255,Aj=0==Xg<<24>>24;do if(Aj)var Pd=fd,Qd=Od,Zg=gd,$g=Lc,gg=0,ah=Wg,bh=Yg,ch=0;else if(0!=(li&240|0))Pd=fd,Qd=Od, -Zg=gd,$g=Lc,gg=Xg,ah=Wg,bh=Yg,ch=0;else{for(var Bj=Yg&65535,Cj=(1<>>(Mc>>>0))+Bj|0,mi=y[(dh<<2)+Nd+1|0];if(((mi&255)+Mc|0)>>>0<=Rd>>>0)break;if(0==(hg|0)){T=Ec;Y=Ne;U=0;ca=Oe;ea=Rd;S=I;break b}var Dj=((y[Ne]&255)<>1],Fj=l[(dh<<2)+Nd|0],Gj=Oe>>>(Mc>>>0),Hj=Rd-Mc|0;a[L]=Mc;Pd=Ne;Qd=hg;Zg=Gj;$g=Hj;gg=Fj;ah=mi;bh=Ej;ch=Mc}while(0);var eh=ah&255,ig=Zg>>>(eh>>>0),jg=$g-eh|0;a[L]=ch+ -eh|0;a[n]=bh&65535;var fh=gg&255;if(0==gg<<24>>24)a[r]=25,ha=Ec,ja=Pd,ka=$,W=Qd,na=H,ra=ig,pa=jg,la=I,B=265;else if(0!=(fh&32|0))a[L]=-1,a[r]=11,ha=Ec,ja=Pd,ka=$,W=Qd,na=H,ra=ig,pa=jg,la=I,B=265;else if(0==(fh&64|0)){var ni=fh&15;a[j]=ni;a[r]=21;Vc=Ec;Yc=Pd;kd=Qd;ld=ig;md=jg;Zc=ni;B=224}else a[q]=s.__str255|0,a[r]=29,ha=Ec,ja=Pd,ka=$,W=Qd,na=H,ra=ig,pa=jg,la=I,B=265}while(0);do if(80==B){var Ij=0==(Db&2048|0);do if(Ij){var oi=a[v];if(0==(oi|0))var gh=Fb,hh=Nb;else a[(oi+28|0)>>2]=0,gh=Fb,hh=Nb}else{if(0== -(Nb|0)){T=P;Y=Fb;U=0;ca=ob;ea=ac;S=I;break b}for(var ih=0;;){var Pe=ih+1|0,pi=l[Fb+ih|0],jh=a[v];if(0!=(jh|0)){var qi=jh+28|0;if(0!=(a[qi>>2]|0)){var kh=k[n];kh>>>0>=k[jh+32>>2]>>>0||(a[n]=kh+1|0,l[a[qi>>2]+kh|0]=pi)}}var ri=0!=pi<<24>>24;if(!(ri&Pe>>>0>>0))break;ih=Pe}if(0!=(a[t]&512|0)){var Jj=oa(a[w],Fb,Pe);a[w]=Jj}var si=Nb-Pe|0,ti=Fb+Pe|0;if(ri){T=P;Y=ti;U=si;ca=ob;ea=ac;S=I;break b}gh=ti;hh=si}while(0);a[n]=0;a[r]=7;Ib=gh;Wb=hh;Bc=ob;sb=ac;B=93}else if(224==B){if(0==(Zc|0))var ui=Yc,vi= -kd,wi=ld,xi=md,yi=a[n];else{for(var Qe=Yc,kg=kd,Re=ld,Sd=md;!(Sd>>>0>=Zc>>>0);){if(0==(kg|0)){T=Vc;Y=Qe;U=0;ca=Re;ea=Sd;S=I;break b}var Kj=((y[Qe]&255)<>>(Zc>>>0);xi=Sd-Zc|0;yi=zi}a[Aa>>2]=yi;a[r]=22;xe=Vc;$d=ui;ae=vi;be=wi;ce=xi;B=231}while(0);do if(93==B){var Lj=0==(a[t]&4096|0);do if(Lj){var Ai=a[v];if(0==(Ai|0))var lh=Ib,mh=Wb;else a[(Ai+36|0)>>2]=0,lh=Ib,mh=Wb}else{if(0==(Wb|0)){T= -P;Y=Ib;U=0;ca=Bc;ea=sb;S=I;break b}for(var nh=0;;){var Se=nh+1|0,Bi=l[Ib+nh|0],oh=a[v];if(0!=(oh|0)){var Ci=oh+36|0;if(0!=(a[Ci>>2]|0)){var ph=k[n];ph>>>0>=k[oh+40>>2]>>>0||(a[n]=ph+1|0,l[a[Ci>>2]+ph|0]=Bi)}}var Di=0!=Bi<<24>>24;if(!(Di&Se>>>0>>0))break;nh=Se}if(0!=(a[t]&512|0)){var Mj=oa(a[w],Ib,Se);a[w]=Mj}var Ei=Wb-Se|0,Fi=Ib+Se|0;if(Di){T=P;Y=Fi;U=Ei;ca=Bc;ea=sb;S=I;break b}lh=Fi;mh=Ei}while(0);a[r]=8;bc=lh;Hb=mh;nc=Bc;Eb=sb;B=106}else if(231==B){for(var Nj=(1<>2])-1|0,Td=k[lb>>2],Ud= -$d,Te=ae,Vd=be,hd=ce;;){var qh=Nj&Vd,Gi=y[(qh<<2)+Td+1|0],id=Gi&255;if(id>>>0<=hd>>>0)break;if(0==(Te|0)){T=xe;Y=Ud;U=0;ca=Vd;ea=hd;S=I;break b}var Oj=((y[Ud]&255)<>1],Ji=Hi&255;if(0==(Ji&240|0)){for(var Pj=Ii&65535,Qj=(1<>>(id>>>0))+Pj|0,Ki=y[(rh<<2)+Td+1|0];if(((Ki&255)+id|0)>>>0<=Wd>>>0)break;if(0==(lg|0)){T=xe;Y=Ue;U=0;ca=Ve;ea=Wd;S=I;break b}var Rj=((y[Ue]& -255)<>1],Tj=l[(rh<<2)+Td|0],Uj=Ve>>>(id>>>0),Vj=Wd-id|0,Li=a[L]+id|0;a[L]=Li;var sh=Ue,th=lg,Mi=Uj,Ni=Vj,Oi=Tj,Pi=Ki,Qi=Sj,Ri=Li}else sh=Ud,th=Te,Mi=Vd,Ni=hd,Oi=Hi,Pi=Gi,Qi=Ii,Ri=a[L];var uh=Pi&255,Si=Mi>>>(uh>>>0),Ti=Ni-uh|0;a[L]=Ri+uh|0;var Ui=Oi&255;if(0==(Ui&64|0)){a[m]=Qi&65535;var Vi=Ui&15;a[j]=Vi;a[r]=23;od=xe;qd=sh;td=th;wd=Si;xd=Ti;$c=Vi;B=245}else a[q]=s.__str154|0,a[r]=29,ha=xe,ja=sh,ka=$,W=th,na=H,ra=Si,pa=Ti,la=I,B=265}while(0); -c:do if(106==B){var Wi=k[t],Wj=0==(Wi&512|0);do{if(!Wj){for(var Xd=bc,We=Hb,Xe=nc,Yd=Eb;!(16<=Yd>>>0);){if(0==(We|0)){T=P;Y=Xd;U=0;ca=Xe;ea=Yd;S=I;break b}var Xj=((y[Xd]&255)<>2]=Wi>>>9&1,a[(a[v]+48|0)>>2]=1);var bj=oa(0,0,0);a[w]=bj;a[x]=bj;a[r]= -11;ha=P;ja=Xi;ka=$;W=Yi;na=H;ra=Zi;pa=$i;la=I;B=265}else if(245==B){if(0==($c|0))var cj=qd,dj=td,ej=wd,fj=xd;else{for(var Ye=qd,mg=td,Ze=wd,Zd=xd;!(Zd>>>0>=$c>>>0);){if(0==(mg|0)){T=od;Y=Ye;U=0;ca=Ze;ea=Zd;S=I;break b}var Yj=((y[Ye]&255)<>>($c>>>0);fj=Zd-$c|0}a[r]=24;Cf=od;Df=cj;Ef=dj;Ff=ej;Gf=fj;B=251}while(0);c:do if(251==B){if(0==(H|0)){T=Cf;Y=Df;U=Ef;ca=Ff;ea=Gf;S=I;break b}var gj=I-H|0,vh= -k[m],Zj=vh>>>0>gj>>>0;do if(Zj){var $e=vh-gj|0,$j=$e>>>0>k[Xa>>2]>>>0;do if($j&&0!=(a[Ia>>2]|0)){a[q]=s.__str53|0;a[r]=29;ha=Cf;ja=Df;ka=$;W=Ef;na=H;ra=Ff;pa=Gf;la=I;break c}while(0);var wh=k[Da>>2];if($e>>>0>wh>>>0)var hj=$e-wh|0,xh=a[Ya>>2]+(a[Sa>>2]-hj)|0,yh=hj;else xh=a[Ya>>2]+(wh-$e)|0,yh=$e;var zh=k[n];if(yh>>>0<=zh>>>0)var Ah=xh,af=yh,Bh=zh;else Ah=xh,Bh=af=zh}else var ak=a[n],Ah=$+-vh|0,Bh=af=ak;while(0);var Ch=af>>>0>H>>>0?H:af;a[n]=Bh-Ch|0;for(var ij=af^-1,jj=H^-1,bk=ij>>>0>jj>>>0?ij:jj, -Dh=Ah,Eh=$,kj=Ch;;){l[Eh]=l[Dh];var lj=kj-1|0;if(0==(lj|0))break;Dh=Dh+1|0;Eh=Eh+1|0;kj=lj}var ck=H-Ch|0,dk=$+(bk^-1)|0;0==(a[n]|0)&&(a[r]=20);ha=Cf;ja=Df;ka=dk;W=Ef;na=ck;ra=Ff;pa=Gf;la=I}while(0);P=ha;aa=ja;$=ka;qa=W;H=na;ba=ra;V=pa;I=la;sa=a[r]}a[F]=$;a[z]=H;a[J]=Y;a[ga]=U;a[u]=ca;a[da]=ea;B=0==(a[Sa>>2]|0)?26<=k[r]>>>0?297:(S|0)==(a[z]|0)?297:295:295;do if(295==B&&0!=(mj(c,S)|0)){a[r]=30;D=-4;break a}while(0);var nj=k[ga],oj=k[z],bf=S-oj|0,pj=c+8|0;a[pj>>2]=db-nj+a[pj>>2]|0;a[o]=a[o]+bf|0;a[i]= -a[i]+bf|0;var qj=(S|0)==(oj|0);if(!(0==(a[O]|0)|qj)){var rj=a[w],sj=a[F]+-bf|0,tj=0==(a[t]|0)?kc(rj,sj,bf):oa(rj,sj,bf);a[w]=tj;a[x]=tj}var Fh=a[r];a[c+44>>2]=(0!=(a[A]|0)?64:0)+a[da]+(11==(Fh|0)?128:0)+(19==(Fh|0)?256:14==(Fh|0)?256:0)|0;D=(db|0)==(nj|0)&qj&0==(T|0)?-5:T}}}}while(0);ma=E;return D}function Vc(c){for(var e=0;!(h[c+(e<<2)+148>>1]=0,e=e+1|0,286==(e|0)););h[c+2440>>1]=0;h[c+2444>>1]=0;h[c+2448>>1]=0;h[c+2452>>1]=0;h[c+2456>>1]=0;h[c+2460>>1]=0;h[c+2464>>1]=0;h[c+2468>>1]=0;h[c+2472>> -1]=0;h[c+2476>>1]=0;h[c+2480>>1]=0;h[c+2484>>1]=0;h[c+2488>>1]=0;h[c+2492>>1]=0;h[c+2496>>1]=0;h[c+2500>>1]=0;h[c+2504>>1]=0;h[c+2508>>1]=0;h[c+2512>>1]=0;h[c+2516>>1]=0;h[c+2520>>1]=0;h[c+2524>>1]=0;h[c+2528>>1]=0;h[c+2532>>1]=0;h[c+2536>>1]=0;h[c+2540>>1]=0;h[c+2544>>1]=0;h[c+2548>>1]=0;h[c+2552>>1]=0;h[c+2556>>1]=0;h[c+2684>>1]=0;h[c+2688>>1]=0;h[c+2692>>1]=0;h[c+2696>>1]=0;h[c+2700>>1]=0;h[c+2704>>1]=0;h[c+2708>>1]=0;h[c+2712>>1]=0;h[c+2716>>1]=0;h[c+2720>>1]=0;h[c+2724>>1]=0;h[c+2728>>1]=0;h[c+ -2732>>1]=0;h[c+2736>>1]=0;h[c+2740>>1]=0;h[c+2744>>1]=0;h[c+2748>>1]=0;h[c+2752>>1]=0;h[c+2756>>1]=0;h[c+1172>>1]=1;a[c+5804>>2]=0;a[c+5800>>2]=0;a[c+5808>>2]=0;a[c+5792>>2]=0}function cf(c){var e,d,b;b=(c+5820|0)>>2;e=k[b];if(16==(e|0)){d=(c+5816|0)>>1;var f=h[d]&255;e=(c+20|0)>>2;var g=a[e];a[e]=g+1|0;c=c+8|0;l[a[c>>2]+g|0]=f;f=(p[d]&65535)>>>8&255;g=k[e];a[e]=g+1|0;l[a[c>>2]+g|0]=f;h[d]=0;a[b]=0}else 7>=(e|0)||(e=(c+5816|0)>>1,d=h[e]&255,f=c+20|0,g=a[f>>2],a[f>>2]=g+1|0,l[a[c+8>>2]+g|0]=d,h[e]= -(p[e]&65535)>>>8,a[b]=a[b]-8|0)}function mj(c,e){var d,b,f,g=c>>2,i,o=k[g+7];f=o>>2;var m=o+52|0;i=a[m>>2];if(0==(i|0))if(i=va[a[g+8]](a[g+10],1<>2]=i,0==(i|0))b=1,i=12;else{var h=i;i=2}else h=i,i=2;do if(2==i){b=(o+40|0)>>2;d=a[b];if(0==(d|0)){d=1<>>0>>0){d=(o+48|0)>>2;var A=k[d],j=j-A|0,j=j>>>0>l>>>0?l:j,n=c+12|0;Qb(h+A|0,a[n>>2]+-l|0,j,1);A=l-j|0;if((l|0)==(j|0)){l=a[d]+j|0;a[d]=l;b=k[b];(l|0)==(b|0)&&(a[d]= -0);d=o+44|0;l=k[d>>2];if(l>>>0>=b>>>0){b=0;break}a[d>>2]=l+j|0}else Qb(a[m>>2],a[n>>2]+-A|0,A,1),a[d]=A,a[f+11]=a[b]}else Qb(h,a[g+3]+-j|0,j,1),a[f+12]=0,a[f+11]=a[b];b=0}while(0);return b}function Rc(c){var e;if(0!=(c|0)){e=(c+28|0)>>2;var d=a[e];if(0!=(d|0)){var b=c+36|0,f=a[b>>2];if(0!=(f|0)){var g=a[d+52>>2],c=c+40|0;0==(g|0)?b=f:(va[f](a[c>>2],g),b=a[b>>2],d=a[e]);va[b](a[c>>2],d);a[e]=0}}}}function re(c,e,d,b){var f,g;g=(c+5820|0)>>2;f=k[g];var i=b&65535,b=(c+5816|0)>>1,o=p[b]&65535|i<>2;var m=a[f];a[f]=m+1|0;var j=c+8|0;l[a[j>>2]+m|0]=o&255;o=(p[b]&65535)>>>8&255;m=k[f];a[f]=m+1|0;l[a[j>>2]+m|0]=o;f=k[g];h[b]=i>>>((16-f|0)>>>0)&65535;b=f-13|0}else b=f+3|0;a[g]=b;ng(c,e,d)}function ng(c,e,d){var b;og(c);a[c+5812>>2]=8;b=(c+20|0)>>2;var f=a[b];a[b]=f+1|0;c=(c+8|0)>>2;l[a[c]+f|0]=d&255;f=k[b];a[b]=f+1|0;l[a[c]+f|0]=d>>>8&255;var f=d&65535^65535,g=a[b];a[b]=g+1|0;l[a[c]+g|0]=f&255;g=k[b];a[b]=g+1|0;l[a[c]+g|0]=f>>>8&255;f=0==(d|0);a:do if(!f)for(var g= -e,i=d;;){var i=i-1|0,o=l[g],m=a[b];a[b]=m+1|0;l[a[c]+m|0]=o;if(0==(i|0))break a;g=g+1|0}while(0)}function yf(c){var e,d,b,f;f=(c+5820|0)>>2;var g=k[f];b=(c+5816|0)>>1;e=p[b]&65535|2<>2;var i=a[d];a[d]=i+1|0;g=c+8|0;l[a[g>>2]+i|0]=e&255;e=(p[b]&65535)>>>8&255;i=k[d];a[d]=i+1|0;l[a[g>>2]+i|0]=e;e=k[f];d=2>>>((16-e|0)>>>0)&65535;h[b]=d;e=e-13|0}else e=g+3|0;g=d;a[f]=e;9<(e|0)?(d=(c+20|0)>>2,i=a[d],a[d]=i+1|0,e=c+8|0,l[a[e>>2]+i|0]=g&255,g=(p[b]&65535)>>>8& -255,i=k[d],a[d]=i+1|0,l[a[e>>2]+i|0]=g,h[b]=0,d=a[f]-9|0):d=e+7|0;a[f]=d;cf(c);d=c+5812|0;i=k[f];if(9>(a[d>>2]+11-i|0)){g=p[b]&65535|2<>2;var o=a[e];a[e]=o+1|0;i=c+8|0;l[a[i>>2]+o|0]=g&255;g=(p[b]&65535)>>>8&255;o=k[e];a[e]=o+1|0;l[a[i>>2]+o|0]=g;g=k[f];e=2>>>((16-g|0)>>>0)&65535;h[b]=e;g=g-13|0}else g=i+3|0;i=e;a[f]=g;9<(g|0)?(e=(c+20|0)>>2,o=a[e],a[e]=o+1|0,g=c+8|0,l[a[g>>2]+o|0]=i&255,i=(p[b]&65535)>>>8&255,o=k[e],a[e]=o+1|0,l[a[g>>2]+o|0]=i,h[b]=0,b= -a[f]-9|0):b=g+7|0;a[f]=b;cf(c)}a[d>>2]=7}function xa(c,e,d,b){var f,g;g=c>>2;var i=0<(a[g+33]|0);do if(i){var o=a[g]+44|0;if(2==(a[o>>2]|0)){for(var m=c>>1,j=void 0,R=0,L=-201342849;;){if(32<=(R|0)){j=5;break}if(0!=(L&1|0)&&0!=h[((R<<2)+148>>1)+m]<<16>>16){f=0;j=11;break}R=R+1|0;L>>>=1}a:do if(5==j)if(0!=h[m+92]<<16>>16)f=1;else if(0!=h[m+94]<<16>>16)f=1;else if(0!=h[m+100]<<16>>16)f=1;else for(R=32;;){if(256<=(R|0)){f=0;break a}if(0!=h[((R<<2)+148>>1)+m]<<16>>16){f=1;break a}R=R+1|0}while(0);a[o>> -2]=f}jd(c,c+2840|0);jd(c,c+2852|0);m=c;kd(m,m+148|0,a[m+2844>>2]);kd(m,m+2440|0,a[m+2856>>2]);jd(m,m+2864|0);for(o=18;!(2>=(o|0));){if(0!=h[m+((y[s._bl_order+o|0]&255)<<2)+2686>>1]<<16>>16)break;o=o-1|0}m=m+5800|0;a[m>>2]=3*o+a[m>>2]+17|0;j=(a[g+1450]+10|0)>>>3;R=(a[g+1451]+10|0)>>>3;R>>>0>j>>>0?(m=R,R=j):m=R}else j=d+5|0,o=0,R=m=j;while(0);(d+4|0)>>>0>R>>>0|0==(e|0)?(e=(c+5820|0)>>2,f=k[e],j=13<(f|0),4==(a[g+34]|0)|(m|0)==(R|0)?(o=b+2&65535,g=(c+5816|0)>>1,i=p[g]&65535|o<>2,m=a[d],a[d]=m+1|0,f=c+8|0,l[a[f>>2]+m|0]=i&255,i=(p[g]&65535)>>>8&255,m=k[d],a[d]=m+1|0,l[a[f>>2]+m|0]=i,d=k[e],h[g]=o>>>((16-d|0)>>>0)&65535,g=d-13|0):g=f+3|0,a[e]=g,ld(c,md|0,$d|0)):(i=b+4&65535,d=(c+5816|0)>>1,m=p[d]&65535|i<>2,R=a[f],a[f]=R+1|0,j=c+8|0,l[a[j>>2]+R|0]=m&255,m=(p[d]&65535)>>>8&255,R=k[f],a[f]=R+1|0,l[a[j>>2]+R|0]=m,f=k[e],h[d]=i>>>((16-f|0)>>>0)&65535,d=f-13|0):d=f+3|0,a[e]=d,pg(c,a[g+711]+1|0,a[g+714]+1|0,o+1|0),ld(c,c+148|0,c+2440|0))):re(c, -e,d,b);Vc(c);0!=(b|0)&&og(c)}function ld(c,e,d){var b,f,g,i,o,m,j=e>>1,R=c+5792|0,L=0==(a[R>>2]|0);a:do if(L)var A=a[c+5820>>2],n=h[c+5816>>1];else{var x=c+5796|0,q=c+5784|0;m=(c+5820|0)>>2;o=(c+5816|0)>>1;i=(c+20|0)>>2;g=(c+8|0)>>2;for(var v=0;;){var t=p[a[x>>2]+(v<<1)>>1],w=t&65535,O=v+1|0,u=y[a[q>>2]+v|0]&255;if(0==t<<16>>16){var D=p[((u<<2)+2>>1)+j]&65535,ga=k[m],z=(ga|0)>(16-D|0),r=p[(u<<2>>1)+j]&65535,J=p[o]&65535|r<>>8&255,Q=k[i];a[i]=Q+1|0;l[a[g]+Q|0]=C;var K=k[m],X=r>>>((16-K|0)>>>0)&65535;h[o]=X;var G=D-16+K|0,M=a[m]=G,Z=X}else var Ma=ga+D|0,M=a[m]=Ma,Z=F}else{var N=y[s.__length_code+u|0]&255,ma=(N|256)+1|0,cb=p[((ma<<2)+2>>1)+j]&65535,db=k[m],ya=(db|0)>(16-cb|0),fa=p[(ma<<2>>1)+j]&65535,ta=p[o]&65535|fa<>>8&255,Aa=k[i];a[i]=Aa+1|0;l[a[g]+Aa|0]=tb;var Xa=k[m],Ia=fa>>>((16-Xa|0)>>>0)&65535;h[o]= -Ia;var Da=cb-16+Xa|0,Ya=Ia}else Da=db+cb|0,Ya=lc;a[m]=Da;var Sa=k[ae+(N<<2)>>2];if(20>(N-8|0)>>>0){var wa=(Da|0)>(16-Sa|0),Ta=u-a[qg+(N<<2)>>2]&65535,jb=Ta<>>8&255,Ba=k[i];a[i]=Ba+1|0;l[a[g]+Ba|0]=mc;var Oa=k[m],Za=Ta>>>((16-Oa|0)>>>0)&65535;h[o]=Za;var $a=Sa-16+Oa|0,kb=a[m]=$a,fb=Za}else var pb=Da+Sa|0,kb=a[m]=pb,fb=eb}else kb=Da,fb=Ya;var lb=w-1|0,P=y[s.__dist_code+(256>lb>>>0?lb:(lb>>> -7)+256|0)|0]&255,aa=p[d+(P<<2)+2>>1]&65535,$=(kb|0)>(16-aa|0),qa=p[d+(P<<2)>>1]&65535,H=fb&65535|qa<>>8&255,ub=k[i];a[i]=ub+1|0;l[a[g]+ub|0]=sa;var ha=k[m],ja=qa>>>((16-ha|0)>>>0)&65535;h[o]=ja;var ka=aa-16+ha|0,W=ja}else ka=kb+aa|0,W=ba;a[m]=ka;var na=k[be+(P<<2)>>2];if(26<=(P-4|0)>>>0)M=ka,Z=W;else{var ra=(ka|0)>(16-na|0),pa=lb-a[df+(P<<2)>>2]&65535,la=pa<>>8&255,T=k[i];a[i]=T+1|0;l[a[g]+T|0]=ab;var Y=k[m],U=pa>>>((16-Y|0)>>>0)&65535;h[o]=U;var ca=na-16+Y|0,M=a[m]=ca,Z=U}else var ea=ka+na|0,M=a[m]=ea,Z=ua}}if(O>>>0>=k[R>>2]>>>0){A=M;n=Z;break a}v=O}}while(0);var S=e+1026|0,Ea=p[S>>1]&65535,gb=c+5820|0,vb=(A|0)>(16-Ea|0),Wa=p[j+512]&65535;f=(c+5816|0)>>1;var Ga=n&65535|Wa<>2;var va=a[b];a[b]=va+1|0;var oa=c+8|0;l[a[oa>>2]+va|0]=hb;var mb=(p[f]& -65535)>>>8&255,wb=k[b];a[b]=wb+1|0;l[a[oa>>2]+wb|0]=mb;var qb=k[gb>>2];h[f]=Wa>>>((16-qb|0)>>>0)&65535;var yb=Ea-16+qb|0}else yb=A+Ea|0;a[gb>>2]=yb;a[c+5812>>2]=p[S>>1]&65535}function og(c){var e,d=c+5820|0,b=k[d>>2];if(8<(b|0)){var b=c+5816|0,f=h[b>>1]&255;e=(c+20|0)>>2;var g=a[e];a[e]=g+1|0;c=c+8|0;l[a[c>>2]+g|0]=f;f=(p[b>>1]&65535)>>>8&255;g=k[e];a[e]=g+1|0;l[a[c>>2]+g|0]=f;c=b}else e=c+5816|0,0>=(b|0)||(b=h[e>>1]&255,f=c+20|0,g=a[f>>2],a[f>>2]=g+1|0,l[a[c+8>>2]+g|0]=b),c=e;h[c>>1]=0;a[d>>2]=0} -function jd(c,e){var d,b,f,g,i,o,m=e|0,j=k[m>>2];i=j>>1;var R=e+8|0;f=a[R>>2];var L=a[f>>2],A=k[f+12>>2];g=(c+5200|0)>>2;a[g]=0;f=(c+5204|0)>>2;a[f]=573;b=0<(A|0);do if(b){o=0;for(var n=-1;;){if(0==h[(o<<2>>1)+i]<<16>>16){h[((o<<2)+2>>1)+i]=0;var x=n}else x=a[g]+1|0,a[g]=x,a[((x<<2)+c+2908|0)>>2]=o,l[c+(o+5208)|0]=0,x=o;o=o+1|0;if((o|0)==(A|0))break;n=x}o=a[g];if(2>(o|0)){d=o;var q=x;o=2}else{var v=x;o=9}}else d=0,q=-1,o=2;while(0);a:do if(2==o)if(b=(c+5800|0)>>2,x=c+5804|0,0==(L|0)){x=q;for(n=d;;){var t= -2>(x|0),w=x+1|0,x=t?w:x,t=t?w:0,n=n+1|0;a[g]=n;a[c+(n<<2)+2908>>2]=t;h[(t<<2>>1)+i]=1;l[c+(t+5208)|0]=0;a[b]=a[b]-1|0;n=a[g];if(2<=(n|0)){v=x;break a}}}else{n=q;for(t=d;;){var w=2>(n|0),O=n+1|0,n=w?O:n,w=w?O:0,t=t+1|0;a[g]=t;a[c+(t<<2)+2908>>2]=w;h[(w<<2>>1)+i]=1;l[c+(w+5208)|0]=0;a[b]=a[b]-1|0;a[x>>2]=a[x>>2]-(p[L+(w<<2)+2>>1]&65535)|0;t=k[g];if(2<=(t|0)){v=n;break a}}}while(0);L=e+4|0;a[L>>2]=v;d=a[g];if(1<(d|0)){for(d=d/2|0;!(nd(c,j,d),d=d-1|0,0>=(d|0)););q=a[g]}else q=d;d=(c+2912|0)>>2;for(o= -q;;){q=k[d];a[g]=o-1|0;a[d]=a[c+(o<<2)+2908>>2];nd(c,j,1);o=k[d];b=a[f]-1|0;a[f]=b;a[((b<<2)+c+2908|0)>>2]=q;b=a[f]-1|0;a[f]=b;a[((b<<2)+c+2908|0)>>2]=o;h[(A<<2>>1)+i]=h[(o<<2>>1)+i]+h[(q<<2>>1)+i]&65535;b=y[c+(q+5208)|0];x=y[c+(o+5208)|0];l[c+(A+5208)|0]=((b&255)<(x&255)?x:b)+1&255;b=A&65535;h[((o<<2)+2>>1)+i]=b;h[((q<<2)+2>>1)+i]=b;q=A+1|0;a[d]=A;nd(c,j,1);o=k[g];if(1>=(o|0))break;A=q}i=a[d];g=a[f]-1|0;a[f]=g;a[((g<<2)+c+2908|0)>>2]=i;ef(c,a[m>>2],a[L>>2],a[R>>2]);rg(j,v,c+2876|0)}function pg(c, -e,d,b){var f,g,i;i=(c+5820|0)>>2;f=k[i];var o=e+65279&65535;g=(c+5816|0)>>1;var m=p[g]&65535|o<>2;var R=a[f];a[f]=R+1|0;j=c+8|0;l[a[j>>2]+R|0]=m&255;m=(p[g]&65535)>>>8&255;R=k[f];a[f]=R+1|0;l[a[j>>2]+R|0]=m;f=k[i];o=o>>>((16-f|0)>>>0)&65535;h[g]=o;f=f-11|0;m=o}else f=f+5|0,m=j;a[i]=f;d=d-1|0;o=d&65535;m=m&65535|o<>2,R=a[f],a[f]=R+1|0,j=c+8|0,l[a[j>>2]+R|0]=m&255,m=(p[g]&65535)>>>8&255,R=k[f],a[f]=R+1|0,l[a[j>>2]+ -R|0]=m,f=k[i],o=o>>>((16-f|0)>>>0)&65535,h[g]=o,f=f-11|0,m=o):(f=f+5|0,m=j);a[i]=f;o=b+65532&65535;m=m&65535|o<>2,R=a[f],a[f]=R+1|0,j=c+8|0,l[a[j>>2]+R|0]=m&255,m=(p[g]&65535)>>>8&255,R=k[f],a[f]=R+1|0,l[a[j>>2]+R|0]=m,f=k[i],m=o>>>((16-f|0)>>>0)&65535,h[g]=m,o=f-12|0):(o=f+4|0,m=j);a[i]=o;j=0<(b|0);a:do if(j){f=(c+20|0)>>2;for(var R=c+8|0,L=0,A=o,n=m;;){var x=p[c+((y[s._bl_order+L|0]&255)<<2)+2686>>1]&65535,q=n&65535|x<>2]+n|0]=A,A=(p[g]&65535)>>>8&255,n=k[f],a[f]=n+1|0,l[a[R>>2]+n|0]=A,A=k[i],n=x>>>((16-A|0)>>>0)&65535,h[g]=n,x=A-13|0):x=A+3|0;a[i]=x;L=L+1|0;if((L|0)==(b|0))break a;A=x}}while(0);ce(c,c+148|0,e-1|0);ce(c,c+2440|0,d)}function ce(c,e,d){var b,f,g,i,o=p[e+2>>1],m=0==o<<16>>16,j=m?138:7,R=m?3:4,L=c+2754|0;i=(c+5820|0)>>2;var A=c+2752|0;g=(c+5816|0)>>1;f=(c+20|0)>>2;b=(c+8|0)>>2;var n=c+2758|0,x=c+2756|0,q=c+2750|0,v=c+2748|0,t=R,w=j,O=0,u=-1,y=o&65535;a:for(;;){for(var s=0,z= -O,r=y;;){if((z|0)>(d|0))break a;var D=z+1|0,F=p[e+(D<<2)+2>>1],E=F&65535,B=s+1|0,C=(r|0)==(E|0);if(!((B|0)<(w|0)&C))break;s=B;z=D;r=E}var Q=(B|0)<(t|0);b:do if(Q)for(var K=(r<<2)+c+2686|0,X=(r<<2)+c+2684|0,G=B,M=a[i],Z=h[g];;){var Ma=p[K>>1]&65535,N=(M|0)>(16-Ma|0),ma=p[X>>1]&65535,cb=Z&65535|ma<>>8&255,lc=k[f];a[f]=lc+1|0;l[a[b]+lc|0]=ta;var va=k[i],Na=ma>>>((16-va|0)>>>0)&65535;h[g]=Na;var tb=Ma-16+ -va|0,Aa=Na}else tb=M+Ma|0,Aa=db;a[i]=tb;var Xa=G-1|0;if(0==(Xa|0))break b;G=Xa;M=tb;Z=Aa}else if(0==(r|0))if(11>(B|0)){var Ia=p[L>>1]&65535,Da=k[i],Ya=(Da|0)>(16-Ia|0),Sa=p[A>>1]&65535,oa=p[g]&65535|Sa<>>8&255,Ua=k[f];a[f]=Ua+1|0;l[a[b]+Ua|0]=xa;var wa=k[i],Ba=Sa>>>((16-wa|0)>>>0)&65535;h[g]=Ba;var Oa=Ia-16+wa|0,Za=Ba}else Oa=Da+Ia|0,Za=Ta;a[i]=Oa;var $a=s+65534&65535,kb=Za&65535|$a<>>8&255,lb=k[f];a[f]=lb+1|0;l[a[b]+lb|0]=pb;var P=k[i];h[g]=$a>>>((16-P|0)>>>0)&65535;a[i]=P-13|0}else a[i]=Oa+3|0}else{var aa=p[n>>1]&65535,$=k[i],qa=($|0)>(16-aa|0),H=p[x>>1]&65535,ba=p[g]&65535|H<<$,V=ba&65535;h[g]=V;if(qa){var I=ba&255,sa=a[f];a[f]=sa+1|0;l[a[b]+sa|0]=I;var ub=(p[g]&65535)>>>8&255,ha=k[f];a[f]=ha+1|0;l[a[b]+ha|0]=ub;var ja=k[i],ka=H>>>((16-ja|0)>>>0)&65535;h[g]=ka;var W=aa-16+ja|0,na=ka}else W=$+aa| -0,na=V;a[i]=W;var ra=s+65526&65535,pa=na&65535|ra<>>8&255,Va=k[f];a[f]=Va+1|0;l[a[b]+Va|0]=ua;var Fa=k[i];h[g]=ra>>>((16-Fa|0)>>>0)&65535;a[i]=Fa-9|0}else a[i]=W+7|0}else{if((r|0)==(u|0))var ab=B,T=a[i],Y=h[g];else{var U=p[c+(r<<2)+2686>>1]&65535,ca=k[i],ea=(ca|0)>(16-U|0),S=p[c+(r<<2)+2684>>1]&65535,Ea=p[g]&65535|S<>>8&255,hb=k[f];a[f]=hb+1|0;l[a[b]+hb|0]=Ga;var Ha=k[i],Wc=S>>>((16-Ha|0)>>>0)&65535;h[g]=Wc;var mb=U-16+Ha|0,wb=Wc}else mb=ca+U|0,wb=gb;a[i]=mb;ab=s;T=mb;Y=wb}var qb=p[q>>1]&65535,yb=(T|0)>(16-qb|0),ib=p[v>>1]&65535,Pa=Y&65535|ib<>>8&255,nb=k[f];a[f]=nb+1|0;l[a[b]+nb|0]=Ca;var Bb=k[i],xb=ib>>>((16-Bb|0)>>>0)&65535;h[g]=xb;var bb=qb-16+Bb|0,zb=xb}else bb=T+qb|0,zb=Ja;a[i]=bb;var Cb=ab+65533& -65535,za=zb&65535|Cb<>>8&255,Ra=k[f];a[f]=Ra+1|0;l[a[b]+Ra|0]=Qa;var ob=k[i];h[g]=Cb>>>((16-ob|0)>>>0)&65535;a[i]=ob-14|0}else a[i]=bb+2|0}while(0);if(0==F<<16>>16)t=3,w=138;else var sb=C?6:7,t=C?3:4,w=sb;O=D;u=r;y=E}}function kd(a,e,d){var b=p[e+2>>1],f=0==b<<16>>16;h[e+(d+1<<2)+2>>1]=-1;var g=a+2752|0,i=a+2756|0,o=a+2748|0,m=f?3:4,f=f?138:7,k=0,j=-1,b=b&65535;a:for(;;){for(var l=0;;){if((k|0)>(d|0))break a; -var A=k+1|0,n=p[e+(A<<2)+2>>1],x=n&65535,q=l+1|0,v=(b|0)==(x|0);if(!((q|0)<(f|0)&v))break;l=q;k=A;b=x}(q|0)<(m|0)?(m=(b<<2)+a+2684|0,h[m>>1]=(p[m>>1]&65535)+q&65535):0==(b|0)?11>(q|0)?h[g>>1]=h[g>>1]+1&65535:h[i>>1]=h[i>>1]+1&65535:((b|0)!=(j|0)&&(m=(b<<2)+a+2684|0,h[m>>1]=h[m>>1]+1&65535),h[o>>1]=h[o>>1]+1&65535);0==n<<16>>16?(m=3,f=138):(f=v?6:7,m=v?3:4);k=A;j=b;b=x}}function nd(c,e,d){for(var b=c>>2,f=k[((d<<2)+2908>>2)+b],g=c+(f+5208)|0,i=c+5200|0,o=(f<<2)+e|0;;){var m=d<<1,j=a[i>>2];if((m|0)> -(j|0))break;j=(m|0)<(j|0);do if(j){var h=m|1,l=k[((h<<2)+2908>>2)+b],A=p[e+(l<<2)>>1],n=k[((m<<2)+2908>>2)+b],x=p[e+(n<<2)>>1];if((A&65535)>=(x&65535)){if(A<<16>>16!=x<<16>>16){h=m;break}if((y[c+(l+5208)|0]&255)>(y[c+(n+5208)|0]&255)){h=m;break}}}else h=m;while(0);m=p[o>>1];j=k[((h<<2)+2908>>2)+b];l=p[e+(j<<2)>>1];if((m&65535)<(l&65535))break;if(m<<16>>16==l<<16>>16&&(y[g]&255)<=(y[c+(j+5208)|0]&255))break;a[((d<<2)+2908>>2)+b]=j;d=h}a[((d<<2)+2908>>2)+b]=f}function ef(c,e,d,b){var f,g=e>>1,i=k[b>> -2],o=k[b+4>>2],m=k[b+8>>2],b=k[b+16>>2];Sb(c+2876|0,0,32,2);f=c+5204|0;h[((a[c+(a[f>>2]<<2)+2908>>2]<<2)+2>>1)+g]=0;var j=a[f>>2]+1|0,l=573>(j|0);a:do if(l){f=(c+5800|0)>>2;var L=0==(i|0),A=c+5804|0;b:do if(L)for(var n=0,x=j;;){var q=k[c+(x<<2)+2908>>2],v=(q<<2)+e+2|0,t=(p[(((p[v>>1]&65535)<<2)+2>>1)+g]&65535)+1|0,w=(t|0)>(b|0),n=(w&1)+n|0,t=w?b:t;h[v>>1]=t&65535;(q|0)<=(d|0)&&(v=(t<<1)+c+2876|0,h[v>>1]=h[v>>1]+1&65535,a[f]=(p[(q<<2>>1)+g]&65535)*(((q|0)<(m|0)?0:a[o+(q-m<<2)>>2])+t)+a[f]|0);x=x+1| -0;if(573==(x|0)){var u=n;break b}}else{n=0;for(x=j;;)if(q=k[c+(x<<2)+2908>>2],v=(q<<2)+e+2|0,t=(p[(((p[v>>1]&65535)<<2)+2>>1)+g]&65535)+1|0,w=(t|0)>(b|0),n=(w&1)+n|0,t=w?b:t,h[v>>1]=t&65535,(q|0)<=(d|0)&&(v=(t<<1)+c+2876|0,h[v>>1]=h[v>>1]+1&65535,v=(q|0)<(m|0)?0:a[o+(q-m<<2)>>2],w=p[(q<<2>>1)+g]&65535,a[f]=w*(v+t)+a[f]|0,a[A>>2]=((p[i+(q<<2)+2>>1]&65535)+v)*w+a[A>>2]|0),x=x+1|0,573==(x|0)){u=n;break b}}while(0);if(0!=(u|0)){L=(b<<1)+c+2876|0;for(A=u;;){for(var y=b;;){var x=y-1|0,s=(x<<1)+c+2876|0, -D=h[s>>1];if(0!=D<<16>>16)break;y=x}h[s>>1]=D-1&65535;y=(y<<1)+c+2876|0;h[y>>1]=h[y>>1]+2&65535;y=h[L>>1]-1&65535;h[L>>1]=y;A=A-2|0;if(0>=(A|0))break}if(0!=(b|0)){q=573;L=b;for(x=y;;){A=L&65535;for(x&=65535;!(0==(x|0));){for(;;){var z=q-1|0,r=k[c+(z<<2)+2908>>2];if((r|0)<=(d|0))break;q=z}q=(r<<2)+e+2|0;n=p[q>>1]&65535;(n|0)!=(L|0)&&(a[f]=(p[(r<<2>>1)+g]&65535)*(L-n)+a[f]|0,h[q>>1]=A);x=x-1|0;q=z}L=L-1|0;if(0==(L|0))break a;x=A=h[c+(L<<1)+2876>>1]}}}}while(0)}function kc(a,e,d){var b,f=a>>>16,a=a& -65535,g=1==(d|0);do if(g){var i=(y[e]&255)+a|0,i=65520>>0?i-65521|0:i;b=i+f|0;i|=(65520>>0?b+15|0:b)<<16}else if(0==(e|0))i=1;else if(16>d>>>0){i=0==(d|0);a:do if(i)var o=f,m=a;else{var k=f,j=d;b=e;for(var h=a;;){j=j-1|0;h=(y[b]&255)+h|0;k=h+k|0;if(0==(j|0)){o=k;m=h;break a}b=b+1|0}}while(0);i=(o>>>0)%65521<<16|(65520>>0?m-65521|0:m)}else{i=5551>>0;do if(i){k=f;j=d;b=e;for(h=a;;){for(var l=j-5552|0,j=h,n=b,x=k,q=347;;){var v=(y[n]&255)+j|0,k=v+(y[n+1|0]&255)|0,j=k+(y[n+2|0]&255)|0,h=j+ -(y[n+3|0]&255)|0,t=h+(y[n+4|0]&255)|0,w=t+(y[n+5|0]&255)|0,p=w+(y[n+6|0]&255)|0,u=p+(y[n+7|0]&255)|0,s=u+(y[n+8|0]&255)|0,D=s+(y[n+9|0]&255)|0,z=D+(y[n+10|0]&255)|0,r=z+(y[n+11|0]&255)|0,E=r+(y[n+12|0]&255)|0,F=E+(y[n+13|0]&255)|0,C=F+(y[n+14|0]&255)|0,B=C+(y[n+15|0]&255)|0,v=v+x+k+j+h+t+w+p+u+s+D+z+r+E+F+C+B|0,q=q-1|0;if(0==(q|0))break;j=B;n=n+16|0;x=v}n=b+5552|0;x=(B>>>0)%65521;q=(v>>>0)%65521;if(5551>=l>>>0)break;k=q;j=l;b=n;h=x}if(0==(l|0)){var Q=x,X=q;b=17}else if(15>>0){var K=q,Z=l,G=n,M= -x;b=14}else{var ma=q,Ma=l,N=n,fa=x;b=15}}else K=f,Z=d,G=e,M=a,b=14;while(0);do if(14==b){for(;;){var cb=Z-16|0,db=(y[G]&255)+M|0,ya=db+(y[G+1|0]&255)|0,i=ya+(y[G+2|0]&255)|0;b=i+(y[G+3|0]&255)|0;var k=b+(y[G+4|0]&255)|0,j=k+(y[G+5|0]&255)|0,h=j+(y[G+6|0]&255)|0,t=h+(y[G+7|0]&255)|0,w=t+(y[G+8|0]&255)|0,p=w+(y[G+9|0]&255)|0,u=p+(y[G+10|0]&255)|0,s=u+(y[G+11|0]&255)|0,D=s+(y[G+12|0]&255)|0,z=D+(y[G+13|0]&255)|0,r=z+(y[G+14|0]&255)|0,ta=r+(y[G+15|0]&255)|0,db=db+K+ya+i+b+k+j+h+t+w+p+u+s+D+z+r+ta|0,ya= -G+16|0;if(15>=cb>>>0)break;K=db;Z=cb;G=ya;M=ta}if(0==(cb|0)){var va=db,oa=ta;b=16}else ma=db,Ma=cb,N=ya,fa=ta,b=15}while(0);a:do if(15==b)for(;;){i=Ma-1|0;k=(y[N]&255)+fa|0;j=k+ma|0;if(0==(i|0)){va=j;oa=k;b=16;break a}ma=j;Ma=i;N=N+1|0;fa=k}while(0);16==b&&(Q=(oa>>>0)%65521,X=(va>>>0)%65521);i=Q|X<<16}while(0);return i}function ff(c,e,d){for(var b,f,c=c^-1;;){if(0==(d|0)){var g=c;f=11;break}if(0==(e&3|0)){f=4;break}c=a[Q+((y[e]&255^c&255)<<2)>>2]^c>>>8;e=e+1|0;d=d-1|0}a:do if(4==f){var i=e,k=31>> -0;b:do if(k){var m=c,j=d,h=i;for(b=h>>2;;){m^=a[b];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+1];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+2];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+3];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<< -2)>>2]^a[b+4];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+5];m=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+6];h=h+32|0;b=a[Q+((m>>>8&255)<<2)+2048>>2]^a[Q+((m&255)<<2)+3072>>2]^a[Q+((m>>>16&255)<<2)+1024>>2]^a[Q+(m>>>24<<2)>>2]^a[b+7];b=a[Q+((b>>>8&255)<<2)+2048>>2]^a[Q+((b&255)<<2)+3072>>2]^a[Q+((b>>>16&255)<<2)+1024>>2]^a[Q+(b>>>24<<2)>>2];j=j-32|0;if(31>=j>>>0){var l= -b,A=j,n=h;break b}m=b;b=h>>2}}else l=c,A=d,n=i;while(0);i=3>>0;b:do if(i){b=l;j=A;for(h=n;;){k=h+4|0;b^=a[h>>2];b=a[Q+((b>>>8&255)<<2)+2048>>2]^a[Q+((b&255)<<2)+3072>>2]^a[Q+((b>>>16&255)<<2)+1024>>2]^a[Q+(b>>>24<<2)>>2];j=j-4|0;if(3>=j>>>0){var x=b,q=j,v=k;break b}h=k}}else x=l,q=A,v=n;while(0);if(0==(q|0))g=x;else{i=v;k=q;for(j=x;;){j=a[Q+((y[i]&255^j&255)<<2)>>2]^j>>>8;k=k-1|0;if(0==(k|0)){g=j;break a}i=i+1|0}}}while(0);return g^-1}function rg(a,e,d){var b,f=d>>1,d=ma;ma+=32;b=d>>1;var g=h[f]<< -1;h[b+1]=g;g=(h[f+1]+g&65535)<<1;h[b+2]=g;g=(h[f+2]+g&65535)<<1;h[b+3]=g;g=(h[f+3]+g&65535)<<1;h[b+4]=g;g=(h[f+4]+g&65535)<<1;h[b+5]=g;g=(h[f+5]+g&65535)<<1;h[b+6]=g;g=(h[f+6]+g&65535)<<1;h[b+7]=g;g=(h[f+7]+g&65535)<<1;h[b+8]=g;g=(h[f+8]+g&65535)<<1;h[b+9]=g;g=(h[f+9]+g&65535)<<1;h[b+10]=g;g=(h[f+10]+g&65535)<<1;h[b+11]=g;g=(h[f+11]+g&65535)<<1;h[b+12]=g;g=(h[f+12]+g&65535)<<1;h[b+13]=g;g=(h[f+13]+g&65535)<<1;h[b+14]=g;h[b+15]=(h[f+14]+g&65535)<<1;b=0>(e|0);a:do if(!b){f=e+1|0;for(g=0;;){var i=p[a+ -(g<<2)+2>>1],k=i&65535;if(0!=i<<16>>16){var i=(k<<1)+d|0,m=p[i>>1];h[i>>1]=m+1&65535;i=m&65535;for(m=0;;){var j=i&1|m,m=j<<1,k=k-1|0;if(0>=(k|0))break;i>>>=1}h[a+(g<<2)>>1]=j&65535}g=g+1|0;if((g|0)==(f|0))break a}}while(0);ma=d}function oa(a,e,d){return 0==(e|0)?0:ff(a,e,d)}function Nf(c,e,d,b,f,g){var i,j,m=b>>2,ia=ma;ma+=32;var u;j=ia>>1;var y=ma;i=y>>1;ma+=32;Sb(ia,0,32,2);var A=0==(d|0);a:do if(!A)for(var n=0;;){var x=((p[e+(n<<1)>>1]&65535)<<1)+ia|0;h[x>>1]=h[x>>1]+1&65535;var q=n+1|0;if((q| -0)==(d|0))break a;n=q}while(0);for(var v=k[f>>2],t=15;;){if(0==(t|0)){var w=k[m];a[m]=w+4|0;l[w|0]=64;l[w+1|0]=1;h[w+2>>1]=0;var s=a[m];a[m]=s+4|0;l[s|0]=64;l[s+1|0]=1;h[s+2>>1]=0;a[f>>2]=1;var D=0;u=57;break}if(0!=h[(t<<1>>1)+j]<<16>>16){u=6;break}t=t-1|0}a:do if(6==u){for(var E=v>>>0>t>>>0?t:v,C=1;!(C>>>0>=t>>>0);){if(0!=h[(C<<1>>1)+j]<<16>>16)break;C=C+1|0}for(var z=E>>>0>>0?C:E,r=1,J=1;!(16<=r>>>0);){var F=(J<<1)-(p[(r<<1>>1)+j]&65535)|0;if(0>(F|0)){D=-1;break a}r=r+1|0;J=F}if(0<(J|0)&&!(0!= -(c|0)&1==(t|0)))D=-1;else{h[i+1]=0;var Q=h[j+1];h[i+2]=Q;var B=h[j+2]+Q&65535;h[i+3]=B;var X=h[j+3]+B&65535;h[i+4]=X;var Z=h[j+4]+X&65535;h[i+5]=Z;var K=h[j+5]+Z&65535;h[i+6]=K;var fa=h[j+6]+K&65535;h[i+7]=fa;var G=h[j+7]+fa&65535;h[i+8]=G;var M=h[j+8]+G&65535;h[i+9]=M;var ta=h[j+9]+M&65535;h[i+10]=ta;var Ma=h[j+10]+ta&65535;h[i+11]=Ma;var N=h[j+11]+Ma&65535;h[i+12]=N;var va=h[j+12]+N&65535;h[i+13]=va;var cb=h[j+13]+va&65535;h[i+14]=cb;h[i+15]=h[j+14]+cb&65535;b:do if(A)u=21;else for(var db=0;;){var ya= -p[e+(db<<1)>>1];if(0!=ya<<16>>16){var oa=((ya&65535)<<1)+y|0,wa=p[oa>>1];h[oa>>1]=wa+1&65535;h[g+((wa&65535)<<1)>>1]=db&65535}var xa=db+1|0;if((xa|0)==(d|0))break b;db=xa}while(0);if(0==c){var Ha=0,Na=1<>>0){D=1;break}var jb=2==(c|0);if(jb&591>>0){D=1;break}Ha=Ta;Na=za;tb=Da;Aa=Ya;Xa=Sa;Ia=jb}var eb=Na-1|0,rc=z&255,Ua=a[m],mc= --1,Ba=C,Oa=0,Za=z,$a=0,kb=Na,fb=0;b:for(;;){for(var pb=1<>1],ba=H&65535;if((ba|0)<(tb|0))var V=0,I=H;else(ba|0)<=(tb|0)?(V=96,I=0):(V=h[Aa+(ba<<1)>>1]&255,I=h[Xa+(ba<<1)>>1]);for(var sa=1<<$,ub=aa>>>($a>>>0),ha=pb;;){var ja=ha-sa|0,ka=ja+ub|0;l[(ka<<2)+Ua|0]=V;l[(ka<<2)+Ua+1|0]=qa;h[Ua+(ka<<2)+2>>1]=I;if((ha|0)==(sa|0))break;ha=ja}var W=1<>>1;if(0==(la&aa|0))break; -pa=la}if(0==(la|0)){var ua=0;u=37}else ra=la,u=36}while(0);36==u&&(ua=(ra-1&aa)+ra|0);var Va=P+1|0,Fa=(lb<<1)+ia|0,ab=h[Fa>>1]-1&65535;h[Fa>>1]=ab;if(0==ab<<16>>16){if((lb|0)==(t|0))break b;var T=p[e+((p[g+(Va<<1)>>1]&65535)<<1)>>1]&65535}else T=lb;if(!(T>>>0<=z>>>0)){var Y=ua&eb;if((Y|0)!=(mc|0))break}lb=T;P=Va;aa=ua}for(var U=0==($a|0)?z:$a,ca=(pb<<2)+Ua|0,ea=T-U|0,S=ea,Ea=1<>>0>=t>>>0)break;var vb=Ea-(p[(gb<<1>>1)+j]&65535)|0;if(1>(vb|0))break;var Wa=vb<<1,S=S+1|0,Ea= -Wa}var Ga=(1<>>0|Ia&591>>0){D=1;break a}l[(Y<<2)+a[m]|0]=S&255;l[(Y<<2)+a[m]+1|0]=rc;var hb=k[m];h[hb+(Y<<2)+2>>1]=(ca-hb|0)>>>2&65535;Ua=ca;mc=Y;Ba=T;Oa=Va;Za=S;$a=U;kb=Ga;fb=ua}var La=0==(ua|0);b:do if(!La)for(var Ca=qa,mb=ua,wb=$a,qb=lb,yb=Ua;;){if(0==(wb|0))var ib=yb,Pa=qb,Ja=0,Ka=Ca;else(mb&eb|0)==(mc|0)?(ib=yb,Pa=qb,Ja=wb,Ka=Ca):(ib=a[m],Pa=z,Ja=0,Ka=rc);var rb=mb>>>(Ja>>>0);l[(rb<<2)+ib|0]=64;l[(rb<<2)+ib+1|0]=Ka;h[ib+(rb<<2)+2>>1]=0;var Qa=1<>>1;if(0==(xb&mb|0))break;Bb=xb}if(0==(xb|0))break b;nb=xb}var bb=(nb-1&mb)+nb|0;if(0==(bb|0))break b;Ca=Ka;mb=bb;wb=Ja;qb=Pa;yb=ib}while(0);a[m]=(kb<<2)+a[m]|0;a[f>>2]=z;D=0}}while(0);ma=ia;return D}function ki(c,e){var d,b,f=k[c+28>>2];d=f>>2;var g=c|0,i=a[g>>2],j=c+4|0,m=i+(a[j>>2]-6)|0,h=c+12|0,u=a[h>>2],L=c+16|0,A=a[L>>2],n=u+(A-258)|0,x=k[d+11],q=k[d+12],v=k[d+13],t=f+56|0,w=f+60|0,D=a[d+19],E=a[d+20],C=(1<>2],ma=a[t>>2];a:for(;;){if(15>M>>>0)var Ma=fa+2|0,N=Ma,ta=M+16|0,cb=((y[fa+1|0]&255)<>1],xa=y[(va<<2)+D+1|0]&255,Na=ya>>>(xa>>>0),tb=db-xa|0,Aa=oa&255;if(0==oa<<24>>24){var Xa=G+1|0;l[Xa]=wa&255;var Ia=N,Da=Xa,Ya=tb,Sa=Na;b=57;break}if(0!=(Aa&16|0)){b=7;break}if(0==(Aa&64|0))var Ha=(Na& -(1<>2]=s.__str255|0;a[d]=29;var Ta=N,jb=G,eb=tb,za=Na;break a}a[d]=11;Ta=N;jb=G;eb=tb;za=Na;break a}}do if(7==b){var Ua=wa&65535,Ca=Aa&15;if(0==(Ca|0))var Ba=Ua,Oa=N,Za=tb,$a=Na;else{if(tb>>>0>>0)var kb=N+1|0,fb=kb,pb=tb+8|0,lb=((y[kb]&255)<>>(Ca>>>0)}if(15>Za>>>0)var P=Oa+2|0,aa=P,$=Za+16|0,qa=((y[Oa+1|0]&255)<>1],sa=y[(V<<2)+E+1|0]&255,ub=ba>>>(sa>>>0),ha=H-sa|0,ja=y[(V<<2)+E|0]&255;if(0!=(ja&16|0))break;if(0!=(ja&64|0)){a[c+24>>2]=s.__str154|0;a[d]=29;Ta=aa;jb=G;eb=ha;za=ub;break a}var ka=(ub&(1<>>0>>0){var ra=aa+1|0,pa=((y[ra]&255)<>>0>=na>>>0)var ua=ra,Va=la,Fa=pa;else var ab=aa+2|0,ua=ab,Va=ha+16|0,Fa=((y[ab]&255)<>>(na>>>0),ca=Va-na|0,ea=G,S=ea-z|0;if(Y>>>0>S>>>0){var Ea=Y-S|0,gb=Ea>>>0>x>>>0;do{if(gb){if(0==(a[r>>2]|0))break;a[c+24>>2]=s.__str53|0;a[d]=29;Ta=ua;jb=G;eb=ca;za=U;break a}b=22}while(0);do if(F){var vb=v+(Q-Ea)|0;if(Ea>>>0>=Ba>>>0)var Wa=vb,Ga=Ba,hb=G;else{for(var Qa=Ba-Ea|0,La=T-ea|0,mb=Z+La|0,wb=vb,qb=Ea,yb=G;;){var ib=wb+1|0,Pa=yb+1|0;l[Pa]=l[ib];var Ja=qb-1|0;if(0==(Ja|0))break;wb=ib;qb=Ja;yb=Pa}Wa=G+mb+W+(1-Y)|0;Ga=Qa;hb=G+z+La+W|0}}else if(q>>>0>>0){var Ka= -v+(B-Ea)|0,rb=Ea-q|0;if(rb>>>0>=Ba>>>0)Wa=Ka,Ga=Ba,hb=G;else{for(var Ra=Ba-rb|0,nb=T-ea|0,Bb=Ka,xb=rb,bb=G;;){var zb=Bb+1|0,Cb=bb+1|0;l[Cb]=l[zb];var ob=xb-1|0;if(0==(ob|0))break;Bb=zb;xb=ob;bb=Cb}var sb=G+K+nb+W|0;if(q>>>0>=Ra>>>0)Wa=J,Ga=Ra,hb=sb;else{for(var Ab=Ra-q|0,Hb=Z+nb|0,Eb=J,Db=q,Gb=sb;;){var Jb=Eb+1|0,Vb=Gb+1|0;l[Vb]=l[Jb];var $b=Db-1|0;if(0==($b|0))break;Eb=Jb;Db=$b;Gb=Vb}Wa=G+Hb+W+(1-Y)|0;Ga=Ab;hb=G+z+nb+W|0}}}else{var Kb=v+(X-Ea)|0;if(Ea>>>0>=Ba>>>0)Wa=Kb,Ga=Ba,hb=G;else{for(var Tb= -Ba-Ea|0,Fb=T-ea|0,Nb=Z+Fb|0,Lb=Kb,ac=Ea,Mb=G;;){var Ib=Lb+1|0,Wb=Mb+1|0;l[Wb]=l[Ib];var Rb=ac-1|0;if(0==(Rb|0))break;Lb=Ib;ac=Rb;Mb=Wb}Wa=G+Nb+W+(1-Y)|0;Ga=Tb;hb=G+z+Fb+W|0}}while(0);var Yb=2>>0;b:do if(Yb)for(var bc=hb,Sb=Ga,nc=Wa;;){l[bc+1|0]=l[nc+1|0];l[bc+2|0]=l[nc+2|0];var Qb=nc+3|0,cc=bc+3|0;l[cc]=l[Qb];var oc=Sb-3|0;if(2>=oc>>>0){var dc=cc,Ob=oc,Ub=Qb;break b}bc=cc;Sb=oc;nc=Qb}else dc=hb,Ob=Ga,Ub=Wa;while(0);if(0==(Ob|0)){Ia=ua;Da=dc;Ya=ca;Sa=U;break}var Zb=dc+1|0;l[Zb]=l[Ub+1|0];if(1>= -Ob>>>0){Ia=ua;Da=Zb;Ya=ca;Sa=U;break}var jc=dc+2|0;l[jc]=l[Ub+2|0];Ia=ua;Da=jc}else{for(var ec=G+-Y|0,vc=Ba,fc=G;;){l[fc+1|0]=l[ec+1|0];l[fc+2|0]=l[ec+2|0];var kc=ec+3|0,pc=fc+3|0;l[pc]=l[kc];var gc=vc-3|0;if(2>=gc>>>0)break;ec=kc;vc=gc;fc=pc}if(0==(gc|0)){Ia=ua;Da=pc;Ya=ca;Sa=U;break}var tc=fc+4|0;l[tc]=l[ec+4|0];if(1>=gc>>>0){Ia=ua;Da=tc;Ya=ca;Sa=U;break}var qc=fc+5|0;l[qc]=l[ec+5|0];Ia=ua;Da=qc}Ya=ca;Sa=U}while(0);if(!(Ia>>>0>>0&Da>>>0>>0)){Ta=Ia;jb=Da;eb=Ya;za=Sa;break}fa=Ia;G=Da;M=Ya;ma= -Sa}var hc=eb>>>3,Pb=Ta+-hc|0,ic=eb&7;a[g>>2]=Ta+(1-hc)|0;a[h>>2]=jb+1|0;a[j>>2]=(Pb>>>0>>0?m-Pb|0:m-Pb|0)+5|0;a[L>>2]=(jb>>>0>>0?n-jb|0:n-jb|0)+257|0;a[t>>2]=(1<>2]=ic}function Pc(c){var e,d=245>c>>>0;do{if(d){var b=11>c>>>0?16:c+11&-8,f=b>>>3;e=k[j>>2];var g=e>>>(f>>>0);if(0!=(g&3|0)){var c=(g&1^1)+f|0,b=c<<1,d=(b<<2)+j+40|0,f=(b+2<<2)+j+40|0,i=k[f>>2],b=i+8|0,g=k[b>>2];if((d|0)==(g|0))a[j>>2]=e&(1<>>0>2]>>>0)throw D(),"Reached an unreachable!";a[f>>2]= -g;a[g+12>>2]=d}e=c<<3;a[i+4>>2]=e|3;e=i+(e|4)|0;a[e>>2]|=1;i=b;e=37;break}if(b>>>0<=k[j+8>>2]>>>0){var h=b;e=29;break}if(0!=(g|0)){var c=2<>>12&16,i=d>>>(c>>>0),d=i>>>5&8,f=i>>>(d>>>0),i=f>>>2&4,g=f>>>(i>>>0),f=g>>>1&2,g=g>>>(f>>>0),m=g>>>1&1,i=(d|c|i|f|m)+(g>>>(m>>>0))|0,c=i<<1,f=(c<<2)+j+40|0,g=(c+2<<2)+j+40|0,d=k[g>>2],c=d+8|0,m=k[c>>2];if((f|0)==(m|0))a[j>>2]=e&(1<>>0>2]>>>0)throw D(),"Reached an unreachable!";a[g>>2]=m;a[m+12>>2]=f}i<<= -3;e=i-b|0;a[d+4>>2]=b|3;f=d;d=f+b|0;a[f+(b|4)>>2]=e|1;a[f+i>>2]=e;m=k[j+8>>2];if(0!=(m|0)){b=a[j+20>>2];f=m>>>2&1073741822;i=(f<<2)+j+40|0;g=k[j>>2];m=1<<(m>>>3);if(0==(g&m|0))a[j>>2]=g|m,g=i,f=(f+2<<2)+j+40|0;else if(f=(f+2<<2)+j+40|0,g=k[f>>2],!(g>>>0>=k[j+16>>2]>>>0))throw D(),"Reached an unreachable!";a[f>>2]=b;a[g+12>>2]=b;a[(b+8|0)>>2]=g;a[(b+12|0)>>2]=i}a[j+8>>2]=e;a[j+20>>2]=d;i=c;e=37;break}if(0==(a[j+4>>2]|0)){h=b;e=29;break}e=vg(b);if(0==(e|0)){h=b;e=29;break}i=e}else{if(4294967231>> -0){h=-1;e=29;break}e=c+11&-8;if(0==(a[j+4>>2]|0)){h=e;e=29;break}b=wg(e);if(0==(b|0)){h=e;e=29;break}i=b}e=37}while(0);29==e&&(b=k[j+8>>2],h>>>0>b>>>0?(e=k[j+12>>2],h>>>0>>0?(e=e-h|0,a[j+12>>2]=e,b=k[j+24>>2],a[j+24>>2]=b+h|0,a[h+(b+4)>>2]=e|1,a[b+4>>2]=h|3,i=b+8|0):i=xg(h)):(c=b-h|0,e=k[j+20>>2],15>>0?(a[j+20>>2]=e+h|0,a[j+8>>2]=c,a[h+(e+4)>>2]=c|1,a[e+b>>2]=c,a[e+4>>2]=h|3):(a[j+8>>2]=0,a[j+20>>2]=0,a[e+4>>2]=b|3,h=b+(e+4)|0,a[h>>2]|=1),i=e+8|0));return i}function vg(c){var e,d,b=a[j+4>>2], -f=(b&-b)-1|0,b=f>>>12&16,g=f>>>(b>>>0),f=g>>>5&8;d=g>>>(f>>>0);var g=d>>>2&4,i=d>>>(g>>>0);d=i>>>1&2;var i=i>>>(d>>>0),h=i>>>1&1,b=f=k[j+((f|b|g|d|h)+(i>>>(h>>>0))<<2)+304>>2];d=b>>2;f=(a[f+4>>2]&-8)-c|0;a:for(;;)for(g=b;;){i=a[g+16>>2];if(0==(i|0)){if(g=a[g+20>>2],0==(g|0))break a}else g=i;i=(a[g+4>>2]&-8)-c|0;if(i>>>0>>0){b=g;d=b>>2;f=i;continue a}}var i=b,m=k[j+16>>2],h=i>>>0>>0;do if(!h){var l=i+c|0,g=l;if(!(i>>>0>=l>>>0)){var h=k[d+6],l=k[d+3],u=(l|0)==(b|0);do{if(u){e=b+20|0;var p=a[e>> -2];if(0==(p|0)&&(e=b+16|0,p=a[e>>2],0==(p|0))){p=0;e=p>>2;break}for(;;){var A=p+20|0,n=a[A>>2];if(0==(n|0)&&(A=p+16|0,n=k[A>>2],0==(n|0)))break;e=A;p=n}if(e>>>0>>0)throw D(),"Reached an unreachable!";a[e>>2]=0}else{e=k[d+2];if(e>>>0>>0)throw D(),"Reached an unreachable!";a[e+12>>2]=l;a[l+8>>2]=e;p=l}e=p>>2}while(0);m=0==(h|0);a:do if(!m){l=b+28|0;u=(a[l>>2]<<2)+j+304|0;A=(b|0)==(a[u>>2]|0);do{if(A){a[u>>2]=p;if(0!=(p|0))break;a[j+4>>2]&=1<>2]^-1;break a}if(h>>>0>2]>>>0)throw D(), -"Reached an unreachable!";n=h+16|0;(a[n>>2]|0)==(b|0)?a[n>>2]=p:a[h+20>>2]=p;if(0==(p|0))break a}while(0);if(p>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+6]=h;l=k[d+4];if(0!=(l|0)){if(l>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+4]=l;a[l+24>>2]=p}l=k[d+5];if(0!=(l|0)){if(l>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+5]=l;a[l+24>>2]=p}}while(0);if(16>f>>>0)c=f+c|0,a[d+1]=c|3,c=c+(i+4)|0,a[c>>2]|=1;else{a[d+1]=c|3;a[c+(i+4)>>2]=f|1;a[i+f+c>>2]=f;m=k[j+ -8>>2];if(0!=(m|0)){c=k[j+20>>2];i=m>>>2&1073741822;d=(i<<2)+j+40|0;h=k[j>>2];m=1<<(m>>>3);if(0==(h&m|0))a[j>>2]=h|m,h=d,i=(i+2<<2)+j+40|0;else if(i=(i+2<<2)+j+40|0,h=k[i>>2],!(h>>>0>=k[j+16>>2]>>>0))throw D(),"Reached an unreachable!";a[i>>2]=c;a[h+12>>2]=c;a[c+8>>2]=h;a[c+12>>2]=d}a[j+8>>2]=f;a[j+20>>2]=g}return b+8|0}}while(0);D();throw"Reached an unreachable!";}function wg(c){var e,d,b,f,g,i=c>>2,h=-c|0,m=c>>>8;if(0==(m|0))var l=0;else if(16777215>>0)l=31;else var p=(m+1048320|0)>>>16&8,u=m<< -p,A=(u+520192|0)>>>16&4,n=u<>>16&2,q=14-(A|p|x)+(n<>>15)|0,l=c>>>((q+7|0)>>>0)&1|q<<1;var v=k[j+(l<<2)+304>>2],t=0==(v|0);a:do if(t)var w=0,y=h,s=0;else{var E=31==(l|0)?0:25-(l>>>1)|0,C=0,z=h,r=v;g=r>>2;for(var J=c<>>0>>0){if((Q|0)==(c|0)){w=r;y=B;s=r;break a}var X=r,Z=B}else X=C,Z=z;var K=k[g+5],fa=k[((J>>>31<<2)+16>>2)+g],G=0==(K|0)|(K|0)==(fa|0)?F:K;if(0==(fa|0)){w=X;y=Z;s=G;break a}C=X;z=Z;r=fa;g=r>>2;J<<=1;F=G}}while(0);if(0==(s| -0)&0==(w|0)){var M=2<>2]&(M|-M);if(0==(ma|0))var ta=s;else var N=(ma&-ma)-1|0,va=N>>>12&16,cb=N>>>(va>>>0),oa=cb>>>5&8,ya=cb>>>(oa>>>0),wa=ya>>>2&4,xa=ya>>>(wa>>>0),za=xa>>>1&2,Ca=xa>>>(za>>>0),Na=Ca>>>1&1,ta=a[j+((oa|va|wa|za|Na)+(Ca>>>(Na>>>0))<<2)+304>>2]}else ta=s;var Ha=0==(ta|0);a:do if(Ha){var Aa=y,Xa=w;f=Xa>>2}else{var Ia=ta;b=Ia>>2;for(var Da=y,Ya=w;;){var Sa=(a[b+1]&-8)-c|0,La=Sa>>>0>>0,Ta=La?Sa:Da,jb=La?Ia:Ya,eb=k[b+4];if(0!=(eb|0))Ia=eb;else{var Qa=k[b+5];if(0==(Qa|0)){Aa= -Ta;Xa=jb;f=Xa>>2;break a}Ia=Qa}b=Ia>>2;Da=Ta;Ya=jb}}while(0);var Ua=0==(Xa|0);a:do if(Ua)var Ra=0;else if(Aa>>>0>=(a[j+8>>2]-c|0)>>>0)Ra=0;else{var Ba=Xa;d=Ba>>2;var Oa=k[j+16>>2],Za=Ba>>>0>>0;do if(!Za){var $a=Ba+c|0,kb=$a;if(!(Ba>>>0>=$a>>>0)){var fb=k[f+6],pb=k[f+3],lb=(pb|0)==(Xa|0);do{if(lb){var P=Xa+20|0,aa=a[P>>2];if(0==(aa|0)){var $=Xa+16|0,qa=a[$>>2];if(0==(qa|0)){var H=0;e=H>>2;break}var ba=$,V=qa}else ba=P,V=aa;for(;;){var I=V+20|0,sa=a[I>>2];if(0!=(sa|0))ba=I,V=sa;else{var ub=V+16| -0,ha=k[ub>>2];if(0==(ha|0))break;ba=ub;V=ha}}if(ba>>>0>>0)throw D(),"Reached an unreachable!";a[ba>>2]=0;H=V}else{var ja=k[f+2];if(ja>>>0>>0)throw D(),"Reached an unreachable!";a[ja+12>>2]=pb;a[pb+8>>2]=ja;H=pb}e=H>>2}while(0);var ka=0==(fb|0);b:do if(!ka){var W=Xa+28|0,na=(a[W>>2]<<2)+j+304|0,ra=(Xa|0)==(a[na>>2]|0);do{if(ra){a[na>>2]=H;if(0!=(H|0))break;a[j+4>>2]&=1<>2]^-1;break b}if(fb>>>0>2]>>>0)throw D(),"Reached an unreachable!";var pa=fb+16|0;(a[pa>>2]|0)==(Xa|0)?a[pa>> -2]=H:a[fb+20>>2]=H;if(0==(H|0))break b}while(0);if(H>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+6]=fb;var la=k[f+4];if(0!=(la|0)){if(la>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+4]=la;a[la+24>>2]=H}var ua=k[f+5];if(0!=(ua|0)){if(ua>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+5]=ua;a[ua+24>>2]=H}}while(0);var Va=16>Aa>>>0;b:do if(Va){var Fa=Aa+c|0;a[f+1]=Fa|3;var ab=Fa+(Ba+4)|0;a[ab>>2]|=1}else if(a[f+1]=c|3,a[i+(d+1)]=Aa|1,a[(Aa>>2)+d+i]=Aa,256>Aa>>> -0){var T=Aa>>>2&1073741822,Y=(T<<2)+j+40|0,U=k[j>>2],ca=1<<(Aa>>>3);if(0==(U&ca|0)){a[j>>2]=U|ca;var ea=Y,S=(T+2<<2)+j+40|0}else{var Ea=(T+2<<2)+j+40|0,gb=k[Ea>>2];if(gb>>>0>=k[j+16>>2]>>>0)ea=gb,S=Ea;else throw D(),"Reached an unreachable!";}a[S>>2]=kb;a[ea+12>>2]=kb;a[i+(d+2)]=ea;a[i+(d+3)]=Y}else{var vb=$a,Wa=Aa>>>8;if(0==(Wa|0))var Ga=0;else if(16777215>>0)Ga=31;else var hb=(Wa+1048320|0)>>>16&8,ob=Wa<>>16&4,mb=ob<>>16&2,qb=14-(sb|hb|wb)+(mb<>> -15)|0,Ga=Aa>>>((qb+7|0)>>>0)&1|qb<<1;var yb=(Ga<<2)+j+304|0;a[i+(d+7)]=Ga;var ib=c+(Ba+16)|0;a[i+(d+5)]=0;a[ib>>2]=0;var Pa=a[j+4>>2],Ja=1<>2]=Pa|Ja,a[yb>>2]=vb,a[i+(d+6)]=yb,a[i+(d+3)]=vb,a[i+(d+2)]=vb;else for(var Ka=Aa<<(31==(Ga|0)?0:25-(Ga>>>1)|0),rb=a[yb>>2];;){if((a[rb+4>>2]&-8|0)==(Aa|0)){var Ab=rb+8|0,nb=k[Ab>>2],Bb=k[j+16>>2],xb=rb>>>0>>0;do if(!xb&&!(nb>>>0>>0)){a[nb+12>>2]=vb;a[Ab>>2]=vb;a[i+(d+2)]=nb;a[i+(d+3)]=rb;a[i+(d+6)]=0;break b}while(0);D();throw"Reached an unreachable!"; -}var bb=(Ka>>>31<<2)+rb+16|0,zb=k[bb>>2];if(0==(zb|0)){if(bb>>>0>=k[j+16>>2]>>>0){a[bb>>2]=vb;a[i+(d+6)]=rb;a[i+(d+3)]=vb;a[i+(d+2)]=vb;break b}D();throw"Reached an unreachable!";}Ka<<=1;rb=zb}}while(0);Ra=Xa+8|0;break a}}while(0);D();throw"Reached an unreachable!";}while(0);return Ra}function xg(c){var e,d;0==(a[wa>>2]|0)&&hf();var b=0==(a[j+440>>2]&4|0);do if(b){d=a[j+24>>2];if(0==(d|0))d=5;else if(d=od(d),0==(d|0))d=5;else{var f=a[wa+8>>2],f=c+47-a[j+12>>2]+f&-f;if(2147483647<=f>>>0)d=13;else{var g= -Ca(f);if((g|0)==(a[d>>2]+a[d+4>>2]|0)){var i=g,h=f;e=g;d=12}else{var m=g,l=f;d=14}}}if(5==d)if(d=Ca(0),-1==(d|0))d=13;else{var f=a[wa+8>>2],f=f+(c+47)&-f,g=d,p=a[wa+4>>2],u=p-1|0,f=0==(u&g|0)?f:f-g+(u+g&-p)|0;2147483647<=f>>>0?d=13:(g=Ca(f),(g|0)==(d|0)?(i=d,h=f,e=g,d=12):(m=g,l=f,d=14))}if(13==d)a[j+440>>2]|=4,d=22;else{if(12==d){if(-1!=(i|0)){var A=h,n=i;d=25;break}m=e;l=h}d=-l|0;if(-1!=(m|0)&2147483647>l>>>0)if(l>>>0>=(c+48|0)>>>0){var x=l;d=20}else f=a[wa+8>>2],f=c+47-l+f&-f,2147483647<=f>>>0? -(x=l,d=20):-1==(Ca(f)|0)?(Ca(d),d=21):(x=f+l|0,d=20);else x=l,d=20;20==d&&-1!=(m|0)?(A=x,n=m,d=25):(a[j+440>>2]|=4,d=22)}}else d=22;while(0);22==d&&(b=a[wa+8>>2],b=b+(c+47)&-b,2147483647<=b>>>0?d=48:(b=Ca(b),i=Ca(0),-1!=(i|0)&-1!=(b|0)&b>>>0>>0?(i=i-b|0,i>>>0<=(c+40|0)>>>0|-1==(b|0)?d=48:(A=i,n=b,d=25)):d=48));a:do if(25==d){b=a[j+432>>2]+A|0;a[j+432>>2]=b;b>>>0>k[j+436>>2]>>>0&&(a[j+436>>2]=b);b=k[j+24>>2];i=0==(b|0);b:do if(i){h=k[j+16>>2];0==(h|0)|n>>>0>>0&&(a[j+16>>2]=n);a[j+444>>2]=n;a[j+ -448>>2]=A;a[j+456>>2]=0;a[j+36>>2]=a[wa>>2];a[j+32>>2]=-1;for(h=0;!(e=h<<1,m=(e<<2)+j+40|0,a[j+(e+3<<2)+40>>2]=m,a[j+(e+2<<2)+40>>2]=m,h=h+1|0,32==(h|0)););pd(n,A-40|0)}else{m=j+444|0;for(e=m>>2;!(0==(m|0));){h=k[e];m=m+4|0;l=k[m>>2];x=h+l|0;if((n|0)==(x|0)){if(0!=(a[e+3]&8|0))break;e=b;if(!(e>>>0>=h>>>0&e>>>0>>0))break;a[m>>2]=l+A|0;pd(a[j+24>>2],a[j+12>>2]+A|0);break b}m=a[e+2];e=m>>2}n>>>0>2]>>>0&&(a[j+16>>2]=n);e=n+A|0;for(m=j+444|0;!(0==(m|0));){l=m|0;h=k[l>>2];if((h|0)==(e|0)){if(0!= -(a[m+12>>2]&8|0))break;a[l>>2]=n;var q=m+4|0;a[q>>2]=a[q>>2]+A|0;q=yg(n,h,c);d=49;break a}m=a[m+8>>2]}zg(n,A)}while(0);b=k[j+12>>2];b>>>0<=c>>>0?d=48:(q=b-c|0,a[j+12>>2]=q,i=b=k[j+24>>2],a[j+24>>2]=i+c|0,a[c+(i+4)>>2]=q|1,a[b+4>>2]=c|3,q=b+8|0,d=49)}while(0);48==d&&(a[Z.ret>>2]=12,q=0);return q}function jf(){var c;0==(a[wa>>2]|0)&&hf();var e=k[j+24>>2],d=0==(e|0);a:do if(!d){var b=k[j+12>>2],f=40>>0;do if(f){var g=k[wa+8>>2],i=(Math.floor(((b-41+g|0)>>>0)/(g>>>0))-1)*g|0,h=od(e);if(0==(a[h+12>> -2]&8|0)){var m=Ca(0);c=(h+4|0)>>2;if((m|0)==(a[h>>2]+a[c]|0)&&(i=Ca(-(2147483646>>0?-2147483648-g|0:i)|0),g=Ca(0),-1!=(i|0)&g>>>0>>0&&(i=m-g|0,(m|0)!=(g|0)))){a[c]=a[c]-i|0;a[j+432>>2]=a[j+432>>2]-i|0;pd(a[j+24>>2],a[j+12>>2]-i|0);break a}}}while(0);k[j+12>>2]>>>0<=k[j+28>>2]>>>0||(a[j+28>>2]=-1)}while(0)}function Ag(c){var e,d,b,f,g,i,h=c>>2,m,l=0==(c|0);a:do if(!l){var p=c-8|0,u=p,A=k[j+16>>2],n=p>>>0>>0;b:do if(!n){var x=k[c-4>>2],q=x&3;if(1!=(q|0)){var v=x&-8;i=v>>2;var t=c+(v-8)|0,w= -t,y=0==(x&1|0);c:do if(y){var s=k[p>>2];if(0==(q|0))break a;var E=-8-s|0;g=E>>2;var C=c+E|0,z=C,r=s+v|0;if(C>>>0>>0)break b;if((z|0)==(a[j+20>>2]|0)){f=(c+(v-4)|0)>>2;if(3!=(a[f]&3|0)){var J=z;b=J>>2;var F=r;break}a[j+8>>2]=r;a[f]&=-2;a[g+(h+1)]=r|1;a[t>>2]=r;break a}if(256>s>>>0){var Q=k[g+(h+2)],B=k[g+(h+3)];if((Q|0)==(B|0))a[j>>2]&=1<<(s>>>3)^-1,J=z,b=J>>2,F=r;else{var X=((s>>>2&1073741822)<<2)+j+40|0,Z=(Q|0)!=(X|0)&Q>>>0>>0;do if(!Z&&(B|0)==(X|0)|B>>>0>=A>>>0){a[Q+12>>2]=B;a[B+8>>2]=Q;J= -z;b=J>>2;F=r;break c}while(0);D();throw"Reached an unreachable!";}}else{var K=C,fa=k[g+(h+6)],G=k[g+(h+3)],M=(G|0)==(K|0);do{if(M){var ma=E+(c+20)|0,ta=a[ma>>2];if(0==(ta|0)){var N=E+(c+16)|0,va=a[N>>2];if(0==(va|0)){var oa=0;d=oa>>2;break}var wa=N,ya=va}else wa=ma,ya=ta,m=20;for(;;){var xa=ya+20|0,za=a[xa>>2];if(0!=(za|0))wa=xa,ya=za;else{var Ca=ya+16|0,Ha=k[Ca>>2];if(0==(Ha|0))break;wa=Ca;ya=Ha}}if(wa>>>0>>0)throw D(),"Reached an unreachable!";a[wa>>2]=0;oa=ya}else{var Na=k[g+(h+2)];if(Na>>> -0>>0)throw D(),"Reached an unreachable!";a[Na+12>>2]=G;a[G+8>>2]=Na;oa=G}d=oa>>2}while(0);if(0!=(fa|0)){var La=E+(c+28)|0,Aa=(a[La>>2]<<2)+j+304|0,Xa=(K|0)==(a[Aa>>2]|0);do{if(Xa){a[Aa>>2]=oa;if(0!=(oa|0))break;a[j+4>>2]&=1<>2]^-1;J=z;b=J>>2;F=r;break c}if(fa>>>0>2]>>>0)throw D(),"Reached an unreachable!";var Ia=fa+16|0;(a[Ia>>2]|0)==(K|0)?a[Ia>>2]=oa:a[fa+20>>2]=oa;if(0==(oa|0)){J=z;b=J>>2;F=r;break c}}while(0);if(oa>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[d+6]= -fa;var Da=k[g+(h+4)];if(0!=(Da|0)){if(Da>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[d+4]=Da;a[Da+24>>2]=oa}var Ya=k[g+(h+5)];if(0!=(Ya|0)){if(Ya>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[d+5]=Ya;a[Ya+24>>2]=oa}}J=z;b=J>>2;F=r}}else J=u,b=J>>2,F=v;while(0);var Sa=J;if(!(Sa>>>0>=t>>>0)){var Qa=c+(v-4)|0,Ta=k[Qa>>2];if(0!=(Ta&1|0)){var jb=0==(Ta&2|0);do if(jb){if((w|0)==(a[j+24>>2]|0)){var eb=a[j+12>>2]+F|0;a[j+12>>2]=eb;a[j+24>>2]=J;a[b+1]=eb|1;(J|0)==(a[j+20>>2]|0)&&(a[j+ -20>>2]=0,a[j+8>>2]=0);if(eb>>>0<=k[j+28>>2]>>>0)break a;jf();break a}if((w|0)==(a[j+20>>2]|0)){var Ra=a[j+8>>2]+F|0;a[j+8>>2]=Ra;a[j+20>>2]=J;a[b+1]=Ra|1;a[(Sa+Ra|0)>>2]=Ra;break a}var Ua=(Ta&-8)+F|0,ob=Ta>>>3,Ba=256>Ta>>>0;c:do if(Ba){var Oa=k[h+i],Za=k[((v|4)>>2)+h];if((Oa|0)==(Za|0))a[j>>2]&=1<>>2&1073741822)<<2)+j+40|0;m=(Oa|0)==($a|0)?62:Oa>>>0>2]>>>0?65:62;do if(62==m&&!((Za|0)!=($a|0)&&Za>>>0>2]>>>0)){a[Oa+12>>2]=Za;a[Za+8>>2]=Oa;break c}while(0);D(); -throw"Reached an unreachable!";}}else{var kb=t,fb=k[i+(h+4)],pb=k[((v|4)>>2)+h],lb=(pb|0)==(kb|0);do{if(lb){var P=v+(c+12)|0,aa=a[P>>2];if(0==(aa|0)){var $=v+(c+8)|0,qa=a[$>>2];if(0==(qa|0)){var H=0;e=H>>2;break}var ba=$,V=qa}else ba=P,V=aa,m=72;for(;;){var I=V+20|0,sa=a[I>>2];if(0!=(sa|0))ba=I,V=sa;else{var ub=V+16|0,ha=k[ub>>2];if(0==(ha|0))break;ba=ub;V=ha}}if(ba>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[ba>>2]=0;H=V}else{var ja=k[h+i];if(ja>>>0>2]>>>0)throw D(),"Reached an unreachable!"; -a[ja+12>>2]=pb;a[pb+8>>2]=ja;H=pb}e=H>>2}while(0);if(0!=(fb|0)){var ka=v+(c+20)|0,W=(a[ka>>2]<<2)+j+304|0,na=(kb|0)==(a[W>>2]|0);do{if(na){a[W>>2]=H;if(0!=(H|0))break;a[j+4>>2]&=1<>2]^-1;break c}if(fb>>>0>2]>>>0)throw D(),"Reached an unreachable!";var ra=fb+16|0;(a[ra>>2]|0)==(kb|0)?a[ra>>2]=H:a[fb+20>>2]=H;if(0==(H|0))break c}while(0);if(H>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+6]=fb;var pa=k[i+(h+2)];if(0!=(pa|0)){if(pa>>>0>2]>>>0)throw D(),"Reached an unreachable!"; -a[e+4]=pa;a[pa+24>>2]=H}var la=k[i+(h+3)];if(0!=(la|0)){if(la>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[e+5]=la;a[la+24>>2]=H}}}while(0);a[b+1]=Ua|1;a[Sa+Ua>>2]=Ua;if((J|0)!=(a[j+20>>2]|0))var ua=Ua;else{a[j+8>>2]=Ua;break a}}else a[Qa>>2]=Ta&-2,a[b+1]=F|1,ua=a[Sa+F>>2]=F;while(0);if(256>ua>>>0){var Va=ua>>>2&1073741822,Fa=(Va<<2)+j+40|0,ab=k[j>>2],T=1<<(ua>>>3);if(0==(ab&T|0)){a[j>>2]=ab|T;var Y=Fa,U=(Va+2<<2)+j+40|0}else{var ca=(Va+2<<2)+j+40|0,ea=k[ca>>2];if(ea>>>0>=k[j+16>>2]>>> -0)Y=ea,U=ca;else throw D(),"Reached an unreachable!";}a[U>>2]=J;a[Y+12>>2]=J;a[b+2]=Y;a[b+3]=Fa;break a}var S=J,Ea=ua>>>8;if(0==(Ea|0))var gb=0;else if(16777215>>0)gb=31;else var vb=(Ea+1048320|0)>>>16&8,Wa=Ea<>>16&4,hb=Wa<>>16&2,Ab=14-(Ga|vb|sb)+(hb<>>15)|0,gb=ua>>>((Ab+7|0)>>>0)&1|Ab<<1;var mb=(gb<<2)+j+304|0;a[b+7]=gb;a[b+5]=0;a[b+4]=0;var wb=a[j+4>>2],qb=1<>2]=wb|qb,a[mb>>2]=S,a[b+6]=mb,a[b+3]=J,a[b+2]=J;else for(var ib= -ua<<(31==(gb|0)?0:25-(gb>>>1)|0),Pa=a[mb>>2];;){if((a[Pa+4>>2]&-8|0)==(ua|0)){var Ja=Pa+8|0,Ka=k[Ja>>2],rb=k[j+16>>2],Eb=Pa>>>0>>0;do if(!Eb&&!(Ka>>>0>>0)){a[Ka+12>>2]=S;a[Ja>>2]=S;a[b+2]=Ka;a[b+3]=Pa;a[b+6]=0;break c}while(0);D();throw"Reached an unreachable!";}var nb=(ib>>>31<<2)+Pa+16|0,Bb=k[nb>>2];if(0==(Bb|0)){if(nb>>>0>=k[j+16>>2]>>>0){a[nb>>2]=S;a[b+6]=Pa;a[b+3]=J;a[b+2]=J;break c}D();throw"Reached an unreachable!";}ib<<=1;Pa=Bb}while(0);var xb=a[j+32>>2]-1|0;a[j+32>>2]=xb;if(0!=(xb| -0))break a;var bb=a[j+452>>2],zb=0==(bb|0);c:do if(!zb)for(var Cb=bb;;){var Db=a[Cb+8>>2];if(0==(Db|0))break c;Cb=Db}while(0);a[j+32>>2]=-1;break a}}}}while(0);D();throw"Reached an unreachable!";}while(0)}function od(c){var e,d=j+444|0;for(e=d>>2;;){var b=k[e];if(b>>>0<=c>>>0&&(b+a[e+1]|0)>>>0>c>>>0){var f=d;break}e=k[e+2];if(0==(e|0)){f=0;break}d=e;e=d>>2}return f}function pd(c,e){var d=c+8|0,d=0==(d&7|0)?0:-d&7,b=e-d|0;a[j+24>>2]=c+d|0;a[j+12>>2]=b;a[d+(c+4)>>2]=b|1;a[e+(c+4)>>2]=40;a[j+28>>2]= -a[wa+16>>2]}function hf(){if(0==(a[wa>>2]|0)){var c=Gh(8);if(0==(c-1&c|0))a[wa+8>>2]=c,a[wa+4>>2]=c,a[wa+12>>2]=-1,a[wa+16>>2]=2097152,a[wa+20>>2]=0,a[j+440>>2]=0,c=Math.floor(Date.now()/1E3),a[wa>>2]=c&-16^1431655768;else throw D(),"Reached an unreachable!";}}function yg(c,e,d){var b,f,g,i=e>>2,h=c>>2,m,l=c+8|0,l=0==(l&7|0)?0:-l&7;f=e+8|0;var p=0==(f&7|0)?0:-f&7;g=p>>2;var u=e+p|0,A=l+d|0;f=A>>2;var n=c+A|0,x=u-(c+l)-d|0;a[(l+4>>2)+h]=d|3;d=(u|0)==(a[j+24>>2]|0);a:do if(d){var q=a[j+12>>2]+x|0;a[j+ -12>>2]=q;a[j+24>>2]=n;a[f+(h+1)]=q|1}else if((u|0)==(a[j+20>>2]|0))q=a[j+8>>2]+x|0,a[j+8>>2]=q,a[j+20>>2]=n,a[f+(h+1)]=q|1,a[(c+q+A|0)>>2]=q;else{m=k[g+(i+1)];if(1==(m&3|0)){var q=m&-8,v=m>>>3,t=256>m>>>0;b:do if(t){var w=k[((p|8)>>2)+i],s=k[g+(i+3)];if((w|0)==(s|0))a[j>>2]&=1<>>2&1073741822)<<2)+j+40|0;m=(w|0)==(v|0)?14:w>>>0>2]>>>0?17:14;do if(14==m&&!((s|0)!=(v|0)&&s>>>0>2]>>>0)){a[w+12>>2]=s;a[s+8>>2]=w;break b}while(0);D();throw"Reached an unreachable!";}}else{var w= -u,s=k[((p|24)>>2)+i],y=k[g+(i+3)],E=(y|0)==(w|0);do{if(E){b=p|16;var C=b+(e+4)|0,z=a[C>>2];if(0==(z|0)){if(b=e+b|0,z=a[b>>2],0==(z|0)){z=0;b=z>>2;break}}else b=C;for(;;){var C=z+20|0,r=a[C>>2];if(0==(r|0)&&(C=z+16|0,r=k[C>>2],0==(r|0)))break;b=C;z=r}if(b>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b>>2]=0}else{b=k[((p|8)>>2)+i];if(b>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b+12>>2]=y;a[y+8>>2]=b;z=y}b=z>>2}while(0);if(0!=(s|0)){y=p+(e+28)|0;E=(a[y>>2]<<2)+j+304|0;C=(w| -0)==(a[E>>2]|0);do{if(C){a[E>>2]=z;if(0!=(z|0))break;a[j+4>>2]&=1<>2]^-1;break b}if(s>>>0>2]>>>0)throw D(),"Reached an unreachable!";r=s+16|0;(a[r>>2]|0)==(w|0)?a[r>>2]=z:a[s+20>>2]=z;if(0==(z|0))break b}while(0);if(z>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b+6]=s;w=p|16;s=k[(w>>2)+i];if(0!=(s|0)){if(s>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b+4]=s;a[s+24>>2]=z}w=k[(w+4>>2)+i];if(0!=(w|0)){if(w>>>0>2]>>>0)throw D(),"Reached an unreachable!";a[b+ -5]=w;a[w+24>>2]=z}}}while(0);m=e+(q|p)|0;q=q+x|0}else m=u,q=x;m=m+4|0;a[m>>2]&=-2;a[f+(h+1)]=q|1;a[(q>>2)+h+f]=q;if(256>q>>>0){v=q>>>2&1073741822;m=(v<<2)+j+40|0;t=k[j>>2];q=1<<(q>>>3);if(0==(t&q|0))a[j>>2]=t|q,q=m,v=(v+2<<2)+j+40|0;else if(v=(v+2<<2)+j+40|0,q=k[v>>2],!(q>>>0>=k[j+16>>2]>>>0))throw D(),"Reached an unreachable!";a[v>>2]=n;a[q+12>>2]=n;a[f+(h+2)]=q;a[f+(h+3)]=m}else if(m=n,t=q>>>8,0==(t|0)?t=0:16777215>>0?t=31:(v=(t+1048320|0)>>>16&8,w=t<>>16&4,w<<=t,s=(w+245760| -0)>>>16&2,v=14-(t|v|s)+(w<>>15)|0,t=q>>>((v+7|0)>>>0)&1|v<<1),v=(t<<2)+j+304|0,a[f+(h+7)]=t,w=A+(c+16)|0,a[f+(h+5)]=0,a[w>>2]=0,w=a[j+4>>2],s=1<>2]=w|s,a[v>>2]=m,a[f+(h+6)]=v,a[f+(h+3)]=m,a[f+(h+2)]=m;else{t=q<<(31==(t|0)?0:25-(t>>>1)|0);for(v=a[v>>2];;){if((a[v+4>>2]&-8|0)==(q|0)){e=v+8|0;i=k[e>>2];g=k[j+16>>2];p=v>>>0>>0;do if(!p&&!(i>>>0>>0)){a[i+12>>2]=m;a[e>>2]=m;a[f+(h+2)]=i;a[f+(h+3)]=v;a[f+(h+6)]=0;break a}while(0);D();throw"Reached an unreachable!";}w=(t>>>31<< -2)+v+16|0;s=k[w>>2];if(0==(s|0)){if(w>>>0>=k[j+16>>2]>>>0){a[w>>2]=m;a[f+(h+6)]=v;a[f+(h+3)]=m;a[f+(h+2)]=m;break a}D();throw"Reached an unreachable!";}t<<=1;v=s}}}while(0);return c+(l|8)|0}function zg(c,e){var d,b,f=k[j+24>>2];b=f>>2;var g=od(f),i=a[g>>2];d=a[g+4>>2];var g=i+d|0,h=i+(d-39)|0,i=i+(d-47)+(0==(h&7|0)?0:-h&7)|0,i=i>>>0<(f+16|0)>>>0?f:i,h=i+8|0;d=h>>2;pd(c,e-40|0);a[(i+4|0)>>2]=27;a[d]=a[j+444>>2];a[d+1]=a[j+448>>2];a[d+2]=a[j+452>>2];a[d+3]=a[j+456>>2];a[j+444>>2]=c;a[j+448>>2]=e;a[j+ -456>>2]=0;a[j+452>>2]=h;d=i+28|0;a[d>>2]=7;h=(i+32|0)>>>0>>0;a:do if(h)for(var m=d;;){var l=m+4|0;a[l>>2]=7;if((m+8|0)>>>0>=g>>>0)break a;m=l}while(0);g=(i|0)==(f|0);a:do if(!g)if(d=i-f|0,h=f+d|0,m=d+(f+4)|0,a[m>>2]&=-2,a[b+1]=d|1,a[h>>2]=d,256>d>>>0){m=d>>>2&1073741822;h=(m<<2)+j+40|0;l=k[j>>2];d=1<<(d>>>3);if(0==(l&d|0))a[j>>2]=l|d,d=h,m=(m+2<<2)+j+40|0;else if(m=(m+2<<2)+j+40|0,d=k[m>>2],!(d>>>0>=k[j+16>>2]>>>0))throw D(),"Reached an unreachable!";a[m>>2]=f;a[d+12>>2]=f;a[b+2]=d;a[b+3]=h}else{h= -f;l=d>>>8;if(0==(l|0))l=0;else if(16777215>>0)l=31;else var m=(l+1048320|0)>>>16&8,p=l<>>16&4,p=p<>>16&2,m=14-(l|m|s)+(p<>>15)|0,l=d>>>((m+7|0)>>>0)&1|m<<1;m=(l<<2)+j+304|0;a[b+7]=l;a[b+5]=0;a[b+4]=0;p=a[j+4>>2];s=1<>2]=p|s,a[m>>2]=h,a[b+6]=m,a[b+3]=f,a[b+2]=f;else{l=d<<(31==(l|0)?0:25-(l>>>1)|0);for(m=a[m>>2];;){if((a[m+4>>2]&-8|0)==(d|0)){f=m+8|0;i=k[f>>2];g=k[j+16>>2];d=m>>>0>>0;do if(!d&&!(i>>>0>>0)){a[i+12>>2]=h;a[f>>2]=h; -a[b+2]=i;a[b+3]=m;a[b+6]=0;break a}while(0);D();throw"Reached an unreachable!";}p=(l>>>31<<2)+m+16|0;s=k[p>>2];if(0==(s|0)){if(p>>>0>=k[j+16>>2]>>>0){a[p>>2]=h;a[b+6]=m;a[b+3]=f;a[b+2]=f;break a}D();throw"Reached an unreachable!";}l<<=1;m=s}}}while(0)}function Z(c){Z.ret||(Z.ret=E([0],"i32",u));return a[Z.ret>>2]=c}function Hh(a,e,d,b){var f=C.streams[a];if(!f||f.object.isDevice)return Z(Qa),-1;if(f.isRead){if(f.object.isFolder)return Z(yd),-1;if(0>d||0>b)return Z(Jb),-1;for(a=0;f.ungotten.length&& -0d)return Z(Jb),-1;if(b.object.isDevice){if(b.object.input){for(a=0;b.ungotten.length&&0d)return Z(Jb),-1;if(b.object.isDevice){if(b.object.output){for(var f= -0;fd||0>f)Z(Jb),e=-1;else{for(var i=a.object.contents;i.lengthe&&(e+=256);for(var c=c>>2,b=d>>2,f=e|e<<8|e<<16|e<<24;c>2,c=c>>2,b=d>>2;e>=1;c>>=1;for(b=d>>1;e>12<<12,e.called=!0);e=Ha;0!=a&&fa.staticAlloc(a);return e}function Vh(a){for(var a=0<=a?a:2*Math.abs(-2147483648)+a,e=[],d=0;4>d;d++)e[d]=a&255,a>>=8;for(d=a=0;4>d;d++)a<<=8,a+=e[d];return a}function qd(a){X.preRun&&X.preRun();a=a||X.arguments;ee(Bg);var e=null;X._main&&(e=X.callMain(a),ee(kf),Lh.print());X.postRun&& -X.postRun();return e}var Mh="object"===typeof window,Nh="function"===typeof importScripts;if("object"===typeof process){var Yb=function(a){process.stdout.write(a+"\n")},rd=function(a){process.stderr.write(a+"\n")},lf=require("fs"),jc=function(a){var e=lf.readFileSync(a).toString();!e&&"/"!=a[0]&&(a=__dirname.split("/").slice(0,-1).join("/")+"/src/"+a,e=lf.readFileSync(a).toString());return e};process.argv.slice(2)}else if(Mh)var Yb=rd=function(a){console.log(a)},jc=function(a){var e=new XMLHttpRequest; -e.open("GET",a,!1);e.send(null);return e.responseText};else if(Nh)var mf=importScripts;else throw"Unknown runtime environment. Where are we?";"undefined"==typeof mf&&"undefined"!=typeof jc&&(mf=function(a){Cg(jc(a))});"undefined"===typeof rd&&(rd=function(){});"undefined"===typeof Yb&&(Yb=rd);var X={},fa={stackSave:function(){return ma},stackRestore:function(a){ma=a},forceAlign:function(a,e){e=e||4;if(1==e)return a;if(isNumber(a)&&isNumber(e))return Math.ceil(a/e)*e;if(isNumber(e)&&isPowerOfTwo(e)){var d= -log2(e);return"(((("+a+")+"+(e-1)+")>>"+d+")<<"+d+")"}return"Math.ceil(("+a+")/"+e+")*"+e},isNumberType:function(a){return a in fa.INT_TYPES||a in fa.FLOAT_TYPES},isPointerType:function(a){return"*"==a[a.length-1]},isStructType:function(a){return isPointerType(a)?!1:/^\[\d+\ x\ (.*)\]/.test(a)||/?/.test(a)?!0:"%"==a[0]},INT_TYPES:{i1:0,i8:0,i16:0,i32:0,i64:0},FLOAT_TYPES:{"float":0,"double":0},bitshift64:function(a,e,d,b){var f=Math.pow(2,b)-1;if(32>b)switch(d){case "shl":return[a<>>32-b];case "ashr":return[(a>>>b|(e&f)<<32-b)>>0>>>0,e>>b>>>0];case "lshr":return[(a>>>b|(e&f)<<32-b)>>>0,e>>>b]}else if(32==b)switch(d){case "shl":return[0,a];case "ashr":return[e,0>(e|0)?f:0];case "lshr":return[e,0]}else switch(d){case "shl":return[0,a<>b-32>>>0,0>(e|0)?f:0];case "lshr":return[e>>>b-32,0]}Gb("unknown bitshift64 op: "+[value,d,b])},or64:function(a,e){var d=a|0|e|0,b=4294967296*(Math.round(a/4294967296)|Math.round(e/4294967296));return d+ -b},and64:function(a,e){var d=(a|0)&(e|0),b=4294967296*(Math.round(a/4294967296)&Math.round(e/4294967296));return d+b},xor64:function(a,e){var d=(a|0)^(e|0),b=4294967296*(Math.round(a/4294967296)^Math.round(e/4294967296));return d+b},getNativeTypeSize:function(a){if(1==fa.QUANTUM_SIZE)return 1;var e={"%i1":1,"%i8":1,"%i16":2,"%i32":4,"%i64":8,"%float":4,"%double":8}["%"+a];e||("*"==a[a.length-1]?e=fa.QUANTUM_SIZE:"i"==a[0]&&(a=parseInt(a.substr(1)),Hb(0==a%8),e=a/8));return e},getNativeFieldSize:function(a){return Math.max(fa.getNativeTypeSize(a), -fa.QUANTUM_SIZE)},dedup:function(a,e){var d={};return e?a.filter(function(a){return d[a[e]]?!1:d[a[e]]=!0}):a.filter(function(a){return d[a]?!1:d[a]=!0})},set:function(){for(var a="object"===typeof arguments[0]?arguments[0]:arguments,e={},d=0;d>2<<2;return e},staticAlloc:function(c){var e=Ha;Ha+=c;Ha=Ha+3>>2<<2;if(Ha>=Mb){for(;Mb<=Ha;)Mb=2*Mb+4095>>12<<12;var c=l,d=new ArrayBuffer(Mb);l=new Int8Array(d);h=new Int16Array(d);a=new Int32Array(d);y=new Uint8Array(d);p=new Uint16Array(d);k=new Uint32Array(d);Kb=new Float32Array(d);l.set(c)}return e},alignMemory:function(a,e){return Math.ceil(a/(e?e:4))*(e?e:4)},makeBigInt:function(a,e,d){return d?(a>>>0)+4294967296*(e>>>0):(a>>>0)+4294967296*(e| -0)},QUANTUM_SIZE:4,__dummy__:0},Lh={MAX_ALLOWED:0,corrections:0,sigs:{},note:function(a,e){e||(this.corrections++,this.corrections>=this.MAX_ALLOWED&&Gb("\n\nToo many corrections!"))},print:function(){}},Oh=this;X.ccall=function(a,e,d,b){try{var f=eval("_"+a)}catch(g){try{f=Oh.Module["_"+a]}catch(i){}}Hb(f,"Cannot call unknown function "+a+" (perhaps LLVM optimizations or closure removed it?)");var h=0,a=b?b.map(function(a){if("string"==d[h++]){var c=ma;fa.stackAlloc(a.length+1);he(a,c);a=c}return a}): -[];return function(a,c){return"string"==c?Tb(a):a}(f.apply(null,a),e)};X.setValue=qf;X.getValue=function(c,e){e=e||"i8";"*"===e[e.length-1]&&(e="i32");switch(e){case "i1":return l[c];case "i8":return l[c];case "i16":return h[c>>1];case "i32":return a[c>>2];case "i64":return a[c>>2];case "float":return Kb[c>>2];case "double":return Oc[0]=a[c>>2],Oc[1]=a[c+4>>2],de[0];default:Gb("invalid type for setValue: "+e)}return null};var u=2;X.ALLOC_NORMAL=0;X.ALLOC_STACK=1;X.ALLOC_STATIC=u;X.allocate=E;X.Pointer_stringify= -Tb;X.Array_stringify=function(a){for(var e="",d=0;d>2);Kb.subarray(vd>>2);var de=(new Float64Array(l.buffer)).subarray(vd>>3);sd=vd+8;Ha=sd+4095>>12<<12;var Bg=[],kf=[];X.Array_copy= -fe;X.TypedArray_copy=function(a,e){for(var d=new Uint8Array(e),b=0;ba;a++)b.push(0)}var d=a.length+1,b=[E(ob("/bin/this.program"),"i8",u)];e();for(var f=0;f>2]=md|0;a[Sc+4>>2]=ae|0;a[Tc>>2]=$d|0;a[Tc+4>>2]=be|0;a[Uc+4>>2]=of|0;va=[0,0,function(a,e,d){return Pc(d*e|0)},0,function(a,e){Ag(e)},0,zf,0,Af,0,se,0];X.FUNCTION_TABLE=va;X.run=qd;var pf=Ab[sb];return function(){var a,e,d;C.init(function(){if(e Date: Fri, 28 Feb 2014 13:08:46 +0000 Subject: [PATCH 7/7] removed jpg.js dependency for processing TypedArray jpg --- examples/images.html | 2 - examples/images/grid.png | Bin 0 -> 979 bytes jspdf.plugin.addimage.js | 40 +- libs/png_support/jpg.js | 956 --------------------------------------- 4 files changed, 34 insertions(+), 964 deletions(-) create mode 100644 examples/images/grid.png delete mode 100755 libs/png_support/jpg.js diff --git a/examples/images.html b/examples/images.html index ae14d49ed..ee42b76a6 100644 --- a/examples/images.html +++ b/examples/images.html @@ -14,9 +14,7 @@ - - diff --git a/examples/images/grid.png b/examples/images/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f71e344b7b2e03f17b8c755019461f9412003f GIT binary patch literal 979 zcmaJ=zi-n(6gKUGT2+DpsURVp+zucS|4Qw|rf!wSE{%kvl13t99s8P?)IR5YB~GTQ zTNnNYP$wjW80dr$Fv3>E#0U!vh%PLsQn^c$l!0KK@5j^ozW2R*@AlWrcV?!pO>rDI zQ(ChsbOr3cI6>!=*&hdVxk~IB*+5&Q<6_7ad{l>^6uJ#qfv(?ezlVz)H#r|vYozAf zH9QmwF7px6Fs5jZTU<_K*K0un>aY<+Cjax*8y*C{$=_EU$%%`w8Lag%+~}37Ua#fp zKEJ#K7E^-~gpjx(4Y#AjNKL-aYtTJ2i#+JNke11xiK;p4polO8s*ufik}LyF6XXR| z)8tz~kz_@b=+H9qf}v`Lk^_T}r_r##WmK%yK`eSQ`6eN;A&Q+&N9be)gd3u)>pJ65 zlnnLAB;AO(X(meMh71-=JRHO%KoMY!ZXN9qlc!40QV8P_ZIleIiC&nPy0It=5=&|5 z=s5p(4a1RlLMrfF?>~u?YBz>r1tw?*d$e#{b1YPB6ftxO!c~N}hqt)iLk2t?Ic|O_uHKij*(tx|CZ{3raDs zSVOFZyqyq6WQg_8vD#QHYlbkUku8XWhtOZeC{z}5)*r8BVJudpVnkNj zze+tc(f(oEQRC9XsP$n)`yJE9zI>&8Odo|^vI^DobN%G>ba_%c{&qC?>?++>AI3EB2 literal 0 HcmV?d00001 diff --git a/jspdf.plugin.addimage.js b/jspdf.plugin.addimage.js index 98a36f5d3..f97678be7 100644 --- a/jspdf.plugin.addimage.js +++ b/jspdf.plugin.addimage.js @@ -581,6 +581,37 @@ blockLength = imgData.charCodeAt(i)*256 + imgData.charCodeAt(i+1) } } + } + , getJpegSizeFromBytes = function(data) { + + var hdr = (data[0] << 8) | data[1]; + + if(hdr !== 0xFFD8) + throw new Error('Supplied data is not a JPEG'); + + var len = data.length, + block = (data[4] << 8) + data[5], + pos = 4, + bytes, width, height; + + while(pos < len) { + pos += block; + bytes = readBytes(data, pos); + block = (bytes[2] << 8) + bytes[3]; + if((bytes[1] === 0xC0 || bytes[1] === 0xC2) && bytes[0] === 0xFF && block > 7) { + bytes = readBytes(data, pos + 5); + width = (bytes[2] << 8) + bytes[3]; + height = (bytes[0] << 8) + bytes[1]; + return {width:width, height:height}; + } + + pos+=2; + } + + throw new Error('getJpegSizeFromBytes could not find the size of the image'); + } + , readBytes = function(data, offset) { + return data.subarray(offset, offset+ 4); }; @@ -601,15 +632,12 @@ if(this.isArrayBufferView(data)) { - var img = new JpegImage(); - img.parse(data); + dims = getJpegSizeFromBytes(data); - /* - * if we already have a stored binary string rep use that - */ + // if we already have a stored binary string rep use that data = dataAsBinaryString || this.arrayBufferToBinaryString(data); - return this.createImageInfo(data, img.width, img.height, colorSpace, bpc, filter, index, alias); + return this.createImageInfo(data, dims.width, dims.height, colorSpace, bpc, filter, index, alias); } return null; diff --git a/libs/png_support/jpg.js b/libs/png_support/jpg.js deleted file mode 100755 index 51398eee2..000000000 --- a/libs/png_support/jpg.js +++ /dev/null @@ -1,956 +0,0 @@ -/* -*- 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 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 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, 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, zz) { - var t = decodeHuffman(component.huffmanTableDC); - var diff = t === 0 ? 0 : receiveAndExtend(t); - zz[0]= (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]; - zz[z] = receiveAndExtend(s); - k++; - } - } - function decodeDCFirst(component, zz) { - var t = decodeHuffman(component.huffmanTableDC); - var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive); - zz[0] = (component.pred += diff); - } - function decodeDCSuccessive(component, zz) { - zz[0] |= readBit() << successive; - } - var eobrun = 0; - function decodeACFirst(component, zz) { - 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]; - zz[z] = receiveAndExtend(s) * (1 << successive); - k++; - } - } - var successiveACState = 0, successiveACNextValue; - function decodeACSuccessive(component, zz) { - 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 (zz[z]) - zz[z] += (readBit() << successive); - else { - r--; - if (r === 0) - successiveACState = successiveACState == 2 ? 3 : 0; - } - break; - case 3: // set value for a zero item - if (zz[z]) - zz[z] += (readBit() << successive); - else { - zz[z] = successiveACNextValue << successive; - successiveACState = 0; - } - break; - case 4: // eob - if (zz[z]) - zz[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; - decode(component, component.blocks[blockRow][blockCol]); - } - function decodeBlock(component, decode, mcu) { - var blockRow = (mcu / component.blocksPerLine) | 0; - var blockCol = mcu % component.blocksPerLine; - decode(component, component.blocks[blockRow][blockCol]); - } - - 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; - } - - function buildComponentData(frame, component) { - var lines = []; - var blocksPerLine = component.blocksPerLine; - var blocksPerColumn = component.blocksPerColumn; - var samplesPerLine = blocksPerLine << 3; - var R = new Int32Array(64), r = new Uint8Array(64); - - // 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(zz, dataOut, dataIn) { - var qt = component.quantizationTable; - var v0, v1, v2, v3, v4, v5, v6, v7, t; - var p = dataIn; - var i; - - // dequant - for (i = 0; i < 64; i++) - p[i] = zz[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 * dataIn[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 sample = 128 + ((p[i] + 8) >> 4); - dataOut[i] = sample < 0 ? 0 : sample > 0xFF ? 0xFF : sample; - } - } - - var i, j; - for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { - var scanLine = blockRow << 3; - for (i = 0; i < 8; i++) - lines.push(new Uint8Array(samplesPerLine)); - for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { - quantizeAndInverse(component.blocks[blockRow][blockCol], r, R); - - var offset = 0, sample = blockCol << 3; - for (j = 0; j < 8; j++) { - var line = lines[scanLine + j]; - for (i = 0; i < 8; i++) - line[sample + i] = r[offset++]; - } - } - } - return lines; - } - - function clampTo8bit(a) { - return a < 0 ? 0 : a > 255 ? 255 : a; - } - - constructor.prototype = { - load: function load(path) { - 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 || xhr.mozResponseArrayBuffer); - this.parse(data); - if (this.onload) - this.onload(); - }).bind(this); - xhr.send(null); - }, - parse: function parse(data) { - var offset = 0, length = data.length; - 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 maxH = 0, maxV = 0; - var component, componentId; - for (componentId in frame.components) { - if (frame.components.hasOwnProperty(componentId)) { - component = frame.components[componentId]; - if (maxH < component.h) maxH = component.h; - if (maxV < component.v) maxV = component.v; - } - } - var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / maxH); - var mcusPerColumn = Math.ceil(frame.scanLines / 8 / maxV); - for (componentId in frame.components) { - if (frame.components.hasOwnProperty(componentId)) { - component = frame.components[componentId]; - var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / maxH); - var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / maxV); - var blocksPerLineForMcu = mcusPerLine * component.h; - var blocksPerColumnForMcu = mcusPerColumn * component.v; - var blocks = []; - for (var i = 0; i < blocksPerColumnForMcu; i++) { - var row = []; - for (var j = 0; j < blocksPerLineForMcu; j++) - row.push(new Int32Array(64)); - blocks.push(row); - } - component.blocksPerLine = blocksPerLine; - component.blocksPerColumn = blocksPerColumn; - component.blocks = blocks; - } - } - frame.maxH = maxH; - frame.maxV = maxV; - frame.mcusPerLine = mcusPerLine; - frame.mcusPerColumn = mcusPerColumn; - } - var jfif = null; - var adobe = null; - var pixels = null; - var frame, resetInterval; - var quantizationTables = [], frames = []; - 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 z = dctZigZag[j]; - tableData[z] = 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) - 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.componentsOrder = []; - 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; - var qId = data[offset + 2]; - frame.componentsOrder.push(componentId); - frame.components[componentId] = { - h: h, - v: v, - quantizationTable: quantizationTables[qId] - }; - offset += 3; - } - prepareComponents(frame); - frames.push(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++) { - component = frame.components[data[offset++]]; - 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(); - } - if (frames.length != 1) - throw "only single frame JPEGs supported"; - - this.width = frame.samplesPerLine; - this.height = frame.scanLines; - this.jfif = jfif; - this.adobe = adobe; - this.components = []; - for (var i = 0; i < frame.componentsOrder.length; i++) { - var component = frame.components[frame.componentsOrder[i]]; - this.components.push({ - lines: buildComponentData(frame, component), - scaleX: component.h / frame.maxH, - scaleY: component.v / frame.maxV - }); - } - }, - getData: function getData(width, height) { - var scaleX = this.width / width, scaleY = this.height / height; - - var component1, component2, component3, component4; - var component1Line, component2Line, component3Line, component4Line; - var x, y; - var offset = 0; - var Y, Cb, Cr, K, C, M, Ye, R, G, B; - var colorTransform; - var dataLength = width * height * this.components.length; - var data = new Uint8Array(dataLength); - switch (this.components.length) { - case 1: - component1 = this.components[0]; - for (y = 0; y < height; y++) { - component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; - for (x = 0; x < width; x++) { - Y = component1Line[0 | (x * component1.scaleX * scaleX)]; - - data[offset++] = Y; - } - } - break; - case 2: - // PDF might compress two component data in custom colorspace - component1 = this.components[0]; - component2 = this.components[1]; - for (y = 0; y < height; y++) { - component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; - component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)]; - for (x = 0; x < width; x++) { - Y = component1Line[0 | (x * component1.scaleX * scaleX)]; - data[offset++] = Y; - Y = component2Line[0 | (x * component2.scaleX * scaleX)]; - data[offset++] = Y; - } - } - break; - 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; - - component1 = this.components[0]; - component2 = this.components[1]; - component3 = this.components[2]; - for (y = 0; y < height; y++) { - component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; - component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)]; - component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)]; - for (x = 0; x < width; x++) { - if (!colorTransform) { - R = component1Line[0 | (x * component1.scaleX * scaleX)]; - G = component2Line[0 | (x * component2.scaleX * scaleX)]; - B = component3Line[0 | (x * component3.scaleX * scaleX)]; - } else { - Y = component1Line[0 | (x * component1.scaleX * scaleX)]; - Cb = component2Line[0 | (x * component2.scaleX * scaleX)]; - Cr = component3Line[0 | (x * component3.scaleX * scaleX)]; - - R = clampTo8bit(Y + 1.402 * (Cr - 128)); - G = clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128)); - B = clampTo8bit(Y + 1.772 * (Cb - 128)); - } - - data[offset++] = R; - data[offset++] = G; - data[offset++] = 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; - - component1 = this.components[0]; - component2 = this.components[1]; - component3 = this.components[2]; - component4 = this.components[3]; - for (y = 0; y < height; y++) { - component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)]; - component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)]; - component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)]; - component4Line = component4.lines[0 | (y * component4.scaleY * scaleY)]; - for (x = 0; x < width; x++) { - if (!colorTransform) { - C = component1Line[0 | (x * component1.scaleX * scaleX)]; - M = component2Line[0 | (x * component2.scaleX * scaleX)]; - Ye = component3Line[0 | (x * component3.scaleX * scaleX)]; - K = component4Line[0 | (x * component4.scaleX * scaleX)]; - } else { - Y = component1Line[0 | (x * component1.scaleX * scaleX)]; - Cb = component2Line[0 | (x * component2.scaleX * scaleX)]; - Cr = component3Line[0 | (x * component3.scaleX * scaleX)]; - K = component4Line[0 | (x * component4.scaleX * scaleX)]; - - C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128)); - M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128)); - Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128)); - } - data[offset++] = C; - data[offset++] = M; - data[offset++] = Ye; - data[offset++] = K; - } - } - break; - default: - throw 'Unsupported color mode'; - } - return data; - }, - copyToImageData: function copyToImageData(imageData) { - var width = imageData.width, height = imageData.height; - var imageDataArray = imageData.data; - var data = this.getData(width, height); - var i = 0, j = 0, x, y; - var Y, K, C, M, R, G, B; - switch (this.components.length) { - case 1: - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - Y = data[i++]; - - imageDataArray[j++] = Y; - imageDataArray[j++] = Y; - imageDataArray[j++] = Y; - imageDataArray[j++] = 255; - } - } - break; - case 3: - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - R = data[i++]; - G = data[i++]; - B = data[i++]; - - imageDataArray[j++] = R; - imageDataArray[j++] = G; - imageDataArray[j++] = B; - imageDataArray[j++] = 255; - } - } - break; - case 4: - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - C = data[i++]; - M = data[i++]; - Y = data[i++]; - K = data[i++]; - - R = 255 - clampTo8bit(C * (1 - K / 255) + K); - G = 255 - clampTo8bit(M * (1 - K / 255) + K); - B = 255 - clampTo8bit(Y * (1 - K / 255) + K); - - imageDataArray[j++] = R; - imageDataArray[j++] = G; - imageDataArray[j++] = B; - imageDataArray[j++] = 255; - } - } - break; - default: - throw 'Unsupported color mode'; - } - } - }; - - return constructor; -})();