Socket
Socket
Sign inDemoInstall

perf-cascade

Package Overview
Dependencies
Maintainers
1
Versions
89
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

perf-cascade - npm Package Compare versions

Comparing version 1.4.0 to 2.0.0

7

dist/perf-cascade-file-reader.min.js

@@ -1,3 +0,4 @@

/*! github.com/micmro/PerfCascade Version:1.4.0 (06/04/2017) */
!function(a){"use strict";function b(){this.crc=-1}function c(){}function d(a,b,c){if(b<0||c<0||b+c>a.size)throw new RangeError("offset:"+b+", length:"+c+", size:"+a.size);return a.slice?a.slice(b,b+c):a.webkitSlice?a.webkitSlice(b,b+c):a.mozSlice?a.mozSlice(b,b+c):a.msSlice?a.msSlice(b,b+c):void 0}function e(a,b){var c,d;return c=new ArrayBuffer(a),d=new Uint8Array(c),b&&d.set(b,0),{buffer:c,array:d,view:new DataView(c)}}function f(){}function g(a){function b(b,c){d=new i(new Blob([a],{type:P})),d.init(function(){e.size=d.size,b()},c)}function c(a,b,c,e){d.readUint8Array(a,b,c,e)}var d,e=this;e.size=0,e.init=b,e.readUint8Array=c}function h(b){function c(a){for(var c=b.length;"="==b.charAt(c-1);)c--;f=b.indexOf(",")+1,g.size=Math.floor(.75*(c-f)),a()}function d(c,d,g){var h,i=e(d),j=4*Math.floor(c/3),k=4*Math.ceil((c+d)/3),l=a.atob(b.substring(j+f,k+f)),m=c-3*Math.floor(j/4);for(h=m;h<m+d;h++)i.array[h-m]=l.charCodeAt(h);g(i.array)}var f,g=this;g.size=0,g.init=c,g.readUint8Array=d}function i(a){function b(b){e.size=a.size,b()}function c(b,c,e,f){var g=new FileReader;g.onload=function(a){e(new Uint8Array(a.target.result))},g.onerror=f;try{g.readAsArrayBuffer(d(a,b,c))}catch(a){f(a)}}var e=this;e.size=0,e.init=b,e.readUint8Array=c}function j(){}function k(a){function b(a){e=new Blob([],{type:P}),a()}function c(a,b){e=new Blob([e,E?a:a.buffer],{type:P}),b()}function d(b,c){var d=new FileReader;d.onload=function(a){b(a.target.result)},d.onerror=c,d.readAsText(e,a)}var e,f=this;f.init=b,f.writeUint8Array=c,f.getData=d}function l(b){function c(a){g+="data:"+(b||"")+";base64,",a()}function d(b,c){var d,e=h.length,f=h;for(h="",d=0;d<3*Math.floor((e+b.length)/3)-e;d++)f+=String.fromCharCode(b[d]);for(;d<b.length;d++)h+=String.fromCharCode(b[d]);f.length>2?g+=a.btoa(f):h=f,c()}function e(b){b(g+a.btoa(h))}var f=this,g="",h="";f.init=c,f.writeUint8Array=d,f.getData=e}function m(a){function b(b){e=new Blob([],{type:a}),b()}function c(b,c){e=new Blob([e,E?b:b.buffer],{type:a}),c()}function d(a){a(e)}var e,f=this;f.init=b,f.writeUint8Array=c,f.getData=d}function n(a,b,c,d,e,f,g,h,i,j){function k(){a.removeEventListener("message",l,!1),h(o,p)}function l(b){var c=b.data,e=c.data,h=c.error;if(h)return h.toString=function(){return"Error: "+this.message},void i(h);if(c.sn===r)switch("number"==typeof c.codecTime&&(a.codecTime+=c.codecTime),"number"==typeof c.crcTime&&(a.crcTime+=c.crcTime),c.type){case"append":e?(o+=e.length,d.writeUint8Array(e,function(){m()},j)):m();break;case"flush":p=c.crc,e?(o+=e.length,d.writeUint8Array(e,function(){k()},j)):k();break;case"progress":g&&g(n+c.loaded,f);break;case"importScripts":case"newTask":case"echo":break;default:console.warn("zip.js:launchWorkerProcess: unknown message: ",c)}}function m(){n=q*O,n<=f?c.readUint8Array(e+n,Math.min(O,f-n),function(c){g&&g(n,f);var d=0===n?b:{sn:r};d.type="append",d.data=c;try{a.postMessage(d,[c.buffer])}catch(b){a.postMessage(d)}q++},i):a.postMessage({sn:r,type:"flush"})}var n,o,p,q=0,r=b.sn;o=0,a.addEventListener("message",l,!1),m()}function o(a,c,d,e,f,g,h,i,j,k){function l(){var b;if((m=n*O)<f)c.readUint8Array(e+m,Math.min(O,f-m),function(b){var c;try{c=a.append(b,function(a){h&&h(m+a,f)})}catch(a){return void j(a)}c?(o+=c.length,d.writeUint8Array(c,function(){n++,setTimeout(l,1)},k),q&&r.append(c)):(n++,setTimeout(l,1)),p&&r.append(b),h&&h(m,f)},j);else{try{b=a.flush()}catch(a){return void j(a)}b?(q&&r.append(b),o+=b.length,d.writeUint8Array(b,function(){i(o,r.get())},k)):i(o,r.get())}}var m,n=0,o=0,p="input"===g,q="output"===g,r=new b;l()}function p(b,c,d,e,f,g,h,i,j,k,l){var m=h?"output":"none";if(a.zip.useWebWorkers){n(b,{sn:c,codecClass:"Inflater",crcType:m},d,e,f,g,j,i,k,l)}else o(new a.zip.Inflater,d,e,f,g,m,j,i,k,l)}function q(b,c,d,e,f,g,h,i,j){if(a.zip.useWebWorkers){n(b,{sn:c,options:{level:f},codecClass:"Deflater",crcType:"input"},d,e,0,d.size,h,g,i,j)}else o(new a.zip.Deflater,d,e,0,d.size,"input",h,g,i,j)}function r(b,d,e,f,g,h,i,j,k,l,m){if(a.zip.useWebWorkers&&i){n(b,{sn:d,codecClass:"NOOP",crcType:"input"},e,f,g,h,k,j,l,m)}else o(new c,e,f,g,h,"input",k,j,l,m)}function s(a){var b,c,d="",e=["Ç","ü","é","â","ä","à","å","ç","ê","ë","è","ï","î","ì","Ä","Å","É","æ","Æ","ô","ö","ò","û","ù","ÿ","Ö","Ü","ø","£","Ø","×","ƒ","á","í","ó","ú","ñ","Ñ","ª","º","¿","®","¬","½","¼","¡","«","»","_","_","_","¦","¦","Á","Â","À","©","¦","¦","+","+","¢","¥","+","+","-","-","+","-","+","ã","Ã","+","+","-","-","¦","-","+","¤","ð","Ð","Ê","Ë","È","i","Í","Î","Ï","+","+","_","_","¦","Ì","_","Ó","ß","Ô","Ò","õ","Õ","µ","þ","Þ","Ú","Û","Ù","ý","Ý","¯","´","­","±","_","¾","¶","§","÷","¸","°","¨","·","¹","³","²","_"," "];for(b=0;b<a.length;b++)c=255&a.charCodeAt(b),d+=c>127?e[c-128]:String.fromCharCode(c);return d}function t(a){return decodeURIComponent(escape(a))}function u(a){var b,c="";for(b=0;b<a.length;b++)c+=String.fromCharCode(a[b]);return c}function v(a){var b=(4294901760&a)>>16,c=65535&a;try{return new Date(1980+((65024&b)>>9),((480&b)>>5)-1,31&b,(63488&c)>>11,(2016&c)>>5,2*(31&c),0)}catch(a){}}function w(a,b,c,d,e){return a.version=b.view.getUint16(c,!0),a.bitFlag=b.view.getUint16(c+2,!0),a.compressionMethod=b.view.getUint16(c+4,!0),a.lastModDateRaw=b.view.getUint32(c+6,!0),a.lastModDate=v(a.lastModDateRaw),1==(1&a.bitFlag)?void e(H):((d||8!=(8&a.bitFlag))&&(a.crc32=b.view.getUint32(c+10,!0),a.compressedSize=b.view.getUint32(c+14,!0),a.uncompressedSize=b.view.getUint32(c+18,!0)),4294967295===a.compressedSize||4294967295===a.uncompressedSize?void e(I):(a.filenameLength=b.view.getUint16(c+22,!0),void(a.extraFieldLength=b.view.getUint16(c+24,!0))))}function x(b,c,d){function f(){}function g(a){function c(c,f){b.readUint8Array(b.size-c,c,function(b){for(var c=b.length-e;c>=0;c--)if(80===b[c]&&75===b[c+1]&&5===b[c+2]&&6===b[c+3])return void a(new DataView(b.buffer,c,e));f()},function(){d(J)})}var e=22;if(b.size<e)return void d(F);var f=e+65536;c(e,function(){c(Math.min(f,b.size),function(){d(F)})})}var h=0;f.prototype.getData=function(a,c,f,g){function i(a){var b=e(4);return b.view.setUint32(0,a),m.crc32==b.view.getUint32(0)}function j(b,e){g&&!i(e)?d(G):a.getData(function(a){c(a)})}function k(a){d(a||M)}function l(a){d(a||L)}var m=this;b.readUint8Array(m.offset,30,function(c){var i,n=e(c.length,c);if(1347093252!=n.view.getUint32(0))return void d(F);w(m,n,4,!1,d),i=m.offset+30+m.filenameLength+m.extraFieldLength,a.init(function(){0===m.compressionMethod?r(m._worker,h++,b,a,i,m.compressedSize,g,j,f,k,l):p(m._worker,h++,b,a,i,m.compressedSize,g,j,f,k,l)},l)},k)};var i={getEntries:function(a){var c=this._worker;g(function(g){var h,i;if(h=g.getUint32(16,!0),i=g.getUint16(8,!0),h<0||h>=b.size)return void d(F);b.readUint8Array(h,b.size-h,function(b){var g,h,j,k,l=0,m=[],n=e(b.length,b);for(g=0;g<i;g++){if(h=new f,h._worker=c,1347092738!=n.view.getUint32(l))return void d(F);w(h,n,l+6,!0,d),h.commentLength=n.view.getUint16(l+32,!0),h.directory=16==(16&n.view.getUint8(l+38)),h.offset=n.view.getUint32(l+42,!0),j=u(n.array.subarray(l+46,l+46+h.filenameLength)),h.filename=2048==(2048&h.bitFlag)?t(j):s(j),h.directory||"/"!=h.filename.charAt(h.filename.length-1)||(h.directory=!0),k=u(n.array.subarray(l+46+h.filenameLength+h.extraFieldLength,l+46+h.filenameLength+h.extraFieldLength+h.commentLength)),h.comment=2048==(2048&h.bitFlag)?t(k):s(k),m.push(h),l+=46+h.filenameLength+h.extraFieldLength+h.commentLength}a(m)},function(){d(J)})})},close:function(a){this._worker&&(this._worker.terminate(),this._worker=null),a&&a()},_worker:null};a.zip.useWebWorkers?C("inflater",function(a){i._worker=a,c(i)},function(a){d(a)}):c(i)}function y(a){return unescape(encodeURIComponent(a))}function z(a){var b,c=[];for(b=0;b<a.length;b++)c.push(a.charCodeAt(b));return c}function A(b,c,d,f){function g(a){d(a||K)}function h(a){d(a||M)}var i={},j=[],k=0,l=0,m={add:function(a,c,m,n,o){function p(c){var d;w=o.lastModDate||new Date,u=e(26),i[a]={headerArray:u.array,directory:o.directory,filename:v,offset:k,comment:z(y(o.comment||""))},u.view.setUint32(0,335546376),o.version&&u.view.setUint8(0,o.version),f||0===o.level||o.directory||u.view.setUint16(4,2048),u.view.setUint16(6,(w.getHours()<<6|w.getMinutes())<<5|w.getSeconds()/2,!0),u.view.setUint16(8,(w.getFullYear()-1980<<4|w.getMonth()+1)<<5|w.getDate(),!0),u.view.setUint16(22,v.length,!0),d=e(30+v.length),d.view.setUint32(0,1347093252),d.array.set(u.array,4),d.array.set(v,30),k+=d.array.length,b.writeUint8Array(d.array,c,g)}function s(a,d){var f=e(16);k+=a||0,f.view.setUint32(0,1347094280),void 0!==d&&(u.view.setUint32(10,d,!0),f.view.setUint32(4,d,!0)),c&&(f.view.setUint32(8,a,!0),u.view.setUint32(14,a,!0),f.view.setUint32(12,c.size,!0),u.view.setUint32(18,c.size,!0)),b.writeUint8Array(f.array,function(){k+=16,m()},g)}function t(){if(o=o||{},a=a.trim(),o.directory&&"/"!=a.charAt(a.length-1)&&(a+="/"),i.hasOwnProperty(a))return void d(N);v=z(y(a)),j.push(a),p(function(){c?f||0===o.level?r(x,l++,c,b,0,c.size,!0,s,n,h,g):q(x,l++,c,b,o.level,s,n,h,g):s()},g)}var u,v,w,x=this._worker;c?c.init(t,h):t()},close:function(a){this._worker&&(this._worker.terminate(),this._worker=null);var c,d,f,h=0,l=0;for(d=0;d<j.length;d++)f=i[j[d]],h+=46+f.filename.length+f.comment.length;for(c=e(h+22),d=0;d<j.length;d++)f=i[j[d]],c.view.setUint32(l,1347092738),c.view.setUint16(l+4,5120),c.array.set(f.headerArray,l+6),c.view.setUint16(l+32,f.comment.length,!0),f.directory&&c.view.setUint8(l+38,16),c.view.setUint32(l+42,f.offset,!0),c.array.set(f.filename,l+46),c.array.set(f.comment,l+46+f.filename.length),l+=46+f.filename.length+f.comment.length;c.view.setUint32(l,1347093766),c.view.setUint16(l+8,j.length,!0),c.view.setUint16(l+10,j.length,!0),c.view.setUint32(l+12,h,!0),c.view.setUint32(l+16,k,!0),b.writeUint8Array(c.array,function(){b.getData(a)},g)},_worker:null};a.zip.useWebWorkers?C("deflater",function(a){m._worker=a,c(m)},function(a){d(a)}):c(m)}function B(a){var b=document.createElement("a");return a.map(function(a){return b.href=a,b.href})}function C(b,c,d){function e(a){var b=a.data;if(b.error)return h.terminate(),void d(b.error);"importScripts"===b.type&&(h.removeEventListener("message",e),h.removeEventListener("error",f),c(h))}function f(a){h.terminate(),d(a)}if(null!==a.zip.workerScripts&&null!==a.zip.workerScriptsPath)return void d(new Error("Either zip.workerScripts or zip.workerScriptsPath may be set, not both."));var g;if(a.zip.workerScripts){if(g=a.zip.workerScripts[b],!Array.isArray(g))return void d(new Error("zip.workerScripts."+b+" is not an array!"));g=B(g)}else g=Q[b].slice(0),g[0]=(a.zip.workerScriptsPath||"")+g[0];var h=new Worker(g[0]);h.codecTime=h.crcTime=0,h.postMessage({type:"importScripts",scripts:g.slice(1)}),h.addEventListener("message",e),h.addEventListener("error",f)}function D(a){console.error(a)}var E,F="File format is not recognized.",G="CRC failed.",H="File contains encrypted entry.",I="File is using Zip64 (4gb+ file size).",J="Error while reading zip file.",K="Error while writing zip file.",L="Error while writing file data.",M="Error while reading file data.",N="File already exists.",O=524288,P="text/plain";try{E=0===new Blob([new DataView(new ArrayBuffer(0))]).size}catch(a){}b.prototype.append=function(a){for(var b=0|this.crc,c=this.table,d=0,e=0|a.length;d<e;d++)b=b>>>8^c[255&(b^a[d])];this.crc=b},b.prototype.get=function(){return~this.crc},b.prototype.table=function(){var a,b,c,d=[];for(a=0;a<256;a++){for(c=a,b=0;b<8;b++)1&c?c=c>>>1^3988292384:c>>>=1;d[a]=c}return d}(),c.prototype.append=function(a,b){return a},c.prototype.flush=function(){},g.prototype=new f,g.prototype.constructor=g,h.prototype=new f,h.prototype.constructor=h,i.prototype=new f,i.prototype.constructor=i,j.prototype.getData=function(a){a(this.data)},k.prototype=new j,k.prototype.constructor=k,l.prototype=new j,l.prototype.constructor=l,m.prototype=new j,m.prototype.constructor=m;var Q={deflater:["z-worker.js","deflate.js"],inflater:["z-worker.js","inflate.js"]};a.zip={Reader:f,Writer:j,BlobReader:i,Data64URIReader:h,TextReader:g,BlobWriter:m,Data64URIWriter:l,TextWriter:k,createReader:function(a,b,c){c=c||D,a.init(function(){x(a,b,c)},c)},createWriter:function(a,b,c,d){c=c||D,d=!!d,a.init(function(){A(a,b,c,d)},c)},useWebWorkers:!0,workerScriptsPath:null,workerScripts:null}}(this),function(a){"use strict";function b(){function a(a,b,c,d,j,k,m,o,q,r,s){var t,u,v,w,x,z,A,B,C,D,E,F,G,H,I;D=0,x=c;do{e[a[b+D]]++,D++,x--}while(0!==x);if(e[0]==c)return m[0]=-1,o[0]=0,h;for(B=o[0],z=1;z<=y&&0===e[z];z++);for(A=z,B<z&&(B=z),x=y;0!==x&&0===e[x];x--);for(v=x,B>x&&(B=x),o[0]=B,H=1<<z;z<x;z++,H<<=1)if((H-=e[z])<0)return l;if((H-=e[x])<0)return l;for(e[x]+=H,i[1]=z=0,D=1,G=2;0!=--x;)i[G]=z+=e[D],G++,D++;x=0,D=0;do{0!==(z=a[b+D])&&(s[i[z]++]=x),D++}while(++x<c);for(c=i[v],i[0]=x=0,D=0,w=-1,F=-B,g[0]=0,E=0,I=0;A<=v;A++)for(t=e[A];0!=t--;){for(;A>F+B;){if(w++,F+=B,I=v-F,I=I>B?B:I,(u=1<<(z=A-F))>t+1&&(u-=t+1,G=A,z<I))for(;++z<I&&!((u<<=1)<=e[++G]);)u-=e[G];if(I=1<<z,r[0]+I>p)return l;g[w]=E=r[0],r[0]+=I,0!==w?(i[w]=x,f[0]=z,f[1]=B,z=x>>>F-B,f[2]=E-g[w-1]-z,q.set(f,3*(g[w-1]+z))):m[0]=E}for(f[1]=A-F,D>=c?f[0]=192:s[D]<d?(f[0]=s[D]<256?0:96,f[2]=s[D++]):(f[0]=k[s[D]-d]+16+64,f[2]=j[s[D++]-d]),u=1<<A-F,z=x>>>F;z<I;z+=u)q.set(f,3*(E+z));for(z=1<<A-1;0!=(x&z);z>>>=1)x^=z;for(x^=z,C=(1<<F)-1;(x&C)!=i[w];)w--,F-=B,C=(1<<F)-1}return 0!==H&&1!=v?n:h}function b(a){var b;for(c||(c=[],d=[],e=new Int32Array(y+1),f=[],g=new Int32Array(y),i=new Int32Array(y+1)),d.length<a&&(d=[]),b=0;b<a;b++)d[b]=0;for(b=0;b<y+1;b++)e[b]=0;for(b=0;b<3;b++)f[b]=0;g.set(e.subarray(0,y),0),i.set(e.subarray(0,y+1),0)}var c,d,e,f,g,i,j=this;j.inflate_trees_bits=function(e,f,g,h,i){var j;return b(19),c[0]=0,j=a(e,0,19,19,null,null,g,f,h,c,d),j==l?i.msg="oversubscribed dynamic bit lengths tree":j!=n&&0!==f[0]||(i.msg="incomplete dynamic bit lengths tree",j=l),j},j.inflate_trees_dynamic=function(e,f,g,i,j,k,o,p,q){var r;return b(288),c[0]=0,(r=a(g,0,e,257,u,v,k,i,p,c,d))!=h||0===i[0]?(r==l?q.msg="oversubscribed literal/length tree":r!=m&&(q.msg="incomplete literal/length tree",r=l),r):(b(288),r=a(g,e,f,0,w,x,o,j,p,c,d),r!=h||0===j[0]&&e>257?(r==l?q.msg="oversubscribed distance tree":r==n?(q.msg="incomplete distance tree",r=l):r!=m&&(q.msg="empty distance tree with lengths",r=l),r):h)}}function c(){function a(a,b,c,d,e,f,g,j){var k,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B;s=j.next_in_index,t=j.avail_in,q=g.bitb,r=g.bitk,u=g.write,v=u<g.read?g.read-u-1:g.end-u,w=o[a],x=o[b];do{for(;r<20;)t--,q|=(255&j.read_byte(s++))<<r,r+=8;if(k=q&w,m=c,n=d,B=3*(n+k),0!==(p=m[B]))for(;;){if(q>>=m[B+1],r-=m[B+1],0!=(16&p)){for(p&=15,y=m[B+2]+(q&o[p]),q>>=p,r-=p;r<15;)t--,q|=(255&j.read_byte(s++))<<r,r+=8;for(k=q&x,m=e,n=f,B=3*(n+k),p=m[B];;){if(q>>=m[B+1],r-=m[B+1],0!=(16&p)){for(p&=15;r<p;)t--,q|=(255&j.read_byte(s++))<<r,r+=8;if(z=m[B+2]+(q&o[p]),q>>=p,r-=p,v-=y,u>=z)A=u-z,u-A>0&&2>u-A?(g.window[u++]=g.window[A++],g.window[u++]=g.window[A++],y-=2):(g.window.set(g.window.subarray(A,A+2),u),u+=2,A+=2,y-=2);else{A=u-z;do{A+=g.end}while(A<0);if(p=g.end-A,y>p){if(y-=p,u-A>0&&p>u-A)do{g.window[u++]=g.window[A++]}while(0!=--p);else g.window.set(g.window.subarray(A,A+p),u),u+=p,A+=p,p=0;A=0}}if(u-A>0&&y>u-A)do{g.window[u++]=g.window[A++]}while(0!=--y);else g.window.set(g.window.subarray(A,A+y),u),u+=y,A+=y,y=0;break}if(0!=(64&p))return j.msg="invalid distance code",y=j.avail_in-t,y=r>>3<y?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,j.avail_in=t,j.total_in+=s-j.next_in_index,j.next_in_index=s,g.write=u,l;k+=m[B+2],k+=q&o[p],B=3*(n+k),p=m[B]}break}if(0!=(64&p))return 0!=(32&p)?(y=j.avail_in-t,y=r>>3<y?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,j.avail_in=t,j.total_in+=s-j.next_in_index,j.next_in_index=s,g.write=u,i):(j.msg="invalid literal/length code",y=j.avail_in-t,y=r>>3<y?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,j.avail_in=t,j.total_in+=s-j.next_in_index,j.next_in_index=s,g.write=u,l);if(k+=m[B+2],k+=q&o[p],B=3*(n+k),0===(p=m[B])){q>>=m[B+1],r-=m[B+1],g.window[u++]=m[B+2],v--;break}}else q>>=m[B+1],r-=m[B+1],g.window[u++]=m[B+2],v--}while(v>=258&&t>=10);return y=j.avail_in-t,y=r>>3<y?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,j.avail_in=t,j.total_in+=s-j.next_in_index,j.next_in_index=s,g.write=u,h}var b,c,d,e,f=this,g=0,j=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0;f.init=function(a,f,g,h,i,j){b=z,r=a,s=f,d=g,t=h,e=i,u=j,c=null},f.proc=function(f,v,w){var x,y,J,K,L,M,N,O=0,P=0,Q=0;for(Q=v.next_in_index,K=v.avail_in,O=f.bitb,P=f.bitk,L=f.write,M=L<f.read?f.read-L-1:f.end-L;;)switch(b){case z:if(M>=258&&K>=10&&(f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,w=a(r,s,d,t,e,u,f,v),Q=v.next_in_index,K=v.avail_in,O=f.bitb,P=f.bitk,L=f.write,M=L<f.read?f.read-L-1:f.end-L,w!=h)){b=w==i?G:I;break}m=r,c=d,j=t,b=A;case A:for(x=m;P<x;){if(0===K)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,K--,O|=(255&v.read_byte(Q++))<<P,P+=8}if(y=3*(j+(O&o[x])),O>>>=c[y+1],P-=c[y+1],0===(J=c[y])){n=c[y+2],b=F;break}if(0!=(16&J)){p=15&J,g=c[y+2],b=B;break}if(0==(64&J)){m=J,j=y/3+c[y+2];break}if(0!=(32&J)){b=G;break}return b=I,v.msg="invalid literal/length code",w=l,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);case B:for(x=p;P<x;){if(0===K)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,K--,O|=(255&v.read_byte(Q++))<<P,P+=8}g+=O&o[x],O>>=x,P-=x,m=s,c=e,j=u,b=C;case C:for(x=m;P<x;){if(0===K)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,K--,O|=(255&v.read_byte(Q++))<<P,P+=8}if(y=3*(j+(O&o[x])),O>>=c[y+1],P-=c[y+1],0!=(16&(J=c[y]))){p=15&J,q=c[y+2],b=D;break}if(0==(64&J)){m=J,j=y/3+c[y+2];break}return b=I,v.msg="invalid distance code",w=l,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);case D:for(x=p;P<x;){if(0===K)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,K--,O|=(255&v.read_byte(Q++))<<P,P+=8}q+=O&o[x],O>>=x,P-=x,b=E;case E:for(N=L-q;N<0;)N+=f.end;for(;0!==g;){if(0===M&&(L==f.end&&0!==f.read&&(L=0,M=L<f.read?f.read-L-1:f.end-L),0===M&&(f.write=L,w=f.inflate_flush(v,w),L=f.write,M=L<f.read?f.read-L-1:f.end-L,L==f.end&&0!==f.read&&(L=0,M=L<f.read?f.read-L-1:f.end-L),0===M)))return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);f.window[L++]=f.window[N++],M--,N==f.end&&(N=0),g--}b=z;break;case F:if(0===M&&(L==f.end&&0!==f.read&&(L=0,M=L<f.read?f.read-L-1:f.end-L),0===M&&(f.write=L,w=f.inflate_flush(v,w),L=f.write,M=L<f.read?f.read-L-1:f.end-L,L==f.end&&0!==f.read&&(L=0,M=L<f.read?f.read-L-1:f.end-L),0===M)))return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,f.window[L++]=n,M--,b=z;break;case G:if(P>7&&(P-=8,K++,Q--),f.write=L,w=f.inflate_flush(v,w),L=f.write,M=L<f.read?f.read-L-1:f.end-L,f.read!=f.write)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);b=H;case H:return w=i,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);case I:return w=l,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);default:return w=k,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w)}},f.free=function(){}}function d(a,d){var e,f=this,g=K,j=0,m=0,q=0,r=[0],s=[0],t=new c,u=0,v=new Int32Array(3*p),w=new b;f.bitk=0,f.bitb=0,f.window=new Uint8Array(d),f.end=d,f.read=0,f.write=0,f.reset=function(a,b){b&&(b[0]=0),g==Q&&t.free(a),g=K,f.bitk=0,f.bitb=0,f.read=f.write=0},f.reset(a,null),f.inflate_flush=function(a,b){var c,d,e;return d=a.next_out_index,e=f.read,c=(e<=f.write?f.write:f.end)-e,c>a.avail_out&&(c=a.avail_out),0!==c&&b==n&&(b=h),a.avail_out-=c,a.total_out+=c,a.next_out.set(f.window.subarray(e,e+c),d),d+=c,e+=c,e==f.end&&(e=0,f.write==f.end&&(f.write=0),c=f.write-e,c>a.avail_out&&(c=a.avail_out),0!==c&&b==n&&(b=h),a.avail_out-=c,a.total_out+=c,a.next_out.set(f.window.subarray(e,e+c),d),d+=c,e+=c),a.next_out_index=d,f.read=e,b},f.proc=function(a,c){var d,n,p,x,y,z,A,B;for(x=a.next_in_index,y=a.avail_in,n=f.bitb,p=f.bitk,z=f.write,A=z<f.read?f.read-z-1:f.end-z;;)switch(g){case K:for(;p<3;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}switch(d=7&n,u=1&d,d>>>1){case 0:n>>>=3,p-=3,d=7&p,n>>>=d,p-=d,g=L;break;case 1:var C=[],D=[],E=[[]],F=[[]];b.inflate_trees_fixed(C,D,E,F),t.init(C[0],D[0],E[0],0,F[0],0),n>>>=3,p-=3,g=Q;break;case 2:n>>>=3,p-=3,g=N;break;case 3:return n>>>=3,p-=3,g=T,a.msg="invalid block type",c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c)}break;case L:for(;p<32;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}if((~n>>>16&65535)!=(65535&n))return g=T,a.msg="invalid stored block lengths",c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);j=65535&n,n=p=0,g=0!==j?M:0!==u?R:K;break;case M:if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);if(0===A&&(z==f.end&&0!==f.read&&(z=0,A=z<f.read?f.read-z-1:f.end-z),0===A&&(f.write=z,c=f.inflate_flush(a,c),z=f.write,A=z<f.read?f.read-z-1:f.end-z,z==f.end&&0!==f.read&&(z=0,A=z<f.read?f.read-z-1:f.end-z),0===A)))return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);if(c=h,d=j,d>y&&(d=y),d>A&&(d=A),f.window.set(a.read_buf(x,d),z),x+=d,y-=d,z+=d,A-=d,0!=(j-=d))break;g=0!==u?R:K;break;case N:for(;p<14;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}if(m=d=16383&n,(31&d)>29||(d>>5&31)>29)return g=T,a.msg="too many length or distance symbols",c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);if(d=258+(31&d)+(d>>5&31),!e||e.length<d)e=[];else for(B=0;B<d;B++)e[B]=0;n>>>=14,p-=14,q=0,g=O;case O:for(;q<4+(m>>>10);){for(;p<3;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}e[J[q++]]=7&n,n>>>=3,p-=3}for(;q<19;)e[J[q++]]=0;if(r[0]=7,(d=w.inflate_trees_bits(e,r,s,v,a))!=h)return c=d,c==l&&(e=null,g=T),f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);q=0,g=P;case P:for(;;){if(d=m,q>=258+(31&d)+(d>>5&31))break;var G,H;for(d=r[0];p<d;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}if(d=v[3*(s[0]+(n&o[d]))+1],(H=v[3*(s[0]+(n&o[d]))+2])<16)n>>>=d,p-=d,e[q++]=H;else{for(B=18==H?7:H-14,G=18==H?11:3;p<d+B;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}if(n>>>=d,p-=d,G+=n&o[B],n>>>=B,p-=B,B=q,d=m,B+G>258+(31&d)+(d>>5&31)||16==H&&B<1)return e=null,g=T,a.msg="invalid bit length repeat",c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);H=16==H?e[B-1]:0;do{e[B++]=H}while(0!=--G);q=B}}s[0]=-1;var I=[],U=[],V=[],W=[];if(I[0]=9,U[0]=6,d=m,(d=w.inflate_trees_dynamic(257+(31&d),1+(d>>5&31),e,I,U,V,W,v,a))!=h)return d==l&&(e=null,g=T),c=d,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);t.init(I[0],U[0],v,V[0],v,W[0]),g=Q;case Q:if(f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,(c=t.proc(f,a,c))!=i)return f.inflate_flush(a,c);if(c=h,t.free(a),x=a.next_in_index,y=a.avail_in,n=f.bitb,p=f.bitk,z=f.write,A=z<f.read?f.read-z-1:f.end-z,0===u){g=K;break}g=R;case R:if(f.write=z,c=f.inflate_flush(a,c),z=f.write,A=z<f.read?f.read-z-1:f.end-z,f.read!=f.write)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);g=S;case S:return c=i,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);case T:return c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);default:return c=k,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c)}},f.free=function(a){f.reset(a,null),f.window=null,v=null},f.set_dictionary=function(a,b,c){f.window.set(a.subarray(b,b+c),0),f.read=f.write=c},f.sync_point=function(){return g==L?1:0}}function e(){function a(a){return a&&a.istate?(a.total_in=a.total_out=0,a.msg=null,a.istate.mode=ba,a.istate.blocks.reset(a,null),h):k}var b=this;b.mode=0,b.method=0,b.was=[0],b.need=0,b.marker=0,b.wbits=0,b.inflateEnd=function(a){return b.blocks&&b.blocks.free(a),b.blocks=null,h},b.inflateInit=function(c,e){return c.msg=null,b.blocks=null,e<8||e>15?(b.inflateEnd(c),k):(b.wbits=e,c.istate.blocks=new d(c,1<<e),a(c),h)},b.inflate=function(a,b){var c,d;if(!a||!a.istate||!a.next_in)return k;for(b=b==r?n:h,c=n;;)switch(a.istate.mode){case W:if(0===a.avail_in)return c;if(c=b,a.avail_in--,a.total_in++,(15&(a.istate.method=a.read_byte(a.next_in_index++)))!=V){a.istate.mode=da,a.msg="unknown compression method",a.istate.marker=5;break}if(8+(a.istate.method>>4)>a.istate.wbits){a.istate.mode=da,a.msg="invalid window size",a.istate.marker=5;break}a.istate.mode=X;case X:if(0===a.avail_in)return c;if(c=b,a.avail_in--,a.total_in++,d=255&a.read_byte(a.next_in_index++),((a.istate.method<<8)+d)%31!=0){a.istate.mode=da,a.msg="incorrect header check",a.istate.marker=5;break}if(0==(d&U)){a.istate.mode=ba;break}a.istate.mode=Y;case Y:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need=(255&a.read_byte(a.next_in_index++))<<24&4278190080,a.istate.mode=Z;case Z:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need+=(255&a.read_byte(a.next_in_index++))<<16&16711680,a.istate.mode=$;case $:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need+=(255&a.read_byte(a.next_in_index++))<<8&65280,a.istate.mode=_;case _:return 0===a.avail_in?c:(c=b,a.avail_in--,a.total_in++,a.istate.need+=255&a.read_byte(a.next_in_index++),a.istate.mode=aa,j);case aa:return a.istate.mode=da,a.msg="need dictionary",a.istate.marker=0,k;case ba:if((c=a.istate.blocks.proc(a,c))==l){a.istate.mode=da,a.istate.marker=0;break}if(c==h&&(c=b),c!=i)return c;c=b,a.istate.blocks.reset(a,a.istate.was),a.istate.mode=ca;case ca:return i;case da:return l;default:return k}},b.inflateSetDictionary=function(a,b,c){var d=0,e=c;return a&&a.istate&&a.istate.mode==aa?(e>=1<<a.istate.wbits&&(e=(1<<a.istate.wbits)-1,d=c-e),a.istate.blocks.set_dictionary(b,d,e),a.istate.mode=ba,h):k},b.inflateSync=function(b){var c,d,e,f,g;if(!b||!b.istate)return k;if(b.istate.mode!=da&&(b.istate.mode=da,b.istate.marker=0),0===(c=b.avail_in))return n;for(d=b.next_in_index,e=b.istate.marker;0!==c&&e<4;)b.read_byte(d)==ea[e]?e++:e=0!==b.read_byte(d)?0:4-e,d++,c--;return b.total_in+=d-b.next_in_index,b.next_in_index=d,b.avail_in=c,b.istate.marker=e,4!=e?l:(f=b.total_in,g=b.total_out,a(b),b.total_in=f,b.total_out=g,b.istate.mode=ba,h)},b.inflateSyncPoint=function(a){return a&&a.istate&&a.istate.blocks?a.istate.blocks.sync_point():k}}function f(){}function g(){var a=this,b=new f,c=q,d=new Uint8Array(512),e=!1;b.inflateInit(),b.next_out=d,a.append=function(a,f){var g,j,k=[],l=0,m=0,o=0;if(0!==a.length){b.next_in_index=0,b.next_in=a,b.avail_in=a.length;do{if(b.next_out_index=0,b.avail_out=512,0!==b.avail_in||e||(b.next_in_index=0,e=!0),g=b.inflate(c),e&&g===n){if(0!==b.avail_in)throw new Error("inflating: bad input")}else if(g!==h&&g!==i)throw new Error("inflating: "+b.msg);if((e||g===i)&&b.avail_in===a.length)throw new Error("inflating: bad input");b.next_out_index&&(512===b.next_out_index?k.push(new Uint8Array(d)):k.push(new Uint8Array(d.subarray(0,b.next_out_index)))),o+=b.next_out_index,f&&b.next_in_index>0&&b.next_in_index!=l&&(f(b.next_in_index),l=b.next_in_index)}while(b.avail_in>0||0===b.avail_out);return j=new Uint8Array(o),k.forEach(function(a){j.set(a,m),m+=a.length}),j}},a.flush=function(){b.inflateEnd()}}
var h=0,i=1,j=2,k=-2,l=-3,m=-4,n=-5,o=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],p=1440,q=0,r=4,s=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],t=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],u=[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],v=[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,112,112],w=[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],x=[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],y=15;b.inflate_trees_fixed=function(a,b,c,d){return a[0]=9,b[0]=5,c[0]=s,d[0]=t,h};var z=0,A=1,B=2,C=3,D=4,E=5,F=6,G=7,H=8,I=9,J=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],K=0,L=1,M=2,N=3,O=4,P=5,Q=6,R=7,S=8,T=9,U=32,V=8,W=0,X=1,Y=2,Z=3,$=4,_=5,aa=6,ba=7,ca=12,da=13,ea=[0,0,255,255];f.prototype={inflateInit:function(a){var b=this;return b.istate=new e,a||(a=15),b.istate.inflateInit(b,a)},inflate:function(a){var b=this;return b.istate?b.istate.inflate(b,a):k},inflateEnd:function(){var a=this;if(!a.istate)return k;var b=a.istate.inflateEnd(a);return a.istate=null,b},inflateSync:function(){var a=this;return a.istate?a.istate.inflateSync(a):k},inflateSetDictionary:function(a,b){var c=this;return c.istate?c.istate.inflateSetDictionary(c,a,b):k},read_byte:function(a){return this.next_in.subarray(a,a+1)[0]},read_buf:function(a,b){return this.next_in.subarray(a,a+b)}};var fa=a.zip||a;fa.Inflater=fa._jzlib_Inflater=g}(this),function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.perfCascadeFileReader=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";function d(a,b,c,d){function e(a){try{c(null,JSON.parse(a).log)}catch(a){c(a)}}if(!a)return c(new Error("Failed to load HAR file"));var f=b.match(/\.[0-9a-z]+$/i)[0];if([".zhar",".zip"].indexOf(f)!==-1)zip.createReader(new zip.BlobReader(a),function(a){a.getEntries(function(b){b[0].getData(new zip.TextWriter,function(b){e(b),a.close()},d)})});else{var g=new FileReader;g.addEventListener("load",function(a){e(a.target.result)}),g.readAsText(a)}}Object.defineProperty(c,"__esModule",{value:!0}),zip.useWebWorkers=!1,c.readFile=d},{}]},{},[1])(1)});
/*! github.com/micmro/PerfCascade Version:2.0.0 (06/05/2017) */
!function(a){"use strict";function b(){this.crc=-1}function c(){}function d(a,b,c){if(b<0||c<0||b+c>a.size)throw new RangeError("offset:"+b+", length:"+c+", size:"+a.size);return a.slice?a.slice(b,b+c):a.webkitSlice?a.webkitSlice(b,b+c):a.mozSlice?a.mozSlice(b,b+c):a.msSlice?a.msSlice(b,b+c):void 0}function e(a,b){var c,d;return c=new ArrayBuffer(a),d=new Uint8Array(c),b&&d.set(b,0),{buffer:c,array:d,view:new DataView(c)}}function f(){}function g(a){function b(b,c){var f=new Blob([a],{type:P});d=new i(f),d.init(function(){e.size=d.size,b()},c)}function c(a,b,c,e){d.readUint8Array(a,b,c,e)}var d,e=this;e.size=0,e.init=b,e.readUint8Array=c}function h(b){function c(a){for(var c=b.length;"="==b.charAt(c-1);)c--;f=b.indexOf(",")+1,g.size=Math.floor(.75*(c-f)),a()}function d(c,d,g){var h,i=e(d),j=4*Math.floor(c/3),k=4*Math.ceil((c+d)/3),l=a.atob(b.substring(j+f,k+f)),m=c-3*Math.floor(j/4);for(h=m;h<m+d;h++)i.array[h-m]=l.charCodeAt(h);g(i.array)}var f,g=this;g.size=0,g.init=c,g.readUint8Array=d}function i(a){function b(b){e.size=a.size,b()}function c(b,c,e,f){var g=new FileReader;g.onload=function(a){e(new Uint8Array(a.target.result))},g.onerror=f;try{g.readAsArrayBuffer(d(a,b,c))}catch(a){f(a)}}var e=this;e.size=0,e.init=b,e.readUint8Array=c}function j(){}function k(a){function b(a){e=new Blob([],{type:P}),a()}function c(a,b){e=new Blob([e,E?a:a.buffer],{type:P}),b()}function d(b,c){var d=new FileReader;d.onload=function(a){b(a.target.result)},d.onerror=c,d.readAsText(e,a)}var e,f=this;f.init=b,f.writeUint8Array=c,f.getData=d}function l(b){function c(a){g+="data:"+(b||"")+";base64,",a()}function d(b,c){var d,e=h.length,f=h;for(h="",d=0;d<3*Math.floor((e+b.length)/3)-e;d++)f+=String.fromCharCode(b[d]);for(;d<b.length;d++)h+=String.fromCharCode(b[d]);f.length>2?g+=a.btoa(f):h=f,c()}function e(b){b(g+a.btoa(h))}var f=this,g="",h="";f.init=c,f.writeUint8Array=d,f.getData=e}function m(a){function b(b){e=new Blob([],{type:a}),b()}function c(b,c){e=new Blob([e,E?b:b.buffer],{type:a}),c()}function d(a){a(e)}var e,f=this;f.init=b,f.writeUint8Array=c,f.getData=d}function n(a,b,c,d,e,f,g,h,i,j){function k(){a.removeEventListener("message",l,!1),h(o,p)}function l(b){var c=b.data,e=c.data,h=c.error;if(h)return h.toString=function(){return"Error: "+this.message},void i(h);if(c.sn===r)switch("number"==typeof c.codecTime&&(a.codecTime+=c.codecTime),"number"==typeof c.crcTime&&(a.crcTime+=c.crcTime),c.type){case"append":e?(o+=e.length,d.writeUint8Array(e,function(){m()},j)):m();break;case"flush":p=c.crc,e?(o+=e.length,d.writeUint8Array(e,function(){k()},j)):k();break;case"progress":g&&g(n+c.loaded,f);break;case"importScripts":case"newTask":case"echo":break;default:console.warn("zip.js:launchWorkerProcess: unknown message: ",c)}}function m(){n=q*O,n<=f?c.readUint8Array(e+n,Math.min(O,f-n),function(c){g&&g(n,f);var d=0===n?b:{sn:r};d.type="append",d.data=c;try{a.postMessage(d,[c.buffer])}catch(b){a.postMessage(d)}q++},i):a.postMessage({sn:r,type:"flush"})}var n,o,p,q=0,r=b.sn;o=0,a.addEventListener("message",l,!1),m()}function o(a,c,d,e,f,g,h,i,j,k){function l(){var b;if((m=n*O)<f)c.readUint8Array(e+m,Math.min(O,f-m),function(b){var c;try{c=a.append(b,function(a){h&&h(m+a,f)})}catch(a){return void j(a)}c?(o+=c.length,d.writeUint8Array(c,function(){n++,setTimeout(l,1)},k),q&&r.append(c)):(n++,setTimeout(l,1)),p&&r.append(b),h&&h(m,f)},j);else{try{b=a.flush()}catch(a){return void j(a)}b?(q&&r.append(b),o+=b.length,d.writeUint8Array(b,function(){i(o,r.get())},k)):i(o,r.get())}}var m,n=0,o=0,p="input"===g,q="output"===g,r=new b;l()}function p(b,c,d,e,f,g,h,i,j,k,l){var m=h?"output":"none";if(a.zip.useWebWorkers){n(b,{sn:c,codecClass:"Inflater",crcType:m},d,e,f,g,j,i,k,l)}else o(new a.zip.Inflater,d,e,f,g,m,j,i,k,l)}function q(b,c,d,e,f,g,h,i,j){if(a.zip.useWebWorkers){n(b,{sn:c,options:{level:f},codecClass:"Deflater",crcType:"input"},d,e,0,d.size,h,g,i,j)}else o(new a.zip.Deflater,d,e,0,d.size,"input",h,g,i,j)}function r(b,d,e,f,g,h,i,j,k,l,m){if(a.zip.useWebWorkers&&i){n(b,{sn:d,codecClass:"NOOP",crcType:"input"},e,f,g,h,k,j,l,m)}else o(new c,e,f,g,h,"input",k,j,l,m)}function s(a){var b,c,d="",e=["Ç","ü","é","â","ä","à","å","ç","ê","ë","è","ï","î","ì","Ä","Å","É","æ","Æ","ô","ö","ò","û","ù","ÿ","Ö","Ü","ø","£","Ø","×","ƒ","á","í","ó","ú","ñ","Ñ","ª","º","¿","®","¬","½","¼","¡","«","»","_","_","_","¦","¦","Á","Â","À","©","¦","¦","+","+","¢","¥","+","+","-","-","+","-","+","ã","Ã","+","+","-","-","¦","-","+","¤","ð","Ð","Ê","Ë","È","i","Í","Î","Ï","+","+","_","_","¦","Ì","_","Ó","ß","Ô","Ò","õ","Õ","µ","þ","Þ","Ú","Û","Ù","ý","Ý","¯","´","­","±","_","¾","¶","§","÷","¸","°","¨","·","¹","³","²","_"," "];for(b=0;b<a.length;b++)c=255&a.charCodeAt(b),d+=c>127?e[c-128]:String.fromCharCode(c);return d}function t(a){return decodeURIComponent(escape(a))}function u(a){var b,c="";for(b=0;b<a.length;b++)c+=String.fromCharCode(a[b]);return c}function v(a){var b=(4294901760&a)>>16,c=65535&a;try{return new Date(1980+((65024&b)>>9),((480&b)>>5)-1,31&b,(63488&c)>>11,(2016&c)>>5,2*(31&c),0)}catch(a){}}function w(a,b,c,d,e){return a.version=b.view.getUint16(c,!0),a.bitFlag=b.view.getUint16(c+2,!0),a.compressionMethod=b.view.getUint16(c+4,!0),a.lastModDateRaw=b.view.getUint32(c+6,!0),a.lastModDate=v(a.lastModDateRaw),1==(1&a.bitFlag)?void e(H):((d||8!=(8&a.bitFlag))&&(a.crc32=b.view.getUint32(c+10,!0),a.compressedSize=b.view.getUint32(c+14,!0),a.uncompressedSize=b.view.getUint32(c+18,!0)),4294967295===a.compressedSize||4294967295===a.uncompressedSize?void e(I):(a.filenameLength=b.view.getUint16(c+22,!0),void(a.extraFieldLength=b.view.getUint16(c+24,!0))))}function x(b,c,d){function f(){}function g(a){function c(c,f){b.readUint8Array(b.size-c,c,function(b){for(var c=b.length-e;c>=0;c--)if(80===b[c]&&75===b[c+1]&&5===b[c+2]&&6===b[c+3])return void a(new DataView(b.buffer,c,e));f()},function(){d(J)})}var e=22;if(b.size<e)return void d(F);var f=e+65536;c(e,function(){c(Math.min(f,b.size),function(){d(F)})})}var h=0;f.prototype.getData=function(a,c,f,g){function i(a){var b=e(4);return b.view.setUint32(0,a),m.crc32==b.view.getUint32(0)}function j(b,e){g&&!i(e)?d(G):a.getData(function(a){c(a)})}function k(a){d(a||M)}function l(a){d(a||L)}var m=this;b.readUint8Array(m.offset,30,function(c){var i,n=e(c.length,c);if(1347093252!=n.view.getUint32(0))return void d(F);w(m,n,4,!1,d),i=m.offset+30+m.filenameLength+m.extraFieldLength,a.init(function(){0===m.compressionMethod?r(m._worker,h++,b,a,i,m.compressedSize,g,j,f,k,l):p(m._worker,h++,b,a,i,m.compressedSize,g,j,f,k,l)},l)},k)};var i={getEntries:function(a){var c=this._worker;g(function(g){var h,i;if(h=g.getUint32(16,!0),i=g.getUint16(8,!0),h<0||h>=b.size)return void d(F);b.readUint8Array(h,b.size-h,function(b){var g,h,j,k,l=0,m=[],n=e(b.length,b);for(g=0;g<i;g++){if(h=new f,h._worker=c,1347092738!=n.view.getUint32(l))return void d(F);w(h,n,l+6,!0,d),h.commentLength=n.view.getUint16(l+32,!0),h.directory=16==(16&n.view.getUint8(l+38)),h.offset=n.view.getUint32(l+42,!0),j=u(n.array.subarray(l+46,l+46+h.filenameLength)),h.filename=2048==(2048&h.bitFlag)?t(j):s(j),h.directory||"/"!=h.filename.charAt(h.filename.length-1)||(h.directory=!0),k=u(n.array.subarray(l+46+h.filenameLength+h.extraFieldLength,l+46+h.filenameLength+h.extraFieldLength+h.commentLength)),h.comment=2048==(2048&h.bitFlag)?t(k):s(k),m.push(h),l+=46+h.filenameLength+h.extraFieldLength+h.commentLength}a(m)},function(){d(J)})})},close:function(a){this._worker&&(this._worker.terminate(),this._worker=null),a&&a()},_worker:null};a.zip.useWebWorkers?C("inflater",function(a){i._worker=a,c(i)},function(a){d(a)}):c(i)}function y(a){return unescape(encodeURIComponent(a))}function z(a){var b,c=[];for(b=0;b<a.length;b++)c.push(a.charCodeAt(b));return c}function A(b,c,d,f){function g(a){d(a||K)}function h(a){d(a||M)}var i={},j=[],k=0,l=0,m={add:function(a,c,m,n,o){function p(c){var d;w=o.lastModDate||new Date,u=e(26),i[a]={headerArray:u.array,directory:o.directory,filename:v,offset:k,comment:z(y(o.comment||""))},u.view.setUint32(0,335546376),o.version&&u.view.setUint8(0,o.version),f||0===o.level||o.directory||u.view.setUint16(4,2048),u.view.setUint16(6,(w.getHours()<<6|w.getMinutes())<<5|w.getSeconds()/2,!0),u.view.setUint16(8,(w.getFullYear()-1980<<4|w.getMonth()+1)<<5|w.getDate(),!0),u.view.setUint16(22,v.length,!0),d=e(30+v.length),d.view.setUint32(0,1347093252),d.array.set(u.array,4),d.array.set(v,30),k+=d.array.length,b.writeUint8Array(d.array,c,g)}function s(a,d){var f=e(16);k+=a||0,f.view.setUint32(0,1347094280),void 0!==d&&(u.view.setUint32(10,d,!0),f.view.setUint32(4,d,!0)),c&&(f.view.setUint32(8,a,!0),u.view.setUint32(14,a,!0),f.view.setUint32(12,c.size,!0),u.view.setUint32(18,c.size,!0)),b.writeUint8Array(f.array,function(){k+=16,m()},g)}function t(){if(o=o||{},a=a.trim(),o.directory&&"/"!=a.charAt(a.length-1)&&(a+="/"),i.hasOwnProperty(a))return void d(N);v=z(y(a)),j.push(a),p(function(){c?f||0===o.level?r(x,l++,c,b,0,c.size,!0,s,n,h,g):q(x,l++,c,b,o.level,s,n,h,g):s()},g)}var u,v,w,x=this._worker;c?c.init(t,h):t()},close:function(a){this._worker&&(this._worker.terminate(),this._worker=null);var c,d,f,h=0,l=0;for(d=0;d<j.length;d++)f=i[j[d]],h+=46+f.filename.length+f.comment.length;for(c=e(h+22),d=0;d<j.length;d++)f=i[j[d]],c.view.setUint32(l,1347092738),c.view.setUint16(l+4,5120),c.array.set(f.headerArray,l+6),c.view.setUint16(l+32,f.comment.length,!0),f.directory&&c.view.setUint8(l+38,16),c.view.setUint32(l+42,f.offset,!0),c.array.set(f.filename,l+46),c.array.set(f.comment,l+46+f.filename.length),l+=46+f.filename.length+f.comment.length;c.view.setUint32(l,1347093766),c.view.setUint16(l+8,j.length,!0),c.view.setUint16(l+10,j.length,!0),c.view.setUint32(l+12,h,!0),c.view.setUint32(l+16,k,!0),b.writeUint8Array(c.array,function(){b.getData(a)},g)},_worker:null};a.zip.useWebWorkers?C("deflater",function(a){m._worker=a,c(m)},function(a){d(a)}):c(m)}function B(a){var b=document.createElement("a");return a.map(function(a){return b.href=a,b.href})}function C(b,c,d){function e(a){var b=a.data;if(b.error)return h.terminate(),void d(b.error);"importScripts"===b.type&&(h.removeEventListener("message",e),h.removeEventListener("error",f),c(h))}function f(a){h.terminate(),d(a)}if(null!==a.zip.workerScripts&&null!==a.zip.workerScriptsPath)return void d(new Error("Either zip.workerScripts or zip.workerScriptsPath may be set, not both."));var g;if(a.zip.workerScripts){if(g=a.zip.workerScripts[b],!Array.isArray(g))return void d(new Error("zip.workerScripts."+b+" is not an array!"));g=B(g)}else g=Q[b].slice(0),g[0]=(a.zip.workerScriptsPath||"")+g[0];var h=new Worker(g[0]);h.codecTime=h.crcTime=0,h.postMessage({type:"importScripts",scripts:g.slice(1)}),h.addEventListener("message",e),h.addEventListener("error",f)}function D(a){console.error(a)}var E,F="File format is not recognized.",G="CRC failed.",H="File contains encrypted entry.",I="File is using Zip64 (4gb+ file size).",J="Error while reading zip file.",K="Error while writing zip file.",L="Error while writing file data.",M="Error while reading file data.",N="File already exists.",O=524288,P="text/plain";try{E=0===new Blob([new DataView(new ArrayBuffer(0))]).size}catch(a){}b.prototype.append=function(a){for(var b=0|this.crc,c=this.table,d=0,e=0|a.length;d<e;d++)b=b>>>8^c[255&(b^a[d])];this.crc=b},b.prototype.get=function(){return~this.crc},b.prototype.table=function(){var a,b,c,d=[];for(a=0;a<256;a++){for(c=a,b=0;b<8;b++)1&c?c=c>>>1^3988292384:c>>>=1;d[a]=c}return d}(),c.prototype.append=function(a,b){return a},c.prototype.flush=function(){},g.prototype=new f,g.prototype.constructor=g,h.prototype=new f,h.prototype.constructor=h,i.prototype=new f,i.prototype.constructor=i,j.prototype.getData=function(a){a(this.data)},k.prototype=new j,k.prototype.constructor=k,l.prototype=new j,l.prototype.constructor=l,m.prototype=new j,m.prototype.constructor=m;var Q={deflater:["z-worker.js","deflate.js"],inflater:["z-worker.js","inflate.js"]};a.zip={Reader:f,Writer:j,BlobReader:i,Data64URIReader:h,TextReader:g,BlobWriter:m,Data64URIWriter:l,TextWriter:k,createReader:function(a,b,c){c=c||D,a.init(function(){x(a,b,c)},c)},createWriter:function(a,b,c,d){c=c||D,d=!!d,a.init(function(){A(a,b,c,d)},c)},useWebWorkers:!0,workerScriptsPath:null,workerScripts:null}}(this),function(a){"use strict";function b(){function a(a,b,c,d,j,k,m,o,q,r,s){var t,u,v,w,x,z,A,B,C,D,E,F,G,H,I;D=0,x=c;do{e[a[b+D]]++,D++,x--}while(0!==x);if(e[0]==c)return m[0]=-1,o[0]=0,h;for(B=o[0],z=1;z<=y&&0===e[z];z++);for(A=z,B<z&&(B=z),x=y;0!==x&&0===e[x];x--);for(v=x,B>x&&(B=x),o[0]=B,H=1<<z;z<x;z++,H<<=1)if((H-=e[z])<0)return l;if((H-=e[x])<0)return l;for(e[x]+=H,i[1]=z=0,D=1,G=2;0!=--x;)i[G]=z+=e[D],G++,D++;x=0,D=0;do{0!==(z=a[b+D])&&(s[i[z]++]=x),D++}while(++x<c);for(c=i[v],i[0]=x=0,D=0,w=-1,F=-B,g[0]=0,E=0,I=0;A<=v;A++)for(t=e[A];0!=t--;){for(;A>F+B;){if(w++,F+=B,I=v-F,I=I>B?B:I,(u=1<<(z=A-F))>t+1&&(u-=t+1,G=A,z<I))for(;++z<I&&!((u<<=1)<=e[++G]);)u-=e[G];if(I=1<<z,r[0]+I>p)return l;g[w]=E=r[0],r[0]+=I,0!==w?(i[w]=x,f[0]=z,f[1]=B,z=x>>>F-B,f[2]=E-g[w-1]-z,q.set(f,3*(g[w-1]+z))):m[0]=E}for(f[1]=A-F,D>=c?f[0]=192:s[D]<d?(f[0]=s[D]<256?0:96,f[2]=s[D++]):(f[0]=k[s[D]-d]+16+64,f[2]=j[s[D++]-d]),u=1<<A-F,z=x>>>F;z<I;z+=u)q.set(f,3*(E+z));for(z=1<<A-1;0!=(x&z);z>>>=1)x^=z;for(x^=z,C=(1<<F)-1;(x&C)!=i[w];)w--,F-=B,C=(1<<F)-1}return 0!==H&&1!=v?n:h}function b(a){var b;for(c||(c=[],d=[],e=new Int32Array(y+1),f=[],g=new Int32Array(y),i=new Int32Array(y+1)),d.length<a&&(d=[]),b=0;b<a;b++)d[b]=0;for(b=0;b<y+1;b++)e[b]=0;for(b=0;b<3;b++)f[b]=0;g.set(e.subarray(0,y),0),i.set(e.subarray(0,y+1),0)}var c,d,e,f,g,i,j=this;j.inflate_trees_bits=function(e,f,g,h,i){var j;return b(19),c[0]=0,j=a(e,0,19,19,null,null,g,f,h,c,d),j==l?i.msg="oversubscribed dynamic bit lengths tree":j!=n&&0!==f[0]||(i.msg="incomplete dynamic bit lengths tree",j=l),j},j.inflate_trees_dynamic=function(e,f,g,i,j,k,o,p,q){var r;return b(288),c[0]=0,(r=a(g,0,e,257,u,v,k,i,p,c,d))!=h||0===i[0]?(r==l?q.msg="oversubscribed literal/length tree":r!=m&&(q.msg="incomplete literal/length tree",r=l),r):(b(288),r=a(g,e,f,0,w,x,o,j,p,c,d),r!=h||0===j[0]&&e>257?(r==l?q.msg="oversubscribed distance tree":r==n?(q.msg="incomplete distance tree",r=l):r!=m&&(q.msg="empty distance tree with lengths",r=l),r):h)}}function c(){function a(a,b,c,d,e,f,g,j){var k,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B;s=j.next_in_index,t=j.avail_in,q=g.bitb,r=g.bitk,u=g.write,v=u<g.read?g.read-u-1:g.end-u,w=o[a],x=o[b];do{for(;r<20;)t--,q|=(255&j.read_byte(s++))<<r,r+=8;if(k=q&w,m=c,n=d,B=3*(n+k),0!==(p=m[B]))for(;;){if(q>>=m[B+1],r-=m[B+1],0!=(16&p)){for(p&=15,y=m[B+2]+(q&o[p]),q>>=p,r-=p;r<15;)t--,q|=(255&j.read_byte(s++))<<r,r+=8;for(k=q&x,m=e,n=f,B=3*(n+k),p=m[B];;){if(q>>=m[B+1],r-=m[B+1],0!=(16&p)){for(p&=15;r<p;)t--,q|=(255&j.read_byte(s++))<<r,r+=8;if(z=m[B+2]+(q&o[p]),q>>=p,r-=p,v-=y,u>=z)A=u-z,u-A>0&&2>u-A?(g.window[u++]=g.window[A++],g.window[u++]=g.window[A++],y-=2):(g.window.set(g.window.subarray(A,A+2),u),u+=2,A+=2,y-=2);else{A=u-z;do{A+=g.end}while(A<0);if(p=g.end-A,y>p){if(y-=p,u-A>0&&p>u-A)do{g.window[u++]=g.window[A++]}while(0!=--p);else g.window.set(g.window.subarray(A,A+p),u),u+=p,A+=p,p=0;A=0}}if(u-A>0&&y>u-A)do{g.window[u++]=g.window[A++]}while(0!=--y);else g.window.set(g.window.subarray(A,A+y),u),u+=y,A+=y,y=0;break}if(0!=(64&p))return j.msg="invalid distance code",y=j.avail_in-t,y=r>>3<y?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,j.avail_in=t,j.total_in+=s-j.next_in_index,j.next_in_index=s,g.write=u,l;k+=m[B+2],k+=q&o[p],B=3*(n+k),p=m[B]}break}if(0!=(64&p))return 0!=(32&p)?(y=j.avail_in-t,y=r>>3<y?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,j.avail_in=t,j.total_in+=s-j.next_in_index,j.next_in_index=s,g.write=u,i):(j.msg="invalid literal/length code",y=j.avail_in-t,y=r>>3<y?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,j.avail_in=t,j.total_in+=s-j.next_in_index,j.next_in_index=s,g.write=u,l);if(k+=m[B+2],k+=q&o[p],B=3*(n+k),0===(p=m[B])){q>>=m[B+1],r-=m[B+1],g.window[u++]=m[B+2],v--;break}}else q>>=m[B+1],r-=m[B+1],g.window[u++]=m[B+2],v--}while(v>=258&&t>=10);return y=j.avail_in-t,y=r>>3<y?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,j.avail_in=t,j.total_in+=s-j.next_in_index,j.next_in_index=s,g.write=u,h}var b,c,d,e,f=this,g=0,j=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0;f.init=function(a,f,g,h,i,j){b=z,r=a,s=f,d=g,t=h,e=i,u=j,c=null},f.proc=function(f,v,w){var x,y,J,K,L,M,N,O=0,P=0,Q=0;for(Q=v.next_in_index,K=v.avail_in,O=f.bitb,P=f.bitk,L=f.write,M=L<f.read?f.read-L-1:f.end-L;;)switch(b){case z:if(M>=258&&K>=10&&(f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,w=a(r,s,d,t,e,u,f,v),Q=v.next_in_index,K=v.avail_in,O=f.bitb,P=f.bitk,L=f.write,M=L<f.read?f.read-L-1:f.end-L,w!=h)){b=w==i?G:I;break}m=r,c=d,j=t,b=A;case A:for(x=m;P<x;){if(0===K)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,K--,O|=(255&v.read_byte(Q++))<<P,P+=8}if(y=3*(j+(O&o[x])),O>>>=c[y+1],P-=c[y+1],0===(J=c[y])){n=c[y+2],b=F;break}if(0!=(16&J)){p=15&J,g=c[y+2],b=B;break}if(0==(64&J)){m=J,j=y/3+c[y+2];break}if(0!=(32&J)){b=G;break}return b=I,v.msg="invalid literal/length code",w=l,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);case B:for(x=p;P<x;){if(0===K)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,K--,O|=(255&v.read_byte(Q++))<<P,P+=8}g+=O&o[x],O>>=x,P-=x,m=s,c=e,j=u,b=C;case C:for(x=m;P<x;){if(0===K)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,K--,O|=(255&v.read_byte(Q++))<<P,P+=8}if(y=3*(j+(O&o[x])),O>>=c[y+1],P-=c[y+1],0!=(16&(J=c[y]))){p=15&J,q=c[y+2],b=D;break}if(0==(64&J)){m=J,j=y/3+c[y+2];break}return b=I,v.msg="invalid distance code",w=l,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);case D:for(x=p;P<x;){if(0===K)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,K--,O|=(255&v.read_byte(Q++))<<P,P+=8}q+=O&o[x],O>>=x,P-=x,b=E;case E:for(N=L-q;N<0;)N+=f.end;for(;0!==g;){if(0===M&&(L==f.end&&0!==f.read&&(L=0,M=L<f.read?f.read-L-1:f.end-L),0===M&&(f.write=L,w=f.inflate_flush(v,w),L=f.write,M=L<f.read?f.read-L-1:f.end-L,L==f.end&&0!==f.read&&(L=0,M=L<f.read?f.read-L-1:f.end-L),0===M)))return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);f.window[L++]=f.window[N++],M--,N==f.end&&(N=0),g--}b=z;break;case F:if(0===M&&(L==f.end&&0!==f.read&&(L=0,M=L<f.read?f.read-L-1:f.end-L),0===M&&(f.write=L,w=f.inflate_flush(v,w),L=f.write,M=L<f.read?f.read-L-1:f.end-L,L==f.end&&0!==f.read&&(L=0,M=L<f.read?f.read-L-1:f.end-L),0===M)))return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);w=h,f.window[L++]=n,M--,b=z;break;case G:if(P>7&&(P-=8,K++,Q--),f.write=L,w=f.inflate_flush(v,w),L=f.write,M=L<f.read?f.read-L-1:f.end-L,f.read!=f.write)return f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);b=H;case H:return w=i,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);case I:return w=l,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w);default:return w=k,f.bitb=O,f.bitk=P,v.avail_in=K,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=L,f.inflate_flush(v,w)}},f.free=function(){}}function d(a,d){var e,f=this,g=K,j=0,m=0,q=0,r=[0],s=[0],t=new c,u=0,v=new Int32Array(3*p),w=new b;f.bitk=0,f.bitb=0,f.window=new Uint8Array(d),f.end=d,f.read=0,f.write=0,f.reset=function(a,b){b&&(b[0]=0),g==Q&&t.free(a),g=K,f.bitk=0,f.bitb=0,f.read=f.write=0},f.reset(a,null),f.inflate_flush=function(a,b){var c,d,e;return d=a.next_out_index,e=f.read,c=(e<=f.write?f.write:f.end)-e,c>a.avail_out&&(c=a.avail_out),0!==c&&b==n&&(b=h),a.avail_out-=c,a.total_out+=c,a.next_out.set(f.window.subarray(e,e+c),d),d+=c,e+=c,e==f.end&&(e=0,f.write==f.end&&(f.write=0),c=f.write-e,c>a.avail_out&&(c=a.avail_out),0!==c&&b==n&&(b=h),a.avail_out-=c,a.total_out+=c,a.next_out.set(f.window.subarray(e,e+c),d),d+=c,e+=c),a.next_out_index=d,f.read=e,b},f.proc=function(a,c){var d,n,p,x,y,z,A,B;for(x=a.next_in_index,y=a.avail_in,n=f.bitb,p=f.bitk,z=f.write,A=z<f.read?f.read-z-1:f.end-z;;)switch(g){case K:for(;p<3;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}switch(d=7&n,u=1&d,d>>>1){case 0:n>>>=3,p-=3,d=7&p,n>>>=d,p-=d,g=L;break;case 1:var C=[],D=[],E=[[]],F=[[]];b.inflate_trees_fixed(C,D,E,F),t.init(C[0],D[0],E[0],0,F[0],0),n>>>=3,p-=3,g=Q;break;case 2:n>>>=3,p-=3,g=N;break;case 3:return n>>>=3,p-=3,g=T,a.msg="invalid block type",c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c)}break;case L:for(;p<32;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}if((~n>>>16&65535)!=(65535&n))return g=T,a.msg="invalid stored block lengths",c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);j=65535&n,n=p=0,g=0!==j?M:0!==u?R:K;break;case M:if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);if(0===A&&(z==f.end&&0!==f.read&&(z=0,A=z<f.read?f.read-z-1:f.end-z),0===A&&(f.write=z,c=f.inflate_flush(a,c),z=f.write,A=z<f.read?f.read-z-1:f.end-z,z==f.end&&0!==f.read&&(z=0,A=z<f.read?f.read-z-1:f.end-z),0===A)))return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);if(c=h,d=j,d>y&&(d=y),d>A&&(d=A),f.window.set(a.read_buf(x,d),z),x+=d,y-=d,z+=d,A-=d,0!=(j-=d))break;g=0!==u?R:K;break;case N:for(;p<14;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}if(m=d=16383&n,(31&d)>29||(d>>5&31)>29)return g=T,a.msg="too many length or distance symbols",c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);if(d=258+(31&d)+(d>>5&31),!e||e.length<d)e=[];else for(B=0;B<d;B++)e[B]=0;n>>>=14,p-=14,q=0,g=O;case O:for(;q<4+(m>>>10);){for(;p<3;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}e[J[q++]]=7&n,n>>>=3,p-=3}for(;q<19;)e[J[q++]]=0;if(r[0]=7,(d=w.inflate_trees_bits(e,r,s,v,a))!=h)return c=d,c==l&&(e=null,g=T),f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);q=0,g=P;case P:for(;;){if(d=m,q>=258+(31&d)+(d>>5&31))break;var G,H;for(d=r[0];p<d;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}if(d=v[3*(s[0]+(n&o[d]))+1],(H=v[3*(s[0]+(n&o[d]))+2])<16)n>>>=d,p-=d,e[q++]=H;else{for(B=18==H?7:H-14,G=18==H?11:3;p<d+B;){if(0===y)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);c=h,y--,n|=(255&a.read_byte(x++))<<p,p+=8}if(n>>>=d,p-=d,G+=n&o[B],n>>>=B,p-=B,B=q,d=m,B+G>258+(31&d)+(d>>5&31)||16==H&&B<1)return e=null,g=T,a.msg="invalid bit length repeat",c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);H=16==H?e[B-1]:0;do{e[B++]=H}while(0!=--G);q=B}}s[0]=-1;var I=[],U=[],V=[],W=[];if(I[0]=9,U[0]=6,d=m,(d=w.inflate_trees_dynamic(257+(31&d),1+(d>>5&31),e,I,U,V,W,v,a))!=h)return d==l&&(e=null,g=T),c=d,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);t.init(I[0],U[0],v,V[0],v,W[0]),g=Q;case Q:if(f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,(c=t.proc(f,a,c))!=i)return f.inflate_flush(a,c);if(c=h,t.free(a),x=a.next_in_index,y=a.avail_in,n=f.bitb,p=f.bitk,z=f.write,A=z<f.read?f.read-z-1:f.end-z,0===u){g=K;break}g=R;case R:if(f.write=z,c=f.inflate_flush(a,c),z=f.write,A=z<f.read?f.read-z-1:f.end-z,f.read!=f.write)return f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);g=S;case S:return c=i,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);case T:return c=l,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c);default:return c=k,f.bitb=n,f.bitk=p,a.avail_in=y,a.total_in+=x-a.next_in_index,a.next_in_index=x,f.write=z,f.inflate_flush(a,c)}},f.free=function(a){f.reset(a,null),f.window=null,v=null},f.set_dictionary=function(a,b,c){f.window.set(a.subarray(b,b+c),0),f.read=f.write=c},f.sync_point=function(){return g==L?1:0}}function e(){function a(a){return a&&a.istate?(a.total_in=a.total_out=0,a.msg=null,a.istate.mode=ba,a.istate.blocks.reset(a,null),h):k}var b=this;b.mode=0,b.method=0,b.was=[0],b.need=0,b.marker=0,b.wbits=0,b.inflateEnd=function(a){return b.blocks&&b.blocks.free(a),b.blocks=null,h},b.inflateInit=function(c,e){return c.msg=null,b.blocks=null,e<8||e>15?(b.inflateEnd(c),k):(b.wbits=e,c.istate.blocks=new d(c,1<<e),a(c),h)},b.inflate=function(a,b){var c,d;if(!a||!a.istate||!a.next_in)return k;for(b=b==r?n:h,c=n;;)switch(a.istate.mode){case W:if(0===a.avail_in)return c;if(c=b,a.avail_in--,a.total_in++,(15&(a.istate.method=a.read_byte(a.next_in_index++)))!=V){a.istate.mode=da,a.msg="unknown compression method",a.istate.marker=5;break}if(8+(a.istate.method>>4)>a.istate.wbits){a.istate.mode=da,a.msg="invalid window size",a.istate.marker=5;break}a.istate.mode=X;case X:if(0===a.avail_in)return c;if(c=b,a.avail_in--,a.total_in++,d=255&a.read_byte(a.next_in_index++),((a.istate.method<<8)+d)%31!=0){a.istate.mode=da,a.msg="incorrect header check",a.istate.marker=5;break}if(0==(d&U)){a.istate.mode=ba;break}a.istate.mode=Y;case Y:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need=(255&a.read_byte(a.next_in_index++))<<24&4278190080,a.istate.mode=Z;case Z:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need+=(255&a.read_byte(a.next_in_index++))<<16&16711680,a.istate.mode=$;case $:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need+=(255&a.read_byte(a.next_in_index++))<<8&65280,a.istate.mode=_;case _:return 0===a.avail_in?c:(c=b,a.avail_in--,a.total_in++,a.istate.need+=255&a.read_byte(a.next_in_index++),a.istate.mode=aa,j);case aa:return a.istate.mode=da,a.msg="need dictionary",a.istate.marker=0,k;case ba:if((c=a.istate.blocks.proc(a,c))==l){a.istate.mode=da,a.istate.marker=0;break}if(c==h&&(c=b),c!=i)return c;c=b,a.istate.blocks.reset(a,a.istate.was),a.istate.mode=ca;case ca:return i;case da:return l;default:return k}},b.inflateSetDictionary=function(a,b,c){var d=0,e=c;return a&&a.istate&&a.istate.mode==aa?(e>=1<<a.istate.wbits&&(e=(1<<a.istate.wbits)-1,d=c-e),a.istate.blocks.set_dictionary(b,d,e),a.istate.mode=ba,h):k},b.inflateSync=function(b){var c,d,e,f,g;if(!b||!b.istate)return k;if(b.istate.mode!=da&&(b.istate.mode=da,b.istate.marker=0),0===(c=b.avail_in))return n;for(d=b.next_in_index,e=b.istate.marker;0!==c&&e<4;)b.read_byte(d)==ea[e]?e++:e=0!==b.read_byte(d)?0:4-e,d++,c--;return b.total_in+=d-b.next_in_index,b.next_in_index=d,b.avail_in=c,b.istate.marker=e,4!=e?l:(f=b.total_in,g=b.total_out,a(b),b.total_in=f,b.total_out=g,b.istate.mode=ba,h)},b.inflateSyncPoint=function(a){return a&&a.istate&&a.istate.blocks?a.istate.blocks.sync_point():k}}function f(){}function g(){var a=this,b=new f,c=q,d=new Uint8Array(512),e=!1;b.inflateInit(),b.next_out=d,a.append=function(a,f){var g,j,k=[],l=0,m=0,o=0;if(0!==a.length){b.next_in_index=0,b.next_in=a,b.avail_in=a.length;do{if(b.next_out_index=0,b.avail_out=512,0!==b.avail_in||e||(b.next_in_index=0,e=!0),g=b.inflate(c),e&&g===n){if(0!==b.avail_in)throw new Error("inflating: bad input")}else if(g!==h&&g!==i)throw new Error("inflating: "+b.msg);if((e||g===i)&&b.avail_in===a.length)throw new Error("inflating: bad input");b.next_out_index&&(512===b.next_out_index?k.push(new Uint8Array(d)):k.push(new Uint8Array(d.subarray(0,b.next_out_index)))),o+=b.next_out_index,f&&b.next_in_index>0&&b.next_in_index!=l&&(f(b.next_in_index),l=b.next_in_index)}while(b.avail_in>0||0===b.avail_out);return j=new Uint8Array(o),k.forEach(function(a){j.set(a,m),m+=a.length}),j}},a.flush=function(){b.inflateEnd()}}
var h=0,i=1,j=2,k=-2,l=-3,m=-4,n=-5,o=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],p=1440,q=0,r=4,s=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],t=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],u=[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],v=[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,112,112],w=[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],x=[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],y=15;b.inflate_trees_fixed=function(a,b,c,d){return a[0]=9,b[0]=5,c[0]=s,d[0]=t,h};var z=0,A=1,B=2,C=3,D=4,E=5,F=6,G=7,H=8,I=9,J=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],K=0,L=1,M=2,N=3,O=4,P=5,Q=6,R=7,S=8,T=9,U=32,V=8,W=0,X=1,Y=2,Z=3,$=4,_=5,aa=6,ba=7,ca=12,da=13,ea=[0,0,255,255];f.prototype={inflateInit:function(a){var b=this;return b.istate=new e,a||(a=15),b.istate.inflateInit(b,a)},inflate:function(a){var b=this;return b.istate?b.istate.inflate(b,a):k},inflateEnd:function(){var a=this;if(!a.istate)return k;var b=a.istate.inflateEnd(a);return a.istate=null,b},inflateSync:function(){var a=this;return a.istate?a.istate.inflateSync(a):k},inflateSetDictionary:function(a,b){var c=this;return c.istate?c.istate.inflateSetDictionary(c,a,b):k},read_byte:function(a){return this.next_in.subarray(a,a+1)[0]},read_buf:function(a,b){return this.next_in.subarray(a,a+b)}};var fa=a.zip||a;fa.Inflater=fa._jzlib_Inflater=g}(this),function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.perfCascadeFileReader=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";function d(a,b,c,d){function e(a){try{var b=JSON.parse(a);c(null,b.log)}catch(a){c(a)}}if(!a)return c(new Error("Failed to load HAR file"));if(-1!==[".zhar",".zip"].indexOf(b.match(/\.[0-9a-z]+$/i)[0]))zip.createReader(new zip.BlobReader(a),function(a){a.getEntries(function(b){b[0].getData(new zip.TextWriter,function(b){e(b),a.close()},d)})});else{var f=new FileReader;f.addEventListener("load",function(a){e(a.target.result)}),f.readAsText(a)}}Object.defineProperty(c,"__esModule",{value:!0}),zip.useWebWorkers=!1,c.readFile=d},{}]},{},[1])(1)});

