zlibjs
Version:
zlib, gzip and zip implementation in JavaScript
14 lines • 138 kB
JavaScript
/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';var k=void 0,l=!0,aa=this;function s(a,d){var b=a.split("."),c=aa;!(b[0]in c)&&c.execScript&&c.execScript("var "+b[0]);for(var e;b.length&&(e=b.shift());)!b.length&&d!==k?c[e]=d:c=c[e]?c[e]:c[e]={}};var x="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView;function y(a){var d=a.length,b=0,c=Number.POSITIVE_INFINITY,e,g,f,p,h,q,m,n,r,B;for(n=0;n<d;++n)a[n]>b&&(b=a[n]),a[n]<c&&(c=a[n]);e=1<<b;g=new (x?Uint32Array:Array)(e);f=1;p=0;for(h=2;f<=b;){for(n=0;n<d;++n)if(a[n]===f){q=0;m=p;for(r=0;r<f;++r)q=q<<1|m&1,m>>=1;B=f<<16|n;for(r=q;r<e;r+=h)g[r]=B;++p}++f;p<<=1;h<<=1}return[g,b,c]};function z(a,d,b){this.u=[];this.i=b?b:32768;this.v=0;this.a=d===k?0:d;this.d=this.e=0;this.input=x?new Uint8Array(a):a;this.b=new (x?Uint8Array:Array)(this.i);this.c=0;this.t=this.l=!1;this.f=0;this.status=A}var A=0;
z.prototype.j=function(a,d){var b=!1;a!==k&&(this.input=a);d!==k&&(this.a=d);for(;!b;)switch(this.status){case A:case 1:var c;var e=k;this.status=1;H(this);if(0>(e=I(this,3)))J(this),c=-1;else{e&1&&(this.l=l);e>>>=1;switch(e){case 0:this.h=0;break;case 1:this.h=1;break;case 2:this.h=2;break;default:throw Error("unknown BTYPE: "+e);}this.status=2;c=k}0>c&&(b=l);break;case 2:case 3:switch(this.h){case 0:var g;var f=k,p=k,h=this.input,q=this.a;this.status=3;if(q+4>=h.length)g=-1;else{f=h[q++]|h[q++]<<
8;p=h[q++]|h[q++]<<8;if(f===~p)throw Error("invalid uncompressed block header: length verify");this.d=this.e=0;this.a=q;this.m=f;this.status=4;g=k}0>g&&(b=l);break;case 1:this.status=3;this.k=ba;this.n=ca;this.status=4;break;case 2:var m;a:{var n=k,r=k,B=k,V=new (x?Uint8Array:Array)(K.length),W=k;this.status=3;H(this);n=I(this,5)+257;r=I(this,5)+1;B=I(this,4)+4;if(0>n||0>r||0>B)J(this),m=-1;else{try{for(var w=k,D=k,E=0,C=k,u=k,t=k,X=k,t=0;t<B;++t){if(0>(w=I(this,3)))throw Error("not enough input");
V[K[t]]=w}W=y(V);u=new (x?Uint8Array:Array)(n+r);t=0;for(X=n+r;t<X;){D=O(this,W);if(0>D)throw Error("not enough input");switch(D){case 16:if(0>(w=I(this,2)))throw Error("not enough input");for(C=3+w;C--;)u[t++]=E;break;case 17:if(0>(w=I(this,3)))throw Error("not enough input");for(C=3+w;C--;)u[t++]=0;E=0;break;case 18:if(0>(w=I(this,7)))throw Error("not enough input");for(C=11+w;C--;)u[t++]=0;E=0;break;default:E=u[t++]=D}}new (x?Uint8Array:Array)(n);new (x?Uint8Array:Array)(r);this.k=x?y(u.subarray(0,
n)):y(u.slice(0,n));this.n=x?y(u.subarray(n)):y(u.slice(n))}catch(pa){J(this);m=-1;break a}this.status=4;m=0}}0>m&&(b=l)}break;case 4:case 5:switch(this.h){case 0:var L;a:{var Y=this.input,F=this.a,M=this.b,G=this.c,N=this.m;for(this.status=5;N--;){G===M.length&&(M=P(this,{o:2}));if(F>=Y.length){this.a=F;this.c=G;this.m=N+1;L=-1;break a}M[G++]=Y[F++]}0>N&&(this.status=6);this.a=F;this.c=G;L=0}0>L&&(b=l);break;case 1:case 2:0>da(this)&&(b=l)}break;case 6:this.l?b=l:this.status=A}var Z,v=this.c,$;Z=
this.t?x?new Uint8Array(this.b.subarray(this.f,v)):this.b.slice(this.f,v):x?this.b.subarray(this.f,v):this.b.slice(this.f,v);this.f=v;v>32768+this.i&&(this.c=this.f=32768,x?($=this.b,this.b=new Uint8Array(this.i+32768),this.b.set($.subarray(v-32768,v))):this.b=this.b.slice(v-32768));return Z};
var ea=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],K=x?new Uint16Array(ea):ea,fa=[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,258,258],ga=x?new Uint16Array(fa):fa,ha=[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,0,0],ia=x?new Uint8Array(ha):ha,ja=[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],ka=x?new Uint16Array(ja):ja,la=[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],ma=x?new Uint8Array(la):la,Q=new (x?Uint8Array:Array)(288),R,na;R=0;for(na=Q.length;R<na;++R)Q[R]=143>=R?8:255>=R?9:279>=R?7:8;var ba=y(Q),S=new (x?Uint8Array:Array)(30),T,oa;T=0;for(oa=S.length;T<oa;++T)S[T]=5;var ca=y(S);function I(a,d){for(var b=a.e,c=a.d,e=a.input,g=a.a,f;c<d;){if(e.length<=g)return-1;f=e[g++];b|=f<<c;c+=8}f=b&(1<<d)-1;a.e=b>>>d;a.d=c-d;a.a=g;return f}
function O(a,d){for(var b=a.e,c=a.d,e=a.input,g=a.a,f=d[0],p=d[1],h,q,m;c<p;){if(e.length<=g)return-1;h=e[g++];b|=h<<c;c+=8}q=f[b&(1<<p)-1];m=q>>>16;if(m>c)throw Error("invalid code length: "+m);a.e=b>>m;a.d=c-m;a.a=g;return q&65535}function H(a){a.s=a.a;a.r=a.d;a.q=a.e}function J(a){a.a=a.s;a.d=a.r;a.e=a.q}
function da(a){var d=a.b,b=a.c,c,e,g,f,p=a.k,h=a.n,q=d.length,m;for(a.status=5;;){H(a);c=O(a,p);if(0>c)return a.c=b,J(a),-1;if(256===c)break;if(256>c)b===q&&(d=P(a),q=d.length),d[b++]=c;else{e=c-257;f=ga[e];if(0<ia[e]){m=I(a,ia[e]);if(0>m)return a.c=b,J(a),-1;f+=m}c=O(a,h);if(0>c)return a.c=b,J(a),-1;g=ka[c];if(0<ma[c]){m=I(a,ma[c]);if(0>m)return a.c=b,J(a),-1;g+=m}b+f>=q&&(d=P(a),q=d.length);for(;f--;)d[b]=d[b++-g];if(a.a===a.input.length)return a.c=b,-1}}for(;8<=a.d;)a.d-=8,a.a--;a.c=b;a.status=
6}function P(a,d){var b,c=a.input.length/a.a+1|0,e,g,f,p=a.input,h=a.b;d&&("number"===typeof d.o&&(c=d.o),"number"===typeof d.p&&(c+=d.p));2>c?(e=(p.length-a.a)/a.k[2],f=258*(e/2)|0,g=f<h.length?h.length+f:h.length<<1):g=h.length*c;x?(b=new Uint8Array(g),b.set(h)):b=h;a.b=b;return a.b};function U(a){this.input=a===k?new (x?Uint8Array:Array):a;this.a=0;this.g=new z(this.input,this.a);this.b=this.g.b}
U.prototype.j=function(a){var d;if(a!==k)if(x){var b=new Uint8Array(this.input.length+a.length);b.set(this.input,0);b.set(a,this.input.length);this.input=b}else this.input=this.input.concat(a);var c;if(c=this.method===k){var e;var g=this.a,f=this.input,p=f[g++],h=f[g++];if(p===k||h===k)e=-1;else{switch(p&15){case 8:this.method=8;break;default:throw Error("unsupported compression method");}if(0!==((p<<8)+h)%31)throw Error("invalid fcheck flag:"+((p<<8)+h)%31);if(h&32)throw Error("fdict flag is not supported");
this.a=g;e=k}c=0>e}if(c)return new (x?Uint8Array:Array);d=this.g.j(this.input,this.a);0!==this.g.a&&(this.input=x?this.input.subarray(this.g.a):this.input.slice(this.g.a),this.a=0);return d};s("Zlib.InflateStream",U);s("Zlib.InflateStream.prototype.decompress",U.prototype.j);}).call(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBQWxCLE1BQTNCLENBQXVDLElBQUFDLEVBQXZDLENBQ2tCLEVBQTNCLEdBQUksSUFBQXNHLEVBQUF0RyxFQUFKLEdBQ0UsSUFBQUQsTUFHQSxDQUhheEIsQ0FBQSxDQUNYLElBQUF3QixNQUFBNEQsU0FBQSxDQUFvQixJQUFBMkMsRUFBQXRHLEVBQXBCLENBRFcsQ0FFWCxJQUFBRCxNQUFBNkQsTUFBQSxDQUFpQixJQUFBMEMsRUFBQXRHLEVBQWpCLENBQ0YsQ0FBQSxJQUFBQSxFQUFBLENBQVUsQ0FKWixDQW9CQSxPQUFPbUUsRUE5Q2lELEMsQ0oyekN4RHZHLENBQUEsQ012MUNnQmlKLG9CTnUxQ2hCLENNdjFDc0NSLENOdTFDdEMsQ0FBQXpJLEVBQUEsQ01yMUNBaUoseUNOcTFDQSxDTXAxQ0FSLENBQUFyRixVQUFBQyxFTm8xQ0E7Iiwic291cmNlcyI6WyJjbG9zdXJlLXByaW1pdGl2ZXMvYmFzZS5qcyIsImRlZmluZS90eXBlZGFycmF5L2h5YnJpZC5qcyIsInNyYy9odWZmbWFuLmpzIiwic3JjL3Jhd2luZmxhdGVfc3RyZWFtLmpzIiwic3JjL2luZmxhdGVfc3RyZWFtLmpzIiwic3JjL3psaWIuanMiLCJleHBvcnQvaW5mbGF0ZV9zdHJlYW0uanMiXSwibmFtZXMiOlsiZ29vZy5nbG9iYWwiLCJnb29nLmV4cG9ydFBhdGhfIiwibmFtZSIsIm9wdF9vYmplY3QiLCJwYXJ0cyIsInNwbGl0IiwiY3VyIiwiZXhlY1NjcmlwdCIsInBhcnQiLCJsZW5ndGgiLCJzaGlmdCIsIkpTQ29tcGlsZXJfYWxpYXNfVk9JRCIsIlVTRV9UWVBFREFSUkFZIiwiVWludDhBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJEYXRhVmlldyIsIlpsaWIuSHVmZm1hbi5idWlsZEh1ZmZtYW5UYWJsZSIsImxlbmd0aHMiLCJsaXN0U2l6ZSIsIm1heENvZGVMZW5ndGgiLCJtaW5Db2RlTGVuZ3RoIiwiTnVtYmVyIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJzaXplIiwidGFibGUiLCJiaXRMZW5ndGgiLCJjb2RlIiwic2tpcCIsInJldmVyc2VkIiwicnRlbXAiLCJpIiwiaiIsInZhbHVlIiwiQXJyYXkiLCJabGliLlJhd0luZmxhdGVTdHJlYW0iLCJpbnB1dCIsImlwIiwib3B0X2J1ZmZlcnNpemUiLCJibG9ja3MiLCJidWZmZXJTaXplIiwiWkxJQl9TVFJFQU1fUkFXX0lORkxBVEVfQlVGRkVSX1NJWkUiLCJ0b3RhbHBvcyIsImJpdHNidWZsZW4iLCJiaXRzYnVmIiwib3V0cHV0Iiwib3AiLCJyZXNpemUiLCJiZmluYWwiLCJzcCIsInN0YXR1cyIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuSU5JVElBTElaRUQiLCJJTklUSUFMSVpFRCIsInByb3RvdHlwZSIsImRlY29tcHJlc3MiLCJabGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLmRlY29tcHJlc3MiLCJuZXdJbnB1dCIsInN0b3AiLCJCTE9DS19IRUFERVJfU1RBUlQiLCJoZHIiLCJyZWFkQmxvY2tIZWFkZXIiLCJzYXZlXyIsInJlYWRCaXRzIiwicmVzdG9yZV8iLCJKU0NvbXBpbGVyX2FsaWFzX1RSVUUiLCJjdXJyZW50QmxvY2tUeXBlIiwiVU5DT01QUkVTU0VEIiwiRklYRUQiLCJEWU5BTUlDIiwiRXJyb3IiLCJCTE9DS19IRUFERVJfRU5EIiwiQkxPQ0tfQk9EWV9TVEFSVCIsImxlbiIsIm5sZW4iLCJyZWFkVW5jb21wcmVzc2VkQmxvY2tIZWFkZXIiLCJibG9ja0xlbmd0aCIsIkJMT0NLX0JPRFlfRU5EIiwicGFyc2VGaXhlZEh1ZmZtYW5CbG9jayIsImxpdGxlblRhYmxlIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkZpeGVkTGl0ZXJhbExlbmd0aFRhYmxlIiwiZGlzdFRhYmxlIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkZpeGVkRGlzdGFuY2VUYWJsZSIsImhsaXQiLCJoZGlzdCIsImhjbGVuIiwiY29kZUxlbmd0aHMiLCJabGliLlJhd0luZmxhdGVTdHJlYW0uT3JkZXIubGVuZ3RoIiwiY29kZUxlbmd0aHNUYWJsZSIsInBhcnNlRHluYW1pY0h1ZmZtYW5CbG9jayIsImJpdHMiLCJwcmV2IiwicmVwZWF0IiwibGVuZ3RoVGFibGUiLCJpbCIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5PcmRlciIsInJlYWRDb2RlQnlUYWJsZSIsInN1YmFycmF5Iiwic2xpY2UiLCJlIiwiREVDT0RFX0JMT0NLX1NUQVJUIiwicGFyc2VVbmNvbXByZXNzZWRCbG9jayIsImV4cGFuZEJ1ZmZlciIsIkRFQ09ERV9CTE9DS19FTkQiLCJkZWNvZGVIdWZmbWFuIiwiYnVmZmVyIiwiY29uY2F0QnVmZmVyIiwidG1wIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLk1heEJhY2t3YXJkTGVuZ3RoIiwic2V0IiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkxlbmd0aENvZGVUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5MZW5ndGhFeHRyYVRhYmxlIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkRpc3RDb2RlVGFibGUiLCJabGliLlJhd0luZmxhdGVTdHJlYW0uRGlzdEV4dHJhVGFibGUiLCJabGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLnJlYWRCaXRzIiwib2N0ZXQiLCJabGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLnJlYWRDb2RlQnlUYWJsZSIsImNvZGVUYWJsZSIsImNvZGVXaXRoTGVuZ3RoIiwiY29kZUxlbmd0aCIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuc2F2ZV8iLCJpcF8iLCJiaXRzYnVmbGVuXyIsImJpdHNidWZfIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5yZXN0b3JlXyIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuZGVjb2RlSHVmZm1hbiIsInRpIiwiY29kZURpc3QiLCJsaXRsZW4iLCJkaXN0Iiwib2xlbmd0aCIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuZXhwYW5kQnVmZmVyIiwib3B0X3BhcmFtIiwicmF0aW8iLCJtYXhIdWZmQ29kZSIsIm5ld1NpemUiLCJtYXhJbmZsYXRlU2l6ZSIsImZpeFJhdGlvIiwiYWRkUmF0aW8iLCJabGliLkluZmxhdGVTdHJlYW0iLCJyYXdpbmZsYXRlIiwiWmxpYi5JbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5kZWNvbXByZXNzIiwiY29uY2F0IiwiY21mIiwiZmxnIiwiREVGTEFURSIsIm1ldGhvZCIsInB1YmxpY1BhdGgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMDYgVGhlIENsb3N1cmUgTGlicmFyeSBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMtSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBCb290c3RyYXAgZm9yIHRoZSBHb29nbGUgSlMgTGlicmFyeSAoQ2xvc3VyZSkuXG4gKlxuICogSW4gdW5jb21waWxlZCBtb2RlIGJhc2UuanMgd2lsbCB3cml0ZSBvdXQgQ2xvc3VyZSdzIGRlcHMgZmlsZSwgdW5sZXNzIHRoZVxuICogZ2xvYmFsIDxjb2RlPkNMT1NVUkVfTk9fREVQUzwvY29kZT4gaXMgc2V0IHRvIHRydWUuICBUaGlzIGFsbG93cyBwcm9qZWN0cyB0b1xuICogaW5jbHVkZSB0aGVpciBvd24gZGVwcyBmaWxlKHMpIGZyb20gZGlmZmVyZW50IGxvY2F0aW9ucy5cbiAqXG4gKi9cblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IE92ZXJyaWRkZW4gdG8gdHJ1ZSBieSB0aGUgY29tcGlsZXIgd2hlbiAtLWNsb3N1cmVfcGFzc1xuICogICAgIG9yIC0tbWFya19hc19jb21waWxlZCBpcyBzcGVjaWZpZWQuXG4gKi9cbnZhciBDT01QSUxFRCA9IGZhbHNlO1xuXG5cbi8qKlxuICogQmFzZSBuYW1lc3BhY2UgZm9yIHRoZSBDbG9zdXJlIGxpYnJhcnkuICBDaGVja3MgdG8gc2VlIGdvb2cgaXNcbiAqIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBzY29wZSBiZWZvcmUgYXNzaWduaW5nIHRvIHByZXZlbnRcbiAqIGNsb2JiZXJpbmcgaWYgYmFzZS5qcyBpcyBsb2FkZWQgbW9yZSB0aGFuIG9uY2UuXG4gKlxuICogQGNvbnN0XG4gKi9cbnZhciBnb29nID0gZ29vZyB8fCB7fTsgLy8gSWRlbnRpZmllcyB0aGlzIGZpbGUgYXMgdGhlIENsb3N1cmUgYmFzZS5cblxuXG4vKipcbiAqIFJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIGNvbnRleHQuICBJbiBtb3N0IGNhc2VzIHRoaXMgd2lsbCBiZSAnd2luZG93Jy5cbiAqL1xuZ29vZy5nbG9iYWwgPSB0aGlzO1xuXG5cbi8qKlxuICogQGRlZmluZSB7Ym9vbGVhbn0gREVCVUcgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGRlYnVnZ2luZyBjb2RlXG4gKiB0aGF0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gYSBwcm9kdWN0aW9uIGpzX2JpbmFyeSBjYW4gYmUgZWFzaWx5IHN0cmlwcGVkXG4gKiBieSBzcGVjaWZ5aW5nIC0tZGVmaW5lIGdvb2cuREVCVUc9ZmFsc2UgdG8gdGhlIEpTQ29tcGlsZXIuIEZvciBleGFtcGxlLCBtb3N0XG4gKiB0b1N0cmluZygpIG1ldGhvZHMgc2hvdWxkIGJlIGRlY2xhcmVkIGluc2lkZSBhbiBcImlmIChnb29nLkRFQlVHKVwiIGNvbmRpdGlvbmFsXG4gKiBiZWNhdXNlIHRoZXkgYXJlIGdlbmVyYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kIGl0IGlzIGRpZmZpY3VsdFxuICogZm9yIHRoZSBKU0NvbXBpbGVyIHRvIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBhcmUgdXNlZC5cbiAqL1xuZ29vZy5ERUJVRyA9IHRydWU7XG5cblxuLyoqXG4gKiBAZGVmaW5lIHtzdHJpbmd9IExPQ0FMRSBkZWZpbmVzIHRoZSBsb2NhbGUgYmVpbmcgdXNlZCBmb3IgY29tcGlsYXRpb24uIEl0IGlzXG4gKiB1c2VkIHRvIHNlbGVjdCBsb2NhbGUgc3BlY2lmaWMgZGF0YSB0byBiZSBjb21waWxlZCBpbiBqcyBiaW5hcnkuIEJVSUxEIHJ1bGVcbiAqIGNhbiBzcGVjaWZ5IHRoaXMgdmFsdWUgYnkgXCItLWRlZmluZSBnb29nLkxPQ0FMRT08bG9jYWxlX25hbWU+XCIgYXMgSlNDb21waWxlclxuICogb3B0aW9uLlxuICpcbiAqIFRha2UgaW50byBhY2NvdW50IHRoYXQgdGhlIGxvY2FsZSBjb2RlIGZvcm1hdCBpcyBpbXBvcnRhbnQuIFlvdSBzaG91bGQgdXNlXG4gKiB0aGUgY2Fub25pY2FsIFVuaWNvZGUgZm9ybWF0IHdpdGggaHlwaGVuIGFzIGEgZGVsaW1pdGVyLiBMYW5ndWFnZSBtdXN0IGJlXG4gKiBsb3dlcmNhc2UsIExhbmd1YWdlIFNjcmlwdCAtIENhcGl0YWxpemVkLCBSZWdpb24gLSBVUFBFUkNBU0UuXG4gKiBUaGVyZSBhcmUgZmV3IGV4YW1wbGVzOiBwdC1CUiwgZW4sIGVuLVVTLCBzci1MYXRpbi1CTywgemgtSGFucy1DTi5cbiAqXG4gKiBTZWUgbW9yZSBpbmZvIGFib3V0IGxvY2FsZSBjb2RlcyBoZXJlOlxuICogaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvI1VuaWNvZGVfTGFuZ3VhZ2VfYW5kX0xvY2FsZV9JZGVudGlmaWVyc1xuICpcbiAqIEZvciBsYW5ndWFnZSBjb2RlcyB5b3Ugc2hvdWxkIHVzZSB2YWx1ZXMgZGVmaW5lZCBieSBJU08gNjkzLTEuIFNlZSBpdCBoZXJlXG4gKiBodHRwOi8vd3d3LnczLm9yZy9XQUkvRVIvSUcvZXJ0L2lzbzYzOS5odG0uIFRoZXJlIGlzIG9ubHkgb25lIGV4Y2VwdGlvbiBmcm9tXG4gKiB0aGlzIHJ1bGU6IHRoZSBIZWJyZXcgbGFuZ3VhZ2UuIEZvciBsZWdhY3kgcmVhc29ucyB0aGUgb2xkIGNvZGUgKGl3KSBzaG91bGRcbiAqIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgbmV3IGNvZGUgKGhlKSwgc2VlIGh0dHA6Ly93aWtpL01haW4vSUlJU3lub255bXMuXG4gKi9cbmdvb2cuTE9DQUxFID0gJ2VuJzsgIC8vIGRlZmF1bHQgdG8gZW5cblxuXG4vKipcbiAqIENyZWF0ZXMgb2JqZWN0IHN0dWJzIGZvciBhIG5hbWVzcGFjZS4gIFRoZSBwcmVzZW5jZSBvZiBvbmUgb3IgbW9yZVxuICogZ29vZy5wcm92aWRlKCkgY2FsbHMgaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBkZWZpbmVzIHRoZSBnaXZlblxuICogb2JqZWN0cy9uYW1lc3BhY2VzLiAgQnVpbGQgdG9vbHMgYWxzbyBzY2FuIGZvciBwcm92aWRlL3JlcXVpcmUgc3RhdGVtZW50c1xuICogdG8gZGlzY2VybiBkZXBlbmRlbmNpZXMsIGJ1aWxkIGRlcGVuZGVuY3kgZmlsZXMgKHNlZSBkZXBzLmpzKSwgZXRjLlxuICogQHNlZSBnb29nLnJlcXVpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWVzcGFjZSBwcm92aWRlZCBieSB0aGlzIGZpbGUgaW4gdGhlIGZvcm1cbiAqICAgICBcImdvb2cucGFja2FnZS5wYXJ0XCIuXG4gKi9cbmdvb2cucHJvdmlkZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBzYW1lIG5hbWVzcGFjZSBpc24ndCBwcm92aWRlZCB0d2ljZS4gVGhpcyBpcyBpbnRlbmRlZFxuICAgIC8vIHRvIHRlYWNoIG5ldyBkZXZlbG9wZXJzIHRoYXQgJ2dvb2cucHJvdmlkZScgaXMgZWZmZWN0aXZlbHkgYSB2YXJpYWJsZVxuICAgIC8vIGRlY2xhcmF0aW9uLiBBbmQgd2hlbiBKU0NvbXBpbGVyIHRyYW5zZm9ybXMgZ29vZy5wcm92aWRlIGludG8gYSByZWFsXG4gICAgLy8gdmFyaWFibGUgZGVjbGFyYXRpb24sIHRoZSBjb21waWxlZCBKUyBzaG91bGQgd29yayB0aGUgc2FtZSBhcyB0aGUgcmF3XG4gICAgLy8gSlMtLWV2ZW4gd2hlbiB0aGUgcmF3IEpTIHVzZXMgZ29vZy5wcm92aWRlIGluY29ycmVjdGx5LlxuICAgIGlmIChnb29nLmlzUHJvdmlkZWRfKG5hbWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignTmFtZXNwYWNlIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBkZWNsYXJlZC4nKTtcbiAgICB9XG4gICAgZGVsZXRlIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lXTtcblxuICAgIHZhciBuYW1lc3BhY2UgPSBuYW1lO1xuICAgIHdoaWxlICgobmFtZXNwYWNlID0gbmFtZXNwYWNlLnN1YnN0cmluZygwLCBuYW1lc3BhY2UubGFzdEluZGV4T2YoJy4nKSkpKSB7XG4gICAgICBpZiAoZ29vZy5nZXRPYmplY3RCeU5hbWUobmFtZXNwYWNlKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lc3BhY2VdID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBnb29nLmV4cG9ydFBhdGhfKG5hbWUpO1xufTtcblxuXG4vKipcbiAqIE1hcmtzIHRoYXQgdGhlIGN1cnJlbnQgZmlsZSBzaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLCBhbmQgbmV2ZXIgZm9yXG4gKiBsaXZlIGNvZGUgaW4gcHJvZHVjdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X21lc3NhZ2UgT3B0aW9uYWwgbWVzc2FnZSB0byBhZGQgdG8gdGhlIGVycm9yIHRoYXQnc1xuICogICAgIHJhaXNlZCB3aGVuIHVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLlxuICovXG5nb29nLnNldFRlc3RPbmx5ID0gZnVuY3Rpb24ob3B0X21lc3NhZ2UpIHtcbiAgaWYgKENPTVBJTEVEICYmICFnb29nLkRFQlVHKSB7XG4gICAgb3B0X21lc3NhZ2UgPSBvcHRfbWVzc2FnZSB8fCAnJztcbiAgICB0aHJvdyBFcnJvcignSW1wb3J0aW5nIHRlc3Qtb25seSBjb2RlIGludG8gbm9uLWRlYnVnIGVudmlyb25tZW50JyArXG4gICAgICAgICAgICAgICAgb3B0X21lc3NhZ2UgPyAnOiAnICsgb3B0X21lc3NhZ2UgOiAnLicpO1xuICB9XG59O1xuXG5cbmlmICghQ09NUElMRUQpIHtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIG5hbWUgaGFzIGJlZW4gZ29vZy5wcm92aWRlZC4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSBmb3JcbiAgICogbmFtZXMgdGhhdCBhcmUgYXZhaWxhYmxlIG9ubHkgYXMgaW1wbGljaXQgbmFtZXNwYWNlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiB0aGUgb2JqZWN0IHRvIGxvb2sgZm9yLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBuYW1lIGhhcyBiZWVuIHByb3ZpZGVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pc1Byb3ZpZGVkXyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gIWdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lXSAmJiAhIWdvb2cuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBOYW1lc3BhY2VzIGltcGxpY2l0bHkgZGVmaW5lZCBieSBnb29nLnByb3ZpZGUuIEZvciBleGFtcGxlLFxuICAgKiBnb29nLnByb3ZpZGUoJ2dvb2cuZXZlbnRzLkV2ZW50JykgaW1wbGljaXRseSBkZWNsYXJlc1xuICAgKiB0aGF0ICdnb29nJyBhbmQgJ2dvb2cuZXZlbnRzJyBtdXN0IGJlIG5hbWVzcGFjZXMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmltcGxpY2l0TmFtZXNwYWNlc18gPSB7fTtcbn1cblxuXG4vKipcbiAqIEJ1aWxkcyBhbiBvYmplY3Qgc3RydWN0dXJlIGZvciB0aGUgcHJvdmlkZWQgbmFtZXNwYWNlIHBhdGgsXG4gKiBlbnN1cmluZyB0aGF0IG5hbWVzIHRoYXQgYWxyZWFkeSBleGlzdCBhcmUgbm90IG92ZXJ3cml0dGVuLiBGb3JcbiAqIGV4YW1wbGU6XG4gKiBcImEuYi5jXCIgLT4gYSA9IHt9O2EuYj17fTthLmIuYz17fTtcbiAqIFVzZWQgYnkgZ29vZy5wcm92aWRlIGFuZCBnb29nLmV4cG9ydFN5bWJvbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIG9iamVjdCB0aGF0IHRoaXMgZmlsZSBkZWZpbmVzLlxuICogQHBhcmFtIHsqPX0gb3B0X29iamVjdCB0aGUgb2JqZWN0IHRvIGV4cG9zZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqZWN0VG9FeHBvcnRUbyBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcGF0aCB0bzsgZGVmYXVsdFxuICogICAgIGlzIHxnb29nLmdsb2JhbHwuXG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmV4cG9ydFBhdGhfID0gZnVuY3Rpb24obmFtZSwgb3B0X29iamVjdCwgb3B0X29iamVjdFRvRXhwb3J0VG8pIHtcbiAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICB2YXIgY3VyID0gb3B0X29iamVjdFRvRXhwb3J0VG8gfHwgZ29vZy5nbG9iYWw7XG5cbiAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgZXhoaWJpdHMgc3RyYW5nZSBiZWhhdmlvciB3aGVuIHRocm93aW5nIGVycm9ycyBmcm9tXG4gIC8vIG1ldGhvZHMgZXh0ZXJuZWQgaW4gdGhpcyBtYW5uZXIuICBTZWUgdGhlIHRlc3RFeHBvcnRTeW1ib2xFeGNlcHRpb25zIGluXG4gIC8vIGJhc2VfdGVzdC5odG1sIGZvciBhbiBleGFtcGxlLlxuICBpZiAoIShwYXJ0c1swXSBpbiBjdXIpICYmIGN1ci5leGVjU2NyaXB0KSB7XG4gICAgY3VyLmV4ZWNTY3JpcHQoJ3ZhciAnICsgcGFydHNbMF0pO1xuICB9XG5cbiAgLy8gQ2VydGFpbiBicm93c2VycyBjYW5ub3QgcGFyc2UgY29kZSBpbiB0aGUgZm9ybSBmb3IoKGEgaW4gYik7IGM7KTtcbiAgLy8gVGhpcyBwYXR0ZXJuIGlzIHByb2R1Y2VkIGJ5IHRoZSBKU0NvbXBpbGVyIHdoZW4gaXQgY29sbGFwc2VzIHRoZVxuICAvLyBzdGF0ZW1lbnQgYWJvdmUgaW50byB0aGUgY29uZGl0aW9uYWwgbG9vcCBiZWxvdy4gVG8gcHJldmVudCB0aGlzIGZyb21cbiAgLy8gaGFwcGVuaW5nLCB1c2UgYSBmb3ItbG9vcCBhbmQgcmVzZXJ2ZSB0aGUgaW5pdCBsb2dpYyBhcyBiZWxvdy5cblxuICAvLyBQYXJlbnRoZXNlcyBhZGRlZCB0byBlbGltaW5hdGUgc3RyaWN0IEpTIHdhcm5pbmcgaW4gRmlyZWZveC5cbiAgZm9yICh2YXIgcGFydDsgcGFydHMubGVuZ3RoICYmIChwYXJ0ID0gcGFydHMuc2hpZnQoKSk7KSB7XG4gICAgaWYgKCFwYXJ0cy5sZW5ndGggJiYgZ29vZy5pc0RlZihvcHRfb2JqZWN0KSkge1xuICAgICAgLy8gbGFzdCBwYXJ0IGFuZCB3ZSBoYXZlIGFuIG9iamVjdDsgdXNlIGl0XG4gICAgICBjdXJbcGFydF0gPSBvcHRfb2JqZWN0O1xuICAgIH0gZWxzZSBpZiAoY3VyW3BhcnRdKSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1ciA9IGN1cltwYXJ0XSA9IHt9O1xuICAgIH1cbiAgfVxufTtcblxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBmdWxseSBxdWFsaWZpZWQgZXh0ZXJuYWwgbmFtZS4gIElmIHlvdSBhcmVcbiAqIHVzaW5nIGEgY29tcGlsYXRpb24gcGFzcyB0aGF0IHJlbmFtZXMgcHJvcGVydHkgbmFtZXMgYmV3YXJlIHRoYXQgdXNpbmcgdGhpc1xuICogZnVuY3Rpb24gd2lsbCBub3QgZmluZCByZW5hbWVkIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqIFRoZSBvYmplY3Qgd2l0aGluIHdoaWNoIHRvIGxvb2s7IGRlZmF1bHQgaXNcbiAqICAgICB8Z29vZy5nbG9iYWx8LlxuICogQHJldHVybiB7P30gVGhlIHZhbHVlIChvYmplY3Qgb3IgcHJpbWl0aXZlKSBvciwgaWYgbm90IGZvdW5kLCBudWxsLlxuICovXG5nb29nLmdldE9iamVjdEJ5TmFtZSA9IGZ1bmN0aW9uKG5hbWUsIG9wdF9vYmopIHtcbiAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICB2YXIgY3VyID0gb3B0X29iaiB8fCBnb29nLmdsb2JhbDtcbiAgZm9yICh2YXIgcGFydDsgcGFydCA9IHBhcnRzLnNoaWZ0KCk7ICkge1xuICAgIGlmIChnb29nLmlzRGVmQW5kTm90TnVsbChjdXJbcGFydF0pKSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3VyO1xufTtcblxuXG4vKipcbiAqIEdsb2JhbGl6ZXMgYSB3aG9sZSBuYW1lc3BhY2UsIHN1Y2ggYXMgZ29vZyBvciBnb29nLmxhbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgbmFtZXNwYWNlIHRvIGdsb2JhbGl6ZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X2dsb2JhbCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcHJvcGVydGllcyB0by5cbiAqIEBkZXByZWNhdGVkIFByb3BlcnRpZXMgbWF5IGJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQgdG8gdGhlIGdsb2JhbCBzY29wZSwgYnV0XG4gKiAgICAgdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIGRvbmUgaW4gYnVsay5cbiAqL1xuZ29vZy5nbG9iYWxpemUgPSBmdW5jdGlvbihvYmosIG9wdF9nbG9iYWwpIHtcbiAgdmFyIGdsb2JhbCA9IG9wdF9nbG9iYWwgfHwgZ29vZy5nbG9iYWw7XG4gIGZvciAodmFyIHggaW4gb2JqKSB7XG4gICAgZ2xvYmFsW3hdID0gb2JqW3hdO1xuICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIGRlcGVuZGVuY3kgZnJvbSBhIGZpbGUgdG8gdGhlIGZpbGVzIGl0IHJlcXVpcmVzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbFBhdGggVGhlIHBhdGggdG8gdGhlIGpzIGZpbGUuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm92aWRlcyBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgcHJvdmlkZXMuXG4gKiBAcGFyYW0ge0FycmF5fSByZXF1aXJlcyBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgcmVxdWlyZXMuXG4gKi9cbmdvb2cuYWRkRGVwZW5kZW5jeSA9IGZ1bmN0aW9uKHJlbFBhdGgsIHByb3ZpZGVzLCByZXF1aXJlcykge1xuICBpZiAoIUNPTVBJTEVEKSB7XG4gICAgdmFyIHByb3ZpZGUsIHJlcXVpcmU7XG4gICAgdmFyIHBhdGggPSByZWxQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICB2YXIgZGVwcyA9IGdvb2cuZGVwZW5kZW5jaWVzXztcbiAgICBmb3IgKHZhciBpID0gMDsgcHJvdmlkZSA9IHByb3ZpZGVzW2ldOyBpKyspIHtcbiAgICAgIGRlcHMubmFtZVRvUGF0aFtwcm92aWRlXSA9IHBhdGg7XG4gICAgICBpZiAoIShwYXRoIGluIGRlcHMucGF0aFRvTmFtZXMpKSB7XG4gICAgICAgIGRlcHMucGF0aFRvTmFtZXNbcGF0aF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGRlcHMucGF0aFRvTmFtZXNbcGF0aF1bcHJvdmlkZV0gPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgcmVxdWlyZSA9IHJlcXVpcmVzW2pdOyBqKyspIHtcbiAgICAgIGlmICghKHBhdGggaW4gZGVwcy5yZXF1aXJlcykpIHtcbiAgICAgICAgZGVwcy5yZXF1aXJlc1twYXRoXSA9IHt9O1xuICAgICAgfVxuICAgICAgZGVwcy5yZXF1aXJlc1twYXRoXVtyZXF1aXJlXSA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5cblxuXG4vLyBOT1RFKG5uYXplKTogVGhlIGRlYnVnIERPTSBsb2FkZXIgd2FzIGluY2x1ZGVkIGluIGJhc2UuanMgYXMgYW4gb3JpZ25hbFxuLy8gd2F5IHRvIGRvIFwiZGVidWctbW9kZVwiIGRldmVsb3BtZW50LiAgVGhlIGRlcGVuZGVuY3kgc3lzdGVtIGNhbiBzb21ldGltZXNcbi8vIGJlIGNvbmZ1c2luZywgYXMgY2FuIHRoZSBkZWJ1ZyBET00gbG9hZGVyJ3MgYXN5bmNyb25vdXMgbmF0dXJlLlxuLy9cbi8vIFdpdGggdGhlIERPTSBsb2FkZXIsIGEgY2FsbCB0byBnb29nLnJlcXVpcmUoKSBpcyBub3QgYmxvY2tpbmcgLS0gdGhlXG4vLyBzY3JpcHQgd2lsbCBub3QgbG9hZCB1bnRpbCBzb21lIHBvaW50IGFmdGVyIHRoZSBjdXJyZW50IHNjcmlwdC4gIElmIGFcbi8vIG5hbWVzcGFjZSBpcyBuZWVkZWQgYXQgcnVudGltZSwgaXQgbmVlZHMgdG8gYmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzXG4vLyBzY3JpcHQsIG9yIGxvYWRlZCB2aWEgcmVxdWlyZSgpIHdpdGggaXRzIHJlZ2lzdGVyZWQgZGVwZW5kZW5jaWVzLlxuLy8gVXNlci1kZWZpbmVkIG5hbWVzcGFjZXMgbWF5IG5lZWQgdGhlaXIgb3duIGRlcHMgZmlsZS4gIFNlZSBodHRwOi8vZ28vanNfZGVwcyxcbi8vIGh0dHA6Ly9nby9nZW5qc2RlcHMsIG9yLCBleHRlcm5hbGx5LCBEZXBzV3JpdGVyLlxuLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jbG9zdXJlL2xpYnJhcnkvZG9jcy9kZXBzd3JpdGVyLmh0bWxcbi8vXG4vLyBCZWNhdXNlIG9mIGxlZ2FjeSBjbGllbnRzLCB0aGUgRE9NIGxvYWRlciBjYW4ndCBiZSBlYXNpbHkgcmVtb3ZlZCBmcm9tXG4vLyBiYXNlLmpzLiAgV29yayBpcyBiZWluZyBkb25lIHRvIG1ha2UgaXQgZGlzYWJsZWFibGUgb3IgcmVwbGFjZWFibGUgZm9yXG4vLyBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIChET00tbGVzcyBKYXZhU2NyaXB0IGludGVycHJldGVycyBsaWtlIFJoaW5vIG9yIFY4LFxuLy8gZm9yIGV4YW1wbGUpLiBTZWUgYm9vdHN0cmFwLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBkZWJ1ZyBsb2FkZXIuXG4gKlxuICogSWYgZW5hYmxlZCwgYSBjYWxsIHRvIGdvb2cucmVxdWlyZSgpIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHRoZSBuYW1lc3BhY2UgYnlcbiAqIGFwcGVuZGluZyBhIHNjcmlwdCB0YWcgdG8gdGhlIERPTSAoaWYgdGhlIG5hbWVzcGFjZSBoYXMgYmVlbiByZWdpc3RlcmVkKS5cbiAqXG4gKiBJZiBkaXNhYmxlZCwgZ29vZy5yZXF1aXJlKCkgd2lsbCBzaW1wbHkgYXNzZXJ0IHRoYXQgdGhlIG5hbWVzcGFjZSBoYXMgYmVlblxuICogcHJvdmlkZWQgKGFuZCBkZXBlbmQgb24gdGhlIGZhY3QgdGhhdCBzb21lIG91dHNpZGUgdG9vbCBjb3JyZWN0bHkgb3JkZXJlZFxuICogdGhlIHNjcmlwdCkuXG4gKi9cbmdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUiA9IHRydWU7XG5cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgc3lzdGVtIGZvciB0aGUgZHluYW1pYyByZXNvbHV0aW9uIG9mIGRlcGVuZGVuY2llc1xuICogdGhhdCB3b3JrcyBpbiBwYXJhbGxlbCB3aXRoIHRoZSBCVUlMRCBzeXN0ZW0uIE5vdGUgdGhhdCBhbGwgY2FsbHNcbiAqIHRvIGdvb2cucmVxdWlyZSB3aWxsIGJlIHN0cmlwcGVkIGJ5IHRoZSBKU0NvbXBpbGVyIHdoZW4gdGhlXG4gKiAtLWNsb3N1cmVfcGFzcyBvcHRpb24gaXMgdXNlZC5cbiAqIEBzZWUgZ29vZy5wcm92aWRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lc3BhY2UgdG8gaW5jbHVkZSAoYXMgd2FzIGdpdmVuIGluIGdvb2cucHJvdmlkZSgpKVxuICogICAgIGluIHRoZSBmb3JtIFwiZ29vZy5wYWNrYWdlLnBhcnRcIi5cbiAqL1xuZ29vZy5yZXF1aXJlID0gZnVuY3Rpb24obmFtZSkge1xuXG4gIC8vIGlmIHRoZSBvYmplY3QgYWxyZWFkeSBleGlzdHMgd2UgZG8gbm90IG5lZWQgZG8gZG8gYW55dGhpbmdcbiAgLy8gVE9ETyhhcnYpOiBJZiB3ZSBzdGFydCB0byBzdXBwb3J0IHJlcXVpcmUgYmFzZWQgb24gZmlsZSBuYW1lIHRoaXMgaGFzXG4gIC8vICAgICAgICAgICAgdG8gY2hhbmdlXG4gIC8vIFRPRE8oYXJ2KTogSWYgd2UgYWxsb3cgZ29vZy5mb28uKiB0aGlzIGhhcyB0byBjaGFuZ2VcbiAgLy8gVE9ETyhhcnYpOiBJZiB3ZSBpbXBsZW1lbnQgZHluYW1pYyBsb2FkIGFmdGVyIHBhZ2UgbG9hZCB3ZSBzaG91bGQgcHJvYmFibHlcbiAgLy8gICAgICAgICAgICBub3QgcmVtb3ZlIHRoaXMgY29kZSBmb3IgdGhlIGNvbXBpbGVkIG91dHB1dFxuICBpZiAoIUNPTVBJTEVEKSB7XG4gICAgaWYgKGdvb2cuaXNQcm92aWRlZF8obmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSKSB7XG4gICAgICB2YXIgcGF0aCA9IGdvb2cuZ2V0UGF0aEZyb21EZXBzXyhuYW1lKTtcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIGdvb2cuaW5jbHVkZWRfW3BhdGhdID0gdHJ1ZTtcbiAgICAgICAgZ29vZy53cml0ZVNjcmlwdHNfKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXJyb3JNZXNzYWdlID0gJ2dvb2cucmVxdWlyZSBjb3VsZCBub3QgZmluZDogJyArIG5hbWU7XG4gICAgaWYgKGdvb2cuZ2xvYmFsLmNvbnNvbGUpIHtcbiAgICAgIGdvb2cuZ2xvYmFsLmNvbnNvbGVbJ2Vycm9yJ10oZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cblxuICAgICAgdGhyb3cgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblxuICB9XG59O1xuXG5cbi8qKlxuICogUGF0aCBmb3IgaW5jbHVkZWQgc2NyaXB0c1xuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZ29vZy5iYXNlUGF0aCA9ICcnO1xuXG5cbi8qKlxuICogQSBob29rIGZvciBvdmVycmlkaW5nIHRoZSBiYXNlIHBhdGguXG4gKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEg7XG5cblxuLyoqXG4gKiBXaGV0aGVyIHRvIHdyaXRlIG91dCBDbG9zdXJlJ3MgZGVwcyBmaWxlLiBCeSBkZWZhdWx0LFxuICogdGhlIGRlcHMgYXJlIHdyaXR0ZW4uXG4gKiBAdHlwZSB7Ym9vbGVhbnx1bmRlZmluZWR9XG4gKi9cbmdvb2cuZ2xvYmFsLkNMT1NVUkVfTk9fREVQUztcblxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdG8gaW1wb3J0IGEgc2luZ2xlIHNjcmlwdC4gVGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZGVuIHdoZW5cbiAqIENsb3N1cmUgaXMgYmVpbmcgcnVuIGluIG5vbi1IVE1MIGNvbnRleHRzLCBzdWNoIGFzIHdlYiB3b3JrZXJzLiBJdCdzIGRlZmluZWRcbiAqIGluIHRoZSBnbG9iYWwgc2NvcGUgc28gdGhhdCBpdCBjYW4gYmUgc2V0IGJlZm9yZSBiYXNlLmpzIGlzIGxvYWRlZCwgd2hpY2hcbiAqIGFsbG93cyBkZXBzLmpzIHRvIGJlIGltcG9ydGVkIHByb3Blcmx5LlxuICpcbiA