| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127 | 
							- /* pako 0.2.9 nodeca/pako */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
 
- 'use strict';
 
- var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
 
-                 (typeof Uint16Array !== 'undefined') &&
 
-                 (typeof Int32Array !== 'undefined');
 
- exports.assign = function (obj /*from1, from2, from3, ...*/) {
 
-   var sources = Array.prototype.slice.call(arguments, 1);
 
-   while (sources.length) {
 
-     var source = sources.shift();
 
-     if (!source) { continue; }
 
-     if (typeof source !== 'object') {
 
-       throw new TypeError(source + 'must be non-object');
 
-     }
 
-     for (var p in source) {
 
-       if (source.hasOwnProperty(p)) {
 
-         obj[p] = source[p];
 
-       }
 
-     }
 
-   }
 
-   return obj;
 
- };
 
- // reduce buffer size, avoiding mem copy
 
- exports.shrinkBuf = function (buf, size) {
 
-   if (buf.length === size) { return buf; }
 
-   if (buf.subarray) { return buf.subarray(0, size); }
 
-   buf.length = size;
 
-   return buf;
 
- };
 
- var fnTyped = {
 
-   arraySet: function (dest, src, src_offs, len, dest_offs) {
 
-     if (src.subarray && dest.subarray) {
 
-       dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
 
-       return;
 
-     }
 
-     // Fallback to ordinary array
 
-     for (var i = 0; i < len; i++) {
 
-       dest[dest_offs + i] = src[src_offs + i];
 
-     }
 
-   },
 
-   // Join array of chunks to single array.
 
-   flattenChunks: function (chunks) {
 
-     var i, l, len, pos, chunk, result;
 
-     // calculate data length
 
-     len = 0;
 
-     for (i = 0, l = chunks.length; i < l; i++) {
 
-       len += chunks[i].length;
 
-     }
 
-     // join chunks
 
-     result = new Uint8Array(len);
 
-     pos = 0;
 
-     for (i = 0, l = chunks.length; i < l; i++) {
 
-       chunk = chunks[i];
 
-       result.set(chunk, pos);
 
-       pos += chunk.length;
 
-     }
 
-     return result;
 
-   }
 
- };
 
- var fnUntyped = {
 
-   arraySet: function (dest, src, src_offs, len, dest_offs) {
 
-     for (var i = 0; i < len; i++) {
 
-       dest[dest_offs + i] = src[src_offs + i];
 
-     }
 
-   },
 
-   // Join array of chunks to single array.
 
-   flattenChunks: function (chunks) {
 
-     return [].concat.apply([], chunks);
 
-   }
 
- };
 
- // Enable/Disable typed arrays use, for testing
 
- //
 
- exports.setTyped = function (on) {
 
-   if (on) {
 
-     exports.Buf8  = Uint8Array;
 
-     exports.Buf16 = Uint16Array;
 
-     exports.Buf32 = Int32Array;
 
-     exports.assign(exports, fnTyped);
 
-   } else {
 
-     exports.Buf8  = Array;
 
-     exports.Buf16 = Array;
 
-     exports.Buf32 = Array;
 
-     exports.assign(exports, fnUntyped);
 
-   }
 
- };
 
- exports.setTyped(TYPED_OK);
 
- },{}],2:[function(require,module,exports){
 
- // String encode/decode helpers
 
- 'use strict';
 
- var utils = require('./common');
 
- // Quick check if we can use fast array to bin string conversion
 
- //
 
- // - apply(Array) can fail on Android 2.2
 
- // - apply(Uint8Array) can fail on iOS 5.1 Safary
 
- //
 
- var STR_APPLY_OK = true;
 
- var STR_APPLY_UIA_OK = true;
 
- try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }
 
- try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }
 
- // Table with utf8 lengths (calculated by first byte of sequence)
 
- // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
 
- // because max possible codepoint is 0x10ffff
 
- var _utf8len = new utils.Buf8(256);
 
- for (var q = 0; q < 256; q++) {
 
-   _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);
 
- }
 
- _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
 
- // convert string to array (typed, when possible)
 
- exports.string2buf = function (str) {
 
-   var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
 
-   // count binary size
 
-   for (m_pos = 0; m_pos < str_len; m_pos++) {
 
-     c = str.charCodeAt(m_pos);
 
-     if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
 
-       c2 = str.charCodeAt(m_pos + 1);
 
-       if ((c2 & 0xfc00) === 0xdc00) {
 
-         c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
 
-         m_pos++;
 
-       }
 
-     }
 
-     buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
 
-   }
 
-   // allocate buffer
 
-   buf = new utils.Buf8(buf_len);
 
-   // convert
 
-   for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
 
-     c = str.charCodeAt(m_pos);
 
-     if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
 
-       c2 = str.charCodeAt(m_pos + 1);
 
-       if ((c2 & 0xfc00) === 0xdc00) {
 
-         c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
 
-         m_pos++;
 
-       }
 
-     }
 
-     if (c < 0x80) {
 
-       /* one byte */
 
-       buf[i++] = c;
 
-     } else if (c < 0x800) {
 
-       /* two bytes */
 
-       buf[i++] = 0xC0 | (c >>> 6);
 
-       buf[i++] = 0x80 | (c & 0x3f);
 
-     } else if (c < 0x10000) {
 
-       /* three bytes */
 
-       buf[i++] = 0xE0 | (c >>> 12);
 
-       buf[i++] = 0x80 | (c >>> 6 & 0x3f);
 
-       buf[i++] = 0x80 | (c & 0x3f);
 
-     } else {
 
-       /* four bytes */
 
-       buf[i++] = 0xf0 | (c >>> 18);
 
-       buf[i++] = 0x80 | (c >>> 12 & 0x3f);
 
-       buf[i++] = 0x80 | (c >>> 6 & 0x3f);
 
-       buf[i++] = 0x80 | (c & 0x3f);
 
-     }
 
-   }
 
-   return buf;
 
- };
 
- // Helper (used in 2 places)
 
- function buf2binstring(buf, len) {
 
-   // use fallback for big arrays to avoid stack overflow
 
-   if (len < 65537) {
 
-     if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {
 
-       return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
 
-     }
 
-   }
 
-   var result = '';
 
-   for (var i = 0; i < len; i++) {
 
-     result += String.fromCharCode(buf[i]);
 
-   }
 
-   return result;
 
- }
 
- // Convert byte array to binary string
 
- exports.buf2binstring = function (buf) {
 
-   return buf2binstring(buf, buf.length);
 
- };
 
- // Convert binary string (typed, when possible)
 
- exports.binstring2buf = function (str) {
 
-   var buf = new utils.Buf8(str.length);
 
-   for (var i = 0, len = buf.length; i < len; i++) {
 
-     buf[i] = str.charCodeAt(i);
 
-   }
 
-   return buf;
 
- };
 
- // convert array to string
 
- exports.buf2string = function (buf, max) {
 
-   var i, out, c, c_len;
 
-   var len = max || buf.length;
 
-   // Reserve max possible length (2 words per char)
 
-   // NB: by unknown reasons, Array is significantly faster for
 
-   //     String.fromCharCode.apply than Uint16Array.
 
-   var utf16buf = new Array(len * 2);
 
-   for (out = 0, i = 0; i < len;) {
 
-     c = buf[i++];
 
-     // quick process ascii
 
-     if (c < 0x80) { utf16buf[out++] = c; continue; }
 
-     c_len = _utf8len[c];
 
-     // skip 5 & 6 byte codes
 
-     if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }
 
-     // apply mask on first byte
 
-     c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
 
-     // join the rest
 
-     while (c_len > 1 && i < len) {
 
-       c = (c << 6) | (buf[i++] & 0x3f);
 
-       c_len--;
 
-     }
 
-     // terminated by end of string?
 
-     if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }
 
-     if (c < 0x10000) {
 
-       utf16buf[out++] = c;
 
-     } else {
 
-       c -= 0x10000;
 
-       utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
 
-       utf16buf[out++] = 0xdc00 | (c & 0x3ff);
 
-     }
 
-   }
 
-   return buf2binstring(utf16buf, out);
 
- };
 
- // Calculate max possible position in utf8 buffer,
 
- // that will not break sequence. If that's not possible
 
- // - (very small limits) return max size as is.
 
- //
 
- // buf[] - utf8 bytes array
 
- // max   - length limit (mandatory);
 
- exports.utf8border = function (buf, max) {
 
-   var pos;
 
-   max = max || buf.length;
 
-   if (max > buf.length) { max = buf.length; }
 
-   // go back from last position, until start of sequence found
 
-   pos = max - 1;
 
-   while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }
 
-   // Fuckup - very small and broken sequence,
 
-   // return max, because we should return something anyway.
 
-   if (pos < 0) { return max; }
 
-   // If we came to start of buffer - that means vuffer is too small,
 
-   // return max too.
 
-   if (pos === 0) { return max; }
 
-   return (pos + _utf8len[buf[pos]] > max) ? pos : max;
 
- };
 
- },{"./common":1}],3:[function(require,module,exports){
 
- 'use strict';
 
- // Note: adler32 takes 12% for level 0 and 2% for level 6.
 
- // It doesn't worth to make additional optimizationa as in original.
 
- // Small size is preferable.
 
- function adler32(adler, buf, len, pos) {
 
-   var s1 = (adler & 0xffff) |0,
 
-       s2 = ((adler >>> 16) & 0xffff) |0,
 
-       n = 0;
 
-   while (len !== 0) {
 
-     // Set limit ~ twice less than 5552, to keep
 
-     // s2 in 31-bits, because we force signed ints.
 
-     // in other case %= will fail.
 
-     n = len > 2000 ? 2000 : len;
 
-     len -= n;
 
-     do {
 
-       s1 = (s1 + buf[pos++]) |0;
 
-       s2 = (s2 + s1) |0;
 
-     } while (--n);
 
-     s1 %= 65521;
 
-     s2 %= 65521;
 
-   }
 
-   return (s1 | (s2 << 16)) |0;
 
- }
 
- module.exports = adler32;
 
- },{}],4:[function(require,module,exports){
 
- 'use strict';
 
- module.exports = {
 
-   /* Allowed flush values; see deflate() and inflate() below for details */
 
-   Z_NO_FLUSH:         0,
 
-   Z_PARTIAL_FLUSH:    1,
 
-   Z_SYNC_FLUSH:       2,
 
-   Z_FULL_FLUSH:       3,
 
-   Z_FINISH:           4,
 
-   Z_BLOCK:            5,
 
-   Z_TREES:            6,
 
-   /* Return codes for the compression/decompression functions. Negative values
 
-   * are errors, positive values are used for special but normal events.
 
-   */
 
-   Z_OK:               0,
 
-   Z_STREAM_END:       1,
 
-   Z_NEED_DICT:        2,
 
-   Z_ERRNO:           -1,
 
-   Z_STREAM_ERROR:    -2,
 
-   Z_DATA_ERROR:      -3,
 
-   //Z_MEM_ERROR:     -4,
 
-   Z_BUF_ERROR:       -5,
 
-   //Z_VERSION_ERROR: -6,
 
-   /* compression levels */
 
-   Z_NO_COMPRESSION:         0,
 
-   Z_BEST_SPEED:             1,
 
-   Z_BEST_COMPRESSION:       9,
 
-   Z_DEFAULT_COMPRESSION:   -1,
 
-   Z_FILTERED:               1,
 
-   Z_HUFFMAN_ONLY:           2,
 
-   Z_RLE:                    3,
 
-   Z_FIXED:                  4,
 
-   Z_DEFAULT_STRATEGY:       0,
 
-   /* Possible values of the data_type field (though see inflate()) */
 
-   Z_BINARY:                 0,
 
-   Z_TEXT:                   1,
 
-   //Z_ASCII:                1, // = Z_TEXT (deprecated)
 
-   Z_UNKNOWN:                2,
 
-   /* The deflate compression method */
 
-   Z_DEFLATED:               8
 
-   //Z_NULL:                 null // Use -1 or null inline, depending on var type
 
- };
 
- },{}],5:[function(require,module,exports){
 
- 'use strict';
 
- // Note: we can't get significant speed boost here.
 
- // So write code to minimize size - no pregenerated tables
 
- // and array tools dependencies.
 
- // Use ordinary array, since untyped makes no boost here
 
- function makeTable() {
 
-   var c, table = [];
 
-   for (var n = 0; n < 256; n++) {
 
-     c = n;
 
-     for (var k = 0; k < 8; k++) {
 
-       c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
 
-     }
 
-     table[n] = c;
 
-   }
 
-   return table;
 
- }
 
- // Create table on load. Just 255 signed longs. Not a problem.
 
- var crcTable = makeTable();
 
- function crc32(crc, buf, len, pos) {
 
-   var t = crcTable,
 
-       end = pos + len;
 
-   crc ^= -1;
 
-   for (var i = pos; i < end; i++) {
 
-     crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
 
-   }
 
-   return (crc ^ (-1)); // >>> 0;
 
- }
 
- module.exports = crc32;
 
- },{}],6:[function(require,module,exports){
 
- 'use strict';
 
- function GZheader() {
 
-   /* true if compressed data believed to be text */
 
-   this.text       = 0;
 
-   /* modification time */
 
-   this.time       = 0;
 
-   /* extra flags (not used when writing a gzip file) */
 
-   this.xflags     = 0;
 
-   /* operating system */
 
-   this.os         = 0;
 
-   /* pointer to extra field or Z_NULL if none */
 
-   this.extra      = null;
 
-   /* extra field length (valid if extra != Z_NULL) */
 
-   this.extra_len  = 0; // Actually, we don't need it in JS,
 
-                        // but leave for few code modifications
 
-   //
 
-   // Setup limits is not necessary because in js we should not preallocate memory
 
-   // for inflate use constant limit in 65536 bytes
 
-   //
 
-   /* space at extra (only when reading header) */
 
-   // this.extra_max  = 0;
 
-   /* pointer to zero-terminated file name or Z_NULL */
 
-   this.name       = '';
 
-   /* space at name (only when reading header) */
 
-   // this.name_max   = 0;
 
-   /* pointer to zero-terminated comment or Z_NULL */
 
-   this.comment    = '';
 
-   /* space at comment (only when reading header) */
 
-   // this.comm_max   = 0;
 
-   /* true if there was or will be a header crc */
 
-   this.hcrc       = 0;
 
-   /* true when done reading gzip header (not used when writing a gzip file) */
 
-   this.done       = false;
 
- }
 
- module.exports = GZheader;
 
- },{}],7:[function(require,module,exports){
 
- 'use strict';
 
- // See state defs from inflate.js
 
- var BAD = 30;       /* got a data error -- remain here until reset */
 
- var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
 
- /*
 
-    Decode literal, length, and distance codes and write out the resulting
 
-    literal and match bytes until either not enough input or output is
 
-    available, an end-of-block is encountered, or a data error is encountered.
 
-    When large enough input and output buffers are supplied to inflate(), for
 
-    example, a 16K input buffer and a 64K output buffer, more than 95% of the
 
-    inflate execution time is spent in this routine.
 
-    Entry assumptions:
 
-         state.mode === LEN
 
-         strm.avail_in >= 6
 
-         strm.avail_out >= 258
 
-         start >= strm.avail_out
 
-         state.bits < 8
 
-    On return, state.mode is one of:
 
-         LEN -- ran out of enough output space or enough available input
 
-         TYPE -- reached end of block code, inflate() to interpret next block
 
-         BAD -- error in block data
 
-    Notes:
 
-     - The maximum input bits used by a length/distance pair is 15 bits for the
 
-       length code, 5 bits for the length extra, 15 bits for the distance code,
 
-       and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
 
-       Therefore if strm.avail_in >= 6, then there is enough input to avoid
 
-       checking for available input while decoding.
 
-     - The maximum bytes that a single length/distance pair can output is 258
 
-       bytes, which is the maximum length that can be coded.  inflate_fast()
 
-       requires strm.avail_out >= 258 for each loop to avoid checking for
 
-       output space.
 
-  */
 
- module.exports = function inflate_fast(strm, start) {
 
-   var state;
 
-   var _in;                    /* local strm.input */
 
-   var last;                   /* have enough input while in < last */
 
-   var _out;                   /* local strm.output */
 
-   var beg;                    /* inflate()'s initial strm.output */
 
-   var end;                    /* while out < end, enough space available */
 
- //#ifdef INFLATE_STRICT
 
-   var dmax;                   /* maximum distance from zlib header */
 
- //#endif
 
-   var wsize;                  /* window size or zero if not using window */
 
-   var whave;                  /* valid bytes in the window */
 
-   var wnext;                  /* window write index */
 
-   // Use `s_window` instead `window`, avoid conflict with instrumentation tools
 
-   var s_window;               /* allocated sliding window, if wsize != 0 */
 
-   var hold;                   /* local strm.hold */
 
-   var bits;                   /* local strm.bits */
 
-   var lcode;                  /* local strm.lencode */
 
-   var dcode;                  /* local strm.distcode */
 
-   var lmask;                  /* mask for first level of length codes */
 
-   var dmask;                  /* mask for first level of distance codes */
 
-   var here;                   /* retrieved table entry */
 
-   var op;                     /* code bits, operation, extra bits, or */
 
-                               /*  window position, window bytes to copy */
 
-   var len;                    /* match length, unused bytes */
 
-   var dist;                   /* match distance */
 
-   var from;                   /* where to copy match from */
 
-   var from_source;
 
-   var input, output; // JS specific, because we have no pointers
 
-   /* copy state to local variables */
 
-   state = strm.state;
 
-   //here = state.here;
 
-   _in = strm.next_in;
 
-   input = strm.input;
 
-   last = _in + (strm.avail_in - 5);
 
-   _out = strm.next_out;
 
-   output = strm.output;
 
-   beg = _out - (start - strm.avail_out);
 
-   end = _out + (strm.avail_out - 257);
 
- //#ifdef INFLATE_STRICT
 
-   dmax = state.dmax;
 
- //#endif
 
-   wsize = state.wsize;
 
-   whave = state.whave;
 
-   wnext = state.wnext;
 
-   s_window = state.window;
 
-   hold = state.hold;
 
-   bits = state.bits;
 
-   lcode = state.lencode;
 
-   dcode = state.distcode;
 
-   lmask = (1 << state.lenbits) - 1;
 
-   dmask = (1 << state.distbits) - 1;
 
-   /* decode literals and length/distances until end-of-block or not enough
 
-      input data or output space */
 
-   top:
 
-   do {
 
-     if (bits < 15) {
 
-       hold += input[_in++] << bits;
 
-       bits += 8;
 
-       hold += input[_in++] << bits;
 
-       bits += 8;
 
-     }
 
-     here = lcode[hold & lmask];
 
-     dolen:
 
-     for (;;) { // Goto emulation
 
-       op = here >>> 24/*here.bits*/;
 
-       hold >>>= op;
 
-       bits -= op;
 
-       op = (here >>> 16) & 0xff/*here.op*/;
 
-       if (op === 0) {                          /* literal */
 
-         //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
 
-         //        "inflate:         literal '%c'\n" :
 
-         //        "inflate:         literal 0x%02x\n", here.val));
 
-         output[_out++] = here & 0xffff/*here.val*/;
 
-       }
 
-       else if (op & 16) {                     /* length base */
 
-         len = here & 0xffff/*here.val*/;
 
-         op &= 15;                           /* number of extra bits */
 
-         if (op) {
 
-           if (bits < op) {
 
-             hold += input[_in++] << bits;
 
-             bits += 8;
 
-           }
 
-           len += hold & ((1 << op) - 1);
 
-           hold >>>= op;
 
-           bits -= op;
 
-         }
 
-         //Tracevv((stderr, "inflate:         length %u\n", len));
 
-         if (bits < 15) {
 
-           hold += input[_in++] << bits;
 
-           bits += 8;
 
-           hold += input[_in++] << bits;
 
-           bits += 8;
 
-         }
 
-         here = dcode[hold & dmask];
 
-         dodist:
 
-         for (;;) { // goto emulation
 
-           op = here >>> 24/*here.bits*/;
 
-           hold >>>= op;
 
-           bits -= op;
 
-           op = (here >>> 16) & 0xff/*here.op*/;
 
-           if (op & 16) {                      /* distance base */
 
-             dist = here & 0xffff/*here.val*/;
 
-             op &= 15;                       /* number of extra bits */
 
-             if (bits < op) {
 
-               hold += input[_in++] << bits;
 
-               bits += 8;
 
-               if (bits < op) {
 
-                 hold += input[_in++] << bits;
 
-                 bits += 8;
 
-               }
 
-             }
 
-             dist += hold & ((1 << op) - 1);
 
- //#ifdef INFLATE_STRICT
 
-             if (dist > dmax) {
 
-               strm.msg = 'invalid distance too far back';
 
-               state.mode = BAD;
 
-               break top;
 
-             }
 
- //#endif
 
-             hold >>>= op;
 
-             bits -= op;
 
-             //Tracevv((stderr, "inflate:         distance %u\n", dist));
 
-             op = _out - beg;                /* max distance in output */
 
-             if (dist > op) {                /* see if copy from window */
 
-               op = dist - op;               /* distance back in window */
 
-               if (op > whave) {
 
-                 if (state.sane) {
 
-                   strm.msg = 'invalid distance too far back';
 
-                   state.mode = BAD;
 
-                   break top;
 
-                 }
 
- // (!) This block is disabled in zlib defailts,
 
- // don't enable it for binary compatibility
 
- //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
 
- //                if (len <= op - whave) {
 
- //                  do {
 
- //                    output[_out++] = 0;
 
- //                  } while (--len);
 
- //                  continue top;
 
- //                }
 
- //                len -= op - whave;
 
- //                do {
 
- //                  output[_out++] = 0;
 
- //                } while (--op > whave);
 
- //                if (op === 0) {
 
- //                  from = _out - dist;
 
- //                  do {
 
- //                    output[_out++] = output[from++];
 
- //                  } while (--len);
 
- //                  continue top;
 
- //                }
 
- //#endif
 
-               }
 
-               from = 0; // window index
 
-               from_source = s_window;
 
-               if (wnext === 0) {           /* very common case */
 
-                 from += wsize - op;
 
-                 if (op < len) {         /* some from window */
 
-                   len -= op;
 
-                   do {
 
-                     output[_out++] = s_window[from++];
 
-                   } while (--op);
 
-                   from = _out - dist;  /* rest from output */
 
-                   from_source = output;
 
-                 }
 
-               }
 
-               else if (wnext < op) {      /* wrap around window */
 
-                 from += wsize + wnext - op;
 
-                 op -= wnext;
 
-                 if (op < len) {         /* some from end of window */
 
-                   len -= op;
 
-                   do {
 
-                     output[_out++] = s_window[from++];
 
-                   } while (--op);
 
-                   from = 0;
 
-                   if (wnext < len) {  /* some from start of window */
 
-                     op = wnext;
 
-                     len -= op;
 
-                     do {
 
-                       output[_out++] = s_window[from++];
 
-                     } while (--op);
 
-                     from = _out - dist;      /* rest from output */
 
-                     from_source = output;
 
-                   }
 
-                 }
 
-               }
 
-               else {                      /* contiguous in window */
 
-                 from += wnext - op;
 
-                 if (op < len) {         /* some from window */
 
-                   len -= op;
 
-                   do {
 
-                     output[_out++] = s_window[from++];
 
-                   } while (--op);
 
-                   from = _out - dist;  /* rest from output */
 
-                   from_source = output;
 
-                 }
 
-               }
 
-               while (len > 2) {
 
-                 output[_out++] = from_source[from++];
 
-                 output[_out++] = from_source[from++];
 
-                 output[_out++] = from_source[from++];
 
-                 len -= 3;
 
-               }
 
-               if (len) {
 
-                 output[_out++] = from_source[from++];
 
-                 if (len > 1) {
 
-                   output[_out++] = from_source[from++];
 
-                 }
 
-               }
 
-             }
 
-             else {
 
-               from = _out - dist;          /* copy direct from output */
 
-               do {                        /* minimum length is three */
 
-                 output[_out++] = output[from++];
 
-                 output[_out++] = output[from++];
 
-                 output[_out++] = output[from++];
 
-                 len -= 3;
 
-               } while (len > 2);
 
-               if (len) {
 
-                 output[_out++] = output[from++];
 
-                 if (len > 1) {
 
-                   output[_out++] = output[from++];
 
-                 }
 
-               }
 
-             }
 
-           }
 
-           else if ((op & 64) === 0) {          /* 2nd level distance code */
 
-             here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
 
-             continue dodist;
 
-           }
 
-           else {
 
-             strm.msg = 'invalid distance code';
 
-             state.mode = BAD;
 
-             break top;
 
-           }
 
-           break; // need to emulate goto via "continue"
 
-         }
 
-       }
 
-       else if ((op & 64) === 0) {              /* 2nd level length code */
 
-         here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
 
-         continue dolen;
 
-       }
 
-       else if (op & 32) {                     /* end-of-block */
 
-         //Tracevv((stderr, "inflate:         end of block\n"));
 
-         state.mode = TYPE;
 
-         break top;
 
-       }
 
-       else {
 
-         strm.msg = 'invalid literal/length code';
 
-         state.mode = BAD;
 
-         break top;
 
-       }
 
-       break; // need to emulate goto via "continue"
 
-     }
 
-   } while (_in < last && _out < end);
 
-   /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
 
-   len = bits >> 3;
 
-   _in -= len;
 
-   bits -= len << 3;
 
-   hold &= (1 << bits) - 1;
 
-   /* update state and return */
 
-   strm.next_in = _in;
 
-   strm.next_out = _out;
 
-   strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
 
-   strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
 
-   state.hold = hold;
 
-   state.bits = bits;
 
-   return;
 
- };
 
- },{}],8:[function(require,module,exports){
 
- 'use strict';
 
- var utils         = require('../utils/common');
 
- var adler32       = require('./adler32');
 
- var crc32         = require('./crc32');
 
- var inflate_fast  = require('./inffast');
 
- var inflate_table = require('./inftrees');
 
- var CODES = 0;
 
- var LENS = 1;
 
- var DISTS = 2;
 
- /* Public constants ==========================================================*/
 
- /* ===========================================================================*/
 
- /* Allowed flush values; see deflate() and inflate() below for details */
 
- //var Z_NO_FLUSH      = 0;
 
- //var Z_PARTIAL_FLUSH = 1;
 
- //var Z_SYNC_FLUSH    = 2;
 
- //var Z_FULL_FLUSH    = 3;
 
- var Z_FINISH        = 4;
 
- var Z_BLOCK         = 5;
 
- var Z_TREES         = 6;
 
- /* Return codes for the compression/decompression functions. Negative values
 
-  * are errors, positive values are used for special but normal events.
 
-  */
 
- var Z_OK            = 0;
 
- var Z_STREAM_END    = 1;
 
- var Z_NEED_DICT     = 2;
 
- //var Z_ERRNO         = -1;
 
- var Z_STREAM_ERROR  = -2;
 
- var Z_DATA_ERROR    = -3;
 
- var Z_MEM_ERROR     = -4;
 
- var Z_BUF_ERROR     = -5;
 
- //var Z_VERSION_ERROR = -6;
 
- /* The deflate compression method */
 
- var Z_DEFLATED  = 8;
 
- /* STATES ====================================================================*/
 
- /* ===========================================================================*/
 
- var    HEAD = 1;       /* i: waiting for magic header */
 
- var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
 
- var    TIME = 3;       /* i: waiting for modification time (gzip) */
 
- var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
 
- var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
 
- var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
 
- var    NAME = 7;       /* i: waiting for end of file name (gzip) */
 
- var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
 
- var    HCRC = 9;       /* i: waiting for header crc (gzip) */
 
- var    DICTID = 10;    /* i: waiting for dictionary check value */
 
- var    DICT = 11;      /* waiting for inflateSetDictionary() call */
 
- var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
 
- var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
 
- var        STORED = 14;    /* i: waiting for stored size (length and complement) */
 
- var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
 
- var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
 
- var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
 
- var        LENLENS = 18;   /* i: waiting for code length code lengths */
 
- var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
 
- var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
 
- var            LEN = 21;       /* i: waiting for length/lit/eob code */
 
- var            LENEXT = 22;    /* i: waiting for length extra bits */
 
- var            DIST = 23;      /* i: waiting for distance code */
 
- var            DISTEXT = 24;   /* i: waiting for distance extra bits */
 
- var            MATCH = 25;     /* o: waiting for output space to copy string */
 
- var            LIT = 26;       /* o: waiting for output space to write literal */
 
- var    CHECK = 27;     /* i: waiting for 32-bit check value */
 
- var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
 
- var    DONE = 29;      /* finished check, done -- remain here until reset */
 
- var    BAD = 30;       /* got a data error -- remain here until reset */
 
- var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
 
- var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */
 
- /* ===========================================================================*/
 
- var ENOUGH_LENS = 852;
 
- var ENOUGH_DISTS = 592;
 
- //var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);
 
- var MAX_WBITS = 15;
 
- /* 32K LZ77 window */
 
- var DEF_WBITS = MAX_WBITS;
 
- function zswap32(q) {
 
-   return  (((q >>> 24) & 0xff) +
 
-           ((q >>> 8) & 0xff00) +
 
-           ((q & 0xff00) << 8) +
 
-           ((q & 0xff) << 24));
 
- }
 
- function InflateState() {
 
-   this.mode = 0;             /* current inflate mode */
 
-   this.last = false;          /* true if processing last block */
 
-   this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
 
-   this.havedict = false;      /* true if dictionary provided */
 
-   this.flags = 0;             /* gzip header method and flags (0 if zlib) */
 
-   this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
 
-   this.check = 0;             /* protected copy of check value */
 
-   this.total = 0;             /* protected copy of output count */
 
-   // TODO: may be {}
 
-   this.head = null;           /* where to save gzip header information */
 
-   /* sliding window */
 
-   this.wbits = 0;             /* log base 2 of requested window size */
 
-   this.wsize = 0;             /* window size or zero if not using window */
 
-   this.whave = 0;             /* valid bytes in the window */
 
-   this.wnext = 0;             /* window write index */
 
-   this.window = null;         /* allocated sliding window, if needed */
 
-   /* bit accumulator */
 
-   this.hold = 0;              /* input bit accumulator */
 
-   this.bits = 0;              /* number of bits in "in" */
 
-   /* for string and stored block copying */
 
-   this.length = 0;            /* literal or length of data to copy */
 
-   this.offset = 0;            /* distance back to copy string from */
 
-   /* for table and code decoding */
 
-   this.extra = 0;             /* extra bits needed */
 
-   /* fixed and dynamic code tables */
 
-   this.lencode = null;          /* starting table for length/literal codes */
 
-   this.distcode = null;         /* starting table for distance codes */
 
-   this.lenbits = 0;           /* index bits for lencode */
 
-   this.distbits = 0;          /* index bits for distcode */
 
-   /* dynamic table building */
 
-   this.ncode = 0;             /* number of code length code lengths */
 
-   this.nlen = 0;              /* number of length code lengths */
 
-   this.ndist = 0;             /* number of distance code lengths */
 
-   this.have = 0;              /* number of code lengths in lens[] */
 
-   this.next = null;              /* next available space in codes[] */
 
-   this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
 
-   this.work = new utils.Buf16(288); /* work area for code table building */
 
-   /*
 
-    because we don't have pointers in js, we use lencode and distcode directly
 
-    as buffers so we don't need codes
 
-   */
 
-   //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
 
-   this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
 
-   this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
 
-   this.sane = 0;                   /* if false, allow invalid distance too far */
 
-   this.back = 0;                   /* bits back of last unprocessed length/lit */
 
-   this.was = 0;                    /* initial length of match */
 
- }
 
- function inflateResetKeep(strm) {
 
-   var state;
 
-   if (!strm || !strm.state) { return Z_STREAM_ERROR; }
 
-   state = strm.state;
 
-   strm.total_in = strm.total_out = state.total = 0;
 
-   strm.msg = ''; /*Z_NULL*/
 
-   if (state.wrap) {       /* to support ill-conceived Java test suite */
 
-     strm.adler = state.wrap & 1;
 
-   }
 
-   state.mode = HEAD;
 
-   state.last = 0;
 
-   state.havedict = 0;
 
-   state.dmax = 32768;
 
-   state.head = null/*Z_NULL*/;
 
-   state.hold = 0;
 
-   state.bits = 0;
 
-   //state.lencode = state.distcode = state.next = state.codes;
 
-   state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
 
-   state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
 
-   state.sane = 1;
 
-   state.back = -1;
 
-   //Tracev((stderr, "inflate: reset\n"));
 
-   return Z_OK;
 
- }
 
- function inflateReset(strm) {
 
-   var state;
 
-   if (!strm || !strm.state) { return Z_STREAM_ERROR; }
 
-   state = strm.state;
 
-   state.wsize = 0;
 
-   state.whave = 0;
 
-   state.wnext = 0;
 
-   return inflateResetKeep(strm);
 
- }
 
- function inflateReset2(strm, windowBits) {
 
-   var wrap;
 
-   var state;
 
-   /* get the state */
 
-   if (!strm || !strm.state) { return Z_STREAM_ERROR; }
 
-   state = strm.state;
 
-   /* extract wrap request from windowBits parameter */
 
-   if (windowBits < 0) {
 
-     wrap = 0;
 
-     windowBits = -windowBits;
 
-   }
 
-   else {
 
-     wrap = (windowBits >> 4) + 1;
 
-     if (windowBits < 48) {
 
-       windowBits &= 15;
 
-     }
 
-   }
 
-   /* set number of window bits, free window if different */
 
-   if (windowBits && (windowBits < 8 || windowBits > 15)) {
 
-     return Z_STREAM_ERROR;
 
-   }
 
-   if (state.window !== null && state.wbits !== windowBits) {
 
-     state.window = null;
 
-   }
 
-   /* update state and reset the rest of it */
 
-   state.wrap = wrap;
 
-   state.wbits = windowBits;
 
-   return inflateReset(strm);
 
- }
 
- function inflateInit2(strm, windowBits) {
 
-   var ret;
 
-   var state;
 
-   if (!strm) { return Z_STREAM_ERROR; }
 
-   //strm.msg = Z_NULL;                 /* in case we return an error */
 
-   state = new InflateState();
 
-   //if (state === Z_NULL) return Z_MEM_ERROR;
 
-   //Tracev((stderr, "inflate: allocated\n"));
 
-   strm.state = state;
 
-   state.window = null/*Z_NULL*/;
 
-   ret = inflateReset2(strm, windowBits);
 
-   if (ret !== Z_OK) {
 
-     strm.state = null/*Z_NULL*/;
 
-   }
 
-   return ret;
 
- }
 
- function inflateInit(strm) {
 
-   return inflateInit2(strm, DEF_WBITS);
 
- }
 
- /*
 
-  Return state with length and distance decoding tables and index sizes set to
 
-  fixed code decoding.  Normally this returns fixed tables from inffixed.h.
 
-  If BUILDFIXED is defined, then instead this routine builds the tables the
 
-  first time it's called, and returns those tables the first time and
 
-  thereafter.  This reduces the size of the code by about 2K bytes, in
 
-  exchange for a little execution time.  However, BUILDFIXED should not be
 
-  used for threaded applications, since the rewriting of the tables and virgin
 
-  may not be thread-safe.
 
-  */
 
- var virgin = true;
 
- var lenfix, distfix; // We have no pointers in JS, so keep tables separate
 
- function fixedtables(state) {
 
-   /* build fixed huffman tables if first call (may not be thread safe) */
 
-   if (virgin) {
 
-     var sym;
 
-     lenfix = new utils.Buf32(512);
 
-     distfix = new utils.Buf32(32);
 
-     /* literal/length table */
 
-     sym = 0;
 
-     while (sym < 144) { state.lens[sym++] = 8; }
 
-     while (sym < 256) { state.lens[sym++] = 9; }
 
-     while (sym < 280) { state.lens[sym++] = 7; }
 
-     while (sym < 288) { state.lens[sym++] = 8; }
 
-     inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });
 
-     /* distance table */
 
-     sym = 0;
 
-     while (sym < 32) { state.lens[sym++] = 5; }
 
-     inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });
 