@@ -10,3 +10,3 @@ // use zip

try {
let harData = JSON.parse(rawData);
const harData = JSON.parse(rawData);
callback(null, harData.log);

@@ -19,3 +19,3 @@ }

/** start reading the file */
let extension = fileName.match(/\.[0-9a-z]+$/i)[0];
const extension = fileName.match(/\.[0-9a-z]+$/i)[0];
if ([".zhar", ".zip"].indexOf(extension) !== -1) {

@@ -34,3 +34,3 @@ /** zhar */

else {
let reader = new FileReader();
const reader = new FileReader();
/** try to parse the file once uploaded to browser */

@@ -37,0 +37,0 @@ reader.addEventListener("load", (e) => {

@@ -39,2 +39,16 @@ /**

/**
* Helper to recursively find parent with the `className` class
* @param base `Element` to start from
* @param className class that the parent should have
*/
export function getParentByClassName(base, className) {
if (base.parentElement === undefined) {
return undefined;
}
if (base.parentElement.classList.contains(className)) {
return base.parentElement;
}
return getParentByClassName(base.parentElement, className);
}
/**
* Removes all child DOM nodes from `el`

@@ -49,1 +63,15 @@ * @param {Element} el

}
/**
* Get last element of `NodeList`
* @param list NodeListOf e.g. return value of `getElementsByClassName`
*/
export function getLastItemOfNodeList(list) {
if (!list || list.length === 0) {
return undefined;
}
return list.item(list.length - 1);
}
// /** Calls `fn` with each element of `els` */
export function forEachNodeList(els, fn) {
Array.prototype.forEach.call(els, fn);
}

@@ -0,118 +1,107 @@

import * as svgLib from "./svg";
/**
* SVG Icons
*/
const toSvg = (x, y, title, className, scale, svgDoc) => {
const parser = new DOMParser();
const doc = parser.parseFromString(`<svg x="${x}" y="${y}" xmlns="http://www.w3.org/2000/svg">
<g class="icon ${className}" transform="scale(${scale})">
${svgDoc}
<title>${title}</title>
</g>
</svg>`, "image/svg+xml");
return doc.firstChild;
const wrapSvgIcon = (x, y, title, className, scale, svgEl) => {
const holder = svgLib.newSvg("", {
x,
y,
});
const el = svgLib.newG(`icon ${className}`, {
transform: `scale(${scale})`,
});
// el.innerHTML = svgDoc;
el.appendChild(svgEl);
el.appendChild(svgLib.newTitle(title));
holder.appendChild(el);
return holder;
};
let noTlsIconLazy;
export function noTls(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-no-tls", scale, `<path d="m 18,6.2162 0,2.7692 q 0,0.2813 -0.205529,0.4868
-0.205529,0.2055 -0.486779,0.2055 l -0.692307,0 q -0.28125,0 -0.486779,-0.2055 -0.205529,-0.2055 -0.205529,-0.4868
l 0,-2.7692 q 0,-1.1466 -0.811298,-1.9579 -0.811298,-0.8113 -1.957933,-0.8113 -1.146634,0 -1.957933,0.8113
-0.811298,0.8113 -0.811298,1.9579 l 0,2.0769 1.038462,0 q 0.432692,0 0.735577,0.3029 0.302884,0.3029
0.302884,0.7356 l 0,6.2307 q 0,0.4327 -0.302884,0.7356 -0.302885,0.3029 -0.735577,0.3029 l -10.384615,0 q
-0.432693,0 -0.735577,-0.3029 Q 0,15.995 0,15.5623 L 0,9.3316 Q 0,8.8989 0.302885,8.596 0.605769,8.2931
1.038462,8.2931 l 7.26923,0 0,-2.0769 q 0,-2.0012 1.422476,-3.4237 1.422476,-1.4225 3.423678,-1.4225 2.001202,0
3.423678,1.4225 Q 18,4.215 18,6.2162 Z" />`);
if (noTlsIconLazy === undefined) {
const d = `M18 6.216v2.77q0 .28-.206.486-.205.206-.486.206h-.693q-.28 0-.486-.206-.21-.205-.21
-.487v-2.77q0-1.145-.81-1.957-.813-.81-1.96-.81-1.146 0-1.957.81-.81.812-.81 1.958v2.077h1.037q.434
0 .737.303.302.303.302.736v6.23q0 .433-.305.736t-.737.303H1.038q-.433 0-.736-.3Q0 15.996 0
15.56V9.33q0-.433.303-.736t.735-.303h7.27V6.218q0-2 1.422-3.423 1.423-1.423 3.424-1.423 2
0 3.424 1.424Q18 4.214 18 6.216`;
noTlsIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-no-tls", scale, noTlsIconLazy.cloneNode(false));
}
let err3xxIconLazy;
export function err3xx(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-redirect", scale, `<path d="M 17,2.3333333 17,7 q 0,0.2708444 -0.19792,0.4687111
-0.197911,0.1979556 -0.468747,0.1979556 l -4.666666,0 q -0.437503,0 -0.614587,-0.4166223 -0.177084,-0.4063111
0.14584,-0.7187555 L 12.635413,5.0937778 Q 11.093751,3.6666667 9,3.6666667 q -1.0833333,0 -2.0677067,0.4218666 Q
5.94792,4.5104 5.2291644,5.2291556 4.5104178,5.9479111 4.0885422,6.9322667 3.6666667,7.9167111 3.6666667,9 q
0,1.083378 0.4218755,2.067733 0.4218756,0.984356 1.1406222,1.703111 Q 5.94792,13.4896 6.9322933,13.911467
7.9166667,14.333333 9,14.333333 q 1.239582,0 2.343751,-0.541689 1.104169,-0.5416 1.864578,-1.5312 0.07289,-0.104177
0.239591,-0.125066 0.145831,0 0.260409,0.09378 l 1.427084,1.437511 q 0.09375,0.08356 0.09896,0.213511
0.0053,0.130222 -0.07813,0.2344 -1.135413,1.375022 -2.75,2.130222 Q 10.791662,17 9,17 7.3749956,17
5.8958311,16.364622 4.4166667,15.729156 3.3437511,14.656267 2.2708356,13.583378 1.6354133,12.104178 1,10.624978 1,9
1,7.3750222 1.6354133,5.8958222 2.2708356,4.4167111 3.3437511,3.3437333 4.4166667,2.2708444 5.8958311,1.6353778
7.3749956,1 9,1 q 1.531253,0 2.963538,0.5781333 1.432293,0.5781334 2.54688,1.6302223 L 15.864587,1.8646222 Q
16.166667,1.5416889 16.593751,1.7187556 17,1.8958222 17,2.3333333 Z" />`);
if (err3xxIconLazy === undefined) {
const d = `M17 2.333V7q0 .27-.198.47-.198.197-.47.197h-4.665q-.438 0-.615-.417-.177-.406.146-.72l1.437-1.436Q11.095
3.667 9 3.667q-1.083 0-2.068.422-.984.42-1.703 1.14-.72.715-1.14 1.7-.426.984-.426 2.07 0 1.08.422 2.065.42.984
1.14 1.703.718.72 1.702 1.14.984.422 2.067.422 1.24 0 2.344-.54 1.104-.543 1.864-1.533.073-.105.24-.126.146 0
.26.095l1.427 1.436q.095.084.1.214.006.13-.08.234-1.133 1.376-2.75 2.13Q10.793 17 9 17q-1.625
0-3.104-.635-1.48-.636-2.552-1.71-1.073-1.072-1.71-2.55Q1 10.625 1 9t.635-3.104q.636-1.48 1.71-2.552
1.072-1.073 2.55-1.71Q7.375 1 9 1q1.53 0 2.964.578 1.432.578 2.546
1.63l1.355-1.343q.302-.323.73-.146.405.173.405.61z`;
err3xxIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-redirect", scale, err3xxIconLazy.cloneNode(false));
}
export function err4xx(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-4xx", scale, `<path d="m 10.141566,13.833 0,-1.6945 q 0,-0.1249 -0.08472,-0.2096
-0.084725,-0.084 -0.2006658,-0.084 l -1.7123482,0 q -0.1159402,0 -0.2006658,0.084 -0.084725,0.084 -0.084725,0.2096
l 0,1.6945 q 0,0.1248 0.084725,0.2096 0.084725,0.084 0.2006658,0.084 l 1.7123482,0 q 0.1159402,0 0.2006658,-0.084
0.08472,-0.084 0.08472,-0.2096 z m -0.01784,-3.3356 0.160533,-4.0936 q 0,-0.107 -0.08919,-0.1694 -0.115941,-0.098
-0.2140439,-0.098 l -1.9620656,0 q -0.098103,0 -0.2140436,0.098 -0.089185,0.062 -0.089185,0.1873 l 0.1516221,4.0757
q 0,0.089 0.089185,0.1472 0.089185,0.058 0.2140435,0.058 l 1.6499188,0 q 0.1248588,0 0.2095847,-0.058 0.08473,-0.058
0.09364,-0.1472 z M 9.9988702,2.1676 16.848263,14.7248 q 0.312147,0.5619 -0.01784,1.1237 -0.151614,0.2587
-0.414709,0.4103 -0.263093,0.1516 -0.566321,0.1516 l -13.6987852,0 q -0.3032283,0 -0.5663235,-0.1516 Q
1.3211891,16.1072 1.169575,15.8485 0.83959124,15.2867 1.151738,14.7248 L 8.0011307,2.1676 Q 8.1527449,1.8911
8.4202993,1.7306 8.6878537,1.57 9.0000005,1.57 q 0.3121468,0 0.5797012,0.1606 0.2675544,0.1605 0.4191685,0.437
z" />`);
return warning(x, y, title, scale);
}
export function err5xx(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-5xx", scale, `<path d="m 10.141566,13.833 0,-1.6945 q 0,-0.1249 -0.08472,-0.2096
-0.084725,-0.084 -0.2006658,-0.084 l -1.7123482,0 q -0.1159402,0 -0.2006658,0.084 -0.084725,0.084 -0.084725,0.2096 l
0,1.6945 q 0,0.1248 0.084725,0.2096 0.084725,0.084 0.2006658,0.084 l 1.7123482,0 q 0.1159402,0 0.2006658,-0.084
0.08472,-0.084 0.08472,-0.2096 z m -0.01784,-3.3356 0.160533,-4.0936 q 0,-0.107 -0.08919,-0.1694 -0.115941,-0.098
-0.2140439,-0.098 l -1.9620656,0 q -0.098103,0 -0.2140436,0.098 -0.089185,0.062 -0.089185,0.1873 l 0.1516221,4.0757
q 0,0.089 0.089185,0.1472 0.089185,0.058 0.2140435,0.058 l 1.6499188,0 q 0.1248588,0 0.2095847,-0.058 0.08473,-0.058
0.09364,-0.1472 z M 9.9988702,2.1676 16.848263,14.7248 q 0.312147,0.5619 -0.01784,1.1237 -0.151614,0.2587
-0.414709,0.4103 -0.263093,0.1516 -0.566321,0.1516 l -13.6987852,0 q -0.3032283,0 -0.5663235,-0.1516 Q
1.3211891,16.1072 1.169575,15.8485 0.83959124,15.2867 1.151738,14.7248 L 8.0011307,2.1676 Q 8.1527449,1.8911
8.4202993,1.7306 8.6878537,1.57 9.0000005,1.57 q 0.3121468,0 0.5797012,0.1606 0.2675544,0.1605 0.4191685,0.437
z" />`);
return warning(x, y, title, scale);
}
let plainIconLazy;
export function plain(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-plain", scale, `<path d="m 15.247139,4.3928381 q 0.250004,0.2500571 0.428571,0.6786286
0.178575,0.4285714 0.178575,0.7856761 l 0,10.2857142 q 0,0.357181 -0.250003,0.607162 Q 15.354285,17 14.997143,17 L
2.9971428,17 Q 2.64,17 2.3899962,16.750019 2.14,16.500038 2.14,16.142857 l 0,-14.2857142 Q 2.14,1.5000381
2.3899962,1.249981 2.64,1 2.9971428,1 l 8.0000002,0 q 0.357142,0 0.785714,0.1785905 0.428571,0.1785905
0.678568,0.4285714 z m -3.964282,-2.1785143 0,3.3571047 3.357143,0 Q 14.550712,5.3125333 14.443573,5.2053333 L
11.64893,2.4107428 q -0.107147,-0.1072 -0.366073,-0.196419 z m 3.428571,13.6428192 0,-9.1428573 -3.714285,0 q
-0.357143,0 -0.607147,-0.2499809 Q 10.14,6.2143238 10.14,5.8571428 l 0,-3.7142856 -6.8571428,0 0,13.7142858
11.4285708,0 z M 5.5685715,8.1428569 q 0,-0.1250285 0.080358,-0.2053333 0.080358,-0.080382 0.2053562,-0.080382 l
6.2857143,0 q 0.124998,0 0.205356,0.080382 0.08036,0.080302 0.08036,0.2053333 l 0,0.5714284 q 0,0.1250294
-0.08036,0.2053334 Q 12.264998,9 12.14,9 L 5.8542857,9 Q 5.7292876,9 5.6489295,8.9196178 5.5685713,8.8393156
5.5685713,8.7142844 l 0,-0.5714284 z M 12.14,10.142857 q 0.124998,0 0.205356,0.08038 0.08036,0.0803 0.08036,0.205333
l 0,0.571429 q 0,0.125028 -0.08036,0.205333 -0.08036,0.08038 -0.205356,0.08038 l -6.2857143,0 q -0.1249981,0
-0.2053562,-0.08038 -0.080358,-0.0803 -0.080358,-0.205333 l 0,-0.571429 q 0,-0.125028 0.080358,-0.205333
0.080358,-0.08038 0.2053562,-0.08038 l 6.2857143,0 z m 0,2.285715 q 0.124998,0 0.205356,0.08038 0.08036,0.0803
0.08036,0.205333 l 0,0.571429 q 0,0.125029 -0.08036,0.205334 -0.08036,0.08038 -0.205356,0.08038 l -6.2857143,0 q
-0.1249981,0 -0.2053562,-0.08038 -0.080358,-0.0803 -0.080358,-0.205334 l 0,-0.571429 q 0,-0.125028
0.080358,-0.205333 0.080358,-0.08038 0.2053562,-0.08038 l 6.2857143,0 z" />`);
if (plainIconLazy === undefined) {
const d = `M15.247 4.393q.25.25.43.678.177.43.177.79v10.287q0
.357-.25.607t-.607.25h-12q-.357 0-.607-.25t-.25-.606V1.858q0-.358.25-.608T2.997 1h8q.357 0
.786.18.428.177.678.427zm-3.964-2.18V5.57h3.357q-.09-.256-.196-.364L11.65 2.41q-.108-.106-.367
-.196zm3.428 13.644V6.714H11q-.357 0-.607-.25t-.25-.607V2.143h-6.86v13.714H14.71zM5.57
8.143q0-.125.08-.205.08-.08.204-.08h6.286q.125 0 .205.08.08.08.08.205v.57q0 .126-.08.207-.08.08
-.205.08H5.854q-.125 0-.205-.08-.08-.08-.08-.206v-.57zm6.57 2q.125 0 .205.08.08.08.08.206V11q0
.125-.08.205-.08.08-.205.08H5.854q-.125 0-.205-.08-.08-.08-.08-.205v-.57q0-.126.08-.207.08-.08.2
-.08h6.286zm0 2.286q.125 0 .205.08.08.08.08.2v.572q0 .125-.08.205-.08.08-.205.08H5.854q-.125 0-.205
-.08-.08-.08-.08-.205v-.572q0-.124.08-.204.08-.08.2-.08h6.286z`;
plainIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-plain", scale, plainIconLazy.cloneNode(false));
}
let otherIconLazy;
export function other(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-other", scale, `<path d="m 10.801185,13.499991 0,3.000034 q 0,0.199966
-0.149997,0.350003 Q 10.501188,17 10.301185,17 l -2.9999954,0 q -0.200003,0 -0.350002,-0.149972 -0.149998,-0.150037
-0.149998,-0.350003 l 0,-3.000034 q 0,-0.199966 0.149998,-0.350004 0.149999,-0.149972 0.350002,-0.149972 l
2.9999954,0 q 0.200003,0 0.350003,0.149972 0.149997,0.150038 0.149997,0.350004 z m 3.950001,-7.4999953 q 0,0.6749751
-0.193752,1.2624809 -0.193746,0.5875065 -0.437493,0.956246 Q 13.876188,8.587526 13.43244,8.9624908
12.988685,9.337519 12.713687,9.506231 12.43869,9.675006 11.951191,9.949989 q -0.5125,0.287495 -0.856252,0.8125
-0.343749,0.525 -0.343749,0.837523 0,0.212477 -0.150001,0.406217 -0.150004,0.193802 -0.349999,0.193802 l
-3.0000054,0 q -0.187495,0 -0.318749,-0.231277 -0.131246,-0.231284 -0.131246,-0.468725 l 0,-0.562543 q 0,-1.037488
0.812497,-1.9562566 Q 8.4261846,8.0625246 9.4011886,7.6249911 10.138688,7.287504 10.451185,6.9249894
10.76369,6.5624748 10.76369,5.9750331 q 0,-0.525002 -0.58125,-0.9250582 -0.5812494,-0.3999918 -1.3437494,-0.3999918
-0.812504,0 -1.35,0.3625146 -0.437502,0.3125237 -1.3375,1.4374811 -0.162499,0.2000281 -0.387504,0.2000281
-0.149997,0 -0.312498,-0.099982 L 3.4011866,4.9875343 Q 3.2386866,4.8625246 3.2074416,4.6750106 3.1761886,4.4874957
3.2761906,4.3250097 5.2761886,1 9.0761896,1 q 0.9999984,0 2.0124974,0.3874782 1.012501,0.3875423 1.825003,1.0375531
0.812497,0.649947 1.324997,1.5937436 0.512499,0.9437319 0.512499,1.9812208 z" />`);
if (otherIconLazy === undefined) {
const d = `M10.8 13.5v3q0 .2-.15.35-.15.15-.35.15h-3q-.2 0-.35-.15-.15-.15-.15-.35v-3q0-.2.15-.35.15
-.15.35-.15h3q.2 0 .35.15.15.15.15.35zM14.75 6q0 .675-.193 1.262-.193.588-.437.957-.244.365
-.688.74-.443.375-.718.543-.275.17-.763.444-.51.286-.852.81-.344.526-.344.84 0 .21-.15.405-.15.194
-.35.194h-3q-.186 0-.318-.23-.13-.234-.13-.47v-.564q0-1.037.812-1.956.812-.917 1.787-1.355.74-.336
1.05-.7.314-.362.314-.95 0-.524-.583-.924-.58-.4-1.343-.4-.814 0-1.35.362-.44.312-1.34 1.437-.16.2
-.386.2-.15 0-.313-.1L3.4 4.987q-.16-.124-.193-.312-.03-.188.07-.35Q5.277 1 9.077 1q1 0 2.01.387
1.01.388 1.825 1.038.812.65 1.325 1.594.51.94.51 1.98z`;
otherIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-other", scale, otherIconLazy.cloneNode(false));
}
let javascriptIconLazy;
export function javascript(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-js", scale, `<g transform="matrix(0.03159732,0,0,0.03159732,0.93993349,0.955184)"
id="Layer_1"><g><path d="m 112.155,67.644 84.212,0 0,236.019 c 0,106.375 -50.969,143.497 -132.414,143.497 -19.944,0
-45.429,-3.324 -62.052,-8.864 L 11.32,370.15 c 11.635,3.878 26.594,6.648 43.214,6.648 35.458,0 57.621,-16.068
57.621,-73.687 l 0,-235.467 z" /><path id="path9" d="m 269.484,354.634 c 22.161,11.635 57.62,23.27 93.632,23.27
38.783,0 59.282,-16.066 59.282,-40.998 0,-22.715 -17.729,-36.565 -62.606,-52.079 -62.053,-22.162 -103.05,-56.512
-103.05,-111.36 0,-63.715 53.741,-111.917 141.278,-111.917 42.662,0 73.132,8.313 95.295,18.838 l -18.839,67.592 c
-14.404,-7.201 -41.553,-17.729 -77.562,-17.729 -36.567,0 -54.297,17.175 -54.297,36.013 0,23.824 20.499,34.349
69.256,53.188 65.928,24.378 96.4,58.728 96.4,111.915 0,62.606 -47.647,115.794 -150.143,115.794 -42.662,0
-84.77,-11.636 -105.82,-23.27 l 17.174,-69.257 z"/></g></g>`);
if (javascriptIconLazy === undefined) {
const d = `M13.516 2.9c-2.766 0-4.463 1.522-4.463 3.536 0 1.733 1.295 2.82 3.256 3.52
1.413.49 1.973.926 1.973 1.644 0 .787-.647 1.296-1.873 1.296-1.137 0-2.26-.368-2.96-.736l-.54
2.19c.665.367 1.996.734 3.344.734 3.238 0 4.744-1.68 4.744-3.658
0-1.68-.966-2.767-3.05-3.537-1.54-.6-2.186-.93-2.186-1.68 0-.6.56-1.14 1.714-1.14
1.137 0 1.996.33 2.45.56l.596-2.138c-.7-.332-1.663-.596-3.01-.596zm-9.032.192v7.44c0
1.822-.702 2.33-1.822 2.33-.525 0-.997-.09-1.365-.212L1 14.805c.525.175 1.33.28 1.96.28
2.574 0 4.185-1.173 4.185-4.534V3.097h-2.66z`;
javascriptIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-js", scale, javascriptIconLazy.cloneNode(false));
}
let imageIconLazy;
export function image(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-image", scale, `<path d="M 6,6 Q 6,6.75 5.475,7.275 4.95,7.8 4.2,7.8 3.45,7.8
2.925,7.275 2.4,6.75 2.4,6 2.4,5.25 2.925,4.725 3.45,4.2 4.2,4.2 4.95,4.2 5.475,4.725 6,5.25 6,6 Z m 9.6,3.6 0,4.2
-13.2,0 0,-1.8 3,-3 1.5,1.5 4.8,-4.8 z M 16.5,3 1.5,3 Q 1.378125,3 1.289063,3.089 1.200003,3.178 1.200003,3.2999 l
0,11.4 q 0,0.1219 0.08906,0.2109 0.08906,0.089 0.210937,0.089 l 15,0 q 0.121875,0 0.210938,-0.089 0.08906,-0.089
0.08906,-0.2109 l 0,-11.4 q 0,-0.1219 -0.08906,-0.2109 Q 16.621878,3 16.5,3 Z m 1.5,0.3 0,11.4 q
0,0.6188 -0.440625,1.0594 Q 17.11875,16.2 16.5,16.2 l -15,0 Q 0.88125,16.2 0.440625,15.7594 0,15.3188 0,14.7 L 0,3.3
Q 0,2.6813 0.440625,2.2406 0.88125,1.8 1.5,1.8 l 15,0 q 0.61875,0 1.059375,0.4406 Q 18,2.6813 18,3.3 Z" />`);
if (imageIconLazy === undefined) {
const d = `M6 6q0 .75-.525 1.275Q4.95 7.8 4.2 7.8q-.75 0-1.275-.525Q2.4 6.75 2.4
6q0-.75.525-1.275Q3.45 4.2 4.2 4.2q.75 0 1.275.525Q6 5.25 6 6zm9.6 3.6v4.2H2.4V12l3-3
1.5 1.5 4.8-4.8zm.9-6.6h-15q-.122 0-.21.09-.09.088-.09.21v11.4q0
.122.09.21.088.09.21.09h15q.122 0 .21-.09.09-.088.09-.21V3.3q0-.122-.09-.21Q16.623
3 16.5 3zm1.5.3v11.4q0 .62-.44 1.06-.44.44-1.06.44h-15q-.62 0-1.06-.44Q0 15.32 0
14.7V3.3q0-.62.44-1.06.44-.44 1.06-.44h15q.62 0 1.06.44.44.44.44 1.06z`;
imageIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-image", scale, imageIconLazy.cloneNode(false));
}

@@ -122,125 +111,122 @@ export function svg(x, y, title, scale = 1) {

}
let htmlIconLazy;
export function html(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-html", scale, `<path d="m 5.62623,13.310467 -0.491804,0.4919 q -0.09836,0.098
-0.226229,0.098 -0.127869,0 -0.22623,-0.098 L 0.098361,9.218667 Q 0,9.120367 0,8.992467 q 0,-0.1279 0.09836,-0.2262
l 4.583606,-4.5836 q 0.09836,-0.098 0.22623,-0.098 0.127869,0 0.226229,0.098 l 0.491804,0.4918 q 0.09836,0.098
0.09836,0.2262 0,0.1279 -0.09836,0.2262 l -3.865574,3.8656 3.865574,3.8656 q 0.09836,0.098 0.09836,0.2262 0,0.1279
-0.09836,0.2262 z m 5.813114,-10.495 -3.668852,12.6983 q -0.03934,0.1279 -0.152459,0.1918 -0.113115,0.064
-0.231148,0.025 l -0.609836,-0.1672 q -0.127869,-0.039 -0.191803,-0.1525 -0.06393,-0.1131 -0.02459,-0.2409 l
3.668852,-12.6984 q 0.03934,-0.1279 0.152459,-0.1918 0.113115,-0.064 0.231148,-0.025 l 0.609836,0.1672 q
0.127869,0.039 0.191803,0.1525 0.06393,0.1131 0.02459,0.241 z m 6.462295,6.4032 -4.583606,4.5837 q -0.09836,0.098
-0.22623,0.098 -0.127869,0 -0.226229,-0.098 l -0.491804,-0.4919 q -0.09836,-0.098 -0.09836,-0.2262 0,-0.1278
0.09836,-0.2262 l 3.865574,-3.8656 -3.865574,-3.8656 q -0.09836,-0.098 -0.09836,-0.2262 0,-0.1279 0.09836,-0.2262 l
0.491804,-0.4918 q 0.09836,-0.098 0.226229,-0.098 0.127869,0 0.22623,0.098 l 4.583606,4.5836 Q 18,8.864567
18,8.992467 q 0,0.1279 -0.09836,0.2262 z" />`);
if (htmlIconLazy === undefined) {
const d = `M5.626 13.31l-.492.492q-.098.098-.226.098t-.226-.098L.098 9.22Q0 9.12 0
8.99q0-.127.098-.226L4.682 4.18q.098-.097.226-.097t.226.098l.492.49q.1.1.1.23t-.1.23L1.76
8.99l3.866 3.866q.1.098.1.226t-.1.226zM11.44 2.815l-3.67
12.7q-.04.127-.152.19-.113.065-.23.026l-.61-.162q-.13-.04-.193-.152-.064-.112-.024-.24l3.67-12.698q.04
-.128.157-.192.113-.064.23-.025l.61.167q.13.04.193.152.063.113.023.24zM17.9
9.22l-4.582 4.58q-.098.098-.226.098t-.226-.098l-.492-.492q-.1-.098-.1-.226t.1-.226L16.24
8.99l-3.867-3.865q-.1-.098-.1-.226t.1-.23l.492-.49q.098-.1.226-.1t.23.1l4.58 4.583q.1.1.1.226 0 .13-.1.23z`;
htmlIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-html", scale, htmlIconLazy.cloneNode(false));
}
let cssIconLazy;
export function css(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-css", scale, `<path d="m 15.435754,0.98999905 q 0.625698,0 1.094972,0.41564445 Q
17,1.8212879 17,2.4469768 q 0,0.5631111 -0.402235,1.3496889 -2.967597,5.6224 -4.156425,6.7217783 -0.867039,0.813421
-1.948602,0.813421 -1.1262576,0 -1.9351961,-0.826755 -0.8089385,-0.8268443 -0.8089385,-1.9620443 0,-1.1441778
0.8223463,-1.8949333 L 14.273743,1.4726657 Q 14.801117,0.98999905 15.435754,0.98999905 Z M 7.3106145,10.232488 q
0.3486034,0.679289 0.9519554,1.161955 0.6033519,0.482666 1.3452513,0.679378 l 0.00894,0.634577 q 0.035753,1.903911
-1.1575432,3.101689 -1.1932962,1.197778 -3.115084,1.197778 -1.0994413,0 -1.9486032,-0.415644 Q 2.5463687,16.176576
2.0324022,15.452576 1.5184357,14.728576 1.2592179,13.816843 1,12.905109 1,11.850354 q 0.06257,0.04444
0.3664804,0.268089 0.3039107,0.223466 0.55419,0.397778 0.2502793,0.174311 0.5273743,0.326311 0.2770949,0.151911
0.4111732,0.151911 0.3664804,0 0.4916201,-0.330756 0.2234637,-0.589866 0.5139664,-1.005511 0.2905029,-0.415644
0.6212291,-0.679377 0.3307262,-0.263644 0.7865922,-0.424533 0.4558659,-0.160889 0.9206704,-0.228 0.4648044,-0.06667
1.1173184,-0.09378 z" />`);
if (cssIconLazy === undefined) {
const d = `M15.436.99q.625 0 1.095.416.47.415.47 1.04 0 .564-.4 1.35-2.97 5.624-4.16 6.724-.865.814
-1.946.814-1.127 0-1.935-.827-.81-.827-.81-1.962 0-1.144.822-1.895l5.705-5.175Q14.8.99
15.435.99zM7.31 10.232q.35.68.953 1.162.603.483 1.345.68l.01.634q.035 1.904-1.16 3.102-1.192
1.198-3.114 1.198-1.1 0-1.948-.416-.85-.415-1.364-1.14-.514-.723-.773-1.635Q1 12.905 1
11.85l.366.268q.304.224.555.398.25.175.53.327.277.15.41.15.368 0 .493-.33.224-.59.515-1.005.29
-.415.62-.68.332-.263.788-.424.455-.16.92-.228.465-.066 1.118-.094z`;
cssIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-css", scale, cssIconLazy.cloneNode(false));
}
let warningIconLazy;
export function warning(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-warning", scale, `<path d="m 10.141566,13.833 0,-1.6945 q 0,-0.1249 -0.08472,-0.2096
-0.084725,-0.084 -0.2006658,-0.084 l -1.7123482,0 q -0.1159402,0 -0.2006658,0.084 -0.084725,0.084 -0.084725,0.2096 l
0,1.6945 q 0,0.1248 0.084725,0.2096 0.084725,0.084 0.2006658,0.084 l 1.7123482,0 q 0.1159402,0 0.2006658,-0.084
0.08472,-0.084 0.08472,-0.2096 z m -0.01784,-3.3356 0.160533,-4.0936 q 0,-0.107 -0.08919,-0.1694 -0.115941,-0.098
-0.2140439,-0.098 l -1.9620656,0 q -0.098103,0 -0.2140436,0.098 -0.089185,0.062 -0.089185,0.1873 l 0.1516221,4.0757
q 0,0.089 0.089185,0.1472 0.089185,0.058 0.2140435,0.058 l 1.6499188,0 q 0.1248588,0 0.2095847,-0.058 0.08473,-0.058
0.09364,-0.1472 z M 9.9988702,2.1676 16.848263,14.7248 q 0.312147,0.5619 -0.01784,1.1237 -0.151614,0.2587
-0.414709,0.4103 -0.263093,0.1516 -0.566321,0.1516 l -13.6987852,0 q -0.3032283,0 -0.5663235,-0.1516 Q
1.3211891,16.1072 1.169575,15.8485 0.83959124,15.2867 1.151738,14.7248 L 8.0011307,2.1676 Q 8.1527449,1.8911
8.4202993,1.7306 8.6878537,1.57 9.0000005,1.57 q 0.3121468,0 0.5797012,0.1606 0.2675544,0.1605 0.4191685,0.437
z" />`);
if (warningIconLazy === undefined) {
const d = `M6 6q0 .75-.525 1.275Q4.95 7.8 4.2 7.8q-.75 0-1.275-.525Q2.4 6.75 2.4
6q0-.75.525-1.275Q3.45 4.2 4.2 4.2q.75 0 1.275.525Q6 5.25 6 6zm9.6 3.6v4.2H2.4V12l3-3
1.5 1.5 4.8-4.8zm.9-6.6h-15q-.122 0-.21.09-.09.088-.09.21v11.4q0
.122.09.21.088.09.21.09h15q.122 0 .21-.09.09-.088.09-.21V3.3q0-.122-.09-.21Q16.623
3 16.5 3zm1.5.3v11.4q0 .62-.44 1.06-.44.44-1.06.44h-15q-.62 0-1.06-.44Q0 15.32 0
14.7V3.3q0-.62.44-1.06.44-.44 1.06-.44h15q.62 0 1.06.44.44.44.44 1.06z`;
warningIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-warning", scale, warningIconLazy.cloneNode(false));
}
let errorIconLazy;
export function error(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-no-gzip", scale, `<path d="m 9,1 q 2.177084,0 4.015627,1.0728889 1.838542,1.0729778
2.911457,2.9114667 Q 17,6.8229333 17,9 q 0,2.177067 -1.072916,4.015644 -1.072915,1.838489 -2.911457,2.911467 Q
11.177084,17 9,17 6.8229156,17 4.9843733,15.927111 3.1458311,14.854133 2.0729156,13.015644 1,11.177067 1,9
1,6.8229333 2.0729156,4.9843556 3.1458311,3.1458667 4.9843733,2.0728889 6.8229156,1 9,1 Z m 1.333333,12.9896
0,-1.9792 q 0,-0.145778 -0.09375,-0.2448 -0.09375,-0.09893 -0.229164,-0.09893 l -2.0000001,0 q -0.1354222,0
-0.2395822,0.104177 -0.1041689,0.104178 -0.1041689,0.239556 l 0,1.9792 q 0,0.135378 0.1041689,0.239556
0.10416,0.104177 0.2395822,0.104177 l 2.0000001,0 q 0.135413,0 0.229164,-0.09893 0.09375,-0.09902 0.09375,-0.2448 z
m -0.0208,-3.583378 0.187503,-6.4687109 q 0,-0.1249778 -0.104169,-0.1874667 -0.104169,-0.083556 -0.25,-0.083556 l
-2.2916626,0 q -0.14584,0 -0.25,0.083556 -0.1041688,0.062222 -0.1041688,0.1874667 L 7.67712,10.406222 q 0,0.104178
0.1041689,0.182311 0.10416,0.07822 0.25,0.07822 l 1.9270755,0 q 0.1458396,0 0.2447996,-0.07822 0.09895,-0.07822
0.109369,-0.182311 z" />`);
if (errorIconLazy === undefined) {
const d = `M9 1q2.177 0 4.016 1.073 1.838 1.073 2.91 2.91Q17 6.823 17 9q0 2.177-1.073 4.016-1.073
1.838-2.91 2.91Q11.177 17 9 17q-2.177 0-4.016-1.073-1.838-1.073-2.91-2.91Q1 11.177 1 9q0-2.177 1.073-4.016
1.073-1.838 2.91-2.91Q6.823 1 9 1zm1.333 12.99v-1.98q0-.145-.093-.244-.094-.1-.23-.1h-2q-.135 0-.24.105
-.103.106-.103.24v1.98q0 .136.104.24.106.104.24.104h2q.137 0 .23-.1.094-.098.094-.243zm-.02-3.584l.187
-6.468q0-.125-.104-.188-.104-.084-.25-.084H7.854q-.146 0-.25.084-.104.062-.104.188l.177 6.468q0
.104.104.183.106.076.25.076h1.93q.146 0 .245-.078.1-.08.11-.184z`;
errorIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-no-gzip", scale, errorIconLazy.cloneNode(false));
}
let fontIconLazy;
export function font(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-font", scale, `<path d="M 7.9711534,5.7542664 6.3365384,10.0812 q 0.3173075,0
1.3124995,0.01956 0.9951928,0.01956 1.5432692,0.01956 0.1826924,0 0.5480773,-0.01956 Q 8.9038458,7.6680441
7.9711534,5.754622 Z M 1,16.379245 1.0192356,15.619601 q 0.2211537,-0.06756 0.5384613,-0.120178 0.3173075,-0.05245
0.5480764,-0.100978 0.2307697,-0.048 0.4759617,-0.139378 0.245192,-0.09138 0.4278844,-0.278844 0.1826925,-0.187556
0.2980774,-0.4856 L 5.5865429,8.5715107 8.2788503,1.61 l 1.2307688,0 q 0.076924,0.1346666 0.1057698,0.2019555 L
11.586543,6.427333 q 0.317307,0.7499556 1.01923,2.475911 0.701923,1.726045 1.096153,2.639467 0.144232,0.326934
0.557693,1.389423 0.413462,1.062489 0.692307,1.620178 0.192309,0.432711 0.336539,0.548089 0.182692,0.144266
0.846154,0.283644 0.663462,0.139467 0.807692,0.197156 Q 17,15.946534 17,16.129289 q 0,0.03822 -0.0048,0.124978
-0.0048,0.08622 -0.0048,0.124978 -0.60577,0 -1.826923,-0.07644 -1.221154,-0.07733 -1.836539,-0.07733 -0.730769,0
-2.067307,0.06756 -1.3365382,0.06755 -1.7115381,0.07733 0,-0.413511 0.038462,-0.750044 L 10.84617,15.351076 q
0.0096,0 0.120192,-0.024 0.110577,-0.024 0.149039,-0.03378 0.03846,-0.0098 0.139423,-0.04356 0.100961,-0.03378
0.144231,-0.06222 0.04327,-0.02933 0.105769,-0.07733 0.0625,-0.048 0.08653,-0.105777 0.02403,-0.05778
0.02403,-0.134578 0,-0.153867 -0.298077,-0.927911 -0.298068,-0.774053 -0.692299,-1.706764 -0.394231,-0.932623
-0.403846,-0.961512 l -4.3269223,-0.01956 q -0.25,0.55769 -0.7355768,1.879823 -0.4855769,1.322044
-0.4855769,1.562489 0,0.211555 0.1346151,0.360533 0.1346151,0.149067 0.4182693,0.235556 0.2836533,0.08622
0.4663458,0.129866 0.1826924,0.04356 0.5480773,0.08178 0.365384,0.03822 0.3942302,0.03822 0.00962,0.182667
0.00962,0.557689 0,0.08622 -0.019236,0.259644 -0.5576924,0 -1.6778843,-0.09618 -1.1201929,-0.09618
-1.6778844,-0.09618 -0.076924,0 -0.254808,0.03822 -0.1778844,0.03822 -0.2067306,0.03822 Q 2.0384613,16.379245
1,16.379245 Z" />`);
if (fontIconLazy === undefined) {
const d = `M7.97 5.754L6.338 10.08q.317 0 1.312.02.994.02 1.542.02.183 0 .548-.02-.836-2.432-1.77
-4.345zM1 16.38l.02-.76q.22-.068.538-.12.317-.053.548-.102.23-.048.476-.14.245-.09.428-.278.182
-.187.298-.485l2.28-5.923 2.69-6.962H9.51q.077.135.105.202l1.972 4.615q.317.75 1.02 2.476.7 1.726
1.095 2.64.144.327.558 1.39.413 1.062.692 1.62.192.432.336.547.183.145.847.284.663.14.807.197.058.37.058.55
0 .04-.005.13t-.005.128q-.605 0-1.827-.076-1.22-.08-1.836-.08-.73 0-2.067.07-1.337.067-1.712.076 0-.412.04
-.75l1.258-.27q.01 0 .12-.022l.15-.033q.038-.01.14-.044.1-.034.143-.06l.1-.08q.06-.048.082-.106.024-.056.024
-.133 0-.152-.298-.926t-.693-1.71q-.392-.93-.402-.96l-4.325-.02q-.25.56-.734 1.88-.487 1.32-.487 1.56 0
.213.136.362.134.15.418.235.285.087.467.13.185.044.55.08.366.04.395.04.01.183.01.558 0 .087-.02.26-.558
0-1.678-.095-1.12-.098-1.678-.098-.08 0-.26.04-.18.037-.208.037-.77.136-1.808.136Z`;
fontIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-font", scale, fontIconLazy.cloneNode(false));
}
let flashIconLazy;
export function flash(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-flash", scale, `<path d="m 13.724296,4.737962 q 0.194716,0.216309 0.07572,0.475924 L
7.958654,17.729559 Q 7.818031,18 7.504329,18 7.461078,18 7.352885,17.97846 7.16899,17.924378 7.0770425,17.772918
6.9850949,17.621512 7.0283513,17.4484 L 9.15937,8.708015 4.7675305,9.800549 q -0.043251,0.01077 -0.1298072,0.01077
-0.1947161,0 -0.3353388,-0.118981 -0.1947107,-0.162286 -0.140628,-0.4219 L 6.3360428,0.34617 Q 6.3792939,0.194711
6.5091226,0.097382 6.6389298,0 6.8120043,0 l 3.5480877,0 q 0.205532,0 0.346154,0.135193 0.140628,0.135248
0.140628,0.319132 0,0.08656 -0.05409,0.194711 l -1.849763,5.008456 4.283664,-1.06011 q 0.08654,-0.02154
0.129807,-0.02154 0.205532,0 0.367791,0.162285 z" />`);
if (flashIconLazy === undefined) {
const d = `M13.724 4.738q.195.216.076.476L7.96 17.73q-.142.27-.456.27-.043 0-.15-.022-.185-.054-.277
-.205-.092-.15-.05-.325l2.132-8.74L4.765 9.8q-.044.01-.13.01-.195 0-.336-.118-.193-.162-.14-.422L6.337.346q.043
-.15.173-.25Q6.64 0 6.81 0h3.548q.206 0 .346.135.14.135.14.32 0 .086-.053.194L8.94 5.654l4.285
-1.06q.086-.02.13-.02.205 0 .367.16z`;
flashIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-flash", scale, flashIconLazy.cloneNode(false));
}
let videoIconLazy;
export function video(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-video", scale, `<path d="m 17,4.106999 0,9.7143 q 0,0.3751 -0.348214,0.5268
-0.116071,0.044 -0.223214,0.044 -0.241072,0 -0.401786,-0.1696 l -3.598214,-3.5983 0,1.4822 q 0,1.0625
-0.754464,1.8169 -0.754465,0.7552 -1.8169652,0.7552 l -6.2857143,0 q -1.0625,0 -1.8169642,-0.7545 Q 1,13.169599
1,12.106999 l 0,-6.2857 q 0,-1.0624 0.7544643,-1.8169 0.7544642,-0.7544 1.8169642,-0.7544 l 6.2857143,0 q
1.0625002,0 1.8169652,0.7544 0.754464,0.7545 0.754464,1.8169 l 0,1.4733 3.598214,-3.5893 q 0.160714,-0.1696
0.401786,-0.1696 0.107143,0 0.223214,0.044 Q 17,3.732099 17,4.106999 Z" />`);
if (videoIconLazy === undefined) {
const d = `M17 4.107v9.714q0 .38-.348.53-.116.05-.223.05-.25 0-.41-.17l-3.6-3.6v1.48q0 1.067-.757 1.82-.754.756
-1.817.756H3.57q-1.06 0-1.816-.753Q1 13.17 1 12.106V5.82q0-1.06.754-1.816.755-.754 1.817-.754h6.29q1.07 0
1.82.754.76.755.76 1.817V7.3l3.597-3.59q.16-.17.4-.17.107 0 .22.045.35.153.35.528z`;
videoIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-video", scale, videoIconLazy.cloneNode(false));
}
let audioIconLazy;
export function audio(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-audio", scale, `<path d="m 8.384615,3.7559 0,10.4615 q 0,0.2501 -0.182692,0.4327
-0.182692,0.1827 -0.432692,0.1827 -0.25,0 -0.432692,-0.1827 l -3.201924,-3.2019 -2.51923,0 q -0.25,0
-0.432693,-0.1827 Q 1,11.0828 1,10.8328 L 1,7.1405 Q 1,6.8905 1.182692,6.7078 1.365385,6.5251 1.615385,6.5251 l
2.51923,0 3.201924,-3.2019 q 0.182692,-0.1827 0.432692,-0.1827 0.25,0 0.432692,0.1827 0.182692,0.1827
0.182692,0.4327 z m 3.692308,5.2308 q 0,0.7307 -0.408654,1.3605 -0.408654,0.6299 -1.08173,0.8991 -0.09615,0.048
-0.240385,0.048 -0.25,0 -0.432693,-0.1779 -0.182692,-0.1778 -0.182692,-0.4375 0,-0.2018 0.115385,-0.3413
0.115385,-0.1394 0.278846,-0.2404 0.163461,-0.1009 0.326923,-0.2211 0.163462,-0.1202 0.278846,-0.3414
0.115385,-0.2211 0.115385,-0.548 0,-0.327 -0.115385,-0.5481 Q 10.615385,8.2174 10.451923,8.0972 10.288461,7.9771
10.125,7.8761 9.961539,7.7751 9.846154,7.6357 9.730769,7.4963 9.730769,7.2943 q 0,-0.2596 0.182692,-0.4374
0.182693,-0.178 0.432693,-0.178 0.144231,0 0.240385,0.048 0.673076,0.2597 1.08173,0.8942 0.408654,0.6347
0.408654,1.3655 z m 2.461538,0 q 0,1.4711 -0.817307,2.7163 -0.817308,1.2452 -2.163462,1.8125 -0.125,0.048
-0.240384,0.048 -0.259616,0 -0.442308,-0.1827 -0.182692,-0.1827 -0.182692,-0.4327 0,-0.375 0.375,-0.5673
0.538461,-0.2789 0.730769,-0.4231 0.711538,-0.5192 1.110577,-1.3029 0.399038,-0.7836 0.399038,-1.6682 0,-0.8847
-0.399038,-1.6683 -0.399039,-0.7836 -1.110577,-1.3029 -0.192308,-0.1442 -0.730769,-0.4231 -0.375,-0.1923
-0.375,-0.5672 0,-0.2501 0.182692,-0.4328 0.182692,-0.1826 0.432692,-0.1826 0.125,0 0.25,0.048 1.346154,0.5674
2.163462,1.8125 0.817307,1.2452 0.817307,2.7164 z M 17,8.9867 q 0,2.2115 -1.221154,4.0624 -1.221154,1.851
-3.25,2.726 -0.125,0.048 -0.25,0.048 -0.25,0 -0.432692,-0.1827 -0.182693,-0.1827 -0.182693,-0.4327 0,-0.3461
0.375,-0.5673 0.06731,-0.038 0.216347,-0.1009 0.149038,-0.062 0.216346,-0.101 0.442307,-0.2404 0.788461,-0.4904
1.182693,-0.875 1.846154,-2.1827 0.663462,-1.3077 0.663462,-2.7788 0,-1.4712 -0.663462,-2.7789 Q 14.442308,4.9
13.259615,4.0251 12.913461,3.775 12.471154,3.5347 q -0.06731,-0.038 -0.216346,-0.101 -0.149039,-0.062
-0.216347,-0.101 -0.375,-0.2212 -0.375,-0.5673 0,-0.25 0.182693,-0.4327 0.182692,-0.1827 0.432692,-0.1827 0.125,0
0.25,0.048 2.028846,0.8751 3.25,2.726 Q 17,6.7751 17,8.9867 Z" />`);
if (audioIconLazy === undefined) {
const d = `M8.385 3.756v10.46q0 .252-.183.434-.183.183-.433.183t-.44-.183l-3.2-3.202H1.61q-.25
0-.43-.183-.18-.182-.18-.432V7.14q0-.25.182-.432.182-.183.432-.183h2.52l3.202-3.202q.182-.183.432
-.183t.43.183q.182.183.182.433zm3.692 5.23q0 .73-.41 1.36-.407.63-1.08.9-.097.048-.24.048-.25 0
-.434-.178-.182-.177-.182-.437 0-.21.12-.35.12-.14.28-.24.16-.1.33-.22.166-.12.28-.34.117-.22.117
-.55 0-.33-.115-.55-.115-.224-.28-.344-.163-.12-.326-.22-.165-.1-.28-.24-.116-.14-.116-.34 0-.26.183
-.44t.43-.176q.146 0 .24.048.676.26 1.08.894.41.636.41 1.367zm2.46 0q0 1.472-.816 2.717t-2.16 1.813q
-.12.048-.24.048-.26 0-.44-.183-.18-.18-.18-.43 0-.37.378-.56.54-.28.73-.42.713-.52 1.11-1.302.4
-.783.4-1.667 0-.886-.4-1.67-.4-.783-1.11-1.303-.192-.145-.73-.424-.376-.192-.376-.567 0-.25.183
-.434.183-.18.433-.18.123 0 .25.047 1.344.567 2.16 1.812.82 1.244.82 2.716zm2.463 0q0 2.212
-1.22 4.063-1.222 1.85-3.25 2.72-.126.05-.25.05-.25 0-.434-.19-.183-.183-.183-.433 0-.346.375
-.568.068-.04.217-.1.15-.064.216-.1.45-.244.79-.494 1.19-.875 1.85-2.183.67-1.306.67-2.777 0
-1.47-.663-2.78-.664-1.304-1.846-2.18-.346-.25-.79-.49-.065-.035-.214-.1-.15-.06-.22-.1
-.375-.22-.375-.57 0-.25.183-.43.183-.182.433-.182.123 0 .25.047 2.027.876 3.25 2.727Q17 6.775 17 8.99Z`;
audioIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-audio", scale, audioIconLazy.cloneNode(false));
}
let pushIconLazy;
export function push(x, y, title, scale = 1) {
return toSvg(x, y, title, "icon-push", scale, `<path d="m 14.667614,9 q 0,0.415934 -0.284982,0.700867 L
9.3685123,14.715 Q 9.0681257,15 8.6676124,15 8.2747991,15 7.9744123,14.715 L 7.3967524,14.137334 q
-0.2926867,-0.292667 -0.2926867,-0.700867 0,-0.408201 0.2926867,-0.700934 l 2.2567399,-2.256734 -5.4223399,0 q
-0.4005134,0 -0.6508334,-0.288798 -0.25032,-0.288868 -0.25032,-0.697068 l 0,-0.9858663 q 0,-0.4082 0.25032,
-0.6970668 0.25032,-0.2887998 0.6508334,-0.2887998 l 5.4223399,0 L 7.3967524,5.2567334 Q 7.1040657,4.9794667
7.1040657,4.5635333 q 0,-0.4159334 0.2926867,-0.6932 L 7.9744123,3.2926666 Q 8.267099,3 8.6676124,3 9.0758256,3
9.3685123,3.2926666 L 14.382632,8.3067999 Q 14.667614,8.5764 14.667614,9 Z" />`);
if (pushIconLazy === undefined) {
const d = `M14.668 9q0 .416-.285.7L9.37 14.716Q9.067 15 8.667 15q-.393 0-.694-.285l-.577
-.578q-.293-.292-.293-.7 0-.41.293-.7l2.256-2.258H4.23q-.4 0-.65-.29t-.25-.698v-.986q0-.408.25
-.697.25-.29.65-.29h5.423L7.397 5.257q-.293-.278-.293-.693 0-.416.293-.694l.577-.576Q8.267 3 8.668
3q.408 0 .7.293l5.015 5.014q.285.27.285.693z`;
pushIconLazy = svgLib.newPath(d);
}
return wrapSvgIcon(x, y, title, "icon-push", scale, pushIconLazy.cloneNode(false));
}

@@ -9,4 +9,4 @@ /**

function parseUrl(url) {
let pattern = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
let matches = url.match(pattern);
const pattern = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
const matches = url.match(pattern);
return {

@@ -29,2 +29,33 @@ authority: matches[4],

/**
* Returns Index of first match to `predicate` in `arr`
* @param arr Array to search
* @param predicate Function that returns true for a match
*/
export function findIndex(arr, predicate) {
let i = 0;
if (!arr || arr.length < 1) {
return undefined;
}
const len = arr.length;
while (i < len) {
if (predicate(arr[i], i)) {
return i;
}
i++;
}
return undefined;
}
/**
* Returns first match to `predicate` in `arr`
* @param arr Array to search
* @param predicate Function that returns true for a match
*/
export function find(arr, predicate) {
const index = findIndex(arr, predicate);
if (index === undefined) {
return undefined;
}
return arr[index];
}
/**
* Formats and shortens a url for ui

@@ -39,3 +70,3 @@ * @param {string} url

}
let matches = parseUrl(url);
const matches = parseUrl(url);
if ((matches.authority + matches.path).length < maxLength) {

@@ -47,3 +78,3 @@ return matches.authority + matches.path;

// maybe we could fine tune these numbers
let p = matches.path.split("/");
const p = matches.path.split("/");
if (matches.authority.length > maxAuthLength) {

@@ -91,1 +122,15 @@ return matches.authority.substr(0, maxAuthLength) + "..." + p[p.length - 1].substr(-maxPathLength);

}
/**
* Check if event is `tab` + `shift` key, to move to previous input element
* @param {KeyboardEvent} evt Keyboard event
*/
export function isTabUp(evt) {
return evt.which === 9 && evt.shiftKey;
}
/**
* Check if event is only `tab` key, to move to next input element
* @param {KeyboardEvent} evt Keyboard event
*/
export function isTabDown(evt) {
return evt.which === 9 && !evt.shiftKey;
}

@@ -157,3 +157,3 @@ import { roundNumber } from "./misc";

export function validateOptions(options) {
let validateInt = (name) => {
const validateInt = (name) => {
options[name] = toInt(options[name]);

@@ -164,3 +164,3 @@ if (options[name] === undefined) {

};
let ensureBoolean = (name) => {
const ensureBoolean = (name) => {
options[name] = !!options[name];

@@ -167,0 +167,0 @@ };

@@ -5,5 +5,7 @@ /**

import { addClass } from "./dom";
/** Namespace for SVG Elements */
const svgNamespaceUri = "http://www.w3.org/2000/svg";
function entries(obj) {
const entries = [];
for (let k of Object.keys(obj)) {
for (const k of Object.keys(obj)) {
entries.push([k, String((obj[k]))]);

@@ -28,3 +30,3 @@ }

function newElement(tagName, { attributes = {}, css = {}, text = "", className = "", } = {}) {
const element = document.createElementNS("http://www.w3.org/2000/svg", tagName);
const element = document.createElementNS(svgNamespaceUri, tagName);
if (className) {

@@ -63,3 +65,5 @@ addClass(element, className);

export function newTitle(text) {
return newElement("title", { text });
const title = document.createElementNS(svgNamespaceUri, "title");
title.setAttribute("text", text);
return title;
}

@@ -69,4 +73,9 @@ export function newTextEl(text, attributes = {}, css = {}) {

}
export function newPath(d) {
const path = document.createElementNS(svgNamespaceUri, "path");
path.setAttribute("d", d);
return path;
}
/** temp SVG element for size measurements */
let getTestSVGEl = (() => {
const getTestSVGEl = (() => {
/** Reference to Temp SVG element for size measurements */

@@ -100,3 +109,3 @@ let svgTestEl;

svgTestEl.parentNode.removeChild(svgTestEl);
}, 1000);
}, 500);
return svgTestEl;

@@ -112,15 +121,23 @@ };

export function getNodeTextWidth(textNode, skipClone = false) {
let tmp = getTestSVGEl();
const tmp = getTestSVGEl();
let tmpTextNode;
let shadow;
if (skipClone) {
shadow = textNode.style.textShadow;
tmpTextNode = textNode;
}
else {
tmpTextNode = textNode.cloneNode(false);
tmpTextNode = textNode.cloneNode(true);
tmpTextNode.setAttribute("x", "0");
tmpTextNode.setAttribute("y", "0");
}
tmp.appendChild(tmpTextNode);
// make sure to turn of shadow for performance
tmpTextNode.style.textShadow = "0";
tmp.appendChild(tmpTextNode);
window.document.body.appendChild(tmp);
return tmpTextNode.getBBox().width;
const width = tmpTextNode.getBBox().width;
if (skipClone && shadow !== undefined) {
textNode.style.textShadow = shadow;
}
return width;
}

@@ -7,3 +7,3 @@ /**

*/ export function makeLegend() {
let ulNode = document.createElement("ul");
const ulNode = document.createElement("ul");
ulNode.className = "resource-legend";

@@ -10,0 +10,0 @@ ulNode.innerHTML = `

@@ -33,8 +33,8 @@ import { validateOptions } from "./helpers/parse";

// setup paging helper
let paging = new Paging(waterfallDocsData, options.selectedPage);
const paging = new Paging(waterfallDocsData, options.selectedPage);
let doc = createWaterfallSvg(paging.getSelectedPage(), options);
// page update behaviour
paging.onPageUpdate((_pageIndex, pageDoc) => {
let el = doc.parentElement;
let newDoc = createWaterfallSvg(pageDoc, options);
const el = doc.parentElement;
const newDoc = createWaterfallSvg(pageDoc, options);
el.replaceChild(newDoc, doc);

@@ -41,0 +41,0 @@ doc = newDoc;

@@ -47,3 +47,3 @@ import { removeChildren } from "../helpers/dom";

this.selectedPageIndex = pageIndex;
let selectedPage = this.doc.pages[this.selectedPageIndex];
const selectedPage = this.doc.pages[this.selectedPageIndex];
this.onPageUpdateCbs.forEach((cb) => {

@@ -77,3 +77,3 @@ cb(this.selectedPageIndex, selectedPage);

this.doc.pages.forEach((p, i) => {
let option = new Option(p.title, i.toString(), false, i === this.selectedPageIndex);
const option = new Option(p.title, i.toString(), false, i === this.selectedPageIndex);
selectbox.add(option);

@@ -83,3 +83,3 @@ });

selectbox.addEventListener("change", (evt) => {
let val = parseInt(evt.target.value, 10);
const val = parseInt(evt.target.value, 10);
self.setSelectedPageIndex(val);

@@ -86,0 +86,0 @@ });

@@ -81,3 +81,3 @@ import { getHeader, getHeaders } from "../helpers/har";

const contentLength = getHeader(headers, "Content-Length");
let contentSize = undefined;
let contentSize;
if (content.size !== -1 && contentLength !== content.size.toString()) {

@@ -84,0 +84,0 @@ contentSize = content.size;

@@ -80,3 +80,3 @@ /**

// const harEntry = entry;
let output = [];
const output = [];
if (isPush(entry)) {

@@ -83,0 +83,0 @@ output.push({

@@ -17,3 +17,3 @@ import { pluralize } from "../helpers/misc";

export function makeTabs(entry, requestID, requestType, startRelative, endRelative, indicators) {
let tabs = [];
const tabs = [];
const tabsData = getKeys(entry, requestID, startRelative, endRelative);

@@ -55,10 +55,10 @@ tabs.push(makeGeneralTab(tabsData.general, indicators));

// Make indicator sections
let errors = indicators
const errors = indicators
.filter((i) => i.type === "error")
.map((i) => [i.title, i.description]);
let warnings = indicators
const warnings = indicators
.filter((i) => i.type === "warning")
.map((i) => [i.title, i.description]);
// all others
let info = indicators
const info = indicators
.filter((i) => i.type !== "error" && i.type !== "warning")

@@ -65,0 +65,0 @@ .map((i) => [i.title, i.description]);

@@ -14,3 +14,3 @@ import { roundNumber } from "../helpers/misc";

// make sure it's the *.log base node
let data = (harData["log"] !== undefined ? harData["log"] : harData);
const data = (harData["log"] !== undefined ? harData["log"] : harData);
const pages = getPages(data);

@@ -63,3 +63,3 @@ return {

// make sure it's the *.log base node
let data = (harData["log"] !== undefined ? harData["log"] : harData);
const data = (harData["log"] !== undefined ? harData["log"] : harData);
const pages = getPages(data);

@@ -131,3 +131,3 @@ const currPage = pages[pageIndex];

const getUserTimimngs = (currPage, options) => {
let baseFilter = options.showUserTimingEndMarker ?
const baseFilter = options.showUserTimingEndMarker ?
(k) => k.indexOf("_userTime.") === 0 :

@@ -137,3 +137,3 @@ (k) => k.indexOf("_userTime.") === 0 && k.indexOf("_userTime.endTimer-") !== 0;

if (Array.isArray(options.showUserTiming)) {
let findTimings = options.showUserTiming;
const findTimings = options.showUserTiming;
filterFn = (k) => (baseFilter(k) &&

@@ -175,3 +175,3 @@ findTimings.indexOf(k.replace(/^_userTime\./, "")) >= 0);

const buildDetailTimingBlocks = (startRelative, harEntry) => {
let t = harEntry.timings;
const t = harEntry.timings;
return ["blocked", "dns", "connect", "send", "wait", "receive"].reduce((collect, key) => {

@@ -178,0 +178,0 @@ const time = getTimePair(key, harEntry, collect, startRelative);

@@ -13,7 +13,7 @@ /** Helpers that are not file-fromat specific */

export function makeDefinitionList(dlKeyValues, addClass = false) {
let makeClass = (key) => {
const makeClass = (key) => {
if (!addClass) {
return "";
}
let className = toCssClass(key) || "no-colour";
const className = toCssClass(key) || "no-colour";
return `class="${className}"`;

@@ -36,3 +36,3 @@ };

}
let types = mimeType.split("/");
const types = mimeType.split("/");
let part2 = types[1];

@@ -152,3 +152,3 @@ // take care of text/css; charset=UTF-8 etc

export const flattenKvTuple = (nestedKvPairs) => {
let returnKv = [];
const returnKv = [];
nestedKvPairs.forEach((maybeKv) => {

@@ -155,0 +155,0 @@ if (maybeKv === undefined || maybeKv.length === 0) {

import { escapeHtml, sanitizeUrlForLink } from "../../helpers/parse";
/**
* Creates the HTML body for the overlay
*
* _All tabable elements are set to `tabindex="-1"` to avoid tabing issues_
* @param requestID ID
* @param detailsHeight
* @param entry
*/
export function createDetailsBody(requestID, detailsHeight, entry) {
let html = document.createElement("html");
let body = document.createElement("body");
const html = document.createElement("html");
const body = document.createElement("body");
body.setAttribute("xmlns", "http://www.w3.org/1999/xhtml");

@@ -32,3 +40,5 @@ html.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "http://www.w3.org/2000/xmlns/");

<header class="type-${entry.responseDetails.requestType}">
<h3><strong>#${requestID}</strong> <a href="${sanitizeUrlForLink(entry.url)}">${escapeHtml(entry.url)}</a></h3>
<h3><strong>#${requestID}</strong> <a href="${sanitizeUrlForLink(entry.url)}">
${escapeHtml(entry.url)}
</a></h3>
<nav class="tab-nav">

@@ -35,0 +45,0 @@ <ul>

@@ -1,11 +0,18 @@

import { removeChildren } from "../../helpers/dom";
import { getLastItemOfNodeList, getParentByClassName, removeChildren, } from "../../helpers/dom";
import { find, isTabDown, isTabUp, } from "../../helpers/misc";
import { createRowInfoOverlay } from "./svg-details-overlay";
/** Overlay (popup) instance manager */
export default class OverlayManager {
// TODO: move `overlayHolder` to constructor
constructor(context, overlayHolder) {
class OverlayManager {
constructor(context) {
this.context = context;
this.overlayHolder = overlayHolder;
/** Collection of currely open overlays */
this.openOverlays = [];
/**
* Sets the offset for a request-bar
* @param {SVGAElement[]} rowItems
* @param {number} offset
*/
this.realignRow = (rowItem, offset) => {
rowItem.setAttribute("transform", `translate(0, ${offset})`);
};
}

@@ -19,3 +26,3 @@ /** all open overlays height combined */

*/
openOverlay(index, y, detailsHeight, entry, barEls) {
openOverlay(index, y, detailsHeight, entry, rowItems) {
if (this.openOverlays.some((o) => o.index === index)) {

@@ -25,3 +32,3 @@ return;

const self = this;
this.openOverlays.push({
const newOverlay = {
"defaultY": y,

@@ -31,13 +38,14 @@ "entry": entry,

"onClose": () => {
self.closeOverlay(index, detailsHeight, barEls);
self.closeOverlay(index, detailsHeight, rowItems);
},
"openTabIndex": 0,
});
this.renderOverlays(detailsHeight);
};
this.openOverlays.push(newOverlay);
this.openOverlays = this.openOverlays.sort((a, b) => a.index > b.index ? 1 : -1);
this.renderOverlays(detailsHeight, rowItems);
this.context.pubSub.publishToOverlayChanges({
"changedIndex": index,
"combinedOverlayHeight": self.getCombinedOverlayHeight(),
"openOverlays": self.openOverlays,
"type": "open",
});
this.realignBars(barEls);
}

@@ -47,8 +55,8 @@ /**

*/
toggleOverlay(index, y, detailsHeight, entry, barEls) {
toggleOverlay(index, y, detailsHeight, entry, rowItems) {
if (this.openOverlays.some((o) => o.index === index)) {
this.closeOverlay(index, detailsHeight, barEls);
this.closeOverlay(index, detailsHeight, rowItems);
}
else {
this.openOverlay(index, y, detailsHeight, entry, barEls);
this.openOverlay(index, y, detailsHeight, entry, rowItems);
}

@@ -59,3 +67,3 @@ }

*/
closeOverlay(index, detailsHeight, barEls) {
closeOverlay(index, detailsHeight, rowItems) {
const self = this;

@@ -65,31 +73,11 @@ this.openOverlays.splice(this.openOverlays.reduce((prev, curr, i) => {

}, -1), 1);
this.renderOverlays(detailsHeight);
this.renderOverlays(detailsHeight, rowItems);
this.context.pubSub.publishToOverlayChanges({
"changedIndex": index,
"combinedOverlayHeight": self.getCombinedOverlayHeight(),
"openOverlays": self.openOverlays,
"type": "closed",
});
this.realignBars(barEls);
}
/**
* sets the offset for request-bars
* @param {SVGGElement[]} barEls
*/
realignBars(barEls) {
barEls.forEach((bar, j) => {
let offset = this.getOverlayOffset(j);
bar.setAttribute("transform", `translate(0, ${offset})`);
});
}
/** y offset to it's default y position */
getOverlayOffset(rowIndex) {
return this.openOverlays.reduce((col, overlay) => {
if (overlay.index < rowIndex) {
return col + overlay.height;
}
return col;
}, 0);
}
/**
* removes all overlays and renders them again
* Renders / Adjusts Overlays
*

@@ -99,26 +87,89 @@ * @summary this is to re-set the "y" position since there is a bug in chrome with

* @param {number} detailsHeight
* @param {SVGGElement} overlayHolder
* @param {SVGAElement[]} rowItems
*/
renderOverlays(detailsHeight) {
removeChildren(this.overlayHolder);
renderOverlays(detailsHeight, rowItems) {
/** shared variable to keep track of heigth */
let currY = 0;
this.openOverlays
.sort((a, b) => a.index > b.index ? 1 : -1)
.forEach((overlay) => {
let y = overlay.defaultY + currY;
let infoOverlay = createRowInfoOverlay(overlay, y, detailsHeight);
const updateHeight = (overlay, y, currHeight) => {
currY += currHeight;
overlay.actualY = y;
overlay.height = currHeight;
};
const addNewOverlay = (overlayHolder, overlay) => {
const y = overlay.defaultY + currY;
const infoOverlay = createRowInfoOverlay(overlay, y, detailsHeight);
// if overlay has a preview image show it
let previewImg = infoOverlay.querySelector("img.preview");
const previewImg = infoOverlay.querySelector("img.preview");
if (previewImg && !previewImg.src) {
previewImg.setAttribute("src", previewImg.attributes.getNamedItem("data-src").value);
}
this.overlayHolder.appendChild(infoOverlay);
let currHeight = infoOverlay.getBoundingClientRect().height;
currY += currHeight;
overlay.actualY = y;
overlay.height = currHeight;
return overlay;
});
infoOverlay.querySelector("a")
.addEventListener("keydown", OverlayManager.firstElKeypress);
getLastItemOfNodeList(infoOverlay.querySelectorAll("button"))
.addEventListener("keydown", OverlayManager.lastElKeypress);
overlayHolder.appendChild(infoOverlay);
updateHeight(overlay, y, infoOverlay.getBoundingClientRect().height);
};
const updateRow = (rowItem, index) => {
const overlay = find(this.openOverlays, (o) => o.index === index);
const overlayEl = rowItem.nextElementSibling.firstElementChild;
this.realignRow(rowItem, currY);
if (overlay === undefined) {
if (overlayEl) {
// remove closed overlay
rowItem.nextElementSibling.querySelector("a")
.removeEventListener("keydown", OverlayManager.firstElKeypress);
getLastItemOfNodeList(rowItem.nextElementSibling.querySelectorAll("button"))
.removeEventListener("keydown", OverlayManager.lastElKeypress);
removeChildren(rowItem.nextElementSibling);
}
return; // not open
}
if (overlayEl) {
const bg = overlayEl.querySelector(".info-overlay-bg");
const fo = overlayEl.querySelector("foreignObject");
const btnRect = overlayEl.querySelector(".info-overlay-close-btn rect");
const btnText = overlayEl.querySelector(".info-overlay-close-btn text");
updateHeight(overlay, overlay.defaultY + currY, overlay.height);
// needs updateHeight
bg.setAttribute("y", overlay.actualY.toString());
fo.setAttribute("y", overlay.actualY.toString());
btnText.setAttribute("y", overlay.actualY.toString());
btnRect.setAttribute("y", overlay.actualY.toString());
return;
}
addNewOverlay(rowItem.nextElementSibling, overlay);
};
rowItems.forEach(updateRow);
}
}
;
OverlayManager.showFullName = (el) => {
el.getElementsByClassName("row-fixed").item(0)
.dispatchEvent(new MouseEvent("mouseenter"));
};
/**
* Keypress Event handler for fist el in Overlay,
* to manage highlighting of the element above
*/
OverlayManager.firstElKeypress = (evt) => {
if (isTabUp(evt)) {
const par = getParentByClassName(evt.target, "row-overlay-holder");
if (par && par.previousElementSibling) {
OverlayManager.showFullName(par.previousElementSibling);
}
}
};
/**
* Keypress Event handler for last el in Overlay,
* to manage highlighting of the element below
*/
OverlayManager.lastElKeypress = (evt) => {
if (isTabDown(evt)) {
const par = getParentByClassName(evt.target, "row-overlay-holder");
if (par && par.nextElementSibling) {
OverlayManager.showFullName(par.nextElementSibling);
}
}
};
export { OverlayManager, };
export default OverlayManager;

@@ -1,8 +0,21 @@

export default class PubSub {
class PubSub {
constructor() {
this.subscribers = [];
}
/** Call `fn` whenever a new change is publisched on OverlayChanges channel */
subscribeToOverlayChanges(fn) {
this.subscribers.push(fn);
}
/**
* Call `fn` whenever a new change for `index` are publisched
* on OverlayChanges channel
*/
subscribeToSpecificOverlayChanges(index, fn) {
this.subscribers.push((evt) => {
if (evt.changedIndex === index) {
fn(evt);
}
});
}
/** Publish a change on OverlayChanges channel */
publishToOverlayChanges(change) {

@@ -12,2 +25,3 @@ this.subscribers.forEach((fn) => fn(change));

}
;
export { PubSub, };
export default PubSub;

@@ -0,8 +1,6 @@

import { forEachNodeList } from "../../helpers/dom";
import * as svg from "../../helpers/svg";
import { createDetailsBody } from "./html-details-body";
export function forEach(els, fn) {
Array.prototype.forEach.call(els, fn);
}
function createCloseButtonSvg(y) {
let closeBtn = svg.newA("info-overlay-close-btn");
const closeBtn = svg.newA("info-overlay-close-btn");
closeBtn.appendChild(svg.newRect({

@@ -24,4 +22,4 @@ "height": 23,

function createHolder(y, detailsHeight) {
let innerHolder = svg.newG("info-overlay-holder");
let bg = svg.newRect({
const holder = svg.newG("info-overlay-holder");
const bg = svg.newRect({
"height": detailsHeight,

@@ -33,11 +31,10 @@ "rx": 2,

"y": y,
}, "info-overlay");
innerHolder.appendChild(bg);
return innerHolder;
}, "info-overlay-bg");
holder.appendChild(bg);
return holder;
}
export function createRowInfoOverlay(overlay, y, detailsHeight) {
const requestID = overlay.index + 1;
let wrapper = svg.newG("outer-info-overlay-holder");
let holder = createHolder(y, detailsHeight);
let foreignObject = svg.newForeignObject({
const holder = createHolder(y, detailsHeight);
const foreignObject = svg.newForeignObject({
"height": detailsHeight,

@@ -48,10 +45,10 @@ "width": "100%",

});
let closeBtn = createCloseButtonSvg(y);
const closeBtn = createCloseButtonSvg(y);
closeBtn.addEventListener("click", () => overlay.onClose(overlay.index));
let body = createDetailsBody(requestID, detailsHeight, overlay.entry);
let buttons = body.getElementsByClassName("tab-button");
let tabs = body.getElementsByClassName("tab");
let setTabStatus = (tabIndex) => {
const body = createDetailsBody(requestID, detailsHeight, overlay.entry);
const buttons = body.getElementsByClassName("tab-button");
const tabs = body.getElementsByClassName("tab");
const setTabStatus = (tabIndex) => {
overlay.openTabIndex = tabIndex;
forEach(tabs, (tab, j) => {
forEachNodeList(tabs, (tab, j) => {
tab.style.display = (tabIndex === j) ? "block" : "none";

@@ -61,3 +58,3 @@ buttons.item(j).classList.toggle("active", (tabIndex === j));

};
forEach(buttons, (btn, tabIndex) => {
forEachNodeList(buttons, (btn, tabIndex) => {
btn.addEventListener("click", () => setTabStatus(tabIndex));

@@ -69,4 +66,3 @@ });

holder.appendChild(closeBtn);
wrapper.appendChild(holder);
return wrapper;
return holder;
}

@@ -20,3 +20,3 @@ import { pluralize } from "../../helpers/misc";

}
let combinedTitle = [];
const combinedTitle = [];
let icon = "";

@@ -23,0 +23,0 @@ const errors = indicators.filter((i) => i.type === "error");

@@ -14,3 +14,3 @@ /**

const blockHeight = rectData.height - 1;
let rect = svg.newRect({
const rect = svg.newRect({
"height": blockHeight,

@@ -64,3 +64,3 @@ "width": misc.roundNumber(rectData.width / rectData.unit) + "%",

// (pessimistic) estimation of text with to avoid performance penalty of `getBBox`
let roughTxtWidth = totalLabel.length * 8;
const roughTxtWidth = totalLabel.length * 8;
if (percStart + (roughTxtWidth / minWidth * 100) > 100) {

@@ -80,4 +80,4 @@ percStart = firstX / rectData.unit - spacingPerc;

export function createRect(rectData, segments, timeTotal) {
let rect = makeBlock(rectData, `time-block ${rectData.cssClass}`);
let rectHolder = svg.newG("rect-holder");
const rect = makeBlock(rectData, `time-block ${rectData.cssClass}`);
const rectHolder = svg.newG("rect-holder");
let firstX = rectData.x;

@@ -88,4 +88,4 @@ rectHolder.appendChild(rect);

if (segment.total > 0 && typeof segment.start === "number") {
let childRectData = segmentToRectData(segment, rectData);
let childRect = makeBlock(childRectData, `segment ${childRectData.cssClass}`);
const childRectData = segmentToRectData(segment, rectData);
const childRect = makeBlock(childRectData, `segment ${childRectData.cssClass}`);
firstX = Math.min(firstX, childRectData.x);

@@ -122,3 +122,3 @@ rectHolder.appendChild(childRect);

export function createRequestLabelClipped(x, y, name, height) {
let blockLabel = createRequestLabel(x, y, name, height);
const blockLabel = createRequestLabel(x, y, name, height);
blockLabel.style.clipPath = `url(#titleClipPath)`;

@@ -135,4 +135,6 @@ return blockLabel;

export function createRequestLabelFull(x, y, name, height) {
let blockLabel = createRequestLabel(x, y, name, height);
let labelHolder = svg.newG("full-label");
const blockLabel = createRequestLabel(x, y, name, height);
const labelHolder = svg.newG("full-label", {}, {
clipPath: `url(#titleFullClipPath)`,
});
labelHolder.appendChild(svg.newRect({

@@ -142,3 +144,5 @@ "height": height - 4,

"ry": 5,
"width": svg.getNodeTextWidth(blockLabel),
// for initial load performance use 500px as base width
// it's updated one by one on hover
"width": 500,
"x": x - 3,

@@ -154,3 +158,3 @@ "y": y + 3,

y = y + Math.round(height / 2) + 5;
let blockLabel = svg.newTextEl(blockName, { x, y });
const blockLabel = svg.newTextEl(blockName, { x, y });
blockLabel.appendChild(svg.newTitle(name));

@@ -160,2 +164,4 @@ blockLabel.style.opacity = name.match(/js.map$/) ? "0.5" : "1";

}
const supportsAnimationFrame = (typeof window.requestAnimationFrame === "function" &&
typeof window.cancelAnimationFrame === "function");
/**

@@ -169,4 +175,4 @@ * Appends the labels to `rowFixed` - TODO: see if this can be done more elegant

export function appendRequestLabels(rowFixed, requestNumberLabel, shortLabel, fullLabel) {
let labelFullBg = fullLabel.getElementsByTagName("rect")[0];
let fullLabelText = fullLabel.getElementsByTagName("text")[0];
const labelFullBg = fullLabel.getElementsByTagName("rect")[0];
const fullLabelText = fullLabel.getElementsByTagName("text")[0];
// use display: none to not render it and visibility to remove it from search results (crt+f in chrome at least)

@@ -178,2 +184,6 @@ fullLabel.style.display = "none";

rowFixed.appendChild(fullLabel);
/** the size adjustment only needs to happend once, this var keeps track of that */
let isAdjusted = false;
/** store AnimationFrame id, to cancel it if hovering was too fast */
let updateAnimFrame;
rowFixed.addEventListener("mouseenter", () => {

@@ -183,3 +193,17 @@ fullLabel.style.display = "block";

fullLabel.style.visibility = "visible";
labelFullBg.style.width = (fullLabelText.clientWidth + 10).toString();
// offload doublecheck of width
const update = () => {
const newWidth = fullLabelText.getBBox().width + 10;
labelFullBg.setAttribute("width", newWidth.toString());
isAdjusted = true;
updateAnimFrame = undefined;
};
if (!isAdjusted) {
if (supportsAnimationFrame) {
updateAnimFrame = window.requestAnimationFrame(update);
}
else {
update();
}
}
});

@@ -190,2 +214,5 @@ rowFixed.addEventListener("mouseleave", () => {

fullLabel.style.visibility = "hidden";
if (supportsAnimationFrame && updateAnimFrame !== undefined) {
cancelAnimationFrame(updateAnimFrame);
}
});

@@ -209,4 +236,4 @@ }

}
export function createNameRowBg(y, rowHeight, onClick) {
let rowFixed = svg.newG("row row-fixed");
export function createNameRowBg(y, rowHeight) {
const rowFixed = svg.newG("row row-fixed");
rowFixed.appendChild(svg.newRect({

@@ -220,7 +247,6 @@ "height": rowHeight,

}));
rowFixed.addEventListener("click", onClick);
return rowFixed;
}
export function createRowBg(y, rowHeight, onClick) {
let rowFixed = svg.newG("row row-flex");
export function createRowBg(y, rowHeight) {
const rowFixed = svg.newG("row row-flex");
rowFixed.appendChild(svg.newRect({

@@ -234,4 +260,3 @@ "height": rowHeight,

}));
rowFixed.addEventListener("click", onClick);
return rowFixed;
}
import * as icons from "../../helpers/icons";
import * as misc from "../../helpers/misc";
import { isTabDown, isTabUp, resourceUrlFormatter, } from "../../helpers/misc";
import * as svg from "../../helpers/svg";

@@ -12,2 +12,7 @@ import { getIndicatorIcons } from "./svg-indicators";

}));
const clipPathElFullProto = svg.newClipPath("titleFullClipPath");
clipPathElFullProto.appendChild(svg.newRect({
"height": "100%",
"width": "100%",
}));
const ROW_LEFT_MARGIN = 3;

@@ -19,15 +24,17 @@ // Create row for a single request

const leftColumnWith = context.options.leftColumnWith;
let rowItem = svg.newG(entry.responseDetails.rowClass);
let leftFixedHolder = svg.newSvg("left-fixed-holder", {
const rowItem = svg.newA(entry.responseDetails.rowClass);
rowItem.setAttribute("tabindex", "0");
rowItem.setAttribute("xlink:href", "javascript:void(0)");
const leftFixedHolder = svg.newSvg("left-fixed-holder", {
"width": `${leftColumnWith}%`,
"x": "0",
});
let flexScaleHolder = svg.newSvg("flex-scale-waterfall", {
const flexScaleHolder = svg.newSvg("flex-scale-waterfall", {
"width": `${100 - leftColumnWith}%`,
"x": `${leftColumnWith}%`,
});
let rect = rowSubComponents.createRect(rectData, entry.segments, entry.total);
let rowName = rowSubComponents.createNameRowBg(y, rowHeight, onDetailsOverlayShow);
let rowBar = rowSubComponents.createRowBg(y, rowHeight, onDetailsOverlayShow);
let bgStripe = rowSubComponents.createBgStripe(y, rowHeight, (index % 2 === 0));
const rect = rowSubComponents.createRect(rectData, entry.segments, entry.total);
const rowName = rowSubComponents.createNameRowBg(y, rowHeight);
const rowBar = rowSubComponents.createRowBg(y, rowHeight);
const bgStripe = rowSubComponents.createBgStripe(y, rowHeight, (index % 2 === 0));
let x = ROW_LEFT_MARGIN + maxIconsWidth;

@@ -48,14 +55,50 @@ if (context.options.showMimeTypeIcon) {

x = ROW_LEFT_MARGIN + maxIconsWidth;
let requestNumber = `${index + 1}`;
const requestNumber = `${index + 1}`;
const requestNumberLabel = rowSubComponents.createRequestNumberLabel(x, y, requestNumber, rowHeight, maxNumberWidth);
// 4 is slightly bigger than the hover "glow" around the url
x += maxNumberWidth + 4;
let shortLabel = rowSubComponents.createRequestLabelClipped(x, y, misc.resourceUrlFormatter(entry.url, 40), rowHeight);
let fullLabel = rowSubComponents.createRequestLabelFull(x, y, entry.url, rowHeight);
const shortLabel = rowSubComponents.createRequestLabelClipped(x, y, resourceUrlFormatter(entry.url, 40), rowHeight);
const fullLabel = rowSubComponents.createRequestLabelFull(x, y, entry.url, rowHeight);
// create and attach request block
rowBar.appendChild(rect);
rowSubComponents.appendRequestLabels(rowName, requestNumberLabel, shortLabel, fullLabel);
context.pubSub.subscribeToSpecificOverlayChanges(index, (change) => {
hasOpenOverlay = (change.type === "open");
});
if (index > 0) {
context.pubSub.subscribeToSpecificOverlayChanges(index - 1, (change) => {
hasPrevOpenOverlay = (change.type === "open");
});
}
let hasOpenOverlay;
let hasPrevOpenOverlay;
rowItem.addEventListener("click", (evt) => {
evt.preventDefault();
onDetailsOverlayShow(evt);
});
rowItem.addEventListener("keydown", (evt) => {
// space on enter
if (evt.which === 32 || evt.which === 13) {
evt.preventDefault();
return onDetailsOverlayShow(evt);
}
// tab without open overlays around
if (isTabUp(evt) && !hasPrevOpenOverlay && index > 0) {
rowItem.previousSibling.previousSibling.lastChild.lastChild.dispatchEvent(new MouseEvent("mouseenter"));
return;
}
if (isTabDown(evt) && !hasOpenOverlay) {
if (rowItem.nextSibling && rowItem.nextSibling.nextSibling) {
rowItem.nextSibling.nextSibling.lastChild.lastChild.dispatchEvent(new MouseEvent("mouseenter"));
}
return;
}
});
rowItem.addEventListener("focusout", () => {
rowName.dispatchEvent(new MouseEvent("mouseleave"));
});
flexScaleHolder.appendChild(rowBar);
leftFixedHolder.appendChild(clipPathElProto.cloneNode(true));
leftFixedHolder.appendChild(rowName);
rowItem.appendChild(clipPathElFullProto.cloneNode(true));
rowItem.appendChild(bgStripe);

@@ -62,0 +105,0 @@ rowItem.appendChild(flexScaleHolder);

@@ -15,3 +15,3 @@ /**

*/
let appendSecond = (context, timeHolder, secsTotal, sec, addLabel = false) => {
const appendSecond = (context, timeHolder, secsTotal, sec, addLabel = false) => {
const diagramHeight = context.diagramHeight;

@@ -26,3 +26,3 @@ const secPerc = 100 / secsTotal;

let x = roundNumber(secPerc * sec) + 0.5 + "%";
let css = {};
const css = {};
if (showTextBefore) {

@@ -42,5 +42,5 @@ x = roundNumber(secPerc * sec) - 0.5 + "%";

context.pubSub.subscribeToOverlayChanges((change) => {
let offset = change.combinedOverlayHeight;
const offset = change.combinedOverlayHeight;
// figure out why there is an offset
let scale = (diagramHeight + offset) / (diagramHeight);
const scale = (diagramHeight + offset) / (diagramHeight);
lineEl.setAttribute("transform", `scale(1, ${scale})`);

@@ -62,3 +62,3 @@ if (addLabel) {

export function createTimeScale(context, durationMs) {
let timeHolder = svg.newG("time-scale full-width");
const timeHolder = svg.newG("time-scale full-width");
const subStepMs = Math.ceil(durationMs / 10000) * 200;

@@ -65,0 +65,0 @@ /** steps between each major second marker */

@@ -11,3 +11,3 @@ import { addClass, removeClass } from "../../helpers/dom";

const diagramHeight = context.diagramHeight;
let marksHolder = svg.newG("marker-holder", {
const marksHolder = svg.newG("marker-holder", {
"transform": "scale(1, 1)",

@@ -17,10 +17,10 @@ });

const x = roundNumber(mark.startTime / context.unit);
let markHolder = svg.newG("mark-holder type-" + mark.name.toLowerCase().replace(/([0-9]+[ ]?ms)|\W/g, ""));
let lineHolder = svg.newG("line-holder");
let lineLabelHolder = svg.newG("line-label-holder");
let lineLabel = svg.newTextEl(mark.name, { x: x + "%", y: diagramHeight + 25 });
const markHolder = svg.newG("mark-holder type-" + mark.name.toLowerCase().replace(/([0-9]+[ ]?ms)|\W/g, ""));
const lineHolder = svg.newG("line-holder");
const lineLabelHolder = svg.newG("line-label-holder");
const lineLabel = svg.newTextEl(mark.name, { x: x + "%", y: diagramHeight + 25 });
lineLabel.setAttribute("writing-mode", "tb");
let lineRect;
mark.x = x;
let line = svg.newLine({
const line = svg.newLine({
"x1": x + "%",

@@ -38,3 +38,3 @@ "x2": x + "%",

// would use polyline but can't use percentage for points
let lineConnection = svg.newLine({
const lineConnection = svg.newLine({
"x1": x + "%",

@@ -52,4 +52,4 @@ "x2": mark.x + "%",

context.pubSub.subscribeToOverlayChanges((change) => {
let offset = change.combinedOverlayHeight;
let scale = (diagramHeight + offset) / (diagramHeight);
const offset = change.combinedOverlayHeight;
const scale = (diagramHeight + offset) / (diagramHeight);
line.setAttribute("transform", `scale(1, ${scale})`);

@@ -65,3 +65,3 @@ lineLabelHolder.setAttribute("transform", `translate(0, ${offset})`);

let isClickActive = false;
let onLabelMouseEnter = () => {
const onLabelMouseEnter = () => {
if (!isHoverActive) {

@@ -80,3 +80,3 @@ // move marker to top

};
let onLabelMouseLeave = () => {
const onLabelMouseLeave = () => {
isHoverActive = false;

@@ -87,3 +87,3 @@ if (!isClickActive) {

};
let onLabelClick = () => {
const onLabelClick = () => {
if (isClickActive) {

@@ -121,3 +121,3 @@ // deselect

export function createLineRect(context, entry) {
let holder = svg.newG(`line-mark-holder line-marker-${toCssClass(entry.name)}`);
const holder = svg.newG(`line-mark-holder line-marker-${toCssClass(entry.name)}`);
holder.appendChild(svg.newTitle(entry.name.replace(/^startTimer-/, "")));

@@ -124,0 +124,0 @@ holder.appendChild(svg.newRect({

import * as svg from "../helpers/svg";
import { requestTypeToCssClass } from "../transformers/styling-converters";
import OverlayManager from "./details-overlay/overlay-manager";
import PubSub from "./details-overlay/pub-sub";
import { PubSub } from "./details-overlay/pub-sub";
import * as row from "./row/svg-row";

@@ -43,6 +43,6 @@ import * as alignmentHelper from "./sub-components/svg-alignment-helper";

*/
function createContext(data, options, entriesToShow, overlayHolder) {
function createContext(data, options, entriesToShow) {
const unit = data.durationMs / 100;
const diagramHeight = (entriesToShow.length + 1) * options.rowHeight;
let context = {
const context = {
diagramHeight,

@@ -55,3 +55,3 @@ overlayManager: undefined,

// `overlayManager` needs the `context` reference, so it's attached later
context.overlayManager = new OverlayManager(context, overlayHolder);
context.overlayManager = new OverlayManager(context);
return context;

@@ -71,17 +71,17 @@ }

/** Holder of request-details overlay */
let overlayHolder = svg.newG("overlays");
const context = createContext(data, options, entriesToShow, overlayHolder);
const overlayHolder = svg.newG("overlays");
/** Holds all rows */
const rowHolder = svg.newG("rows-holder");
const context = createContext(data, options, entriesToShow);
/** full height of the SVG chart in px */
const chartHolderHeight = getSvgHeight(data.marks, context.diagramHeight);
/** Main SVG Element that holds all data */
let timeLineHolder = svg.newSvg("water-fall-chart", {
const timeLineHolder = svg.newSvg("water-fall-chart", {
"height": chartHolderHeight,
});
/** Holder for scale, event and marks */
let scaleAndMarksHolder = svg.newSvg("scale-and-marks-holder", {
const scaleAndMarksHolder = svg.newSvg("scale-and-marks-holder", {
"width": `${100 - options.leftColumnWith}%`,
"x": `${options.leftColumnWith}%`,
});
/** Holds all rows */
let rowHolder = svg.newG("rows-holder");
/** Holder for on-hover vertical comparison bars */

@@ -92,3 +92,3 @@ let hoverOverlayHolder;

hoverOverlayHolder = svg.newG("hover-overlays");
let hoverEl = alignmentHelper.createAlignmentLines(context.diagramHeight);
const hoverEl = alignmentHelper.createAlignmentLines(context.diagramHeight);
hoverOverlayHolder.appendChild(hoverEl.startline);

@@ -114,3 +114,3 @@ hoverOverlayHolder.appendChild(hoverEl.endline);

const maxNumberWidth = svg.getNodeTextWidth(svg.newTextEl(`${widestRequestNumber}`), true);
let barEls = [];
const rowItems = [];
function getChartHeight() {

@@ -142,8 +142,9 @@ return chartHolderHeight + context.overlayManager.getCombinedOverlayHeight();

};
let showDetailsOverlay = () => {
context.overlayManager.toggleOverlay(i, y + options.rowHeight, detailsHeight, entry, barEls);
const showDetailsOverlay = () => {
context.overlayManager.toggleOverlay(i, y + options.rowHeight, detailsHeight, entry, rowItems);
};
let rowItem = row.createRow(context, i, maxIconsWidth, maxNumberWidth, rectData, entry, showDetailsOverlay);
barEls.push(rowItem);
const rowItem = row.createRow(context, i, maxIconsWidth, maxNumberWidth, rectData, entry, showDetailsOverlay);
rowItems.push(rowItem);
rowHolder.appendChild(rowItem);
rowHolder.appendChild(svg.newG("row-overlay-holder"));
}

@@ -150,0 +151,0 @@ // Main loop to render rows with blocks

{
"name": "perf-cascade",
"version": "1.4.0",
"version": "2.0.0",
"description": "Har file visualizer",

@@ -41,20 +41,20 @@ "main": "./index.js",

"grunt-bump": "^0.8.0",
"grunt-contrib-clean": "^1.0.0",
"grunt-contrib-clean": "^1.1.0",
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-uglify": "^2.2.0",
"grunt-contrib-uglify": "^2.3.0",
"grunt-contrib-watch": "^1.0.0",
"grunt-gh-pages": "^2.0.0",
"grunt-run": "^0.6.0",
"grunt-tslint": "^4.0.1",
"grunt-tslint": "^5.0.1",
"live-server": "^1.2.0",
"load-grunt-config": "^0.19.2",
"tsify": "^3.0.1",
"tslint": "^4.5.1",
"typescript": "^2.2.1",
"tslint": "^5.2.0",
"typescript": "^2.3.2",
"whatwg-fetch": "^2.0.3"
},
"dependencies": {
"@types/har-format": "^1.2.0"
"@types/har-format": "^1.2.1"
}
}

@@ -14,2 +14,8 @@ /**

/**
* Helper to recursively find parent with the `className` class
* @param base `Element` to start from
* @param className class that the parent should have
*/
export declare function getParentByClassName(base: Element, className: string): any;
/**
* Removes all child DOM nodes from `el`

@@ -19,1 +25,7 @@ * @param {Element} el

export declare function removeChildren<T extends Element>(el: T): T;
/**
* Get last element of `NodeList`
* @param list NodeListOf e.g. return value of `getElementsByClassName`
*/
export declare function getLastItemOfNodeList<T extends Node>(list: NodeListOf<T>): T;
export declare function forEachNodeList<T extends Node>(els: NodeListOf<T>, fn: (el: T, index: number) => any): void;

@@ -8,2 +8,14 @@ /**

/**
* Returns Index of first match to `predicate` in `arr`
* @param arr Array to search
* @param predicate Function that returns true for a match
*/
export declare function findIndex<T>(arr: T[], predicate: (el: T, index: number) => boolean): number;
/**
* Returns first match to `predicate` in `arr`
* @param arr Array to search
* @param predicate Function that returns true for a match
*/
export declare function find<T>(arr: T[], predicate: (el: T, index: number) => boolean): T;
/**
* Formats and shortens a url for ui

@@ -42,1 +54,11 @@ * @param {string} url

export declare function pluralize(word: string, count: number): string;
/**
* Check if event is `tab` + `shift` key, to move to previous input element
* @param {KeyboardEvent} evt Keyboard event
*/
export declare function isTabUp(evt: KeyboardEvent): boolean;
/**
* Check if event is only `tab` key, to move to next input element
* @param {KeyboardEvent} evt Keyboard event
*/
export declare function isTabDown(evt: KeyboardEvent): boolean;

@@ -1,4 +0,4 @@

export declare type StringToStringOrNumberMap = {
export interface StringToStringOrNumberMap {
[key: string]: string | number;
};
}
export declare type DomAttributeMap = StringToStringOrNumberMap;

@@ -15,2 +15,3 @@ export declare type CssStyleMap = StringToStringOrNumberMap;

export declare function newTextEl(text: string, attributes?: DomAttributeMap, css?: CssStyleMap): SVGTextElement;
export declare function newPath(d: string): SVGPathElement;
/**

@@ -17,0 +18,0 @@ * Measure the width of a SVGTextElement in px

@@ -1,4 +0,4 @@

import { OverlayChangeEvent, OverlayChangeSubscriber } from "./open-overlay";
import { OverlayManager } from "../waterfall/details-overlay/overlay-manager";
import { PubSub } from "../waterfall/details-overlay/pub-sub";
import { ChartRenderOption } from "./options";
import { WaterfallEntry } from "./waterfall";
/**

@@ -10,5 +10,5 @@ * Context object that is passed to (usually stateless) child-functions

/** Publish and Subscribe instance for overlay updates */
pubSub: PubSubClass;
pubSub: PubSub;
/** Overlay (popup) instance manager */
overlayManager: OverlayManagerClass;
overlayManager: OverlayManager;
/** horizontal unit (duration in ms of 1%) */

@@ -21,15 +21,1 @@ unit: number;

}
export interface PubSubClass {
subscribeToOverlayChanges: (fn: OverlayChangeSubscriber) => void;
publishToOverlayChanges: (change: OverlayChangeEvent) => void;
}
export interface OverlayManagerClass {
/** all open overlays height combined */
getCombinedOverlayHeight: () => number;
/** Opens an overlay - rerenders others */
openOverlay: (index: number, y: number, detailsHeight: number, entry: WaterfallEntry, barEls: SVGGElement[]) => void;
/** toggles an overlay - rerenders others */
toggleOverlay: (index: number, y: number, detailsHeight: number, entry: WaterfallEntry, barEls: SVGGElement[]) => void;
/** closes on overlay - rerenders others internally */
closeOverlay: (index: number, detailsHeight: number, barEls: SVGGElement[]) => void;
}

@@ -22,4 +22,4 @@ import { WaterfallEntry } from "./waterfall";

type: EventType;
/** list of currenly open overlays */
openOverlays: OpenOverlay[];
/** index that triggerd the change */
changedIndex?: number;
combinedOverlayHeight: number;

@@ -26,0 +26,0 @@ }

import { WaterfallEntry } from "../../typing/waterfall";
/**
* Creates the HTML body for the overlay
*
* _All tabable elements are set to `tabindex="-1"` to avoid tabing issues_
* @param requestID ID
* @param detailsHeight
* @param entry
*/
export declare function createDetailsBody(requestID: number, detailsHeight: number, entry: WaterfallEntry): HTMLHtmlElement;

@@ -1,10 +0,20 @@

import { Context, OverlayManagerClass } from "../../typing/context";
import { Context } from "../../typing/context";
import { WaterfallEntry } from "../../typing/waterfall";
/** Overlay (popup) instance manager */
export default class OverlayManager implements OverlayManagerClass {
declare class OverlayManager {
private context;
private overlayHolder;
private static showFullName;
/**
* Keypress Event handler for fist el in Overlay,
* to manage highlighting of the element above
*/
private static firstElKeypress;
/**
* Keypress Event handler for last el in Overlay,
* to manage highlighting of the element below
*/
private static lastElKeypress;
/** Collection of currely open overlays */
private openOverlays;
constructor(context: Context, overlayHolder: SVGGElement);
constructor(context: Context);
/** all open overlays height combined */

@@ -15,20 +25,19 @@ getCombinedOverlayHeight(): number;

*/
openOverlay(index: number, y: number, detailsHeight: number, entry: WaterfallEntry, barEls: SVGGElement[]): void;
openOverlay(index: number, y: number, detailsHeight: number, entry: WaterfallEntry, rowItems: SVGAElement[]): void;
/**
* Toggles an overlay - rerenders others
*/
toggleOverlay(index: number, y: number, detailsHeight: number, entry: WaterfallEntry, barEls: SVGGElement[]): void;
toggleOverlay(index: number, y: number, detailsHeight: number, entry: WaterfallEntry, rowItems: SVGAElement[]): void;
/**
* closes on overlay - rerenders others internally
*/
closeOverlay(index: number, detailsHeight: number, barEls: SVGGElement[]): void;
closeOverlay(index: number, detailsHeight: number, rowItems: SVGAElement[]): void;
/**
* sets the offset for request-bars
* @param {SVGGElement[]} barEls
* Sets the offset for a request-bar
* @param {SVGAElement[]} rowItems
* @param {number} offset
*/
private realignBars(barEls);
/** y offset to it's default y position */
private getOverlayOffset(rowIndex);
private realignRow;
/**
* removes all overlays and renders them again
* Renders / Adjusts Overlays
*

@@ -38,5 +47,7 @@ * @summary this is to re-set the "y" position since there is a bug in chrome with

* @param {number} detailsHeight
* @param {SVGGElement} overlayHolder
* @param {SVGAElement[]} rowItems
*/
private renderOverlays(detailsHeight);
private renderOverlays(detailsHeight, rowItems);
}
export { OverlayManager };
export default OverlayManager;

@@ -1,7 +0,15 @@

import { PubSubClass } from "../../typing/context";
import { OverlayChangeEvent, OverlayChangeSubscriber } from "../../typing/open-overlay";
export default class PubSub implements PubSubClass {
declare class PubSub {
private subscribers;
/** Call `fn` whenever a new change is publisched on OverlayChanges channel */
subscribeToOverlayChanges(fn: OverlayChangeSubscriber): void;
/**
* Call `fn` whenever a new change for `index` are publisched
* on OverlayChanges channel
*/
subscribeToSpecificOverlayChanges(index: number, fn: OverlayChangeSubscriber): void;
/** Publish a change on OverlayChanges channel */
publishToOverlayChanges(change: OverlayChangeEvent): void;
}
export { PubSub };
export default PubSub;
import { OpenOverlay } from "../../typing/open-overlay";
export declare function forEach(els: NodeListOf<Element>, fn: (el: Element, index: number) => any): void;
export declare function createRowInfoOverlay(overlay: OpenOverlay, y: number, detailsHeight: number): SVGGElement;

@@ -54,3 +54,3 @@ import { RectData } from "../../typing/rect-data";

export declare function createBgStripe(y: number, height: number, isEven: boolean): SVGRectElement;
export declare function createNameRowBg(y: number, rowHeight: number, onClick: EventListener): SVGGElement;
export declare function createRowBg(y: number, rowHeight: number, onClick: EventListener): SVGGElement;
export declare function createNameRowBg(y: number, rowHeight: number): SVGGElement;
export declare function createRowBg(y: number, rowHeight: number): SVGGElement;
import { Context } from "../../typing/context";
import { RectData } from "../../typing/rect-data";
import { WaterfallEntry } from "../../typing/waterfall";
export declare function createRow(context: Context, index: number, maxIconsWidth: number, maxNumberWidth: number, rectData: RectData, entry: WaterfallEntry, onDetailsOverlayShow: EventListener): SVGGElement;
export declare function createRow(context: Context, index: number, maxIconsWidth: number, maxNumberWidth: number, rectData: RectData, entry: WaterfallEntry, onDetailsOverlayShow: EventListener): SVGAElement;

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc