gerbers-renderer 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +193 -117
- package/dist/core/detect.d.ts +2 -0
- package/dist/core/errors.d.ts +5 -0
- package/dist/core/list.d.ts +2 -0
- package/dist/core/types.d.ts +18 -0
- package/dist/gerbers-renderer.es.js +2461 -2054
- package/dist/gerbers-renderer.es.js.map +1 -1
- package/dist/gerbers-renderer.umd.js +26 -23
- package/dist/gerbers-renderer.umd.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/io/unpackArchive.d.ts +9 -0
- package/dist/libarchive-Bt1VdZR0.js +272 -0
- package/dist/libarchive-Bt1VdZR0.js.map +1 -0
- package/dist/parse/gerber-parser.d.ts +28 -2
- package/dist/render/renderGerbers.d.ts +3 -0
- package/dist/render/renderGerbersFiles.d.ts +7 -0
- package/dist/render/renderGerbersZip.d.ts +3 -7
- package/package.json +3 -2
|
@@ -1,34 +1,37 @@
|
|
|
1
|
-
(function(
|
|
2
|
-
\0`,H+=l(B,2),H+=D.magic,H+=l(x,2),H+=l(z,2),H+=l(J.crc32,4),H+=l(J.compressedSize,4),H+=l(J.uncompressedSize,4),H+=l(P.length,2),H+=l(N.length,2),{fileRecord:_.LOCAL_FILE_HEADER+H+P+N,dirRecord:_.CENTRAL_FILE_HEADER+l(K,2)+H+l(V.length,2)+"\0\0\0\0"+l(A,4)+l(h,4)+P+N+V}}var r=a("../utils"),o=a("../stream/GenericWorker"),b=a("../utf8"),y=a("../crc32"),_=a("../signature");function d(s,p,n,h){o.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=p,this.zipPlatform=n,this.encodeFileName=h,this.streamFiles=s,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}r.inherits(d,o),d.prototype.push=function(s){var p=s.meta.percent||0,n=this.entriesCount,h=this._sources.length;this.accumulate?this.contentBuffer.push(s):(this.bytesWritten+=s.data.length,o.prototype.push.call(this,{data:s.data,meta:{currentFile:this.currentFile,percent:n?(p+100*(n-h-1))/n:100}}))},d.prototype.openedSource=function(s){this.currentSourceOffset=this.bytesWritten,this.currentFile=s.file.name;var p=this.streamFiles&&!s.file.dir;if(p){var n=i(s,p,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:n.fileRecord,meta:{percent:0}})}else this.accumulate=!0},d.prototype.closedSource=function(s){this.accumulate=!1;var p=this.streamFiles&&!s.file.dir,n=i(s,p,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(n.dirRecord),p)this.push({data:(function(h){return _.DATA_DESCRIPTOR+l(h.crc32,4)+l(h.compressedSize,4)+l(h.uncompressedSize,4)})(s),meta:{percent:100}});else for(this.push({data:n.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},d.prototype.flush=function(){for(var s=this.bytesWritten,p=0;p<this.dirRecords.length;p++)this.push({data:this.dirRecords[p],meta:{percent:100}});var n=this.bytesWritten-s,h=(function(c,g,x,z,C){var D=r.transformTo("string",C(z));return _.CENTRAL_DIRECTORY_END+"\0\0\0\0"+l(c,2)+l(c,2)+l(g,4)+l(x,4)+l(D.length,2)+D})(this.dirRecords.length,n,s,this.zipComment,this.encodeFileName);this.push({data:h,meta:{percent:100}})},d.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},d.prototype.registerPrevious=function(s){this._sources.push(s);var p=this;return s.on("data",function(n){p.processChunk(n)}),s.on("end",function(){p.closedSource(p.previous.streamInfo),p._sources.length?p.prepareNextSource():p.end()}),s.on("error",function(n){p.error(n)}),this},d.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},d.prototype.error=function(s){var p=this._sources;if(!o.prototype.error.call(this,s))return!1;for(var n=0;n<p.length;n++)try{p[n].error(s)}catch{}return!0},d.prototype.lock=function(){o.prototype.lock.call(this);for(var s=this._sources,p=0;p<s.length;p++)s[p].lock()},v.exports=d},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(a,v,m){var l=a("../compressions"),i=a("./ZipFileWorker");m.generateWorker=function(r,o,b){var y=new i(o.streamFiles,b,o.platform,o.encodeFileName),_=0;try{r.forEach(function(d,s){_++;var p=(function(g,x){var z=g||x,C=l[z];if(!C)throw new Error(z+" is not a valid compression method !");return C})(s.options.compression,o.compression),n=s.options.compressionOptions||o.compressionOptions||{},h=s.dir,c=s.date;s._compressWorker(p,n).withStreamInfo("file",{name:d,dir:h,date:c,comment:s.comment||"",unixPermissions:s.unixPermissions,dosPermissions:s.dosPermissions}).pipe(y)}),y.entriesCount=_}catch(d){y.error(d)}return y}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(a,v,m){function l(){if(!(this instanceof l))return new l;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var i=new l;for(var r in this)typeof this[r]!="function"&&(i[r]=this[r]);return i}}(l.prototype=a("./object")).loadAsync=a("./load"),l.support=a("./support"),l.defaults=a("./defaults"),l.version="3.10.1",l.loadAsync=function(i,r){return new l().loadAsync(i,r)},l.external=a("./external"),v.exports=l},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(a,v,m){var l=a("./utils"),i=a("./external"),r=a("./utf8"),o=a("./zipEntries"),b=a("./stream/Crc32Probe"),y=a("./nodejsUtils");function _(d){return new i.Promise(function(s,p){var n=d.decompressed.getContentWorker().pipe(new b);n.on("error",function(h){p(h)}).on("end",function(){n.streamInfo.crc32!==d.decompressed.crc32?p(new Error("Corrupted zip : CRC32 mismatch")):s()}).resume()})}v.exports=function(d,s){var p=this;return s=l.extend(s||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:r.utf8decode}),y.isNode&&y.isStream(d)?i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):l.prepareContent("the loaded zip file",d,!0,s.optimizedBinaryString,s.base64).then(function(n){var h=new o(s);return h.load(n),h}).then(function(n){var h=[i.Promise.resolve(n)],c=n.files;if(s.checkCRC32)for(var g=0;g<c.length;g++)h.push(_(c[g]));return i.Promise.all(h)}).then(function(n){for(var h=n.shift(),c=h.files,g=0;g<c.length;g++){var x=c[g],z=x.fileNameStr,C=l.resolve(x.fileNameStr);p.file(C,x.decompressed,{binary:!0,optimizedBinaryString:!0,date:x.date,dir:x.dir,comment:x.fileCommentStr.length?x.fileCommentStr:null,unixPermissions:x.unixPermissions,dosPermissions:x.dosPermissions,createFolders:s.createFolders}),x.dir||(p.file(C).unsafeOriginalName=z)}return h.zipComment.length&&(p.comment=h.zipComment),p})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(a,v,m){var l=a("../utils"),i=a("../stream/GenericWorker");function r(o,b){i.call(this,"Nodejs stream input adapter for "+o),this._upstreamEnded=!1,this._bindStream(b)}l.inherits(r,i),r.prototype._bindStream=function(o){var b=this;(this._stream=o).pause(),o.on("data",function(y){b.push({data:y,meta:{percent:0}})}).on("error",function(y){b.isPaused?this.generatedError=y:b.error(y)}).on("end",function(){b.isPaused?b._upstreamEnded=!0:b.end()})},r.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},r.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},v.exports=r},{"../stream/GenericWorker":28,"../utils":32}],13:[function(a,v,m){var l=a("readable-stream").Readable;function i(r,o,b){l.call(this,o),this._helper=r;var y=this;r.on("data",function(_,d){y.push(_)||y._helper.pause(),b&&b(d)}).on("error",function(_){y.emit("error",_)}).on("end",function(){y.push(null)})}a("../utils").inherits(i,l),i.prototype._read=function(){this._helper.resume()},v.exports=i},{"../utils":32,"readable-stream":16}],14:[function(a,v,m){v.exports={isNode:typeof Buffer<"u",newBufferFrom:function(l,i){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(l,i);if(typeof l=="number")throw new Error('The "data" argument must not be a number');return new Buffer(l,i)},allocBuffer:function(l){if(Buffer.alloc)return Buffer.alloc(l);var i=new Buffer(l);return i.fill(0),i},isBuffer:function(l){return Buffer.isBuffer(l)},isStream:function(l){return l&&typeof l.on=="function"&&typeof l.pause=="function"&&typeof l.resume=="function"}}},{}],15:[function(a,v,m){function l(C,D,T){var P,O=r.getTypeOf(D),W=r.extend(T||{},y);W.date=W.date||new Date,W.compression!==null&&(W.compression=W.compression.toUpperCase()),typeof W.unixPermissions=="string"&&(W.unixPermissions=parseInt(W.unixPermissions,8)),W.unixPermissions&&16384&W.unixPermissions&&(W.dir=!0),W.dosPermissions&&16&W.dosPermissions&&(W.dir=!0),W.dir&&(C=c(C)),W.createFolders&&(P=h(C))&&g.call(this,P,!0);var V=O==="string"&&W.binary===!1&&W.base64===!1;T&&T.binary!==void 0||(W.binary=!V),(D instanceof _&&D.uncompressedSize===0||W.dir||!D||D.length===0)&&(W.base64=!1,W.binary=!0,D="",W.compression="STORE",O="string");var w=null;w=D instanceof _||D instanceof o?D:p.isNode&&p.isStream(D)?new n(C,D):r.prepareContent(C,D,W.binary,W.optimizedBinaryString,W.base64);var R=new d(C,w,W);this.files[C]=R}var i=a("./utf8"),r=a("./utils"),o=a("./stream/GenericWorker"),b=a("./stream/StreamHelper"),y=a("./defaults"),_=a("./compressedObject"),d=a("./zipObject"),s=a("./generate"),p=a("./nodejsUtils"),n=a("./nodejs/NodejsStreamInputAdapter"),h=function(C){C.slice(-1)==="/"&&(C=C.substring(0,C.length-1));var D=C.lastIndexOf("/");return 0<D?C.substring(0,D):""},c=function(C){return C.slice(-1)!=="/"&&(C+="/"),C},g=function(C,D){return D=D!==void 0?D:y.createFolders,C=c(C),this.files[C]||l.call(this,C,null,{dir:!0,createFolders:D}),this.files[C]};function x(C){return Object.prototype.toString.call(C)==="[object RegExp]"}var z={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(C){var D,T,P;for(D in this.files)P=this.files[D],(T=D.slice(this.root.length,D.length))&&D.slice(0,this.root.length)===this.root&&C(T,P)},filter:function(C){var D=[];return this.forEach(function(T,P){C(T,P)&&D.push(P)}),D},file:function(C,D,T){if(arguments.length!==1)return C=this.root+C,l.call(this,C,D,T),this;if(x(C)){var P=C;return this.filter(function(W,V){return!V.dir&&P.test(W)})}var O=this.files[this.root+C];return O&&!O.dir?O:null},folder:function(C){if(!C)return this;if(x(C))return this.filter(function(O,W){return W.dir&&C.test(O)});var D=this.root+C,T=g.call(this,D),P=this.clone();return P.root=T.name,P},remove:function(C){C=this.root+C;var D=this.files[C];if(D||(C.slice(-1)!=="/"&&(C+="/"),D=this.files[C]),D&&!D.dir)delete this.files[C];else for(var T=this.filter(function(O,W){return W.name.slice(0,C.length)===C}),P=0;P<T.length;P++)delete this.files[T[P].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(C){var D,T={};try{if((T=r.extend(C||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:i.utf8encode})).type=T.type.toLowerCase(),T.compression=T.compression.toUpperCase(),T.type==="binarystring"&&(T.type="string"),!T.type)throw new Error("No output type specified.");r.checkSupport(T.type),T.platform!=="darwin"&&T.platform!=="freebsd"&&T.platform!=="linux"&&T.platform!=="sunos"||(T.platform="UNIX"),T.platform==="win32"&&(T.platform="DOS");var P=T.comment||this.comment||"";D=s.generateWorker(this,T,P)}catch(O){(D=new o("error")).error(O)}return new b(D,T.type||"string",T.mimeType)},generateAsync:function(C,D){return this.generateInternalStream(C).accumulate(D)},generateNodeStream:function(C,D){return(C=C||{}).type||(C.type="nodebuffer"),this.generateInternalStream(C).toNodejsStream(D)}};v.exports=z},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(a,v,m){v.exports=a("stream")},{stream:void 0}],17:[function(a,v,m){var l=a("./DataReader");function i(r){l.call(this,r);for(var o=0;o<this.data.length;o++)r[o]=255&r[o]}a("../utils").inherits(i,l),i.prototype.byteAt=function(r){return this.data[this.zero+r]},i.prototype.lastIndexOfSignature=function(r){for(var o=r.charCodeAt(0),b=r.charCodeAt(1),y=r.charCodeAt(2),_=r.charCodeAt(3),d=this.length-4;0<=d;--d)if(this.data[d]===o&&this.data[d+1]===b&&this.data[d+2]===y&&this.data[d+3]===_)return d-this.zero;return-1},i.prototype.readAndCheckSignature=function(r){var o=r.charCodeAt(0),b=r.charCodeAt(1),y=r.charCodeAt(2),_=r.charCodeAt(3),d=this.readData(4);return o===d[0]&&b===d[1]&&y===d[2]&&_===d[3]},i.prototype.readData=function(r){if(this.checkOffset(r),r===0)return[];var o=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,o},v.exports=i},{"../utils":32,"./DataReader":18}],18:[function(a,v,m){var l=a("../utils");function i(r){this.data=r,this.length=r.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(r){this.checkIndex(this.index+r)},checkIndex:function(r){if(this.length<this.zero+r||r<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+r+"). Corrupted zip ?")},setIndex:function(r){this.checkIndex(r),this.index=r},skip:function(r){this.setIndex(this.index+r)},byteAt:function(){},readInt:function(r){var o,b=0;for(this.checkOffset(r),o=this.index+r-1;o>=this.index;o--)b=(b<<8)+this.byteAt(o);return this.index+=r,b},readString:function(r){return l.transformTo("string",this.readData(r))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var r=this.readInt(4);return new Date(Date.UTC(1980+(r>>25&127),(r>>21&15)-1,r>>16&31,r>>11&31,r>>5&63,(31&r)<<1))}},v.exports=i},{"../utils":32}],19:[function(a,v,m){var l=a("./Uint8ArrayReader");function i(r){l.call(this,r)}a("../utils").inherits(i,l),i.prototype.readData=function(r){this.checkOffset(r);var o=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,o},v.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(a,v,m){var l=a("./DataReader");function i(r){l.call(this,r)}a("../utils").inherits(i,l),i.prototype.byteAt=function(r){return this.data.charCodeAt(this.zero+r)},i.prototype.lastIndexOfSignature=function(r){return this.data.lastIndexOf(r)-this.zero},i.prototype.readAndCheckSignature=function(r){return r===this.readData(4)},i.prototype.readData=function(r){this.checkOffset(r);var o=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,o},v.exports=i},{"../utils":32,"./DataReader":18}],21:[function(a,v,m){var l=a("./ArrayReader");function i(r){l.call(this,r)}a("../utils").inherits(i,l),i.prototype.readData=function(r){if(this.checkOffset(r),r===0)return new Uint8Array(0);var o=this.data.subarray(this.zero+this.index,this.zero+this.index+r);return this.index+=r,o},v.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(a,v,m){var l=a("../utils"),i=a("../support"),r=a("./ArrayReader"),o=a("./StringReader"),b=a("./NodeBufferReader"),y=a("./Uint8ArrayReader");v.exports=function(_){var d=l.getTypeOf(_);return l.checkSupport(d),d!=="string"||i.uint8array?d==="nodebuffer"?new b(_):i.uint8array?new y(l.transformTo("uint8array",_)):new r(l.transformTo("array",_)):new o(_)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(a,v,m){m.LOCAL_FILE_HEADER="PK",m.CENTRAL_FILE_HEADER="PK",m.CENTRAL_DIRECTORY_END="PK",m.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",m.ZIP64_CENTRAL_DIRECTORY_END="PK",m.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(a,v,m){var l=a("./GenericWorker"),i=a("../utils");function r(o){l.call(this,"ConvertWorker to "+o),this.destType=o}i.inherits(r,l),r.prototype.processChunk=function(o){this.push({data:i.transformTo(this.destType,o.data),meta:o.meta})},v.exports=r},{"../utils":32,"./GenericWorker":28}],25:[function(a,v,m){var l=a("./GenericWorker"),i=a("../crc32");function r(){l.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}a("../utils").inherits(r,l),r.prototype.processChunk=function(o){this.streamInfo.crc32=i(o.data,this.streamInfo.crc32||0),this.push(o)},v.exports=r},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(a,v,m){var l=a("../utils"),i=a("./GenericWorker");function r(o){i.call(this,"DataLengthProbe for "+o),this.propName=o,this.withStreamInfo(o,0)}l.inherits(r,i),r.prototype.processChunk=function(o){if(o){var b=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=b+o.data.length}i.prototype.processChunk.call(this,o)},v.exports=r},{"../utils":32,"./GenericWorker":28}],27:[function(a,v,m){var l=a("../utils"),i=a("./GenericWorker");function r(o){i.call(this,"DataWorker");var b=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,o.then(function(y){b.dataIsReady=!0,b.data=y,b.max=y&&y.length||0,b.type=l.getTypeOf(y),b.isPaused||b._tickAndRepeat()},function(y){b.error(y)})}l.inherits(r,i),r.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},r.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,l.delay(this._tickAndRepeat,[],this)),!0)},r.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(l.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},r.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var o=null,b=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":o=this.data.substring(this.index,b);break;case"uint8array":o=this.data.subarray(this.index,b);break;case"array":case"nodebuffer":o=this.data.slice(this.index,b)}return this.index=b,this.push({data:o,meta:{percent:this.max?this.index/this.max*100:0}})},v.exports=r},{"../utils":32,"./GenericWorker":28}],28:[function(a,v,m){function l(i){this.name=i||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}l.prototype={push:function(i){this.emit("data",i)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(i){this.emit("error",i)}return!0},error:function(i){return!this.isFinished&&(this.isPaused?this.generatedError=i:(this.isFinished=!0,this.emit("error",i),this.previous&&this.previous.error(i),this.cleanUp()),!0)},on:function(i,r){return this._listeners[i].push(r),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(i,r){if(this._listeners[i])for(var o=0;o<this._listeners[i].length;o++)this._listeners[i][o].call(this,r)},pipe:function(i){return i.registerPrevious(this)},registerPrevious:function(i){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=i.streamInfo,this.mergeStreamInfo(),this.previous=i;var r=this;return i.on("data",function(o){r.processChunk(o)}),i.on("end",function(){r.end()}),i.on("error",function(o){r.error(o)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var i=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),i=!0),this.previous&&this.previous.resume(),!i},flush:function(){},processChunk:function(i){this.push(i)},withStreamInfo:function(i,r){return this.extraStreamInfo[i]=r,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var i in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,i)&&(this.streamInfo[i]=this.extraStreamInfo[i])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var i="Worker "+this.name;return this.previous?this.previous+" -> "+i:i}},v.exports=l},{}],29:[function(a,v,m){var l=a("../utils"),i=a("./ConvertWorker"),r=a("./GenericWorker"),o=a("../base64"),b=a("../support"),y=a("../external"),_=null;if(b.nodestream)try{_=a("../nodejs/NodejsStreamOutputAdapter")}catch{}function d(p,n){return new y.Promise(function(h,c){var g=[],x=p._internalType,z=p._outputType,C=p._mimeType;p.on("data",function(D,T){g.push(D),n&&n(T)}).on("error",function(D){g=[],c(D)}).on("end",function(){try{var D=(function(T,P,O){switch(T){case"blob":return l.newBlob(l.transformTo("arraybuffer",P),O);case"base64":return o.encode(P);default:return l.transformTo(T,P)}})(z,(function(T,P){var O,W=0,V=null,w=0;for(O=0;O<P.length;O++)w+=P[O].length;switch(T){case"string":return P.join("");case"array":return Array.prototype.concat.apply([],P);case"uint8array":for(V=new Uint8Array(w),O=0;O<P.length;O++)V.set(P[O],W),W+=P[O].length;return V;case"nodebuffer":return Buffer.concat(P);default:throw new Error("concat : unsupported type '"+T+"'")}})(x,g),C);h(D)}catch(T){c(T)}g=[]}).resume()})}function s(p,n,h){var c=n;switch(n){case"blob":case"arraybuffer":c="uint8array";break;case"base64":c="string"}try{this._internalType=c,this._outputType=n,this._mimeType=h,l.checkSupport(c),this._worker=p.pipe(new i(c)),p.lock()}catch(g){this._worker=new r("error"),this._worker.error(g)}}s.prototype={accumulate:function(p){return d(this,p)},on:function(p,n){var h=this;return p==="data"?this._worker.on(p,function(c){n.call(h,c.data,c.meta)}):this._worker.on(p,function(){l.delay(n,arguments,h)}),this},resume:function(){return l.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(p){if(l.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new _(this,{objectMode:this._outputType!=="nodebuffer"},p)}},v.exports=s},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(a,v,m){if(m.base64=!0,m.array=!0,m.string=!0,m.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",m.nodebuffer=typeof Buffer<"u",m.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")m.blob=!1;else{var l=new ArrayBuffer(0);try{m.blob=new Blob([l],{type:"application/zip"}).size===0}catch{try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(l),m.blob=i.getBlob("application/zip").size===0}catch{m.blob=!1}}}try{m.nodestream=!!a("readable-stream").Readable}catch{m.nodestream=!1}},{"readable-stream":16}],31:[function(a,v,m){for(var l=a("./utils"),i=a("./support"),r=a("./nodejsUtils"),o=a("./stream/GenericWorker"),b=new Array(256),y=0;y<256;y++)b[y]=252<=y?6:248<=y?5:240<=y?4:224<=y?3:192<=y?2:1;b[254]=b[254]=1;function _(){o.call(this,"utf-8 decode"),this.leftOver=null}function d(){o.call(this,"utf-8 encode")}m.utf8encode=function(s){return i.nodebuffer?r.newBufferFrom(s,"utf-8"):(function(p){var n,h,c,g,x,z=p.length,C=0;for(g=0;g<z;g++)(64512&(h=p.charCodeAt(g)))==55296&&g+1<z&&(64512&(c=p.charCodeAt(g+1)))==56320&&(h=65536+(h-55296<<10)+(c-56320),g++),C+=h<128?1:h<2048?2:h<65536?3:4;for(n=i.uint8array?new Uint8Array(C):new Array(C),g=x=0;x<C;g++)(64512&(h=p.charCodeAt(g)))==55296&&g+1<z&&(64512&(c=p.charCodeAt(g+1)))==56320&&(h=65536+(h-55296<<10)+(c-56320),g++),h<128?n[x++]=h:(h<2048?n[x++]=192|h>>>6:(h<65536?n[x++]=224|h>>>12:(n[x++]=240|h>>>18,n[x++]=128|h>>>12&63),n[x++]=128|h>>>6&63),n[x++]=128|63&h);return n})(s)},m.utf8decode=function(s){return i.nodebuffer?l.transformTo("nodebuffer",s).toString("utf-8"):(function(p){var n,h,c,g,x=p.length,z=new Array(2*x);for(n=h=0;n<x;)if((c=p[n++])<128)z[h++]=c;else if(4<(g=b[c]))z[h++]=65533,n+=g-1;else{for(c&=g===2?31:g===3?15:7;1<g&&n<x;)c=c<<6|63&p[n++],g--;1<g?z[h++]=65533:c<65536?z[h++]=c:(c-=65536,z[h++]=55296|c>>10&1023,z[h++]=56320|1023&c)}return z.length!==h&&(z.subarray?z=z.subarray(0,h):z.length=h),l.applyFromCharCode(z)})(s=l.transformTo(i.uint8array?"uint8array":"array",s))},l.inherits(_,o),_.prototype.processChunk=function(s){var p=l.transformTo(i.uint8array?"uint8array":"array",s.data);if(this.leftOver&&this.leftOver.length){if(i.uint8array){var n=p;(p=new Uint8Array(n.length+this.leftOver.length)).set(this.leftOver,0),p.set(n,this.leftOver.length)}else p=this.leftOver.concat(p);this.leftOver=null}var h=(function(g,x){var z;for((x=x||g.length)>g.length&&(x=g.length),z=x-1;0<=z&&(192&g[z])==128;)z--;return z<0||z===0?x:z+b[g[z]]>x?z:x})(p),c=p;h!==p.length&&(i.uint8array?(c=p.subarray(0,h),this.leftOver=p.subarray(h,p.length)):(c=p.slice(0,h),this.leftOver=p.slice(h,p.length))),this.push({data:m.utf8decode(c),meta:s.meta})},_.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:m.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},m.Utf8DecodeWorker=_,l.inherits(d,o),d.prototype.processChunk=function(s){this.push({data:m.utf8encode(s.data),meta:s.meta})},m.Utf8EncodeWorker=d},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(a,v,m){var l=a("./support"),i=a("./base64"),r=a("./nodejsUtils"),o=a("./external");function b(n){return n}function y(n,h){for(var c=0;c<n.length;++c)h[c]=255&n.charCodeAt(c);return h}a("setimmediate"),m.newBlob=function(n,h){m.checkSupport("blob");try{return new Blob([n],{type:h})}catch{try{var c=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return c.append(n),c.getBlob(h)}catch{throw new Error("Bug : can't construct the Blob.")}}};var _={stringifyByChunk:function(n,h,c){var g=[],x=0,z=n.length;if(z<=c)return String.fromCharCode.apply(null,n);for(;x<z;)h==="array"||h==="nodebuffer"?g.push(String.fromCharCode.apply(null,n.slice(x,Math.min(x+c,z)))):g.push(String.fromCharCode.apply(null,n.subarray(x,Math.min(x+c,z)))),x+=c;return g.join("")},stringifyByChar:function(n){for(var h="",c=0;c<n.length;c++)h+=String.fromCharCode(n[c]);return h},applyCanBeUsed:{uint8array:(function(){try{return l.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}})(),nodebuffer:(function(){try{return l.nodebuffer&&String.fromCharCode.apply(null,r.allocBuffer(1)).length===1}catch{return!1}})()}};function d(n){var h=65536,c=m.getTypeOf(n),g=!0;if(c==="uint8array"?g=_.applyCanBeUsed.uint8array:c==="nodebuffer"&&(g=_.applyCanBeUsed.nodebuffer),g)for(;1<h;)try{return _.stringifyByChunk(n,c,h)}catch{h=Math.floor(h/2)}return _.stringifyByChar(n)}function s(n,h){for(var c=0;c<n.length;c++)h[c]=n[c];return h}m.applyFromCharCode=d;var p={};p.string={string:b,array:function(n){return y(n,new Array(n.length))},arraybuffer:function(n){return p.string.uint8array(n).buffer},uint8array:function(n){return y(n,new Uint8Array(n.length))},nodebuffer:function(n){return y(n,r.allocBuffer(n.length))}},p.array={string:d,array:b,arraybuffer:function(n){return new Uint8Array(n).buffer},uint8array:function(n){return new Uint8Array(n)},nodebuffer:function(n){return r.newBufferFrom(n)}},p.arraybuffer={string:function(n){return d(new Uint8Array(n))},array:function(n){return s(new Uint8Array(n),new Array(n.byteLength))},arraybuffer:b,uint8array:function(n){return new Uint8Array(n)},nodebuffer:function(n){return r.newBufferFrom(new Uint8Array(n))}},p.uint8array={string:d,array:function(n){return s(n,new Array(n.length))},arraybuffer:function(n){return n.buffer},uint8array:b,nodebuffer:function(n){return r.newBufferFrom(n)}},p.nodebuffer={string:d,array:function(n){return s(n,new Array(n.length))},arraybuffer:function(n){return p.nodebuffer.uint8array(n).buffer},uint8array:function(n){return s(n,new Uint8Array(n.length))},nodebuffer:b},m.transformTo=function(n,h){if(h=h||"",!n)return h;m.checkSupport(n);var c=m.getTypeOf(h);return p[c][n](h)},m.resolve=function(n){for(var h=n.split("/"),c=[],g=0;g<h.length;g++){var x=h[g];x==="."||x===""&&g!==0&&g!==h.length-1||(x===".."?c.pop():c.push(x))}return c.join("/")},m.getTypeOf=function(n){return typeof n=="string"?"string":Object.prototype.toString.call(n)==="[object Array]"?"array":l.nodebuffer&&r.isBuffer(n)?"nodebuffer":l.uint8array&&n instanceof Uint8Array?"uint8array":l.arraybuffer&&n instanceof ArrayBuffer?"arraybuffer":void 0},m.checkSupport=function(n){if(!l[n.toLowerCase()])throw new Error(n+" is not supported by this platform")},m.MAX_VALUE_16BITS=65535,m.MAX_VALUE_32BITS=-1,m.pretty=function(n){var h,c,g="";for(c=0;c<(n||"").length;c++)g+="\\x"+((h=n.charCodeAt(c))<16?"0":"")+h.toString(16).toUpperCase();return g},m.delay=function(n,h,c){setImmediate(function(){n.apply(c||null,h||[])})},m.inherits=function(n,h){function c(){}c.prototype=h.prototype,n.prototype=new c},m.extend=function(){var n,h,c={};for(n=0;n<arguments.length;n++)for(h in arguments[n])Object.prototype.hasOwnProperty.call(arguments[n],h)&&c[h]===void 0&&(c[h]=arguments[n][h]);return c},m.prepareContent=function(n,h,c,g,x){return o.Promise.resolve(h).then(function(z){return l.blob&&(z instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(z))!==-1)&&typeof FileReader<"u"?new o.Promise(function(C,D){var T=new FileReader;T.onload=function(P){C(P.target.result)},T.onerror=function(P){D(P.target.error)},T.readAsArrayBuffer(z)}):z}).then(function(z){var C=m.getTypeOf(z);return C?(C==="arraybuffer"?z=m.transformTo("uint8array",z):C==="string"&&(x?z=i.decode(z):c&&g!==!0&&(z=(function(D){return y(D,l.uint8array?new Uint8Array(D.length):new Array(D.length))})(z))),z):o.Promise.reject(new Error("Can't read the data of '"+n+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(a,v,m){var l=a("./reader/readerFor"),i=a("./utils"),r=a("./signature"),o=a("./zipEntry"),b=a("./support");function y(_){this.files=[],this.loadOptions=_}y.prototype={checkSignature:function(_){if(!this.reader.readAndCheckSignature(_)){this.reader.index-=4;var d=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+i.pretty(d)+", expected "+i.pretty(_)+")")}},isSignature:function(_,d){var s=this.reader.index;this.reader.setIndex(_);var p=this.reader.readString(4)===d;return this.reader.setIndex(s),p},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var _=this.reader.readData(this.zipCommentLength),d=b.uint8array?"uint8array":"array",s=i.transformTo(d,_);this.zipComment=this.loadOptions.decodeFileName(s)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var _,d,s,p=this.zip64EndOfCentralSize-44;0<p;)_=this.reader.readInt(2),d=this.reader.readInt(4),s=this.reader.readData(d),this.zip64ExtensibleData[_]={id:_,length:d,value:s}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var _,d;for(_=0;_<this.files.length;_++)d=this.files[_],this.reader.setIndex(d.localHeaderOffset),this.checkSignature(r.LOCAL_FILE_HEADER),d.readLocalPart(this.reader),d.handleUTF8(),d.processAttributes()},readCentralDir:function(){var _;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(r.CENTRAL_FILE_HEADER);)(_=new o({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(_);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var _=this.reader.lastIndexOfSignature(r.CENTRAL_DIRECTORY_END);if(_<0)throw this.isSignature(0,r.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(_);var d=_;if(this.checkSignature(r.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(_=this.reader.lastIndexOfSignature(r.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(_),this.checkSignature(r.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,r.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(r.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(r.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var s=this.centralDirOffset+this.centralDirSize;this.zip64&&(s+=20,s+=12+this.zip64EndOfCentralSize);var p=d-s;if(0<p)this.isSignature(d,r.CENTRAL_FILE_HEADER)||(this.reader.zero=p);else if(p<0)throw new Error("Corrupted zip: missing "+Math.abs(p)+" bytes.")},prepareReader:function(_){this.reader=l(_)},load:function(_){this.prepareReader(_),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},v.exports=y},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(a,v,m){var l=a("./reader/readerFor"),i=a("./utils"),r=a("./compressedObject"),o=a("./crc32"),b=a("./utf8"),y=a("./compressions"),_=a("./support");function d(s,p){this.options=s,this.loadOptions=p}d.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(s){var p,n;if(s.skip(22),this.fileNameLength=s.readInt(2),n=s.readInt(2),this.fileName=s.readData(this.fileNameLength),s.skip(n),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((p=(function(h){for(var c in y)if(Object.prototype.hasOwnProperty.call(y,c)&&y[c].magic===h)return y[c];return null})(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+i.pretty(this.compressionMethod)+" unknown (inner file : "+i.transformTo("string",this.fileName)+")");this.decompressed=new r(this.compressedSize,this.uncompressedSize,this.crc32,p,s.readData(this.compressedSize))},readCentralPart:function(s){this.versionMadeBy=s.readInt(2),s.skip(2),this.bitFlag=s.readInt(2),this.compressionMethod=s.readString(2),this.date=s.readDate(),this.crc32=s.readInt(4),this.compressedSize=s.readInt(4),this.uncompressedSize=s.readInt(4);var p=s.readInt(2);if(this.extraFieldsLength=s.readInt(2),this.fileCommentLength=s.readInt(2),this.diskNumberStart=s.readInt(2),this.internalFileAttributes=s.readInt(2),this.externalFileAttributes=s.readInt(4),this.localHeaderOffset=s.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");s.skip(p),this.readExtraFields(s),this.parseZIP64ExtraField(s),this.fileComment=s.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var s=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),s==0&&(this.dosPermissions=63&this.externalFileAttributes),s==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var s=l(this.extraFields[1].value);this.uncompressedSize===i.MAX_VALUE_32BITS&&(this.uncompressedSize=s.readInt(8)),this.compressedSize===i.MAX_VALUE_32BITS&&(this.compressedSize=s.readInt(8)),this.localHeaderOffset===i.MAX_VALUE_32BITS&&(this.localHeaderOffset=s.readInt(8)),this.diskNumberStart===i.MAX_VALUE_32BITS&&(this.diskNumberStart=s.readInt(4))}},readExtraFields:function(s){var p,n,h,c=s.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});s.index+4<c;)p=s.readInt(2),n=s.readInt(2),h=s.readData(n),this.extraFields[p]={id:p,length:n,value:h};s.setIndex(c)},handleUTF8:function(){var s=_.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=b.utf8decode(this.fileName),this.fileCommentStr=b.utf8decode(this.fileComment);else{var p=this.findExtraFieldUnicodePath();if(p!==null)this.fileNameStr=p;else{var n=i.transformTo(s,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(n)}var h=this.findExtraFieldUnicodeComment();if(h!==null)this.fileCommentStr=h;else{var c=i.transformTo(s,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(c)}}},findExtraFieldUnicodePath:function(){var s=this.extraFields[28789];if(s){var p=l(s.value);return p.readInt(1)!==1||o(this.fileName)!==p.readInt(4)?null:b.utf8decode(p.readData(s.length-5))}return null},findExtraFieldUnicodeComment:function(){var s=this.extraFields[25461];if(s){var p=l(s.value);return p.readInt(1)!==1||o(this.fileComment)!==p.readInt(4)?null:b.utf8decode(p.readData(s.length-5))}return null}},v.exports=d},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(a,v,m){function l(p,n,h){this.name=p,this.dir=h.dir,this.date=h.date,this.comment=h.comment,this.unixPermissions=h.unixPermissions,this.dosPermissions=h.dosPermissions,this._data=n,this._dataBinary=h.binary,this.options={compression:h.compression,compressionOptions:h.compressionOptions}}var i=a("./stream/StreamHelper"),r=a("./stream/DataWorker"),o=a("./utf8"),b=a("./compressedObject"),y=a("./stream/GenericWorker");l.prototype={internalStream:function(p){var n=null,h="string";try{if(!p)throw new Error("No output type specified.");var c=(h=p.toLowerCase())==="string"||h==="text";h!=="binarystring"&&h!=="text"||(h="string"),n=this._decompressWorker();var g=!this._dataBinary;g&&!c&&(n=n.pipe(new o.Utf8EncodeWorker)),!g&&c&&(n=n.pipe(new o.Utf8DecodeWorker))}catch(x){(n=new y("error")).error(x)}return new i(n,h,"")},async:function(p,n){return this.internalStream(p).accumulate(n)},nodeStream:function(p,n){return this.internalStream(p||"nodebuffer").toNodejsStream(n)},_compressWorker:function(p,n){if(this._data instanceof b&&this._data.compression.magic===p.magic)return this._data.getCompressedWorker();var h=this._decompressWorker();return this._dataBinary||(h=h.pipe(new o.Utf8EncodeWorker)),b.createWorkerFrom(h,p,n)},_decompressWorker:function(){return this._data instanceof b?this._data.getContentWorker():this._data instanceof y?this._data:new r(this._data)}};for(var _=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],d=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},s=0;s<_.length;s++)l.prototype[_[s]]=d;v.exports=l},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(a,v,m){(function(l){var i,r,o=l.MutationObserver||l.WebKitMutationObserver;if(o){var b=0,y=new o(p),_=l.document.createTextNode("");y.observe(_,{characterData:!0}),i=function(){_.data=b=++b%2}}else if(l.setImmediate||l.MessageChannel===void 0)i="document"in l&&"onreadystatechange"in l.document.createElement("script")?function(){var n=l.document.createElement("script");n.onreadystatechange=function(){p(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},l.document.documentElement.appendChild(n)}:function(){setTimeout(p,0)};else{var d=new l.MessageChannel;d.port1.onmessage=p,i=function(){d.port2.postMessage(0)}}var s=[];function p(){var n,h;r=!0;for(var c=s.length;c;){for(h=s,s=[],n=-1;++n<c;)h[n]();c=s.length}r=!1}v.exports=function(n){s.push(n)!==1||r||i()}}).call(this,typeof xt<"u"?xt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(a,v,m){var l=a("immediate");function i(){}var r={},o=["REJECTED"],b=["FULFILLED"],y=["PENDING"];function _(c){if(typeof c!="function")throw new TypeError("resolver must be a function");this.state=y,this.queue=[],this.outcome=void 0,c!==i&&n(this,c)}function d(c,g,x){this.promise=c,typeof g=="function"&&(this.onFulfilled=g,this.callFulfilled=this.otherCallFulfilled),typeof x=="function"&&(this.onRejected=x,this.callRejected=this.otherCallRejected)}function s(c,g,x){l(function(){var z;try{z=g(x)}catch(C){return r.reject(c,C)}z===c?r.reject(c,new TypeError("Cannot resolve promise with itself")):r.resolve(c,z)})}function p(c){var g=c&&c.then;if(c&&(typeof c=="object"||typeof c=="function")&&typeof g=="function")return function(){g.apply(c,arguments)}}function n(c,g){var x=!1;function z(T){x||(x=!0,r.reject(c,T))}function C(T){x||(x=!0,r.resolve(c,T))}var D=h(function(){g(C,z)});D.status==="error"&&z(D.value)}function h(c,g){var x={};try{x.value=c(g),x.status="success"}catch(z){x.status="error",x.value=z}return x}(v.exports=_).prototype.finally=function(c){if(typeof c!="function")return this;var g=this.constructor;return this.then(function(x){return g.resolve(c()).then(function(){return x})},function(x){return g.resolve(c()).then(function(){throw x})})},_.prototype.catch=function(c){return this.then(null,c)},_.prototype.then=function(c,g){if(typeof c!="function"&&this.state===b||typeof g!="function"&&this.state===o)return this;var x=new this.constructor(i);return this.state!==y?s(x,this.state===b?c:g,this.outcome):this.queue.push(new d(x,c,g)),x},d.prototype.callFulfilled=function(c){r.resolve(this.promise,c)},d.prototype.otherCallFulfilled=function(c){s(this.promise,this.onFulfilled,c)},d.prototype.callRejected=function(c){r.reject(this.promise,c)},d.prototype.otherCallRejected=function(c){s(this.promise,this.onRejected,c)},r.resolve=function(c,g){var x=h(p,g);if(x.status==="error")return r.reject(c,x.value);var z=x.value;if(z)n(c,z);else{c.state=b,c.outcome=g;for(var C=-1,D=c.queue.length;++C<D;)c.queue[C].callFulfilled(g)}return c},r.reject=function(c,g){c.state=o,c.outcome=g;for(var x=-1,z=c.queue.length;++x<z;)c.queue[x].callRejected(g);return c},_.resolve=function(c){return c instanceof this?c:r.resolve(new this(i),c)},_.reject=function(c){var g=new this(i);return r.reject(g,c)},_.all=function(c){var g=this;if(Object.prototype.toString.call(c)!=="[object Array]")return this.reject(new TypeError("must be an array"));var x=c.length,z=!1;if(!x)return this.resolve([]);for(var C=new Array(x),D=0,T=-1,P=new this(i);++T<x;)O(c[T],T);return P;function O(W,V){g.resolve(W).then(function(w){C[V]=w,++D!==x||z||(z=!0,r.resolve(P,C))},function(w){z||(z=!0,r.reject(P,w))})}},_.race=function(c){var g=this;if(Object.prototype.toString.call(c)!=="[object Array]")return this.reject(new TypeError("must be an array"));var x=c.length,z=!1;if(!x)return this.resolve([]);for(var C=-1,D=new this(i);++C<x;)T=c[C],g.resolve(T).then(function(P){z||(z=!0,r.resolve(D,P))},function(P){z||(z=!0,r.reject(D,P))});var T;return D}},{immediate:36}],38:[function(a,v,m){var l={};(0,a("./lib/utils/common").assign)(l,a("./lib/deflate"),a("./lib/inflate"),a("./lib/zlib/constants")),v.exports=l},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(a,v,m){var l=a("./zlib/deflate"),i=a("./utils/common"),r=a("./utils/strings"),o=a("./zlib/messages"),b=a("./zlib/zstream"),y=Object.prototype.toString,_=0,d=-1,s=0,p=8;function n(c){if(!(this instanceof n))return new n(c);this.options=i.assign({level:d,method:p,chunkSize:16384,windowBits:15,memLevel:8,strategy:s,to:""},c||{});var g=this.options;g.raw&&0<g.windowBits?g.windowBits=-g.windowBits:g.gzip&&0<g.windowBits&&g.windowBits<16&&(g.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new b,this.strm.avail_out=0;var x=l.deflateInit2(this.strm,g.level,g.method,g.windowBits,g.memLevel,g.strategy);if(x!==_)throw new Error(o[x]);if(g.header&&l.deflateSetHeader(this.strm,g.header),g.dictionary){var z;if(z=typeof g.dictionary=="string"?r.string2buf(g.dictionary):y.call(g.dictionary)==="[object ArrayBuffer]"?new Uint8Array(g.dictionary):g.dictionary,(x=l.deflateSetDictionary(this.strm,z))!==_)throw new Error(o[x]);this._dict_set=!0}}function h(c,g){var x=new n(g);if(x.push(c,!0),x.err)throw x.msg||o[x.err];return x.result}n.prototype.push=function(c,g){var x,z,C=this.strm,D=this.options.chunkSize;if(this.ended)return!1;z=g===~~g?g:g===!0?4:0,typeof c=="string"?C.input=r.string2buf(c):y.call(c)==="[object ArrayBuffer]"?C.input=new Uint8Array(c):C.input=c,C.next_in=0,C.avail_in=C.input.length;do{if(C.avail_out===0&&(C.output=new i.Buf8(D),C.next_out=0,C.avail_out=D),(x=l.deflate(C,z))!==1&&x!==_)return this.onEnd(x),!(this.ended=!0);C.avail_out!==0&&(C.avail_in!==0||z!==4&&z!==2)||(this.options.to==="string"?this.onData(r.buf2binstring(i.shrinkBuf(C.output,C.next_out))):this.onData(i.shrinkBuf(C.output,C.next_out)))}while((0<C.avail_in||C.avail_out===0)&&x!==1);return z===4?(x=l.deflateEnd(this.strm),this.onEnd(x),this.ended=!0,x===_):z!==2||(this.onEnd(_),!(C.avail_out=0))},n.prototype.onData=function(c){this.chunks.push(c)},n.prototype.onEnd=function(c){c===_&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=c,this.msg=this.strm.msg},m.Deflate=n,m.deflate=h,m.deflateRaw=function(c,g){return(g=g||{}).raw=!0,h(c,g)},m.gzip=function(c,g){return(g=g||{}).gzip=!0,h(c,g)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(a,v,m){var l=a("./zlib/inflate"),i=a("./utils/common"),r=a("./utils/strings"),o=a("./zlib/constants"),b=a("./zlib/messages"),y=a("./zlib/zstream"),_=a("./zlib/gzheader"),d=Object.prototype.toString;function s(n){if(!(this instanceof s))return new s(n);this.options=i.assign({chunkSize:16384,windowBits:0,to:""},n||{});var h=this.options;h.raw&&0<=h.windowBits&&h.windowBits<16&&(h.windowBits=-h.windowBits,h.windowBits===0&&(h.windowBits=-15)),!(0<=h.windowBits&&h.windowBits<16)||n&&n.windowBits||(h.windowBits+=32),15<h.windowBits&&h.windowBits<48&&(15&h.windowBits)==0&&(h.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new y,this.strm.avail_out=0;var c=l.inflateInit2(this.strm,h.windowBits);if(c!==o.Z_OK)throw new Error(b[c]);this.header=new _,l.inflateGetHeader(this.strm,this.header)}function p(n,h){var c=new s(h);if(c.push(n,!0),c.err)throw c.msg||b[c.err];return c.result}s.prototype.push=function(n,h){var c,g,x,z,C,D,T=this.strm,P=this.options.chunkSize,O=this.options.dictionary,W=!1;if(this.ended)return!1;g=h===~~h?h:h===!0?o.Z_FINISH:o.Z_NO_FLUSH,typeof n=="string"?T.input=r.binstring2buf(n):d.call(n)==="[object ArrayBuffer]"?T.input=new Uint8Array(n):T.input=n,T.next_in=0,T.avail_in=T.input.length;do{if(T.avail_out===0&&(T.output=new i.Buf8(P),T.next_out=0,T.avail_out=P),(c=l.inflate(T,o.Z_NO_FLUSH))===o.Z_NEED_DICT&&O&&(D=typeof O=="string"?r.string2buf(O):d.call(O)==="[object ArrayBuffer]"?new Uint8Array(O):O,c=l.inflateSetDictionary(this.strm,D)),c===o.Z_BUF_ERROR&&W===!0&&(c=o.Z_OK,W=!1),c!==o.Z_STREAM_END&&c!==o.Z_OK)return this.onEnd(c),!(this.ended=!0);T.next_out&&(T.avail_out!==0&&c!==o.Z_STREAM_END&&(T.avail_in!==0||g!==o.Z_FINISH&&g!==o.Z_SYNC_FLUSH)||(this.options.to==="string"?(x=r.utf8border(T.output,T.next_out),z=T.next_out-x,C=r.buf2string(T.output,x),T.next_out=z,T.avail_out=P-z,z&&i.arraySet(T.output,T.output,x,z,0),this.onData(C)):this.onData(i.shrinkBuf(T.output,T.next_out)))),T.avail_in===0&&T.avail_out===0&&(W=!0)}while((0<T.avail_in||T.avail_out===0)&&c!==o.Z_STREAM_END);return c===o.Z_STREAM_END&&(g=o.Z_FINISH),g===o.Z_FINISH?(c=l.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===o.Z_OK):g!==o.Z_SYNC_FLUSH||(this.onEnd(o.Z_OK),!(T.avail_out=0))},s.prototype.onData=function(n){this.chunks.push(n)},s.prototype.onEnd=function(n){n===o.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=n,this.msg=this.strm.msg},m.Inflate=s,m.inflate=p,m.inflateRaw=function(n,h){return(h=h||{}).raw=!0,p(n,h)},m.ungzip=p},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(a,v,m){var l=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";m.assign=function(o){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var y=b.shift();if(y){if(typeof y!="object")throw new TypeError(y+"must be non-object");for(var _ in y)y.hasOwnProperty(_)&&(o[_]=y[_])}}return o},m.shrinkBuf=function(o,b){return o.length===b?o:o.subarray?o.subarray(0,b):(o.length=b,o)};var i={arraySet:function(o,b,y,_,d){if(b.subarray&&o.subarray)o.set(b.subarray(y,y+_),d);else for(var s=0;s<_;s++)o[d+s]=b[y+s]},flattenChunks:function(o){var b,y,_,d,s,p;for(b=_=0,y=o.length;b<y;b++)_+=o[b].length;for(p=new Uint8Array(_),b=d=0,y=o.length;b<y;b++)s=o[b],p.set(s,d),d+=s.length;return p}},r={arraySet:function(o,b,y,_,d){for(var s=0;s<_;s++)o[d+s]=b[y+s]},flattenChunks:function(o){return[].concat.apply([],o)}};m.setTyped=function(o){o?(m.Buf8=Uint8Array,m.Buf16=Uint16Array,m.Buf32=Int32Array,m.assign(m,i)):(m.Buf8=Array,m.Buf16=Array,m.Buf32=Array,m.assign(m,r))},m.setTyped(l)},{}],42:[function(a,v,m){var l=a("./common"),i=!0,r=!0;try{String.fromCharCode.apply(null,[0])}catch{i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{r=!1}for(var o=new l.Buf8(256),b=0;b<256;b++)o[b]=252<=b?6:248<=b?5:240<=b?4:224<=b?3:192<=b?2:1;function y(_,d){if(d<65537&&(_.subarray&&r||!_.subarray&&i))return String.fromCharCode.apply(null,l.shrinkBuf(_,d));for(var s="",p=0;p<d;p++)s+=String.fromCharCode(_[p]);return s}o[254]=o[254]=1,m.string2buf=function(_){var d,s,p,n,h,c=_.length,g=0;for(n=0;n<c;n++)(64512&(s=_.charCodeAt(n)))==55296&&n+1<c&&(64512&(p=_.charCodeAt(n+1)))==56320&&(s=65536+(s-55296<<10)+(p-56320),n++),g+=s<128?1:s<2048?2:s<65536?3:4;for(d=new l.Buf8(g),n=h=0;h<g;n++)(64512&(s=_.charCodeAt(n)))==55296&&n+1<c&&(64512&(p=_.charCodeAt(n+1)))==56320&&(s=65536+(s-55296<<10)+(p-56320),n++),s<128?d[h++]=s:(s<2048?d[h++]=192|s>>>6:(s<65536?d[h++]=224|s>>>12:(d[h++]=240|s>>>18,d[h++]=128|s>>>12&63),d[h++]=128|s>>>6&63),d[h++]=128|63&s);return d},m.buf2binstring=function(_){return y(_,_.length)},m.binstring2buf=function(_){for(var d=new l.Buf8(_.length),s=0,p=d.length;s<p;s++)d[s]=_.charCodeAt(s);return d},m.buf2string=function(_,d){var s,p,n,h,c=d||_.length,g=new Array(2*c);for(s=p=0;s<c;)if((n=_[s++])<128)g[p++]=n;else if(4<(h=o[n]))g[p++]=65533,s+=h-1;else{for(n&=h===2?31:h===3?15:7;1<h&&s<c;)n=n<<6|63&_[s++],h--;1<h?g[p++]=65533:n<65536?g[p++]=n:(n-=65536,g[p++]=55296|n>>10&1023,g[p++]=56320|1023&n)}return y(g,p)},m.utf8border=function(_,d){var s;for((d=d||_.length)>_.length&&(d=_.length),s=d-1;0<=s&&(192&_[s])==128;)s--;return s<0||s===0?d:s+o[_[s]]>d?s:d}},{"./common":41}],43:[function(a,v,m){v.exports=function(l,i,r,o){for(var b=65535&l|0,y=l>>>16&65535|0,_=0;r!==0;){for(r-=_=2e3<r?2e3:r;y=y+(b=b+i[o++]|0)|0,--_;);b%=65521,y%=65521}return b|y<<16|0}},{}],44:[function(a,v,m){v.exports={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,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,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,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(a,v,m){var l=(function(){for(var i,r=[],o=0;o<256;o++){i=o;for(var b=0;b<8;b++)i=1&i?3988292384^i>>>1:i>>>1;r[o]=i}return r})();v.exports=function(i,r,o,b){var y=l,_=b+o;i^=-1;for(var d=b;d<_;d++)i=i>>>8^y[255&(i^r[d])];return-1^i}},{}],46:[function(a,v,m){var l,i=a("../utils/common"),r=a("./trees"),o=a("./adler32"),b=a("./crc32"),y=a("./messages"),_=0,d=4,s=0,p=-2,n=-1,h=4,c=2,g=8,x=9,z=286,C=30,D=19,T=2*z+1,P=15,O=3,W=258,V=W+O+1,w=42,R=113,e=1,N=2,tt=3,U=4;function et(t,F){return t.msg=y[F],F}function X(t){return(t<<1)-(4<t?9:0)}function J(t){for(var F=t.length;0<=--F;)t[F]=0}function B(t){var F=t.state,I=F.pending;I>t.avail_out&&(I=t.avail_out),I!==0&&(i.arraySet(t.output,F.pending_buf,F.pending_out,I,t.next_out),t.next_out+=I,F.pending_out+=I,t.total_out+=I,t.avail_out-=I,F.pending-=I,F.pending===0&&(F.pending_out=0))}function A(t,F){r._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,F),t.block_start=t.strstart,B(t.strm)}function K(t,F){t.pending_buf[t.pending++]=F}function H(t,F){t.pending_buf[t.pending++]=F>>>8&255,t.pending_buf[t.pending++]=255&F}function $(t,F){var I,f,u=t.max_chain_length,S=t.strstart,L=t.prev_length,j=t.nice_match,E=t.strstart>t.w_size-V?t.strstart-(t.w_size-V):0,Z=t.window,q=t.w_mask,Y=t.prev,Q=t.strstart+W,lt=Z[S+L-1],st=Z[S+L];t.prev_length>=t.good_match&&(u>>=2),j>t.lookahead&&(j=t.lookahead);do if(Z[(I=F)+L]===st&&Z[I+L-1]===lt&&Z[I]===Z[S]&&Z[++I]===Z[S+1]){S+=2,I++;do;while(Z[++S]===Z[++I]&&Z[++S]===Z[++I]&&Z[++S]===Z[++I]&&Z[++S]===Z[++I]&&Z[++S]===Z[++I]&&Z[++S]===Z[++I]&&Z[++S]===Z[++I]&&Z[++S]===Z[++I]&&S<Q);if(f=W-(Q-S),S=Q-W,L<f){if(t.match_start=F,j<=(L=f))break;lt=Z[S+L-1],st=Z[S+L]}}while((F=Y[F&q])>E&&--u!=0);return L<=t.lookahead?L:t.lookahead}function ut(t){var F,I,f,u,S,L,j,E,Z,q,Y=t.w_size;do{if(u=t.window_size-t.lookahead-t.strstart,t.strstart>=Y+(Y-V)){for(i.arraySet(t.window,t.window,Y,Y,0),t.match_start-=Y,t.strstart-=Y,t.block_start-=Y,F=I=t.hash_size;f=t.head[--F],t.head[F]=Y<=f?f-Y:0,--I;);for(F=I=Y;f=t.prev[--F],t.prev[F]=Y<=f?f-Y:0,--I;);u+=Y}if(t.strm.avail_in===0)break;if(L=t.strm,j=t.window,E=t.strstart+t.lookahead,Z=u,q=void 0,q=L.avail_in,Z<q&&(q=Z),I=q===0?0:(L.avail_in-=q,i.arraySet(j,L.input,L.next_in,q,E),L.state.wrap===1?L.adler=o(L.adler,j,q,E):L.state.wrap===2&&(L.adler=b(L.adler,j,q,E)),L.next_in+=q,L.total_in+=q,q),t.lookahead+=I,t.lookahead+t.insert>=O)for(S=t.strstart-t.insert,t.ins_h=t.window[S],t.ins_h=(t.ins_h<<t.hash_shift^t.window[S+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[S+O-1])&t.hash_mask,t.prev[S&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=S,S++,t.insert--,!(t.lookahead+t.insert<O)););}while(t.lookahead<V&&t.strm.avail_in!==0)}function dt(t,F){for(var I,f;;){if(t.lookahead<V){if(ut(t),t.lookahead<V&&F===_)return e;if(t.lookahead===0)break}if(I=0,t.lookahead>=O&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+O-1])&t.hash_mask,I=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),I!==0&&t.strstart-I<=t.w_size-V&&(t.match_length=$(t,I)),t.match_length>=O)if(f=r._tr_tally(t,t.strstart-t.match_start,t.match_length-O),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=O){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+O-1])&t.hash_mask,I=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart,--t.match_length!=0;);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else f=r._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(f&&(A(t,!1),t.strm.avail_out===0))return e}return t.insert=t.strstart<O-1?t.strstart:O-1,F===d?(A(t,!0),t.strm.avail_out===0?tt:U):t.last_lit&&(A(t,!1),t.strm.avail_out===0)?e:N}function rt(t,F){for(var I,f,u;;){if(t.lookahead<V){if(ut(t),t.lookahead<V&&F===_)return e;if(t.lookahead===0)break}if(I=0,t.lookahead>=O&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+O-1])&t.hash_mask,I=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=O-1,I!==0&&t.prev_length<t.max_lazy_match&&t.strstart-I<=t.w_size-V&&(t.match_length=$(t,I),t.match_length<=5&&(t.strategy===1||t.match_length===O&&4096<t.strstart-t.match_start)&&(t.match_length=O-1)),t.prev_length>=O&&t.match_length<=t.prev_length){for(u=t.strstart+t.lookahead-O,f=r._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-O),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=u&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+O-1])&t.hash_mask,I=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),--t.prev_length!=0;);if(t.match_available=0,t.match_length=O-1,t.strstart++,f&&(A(t,!1),t.strm.avail_out===0))return e}else if(t.match_available){if((f=r._tr_tally(t,0,t.window[t.strstart-1]))&&A(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return e}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(f=r._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<O-1?t.strstart:O-1,F===d?(A(t,!0),t.strm.avail_out===0?tt:U):t.last_lit&&(A(t,!1),t.strm.avail_out===0)?e:N}function nt(t,F,I,f,u){this.good_length=t,this.max_lazy=F,this.nice_length=I,this.max_chain=f,this.func=u}function ot(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=g,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*T),this.dyn_dtree=new i.Buf16(2*(2*C+1)),this.bl_tree=new i.Buf16(2*(2*D+1)),J(this.dyn_ltree),J(this.dyn_dtree),J(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(P+1),this.heap=new i.Buf16(2*z+1),J(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*z+1),J(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function at(t){var F;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=c,(F=t.state).pending=0,F.pending_out=0,F.wrap<0&&(F.wrap=-F.wrap),F.status=F.wrap?w:R,t.adler=F.wrap===2?0:1,F.last_flush=_,r._tr_init(F),s):et(t,p)}function it(t){var F=at(t);return F===s&&(function(I){I.window_size=2*I.w_size,J(I.head),I.max_lazy_match=l[I.level].max_lazy,I.good_match=l[I.level].good_length,I.nice_match=l[I.level].nice_length,I.max_chain_length=l[I.level].max_chain,I.strstart=0,I.block_start=0,I.lookahead=0,I.insert=0,I.match_length=I.prev_length=O-1,I.match_available=0,I.ins_h=0})(t.state),F}function G(t,F,I,f,u,S){if(!t)return p;var L=1;if(F===n&&(F=6),f<0?(L=0,f=-f):15<f&&(L=2,f-=16),u<1||x<u||I!==g||f<8||15<f||F<0||9<F||S<0||h<S)return et(t,p);f===8&&(f=9);var j=new ot;return(t.state=j).strm=t,j.wrap=L,j.gzhead=null,j.w_bits=f,j.w_size=1<<j.w_bits,j.w_mask=j.w_size-1,j.hash_bits=u+7,j.hash_size=1<<j.hash_bits,j.hash_mask=j.hash_size-1,j.hash_shift=~~((j.hash_bits+O-1)/O),j.window=new i.Buf8(2*j.w_size),j.head=new i.Buf16(j.hash_size),j.prev=new i.Buf16(j.w_size),j.lit_bufsize=1<<u+6,j.pending_buf_size=4*j.lit_bufsize,j.pending_buf=new i.Buf8(j.pending_buf_size),j.d_buf=1*j.lit_bufsize,j.l_buf=3*j.lit_bufsize,j.level=F,j.strategy=S,j.method=I,it(t)}l=[new nt(0,0,0,0,function(t,F){var I=65535;for(I>t.pending_buf_size-5&&(I=t.pending_buf_size-5);;){if(t.lookahead<=1){if(ut(t),t.lookahead===0&&F===_)return e;if(t.lookahead===0)break}t.strstart+=t.lookahead,t.lookahead=0;var f=t.block_start+I;if((t.strstart===0||t.strstart>=f)&&(t.lookahead=t.strstart-f,t.strstart=f,A(t,!1),t.strm.avail_out===0)||t.strstart-t.block_start>=t.w_size-V&&(A(t,!1),t.strm.avail_out===0))return e}return t.insert=0,F===d?(A(t,!0),t.strm.avail_out===0?tt:U):(t.strstart>t.block_start&&(A(t,!1),t.strm.avail_out),e)}),new nt(4,4,8,4,dt),new nt(4,5,16,8,dt),new nt(4,6,32,32,dt),new nt(4,4,16,16,rt),new nt(8,16,32,32,rt),new nt(8,16,128,128,rt),new nt(8,32,128,256,rt),new nt(32,128,258,1024,rt),new nt(32,258,258,4096,rt)],m.deflateInit=function(t,F){return G(t,F,g,15,8,0)},m.deflateInit2=G,m.deflateReset=it,m.deflateResetKeep=at,m.deflateSetHeader=function(t,F){return t&&t.state?t.state.wrap!==2?p:(t.state.gzhead=F,s):p},m.deflate=function(t,F){var I,f,u,S;if(!t||!t.state||5<F||F<0)return t?et(t,p):p;if(f=t.state,!t.output||!t.input&&t.avail_in!==0||f.status===666&&F!==d)return et(t,t.avail_out===0?-5:p);if(f.strm=t,I=f.last_flush,f.last_flush=F,f.status===w)if(f.wrap===2)t.adler=0,K(f,31),K(f,139),K(f,8),f.gzhead?(K(f,(f.gzhead.text?1:0)+(f.gzhead.hcrc?2:0)+(f.gzhead.extra?4:0)+(f.gzhead.name?8:0)+(f.gzhead.comment?16:0)),K(f,255&f.gzhead.time),K(f,f.gzhead.time>>8&255),K(f,f.gzhead.time>>16&255),K(f,f.gzhead.time>>24&255),K(f,f.level===9?2:2<=f.strategy||f.level<2?4:0),K(f,255&f.gzhead.os),f.gzhead.extra&&f.gzhead.extra.length&&(K(f,255&f.gzhead.extra.length),K(f,f.gzhead.extra.length>>8&255)),f.gzhead.hcrc&&(t.adler=b(t.adler,f.pending_buf,f.pending,0)),f.gzindex=0,f.status=69):(K(f,0),K(f,0),K(f,0),K(f,0),K(f,0),K(f,f.level===9?2:2<=f.strategy||f.level<2?4:0),K(f,3),f.status=R);else{var L=g+(f.w_bits-8<<4)<<8;L|=(2<=f.strategy||f.level<2?0:f.level<6?1:f.level===6?2:3)<<6,f.strstart!==0&&(L|=32),L+=31-L%31,f.status=R,H(f,L),f.strstart!==0&&(H(f,t.adler>>>16),H(f,65535&t.adler)),t.adler=1}if(f.status===69)if(f.gzhead.extra){for(u=f.pending;f.gzindex<(65535&f.gzhead.extra.length)&&(f.pending!==f.pending_buf_size||(f.gzhead.hcrc&&f.pending>u&&(t.adler=b(t.adler,f.pending_buf,f.pending-u,u)),B(t),u=f.pending,f.pending!==f.pending_buf_size));)K(f,255&f.gzhead.extra[f.gzindex]),f.gzindex++;f.gzhead.hcrc&&f.pending>u&&(t.adler=b(t.adler,f.pending_buf,f.pending-u,u)),f.gzindex===f.gzhead.extra.length&&(f.gzindex=0,f.status=73)}else f.status=73;if(f.status===73)if(f.gzhead.name){u=f.pending;do{if(f.pending===f.pending_buf_size&&(f.gzhead.hcrc&&f.pending>u&&(t.adler=b(t.adler,f.pending_buf,f.pending-u,u)),B(t),u=f.pending,f.pending===f.pending_buf_size)){S=1;break}S=f.gzindex<f.gzhead.name.length?255&f.gzhead.name.charCodeAt(f.gzindex++):0,K(f,S)}while(S!==0);f.gzhead.hcrc&&f.pending>u&&(t.adler=b(t.adler,f.pending_buf,f.pending-u,u)),S===0&&(f.gzindex=0,f.status=91)}else f.status=91;if(f.status===91)if(f.gzhead.comment){u=f.pending;do{if(f.pending===f.pending_buf_size&&(f.gzhead.hcrc&&f.pending>u&&(t.adler=b(t.adler,f.pending_buf,f.pending-u,u)),B(t),u=f.pending,f.pending===f.pending_buf_size)){S=1;break}S=f.gzindex<f.gzhead.comment.length?255&f.gzhead.comment.charCodeAt(f.gzindex++):0,K(f,S)}while(S!==0);f.gzhead.hcrc&&f.pending>u&&(t.adler=b(t.adler,f.pending_buf,f.pending-u,u)),S===0&&(f.status=103)}else f.status=103;if(f.status===103&&(f.gzhead.hcrc?(f.pending+2>f.pending_buf_size&&B(t),f.pending+2<=f.pending_buf_size&&(K(f,255&t.adler),K(f,t.adler>>8&255),t.adler=0,f.status=R)):f.status=R),f.pending!==0){if(B(t),t.avail_out===0)return f.last_flush=-1,s}else if(t.avail_in===0&&X(F)<=X(I)&&F!==d)return et(t,-5);if(f.status===666&&t.avail_in!==0)return et(t,-5);if(t.avail_in!==0||f.lookahead!==0||F!==_&&f.status!==666){var j=f.strategy===2?(function(E,Z){for(var q;;){if(E.lookahead===0&&(ut(E),E.lookahead===0)){if(Z===_)return e;break}if(E.match_length=0,q=r._tr_tally(E,0,E.window[E.strstart]),E.lookahead--,E.strstart++,q&&(A(E,!1),E.strm.avail_out===0))return e}return E.insert=0,Z===d?(A(E,!0),E.strm.avail_out===0?tt:U):E.last_lit&&(A(E,!1),E.strm.avail_out===0)?e:N})(f,F):f.strategy===3?(function(E,Z){for(var q,Y,Q,lt,st=E.window;;){if(E.lookahead<=W){if(ut(E),E.lookahead<=W&&Z===_)return e;if(E.lookahead===0)break}if(E.match_length=0,E.lookahead>=O&&0<E.strstart&&(Y=st[Q=E.strstart-1])===st[++Q]&&Y===st[++Q]&&Y===st[++Q]){lt=E.strstart+W;do;while(Y===st[++Q]&&Y===st[++Q]&&Y===st[++Q]&&Y===st[++Q]&&Y===st[++Q]&&Y===st[++Q]&&Y===st[++Q]&&Y===st[++Q]&&Q<lt);E.match_length=W-(lt-Q),E.match_length>E.lookahead&&(E.match_length=E.lookahead)}if(E.match_length>=O?(q=r._tr_tally(E,1,E.match_length-O),E.lookahead-=E.match_length,E.strstart+=E.match_length,E.match_length=0):(q=r._tr_tally(E,0,E.window[E.strstart]),E.lookahead--,E.strstart++),q&&(A(E,!1),E.strm.avail_out===0))return e}return E.insert=0,Z===d?(A(E,!0),E.strm.avail_out===0?tt:U):E.last_lit&&(A(E,!1),E.strm.avail_out===0)?e:N})(f,F):l[f.level].func(f,F);if(j!==tt&&j!==U||(f.status=666),j===e||j===tt)return t.avail_out===0&&(f.last_flush=-1),s;if(j===N&&(F===1?r._tr_align(f):F!==5&&(r._tr_stored_block(f,0,0,!1),F===3&&(J(f.head),f.lookahead===0&&(f.strstart=0,f.block_start=0,f.insert=0))),B(t),t.avail_out===0))return f.last_flush=-1,s}return F!==d?s:f.wrap<=0?1:(f.wrap===2?(K(f,255&t.adler),K(f,t.adler>>8&255),K(f,t.adler>>16&255),K(f,t.adler>>24&255),K(f,255&t.total_in),K(f,t.total_in>>8&255),K(f,t.total_in>>16&255),K(f,t.total_in>>24&255)):(H(f,t.adler>>>16),H(f,65535&t.adler)),B(t),0<f.wrap&&(f.wrap=-f.wrap),f.pending!==0?s:1)},m.deflateEnd=function(t){var F;return t&&t.state?(F=t.state.status)!==w&&F!==69&&F!==73&&F!==91&&F!==103&&F!==R&&F!==666?et(t,p):(t.state=null,F===R?et(t,-3):s):p},m.deflateSetDictionary=function(t,F){var I,f,u,S,L,j,E,Z,q=F.length;if(!t||!t.state||(S=(I=t.state).wrap)===2||S===1&&I.status!==w||I.lookahead)return p;for(S===1&&(t.adler=o(t.adler,F,q,0)),I.wrap=0,q>=I.w_size&&(S===0&&(J(I.head),I.strstart=0,I.block_start=0,I.insert=0),Z=new i.Buf8(I.w_size),i.arraySet(Z,F,q-I.w_size,I.w_size,0),F=Z,q=I.w_size),L=t.avail_in,j=t.next_in,E=t.input,t.avail_in=q,t.next_in=0,t.input=F,ut(I);I.lookahead>=O;){for(f=I.strstart,u=I.lookahead-(O-1);I.ins_h=(I.ins_h<<I.hash_shift^I.window[f+O-1])&I.hash_mask,I.prev[f&I.w_mask]=I.head[I.ins_h],I.head[I.ins_h]=f,f++,--u;);I.strstart=f,I.lookahead=O-1,ut(I)}return I.strstart+=I.lookahead,I.block_start=I.strstart,I.insert=I.lookahead,I.lookahead=0,I.match_length=I.prev_length=O-1,I.match_available=0,t.next_in=j,t.input=E,t.avail_in=L,I.wrap=S,s},m.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(a,v,m){v.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(a,v,m){v.exports=function(l,i){var r,o,b,y,_,d,s,p,n,h,c,g,x,z,C,D,T,P,O,W,V,w,R,e,N;r=l.state,o=l.next_in,e=l.input,b=o+(l.avail_in-5),y=l.next_out,N=l.output,_=y-(i-l.avail_out),d=y+(l.avail_out-257),s=r.dmax,p=r.wsize,n=r.whave,h=r.wnext,c=r.window,g=r.hold,x=r.bits,z=r.lencode,C=r.distcode,D=(1<<r.lenbits)-1,T=(1<<r.distbits)-1;t:do{x<15&&(g+=e[o++]<<x,x+=8,g+=e[o++]<<x,x+=8),P=z[g&D];e:for(;;){if(g>>>=O=P>>>24,x-=O,(O=P>>>16&255)===0)N[y++]=65535&P;else{if(!(16&O)){if((64&O)==0){P=z[(65535&P)+(g&(1<<O)-1)];continue e}if(32&O){r.mode=12;break t}l.msg="invalid literal/length code",r.mode=30;break t}W=65535&P,(O&=15)&&(x<O&&(g+=e[o++]<<x,x+=8),W+=g&(1<<O)-1,g>>>=O,x-=O),x<15&&(g+=e[o++]<<x,x+=8,g+=e[o++]<<x,x+=8),P=C[g&T];r:for(;;){if(g>>>=O=P>>>24,x-=O,!(16&(O=P>>>16&255))){if((64&O)==0){P=C[(65535&P)+(g&(1<<O)-1)];continue r}l.msg="invalid distance code",r.mode=30;break t}if(V=65535&P,x<(O&=15)&&(g+=e[o++]<<x,(x+=8)<O&&(g+=e[o++]<<x,x+=8)),s<(V+=g&(1<<O)-1)){l.msg="invalid distance too far back",r.mode=30;break t}if(g>>>=O,x-=O,(O=y-_)<V){if(n<(O=V-O)&&r.sane){l.msg="invalid distance too far back",r.mode=30;break t}if(R=c,(w=0)===h){if(w+=p-O,O<W){for(W-=O;N[y++]=c[w++],--O;);w=y-V,R=N}}else if(h<O){if(w+=p+h-O,(O-=h)<W){for(W-=O;N[y++]=c[w++],--O;);if(w=0,h<W){for(W-=O=h;N[y++]=c[w++],--O;);w=y-V,R=N}}}else if(w+=h-O,O<W){for(W-=O;N[y++]=c[w++],--O;);w=y-V,R=N}for(;2<W;)N[y++]=R[w++],N[y++]=R[w++],N[y++]=R[w++],W-=3;W&&(N[y++]=R[w++],1<W&&(N[y++]=R[w++]))}else{for(w=y-V;N[y++]=N[w++],N[y++]=N[w++],N[y++]=N[w++],2<(W-=3););W&&(N[y++]=N[w++],1<W&&(N[y++]=N[w++]))}break}}break}}while(o<b&&y<d);o-=W=x>>3,g&=(1<<(x-=W<<3))-1,l.next_in=o,l.next_out=y,l.avail_in=o<b?b-o+5:5-(o-b),l.avail_out=y<d?d-y+257:257-(y-d),r.hold=g,r.bits=x}},{}],49:[function(a,v,m){var l=a("../utils/common"),i=a("./adler32"),r=a("./crc32"),o=a("./inffast"),b=a("./inftrees"),y=1,_=2,d=0,s=-2,p=1,n=852,h=592;function c(w){return(w>>>24&255)+(w>>>8&65280)+((65280&w)<<8)+((255&w)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new l.Buf16(320),this.work=new l.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function x(w){var R;return w&&w.state?(R=w.state,w.total_in=w.total_out=R.total=0,w.msg="",R.wrap&&(w.adler=1&R.wrap),R.mode=p,R.last=0,R.havedict=0,R.dmax=32768,R.head=null,R.hold=0,R.bits=0,R.lencode=R.lendyn=new l.Buf32(n),R.distcode=R.distdyn=new l.Buf32(h),R.sane=1,R.back=-1,d):s}function z(w){var R;return w&&w.state?((R=w.state).wsize=0,R.whave=0,R.wnext=0,x(w)):s}function C(w,R){var e,N;return w&&w.state?(N=w.state,R<0?(e=0,R=-R):(e=1+(R>>4),R<48&&(R&=15)),R&&(R<8||15<R)?s:(N.window!==null&&N.wbits!==R&&(N.window=null),N.wrap=e,N.wbits=R,z(w))):s}function D(w,R){var e,N;return w?(N=new g,(w.state=N).window=null,(e=C(w,R))!==d&&(w.state=null),e):s}var T,P,O=!0;function W(w){if(O){var R;for(T=new l.Buf32(512),P=new l.Buf32(32),R=0;R<144;)w.lens[R++]=8;for(;R<256;)w.lens[R++]=9;for(;R<280;)w.lens[R++]=7;for(;R<288;)w.lens[R++]=8;for(b(y,w.lens,0,288,T,0,w.work,{bits:9}),R=0;R<32;)w.lens[R++]=5;b(_,w.lens,0,32,P,0,w.work,{bits:5}),O=!1}w.lencode=T,w.lenbits=9,w.distcode=P,w.distbits=5}function V(w,R,e,N){var tt,U=w.state;return U.window===null&&(U.wsize=1<<U.wbits,U.wnext=0,U.whave=0,U.window=new l.Buf8(U.wsize)),N>=U.wsize?(l.arraySet(U.window,R,e-U.wsize,U.wsize,0),U.wnext=0,U.whave=U.wsize):(N<(tt=U.wsize-U.wnext)&&(tt=N),l.arraySet(U.window,R,e-N,tt,U.wnext),(N-=tt)?(l.arraySet(U.window,R,e-N,N,0),U.wnext=N,U.whave=U.wsize):(U.wnext+=tt,U.wnext===U.wsize&&(U.wnext=0),U.whave<U.wsize&&(U.whave+=tt))),0}m.inflateReset=z,m.inflateReset2=C,m.inflateResetKeep=x,m.inflateInit=function(w){return D(w,15)},m.inflateInit2=D,m.inflate=function(w,R){var e,N,tt,U,et,X,J,B,A,K,H,$,ut,dt,rt,nt,ot,at,it,G,t,F,I,f,u=0,S=new l.Buf8(4),L=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!w||!w.state||!w.output||!w.input&&w.avail_in!==0)return s;(e=w.state).mode===12&&(e.mode=13),et=w.next_out,tt=w.output,J=w.avail_out,U=w.next_in,N=w.input,X=w.avail_in,B=e.hold,A=e.bits,K=X,H=J,F=d;t:for(;;)switch(e.mode){case p:if(e.wrap===0){e.mode=13;break}for(;A<16;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if(2&e.wrap&&B===35615){S[e.check=0]=255&B,S[1]=B>>>8&255,e.check=r(e.check,S,2,0),A=B=0,e.mode=2;break}if(e.flags=0,e.head&&(e.head.done=!1),!(1&e.wrap)||(((255&B)<<8)+(B>>8))%31){w.msg="incorrect header check",e.mode=30;break}if((15&B)!=8){w.msg="unknown compression method",e.mode=30;break}if(A-=4,t=8+(15&(B>>>=4)),e.wbits===0)e.wbits=t;else if(t>e.wbits){w.msg="invalid window size",e.mode=30;break}e.dmax=1<<t,w.adler=e.check=1,e.mode=512&B?10:12,A=B=0;break;case 2:for(;A<16;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if(e.flags=B,(255&e.flags)!=8){w.msg="unknown compression method",e.mode=30;break}if(57344&e.flags){w.msg="unknown header flags set",e.mode=30;break}e.head&&(e.head.text=B>>8&1),512&e.flags&&(S[0]=255&B,S[1]=B>>>8&255,e.check=r(e.check,S,2,0)),A=B=0,e.mode=3;case 3:for(;A<32;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}e.head&&(e.head.time=B),512&e.flags&&(S[0]=255&B,S[1]=B>>>8&255,S[2]=B>>>16&255,S[3]=B>>>24&255,e.check=r(e.check,S,4,0)),A=B=0,e.mode=4;case 4:for(;A<16;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}e.head&&(e.head.xflags=255&B,e.head.os=B>>8),512&e.flags&&(S[0]=255&B,S[1]=B>>>8&255,e.check=r(e.check,S,2,0)),A=B=0,e.mode=5;case 5:if(1024&e.flags){for(;A<16;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}e.length=B,e.head&&(e.head.extra_len=B),512&e.flags&&(S[0]=255&B,S[1]=B>>>8&255,e.check=r(e.check,S,2,0)),A=B=0}else e.head&&(e.head.extra=null);e.mode=6;case 6:if(1024&e.flags&&(X<($=e.length)&&($=X),$&&(e.head&&(t=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Array(e.head.extra_len)),l.arraySet(e.head.extra,N,U,$,t)),512&e.flags&&(e.check=r(e.check,N,$,U)),X-=$,U+=$,e.length-=$),e.length))break t;e.length=0,e.mode=7;case 7:if(2048&e.flags){if(X===0)break t;for($=0;t=N[U+$++],e.head&&t&&e.length<65536&&(e.head.name+=String.fromCharCode(t)),t&&$<X;);if(512&e.flags&&(e.check=r(e.check,N,$,U)),X-=$,U+=$,t)break t}else e.head&&(e.head.name=null);e.length=0,e.mode=8;case 8:if(4096&e.flags){if(X===0)break t;for($=0;t=N[U+$++],e.head&&t&&e.length<65536&&(e.head.comment+=String.fromCharCode(t)),t&&$<X;);if(512&e.flags&&(e.check=r(e.check,N,$,U)),X-=$,U+=$,t)break t}else e.head&&(e.head.comment=null);e.mode=9;case 9:if(512&e.flags){for(;A<16;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if(B!==(65535&e.check)){w.msg="header crc mismatch",e.mode=30;break}A=B=0}e.head&&(e.head.hcrc=e.flags>>9&1,e.head.done=!0),w.adler=e.check=0,e.mode=12;break;case 10:for(;A<32;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}w.adler=e.check=c(B),A=B=0,e.mode=11;case 11:if(e.havedict===0)return w.next_out=et,w.avail_out=J,w.next_in=U,w.avail_in=X,e.hold=B,e.bits=A,2;w.adler=e.check=1,e.mode=12;case 12:if(R===5||R===6)break t;case 13:if(e.last){B>>>=7&A,A-=7&A,e.mode=27;break}for(;A<3;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}switch(e.last=1&B,A-=1,3&(B>>>=1)){case 0:e.mode=14;break;case 1:if(W(e),e.mode=20,R!==6)break;B>>>=2,A-=2;break t;case 2:e.mode=17;break;case 3:w.msg="invalid block type",e.mode=30}B>>>=2,A-=2;break;case 14:for(B>>>=7&A,A-=7&A;A<32;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if((65535&B)!=(B>>>16^65535)){w.msg="invalid stored block lengths",e.mode=30;break}if(e.length=65535&B,A=B=0,e.mode=15,R===6)break t;case 15:e.mode=16;case 16:if($=e.length){if(X<$&&($=X),J<$&&($=J),$===0)break t;l.arraySet(tt,N,U,$,et),X-=$,U+=$,J-=$,et+=$,e.length-=$;break}e.mode=12;break;case 17:for(;A<14;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if(e.nlen=257+(31&B),B>>>=5,A-=5,e.ndist=1+(31&B),B>>>=5,A-=5,e.ncode=4+(15&B),B>>>=4,A-=4,286<e.nlen||30<e.ndist){w.msg="too many length or distance symbols",e.mode=30;break}e.have=0,e.mode=18;case 18:for(;e.have<e.ncode;){for(;A<3;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}e.lens[L[e.have++]]=7&B,B>>>=3,A-=3}for(;e.have<19;)e.lens[L[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,I={bits:e.lenbits},F=b(0,e.lens,0,19,e.lencode,0,e.work,I),e.lenbits=I.bits,F){w.msg="invalid code lengths set",e.mode=30;break}e.have=0,e.mode=19;case 19:for(;e.have<e.nlen+e.ndist;){for(;nt=(u=e.lencode[B&(1<<e.lenbits)-1])>>>16&255,ot=65535&u,!((rt=u>>>24)<=A);){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if(ot<16)B>>>=rt,A-=rt,e.lens[e.have++]=ot;else{if(ot===16){for(f=rt+2;A<f;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if(B>>>=rt,A-=rt,e.have===0){w.msg="invalid bit length repeat",e.mode=30;break}t=e.lens[e.have-1],$=3+(3&B),B>>>=2,A-=2}else if(ot===17){for(f=rt+3;A<f;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}A-=rt,t=0,$=3+(7&(B>>>=rt)),B>>>=3,A-=3}else{for(f=rt+7;A<f;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}A-=rt,t=0,$=11+(127&(B>>>=rt)),B>>>=7,A-=7}if(e.have+$>e.nlen+e.ndist){w.msg="invalid bit length repeat",e.mode=30;break}for(;$--;)e.lens[e.have++]=t}}if(e.mode===30)break;if(e.lens[256]===0){w.msg="invalid code -- missing end-of-block",e.mode=30;break}if(e.lenbits=9,I={bits:e.lenbits},F=b(y,e.lens,0,e.nlen,e.lencode,0,e.work,I),e.lenbits=I.bits,F){w.msg="invalid literal/lengths set",e.mode=30;break}if(e.distbits=6,e.distcode=e.distdyn,I={bits:e.distbits},F=b(_,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,I),e.distbits=I.bits,F){w.msg="invalid distances set",e.mode=30;break}if(e.mode=20,R===6)break t;case 20:e.mode=21;case 21:if(6<=X&&258<=J){w.next_out=et,w.avail_out=J,w.next_in=U,w.avail_in=X,e.hold=B,e.bits=A,o(w,H),et=w.next_out,tt=w.output,J=w.avail_out,U=w.next_in,N=w.input,X=w.avail_in,B=e.hold,A=e.bits,e.mode===12&&(e.back=-1);break}for(e.back=0;nt=(u=e.lencode[B&(1<<e.lenbits)-1])>>>16&255,ot=65535&u,!((rt=u>>>24)<=A);){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if(nt&&(240&nt)==0){for(at=rt,it=nt,G=ot;nt=(u=e.lencode[G+((B&(1<<at+it)-1)>>at)])>>>16&255,ot=65535&u,!(at+(rt=u>>>24)<=A);){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}B>>>=at,A-=at,e.back+=at}if(B>>>=rt,A-=rt,e.back+=rt,e.length=ot,nt===0){e.mode=26;break}if(32&nt){e.back=-1,e.mode=12;break}if(64&nt){w.msg="invalid literal/length code",e.mode=30;break}e.extra=15&nt,e.mode=22;case 22:if(e.extra){for(f=e.extra;A<f;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}e.length+=B&(1<<e.extra)-1,B>>>=e.extra,A-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=23;case 23:for(;nt=(u=e.distcode[B&(1<<e.distbits)-1])>>>16&255,ot=65535&u,!((rt=u>>>24)<=A);){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if((240&nt)==0){for(at=rt,it=nt,G=ot;nt=(u=e.distcode[G+((B&(1<<at+it)-1)>>at)])>>>16&255,ot=65535&u,!(at+(rt=u>>>24)<=A);){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}B>>>=at,A-=at,e.back+=at}if(B>>>=rt,A-=rt,e.back+=rt,64&nt){w.msg="invalid distance code",e.mode=30;break}e.offset=ot,e.extra=15&nt,e.mode=24;case 24:if(e.extra){for(f=e.extra;A<f;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}e.offset+=B&(1<<e.extra)-1,B>>>=e.extra,A-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){w.msg="invalid distance too far back",e.mode=30;break}e.mode=25;case 25:if(J===0)break t;if($=H-J,e.offset>$){if(($=e.offset-$)>e.whave&&e.sane){w.msg="invalid distance too far back",e.mode=30;break}ut=$>e.wnext?($-=e.wnext,e.wsize-$):e.wnext-$,$>e.length&&($=e.length),dt=e.window}else dt=tt,ut=et-e.offset,$=e.length;for(J<$&&($=J),J-=$,e.length-=$;tt[et++]=dt[ut++],--$;);e.length===0&&(e.mode=21);break;case 26:if(J===0)break t;tt[et++]=e.length,J--,e.mode=21;break;case 27:if(e.wrap){for(;A<32;){if(X===0)break t;X--,B|=N[U++]<<A,A+=8}if(H-=J,w.total_out+=H,e.total+=H,H&&(w.adler=e.check=e.flags?r(e.check,tt,H,et-H):i(e.check,tt,H,et-H)),H=J,(e.flags?B:c(B))!==e.check){w.msg="incorrect data check",e.mode=30;break}A=B=0}e.mode=28;case 28:if(e.wrap&&e.flags){for(;A<32;){if(X===0)break t;X--,B+=N[U++]<<A,A+=8}if(B!==(4294967295&e.total)){w.msg="incorrect length check",e.mode=30;break}A=B=0}e.mode=29;case 29:F=1;break t;case 30:F=-3;break t;case 31:return-4;case 32:default:return s}return w.next_out=et,w.avail_out=J,w.next_in=U,w.avail_in=X,e.hold=B,e.bits=A,(e.wsize||H!==w.avail_out&&e.mode<30&&(e.mode<27||R!==4))&&V(w,w.output,w.next_out,H-w.avail_out)?(e.mode=31,-4):(K-=w.avail_in,H-=w.avail_out,w.total_in+=K,w.total_out+=H,e.total+=H,e.wrap&&H&&(w.adler=e.check=e.flags?r(e.check,tt,H,w.next_out-H):i(e.check,tt,H,w.next_out-H)),w.data_type=e.bits+(e.last?64:0)+(e.mode===12?128:0)+(e.mode===20||e.mode===15?256:0),(K==0&&H===0||R===4)&&F===d&&(F=-5),F)},m.inflateEnd=function(w){if(!w||!w.state)return s;var R=w.state;return R.window&&(R.window=null),w.state=null,d},m.inflateGetHeader=function(w,R){var e;return w&&w.state?(2&(e=w.state).wrap)==0?s:((e.head=R).done=!1,d):s},m.inflateSetDictionary=function(w,R){var e,N=R.length;return w&&w.state?(e=w.state).wrap!==0&&e.mode!==11?s:e.mode===11&&i(1,R,N,0)!==e.check?-3:V(w,R,N,N)?(e.mode=31,-4):(e.havedict=1,d):s},m.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(a,v,m){var l=a("../utils/common"),i=[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],r=[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],o=[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],b=[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];v.exports=function(y,_,d,s,p,n,h,c){var g,x,z,C,D,T,P,O,W,V=c.bits,w=0,R=0,e=0,N=0,tt=0,U=0,et=0,X=0,J=0,B=0,A=null,K=0,H=new l.Buf16(16),$=new l.Buf16(16),ut=null,dt=0;for(w=0;w<=15;w++)H[w]=0;for(R=0;R<s;R++)H[_[d+R]]++;for(tt=V,N=15;1<=N&&H[N]===0;N--);if(N<tt&&(tt=N),N===0)return p[n++]=20971520,p[n++]=20971520,c.bits=1,0;for(e=1;e<N&&H[e]===0;e++);for(tt<e&&(tt=e),w=X=1;w<=15;w++)if(X<<=1,(X-=H[w])<0)return-1;if(0<X&&(y===0||N!==1))return-1;for($[1]=0,w=1;w<15;w++)$[w+1]=$[w]+H[w];for(R=0;R<s;R++)_[d+R]!==0&&(h[$[_[d+R]]++]=R);if(T=y===0?(A=ut=h,19):y===1?(A=i,K-=257,ut=r,dt-=257,256):(A=o,ut=b,-1),w=e,D=n,et=R=B=0,z=-1,C=(J=1<<(U=tt))-1,y===1&&852<J||y===2&&592<J)return 1;for(;;){for(P=w-et,W=h[R]<T?(O=0,h[R]):h[R]>T?(O=ut[dt+h[R]],A[K+h[R]]):(O=96,0),g=1<<w-et,e=x=1<<U;p[D+(B>>et)+(x-=g)]=P<<24|O<<16|W|0,x!==0;);for(g=1<<w-1;B&g;)g>>=1;if(g!==0?(B&=g-1,B+=g):B=0,R++,--H[w]==0){if(w===N)break;w=_[d+h[R]]}if(tt<w&&(B&C)!==z){for(et===0&&(et=tt),D+=e,X=1<<(U=w-et);U+et<N&&!((X-=H[U+et])<=0);)U++,X<<=1;if(J+=1<<U,y===1&&852<J||y===2&&592<J)return 1;p[z=B&C]=tt<<24|U<<16|D-n|0}}return B!==0&&(p[D+B]=w-et<<24|64<<16|0),c.bits=tt,0}},{"../utils/common":41}],51:[function(a,v,m){v.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(a,v,m){var l=a("../utils/common"),i=0,r=1;function o(u){for(var S=u.length;0<=--S;)u[S]=0}var b=0,y=29,_=256,d=_+1+y,s=30,p=19,n=2*d+1,h=15,c=16,g=7,x=256,z=16,C=17,D=18,T=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],P=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],O=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],W=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],V=new Array(2*(d+2));o(V);var w=new Array(2*s);o(w);var R=new Array(512);o(R);var e=new Array(256);o(e);var N=new Array(y);o(N);var tt,U,et,X=new Array(s);function J(u,S,L,j,E){this.static_tree=u,this.extra_bits=S,this.extra_base=L,this.elems=j,this.max_length=E,this.has_stree=u&&u.length}function B(u,S){this.dyn_tree=u,this.max_code=0,this.stat_desc=S}function A(u){return u<256?R[u]:R[256+(u>>>7)]}function K(u,S){u.pending_buf[u.pending++]=255&S,u.pending_buf[u.pending++]=S>>>8&255}function H(u,S,L){u.bi_valid>c-L?(u.bi_buf|=S<<u.bi_valid&65535,K(u,u.bi_buf),u.bi_buf=S>>c-u.bi_valid,u.bi_valid+=L-c):(u.bi_buf|=S<<u.bi_valid&65535,u.bi_valid+=L)}function $(u,S,L){H(u,L[2*S],L[2*S+1])}function ut(u,S){for(var L=0;L|=1&u,u>>>=1,L<<=1,0<--S;);return L>>>1}function dt(u,S,L){var j,E,Z=new Array(h+1),q=0;for(j=1;j<=h;j++)Z[j]=q=q+L[j-1]<<1;for(E=0;E<=S;E++){var Y=u[2*E+1];Y!==0&&(u[2*E]=ut(Z[Y]++,Y))}}function rt(u){var S;for(S=0;S<d;S++)u.dyn_ltree[2*S]=0;for(S=0;S<s;S++)u.dyn_dtree[2*S]=0;for(S=0;S<p;S++)u.bl_tree[2*S]=0;u.dyn_ltree[2*x]=1,u.opt_len=u.static_len=0,u.last_lit=u.matches=0}function nt(u){8<u.bi_valid?K(u,u.bi_buf):0<u.bi_valid&&(u.pending_buf[u.pending++]=u.bi_buf),u.bi_buf=0,u.bi_valid=0}function ot(u,S,L,j){var E=2*S,Z=2*L;return u[E]<u[Z]||u[E]===u[Z]&&j[S]<=j[L]}function at(u,S,L){for(var j=u.heap[L],E=L<<1;E<=u.heap_len&&(E<u.heap_len&&ot(S,u.heap[E+1],u.heap[E],u.depth)&&E++,!ot(S,j,u.heap[E],u.depth));)u.heap[L]=u.heap[E],L=E,E<<=1;u.heap[L]=j}function it(u,S,L){var j,E,Z,q,Y=0;if(u.last_lit!==0)for(;j=u.pending_buf[u.d_buf+2*Y]<<8|u.pending_buf[u.d_buf+2*Y+1],E=u.pending_buf[u.l_buf+Y],Y++,j===0?$(u,E,S):($(u,(Z=e[E])+_+1,S),(q=T[Z])!==0&&H(u,E-=N[Z],q),$(u,Z=A(--j),L),(q=P[Z])!==0&&H(u,j-=X[Z],q)),Y<u.last_lit;);$(u,x,S)}function G(u,S){var L,j,E,Z=S.dyn_tree,q=S.stat_desc.static_tree,Y=S.stat_desc.has_stree,Q=S.stat_desc.elems,lt=-1;for(u.heap_len=0,u.heap_max=n,L=0;L<Q;L++)Z[2*L]!==0?(u.heap[++u.heap_len]=lt=L,u.depth[L]=0):Z[2*L+1]=0;for(;u.heap_len<2;)Z[2*(E=u.heap[++u.heap_len]=lt<2?++lt:0)]=1,u.depth[E]=0,u.opt_len--,Y&&(u.static_len-=q[2*E+1]);for(S.max_code=lt,L=u.heap_len>>1;1<=L;L--)at(u,Z,L);for(E=Q;L=u.heap[1],u.heap[1]=u.heap[u.heap_len--],at(u,Z,1),j=u.heap[1],u.heap[--u.heap_max]=L,u.heap[--u.heap_max]=j,Z[2*E]=Z[2*L]+Z[2*j],u.depth[E]=(u.depth[L]>=u.depth[j]?u.depth[L]:u.depth[j])+1,Z[2*L+1]=Z[2*j+1]=E,u.heap[1]=E++,at(u,Z,1),2<=u.heap_len;);u.heap[--u.heap_max]=u.heap[1],(function(st,ct){var mt,bt,Ft,ft,Rt,Ut,kt=ct.dyn_tree,Gt=ct.max_code,fe=ct.stat_desc.static_tree,pe=ct.stat_desc.has_stree,me=ct.stat_desc.extra_bits,Ht=ct.stat_desc.extra_base,Ot=ct.stat_desc.max_length,Pt=0;for(ft=0;ft<=h;ft++)st.bl_count[ft]=0;for(kt[2*st.heap[st.heap_max]+1]=0,mt=st.heap_max+1;mt<n;mt++)Ot<(ft=kt[2*kt[2*(bt=st.heap[mt])+1]+1]+1)&&(ft=Ot,Pt++),kt[2*bt+1]=ft,Gt<bt||(st.bl_count[ft]++,Rt=0,Ht<=bt&&(Rt=me[bt-Ht]),Ut=kt[2*bt],st.opt_len+=Ut*(ft+Rt),pe&&(st.static_len+=Ut*(fe[2*bt+1]+Rt)));if(Pt!==0){do{for(ft=Ot-1;st.bl_count[ft]===0;)ft--;st.bl_count[ft]--,st.bl_count[ft+1]+=2,st.bl_count[Ot]--,Pt-=2}while(0<Pt);for(ft=Ot;ft!==0;ft--)for(bt=st.bl_count[ft];bt!==0;)Gt<(Ft=st.heap[--mt])||(kt[2*Ft+1]!==ft&&(st.opt_len+=(ft-kt[2*Ft+1])*kt[2*Ft],kt[2*Ft+1]=ft),bt--)}})(u,S),dt(Z,lt,u.bl_count)}function t(u,S,L){var j,E,Z=-1,q=S[1],Y=0,Q=7,lt=4;for(q===0&&(Q=138,lt=3),S[2*(L+1)+1]=65535,j=0;j<=L;j++)E=q,q=S[2*(j+1)+1],++Y<Q&&E===q||(Y<lt?u.bl_tree[2*E]+=Y:E!==0?(E!==Z&&u.bl_tree[2*E]++,u.bl_tree[2*z]++):Y<=10?u.bl_tree[2*C]++:u.bl_tree[2*D]++,Z=E,lt=(Y=0)===q?(Q=138,3):E===q?(Q=6,3):(Q=7,4))}function F(u,S,L){var j,E,Z=-1,q=S[1],Y=0,Q=7,lt=4;for(q===0&&(Q=138,lt=3),j=0;j<=L;j++)if(E=q,q=S[2*(j+1)+1],!(++Y<Q&&E===q)){if(Y<lt)for(;$(u,E,u.bl_tree),--Y!=0;);else E!==0?(E!==Z&&($(u,E,u.bl_tree),Y--),$(u,z,u.bl_tree),H(u,Y-3,2)):Y<=10?($(u,C,u.bl_tree),H(u,Y-3,3)):($(u,D,u.bl_tree),H(u,Y-11,7));Z=E,lt=(Y=0)===q?(Q=138,3):E===q?(Q=6,3):(Q=7,4)}}o(X);var I=!1;function f(u,S,L,j){H(u,(b<<1)+(j?1:0),3),(function(E,Z,q,Y){nt(E),K(E,q),K(E,~q),l.arraySet(E.pending_buf,E.window,Z,q,E.pending),E.pending+=q})(u,S,L)}m._tr_init=function(u){I||((function(){var S,L,j,E,Z,q=new Array(h+1);for(E=j=0;E<y-1;E++)for(N[E]=j,S=0;S<1<<T[E];S++)e[j++]=E;for(e[j-1]=E,E=Z=0;E<16;E++)for(X[E]=Z,S=0;S<1<<P[E];S++)R[Z++]=E;for(Z>>=7;E<s;E++)for(X[E]=Z<<7,S=0;S<1<<P[E]-7;S++)R[256+Z++]=E;for(L=0;L<=h;L++)q[L]=0;for(S=0;S<=143;)V[2*S+1]=8,S++,q[8]++;for(;S<=255;)V[2*S+1]=9,S++,q[9]++;for(;S<=279;)V[2*S+1]=7,S++,q[7]++;for(;S<=287;)V[2*S+1]=8,S++,q[8]++;for(dt(V,d+1,q),S=0;S<s;S++)w[2*S+1]=5,w[2*S]=ut(S,5);tt=new J(V,T,_+1,d,h),U=new J(w,P,0,s,h),et=new J(new Array(0),O,0,p,g)})(),I=!0),u.l_desc=new B(u.dyn_ltree,tt),u.d_desc=new B(u.dyn_dtree,U),u.bl_desc=new B(u.bl_tree,et),u.bi_buf=0,u.bi_valid=0,rt(u)},m._tr_stored_block=f,m._tr_flush_block=function(u,S,L,j){var E,Z,q=0;0<u.level?(u.strm.data_type===2&&(u.strm.data_type=(function(Y){var Q,lt=4093624447;for(Q=0;Q<=31;Q++,lt>>>=1)if(1<&&Y.dyn_ltree[2*Q]!==0)return i;if(Y.dyn_ltree[18]!==0||Y.dyn_ltree[20]!==0||Y.dyn_ltree[26]!==0)return r;for(Q=32;Q<_;Q++)if(Y.dyn_ltree[2*Q]!==0)return r;return i})(u)),G(u,u.l_desc),G(u,u.d_desc),q=(function(Y){var Q;for(t(Y,Y.dyn_ltree,Y.l_desc.max_code),t(Y,Y.dyn_dtree,Y.d_desc.max_code),G(Y,Y.bl_desc),Q=p-1;3<=Q&&Y.bl_tree[2*W[Q]+1]===0;Q--);return Y.opt_len+=3*(Q+1)+5+5+4,Q})(u),E=u.opt_len+3+7>>>3,(Z=u.static_len+3+7>>>3)<=E&&(E=Z)):E=Z=L+5,L+4<=E&&S!==-1?f(u,S,L,j):u.strategy===4||Z===E?(H(u,2+(j?1:0),3),it(u,V,w)):(H(u,4+(j?1:0),3),(function(Y,Q,lt,st){var ct;for(H(Y,Q-257,5),H(Y,lt-1,5),H(Y,st-4,4),ct=0;ct<st;ct++)H(Y,Y.bl_tree[2*W[ct]+1],3);F(Y,Y.dyn_ltree,Q-1),F(Y,Y.dyn_dtree,lt-1)})(u,u.l_desc.max_code+1,u.d_desc.max_code+1,q+1),it(u,u.dyn_ltree,u.dyn_dtree)),rt(u),j&&nt(u)},m._tr_tally=function(u,S,L){return u.pending_buf[u.d_buf+2*u.last_lit]=S>>>8&255,u.pending_buf[u.d_buf+2*u.last_lit+1]=255&S,u.pending_buf[u.l_buf+u.last_lit]=255&L,u.last_lit++,S===0?u.dyn_ltree[2*L]++:(u.matches++,S--,u.dyn_ltree[2*(e[L]+_+1)]++,u.dyn_dtree[2*A(S)]++),u.last_lit===u.lit_bufsize-1},m._tr_align=function(u){H(u,2,3),$(u,x,V),(function(S){S.bi_valid===16?(K(S,S.bi_buf),S.bi_buf=0,S.bi_valid=0):8<=S.bi_valid&&(S.pending_buf[S.pending++]=255&S.bi_buf,S.bi_buf>>=8,S.bi_valid-=8)})(u)}},{"../utils/common":41}],53:[function(a,v,m){v.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(a,v,m){(function(l){(function(i,r){if(!i.setImmediate){var o,b,y,_,d=1,s={},p=!1,n=i.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(i);h=h&&h.setTimeout?h:i,o={}.toString.call(i.process)==="[object process]"?function(z){process.nextTick(function(){g(z)})}:(function(){if(i.postMessage&&!i.importScripts){var z=!0,C=i.onmessage;return i.onmessage=function(){z=!1},i.postMessage("","*"),i.onmessage=C,z}})()?(_="setImmediate$"+Math.random()+"$",i.addEventListener?i.addEventListener("message",x,!1):i.attachEvent("onmessage",x),function(z){i.postMessage(_+z,"*")}):i.MessageChannel?((y=new MessageChannel).port1.onmessage=function(z){g(z.data)},function(z){y.port2.postMessage(z)}):n&&"onreadystatechange"in n.createElement("script")?(b=n.documentElement,function(z){var C=n.createElement("script");C.onreadystatechange=function(){g(z),C.onreadystatechange=null,b.removeChild(C),C=null},b.appendChild(C)}):function(z){setTimeout(g,0,z)},h.setImmediate=function(z){typeof z!="function"&&(z=new Function(""+z));for(var C=new Array(arguments.length-1),D=0;D<C.length;D++)C[D]=arguments[D+1];var T={callback:z,args:C};return s[d]=T,o(d),d++},h.clearImmediate=c}function c(z){delete s[z]}function g(z){if(p)setTimeout(g,0,z);else{var C=s[z];if(C){p=!0;try{(function(D){var T=D.callback,P=D.args;switch(P.length){case 0:T();break;case 1:T(P[0]);break;case 2:T(P[0],P[1]);break;case 3:T(P[0],P[1],P[2]);break;default:T.apply(r,P)}})(C)}finally{c(z),p=!1}}}}function x(z){z.source===i&&typeof z.data=="string"&&z.data.indexOf(_)===0&&g(+z.data.slice(_.length))}})(typeof self>"u"?l===void 0?this:l:self)}).call(this,typeof xt<"u"?xt:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})})(Dt)),Dt.exports}var Vt=Kt();const Jt=qt(Vt);function Nt(M){return M.toLowerCase()}function St(M,k){const a=new Set(k.map(m=>m.toLowerCase()));return M.filter(m=>{const l=Nt(m),i=l.lastIndexOf(".");return i<0?!1:a.has(l.slice(i))}).sort((m,l)=>m.length-l.length)[0]}function ht(M,k){const a=k.map(m=>m.toLowerCase());return M.filter(m=>{const l=Nt(m);return a.every(i=>l.includes(i))}).sort((m,l)=>m.length-l.length)[0]}function Qt(M){const k=M.filter(y=>{const _=Nt(y);return!(_.endsWith("/")||_.includes("__macosx")||_.endsWith(".ds_store"))}),a=St(k,[".gtl"])||ht(k,["f_cu"])||ht(k,["top","cu"])||ht(k,["top","copper"]),v=St(k,[".gbl"])||ht(k,["b_cu"])||ht(k,["bottom","cu"])||ht(k,["bottom","copper"]),m=St(k,[".gts"])||ht(k,["f_mask"])||ht(k,["top","mask"]),l=St(k,[".gbs"])||ht(k,["b_mask"])||ht(k,["bottom","mask"]),i=St(k,[".gto"])||ht(k,["f_silks"])||ht(k,["f_silk"])||ht(k,["top","silk"]),r=St(k,[".gbo"])||ht(k,["b_silks"])||ht(k,["b_silk"])||ht(k,["bottom","silk"]),o=St(k,[".gko",".gm1"])||ht(k,["edge","cuts"])||ht(k,["outline"])||ht(k,["board","outline"]),b=St(k,[".drl",".xln"])||ht(k,["drill"])||ht(k,["drills"])||ht(k,["npth"])||ht(k,["pth"]);return{top_copper:a,bottom_copper:v,top_mask:m,bottom_mask:l,top_silk:i,bottom_silk:r,outline:o,drills:b}}const te=.8;function At(M,k,a){const v={unitScale:1,fmtInt:2,fmtDec:4,x:0,y:0,apertures:new Map,currentAperture:null,inRegion:!1,regionPaths:[],currentPath:[],tracks:[],arcs:[],flashes:[],regions:[]},m=k.split(/\r?\n/);for(const l of m){let i=l.trim();if(i&&!i.startsWith("G04")){if(i.startsWith("%")&&i.endsWith("%")){ee(i,v);continue}i.endsWith("*")&&(i=i.slice(0,-1)),re(i,v)}}return v.inRegion&&(v.currentPath.length>=3&&v.regionPaths.push(v.currentPath),v.regionPaths.length>0&&v.regions.push({boundary:v.regionPaths[0],holes:v.regionPaths.slice(1)}),v.inRegion=!1,v.regionPaths=[],v.currentPath=[]),{tracks:v.tracks,arcs:v.arcs,flashes:v.flashes,regions:v.regions}}function ee(M,k){let a=M;if(a.startsWith("%")&&(a=a.slice(1)),a.endsWith("%")&&(a=a.slice(0,-1)),a.endsWith("*")&&(a=a.slice(0,-1)),a.startsWith("FS")){const v=/FS..X(\d)(\d)Y(\d)(\d)/.exec(a);if(v){const m=parseInt(v[1],10),l=parseInt(v[2],10);parseInt(v[4],10),k.fmtInt=m,k.fmtDec=l}return}if(a.startsWith("MO")){const v=k.unitScale;let m=v;if(a.includes("MOMM")?m=1:a.includes("MOIN")&&(m=25.4),m!==v){const l=m/v;for(const i of k.apertures.values())i.diameterMm!==void 0&&(i.diameterMm*=l),i.widthMm!==void 0&&(i.widthMm*=l),i.heightMm!==void 0&&(i.heightMm*=l);k.unitScale=m}return}if(a.startsWith("AD")){const v=/AD(D?)(\d+)([A-Z]),?([0-9.Xx]*)/.exec(a);if(!v)return;const m=parseInt(v[2],10),l=v[3],i=v[4]??"";let r,o,b;if(i){const _=i.split(/[Xx]/),d=_[0]?parseFloat(_[0])*k.unitScale:void 0,s=_[1]?parseFloat(_[1])*k.unitScale:void 0;l==="C"?r=d:l==="R"||l==="O"?(o=d,b=s,d!==void 0&&s!==void 0?r=Math.min(d,s):r=d??s):r=d??s}const y={code:m,shape:l,diameterMm:r,widthMm:o,heightMm:b};k.apertures.set(m,y);return}}function re(M,k){if(M==="G36"){k.inRegion=!0,k.regionPaths=[],k.currentPath=[];return}if(M==="G37"){k.currentPath.length>=3&&k.regionPaths.push(k.currentPath),k.inRegion=!1,k.regionPaths.length>0&&k.regions.push({boundary:k.regionPaths[0],holes:k.regionPaths.slice(1)}),k.regionPaths=[],k.currentPath=[];return}let a=null;const v=/D0?(\d{1,3})$/.exec(M);if(v&&(a=parseInt(v[1],10),M=M.slice(0,M.length-v[0].length)),a!==null&&a>=10){const y=k.apertures.get(a);y&&(k.currentAperture=y);return}const m=/X([+\-]?\d+)/.exec(M),l=/Y([+\-]?\d+)/.exec(M);let i=k.x,r=k.y;if(m&&(i=Wt(m[1],k)),l&&(r=Wt(l[1],k)),a===null){k.x=i,k.y=r;return}if(k.inRegion){const y=k.x,_=k.y;a===1?(k.currentPath.length===0&&k.currentPath.push({x:y,y:_}),k.currentPath.push({x:i,y:r})):a===2&&(k.currentPath.length>=3&&k.regionPaths.push(k.currentPath),k.currentPath=[]),k.x=i,k.y=r;return}const o=k.x,b=k.y;if(a===1){if(!k.currentAperture){k.x=i,k.y=r;return}const y=k.currentAperture.diameterMm!==void 0?k.currentAperture.diameterMm:.2;k.tracks.push({start:{x:o,y:b},end:{x:i,y:r},width:y}),k.x=i,k.y=r;return}if(a===2){k.x=i,k.y=r;return}if(a===3){if(k.currentAperture){const y=k.currentAperture,_=y.diameterMm!==void 0?y.diameterMm:te,d={position:{x:i,y:r},diameterMm:_,shape:y.shape};y.widthMm!==void 0&&(d.widthMm=y.widthMm),y.heightMm!==void 0&&(d.heightMm=y.heightMm),k.flashes.push(d)}k.x=i,k.y=r;return}}function Wt(M,k){const a=M.startsWith("-")?-1:1,v=M.replace(/[+\-]/g,""),m=parseInt(v,10);if(Number.isNaN(m))return 0;const l=Math.pow(10,k.fmtDec),i=m/l*k.unitScale;return a*i}function ne(M,k){const a=k.split(/\r?\n/),v=new Map;let m=null;const l=[];for(const i of a){const r=i.trim();if(r&&!r.startsWith(";")){if(r.startsWith("T")&&r.includes("C")){const o=/^T(\d+)[C]([\d.]+)/i.exec(r);if(o){const b=o[1],y=parseFloat(o[2]);Number.isNaN(y)||v.set(b,y)}continue}if(r.startsWith("T")&&!r.includes("C")){const o=/^T(\d+)/i.exec(r);o&&(m=o[1]);continue}if(r[0]==="X"||r.includes("X")){const o=/X([\-0-9.]+)Y([\-0-9.]+)/i.exec(r);if(!o)continue;const b=o[1],y=o[2],_=parseFloat(b),d=parseFloat(y);if(Number.isNaN(_)||Number.isNaN(d))continue;const s=m&&v.has(m)?v.get(m):.6;l.push({x:_,y:d,diameter:s,plated:!0});continue}}}return{name:M,holes:l}}function ie(M){return{w:M.maxX-M.minX,h:M.maxY-M.minY}}function It(M){const{w:k,h:a}=ie(M);return Number.isFinite(k)&&Number.isFinite(a)&&k>1&&a>1&&k<2e3&&a<2e3}function Et(M,k){if(!Number.isFinite(M)||!Number.isFinite(k)||M<=0||k<=0)return 1;const a=M/k;return a>20&&a<35?1/25.4:a>.02&&a<.06?25.4:1}function Bt(M,k){return k===1?M:{...M,tracks:M.tracks.map(a=>({...a,start:{x:a.start.x*k,y:a.start.y*k},end:{x:a.end.x*k,y:a.end.y*k},width:(a.width??0)*k})),flashes:M.flashes.map(a=>({...a,position:{x:a.position.x*k,y:a.position.y*k},diameterMm:(a.diameterMm??0)*k,widthMm:(a.widthMm??0)*k,heightMm:(a.heightMm??0)*k})),regions:M.regions.map(a=>({...a,boundary:a.boundary.map(v=>({x:v.x*k,y:v.y*k})),holes:a.holes.map(v=>v.map(m=>({x:m.x*k,y:m.y*k})))}))}}function se(M,k){return k===1?M:M.map(a=>({x:a.x*k,y:a.y*k,diameter:(a.diameter??0)*k}))}function ae(M){return URL.createObjectURL(new Blob([M],{type:"image/svg+xml"}))}function gt(M,k,a){M.minX=Math.min(M.minX,k),M.minY=Math.min(M.minY,a),M.maxX=Math.max(M.maxX,k),M.maxY=Math.max(M.maxY,a)}function Lt(){return{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Ct(M){const k=Lt();for(const a of M.tracks){gt(k,a.start.x,a.start.y),gt(k,a.end.x,a.end.y);const v=(a.width??0)/2;gt(k,a.start.x-v,a.start.y-v),gt(k,a.start.x+v,a.start.y+v),gt(k,a.end.x-v,a.end.y-v),gt(k,a.end.x+v,a.end.y+v)}for(const a of M.flashes){const v=(a.widthMm??a.diameterMm)||0,m=(a.heightMm??a.diameterMm)||0;gt(k,a.position.x-v/2,a.position.y-m/2),gt(k,a.position.x+v/2,a.position.y+m/2)}for(const a of M.regions){for(const v of a.boundary)gt(k,v.x,v.y);for(const v of a.holes)for(const m of v)gt(k,m.x,m.y)}return k}function oe(M){const k=Lt();for(const a of M){const v=(a.diameter||0)/2;gt(k,a.x-v,a.y-v),gt(k,a.x+v,a.y+v)}return k}function Xt(M,k){return{minX:Math.min(M.minX,k.minX),minY:Math.min(M.minY,k.minY),maxX:Math.max(M.maxX,k.maxX),maxY:Math.max(M.maxY,k.maxY)}}function yt(M){return!Number.isFinite(M.minX)||!Number.isFinite(M.minY)||!Number.isFinite(M.maxX)||!Number.isFinite(M.maxY)?{minX:0,minY:0,maxX:80,maxY:60}:(M.maxX-M.minX<1e-6&&(M.maxX=M.minX+1),M.maxY-M.minY<1e-6&&(M.maxY=M.minY+1),M)}const le=1e3;function _t(M){return M/25.4*le}function vt(M,k,a){const v=M-a.minX,m=a.maxY-k;return{x:v,y:m}}function Zt(M,k){return`
|
|
3
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="${
|
|
4
|
-
<rect width="${
|
|
5
|
-
</svg>`.trim()}function
|
|
6
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="${
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
(function(ft,Rt){typeof exports=="object"&&typeof module<"u"?Rt(exports):typeof define=="function"&&define.amd?define(["exports"],Rt):(ft=typeof globalThis<"u"?globalThis:ft||self,Rt(ft.GerbersRenderer={}))})(this,(function(ft){"use strict";var Rt=typeof document<"u"?document.currentScript:null,Ft=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function wi(o){return o&&o.__esModule&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o}function Ct(o){throw new Error('Could not dynamically require "'+o+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Ot={exports:{}};var li;function Ui(){return li||(li=1,(function(o,n){(function(i){o.exports=i()})(function(){return(function i(h,u,a){function r(S,f){if(!u[S]){if(!h[S]){var b=typeof Ct=="function"&&Ct;if(!f&&b)return b(S,!0);if(e)return e(S,!0);var G=new Error("Cannot find module '"+S+"'");throw G.code="MODULE_NOT_FOUND",G}var c=u[S]={exports:{}};h[S][0].call(c.exports,function(y){var l=h[S][1][y];return r(l||y)},c,c.exports,i,h,u,a)}return u[S].exports}for(var e=typeof Ct=="function"&&Ct,d=0;d<a.length;d++)r(a[d]);return r})({1:[function(i,h,u){var a=i("./utils"),r=i("./support"),e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";u.encode=function(d){for(var S,f,b,G,c,y,l,Z=[],m=0,W=d.length,I=W,x=a.getTypeOf(d)!=="string";m<d.length;)I=W-m,b=x?(S=d[m++],f=m<W?d[m++]:0,m<W?d[m++]:0):(S=d.charCodeAt(m++),f=m<W?d.charCodeAt(m++):0,m<W?d.charCodeAt(m++):0),G=S>>2,c=(3&S)<<4|f>>4,y=1<I?(15&f)<<2|b>>6:64,l=2<I?63&b:64,Z.push(e.charAt(G)+e.charAt(c)+e.charAt(y)+e.charAt(l));return Z.join("")},u.decode=function(d){var S,f,b,G,c,y,l=0,Z=0,m="data:";if(d.substr(0,m.length)===m)throw new Error("Invalid base64 input, it looks like a data url.");var W,I=3*(d=d.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(d.charAt(d.length-1)===e.charAt(64)&&I--,d.charAt(d.length-2)===e.charAt(64)&&I--,I%1!=0)throw new Error("Invalid base64 input, bad content length.");for(W=r.uint8array?new Uint8Array(0|I):new Array(0|I);l<d.length;)S=e.indexOf(d.charAt(l++))<<2|(G=e.indexOf(d.charAt(l++)))>>4,f=(15&G)<<4|(c=e.indexOf(d.charAt(l++)))>>2,b=(3&c)<<6|(y=e.indexOf(d.charAt(l++))),W[Z++]=S,c!==64&&(W[Z++]=f),y!==64&&(W[Z++]=b);return W}},{"./support":30,"./utils":32}],2:[function(i,h,u){var a=i("./external"),r=i("./stream/DataWorker"),e=i("./stream/Crc32Probe"),d=i("./stream/DataLengthProbe");function S(f,b,G,c,y){this.compressedSize=f,this.uncompressedSize=b,this.crc32=G,this.compression=c,this.compressedContent=y}S.prototype={getContentWorker:function(){var f=new r(a.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new d("data_length")),b=this;return f.on("end",function(){if(this.streamInfo.data_length!==b.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),f},getCompressedWorker:function(){return new r(a.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},S.createWorkerFrom=function(f,b,G){return f.pipe(new e).pipe(new d("uncompressedSize")).pipe(b.compressWorker(G)).pipe(new d("compressedSize")).withStreamInfo("compression",b)},h.exports=S},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(i,h,u){var a=i("./stream/GenericWorker");u.STORE={magic:"\0\0",compressWorker:function(){return new a("STORE compression")},uncompressWorker:function(){return new a("STORE decompression")}},u.DEFLATE=i("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(i,h,u){var a=i("./utils"),r=(function(){for(var e,d=[],S=0;S<256;S++){e=S;for(var f=0;f<8;f++)e=1&e?3988292384^e>>>1:e>>>1;d[S]=e}return d})();h.exports=function(e,d){return e!==void 0&&e.length?a.getTypeOf(e)!=="string"?(function(S,f,b,G){var c=r,y=G+b;S^=-1;for(var l=G;l<y;l++)S=S>>>8^c[255&(S^f[l])];return-1^S})(0|d,e,e.length,0):(function(S,f,b,G){var c=r,y=G+b;S^=-1;for(var l=G;l<y;l++)S=S>>>8^c[255&(S^f.charCodeAt(l))];return-1^S})(0|d,e,e.length,0):0}},{"./utils":32}],5:[function(i,h,u){u.base64=!1,u.binary=!1,u.dir=!1,u.createFolders=!0,u.date=null,u.compression=null,u.compressionOptions=null,u.comment=null,u.unixPermissions=null,u.dosPermissions=null},{}],6:[function(i,h,u){var a=null;a=typeof Promise<"u"?Promise:i("lie"),h.exports={Promise:a}},{lie:37}],7:[function(i,h,u){var a=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",r=i("pako"),e=i("./utils"),d=i("./stream/GenericWorker"),S=a?"uint8array":"array";function f(b,G){d.call(this,"FlateWorker/"+b),this._pako=null,this._pakoAction=b,this._pakoOptions=G,this.meta={}}u.magic="\b\0",e.inherits(f,d),f.prototype.processChunk=function(b){this.meta=b.meta,this._pako===null&&this._createPako(),this._pako.push(e.transformTo(S,b.data),!1)},f.prototype.flush=function(){d.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},f.prototype.cleanUp=function(){d.prototype.cleanUp.call(this),this._pako=null},f.prototype._createPako=function(){this._pako=new r[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var b=this;this._pako.onData=function(G){b.push({data:G,meta:b.meta})}},u.compressWorker=function(b){return new f("Deflate",b)},u.uncompressWorker=function(){return new f("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(i,h,u){function a(c,y){var l,Z="";for(l=0;l<y;l++)Z+=String.fromCharCode(255&c),c>>>=8;return Z}function r(c,y,l,Z,m,W){var I,x,V=c.file,J=c.compression,Y=W!==S.utf8encode,T=e.transformTo("string",W(V.name)),L=e.transformTo("string",S.utf8encode(V.name)),P=V.comment,A=e.transformTo("string",W(P)),g=e.transformTo("string",S.utf8encode(P)),z=L.length!==V.name.length,s=g.length!==P.length,F="",tt="",N="",it=V.dir,M=V.date,$={crc32:0,compressedSize:0,uncompressedSize:0};y&&!l||($.crc32=c.crc32,$.compressedSize=c.compressedSize,$.uncompressedSize=c.uncompressedSize);var w=0;y&&(w|=8),Y||!z&&!s||(w|=2048);var v=0,Q=0;it&&(v|=16),m==="UNIX"?(Q=798,v|=(function(j,dt){var ht=j;return j||(ht=dt?16893:33204),(65535&ht)<<16})(V.unixPermissions,it)):(Q=20,v|=(function(j){return 63&(j||0)})(V.dosPermissions)),I=M.getUTCHours(),I<<=6,I|=M.getUTCMinutes(),I<<=5,I|=M.getUTCSeconds()/2,x=M.getUTCFullYear()-1980,x<<=4,x|=M.getUTCMonth()+1,x<<=5,x|=M.getUTCDate(),z&&(tt=a(1,1)+a(f(T),4)+L,F+="up"+a(tt.length,2)+tt),s&&(N=a(1,1)+a(f(A),4)+g,F+="uc"+a(N.length,2)+N);var O="";return O+=`
|
|
2
|
+
\0`,O+=a(w,2),O+=J.magic,O+=a(I,2),O+=a(x,2),O+=a($.crc32,4),O+=a($.compressedSize,4),O+=a($.uncompressedSize,4),O+=a(T.length,2),O+=a(F.length,2),{fileRecord:b.LOCAL_FILE_HEADER+O+T+F,dirRecord:b.CENTRAL_FILE_HEADER+a(Q,2)+O+a(A.length,2)+"\0\0\0\0"+a(v,4)+a(Z,4)+T+F+A}}var e=i("../utils"),d=i("../stream/GenericWorker"),S=i("../utf8"),f=i("../crc32"),b=i("../signature");function G(c,y,l,Z){d.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=y,this.zipPlatform=l,this.encodeFileName=Z,this.streamFiles=c,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}e.inherits(G,d),G.prototype.push=function(c){var y=c.meta.percent||0,l=this.entriesCount,Z=this._sources.length;this.accumulate?this.contentBuffer.push(c):(this.bytesWritten+=c.data.length,d.prototype.push.call(this,{data:c.data,meta:{currentFile:this.currentFile,percent:l?(y+100*(l-Z-1))/l:100}}))},G.prototype.openedSource=function(c){this.currentSourceOffset=this.bytesWritten,this.currentFile=c.file.name;var y=this.streamFiles&&!c.file.dir;if(y){var l=r(c,y,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:l.fileRecord,meta:{percent:0}})}else this.accumulate=!0},G.prototype.closedSource=function(c){this.accumulate=!1;var y=this.streamFiles&&!c.file.dir,l=r(c,y,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(l.dirRecord),y)this.push({data:(function(Z){return b.DATA_DESCRIPTOR+a(Z.crc32,4)+a(Z.compressedSize,4)+a(Z.uncompressedSize,4)})(c),meta:{percent:100}});else for(this.push({data:l.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},G.prototype.flush=function(){for(var c=this.bytesWritten,y=0;y<this.dirRecords.length;y++)this.push({data:this.dirRecords[y],meta:{percent:100}});var l=this.bytesWritten-c,Z=(function(m,W,I,x,V){var J=e.transformTo("string",V(x));return b.CENTRAL_DIRECTORY_END+"\0\0\0\0"+a(m,2)+a(m,2)+a(W,4)+a(I,4)+a(J.length,2)+J})(this.dirRecords.length,l,c,this.zipComment,this.encodeFileName);this.push({data:Z,meta:{percent:100}})},G.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},G.prototype.registerPrevious=function(c){this._sources.push(c);var y=this;return c.on("data",function(l){y.processChunk(l)}),c.on("end",function(){y.closedSource(y.previous.streamInfo),y._sources.length?y.prepareNextSource():y.end()}),c.on("error",function(l){y.error(l)}),this},G.prototype.resume=function(){return!!d.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},G.prototype.error=function(c){var y=this._sources;if(!d.prototype.error.call(this,c))return!1;for(var l=0;l<y.length;l++)try{y[l].error(c)}catch{}return!0},G.prototype.lock=function(){d.prototype.lock.call(this);for(var c=this._sources,y=0;y<c.length;y++)c[y].lock()},h.exports=G},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(i,h,u){var a=i("../compressions"),r=i("./ZipFileWorker");u.generateWorker=function(e,d,S){var f=new r(d.streamFiles,S,d.platform,d.encodeFileName),b=0;try{e.forEach(function(G,c){b++;var y=(function(W,I){var x=W||I,V=a[x];if(!V)throw new Error(x+" is not a valid compression method !");return V})(c.options.compression,d.compression),l=c.options.compressionOptions||d.compressionOptions||{},Z=c.dir,m=c.date;c._compressWorker(y,l).withStreamInfo("file",{name:G,dir:Z,date:m,comment:c.comment||"",unixPermissions:c.unixPermissions,dosPermissions:c.dosPermissions}).pipe(f)}),f.entriesCount=b}catch(G){f.error(G)}return f}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(i,h,u){function a(){if(!(this instanceof a))return new a;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var r=new a;for(var e in this)typeof this[e]!="function"&&(r[e]=this[e]);return r}}(a.prototype=i("./object")).loadAsync=i("./load"),a.support=i("./support"),a.defaults=i("./defaults"),a.version="3.10.1",a.loadAsync=function(r,e){return new a().loadAsync(r,e)},a.external=i("./external"),h.exports=a},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(i,h,u){var a=i("./utils"),r=i("./external"),e=i("./utf8"),d=i("./zipEntries"),S=i("./stream/Crc32Probe"),f=i("./nodejsUtils");function b(G){return new r.Promise(function(c,y){var l=G.decompressed.getContentWorker().pipe(new S);l.on("error",function(Z){y(Z)}).on("end",function(){l.streamInfo.crc32!==G.decompressed.crc32?y(new Error("Corrupted zip : CRC32 mismatch")):c()}).resume()})}h.exports=function(G,c){var y=this;return c=a.extend(c||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:e.utf8decode}),f.isNode&&f.isStream(G)?r.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):a.prepareContent("the loaded zip file",G,!0,c.optimizedBinaryString,c.base64).then(function(l){var Z=new d(c);return Z.load(l),Z}).then(function(l){var Z=[r.Promise.resolve(l)],m=l.files;if(c.checkCRC32)for(var W=0;W<m.length;W++)Z.push(b(m[W]));return r.Promise.all(Z)}).then(function(l){for(var Z=l.shift(),m=Z.files,W=0;W<m.length;W++){var I=m[W],x=I.fileNameStr,V=a.resolve(I.fileNameStr);y.file(V,I.decompressed,{binary:!0,optimizedBinaryString:!0,date:I.date,dir:I.dir,comment:I.fileCommentStr.length?I.fileCommentStr:null,unixPermissions:I.unixPermissions,dosPermissions:I.dosPermissions,createFolders:c.createFolders}),I.dir||(y.file(V).unsafeOriginalName=x)}return Z.zipComment.length&&(y.comment=Z.zipComment),y})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(i,h,u){var a=i("../utils"),r=i("../stream/GenericWorker");function e(d,S){r.call(this,"Nodejs stream input adapter for "+d),this._upstreamEnded=!1,this._bindStream(S)}a.inherits(e,r),e.prototype._bindStream=function(d){var S=this;(this._stream=d).pause(),d.on("data",function(f){S.push({data:f,meta:{percent:0}})}).on("error",function(f){S.isPaused?this.generatedError=f:S.error(f)}).on("end",function(){S.isPaused?S._upstreamEnded=!0:S.end()})},e.prototype.pause=function(){return!!r.prototype.pause.call(this)&&(this._stream.pause(),!0)},e.prototype.resume=function(){return!!r.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},h.exports=e},{"../stream/GenericWorker":28,"../utils":32}],13:[function(i,h,u){var a=i("readable-stream").Readable;function r(e,d,S){a.call(this,d),this._helper=e;var f=this;e.on("data",function(b,G){f.push(b)||f._helper.pause(),S&&S(G)}).on("error",function(b){f.emit("error",b)}).on("end",function(){f.push(null)})}i("../utils").inherits(r,a),r.prototype._read=function(){this._helper.resume()},h.exports=r},{"../utils":32,"readable-stream":16}],14:[function(i,h,u){h.exports={isNode:typeof Buffer<"u",newBufferFrom:function(a,r){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(a,r);if(typeof a=="number")throw new Error('The "data" argument must not be a number');return new Buffer(a,r)},allocBuffer:function(a){if(Buffer.alloc)return Buffer.alloc(a);var r=new Buffer(a);return r.fill(0),r},isBuffer:function(a){return Buffer.isBuffer(a)},isStream:function(a){return a&&typeof a.on=="function"&&typeof a.pause=="function"&&typeof a.resume=="function"}}},{}],15:[function(i,h,u){function a(V,J,Y){var T,L=e.getTypeOf(J),P=e.extend(Y||{},f);P.date=P.date||new Date,P.compression!==null&&(P.compression=P.compression.toUpperCase()),typeof P.unixPermissions=="string"&&(P.unixPermissions=parseInt(P.unixPermissions,8)),P.unixPermissions&&16384&P.unixPermissions&&(P.dir=!0),P.dosPermissions&&16&P.dosPermissions&&(P.dir=!0),P.dir&&(V=m(V)),P.createFolders&&(T=Z(V))&&W.call(this,T,!0);var A=L==="string"&&P.binary===!1&&P.base64===!1;Y&&Y.binary!==void 0||(P.binary=!A),(J instanceof b&&J.uncompressedSize===0||P.dir||!J||J.length===0)&&(P.base64=!1,P.binary=!0,J="",P.compression="STORE",L="string");var g=null;g=J instanceof b||J instanceof d?J:y.isNode&&y.isStream(J)?new l(V,J):e.prepareContent(V,J,P.binary,P.optimizedBinaryString,P.base64);var z=new G(V,g,P);this.files[V]=z}var r=i("./utf8"),e=i("./utils"),d=i("./stream/GenericWorker"),S=i("./stream/StreamHelper"),f=i("./defaults"),b=i("./compressedObject"),G=i("./zipObject"),c=i("./generate"),y=i("./nodejsUtils"),l=i("./nodejs/NodejsStreamInputAdapter"),Z=function(V){V.slice(-1)==="/"&&(V=V.substring(0,V.length-1));var J=V.lastIndexOf("/");return 0<J?V.substring(0,J):""},m=function(V){return V.slice(-1)!=="/"&&(V+="/"),V},W=function(V,J){return J=J!==void 0?J:f.createFolders,V=m(V),this.files[V]||a.call(this,V,null,{dir:!0,createFolders:J}),this.files[V]};function I(V){return Object.prototype.toString.call(V)==="[object RegExp]"}var x={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(V){var J,Y,T;for(J in this.files)T=this.files[J],(Y=J.slice(this.root.length,J.length))&&J.slice(0,this.root.length)===this.root&&V(Y,T)},filter:function(V){var J=[];return this.forEach(function(Y,T){V(Y,T)&&J.push(T)}),J},file:function(V,J,Y){if(arguments.length!==1)return V=this.root+V,a.call(this,V,J,Y),this;if(I(V)){var T=V;return this.filter(function(P,A){return!A.dir&&T.test(P)})}var L=this.files[this.root+V];return L&&!L.dir?L:null},folder:function(V){if(!V)return this;if(I(V))return this.filter(function(L,P){return P.dir&&V.test(L)});var J=this.root+V,Y=W.call(this,J),T=this.clone();return T.root=Y.name,T},remove:function(V){V=this.root+V;var J=this.files[V];if(J||(V.slice(-1)!=="/"&&(V+="/"),J=this.files[V]),J&&!J.dir)delete this.files[V];else for(var Y=this.filter(function(L,P){return P.name.slice(0,V.length)===V}),T=0;T<Y.length;T++)delete this.files[Y[T].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(V){var J,Y={};try{if((Y=e.extend(V||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:r.utf8encode})).type=Y.type.toLowerCase(),Y.compression=Y.compression.toUpperCase(),Y.type==="binarystring"&&(Y.type="string"),!Y.type)throw new Error("No output type specified.");e.checkSupport(Y.type),Y.platform!=="darwin"&&Y.platform!=="freebsd"&&Y.platform!=="linux"&&Y.platform!=="sunos"||(Y.platform="UNIX"),Y.platform==="win32"&&(Y.platform="DOS");var T=Y.comment||this.comment||"";J=c.generateWorker(this,Y,T)}catch(L){(J=new d("error")).error(L)}return new S(J,Y.type||"string",Y.mimeType)},generateAsync:function(V,J){return this.generateInternalStream(V).accumulate(J)},generateNodeStream:function(V,J){return(V=V||{}).type||(V.type="nodebuffer"),this.generateInternalStream(V).toNodejsStream(J)}};h.exports=x},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(i,h,u){h.exports=i("stream")},{stream:void 0}],17:[function(i,h,u){var a=i("./DataReader");function r(e){a.call(this,e);for(var d=0;d<this.data.length;d++)e[d]=255&e[d]}i("../utils").inherits(r,a),r.prototype.byteAt=function(e){return this.data[this.zero+e]},r.prototype.lastIndexOfSignature=function(e){for(var d=e.charCodeAt(0),S=e.charCodeAt(1),f=e.charCodeAt(2),b=e.charCodeAt(3),G=this.length-4;0<=G;--G)if(this.data[G]===d&&this.data[G+1]===S&&this.data[G+2]===f&&this.data[G+3]===b)return G-this.zero;return-1},r.prototype.readAndCheckSignature=function(e){var d=e.charCodeAt(0),S=e.charCodeAt(1),f=e.charCodeAt(2),b=e.charCodeAt(3),G=this.readData(4);return d===G[0]&&S===G[1]&&f===G[2]&&b===G[3]},r.prototype.readData=function(e){if(this.checkOffset(e),e===0)return[];var d=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,d},h.exports=r},{"../utils":32,"./DataReader":18}],18:[function(i,h,u){var a=i("../utils");function r(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}r.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+e+"). Corrupted zip ?")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var d,S=0;for(this.checkOffset(e),d=this.index+e-1;d>=this.index;d--)S=(S<<8)+this.byteAt(d);return this.index+=e,S},readString:function(e){return a.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},h.exports=r},{"../utils":32}],19:[function(i,h,u){var a=i("./Uint8ArrayReader");function r(e){a.call(this,e)}i("../utils").inherits(r,a),r.prototype.readData=function(e){this.checkOffset(e);var d=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,d},h.exports=r},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(i,h,u){var a=i("./DataReader");function r(e){a.call(this,e)}i("../utils").inherits(r,a),r.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},r.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},r.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},r.prototype.readData=function(e){this.checkOffset(e);var d=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,d},h.exports=r},{"../utils":32,"./DataReader":18}],21:[function(i,h,u){var a=i("./ArrayReader");function r(e){a.call(this,e)}i("../utils").inherits(r,a),r.prototype.readData=function(e){if(this.checkOffset(e),e===0)return new Uint8Array(0);var d=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,d},h.exports=r},{"../utils":32,"./ArrayReader":17}],22:[function(i,h,u){var a=i("../utils"),r=i("../support"),e=i("./ArrayReader"),d=i("./StringReader"),S=i("./NodeBufferReader"),f=i("./Uint8ArrayReader");h.exports=function(b){var G=a.getTypeOf(b);return a.checkSupport(G),G!=="string"||r.uint8array?G==="nodebuffer"?new S(b):r.uint8array?new f(a.transformTo("uint8array",b)):new e(a.transformTo("array",b)):new d(b)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(i,h,u){u.LOCAL_FILE_HEADER="PK",u.CENTRAL_FILE_HEADER="PK",u.CENTRAL_DIRECTORY_END="PK",u.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",u.ZIP64_CENTRAL_DIRECTORY_END="PK",u.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(i,h,u){var a=i("./GenericWorker"),r=i("../utils");function e(d){a.call(this,"ConvertWorker to "+d),this.destType=d}r.inherits(e,a),e.prototype.processChunk=function(d){this.push({data:r.transformTo(this.destType,d.data),meta:d.meta})},h.exports=e},{"../utils":32,"./GenericWorker":28}],25:[function(i,h,u){var a=i("./GenericWorker"),r=i("../crc32");function e(){a.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}i("../utils").inherits(e,a),e.prototype.processChunk=function(d){this.streamInfo.crc32=r(d.data,this.streamInfo.crc32||0),this.push(d)},h.exports=e},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(i,h,u){var a=i("../utils"),r=i("./GenericWorker");function e(d){r.call(this,"DataLengthProbe for "+d),this.propName=d,this.withStreamInfo(d,0)}a.inherits(e,r),e.prototype.processChunk=function(d){if(d){var S=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=S+d.data.length}r.prototype.processChunk.call(this,d)},h.exports=e},{"../utils":32,"./GenericWorker":28}],27:[function(i,h,u){var a=i("../utils"),r=i("./GenericWorker");function e(d){r.call(this,"DataWorker");var S=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,d.then(function(f){S.dataIsReady=!0,S.data=f,S.max=f&&f.length||0,S.type=a.getTypeOf(f),S.isPaused||S._tickAndRepeat()},function(f){S.error(f)})}a.inherits(e,r),e.prototype.cleanUp=function(){r.prototype.cleanUp.call(this),this.data=null},e.prototype.resume=function(){return!!r.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,a.delay(this._tickAndRepeat,[],this)),!0)},e.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(a.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},e.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var d=null,S=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":d=this.data.substring(this.index,S);break;case"uint8array":d=this.data.subarray(this.index,S);break;case"array":case"nodebuffer":d=this.data.slice(this.index,S)}return this.index=S,this.push({data:d,meta:{percent:this.max?this.index/this.max*100:0}})},h.exports=e},{"../utils":32,"./GenericWorker":28}],28:[function(i,h,u){function a(r){this.name=r||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}a.prototype={push:function(r){this.emit("data",r)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(r){this.emit("error",r)}return!0},error:function(r){return!this.isFinished&&(this.isPaused?this.generatedError=r:(this.isFinished=!0,this.emit("error",r),this.previous&&this.previous.error(r),this.cleanUp()),!0)},on:function(r,e){return this._listeners[r].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(r,e){if(this._listeners[r])for(var d=0;d<this._listeners[r].length;d++)this._listeners[r][d].call(this,e)},pipe:function(r){return r.registerPrevious(this)},registerPrevious:function(r){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=r.streamInfo,this.mergeStreamInfo(),this.previous=r;var e=this;return r.on("data",function(d){e.processChunk(d)}),r.on("end",function(){e.end()}),r.on("error",function(d){e.error(d)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var r=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),r=!0),this.previous&&this.previous.resume(),!r},flush:function(){},processChunk:function(r){this.push(r)},withStreamInfo:function(r,e){return this.extraStreamInfo[r]=e,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var r in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,r)&&(this.streamInfo[r]=this.extraStreamInfo[r])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var r="Worker "+this.name;return this.previous?this.previous+" -> "+r:r}},h.exports=a},{}],29:[function(i,h,u){var a=i("../utils"),r=i("./ConvertWorker"),e=i("./GenericWorker"),d=i("../base64"),S=i("../support"),f=i("../external"),b=null;if(S.nodestream)try{b=i("../nodejs/NodejsStreamOutputAdapter")}catch{}function G(y,l){return new f.Promise(function(Z,m){var W=[],I=y._internalType,x=y._outputType,V=y._mimeType;y.on("data",function(J,Y){W.push(J),l&&l(Y)}).on("error",function(J){W=[],m(J)}).on("end",function(){try{var J=(function(Y,T,L){switch(Y){case"blob":return a.newBlob(a.transformTo("arraybuffer",T),L);case"base64":return d.encode(T);default:return a.transformTo(Y,T)}})(x,(function(Y,T){var L,P=0,A=null,g=0;for(L=0;L<T.length;L++)g+=T[L].length;switch(Y){case"string":return T.join("");case"array":return Array.prototype.concat.apply([],T);case"uint8array":for(A=new Uint8Array(g),L=0;L<T.length;L++)A.set(T[L],P),P+=T[L].length;return A;case"nodebuffer":return Buffer.concat(T);default:throw new Error("concat : unsupported type '"+Y+"'")}})(I,W),V);Z(J)}catch(Y){m(Y)}W=[]}).resume()})}function c(y,l,Z){var m=l;switch(l){case"blob":case"arraybuffer":m="uint8array";break;case"base64":m="string"}try{this._internalType=m,this._outputType=l,this._mimeType=Z,a.checkSupport(m),this._worker=y.pipe(new r(m)),y.lock()}catch(W){this._worker=new e("error"),this._worker.error(W)}}c.prototype={accumulate:function(y){return G(this,y)},on:function(y,l){var Z=this;return y==="data"?this._worker.on(y,function(m){l.call(Z,m.data,m.meta)}):this._worker.on(y,function(){a.delay(l,arguments,Z)}),this},resume:function(){return a.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(y){if(a.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new b(this,{objectMode:this._outputType!=="nodebuffer"},y)}},h.exports=c},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(i,h,u){if(u.base64=!0,u.array=!0,u.string=!0,u.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",u.nodebuffer=typeof Buffer<"u",u.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")u.blob=!1;else{var a=new ArrayBuffer(0);try{u.blob=new Blob([a],{type:"application/zip"}).size===0}catch{try{var r=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);r.append(a),u.blob=r.getBlob("application/zip").size===0}catch{u.blob=!1}}}try{u.nodestream=!!i("readable-stream").Readable}catch{u.nodestream=!1}},{"readable-stream":16}],31:[function(i,h,u){for(var a=i("./utils"),r=i("./support"),e=i("./nodejsUtils"),d=i("./stream/GenericWorker"),S=new Array(256),f=0;f<256;f++)S[f]=252<=f?6:248<=f?5:240<=f?4:224<=f?3:192<=f?2:1;S[254]=S[254]=1;function b(){d.call(this,"utf-8 decode"),this.leftOver=null}function G(){d.call(this,"utf-8 encode")}u.utf8encode=function(c){return r.nodebuffer?e.newBufferFrom(c,"utf-8"):(function(y){var l,Z,m,W,I,x=y.length,V=0;for(W=0;W<x;W++)(64512&(Z=y.charCodeAt(W)))==55296&&W+1<x&&(64512&(m=y.charCodeAt(W+1)))==56320&&(Z=65536+(Z-55296<<10)+(m-56320),W++),V+=Z<128?1:Z<2048?2:Z<65536?3:4;for(l=r.uint8array?new Uint8Array(V):new Array(V),W=I=0;I<V;W++)(64512&(Z=y.charCodeAt(W)))==55296&&W+1<x&&(64512&(m=y.charCodeAt(W+1)))==56320&&(Z=65536+(Z-55296<<10)+(m-56320),W++),Z<128?l[I++]=Z:(Z<2048?l[I++]=192|Z>>>6:(Z<65536?l[I++]=224|Z>>>12:(l[I++]=240|Z>>>18,l[I++]=128|Z>>>12&63),l[I++]=128|Z>>>6&63),l[I++]=128|63&Z);return l})(c)},u.utf8decode=function(c){return r.nodebuffer?a.transformTo("nodebuffer",c).toString("utf-8"):(function(y){var l,Z,m,W,I=y.length,x=new Array(2*I);for(l=Z=0;l<I;)if((m=y[l++])<128)x[Z++]=m;else if(4<(W=S[m]))x[Z++]=65533,l+=W-1;else{for(m&=W===2?31:W===3?15:7;1<W&&l<I;)m=m<<6|63&y[l++],W--;1<W?x[Z++]=65533:m<65536?x[Z++]=m:(m-=65536,x[Z++]=55296|m>>10&1023,x[Z++]=56320|1023&m)}return x.length!==Z&&(x.subarray?x=x.subarray(0,Z):x.length=Z),a.applyFromCharCode(x)})(c=a.transformTo(r.uint8array?"uint8array":"array",c))},a.inherits(b,d),b.prototype.processChunk=function(c){var y=a.transformTo(r.uint8array?"uint8array":"array",c.data);if(this.leftOver&&this.leftOver.length){if(r.uint8array){var l=y;(y=new Uint8Array(l.length+this.leftOver.length)).set(this.leftOver,0),y.set(l,this.leftOver.length)}else y=this.leftOver.concat(y);this.leftOver=null}var Z=(function(W,I){var x;for((I=I||W.length)>W.length&&(I=W.length),x=I-1;0<=x&&(192&W[x])==128;)x--;return x<0||x===0?I:x+S[W[x]]>I?x:I})(y),m=y;Z!==y.length&&(r.uint8array?(m=y.subarray(0,Z),this.leftOver=y.subarray(Z,y.length)):(m=y.slice(0,Z),this.leftOver=y.slice(Z,y.length))),this.push({data:u.utf8decode(m),meta:c.meta})},b.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:u.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},u.Utf8DecodeWorker=b,a.inherits(G,d),G.prototype.processChunk=function(c){this.push({data:u.utf8encode(c.data),meta:c.meta})},u.Utf8EncodeWorker=G},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(i,h,u){var a=i("./support"),r=i("./base64"),e=i("./nodejsUtils"),d=i("./external");function S(l){return l}function f(l,Z){for(var m=0;m<l.length;++m)Z[m]=255&l.charCodeAt(m);return Z}i("setimmediate"),u.newBlob=function(l,Z){u.checkSupport("blob");try{return new Blob([l],{type:Z})}catch{try{var m=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return m.append(l),m.getBlob(Z)}catch{throw new Error("Bug : can't construct the Blob.")}}};var b={stringifyByChunk:function(l,Z,m){var W=[],I=0,x=l.length;if(x<=m)return String.fromCharCode.apply(null,l);for(;I<x;)Z==="array"||Z==="nodebuffer"?W.push(String.fromCharCode.apply(null,l.slice(I,Math.min(I+m,x)))):W.push(String.fromCharCode.apply(null,l.subarray(I,Math.min(I+m,x)))),I+=m;return W.join("")},stringifyByChar:function(l){for(var Z="",m=0;m<l.length;m++)Z+=String.fromCharCode(l[m]);return Z},applyCanBeUsed:{uint8array:(function(){try{return a.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}})(),nodebuffer:(function(){try{return a.nodebuffer&&String.fromCharCode.apply(null,e.allocBuffer(1)).length===1}catch{return!1}})()}};function G(l){var Z=65536,m=u.getTypeOf(l),W=!0;if(m==="uint8array"?W=b.applyCanBeUsed.uint8array:m==="nodebuffer"&&(W=b.applyCanBeUsed.nodebuffer),W)for(;1<Z;)try{return b.stringifyByChunk(l,m,Z)}catch{Z=Math.floor(Z/2)}return b.stringifyByChar(l)}function c(l,Z){for(var m=0;m<l.length;m++)Z[m]=l[m];return Z}u.applyFromCharCode=G;var y={};y.string={string:S,array:function(l){return f(l,new Array(l.length))},arraybuffer:function(l){return y.string.uint8array(l).buffer},uint8array:function(l){return f(l,new Uint8Array(l.length))},nodebuffer:function(l){return f(l,e.allocBuffer(l.length))}},y.array={string:G,array:S,arraybuffer:function(l){return new Uint8Array(l).buffer},uint8array:function(l){return new Uint8Array(l)},nodebuffer:function(l){return e.newBufferFrom(l)}},y.arraybuffer={string:function(l){return G(new Uint8Array(l))},array:function(l){return c(new Uint8Array(l),new Array(l.byteLength))},arraybuffer:S,uint8array:function(l){return new Uint8Array(l)},nodebuffer:function(l){return e.newBufferFrom(new Uint8Array(l))}},y.uint8array={string:G,array:function(l){return c(l,new Array(l.length))},arraybuffer:function(l){return l.buffer},uint8array:S,nodebuffer:function(l){return e.newBufferFrom(l)}},y.nodebuffer={string:G,array:function(l){return c(l,new Array(l.length))},arraybuffer:function(l){return y.nodebuffer.uint8array(l).buffer},uint8array:function(l){return c(l,new Uint8Array(l.length))},nodebuffer:S},u.transformTo=function(l,Z){if(Z=Z||"",!l)return Z;u.checkSupport(l);var m=u.getTypeOf(Z);return y[m][l](Z)},u.resolve=function(l){for(var Z=l.split("/"),m=[],W=0;W<Z.length;W++){var I=Z[W];I==="."||I===""&&W!==0&&W!==Z.length-1||(I===".."?m.pop():m.push(I))}return m.join("/")},u.getTypeOf=function(l){return typeof l=="string"?"string":Object.prototype.toString.call(l)==="[object Array]"?"array":a.nodebuffer&&e.isBuffer(l)?"nodebuffer":a.uint8array&&l instanceof Uint8Array?"uint8array":a.arraybuffer&&l instanceof ArrayBuffer?"arraybuffer":void 0},u.checkSupport=function(l){if(!a[l.toLowerCase()])throw new Error(l+" is not supported by this platform")},u.MAX_VALUE_16BITS=65535,u.MAX_VALUE_32BITS=-1,u.pretty=function(l){var Z,m,W="";for(m=0;m<(l||"").length;m++)W+="\\x"+((Z=l.charCodeAt(m))<16?"0":"")+Z.toString(16).toUpperCase();return W},u.delay=function(l,Z,m){setImmediate(function(){l.apply(m||null,Z||[])})},u.inherits=function(l,Z){function m(){}m.prototype=Z.prototype,l.prototype=new m},u.extend=function(){var l,Z,m={};for(l=0;l<arguments.length;l++)for(Z in arguments[l])Object.prototype.hasOwnProperty.call(arguments[l],Z)&&m[Z]===void 0&&(m[Z]=arguments[l][Z]);return m},u.prepareContent=function(l,Z,m,W,I){return d.Promise.resolve(Z).then(function(x){return a.blob&&(x instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(x))!==-1)&&typeof FileReader<"u"?new d.Promise(function(V,J){var Y=new FileReader;Y.onload=function(T){V(T.target.result)},Y.onerror=function(T){J(T.target.error)},Y.readAsArrayBuffer(x)}):x}).then(function(x){var V=u.getTypeOf(x);return V?(V==="arraybuffer"?x=u.transformTo("uint8array",x):V==="string"&&(I?x=r.decode(x):m&&W!==!0&&(x=(function(J){return f(J,a.uint8array?new Uint8Array(J.length):new Array(J.length))})(x))),x):d.Promise.reject(new Error("Can't read the data of '"+l+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(i,h,u){var a=i("./reader/readerFor"),r=i("./utils"),e=i("./signature"),d=i("./zipEntry"),S=i("./support");function f(b){this.files=[],this.loadOptions=b}f.prototype={checkSignature:function(b){if(!this.reader.readAndCheckSignature(b)){this.reader.index-=4;var G=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+r.pretty(G)+", expected "+r.pretty(b)+")")}},isSignature:function(b,G){var c=this.reader.index;this.reader.setIndex(b);var y=this.reader.readString(4)===G;return this.reader.setIndex(c),y},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var b=this.reader.readData(this.zipCommentLength),G=S.uint8array?"uint8array":"array",c=r.transformTo(G,b);this.zipComment=this.loadOptions.decodeFileName(c)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var b,G,c,y=this.zip64EndOfCentralSize-44;0<y;)b=this.reader.readInt(2),G=this.reader.readInt(4),c=this.reader.readData(G),this.zip64ExtensibleData[b]={id:b,length:G,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var b,G;for(b=0;b<this.files.length;b++)G=this.files[b],this.reader.setIndex(G.localHeaderOffset),this.checkSignature(e.LOCAL_FILE_HEADER),G.readLocalPart(this.reader),G.handleUTF8(),G.processAttributes()},readCentralDir:function(){var b;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(e.CENTRAL_FILE_HEADER);)(b=new d({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(b);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var b=this.reader.lastIndexOfSignature(e.CENTRAL_DIRECTORY_END);if(b<0)throw this.isSignature(0,e.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(b);var G=b;if(this.checkSignature(e.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===r.MAX_VALUE_16BITS||this.diskWithCentralDirStart===r.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===r.MAX_VALUE_16BITS||this.centralDirRecords===r.MAX_VALUE_16BITS||this.centralDirSize===r.MAX_VALUE_32BITS||this.centralDirOffset===r.MAX_VALUE_32BITS){if(this.zip64=!0,(b=this.reader.lastIndexOfSignature(e.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(b),this.checkSignature(e.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,e.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(e.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(e.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var c=this.centralDirOffset+this.centralDirSize;this.zip64&&(c+=20,c+=12+this.zip64EndOfCentralSize);var y=G-c;if(0<y)this.isSignature(G,e.CENTRAL_FILE_HEADER)||(this.reader.zero=y);else if(y<0)throw new Error("Corrupted zip: missing "+Math.abs(y)+" bytes.")},prepareReader:function(b){this.reader=a(b)},load:function(b){this.prepareReader(b),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},h.exports=f},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(i,h,u){var a=i("./reader/readerFor"),r=i("./utils"),e=i("./compressedObject"),d=i("./crc32"),S=i("./utf8"),f=i("./compressions"),b=i("./support");function G(c,y){this.options=c,this.loadOptions=y}G.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(c){var y,l;if(c.skip(22),this.fileNameLength=c.readInt(2),l=c.readInt(2),this.fileName=c.readData(this.fileNameLength),c.skip(l),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((y=(function(Z){for(var m in f)if(Object.prototype.hasOwnProperty.call(f,m)&&f[m].magic===Z)return f[m];return null})(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+r.pretty(this.compressionMethod)+" unknown (inner file : "+r.transformTo("string",this.fileName)+")");this.decompressed=new e(this.compressedSize,this.uncompressedSize,this.crc32,y,c.readData(this.compressedSize))},readCentralPart:function(c){this.versionMadeBy=c.readInt(2),c.skip(2),this.bitFlag=c.readInt(2),this.compressionMethod=c.readString(2),this.date=c.readDate(),this.crc32=c.readInt(4),this.compressedSize=c.readInt(4),this.uncompressedSize=c.readInt(4);var y=c.readInt(2);if(this.extraFieldsLength=c.readInt(2),this.fileCommentLength=c.readInt(2),this.diskNumberStart=c.readInt(2),this.internalFileAttributes=c.readInt(2),this.externalFileAttributes=c.readInt(4),this.localHeaderOffset=c.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");c.skip(y),this.readExtraFields(c),this.parseZIP64ExtraField(c),this.fileComment=c.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var c=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),c==0&&(this.dosPermissions=63&this.externalFileAttributes),c==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var c=a(this.extraFields[1].value);this.uncompressedSize===r.MAX_VALUE_32BITS&&(this.uncompressedSize=c.readInt(8)),this.compressedSize===r.MAX_VALUE_32BITS&&(this.compressedSize=c.readInt(8)),this.localHeaderOffset===r.MAX_VALUE_32BITS&&(this.localHeaderOffset=c.readInt(8)),this.diskNumberStart===r.MAX_VALUE_32BITS&&(this.diskNumberStart=c.readInt(4))}},readExtraFields:function(c){var y,l,Z,m=c.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});c.index+4<m;)y=c.readInt(2),l=c.readInt(2),Z=c.readData(l),this.extraFields[y]={id:y,length:l,value:Z};c.setIndex(m)},handleUTF8:function(){var c=b.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=S.utf8decode(this.fileName),this.fileCommentStr=S.utf8decode(this.fileComment);else{var y=this.findExtraFieldUnicodePath();if(y!==null)this.fileNameStr=y;else{var l=r.transformTo(c,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(l)}var Z=this.findExtraFieldUnicodeComment();if(Z!==null)this.fileCommentStr=Z;else{var m=r.transformTo(c,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(m)}}},findExtraFieldUnicodePath:function(){var c=this.extraFields[28789];if(c){var y=a(c.value);return y.readInt(1)!==1||d(this.fileName)!==y.readInt(4)?null:S.utf8decode(y.readData(c.length-5))}return null},findExtraFieldUnicodeComment:function(){var c=this.extraFields[25461];if(c){var y=a(c.value);return y.readInt(1)!==1||d(this.fileComment)!==y.readInt(4)?null:S.utf8decode(y.readData(c.length-5))}return null}},h.exports=G},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(i,h,u){function a(y,l,Z){this.name=y,this.dir=Z.dir,this.date=Z.date,this.comment=Z.comment,this.unixPermissions=Z.unixPermissions,this.dosPermissions=Z.dosPermissions,this._data=l,this._dataBinary=Z.binary,this.options={compression:Z.compression,compressionOptions:Z.compressionOptions}}var r=i("./stream/StreamHelper"),e=i("./stream/DataWorker"),d=i("./utf8"),S=i("./compressedObject"),f=i("./stream/GenericWorker");a.prototype={internalStream:function(y){var l=null,Z="string";try{if(!y)throw new Error("No output type specified.");var m=(Z=y.toLowerCase())==="string"||Z==="text";Z!=="binarystring"&&Z!=="text"||(Z="string"),l=this._decompressWorker();var W=!this._dataBinary;W&&!m&&(l=l.pipe(new d.Utf8EncodeWorker)),!W&&m&&(l=l.pipe(new d.Utf8DecodeWorker))}catch(I){(l=new f("error")).error(I)}return new r(l,Z,"")},async:function(y,l){return this.internalStream(y).accumulate(l)},nodeStream:function(y,l){return this.internalStream(y||"nodebuffer").toNodejsStream(l)},_compressWorker:function(y,l){if(this._data instanceof S&&this._data.compression.magic===y.magic)return this._data.getCompressedWorker();var Z=this._decompressWorker();return this._dataBinary||(Z=Z.pipe(new d.Utf8EncodeWorker)),S.createWorkerFrom(Z,y,l)},_decompressWorker:function(){return this._data instanceof S?this._data.getContentWorker():this._data instanceof f?this._data:new e(this._data)}};for(var b=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],G=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},c=0;c<b.length;c++)a.prototype[b[c]]=G;h.exports=a},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(i,h,u){(function(a){var r,e,d=a.MutationObserver||a.WebKitMutationObserver;if(d){var S=0,f=new d(y),b=a.document.createTextNode("");f.observe(b,{characterData:!0}),r=function(){b.data=S=++S%2}}else if(a.setImmediate||a.MessageChannel===void 0)r="document"in a&&"onreadystatechange"in a.document.createElement("script")?function(){var l=a.document.createElement("script");l.onreadystatechange=function(){y(),l.onreadystatechange=null,l.parentNode.removeChild(l),l=null},a.document.documentElement.appendChild(l)}:function(){setTimeout(y,0)};else{var G=new a.MessageChannel;G.port1.onmessage=y,r=function(){G.port2.postMessage(0)}}var c=[];function y(){var l,Z;e=!0;for(var m=c.length;m;){for(Z=c,c=[],l=-1;++l<m;)Z[l]();m=c.length}e=!1}h.exports=function(l){c.push(l)!==1||e||r()}}).call(this,typeof Ft<"u"?Ft:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(i,h,u){var a=i("immediate");function r(){}var e={},d=["REJECTED"],S=["FULFILLED"],f=["PENDING"];function b(m){if(typeof m!="function")throw new TypeError("resolver must be a function");this.state=f,this.queue=[],this.outcome=void 0,m!==r&&l(this,m)}function G(m,W,I){this.promise=m,typeof W=="function"&&(this.onFulfilled=W,this.callFulfilled=this.otherCallFulfilled),typeof I=="function"&&(this.onRejected=I,this.callRejected=this.otherCallRejected)}function c(m,W,I){a(function(){var x;try{x=W(I)}catch(V){return e.reject(m,V)}x===m?e.reject(m,new TypeError("Cannot resolve promise with itself")):e.resolve(m,x)})}function y(m){var W=m&&m.then;if(m&&(typeof m=="object"||typeof m=="function")&&typeof W=="function")return function(){W.apply(m,arguments)}}function l(m,W){var I=!1;function x(Y){I||(I=!0,e.reject(m,Y))}function V(Y){I||(I=!0,e.resolve(m,Y))}var J=Z(function(){W(V,x)});J.status==="error"&&x(J.value)}function Z(m,W){var I={};try{I.value=m(W),I.status="success"}catch(x){I.status="error",I.value=x}return I}(h.exports=b).prototype.finally=function(m){if(typeof m!="function")return this;var W=this.constructor;return this.then(function(I){return W.resolve(m()).then(function(){return I})},function(I){return W.resolve(m()).then(function(){throw I})})},b.prototype.catch=function(m){return this.then(null,m)},b.prototype.then=function(m,W){if(typeof m!="function"&&this.state===S||typeof W!="function"&&this.state===d)return this;var I=new this.constructor(r);return this.state!==f?c(I,this.state===S?m:W,this.outcome):this.queue.push(new G(I,m,W)),I},G.prototype.callFulfilled=function(m){e.resolve(this.promise,m)},G.prototype.otherCallFulfilled=function(m){c(this.promise,this.onFulfilled,m)},G.prototype.callRejected=function(m){e.reject(this.promise,m)},G.prototype.otherCallRejected=function(m){c(this.promise,this.onRejected,m)},e.resolve=function(m,W){var I=Z(y,W);if(I.status==="error")return e.reject(m,I.value);var x=I.value;if(x)l(m,x);else{m.state=S,m.outcome=W;for(var V=-1,J=m.queue.length;++V<J;)m.queue[V].callFulfilled(W)}return m},e.reject=function(m,W){m.state=d,m.outcome=W;for(var I=-1,x=m.queue.length;++I<x;)m.queue[I].callRejected(W);return m},b.resolve=function(m){return m instanceof this?m:e.resolve(new this(r),m)},b.reject=function(m){var W=new this(r);return e.reject(W,m)},b.all=function(m){var W=this;if(Object.prototype.toString.call(m)!=="[object Array]")return this.reject(new TypeError("must be an array"));var I=m.length,x=!1;if(!I)return this.resolve([]);for(var V=new Array(I),J=0,Y=-1,T=new this(r);++Y<I;)L(m[Y],Y);return T;function L(P,A){W.resolve(P).then(function(g){V[A]=g,++J!==I||x||(x=!0,e.resolve(T,V))},function(g){x||(x=!0,e.reject(T,g))})}},b.race=function(m){var W=this;if(Object.prototype.toString.call(m)!=="[object Array]")return this.reject(new TypeError("must be an array"));var I=m.length,x=!1;if(!I)return this.resolve([]);for(var V=-1,J=new this(r);++V<I;)Y=m[V],W.resolve(Y).then(function(T){x||(x=!0,e.resolve(J,T))},function(T){x||(x=!0,e.reject(J,T))});var Y;return J}},{immediate:36}],38:[function(i,h,u){var a={};(0,i("./lib/utils/common").assign)(a,i("./lib/deflate"),i("./lib/inflate"),i("./lib/zlib/constants")),h.exports=a},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(i,h,u){var a=i("./zlib/deflate"),r=i("./utils/common"),e=i("./utils/strings"),d=i("./zlib/messages"),S=i("./zlib/zstream"),f=Object.prototype.toString,b=0,G=-1,c=0,y=8;function l(m){if(!(this instanceof l))return new l(m);this.options=r.assign({level:G,method:y,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:""},m||{});var W=this.options;W.raw&&0<W.windowBits?W.windowBits=-W.windowBits:W.gzip&&0<W.windowBits&&W.windowBits<16&&(W.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new S,this.strm.avail_out=0;var I=a.deflateInit2(this.strm,W.level,W.method,W.windowBits,W.memLevel,W.strategy);if(I!==b)throw new Error(d[I]);if(W.header&&a.deflateSetHeader(this.strm,W.header),W.dictionary){var x;if(x=typeof W.dictionary=="string"?e.string2buf(W.dictionary):f.call(W.dictionary)==="[object ArrayBuffer]"?new Uint8Array(W.dictionary):W.dictionary,(I=a.deflateSetDictionary(this.strm,x))!==b)throw new Error(d[I]);this._dict_set=!0}}function Z(m,W){var I=new l(W);if(I.push(m,!0),I.err)throw I.msg||d[I.err];return I.result}l.prototype.push=function(m,W){var I,x,V=this.strm,J=this.options.chunkSize;if(this.ended)return!1;x=W===~~W?W:W===!0?4:0,typeof m=="string"?V.input=e.string2buf(m):f.call(m)==="[object ArrayBuffer]"?V.input=new Uint8Array(m):V.input=m,V.next_in=0,V.avail_in=V.input.length;do{if(V.avail_out===0&&(V.output=new r.Buf8(J),V.next_out=0,V.avail_out=J),(I=a.deflate(V,x))!==1&&I!==b)return this.onEnd(I),!(this.ended=!0);V.avail_out!==0&&(V.avail_in!==0||x!==4&&x!==2)||(this.options.to==="string"?this.onData(e.buf2binstring(r.shrinkBuf(V.output,V.next_out))):this.onData(r.shrinkBuf(V.output,V.next_out)))}while((0<V.avail_in||V.avail_out===0)&&I!==1);return x===4?(I=a.deflateEnd(this.strm),this.onEnd(I),this.ended=!0,I===b):x!==2||(this.onEnd(b),!(V.avail_out=0))},l.prototype.onData=function(m){this.chunks.push(m)},l.prototype.onEnd=function(m){m===b&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=r.flattenChunks(this.chunks)),this.chunks=[],this.err=m,this.msg=this.strm.msg},u.Deflate=l,u.deflate=Z,u.deflateRaw=function(m,W){return(W=W||{}).raw=!0,Z(m,W)},u.gzip=function(m,W){return(W=W||{}).gzip=!0,Z(m,W)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(i,h,u){var a=i("./zlib/inflate"),r=i("./utils/common"),e=i("./utils/strings"),d=i("./zlib/constants"),S=i("./zlib/messages"),f=i("./zlib/zstream"),b=i("./zlib/gzheader"),G=Object.prototype.toString;function c(l){if(!(this instanceof c))return new c(l);this.options=r.assign({chunkSize:16384,windowBits:0,to:""},l||{});var Z=this.options;Z.raw&&0<=Z.windowBits&&Z.windowBits<16&&(Z.windowBits=-Z.windowBits,Z.windowBits===0&&(Z.windowBits=-15)),!(0<=Z.windowBits&&Z.windowBits<16)||l&&l.windowBits||(Z.windowBits+=32),15<Z.windowBits&&Z.windowBits<48&&(15&Z.windowBits)==0&&(Z.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f,this.strm.avail_out=0;var m=a.inflateInit2(this.strm,Z.windowBits);if(m!==d.Z_OK)throw new Error(S[m]);this.header=new b,a.inflateGetHeader(this.strm,this.header)}function y(l,Z){var m=new c(Z);if(m.push(l,!0),m.err)throw m.msg||S[m.err];return m.result}c.prototype.push=function(l,Z){var m,W,I,x,V,J,Y=this.strm,T=this.options.chunkSize,L=this.options.dictionary,P=!1;if(this.ended)return!1;W=Z===~~Z?Z:Z===!0?d.Z_FINISH:d.Z_NO_FLUSH,typeof l=="string"?Y.input=e.binstring2buf(l):G.call(l)==="[object ArrayBuffer]"?Y.input=new Uint8Array(l):Y.input=l,Y.next_in=0,Y.avail_in=Y.input.length;do{if(Y.avail_out===0&&(Y.output=new r.Buf8(T),Y.next_out=0,Y.avail_out=T),(m=a.inflate(Y,d.Z_NO_FLUSH))===d.Z_NEED_DICT&&L&&(J=typeof L=="string"?e.string2buf(L):G.call(L)==="[object ArrayBuffer]"?new Uint8Array(L):L,m=a.inflateSetDictionary(this.strm,J)),m===d.Z_BUF_ERROR&&P===!0&&(m=d.Z_OK,P=!1),m!==d.Z_STREAM_END&&m!==d.Z_OK)return this.onEnd(m),!(this.ended=!0);Y.next_out&&(Y.avail_out!==0&&m!==d.Z_STREAM_END&&(Y.avail_in!==0||W!==d.Z_FINISH&&W!==d.Z_SYNC_FLUSH)||(this.options.to==="string"?(I=e.utf8border(Y.output,Y.next_out),x=Y.next_out-I,V=e.buf2string(Y.output,I),Y.next_out=x,Y.avail_out=T-x,x&&r.arraySet(Y.output,Y.output,I,x,0),this.onData(V)):this.onData(r.shrinkBuf(Y.output,Y.next_out)))),Y.avail_in===0&&Y.avail_out===0&&(P=!0)}while((0<Y.avail_in||Y.avail_out===0)&&m!==d.Z_STREAM_END);return m===d.Z_STREAM_END&&(W=d.Z_FINISH),W===d.Z_FINISH?(m=a.inflateEnd(this.strm),this.onEnd(m),this.ended=!0,m===d.Z_OK):W!==d.Z_SYNC_FLUSH||(this.onEnd(d.Z_OK),!(Y.avail_out=0))},c.prototype.onData=function(l){this.chunks.push(l)},c.prototype.onEnd=function(l){l===d.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=r.flattenChunks(this.chunks)),this.chunks=[],this.err=l,this.msg=this.strm.msg},u.Inflate=c,u.inflate=y,u.inflateRaw=function(l,Z){return(Z=Z||{}).raw=!0,y(l,Z)},u.ungzip=y},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(i,h,u){var a=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";u.assign=function(d){for(var S=Array.prototype.slice.call(arguments,1);S.length;){var f=S.shift();if(f){if(typeof f!="object")throw new TypeError(f+"must be non-object");for(var b in f)f.hasOwnProperty(b)&&(d[b]=f[b])}}return d},u.shrinkBuf=function(d,S){return d.length===S?d:d.subarray?d.subarray(0,S):(d.length=S,d)};var r={arraySet:function(d,S,f,b,G){if(S.subarray&&d.subarray)d.set(S.subarray(f,f+b),G);else for(var c=0;c<b;c++)d[G+c]=S[f+c]},flattenChunks:function(d){var S,f,b,G,c,y;for(S=b=0,f=d.length;S<f;S++)b+=d[S].length;for(y=new Uint8Array(b),S=G=0,f=d.length;S<f;S++)c=d[S],y.set(c,G),G+=c.length;return y}},e={arraySet:function(d,S,f,b,G){for(var c=0;c<b;c++)d[G+c]=S[f+c]},flattenChunks:function(d){return[].concat.apply([],d)}};u.setTyped=function(d){d?(u.Buf8=Uint8Array,u.Buf16=Uint16Array,u.Buf32=Int32Array,u.assign(u,r)):(u.Buf8=Array,u.Buf16=Array,u.Buf32=Array,u.assign(u,e))},u.setTyped(a)},{}],42:[function(i,h,u){var a=i("./common"),r=!0,e=!0;try{String.fromCharCode.apply(null,[0])}catch{r=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{e=!1}for(var d=new a.Buf8(256),S=0;S<256;S++)d[S]=252<=S?6:248<=S?5:240<=S?4:224<=S?3:192<=S?2:1;function f(b,G){if(G<65537&&(b.subarray&&e||!b.subarray&&r))return String.fromCharCode.apply(null,a.shrinkBuf(b,G));for(var c="",y=0;y<G;y++)c+=String.fromCharCode(b[y]);return c}d[254]=d[254]=1,u.string2buf=function(b){var G,c,y,l,Z,m=b.length,W=0;for(l=0;l<m;l++)(64512&(c=b.charCodeAt(l)))==55296&&l+1<m&&(64512&(y=b.charCodeAt(l+1)))==56320&&(c=65536+(c-55296<<10)+(y-56320),l++),W+=c<128?1:c<2048?2:c<65536?3:4;for(G=new a.Buf8(W),l=Z=0;Z<W;l++)(64512&(c=b.charCodeAt(l)))==55296&&l+1<m&&(64512&(y=b.charCodeAt(l+1)))==56320&&(c=65536+(c-55296<<10)+(y-56320),l++),c<128?G[Z++]=c:(c<2048?G[Z++]=192|c>>>6:(c<65536?G[Z++]=224|c>>>12:(G[Z++]=240|c>>>18,G[Z++]=128|c>>>12&63),G[Z++]=128|c>>>6&63),G[Z++]=128|63&c);return G},u.buf2binstring=function(b){return f(b,b.length)},u.binstring2buf=function(b){for(var G=new a.Buf8(b.length),c=0,y=G.length;c<y;c++)G[c]=b.charCodeAt(c);return G},u.buf2string=function(b,G){var c,y,l,Z,m=G||b.length,W=new Array(2*m);for(c=y=0;c<m;)if((l=b[c++])<128)W[y++]=l;else if(4<(Z=d[l]))W[y++]=65533,c+=Z-1;else{for(l&=Z===2?31:Z===3?15:7;1<Z&&c<m;)l=l<<6|63&b[c++],Z--;1<Z?W[y++]=65533:l<65536?W[y++]=l:(l-=65536,W[y++]=55296|l>>10&1023,W[y++]=56320|1023&l)}return f(W,y)},u.utf8border=function(b,G){var c;for((G=G||b.length)>b.length&&(G=b.length),c=G-1;0<=c&&(192&b[c])==128;)c--;return c<0||c===0?G:c+d[b[c]]>G?c:G}},{"./common":41}],43:[function(i,h,u){h.exports=function(a,r,e,d){for(var S=65535&a|0,f=a>>>16&65535|0,b=0;e!==0;){for(e-=b=2e3<e?2e3:e;f=f+(S=S+r[d++]|0)|0,--b;);S%=65521,f%=65521}return S|f<<16|0}},{}],44:[function(i,h,u){h.exports={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,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,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,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(i,h,u){var a=(function(){for(var r,e=[],d=0;d<256;d++){r=d;for(var S=0;S<8;S++)r=1&r?3988292384^r>>>1:r>>>1;e[d]=r}return e})();h.exports=function(r,e,d,S){var f=a,b=S+d;r^=-1;for(var G=S;G<b;G++)r=r>>>8^f[255&(r^e[G])];return-1^r}},{}],46:[function(i,h,u){var a,r=i("../utils/common"),e=i("./trees"),d=i("./adler32"),S=i("./crc32"),f=i("./messages"),b=0,G=4,c=0,y=-2,l=-1,Z=4,m=2,W=8,I=9,x=286,V=30,J=19,Y=2*x+1,T=15,L=3,P=258,A=P+L+1,g=42,z=113,s=1,F=2,tt=3,N=4;function it(t,U){return t.msg=f[U],U}function M(t){return(t<<1)-(4<t?9:0)}function $(t){for(var U=t.length;0<=--U;)t[U]=0}function w(t){var U=t.state,K=U.pending;K>t.avail_out&&(K=t.avail_out),K!==0&&(r.arraySet(t.output,U.pending_buf,U.pending_out,K,t.next_out),t.next_out+=K,U.pending_out+=K,t.total_out+=K,t.avail_out-=K,U.pending-=K,U.pending===0&&(U.pending_out=0))}function v(t,U){e._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,U),t.block_start=t.strstart,w(t.strm)}function Q(t,U){t.pending_buf[t.pending++]=U}function O(t,U){t.pending_buf[t.pending++]=U>>>8&255,t.pending_buf[t.pending++]=255&U}function j(t,U){var K,X,p=t.max_chain_length,R=t.strstart,C=t.prev_length,H=t.nice_match,k=t.strstart>t.w_size-A?t.strstart-(t.w_size-A):0,_=t.window,D=t.w_mask,B=t.prev,q=t.strstart+P,at=_[R+C-1],st=_[R+C];t.prev_length>=t.good_match&&(p>>=2),H>t.lookahead&&(H=t.lookahead);do if(_[(K=U)+C]===st&&_[K+C-1]===at&&_[K]===_[R]&&_[++K]===_[R+1]){R+=2,K++;do;while(_[++R]===_[++K]&&_[++R]===_[++K]&&_[++R]===_[++K]&&_[++R]===_[++K]&&_[++R]===_[++K]&&_[++R]===_[++K]&&_[++R]===_[++K]&&_[++R]===_[++K]&&R<q);if(X=P-(q-R),R=q-P,C<X){if(t.match_start=U,H<=(C=X))break;at=_[R+C-1],st=_[R+C]}}while((U=B[U&D])>k&&--p!=0);return C<=t.lookahead?C:t.lookahead}function dt(t){var U,K,X,p,R,C,H,k,_,D,B=t.w_size;do{if(p=t.window_size-t.lookahead-t.strstart,t.strstart>=B+(B-A)){for(r.arraySet(t.window,t.window,B,B,0),t.match_start-=B,t.strstart-=B,t.block_start-=B,U=K=t.hash_size;X=t.head[--U],t.head[U]=B<=X?X-B:0,--K;);for(U=K=B;X=t.prev[--U],t.prev[U]=B<=X?X-B:0,--K;);p+=B}if(t.strm.avail_in===0)break;if(C=t.strm,H=t.window,k=t.strstart+t.lookahead,_=p,D=void 0,D=C.avail_in,_<D&&(D=_),K=D===0?0:(C.avail_in-=D,r.arraySet(H,C.input,C.next_in,D,k),C.state.wrap===1?C.adler=d(C.adler,H,D,k):C.state.wrap===2&&(C.adler=S(C.adler,H,D,k)),C.next_in+=D,C.total_in+=D,D),t.lookahead+=K,t.lookahead+t.insert>=L)for(R=t.strstart-t.insert,t.ins_h=t.window[R],t.ins_h=(t.ins_h<<t.hash_shift^t.window[R+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[R+L-1])&t.hash_mask,t.prev[R&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=R,R++,t.insert--,!(t.lookahead+t.insert<L)););}while(t.lookahead<A&&t.strm.avail_in!==0)}function ht(t,U){for(var K,X;;){if(t.lookahead<A){if(dt(t),t.lookahead<A&&U===b)return s;if(t.lookahead===0)break}if(K=0,t.lookahead>=L&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+L-1])&t.hash_mask,K=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),K!==0&&t.strstart-K<=t.w_size-A&&(t.match_length=j(t,K)),t.match_length>=L)if(X=e._tr_tally(t,t.strstart-t.match_start,t.match_length-L),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=L){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+L-1])&t.hash_mask,K=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart,--t.match_length!=0;);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else X=e._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(X&&(v(t,!1),t.strm.avail_out===0))return s}return t.insert=t.strstart<L-1?t.strstart:L-1,U===G?(v(t,!0),t.strm.avail_out===0?tt:N):t.last_lit&&(v(t,!1),t.strm.avail_out===0)?s:F}function et(t,U){for(var K,X,p;;){if(t.lookahead<A){if(dt(t),t.lookahead<A&&U===b)return s;if(t.lookahead===0)break}if(K=0,t.lookahead>=L&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+L-1])&t.hash_mask,K=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=L-1,K!==0&&t.prev_length<t.max_lazy_match&&t.strstart-K<=t.w_size-A&&(t.match_length=j(t,K),t.match_length<=5&&(t.strategy===1||t.match_length===L&&4096<t.strstart-t.match_start)&&(t.match_length=L-1)),t.prev_length>=L&&t.match_length<=t.prev_length){for(p=t.strstart+t.lookahead-L,X=e._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-L),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=p&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+L-1])&t.hash_mask,K=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),--t.prev_length!=0;);if(t.match_available=0,t.match_length=L-1,t.strstart++,X&&(v(t,!1),t.strm.avail_out===0))return s}else if(t.match_available){if((X=e._tr_tally(t,0,t.window[t.strstart-1]))&&v(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return s}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(X=e._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<L-1?t.strstart:L-1,U===G?(v(t,!0),t.strm.avail_out===0?tt:N):t.last_lit&&(v(t,!1),t.strm.avail_out===0)?s:F}function nt(t,U,K,X,p){this.good_length=t,this.max_lazy=U,this.nice_length=K,this.max_chain=X,this.func=p}function ot(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=W,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new r.Buf16(2*Y),this.dyn_dtree=new r.Buf16(2*(2*V+1)),this.bl_tree=new r.Buf16(2*(2*J+1)),$(this.dyn_ltree),$(this.dyn_dtree),$(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new r.Buf16(T+1),this.heap=new r.Buf16(2*x+1),$(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new r.Buf16(2*x+1),$(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function lt(t){var U;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=m,(U=t.state).pending=0,U.pending_out=0,U.wrap<0&&(U.wrap=-U.wrap),U.status=U.wrap?g:z,t.adler=U.wrap===2?0:1,U.last_flush=b,e._tr_init(U),c):it(t,y)}function rt(t){var U=lt(t);return U===c&&(function(K){K.window_size=2*K.w_size,$(K.head),K.max_lazy_match=a[K.level].max_lazy,K.good_match=a[K.level].good_length,K.nice_match=a[K.level].nice_length,K.max_chain_length=a[K.level].max_chain,K.strstart=0,K.block_start=0,K.lookahead=0,K.insert=0,K.match_length=K.prev_length=L-1,K.match_available=0,K.ins_h=0})(t.state),U}function E(t,U,K,X,p,R){if(!t)return y;var C=1;if(U===l&&(U=6),X<0?(C=0,X=-X):15<X&&(C=2,X-=16),p<1||I<p||K!==W||X<8||15<X||U<0||9<U||R<0||Z<R)return it(t,y);X===8&&(X=9);var H=new ot;return(t.state=H).strm=t,H.wrap=C,H.gzhead=null,H.w_bits=X,H.w_size=1<<H.w_bits,H.w_mask=H.w_size-1,H.hash_bits=p+7,H.hash_size=1<<H.hash_bits,H.hash_mask=H.hash_size-1,H.hash_shift=~~((H.hash_bits+L-1)/L),H.window=new r.Buf8(2*H.w_size),H.head=new r.Buf16(H.hash_size),H.prev=new r.Buf16(H.w_size),H.lit_bufsize=1<<p+6,H.pending_buf_size=4*H.lit_bufsize,H.pending_buf=new r.Buf8(H.pending_buf_size),H.d_buf=1*H.lit_bufsize,H.l_buf=3*H.lit_bufsize,H.level=U,H.strategy=R,H.method=K,rt(t)}a=[new nt(0,0,0,0,function(t,U){var K=65535;for(K>t.pending_buf_size-5&&(K=t.pending_buf_size-5);;){if(t.lookahead<=1){if(dt(t),t.lookahead===0&&U===b)return s;if(t.lookahead===0)break}t.strstart+=t.lookahead,t.lookahead=0;var X=t.block_start+K;if((t.strstart===0||t.strstart>=X)&&(t.lookahead=t.strstart-X,t.strstart=X,v(t,!1),t.strm.avail_out===0)||t.strstart-t.block_start>=t.w_size-A&&(v(t,!1),t.strm.avail_out===0))return s}return t.insert=0,U===G?(v(t,!0),t.strm.avail_out===0?tt:N):(t.strstart>t.block_start&&(v(t,!1),t.strm.avail_out),s)}),new nt(4,4,8,4,ht),new nt(4,5,16,8,ht),new nt(4,6,32,32,ht),new nt(4,4,16,16,et),new nt(8,16,32,32,et),new nt(8,16,128,128,et),new nt(8,32,128,256,et),new nt(32,128,258,1024,et),new nt(32,258,258,4096,et)],u.deflateInit=function(t,U){return E(t,U,W,15,8,0)},u.deflateInit2=E,u.deflateReset=rt,u.deflateResetKeep=lt,u.deflateSetHeader=function(t,U){return t&&t.state?t.state.wrap!==2?y:(t.state.gzhead=U,c):y},u.deflate=function(t,U){var K,X,p,R;if(!t||!t.state||5<U||U<0)return t?it(t,y):y;if(X=t.state,!t.output||!t.input&&t.avail_in!==0||X.status===666&&U!==G)return it(t,t.avail_out===0?-5:y);if(X.strm=t,K=X.last_flush,X.last_flush=U,X.status===g)if(X.wrap===2)t.adler=0,Q(X,31),Q(X,139),Q(X,8),X.gzhead?(Q(X,(X.gzhead.text?1:0)+(X.gzhead.hcrc?2:0)+(X.gzhead.extra?4:0)+(X.gzhead.name?8:0)+(X.gzhead.comment?16:0)),Q(X,255&X.gzhead.time),Q(X,X.gzhead.time>>8&255),Q(X,X.gzhead.time>>16&255),Q(X,X.gzhead.time>>24&255),Q(X,X.level===9?2:2<=X.strategy||X.level<2?4:0),Q(X,255&X.gzhead.os),X.gzhead.extra&&X.gzhead.extra.length&&(Q(X,255&X.gzhead.extra.length),Q(X,X.gzhead.extra.length>>8&255)),X.gzhead.hcrc&&(t.adler=S(t.adler,X.pending_buf,X.pending,0)),X.gzindex=0,X.status=69):(Q(X,0),Q(X,0),Q(X,0),Q(X,0),Q(X,0),Q(X,X.level===9?2:2<=X.strategy||X.level<2?4:0),Q(X,3),X.status=z);else{var C=W+(X.w_bits-8<<4)<<8;C|=(2<=X.strategy||X.level<2?0:X.level<6?1:X.level===6?2:3)<<6,X.strstart!==0&&(C|=32),C+=31-C%31,X.status=z,O(X,C),X.strstart!==0&&(O(X,t.adler>>>16),O(X,65535&t.adler)),t.adler=1}if(X.status===69)if(X.gzhead.extra){for(p=X.pending;X.gzindex<(65535&X.gzhead.extra.length)&&(X.pending!==X.pending_buf_size||(X.gzhead.hcrc&&X.pending>p&&(t.adler=S(t.adler,X.pending_buf,X.pending-p,p)),w(t),p=X.pending,X.pending!==X.pending_buf_size));)Q(X,255&X.gzhead.extra[X.gzindex]),X.gzindex++;X.gzhead.hcrc&&X.pending>p&&(t.adler=S(t.adler,X.pending_buf,X.pending-p,p)),X.gzindex===X.gzhead.extra.length&&(X.gzindex=0,X.status=73)}else X.status=73;if(X.status===73)if(X.gzhead.name){p=X.pending;do{if(X.pending===X.pending_buf_size&&(X.gzhead.hcrc&&X.pending>p&&(t.adler=S(t.adler,X.pending_buf,X.pending-p,p)),w(t),p=X.pending,X.pending===X.pending_buf_size)){R=1;break}R=X.gzindex<X.gzhead.name.length?255&X.gzhead.name.charCodeAt(X.gzindex++):0,Q(X,R)}while(R!==0);X.gzhead.hcrc&&X.pending>p&&(t.adler=S(t.adler,X.pending_buf,X.pending-p,p)),R===0&&(X.gzindex=0,X.status=91)}else X.status=91;if(X.status===91)if(X.gzhead.comment){p=X.pending;do{if(X.pending===X.pending_buf_size&&(X.gzhead.hcrc&&X.pending>p&&(t.adler=S(t.adler,X.pending_buf,X.pending-p,p)),w(t),p=X.pending,X.pending===X.pending_buf_size)){R=1;break}R=X.gzindex<X.gzhead.comment.length?255&X.gzhead.comment.charCodeAt(X.gzindex++):0,Q(X,R)}while(R!==0);X.gzhead.hcrc&&X.pending>p&&(t.adler=S(t.adler,X.pending_buf,X.pending-p,p)),R===0&&(X.status=103)}else X.status=103;if(X.status===103&&(X.gzhead.hcrc?(X.pending+2>X.pending_buf_size&&w(t),X.pending+2<=X.pending_buf_size&&(Q(X,255&t.adler),Q(X,t.adler>>8&255),t.adler=0,X.status=z)):X.status=z),X.pending!==0){if(w(t),t.avail_out===0)return X.last_flush=-1,c}else if(t.avail_in===0&&M(U)<=M(K)&&U!==G)return it(t,-5);if(X.status===666&&t.avail_in!==0)return it(t,-5);if(t.avail_in!==0||X.lookahead!==0||U!==b&&X.status!==666){var H=X.strategy===2?(function(k,_){for(var D;;){if(k.lookahead===0&&(dt(k),k.lookahead===0)){if(_===b)return s;break}if(k.match_length=0,D=e._tr_tally(k,0,k.window[k.strstart]),k.lookahead--,k.strstart++,D&&(v(k,!1),k.strm.avail_out===0))return s}return k.insert=0,_===G?(v(k,!0),k.strm.avail_out===0?tt:N):k.last_lit&&(v(k,!1),k.strm.avail_out===0)?s:F})(X,U):X.strategy===3?(function(k,_){for(var D,B,q,at,st=k.window;;){if(k.lookahead<=P){if(dt(k),k.lookahead<=P&&_===b)return s;if(k.lookahead===0)break}if(k.match_length=0,k.lookahead>=L&&0<k.strstart&&(B=st[q=k.strstart-1])===st[++q]&&B===st[++q]&&B===st[++q]){at=k.strstart+P;do;while(B===st[++q]&&B===st[++q]&&B===st[++q]&&B===st[++q]&&B===st[++q]&&B===st[++q]&&B===st[++q]&&B===st[++q]&&q<at);k.match_length=P-(at-q),k.match_length>k.lookahead&&(k.match_length=k.lookahead)}if(k.match_length>=L?(D=e._tr_tally(k,1,k.match_length-L),k.lookahead-=k.match_length,k.strstart+=k.match_length,k.match_length=0):(D=e._tr_tally(k,0,k.window[k.strstart]),k.lookahead--,k.strstart++),D&&(v(k,!1),k.strm.avail_out===0))return s}return k.insert=0,_===G?(v(k,!0),k.strm.avail_out===0?tt:N):k.last_lit&&(v(k,!1),k.strm.avail_out===0)?s:F})(X,U):a[X.level].func(X,U);if(H!==tt&&H!==N||(X.status=666),H===s||H===tt)return t.avail_out===0&&(X.last_flush=-1),c;if(H===F&&(U===1?e._tr_align(X):U!==5&&(e._tr_stored_block(X,0,0,!1),U===3&&($(X.head),X.lookahead===0&&(X.strstart=0,X.block_start=0,X.insert=0))),w(t),t.avail_out===0))return X.last_flush=-1,c}return U!==G?c:X.wrap<=0?1:(X.wrap===2?(Q(X,255&t.adler),Q(X,t.adler>>8&255),Q(X,t.adler>>16&255),Q(X,t.adler>>24&255),Q(X,255&t.total_in),Q(X,t.total_in>>8&255),Q(X,t.total_in>>16&255),Q(X,t.total_in>>24&255)):(O(X,t.adler>>>16),O(X,65535&t.adler)),w(t),0<X.wrap&&(X.wrap=-X.wrap),X.pending!==0?c:1)},u.deflateEnd=function(t){var U;return t&&t.state?(U=t.state.status)!==g&&U!==69&&U!==73&&U!==91&&U!==103&&U!==z&&U!==666?it(t,y):(t.state=null,U===z?it(t,-3):c):y},u.deflateSetDictionary=function(t,U){var K,X,p,R,C,H,k,_,D=U.length;if(!t||!t.state||(R=(K=t.state).wrap)===2||R===1&&K.status!==g||K.lookahead)return y;for(R===1&&(t.adler=d(t.adler,U,D,0)),K.wrap=0,D>=K.w_size&&(R===0&&($(K.head),K.strstart=0,K.block_start=0,K.insert=0),_=new r.Buf8(K.w_size),r.arraySet(_,U,D-K.w_size,K.w_size,0),U=_,D=K.w_size),C=t.avail_in,H=t.next_in,k=t.input,t.avail_in=D,t.next_in=0,t.input=U,dt(K);K.lookahead>=L;){for(X=K.strstart,p=K.lookahead-(L-1);K.ins_h=(K.ins_h<<K.hash_shift^K.window[X+L-1])&K.hash_mask,K.prev[X&K.w_mask]=K.head[K.ins_h],K.head[K.ins_h]=X,X++,--p;);K.strstart=X,K.lookahead=L-1,dt(K)}return K.strstart+=K.lookahead,K.block_start=K.strstart,K.insert=K.lookahead,K.lookahead=0,K.match_length=K.prev_length=L-1,K.match_available=0,t.next_in=H,t.input=k,t.avail_in=C,K.wrap=R,c},u.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(i,h,u){h.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(i,h,u){h.exports=function(a,r){var e,d,S,f,b,G,c,y,l,Z,m,W,I,x,V,J,Y,T,L,P,A,g,z,s,F;e=a.state,d=a.next_in,s=a.input,S=d+(a.avail_in-5),f=a.next_out,F=a.output,b=f-(r-a.avail_out),G=f+(a.avail_out-257),c=e.dmax,y=e.wsize,l=e.whave,Z=e.wnext,m=e.window,W=e.hold,I=e.bits,x=e.lencode,V=e.distcode,J=(1<<e.lenbits)-1,Y=(1<<e.distbits)-1;t:do{I<15&&(W+=s[d++]<<I,I+=8,W+=s[d++]<<I,I+=8),T=x[W&J];i:for(;;){if(W>>>=L=T>>>24,I-=L,(L=T>>>16&255)===0)F[f++]=65535&T;else{if(!(16&L)){if((64&L)==0){T=x[(65535&T)+(W&(1<<L)-1)];continue i}if(32&L){e.mode=12;break t}a.msg="invalid literal/length code",e.mode=30;break t}P=65535&T,(L&=15)&&(I<L&&(W+=s[d++]<<I,I+=8),P+=W&(1<<L)-1,W>>>=L,I-=L),I<15&&(W+=s[d++]<<I,I+=8,W+=s[d++]<<I,I+=8),T=V[W&Y];e:for(;;){if(W>>>=L=T>>>24,I-=L,!(16&(L=T>>>16&255))){if((64&L)==0){T=V[(65535&T)+(W&(1<<L)-1)];continue e}a.msg="invalid distance code",e.mode=30;break t}if(A=65535&T,I<(L&=15)&&(W+=s[d++]<<I,(I+=8)<L&&(W+=s[d++]<<I,I+=8)),c<(A+=W&(1<<L)-1)){a.msg="invalid distance too far back",e.mode=30;break t}if(W>>>=L,I-=L,(L=f-b)<A){if(l<(L=A-L)&&e.sane){a.msg="invalid distance too far back",e.mode=30;break t}if(z=m,(g=0)===Z){if(g+=y-L,L<P){for(P-=L;F[f++]=m[g++],--L;);g=f-A,z=F}}else if(Z<L){if(g+=y+Z-L,(L-=Z)<P){for(P-=L;F[f++]=m[g++],--L;);if(g=0,Z<P){for(P-=L=Z;F[f++]=m[g++],--L;);g=f-A,z=F}}}else if(g+=Z-L,L<P){for(P-=L;F[f++]=m[g++],--L;);g=f-A,z=F}for(;2<P;)F[f++]=z[g++],F[f++]=z[g++],F[f++]=z[g++],P-=3;P&&(F[f++]=z[g++],1<P&&(F[f++]=z[g++]))}else{for(g=f-A;F[f++]=F[g++],F[f++]=F[g++],F[f++]=F[g++],2<(P-=3););P&&(F[f++]=F[g++],1<P&&(F[f++]=F[g++]))}break}}break}}while(d<S&&f<G);d-=P=I>>3,W&=(1<<(I-=P<<3))-1,a.next_in=d,a.next_out=f,a.avail_in=d<S?S-d+5:5-(d-S),a.avail_out=f<G?G-f+257:257-(f-G),e.hold=W,e.bits=I}},{}],49:[function(i,h,u){var a=i("../utils/common"),r=i("./adler32"),e=i("./crc32"),d=i("./inffast"),S=i("./inftrees"),f=1,b=2,G=0,c=-2,y=1,l=852,Z=592;function m(g){return(g>>>24&255)+(g>>>8&65280)+((65280&g)<<8)+((255&g)<<24)}function W(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new a.Buf16(320),this.work=new a.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function I(g){var z;return g&&g.state?(z=g.state,g.total_in=g.total_out=z.total=0,g.msg="",z.wrap&&(g.adler=1&z.wrap),z.mode=y,z.last=0,z.havedict=0,z.dmax=32768,z.head=null,z.hold=0,z.bits=0,z.lencode=z.lendyn=new a.Buf32(l),z.distcode=z.distdyn=new a.Buf32(Z),z.sane=1,z.back=-1,G):c}function x(g){var z;return g&&g.state?((z=g.state).wsize=0,z.whave=0,z.wnext=0,I(g)):c}function V(g,z){var s,F;return g&&g.state?(F=g.state,z<0?(s=0,z=-z):(s=1+(z>>4),z<48&&(z&=15)),z&&(z<8||15<z)?c:(F.window!==null&&F.wbits!==z&&(F.window=null),F.wrap=s,F.wbits=z,x(g))):c}function J(g,z){var s,F;return g?(F=new W,(g.state=F).window=null,(s=V(g,z))!==G&&(g.state=null),s):c}var Y,T,L=!0;function P(g){if(L){var z;for(Y=new a.Buf32(512),T=new a.Buf32(32),z=0;z<144;)g.lens[z++]=8;for(;z<256;)g.lens[z++]=9;for(;z<280;)g.lens[z++]=7;for(;z<288;)g.lens[z++]=8;for(S(f,g.lens,0,288,Y,0,g.work,{bits:9}),z=0;z<32;)g.lens[z++]=5;S(b,g.lens,0,32,T,0,g.work,{bits:5}),L=!1}g.lencode=Y,g.lenbits=9,g.distcode=T,g.distbits=5}function A(g,z,s,F){var tt,N=g.state;return N.window===null&&(N.wsize=1<<N.wbits,N.wnext=0,N.whave=0,N.window=new a.Buf8(N.wsize)),F>=N.wsize?(a.arraySet(N.window,z,s-N.wsize,N.wsize,0),N.wnext=0,N.whave=N.wsize):(F<(tt=N.wsize-N.wnext)&&(tt=F),a.arraySet(N.window,z,s-F,tt,N.wnext),(F-=tt)?(a.arraySet(N.window,z,s-F,F,0),N.wnext=F,N.whave=N.wsize):(N.wnext+=tt,N.wnext===N.wsize&&(N.wnext=0),N.whave<N.wsize&&(N.whave+=tt))),0}u.inflateReset=x,u.inflateReset2=V,u.inflateResetKeep=I,u.inflateInit=function(g){return J(g,15)},u.inflateInit2=J,u.inflate=function(g,z){var s,F,tt,N,it,M,$,w,v,Q,O,j,dt,ht,et,nt,ot,lt,rt,E,t,U,K,X,p=0,R=new a.Buf8(4),C=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!g||!g.state||!g.output||!g.input&&g.avail_in!==0)return c;(s=g.state).mode===12&&(s.mode=13),it=g.next_out,tt=g.output,$=g.avail_out,N=g.next_in,F=g.input,M=g.avail_in,w=s.hold,v=s.bits,Q=M,O=$,U=G;t:for(;;)switch(s.mode){case y:if(s.wrap===0){s.mode=13;break}for(;v<16;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if(2&s.wrap&&w===35615){R[s.check=0]=255&w,R[1]=w>>>8&255,s.check=e(s.check,R,2,0),v=w=0,s.mode=2;break}if(s.flags=0,s.head&&(s.head.done=!1),!(1&s.wrap)||(((255&w)<<8)+(w>>8))%31){g.msg="incorrect header check",s.mode=30;break}if((15&w)!=8){g.msg="unknown compression method",s.mode=30;break}if(v-=4,t=8+(15&(w>>>=4)),s.wbits===0)s.wbits=t;else if(t>s.wbits){g.msg="invalid window size",s.mode=30;break}s.dmax=1<<t,g.adler=s.check=1,s.mode=512&w?10:12,v=w=0;break;case 2:for(;v<16;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if(s.flags=w,(255&s.flags)!=8){g.msg="unknown compression method",s.mode=30;break}if(57344&s.flags){g.msg="unknown header flags set",s.mode=30;break}s.head&&(s.head.text=w>>8&1),512&s.flags&&(R[0]=255&w,R[1]=w>>>8&255,s.check=e(s.check,R,2,0)),v=w=0,s.mode=3;case 3:for(;v<32;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}s.head&&(s.head.time=w),512&s.flags&&(R[0]=255&w,R[1]=w>>>8&255,R[2]=w>>>16&255,R[3]=w>>>24&255,s.check=e(s.check,R,4,0)),v=w=0,s.mode=4;case 4:for(;v<16;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}s.head&&(s.head.xflags=255&w,s.head.os=w>>8),512&s.flags&&(R[0]=255&w,R[1]=w>>>8&255,s.check=e(s.check,R,2,0)),v=w=0,s.mode=5;case 5:if(1024&s.flags){for(;v<16;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}s.length=w,s.head&&(s.head.extra_len=w),512&s.flags&&(R[0]=255&w,R[1]=w>>>8&255,s.check=e(s.check,R,2,0)),v=w=0}else s.head&&(s.head.extra=null);s.mode=6;case 6:if(1024&s.flags&&(M<(j=s.length)&&(j=M),j&&(s.head&&(t=s.head.extra_len-s.length,s.head.extra||(s.head.extra=new Array(s.head.extra_len)),a.arraySet(s.head.extra,F,N,j,t)),512&s.flags&&(s.check=e(s.check,F,j,N)),M-=j,N+=j,s.length-=j),s.length))break t;s.length=0,s.mode=7;case 7:if(2048&s.flags){if(M===0)break t;for(j=0;t=F[N+j++],s.head&&t&&s.length<65536&&(s.head.name+=String.fromCharCode(t)),t&&j<M;);if(512&s.flags&&(s.check=e(s.check,F,j,N)),M-=j,N+=j,t)break t}else s.head&&(s.head.name=null);s.length=0,s.mode=8;case 8:if(4096&s.flags){if(M===0)break t;for(j=0;t=F[N+j++],s.head&&t&&s.length<65536&&(s.head.comment+=String.fromCharCode(t)),t&&j<M;);if(512&s.flags&&(s.check=e(s.check,F,j,N)),M-=j,N+=j,t)break t}else s.head&&(s.head.comment=null);s.mode=9;case 9:if(512&s.flags){for(;v<16;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if(w!==(65535&s.check)){g.msg="header crc mismatch",s.mode=30;break}v=w=0}s.head&&(s.head.hcrc=s.flags>>9&1,s.head.done=!0),g.adler=s.check=0,s.mode=12;break;case 10:for(;v<32;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}g.adler=s.check=m(w),v=w=0,s.mode=11;case 11:if(s.havedict===0)return g.next_out=it,g.avail_out=$,g.next_in=N,g.avail_in=M,s.hold=w,s.bits=v,2;g.adler=s.check=1,s.mode=12;case 12:if(z===5||z===6)break t;case 13:if(s.last){w>>>=7&v,v-=7&v,s.mode=27;break}for(;v<3;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}switch(s.last=1&w,v-=1,3&(w>>>=1)){case 0:s.mode=14;break;case 1:if(P(s),s.mode=20,z!==6)break;w>>>=2,v-=2;break t;case 2:s.mode=17;break;case 3:g.msg="invalid block type",s.mode=30}w>>>=2,v-=2;break;case 14:for(w>>>=7&v,v-=7&v;v<32;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if((65535&w)!=(w>>>16^65535)){g.msg="invalid stored block lengths",s.mode=30;break}if(s.length=65535&w,v=w=0,s.mode=15,z===6)break t;case 15:s.mode=16;case 16:if(j=s.length){if(M<j&&(j=M),$<j&&(j=$),j===0)break t;a.arraySet(tt,F,N,j,it),M-=j,N+=j,$-=j,it+=j,s.length-=j;break}s.mode=12;break;case 17:for(;v<14;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if(s.nlen=257+(31&w),w>>>=5,v-=5,s.ndist=1+(31&w),w>>>=5,v-=5,s.ncode=4+(15&w),w>>>=4,v-=4,286<s.nlen||30<s.ndist){g.msg="too many length or distance symbols",s.mode=30;break}s.have=0,s.mode=18;case 18:for(;s.have<s.ncode;){for(;v<3;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}s.lens[C[s.have++]]=7&w,w>>>=3,v-=3}for(;s.have<19;)s.lens[C[s.have++]]=0;if(s.lencode=s.lendyn,s.lenbits=7,K={bits:s.lenbits},U=S(0,s.lens,0,19,s.lencode,0,s.work,K),s.lenbits=K.bits,U){g.msg="invalid code lengths set",s.mode=30;break}s.have=0,s.mode=19;case 19:for(;s.have<s.nlen+s.ndist;){for(;nt=(p=s.lencode[w&(1<<s.lenbits)-1])>>>16&255,ot=65535&p,!((et=p>>>24)<=v);){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if(ot<16)w>>>=et,v-=et,s.lens[s.have++]=ot;else{if(ot===16){for(X=et+2;v<X;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if(w>>>=et,v-=et,s.have===0){g.msg="invalid bit length repeat",s.mode=30;break}t=s.lens[s.have-1],j=3+(3&w),w>>>=2,v-=2}else if(ot===17){for(X=et+3;v<X;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}v-=et,t=0,j=3+(7&(w>>>=et)),w>>>=3,v-=3}else{for(X=et+7;v<X;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}v-=et,t=0,j=11+(127&(w>>>=et)),w>>>=7,v-=7}if(s.have+j>s.nlen+s.ndist){g.msg="invalid bit length repeat",s.mode=30;break}for(;j--;)s.lens[s.have++]=t}}if(s.mode===30)break;if(s.lens[256]===0){g.msg="invalid code -- missing end-of-block",s.mode=30;break}if(s.lenbits=9,K={bits:s.lenbits},U=S(f,s.lens,0,s.nlen,s.lencode,0,s.work,K),s.lenbits=K.bits,U){g.msg="invalid literal/lengths set",s.mode=30;break}if(s.distbits=6,s.distcode=s.distdyn,K={bits:s.distbits},U=S(b,s.lens,s.nlen,s.ndist,s.distcode,0,s.work,K),s.distbits=K.bits,U){g.msg="invalid distances set",s.mode=30;break}if(s.mode=20,z===6)break t;case 20:s.mode=21;case 21:if(6<=M&&258<=$){g.next_out=it,g.avail_out=$,g.next_in=N,g.avail_in=M,s.hold=w,s.bits=v,d(g,O),it=g.next_out,tt=g.output,$=g.avail_out,N=g.next_in,F=g.input,M=g.avail_in,w=s.hold,v=s.bits,s.mode===12&&(s.back=-1);break}for(s.back=0;nt=(p=s.lencode[w&(1<<s.lenbits)-1])>>>16&255,ot=65535&p,!((et=p>>>24)<=v);){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if(nt&&(240&nt)==0){for(lt=et,rt=nt,E=ot;nt=(p=s.lencode[E+((w&(1<<lt+rt)-1)>>lt)])>>>16&255,ot=65535&p,!(lt+(et=p>>>24)<=v);){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}w>>>=lt,v-=lt,s.back+=lt}if(w>>>=et,v-=et,s.back+=et,s.length=ot,nt===0){s.mode=26;break}if(32&nt){s.back=-1,s.mode=12;break}if(64&nt){g.msg="invalid literal/length code",s.mode=30;break}s.extra=15&nt,s.mode=22;case 22:if(s.extra){for(X=s.extra;v<X;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}s.length+=w&(1<<s.extra)-1,w>>>=s.extra,v-=s.extra,s.back+=s.extra}s.was=s.length,s.mode=23;case 23:for(;nt=(p=s.distcode[w&(1<<s.distbits)-1])>>>16&255,ot=65535&p,!((et=p>>>24)<=v);){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if((240&nt)==0){for(lt=et,rt=nt,E=ot;nt=(p=s.distcode[E+((w&(1<<lt+rt)-1)>>lt)])>>>16&255,ot=65535&p,!(lt+(et=p>>>24)<=v);){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}w>>>=lt,v-=lt,s.back+=lt}if(w>>>=et,v-=et,s.back+=et,64&nt){g.msg="invalid distance code",s.mode=30;break}s.offset=ot,s.extra=15&nt,s.mode=24;case 24:if(s.extra){for(X=s.extra;v<X;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}s.offset+=w&(1<<s.extra)-1,w>>>=s.extra,v-=s.extra,s.back+=s.extra}if(s.offset>s.dmax){g.msg="invalid distance too far back",s.mode=30;break}s.mode=25;case 25:if($===0)break t;if(j=O-$,s.offset>j){if((j=s.offset-j)>s.whave&&s.sane){g.msg="invalid distance too far back",s.mode=30;break}dt=j>s.wnext?(j-=s.wnext,s.wsize-j):s.wnext-j,j>s.length&&(j=s.length),ht=s.window}else ht=tt,dt=it-s.offset,j=s.length;for($<j&&(j=$),$-=j,s.length-=j;tt[it++]=ht[dt++],--j;);s.length===0&&(s.mode=21);break;case 26:if($===0)break t;tt[it++]=s.length,$--,s.mode=21;break;case 27:if(s.wrap){for(;v<32;){if(M===0)break t;M--,w|=F[N++]<<v,v+=8}if(O-=$,g.total_out+=O,s.total+=O,O&&(g.adler=s.check=s.flags?e(s.check,tt,O,it-O):r(s.check,tt,O,it-O)),O=$,(s.flags?w:m(w))!==s.check){g.msg="incorrect data check",s.mode=30;break}v=w=0}s.mode=28;case 28:if(s.wrap&&s.flags){for(;v<32;){if(M===0)break t;M--,w+=F[N++]<<v,v+=8}if(w!==(4294967295&s.total)){g.msg="incorrect length check",s.mode=30;break}v=w=0}s.mode=29;case 29:U=1;break t;case 30:U=-3;break t;case 31:return-4;case 32:default:return c}return g.next_out=it,g.avail_out=$,g.next_in=N,g.avail_in=M,s.hold=w,s.bits=v,(s.wsize||O!==g.avail_out&&s.mode<30&&(s.mode<27||z!==4))&&A(g,g.output,g.next_out,O-g.avail_out)?(s.mode=31,-4):(Q-=g.avail_in,O-=g.avail_out,g.total_in+=Q,g.total_out+=O,s.total+=O,s.wrap&&O&&(g.adler=s.check=s.flags?e(s.check,tt,O,g.next_out-O):r(s.check,tt,O,g.next_out-O)),g.data_type=s.bits+(s.last?64:0)+(s.mode===12?128:0)+(s.mode===20||s.mode===15?256:0),(Q==0&&O===0||z===4)&&U===G&&(U=-5),U)},u.inflateEnd=function(g){if(!g||!g.state)return c;var z=g.state;return z.window&&(z.window=null),g.state=null,G},u.inflateGetHeader=function(g,z){var s;return g&&g.state?(2&(s=g.state).wrap)==0?c:((s.head=z).done=!1,G):c},u.inflateSetDictionary=function(g,z){var s,F=z.length;return g&&g.state?(s=g.state).wrap!==0&&s.mode!==11?c:s.mode===11&&r(1,z,F,0)!==s.check?-3:A(g,z,F,F)?(s.mode=31,-4):(s.havedict=1,G):c},u.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(i,h,u){var a=i("../utils/common"),r=[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],e=[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],d=[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],S=[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];h.exports=function(f,b,G,c,y,l,Z,m){var W,I,x,V,J,Y,T,L,P,A=m.bits,g=0,z=0,s=0,F=0,tt=0,N=0,it=0,M=0,$=0,w=0,v=null,Q=0,O=new a.Buf16(16),j=new a.Buf16(16),dt=null,ht=0;for(g=0;g<=15;g++)O[g]=0;for(z=0;z<c;z++)O[b[G+z]]++;for(tt=A,F=15;1<=F&&O[F]===0;F--);if(F<tt&&(tt=F),F===0)return y[l++]=20971520,y[l++]=20971520,m.bits=1,0;for(s=1;s<F&&O[s]===0;s++);for(tt<s&&(tt=s),g=M=1;g<=15;g++)if(M<<=1,(M-=O[g])<0)return-1;if(0<M&&(f===0||F!==1))return-1;for(j[1]=0,g=1;g<15;g++)j[g+1]=j[g]+O[g];for(z=0;z<c;z++)b[G+z]!==0&&(Z[j[b[G+z]]++]=z);if(Y=f===0?(v=dt=Z,19):f===1?(v=r,Q-=257,dt=e,ht-=257,256):(v=d,dt=S,-1),g=s,J=l,it=z=w=0,x=-1,V=($=1<<(N=tt))-1,f===1&&852<$||f===2&&592<$)return 1;for(;;){for(T=g-it,P=Z[z]<Y?(L=0,Z[z]):Z[z]>Y?(L=dt[ht+Z[z]],v[Q+Z[z]]):(L=96,0),W=1<<g-it,s=I=1<<N;y[J+(w>>it)+(I-=W)]=T<<24|L<<16|P|0,I!==0;);for(W=1<<g-1;w&W;)W>>=1;if(W!==0?(w&=W-1,w+=W):w=0,z++,--O[g]==0){if(g===F)break;g=b[G+Z[z]]}if(tt<g&&(w&V)!==x){for(it===0&&(it=tt),J+=s,M=1<<(N=g-it);N+it<F&&!((M-=O[N+it])<=0);)N++,M<<=1;if($+=1<<N,f===1&&852<$||f===2&&592<$)return 1;y[x=w&V]=tt<<24|N<<16|J-l|0}}return w!==0&&(y[J+w]=g-it<<24|64<<16|0),m.bits=tt,0}},{"../utils/common":41}],51:[function(i,h,u){h.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(i,h,u){var a=i("../utils/common"),r=0,e=1;function d(p){for(var R=p.length;0<=--R;)p[R]=0}var S=0,f=29,b=256,G=b+1+f,c=30,y=19,l=2*G+1,Z=15,m=16,W=7,I=256,x=16,V=17,J=18,Y=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],T=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],L=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],P=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],A=new Array(2*(G+2));d(A);var g=new Array(2*c);d(g);var z=new Array(512);d(z);var s=new Array(256);d(s);var F=new Array(f);d(F);var tt,N,it,M=new Array(c);function $(p,R,C,H,k){this.static_tree=p,this.extra_bits=R,this.extra_base=C,this.elems=H,this.max_length=k,this.has_stree=p&&p.length}function w(p,R){this.dyn_tree=p,this.max_code=0,this.stat_desc=R}function v(p){return p<256?z[p]:z[256+(p>>>7)]}function Q(p,R){p.pending_buf[p.pending++]=255&R,p.pending_buf[p.pending++]=R>>>8&255}function O(p,R,C){p.bi_valid>m-C?(p.bi_buf|=R<<p.bi_valid&65535,Q(p,p.bi_buf),p.bi_buf=R>>m-p.bi_valid,p.bi_valid+=C-m):(p.bi_buf|=R<<p.bi_valid&65535,p.bi_valid+=C)}function j(p,R,C){O(p,C[2*R],C[2*R+1])}function dt(p,R){for(var C=0;C|=1&p,p>>>=1,C<<=1,0<--R;);return C>>>1}function ht(p,R,C){var H,k,_=new Array(Z+1),D=0;for(H=1;H<=Z;H++)_[H]=D=D+C[H-1]<<1;for(k=0;k<=R;k++){var B=p[2*k+1];B!==0&&(p[2*k]=dt(_[B]++,B))}}function et(p){var R;for(R=0;R<G;R++)p.dyn_ltree[2*R]=0;for(R=0;R<c;R++)p.dyn_dtree[2*R]=0;for(R=0;R<y;R++)p.bl_tree[2*R]=0;p.dyn_ltree[2*I]=1,p.opt_len=p.static_len=0,p.last_lit=p.matches=0}function nt(p){8<p.bi_valid?Q(p,p.bi_buf):0<p.bi_valid&&(p.pending_buf[p.pending++]=p.bi_buf),p.bi_buf=0,p.bi_valid=0}function ot(p,R,C,H){var k=2*R,_=2*C;return p[k]<p[_]||p[k]===p[_]&&H[R]<=H[C]}function lt(p,R,C){for(var H=p.heap[C],k=C<<1;k<=p.heap_len&&(k<p.heap_len&&ot(R,p.heap[k+1],p.heap[k],p.depth)&&k++,!ot(R,H,p.heap[k],p.depth));)p.heap[C]=p.heap[k],C=k,k<<=1;p.heap[C]=H}function rt(p,R,C){var H,k,_,D,B=0;if(p.last_lit!==0)for(;H=p.pending_buf[p.d_buf+2*B]<<8|p.pending_buf[p.d_buf+2*B+1],k=p.pending_buf[p.l_buf+B],B++,H===0?j(p,k,R):(j(p,(_=s[k])+b+1,R),(D=Y[_])!==0&&O(p,k-=F[_],D),j(p,_=v(--H),C),(D=T[_])!==0&&O(p,H-=M[_],D)),B<p.last_lit;);j(p,I,R)}function E(p,R){var C,H,k,_=R.dyn_tree,D=R.stat_desc.static_tree,B=R.stat_desc.has_stree,q=R.stat_desc.elems,at=-1;for(p.heap_len=0,p.heap_max=l,C=0;C<q;C++)_[2*C]!==0?(p.heap[++p.heap_len]=at=C,p.depth[C]=0):_[2*C+1]=0;for(;p.heap_len<2;)_[2*(k=p.heap[++p.heap_len]=at<2?++at:0)]=1,p.depth[k]=0,p.opt_len--,B&&(p.static_len-=D[2*k+1]);for(R.max_code=at,C=p.heap_len>>1;1<=C;C--)lt(p,_,C);for(k=q;C=p.heap[1],p.heap[1]=p.heap[p.heap_len--],lt(p,_,1),H=p.heap[1],p.heap[--p.heap_max]=C,p.heap[--p.heap_max]=H,_[2*k]=_[2*C]+_[2*H],p.depth[k]=(p.depth[C]>=p.depth[H]?p.depth[C]:p.depth[H])+1,_[2*C+1]=_[2*H+1]=k,p.heap[1]=k++,lt(p,_,1),2<=p.heap_len;);p.heap[--p.heap_max]=p.heap[1],(function(st,ct){var Zt,St,Tt,mt,Bt,si,xt=ct.dyn_tree,Ki=ct.max_code,he=ct.stat_desc.static_tree,me=ct.stat_desc.has_stree,be=ct.stat_desc.extra_bits,Yi=ct.stat_desc.extra_base,zt=ct.stat_desc.max_length,Et=0;for(mt=0;mt<=Z;mt++)st.bl_count[mt]=0;for(xt[2*st.heap[st.heap_max]+1]=0,Zt=st.heap_max+1;Zt<l;Zt++)zt<(mt=xt[2*xt[2*(St=st.heap[Zt])+1]+1]+1)&&(mt=zt,Et++),xt[2*St+1]=mt,Ki<St||(st.bl_count[mt]++,Bt=0,Yi<=St&&(Bt=be[St-Yi]),si=xt[2*St],st.opt_len+=si*(mt+Bt),me&&(st.static_len+=si*(he[2*St+1]+Bt)));if(Et!==0){do{for(mt=zt-1;st.bl_count[mt]===0;)mt--;st.bl_count[mt]--,st.bl_count[mt+1]+=2,st.bl_count[zt]--,Et-=2}while(0<Et);for(mt=zt;mt!==0;mt--)for(St=st.bl_count[mt];St!==0;)Ki<(Tt=st.heap[--Zt])||(xt[2*Tt+1]!==mt&&(st.opt_len+=(mt-xt[2*Tt+1])*xt[2*Tt],xt[2*Tt+1]=mt),St--)}})(p,R),ht(_,at,p.bl_count)}function t(p,R,C){var H,k,_=-1,D=R[1],B=0,q=7,at=4;for(D===0&&(q=138,at=3),R[2*(C+1)+1]=65535,H=0;H<=C;H++)k=D,D=R[2*(H+1)+1],++B<q&&k===D||(B<at?p.bl_tree[2*k]+=B:k!==0?(k!==_&&p.bl_tree[2*k]++,p.bl_tree[2*x]++):B<=10?p.bl_tree[2*V]++:p.bl_tree[2*J]++,_=k,at=(B=0)===D?(q=138,3):k===D?(q=6,3):(q=7,4))}function U(p,R,C){var H,k,_=-1,D=R[1],B=0,q=7,at=4;for(D===0&&(q=138,at=3),H=0;H<=C;H++)if(k=D,D=R[2*(H+1)+1],!(++B<q&&k===D)){if(B<at)for(;j(p,k,p.bl_tree),--B!=0;);else k!==0?(k!==_&&(j(p,k,p.bl_tree),B--),j(p,x,p.bl_tree),O(p,B-3,2)):B<=10?(j(p,V,p.bl_tree),O(p,B-3,3)):(j(p,J,p.bl_tree),O(p,B-11,7));_=k,at=(B=0)===D?(q=138,3):k===D?(q=6,3):(q=7,4)}}d(M);var K=!1;function X(p,R,C,H){O(p,(S<<1)+(H?1:0),3),(function(k,_,D,B){nt(k),Q(k,D),Q(k,~D),a.arraySet(k.pending_buf,k.window,_,D,k.pending),k.pending+=D})(p,R,C)}u._tr_init=function(p){K||((function(){var R,C,H,k,_,D=new Array(Z+1);for(k=H=0;k<f-1;k++)for(F[k]=H,R=0;R<1<<Y[k];R++)s[H++]=k;for(s[H-1]=k,k=_=0;k<16;k++)for(M[k]=_,R=0;R<1<<T[k];R++)z[_++]=k;for(_>>=7;k<c;k++)for(M[k]=_<<7,R=0;R<1<<T[k]-7;R++)z[256+_++]=k;for(C=0;C<=Z;C++)D[C]=0;for(R=0;R<=143;)A[2*R+1]=8,R++,D[8]++;for(;R<=255;)A[2*R+1]=9,R++,D[9]++;for(;R<=279;)A[2*R+1]=7,R++,D[7]++;for(;R<=287;)A[2*R+1]=8,R++,D[8]++;for(ht(A,G+1,D),R=0;R<c;R++)g[2*R+1]=5,g[2*R]=dt(R,5);tt=new $(A,Y,b+1,G,Z),N=new $(g,T,0,c,Z),it=new $(new Array(0),L,0,y,W)})(),K=!0),p.l_desc=new w(p.dyn_ltree,tt),p.d_desc=new w(p.dyn_dtree,N),p.bl_desc=new w(p.bl_tree,it),p.bi_buf=0,p.bi_valid=0,et(p)},u._tr_stored_block=X,u._tr_flush_block=function(p,R,C,H){var k,_,D=0;0<p.level?(p.strm.data_type===2&&(p.strm.data_type=(function(B){var q,at=4093624447;for(q=0;q<=31;q++,at>>>=1)if(1&at&&B.dyn_ltree[2*q]!==0)return r;if(B.dyn_ltree[18]!==0||B.dyn_ltree[20]!==0||B.dyn_ltree[26]!==0)return e;for(q=32;q<b;q++)if(B.dyn_ltree[2*q]!==0)return e;return r})(p)),E(p,p.l_desc),E(p,p.d_desc),D=(function(B){var q;for(t(B,B.dyn_ltree,B.l_desc.max_code),t(B,B.dyn_dtree,B.d_desc.max_code),E(B,B.bl_desc),q=y-1;3<=q&&B.bl_tree[2*P[q]+1]===0;q--);return B.opt_len+=3*(q+1)+5+5+4,q})(p),k=p.opt_len+3+7>>>3,(_=p.static_len+3+7>>>3)<=k&&(k=_)):k=_=C+5,C+4<=k&&R!==-1?X(p,R,C,H):p.strategy===4||_===k?(O(p,2+(H?1:0),3),rt(p,A,g)):(O(p,4+(H?1:0),3),(function(B,q,at,st){var ct;for(O(B,q-257,5),O(B,at-1,5),O(B,st-4,4),ct=0;ct<st;ct++)O(B,B.bl_tree[2*P[ct]+1],3);U(B,B.dyn_ltree,q-1),U(B,B.dyn_dtree,at-1)})(p,p.l_desc.max_code+1,p.d_desc.max_code+1,D+1),rt(p,p.dyn_ltree,p.dyn_dtree)),et(p),H&&nt(p)},u._tr_tally=function(p,R,C){return p.pending_buf[p.d_buf+2*p.last_lit]=R>>>8&255,p.pending_buf[p.d_buf+2*p.last_lit+1]=255&R,p.pending_buf[p.l_buf+p.last_lit]=255&C,p.last_lit++,R===0?p.dyn_ltree[2*C]++:(p.matches++,R--,p.dyn_ltree[2*(s[C]+b+1)]++,p.dyn_dtree[2*v(R)]++),p.last_lit===p.lit_bufsize-1},u._tr_align=function(p){O(p,2,3),j(p,I,A),(function(R){R.bi_valid===16?(Q(R,R.bi_buf),R.bi_buf=0,R.bi_valid=0):8<=R.bi_valid&&(R.pending_buf[R.pending++]=255&R.bi_buf,R.bi_buf>>=8,R.bi_valid-=8)})(p)}},{"../utils/common":41}],53:[function(i,h,u){h.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(i,h,u){(function(a){(function(r,e){if(!r.setImmediate){var d,S,f,b,G=1,c={},y=!1,l=r.document,Z=Object.getPrototypeOf&&Object.getPrototypeOf(r);Z=Z&&Z.setTimeout?Z:r,d={}.toString.call(r.process)==="[object process]"?function(x){process.nextTick(function(){W(x)})}:(function(){if(r.postMessage&&!r.importScripts){var x=!0,V=r.onmessage;return r.onmessage=function(){x=!1},r.postMessage("","*"),r.onmessage=V,x}})()?(b="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",I,!1):r.attachEvent("onmessage",I),function(x){r.postMessage(b+x,"*")}):r.MessageChannel?((f=new MessageChannel).port1.onmessage=function(x){W(x.data)},function(x){f.port2.postMessage(x)}):l&&"onreadystatechange"in l.createElement("script")?(S=l.documentElement,function(x){var V=l.createElement("script");V.onreadystatechange=function(){W(x),V.onreadystatechange=null,S.removeChild(V),V=null},S.appendChild(V)}):function(x){setTimeout(W,0,x)},Z.setImmediate=function(x){typeof x!="function"&&(x=new Function(""+x));for(var V=new Array(arguments.length-1),J=0;J<V.length;J++)V[J]=arguments[J+1];var Y={callback:x,args:V};return c[G]=Y,d(G),G++},Z.clearImmediate=m}function m(x){delete c[x]}function W(x){if(y)setTimeout(W,0,x);else{var V=c[x];if(V){y=!0;try{(function(J){var Y=J.callback,T=J.args;switch(T.length){case 0:Y();break;case 1:Y(T[0]);break;case 2:Y(T[0],T[1]);break;case 3:Y(T[0],T[1],T[2]);break;default:Y.apply(e,T)}})(V)}finally{m(x),y=!1}}}}function I(x){x.source===r&&typeof x.data=="string"&&x.data.indexOf(b)===0&&W(+x.data.slice(b.length))}})(typeof self>"u"?a===void 0?this:a:self)}).call(this,typeof Ft<"u"?Ft:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})})(Ot)),Ot.exports}var Ji=Ui();const oi=wi(Ji);async function Ti(o){const n=await zi(o),i=await oi.loadAsync(n),h=[];return i.forEach((u,a)=>{if(a.dir)return;const r=Fi(u);h.push({name:r,text:()=>a.async("text"),arrayBuffer:()=>a.async("arraybuffer")})}),h}async function zi(o){if(o instanceof ArrayBuffer)return o;if(o instanceof Blob)return await o.arrayBuffer();throw new Error("Unsupported input type for unzipGerbersZip")}function Fi(o){let n=o.replace(/\\/g,"/");return n.startsWith("./")&&(n=n.slice(2)),n.startsWith("/")&&(n=n.slice(1)),n}function Ci(o){return!!o&&typeof o=="object"&&!(o instanceof ArrayBuffer)&&!(o instanceof Uint8Array)}function Pi(o){return o instanceof Uint8Array?o:new Uint8Array(o)}function Ni(o){return o.byteOffset===0&&o.byteLength===o.buffer.byteLength?o.buffer:o.slice().buffer}function Lt(o,n,i=0){if(o.length<i+n.length)return!1;for(let h=0;h<n.length;h++)if(o[i+h]!==n[h])return!1;return!0}function Hi(o){return Lt(o,[80,75,3,4])||Lt(o,[80,75,5,6])||Lt(o,[80,75,7,8])?"zip":Lt(o,[82,97,114,33,26,7,0])||Lt(o,[82,97,114,33,26,7,1,0])?"rar":Lt(o,[55,122,188,175,39,28])?"7z":o.length>262&&Lt(o,[117,115,116,97,114],257)?"tar":"unknown"}function ai(o){return o.replace(/\\/g,"/").replace(/^\.?\//,"")}function ci(o){const n=[],i=o.map(l=>ai(l).toLowerCase()),h=l=>i.some(l),u=/\.(gbr|gbl|gtl|gbs|gts|gbo|gto|gko|gm1|gml|pho|art)$/i,a=/\.(drl|xln)$/i,r=i.filter(l=>u.test(l)).length,e=i.filter(l=>a.test(l)||l.includes("drill")).length,d=h(l=>l.includes("top")&&l.includes("copper")||l.endsWith(".gtl")),S=h(l=>l.includes("bot")||l.includes("bottom")||l.endsWith(".gbl")),f=h(l=>l.includes("mask")||l.includes("solder")||l.endsWith(".gts")||l.endsWith(".gbs")),b=h(l=>l.includes("silk")||l.includes("legend")||l.endsWith(".gto")||l.endsWith(".gbo")),G=h(l=>l.includes("outline")||l.includes("profile")||l.includes("edge")||l.endsWith(".gko")||l.endsWith(".gm1")||l.endsWith(".gml")),c=i.every(l=>l.endsWith(".pdf")||l.endsWith(".png")||l.endsWith(".jpg")||l.endsWith(".jpeg")||l.endsWith(".svg")||l.endsWith(".txt")||l.endsWith(".md"));let y=0;return o.length===0?(n.push("No files found."),{confidence:0,reasons:n}):c?(n.push("Bundle only contains documents/images (no Gerber-like files)."),{confidence:.05,reasons:n}):(r>0?(y+=.35,n.push(`Found ${r} Gerber-like file(s) by extension.`)):n.push("No common Gerber extensions detected."),e>0&&(y+=.2,n.push(`Found ${e} drill-like file(s).`)),G&&(y+=.15,n.push("Found outline/profile/edge candidate.")),d&&S?(y+=.2,n.push("Found both top and bottom copper candidates.")):(d||S)&&(y+=.1,n.push("Found at least one copper candidate.")),f&&(y+=.05,n.push("Found solder mask candidate.")),b&&(y+=.05,n.push("Found silkscreen/legend candidate.")),y=Math.max(0,Math.min(1,y)),y<.6&&r>=2&&(y=Math.max(y,.55),n.push("Multiple Gerber-like files found, but layer completeness is unclear.")),{confidence:y,reasons:n})}async function di(o){if(Ci(o)){const a=Object.keys(o).map(ai),{confidence:r,reasons:e}=ci(a);return{isGerber:r>=.6,archiveType:"directory",confidence:r,reasons:e,files:a}}const n=Pi(o),i=Hi(n);if(i==="zip")try{const a=Ni(n),e=(await Ti(a)).map(f=>f.name),{confidence:d,reasons:S}=ci(e);return{isGerber:d>=.6,archiveType:"zip",confidence:d,reasons:S,files:e}}catch(a){return{isGerber:!1,archiveType:"zip",confidence:.1,reasons:["Looks like a zip, but failed to read as zip.",String(a)]}}if(i==="rar"||i==="7z"||i==="tar")return{isGerber:!1,archiveType:i,confidence:.2,reasons:[`Detected ${i} archive by signature.`,"Archive type is not unpacked by default. Use list/detect for UX, or add a decoder to render."]};const h=new TextDecoder("utf-8",{fatal:!1}).decode(n.slice(0,4096));return h.includes("%FSLAX")||h.includes("%MOIN")||h.includes("%MOMM")||h.includes("G04")||h.includes("%ADD")?{isGerber:!0,archiveType:"single-file",confidence:.7,reasons:["Input appears to be a single Gerber file (RS-274X markers detected)."]}:{isGerber:!1,archiveType:"unknown",confidence:0,reasons:["Input does not match known archive signatures and does not resemble a Gerber file."]}}class bt extends Error{constructor(n,i,h){super(i),this.name="GerberError",this.code=n,this.details=h}}function ui(o){let n=o.replace(/\\/g,"/");return n.startsWith("./")&&(n=n.slice(2)),n.startsWith("/")&&(n=n.slice(1)),n}function Mi(o){return o instanceof Uint8Array?o:new Uint8Array(o)}function hi(o){try{return o.slice().buffer}catch{const n=new Uint8Array(o.byteLength);return n.set(o),n.buffer}}async function _i(o){let n;try{n=await oi.loadAsync(hi(o))}catch(e){throw new bt("NOT_AN_ARCHIVE","Failed to parse ZIP archive",e)}const i={},h=1e3,u=100*1024*1024,a=Object.entries(n.files).filter(([,e])=>e&&!e.dir);if(a.length>h)throw new bt("PARSE_ERROR",`ZIP contains too many files (${a.length} > ${h})`);let r=0;for(const[e,d]of a)try{const S=ui(e),f=await d.async("arraybuffer");if(r+=f.byteLength,r>u)throw new bt("PARSE_ERROR",`ZIP exceeds max extracted size (${u} bytes)`);i[S]=new Uint8Array(f)}catch(S){console.warn(`Failed to extract file ${e}:`,S)}if(Object.keys(i).length===0)throw new bt("PARSE_ERROR","No files extracted from ZIP archive");return i}async function ji(o,n){let i;try{const b=await Promise.resolve().then(()=>ue);i=b.Archive??b.default?.Archive}catch(b){throw new bt("PARSE_ERROR","Failed to load libarchive.js",b)}if(!i)throw new bt("PARSE_ERROR","libarchive.js did not export Archive");if(n?.workerUrl)try{i.init({workerUrl:n.workerUrl})}catch(b){throw new bt("PARSE_ERROR","Failed to initialize libarchive.js worker",b)}let h;try{const b=new Blob([hi(o)],{type:"application/octet-stream"});h=await i.open(b)}catch(b){throw new bt("NOT_AN_ARCHIVE","Failed to open RAR archive",b)}let u;try{u=await Promise.race([h.extractFiles(),new Promise((b,G)=>setTimeout(()=>G(new Error("Extraction timed out")),3e4))])}catch(b){throw new bt("PARSE_ERROR","Failed to extract RAR archive",b)}const a={};let r=0;const e=1e3,d=100*1024*1024;let S=0;async function f(b,G){if(r>=e)throw new bt("PARSE_ERROR",`Archive contains too many files (max ${e})`);for(const c of Object.keys(b)){const y=b[c],l=G?`${G}/${c}`:c;if(y instanceof File||y instanceof Blob){r++;try{const Z=await y.arrayBuffer();if(S+=Z.byteLength,S>d)throw new bt("PARSE_ERROR",`Total extracted size exceeds limit (${d} bytes)`);a[ui(l)]=new Uint8Array(Z)}catch(Z){console.warn(`Failed to extract file ${l}:`,Z)}}else y&&typeof y=="object"&&await f(y,l)}}try{await f(u,"")}finally{if(h&&typeof h.close=="function")try{await h.close()}catch(b){console.warn("Failed to close archive:",b)}}if(Object.keys(a).length===0)throw new bt("PARSE_ERROR","No files extracted from RAR archive");return a}async function mi(o,n){if(!o||o.byteLength===0)throw new bt("NOT_AN_ARCHIVE","Input is empty");const i=Mi(o),h=100*1024*1024;if(i.length>h)throw new bt("PARSE_ERROR",`Input size (${i.length} bytes) exceeds maximum allowed size (${h} bytes)`);let u;try{u=await di(i)}catch(a){throw new bt("PARSE_ERROR","Failed to detect archive type",a)}if(!u.isGerber)throw new bt("NOT_GERBER",u.reasons.join("; ")||"Not a Gerber bundle",u);try{if(u.archiveType==="zip")return{archiveType:"zip",files:await _i(i)};if(u.archiveType==="rar")return{archiveType:"rar",files:await ji(i,n)};throw new bt("UNSUPPORTED_ARCHIVE",`Unsupported archive type: ${u.archiveType}`,u)}catch(a){throw a instanceof bt?a:new bt("PARSE_ERROR",a instanceof Error?a.message:"Unknown error during extraction",{error:a,det:u})}}function Dt(o){return o.toLowerCase()}function It(o,n){const i=new Set(n.map(u=>u.toLowerCase()));return o.filter(u=>{const a=Dt(u),r=a.lastIndexOf(".");return r<0?!1:i.has(a.slice(r))}).sort((u,a)=>u.length-a.length)[0]}function ut(o,n){const i=n.map(u=>u.toLowerCase());return o.filter(u=>{const a=Dt(u);return i.every(r=>a.includes(r))}).sort((u,a)=>u.length-a.length)[0]}function Bi(o){const n=o.filter(f=>{const b=Dt(f);return!(b.endsWith("/")||b.includes("__macosx")||b.endsWith(".ds_store"))}),i=It(n,[".gtl"])||ut(n,["f_cu"])||ut(n,["top","cu"])||ut(n,["top","copper"]),h=It(n,[".gbl"])||ut(n,["b_cu"])||ut(n,["bottom","cu"])||ut(n,["bottom","copper"]),u=It(n,[".gts"])||ut(n,["f_mask"])||ut(n,["top","mask"]),a=It(n,[".gbs"])||ut(n,["b_mask"])||ut(n,["bottom","mask"]),r=It(n,[".gto"])||ut(n,["f_silks"])||ut(n,["f_silk"])||ut(n,["top","silk"]),e=It(n,[".gbo"])||ut(n,["b_silks"])||ut(n,["b_silk"])||ut(n,["bottom","silk"]),d=It(n,[".gko",".gm1"])||ut(n,["edge","cuts"])||ut(n,["outline"])||ut(n,["board","outline"]),S=It(n,[".drl",".xln"])||ut(n,["drill"])||ut(n,["drills"])||ut(n,["npth"])||ut(n,["pth"]);return{top_copper:i,bottom_copper:h,top_mask:u,bottom_mask:a,top_silk:r,bottom_silk:e,outline:d,drills:S}}const Ei=.8;function wt(o,n,i){const h={unitScale:1,fmtInt:2,fmtDec:4,x:0,y:0,apertures:new Map,currentAperture:null,inRegion:!1,regionPaths:[],currentPath:[],currentPolarity:"dark",ops:[],tracks:[],arcs:[],flashes:[],regions:[]},u=n.split(/\r?\n/);for(const a of u){let r=a.trim();if(r&&!r.startsWith("G04")){if(r.startsWith("%")&&r.endsWith("%")){Oi(r,h);continue}r.endsWith("*")&&(r=r.slice(0,-1)),Di(r,h)}}if(h.inRegion){if(h.currentPath.length>=3&&h.regionPaths.push(h.currentPath),h.regionPaths.length>0){const a={loops:h.regionPaths,polarity:h.currentPolarity};h.regions.push(a),h.ops.push({kind:"region",polarity:h.currentPolarity,loops:h.regionPaths})}h.inRegion=!1,h.regionPaths=[],h.currentPath=[]}return{tracks:h.tracks,arcs:h.arcs,flashes:h.flashes,regions:h.regions,ops:h.ops}}function Oi(o,n){let i=o;if(i.startsWith("%")&&(i=i.slice(1)),i.endsWith("%")&&(i=i.slice(0,-1)),i.endsWith("*")&&(i=i.slice(0,-1)),i.startsWith("FS")){const h=/FS..X(\d)(\d)Y(\d)(\d)/.exec(i);if(h){const u=parseInt(h[1],10),a=parseInt(h[2],10);parseInt(h[4],10),n.fmtInt=u,n.fmtDec=a}return}if(i.startsWith("MO")){const h=n.unitScale;let u=h;if(i.includes("MOMM")?u=1:i.includes("MOIN")&&(u=25.4),u!==h){const a=u/h;for(const r of n.apertures.values())r.diameterMm!==void 0&&(r.diameterMm*=a),r.widthMm!==void 0&&(r.widthMm*=a),r.heightMm!==void 0&&(r.heightMm*=a);n.unitScale=u}return}if(i.startsWith("AD")){const h=/AD(D?)(\d+)([A-Z]),?([0-9.Xx]*)/.exec(i);if(!h)return;const u=parseInt(h[2],10),a=h[3],r=h[4]??"";let e,d,S;if(r){const b=r.split(/[Xx]/),G=b[0]?parseFloat(b[0])*n.unitScale:void 0,c=b[1]?parseFloat(b[1])*n.unitScale:void 0;a==="C"?e=G:a==="R"||a==="O"?(d=G,S=c,G!==void 0&&c!==void 0?e=Math.min(G,c):e=G??c):e=G??c}const f={code:u,shape:a,diameterMm:e,widthMm:d,heightMm:S};n.apertures.set(u,f);return}if(i.startsWith("LPD")){n.currentPolarity="dark";return}if(i.startsWith("LPC")){n.currentPolarity="clear";return}}function Di(o,n){if(o==="G36"){n.inRegion=!0,n.regionPaths=[],n.currentPath=[];return}if(o==="G37"){if(n.currentPath.length>=3&&n.regionPaths.push(n.currentPath),n.inRegion=!1,n.regionPaths.length>0){const f={loops:n.regionPaths,polarity:n.currentPolarity};n.regions.push(f),n.ops.push({kind:"region",polarity:n.currentPolarity,loops:n.regionPaths})}n.regionPaths=[],n.currentPath=[];return}let i=null;const h=/D0?(\d{1,3})$/.exec(o);if(h&&(i=parseInt(h[1],10),o=o.slice(0,o.length-h[0].length)),i!==null&&i>=10){const f=n.apertures.get(i);f&&(n.currentAperture=f);return}const u=/X([+\-]?\d+)/.exec(o),a=/Y([+\-]?\d+)/.exec(o);let r=n.x,e=n.y;if(u&&(r=bi(u[1],n)),a&&(e=bi(a[1],n)),i===null){n.x=r,n.y=e;return}if(n.inRegion){const f=n.x,b=n.y;i===1?(n.currentPath.length===0&&n.currentPath.push({x:f,y:b}),n.currentPath.push({x:r,y:e})):i===2&&(n.currentPath.length>=3&&n.regionPaths.push(n.currentPath),n.currentPath=[]),n.x=r,n.y=e;return}const d=n.x,S=n.y;if(i===1){if(!n.currentAperture){n.x=r,n.y=e;return}const f=n.currentAperture.diameterMm!==void 0?n.currentAperture.diameterMm:.2;n.tracks.push({start:{x:d,y:S},end:{x:r,y:e},width:f,polarity:n.currentPolarity}),n.ops.push({kind:"track",polarity:n.currentPolarity,start:{x:d,y:S},end:{x:r,y:e},widthMm:f}),n.x=r,n.y=e;return}if(i===2){n.x=r,n.y=e;return}if(i===3){if(n.currentAperture){const f=n.currentAperture,b=f.diameterMm!==void 0?f.diameterMm:Ei,G={position:{x:r,y:e},diameterMm:b,shape:f.shape,polarity:n.currentPolarity};f.widthMm!==void 0&&(G.widthMm=f.widthMm),f.heightMm!==void 0&&(G.heightMm=f.heightMm),n.flashes.push(G),n.ops.push({kind:"flash",polarity:n.currentPolarity,position:{x:r,y:e},diameterMm:b,shape:f.shape,widthMm:f.widthMm,heightMm:f.heightMm})}n.x=r,n.y=e;return}}function bi(o,n){const i=o.startsWith("-")?-1:1,h=o.replace(/[+\-]/g,""),u=parseInt(h,10);if(Number.isNaN(u))return 0;const a=Math.pow(10,n.fmtDec),r=u/a*n.unitScale;return i*r}function Qi(o,n){const i=n.split(/\r?\n/),h=new Map;let u=null;const a=[];for(const r of i){const e=r.trim();if(e&&!e.startsWith(";")){if(e.startsWith("T")&&e.includes("C")){const d=/^T(\d+)[C]([\d.]+)/i.exec(e);if(d){const S=d[1],f=parseFloat(d[2]);Number.isNaN(f)||h.set(S,f)}continue}if(e.startsWith("T")&&!e.includes("C")){const d=/^T(\d+)/i.exec(e);d&&(u=d[1]);continue}if(e[0]==="X"||e.includes("X")){const d=/X([\-0-9.]+)Y([\-0-9.]+)/i.exec(e);if(!d)continue;const S=d[1],f=d[2],b=parseFloat(S),G=parseFloat(f);if(Number.isNaN(b)||Number.isNaN(G))continue;const c=u&&h.has(u)?h.get(u):.6;a.push({x:b,y:G,diameter:c,plated:!0});continue}}}return{name:o,holes:a}}function Ai(o){return{w:o.maxX-o.minX,h:o.maxY-o.minY}}function Ut(o){const{w:n,h:i}=Ai(o);return Number.isFinite(n)&&Number.isFinite(i)&&n>1&&i>1&&n<2e3&&i<2e3}function vt(o,n){if(!Number.isFinite(o)||!Number.isFinite(n)||o<=0||n<=0)return 1;const i=o/n;return i>20&&i<35?1/25.4:i>.02&&i<.06?25.4:1}function Jt(o,n){return n===1?o:{...o,tracks:o.tracks.map(i=>({...i,start:{x:i.start.x*n,y:i.start.y*n},end:{x:i.end.x*n,y:i.end.y*n},width:(i.width??0)*n})),flashes:o.flashes.map(i=>({...i,position:{x:i.position.x*n,y:i.position.y*n},diameterMm:(i.diameterMm??0)*n,widthMm:(i.widthMm??0)*n,heightMm:(i.heightMm??0)*n})),regions:o.regions.map(i=>({...i,loops:i.loops.map(h=>h.map(u=>({x:u.x*n,y:u.y*n})))}))}}function $i(o,n){return n===1?o:o.map(i=>({x:i.x*n,y:i.y*n,diameter:(i.diameter??0)*n}))}function qi(o){return URL.createObjectURL(new Blob([o],{type:"image/svg+xml"}))}function Gt(o,n,i){o.minX=Math.min(o.minX,n),o.minY=Math.min(o.minY,i),o.maxX=Math.max(o.maxX,n),o.maxY=Math.max(o.maxY,i)}function Qt(){return{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Vt(o){const n=Qt();for(const i of o.tracks){Gt(n,i.start.x,i.start.y),Gt(n,i.end.x,i.end.y);const h=(i.width??0)/2;Gt(n,i.start.x-h,i.start.y-h),Gt(n,i.start.x+h,i.start.y+h),Gt(n,i.end.x-h,i.end.y-h),Gt(n,i.end.x+h,i.end.y+h)}for(const i of o.flashes){const h=(i.widthMm??i.diameterMm)||0,u=(i.heightMm??i.diameterMm)||0;Gt(n,i.position.x-h/2,i.position.y-u/2),Gt(n,i.position.x+h/2,i.position.y+u/2)}for(const i of o.regions)for(const h of i.loops)for(const u of h)Gt(n,u.x,u.y);return n}function te(o){const n=Qt();for(const i of o){const h=(i.diameter||0)/2;Gt(n,i.x-h,i.y-h),Gt(n,i.x+h,i.y+h)}return n}function pi(o,n){return{minX:Math.min(o.minX,n.minX),minY:Math.min(o.minY,n.minY),maxX:Math.max(o.maxX,n.maxX),maxY:Math.max(o.maxY,n.maxY)}}function Wt(o){return!Number.isFinite(o.minX)||!Number.isFinite(o.minY)||!Number.isFinite(o.maxX)||!Number.isFinite(o.maxY)?{minX:0,minY:0,maxX:80,maxY:60}:(o.maxX-o.minX<1e-6&&(o.maxX=o.minX+1),o.maxY-o.minY<1e-6&&(o.maxY=o.minY+1),o)}const ie=1e3;function Xt(o){return o/25.4*ie}function Kt(o,n,i){const h=o-i.minX,u=i.maxY-n;return{x:h,y:u}}function Zi(o,n){return`
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${n}" viewBox="0 0 ${o} ${n}">
|
|
4
|
+
<rect width="${o}" height="${n}" fill="white"/>
|
|
5
|
+
</svg>`.trim()}function yi(o){let n=1/0,i=1/0,h=-1/0,u=-1/0;for(const a of o.loops)for(const r of a)n=Math.min(n,r.x),i=Math.min(i,r.y),h=Math.max(h,r.x),u=Math.max(u,r.y);return{minX:n,minY:i,maxX:h,maxY:u}}function ee(o,n){const i=(n.maxX-n.minX)*(n.maxY-n.minY);let h=0,u=0;for(const f of o.regions){const b=yi(f),G=(b.maxX-b.minX)*(b.maxY-b.minY);f.polarity==="clear"?u=Math.max(u,G):h=Math.max(h,G)}const a=o.tracks.filter(f=>f.polarity!=="clear").length+o.flashes.filter(f=>f.polarity!=="clear").length+o.regions.filter(f=>f.polarity!=="clear").length,r=o.tracks.filter(f=>f.polarity==="clear").length+o.flashes.filter(f=>f.polarity==="clear").length+o.regions.filter(f=>f.polarity==="clear").length,e=h>i*.7,d=r>a*3,S=u>i*.7;return e?!1:d||S}function fi(o,n,i,h){const u=n.maxX-n.minX,a=n.maxY-n.minY,r=Math.max(1,Math.round(Xt(u))),e=Math.max(1,Math.round(Xt(a))),d=Xt(1),S=ee(o,n),f=S?"white":"black",b=(x,V)=>{const J=x-n.minX,Y=n.maxY-V;return{x:J*d,y:Y*d}},G=(x,V)=>{if(x.kind==="track"){const J=b(x.start.x,x.start.y),Y=b(x.end.x,x.end.y),T=Number.isFinite(x.widthMm)?x.widthMm:.2,L=Math.max(1,T*d);return`<line x1="${J.x.toFixed(2)}" y1="${J.y.toFixed(2)}" x2="${Y.x.toFixed(2)}" y2="${Y.y.toFixed(2)}" stroke-width="${L.toFixed(2)}" stroke-linecap="round" stroke-linejoin="round" fill="${V}" stroke="${V}" fill-opacity="1" stroke-opacity="1" />`}if(x.kind==="flash"){const J=b(x.position.x,x.position.y),Y=x.widthMm??x.diameterMm??.8,T=x.heightMm??x.diameterMm??.8,L=Math.max(.01,Number.isFinite(Y)?Y:.8)*d,P=Math.max(.01,Number.isFinite(T)?T:.8)*d;if(x.shape==="R"||x.shape==="O"){const A=J.x-L/2,g=J.y-P/2,z=x.shape==="O"?Math.min(L,P)*.35:0;return`<rect x="${A.toFixed(2)}" y="${g.toFixed(2)}" width="${L.toFixed(2)}" height="${P.toFixed(2)}" rx="${z.toFixed(2)}" fill="${V}" fill-opacity="1" />`}else{const A=Math.max(1,Math.max(L,P)/2);return`<circle cx="${J.x.toFixed(2)}" cy="${J.y.toFixed(2)}" r="${A.toFixed(2)}" fill="${V}" fill-opacity="1" />`}}if(x.kind==="region"){const J=x.loops.map(Y=>{if(!Y.length)return"";const T=b(Y[0].x,Y[0].y),L=[`M ${T.x.toFixed(2)} ${T.y.toFixed(2)}`];for(let P=1;P<Y.length;P++){const A=b(Y[P].x,Y[P].y);L.push(`L ${A.x.toFixed(2)} ${A.y.toFixed(2)}`)}return L.push("Z"),L.join(" ")}).join(" ");return J.trim()?`<path d="${J}" fill-rule="evenodd" fill="${V}" fill-opacity="1" />`:""}return""},c=[];c.push(`<rect x="0" y="0" width="${r}" height="${e}" fill="${f}" fill-opacity="1" />`);for(const x of o.ops){const V=x.polarity==="clear"?"black":"white",J=G(x,V);J&&c.push(J)}console.log("[polarity counts]",{tracksClear:o.tracks.filter(x=>x.polarity==="clear").length,regionsClear:o.regions.filter(x=>x.polarity==="clear").length,negativePlane:S});const y=(n.maxX-n.minX)*(n.maxY-n.minY);let l=0,Z=0;for(const x of o.regions){const V=yi(x),J=(V.maxX-V.minX)*(V.maxY-V.minY);x.polarity==="clear"?Z=Math.max(Z,J):l=Math.max(l,J)}const m=o.tracks.filter(x=>x.polarity!=="clear").length+o.flashes.filter(x=>x.polarity!=="clear").length+o.regions.filter(x=>x.polarity!=="clear").length,W=o.tracks.filter(x=>x.polarity==="clear").length+o.flashes.filter(x=>x.polarity==="clear").length+o.regions.filter(x=>x.polarity==="clear").length;console.log("[plane detect]",{darkCount:m,clearCount:W,largestDarkRegionArea:l,largestClearRegionArea:Z,boardArea:y,negative:S});const I=`ink_${Math.random().toString(16).slice(2)}`;return`
|
|
6
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="${r}" height="${e}" viewBox="0 0 ${r} ${e}">
|
|
7
|
+
<defs>
|
|
8
|
+
<mask id="${I}" maskUnits="userSpaceOnUse" style="mask-type: luminance">
|
|
9
|
+
<rect x="0" y="0" width="${r}" height="${e}" fill="${f}" fill-opacity="1" />
|
|
10
|
+
${c.join(`
|
|
11
|
+
`)}
|
|
12
|
+
</mask>
|
|
13
|
+
</defs>
|
|
14
|
+
|
|
15
|
+
<rect x="0" y="0" width="${r}" height="${e}" fill="${i}" opacity="${h}" mask="url(#${I})" />
|
|
16
|
+
</svg>`.trim()}function Gi(o,n){const i=n.maxX-n.minX,h=n.maxY-n.minY,u=Math.max(1,Math.round(Xt(i))),a=Math.max(1,Math.round(Xt(h))),r=Math.max(1e-6,Xt(1)),e="rgba(255,255,255,0.95)",d="rgba(255,255,255,0.95)",S=o.tracks.map(G=>{const c=Kt(G.start.x,G.start.y,n),y=Kt(G.end.x,G.end.y,n),l=Number.isFinite(G.width)?G.width:.15,Z=Math.max(1,l*r);return`<line x1="${(c.x*r).toFixed(2)}" y1="${(c.y*r).toFixed(2)}" x2="${(y.x*r).toFixed(2)}" y2="${(y.y*r).toFixed(2)}" stroke="${e}" stroke-width="${Z.toFixed(2)}" stroke-linecap="round" stroke-linejoin="round" />`}),f=o.flashes.map(G=>{const c=Kt(G.position.x,G.position.y,n),y=c.x*r,l=c.y*r,Z=G.widthMm??G.diameterMm??.6,m=G.heightMm??G.diameterMm??.6;if(G.shape==="R"||G.shape==="O"){const I=Z*r,x=m*r,V=y-I/2,J=l-x/2,Y=G.shape==="O"?Math.min(I,x)*.35:0;return`<rect x="${V.toFixed(2)}" y="${J.toFixed(2)}" width="${I.toFixed(2)}" height="${x.toFixed(2)}" rx="${Y.toFixed(2)}" fill="${d}" />`}const W=(G.diameterMm??.6)*r/2;return`<circle cx="${y.toFixed(2)}" cy="${l.toFixed(2)}" r="${Math.max(1,W).toFixed(2)}" fill="${d}" />`}),b=o.regions.map(G=>{const c=G.loops.map(y=>{if(!y.length)return"";const l=Kt(y[0].x,y[0].y,n),Z=[`M ${(l.x*r).toFixed(2)} ${(l.y*r).toFixed(2)}`];for(let m=1;m<y.length;m++){const W=Kt(y[m].x,y[m].y,n);Z.push(`L ${(W.x*r).toFixed(2)} ${(W.y*r).toFixed(2)}`)}return Z.push("Z"),Z.join(" ")}).join(" ");return c.trim()?`<path d="${c}" fill="${d}" fill-rule="evenodd" opacity="0.95" />`:""});return`
|
|
17
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="${u}" height="${a}" viewBox="0 0 ${u} ${a}">
|
|
18
|
+
${S.join(`
|
|
10
19
|
`)}
|
|
11
|
-
${
|
|
20
|
+
${f.join(`
|
|
12
21
|
`)}
|
|
13
|
-
</svg>`.trim()}function Yt(M,k){const a=k.maxX-k.minX,v=k.maxY-k.minY,m=Math.max(1,Math.round(_t(a))),l=Math.max(1,Math.round(_t(v))),i=Math.max(1e-6,_t(1)),r="rgba(255,255,255,0.95)",o="rgba(255,255,255,0.95)",b=M.tracks.map(d=>{const s=vt(d.start.x,d.start.y,k),p=vt(d.end.x,d.end.y,k),n=Math.max(1,(d.width||.15)*i);return`<line x1="${(s.x*i).toFixed(2)}" y1="${(s.y*i).toFixed(2)}" x2="${(p.x*i).toFixed(2)}" y2="${(p.y*i).toFixed(2)}" stroke="${r}" stroke-width="${n.toFixed(2)}" stroke-linecap="round" stroke-linejoin="round" />`}),y=M.flashes.map(d=>{const s=vt(d.position.x,d.position.y,k),p=s.x*i,n=s.y*i,h=(d.widthMm??d.diameterMm)||.6,c=(d.heightMm??d.diameterMm)||.6;if(d.shape==="R"||d.shape==="O"){const x=h*i,z=c*i,C=p-x/2,D=n-z/2,T=d.shape==="O"?Math.min(x,z)*.35:0;return`<rect x="${C.toFixed(2)}" y="${D.toFixed(2)}" width="${x.toFixed(2)}" height="${z.toFixed(2)}" rx="${T.toFixed(2)}" fill="${o}" />`}const g=(d.diameterMm||.6)*i/2;return`<circle cx="${p.toFixed(2)}" cy="${n.toFixed(2)}" r="${Math.max(1,g).toFixed(2)}" fill="${o}" />`}),_=M.regions.map(d=>`<polygon points="${d.boundary.map(p=>{const n=vt(p.x,p.y,k);return`${(n.x*i).toFixed(2)},${(n.y*i).toFixed(2)}`}).join(" ")}" fill="${o}" opacity="0.95" />`);return`
|
|
14
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="${m}" height="${l}" viewBox="0 0 ${m} ${l}">
|
|
15
22
|
${b.join(`
|
|
16
23
|
`)}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
${
|
|
20
|
-
`)}
|
|
21
|
-
</svg>`.trim()}function ce(M,k){const a=k.maxX-k.minX,v=k.maxY-k.minY,m=Math.round(_t(a)),l=Math.round(_t(v)),i=_t(1),r=M.map(o=>{const b=vt(o.x,o.y,k),y=b.x*i,_=b.y*i,d=(o.diameter||.6)*i/2;return`<circle cx="${y.toFixed(2)}" cy="${_.toFixed(2)}" r="${Math.max(1,d).toFixed(2)}" fill="none" stroke="#e5e7eb" stroke-width="3" />`});return`
|
|
22
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="${m}" height="${l}" viewBox="0 0 ${m} ${l}">
|
|
23
|
-
${r.join(`
|
|
24
|
+
</svg>`.trim()}function ne(o,n){const i=n.maxX-n.minX,h=n.maxY-n.minY,u=Math.round(Xt(i)),a=Math.round(Xt(h)),r=Xt(1),e=o.map(d=>{const S=Kt(d.x,d.y,n),f=S.x*r,b=S.y*r,G=(d.diameter||.6)*r/2;return`<circle cx="${f.toFixed(2)}" cy="${b.toFixed(2)}" r="${Math.max(1,G).toFixed(2)}" fill="none" stroke="#e5e7eb" stroke-width="3" />`});return`
|
|
25
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="${u}" height="${a}" viewBox="0 0 ${u} ${a}">
|
|
26
|
+
${e.join(`
|
|
24
27
|
`)}
|
|
25
|
-
</svg>`.trim()}async function
|
|
28
|
+
</svg>`.trim()}async function At(o){const n=Object.keys(o).filter(rt=>!!rt),i=Bi(n),h=new TextDecoder("utf-8",{fatal:!1}),u=async rt=>{if(!rt)return null;const E=o[rt];return E?h.decode(E):null},a=await u(i.top_copper),r=await u(i.bottom_copper),e=await u(i.outline),d=await u(i.drills),S=await u(i.top_silk),f=await u(i.bottom_silk),b=a?wt(i.top_copper||"top",a):null,G=r?wt(i.bottom_copper||"bot",r):null,c=e?wt(i.outline||"outline",e):null,y=d?Qi(i.drills||"drills",d):null,l=y?y.holes.map(rt=>({x:rt.x,y:rt.y,diameter:rt.diameter})):[],Z=S?wt(i.top_silk||"top_silk",S):null,m=f?wt(i.bottom_silk||"bot_silk",f):null,W=b?Wt(Vt(b)):null,I=G?Wt(Vt(G)):null,x=c?Wt(Vt(c)):null,V=l.length?Wt(te(l)):null,J=Z?Wt(Vt(Z)):null,Y=m?Wt(Vt(m)):null,T=(x&&Ut(x)?x:null)||(W&&Ut(W)?W:null)||(I&&Ut(I)?I:null)||(V&&Ut(V)?V:null),L=T?T.maxX-T.minX:1,P=W?vt(W.maxX-W.minX,L):1,A=I?vt(I.maxX-I.minX,L):1,g=x?vt(x.maxX-x.minX,L):1,z=V?vt(V.maxX-V.minX,L):1,s=J?vt(J.maxX-J.minX,L):1,F=Y?vt(Y.maxX-Y.minX,L):1,tt=b?Jt(b,P):null,N=G?Jt(G,A):null,it=c?Jt(c,g):null,M=l.length?$i(l,z):[],$=Z?Jt(Z,s):null,w=m?Jt(m,F):null;let v=null;if(it){const rt=Wt(Vt(it));Ut(rt)&&(v=rt)}if(!v){let rt=Qt();tt&&(rt=pi(rt,Vt(tt))),N&&(rt=pi(rt,Vt(N))),rt=Wt(rt),v=rt}const Q=Wt(v),O=Q.maxX-Q.minX,j=Q.maxY-Q.minY,dt={board:{width_in:O/25.4,height_in:j/25.4,mm_bounds:{min_x_mm:Q.minX,min_y_mm:Q.minY,max_x_mm:Q.maxX,max_y_mm:Q.maxY}}},ht=Math.max(1,Math.round(Xt(O))),et=Math.max(1,Math.round(Xt(j))),nt=[],ot=rt=>{const E=qi(rt);return nt.push(E),E},lt={top_board_mask:ot(Zi(ht,et)),bottom_board_mask:ot(Zi(ht,et))};return tt&&(lt.top_copper=ot(fi(tt,Q,"#fbbf24",1))),N&&(lt.bottom_copper=ot(fi(N,Q,"#38bdf8",1))),M.length&&(lt.drills=ot(ne(M,Q))),$&&(lt.top_silk=ot(Gi($,Q))),w&&(lt.bottom_silk=ot(Gi(w,Q))),{boardGeom:dt,layers:lt,revoke:()=>nt.forEach(rt=>URL.revokeObjectURL(rt))}}async function re(o){const n=o instanceof Uint8Array?o.byteOffset===0&&o.byteLength===o.buffer.byteLength?o.buffer:o.slice().buffer:o instanceof ArrayBuffer?o:await o.arrayBuffer(),{files:i,archiveType:h}=await mi(n,{workerUrl:"/libarchive-worker-bundle.js"});if(h!=="zip")throw new Error(`renderGerbersZip expected zip but got ${h}`);return await At(i)}async function se(o,n){const{files:i}=await mi(o,{workerUrl:n?.archiveWorkerUrl});return await At(i)}function le(o,n,i){return Math.max(n,Math.min(i,o))}function Pt(o,n){return!Number.isFinite(o)||!Number.isFinite(n)||n<=0?0:(o%n+n)%n}function gt(o,n){n&&n.startsWith("blob:")||n&&n.length>0?o.setAttribute("src",n):o.removeAttribute("src")}function pt(o,n){const i=o.querySelector(n);if(!i)throw new Error(`Missing required element: ${n}`);return i}function oe(o,n={}){const i=`
|
|
26
29
|
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
27
30
|
<path d="M12 3v10" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
|
|
28
31
|
<path d="M8 11l4 4 4-4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
29
32
|
<path d="M4 17v3h16v-3" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
|
|
30
33
|
</svg>
|
|
31
|
-
`;
|
|
34
|
+
`;o.innerHTML=`
|
|
32
35
|
<div class="board-viewer-root">
|
|
33
36
|
<div class="viewer-header">
|
|
34
37
|
<div class="viewer-header-left">
|
|
@@ -61,7 +64,7 @@
|
|
|
61
64
|
|
|
62
65
|
<button class="btn" id="fit-btn" type="button" title="Fit to viewport">Fit</button>
|
|
63
66
|
<button class="btn btn-primary" id="download-btn" type="button" title="Download">
|
|
64
|
-
${
|
|
67
|
+
${i}
|
|
65
68
|
Download
|
|
66
69
|
</button>
|
|
67
70
|
</div>
|
|
@@ -96,5 +99,5 @@
|
|
|
96
99
|
</div>
|
|
97
100
|
</div>
|
|
98
101
|
</div>
|
|
99
|
-
`;const v=M.firstElementChild,m=pt(v,"#board-viewport"),l=pt(v,"#board-content"),i=pt(v,"#board-stage"),r=pt(v,"#boardClip"),o=pt(v,"#grid-canvas"),b=pt(v,"#grid-toggle"),y=pt(v,"#grid-units"),_=pt(v,"#fit-btn"),d=pt(v,"#download-btn"),s=Array.from(v.querySelectorAll('input[name="side"]')),p=pt(v,"#img-fr4"),n=pt(v,"#img-top-copper"),h=pt(v,"#img-bottom-copper"),c=pt(v,"#img-top-mask"),g=pt(v,"#img-bottom-mask"),x=pt(v,"#img-top-silk"),z=pt(v,"#img-bottom-silk"),C=pt(v,"#img-drills"),D=pt(v,"#img-vias");let T=null,P={},O=1,W=0,V=0,w=!1,R=0,e=0,N=0,tt=0,U=!1,et=!1;function X(G){return he(G,.2,8)}function J(){U||(U=!0,requestAnimationFrame(()=>{U=!1,l.style.transform=`translate3d(${W}px, ${V}px, 0) scale(${O})`,b.checked&&H()}))}function B(G=.08){const t=m.getBoundingClientRect(),F=i.offsetWidth||1,I=i.offsetHeight||1,f=Math.max(1,t.width*(1-2*G)),u=Math.max(1,t.height*(1-2*G));O=X(Math.min(f/F,u/I)),W=(t.width-O*F)/2,V=(t.height-O*I)/2,J()}function A(){let G=1e3;if(T?.board?.width_in){const F=i.getBoundingClientRect().width/O;Number.isFinite(F)&&F>0&&(G=F/T.board.width_in)}return G}function K(){const G=window.devicePixelRatio||1,t=m.getBoundingClientRect();o.width=Math.max(1,Math.floor(t.width*G)),o.height=Math.max(1,Math.floor(t.height*G)),o.style.width=`${t.width}px`,o.style.height=`${t.height}px`}function H(){if(!b.checked){o.style.display="none";return}o.style.display="block";const G=o.getContext("2d");if(!G)return;const t=window.devicePixelRatio||1,F=m.getBoundingClientRect(),I=F.width,f=F.height;G.setTransform(t,0,0,t,0,0),G.clearRect(0,0,I,f);const u=A(),S=u/25.4,L=y.value,j=L==="mm"?S*1:u*.1,E=L==="mm"?S*10:u*1,Z=j*O,q=E*O;if(!Number.isFinite(Z)||Z<6)return;const Y=Mt(W,Z),Q=Mt(V,Z),lt=Mt(W,q),st=Mt(V,q);G.lineWidth=1,G.strokeStyle="rgba(17, 24, 39, 0.12)",G.beginPath();for(let ct=Y;ct<I;ct+=Z){const mt=Math.round(ct)+.5;G.moveTo(mt,0),G.lineTo(mt,f)}for(let ct=Q;ct<f;ct+=Z){const mt=Math.round(ct)+.5;G.moveTo(0,mt),G.lineTo(I,mt)}if(G.stroke(),Number.isFinite(q)&&q>=12){G.strokeStyle="rgba(17, 24, 39, 0.22)",G.beginPath();for(let ct=lt;ct<I;ct+=q){const mt=Math.round(ct)+.5;G.moveTo(mt,0),G.lineTo(mt,f)}for(let ct=st;ct<f;ct+=q){const mt=Math.round(ct)+.5;G.moveTo(0,mt),G.lineTo(I,mt)}G.stroke()}}function $(G,t){const F=v.querySelector(`#${G}`);F&&(F.style.display=t?"block":"none")}function ut(G){G&&r.style.setProperty("--board-mask-url",`url('${G}')`)}function dt(G){const t=G==="top",F=G==="bottom";$("layer-top-copper",t&&!!P.top_copper),$("layer-top-mask",t&&!!P.top_mask),$("layer-top-silk",t&&!!P.top_silk),$("layer-bottom-copper",F&&!!P.bottom_copper),$("layer-bottom-mask",F&&!!P.bottom_mask),$("layer-bottom-silk",F&&!!P.bottom_silk),$("layer-drills",!!P.drills),$("layer-vias",!!P.vias);const I=G==="bottom"?P.bottom_board_mask??P.top_board_mask:P.top_board_mask??P.bottom_board_mask;I&&ut(I)}function rt(){if(!T?.board)return;const G=1e3,t=Math.round((T.board.width_in||1)*G),F=Math.round((T.board.height_in||1)*G);i.style.width=`${t}px`,i.style.height=`${F}px`}m.addEventListener("wheel",G=>{G.preventDefault(),et=!0;const t=m.getBoundingClientRect(),F=G.clientX-t.left,I=G.clientY-t.top,f=O,u=1.1;O=G.deltaY<0?X(O*u):X(O/u);const S=O/f;W=F-(F-W)*S,V=I-(I-V)*S,J()},{passive:!1}),m.addEventListener("mousedown",G=>{G.button===0&&(G.preventDefault(),et=!0,w=!0,m.classList.add("grabbing"),R=G.clientX,e=G.clientY,N=W,tt=V)});const nt=G=>{if(!w)return;const t=G.clientX-R,F=G.clientY-e;W=N+t,V=tt+F,J()},ot=()=>{w&&(w=!1,m.classList.remove("grabbing"))};window.addEventListener("mousemove",nt),window.addEventListener("mouseup",ot),b.addEventListener("change",()=>{K(),H()}),y.addEventListener("change",H),_.addEventListener("click",()=>B(.08)),d.addEventListener("click",()=>{k.onDownload?.()}),s.forEach(G=>{G.addEventListener("change",()=>{const t=s.find(F=>F.checked)?.value||"top";dt(t)})}),window.addEventListener("resize",()=>{K(),et?J():B(.08)});function at(G){T=G.boardGeom,P=G.layers,wt(n,P.top_copper),wt(h,P.bottom_copper),wt(c,P.top_mask),wt(g,P.bottom_mask),wt(x,P.top_silk),wt(z,P.bottom_silk),wt(C,P.drills),wt(D,P.vias),wt(p,P.top_copper??P.bottom_copper),rt(),K(),B(.08);const t=s.find(F=>F.checked)?.value||"top";dt(t),J()}function it(){window.removeEventListener("mousemove",nt),window.removeEventListener("mouseup",ot),M.innerHTML=""}return{setData:at,setSideMode:G=>{const t=s.find(F=>F.value===G);t&&(t.checked=!0),dt(G)},fit:()=>B(.08),dispose:it}}zt.createBoardViewer=de,zt.renderGerbersZip=ue,Object.defineProperty(zt,Symbol.toStringTag,{value:"Module"})}));
|
|
102
|
+
`;const h=o.firstElementChild,u=pt(h,"#board-viewport"),a=pt(h,"#board-content"),r=pt(h,"#board-stage"),e=pt(h,"#boardClip"),d=pt(h,"#grid-canvas"),S=pt(h,"#grid-toggle"),f=pt(h,"#grid-units"),b=pt(h,"#fit-btn"),G=pt(h,"#download-btn"),c=Array.from(h.querySelectorAll('input[name="side"]')),y=pt(h,"#img-fr4"),l=pt(h,"#img-top-copper"),Z=pt(h,"#img-bottom-copper"),m=pt(h,"#img-top-mask"),W=pt(h,"#img-bottom-mask"),I=pt(h,"#img-top-silk"),x=pt(h,"#img-bottom-silk"),V=pt(h,"#img-drills"),J=pt(h,"#img-vias");let Y=null,T={},L=1,P=0,A=0,g=!1,z=0,s=0,F=0,tt=0,N=!1,it=!1;function M(E){return le(E,.2,8)}function $(){N||(N=!0,requestAnimationFrame(()=>{N=!1,a.style.transform=`translate3d(${P}px, ${A}px, 0) scale(${L})`,S.checked&&O()}))}function w(E=.08){const t=u.getBoundingClientRect(),U=r.offsetWidth||1,K=r.offsetHeight||1,X=Math.max(1,t.width*(1-2*E)),p=Math.max(1,t.height*(1-2*E));L=M(Math.min(X/U,p/K)),P=(t.width-L*U)/2,A=(t.height-L*K)/2,$()}function v(){let E=1e3;if(Y?.board?.width_in){const U=r.getBoundingClientRect().width/L;Number.isFinite(U)&&U>0&&(E=U/Y.board.width_in)}return E}function Q(){const E=window.devicePixelRatio||1,t=u.getBoundingClientRect();d.width=Math.max(1,Math.floor(t.width*E)),d.height=Math.max(1,Math.floor(t.height*E)),d.style.width=`${t.width}px`,d.style.height=`${t.height}px`}function O(){if(!S.checked){d.style.display="none";return}d.style.display="block";const E=d.getContext("2d");if(!E)return;const t=window.devicePixelRatio||1,U=u.getBoundingClientRect(),K=U.width,X=U.height;E.setTransform(t,0,0,t,0,0),E.clearRect(0,0,K,X);const p=v(),R=p/25.4,C=f.value,H=C==="mm"?R*1:p*.1,k=C==="mm"?R*10:p*1,_=H*L,D=k*L;if(!Number.isFinite(_)||_<6)return;const B=Pt(P,_),q=Pt(A,_),at=Pt(P,D),st=Pt(A,D);E.lineWidth=1,E.strokeStyle="rgba(17, 24, 39, 0.12)",E.beginPath();for(let ct=B;ct<K;ct+=_){const Zt=Math.round(ct)+.5;E.moveTo(Zt,0),E.lineTo(Zt,X)}for(let ct=q;ct<X;ct+=_){const Zt=Math.round(ct)+.5;E.moveTo(0,Zt),E.lineTo(K,Zt)}if(E.stroke(),Number.isFinite(D)&&D>=12){E.strokeStyle="rgba(17, 24, 39, 0.22)",E.beginPath();for(let ct=at;ct<K;ct+=D){const Zt=Math.round(ct)+.5;E.moveTo(Zt,0),E.lineTo(Zt,X)}for(let ct=st;ct<X;ct+=D){const Zt=Math.round(ct)+.5;E.moveTo(0,Zt),E.lineTo(K,Zt)}E.stroke()}}function j(E,t){const U=h.querySelector(`#${E}`);U&&(U.style.display=t?"block":"none")}function dt(E){E&&e.style.setProperty("--board-mask-url",`url('${E}')`)}function ht(E){const t=E==="top",U=E==="bottom";j("layer-top-copper",t&&!!T.top_copper),j("layer-top-mask",t&&!!T.top_mask),j("layer-top-silk",t&&!!T.top_silk),j("layer-bottom-copper",U&&!!T.bottom_copper),j("layer-bottom-mask",U&&!!T.bottom_mask),j("layer-bottom-silk",U&&!!T.bottom_silk),j("layer-drills",!!T.drills),j("layer-vias",!!T.vias);const K=E==="bottom"?T.bottom_board_mask??T.top_board_mask:T.top_board_mask??T.bottom_board_mask;K&&dt(K)}function et(){if(!Y?.board)return;const E=1e3,t=Math.round((Y.board.width_in||1)*E),U=Math.round((Y.board.height_in||1)*E);r.style.width=`${t}px`,r.style.height=`${U}px`}u.addEventListener("wheel",E=>{E.preventDefault(),it=!0;const t=u.getBoundingClientRect(),U=E.clientX-t.left,K=E.clientY-t.top,X=L,p=1.1;L=E.deltaY<0?M(L*p):M(L/p);const R=L/X;P=U-(U-P)*R,A=K-(K-A)*R,$()},{passive:!1}),u.addEventListener("mousedown",E=>{E.button===0&&(E.preventDefault(),it=!0,g=!0,u.classList.add("grabbing"),z=E.clientX,s=E.clientY,F=P,tt=A)});const nt=E=>{if(!g)return;const t=E.clientX-z,U=E.clientY-s;P=F+t,A=tt+U,$()},ot=()=>{g&&(g=!1,u.classList.remove("grabbing"))};window.addEventListener("mousemove",nt),window.addEventListener("mouseup",ot),S.addEventListener("change",()=>{Q(),O()}),f.addEventListener("change",O),b.addEventListener("click",()=>w(.08)),G.addEventListener("click",()=>{n.onDownload?.()}),c.forEach(E=>{E.addEventListener("change",()=>{const t=c.find(U=>U.checked)?.value||"top";ht(t)})}),window.addEventListener("resize",()=>{Q(),it?$():w(.08)});function lt(E){Y=E.boardGeom,T=E.layers,gt(l,T.top_copper),gt(Z,T.bottom_copper),gt(m,T.top_mask),gt(W,T.bottom_mask),gt(I,T.top_silk),gt(x,T.bottom_silk),gt(V,T.drills),gt(J,T.vias),gt(y,T.top_copper??T.bottom_copper),et(),Q(),w(.08);const t=c.find(U=>U.checked)?.value||"top";ht(t),$()}function rt(){window.removeEventListener("mousemove",nt),window.removeEventListener("mouseup",ot),o.innerHTML=""}return{setData:lt,setSideMode:E=>{const t=c.find(U=>U.value===E);t&&(t.checked=!0),ht(E)},fit:()=>w(.08),dispose:rt}}const Xi=Symbol("Comlink.proxy"),ae=Symbol("Comlink.endpoint"),ce=Symbol("Comlink.releaseProxy"),$t=Symbol("Comlink.finalizer"),Nt=Symbol("Comlink.thrown"),Si=o=>typeof o=="object"&&o!==null||typeof o=="function",Wi=new Map([["proxy",{canHandle:o=>Si(o)&&o[Xi],serialize(o){const{port1:n,port2:i}=new MessageChannel;return gi(o,n),[i,[i]]},deserialize:o=>(o.start(),Ii(o))}],["throw",{canHandle:o=>Si(o)&&Nt in o,serialize({value:o}){let n;return n=o instanceof Error?{isError:!0,value:{message:o.message,name:o.name,stack:o.stack}}:{isError:!1,value:o},[n,[]]},deserialize(o){throw o.isError?Object.assign(new Error(o.value.message),o.value):o.value}}]]);function gi(o,n=globalThis,i=["*"]){n.addEventListener("message",(function h(u){if(!u||!u.data)return;if(!(function(f,b){for(const G of f)if(b===G||G==="*"||G instanceof RegExp&&G.test(b))return!0;return!1})(i,u.origin))return void console.warn(`Invalid origin '${u.origin}' for comlink proxy`);const{id:a,type:r,path:e}=Object.assign({path:[]},u.data),d=(u.data.argumentList||[]).map(kt);let S;try{const f=e.slice(0,-1).reduce(((G,c)=>G[c]),o),b=e.reduce(((G,c)=>G[c]),o);switch(r){case"GET":S=b;break;case"SET":f[e.slice(-1)[0]]=kt(u.data.value),S=!0;break;case"APPLY":S=b.apply(f,d);break;case"CONSTRUCT":S=ti(new b(...d));break;case"ENDPOINT":{const{port1:G,port2:c}=new MessageChannel;gi(o,c),S=(function(y,l){return Li.set(y,l),y})(G,[G])}break;case"RELEASE":S=void 0;break;default:return}}catch(f){S={value:f,[Nt]:0}}Promise.resolve(S).catch((f=>({value:f,[Nt]:0}))).then((f=>{const[b,G]=jt(f);n.postMessage(Object.assign(Object.assign({},b),{id:a}),G),r==="RELEASE"&&(n.removeEventListener("message",h),xi(n),$t in o&&typeof o[$t]=="function"&&o[$t]())})).catch((f=>{const[b,G]=jt({value:new TypeError("Unserializable return value"),[Nt]:0});n.postMessage(Object.assign(Object.assign({},b),{id:a}),G)}))})),n.start&&n.start()}function xi(o){(function(n){return n.constructor.name==="MessagePort"})(o)&&o.close()}function Ii(o,n){return qt(o,[],n)}function Ht(o){if(o)throw new Error("Proxy has been released and is not useable")}function Vi(o){return Yt(o,{type:"RELEASE"}).then((()=>{xi(o)}))}const Mt=new WeakMap,_t="FinalizationRegistry"in globalThis&&new FinalizationRegistry((o=>{const n=(Mt.get(o)||0)-1;Mt.set(o,n),n===0&&Vi(o)}));function qt(o,n=[],i=function(){}){let h=!1;const u=new Proxy(i,{get(a,r){if(Ht(h),r===ce)return()=>{(function(e){_t&&_t.unregister(e)})(u),Vi(o),h=!0};if(r==="then"){if(n.length===0)return{then:()=>u};const e=Yt(o,{type:"GET",path:n.map((d=>d.toString()))}).then(kt);return e.then.bind(e)}return qt(o,[...n,r])},set(a,r,e){Ht(h);const[d,S]=jt(e);return Yt(o,{type:"SET",path:[...n,r].map((f=>f.toString())),value:d},S).then(kt)},apply(a,r,e){Ht(h);const d=n[n.length-1];if(d===ae)return Yt(o,{type:"ENDPOINT"}).then(kt);if(d==="bind")return qt(o,n.slice(0,-1));const[S,f]=Ri(e);return Yt(o,{type:"APPLY",path:n.map((b=>b.toString())),argumentList:S},f).then(kt)},construct(a,r){Ht(h);const[e,d]=Ri(r);return Yt(o,{type:"CONSTRUCT",path:n.map((S=>S.toString())),argumentList:e},d).then(kt)}});return(function(a,r){const e=(Mt.get(r)||0)+1;Mt.set(r,e),_t&&_t.register(a,r,a)})(u,o),u}function Ri(o){const n=o.map(jt);return[n.map((h=>h[0])),(i=n.map((h=>h[1])),Array.prototype.concat.apply([],i))];var i}const Li=new WeakMap;function ti(o){return Object.assign(o,{[Xi]:!0})}function jt(o){for(const[n,i]of Wi)if(i.canHandle(o)){const[h,u]=i.serialize(o);return[{type:"HANDLER",name:n,value:h},u]}return[{type:"RAW",value:o},Li.get(o)||[]]}function kt(o){switch(o.type){case"HANDLER":return Wi.get(o.name).deserialize(o.value);case"RAW":return o.value}}function Yt(o,n,i){return new Promise((h=>{const u=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");o.addEventListener("message",(function a(r){r.data&&r.data.id&&r.data.id===u&&(o.removeEventListener("message",a),h(r.data))})),o.start&&o.start(),o.postMessage(Object.assign({id:u},n),i)}))}class ii{constructor(n,i,h,u,a){this._name=n,this._size=i,this._path=h,this._lastModified=u,this._archiveRef=a}get name(){return this._name}get size(){return this._size}get lastModified(){return this._lastModified}extract(){return this._archiveRef.extractSingleFile(this._path)}}function ei(o){if(o instanceof File||o instanceof ii||o===null)return o;const n={};for(const i of Object.keys(o))n[i]=ei(o[i]);return n}function ki(o,n=""){const i=[];for(const h of Object.keys(o))o[h]instanceof File||o[h]instanceof ii||o[h]===null?i.push({file:o[h]||h,path:n}):i.push(...ki(o[h],`${n}${h}/`));return i}function vi(o,n){const i=n.split("/");i[i.length-1]===""&&i.pop();let h=o,u=null;for(const a of i)h[a]=h[a]||{},u=h,h=h[a];return[u,i[i.length-1]]}class de{constructor(n,i,h){this._content={},this._processed=0,this.file=n,this.client=i,this.worker=h}open(){return this._content={},this._processed=0,new Promise(((n,i)=>{this.client.open(this.file,ti((()=>{n(this)})))}))}async close(){var n;(n=this.worker)===null||n===void 0||n.terminate(),this.worker=null,this.client=null,this.file=null}async hasEncryptedData(){return await this.client.hasEncryptedData()}async usePassword(n){await this.client.usePassword(n)}async setLocale(n){await this.client.setLocale(n)}async getFilesObject(){return this._processed>0?Promise.resolve().then((()=>this._content)):((await this.client.listFiles()).forEach((n=>{const[i,h]=vi(this._content,n.path);n.type==="FILE"&&(i[h]=new ii(n.fileName,n.size,n.path,n.lastModified,this))})),this._processed=1,ei(this._content))}getFilesArray(){return this.getFilesObject().then((n=>ki(n)))}async extractSingleFile(n){if(this.worker===null)throw new Error("Archive already closed");const i=await this.client.extractSingleFile(n);return new File([i.fileData],i.fileName,{type:"application/octet-stream",lastModified:i.lastModified/1e6})}async extractFiles(n=void 0){var i;return this._processed>1?Promise.resolve().then((()=>this._content)):((await this.client.extractFiles()).forEach((h=>{const[u,a]=vi(this._content,h.path);h.type==="FILE"&&(u[a]=new File([h.fileData],h.fileName,{type:"application/octet-stream"}),n!==void 0&&setTimeout(n.bind(null,{file:u[a],path:h.path})))})),this._processed=2,(i=this.worker)===null||i===void 0||i.terminate(),ei(this._content))}}var ni,ri;(function(o){o.SEVEN_ZIP="7zip",o.AR="ar",o.ARBSD="arbsd",o.ARGNU="argnu",o.ARSVR4="arsvr4",o.BIN="bin",o.BSDTAR="bsdtar",o.CD9660="cd9660",o.CPIO="cpio",o.GNUTAR="gnutar",o.ISO="iso",o.ISO9660="iso9660",o.MTREE="mtree",o.MTREE_CLASSIC="mtree-classic",o.NEWC="newc",o.ODC="odc",o.OLDTAR="oldtar",o.PAX="pax",o.PAXR="paxr",o.POSIX="posix",o.PWB="pwb",o.RAW="raw",o.RPAX="rpax",o.SHAR="shar",o.SHARDUMP="shardump",o.USTAR="ustar",o.V7TAR="v7tar",o.V7="v7",o.WARC="warc",o.XAR="xar",o.ZIP="zip"})(ni||(ni={})),(function(o){o.B64ENCODE="b64encode",o.BZIP2="bzip2",o.COMPRESS="compress",o.GRZIP="grzip",o.GZIP="gzip",o.LRZIP="lrzip",o.LZ4="lz4",o.LZIP="lzip",o.LZMA="lzma",o.LZOP="lzop",o.UUENCODE="uuencode",o.XZ="xz",o.ZSTD="zstd",o.NONE="none"})(ri||(ri={}));class yt{static init(n=null){return yt._options=n||{},yt._options}static async open(n){const i=yt.getWorker(yt._options),h=await yt.getClient(i,yt._options);return await new de(n,h,i).open()}static async write({files:n,outputFileName:i,compression:h,format:u,passphrase:a=null}){const r=yt.getWorker(yt._options),e=await yt.getClient(r,yt._options),d=await e.writeArchive(n,h,u,a);return r.terminate(),new File([d],i,{type:"application/octet-stream"})}static getWorker(n){return n.getWorker?n.getWorker():new Worker(n.workerUrl||new URL("data:text/javascript;base64,LyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICovCmNvbnN0IGU9U3ltYm9sKCJDb21saW5rLnByb3h5Iikscj1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSx0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxuPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxvPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxhPWU9PiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLHM9bmV3IE1hcChbWyJwcm94eSIse2NhbkhhbmRsZTpyPT5hKHIpJiZyW2VdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaShlLHIpLFt0LFt0XV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksZihlLFtdLHIpO3ZhciByfX1dLFsidGhyb3ciLHtjYW5IYW5kbGU6ZT0+YShlKSYmbyBpbiBlLHNlcmlhbGl6ZSh7dmFsdWU6ZX0pe2xldCByO3JldHVybiByPWUgaW5zdGFuY2VvZiBFcnJvcj97aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTplLm1lc3NhZ2UsbmFtZTplLm5hbWUsc3RhY2s6ZS5zdGFja319Ontpc0Vycm9yOiExLHZhbHVlOmV9LFtyLFtdXX0sZGVzZXJpYWxpemUoZSl7aWYoZS5pc0Vycm9yKXRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGUudmFsdWUubWVzc2FnZSksZS52YWx1ZSk7dGhyb3cgZS52YWx1ZX19XV0pO2Z1bmN0aW9uIGkocix0PWdsb2JhbFRoaXMsYT1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoZnVuY3Rpb24gcyhsKXtpZighbHx8IWwuZGF0YSlyZXR1cm47aWYoIWZ1bmN0aW9uKGUscil7Zm9yKGNvbnN0IHQgb2YgZSl7aWYocj09PXR8fCIqIj09PXQpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KHIpKXJldHVybiEwfXJldHVybiExfShhLGwub3JpZ2luKSlyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke2wub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtjb25zdHtpZDpjLHR5cGU6ZCxwYXRoOmh9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGwuZGF0YSksZj0obC5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcCh3KTtsZXQgbTt0cnl7Y29uc3QgdD1oLnNsaWNlKDAsLTEpLnJlZHVjZSgoKGUscik9PmVbcl0pLHIpLG49aC5yZWR1Y2UoKChlLHIpPT5lW3JdKSxyKTtzd2l0Y2goZCl7Y2FzZSJHRVQiOm09bjticmVhaztjYXNlIlNFVCI6dFtoLnNsaWNlKC0xKVswXV09dyhsLmRhdGEudmFsdWUpLG09ITA7YnJlYWs7Y2FzZSJBUFBMWSI6bT1uLmFwcGx5KHQsZik7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOm09ZnVuY3Rpb24ocil7cmV0dXJuIE9iamVjdC5hc3NpZ24ocix7W2VdOiEwfSl9KG5ldyBuKC4uLmYpKTticmVhaztjYXNlIkVORFBPSU5UIjp7Y29uc3R7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7aShyLHQpLG09ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcC5zZXQoZSxyKSxlfShlLFtlXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjptPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goZSl7bT17dmFsdWU6ZSxbb106MH19UHJvbWlzZS5yZXNvbHZlKG0pLmNhdGNoKChlPT4oe3ZhbHVlOmUsW29dOjB9KSkpLnRoZW4oKGU9Pntjb25zdFtvLGFdPXYoZSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse2lkOmN9KSxhKSwiUkVMRUFTRSI9PT1kJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSx1KHQpLG4gaW4gciYmImZ1bmN0aW9uIj09dHlwZW9mIHJbbl0mJnJbbl0oKSl9KSkuY2F0Y2goKGU9Pntjb25zdFtyLG5dPXYoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtvXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse2lkOmN9KSxuKX0pKX0pKSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gdShlKXsoZnVuY3Rpb24oZSl7cmV0dXJuIk1lc3NhZ2VQb3J0Ij09PWUuY29uc3RydWN0b3IubmFtZX0pKGUpJiZlLmNsb3NlKCl9ZnVuY3Rpb24gbChlKXtpZihlKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZyhlLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCgpPT57dShlKX0pKX1jb25zdCBkPW5ldyBXZWFrTWFwLGg9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoZT0+e2NvbnN0IHI9KGQuZ2V0KGUpfHwwKS0xO2Quc2V0KGUsciksMD09PXImJmMoZSl9KSk7ZnVuY3Rpb24gZihlLG49W10sbz1mdW5jdGlvbigpe30pe2xldCBhPSExO2NvbnN0IHM9bmV3IFByb3h5KG8se2dldChyLG8pe2lmKGwoYSksbz09PXQpcmV0dXJuKCk9PnshZnVuY3Rpb24oZSl7aCYmaC51bnJlZ2lzdGVyKGUpfShzKSxjKGUpLGE9ITB9O2lmKCJ0aGVuIj09PW8pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm57dGhlbjooKT0+c307Y29uc3Qgcj1nKGUse3R5cGU6IkdFVCIscGF0aDpuLm1hcCgoZT0+ZS50b1N0cmluZygpKSl9KS50aGVuKHcpO3JldHVybiByLnRoZW4uYmluZChyKX1yZXR1cm4gZihlLFsuLi5uLG9dKX0sc2V0KHIsdCxvKXtsKGEpO2NvbnN0W3MsaV09dihvKTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLm4sdF0ubWFwKChlPT5lLnRvU3RyaW5nKCkpKSx2YWx1ZTpzfSxpKS50aGVuKHcpfSxhcHBseSh0LG8scyl7bChhKTtjb25zdCBpPW5bbi5sZW5ndGgtMV07aWYoaT09PXIpcmV0dXJuIGcoZSx7dHlwZToiRU5EUE9JTlQifSkudGhlbih3KTtpZigiYmluZCI9PT1pKXJldHVybiBmKGUsbi5zbGljZSgwLC0xKSk7Y29uc3RbdSxjXT1tKHMpO3JldHVybiBnKGUse3R5cGU6IkFQUExZIixwYXRoOm4ubWFwKChlPT5lLnRvU3RyaW5nKCkpKSxhcmd1bWVudExpc3Q6dX0sYykudGhlbih3KX0sY29uc3RydWN0KHIsdCl7bChhKTtjb25zdFtvLHNdPW0odCk7cmV0dXJuIGcoZSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOm4ubWFwKChlPT5lLnRvU3RyaW5nKCkpKSxhcmd1bWVudExpc3Q6b30scykudGhlbih3KX19KTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtjb25zdCB0PShkLmdldChyKXx8MCkrMTtkLnNldChyLHQpLGgmJmgucmVnaXN0ZXIoZSxyLGUpfShzLGUpLHN9ZnVuY3Rpb24gbShlKXtjb25zdCByPWUubWFwKHYpO3JldHVybltyLm1hcCgoZT0+ZVswXSkpLCh0PXIubWFwKChlPT5lWzFdKSksQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KSldO3ZhciB0fWNvbnN0IHA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdihlKXtmb3IoY29uc3Rbcix0XW9mIHMpaWYodC5jYW5IYW5kbGUoZSkpe2NvbnN0W24sb109dC5zZXJpYWxpemUoZSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnIsdmFsdWU6bn0sb119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOmV9LHAuZ2V0KGUpfHxbXV19ZnVuY3Rpb24gdyhlKXtzd2l0Y2goZS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBzLmdldChlLm5hbWUpLmRlc2VyaWFsaXplKGUudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gZS52YWx1ZX19ZnVuY3Rpb24gZyhlLHIsdCl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT57Y29uc3Qgbz1uZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkpLmpvaW4oIi0iKTtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLChmdW5jdGlvbiByKHQpe3QuZGF0YSYmdC5kYXRhLmlkJiZ0LmRhdGEuaWQ9PT1vJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxuKHQuZGF0YSkpfSkpLGUuc3RhcnQmJmUuc3RhcnQoKSxlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm99LHIpLHQpfSkpfWNvbnN0IF89ezMyNzY4OiJGSUxFIiwxNjM4NDoiRElSIiw0MDk2MDoiU1lNQk9MSUNfTElOSyIsNDkxNTI6IlNPQ0tFVCIsODE5MjoiQ0hBUkFDVEVSX0RFVklDRSIsMjQ1NzY6IkJMT0NLX0RFVklDRSIsNDA5NjoiTkFNRURfUElQRSJ9O2NsYXNzIHl7Y29uc3RydWN0b3IoZSl7dGhpcy5fd2FzbU1vZHVsZT1lLHRoaXMuX3J1bkNvZGU9ZS5ydW5Db2RlLHRoaXMuX2ZpbGU9bnVsbCx0aGlzLl9wYXNzcGhyYXNlPW51bGwsdGhpcy5fbG9jYWxlPSJlbl9VUy5VVEYtOCJ9YXN5bmMgb3BlbihlKXtudWxsIT09dGhpcy5fZmlsZSYmKGNvbnNvbGUud2FybigiQ2xvc2luZyBwcmV2aW91cyBmaWxlIiksdGhpcy5jbG9zZSgpKTtjb25zdCByPWF3YWl0IHRoaXMuX2xvYWRGaWxlKGUpO3RoaXMuX2ZpbGVMZW5ndGg9ci5sZW5ndGgsdGhpcy5fZmlsZVB0cj1yLnB0cn1jbG9zZSgpe3RoaXMuX3J1bkNvZGUuY2xvc2VBcmNoaXZlKHRoaXMuX2FyY2hpdmUpLHRoaXMuX3dhc21Nb2R1bGUuX2ZyZWUodGhpcy5fZmlsZVB0ciksdGhpcy5fZmlsZT1udWxsLHRoaXMuX2ZpbGVQdHI9bnVsbCx0aGlzLl9hcmNoaXZlPW51bGx9aGFzRW5jcnlwdGVkRGF0YSgpe3RoaXMuX2FyY2hpdmU9dGhpcy5fcnVuQ29kZS5vcGVuQXJjaGl2ZSh0aGlzLl9maWxlUHRyLHRoaXMuX2ZpbGVMZW5ndGgsdGhpcy5fcGFzc3BocmFzZSx0aGlzLl9sb2NhbGUpLHRoaXMuX3J1bkNvZGUuZ2V0TmV4dEVudHJ5KHRoaXMuX2FyY2hpdmUpO2NvbnN0IGU9dGhpcy5fcnVuQ29kZS5oYXNFbmNyeXB0ZWRFbnRyaWVzKHRoaXMuX2FyY2hpdmUpO3JldHVybiAwIT09ZSYmKGU+MHx8bnVsbCl9c2V0UGFzc3BocmFzZShlKXt0aGlzLl9wYXNzcGhyYXNlPWV9c2V0TG9jYWxlKGUpe3RoaXMuX2xvY2FsZT1lfSplbnRyaWVzKGU9ITEscj1udWxsKXtsZXQgdDtmb3IodGhpcy5fYXJjaGl2ZT10aGlzLl9ydW5Db2RlLm9wZW5BcmNoaXZlKHRoaXMuX2ZpbGVQdHIsdGhpcy5fZmlsZUxlbmd0aCx0aGlzLl9wYXNzcGhyYXNlLHRoaXMuX2xvY2FsZSk7dD10aGlzLl9ydW5Db2RlLmdldE5leHRFbnRyeSh0aGlzLl9hcmNoaXZlKSwwIT09dDspe2NvbnN0IG49e3NpemU6dGhpcy5fcnVuQ29kZS5nZXRFbnRyeVNpemUodCkscGF0aDp0aGlzLl9ydW5Db2RlLmdldEVudHJ5TmFtZSh0KSx0eXBlOl9bdGhpcy5fcnVuQ29kZS5nZXRFbnRyeVR5cGUodCldLGxhc3RNb2RpZmllZDp0aGlzLl9ydW5Db2RlLmdldEVudHJ5TGFzdE1vZGlmaWVkKHQpLHJlZjp0fTtpZigiRklMRSI9PT1uLnR5cGUpe2xldCBlPW4ucGF0aC5zcGxpdCgiLyIpO24uZmlsZU5hbWU9ZVtlLmxlbmd0aC0xXX1pZihlJiZyIT09bi5wYXRoKXRoaXMuX3J1bkNvZGUuc2tpcEVudHJ5KHRoaXMuX2FyY2hpdmUpO2Vsc2V7Y29uc3QgZT10aGlzLl9ydW5Db2RlLmdldEZpbGVEYXRhKHRoaXMuX2FyY2hpdmUsbi5zaXplKTtpZihlPDApdGhyb3cgbmV3IEVycm9yKHRoaXMuX3J1bkNvZGUuZ2V0RXJyb3IodGhpcy5fYXJjaGl2ZSkpO24uZmlsZURhdGE9dGhpcy5fd2FzbU1vZHVsZS5IRUFQVTguc2xpY2UoZSxlK24uc2l6ZSksdGhpcy5fd2FzbU1vZHVsZS5fZnJlZShlKX15aWVsZCBufX1hc3luYyBfbG9hZEZpbGUoZSl7Y29uc3Qgcj1hd2FpdCBlLmFycmF5QnVmZmVyKCksdD1uZXcgVWludDhBcnJheShyKSxuPXRoaXMuX3J1bkNvZGUubWFsbG9jKHQubGVuZ3RoKTtyZXR1cm4gdGhpcy5fd2FzbU1vZHVsZS5IRUFQVTguc2V0KHQsbikse3B0cjpuLGxlbmd0aDp0Lmxlbmd0aH19fWNsYXNzIEV7Y29uc3RydWN0b3IoZSl7dGhpcy5fd2FzbU1vZHVsZT1lLHRoaXMuX3J1bkNvZGU9ZS5ydW5Db2RlLHRoaXMuX3Bhc3NwaHJhc2U9bnVsbCx0aGlzLl9sb2NhbGU9ImVuX1VTLlVURi04In1hc3luYyB3cml0ZShlLHIsdCxuPW51bGwpe2xldCBvPWUucmVkdWNlKCgoZSx7ZmlsZTpyfSk9PmUrci5zaXplKzEyOCksMCkrMTI4O2NvbnN0IGE9dGhpcy5fcnVuQ29kZS5tYWxsb2Mobykscz10aGlzLl9ydW5Db2RlLm1hbGxvYyh0aGlzLl9ydW5Db2RlLnNpemVPZlNpemVUKCkpLGk9dGhpcy5fcnVuQ29kZS5zdGFydEFyY2hpdmVXcml0ZShyLHQsYSxvLHMsbik7Zm9yKGNvbnN0e2ZpbGU6cixwYXRobmFtZTp0fW9mIGUpe2NvbnN0IGU9YXdhaXQgdGhpcy5fbG9hZEZpbGUocik7dGhpcy5fcnVuQ29kZS53cml0ZUFyY2hpdmVGaWxlKGksdHx8ci5uYW1lLGUubGVuZ3RoLGUucHRyKSx0aGlzLl9ydW5Db2RlLmZyZWUoZS5wdHIpfWNvbnN0IHU9dGhpcy5fcnVuQ29kZS5maW5pc2hBcmNoaXZlV3JpdGUoaSxzKTtpZih1PDApdGhyb3cgbmV3IEVycm9yKHRoaXMuX3J1bkNvZGUuZ2V0RXJyb3IoaSkpO3JldHVybiB0aGlzLl93YXNtTW9kdWxlLkhFQVBVOC5zbGljZShhLGErdSl9YXN5bmMgX2xvYWRGaWxlKGUpe2NvbnN0IHI9YXdhaXQgZS5hcnJheUJ1ZmZlcigpLHQ9bmV3IFVpbnQ4QXJyYXkociksbj10aGlzLl9ydW5Db2RlLm1hbGxvYyh0Lmxlbmd0aCk7cmV0dXJuIHRoaXMuX3dhc21Nb2R1bGUuSEVBUFU4LnNldCh0LG4pLHtwdHI6bixsZW5ndGg6dC5sZW5ndGh9fX12YXIgYixrPShiPWltcG9ydC5tZXRhLnVybCxhc3luYyBmdW5jdGlvbihlPXt9KXt2YXIgcix0LG49ZTtuLnJlYWR5PW5ldyBQcm9taXNlKCgoZSxuKT0+e3I9ZSx0PW59KSk7dmFyIG8sYSxzLGk9T2JqZWN0LmFzc2lnbih7fSxuKSx1PSIuL3RoaXMucHJvZ3JhbSIsbD0oZSxyKT0+e3Rocm93IHJ9LGM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3csZD0iZnVuY3Rpb24iPT10eXBlb2YgaW1wb3J0U2NyaXB0cyxoPSJvYmplY3QiPT10eXBlb2YgcHJvY2VzcyYmIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiYic3RyaW5nIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSxmPSIiO2lmKGgpe2NvbnN0e2NyZWF0ZVJlcXVpcmU6ZX09YXdhaXQgaW1wb3J0KCJtb2R1bGUiKTt2YXIgbT1lKGltcG9ydC5tZXRhLnVybCkscD1tKCJmcyIpLHY9bSgicGF0aCIpO2Y9ZD92LmRpcm5hbWUoZikrIi8iOm0oInVybCIpLmZpbGVVUkxUb1BhdGgobmV3IFVSTCgiLi8iLGltcG9ydC5tZXRhLnVybCkpLG89KGUscik9PihlPVkoZSk/bmV3IFVSTChlKTp2Lm5vcm1hbGl6ZShlKSxwLnJlYWRGaWxlU3luYyhlLHI/dm9pZCAwOiJ1dGY4IikpLHM9ZT0+e3ZhciByPW8oZSwhMCk7cmV0dXJuIHIuYnVmZmVyfHwocj1uZXcgVWludDhBcnJheShyKSkscn0sYT0oZSxyLHQsbj0hMCk9PntlPVkoZSk/bmV3IFVSTChlKTp2Lm5vcm1hbGl6ZShlKSxwLnJlYWRGaWxlKGUsbj92b2lkIDA6InV0ZjgiLCgoZSxvKT0+e2U/dChlKTpyKG4/by5idWZmZXI6byl9KSl9LCFuLnRoaXNQcm9ncmFtJiZwcm9jZXNzLmFyZ3YubGVuZ3RoPjEmJih1PXByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikpLHByb2Nlc3MuYXJndi5zbGljZSgyKSxsPShlLHIpPT57dGhyb3cgcHJvY2Vzcy5leGl0Q29kZT1lLHJ9LG4uaW5zcGVjdD0oKT0+IltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdIn1lbHNlKGN8fGQpJiYoZD9mPXNlbGYubG9jYXRpb24uaHJlZjoidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoZj1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksYiYmKGY9YiksZj0wIT09Zi5pbmRleE9mKCJibG9iOiIpP2Yuc3Vic3RyKDAsZi5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOiIiLG89ZT0+e3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLGUsITEpLHIuc2VuZChudWxsKSxyLnJlc3BvbnNlVGV4dH0sZCYmKHM9ZT0+e3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLGUsITEpLHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsci5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KHIucmVzcG9uc2UpfSksYT0oZSxyLHQpPT57dmFyIG49bmV3IFhNTEh0dHBSZXF1ZXN0O24ub3BlbigiR0VUIixlLCEwKSxuLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLG4ub25sb2FkPSgpPT57MjAwPT1uLnN0YXR1c3x8MD09bi5zdGF0dXMmJm4ucmVzcG9uc2U/cihuLnJlc3BvbnNlKTp0KCl9LG4ub25lcnJvcj10LG4uc2VuZChudWxsKX0pO3ZhciB3LGcsXz1uLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHk9bi5wcmludEVycnx8Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24obixpKSxpPW51bGwsbi5hcmd1bWVudHMmJm4uYXJndW1lbnRzLG4udGhpc1Byb2dyYW0mJih1PW4udGhpc1Byb2dyYW0pLG4ucXVpdCYmKGw9bi5xdWl0KSxuLndhc21CaW5hcnkmJih3PW4ud2FzbUJpbmFyeSksIm9iamVjdCIhPXR5cGVvZiBXZWJBc3NlbWJseSYmTygibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpO3ZhciBFLGssUyxGLEQsTT0hMTtmdW5jdGlvbiBBKGUscil7ZXx8TyhyKX1mdW5jdGlvbiBDKCl7dmFyIGU9Zy5idWZmZXI7bi5IRUFQOD1FPW5ldyBJbnQ4QXJyYXkoZSksbi5IRUFQMTY9Uz1uZXcgSW50MTZBcnJheShlKSxuLkhFQVBVOD1rPW5ldyBVaW50OEFycmF5KGUpLG4uSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoZSksbi5IRUFQMzI9Rj1uZXcgSW50MzJBcnJheShlKSxuLkhFQVBVMzI9RD1uZXcgVWludDMyQXJyYXkoZSksbi5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoZSksbi5IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkoZSl9dmFyIFA9W10sVD1bXSxSPVtdLHo9MCxVPW51bGw7ZnVuY3Rpb24gTChlKXt6Kyssbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzPy4oeil9ZnVuY3Rpb24geChlKXtpZih6LS0sbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzPy4oeiksMD09eiYmVSl7dmFyIHI9VTtVPW51bGwscigpfX1mdW5jdGlvbiBPKGUpe24ub25BYm9ydD8uKGUpLHkoZT0iQWJvcnRlZCgiK2UrIikiKSxNPSEwLGUrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgcj1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGUpO3Rocm93IHQocikscn12YXIgTixCLGosSSxIPWU9PmUuc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpLFk9ZT0+ZS5zdGFydHNXaXRoKCJmaWxlOi8vIik7ZnVuY3Rpb24gVyhlKXtpZihlPT1OJiZ3KXJldHVybiBuZXcgVWludDhBcnJheSh3KTtpZihzKXJldHVybiBzKGUpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1mdW5jdGlvbiBLKGUscix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoIXcmJihjfHxkKSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGZldGNoJiYhWShlKSlyZXR1cm4gZmV0Y2goZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oKHI9PntpZighci5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2UrIiciO3JldHVybiByLmFycmF5QnVmZmVyKCl9KSkuY2F0Y2goKCgpPT5XKGUpKSk7aWYoYSlyZXR1cm4gbmV3IFByb21pc2UoKChyLHQpPT57YShlLChlPT5yKG5ldyBVaW50OEFycmF5KGUpKSksdCl9KSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT5XKGUpKSl9KGUpLnRoZW4oKGU9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGUscikpKS50aGVuKChlPT5lKSkudGhlbih0LChlPT57eShgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHtlfWApLE8oZSl9KSl9ZnVuY3Rpb24gcShlKXt0aGlzLm5hbWU9IkV4aXRTdGF0dXMiLHRoaXMubWVzc2FnZT1gUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke2V9KWAsdGhpcy5zdGF0dXM9ZX1uLmxvY2F0ZUZpbGU/SChOPSJsaWJhcmNoaXZlLndhc20iKXx8KEI9TixOPW4ubG9jYXRlRmlsZT9uLmxvY2F0ZUZpbGUoQixmKTpmK0IpOk49bmV3IFVSTCgibGliYXJjaGl2ZS53YXNtIixpbXBvcnQubWV0YS51cmwpLmhyZWY7dmFyICQ9ZT0+e2Zvcig7ZS5sZW5ndGg+MDspZS5zaGlmdCgpKG4pfSxYPW4ubm9FeGl0UnVudGltZXx8ITAsWj17aXNBYnM6ZT0+Ii8iPT09ZS5jaGFyQXQoMCksc3BsaXRQYXRoOmU9Pi9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKGUpLnNsaWNlKDEpLG5vcm1hbGl6ZUFycmF5OihlLHIpPT57Zm9yKHZhciB0PTAsbj1lLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgbz1lW25dOyIuIj09PW8/ZS5zcGxpY2UobiwxKToiLi4iPT09bz8oZS5zcGxpY2UobiwxKSx0KyspOnQmJihlLnNwbGljZShuLDEpLHQtLSl9aWYocilmb3IoO3Q7dC0tKWUudW5zaGlmdCgiLi4iKTtyZXR1cm4gZX0sbm9ybWFsaXplOmU9Pnt2YXIgcj1aLmlzQWJzKGUpLHQ9Ii8iPT09ZS5zdWJzdHIoLTEpO3JldHVybihlPVoubm9ybWFsaXplQXJyYXkoZS5zcGxpdCgiLyIpLmZpbHRlcigoZT0+ISFlKSksIXIpLmpvaW4oIi8iKSl8fHJ8fChlPSIuIiksZSYmdCYmKGUrPSIvIiksKHI/Ii8iOiIiKStlfSxkaXJuYW1lOmU9Pnt2YXIgcj1aLnNwbGl0UGF0aChlKSx0PXJbMF0sbj1yWzFdO3JldHVybiB0fHxuPyhuJiYobj1uLnN1YnN0cigwLG4ubGVuZ3RoLTEpKSx0K24pOiIuIn0sYmFzZW5hbWU6ZT0+e2lmKCIvIj09PWUpcmV0dXJuIi8iO3ZhciByPShlPShlPVoubm9ybWFsaXplKGUpKS5yZXBsYWNlKC9cLyQvLCIiKSkubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PXI/ZTplLnN1YnN0cihyKzEpfSxqb2luOmZ1bmN0aW9uKCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gWi5ub3JtYWxpemUoZS5qb2luKCIvIikpfSxqb2luMjooZSxyKT0+Wi5ub3JtYWxpemUoZSsiLyIrcil9LEc9ZT0+KEc9KCgpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXJldHVybiBlPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpO2lmKGgpdHJ5e3ZhciBlPW0oImNyeXB0byIpO2lmKGUucmFuZG9tRmlsbFN5bmMpcmV0dXJuIHI9PmUucmFuZG9tRmlsbFN5bmMocik7dmFyIHI9ZS5yYW5kb21CeXRlcztyZXR1cm4gZT0+KGUuc2V0KHIoZS5ieXRlTGVuZ3RoKSksZSl9Y2F0Y2goZSl7fU8oImluaXRSYW5kb21EZXZpY2UiKX0pKCkpKGUpLFY9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIscj0hMSx0PWFyZ3VtZW50cy5sZW5ndGgtMTt0Pj0tMSYmIXI7dC0tKXt2YXIgbj10Pj0wP2FyZ3VtZW50c1t0XTpsZS5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighbilyZXR1cm4iIjtlPW4rIi8iK2Uscj1aLmlzQWJzKG4pfXJldHVybihyPyIvIjoiIikrKGU9Wi5ub3JtYWxpemVBcnJheShlLnNwbGl0KCIvIikuZmlsdGVyKChlPT4hIWUpKSwhcikuam9pbigiLyIpKXx8Ii4ifSxyZWxhdGl2ZTooZSxyKT0+e2Z1bmN0aW9uIHQoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aCYmIiI9PT1lW3JdO3IrKyk7Zm9yKHZhciB0PWUubGVuZ3RoLTE7dD49MCYmIiI9PT1lW3RdO3QtLSk7cmV0dXJuIHI+dD9bXTplLnNsaWNlKHIsdC1yKzEpfWU9Vi5yZXNvbHZlKGUpLnN1YnN0cigxKSxyPVYucmVzb2x2ZShyKS5zdWJzdHIoMSk7Zm9yKHZhciBuPXQoZS5zcGxpdCgiLyIpKSxvPXQoci5zcGxpdCgiLyIpKSxhPU1hdGgubWluKG4ubGVuZ3RoLG8ubGVuZ3RoKSxzPWEsaT0wO2k8YTtpKyspaWYobltpXSE9PW9baV0pe3M9aTticmVha312YXIgdT1bXTtmb3IoaT1zO2k8bi5sZW5ndGg7aSsrKXUucHVzaCgiLi4iKTtyZXR1cm4odT11LmNvbmNhdChvLnNsaWNlKHMpKSkuam9pbigiLyIpfX0sSj0idW5kZWZpbmVkIiE9dHlwZW9mIFRleHREZWNvZGVyP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMCxRPShlLHIsdCk9Pntmb3IodmFyIG49cit0LG89cjtlW29dJiYhKG8+PW4pOykrK287aWYoby1yPjE2JiZlLmJ1ZmZlciYmSilyZXR1cm4gSi5kZWNvZGUoZS5zdWJhcnJheShyLG8pKTtmb3IodmFyIGE9IiI7cjxvOyl7dmFyIHM9ZVtyKytdO2lmKDEyOCZzKXt2YXIgaT02MyZlW3IrK107aWYoMTkyIT0oMjI0JnMpKXt2YXIgdT02MyZlW3IrK107aWYoKHM9MjI0PT0oMjQwJnMpPygxNSZzKTw8MTJ8aTw8Nnx1Oig3JnMpPDwxOHxpPDwxMnx1PDw2fDYzJmVbcisrXSk8NjU1MzYpYSs9U3RyaW5nLmZyb21DaGFyQ29kZShzKTtlbHNle3ZhciBsPXMtNjU1MzY7YSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxsPj4xMCw1NjMyMHwxMDIzJmwpfX1lbHNlIGErPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMxJnMpPDw2fGkpfWVsc2UgYSs9U3RyaW5nLmZyb21DaGFyQ29kZShzKX1yZXR1cm4gYX0sZWU9W10scmU9ZT0+e2Zvcih2YXIgcj0wLHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO248PTEyNz9yKys6bjw9MjA0Nz9yKz0yOm4+PTU1Mjk2JiZuPD01NzM0Mz8ocis9NCwrK3QpOnIrPTN9cmV0dXJuIHJ9LHRlPShlLHIsdCxuKT0+e2lmKCEobj4wKSlyZXR1cm4gMDtmb3IodmFyIG89dCxhPXQrbi0xLHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGk9ZS5jaGFyQ29kZUF0KHMpO2lmKGk+PTU1Mjk2JiZpPD01NzM0MyYmKGk9NjU1MzYrKCgxMDIzJmkpPDwxMCl8MTAyMyZlLmNoYXJDb2RlQXQoKytzKSksaTw9MTI3KXtpZih0Pj1hKWJyZWFrO3JbdCsrXT1pfWVsc2UgaWYoaTw9MjA0Nyl7aWYodCsxPj1hKWJyZWFrO3JbdCsrXT0xOTJ8aT4+NixyW3QrK109MTI4fDYzJml9ZWxzZSBpZihpPD02NTUzNSl7aWYodCsyPj1hKWJyZWFrO3JbdCsrXT0yMjR8aT4+MTIsclt0KytdPTEyOHxpPj42JjYzLHJbdCsrXT0xMjh8NjMmaX1lbHNle2lmKHQrMz49YSlicmVhaztyW3QrK109MjQwfGk+PjE4LHJbdCsrXT0xMjh8aT4+MTImNjMsclt0KytdPTEyOHxpPj42JjYzLHJbdCsrXT0xMjh8NjMmaX19cmV0dXJuIHJbdF09MCx0LW99O2Z1bmN0aW9uIG5lKGUscix0KXt2YXIgbj10PjA/dDpyZShlKSsxLG89bmV3IEFycmF5KG4pLGE9dGUoZSxvLDAsby5sZW5ndGgpO3JldHVybiByJiYoby5sZW5ndGg9YSksb312YXIgb2U9e3R0eXM6W10saW5pdCgpe30sc2h1dGRvd24oKXt9LHJlZ2lzdGVyKGUscil7b2UudHR5c1tlXT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczpyfSxsZS5yZWdpc3RlckRldmljZShlLG9lLnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuKGUpe3ZhciByPW9lLnR0eXNbZS5ub2RlLnJkZXZdO2lmKCFyKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQzKTtlLnR0eT1yLGUuc2Vla2FibGU9ITF9LGNsb3NlKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LGZzeW5jKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LHJlYWQoZSxyLHQsbixvKXtpZighZS50dHl8fCFlLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjApO2Zvcih2YXIgYT0wLHM9MDtzPG47cysrKXt2YXIgaTt0cnl7aT1lLnR0eS5vcHMuZ2V0X2NoYXIoZS50dHkpfWNhdGNoKGUpe3Rocm93IG5ldyBsZS5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1pJiYwPT09YSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig2KTtpZihudWxsPT1pKWJyZWFrO2ErKyxyW3Qrc109aX1yZXR1cm4gYSYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksYX0sd3JpdGUoZSxyLHQsbixvKXtpZighZS50dHl8fCFlLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIGE9MDthPG47YSsrKWUudHR5Lm9wcy5wdXRfY2hhcihlLnR0eSxyW3QrYV0pfWNhdGNoKGUpe3Rocm93IG5ldyBsZS5FcnJub0Vycm9yKDI5KX1yZXR1cm4gbiYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksYX19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6ZT0+KCgpPT57aWYoIWVlLmxlbmd0aCl7dmFyIGU9bnVsbDtpZihoKXt2YXIgcj1CdWZmZXIuYWxsb2MoMjU2KSx0PTAsbj1wcm9jZXNzLnN0ZGluLmZkO3RyeXt0PXAucmVhZFN5bmMobixyKX1jYXRjaChlKXtpZighZS50b1N0cmluZygpLmluY2x1ZGVzKCJFT0YiKSl0aHJvdyBlO3Q9MH1lPXQ+MD9yLnNsaWNlKDAsdCkudG9TdHJpbmcoInV0Zi04Iik6bnVsbH1lbHNlInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cucHJvbXB0P251bGwhPT0oZT13aW5kb3cucHJvbXB0KCJJbnB1dDogIikpJiYoZSs9IlxuIik6ImZ1bmN0aW9uIj09dHlwZW9mIHJlYWRsaW5lJiZudWxsIT09KGU9cmVhZGxpbmUoKSkmJihlKz0iXG4iKTtpZighZSlyZXR1cm4gbnVsbDtlZT1uZShlLCEwKX1yZXR1cm4gZWUuc2hpZnQoKX0pKCkscHV0X2NoYXIoZSxyKXtudWxsPT09cnx8MTA9PT1yPyhfKFEoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKTowIT1yJiZlLm91dHB1dC5wdXNoKHIpfSxmc3luYyhlKXtlLm91dHB1dCYmZS5vdXRwdXQubGVuZ3RoPjAmJihfKFEoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKX0saW9jdGxfdGNnZXRzOmU9Pih7Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2NjOlszLDI4LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF19KSxpb2N0bF90Y3NldHM6KGUscix0KT0+MCxpb2N0bF90aW9jZ3dpbnN6OmU9PlsyNCw4MF19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKGUscil7bnVsbD09PXJ8fDEwPT09cj8oeShRKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSk6MCE9ciYmZS5vdXRwdXQucHVzaChyKX0sZnN5bmMoZSl7ZS5vdXRwdXQmJmUub3V0cHV0Lmxlbmd0aD4wJiYoeShRKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSl9fX0sYWU9ZT0+e08oKX0sc2U9e29wc190YWJsZTpudWxsLG1vdW50OmU9PnNlLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCksY3JlYXRlTm9kZShlLHIsdCxuKXtpZihsZS5pc0Jsa2Rldih0KXx8bGUuaXNGSUZPKHQpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtzZS5vcHNfdGFibGV8fD17ZGlyOntub2RlOntnZXRhdHRyOnNlLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpzZS5ub2RlX29wcy5zZXRhdHRyLGxvb2t1cDpzZS5ub2RlX29wcy5sb29rdXAsbWtub2Q6c2Uubm9kZV9vcHMubWtub2QscmVuYW1lOnNlLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6c2Uubm9kZV9vcHMudW5saW5rLHJtZGlyOnNlLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6c2Uubm9kZV9vcHMucmVhZGRpcixzeW1saW5rOnNlLm5vZGVfb3BzLnN5bWxpbmt9LHN0cmVhbTp7bGxzZWVrOnNlLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjpzZS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6c2Uubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6c2Uuc3RyZWFtX29wcy5sbHNlZWsscmVhZDpzZS5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6c2Uuc3RyZWFtX29wcy53cml0ZSxhbGxvY2F0ZTpzZS5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6c2Uuc3RyZWFtX29wcy5tbWFwLG1zeW5jOnNlLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOnNlLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpzZS5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOnNlLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJlYW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjpzZS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6c2Uubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOmxlLmNocmRldl9zdHJlYW1fb3BzfX07dmFyIG89bGUuY3JlYXRlTm9kZShlLHIsdCxuKTtyZXR1cm4gbGUuaXNEaXIoby5tb2RlKT8oby5ub2RlX29wcz1zZS5vcHNfdGFibGUuZGlyLm5vZGUsby5zdHJlYW1fb3BzPXNlLm9wc190YWJsZS5kaXIuc3RyZWFtLG8uY29udGVudHM9e30pOmxlLmlzRmlsZShvLm1vZGUpPyhvLm5vZGVfb3BzPXNlLm9wc190YWJsZS5maWxlLm5vZGUsby5zdHJlYW1fb3BzPXNlLm9wc190YWJsZS5maWxlLnN0cmVhbSxvLnVzZWRCeXRlcz0wLG8uY29udGVudHM9bnVsbCk6bGUuaXNMaW5rKG8ubW9kZSk/KG8ubm9kZV9vcHM9c2Uub3BzX3RhYmxlLmxpbmsubm9kZSxvLnN0cmVhbV9vcHM9c2Uub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpsZS5pc0NocmRldihvLm1vZGUpJiYoby5ub2RlX29wcz1zZS5vcHNfdGFibGUuY2hyZGV2Lm5vZGUsby5zdHJlYW1fb3BzPXNlLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSxvLnRpbWVzdGFtcD1EYXRlLm5vdygpLGUmJihlLmNvbnRlbnRzW3JdPW8sZS50aW1lc3RhbXA9by50aW1lc3RhbXApLG99LGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OmU9PmUuY29udGVudHM/ZS5jb250ZW50cy5zdWJhcnJheT9lLmNvbnRlbnRzLnN1YmFycmF5KDAsZS51c2VkQnl0ZXMpOm5ldyBVaW50OEFycmF5KGUuY29udGVudHMpOm5ldyBVaW50OEFycmF5KDApLGV4cGFuZEZpbGVTdG9yYWdlKGUscil7dmFyIHQ9ZS5jb250ZW50cz9lLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEodD49cikpe3I9TWF0aC5tYXgocix0Kih0PDEwNDg1NzY/MjoxLjEyNSk+Pj4wKSwwIT10JiYocj1NYXRoLm1heChyLDI1NikpO3ZhciBuPWUuY29udGVudHM7ZS5jb250ZW50cz1uZXcgVWludDhBcnJheShyKSxlLnVzZWRCeXRlcz4wJiZlLmNvbnRlbnRzLnNldChuLnN1YmFycmF5KDAsZS51c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2UoZSxyKXtpZihlLnVzZWRCeXRlcyE9cilpZigwPT1yKWUuY29udGVudHM9bnVsbCxlLnVzZWRCeXRlcz0wO2Vsc2V7dmFyIHQ9ZS5jb250ZW50cztlLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KHIpLHQmJmUuY29udGVudHMuc2V0KHQuc3ViYXJyYXkoMCxNYXRoLm1pbihyLGUudXNlZEJ5dGVzKSkpLGUudXNlZEJ5dGVzPXJ9fSxub2RlX29wczp7Z2V0YXR0cihlKXt2YXIgcj17fTtyZXR1cm4gci5kZXY9bGUuaXNDaHJkZXYoZS5tb2RlKT9lLmlkOjEsci5pbm89ZS5pZCxyLm1vZGU9ZS5tb2RlLHIubmxpbms9MSxyLnVpZD0wLHIuZ2lkPTAsci5yZGV2PWUucmRldixsZS5pc0RpcihlLm1vZGUpP3Iuc2l6ZT00MDk2OmxlLmlzRmlsZShlLm1vZGUpP3Iuc2l6ZT1lLnVzZWRCeXRlczpsZS5pc0xpbmsoZS5tb2RlKT9yLnNpemU9ZS5saW5rLmxlbmd0aDpyLnNpemU9MCxyLmF0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLm10aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmN0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmJsa3NpemU9NDA5NixyLmJsb2Nrcz1NYXRoLmNlaWwoci5zaXplL3IuYmxrc2l6ZSkscn0sc2V0YXR0cihlLHIpe3ZvaWQgMCE9PXIubW9kZSYmKGUubW9kZT1yLm1vZGUpLHZvaWQgMCE9PXIudGltZXN0YW1wJiYoZS50aW1lc3RhbXA9ci50aW1lc3RhbXApLHZvaWQgMCE9PXIuc2l6ZSYmc2UucmVzaXplRmlsZVN0b3JhZ2UoZSxyLnNpemUpfSxsb29rdXAoZSxyKXt0aHJvdyBsZS5nZW5lcmljRXJyb3JzWzQ0XX0sbWtub2Q6KGUscix0LG4pPT5zZS5jcmVhdGVOb2RlKGUscix0LG4pLHJlbmFtZShlLHIsdCl7aWYobGUuaXNEaXIoZS5tb2RlKSl7dmFyIG47dHJ5e249bGUubG9va3VwTm9kZShyLHQpfWNhdGNoKGUpe31pZihuKWZvcih2YXIgbyBpbiBuLmNvbnRlbnRzKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU1KX1kZWxldGUgZS5wYXJlbnQuY29udGVudHNbZS5uYW1lXSxlLnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxlLm5hbWU9dCxyLmNvbnRlbnRzW3RdPWUsci50aW1lc3RhbXA9ZS5wYXJlbnQudGltZXN0YW1wLGUucGFyZW50PXJ9LHVubGluayhlLHIpe2RlbGV0ZSBlLmNvbnRlbnRzW3JdLGUudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKGUscil7dmFyIHQ9bGUubG9va3VwTm9kZShlLHIpO2Zvcih2YXIgbiBpbiB0LmNvbnRlbnRzKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU1KTtkZWxldGUgZS5jb250ZW50c1tyXSxlLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxyZWFkZGlyKGUpe3ZhciByPVsiLiIsIi4uIl07Zm9yKHZhciB0IG9mIE9iamVjdC5rZXlzKGUuY29udGVudHMpKXIucHVzaCh0KTtyZXR1cm4gcn0sc3ltbGluayhlLHIsdCl7dmFyIG49c2UuY3JlYXRlTm9kZShlLHIsNDE0NzEsMCk7cmV0dXJuIG4ubGluaz10LG59LHJlYWRsaW5rKGUpe2lmKCFsZS5pc0xpbmsoZS5tb2RlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7cmV0dXJuIGUubGlua319LHN0cmVhbV9vcHM6e3JlYWQoZSxyLHQsbixvKXt2YXIgYT1lLm5vZGUuY29udGVudHM7aWYobz49ZS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgcz1NYXRoLm1pbihlLm5vZGUudXNlZEJ5dGVzLW8sbik7aWYocz44JiZhLnN1YmFycmF5KXIuc2V0KGEuc3ViYXJyYXkobyxvK3MpLHQpO2Vsc2UgZm9yKHZhciBpPTA7aTxzO2krKylyW3QraV09YVtvK2ldO3JldHVybiBzfSx3cml0ZShlLHIsdCxuLG8sYSl7aWYoci5idWZmZXI9PT1FLmJ1ZmZlciYmKGE9ITEpLCFuKXJldHVybiAwO3ZhciBzPWUubm9kZTtpZihzLnRpbWVzdGFtcD1EYXRlLm5vdygpLHIuc3ViYXJyYXkmJighcy5jb250ZW50c3x8cy5jb250ZW50cy5zdWJhcnJheSkpe2lmKGEpcmV0dXJuIHMuY29udGVudHM9ci5zdWJhcnJheSh0LHQrbikscy51c2VkQnl0ZXM9bixuO2lmKDA9PT1zLnVzZWRCeXRlcyYmMD09PW8pcmV0dXJuIHMuY29udGVudHM9ci5zbGljZSh0LHQrbikscy51c2VkQnl0ZXM9bixuO2lmKG8rbjw9cy51c2VkQnl0ZXMpcmV0dXJuIHMuY29udGVudHMuc2V0KHIuc3ViYXJyYXkodCx0K24pLG8pLG59aWYoc2UuZXhwYW5kRmlsZVN0b3JhZ2UocyxvK24pLHMuY29udGVudHMuc3ViYXJyYXkmJnIuc3ViYXJyYXkpcy5jb250ZW50cy5zZXQoci5zdWJhcnJheSh0LHQrbiksbyk7ZWxzZSBmb3IodmFyIGk9MDtpPG47aSsrKXMuY29udGVudHNbbytpXT1yW3QraV07cmV0dXJuIHMudXNlZEJ5dGVzPU1hdGgubWF4KHMudXNlZEJ5dGVzLG8rbiksbn0sbGxzZWVrKGUscix0KXt2YXIgbj1yO2lmKDE9PT10P24rPWUucG9zaXRpb246Mj09PXQmJmxlLmlzRmlsZShlLm5vZGUubW9kZSkmJihuKz1lLm5vZGUudXNlZEJ5dGVzKSxuPDApdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjgpO3JldHVybiBufSxhbGxvY2F0ZShlLHIsdCl7c2UuZXhwYW5kRmlsZVN0b3JhZ2UoZS5ub2RlLHIrdCksZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChlLm5vZGUudXNlZEJ5dGVzLHIrdCl9LG1tYXAoZSxyLHQsbixvKXtpZighbGUuaXNGaWxlKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0Myk7dmFyIGEscyxpPWUubm9kZS5jb250ZW50cztpZigyJm98fGkuYnVmZmVyIT09RS5idWZmZXIpe2lmKCh0PjB8fHQrcjxpLmxlbmd0aCkmJihpPWkuc3ViYXJyYXk/aS5zdWJhcnJheSh0LHQrcik6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSx0LHQrcikpLHM9ITAsIShhPWFlKCkpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQ4KTtFLnNldChpLGEpfWVsc2Ugcz0hMSxhPWkuYnl0ZU9mZnNldDtyZXR1cm57cHRyOmEsYWxsb2NhdGVkOnN9fSxtc3luYzooZSxyLHQsbixvKT0+KHNlLnN0cmVhbV9vcHMud3JpdGUoZSxyLDAsbix0LCExKSwwKX19LGllPW4ucHJlbG9hZFBsdWdpbnN8fFtdLHVlPShlLHIpPT57dmFyIHQ9MDtyZXR1cm4gZSYmKHR8PTM2NSksciYmKHR8PTE0NiksdH0sbGU9e3Jvb3Q6bnVsbCxtb3VudHM6W10sZGV2aWNlczp7fSxzdHJlYW1zOltdLG5leHRJbm9kZToxLG5hbWVUYWJsZTpudWxsLGN1cnJlbnRQYXRoOiIvIixpbml0aWFsaXplZDohMSxpZ25vcmVQZXJtaXNzaW9uczohMCxFcnJub0Vycm9yOm51bGwsZ2VuZXJpY0Vycm9yczp7fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAsbG9va3VwUGF0aChlLHI9e30pe2lmKCEoZT1WLnJlc29sdmUoZSkpKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07aWYoKHI9T2JqZWN0LmFzc2lnbih7Zm9sbG93X21vdW50OiEwLHJlY3Vyc2VfY291bnQ6MH0scikpLnJlY3Vyc2VfY291bnQ+OCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigzMik7Zm9yKHZhciB0PWUuc3BsaXQoIi8iKS5maWx0ZXIoKGU9PiEhZSkpLG49bGUucm9vdCxvPSIvIixhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPWE9PT10Lmxlbmd0aC0xO2lmKHMmJnIucGFyZW50KWJyZWFrO2lmKG49bGUubG9va3VwTm9kZShuLHRbYV0pLG89Wi5qb2luMihvLHRbYV0pLGxlLmlzTW91bnRwb2ludChuKSYmKCFzfHxzJiZyLmZvbGxvd19tb3VudCkmJihuPW4ubW91bnRlZC5yb290KSwhc3x8ci5mb2xsb3cpZm9yKHZhciBpPTA7bGUuaXNMaW5rKG4ubW9kZSk7KXt2YXIgdT1sZS5yZWFkbGluayhvKTtpZihvPVYucmVzb2x2ZShaLmRpcm5hbWUobyksdSksbj1sZS5sb29rdXBQYXRoKG8se3JlY3Vyc2VfY291bnQ6ci5yZWN1cnNlX2NvdW50KzF9KS5ub2RlLGkrKz40MCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOm8sbm9kZTpufX0sZ2V0UGF0aChlKXtmb3IodmFyIHI7Oyl7aWYobGUuaXNSb290KGUpKXt2YXIgdD1lLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIHI/Ii8iIT09dFt0Lmxlbmd0aC0xXT9gJHt0fS8ke3J9YDp0K3I6dH1yPXI/YCR7ZS5uYW1lfS8ke3J9YDplLm5hbWUsZT1lLnBhcmVudH19LGhhc2hOYW1lKGUscil7Zm9yKHZhciB0PTAsbj0wO248ci5sZW5ndGg7bisrKXQ9KHQ8PDUpLXQrci5jaGFyQ29kZUF0KG4pfDA7cmV0dXJuKGUrdD4+PjApJWxlLm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hBZGROb2RlKGUpe3ZhciByPWxlLmhhc2hOYW1lKGUucGFyZW50LmlkLGUubmFtZSk7ZS5uYW1lX25leHQ9bGUubmFtZVRhYmxlW3JdLGxlLm5hbWVUYWJsZVtyXT1lfSxoYXNoUmVtb3ZlTm9kZShlKXt2YXIgcj1sZS5oYXNoTmFtZShlLnBhcmVudC5pZCxlLm5hbWUpO2lmKGxlLm5hbWVUYWJsZVtyXT09PWUpbGUubmFtZVRhYmxlW3JdPWUubmFtZV9uZXh0O2Vsc2UgZm9yKHZhciB0PWxlLm5hbWVUYWJsZVtyXTt0Oyl7aWYodC5uYW1lX25leHQ9PT1lKXt0Lm5hbWVfbmV4dD1lLm5hbWVfbmV4dDticmVha310PXQubmFtZV9uZXh0fX0sbG9va3VwTm9kZShlLHIpe3ZhciB0PWxlLm1heUxvb2t1cChlKTtpZih0KXRocm93IG5ldyBsZS5FcnJub0Vycm9yKHQsZSk7Zm9yKHZhciBuPWxlLmhhc2hOYW1lKGUuaWQsciksbz1sZS5uYW1lVGFibGVbbl07bztvPW8ubmFtZV9uZXh0KXt2YXIgYT1vLm5hbWU7aWYoby5wYXJlbnQuaWQ9PT1lLmlkJiZhPT09cilyZXR1cm4gb31yZXR1cm4gbGUubG9va3VwKGUscil9LGNyZWF0ZU5vZGUoZSxyLHQsbil7dmFyIG89bmV3IGxlLkZTTm9kZShlLHIsdCxuKTtyZXR1cm4gbGUuaGFzaEFkZE5vZGUobyksb30sZGVzdHJveU5vZGUoZSl7bGUuaGFzaFJlbW92ZU5vZGUoZSl9LGlzUm9vdDplPT5lPT09ZS5wYXJlbnQsaXNNb3VudHBvaW50OmU9PiEhZS5tb3VudGVkLGlzRmlsZTplPT4zMjc2OD09KDYxNDQwJmUpLGlzRGlyOmU9PjE2Mzg0PT0oNjE0NDAmZSksaXNMaW5rOmU9PjQwOTYwPT0oNjE0NDAmZSksaXNDaHJkZXY6ZT0+ODE5Mj09KDYxNDQwJmUpLGlzQmxrZGV2OmU9PjI0NTc2PT0oNjE0NDAmZSksaXNGSUZPOmU9PjQwOTY9PSg2MTQ0MCZlKSxpc1NvY2tldDplPT40OTE1Mj09KDQ5MTUyJmUpLGZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGUpe3ZhciByPVsiciIsInciLCJydyJdWzMmZV07cmV0dXJuIDUxMiZlJiYocis9InciKSxyfSxub2RlUGVybWlzc2lvbnM6KGUscik9PmxlLmlnbm9yZVBlcm1pc3Npb25zfHwoIXIuaW5jbHVkZXMoInIiKXx8MjkyJmUubW9kZSkmJighci5pbmNsdWRlcygidyIpfHwxNDYmZS5tb2RlKSYmKCFyLmluY2x1ZGVzKCJ4Iil8fDczJmUubW9kZSk/MDoyLG1heUxvb2t1cChlKXt2YXIgcj1sZS5ub2RlUGVybWlzc2lvbnMoZSwieCIpO3JldHVybiByfHwoZS5ub2RlX29wcy5sb29rdXA/MDoyKX0sbWF5Q3JlYXRlKGUscil7dHJ5e3JldHVybiBsZS5sb29rdXBOb2RlKGUsciksMjB9Y2F0Y2goZSl7fXJldHVybiBsZS5ub2RlUGVybWlzc2lvbnMoZSwid3giKX0sbWF5RGVsZXRlKGUscix0KXt2YXIgbjt0cnl7bj1sZS5sb29rdXBOb2RlKGUscil9Y2F0Y2goZSl7cmV0dXJuIGUuZXJybm99dmFyIG89bGUubm9kZVBlcm1pc3Npb25zKGUsInd4Iik7aWYobylyZXR1cm4gbztpZih0KXtpZighbGUuaXNEaXIobi5tb2RlKSlyZXR1cm4gNTQ7aWYobGUuaXNSb290KG4pfHxsZS5nZXRQYXRoKG4pPT09bGUuY3dkKCkpcmV0dXJuIDEwfWVsc2UgaWYobGUuaXNEaXIobi5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW46KGUscik9PmU/bGUuaXNMaW5rKGUubW9kZSk/MzI6bGUuaXNEaXIoZS5tb2RlKSYmKCJyIiE9PWxlLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHIpfHw1MTImcik/MzE6bGUubm9kZVBlcm1pc3Npb25zKGUsbGUuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcocikpOjQ0LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZCgpe2Zvcih2YXIgZT0wO2U8PWxlLk1BWF9PUEVOX0ZEUztlKyspaWYoIWxlLnN0cmVhbXNbZV0pcmV0dXJuIGU7dGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMzMpfSxnZXRTdHJlYW1DaGVja2VkKGUpe3ZhciByPWxlLmdldFN0cmVhbShlKTtpZighcil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtyZXR1cm4gcn0sZ2V0U3RyZWFtOmU9PmxlLnN0cmVhbXNbZV0sY3JlYXRlU3RyZWFtOihlLHI9LTEpPT4obGUuRlNTdHJlYW18fChsZS5GU1N0cmVhbT1mdW5jdGlvbigpe3RoaXMuc2hhcmVkPXt9fSxsZS5GU1N0cmVhbS5wcm90b3R5cGU9e30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGUuRlNTdHJlYW0ucHJvdG90eXBlLHtvYmplY3Q6e2dldCgpe3JldHVybiB0aGlzLm5vZGV9LHNldChlKXt0aGlzLm5vZGU9ZX19LGlzUmVhZDp7Z2V0KCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNXcml0ZTp7Z2V0KCl7cmV0dXJuIDAhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNBcHBlbmQ6e2dldCgpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9fSxmbGFnczp7Z2V0KCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfSxzZXQoZSl7dGhpcy5zaGFyZWQuZmxhZ3M9ZX19LHBvc2l0aW9uOntnZXQoKXtyZXR1cm4gdGhpcy5zaGFyZWQucG9zaXRpb259LHNldChlKXt0aGlzLnNoYXJlZC5wb3NpdGlvbj1lfX19KSksZT1PYmplY3QuYXNzaWduKG5ldyBsZS5GU1N0cmVhbSxlKSwtMT09ciYmKHI9bGUubmV4dGZkKCkpLGUuZmQ9cixsZS5zdHJlYW1zW3JdPWUsZSksY2xvc2VTdHJlYW0oZSl7bGUuc3RyZWFtc1tlXT1udWxsfSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbihlKXt2YXIgcj1sZS5nZXREZXZpY2UoZS5ub2RlLnJkZXYpO2Uuc3RyZWFtX29wcz1yLnN0cmVhbV9vcHMsZS5zdHJlYW1fb3BzLm9wZW4/LihlKX0sbGxzZWVrKCl7dGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNzApfX0sbWFqb3I6ZT0+ZT4+OCxtaW5vcjplPT4yNTUmZSxtYWtlZGV2OihlLHIpPT5lPDw4fHIscmVnaXN0ZXJEZXZpY2UoZSxyKXtsZS5kZXZpY2VzW2VdPXtzdHJlYW1fb3BzOnJ9fSxnZXREZXZpY2U6ZT0+bGUuZGV2aWNlc1tlXSxnZXRNb3VudHMoZSl7Zm9yKHZhciByPVtdLHQ9W2VdO3QubGVuZ3RoOyl7dmFyIG49dC5wb3AoKTtyLnB1c2gobiksdC5wdXNoLmFwcGx5KHQsbi5tb3VudHMpfXJldHVybiByfSxzeW5jZnMoZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPSExKSxsZS5zeW5jRlNSZXF1ZXN0cysrLGxlLnN5bmNGU1JlcXVlc3RzPjEmJnkoYHdhcm5pbmc6ICR7bGUuc3luY0ZTUmVxdWVzdHN9IEZTLnN5bmNmcyBvcGVyYXRpb25zIGluIGZsaWdodCBhdCBvbmNlLCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmtgKTt2YXIgdD1sZS5nZXRNb3VudHMobGUucm9vdC5tb3VudCksbj0wO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGxlLnN5bmNGU1JlcXVlc3RzLS0scihlKX1mdW5jdGlvbiBhKGUpe2lmKGUpcmV0dXJuIGEuZXJyb3JlZD92b2lkIDA6KGEuZXJyb3JlZD0hMCxvKGUpKTsrK24+PXQubGVuZ3RoJiZvKG51bGwpfXQuZm9yRWFjaCgocj0+e2lmKCFyLnR5cGUuc3luY2ZzKXJldHVybiBhKG51bGwpO3IudHlwZS5zeW5jZnMocixlLGEpfSkpfSxtb3VudChlLHIsdCl7dmFyIG4sbz0iLyI9PT10LGE9IXQ7aWYobyYmbGUucm9vdCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigxMCk7aWYoIW8mJiFhKXt2YXIgcz1sZS5sb29rdXBQYXRoKHQse2ZvbGxvd19tb3VudDohMX0pO2lmKHQ9cy5wYXRoLG49cy5ub2RlLGxlLmlzTW91bnRwb2ludChuKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigxMCk7aWYoIWxlLmlzRGlyKG4ubW9kZSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNTQpfXZhciBpPXt0eXBlOmUsb3B0czpyLG1vdW50cG9pbnQ6dCxtb3VudHM6W119LHU9ZS5tb3VudChpKTtyZXR1cm4gdS5tb3VudD1pLGkucm9vdD11LG8/bGUucm9vdD11Om4mJihuLm1vdW50ZWQ9aSxuLm1vdW50JiZuLm1vdW50Lm1vdW50cy5wdXNoKGkpKSx1fSx1bm1vdW50KGUpe3ZhciByPWxlLmxvb2t1cFBhdGgoZSx7Zm9sbG93X21vdW50OiExfSk7aWYoIWxlLmlzTW91bnRwb2ludChyLm5vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTt2YXIgdD1yLm5vZGUsbj10Lm1vdW50ZWQsbz1sZS5nZXRNb3VudHMobik7T2JqZWN0LmtleXMobGUubmFtZVRhYmxlKS5mb3JFYWNoKChlPT57Zm9yKHZhciByPWxlLm5hbWVUYWJsZVtlXTtyOyl7dmFyIHQ9ci5uYW1lX25leHQ7by5pbmNsdWRlcyhyLm1vdW50KSYmbGUuZGVzdHJveU5vZGUocikscj10fX0pKSx0Lm1vdW50ZWQ9bnVsbDt2YXIgYT10Lm1vdW50Lm1vdW50cy5pbmRleE9mKG4pO3QubW91bnQubW91bnRzLnNwbGljZShhLDEpfSxsb29rdXA6KGUscik9PmUubm9kZV9vcHMubG9va3VwKGUsciksbWtub2QoZSxyLHQpe3ZhciBuPWxlLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZSxvPVouYmFzZW5hbWUoZSk7aWYoIW98fCIuIj09PW98fCIuLiI9PT1vKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTt2YXIgYT1sZS5tYXlDcmVhdGUobixvKTtpZihhKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKGEpO2lmKCFuLm5vZGVfb3BzLm1rbm9kKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtyZXR1cm4gbi5ub2RlX29wcy5ta25vZChuLG8scix0KX0sY3JlYXRlOihlLHIpPT4ocj12b2lkIDAhPT1yP3I6NDM4LHImPTQwOTUscnw9MzI3NjgsbGUubWtub2QoZSxyLDApKSxta2RpcjooZSxyKT0+KHI9dm9pZCAwIT09cj9yOjUxMSxyJj0xMDIzLHJ8PTE2Mzg0LGxlLm1rbm9kKGUsciwwKSksbWtkaXJUcmVlKGUscil7Zm9yKHZhciB0PWUuc3BsaXQoIi8iKSxuPSIiLG89MDtvPHQubGVuZ3RoOysrbylpZih0W29dKXtuKz0iLyIrdFtvXTt0cnl7bGUubWtkaXIobixyKX1jYXRjaChlKXtpZigyMCE9ZS5lcnJubyl0aHJvdyBlfX19LG1rZGV2OihlLHIsdCk9Pih2b2lkIDA9PT10JiYodD1yLHI9NDM4KSxyfD04MTkyLGxlLm1rbm9kKGUscix0KSksc3ltbGluayhlLHIpe2lmKCFWLnJlc29sdmUoZSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNDQpO3ZhciB0PWxlLmxvb2t1cFBhdGgocix7cGFyZW50OiEwfSkubm9kZTtpZighdCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7dmFyIG49Wi5iYXNlbmFtZShyKSxvPWxlLm1heUNyZWF0ZSh0LG4pO2lmKG8pdGhyb3cgbmV3IGxlLkVycm5vRXJyb3Iobyk7aWYoIXQubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig2Myk7cmV0dXJuIHQubm9kZV9vcHMuc3ltbGluayh0LG4sZSl9LHJlbmFtZShlLHIpe3ZhciB0LG4sbz1aLmRpcm5hbWUoZSksYT1aLmRpcm5hbWUocikscz1aLmJhc2VuYW1lKGUpLGk9Wi5iYXNlbmFtZShyKTtpZih0PWxlLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZSxuPWxlLmxvb2t1cFBhdGgocix7cGFyZW50OiEwfSkubm9kZSwhdHx8IW4pdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNDQpO2lmKHQubW91bnQhPT1uLm1vdW50KXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDc1KTt2YXIgdSxsPWxlLmxvb2t1cE5vZGUodCxzKSxjPVYucmVsYXRpdmUoZSxhKTtpZigiLiIhPT1jLmNoYXJBdCgwKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7aWYoIi4iIT09KGM9Vi5yZWxhdGl2ZShyLG8pKS5jaGFyQXQoMCkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNTUpO3RyeXt1PWxlLmxvb2t1cE5vZGUobixpKX1jYXRjaChlKXt9aWYobCE9PXUpe3ZhciBkPWxlLmlzRGlyKGwubW9kZSksaD1sZS5tYXlEZWxldGUodCxzLGQpO2lmKGgpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoaCk7aWYoaD11P2xlLm1heURlbGV0ZShuLGksZCk6bGUubWF5Q3JlYXRlKG4saSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoaCk7aWYoIXQubm9kZV9vcHMucmVuYW1lKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtpZihsZS5pc01vdW50cG9pbnQobCl8fHUmJmxlLmlzTW91bnRwb2ludCh1KSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigxMCk7aWYobiE9PXQmJihoPWxlLm5vZGVQZXJtaXNzaW9ucyh0LCJ3IikpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKGgpO2xlLmhhc2hSZW1vdmVOb2RlKGwpO3RyeXt0Lm5vZGVfb3BzLnJlbmFtZShsLG4saSl9Y2F0Y2goZSl7dGhyb3cgZX1maW5hbGx5e2xlLmhhc2hBZGROb2RlKGwpfX19LHJtZGlyKGUpe3ZhciByPWxlLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZSx0PVouYmFzZW5hbWUoZSksbj1sZS5sb29rdXBOb2RlKHIsdCksbz1sZS5tYXlEZWxldGUocix0LCEwKTtpZihvKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKG8pO2lmKCFyLm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtpZihsZS5pc01vdW50cG9pbnQobikpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMTApO3Iubm9kZV9vcHMucm1kaXIocix0KSxsZS5kZXN0cm95Tm9kZShuKX0scmVhZGRpcihlKXt2YXIgcj1sZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLm5vZGU7aWYoIXIubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig1NCk7cmV0dXJuIHIubm9kZV9vcHMucmVhZGRpcihyKX0sdW5saW5rKGUpe3ZhciByPWxlLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZTtpZighcil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7dmFyIHQ9Wi5iYXNlbmFtZShlKSxuPWxlLmxvb2t1cE5vZGUocix0KSxvPWxlLm1heURlbGV0ZShyLHQsITEpO2lmKG8pdGhyb3cgbmV3IGxlLkVycm5vRXJyb3Iobyk7aWYoIXIubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtpZihsZS5pc01vdW50cG9pbnQobikpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMTApO3Iubm9kZV9vcHMudW5saW5rKHIsdCksbGUuZGVzdHJveU5vZGUobil9LHJlYWRsaW5rKGUpe3ZhciByPWxlLmxvb2t1cFBhdGgoZSkubm9kZTtpZighcil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7aWYoIXIubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjgpO3JldHVybiBWLnJlc29sdmUobGUuZ2V0UGF0aChyLnBhcmVudCksci5ub2RlX29wcy5yZWFkbGluayhyKSl9LHN0YXQoZSxyKXt2YXIgdD1sZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohcn0pLm5vZGU7aWYoIXQpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNDQpO2lmKCF0Lm5vZGVfb3BzLmdldGF0dHIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjMpO3JldHVybiB0Lm5vZGVfb3BzLmdldGF0dHIodCl9LGxzdGF0OmU9PmxlLnN0YXQoZSwhMCksY2htb2QoZSxyLHQpe3ZhciBuO2lmKCEobj0ic3RyaW5nIj09dHlwZW9mIGU/bGUubG9va3VwUGF0aChlLHtmb2xsb3c6IXR9KS5ub2RlOmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjMpO24ubm9kZV9vcHMuc2V0YXR0cihuLHttb2RlOjQwOTUmcnwtNDA5NiZuLm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kKGUscil7bGUuY2htb2QoZSxyLCEwKX0sZmNobW9kKGUscil7dmFyIHQ9bGUuZ2V0U3RyZWFtQ2hlY2tlZChlKTtsZS5jaG1vZCh0Lm5vZGUscil9LGNob3duKGUscix0LG4pe3ZhciBvO2lmKCEobz0ic3RyaW5nIj09dHlwZW9mIGU/bGUubG9va3VwUGF0aChlLHtmb2xsb3c6IW59KS5ub2RlOmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjMpO28ubm9kZV9vcHMuc2V0YXR0cihvLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd24oZSxyLHQpe2xlLmNob3duKGUscix0LCEwKX0sZmNob3duKGUscix0KXt2YXIgbj1sZS5nZXRTdHJlYW1DaGVja2VkKGUpO2xlLmNob3duKG4ubm9kZSxyLHQpfSx0cnVuY2F0ZShlLHIpe2lmKHI8MCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7dmFyIHQ7aWYoISh0PSJzdHJpbmciPT10eXBlb2YgZT9sZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLm5vZGU6ZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig2Myk7aWYobGUuaXNEaXIodC5tb2RlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigzMSk7aWYoIWxlLmlzRmlsZSh0Lm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTt2YXIgbj1sZS5ub2RlUGVybWlzc2lvbnModCwidyIpO2lmKG4pdGhyb3cgbmV3IGxlLkVycm5vRXJyb3Iobik7dC5ub2RlX29wcy5zZXRhdHRyKHQse3NpemU6cix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxmdHJ1bmNhdGUoZSxyKXt2YXIgdD1sZS5nZXRTdHJlYW1DaGVja2VkKGUpO2lmKDA9PSgyMDk3MTU1JnQuZmxhZ3MpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTtsZS50cnVuY2F0ZSh0Lm5vZGUscil9LHV0aW1lKGUscix0KXt2YXIgbj1sZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLm5vZGU7bi5ub2RlX29wcy5zZXRhdHRyKG4se3RpbWVzdGFtcDpNYXRoLm1heChyLHQpfSl9LG9wZW4oZSxyLHQpe2lmKCIiPT09ZSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7dmFyIG87aWYodD12b2lkIDA9PT10PzQzODp0LHQ9NjQmKHI9InN0cmluZyI9PXR5cGVvZiByPyhlPT57dmFyIHI9e3I6MCwicisiOjIsdzo1NzcsIncrIjo1NzgsYToxMDg5LCJhKyI6MTA5MH1bZV07aWYodm9pZCAwPT09cil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7ZX1gKTtyZXR1cm4gcn0pKHIpOnIpPzQwOTUmdHwzMjc2ODowLCJvYmplY3QiPT10eXBlb2YgZSlvPWU7ZWxzZXtlPVoubm9ybWFsaXplKGUpO3RyeXtvPWxlLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEoMTMxMDcyJnIpfSkubm9kZX1jYXRjaChlKXt9fXZhciBhPSExO2lmKDY0JnIpaWYobyl7aWYoMTI4JnIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjApfWVsc2Ugbz1sZS5ta25vZChlLHQsMCksYT0hMDtpZighbyl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7aWYobGUuaXNDaHJkZXYoby5tb2RlKSYmKHImPS01MTMpLDY1NTM2JnImJiFsZS5pc0RpcihvLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU0KTtpZighYSl7dmFyIHM9bGUubWF5T3BlbihvLHIpO2lmKHMpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3Iocyl9NTEyJnImJiFhJiZsZS50cnVuY2F0ZShvLDApLHImPS0xMzE3MTM7dmFyIGk9bGUuY3JlYXRlU3RyZWFtKHtub2RlOm8scGF0aDpsZS5nZXRQYXRoKG8pLGZsYWdzOnIsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOm8uc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBpLnN0cmVhbV9vcHMub3BlbiYmaS5zdHJlYW1fb3BzLm9wZW4oaSksIW4ubG9nUmVhZEZpbGVzfHwxJnJ8fChsZS5yZWFkRmlsZXN8fChsZS5yZWFkRmlsZXM9e30pLGUgaW4gbGUucmVhZEZpbGVzfHwobGUucmVhZEZpbGVzW2VdPTEpKSxpfSxjbG9zZShlKXtpZihsZS5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtlLmdldGRlbnRzJiYoZS5nZXRkZW50cz1udWxsKTt0cnl7ZS5zdHJlYW1fb3BzLmNsb3NlJiZlLnN0cmVhbV9vcHMuY2xvc2UoZSl9Y2F0Y2goZSl7dGhyb3cgZX1maW5hbGx5e2xlLmNsb3NlU3RyZWFtKGUuZmQpfWUuZmQ9bnVsbH0saXNDbG9zZWQ6ZT0+bnVsbD09PWUuZmQsbGxzZWVrKGUscix0KXtpZihsZS5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtpZighZS5zZWVrYWJsZXx8IWUuc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNzApO2lmKDAhPXQmJjEhPXQmJjIhPXQpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjgpO3JldHVybiBlLnBvc2l0aW9uPWUuc3RyZWFtX29wcy5sbHNlZWsoZSxyLHQpLGUudW5nb3R0ZW49W10sZS5wb3NpdGlvbn0scmVhZChlLHIsdCxuLG8pe2lmKG48MHx8bzwwKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTtpZihsZS5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5NzE1NSZlLmZsYWdzKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtpZihsZS5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMzEpO2lmKCFlLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7dmFyIGE9dm9pZCAwIT09bztpZihhKXtpZighZS5zZWVrYWJsZSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig3MCl9ZWxzZSBvPWUucG9zaXRpb247dmFyIHM9ZS5zdHJlYW1fb3BzLnJlYWQoZSxyLHQsbixvKTtyZXR1cm4gYXx8KGUucG9zaXRpb24rPXMpLHN9LHdyaXRlKGUscix0LG4sbyxhKXtpZihuPDB8fG88MCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7aWYobGUuaXNDbG9zZWQoZSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoOCk7aWYoMD09KDIwOTcxNTUmZS5mbGFncykpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoOCk7aWYobGUuaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDMxKTtpZighZS5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTtlLnNlZWthYmxlJiYxMDI0JmUuZmxhZ3MmJmxlLmxsc2VlayhlLDAsMik7dmFyIHM9dm9pZCAwIT09bztpZihzKXtpZighZS5zZWVrYWJsZSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig3MCl9ZWxzZSBvPWUucG9zaXRpb247dmFyIGk9ZS5zdHJlYW1fb3BzLndyaXRlKGUscix0LG4sbyxhKTtyZXR1cm4gc3x8KGUucG9zaXRpb24rPWkpLGl9LGFsbG9jYXRlKGUscix0KXtpZihsZS5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtpZihyPDB8fHQ8PTApdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjgpO2lmKDA9PSgyMDk3MTU1JmUuZmxhZ3MpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDgpO2lmKCFsZS5pc0ZpbGUoZS5ub2RlLm1vZGUpJiYhbGUuaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQzKTtpZighZS5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDEzOCk7ZS5zdHJlYW1fb3BzLmFsbG9jYXRlKGUscix0KX0sbW1hcChlLHIsdCxuLG8pe2lmKDAhPSgyJm4pJiYwPT0oMiZvKSYmMiE9KDIwOTcxNTUmZS5mbGFncykpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMik7aWYoMT09KDIwOTcxNTUmZS5mbGFncykpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMik7aWYoIWUuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQzKTtyZXR1cm4gZS5zdHJlYW1fb3BzLm1tYXAoZSxyLHQsbixvKX0sbXN5bmM6KGUscix0LG4sbyk9PmUuc3RyZWFtX29wcy5tc3luYz9lLnN0cmVhbV9vcHMubXN5bmMoZSxyLHQsbixvKTowLG11bm1hcDplPT4wLGlvY3RsKGUscix0KXtpZighZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU5KTtyZXR1cm4gZS5zdHJlYW1fb3BzLmlvY3RsKGUscix0KX0scmVhZEZpbGUoZSxyPXt9KXtpZihyLmZsYWdzPXIuZmxhZ3N8fDAsci5lbmNvZGluZz1yLmVuY29kaW5nfHwiYmluYXJ5IiwidXRmOCIhPT1yLmVuY29kaW5nJiYiYmluYXJ5IiE9PXIuZW5jb2RpbmcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVuY29kaW5nIHR5cGUgIiR7ci5lbmNvZGluZ30iYCk7dmFyIHQsbj1sZS5vcGVuKGUsci5mbGFncyksbz1sZS5zdGF0KGUpLnNpemUsYT1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gbGUucmVhZChuLGEsMCxvLDApLCJ1dGY4Ij09PXIuZW5jb2Rpbmc/dD1RKGEsMCk6ImJpbmFyeSI9PT1yLmVuY29kaW5nJiYodD1hKSxsZS5jbG9zZShuKSx0fSx3cml0ZUZpbGUoZSxyLHQ9e30pe3QuZmxhZ3M9dC5mbGFnc3x8NTc3O3ZhciBuPWxlLm9wZW4oZSx0LmZsYWdzLHQubW9kZSk7aWYoInN0cmluZyI9PXR5cGVvZiByKXt2YXIgbz1uZXcgVWludDhBcnJheShyZShyKSsxKSxhPXRlKHIsbywwLG8ubGVuZ3RoKTtsZS53cml0ZShuLG8sMCxhLHZvaWQgMCx0LmNhbk93bil9ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KHIpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7bGUud3JpdGUobixyLDAsci5ieXRlTGVuZ3RoLHZvaWQgMCx0LmNhbk93bil9bGUuY2xvc2Uobil9LGN3ZDooKT0+bGUuY3VycmVudFBhdGgsY2hkaXIoZSl7dmFyIHI9bGUubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KTtpZihudWxsPT09ci5ub2RlKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQ0KTtpZighbGUuaXNEaXIoci5ub2RlLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU0KTt2YXIgdD1sZS5ub2RlUGVybWlzc2lvbnMoci5ub2RlLCJ4Iik7aWYodCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcih0KTtsZS5jdXJyZW50UGF0aD1yLnBhdGh9LGNyZWF0ZURlZmF1bHREaXJlY3Rvcmllcygpe2xlLm1rZGlyKCIvdG1wIiksbGUubWtkaXIoIi9ob21lIiksbGUubWtkaXIoIi9ob21lL3dlYl91c2VyIil9LGNyZWF0ZURlZmF1bHREZXZpY2VzKCl7bGUubWtkaXIoIi9kZXYiKSxsZS5yZWdpc3RlckRldmljZShsZS5tYWtlZGV2KDEsMykse3JlYWQ6KCk9PjAsd3JpdGU6KGUscix0LG4sbyk9Pm59KSxsZS5ta2RldigiL2Rldi9udWxsIixsZS5tYWtlZGV2KDEsMykpLG9lLnJlZ2lzdGVyKGxlLm1ha2VkZXYoNSwwKSxvZS5kZWZhdWx0X3R0eV9vcHMpLG9lLnJlZ2lzdGVyKGxlLm1ha2VkZXYoNiwwKSxvZS5kZWZhdWx0X3R0eTFfb3BzKSxsZS5ta2RldigiL2Rldi90dHkiLGxlLm1ha2VkZXYoNSwwKSksbGUubWtkZXYoIi9kZXYvdHR5MSIsbGUubWFrZWRldig2LDApKTt2YXIgZT1uZXcgVWludDhBcnJheSgxMDI0KSxyPTAsdD0oKT0+KDA9PT1yJiYocj1HKGUpLmJ5dGVMZW5ndGgpLGVbLS1yXSk7bGUuY3JlYXRlRGV2aWNlKCIvZGV2IiwicmFuZG9tIix0KSxsZS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIix0KSxsZS5ta2RpcigiL2Rldi9zaG0iKSxsZS5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3Rvcmllcygpe2xlLm1rZGlyKCIvcHJvYyIpO3ZhciBlPWxlLm1rZGlyKCIvcHJvYy9zZWxmIik7bGUubWtkaXIoIi9wcm9jL3NlbGYvZmQiKSxsZS5tb3VudCh7bW91bnQoKXt2YXIgcj1sZS5jcmVhdGVOb2RlKGUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIHIubm9kZV9vcHM9e2xvb2t1cChlLHIpe3ZhciB0PStyLG49bGUuZ2V0U3RyZWFtQ2hlY2tlZCh0KSxvPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazooKT0+bi5wYXRofX07cmV0dXJuIG8ucGFyZW50PW8sb319LHJ9fSx7fSwiL3Byb2Mvc2VsZi9mZCIpfSxjcmVhdGVTdGFuZGFyZFN0cmVhbXMoKXtuLnN0ZGluP2xlLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGluIixuLnN0ZGluKTpsZS5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxuLnN0ZG91dD9sZS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsbi5zdGRvdXQpOmxlLnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxuLnN0ZGVycj9sZS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsbi5zdGRlcnIpOmxlLnN5bWxpbmsoIi9kZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiksbGUub3BlbigiL2Rldi9zdGRpbiIsMCksbGUub3BlbigiL2Rldi9zdGRvdXQiLDEpLGxlLm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sZW5zdXJlRXJybm9FcnJvcigpe2xlLkVycm5vRXJyb3J8fChsZS5FcnJub0Vycm9yPWZ1bmN0aW9uKGUscil7dGhpcy5uYW1lPSJFcnJub0Vycm9yIix0aGlzLm5vZGU9cix0aGlzLnNldEVycm5vPWZ1bmN0aW9uKGUpe3RoaXMuZXJybm89ZX0sdGhpcy5zZXRFcnJubyhlKSx0aGlzLm1lc3NhZ2U9IkZTIGVycm9yIn0sbGUuRXJybm9FcnJvci5wcm90b3R5cGU9bmV3IEVycm9yLGxlLkVycm5vRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPWxlLkVycm5vRXJyb3IsWzQ0XS5mb3JFYWNoKChlPT57bGUuZ2VuZXJpY0Vycm9yc1tlXT1uZXcgbGUuRXJybm9FcnJvcihlKSxsZS5nZW5lcmljRXJyb3JzW2VdLnN0YWNrPSI8Z2VuZXJpYyBlcnJvciwgbm8gc3RhY2s+In0pKSl9LHN0YXRpY0luaXQoKXtsZS5lbnN1cmVFcnJub0Vycm9yKCksbGUubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxsZS5tb3VudChzZSx7fSwiLyIpLGxlLmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLGxlLmNyZWF0ZURlZmF1bHREZXZpY2VzKCksbGUuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksbGUuZmlsZXN5c3RlbXM9e01FTUZTOnNlfX0saW5pdChlLHIsdCl7bGUuaW5pdC5pbml0aWFsaXplZD0hMCxsZS5lbnN1cmVFcnJub0Vycm9yKCksbi5zdGRpbj1lfHxuLnN0ZGluLG4uc3Rkb3V0PXJ8fG4uc3Rkb3V0LG4uc3RkZXJyPXR8fG4uc3RkZXJyLGxlLmNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0KCl7bGUuaW5pdC5pbml0aWFsaXplZD0hMTtmb3IodmFyIGU9MDtlPGxlLnN0cmVhbXMubGVuZ3RoO2UrKyl7dmFyIHI9bGUuc3RyZWFtc1tlXTtyJiZsZS5jbG9zZShyKX19LGZpbmRPYmplY3QoZSxyKXt2YXIgdD1sZS5hbmFseXplUGF0aChlLHIpO3JldHVybiB0LmV4aXN0cz90Lm9iamVjdDpudWxsfSxhbmFseXplUGF0aChlLHIpe3RyeXtlPShuPWxlLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiFyfSkpLnBhdGh9Y2F0Y2goZSl7fXZhciB0PXtpc1Jvb3Q6ITEsZXhpc3RzOiExLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ITEscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVjdDpudWxsfTt0cnl7dmFyIG49bGUubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KTt0LnBhcmVudEV4aXN0cz0hMCx0LnBhcmVudFBhdGg9bi5wYXRoLHQucGFyZW50T2JqZWN0PW4ubm9kZSx0Lm5hbWU9Wi5iYXNlbmFtZShlKSxuPWxlLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiFyfSksdC5leGlzdHM9ITAsdC5wYXRoPW4ucGF0aCx0Lm9iamVjdD1uLm5vZGUsdC5uYW1lPW4ubm9kZS5uYW1lLHQuaXNSb290PSIvIj09PW4ucGF0aH1jYXRjaChlKXt0LmVycm9yPWUuZXJybm99cmV0dXJuIHR9LGNyZWF0ZVBhdGgoZSxyLHQsbil7ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpsZS5nZXRQYXRoKGUpO2Zvcih2YXIgbz1yLnNwbGl0KCIvIikucmV2ZXJzZSgpO28ubGVuZ3RoOyl7dmFyIGE9by5wb3AoKTtpZihhKXt2YXIgcz1aLmpvaW4yKGUsYSk7dHJ5e2xlLm1rZGlyKHMpfWNhdGNoKGUpe31lPXN9fXJldHVybiBzfSxjcmVhdGVGaWxlKGUscix0LG4sbyl7dmFyIGE9Wi5qb2luMigic3RyaW5nIj09dHlwZW9mIGU/ZTpsZS5nZXRQYXRoKGUpLHIpLHM9dWUobixvKTtyZXR1cm4gbGUuY3JlYXRlKGEscyl9LGNyZWF0ZURhdGFGaWxlKGUscix0LG4sbyxhKXt2YXIgcz1yO2UmJihlPSJzdHJpbmciPT10eXBlb2YgZT9lOmxlLmdldFBhdGgoZSkscz1yP1ouam9pbjIoZSxyKTplKTt2YXIgaT11ZShuLG8pLHU9bGUuY3JlYXRlKHMsaSk7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtmb3IodmFyIGw9bmV3IEFycmF5KHQubGVuZ3RoKSxjPTAsZD10Lmxlbmd0aDtjPGQ7KytjKWxbY109dC5jaGFyQ29kZUF0KGMpO3Q9bH1sZS5jaG1vZCh1LDE0NnxpKTt2YXIgaD1sZS5vcGVuKHUsNTc3KTtsZS53cml0ZShoLHQsMCx0Lmxlbmd0aCwwLGEpLGxlLmNsb3NlKGgpLGxlLmNobW9kKHUsaSl9fSxjcmVhdGVEZXZpY2UoZSxyLHQsbil7dmFyIG89Wi5qb2luMigic3RyaW5nIj09dHlwZW9mIGU/ZTpsZS5nZXRQYXRoKGUpLHIpLGE9dWUoISF0LCEhbik7bGUuY3JlYXRlRGV2aWNlLm1ham9yfHwobGUuY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgcz1sZS5tYWtlZGV2KGxlLmNyZWF0ZURldmljZS5tYWpvcisrLDApO3JldHVybiBsZS5yZWdpc3RlckRldmljZShzLHtvcGVuKGUpe2Uuc2Vla2FibGU9ITF9LGNsb3NlKGUpe24/LmJ1ZmZlcj8ubGVuZ3RoJiZuKDEwKX0scmVhZChlLHIsbixvLGEpe2Zvcih2YXIgcz0wLGk9MDtpPG87aSsrKXt2YXIgdTt0cnl7dT10KCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PXUmJjA9PT1zKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYpO2lmKG51bGw9PXUpYnJlYWs7cysrLHJbbitpXT11fXJldHVybiBzJiYoZS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxzfSx3cml0ZShlLHIsdCxvLGEpe2Zvcih2YXIgcz0wO3M8bztzKyspdHJ5e24oclt0K3NdKX1jYXRjaChlKXt0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOSl9cmV0dXJuIG8mJihlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLHN9fSksbGUubWtkZXYobyxhLHMpfSxmb3JjZUxvYWRGaWxlKGUpe2lmKGUuaXNEZXZpY2V8fGUuaXNGb2xkZXJ8fGUubGlua3x8ZS5jb250ZW50cylyZXR1cm4hMDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0KXRocm93IG5ldyBFcnJvcigiTGF6eSBsb2FkaW5nIHNob3VsZCBoYXZlIGJlZW4gcGVyZm9ybWVkIChjb250ZW50cyBzZXQpIGluIGNyZWF0ZUxhenlGaWxlLCBidXQgaXQgd2FzIG5vdC4gTGF6eSBsb2FkaW5nIG9ubHkgd29ya3MgaW4gd2ViIHdvcmtlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyBvbiB0aGUgbWFpbiB0aHJlYWQuIik7aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKTt0cnl7ZS5jb250ZW50cz1uZShvKGUudXJsKSwhMCksZS51c2VkQnl0ZXM9ZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2goZSl7dGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjkpfX0sY3JlYXRlTGF6eUZpbGUoZSxyLHQsbixvKXtmdW5jdGlvbiBhKCl7dGhpcy5sZW5ndGhLbm93bj0hMSx0aGlzLmNodW5rcz1bXX1pZihhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7aWYoIShlPnRoaXMubGVuZ3RoLTF8fGU8MCkpe3ZhciByPWUldGhpcy5jaHVua1NpemUsdD1lL3RoaXMuY2h1bmtTaXplfDA7cmV0dXJuIHRoaXMuZ2V0dGVyKHQpW3JdfX0sYS5wcm90b3R5cGUuc2V0RGF0YUdldHRlcj1mdW5jdGlvbihlKXt0aGlzLmdldHRlcj1lfSxhLnByb3RvdHlwZS5jYWNoZUxlbmd0aD1mdW5jdGlvbigpe3ZhciBlPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLm9wZW4oIkhFQUQiLHQsITEpLGUuc2VuZChudWxsKSwhKGUuc3RhdHVzPj0yMDAmJmUuc3RhdHVzPDMwMHx8MzA0PT09ZS5zdGF0dXMpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3QrIi4gU3RhdHVzOiAiK2Uuc3RhdHVzKTt2YXIgcixuPU51bWJlcihlLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LWxlbmd0aCIpKSxvPShyPWUuZ2V0UmVzcG9uc2VIZWFkZXIoIkFjY2VwdC1SYW5nZXMiKSkmJiJieXRlcyI9PT1yLGE9KHI9ZS5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmImd6aXAiPT09cixzPTEwNDg1NzY7b3x8KHM9bik7dmFyIGk9dGhpcztpLnNldERhdGFHZXR0ZXIoKGU9Pnt2YXIgcj1lKnMsbz0oZSsxKSpzLTE7aWYobz1NYXRoLm1pbihvLG4tMSksdm9pZCAwPT09aS5jaHVua3NbZV0mJihpLmNodW5rc1tlXT0oKGUscik9PntpZihlPnIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHJhbmdlICgiK2UrIiwgIityKyIpIG9yIG5vIGJ5dGVzIHJlcXVlc3RlZCEiKTtpZihyPm4tMSl0aHJvdyBuZXcgRXJyb3IoIm9ubHkgIituKyIgYnl0ZXMgYXZhaWxhYmxlISBwcm9ncmFtbWVyIGVycm9yISIpO3ZhciBvPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihvLm9wZW4oIkdFVCIsdCwhMSksbiE9PXMmJm8uc2V0UmVxdWVzdEhlYWRlcigiUmFuZ2UiLCJieXRlcz0iK2UrIi0iK3IpLG8ucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsby5vdmVycmlkZU1pbWVUeXBlJiZvLm92ZXJyaWRlTWltZVR5cGUoInRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQiKSxvLnNlbmQobnVsbCksIShvLnN0YXR1cz49MjAwJiZvLnN0YXR1czwzMDB8fDMwND09PW8uc3RhdHVzKSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIit0KyIuIFN0YXR1czogIitvLnN0YXR1cyk7cmV0dXJuIHZvaWQgMCE9PW8ucmVzcG9uc2U/bmV3IFVpbnQ4QXJyYXkoby5yZXNwb25zZXx8W10pOm5lKG8ucmVzcG9uc2VUZXh0fHwiIiwhMCl9KShyLG8pKSx2b2lkIDA9PT1pLmNodW5rc1tlXSl0aHJvdyBuZXcgRXJyb3IoImRvWEhSIGZhaWxlZCEiKTtyZXR1cm4gaS5jaHVua3NbZV19KSksIWEmJm58fChzPW49MSxuPXRoaXMuZ2V0dGVyKDApLmxlbmd0aCxzPW4sXygiTGF6eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD1uLHRoaXMuX2NodW5rU2l6ZT1zLHRoaXMubGVuZ3RoS25vd249ITB9LCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3Qpe2lmKCFkKXRocm93IkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiO3ZhciBzPW5ldyBhO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHMse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoS25vd258fHRoaXMuY2FjaGVMZW5ndGgoKSx0aGlzLl9sZW5ndGh9fSxjaHVua1NpemU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fY2h1bmtTaXplfX19KTt2YXIgaT17aXNEZXZpY2U6ITEsY29udGVudHM6c319ZWxzZSBpPXtpc0RldmljZTohMSx1cmw6dH07dmFyIHU9bGUuY3JlYXRlRmlsZShlLHIsaSxuLG8pO2kuY29udGVudHM/dS5jb250ZW50cz1pLmNvbnRlbnRzOmkudXJsJiYodS5jb250ZW50cz1udWxsLHUudXJsPWkudXJsKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh1LHt1c2VkQnl0ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnRzLmxlbmd0aH19fSk7dmFyIGw9e307ZnVuY3Rpb24gYyhlLHIsdCxuLG8pe3ZhciBhPWUubm9kZS5jb250ZW50cztpZihvPj1hLmxlbmd0aClyZXR1cm4gMDt2YXIgcz1NYXRoLm1pbihhLmxlbmd0aC1vLG4pO2lmKGEuc2xpY2UpZm9yKHZhciBpPTA7aTxzO2krKylyW3QraV09YVtvK2ldO2Vsc2UgZm9yKGk9MDtpPHM7aSsrKXJbdCtpXT1hLmdldChvK2kpO3JldHVybiBzfXJldHVybiBPYmplY3Qua2V5cyh1LnN0cmVhbV9vcHMpLmZvckVhY2goKGU9Pnt2YXIgcj11LnN0cmVhbV9vcHNbZV07bFtlXT1mdW5jdGlvbigpe3JldHVybiBsZS5mb3JjZUxvYWRGaWxlKHUpLHIuYXBwbHkobnVsbCxhcmd1bWVudHMpfX0pKSxsLnJlYWQ9KGUscix0LG4sbyk9PihsZS5mb3JjZUxvYWRGaWxlKHUpLGMoZSxyLHQsbixvKSksbC5tbWFwPShlLHIsdCxuLG8pPT57bGUuZm9yY2VMb2FkRmlsZSh1KTt2YXIgYT1hZSgpO2lmKCFhKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gYyhlLEUsYSxyLHQpLHtwdHI6YSxhbGxvY2F0ZWQ6ITB9fSx1LnN0cmVhbV9vcHM9bCx1fX0sY2U9KGUscik9PmU/UShrLGUscik6IiIsZGU9e0RFRkFVTFRfUE9MTE1BU0s6NSxjYWxjdWxhdGVBdChlLHIsdCl7aWYoWi5pc0FicyhyKSlyZXR1cm4gcjt2YXIgbjtpZihuPS0xMDA9PT1lP2xlLmN3ZCgpOmRlLmdldFN0cmVhbUZyb21GRChlKS5wYXRoLDA9PXIubGVuZ3RoKXtpZighdCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7cmV0dXJuIG59cmV0dXJuIFouam9pbjIobixyKX0sZG9TdGF0KGUscix0KXt0cnl7dmFyIG49ZShyKX1jYXRjaChlKXtpZihlJiZlLm5vZGUmJloubm9ybWFsaXplKHIpIT09Wi5ub3JtYWxpemUobGUuZ2V0UGF0aChlLm5vZGUpKSlyZXR1cm4tNTQ7dGhyb3cgZX1GW3Q+PjJdPW4uZGV2LEZbdCs0Pj4yXT1uLm1vZGUsRFt0Kzg+PjJdPW4ubmxpbmssRlt0KzEyPj4yXT1uLnVpZCxGW3QrMTY+PjJdPW4uZ2lkLEZbdCsyMD4+Ml09bi5yZGV2LEk9W24uc2l6ZT4+PjAsKGo9bi5zaXplLCtNYXRoLmFicyhqKT49MT9qPjA/K01hdGguZmxvb3Ioai80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqLSsofn5qPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sRlt0KzI0Pj4yXT1JWzBdLEZbdCsyOD4+Ml09SVsxXSxGW3QrMzI+PjJdPTQwOTYsRlt0KzM2Pj4yXT1uLmJsb2Nrczt2YXIgbz1uLmF0aW1lLmdldFRpbWUoKSxhPW4ubXRpbWUuZ2V0VGltZSgpLHM9bi5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIEk9W01hdGguZmxvb3Ioby8xZTMpPj4+MCwoaj1NYXRoLmZsb29yKG8vMWUzKSwrTWF0aC5hYnMoaik+PTE/aj4wPytNYXRoLmZsb29yKGovNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoai0rKH5+aj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEZbdCs0MD4+Ml09SVswXSxGW3QrNDQ+PjJdPUlbMV0sRFt0KzQ4Pj4yXT1vJTFlMyoxZTMsST1bTWF0aC5mbG9vcihhLzFlMyk+Pj4wLChqPU1hdGguZmxvb3IoYS8xZTMpLCtNYXRoLmFicyhqKT49MT9qPjA/K01hdGguZmxvb3Ioai80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqLSsofn5qPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sRlt0KzU2Pj4yXT1JWzBdLEZbdCs2MD4+Ml09SVsxXSxEW3QrNjQ+PjJdPWElMWUzKjFlMyxJPVtNYXRoLmZsb29yKHMvMWUzKT4+PjAsKGo9TWF0aC5mbG9vcihzLzFlMyksK01hdGguYWJzKGopPj0xP2o+MD8rTWF0aC5mbG9vcihqLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGotKyh+fmo+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxGW3QrNzI+PjJdPUlbMF0sRlt0Kzc2Pj4yXT1JWzFdLERbdCs4MD4+Ml09cyUxZTMqMWUzLEk9W24uaW5vPj4+MCwoaj1uLmlubywrTWF0aC5hYnMoaik+PTE/aj4wPytNYXRoLmZsb29yKGovNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoai0rKH5+aj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEZbdCs4OD4+Ml09SVswXSxGW3QrOTI+PjJdPUlbMV0sMH0sZG9Nc3luYyhlLHIsdCxuLG8pe2lmKCFsZS5pc0ZpbGUoci5ub2RlLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQzKTtpZigyJm4pcmV0dXJuIDA7dmFyIGE9ay5zbGljZShlLGUrdCk7bGUubXN5bmMocixhLG8sdCxuKX0sdmFyYXJnczp2b2lkIDAsZ2V0KCl7dmFyIGU9RlsrZGUudmFyYXJncz4+Ml07cmV0dXJuIGRlLnZhcmFyZ3MrPTQsZX0sZ2V0cDooKT0+ZGUuZ2V0KCksZ2V0U3RyOmU9PmNlKGUpLGdldFN0cmVhbUZyb21GRDplPT5sZS5nZXRTdHJlYW1DaGVja2VkKGUpfSxoZT1lPT4oRltPZSgpPj4yXT1lLGUpLGZlPXtCVUNLRVRfQlVGRkVSX1NJWkU6ODE5Mixtb3VudDplPT5sZS5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApLGNyZWF0ZVBpcGUoKXt2YXIgZT17YnVja2V0czpbXSxyZWZjbnQ6Mn07ZS5idWNrZXRzLnB1c2goe2J1ZmZlcjpuZXcgVWludDhBcnJheShmZS5CVUNLRVRfQlVGRkVSX1NJWkUpLG9mZnNldDowLHJvZmZzZXQ6MH0pO3ZhciByPWZlLm5leHRuYW1lKCksdD1mZS5uZXh0bmFtZSgpLG49bGUuY3JlYXRlTm9kZShmZS5yb290LHIsNDA5NiwwKSxvPWxlLmNyZWF0ZU5vZGUoZmUucm9vdCx0LDQwOTYsMCk7bi5waXBlPWUsby5waXBlPWU7dmFyIGE9bGUuY3JlYXRlU3RyZWFtKHtwYXRoOnIsbm9kZTpuLGZsYWdzOjAsc2Vla2FibGU6ITEsc3RyZWFtX29wczpmZS5zdHJlYW1fb3BzfSk7bi5zdHJlYW09YTt2YXIgcz1sZS5jcmVhdGVTdHJlYW0oe3BhdGg6dCxub2RlOm8sZmxhZ3M6MSxzZWVrYWJsZTohMSxzdHJlYW1fb3BzOmZlLnN0cmVhbV9vcHN9KTtyZXR1cm4gby5zdHJlYW09cyx7cmVhZGFibGVfZmQ6YS5mZCx3cml0YWJsZV9mZDpzLmZkfX0sc3RyZWFtX29wczp7cG9sbChlKXt2YXIgcj1lLm5vZGUucGlwZTtpZigxPT0oMjA5NzE1NSZlLmZsYWdzKSlyZXR1cm4gMjYwO2lmKHIuYnVja2V0cy5sZW5ndGg+MClmb3IodmFyIHQ9MDt0PHIuYnVja2V0cy5sZW5ndGg7dCsrKXt2YXIgbj1yLmJ1Y2tldHNbdF07aWYobi5vZmZzZXQtbi5yb2Zmc2V0PjApcmV0dXJuIDY1fXJldHVybiAwfSxpb2N0bDooZSxyLHQpPT4yOCxmc3luYzplPT4yOCxyZWFkKGUscix0LG4sbyl7Zm9yKHZhciBhPWUubm9kZS5waXBlLHM9MCxpPTA7aTxhLmJ1Y2tldHMubGVuZ3RoO2krKyl7dmFyIHU9YS5idWNrZXRzW2ldO3MrPXUub2Zmc2V0LXUucm9mZnNldH12YXIgbD1yLnN1YmFycmF5KHQsdCtuKTtpZihuPD0wKXJldHVybiAwO2lmKDA9PXMpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNik7dmFyIGM9TWF0aC5taW4ocyxuKSxkPWMsaD0wO2ZvcihpPTA7aTxhLmJ1Y2tldHMubGVuZ3RoO2krKyl7dmFyIGY9YS5idWNrZXRzW2ldLG09Zi5vZmZzZXQtZi5yb2Zmc2V0O2lmKGM8PW0pe3ZhciBwPWYuYnVmZmVyLnN1YmFycmF5KGYucm9mZnNldCxmLm9mZnNldCk7YzxtPyhwPXAuc3ViYXJyYXkoMCxjKSxmLnJvZmZzZXQrPWMpOmgrKyxsLnNldChwKTticmVha31wPWYuYnVmZmVyLnN1YmFycmF5KGYucm9mZnNldCxmLm9mZnNldCksbC5zZXQocCksbD1sLnN1YmFycmF5KHAuYnl0ZUxlbmd0aCksYy09cC5ieXRlTGVuZ3RoLGgrK31yZXR1cm4gaCYmaD09YS5idWNrZXRzLmxlbmd0aCYmKGgtLSxhLmJ1Y2tldHNbaF0ub2Zmc2V0PTAsYS5idWNrZXRzW2hdLnJvZmZzZXQ9MCksYS5idWNrZXRzLnNwbGljZSgwLGgpLGR9LHdyaXRlKGUscix0LG4sbyl7dmFyIGE9ZS5ub2RlLnBpcGUscz1yLnN1YmFycmF5KHQsdCtuKSxpPXMuYnl0ZUxlbmd0aDtpZihpPD0wKXJldHVybiAwO3ZhciB1PW51bGw7MD09YS5idWNrZXRzLmxlbmd0aD8odT17YnVmZmVyOm5ldyBVaW50OEFycmF5KGZlLkJVQ0tFVF9CVUZGRVJfU0laRSksb2Zmc2V0OjAscm9mZnNldDowfSxhLmJ1Y2tldHMucHVzaCh1KSk6dT1hLmJ1Y2tldHNbYS5idWNrZXRzLmxlbmd0aC0xXSxBKHUub2Zmc2V0PD1mZS5CVUNLRVRfQlVGRkVSX1NJWkUpO3ZhciBsPWZlLkJVQ0tFVF9CVUZGRVJfU0laRS11Lm9mZnNldDtpZihsPj1pKXJldHVybiB1LmJ1ZmZlci5zZXQocyx1Lm9mZnNldCksdS5vZmZzZXQrPWksaTtsPjAmJih1LmJ1ZmZlci5zZXQocy5zdWJhcnJheSgwLGwpLHUub2Zmc2V0KSx1Lm9mZnNldCs9bCxzPXMuc3ViYXJyYXkobCxzLmJ5dGVMZW5ndGgpKTtmb3IodmFyIGM9cy5ieXRlTGVuZ3RoL2ZlLkJVQ0tFVF9CVUZGRVJfU0laRXwwLGQ9cy5ieXRlTGVuZ3RoJWZlLkJVQ0tFVF9CVUZGRVJfU0laRSxoPTA7aDxjO2grKyl7dmFyIGY9e2J1ZmZlcjpuZXcgVWludDhBcnJheShmZS5CVUNLRVRfQlVGRkVSX1NJWkUpLG9mZnNldDpmZS5CVUNLRVRfQlVGRkVSX1NJWkUscm9mZnNldDowfTthLmJ1Y2tldHMucHVzaChmKSxmLmJ1ZmZlci5zZXQocy5zdWJhcnJheSgwLGZlLkJVQ0tFVF9CVUZGRVJfU0laRSkpLHM9cy5zdWJhcnJheShmZS5CVUNLRVRfQlVGRkVSX1NJWkUscy5ieXRlTGVuZ3RoKX1yZXR1cm4gZD4wJiYoZj17YnVmZmVyOm5ldyBVaW50OEFycmF5KGZlLkJVQ0tFVF9CVUZGRVJfU0laRSksb2Zmc2V0OnMuYnl0ZUxlbmd0aCxyb2Zmc2V0OjB9LGEuYnVja2V0cy5wdXNoKGYpLGYuYnVmZmVyLnNldChzKSksaX0sY2xvc2UoZSl7dmFyIHI9ZS5ub2RlLnBpcGU7ci5yZWZjbnQtLSwwPT09ci5yZWZjbnQmJihyLmJ1Y2tldHM9bnVsbCl9fSxuZXh0bmFtZTooKT0+KGZlLm5leHRuYW1lLmN1cnJlbnR8fChmZS5uZXh0bmFtZS5jdXJyZW50PTApLCJwaXBlWyIrZmUubmV4dG5hbWUuY3VycmVudCsrKyJdIil9LG1lPShlLHIpPT5yKzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFlPyhlPj4+MCkrNDI5NDk2NzI5NipyOk5hTixwZT1lPT5lJTQ9PTAmJihlJTEwMCE9MHx8ZSU0MDA9PTApLHZlPVswLDMxLDYwLDkxLDEyMSwxNTIsMTgyLDIxMywyNDQsMjc0LDMwNSwzMzVdLHdlPVswLDMxLDU5LDkwLDEyMCwxNTEsMTgxLDIxMiwyNDMsMjczLDMwNCwzMzRdLGdlPWU9PihwZShlLmdldEZ1bGxZZWFyKCkpP3ZlOndlKVtlLmdldE1vbnRoKCldK2UuZ2V0RGF0ZSgpLTEsX2U9KGUscix0KT0+dGUoZSxrLHIsdCkseWU9ZT0+e3ZhciByPXJlKGUpKzEsdD14ZShyKTtyZXR1cm4gdCYmX2UoZSx0LHIpLHR9LEVlPWU9Pnt2YXIgcj0oZS1nLmJ1ZmZlci5ieXRlTGVuZ3RoKzY1NTM1KS82NTUzNjt0cnl7cmV0dXJuIGcuZ3JvdyhyKSxDKCksMX1jYXRjaChlKXt9fSxiZT17fSxrZT0oKT0+e2lmKCFrZS5zdHJpbmdzKXt2YXIgZT17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLF86dXx8Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZhciByIGluIGJlKXZvaWQgMD09PWJlW3JdP2RlbGV0ZSBlW3JdOmVbcl09YmVbcl07dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKGAke3J9PSR7ZVtyXX1gKTtrZS5zdHJpbmdzPXR9cmV0dXJuIGtlLnN0cmluZ3N9LFNlPWU9PntYfHwobi5vbkV4aXQ/LihlKSxNPSEwKSxsKGUsbmV3IHEoZSkpfSxGZT0oZSxyKT0+e1NlKGUpfSxEZT1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLE1lPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sQWU9KGUscik9PntFLnNldChlLHIpfSxDZT1lPT5uWyJfIitlXSxQZT0oZSxyLHQsbixvKT0+e3ZhciBhPXtzdHJpbmc6ZT0+e3ZhciByPTA7cmV0dXJuIG51bGwhPWUmJjAhPT1lJiYocj0oZT0+e3ZhciByPXJlKGUpKzEsdD1IZShyKTtyZXR1cm4gX2UoZSx0LHIpLHR9KShlKSkscn0sYXJyYXk6ZT0+e3ZhciByPUhlKGUubGVuZ3RoKTtyZXR1cm4gQWUoZSxyKSxyfX0scz1DZShlKSxpPVtdLHU9MDtpZihuKWZvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1hW3RbbF1dO2M/KDA9PT11JiYodT1qZSgpKSxpW2xdPWMobltsXSkpOmlbbF09bltsXX12YXIgZD1zLmFwcGx5KG51bGwsaSk7cmV0dXJuIGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT11JiZJZSh1KSxmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09PXI/Y2UoZSk6ImJvb2xlYW4iPT09cj9Cb29sZWFuKGUpOmV9KGUpfShkKX0sVGU9ZnVuY3Rpb24oZSxyLHQsbil7ZXx8KGU9dGhpcyksdGhpcy5wYXJlbnQ9ZSx0aGlzLm1vdW50PWUubW91bnQsdGhpcy5tb3VudGVkPW51bGwsdGhpcy5pZD1sZS5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9cix0aGlzLm1vZGU9dCx0aGlzLm5vZGVfb3BzPXt9LHRoaXMuc3RyZWFtX29wcz17fSx0aGlzLnJkZXY9bn0sUmU9MzY1LHplPTE0NjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZS5wcm90b3R5cGUse3JlYWQ6e2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLm1vZGUmUmUpPT09UmV9LHNldDpmdW5jdGlvbihlKXtlP3RoaXMubW9kZXw9UmU6dGhpcy5tb2RlJj0tMzY2fX0sd3JpdGU6e2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLm1vZGUmemUpPT09emV9LHNldDpmdW5jdGlvbihlKXtlP3RoaXMubW9kZXw9emU6dGhpcy5tb2RlJj0tMTQ3fX0saXNGb2xkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBsZS5pc0Rpcih0aGlzLm1vZGUpfX0saXNEZXZpY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBsZS5pc0NocmRldih0aGlzLm1vZGUpfX19KSxsZS5GU05vZGU9VGUsbGUuY3JlYXRlUHJlbG9hZGVkRmlsZT0oZSxyLHQsbixvLHMsaSx1LGwsYyk9Pnt2YXIgZD1yP1YucmVzb2x2ZShaLmpvaW4yKGUscikpOmU7ZnVuY3Rpb24gaCh0KXtmdW5jdGlvbiBhKHQpe2M/LigpLHV8fCgoZSxyLHQsbixvLGEpPT57bGUuY3JlYXRlRGF0YUZpbGUoZSxyLHQsbixvLGEpfSkoZSxyLHQsbixvLGwpLHM/LigpLHgoKX0oKGUscix0LG4pPT57InVuZGVmaW5lZCIhPXR5cGVvZiBCcm93c2VyJiZCcm93c2VyLmluaXQoKTt2YXIgbz0hMTtyZXR1cm4gaWUuZm9yRWFjaCgoYT0+e298fGEuY2FuSGFuZGxlKHIpJiYoYS5oYW5kbGUoZSxyLHQsbiksbz0hMCl9KSksb30pKHQsZCxhLCgoKT0+e2k/LigpLHgoKX0pKXx8YSh0KX1MKCksInN0cmluZyI9PXR5cGVvZiB0PygoZSxyLHQsbik9Pnt2YXIgbz1uPyIiOmBhbCAke2V9YDthKGUsKHQ9PntBKHQsYExvYWRpbmcgZGF0YSBmaWxlICIke2V9IiBmYWlsZWQgKG5vIGFycmF5QnVmZmVyKS5gKSxyKG5ldyBVaW50OEFycmF5KHQpKSxvJiZ4KCl9KSwocj0+e2lmKCF0KXRocm93YExvYWRpbmcgZGF0YSBmaWxlICIke2V9IiBmYWlsZWQuYDt0KCl9KSksbyYmTCgpfSkodCwoZT0+aChlKSksaSk6aCh0KX0sbGUuc3RhdGljSW5pdCgpO3ZhciBVZT17aTpmdW5jdGlvbihlKXt0cnl7dmFyIHI9ZGUuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBsZS5jcmVhdGVTdHJlYW0ocikuZmR9Y2F0Y2goZSl7aWYodm9pZCAwPT09bGV8fCJFcnJub0Vycm9yIiE9PWUubmFtZSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sYTpmdW5jdGlvbihlLHIsdCl7ZGUudmFyYXJncz10O3RyeXt2YXIgbj1kZS5nZXRTdHJlYW1Gcm9tRkQoZSk7c3dpdGNoKHIpe2Nhc2UgMDppZigobz1kZS5nZXQoKSk8MClyZXR1cm4tMjg7Zm9yKDtsZS5zdHJlYW1zW29dOylvKys7cmV0dXJuIGxlLmNyZWF0ZVN0cmVhbShuLG8pLmZkO2Nhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNzpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIG4uZmxhZ3M7Y2FzZSA0OnZhciBvPWRlLmdldCgpO3JldHVybiBuLmZsYWdzfD1vLDA7Y2FzZSA1OnJldHVybiBvPWRlLmdldHAoKSxTW28rMD4+MV09MiwwO2Nhc2UgMTY6Y2FzZSA4OmRlZmF1bHQ6cmV0dXJuLTI4O2Nhc2UgOTpyZXR1cm4gaGUoMjgpLC0xfX1jYXRjaChlKXtpZih2b2lkIDA9PT1sZXx8IkVycm5vRXJyb3IiIT09ZS5uYW1lKXRocm93IGU7cmV0dXJuLWUuZXJybm99fSx4OmZ1bmN0aW9uKGUscil7dHJ5e3ZhciB0PWRlLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gZGUuZG9TdGF0KGxlLnN0YXQsdC5wYXRoLHIpfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LHU6ZnVuY3Rpb24oZSxyKXt0cnl7cmV0dXJuIGU9ZGUuZ2V0U3RyKGUpLGRlLmRvU3RhdChsZS5sc3RhdCxlLHIpfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LHY6ZnVuY3Rpb24oZSxyLHQsbil7dHJ5e3I9ZGUuZ2V0U3RyKHIpO3ZhciBvPTI1NiZuLGE9NDA5NiZuO3JldHVybiBuJj0tNjQwMSxyPWRlLmNhbGN1bGF0ZUF0KGUscixhKSxkZS5kb1N0YXQobz9sZS5sc3RhdDpsZS5zdGF0LHIsdCl9Y2F0Y2goZSl7aWYodm9pZCAwPT09bGV8fCJFcnJub0Vycm9yIiE9PWUubmFtZSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0seTpmdW5jdGlvbihlLHIsdCxuKXtkZS52YXJhcmdzPW47dHJ5e3I9ZGUuZ2V0U3RyKHIpLHI9ZGUuY2FsY3VsYXRlQXQoZSxyKTt2YXIgbz1uP2RlLmdldCgpOjA7cmV0dXJuIGxlLm9wZW4ocix0LG8pLmZkfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LHQ6ZnVuY3Rpb24oZSl7dHJ5e2lmKDA9PWUpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjEpO3ZhciByPWZlLmNyZWF0ZVBpcGUoKTtyZXR1cm4gRltlPj4yXT1yLnJlYWRhYmxlX2ZkLEZbZSs0Pj4yXT1yLndyaXRhYmxlX2ZkLDB9Y2F0Y2goZSl7aWYodm9pZCAwPT09bGV8fCJFcnJub0Vycm9yIiE9PWUubmFtZSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sczpmdW5jdGlvbihlLHIsdCl7dHJ5e2Zvcih2YXIgbj0wLG89MDtvPHI7bysrKXt2YXIgYT1lKzgqbyxzPUZbYT4+Ml0saT1TW2ErND4+MV0sdT0zMixsPWxlLmdldFN0cmVhbShzKTtsJiYodT1kZS5ERUZBVUxUX1BPTExNQVNLLGwuc3RyZWFtX29wcy5wb2xsJiYodT1sLnN0cmVhbV9vcHMucG9sbChsLC0xKSkpLCh1Jj0yNHxpKSYmbisrLFNbYSs2Pj4xXT11fXJldHVybiBufWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LHc6ZnVuY3Rpb24oZSxyKXt0cnl7cmV0dXJuIGU9ZGUuZ2V0U3RyKGUpLGRlLmRvU3RhdChsZS5zdGF0LGUscil9Y2F0Y2goZSl7aWYodm9pZCAwPT09bGV8fCJFcnJub0Vycm9yIiE9PWUubmFtZSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0scTpmdW5jdGlvbihlLHIsdCl7dHJ5e3JldHVybiByPWRlLmdldFN0cihyKSxyPWRlLmNhbGN1bGF0ZUF0KGUsciksMD09PXQ/bGUudW5saW5rKHIpOjUxMj09PXQ/bGUucm1kaXIocik6TygiSW52YWxpZCBmbGFncyBwYXNzZWQgdG8gdW5saW5rYXQiKSwwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LEI6KCk9PjEsazpmdW5jdGlvbihlLHIsdCl7dmFyIG49bWUoZSxyKSxvPW5ldyBEYXRlKDFlMypuKTtGW3Q+PjJdPW8uZ2V0VVRDU2Vjb25kcygpLEZbdCs0Pj4yXT1vLmdldFVUQ01pbnV0ZXMoKSxGW3QrOD4+Ml09by5nZXRVVENIb3VycygpLEZbdCsxMj4+Ml09by5nZXRVVENEYXRlKCksRlt0KzE2Pj4yXT1vLmdldFVUQ01vbnRoKCksRlt0KzIwPj4yXT1vLmdldFVUQ0Z1bGxZZWFyKCktMTkwMCxGW3QrMjQ+PjJdPW8uZ2V0VVRDRGF5KCk7dmFyIGE9RGF0ZS5VVEMoby5nZXRVVENGdWxsWWVhcigpLDAsMSwwLDAsMCwwKSxzPShvLmdldFRpbWUoKS1hKS84NjRlNXwwO0ZbdCsyOD4+Ml09c30sbDpmdW5jdGlvbihlLHIsdCl7dmFyIG49bWUoZSxyKSxvPW5ldyBEYXRlKDFlMypuKTtGW3Q+PjJdPW8uZ2V0U2Vjb25kcygpLEZbdCs0Pj4yXT1vLmdldE1pbnV0ZXMoKSxGW3QrOD4+Ml09by5nZXRIb3VycygpLEZbdCsxMj4+Ml09by5nZXREYXRlKCksRlt0KzE2Pj4yXT1vLmdldE1vbnRoKCksRlt0KzIwPj4yXT1vLmdldEZ1bGxZZWFyKCktMTkwMCxGW3QrMjQ+PjJdPW8uZ2V0RGF5KCk7dmFyIGE9MHxnZShvKTtGW3QrMjg+PjJdPWEsRlt0KzM2Pj4yXT0tNjAqby5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBzPW5ldyBEYXRlKG8uZ2V0RnVsbFllYXIoKSwwLDEpLGk9bmV3IERhdGUoby5nZXRGdWxsWWVhcigpLDYsMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSx1PXMuZ2V0VGltZXpvbmVPZmZzZXQoKSxsPTB8KGkhPXUmJm8uZ2V0VGltZXpvbmVPZmZzZXQoKT09TWF0aC5taW4odSxpKSk7Rlt0KzMyPj4yXT1sfSxtOmZ1bmN0aW9uKGUpe3ZhciByPSgoKT0+e3ZhciByPW5ldyBEYXRlKEZbZSsyMD4+Ml0rMTkwMCxGW2UrMTY+PjJdLEZbZSsxMj4+Ml0sRltlKzg+PjJdLEZbZSs0Pj4yXSxGW2U+PjJdLDApLHQ9RltlKzMyPj4yXSxuPXIuZ2V0VGltZXpvbmVPZmZzZXQoKSxvPW5ldyBEYXRlKHIuZ2V0RnVsbFllYXIoKSwwLDEpLGE9bmV3IERhdGUoci5nZXRGdWxsWWVhcigpLDYsMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxzPW8uZ2V0VGltZXpvbmVPZmZzZXQoKSxpPU1hdGgubWluKHMsYSk7aWYodDwwKUZbZSszMj4+Ml09TnVtYmVyKGEhPXMmJmk9PW4pO2Vsc2UgaWYodD4wIT0oaT09bikpe3ZhciB1PU1hdGgubWF4KHMsYSksbD10PjA/aTp1O3Iuc2V0VGltZShyLmdldFRpbWUoKSs2ZTQqKGwtbikpfUZbZSsyND4+Ml09ci5nZXREYXkoKTt2YXIgYz0wfGdlKHIpO0ZbZSsyOD4+Ml09YyxGW2U+PjJdPXIuZ2V0U2Vjb25kcygpLEZbZSs0Pj4yXT1yLmdldE1pbnV0ZXMoKSxGW2UrOD4+Ml09ci5nZXRIb3VycygpLEZbZSsxMj4+Ml09ci5nZXREYXRlKCksRltlKzE2Pj4yXT1yLmdldE1vbnRoKCksRltlKzIwPj4yXT1yLmdldFllYXIoKTt2YXIgZD1yLmdldFRpbWUoKTtyZXR1cm4gaXNOYU4oZCk/KGhlKDYxKSwtMSk6ZC8xZTN9KSgpO3JldHVybiBCZSgoaj1yLCtNYXRoLmFicyhqKT49MT9qPjA/K01hdGguZmxvb3Ioai80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqLSsofn5qPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKSkscj4+PjB9LG46ZnVuY3Rpb24oZSl7dmFyIHI9KCgpPT57dmFyIHI9RGF0ZS5VVEMoRltlKzIwPj4yXSsxOTAwLEZbZSsxNj4+Ml0sRltlKzEyPj4yXSxGW2UrOD4+Ml0sRltlKzQ+PjJdLEZbZT4+Ml0sMCksdD1uZXcgRGF0ZShyKTtGW2UrMjQ+PjJdPXQuZ2V0VVRDRGF5KCk7dmFyIG49RGF0ZS5VVEModC5nZXRVVENGdWxsWWVhcigpLDAsMSwwLDAsMCwwKSxvPSh0LmdldFRpbWUoKS1uKS84NjRlNXwwO3JldHVybiBGW2UrMjg+PjJdPW8sdC5nZXRUaW1lKCkvMWUzfSkoKTtyZXR1cm4gQmUoKGo9ciwrTWF0aC5hYnMoaik+PTE/aj4wPytNYXRoLmZsb29yKGovNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoai0rKH5+aj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCkpLHI+Pj4wfSxyOihlLHIsdCk9Pnt2YXIgbj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksbz1uZXcgRGF0ZShuLDAsMSksYT1uZXcgRGF0ZShuLDYsMSkscz1vLmdldFRpbWV6b25lT2Zmc2V0KCksaT1hLmdldFRpbWV6b25lT2Zmc2V0KCksdT1NYXRoLm1heChzLGkpO2Z1bmN0aW9uIGwoZSl7dmFyIHI9ZS50b1RpbWVTdHJpbmcoKS5tYXRjaCgvXCgoW0EtWmEteiBdKylcKSQvKTtyZXR1cm4gcj9yWzFdOiJHTVQifURbZT4+Ml09NjAqdSxGW3I+PjJdPU51bWJlcihzIT1pKTt2YXIgYz1sKG8pLGQ9bChhKSxoPXllKGMpLGY9eWUoZCk7aTxzPyhEW3Q+PjJdPWgsRFt0KzQ+PjJdPWYpOihEW3Q+PjJdPWYsRFt0KzQ+PjJdPWgpfSxiOigpPT57TygiIil9LGM6KCk9PkRhdGUubm93KCksaDooZSxyLHQpPT5rLmNvcHlXaXRoaW4oZSxyLHIrdCkscDplPT57dmFyIHI9ay5sZW5ndGgsdD0yMTQ3NDgzNjQ4O2lmKChlPj4+PTApPnQpcmV0dXJuITE7Zm9yKHZhciBuLG8sYT0xO2E8PTQ7YSo9Mil7dmFyIHM9ciooMSsuMi9hKTtzPU1hdGgubWluKHMsZSsxMDA2NjMyOTYpO3ZhciBpPU1hdGgubWluKHQsKG49TWF0aC5tYXgoZSxzKSkrKChvPTY1NTM2KS1uJW8pJW8pO2lmKEVlKGkpKXJldHVybiEwfXJldHVybiExfSx6OihlLHIpPT57dmFyIHQ9MDtyZXR1cm4ga2UoKS5mb3JFYWNoKCgobixvKT0+e3ZhciBhPXIrdDtEW2UrNCpvPj4yXT1hLCgoZSxyKT0+e2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7Kyt0KUVbcisrPj4wXT1lLmNoYXJDb2RlQXQodCk7RVtyPj4wXT0wfSkobixhKSx0Kz1uLmxlbmd0aCsxfSkpLDB9LEE6KGUscik9Pnt2YXIgdD1rZSgpO0RbZT4+Ml09dC5sZW5ndGg7dmFyIG49MDtyZXR1cm4gdC5mb3JFYWNoKChlPT5uKz1lLmxlbmd0aCsxKSksRFtyPj4yXT1uLDB9LGc6RmUsZTpmdW5jdGlvbihlKXt0cnl7dmFyIHI9ZGUuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBsZS5jbG9zZShyKSwwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LGo6ZnVuY3Rpb24oZSxyLHQsbil7dHJ5e3ZhciBvPSgoZSxyLHQsbik9Pntmb3IodmFyIG89MCxhPTA7YTx0O2ErKyl7dmFyIHM9RFtyPj4yXSxpPURbcis0Pj4yXTtyKz04O3ZhciB1PWxlLnJlYWQoZSxFLHMsaSxuKTtpZih1PDApcmV0dXJuLTE7aWYobys9dSx1PGkpYnJlYWs7dm9pZCAwIT09biYmKG4rPXUpfXJldHVybiBvfSkoZGUuZ2V0U3RyZWFtRnJvbUZEKGUpLHIsdCk7cmV0dXJuIERbbj4+Ml09bywwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LG86ZnVuY3Rpb24oZSxyLHQsbixvKXt2YXIgYT1tZShyLHQpO3RyeXtpZihpc05hTihhKSlyZXR1cm4gNjE7dmFyIHM9ZGUuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBsZS5sbHNlZWsocyxhLG4pLEk9W3MucG9zaXRpb24+Pj4wLChqPXMucG9zaXRpb24sK01hdGguYWJzKGopPj0xP2o+MD8rTWF0aC5mbG9vcihqLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGotKyh+fmo+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxGW28+PjJdPUlbMF0sRltvKzQ+PjJdPUlbMV0scy5nZXRkZW50cyYmMD09PWEmJjA9PT1uJiYocy5nZXRkZW50cz1udWxsKSwwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LGQ6ZnVuY3Rpb24oZSxyLHQsbil7dHJ5e3ZhciBvPSgoZSxyLHQsbik9Pntmb3IodmFyIG89MCxhPTA7YTx0O2ErKyl7dmFyIHM9RFtyPj4yXSxpPURbcis0Pj4yXTtyKz04O3ZhciB1PWxlLndyaXRlKGUsRSxzLGksbik7aWYodTwwKXJldHVybi0xO28rPXUsdm9pZCAwIT09biYmKG4rPXUpfXJldHVybiBvfSkoZGUuZ2V0U3RyZWFtRnJvbUZEKGUpLHIsdCk7cmV0dXJuIERbbj4+Ml09bywwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LGY6KGUscix0LG4pPT57dmFyIG89RFtuKzQwPj4yXSxhPXt0bV9zZWM6RltuPj4yXSx0bV9taW46RltuKzQ+PjJdLHRtX2hvdXI6RltuKzg+PjJdLHRtX21kYXk6RltuKzEyPj4yXSx0bV9tb246RltuKzE2Pj4yXSx0bV95ZWFyOkZbbisyMD4+Ml0sdG1fd2RheTpGW24rMjQ+PjJdLHRtX3lkYXk6RltuKzI4Pj4yXSx0bV9pc2RzdDpGW24rMzI+PjJdLHRtX2dtdG9mZjpGW24rMzY+PjJdLHRtX3pvbmU6bz9jZShvKToiIn0scz1jZSh0KSxpPXsiJWMiOiIlYSAlYiAlZCAlSDolTTolUyAlWSIsIiVEIjoiJW0vJWQvJXkiLCIlRiI6IiVZLSVtLSVkIiwiJWgiOiIlYiIsIiVyIjoiJUk6JU06JVMgJXAiLCIlUiI6IiVIOiVNIiwiJVQiOiIlSDolTTolUyIsIiV4IjoiJW0vJWQvJXkiLCIlWCI6IiVIOiVNOiVTIiwiJUVjIjoiJWMiLCIlRUMiOiIlQyIsIiVFeCI6IiVtLyVkLyV5IiwiJUVYIjoiJUg6JU06JVMiLCIlRXkiOiIleSIsIiVFWSI6IiVZIiwiJU9kIjoiJWQiLCIlT2UiOiIlZSIsIiVPSCI6IiVIIiwiJU9JIjoiJUkiLCIlT20iOiIlbSIsIiVPTSI6IiVNIiwiJU9TIjoiJVMiLCIlT3UiOiIldSIsIiVPVSI6IiVVIiwiJU9WIjoiJVYiLCIlT3ciOiIldyIsIiVPVyI6IiVXIiwiJU95IjoiJXkifTtmb3IodmFyIHUgaW4gaSlzPXMucmVwbGFjZShuZXcgUmVnRXhwKHUsImciKSxpW3VdKTt2YXIgbD1bIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sYz1bIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl07ZnVuY3Rpb24gZChlLHIsdCl7Zm9yKHZhciBuPSJudW1iZXIiPT10eXBlb2YgZT9lLnRvU3RyaW5nKCk6ZXx8IiI7bi5sZW5ndGg8cjspbj10WzBdK247cmV0dXJuIG59ZnVuY3Rpb24gaChlLHIpe3JldHVybiBkKGUsciwiMCIpfWZ1bmN0aW9uIGYoZSxyKXtmdW5jdGlvbiB0KGUpe3JldHVybiBlPDA/LTE6ZT4wPzE6MH12YXIgbjtyZXR1cm4gMD09PShuPXQoZS5nZXRGdWxsWWVhcigpLXIuZ2V0RnVsbFllYXIoKSkpJiYwPT09KG49dChlLmdldE1vbnRoKCktci5nZXRNb250aCgpKSkmJihuPXQoZS5nZXREYXRlKCktci5nZXREYXRlKCkpKSxufWZ1bmN0aW9uIG0oZSl7c3dpdGNoKGUuZ2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLTEsMTEsMjkpO2Nhc2UgMTpyZXR1cm4gZTtjYXNlIDI6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsMik7Y2FzZSA0OnJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCwxKTtjYXNlIDU6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKS0xLDExLDMxKTtjYXNlIDY6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKS0xLDExLDMwKX19ZnVuY3Rpb24gcChlKXt2YXIgcj0oKGUscik9Pntmb3IodmFyIHQ9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3I+MDspe3ZhciBuPXBlKHQuZ2V0RnVsbFllYXIoKSksbz10LmdldE1vbnRoKCksYT0obj9EZTpNZSlbb107aWYoIShyPmEtdC5nZXREYXRlKCkpKXJldHVybiB0LnNldERhdGUodC5nZXREYXRlKCkrciksdDtyLT1hLXQuZ2V0RGF0ZSgpKzEsdC5zZXREYXRlKDEpLG88MTE/dC5zZXRNb250aChvKzEpOih0LnNldE1vbnRoKDApLHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpKzEpKX1yZXR1cm4gdH0pKG5ldyBEYXRlKGUudG1feWVhcisxOTAwLDAsMSksZS50bV95ZGF5KSx0PW5ldyBEYXRlKHIuZ2V0RnVsbFllYXIoKSwwLDQpLG49bmV3IERhdGUoci5nZXRGdWxsWWVhcigpKzEsMCw0KSxvPW0odCksYT1tKG4pO3JldHVybiBmKG8scik8PTA/ZihhLHIpPD0wP3IuZ2V0RnVsbFllYXIoKSsxOnIuZ2V0RnVsbFllYXIoKTpyLmdldEZ1bGxZZWFyKCktMX12YXIgdj17IiVhIjplPT5sW2UudG1fd2RheV0uc3Vic3RyaW5nKDAsMyksIiVBIjplPT5sW2UudG1fd2RheV0sIiViIjplPT5jW2UudG1fbW9uXS5zdWJzdHJpbmcoMCwzKSwiJUIiOmU9PmNbZS50bV9tb25dLCIlQyI6ZT0+aCgoZS50bV95ZWFyKzE5MDApLzEwMHwwLDIpLCIlZCI6ZT0+aChlLnRtX21kYXksMiksIiVlIjplPT5kKGUudG1fbWRheSwyLCIgIiksIiVnIjplPT5wKGUpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLCIlRyI6ZT0+cChlKSwiJUgiOmU9PmgoZS50bV9ob3VyLDIpLCIlSSI6ZT0+e3ZhciByPWUudG1faG91cjtyZXR1cm4gMD09cj9yPTEyOnI+MTImJihyLT0xMiksaChyLDIpfSwiJWoiOmU9PmgoZS50bV9tZGF5KygoZSxyKT0+e2Zvcih2YXIgdD0wLG49MDtuPD1yO3QrPWVbbisrXSk7cmV0dXJuIHR9KShwZShlLnRtX3llYXIrMTkwMCk/RGU6TWUsZS50bV9tb24tMSksMyksIiVtIjplPT5oKGUudG1fbW9uKzEsMiksIiVNIjplPT5oKGUudG1fbWluLDIpLCIlbiI6KCk9PiJcbiIsIiVwIjplPT5lLnRtX2hvdXI+PTAmJmUudG1faG91cjwxMj8iQU0iOiJQTSIsIiVTIjplPT5oKGUudG1fc2VjLDIpLCIldCI6KCk9PiJcdCIsIiV1IjplPT5lLnRtX3dkYXl8fDcsIiVVIjplPT57dmFyIHI9ZS50bV95ZGF5KzctZS50bV93ZGF5O3JldHVybiBoKE1hdGguZmxvb3Ioci83KSwyKX0sIiVWIjplPT57dmFyIHI9TWF0aC5mbG9vcigoZS50bV95ZGF5KzctKGUudG1fd2RheSs2KSU3KS83KTtpZigoZS50bV93ZGF5KzM3MS1lLnRtX3lkYXktMiklNzw9MiYmcisrLHIpe2lmKDUzPT1yKXt2YXIgdD0oZS50bV93ZGF5KzM3MS1lLnRtX3lkYXkpJTc7ND09dHx8Mz09dCYmcGUoZS50bV95ZWFyKXx8KHI9MSl9fWVsc2V7cj01Mjt2YXIgbj0oZS50bV93ZGF5KzctZS50bV95ZGF5LTEpJTc7KDQ9PW58fDU9PW4mJnBlKGUudG1feWVhciU0MDAtMSkpJiZyKyt9cmV0dXJuIGgociwyKX0sIiV3IjplPT5lLnRtX3dkYXksIiVXIjplPT57dmFyIHI9ZS50bV95ZGF5KzctKGUudG1fd2RheSs2KSU3O3JldHVybiBoKE1hdGguZmxvb3Ioci83KSwyKX0sIiV5IjplPT4oZS50bV95ZWFyKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLCIlWSI6ZT0+ZS50bV95ZWFyKzE5MDAsIiV6IjplPT57dmFyIHI9ZS50bV9nbXRvZmYsdD1yPj0wO3JldHVybiByPShyPU1hdGguYWJzKHIpLzYwKS82MCoxMDArciU2MCwodD8iKyI6Ii0iKStTdHJpbmcoIjAwMDAiK3IpLnNsaWNlKC00KX0sIiVaIjplPT5lLnRtX3pvbmUsIiUlIjooKT0+IiUifTtmb3IodmFyIHUgaW4gcz1zLnJlcGxhY2UoLyUlL2csIlwwXDAiKSx2KXMuaW5jbHVkZXModSkmJihzPXMucmVwbGFjZShuZXcgUmVnRXhwKHUsImciKSx2W3VdKGEpKSk7dmFyIHc9bmUocz1zLnJlcGxhY2UoL1wwXDAvZywiJSIpLCExKTtyZXR1cm4gdy5sZW5ndGg+cj8wOihBZSh3LGUpLHcubGVuZ3RoLTEpfX0sTGU9ZnVuY3Rpb24oKXt2YXIgZSxyLG8sYSxzPXthOlVlfTtmdW5jdGlvbiBpKGUscil7dmFyIHQ7cmV0dXJuIExlPWUuZXhwb3J0cyxnPUxlLkMsQygpLHQ9TGUuRCxULnVuc2hpZnQodCkseCgpLExlfWlmKEwoKSxuLmluc3RhbnRpYXRlV2FzbSl0cnl7cmV0dXJuIG4uaW5zdGFudGlhdGVXYXNtKHMsaSl9Y2F0Y2goZSl7eShgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtlfWApLHQoZSl9cmV0dXJuKGU9dyxyPU4sbz1zLGE9ZnVuY3Rpb24oZSl7aShlLmluc3RhbmNlKX0sZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHxIKHIpfHxZKHIpfHxofHwiZnVuY3Rpb24iIT10eXBlb2YgZmV0Y2g/SyhyLG8sYSk6ZmV0Y2gocix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oKGU9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGUsbykudGhlbihhLChmdW5jdGlvbihlKXtyZXR1cm4geShgd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICR7ZX1gKSx5KCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLEsocixvLGEpfSkpKSkpLmNhdGNoKHQpLHt9fSgpO24uX2dldF92ZXJzaW9uPSgpPT4obi5fZ2V0X3ZlcnNpb249TGUuRSkoKSxuLl9hcmNoaXZlX29wZW49KGUscix0LG8pPT4obi5fYXJjaGl2ZV9vcGVuPUxlLkYpKGUscix0LG8pLG4uX2FyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZT0oZSxyKT0+KG4uX2FyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZT1MZS5HKShlLHIpLG4uX2FyY2hpdmVfZXJyb3Jfc3RyaW5nPWU9PihuLl9hcmNoaXZlX2Vycm9yX3N0cmluZz1MZS5IKShlKSxuLl9nZXRfbmV4dF9lbnRyeT1lPT4obi5fZ2V0X25leHRfZW50cnk9TGUuSSkoZSksbi5fZ2V0X2ZpbGVkYXRhPShlLHIpPT4obi5fZ2V0X2ZpbGVkYXRhPUxlLkopKGUscik7dmFyIHhlPW4uX21hbGxvYz1lPT4oeGU9bi5fbWFsbG9jPUxlLkspKGUpO24uX2FyY2hpdmVfY2xvc2U9ZT0+KG4uX2FyY2hpdmVfY2xvc2U9TGUuTCkoZSksbi5fc3RhcnRfYXJjaGl2ZV93cml0ZT0oZSxyLHQsbyxhLHMpPT4obi5fc3RhcnRfYXJjaGl2ZV93cml0ZT1MZS5NKShlLHIsdCxvLGEscyksbi5fd3JpdGVfYXJjaGl2ZV9maWxlPShlLHIsdCxvKT0+KG4uX3dyaXRlX2FyY2hpdmVfZmlsZT1MZS5OKShlLHIsdCxvKSxuLl9zaXplX29mX3NpemVfdD0oKT0+KG4uX3NpemVfb2Zfc2l6ZV90PUxlLk8pKCksbi5fZmluaXNoX2FyY2hpdmVfd3JpdGU9KGUscik9PihuLl9maW5pc2hfYXJjaGl2ZV93cml0ZT1MZS5QKShlLHIpLG4uX2ZyZWU9ZT0+KG4uX2ZyZWU9TGUuUSkoZSk7dmFyIE9lPSgpPT4oT2U9TGUuUikoKTtuLl9hcmNoaXZlX2VudHJ5X2JpcnRodGltZV9uc2VjPWU9PihuLl9hcmNoaXZlX2VudHJ5X2JpcnRodGltZV9uc2VjPUxlLlMpKGUpLG4uX2FyY2hpdmVfZW50cnlfZmlsZXR5cGU9ZT0+KG4uX2FyY2hpdmVfZW50cnlfZmlsZXR5cGU9TGUuVCkoZSksbi5fYXJjaGl2ZV9lbnRyeV9tdGltZV9uc2VjPWU9PihuLl9hcmNoaXZlX2VudHJ5X210aW1lX25zZWM9TGUuVSkoZSksbi5fYXJjaGl2ZV9lbnRyeV9wYXRobmFtZT1lPT4obi5fYXJjaGl2ZV9lbnRyeV9wYXRobmFtZT1MZS5WKShlKSxuLl9hcmNoaXZlX2VudHJ5X3BhdGhuYW1lX3V0Zjg9ZT0+KG4uX2FyY2hpdmVfZW50cnlfcGF0aG5hbWVfdXRmOD1MZS5XKShlKSxuLl9hcmNoaXZlX2VudHJ5X3NpemU9ZT0+KG4uX2FyY2hpdmVfZW50cnlfc2l6ZT1MZS5YKShlKSxuLl9hcmNoaXZlX2VudHJ5X2lzX2VuY3J5cHRlZD1lPT4obi5fYXJjaGl2ZV9lbnRyeV9pc19lbmNyeXB0ZWQ9TGUuWSkoZSksbi5fYXJjaGl2ZV9yZWFkX2hhc19lbmNyeXB0ZWRfZW50cmllcz1lPT4obi5fYXJjaGl2ZV9yZWFkX2hhc19lbmNyeXB0ZWRfZW50cmllcz1MZS5aKShlKSxuLl9hcmNoaXZlX3JlYWRfZGF0YV9za2lwPWU9PihuLl9hcmNoaXZlX3JlYWRfZGF0YV9za2lwPUxlLl8pKGUpO3ZhciBOZSxCZT1lPT4oQmU9TGUuYWEpKGUpLGplPSgpPT4oamU9TGUuYmEpKCksSWU9ZT0+KEllPUxlLmNhKShlKSxIZT1lPT4oSGU9TGUuZGEpKGUpO2Z1bmN0aW9uIFllKCl7ZnVuY3Rpb24gZSgpe05lfHwoTmU9ITAsbi5jYWxsZWRSdW49ITAsTXx8KG4ubm9GU0luaXR8fGxlLmluaXQuaW5pdGlhbGl6ZWR8fGxlLmluaXQoKSxsZS5pZ25vcmVQZXJtaXNzaW9ucz0hMSxmZS5yb290PWxlLm1vdW50KGZlLHt9LG51bGwpLCQoVCkscihuKSxuLm9uUnVudGltZUluaXRpYWxpemVkJiZuLm9uUnVudGltZUluaXRpYWxpemVkKCksZnVuY3Rpb24oKXtpZihuLnBvc3RSdW4pZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBuLnBvc3RSdW4mJihuLnBvc3RSdW49W24ucG9zdFJ1bl0pO24ucG9zdFJ1bi5sZW5ndGg7KWU9bi5wb3N0UnVuLnNoaWZ0KCksUi51bnNoaWZ0KGUpO3ZhciBlOyQoUil9KCkpKX16PjB8fChmdW5jdGlvbigpe2lmKG4ucHJlUnVuKWZvcigiZnVuY3Rpb24iPT10eXBlb2Ygbi5wcmVSdW4mJihuLnByZVJ1bj1bbi5wcmVSdW5dKTtuLnByZVJ1bi5sZW5ndGg7KWU9bi5wcmVSdW4uc2hpZnQoKSxQLnVuc2hpZnQoZSk7dmFyIGU7JChQKX0oKSx6PjB8fChuLnNldFN0YXR1cz8obi5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5zZXRTdGF0dXMoIiIpfSksMSksZSgpfSksMSkpOmUoKSkpfWlmKG4uY3dyYXA9KGUscix0LG4pPT57dmFyIG89IXR8fHQuZXZlcnkoKGU9PiJudW1iZXIiPT09ZXx8ImJvb2xlYW4iPT09ZSkpO3JldHVybiJzdHJpbmciIT09ciYmbyYmIW4/Q2UoZSk6ZnVuY3Rpb24oKXtyZXR1cm4gUGUoZSxyLHQsYXJndW1lbnRzKX19LG4uYWxsb2NhdGU9KGUscik9Pnt2YXIgdDtyZXR1cm4gdD0xPT1yP0hlKGUubGVuZ3RoKTp4ZShlLmxlbmd0aCksZS5zdWJhcnJheXx8ZS5zbGljZXx8KGU9bmV3IFVpbnQ4QXJyYXkoZSkpLGsuc2V0KGUsdCksdH0sVT1mdW5jdGlvbiBlKCl7TmV8fFllKCksTmV8fChVPWUpfSxuLnByZUluaXQpZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBuLnByZUluaXQmJihuLnByZUluaXQ9W24ucHJlSW5pdF0pO24ucHJlSW5pdC5sZW5ndGg+MDspbi5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIFllKCksZS5yZWFkeX0pO2NsYXNzIFN7Y29uc3RydWN0b3IoKXt0aGlzLnByZVJ1bj1bXSx0aGlzLnBvc3RSdW49W10sdGhpcy50b3RhbERlcGVuZGVuY2llcz0wfXByaW50KC4uLmUpe2NvbnNvbGUubG9nKGUpfXByaW50RXJyKC4uLmUpe2NvbnNvbGUuZXJyb3IoZSl9aW5pdEZ1bmN0aW9ucygpe3RoaXMucnVuQ29kZT17Z2V0VmVyc2lvbjp0aGlzLmN3cmFwKCJnZXRfdmVyc2lvbiIsInN0cmluZyIsW10pLG9wZW5BcmNoaXZlOnRoaXMuY3dyYXAoImFyY2hpdmVfb3BlbiIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJzdHJpbmciLCJzdHJpbmciXSksZ2V0TmV4dEVudHJ5OnRoaXMuY3dyYXAoImdldF9uZXh0X2VudHJ5IiwibnVtYmVyIixbIm51bWJlciJdKSxnZXRGaWxlRGF0YTp0aGlzLmN3cmFwKCJnZXRfZmlsZWRhdGEiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0pLHNraXBFbnRyeTp0aGlzLmN3cmFwKCJhcmNoaXZlX3JlYWRfZGF0YV9za2lwIiwibnVtYmVyIixbIm51bWJlciJdKSxjbG9zZUFyY2hpdmU6dGhpcy5jd3JhcCgiYXJjaGl2ZV9jbG9zZSIsbnVsbCxbIm51bWJlciJdKSxnZXRFbnRyeVNpemU6dGhpcy5jd3JhcCgiYXJjaGl2ZV9lbnRyeV9zaXplIiwibnVtYmVyIixbIm51bWJlciJdKSxnZXRFbnRyeU5hbWU6dGhpcy5jd3JhcCgiYXJjaGl2ZV9lbnRyeV9wYXRobmFtZSIsInN0cmluZyIsWyJudW1iZXIiXSksZ2V0RW50cnlUeXBlOnRoaXMuY3dyYXAoImFyY2hpdmVfZW50cnlfZmlsZXR5cGUiLCJudW1iZXIiLFsibnVtYmVyIl0pLGdldEVudHJ5TGFzdE1vZGlmaWVkOnRoaXMuY3dyYXAoImFyY2hpdmVfZW50cnlfbXRpbWVfbnNlYyIsIm51bWJlciIsWyJudW1iZXIiXSksZ2V0RXJyb3I6dGhpcy5jd3JhcCgiYXJjaGl2ZV9lcnJvcl9zdHJpbmciLCJzdHJpbmciLFsibnVtYmVyIl0pLHN0YXJ0QXJjaGl2ZVdyaXRlOnRoaXMuY3dyYXAoInN0YXJ0X2FyY2hpdmVfd3JpdGUiLCJudW1iZXIiLFsic3RyaW5nIiwic3RyaW5nIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwic3RyaW5nIl0pLHdyaXRlQXJjaGl2ZUZpbGU6dGhpcy5jd3JhcCgid3JpdGVfYXJjaGl2ZV9maWxlIixudWxsLFsibnVtYmVyIiwic3RyaW5nIiwibnVtYmVyIiwibnVtYmVyIl0pLGZpbmlzaEFyY2hpdmVXcml0ZTp0aGlzLmN3cmFwKCJmaW5pc2hfYXJjaGl2ZV93cml0ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSksZW50cnlJc0VuY3J5cHRlZDp0aGlzLmN3cmFwKCJhcmNoaXZlX2VudHJ5X2lzX2VuY3J5cHRlZCIsIm51bWJlciIsWyJudW1iZXIiXSksaGFzRW5jcnlwdGVkRW50cmllczp0aGlzLmN3cmFwKCJhcmNoaXZlX3JlYWRfaGFzX2VuY3J5cHRlZF9lbnRyaWVzIiwibnVtYmVyIixbIm51bWJlciJdKSxhZGRQYXNzcGhyYXNlOnRoaXMuY3dyYXAoImFyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZSIsIm51bWJlciIsWyJudW1iZXIiLCJzdHJpbmciXSksc3RyaW5nOmU9PnRoaXMuYWxsb2NhdGUodGhpcy5pbnRBcnJheUZyb21TdHJpbmcoZSksImk4IiwwKSxtYWxsb2M6dGhpcy5jd3JhcCgibWFsbG9jIiwibnVtYmVyIixbIm51bWJlciJdKSxmcmVlOnRoaXMuY3dyYXAoImZyZWUiLG51bGwsWyJudW1iZXIiXSksc2l6ZU9mU2l6ZVQ6dGhpcy5jd3JhcCgic2l6ZV9vZl9zaXplX3QiLCJudW1iZXIiLFtdKX19bW9uaXRvclJ1bkRlcGVuZGVuY2llcygpe319bGV0IEY9bnVsbCxEPW51bGwsTT0hMTtjbGFzcyBBe2NvbnN0cnVjdG9yKGUpe0EucmVhZHlDYWxsYmFjaz1lLE0mJnNldFRpbWVvdXQoKCgpPT5lKCkpLDApfW9wZW4oZSxyKXtGLm9wZW4oZSkudGhlbigoKCk9PnIoKSkpfWxpc3RGaWxlcygpe2xldCBlPVtdO2Zvcihjb25zdCByIG9mIEYuZW50cmllcyghMCkpZS5wdXNoKHIpO3JldHVybiBlfWV4dHJhY3RGaWxlcygpe2xldCBlPVtdO2Zvcihjb25zdCByIG9mIEYuZW50cmllcyghMSkpZS5wdXNoKHIpO3JldHVybiBlfWV4dHJhY3RTaW5nbGVGaWxlKGUpe2Zvcihjb25zdCByIG9mIEYuZW50cmllcyghMCxlKSlpZihyLmZpbGVEYXRhKXJldHVybiByfWhhc0VuY3J5cHRlZERhdGEoKXtyZXR1cm4gRi5oYXNFbmNyeXB0ZWREYXRhKCl9dXNlUGFzc3dvcmQoZSl7Ri5zZXRQYXNzcGhyYXNlKGUpfXNldExvY2FsZShlKXtGLnNldExvY2FsZShlKX13cml0ZUFyY2hpdmUoZSxyLHQsbil7cmV0dXJuIEQud3JpdGUoZSxyLHQsbil9Y2xvc2UoKXtGLmNsb3NlKCl9fXZhciBDO0M9ZT0+e0Y9bmV3IHkoZSksRD1uZXcgRShlKSxBPy5yZWFkeUNhbGxiYWNrPy4oKSxNPSEwfSxrKG5ldyBTKS50aGVuKChlPT57ZS5pbml0RnVuY3Rpb25zKCksQyhlKX0pKSxpKEEpOwo=",typeof document>"u"&&typeof location>"u"?require("url").pathToFileURL(__filename).href:typeof document>"u"?location.href:Rt&&Rt.tagName.toUpperCase()==="SCRIPT"&&Rt.src||new URL("gerbers-renderer.umd.js",document.baseURI).href),{type:"module"})}static async getClient(n,i){var h;const u=((h=i.createClient)===null||h===void 0?void 0:h.call(i,n))||Ii(n);let{promise:a,resolve:r}=Promise.withResolvers();const e=await new u(ti((()=>{r()})));return await a,e}}yt._options={},Promise.withResolvers||(Promise.withResolvers=function(){var o,n,i=new this((function(h,u){o=h,n=u}));return{resolve:o,reject:n,promise:i}});const ue=Object.freeze(Object.defineProperty({__proto__:null,Archive:yt,get ArchiveCompression(){return ri},get ArchiveFormat(){return ni}},Symbol.toStringTag,{value:"Module"}));ft.GerberError=bt,ft.createBoardViewer=oe,ft.detectGerberBundle=di,ft.renderGerbers=se,ft.renderGerbersFiles=At,ft.renderGerbersZip=re,Object.defineProperty(ft,Symbol.toStringTag,{value:"Module"})}));
|
|
100
103
|
//# sourceMappingURL=gerbers-renderer.umd.js.map
|