@datagrok/eda 1.1.19 → 1.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/246.js +2 -2
- package/dist/523.js +2 -2
- package/dist/972.js +2 -2
- package/dist/package-test.js +2 -2
- package/dist/package.js +2 -2
- package/package.json +6 -4
- package/src/package.ts +27 -6
- package/webpack.config.js +4 -0
package/dist/972.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[972],{7531:(t,e,r)=>{r.d(e,{Z:()=>s});const o=Object.prototype.toString;function s(t){return o.call(t).endsWith("Array]")}},1353:(t,e,r)=>{function o(t,e,r){let o=0;const s=r(e);for(let e=0;e<t.x.length;e++)o+=Math.abs(t.y[e]-s(t.x[e]));return o}r.d(e,{Z:()=>o})},8188:(t,e,r)=>{r.d(e,{Z:()=>n});var o=r(2961),s=r(4720);function n(t,e,r,n,i){let h=r*n*n,u=o.Z.eye(e.length,e.length,h);const l=i(e);let a=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)a[e]=l(t.x[e]);let f=function(t,e,r,s,n){const i=r.length,h=t.x.length;let u=new Array(i);for(let o=0;o<i;o++){u[o]=new Array(h);let i=r.slice();i[o]+=s;let l=n(i);for(let r=0;r<h;r++)u[o][r]=e[r]-l(t.x[r])}return new o.Z(u)}(t,a,e,n,i),c=function(t,e){const r=t.x.length;let s=new Array(r);for(let o=0;o<r;o++)s[o]=[t.y[o]-e[o]];return new o.Z(s)}(t,a),m=(0,s.S)(u.add(f.mmul(f.transpose())));return(e=(e=new o.Z([e])).sub(m.mmul(f).mmul(c).mul(n).transpose())).to1DArray()}},4720:(t,e,r)=>{r.d(e,{S:()=>l});var o=r(2961);class s extends o.X{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,r){return this.data[t][e]=r,this}get(t,e){return this.data[t][e]}}class n{constructor(t){let e,r,o,n,i,h,u,l,a,f=(t=s.checkMatrix(t)).clone(),c=f.rows,m=f.columns,w=new Float64Array(c),g=1;for(e=0;e<c;e++)w[e]=e;for(l=new Float64Array(c),r=0;r<m;r++){for(e=0;e<c;e++)l[e]=f.get(e,r);for(e=0;e<c;e++){for(a=Math.min(e,r),i=0,o=0;o<a;o++)i+=f.get(e,o)*l[o];l[e]-=i,f.set(e,r,l[e])}for(n=r,e=r+1;e<c;e++)Math.abs(l[e])>Math.abs(l[n])&&(n=e);if(n!==r){for(o=0;o<m;o++)h=f.get(n,o),f.set(n,o,f.get(r,o)),f.set(r,o,h);u=w[n],w[n]=w[r],w[r]=u,g=-g}if(r<c&&0!==f.get(r,r))for(e=r+1;e<c;e++)f.set(e,r,f.get(e,r)/f.get(r,r))}this.LU=f,this.pivotVector=w,this.pivotSign=g}isSingular(){let t=this.LU,e=t.columns;for(let r=0;r<e;r++)if(0===t.get(r,r))return!0;return!1}solve(t){t=o.Z.checkMatrix(t);let e=this.LU;if(e.rows!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let r,s,n,i=t.columns,h=t.subMatrixRow(this.pivotVector,0,i-1),u=e.columns;for(n=0;n<u;n++)for(r=n+1;r<u;r++)for(s=0;s<i;s++)h.set(r,s,h.get(r,s)-h.get(n,s)*e.get(r,n));for(n=u-1;n>=0;n--){for(s=0;s<i;s++)h.set(n,s,h.get(n,s)/e.get(n,n));for(r=0;r<n;r++)for(s=0;s<i;s++)h.set(r,s,h.get(r,s)-h.get(n,s)*e.get(r,n))}return h}get determinant(){let t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");let e=this.pivotSign,r=t.columns;for(let o=0;o<r;o++)e*=t.get(o,o);return e}get lowerTriangularMatrix(){let t=this.LU,e=t.rows,r=t.columns,s=new o.Z(e,r);for(let o=0;o<e;o++)for(let e=0;e<r;e++)o>e?s.set(o,e,t.get(o,e)):o===e?s.set(o,e,1):s.set(o,e,0);return s}get upperTriangularMatrix(){let t=this.LU,e=t.rows,r=t.columns,s=new o.Z(e,r);for(let o=0;o<e;o++)for(let e=0;e<r;e++)o<=e?s.set(o,e,t.get(o,e)):s.set(o,e,0);return s}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function i(t,e){let r=0;return Math.abs(t)>Math.abs(e)?(r=e/t,Math.abs(t)*Math.sqrt(1+r*r)):0!==e?(r=t/e,Math.abs(e)*Math.sqrt(1+r*r)):0}class h{constructor(t){let e,r,o,n,h=(t=s.checkMatrix(t)).clone(),u=t.rows,l=t.columns,a=new Float64Array(l);for(o=0;o<l;o++){let t=0;for(e=o;e<u;e++)t=i(t,h.get(e,o));if(0!==t){for(h.get(o,o)<0&&(t=-t),e=o;e<u;e++)h.set(e,o,h.get(e,o)/t);for(h.set(o,o,h.get(o,o)+1),r=o+1;r<l;r++){for(n=0,e=o;e<u;e++)n+=h.get(e,o)*h.get(e,r);for(n=-n/h.get(o,o),e=o;e<u;e++)h.set(e,r,h.get(e,r)+n*h.get(e,o))}}a[o]=-t}this.QR=h,this.Rdiag=a}solve(t){t=o.Z.checkMatrix(t);let e=this.QR,r=e.rows;if(t.rows!==r)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let s,n,i,h,u=t.columns,l=t.clone(),a=e.columns;for(i=0;i<a;i++)for(n=0;n<u;n++){for(h=0,s=i;s<r;s++)h+=e.get(s,i)*l.get(s,n);for(h=-h/e.get(i,i),s=i;s<r;s++)l.set(s,n,l.get(s,n)+h*e.get(s,i))}for(i=a-1;i>=0;i--){for(n=0;n<u;n++)l.set(i,n,l.get(i,n)/this.Rdiag[i]);for(s=0;s<i;s++)for(n=0;n<u;n++)l.set(s,n,l.get(s,n)-l.get(i,n)*e.get(s,i))}return l.subMatrix(0,a-1,0,u-1)}isFullRank(){let t=this.QR.columns;for(let e=0;e<t;e++)if(0===this.Rdiag[e])return!1;return!0}get upperTriangularMatrix(){let t,e,r=this.QR,s=r.columns,n=new o.Z(s,s);for(t=0;t<s;t++)for(e=0;e<s;e++)t<e?n.set(t,e,r.get(t,e)):t===e?n.set(t,e,this.Rdiag[t]):n.set(t,e,0);return n}get orthogonalMatrix(){let t,e,r,s,n=this.QR,i=n.rows,h=n.columns,u=new o.Z(i,h);for(r=h-1;r>=0;r--){for(t=0;t<i;t++)u.set(t,r,0);for(u.set(r,r,1),e=r;e<h;e++)if(0!==n.get(r,r)){for(s=0,t=r;t<i;t++)s+=n.get(t,r)*u.get(t,e);for(s=-s/n.get(r,r),t=r;t<i;t++)u.set(t,e,u.get(t,e)+s*n.get(t,r))}}return u}}class u{constructor(t,e={}){if((t=s.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let r=t.rows,n=t.columns;const{computeLeftSingularVectors:h=!0,computeRightSingularVectors:u=!0,autoTranspose:l=!1}=e;let a,f=Boolean(h),c=Boolean(u),m=!1;if(r<n)if(l){a=t.transpose(),r=a.rows,n=a.columns,m=!0;let e=f;f=c,c=e}else a=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else a=t.clone();let w=Math.min(r,n),g=Math.min(r+1,n),p=new Float64Array(g),d=new o.Z(r,w),y=new o.Z(n,n),b=new Float64Array(n),M=new Float64Array(r),x=new Float64Array(g);for(let t=0;t<g;t++)x[t]=t;let E=Math.min(r-1,n),S=Math.max(0,Math.min(n-2,r)),v=Math.max(E,S);for(let t=0;t<v;t++){if(t<E){p[t]=0;for(let e=t;e<r;e++)p[t]=i(p[t],a.get(e,t));if(0!==p[t]){a.get(t,t)<0&&(p[t]=-p[t]);for(let e=t;e<r;e++)a.set(e,t,a.get(e,t)/p[t]);a.set(t,t,a.get(t,t)+1)}p[t]=-p[t]}for(let e=t+1;e<n;e++){if(t<E&&0!==p[t]){let o=0;for(let s=t;s<r;s++)o+=a.get(s,t)*a.get(s,e);o=-o/a.get(t,t);for(let s=t;s<r;s++)a.set(s,e,a.get(s,e)+o*a.get(s,t))}b[e]=a.get(t,e)}if(f&&t<E)for(let e=t;e<r;e++)d.set(e,t,a.get(e,t));if(t<S){b[t]=0;for(let e=t+1;e<n;e++)b[t]=i(b[t],b[e]);if(0!==b[t]){b[t+1]<0&&(b[t]=0-b[t]);for(let e=t+1;e<n;e++)b[e]/=b[t];b[t+1]+=1}if(b[t]=-b[t],t+1<r&&0!==b[t]){for(let e=t+1;e<r;e++)M[e]=0;for(let e=t+1;e<r;e++)for(let r=t+1;r<n;r++)M[e]+=b[r]*a.get(e,r);for(let e=t+1;e<n;e++){let o=-b[e]/b[t+1];for(let s=t+1;s<r;s++)a.set(s,e,a.get(s,e)+o*M[s])}}if(c)for(let e=t+1;e<n;e++)y.set(e,t,b[e])}}let R=Math.min(n,r+1);if(E<n&&(p[E]=a.get(E,E)),r<R&&(p[R-1]=0),S+1<R&&(b[S]=a.get(S,R-1)),b[R-1]=0,f){for(let t=E;t<w;t++){for(let e=0;e<r;e++)d.set(e,t,0);d.set(t,t,1)}for(let t=E-1;t>=0;t--)if(0!==p[t]){for(let e=t+1;e<w;e++){let o=0;for(let s=t;s<r;s++)o+=d.get(s,t)*d.get(s,e);o=-o/d.get(t,t);for(let s=t;s<r;s++)d.set(s,e,d.get(s,e)+o*d.get(s,t))}for(let e=t;e<r;e++)d.set(e,t,-d.get(e,t));d.set(t,t,1+d.get(t,t));for(let e=0;e<t-1;e++)d.set(e,t,0)}else{for(let e=0;e<r;e++)d.set(e,t,0);d.set(t,t,1)}}if(c)for(let t=n-1;t>=0;t--){if(t<S&&0!==b[t])for(let e=t+1;e<n;e++){let r=0;for(let o=t+1;o<n;o++)r+=y.get(o,t)*y.get(o,e);r=-r/y.get(t+1,t);for(let o=t+1;o<n;o++)y.set(o,e,y.get(o,e)+r*y.get(o,t))}for(let e=0;e<n;e++)y.set(e,t,0);y.set(t,t,1)}let k=R-1,I=0,N=Number.EPSILON;for(;R>0;){let t,e;for(t=R-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+N*Math.abs(p[t]+Math.abs(p[t+1]));if(Math.abs(b[t])<=e||Number.isNaN(b[t])){b[t]=0;break}}if(t===R-2)e=4;else{let r;for(r=R-1;r>=t&&r!==t;r--){let e=(r!==R?Math.abs(b[r]):0)+(r!==t+1?Math.abs(b[r-1]):0);if(Math.abs(p[r])<=N*e){p[r]=0;break}}r===t?e=3:r===R-1?e=1:(e=2,t=r)}switch(t++,e){case 1:{let e=b[R-2];b[R-2]=0;for(let r=R-2;r>=t;r--){let o=i(p[r],e),s=p[r]/o,h=e/o;if(p[r]=o,r!==t&&(e=-h*b[r-1],b[r-1]=s*b[r-1]),c)for(let t=0;t<n;t++)o=s*y.get(t,r)+h*y.get(t,R-1),y.set(t,R-1,-h*y.get(t,r)+s*y.get(t,R-1)),y.set(t,r,o)}break}case 2:{let e=b[t-1];b[t-1]=0;for(let o=t;o<R;o++){let s=i(p[o],e),n=p[o]/s,h=e/s;if(p[o]=s,e=-h*b[o],b[o]=n*b[o],f)for(let e=0;e<r;e++)s=n*d.get(e,o)+h*d.get(e,t-1),d.set(e,t-1,-h*d.get(e,o)+n*d.get(e,t-1)),d.set(e,o,s)}break}case 3:{const e=Math.max(Math.abs(p[R-1]),Math.abs(p[R-2]),Math.abs(b[R-2]),Math.abs(p[t]),Math.abs(b[t])),o=p[R-1]/e,s=p[R-2]/e,h=b[R-2]/e,u=p[t]/e,l=b[t]/e,a=((s+o)*(s-o)+h*h)/2,m=o*h*(o*h);let w=0;0===a&&0===m||(w=a<0?0-Math.sqrt(a*a+m):Math.sqrt(a*a+m),w=m/(a+w));let g=(u+o)*(u-o)+w,M=u*l;for(let e=t;e<R-1;e++){let o=i(g,M);0===o&&(o=Number.MIN_VALUE);let s=g/o,h=M/o;if(e!==t&&(b[e-1]=o),g=s*p[e]+h*b[e],b[e]=s*b[e]-h*p[e],M=h*p[e+1],p[e+1]=s*p[e+1],c)for(let t=0;t<n;t++)o=s*y.get(t,e)+h*y.get(t,e+1),y.set(t,e+1,-h*y.get(t,e)+s*y.get(t,e+1)),y.set(t,e,o);if(o=i(g,M),0===o&&(o=Number.MIN_VALUE),s=g/o,h=M/o,p[e]=o,g=s*b[e]+h*p[e+1],p[e+1]=-h*b[e]+s*p[e+1],M=h*b[e+1],b[e+1]=s*b[e+1],f&&e<r-1)for(let t=0;t<r;t++)o=s*d.get(t,e)+h*d.get(t,e+1),d.set(t,e+1,-h*d.get(t,e)+s*d.get(t,e+1)),d.set(t,e,o)}b[R-2]=g,I+=1;break}case 4:if(p[t]<=0&&(p[t]=p[t]<0?-p[t]:0,c))for(let e=0;e<=k;e++)y.set(e,t,-y.get(e,t));for(;t<k&&!(p[t]>=p[t+1]);){let e=p[t];if(p[t]=p[t+1],p[t+1]=e,c&&t<n-1)for(let r=0;r<n;r++)e=y.get(r,t+1),y.set(r,t+1,y.get(r,t)),y.set(r,t,e);if(f&&t<r-1)for(let o=0;o<r;o++)e=d.get(o,t+1),d.set(o,t+1,d.get(o,t)),d.set(o,t,e);t++}I=0,R--}}if(m){let t=y;y=d,d=t}this.m=r,this.n=n,this.s=p,this.U=d,this.V=y}solve(t){let e=t,r=this.threshold,s=this.s.length,n=o.Z.zeros(s,s);for(let t=0;t<s;t++)Math.abs(this.s[t])<=r?n.set(t,t,0):n.set(t,t,1/this.s[t]);let i=this.U,h=this.rightSingularVectors,u=h.mmul(n),l=h.rows,a=i.rows,f=o.Z.zeros(l,a);for(let t=0;t<l;t++)for(let e=0;e<a;e++){let r=0;for(let o=0;o<s;o++)r+=u.get(t,o)*i.get(e,o);f.set(t,e,r)}return f.mmul(e)}solveForDiagonal(t){return this.solve(o.Z.diag(t))}inverse(){let t=this.V,e=this.threshold,r=t.rows,s=t.columns,n=new o.Z(r,this.s.length);for(let o=0;o<r;o++)for(let r=0;r<s;r++)Math.abs(this.s[r])>e&&n.set(o,r,t.get(o,r)/this.s[r]);let i=this.U,h=i.rows,u=i.columns,l=new o.Z(r,h);for(let t=0;t<r;t++)for(let e=0;e<h;e++){let r=0;for(let o=0;o<u;o++)r+=n.get(t,o)*i.get(e,o);l.set(t,e,r)}return l}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let t=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,e=0,r=this.s;for(let o=0,s=r.length;o<s;o++)r[o]>t&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return o.Z.diag(this.s)}}function l(t,e=!1){return t=s.checkMatrix(t),e?new u(t).inverse():function(t,e,r=!1){return t=s.checkMatrix(t),e=s.checkMatrix(e),r?new u(t).solve(e):t.isSquare()?new n(t).solve(e):new h(t).solve(e)}(t,o.Z.eye(t.rows))}},2961:(t,e,r)=>{r.d(e,{X:()=>S,Z:()=>R});const o=Object.prototype.toString;function s(t){const e=o.call(t);return e.endsWith("Array]")&&!e.includes("Big")}const n=Object.prototype.toString;function i(t){const e=n.call(t);return e.endsWith("Array]")&&!e.includes("Big")}const h=Object.prototype.toString;const u=Object.prototype.toString;function l(t){var e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!i(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==r.output){if(!i(r.output))throw new TypeError("output option must be an array if specified");e=r.output}else e=new Array(t.length);var o=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(t){const e=u.call(t);return e.endsWith("Array]")&&!e.includes("Big")}(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var r=e.fromIndex,o=void 0===r?0:r,s=e.toIndex,n=void 0===s?t.length:s;if(o<0||o>=t.length||!Number.isInteger(o))throw new Error("fromIndex must be a positive integer smaller than length");if(n<=o||n>t.length||!Number.isInteger(n))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var i=t[o],h=o+1;h<n;h++)t[h]<i&&(i=t[h]);return i}(t),s=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(t){const e=h.call(t);return e.endsWith("Array]")&&!e.includes("Big")}(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var r=e.fromIndex,o=void 0===r?0:r,s=e.toIndex,n=void 0===s?t.length:s;if(o<0||o>=t.length||!Number.isInteger(o))throw new Error("fromIndex must be a positive integer smaller than length");if(n<=o||n>t.length||!Number.isInteger(n))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var i=t[o],u=o+1;u<n;u++)t[u]>i&&(i=t[u]);return i}(t);if(o===s)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var n=r.min,l=void 0===n?r.autoMinMax?o:0:n,a=r.max,f=void 0===a?r.autoMinMax?s:1:a;if(l>=f)throw new RangeError("min option must be smaller than max option");for(var c=(f-l)/(s-o),m=0;m<t.length;m++)e[m]=(t[m]-o)*c+l;return e}const a=" ".repeat(2),f=" ".repeat(4);function c(t,e={}){const{maxRows:r=15,maxColumns:o=10,maxNumSize:s=8,padMinus:n="auto"}=e;return`${t.constructor.name} {\n${a}[\n${f}${function(t,e,r,o,s){const{rows:n,columns:i}=t,h=Math.min(n,e),u=Math.min(i,r),l=[];if("auto"===s){s=!1;t:for(let e=0;e<h;e++)for(let r=0;r<u;r++)if(t.get(e,r)<0){s=!0;break t}}for(let e=0;e<h;e++){let r=[];for(let n=0;n<u;n++)r.push(m(t.get(e,n),o,s));l.push(`${r.join(" ")}`)}return u!==i&&(l[l.length-1]+=` ... ${i-r} more columns`),h!==n&&l.push(`... ${n-e} more rows`),l.join(`\n${f}`)}(t,r,o,s,n)}\n${a}]\n${a}rows: ${t.rows}\n${a}columns: ${t.columns}\n}`}function m(t,e,r){return(t>=0&&r?` ${w(t,e-1)}`:w(t,e)).padEnd(e)}function w(t,e){let r=t.toString();if(r.length<=e)return r;let o=t.toFixed(e);if(o.length>e&&(o=t.toFixed(Math.max(0,e-(o.length-e)))),o.length<=e&&!o.startsWith("0.000")&&!o.startsWith("-0.000"))return o;let s=t.toExponential(e);return s.length>e&&(s=t.toExponential(Math.max(0,e-(s.length-e)))),s.slice(0)}function g(t,e,r){let o=r?t.rows:t.rows-1;if(e<0||e>o)throw new RangeError("Row index out of range")}function p(t,e,r){let o=r?t.columns:t.columns-1;if(e<0||e>o)throw new RangeError("Column index out of range")}function d(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function y(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function b(t,e,r,o,s){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(x("startRow",e),x("endRow",r),x("startColumn",o),x("endColumn",s),e>r||o>s||e<0||e>=t.rows||r<0||r>=t.rows||o<0||o>=t.columns||s<0||s>=t.columns)throw new RangeError("Submatrix indices are out of range")}function M(t,e=0){let r=[];for(let o=0;o<t;o++)r.push(e);return r}function x(t,e){if("number"!=typeof e)throw new TypeError(`${t} must be a number`)}function E(t){if(t.isEmpty())throw new Error("Empty matrix has no elements to index")}class S{static from1DArray(t,e,r){if(t*e!==r.length)throw new RangeError("data length does not match given dimensions");let o=new R(t,e);for(let s=0;s<t;s++)for(let t=0;t<e;t++)o.set(s,t,r[s*e+t]);return o}static rowVector(t){let e=new R(1,t.length);for(let r=0;r<t.length;r++)e.set(0,r,t[r]);return e}static columnVector(t){let e=new R(t.length,1);for(let r=0;r<t.length;r++)e.set(r,0,t[r]);return e}static zeros(t,e){return new R(t,e)}static ones(t,e){return new R(t,e).fill(1)}static rand(t,e,r={}){if("object"!=typeof r)throw new TypeError("options must be an object");const{random:o=Math.random}=r;let s=new R(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++)s.set(r,t,o());return s}static randInt(t,e,r={}){if("object"!=typeof r)throw new TypeError("options must be an object");const{min:o=0,max:s=1e3,random:n=Math.random}=r;if(!Number.isInteger(o))throw new TypeError("min must be an integer");if(!Number.isInteger(s))throw new TypeError("max must be an integer");if(o>=s)throw new RangeError("min must be smaller than max");let i=s-o,h=new R(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++){let e=o+Math.round(n()*i);h.set(r,t,e)}return h}static eye(t,e,r){void 0===e&&(e=t),void 0===r&&(r=1);let o=Math.min(t,e),s=this.zeros(t,e);for(let t=0;t<o;t++)s.set(t,t,r);return s}static diag(t,e,r){let o=t.length;void 0===e&&(e=o),void 0===r&&(r=e);let s=Math.min(o,e,r),n=this.zeros(e,r);for(let e=0;e<s;e++)n.set(e,e,t[e]);return n}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let r=t.rows,o=t.columns,s=new R(r,o);for(let n=0;n<r;n++)for(let r=0;r<o;r++)s.set(n,r,Math.min(t.get(n,r),e.get(n,r)));return s}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let r=t.rows,o=t.columns,s=new this(r,o);for(let n=0;n<r;n++)for(let r=0;r<o;r++)s.set(n,r,Math.max(t.get(n,r),e.get(n,r)));return s}static checkMatrix(t){return S.isMatrix(t)?t:new R(t)}static isMatrix(t){return null!=t&&"Matrix"===t.klass}get size(){return this.rows*this.columns}apply(t){if("function"!=typeof t)throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.call(this,e,r);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.push(this.get(e,r));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let r=0;r<this.columns;r++)t[e].push(this.get(e,r))}return t}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isEchelonForm(){let t=0,e=0,r=-1,o=!0,s=!1;for(;t<this.rows&&o;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>r?(s=!0,r=e):(o=!1,s=!0);t++}return o}isReducedEchelonForm(){let t=0,e=0,r=-1,o=!0,s=!1;for(;t<this.rows&&o;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>r?(s=!0,r=e):(o=!1,s=!0);for(let r=e+1;r<this.rows;r++)0!==this.get(t,r)&&(o=!1);t++}return o}echelonForm(){let t=this.clone(),e=0,r=0;for(;e<t.rows&&r<t.columns;){let o=e;for(let s=e;s<t.rows;s++)t.get(s,r)>t.get(o,r)&&(o=s);if(0===t.get(o,r))r++;else{t.swapRows(e,o);let s=t.get(e,r);for(let o=r;o<t.columns;o++)t.set(e,o,t.get(e,o)/s);for(let o=e+1;o<t.rows;o++){let s=t.get(o,r)/t.get(e,r);t.set(o,r,0);for(let n=r+1;n<t.columns;n++)t.set(o,n,t.get(o,n)-t.get(e,n)*s)}e++,r++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,r=t.rows,o=r-1;for(;o>=0;)if(0===t.maxRow(o))o--;else{let s=0,n=!1;for(;s<r&&!1===n;)1===t.get(o,s)?n=!0:s++;for(let r=0;r<o;r++){let n=t.get(r,s);for(let i=s;i<e;i++){let e=t.get(r,i)-n*t.get(o,i);t.set(r,i,e)}}o--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:r=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(r)||r<=0)throw new TypeError("columns must be a positive integer");let o=new R(this.rows*e,this.columns*r);for(let t=0;t<e;t++)for(let e=0;e<r;e++)o.setSubMatrix(this,this.rows*t,this.columns*e);return o}fill(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,t);return this}neg(){return this.mulS(-1)}getRow(t){g(this,t);let e=[];for(let r=0;r<this.columns;r++)e.push(this.get(t,r));return e}getRowVector(t){return R.rowVector(this.getRow(t))}setRow(t,e){g(this,t),e=d(this,e);for(let r=0;r<this.columns;r++)this.set(t,r,e[r]);return this}swapRows(t,e){g(this,t),g(this,e);for(let r=0;r<this.columns;r++){let o=this.get(t,r);this.set(t,r,this.get(e,r)),this.set(e,r,o)}return this}getColumn(t){p(this,t);let e=[];for(let r=0;r<this.rows;r++)e.push(this.get(r,t));return e}getColumnVector(t){return R.columnVector(this.getColumn(t))}setColumn(t,e){p(this,t),e=y(this,e);for(let r=0;r<this.rows;r++)this.set(r,t,e[r]);return this}swapColumns(t,e){p(this,t),p(this,e);for(let r=0;r<this.rows;r++){let o=this.get(r,t);this.set(r,t,this.get(r,e)),this.set(r,e,o)}return this}addRowVector(t){t=d(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t[r]);return this}subRowVector(t){t=d(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t[r]);return this}mulRowVector(t){t=d(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t[r]);return this}divRowVector(t){t=d(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t[r]);return this}addColumnVector(t){t=y(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t[e]);return this}subColumnVector(t){t=y(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t[e]);return this}mulColumnVector(t){t=y(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t[e]);return this}divColumnVector(t){t=y(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t[e]);return this}mulRow(t,e){g(this,t);for(let r=0;r<this.columns;r++)this.set(t,r,this.get(t,r)*e);return this}mulColumn(t,e){p(this,t);for(let r=0;r<this.rows;r++)this.set(r,t,this.get(r,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)>t[e]&&(t[e]=this.get(e,r));return t}case"column":{const t=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)>t[r]&&(t[r]=this.get(e,r));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)>t&&(t=this.get(e,r));return t}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){E(this);let t=this.get(0,0),e=[0,0];for(let r=0;r<this.rows;r++)for(let o=0;o<this.columns;o++)this.get(r,o)>t&&(t=this.get(r,o),e[0]=r,e[1]=o);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)<t[e]&&(t[e]=this.get(e,r));return t}case"column":{const t=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)<t[r]&&(t[r]=this.get(e,r));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)<t&&(t=this.get(e,r));return t}default:throw new Error(`invalid option: ${t}`)}}minIndex(){E(this);let t=this.get(0,0),e=[0,0];for(let r=0;r<this.rows;r++)for(let o=0;o<this.columns;o++)this.get(r,o)<t&&(t=this.get(r,o),e[0]=r,e[1]=o);return e}maxRow(t){if(g(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let r=1;r<this.columns;r++)this.get(t,r)>e&&(e=this.get(t,r));return e}maxRowIndex(t){g(this,t),E(this);let e=this.get(t,0),r=[t,0];for(let o=1;o<this.columns;o++)this.get(t,o)>e&&(e=this.get(t,o),r[1]=o);return r}minRow(t){if(g(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let r=1;r<this.columns;r++)this.get(t,r)<e&&(e=this.get(t,r));return e}minRowIndex(t){g(this,t),E(this);let e=this.get(t,0),r=[t,0];for(let o=1;o<this.columns;o++)this.get(t,o)<e&&(e=this.get(t,o),r[1]=o);return r}maxColumn(t){if(p(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let r=1;r<this.rows;r++)this.get(r,t)>e&&(e=this.get(r,t));return e}maxColumnIndex(t){p(this,t),E(this);let e=this.get(0,t),r=[0,t];for(let o=1;o<this.rows;o++)this.get(o,t)>e&&(e=this.get(o,t),r[0]=o);return r}minColumn(t){if(p(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let r=1;r<this.rows;r++)this.get(r,t)<e&&(e=this.get(r,t));return e}minColumnIndex(t){p(this,t),E(this);let e=this.get(0,t),r=[0,t];for(let o=1;o<this.rows;o++)this.get(o,t)<e&&(e=this.get(o,t),r[0]=o);return r}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let r=0;r<t;r++)e.push(this.get(r,r));return e}norm(t="frobenius"){let e=0;if("max"===t)return this.max();if("frobenius"===t){for(let t=0;t<this.rows;t++)for(let r=0;r<this.columns;r++)e+=this.get(t,r)*this.get(t,r);return Math.sqrt(e)}throw new RangeError(`unknown norm type: ${t}`)}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t+=this.get(e,r),this.set(e,r,t);return this}dot(t){S.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let r=0;for(let o=0;o<e.length;o++)r+=e[o]*t[o];return r}mmul(t){t=R.checkMatrix(t);let e=this.rows,r=this.columns,o=t.columns,s=new R(e,o),n=new Float64Array(r);for(let i=0;i<o;i++){for(let e=0;e<r;e++)n[e]=t.get(e,i);for(let t=0;t<e;t++){let e=0;for(let o=0;o<r;o++)e+=this.get(t,o)*n[o];s.set(t,i,e)}}return s}strassen2x2(t){t=R.checkMatrix(t);let e=new R(2,2);const r=this.get(0,0),o=t.get(0,0),s=this.get(0,1),n=t.get(0,1),i=this.get(1,0),h=t.get(1,0),u=this.get(1,1),l=t.get(1,1),a=(r+u)*(o+l),f=(i+u)*o,c=r*(n-l),m=u*(h-o),w=(r+s)*l,g=a+m-w+(s-u)*(h+l),p=c+w,d=f+m,y=a-f+c+(i-r)*(o+n);return e.set(0,0,g),e.set(0,1,p),e.set(1,0,d),e.set(1,1,y),e}strassen3x3(t){t=R.checkMatrix(t);let e=new R(3,3);const r=this.get(0,0),o=this.get(0,1),s=this.get(0,2),n=this.get(1,0),i=this.get(1,1),h=this.get(1,2),u=this.get(2,0),l=this.get(2,1),a=this.get(2,2),f=t.get(0,0),c=t.get(0,1),m=t.get(0,2),w=t.get(1,0),g=t.get(1,1),p=t.get(1,2),d=t.get(2,0),y=t.get(2,1),b=t.get(2,2),M=(r-n)*(-c+g),x=(-r+n+i)*(f-c+g),E=(n+i)*(-f+c),S=r*f,v=(-r+u+l)*(f-m+p),k=(-r+u)*(m-p),I=(u+l)*(-f+m),N=(-s+l+a)*(g+d-y),T=(s-a)*(g-y),A=s*d,q=(l+a)*(-d+y),F=(-s+i+h)*(p+d-b),V=(s-h)*(p-b),C=(i+h)*(-d+b),$=S+A+o*w,j=(r+o+s-n-i-l-a)*g+x+E+S+N+A+q,Z=S+v+I+(r+o+s-i-h-u-l)*p+A+F+C,z=M+i*(-f+c+w-g-p-d+b)+x+S+A+F+V,P=M+x+E+S+h*y,D=A+F+V+C+n*m,L=S+v+k+l*(-f+m+w-g-p-d+y)+N+T+A,U=N+T+A+q+u*c,O=S+v+k+I+a*b;return e.set(0,0,$),e.set(0,1,j),e.set(0,2,Z),e.set(1,0,z),e.set(1,1,P),e.set(1,2,D),e.set(2,0,L),e.set(2,1,U),e.set(2,2,O),e}mmulStrassen(t){t=R.checkMatrix(t);let e=this.clone(),r=e.rows,o=e.columns,s=t.rows,n=t.columns;function i(t,e,r){let o=t.rows,s=t.columns;if(o===e&&s===r)return t;{let o=S.zeros(e,r);return o=o.setSubMatrix(t,0,0),o}}o!==s&&console.warn(`Multiplying ${r} x ${o} and ${s} x ${n} matrix: dimensions do not match.`);let h=Math.max(r,s),u=Math.max(o,n);return e=i(e,h,u),function t(e,r,o,s){if(o<=512||s<=512)return e.mmul(r);o%2==1&&s%2==1?(e=i(e,o+1,s+1),r=i(r,o+1,s+1)):o%2==1?(e=i(e,o+1,s),r=i(r,o+1,s)):s%2==1&&(e=i(e,o,s+1),r=i(r,o,s+1));let n=parseInt(e.rows/2,10),h=parseInt(e.columns/2,10),u=e.subMatrix(0,n-1,0,h-1),l=r.subMatrix(0,n-1,0,h-1),a=e.subMatrix(0,n-1,h,e.columns-1),f=r.subMatrix(0,n-1,h,r.columns-1),c=e.subMatrix(n,e.rows-1,0,h-1),m=r.subMatrix(n,r.rows-1,0,h-1),w=e.subMatrix(n,e.rows-1,h,e.columns-1),g=r.subMatrix(n,r.rows-1,h,r.columns-1),p=t(S.add(u,w),S.add(l,g),n,h),d=t(S.add(c,w),l,n,h),y=t(u,S.sub(f,g),n,h),b=t(w,S.sub(m,l),n,h),M=t(S.add(u,a),g,n,h),x=t(S.sub(c,u),S.add(l,f),n,h),E=t(S.sub(a,w),S.add(m,g),n,h),v=S.add(p,b);v.sub(M),v.add(E);let R=S.add(y,M),k=S.add(d,b),I=S.sub(p,d);I.add(y),I.add(x);let N=S.zeros(2*v.rows,2*v.columns);return N=N.setSubMatrix(v,0,0),N=N.setSubMatrix(R,v.rows,0),N=N.setSubMatrix(k,0,v.columns),N=N.setSubMatrix(I,v.rows,v.columns),N.subMatrix(0,o-1,0,s-1)}(e,t=i(t,h,u),h,u)}scaleRows(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");let o=new R(this.rows,this.columns);for(let t=0;t<this.rows;t++){const s=this.getRow(t);s.length>0&&l(s,{min:e,max:r,output:s}),o.setRow(t,s)}return o}scaleColumns(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");let o=new R(this.rows,this.columns);for(let t=0;t<this.columns;t++){const s=this.getColumn(t);s.length&&l(s,{min:e,max:r,output:s}),o.setColumn(t,s)}return o}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let r=0;r<t;r++){let t=this.get(e,r),o=this.get(e,this.columns-1-r);this.set(e,r,o),this.set(e,this.columns-1-r,t)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let r=0;r<t;r++){let t=this.get(r,e),o=this.get(this.rows-1-r,e);this.set(r,e,o),this.set(this.rows-1-r,e,t)}return this}kroneckerProduct(t){t=R.checkMatrix(t);let e=this.rows,r=this.columns,o=t.rows,s=t.columns,n=new R(e*o,r*s);for(let i=0;i<e;i++)for(let e=0;e<r;e++)for(let r=0;r<o;r++)for(let h=0;h<s;h++)n.set(o*i+r,s*e+h,this.get(i,e)*t.get(r,h));return n}kroneckerSum(t){if(t=R.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,r=t.rows,o=this.kroneckerProduct(R.eye(r,r)),s=R.eye(e,e).kroneckerProduct(t);return o.add(s)}transpose(){let t=new R(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.set(r,e,this.get(e,r));return t}sortRows(t=v){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=v){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,r,o){b(this,t,e,r,o);let s=new R(e-t+1,o-r+1);for(let n=t;n<=e;n++)for(let e=r;e<=o;e++)s.set(n-t,e-r,this.get(n,e));return s}subMatrixRow(t,e,r){if(void 0===e&&(e=0),void 0===r&&(r=this.columns-1),e>r||e<0||e>=this.columns||r<0||r>=this.columns)throw new RangeError("Argument out of range");let o=new R(t.length,r-e+1);for(let s=0;s<t.length;s++)for(let n=e;n<=r;n++){if(t[s]<0||t[s]>=this.rows)throw new RangeError(`Row index out of range: ${t[s]}`);o.set(s,n-e,this.get(t[s],n))}return o}subMatrixColumn(t,e,r){if(void 0===e&&(e=0),void 0===r&&(r=this.rows-1),e>r||e<0||e>=this.rows||r<0||r>=this.rows)throw new RangeError("Argument out of range");let o=new R(r-e+1,t.length);for(let s=0;s<t.length;s++)for(let n=e;n<=r;n++){if(t[s]<0||t[s]>=this.columns)throw new RangeError(`Column index out of range: ${t[s]}`);o.set(n-e,s,this.get(n,t[s]))}return o}setSubMatrix(t,e,r){if((t=R.checkMatrix(t)).isEmpty())return this;b(this,e,e+t.rows-1,r,r+t.columns-1);for(let o=0;o<t.rows;o++)for(let s=0;s<t.columns;s++)this.set(e+o,r+s,t.get(o,s));return this}selection(t,e){!function(t,e){if(!s(e))throw new TypeError("row indices must be an array");for(let r=0;r<e.length;r++)if(e[r]<0||e[r]>=t.rows)throw new RangeError("row indices are out of range")}(this,t),function(t,e){if(!s(e))throw new TypeError("column indices must be an array");for(let r=0;r<e.length;r++)if(e[r]<0||e[r]>=t.columns)throw new RangeError("column indices are out of range")}(this,e);let r=new R(t.length,e.length);for(let o=0;o<t.length;o++){let s=t[o];for(let t=0;t<e.length;t++){let n=e[t];r.set(o,t,this.get(s,n))}}return r}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let r=0;r<t;r++)e+=this.get(r,r);return e}clone(){let t=new R(this.rows,this.columns);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.set(e,r,this.get(e,r));return t}sum(t){switch(t){case"row":return function(t){let e=M(t.rows);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[r]+=t.get(r,o);return e}(this);case"column":return function(t){let e=M(t.columns);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[o]+=t.get(r,o);return e}(this);case void 0:return function(t){let e=0;for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)e+=t.get(r,o);return e}(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return function(t){let e=M(t.rows,1);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[r]*=t.get(r,o);return e}(this);case"column":return function(t){let e=M(t.columns,1);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[o]*=t.get(r,o);return e}(this);case void 0:return function(t){let e=1;for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)e*=t.get(r,o);return e}(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":for(let t=0;t<this.rows;t++)e[t]/=this.columns;return e;case"column":for(let t=0;t<this.columns;t++)e[t]/=this.rows;return e;case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:r=!0,mean:o=this.mean(t)}=e;if("boolean"!=typeof r)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!s(o))throw new TypeError("mean must be an array");return function(t,e,r){const o=t.rows,s=t.columns,n=[];for(let i=0;i<o;i++){let o=0,h=0,u=0;for(let e=0;e<s;e++)u=t.get(i,e)-r[i],o+=u,h+=u*u;e?n.push((h-o*o/s)/(s-1)):n.push((h-o*o/s)/s)}return n}(this,r,o);case"column":if(!s(o))throw new TypeError("mean must be an array");return function(t,e,r){const o=t.rows,s=t.columns,n=[];for(let i=0;i<s;i++){let s=0,h=0,u=0;for(let e=0;e<o;e++)u=t.get(e,i)-r[i],s+=u,h+=u*u;e?n.push((h-s*s/o)/(o-1)):n.push((h-s*s/o)/o)}return n}(this,r,o);case void 0:if("number"!=typeof o)throw new TypeError("mean must be a number");return function(t,e,r){const o=t.rows,s=t.columns,n=o*s;let i=0,h=0,u=0;for(let e=0;e<o;e++)for(let o=0;o<s;o++)u=t.get(e,o)-r,i+=u,h+=u*u;return e?(h-i*i/n)/(n-1):(h-i*i/n)/n}(this,r,o);default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const r=this.variance(t,e);if(void 0===t)return Math.sqrt(r);for(let t=0;t<r.length;t++)r[t]=Math.sqrt(r[t]);return r}center(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:r=this.mean(t)}=e;switch(t){case"row":if(!s(r))throw new TypeError("center must be an array");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)-e[r])}(this,r),this;case"column":if(!s(r))throw new TypeError("center must be an array");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)-e[o])}(this,r),this;case void 0:if("number"!=typeof r)throw new TypeError("center must be a number");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)-e)}(this,r),this;default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let r=e.scale;switch(t){case"row":if(void 0===r)r=function(t){const e=[];for(let r=0;r<t.rows;r++){let o=0;for(let e=0;e<t.columns;e++)o+=Math.pow(t.get(r,e),2)/(t.columns-1);e.push(Math.sqrt(o))}return e}(this);else if(!s(r))throw new TypeError("scale must be an array");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)/e[r])}(this,r),this;case"column":if(void 0===r)r=function(t){const e=[];for(let r=0;r<t.columns;r++){let o=0;for(let e=0;e<t.rows;e++)o+=Math.pow(t.get(e,r),2)/(t.rows-1);e.push(Math.sqrt(o))}return e}(this);else if(!s(r))throw new TypeError("scale must be an array");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)/e[o])}(this,r),this;case void 0:if(void 0===r)r=function(t){const e=t.size-1;let r=0;for(let o=0;o<t.columns;o++)for(let s=0;s<t.rows;s++)r+=Math.pow(t.get(s,o),2)/e;return Math.sqrt(r)}(this);else if("number"!=typeof r)throw new TypeError("scale must be a number");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)/e)}(this,r),this;default:throw new Error(`invalid option: ${t}`)}}toString(t){return c(this,t)}}function v(t,e){return t-e}S.prototype.klass="Matrix","undefined"!=typeof Symbol&&(S.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return c(this)}),S.random=S.rand,S.randomInt=S.randInt,S.diagonal=S.diag,S.prototype.diagonal=S.prototype.diag,S.identity=S.eye,S.prototype.negate=S.prototype.neg,S.prototype.tensorProduct=S.prototype.kroneckerProduct;class R extends S{constructor(t,e){if(super(),R.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>=0){if(this.data=[],!(Number.isInteger(e)&&e>=0))throw new TypeError("nColumns must be a positive integer");for(let r=0;r<t;r++)this.data.push(new Float64Array(e))}else{if(!s(t))throw new TypeError("First argument must be a positive number or an array");{const r=t;if("number"!=typeof(e=(t=r.length)?r[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let o=0;o<t;o++){if(r[o].length!==e)throw new RangeError("Inconsistent array dimensions");if(!r[o].every((t=>"number"==typeof t)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(r[o]))}}}this.rows=t,this.columns=e}set(t,e,r){return this.data[t][e]=r,this}get(t,e){return this.data[t][e]}removeRow(t){return g(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return void 0===e&&(e=t,t=this.rows),g(this,t,!0),e=Float64Array.from(d(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){p(this,t);for(let e=0;e<this.rows;e++){const r=new Float64Array(this.columns-1);for(let o=0;o<t;o++)r[o]=this.data[e][o];for(let o=t+1;o<this.columns;o++)r[o-1]=this.data[e][o];this.data[e]=r}return this.columns-=1,this}addColumn(t,e){void 0===e&&(e=t,t=this.columns),p(this,t,!0),e=y(this,e);for(let r=0;r<this.rows;r++){const o=new Float64Array(this.columns+1);let s=0;for(;s<t;s++)o[s]=this.data[r][s];for(o[s++]=e[r];s<this.columns+1;s++)o[s]=this.data[r][s-1];this.data[r]=o}return this.columns+=1,this}}!function(t,e){t.prototype.add=function(t){return"number"==typeof t?this.addS(t):this.addM(t)},t.prototype.addS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t);return this},t.prototype.addM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t.get(e,r));return this},t.add=function(t,r){return new e(t).add(r)},t.prototype.sub=function(t){return"number"==typeof t?this.subS(t):this.subM(t)},t.prototype.subS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t);return this},t.prototype.subM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t.get(e,r));return this},t.sub=function(t,r){return new e(t).sub(r)},t.prototype.subtract=t.prototype.sub,t.prototype.subtractS=t.prototype.subS,t.prototype.subtractM=t.prototype.subM,t.subtract=t.sub,t.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):this.mulM(t)},t.prototype.mulS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t);return this},t.prototype.mulM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t.get(e,r));return this},t.mul=function(t,r){return new e(t).mul(r)},t.prototype.multiply=t.prototype.mul,t.prototype.multiplyS=t.prototype.mulS,t.prototype.multiplyM=t.prototype.mulM,t.multiply=t.mul,t.prototype.div=function(t){return"number"==typeof t?this.divS(t):this.divM(t)},t.prototype.divS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t);return this},t.prototype.divM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t.get(e,r));return this},t.div=function(t,r){return new e(t).div(r)},t.prototype.divide=t.prototype.div,t.prototype.divideS=t.prototype.divS,t.prototype.divideM=t.prototype.divM,t.divide=t.div,t.prototype.mod=function(t){return"number"==typeof t?this.modS(t):this.modM(t)},t.prototype.modS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)%t);return this},t.prototype.modM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)%t.get(e,r));return this},t.mod=function(t,r){return new e(t).mod(r)},t.prototype.modulus=t.prototype.mod,t.prototype.modulusS=t.prototype.modS,t.prototype.modulusM=t.prototype.modM,t.modulus=t.mod,t.prototype.and=function(t){return"number"==typeof t?this.andS(t):this.andM(t)},t.prototype.andS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)&t);return this},t.prototype.andM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)&t.get(e,r));return this},t.and=function(t,r){return new e(t).and(r)},t.prototype.or=function(t){return"number"==typeof t?this.orS(t):this.orM(t)},t.prototype.orS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)|t);return this},t.prototype.orM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)|t.get(e,r));return this},t.or=function(t,r){return new e(t).or(r)},t.prototype.xor=function(t){return"number"==typeof t?this.xorS(t):this.xorM(t)},t.prototype.xorS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)^t);return this},t.prototype.xorM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)^t.get(e,r));return this},t.xor=function(t,r){return new e(t).xor(r)},t.prototype.leftShift=function(t){return"number"==typeof t?this.leftShiftS(t):this.leftShiftM(t)},t.prototype.leftShiftS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)<<t);return this},t.prototype.leftShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)<<t.get(e,r));return this},t.leftShift=function(t,r){return new e(t).leftShift(r)},t.prototype.signPropagatingRightShift=function(t){return"number"==typeof t?this.signPropagatingRightShiftS(t):this.signPropagatingRightShiftM(t)},t.prototype.signPropagatingRightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>t.get(e,r));return this},t.signPropagatingRightShift=function(t,r){return new e(t).signPropagatingRightShift(r)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>>t.get(e,r));return this},t.rightShift=function(t,r){return new e(t).rightShift(r)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,~this.get(t,e));return this},t.not=function(t){return new e(t).not()},t.prototype.abs=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.abs(this.get(t,e)));return this},t.abs=function(t){return new e(t).abs()},t.prototype.acos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acos(this.get(t,e)));return this},t.acos=function(t){return new e(t).acos()},t.prototype.acosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acosh(this.get(t,e)));return this},t.acosh=function(t){return new e(t).acosh()},t.prototype.asin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asin(this.get(t,e)));return this},t.asin=function(t){return new e(t).asin()},t.prototype.asinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asinh(this.get(t,e)));return this},t.asinh=function(t){return new e(t).asinh()},t.prototype.atan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atan(this.get(t,e)));return this},t.atan=function(t){return new e(t).atan()},t.prototype.atanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atanh(this.get(t,e)));return this},t.atanh=function(t){return new e(t).atanh()},t.prototype.cbrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cbrt(this.get(t,e)));return this},t.cbrt=function(t){return new e(t).cbrt()},t.prototype.ceil=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.ceil(this.get(t,e)));return this},t.ceil=function(t){return new e(t).ceil()},t.prototype.clz32=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.clz32(this.get(t,e)));return this},t.clz32=function(t){return new e(t).clz32()},t.prototype.cos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cos(this.get(t,e)));return this},t.cos=function(t){return new e(t).cos()},t.prototype.cosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cosh(this.get(t,e)));return this},t.cosh=function(t){return new e(t).cosh()},t.prototype.exp=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.exp(this.get(t,e)));return this},t.exp=function(t){return new e(t).exp()},t.prototype.expm1=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.expm1(this.get(t,e)));return this},t.expm1=function(t){return new e(t).expm1()},t.prototype.floor=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.floor(this.get(t,e)));return this},t.floor=function(t){return new e(t).floor()},t.prototype.fround=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.fround(this.get(t,e)));return this},t.fround=function(t){return new e(t).fround()},t.prototype.log=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log(this.get(t,e)));return this},t.log=function(t){return new e(t).log()},t.prototype.log1p=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log1p(this.get(t,e)));return this},t.log1p=function(t){return new e(t).log1p()},t.prototype.log10=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log10(this.get(t,e)));return this},t.log10=function(t){return new e(t).log10()},t.prototype.log2=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log2(this.get(t,e)));return this},t.log2=function(t){return new e(t).log2()},t.prototype.round=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.round(this.get(t,e)));return this},t.round=function(t){return new e(t).round()},t.prototype.sign=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sign(this.get(t,e)));return this},t.sign=function(t){return new e(t).sign()},t.prototype.sin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sin(this.get(t,e)));return this},t.sin=function(t){return new e(t).sin()},t.prototype.sinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sinh(this.get(t,e)));return this},t.sinh=function(t){return new e(t).sinh()},t.prototype.sqrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sqrt(this.get(t,e)));return this},t.sqrt=function(t){return new e(t).sqrt()},t.prototype.tan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tan(this.get(t,e)));return this},t.tan=function(t){return new e(t).tan()},t.prototype.tanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tanh(this.get(t,e)));return this},t.tanh=function(t){return new e(t).tanh()},t.prototype.trunc=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.trunc(this.get(t,e)));return this},t.trunc=function(t){return new e(t).trunc()},t.pow=function(t,r){return new e(t).pow(r)},t.prototype.pow=function(t){return"number"==typeof t?this.powS(t):this.powM(t)},t.prototype.powS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,Math.pow(this.get(e,r),t));return this},t.prototype.powM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,Math.pow(this.get(e,r),t.get(e,r)));return this}}(S,R)}}]);
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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M0wsR0FDWnlYLElBQUk4RixFQUN2QixFQUVBbFMsRUFBZTlPLFVBQVVrYixJQUFNLFNBQWE3WixHQUMxQyxNQUFxQixpQkFBVkEsRUFBMkI0QixLQUFLZ2UsS0FBSzVmLEdBQ3pDNEIsS0FBS2llLEtBQUs3ZixFQUNuQixFQUVBeU4sRUFBZTlPLFVBQVVpaEIsS0FBTyxTQUFjNWYsR0FDNUMsSUFBSyxJQUFJVixFQUFJLEVBQUdBLEVBQUlzQyxLQUFLQyxLQUFNdkMsSUFDN0IsSUFBSyxJQUFJK0MsRUFBSSxFQUFHQSxFQUFJVCxLQUFLRSxRQUFTTyxJQUNoQ1QsS0FBS0csSUFBSXpDLEVBQUcrQyxFQUFHNUMsS0FBS29hLElBQUlqWSxLQUFLTSxJQUFJNUMsRUFBRytDLEdBQUlyQyxJQUc1QyxPQUFPNEIsSUFDVCxFQUVBNkwsRUFBZTlPLFVBQVVraEIsS0FBTyxTQUFjemQsR0FFNUMsR0FEQUEsRUFBUzJMLEVBQU9qTCxZQUFZVixHQUN4QlIsS0FBS0MsT0FBU08sRUFBT1AsTUFDdkJELEtBQUtFLFVBQVlNLEVBQU9OLFFBQ3hCLE1BQU0sSUFBSTBJLFdBQVcscUNBRXZCLElBQUssSUFBSWxMLEVBQUksRUFBR0EsRUFBSXNDLEtBQUtDLEtBQU12QyxJQUM3QixJQUFLLElBQUkrQyxFQUFJLEVBQUdBLEVBQUlULEtBQUtFLFFBQVNPLElBQ2hDVCxLQUFLRyxJQUFJekMsRUFBRytDLEVBQUc1QyxLQUFLb2EsSUFBSWpZLEtBQUtNLElBQUk1QyxFQUFHK0MsR0FBSUQsRUFBT0YsSUFBSTVDLEVBQUcrQyxLQUcxRCxPQUFPVCxJQUNULENBQ0YsQ0Y4ekJBa2UsQ0FBc0JyUyxFQUFnQk0sRSIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvc3JjL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9lcnJvckNhbGN1bGF0aW9uLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9zdGVwLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL3dyYXAvV3JhcHBlck1hdHJpeDJELmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL2x1LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL3V0aWwuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvcXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvc3ZkLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RlY29tcG9zaXRpb25zLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvbm9kZV9tb2R1bGVzL2lzLWFueS1hcnJheS9saWItZXNtL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1yZXNjYWxlL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWluL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktcmVzY2FsZS9saWItZXM2L2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1taW4vbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L2xpYi1lczYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvaW5zcGVjdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy91dGlsLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL21hdHJpeC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9zdGF0LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL21hdGhPcGVyYXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBbnlBcnJheShvYmplY3QpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqZWN0KS5lbmRzV2l0aCgnQXJyYXldJyk7XG59XG4iLCIvKipcbiAqIENhbGN1bGF0ZSBjdXJyZW50IGVycm9yXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHBhcmFtZXRlcnMgLSBBcnJheSBvZiBjdXJyZW50IHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXJyb3JDYWxjdWxhdGlvbihcbiAgZGF0YSxcbiAgcGFyYW1ldGVycyxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuKSB7XG4gIGxldCBlcnJvciA9IDA7XG4gIGNvbnN0IGZ1bmMgPSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24ocGFyYW1ldGVycyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBlcnJvciArPSBNYXRoLmFicyhkYXRhLnlbaV0gLSBmdW5jKGRhdGEueFtpXSkpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuIiwiaW1wb3J0IHsgaW52ZXJzZSwgTWF0cml4IH0gZnJvbSAnbWwtbWF0cml4JztcblxuLyoqXG4gKiBEaWZmZXJlbmNlIG9mIHRoZSBtYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgcGFyYW1ldGVyc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXMgLSBBcnJheSBvZiBwcmV2aW91cyBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JhZGllbnREaWZmZXJlbmNlIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbUZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICogQHJldHVybiB7TWF0cml4fVxuICovXG5mdW5jdGlvbiBncmFkaWVudEZ1bmN0aW9uKFxuICBkYXRhLFxuICBldmFsdWF0ZWREYXRhLFxuICBwYXJhbXMsXG4gIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgcGFyYW1GdW5jdGlvbixcbikge1xuICBjb25zdCBuID0gcGFyYW1zLmxlbmd0aDtcbiAgY29uc3QgbSA9IGRhdGEueC5sZW5ndGg7XG5cbiAgbGV0IGFucyA9IG5ldyBBcnJheShuKTtcblxuICBmb3IgKGxldCBwYXJhbSA9IDA7IHBhcmFtIDwgbjsgcGFyYW0rKykge1xuICAgIGFuc1twYXJhbV0gPSBuZXcgQXJyYXkobSk7XG4gICAgbGV0IGF1eFBhcmFtcyA9IHBhcmFtcy5zbGljZSgpO1xuICAgIGF1eFBhcmFtc1twYXJhbV0gKz0gZ3JhZGllbnREaWZmZXJlbmNlO1xuICAgIGxldCBmdW5jUGFyYW0gPSBwYXJhbUZ1bmN0aW9uKGF1eFBhcmFtcyk7XG5cbiAgICBmb3IgKGxldCBwb2ludCA9IDA7IHBvaW50IDwgbTsgcG9pbnQrKykge1xuICAgICAgYW5zW3BhcmFtXVtwb2ludF0gPSBldmFsdWF0ZWREYXRhW3BvaW50XSAtIGZ1bmNQYXJhbShkYXRhLnhbcG9pbnRdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBNYXRyaXgoYW5zKTtcbn1cblxuLyoqXG4gKiBNYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgc2FtcGxlc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHJldHVybiB7TWF0cml4fVxuICovXG5mdW5jdGlvbiBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKSB7XG4gIGNvbnN0IG0gPSBkYXRhLngubGVuZ3RoO1xuXG4gIGxldCBhbnMgPSBuZXcgQXJyYXkobSk7XG5cbiAgZm9yIChsZXQgcG9pbnQgPSAwOyBwb2ludCA8IG07IHBvaW50KyspIHtcbiAgICBhbnNbcG9pbnRdID0gW2RhdGEueVtwb2ludF0gLSBldmFsdWF0ZWREYXRhW3BvaW50XV07XG4gIH1cblxuICByZXR1cm4gbmV3IE1hdHJpeChhbnMpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGlvbiBmb3IgTGV2ZW5iZXJnLU1hcnF1YXJkdFxuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXMgLSBBcnJheSBvZiBwcmV2aW91cyBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGFtcGluZyAtIExldmVuYmVyZy1NYXJxdWFyZHQgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JhZGllbnREaWZmZXJlbmNlIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtBcnJheTxudW1iZXI+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGVwKFxuICBkYXRhLFxuICBwYXJhbXMsXG4gIGRhbXBpbmcsXG4gIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuKSB7XG4gIGxldCB2YWx1ZSA9IGRhbXBpbmcgKiBncmFkaWVudERpZmZlcmVuY2UgKiBncmFkaWVudERpZmZlcmVuY2U7XG4gIGxldCBpZGVudGl0eSA9IE1hdHJpeC5leWUocGFyYW1zLmxlbmd0aCwgcGFyYW1zLmxlbmd0aCwgdmFsdWUpO1xuXG4gIGNvbnN0IGZ1bmMgPSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24ocGFyYW1zKTtcblxuICBsZXQgZXZhbHVhdGVkRGF0YSA9IG5ldyBGbG9hdDY0QXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgZXZhbHVhdGVkRGF0YVtpXSA9IGZ1bmMoZGF0YS54W2ldKTtcbiAgfVxuXG4gIGxldCBncmFkaWVudEZ1bmMgPSBncmFkaWVudEZ1bmN0aW9uKFxuICAgIGRhdGEsXG4gICAgZXZhbHVhdGVkRGF0YSxcbiAgICBwYXJhbXMsXG4gICAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICAgIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgKTtcbiAgbGV0IG1hdHJpeEZ1bmMgPSBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKTtcbiAgbGV0IGludmVyc2VNYXRyaXggPSBpbnZlcnNlKFxuICAgIGlkZW50aXR5LmFkZChncmFkaWVudEZ1bmMubW11bChncmFkaWVudEZ1bmMudHJhbnNwb3NlKCkpKSxcbiAgKTtcblxuICBwYXJhbXMgPSBuZXcgTWF0cml4KFtwYXJhbXNdKTtcbiAgcGFyYW1zID0gcGFyYW1zLnN1YihcbiAgICBpbnZlcnNlTWF0cml4XG4gICAgICAubW11bChncmFkaWVudEZ1bmMpXG4gICAgICAubW11bChtYXRyaXhGdW5jKVxuICAgICAgLm11bChncmFkaWVudERpZmZlcmVuY2UpXG4gICAgICAudHJhbnNwb3NlKCksXG4gICk7XG5cbiAgcmV0dXJuIHBhcmFtcy50bzFEQXJyYXkoKTtcbn1cbiIsImltcG9ydCB7IEFic3RyYWN0TWF0cml4IH0gZnJvbSAnLi4vbWF0cml4JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV3JhcHBlck1hdHJpeDJEIGV4dGVuZHMgQWJzdHJhY3RNYXRyaXgge1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuY29sdW1ucyA9IGRhdGFbMF0ubGVuZ3RoO1xuICB9XG5cbiAgc2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XTtcbiAgfVxufVxuIiwiaW1wb3J0IE1hdHJpeCBmcm9tICcuLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEx1RGVjb21wb3NpdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChtYXRyaXgpO1xuXG4gICAgbGV0IGx1ID0gbWF0cml4LmNsb25lKCk7XG4gICAgbGV0IHJvd3MgPSBsdS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbHUuY29sdW1ucztcbiAgICBsZXQgcGl2b3RWZWN0b3IgPSBuZXcgRmxvYXQ2NEFycmF5KHJvd3MpO1xuICAgIGxldCBwaXZvdFNpZ24gPSAxO1xuICAgIGxldCBpLCBqLCBrLCBwLCBzLCB0LCB2O1xuICAgIGxldCBMVWNvbGosIGttYXg7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBwaXZvdFZlY3RvcltpXSA9IGk7XG4gICAgfVxuXG4gICAgTFVjb2xqID0gbmV3IEZsb2F0NjRBcnJheShyb3dzKTtcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgTFVjb2xqW2ldID0gbHUuZ2V0KGksIGopO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIGttYXggPSBNYXRoLm1pbihpLCBqKTtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBrbWF4OyBrKyspIHtcbiAgICAgICAgICBzICs9IGx1LmdldChpLCBrKSAqIExVY29saltrXTtcbiAgICAgICAgfVxuICAgICAgICBMVWNvbGpbaV0gLT0gcztcbiAgICAgICAgbHUuc2V0KGksIGosIExVY29saltpXSk7XG4gICAgICB9XG5cbiAgICAgIHAgPSBqO1xuICAgICAgZm9yIChpID0gaiArIDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKExVY29saltpXSkgPiBNYXRoLmFicyhMVWNvbGpbcF0pKSB7XG4gICAgICAgICAgcCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHAgIT09IGopIHtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGNvbHVtbnM7IGsrKykge1xuICAgICAgICAgIHQgPSBsdS5nZXQocCwgayk7XG4gICAgICAgICAgbHUuc2V0KHAsIGssIGx1LmdldChqLCBrKSk7XG4gICAgICAgICAgbHUuc2V0KGosIGssIHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdiA9IHBpdm90VmVjdG9yW3BdO1xuICAgICAgICBwaXZvdFZlY3RvcltwXSA9IHBpdm90VmVjdG9yW2pdO1xuICAgICAgICBwaXZvdFZlY3RvcltqXSA9IHY7XG5cbiAgICAgICAgcGl2b3RTaWduID0gLXBpdm90U2lnbjtcbiAgICAgIH1cblxuICAgICAgaWYgKGogPCByb3dzICYmIGx1LmdldChqLCBqKSAhPT0gMCkge1xuICAgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIGx1LnNldChpLCBqLCBsdS5nZXQoaSwgaikgLyBsdS5nZXQoaiwgaikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5MVSA9IGx1O1xuICAgIHRoaXMucGl2b3RWZWN0b3IgPSBwaXZvdFZlY3RvcjtcbiAgICB0aGlzLnBpdm90U2lnbiA9IHBpdm90U2lnbjtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLkxVO1xuICAgIGxldCBjb2wgPSBkYXRhLmNvbHVtbnM7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2w7IGorKykge1xuICAgICAgaWYgKGRhdGEuZ2V0KGosIGopID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzb2x2ZSh2YWx1ZSkge1xuICAgIHZhbHVlID0gTWF0cml4LmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGxldCBsdSA9IHRoaXMuTFU7XG4gICAgbGV0IHJvd3MgPSBsdS5yb3dzO1xuXG4gICAgaWYgKHJvd3MgIT09IHZhbHVlLnJvd3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1Npbmd1bGFyKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTFUgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgfVxuXG4gICAgbGV0IGNvdW50ID0gdmFsdWUuY29sdW1ucztcbiAgICBsZXQgWCA9IHZhbHVlLnN1Yk1hdHJpeFJvdyh0aGlzLnBpdm90VmVjdG9yLCAwLCBjb3VudCAtIDEpO1xuICAgIGxldCBjb2x1bW5zID0gbHUuY29sdW1ucztcbiAgICBsZXQgaSwgaiwgaztcblxuICAgIGZvciAoayA9IDA7IGsgPCBjb2x1bW5zOyBrKyspIHtcbiAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgY29sdW1uczsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgWC5nZXQoaSwgaikgLSBYLmdldChrLCBqKSAqIGx1LmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrID0gY29sdW1ucyAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICBYLnNldChrLCBqLCBYLmdldChrLCBqKSAvIGx1LmdldChrLCBrKSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgazsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgWC5nZXQoaSwgaikgLSBYLmdldChrLCBqKSAqIGx1LmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgZGV0ZXJtaW5hbnQoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLkxVO1xuICAgIGlmICghZGF0YS5pc1NxdWFyZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZScpO1xuICAgIH1cbiAgICBsZXQgZGV0ZXJtaW5hbnQgPSB0aGlzLnBpdm90U2lnbjtcbiAgICBsZXQgY29sID0gZGF0YS5jb2x1bW5zO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sOyBqKyspIHtcbiAgICAgIGRldGVybWluYW50ICo9IGRhdGEuZ2V0KGosIGopO1xuICAgIH1cbiAgICByZXR1cm4gZGV0ZXJtaW5hbnQ7XG4gIH1cblxuICBnZXQgbG93ZXJUcmlhbmd1bGFyTWF0cml4KCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBsZXQgcm93cyA9IGRhdGEucm93cztcbiAgICBsZXQgY29sdW1ucyA9IGRhdGEuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmIChpID4gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIGRhdGEuZ2V0KGksIGopKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBsZXQgcm93cyA9IGRhdGEucm93cztcbiAgICBsZXQgY29sdW1ucyA9IGRhdGEuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmIChpIDw9IGopIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBkYXRhLmdldChpLCBqKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgcGl2b3RQZXJtdXRhdGlvblZlY3RvcigpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnBpdm90VmVjdG9yKTtcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGh5cG90ZW51c2UoYSwgYikge1xuICBsZXQgciA9IDA7XG4gIGlmIChNYXRoLmFicyhhKSA+IE1hdGguYWJzKGIpKSB7XG4gICAgciA9IGIgLyBhO1xuICAgIHJldHVybiBNYXRoLmFicyhhKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIGlmIChiICE9PSAwKSB7XG4gICAgciA9IGEgLyBiO1xuICAgIHJldHVybiBNYXRoLmFicyhiKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIHJldHVybiAwO1xufVxuIiwiaW1wb3J0IE1hdHJpeCBmcm9tICcuLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmltcG9ydCB7IGh5cG90ZW51c2UgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRckRlY29tcG9zaXRpb24ge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgIHZhbHVlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGxldCBxciA9IHZhbHVlLmNsb25lKCk7XG4gICAgbGV0IG0gPSB2YWx1ZS5yb3dzO1xuICAgIGxldCBuID0gdmFsdWUuY29sdW1ucztcbiAgICBsZXQgcmRpYWcgPSBuZXcgRmxvYXQ2NEFycmF5KG4pO1xuICAgIGxldCBpLCBqLCBrLCBzO1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgbGV0IG5ybSA9IDA7XG4gICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIG5ybSA9IGh5cG90ZW51c2UobnJtLCBxci5nZXQoaSwgaykpO1xuICAgICAgfVxuICAgICAgaWYgKG5ybSAhPT0gMCkge1xuICAgICAgICBpZiAocXIuZ2V0KGssIGspIDwgMCkge1xuICAgICAgICAgIG5ybSA9IC1ucm07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIHFyLnNldChpLCBrLCBxci5nZXQoaSwgaykgLyBucm0pO1xuICAgICAgICB9XG4gICAgICAgIHFyLnNldChrLCBrLCBxci5nZXQoaywgaykgKyAxKTtcbiAgICAgICAgZm9yIChqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICBzID0gMDtcbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBzICs9IHFyLmdldChpLCBrKSAqIHFyLmdldChpLCBqKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcyA9IC1zIC8gcXIuZ2V0KGssIGspO1xuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIHFyLnNldChpLCBqLCBxci5nZXQoaSwgaikgKyBzICogcXIuZ2V0KGksIGspKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJkaWFnW2tdID0gLW5ybTtcbiAgICB9XG5cbiAgICB0aGlzLlFSID0gcXI7XG4gICAgdGhpcy5SZGlhZyA9IHJkaWFnO1xuICB9XG5cbiAgc29sdmUodmFsdWUpIHtcbiAgICB2YWx1ZSA9IE1hdHJpeC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBsZXQgcXIgPSB0aGlzLlFSO1xuICAgIGxldCBtID0gcXIucm93cztcblxuICAgIGlmICh2YWx1ZS5yb3dzICE9PSBtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCByb3cgZGltZW5zaW9ucyBtdXN0IGFncmVlJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0Z1bGxSYW5rKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IGlzIHJhbmsgZGVmaWNpZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGNvdW50ID0gdmFsdWUuY29sdW1ucztcbiAgICBsZXQgWCA9IHZhbHVlLmNsb25lKCk7XG4gICAgbGV0IG4gPSBxci5jb2x1bW5zO1xuICAgIGxldCBpLCBqLCBrLCBzO1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBzICs9IHFyLmdldChpLCBrKSAqIFguZ2V0KGksIGopO1xuICAgICAgICB9XG4gICAgICAgIHMgPSAtcyAvIHFyLmdldChrLCBrKTtcbiAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopICsgcyAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICBYLnNldChrLCBqLCBYLmdldChrLCBqKSAvIHRoaXMuUmRpYWdba10pO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGs7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopIC0gWC5nZXQoaywgaikgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFguc3ViTWF0cml4KDAsIG4gLSAxLCAwLCBjb3VudCAtIDEpO1xuICB9XG5cbiAgaXNGdWxsUmFuaygpIHtcbiAgICBsZXQgY29sdW1ucyA9IHRoaXMuUVIuY29sdW1ucztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnM7IGkrKykge1xuICAgICAgaWYgKHRoaXMuUmRpYWdbaV0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCB1cHBlclRyaWFuZ3VsYXJNYXRyaXgoKSB7XG4gICAgbGV0IHFyID0gdGhpcy5RUjtcbiAgICBsZXQgbiA9IHFyLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KG4sIG4pO1xuICAgIGxldCBpLCBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGkgPCBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgcXIuZ2V0KGksIGopKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgdGhpcy5SZGlhZ1tpXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgb3J0aG9nb25hbE1hdHJpeCgpIHtcbiAgICBsZXQgcXIgPSB0aGlzLlFSO1xuICAgIGxldCByb3dzID0gcXIucm93cztcbiAgICBsZXQgY29sdW1ucyA9IHFyLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGxldCBpLCBqLCBrLCBzO1xuXG4gICAgZm9yIChrID0gY29sdW1ucyAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIFguc2V0KGksIGssIDApO1xuICAgICAgfVxuICAgICAgWC5zZXQoaywgaywgMSk7XG4gICAgICBmb3IgKGogPSBrOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmIChxci5nZXQoaywgaykgIT09IDApIHtcbiAgICAgICAgICBzID0gMDtcbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBzICs9IHFyLmdldChpLCBrKSAqIFguZ2V0KGksIGopO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHMgPSAtcyAvIHFyLmdldChrLCBrKTtcblxuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopICsgcyAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG59XG4iLCJpbXBvcnQgTWF0cml4IGZyb20gJy4uL21hdHJpeCc7XG5pbXBvcnQgV3JhcHBlck1hdHJpeDJEIGZyb20gJy4uL3dyYXAvV3JhcHBlck1hdHJpeDJEJztcblxuaW1wb3J0IHsgaHlwb3RlbnVzZSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3IodmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhbHVlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IG11c3QgYmUgbm9uLWVtcHR5Jyk7XG4gICAgfVxuXG4gICAgbGV0IG0gPSB2YWx1ZS5yb3dzO1xuICAgIGxldCBuID0gdmFsdWUuY29sdW1ucztcblxuICAgIGNvbnN0IHtcbiAgICAgIGNvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzID0gdHJ1ZSxcbiAgICAgIGNvbXB1dGVSaWdodFNpbmd1bGFyVmVjdG9ycyA9IHRydWUsXG4gICAgICBhdXRvVHJhbnNwb3NlID0gZmFsc2UsXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBsZXQgd2FudHUgPSBCb29sZWFuKGNvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzKTtcbiAgICBsZXQgd2FudHYgPSBCb29sZWFuKGNvbXB1dGVSaWdodFNpbmd1bGFyVmVjdG9ycyk7XG5cbiAgICBsZXQgc3dhcHBlZCA9IGZhbHNlO1xuICAgIGxldCBhO1xuICAgIGlmIChtIDwgbikge1xuICAgICAgaWYgKCFhdXRvVHJhbnNwb3NlKSB7XG4gICAgICAgIGEgPSB2YWx1ZS5jbG9uZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ0NvbXB1dGluZyBTVkQgb24gYSBtYXRyaXggd2l0aCBtb3JlIGNvbHVtbnMgdGhhbiByb3dzLiBDb25zaWRlciBlbmFibGluZyBhdXRvVHJhbnNwb3NlJyxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGEgPSB2YWx1ZS50cmFuc3Bvc2UoKTtcbiAgICAgICAgbSA9IGEucm93cztcbiAgICAgICAgbiA9IGEuY29sdW1ucztcbiAgICAgICAgc3dhcHBlZCA9IHRydWU7XG4gICAgICAgIGxldCBhdXggPSB3YW50dTtcbiAgICAgICAgd2FudHUgPSB3YW50djtcbiAgICAgICAgd2FudHYgPSBhdXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSB2YWx1ZS5jbG9uZSgpO1xuICAgIH1cblxuICAgIGxldCBudSA9IE1hdGgubWluKG0sIG4pO1xuICAgIGxldCBuaSA9IE1hdGgubWluKG0gKyAxLCBuKTtcbiAgICBsZXQgcyA9IG5ldyBGbG9hdDY0QXJyYXkobmkpO1xuICAgIGxldCBVID0gbmV3IE1hdHJpeChtLCBudSk7XG4gICAgbGV0IFYgPSBuZXcgTWF0cml4KG4sIG4pO1xuXG4gICAgbGV0IGUgPSBuZXcgRmxvYXQ2NEFycmF5KG4pO1xuICAgIGxldCB3b3JrID0gbmV3IEZsb2F0NjRBcnJheShtKTtcblxuICAgIGxldCBzaSA9IG5ldyBGbG9hdDY0QXJyYXkobmkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmk7IGkrKykgc2lbaV0gPSBpO1xuXG4gICAgbGV0IG5jdCA9IE1hdGgubWluKG0gLSAxLCBuKTtcbiAgICBsZXQgbnJ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obiAtIDIsIG0pKTtcbiAgICBsZXQgbXJjID0gTWF0aC5tYXgobmN0LCBucnQpO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBtcmM7IGsrKykge1xuICAgICAgaWYgKGsgPCBuY3QpIHtcbiAgICAgICAgc1trXSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgc1trXSA9IGh5cG90ZW51c2Uoc1trXSwgYS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzW2tdICE9PSAwKSB7XG4gICAgICAgICAgaWYgKGEuZ2V0KGssIGspIDwgMCkge1xuICAgICAgICAgICAgc1trXSA9IC1zW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgYS5zZXQoaSwgaywgYS5nZXQoaSwgaykgLyBzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYS5zZXQoaywgaywgYS5nZXQoaywgaykgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBzW2tdID0gLXNba107XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoayA8IG5jdCAmJiBzW2tdICE9PSAwKSB7XG4gICAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICB0ICs9IGEuZ2V0KGksIGspICogYS5nZXQoaSwgaik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHQgPSAtdCAvIGEuZ2V0KGssIGspO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBhLnNldChpLCBqLCBhLmdldChpLCBqKSArIHQgKiBhLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVbal0gPSBhLmdldChrLCBqKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHdhbnR1ICYmIGsgPCBuY3QpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBVLnNldChpLCBrLCBhLmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGsgPCBucnQpIHtcbiAgICAgICAgZVtrXSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgIGVba10gPSBoeXBvdGVudXNlKGVba10sIGVbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlW2tdICE9PSAwKSB7XG4gICAgICAgICAgaWYgKGVbayArIDFdIDwgMCkge1xuICAgICAgICAgICAgZVtrXSA9IDAgLSBlW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGVbaV0gLz0gZVtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZVtrICsgMV0gKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlW2tdID0gLWVba107XG4gICAgICAgIGlmIChrICsgMSA8IG0gJiYgZVtrXSAhPT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgd29ya1tpXSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgIHdvcmtbaV0gKz0gZVtqXSAqIGEuZ2V0KGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gLWVbal0gLyBlW2sgKyAxXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICBhLnNldChpLCBqLCBhLmdldChpLCBqKSArIHQgKiB3b3JrW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBWLnNldChpLCBrLCBlW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcCA9IE1hdGgubWluKG4sIG0gKyAxKTtcbiAgICBpZiAobmN0IDwgbikge1xuICAgICAgc1tuY3RdID0gYS5nZXQobmN0LCBuY3QpO1xuICAgIH1cbiAgICBpZiAobSA8IHApIHtcbiAgICAgIHNbcCAtIDFdID0gMDtcbiAgICB9XG4gICAgaWYgKG5ydCArIDEgPCBwKSB7XG4gICAgICBlW25ydF0gPSBhLmdldChucnQsIHAgLSAxKTtcbiAgICB9XG4gICAgZVtwIC0gMV0gPSAwO1xuXG4gICAgaWYgKHdhbnR1KSB7XG4gICAgICBmb3IgKGxldCBqID0gbmN0OyBqIDwgbnU7IGorKykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgIFUuc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICAgIFUuc2V0KGosIGosIDEpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgayA9IG5jdCAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAgIGlmIChzW2tdICE9PSAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbnU7IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgdCArPSBVLmdldChpLCBrKSAqIFUuZ2V0KGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdCA9IC10IC8gVS5nZXQoaywgayk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICBVLnNldChpLCBqLCBVLmdldChpLCBqKSArIHQgKiBVLmdldChpLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBVLnNldChpLCBrLCAtVS5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBVLnNldChrLCBrLCAxICsgVS5nZXQoaywgaykpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgayAtIDE7IGkrKykge1xuICAgICAgICAgICAgVS5zZXQoaSwgaywgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBVLnNldChpLCBrLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgVS5zZXQoaywgaywgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod2FudHYpIHtcbiAgICAgIGZvciAobGV0IGsgPSBuIC0gMTsgayA+PSAwOyBrLS0pIHtcbiAgICAgICAgaWYgKGsgPCBucnQgJiYgZVtrXSAhPT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgIHQgKz0gVi5nZXQoaSwgaykgKiBWLmdldChpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSAtdCAvIFYuZ2V0KGsgKyAxLCBrKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICBWLnNldChpLCBqLCBWLmdldChpLCBqKSArIHQgKiBWLmdldChpLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgVi5zZXQoaSwgaywgMCk7XG4gICAgICAgIH1cbiAgICAgICAgVi5zZXQoaywgaywgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHBwID0gcCAtIDE7XG4gICAgbGV0IGl0ZXIgPSAwO1xuICAgIGxldCBlcHMgPSBOdW1iZXIuRVBTSUxPTjtcbiAgICB3aGlsZSAocCA+IDApIHtcbiAgICAgIGxldCBrLCBrYXNlO1xuICAgICAgZm9yIChrID0gcCAtIDI7IGsgPj0gLTE7IGstLSkge1xuICAgICAgICBpZiAoayA9PT0gLTEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbHBoYSA9XG4gICAgICAgICAgTnVtYmVyLk1JTl9WQUxVRSArIGVwcyAqIE1hdGguYWJzKHNba10gKyBNYXRoLmFicyhzW2sgKyAxXSkpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZVtrXSkgPD0gYWxwaGEgfHwgTnVtYmVyLmlzTmFOKGVba10pKSB7XG4gICAgICAgICAgZVtrXSA9IDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChrID09PSBwIC0gMikge1xuICAgICAgICBrYXNlID0gNDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBrcztcbiAgICAgICAgZm9yIChrcyA9IHAgLSAxOyBrcyA+PSBrOyBrcy0tKSB7XG4gICAgICAgICAgaWYgKGtzID09PSBrKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHQgPVxuICAgICAgICAgICAgKGtzICE9PSBwID8gTWF0aC5hYnMoZVtrc10pIDogMCkgK1xuICAgICAgICAgICAgKGtzICE9PSBrICsgMSA/IE1hdGguYWJzKGVba3MgLSAxXSkgOiAwKTtcbiAgICAgICAgICBpZiAoTWF0aC5hYnMoc1trc10pIDw9IGVwcyAqIHQpIHtcbiAgICAgICAgICAgIHNba3NdID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa3MgPT09IGspIHtcbiAgICAgICAgICBrYXNlID0gMztcbiAgICAgICAgfSBlbHNlIGlmIChrcyA9PT0gcCAtIDEpIHtcbiAgICAgICAgICBrYXNlID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrYXNlID0gMjtcbiAgICAgICAgICBrID0ga3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaysrO1xuXG4gICAgICBzd2l0Y2ggKGthc2UpIHtcbiAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgbGV0IGYgPSBlW3AgLSAyXTtcbiAgICAgICAgICBlW3AgLSAyXSA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IHAgLSAyOyBqID49IGs7IGotLSkge1xuICAgICAgICAgICAgbGV0IHQgPSBoeXBvdGVudXNlKHNbal0sIGYpO1xuICAgICAgICAgICAgbGV0IGNzID0gc1tqXSAvIHQ7XG4gICAgICAgICAgICBsZXQgc24gPSBmIC8gdDtcbiAgICAgICAgICAgIHNbal0gPSB0O1xuICAgICAgICAgICAgaWYgKGogIT09IGspIHtcbiAgICAgICAgICAgICAgZiA9IC1zbiAqIGVbaiAtIDFdO1xuICAgICAgICAgICAgICBlW2ogLSAxXSA9IGNzICogZVtqIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gY3MgKiBWLmdldChpLCBqKSArIHNuICogVi5nZXQoaSwgcCAtIDEpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIHAgLSAxLCAtc24gKiBWLmdldChpLCBqKSArIGNzICogVi5nZXQoaSwgcCAtIDEpKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBqLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICBsZXQgZiA9IGVbayAtIDFdO1xuICAgICAgICAgIGVbayAtIDFdID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBqID0gazsgaiA8IHA7IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSBoeXBvdGVudXNlKHNbal0sIGYpO1xuICAgICAgICAgICAgbGV0IGNzID0gc1tqXSAvIHQ7XG4gICAgICAgICAgICBsZXQgc24gPSBmIC8gdDtcbiAgICAgICAgICAgIHNbal0gPSB0O1xuICAgICAgICAgICAgZiA9IC1zbiAqIGVbal07XG4gICAgICAgICAgICBlW2pdID0gY3MgKiBlW2pdO1xuICAgICAgICAgICAgaWYgKHdhbnR1KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVS5nZXQoaSwgaikgKyBzbiAqIFUuZ2V0KGksIGsgLSAxKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBrIC0gMSwgLXNuICogVS5nZXQoaSwgaikgKyBjcyAqIFUuZ2V0KGksIGsgLSAxKSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heChcbiAgICAgICAgICAgIE1hdGguYWJzKHNbcCAtIDFdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKHNbcCAtIDJdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKGVbcCAtIDJdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKHNba10pLFxuICAgICAgICAgICAgTWF0aC5hYnMoZVtrXSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBzcCA9IHNbcCAtIDFdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3Qgc3BtMSA9IHNbcCAtIDJdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3QgZXBtMSA9IGVbcCAtIDJdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3Qgc2sgPSBzW2tdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3QgZWsgPSBlW2tdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3QgYiA9ICgoc3BtMSArIHNwKSAqIChzcG0xIC0gc3ApICsgZXBtMSAqIGVwbTEpIC8gMjtcbiAgICAgICAgICBjb25zdCBjID0gc3AgKiBlcG0xICogKHNwICogZXBtMSk7XG4gICAgICAgICAgbGV0IHNoaWZ0ID0gMDtcbiAgICAgICAgICBpZiAoYiAhPT0gMCB8fCBjICE9PSAwKSB7XG4gICAgICAgICAgICBpZiAoYiA8IDApIHtcbiAgICAgICAgICAgICAgc2hpZnQgPSAwIC0gTWF0aC5zcXJ0KGIgKiBiICsgYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaGlmdCA9IE1hdGguc3FydChiICogYiArIGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hpZnQgPSBjIC8gKGIgKyBzaGlmdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBmID0gKHNrICsgc3ApICogKHNrIC0gc3ApICsgc2hpZnQ7XG4gICAgICAgICAgbGV0IGcgPSBzayAqIGVrO1xuICAgICAgICAgIGZvciAobGV0IGogPSBrOyBqIDwgcCAtIDE7IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSBoeXBvdGVudXNlKGYsIGcpO1xuICAgICAgICAgICAgaWYgKHQgPT09IDApIHQgPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgICAgICAgbGV0IGNzID0gZiAvIHQ7XG4gICAgICAgICAgICBsZXQgc24gPSBnIC8gdDtcbiAgICAgICAgICAgIGlmIChqICE9PSBrKSB7XG4gICAgICAgICAgICAgIGVbaiAtIDFdID0gdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGYgPSBjcyAqIHNbal0gKyBzbiAqIGVbal07XG4gICAgICAgICAgICBlW2pdID0gY3MgKiBlW2pdIC0gc24gKiBzW2pdO1xuICAgICAgICAgICAgZyA9IHNuICogc1tqICsgMV07XG4gICAgICAgICAgICBzW2ogKyAxXSA9IGNzICogc1tqICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gY3MgKiBWLmdldChpLCBqKSArIHNuICogVi5nZXQoaSwgaiArIDEpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGogKyAxLCAtc24gKiBWLmdldChpLCBqKSArIGNzICogVi5nZXQoaSwgaiArIDEpKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBqLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdCA9IGh5cG90ZW51c2UoZiwgZyk7XG4gICAgICAgICAgICBpZiAodCA9PT0gMCkgdCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgICAgICAgICBjcyA9IGYgLyB0O1xuICAgICAgICAgICAgc24gPSBnIC8gdDtcbiAgICAgICAgICAgIHNbal0gPSB0O1xuICAgICAgICAgICAgZiA9IGNzICogZVtqXSArIHNuICogc1tqICsgMV07XG4gICAgICAgICAgICBzW2ogKyAxXSA9IC1zbiAqIGVbal0gKyBjcyAqIHNbaiArIDFdO1xuICAgICAgICAgICAgZyA9IHNuICogZVtqICsgMV07XG4gICAgICAgICAgICBlW2ogKyAxXSA9IGNzICogZVtqICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHUgJiYgaiA8IG0gLSAxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVS5nZXQoaSwgaikgKyBzbiAqIFUuZ2V0KGksIGogKyAxKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBqICsgMSwgLXNuICogVS5nZXQoaSwgaikgKyBjcyAqIFUuZ2V0KGksIGogKyAxKSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZVtwIC0gMl0gPSBmO1xuICAgICAgICAgIGl0ZXIgPSBpdGVyICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICBpZiAoc1trXSA8PSAwKSB7XG4gICAgICAgICAgICBzW2tdID0gc1trXSA8IDAgPyAtc1trXSA6IDA7XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHA7IGkrKykge1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGssIC1WLmdldChpLCBrKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKGsgPCBwcCkge1xuICAgICAgICAgICAgaWYgKHNba10gPj0gc1trICsgMV0pIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdCA9IHNba107XG4gICAgICAgICAgICBzW2tdID0gc1trICsgMV07XG4gICAgICAgICAgICBzW2sgKyAxXSA9IHQ7XG4gICAgICAgICAgICBpZiAod2FudHYgJiYgayA8IG4gLSAxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IFYuZ2V0KGksIGsgKyAxKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBrICsgMSwgVi5nZXQoaSwgaykpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGssIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FudHUgJiYgayA8IG0gLSAxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IFUuZ2V0KGksIGsgKyAxKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBrICsgMSwgVS5nZXQoaSwgaykpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGssIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGl0ZXIgPSAwO1xuICAgICAgICAgIHAtLTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBubyBkZWZhdWx0XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN3YXBwZWQpIHtcbiAgICAgIGxldCB0bXAgPSBWO1xuICAgICAgViA9IFU7XG4gICAgICBVID0gdG1wO1xuICAgIH1cblxuICAgIHRoaXMubSA9IG07XG4gICAgdGhpcy5uID0gbjtcbiAgICB0aGlzLnMgPSBzO1xuICAgIHRoaXMuVSA9IFU7XG4gICAgdGhpcy5WID0gVjtcbiAgfVxuXG4gIHNvbHZlKHZhbHVlKSB7XG4gICAgbGV0IFkgPSB2YWx1ZTtcbiAgICBsZXQgZSA9IHRoaXMudGhyZXNob2xkO1xuICAgIGxldCBzY29scyA9IHRoaXMucy5sZW5ndGg7XG4gICAgbGV0IExzID0gTWF0cml4Lnplcm9zKHNjb2xzLCBzY29scyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjb2xzOyBpKyspIHtcbiAgICAgIGlmIChNYXRoLmFicyh0aGlzLnNbaV0pIDw9IGUpIHtcbiAgICAgICAgTHMuc2V0KGksIGksIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTHMuc2V0KGksIGksIDEgLyB0aGlzLnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBVID0gdGhpcy5VO1xuICAgIGxldCBWID0gdGhpcy5yaWdodFNpbmd1bGFyVmVjdG9ycztcblxuICAgIGxldCBWTCA9IFYubW11bChMcyk7XG4gICAgbGV0IHZyb3dzID0gVi5yb3dzO1xuICAgIGxldCB1cm93cyA9IFUucm93cztcbiAgICBsZXQgVkxVID0gTWF0cml4Lnplcm9zKHZyb3dzLCB1cm93cyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZyb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdXJvd3M7IGorKykge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBzY29sczsgaysrKSB7XG4gICAgICAgICAgc3VtICs9IFZMLmdldChpLCBrKSAqIFUuZ2V0KGosIGspO1xuICAgICAgICB9XG4gICAgICAgIFZMVS5zZXQoaSwgaiwgc3VtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gVkxVLm1tdWwoWSk7XG4gIH1cblxuICBzb2x2ZUZvckRpYWdvbmFsKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuc29sdmUoTWF0cml4LmRpYWcodmFsdWUpKTtcbiAgfVxuXG4gIGludmVyc2UoKSB7XG4gICAgbGV0IFYgPSB0aGlzLlY7XG4gICAgbGV0IGUgPSB0aGlzLnRocmVzaG9sZDtcbiAgICBsZXQgdnJvd3MgPSBWLnJvd3M7XG4gICAgbGV0IHZjb2xzID0gVi5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeCh2cm93cywgdGhpcy5zLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZyb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmNvbHM7IGorKykge1xuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2pdKSA+IGUpIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBWLmdldChpLCBqKSAvIHRoaXMuc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgVSA9IHRoaXMuVTtcblxuICAgIGxldCB1cm93cyA9IFUucm93cztcbiAgICBsZXQgdWNvbHMgPSBVLmNvbHVtbnM7XG4gICAgbGV0IFkgPSBuZXcgTWF0cml4KHZyb3dzLCB1cm93cyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZyb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdXJvd3M7IGorKykge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB1Y29sczsgaysrKSB7XG4gICAgICAgICAgc3VtICs9IFguZ2V0KGksIGspICogVS5nZXQoaiwgayk7XG4gICAgICAgIH1cbiAgICAgICAgWS5zZXQoaSwgaiwgc3VtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWTtcbiAgfVxuXG4gIGdldCBjb25kaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc1swXSAvIHRoaXMuc1tNYXRoLm1pbih0aGlzLm0sIHRoaXMubikgLSAxXTtcbiAgfVxuXG4gIGdldCBub3JtMigpIHtcbiAgICByZXR1cm4gdGhpcy5zWzBdO1xuICB9XG5cbiAgZ2V0IHJhbmsoKSB7XG4gICAgbGV0IHRvbCA9IE1hdGgubWF4KHRoaXMubSwgdGhpcy5uKSAqIHRoaXMuc1swXSAqIE51bWJlci5FUFNJTE9OO1xuICAgIGxldCByID0gMDtcbiAgICBsZXQgcyA9IHRoaXMucztcbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGlmIChzW2ldID4gdG9sKSB7XG4gICAgICAgIHIrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBnZXQgZGlhZ29uYWwoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zKTtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKSB7XG4gICAgcmV0dXJuIChOdW1iZXIuRVBTSUxPTiAvIDIpICogTWF0aC5tYXgodGhpcy5tLCB0aGlzLm4pICogdGhpcy5zWzBdO1xuICB9XG5cbiAgZ2V0IGxlZnRTaW5ndWxhclZlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuVTtcbiAgfVxuXG4gIGdldCByaWdodFNpbmd1bGFyVmVjdG9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5WO1xuICB9XG5cbiAgZ2V0IGRpYWdvbmFsTWF0cml4KCkge1xuICAgIHJldHVybiBNYXRyaXguZGlhZyh0aGlzLnMpO1xuICB9XG59XG4iLCJpbXBvcnQgTHVEZWNvbXBvc2l0aW9uIGZyb20gJy4vZGMvbHUnO1xuaW1wb3J0IFFyRGVjb21wb3NpdGlvbiBmcm9tICcuL2RjL3FyJztcbmltcG9ydCBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbiBmcm9tICcuL2RjL3N2ZCc7XG5pbXBvcnQgTWF0cml4IGZyb20gJy4vbWF0cml4JztcbmltcG9ydCBXcmFwcGVyTWF0cml4MkQgZnJvbSAnLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKG1hdHJpeCwgdXNlU1ZEID0gZmFsc2UpIHtcbiAgbWF0cml4ID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gIGlmICh1c2VTVkQpIHtcbiAgICByZXR1cm4gbmV3IFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uKG1hdHJpeCkuaW52ZXJzZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzb2x2ZShtYXRyaXgsIE1hdHJpeC5leWUobWF0cml4LnJvd3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29sdmUobGVmdEhhbmRTaWRlLCByaWdodEhhbmRTaWRlLCB1c2VTVkQgPSBmYWxzZSkge1xuICBsZWZ0SGFuZFNpZGUgPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgobGVmdEhhbmRTaWRlKTtcbiAgcmlnaHRIYW5kU2lkZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChyaWdodEhhbmRTaWRlKTtcbiAgaWYgKHVzZVNWRCkge1xuICAgIHJldHVybiBuZXcgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24obGVmdEhhbmRTaWRlKS5zb2x2ZShyaWdodEhhbmRTaWRlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGVmdEhhbmRTaWRlLmlzU3F1YXJlKClcbiAgICAgID8gbmV3IEx1RGVjb21wb3NpdGlvbihsZWZ0SGFuZFNpZGUpLnNvbHZlKHJpZ2h0SGFuZFNpZGUpXG4gICAgICA6IG5ldyBRckRlY29tcG9zaXRpb24obGVmdEhhbmRTaWRlKS5zb2x2ZShyaWdodEhhbmRTaWRlKTtcbiAgfVxufVxuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhbiBBcnJheSAoYXJyYXkgb3IgdHlwZWQgYXJyYXksIGV4Y2VwdCB0aG9zZSB0aGF0IGNvbnRhaW4gYmlnaW50IHZhbHVlcykuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gT2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGFycmF5IG9yIGEgdHlwZWQgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FueUFycmF5KHZhbHVlKSB7XG4gICAgY29uc3QgdGFnID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRhZy5lbmRzV2l0aCgnQXJyYXldJykgJiYgIXRhZy5pbmNsdWRlcygnQmlnJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gQXJyYXkgKGFycmF5IG9yIHR5cGVkIGFycmF5LCBleGNlcHQgdGhvc2UgdGhhdCBjb250YWluIGJpZ2ludCB2YWx1ZXMpLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIE9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIHR5cGVkIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IHRhZyA9IHRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIHJldHVybiB0YWcuZW5kc1dpdGgoJ0FycmF5XScpICYmICF0YWcuaW5jbHVkZXMoJ0JpZycpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuaW1wb3J0IG1heCBmcm9tICdtbC1hcnJheS1tYXgnO1xuaW1wb3J0IG1pbiBmcm9tICdtbC1hcnJheS1taW4nO1xuXG5mdW5jdGlvbiByZXNjYWxlKGlucHV0KSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICBpZiAoIWlzQW55QXJyYXkoaW5wdXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9IGVsc2UgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICB2YXIgb3V0cHV0O1xuXG4gIGlmIChvcHRpb25zLm91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpc0FueUFycmF5KG9wdGlvbnMub3V0cHV0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3V0cHV0IG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IGlmIHNwZWNpZmllZCcpO1xuICAgIH1cblxuICAgIG91dHB1dCA9IG9wdGlvbnMub3V0cHV0O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IG5ldyBBcnJheShpbnB1dC5sZW5ndGgpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRNaW4gPSBtaW4oaW5wdXQpO1xuICB2YXIgY3VycmVudE1heCA9IG1heChpbnB1dCk7XG5cbiAgaWYgKGN1cnJlbnRNaW4gPT09IGN1cnJlbnRNYXgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluaW11bSBhbmQgbWF4aW11bSBpbnB1dCB2YWx1ZXMgYXJlIGVxdWFsLiBDYW5ub3QgcmVzY2FsZSBhIGNvbnN0YW50IGFycmF5Jyk7XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWluID0gb3B0aW9ucy5taW4sXG4gICAgICBtaW5WYWx1ZSA9IF9vcHRpb25zJG1pbiA9PT0gdm9pZCAwID8gb3B0aW9ucy5hdXRvTWluTWF4ID8gY3VycmVudE1pbiA6IDAgOiBfb3B0aW9ucyRtaW4sXG4gICAgICBfb3B0aW9ucyRtYXggPSBvcHRpb25zLm1heCxcbiAgICAgIG1heFZhbHVlID0gX29wdGlvbnMkbWF4ID09PSB2b2lkIDAgPyBvcHRpb25zLmF1dG9NaW5NYXggPyBjdXJyZW50TWF4IDogMSA6IF9vcHRpb25zJG1heDtcblxuICBpZiAobWluVmFsdWUgPj0gbWF4VmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG9wdGlvbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXggb3B0aW9uJyk7XG4gIH1cblxuICB2YXIgZmFjdG9yID0gKG1heFZhbHVlIC0gbWluVmFsdWUpIC8gKGN1cnJlbnRNYXggLSBjdXJyZW50TWluKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0W2ldID0gKGlucHV0W2ldIC0gY3VycmVudE1pbikgKiBmYWN0b3IgKyBtaW5WYWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmV4cG9ydCB7IHJlc2NhbGUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmZ1bmN0aW9uIG1pbihpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJGZyb21JbmRleCA9IG9wdGlvbnMuZnJvbUluZGV4LFxuICAgICAgZnJvbUluZGV4ID0gX29wdGlvbnMkZnJvbUluZGV4ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkZnJvbUluZGV4LFxuICAgICAgX29wdGlvbnMkdG9JbmRleCA9IG9wdGlvbnMudG9JbmRleCxcbiAgICAgIHRvSW5kZXggPSBfb3B0aW9ucyR0b0luZGV4ID09PSB2b2lkIDAgPyBpbnB1dC5sZW5ndGggOiBfb3B0aW9ucyR0b0luZGV4O1xuXG4gIGlmIChmcm9tSW5kZXggPCAwIHx8IGZyb21JbmRleCA+PSBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoZnJvbUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgnKTtcbiAgfVxuXG4gIGlmICh0b0luZGV4IDw9IGZyb21JbmRleCB8fCB0b0luZGV4ID4gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHRvSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCcpO1xuICB9XG5cbiAgdmFyIG1pblZhbHVlID0gaW5wdXRbZnJvbUluZGV4XTtcblxuICBmb3IgKHZhciBpID0gZnJvbUluZGV4ICsgMTsgaSA8IHRvSW5kZXg7IGkrKykge1xuICAgIGlmIChpbnB1dFtpXSA8IG1pblZhbHVlKSBtaW5WYWx1ZSA9IGlucHV0W2ldO1xuICB9XG5cbiAgcmV0dXJuIG1pblZhbHVlO1xufVxuXG5leHBvcnQgeyBtaW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmZ1bmN0aW9uIG1heChpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJGZyb21JbmRleCA9IG9wdGlvbnMuZnJvbUluZGV4LFxuICAgICAgZnJvbUluZGV4ID0gX29wdGlvbnMkZnJvbUluZGV4ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkZnJvbUluZGV4LFxuICAgICAgX29wdGlvbnMkdG9JbmRleCA9IG9wdGlvbnMudG9JbmRleCxcbiAgICAgIHRvSW5kZXggPSBfb3B0aW9ucyR0b0luZGV4ID09PSB2b2lkIDAgPyBpbnB1dC5sZW5ndGggOiBfb3B0aW9ucyR0b0luZGV4O1xuXG4gIGlmIChmcm9tSW5kZXggPCAwIHx8IGZyb21JbmRleCA+PSBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoZnJvbUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgnKTtcbiAgfVxuXG4gIGlmICh0b0luZGV4IDw9IGZyb21JbmRleCB8fCB0b0luZGV4ID4gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHRvSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCcpO1xuICB9XG5cbiAgdmFyIG1heFZhbHVlID0gaW5wdXRbZnJvbUluZGV4XTtcblxuICBmb3IgKHZhciBpID0gZnJvbUluZGV4ICsgMTsgaSA8IHRvSW5kZXg7IGkrKykge1xuICAgIGlmIChpbnB1dFtpXSA+IG1heFZhbHVlKSBtYXhWYWx1ZSA9IGlucHV0W2ldO1xuICB9XG5cbiAgcmV0dXJuIG1heFZhbHVlO1xufVxuXG5leHBvcnQgeyBtYXggYXMgZGVmYXVsdCB9O1xuIiwiY29uc3QgaW5kZW50ID0gJyAnLnJlcGVhdCgyKTtcbmNvbnN0IGluZGVudERhdGEgPSAnICcucmVwZWF0KDQpO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdE1hdHJpeCgpIHtcbiAgcmV0dXJuIGluc3BlY3RNYXRyaXhXaXRoT3B0aW9ucyh0aGlzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RNYXRyaXhXaXRoT3B0aW9ucyhtYXRyaXgsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbWF4Um93cyA9IDE1LFxuICAgIG1heENvbHVtbnMgPSAxMCxcbiAgICBtYXhOdW1TaXplID0gOCxcbiAgICBwYWRNaW51cyA9ICdhdXRvJyxcbiAgfSA9IG9wdGlvbnM7XG4gIHJldHVybiBgJHttYXRyaXguY29uc3RydWN0b3IubmFtZX0ge1xuJHtpbmRlbnR9W1xuJHtpbmRlbnREYXRhfSR7aW5zcGVjdERhdGEobWF0cml4LCBtYXhSb3dzLCBtYXhDb2x1bW5zLCBtYXhOdW1TaXplLCBwYWRNaW51cyl9XG4ke2luZGVudH1dXG4ke2luZGVudH1yb3dzOiAke21hdHJpeC5yb3dzfVxuJHtpbmRlbnR9Y29sdW1uczogJHttYXRyaXguY29sdW1uc31cbn1gO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0RGF0YShtYXRyaXgsIG1heFJvd3MsIG1heENvbHVtbnMsIG1heE51bVNpemUsIHBhZE1pbnVzKSB7XG4gIGNvbnN0IHsgcm93cywgY29sdW1ucyB9ID0gbWF0cml4O1xuICBjb25zdCBtYXhJID0gTWF0aC5taW4ocm93cywgbWF4Um93cyk7XG4gIGNvbnN0IG1heEogPSBNYXRoLm1pbihjb2x1bW5zLCBtYXhDb2x1bW5zKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKHBhZE1pbnVzID09PSAnYXV0bycpIHtcbiAgICBwYWRNaW51cyA9IGZhbHNlO1xuICAgIGxvb3A6IGZvciAobGV0IGkgPSAwOyBpIDwgbWF4STsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1heEo7IGorKykge1xuICAgICAgICBpZiAobWF0cml4LmdldChpLCBqKSA8IDApIHtcbiAgICAgICAgICBwYWRNaW51cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4STsgaSsrKSB7XG4gICAgbGV0IGxpbmUgPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1heEo7IGorKykge1xuICAgICAgbGluZS5wdXNoKGZvcm1hdE51bWJlcihtYXRyaXguZ2V0KGksIGopLCBtYXhOdW1TaXplLCBwYWRNaW51cykpO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChgJHtsaW5lLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBpZiAobWF4SiAhPT0gY29sdW1ucykge1xuICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gKz0gYCAuLi4gJHtjb2x1bW5zIC0gbWF4Q29sdW1uc30gbW9yZSBjb2x1bW5zYDtcbiAgfVxuICBpZiAobWF4SSAhPT0gcm93cykge1xuICAgIHJlc3VsdC5wdXNoKGAuLi4gJHtyb3dzIC0gbWF4Um93c30gbW9yZSByb3dzYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5qb2luKGBcXG4ke2luZGVudERhdGF9YCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWJlcihudW0sIG1heE51bVNpemUsIHBhZE1pbnVzKSB7XG4gIHJldHVybiAoXG4gICAgbnVtID49IDAgJiYgcGFkTWludXNcbiAgICAgID8gYCAke2Zvcm1hdE51bWJlcjIobnVtLCBtYXhOdW1TaXplIC0gMSl9YFxuICAgICAgOiBmb3JtYXROdW1iZXIyKG51bSwgbWF4TnVtU2l6ZSlcbiAgKS5wYWRFbmQobWF4TnVtU2l6ZSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWJlcjIobnVtLCBsZW4pIHtcbiAgLy8gc21hbGwubGVuZ3RoIG51bWJlcnMgc2hvdWxkIGJlIGFzIGlzXG4gIGxldCBzdHIgPSBudW0udG9TdHJpbmcoKTtcbiAgaWYgKHN0ci5sZW5ndGggPD0gbGVuKSByZXR1cm4gc3RyO1xuXG4gIC8vICg3KScwLjAwMTIzJyBpcyBiZXR0ZXIgdGhlbiAoNyknMS4yM2UtMidcbiAgLy8gKDgpJzAuMDAwMTIzJyBpcyB3b3JzZSB0aGVuICg3KScxLjIzZS0zJyxcbiAgbGV0IGZpeCA9IG51bS50b0ZpeGVkKGxlbik7XG4gIGlmIChmaXgubGVuZ3RoID4gbGVuKSB7XG4gICAgZml4ID0gbnVtLnRvRml4ZWQoTWF0aC5tYXgoMCwgbGVuIC0gKGZpeC5sZW5ndGggLSBsZW4pKSk7XG4gIH1cbiAgaWYgKFxuICAgIGZpeC5sZW5ndGggPD0gbGVuICYmXG4gICAgIWZpeC5zdGFydHNXaXRoKCcwLjAwMCcpICYmXG4gICAgIWZpeC5zdGFydHNXaXRoKCctMC4wMDAnKVxuICApIHtcbiAgICByZXR1cm4gZml4O1xuICB9XG5cbiAgLy8gd2VsbCwgaWYgaXQncyBzdGlsbCB0b28gbG9uZyB0aGUgdXNlciBzaG91bGQndmUgdXNlZCBsb25nZXIgbnVtYmVyc1xuICBsZXQgZXhwID0gbnVtLnRvRXhwb25lbnRpYWwobGVuKTtcbiAgaWYgKGV4cC5sZW5ndGggPiBsZW4pIHtcbiAgICBleHAgPSBudW0udG9FeHBvbmVudGlhbChNYXRoLm1heCgwLCBsZW4gLSAoZXhwLmxlbmd0aCAtIGxlbikpKTtcbiAgfVxuICByZXR1cm4gZXhwLnNsaWNlKDApO1xufVxuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENoZWNrIHRoYXQgYSByb3cgaW5kZXggaXMgbm90IG91dCBvZiBib3VuZHNcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtib29sZWFufSBbb3V0ZXJdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1Jvd0luZGV4KG1hdHJpeCwgaW5kZXgsIG91dGVyKSB7XG4gIGxldCBtYXggPSBvdXRlciA/IG1hdHJpeC5yb3dzIDogbWF0cml4LnJvd3MgLSAxO1xuICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1JvdyBpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDaGVjayB0aGF0IGEgY29sdW1uIGluZGV4IGlzIG5vdCBvdXQgb2YgYm91bmRzXG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW291dGVyXVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5JbmRleChtYXRyaXgsIGluZGV4LCBvdXRlcikge1xuICBsZXQgbWF4ID0gb3V0ZXIgPyBtYXRyaXguY29sdW1ucyA6IG1hdHJpeC5jb2x1bW5zIC0gMTtcbiAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IG1heCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdmVjdG9yIGlzIGFuIGFycmF5IHdpdGggdGhlIHJpZ2h0IGxlbmd0aFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IHZlY3RvclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSb3dWZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgaWYgKHZlY3Rvci50bzFEQXJyYXkpIHtcbiAgICB2ZWN0b3IgPSB2ZWN0b3IudG8xREFycmF5KCk7XG4gIH1cbiAgaWYgKHZlY3Rvci5sZW5ndGggIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICAndmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMnLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdmVjdG9yIGlzIGFuIGFycmF5IHdpdGggdGhlIHJpZ2h0IGxlbmd0aFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IHZlY3RvclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5WZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgaWYgKHZlY3Rvci50bzFEQXJyYXkpIHtcbiAgICB2ZWN0b3IgPSB2ZWN0b3IudG8xREFycmF5KCk7XG4gIH1cbiAgaWYgKHZlY3Rvci5sZW5ndGggIT09IG1hdHJpeC5yb3dzKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiByb3dzJyk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUm93SW5kaWNlcyhtYXRyaXgsIHJvd0luZGljZXMpIHtcbiAgaWYgKCFpc0FueUFycmF5KHJvd0luZGljZXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncm93IGluZGljZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJvd0luZGljZXNbaV0gPCAwIHx8IHJvd0luZGljZXNbaV0gPj0gbWF0cml4LnJvd3MpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyb3cgaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbHVtbkluZGljZXMobWF0cml4LCBjb2x1bW5JbmRpY2VzKSB7XG4gIGlmICghaXNBbnlBcnJheShjb2x1bW5JbmRpY2VzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbHVtbiBpbmRpY2VzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjb2x1bW5JbmRpY2VzW2ldIDwgMCB8fCBjb2x1bW5JbmRpY2VzW2ldID49IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignY29sdW1uIGluZGljZXMgYXJlIG91dCBvZiByYW5nZScpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSYW5nZShtYXRyaXgsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZXhwZWN0ZWQgNCBhcmd1bWVudHMnKTtcbiAgfVxuICBjaGVja051bWJlcignc3RhcnRSb3cnLCBzdGFydFJvdyk7XG4gIGNoZWNrTnVtYmVyKCdlbmRSb3cnLCBlbmRSb3cpO1xuICBjaGVja051bWJlcignc3RhcnRDb2x1bW4nLCBzdGFydENvbHVtbik7XG4gIGNoZWNrTnVtYmVyKCdlbmRDb2x1bW4nLCBlbmRDb2x1bW4pO1xuICBpZiAoXG4gICAgc3RhcnRSb3cgPiBlbmRSb3cgfHxcbiAgICBzdGFydENvbHVtbiA+IGVuZENvbHVtbiB8fFxuICAgIHN0YXJ0Um93IDwgMCB8fFxuICAgIHN0YXJ0Um93ID49IG1hdHJpeC5yb3dzIHx8XG4gICAgZW5kUm93IDwgMCB8fFxuICAgIGVuZFJvdyA+PSBtYXRyaXgucm93cyB8fFxuICAgIHN0YXJ0Q29sdW1uIDwgMCB8fFxuICAgIHN0YXJ0Q29sdW1uID49IG1hdHJpeC5jb2x1bW5zIHx8XG4gICAgZW5kQ29sdW1uIDwgMCB8fFxuICAgIGVuZENvbHVtbiA+PSBtYXRyaXguY29sdW1uc1xuICApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignU3VibWF0cml4IGluZGljZXMgYXJlIG91dCBvZiByYW5nZScpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdBcnJheShsZW5ndGgsIHZhbHVlID0gMCkge1xuICBsZXQgYXJyYXkgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGFycmF5LnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gY2hlY2tOdW1iZXIobmFtZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IG11c3QgYmUgYSBudW1iZXJgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tOb25FbXB0eShtYXRyaXgpIHtcbiAgaWYgKG1hdHJpeC5pc0VtcHR5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IG1hdHJpeCBoYXMgbm8gZWxlbWVudHMgdG8gaW5kZXgnKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5pbXBvcnQgcmVzY2FsZSBmcm9tICdtbC1hcnJheS1yZXNjYWxlJztcblxuaW1wb3J0IHsgaW5zcGVjdE1hdHJpeCwgaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zIH0gZnJvbSAnLi9pbnNwZWN0JztcbmltcG9ydCB7IGluc3RhbGxNYXRoT3BlcmF0aW9ucyB9IGZyb20gJy4vbWF0aE9wZXJhdGlvbnMnO1xuaW1wb3J0IHtcbiAgc3VtQnlSb3csXG4gIHN1bUJ5Q29sdW1uLFxuICBzdW1BbGwsXG4gIHByb2R1Y3RCeVJvdyxcbiAgcHJvZHVjdEJ5Q29sdW1uLFxuICBwcm9kdWN0QWxsLFxuICB2YXJpYW5jZUJ5Um93LFxuICB2YXJpYW5jZUJ5Q29sdW1uLFxuICB2YXJpYW5jZUFsbCxcbiAgY2VudGVyQnlSb3csXG4gIGNlbnRlckJ5Q29sdW1uLFxuICBjZW50ZXJBbGwsXG4gIHNjYWxlQnlSb3csXG4gIHNjYWxlQnlDb2x1bW4sXG4gIHNjYWxlQWxsLFxuICBnZXRTY2FsZUJ5Um93LFxuICBnZXRTY2FsZUJ5Q29sdW1uLFxuICBnZXRTY2FsZUFsbCxcbn0gZnJvbSAnLi9zdGF0JztcbmltcG9ydCB7XG4gIGNoZWNrUm93VmVjdG9yLFxuICBjaGVja1Jvd0luZGV4LFxuICBjaGVja0NvbHVtbkluZGV4LFxuICBjaGVja0NvbHVtblZlY3RvcixcbiAgY2hlY2tSYW5nZSxcbiAgY2hlY2tOb25FbXB0eSxcbiAgY2hlY2tSb3dJbmRpY2VzLFxuICBjaGVja0NvbHVtbkluZGljZXMsXG59IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdE1hdHJpeCB7XG4gIHN0YXRpYyBmcm9tMURBcnJheShuZXdSb3dzLCBuZXdDb2x1bW5zLCBuZXdEYXRhKSB7XG4gICAgbGV0IGxlbmd0aCA9IG5ld1Jvd3MgKiBuZXdDb2x1bW5zO1xuICAgIGlmIChsZW5ndGggIT09IG5ld0RhdGEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZGF0YSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChuZXdSb3dzLCBuZXdDb2x1bW5zKTtcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBuZXdSb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgbmV3Q29sdW1uczsgY29sdW1uKyspIHtcbiAgICAgICAgbmV3TWF0cml4LnNldChyb3csIGNvbHVtbiwgbmV3RGF0YVtyb3cgKiBuZXdDb2x1bW5zICsgY29sdW1uXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcm93VmVjdG9yKG5ld0RhdGEpIHtcbiAgICBsZXQgdmVjdG9yID0gbmV3IE1hdHJpeCgxLCBuZXdEYXRhLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2ZWN0b3Iuc2V0KDAsIGksIG5ld0RhdGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdmVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGNvbHVtblZlY3RvcihuZXdEYXRhKSB7XG4gICAgbGV0IHZlY3RvciA9IG5ldyBNYXRyaXgobmV3RGF0YS5sZW5ndGgsIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3RGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmVjdG9yLnNldChpLCAwLCBuZXdEYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyB6ZXJvcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gIH1cblxuICBzdGF0aWMgb25lcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucykuZmlsbCgxKTtcbiAgfVxuXG4gIHN0YXRpYyByYW5kKHJvd3MsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyByYW5kb20gPSBNYXRoLnJhbmRvbSB9ID0gb3B0aW9ucztcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCByYW5kb20oKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcmFuZEludChyb3dzLCBjb2x1bW5zLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgbWluID0gMCwgbWF4ID0gMTAwMCwgcmFuZG9tID0gTWF0aC5yYW5kb20gfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1pbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBpbnRlcnZhbCA9IG1heCAtIG1pbjtcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbWluICsgTWF0aC5yb3VuZChyYW5kb20oKSAqIGludGVydmFsKTtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZXllKHJvd3MsIGNvbHVtbnMsIHZhbHVlKSB7XG4gICAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkgY29sdW1ucyA9IHJvd3M7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gMTtcbiAgICBsZXQgbWluID0gTWF0aC5taW4ocm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZGlhZyhkYXRhLCByb3dzLCBjb2x1bW5zKSB7XG4gICAgbGV0IGwgPSBkYXRhLmxlbmd0aDtcbiAgICBpZiAocm93cyA9PT0gdW5kZWZpbmVkKSByb3dzID0gbDtcbiAgICBpZiAoY29sdW1ucyA9PT0gdW5kZWZpbmVkKSBjb2x1bW5zID0gcm93cztcbiAgICBsZXQgbWluID0gTWF0aC5taW4obCwgcm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCBkYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIHN0YXRpYyBtaW4obWF0cml4MSwgbWF0cml4Mikge1xuICAgIG1hdHJpeDEgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDEpO1xuICAgIG1hdHJpeDIgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDIpO1xuICAgIGxldCByb3dzID0gbWF0cml4MS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbWF0cml4MS5jb2x1bW5zO1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWluKG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIG1heChtYXRyaXgxLCBtYXRyaXgyKSB7XG4gICAgbWF0cml4MSA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4MSk7XG4gICAgbWF0cml4MiA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4Mik7XG4gICAgbGV0IHJvd3MgPSBtYXRyaXgxLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBtYXRyaXgxLmNvbHVtbnM7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyB0aGlzKHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWF4KG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTWF0cml4KHZhbHVlKSB7XG4gICAgcmV0dXJuIEFic3RyYWN0TWF0cml4LmlzTWF0cml4KHZhbHVlKSA/IHZhbHVlIDogbmV3IE1hdHJpeCh2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgaXNNYXRyaXgodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5rbGFzcyA9PT0gJ01hdHJpeCc7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzICogdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgYXBwbHkoY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGksIGopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvMURBcnJheSgpIHtcbiAgICBsZXQgYXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIGFycmF5LnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB0bzJEQXJyYXkoKSB7XG4gICAgbGV0IGNvcHkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb3B5LnB1c2goW10pO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjb3B5W2ldLnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29weTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50bzJEQXJyYXkoKTtcbiAgfVxuXG4gIGlzUm93VmVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDE7XG4gIH1cblxuICBpc0NvbHVtblZlY3RvcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zID09PSAxO1xuICB9XG5cbiAgaXNWZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93cyA9PT0gMSB8fCB0aGlzLmNvbHVtbnMgPT09IDE7XG4gIH1cblxuICBpc1NxdWFyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzID09PSB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDAgfHwgdGhpcy5jb2x1bW5zID09PSAwO1xuICB9XG5cbiAgaXNTeW1tZXRyaWMoKSB7XG4gICAgaWYgKHRoaXMuaXNTcXVhcmUoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBpOyBqKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgIT09IHRoaXMuZ2V0KGosIGkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc0VjaGVsb25Gb3JtID0gdHJ1ZTtcbiAgICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICAgIHdoaWxlIChpIDwgdGhpcy5yb3dzICYmIGlzRWNoZWxvbkZvcm0pIHtcbiAgICAgIGogPSAwO1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKGogPCB0aGlzLmNvbHVtbnMgJiYgY2hlY2tlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID09PSAwKSB7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0KGksIGopID09PSAxICYmIGogPiBwcmV2aW91c0NvbHVtbikge1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgIHByZXZpb3VzQ29sdW1uID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0VjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzRWNoZWxvbkZvcm07XG4gIH1cblxuICBpc1JlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc1JlZHVjZWRFY2hlbG9uRm9ybSA9IHRydWU7XG4gICAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoaSA8IHRoaXMucm93cyAmJiBpc1JlZHVjZWRFY2hlbG9uRm9ybSkge1xuICAgICAgaiA9IDA7XG4gICAgICBjaGVja2VkID0gZmFsc2U7XG4gICAgICB3aGlsZSAoaiA8IHRoaXMuY29sdW1ucyAmJiBjaGVja2VkID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPT09IDApIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXQoaSwgaikgPT09IDEgJiYgaiA+IHByZXZpb3VzQ29sdW1uKSB7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgcHJldmlvdXNDb2x1bW4gPSBqO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGsgPSBqICsgMTsgayA8IHRoaXMucm93czsgaysrKSB7XG4gICAgICAgIGlmICh0aGlzLmdldChpLCBrKSAhPT0gMCkge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzUmVkdWNlZEVjaGVsb25Gb3JtO1xuICB9XG5cbiAgZWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgaCA9IDA7XG4gICAgbGV0IGsgPSAwO1xuICAgIHdoaWxlIChoIDwgcmVzdWx0LnJvd3MgJiYgayA8IHJlc3VsdC5jb2x1bW5zKSB7XG4gICAgICBsZXQgaU1heCA9IGg7XG4gICAgICBmb3IgKGxldCBpID0gaDsgaSA8IHJlc3VsdC5yb3dzOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdC5nZXQoaSwgaykgPiByZXN1bHQuZ2V0KGlNYXgsIGspKSB7XG4gICAgICAgICAgaU1heCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQuZ2V0KGlNYXgsIGspID09PSAwKSB7XG4gICAgICAgIGsrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5zd2FwUm93cyhoLCBpTWF4KTtcbiAgICAgICAgbGV0IHRtcCA9IHJlc3VsdC5nZXQoaCwgayk7XG4gICAgICAgIGZvciAobGV0IGogPSBrOyBqIDwgcmVzdWx0LmNvbHVtbnM7IGorKykge1xuICAgICAgICAgIHJlc3VsdC5zZXQoaCwgaiwgcmVzdWx0LmdldChoLCBqKSAvIHRtcCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGggKyAxOyBpIDwgcmVzdWx0LnJvd3M7IGkrKykge1xuICAgICAgICAgIGxldCBmYWN0b3IgPSByZXN1bHQuZ2V0KGksIGspIC8gcmVzdWx0LmdldChoLCBrKTtcbiAgICAgICAgICByZXN1bHQuc2V0KGksIGssIDApO1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IHJlc3VsdC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgcmVzdWx0LmdldChpLCBqKSAtIHJlc3VsdC5nZXQoaCwgaikgKiBmYWN0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoKys7XG4gICAgICAgIGsrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5lY2hlbG9uRm9ybSgpO1xuICAgIGxldCBtID0gcmVzdWx0LmNvbHVtbnM7XG4gICAgbGV0IG4gPSByZXN1bHQucm93cztcbiAgICBsZXQgaCA9IG4gLSAxO1xuICAgIHdoaWxlIChoID49IDApIHtcbiAgICAgIGlmIChyZXN1bHQubWF4Um93KGgpID09PSAwKSB7XG4gICAgICAgIGgtLTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwID0gMDtcbiAgICAgICAgbGV0IHBpdm90ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlIChwIDwgbiAmJiBwaXZvdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LmdldChoLCBwKSA9PT0gMSkge1xuICAgICAgICAgICAgcGl2b3QgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGZhY3RvciA9IHJlc3VsdC5nZXQoaSwgcCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IHA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0bXAgPSByZXN1bHQuZ2V0KGksIGopIC0gZmFjdG9yICogcmVzdWx0LmdldChoLCBqKTtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgdG1wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHJlcGVhdChvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcm93cyA9IDEsIGNvbHVtbnMgPSAxIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihyb3dzKSB8fCByb3dzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jvd3MgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbnMpIHx8IGNvbHVtbnMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgIH1cbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MgKiByb3dzLCB0aGlzLmNvbHVtbnMgKiBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldFN1Yk1hdHJpeCh0aGlzLCB0aGlzLnJvd3MgKiBpLCB0aGlzLmNvbHVtbnMgKiBqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIGZpbGwodmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBuZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsUygtMSk7XG4gIH1cblxuICBnZXRSb3coaW5kZXgpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgcm93ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgcm93LnB1c2godGhpcy5nZXQoaW5kZXgsIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIGdldFJvd1ZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXgucm93VmVjdG9yKHRoaXMuZ2V0Um93KGluZGV4KSk7XG4gIH1cblxuICBzZXRSb3coaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja1Jvd1ZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwUm93cyhyb3cxLCByb3cyKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cxKTtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdzIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQocm93MSwgaSk7XG4gICAgICB0aGlzLnNldChyb3cxLCBpLCB0aGlzLmdldChyb3cyLCBpKSk7XG4gICAgICB0aGlzLnNldChyb3cyLCBpLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRDb2x1bW4oaW5kZXgpIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgY29sdW1uID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29sdW1uLnB1c2godGhpcy5nZXQoaSwgaW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIGdldENvbHVtblZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXguY29sdW1uVmVjdG9yKHRoaXMuZ2V0Q29sdW1uKGluZGV4KSk7XG4gIH1cblxuICBzZXRDb2x1bW4oaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja0NvbHVtblZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwQ29sdW1ucyhjb2x1bW4xLCBjb2x1bW4yKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4xKTtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbjIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQoaSwgY29sdW1uMSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4xLCB0aGlzLmdldChpLCBjb2x1bW4yKSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4yLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3coaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIHRoaXMuZ2V0KGluZGV4LCBpKSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW4oaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIHRoaXMuZ2V0KGksIGluZGV4KSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtYXgoYnkpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgY29uc3QgbWF4ID0gbmV3IEFycmF5KHRoaXMucm93cykuZmlsbChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA+IG1heFtyb3ddKSB7XG4gICAgICAgICAgICAgIG1heFtyb3ddID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBjb25zdCBtYXggPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKS5maWxsKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pID4gbWF4W2NvbHVtbl0pIHtcbiAgICAgICAgICAgICAgbWF4W2NvbHVtbl0gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBsZXQgbWF4ID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pID4gbWF4KSB7XG4gICAgICAgICAgICAgIG1heCA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWF4SW5kZXgoKSB7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGxldCBpZHggPSBbMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPiB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICAgIGlkeFswXSA9IGk7XG4gICAgICAgICAgaWR4WzFdID0gajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluKGJ5KSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cblxuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgY29uc3QgbWluID0gbmV3IEFycmF5KHRoaXMucm93cykuZmlsbChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA8IG1pbltyb3ddKSB7XG4gICAgICAgICAgICAgIG1pbltyb3ddID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBjb25zdCBtaW4gPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKS5maWxsKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pIDwgbWluW2NvbHVtbl0pIHtcbiAgICAgICAgICAgICAgbWluW2NvbHVtbl0gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBsZXQgbWluID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pIDwgbWluKSB7XG4gICAgICAgICAgICAgIG1pbiA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWluSW5kZXgoKSB7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGxldCBpZHggPSBbMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPCB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICAgIGlkeFswXSA9IGk7XG4gICAgICAgICAgaWR4WzFdID0gajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWF4Um93KHJvdykge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQocm93LCAwKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWF4Um93SW5kZXgocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGxldCBpZHggPSBbcm93LCAwXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICAgIGlkeFsxXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBtaW5Sb3cocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICBtaW5Sb3dJbmRleChyb3cpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdyk7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KHJvdywgMCk7XG4gICAgbGV0IGlkeCA9IFtyb3csIDBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgICAgaWR4WzFdID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1heENvbHVtbihjb2x1bW4pIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbik7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIGNvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1heENvbHVtbkluZGV4KGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBsZXQgaWR4ID0gWzAsIGNvbHVtbl07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluQ29sdW1uKGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWluQ29sdW1uSW5kZXgoY29sdW1uKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4pO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCBjb2x1bW4pO1xuICAgIGxldCBpZHggPSBbMCwgY29sdW1uXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICAgIGlkeFswXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBkaWFnKCkge1xuICAgIGxldCBtaW4gPSBNYXRoLm1pbih0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgbGV0IGRpYWcgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pbjsgaSsrKSB7XG4gICAgICBkaWFnLnB1c2godGhpcy5nZXQoaSwgaSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGlhZztcbiAgfVxuXG4gIG5vcm0odHlwZSA9ICdmcm9iZW5pdXMnKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKHR5cGUgPT09ICdtYXgnKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXgoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdmcm9iZW5pdXMnKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB0aGlzLmdldChpLCBqKSAqIHRoaXMuZ2V0KGksIGopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB1bmtub3duIG5vcm0gdHlwZTogJHt0eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIGN1bXVsYXRpdmVTdW0oKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBzdW0gKz0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZG90KHZlY3RvcjIpIHtcbiAgICBpZiAoQWJzdHJhY3RNYXRyaXguaXNNYXRyaXgodmVjdG9yMikpIHZlY3RvcjIgPSB2ZWN0b3IyLnRvMURBcnJheSgpO1xuICAgIGxldCB2ZWN0b3IxID0gdGhpcy50bzFEQXJyYXkoKTtcbiAgICBpZiAodmVjdG9yMS5sZW5ndGggIT09IHZlY3RvcjIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmVjdG9ycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplJyk7XG4gICAgfVxuICAgIGxldCBkb3QgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVjdG9yMS5sZW5ndGg7IGkrKykge1xuICAgICAgZG90ICs9IHZlY3RvcjFbaV0gKiB2ZWN0b3IyW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZG90O1xuICB9XG5cbiAgbW11bChvdGhlcikge1xuICAgIG90aGVyID0gTWF0cml4LmNoZWNrTWF0cml4KG90aGVyKTtcblxuICAgIGxldCBtID0gdGhpcy5yb3dzO1xuICAgIGxldCBuID0gdGhpcy5jb2x1bW5zO1xuICAgIGxldCBwID0gb3RoZXIuY29sdW1ucztcblxuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KG0sIHApO1xuXG4gICAgbGV0IEJjb2xqID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHA7IGorKykge1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgQmNvbGpba10gPSBvdGhlci5nZXQoaywgaik7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIGxldCBzID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzICs9IHRoaXMuZ2V0KGksIGspICogQmNvbGpba107XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQuc2V0KGksIGosIHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4yeDIob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMiwgMik7XG4gICAgY29uc3QgYTExID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgY29uc3QgYjExID0gb3RoZXIuZ2V0KDAsIDApO1xuICAgIGNvbnN0IGExMiA9IHRoaXMuZ2V0KDAsIDEpO1xuICAgIGNvbnN0IGIxMiA9IG90aGVyLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMSwgMCk7XG4gICAgY29uc3QgYTIyID0gdGhpcy5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDEsIDEpO1xuXG4gICAgLy8gQ29tcHV0ZSBpbnRlcm1lZGlhdGUgdmFsdWVzLlxuICAgIGNvbnN0IG0xID0gKGExMSArIGEyMikgKiAoYjExICsgYjIyKTtcbiAgICBjb25zdCBtMiA9IChhMjEgKyBhMjIpICogYjExO1xuICAgIGNvbnN0IG0zID0gYTExICogKGIxMiAtIGIyMik7XG4gICAgY29uc3QgbTQgPSBhMjIgKiAoYjIxIC0gYjExKTtcbiAgICBjb25zdCBtNSA9IChhMTEgKyBhMTIpICogYjIyO1xuICAgIGNvbnN0IG02ID0gKGEyMSAtIGExMSkgKiAoYjExICsgYjEyKTtcbiAgICBjb25zdCBtNyA9IChhMTIgLSBhMjIpICogKGIyMSArIGIyMik7XG5cbiAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgIGNvbnN0IGMwMCA9IG0xICsgbTQgLSBtNSArIG03O1xuICAgIGNvbnN0IGMwMSA9IG0zICsgbTU7XG4gICAgY29uc3QgYzEwID0gbTIgKyBtNDtcbiAgICBjb25zdCBjMTEgPSBtMSAtIG0yICsgbTMgKyBtNjtcblxuICAgIHJlc3VsdC5zZXQoMCwgMCwgYzAwKTtcbiAgICByZXN1bHQuc2V0KDAsIDEsIGMwMSk7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4zeDMob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMywgMyk7XG5cbiAgICBjb25zdCBhMDAgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBjb25zdCBhMDEgPSB0aGlzLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMDIgPSB0aGlzLmdldCgwLCAyKTtcbiAgICBjb25zdCBhMTAgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBhMTEgPSB0aGlzLmdldCgxLCAxKTtcbiAgICBjb25zdCBhMTIgPSB0aGlzLmdldCgxLCAyKTtcbiAgICBjb25zdCBhMjAgPSB0aGlzLmdldCgyLCAwKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgyLCAxKTtcbiAgICBjb25zdCBhMjIgPSB0aGlzLmdldCgyLCAyKTtcblxuICAgIGNvbnN0IGIwMCA9IG90aGVyLmdldCgwLCAwKTtcbiAgICBjb25zdCBiMDEgPSBvdGhlci5nZXQoMCwgMSk7XG4gICAgY29uc3QgYjAyID0gb3RoZXIuZ2V0KDAsIDIpO1xuICAgIGNvbnN0IGIxMCA9IG90aGVyLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMTEgPSBvdGhlci5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjEyID0gb3RoZXIuZ2V0KDEsIDIpO1xuICAgIGNvbnN0IGIyMCA9IG90aGVyLmdldCgyLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMiwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDIsIDIpO1xuXG4gICAgY29uc3QgbTEgPSAoYTAwICsgYTAxICsgYTAyIC0gYTEwIC0gYTExIC0gYTIxIC0gYTIyKSAqIGIxMTtcbiAgICBjb25zdCBtMiA9IChhMDAgLSBhMTApICogKC1iMDEgKyBiMTEpO1xuICAgIGNvbnN0IG0zID0gYTExICogKC1iMDAgKyBiMDEgKyBiMTAgLSBiMTEgLSBiMTIgLSBiMjAgKyBiMjIpO1xuICAgIGNvbnN0IG00ID0gKC1hMDAgKyBhMTAgKyBhMTEpICogKGIwMCAtIGIwMSArIGIxMSk7XG4gICAgY29uc3QgbTUgPSAoYTEwICsgYTExKSAqICgtYjAwICsgYjAxKTtcbiAgICBjb25zdCBtNiA9IGEwMCAqIGIwMDtcbiAgICBjb25zdCBtNyA9ICgtYTAwICsgYTIwICsgYTIxKSAqIChiMDAgLSBiMDIgKyBiMTIpO1xuICAgIGNvbnN0IG04ID0gKC1hMDAgKyBhMjApICogKGIwMiAtIGIxMik7XG4gICAgY29uc3QgbTkgPSAoYTIwICsgYTIxKSAqICgtYjAwICsgYjAyKTtcbiAgICBjb25zdCBtMTAgPSAoYTAwICsgYTAxICsgYTAyIC0gYTExIC0gYTEyIC0gYTIwIC0gYTIxKSAqIGIxMjtcbiAgICBjb25zdCBtMTEgPSBhMjEgKiAoLWIwMCArIGIwMiArIGIxMCAtIGIxMSAtIGIxMiAtIGIyMCArIGIyMSk7XG4gICAgY29uc3QgbTEyID0gKC1hMDIgKyBhMjEgKyBhMjIpICogKGIxMSArIGIyMCAtIGIyMSk7XG4gICAgY29uc3QgbTEzID0gKGEwMiAtIGEyMikgKiAoYjExIC0gYjIxKTtcbiAgICBjb25zdCBtMTQgPSBhMDIgKiBiMjA7XG4gICAgY29uc3QgbTE1ID0gKGEyMSArIGEyMikgKiAoLWIyMCArIGIyMSk7XG4gICAgY29uc3QgbTE2ID0gKC1hMDIgKyBhMTEgKyBhMTIpICogKGIxMiArIGIyMCAtIGIyMik7XG4gICAgY29uc3QgbTE3ID0gKGEwMiAtIGExMikgKiAoYjEyIC0gYjIyKTtcbiAgICBjb25zdCBtMTggPSAoYTExICsgYTEyKSAqICgtYjIwICsgYjIyKTtcbiAgICBjb25zdCBtMTkgPSBhMDEgKiBiMTA7XG4gICAgY29uc3QgbTIwID0gYTEyICogYjIxO1xuICAgIGNvbnN0IG0yMSA9IGExMCAqIGIwMjtcbiAgICBjb25zdCBtMjIgPSBhMjAgKiBiMDE7XG4gICAgY29uc3QgbTIzID0gYTIyICogYjIyO1xuXG4gICAgY29uc3QgYzAwID0gbTYgKyBtMTQgKyBtMTk7XG4gICAgY29uc3QgYzAxID0gbTEgKyBtNCArIG01ICsgbTYgKyBtMTIgKyBtMTQgKyBtMTU7XG4gICAgY29uc3QgYzAyID0gbTYgKyBtNyArIG05ICsgbTEwICsgbTE0ICsgbTE2ICsgbTE4O1xuICAgIGNvbnN0IGMxMCA9IG0yICsgbTMgKyBtNCArIG02ICsgbTE0ICsgbTE2ICsgbTE3O1xuICAgIGNvbnN0IGMxMSA9IG0yICsgbTQgKyBtNSArIG02ICsgbTIwO1xuICAgIGNvbnN0IGMxMiA9IG0xNCArIG0xNiArIG0xNyArIG0xOCArIG0yMTtcbiAgICBjb25zdCBjMjAgPSBtNiArIG03ICsgbTggKyBtMTEgKyBtMTIgKyBtMTMgKyBtMTQ7XG4gICAgY29uc3QgYzIxID0gbTEyICsgbTEzICsgbTE0ICsgbTE1ICsgbTIyO1xuICAgIGNvbnN0IGMyMiA9IG02ICsgbTcgKyBtOCArIG05ICsgbTIzO1xuXG4gICAgcmVzdWx0LnNldCgwLCAwLCBjMDApO1xuICAgIHJlc3VsdC5zZXQoMCwgMSwgYzAxKTtcbiAgICByZXN1bHQuc2V0KDAsIDIsIGMwMik7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXN1bHQuc2V0KDEsIDIsIGMxMik7XG4gICAgcmVzdWx0LnNldCgyLCAwLCBjMjApO1xuICAgIHJlc3VsdC5zZXQoMiwgMSwgYzIxKTtcbiAgICByZXN1bHQuc2V0KDIsIDIsIGMyMik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG1tdWxTdHJhc3Nlbih5KSB7XG4gICAgeSA9IE1hdHJpeC5jaGVja01hdHJpeCh5KTtcbiAgICBsZXQgeCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgcjEgPSB4LnJvd3M7XG4gICAgbGV0IGMxID0geC5jb2x1bW5zO1xuICAgIGxldCByMiA9IHkucm93cztcbiAgICBsZXQgYzIgPSB5LmNvbHVtbnM7XG4gICAgaWYgKGMxICE9PSByMikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYE11bHRpcGx5aW5nICR7cjF9IHggJHtjMX0gYW5kICR7cjJ9IHggJHtjMn0gbWF0cml4OiBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBQdXQgYSBtYXRyaXggaW50byB0aGUgdG9wIGxlZnQgb2YgYSBtYXRyaXggb2YgemVyb3MuXG4gICAgLy8gYHJvd3NgIGFuZCBgY29sc2AgYXJlIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBvdXRwdXQgbWF0cml4LlxuICAgIGZ1bmN0aW9uIGVtYmVkKG1hdCwgcm93cywgY29scykge1xuICAgICAgbGV0IHIgPSBtYXQucm93cztcbiAgICAgIGxldCBjID0gbWF0LmNvbHVtbnM7XG4gICAgICBpZiAociA9PT0gcm93cyAmJiBjID09PSBjb2xzKSB7XG4gICAgICAgIHJldHVybiBtYXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVzdWx0YXQgPSBBYnN0cmFjdE1hdHJpeC56ZXJvcyhyb3dzLCBjb2xzKTtcbiAgICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgobWF0LCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdGF0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSBib3RoIG1hdHJpY2VzIGFyZSB0aGUgc2FtZSBzaXplLlxuICAgIC8vIFRoaXMgaXMgZXhjbHVzaXZlbHkgZm9yIHNpbXBsaWNpdHk6XG4gICAgLy8gdGhpcyBhbGdvcml0aG0gY2FuIGJlIGltcGxlbWVudGVkIHdpdGggbWF0cmljZXMgb2YgZGlmZmVyZW50IHNpemVzLlxuXG4gICAgbGV0IHIgPSBNYXRoLm1heChyMSwgcjIpO1xuICAgIGxldCBjID0gTWF0aC5tYXgoYzEsIGMyKTtcbiAgICB4ID0gZW1iZWQoeCwgciwgYyk7XG4gICAgeSA9IGVtYmVkKHksIHIsIGMpO1xuXG4gICAgLy8gT3VyIHJlY3Vyc2l2ZSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbi5cbiAgICBmdW5jdGlvbiBibG9ja011bHQoYSwgYiwgcm93cywgY29scykge1xuICAgICAgLy8gRm9yIHNtYWxsIG1hdHJpY2VzLCByZXNvcnQgdG8gbmFpdmUgbXVsdGlwbGljYXRpb24uXG4gICAgICBpZiAocm93cyA8PSA1MTIgfHwgY29scyA8PSA1MTIpIHtcbiAgICAgICAgcmV0dXJuIGEubW11bChiKTsgLy8gYSBpcyBlcXVpdmFsZW50IHRvIHRoaXNcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgZHluYW1pYyBwYWRkaW5nLlxuICAgICAgaWYgKHJvd3MgJSAyID09PSAxICYmIGNvbHMgJSAyID09PSAxKSB7XG4gICAgICAgIGEgPSBlbWJlZChhLCByb3dzICsgMSwgY29scyArIDEpO1xuICAgICAgICBiID0gZW1iZWQoYiwgcm93cyArIDEsIGNvbHMgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAocm93cyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgIH0gZWxzZSBpZiAoY29scyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGhhbGZSb3dzID0gcGFyc2VJbnQoYS5yb3dzIC8gMiwgMTApO1xuICAgICAgbGV0IGhhbGZDb2xzID0gcGFyc2VJbnQoYS5jb2x1bW5zIC8gMiwgMTApO1xuICAgICAgLy8gU3ViZGl2aWRlIGlucHV0IG1hdHJpY2VzLlxuICAgICAgbGV0IGExMSA9IGEuc3ViTWF0cml4KDAsIGhhbGZSb3dzIC0gMSwgMCwgaGFsZkNvbHMgLSAxKTtcbiAgICAgIGxldCBiMTEgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIDAsIGhhbGZDb2xzIC0gMSk7XG5cbiAgICAgIGxldCBhMTIgPSBhLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMTIgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBiLmNvbHVtbnMgLSAxKTtcblxuICAgICAgbGV0IGEyMSA9IGEuc3ViTWF0cml4KGhhbGZSb3dzLCBhLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuICAgICAgbGV0IGIyMSA9IGIuc3ViTWF0cml4KGhhbGZSb3dzLCBiLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuXG4gICAgICBsZXQgYTIyID0gYS5zdWJNYXRyaXgoaGFsZlJvd3MsIGEucm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMjIgPSBiLnN1Yk1hdHJpeChoYWxmUm93cywgYi5yb3dzIC0gMSwgaGFsZkNvbHMsIGIuY29sdW1ucyAtIDEpO1xuXG4gICAgICAvLyBDb21wdXRlIGludGVybWVkaWF0ZSB2YWx1ZXMuXG4gICAgICBsZXQgbTEgPSBibG9ja011bHQoXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChhMTEsIGEyMiksXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChiMTEsIGIyMiksXG4gICAgICAgIGhhbGZSb3dzLFxuICAgICAgICBoYWxmQ29scyxcbiAgICAgICk7XG4gICAgICBsZXQgbTIgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGEyMSwgYTIyKSwgYjExLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG0zID0gYmxvY2tNdWx0KGExMSwgQWJzdHJhY3RNYXRyaXguc3ViKGIxMiwgYjIyKSwgaGFsZlJvd3MsIGhhbGZDb2xzKTtcbiAgICAgIGxldCBtNCA9IGJsb2NrTXVsdChhMjIsIEFic3RyYWN0TWF0cml4LnN1YihiMjEsIGIxMSksIGhhbGZSb3dzLCBoYWxmQ29scyk7XG4gICAgICBsZXQgbTUgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGExMSwgYTEyKSwgYjIyLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG02ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTIxLCBhMTEpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjExLCBiMTIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuICAgICAgbGV0IG03ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTEyLCBhMjIpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjIxLCBiMjIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgICAgbGV0IGMxMSA9IEFic3RyYWN0TWF0cml4LmFkZChtMSwgbTQpO1xuICAgICAgYzExLnN1YihtNSk7XG4gICAgICBjMTEuYWRkKG03KTtcbiAgICAgIGxldCBjMTIgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTMsIG01KTtcbiAgICAgIGxldCBjMjEgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTIsIG00KTtcbiAgICAgIGxldCBjMjIgPSBBYnN0cmFjdE1hdHJpeC5zdWIobTEsIG0yKTtcbiAgICAgIGMyMi5hZGQobTMpO1xuICAgICAgYzIyLmFkZChtNik7XG5cbiAgICAgIC8vIENyb3Agb3V0cHV0IHRvIHRoZSBkZXNpcmVkIHNpemUgKHVuZG8gZHluYW1pYyBwYWRkaW5nKS5cbiAgICAgIGxldCByZXN1bHRhdCA9IEFic3RyYWN0TWF0cml4Lnplcm9zKDIgKiBjMTEucm93cywgMiAqIGMxMS5jb2x1bW5zKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMxMSwgMCwgMCk7XG4gICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChjMTIsIGMxMS5yb3dzLCAwKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMyMSwgMCwgYzExLmNvbHVtbnMpO1xuICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgoYzIyLCBjMTEucm93cywgYzExLmNvbHVtbnMpO1xuICAgICAgcmV0dXJuIHJlc3VsdGF0LnN1Yk1hdHJpeCgwLCByb3dzIC0gMSwgMCwgY29scyAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBibG9ja011bHQoeCwgeSwgciwgYyk7XG4gIH1cblxuICBzY2FsZVJvd3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdyhpKTtcbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByZXNjYWxlKHJvdywgeyBtaW4sIG1heCwgb3V0cHV0OiByb3cgfSk7XG4gICAgICB9XG4gICAgICBuZXdNYXRyaXguc2V0Um93KGksIHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzY2FsZUNvbHVtbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbihpKTtcbiAgICAgIGlmIChjb2x1bW4ubGVuZ3RoKSB7XG4gICAgICAgIHJlc2NhbGUoY29sdW1uLCB7XG4gICAgICAgICAgbWluOiBtaW4sXG4gICAgICAgICAgbWF4OiBtYXgsXG4gICAgICAgICAgb3V0cHV0OiBjb2x1bW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbmV3TWF0cml4LnNldENvbHVtbihpLCBjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgZmxpcFJvd3MoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5jZWlsKHRoaXMuY29sdW1ucyAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWlkZGxlOyBqKyspIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIGxldCBsYXN0ID0gdGhpcy5nZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGopO1xuICAgICAgICB0aGlzLnNldChpLCBqLCBsYXN0KTtcbiAgICAgICAgdGhpcy5zZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGosIGZpcnN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmbGlwQ29sdW1ucygpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmNlaWwodGhpcy5yb3dzIC8gMik7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaWRkbGU7IGkrKykge1xuICAgICAgICBsZXQgZmlyc3QgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgbGV0IGxhc3QgPSB0aGlzLmdldCh0aGlzLnJvd3MgLSAxIC0gaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIGxhc3QpO1xuICAgICAgICB0aGlzLnNldCh0aGlzLnJvd3MgLSAxIC0gaSwgaiwgZmlyc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGtyb25lY2tlclByb2R1Y3Qob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG5cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IHRoaXMuY29sdW1ucztcbiAgICBsZXQgcCA9IG90aGVyLnJvd3M7XG4gICAgbGV0IHEgPSBvdGhlci5jb2x1bW5zO1xuXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgobSAqIHAsIG4gKiBxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwOyBrKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IHE7IGwrKykge1xuICAgICAgICAgICAgcmVzdWx0LnNldChwICogaSArIGssIHEgKiBqICsgbCwgdGhpcy5nZXQoaSwgaikgKiBvdGhlci5nZXQoaywgbCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAga3JvbmVja2VyU3VtKG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuICAgIGlmICghdGhpcy5pc1NxdWFyZSgpIHx8ICFvdGhlci5pc1NxdWFyZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tyb25lY2tlciBTdW0gbmVlZHMgdHdvIFNxdWFyZSBNYXRyaWNlcycpO1xuICAgIH1cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IG90aGVyLnJvd3M7XG4gICAgbGV0IEF4SSA9IHRoaXMua3JvbmVja2VyUHJvZHVjdChNYXRyaXguZXllKG4sIG4pKTtcbiAgICBsZXQgSXhCID0gTWF0cml4LmV5ZShtLCBtKS5rcm9uZWNrZXJQcm9kdWN0KG90aGVyKTtcbiAgICByZXR1cm4gQXhJLmFkZChJeEIpO1xuICB9XG5cbiAgdHJhbnNwb3NlKCkge1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHRoaXMuY29sdW1ucywgdGhpcy5yb3dzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHJlc3VsdC5zZXQoaiwgaSwgdGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc29ydFJvd3MoY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZU51bWJlcnMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICB0aGlzLnNldFJvdyhpLCB0aGlzLmdldFJvdyhpKS5zb3J0KGNvbXBhcmVGdW5jdGlvbikpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNvcnRDb2x1bW5zKGNvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVOdW1iZXJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXRDb2x1bW4oaSwgdGhpcy5nZXRDb2x1bW4oaSkuc29ydChjb21wYXJlRnVuY3Rpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJNYXRyaXgoc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoXG4gICAgICBlbmRSb3cgLSBzdGFydFJvdyArIDEsXG4gICAgICBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEsXG4gICAgKTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBzdGFydENvbHVtbjsgaiA8PSBlbmRDb2x1bW47IGorKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KGkgLSBzdGFydFJvdywgaiAtIHN0YXJ0Q29sdW1uLCB0aGlzLmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdWJNYXRyaXhSb3coaW5kaWNlcywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGlmIChzdGFydENvbHVtbiA9PT0gdW5kZWZpbmVkKSBzdGFydENvbHVtbiA9IDA7XG4gICAgaWYgKGVuZENvbHVtbiA9PT0gdW5kZWZpbmVkKSBlbmRDb2x1bW4gPSB0aGlzLmNvbHVtbnMgLSAxO1xuICAgIGlmIChcbiAgICAgIHN0YXJ0Q29sdW1uID4gZW5kQ29sdW1uIHx8XG4gICAgICBzdGFydENvbHVtbiA8IDAgfHxcbiAgICAgIHN0YXJ0Q29sdW1uID49IHRoaXMuY29sdW1ucyB8fFxuICAgICAgZW5kQ29sdW1uIDwgMCB8fFxuICAgICAgZW5kQ29sdW1uID49IHRoaXMuY29sdW1uc1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0FyZ3VtZW50IG91dCBvZiByYW5nZScpO1xuICAgIH1cblxuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KGluZGljZXMubGVuZ3RoLCBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sdW1uOyBqIDw9IGVuZENvbHVtbjsgaisrKSB7XG4gICAgICAgIGlmIChpbmRpY2VzW2ldIDwgMCB8fCBpbmRpY2VzW2ldID49IHRoaXMucm93cykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSb3cgaW5kZXggb3V0IG9mIHJhbmdlOiAke2luZGljZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TWF0cml4LnNldChpLCBqIC0gc3RhcnRDb2x1bW4sIHRoaXMuZ2V0KGluZGljZXNbaV0sIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIHN1Yk1hdHJpeENvbHVtbihpbmRpY2VzLCBzdGFydFJvdywgZW5kUm93KSB7XG4gICAgaWYgKHN0YXJ0Um93ID09PSB1bmRlZmluZWQpIHN0YXJ0Um93ID0gMDtcbiAgICBpZiAoZW5kUm93ID09PSB1bmRlZmluZWQpIGVuZFJvdyA9IHRoaXMucm93cyAtIDE7XG4gICAgaWYgKFxuICAgICAgc3RhcnRSb3cgPiBlbmRSb3cgfHxcbiAgICAgIHN0YXJ0Um93IDwgMCB8fFxuICAgICAgc3RhcnRSb3cgPj0gdGhpcy5yb3dzIHx8XG4gICAgICBlbmRSb3cgPCAwIHx8XG4gICAgICBlbmRSb3cgPj0gdGhpcy5yb3dzXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXJndW1lbnQgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoZW5kUm93IC0gc3RhcnRSb3cgKyAxLCBpbmRpY2VzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gc3RhcnRSb3c7IGogPD0gZW5kUm93OyBqKyspIHtcbiAgICAgICAgaWYgKGluZGljZXNbaV0gPCAwIHx8IGluZGljZXNbaV0gPj0gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7aW5kaWNlc1tpXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdNYXRyaXguc2V0KGogLSBzdGFydFJvdywgaSwgdGhpcy5nZXQoaiwgaW5kaWNlc1tpXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc2V0U3ViTWF0cml4KG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKG1hdHJpeC5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBsZXQgZW5kUm93ID0gc3RhcnRSb3cgKyBtYXRyaXgucm93cyAtIDE7XG4gICAgbGV0IGVuZENvbHVtbiA9IHN0YXJ0Q29sdW1uICsgbWF0cml4LmNvbHVtbnMgLSAxO1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoc3RhcnRSb3cgKyBpLCBzdGFydENvbHVtbiArIGosIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNlbGVjdGlvbihyb3dJbmRpY2VzLCBjb2x1bW5JbmRpY2VzKSB7XG4gICAgY2hlY2tSb3dJbmRpY2VzKHRoaXMsIHJvd0luZGljZXMpO1xuICAgIGNoZWNrQ29sdW1uSW5kaWNlcyh0aGlzLCBjb2x1bW5JbmRpY2VzKTtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChyb3dJbmRpY2VzLmxlbmd0aCwgY29sdW1uSW5kaWNlcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93SW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHJvd0luZGV4ID0gcm93SW5kaWNlc1tpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uSW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5JbmRpY2VzW2pdO1xuICAgICAgICBuZXdNYXRyaXguc2V0KGksIGosIHRoaXMuZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgdHJhY2UoKSB7XG4gICAgbGV0IG1pbiA9IE1hdGgubWluKHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBsZXQgdHJhY2UgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcbiAgICAgIHRyYWNlICs9IHRoaXMuZ2V0KGksIGkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhY2U7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KHJvdywgY29sdW1uLCB0aGlzLmdldChyb3csIGNvbHVtbikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc3VtKGJ5KSB7XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Q29sdW1uKHRoaXMpO1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBzdW1BbGwodGhpcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHByb2R1Y3QoYnkpIHtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RCeUNvbHVtbih0aGlzKTtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEFsbCh0aGlzKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWVhbihieSkge1xuICAgIGNvbnN0IHN1bSA9IHRoaXMuc3VtKGJ5KTtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5jb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlICdjb2x1bW4nOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5yb3dzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHN1bSAvIHRoaXMuc2l6ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgdmFyaWFuY2UoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHVuYmlhc2VkID0gdHJ1ZSwgbWVhbiA9IHRoaXMubWVhbihieSkgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiB1bmJpYXNlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmJpYXNlZCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgIH1cbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGlmICghaXNBbnlBcnJheShtZWFuKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUJ5Um93KHRoaXMsIHVuYmlhc2VkLCBtZWFuKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKCFpc0FueUFycmF5KG1lYW4pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVhbiBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhbmNlQnlDb2x1bW4odGhpcywgdW5iaWFzZWQsIG1lYW4pO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgaWYgKHR5cGVvZiBtZWFuICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUFsbCh0aGlzLCB1bmJpYXNlZCwgbWVhbik7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YW5kYXJkRGV2aWF0aW9uKGJ5LCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBieSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBieTtcbiAgICAgIGJ5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB2YXJpYW5jZSA9IHRoaXMudmFyaWFuY2UoYnksIG9wdGlvbnMpO1xuICAgIGlmIChieSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YXJpYW5jZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXJpYW5jZVtpXSA9IE1hdGguc3FydCh2YXJpYW5jZVtpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFyaWFuY2U7XG4gICAgfVxuICB9XG5cbiAgY2VudGVyKGJ5LCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGJ5O1xuICAgICAgYnkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyBjZW50ZXIgPSB0aGlzLm1lYW4oYnkpIH0gPSBvcHRpb25zO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKCFpc0FueUFycmF5KGNlbnRlcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckJ5Um93KHRoaXMsIGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBpZiAoIWlzQW55QXJyYXkoY2VudGVyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NlbnRlciBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY2VudGVyQnlDb2x1bW4odGhpcywgY2VudGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBpZiAodHlwZW9mIGNlbnRlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckFsbCh0aGlzLCBjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgc2NhbGUoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBsZXQgc2NhbGUgPSBvcHRpb25zLnNjYWxlO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlSb3codGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQW55QXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlSb3codGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlDb2x1bW4odGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQW55QXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlDb2x1bW4odGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgdW5kZWZpbmVkOiB7XG4gICAgICAgIGlmIChzY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NhbGUgPSBnZXRTY2FsZUFsbCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2NhbGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQWxsKHRoaXMsIHNjYWxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICB9XG59XG5cbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5rbGFzcyA9ICdNYXRyaXgnO1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnKSB7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZVtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9XG4gICAgaW5zcGVjdE1hdHJpeDtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU51bWJlcnMoYSwgYikge1xuICByZXR1cm4gYSAtIGI7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlPZk51bWJlcnMoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LmV2ZXJ5KChlbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJztcbiAgfSk7XG59XG5cbi8vIFN5bm9ueW1zXG5BYnN0cmFjdE1hdHJpeC5yYW5kb20gPSBBYnN0cmFjdE1hdHJpeC5yYW5kO1xuQWJzdHJhY3RNYXRyaXgucmFuZG9tSW50ID0gQWJzdHJhY3RNYXRyaXgucmFuZEludDtcbkFic3RyYWN0TWF0cml4LmRpYWdvbmFsID0gQWJzdHJhY3RNYXRyaXguZGlhZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnb25hbCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnO1xuQWJzdHJhY3RNYXRyaXguaWRlbnRpdHkgPSBBYnN0cmFjdE1hdHJpeC5leWU7XG5BYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubmVnYXRlID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm5lZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50ZW5zb3JQcm9kdWN0ID1cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmtyb25lY2tlclByb2R1Y3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFic3RyYWN0TWF0cml4IHtcbiAgY29uc3RydWN0b3IoblJvd3MsIG5Db2x1bW5zKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoTWF0cml4LmlzTWF0cml4KG5Sb3dzKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuICAgICAgcmV0dXJuIG5Sb3dzLmNsb25lKCk7XG4gICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Sb3dzKSAmJiBuUm93cyA+PSAwKSB7XG4gICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgbWF0cml4XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Db2x1bW5zKSAmJiBuQ29sdW1ucyA+PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKG5ldyBGbG9hdDY0QXJyYXkobkNvbHVtbnMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbkNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQW55QXJyYXkoblJvd3MpKSB7XG4gICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgZnJvbSB0aGUgMkQgYXJyYXlcbiAgICAgIGNvbnN0IGFycmF5RGF0YSA9IG5Sb3dzO1xuICAgICAgblJvd3MgPSBhcnJheURhdGEubGVuZ3RoO1xuICAgICAgbkNvbHVtbnMgPSBuUm93cyA/IGFycmF5RGF0YVswXS5sZW5ndGggOiAwO1xuICAgICAgaWYgKHR5cGVvZiBuQ29sdW1ucyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnRGF0YSBtdXN0IGJlIGEgMkQgYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICBpZiAoYXJyYXlEYXRhW2ldLmxlbmd0aCAhPT0gbkNvbHVtbnMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5jb25zaXN0ZW50IGFycmF5IGRpbWVuc2lvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXJyYXlPZk51bWJlcnMoYXJyYXlEYXRhW2ldKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGRhdGEgY29udGFpbnMgbm9uLW51bWVyaWMgdmFsdWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnB1c2goRmxvYXQ2NEFycmF5LmZyb20oYXJyYXlEYXRhW2ldKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9yIGFuIGFycmF5JyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm93cyA9IG5Sb3dzO1xuICAgIHRoaXMuY29sdW1ucyA9IG5Db2x1bW5zO1xuICB9XG5cbiAgc2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XTtcbiAgfVxuXG4gIHJlbW92ZVJvdyhpbmRleCkge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpO1xuICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMucm93cyAtPSAxO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkUm93KGluZGV4LCBhcnJheSkge1xuICAgIGlmIChhcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcnJheSA9IGluZGV4O1xuICAgICAgaW5kZXggPSB0aGlzLnJvd3M7XG4gICAgfVxuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgsIHRydWUpO1xuICAgIGFycmF5ID0gRmxvYXQ2NEFycmF5LmZyb20oY2hlY2tSb3dWZWN0b3IodGhpcywgYXJyYXkpKTtcbiAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4LCAwLCBhcnJheSk7XG4gICAgdGhpcy5yb3dzICs9IDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW1vdmVDb2x1bW4oaW5kZXgpIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBuZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucyAtIDEpO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRleDsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSBpbmRleCArIDE7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBuZXdSb3dbaiAtIDFdID0gdGhpcy5kYXRhW2ldW2pdO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhW2ldID0gbmV3Um93O1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnMgLT0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZENvbHVtbihpbmRleCwgYXJyYXkpIHtcbiAgICBpZiAodHlwZW9mIGFycmF5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgYXJyYXkgPSBpbmRleDtcbiAgICAgIGluZGV4ID0gdGhpcy5jb2x1bW5zO1xuICAgIH1cbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4LCB0cnVlKTtcbiAgICBhcnJheSA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIGFycmF5KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBuZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucyArIDEpO1xuICAgICAgbGV0IGogPSAwO1xuICAgICAgZm9yICg7IGogPCBpbmRleDsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIG5ld1Jvd1tqKytdID0gYXJyYXlbaV07XG4gICAgICBmb3IgKDsgaiA8IHRoaXMuY29sdW1ucyArIDE7IGorKykge1xuICAgICAgICBuZXdSb3dbal0gPSB0aGlzLmRhdGFbaV1baiAtIDFdO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhW2ldID0gbmV3Um93O1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnMgKz0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5pbnN0YWxsTWF0aE9wZXJhdGlvbnMoQWJzdHJhY3RNYXRyaXgsIE1hdHJpeCk7XG4iLCJpbXBvcnQgeyBuZXdBcnJheSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1CeVJvdyhtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5yb3dzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1baV0gKz0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bUJ5Q29sdW1uKG1hdHJpeCkge1xuICBsZXQgc3VtID0gbmV3QXJyYXkobWF0cml4LmNvbHVtbnMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyArK2opIHtcbiAgICAgIHN1bVtqXSArPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3VtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtQWxsKG1hdHJpeCkge1xuICBsZXQgdiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgdiArPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RCeVJvdyhtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5yb3dzLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1baV0gKj0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RCeUNvbHVtbihtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5jb2x1bW5zLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1bal0gKj0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RBbGwobWF0cml4KSB7XG4gIGxldCB2ID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICB2ICo9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFuY2VCeVJvdyhtYXRyaXgsIHVuYmlhc2VkLCBtZWFuKSB7XG4gIGNvbnN0IHJvd3MgPSBtYXRyaXgucm93cztcbiAgY29uc3QgY29scyA9IG1hdHJpeC5jb2x1bW5zO1xuICBjb25zdCB2YXJpYW5jZSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgbGV0IHN1bTEgPSAwO1xuICAgIGxldCBzdW0yID0gMDtcbiAgICBsZXQgeCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgIHggPSBtYXRyaXguZ2V0KGksIGopIC0gbWVhbltpXTtcbiAgICAgIHN1bTEgKz0geDtcbiAgICAgIHN1bTIgKz0geCAqIHg7XG4gICAgfVxuICAgIGlmICh1bmJpYXNlZCkge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyBjb2xzKSAvIChjb2xzIC0gMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXJpYW5jZS5wdXNoKChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIGNvbHMpIC8gY29scyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YXJpYW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhbmNlQnlDb2x1bW4obWF0cml4LCB1bmJpYXNlZCwgbWVhbikge1xuICBjb25zdCByb3dzID0gbWF0cml4LnJvd3M7XG4gIGNvbnN0IGNvbHMgPSBtYXRyaXguY29sdW1ucztcbiAgY29uc3QgdmFyaWFuY2UgPSBbXTtcblxuICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgIGxldCBzdW0xID0gMDtcbiAgICBsZXQgc3VtMiA9IDA7XG4gICAgbGV0IHggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICB4ID0gbWF0cml4LmdldChpLCBqKSAtIG1lYW5bal07XG4gICAgICBzdW0xICs9IHg7XG4gICAgICBzdW0yICs9IHggKiB4O1xuICAgIH1cbiAgICBpZiAodW5iaWFzZWQpIHtcbiAgICAgIHZhcmlhbmNlLnB1c2goKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gcm93cykgLyAocm93cyAtIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyByb3dzKSAvIHJvd3MpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFyaWFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYW5jZUFsbChtYXRyaXgsIHVuYmlhc2VkLCBtZWFuKSB7XG4gIGNvbnN0IHJvd3MgPSBtYXRyaXgucm93cztcbiAgY29uc3QgY29scyA9IG1hdHJpeC5jb2x1bW5zO1xuICBjb25zdCBzaXplID0gcm93cyAqIGNvbHM7XG5cbiAgbGV0IHN1bTEgPSAwO1xuICBsZXQgc3VtMiA9IDA7XG4gIGxldCB4ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgeCA9IG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuO1xuICAgICAgc3VtMSArPSB4O1xuICAgICAgc3VtMiArPSB4ICogeDtcbiAgICB9XG4gIH1cbiAgaWYgKHVuYmlhc2VkKSB7XG4gICAgcmV0dXJuIChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIHNpemUpIC8gKHNpemUgLSAxKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gc2l6ZSkgLyBzaXplO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZW50ZXJCeVJvdyhtYXRyaXgsIG1lYW4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbnRlckJ5Q29sdW1uKG1hdHJpeCwgbWVhbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAtIG1lYW5bal0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VudGVyQWxsKG1hdHJpeCwgbWVhbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAtIG1lYW4pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVCeVJvdyhtYXRyaXgpIHtcbiAgY29uc3Qgc2NhbGUgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyAobWF0cml4LmNvbHVtbnMgLSAxKTtcbiAgICB9XG4gICAgc2NhbGUucHVzaChNYXRoLnNxcnQoc3VtKSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVCeVJvdyhtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGVbaV0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVCeUNvbHVtbihtYXRyaXgpIHtcbiAgY29uc3Qgc2NhbGUgPSBbXTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyAobWF0cml4LnJvd3MgLSAxKTtcbiAgICB9XG4gICAgc2NhbGUucHVzaChNYXRoLnNxcnQoc3VtKSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVCeUNvbHVtbihtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGVbal0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVBbGwobWF0cml4KSB7XG4gIGNvbnN0IGRpdmlkZXIgPSBtYXRyaXguc2l6ZSAtIDE7XG4gIGxldCBzdW0gPSAwO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICAgIHN1bSArPSBNYXRoLnBvdyhtYXRyaXguZ2V0KGksIGopLCAyKSAvIGRpdmlkZXI7XG4gICAgfVxuICB9XG4gIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQWxsKG1hdHJpeCwgc2NhbGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLyBzY2FsZSk7XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1hdGhPcGVyYXRpb25zKEFic3RyYWN0TWF0cml4LCBNYXRyaXgpIHtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5hZGRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5hZGRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWRkUyA9IGZ1bmN0aW9uIGFkZFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWRkTSA9IGZ1bmN0aW9uIGFkZE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hZGQgPSBmdW5jdGlvbiBhZGQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFkZCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uIHN1Yih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5zdWJTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5zdWJNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViUyA9IGZ1bmN0aW9uIHN1YlModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViTSA9IGZ1bmN0aW9uIHN1Yk0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zdWIgPSBmdW5jdGlvbiBzdWIobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnN1Yih2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWI7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdFMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViUztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YnRyYWN0TSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJNO1xuICBBYnN0cmFjdE1hdHJpeC5zdWJ0cmFjdCA9IEFic3RyYWN0TWF0cml4LnN1YjtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLm11bFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm11bE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxTID0gZnVuY3Rpb24gbXVsUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgKiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxNID0gZnVuY3Rpb24gbXVsTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm11bCA9IGZ1bmN0aW9uIG11bChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubXVsKHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5ID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bDtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5UyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsdGlwbHlNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bE07XG4gIEFic3RyYWN0TWF0cml4Lm11bHRpcGx5ID0gQWJzdHJhY3RNYXRyaXgubXVsO1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXYgPSBmdW5jdGlvbiBkaXYodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuZGl2Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuZGl2TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdlMgPSBmdW5jdGlvbiBkaXZTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAvIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdk0gPSBmdW5jdGlvbiBkaXZNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLyBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZGl2ID0gZnVuY3Rpb24gZGl2KG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5kaXYodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2aWRlID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdjtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZVMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2UztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZU0gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2TTtcbiAgQWJzdHJhY3RNYXRyaXguZGl2aWRlID0gQWJzdHJhY3RNYXRyaXguZGl2O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMubW9kUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMubW9kTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZFMgPSBmdW5jdGlvbiBtb2RTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAlIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZE0gPSBmdW5jdGlvbiBtb2RNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJSBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubW9kID0gZnVuY3Rpb24gbW9kKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5tb2QodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1cyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2Q7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2R1bHVzUyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2RTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1c00gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kTTtcbiAgQWJzdHJhY3RNYXRyaXgubW9kdWx1cyA9IEFic3RyYWN0TWF0cml4Lm1vZDtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gYW5kKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLmFuZFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmFuZE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hbmRTID0gZnVuY3Rpb24gYW5kUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hbmRNID0gZnVuY3Rpb24gYW5kTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICYgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFuZCA9IGZ1bmN0aW9uIGFuZChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYW5kKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiBvcih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5vclModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm9yTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm9yUyA9IGZ1bmN0aW9uIG9yUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgfCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5vck0gPSBmdW5jdGlvbiBvck0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSB8IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5vciA9IGZ1bmN0aW9uIG9yKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5vcih2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvcih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy54b3JTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy54b3JNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUueG9yUyA9IGZ1bmN0aW9uIHhvclModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIF4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUueG9yTSA9IGZ1bmN0aW9uIHhvck0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSBeIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC54b3IgPSBmdW5jdGlvbiB4b3IobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4Lnhvcih2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdCA9IGZ1bmN0aW9uIGxlZnRTaGlmdCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5sZWZ0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5sZWZ0U2hpZnRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubGVmdFNoaWZ0UyA9IGZ1bmN0aW9uIGxlZnRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIDw8IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdE0gPSBmdW5jdGlvbiBsZWZ0U2hpZnRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPDwgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxlZnRTaGlmdCA9IGZ1bmN0aW9uIGxlZnRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubGVmdFNoaWZ0KHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCA9IGZ1bmN0aW9uIHNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFMgPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0Uyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0gPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0ID0gZnVuY3Rpb24gc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnQgPSBmdW5jdGlvbiByaWdodFNoaWZ0KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnJpZ2h0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5yaWdodFNoaWZ0TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRTID0gZnVuY3Rpb24gcmlnaHRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+PiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0TSA9IGZ1bmN0aW9uIHJpZ2h0U2hpZnRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4+IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5yaWdodFNoaWZ0ID0gZnVuY3Rpb24gcmlnaHRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucmlnaHRTaGlmdCh2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnQgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdDtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnplcm9GaWxsUmlnaHRTaGlmdFMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdFM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRNO1xuICBBYnN0cmFjdE1hdHJpeC56ZXJvRmlsbFJpZ2h0U2hpZnQgPSBBYnN0cmFjdE1hdHJpeC5yaWdodFNoaWZ0O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5ub3QgPSBmdW5jdGlvbiBub3QoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB+KHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm5vdCA9IGZ1bmN0aW9uIG5vdChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5ub3QoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWJzID0gZnVuY3Rpb24gYWJzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hYnModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYWJzID0gZnVuY3Rpb24gYWJzKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFicygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hY29zID0gZnVuY3Rpb24gYWNvcygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYWNvcyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hY29zID0gZnVuY3Rpb24gYWNvcyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hY29zKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFjb3NoID0gZnVuY3Rpb24gYWNvc2goKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFjb3NoKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFjb3NoID0gZnVuY3Rpb24gYWNvc2gobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYWNvc2goKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXNpbiA9IGZ1bmN0aW9uIGFzaW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFzaW4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXNpbiA9IGZ1bmN0aW9uIGFzaW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYXNpbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hc2luaCA9IGZ1bmN0aW9uIGFzaW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hc2luaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hc2luaCA9IGZ1bmN0aW9uIGFzaW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFzaW5oKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmF0YW4gPSBmdW5jdGlvbiBhdGFuKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hdGFuKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmF0YW4gPSBmdW5jdGlvbiBhdGFuKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmF0YW4oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXRhbmggPSBmdW5jdGlvbiBhdGFuaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYXRhbmgodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXRhbmggPSBmdW5jdGlvbiBhdGFuaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hdGFuaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jYnJ0ID0gZnVuY3Rpb24gY2JydCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2JydCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jYnJ0ID0gZnVuY3Rpb24gY2JydChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jYnJ0KCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNlaWwgPSBmdW5jdGlvbiBjZWlsKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jZWlsKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNlaWwgPSBmdW5jdGlvbiBjZWlsKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNlaWwoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY2x6MzIgPSBmdW5jdGlvbiBjbHozMigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2x6MzIodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY2x6MzIgPSBmdW5jdGlvbiBjbHozMihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jbHozMigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jb3MgPSBmdW5jdGlvbiBjb3MoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNvcyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jb3MgPSBmdW5jdGlvbiBjb3MobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY29zKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNvc2ggPSBmdW5jdGlvbiBjb3NoKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jb3NoKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNvc2ggPSBmdW5jdGlvbiBjb3NoKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNvc2goKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZXhwID0gZnVuY3Rpb24gZXhwKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5leHAodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZXhwID0gZnVuY3Rpb24gZXhwKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmV4cCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5leHBtMSA9IGZ1bmN0aW9uIGV4cG0xKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5leHBtMSh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5leHBtMSA9IGZ1bmN0aW9uIGV4cG0xKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmV4cG0xKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmZsb29yID0gZnVuY3Rpb24gZmxvb3IoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmZsb29yKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmZsb29yID0gZnVuY3Rpb24gZmxvb3IobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguZmxvb3IoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZnJvdW5kID0gZnVuY3Rpb24gZnJvdW5kKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5mcm91bmQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZnJvdW5kID0gZnVuY3Rpb24gZnJvdW5kKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmZyb3VuZCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cgPSBmdW5jdGlvbiBsb2coKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cgPSBmdW5jdGlvbiBsb2cobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxvZzFwID0gZnVuY3Rpb24gbG9nMXAoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZzFwKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxvZzFwID0gZnVuY3Rpb24gbG9nMXAobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nMXAoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubG9nMTAgPSBmdW5jdGlvbiBsb2cxMCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nMTAodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubG9nMTAgPSBmdW5jdGlvbiBsb2cxMChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2cxMCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cyID0gZnVuY3Rpb24gbG9nMigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nMih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cyID0gZnVuY3Rpb24gbG9nMihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2cyKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJvdW5kID0gZnVuY3Rpb24gcm91bmQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnJvdW5kKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnJvdW5kID0gZnVuY3Rpb24gcm91bmQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucm91bmQoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNpZ24odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2lnbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaW4gPSBmdW5jdGlvbiBzaW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNpbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaW4gPSBmdW5jdGlvbiBzaW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2luKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpbmggPSBmdW5jdGlvbiBzaW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zaW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNpbmggPSBmdW5jdGlvbiBzaW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNxcnQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc3FydCA9IGZ1bmN0aW9uIHNxcnQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc3FydCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50YW4gPSBmdW5jdGlvbiB0YW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnRhbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC50YW4gPSBmdW5jdGlvbiB0YW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgudGFuKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnRhbmggPSBmdW5jdGlvbiB0YW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC50YW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnRhbmggPSBmdW5jdGlvbiB0YW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnRhbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUudHJ1bmMgPSBmdW5jdGlvbiB0cnVuYygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgudHJ1bmModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgudHJ1bmMgPSBmdW5jdGlvbiB0cnVuYyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC50cnVuYygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnBvdyA9IGZ1bmN0aW9uIHBvdyhtYXRyaXgsIGFyZzApIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5wb3coYXJnMCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5wb3dTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5wb3dNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucG93UyA9IGZ1bmN0aW9uIHBvd1ModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgucG93KHRoaXMuZ2V0KGksIGopLCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucG93TSA9IGZ1bmN0aW9uIHBvd00obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnBvdyh0aGlzLmdldChpLCBqKSwgbWF0cml4LmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cbiJdLCJuYW1lcyI6WyJ0b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsImlzQW55QXJyYXkiLCJvYmplY3QiLCJjYWxsIiwiZW5kc1dpdGgiLCJlcnJvckNhbGN1bGF0aW9uIiwiZGF0YSIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJpemVkRnVuY3Rpb24iLCJlcnJvciIsImZ1bmMiLCJpIiwieCIsImxlbmd0aCIsIk1hdGgiLCJhYnMiLCJ5Iiwic3RlcCIsInBhcmFtcyIsImRhbXBpbmciLCJncmFkaWVudERpZmZlcmVuY2UiLCJ2YWx1ZSIsImlkZW50aXR5IiwiZXZhbHVhdGVkRGF0YSIsIkZsb2F0NjRBcnJheSIsImdyYWRpZW50RnVuYyIsInBhcmFtRnVuY3Rpb24iLCJuIiwibSIsImFucyIsIkFycmF5IiwicGFyYW0iLCJhdXhQYXJhbXMiLCJzbGljZSIsImZ1bmNQYXJhbSIsInBvaW50IiwiZ3JhZGllbnRGdW5jdGlvbiIsIm1hdHJpeEZ1bmMiLCJtYXRyaXhGdW5jdGlvbiIsImludmVyc2VNYXRyaXgiLCJhZGQiLCJtbXVsIiwidHJhbnNwb3NlIiwic3ViIiwibXVsIiwidG8xREFycmF5IiwiV3JhcHBlck1hdHJpeDJEIiwiY29uc3RydWN0b3IiLCJzdXBlciIsInRoaXMiLCJyb3dzIiwiY29sdW1ucyIsInNldCIsInJvd0luZGV4IiwiY29sdW1uSW5kZXgiLCJnZXQiLCJMdURlY29tcG9zaXRpb24iLCJtYXRyaXgiLCJqIiwiayIsInAiLCJzIiwidCIsInYiLCJMVWNvbGoiLCJrbWF4IiwibHUiLCJjaGVja01hdHJpeCIsImNsb25lIiwicGl2b3RWZWN0b3IiLCJwaXZvdFNpZ24iLCJtaW4iLCJMVSIsImlzU2luZ3VsYXIiLCJjb2wiLCJzb2x2ZSIsIkVycm9yIiwiY291bnQiLCJYIiwic3ViTWF0cml4Um93IiwiZGV0ZXJtaW5hbnQiLCJpc1NxdWFyZSIsImxvd2VyVHJpYW5ndWxhck1hdHJpeCIsInVwcGVyVHJpYW5ndWxhck1hdHJpeCIsInBpdm90UGVybXV0YXRpb25WZWN0b3IiLCJmcm9tIiwiaHlwb3RlbnVzZSIsImEiLCJiIiwiciIsInNxcnQiLCJRckRlY29tcG9zaXRpb24iLCJxciIsInJkaWFnIiwibnJtIiwiUVIiLCJSZGlhZyIsImlzRnVsbFJhbmsiLCJzdWJNYXRyaXgiLCJvcnRob2dvbmFsTWF0cml4IiwiU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24iLCJvcHRpb25zIiwiaXNFbXB0eSIsImNvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzIiwiY29tcHV0ZVJpZ2h0U2luZ3VsYXJWZWN0b3JzIiwiYXV0b1RyYW5zcG9zZSIsIndhbnR1IiwiQm9vbGVhbiIsIndhbnR2Iiwic3dhcHBlZCIsImF1eCIsImNvbnNvbGUiLCJ3YXJuIiwibnUiLCJuaSIsIlUiLCJWIiwiZSIsIndvcmsiLCJzaSIsIm5jdCIsIm5ydCIsIm1heCIsIm1yYyIsInBwIiwiaXRlciIsImVwcyIsIk51bWJlciIsIkVQU0lMT04iLCJrYXNlIiwiYWxwaGEiLCJNSU5fVkFMVUUiLCJpc05hTiIsImtzIiwiZiIsImNzIiwic24iLCJzY2FsZSIsInNwIiwic3BtMSIsImVwbTEiLCJzayIsImVrIiwiYyIsInNoaWZ0IiwiZyIsInRtcCIsIlkiLCJ0aHJlc2hvbGQiLCJzY29scyIsIkxzIiwicmlnaHRTaW5ndWxhclZlY3RvcnMiLCJWTCIsInZyb3dzIiwidXJvd3MiLCJWTFUiLCJzdW0iLCJzb2x2ZUZvckRpYWdvbmFsIiwiaW52ZXJzZSIsInZjb2xzIiwidWNvbHMiLCJjb25kaXRpb24iLCJub3JtMiIsInJhbmsiLCJ0b2wiLCJpaSIsImRpYWdvbmFsIiwibGVmdFNpbmd1bGFyVmVjdG9ycyIsImRpYWdvbmFsTWF0cml4IiwidXNlU1ZEIiwibGVmdEhhbmRTaWRlIiwicmlnaHRIYW5kU2lkZSIsInRhZyIsImluY2x1ZGVzIiwicmVzY2FsZSIsImlucHV0Iiwib3V0cHV0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiY3VycmVudE1pbiIsIl9vcHRpb25zJGZyb21JbmRleCIsImZyb21JbmRleCIsIl9vcHRpb25zJHRvSW5kZXgiLCJ0b0luZGV4IiwiaXNJbnRlZ2VyIiwibWluVmFsdWUiLCJjdXJyZW50TWF4IiwibWF4VmFsdWUiLCJSYW5nZUVycm9yIiwiX29wdGlvbnMkbWluIiwiYXV0b01pbk1heCIsIl9vcHRpb25zJG1heCIsImZhY3RvciIsImluZGVudCIsInJlcGVhdCIsImluZGVudERhdGEiLCJpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnMiLCJtYXhSb3dzIiwibWF4Q29sdW1ucyIsIm1heE51bVNpemUiLCJwYWRNaW51cyIsIm5hbWUiLCJtYXhJIiwibWF4SiIsInJlc3VsdCIsImxvb3AiLCJsaW5lIiwicHVzaCIsImZvcm1hdE51bWJlciIsImpvaW4iLCJpbnNwZWN0RGF0YSIsIm51bSIsImZvcm1hdE51bWJlcjIiLCJwYWRFbmQiLCJsZW4iLCJzdHIiLCJmaXgiLCJ0b0ZpeGVkIiwic3RhcnRzV2l0aCIsImV4cCIsInRvRXhwb25lbnRpYWwiLCJjaGVja1Jvd0luZGV4IiwiaW5kZXgiLCJvdXRlciIsImNoZWNrQ29sdW1uSW5kZXgiLCJjaGVja1Jvd1ZlY3RvciIsInZlY3RvciIsImNoZWNrQ29sdW1uVmVjdG9yIiwiY2hlY2tSYW5nZSIsInN0YXJ0Um93IiwiZW5kUm93Iiwic3RhcnRDb2x1bW4iLCJlbmRDb2x1bW4iLCJjaGVja051bWJlciIsIm5ld0FycmF5IiwiYXJyYXkiLCJjaGVja05vbkVtcHR5IiwiQWJzdHJhY3RNYXRyaXgiLCJzdGF0aWMiLCJuZXdSb3dzIiwibmV3Q29sdW1ucyIsIm5ld0RhdGEiLCJuZXdNYXRyaXgiLCJNYXRyaXgiLCJyb3ciLCJjb2x1bW4iLCJmaWxsIiwicmFuZG9tIiwiaW50ZXJ2YWwiLCJyb3VuZCIsInplcm9zIiwibCIsIm1hdHJpeDEiLCJtYXRyaXgyIiwiaXNNYXRyaXgiLCJrbGFzcyIsInNpemUiLCJhcHBseSIsImNhbGxiYWNrIiwidG8yREFycmF5IiwiY29weSIsInRvSlNPTiIsImlzUm93VmVjdG9yIiwiaXNDb2x1bW5WZWN0b3IiLCJpc1ZlY3RvciIsImlzU3ltbWV0cmljIiwiaXNFY2hlbG9uRm9ybSIsInByZXZpb3VzQ29sdW1uIiwiY2hlY2tlZCIsImlzUmVkdWNlZEVjaGVsb25Gb3JtIiwiZWNoZWxvbkZvcm0iLCJoIiwiaU1heCIsInN3YXBSb3dzIiwicmVkdWNlZEVjaGVsb25Gb3JtIiwibWF4Um93IiwicGl2b3QiLCJzZXRTdWJNYXRyaXgiLCJuZWciLCJtdWxTIiwiZ2V0Um93IiwiZ2V0Um93VmVjdG9yIiwicm93VmVjdG9yIiwic2V0Um93Iiwicm93MSIsInJvdzIiLCJ0ZW1wIiwiZ2V0Q29sdW1uIiwiZ2V0Q29sdW1uVmVjdG9yIiwiY29sdW1uVmVjdG9yIiwic2V0Q29sdW1uIiwic3dhcENvbHVtbnMiLCJjb2x1bW4xIiwiY29sdW1uMiIsImFkZFJvd1ZlY3RvciIsInN1YlJvd1ZlY3RvciIsIm11bFJvd1ZlY3RvciIsImRpdlJvd1ZlY3RvciIsImFkZENvbHVtblZlY3RvciIsInN1YkNvbHVtblZlY3RvciIsIm11bENvbHVtblZlY3RvciIsImRpdkNvbHVtblZlY3RvciIsIm11bFJvdyIsIm11bENvbHVtbiIsImJ5IiwiTmFOIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJtYXhJbmRleCIsImlkeCIsIlBPU0lUSVZFX0lORklOSVRZIiwibWluSW5kZXgiLCJtYXhSb3dJbmRleCIsIm1pblJvdyIsIm1pblJvd0luZGV4IiwibWF4Q29sdW1uIiwibWF4Q29sdW1uSW5kZXgiLCJtaW5Db2x1bW4iLCJtaW5Db2x1bW5JbmRleCIsImRpYWciLCJub3JtIiwidHlwZSIsImN1bXVsYXRpdmVTdW0iLCJkb3QiLCJ2ZWN0b3IyIiwidmVjdG9yMSIsIm90aGVyIiwiQmNvbGoiLCJzdHJhc3NlbjJ4MiIsImExMSIsImIxMSIsImExMiIsImIxMiIsImEyMSIsImIyMSIsImEyMiIsImIyMiIsIm0xIiwibTIiLCJtMyIsIm00IiwibTUiLCJjMDAiLCJjMDEiLCJjMTAiLCJjMTEiLCJzdHJhc3NlbjN4MyIsImEwMCIsImEwMSIsImEwMiIsImExMCIsImEyMCIsImIwMCIsImIwMSIsImIwMiIsImIxMCIsImIyMCIsIm02IiwibTciLCJtOCIsIm05IiwibTEyIiwibTEzIiwibTE0IiwibTE1IiwibTE2IiwibTE3IiwibTE4IiwiYzAyIiwiYzEyIiwiYzIwIiwiYzIxIiwiYzIyIiwibW11bFN0cmFzc2VuIiwicjEiLCJjMSIsInIyIiwiYzIiLCJlbWJlZCIsIm1hdCIsImNvbHMiLCJyZXN1bHRhdCIsImJsb2NrTXVsdCIsImhhbGZSb3dzIiwicGFyc2VJbnQiLCJoYWxmQ29scyIsInNjYWxlUm93cyIsImlzRmluaXRlIiwic2NhbGVDb2x1bW5zIiwiZmxpcFJvd3MiLCJtaWRkbGUiLCJjZWlsIiwiZmlyc3QiLCJsYXN0IiwiZmxpcENvbHVtbnMiLCJrcm9uZWNrZXJQcm9kdWN0IiwicSIsImtyb25lY2tlclN1bSIsIkF4SSIsImV5ZSIsIkl4QiIsInNvcnRSb3dzIiwiY29tcGFyZUZ1bmN0aW9uIiwiY29tcGFyZU51bWJlcnMiLCJzb3J0Iiwic29ydENvbHVtbnMiLCJpbmRpY2VzIiwic3ViTWF0cml4Q29sdW1uIiwic2VsZWN0aW9uIiwicm93SW5kaWNlcyIsImNvbHVtbkluZGljZXMiLCJjaGVja1Jvd0luZGljZXMiLCJjaGVja0NvbHVtbkluZGljZXMiLCJ0cmFjZSIsInN1bUJ5Um93Iiwic3VtQnlDb2x1bW4iLCJzdW1BbGwiLCJwcm9kdWN0IiwicHJvZHVjdEJ5Um93IiwicHJvZHVjdEJ5Q29sdW1uIiwicHJvZHVjdEFsbCIsIm1lYW4iLCJ2YXJpYW5jZSIsInVuYmlhc2VkIiwic3VtMSIsInN1bTIiLCJ2YXJpYW5jZUJ5Um93IiwidmFyaWFuY2VCeUNvbHVtbiIsInZhcmlhbmNlQWxsIiwic3RhbmRhcmREZXZpYXRpb24iLCJjZW50ZXIiLCJjZW50ZXJCeVJvdyIsImNlbnRlckJ5Q29sdW1uIiwiY2VudGVyQWxsIiwicG93IiwiZ2V0U2NhbGVCeVJvdyIsInNjYWxlQnlSb3ciLCJnZXRTY2FsZUJ5Q29sdW1uIiwic2NhbGVCeUNvbHVtbiIsImRpdmlkZXIiLCJnZXRTY2FsZUFsbCIsInNjYWxlQWxsIiwiU3ltYm9sIiwiZm9yIiwicmFuZCIsInJhbmRvbUludCIsInJhbmRJbnQiLCJuZWdhdGUiLCJ0ZW5zb3JQcm9kdWN0IiwiblJvd3MiLCJuQ29sdW1ucyIsImFycmF5RGF0YSIsImV2ZXJ5IiwiZWxlbWVudCIsInJlbW92ZVJvdyIsInNwbGljZSIsImFkZFJvdyIsInJlbW92ZUNvbHVtbiIsIm5ld1JvdyIsImFkZENvbHVtbiIsImFkZFMiLCJhZGRNIiwic3ViUyIsInN1Yk0iLCJzdWJ0cmFjdCIsInN1YnRyYWN0UyIsInN1YnRyYWN0TSIsIm11bE0iLCJtdWx0aXBseSIsIm11bHRpcGx5UyIsIm11bHRpcGx5TSIsImRpdiIsImRpdlMiLCJkaXZNIiwiZGl2aWRlIiwiZGl2aWRlUyIsImRpdmlkZU0iLCJtb2QiLCJtb2RTIiwibW9kTSIsIm1vZHVsdXMiLCJtb2R1bHVzUyIsIm1vZHVsdXNNIiwiYW5kIiwiYW5kUyIsImFuZE0iLCJvciIsIm9yUyIsIm9yTSIsInhvciIsInhvclMiLCJ4b3JNIiwibGVmdFNoaWZ0IiwibGVmdFNoaWZ0UyIsImxlZnRTaGlmdE0iLCJzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0Iiwic2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFMiLCJzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TSIsInJpZ2h0U2hpZnQiLCJyaWdodFNoaWZ0UyIsInJpZ2h0U2hpZnRNIiwiemVyb0ZpbGxSaWdodFNoaWZ0IiwiemVyb0ZpbGxSaWdodFNoaWZ0UyIsInplcm9GaWxsUmlnaHRTaGlmdE0iLCJub3QiLCJhY29zIiwiYWNvc2giLCJhc2luIiwiYXNpbmgiLCJhdGFuIiwiYXRhbmgiLCJjYnJ0IiwiY2x6MzIiLCJjb3MiLCJjb3NoIiwiZXhwbTEiLCJmbG9vciIsImZyb3VuZCIsImxvZyIsImxvZzFwIiwibG9nMTAiLCJsb2cyIiwic2lnbiIsInNpbiIsInNpbmgiLCJ0YW4iLCJ0YW5oIiwidHJ1bmMiLCJhcmcwIiwicG93UyIsInBvd00iLCJpbnN0YWxsTWF0aE9wZXJhdGlvbnMiXSwic291cmNlUm9vdCI6IiJ9
|
|
1
|
+
"use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[972],{7531:(t,e,r)=>{r.d(e,{Z:()=>s});const o=Object.prototype.toString;function s(t){return o.call(t).endsWith("Array]")}},1353:(t,e,r)=>{function o(t,e,r){let o=0;const s=r(e);for(let e=0;e<t.x.length;e++)o+=Math.abs(t.y[e]-s(t.x[e]));return o}r.d(e,{Z:()=>o})},8188:(t,e,r)=>{r.d(e,{Z:()=>n});var o=r(938),s=r(4720);function n(t,e,r,n,i){let h=r*n*n,u=o.Z.eye(e.length,e.length,h);const l=i(e);let a=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)a[e]=l(t.x[e]);let f=function(t,e,r,s,n){const i=r.length,h=t.x.length;let u=new Array(i);for(let o=0;o<i;o++){u[o]=new Array(h);let i=r.slice();i[o]+=s;let l=n(i);for(let r=0;r<h;r++)u[o][r]=e[r]-l(t.x[r])}return new o.Z(u)}(t,a,e,n,i),c=function(t,e){const r=t.x.length;let s=new Array(r);for(let o=0;o<r;o++)s[o]=[t.y[o]-e[o]];return new o.Z(s)}(t,a),m=(0,s.S)(u.add(f.mmul(f.transpose())));return(e=(e=new o.Z([e])).sub(m.mmul(f).mmul(c).mul(n).transpose())).to1DArray()}},4720:(t,e,r)=>{r.d(e,{S:()=>l});var o=r(938);class s extends o.X{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,r){return this.data[t][e]=r,this}get(t,e){return this.data[t][e]}}class n{constructor(t){let e,r,o,n,i,h,u,l,a,f=(t=s.checkMatrix(t)).clone(),c=f.rows,m=f.columns,w=new Float64Array(c),g=1;for(e=0;e<c;e++)w[e]=e;for(l=new Float64Array(c),r=0;r<m;r++){for(e=0;e<c;e++)l[e]=f.get(e,r);for(e=0;e<c;e++){for(a=Math.min(e,r),i=0,o=0;o<a;o++)i+=f.get(e,o)*l[o];l[e]-=i,f.set(e,r,l[e])}for(n=r,e=r+1;e<c;e++)Math.abs(l[e])>Math.abs(l[n])&&(n=e);if(n!==r){for(o=0;o<m;o++)h=f.get(n,o),f.set(n,o,f.get(r,o)),f.set(r,o,h);u=w[n],w[n]=w[r],w[r]=u,g=-g}if(r<c&&0!==f.get(r,r))for(e=r+1;e<c;e++)f.set(e,r,f.get(e,r)/f.get(r,r))}this.LU=f,this.pivotVector=w,this.pivotSign=g}isSingular(){let t=this.LU,e=t.columns;for(let r=0;r<e;r++)if(0===t.get(r,r))return!0;return!1}solve(t){t=o.Z.checkMatrix(t);let e=this.LU;if(e.rows!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let r,s,n,i=t.columns,h=t.subMatrixRow(this.pivotVector,0,i-1),u=e.columns;for(n=0;n<u;n++)for(r=n+1;r<u;r++)for(s=0;s<i;s++)h.set(r,s,h.get(r,s)-h.get(n,s)*e.get(r,n));for(n=u-1;n>=0;n--){for(s=0;s<i;s++)h.set(n,s,h.get(n,s)/e.get(n,n));for(r=0;r<n;r++)for(s=0;s<i;s++)h.set(r,s,h.get(r,s)-h.get(n,s)*e.get(r,n))}return h}get determinant(){let t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");let e=this.pivotSign,r=t.columns;for(let o=0;o<r;o++)e*=t.get(o,o);return e}get lowerTriangularMatrix(){let t=this.LU,e=t.rows,r=t.columns,s=new o.Z(e,r);for(let o=0;o<e;o++)for(let e=0;e<r;e++)o>e?s.set(o,e,t.get(o,e)):o===e?s.set(o,e,1):s.set(o,e,0);return s}get upperTriangularMatrix(){let t=this.LU,e=t.rows,r=t.columns,s=new o.Z(e,r);for(let o=0;o<e;o++)for(let e=0;e<r;e++)o<=e?s.set(o,e,t.get(o,e)):s.set(o,e,0);return s}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function i(t,e){let r=0;return Math.abs(t)>Math.abs(e)?(r=e/t,Math.abs(t)*Math.sqrt(1+r*r)):0!==e?(r=t/e,Math.abs(e)*Math.sqrt(1+r*r)):0}class h{constructor(t){let e,r,o,n,h=(t=s.checkMatrix(t)).clone(),u=t.rows,l=t.columns,a=new Float64Array(l);for(o=0;o<l;o++){let t=0;for(e=o;e<u;e++)t=i(t,h.get(e,o));if(0!==t){for(h.get(o,o)<0&&(t=-t),e=o;e<u;e++)h.set(e,o,h.get(e,o)/t);for(h.set(o,o,h.get(o,o)+1),r=o+1;r<l;r++){for(n=0,e=o;e<u;e++)n+=h.get(e,o)*h.get(e,r);for(n=-n/h.get(o,o),e=o;e<u;e++)h.set(e,r,h.get(e,r)+n*h.get(e,o))}}a[o]=-t}this.QR=h,this.Rdiag=a}solve(t){t=o.Z.checkMatrix(t);let e=this.QR,r=e.rows;if(t.rows!==r)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let s,n,i,h,u=t.columns,l=t.clone(),a=e.columns;for(i=0;i<a;i++)for(n=0;n<u;n++){for(h=0,s=i;s<r;s++)h+=e.get(s,i)*l.get(s,n);for(h=-h/e.get(i,i),s=i;s<r;s++)l.set(s,n,l.get(s,n)+h*e.get(s,i))}for(i=a-1;i>=0;i--){for(n=0;n<u;n++)l.set(i,n,l.get(i,n)/this.Rdiag[i]);for(s=0;s<i;s++)for(n=0;n<u;n++)l.set(s,n,l.get(s,n)-l.get(i,n)*e.get(s,i))}return l.subMatrix(0,a-1,0,u-1)}isFullRank(){let t=this.QR.columns;for(let e=0;e<t;e++)if(0===this.Rdiag[e])return!1;return!0}get upperTriangularMatrix(){let t,e,r=this.QR,s=r.columns,n=new o.Z(s,s);for(t=0;t<s;t++)for(e=0;e<s;e++)t<e?n.set(t,e,r.get(t,e)):t===e?n.set(t,e,this.Rdiag[t]):n.set(t,e,0);return n}get orthogonalMatrix(){let t,e,r,s,n=this.QR,i=n.rows,h=n.columns,u=new o.Z(i,h);for(r=h-1;r>=0;r--){for(t=0;t<i;t++)u.set(t,r,0);for(u.set(r,r,1),e=r;e<h;e++)if(0!==n.get(r,r)){for(s=0,t=r;t<i;t++)s+=n.get(t,r)*u.get(t,e);for(s=-s/n.get(r,r),t=r;t<i;t++)u.set(t,e,u.get(t,e)+s*n.get(t,r))}}return u}}class u{constructor(t,e={}){if((t=s.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let r=t.rows,n=t.columns;const{computeLeftSingularVectors:h=!0,computeRightSingularVectors:u=!0,autoTranspose:l=!1}=e;let a,f=Boolean(h),c=Boolean(u),m=!1;if(r<n)if(l){a=t.transpose(),r=a.rows,n=a.columns,m=!0;let e=f;f=c,c=e}else a=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else a=t.clone();let w=Math.min(r,n),g=Math.min(r+1,n),p=new Float64Array(g),d=new o.Z(r,w),y=new o.Z(n,n),b=new Float64Array(n),M=new Float64Array(r),x=new Float64Array(g);for(let t=0;t<g;t++)x[t]=t;let E=Math.min(r-1,n),S=Math.max(0,Math.min(n-2,r)),v=Math.max(E,S);for(let t=0;t<v;t++){if(t<E){p[t]=0;for(let e=t;e<r;e++)p[t]=i(p[t],a.get(e,t));if(0!==p[t]){a.get(t,t)<0&&(p[t]=-p[t]);for(let e=t;e<r;e++)a.set(e,t,a.get(e,t)/p[t]);a.set(t,t,a.get(t,t)+1)}p[t]=-p[t]}for(let e=t+1;e<n;e++){if(t<E&&0!==p[t]){let o=0;for(let s=t;s<r;s++)o+=a.get(s,t)*a.get(s,e);o=-o/a.get(t,t);for(let s=t;s<r;s++)a.set(s,e,a.get(s,e)+o*a.get(s,t))}b[e]=a.get(t,e)}if(f&&t<E)for(let e=t;e<r;e++)d.set(e,t,a.get(e,t));if(t<S){b[t]=0;for(let e=t+1;e<n;e++)b[t]=i(b[t],b[e]);if(0!==b[t]){b[t+1]<0&&(b[t]=0-b[t]);for(let e=t+1;e<n;e++)b[e]/=b[t];b[t+1]+=1}if(b[t]=-b[t],t+1<r&&0!==b[t]){for(let e=t+1;e<r;e++)M[e]=0;for(let e=t+1;e<r;e++)for(let r=t+1;r<n;r++)M[e]+=b[r]*a.get(e,r);for(let e=t+1;e<n;e++){let o=-b[e]/b[t+1];for(let s=t+1;s<r;s++)a.set(s,e,a.get(s,e)+o*M[s])}}if(c)for(let e=t+1;e<n;e++)y.set(e,t,b[e])}}let R=Math.min(n,r+1);if(E<n&&(p[E]=a.get(E,E)),r<R&&(p[R-1]=0),S+1<R&&(b[S]=a.get(S,R-1)),b[R-1]=0,f){for(let t=E;t<w;t++){for(let e=0;e<r;e++)d.set(e,t,0);d.set(t,t,1)}for(let t=E-1;t>=0;t--)if(0!==p[t]){for(let e=t+1;e<w;e++){let o=0;for(let s=t;s<r;s++)o+=d.get(s,t)*d.get(s,e);o=-o/d.get(t,t);for(let s=t;s<r;s++)d.set(s,e,d.get(s,e)+o*d.get(s,t))}for(let e=t;e<r;e++)d.set(e,t,-d.get(e,t));d.set(t,t,1+d.get(t,t));for(let e=0;e<t-1;e++)d.set(e,t,0)}else{for(let e=0;e<r;e++)d.set(e,t,0);d.set(t,t,1)}}if(c)for(let t=n-1;t>=0;t--){if(t<S&&0!==b[t])for(let e=t+1;e<n;e++){let r=0;for(let o=t+1;o<n;o++)r+=y.get(o,t)*y.get(o,e);r=-r/y.get(t+1,t);for(let o=t+1;o<n;o++)y.set(o,e,y.get(o,e)+r*y.get(o,t))}for(let e=0;e<n;e++)y.set(e,t,0);y.set(t,t,1)}let k=R-1,I=0,N=Number.EPSILON;for(;R>0;){let t,e;for(t=R-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+N*Math.abs(p[t]+Math.abs(p[t+1]));if(Math.abs(b[t])<=e||Number.isNaN(b[t])){b[t]=0;break}}if(t===R-2)e=4;else{let r;for(r=R-1;r>=t&&r!==t;r--){let e=(r!==R?Math.abs(b[r]):0)+(r!==t+1?Math.abs(b[r-1]):0);if(Math.abs(p[r])<=N*e){p[r]=0;break}}r===t?e=3:r===R-1?e=1:(e=2,t=r)}switch(t++,e){case 1:{let e=b[R-2];b[R-2]=0;for(let r=R-2;r>=t;r--){let o=i(p[r],e),s=p[r]/o,h=e/o;if(p[r]=o,r!==t&&(e=-h*b[r-1],b[r-1]=s*b[r-1]),c)for(let t=0;t<n;t++)o=s*y.get(t,r)+h*y.get(t,R-1),y.set(t,R-1,-h*y.get(t,r)+s*y.get(t,R-1)),y.set(t,r,o)}break}case 2:{let e=b[t-1];b[t-1]=0;for(let o=t;o<R;o++){let s=i(p[o],e),n=p[o]/s,h=e/s;if(p[o]=s,e=-h*b[o],b[o]=n*b[o],f)for(let e=0;e<r;e++)s=n*d.get(e,o)+h*d.get(e,t-1),d.set(e,t-1,-h*d.get(e,o)+n*d.get(e,t-1)),d.set(e,o,s)}break}case 3:{const e=Math.max(Math.abs(p[R-1]),Math.abs(p[R-2]),Math.abs(b[R-2]),Math.abs(p[t]),Math.abs(b[t])),o=p[R-1]/e,s=p[R-2]/e,h=b[R-2]/e,u=p[t]/e,l=b[t]/e,a=((s+o)*(s-o)+h*h)/2,m=o*h*(o*h);let w=0;0===a&&0===m||(w=a<0?0-Math.sqrt(a*a+m):Math.sqrt(a*a+m),w=m/(a+w));let g=(u+o)*(u-o)+w,M=u*l;for(let e=t;e<R-1;e++){let o=i(g,M);0===o&&(o=Number.MIN_VALUE);let s=g/o,h=M/o;if(e!==t&&(b[e-1]=o),g=s*p[e]+h*b[e],b[e]=s*b[e]-h*p[e],M=h*p[e+1],p[e+1]=s*p[e+1],c)for(let t=0;t<n;t++)o=s*y.get(t,e)+h*y.get(t,e+1),y.set(t,e+1,-h*y.get(t,e)+s*y.get(t,e+1)),y.set(t,e,o);if(o=i(g,M),0===o&&(o=Number.MIN_VALUE),s=g/o,h=M/o,p[e]=o,g=s*b[e]+h*p[e+1],p[e+1]=-h*b[e]+s*p[e+1],M=h*b[e+1],b[e+1]=s*b[e+1],f&&e<r-1)for(let t=0;t<r;t++)o=s*d.get(t,e)+h*d.get(t,e+1),d.set(t,e+1,-h*d.get(t,e)+s*d.get(t,e+1)),d.set(t,e,o)}b[R-2]=g,I+=1;break}case 4:if(p[t]<=0&&(p[t]=p[t]<0?-p[t]:0,c))for(let e=0;e<=k;e++)y.set(e,t,-y.get(e,t));for(;t<k&&!(p[t]>=p[t+1]);){let e=p[t];if(p[t]=p[t+1],p[t+1]=e,c&&t<n-1)for(let r=0;r<n;r++)e=y.get(r,t+1),y.set(r,t+1,y.get(r,t)),y.set(r,t,e);if(f&&t<r-1)for(let o=0;o<r;o++)e=d.get(o,t+1),d.set(o,t+1,d.get(o,t)),d.set(o,t,e);t++}I=0,R--}}if(m){let t=y;y=d,d=t}this.m=r,this.n=n,this.s=p,this.U=d,this.V=y}solve(t){let e=t,r=this.threshold,s=this.s.length,n=o.Z.zeros(s,s);for(let t=0;t<s;t++)Math.abs(this.s[t])<=r?n.set(t,t,0):n.set(t,t,1/this.s[t]);let i=this.U,h=this.rightSingularVectors,u=h.mmul(n),l=h.rows,a=i.rows,f=o.Z.zeros(l,a);for(let t=0;t<l;t++)for(let e=0;e<a;e++){let r=0;for(let o=0;o<s;o++)r+=u.get(t,o)*i.get(e,o);f.set(t,e,r)}return f.mmul(e)}solveForDiagonal(t){return this.solve(o.Z.diag(t))}inverse(){let t=this.V,e=this.threshold,r=t.rows,s=t.columns,n=new o.Z(r,this.s.length);for(let o=0;o<r;o++)for(let r=0;r<s;r++)Math.abs(this.s[r])>e&&n.set(o,r,t.get(o,r)/this.s[r]);let i=this.U,h=i.rows,u=i.columns,l=new o.Z(r,h);for(let t=0;t<r;t++)for(let e=0;e<h;e++){let r=0;for(let o=0;o<u;o++)r+=n.get(t,o)*i.get(e,o);l.set(t,e,r)}return l}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let t=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,e=0,r=this.s;for(let o=0,s=r.length;o<s;o++)r[o]>t&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return o.Z.diag(this.s)}}function l(t,e=!1){return t=s.checkMatrix(t),e?new u(t).inverse():function(t,e,r=!1){return t=s.checkMatrix(t),e=s.checkMatrix(e),r?new u(t).solve(e):t.isSquare()?new n(t).solve(e):new h(t).solve(e)}(t,o.Z.eye(t.rows))}},938:(t,e,r)=>{r.d(e,{X:()=>S,Z:()=>R});const o=Object.prototype.toString;function s(t){const e=o.call(t);return e.endsWith("Array]")&&!e.includes("Big")}const n=Object.prototype.toString;function i(t){const e=n.call(t);return e.endsWith("Array]")&&!e.includes("Big")}const h=Object.prototype.toString;const u=Object.prototype.toString;function l(t){var e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!i(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==r.output){if(!i(r.output))throw new TypeError("output option must be an array if specified");e=r.output}else e=new Array(t.length);var o=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(t){const e=u.call(t);return e.endsWith("Array]")&&!e.includes("Big")}(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var r=e.fromIndex,o=void 0===r?0:r,s=e.toIndex,n=void 0===s?t.length:s;if(o<0||o>=t.length||!Number.isInteger(o))throw new Error("fromIndex must be a positive integer smaller than length");if(n<=o||n>t.length||!Number.isInteger(n))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var i=t[o],h=o+1;h<n;h++)t[h]<i&&(i=t[h]);return i}(t),s=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(t){const e=h.call(t);return e.endsWith("Array]")&&!e.includes("Big")}(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var r=e.fromIndex,o=void 0===r?0:r,s=e.toIndex,n=void 0===s?t.length:s;if(o<0||o>=t.length||!Number.isInteger(o))throw new Error("fromIndex must be a positive integer smaller than length");if(n<=o||n>t.length||!Number.isInteger(n))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var i=t[o],u=o+1;u<n;u++)t[u]>i&&(i=t[u]);return i}(t);if(o===s)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var n=r.min,l=void 0===n?r.autoMinMax?o:0:n,a=r.max,f=void 0===a?r.autoMinMax?s:1:a;if(l>=f)throw new RangeError("min option must be smaller than max option");for(var c=(f-l)/(s-o),m=0;m<t.length;m++)e[m]=(t[m]-o)*c+l;return e}const a=" ".repeat(2),f=" ".repeat(4);function c(t,e={}){const{maxRows:r=15,maxColumns:o=10,maxNumSize:s=8,padMinus:n="auto"}=e;return`${t.constructor.name} {\n${a}[\n${f}${function(t,e,r,o,s){const{rows:n,columns:i}=t,h=Math.min(n,e),u=Math.min(i,r),l=[];if("auto"===s){s=!1;t:for(let e=0;e<h;e++)for(let r=0;r<u;r++)if(t.get(e,r)<0){s=!0;break t}}for(let e=0;e<h;e++){let r=[];for(let n=0;n<u;n++)r.push(m(t.get(e,n),o,s));l.push(`${r.join(" ")}`)}return u!==i&&(l[l.length-1]+=` ... ${i-r} more columns`),h!==n&&l.push(`... ${n-e} more rows`),l.join(`\n${f}`)}(t,r,o,s,n)}\n${a}]\n${a}rows: ${t.rows}\n${a}columns: ${t.columns}\n}`}function m(t,e,r){return(t>=0&&r?` ${w(t,e-1)}`:w(t,e)).padEnd(e)}function w(t,e){let r=t.toString();if(r.length<=e)return r;let o=t.toFixed(e);if(o.length>e&&(o=t.toFixed(Math.max(0,e-(o.length-e)))),o.length<=e&&!o.startsWith("0.000")&&!o.startsWith("-0.000"))return o;let s=t.toExponential(e);return s.length>e&&(s=t.toExponential(Math.max(0,e-(s.length-e)))),s.slice(0)}function g(t,e,r){let o=r?t.rows:t.rows-1;if(e<0||e>o)throw new RangeError("Row index out of range")}function p(t,e,r){let o=r?t.columns:t.columns-1;if(e<0||e>o)throw new RangeError("Column index out of range")}function d(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function y(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function b(t,e,r,o,s){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(x("startRow",e),x("endRow",r),x("startColumn",o),x("endColumn",s),e>r||o>s||e<0||e>=t.rows||r<0||r>=t.rows||o<0||o>=t.columns||s<0||s>=t.columns)throw new RangeError("Submatrix indices are out of range")}function M(t,e=0){let r=[];for(let o=0;o<t;o++)r.push(e);return r}function x(t,e){if("number"!=typeof e)throw new TypeError(`${t} must be a number`)}function E(t){if(t.isEmpty())throw new Error("Empty matrix has no elements to index")}class S{static from1DArray(t,e,r){if(t*e!==r.length)throw new RangeError("data length does not match given dimensions");let o=new R(t,e);for(let s=0;s<t;s++)for(let t=0;t<e;t++)o.set(s,t,r[s*e+t]);return o}static rowVector(t){let e=new R(1,t.length);for(let r=0;r<t.length;r++)e.set(0,r,t[r]);return e}static columnVector(t){let e=new R(t.length,1);for(let r=0;r<t.length;r++)e.set(r,0,t[r]);return e}static zeros(t,e){return new R(t,e)}static ones(t,e){return new R(t,e).fill(1)}static rand(t,e,r={}){if("object"!=typeof r)throw new TypeError("options must be an object");const{random:o=Math.random}=r;let s=new R(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++)s.set(r,t,o());return s}static randInt(t,e,r={}){if("object"!=typeof r)throw new TypeError("options must be an object");const{min:o=0,max:s=1e3,random:n=Math.random}=r;if(!Number.isInteger(o))throw new TypeError("min must be an integer");if(!Number.isInteger(s))throw new TypeError("max must be an integer");if(o>=s)throw new RangeError("min must be smaller than max");let i=s-o,h=new R(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++){let e=o+Math.round(n()*i);h.set(r,t,e)}return h}static eye(t,e,r){void 0===e&&(e=t),void 0===r&&(r=1);let o=Math.min(t,e),s=this.zeros(t,e);for(let t=0;t<o;t++)s.set(t,t,r);return s}static diag(t,e,r){let o=t.length;void 0===e&&(e=o),void 0===r&&(r=e);let s=Math.min(o,e,r),n=this.zeros(e,r);for(let e=0;e<s;e++)n.set(e,e,t[e]);return n}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let r=t.rows,o=t.columns,s=new R(r,o);for(let n=0;n<r;n++)for(let r=0;r<o;r++)s.set(n,r,Math.min(t.get(n,r),e.get(n,r)));return s}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let r=t.rows,o=t.columns,s=new this(r,o);for(let n=0;n<r;n++)for(let r=0;r<o;r++)s.set(n,r,Math.max(t.get(n,r),e.get(n,r)));return s}static checkMatrix(t){return S.isMatrix(t)?t:new R(t)}static isMatrix(t){return null!=t&&"Matrix"===t.klass}get size(){return this.rows*this.columns}apply(t){if("function"!=typeof t)throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.call(this,e,r);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.push(this.get(e,r));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let r=0;r<this.columns;r++)t[e].push(this.get(e,r))}return t}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isEchelonForm(){let t=0,e=0,r=-1,o=!0,s=!1;for(;t<this.rows&&o;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>r?(s=!0,r=e):(o=!1,s=!0);t++}return o}isReducedEchelonForm(){let t=0,e=0,r=-1,o=!0,s=!1;for(;t<this.rows&&o;){for(e=0,s=!1;e<this.columns&&!1===s;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>r?(s=!0,r=e):(o=!1,s=!0);for(let r=e+1;r<this.rows;r++)0!==this.get(t,r)&&(o=!1);t++}return o}echelonForm(){let t=this.clone(),e=0,r=0;for(;e<t.rows&&r<t.columns;){let o=e;for(let s=e;s<t.rows;s++)t.get(s,r)>t.get(o,r)&&(o=s);if(0===t.get(o,r))r++;else{t.swapRows(e,o);let s=t.get(e,r);for(let o=r;o<t.columns;o++)t.set(e,o,t.get(e,o)/s);for(let o=e+1;o<t.rows;o++){let s=t.get(o,r)/t.get(e,r);t.set(o,r,0);for(let n=r+1;n<t.columns;n++)t.set(o,n,t.get(o,n)-t.get(e,n)*s)}e++,r++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,r=t.rows,o=r-1;for(;o>=0;)if(0===t.maxRow(o))o--;else{let s=0,n=!1;for(;s<r&&!1===n;)1===t.get(o,s)?n=!0:s++;for(let r=0;r<o;r++){let n=t.get(r,s);for(let i=s;i<e;i++){let e=t.get(r,i)-n*t.get(o,i);t.set(r,i,e)}}o--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:r=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(r)||r<=0)throw new TypeError("columns must be a positive integer");let o=new R(this.rows*e,this.columns*r);for(let t=0;t<e;t++)for(let e=0;e<r;e++)o.setSubMatrix(this,this.rows*t,this.columns*e);return o}fill(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,t);return this}neg(){return this.mulS(-1)}getRow(t){g(this,t);let e=[];for(let r=0;r<this.columns;r++)e.push(this.get(t,r));return e}getRowVector(t){return R.rowVector(this.getRow(t))}setRow(t,e){g(this,t),e=d(this,e);for(let r=0;r<this.columns;r++)this.set(t,r,e[r]);return this}swapRows(t,e){g(this,t),g(this,e);for(let r=0;r<this.columns;r++){let o=this.get(t,r);this.set(t,r,this.get(e,r)),this.set(e,r,o)}return this}getColumn(t){p(this,t);let e=[];for(let r=0;r<this.rows;r++)e.push(this.get(r,t));return e}getColumnVector(t){return R.columnVector(this.getColumn(t))}setColumn(t,e){p(this,t),e=y(this,e);for(let r=0;r<this.rows;r++)this.set(r,t,e[r]);return this}swapColumns(t,e){p(this,t),p(this,e);for(let r=0;r<this.rows;r++){let o=this.get(r,t);this.set(r,t,this.get(r,e)),this.set(r,e,o)}return this}addRowVector(t){t=d(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t[r]);return this}subRowVector(t){t=d(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t[r]);return this}mulRowVector(t){t=d(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t[r]);return this}divRowVector(t){t=d(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t[r]);return this}addColumnVector(t){t=y(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t[e]);return this}subColumnVector(t){t=y(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t[e]);return this}mulColumnVector(t){t=y(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t[e]);return this}divColumnVector(t){t=y(this,t);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t[e]);return this}mulRow(t,e){g(this,t);for(let r=0;r<this.columns;r++)this.set(t,r,this.get(t,r)*e);return this}mulColumn(t,e){p(this,t);for(let r=0;r<this.rows;r++)this.set(r,t,this.get(r,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)>t[e]&&(t[e]=this.get(e,r));return t}case"column":{const t=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)>t[r]&&(t[r]=this.get(e,r));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)>t&&(t=this.get(e,r));return t}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){E(this);let t=this.get(0,0),e=[0,0];for(let r=0;r<this.rows;r++)for(let o=0;o<this.columns;o++)this.get(r,o)>t&&(t=this.get(r,o),e[0]=r,e[1]=o);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)<t[e]&&(t[e]=this.get(e,r));return t}case"column":{const t=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)<t[r]&&(t[r]=this.get(e,r));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.get(e,r)<t&&(t=this.get(e,r));return t}default:throw new Error(`invalid option: ${t}`)}}minIndex(){E(this);let t=this.get(0,0),e=[0,0];for(let r=0;r<this.rows;r++)for(let o=0;o<this.columns;o++)this.get(r,o)<t&&(t=this.get(r,o),e[0]=r,e[1]=o);return e}maxRow(t){if(g(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let r=1;r<this.columns;r++)this.get(t,r)>e&&(e=this.get(t,r));return e}maxRowIndex(t){g(this,t),E(this);let e=this.get(t,0),r=[t,0];for(let o=1;o<this.columns;o++)this.get(t,o)>e&&(e=this.get(t,o),r[1]=o);return r}minRow(t){if(g(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let r=1;r<this.columns;r++)this.get(t,r)<e&&(e=this.get(t,r));return e}minRowIndex(t){g(this,t),E(this);let e=this.get(t,0),r=[t,0];for(let o=1;o<this.columns;o++)this.get(t,o)<e&&(e=this.get(t,o),r[1]=o);return r}maxColumn(t){if(p(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let r=1;r<this.rows;r++)this.get(r,t)>e&&(e=this.get(r,t));return e}maxColumnIndex(t){p(this,t),E(this);let e=this.get(0,t),r=[0,t];for(let o=1;o<this.rows;o++)this.get(o,t)>e&&(e=this.get(o,t),r[0]=o);return r}minColumn(t){if(p(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let r=1;r<this.rows;r++)this.get(r,t)<e&&(e=this.get(r,t));return e}minColumnIndex(t){p(this,t),E(this);let e=this.get(0,t),r=[0,t];for(let o=1;o<this.rows;o++)this.get(o,t)<e&&(e=this.get(o,t),r[0]=o);return r}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let r=0;r<t;r++)e.push(this.get(r,r));return e}norm(t="frobenius"){let e=0;if("max"===t)return this.max();if("frobenius"===t){for(let t=0;t<this.rows;t++)for(let r=0;r<this.columns;r++)e+=this.get(t,r)*this.get(t,r);return Math.sqrt(e)}throw new RangeError(`unknown norm type: ${t}`)}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t+=this.get(e,r),this.set(e,r,t);return this}dot(t){S.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let r=0;for(let o=0;o<e.length;o++)r+=e[o]*t[o];return r}mmul(t){t=R.checkMatrix(t);let e=this.rows,r=this.columns,o=t.columns,s=new R(e,o),n=new Float64Array(r);for(let i=0;i<o;i++){for(let e=0;e<r;e++)n[e]=t.get(e,i);for(let t=0;t<e;t++){let e=0;for(let o=0;o<r;o++)e+=this.get(t,o)*n[o];s.set(t,i,e)}}return s}strassen2x2(t){t=R.checkMatrix(t);let e=new R(2,2);const r=this.get(0,0),o=t.get(0,0),s=this.get(0,1),n=t.get(0,1),i=this.get(1,0),h=t.get(1,0),u=this.get(1,1),l=t.get(1,1),a=(r+u)*(o+l),f=(i+u)*o,c=r*(n-l),m=u*(h-o),w=(r+s)*l,g=a+m-w+(s-u)*(h+l),p=c+w,d=f+m,y=a-f+c+(i-r)*(o+n);return e.set(0,0,g),e.set(0,1,p),e.set(1,0,d),e.set(1,1,y),e}strassen3x3(t){t=R.checkMatrix(t);let e=new R(3,3);const r=this.get(0,0),o=this.get(0,1),s=this.get(0,2),n=this.get(1,0),i=this.get(1,1),h=this.get(1,2),u=this.get(2,0),l=this.get(2,1),a=this.get(2,2),f=t.get(0,0),c=t.get(0,1),m=t.get(0,2),w=t.get(1,0),g=t.get(1,1),p=t.get(1,2),d=t.get(2,0),y=t.get(2,1),b=t.get(2,2),M=(r-n)*(-c+g),x=(-r+n+i)*(f-c+g),E=(n+i)*(-f+c),S=r*f,v=(-r+u+l)*(f-m+p),k=(-r+u)*(m-p),I=(u+l)*(-f+m),N=(-s+l+a)*(g+d-y),T=(s-a)*(g-y),A=s*d,q=(l+a)*(-d+y),F=(-s+i+h)*(p+d-b),V=(s-h)*(p-b),C=(i+h)*(-d+b),$=S+A+o*w,j=(r+o+s-n-i-l-a)*g+x+E+S+N+A+q,Z=S+v+I+(r+o+s-i-h-u-l)*p+A+F+C,z=M+i*(-f+c+w-g-p-d+b)+x+S+A+F+V,P=M+x+E+S+h*y,D=A+F+V+C+n*m,L=S+v+k+l*(-f+m+w-g-p-d+y)+N+T+A,U=N+T+A+q+u*c,O=S+v+k+I+a*b;return e.set(0,0,$),e.set(0,1,j),e.set(0,2,Z),e.set(1,0,z),e.set(1,1,P),e.set(1,2,D),e.set(2,0,L),e.set(2,1,U),e.set(2,2,O),e}mmulStrassen(t){t=R.checkMatrix(t);let e=this.clone(),r=e.rows,o=e.columns,s=t.rows,n=t.columns;function i(t,e,r){let o=t.rows,s=t.columns;if(o===e&&s===r)return t;{let o=S.zeros(e,r);return o=o.setSubMatrix(t,0,0),o}}o!==s&&console.warn(`Multiplying ${r} x ${o} and ${s} x ${n} matrix: dimensions do not match.`);let h=Math.max(r,s),u=Math.max(o,n);return e=i(e,h,u),function t(e,r,o,s){if(o<=512||s<=512)return e.mmul(r);o%2==1&&s%2==1?(e=i(e,o+1,s+1),r=i(r,o+1,s+1)):o%2==1?(e=i(e,o+1,s),r=i(r,o+1,s)):s%2==1&&(e=i(e,o,s+1),r=i(r,o,s+1));let n=parseInt(e.rows/2,10),h=parseInt(e.columns/2,10),u=e.subMatrix(0,n-1,0,h-1),l=r.subMatrix(0,n-1,0,h-1),a=e.subMatrix(0,n-1,h,e.columns-1),f=r.subMatrix(0,n-1,h,r.columns-1),c=e.subMatrix(n,e.rows-1,0,h-1),m=r.subMatrix(n,r.rows-1,0,h-1),w=e.subMatrix(n,e.rows-1,h,e.columns-1),g=r.subMatrix(n,r.rows-1,h,r.columns-1),p=t(S.add(u,w),S.add(l,g),n,h),d=t(S.add(c,w),l,n,h),y=t(u,S.sub(f,g),n,h),b=t(w,S.sub(m,l),n,h),M=t(S.add(u,a),g,n,h),x=t(S.sub(c,u),S.add(l,f),n,h),E=t(S.sub(a,w),S.add(m,g),n,h),v=S.add(p,b);v.sub(M),v.add(E);let R=S.add(y,M),k=S.add(d,b),I=S.sub(p,d);I.add(y),I.add(x);let N=S.zeros(2*v.rows,2*v.columns);return N=N.setSubMatrix(v,0,0),N=N.setSubMatrix(R,v.rows,0),N=N.setSubMatrix(k,0,v.columns),N=N.setSubMatrix(I,v.rows,v.columns),N.subMatrix(0,o-1,0,s-1)}(e,t=i(t,h,u),h,u)}scaleRows(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");let o=new R(this.rows,this.columns);for(let t=0;t<this.rows;t++){const s=this.getRow(t);s.length>0&&l(s,{min:e,max:r,output:s}),o.setRow(t,s)}return o}scaleColumns(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:r=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(r))throw new TypeError("max must be a number");if(e>=r)throw new RangeError("min must be smaller than max");let o=new R(this.rows,this.columns);for(let t=0;t<this.columns;t++){const s=this.getColumn(t);s.length&&l(s,{min:e,max:r,output:s}),o.setColumn(t,s)}return o}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let r=0;r<t;r++){let t=this.get(e,r),o=this.get(e,this.columns-1-r);this.set(e,r,o),this.set(e,this.columns-1-r,t)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let r=0;r<t;r++){let t=this.get(r,e),o=this.get(this.rows-1-r,e);this.set(r,e,o),this.set(this.rows-1-r,e,t)}return this}kroneckerProduct(t){t=R.checkMatrix(t);let e=this.rows,r=this.columns,o=t.rows,s=t.columns,n=new R(e*o,r*s);for(let i=0;i<e;i++)for(let e=0;e<r;e++)for(let r=0;r<o;r++)for(let h=0;h<s;h++)n.set(o*i+r,s*e+h,this.get(i,e)*t.get(r,h));return n}kroneckerSum(t){if(t=R.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,r=t.rows,o=this.kroneckerProduct(R.eye(r,r)),s=R.eye(e,e).kroneckerProduct(t);return o.add(s)}transpose(){let t=new R(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.set(r,e,this.get(e,r));return t}sortRows(t=v){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=v){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,r,o){b(this,t,e,r,o);let s=new R(e-t+1,o-r+1);for(let n=t;n<=e;n++)for(let e=r;e<=o;e++)s.set(n-t,e-r,this.get(n,e));return s}subMatrixRow(t,e,r){if(void 0===e&&(e=0),void 0===r&&(r=this.columns-1),e>r||e<0||e>=this.columns||r<0||r>=this.columns)throw new RangeError("Argument out of range");let o=new R(t.length,r-e+1);for(let s=0;s<t.length;s++)for(let n=e;n<=r;n++){if(t[s]<0||t[s]>=this.rows)throw new RangeError(`Row index out of range: ${t[s]}`);o.set(s,n-e,this.get(t[s],n))}return o}subMatrixColumn(t,e,r){if(void 0===e&&(e=0),void 0===r&&(r=this.rows-1),e>r||e<0||e>=this.rows||r<0||r>=this.rows)throw new RangeError("Argument out of range");let o=new R(r-e+1,t.length);for(let s=0;s<t.length;s++)for(let n=e;n<=r;n++){if(t[s]<0||t[s]>=this.columns)throw new RangeError(`Column index out of range: ${t[s]}`);o.set(n-e,s,this.get(n,t[s]))}return o}setSubMatrix(t,e,r){if((t=R.checkMatrix(t)).isEmpty())return this;b(this,e,e+t.rows-1,r,r+t.columns-1);for(let o=0;o<t.rows;o++)for(let s=0;s<t.columns;s++)this.set(e+o,r+s,t.get(o,s));return this}selection(t,e){!function(t,e){if(!s(e))throw new TypeError("row indices must be an array");for(let r=0;r<e.length;r++)if(e[r]<0||e[r]>=t.rows)throw new RangeError("row indices are out of range")}(this,t),function(t,e){if(!s(e))throw new TypeError("column indices must be an array");for(let r=0;r<e.length;r++)if(e[r]<0||e[r]>=t.columns)throw new RangeError("column indices are out of range")}(this,e);let r=new R(t.length,e.length);for(let o=0;o<t.length;o++){let s=t[o];for(let t=0;t<e.length;t++){let n=e[t];r.set(o,t,this.get(s,n))}}return r}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let r=0;r<t;r++)e+=this.get(r,r);return e}clone(){let t=new R(this.rows,this.columns);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)t.set(e,r,this.get(e,r));return t}sum(t){switch(t){case"row":return function(t){let e=M(t.rows);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[r]+=t.get(r,o);return e}(this);case"column":return function(t){let e=M(t.columns);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[o]+=t.get(r,o);return e}(this);case void 0:return function(t){let e=0;for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)e+=t.get(r,o);return e}(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return function(t){let e=M(t.rows,1);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[r]*=t.get(r,o);return e}(this);case"column":return function(t){let e=M(t.columns,1);for(let r=0;r<t.rows;++r)for(let o=0;o<t.columns;++o)e[o]*=t.get(r,o);return e}(this);case void 0:return function(t){let e=1;for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)e*=t.get(r,o);return e}(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":for(let t=0;t<this.rows;t++)e[t]/=this.columns;return e;case"column":for(let t=0;t<this.columns;t++)e[t]/=this.rows;return e;case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:r=!0,mean:o=this.mean(t)}=e;if("boolean"!=typeof r)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!s(o))throw new TypeError("mean must be an array");return function(t,e,r){const o=t.rows,s=t.columns,n=[];for(let i=0;i<o;i++){let o=0,h=0,u=0;for(let e=0;e<s;e++)u=t.get(i,e)-r[i],o+=u,h+=u*u;e?n.push((h-o*o/s)/(s-1)):n.push((h-o*o/s)/s)}return n}(this,r,o);case"column":if(!s(o))throw new TypeError("mean must be an array");return function(t,e,r){const o=t.rows,s=t.columns,n=[];for(let i=0;i<s;i++){let s=0,h=0,u=0;for(let e=0;e<o;e++)u=t.get(e,i)-r[i],s+=u,h+=u*u;e?n.push((h-s*s/o)/(o-1)):n.push((h-s*s/o)/o)}return n}(this,r,o);case void 0:if("number"!=typeof o)throw new TypeError("mean must be a number");return function(t,e,r){const o=t.rows,s=t.columns,n=o*s;let i=0,h=0,u=0;for(let e=0;e<o;e++)for(let o=0;o<s;o++)u=t.get(e,o)-r,i+=u,h+=u*u;return e?(h-i*i/n)/(n-1):(h-i*i/n)/n}(this,r,o);default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const r=this.variance(t,e);if(void 0===t)return Math.sqrt(r);for(let t=0;t<r.length;t++)r[t]=Math.sqrt(r[t]);return r}center(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:r=this.mean(t)}=e;switch(t){case"row":if(!s(r))throw new TypeError("center must be an array");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)-e[r])}(this,r),this;case"column":if(!s(r))throw new TypeError("center must be an array");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)-e[o])}(this,r),this;case void 0:if("number"!=typeof r)throw new TypeError("center must be a number");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)-e)}(this,r),this;default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let r=e.scale;switch(t){case"row":if(void 0===r)r=function(t){const e=[];for(let r=0;r<t.rows;r++){let o=0;for(let e=0;e<t.columns;e++)o+=Math.pow(t.get(r,e),2)/(t.columns-1);e.push(Math.sqrt(o))}return e}(this);else if(!s(r))throw new TypeError("scale must be an array");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)/e[r])}(this,r),this;case"column":if(void 0===r)r=function(t){const e=[];for(let r=0;r<t.columns;r++){let o=0;for(let e=0;e<t.rows;e++)o+=Math.pow(t.get(e,r),2)/(t.rows-1);e.push(Math.sqrt(o))}return e}(this);else if(!s(r))throw new TypeError("scale must be an array");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)/e[o])}(this,r),this;case void 0:if(void 0===r)r=function(t){const e=t.size-1;let r=0;for(let o=0;o<t.columns;o++)for(let s=0;s<t.rows;s++)r+=Math.pow(t.get(s,o),2)/e;return Math.sqrt(r)}(this);else if("number"!=typeof r)throw new TypeError("scale must be a number");return function(t,e){for(let r=0;r<t.rows;r++)for(let o=0;o<t.columns;o++)t.set(r,o,t.get(r,o)/e)}(this,r),this;default:throw new Error(`invalid option: ${t}`)}}toString(t){return c(this,t)}}function v(t,e){return t-e}S.prototype.klass="Matrix","undefined"!=typeof Symbol&&(S.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return c(this)}),S.random=S.rand,S.randomInt=S.randInt,S.diagonal=S.diag,S.prototype.diagonal=S.prototype.diag,S.identity=S.eye,S.prototype.negate=S.prototype.neg,S.prototype.tensorProduct=S.prototype.kroneckerProduct;class R extends S{constructor(t,e){if(super(),R.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>=0){if(this.data=[],!(Number.isInteger(e)&&e>=0))throw new TypeError("nColumns must be a positive integer");for(let r=0;r<t;r++)this.data.push(new Float64Array(e))}else{if(!s(t))throw new TypeError("First argument must be a positive number or an array");{const r=t;if("number"!=typeof(e=(t=r.length)?r[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let o=0;o<t;o++){if(r[o].length!==e)throw new RangeError("Inconsistent array dimensions");if(!r[o].every((t=>"number"==typeof t)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(r[o]))}}}this.rows=t,this.columns=e}set(t,e,r){return this.data[t][e]=r,this}get(t,e){return this.data[t][e]}removeRow(t){return g(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return void 0===e&&(e=t,t=this.rows),g(this,t,!0),e=Float64Array.from(d(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){p(this,t);for(let e=0;e<this.rows;e++){const r=new Float64Array(this.columns-1);for(let o=0;o<t;o++)r[o]=this.data[e][o];for(let o=t+1;o<this.columns;o++)r[o-1]=this.data[e][o];this.data[e]=r}return this.columns-=1,this}addColumn(t,e){void 0===e&&(e=t,t=this.columns),p(this,t,!0),e=y(this,e);for(let r=0;r<this.rows;r++){const o=new Float64Array(this.columns+1);let s=0;for(;s<t;s++)o[s]=this.data[r][s];for(o[s++]=e[r];s<this.columns+1;s++)o[s]=this.data[r][s-1];this.data[r]=o}return this.columns+=1,this}}!function(t,e){t.prototype.add=function(t){return"number"==typeof t?this.addS(t):this.addM(t)},t.prototype.addS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t);return this},t.prototype.addM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)+t.get(e,r));return this},t.add=function(t,r){return new e(t).add(r)},t.prototype.sub=function(t){return"number"==typeof t?this.subS(t):this.subM(t)},t.prototype.subS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t);return this},t.prototype.subM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)-t.get(e,r));return this},t.sub=function(t,r){return new e(t).sub(r)},t.prototype.subtract=t.prototype.sub,t.prototype.subtractS=t.prototype.subS,t.prototype.subtractM=t.prototype.subM,t.subtract=t.sub,t.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):this.mulM(t)},t.prototype.mulS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t);return this},t.prototype.mulM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)*t.get(e,r));return this},t.mul=function(t,r){return new e(t).mul(r)},t.prototype.multiply=t.prototype.mul,t.prototype.multiplyS=t.prototype.mulS,t.prototype.multiplyM=t.prototype.mulM,t.multiply=t.mul,t.prototype.div=function(t){return"number"==typeof t?this.divS(t):this.divM(t)},t.prototype.divS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t);return this},t.prototype.divM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)/t.get(e,r));return this},t.div=function(t,r){return new e(t).div(r)},t.prototype.divide=t.prototype.div,t.prototype.divideS=t.prototype.divS,t.prototype.divideM=t.prototype.divM,t.divide=t.div,t.prototype.mod=function(t){return"number"==typeof t?this.modS(t):this.modM(t)},t.prototype.modS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)%t);return this},t.prototype.modM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)%t.get(e,r));return this},t.mod=function(t,r){return new e(t).mod(r)},t.prototype.modulus=t.prototype.mod,t.prototype.modulusS=t.prototype.modS,t.prototype.modulusM=t.prototype.modM,t.modulus=t.mod,t.prototype.and=function(t){return"number"==typeof t?this.andS(t):this.andM(t)},t.prototype.andS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)&t);return this},t.prototype.andM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)&t.get(e,r));return this},t.and=function(t,r){return new e(t).and(r)},t.prototype.or=function(t){return"number"==typeof t?this.orS(t):this.orM(t)},t.prototype.orS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)|t);return this},t.prototype.orM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)|t.get(e,r));return this},t.or=function(t,r){return new e(t).or(r)},t.prototype.xor=function(t){return"number"==typeof t?this.xorS(t):this.xorM(t)},t.prototype.xorS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)^t);return this},t.prototype.xorM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)^t.get(e,r));return this},t.xor=function(t,r){return new e(t).xor(r)},t.prototype.leftShift=function(t){return"number"==typeof t?this.leftShiftS(t):this.leftShiftM(t)},t.prototype.leftShiftS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)<<t);return this},t.prototype.leftShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)<<t.get(e,r));return this},t.leftShift=function(t,r){return new e(t).leftShift(r)},t.prototype.signPropagatingRightShift=function(t){return"number"==typeof t?this.signPropagatingRightShiftS(t):this.signPropagatingRightShiftM(t)},t.prototype.signPropagatingRightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>t.get(e,r));return this},t.signPropagatingRightShift=function(t,r){return new e(t).signPropagatingRightShift(r)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,this.get(e,r)>>>t.get(e,r));return this},t.rightShift=function(t,r){return new e(t).rightShift(r)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,~this.get(t,e));return this},t.not=function(t){return new e(t).not()},t.prototype.abs=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.abs(this.get(t,e)));return this},t.abs=function(t){return new e(t).abs()},t.prototype.acos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acos(this.get(t,e)));return this},t.acos=function(t){return new e(t).acos()},t.prototype.acosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acosh(this.get(t,e)));return this},t.acosh=function(t){return new e(t).acosh()},t.prototype.asin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asin(this.get(t,e)));return this},t.asin=function(t){return new e(t).asin()},t.prototype.asinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asinh(this.get(t,e)));return this},t.asinh=function(t){return new e(t).asinh()},t.prototype.atan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atan(this.get(t,e)));return this},t.atan=function(t){return new e(t).atan()},t.prototype.atanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atanh(this.get(t,e)));return this},t.atanh=function(t){return new e(t).atanh()},t.prototype.cbrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cbrt(this.get(t,e)));return this},t.cbrt=function(t){return new e(t).cbrt()},t.prototype.ceil=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.ceil(this.get(t,e)));return this},t.ceil=function(t){return new e(t).ceil()},t.prototype.clz32=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.clz32(this.get(t,e)));return this},t.clz32=function(t){return new e(t).clz32()},t.prototype.cos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cos(this.get(t,e)));return this},t.cos=function(t){return new e(t).cos()},t.prototype.cosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cosh(this.get(t,e)));return this},t.cosh=function(t){return new e(t).cosh()},t.prototype.exp=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.exp(this.get(t,e)));return this},t.exp=function(t){return new e(t).exp()},t.prototype.expm1=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.expm1(this.get(t,e)));return this},t.expm1=function(t){return new e(t).expm1()},t.prototype.floor=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.floor(this.get(t,e)));return this},t.floor=function(t){return new e(t).floor()},t.prototype.fround=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.fround(this.get(t,e)));return this},t.fround=function(t){return new e(t).fround()},t.prototype.log=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log(this.get(t,e)));return this},t.log=function(t){return new e(t).log()},t.prototype.log1p=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log1p(this.get(t,e)));return this},t.log1p=function(t){return new e(t).log1p()},t.prototype.log10=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log10(this.get(t,e)));return this},t.log10=function(t){return new e(t).log10()},t.prototype.log2=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log2(this.get(t,e)));return this},t.log2=function(t){return new e(t).log2()},t.prototype.round=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.round(this.get(t,e)));return this},t.round=function(t){return new e(t).round()},t.prototype.sign=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sign(this.get(t,e)));return this},t.sign=function(t){return new e(t).sign()},t.prototype.sin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sin(this.get(t,e)));return this},t.sin=function(t){return new e(t).sin()},t.prototype.sinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sinh(this.get(t,e)));return this},t.sinh=function(t){return new e(t).sinh()},t.prototype.sqrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sqrt(this.get(t,e)));return this},t.sqrt=function(t){return new e(t).sqrt()},t.prototype.tan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tan(this.get(t,e)));return this},t.tan=function(t){return new e(t).tan()},t.prototype.tanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tanh(this.get(t,e)));return this},t.tanh=function(t){return new e(t).tanh()},t.prototype.trunc=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.trunc(this.get(t,e)));return this},t.trunc=function(t){return new e(t).trunc()},t.pow=function(t,r){return new e(t).pow(r)},t.prototype.pow=function(t){return"number"==typeof t?this.powS(t):this.powM(t)},t.prototype.powS=function(t){for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,Math.pow(this.get(e,r),t));return this},t.prototype.powM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.set(e,r,Math.pow(this.get(e,r),t.get(e,r)));return this}}(S,R)}}]);
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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M0wsR0FDWnlYLElBQUk4RixFQUN2QixFQUVBbFMsRUFBZTlPLFVBQVVrYixJQUFNLFNBQWE3WixHQUMxQyxNQUFxQixpQkFBVkEsRUFBMkI0QixLQUFLZ2UsS0FBSzVmLEdBQ3pDNEIsS0FBS2llLEtBQUs3ZixFQUNuQixFQUVBeU4sRUFBZTlPLFVBQVVpaEIsS0FBTyxTQUFjNWYsR0FDNUMsSUFBSyxJQUFJVixFQUFJLEVBQUdBLEVBQUlzQyxLQUFLQyxLQUFNdkMsSUFDN0IsSUFBSyxJQUFJK0MsRUFBSSxFQUFHQSxFQUFJVCxLQUFLRSxRQUFTTyxJQUNoQ1QsS0FBS0csSUFBSXpDLEVBQUcrQyxFQUFHNUMsS0FBS29hLElBQUlqWSxLQUFLTSxJQUFJNUMsRUFBRytDLEdBQUlyQyxJQUc1QyxPQUFPNEIsSUFDVCxFQUVBNkwsRUFBZTlPLFVBQVVraEIsS0FBTyxTQUFjemQsR0FFNUMsR0FEQUEsRUFBUzJMLEVBQU9qTCxZQUFZVixHQUN4QlIsS0FBS0MsT0FBU08sRUFBT1AsTUFDdkJELEtBQUtFLFVBQVlNLEVBQU9OLFFBQ3hCLE1BQU0sSUFBSTBJLFdBQVcscUNBRXZCLElBQUssSUFBSWxMLEVBQUksRUFBR0EsRUFBSXNDLEtBQUtDLEtBQU12QyxJQUM3QixJQUFLLElBQUkrQyxFQUFJLEVBQUdBLEVBQUlULEtBQUtFLFFBQVNPLElBQ2hDVCxLQUFLRyxJQUFJekMsRUFBRytDLEVBQUc1QyxLQUFLb2EsSUFBSWpZLEtBQUtNLElBQUk1QyxFQUFHK0MsR0FBSUQsRUFBT0YsSUFBSTVDLEVBQUcrQyxLQUcxRCxPQUFPVCxJQUNULENBQ0YsQ0Y4ekJBa2UsQ0FBc0JyUyxFQUFnQk0sRSIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvc3JjL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9lcnJvckNhbGN1bGF0aW9uLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9zdGVwLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL3dyYXAvV3JhcHBlck1hdHJpeDJELmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL2x1LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL3V0aWwuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvcXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvc3ZkLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RlY29tcG9zaXRpb25zLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvbm9kZV9tb2R1bGVzL2lzLWFueS1hcnJheS9saWItZXNtL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1yZXNjYWxlL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWluL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktcmVzY2FsZS9saWItZXM2L2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1taW4vbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L2xpYi1lczYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvaW5zcGVjdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy91dGlsLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL21hdHJpeC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9zdGF0LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL21hdGhPcGVyYXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBbnlBcnJheShvYmplY3QpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqZWN0KS5lbmRzV2l0aCgnQXJyYXldJyk7XG59XG4iLCIvKipcbiAqIENhbGN1bGF0ZSBjdXJyZW50IGVycm9yXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHBhcmFtZXRlcnMgLSBBcnJheSBvZiBjdXJyZW50IHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXJyb3JDYWxjdWxhdGlvbihcbiAgZGF0YSxcbiAgcGFyYW1ldGVycyxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuKSB7XG4gIGxldCBlcnJvciA9IDA7XG4gIGNvbnN0IGZ1bmMgPSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24ocGFyYW1ldGVycyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBlcnJvciArPSBNYXRoLmFicyhkYXRhLnlbaV0gLSBmdW5jKGRhdGEueFtpXSkpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuIiwiaW1wb3J0IHsgaW52ZXJzZSwgTWF0cml4IH0gZnJvbSAnbWwtbWF0cml4JztcblxuLyoqXG4gKiBEaWZmZXJlbmNlIG9mIHRoZSBtYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgcGFyYW1ldGVyc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXMgLSBBcnJheSBvZiBwcmV2aW91cyBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JhZGllbnREaWZmZXJlbmNlIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbUZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICogQHJldHVybiB7TWF0cml4fVxuICovXG5mdW5jdGlvbiBncmFkaWVudEZ1bmN0aW9uKFxuICBkYXRhLFxuICBldmFsdWF0ZWREYXRhLFxuICBwYXJhbXMsXG4gIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgcGFyYW1GdW5jdGlvbixcbikge1xuICBjb25zdCBuID0gcGFyYW1zLmxlbmd0aDtcbiAgY29uc3QgbSA9IGRhdGEueC5sZW5ndGg7XG5cbiAgbGV0IGFucyA9IG5ldyBBcnJheShuKTtcblxuICBmb3IgKGxldCBwYXJhbSA9IDA7IHBhcmFtIDwgbjsgcGFyYW0rKykge1xuICAgIGFuc1twYXJhbV0gPSBuZXcgQXJyYXkobSk7XG4gICAgbGV0IGF1eFBhcmFtcyA9IHBhcmFtcy5zbGljZSgpO1xuICAgIGF1eFBhcmFtc1twYXJhbV0gKz0gZ3JhZGllbnREaWZmZXJlbmNlO1xuICAgIGxldCBmdW5jUGFyYW0gPSBwYXJhbUZ1bmN0aW9uKGF1eFBhcmFtcyk7XG5cbiAgICBmb3IgKGxldCBwb2ludCA9IDA7IHBvaW50IDwgbTsgcG9pbnQrKykge1xuICAgICAgYW5zW3BhcmFtXVtwb2ludF0gPSBldmFsdWF0ZWREYXRhW3BvaW50XSAtIGZ1bmNQYXJhbShkYXRhLnhbcG9pbnRdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBNYXRyaXgoYW5zKTtcbn1cblxuLyoqXG4gKiBNYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgc2FtcGxlc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHJldHVybiB7TWF0cml4fVxuICovXG5mdW5jdGlvbiBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKSB7XG4gIGNvbnN0IG0gPSBkYXRhLngubGVuZ3RoO1xuXG4gIGxldCBhbnMgPSBuZXcgQXJyYXkobSk7XG5cbiAgZm9yIChsZXQgcG9pbnQgPSAwOyBwb2ludCA8IG07IHBvaW50KyspIHtcbiAgICBhbnNbcG9pbnRdID0gW2RhdGEueVtwb2ludF0gLSBldmFsdWF0ZWREYXRhW3BvaW50XV07XG4gIH1cblxuICByZXR1cm4gbmV3IE1hdHJpeChhbnMpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGlvbiBmb3IgTGV2ZW5iZXJnLU1hcnF1YXJkdFxuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXMgLSBBcnJheSBvZiBwcmV2aW91cyBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGFtcGluZyAtIExldmVuYmVyZy1NYXJxdWFyZHQgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JhZGllbnREaWZmZXJlbmNlIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtBcnJheTxudW1iZXI+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGVwKFxuICBkYXRhLFxuICBwYXJhbXMsXG4gIGRhbXBpbmcsXG4gIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuKSB7XG4gIGxldCB2YWx1ZSA9IGRhbXBpbmcgKiBncmFkaWVudERpZmZlcmVuY2UgKiBncmFkaWVudERpZmZlcmVuY2U7XG4gIGxldCBpZGVudGl0eSA9IE1hdHJpeC5leWUocGFyYW1zLmxlbmd0aCwgcGFyYW1zLmxlbmd0aCwgdmFsdWUpO1xuXG4gIGNvbnN0IGZ1bmMgPSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24ocGFyYW1zKTtcblxuICBsZXQgZXZhbHVhdGVkRGF0YSA9IG5ldyBGbG9hdDY0QXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgZXZhbHVhdGVkRGF0YVtpXSA9IGZ1bmMoZGF0YS54W2ldKTtcbiAgfVxuXG4gIGxldCBncmFkaWVudEZ1bmMgPSBncmFkaWVudEZ1bmN0aW9uKFxuICAgIGRhdGEsXG4gICAgZXZhbHVhdGVkRGF0YSxcbiAgICBwYXJhbXMsXG4gICAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICAgIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgKTtcbiAgbGV0IG1hdHJpeEZ1bmMgPSBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKTtcbiAgbGV0IGludmVyc2VNYXRyaXggPSBpbnZlcnNlKFxuICAgIGlkZW50aXR5LmFkZChncmFkaWVudEZ1bmMubW11bChncmFkaWVudEZ1bmMudHJhbnNwb3NlKCkpKSxcbiAgKTtcblxuICBwYXJhbXMgPSBuZXcgTWF0cml4KFtwYXJhbXNdKTtcbiAgcGFyYW1zID0gcGFyYW1zLnN1YihcbiAgICBpbnZlcnNlTWF0cml4XG4gICAgICAubW11bChncmFkaWVudEZ1bmMpXG4gICAgICAubW11bChtYXRyaXhGdW5jKVxuICAgICAgLm11bChncmFkaWVudERpZmZlcmVuY2UpXG4gICAgICAudHJhbnNwb3NlKCksXG4gICk7XG5cbiAgcmV0dXJuIHBhcmFtcy50bzFEQXJyYXkoKTtcbn1cbiIsImltcG9ydCB7IEFic3RyYWN0TWF0cml4IH0gZnJvbSAnLi4vbWF0cml4JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV3JhcHBlck1hdHJpeDJEIGV4dGVuZHMgQWJzdHJhY3RNYXRyaXgge1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuY29sdW1ucyA9IGRhdGFbMF0ubGVuZ3RoO1xuICB9XG5cbiAgc2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XTtcbiAgfVxufVxuIiwiaW1wb3J0IE1hdHJpeCBmcm9tICcuLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEx1RGVjb21wb3NpdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChtYXRyaXgpO1xuXG4gICAgbGV0IGx1ID0gbWF0cml4LmNsb25lKCk7XG4gICAgbGV0IHJvd3MgPSBsdS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbHUuY29sdW1ucztcbiAgICBsZXQgcGl2b3RWZWN0b3IgPSBuZXcgRmxvYXQ2NEFycmF5KHJvd3MpO1xuICAgIGxldCBwaXZvdFNpZ24gPSAxO1xuICAgIGxldCBpLCBqLCBrLCBwLCBzLCB0LCB2O1xuICAgIGxldCBMVWNvbGosIGttYXg7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBwaXZvdFZlY3RvcltpXSA9IGk7XG4gICAgfVxuXG4gICAgTFVjb2xqID0gbmV3IEZsb2F0NjRBcnJheShyb3dzKTtcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgTFVjb2xqW2ldID0gbHUuZ2V0KGksIGopO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIGttYXggPSBNYXRoLm1pbihpLCBqKTtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBrbWF4OyBrKyspIHtcbiAgICAgICAgICBzICs9IGx1LmdldChpLCBrKSAqIExVY29saltrXTtcbiAgICAgICAgfVxuICAgICAgICBMVWNvbGpbaV0gLT0gcztcbiAgICAgICAgbHUuc2V0KGksIGosIExVY29saltpXSk7XG4gICAgICB9XG5cbiAgICAgIHAgPSBqO1xuICAgICAgZm9yIChpID0gaiArIDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKExVY29saltpXSkgPiBNYXRoLmFicyhMVWNvbGpbcF0pKSB7XG4gICAgICAgICAgcCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHAgIT09IGopIHtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGNvbHVtbnM7IGsrKykge1xuICAgICAgICAgIHQgPSBsdS5nZXQocCwgayk7XG4gICAgICAgICAgbHUuc2V0KHAsIGssIGx1LmdldChqLCBrKSk7XG4gICAgICAgICAgbHUuc2V0KGosIGssIHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdiA9IHBpdm90VmVjdG9yW3BdO1xuICAgICAgICBwaXZvdFZlY3RvcltwXSA9IHBpdm90VmVjdG9yW2pdO1xuICAgICAgICBwaXZvdFZlY3RvcltqXSA9IHY7XG5cbiAgICAgICAgcGl2b3RTaWduID0gLXBpdm90U2lnbjtcbiAgICAgIH1cblxuICAgICAgaWYgKGogPCByb3dzICYmIGx1LmdldChqLCBqKSAhPT0gMCkge1xuICAgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIGx1LnNldChpLCBqLCBsdS5nZXQoaSwgaikgLyBsdS5nZXQoaiwgaikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5MVSA9IGx1O1xuICAgIHRoaXMucGl2b3RWZWN0b3IgPSBwaXZvdFZlY3RvcjtcbiAgICB0aGlzLnBpdm90U2lnbiA9IHBpdm90U2lnbjtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLkxVO1xuICAgIGxldCBjb2wgPSBkYXRhLmNvbHVtbnM7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2w7IGorKykge1xuICAgICAgaWYgKGRhdGEuZ2V0KGosIGopID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzb2x2ZSh2YWx1ZSkge1xuICAgIHZhbHVlID0gTWF0cml4LmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGxldCBsdSA9IHRoaXMuTFU7XG4gICAgbGV0IHJvd3MgPSBsdS5yb3dzO1xuXG4gICAgaWYgKHJvd3MgIT09IHZhbHVlLnJvd3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1Npbmd1bGFyKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTFUgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgfVxuXG4gICAgbGV0IGNvdW50ID0gdmFsdWUuY29sdW1ucztcbiAgICBsZXQgWCA9IHZhbHVlLnN1Yk1hdHJpeFJvdyh0aGlzLnBpdm90VmVjdG9yLCAwLCBjb3VudCAtIDEpO1xuICAgIGxldCBjb2x1bW5zID0gbHUuY29sdW1ucztcbiAgICBsZXQgaSwgaiwgaztcblxuICAgIGZvciAoayA9IDA7IGsgPCBjb2x1bW5zOyBrKyspIHtcbiAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgY29sdW1uczsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgWC5nZXQoaSwgaikgLSBYLmdldChrLCBqKSAqIGx1LmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrID0gY29sdW1ucyAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICBYLnNldChrLCBqLCBYLmdldChrLCBqKSAvIGx1LmdldChrLCBrKSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgazsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgWC5nZXQoaSwgaikgLSBYLmdldChrLCBqKSAqIGx1LmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgZGV0ZXJtaW5hbnQoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLkxVO1xuICAgIGlmICghZGF0YS5pc1NxdWFyZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZScpO1xuICAgIH1cbiAgICBsZXQgZGV0ZXJtaW5hbnQgPSB0aGlzLnBpdm90U2lnbjtcbiAgICBsZXQgY29sID0gZGF0YS5jb2x1bW5zO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sOyBqKyspIHtcbiAgICAgIGRldGVybWluYW50ICo9IGRhdGEuZ2V0KGosIGopO1xuICAgIH1cbiAgICByZXR1cm4gZGV0ZXJtaW5hbnQ7XG4gIH1cblxuICBnZXQgbG93ZXJUcmlhbmd1bGFyTWF0cml4KCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBsZXQgcm93cyA9IGRhdGEucm93cztcbiAgICBsZXQgY29sdW1ucyA9IGRhdGEuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmIChpID4gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIGRhdGEuZ2V0KGksIGopKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBsZXQgcm93cyA9IGRhdGEucm93cztcbiAgICBsZXQgY29sdW1ucyA9IGRhdGEuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmIChpIDw9IGopIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBkYXRhLmdldChpLCBqKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgcGl2b3RQZXJtdXRhdGlvblZlY3RvcigpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnBpdm90VmVjdG9yKTtcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGh5cG90ZW51c2UoYSwgYikge1xuICBsZXQgciA9IDA7XG4gIGlmIChNYXRoLmFicyhhKSA+IE1hdGguYWJzKGIpKSB7XG4gICAgciA9IGIgLyBhO1xuICAgIHJldHVybiBNYXRoLmFicyhhKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIGlmIChiICE9PSAwKSB7XG4gICAgciA9IGEgLyBiO1xuICAgIHJldHVybiBNYXRoLmFicyhiKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIHJldHVybiAwO1xufVxuIiwiaW1wb3J0IE1hdHJpeCBmcm9tICcuLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmltcG9ydCB7IGh5cG90ZW51c2UgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRckRlY29tcG9zaXRpb24ge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgIHZhbHVlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGxldCBxciA9IHZhbHVlLmNsb25lKCk7XG4gICAgbGV0IG0gPSB2YWx1ZS5yb3dzO1xuICAgIGxldCBuID0gdmFsdWUuY29sdW1ucztcbiAgICBsZXQgcmRpYWcgPSBuZXcgRmxvYXQ2NEFycmF5KG4pO1xuICAgIGxldCBpLCBqLCBrLCBzO1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgbGV0IG5ybSA9IDA7XG4gICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIG5ybSA9IGh5cG90ZW51c2UobnJtLCBxci5nZXQoaSwgaykpO1xuICAgICAgfVxuICAgICAgaWYgKG5ybSAhPT0gMCkge1xuICAgICAgICBpZiAocXIuZ2V0KGssIGspIDwgMCkge1xuICAgICAgICAgIG5ybSA9IC1ucm07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIHFyLnNldChpLCBrLCBxci5nZXQoaSwgaykgLyBucm0pO1xuICAgICAgICB9XG4gICAgICAgIHFyLnNldChrLCBrLCBxci5nZXQoaywgaykgKyAxKTtcbiAgICAgICAgZm9yIChqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICBzID0gMDtcbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBzICs9IHFyLmdldChpLCBrKSAqIHFyLmdldChpLCBqKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcyA9IC1zIC8gcXIuZ2V0KGssIGspO1xuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIHFyLnNldChpLCBqLCBxci5nZXQoaSwgaikgKyBzICogcXIuZ2V0KGksIGspKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJkaWFnW2tdID0gLW5ybTtcbiAgICB9XG5cbiAgICB0aGlzLlFSID0gcXI7XG4gICAgdGhpcy5SZGlhZyA9IHJkaWFnO1xuICB9XG5cbiAgc29sdmUodmFsdWUpIHtcbiAgICB2YWx1ZSA9IE1hdHJpeC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBsZXQgcXIgPSB0aGlzLlFSO1xuICAgIGxldCBtID0gcXIucm93cztcblxuICAgIGlmICh2YWx1ZS5yb3dzICE9PSBtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCByb3cgZGltZW5zaW9ucyBtdXN0IGFncmVlJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0Z1bGxSYW5rKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IGlzIHJhbmsgZGVmaWNpZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGNvdW50ID0gdmFsdWUuY29sdW1ucztcbiAgICBsZXQgWCA9IHZhbHVlLmNsb25lKCk7XG4gICAgbGV0IG4gPSBxci5jb2x1bW5zO1xuICAgIGxldCBpLCBqLCBrLCBzO1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBzICs9IHFyLmdldChpLCBrKSAqIFguZ2V0KGksIGopO1xuICAgICAgICB9XG4gICAgICAgIHMgPSAtcyAvIHFyLmdldChrLCBrKTtcbiAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopICsgcyAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICBYLnNldChrLCBqLCBYLmdldChrLCBqKSAvIHRoaXMuUmRpYWdba10pO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGs7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopIC0gWC5nZXQoaywgaikgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFguc3ViTWF0cml4KDAsIG4gLSAxLCAwLCBjb3VudCAtIDEpO1xuICB9XG5cbiAgaXNGdWxsUmFuaygpIHtcbiAgICBsZXQgY29sdW1ucyA9IHRoaXMuUVIuY29sdW1ucztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnM7IGkrKykge1xuICAgICAgaWYgKHRoaXMuUmRpYWdbaV0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCB1cHBlclRyaWFuZ3VsYXJNYXRyaXgoKSB7XG4gICAgbGV0IHFyID0gdGhpcy5RUjtcbiAgICBsZXQgbiA9IHFyLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KG4sIG4pO1xuICAgIGxldCBpLCBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGkgPCBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgcXIuZ2V0KGksIGopKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgdGhpcy5SZGlhZ1tpXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cblxuICBnZXQgb3J0aG9nb25hbE1hdHJpeCgpIHtcbiAgICBsZXQgcXIgPSB0aGlzLlFSO1xuICAgIGxldCByb3dzID0gcXIucm93cztcbiAgICBsZXQgY29sdW1ucyA9IHFyLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGxldCBpLCBqLCBrLCBzO1xuXG4gICAgZm9yIChrID0gY29sdW1ucyAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIFguc2V0KGksIGssIDApO1xuICAgICAgfVxuICAgICAgWC5zZXQoaywgaywgMSk7XG4gICAgICBmb3IgKGogPSBrOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmIChxci5nZXQoaywgaykgIT09IDApIHtcbiAgICAgICAgICBzID0gMDtcbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBzICs9IHFyLmdldChpLCBrKSAqIFguZ2V0KGksIGopO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHMgPSAtcyAvIHFyLmdldChrLCBrKTtcblxuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopICsgcyAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG59XG4iLCJpbXBvcnQgTWF0cml4IGZyb20gJy4uL21hdHJpeCc7XG5pbXBvcnQgV3JhcHBlck1hdHJpeDJEIGZyb20gJy4uL3dyYXAvV3JhcHBlck1hdHJpeDJEJztcblxuaW1wb3J0IHsgaHlwb3RlbnVzZSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3IodmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhbHVlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IG11c3QgYmUgbm9uLWVtcHR5Jyk7XG4gICAgfVxuXG4gICAgbGV0IG0gPSB2YWx1ZS5yb3dzO1xuICAgIGxldCBuID0gdmFsdWUuY29sdW1ucztcblxuICAgIGNvbnN0IHtcbiAgICAgIGNvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzID0gdHJ1ZSxcbiAgICAgIGNvbXB1dGVSaWdodFNpbmd1bGFyVmVjdG9ycyA9IHRydWUsXG4gICAgICBhdXRvVHJhbnNwb3NlID0gZmFsc2UsXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBsZXQgd2FudHUgPSBCb29sZWFuKGNvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzKTtcbiAgICBsZXQgd2FudHYgPSBCb29sZWFuKGNvbXB1dGVSaWdodFNpbmd1bGFyVmVjdG9ycyk7XG5cbiAgICBsZXQgc3dhcHBlZCA9IGZhbHNlO1xuICAgIGxldCBhO1xuICAgIGlmIChtIDwgbikge1xuICAgICAgaWYgKCFhdXRvVHJhbnNwb3NlKSB7XG4gICAgICAgIGEgPSB2YWx1ZS5jbG9uZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ0NvbXB1dGluZyBTVkQgb24gYSBtYXRyaXggd2l0aCBtb3JlIGNvbHVtbnMgdGhhbiByb3dzLiBDb25zaWRlciBlbmFibGluZyBhdXRvVHJhbnNwb3NlJyxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGEgPSB2YWx1ZS50cmFuc3Bvc2UoKTtcbiAgICAgICAgbSA9IGEucm93cztcbiAgICAgICAgbiA9IGEuY29sdW1ucztcbiAgICAgICAgc3dhcHBlZCA9IHRydWU7XG4gICAgICAgIGxldCBhdXggPSB3YW50dTtcbiAgICAgICAgd2FudHUgPSB3YW50djtcbiAgICAgICAgd2FudHYgPSBhdXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSB2YWx1ZS5jbG9uZSgpO1xuICAgIH1cblxuICAgIGxldCBudSA9IE1hdGgubWluKG0sIG4pO1xuICAgIGxldCBuaSA9IE1hdGgubWluKG0gKyAxLCBuKTtcbiAgICBsZXQgcyA9IG5ldyBGbG9hdDY0QXJyYXkobmkpO1xuICAgIGxldCBVID0gbmV3IE1hdHJpeChtLCBudSk7XG4gICAgbGV0IFYgPSBuZXcgTWF0cml4KG4sIG4pO1xuXG4gICAgbGV0IGUgPSBuZXcgRmxvYXQ2NEFycmF5KG4pO1xuICAgIGxldCB3b3JrID0gbmV3IEZsb2F0NjRBcnJheShtKTtcblxuICAgIGxldCBzaSA9IG5ldyBGbG9hdDY0QXJyYXkobmkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmk7IGkrKykgc2lbaV0gPSBpO1xuXG4gICAgbGV0IG5jdCA9IE1hdGgubWluKG0gLSAxLCBuKTtcbiAgICBsZXQgbnJ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obiAtIDIsIG0pKTtcbiAgICBsZXQgbXJjID0gTWF0aC5tYXgobmN0LCBucnQpO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBtcmM7IGsrKykge1xuICAgICAgaWYgKGsgPCBuY3QpIHtcbiAgICAgICAgc1trXSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgc1trXSA9IGh5cG90ZW51c2Uoc1trXSwgYS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzW2tdICE9PSAwKSB7XG4gICAgICAgICAgaWYgKGEuZ2V0KGssIGspIDwgMCkge1xuICAgICAgICAgICAgc1trXSA9IC1zW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgYS5zZXQoaSwgaywgYS5nZXQoaSwgaykgLyBzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYS5zZXQoaywgaywgYS5nZXQoaywgaykgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBzW2tdID0gLXNba107XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoayA8IG5jdCAmJiBzW2tdICE9PSAwKSB7XG4gICAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICB0ICs9IGEuZ2V0KGksIGspICogYS5nZXQoaSwgaik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHQgPSAtdCAvIGEuZ2V0KGssIGspO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBhLnNldChpLCBqLCBhLmdldChpLCBqKSArIHQgKiBhLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVbal0gPSBhLmdldChrLCBqKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHdhbnR1ICYmIGsgPCBuY3QpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBVLnNldChpLCBrLCBhLmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGsgPCBucnQpIHtcbiAgICAgICAgZVtrXSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgIGVba10gPSBoeXBvdGVudXNlKGVba10sIGVbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlW2tdICE9PSAwKSB7XG4gICAgICAgICAgaWYgKGVbayArIDFdIDwgMCkge1xuICAgICAgICAgICAgZVtrXSA9IDAgLSBlW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGVbaV0gLz0gZVtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZVtrICsgMV0gKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlW2tdID0gLWVba107XG4gICAgICAgIGlmIChrICsgMSA8IG0gJiYgZVtrXSAhPT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgd29ya1tpXSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgIHdvcmtbaV0gKz0gZVtqXSAqIGEuZ2V0KGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gLWVbal0gLyBlW2sgKyAxXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICBhLnNldChpLCBqLCBhLmdldChpLCBqKSArIHQgKiB3b3JrW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBWLnNldChpLCBrLCBlW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcCA9IE1hdGgubWluKG4sIG0gKyAxKTtcbiAgICBpZiAobmN0IDwgbikge1xuICAgICAgc1tuY3RdID0gYS5nZXQobmN0LCBuY3QpO1xuICAgIH1cbiAgICBpZiAobSA8IHApIHtcbiAgICAgIHNbcCAtIDFdID0gMDtcbiAgICB9XG4gICAgaWYgKG5ydCArIDEgPCBwKSB7XG4gICAgICBlW25ydF0gPSBhLmdldChucnQsIHAgLSAxKTtcbiAgICB9XG4gICAgZVtwIC0gMV0gPSAwO1xuXG4gICAgaWYgKHdhbnR1KSB7XG4gICAgICBmb3IgKGxldCBqID0gbmN0OyBqIDwgbnU7IGorKykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgIFUuc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICAgIFUuc2V0KGosIGosIDEpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgayA9IG5jdCAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAgIGlmIChzW2tdICE9PSAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbnU7IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgdCArPSBVLmdldChpLCBrKSAqIFUuZ2V0KGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdCA9IC10IC8gVS5nZXQoaywgayk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICBVLnNldChpLCBqLCBVLmdldChpLCBqKSArIHQgKiBVLmdldChpLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBVLnNldChpLCBrLCAtVS5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBVLnNldChrLCBrLCAxICsgVS5nZXQoaywgaykpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgayAtIDE7IGkrKykge1xuICAgICAgICAgICAgVS5zZXQoaSwgaywgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBVLnNldChpLCBrLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgVS5zZXQoaywgaywgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod2FudHYpIHtcbiAgICAgIGZvciAobGV0IGsgPSBuIC0gMTsgayA+PSAwOyBrLS0pIHtcbiAgICAgICAgaWYgKGsgPCBucnQgJiYgZVtrXSAhPT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgIHQgKz0gVi5nZXQoaSwgaykgKiBWLmdldChpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSAtdCAvIFYuZ2V0KGsgKyAxLCBrKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICBWLnNldChpLCBqLCBWLmdldChpLCBqKSArIHQgKiBWLmdldChpLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgVi5zZXQoaSwgaywgMCk7XG4gICAgICAgIH1cbiAgICAgICAgVi5zZXQoaywgaywgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHBwID0gcCAtIDE7XG4gICAgbGV0IGl0ZXIgPSAwO1xuICAgIGxldCBlcHMgPSBOdW1iZXIuRVBTSUxPTjtcbiAgICB3aGlsZSAocCA+IDApIHtcbiAgICAgIGxldCBrLCBrYXNlO1xuICAgICAgZm9yIChrID0gcCAtIDI7IGsgPj0gLTE7IGstLSkge1xuICAgICAgICBpZiAoayA9PT0gLTEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbHBoYSA9XG4gICAgICAgICAgTnVtYmVyLk1JTl9WQUxVRSArIGVwcyAqIE1hdGguYWJzKHNba10gKyBNYXRoLmFicyhzW2sgKyAxXSkpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZVtrXSkgPD0gYWxwaGEgfHwgTnVtYmVyLmlzTmFOKGVba10pKSB7XG4gICAgICAgICAgZVtrXSA9IDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChrID09PSBwIC0gMikge1xuICAgICAgICBrYXNlID0gNDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBrcztcbiAgICAgICAgZm9yIChrcyA9IHAgLSAxOyBrcyA+PSBrOyBrcy0tKSB7XG4gICAgICAgICAgaWYgKGtzID09PSBrKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHQgPVxuICAgICAgICAgICAgKGtzICE9PSBwID8gTWF0aC5hYnMoZVtrc10pIDogMCkgK1xuICAgICAgICAgICAgKGtzICE9PSBrICsgMSA/IE1hdGguYWJzKGVba3MgLSAxXSkgOiAwKTtcbiAgICAgICAgICBpZiAoTWF0aC5hYnMoc1trc10pIDw9IGVwcyAqIHQpIHtcbiAgICAgICAgICAgIHNba3NdID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa3MgPT09IGspIHtcbiAgICAgICAgICBrYXNlID0gMztcbiAgICAgICAgfSBlbHNlIGlmIChrcyA9PT0gcCAtIDEpIHtcbiAgICAgICAgICBrYXNlID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrYXNlID0gMjtcbiAgICAgICAgICBrID0ga3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaysrO1xuXG4gICAgICBzd2l0Y2ggKGthc2UpIHtcbiAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgbGV0IGYgPSBlW3AgLSAyXTtcbiAgICAgICAgICBlW3AgLSAyXSA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IHAgLSAyOyBqID49IGs7IGotLSkge1xuICAgICAgICAgICAgbGV0IHQgPSBoeXBvdGVudXNlKHNbal0sIGYpO1xuICAgICAgICAgICAgbGV0IGNzID0gc1tqXSAvIHQ7XG4gICAgICAgICAgICBsZXQgc24gPSBmIC8gdDtcbiAgICAgICAgICAgIHNbal0gPSB0O1xuICAgICAgICAgICAgaWYgKGogIT09IGspIHtcbiAgICAgICAgICAgICAgZiA9IC1zbiAqIGVbaiAtIDFdO1xuICAgICAgICAgICAgICBlW2ogLSAxXSA9IGNzICogZVtqIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gY3MgKiBWLmdldChpLCBqKSArIHNuICogVi5nZXQoaSwgcCAtIDEpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIHAgLSAxLCAtc24gKiBWLmdldChpLCBqKSArIGNzICogVi5nZXQoaSwgcCAtIDEpKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBqLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICBsZXQgZiA9IGVbayAtIDFdO1xuICAgICAgICAgIGVbayAtIDFdID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBqID0gazsgaiA8IHA7IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSBoeXBvdGVudXNlKHNbal0sIGYpO1xuICAgICAgICAgICAgbGV0IGNzID0gc1tqXSAvIHQ7XG4gICAgICAgICAgICBsZXQgc24gPSBmIC8gdDtcbiAgICAgICAgICAgIHNbal0gPSB0O1xuICAgICAgICAgICAgZiA9IC1zbiAqIGVbal07XG4gICAgICAgICAgICBlW2pdID0gY3MgKiBlW2pdO1xuICAgICAgICAgICAgaWYgKHdhbnR1KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVS5nZXQoaSwgaikgKyBzbiAqIFUuZ2V0KGksIGsgLSAxKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBrIC0gMSwgLXNuICogVS5nZXQoaSwgaikgKyBjcyAqIFUuZ2V0KGksIGsgLSAxKSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heChcbiAgICAgICAgICAgIE1hdGguYWJzKHNbcCAtIDFdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKHNbcCAtIDJdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKGVbcCAtIDJdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKHNba10pLFxuICAgICAgICAgICAgTWF0aC5hYnMoZVtrXSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBzcCA9IHNbcCAtIDFdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3Qgc3BtMSA9IHNbcCAtIDJdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3QgZXBtMSA9IGVbcCAtIDJdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3Qgc2sgPSBzW2tdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3QgZWsgPSBlW2tdIC8gc2NhbGU7XG4gICAgICAgICAgY29uc3QgYiA9ICgoc3BtMSArIHNwKSAqIChzcG0xIC0gc3ApICsgZXBtMSAqIGVwbTEpIC8gMjtcbiAgICAgICAgICBjb25zdCBjID0gc3AgKiBlcG0xICogKHNwICogZXBtMSk7XG4gICAgICAgICAgbGV0IHNoaWZ0ID0gMDtcbiAgICAgICAgICBpZiAoYiAhPT0gMCB8fCBjICE9PSAwKSB7XG4gICAgICAgICAgICBpZiAoYiA8IDApIHtcbiAgICAgICAgICAgICAgc2hpZnQgPSAwIC0gTWF0aC5zcXJ0KGIgKiBiICsgYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaGlmdCA9IE1hdGguc3FydChiICogYiArIGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hpZnQgPSBjIC8gKGIgKyBzaGlmdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBmID0gKHNrICsgc3ApICogKHNrIC0gc3ApICsgc2hpZnQ7XG4gICAgICAgICAgbGV0IGcgPSBzayAqIGVrO1xuICAgICAgICAgIGZvciAobGV0IGogPSBrOyBqIDwgcCAtIDE7IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSBoeXBvdGVudXNlKGYsIGcpO1xuICAgICAgICAgICAgaWYgKHQgPT09IDApIHQgPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgICAgICAgbGV0IGNzID0gZiAvIHQ7XG4gICAgICAgICAgICBsZXQgc24gPSBnIC8gdDtcbiAgICAgICAgICAgIGlmIChqICE9PSBrKSB7XG4gICAgICAgICAgICAgIGVbaiAtIDFdID0gdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGYgPSBjcyAqIHNbal0gKyBzbiAqIGVbal07XG4gICAgICAgICAgICBlW2pdID0gY3MgKiBlW2pdIC0gc24gKiBzW2pdO1xuICAgICAgICAgICAgZyA9IHNuICogc1tqICsgMV07XG4gICAgICAgICAgICBzW2ogKyAxXSA9IGNzICogc1tqICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gY3MgKiBWLmdldChpLCBqKSArIHNuICogVi5nZXQoaSwgaiArIDEpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGogKyAxLCAtc24gKiBWLmdldChpLCBqKSArIGNzICogVi5nZXQoaSwgaiArIDEpKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBqLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdCA9IGh5cG90ZW51c2UoZiwgZyk7XG4gICAgICAgICAgICBpZiAodCA9PT0gMCkgdCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgICAgICAgICBjcyA9IGYgLyB0O1xuICAgICAgICAgICAgc24gPSBnIC8gdDtcbiAgICAgICAgICAgIHNbal0gPSB0O1xuICAgICAgICAgICAgZiA9IGNzICogZVtqXSArIHNuICogc1tqICsgMV07XG4gICAgICAgICAgICBzW2ogKyAxXSA9IC1zbiAqIGVbal0gKyBjcyAqIHNbaiArIDFdO1xuICAgICAgICAgICAgZyA9IHNuICogZVtqICsgMV07XG4gICAgICAgICAgICBlW2ogKyAxXSA9IGNzICogZVtqICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHUgJiYgaiA8IG0gLSAxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVS5nZXQoaSwgaikgKyBzbiAqIFUuZ2V0KGksIGogKyAxKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBqICsgMSwgLXNuICogVS5nZXQoaSwgaikgKyBjcyAqIFUuZ2V0KGksIGogKyAxKSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZVtwIC0gMl0gPSBmO1xuICAgICAgICAgIGl0ZXIgPSBpdGVyICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICBpZiAoc1trXSA8PSAwKSB7XG4gICAgICAgICAgICBzW2tdID0gc1trXSA8IDAgPyAtc1trXSA6IDA7XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHA7IGkrKykge1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGssIC1WLmdldChpLCBrKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKGsgPCBwcCkge1xuICAgICAgICAgICAgaWYgKHNba10gPj0gc1trICsgMV0pIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdCA9IHNba107XG4gICAgICAgICAgICBzW2tdID0gc1trICsgMV07XG4gICAgICAgICAgICBzW2sgKyAxXSA9IHQ7XG4gICAgICAgICAgICBpZiAod2FudHYgJiYgayA8IG4gLSAxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IFYuZ2V0KGksIGsgKyAxKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBrICsgMSwgVi5nZXQoaSwgaykpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGssIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FudHUgJiYgayA8IG0gLSAxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IFUuZ2V0KGksIGsgKyAxKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBrICsgMSwgVS5nZXQoaSwgaykpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGssIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGl0ZXIgPSAwO1xuICAgICAgICAgIHAtLTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBubyBkZWZhdWx0XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN3YXBwZWQpIHtcbiAgICAgIGxldCB0bXAgPSBWO1xuICAgICAgViA9IFU7XG4gICAgICBVID0gdG1wO1xuICAgIH1cblxuICAgIHRoaXMubSA9IG07XG4gICAgdGhpcy5uID0gbjtcbiAgICB0aGlzLnMgPSBzO1xuICAgIHRoaXMuVSA9IFU7XG4gICAgdGhpcy5WID0gVjtcbiAgfVxuXG4gIHNvbHZlKHZhbHVlKSB7XG4gICAgbGV0IFkgPSB2YWx1ZTtcbiAgICBsZXQgZSA9IHRoaXMudGhyZXNob2xkO1xuICAgIGxldCBzY29scyA9IHRoaXMucy5sZW5ndGg7XG4gICAgbGV0IExzID0gTWF0cml4Lnplcm9zKHNjb2xzLCBzY29scyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjb2xzOyBpKyspIHtcbiAgICAgIGlmIChNYXRoLmFicyh0aGlzLnNbaV0pIDw9IGUpIHtcbiAgICAgICAgTHMuc2V0KGksIGksIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTHMuc2V0KGksIGksIDEgLyB0aGlzLnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBVID0gdGhpcy5VO1xuICAgIGxldCBWID0gdGhpcy5yaWdodFNpbmd1bGFyVmVjdG9ycztcblxuICAgIGxldCBWTCA9IFYubW11bChMcyk7XG4gICAgbGV0IHZyb3dzID0gVi5yb3dzO1xuICAgIGxldCB1cm93cyA9IFUucm93cztcbiAgICBsZXQgVkxVID0gTWF0cml4Lnplcm9zKHZyb3dzLCB1cm93cyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZyb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdXJvd3M7IGorKykge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBzY29sczsgaysrKSB7XG4gICAgICAgICAgc3VtICs9IFZMLmdldChpLCBrKSAqIFUuZ2V0KGosIGspO1xuICAgICAgICB9XG4gICAgICAgIFZMVS5zZXQoaSwgaiwgc3VtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gVkxVLm1tdWwoWSk7XG4gIH1cblxuICBzb2x2ZUZvckRpYWdvbmFsKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuc29sdmUoTWF0cml4LmRpYWcodmFsdWUpKTtcbiAgfVxuXG4gIGludmVyc2UoKSB7XG4gICAgbGV0IFYgPSB0aGlzLlY7XG4gICAgbGV0IGUgPSB0aGlzLnRocmVzaG9sZDtcbiAgICBsZXQgdnJvd3MgPSBWLnJvd3M7XG4gICAgbGV0IHZjb2xzID0gVi5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeCh2cm93cywgdGhpcy5zLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZyb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmNvbHM7IGorKykge1xuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2pdKSA+IGUpIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBWLmdldChpLCBqKSAvIHRoaXMuc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgVSA9IHRoaXMuVTtcblxuICAgIGxldCB1cm93cyA9IFUucm93cztcbiAgICBsZXQgdWNvbHMgPSBVLmNvbHVtbnM7XG4gICAgbGV0IFkgPSBuZXcgTWF0cml4KHZyb3dzLCB1cm93cyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZyb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdXJvd3M7IGorKykge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB1Y29sczsgaysrKSB7XG4gICAgICAgICAgc3VtICs9IFguZ2V0KGksIGspICogVS5nZXQoaiwgayk7XG4gICAgICAgIH1cbiAgICAgICAgWS5zZXQoaSwgaiwgc3VtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWTtcbiAgfVxuXG4gIGdldCBjb25kaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc1swXSAvIHRoaXMuc1tNYXRoLm1pbih0aGlzLm0sIHRoaXMubikgLSAxXTtcbiAgfVxuXG4gIGdldCBub3JtMigpIHtcbiAgICByZXR1cm4gdGhpcy5zWzBdO1xuICB9XG5cbiAgZ2V0IHJhbmsoKSB7XG4gICAgbGV0IHRvbCA9IE1hdGgubWF4KHRoaXMubSwgdGhpcy5uKSAqIHRoaXMuc1swXSAqIE51bWJlci5FUFNJTE9OO1xuICAgIGxldCByID0gMDtcbiAgICBsZXQgcyA9IHRoaXMucztcbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGlmIChzW2ldID4gdG9sKSB7XG4gICAgICAgIHIrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBnZXQgZGlhZ29uYWwoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zKTtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKSB7XG4gICAgcmV0dXJuIChOdW1iZXIuRVBTSUxPTiAvIDIpICogTWF0aC5tYXgodGhpcy5tLCB0aGlzLm4pICogdGhpcy5zWzBdO1xuICB9XG5cbiAgZ2V0IGxlZnRTaW5ndWxhclZlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuVTtcbiAgfVxuXG4gIGdldCByaWdodFNpbmd1bGFyVmVjdG9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5WO1xuICB9XG5cbiAgZ2V0IGRpYWdvbmFsTWF0cml4KCkge1xuICAgIHJldHVybiBNYXRyaXguZGlhZyh0aGlzLnMpO1xuICB9XG59XG4iLCJpbXBvcnQgTHVEZWNvbXBvc2l0aW9uIGZyb20gJy4vZGMvbHUnO1xuaW1wb3J0IFFyRGVjb21wb3NpdGlvbiBmcm9tICcuL2RjL3FyJztcbmltcG9ydCBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbiBmcm9tICcuL2RjL3N2ZCc7XG5pbXBvcnQgTWF0cml4IGZyb20gJy4vbWF0cml4JztcbmltcG9ydCBXcmFwcGVyTWF0cml4MkQgZnJvbSAnLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKG1hdHJpeCwgdXNlU1ZEID0gZmFsc2UpIHtcbiAgbWF0cml4ID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gIGlmICh1c2VTVkQpIHtcbiAgICByZXR1cm4gbmV3IFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uKG1hdHJpeCkuaW52ZXJzZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzb2x2ZShtYXRyaXgsIE1hdHJpeC5leWUobWF0cml4LnJvd3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29sdmUobGVmdEhhbmRTaWRlLCByaWdodEhhbmRTaWRlLCB1c2VTVkQgPSBmYWxzZSkge1xuICBsZWZ0SGFuZFNpZGUgPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgobGVmdEhhbmRTaWRlKTtcbiAgcmlnaHRIYW5kU2lkZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChyaWdodEhhbmRTaWRlKTtcbiAgaWYgKHVzZVNWRCkge1xuICAgIHJldHVybiBuZXcgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24obGVmdEhhbmRTaWRlKS5zb2x2ZShyaWdodEhhbmRTaWRlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGVmdEhhbmRTaWRlLmlzU3F1YXJlKClcbiAgICAgID8gbmV3IEx1RGVjb21wb3NpdGlvbihsZWZ0SGFuZFNpZGUpLnNvbHZlKHJpZ2h0SGFuZFNpZGUpXG4gICAgICA6IG5ldyBRckRlY29tcG9zaXRpb24obGVmdEhhbmRTaWRlKS5zb2x2ZShyaWdodEhhbmRTaWRlKTtcbiAgfVxufVxuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhbiBBcnJheSAoYXJyYXkgb3IgdHlwZWQgYXJyYXksIGV4Y2VwdCB0aG9zZSB0aGF0IGNvbnRhaW4gYmlnaW50IHZhbHVlcykuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gT2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGFycmF5IG9yIGEgdHlwZWQgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FueUFycmF5KHZhbHVlKSB7XG4gICAgY29uc3QgdGFnID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRhZy5lbmRzV2l0aCgnQXJyYXldJykgJiYgIXRhZy5pbmNsdWRlcygnQmlnJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gQXJyYXkgKGFycmF5IG9yIHR5cGVkIGFycmF5LCBleGNlcHQgdGhvc2UgdGhhdCBjb250YWluIGJpZ2ludCB2YWx1ZXMpLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIE9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIHR5cGVkIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IHRhZyA9IHRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIHJldHVybiB0YWcuZW5kc1dpdGgoJ0FycmF5XScpICYmICF0YWcuaW5jbHVkZXMoJ0JpZycpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuaW1wb3J0IG1heCBmcm9tICdtbC1hcnJheS1tYXgnO1xuaW1wb3J0IG1pbiBmcm9tICdtbC1hcnJheS1taW4nO1xuXG5mdW5jdGlvbiByZXNjYWxlKGlucHV0KSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICBpZiAoIWlzQW55QXJyYXkoaW5wdXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9IGVsc2UgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICB2YXIgb3V0cHV0O1xuXG4gIGlmIChvcHRpb25zLm91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpc0FueUFycmF5KG9wdGlvbnMub3V0cHV0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3V0cHV0IG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IGlmIHNwZWNpZmllZCcpO1xuICAgIH1cblxuICAgIG91dHB1dCA9IG9wdGlvbnMub3V0cHV0O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IG5ldyBBcnJheShpbnB1dC5sZW5ndGgpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRNaW4gPSBtaW4oaW5wdXQpO1xuICB2YXIgY3VycmVudE1heCA9IG1heChpbnB1dCk7XG5cbiAgaWYgKGN1cnJlbnRNaW4gPT09IGN1cnJlbnRNYXgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluaW11bSBhbmQgbWF4aW11bSBpbnB1dCB2YWx1ZXMgYXJlIGVxdWFsLiBDYW5ub3QgcmVzY2FsZSBhIGNvbnN0YW50IGFycmF5Jyk7XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWluID0gb3B0aW9ucy5taW4sXG4gICAgICBtaW5WYWx1ZSA9IF9vcHRpb25zJG1pbiA9PT0gdm9pZCAwID8gb3B0aW9ucy5hdXRvTWluTWF4ID8gY3VycmVudE1pbiA6IDAgOiBfb3B0aW9ucyRtaW4sXG4gICAgICBfb3B0aW9ucyRtYXggPSBvcHRpb25zLm1heCxcbiAgICAgIG1heFZhbHVlID0gX29wdGlvbnMkbWF4ID09PSB2b2lkIDAgPyBvcHRpb25zLmF1dG9NaW5NYXggPyBjdXJyZW50TWF4IDogMSA6IF9vcHRpb25zJG1heDtcblxuICBpZiAobWluVmFsdWUgPj0gbWF4VmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG9wdGlvbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXggb3B0aW9uJyk7XG4gIH1cblxuICB2YXIgZmFjdG9yID0gKG1heFZhbHVlIC0gbWluVmFsdWUpIC8gKGN1cnJlbnRNYXggLSBjdXJyZW50TWluKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0W2ldID0gKGlucHV0W2ldIC0gY3VycmVudE1pbikgKiBmYWN0b3IgKyBtaW5WYWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmV4cG9ydCB7IHJlc2NhbGUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmZ1bmN0aW9uIG1pbihpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJGZyb21JbmRleCA9IG9wdGlvbnMuZnJvbUluZGV4LFxuICAgICAgZnJvbUluZGV4ID0gX29wdGlvbnMkZnJvbUluZGV4ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkZnJvbUluZGV4LFxuICAgICAgX29wdGlvbnMkdG9JbmRleCA9IG9wdGlvbnMudG9JbmRleCxcbiAgICAgIHRvSW5kZXggPSBfb3B0aW9ucyR0b0luZGV4ID09PSB2b2lkIDAgPyBpbnB1dC5sZW5ndGggOiBfb3B0aW9ucyR0b0luZGV4O1xuXG4gIGlmIChmcm9tSW5kZXggPCAwIHx8IGZyb21JbmRleCA+PSBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoZnJvbUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgnKTtcbiAgfVxuXG4gIGlmICh0b0luZGV4IDw9IGZyb21JbmRleCB8fCB0b0luZGV4ID4gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHRvSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCcpO1xuICB9XG5cbiAgdmFyIG1pblZhbHVlID0gaW5wdXRbZnJvbUluZGV4XTtcblxuICBmb3IgKHZhciBpID0gZnJvbUluZGV4ICsgMTsgaSA8IHRvSW5kZXg7IGkrKykge1xuICAgIGlmIChpbnB1dFtpXSA8IG1pblZhbHVlKSBtaW5WYWx1ZSA9IGlucHV0W2ldO1xuICB9XG5cbiAgcmV0dXJuIG1pblZhbHVlO1xufVxuXG5leHBvcnQgeyBtaW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmZ1bmN0aW9uIG1heChpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJGZyb21JbmRleCA9IG9wdGlvbnMuZnJvbUluZGV4LFxuICAgICAgZnJvbUluZGV4ID0gX29wdGlvbnMkZnJvbUluZGV4ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkZnJvbUluZGV4LFxuICAgICAgX29wdGlvbnMkdG9JbmRleCA9IG9wdGlvbnMudG9JbmRleCxcbiAgICAgIHRvSW5kZXggPSBfb3B0aW9ucyR0b0luZGV4ID09PSB2b2lkIDAgPyBpbnB1dC5sZW5ndGggOiBfb3B0aW9ucyR0b0luZGV4O1xuXG4gIGlmIChmcm9tSW5kZXggPCAwIHx8IGZyb21JbmRleCA+PSBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoZnJvbUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgnKTtcbiAgfVxuXG4gIGlmICh0b0luZGV4IDw9IGZyb21JbmRleCB8fCB0b0luZGV4ID4gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHRvSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCcpO1xuICB9XG5cbiAgdmFyIG1heFZhbHVlID0gaW5wdXRbZnJvbUluZGV4XTtcblxuICBmb3IgKHZhciBpID0gZnJvbUluZGV4ICsgMTsgaSA8IHRvSW5kZXg7IGkrKykge1xuICAgIGlmIChpbnB1dFtpXSA+IG1heFZhbHVlKSBtYXhWYWx1ZSA9IGlucHV0W2ldO1xuICB9XG5cbiAgcmV0dXJuIG1heFZhbHVlO1xufVxuXG5leHBvcnQgeyBtYXggYXMgZGVmYXVsdCB9O1xuIiwiY29uc3QgaW5kZW50ID0gJyAnLnJlcGVhdCgyKTtcbmNvbnN0IGluZGVudERhdGEgPSAnICcucmVwZWF0KDQpO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdE1hdHJpeCgpIHtcbiAgcmV0dXJuIGluc3BlY3RNYXRyaXhXaXRoT3B0aW9ucyh0aGlzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RNYXRyaXhXaXRoT3B0aW9ucyhtYXRyaXgsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbWF4Um93cyA9IDE1LFxuICAgIG1heENvbHVtbnMgPSAxMCxcbiAgICBtYXhOdW1TaXplID0gOCxcbiAgICBwYWRNaW51cyA9ICdhdXRvJyxcbiAgfSA9IG9wdGlvbnM7XG4gIHJldHVybiBgJHttYXRyaXguY29uc3RydWN0b3IubmFtZX0ge1xuJHtpbmRlbnR9W1xuJHtpbmRlbnREYXRhfSR7aW5zcGVjdERhdGEobWF0cml4LCBtYXhSb3dzLCBtYXhDb2x1bW5zLCBtYXhOdW1TaXplLCBwYWRNaW51cyl9XG4ke2luZGVudH1dXG4ke2luZGVudH1yb3dzOiAke21hdHJpeC5yb3dzfVxuJHtpbmRlbnR9Y29sdW1uczogJHttYXRyaXguY29sdW1uc31cbn1gO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0RGF0YShtYXRyaXgsIG1heFJvd3MsIG1heENvbHVtbnMsIG1heE51bVNpemUsIHBhZE1pbnVzKSB7XG4gIGNvbnN0IHsgcm93cywgY29sdW1ucyB9ID0gbWF0cml4O1xuICBjb25zdCBtYXhJID0gTWF0aC5taW4ocm93cywgbWF4Um93cyk7XG4gIGNvbnN0IG1heEogPSBNYXRoLm1pbihjb2x1bW5zLCBtYXhDb2x1bW5zKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKHBhZE1pbnVzID09PSAnYXV0bycpIHtcbiAgICBwYWRNaW51cyA9IGZhbHNlO1xuICAgIGxvb3A6IGZvciAobGV0IGkgPSAwOyBpIDwgbWF4STsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1heEo7IGorKykge1xuICAgICAgICBpZiAobWF0cml4LmdldChpLCBqKSA8IDApIHtcbiAgICAgICAgICBwYWRNaW51cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4STsgaSsrKSB7XG4gICAgbGV0IGxpbmUgPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1heEo7IGorKykge1xuICAgICAgbGluZS5wdXNoKGZvcm1hdE51bWJlcihtYXRyaXguZ2V0KGksIGopLCBtYXhOdW1TaXplLCBwYWRNaW51cykpO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChgJHtsaW5lLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBpZiAobWF4SiAhPT0gY29sdW1ucykge1xuICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gKz0gYCAuLi4gJHtjb2x1bW5zIC0gbWF4Q29sdW1uc30gbW9yZSBjb2x1bW5zYDtcbiAgfVxuICBpZiAobWF4SSAhPT0gcm93cykge1xuICAgIHJlc3VsdC5wdXNoKGAuLi4gJHtyb3dzIC0gbWF4Um93c30gbW9yZSByb3dzYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5qb2luKGBcXG4ke2luZGVudERhdGF9YCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWJlcihudW0sIG1heE51bVNpemUsIHBhZE1pbnVzKSB7XG4gIHJldHVybiAoXG4gICAgbnVtID49IDAgJiYgcGFkTWludXNcbiAgICAgID8gYCAke2Zvcm1hdE51bWJlcjIobnVtLCBtYXhOdW1TaXplIC0gMSl9YFxuICAgICAgOiBmb3JtYXROdW1iZXIyKG51bSwgbWF4TnVtU2l6ZSlcbiAgKS5wYWRFbmQobWF4TnVtU2l6ZSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWJlcjIobnVtLCBsZW4pIHtcbiAgLy8gc21hbGwubGVuZ3RoIG51bWJlcnMgc2hvdWxkIGJlIGFzIGlzXG4gIGxldCBzdHIgPSBudW0udG9TdHJpbmcoKTtcbiAgaWYgKHN0ci5sZW5ndGggPD0gbGVuKSByZXR1cm4gc3RyO1xuXG4gIC8vICg3KScwLjAwMTIzJyBpcyBiZXR0ZXIgdGhlbiAoNyknMS4yM2UtMidcbiAgLy8gKDgpJzAuMDAwMTIzJyBpcyB3b3JzZSB0aGVuICg3KScxLjIzZS0zJyxcbiAgbGV0IGZpeCA9IG51bS50b0ZpeGVkKGxlbik7XG4gIGlmIChmaXgubGVuZ3RoID4gbGVuKSB7XG4gICAgZml4ID0gbnVtLnRvRml4ZWQoTWF0aC5tYXgoMCwgbGVuIC0gKGZpeC5sZW5ndGggLSBsZW4pKSk7XG4gIH1cbiAgaWYgKFxuICAgIGZpeC5sZW5ndGggPD0gbGVuICYmXG4gICAgIWZpeC5zdGFydHNXaXRoKCcwLjAwMCcpICYmXG4gICAgIWZpeC5zdGFydHNXaXRoKCctMC4wMDAnKVxuICApIHtcbiAgICByZXR1cm4gZml4O1xuICB9XG5cbiAgLy8gd2VsbCwgaWYgaXQncyBzdGlsbCB0b28gbG9uZyB0aGUgdXNlciBzaG91bGQndmUgdXNlZCBsb25nZXIgbnVtYmVyc1xuICBsZXQgZXhwID0gbnVtLnRvRXhwb25lbnRpYWwobGVuKTtcbiAgaWYgKGV4cC5sZW5ndGggPiBsZW4pIHtcbiAgICBleHAgPSBudW0udG9FeHBvbmVudGlhbChNYXRoLm1heCgwLCBsZW4gLSAoZXhwLmxlbmd0aCAtIGxlbikpKTtcbiAgfVxuICByZXR1cm4gZXhwLnNsaWNlKDApO1xufVxuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENoZWNrIHRoYXQgYSByb3cgaW5kZXggaXMgbm90IG91dCBvZiBib3VuZHNcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtib29sZWFufSBbb3V0ZXJdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1Jvd0luZGV4KG1hdHJpeCwgaW5kZXgsIG91dGVyKSB7XG4gIGxldCBtYXggPSBvdXRlciA/IG1hdHJpeC5yb3dzIDogbWF0cml4LnJvd3MgLSAxO1xuICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1JvdyBpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDaGVjayB0aGF0IGEgY29sdW1uIGluZGV4IGlzIG5vdCBvdXQgb2YgYm91bmRzXG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW291dGVyXVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5JbmRleChtYXRyaXgsIGluZGV4LCBvdXRlcikge1xuICBsZXQgbWF4ID0gb3V0ZXIgPyBtYXRyaXguY29sdW1ucyA6IG1hdHJpeC5jb2x1bW5zIC0gMTtcbiAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IG1heCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdmVjdG9yIGlzIGFuIGFycmF5IHdpdGggdGhlIHJpZ2h0IGxlbmd0aFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IHZlY3RvclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSb3dWZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgaWYgKHZlY3Rvci50bzFEQXJyYXkpIHtcbiAgICB2ZWN0b3IgPSB2ZWN0b3IudG8xREFycmF5KCk7XG4gIH1cbiAgaWYgKHZlY3Rvci5sZW5ndGggIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICAndmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMnLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdmVjdG9yIGlzIGFuIGFycmF5IHdpdGggdGhlIHJpZ2h0IGxlbmd0aFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IHZlY3RvclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5WZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgaWYgKHZlY3Rvci50bzFEQXJyYXkpIHtcbiAgICB2ZWN0b3IgPSB2ZWN0b3IudG8xREFycmF5KCk7XG4gIH1cbiAgaWYgKHZlY3Rvci5sZW5ndGggIT09IG1hdHJpeC5yb3dzKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiByb3dzJyk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUm93SW5kaWNlcyhtYXRyaXgsIHJvd0luZGljZXMpIHtcbiAgaWYgKCFpc0FueUFycmF5KHJvd0luZGljZXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncm93IGluZGljZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJvd0luZGljZXNbaV0gPCAwIHx8IHJvd0luZGljZXNbaV0gPj0gbWF0cml4LnJvd3MpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyb3cgaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbHVtbkluZGljZXMobWF0cml4LCBjb2x1bW5JbmRpY2VzKSB7XG4gIGlmICghaXNBbnlBcnJheShjb2x1bW5JbmRpY2VzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbHVtbiBpbmRpY2VzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjb2x1bW5JbmRpY2VzW2ldIDwgMCB8fCBjb2x1bW5JbmRpY2VzW2ldID49IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignY29sdW1uIGluZGljZXMgYXJlIG91dCBvZiByYW5nZScpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSYW5nZShtYXRyaXgsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZXhwZWN0ZWQgNCBhcmd1bWVudHMnKTtcbiAgfVxuICBjaGVja051bWJlcignc3RhcnRSb3cnLCBzdGFydFJvdyk7XG4gIGNoZWNrTnVtYmVyKCdlbmRSb3cnLCBlbmRSb3cpO1xuICBjaGVja051bWJlcignc3RhcnRDb2x1bW4nLCBzdGFydENvbHVtbik7XG4gIGNoZWNrTnVtYmVyKCdlbmRDb2x1bW4nLCBlbmRDb2x1bW4pO1xuICBpZiAoXG4gICAgc3RhcnRSb3cgPiBlbmRSb3cgfHxcbiAgICBzdGFydENvbHVtbiA+IGVuZENvbHVtbiB8fFxuICAgIHN0YXJ0Um93IDwgMCB8fFxuICAgIHN0YXJ0Um93ID49IG1hdHJpeC5yb3dzIHx8XG4gICAgZW5kUm93IDwgMCB8fFxuICAgIGVuZFJvdyA+PSBtYXRyaXgucm93cyB8fFxuICAgIHN0YXJ0Q29sdW1uIDwgMCB8fFxuICAgIHN0YXJ0Q29sdW1uID49IG1hdHJpeC5jb2x1bW5zIHx8XG4gICAgZW5kQ29sdW1uIDwgMCB8fFxuICAgIGVuZENvbHVtbiA+PSBtYXRyaXguY29sdW1uc1xuICApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignU3VibWF0cml4IGluZGljZXMgYXJlIG91dCBvZiByYW5nZScpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdBcnJheShsZW5ndGgsIHZhbHVlID0gMCkge1xuICBsZXQgYXJyYXkgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGFycmF5LnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gY2hlY2tOdW1iZXIobmFtZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IG11c3QgYmUgYSBudW1iZXJgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tOb25FbXB0eShtYXRyaXgpIHtcbiAgaWYgKG1hdHJpeC5pc0VtcHR5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IG1hdHJpeCBoYXMgbm8gZWxlbWVudHMgdG8gaW5kZXgnKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5pbXBvcnQgcmVzY2FsZSBmcm9tICdtbC1hcnJheS1yZXNjYWxlJztcblxuaW1wb3J0IHsgaW5zcGVjdE1hdHJpeCwgaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zIH0gZnJvbSAnLi9pbnNwZWN0JztcbmltcG9ydCB7IGluc3RhbGxNYXRoT3BlcmF0aW9ucyB9IGZyb20gJy4vbWF0aE9wZXJhdGlvbnMnO1xuaW1wb3J0IHtcbiAgc3VtQnlSb3csXG4gIHN1bUJ5Q29sdW1uLFxuICBzdW1BbGwsXG4gIHByb2R1Y3RCeVJvdyxcbiAgcHJvZHVjdEJ5Q29sdW1uLFxuICBwcm9kdWN0QWxsLFxuICB2YXJpYW5jZUJ5Um93LFxuICB2YXJpYW5jZUJ5Q29sdW1uLFxuICB2YXJpYW5jZUFsbCxcbiAgY2VudGVyQnlSb3csXG4gIGNlbnRlckJ5Q29sdW1uLFxuICBjZW50ZXJBbGwsXG4gIHNjYWxlQnlSb3csXG4gIHNjYWxlQnlDb2x1bW4sXG4gIHNjYWxlQWxsLFxuICBnZXRTY2FsZUJ5Um93LFxuICBnZXRTY2FsZUJ5Q29sdW1uLFxuICBnZXRTY2FsZUFsbCxcbn0gZnJvbSAnLi9zdGF0JztcbmltcG9ydCB7XG4gIGNoZWNrUm93VmVjdG9yLFxuICBjaGVja1Jvd0luZGV4LFxuICBjaGVja0NvbHVtbkluZGV4LFxuICBjaGVja0NvbHVtblZlY3RvcixcbiAgY2hlY2tSYW5nZSxcbiAgY2hlY2tOb25FbXB0eSxcbiAgY2hlY2tSb3dJbmRpY2VzLFxuICBjaGVja0NvbHVtbkluZGljZXMsXG59IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdE1hdHJpeCB7XG4gIHN0YXRpYyBmcm9tMURBcnJheShuZXdSb3dzLCBuZXdDb2x1bW5zLCBuZXdEYXRhKSB7XG4gICAgbGV0IGxlbmd0aCA9IG5ld1Jvd3MgKiBuZXdDb2x1bW5zO1xuICAgIGlmIChsZW5ndGggIT09IG5ld0RhdGEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZGF0YSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChuZXdSb3dzLCBuZXdDb2x1bW5zKTtcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBuZXdSb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgbmV3Q29sdW1uczsgY29sdW1uKyspIHtcbiAgICAgICAgbmV3TWF0cml4LnNldChyb3csIGNvbHVtbiwgbmV3RGF0YVtyb3cgKiBuZXdDb2x1bW5zICsgY29sdW1uXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcm93VmVjdG9yKG5ld0RhdGEpIHtcbiAgICBsZXQgdmVjdG9yID0gbmV3IE1hdHJpeCgxLCBuZXdEYXRhLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2ZWN0b3Iuc2V0KDAsIGksIG5ld0RhdGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdmVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGNvbHVtblZlY3RvcihuZXdEYXRhKSB7XG4gICAgbGV0IHZlY3RvciA9IG5ldyBNYXRyaXgobmV3RGF0YS5sZW5ndGgsIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3RGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmVjdG9yLnNldChpLCAwLCBuZXdEYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyB6ZXJvcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gIH1cblxuICBzdGF0aWMgb25lcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucykuZmlsbCgxKTtcbiAgfVxuXG4gIHN0YXRpYyByYW5kKHJvd3MsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyByYW5kb20gPSBNYXRoLnJhbmRvbSB9ID0gb3B0aW9ucztcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCByYW5kb20oKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcmFuZEludChyb3dzLCBjb2x1bW5zLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgbWluID0gMCwgbWF4ID0gMTAwMCwgcmFuZG9tID0gTWF0aC5yYW5kb20gfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1pbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBpbnRlcnZhbCA9IG1heCAtIG1pbjtcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbWluICsgTWF0aC5yb3VuZChyYW5kb20oKSAqIGludGVydmFsKTtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZXllKHJvd3MsIGNvbHVtbnMsIHZhbHVlKSB7XG4gICAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkgY29sdW1ucyA9IHJvd3M7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gMTtcbiAgICBsZXQgbWluID0gTWF0aC5taW4ocm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZGlhZyhkYXRhLCByb3dzLCBjb2x1bW5zKSB7XG4gICAgbGV0IGwgPSBkYXRhLmxlbmd0aDtcbiAgICBpZiAocm93cyA9PT0gdW5kZWZpbmVkKSByb3dzID0gbDtcbiAgICBpZiAoY29sdW1ucyA9PT0gdW5kZWZpbmVkKSBjb2x1bW5zID0gcm93cztcbiAgICBsZXQgbWluID0gTWF0aC5taW4obCwgcm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCBkYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIHN0YXRpYyBtaW4obWF0cml4MSwgbWF0cml4Mikge1xuICAgIG1hdHJpeDEgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDEpO1xuICAgIG1hdHJpeDIgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDIpO1xuICAgIGxldCByb3dzID0gbWF0cml4MS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbWF0cml4MS5jb2x1bW5zO1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWluKG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIG1heChtYXRyaXgxLCBtYXRyaXgyKSB7XG4gICAgbWF0cml4MSA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4MSk7XG4gICAgbWF0cml4MiA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4Mik7XG4gICAgbGV0IHJvd3MgPSBtYXRyaXgxLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBtYXRyaXgxLmNvbHVtbnM7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyB0aGlzKHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWF4KG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTWF0cml4KHZhbHVlKSB7XG4gICAgcmV0dXJuIEFic3RyYWN0TWF0cml4LmlzTWF0cml4KHZhbHVlKSA/IHZhbHVlIDogbmV3IE1hdHJpeCh2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgaXNNYXRyaXgodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5rbGFzcyA9PT0gJ01hdHJpeCc7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzICogdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgYXBwbHkoY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGksIGopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvMURBcnJheSgpIHtcbiAgICBsZXQgYXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIGFycmF5LnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB0bzJEQXJyYXkoKSB7XG4gICAgbGV0IGNvcHkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb3B5LnB1c2goW10pO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjb3B5W2ldLnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29weTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50bzJEQXJyYXkoKTtcbiAgfVxuXG4gIGlzUm93VmVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDE7XG4gIH1cblxuICBpc0NvbHVtblZlY3RvcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zID09PSAxO1xuICB9XG5cbiAgaXNWZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93cyA9PT0gMSB8fCB0aGlzLmNvbHVtbnMgPT09IDE7XG4gIH1cblxuICBpc1NxdWFyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzID09PSB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDAgfHwgdGhpcy5jb2x1bW5zID09PSAwO1xuICB9XG5cbiAgaXNTeW1tZXRyaWMoKSB7XG4gICAgaWYgKHRoaXMuaXNTcXVhcmUoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBpOyBqKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgIT09IHRoaXMuZ2V0KGosIGkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc0VjaGVsb25Gb3JtID0gdHJ1ZTtcbiAgICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICAgIHdoaWxlIChpIDwgdGhpcy5yb3dzICYmIGlzRWNoZWxvbkZvcm0pIHtcbiAgICAgIGogPSAwO1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKGogPCB0aGlzLmNvbHVtbnMgJiYgY2hlY2tlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID09PSAwKSB7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0KGksIGopID09PSAxICYmIGogPiBwcmV2aW91c0NvbHVtbikge1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgIHByZXZpb3VzQ29sdW1uID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0VjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzRWNoZWxvbkZvcm07XG4gIH1cblxuICBpc1JlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc1JlZHVjZWRFY2hlbG9uRm9ybSA9IHRydWU7XG4gICAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoaSA8IHRoaXMucm93cyAmJiBpc1JlZHVjZWRFY2hlbG9uRm9ybSkge1xuICAgICAgaiA9IDA7XG4gICAgICBjaGVja2VkID0gZmFsc2U7XG4gICAgICB3aGlsZSAoaiA8IHRoaXMuY29sdW1ucyAmJiBjaGVja2VkID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPT09IDApIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXQoaSwgaikgPT09IDEgJiYgaiA+IHByZXZpb3VzQ29sdW1uKSB7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgcHJldmlvdXNDb2x1bW4gPSBqO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGsgPSBqICsgMTsgayA8IHRoaXMucm93czsgaysrKSB7XG4gICAgICAgIGlmICh0aGlzLmdldChpLCBrKSAhPT0gMCkge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzUmVkdWNlZEVjaGVsb25Gb3JtO1xuICB9XG5cbiAgZWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgaCA9IDA7XG4gICAgbGV0IGsgPSAwO1xuICAgIHdoaWxlIChoIDwgcmVzdWx0LnJvd3MgJiYgayA8IHJlc3VsdC5jb2x1bW5zKSB7XG4gICAgICBsZXQgaU1heCA9IGg7XG4gICAgICBmb3IgKGxldCBpID0gaDsgaSA8IHJlc3VsdC5yb3dzOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdC5nZXQoaSwgaykgPiByZXN1bHQuZ2V0KGlNYXgsIGspKSB7XG4gICAgICAgICAgaU1heCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQuZ2V0KGlNYXgsIGspID09PSAwKSB7XG4gICAgICAgIGsrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5zd2FwUm93cyhoLCBpTWF4KTtcbiAgICAgICAgbGV0IHRtcCA9IHJlc3VsdC5nZXQoaCwgayk7XG4gICAgICAgIGZvciAobGV0IGogPSBrOyBqIDwgcmVzdWx0LmNvbHVtbnM7IGorKykge1xuICAgICAgICAgIHJlc3VsdC5zZXQoaCwgaiwgcmVzdWx0LmdldChoLCBqKSAvIHRtcCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGggKyAxOyBpIDwgcmVzdWx0LnJvd3M7IGkrKykge1xuICAgICAgICAgIGxldCBmYWN0b3IgPSByZXN1bHQuZ2V0KGksIGspIC8gcmVzdWx0LmdldChoLCBrKTtcbiAgICAgICAgICByZXN1bHQuc2V0KGksIGssIDApO1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IHJlc3VsdC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgcmVzdWx0LmdldChpLCBqKSAtIHJlc3VsdC5nZXQoaCwgaikgKiBmYWN0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoKys7XG4gICAgICAgIGsrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5lY2hlbG9uRm9ybSgpO1xuICAgIGxldCBtID0gcmVzdWx0LmNvbHVtbnM7XG4gICAgbGV0IG4gPSByZXN1bHQucm93cztcbiAgICBsZXQgaCA9IG4gLSAxO1xuICAgIHdoaWxlIChoID49IDApIHtcbiAgICAgIGlmIChyZXN1bHQubWF4Um93KGgpID09PSAwKSB7XG4gICAgICAgIGgtLTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwID0gMDtcbiAgICAgICAgbGV0IHBpdm90ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlIChwIDwgbiAmJiBwaXZvdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LmdldChoLCBwKSA9PT0gMSkge1xuICAgICAgICAgICAgcGl2b3QgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGZhY3RvciA9IHJlc3VsdC5nZXQoaSwgcCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IHA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0bXAgPSByZXN1bHQuZ2V0KGksIGopIC0gZmFjdG9yICogcmVzdWx0LmdldChoLCBqKTtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgdG1wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHJlcGVhdChvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcm93cyA9IDEsIGNvbHVtbnMgPSAxIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihyb3dzKSB8fCByb3dzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jvd3MgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbnMpIHx8IGNvbHVtbnMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgIH1cbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MgKiByb3dzLCB0aGlzLmNvbHVtbnMgKiBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldFN1Yk1hdHJpeCh0aGlzLCB0aGlzLnJvd3MgKiBpLCB0aGlzLmNvbHVtbnMgKiBqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIGZpbGwodmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBuZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsUygtMSk7XG4gIH1cblxuICBnZXRSb3coaW5kZXgpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgcm93ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgcm93LnB1c2godGhpcy5nZXQoaW5kZXgsIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIGdldFJvd1ZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXgucm93VmVjdG9yKHRoaXMuZ2V0Um93KGluZGV4KSk7XG4gIH1cblxuICBzZXRSb3coaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja1Jvd1ZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwUm93cyhyb3cxLCByb3cyKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cxKTtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdzIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQocm93MSwgaSk7XG4gICAgICB0aGlzLnNldChyb3cxLCBpLCB0aGlzLmdldChyb3cyLCBpKSk7XG4gICAgICB0aGlzLnNldChyb3cyLCBpLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRDb2x1bW4oaW5kZXgpIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgY29sdW1uID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29sdW1uLnB1c2godGhpcy5nZXQoaSwgaW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIGdldENvbHVtblZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXguY29sdW1uVmVjdG9yKHRoaXMuZ2V0Q29sdW1uKGluZGV4KSk7XG4gIH1cblxuICBzZXRDb2x1bW4oaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja0NvbHVtblZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwQ29sdW1ucyhjb2x1bW4xLCBjb2x1bW4yKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4xKTtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbjIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQoaSwgY29sdW1uMSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4xLCB0aGlzLmdldChpLCBjb2x1bW4yKSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4yLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3coaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIHRoaXMuZ2V0KGluZGV4LCBpKSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW4oaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIHRoaXMuZ2V0KGksIGluZGV4KSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtYXgoYnkpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgY29uc3QgbWF4ID0gbmV3IEFycmF5KHRoaXMucm93cykuZmlsbChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA+IG1heFtyb3ddKSB7XG4gICAgICAgICAgICAgIG1heFtyb3ddID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBjb25zdCBtYXggPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKS5maWxsKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pID4gbWF4W2NvbHVtbl0pIHtcbiAgICAgICAgICAgICAgbWF4W2NvbHVtbl0gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBsZXQgbWF4ID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pID4gbWF4KSB7XG4gICAgICAgICAgICAgIG1heCA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWF4SW5kZXgoKSB7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGxldCBpZHggPSBbMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPiB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICAgIGlkeFswXSA9IGk7XG4gICAgICAgICAgaWR4WzFdID0gajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluKGJ5KSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cblxuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgY29uc3QgbWluID0gbmV3IEFycmF5KHRoaXMucm93cykuZmlsbChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA8IG1pbltyb3ddKSB7XG4gICAgICAgICAgICAgIG1pbltyb3ddID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBjb25zdCBtaW4gPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKS5maWxsKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pIDwgbWluW2NvbHVtbl0pIHtcbiAgICAgICAgICAgICAgbWluW2NvbHVtbl0gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBsZXQgbWluID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXQocm93LCBjb2x1bW4pIDwgbWluKSB7XG4gICAgICAgICAgICAgIG1pbiA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWluSW5kZXgoKSB7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGxldCBpZHggPSBbMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPCB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICAgIGlkeFswXSA9IGk7XG4gICAgICAgICAgaWR4WzFdID0gajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWF4Um93KHJvdykge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQocm93LCAwKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWF4Um93SW5kZXgocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGxldCBpZHggPSBbcm93LCAwXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICAgIGlkeFsxXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBtaW5Sb3cocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICBtaW5Sb3dJbmRleChyb3cpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdyk7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KHJvdywgMCk7XG4gICAgbGV0IGlkeCA9IFtyb3csIDBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgICAgaWR4WzFdID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1heENvbHVtbihjb2x1bW4pIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbik7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIGNvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1heENvbHVtbkluZGV4KGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBsZXQgaWR4ID0gWzAsIGNvbHVtbl07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluQ29sdW1uKGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWluQ29sdW1uSW5kZXgoY29sdW1uKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4pO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCBjb2x1bW4pO1xuICAgIGxldCBpZHggPSBbMCwgY29sdW1uXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICAgIGlkeFswXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBkaWFnKCkge1xuICAgIGxldCBtaW4gPSBNYXRoLm1pbih0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgbGV0IGRpYWcgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pbjsgaSsrKSB7XG4gICAgICBkaWFnLnB1c2godGhpcy5nZXQoaSwgaSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGlhZztcbiAgfVxuXG4gIG5vcm0odHlwZSA9ICdmcm9iZW5pdXMnKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKHR5cGUgPT09ICdtYXgnKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXgoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdmcm9iZW5pdXMnKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB0aGlzLmdldChpLCBqKSAqIHRoaXMuZ2V0KGksIGopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB1bmtub3duIG5vcm0gdHlwZTogJHt0eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIGN1bXVsYXRpdmVTdW0oKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBzdW0gKz0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZG90KHZlY3RvcjIpIHtcbiAgICBpZiAoQWJzdHJhY3RNYXRyaXguaXNNYXRyaXgodmVjdG9yMikpIHZlY3RvcjIgPSB2ZWN0b3IyLnRvMURBcnJheSgpO1xuICAgIGxldCB2ZWN0b3IxID0gdGhpcy50bzFEQXJyYXkoKTtcbiAgICBpZiAodmVjdG9yMS5sZW5ndGggIT09IHZlY3RvcjIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmVjdG9ycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplJyk7XG4gICAgfVxuICAgIGxldCBkb3QgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVjdG9yMS5sZW5ndGg7IGkrKykge1xuICAgICAgZG90ICs9IHZlY3RvcjFbaV0gKiB2ZWN0b3IyW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZG90O1xuICB9XG5cbiAgbW11bChvdGhlcikge1xuICAgIG90aGVyID0gTWF0cml4LmNoZWNrTWF0cml4KG90aGVyKTtcblxuICAgIGxldCBtID0gdGhpcy5yb3dzO1xuICAgIGxldCBuID0gdGhpcy5jb2x1bW5zO1xuICAgIGxldCBwID0gb3RoZXIuY29sdW1ucztcblxuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KG0sIHApO1xuXG4gICAgbGV0IEJjb2xqID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHA7IGorKykge1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgQmNvbGpba10gPSBvdGhlci5nZXQoaywgaik7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIGxldCBzID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzICs9IHRoaXMuZ2V0KGksIGspICogQmNvbGpba107XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQuc2V0KGksIGosIHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4yeDIob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMiwgMik7XG4gICAgY29uc3QgYTExID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgY29uc3QgYjExID0gb3RoZXIuZ2V0KDAsIDApO1xuICAgIGNvbnN0IGExMiA9IHRoaXMuZ2V0KDAsIDEpO1xuICAgIGNvbnN0IGIxMiA9IG90aGVyLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMSwgMCk7XG4gICAgY29uc3QgYTIyID0gdGhpcy5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDEsIDEpO1xuXG4gICAgLy8gQ29tcHV0ZSBpbnRlcm1lZGlhdGUgdmFsdWVzLlxuICAgIGNvbnN0IG0xID0gKGExMSArIGEyMikgKiAoYjExICsgYjIyKTtcbiAgICBjb25zdCBtMiA9IChhMjEgKyBhMjIpICogYjExO1xuICAgIGNvbnN0IG0zID0gYTExICogKGIxMiAtIGIyMik7XG4gICAgY29uc3QgbTQgPSBhMjIgKiAoYjIxIC0gYjExKTtcbiAgICBjb25zdCBtNSA9IChhMTEgKyBhMTIpICogYjIyO1xuICAgIGNvbnN0IG02ID0gKGEyMSAtIGExMSkgKiAoYjExICsgYjEyKTtcbiAgICBjb25zdCBtNyA9IChhMTIgLSBhMjIpICogKGIyMSArIGIyMik7XG5cbiAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgIGNvbnN0IGMwMCA9IG0xICsgbTQgLSBtNSArIG03O1xuICAgIGNvbnN0IGMwMSA9IG0zICsgbTU7XG4gICAgY29uc3QgYzEwID0gbTIgKyBtNDtcbiAgICBjb25zdCBjMTEgPSBtMSAtIG0yICsgbTMgKyBtNjtcblxuICAgIHJlc3VsdC5zZXQoMCwgMCwgYzAwKTtcbiAgICByZXN1bHQuc2V0KDAsIDEsIGMwMSk7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4zeDMob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMywgMyk7XG5cbiAgICBjb25zdCBhMDAgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBjb25zdCBhMDEgPSB0aGlzLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMDIgPSB0aGlzLmdldCgwLCAyKTtcbiAgICBjb25zdCBhMTAgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBhMTEgPSB0aGlzLmdldCgxLCAxKTtcbiAgICBjb25zdCBhMTIgPSB0aGlzLmdldCgxLCAyKTtcbiAgICBjb25zdCBhMjAgPSB0aGlzLmdldCgyLCAwKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgyLCAxKTtcbiAgICBjb25zdCBhMjIgPSB0aGlzLmdldCgyLCAyKTtcblxuICAgIGNvbnN0IGIwMCA9IG90aGVyLmdldCgwLCAwKTtcbiAgICBjb25zdCBiMDEgPSBvdGhlci5nZXQoMCwgMSk7XG4gICAgY29uc3QgYjAyID0gb3RoZXIuZ2V0KDAsIDIpO1xuICAgIGNvbnN0IGIxMCA9IG90aGVyLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMTEgPSBvdGhlci5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjEyID0gb3RoZXIuZ2V0KDEsIDIpO1xuICAgIGNvbnN0IGIyMCA9IG90aGVyLmdldCgyLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMiwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDIsIDIpO1xuXG4gICAgY29uc3QgbTEgPSAoYTAwICsgYTAxICsgYTAyIC0gYTEwIC0gYTExIC0gYTIxIC0gYTIyKSAqIGIxMTtcbiAgICBjb25zdCBtMiA9IChhMDAgLSBhMTApICogKC1iMDEgKyBiMTEpO1xuICAgIGNvbnN0IG0zID0gYTExICogKC1iMDAgKyBiMDEgKyBiMTAgLSBiMTEgLSBiMTIgLSBiMjAgKyBiMjIpO1xuICAgIGNvbnN0IG00ID0gKC1hMDAgKyBhMTAgKyBhMTEpICogKGIwMCAtIGIwMSArIGIxMSk7XG4gICAgY29uc3QgbTUgPSAoYTEwICsgYTExKSAqICgtYjAwICsgYjAxKTtcbiAgICBjb25zdCBtNiA9IGEwMCAqIGIwMDtcbiAgICBjb25zdCBtNyA9ICgtYTAwICsgYTIwICsgYTIxKSAqIChiMDAgLSBiMDIgKyBiMTIpO1xuICAgIGNvbnN0IG04ID0gKC1hMDAgKyBhMjApICogKGIwMiAtIGIxMik7XG4gICAgY29uc3QgbTkgPSAoYTIwICsgYTIxKSAqICgtYjAwICsgYjAyKTtcbiAgICBjb25zdCBtMTAgPSAoYTAwICsgYTAxICsgYTAyIC0gYTExIC0gYTEyIC0gYTIwIC0gYTIxKSAqIGIxMjtcbiAgICBjb25zdCBtMTEgPSBhMjEgKiAoLWIwMCArIGIwMiArIGIxMCAtIGIxMSAtIGIxMiAtIGIyMCArIGIyMSk7XG4gICAgY29uc3QgbTEyID0gKC1hMDIgKyBhMjEgKyBhMjIpICogKGIxMSArIGIyMCAtIGIyMSk7XG4gICAgY29uc3QgbTEzID0gKGEwMiAtIGEyMikgKiAoYjExIC0gYjIxKTtcbiAgICBjb25zdCBtMTQgPSBhMDIgKiBiMjA7XG4gICAgY29uc3QgbTE1ID0gKGEyMSArIGEyMikgKiAoLWIyMCArIGIyMSk7XG4gICAgY29uc3QgbTE2ID0gKC1hMDIgKyBhMTEgKyBhMTIpICogKGIxMiArIGIyMCAtIGIyMik7XG4gICAgY29uc3QgbTE3ID0gKGEwMiAtIGExMikgKiAoYjEyIC0gYjIyKTtcbiAgICBjb25zdCBtMTggPSAoYTExICsgYTEyKSAqICgtYjIwICsgYjIyKTtcbiAgICBjb25zdCBtMTkgPSBhMDEgKiBiMTA7XG4gICAgY29uc3QgbTIwID0gYTEyICogYjIxO1xuICAgIGNvbnN0IG0yMSA9IGExMCAqIGIwMjtcbiAgICBjb25zdCBtMjIgPSBhMjAgKiBiMDE7XG4gICAgY29uc3QgbTIzID0gYTIyICogYjIyO1xuXG4gICAgY29uc3QgYzAwID0gbTYgKyBtMTQgKyBtMTk7XG4gICAgY29uc3QgYzAxID0gbTEgKyBtNCArIG01ICsgbTYgKyBtMTIgKyBtMTQgKyBtMTU7XG4gICAgY29uc3QgYzAyID0gbTYgKyBtNyArIG05ICsgbTEwICsgbTE0ICsgbTE2ICsgbTE4O1xuICAgIGNvbnN0IGMxMCA9IG0yICsgbTMgKyBtNCArIG02ICsgbTE0ICsgbTE2ICsgbTE3O1xuICAgIGNvbnN0IGMxMSA9IG0yICsgbTQgKyBtNSArIG02ICsgbTIwO1xuICAgIGNvbnN0IGMxMiA9IG0xNCArIG0xNiArIG0xNyArIG0xOCArIG0yMTtcbiAgICBjb25zdCBjMjAgPSBtNiArIG03ICsgbTggKyBtMTEgKyBtMTIgKyBtMTMgKyBtMTQ7XG4gICAgY29uc3QgYzIxID0gbTEyICsgbTEzICsgbTE0ICsgbTE1ICsgbTIyO1xuICAgIGNvbnN0IGMyMiA9IG02ICsgbTcgKyBtOCArIG05ICsgbTIzO1xuXG4gICAgcmVzdWx0LnNldCgwLCAwLCBjMDApO1xuICAgIHJlc3VsdC5zZXQoMCwgMSwgYzAxKTtcbiAgICByZXN1bHQuc2V0KDAsIDIsIGMwMik7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXN1bHQuc2V0KDEsIDIsIGMxMik7XG4gICAgcmVzdWx0LnNldCgyLCAwLCBjMjApO1xuICAgIHJlc3VsdC5zZXQoMiwgMSwgYzIxKTtcbiAgICByZXN1bHQuc2V0KDIsIDIsIGMyMik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG1tdWxTdHJhc3Nlbih5KSB7XG4gICAgeSA9IE1hdHJpeC5jaGVja01hdHJpeCh5KTtcbiAgICBsZXQgeCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgcjEgPSB4LnJvd3M7XG4gICAgbGV0IGMxID0geC5jb2x1bW5zO1xuICAgIGxldCByMiA9IHkucm93cztcbiAgICBsZXQgYzIgPSB5LmNvbHVtbnM7XG4gICAgaWYgKGMxICE9PSByMikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYE11bHRpcGx5aW5nICR7cjF9IHggJHtjMX0gYW5kICR7cjJ9IHggJHtjMn0gbWF0cml4OiBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBQdXQgYSBtYXRyaXggaW50byB0aGUgdG9wIGxlZnQgb2YgYSBtYXRyaXggb2YgemVyb3MuXG4gICAgLy8gYHJvd3NgIGFuZCBgY29sc2AgYXJlIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBvdXRwdXQgbWF0cml4LlxuICAgIGZ1bmN0aW9uIGVtYmVkKG1hdCwgcm93cywgY29scykge1xuICAgICAgbGV0IHIgPSBtYXQucm93cztcbiAgICAgIGxldCBjID0gbWF0LmNvbHVtbnM7XG4gICAgICBpZiAociA9PT0gcm93cyAmJiBjID09PSBjb2xzKSB7XG4gICAgICAgIHJldHVybiBtYXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVzdWx0YXQgPSBBYnN0cmFjdE1hdHJpeC56ZXJvcyhyb3dzLCBjb2xzKTtcbiAgICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgobWF0LCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdGF0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSBib3RoIG1hdHJpY2VzIGFyZSB0aGUgc2FtZSBzaXplLlxuICAgIC8vIFRoaXMgaXMgZXhjbHVzaXZlbHkgZm9yIHNpbXBsaWNpdHk6XG4gICAgLy8gdGhpcyBhbGdvcml0aG0gY2FuIGJlIGltcGxlbWVudGVkIHdpdGggbWF0cmljZXMgb2YgZGlmZmVyZW50IHNpemVzLlxuXG4gICAgbGV0IHIgPSBNYXRoLm1heChyMSwgcjIpO1xuICAgIGxldCBjID0gTWF0aC5tYXgoYzEsIGMyKTtcbiAgICB4ID0gZW1iZWQoeCwgciwgYyk7XG4gICAgeSA9IGVtYmVkKHksIHIsIGMpO1xuXG4gICAgLy8gT3VyIHJlY3Vyc2l2ZSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbi5cbiAgICBmdW5jdGlvbiBibG9ja011bHQoYSwgYiwgcm93cywgY29scykge1xuICAgICAgLy8gRm9yIHNtYWxsIG1hdHJpY2VzLCByZXNvcnQgdG8gbmFpdmUgbXVsdGlwbGljYXRpb24uXG4gICAgICBpZiAocm93cyA8PSA1MTIgfHwgY29scyA8PSA1MTIpIHtcbiAgICAgICAgcmV0dXJuIGEubW11bChiKTsgLy8gYSBpcyBlcXVpdmFsZW50IHRvIHRoaXNcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgZHluYW1pYyBwYWRkaW5nLlxuICAgICAgaWYgKHJvd3MgJSAyID09PSAxICYmIGNvbHMgJSAyID09PSAxKSB7XG4gICAgICAgIGEgPSBlbWJlZChhLCByb3dzICsgMSwgY29scyArIDEpO1xuICAgICAgICBiID0gZW1iZWQoYiwgcm93cyArIDEsIGNvbHMgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAocm93cyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgIH0gZWxzZSBpZiAoY29scyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGhhbGZSb3dzID0gcGFyc2VJbnQoYS5yb3dzIC8gMiwgMTApO1xuICAgICAgbGV0IGhhbGZDb2xzID0gcGFyc2VJbnQoYS5jb2x1bW5zIC8gMiwgMTApO1xuICAgICAgLy8gU3ViZGl2aWRlIGlucHV0IG1hdHJpY2VzLlxuICAgICAgbGV0IGExMSA9IGEuc3ViTWF0cml4KDAsIGhhbGZSb3dzIC0gMSwgMCwgaGFsZkNvbHMgLSAxKTtcbiAgICAgIGxldCBiMTEgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIDAsIGhhbGZDb2xzIC0gMSk7XG5cbiAgICAgIGxldCBhMTIgPSBhLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMTIgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBiLmNvbHVtbnMgLSAxKTtcblxuICAgICAgbGV0IGEyMSA9IGEuc3ViTWF0cml4KGhhbGZSb3dzLCBhLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuICAgICAgbGV0IGIyMSA9IGIuc3ViTWF0cml4KGhhbGZSb3dzLCBiLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuXG4gICAgICBsZXQgYTIyID0gYS5zdWJNYXRyaXgoaGFsZlJvd3MsIGEucm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMjIgPSBiLnN1Yk1hdHJpeChoYWxmUm93cywgYi5yb3dzIC0gMSwgaGFsZkNvbHMsIGIuY29sdW1ucyAtIDEpO1xuXG4gICAgICAvLyBDb21wdXRlIGludGVybWVkaWF0ZSB2YWx1ZXMuXG4gICAgICBsZXQgbTEgPSBibG9ja011bHQoXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChhMTEsIGEyMiksXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChiMTEsIGIyMiksXG4gICAgICAgIGhhbGZSb3dzLFxuICAgICAgICBoYWxmQ29scyxcbiAgICAgICk7XG4gICAgICBsZXQgbTIgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGEyMSwgYTIyKSwgYjExLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG0zID0gYmxvY2tNdWx0KGExMSwgQWJzdHJhY3RNYXRyaXguc3ViKGIxMiwgYjIyKSwgaGFsZlJvd3MsIGhhbGZDb2xzKTtcbiAgICAgIGxldCBtNCA9IGJsb2NrTXVsdChhMjIsIEFic3RyYWN0TWF0cml4LnN1YihiMjEsIGIxMSksIGhhbGZSb3dzLCBoYWxmQ29scyk7XG4gICAgICBsZXQgbTUgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGExMSwgYTEyKSwgYjIyLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG02ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTIxLCBhMTEpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjExLCBiMTIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuICAgICAgbGV0IG03ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTEyLCBhMjIpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjIxLCBiMjIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgICAgbGV0IGMxMSA9IEFic3RyYWN0TWF0cml4LmFkZChtMSwgbTQpO1xuICAgICAgYzExLnN1YihtNSk7XG4gICAgICBjMTEuYWRkKG03KTtcbiAgICAgIGxldCBjMTIgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTMsIG01KTtcbiAgICAgIGxldCBjMjEgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTIsIG00KTtcbiAgICAgIGxldCBjMjIgPSBBYnN0cmFjdE1hdHJpeC5zdWIobTEsIG0yKTtcbiAgICAgIGMyMi5hZGQobTMpO1xuICAgICAgYzIyLmFkZChtNik7XG5cbiAgICAgIC8vIENyb3Agb3V0cHV0IHRvIHRoZSBkZXNpcmVkIHNpemUgKHVuZG8gZHluYW1pYyBwYWRkaW5nKS5cbiAgICAgIGxldCByZXN1bHRhdCA9IEFic3RyYWN0TWF0cml4Lnplcm9zKDIgKiBjMTEucm93cywgMiAqIGMxMS5jb2x1bW5zKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMxMSwgMCwgMCk7XG4gICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChjMTIsIGMxMS5yb3dzLCAwKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMyMSwgMCwgYzExLmNvbHVtbnMpO1xuICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgoYzIyLCBjMTEucm93cywgYzExLmNvbHVtbnMpO1xuICAgICAgcmV0dXJuIHJlc3VsdGF0LnN1Yk1hdHJpeCgwLCByb3dzIC0gMSwgMCwgY29scyAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBibG9ja011bHQoeCwgeSwgciwgYyk7XG4gIH1cblxuICBzY2FsZVJvd3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdyhpKTtcbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByZXNjYWxlKHJvdywgeyBtaW4sIG1heCwgb3V0cHV0OiByb3cgfSk7XG4gICAgICB9XG4gICAgICBuZXdNYXRyaXguc2V0Um93KGksIHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzY2FsZUNvbHVtbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbihpKTtcbiAgICAgIGlmIChjb2x1bW4ubGVuZ3RoKSB7XG4gICAgICAgIHJlc2NhbGUoY29sdW1uLCB7XG4gICAgICAgICAgbWluOiBtaW4sXG4gICAgICAgICAgbWF4OiBtYXgsXG4gICAgICAgICAgb3V0cHV0OiBjb2x1bW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbmV3TWF0cml4LnNldENvbHVtbihpLCBjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgZmxpcFJvd3MoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5jZWlsKHRoaXMuY29sdW1ucyAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWlkZGxlOyBqKyspIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIGxldCBsYXN0ID0gdGhpcy5nZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGopO1xuICAgICAgICB0aGlzLnNldChpLCBqLCBsYXN0KTtcbiAgICAgICAgdGhpcy5zZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGosIGZpcnN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmbGlwQ29sdW1ucygpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmNlaWwodGhpcy5yb3dzIC8gMik7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaWRkbGU7IGkrKykge1xuICAgICAgICBsZXQgZmlyc3QgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgbGV0IGxhc3QgPSB0aGlzLmdldCh0aGlzLnJvd3MgLSAxIC0gaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIGxhc3QpO1xuICAgICAgICB0aGlzLnNldCh0aGlzLnJvd3MgLSAxIC0gaSwgaiwgZmlyc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGtyb25lY2tlclByb2R1Y3Qob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG5cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IHRoaXMuY29sdW1ucztcbiAgICBsZXQgcCA9IG90aGVyLnJvd3M7XG4gICAgbGV0IHEgPSBvdGhlci5jb2x1bW5zO1xuXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgobSAqIHAsIG4gKiBxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwOyBrKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IHE7IGwrKykge1xuICAgICAgICAgICAgcmVzdWx0LnNldChwICogaSArIGssIHEgKiBqICsgbCwgdGhpcy5nZXQoaSwgaikgKiBvdGhlci5nZXQoaywgbCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAga3JvbmVja2VyU3VtKG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuICAgIGlmICghdGhpcy5pc1NxdWFyZSgpIHx8ICFvdGhlci5pc1NxdWFyZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tyb25lY2tlciBTdW0gbmVlZHMgdHdvIFNxdWFyZSBNYXRyaWNlcycpO1xuICAgIH1cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IG90aGVyLnJvd3M7XG4gICAgbGV0IEF4SSA9IHRoaXMua3JvbmVja2VyUHJvZHVjdChNYXRyaXguZXllKG4sIG4pKTtcbiAgICBsZXQgSXhCID0gTWF0cml4LmV5ZShtLCBtKS5rcm9uZWNrZXJQcm9kdWN0KG90aGVyKTtcbiAgICByZXR1cm4gQXhJLmFkZChJeEIpO1xuICB9XG5cbiAgdHJhbnNwb3NlKCkge1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHRoaXMuY29sdW1ucywgdGhpcy5yb3dzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHJlc3VsdC5zZXQoaiwgaSwgdGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc29ydFJvd3MoY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZU51bWJlcnMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICB0aGlzLnNldFJvdyhpLCB0aGlzLmdldFJvdyhpKS5zb3J0KGNvbXBhcmVGdW5jdGlvbikpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNvcnRDb2x1bW5zKGNvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVOdW1iZXJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXRDb2x1bW4oaSwgdGhpcy5nZXRDb2x1bW4oaSkuc29ydChjb21wYXJlRnVuY3Rpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJNYXRyaXgoc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoXG4gICAgICBlbmRSb3cgLSBzdGFydFJvdyArIDEsXG4gICAgICBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEsXG4gICAgKTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBzdGFydENvbHVtbjsgaiA8PSBlbmRDb2x1bW47IGorKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KGkgLSBzdGFydFJvdywgaiAtIHN0YXJ0Q29sdW1uLCB0aGlzLmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdWJNYXRyaXhSb3coaW5kaWNlcywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGlmIChzdGFydENvbHVtbiA9PT0gdW5kZWZpbmVkKSBzdGFydENvbHVtbiA9IDA7XG4gICAgaWYgKGVuZENvbHVtbiA9PT0gdW5kZWZpbmVkKSBlbmRDb2x1bW4gPSB0aGlzLmNvbHVtbnMgLSAxO1xuICAgIGlmIChcbiAgICAgIHN0YXJ0Q29sdW1uID4gZW5kQ29sdW1uIHx8XG4gICAgICBzdGFydENvbHVtbiA8IDAgfHxcbiAgICAgIHN0YXJ0Q29sdW1uID49IHRoaXMuY29sdW1ucyB8fFxuICAgICAgZW5kQ29sdW1uIDwgMCB8fFxuICAgICAgZW5kQ29sdW1uID49IHRoaXMuY29sdW1uc1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0FyZ3VtZW50IG91dCBvZiByYW5nZScpO1xuICAgIH1cblxuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KGluZGljZXMubGVuZ3RoLCBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sdW1uOyBqIDw9IGVuZENvbHVtbjsgaisrKSB7XG4gICAgICAgIGlmIChpbmRpY2VzW2ldIDwgMCB8fCBpbmRpY2VzW2ldID49IHRoaXMucm93cykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSb3cgaW5kZXggb3V0IG9mIHJhbmdlOiAke2luZGljZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TWF0cml4LnNldChpLCBqIC0gc3RhcnRDb2x1bW4sIHRoaXMuZ2V0KGluZGljZXNbaV0sIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIHN1Yk1hdHJpeENvbHVtbihpbmRpY2VzLCBzdGFydFJvdywgZW5kUm93KSB7XG4gICAgaWYgKHN0YXJ0Um93ID09PSB1bmRlZmluZWQpIHN0YXJ0Um93ID0gMDtcbiAgICBpZiAoZW5kUm93ID09PSB1bmRlZmluZWQpIGVuZFJvdyA9IHRoaXMucm93cyAtIDE7XG4gICAgaWYgKFxuICAgICAgc3RhcnRSb3cgPiBlbmRSb3cgfHxcbiAgICAgIHN0YXJ0Um93IDwgMCB8fFxuICAgICAgc3RhcnRSb3cgPj0gdGhpcy5yb3dzIHx8XG4gICAgICBlbmRSb3cgPCAwIHx8XG4gICAgICBlbmRSb3cgPj0gdGhpcy5yb3dzXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXJndW1lbnQgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoZW5kUm93IC0gc3RhcnRSb3cgKyAxLCBpbmRpY2VzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gc3RhcnRSb3c7IGogPD0gZW5kUm93OyBqKyspIHtcbiAgICAgICAgaWYgKGluZGljZXNbaV0gPCAwIHx8IGluZGljZXNbaV0gPj0gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7aW5kaWNlc1tpXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdNYXRyaXguc2V0KGogLSBzdGFydFJvdywgaSwgdGhpcy5nZXQoaiwgaW5kaWNlc1tpXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc2V0U3ViTWF0cml4KG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKG1hdHJpeC5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBsZXQgZW5kUm93ID0gc3RhcnRSb3cgKyBtYXRyaXgucm93cyAtIDE7XG4gICAgbGV0IGVuZENvbHVtbiA9IHN0YXJ0Q29sdW1uICsgbWF0cml4LmNvbHVtbnMgLSAxO1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoc3RhcnRSb3cgKyBpLCBzdGFydENvbHVtbiArIGosIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNlbGVjdGlvbihyb3dJbmRpY2VzLCBjb2x1bW5JbmRpY2VzKSB7XG4gICAgY2hlY2tSb3dJbmRpY2VzKHRoaXMsIHJvd0luZGljZXMpO1xuICAgIGNoZWNrQ29sdW1uSW5kaWNlcyh0aGlzLCBjb2x1bW5JbmRpY2VzKTtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChyb3dJbmRpY2VzLmxlbmd0aCwgY29sdW1uSW5kaWNlcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93SW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHJvd0luZGV4ID0gcm93SW5kaWNlc1tpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uSW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5JbmRpY2VzW2pdO1xuICAgICAgICBuZXdNYXRyaXguc2V0KGksIGosIHRoaXMuZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgdHJhY2UoKSB7XG4gICAgbGV0IG1pbiA9IE1hdGgubWluKHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBsZXQgdHJhY2UgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcbiAgICAgIHRyYWNlICs9IHRoaXMuZ2V0KGksIGkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhY2U7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KHJvdywgY29sdW1uLCB0aGlzLmdldChyb3csIGNvbHVtbikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc3VtKGJ5KSB7XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Q29sdW1uKHRoaXMpO1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBzdW1BbGwodGhpcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHByb2R1Y3QoYnkpIHtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RCeUNvbHVtbih0aGlzKTtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEFsbCh0aGlzKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWVhbihieSkge1xuICAgIGNvbnN0IHN1bSA9IHRoaXMuc3VtKGJ5KTtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5jb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlICdjb2x1bW4nOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5yb3dzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHN1bSAvIHRoaXMuc2l6ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgdmFyaWFuY2UoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHVuYmlhc2VkID0gdHJ1ZSwgbWVhbiA9IHRoaXMubWVhbihieSkgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiB1bmJpYXNlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmJpYXNlZCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgIH1cbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGlmICghaXNBbnlBcnJheShtZWFuKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUJ5Um93KHRoaXMsIHVuYmlhc2VkLCBtZWFuKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKCFpc0FueUFycmF5KG1lYW4pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVhbiBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhbmNlQnlDb2x1bW4odGhpcywgdW5iaWFzZWQsIG1lYW4pO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgaWYgKHR5cGVvZiBtZWFuICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUFsbCh0aGlzLCB1bmJpYXNlZCwgbWVhbik7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YW5kYXJkRGV2aWF0aW9uKGJ5LCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBieSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBieTtcbiAgICAgIGJ5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB2YXJpYW5jZSA9IHRoaXMudmFyaWFuY2UoYnksIG9wdGlvbnMpO1xuICAgIGlmIChieSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YXJpYW5jZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXJpYW5jZVtpXSA9IE1hdGguc3FydCh2YXJpYW5jZVtpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFyaWFuY2U7XG4gICAgfVxuICB9XG5cbiAgY2VudGVyKGJ5LCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGJ5O1xuICAgICAgYnkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyBjZW50ZXIgPSB0aGlzLm1lYW4oYnkpIH0gPSBvcHRpb25zO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKCFpc0FueUFycmF5KGNlbnRlcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckJ5Um93KHRoaXMsIGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBpZiAoIWlzQW55QXJyYXkoY2VudGVyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NlbnRlciBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY2VudGVyQnlDb2x1bW4odGhpcywgY2VudGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBpZiAodHlwZW9mIGNlbnRlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckFsbCh0aGlzLCBjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgc2NhbGUoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBsZXQgc2NhbGUgPSBvcHRpb25zLnNjYWxlO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlSb3codGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQW55QXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlSb3codGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlDb2x1bW4odGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQW55QXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlDb2x1bW4odGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgdW5kZWZpbmVkOiB7XG4gICAgICAgIGlmIChzY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NhbGUgPSBnZXRTY2FsZUFsbCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2NhbGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQWxsKHRoaXMsIHNjYWxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICB9XG59XG5cbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5rbGFzcyA9ICdNYXRyaXgnO1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnKSB7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZVtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9XG4gICAgaW5zcGVjdE1hdHJpeDtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU51bWJlcnMoYSwgYikge1xuICByZXR1cm4gYSAtIGI7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlPZk51bWJlcnMoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LmV2ZXJ5KChlbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJztcbiAgfSk7XG59XG5cbi8vIFN5bm9ueW1zXG5BYnN0cmFjdE1hdHJpeC5yYW5kb20gPSBBYnN0cmFjdE1hdHJpeC5yYW5kO1xuQWJzdHJhY3RNYXRyaXgucmFuZG9tSW50ID0gQWJzdHJhY3RNYXRyaXgucmFuZEludDtcbkFic3RyYWN0TWF0cml4LmRpYWdvbmFsID0gQWJzdHJhY3RNYXRyaXguZGlhZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnb25hbCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnO1xuQWJzdHJhY3RNYXRyaXguaWRlbnRpdHkgPSBBYnN0cmFjdE1hdHJpeC5leWU7XG5BYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubmVnYXRlID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm5lZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50ZW5zb3JQcm9kdWN0ID1cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmtyb25lY2tlclByb2R1Y3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFic3RyYWN0TWF0cml4IHtcbiAgY29uc3RydWN0b3IoblJvd3MsIG5Db2x1bW5zKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoTWF0cml4LmlzTWF0cml4KG5Sb3dzKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuICAgICAgcmV0dXJuIG5Sb3dzLmNsb25lKCk7XG4gICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Sb3dzKSAmJiBuUm93cyA+PSAwKSB7XG4gICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgbWF0cml4XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Db2x1bW5zKSAmJiBuQ29sdW1ucyA+PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKG5ldyBGbG9hdDY0QXJyYXkobkNvbHVtbnMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbkNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQW55QXJyYXkoblJvd3MpKSB7XG4gICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgZnJvbSB0aGUgMkQgYXJyYXlcbiAgICAgIGNvbnN0IGFycmF5RGF0YSA9IG5Sb3dzO1xuICAgICAgblJvd3MgPSBhcnJheURhdGEubGVuZ3RoO1xuICAgICAgbkNvbHVtbnMgPSBuUm93cyA/IGFycmF5RGF0YVswXS5sZW5ndGggOiAwO1xuICAgICAgaWYgKHR5cGVvZiBuQ29sdW1ucyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnRGF0YSBtdXN0IGJlIGEgMkQgYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICBpZiAoYXJyYXlEYXRhW2ldLmxlbmd0aCAhPT0gbkNvbHVtbnMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5jb25zaXN0ZW50IGFycmF5IGRpbWVuc2lvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXJyYXlPZk51bWJlcnMoYXJyYXlEYXRhW2ldKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGRhdGEgY29udGFpbnMgbm9uLW51bWVyaWMgdmFsdWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnB1c2goRmxvYXQ2NEFycmF5LmZyb20oYXJyYXlEYXRhW2ldKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9yIGFuIGFycmF5JyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm93cyA9IG5Sb3dzO1xuICAgIHRoaXMuY29sdW1ucyA9IG5Db2x1bW5zO1xuICB9XG5cbiAgc2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XTtcbiAgfVxuXG4gIHJlbW92ZVJvdyhpbmRleCkge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpO1xuICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMucm93cyAtPSAxO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkUm93KGluZGV4LCBhcnJheSkge1xuICAgIGlmIChhcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcnJheSA9IGluZGV4O1xuICAgICAgaW5kZXggPSB0aGlzLnJvd3M7XG4gICAgfVxuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgsIHRydWUpO1xuICAgIGFycmF5ID0gRmxvYXQ2NEFycmF5LmZyb20oY2hlY2tSb3dWZWN0b3IodGhpcywgYXJyYXkpKTtcbiAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4LCAwLCBhcnJheSk7XG4gICAgdGhpcy5yb3dzICs9IDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW1vdmVDb2x1bW4oaW5kZXgpIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBuZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucyAtIDEpO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRleDsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSBpbmRleCArIDE7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBuZXdSb3dbaiAtIDFdID0gdGhpcy5kYXRhW2ldW2pdO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhW2ldID0gbmV3Um93O1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnMgLT0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZENvbHVtbihpbmRleCwgYXJyYXkpIHtcbiAgICBpZiAodHlwZW9mIGFycmF5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgYXJyYXkgPSBpbmRleDtcbiAgICAgIGluZGV4ID0gdGhpcy5jb2x1bW5zO1xuICAgIH1cbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4LCB0cnVlKTtcbiAgICBhcnJheSA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIGFycmF5KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBuZXcgRmxvYXQ2NEFycmF5KHRoaXMuY29sdW1ucyArIDEpO1xuICAgICAgbGV0IGogPSAwO1xuICAgICAgZm9yICg7IGogPCBpbmRleDsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIG5ld1Jvd1tqKytdID0gYXJyYXlbaV07XG4gICAgICBmb3IgKDsgaiA8IHRoaXMuY29sdW1ucyArIDE7IGorKykge1xuICAgICAgICBuZXdSb3dbal0gPSB0aGlzLmRhdGFbaV1baiAtIDFdO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhW2ldID0gbmV3Um93O1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnMgKz0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5pbnN0YWxsTWF0aE9wZXJhdGlvbnMoQWJzdHJhY3RNYXRyaXgsIE1hdHJpeCk7XG4iLCJpbXBvcnQgeyBuZXdBcnJheSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1CeVJvdyhtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5yb3dzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1baV0gKz0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bUJ5Q29sdW1uKG1hdHJpeCkge1xuICBsZXQgc3VtID0gbmV3QXJyYXkobWF0cml4LmNvbHVtbnMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyArK2opIHtcbiAgICAgIHN1bVtqXSArPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3VtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtQWxsKG1hdHJpeCkge1xuICBsZXQgdiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgdiArPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RCeVJvdyhtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5yb3dzLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1baV0gKj0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RCeUNvbHVtbihtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5jb2x1bW5zLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1bal0gKj0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RBbGwobWF0cml4KSB7XG4gIGxldCB2ID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICB2ICo9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFuY2VCeVJvdyhtYXRyaXgsIHVuYmlhc2VkLCBtZWFuKSB7XG4gIGNvbnN0IHJvd3MgPSBtYXRyaXgucm93cztcbiAgY29uc3QgY29scyA9IG1hdHJpeC5jb2x1bW5zO1xuICBjb25zdCB2YXJpYW5jZSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgbGV0IHN1bTEgPSAwO1xuICAgIGxldCBzdW0yID0gMDtcbiAgICBsZXQgeCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgIHggPSBtYXRyaXguZ2V0KGksIGopIC0gbWVhbltpXTtcbiAgICAgIHN1bTEgKz0geDtcbiAgICAgIHN1bTIgKz0geCAqIHg7XG4gICAgfVxuICAgIGlmICh1bmJpYXNlZCkge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyBjb2xzKSAvIChjb2xzIC0gMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXJpYW5jZS5wdXNoKChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIGNvbHMpIC8gY29scyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YXJpYW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhbmNlQnlDb2x1bW4obWF0cml4LCB1bmJpYXNlZCwgbWVhbikge1xuICBjb25zdCByb3dzID0gbWF0cml4LnJvd3M7XG4gIGNvbnN0IGNvbHMgPSBtYXRyaXguY29sdW1ucztcbiAgY29uc3QgdmFyaWFuY2UgPSBbXTtcblxuICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgIGxldCBzdW0xID0gMDtcbiAgICBsZXQgc3VtMiA9IDA7XG4gICAgbGV0IHggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICB4ID0gbWF0cml4LmdldChpLCBqKSAtIG1lYW5bal07XG4gICAgICBzdW0xICs9IHg7XG4gICAgICBzdW0yICs9IHggKiB4O1xuICAgIH1cbiAgICBpZiAodW5iaWFzZWQpIHtcbiAgICAgIHZhcmlhbmNlLnB1c2goKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gcm93cykgLyAocm93cyAtIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyByb3dzKSAvIHJvd3MpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFyaWFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYW5jZUFsbChtYXRyaXgsIHVuYmlhc2VkLCBtZWFuKSB7XG4gIGNvbnN0IHJvd3MgPSBtYXRyaXgucm93cztcbiAgY29uc3QgY29scyA9IG1hdHJpeC5jb2x1bW5zO1xuICBjb25zdCBzaXplID0gcm93cyAqIGNvbHM7XG5cbiAgbGV0IHN1bTEgPSAwO1xuICBsZXQgc3VtMiA9IDA7XG4gIGxldCB4ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgeCA9IG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuO1xuICAgICAgc3VtMSArPSB4O1xuICAgICAgc3VtMiArPSB4ICogeDtcbiAgICB9XG4gIH1cbiAgaWYgKHVuYmlhc2VkKSB7XG4gICAgcmV0dXJuIChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIHNpemUpIC8gKHNpemUgLSAxKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gc2l6ZSkgLyBzaXplO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZW50ZXJCeVJvdyhtYXRyaXgsIG1lYW4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbnRlckJ5Q29sdW1uKG1hdHJpeCwgbWVhbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAtIG1lYW5bal0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VudGVyQWxsKG1hdHJpeCwgbWVhbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAtIG1lYW4pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVCeVJvdyhtYXRyaXgpIHtcbiAgY29uc3Qgc2NhbGUgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyAobWF0cml4LmNvbHVtbnMgLSAxKTtcbiAgICB9XG4gICAgc2NhbGUucHVzaChNYXRoLnNxcnQoc3VtKSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVCeVJvdyhtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGVbaV0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVCeUNvbHVtbihtYXRyaXgpIHtcbiAgY29uc3Qgc2NhbGUgPSBbXTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyAobWF0cml4LnJvd3MgLSAxKTtcbiAgICB9XG4gICAgc2NhbGUucHVzaChNYXRoLnNxcnQoc3VtKSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVCeUNvbHVtbihtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGVbal0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVBbGwobWF0cml4KSB7XG4gIGNvbnN0IGRpdmlkZXIgPSBtYXRyaXguc2l6ZSAtIDE7XG4gIGxldCBzdW0gPSAwO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICAgIHN1bSArPSBNYXRoLnBvdyhtYXRyaXguZ2V0KGksIGopLCAyKSAvIGRpdmlkZXI7XG4gICAgfVxuICB9XG4gIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQWxsKG1hdHJpeCwgc2NhbGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLyBzY2FsZSk7XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1hdGhPcGVyYXRpb25zKEFic3RyYWN0TWF0cml4LCBNYXRyaXgpIHtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5hZGRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5hZGRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWRkUyA9IGZ1bmN0aW9uIGFkZFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWRkTSA9IGZ1bmN0aW9uIGFkZE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hZGQgPSBmdW5jdGlvbiBhZGQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFkZCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uIHN1Yih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5zdWJTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5zdWJNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViUyA9IGZ1bmN0aW9uIHN1YlModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViTSA9IGZ1bmN0aW9uIHN1Yk0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zdWIgPSBmdW5jdGlvbiBzdWIobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnN1Yih2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWI7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdFMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViUztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YnRyYWN0TSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJNO1xuICBBYnN0cmFjdE1hdHJpeC5zdWJ0cmFjdCA9IEFic3RyYWN0TWF0cml4LnN1YjtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLm11bFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm11bE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxTID0gZnVuY3Rpb24gbXVsUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgKiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxNID0gZnVuY3Rpb24gbXVsTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm11bCA9IGZ1bmN0aW9uIG11bChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubXVsKHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5ID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bDtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5UyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsdGlwbHlNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bE07XG4gIEFic3RyYWN0TWF0cml4Lm11bHRpcGx5ID0gQWJzdHJhY3RNYXRyaXgubXVsO1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXYgPSBmdW5jdGlvbiBkaXYodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuZGl2Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuZGl2TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdlMgPSBmdW5jdGlvbiBkaXZTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAvIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdk0gPSBmdW5jdGlvbiBkaXZNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLyBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZGl2ID0gZnVuY3Rpb24gZGl2KG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5kaXYodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2aWRlID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdjtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZVMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2UztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZU0gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2TTtcbiAgQWJzdHJhY3RNYXRyaXguZGl2aWRlID0gQWJzdHJhY3RNYXRyaXguZGl2O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMubW9kUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMubW9kTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZFMgPSBmdW5jdGlvbiBtb2RTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAlIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZE0gPSBmdW5jdGlvbiBtb2RNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJSBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubW9kID0gZnVuY3Rpb24gbW9kKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5tb2QodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1cyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2Q7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2R1bHVzUyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2RTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1c00gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kTTtcbiAgQWJzdHJhY3RNYXRyaXgubW9kdWx1cyA9IEFic3RyYWN0TWF0cml4Lm1vZDtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gYW5kKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLmFuZFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmFuZE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hbmRTID0gZnVuY3Rpb24gYW5kUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hbmRNID0gZnVuY3Rpb24gYW5kTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICYgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFuZCA9IGZ1bmN0aW9uIGFuZChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYW5kKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiBvcih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5vclModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm9yTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm9yUyA9IGZ1bmN0aW9uIG9yUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgfCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5vck0gPSBmdW5jdGlvbiBvck0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSB8IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5vciA9IGZ1bmN0aW9uIG9yKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5vcih2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvcih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy54b3JTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy54b3JNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUueG9yUyA9IGZ1bmN0aW9uIHhvclModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIF4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUueG9yTSA9IGZ1bmN0aW9uIHhvck0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSBeIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC54b3IgPSBmdW5jdGlvbiB4b3IobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4Lnhvcih2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdCA9IGZ1bmN0aW9uIGxlZnRTaGlmdCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5sZWZ0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5sZWZ0U2hpZnRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubGVmdFNoaWZ0UyA9IGZ1bmN0aW9uIGxlZnRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIDw8IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdE0gPSBmdW5jdGlvbiBsZWZ0U2hpZnRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPDwgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxlZnRTaGlmdCA9IGZ1bmN0aW9uIGxlZnRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubGVmdFNoaWZ0KHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCA9IGZ1bmN0aW9uIHNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFMgPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0Uyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0gPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0ID0gZnVuY3Rpb24gc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnQgPSBmdW5jdGlvbiByaWdodFNoaWZ0KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnJpZ2h0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5yaWdodFNoaWZ0TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRTID0gZnVuY3Rpb24gcmlnaHRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+PiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0TSA9IGZ1bmN0aW9uIHJpZ2h0U2hpZnRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4+IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5yaWdodFNoaWZ0ID0gZnVuY3Rpb24gcmlnaHRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucmlnaHRTaGlmdCh2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnQgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdDtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnplcm9GaWxsUmlnaHRTaGlmdFMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdFM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRNO1xuICBBYnN0cmFjdE1hdHJpeC56ZXJvRmlsbFJpZ2h0U2hpZnQgPSBBYnN0cmFjdE1hdHJpeC5yaWdodFNoaWZ0O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5ub3QgPSBmdW5jdGlvbiBub3QoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB+KHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm5vdCA9IGZ1bmN0aW9uIG5vdChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5ub3QoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWJzID0gZnVuY3Rpb24gYWJzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hYnModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYWJzID0gZnVuY3Rpb24gYWJzKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFicygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hY29zID0gZnVuY3Rpb24gYWNvcygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYWNvcyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hY29zID0gZnVuY3Rpb24gYWNvcyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hY29zKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFjb3NoID0gZnVuY3Rpb24gYWNvc2goKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFjb3NoKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFjb3NoID0gZnVuY3Rpb24gYWNvc2gobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYWNvc2goKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXNpbiA9IGZ1bmN0aW9uIGFzaW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFzaW4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXNpbiA9IGZ1bmN0aW9uIGFzaW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYXNpbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hc2luaCA9IGZ1bmN0aW9uIGFzaW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hc2luaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hc2luaCA9IGZ1bmN0aW9uIGFzaW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFzaW5oKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmF0YW4gPSBmdW5jdGlvbiBhdGFuKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hdGFuKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmF0YW4gPSBmdW5jdGlvbiBhdGFuKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmF0YW4oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXRhbmggPSBmdW5jdGlvbiBhdGFuaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYXRhbmgodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXRhbmggPSBmdW5jdGlvbiBhdGFuaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hdGFuaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jYnJ0ID0gZnVuY3Rpb24gY2JydCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2JydCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jYnJ0ID0gZnVuY3Rpb24gY2JydChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jYnJ0KCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNlaWwgPSBmdW5jdGlvbiBjZWlsKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jZWlsKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNlaWwgPSBmdW5jdGlvbiBjZWlsKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNlaWwoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY2x6MzIgPSBmdW5jdGlvbiBjbHozMigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2x6MzIodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY2x6MzIgPSBmdW5jdGlvbiBjbHozMihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jbHozMigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jb3MgPSBmdW5jdGlvbiBjb3MoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNvcyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jb3MgPSBmdW5jdGlvbiBjb3MobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY29zKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNvc2ggPSBmdW5jdGlvbiBjb3NoKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jb3NoKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNvc2ggPSBmdW5jdGlvbiBjb3NoKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNvc2goKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZXhwID0gZnVuY3Rpb24gZXhwKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5leHAodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZXhwID0gZnVuY3Rpb24gZXhwKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmV4cCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5leHBtMSA9IGZ1bmN0aW9uIGV4cG0xKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5leHBtMSh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5leHBtMSA9IGZ1bmN0aW9uIGV4cG0xKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmV4cG0xKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmZsb29yID0gZnVuY3Rpb24gZmxvb3IoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmZsb29yKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmZsb29yID0gZnVuY3Rpb24gZmxvb3IobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguZmxvb3IoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZnJvdW5kID0gZnVuY3Rpb24gZnJvdW5kKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5mcm91bmQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZnJvdW5kID0gZnVuY3Rpb24gZnJvdW5kKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmZyb3VuZCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cgPSBmdW5jdGlvbiBsb2coKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cgPSBmdW5jdGlvbiBsb2cobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxvZzFwID0gZnVuY3Rpb24gbG9nMXAoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZzFwKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxvZzFwID0gZnVuY3Rpb24gbG9nMXAobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nMXAoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubG9nMTAgPSBmdW5jdGlvbiBsb2cxMCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nMTAodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubG9nMTAgPSBmdW5jdGlvbiBsb2cxMChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2cxMCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cyID0gZnVuY3Rpb24gbG9nMigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nMih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cyID0gZnVuY3Rpb24gbG9nMihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2cyKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJvdW5kID0gZnVuY3Rpb24gcm91bmQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnJvdW5kKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnJvdW5kID0gZnVuY3Rpb24gcm91bmQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucm91bmQoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNpZ24odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2lnbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaW4gPSBmdW5jdGlvbiBzaW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNpbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaW4gPSBmdW5jdGlvbiBzaW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2luKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpbmggPSBmdW5jdGlvbiBzaW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zaW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNpbmggPSBmdW5jdGlvbiBzaW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNxcnQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc3FydCA9IGZ1bmN0aW9uIHNxcnQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc3FydCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50YW4gPSBmdW5jdGlvbiB0YW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnRhbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC50YW4gPSBmdW5jdGlvbiB0YW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgudGFuKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnRhbmggPSBmdW5jdGlvbiB0YW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC50YW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnRhbmggPSBmdW5jdGlvbiB0YW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnRhbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUudHJ1bmMgPSBmdW5jdGlvbiB0cnVuYygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgudHJ1bmModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgudHJ1bmMgPSBmdW5jdGlvbiB0cnVuYyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC50cnVuYygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnBvdyA9IGZ1bmN0aW9uIHBvdyhtYXRyaXgsIGFyZzApIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5wb3coYXJnMCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5wb3dTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5wb3dNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucG93UyA9IGZ1bmN0aW9uIHBvd1ModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgucG93KHRoaXMuZ2V0KGksIGopLCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucG93TSA9IGZ1bmN0aW9uIHBvd00obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnBvdyh0aGlzLmdldChpLCBqKSwgbWF0cml4LmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cbiJdLCJuYW1lcyI6WyJ0b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsImlzQW55QXJyYXkiLCJvYmplY3QiLCJjYWxsIiwiZW5kc1dpdGgiLCJlcnJvckNhbGN1bGF0aW9uIiwiZGF0YSIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJpemVkRnVuY3Rpb24iLCJlcnJvciIsImZ1bmMiLCJpIiwieCIsImxlbmd0aCIsIk1hdGgiLCJhYnMiLCJ5Iiwic3RlcCIsInBhcmFtcyIsImRhbXBpbmciLCJncmFkaWVudERpZmZlcmVuY2UiLCJ2YWx1ZSIsImlkZW50aXR5IiwiZXZhbHVhdGVkRGF0YSIsIkZsb2F0NjRBcnJheSIsImdyYWRpZW50RnVuYyIsInBhcmFtRnVuY3Rpb24iLCJuIiwibSIsImFucyIsIkFycmF5IiwicGFyYW0iLCJhdXhQYXJhbXMiLCJzbGljZSIsImZ1bmNQYXJhbSIsInBvaW50IiwiZ3JhZGllbnRGdW5jdGlvbiIsIm1hdHJpeEZ1bmMiLCJtYXRyaXhGdW5jdGlvbiIsImludmVyc2VNYXRyaXgiLCJhZGQiLCJtbXVsIiwidHJhbnNwb3NlIiwic3ViIiwibXVsIiwidG8xREFycmF5IiwiV3JhcHBlck1hdHJpeDJEIiwiY29uc3RydWN0b3IiLCJzdXBlciIsInRoaXMiLCJyb3dzIiwiY29sdW1ucyIsInNldCIsInJvd0luZGV4IiwiY29sdW1uSW5kZXgiLCJnZXQiLCJMdURlY29tcG9zaXRpb24iLCJtYXRyaXgiLCJqIiwiayIsInAiLCJzIiwidCIsInYiLCJMVWNvbGoiLCJrbWF4IiwibHUiLCJjaGVja01hdHJpeCIsImNsb25lIiwicGl2b3RWZWN0b3IiLCJwaXZvdFNpZ24iLCJtaW4iLCJMVSIsImlzU2luZ3VsYXIiLCJjb2wiLCJzb2x2ZSIsIkVycm9yIiwiY291bnQiLCJYIiwic3ViTWF0cml4Um93IiwiZGV0ZXJtaW5hbnQiLCJpc1NxdWFyZSIsImxvd2VyVHJpYW5ndWxhck1hdHJpeCIsInVwcGVyVHJpYW5ndWxhck1hdHJpeCIsInBpdm90UGVybXV0YXRpb25WZWN0b3IiLCJmcm9tIiwiaHlwb3RlbnVzZSIsImEiLCJiIiwiciIsInNxcnQiLCJRckRlY29tcG9zaXRpb24iLCJxciIsInJkaWFnIiwibnJtIiwiUVIiLCJSZGlhZyIsImlzRnVsbFJhbmsiLCJzdWJNYXRyaXgiLCJvcnRob2dvbmFsTWF0cml4IiwiU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24iLCJvcHRpb25zIiwiaXNFbXB0eSIsImNvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzIiwiY29tcHV0ZVJpZ2h0U2luZ3VsYXJWZWN0b3JzIiwiYXV0b1RyYW5zcG9zZSIsIndhbnR1IiwiQm9vbGVhbiIsIndhbnR2Iiwic3dhcHBlZCIsImF1eCIsImNvbnNvbGUiLCJ3YXJuIiwibnUiLCJuaSIsIlUiLCJWIiwiZSIsIndvcmsiLCJzaSIsIm5jdCIsIm5ydCIsIm1heCIsIm1yYyIsInBwIiwiaXRlciIsImVwcyIsIk51bWJlciIsIkVQU0lMT04iLCJrYXNlIiwiYWxwaGEiLCJNSU5fVkFMVUUiLCJpc05hTiIsImtzIiwiZiIsImNzIiwic24iLCJzY2FsZSIsInNwIiwic3BtMSIsImVwbTEiLCJzayIsImVrIiwiYyIsInNoaWZ0IiwiZyIsInRtcCIsIlkiLCJ0aHJlc2hvbGQiLCJzY29scyIsIkxzIiwicmlnaHRTaW5ndWxhclZlY3RvcnMiLCJWTCIsInZyb3dzIiwidXJvd3MiLCJWTFUiLCJzdW0iLCJzb2x2ZUZvckRpYWdvbmFsIiwiaW52ZXJzZSIsInZjb2xzIiwidWNvbHMiLCJjb25kaXRpb24iLCJub3JtMiIsInJhbmsiLCJ0b2wiLCJpaSIsImRpYWdvbmFsIiwibGVmdFNpbmd1bGFyVmVjdG9ycyIsImRpYWdvbmFsTWF0cml4IiwidXNlU1ZEIiwibGVmdEhhbmRTaWRlIiwicmlnaHRIYW5kU2lkZSIsInRhZyIsImluY2x1ZGVzIiwicmVzY2FsZSIsImlucHV0Iiwib3V0cHV0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiY3VycmVudE1pbiIsIl9vcHRpb25zJGZyb21JbmRleCIsImZyb21JbmRleCIsIl9vcHRpb25zJHRvSW5kZXgiLCJ0b0luZGV4IiwiaXNJbnRlZ2VyIiwibWluVmFsdWUiLCJjdXJyZW50TWF4IiwibWF4VmFsdWUiLCJSYW5nZUVycm9yIiwiX29wdGlvbnMkbWluIiwiYXV0b01pbk1heCIsIl9vcHRpb25zJG1heCIsImZhY3RvciIsImluZGVudCIsInJlcGVhdCIsImluZGVudERhdGEiLCJpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnMiLCJtYXhSb3dzIiwibWF4Q29sdW1ucyIsIm1heE51bVNpemUiLCJwYWRNaW51cyIsIm5hbWUiLCJtYXhJIiwibWF4SiIsInJlc3VsdCIsImxvb3AiLCJsaW5lIiwicHVzaCIsImZvcm1hdE51bWJlciIsImpvaW4iLCJpbnNwZWN0RGF0YSIsIm51bSIsImZvcm1hdE51bWJlcjIiLCJwYWRFbmQiLCJsZW4iLCJzdHIiLCJmaXgiLCJ0b0ZpeGVkIiwic3RhcnRzV2l0aCIsImV4cCIsInRvRXhwb25lbnRpYWwiLCJjaGVja1Jvd0luZGV4IiwiaW5kZXgiLCJvdXRlciIsImNoZWNrQ29sdW1uSW5kZXgiLCJjaGVja1Jvd1ZlY3RvciIsInZlY3RvciIsImNoZWNrQ29sdW1uVmVjdG9yIiwiY2hlY2tSYW5nZSIsInN0YXJ0Um93IiwiZW5kUm93Iiwic3RhcnRDb2x1bW4iLCJlbmRDb2x1bW4iLCJjaGVja051bWJlciIsIm5ld0FycmF5IiwiYXJyYXkiLCJjaGVja05vbkVtcHR5IiwiQWJzdHJhY3RNYXRyaXgiLCJzdGF0aWMiLCJuZXdSb3dzIiwibmV3Q29sdW1ucyIsIm5ld0RhdGEiLCJuZXdNYXRyaXgiLCJNYXRyaXgiLCJyb3ciLCJjb2x1bW4iLCJmaWxsIiwicmFuZG9tIiwiaW50ZXJ2YWwiLCJyb3VuZCIsInplcm9zIiwibCIsIm1hdHJpeDEiLCJtYXRyaXgyIiwiaXNNYXRyaXgiLCJrbGFzcyIsInNpemUiLCJhcHBseSIsImNhbGxiYWNrIiwidG8yREFycmF5IiwiY29weSIsInRvSlNPTiIsImlzUm93VmVjdG9yIiwiaXNDb2x1bW5WZWN0b3IiLCJpc1ZlY3RvciIsImlzU3ltbWV0cmljIiwiaXNFY2hlbG9uRm9ybSIsInByZXZpb3VzQ29sdW1uIiwiY2hlY2tlZCIsImlzUmVkdWNlZEVjaGVsb25Gb3JtIiwiZWNoZWxvbkZvcm0iLCJoIiwiaU1heCIsInN3YXBSb3dzIiwicmVkdWNlZEVjaGVsb25Gb3JtIiwibWF4Um93IiwicGl2b3QiLCJzZXRTdWJNYXRyaXgiLCJuZWciLCJtdWxTIiwiZ2V0Um93IiwiZ2V0Um93VmVjdG9yIiwicm93VmVjdG9yIiwic2V0Um93Iiwicm93MSIsInJvdzIiLCJ0ZW1wIiwiZ2V0Q29sdW1uIiwiZ2V0Q29sdW1uVmVjdG9yIiwiY29sdW1uVmVjdG9yIiwic2V0Q29sdW1uIiwic3dhcENvbHVtbnMiLCJjb2x1bW4xIiwiY29sdW1uMiIsImFkZFJvd1ZlY3RvciIsInN1YlJvd1ZlY3RvciIsIm11bFJvd1ZlY3RvciIsImRpdlJvd1ZlY3RvciIsImFkZENvbHVtblZlY3RvciIsInN1YkNvbHVtblZlY3RvciIsIm11bENvbHVtblZlY3RvciIsImRpdkNvbHVtblZlY3RvciIsIm11bFJvdyIsIm11bENvbHVtbiIsImJ5IiwiTmFOIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJtYXhJbmRleCIsImlkeCIsIlBPU0lUSVZFX0lORklOSVRZIiwibWluSW5kZXgiLCJtYXhSb3dJbmRleCIsIm1pblJvdyIsIm1pblJvd0luZGV4IiwibWF4Q29sdW1uIiwibWF4Q29sdW1uSW5kZXgiLCJtaW5Db2x1bW4iLCJtaW5Db2x1bW5JbmRleCIsImRpYWciLCJub3JtIiwidHlwZSIsImN1bXVsYXRpdmVTdW0iLCJkb3QiLCJ2ZWN0b3IyIiwidmVjdG9yMSIsIm90aGVyIiwiQmNvbGoiLCJzdHJhc3NlbjJ4MiIsImExMSIsImIxMSIsImExMiIsImIxMiIsImEyMSIsImIyMSIsImEyMiIsImIyMiIsIm0xIiwibTIiLCJtMyIsIm00IiwibTUiLCJjMDAiLCJjMDEiLCJjMTAiLCJjMTEiLCJzdHJhc3NlbjN4MyIsImEwMCIsImEwMSIsImEwMiIsImExMCIsImEyMCIsImIwMCIsImIwMSIsImIwMiIsImIxMCIsImIyMCIsIm02IiwibTciLCJtOCIsIm05IiwibTEyIiwibTEzIiwibTE0IiwibTE1IiwibTE2IiwibTE3IiwibTE4IiwiYzAyIiwiYzEyIiwiYzIwIiwiYzIxIiwiYzIyIiwibW11bFN0cmFzc2VuIiwicjEiLCJjMSIsInIyIiwiYzIiLCJlbWJlZCIsIm1hdCIsImNvbHMiLCJyZXN1bHRhdCIsImJsb2NrTXVsdCIsImhhbGZSb3dzIiwicGFyc2VJbnQiLCJoYWxmQ29scyIsInNjYWxlUm93cyIsImlzRmluaXRlIiwic2NhbGVDb2x1bW5zIiwiZmxpcFJvd3MiLCJtaWRkbGUiLCJjZWlsIiwiZmlyc3QiLCJsYXN0IiwiZmxpcENvbHVtbnMiLCJrcm9uZWNrZXJQcm9kdWN0IiwicSIsImtyb25lY2tlclN1bSIsIkF4SSIsImV5ZSIsIkl4QiIsInNvcnRSb3dzIiwiY29tcGFyZUZ1bmN0aW9uIiwiY29tcGFyZU51bWJlcnMiLCJzb3J0Iiwic29ydENvbHVtbnMiLCJpbmRpY2VzIiwic3ViTWF0cml4Q29sdW1uIiwic2VsZWN0aW9uIiwicm93SW5kaWNlcyIsImNvbHVtbkluZGljZXMiLCJjaGVja1Jvd0luZGljZXMiLCJjaGVja0NvbHVtbkluZGljZXMiLCJ0cmFjZSIsInN1bUJ5Um93Iiwic3VtQnlDb2x1bW4iLCJzdW1BbGwiLCJwcm9kdWN0IiwicHJvZHVjdEJ5Um93IiwicHJvZHVjdEJ5Q29sdW1uIiwicHJvZHVjdEFsbCIsIm1lYW4iLCJ2YXJpYW5jZSIsInVuYmlhc2VkIiwic3VtMSIsInN1bTIiLCJ2YXJpYW5jZUJ5Um93IiwidmFyaWFuY2VCeUNvbHVtbiIsInZhcmlhbmNlQWxsIiwic3RhbmRhcmREZXZpYXRpb24iLCJjZW50ZXIiLCJjZW50ZXJCeVJvdyIsImNlbnRlckJ5Q29sdW1uIiwiY2VudGVyQWxsIiwicG93IiwiZ2V0U2NhbGVCeVJvdyIsInNjYWxlQnlSb3ciLCJnZXRTY2FsZUJ5Q29sdW1uIiwic2NhbGVCeUNvbHVtbiIsImRpdmlkZXIiLCJnZXRTY2FsZUFsbCIsInNjYWxlQWxsIiwiU3ltYm9sIiwiZm9yIiwicmFuZCIsInJhbmRvbUludCIsInJhbmRJbnQiLCJuZWdhdGUiLCJ0ZW5zb3JQcm9kdWN0IiwiblJvd3MiLCJuQ29sdW1ucyIsImFycmF5RGF0YSIsImV2ZXJ5IiwiZWxlbWVudCIsInJlbW92ZVJvdyIsInNwbGljZSIsImFkZFJvdyIsInJlbW92ZUNvbHVtbiIsIm5ld1JvdyIsImFkZENvbHVtbiIsImFkZFMiLCJhZGRNIiwic3ViUyIsInN1Yk0iLCJzdWJ0cmFjdCIsInN1YnRyYWN0UyIsInN1YnRyYWN0TSIsIm11bE0iLCJtdWx0aXBseSIsIm11bHRpcGx5UyIsIm11bHRpcGx5TSIsImRpdiIsImRpdlMiLCJkaXZNIiwiZGl2aWRlIiwiZGl2aWRlUyIsImRpdmlkZU0iLCJtb2QiLCJtb2RTIiwibW9kTSIsIm1vZHVsdXMiLCJtb2R1bHVzUyIsIm1vZHVsdXNNIiwiYW5kIiwiYW5kUyIsImFuZE0iLCJvciIsIm9yUyIsIm9yTSIsInhvciIsInhvclMiLCJ4b3JNIiwibGVmdFNoaWZ0IiwibGVmdFNoaWZ0UyIsImxlZnRTaGlmdE0iLCJzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0Iiwic2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFMiLCJzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TSIsInJpZ2h0U2hpZnQiLCJyaWdodFNoaWZ0UyIsInJpZ2h0U2hpZnRNIiwiemVyb0ZpbGxSaWdodFNoaWZ0IiwiemVyb0ZpbGxSaWdodFNoaWZ0UyIsInplcm9GaWxsUmlnaHRTaGlmdE0iLCJub3QiLCJhY29zIiwiYWNvc2giLCJhc2luIiwiYXNpbmgiLCJhdGFuIiwiYXRhbmgiLCJjYnJ0IiwiY2x6MzIiLCJjb3MiLCJjb3NoIiwiZXhwbTEiLCJmbG9vciIsImZyb3VuZCIsImxvZyIsImxvZzFwIiwibG9nMTAiLCJsb2cyIiwic2lnbiIsInNpbiIsInNpbmgiLCJ0YW4iLCJ0YW5oIiwidHJ1bmMiLCJhcmcwIiwicG93UyIsInBvd00iLCJpbnN0YWxsTWF0aE9wZXJhdGlvbnMiXSwic291cmNlUm9vdCI6IiJ9
|