-     /* do this just once */
 
-     virgin = false;
 
-   }
 
-   state.lencode = lenfix;
 
-   state.lenbits = 9;
 
-   state.distcode = distfix;
 
-   state.distbits = 5;
 
- }
 
- /*
 
-  Update the window with the last wsize (normally 32K) bytes written before
 
-  returning.  If window does not exist yet, create it.  This is only called
 
-  when a window is already in use, or when output has been written during this
 
-  inflate call, but the end of the deflate stream has not been reached yet.
 
-  It is also called to create a window for dictionary data when a dictionary
 
-  is loaded.
 
-  Providing output buffers larger than 32K to inflate() should provide a speed
 
-  advantage, since only the last 32K of output is copied to the sliding window
 
-  upon return from inflate(), and since all distances after the first 32K of
 
-  output will fall in the output data, making match copies simpler and faster.
 
-  The advantage may be dependent on the size of the processor's data caches.
 
-  */
 
- function updatewindow(strm, src, end, copy) {
 
-   var dist;
 
-   var state = strm.state;
 
-   /* if it hasn't been done already, allocate space for the window */
 
-   if (state.window === null) {
 
-     state.wsize = 1 << state.wbits;
 
-     state.wnext = 0;
 
-     state.whave = 0;
 
-     state.window = new utils.Buf8(state.wsize);
 
-   }
 
-   /* copy state->wsize or less output bytes into the circular window */
 
-   if (copy >= state.wsize) {
 
-     utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
 
-     state.wnext = 0;
 
-     state.whave = state.wsize;
 
-   }
 
-   else {
 
-     dist = state.wsize - state.wnext;
 
-     if (dist > copy) {
 
-       dist = copy;
 
-     }
 
-     //zmemcpy(state->window + state->wnext, end - copy, dist);
 
-     utils.arraySet(state.window, src, end - copy, dist, state.wnext);
 
-     copy -= dist;
 
-     if (copy) {
 
-       //zmemcpy(state->window, end - copy, copy);
 
-       utils.arraySet(state.window, src, end - copy, copy, 0);
 
-       state.wnext = copy;
 
-       state.whave = state.wsize;
 
-     }
 
-     else {
 
-       state.wnext += dist;
 
-       if (state.wnext === state.wsize) { state.wnext = 0; }
 
-       if (state.whave < state.wsize) { state.whave += dist; }
 
-     }
 
-   }
 
-   return 0;
 
- }
 
