@datagrok/eda 1.1.7 → 1.1.9
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/dist/100.js +2 -0
- package/dist/118.js +2 -0
- package/dist/208.js +2 -0
- package/dist/221.js +2 -2
- package/dist/{155.js → 261.js} +2 -2
- package/dist/334.js +2 -0
- package/dist/352.js +2 -0
- package/dist/356.js +2 -2
- package/dist/361.js +2 -0
- package/dist/367.js +2 -0
- package/dist/374.js +2 -0
- package/dist/467.js +2 -0
- package/dist/471.js +2 -0
- package/dist/483.js +2 -0
- package/dist/533.js +2 -0
- package/dist/664.js +2 -0
- package/dist/694.js +2 -2
- package/dist/729.js +2 -2
- package/dist/796.js +2 -2
- package/dist/{146.js → 902.js} +2 -2
- package/dist/{355.js → 910.js} +2 -2
- package/dist/943.js +3 -0
- package/dist/943.js.LICENSE.txt +51 -0
- package/dist/package-test.js +2 -2
- package/dist/package.js +2 -2
- package/package.json +37 -5
- package/src/eda-tools.ts +0 -41
- package/src/package.ts +46 -46
- package/webpack.config.js +3 -2
- package/dist/111.js +0 -2
- package/dist/584.js +0 -2
- package/dist/604.js +0 -2
- package/dist/632.js +0 -2
- package/dist/645.js +0 -2
- package/dist/80.js +0 -2
- package/dist/93.js +0 -2
package/dist/352.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[352],{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})},4162:(t,e,r)=>{r.d(e,{Z:()=>q});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,P=M+i*(-f+c+w-g-p-d+b)+x+S+A+F+V,D=M+x+E+S+h*y,L=A+F+V+C+n*m,U=S+v+k+l*(-f+m+w-g-p-d+y)+N+T+A,O=N+T+A+q+u*c,W=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,P),e.set(1,1,D),e.set(1,2,L),e.set(2,0,U),e.set(2,1,O),e.set(2,2,W),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);class k extends S{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 I{constructor(t){let e,r,o,s,n,i,h,u,l,a=(t=k.checkMatrix(t)).clone(),f=a.rows,c=a.columns,m=new Float64Array(f),w=1;for(e=0;e<f;e++)m[e]=e;for(u=new Float64Array(f),r=0;r<c;r++){for(e=0;e<f;e++)u[e]=a.get(e,r);for(e=0;e<f;e++){for(l=Math.min(e,r),n=0,o=0;o<l;o++)n+=a.get(e,o)*u[o];u[e]-=n,a.set(e,r,u[e])}for(s=r,e=r+1;e<f;e++)Math.abs(u[e])>Math.abs(u[s])&&(s=e);if(s!==r){for(o=0;o<c;o++)i=a.get(s,o),a.set(s,o,a.get(r,o)),a.set(r,o,i);h=m[s],m[s]=m[r],m[r]=h,w=-w}if(r<f&&0!==a.get(r,r))for(e=r+1;e<f;e++)a.set(e,r,a.get(e,r)/a.get(r,r))}this.LU=a,this.pivotVector=m,this.pivotSign=w}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=R.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,o,s,n=t.columns,i=t.subMatrixRow(this.pivotVector,0,n-1),h=e.columns;for(s=0;s<h;s++)for(r=s+1;r<h;r++)for(o=0;o<n;o++)i.set(r,o,i.get(r,o)-i.get(s,o)*e.get(r,s));for(s=h-1;s>=0;s--){for(o=0;o<n;o++)i.set(s,o,i.get(s,o)/e.get(s,s));for(r=0;r<s;r++)for(o=0;o<n;o++)i.set(r,o,i.get(r,o)-i.get(s,o)*e.get(r,s))}return i}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,o=new R(e,r);for(let s=0;s<e;s++)for(let e=0;e<r;e++)s>e?o.set(s,e,t.get(s,e)):s===e?o.set(s,e,1):o.set(s,e,0);return o}get upperTriangularMatrix(){let t=this.LU,e=t.rows,r=t.columns,o=new R(e,r);for(let s=0;s<e;s++)for(let e=0;e<r;e++)s<=e?o.set(s,e,t.get(s,e)):o.set(s,e,0);return o}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function N(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 T{constructor(t){let e,r,o,s,n=(t=k.checkMatrix(t)).clone(),i=t.rows,h=t.columns,u=new Float64Array(h);for(o=0;o<h;o++){let t=0;for(e=o;e<i;e++)t=N(t,n.get(e,o));if(0!==t){for(n.get(o,o)<0&&(t=-t),e=o;e<i;e++)n.set(e,o,n.get(e,o)/t);for(n.set(o,o,n.get(o,o)+1),r=o+1;r<h;r++){for(s=0,e=o;e<i;e++)s+=n.get(e,o)*n.get(e,r);for(s=-s/n.get(o,o),e=o;e<i;e++)n.set(e,r,n.get(e,r)+s*n.get(e,o))}}u[o]=-t}this.QR=n,this.Rdiag=u}solve(t){t=R.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 o,s,n,i,h=t.columns,u=t.clone(),l=e.columns;for(n=0;n<l;n++)for(s=0;s<h;s++){for(i=0,o=n;o<r;o++)i+=e.get(o,n)*u.get(o,s);for(i=-i/e.get(n,n),o=n;o<r;o++)u.set(o,s,u.get(o,s)+i*e.get(o,n))}for(n=l-1;n>=0;n--){for(s=0;s<h;s++)u.set(n,s,u.get(n,s)/this.Rdiag[n]);for(o=0;o<n;o++)for(s=0;s<h;s++)u.set(o,s,u.get(o,s)-u.get(n,s)*e.get(o,n))}return u.subMatrix(0,l-1,0,h-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,o=r.columns,s=new R(o,o);for(t=0;t<o;t++)for(e=0;e<o;e++)t<e?s.set(t,e,r.get(t,e)):t===e?s.set(t,e,this.Rdiag[t]):s.set(t,e,0);return s}get orthogonalMatrix(){let t,e,r,o,s=this.QR,n=s.rows,i=s.columns,h=new R(n,i);for(r=i-1;r>=0;r--){for(t=0;t<n;t++)h.set(t,r,0);for(h.set(r,r,1),e=r;e<i;e++)if(0!==s.get(r,r)){for(o=0,t=r;t<n;t++)o+=s.get(t,r)*h.get(t,e);for(o=-o/s.get(r,r),t=r;t<n;t++)h.set(t,e,h.get(t,e)+o*s.get(t,r))}}return h}}class A{constructor(t,e={}){if((t=k.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let r=t.rows,o=t.columns;const{computeLeftSingularVectors:s=!0,computeRightSingularVectors:n=!0,autoTranspose:i=!1}=e;let h,u=Boolean(s),l=Boolean(n),a=!1;if(r<o)if(i){h=t.transpose(),r=h.rows,o=h.columns,a=!0;let e=u;u=l,l=e}else h=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else h=t.clone();let f=Math.min(r,o),c=Math.min(r+1,o),m=new Float64Array(c),w=new R(r,f),g=new R(o,o),p=new Float64Array(o),d=new Float64Array(r),y=new Float64Array(c);for(let t=0;t<c;t++)y[t]=t;let b=Math.min(r-1,o),M=Math.max(0,Math.min(o-2,r)),x=Math.max(b,M);for(let t=0;t<x;t++){if(t<b){m[t]=0;for(let e=t;e<r;e++)m[t]=N(m[t],h.get(e,t));if(0!==m[t]){h.get(t,t)<0&&(m[t]=-m[t]);for(let e=t;e<r;e++)h.set(e,t,h.get(e,t)/m[t]);h.set(t,t,h.get(t,t)+1)}m[t]=-m[t]}for(let e=t+1;e<o;e++){if(t<b&&0!==m[t]){let o=0;for(let s=t;s<r;s++)o+=h.get(s,t)*h.get(s,e);o=-o/h.get(t,t);for(let s=t;s<r;s++)h.set(s,e,h.get(s,e)+o*h.get(s,t))}p[e]=h.get(t,e)}if(u&&t<b)for(let e=t;e<r;e++)w.set(e,t,h.get(e,t));if(t<M){p[t]=0;for(let e=t+1;e<o;e++)p[t]=N(p[t],p[e]);if(0!==p[t]){p[t+1]<0&&(p[t]=0-p[t]);for(let e=t+1;e<o;e++)p[e]/=p[t];p[t+1]+=1}if(p[t]=-p[t],t+1<r&&0!==p[t]){for(let e=t+1;e<r;e++)d[e]=0;for(let e=t+1;e<r;e++)for(let r=t+1;r<o;r++)d[e]+=p[r]*h.get(e,r);for(let e=t+1;e<o;e++){let o=-p[e]/p[t+1];for(let s=t+1;s<r;s++)h.set(s,e,h.get(s,e)+o*d[s])}}if(l)for(let e=t+1;e<o;e++)g.set(e,t,p[e])}}let E=Math.min(o,r+1);if(b<o&&(m[b]=h.get(b,b)),r<E&&(m[E-1]=0),M+1<E&&(p[M]=h.get(M,E-1)),p[E-1]=0,u){for(let t=b;t<f;t++){for(let e=0;e<r;e++)w.set(e,t,0);w.set(t,t,1)}for(let t=b-1;t>=0;t--)if(0!==m[t]){for(let e=t+1;e<f;e++){let o=0;for(let s=t;s<r;s++)o+=w.get(s,t)*w.get(s,e);o=-o/w.get(t,t);for(let s=t;s<r;s++)w.set(s,e,w.get(s,e)+o*w.get(s,t))}for(let e=t;e<r;e++)w.set(e,t,-w.get(e,t));w.set(t,t,1+w.get(t,t));for(let e=0;e<t-1;e++)w.set(e,t,0)}else{for(let e=0;e<r;e++)w.set(e,t,0);w.set(t,t,1)}}if(l)for(let t=o-1;t>=0;t--){if(t<M&&0!==p[t])for(let e=t+1;e<o;e++){let r=0;for(let s=t+1;s<o;s++)r+=g.get(s,t)*g.get(s,e);r=-r/g.get(t+1,t);for(let s=t+1;s<o;s++)g.set(s,e,g.get(s,e)+r*g.get(s,t))}for(let e=0;e<o;e++)g.set(e,t,0);g.set(t,t,1)}let S=E-1,v=0,I=Number.EPSILON;for(;E>0;){let t,e;for(t=E-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+I*Math.abs(m[t]+Math.abs(m[t+1]));if(Math.abs(p[t])<=e||Number.isNaN(p[t])){p[t]=0;break}}if(t===E-2)e=4;else{let r;for(r=E-1;r>=t&&r!==t;r--){let e=(r!==E?Math.abs(p[r]):0)+(r!==t+1?Math.abs(p[r-1]):0);if(Math.abs(m[r])<=I*e){m[r]=0;break}}r===t?e=3:r===E-1?e=1:(e=2,t=r)}switch(t++,e){case 1:{let e=p[E-2];p[E-2]=0;for(let r=E-2;r>=t;r--){let s=N(m[r],e),n=m[r]/s,i=e/s;if(m[r]=s,r!==t&&(e=-i*p[r-1],p[r-1]=n*p[r-1]),l)for(let t=0;t<o;t++)s=n*g.get(t,r)+i*g.get(t,E-1),g.set(t,E-1,-i*g.get(t,r)+n*g.get(t,E-1)),g.set(t,r,s)}break}case 2:{let e=p[t-1];p[t-1]=0;for(let o=t;o<E;o++){let s=N(m[o],e),n=m[o]/s,i=e/s;if(m[o]=s,e=-i*p[o],p[o]=n*p[o],u)for(let e=0;e<r;e++)s=n*w.get(e,o)+i*w.get(e,t-1),w.set(e,t-1,-i*w.get(e,o)+n*w.get(e,t-1)),w.set(e,o,s)}break}case 3:{const e=Math.max(Math.abs(m[E-1]),Math.abs(m[E-2]),Math.abs(p[E-2]),Math.abs(m[t]),Math.abs(p[t])),s=m[E-1]/e,n=m[E-2]/e,i=p[E-2]/e,h=m[t]/e,a=p[t]/e,f=((n+s)*(n-s)+i*i)/2,c=s*i*(s*i);let d=0;0===f&&0===c||(d=f<0?0-Math.sqrt(f*f+c):Math.sqrt(f*f+c),d=c/(f+d));let y=(h+s)*(h-s)+d,b=h*a;for(let e=t;e<E-1;e++){let s=N(y,b);0===s&&(s=Number.MIN_VALUE);let n=y/s,i=b/s;if(e!==t&&(p[e-1]=s),y=n*m[e]+i*p[e],p[e]=n*p[e]-i*m[e],b=i*m[e+1],m[e+1]=n*m[e+1],l)for(let t=0;t<o;t++)s=n*g.get(t,e)+i*g.get(t,e+1),g.set(t,e+1,-i*g.get(t,e)+n*g.get(t,e+1)),g.set(t,e,s);if(s=N(y,b),0===s&&(s=Number.MIN_VALUE),n=y/s,i=b/s,m[e]=s,y=n*p[e]+i*m[e+1],m[e+1]=-i*p[e]+n*m[e+1],b=i*p[e+1],p[e+1]=n*p[e+1],u&&e<r-1)for(let t=0;t<r;t++)s=n*w.get(t,e)+i*w.get(t,e+1),w.set(t,e+1,-i*w.get(t,e)+n*w.get(t,e+1)),w.set(t,e,s)}p[E-2]=y,v+=1;break}case 4:if(m[t]<=0&&(m[t]=m[t]<0?-m[t]:0,l))for(let e=0;e<=S;e++)g.set(e,t,-g.get(e,t));for(;t<S&&!(m[t]>=m[t+1]);){let e=m[t];if(m[t]=m[t+1],m[t+1]=e,l&&t<o-1)for(let r=0;r<o;r++)e=g.get(r,t+1),g.set(r,t+1,g.get(r,t)),g.set(r,t,e);if(u&&t<r-1)for(let o=0;o<r;o++)e=w.get(o,t+1),w.set(o,t+1,w.get(o,t)),w.set(o,t,e);t++}v=0,E--}}if(a){let t=g;g=w,w=t}this.m=r,this.n=o,this.s=m,this.U=w,this.V=g}solve(t){let e=t,r=this.threshold,o=this.s.length,s=R.zeros(o,o);for(let t=0;t<o;t++)Math.abs(this.s[t])<=r?s.set(t,t,0):s.set(t,t,1/this.s[t]);let n=this.U,i=this.rightSingularVectors,h=i.mmul(s),u=i.rows,l=n.rows,a=R.zeros(u,l);for(let t=0;t<u;t++)for(let e=0;e<l;e++){let r=0;for(let s=0;s<o;s++)r+=h.get(t,s)*n.get(e,s);a.set(t,e,r)}return a.mmul(e)}solveForDiagonal(t){return this.solve(R.diag(t))}inverse(){let t=this.V,e=this.threshold,r=t.rows,o=t.columns,s=new R(r,this.s.length);for(let n=0;n<r;n++)for(let r=0;r<o;r++)Math.abs(this.s[r])>e&&s.set(n,r,t.get(n,r)/this.s[r]);let n=this.U,i=n.rows,h=n.columns,u=new R(r,i);for(let t=0;t<r;t++)for(let e=0;e<i;e++){let r=0;for(let o=0;o<h;o++)r+=s.get(t,o)*n.get(e,o);u.set(t,e,r)}return u}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 R.diag(this.s)}}function q(t,e,r,o,s){let n=r*o*o,i=R.eye(e.length,e.length,n);const h=s(e);let u=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)u[e]=h(t.x[e]);let l=function(t,e,r,o,s){const n=r.length,i=t.x.length;let h=new Array(n);for(let u=0;u<n;u++){h[u]=new Array(i);let n=r.slice();n[u]+=o;let l=s(n);for(let r=0;r<i;r++)h[u][r]=e[r]-l(t.x[r])}return new R(h)}(t,u,e,o,s),a=function(t,e){const r=t.x.length;let o=new Array(r);for(let s=0;s<r;s++)o[s]=[t.y[s]-e[s]];return new R(o)}(t,u),f=function(t,e=!1){return t=k.checkMatrix(t),e?new A(t).inverse():function(t,e,r=!1){return t=k.checkMatrix(t),e=k.checkMatrix(e),r?new A(t).solve(e):t.isSquare()?new I(t).solve(e):new T(t).solve(e)}(t,R.eye(t.rows))}(i.add(l.mmul(l.transpose())));return(e=(e=new R([e])).sub(f.mmul(l).mmul(a).mul(o).transpose())).to1DArray()}}}]);
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNwQixDQW9DbUJPLENBQWV6Z0IsRUFBTStmLEdBQ2xDVyxFQ3JGQyxTQUFpQjlkLEVBQVErZCxHQUFTLEdBRXZDLE9BREEvZCxFQUFTMFgsRUFBZ0J0VCxZQUFZcEUsR0FDakMrZCxFQUNLLElBQUkxRSxFQUEyQnJaLEdBQVFxYyxVQU0zQyxTQUFlMkIsRUFBY0MsRUFBZUYsR0FBUyxHQUcxRCxPQUZBQyxFQUFldEcsRUFBZ0J0VCxZQUFZNFosR0FDM0NDLEVBQWdCdkcsRUFBZ0J0VCxZQUFZNlosR0FDeENGLEVBQ0ssSUFBSTFFLEVBQTJCMkUsR0FBYzNGLE1BQU00RixHQUVuREQsRUFBYWhaLFdBQ2hCLElBQUkyUyxFQUFnQnFHLEdBQWMzRixNQUFNNEYsR0FDeEMsSUFBSXBGLEVBQWdCbUYsR0FBYzNGLE1BQU00RixFQUVoRCxDQWRXNUYsQ0FBTXJZLEVBQVF1RCxFQUFPb0wsSUFBSTNPLEVBQU9PLE1BRTNDLENEOEVzQjhiLENBQ2xCcEssRUFBU3JFLElBQUl3UCxFQUFhOVQsS0FBSzhULEVBQWF2TyxlQVk5QyxPQVJBbU8sR0FEQUEsRUFBUyxJQUFJelosRUFBTyxDQUFDeVosS0FDTG5QLElBQ2RpUSxFQUNHeFUsS0FBSzhULEdBQ0w5VCxLQUFLc1UsR0FDTHBLLElBQUkwSixHQUNKck8sY0FHU3hNLFdBQ2hCLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvaXMtYW55LWFycmF5L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbGV2ZW5iZXJnLW1hcnF1YXJkdC9zcmMvZXJyb3JDYWxjdWxhdGlvbi5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktcmVzY2FsZS9ub2RlX21vZHVsZXMvaXMtYW55LWFycmF5L2xpYi1lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLWFycmF5LW1heC9ub2RlX21vZHVsZXMvaXMtYW55LWFycmF5L2xpYi1lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLWFycmF5LW1pbi9ub2RlX21vZHVsZXMvaXMtYW55LWFycmF5L2xpYi1lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLWFycmF5LXJlc2NhbGUvbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWluL2xpYi1lczYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLWFycmF5LW1heC9saWItZXM2L2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2luc3BlY3QuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvdXRpbC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9tYXRyaXguanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvc3RhdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9tYXRoT3BlcmF0aW9ucy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy93cmFwL1dyYXBwZXJNYXRyaXgyRC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9kYy9sdS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9kYy91dGlsLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL3FyLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL3N2ZC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbGV2ZW5iZXJnLW1hcnF1YXJkdC9zcmMvc3RlcC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9kZWNvbXBvc2l0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQW55QXJyYXkob2JqZWN0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKG9iamVjdCkuZW5kc1dpdGgoJ0FycmF5XScpO1xufVxuIiwiLyoqXG4gKiBDYWxjdWxhdGUgY3VycmVudCBlcnJvclxuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbWV0ZXJzIC0gQXJyYXkgb2YgY3VycmVudCBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVycm9yQ2FsY3VsYXRpb24oXG4gIGRhdGEsXG4gIHBhcmFtZXRlcnMsXG4gIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbikge1xuICBsZXQgZXJyb3IgPSAwO1xuICBjb25zdCBmdW5jID0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uKHBhcmFtZXRlcnMpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgZXJyb3IgKz0gTWF0aC5hYnMoZGF0YS55W2ldIC0gZnVuYyhkYXRhLnhbaV0pKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcjtcbn1cbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhbiBBcnJheSAoYXJyYXkgb3IgdHlwZWQgYXJyYXksIGV4Y2VwdCB0aG9zZSB0aGF0IGNvbnRhaW4gYmlnaW50IHZhbHVlcykuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gT2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGFycmF5IG9yIGEgdHlwZWQgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FueUFycmF5KHZhbHVlKSB7XG4gICAgY29uc3QgdGFnID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRhZy5lbmRzV2l0aCgnQXJyYXldJykgJiYgIXRhZy5pbmNsdWRlcygnQmlnJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gQXJyYXkgKGFycmF5IG9yIHR5cGVkIGFycmF5LCBleGNlcHQgdGhvc2UgdGhhdCBjb250YWluIGJpZ2ludCB2YWx1ZXMpLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIE9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIHR5cGVkIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IHRhZyA9IHRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIHJldHVybiB0YWcuZW5kc1dpdGgoJ0FycmF5XScpICYmICF0YWcuaW5jbHVkZXMoJ0JpZycpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhbiBBcnJheSAoYXJyYXkgb3IgdHlwZWQgYXJyYXksIGV4Y2VwdCB0aG9zZSB0aGF0IGNvbnRhaW4gYmlnaW50IHZhbHVlcykuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gT2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGFycmF5IG9yIGEgdHlwZWQgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FueUFycmF5KHZhbHVlKSB7XG4gICAgY29uc3QgdGFnID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRhZy5lbmRzV2l0aCgnQXJyYXldJykgJiYgIXRhZy5pbmNsdWRlcygnQmlnJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBpc0FueUFycmF5IH0gZnJvbSAnaXMtYW55LWFycmF5JztcbmltcG9ydCBtYXggZnJvbSAnbWwtYXJyYXktbWF4JztcbmltcG9ydCBtaW4gZnJvbSAnbWwtYXJyYXktbWluJztcblxuZnVuY3Rpb24gcmVzY2FsZShpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfSBlbHNlIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIG91dHB1dDtcblxuICBpZiAob3B0aW9ucy5vdXRwdXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghaXNBbnlBcnJheShvcHRpb25zLm91dHB1dCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ291dHB1dCBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBpZiBzcGVjaWZpZWQnKTtcbiAgICB9XG5cbiAgICBvdXRwdXQgPSBvcHRpb25zLm91dHB1dDtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBuZXcgQXJyYXkoaW5wdXQubGVuZ3RoKTtcbiAgfVxuXG4gIHZhciBjdXJyZW50TWluID0gbWluKGlucHV0KTtcbiAgdmFyIGN1cnJlbnRNYXggPSBtYXgoaW5wdXQpO1xuXG4gIGlmIChjdXJyZW50TWluID09PSBjdXJyZW50TWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbmltdW0gYW5kIG1heGltdW0gaW5wdXQgdmFsdWVzIGFyZSBlcXVhbC4gQ2Fubm90IHJlc2NhbGUgYSBjb25zdGFudCBhcnJheScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1pbiA9IG9wdGlvbnMubWluLFxuICAgICAgbWluVmFsdWUgPSBfb3B0aW9ucyRtaW4gPT09IHZvaWQgMCA/IG9wdGlvbnMuYXV0b01pbk1heCA/IGN1cnJlbnRNaW4gOiAwIDogX29wdGlvbnMkbWluLFxuICAgICAgX29wdGlvbnMkbWF4ID0gb3B0aW9ucy5tYXgsXG4gICAgICBtYXhWYWx1ZSA9IF9vcHRpb25zJG1heCA9PT0gdm9pZCAwID8gb3B0aW9ucy5hdXRvTWluTWF4ID8gY3VycmVudE1heCA6IDEgOiBfb3B0aW9ucyRtYXg7XG5cbiAgaWYgKG1pblZhbHVlID49IG1heFZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBvcHRpb24gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4IG9wdGlvbicpO1xuICB9XG5cbiAgdmFyIGZhY3RvciA9IChtYXhWYWx1ZSAtIG1pblZhbHVlKSAvIChjdXJyZW50TWF4IC0gY3VycmVudE1pbik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFtpXSA9IChpbnB1dFtpXSAtIGN1cnJlbnRNaW4pICogZmFjdG9yICsgbWluVmFsdWU7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5leHBvcnQgeyByZXNjYWxlIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuXG5mdW5jdGlvbiBtaW4oaW5wdXQpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICghaXNBbnlBcnJheShpbnB1dCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRmcm9tSW5kZXggPSBvcHRpb25zLmZyb21JbmRleCxcbiAgICAgIGZyb21JbmRleCA9IF9vcHRpb25zJGZyb21JbmRleCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJGZyb21JbmRleCxcbiAgICAgIF9vcHRpb25zJHRvSW5kZXggPSBvcHRpb25zLnRvSW5kZXgsXG4gICAgICB0b0luZGV4ID0gX29wdGlvbnMkdG9JbmRleCA9PT0gdm9pZCAwID8gaW5wdXQubGVuZ3RoIDogX29wdGlvbnMkdG9JbmRleDtcblxuICBpZiAoZnJvbUluZGV4IDwgMCB8fCBmcm9tSW5kZXggPj0gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGZyb21JbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zyb21JbmRleCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzbWFsbGVyIHRoYW4gbGVuZ3RoJyk7XG4gIH1cblxuICBpZiAodG9JbmRleCA8PSBmcm9tSW5kZXggfHwgdG9JbmRleCA+IGlucHV0Lmxlbmd0aCB8fCAhTnVtYmVyLmlzSW50ZWdlcih0b0luZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9JbmRleCBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGZyb21JbmRleCBhbmQgYXQgbW9zdCBlcXVhbCB0byBsZW5ndGgnKTtcbiAgfVxuXG4gIHZhciBtaW5WYWx1ZSA9IGlucHV0W2Zyb21JbmRleF07XG5cbiAgZm9yICh2YXIgaSA9IGZyb21JbmRleCArIDE7IGkgPCB0b0luZGV4OyBpKyspIHtcbiAgICBpZiAoaW5wdXRbaV0gPCBtaW5WYWx1ZSkgbWluVmFsdWUgPSBpbnB1dFtpXTtcbiAgfVxuXG4gIHJldHVybiBtaW5WYWx1ZTtcbn1cblxuZXhwb3J0IHsgbWluIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuXG5mdW5jdGlvbiBtYXgoaW5wdXQpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICghaXNBbnlBcnJheShpbnB1dCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRmcm9tSW5kZXggPSBvcHRpb25zLmZyb21JbmRleCxcbiAgICAgIGZyb21JbmRleCA9IF9vcHRpb25zJGZyb21JbmRleCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJGZyb21JbmRleCxcbiAgICAgIF9vcHRpb25zJHRvSW5kZXggPSBvcHRpb25zLnRvSW5kZXgsXG4gICAgICB0b0luZGV4ID0gX29wdGlvbnMkdG9JbmRleCA9PT0gdm9pZCAwID8gaW5wdXQubGVuZ3RoIDogX29wdGlvbnMkdG9JbmRleDtcblxuICBpZiAoZnJvbUluZGV4IDwgMCB8fCBmcm9tSW5kZXggPj0gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGZyb21JbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zyb21JbmRleCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzbWFsbGVyIHRoYW4gbGVuZ3RoJyk7XG4gIH1cblxuICBpZiAodG9JbmRleCA8PSBmcm9tSW5kZXggfHwgdG9JbmRleCA+IGlucHV0Lmxlbmd0aCB8fCAhTnVtYmVyLmlzSW50ZWdlcih0b0luZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9JbmRleCBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGZyb21JbmRleCBhbmQgYXQgbW9zdCBlcXVhbCB0byBsZW5ndGgnKTtcbiAgfVxuXG4gIHZhciBtYXhWYWx1ZSA9IGlucHV0W2Zyb21JbmRleF07XG5cbiAgZm9yICh2YXIgaSA9IGZyb21JbmRleCArIDE7IGkgPCB0b0luZGV4OyBpKyspIHtcbiAgICBpZiAoaW5wdXRbaV0gPiBtYXhWYWx1ZSkgbWF4VmFsdWUgPSBpbnB1dFtpXTtcbiAgfVxuXG4gIHJldHVybiBtYXhWYWx1ZTtcbn1cblxuZXhwb3J0IHsgbWF4IGFzIGRlZmF1bHQgfTtcbiIsImNvbnN0IGluZGVudCA9ICcgJy5yZXBlYXQoMik7XG5jb25zdCBpbmRlbnREYXRhID0gJyAnLnJlcGVhdCg0KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RNYXRyaXgoKSB7XG4gIHJldHVybiBpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnModGhpcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnMobWF0cml4LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIG1heFJvd3MgPSAxNSxcbiAgICBtYXhDb2x1bW5zID0gMTAsXG4gICAgbWF4TnVtU2l6ZSA9IDgsXG4gICAgcGFkTWludXMgPSAnYXV0bycsXG4gIH0gPSBvcHRpb25zO1xuICByZXR1cm4gYCR7bWF0cml4LmNvbnN0cnVjdG9yLm5hbWV9IHtcbiR7aW5kZW50fVtcbiR7aW5kZW50RGF0YX0ke2luc3BlY3REYXRhKG1hdHJpeCwgbWF4Um93cywgbWF4Q29sdW1ucywgbWF4TnVtU2l6ZSwgcGFkTWludXMpfVxuJHtpbmRlbnR9XVxuJHtpbmRlbnR9cm93czogJHttYXRyaXgucm93c31cbiR7aW5kZW50fWNvbHVtbnM6ICR7bWF0cml4LmNvbHVtbnN9XG59YDtcbn1cblxuZnVuY3Rpb24gaW5zcGVjdERhdGEobWF0cml4LCBtYXhSb3dzLCBtYXhDb2x1bW5zLCBtYXhOdW1TaXplLCBwYWRNaW51cykge1xuICBjb25zdCB7IHJvd3MsIGNvbHVtbnMgfSA9IG1hdHJpeDtcbiAgY29uc3QgbWF4SSA9IE1hdGgubWluKHJvd3MsIG1heFJvd3MpO1xuICBjb25zdCBtYXhKID0gTWF0aC5taW4oY29sdW1ucywgbWF4Q29sdW1ucyk7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIGlmIChwYWRNaW51cyA9PT0gJ2F1dG8nKSB7XG4gICAgcGFkTWludXMgPSBmYWxzZTtcbiAgICBsb29wOiBmb3IgKGxldCBpID0gMDsgaSA8IG1heEk7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXhKOyBqKyspIHtcbiAgICAgICAgaWYgKG1hdHJpeC5nZXQoaSwgaikgPCAwKSB7XG4gICAgICAgICAgcGFkTWludXMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEk7IGkrKykge1xuICAgIGxldCBsaW5lID0gW107XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXhKOyBqKyspIHtcbiAgICAgIGxpbmUucHVzaChmb3JtYXROdW1iZXIobWF0cml4LmdldChpLCBqKSwgbWF4TnVtU2l6ZSwgcGFkTWludXMpKTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goYCR7bGluZS5qb2luKCcgJyl9YCk7XG4gIH1cbiAgaWYgKG1heEogIT09IGNvbHVtbnMpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdICs9IGAgLi4uICR7Y29sdW1ucyAtIG1heENvbHVtbnN9IG1vcmUgY29sdW1uc2A7XG4gIH1cbiAgaWYgKG1heEkgIT09IHJvd3MpIHtcbiAgICByZXN1bHQucHVzaChgLi4uICR7cm93cyAtIG1heFJvd3N9IG1vcmUgcm93c2ApO1xuICB9XG4gIHJldHVybiByZXN1bHQuam9pbihgXFxuJHtpbmRlbnREYXRhfWApO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROdW1iZXIobnVtLCBtYXhOdW1TaXplLCBwYWRNaW51cykge1xuICByZXR1cm4gKFxuICAgIG51bSA+PSAwICYmIHBhZE1pbnVzXG4gICAgICA/IGAgJHtmb3JtYXROdW1iZXIyKG51bSwgbWF4TnVtU2l6ZSAtIDEpfWBcbiAgICAgIDogZm9ybWF0TnVtYmVyMihudW0sIG1heE51bVNpemUpXG4gICkucGFkRW5kKG1heE51bVNpemUpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROdW1iZXIyKG51bSwgbGVuKSB7XG4gIC8vIHNtYWxsLmxlbmd0aCBudW1iZXJzIHNob3VsZCBiZSBhcyBpc1xuICBsZXQgc3RyID0gbnVtLnRvU3RyaW5nKCk7XG4gIGlmIChzdHIubGVuZ3RoIDw9IGxlbikgcmV0dXJuIHN0cjtcblxuICAvLyAoNyknMC4wMDEyMycgaXMgYmV0dGVyIHRoZW4gKDcpJzEuMjNlLTInXG4gIC8vICg4KScwLjAwMDEyMycgaXMgd29yc2UgdGhlbiAoNyknMS4yM2UtMycsXG4gIGxldCBmaXggPSBudW0udG9GaXhlZChsZW4pO1xuICBpZiAoZml4Lmxlbmd0aCA+IGxlbikge1xuICAgIGZpeCA9IG51bS50b0ZpeGVkKE1hdGgubWF4KDAsIGxlbiAtIChmaXgubGVuZ3RoIC0gbGVuKSkpO1xuICB9XG4gIGlmIChcbiAgICBmaXgubGVuZ3RoIDw9IGxlbiAmJlxuICAgICFmaXguc3RhcnRzV2l0aCgnMC4wMDAnKSAmJlxuICAgICFmaXguc3RhcnRzV2l0aCgnLTAuMDAwJylcbiAgKSB7XG4gICAgcmV0dXJuIGZpeDtcbiAgfVxuXG4gIC8vIHdlbGwsIGlmIGl0J3Mgc3RpbGwgdG9vIGxvbmcgdGhlIHVzZXIgc2hvdWxkJ3ZlIHVzZWQgbG9uZ2VyIG51bWJlcnNcbiAgbGV0IGV4cCA9IG51bS50b0V4cG9uZW50aWFsKGxlbik7XG4gIGlmIChleHAubGVuZ3RoID4gbGVuKSB7XG4gICAgZXhwID0gbnVtLnRvRXhwb25lbnRpYWwoTWF0aC5tYXgoMCwgbGVuIC0gKGV4cC5sZW5ndGggLSBsZW4pKSk7XG4gIH1cbiAgcmV0dXJuIGV4cC5zbGljZSgwKTtcbn1cbiIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDaGVjayB0aGF0IGEgcm93IGluZGV4IGlzIG5vdCBvdXQgb2YgYm91bmRzXG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW291dGVyXVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSb3dJbmRleChtYXRyaXgsIGluZGV4LCBvdXRlcikge1xuICBsZXQgbWF4ID0gb3V0ZXIgPyBtYXRyaXgucm93cyA6IG1hdHJpeC5yb3dzIC0gMTtcbiAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IG1heCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdSb3cgaW5kZXggb3V0IG9mIHJhbmdlJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCBhIGNvbHVtbiBpbmRleCBpcyBub3Qgb3V0IG9mIGJvdW5kc1xuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvdXRlcl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ29sdW1uSW5kZXgobWF0cml4LCBpbmRleCwgb3V0ZXIpIHtcbiAgbGV0IG1heCA9IG91dGVyID8gbWF0cml4LmNvbHVtbnMgOiBtYXRyaXguY29sdW1ucyAtIDE7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ29sdW1uIGluZGV4IG91dCBvZiByYW5nZScpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENoZWNrIHRoYXQgdGhlIHByb3ZpZGVkIHZlY3RvciBpcyBhbiBhcnJheSB3aXRoIHRoZSByaWdodCBsZW5ndGhcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXhcbiAqIEBwYXJhbSB7QXJyYXl8TWF0cml4fSB2ZWN0b3JcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUm93VmVjdG9yKG1hdHJpeCwgdmVjdG9yKSB7XG4gIGlmICh2ZWN0b3IudG8xREFycmF5KSB7XG4gICAgdmVjdG9yID0gdmVjdG9yLnRvMURBcnJheSgpO1xuICB9XG4gIGlmICh2ZWN0b3IubGVuZ3RoICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgJ3ZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBjb2x1bW5zJyxcbiAgICApO1xuICB9XG4gIHJldHVybiB2ZWN0b3I7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENoZWNrIHRoYXQgdGhlIHByb3ZpZGVkIHZlY3RvciBpcyBhbiBhcnJheSB3aXRoIHRoZSByaWdodCBsZW5ndGhcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXhcbiAqIEBwYXJhbSB7QXJyYXl8TWF0cml4fSB2ZWN0b3JcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ29sdW1uVmVjdG9yKG1hdHJpeCwgdmVjdG9yKSB7XG4gIGlmICh2ZWN0b3IudG8xREFycmF5KSB7XG4gICAgdmVjdG9yID0gdmVjdG9yLnRvMURBcnJheSgpO1xuICB9XG4gIGlmICh2ZWN0b3IubGVuZ3RoICE9PSBtYXRyaXgucm93cykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd2ZWN0b3Igc2l6ZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2Ygcm93cycpO1xuICB9XG4gIHJldHVybiB2ZWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1Jvd0luZGljZXMobWF0cml4LCByb3dJbmRpY2VzKSB7XG4gIGlmICghaXNBbnlBcnJheShyb3dJbmRpY2VzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JvdyBpbmRpY2VzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93SW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyb3dJbmRpY2VzW2ldIDwgMCB8fCByb3dJbmRpY2VzW2ldID49IG1hdHJpeC5yb3dzKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncm93IGluZGljZXMgYXJlIG91dCBvZiByYW5nZScpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5JbmRpY2VzKG1hdHJpeCwgY29sdW1uSW5kaWNlcykge1xuICBpZiAoIWlzQW55QXJyYXkoY29sdW1uSW5kaWNlcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb2x1bW4gaW5kaWNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY29sdW1uSW5kaWNlc1tpXSA8IDAgfHwgY29sdW1uSW5kaWNlc1tpXSA+PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2NvbHVtbiBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmFuZ2UobWF0cml4LCBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSA1KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2V4cGVjdGVkIDQgYXJndW1lbnRzJyk7XG4gIH1cbiAgY2hlY2tOdW1iZXIoJ3N0YXJ0Um93Jywgc3RhcnRSb3cpO1xuICBjaGVja051bWJlcignZW5kUm93JywgZW5kUm93KTtcbiAgY2hlY2tOdW1iZXIoJ3N0YXJ0Q29sdW1uJywgc3RhcnRDb2x1bW4pO1xuICBjaGVja051bWJlcignZW5kQ29sdW1uJywgZW5kQ29sdW1uKTtcbiAgaWYgKFxuICAgIHN0YXJ0Um93ID4gZW5kUm93IHx8XG4gICAgc3RhcnRDb2x1bW4gPiBlbmRDb2x1bW4gfHxcbiAgICBzdGFydFJvdyA8IDAgfHxcbiAgICBzdGFydFJvdyA+PSBtYXRyaXgucm93cyB8fFxuICAgIGVuZFJvdyA8IDAgfHxcbiAgICBlbmRSb3cgPj0gbWF0cml4LnJvd3MgfHxcbiAgICBzdGFydENvbHVtbiA8IDAgfHxcbiAgICBzdGFydENvbHVtbiA+PSBtYXRyaXguY29sdW1ucyB8fFxuICAgIGVuZENvbHVtbiA8IDAgfHxcbiAgICBlbmRDb2x1bW4gPj0gbWF0cml4LmNvbHVtbnNcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1N1Ym1hdHJpeCBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3QXJyYXkobGVuZ3RoLCB2YWx1ZSA9IDApIHtcbiAgbGV0IGFycmF5ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrTnVtYmVyKG5hbWUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgbnVtYmVyYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTm9uRW1wdHkobWF0cml4KSB7XG4gIGlmIChtYXRyaXguaXNFbXB0eSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbXB0eSBtYXRyaXggaGFzIG5vIGVsZW1lbnRzIHRvIGluZGV4Jyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuaW1wb3J0IHJlc2NhbGUgZnJvbSAnbWwtYXJyYXktcmVzY2FsZSc7XG5cbmltcG9ydCB7IGluc3BlY3RNYXRyaXgsIGluc3BlY3RNYXRyaXhXaXRoT3B0aW9ucyB9IGZyb20gJy4vaW5zcGVjdCc7XG5pbXBvcnQgeyBpbnN0YWxsTWF0aE9wZXJhdGlvbnMgfSBmcm9tICcuL21hdGhPcGVyYXRpb25zJztcbmltcG9ydCB7XG4gIHN1bUJ5Um93LFxuICBzdW1CeUNvbHVtbixcbiAgc3VtQWxsLFxuICBwcm9kdWN0QnlSb3csXG4gIHByb2R1Y3RCeUNvbHVtbixcbiAgcHJvZHVjdEFsbCxcbiAgdmFyaWFuY2VCeVJvdyxcbiAgdmFyaWFuY2VCeUNvbHVtbixcbiAgdmFyaWFuY2VBbGwsXG4gIGNlbnRlckJ5Um93LFxuICBjZW50ZXJCeUNvbHVtbixcbiAgY2VudGVyQWxsLFxuICBzY2FsZUJ5Um93LFxuICBzY2FsZUJ5Q29sdW1uLFxuICBzY2FsZUFsbCxcbiAgZ2V0U2NhbGVCeVJvdyxcbiAgZ2V0U2NhbGVCeUNvbHVtbixcbiAgZ2V0U2NhbGVBbGwsXG59IGZyb20gJy4vc3RhdCc7XG5pbXBvcnQge1xuICBjaGVja1Jvd1ZlY3RvcixcbiAgY2hlY2tSb3dJbmRleCxcbiAgY2hlY2tDb2x1bW5JbmRleCxcbiAgY2hlY2tDb2x1bW5WZWN0b3IsXG4gIGNoZWNrUmFuZ2UsXG4gIGNoZWNrTm9uRW1wdHksXG4gIGNoZWNrUm93SW5kaWNlcyxcbiAgY2hlY2tDb2x1bW5JbmRpY2VzLFxufSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RNYXRyaXgge1xuICBzdGF0aWMgZnJvbTFEQXJyYXkobmV3Um93cywgbmV3Q29sdW1ucywgbmV3RGF0YSkge1xuICAgIGxldCBsZW5ndGggPSBuZXdSb3dzICogbmV3Q29sdW1ucztcbiAgICBpZiAobGVuZ3RoICE9PSBuZXdEYXRhLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2RhdGEgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGdpdmVuIGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobmV3Um93cywgbmV3Q29sdW1ucyk7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgbmV3Um93czsgcm93KyspIHtcbiAgICAgIGZvciAobGV0IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG5ld0NvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgIG5ld01hdHJpeC5zZXQocm93LCBjb2x1bW4sIG5ld0RhdGFbcm93ICogbmV3Q29sdW1ucyArIGNvbHVtbl0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc3RhdGljIHJvd1ZlY3RvcihuZXdEYXRhKSB7XG4gICAgbGV0IHZlY3RvciA9IG5ldyBNYXRyaXgoMSwgbmV3RGF0YS5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3RGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmVjdG9yLnNldCgwLCBpLCBuZXdEYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBjb2x1bW5WZWN0b3IobmV3RGF0YSkge1xuICAgIGxldCB2ZWN0b3IgPSBuZXcgTWF0cml4KG5ld0RhdGEubGVuZ3RoLCAxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0RhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZlY3Rvci5zZXQoaSwgMCwgbmV3RGF0YVtpXSk7XG4gICAgfVxuICAgIHJldHVybiB2ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgemVyb3Mocm93cywgY29sdW1ucykge1xuICAgIHJldHVybiBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICB9XG5cbiAgc3RhdGljIG9uZXMocm93cywgY29sdW1ucykge1xuICAgIHJldHVybiBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpLmZpbGwoMSk7XG4gIH1cblxuICBzdGF0aWMgcmFuZChyb3dzLCBjb2x1bW5zLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcmFuZG9tID0gTWF0aC5yYW5kb20gfSA9IG9wdGlvbnM7XG4gICAgbGV0IG1hdHJpeCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIG1hdHJpeC5zZXQoaSwgaiwgcmFuZG9tKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgc3RhdGljIHJhbmRJbnQocm93cywgY29sdW1ucywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEwMDAsIHJhbmRvbSA9IE1hdGgucmFuZG9tIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtaW4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaW4gbXVzdCBiZSBhbiBpbnRlZ2VyJyk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heCBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICBpZiAobWluID49IG1heCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgnKTtcbiAgICBsZXQgaW50ZXJ2YWwgPSBtYXggLSBtaW47XG4gICAgbGV0IG1hdHJpeCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG1pbiArIE1hdGgucm91bmQocmFuZG9tKCkgKiBpbnRlcnZhbCk7XG4gICAgICAgIG1hdHJpeC5zZXQoaSwgaiwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgc3RhdGljIGV5ZShyb3dzLCBjb2x1bW5zLCB2YWx1ZSkge1xuICAgIGlmIChjb2x1bW5zID09PSB1bmRlZmluZWQpIGNvbHVtbnMgPSByb3dzO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IDE7XG4gICAgbGV0IG1pbiA9IE1hdGgubWluKHJvd3MsIGNvbHVtbnMpO1xuICAgIGxldCBtYXRyaXggPSB0aGlzLnplcm9zKHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgc3RhdGljIGRpYWcoZGF0YSwgcm93cywgY29sdW1ucykge1xuICAgIGxldCBsID0gZGF0YS5sZW5ndGg7XG4gICAgaWYgKHJvd3MgPT09IHVuZGVmaW5lZCkgcm93cyA9IGw7XG4gICAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkgY29sdW1ucyA9IHJvd3M7XG4gICAgbGV0IG1pbiA9IE1hdGgubWluKGwsIHJvd3MsIGNvbHVtbnMpO1xuICAgIGxldCBtYXRyaXggPSB0aGlzLnplcm9zKHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaSwgZGF0YVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgbWluKG1hdHJpeDEsIG1hdHJpeDIpIHtcbiAgICBtYXRyaXgxID0gdGhpcy5jaGVja01hdHJpeChtYXRyaXgxKTtcbiAgICBtYXRyaXgyID0gdGhpcy5jaGVja01hdHJpeChtYXRyaXgyKTtcbiAgICBsZXQgcm93cyA9IG1hdHJpeDEucm93cztcbiAgICBsZXQgY29sdW1ucyA9IG1hdHJpeDEuY29sdW1ucztcbiAgICBsZXQgcmVzdWx0ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgcmVzdWx0LnNldChpLCBqLCBNYXRoLm1pbihtYXRyaXgxLmdldChpLCBqKSwgbWF0cml4Mi5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBtYXgobWF0cml4MSwgbWF0cml4Mikge1xuICAgIG1hdHJpeDEgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDEpO1xuICAgIG1hdHJpeDIgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDIpO1xuICAgIGxldCByb3dzID0gbWF0cml4MS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbWF0cml4MS5jb2x1bW5zO1xuICAgIGxldCByZXN1bHQgPSBuZXcgdGhpcyhyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgcmVzdWx0LnNldChpLCBqLCBNYXRoLm1heChtYXRyaXgxLmdldChpLCBqKSwgbWF0cml4Mi5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja01hdHJpeCh2YWx1ZSkge1xuICAgIHJldHVybiBBYnN0cmFjdE1hdHJpeC5pc01hdHJpeCh2YWx1ZSkgPyB2YWx1ZSA6IG5ldyBNYXRyaXgodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGlzTWF0cml4KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdmFsdWUua2xhc3MgPT09ICdNYXRyaXgnO1xuICB9XG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93cyAqIHRoaXMuY29sdW1ucztcbiAgfVxuXG4gIGFwcGx5KGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBpLCBqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0bzFEQXJyYXkoKSB7XG4gICAgbGV0IGFycmF5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBhcnJheS5wdXNoKHRoaXMuZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgdG8yREFycmF5KCkge1xuICAgIGxldCBjb3B5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29weS5wdXNoKFtdKTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgY29weVtpXS5wdXNoKHRoaXMuZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8yREFycmF5KCk7XG4gIH1cblxuICBpc1Jvd1ZlY3RvcigpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzID09PSAxO1xuICB9XG5cbiAgaXNDb2x1bW5WZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucyA9PT0gMTtcbiAgfVxuXG4gIGlzVmVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDEgfHwgdGhpcy5jb2x1bW5zID09PSAxO1xuICB9XG5cbiAgaXNTcXVhcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93cyA9PT0gdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzID09PSAwIHx8IHRoaXMuY29sdW1ucyA9PT0gMDtcbiAgfVxuXG4gIGlzU3ltbWV0cmljKCkge1xuICAgIGlmICh0aGlzLmlzU3F1YXJlKCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPD0gaTsgaisrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopICE9PSB0aGlzLmdldChqLCBpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzRWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBqID0gMDtcbiAgICBsZXQgcHJldmlvdXNDb2x1bW4gPSAtMTtcbiAgICBsZXQgaXNFY2hlbG9uRm9ybSA9IHRydWU7XG4gICAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoaSA8IHRoaXMucm93cyAmJiBpc0VjaGVsb25Gb3JtKSB7XG4gICAgICBqID0gMDtcbiAgICAgIGNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHdoaWxlIChqIDwgdGhpcy5jb2x1bW5zICYmIGNoZWNrZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLmdldChpLCBqKSA9PT0gMCkge1xuICAgICAgICAgIGorKztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldChpLCBqKSA9PT0gMSAmJiBqID4gcHJldmlvdXNDb2x1bW4pIHtcbiAgICAgICAgICBjaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICBwcmV2aW91c0NvbHVtbiA9IGo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNFY2hlbG9uRm9ybSA9IGZhbHNlO1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBpc0VjaGVsb25Gb3JtO1xuICB9XG5cbiAgaXNSZWR1Y2VkRWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBqID0gMDtcbiAgICBsZXQgcHJldmlvdXNDb2x1bW4gPSAtMTtcbiAgICBsZXQgaXNSZWR1Y2VkRWNoZWxvbkZvcm0gPSB0cnVlO1xuICAgIGxldCBjaGVja2VkID0gZmFsc2U7XG4gICAgd2hpbGUgKGkgPCB0aGlzLnJvd3MgJiYgaXNSZWR1Y2VkRWNoZWxvbkZvcm0pIHtcbiAgICAgIGogPSAwO1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKGogPCB0aGlzLmNvbHVtbnMgJiYgY2hlY2tlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID09PSAwKSB7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0KGksIGopID09PSAxICYmIGogPiBwcmV2aW91c0NvbHVtbikge1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgIHByZXZpb3VzQ29sdW1uID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc1JlZHVjZWRFY2hlbG9uRm9ybSA9IGZhbHNlO1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBrID0gaiArIDE7IGsgPCB0aGlzLnJvd3M7IGsrKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaykgIT09IDApIHtcbiAgICAgICAgICBpc1JlZHVjZWRFY2hlbG9uRm9ybSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBpc1JlZHVjZWRFY2hlbG9uRm9ybTtcbiAgfVxuXG4gIGVjaGVsb25Gb3JtKCkge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLmNsb25lKCk7XG4gICAgbGV0IGggPSAwO1xuICAgIGxldCBrID0gMDtcbiAgICB3aGlsZSAoaCA8IHJlc3VsdC5yb3dzICYmIGsgPCByZXN1bHQuY29sdW1ucykge1xuICAgICAgbGV0IGlNYXggPSBoO1xuICAgICAgZm9yIChsZXQgaSA9IGg7IGkgPCByZXN1bHQucm93czsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHQuZ2V0KGksIGspID4gcmVzdWx0LmdldChpTWF4LCBrKSkge1xuICAgICAgICAgIGlNYXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0LmdldChpTWF4LCBrKSA9PT0gMCkge1xuICAgICAgICBrKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQuc3dhcFJvd3MoaCwgaU1heCk7XG4gICAgICAgIGxldCB0bXAgPSByZXN1bHQuZ2V0KGgsIGspO1xuICAgICAgICBmb3IgKGxldCBqID0gazsgaiA8IHJlc3VsdC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICByZXN1bHQuc2V0KGgsIGosIHJlc3VsdC5nZXQoaCwgaikgLyB0bXApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBoICsgMTsgaSA8IHJlc3VsdC5yb3dzOyBpKyspIHtcbiAgICAgICAgICBsZXQgZmFjdG9yID0gcmVzdWx0LmdldChpLCBrKSAvIHJlc3VsdC5nZXQoaCwgayk7XG4gICAgICAgICAgcmVzdWx0LnNldChpLCBrLCAwKTtcbiAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCByZXN1bHQuY29sdW1uczsgaisrKSB7XG4gICAgICAgICAgICByZXN1bHQuc2V0KGksIGosIHJlc3VsdC5nZXQoaSwgaikgLSByZXN1bHQuZ2V0KGgsIGopICogZmFjdG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaCsrO1xuICAgICAgICBrKys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWR1Y2VkRWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuZWNoZWxvbkZvcm0oKTtcbiAgICBsZXQgbSA9IHJlc3VsdC5jb2x1bW5zO1xuICAgIGxldCBuID0gcmVzdWx0LnJvd3M7XG4gICAgbGV0IGggPSBuIC0gMTtcbiAgICB3aGlsZSAoaCA+PSAwKSB7XG4gICAgICBpZiAocmVzdWx0Lm1heFJvdyhoKSA9PT0gMCkge1xuICAgICAgICBoLS07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcCA9IDA7XG4gICAgICAgIGxldCBwaXZvdCA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAocCA8IG4gJiYgcGl2b3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5nZXQoaCwgcCkgPT09IDEpIHtcbiAgICAgICAgICAgIHBpdm90ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGg7IGkrKykge1xuICAgICAgICAgIGxldCBmYWN0b3IgPSByZXN1bHQuZ2V0KGksIHApO1xuICAgICAgICAgIGZvciAobGV0IGogPSBwOyBqIDwgbTsgaisrKSB7XG4gICAgICAgICAgICBsZXQgdG1wID0gcmVzdWx0LmdldChpLCBqKSAtIGZhY3RvciAqIHJlc3VsdC5nZXQoaCwgaik7XG4gICAgICAgICAgICByZXN1bHQuc2V0KGksIGosIHRtcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGgtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNldCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldCBtZXRob2QgaXMgdW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZ2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICByZXBlYXQob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHJvd3MgPSAxLCBjb2x1bW5zID0gMSB9ID0gb3B0aW9ucztcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocm93cykgfHwgcm93cyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyb3dzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb2x1bW5zKSB8fCBjb2x1bW5zIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICB9XG4gICAgbGV0IG1hdHJpeCA9IG5ldyBNYXRyaXgodGhpcy5yb3dzICogcm93cywgdGhpcy5jb2x1bW5zICogY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIG1hdHJpeC5zZXRTdWJNYXRyaXgodGhpcywgdGhpcy5yb3dzICogaSwgdGhpcy5jb2x1bW5zICogaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBmaWxsKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbmVnKCkge1xuICAgIHJldHVybiB0aGlzLm11bFMoLTEpO1xuICB9XG5cbiAgZ2V0Um93KGluZGV4KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgbGV0IHJvdyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIHJvdy5wdXNoKHRoaXMuZ2V0KGluZGV4LCBpKSk7XG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBnZXRSb3dWZWN0b3IoaW5kZXgpIHtcbiAgICByZXR1cm4gTWF0cml4LnJvd1ZlY3Rvcih0aGlzLmdldFJvdyhpbmRleCkpO1xuICB9XG5cbiAgc2V0Um93KGluZGV4LCBhcnJheSkge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpO1xuICAgIGFycmF5ID0gY2hlY2tSb3dWZWN0b3IodGhpcywgYXJyYXkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0KGluZGV4LCBpLCBhcnJheVtpXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3dhcFJvd3Mocm93MSwgcm93Mikge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93MSk7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBsZXQgdGVtcCA9IHRoaXMuZ2V0KHJvdzEsIGkpO1xuICAgICAgdGhpcy5zZXQocm93MSwgaSwgdGhpcy5nZXQocm93MiwgaSkpO1xuICAgICAgdGhpcy5zZXQocm93MiwgaSwgdGVtcCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0Q29sdW1uKGluZGV4KSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgbGV0IGNvbHVtbiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGNvbHVtbi5wdXNoKHRoaXMuZ2V0KGksIGluZGV4KSk7XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICBnZXRDb2x1bW5WZWN0b3IoaW5kZXgpIHtcbiAgICByZXR1cm4gTWF0cml4LmNvbHVtblZlY3Rvcih0aGlzLmdldENvbHVtbihpbmRleCkpO1xuICB9XG5cbiAgc2V0Q29sdW1uKGluZGV4LCBhcnJheSkge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgaW5kZXgpO1xuICAgIGFycmF5ID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgYXJyYXkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0KGksIGluZGV4LCBhcnJheVtpXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3dhcENvbHVtbnMoY29sdW1uMSwgY29sdW1uMikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uMSk7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBsZXQgdGVtcCA9IHRoaXMuZ2V0KGksIGNvbHVtbjEpO1xuICAgICAgdGhpcy5zZXQoaSwgY29sdW1uMSwgdGhpcy5nZXQoaSwgY29sdW1uMikpO1xuICAgICAgdGhpcy5zZXQoaSwgY29sdW1uMiwgdGVtcCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkUm93VmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrUm93VmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIHZlY3RvcltqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3ViUm93VmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrUm93VmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIHZlY3RvcltqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbXVsUm93VmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrUm93VmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAqIHZlY3RvcltqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZGl2Um93VmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrUm93VmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAvIHZlY3RvcltqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkQ29sdW1uVmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIHZlY3RvcltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3ViQ29sdW1uVmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIHZlY3RvcltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbXVsQ29sdW1uVmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAqIHZlY3RvcltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZGl2Q29sdW1uVmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAvIHZlY3RvcltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbXVsUm93KGluZGV4LCB2YWx1ZSkge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0KGluZGV4LCBpLCB0aGlzLmdldChpbmRleCwgaSkgKiB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbXVsQ29sdW1uKGluZGV4LCB2YWx1ZSkge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgaW5kZXgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0KGksIGluZGV4LCB0aGlzLmdldChpLCBpbmRleCkgKiB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbWF4KGJ5KSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGNvbnN0IG1heCA9IG5ldyBBcnJheSh0aGlzLnJvd3MpLmZpbGwoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTtcbiAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyByb3crKykge1xuICAgICAgICAgIGZvciAobGV0IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMuY29sdW1uczsgY29sdW1uKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldChyb3csIGNvbHVtbikgPiBtYXhbcm93XSkge1xuICAgICAgICAgICAgICBtYXhbcm93XSA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgY29uc3QgbWF4ID0gbmV3IEFycmF5KHRoaXMuY29sdW1ucykuZmlsbChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA+IG1heFtjb2x1bW5dKSB7XG4gICAgICAgICAgICAgIG1heFtjb2x1bW5dID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgbGV0IG1heCA9IHRoaXMuZ2V0KDAsIDApO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA+IG1heCkge1xuICAgICAgICAgICAgICBtYXggPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIG1heEluZGV4KCkge1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBsZXQgaWR4ID0gWzAsIDBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID4gdikge1xuICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgICAgIGlkeFsxXSA9IGo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1pbihieSkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGNvbnN0IG1pbiA9IG5ldyBBcnJheSh0aGlzLnJvd3MpLmZpbGwoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcbiAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyByb3crKykge1xuICAgICAgICAgIGZvciAobGV0IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMuY29sdW1uczsgY29sdW1uKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldChyb3csIGNvbHVtbikgPCBtaW5bcm93XSkge1xuICAgICAgICAgICAgICBtaW5bcm93XSA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgY29uc3QgbWluID0gbmV3IEFycmF5KHRoaXMuY29sdW1ucykuZmlsbChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA8IG1pbltjb2x1bW5dKSB7XG4gICAgICAgICAgICAgIG1pbltjb2x1bW5dID0gdGhpcy5nZXQocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgbGV0IG1pbiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgY29sdW1uKSA8IG1pbikge1xuICAgICAgICAgICAgICBtaW4gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIG1pbkluZGV4KCkge1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBsZXQgaWR4ID0gWzAsIDBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopIDwgdikge1xuICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgICAgIGlkeFsxXSA9IGo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1heFJvdyhyb3cpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdyk7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KHJvdywgMCk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgaSkgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChyb3csIGkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1heFJvd0luZGV4KHJvdykge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93KTtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQocm93LCAwKTtcbiAgICBsZXQgaWR4ID0gW3JvdywgMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgaSkgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChyb3csIGkpO1xuICAgICAgICBpZHhbMV0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluUm93KHJvdykge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQocm93LCAwKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWluUm93SW5kZXgocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGxldCBpZHggPSBbcm93LCAwXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICAgIGlkeFsxXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBtYXhDb2x1bW4oY29sdW1uKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4pO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCBjb2x1bW4pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChpLCBjb2x1bW4pID4gdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQoaSwgY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICBtYXhDb2x1bW5JbmRleChjb2x1bW4pIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbik7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIGNvbHVtbik7XG4gICAgbGV0IGlkeCA9IFswLCBjb2x1bW5dO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChpLCBjb2x1bW4pID4gdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQoaSwgY29sdW1uKTtcbiAgICAgICAgaWR4WzBdID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1pbkNvbHVtbihjb2x1bW4pIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbik7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIGNvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPCB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1pbkNvbHVtbkluZGV4KGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBsZXQgaWR4ID0gWzAsIGNvbHVtbl07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPCB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgZGlhZygpIHtcbiAgICBsZXQgbWluID0gTWF0aC5taW4odGhpcy5yb3dzLCB0aGlzLmNvbHVtbnMpO1xuICAgIGxldCBkaWFnID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgZGlhZy5wdXNoKHRoaXMuZ2V0KGksIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpYWc7XG4gIH1cblxuICBub3JtKHR5cGUgPSAnZnJvYmVuaXVzJykge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGlmICh0eXBlID09PSAnbWF4Jykge1xuICAgICAgcmV0dXJuIHRoaXMubWF4KCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZnJvYmVuaXVzJykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgdGhpcy5nZXQoaSwgaikgKiB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE1hdGguc3FydChyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgdW5rbm93biBub3JtIHR5cGU6ICR7dHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBjdW11bGF0aXZlU3VtKCkge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgc3VtICs9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICB0aGlzLnNldChpLCBqLCBzdW0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRvdCh2ZWN0b3IyKSB7XG4gICAgaWYgKEFic3RyYWN0TWF0cml4LmlzTWF0cml4KHZlY3RvcjIpKSB2ZWN0b3IyID0gdmVjdG9yMi50bzFEQXJyYXkoKTtcbiAgICBsZXQgdmVjdG9yMSA9IHRoaXMudG8xREFycmF5KCk7XG4gICAgaWYgKHZlY3RvcjEubGVuZ3RoICE9PSB2ZWN0b3IyLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZlY3RvcnMgZG8gbm90IGhhdmUgdGhlIHNhbWUgc2l6ZScpO1xuICAgIH1cbiAgICBsZXQgZG90ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlY3RvcjEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvdCArPSB2ZWN0b3IxW2ldICogdmVjdG9yMltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGRvdDtcbiAgfVxuXG4gIG1tdWwob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG5cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IHRoaXMuY29sdW1ucztcbiAgICBsZXQgcCA9IG90aGVyLmNvbHVtbnM7XG5cbiAgICBsZXQgcmVzdWx0ID0gbmV3IE1hdHJpeChtLCBwKTtcblxuICAgIGxldCBCY29saiA9IG5ldyBGbG9hdDY0QXJyYXkobik7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBwOyBqKyspIHtcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAgIEJjb2xqW2tdID0gb3RoZXIuZ2V0KGssIGopO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAgICAgcyArPSB0aGlzLmdldChpLCBrKSAqIEJjb2xqW2tdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnNldChpLCBqLCBzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0cmFzc2VuMngyKG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KDIsIDIpO1xuICAgIGNvbnN0IGExMSA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGNvbnN0IGIxMSA9IG90aGVyLmdldCgwLCAwKTtcbiAgICBjb25zdCBhMTIgPSB0aGlzLmdldCgwLCAxKTtcbiAgICBjb25zdCBiMTIgPSBvdGhlci5nZXQoMCwgMSk7XG4gICAgY29uc3QgYTIxID0gdGhpcy5nZXQoMSwgMCk7XG4gICAgY29uc3QgYjIxID0gb3RoZXIuZ2V0KDEsIDApO1xuICAgIGNvbnN0IGEyMiA9IHRoaXMuZ2V0KDEsIDEpO1xuICAgIGNvbnN0IGIyMiA9IG90aGVyLmdldCgxLCAxKTtcblxuICAgIC8vIENvbXB1dGUgaW50ZXJtZWRpYXRlIHZhbHVlcy5cbiAgICBjb25zdCBtMSA9IChhMTEgKyBhMjIpICogKGIxMSArIGIyMik7XG4gICAgY29uc3QgbTIgPSAoYTIxICsgYTIyKSAqIGIxMTtcbiAgICBjb25zdCBtMyA9IGExMSAqIChiMTIgLSBiMjIpO1xuICAgIGNvbnN0IG00ID0gYTIyICogKGIyMSAtIGIxMSk7XG4gICAgY29uc3QgbTUgPSAoYTExICsgYTEyKSAqIGIyMjtcbiAgICBjb25zdCBtNiA9IChhMjEgLSBhMTEpICogKGIxMSArIGIxMik7XG4gICAgY29uc3QgbTcgPSAoYTEyIC0gYTIyKSAqIChiMjEgKyBiMjIpO1xuXG4gICAgLy8gQ29tYmluZSBpbnRlcm1lZGlhdGUgdmFsdWVzIGludG8gdGhlIG91dHB1dC5cbiAgICBjb25zdCBjMDAgPSBtMSArIG00IC0gbTUgKyBtNztcbiAgICBjb25zdCBjMDEgPSBtMyArIG01O1xuICAgIGNvbnN0IGMxMCA9IG0yICsgbTQ7XG4gICAgY29uc3QgYzExID0gbTEgLSBtMiArIG0zICsgbTY7XG5cbiAgICByZXN1bHQuc2V0KDAsIDAsIGMwMCk7XG4gICAgcmVzdWx0LnNldCgwLCAxLCBjMDEpO1xuICAgIHJlc3VsdC5zZXQoMSwgMCwgYzEwKTtcbiAgICByZXN1bHQuc2V0KDEsIDEsIGMxMSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0cmFzc2VuM3gzKG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KDMsIDMpO1xuXG4gICAgY29uc3QgYTAwID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgY29uc3QgYTAxID0gdGhpcy5nZXQoMCwgMSk7XG4gICAgY29uc3QgYTAyID0gdGhpcy5nZXQoMCwgMik7XG4gICAgY29uc3QgYTEwID0gdGhpcy5nZXQoMSwgMCk7XG4gICAgY29uc3QgYTExID0gdGhpcy5nZXQoMSwgMSk7XG4gICAgY29uc3QgYTEyID0gdGhpcy5nZXQoMSwgMik7XG4gICAgY29uc3QgYTIwID0gdGhpcy5nZXQoMiwgMCk7XG4gICAgY29uc3QgYTIxID0gdGhpcy5nZXQoMiwgMSk7XG4gICAgY29uc3QgYTIyID0gdGhpcy5nZXQoMiwgMik7XG5cbiAgICBjb25zdCBiMDAgPSBvdGhlci5nZXQoMCwgMCk7XG4gICAgY29uc3QgYjAxID0gb3RoZXIuZ2V0KDAsIDEpO1xuICAgIGNvbnN0IGIwMiA9IG90aGVyLmdldCgwLCAyKTtcbiAgICBjb25zdCBiMTAgPSBvdGhlci5nZXQoMSwgMCk7XG4gICAgY29uc3QgYjExID0gb3RoZXIuZ2V0KDEsIDEpO1xuICAgIGNvbnN0IGIxMiA9IG90aGVyLmdldCgxLCAyKTtcbiAgICBjb25zdCBiMjAgPSBvdGhlci5nZXQoMiwgMCk7XG4gICAgY29uc3QgYjIxID0gb3RoZXIuZ2V0KDIsIDEpO1xuICAgIGNvbnN0IGIyMiA9IG90aGVyLmdldCgyLCAyKTtcblxuICAgIGNvbnN0IG0xID0gKGEwMCArIGEwMSArIGEwMiAtIGExMCAtIGExMSAtIGEyMSAtIGEyMikgKiBiMTE7XG4gICAgY29uc3QgbTIgPSAoYTAwIC0gYTEwKSAqICgtYjAxICsgYjExKTtcbiAgICBjb25zdCBtMyA9IGExMSAqICgtYjAwICsgYjAxICsgYjEwIC0gYjExIC0gYjEyIC0gYjIwICsgYjIyKTtcbiAgICBjb25zdCBtNCA9ICgtYTAwICsgYTEwICsgYTExKSAqIChiMDAgLSBiMDEgKyBiMTEpO1xuICAgIGNvbnN0IG01ID0gKGExMCArIGExMSkgKiAoLWIwMCArIGIwMSk7XG4gICAgY29uc3QgbTYgPSBhMDAgKiBiMDA7XG4gICAgY29uc3QgbTcgPSAoLWEwMCArIGEyMCArIGEyMSkgKiAoYjAwIC0gYjAyICsgYjEyKTtcbiAgICBjb25zdCBtOCA9ICgtYTAwICsgYTIwKSAqIChiMDIgLSBiMTIpO1xuICAgIGNvbnN0IG05ID0gKGEyMCArIGEyMSkgKiAoLWIwMCArIGIwMik7XG4gICAgY29uc3QgbTEwID0gKGEwMCArIGEwMSArIGEwMiAtIGExMSAtIGExMiAtIGEyMCAtIGEyMSkgKiBiMTI7XG4gICAgY29uc3QgbTExID0gYTIxICogKC1iMDAgKyBiMDIgKyBiMTAgLSBiMTEgLSBiMTIgLSBiMjAgKyBiMjEpO1xuICAgIGNvbnN0IG0xMiA9ICgtYTAyICsgYTIxICsgYTIyKSAqIChiMTEgKyBiMjAgLSBiMjEpO1xuICAgIGNvbnN0IG0xMyA9IChhMDIgLSBhMjIpICogKGIxMSAtIGIyMSk7XG4gICAgY29uc3QgbTE0ID0gYTAyICogYjIwO1xuICAgIGNvbnN0IG0xNSA9IChhMjEgKyBhMjIpICogKC1iMjAgKyBiMjEpO1xuICAgIGNvbnN0IG0xNiA9ICgtYTAyICsgYTExICsgYTEyKSAqIChiMTIgKyBiMjAgLSBiMjIpO1xuICAgIGNvbnN0IG0xNyA9IChhMDIgLSBhMTIpICogKGIxMiAtIGIyMik7XG4gICAgY29uc3QgbTE4ID0gKGExMSArIGExMikgKiAoLWIyMCArIGIyMik7XG4gICAgY29uc3QgbTE5ID0gYTAxICogYjEwO1xuICAgIGNvbnN0IG0yMCA9IGExMiAqIGIyMTtcbiAgICBjb25zdCBtMjEgPSBhMTAgKiBiMDI7XG4gICAgY29uc3QgbTIyID0gYTIwICogYjAxO1xuICAgIGNvbnN0IG0yMyA9IGEyMiAqIGIyMjtcblxuICAgIGNvbnN0IGMwMCA9IG02ICsgbTE0ICsgbTE5O1xuICAgIGNvbnN0IGMwMSA9IG0xICsgbTQgKyBtNSArIG02ICsgbTEyICsgbTE0ICsgbTE1O1xuICAgIGNvbnN0IGMwMiA9IG02ICsgbTcgKyBtOSArIG0xMCArIG0xNCArIG0xNiArIG0xODtcbiAgICBjb25zdCBjMTAgPSBtMiArIG0zICsgbTQgKyBtNiArIG0xNCArIG0xNiArIG0xNztcbiAgICBjb25zdCBjMTEgPSBtMiArIG00ICsgbTUgKyBtNiArIG0yMDtcbiAgICBjb25zdCBjMTIgPSBtMTQgKyBtMTYgKyBtMTcgKyBtMTggKyBtMjE7XG4gICAgY29uc3QgYzIwID0gbTYgKyBtNyArIG04ICsgbTExICsgbTEyICsgbTEzICsgbTE0O1xuICAgIGNvbnN0IGMyMSA9IG0xMiArIG0xMyArIG0xNCArIG0xNSArIG0yMjtcbiAgICBjb25zdCBjMjIgPSBtNiArIG03ICsgbTggKyBtOSArIG0yMztcblxuICAgIHJlc3VsdC5zZXQoMCwgMCwgYzAwKTtcbiAgICByZXN1bHQuc2V0KDAsIDEsIGMwMSk7XG4gICAgcmVzdWx0LnNldCgwLCAyLCBjMDIpO1xuICAgIHJlc3VsdC5zZXQoMSwgMCwgYzEwKTtcbiAgICByZXN1bHQuc2V0KDEsIDEsIGMxMSk7XG4gICAgcmVzdWx0LnNldCgxLCAyLCBjMTIpO1xuICAgIHJlc3VsdC5zZXQoMiwgMCwgYzIwKTtcbiAgICByZXN1bHQuc2V0KDIsIDEsIGMyMSk7XG4gICAgcmVzdWx0LnNldCgyLCAyLCBjMjIpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBtbXVsU3RyYXNzZW4oeSkge1xuICAgIHkgPSBNYXRyaXguY2hlY2tNYXRyaXgoeSk7XG4gICAgbGV0IHggPSB0aGlzLmNsb25lKCk7XG4gICAgbGV0IHIxID0geC5yb3dzO1xuICAgIGxldCBjMSA9IHguY29sdW1ucztcbiAgICBsZXQgcjIgPSB5LnJvd3M7XG4gICAgbGV0IGMyID0geS5jb2x1bW5zO1xuICAgIGlmIChjMSAhPT0gcjIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBNdWx0aXBseWluZyAke3IxfSB4ICR7YzF9IGFuZCAke3IyfSB4ICR7YzJ9IG1hdHJpeDogZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUHV0IGEgbWF0cml4IGludG8gdGhlIHRvcCBsZWZ0IG9mIGEgbWF0cml4IG9mIHplcm9zLlxuICAgIC8vIGByb3dzYCBhbmQgYGNvbHNgIGFyZSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgb3V0cHV0IG1hdHJpeC5cbiAgICBmdW5jdGlvbiBlbWJlZChtYXQsIHJvd3MsIGNvbHMpIHtcbiAgICAgIGxldCByID0gbWF0LnJvd3M7XG4gICAgICBsZXQgYyA9IG1hdC5jb2x1bW5zO1xuICAgICAgaWYgKHIgPT09IHJvd3MgJiYgYyA9PT0gY29scykge1xuICAgICAgICByZXR1cm4gbWF0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHJlc3VsdGF0ID0gQWJzdHJhY3RNYXRyaXguemVyb3Mocm93cywgY29scyk7XG4gICAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KG1hdCwgMCwgMCk7XG4gICAgICAgIHJldHVybiByZXN1bHRhdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgYm90aCBtYXRyaWNlcyBhcmUgdGhlIHNhbWUgc2l6ZS5cbiAgICAvLyBUaGlzIGlzIGV4Y2x1c2l2ZWx5IGZvciBzaW1wbGljaXR5OlxuICAgIC8vIHRoaXMgYWxnb3JpdGhtIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRoIG1hdHJpY2VzIG9mIGRpZmZlcmVudCBzaXplcy5cblxuICAgIGxldCByID0gTWF0aC5tYXgocjEsIHIyKTtcbiAgICBsZXQgYyA9IE1hdGgubWF4KGMxLCBjMik7XG4gICAgeCA9IGVtYmVkKHgsIHIsIGMpO1xuICAgIHkgPSBlbWJlZCh5LCByLCBjKTtcblxuICAgIC8vIE91ciByZWN1cnNpdmUgbXVsdGlwbGljYXRpb24gZnVuY3Rpb24uXG4gICAgZnVuY3Rpb24gYmxvY2tNdWx0KGEsIGIsIHJvd3MsIGNvbHMpIHtcbiAgICAgIC8vIEZvciBzbWFsbCBtYXRyaWNlcywgcmVzb3J0IHRvIG5haXZlIG11bHRpcGxpY2F0aW9uLlxuICAgICAgaWYgKHJvd3MgPD0gNTEyIHx8IGNvbHMgPD0gNTEyKSB7XG4gICAgICAgIHJldHVybiBhLm1tdWwoYik7IC8vIGEgaXMgZXF1aXZhbGVudCB0byB0aGlzXG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IGR5bmFtaWMgcGFkZGluZy5cbiAgICAgIGlmIChyb3dzICUgMiA9PT0gMSAmJiBjb2xzICUgMiA9PT0gMSkge1xuICAgICAgICBhID0gZW1iZWQoYSwgcm93cyArIDEsIGNvbHMgKyAxKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MgKyAxLCBjb2xzICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKHJvd3MgJSAyID09PSAxKSB7XG4gICAgICAgIGEgPSBlbWJlZChhLCByb3dzICsgMSwgY29scyk7XG4gICAgICAgIGIgPSBlbWJlZChiLCByb3dzICsgMSwgY29scyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHMgJSAyID09PSAxKSB7XG4gICAgICAgIGEgPSBlbWJlZChhLCByb3dzLCBjb2xzICsgMSk7XG4gICAgICAgIGIgPSBlbWJlZChiLCByb3dzLCBjb2xzICsgMSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBoYWxmUm93cyA9IHBhcnNlSW50KGEucm93cyAvIDIsIDEwKTtcbiAgICAgIGxldCBoYWxmQ29scyA9IHBhcnNlSW50KGEuY29sdW1ucyAvIDIsIDEwKTtcbiAgICAgIC8vIFN1YmRpdmlkZSBpbnB1dCBtYXRyaWNlcy5cbiAgICAgIGxldCBhMTEgPSBhLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIDAsIGhhbGZDb2xzIC0gMSk7XG4gICAgICBsZXQgYjExID0gYi5zdWJNYXRyaXgoMCwgaGFsZlJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuXG4gICAgICBsZXQgYTEyID0gYS5zdWJNYXRyaXgoMCwgaGFsZlJvd3MgLSAxLCBoYWxmQ29scywgYS5jb2x1bW5zIC0gMSk7XG4gICAgICBsZXQgYjEyID0gYi5zdWJNYXRyaXgoMCwgaGFsZlJvd3MgLSAxLCBoYWxmQ29scywgYi5jb2x1bW5zIC0gMSk7XG5cbiAgICAgIGxldCBhMjEgPSBhLnN1Yk1hdHJpeChoYWxmUm93cywgYS5yb3dzIC0gMSwgMCwgaGFsZkNvbHMgLSAxKTtcbiAgICAgIGxldCBiMjEgPSBiLnN1Yk1hdHJpeChoYWxmUm93cywgYi5yb3dzIC0gMSwgMCwgaGFsZkNvbHMgLSAxKTtcblxuICAgICAgbGV0IGEyMiA9IGEuc3ViTWF0cml4KGhhbGZSb3dzLCBhLnJvd3MgLSAxLCBoYWxmQ29scywgYS5jb2x1bW5zIC0gMSk7XG4gICAgICBsZXQgYjIyID0gYi5zdWJNYXRyaXgoaGFsZlJvd3MsIGIucm93cyAtIDEsIGhhbGZDb2xzLCBiLmNvbHVtbnMgLSAxKTtcblxuICAgICAgLy8gQ29tcHV0ZSBpbnRlcm1lZGlhdGUgdmFsdWVzLlxuICAgICAgbGV0IG0xID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYTExLCBhMjIpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjExLCBiMjIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuICAgICAgbGV0IG0yID0gYmxvY2tNdWx0KEFic3RyYWN0TWF0cml4LmFkZChhMjEsIGEyMiksIGIxMSwgaGFsZlJvd3MsIGhhbGZDb2xzKTtcbiAgICAgIGxldCBtMyA9IGJsb2NrTXVsdChhMTEsIEFic3RyYWN0TWF0cml4LnN1YihiMTIsIGIyMiksIGhhbGZSb3dzLCBoYWxmQ29scyk7XG4gICAgICBsZXQgbTQgPSBibG9ja011bHQoYTIyLCBBYnN0cmFjdE1hdHJpeC5zdWIoYjIxLCBiMTEpLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG01ID0gYmxvY2tNdWx0KEFic3RyYWN0TWF0cml4LmFkZChhMTEsIGExMiksIGIyMiwgaGFsZlJvd3MsIGhhbGZDb2xzKTtcbiAgICAgIGxldCBtNiA9IGJsb2NrTXVsdChcbiAgICAgICAgQWJzdHJhY3RNYXRyaXguc3ViKGEyMSwgYTExKSxcbiAgICAgICAgQWJzdHJhY3RNYXRyaXguYWRkKGIxMSwgYjEyKSxcbiAgICAgICAgaGFsZlJvd3MsXG4gICAgICAgIGhhbGZDb2xzLFxuICAgICAgKTtcbiAgICAgIGxldCBtNyA9IGJsb2NrTXVsdChcbiAgICAgICAgQWJzdHJhY3RNYXRyaXguc3ViKGExMiwgYTIyKSxcbiAgICAgICAgQWJzdHJhY3RNYXRyaXguYWRkKGIyMSwgYjIyKSxcbiAgICAgICAgaGFsZlJvd3MsXG4gICAgICAgIGhhbGZDb2xzLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29tYmluZSBpbnRlcm1lZGlhdGUgdmFsdWVzIGludG8gdGhlIG91dHB1dC5cbiAgICAgIGxldCBjMTEgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTEsIG00KTtcbiAgICAgIGMxMS5zdWIobTUpO1xuICAgICAgYzExLmFkZChtNyk7XG4gICAgICBsZXQgYzEyID0gQWJzdHJhY3RNYXRyaXguYWRkKG0zLCBtNSk7XG4gICAgICBsZXQgYzIxID0gQWJzdHJhY3RNYXRyaXguYWRkKG0yLCBtNCk7XG4gICAgICBsZXQgYzIyID0gQWJzdHJhY3RNYXRyaXguc3ViKG0xLCBtMik7XG4gICAgICBjMjIuYWRkKG0zKTtcbiAgICAgIGMyMi5hZGQobTYpO1xuXG4gICAgICAvLyBDcm9wIG91dHB1dCB0byB0aGUgZGVzaXJlZCBzaXplICh1bmRvIGR5bmFtaWMgcGFkZGluZykuXG4gICAgICBsZXQgcmVzdWx0YXQgPSBBYnN0cmFjdE1hdHJpeC56ZXJvcygyICogYzExLnJvd3MsIDIgKiBjMTEuY29sdW1ucyk7XG4gICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChjMTEsIDAsIDApO1xuICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgoYzEyLCBjMTEucm93cywgMCk7XG4gICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChjMjEsIDAsIGMxMS5jb2x1bW5zKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMyMiwgYzExLnJvd3MsIGMxMS5jb2x1bW5zKTtcbiAgICAgIHJldHVybiByZXN1bHRhdC5zdWJNYXRyaXgoMCwgcm93cyAtIDEsIDAsIGNvbHMgLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2tNdWx0KHgsIHksIHIsIGMpO1xuICB9XG5cbiAgc2NhbGVSb3dzKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyBtaW4gPSAwLCBtYXggPSAxIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWF4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAobWluID49IG1heCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgnKTtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3coaSk7XG4gICAgICBpZiAocm93Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzY2FsZShyb3csIHsgbWluLCBtYXgsIG91dHB1dDogcm93IH0pO1xuICAgICAgfVxuICAgICAgbmV3TWF0cml4LnNldFJvdyhpLCByb3cpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc2NhbGVDb2x1bW5zKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyBtaW4gPSAwLCBtYXggPSAxIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWF4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAobWluID49IG1heCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgnKTtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW4oaSk7XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCkge1xuICAgICAgICByZXNjYWxlKGNvbHVtbiwge1xuICAgICAgICAgIG1pbjogbWluLFxuICAgICAgICAgIG1heDogbWF4LFxuICAgICAgICAgIG91dHB1dDogY29sdW1uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG5ld01hdHJpeC5zZXRDb2x1bW4oaSwgY29sdW1uKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIGZsaXBSb3dzKCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguY2VpbCh0aGlzLmNvbHVtbnMgLyAyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1pZGRsZTsgaisrKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICBsZXQgbGFzdCA9IHRoaXMuZ2V0KGksIHRoaXMuY29sdW1ucyAtIDEgLSBqKTtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgbGFzdCk7XG4gICAgICAgIHRoaXMuc2V0KGksIHRoaXMuY29sdW1ucyAtIDEgLSBqLCBmaXJzdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmxpcENvbHVtbnMoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5jZWlsKHRoaXMucm93cyAvIDIpO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWlkZGxlOyBpKyspIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIGxldCBsYXN0ID0gdGhpcy5nZXQodGhpcy5yb3dzIC0gMSAtIGksIGopO1xuICAgICAgICB0aGlzLnNldChpLCBqLCBsYXN0KTtcbiAgICAgICAgdGhpcy5zZXQodGhpcy5yb3dzIC0gMSAtIGksIGosIGZpcnN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBrcm9uZWNrZXJQcm9kdWN0KG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuXG4gICAgbGV0IG0gPSB0aGlzLnJvd3M7XG4gICAgbGV0IG4gPSB0aGlzLmNvbHVtbnM7XG4gICAgbGV0IHAgPSBvdGhlci5yb3dzO1xuICAgIGxldCBxID0gb3RoZXIuY29sdW1ucztcblxuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KG0gKiBwLCBuICogcSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcDsgaysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBxOyBsKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQocCAqIGkgKyBrLCBxICogaiArIGwsIHRoaXMuZ2V0KGksIGopICogb3RoZXIuZ2V0KGssIGwpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGtyb25lY2tlclN1bShvdGhlcikge1xuICAgIG90aGVyID0gTWF0cml4LmNoZWNrTWF0cml4KG90aGVyKTtcbiAgICBpZiAoIXRoaXMuaXNTcXVhcmUoKSB8fCAhb3RoZXIuaXNTcXVhcmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLcm9uZWNrZXIgU3VtIG5lZWRzIHR3byBTcXVhcmUgTWF0cmljZXMnKTtcbiAgICB9XG4gICAgbGV0IG0gPSB0aGlzLnJvd3M7XG4gICAgbGV0IG4gPSBvdGhlci5yb3dzO1xuICAgIGxldCBBeEkgPSB0aGlzLmtyb25lY2tlclByb2R1Y3QoTWF0cml4LmV5ZShuLCBuKSk7XG4gICAgbGV0IEl4QiA9IE1hdHJpeC5leWUobSwgbSkua3JvbmVja2VyUHJvZHVjdChvdGhlcik7XG4gICAgcmV0dXJuIEF4SS5hZGQoSXhCKTtcbiAgfVxuXG4gIHRyYW5zcG9zZSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gbmV3IE1hdHJpeCh0aGlzLmNvbHVtbnMsIHRoaXMucm93cyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGosIGksIHRoaXMuZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNvcnRSb3dzKGNvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVOdW1iZXJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXRSb3coaSwgdGhpcy5nZXRSb3coaSkuc29ydChjb21wYXJlRnVuY3Rpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzb3J0Q29sdW1ucyhjb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlTnVtYmVycykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0Q29sdW1uKGksIHRoaXMuZ2V0Q29sdW1uKGkpLnNvcnQoY29tcGFyZUZ1bmN0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3ViTWF0cml4KHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHtcbiAgICBjaGVja1JhbmdlKHRoaXMsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KFxuICAgICAgZW5kUm93IC0gc3RhcnRSb3cgKyAxLFxuICAgICAgZW5kQ29sdW1uIC0gc3RhcnRDb2x1bW4gKyAxLFxuICAgICk7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0Um93OyBpIDw9IGVuZFJvdzsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gc3RhcnRDb2x1bW47IGogPD0gZW5kQ29sdW1uOyBqKyspIHtcbiAgICAgICAgbmV3TWF0cml4LnNldChpIC0gc3RhcnRSb3csIGogLSBzdGFydENvbHVtbiwgdGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc3ViTWF0cml4Um93KGluZGljZXMsIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHtcbiAgICBpZiAoc3RhcnRDb2x1bW4gPT09IHVuZGVmaW5lZCkgc3RhcnRDb2x1bW4gPSAwO1xuICAgIGlmIChlbmRDb2x1bW4gPT09IHVuZGVmaW5lZCkgZW5kQ29sdW1uID0gdGhpcy5jb2x1bW5zIC0gMTtcbiAgICBpZiAoXG4gICAgICBzdGFydENvbHVtbiA+IGVuZENvbHVtbiB8fFxuICAgICAgc3RhcnRDb2x1bW4gPCAwIHx8XG4gICAgICBzdGFydENvbHVtbiA+PSB0aGlzLmNvbHVtbnMgfHxcbiAgICAgIGVuZENvbHVtbiA8IDAgfHxcbiAgICAgIGVuZENvbHVtbiA+PSB0aGlzLmNvbHVtbnNcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBcmd1bWVudCBvdXQgb2YgcmFuZ2UnKTtcbiAgICB9XG5cbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChpbmRpY2VzLmxlbmd0aCwgZW5kQ29sdW1uIC0gc3RhcnRDb2x1bW4gKyAxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBzdGFydENvbHVtbjsgaiA8PSBlbmRDb2x1bW47IGorKykge1xuICAgICAgICBpZiAoaW5kaWNlc1tpXSA8IDAgfHwgaW5kaWNlc1tpXSA+PSB0aGlzLnJvd3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUm93IGluZGV4IG91dCBvZiByYW5nZTogJHtpbmRpY2VzW2ldfWApO1xuICAgICAgICB9XG4gICAgICAgIG5ld01hdHJpeC5zZXQoaSwgaiAtIHN0YXJ0Q29sdW1uLCB0aGlzLmdldChpbmRpY2VzW2ldLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdWJNYXRyaXhDb2x1bW4oaW5kaWNlcywgc3RhcnRSb3csIGVuZFJvdykge1xuICAgIGlmIChzdGFydFJvdyA9PT0gdW5kZWZpbmVkKSBzdGFydFJvdyA9IDA7XG4gICAgaWYgKGVuZFJvdyA9PT0gdW5kZWZpbmVkKSBlbmRSb3cgPSB0aGlzLnJvd3MgLSAxO1xuICAgIGlmIChcbiAgICAgIHN0YXJ0Um93ID4gZW5kUm93IHx8XG4gICAgICBzdGFydFJvdyA8IDAgfHxcbiAgICAgIHN0YXJ0Um93ID49IHRoaXMucm93cyB8fFxuICAgICAgZW5kUm93IDwgMCB8fFxuICAgICAgZW5kUm93ID49IHRoaXMucm93c1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0FyZ3VtZW50IG91dCBvZiByYW5nZScpO1xuICAgIH1cblxuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KGVuZFJvdyAtIHN0YXJ0Um93ICsgMSwgaW5kaWNlcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Um93OyBqIDw9IGVuZFJvdzsgaisrKSB7XG4gICAgICAgIGlmIChpbmRpY2VzW2ldIDwgMCB8fCBpbmRpY2VzW2ldID49IHRoaXMuY29sdW1ucykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlOiAke2luZGljZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TWF0cml4LnNldChqIC0gc3RhcnRSb3csIGksIHRoaXMuZ2V0KGosIGluZGljZXNbaV0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIHNldFN1Yk1hdHJpeChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbHVtbikge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmIChtYXRyaXguaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbGV0IGVuZFJvdyA9IHN0YXJ0Um93ICsgbWF0cml4LnJvd3MgLSAxO1xuICAgIGxldCBlbmRDb2x1bW4gPSBzdGFydENvbHVtbiArIG1hdHJpeC5jb2x1bW5zIC0gMTtcbiAgICBjaGVja1JhbmdlKHRoaXMsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KHN0YXJ0Um93ICsgaSwgc3RhcnRDb2x1bW4gKyBqLCBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZWxlY3Rpb24ocm93SW5kaWNlcywgY29sdW1uSW5kaWNlcykge1xuICAgIGNoZWNrUm93SW5kaWNlcyh0aGlzLCByb3dJbmRpY2VzKTtcbiAgICBjaGVja0NvbHVtbkluZGljZXModGhpcywgY29sdW1uSW5kaWNlcyk7XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgocm93SW5kaWNlcy5sZW5ndGgsIGNvbHVtbkluZGljZXMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0luZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCByb3dJbmRleCA9IHJvd0luZGljZXNbaV07XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbkluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gY29sdW1uSW5kaWNlc1tqXTtcbiAgICAgICAgbmV3TWF0cml4LnNldChpLCBqLCB0aGlzLmdldChyb3dJbmRleCwgY29sdW1uSW5kZXgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIHRyYWNlKCkge1xuICAgIGxldCBtaW4gPSBNYXRoLm1pbih0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgbGV0IHRyYWNlID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pbjsgaSsrKSB7XG4gICAgICB0cmFjZSArPSB0aGlzLmdldChpLCBpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYWNlO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgodGhpcy5yb3dzLCB0aGlzLmNvbHVtbnMpO1xuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93czsgcm93KyspIHtcbiAgICAgIGZvciAobGV0IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMuY29sdW1uczsgY29sdW1uKyspIHtcbiAgICAgICAgbmV3TWF0cml4LnNldChyb3csIGNvbHVtbiwgdGhpcy5nZXQocm93LCBjb2x1bW4pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIHN1bShieSkge1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6XG4gICAgICAgIHJldHVybiBzdW1CeVJvdyh0aGlzKTtcbiAgICAgIGNhc2UgJ2NvbHVtbic6XG4gICAgICAgIHJldHVybiBzdW1CeUNvbHVtbih0aGlzKTtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gc3VtQWxsKHRoaXMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHtieX1gKTtcbiAgICB9XG4gIH1cblxuICBwcm9kdWN0KGJ5KSB7XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RCeVJvdyh0aGlzKTtcbiAgICAgIGNhc2UgJ2NvbHVtbic6XG4gICAgICAgIHJldHVybiBwcm9kdWN0QnlDb2x1bW4odGhpcyk7XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RBbGwodGhpcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIG1lYW4oYnkpIHtcbiAgICBjb25zdCBzdW0gPSB0aGlzLnN1bShieSk7XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93Jzoge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICAgICAgc3VtW2ldIC89IHRoaXMuY29sdW1ucztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICAgICAgc3VtW2ldIC89IHRoaXMucm93cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBzdW0gLyB0aGlzLnNpemU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHZhcmlhbmNlKGJ5LCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGJ5O1xuICAgICAgYnkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyB1bmJpYXNlZCA9IHRydWUsIG1lYW4gPSB0aGlzLm1lYW4oYnkpIH0gPSBvcHRpb25zO1xuICAgIGlmICh0eXBlb2YgdW5iaWFzZWQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW5iaWFzZWQgbXVzdCBiZSBhIGJvb2xlYW4nKTtcbiAgICB9XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93Jzoge1xuICAgICAgICBpZiAoIWlzQW55QXJyYXkobWVhbikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtZWFuIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFyaWFuY2VCeVJvdyh0aGlzLCB1bmJpYXNlZCwgbWVhbik7XG4gICAgICB9XG4gICAgICBjYXNlICdjb2x1bW4nOiB7XG4gICAgICAgIGlmICghaXNBbnlBcnJheShtZWFuKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUJ5Q29sdW1uKHRoaXMsIHVuYmlhc2VkLCBtZWFuKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgdW5kZWZpbmVkOiB7XG4gICAgICAgIGlmICh0eXBlb2YgbWVhbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtZWFuIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFyaWFuY2VBbGwodGhpcywgdW5iaWFzZWQsIG1lYW4pO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHtieX1gKTtcbiAgICB9XG4gIH1cblxuICBzdGFuZGFyZERldmlhdGlvbihieSwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgdmFyaWFuY2UgPSB0aGlzLnZhcmlhbmNlKGJ5LCBvcHRpb25zKTtcbiAgICBpZiAoYnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIE1hdGguc3FydCh2YXJpYW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFyaWFuY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyaWFuY2VbaV0gPSBNYXRoLnNxcnQodmFyaWFuY2VbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhcmlhbmNlO1xuICAgIH1cbiAgfVxuXG4gIGNlbnRlcihieSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBieSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBieTtcbiAgICAgIGJ5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgY2VudGVyID0gdGhpcy5tZWFuKGJ5KSB9ID0gb3B0aW9ucztcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGlmICghaXNBbnlBcnJheShjZW50ZXIpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2VudGVyIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBjZW50ZXJCeVJvdyh0aGlzLCBjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKCFpc0FueUFycmF5KGNlbnRlcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckJ5Q29sdW1uKHRoaXMsIGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjZW50ZXIgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2VudGVyIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgICAgfVxuICAgICAgICBjZW50ZXJBbGwodGhpcywgY2VudGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHNjYWxlKGJ5LCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGJ5O1xuICAgICAgYnkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgbGV0IHNjYWxlID0gb3B0aW9ucy5zY2FsZTtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGlmIChzY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NhbGUgPSBnZXRTY2FsZUJ5Um93KHRoaXMpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0FueUFycmF5KHNjYWxlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NjYWxlIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBzY2FsZUJ5Um93KHRoaXMsIHNjYWxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjYXNlICdjb2x1bW4nOiB7XG4gICAgICAgIGlmIChzY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NhbGUgPSBnZXRTY2FsZUJ5Q29sdW1uKHRoaXMpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0FueUFycmF5KHNjYWxlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NjYWxlIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBzY2FsZUJ5Q29sdW1uKHRoaXMsIHNjYWxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBpZiAoc2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjYWxlID0gZ2V0U2NhbGVBbGwodGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNjYWxlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NjYWxlIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgICAgfVxuICAgICAgICBzY2FsZUFsbCh0aGlzLCBzY2FsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHtieX1gKTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3BlY3RNYXRyaXhXaXRoT3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgfVxufVxuXG5BYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUua2xhc3MgPSAnTWF0cml4JztcbmlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJykge1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGVbU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0gPVxuICAgIGluc3BlY3RNYXRyaXg7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVOdW1iZXJzKGEsIGIpIHtcbiAgcmV0dXJuIGEgLSBiO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5T2ZOdW1iZXJzKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5ldmVyeSgoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiB0eXBlb2YgZWxlbWVudCA9PT0gJ251bWJlcic7XG4gIH0pO1xufVxuXG4vLyBTeW5vbnltc1xuQWJzdHJhY3RNYXRyaXgucmFuZG9tID0gQWJzdHJhY3RNYXRyaXgucmFuZDtcbkFic3RyYWN0TWF0cml4LnJhbmRvbUludCA9IEFic3RyYWN0TWF0cml4LnJhbmRJbnQ7XG5BYnN0cmFjdE1hdHJpeC5kaWFnb25hbCA9IEFic3RyYWN0TWF0cml4LmRpYWc7XG5BYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGlhZ29uYWwgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGlhZztcbkFic3RyYWN0TWF0cml4LmlkZW50aXR5ID0gQWJzdHJhY3RNYXRyaXguZXllO1xuQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm5lZ2F0ZSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5uZWc7XG5BYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUudGVuc29yUHJvZHVjdCA9XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5rcm9uZWNrZXJQcm9kdWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXRyaXggZXh0ZW5kcyBBYnN0cmFjdE1hdHJpeCB7XG4gIGNvbnN0cnVjdG9yKG5Sb3dzLCBuQ29sdW1ucykge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKE1hdHJpeC5pc01hdHJpeChuUm93cykpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cbiAgICAgIHJldHVybiBuUm93cy5jbG9uZSgpO1xuICAgIH0gZWxzZSBpZiAoTnVtYmVyLmlzSW50ZWdlcihuUm93cykgJiYgblJvd3MgPj0gMCkge1xuICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IG1hdHJpeFxuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihuQ29sdW1ucykgJiYgbkNvbHVtbnMgPj0gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmRhdGEucHVzaChuZXcgRmxvYXQ2NEFycmF5KG5Db2x1bW5zKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25Db2x1bW5zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0FueUFycmF5KG5Sb3dzKSkge1xuICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGZyb20gdGhlIDJEIGFycmF5XG4gICAgICBjb25zdCBhcnJheURhdGEgPSBuUm93cztcbiAgICAgIG5Sb3dzID0gYXJyYXlEYXRhLmxlbmd0aDtcbiAgICAgIG5Db2x1bW5zID0gblJvd3MgPyBhcnJheURhdGFbMF0ubGVuZ3RoIDogMDtcbiAgICAgIGlmICh0eXBlb2YgbkNvbHVtbnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0RhdGEgbXVzdCBiZSBhIDJEIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcbiAgICAgICAgaWYgKGFycmF5RGF0YVtpXS5sZW5ndGggIT09IG5Db2x1bW5zKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luY29uc2lzdGVudCBhcnJheSBkaW1lbnNpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0FycmF5T2ZOdW1iZXJzKGFycmF5RGF0YVtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBkYXRhIGNvbnRhaW5zIG5vbi1udW1lcmljIHZhbHVlcycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKEZsb2F0NjRBcnJheS5mcm9tKGFycmF5RGF0YVtpXSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBvciBhbiBhcnJheScsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnJvd3MgPSBuUm93cztcbiAgICB0aGlzLmNvbHVtbnMgPSBuQ29sdW1ucztcbiAgfVxuXG4gIHNldChyb3dJbmRleCwgY29sdW1uSW5kZXgsIHZhbHVlKSB7XG4gICAgdGhpcy5kYXRhW3Jvd0luZGV4XVtjb2x1bW5JbmRleF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChyb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3Jvd0luZGV4XVtjb2x1bW5JbmRleF07XG4gIH1cblxuICByZW1vdmVSb3coaW5kZXgpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIGluZGV4KTtcbiAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnJvd3MgLT0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZFJvdyhpbmRleCwgYXJyYXkpIHtcbiAgICBpZiAoYXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJyYXkgPSBpbmRleDtcbiAgICAgIGluZGV4ID0gdGhpcy5yb3dzO1xuICAgIH1cbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIGluZGV4LCB0cnVlKTtcbiAgICBhcnJheSA9IEZsb2F0NjRBcnJheS5mcm9tKGNoZWNrUm93VmVjdG9yKHRoaXMsIGFycmF5KSk7XG4gICAgdGhpcy5kYXRhLnNwbGljZShpbmRleCwgMCwgYXJyYXkpO1xuICAgIHRoaXMucm93cyArPSAxO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVtb3ZlQ29sdW1uKGluZGV4KSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29uc3QgbmV3Um93ID0gbmV3IEZsb2F0NjRBcnJheSh0aGlzLmNvbHVtbnMgLSAxKTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kZXg7IGorKykge1xuICAgICAgICBuZXdSb3dbal0gPSB0aGlzLmRhdGFbaV1bal07XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gaW5kZXggKyAxOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbmV3Um93W2ogLSAxXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YVtpXSA9IG5ld1JvdztcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5zIC09IDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDb2x1bW4oaW5kZXgsIGFycmF5KSB7XG4gICAgaWYgKHR5cGVvZiBhcnJheSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGFycmF5ID0gaW5kZXg7XG4gICAgICBpbmRleCA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCwgdHJ1ZSk7XG4gICAgYXJyYXkgPSBjaGVja0NvbHVtblZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29uc3QgbmV3Um93ID0gbmV3IEZsb2F0NjRBcnJheSh0aGlzLmNvbHVtbnMgKyAxKTtcbiAgICAgIGxldCBqID0gMDtcbiAgICAgIGZvciAoOyBqIDwgaW5kZXg7IGorKykge1xuICAgICAgICBuZXdSb3dbal0gPSB0aGlzLmRhdGFbaV1bal07XG4gICAgICB9XG4gICAgICBuZXdSb3dbaisrXSA9IGFycmF5W2ldO1xuICAgICAgZm9yICg7IGogPCB0aGlzLmNvbHVtbnMgKyAxOyBqKyspIHtcbiAgICAgICAgbmV3Um93W2pdID0gdGhpcy5kYXRhW2ldW2ogLSAxXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YVtpXSA9IG5ld1JvdztcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5zICs9IDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuaW5zdGFsbE1hdGhPcGVyYXRpb25zKEFic3RyYWN0TWF0cml4LCBNYXRyaXgpO1xuIiwiaW1wb3J0IHsgbmV3QXJyYXkgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3VtQnlSb3cobWF0cml4KSB7XG4gIGxldCBzdW0gPSBuZXdBcnJheShtYXRyaXgucm93cyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7ICsraSkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7ICsraikge1xuICAgICAgc3VtW2ldICs9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1CeUNvbHVtbihtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5jb2x1bW5zKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1bal0gKz0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bUFsbChtYXRyaXgpIHtcbiAgbGV0IHYgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIHYgKz0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0QnlSb3cobWF0cml4KSB7XG4gIGxldCBzdW0gPSBuZXdBcnJheShtYXRyaXgucm93cywgMSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7ICsraSkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7ICsraikge1xuICAgICAgc3VtW2ldICo9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0QnlDb2x1bW4obWF0cml4KSB7XG4gIGxldCBzdW0gPSBuZXdBcnJheShtYXRyaXguY29sdW1ucywgMSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7ICsraSkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7ICsraikge1xuICAgICAgc3VtW2pdICo9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0QWxsKG1hdHJpeCkge1xuICBsZXQgdiA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgdiAqPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhbmNlQnlSb3cobWF0cml4LCB1bmJpYXNlZCwgbWVhbikge1xuICBjb25zdCByb3dzID0gbWF0cml4LnJvd3M7XG4gIGNvbnN0IGNvbHMgPSBtYXRyaXguY29sdW1ucztcbiAgY29uc3QgdmFyaWFuY2UgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgIGxldCBzdW0xID0gMDtcbiAgICBsZXQgc3VtMiA9IDA7XG4gICAgbGV0IHggPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XG4gICAgICB4ID0gbWF0cml4LmdldChpLCBqKSAtIG1lYW5baV07XG4gICAgICBzdW0xICs9IHg7XG4gICAgICBzdW0yICs9IHggKiB4O1xuICAgIH1cbiAgICBpZiAodW5iaWFzZWQpIHtcbiAgICAgIHZhcmlhbmNlLnB1c2goKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gY29scykgLyAoY29scyAtIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyBjb2xzKSAvIGNvbHMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFyaWFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYW5jZUJ5Q29sdW1uKG1hdHJpeCwgdW5iaWFzZWQsIG1lYW4pIHtcbiAgY29uc3Qgcm93cyA9IG1hdHJpeC5yb3dzO1xuICBjb25zdCBjb2xzID0gbWF0cml4LmNvbHVtbnM7XG4gIGNvbnN0IHZhcmlhbmNlID0gW107XG5cbiAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICBsZXQgc3VtMSA9IDA7XG4gICAgbGV0IHN1bTIgPSAwO1xuICAgIGxldCB4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgeCA9IG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuW2pdO1xuICAgICAgc3VtMSArPSB4O1xuICAgICAgc3VtMiArPSB4ICogeDtcbiAgICB9XG4gICAgaWYgKHVuYmlhc2VkKSB7XG4gICAgICB2YXJpYW5jZS5wdXNoKChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIHJvd3MpIC8gKHJvd3MgLSAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhcmlhbmNlLnB1c2goKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gcm93cykgLyByb3dzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhcmlhbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFuY2VBbGwobWF0cml4LCB1bmJpYXNlZCwgbWVhbikge1xuICBjb25zdCByb3dzID0gbWF0cml4LnJvd3M7XG4gIGNvbnN0IGNvbHMgPSBtYXRyaXguY29sdW1ucztcbiAgY29uc3Qgc2l6ZSA9IHJvd3MgKiBjb2xzO1xuXG4gIGxldCBzdW0xID0gMDtcbiAgbGV0IHN1bTIgPSAwO1xuICBsZXQgeCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgIHggPSBtYXRyaXguZ2V0KGksIGopIC0gbWVhbjtcbiAgICAgIHN1bTEgKz0geDtcbiAgICAgIHN1bTIgKz0geCAqIHg7XG4gICAgfVxuICB9XG4gIGlmICh1bmJpYXNlZCkge1xuICAgIHJldHVybiAoc3VtMiAtIChzdW0xICogc3VtMSkgLyBzaXplKSAvIChzaXplIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIHNpemUpIC8gc2l6ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VudGVyQnlSb3cobWF0cml4LCBtZWFuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC0gbWVhbltpXSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZW50ZXJCeUNvbHVtbihtYXRyaXgsIG1lYW4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuW2pdKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbnRlckFsbChtYXRyaXgsIG1lYW4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlQnlSb3cobWF0cml4KSB7XG4gIGNvbnN0IHNjYWxlID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgc3VtICs9IE1hdGgucG93KG1hdHJpeC5nZXQoaSwgaiksIDIpIC8gKG1hdHJpeC5jb2x1bW5zIC0gMSk7XG4gICAgfVxuICAgIHNjYWxlLnB1c2goTWF0aC5zcXJ0KHN1bSkpO1xuICB9XG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQnlSb3cobWF0cml4LCBzY2FsZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAvIHNjYWxlW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlQnlDb2x1bW4obWF0cml4KSB7XG4gIGNvbnN0IHNjYWxlID0gW107XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgICAgc3VtICs9IE1hdGgucG93KG1hdHJpeC5nZXQoaSwgaiksIDIpIC8gKG1hdHJpeC5yb3dzIC0gMSk7XG4gICAgfVxuICAgIHNjYWxlLnB1c2goTWF0aC5zcXJ0KHN1bSkpO1xuICB9XG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQnlDb2x1bW4obWF0cml4LCBzY2FsZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAvIHNjYWxlW2pdKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlQWxsKG1hdHJpeCkge1xuICBjb25zdCBkaXZpZGVyID0gbWF0cml4LnNpemUgLSAxO1xuICBsZXQgc3VtID0gMDtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyBkaXZpZGVyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gTWF0aC5zcXJ0KHN1bSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFsbChtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGUpO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxNYXRoT3BlcmF0aW9ucyhBYnN0cmFjdE1hdHJpeCwgTWF0cml4KSB7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuYWRkUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuYWRkTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFkZFMgPSBmdW5jdGlvbiBhZGRTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFkZE0gPSBmdW5jdGlvbiBhZGRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgKyBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYWRkID0gZnVuY3Rpb24gYWRkKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hZGQodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiBzdWIodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuc3ViUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuc3ViTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YlMgPSBmdW5jdGlvbiBzdWJTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1Yk0gPSBmdW5jdGlvbiBzdWJNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLSBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc3ViID0gZnVuY3Rpb24gc3ViKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5zdWIodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3VidHJhY3QgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3VidHJhY3RTID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YlM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdE0gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViTTtcbiAgQWJzdHJhY3RNYXRyaXguc3VidHJhY3QgPSBBYnN0cmFjdE1hdHJpeC5zdWI7XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5tdWxTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5tdWxNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsUyA9IGZ1bmN0aW9uIG11bFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsTSA9IGZ1bmN0aW9uIG11bE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAqIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5tdWwgPSBmdW5jdGlvbiBtdWwobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4Lm11bCh2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWx0aXBseSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWw7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWx0aXBseVMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsUztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5TSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxNO1xuICBBYnN0cmFjdE1hdHJpeC5tdWx0aXBseSA9IEFic3RyYWN0TWF0cml4Lm11bDtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gZGl2KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLmRpdlModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmRpdk0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZTID0gZnVuY3Rpb24gZGl2Uyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZNID0gZnVuY3Rpb24gZGl2TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmRpdiA9IGZ1bmN0aW9uIGRpdihtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguZGl2KHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXY7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZpZGVTID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdlM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZpZGVNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdk07XG4gIEFic3RyYWN0TWF0cml4LmRpdmlkZSA9IEFic3RyYWN0TWF0cml4LmRpdjtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kID0gZnVuY3Rpb24gbW9kKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLm1vZFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm1vZE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2RTID0gZnVuY3Rpb24gbW9kUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJSB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2RNID0gZnVuY3Rpb24gbW9kTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICUgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm1vZCA9IGZ1bmN0aW9uIG1vZChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubW9kKHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZHVsdXMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1c1MgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kUztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZHVsdXNNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZE07XG4gIEFic3RyYWN0TWF0cml4Lm1vZHVsdXMgPSBBYnN0cmFjdE1hdHJpeC5tb2Q7XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5hbmRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5hbmRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYW5kUyA9IGZ1bmN0aW9uIGFuZFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICYgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYW5kTSA9IGZ1bmN0aW9uIGFuZE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAmIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hbmQgPSBmdW5jdGlvbiBhbmQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFuZCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3IodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMub3JTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5vck0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5vclMgPSBmdW5jdGlvbiBvclModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIHwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUub3JNID0gZnVuY3Rpb24gb3JNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgfCBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgub3IgPSBmdW5jdGlvbiBvcihtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgub3IodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiB4b3IodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMueG9yUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMueG9yTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnhvclMgPSBmdW5jdGlvbiB4b3JTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSBeIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnhvck0gPSBmdW5jdGlvbiB4b3JNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgXiBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgueG9yID0gZnVuY3Rpb24geG9yKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC54b3IodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sZWZ0U2hpZnQgPSBmdW5jdGlvbiBsZWZ0U2hpZnQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMubGVmdFNoaWZ0Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMubGVmdFNoaWZ0TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdFMgPSBmdW5jdGlvbiBsZWZ0U2hpZnRTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSA8PCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sZWZ0U2hpZnRNID0gZnVuY3Rpb24gbGVmdFNoaWZ0TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIDw8IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sZWZ0U2hpZnQgPSBmdW5jdGlvbiBsZWZ0U2hpZnQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmxlZnRTaGlmdCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQgPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTID0gZnVuY3Rpb24gc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNID0gZnVuY3Rpb24gc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSA+PiBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCA9IGZ1bmN0aW9uIHNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0ID0gZnVuY3Rpb24gcmlnaHRTaGlmdCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5yaWdodFNoaWZ0Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRTaGlmdE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0UyA9IGZ1bmN0aW9uIHJpZ2h0U2hpZnRTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSA+Pj4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdE0gPSBmdW5jdGlvbiByaWdodFNoaWZ0TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+PiBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucmlnaHRTaGlmdCA9IGZ1bmN0aW9uIHJpZ2h0U2hpZnQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnJpZ2h0U2hpZnQodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0ID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnQ7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRTID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0TSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0TTtcbiAgQWJzdHJhY3RNYXRyaXguemVyb0ZpbGxSaWdodFNoaWZ0ID0gQWJzdHJhY3RNYXRyaXgucmlnaHRTaGlmdDtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgfih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5ub3QgPSBmdW5jdGlvbiBub3QobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubm90KCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uIGFicygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYWJzKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFicyA9IGZ1bmN0aW9uIGFicyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hYnMoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWNvcyA9IGZ1bmN0aW9uIGFjb3MoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFjb3ModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYWNvcyA9IGZ1bmN0aW9uIGFjb3MobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYWNvcygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hY29zaCA9IGZ1bmN0aW9uIGFjb3NoKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hY29zaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hY29zaCA9IGZ1bmN0aW9uIGFjb3NoKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFjb3NoKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFzaW4gPSBmdW5jdGlvbiBhc2luKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hc2luKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFzaW4gPSBmdW5jdGlvbiBhc2luKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFzaW4oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXNpbmggPSBmdW5jdGlvbiBhc2luaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYXNpbmgodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXNpbmggPSBmdW5jdGlvbiBhc2luaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hc2luaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hdGFuID0gZnVuY3Rpb24gYXRhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYXRhbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hdGFuID0gZnVuY3Rpb24gYXRhbihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hdGFuKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmF0YW5oID0gZnVuY3Rpb24gYXRhbmgoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmF0YW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmF0YW5oID0gZnVuY3Rpb24gYXRhbmgobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYXRhbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY2JydCA9IGZ1bmN0aW9uIGNicnQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNicnQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY2JydCA9IGZ1bmN0aW9uIGNicnQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY2JydCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jZWlsID0gZnVuY3Rpb24gY2VpbCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2VpbCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jZWlsID0gZnVuY3Rpb24gY2VpbChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jZWlsKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNsejMyID0gZnVuY3Rpb24gY2x6MzIoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNsejMyKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNsejMyID0gZnVuY3Rpb24gY2x6MzIobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY2x6MzIoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY29zID0gZnVuY3Rpb24gY29zKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jb3ModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY29zID0gZnVuY3Rpb24gY29zKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNvcygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jb3NoID0gZnVuY3Rpb24gY29zaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY29zaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jb3NoID0gZnVuY3Rpb24gY29zaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jb3NoKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uIGV4cCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguZXhwKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmV4cCA9IGZ1bmN0aW9uIGV4cChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5leHAoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZXhwbTEgPSBmdW5jdGlvbiBleHBtMSgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguZXhwbTEodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZXhwbTEgPSBmdW5jdGlvbiBleHBtMShtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5leHBtMSgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5mbG9vciA9IGZ1bmN0aW9uIGZsb29yKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5mbG9vcih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5mbG9vciA9IGZ1bmN0aW9uIGZsb29yKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmZsb29yKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmZyb3VuZCA9IGZ1bmN0aW9uIGZyb3VuZCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguZnJvdW5kKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmZyb3VuZCA9IGZ1bmN0aW9uIGZyb3VuZChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5mcm91bmQoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubG9nID0gZnVuY3Rpb24gbG9nKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5sb2codGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubG9nID0gZnVuY3Rpb24gbG9nKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmxvZygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cxcCA9IGZ1bmN0aW9uIGxvZzFwKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5sb2cxcCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cxcCA9IGZ1bmN0aW9uIGxvZzFwKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmxvZzFwKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxvZzEwID0gZnVuY3Rpb24gbG9nMTAoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZzEwKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxvZzEwID0gZnVuY3Rpb24gbG9nMTAobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nMTAoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubG9nMiA9IGZ1bmN0aW9uIGxvZzIoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZzIodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubG9nMiA9IGZ1bmN0aW9uIGxvZzIobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nMigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yb3VuZCA9IGZ1bmN0aW9uIHJvdW5kKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5yb3VuZCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5yb3VuZCA9IGZ1bmN0aW9uIHJvdW5kKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnJvdW5kKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zaWduKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNpZ24gPSBmdW5jdGlvbiBzaWduKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpZ24oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2luID0gZnVuY3Rpb24gc2luKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zaW4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc2luID0gZnVuY3Rpb24gc2luKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaW5oID0gZnVuY3Rpb24gc2luaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguc2luaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaW5oID0gZnVuY3Rpb24gc2luaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5zaW5oKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNxcnQgPSBmdW5jdGlvbiBzcXJ0KCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zcXJ0KHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNxcnQgPSBmdW5jdGlvbiBzcXJ0KG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNxcnQoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUudGFuID0gZnVuY3Rpb24gdGFuKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC50YW4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgudGFuID0gZnVuY3Rpb24gdGFuKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnRhbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50YW5oID0gZnVuY3Rpb24gdGFuaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgudGFuaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC50YW5oID0gZnVuY3Rpb24gdGFuaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC50YW5oKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnRydW5jID0gZnVuY3Rpb24gdHJ1bmMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnRydW5jKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnRydW5jID0gZnVuY3Rpb24gdHJ1bmMobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgudHJ1bmMoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wb3cgPSBmdW5jdGlvbiBwb3cobWF0cml4LCBhcmcwKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucG93KGFyZzApO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiBwb3codmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMucG93Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMucG93TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnBvd1MgPSBmdW5jdGlvbiBwb3dTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnBvdyh0aGlzLmdldChpLCBqKSwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnBvd00gPSBmdW5jdGlvbiBwb3dNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5wb3codGhpcy5nZXQoaSwgaiksIG1hdHJpeC5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdE1hdHJpeCB9IGZyb20gJy4uL21hdHJpeCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdyYXBwZXJNYXRyaXgyRCBleHRlbmRzIEFic3RyYWN0TWF0cml4IHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnJvd3MgPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLmNvbHVtbnMgPSBkYXRhWzBdLmxlbmd0aDtcbiAgfVxuXG4gIHNldChyb3dJbmRleCwgY29sdW1uSW5kZXgsIHZhbHVlKSB7XG4gICAgdGhpcy5kYXRhW3Jvd0luZGV4XVtjb2x1bW5JbmRleF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChyb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3Jvd0luZGV4XVtjb2x1bW5JbmRleF07XG4gIH1cbn1cbiIsImltcG9ydCBNYXRyaXggZnJvbSAnLi4vbWF0cml4JztcbmltcG9ydCBXcmFwcGVyTWF0cml4MkQgZnJvbSAnLi4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMdURlY29tcG9zaXRpb24ge1xuICBjb25zdHJ1Y3RvcihtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgobWF0cml4KTtcblxuICAgIGxldCBsdSA9IG1hdHJpeC5jbG9uZSgpO1xuICAgIGxldCByb3dzID0gbHUucm93cztcbiAgICBsZXQgY29sdW1ucyA9IGx1LmNvbHVtbnM7XG4gICAgbGV0IHBpdm90VmVjdG9yID0gbmV3IEZsb2F0NjRBcnJheShyb3dzKTtcbiAgICBsZXQgcGl2b3RTaWduID0gMTtcbiAgICBsZXQgaSwgaiwgaywgcCwgcywgdCwgdjtcbiAgICBsZXQgTFVjb2xqLCBrbWF4O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgcGl2b3RWZWN0b3JbaV0gPSBpO1xuICAgIH1cblxuICAgIExVY29saiA9IG5ldyBGbG9hdDY0QXJyYXkocm93cyk7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIExVY29saltpXSA9IGx1LmdldChpLCBqKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICBrbWF4ID0gTWF0aC5taW4oaSwgaik7XG4gICAgICAgIHMgPSAwO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwga21heDsgaysrKSB7XG4gICAgICAgICAgcyArPSBsdS5nZXQoaSwgaykgKiBMVWNvbGpba107XG4gICAgICAgIH1cbiAgICAgICAgTFVjb2xqW2ldIC09IHM7XG4gICAgICAgIGx1LnNldChpLCBqLCBMVWNvbGpbaV0pO1xuICAgICAgfVxuXG4gICAgICBwID0gajtcbiAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhMVWNvbGpbaV0pID4gTWF0aC5hYnMoTFVjb2xqW3BdKSkge1xuICAgICAgICAgIHAgPSBpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwICE9PSBqKSB7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBjb2x1bW5zOyBrKyspIHtcbiAgICAgICAgICB0ID0gbHUuZ2V0KHAsIGspO1xuICAgICAgICAgIGx1LnNldChwLCBrLCBsdS5nZXQoaiwgaykpO1xuICAgICAgICAgIGx1LnNldChqLCBrLCB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHYgPSBwaXZvdFZlY3RvcltwXTtcbiAgICAgICAgcGl2b3RWZWN0b3JbcF0gPSBwaXZvdFZlY3RvcltqXTtcbiAgICAgICAgcGl2b3RWZWN0b3Jbal0gPSB2O1xuXG4gICAgICAgIHBpdm90U2lnbiA9IC1waXZvdFNpZ247XG4gICAgICB9XG5cbiAgICAgIGlmIChqIDwgcm93cyAmJiBsdS5nZXQoaiwgaikgIT09IDApIHtcbiAgICAgICAgZm9yIChpID0gaiArIDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICBsdS5zZXQoaSwgaiwgbHUuZ2V0KGksIGopIC8gbHUuZ2V0KGosIGopKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuTFUgPSBsdTtcbiAgICB0aGlzLnBpdm90VmVjdG9yID0gcGl2b3RWZWN0b3I7XG4gICAgdGhpcy5waXZvdFNpZ24gPSBwaXZvdFNpZ247XG4gIH1cblxuICBpc1Npbmd1bGFyKCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBsZXQgY29sID0gZGF0YS5jb2x1bW5zO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sOyBqKyspIHtcbiAgICAgIGlmIChkYXRhLmdldChqLCBqKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc29sdmUodmFsdWUpIHtcbiAgICB2YWx1ZSA9IE1hdHJpeC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBsZXQgbHUgPSB0aGlzLkxVO1xuICAgIGxldCByb3dzID0gbHUucm93cztcblxuICAgIGlmIChyb3dzICE9PSB2YWx1ZS5yb3dzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWF0cml4IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaW5ndWxhcigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xVIG1hdHJpeCBpcyBzaW5ndWxhcicpO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IHZhbHVlLmNvbHVtbnM7XG4gICAgbGV0IFggPSB2YWx1ZS5zdWJNYXRyaXhSb3codGhpcy5waXZvdFZlY3RvciwgMCwgY291bnQgLSAxKTtcbiAgICBsZXQgY29sdW1ucyA9IGx1LmNvbHVtbnM7XG4gICAgbGV0IGksIGosIGs7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgY29sdW1uczsgaysrKSB7XG4gICAgICBmb3IgKGkgPSBrICsgMTsgaSA8IGNvbHVtbnM7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopIC0gWC5nZXQoaywgaikgKiBsdS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IGNvbHVtbnMgLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgWC5zZXQoaywgaiwgWC5nZXQoaywgaikgLyBsdS5nZXQoaywgaykpO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGs7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopIC0gWC5nZXQoaywgaikgKiBsdS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IGRldGVybWluYW50KCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBpZiAoIWRhdGEuaXNTcXVhcmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUnKTtcbiAgICB9XG4gICAgbGV0IGRldGVybWluYW50ID0gdGhpcy5waXZvdFNpZ247XG4gICAgbGV0IGNvbCA9IGRhdGEuY29sdW1ucztcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbDsgaisrKSB7XG4gICAgICBkZXRlcm1pbmFudCAqPSBkYXRhLmdldChqLCBqKTtcbiAgICB9XG4gICAgcmV0dXJuIGRldGVybWluYW50O1xuICB9XG5cbiAgZ2V0IGxvd2VyVHJpYW5ndWxhck1hdHJpeCgpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuTFU7XG4gICAgbGV0IHJvd3MgPSBkYXRhLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBkYXRhLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAoaSA+IGopIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBkYXRhLmdldChpLCBqKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFguc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IHVwcGVyVHJpYW5ndWxhck1hdHJpeCgpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuTFU7XG4gICAgbGV0IHJvd3MgPSBkYXRhLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBkYXRhLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAoaSA8PSBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgZGF0YS5nZXQoaSwgaikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFguc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IHBpdm90UGVybXV0YXRpb25WZWN0b3IoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5waXZvdFZlY3Rvcik7XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBoeXBvdGVudXNlKGEsIGIpIHtcbiAgbGV0IHIgPSAwO1xuICBpZiAoTWF0aC5hYnMoYSkgPiBNYXRoLmFicyhiKSkge1xuICAgIHIgPSBiIC8gYTtcbiAgICByZXR1cm4gTWF0aC5hYnMoYSkgKiBNYXRoLnNxcnQoMSArIHIgKiByKTtcbiAgfVxuICBpZiAoYiAhPT0gMCkge1xuICAgIHIgPSBhIC8gYjtcbiAgICByZXR1cm4gTWF0aC5hYnMoYikgKiBNYXRoLnNxcnQoMSArIHIgKiByKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbiIsImltcG9ydCBNYXRyaXggZnJvbSAnLi4vbWF0cml4JztcbmltcG9ydCBXcmFwcGVyTWF0cml4MkQgZnJvbSAnLi4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5pbXBvcnQgeyBoeXBvdGVudXNlIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXJEZWNvbXBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICB2YWx1ZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBsZXQgcXIgPSB2YWx1ZS5jbG9uZSgpO1xuICAgIGxldCBtID0gdmFsdWUucm93cztcbiAgICBsZXQgbiA9IHZhbHVlLmNvbHVtbnM7XG4gICAgbGV0IHJkaWFnID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBsZXQgaSwgaiwgaywgcztcblxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIGxldCBucm0gPSAwO1xuICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICBucm0gPSBoeXBvdGVudXNlKG5ybSwgcXIuZ2V0KGksIGspKTtcbiAgICAgIH1cbiAgICAgIGlmIChucm0gIT09IDApIHtcbiAgICAgICAgaWYgKHFyLmdldChrLCBrKSA8IDApIHtcbiAgICAgICAgICBucm0gPSAtbnJtO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBxci5zZXQoaSwgaywgcXIuZ2V0KGksIGspIC8gbnJtKTtcbiAgICAgICAgfVxuICAgICAgICBxci5zZXQoaywgaywgcXIuZ2V0KGssIGspICsgMSk7XG4gICAgICAgIGZvciAoaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgcyA9IDA7XG4gICAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgcyArPSBxci5nZXQoaSwgaykgKiBxci5nZXQoaSwgaik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMgPSAtcyAvIHFyLmdldChrLCBrKTtcbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBxci5zZXQoaSwgaiwgcXIuZ2V0KGksIGopICsgcyAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZGlhZ1trXSA9IC1ucm07XG4gICAgfVxuXG4gICAgdGhpcy5RUiA9IHFyO1xuICAgIHRoaXMuUmRpYWcgPSByZGlhZztcbiAgfVxuXG4gIHNvbHZlKHZhbHVlKSB7XG4gICAgdmFsdWUgPSBNYXRyaXguY2hlY2tNYXRyaXgodmFsdWUpO1xuXG4gICAgbGV0IHFyID0gdGhpcy5RUjtcbiAgICBsZXQgbSA9IHFyLnJvd3M7XG5cbiAgICBpZiAodmFsdWUucm93cyAhPT0gbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXggcm93IGRpbWVuc2lvbnMgbXVzdCBhZ3JlZScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNGdWxsUmFuaygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBpcyByYW5rIGRlZmljaWVudCcpO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IHZhbHVlLmNvbHVtbnM7XG4gICAgbGV0IFggPSB2YWx1ZS5jbG9uZSgpO1xuICAgIGxldCBuID0gcXIuY29sdW1ucztcbiAgICBsZXQgaSwgaiwgaywgcztcblxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgIHMgPSAwO1xuICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgcyArPSBxci5nZXQoaSwgaykgKiBYLmdldChpLCBqKTtcbiAgICAgICAgfVxuICAgICAgICBzID0gLXMgLyBxci5nZXQoaywgayk7XG4gICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSArIHMgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IG4gLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgWC5zZXQoaywgaiwgWC5nZXQoaywgaikgLyB0aGlzLlJkaWFnW2tdKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSAtIFguZ2V0KGssIGopICogcXIuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBYLnN1Yk1hdHJpeCgwLCBuIC0gMSwgMCwgY291bnQgLSAxKTtcbiAgfVxuXG4gIGlzRnVsbFJhbmsoKSB7XG4gICAgbGV0IGNvbHVtbnMgPSB0aGlzLlFSLmNvbHVtbnM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLlJkaWFnW2ldID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCkge1xuICAgIGxldCBxciA9IHRoaXMuUVI7XG4gICAgbGV0IG4gPSBxci5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeChuLCBuKTtcbiAgICBsZXQgaSwgajtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGlmIChpIDwgaikge1xuICAgICAgICAgIFguc2V0KGksIGosIHFyLmdldChpLCBqKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIHRoaXMuUmRpYWdbaV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFguc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IG9ydGhvZ29uYWxNYXRyaXgoKSB7XG4gICAgbGV0IHFyID0gdGhpcy5RUjtcbiAgICBsZXQgcm93cyA9IHFyLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBxci5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBsZXQgaSwgaiwgaywgcztcblxuICAgIGZvciAoayA9IGNvbHVtbnMgLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICBYLnNldChpLCBrLCAwKTtcbiAgICAgIH1cbiAgICAgIFguc2V0KGssIGssIDEpO1xuICAgICAgZm9yIChqID0gazsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAocXIuZ2V0KGssIGspICE9PSAwKSB7XG4gICAgICAgICAgcyA9IDA7XG4gICAgICAgICAgZm9yIChpID0gazsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgcyArPSBxci5nZXQoaSwgaykgKiBYLmdldChpLCBqKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzID0gLXMgLyBxci5nZXQoaywgayk7XG5cbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSArIHMgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWDtcbiAgfVxufVxuIiwiaW1wb3J0IE1hdHJpeCBmcm9tICcuLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmltcG9ydCB7IGh5cG90ZW51c2UgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICB2YWx1ZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBtdXN0IGJlIG5vbi1lbXB0eScpO1xuICAgIH1cblxuICAgIGxldCBtID0gdmFsdWUucm93cztcbiAgICBsZXQgbiA9IHZhbHVlLmNvbHVtbnM7XG5cbiAgICBjb25zdCB7XG4gICAgICBjb21wdXRlTGVmdFNpbmd1bGFyVmVjdG9ycyA9IHRydWUsXG4gICAgICBjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnMgPSB0cnVlLFxuICAgICAgYXV0b1RyYW5zcG9zZSA9IGZhbHNlLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgbGV0IHdhbnR1ID0gQm9vbGVhbihjb21wdXRlTGVmdFNpbmd1bGFyVmVjdG9ycyk7XG4gICAgbGV0IHdhbnR2ID0gQm9vbGVhbihjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnMpO1xuXG4gICAgbGV0IHN3YXBwZWQgPSBmYWxzZTtcbiAgICBsZXQgYTtcbiAgICBpZiAobSA8IG4pIHtcbiAgICAgIGlmICghYXV0b1RyYW5zcG9zZSkge1xuICAgICAgICBhID0gdmFsdWUuY2xvbmUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdDb21wdXRpbmcgU1ZEIG9uIGEgbWF0cml4IHdpdGggbW9yZSBjb2x1bW5zIHRoYW4gcm93cy4gQ29uc2lkZXIgZW5hYmxpbmcgYXV0b1RyYW5zcG9zZScsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhID0gdmFsdWUudHJhbnNwb3NlKCk7XG4gICAgICAgIG0gPSBhLnJvd3M7XG4gICAgICAgIG4gPSBhLmNvbHVtbnM7XG4gICAgICAgIHN3YXBwZWQgPSB0cnVlO1xuICAgICAgICBsZXQgYXV4ID0gd2FudHU7XG4gICAgICAgIHdhbnR1ID0gd2FudHY7XG4gICAgICAgIHdhbnR2ID0gYXV4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhID0gdmFsdWUuY2xvbmUoKTtcbiAgICB9XG5cbiAgICBsZXQgbnUgPSBNYXRoLm1pbihtLCBuKTtcbiAgICBsZXQgbmkgPSBNYXRoLm1pbihtICsgMSwgbik7XG4gICAgbGV0IHMgPSBuZXcgRmxvYXQ2NEFycmF5KG5pKTtcbiAgICBsZXQgVSA9IG5ldyBNYXRyaXgobSwgbnUpO1xuICAgIGxldCBWID0gbmV3IE1hdHJpeChuLCBuKTtcblxuICAgIGxldCBlID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBsZXQgd29yayA9IG5ldyBGbG9hdDY0QXJyYXkobSk7XG5cbiAgICBsZXQgc2kgPSBuZXcgRmxvYXQ2NEFycmF5KG5pKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5pOyBpKyspIHNpW2ldID0gaTtcblxuICAgIGxldCBuY3QgPSBNYXRoLm1pbihtIC0gMSwgbik7XG4gICAgbGV0IG5ydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG4gLSAyLCBtKSk7XG4gICAgbGV0IG1yYyA9IE1hdGgubWF4KG5jdCwgbnJ0KTtcblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbXJjOyBrKyspIHtcbiAgICAgIGlmIChrIDwgbmN0KSB7XG4gICAgICAgIHNba10gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIHNba10gPSBoeXBvdGVudXNlKHNba10sIGEuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc1trXSAhPT0gMCkge1xuICAgICAgICAgIGlmIChhLmdldChrLCBrKSA8IDApIHtcbiAgICAgICAgICAgIHNba10gPSAtc1trXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIGEuc2V0KGksIGssIGEuZ2V0KGksIGspIC8gc1trXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGEuc2V0KGssIGssIGEuZ2V0KGssIGspICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgc1trXSA9IC1zW2tdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGsgPCBuY3QgJiYgc1trXSAhPT0gMCkge1xuICAgICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgdCArPSBhLmdldChpLCBrKSAqIGEuZ2V0KGksIGopO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ID0gLXQgLyBhLmdldChrLCBrKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgYS5zZXQoaSwgaiwgYS5nZXQoaSwgaikgKyB0ICogYS5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlW2pdID0gYS5nZXQoaywgaik7XG4gICAgICB9XG5cbiAgICAgIGlmICh3YW50dSAmJiBrIDwgbmN0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgVS5zZXQoaSwgaywgYS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChrIDwgbnJ0KSB7XG4gICAgICAgIGVba10gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBlW2tdID0gaHlwb3RlbnVzZShlW2tdLCBlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZVtrXSAhPT0gMCkge1xuICAgICAgICAgIGlmIChlW2sgKyAxXSA8IDApIHtcbiAgICAgICAgICAgIGVba10gPSAwIC0gZVtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBlW2ldIC89IGVba107XG4gICAgICAgICAgfVxuICAgICAgICAgIGVbayArIDFdICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZVtrXSA9IC1lW2tdO1xuICAgICAgICBpZiAoayArIDEgPCBtICYmIGVba10gIT09IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIHdvcmtbaV0gPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICB3b3JrW2ldICs9IGVbal0gKiBhLmdldChpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICBsZXQgdCA9IC1lW2pdIC8gZVtrICsgMV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgYS5zZXQoaSwgaiwgYS5nZXQoaSwgaikgKyB0ICogd29ya1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3YW50dikge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgVi5zZXQoaSwgaywgZVtpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHAgPSBNYXRoLm1pbihuLCBtICsgMSk7XG4gICAgaWYgKG5jdCA8IG4pIHtcbiAgICAgIHNbbmN0XSA9IGEuZ2V0KG5jdCwgbmN0KTtcbiAgICB9XG4gICAgaWYgKG0gPCBwKSB7XG4gICAgICBzW3AgLSAxXSA9IDA7XG4gICAgfVxuICAgIGlmIChucnQgKyAxIDwgcCkge1xuICAgICAgZVtucnRdID0gYS5nZXQobnJ0LCBwIC0gMSk7XG4gICAgfVxuICAgIGVbcCAtIDFdID0gMDtcblxuICAgIGlmICh3YW50dSkge1xuICAgICAgZm9yIChsZXQgaiA9IG5jdDsgaiA8IG51OyBqKyspIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBVLnNldChpLCBqLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBVLnNldChqLCBqLCAxKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGsgPSBuY3QgLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgICBpZiAoc1trXSAhPT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG51OyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgIHQgKz0gVS5nZXQoaSwgaykgKiBVLmdldChpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSAtdCAvIFUuZ2V0KGssIGspO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgVS5zZXQoaSwgaiwgVS5nZXQoaSwgaikgKyB0ICogVS5nZXQoaSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgVS5zZXQoaSwgaywgLVUuZ2V0KGksIGspKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgVS5zZXQoaywgaywgMSArIFUuZ2V0KGssIGspKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGsgLSAxOyBpKyspIHtcbiAgICAgICAgICAgIFUuc2V0KGksIGssIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgVS5zZXQoaSwgaywgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFUuc2V0KGssIGssIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdhbnR2KSB7XG4gICAgICBmb3IgKGxldCBrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAgIGlmIChrIDwgbnJ0ICYmIGVba10gIT09IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICB0ICs9IFYuZ2V0KGksIGspICogVi5nZXQoaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ID0gLXQgLyBWLmdldChrICsgMSwgayk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgVi5zZXQoaSwgaiwgVi5nZXQoaSwgaikgKyB0ICogVi5nZXQoaSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIFYuc2V0KGksIGssIDApO1xuICAgICAgICB9XG4gICAgICAgIFYuc2V0KGssIGssIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwcCA9IHAgLSAxO1xuICAgIGxldCBpdGVyID0gMDtcbiAgICBsZXQgZXBzID0gTnVtYmVyLkVQU0lMT047XG4gICAgd2hpbGUgKHAgPiAwKSB7XG4gICAgICBsZXQgaywga2FzZTtcbiAgICAgIGZvciAoayA9IHAgLSAyOyBrID49IC0xOyBrLS0pIHtcbiAgICAgICAgaWYgKGsgPT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxwaGEgPVxuICAgICAgICAgIE51bWJlci5NSU5fVkFMVUUgKyBlcHMgKiBNYXRoLmFicyhzW2tdICsgTWF0aC5hYnMoc1trICsgMV0pKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGVba10pIDw9IGFscGhhIHx8IE51bWJlci5pc05hTihlW2tdKSkge1xuICAgICAgICAgIGVba10gPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoayA9PT0gcCAtIDIpIHtcbiAgICAgICAga2FzZSA9IDQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQga3M7XG4gICAgICAgIGZvciAoa3MgPSBwIC0gMTsga3MgPj0gazsga3MtLSkge1xuICAgICAgICAgIGlmIChrcyA9PT0gaykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB0ID1cbiAgICAgICAgICAgIChrcyAhPT0gcCA/IE1hdGguYWJzKGVba3NdKSA6IDApICtcbiAgICAgICAgICAgIChrcyAhPT0gayArIDEgPyBNYXRoLmFicyhlW2tzIC0gMV0pIDogMCk7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKHNba3NdKSA8PSBlcHMgKiB0KSB7XG4gICAgICAgICAgICBzW2tzXSA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtzID09PSBrKSB7XG4gICAgICAgICAga2FzZSA9IDM7XG4gICAgICAgIH0gZWxzZSBpZiAoa3MgPT09IHAgLSAxKSB7XG4gICAgICAgICAga2FzZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2FzZSA9IDI7XG4gICAgICAgICAgayA9IGtzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGsrKztcblxuICAgICAgc3dpdGNoIChrYXNlKSB7XG4gICAgICAgIGNhc2UgMToge1xuICAgICAgICAgIGxldCBmID0gZVtwIC0gMl07XG4gICAgICAgICAgZVtwIC0gMl0gPSAwO1xuICAgICAgICAgIGZvciAobGV0IGogPSBwIC0gMjsgaiA+PSBrOyBqLS0pIHtcbiAgICAgICAgICAgIGxldCB0ID0gaHlwb3RlbnVzZShzW2pdLCBmKTtcbiAgICAgICAgICAgIGxldCBjcyA9IHNbal0gLyB0O1xuICAgICAgICAgICAgbGV0IHNuID0gZiAvIHQ7XG4gICAgICAgICAgICBzW2pdID0gdDtcbiAgICAgICAgICAgIGlmIChqICE9PSBrKSB7XG4gICAgICAgICAgICAgIGYgPSAtc24gKiBlW2ogLSAxXTtcbiAgICAgICAgICAgICAgZVtqIC0gMV0gPSBjcyAqIGVbaiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVi5nZXQoaSwgaikgKyBzbiAqIFYuZ2V0KGksIHAgLSAxKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBwIC0gMSwgLXNuICogVi5nZXQoaSwgaikgKyBjcyAqIFYuZ2V0KGksIHAgLSAxKSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgbGV0IGYgPSBlW2sgLSAxXTtcbiAgICAgICAgICBlW2sgLSAxXSA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGs7IGogPCBwOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gaHlwb3RlbnVzZShzW2pdLCBmKTtcbiAgICAgICAgICAgIGxldCBjcyA9IHNbal0gLyB0O1xuICAgICAgICAgICAgbGV0IHNuID0gZiAvIHQ7XG4gICAgICAgICAgICBzW2pdID0gdDtcbiAgICAgICAgICAgIGYgPSAtc24gKiBlW2pdO1xuICAgICAgICAgICAgZVtqXSA9IGNzICogZVtqXTtcbiAgICAgICAgICAgIGlmICh3YW50dSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBjcyAqIFUuZ2V0KGksIGopICsgc24gKiBVLmdldChpLCBrIC0gMSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgayAtIDEsIC1zbiAqIFUuZ2V0KGksIGopICsgY3MgKiBVLmdldChpLCBrIC0gMSkpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGosIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBNYXRoLmFicyhzW3AgLSAxXSksXG4gICAgICAgICAgICBNYXRoLmFicyhzW3AgLSAyXSksXG4gICAgICAgICAgICBNYXRoLmFicyhlW3AgLSAyXSksXG4gICAgICAgICAgICBNYXRoLmFicyhzW2tdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKGVba10pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgc3AgPSBzW3AgLSAxXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IHNwbTEgPSBzW3AgLSAyXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IGVwbTEgPSBlW3AgLSAyXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IHNrID0gc1trXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IGVrID0gZVtrXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IGIgPSAoKHNwbTEgKyBzcCkgKiAoc3BtMSAtIHNwKSArIGVwbTEgKiBlcG0xKSAvIDI7XG4gICAgICAgICAgY29uc3QgYyA9IHNwICogZXBtMSAqIChzcCAqIGVwbTEpO1xuICAgICAgICAgIGxldCBzaGlmdCA9IDA7XG4gICAgICAgICAgaWYgKGIgIT09IDAgfHwgYyAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgICAgIHNoaWZ0ID0gMCAtIE1hdGguc3FydChiICogYiArIGMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2hpZnQgPSBNYXRoLnNxcnQoYiAqIGIgKyBjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoaWZ0ID0gYyAvIChiICsgc2hpZnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZiA9IChzayArIHNwKSAqIChzayAtIHNwKSArIHNoaWZ0O1xuICAgICAgICAgIGxldCBnID0gc2sgKiBlaztcbiAgICAgICAgICBmb3IgKGxldCBqID0gazsgaiA8IHAgLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gaHlwb3RlbnVzZShmLCBnKTtcbiAgICAgICAgICAgIGlmICh0ID09PSAwKSB0ID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICAgICAgICAgIGxldCBjcyA9IGYgLyB0O1xuICAgICAgICAgICAgbGV0IHNuID0gZyAvIHQ7XG4gICAgICAgICAgICBpZiAoaiAhPT0gaykge1xuICAgICAgICAgICAgICBlW2ogLSAxXSA9IHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmID0gY3MgKiBzW2pdICsgc24gKiBlW2pdO1xuICAgICAgICAgICAgZVtqXSA9IGNzICogZVtqXSAtIHNuICogc1tqXTtcbiAgICAgICAgICAgIGcgPSBzbiAqIHNbaiArIDFdO1xuICAgICAgICAgICAgc1tqICsgMV0gPSBjcyAqIHNbaiArIDFdO1xuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVi5nZXQoaSwgaikgKyBzbiAqIFYuZ2V0KGksIGogKyAxKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBqICsgMSwgLXNuICogVi5nZXQoaSwgaikgKyBjcyAqIFYuZ2V0KGksIGogKyAxKSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSBoeXBvdGVudXNlKGYsIGcpO1xuICAgICAgICAgICAgaWYgKHQgPT09IDApIHQgPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgICAgICAgY3MgPSBmIC8gdDtcbiAgICAgICAgICAgIHNuID0gZyAvIHQ7XG4gICAgICAgICAgICBzW2pdID0gdDtcbiAgICAgICAgICAgIGYgPSBjcyAqIGVbal0gKyBzbiAqIHNbaiArIDFdO1xuICAgICAgICAgICAgc1tqICsgMV0gPSAtc24gKiBlW2pdICsgY3MgKiBzW2ogKyAxXTtcbiAgICAgICAgICAgIGcgPSBzbiAqIGVbaiArIDFdO1xuICAgICAgICAgICAgZVtqICsgMV0gPSBjcyAqIGVbaiArIDFdO1xuICAgICAgICAgICAgaWYgKHdhbnR1ICYmIGogPCBtIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBjcyAqIFUuZ2V0KGksIGopICsgc24gKiBVLmdldChpLCBqICsgMSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaiArIDEsIC1zbiAqIFUuZ2V0KGksIGopICsgY3MgKiBVLmdldChpLCBqICsgMSkpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGosIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVbcCAtIDJdID0gZjtcbiAgICAgICAgICBpdGVyID0gaXRlciArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgaWYgKHNba10gPD0gMCkge1xuICAgICAgICAgICAgc1trXSA9IHNba10gPCAwID8gLXNba10gOiAwO1xuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHBwOyBpKyspIHtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBrLCAtVi5nZXQoaSwgaykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChrIDwgcHApIHtcbiAgICAgICAgICAgIGlmIChzW2tdID49IHNbayArIDFdKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHQgPSBzW2tdO1xuICAgICAgICAgICAgc1trXSA9IHNbayArIDFdO1xuICAgICAgICAgICAgc1trICsgMV0gPSB0O1xuICAgICAgICAgICAgaWYgKHdhbnR2ICYmIGsgPCBuIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBWLmdldChpLCBrICsgMSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgayArIDEsIFYuZ2V0KGksIGspKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBrLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR1ICYmIGsgPCBtIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBVLmdldChpLCBrICsgMSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgayArIDEsIFUuZ2V0KGksIGspKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBrLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaysrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpdGVyID0gMDtcbiAgICAgICAgICBwLS07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzd2FwcGVkKSB7XG4gICAgICBsZXQgdG1wID0gVjtcbiAgICAgIFYgPSBVO1xuICAgICAgVSA9IHRtcDtcbiAgICB9XG5cbiAgICB0aGlzLm0gPSBtO1xuICAgIHRoaXMubiA9IG47XG4gICAgdGhpcy5zID0gcztcbiAgICB0aGlzLlUgPSBVO1xuICAgIHRoaXMuViA9IFY7XG4gIH1cblxuICBzb2x2ZSh2YWx1ZSkge1xuICAgIGxldCBZID0gdmFsdWU7XG4gICAgbGV0IGUgPSB0aGlzLnRocmVzaG9sZDtcbiAgICBsZXQgc2NvbHMgPSB0aGlzLnMubGVuZ3RoO1xuICAgIGxldCBMcyA9IE1hdHJpeC56ZXJvcyhzY29scywgc2NvbHMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY29sczsgaSsrKSB7XG4gICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2ldKSA8PSBlKSB7XG4gICAgICAgIExzLnNldChpLCBpLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIExzLnNldChpLCBpLCAxIC8gdGhpcy5zW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgVSA9IHRoaXMuVTtcbiAgICBsZXQgViA9IHRoaXMucmlnaHRTaW5ndWxhclZlY3RvcnM7XG5cbiAgICBsZXQgVkwgPSBWLm1tdWwoTHMpO1xuICAgIGxldCB2cm93cyA9IFYucm93cztcbiAgICBsZXQgdXJvd3MgPSBVLnJvd3M7XG4gICAgbGV0IFZMVSA9IE1hdHJpeC56ZXJvcyh2cm93cywgdXJvd3MpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHVyb3dzOyBqKyspIHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgc2NvbHM7IGsrKykge1xuICAgICAgICAgIHN1bSArPSBWTC5nZXQoaSwgaykgKiBVLmdldChqLCBrKTtcbiAgICAgICAgfVxuICAgICAgICBWTFUuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFZMVS5tbXVsKFkpO1xuICB9XG5cbiAgc29sdmVGb3JEaWFnb25hbCh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNvbHZlKE1hdHJpeC5kaWFnKHZhbHVlKSk7XG4gIH1cblxuICBpbnZlcnNlKCkge1xuICAgIGxldCBWID0gdGhpcy5WO1xuICAgIGxldCBlID0gdGhpcy50aHJlc2hvbGQ7XG4gICAgbGV0IHZyb3dzID0gVi5yb3dzO1xuICAgIGxldCB2Y29scyA9IFYuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgodnJvd3MsIHRoaXMucy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZjb2xzOyBqKyspIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuc1tqXSkgPiBlKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgVi5nZXQoaSwgaikgLyB0aGlzLnNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IFUgPSB0aGlzLlU7XG5cbiAgICBsZXQgdXJvd3MgPSBVLnJvd3M7XG4gICAgbGV0IHVjb2xzID0gVS5jb2x1bW5zO1xuICAgIGxldCBZID0gbmV3IE1hdHJpeCh2cm93cywgdXJvd3MpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHVyb3dzOyBqKyspIHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdWNvbHM7IGsrKykge1xuICAgICAgICAgIHN1bSArPSBYLmdldChpLCBrKSAqIFUuZ2V0KGosIGspO1xuICAgICAgICB9XG4gICAgICAgIFkuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNbMF0gLyB0aGlzLnNbTWF0aC5taW4odGhpcy5tLCB0aGlzLm4pIC0gMV07XG4gIH1cblxuICBnZXQgbm9ybTIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc1swXTtcbiAgfVxuXG4gIGdldCByYW5rKCkge1xuICAgIGxldCB0b2wgPSBNYXRoLm1heCh0aGlzLm0sIHRoaXMubikgKiB0aGlzLnNbMF0gKiBOdW1iZXIuRVBTSUxPTjtcbiAgICBsZXQgciA9IDA7XG4gICAgbGV0IHMgPSB0aGlzLnM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBpZiAoc1tpXSA+IHRvbCkge1xuICAgICAgICByKys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgZ2V0IGRpYWdvbmFsKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucyk7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCkge1xuICAgIHJldHVybiAoTnVtYmVyLkVQU0lMT04gLyAyKSAqIE1hdGgubWF4KHRoaXMubSwgdGhpcy5uKSAqIHRoaXMuc1swXTtcbiAgfVxuXG4gIGdldCBsZWZ0U2luZ3VsYXJWZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLlU7XG4gIH1cblxuICBnZXQgcmlnaHRTaW5ndWxhclZlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuVjtcbiAgfVxuXG4gIGdldCBkaWFnb25hbE1hdHJpeCgpIHtcbiAgICByZXR1cm4gTWF0cml4LmRpYWcodGhpcy5zKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaW52ZXJzZSwgTWF0cml4IH0gZnJvbSAnbWwtbWF0cml4JztcblxuLyoqXG4gKiBEaWZmZXJlbmNlIG9mIHRoZSBtYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgcGFyYW1ldGVyc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXMgLSBBcnJheSBvZiBwcmV2aW91cyBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JhZGllbnREaWZmZXJlbmNlIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbUZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICogQHJldHVybiB7TWF0cml4fVxuICovXG5mdW5jdGlvbiBncmFkaWVudEZ1bmN0aW9uKFxuICBkYXRhLFxuICBldmFsdWF0ZWREYXRhLFxuICBwYXJhbXMsXG4gIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgcGFyYW1GdW5jdGlvbixcbikge1xuICBjb25zdCBuID0gcGFyYW1zLmxlbmd0aDtcbiAgY29uc3QgbSA9IGRhdGEueC5sZW5ndGg7XG5cbiAgbGV0IGFucyA9IG5ldyBBcnJheShuKTtcblxuICBmb3IgKGxldCBwYXJhbSA9IDA7IHBhcmFtIDwgbjsgcGFyYW0rKykge1xuICAgIGFuc1twYXJhbV0gPSBuZXcgQXJyYXkobSk7XG4gICAgbGV0IGF1eFBhcmFtcyA9IHBhcmFtcy5zbGljZSgpO1xuICAgIGF1eFBhcmFtc1twYXJhbV0gKz0gZ3JhZGllbnREaWZmZXJlbmNlO1xuICAgIGxldCBmdW5jUGFyYW0gPSBwYXJhbUZ1bmN0aW9uKGF1eFBhcmFtcyk7XG5cbiAgICBmb3IgKGxldCBwb2ludCA9IDA7IHBvaW50IDwgbTsgcG9pbnQrKykge1xuICAgICAgYW5zW3BhcmFtXVtwb2ludF0gPSBldmFsdWF0ZWREYXRhW3BvaW50XSAtIGZ1bmNQYXJhbShkYXRhLnhbcG9pbnRdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBNYXRyaXgoYW5zKTtcbn1cblxuLyoqXG4gKiBNYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgc2FtcGxlc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHJldHVybiB7TWF0cml4fVxuICovXG5mdW5jdGlvbiBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKSB7XG4gIGNvbnN0IG0gPSBkYXRhLngubGVuZ3RoO1xuXG4gIGxldCBhbnMgPSBuZXcgQXJyYXkobSk7XG5cbiAgZm9yIChsZXQgcG9pbnQgPSAwOyBwb2ludCA8IG07IHBvaW50KyspIHtcbiAgICBhbnNbcG9pbnRdID0gW2RhdGEueVtwb2ludF0gLSBldmFsdWF0ZWREYXRhW3BvaW50XV07XG4gIH1cblxuICByZXR1cm4gbmV3IE1hdHJpeChhbnMpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGlvbiBmb3IgTGV2ZW5iZXJnLU1hcnF1YXJkdFxuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXMgLSBBcnJheSBvZiBwcmV2aW91cyBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGFtcGluZyAtIExldmVuYmVyZy1NYXJxdWFyZHQgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JhZGllbnREaWZmZXJlbmNlIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtBcnJheTxudW1iZXI+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGVwKFxuICBkYXRhLFxuICBwYXJhbXMsXG4gIGRhbXBpbmcsXG4gIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuKSB7XG4gIGxldCB2YWx1ZSA9IGRhbXBpbmcgKiBncmFkaWVudERpZmZlcmVuY2UgKiBncmFkaWVudERpZmZlcmVuY2U7XG4gIGxldCBpZGVudGl0eSA9IE1hdHJpeC5leWUocGFyYW1zLmxlbmd0aCwgcGFyYW1zLmxlbmd0aCwgdmFsdWUpO1xuXG4gIGNvbnN0IGZ1bmMgPSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24ocGFyYW1zKTtcblxuICBsZXQgZXZhbHVhdGVkRGF0YSA9IG5ldyBGbG9hdDY0QXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgZXZhbHVhdGVkRGF0YVtpXSA9IGZ1bmMoZGF0YS54W2ldKTtcbiAgfVxuXG4gIGxldCBncmFkaWVudEZ1bmMgPSBncmFkaWVudEZ1bmN0aW9uKFxuICAgIGRhdGEsXG4gICAgZXZhbHVhdGVkRGF0YSxcbiAgICBwYXJhbXMsXG4gICAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICAgIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgKTtcbiAgbGV0IG1hdHJpeEZ1bmMgPSBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKTtcbiAgbGV0IGludmVyc2VNYXRyaXggPSBpbnZlcnNlKFxuICAgIGlkZW50aXR5LmFkZChncmFkaWVudEZ1bmMubW11bChncmFkaWVudEZ1bmMudHJhbnNwb3NlKCkpKSxcbiAgKTtcblxuICBwYXJhbXMgPSBuZXcgTWF0cml4KFtwYXJhbXNdKTtcbiAgcGFyYW1zID0gcGFyYW1zLnN1YihcbiAgICBpbnZlcnNlTWF0cml4XG4gICAgICAubW11bChncmFkaWVudEZ1bmMpXG4gICAgICAubW11bChtYXRyaXhGdW5jKVxuICAgICAgLm11bChncmFkaWVudERpZmZlcmVuY2UpXG4gICAgICAudHJhbnNwb3NlKCksXG4gICk7XG5cbiAgcmV0dXJuIHBhcmFtcy50bzFEQXJyYXkoKTtcbn1cbiIsImltcG9ydCBMdURlY29tcG9zaXRpb24gZnJvbSAnLi9kYy9sdSc7XG5pbXBvcnQgUXJEZWNvbXBvc2l0aW9uIGZyb20gJy4vZGMvcXInO1xuaW1wb3J0IFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIGZyb20gJy4vZGMvc3ZkJztcbmltcG9ydCBNYXRyaXggZnJvbSAnLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuL3dyYXAvV3JhcHBlck1hdHJpeDJEJztcblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UobWF0cml4LCB1c2VTVkQgPSBmYWxzZSkge1xuICBtYXRyaXggPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgaWYgKHVzZVNWRCkge1xuICAgIHJldHVybiBuZXcgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24obWF0cml4KS5pbnZlcnNlKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHNvbHZlKG1hdHJpeCwgTWF0cml4LmV5ZShtYXRyaXgucm93cykpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb2x2ZShsZWZ0SGFuZFNpZGUsIHJpZ2h0SGFuZFNpZGUsIHVzZVNWRCA9IGZhbHNlKSB7XG4gIGxlZnRIYW5kU2lkZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChsZWZ0SGFuZFNpZGUpO1xuICByaWdodEhhbmRTaWRlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KHJpZ2h0SGFuZFNpZGUpO1xuICBpZiAodXNlU1ZEKSB7XG4gICAgcmV0dXJuIG5ldyBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbihsZWZ0SGFuZFNpZGUpLnNvbHZlKHJpZ2h0SGFuZFNpZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsZWZ0SGFuZFNpZGUuaXNTcXVhcmUoKVxuICAgICAgPyBuZXcgTHVEZWNvbXBvc2l0aW9uKGxlZnRIYW5kU2lkZSkuc29sdmUocmlnaHRIYW5kU2lkZSlcbiAgICAgIDogbmV3IFFyRGVjb21wb3NpdGlvbihsZWZ0SGFuZFNpZGUpLnNvbHZlKHJpZ2h0SGFuZFNpZGUpO1xuICB9XG59XG4iXSwibmFtZXMiOlsidG9TdHJpbmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJpc0FueUFycmF5Iiwib2JqZWN0IiwiY2FsbCIsImVuZHNXaXRoIiwiZXJyb3JDYWxjdWxhdGlvbiIsImRhdGEiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyaXplZEZ1bmN0aW9uIiwiZXJyb3IiLCJmdW5jIiwiaSIsIngiLCJsZW5ndGgiLCJNYXRoIiwiYWJzIiwieSIsInZhbHVlIiwidGFnIiwiaW5jbHVkZXMiLCJyZXNjYWxlIiwiaW5wdXQiLCJvdXRwdXQiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiQXJyYXkiLCJjdXJyZW50TWluIiwiX29wdGlvbnMkZnJvbUluZGV4IiwiZnJvbUluZGV4IiwiX29wdGlvbnMkdG9JbmRleCIsInRvSW5kZXgiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJFcnJvciIsIm1pblZhbHVlIiwibWluIiwiY3VycmVudE1heCIsIm1heFZhbHVlIiwibWF4IiwiUmFuZ2VFcnJvciIsIl9vcHRpb25zJG1pbiIsImF1dG9NaW5NYXgiLCJfb3B0aW9ucyRtYXgiLCJmYWN0b3IiLCJpbmRlbnQiLCJyZXBlYXQiLCJpbmRlbnREYXRhIiwiaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zIiwibWF0cml4IiwibWF4Um93cyIsIm1heENvbHVtbnMiLCJtYXhOdW1TaXplIiwicGFkTWludXMiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJyb3dzIiwiY29sdW1ucyIsIm1heEkiLCJtYXhKIiwicmVzdWx0IiwibG9vcCIsImoiLCJnZXQiLCJsaW5lIiwicHVzaCIsImZvcm1hdE51bWJlciIsImpvaW4iLCJpbnNwZWN0RGF0YSIsIm51bSIsImZvcm1hdE51bWJlcjIiLCJwYWRFbmQiLCJsZW4iLCJzdHIiLCJmaXgiLCJ0b0ZpeGVkIiwic3RhcnRzV2l0aCIsImV4cCIsInRvRXhwb25lbnRpYWwiLCJzbGljZSIsImNoZWNrUm93SW5kZXgiLCJpbmRleCIsIm91dGVyIiwiY2hlY2tDb2x1bW5JbmRleCIsImNoZWNrUm93VmVjdG9yIiwidmVjdG9yIiwidG8xREFycmF5IiwiY2hlY2tDb2x1bW5WZWN0b3IiLCJjaGVja1JhbmdlIiwic3RhcnRSb3ciLCJlbmRSb3ciLCJzdGFydENvbHVtbiIsImVuZENvbHVtbiIsImNoZWNrTnVtYmVyIiwibmV3QXJyYXkiLCJhcnJheSIsImNoZWNrTm9uRW1wdHkiLCJpc0VtcHR5IiwiQWJzdHJhY3RNYXRyaXgiLCJzdGF0aWMiLCJuZXdSb3dzIiwibmV3Q29sdW1ucyIsIm5ld0RhdGEiLCJuZXdNYXRyaXgiLCJNYXRyaXgiLCJyb3ciLCJjb2x1bW4iLCJzZXQiLCJmaWxsIiwicmFuZG9tIiwiaW50ZXJ2YWwiLCJyb3VuZCIsInRoaXMiLCJ6ZXJvcyIsImwiLCJtYXRyaXgxIiwibWF0cml4MiIsImNoZWNrTWF0cml4IiwiaXNNYXRyaXgiLCJrbGFzcyIsInNpemUiLCJhcHBseSIsImNhbGxiYWNrIiwidG8yREFycmF5IiwiY29weSIsInRvSlNPTiIsImlzUm93VmVjdG9yIiwiaXNDb2x1bW5WZWN0b3IiLCJpc1ZlY3RvciIsImlzU3F1YXJlIiwiaXNTeW1tZXRyaWMiLCJpc0VjaGVsb25Gb3JtIiwicHJldmlvdXNDb2x1bW4iLCJjaGVja2VkIiwiaXNSZWR1Y2VkRWNoZWxvbkZvcm0iLCJrIiwiZWNoZWxvbkZvcm0iLCJjbG9uZSIsImgiLCJpTWF4Iiwic3dhcFJvd3MiLCJ0bXAiLCJyZWR1Y2VkRWNoZWxvbkZvcm0iLCJtIiwibiIsIm1heFJvdyIsInAiLCJwaXZvdCIsInNldFN1Yk1hdHJpeCIsIm5lZyIsIm11bFMiLCJnZXRSb3ciLCJnZXRSb3dWZWN0b3IiLCJyb3dWZWN0b3IiLCJzZXRSb3ciLCJyb3cxIiwicm93MiIsInRlbXAiLCJnZXRDb2x1bW4iLCJnZXRDb2x1bW5WZWN0b3IiLCJjb2x1bW5WZWN0b3IiLCJzZXRDb2x1bW4iLCJzd2FwQ29sdW1ucyIsImNvbHVtbjEiLCJjb2x1bW4yIiwiYWRkUm93VmVjdG9yIiwic3ViUm93VmVjdG9yIiwibXVsUm93VmVjdG9yIiwiZGl2Um93VmVjdG9yIiwiYWRkQ29sdW1uVmVjdG9yIiwic3ViQ29sdW1uVmVjdG9yIiwibXVsQ29sdW1uVmVjdG9yIiwiZGl2Q29sdW1uVmVjdG9yIiwibXVsUm93IiwibXVsQ29sdW1uIiwiYnkiLCJOYU4iLCJORUdBVElWRV9JTkZJTklUWSIsIm1heEluZGV4IiwidiIsImlkeCIsIlBPU0lUSVZFX0lORklOSVRZIiwibWluSW5kZXgiLCJtYXhSb3dJbmRleCIsIm1pblJvdyIsIm1pblJvd0luZGV4IiwibWF4Q29sdW1uIiwibWF4Q29sdW1uSW5kZXgiLCJtaW5Db2x1bW4iLCJtaW5Db2x1bW5JbmRleCIsImRpYWciLCJub3JtIiwidHlwZSIsInNxcnQiLCJjdW11bGF0aXZlU3VtIiwic3VtIiwiZG90IiwidmVjdG9yMiIsInZlY3RvcjEiLCJtbXVsIiwib3RoZXIiLCJCY29saiIsIkZsb2F0NjRBcnJheSIsInMiLCJzdHJhc3NlbjJ4MiIsImExMSIsImIxMSIsImExMiIsImIxMiIsImEyMSIsImIyMSIsImEyMiIsImIyMiIsIm0xIiwibTIiLCJtMyIsIm00IiwibTUiLCJjMDAiLCJjMDEiLCJjMTAiLCJjMTEiLCJzdHJhc3NlbjN4MyIsImEwMCIsImEwMSIsImEwMiIsImExMCIsImEyMCIsImIwMCIsImIwMSIsImIwMiIsImIxMCIsImIyMCIsIm02IiwibTciLCJtOCIsIm05IiwibTEyIiwibTEzIiwibTE0IiwibTE1IiwibTE2IiwibTE3IiwibTE4IiwiYzAyIiwiYzEyIiwiYzIwIiwiYzIxIiwiYzIyIiwibW11bFN0cmFzc2VuIiwicjEiLCJjMSIsInIyIiwiYzIiLCJlbWJlZCIsIm1hdCIsImNvbHMiLCJyIiwiYyIsInJlc3VsdGF0IiwiY29uc29sZSIsIndhcm4iLCJibG9ja011bHQiLCJhIiwiYiIsImhhbGZSb3dzIiwicGFyc2VJbnQiLCJoYWxmQ29scyIsInN1Yk1hdHJpeCIsImFkZCIsInN1YiIsInNjYWxlUm93cyIsImlzRmluaXRlIiwic2NhbGVDb2x1bW5zIiwiZmxpcFJvd3MiLCJtaWRkbGUiLCJjZWlsIiwiZmlyc3QiLCJsYXN0IiwiZmxpcENvbHVtbnMiLCJrcm9uZWNrZXJQcm9kdWN0IiwicSIsImtyb25lY2tlclN1bSIsIkF4SSIsImV5ZSIsIkl4QiIsInRyYW5zcG9zZSIsInNvcnRSb3dzIiwiY29tcGFyZUZ1bmN0aW9uIiwiY29tcGFyZU51bWJlcnMiLCJzb3J0Iiwic29ydENvbHVtbnMiLCJzdWJNYXRyaXhSb3ciLCJpbmRpY2VzIiwic3ViTWF0cml4Q29sdW1uIiwic2VsZWN0aW9uIiwicm93SW5kaWNlcyIsImNvbHVtbkluZGljZXMiLCJjaGVja1Jvd0luZGljZXMiLCJjaGVja0NvbHVtbkluZGljZXMiLCJyb3dJbmRleCIsImNvbHVtbkluZGV4IiwidHJhY2UiLCJzdW1CeVJvdyIsInN1bUJ5Q29sdW1uIiwic3VtQWxsIiwicHJvZHVjdCIsInByb2R1Y3RCeVJvdyIsInByb2R1Y3RCeUNvbHVtbiIsInByb2R1Y3RBbGwiLCJtZWFuIiwidmFyaWFuY2UiLCJ1bmJpYXNlZCIsInN1bTEiLCJzdW0yIiwidmFyaWFuY2VCeVJvdyIsInZhcmlhbmNlQnlDb2x1bW4iLCJ2YXJpYW5jZUFsbCIsInN0YW5kYXJkRGV2aWF0aW9uIiwiY2VudGVyIiwiY2VudGVyQnlSb3ciLCJjZW50ZXJCeUNvbHVtbiIsImNlbnRlckFsbCIsInNjYWxlIiwicG93IiwiZ2V0U2NhbGVCeVJvdyIsInNjYWxlQnlSb3ciLCJnZXRTY2FsZUJ5Q29sdW1uIiwic2NhbGVCeUNvbHVtbiIsImRpdmlkZXIiLCJnZXRTY2FsZUFsbCIsInNjYWxlQWxsIiwiU3ltYm9sIiwiZm9yIiwicmFuZCIsInJhbmRvbUludCIsInJhbmRJbnQiLCJkaWFnb25hbCIsImlkZW50aXR5IiwibmVnYXRlIiwidGVuc29yUHJvZHVjdCIsIm5Sb3dzIiwibkNvbHVtbnMiLCJzdXBlciIsImFycmF5RGF0YSIsImV2ZXJ5IiwiZWxlbWVudCIsImZyb20iLCJyZW1vdmVSb3ciLCJzcGxpY2UiLCJhZGRSb3ciLCJyZW1vdmVDb2x1bW4iLCJuZXdSb3ciLCJhZGRDb2x1bW4iLCJhZGRTIiwiYWRkTSIsInN1YlMiLCJzdWJNIiwic3VidHJhY3QiLCJzdWJ0cmFjdFMiLCJzdWJ0cmFjdE0iLCJtdWwiLCJtdWxNIiwibXVsdGlwbHkiLCJtdWx0aXBseVMiLCJtdWx0aXBseU0iLCJkaXYiLCJkaXZTIiwiZGl2TSIsImRpdmlkZSIsImRpdmlkZVMiLCJkaXZpZGVNIiwibW9kIiwibW9kUyIsIm1vZE0iLCJtb2R1bHVzIiwibW9kdWx1c1MiLCJtb2R1bHVzTSIsImFuZCIsImFuZFMiLCJhbmRNIiwib3IiLCJvclMiLCJvck0iLCJ4b3IiLCJ4b3JTIiwieG9yTSIsImxlZnRTaGlmdCIsImxlZnRTaGlmdFMiLCJsZWZ0U2hpZnRNIiwic2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCIsInNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTIiwic2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0iLCJyaWdodFNoaWZ0IiwicmlnaHRTaGlmdFMiLCJyaWdodFNoaWZ0TSIsInplcm9GaWxsUmlnaHRTaGlmdCIsInplcm9GaWxsUmlnaHRTaGlmdFMiLCJ6ZXJvRmlsbFJpZ2h0U2hpZnRNIiwibm90IiwiYWNvcyIsImFjb3NoIiwiYXNpbiIsImFzaW5oIiwiYXRhbiIsImF0YW5oIiwiY2JydCIsImNsejMyIiwiY29zIiwiY29zaCIsImV4cG0xIiwiZmxvb3IiLCJmcm91bmQiLCJsb2ciLCJsb2cxcCIsImxvZzEwIiwibG9nMiIsInNpZ24iLCJzaW4iLCJzaW5oIiwidGFuIiwidGFuaCIsInRydW5jIiwiYXJnMCIsInBvd1MiLCJwb3dNIiwiaW5zdGFsbE1hdGhPcGVyYXRpb25zIiwiV3JhcHBlck1hdHJpeDJEIiwiTHVEZWNvbXBvc2l0aW9uIiwidCIsIkxVY29saiIsImttYXgiLCJsdSIsInBpdm90VmVjdG9yIiwicGl2b3RTaWduIiwiTFUiLCJpc1Npbmd1bGFyIiwiY29sIiwic29sdmUiLCJjb3VudCIsIlgiLCJkZXRlcm1pbmFudCIsImxvd2VyVHJpYW5ndWxhck1hdHJpeCIsInVwcGVyVHJpYW5ndWxhck1hdHJpeCIsInBpdm90UGVybXV0YXRpb25WZWN0b3IiLCJoeXBvdGVudXNlIiwiUXJEZWNvbXBvc2l0aW9uIiwicXIiLCJyZGlhZyIsIm5ybSIsIlFSIiwiUmRpYWciLCJpc0Z1bGxSYW5rIiwib3J0aG9nb25hbE1hdHJpeCIsIlNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIiwiY29tcHV0ZUxlZnRTaW5ndWxhclZlY3RvcnMiLCJjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnMiLCJhdXRvVHJhbnNwb3NlIiwid2FudHUiLCJCb29sZWFuIiwid2FudHYiLCJzd2FwcGVkIiwiYXV4IiwibnUiLCJuaSIsIlUiLCJWIiwiZSIsIndvcmsiLCJzaSIsIm5jdCIsIm5ydCIsIm1yYyIsInBwIiwiaXRlciIsImVwcyIsIkVQU0lMT04iLCJrYXNlIiwiYWxwaGEiLCJNSU5fVkFMVUUiLCJpc05hTiIsImtzIiwiZiIsImNzIiwic24iLCJzcCIsInNwbTEiLCJlcG0xIiwic2siLCJlayIsInNoaWZ0IiwiZyIsIlkiLCJ0aHJlc2hvbGQiLCJzY29scyIsIkxzIiwicmlnaHRTaW5ndWxhclZlY3RvcnMiLCJWTCIsInZyb3dzIiwidXJvd3MiLCJWTFUiLCJzb2x2ZUZvckRpYWdvbmFsIiwiaW52ZXJzZSIsInZjb2xzIiwidWNvbHMiLCJjb25kaXRpb24iLCJub3JtMiIsInJhbmsiLCJ0b2wiLCJpaSIsImxlZnRTaW5ndWxhclZlY3RvcnMiLCJkaWFnb25hbE1hdHJpeCIsInN0ZXAiLCJwYXJhbXMiLCJkYW1waW5nIiwiZ3JhZGllbnREaWZmZXJlbmNlIiwiZXZhbHVhdGVkRGF0YSIsImdyYWRpZW50RnVuYyIsInBhcmFtRnVuY3Rpb24iLCJhbnMiLCJwYXJhbSIsImF1eFBhcmFtcyIsImZ1bmNQYXJhbSIsInBvaW50IiwiZ3JhZGllbnRGdW5jdGlvbiIsIm1hdHJpeEZ1bmMiLCJtYXRyaXhGdW5jdGlvbiIsImludmVyc2VNYXRyaXgiLCJ1c2VTVkQiLCJsZWZ0SGFuZFNpZGUiLCJyaWdodEhhbmRTaWRlIl0sInNvdXJjZVJvb3QiOiIifQ==
|