function _usingCtx2(){var r="function"==typeof SuppressedError?SuppressedError:function(r,n){var e=new Error;return e.name="SuppressedError",e.suppressed=n,e.error=r,e},n={},e=[];function using(r,n){if(null!=n){if(Object(n)!==n)throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");if(r)var o=n[Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose")];if(null==o&&(o=n[Symbol.dispose||Symbol.for("Symbol.dispose")]),"function"!=typeof o)throw new TypeError("Property [Symbol.dispose] is not a function.");e.push({v:n,d:o,a:r})}return n}return{e:n,u:using.bind(null,!1),a:using.bind(null,!0),d:function(){var o=this.e;function next(){for(;r=e.pop();)try{var r,t=r.d.call(r.v);if(r.a)return Promise.resolve(t).then(next,err)}catch(r){return err(r)}if(o!==n)throw o}function err(e){return o=o!==n?new r(o,e):e,next()}return next()}}}import{copysign}from"../scalar.js";import{Mat3,Mat4}from"./mat.js";import{BYTES_PER_FLOAT64,memoryManager}from"./memory.js";import{Quat}from"./quat.js";import{Vec3}from"./vec.js";const TEMP_VEC3=new Float64Array(3);const TEMP_MAT3=new Float64Array(9);const TEMP_MAT4=new Float64Array(16);const MAT3_ID=[1,0,0,0,1,0,0,0,1];const MAT4_ID=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];export function translation2d(v,out=Mat3.identity()){out.set(MAT3_ID);out.copy(v,6,0,2);return out}export function scaling2d(v,out=Mat3.identity()){const[x,y]=v;TEMP_MAT3.set(MAT3_ID);TEMP_MAT3[0]=x;TEMP_MAT3[4]=y;out.set(TEMP_MAT3);return out}export function rotation2d(angle,out=Mat3.identity()){TEMP_MAT3.set(MAT3_ID);TEMP_MAT3[0]=TEMP_MAT3[4]=Math.cos(angle);TEMP_MAT3[1]=TEMP_MAT3[3]=Math.sin(angle);TEMP_MAT3[3]*=-1;out.set(TEMP_MAT3);return out}export function transformation2d(translate,rotateAngle,scale,out=Mat3.identity()){TEMP_MAT3.set(MAT3_ID);TEMP_MAT3[0]=TEMP_MAT3[4]=Math.cos(rotateAngle);TEMP_MAT3[1]=TEMP_MAT3[3]=Math.sin(rotateAngle);TEMP_MAT3[3]*=-1;const scaling=[...scale];for(let i=0;i<2;++i){for(let j=0;j<2;++j){TEMP_MAT3[3*i+j]*=scaling[i]}}out.set(TEMP_MAT3);out.copy(translate,6,0,2);return out}export function translation(v,out=Mat4.identity()){out.set(MAT4_ID);out.copy(v,12,0,3);return out}export function scaling(v,out=Mat4.identity()){const[x,y,z]=v;out.set(MAT4_ID);out.setAt(0,x);out.setAt(5,y);out.setAt(10,z);return out}export function rotation(q,out=Mat4.identity()){const[x,y,z,w]=q;const xx=x*x,xy=x*y,xz=x*z,yy=y*y,yz=y*z,zz=z*z,wx=w*x,wy=w*y,wz=w*z;TEMP_MAT4[0]=1-2*(yy+zz);TEMP_MAT4[1]=2*(xy+wz);TEMP_MAT4[2]=2*(xz-wy);TEMP_MAT4[4]=2*(xy-wz);TEMP_MAT4[5]=1-2*(xx+zz);TEMP_MAT4[6]=2*(yz+wx);TEMP_MAT4[8]=2*(xz+wy);TEMP_MAT4[9]=2*(yz-wx);TEMP_MAT4[10]=1-2*(xx+yy);TEMP_MAT4[3]=TEMP_MAT4[7]=TEMP_MAT4[11]=TEMP_MAT4[12]=TEMP_MAT4[13]=TEMP_MAT4[14]=0;TEMP_MAT4[15]=1;out.set(TEMP_MAT4);return out}export function translationOf(m,out=new Vec3){out.copy(m,0,12,3);return out}function _scalingOf(m){const view=memoryManager.view;const start=m.byteOffset/BYTES_PER_FLOAT64|0;for(let i=0;i<3;++i){TEMP_VEC3[i]=0;for(let j=0;j<3;++j){TEMP_VEC3[i]+=view[start+4*i+j]*view[start+4*i+j]}TEMP_VEC3[i]=Math.sqrt(TEMP_VEC3[i])}return TEMP_VEC3}export function scalingOf(m,out=new Vec3){out.set(_scalingOf(m));return out}export function rotationOf(trs,out=Quat.identity()){const m=[...trs];const[sx,sy,sz]=_scalingOf(trs);const m00=m[0]/sx,m11=m[5]/sy,m22=m[10]/sz;out.set([copysign(Math.sqrt(Math.max(0,1+m00-m11-m22))/2,m[6]/sy-m[9]/sz),copysign(Math.sqrt(Math.max(0,1-m00+m11-m22))/2,m[8]/sz-m[2]/sx),copysign(Math.sqrt(Math.max(0,1-m00-m11+m22))/2,m[1]/sx-m[4]/sy),Math.sqrt(Math.max(0,1+m00+m11+m22))/2]);return out}export function transformation(translate,rotate,scale,out=Mat4.identity()){rotation(rotate,out);const m=[...out];const scaling=[...scale];for(let i=0;i<3;++i){for(let j=0;j<3;++j){m[4*i+j]*=scaling[i]}}out.set(m);out.copy(translate,12,0,3);return out}export function inverseTRS(trs,out=Mat4.identity()){try{var _usingCtx=_usingCtx2();const t=_usingCtx.u(new Vec3);t.copy(trs,0,12,3);const scale=_scalingOf(trs);out.copy(trs);out.transpose();const m=[...out];m[3]=m[7]=m[11]=0;for(let i=0;i<3;++i){for(let j=0;j<3;++j){const factor=scale[j]*scale[j];if(factor===0){return false}m[4*i+j]*=1/factor}}out.set(m);t.scale(-1).mulMat4(out);out.copy(t,12,0,3);return true}catch(_){_usingCtx.e=_}finally{_usingCtx.d()}}export function ortho(left,right,bottom,top,znear,zfar,out=Mat4.identity()){const x=1/(right-left);const y=1/(top-bottom);const z=1/(znear-zfar);TEMP_MAT4.set(MAT4_ID);TEMP_MAT4[0]=2*x;TEMP_MAT4[5]=2*y;TEMP_MAT4[10]=2*z;TEMP_MAT4[12]=-(right+left)*x;TEMP_MAT4[13]=-(top+bottom)*y;TEMP_MAT4[14]=(znear+zfar)*z;out.set(TEMP_MAT4);return out}export function perspective(aspect,yfov,znear,zfar,out=Mat4.identity()){const f=1/Math.tan(yfov/2);TEMP_MAT4.set(MAT4_ID);TEMP_MAT4[0]=f/aspect;TEMP_MAT4[5]=f;TEMP_MAT4[11]=-1;TEMP_MAT4[15]=0;if(isFinite(zfar)){const rangeInv=1/(znear-zfar);TEMP_MAT4[10]=(znear+zfar)*rangeInv;TEMP_MAT4[14]=2*znear*zfar*rangeInv}else{TEMP_MAT4[10]=-1;TEMP_MAT4[14]=-2*znear}out.set(TEMP_MAT4);return out}export function perspectiveViewport(left,right,bottom,top,znear,zfar,out=Mat4.identity()){const x=1/(right-left);const y=1/(top-bottom);TEMP_MAT4.set(MAT4_ID);TEMP_MAT4[0]=2*znear*x;TEMP_MAT4[5]=2*znear*y;TEMP_MAT4[8]=(right+left)*x;TEMP_MAT4[9]=(top+bottom)*y;TEMP_MAT4[11]=-1;TEMP_MAT4[15]=0;if(isFinite(zfar)){const rangeInv=1/(znear-zfar);TEMP_MAT4[10]=(znear+zfar)*rangeInv;TEMP_MAT4[14]=2*znear*zfar*rangeInv}else{TEMP_MAT4[10]=-1;TEMP_MAT4[14]=-2*znear}out.set(TEMP_MAT4);return out}export function targetTo(eye,center,up,out=Mat4.identity()){try{var _usingCtx3=_usingCtx2();const v=_usingCtx3.u(new Vec3),n=_usingCtx3.u(new Vec3),u=_usingCtx3.u(new Vec3);v.copy(eye);v.sub(center).normalize();n.copy(up);n.cross(v).normalize();u.copy(v);u.cross(n).normalize();out.set(MAT4_ID);out.copy(n,0,0,3);out.copy(u,4,0,3);out.copy(v,8,0,3);out.copy(eye,12,0,3);return out}catch(_){_usingCtx3.e=_}finally{_usingCtx3.d()}}export function lookAt(eye,center,up,out=Mat4.identity()){try{var _usingCtx4=_usingCtx2();const v=_usingCtx4.u(new Vec3),n=_usingCtx4.u(new Vec3),u=_usingCtx4.u(new Vec3);v.copy(center);v.sub(eye).normalize();n.copy(v);n.cross(up).normalize();u.copy(n);u.cross(v).normalize();const m=[...v,...n,...u];TEMP_MAT4[0]=m[3];TEMP_MAT4[1]=m[6];TEMP_MAT4[2]=-m[0];TEMP_MAT4[4]=m[4];TEMP_MAT4[5]=m[7];TEMP_MAT4[6]=-m[1];TEMP_MAT4[8]=m[5];TEMP_MAT4[9]=m[8];TEMP_MAT4[10]=-m[2];TEMP_MAT4[12]=-n.dot(eye);TEMP_MAT4[13]=-u.dot(eye);TEMP_MAT4[14]=v.dot(eye);TEMP_MAT4[3]=TEMP_MAT4[7]=TEMP_MAT4[11]=0;TEMP_MAT4[15]=1;out.set(TEMP_MAT4);return out}catch(_){_usingCtx4.e=_}finally{_usingCtx4.d()}}export function lookAtDir(pitch,yaw,out=new Vec3){const negCosPitch=-Math.cos(pitch);TEMP_VEC3[0]=negCosPitch*Math.sin(yaw);TEMP_VEC3[1]=Math.sin(pitch);TEMP_VEC3[2]=negCosPitch*Math.cos(yaw);out.set(TEMP_VEC3);return out} //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3B5c2lnbiIsIk1hdDMiLCJNYXQ0IiwiQllURVNfUEVSX0ZMT0FUNjQiLCJtZW1vcnlNYW5hZ2VyIiwiUXVhdCIsIlZlYzMiLCJURU1QX1ZFQzMiLCJGbG9hdDY0QXJyYXkiLCJURU1QX01BVDMiLCJURU1QX01BVDQiLCJNQVQzX0lEIiwiTUFUNF9JRCIsInRyYW5zbGF0aW9uMmQiLCJ2Iiwib3V0IiwiaWRlbnRpdHkiLCJzZXQiLCJjb3B5Iiwic2NhbGluZzJkIiwieCIsInkiLCJyb3RhdGlvbjJkIiwiYW5nbGUiLCJNYXRoIiwiY29zIiwic2luIiwidHJhbnNmb3JtYXRpb24yZCIsInRyYW5zbGF0ZSIsInJvdGF0ZUFuZ2xlIiwic2NhbGUiLCJzY2FsaW5nIiwiaSIsImoiLCJ0cmFuc2xhdGlvbiIsInoiLCJzZXRBdCIsInJvdGF0aW9uIiwicSIsInciLCJ4eCIsInh5IiwieHoiLCJ5eSIsInl6IiwienoiLCJ3eCIsInd5Iiwid3oiLCJ0cmFuc2xhdGlvbk9mIiwibSIsIl9zY2FsaW5nT2YiLCJ2aWV3Iiwic3RhcnQiLCJieXRlT2Zmc2V0Iiwic3FydCIsInNjYWxpbmdPZiIsInJvdGF0aW9uT2YiLCJ0cnMiLCJzeCIsInN5Iiwic3oiLCJtMDAiLCJtMTEiLCJtMjIiLCJtYXgiLCJ0cmFuc2Zvcm1hdGlvbiIsInJvdGF0ZSIsImludmVyc2VUUlMiLCJfdXNpbmdDdHgiLCJfdXNpbmdDdHgyIiwidCIsInUiLCJ0cmFuc3Bvc2UiLCJmYWN0b3IiLCJtdWxNYXQ0IiwiXyIsImUiLCJkIiwib3J0aG8iLCJsZWZ0IiwicmlnaHQiLCJib3R0b20iLCJ0b3AiLCJ6bmVhciIsInpmYXIiLCJwZXJzcGVjdGl2ZSIsImFzcGVjdCIsInlmb3YiLCJmIiwidGFuIiwiaXNGaW5pdGUiLCJyYW5nZUludiIsInBlcnNwZWN0aXZlVmlld3BvcnQiLCJ0YXJnZXRUbyIsImV5ZSIsImNlbnRlciIsInVwIiwiX3VzaW5nQ3R4MyIsIm4iLCJzdWIiLCJub3JtYWxpemUiLCJjcm9zcyIsImxvb2tBdCIsIl91c2luZ0N0eDQiLCJkb3QiLCJsb29rQXREaXIiLCJwaXRjaCIsInlhdyIsIm5lZ0Nvc1BpdGNoIl0sInNvdXJjZXMiOlsiLi4vLi4vanMvanMvdHJhbnNmb3JtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcHlzaWduIH0gZnJvbSAnLi4vc2NhbGFyLnRzJztcbmltcG9ydCB7IE1hdDMsIE1hdDQgfSBmcm9tICcuL21hdC50cyc7XG5pbXBvcnQgeyBCWVRFU19QRVJfRkxPQVQ2NCwgbWVtb3J5TWFuYWdlciB9IGZyb20gJy4vbWVtb3J5LnRzJztcbmltcG9ydCB7IFF1YXQgfSBmcm9tICcuL3F1YXQudHMnO1xuaW1wb3J0IHsgVmVjMiwgVmVjMyB9IGZyb20gJy4vdmVjLnRzJztcblxuY29uc3QgVEVNUF9WRUMzID0gbmV3IEZsb2F0NjRBcnJheSgzKTtcbmNvbnN0IFRFTVBfTUFUMyA9IG5ldyBGbG9hdDY0QXJyYXkoOSk7XG5jb25zdCBURU1QX01BVDQgPSBuZXcgRmxvYXQ2NEFycmF5KDE2KTtcbmNvbnN0IE1BVDNfSUQgPSBbMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMV07XG5jb25zdCBNQVQ0X0lEID0gWzEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDFdO1xuXG4vKiogUmV0dXJucyBhIHtAbGluayBNYXQzfSBmb3IgYSAyRCBwb2ludCB0cmFuc2xhdGVkIGJ5ICh4LCB5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGlvbjJkKHY6IFZlYzIsIG91dCA9IE1hdDMuaWRlbnRpdHkoKSk6IE1hdDMge1xuICBvdXQuc2V0KE1BVDNfSUQpO1xuICBvdXQuY29weSh2LCA2LCAwLCAyKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJldHVybnMgYSB7QGxpbmsgTWF0M30gZm9yIGEgMkQgcG9pbnQgc2NhbGVkIGJ5ICh4LCB5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2FsaW5nMmQodjogVmVjMiwgb3V0ID0gTWF0My5pZGVudGl0eSgpKTogTWF0MyB7XG4gIGNvbnN0IFt4LCB5XSA9IHY7XG4gIFRFTVBfTUFUMy5zZXQoTUFUM19JRCk7XG4gIFRFTVBfTUFUM1swXSA9IHg7XG4gIFRFTVBfTUFUM1s0XSA9IHk7XG4gIG91dC5zZXQoVEVNUF9NQVQzKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJldHVybnMgYSB7QGxpbmsgTWF0M30gZm9yIGEgMkQgcG9pbnQgcm90YXRlZCBpbiBjb3V0ZXJjbG9ja3dpc2UgZGlyZWN0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0aW9uMmQoYW5nbGU6IG51bWJlciwgb3V0ID0gTWF0My5pZGVudGl0eSgpKTogTWF0MyB7XG4gIFRFTVBfTUFUMy5zZXQoTUFUM19JRCk7XG4gIFRFTVBfTUFUM1swXSA9IFRFTVBfTUFUM1s0XSA9IE1hdGguY29zKGFuZ2xlKTtcbiAgVEVNUF9NQVQzWzFdID0gVEVNUF9NQVQzWzNdID0gTWF0aC5zaW4oYW5nbGUpO1xuICBURU1QX01BVDNbM10gKj0gLTE7XG4gIG91dC5zZXQoVEVNUF9NQVQzKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIE1hdDN9IGZvciB0cmFuc2Zvcm1hdGlvbiBpbiBUUlMgb3JkZXIgKD0gdHJhbnNsYXRpb24gKiByb3RhdGlvbiAqIHNjYWxlKS5cbiAqIEByZXR1cm5zIG91dCA9IHRyYW5zbGF0aW9uICogcm90YXRpb24gKiBzY2FsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtYXRpb24yZCh0cmFuc2xhdGU6IFZlYzIsIHJvdGF0ZUFuZ2xlOiBudW1iZXIsIHNjYWxlOiBWZWMyLCBvdXQgPSBNYXQzLmlkZW50aXR5KCkpOiBNYXQzIHtcbiAgLy8gQXBwbHkgcm90YXRpb25cbiAgVEVNUF9NQVQzLnNldChNQVQzX0lEKTtcbiAgVEVNUF9NQVQzWzBdID0gVEVNUF9NQVQzWzRdID0gTWF0aC5jb3Mocm90YXRlQW5nbGUpO1xuICBURU1QX01BVDNbMV0gPSBURU1QX01BVDNbM10gPSBNYXRoLnNpbihyb3RhdGVBbmdsZSk7XG4gIFRFTVBfTUFUM1szXSAqPSAtMTtcblxuICAvLyBBcHBseSBzY2FsaW5nXG4gIGNvbnN0IHNjYWxpbmcgPSBbLi4uc2NhbGVdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDI7ICsraSkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMjsgKytqKSB7XG4gICAgICBURU1QX01BVDNbMyAqIGkgKyBqXSAqPSBzY2FsaW5nW2ldO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGx5IHRyYW5zbGF0aW9uXG4gIG91dC5zZXQoVEVNUF9NQVQzKTtcbiAgb3V0LmNvcHkodHJhbnNsYXRlLCA2LCAwLCAyKTtcblxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV0dXJuIGEge0BsaW5rIE1hdDR9IGZvciBhIDNEIHBvaW50IHRyYW5zbGF0ZWQgYnkgKHgsIHksIHopLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0aW9uKHY6IFZlYzMsIG91dCA9IE1hdDQuaWRlbnRpdHkoKSk6IE1hdDQge1xuICBvdXQuc2V0KE1BVDRfSUQpO1xuICBvdXQuY29weSh2LCAxMiwgMCwgMyk7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZXR1cm4gYSB7QGxpbmsgTWF0NH0gZm9yIGEgM0QgcG9pbnQgc2NhbGVkIGJ5ICh4LCB5LCB6KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2FsaW5nKHY6IFZlYzMsIG91dCA9IE1hdDQuaWRlbnRpdHkoKSk6IE1hdDQge1xuICBjb25zdCBbeCwgeSwgel0gPSB2O1xuICBvdXQuc2V0KE1BVDRfSUQpO1xuICBvdXQuc2V0QXQoMCwgeCk7XG4gIG91dC5zZXRBdCg1LCB5KTtcbiAgb3V0LnNldEF0KDEwLCB6KTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJldHVybnMgYSB7QGxpbmsgTWF0NH0gZm9yIGEgcm90YXRpb24gYnkgYSB7QGxpbmsgUXVhdH0uICovXG5leHBvcnQgZnVuY3Rpb24gcm90YXRpb24ocTogUXVhdCwgb3V0ID0gTWF0NC5pZGVudGl0eSgpKTogTWF0NCB7XG4gIGNvbnN0IFt4LCB5LCB6LCB3XSA9IHE7XG4gIGNvbnN0IHh4ID0gKHggKiB4KSxcbiAgICB4eSA9ICh4ICogeSksXG4gICAgeHogPSAoeCAqIHopLFxuICAgIHl5ID0gKHkgKiB5KSxcbiAgICB5eiA9ICh5ICogeiksXG4gICAgenogPSAoeiAqIHopLFxuICAgIHd4ID0gKHcgKiB4KSxcbiAgICB3eSA9ICh3ICogeSksXG4gICAgd3ogPSAodyAqIHopO1xuXG4gIChURU1QX01BVDRbMF0gPSAxIC0gMiAqICh5eSArIHp6KSk7XG4gIChURU1QX01BVDRbMV0gPSAyICogKHh5ICsgd3opKTtcbiAgKFRFTVBfTUFUNFsyXSA9IDIgKiAoeHogLSB3eSkpO1xuICAoVEVNUF9NQVQ0WzRdID0gMiAqICh4eSAtIHd6KSk7XG4gIChURU1QX01BVDRbNV0gPSAxIC0gMiAqICh4eCArIHp6KSk7XG4gIChURU1QX01BVDRbNl0gPSAyICogKHl6ICsgd3gpKTtcbiAgKFRFTVBfTUFUNFs4XSA9IDIgKiAoeHogKyB3eSkpO1xuICAoVEVNUF9NQVQ0WzldID0gMiAqICh5eiAtIHd4KSk7XG4gIChURU1QX01BVDRbMTBdID0gMSAtIDIgKiAoeHggKyB5eSkpO1xuICAoVEVNUF9NQVQ0WzNdID0gVEVNUF9NQVQ0WzddID0gVEVNUF9NQVQ0WzExXSA9IFRFTVBfTUFUNFsxMl0gPSBURU1QX01BVDRbMTNdID0gVEVNUF9NQVQ0WzE0XSA9IDApO1xuICAoVEVNUF9NQVQ0WzE1XSA9IDEpO1xuXG4gIG91dC5zZXQoVEVNUF9NQVQ0KTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIEV4dHJhY3QgdGhlIHtAbGluayBWZWMzfSB0cmFuc2xhdGlvbiBjb21wb25lbnQgZnJvbSBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGlvbk9mKG06IE1hdDQsIG91dCA9IG5ldyBWZWMzKCkpOiBWZWMzIHtcbiAgb3V0LmNvcHkobSwgMCwgMTIsIDMpO1xuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBfc2NhbGluZ09mKG06IE1hdDQpOiBGbG9hdDY0QXJyYXkge1xuICBjb25zdCB2aWV3ID0gbWVtb3J5TWFuYWdlci52aWV3O1xuICBjb25zdCBzdGFydCA9IChtLmJ5dGVPZmZzZXQgLyBCWVRFU19QRVJfRkxPQVQ2NCkgfCAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDM7ICsraSkge1xuICAgIFRFTVBfVkVDM1tpXSA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAzOyArK2opIHtcbiAgICAgIFRFTVBfVkVDM1tpXSArPSB2aWV3W3N0YXJ0ICsgNCAqIGkgKyBqXSAqIHZpZXdbc3RhcnQgKyA0ICogaSArIGpdO1xuICAgIH1cbiAgICBURU1QX1ZFQzNbaV0gPSBNYXRoLnNxcnQoVEVNUF9WRUMzW2ldKTtcbiAgfVxuICByZXR1cm4gVEVNUF9WRUMzO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHtAbGluayBWZWMzfSBzY2FsaW5nIGNvbXBvbmVudHMgZnJvbSBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeFxuICogaW4gVFJTIG9yZGVyICg9IHRyYW5zbGF0aW9uICogcm90YXRpb24gKiBzY2FsZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2FsaW5nT2YobTogTWF0NCwgb3V0ID0gbmV3IFZlYzMoKSk6IFZlYzMge1xuICBvdXQuc2V0KF9zY2FsaW5nT2YobSkpO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHtAbGluayBRdWF0fSByb3RhdGlvbiBjb21wb25lbnRzIGZyb20gYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXhcbiAqIGluIFRSUyBvcmRlciAoPSB0cmFuc2xhdGlvbiAqIHJvdGF0aW9uICogc2NhbGUpLlxuICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Sb3RhdGlvbl9tYXRyaXgjUXVhdGVybmlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcm90YXRpb25PZih0cnM6IE1hdDQsIG91dCA9IFF1YXQuaWRlbnRpdHkoKSk6IFF1YXQge1xuICBjb25zdCBtID0gWy4uLnRyc107XG4gIGNvbnN0IFtzeCwgc3ksIHN6XSA9IF9zY2FsaW5nT2YodHJzKTtcbiAgY29uc3QgbTAwID0gbVswXSAvIHN4LCBtMTEgPSBtWzVdIC8gc3ksIG0yMiA9IG1bMTBdIC8gc3o7XG5cbiAgb3V0LnNldChbXG4gICAgY29weXNpZ24oTWF0aC5zcXJ0KE1hdGgubWF4KDAsIDEgKyBtMDAgLSBtMTEgLSBtMjIpKSAvIDIsIG1bNl0gLyBzeSAtIG1bOV0gLyBzeiksXG4gICAgY29weXNpZ24oTWF0aC5zcXJ0KE1hdGgubWF4KDAsIDEgLSBtMDAgKyBtMTEgLSBtMjIpKSAvIDIsIG1bOF0gLyBzeiAtIG1bMl0gLyBzeCksXG4gICAgY29weXNpZ24oTWF0aC5zcXJ0KE1hdGgubWF4KDAsIDEgLSBtMDAgLSBtMTEgKyBtMjIpKSAvIDIsIG1bMV0gLyBzeCAtIG1bNF0gLyBzeSksXG4gICAgTWF0aC5zcXJ0KE1hdGgubWF4KDAsIDEgKyBtMDAgKyBtMTEgKyBtMjIpKSAvIDJcbiAgXSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHtAbGluayBNYXQ0fSBmb3IgdHJhbnNmb3JtYXRpb24gaW4gVFJTIG9yZGVyICg9IHRyYW5zbGF0aW9uICogcm90YXRpb24gKiBzY2FsZSkuXG4gKiBAcmV0dXJucyBvdXQgPSB0cmFuc2xhdGlvbiAqIHJvdGF0aW9uICogc2NhbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWF0aW9uKHRyYW5zbGF0ZTogVmVjMywgcm90YXRlOiBRdWF0LCBzY2FsZTogVmVjMywgb3V0ID0gTWF0NC5pZGVudGl0eSgpKTogTWF0NCB7XG4gIC8vIEFwcGx5IHJvdGF0aW9uXG4gIHJvdGF0aW9uKHJvdGF0ZSwgb3V0KTtcbiAgY29uc3QgbSA9IFsuLi5vdXRdO1xuXG4gIC8vIEFwcGx5IHNjYWxpbmdcbiAgY29uc3Qgc2NhbGluZyA9IFsuLi5zY2FsZV07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAzOyArK2opIHtcbiAgICAgIG1bNCAqIGkgKyBqXSAqPSBzY2FsaW5nW2ldO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGx5IHRyYW5zbGF0aW9uXG4gIG91dC5zZXQobSk7XG4gIG91dC5jb3B5KHRyYW5zbGF0ZSwgMTIsIDAsIDMpO1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiBhIHtAbGluayBNYXQ0fSB0aGF0IGlzIGFzc3VtZWQgdG8gcmVwcmVzZW50IGEgdmFsaWQgdHJhbnNmb3JtYXRpb25cbiAqIGluIFRSUyBvcmRlciAoPSB0cmFuc2xhdGlvbiAqIHJvdGF0aW9uICogc2NhbGUpLlxuICogVGhpcyBmdW5jdGlvbiBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHtAbGluayBNYXQ0LmludmVydH0gYnkgdXNpbmcgdGhlIHByb3BlcnRpZXMgb2YgYSBUUlMgbWF0cml4LlxuICogQHJldHVybnMgb3V0ID0gTV4tMVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZVRSUyh0cnM6IE1hdDQsIG91dCA9IE1hdDQuaWRlbnRpdHkoKSk6IGJvb2xlYW4ge1xuICAvLyBBc3N1bWUgTSBpcyBhIFRSUyBtYXRyaXg6XG4gIC8vIE0gPSBUICogUiAqIFMgPSBbUlMgIHRdXG4gIC8vICAgICAgICAgICAgICAgICBbMCAgIDFdXG4gIC8vIFRoZW4gdGhlIGludmVyc2Ugb2YgTSBpczpcbiAgLy8gTV4tMSA9IFsoUlMpXi0xICAoUlMpXi0xICogLXRdXG4gIC8vICAgICAgICBbICAgMCAgICAgICAgICAgMSAgICAgXVxuICAvLyBXaGVyZTogKFJTKV4tMSA9IFNeLTEgKiBSXi0xID0gU14tMSAqIFJUID0gU14tMSAqICgoUlMpKFNeLTEpKVQgPSBTXi0xICogKFNeLTEpVCAqIChSUylUID0gU14tMSAqIFNeLTEgKiAoUlMpVFxuICB1c2luZyB0ID0gbmV3IFZlYzMoKTtcbiAgdC5jb3B5KHRycywgMCwgMTIsIDMpO1xuICBjb25zdCBzY2FsZSA9IF9zY2FsaW5nT2YodHJzKTtcblxuICBvdXQuY29weSh0cnMpO1xuICBvdXQudHJhbnNwb3NlKCk7XG4gIGNvbnN0IG0gPSBbLi4ub3V0XTtcbiAgbVszXSA9IG1bN10gPSBtWzExXSA9IDA7XG5cbiAgLy8gRXh0cmFjdCBTIGFuZCBwcmVtdWx0aXBseSBTXi0yID0gMS8oUypTKSB0byBvdXRwdXRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDM7ICsraikge1xuICAgICAgY29uc3QgZmFjdG9yID0gc2NhbGVbal0gKiBzY2FsZVtqXTtcbiAgICAgIGlmIChmYWN0b3IgPT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICBtWzQgKiBpICsgal0gKj0gMSAvIGZhY3RvcjtcbiAgICB9XG4gIH1cbiAgb3V0LnNldChtKTtcblxuICAvLyBXaXRoIG91dHB1dCA9IChSUyleLTEsIGFwcGx5IHRyYW5zbGF0aW9uID0gKG91dHB1dCAqIC10KSB0byBvdXRwdXRcbiAgdC5zY2FsZSgtMSkubXVsTWF0NChvdXQpO1xuICBvdXQuY29weSh0LCAxMiwgMCwgMyk7XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSB7QGxpbmsgTWF0NH0gb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4LlxuICogVG8gYXBwbHkgYSBnbFRGIG9ydGhvZ3JhcGhpYyBjYW1lcmEsIHVzZTogbGVmdCA9IC14bWFnLCByaWdodCA9IHhtYWcsIGJvdHRvbSA9IC15bWFnLCB0b3AgPSB5bWFnLlxuICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcnRob2dyYXBoaWNfcHJvamVjdGlvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvdHJlZS9tYXN0ZXIvc3BlY2lmaWNhdGlvbi8yLjBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9ydGhvKFxuICBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCB0b3A6IG51bWJlciwgem5lYXI6IG51bWJlciwgemZhcjogbnVtYmVyLCBvdXQgPSBNYXQ0LmlkZW50aXR5KClcbik6IE1hdDQge1xuICBjb25zdCB4ID0gMSAvIChyaWdodCAtIGxlZnQpO1xuICBjb25zdCB5ID0gMSAvICh0b3AgLSBib3R0b20pO1xuICBjb25zdCB6ID0gMSAvICh6bmVhciAtIHpmYXIpO1xuXG4gIFRFTVBfTUFUNC5zZXQoTUFUNF9JRCk7XG4gIFRFTVBfTUFUNFswXSA9IDIgKiB4O1xuICBURU1QX01BVDRbNV0gPSAyICogeTtcbiAgVEVNUF9NQVQ0WzEwXSA9IDIgKiB6O1xuICBURU1QX01BVDRbMTJdID0gLShyaWdodCArIGxlZnQpICogeDtcbiAgVEVNUF9NQVQ0WzEzXSA9IC0odG9wICsgYm90dG9tKSAqIHk7XG4gIFRFTVBfTUFUNFsxNF0gPSAoem5lYXIgKyB6ZmFyKSAqIHo7XG4gIG91dC5zZXQoVEVNUF9NQVQ0KTtcblxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUge0BsaW5rIE1hdDR9IHBlcnNwZWN0aXZlIHByb2plY3Rpb24gdXNpbmcgZ2xURidzIGZvcm11bGEuIFVzZSBpbmZpbml0ZSBwcm9qZWN0aW9uIGlmIHpmYXIgPSBJbmZpbml0eS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL3RyZWUvbWFzdGVyL3NwZWNpZmljYXRpb24vMi4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZXJzcGVjdGl2ZShhc3BlY3Q6IG51bWJlciwgeWZvdjogbnVtYmVyLCB6bmVhcjogbnVtYmVyLCB6ZmFyOiBudW1iZXIsIG91dCA9IE1hdDQuaWRlbnRpdHkoKSk6IE1hdDQge1xuICBjb25zdCBmID0gMSAvIE1hdGgudGFuKHlmb3YgLyAyKTtcblxuICBURU1QX01BVDQuc2V0KE1BVDRfSUQpO1xuICBURU1QX01BVDRbMF0gPSBmIC8gYXNwZWN0O1xuICBURU1QX01BVDRbNV0gPSBmO1xuICBURU1QX01BVDRbMTFdID0gLTE7XG4gIFRFTVBfTUFUNFsxNV0gPSAwO1xuXG4gIGlmIChpc0Zpbml0ZSh6ZmFyKSkge1xuICAgIGNvbnN0IHJhbmdlSW52ID0gMSAvICh6bmVhciAtIHpmYXIpO1xuICAgIFRFTVBfTUFUNFsxMF0gPSAoem5lYXIgKyB6ZmFyKSAqIHJhbmdlSW52O1xuICAgIFRFTVBfTUFUNFsxNF0gPSAyICogem5lYXIgKiB6ZmFyICogcmFuZ2VJbnY7XG4gIH0gZWxzZSB7XG4gICAgVEVNUF9NQVQ0WzEwXSA9IC0xO1xuICAgIFRFTVBfTUFUNFsxNF0gPSAtMiAqIHpuZWFyO1xuICB9XG5cbiAgb3V0LnNldChURU1QX01BVDQpO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogQ2FsY3VsYXRlIHRoZSB7QGxpbmsgTWF0NH0gcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBmcm9tIGEgdmlld3BvcnQuIFVzZSBpbmZpbml0ZSBwcm9qZWN0aW9uIGlmIHpmYXIgPSBJbmZpbml0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZXJzcGVjdGl2ZVZpZXdwb3J0KFxuICBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCB0b3A6IG51bWJlciwgem5lYXI6IG51bWJlciwgemZhcjogbnVtYmVyLCBvdXQgPSBNYXQ0LmlkZW50aXR5KClcbik6IE1hdDQge1xuICBjb25zdCB4ID0gMSAvIChyaWdodCAtIGxlZnQpO1xuICBjb25zdCB5ID0gMSAvICh0b3AgLSBib3R0b20pO1xuXG4gIFRFTVBfTUFUNC5zZXQoTUFUNF9JRCk7XG4gIFRFTVBfTUFUNFswXSA9IDIgKiB6bmVhciAqIHg7XG4gIFRFTVBfTUFUNFs1XSA9IDIgKiB6bmVhciAqIHk7XG4gIFRFTVBfTUFUNFs4XSA9IChyaWdodCArIGxlZnQpICogeDtcbiAgVEVNUF9NQVQ0WzldID0gKHRvcCArIGJvdHRvbSkgKiB5O1xuICBURU1QX01BVDRbMTFdID0gLTE7XG4gIFRFTVBfTUFUNFsxNV0gPSAwO1xuXG4gIGlmIChpc0Zpbml0ZSh6ZmFyKSkge1xuICAgIGNvbnN0IHJhbmdlSW52ID0gMSAvICh6bmVhciAtIHpmYXIpO1xuICAgIFRFTVBfTUFUNFsxMF0gPSAoem5lYXIgKyB6ZmFyKSAqIHJhbmdlSW52O1xuICAgIFRFTVBfTUFUNFsxNF0gPSAyICogem5lYXIgKiB6ZmFyICogcmFuZ2VJbnY7XG4gIH0gZWxzZSB7XG4gICAgVEVNUF9NQVQ0WzEwXSA9IC0xO1xuICAgIFRFTVBfTUFUNFsxNF0gPSAtMiAqIHpuZWFyO1xuICB9XG5cbiAgb3V0LnNldChURU1QX01BVDQpO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUge0BsaW5rIE1hdDR9IG1vZGVsIG1hdHJpeCBmb3IgYSBjYW1lcmEgYXQgZXllIHBvc2l0aW9uIGxvb2tpbmcgYXQgdGhlIGNlbnRlclxuICogcG9zaXRpb24gd2l0aCBhIGdpdmVuIHVwIGRpcmVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRvKGV5ZTogVmVjMywgY2VudGVyOiBWZWMzLCB1cDogVmVjMywgb3V0ID0gTWF0NC5pZGVudGl0eSgpKTogTWF0NCB7XG4gIHVzaW5nIHYgPSBuZXcgVmVjMygpLCBuID0gbmV3IFZlYzMoKSwgdSA9IG5ldyBWZWMzKCk7XG4gIHYuY29weShleWUpO1xuICB2LnN1YihjZW50ZXIpLm5vcm1hbGl6ZSgpO1xuICBuLmNvcHkodXApO1xuICBuLmNyb3NzKHYpLm5vcm1hbGl6ZSgpO1xuICB1LmNvcHkodik7XG4gIHUuY3Jvc3Mobikubm9ybWFsaXplKCk7XG5cbiAgb3V0LnNldChNQVQ0X0lEKTtcbiAgb3V0LmNvcHkobiwgMCwgMCwgMyk7XG4gIG91dC5jb3B5KHUsIDQsIDAsIDMpO1xuICBvdXQuY29weSh2LCA4LCAwLCAzKTtcbiAgb3V0LmNvcHkoZXllLCAxMiwgMCwgMyk7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSB7QGxpbmsgTWF0NH0gdmlldyBtYXRyaXggZm9yIGEgY2FtZXJhIGF0IGV5ZSBwb3NpdGlvbiBsb29raW5nIGF0IHRoZSBjZW50ZXJcbiAqIHBvc2l0aW9uIHdpdGggYSBnaXZlbiB1cCBkaXJlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb29rQXQoZXllOiBWZWMzLCBjZW50ZXI6IFZlYzMsIHVwOiBWZWMzLCBvdXQgPSBNYXQ0LmlkZW50aXR5KCkpOiBNYXQ0IHtcbiAgdXNpbmcgdiA9IG5ldyBWZWMzKCksIG4gPSBuZXcgVmVjMygpLCB1ID0gbmV3IFZlYzMoKTtcbiAgdi5jb3B5KGNlbnRlcik7XG4gIHYuc3ViKGV5ZSkubm9ybWFsaXplKCk7XG4gIG4uY29weSh2KTtcbiAgbi5jcm9zcyh1cCkubm9ybWFsaXplKCk7XG4gIHUuY29weShuKTtcbiAgdS5jcm9zcyh2KS5ub3JtYWxpemUoKTtcblxuICBjb25zdCBtID0gWy4uLnYsIC4uLm4sIC4uLnVdO1xuICBURU1QX01BVDRbMF0gPSBtWzNdO1xuICBURU1QX01BVDRbMV0gPSBtWzZdO1xuICBURU1QX01BVDRbMl0gPSAtbVswXTtcbiAgVEVNUF9NQVQ0WzRdID0gbVs0XTtcbiAgVEVNUF9NQVQ0WzVdID0gbVs3XTtcbiAgVEVNUF9NQVQ0WzZdID0gLW1bMV07XG4gIFRFTVBfTUFUNFs4XSA9IG1bNV07XG4gIFRFTVBfTUFUNFs5XSA9IG1bOF07XG4gIFRFTVBfTUFUNFsxMF0gPSAtbVsyXTtcbiAgVEVNUF9NQVQ0WzEyXSA9IC1uLmRvdChleWUpO1xuICBURU1QX01BVDRbMTNdID0gLXUuZG90KGV5ZSk7XG4gIFRFTVBfTUFUNFsxNF0gPSB2LmRvdChleWUpO1xuICBURU1QX01BVDRbM10gPSBURU1QX01BVDRbN10gPSBURU1QX01BVDRbMTFdID0gMDtcbiAgVEVNUF9NQVQ0WzE1XSA9IDE7XG4gIG91dC5zZXQoVEVNUF9NQVQ0KTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGxvb2stYXQgZGlyZWN0aW9uIHtAbGluayBWZWMzfSB2ZWN0b3IgZnJvbSBwaXRjaCAodXAvZG93bikgYW5kIHlhdyAobGVmdC9yaWdodCkgYW5nbGVzIGluIHJhZGlhbnMuXG4gKiBJdCBsb29rcyB0b3dhcmRzIC1aIGF4aXMgd2hlbiBwaXRjaCA9IDAgYW5kIHlhdyA9IDAuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHdpdGggbG9va0F0IG1ldGhvZCB0byBidWlsZCBhbiBGUFMgY2FtZXJhIHZpZXcgbWF0cml4IGJ5OlxuICogdmlld01hdHJpeCA9IGxvb2tBdChleWUsIGxvb2tBdERpcih5YXcsIHBpdGNoKS5hZGQoZXllKSwgbmV3IFZlYzMoMCwgMSwgMCkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9va0F0RGlyKHBpdGNoOiBudW1iZXIsIHlhdzogbnVtYmVyLCBvdXQgPSBuZXcgVmVjMygpKTogVmVjMyB7XG4gIGNvbnN0IG5lZ0Nvc1BpdGNoID0gLU1hdGguY29zKHBpdGNoKTtcbiAgVEVNUF9WRUMzWzBdID0gbmVnQ29zUGl0Y2ggKiBNYXRoLnNpbih5YXcpO1xuICBURU1QX1ZFQzNbMV0gPSBNYXRoLnNpbihwaXRjaCk7XG4gIFRFTVBfVkVDM1syXSA9IG5lZ0Nvc1BpdGNoICogTWF0aC5jb3MoeWF3KTtcbiAgb3V0LnNldChURU1QX1ZFQzMpO1xuICByZXR1cm4gb3V0O1xufVxuIl0sIm1hcHBpbmdzIjoiczNCQUFTQSxRQUFRLDJCQUNSQyxJQUFJLENBQUVDLElBQUksdUJBQ1ZDLGlCQUFpQixDQUFFQyxhQUFhLDBCQUNoQ0MsSUFBSSx3QkFDRUMsSUFBSSxnQkFFbkIsS0FBTSxDQUFBQyxTQUFTLENBQUcsR0FBSSxDQUFBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQ3JDLEtBQU0sQ0FBQUMsU0FBUyxDQUFHLEdBQUksQ0FBQUQsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNyQyxLQUFNLENBQUFFLFNBQVMsQ0FBRyxHQUFJLENB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LElBQUksQ0FBQ3lDLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFHSCxHQUFHLENBQUdDLEdBQUcsQ0FBR0MsR0FBRyxDQUFDLENBQUMsQ0FBRyxDQUFDLENBQUVkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBR1UsRUFBRSxDQUFHVixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUdXLEVBQUUsQ0FBQyxDQUNoRjdELFFBQVEsQ0FBQ3dCLElBQUksQ0FBQytCLElBQUksQ0FBQy9CLElBQUksQ0FBQ3lDLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFHSCxHQUFHLENBQUdDLEdBQUcsQ0FBR0MsR0FBRyxDQUFDLENBQUMsQ0FBRyxDQUFDLENBQUVkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBR1csRUFBRSxDQUFHWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUdTLEVBQUUsQ0FBQyxDQUNoRjNELFFBQVEsQ0FBQ3dCLElBQUksQ0FBQytCLElBQUksQ0FBQy9CLElBQUksQ0FBQ3lDLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFHSCxHQUFHLENBQUdDLEdBQUcsQ0FBR0MsR0FBRyxDQUFDLENBQUMsQ0FBRyxDQUFDLENBQUVkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBR1MsRUFBRSxDQUFHVCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUdVLEVBQUUsQ0FBQyxDQUNoRnBDLElBQUksQ0FBQytCLElBQUksQ0FBQy9CLElBQUksQ0FBQ3lDLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFHSCxHQUFHLENBQUdDLEdBQUcsQ0FBR0MsR0FBRyxDQUFDLENBQUMsQ0FBRyxDQUFDLENBQ2hELENBQUMsQ0FDRixNQUFPLENBQUFqRCxHQUNULENBTUEsTUFBTyxTQUFTLENBQUFtRCxjQUFjQSxDQUFDdEMsU0FBZSxDQUFFdUMsTUFBWSxDQUFFckMsS0FBVyxDQUFFZixHQUFHLENBQUdiLElBQUksQ0FBQ2MsUUFBUSxDQUFDLENBQUMsQ0FBUSxDQUV0R3FCLFFBQVEsQ0FBQzhCLE1BQU0sQ0FBRXBELEdBQUcs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QUMsQ0FBQyxDQUNuQnhDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBRyxDQUFDd0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNwQnhDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBR3dDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkJ4QyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUd3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25CeEMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFHLENBQUN3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3JCeEMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFHLENBQUN5RixDQUFDLENBQUNNLEdBQUcsQ0FBQ1YsR0FBRyxDQUFDLENBQzNCckYsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFHLENBQUM4RCxDQUFDLENBQUNpQyxHQUFHLENBQUNWLEdBQUcsQ0FBQyxDQUMzQnJGLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBR0ksQ0FBQyxDQUFDMkYsR0FBRyxDQUFDVixHQUFHLENBQUMsQ0FDMUJyRixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUdBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBR0EsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFHLENBQUMsQ0FDL0NBLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBRyxDQUFDLENBQ2pCSyxHQUFHLENBQUNFLEdBQUcsQ0FBQ1AsU0FBUyxDQUFDLENBQ2xCLE1BQU8sQ0FBQUssR0FBSSxPQUFBNkQsQ0FBQSxFQUFBNEIsVUFBQSxDQUFBM0IsQ0FBQSxDQUFBRCxDQUFBLFNBQUE0QixVQUFBLENBQUExQixDQUFBLEdBQ1osQ0FRRCxNQUFPLFNBQVMsQ0FBQTRCLFNBQVNBLENBQUNDLEtBQWEsQ0FBRUMsR0FBVyxDQUFFN0YsR0FBRyxDQUFHLEdBQUksQ0FBQVQsSUFBTSxDQUFRLENBQzVFLEtBQU0sQ0FBQXVHLFdBQVcsQ0FBRyxDQUFDckYsSUFBSSxDQUFDQyxHQUFHLENBQUNrRixLQUFLLENBQUMsQ0FDcENwRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUdzRyxXQUFXLENBQUdyRixJQUFJLENBQUNFLEdBQUcsQ0FBQ2tGLEdBQUcsQ0FBQyxDQUMxQ3JHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBR2lCLElBQUksQ0FBQ0UsR0FBRyxDQUFDaUYsS0FBSyxDQUFDLENBQzlCcEcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFHc0csV0FBVyxDQUFHckYsSUFBSSxDQUFDQyxHQUFHLENBQUNtRixHQUFHLENBQUMsQ0FDMUM3RixHQUFHLENBQUNFLEdBQUcsQ0FBQ1YsU0FBUyxDQUFDLENBQ2xCLE1BQU8sQ0FBQVEsR0FDVCIsImlnbm9yZUxpc3QiOltdfQ==