- function inflate(strm, flush) {
 
-   var state;
 
-   var input, output;          // input/output buffers
 
-   var next;                   /* next input INDEX */
 
-   var put;                    /* next output INDEX */
 
-   var have, left;             /* available input and output */
 
-   var hold;                   /* bit buffer */
 
-   var bits;                   /* bits in bit buffer */
 
-   var _in, _out;              /* save starting available input and output */
 
-   var copy;                   /* number of stored or match bytes to copy */
 
-   var from;                   /* where to copy match bytes from */
 
-   var from_source;
 
-   var here = 0;               /* current decoding table entry */
 
-   var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
 
-   //var last;                   /* parent table entry */
 
-   var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
 
-   var len;                    /* length to copy for repeats, bits to drop */
 
-   var ret;                    /* return code */
 
-   var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
 
-   var opts;
 
-   var n; // temporary var for NEED_BITS
 
-   var order = /* permutation of code lengths */
 
-     [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];
 
-   if (!strm || !strm.state || !strm.output ||
 
-       (!strm.input && strm.avail_in !== 0)) {
 
-     return Z_STREAM_ERROR;
 
-   }
 
-   state = strm.state;
 
-   if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */
 
-   //--- LOAD() ---
 
-   put = strm.next_out;
 
-   output = strm.output;
 
-   left = strm.avail_out;
 
-   next = strm.next_in;
 
-   input = strm.input;
 
-   have = strm.avail_in;
 
-   hold = state.hold;
 
-   bits = state.bits;
 
-   //---
 
-   _in = have;
 
-   _out = left;
 
-   ret = Z_OK;
 
-   inf_leave: // goto emulation
 
-   for (;;) {
 
-     switch (state.mode) {
 
-     case HEAD:
 
-       if (state.wrap === 0) {
 
-         state.mode = TYPEDO;
 
-         break;
 
-       }
 
-       //=== NEEDBITS(16);
 
-       while (bits < 16) {
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-       }
 
-       //===//
 
-       if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
 
-         state.check = 0/*crc32(0L, Z_NULL, 0)*/;
 
-         //=== CRC2(state.check, hold);
 
-         hbuf[0] = hold & 0xff;
 
-         hbuf[1] = (hold >>> 8) & 0xff;
 
-         state.check = crc32(state.check, hbuf, 2, 0);
 
-         //===//
 
-         //=== INITBITS();
 
-         hold = 0;
 
-         bits = 0;
 
-         //===//
 
-         state.mode = FLAGS;
 
-         break;
 
-       }
 
-       state.flags = 0;           /* expect zlib header */
 
-       if (state.head) {
 
-         state.head.done = false;
 
-       }
 
-       if (!(state.wrap & 1) ||   /* check if zlib header allowed */
 
-         (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
 
-         strm.msg = 'incorrect header check';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
 
-         strm.msg = 'unknown compression method';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       //--- DROPBITS(4) ---//
 
-       hold >>>= 4;
 
-       bits -= 4;
 
-       //---//
 
-       len = (hold & 0x0f)/*BITS(4)*/ + 8;
 
-       if (state.wbits === 0) {
 
-         state.wbits = len;
 
-       }
 
-       else if (len > state.wbits) {
 
-         strm.msg = 'invalid window size';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       state.dmax = 1 << len;
 
-       //Tracev((stderr, "inflate:   zlib header ok\n"));
 
-       strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
 
-       state.mode = hold & 0x200 ? DICTID : TYPE;
 
-       //=== INITBITS();
 
-       hold = 0;
 
-       bits = 0;
 
-       //===//
 
-       break;
 
-     case FLAGS:
 
-       //=== NEEDBITS(16); */
 
-       while (bits < 16) {
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-       }
 
-       //===//
 
-       state.flags = hold;
 
-       if ((state.flags & 0xff) !== Z_DEFLATED) {
 
-         strm.msg = 'unknown compression method';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       if (state.flags & 0xe000) {
 
-         strm.msg = 'unknown header flags set';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       if (state.head) {
 
-         state.head.text = ((hold >> 8) & 1);
 
-       }
 
-       if (state.flags & 0x0200) {
 
-         //=== CRC2(state.check, hold);
 
-         hbuf[0] = hold & 0xff;
 
-         hbuf[1] = (hold >>> 8) & 0xff;
 
-         state.check = crc32(state.check, hbuf, 2, 0);
 
-         //===//
 
-       }
 
-       //=== INITBITS();
 
-       hold = 0;
 
-       bits = 0;
 
-       //===//
 
-       state.mode = TIME;
 
-       /* falls through */
 
-     case TIME:
 
-       //=== NEEDBITS(32); */
 
-       while (bits < 32) {
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-       }
 
-       //===//
 
-       if (state.head) {
 
-         state.head.time = hold;
 
-       }
 
-       if (state.flags & 0x0200) {
 
-         //=== CRC4(state.check, hold)
 
-         hbuf[0] = hold & 0xff;
 
-         hbuf[1] = (hold >>> 8) & 0xff;
 
-         hbuf[2] = (hold >>> 16) & 0xff;
 
-         hbuf[3] = (hold >>> 24) & 0xff;
 
-         state.check = crc32(state.check, hbuf, 4, 0);
 
-         //===
 
-       }
 
-       //=== INITBITS();
 
-       hold = 0;
 
-       bits = 0;
 
-       //===//
 
-       state.mode = OS;
 
-       /* falls through */
 
-     case OS:
 
-       //=== NEEDBITS(16); */
 
-       while (bits < 16) {
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-       }
 
-       //===//
 
-       if (state.head) {
 
-         state.head.xflags = (hold & 0xff);
 
-         state.head.os = (hold >> 8);
 
-       }
 
-       if (state.flags & 0x0200) {
 
-         //=== CRC2(state.check, hold);
 
-         hbuf[0] = hold & 0xff;
 
-         hbuf[1] = (hold >>> 8) & 0xff;
 
-         state.check = crc32(state.check, hbuf, 2, 0);
 
-         //===//
 
-       }
 
-       //=== INITBITS();
 
-       hold = 0;
 
-       bits = 0;
 
-       //===//
 
-       state.mode = EXLEN;
 
-       /* falls through */
 
-     case EXLEN:
 
-       if (state.flags & 0x0400) {
 
-         //=== NEEDBITS(16); */
 
-         while (bits < 16) {
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           hold += input[next++] << bits;
 
-           bits += 8;
 
-         }
 
-         //===//
 
-         state.length = hold;
 
-         if (state.head) {
 
-           state.head.extra_len = hold;
 
-         }
 
-         if (state.flags & 0x0200) {
 
-           //=== CRC2(state.check, hold);
 
-           hbuf[0] = hold & 0xff;
 
-           hbuf[1] = (hold >>> 8) & 0xff;
 
-           state.check = crc32(state.check, hbuf, 2, 0);
 
-           //===//
 
-         }
 
-         //=== INITBITS();
 
-         hold = 0;
 
-         bits = 0;
 
-         //===//
 
-       }
 
-       else if (state.head) {
 
-         state.head.extra = null/*Z_NULL*/;
 
-       }
 
-       state.mode = EXTRA;
 
-       /* falls through */
 
-     case EXTRA:
 
-       if (state.flags & 0x0400) {
 
-         copy = state.length;
 
-         if (copy > have) { copy = have; }
 
-         if (copy) {
 
-           if (state.head) {
 
-             len = state.head.extra_len - state.length;
 
-             if (!state.head.extra) {
 
-               // Use untyped array for more conveniend processing later
 
-               state.head.extra = new Array(state.head.extra_len);
 
-             }
 
-             utils.arraySet(
 
-               state.head.extra,
 
-               input,
 
-               next,
 
-               // extra field is limited to 65536 bytes
 
-               // - no need for additional size check
 
-               copy,
 
-               /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
 
-               len
 
-             );
 
-             //zmemcpy(state.head.extra + len, next,
 
-             //        len + copy > state.head.extra_max ?
 
-             //        state.head.extra_max - len : copy);
 
-           }
 
-           if (state.flags & 0x0200) {
 
-             state.check = crc32(state.check, input, copy, next);
 
-           }
 
-           have -= copy;
 
-           next += copy;
 
-           state.length -= copy;
 
-         }
 
-         if (state.length) { break inf_leave; }
 
-       }
 
-       state.length = 0;
 
-       state.mode = NAME;
 
-       /* falls through */
 
-     case NAME:
 
-       if (state.flags & 0x0800) {
 
-         if (have === 0) { break inf_leave; }
 
-         copy = 0;
 
-         do {
 
-           // TODO: 2 or 1 bytes?
 
-           len = input[next + copy++];
 
-           /* use constant limit because in js we should not preallocate memory */
 
-           if (state.head && len &&
 
-               (state.length < 65536 /*state.head.name_max*/)) {
 
-             state.head.name += String.fromCharCode(len);
 
-           }
 
-         } while (len && copy < have);
 
-         if (state.flags & 0x0200) {
 
-           state.check = crc32(state.check, input, copy, next);
 
-         }
 
-         have -= copy;
 
-         next += copy;
 
-         if (len) { break inf_leave; }
 
-       }
 
-       else if (state.head) {
 
-         state.head.name = null;
 
-       }
 
-       state.length = 0;
 
-       state.mode = COMMENT;
 
-       /* falls through */
 
-     case COMMENT:
 
-       if (state.flags & 0x1000) {
 
-         if (have === 0) { break inf_leave; }
 
-         copy = 0;
 
-         do {
 
-           len = input[next + copy++];
 
-           /* use constant limit because in js we should not preallocate memory */
 
-           if (state.head && len &&
 
-               (state.length < 65536 /*state.head.comm_max*/)) {
 
-             state.head.comment += String.fromCharCode(len);
 
-           }
 
-         } while (len && copy < have);
 
-         if (state.flags & 0x0200) {
 
-           state.check = crc32(state.check, input, copy, next);
 
-         }
 
-         have -= copy;
 
-         next += copy;
 
-         if (len) { break inf_leave; }
 
-       }
 
-       else if (state.head) {
 
-         state.head.comment = null;
 
-       }
 
-       state.mode = HCRC;
 
-       /* falls through */
 
-     case HCRC:
 
-       if (state.flags & 0x0200) {
 
-         //=== NEEDBITS(16); */
 
-         while (bits < 16) {
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           hold += input[next++] << bits;
 
-           bits += 8;
 
-         }
 
-         //===//
 
-         if (hold !== (state.check & 0xffff)) {
 
-           strm.msg = 'header crc mismatch';
 
-           state.mode = BAD;
 
-           break;
 
-         }
 
-         //=== INITBITS();
 
-         hold = 0;
 
-         bits = 0;
 
-         //===//
 
-       }
 
-       if (state.head) {
 
-         state.head.hcrc = ((state.flags >> 9) & 1);
 
-         state.head.done = true;
 
-       }
 
-       strm.adler = state.check = 0;
 
-       state.mode = TYPE;
 
-       break;
 
-     case DICTID:
 
-       //=== NEEDBITS(32); */
 
-       while (bits < 32) {
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-       }
 
-       //===//
 
-       strm.adler = state.check = zswap32(hold);
 
-       //=== INITBITS();
 
-       hold = 0;
 
-       bits = 0;
 
-       //===//
 
-       state.mode = DICT;
 
-       /* falls through */
 
-     case DICT:
 
-       if (state.havedict === 0) {
 
-         //--- RESTORE() ---
 
-         strm.next_out = put;
 
-         strm.avail_out = left;
 
-         strm.next_in = next;
 
-         strm.avail_in = have;
 
-         state.hold = hold;
 
-         state.bits = bits;
 
-         //---
 
-         return Z_NEED_DICT;
 
-       }
 
-       strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
 
-       state.mode = TYPE;
 
-       /* falls through */
 
-     case TYPE:
 
-       if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
 
-       /* falls through */
 
-     case TYPEDO:
 
-       if (state.last) {
 
-         //--- BYTEBITS() ---//
 
-         hold >>>= bits & 7;
 
-         bits -= bits & 7;
 
-         //---//
 
-         state.mode = CHECK;
 
-         break;
 
-       }
 
-       //=== NEEDBITS(3); */
 
-       while (bits < 3) {
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-       }
 
-       //===//
 
-       state.last = (hold & 0x01)/*BITS(1)*/;
 
-       //--- DROPBITS(1) ---//
 
-       hold >>>= 1;
 
-       bits -= 1;
 
-       //---//
 
-       switch ((hold & 0x03)/*BITS(2)*/) {
 
-       case 0:                             /* stored block */
 
-         //Tracev((stderr, "inflate:     stored block%s\n",
 
-         //        state.last ? " (last)" : ""));
 
-         state.mode = STORED;
 
-         break;
 
-       case 1:                             /* fixed block */
 
-         fixedtables(state);
 
-         //Tracev((stderr, "inflate:     fixed codes block%s\n",
 
-         //        state.last ? " (last)" : ""));
 
-         state.mode = LEN_;             /* decode codes */
 
-         if (flush === Z_TREES) {
 
-           //--- DROPBITS(2) ---//
 
-           hold >>>= 2;
 
-           bits -= 2;
 
-           //---//
 
-           break inf_leave;
 
-         }
 
-         break;
 
-       case 2:                             /* dynamic block */
 
-         //Tracev((stderr, "inflate:     dynamic codes block%s\n",
 
-         //        state.last ? " (last)" : ""));
 
-         state.mode = TABLE;
 
-         break;
 
-       case 3:
 
-         strm.msg = 'invalid block type';
 
-         state.mode = BAD;
 
-       }
 
-       //--- DROPBITS(2) ---//
 
-       hold >>>= 2;
 
-       bits -= 2;
 
-       //---//
 
-       break;
 
-     case STORED:
 
-       //--- BYTEBITS() ---// /* go to byte boundary */
 
-       hold >>>= bits & 7;
 
-       bits -= bits & 7;
 
-       //---//
 
-       //=== NEEDBITS(32); */
 
-       while (bits < 32) {
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-       }
 
-       //===//
 
-       if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
 
-         strm.msg = 'invalid stored block lengths';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       state.length = hold & 0xffff;
 
-       //Tracev((stderr, "inflate:       stored length %u\n",
 
-       //        state.length));
 
-       //=== INITBITS();
 
-       hold = 0;
 
-       bits = 0;
 
-       //===//
 
-       state.mode = COPY_;
 
-       if (flush === Z_TREES) { break inf_leave; }
 
-       /* falls through */
 
-     case COPY_:
 
-       state.mode = COPY;
 
-       /* falls through */
 
-     case COPY:
 
-       copy = state.length;
 
-       if (copy) {
 
-         if (copy > have) { copy = have; }
 
-         if (copy > left) { copy = left; }
 
-         if (copy === 0) { break inf_leave; }
 
-         //--- zmemcpy(put, next, copy); ---
 
-         utils.arraySet(output, input, next, copy, put);
 
-         //---//
 
-         have -= copy;
 
-         next += copy;
 
-         left -= copy;
 
-         put += copy;
 
-         state.length -= copy;
 
-         break;
 
-       }
 
-       //Tracev((stderr, "inflate:       stored end\n"));
 
-       state.mode = TYPE;
 
-       break;
 
-     case TABLE:
 
-       //=== NEEDBITS(14); */
 
-       while (bits < 14) {
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-       }
 
-       //===//
 
-       state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
 
-       //--- DROPBITS(5) ---//
 
-       hold >>>= 5;
 
-       bits -= 5;
 
-       //---//
 
-       state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
 
-       //--- DROPBITS(5) ---//
 
-       hold >>>= 5;
 
-       bits -= 5;
 
-       //---//
 
-       state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
 
-       //--- DROPBITS(4) ---//
 
-       hold >>>= 4;
 
-       bits -= 4;
 
-       //---//
 
- //#ifndef PKZIP_BUG_WORKAROUND
 
-       if (state.nlen > 286 || state.ndist > 30) {
 
-         strm.msg = 'too many length or distance symbols';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
- //#endif
 
-       //Tracev((stderr, "inflate:       table sizes ok\n"));
 
-       state.have = 0;
 
-       state.mode = LENLENS;
 
-       /* falls through */
 
-     case LENLENS:
 
-       while (state.have < state.ncode) {
 
-         //=== NEEDBITS(3);
 
-         while (bits < 3) {
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           hold += input[next++] << bits;
 
-           bits += 8;
 
-         }
 
-         //===//
 
-         state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
 
-         //--- DROPBITS(3) ---//
 
-         hold >>>= 3;
 
-         bits -= 3;
 
-         //---//
 
-       }
 
-       while (state.have < 19) {
 
-         state.lens[order[state.have++]] = 0;
 
-       }
 
-       // We have separate tables & no pointers. 2 commented lines below not needed.
 
-       //state.next = state.codes;
 
-       //state.lencode = state.next;
 
-       // Switch to use dynamic table
 
-       state.lencode = state.lendyn;
 
-       state.lenbits = 7;
 
-       opts = { bits: state.lenbits };
 
-       ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
 
-       state.lenbits = opts.bits;
 
-       if (ret) {
 
-         strm.msg = 'invalid code lengths set';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       //Tracev((stderr, "inflate:       code lengths ok\n"));
 
-       state.have = 0;
 
-       state.mode = CODELENS;
 
-       /* falls through */
 
-     case CODELENS:
 
-       while (state.have < state.nlen + state.ndist) {
 
-         for (;;) {
 
-           here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
 
-           here_bits = here >>> 24;
 
-           here_op = (here >>> 16) & 0xff;
 
-           here_val = here & 0xffff;
 
-           if ((here_bits) <= bits) { break; }
 
-           //--- PULLBYTE() ---//
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           hold += input[next++] << bits;
 
-           bits += 8;
 
-           //---//
 
-         }
 
-         if (here_val < 16) {
 
-           //--- DROPBITS(here.bits) ---//
 
-           hold >>>= here_bits;
 
-           bits -= here_bits;
 
-           //---//
 
-           state.lens[state.have++] = here_val;
 
-         }
 
-         else {
 
-           if (here_val === 16) {
 
-             //=== NEEDBITS(here.bits + 2);
 
-             n = here_bits + 2;
 
-             while (bits < n) {
 
-               if (have === 0) { break inf_leave; }
 
-               have--;
 
-               hold += input[next++] << bits;
 
-               bits += 8;
 
-             }
 
-             //===//
 
-             //--- DROPBITS(here.bits) ---//
 
-             hold >>>= here_bits;
 
-             bits -= here_bits;
 
-             //---//
 
-             if (state.have === 0) {
 
-               strm.msg = 'invalid bit length repeat';
 
-               state.mode = BAD;
 
-               break;
 
-             }
 
-             len = state.lens[state.have - 1];
 
-             copy = 3 + (hold & 0x03);//BITS(2);
 
-             //--- DROPBITS(2) ---//
 
-             hold >>>= 2;
 
-             bits -= 2;
 
-             //---//
 
-           }
 
-           else if (here_val === 17) {
 
-             //=== NEEDBITS(here.bits + 3);
 
-             n = here_bits + 3;
 
-             while (bits < n) {
 
-               if (have === 0) { break inf_leave; }
 
-               have--;
 
-               hold += input[next++] << bits;
 
-               bits += 8;
 
-             }
 
-             //===//
 
-             //--- DROPBITS(here.bits) ---//
 
-             hold >>>= here_bits;
 
-             bits -= here_bits;
 
-             //---//
 
-             len = 0;
 
-             copy = 3 + (hold & 0x07);//BITS(3);
 
-             //--- DROPBITS(3) ---//
 
-             hold >>>= 3;
 
-             bits -= 3;
 
-             //---//
 
-           }
 
-           else {
 
-             //=== NEEDBITS(here.bits + 7);
 
-             n = here_bits + 7;
 
-             while (bits < n) {
 
-               if (have === 0) { break inf_leave; }
 
-               have--;
 
-               hold += input[next++] << bits;
 
-               bits += 8;
 
-             }
 
-             //===//
 
-             //--- DROPBITS(here.bits) ---//
 
-             hold >>>= here_bits;
 
-             bits -= here_bits;
 
-             //---//
 
-             len = 0;
 
-             copy = 11 + (hold & 0x7f);//BITS(7);
 
-             //--- DROPBITS(7) ---//
 
-             hold >>>= 7;
 
-             bits -= 7;
 
-             //---//
 
-           }
 
-           if (state.have + copy > state.nlen + state.ndist) {
 
-             strm.msg = 'invalid bit length repeat';
 
-             state.mode = BAD;
 
-             break;
 
-           }
 
-           while (copy--) {
 
-             state.lens[state.have++] = len;
 
-           }
 
-         }
 
-       }
 
-       /* handle error breaks in while */
 
-       if (state.mode === BAD) { break; }
 
-       /* check for end-of-block code (better have one) */
 
-       if (state.lens[256] === 0) {
 
-         strm.msg = 'invalid code -- missing end-of-block';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       /* build code tables -- note: do not change the lenbits or distbits
 
-          values here (9 and 6) without reading the comments in inftrees.h
 
-          concerning the ENOUGH constants, which depend on those values */
 
-       state.lenbits = 9;
 
-       opts = { bits: state.lenbits };
 
-       ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
 
-       // We have separate tables & no pointers. 2 commented lines below not needed.
 
-       // state.next_index = opts.table_index;
 
-       state.lenbits = opts.bits;
 
-       // state.lencode = state.next;
 
-       if (ret) {
 
-         strm.msg = 'invalid literal/lengths set';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       state.distbits = 6;
 
-       //state.distcode.copy(state.codes);
 
-       // Switch to use dynamic table
 
-       state.distcode = state.distdyn;
 
-       opts = { bits: state.distbits };
 
-       ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
 
-       // We have separate tables & no pointers. 2 commented lines below not needed.
 
-       // state.next_index = opts.table_index;
 
-       state.distbits = opts.bits;
 
-       // state.distcode = state.next;
 
-       if (ret) {
 
-         strm.msg = 'invalid distances set';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       //Tracev((stderr, 'inflate:       codes ok\n'));
 
-       state.mode = LEN_;
 
-       if (flush === Z_TREES) { break inf_leave; }
 
-       /* falls through */
 
-     case LEN_:
 
-       state.mode = LEN;
 
-       /* falls through */
 
-     case LEN:
 
-       if (have >= 6 && left >= 258) {
 
-         //--- RESTORE() ---
 
-         strm.next_out = put;
 
-         strm.avail_out = left;
 
-         strm.next_in = next;
 
-         strm.avail_in = have;
 
-         state.hold = hold;
 
-         state.bits = bits;
 
-         //---
 
-         inflate_fast(strm, _out);
 
-         //--- LOAD() ---
 
-         put = strm.next_out;
 
-         output = strm.output;
 
-         left = strm.avail_out;
 
-         next = strm.next_in;
 
-         input = strm.input;
 
-         have = strm.avail_in;
 
-         hold = state.hold;
 
-         bits = state.bits;
 
-         //---
 
-         if (state.mode === TYPE) {
 
-           state.back = -1;
 
-         }
 
-         break;
 
-       }
 
-       state.back = 0;
 
-       for (;;) {
 
-         here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/
 
-         here_bits = here >>> 24;
 
-         here_op = (here >>> 16) & 0xff;
 
-         here_val = here & 0xffff;
 
-         if (here_bits <= bits) { break; }
 
-         //--- PULLBYTE() ---//
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-         //---//
 
-       }
 
-       if (here_op && (here_op & 0xf0) === 0) {
 
-         last_bits = here_bits;
 
-         last_op = here_op;
 
-         last_val = here_val;
 
-         for (;;) {
 
-           here = state.lencode[last_val +
 
-                   ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
 
-           here_bits = here >>> 24;
 
-           here_op = (here >>> 16) & 0xff;
 
-           here_val = here & 0xffff;
 
-           if ((last_bits + here_bits) <= bits) { break; }
 
-           //--- PULLBYTE() ---//
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           hold += input[next++] << bits;
 
-           bits += 8;
 
-           //---//
 
-         }
 
-         //--- DROPBITS(last.bits) ---//
 
-         hold >>>= last_bits;
 
-         bits -= last_bits;
 
-         //---//
 
-         state.back += last_bits;
 
-       }
 
-       //--- DROPBITS(here.bits) ---//
 
-       hold >>>= here_bits;
 
-       bits -= here_bits;
 
-       //---//
 
-       state.back += here_bits;
 
-       state.length = here_val;
 
-       if (here_op === 0) {
 
-         //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
 
-         //        "inflate:         literal '%c'\n" :
 
-         //        "inflate:         literal 0x%02x\n", here.val));
 
-         state.mode = LIT;
 
-         break;
 
-       }
 
-       if (here_op & 32) {
 
-         //Tracevv((stderr, "inflate:         end of block\n"));
 
-         state.back = -1;
 
-         state.mode = TYPE;
 
-         break;
 
-       }
 
-       if (here_op & 64) {
 
-         strm.msg = 'invalid literal/length code';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       state.extra = here_op & 15;
 
-       state.mode = LENEXT;
 
-       /* falls through */
 
-     case LENEXT:
 
-       if (state.extra) {
 
-         //=== NEEDBITS(state.extra);
 
-         n = state.extra;
 
-         while (bits < n) {
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           hold += input[next++] << bits;
 
-           bits += 8;
 
-         }
 
-         //===//
 
-         state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
 
-         //--- DROPBITS(state.extra) ---//
 
-         hold >>>= state.extra;
 
-         bits -= state.extra;
 
-         //---//
 
-         state.back += state.extra;
 
-       }
 
-       //Tracevv((stderr, "inflate:         length %u\n", state.length));
 
-       state.was = state.length;
 
-       state.mode = DIST;
 
-       /* falls through */
 
-     case DIST:
 
-       for (;;) {
 
-         here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
 
-         here_bits = here >>> 24;
 
-         here_op = (here >>> 16) & 0xff;
 
-         here_val = here & 0xffff;
 
-         if ((here_bits) <= bits) { break; }
 
-         //--- PULLBYTE() ---//
 
-         if (have === 0) { break inf_leave; }
 
-         have--;
 
-         hold += input[next++] << bits;
 
-         bits += 8;
 
-         //---//
 
-       }
 
-       if ((here_op & 0xf0) === 0) {
 
-         last_bits = here_bits;
 
-         last_op = here_op;
 
-         last_val = here_val;
 
-         for (;;) {
 
-           here = state.distcode[last_val +
 
-                   ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
 
-           here_bits = here >>> 24;
 
-           here_op = (here >>> 16) & 0xff;
 
-           here_val = here & 0xffff;
 
-           if ((last_bits + here_bits) <= bits) { break; }
 
-           //--- PULLBYTE() ---//
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           hold += input[next++] << bits;
 
-           bits += 8;
 
-           //---//
 
-         }
 
-         //--- DROPBITS(last.bits) ---//
 
-         hold >>>= last_bits;
 
-         bits -= last_bits;
 
-         //---//
 
-         state.back += last_bits;
 
-       }
 
-       //--- DROPBITS(here.bits) ---//
 
-       hold >>>= here_bits;
 
-       bits -= here_bits;
 
-       //---//
 
-       state.back += here_bits;
 
-       if (here_op & 64) {
 
-         strm.msg = 'invalid distance code';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
-       state.offset = here_val;
 
-       state.extra = (here_op) & 15;
 
-       state.mode = DISTEXT;
 
-       /* falls through */
 
-     case DISTEXT:
 
-       if (state.extra) {
 
-         //=== NEEDBITS(state.extra);
 
-         n = state.extra;
 
-         while (bits < n) {
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           hold += input[next++] << bits;
 
-           bits += 8;
 
-         }
 
-         //===//
 
-         state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
 
-         //--- DROPBITS(state.extra) ---//
 
-         hold >>>= state.extra;
 
-         bits -= state.extra;
 
-         //---//
 
-         state.back += state.extra;
 
-       }
 
- //#ifdef INFLATE_STRICT
 
-       if (state.offset > state.dmax) {
 
-         strm.msg = 'invalid distance too far back';
 
-         state.mode = BAD;
 
-         break;
 
-       }
 
- //#endif
 
-       //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
 
-       state.mode = MATCH;
 
-       /* falls through */
 
-     case MATCH:
 
-       if (left === 0) { break inf_leave; }
 
-       copy = _out - left;
 
-       if (state.offset > copy) {         /* copy from window */
 
-         copy = state.offset - copy;
 
-         if (copy > state.whave) {
 
-           if (state.sane) {
 
-             strm.msg = 'invalid distance too far back';
 
-             state.mode = BAD;
 
-             break;
 
-           }
 
- // (!) This block is disabled in zlib defailts,
 
- // don't enable it for binary compatibility
 
- //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
 
- //          Trace((stderr, "inflate.c too far\n"));
 
- //          copy -= state.whave;
 
- //          if (copy > state.length) { copy = state.length; }
 
- //          if (copy > left) { copy = left; }
 
- //          left -= copy;
 
- //          state.length -= copy;
 
- //          do {
 
- //            output[put++] = 0;
 
- //          } while (--copy);
 
- //          if (state.length === 0) { state.mode = LEN; }
 
- //          break;
 
- //#endif
 
-         }
 
-         if (copy > state.wnext) {
 
-           copy -= state.wnext;
 
-           from = state.wsize - copy;
 
-         }
 
-         else {
 
-           from = state.wnext - copy;
 
-         }
 
-         if (copy > state.length) { copy = state.length; }
 
-         from_source = state.window;
 
-       }
 
-       else {                              /* copy from output */
 
-         from_source = output;
 
-         from = put - state.offset;
 
-         copy = state.length;
 
-       }
 
-       if (copy > left) { copy = left; }
 
-       left -= copy;
 
-       state.length -= copy;
 
-       do {
 
-         output[put++] = from_source[from++];
 
-       } while (--copy);
 
-       if (state.length === 0) { state.mode = LEN; }
 
-       break;
 
-     case LIT:
 
-       if (left === 0) { break inf_leave; }
 
-       output[put++] = state.length;
 
-       left--;
 
-       state.mode = LEN;
 
-       break;
 
-     case CHECK:
 
-       if (state.wrap) {
 
-         //=== NEEDBITS(32);
 
-         while (bits < 32) {
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           // Use '|' insdead of '+' to make sure that result is signed
 
-           hold |= input[next++] << bits;
 
-           bits += 8;
 
-         }
 
-         //===//
 
-         _out -= left;
 
-         strm.total_out += _out;
 
-         state.total += _out;
 
-         if (_out) {
 
-           strm.adler = state.check =
 
-               /*UPDATE(state.check, put - _out, _out);*/
 
-               (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
 
-         }
 
-         _out = left;
 
-         // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
 
-         if ((state.flags ? hold : zswap32(hold)) !== state.check) {
 
-           strm.msg = 'incorrect data check';
 
-           state.mode = BAD;
 
-           break;
 
-         }
 
-         //=== INITBITS();
 
-         hold = 0;
 
-         bits = 0;
 
-         //===//
 
-         //Tracev((stderr, "inflate:   check matches trailer\n"));
 
-       }
 
-       state.mode = LENGTH;
 
-       /* falls through */
 
-     case LENGTH:
 
-       if (state.wrap && state.flags) {
 
-         //=== NEEDBITS(32);
 
-         while (bits < 32) {
 
-           if (have === 0) { break inf_leave; }
 
-           have--;
 
-           hold += input[next++] << bits;
 
-           bits += 8;
 
-         }
 
-         //===//
 
-         if (hold !== (state.total & 0xffffffff)) {
 
-           strm.msg = 'incorrect length check';
 
-           state.mode = BAD;
 
-           break;
 
-         }
 
-         //=== INITBITS();
 
-         hold = 0;
 
-         bits = 0;
 
-         //===//
 
-         //Tracev((stderr, "inflate:   length matches trailer\n"));
 
-       }
 
-       state.mode = DONE;
 
-       /* falls through */
 
-     case DONE:
 
-       ret = Z_STREAM_END;
 
-       break inf_leave;
 
-     case BAD:
 
-       ret = Z_DATA_ERROR;
 
-       break inf_leave;
 
-     case MEM:
 
-       return Z_MEM_ERROR;
 
-     case SYNC:
 
-       /* falls through */
 
-     default:
 
-       return Z_STREAM_ERROR;
 
-     }
 
-   }
 
-   // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
 
-   /*
 
-      Return from inflate(), updating the total counts and the check value.
 
-      If there was no progress during the inflate() call, return a buffer
 
-      error.  Call updatewindow() to create and/or update the window state.
 
-      Note: a memory error from inflate() is non-recoverable.
 
-    */
 
-   //--- RESTORE() ---
 
-   strm.next_out = put;
 
-   strm.avail_out = left;
 
-   strm.next_in = next;
 
-   strm.avail_in = have;
 
-   state.hold = hold;
 
-   state.bits = bits;
 
-   //---
 
-   if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
 
-                       (state.mode < CHECK || flush !== Z_FINISH))) {
 
-     if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
 
-       state.mode = MEM;
 
-       return Z_MEM_ERROR;
 
-     }
 
-   }
 
-   _in -= strm.avail_in;
 
-   _out -= strm.avail_out;
 
-   strm.total_in += _in;
 
-   strm.total_out += _out;
 
-   state.total += _out;
 
-   if (state.wrap && _out) {
 
-     strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
 
-       (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
 
-   }
 
-   strm.data_type = state.bits + (state.last ? 64 : 0) +
 
-                     (state.mode === TYPE ? 128 : 0) +
 
-                     (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
 
-   if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
 
-     ret = Z_BUF_ERROR;
 
-   }
 
-   return ret;
 
- }
 
- function inflateEnd(strm) {
 
-   if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
 
-     return Z_STREAM_ERROR;
 
-   }
 
-   var state = strm.state;
 
-   if (state.window) {
 
-     state.window = null;
 
-   }
 
-   strm.state = null;
 
-   return Z_OK;
 
- }
 
- function inflateGetHeader(strm, head) {
 
-   var state;
 
-   /* check state */
 
-   if (!strm || !strm.state) { return Z_STREAM_ERROR; }
 
-   state = strm.state;
 
-   if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
 
-   /* save header structure */
 
-   state.head = head;
 
-   head.done = false;
 
-   return Z_OK;
 
- }
 
- function inflateSetDictionary(strm, dictionary) {
 
-   var dictLength = dictionary.length;
 
-   var state;
 
-   var dictid;
 
-   var ret;
 
-   /* check state */
 
-   if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }
 
-   state = strm.state;
 
-   if (state.wrap !== 0 && state.mode !== DICT) {
 
-     return Z_STREAM_ERROR;
 
-   }
 
-   /* check for correct dictionary identifier */
 
-   if (state.mode === DICT) {
 
-     dictid = 1; /* adler32(0, null, 0)*/
 
-     /* dictid = adler32(dictid, dictionary, dictLength); */
 
-     dictid = adler32(dictid, dictionary, dictLength, 0);
 
-     if (dictid !== state.check) {
 
-       return Z_DATA_ERROR;
 
-     }
 
-   }
 
-   /* copy dictionary to window using updatewindow(), which will amend the
 
-    existing dictionary if appropriate */
 
-   ret = updatewindow(strm, dictionary, dictLength, dictLength);
 
-   if (ret) {
 
-     state.mode = MEM;
 
-     return Z_MEM_ERROR;
 
-   }
 
-   state.havedict = 1;
 
-   // Tracev((stderr, "inflate:   dictionary set\n"));
 
-   return Z_OK;
 
- }
 
- exports.inflateReset = inflateReset;
 
- exports.inflateReset2 = inflateReset2;
 
- exports.inflateResetKeep = inflateResetKeep;
 
- exports.inflateInit = inflateInit;
 
- exports.inflateInit2 = inflateInit2;
 
- exports.inflate = inflate;
 
- exports.inflateEnd = inflateEnd;
 
- exports.inflateGetHeader = inflateGetHeader;
 
- exports.inflateSetDictionary = inflateSetDictionary;
 
- exports.inflateInfo = 'pako inflate (from Nodeca project)';
 
- /* Not implemented
 
- exports.inflateCopy = inflateCopy;
 
- exports.inflateGetDictionary = inflateGetDictionary;
 
- exports.inflateMark = inflateMark;
 
- exports.inflatePrime = inflatePrime;
 
- exports.inflateSync = inflateSync;
 
- exports.inflateSyncPoint = inflateSyncPoint;
 
- exports.inflateUndermine = inflateUndermine;
 
- */
 
- },{"../utils/common":1,"./adler32":3,"./crc32":5,"./inffast":7,"./inftrees":9}],9:[function(require,module,exports){
 
- 'use strict';
 
- var utils = require('../utils/common');
 
- var MAXBITS = 15;
 
- var ENOUGH_LENS = 852;
 
- var ENOUGH_DISTS = 592;
 
- //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
 
- var CODES = 0;
 
- var LENS = 1;
 
- var DISTS = 2;
 
- var lbase = [ /* Length codes 257..285 base */
 
-   3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
 
-   35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
 
- ];
 
- var lext = [ /* Length codes 257..285 extra */
 
-   16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
 
-   19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
 
- ];
 
- var dbase = [ /* Distance codes 0..29 base */
 
-   1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
 
-   257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
 
-   8193, 12289, 16385, 24577, 0, 0
 
- ];
 
- var dext = [ /* Distance codes 0..29 extra */
 
-   16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
 
-   23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
 
-   28, 28, 29, 29, 64, 64
 
- ];
 
- module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
 
- {
 
-   var bits = opts.bits;
 
-       //here = opts.here; /* table entry for duplication */
 
-   var len = 0;               /* a code's length in bits */
 
-   var sym = 0;               /* index of code symbols */
 
-   var min = 0, max = 0;          /* minimum and maximum code lengths */
 
-   var root = 0;              /* number of index bits for root table */
 
-   var curr = 0;              /* number of index bits for current table */
 
-   var drop = 0;              /* code bits to drop for sub-table */
 
-   var left = 0;                   /* number of prefix codes available */
 
-   var used = 0;              /* code entries in table used */
 
-   var huff = 0;              /* Huffman code */
 
-   var incr;              /* for incrementing code, index */
 
-   var fill;              /* index for replicating entries */
 
-   var low;               /* low bits for current root entry */
 
-   var mask;              /* mask for low root bits */
 
-   var next;             /* next available space in table */
 
-   var base = null;     /* base value table to use */
 
-   var base_index = 0;
 
- //  var shoextra;    /* extra bits table to use */
 
-   var end;                    /* use base and extra for symbol > end */
 
-   var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */
 
-   var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */
 
-   var extra = null;
 
-   var extra_index = 0;
 
-   var here_bits, here_op, here_val;
 
-   /*
 
-    Process a set of code lengths to create a canonical Huffman code.  The
 
-    code lengths are lens[0..codes-1].  Each length corresponds to the
 
-    symbols 0..codes-1.  The Huffman code is generated by first sorting the
 
-    symbols by length from short to long, and retaining the symbol order
 
-    for codes with equal lengths.  Then the code starts with all zero bits
 
-    for the first code of the shortest length, and the codes are integer
 
-    increments for the same length, and zeros are appended as the length
 
-    increases.  For the deflate format, these bits are stored backwards
 
-    from their more natural integer increment ordering, and so when the
 
-    decoding tables are built in the large loop below, the integer codes
 
-    are incremented backwards.
 
-    This routine assumes, but does not check, that all of the entries in
 
-    lens[] are in the range 0..MAXBITS.  The caller must assure this.
 
-    1..MAXBITS is interpreted as that code length.  zero means that that
 
-    symbol does not occur in this code.
 
-    The codes are sorted by computing a count of codes for each length,
 
-    creating from that a table of starting indices for each length in the
 
-    sorted table, and then entering the symbols in order in the sorted
 
-    table.  The sorted table is work[], with that space being provided by
 
-    the caller.
 
-    The length counts are used for other purposes as well, i.e. finding
 
-    the minimum and maximum length codes, determining if there are any
 
-    codes at all, checking for a valid set of lengths, and looking ahead
 
-    at length counts to determine sub-table sizes when building the
 
-    decoding tables.
 
-    */
 
-   /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
 
-   for (len = 0; len <= MAXBITS; len++) {
 
-     count[len] = 0;
 
-   }
 
-   for (sym = 0; sym < codes; sym++) {
 
-     count[lens[lens_index + sym]]++;
 
-   }
 
-   /* bound code lengths, force root to be within code lengths */
 
-   root = bits;
 
-   for (max = MAXBITS; max >= 1; max--) {
 
-     if (count[max] !== 0) { break; }
 
-   }
 
-   if (root > max) {
 
-     root = max;
 
-   }
 
-   if (max === 0) {                     /* no symbols to code at all */
 
-     //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
 
-     //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
 
-     //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
 
-     table[table_index++] = (1 << 24) | (64 << 16) | 0;
 
-     //table.op[opts.table_index] = 64;
 
-     //table.bits[opts.table_index] = 1;
 
-     //table.val[opts.table_index++] = 0;
 
-     table[table_index++] = (1 << 24) | (64 << 16) | 0;
 
-     opts.bits = 1;
 
-     return 0;     /* no symbols, but wait for decoding to report error */
 
-   }
 
-   for (min = 1; min < max; min++) {
 
-     if (count[min] !== 0) { break; }
 
-   }
 
-   if (root < min) {
 
-     root = min;
 
-   }
 
-   /* check for an over-subscribed or incomplete set of lengths */
 
-   left = 1;
 
-   for (len = 1; len <= MAXBITS; len++) {
 
-     left <<= 1;
 
-     left -= count[len];
 
-     if (left < 0) {
 
-       return -1;
 
-     }        /* over-subscribed */
 
-   }
 
-   if (left > 0 && (type === CODES || max !== 1)) {
 
-     return -1;                      /* incomplete set */
 
-   }
 
-   /* generate offsets into symbol table for each length for sorting */
 
-   offs[1] = 0;
 
-   for (len = 1; len < MAXBITS; len++) {
 
-     offs[len + 1] = offs[len] + count[len];
 
-   }
 
-   /* sort symbols by length, by symbol order within each length */
 
-   for (sym = 0; sym < codes; sym++) {
 
-     if (lens[lens_index + sym] !== 0) {
 
-       work[offs[lens[lens_index + sym]]++] = sym;
 
-     }
 
-   }
 
-   /*
 
-    Create and fill in decoding tables.  In this loop, the table being
 
-    filled is at next and has curr index bits.  The code being used is huff
 
-    with length len.  That code is converted to an index by dropping drop
 
-    bits off of the bottom.  For codes where len is less than drop + curr,
 
-    those top drop + curr - len bits are incremented through all values to
 
-    fill the table with replicated entries.
 
-    root is the number of index bits for the root table.  When len exceeds
 
-    root, sub-tables are created pointed to by the root entry with an index
 
-    of the low root bits of huff.  This is saved in low to check for when a
 
-    new sub-table should be started.  drop is zero when the root table is
 
-    being filled, and drop is root when sub-tables are being filled.
 
-    When a new sub-table is needed, it is necessary to look ahead in the
 
-    code lengths to determine what size sub-table is needed.  The length
 
-    counts are used for this, and so count[] is decremented as codes are
 
-    entered in the tables.
 
-    used keeps track of how many table entries have been allocated from the
 
-    provided *table space.  It is checked for LENS and DIST tables against
 
-    the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
 
-    the initial root table size constants.  See the comments in inftrees.h
 
-    for more information.
 
-    sym increments through all symbols, and the loop terminates when
 
-    all codes of length max, i.e. all codes, have been processed.  This
 
-    routine permits incomplete codes, so another loop after this one fills
 
-    in the rest of the decoding tables with invalid code markers.
 
-    */
 
-   /* set up for code type */
 
-   // poor man optimization - use if-else instead of switch,
 
-   // to avoid deopts in old v8
 
-   if (type === CODES) {
 
-     base = extra = work;    /* dummy value--not used */
 
-     end = 19;
 
-   } else if (type === LENS) {
 
-     base = lbase;
 
-     base_index -= 257;
 
-     extra = lext;
 
-     extra_index -= 257;
 
-     end = 256;
 
-   } else {                    /* DISTS */
 
-     base = dbase;
 
-     extra = dext;
 
-     end = -1;
 
-   }
 
-   /* initialize opts for loop */
 
-   huff = 0;                   /* starting code */
 
-   sym = 0;                    /* starting code symbol */
 
-   len = min;                  /* starting code length */
 
-   next = table_index;              /* current table to fill in */
 
-   curr = root;                /* current table index bits */
 
-   drop = 0;                   /* current bits to drop from code for index */
 
-   low = -1;                   /* trigger new sub-table when len > root */
 
-   used = 1 << root;          /* use root table entries */
 
-   mask = used - 1;            /* mask for comparing low */
 
-   /* check available table space */
 
-   if ((type === LENS && used > ENOUGH_LENS) ||
 
-     (type === DISTS && used > ENOUGH_DISTS)) {
 
-     return 1;
 
-   }
 
-   var i = 0;
 
-   /* process all codes and make table entries */
 
-   for (;;) {
 
-     i++;
 
-     /* create table entry */
 
-     here_bits = len - drop;
 
-     if (work[sym] < end) {
 
-       here_op = 0;
 
-       here_val = work[sym];
 
-     }
 
-     else if (work[sym] > end) {
 
-       here_op = extra[extra_index + work[sym]];
 
-       here_val = base[base_index + work[sym]];
 
-     }
 
-     else {
 
-       here_op = 32 + 64;         /* end of block */
 
-       here_val = 0;
 
-     }
 
-     /* replicate for those indices with low len bits equal to huff */
 
-     incr = 1 << (len - drop);
 
-     fill = 1 << curr;
 
-     min = fill;                 /* save offset to next table */
 
-     do {
 
-       fill -= incr;
 
-       table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
 
-     } while (fill !== 0);
 
-     /* backwards increment the len-bit code huff */
 
-     incr = 1 << (len - 1);
 
-     while (huff & incr) {
 
-       incr >>= 1;
 
-     }
 
-     if (incr !== 0) {
 
-       huff &= incr - 1;
 
-       huff += incr;
 
-     } else {
 
-       huff = 0;
 
-     }
 
-     /* go to next symbol, update count, len */
 
-     sym++;
 
-     if (--count[len] === 0) {
 
-       if (len === max) { break; }
 
-       len = lens[lens_index + work[sym]];
 
-     }
 
-     /* create new sub-table if needed */
 
-     if (len > root && (huff & mask) !== low) {
 
-       /* if first time, transition to sub-tables */
 
-       if (drop === 0) {
 
-         drop = root;
 
-       }
 
-       /* increment past last table */
 
-       next += min;            /* here min is 1 << curr */
 
-       /* determine length of next table */
 
-       curr = len - drop;
 
-       left = 1 << curr;
 
-       while (curr + drop < max) {
 
-         left -= count[curr + drop];
 
-         if (left <= 0) { break; }
 
-         curr++;
 
-         left <<= 1;
 
-       }
 
-       /* check for enough space */
 
-       used += 1 << curr;
 
-       if ((type === LENS && used > ENOUGH_LENS) ||
 
-         (type === DISTS && used > ENOUGH_DISTS)) {
 
-         return 1;
 
-       }
 
-       /* point entry in root table to sub-table */
 
-       low = huff & mask;
 
-       /*table.op[low] = curr;
 
-       table.bits[low] = root;
 
-       table.val[low] = next - opts.table_index;*/
 
-       table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
 
-     }
 
-   }
 
-   /* fill in remaining table entry if code is incomplete (guaranteed to have
 
-    at most one remaining entry, since if the code is incomplete, the
 
-    maximum code length that was allowed to get this far is one bit) */
 
-   if (huff !== 0) {
 
-     //table.op[next + huff] = 64;            /* invalid code marker */
 
-     //table.bits[next + huff] = len - drop;
 
-     //table.val[next + huff] = 0;
 
-     table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
 
-   }
 
-   /* set return parameters */
 
-   //opts.table_index += used;
 
-   opts.bits = root;
 
-   return 0;
 
- };
 
- },{"../utils/common":1}],10:[function(require,module,exports){
 
- 'use strict';
 
- module.exports = {
 
-   2:      'need dictionary',     /* Z_NEED_DICT       2  */
 
-   1:      'stream end',          /* Z_STREAM_END      1  */
 
-   0:      '',                    /* Z_OK              0  */
 
-   '-1':   'file error',          /* Z_ERRNO         (-1) */
 
-   '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
 
-   '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
 
-   '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
 
-   '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
 
-   '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
 
- };
 
- },{}],11:[function(require,module,exports){
 
- 'use strict';
 
- function ZStream() {
 
-   /* next input byte */
 
-   this.input = null; // JS specific, because we have no pointers
 
-   this.next_in = 0;
 
-   /* number of bytes available at input */
 
-   this.avail_in = 0;
 
-   /* total number of input bytes read so far */
 
-   this.total_in = 0;
 
-   /* next output byte should be put there */
 
-   this.output = null; // JS specific, because we have no pointers
 
-   this.next_out = 0;
 
-   /* remaining free space at output */
 
-   this.avail_out = 0;
 
-   /* total number of bytes output so far */
 
-   this.total_out = 0;
 
-   /* last error message, NULL if no error */
 
-   this.msg = ''/*Z_NULL*/;
 
-   /* not visible by applications */
 
-   this.state = null;
 
-   /* best guess about the data type: binary or text */
 
-   this.data_type = 2/*Z_UNKNOWN*/;
 
-   /* adler32 value of the uncompressed data */
 
-   this.adler = 0;
 
- }
 
- module.exports = ZStream;
 
- },{}],"/lib/inflate.js":[function(require,module,exports){
 
- 'use strict';
 
- var zlib_inflate = require('./zlib/inflate');
 
- var utils        = require('./utils/common');
 
- var strings      = require('./utils/strings');
 
- var c            = require('./zlib/constants');
 
- var msg          = require('./zlib/messages');
 
- var ZStream      = require('./zlib/zstream');
 
- var GZheader     = require('./zlib/gzheader');
 
- var toString = Object.prototype.toString;
 
- /**
 
-  * class Inflate
 
-  *
 
-  * Generic JS-style wrapper for zlib calls. If you don't need
 
-  * streaming behaviour - use more simple functions: [[inflate]]
 
-  * and [[inflateRaw]].
 
-  **/
 
- /* internal
 
-  * inflate.chunks -> Array
 
-  *
 
-  * Chunks of output data, if [[Inflate#onData]] not overriden.
 
-  **/
 
- /**
 
-  * Inflate.result -> Uint8Array|Array|String
 
-  *
 
-  * Uncompressed result, generated by default [[Inflate#onData]]
 
-  * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
 
-  * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you
 
-  * push a chunk with explicit flush (call [[Inflate#push]] with
 
-  * `Z_SYNC_FLUSH` param).
 
-  **/
 
- /**
 
-  * Inflate.err -> Number
 
-  *
 
-  * Error code after inflate finished. 0 (Z_OK) on success.
 
-  * Should be checked if broken data possible.
 
-  **/
 
- /**
 
-  * Inflate.msg -> String
 
-  *
 
-  * Error message, if [[Inflate.err]] != 0
 
-  **/
 
- /**
 
-  * new Inflate(options)
 
-  * - options (Object): zlib inflate options.
 
-  *
 
-  * Creates new inflator instance with specified params. Throws exception
 
-  * on bad params. Supported options:
 
-  *
 
-  * - `windowBits`
 
-  * - `dictionary`
 
-  *
 
-  * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
 
-  * for more information on these.
 
-  *
 
-  * Additional options, for internal needs:
 
-  *
 
-  * - `chunkSize` - size of generated data chunks (16K by default)
 
-  * - `raw` (Boolean) - do raw inflate
 
-  * - `to` (String) - if equal to 'string', then result will be converted
 
-  *   from utf8 to utf16 (javascript) string. When string output requested,
 
-  *   chunk length can differ from `chunkSize`, depending on content.
 
-  *
 
-  * By default, when no options set, autodetect deflate/gzip data format via
 
-  * wrapper header.
 
-  *
 
-  * ##### Example:
 
-  *
 
-  * ```javascript
 
-  * var pako = require('pako')
 
-  *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
 
-  *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
 
-  *
 
-  * var inflate = new pako.Inflate({ level: 3});
 
-  *
 
-  * inflate.push(chunk1, false);
 
-  * inflate.push(chunk2, true);  // true -> last chunk
 
-  *
 
-  * if (inflate.err) { throw new Error(inflate.err); }
 
-  *
 
-  * console.log(inflate.result);
 
-  * ```
 
-  **/
 
- function Inflate(options) {
 
-   if (!(this instanceof Inflate)) return new Inflate(options);
 
-   this.options = utils.assign({
 
-     chunkSize: 16384,
 
-     windowBits: 0,
 
-     to: ''
 
-   }, options || {});
 
-   var opt = this.options;
 
-   // Force window size for `raw` data, if not set directly,
 
-   // because we have no header for autodetect.
 
-   if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {
 
-     opt.windowBits = -opt.windowBits;
 
-     if (opt.windowBits === 0) { opt.windowBits = -15; }
 
-   }
 
-   // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
 
-   if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&
 
-       !(options && options.windowBits)) {
 
-     opt.windowBits += 32;
 
-   }
 
-   // Gzip header has no info about windows size, we can do autodetect only
 
-   // for deflate. So, if window size not set, force it to max when gzip possible
 
-   if ((opt.windowBits > 15) && (opt.windowBits < 48)) {
 
-     // bit 3 (16) -> gzipped data
 
-     // bit 4 (32) -> autodetect gzip/deflate
 
-     if ((opt.windowBits & 15) === 0) {
 
-       opt.windowBits |= 15;
 
-     }
 
-   }
 
-   this.err    = 0;      // error code, if happens (0 = Z_OK)
 
-   this.msg    = '';     // error message
 
-   this.ended  = false;  // used to avoid multiple onEnd() calls
 
-   this.chunks = [];     // chunks of compressed data
 
-   this.strm   = new ZStream();
 
-   this.strm.avail_out = 0;
 
-   var status  = zlib_inflate.inflateInit2(
 
-     this.strm,
 
-     opt.windowBits
 
-   );
 
-   if (status !== c.Z_OK) {
 
-     throw new Error(msg[status]);
 
-   }
 
-   this.header = new GZheader();
 
-   zlib_inflate.inflateGetHeader(this.strm, this.header);
 
- }
 
- /**
 
-  * Inflate#push(data[, mode]) -> Boolean
 
-  * - data (Uint8Array|Array|ArrayBuffer|String): input data
 
-  * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
 
-  *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.
 
-  *
 
-  * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
 
-  * new output chunks. Returns `true` on success. The last data block must have
 
-  * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
 
-  * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you
 
-  * can use mode Z_SYNC_FLUSH, keeping the decompression context.
 
-  *
 
-  * On fail call [[Inflate#onEnd]] with error code and return false.
 
-  *
 
-  * We strongly recommend to use `Uint8Array` on input for best speed (output
 
-  * format is detected automatically). Also, don't skip last param and always
 
-  * use the same type in your code (boolean or number). That will improve JS speed.
 
-  *
 
-  * For regular `Array`-s make sure all elements are [0..255].
 
-  *
 
-  * ##### Example
 
-  *
 
-  * ```javascript
 
-  * push(chunk, false); // push one of data chunks
 
-  * ...
 
-  * push(chunk, true);  // push last chunk
 
-  * ```
 
-  **/
 
- Inflate.prototype.push = function (data, mode) {
 
-   var strm = this.strm;
 
-   var chunkSize = this.options.chunkSize;
 
-   var dictionary = this.options.dictionary;
 
-   var status, _mode;
 
-   var next_out_utf8, tail, utf8str;
 
-   var dict;
 
-   // Flag to properly process Z_BUF_ERROR on testing inflate call
 
-   // when we check that all output data was flushed.
 
-   var allowBufError = false;
 
-   if (this.ended) { return false; }
 
-   _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);
 
-   // Convert data if needed
 
-   if (typeof data === 'string') {
 
-     // Only binary strings can be decompressed on practice
 
-     strm.input = strings.binstring2buf(data);
 
-   } else if (toString.call(data) === '[object ArrayBuffer]') {
 
-     strm.input = new Uint8Array(data);
 
-   } else {
 
-     strm.input = data;
 
-   }
 
-   strm.next_in = 0;
 
-   strm.avail_in = strm.input.length;
 
-   do {
 
-     if (strm.avail_out === 0) {
 
-       strm.output = new utils.Buf8(chunkSize);
 
-       strm.next_out = 0;
 
-       strm.avail_out = chunkSize;
 
-     }
 
-     status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */
 
-     if (status === c.Z_NEED_DICT && dictionary) {
 
-       // Convert data if needed
 
-       if (typeof dictionary === 'string') {
 
-         dict = strings.string2buf(dictionary);
 
-       } else if (toString.call(dictionary) === '[object ArrayBuffer]') {
 
-         dict = new Uint8Array(dictionary);
 
-       } else {
 
-         dict = dictionary;
 
-       }
 
-       status = zlib_inflate.inflateSetDictionary(this.strm, dict);
 
-     }
 
-     if (status === c.Z_BUF_ERROR && allowBufError === true) {
 
-       status = c.Z_OK;
 
-       allowBufError = false;
 
-     }
 
-     if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
 
-       this.onEnd(status);
 
-       this.ended = true;
 
-       return false;
 
-     }
 
-     if (strm.next_out) {
 
-       if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {
 
-         if (this.options.to === 'string') {
 
-           next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
 
-           tail = strm.next_out - next_out_utf8;
 
-           utf8str = strings.buf2string(strm.output, next_out_utf8);
 
-           // move tail
 
-           strm.next_out = tail;
 
-           strm.avail_out = chunkSize - tail;
 
-           if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }
 
-           this.onData(utf8str);
 
-         } else {
 
-           this.onData(utils.shrinkBuf(strm.output, strm.next_out));
 
-         }
 
-       }
 
-     }
 
-     // When no more input data, we should check that internal inflate buffers
 
-     // are flushed. The only way to do it when avail_out = 0 - run one more
 
-     // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.
 
-     // Here we set flag to process this error properly.
 
-     //
 
-     // NOTE. Deflate does not return error in this case and does not needs such
 
-     // logic.
 
-     if (strm.avail_in === 0 && strm.avail_out === 0) {
 
-       allowBufError = true;
 
-     }
 
-   } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);
 
-   if (status === c.Z_STREAM_END) {
 
-     _mode = c.Z_FINISH;
 
-   }
 
-   // Finalize on the last chunk.
 
-   if (_mode === c.Z_FINISH) {
 
-     status = zlib_inflate.inflateEnd(this.strm);
 
-     this.onEnd(status);
 
-     this.ended = true;
 
-     return status === c.Z_OK;
 
-   }
 
-   // callback interim results if Z_SYNC_FLUSH.
 
-   if (_mode === c.Z_SYNC_FLUSH) {
 
-     this.onEnd(c.Z_OK);
 
-     strm.avail_out = 0;
 
-     return true;
 
-   }
 
-   return true;
 
- };
 
- /**
 
-  * Inflate#onData(chunk) -> Void
 
-  * - chunk (Uint8Array|Array|String): ouput data. Type of array depends
 
-  *   on js engine support. When string output requested, each chunk
 
-  *   will be string.
 
-  *
 
-  * By default, stores data blocks in `chunks[]` property and glue
 
-  * those in `onEnd`. Override this handler, if you need another behaviour.
 
-  **/
 
- Inflate.prototype.onData = function (chunk) {
 
-   this.chunks.push(chunk);
 
- };
 
- /**
 
-  * Inflate#onEnd(status) -> Void
 
-  * - status (Number): inflate status. 0 (Z_OK) on success,
 
-  *   other if not.
 
-  *
 
-  * Called either after you tell inflate that the input stream is
 
-  * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
 
-  * or if an error happened. By default - join collected chunks,
 
-  * free memory and fill `results` / `err` properties.
 
-  **/
 
- Inflate.prototype.onEnd = function (status) {
 
-   // On success - join
 
-   if (status === c.Z_OK) {
 
-     if (this.options.to === 'string') {
 
-       // Glue & convert here, until we teach pako to send
 
-       // utf8 alligned strings to onData
 
-       this.result = this.chunks.join('');
 
-     } else {
 
-       this.result = utils.flattenChunks(this.chunks);
 
-     }
 
-   }
 
-   this.chunks = [];
 
-   this.err = status;
 
-   this.msg = this.strm.msg;
 
- };
 
- /**
 
-  * inflate(data[, options]) -> Uint8Array|Array|String
 
-  * - data (Uint8Array|Array|String): input data to decompress.
 
-  * - options (Object): zlib inflate options.
 
-  *
 
-  * Decompress `data` with inflate/ungzip and `options`. Autodetect
 
-  * format via wrapper header by default. That's why we don't provide
 
-  * separate `ungzip` method.
 
-  *
 
-  * Supported options are:
 
-  *
 
-  * - windowBits
 
-  *
 
-  * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
 
-  * for more information.
 
-  *
 
-  * Sugar (options):
 
-  *
 
-  * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
 
-  *   negative windowBits implicitly.
 
-  * - `to` (String) - if equal to 'string', then result will be converted
 
-  *   from utf8 to utf16 (javascript) string. When string output requested,
 
-  *   chunk length can differ from `chunkSize`, depending on content.
 
-  *
 
-  *
 
-  * ##### Example:
 
-  *
 
-  * ```javascript
 
-  * var pako = require('pako')
 
-  *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])
 
-  *   , output;
 
-  *
 
-  * try {
 
-  *   output = pako.inflate(input);
 
-  * } catch (err)
 
-  *   console.log(err);
 
-  * }
 
-  * ```
 
-  **/
 
- function inflate(input, options) {
 
-   var inflator = new Inflate(options);
 
-   inflator.push(input, true);
 
-   // That will never happens, if you don't cheat with options :)
 
-   if (inflator.err) { throw inflator.msg; }
 
-   return inflator.result;
 
- }
 
- /**
 
-  * inflateRaw(data[, options]) -> Uint8Array|Array|String
 
-  * - data (Uint8Array|Array|String): input data to decompress.
 
-  * - options (Object): zlib inflate options.
 
-  *
 
-  * The same as [[inflate]], but creates raw data, without wrapper
 
-  * (header and adler32 crc).
 
-  **/
 
- function inflateRaw(input, options) {
 
-   options = options || {};
 
-   options.raw = true;
 
-   return inflate(input, options);
 
- }
 
- /**
 
-  * ungzip(data[, options]) -> Uint8Array|Array|String
 
-  * - data (Uint8Array|Array|String): input data to decompress.
 
-  * - options (Object): zlib inflate options.
 
-  *
 
-  * Just shortcut to [[inflate]], because it autodetects format
 
-  * by header.content. Done for convenience.
 
-  **/
 
- exports.Inflate = Inflate;
 
- exports.inflate = inflate;
 
- exports.inflateRaw = inflateRaw;
 
- exports.ungzip  = inflate;
 
- },{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js")
 
- });
 
 
  |